From fa095a4504cbe668e4244547e2c141597bea4ecf Mon Sep 17 00:00:00 2001 From: Andreas Rottmann Date: Mon, 14 Sep 2009 12:32:44 +0200 Subject: Imported Upstream version 0.9.1 --- AUTHORS | 1 + BUGS | 6 + COPYING | 674 + COPYING.LIB | 165 + ChangeLog | 540 + DEPENDENCIES | 17 + HACKING | 84 + INSTALL | 314 + Makefile.am | 41 + Makefile.in | 1158 + NEWS | 9 + README | 69 + README.woe32 | 40 + THANKS | 3 + aclocal.m4 | 1558 + autogen.sh | 452 + build-aux/compile | 142 + build-aux/config.guess | 1533 + build-aux/config.rpath | 672 + build-aux/config.sub | 1693 + build-aux/depcomp | 589 + build-aux/fixaclocal | 35 + build-aux/install-sh | 519 + build-aux/link-warning.h | 28 + build-aux/ltmain.sh | 8526 +++ build-aux/mdate-sh | 205 + build-aux/missing | 367 + build-aux/run-test | 139 + build-aux/texi2html | 19554 ++++++ build-aux/texinfo.tex | 8997 +++ build-aux/windres-options | 45 + config.h.in | 676 + configure | 41717 +++++++++++++ configure.ac | 153 + doc/Makefile.am | 185 + doc/Makefile.in | 1207 + doc/fdl.texi | 506 + doc/gpl.texi | 717 + doc/lgpl.texi | 190 + doc/libunistring.info | 6200 ++ doc/libunistring.texi | 989 + doc/libunistring_1.html | 531 + doc/libunistring_10.html | 192 + doc/libunistring_11.html | 200 + doc/libunistring_12.html | 507 + doc/libunistring_13.html | 611 + doc/libunistring_14.html | 87 + doc/libunistring_15.html | 232 + doc/libunistring_16.html | 93 + doc/libunistring_17.html | 1526 + doc/libunistring_18.html | 770 + doc/libunistring_19.html | 188 + doc/libunistring_2.html | 141 + doc/libunistring_3.html | 107 + doc/libunistring_4.html | 864 + doc/libunistring_5.html | 296 + doc/libunistring_6.html | 451 + doc/libunistring_7.html | 125 + doc/libunistring_8.html | 2071 + doc/libunistring_9.html | 141 + doc/libunistring_abt.html | 167 + doc/libunistring_toc.html | 164 + doc/stamp-vti | 4 + doc/unicase.texi | 364 + doc/uniconv.texi | 157 + doc/unictype.texi | 1145 + doc/unilbrk.texi | 88 + doc/uniname.texi | 32 + doc/uninorm.texi | 299 + doc/uniregex.texi | 5 + doc/unistdio.texi | 197 + doc/unistr.texi | 493 + doc/unitypes.texi | 15 + doc/uniwbrk.texi | 71 + doc/uniwidth.texi | 43 + doc/version.texi | 4 + gnulib-local/Makefile.am | 30 + gnulib-local/Makefile.in | 783 + gnulib-local/lib/unicase.h.diff | 19 + gnulib-local/lib/uniconv.h.diff | 28 + gnulib-local/lib/unictype.h.diff | 24 + gnulib-local/lib/unilbrk.h.diff | 19 + gnulib-local/lib/uninorm.h.diff | 14 + gnulib-local/lib/unistr.h.diff | 24 + gnulib-local/lib/unitypes.h.diff | 19 + gnulib-local/lib/uniwidth.h.diff | 19 + .../modules/unictype/category-none-tests.diff | 14 + gnulib-m4/00gnulib.m4 | 30 + gnulib-m4/alloca.m4 | 46 + gnulib-m4/codeset.m4 | 21 + gnulib-m4/eealloc.m4 | 32 + gnulib-m4/environ.m4 | 36 + gnulib-m4/errno_h.m4 | 115 + gnulib-m4/error.m4 | 22 + gnulib-m4/exitfail.m4 | 13 + gnulib-m4/exponentd.m4 | 114 + gnulib-m4/exponentf.m4 | 91 + gnulib-m4/exponentl.m4 | 97 + gnulib-m4/extensions.m4 | 104 + gnulib-m4/float_h.m4 | 19 + gnulib-m4/fpieee.m4 | 52 + gnulib-m4/frexp.m4 | 146 + gnulib-m4/frexpl.m4 | 186 + gnulib-m4/getpagesize.m4 | 29 + gnulib-m4/glibc21.m4 | 30 + gnulib-m4/gnulib-cache.m4 | 373 + gnulib-m4/gnulib-common.m4 | 124 + gnulib-m4/gnulib-comp.m4 | 1602 + gnulib-m4/iconv.m4 | 180 + gnulib-m4/iconv_h.m4 | 34 + gnulib-m4/iconv_open.m4 | 237 + gnulib-m4/include_next.m4 | 187 + gnulib-m4/inline.m4 | 40 + gnulib-m4/intlmacosx.m4 | 51 + gnulib-m4/intmax_t.m4 | 61 + gnulib-m4/inttypes_h.m4 | 26 + gnulib-m4/isnand.m4 | 95 + gnulib-m4/isnanf.m4 | 179 + gnulib-m4/isnanl.m4 | 245 + gnulib-m4/lcmessage.m4 | 30 + gnulib-m4/ldexpl.m4 | 88 + gnulib-m4/lib-ld.m4 | 110 + gnulib-m4/lib-link.m4 | 764 + gnulib-m4/lib-prefix.m4 | 224 + gnulib-m4/localcharset.m4 | 16 + gnulib-m4/locale-fr.m4 | 185 + gnulib-m4/locale-ja.m4 | 107 + gnulib-m4/locale-tr.m4 | 97 + gnulib-m4/locale-zh.m4 | 92 + gnulib-m4/locale_h.m4 | 22 + gnulib-m4/localename.m4 | 12 + gnulib-m4/longlong.m4 | 106 + gnulib-m4/malloc.m4 | 41 + gnulib-m4/malloca.m4 | 14 + gnulib-m4/math_h.m4 | 103 + gnulib-m4/mbchar.m4 | 13 + gnulib-m4/mbiter.m4 | 17 + gnulib-m4/mbrtowc.m4 | 383 + gnulib-m4/mbsinit.m4 | 30 + gnulib-m4/mbstate_t.m4 | 34 + gnulib-m4/memchr.m4 | 86 + gnulib-m4/minmax.m4 | 41 + gnulib-m4/mmap-anon.m4 | 59 + gnulib-m4/multiarch.m4 | 65 + gnulib-m4/nocrash.m4 | 102 + gnulib-m4/printf-frexp.m4 | 45 + gnulib-m4/printf-frexpl.m4 | 64 + gnulib-m4/printf.m4 | 1416 + gnulib-m4/relocatable-lib.m4 | 56 + gnulib-m4/setenv.m4 | 71 + gnulib-m4/signbit.m4 | 287 + gnulib-m4/size_max.m4 | 75 + gnulib-m4/stdbool.m4 | 115 + gnulib-m4/stdint.m4 | 472 + gnulib-m4/stdint_h.m4 | 26 + gnulib-m4/stdlib_h.m4 | 73 + gnulib-m4/strerror.m4 | 68 + gnulib-m4/string_h.m4 | 94 + gnulib-m4/unistd_h.m4 | 83 + gnulib-m4/vasnprintf.m4 | 276 + gnulib-m4/wchar.m4 | 100 + gnulib-m4/wchar_t.m4 | 20 + gnulib-m4/wctob.m4 | 91 + gnulib-m4/wctype.m4 | 74 + gnulib-m4/wcwidth.m4 | 85 + gnulib-m4/wint_t.m4 | 28 + gnulib-m4/xalloc.m4 | 24 + gnulib-m4/xsize.m4 | 13 + lib/Makefile.am | 297 + lib/Makefile.gnulib | 4655 ++ lib/Makefile.in | 4285 ++ lib/alloca.in.h | 56 + lib/array-mergesort.h | 274 + lib/c-ctype.c | 396 + lib/c-ctype.h | 295 + lib/c-strcase.h | 55 + lib/c-strcasecmp.c | 57 + lib/c-strcaseeq.h | 184 + lib/c-strncasecmp.c | 57 + lib/config.charset | 683 + lib/declared.sh | 135 + lib/errno.in.h | 160 + lib/exported.sh.in | 24 + lib/float+.h | 148 + lib/float.in.h | 62 + lib/fpucw.h | 107 + lib/frexp.c | 166 + lib/frexpl.c | 18 + lib/fseterr.c | 74 + lib/fseterr.h | 37 + lib/getpagesize.c | 39 + lib/iconv.in.h | 71 + lib/iconv_open-aix.gperf | 44 + lib/iconv_open-aix.h | 256 + lib/iconv_open-hpux.gperf | 56 + lib/iconv_open-hpux.h | 299 + lib/iconv_open-irix.gperf | 31 + lib/iconv_open-irix.h | 199 + lib/iconv_open-osf.gperf | 50 + lib/iconv_open-osf.h | 278 + lib/iconv_open.c | 172 + lib/iconveh.h | 41 + lib/isnan.c | 161 + lib/isnand-nolibm.h | 33 + lib/isnand.c | 19 + lib/isnanf-nolibm.h | 33 + lib/isnanf.c | 20 + lib/isnanl-nolibm.h | 33 + lib/isnanl.c | 20 + lib/libunistring.rc | 38 + lib/libunistring.sym | 559 + lib/localcharset.c | 499 + lib/localcharset.h | 41 + lib/localename.c | 1692 + lib/localename.h | 77 + lib/malloc.c | 57 + lib/malloca.c | 137 + lib/malloca.h | 134 + lib/malloca.valgrind | 7 + lib/math.in.h | 567 + lib/mbchar.c | 35 + lib/mbchar.h | 350 + lib/mbiter.h | 215 + lib/mbrtowc.c | 386 + lib/mbsinit.c | 47 + lib/mbsnlen.c | 45 + lib/memchr.c | 172 + lib/memchr.valgrind | 14 + lib/memcmp2.c | 36 + lib/memcmp2.h | 39 + lib/memxfrm.c | 137 + lib/memxfrm.h | 48 + lib/minmax.h | 60 + lib/printf-args.c | 187 + lib/printf-args.h | 154 + lib/printf-frexp.c | 188 + lib/printf-frexp.h | 23 + lib/printf-frexpl.c | 18 + lib/printf-frexpl.h | 23 + lib/printf-parse.c | 627 + lib/printf-parse.h | 179 + lib/ref-add.sin | 30 + lib/ref-del.sin | 25 + lib/relocatable.c | 493 + lib/relocatable.h | 83 + lib/signbitd.c | 64 + lib/signbitf.c | 64 + lib/signbitl.c | 64 + lib/size_max.h | 31 + lib/stdbool.in.h | 119 + lib/stdint.in.h | 567 + lib/stdint.mini.h | 128 + lib/stdio-impl.h | 94 + lib/stdlib.in.h | 383 + lib/streq.h | 176 + lib/striconveh.c | 1251 + lib/striconveh.h | 120 + lib/striconveha.c | 348 + lib/striconveha.h | 95 + lib/string.in.h | 620 + lib/unicase.h | 457 + lib/unicase/cased.c | 53 + lib/unicase/cased.h | 343 + lib/unicase/casefold.h | 22 + lib/unicase/caseprop.h | 32 + lib/unicase/context.h | 65 + lib/unicase/empty-prefix-context.c | 27 + lib/unicase/empty-suffix-context.c | 27 + lib/unicase/ignorable.c | 71 + lib/unicase/ignorable.h | 544 + lib/unicase/invariant.h | 45 + lib/unicase/locale-language.c | 55 + lib/unicase/locale-languages.gperf | 270 + lib/unicase/locale-languages.h | 1034 + lib/unicase/simple-mapping.h | 39 + lib/unicase/special-casing-table.gperf | 136 + lib/unicase/special-casing-table.h | 339 + lib/unicase/special-casing.c | 25 + lib/unicase/special-casing.h | 60 + lib/unicase/tocasefold.c | 27 + lib/unicase/tocasefold.h | 567 + lib/unicase/tolower.c | 27 + lib/unicase/tolower.h | 567 + lib/unicase/totitle.c | 27 + lib/unicase/totitle.h | 615 + lib/unicase/toupper.c | 27 + lib/unicase/toupper.h | 615 + lib/unicase/u-casecmp.h | 69 + lib/unicase/u-casecoll.h | 68 + lib/unicase/u-casefold.h | 28 + lib/unicase/u-casemap.h | 416 + lib/unicase/u-casexfrm.h | 88 + lib/unicase/u-ct-casefold.h | 107 + lib/unicase/u-ct-totitle.h | 501 + lib/unicase/u-is-cased.h | 128 + lib/unicase/u-is-invariant.h | 64 + lib/unicase/u-totitle.h | 28 + lib/unicase/u16-casecmp.c | 35 + lib/unicase/u16-casecoll.c | 32 + lib/unicase/u16-casefold.c | 26 + lib/unicase/u16-casemap.c | 40 + lib/unicase/u16-casexfrm.c | 35 + lib/unicase/u16-ct-casefold.c | 35 + lib/unicase/u16-ct-tolower.c | 40 + lib/unicase/u16-ct-totitle.c | 43 + lib/unicase/u16-ct-toupper.c | 40 + lib/unicase/u16-is-cased.c | 36 + lib/unicase/u16-is-casefolded.c | 30 + lib/unicase/u16-is-invariant.c | 33 + lib/unicase/u16-is-lowercase.c | 30 + lib/unicase/u16-is-titlecase.c | 30 + lib/unicase/u16-is-uppercase.c | 30 + lib/unicase/u16-tolower.c | 39 + lib/unicase/u16-totitle.c | 27 + lib/unicase/u16-toupper.c | 39 + lib/unicase/u32-casecmp.c | 35 + lib/unicase/u32-casecoll.c | 32 + lib/unicase/u32-casefold.c | 26 + lib/unicase/u32-casemap.c | 40 + lib/unicase/u32-casexfrm.c | 35 + lib/unicase/u32-ct-casefold.c | 35 + lib/unicase/u32-ct-tolower.c | 40 + lib/unicase/u32-ct-totitle.c | 43 + lib/unicase/u32-ct-toupper.c | 40 + lib/unicase/u32-is-cased.c | 36 + lib/unicase/u32-is-casefolded.c | 30 + lib/unicase/u32-is-invariant.c | 33 + lib/unicase/u32-is-lowercase.c | 30 + lib/unicase/u32-is-titlecase.c | 30 + lib/unicase/u32-is-uppercase.c | 30 + lib/unicase/u32-tolower.c | 39 + lib/unicase/u32-totitle.c | 26 + lib/unicase/u32-toupper.c | 39 + lib/unicase/u8-casecmp.c | 35 + lib/unicase/u8-casecoll.c | 32 + lib/unicase/u8-casefold.c | 107 + lib/unicase/u8-casemap.c | 40 + lib/unicase/u8-casexfrm.c | 35 + lib/unicase/u8-ct-casefold.c | 35 + lib/unicase/u8-ct-tolower.c | 40 + lib/unicase/u8-ct-totitle.c | 43 + lib/unicase/u8-ct-toupper.c | 40 + lib/unicase/u8-is-cased.c | 36 + lib/unicase/u8-is-casefolded.c | 30 + lib/unicase/u8-is-invariant.c | 33 + lib/unicase/u8-is-lowercase.c | 30 + lib/unicase/u8-is-titlecase.c | 30 + lib/unicase/u8-is-uppercase.c | 30 + lib/unicase/u8-tolower.c | 120 + lib/unicase/u8-totitle.c | 107 + lib/unicase/u8-toupper.c | 120 + lib/unicase/ulc-casecmp.c | 74 + lib/unicase/ulc-casecoll.c | 31 + lib/unicase/ulc-casexfrm.c | 64 + lib/unicase/unicasemap.h | 52 + lib/uniconv.h | 169 + lib/uniconv/u-conv-from-enc.h | 91 + lib/uniconv/u-conv-to-enc.h | 156 + lib/uniconv/u-strconv-from-enc.h | 40 + lib/uniconv/u-strconv-to-enc.h | 63 + lib/uniconv/u16-conv-from-enc.c | 47 + lib/uniconv/u16-conv-to-enc.c | 177 + lib/uniconv/u16-strconv-from-enc.c | 34 + lib/uniconv/u16-strconv-from-locale.c | 29 + lib/uniconv/u16-strconv-to-enc.c | 50 + lib/uniconv/u16-strconv-to-locale.c | 29 + lib/uniconv/u32-conv-from-enc.c | 46 + lib/uniconv/u32-conv-to-enc.c | 49 + lib/uniconv/u32-strconv-from-enc.c | 34 + lib/uniconv/u32-strconv-from-locale.c | 29 + lib/uniconv/u32-strconv-to-enc.c | 49 + lib/uniconv/u32-strconv-to-locale.c | 29 + lib/uniconv/u8-conv-from-enc.c | 105 + lib/uniconv/u8-conv-to-enc.c | 92 + lib/uniconv/u8-strconv-from-enc.c | 34 + lib/uniconv/u8-strconv-from-locale.c | 29 + lib/uniconv/u8-strconv-to-enc.c | 79 + lib/uniconv/u8-strconv-to-locale.c | 29 + lib/unictype.h | 720 + lib/unictype/bidi_byname.c | 171 + lib/unictype/bidi_name.c | 35 + lib/unictype/bidi_of.c | 52 + lib/unictype/bidi_of.h | 789 + lib/unictype/bidi_test.c | 27 + lib/unictype/bitmap.h | 47 + lib/unictype/block_test.c | 31 + lib/unictype/blocks.c | 62 + lib/unictype/blocks.h | 952 + lib/unictype/categ_C.c | 27 + lib/unictype/categ_C.h | 890 + lib/unictype/categ_Cc.c | 27 + lib/unictype/categ_Cc.h | 156 + lib/unictype/categ_Cf.c | 27 + lib/unictype/categ_Cf.h | 452 + lib/unictype/categ_Cn.c | 27 + lib/unictype/categ_Cn.h | 1014 + lib/unictype/categ_Co.c | 27 + lib/unictype/categ_Co.h | 310 + lib/unictype/categ_Cs.c | 30 + lib/unictype/categ_Cs.h | 156 + lib/unictype/categ_L.c | 27 + lib/unictype/categ_L.h | 580 + lib/unictype/categ_Ll.c | 27 + lib/unictype/categ_Ll.h | 335 + lib/unictype/categ_Lm.c | 27 + lib/unictype/categ_Lm.h | 216 + lib/unictype/categ_Lo.c | 27 + lib/unictype/categ_Lo.h | 568 + lib/unictype/categ_Lt.c | 27 + lib/unictype/categ_Lt.h | 160 + lib/unictype/categ_Lu.c | 27 + lib/unictype/categ_Lu.h | 331 + lib/unictype/categ_M.c | 27 + lib/unictype/categ_M.h | 528 + lib/unictype/categ_Mc.c | 27 + lib/unictype/categ_Mc.h | 331 + lib/unictype/categ_Me.c | 27 + lib/unictype/categ_Me.h | 168 + lib/unictype/categ_Mn.c | 27 + lib/unictype/categ_Mn.h | 528 + lib/unictype/categ_N.c | 27 + lib/unictype/categ_N.h | 403 + lib/unictype/categ_Nd.c | 27 + lib/unictype/categ_Nd.h | 351 + lib/unictype/categ_Nl.c | 27 + lib/unictype/categ_Nl.h | 307 + lib/unictype/categ_No.c | 27 + lib/unictype/categ_No.h | 355 + lib/unictype/categ_P.c | 27 + lib/unictype/categ_P.h | 403 + lib/unictype/categ_Pc.c | 27 + lib/unictype/categ_Pc.h | 164 + lib/unictype/categ_Pd.c | 27 + lib/unictype/categ_Pd.h | 180 + lib/unictype/categ_Pe.c | 27 + lib/unictype/categ_Pe.h | 196 + lib/unictype/categ_Pf.c | 27 + lib/unictype/categ_Pf.h | 164 + lib/unictype/categ_Pi.c | 27 + lib/unictype/categ_Pi.h | 164 + lib/unictype/categ_Po.c | 27 + lib/unictype/categ_Po.h | 387 + lib/unictype/categ_Ps.c | 27 + lib/unictype/categ_Ps.h | 196 + lib/unictype/categ_S.c | 27 + lib/unictype/categ_S.h | 427 + lib/unictype/categ_Sc.c | 27 + lib/unictype/categ_Sc.h | 188 + lib/unictype/categ_Sk.c | 27 + lib/unictype/categ_Sk.h | 176 + lib/unictype/categ_Sm.c | 27 + lib/unictype/categ_Sm.h | 331 + lib/unictype/categ_So.c | 27 + lib/unictype/categ_So.h | 403 + lib/unictype/categ_Z.c | 27 + lib/unictype/categ_Z.h | 172 + lib/unictype/categ_Zl.c | 30 + lib/unictype/categ_Zl.h | 156 + lib/unictype/categ_Zp.c | 30 + lib/unictype/categ_Zp.h | 156 + lib/unictype/categ_Zs.c | 27 + lib/unictype/categ_Zs.h | 172 + lib/unictype/categ_and.c | 45 + lib/unictype/categ_and_not.c | 42 + lib/unictype/categ_byname.c | 105 + lib/unictype/categ_name.c | 77 + lib/unictype/categ_none.c | 30 + lib/unictype/categ_of.c | 81 + lib/unictype/categ_of.h | 1088 + lib/unictype/categ_or.c | 42 + lib/unictype/categ_test.c | 32 + lib/unictype/combining.c | 47 + lib/unictype/combining.h | 839 + lib/unictype/ctype_alnum.c | 32 + lib/unictype/ctype_alnum.h | 588 + lib/unictype/ctype_alpha.c | 32 + lib/unictype/ctype_alpha.h | 588 + lib/unictype/ctype_blank.c | 32 + lib/unictype/ctype_blank.h | 172 + lib/unictype/ctype_cntrl.c | 32 + lib/unictype/ctype_cntrl.h | 160 + lib/unictype/ctype_digit.c | 32 + lib/unictype/ctype_digit.h | 156 + lib/unictype/ctype_graph.c | 32 + lib/unictype/ctype_graph.h | 890 + lib/unictype/ctype_lower.c | 32 + lib/unictype/ctype_lower.h | 327 + lib/unictype/ctype_print.c | 32 + lib/unictype/ctype_print.h | 890 + lib/unictype/ctype_punct.c | 32 + lib/unictype/ctype_punct.h | 734 + lib/unictype/ctype_space.c | 32 + lib/unictype/ctype_space.h | 172 + lib/unictype/ctype_upper.c | 32 + lib/unictype/ctype_upper.h | 327 + lib/unictype/ctype_xdigit.c | 32 + lib/unictype/ctype_xdigit.h | 156 + lib/unictype/decdigit.c | 49 + lib/unictype/decdigit.h | 247 + lib/unictype/digit.c | 49 + lib/unictype/digit.h | 311 + lib/unictype/identsyntaxmap.h | 42 + lib/unictype/mirror.c | 49 + lib/unictype/mirror.h | 503 + lib/unictype/numeric.c | 55 + lib/unictype/numeric.h | 635 + lib/unictype/pr_alphabetic.c | 35 + lib/unictype/pr_alphabetic.h | 588 + lib/unictype/pr_ascii_hex_digit.c | 35 + lib/unictype/pr_ascii_hex_digit.h | 156 + lib/unictype/pr_bidi_arabic_digit.c | 47 + lib/unictype/pr_bidi_arabic_digit.h | 156 + lib/unictype/pr_bidi_arabic_right_to_left.c | 47 + lib/unictype/pr_bidi_arabic_right_to_left.h | 172 + lib/unictype/pr_bidi_block_separator.c | 47 + lib/unictype/pr_bidi_block_separator.h | 160 + lib/unictype/pr_bidi_boundary_neutral.c | 47 + lib/unictype/pr_bidi_boundary_neutral.h | 590 + lib/unictype/pr_bidi_common_separator.c | 47 + lib/unictype/pr_bidi_common_separator.h | 168 + lib/unictype/pr_bidi_control.c | 35 + lib/unictype/pr_bidi_control.h | 156 + lib/unictype/pr_bidi_embedding_or_override.c | 49 + lib/unictype/pr_bidi_embedding_or_override.h | 156 + lib/unictype/pr_bidi_eur_num_separator.c | 47 + lib/unictype/pr_bidi_eur_num_separator.h | 172 + lib/unictype/pr_bidi_eur_num_terminator.c | 47 + lib/unictype/pr_bidi_eur_num_terminator.h | 188 + lib/unictype/pr_bidi_european_digit.c | 47 + lib/unictype/pr_bidi_european_digit.h | 307 + lib/unictype/pr_bidi_hebrew_right_to_left.c | 47 + lib/unictype/pr_bidi_hebrew_right_to_left.h | 315 + lib/unictype/pr_bidi_left_to_right.c | 47 + lib/unictype/pr_bidi_left_to_right.h | 706 + lib/unictype/pr_bidi_non_spacing_mark.c | 47 + lib/unictype/pr_bidi_non_spacing_mark.h | 528 + lib/unictype/pr_bidi_other_neutral.c | 47 + lib/unictype/pr_bidi_other_neutral.h | 407 + lib/unictype/pr_bidi_pdf.c | 47 + lib/unictype/pr_bidi_pdf.h | 156 + lib/unictype/pr_bidi_segment_separator.c | 47 + lib/unictype/pr_bidi_segment_separator.h | 156 + lib/unictype/pr_bidi_whitespace.c | 47 + lib/unictype/pr_bidi_whitespace.h | 172 + lib/unictype/pr_byname.c | 59 + lib/unictype/pr_byname.gperf | 89 + lib/unictype/pr_byname.h | 289 + lib/unictype/pr_combining.c | 35 + lib/unictype/pr_combining.h | 528 + lib/unictype/pr_composite.c | 35 + lib/unictype/pr_composite.h | 375 + lib/unictype/pr_currency_symbol.c | 47 + lib/unictype/pr_currency_symbol.h | 188 + lib/unictype/pr_dash.c | 35 + lib/unictype/pr_dash.h | 184 + lib/unictype/pr_decimal_digit.c | 47 + lib/unictype/pr_decimal_digit.h | 351 + lib/unictype/pr_default_ignorable_code_point.c | 35 + lib/unictype/pr_default_ignorable_code_point.h | 464 + lib/unictype/pr_deprecated.c | 35 + lib/unictype/pr_deprecated.h | 312 + lib/unictype/pr_diacritic.c | 35 + lib/unictype/pr_diacritic.h | 367 + lib/unictype/pr_extender.c | 35 + lib/unictype/pr_extender.h | 192 + lib/unictype/pr_format_control.c | 35 + lib/unictype/pr_format_control.h | 444 + lib/unictype/pr_grapheme_base.c | 35 + lib/unictype/pr_grapheme_base.h | 616 + lib/unictype/pr_grapheme_extend.c | 35 + lib/unictype/pr_grapheme_extend.h | 528 + lib/unictype/pr_grapheme_link.c | 35 + lib/unictype/pr_grapheme_link.h | 319 + lib/unictype/pr_hex_digit.c | 35 + lib/unictype/pr_hex_digit.h | 160 + lib/unictype/pr_hyphen.c | 35 + lib/unictype/pr_hyphen.h | 180 + lib/unictype/pr_id_continue.c | 35 + lib/unictype/pr_id_continue.h | 732 + lib/unictype/pr_id_start.c | 35 + lib/unictype/pr_id_start.h | 580 + lib/unictype/pr_ideographic.c | 35 + lib/unictype/pr_ideographic.h | 316 + lib/unictype/pr_ids_binary_operator.c | 35 + lib/unictype/pr_ids_binary_operator.h | 156 + lib/unictype/pr_ids_trinary_operator.c | 35 + lib/unictype/pr_ids_trinary_operator.h | 156 + lib/unictype/pr_ignorable_control.c | 35 + lib/unictype/pr_ignorable_control.h | 452 + lib/unictype/pr_iso_control.c | 47 + lib/unictype/pr_iso_control.h | 156 + lib/unictype/pr_join_control.c | 47 + lib/unictype/pr_join_control.h | 156 + lib/unictype/pr_left_of_pair.c | 35 + lib/unictype/pr_left_of_pair.h | 184 + lib/unictype/pr_line_separator.c | 55 + lib/unictype/pr_line_separator.h | 156 + lib/unictype/pr_logical_order_exception.c | 35 + lib/unictype/pr_logical_order_exception.h | 156 + lib/unictype/pr_lowercase.c | 35 + lib/unictype/pr_lowercase.h | 339 + lib/unictype/pr_math.c | 35 + lib/unictype/pr_math.h | 335 + lib/unictype/pr_non_break.c | 35 + lib/unictype/pr_non_break.h | 172 + lib/unictype/pr_not_a_character.c | 35 + lib/unictype/pr_not_a_character.h | 306 + lib/unictype/pr_numeric.c | 35 + lib/unictype/pr_numeric.h | 540 + lib/unictype/pr_other_alphabetic.c | 35 + lib/unictype/pr_other_alphabetic.h | 359 + .../pr_other_default_ignorable_code_point.c | 35 + .../pr_other_default_ignorable_code_point.h | 324 + lib/unictype/pr_other_grapheme_extend.c | 35 + lib/unictype/pr_other_grapheme_extend.h | 307 + lib/unictype/pr_other_id_continue.c | 35 + lib/unictype/pr_other_id_continue.h | 164 + lib/unictype/pr_other_id_start.c | 35 + lib/unictype/pr_other_id_start.h | 160 + lib/unictype/pr_other_lowercase.c | 35 + lib/unictype/pr_other_lowercase.h | 176 + lib/unictype/pr_other_math.c | 35 + lib/unictype/pr_other_math.h | 323 + lib/unictype/pr_other_uppercase.c | 35 + lib/unictype/pr_other_uppercase.h | 160 + lib/unictype/pr_paired_punctuation.c | 35 + lib/unictype/pr_paired_punctuation.h | 184 + lib/unictype/pr_paragraph_separator.c | 55 + lib/unictype/pr_paragraph_separator.h | 156 + lib/unictype/pr_pattern_syntax.c | 35 + lib/unictype/pr_pattern_syntax.h | 188 + lib/unictype/pr_pattern_white_space.c | 35 + lib/unictype/pr_pattern_white_space.h | 160 + lib/unictype/pr_private_use.c | 49 + lib/unictype/pr_private_use.h | 310 + lib/unictype/pr_punctuation.c | 47 + lib/unictype/pr_punctuation.h | 403 + lib/unictype/pr_quotation_mark.c | 35 + lib/unictype/pr_quotation_mark.h | 168 + lib/unictype/pr_radical.c | 35 + lib/unictype/pr_radical.h | 156 + lib/unictype/pr_sentence_terminal.c | 35 + lib/unictype/pr_sentence_terminal.h | 220 + lib/unictype/pr_soft_dotted.c | 35 + lib/unictype/pr_soft_dotted.h | 319 + lib/unictype/pr_space.c | 47 + lib/unictype/pr_space.h | 172 + lib/unictype/pr_terminal_punctuation.c | 35 + lib/unictype/pr_terminal_punctuation.h | 371 + lib/unictype/pr_test.c | 27 + lib/unictype/pr_titlecase.c | 47 + lib/unictype/pr_titlecase.h | 160 + lib/unictype/pr_unassigned_code_value.c | 35 + lib/unictype/pr_unassigned_code_value.h | 884 + lib/unictype/pr_unified_ideograph.c | 35 + lib/unictype/pr_unified_ideograph.h | 304 + lib/unictype/pr_uppercase.c | 35 + lib/unictype/pr_uppercase.h | 335 + lib/unictype/pr_variation_selector.c | 35 + lib/unictype/pr_variation_selector.h | 308 + lib/unictype/pr_white_space.c | 35 + lib/unictype/pr_white_space.h | 172 + lib/unictype/pr_xid_continue.c | 35 + lib/unictype/pr_xid_continue.h | 732 + lib/unictype/pr_xid_start.c | 35 + lib/unictype/pr_xid_start.h | 580 + lib/unictype/pr_zero_width.c | 35 + lib/unictype/pr_zero_width.h | 452 + lib/unictype/scripts.c | 75 + lib/unictype/scripts.h | 3704 ++ lib/unictype/scripts_byname.gperf | 89 + lib/unictype/scripts_byname.h | 281 + lib/unictype/sy_c_ident.c | 31 + lib/unictype/sy_c_ident.h | 140 + lib/unictype/sy_c_whitespace.c | 27 + lib/unictype/sy_java_ident.c | 31 + lib/unictype/sy_java_ident.h | 343 + lib/unictype/sy_java_whitespace.c | 27 + lib/unilbrk.h | 110 + lib/unilbrk/lbrkprop1.h | 33 + lib/unilbrk/lbrkprop2.h | 2558 + lib/unilbrk/lbrktables.c | 63 + lib/unilbrk/lbrktables.h | 94 + lib/unilbrk/u16-possible-linebreaks.c | 164 + lib/unilbrk/u16-width-linebreaks.c | 108 + lib/unilbrk/u32-possible-linebreaks.c | 158 + lib/unilbrk/u32-width-linebreaks.c | 106 + lib/unilbrk/u8-possible-linebreaks.c | 261 + lib/unilbrk/u8-width-linebreaks.c | 204 + lib/unilbrk/ulc-common.c | 51 + lib/unilbrk/ulc-common.h | 31 + lib/unilbrk/ulc-possible-linebreaks.c | 212 + lib/unilbrk/ulc-width-linebreaks.c | 231 + lib/uniname.h | 44 + lib/uniname/gen-uninames.lisp | 301 + lib/uniname/uniname.c | 516 + lib/uniname/uninames.h | 61495 +++++++++++++++++++ lib/uninorm.h | 248 + lib/uninorm/canonical-decomposition.c | 108 + lib/uninorm/compat-decomposition.c | 31 + lib/uninorm/composition-table.gperf | 958 + lib/uninorm/composition-table.h | 2159 + lib/uninorm/composition.c | 85 + lib/uninorm/decompose-internal.c | 28 + lib/uninorm/decompose-internal.h | 36 + lib/uninorm/decomposing-form.c | 29 + lib/uninorm/decomposition-table.c | 23 + lib/uninorm/decomposition-table.h | 48 + lib/uninorm/decomposition-table1.h | 20 + lib/uninorm/decomposition-table2.h | 3152 + lib/uninorm/decomposition.c | 102 + lib/uninorm/nfc.c | 31 + lib/uninorm/nfd.c | 31 + lib/uninorm/nfkc.c | 32 + lib/uninorm/nfkd.c | 32 + lib/uninorm/normalize-internal.h | 37 + lib/uninorm/u-normalize-internal.h | 375 + lib/uninorm/u-normcmp.h | 64 + lib/uninorm/u-normcoll.h | 65 + lib/uninorm/u-normxfrm.h | 87 + lib/uninorm/u16-normalize.c | 38 + lib/uninorm/u16-normcmp.c | 33 + lib/uninorm/u16-normcoll.c | 31 + lib/uninorm/u16-normxfrm.c | 34 + lib/uninorm/u32-normalize.c | 38 + lib/uninorm/u32-normcmp.c | 33 + lib/uninorm/u32-normcoll.c | 31 + lib/uninorm/u32-normxfrm.c | 34 + lib/uninorm/u8-normalize.c | 38 + lib/uninorm/u8-normcmp.c | 33 + lib/uninorm/u8-normcoll.c | 31 + lib/uninorm/u8-normxfrm.c | 34 + lib/uninorm/uninorm-filter.c | 367 + lib/unistd.in.h | 578 + lib/unistdio.h | 256 + lib/unistdio/u-asnprintf.h | 27 + lib/unistdio/u-asprintf.h | 27 + lib/unistdio/u-printf-args.c | 22 + lib/unistdio/u-printf-args.h | 27 + lib/unistdio/u-printf-parse.h | 27 + lib/unistdio/u-snprintf.h | 27 + lib/unistdio/u-sprintf.h | 27 + lib/unistdio/u-vasprintf.h | 35 + lib/unistdio/u-vsnprintf.h | 52 + lib/unistdio/u-vsprintf.h | 58 + lib/unistdio/u16-asnprintf.c | 28 + lib/unistdio/u16-asprintf.c | 28 + lib/unistdio/u16-printf-parse.c | 26 + lib/unistdio/u16-snprintf.c | 28 + lib/unistdio/u16-sprintf.c | 28 + lib/unistdio/u16-u16-asnprintf.c | 28 + lib/unistdio/u16-u16-asprintf.c | 28 + lib/unistdio/u16-u16-snprintf.c | 28 + lib/unistdio/u16-u16-sprintf.c | 28 + lib/unistdio/u16-u16-vasnprintf.c | 49 + lib/unistdio/u16-u16-vasprintf.c | 30 + lib/unistdio/u16-u16-vsnprintf.c | 33 + lib/unistdio/u16-u16-vsprintf.c | 32 + lib/unistdio/u16-vasnprintf.c | 50 + lib/unistdio/u16-vasprintf.c | 30 + lib/unistdio/u16-vsnprintf.c | 33 + lib/unistdio/u16-vsprintf.c | 32 + lib/unistdio/u32-asnprintf.c | 28 + lib/unistdio/u32-asprintf.c | 28 + lib/unistdio/u32-printf-parse.c | 26 + lib/unistdio/u32-snprintf.c | 28 + lib/unistdio/u32-sprintf.c | 28 + lib/unistdio/u32-u32-asnprintf.c | 28 + lib/unistdio/u32-u32-asprintf.c | 28 + lib/unistdio/u32-u32-snprintf.c | 28 + lib/unistdio/u32-u32-sprintf.c | 28 + lib/unistdio/u32-u32-vasnprintf.c | 49 + lib/unistdio/u32-u32-vasprintf.c | 30 + lib/unistdio/u32-u32-vsnprintf.c | 33 + lib/unistdio/u32-u32-vsprintf.c | 32 + lib/unistdio/u32-vasnprintf.c | 50 + lib/unistdio/u32-vasprintf.c | 30 + lib/unistdio/u32-vsnprintf.c | 33 + lib/unistdio/u32-vsprintf.c | 32 + lib/unistdio/u8-asnprintf.c | 28 + lib/unistdio/u8-asprintf.c | 28 + lib/unistdio/u8-printf-parse.c | 26 + lib/unistdio/u8-snprintf.c | 28 + lib/unistdio/u8-sprintf.c | 28 + lib/unistdio/u8-u8-asnprintf.c | 28 + lib/unistdio/u8-u8-asprintf.c | 28 + lib/unistdio/u8-u8-snprintf.c | 28 + lib/unistdio/u8-u8-sprintf.c | 28 + lib/unistdio/u8-u8-vasnprintf.c | 49 + lib/unistdio/u8-u8-vasprintf.c | 30 + lib/unistdio/u8-u8-vsnprintf.c | 33 + lib/unistdio/u8-u8-vsprintf.c | 32 + lib/unistdio/u8-vasnprintf.c | 50 + lib/unistdio/u8-vasprintf.c | 30 + lib/unistdio/u8-vsnprintf.c | 33 + lib/unistdio/u8-vsprintf.c | 32 + lib/unistdio/ulc-asnprintf.c | 28 + lib/unistdio/ulc-asprintf.c | 28 + lib/unistdio/ulc-fprintf.c | 74 + lib/unistdio/ulc-printf-parse.c | 27 + lib/unistdio/ulc-snprintf.c | 28 + lib/unistdio/ulc-sprintf.c | 28 + lib/unistdio/ulc-vasnprintf.c | 46 + lib/unistdio/ulc-vasprintf.c | 30 + lib/unistdio/ulc-vfprintf.c | 71 + lib/unistdio/ulc-vsnprintf.c | 33 + lib/unistdio/ulc-vsprintf.c | 32 + lib/unistr.h | 684 + lib/unistr/u-cmp2.h | 32 + lib/unistr/u-cpy-alloc.h | 39 + lib/unistr/u-cpy.h | 32 + lib/unistr/u-endswith.h | 28 + lib/unistr/u-move.h | 44 + lib/unistr/u-set.h | 39 + lib/unistr/u-startswith.h | 30 + lib/unistr/u-stpcpy.h | 24 + lib/unistr/u-stpncpy.h | 30 + lib/unistr/u-strcat.h | 26 + lib/unistr/u-strcoll.h | 81 + lib/unistr/u-strcpy.h | 26 + lib/unistr/u-strcspn.h | 54 + lib/unistr/u-strdup.h | 40 + lib/unistr/u-strlen.h | 26 + lib/unistr/u-strncat.h | 28 + lib/unistr/u-strncpy.h | 32 + lib/unistr/u-strnlen.h | 26 + lib/unistr/u-strpbrk.h | 46 + lib/unistr/u-strspn.h | 54 + lib/unistr/u-strstr.h | 49 + lib/unistr/u-strtok.h | 52 + lib/unistr/u16-check.c | 51 + lib/unistr/u16-chr.c | 56 + lib/unistr/u16-cmp.c | 54 + lib/unistr/u16-cmp2.c | 28 + lib/unistr/u16-cpy-alloc.c | 25 + lib/unistr/u16-cpy.c | 25 + lib/unistr/u16-endswith.c | 27 + lib/unistr/u16-mblen.c | 49 + lib/unistr/u16-mbsnlen.c | 39 + lib/unistr/u16-mbtouc-aux.c | 51 + lib/unistr/u16-mbtouc-unsafe-aux.c | 55 + lib/unistr/u16-mbtouc-unsafe.c | 66 + lib/unistr/u16-mbtouc.c | 61 + lib/unistr/u16-mbtoucr.c | 54 + lib/unistr/u16-move.c | 25 + lib/unistr/u16-next.c | 37 + lib/unistr/u16-prev.c | 53 + lib/unistr/u16-set.c | 26 + lib/unistr/u16-startswith.c | 25 + lib/unistr/u16-stpcpy.c | 25 + lib/unistr/u16-stpncpy.c | 25 + lib/unistr/u16-strcat.c | 26 + lib/unistr/u16-strchr.c | 63 + lib/unistr/u16-strcmp.c | 50 + lib/unistr/u16-strcoll.c | 33 + lib/unistr/u16-strcpy.c | 25 + lib/unistr/u16-strcspn.c | 28 + lib/unistr/u16-strdup.c | 26 + lib/unistr/u16-strlen.c | 25 + lib/unistr/u16-strmblen.c | 43 + lib/unistr/u16-strmbtouc.c | 50 + lib/unistr/u16-strncat.c | 26 + lib/unistr/u16-strncmp.c | 54 + lib/unistr/u16-strncpy.c | 25 + lib/unistr/u16-strnlen.c | 25 + lib/unistr/u16-strpbrk.c | 27 + lib/unistr/u16-strrchr.c | 64 + lib/unistr/u16-strspn.c | 29 + lib/unistr/u16-strstr.c | 28 + lib/unistr/u16-strtok.c | 27 + lib/unistr/u16-to-u32.c | 125 + lib/unistr/u16-to-u8.c | 136 + lib/unistr/u16-uctomb-aux.c | 58 + lib/unistr/u16-uctomb.c | 72 + lib/unistr/u32-check.c | 39 + lib/unistr/u32-chr.c | 32 + lib/unistr/u32-cmp.c | 40 + lib/unistr/u32-cmp2.c | 28 + lib/unistr/u32-cpy-alloc.c | 25 + lib/unistr/u32-cpy.c | 25 + lib/unistr/u32-endswith.c | 27 + lib/unistr/u32-mblen.c | 37 + lib/unistr/u32-mbsnlen.c | 27 + lib/unistr/u32-mbtouc-unsafe.c | 48 + lib/unistr/u32-mbtouc.c | 43 + lib/unistr/u32-mbtoucr.c | 39 + lib/unistr/u32-move.c | 25 + lib/unistr/u32-next.c | 39 + lib/unistr/u32-prev.c | 39 + lib/unistr/u32-set.c | 26 + lib/unistr/u32-startswith.c | 25 + lib/unistr/u32-stpcpy.c | 25 + lib/unistr/u32-stpncpy.c | 25 + lib/unistr/u32-strcat.c | 26 + lib/unistr/u32-strchr.c | 36 + lib/unistr/u32-strcmp.c | 36 + lib/unistr/u32-strcoll.c | 33 + lib/unistr/u32-strcpy.c | 25 + lib/unistr/u32-strcspn.c | 51 + lib/unistr/u32-strdup.c | 26 + lib/unistr/u32-strlen.c | 25 + lib/unistr/u32-strmblen.c | 36 + lib/unistr/u32-strmbtouc.c | 39 + lib/unistr/u32-strncat.c | 26 + lib/unistr/u32-strncmp.c | 40 + lib/unistr/u32-strncpy.c | 25 + lib/unistr/u32-strnlen.c | 25 + lib/unistr/u32-strpbrk.c | 50 + lib/unistr/u32-strrchr.c | 38 + lib/unistr/u32-strspn.c | 50 + lib/unistr/u32-strstr.c | 26 + lib/unistr/u32-strtok.c | 27 + lib/unistr/u32-to-u16.c | 130 + lib/unistr/u32-to-u8.c | 130 + lib/unistr/u32-uctomb.c | 47 + lib/unistr/u8-check.c | 105 + lib/unistr/u8-chr.c | 87 + lib/unistr/u8-cmp.c | 30 + lib/unistr/u8-cmp2.c | 28 + lib/unistr/u8-cpy-alloc.c | 25 + lib/unistr/u8-cpy.c | 25 + lib/unistr/u8-endswith.c | 27 + lib/unistr/u8-mblen.c | 98 + lib/unistr/u8-mbsnlen.c | 39 + lib/unistr/u8-mbtouc-aux.c | 158 + lib/unistr/u8-mbtouc-unsafe-aux.c | 168 + lib/unistr/u8-mbtouc-unsafe.c | 179 + lib/unistr/u8-mbtouc.c | 168 + lib/unistr/u8-mbtoucr.c | 285 + lib/unistr/u8-move.c | 25 + lib/unistr/u8-next.c | 37 + lib/unistr/u8-prev.c | 93 + lib/unistr/u8-set.c | 44 + lib/unistr/u8-startswith.c | 25 + lib/unistr/u8-stpcpy.c | 44 + lib/unistr/u8-stpncpy.c | 44 + lib/unistr/u8-strcat.c | 29 + lib/unistr/u8-strchr.c | 100 + lib/unistr/u8-strcmp.c | 30 + lib/unistr/u8-strcoll.c | 33 + lib/unistr/u8-strcpy.c | 29 + lib/unistr/u8-strcspn.c | 28 + lib/unistr/u8-strdup.c | 40 + lib/unistr/u8-strlen.c | 29 + lib/unistr/u8-strmblen.c | 96 + lib/unistr/u8-strmbtouc.c | 129 + lib/unistr/u8-strncat.c | 29 + lib/unistr/u8-strncmp.c | 30 + lib/unistr/u8-strncpy.c | 29 + lib/unistr/u8-strnlen.c | 44 + lib/unistr/u8-strpbrk.c | 27 + lib/unistr/u8-strrchr.c | 101 + lib/unistr/u8-strspn.c | 29 + lib/unistr/u8-strstr.c | 28 + lib/unistr/u8-strtok.c | 27 + lib/unistr/u8-to-u16.c | 136 + lib/unistr/u8-to-u32.c | 125 + lib/unistr/u8-uctomb-aux.c | 69 + lib/unistr/u8-uctomb.c | 88 + lib/unistring-notinline.h | 23 + lib/unistring/inline.h | 68 + lib/unistring/version.in.h | 39 + lib/unistring/woe32dll.in.h | 30 + lib/unitypes.h | 26 + lib/uniwbrk.h | 83 + lib/uniwbrk/u-wordbreaks.h | 127 + lib/uniwbrk/u16-wordbreaks.c | 31 + lib/uniwbrk/u32-wordbreaks.c | 31 + lib/uniwbrk/u8-wordbreaks.c | 124 + lib/uniwbrk/ulc-wordbreaks.c | 201 + lib/uniwbrk/wbrkprop.h | 3755 ++ lib/uniwbrk/wbrktable.c | 52 + lib/uniwbrk/wbrktable.h | 18 + lib/uniwbrk/wordbreak-property.c | 44 + lib/uniwidth.h | 64 + lib/uniwidth/cjk.h | 37 + lib/uniwidth/u16-strwidth.c | 29 + lib/uniwidth/u16-width.c | 47 + lib/uniwidth/u32-strwidth.c | 29 + lib/uniwidth/u32-width.c | 43 + lib/uniwidth/u8-strwidth.c | 29 + lib/uniwidth/u8-width.c | 47 + lib/uniwidth/width.c | 359 + lib/vasnprintf.c | 5487 ++ lib/verify.h | 140 + lib/version.c | 23 + lib/wchar.in.h | 310 + lib/wctype.in.h | 184 + lib/wcwidth.c | 51 + lib/xsize.h | 108 + m4/exported.m4 | 21 + m4/init-package-version.m4 | 97 + m4/libtool.m4 | 7372 +++ m4/ltoptions.m4 | 368 + m4/ltsugar.m4 | 123 + m4/ltversion.m4 | 23 + m4/lt~obsolete.m4 | 92 + m4/woe32-dll.m4 | 45 + tests/Makefile.am | 39 + tests/Makefile.gnulib | 3200 + tests/Makefile.in | 6709 ++ tests/error.c | 338 + tests/error.h | 65 + tests/exitfail.c | 24 + tests/exitfail.h | 18 + tests/gettext.h | 279 + tests/intprops.h | 77 + tests/locale.in.h | 36 + tests/nan.h | 60 + tests/progname.c | 63 + tests/progname.h | 60 + tests/setenv.c | 330 + tests/strerror.c | 347 + tests/test-alloca-opt.c | 62 + tests/test-array-mergesort.c | 395 + tests/test-c-ctype.c | 398 + tests/test-c-strcase.sh | 21 + tests/test-c-strcasecmp.c | 77 + tests/test-c-strncasecmp.c | 91 + tests/test-environ.c | 44 + tests/test-errno.c | 117 + tests/test-frexpl.c | 233 + tests/test-fseterr.c | 44 + tests/test-iconv.c | 149 + tests/test-isnand-nolibm.c | 22 + tests/test-isnand.h | 78 + tests/test-isnanf-nolibm.c | 21 + tests/test-isnanf.h | 80 + tests/test-isnanl-nolibm.c | 23 + tests/test-isnanl.h | 154 + tests/test-locale.c | 44 + tests/test-localename.c | 122 + tests/test-malloca.c | 59 + tests/test-math.c | 53 + tests/test-mbrtowc.c | 330 + tests/test-mbrtowc1.sh | 15 + tests/test-mbrtowc2.sh | 15 + tests/test-mbrtowc3.sh | 15 + tests/test-mbrtowc4.sh | 15 + tests/test-mbsinit.c | 62 + tests/test-mbsinit.sh | 15 + tests/test-memchr.c | 130 + tests/test-printf-frexp.c | 131 + tests/test-printf-frexpl.c | 147 + tests/test-signbit.c | 204 + tests/test-stdbool.c | 95 + tests/test-stdint.c | 360 + tests/test-stdlib.c | 43 + tests/test-strerror.c | 65 + tests/test-striconveh.c | 922 + tests/test-striconveha.c | 609 + tests/test-string.c | 33 + tests/test-unistd.c | 56 + tests/test-wchar.c | 31 + tests/test-wctype.c | 46 + tests/test-wcwidth.c | 91 + tests/unicase/test-casecmp.h | 69 + tests/unicase/test-cased.c | 135 + tests/unicase/test-ignorable.c | 246 + tests/unicase/test-is-cased.h | 58 + tests/unicase/test-is-casefolded.h | 43 + tests/unicase/test-is-lowercase.h | 95 + tests/unicase/test-is-titlecase.h | 95 + tests/unicase/test-is-uppercase.h | 95 + tests/unicase/test-locale-language.c | 56 + tests/unicase/test-locale-language.sh | 30 + tests/unicase/test-mapping-part1.h | 45 + tests/unicase/test-mapping-part2.h | 37 + tests/unicase/test-predicate-part1.h | 45 + tests/unicase/test-predicate-part2.h | 37 + tests/unicase/test-u16-casecmp.c | 336 + tests/unicase/test-u16-casecoll.c | 54 + tests/unicase/test-u16-casefold.c | 214 + tests/unicase/test-u16-is-cased.c | 51 + tests/unicase/test-u16-is-casefolded.c | 65 + tests/unicase/test-u16-is-lowercase.c | 93 + tests/unicase/test-u16-is-titlecase.c | 51 + tests/unicase/test-u16-is-uppercase.c | 93 + tests/unicase/test-u16-tolower.c | 251 + tests/unicase/test-u16-totitle.c | 211 + tests/unicase/test-u16-toupper.c | 211 + tests/unicase/test-u32-casecmp.c | 336 + tests/unicase/test-u32-casecoll.c | 54 + tests/unicase/test-u32-casefold.c | 214 + tests/unicase/test-u32-is-cased.c | 51 + tests/unicase/test-u32-is-casefolded.c | 65 + tests/unicase/test-u32-is-lowercase.c | 93 + tests/unicase/test-u32-is-titlecase.c | 51 + tests/unicase/test-u32-is-uppercase.c | 93 + tests/unicase/test-u32-tolower.c | 251 + tests/unicase/test-u32-totitle.c | 211 + tests/unicase/test-u32-toupper.c | 211 + tests/unicase/test-u8-casecmp.c | 345 + tests/unicase/test-u8-casecoll.c | 54 + tests/unicase/test-u8-casefold.c | 220 + tests/unicase/test-u8-is-cased.c | 51 + tests/unicase/test-u8-is-casefolded.c | 65 + tests/unicase/test-u8-is-lowercase.c | 93 + tests/unicase/test-u8-is-titlecase.c | 51 + tests/unicase/test-u8-is-uppercase.c | 93 + tests/unicase/test-u8-tolower.c | 257 + tests/unicase/test-u8-totitle.c | 217 + tests/unicase/test-u8-toupper.c | 217 + tests/unicase/test-uc_tolower.c | 1047 + tests/unicase/test-uc_totitle.c | 1055 + tests/unicase/test-uc_toupper.c | 1055 + tests/unicase/test-ulc-casecmp.c | 408 + tests/unicase/test-ulc-casecmp1.sh | 15 + tests/unicase/test-ulc-casecmp2.sh | 15 + tests/unicase/test-ulc-casecoll.c | 59 + tests/unicase/test-ulc-casecoll1.sh | 15 + tests/unicase/test-ulc-casecoll2.sh | 15 + tests/uniconv/test-u16-conv-from-enc.c | 232 + tests/uniconv/test-u16-conv-to-enc.c | 188 + tests/uniconv/test-u16-strconv-from-enc.c | 132 + tests/uniconv/test-u16-strconv-to-enc.c | 121 + tests/uniconv/test-u32-conv-from-enc.c | 232 + tests/uniconv/test-u32-conv-to-enc.c | 163 + tests/uniconv/test-u32-strconv-from-enc.c | 132 + tests/uniconv/test-u32-strconv-to-enc.c | 108 + tests/uniconv/test-u8-conv-from-enc.c | 218 + tests/uniconv/test-u8-conv-to-enc.c | 193 + tests/uniconv/test-u8-strconv-from-enc.c | 114 + tests/uniconv/test-u8-strconv-to-enc.c | 112 + tests/unictype/test-bidi_byname.c | 44 + tests/unictype/test-bidi_name.c | 44 + tests/unictype/test-bidi_of.c | 45 + tests/unictype/test-bidi_test.c | 60 + tests/unictype/test-block_list.c | 62 + tests/unictype/test-block_of.c | 79 + tests/unictype/test-block_test.c | 54 + tests/unictype/test-categ_C.c | 469 + tests/unictype/test-categ_Cc.c | 24 + tests/unictype/test-categ_Cf.c | 36 + tests/unictype/test-categ_Cn.c | 467 + tests/unictype/test-categ_Co.c | 25 + tests/unictype/test-categ_Cs.c | 23 + tests/unictype/test-categ_L.c | 412 + tests/unictype/test-categ_Ll.c | 620 + tests/unictype/test-categ_Lm.c | 61 + tests/unictype/test-categ_Lo.c | 304 + tests/unictype/test-categ_Lt.c | 32 + tests/unictype/test-categ_Lu.c | 613 + tests/unictype/test-categ_M.c | 183 + tests/unictype/test-categ_Mc.c | 107 + tests/unictype/test-categ_Me.c | 27 + tests/unictype/test-categ_Mn.c | 182 + tests/unictype/test-categ_N.c | 91 + tests/unictype/test-categ_Nd.c | 55 + tests/unictype/test-categ_Nl.c | 33 + tests/unictype/test-categ_No.c | 52 + tests/unictype/test-categ_P.c | 134 + tests/unictype/test-categ_Pc.c | 28 + tests/unictype/test-categ_Pd.c | 36 + tests/unictype/test-categ_Pe.c | 92 + tests/unictype/test-categ_Pf.c | 32 + tests/unictype/test-categ_Pi.c | 33 + tests/unictype/test-categ_Po.c | 130 + tests/unictype/test-categ_Ps.c | 94 + tests/unictype/test-categ_S.c | 201 + tests/unictype/test-categ_Sc.c | 36 + tests/unictype/test-categ_Sk.c | 48 + tests/unictype/test-categ_Sm.c | 87 + tests/unictype/test-categ_So.c | 156 + tests/unictype/test-categ_Z.c | 31 + tests/unictype/test-categ_Zl.c | 23 + tests/unictype/test-categ_Zp.c | 23 + tests/unictype/test-categ_Zs.c | 30 + tests/unictype/test-categ_and.c | 51 + tests/unictype/test-categ_and_not.c | 51 + tests/unictype/test-categ_byname.c | 62 + tests/unictype/test-categ_name.c | 45 + tests/unictype/test-categ_none.c | 47 + tests/unictype/test-categ_of.c | 67 + tests/unictype/test-categ_or.c | 48 + tests/unictype/test-categ_test_withtable.c | 50 + tests/unictype/test-combining.c | 47 + tests/unictype/test-ctype_alnum.c | 439 + tests/unictype/test-ctype_alpha.c | 438 + tests/unictype/test-ctype_blank.c | 30 + tests/unictype/test-ctype_cntrl.c | 25 + tests/unictype/test-ctype_digit.c | 23 + tests/unictype/test-ctype_graph.c | 471 + tests/unictype/test-ctype_lower.c | 592 + tests/unictype/test-ctype_print.c | 469 + tests/unictype/test-ctype_punct.c | 354 + tests/unictype/test-ctype_space.c | 31 + tests/unictype/test-ctype_upper.c | 576 + tests/unictype/test-ctype_xdigit.c | 25 + tests/unictype/test-decdigit.c | 62 + tests/unictype/test-decdigit.h | 373 + tests/unictype/test-digit.c | 62 + tests/unictype/test-digit.h | 471 + tests/unictype/test-mirror.c | 53 + tests/unictype/test-numeric.c | 72 + tests/unictype/test-numeric.h | 939 + tests/unictype/test-pr_alphabetic.c | 465 + tests/unictype/test-pr_ascii_hex_digit.c | 25 + tests/unictype/test-pr_bidi_arabic_digit.c | 26 + tests/unictype/test-pr_bidi_arabic_right_to_left.c | 47 + tests/unictype/test-pr_bidi_block_separator.c | 27 + tests/unictype/test-pr_bidi_boundary_neutral.c | 53 + tests/unictype/test-pr_bidi_common_separator.c | 35 + tests/unictype/test-pr_bidi_control.c | 24 + .../unictype/test-pr_bidi_embedding_or_override.c | 24 + tests/unictype/test-pr_bidi_eur_num_separator.c | 31 + tests/unictype/test-pr_bidi_eur_num_terminator.c | 41 + tests/unictype/test-pr_bidi_european_digit.c | 32 + tests/unictype/test-pr_bidi_hebrew_right_to_left.c | 42 + tests/unictype/test-pr_bidi_left_to_right.c | 295 + tests/unictype/test-pr_bidi_non_spacing_mark.c | 178 + tests/unictype/test-pr_bidi_other_neutral.c | 175 + tests/unictype/test-pr_bidi_pdf.c | 23 + tests/unictype/test-pr_bidi_segment_separator.c | 25 + tests/unictype/test-pr_bidi_whitespace.c | 30 + tests/unictype/test-pr_byname.c | 54 + tests/unictype/test-pr_combining.c | 183 + tests/unictype/test-pr_composite.c | 291 + tests/unictype/test-pr_currency_symbol.c | 36 + tests/unictype/test-pr_dash.c | 40 + tests/unictype/test-pr_decimal_digit.c | 55 + .../test-pr_default_ignorable_code_point.c | 37 + tests/unictype/test-pr_deprecated.c | 28 + tests/unictype/test-pr_diacritic.c | 124 + tests/unictype/test-pr_extender.c | 38 + tests/unictype/test-pr_format_control.c | 30 + tests/unictype/test-pr_grapheme_base.c | 524 + tests/unictype/test-pr_grapheme_extend.c | 194 + tests/unictype/test-pr_grapheme_link.c | 44 + tests/unictype/test-pr_hex_digit.c | 28 + tests/unictype/test-pr_hyphen.c | 32 + tests/unictype/test-pr_id_continue.c | 499 + tests/unictype/test-pr_id_start.c | 414 + tests/unictype/test-pr_ideographic.c | 32 + tests/unictype/test-pr_ids_binary_operator.c | 24 + tests/unictype/test-pr_ids_trinary_operator.c | 23 + tests/unictype/test-pr_ignorable_control.c | 40 + tests/unictype/test-pr_iso_control.c | 24 + tests/unictype/test-pr_join_control.c | 23 + tests/unictype/test-pr_left_of_pair.c | 63 + tests/unictype/test-pr_line_separator.c | 23 + tests/unictype/test-pr_logical_order_exception.c | 24 + tests/unictype/test-pr_lowercase.c | 623 + tests/unictype/test-pr_math.c | 127 + tests/unictype/test-pr_non_break.c | 32 + tests/unictype/test-pr_not_a_character.c | 40 + tests/unictype/test-pr_numeric.c | 101 + tests/unictype/test-pr_other_alphabetic.c | 144 + .../test-pr_other_default_ignorable_code_point.c | 32 + tests/unictype/test-pr_other_grapheme_extend.c | 38 + tests/unictype/test-pr_other_id_continue.c | 25 + tests/unictype/test-pr_other_id_start.c | 25 + tests/unictype/test-pr_other_lowercase.c | 35 + tests/unictype/test-pr_other_math.c | 121 + tests/unictype/test-pr_other_uppercase.c | 24 + tests/unictype/test-pr_paired_punctuation.c | 49 + tests/unictype/test-pr_paragraph_separator.c | 23 + tests/unictype/test-pr_pattern_syntax.c | 50 + tests/unictype/test-pr_pattern_white_space.c | 27 + tests/unictype/test-pr_private_use.c | 25 + tests/unictype/test-pr_punctuation.c | 134 + tests/unictype/test-pr_quotation_mark.c | 34 + tests/unictype/test-pr_radical.c | 25 + tests/unictype/test-pr_sentence_terminal.c | 59 + tests/unictype/test-pr_soft_dotted.c | 53 + tests/unictype/test-pr_space.c | 30 + tests/unictype/test-pr_terminal_punctuation.c | 77 + tests/unictype/test-pr_test.c | 47 + tests/unictype/test-pr_titlecase.c | 32 + tests/unictype/test-pr_unassigned_code_value.c | 476 + tests/unictype/test-pr_unified_ideograph.c | 32 + tests/unictype/test-pr_uppercase.c | 615 + tests/unictype/test-pr_variation_selector.c | 25 + tests/unictype/test-pr_white_space.c | 33 + tests/unictype/test-pr_xid_continue.c | 506 + tests/unictype/test-pr_xid_start.c | 421 + tests/unictype/test-pr_zero_width.c | 36 + tests/unictype/test-predicate-part1.h | 45 + tests/unictype/test-predicate-part2.h | 37 + tests/unictype/test-scripts.c | 86 + tests/unictype/test-sy_c_ident.c | 50 + tests/unictype/test-sy_c_whitespace.c | 24 + tests/unictype/test-sy_java_ident.c | 50 + tests/unictype/test-sy_java_whitespace.c | 25 + tests/unilbrk/test-u16-possible-linebreaks.c | 96 + tests/unilbrk/test-u16-width-linebreaks.c | 86 + tests/unilbrk/test-u32-possible-linebreaks.c | 96 + tests/unilbrk/test-u32-width-linebreaks.c | 86 + tests/unilbrk/test-u8-possible-linebreaks.c | 90 + tests/unilbrk/test-u8-width-linebreaks.c | 80 + tests/unilbrk/test-ulc-possible-linebreaks.c | 66 + tests/unilbrk/test-ulc-width-linebreaks.c | 65 + tests/uniname/UnicodeDataNames.txt | 30423 +++++++++ tests/uniname/test-uninames.c | 261 + tests/uniname/test-uninames.sh | 2 + tests/uninorm/NormalizationTest.txt | 17819 ++++++ tests/uninorm/test-canonical-decomposition.c | 156 + tests/uninorm/test-compat-decomposition.c | 198 + tests/uninorm/test-composition.c | 66 + tests/uninorm/test-decomposing-form.c | 47 + tests/uninorm/test-decomposition.c | 220 + tests/uninorm/test-nfc.c | 44 + tests/uninorm/test-nfd.c | 44 + tests/uninorm/test-nfkc.c | 44 + tests/uninorm/test-nfkd.c | 44 + tests/uninorm/test-u16-nfc.c | 345 + tests/uninorm/test-u16-nfd.c | 329 + tests/uninorm/test-u16-nfkc.c | 393 + tests/uninorm/test-u16-nfkd.c | 349 + tests/uninorm/test-u16-normcmp.c | 130 + tests/uninorm/test-u16-normcmp.h | 69 + tests/uninorm/test-u16-normcoll.c | 49 + tests/uninorm/test-u32-nfc-big.c | 125 + tests/uninorm/test-u32-nfc-big.sh | 2 + tests/uninorm/test-u32-nfc.c | 345 + tests/uninorm/test-u32-nfd-big.c | 125 + tests/uninorm/test-u32-nfd-big.sh | 2 + tests/uninorm/test-u32-nfd.c | 329 + tests/uninorm/test-u32-nfkc-big.c | 122 + tests/uninorm/test-u32-nfkc-big.sh | 2 + tests/uninorm/test-u32-nfkc.c | 393 + tests/uninorm/test-u32-nfkd-big.c | 122 + tests/uninorm/test-u32-nfkd-big.sh | 2 + tests/uninorm/test-u32-nfkd.c | 349 + tests/uninorm/test-u32-normalize-big.c | 315 + tests/uninorm/test-u32-normalize-big.h | 70 + tests/uninorm/test-u32-normcmp.c | 130 + tests/uninorm/test-u32-normcmp.h | 69 + tests/uninorm/test-u32-normcoll.c | 49 + tests/uninorm/test-u8-nfc.c | 375 + tests/uninorm/test-u8-nfd.c | 358 + tests/uninorm/test-u8-nfkc.c | 427 + tests/uninorm/test-u8-nfkd.c | 379 + tests/uninorm/test-u8-normcmp.c | 130 + tests/uninorm/test-u8-normcmp.h | 69 + tests/uninorm/test-u8-normcoll.c | 49 + tests/uninorm/test-uninorm-filter-nfc.c | 122 + tests/unistdio/test-u16-asnprintf1.c | 59 + tests/unistdio/test-u16-asnprintf1.h | 60 + tests/unistdio/test-u16-printf1.h | 941 + tests/unistdio/test-u16-vasnprintf1.c | 88 + tests/unistdio/test-u16-vasnprintf2.c | 132 + tests/unistdio/test-u16-vasnprintf2.sh | 21 + tests/unistdio/test-u16-vasnprintf3.c | 132 + tests/unistdio/test-u16-vasnprintf3.sh | 21 + tests/unistdio/test-u16-vasprintf1.c | 75 + tests/unistdio/test-u16-vsnprintf1.c | 84 + tests/unistdio/test-u16-vsprintf1.c | 84 + tests/unistdio/test-u32-asnprintf1.c | 59 + tests/unistdio/test-u32-asnprintf1.h | 60 + tests/unistdio/test-u32-printf1.h | 941 + tests/unistdio/test-u32-vasnprintf1.c | 88 + tests/unistdio/test-u32-vasnprintf2.c | 132 + tests/unistdio/test-u32-vasnprintf2.sh | 21 + tests/unistdio/test-u32-vasnprintf3.c | 132 + tests/unistdio/test-u32-vasnprintf3.sh | 21 + tests/unistdio/test-u32-vasprintf1.c | 75 + tests/unistdio/test-u32-vsnprintf1.c | 84 + tests/unistdio/test-u32-vsprintf1.c | 84 + tests/unistdio/test-u8-asnprintf1.c | 59 + tests/unistdio/test-u8-asnprintf1.h | 57 + tests/unistdio/test-u8-printf1.h | 704 + tests/unistdio/test-u8-vasnprintf1.c | 88 + tests/unistdio/test-u8-vasnprintf2.c | 122 + tests/unistdio/test-u8-vasnprintf2.sh | 21 + tests/unistdio/test-u8-vasnprintf3.c | 122 + tests/unistdio/test-u8-vasnprintf3.sh | 21 + tests/unistdio/test-u8-vasprintf1.c | 75 + tests/unistdio/test-u8-vsnprintf1.c | 84 + tests/unistdio/test-u8-vsprintf1.c | 84 + tests/unistdio/test-ulc-asnprintf1.c | 56 + tests/unistdio/test-ulc-asnprintf1.h | 54 + tests/unistdio/test-ulc-printf1.h | 498 + tests/unistdio/test-ulc-vasnprintf1.c | 85 + tests/unistdio/test-ulc-vasnprintf2.c | 258 + tests/unistdio/test-ulc-vasnprintf2.sh | 21 + tests/unistdio/test-ulc-vasnprintf3.c | 246 + tests/unistdio/test-ulc-vasnprintf3.sh | 21 + tests/unistdio/test-ulc-vasprintf1.c | 72 + tests/unistdio/test-ulc-vsnprintf1.c | 77 + tests/unistdio/test-ulc-vsprintf1.c | 77 + tests/uniwbrk/test-u16-wordbreaks.c | 106 + tests/uniwbrk/test-u32-wordbreaks.c | 106 + tests/uniwbrk/test-u8-wordbreaks.c | 97 + tests/uniwbrk/test-ulc-wordbreaks.c | 74 + tests/uniwbrk/test-ulc-wordbreaks.sh | 15 + tests/uniwidth/test-u16-strwidth.c | 71 + tests/uniwidth/test-u16-width.c | 77 + tests/uniwidth/test-u32-strwidth.c | 71 + tests/uniwidth/test-u32-width.c | 77 + tests/uniwidth/test-u8-strwidth.c | 66 + tests/uniwidth/test-u8-width.c | 75 + tests/uniwidth/test-uc_width.c | 69 + tests/uniwidth/test-uc_width2.c | 97 + tests/uniwidth/test-uc_width2.sh | 382 + tests/unsetenv.c | 90 + tests/wctob.c | 37 + tests/xalloc-die.c | 41 + tests/xalloc.h | 280 + tests/xmalloc.c | 118 + tests/zerosize-ptr.h | 68 + version.sh | 6 + woe32dll/export.h | 106 + woe32dll/unistring-exports.c | 146 + 1404 files changed, 441301 insertions(+) create mode 100644 AUTHORS create mode 100644 BUGS create mode 100644 COPYING create mode 100644 COPYING.LIB create mode 100644 ChangeLog create mode 100644 DEPENDENCIES create mode 100644 HACKING create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100644 README.woe32 create mode 100644 THANKS create mode 100644 aclocal.m4 create mode 100755 autogen.sh create mode 100755 build-aux/compile create mode 100755 build-aux/config.guess create mode 100755 build-aux/config.rpath create mode 100755 build-aux/config.sub create mode 100755 build-aux/depcomp create mode 100755 build-aux/fixaclocal create mode 100755 build-aux/install-sh create mode 100644 build-aux/link-warning.h create mode 100644 build-aux/ltmain.sh create mode 100755 build-aux/mdate-sh create mode 100755 build-aux/missing create mode 100755 build-aux/run-test create mode 100755 build-aux/texi2html create mode 100644 build-aux/texinfo.tex create mode 100755 build-aux/windres-options create mode 100644 config.h.in create mode 100755 configure create mode 100644 configure.ac create mode 100644 doc/Makefile.am create mode 100644 doc/Makefile.in create mode 100644 doc/fdl.texi create mode 100644 doc/gpl.texi create mode 100644 doc/lgpl.texi create mode 100644 doc/libunistring.info create mode 100644 doc/libunistring.texi create mode 100644 doc/libunistring_1.html create mode 100644 doc/libunistring_10.html create mode 100644 doc/libunistring_11.html create mode 100644 doc/libunistring_12.html create mode 100644 doc/libunistring_13.html create mode 100644 doc/libunistring_14.html create mode 100644 doc/libunistring_15.html create mode 100644 doc/libunistring_16.html create mode 100644 doc/libunistring_17.html create mode 100644 doc/libunistring_18.html create mode 100644 doc/libunistring_19.html create mode 100644 doc/libunistring_2.html create mode 100644 doc/libunistring_3.html create mode 100644 doc/libunistring_4.html create mode 100644 doc/libunistring_5.html create mode 100644 doc/libunistring_6.html create mode 100644 doc/libunistring_7.html create mode 100644 doc/libunistring_8.html create mode 100644 doc/libunistring_9.html create mode 100644 doc/libunistring_abt.html create mode 100644 doc/libunistring_toc.html create mode 100644 doc/stamp-vti create mode 100644 doc/unicase.texi create mode 100644 doc/uniconv.texi create mode 100644 doc/unictype.texi create mode 100644 doc/unilbrk.texi create mode 100644 doc/uniname.texi create mode 100644 doc/uninorm.texi create mode 100644 doc/uniregex.texi create mode 100644 doc/unistdio.texi create mode 100644 doc/unistr.texi create mode 100644 doc/unitypes.texi create mode 100644 doc/uniwbrk.texi create mode 100644 doc/uniwidth.texi create mode 100644 doc/version.texi create mode 100644 gnulib-local/Makefile.am create mode 100644 gnulib-local/Makefile.in create mode 100644 gnulib-local/lib/unicase.h.diff create mode 100644 gnulib-local/lib/uniconv.h.diff create mode 100644 gnulib-local/lib/unictype.h.diff create mode 100644 gnulib-local/lib/unilbrk.h.diff create mode 100644 gnulib-local/lib/uninorm.h.diff create mode 100644 gnulib-local/lib/unistr.h.diff create mode 100644 gnulib-local/lib/unitypes.h.diff create mode 100644 gnulib-local/lib/uniwidth.h.diff create mode 100644 gnulib-local/modules/unictype/category-none-tests.diff create mode 100644 gnulib-m4/00gnulib.m4 create mode 100644 gnulib-m4/alloca.m4 create mode 100644 gnulib-m4/codeset.m4 create mode 100644 gnulib-m4/eealloc.m4 create mode 100644 gnulib-m4/environ.m4 create mode 100644 gnulib-m4/errno_h.m4 create mode 100644 gnulib-m4/error.m4 create mode 100644 gnulib-m4/exitfail.m4 create mode 100644 gnulib-m4/exponentd.m4 create mode 100644 gnulib-m4/exponentf.m4 create mode 100644 gnulib-m4/exponentl.m4 create mode 100644 gnulib-m4/extensions.m4 create mode 100644 gnulib-m4/float_h.m4 create mode 100644 gnulib-m4/fpieee.m4 create mode 100644 gnulib-m4/frexp.m4 create mode 100644 gnulib-m4/frexpl.m4 create mode 100644 gnulib-m4/getpagesize.m4 create mode 100644 gnulib-m4/glibc21.m4 create mode 100644 gnulib-m4/gnulib-cache.m4 create mode 100644 gnulib-m4/gnulib-common.m4 create mode 100644 gnulib-m4/gnulib-comp.m4 create mode 100644 gnulib-m4/iconv.m4 create mode 100644 gnulib-m4/iconv_h.m4 create mode 100644 gnulib-m4/iconv_open.m4 create mode 100644 gnulib-m4/include_next.m4 create mode 100644 gnulib-m4/inline.m4 create mode 100644 gnulib-m4/intlmacosx.m4 create mode 100644 gnulib-m4/intmax_t.m4 create mode 100644 gnulib-m4/inttypes_h.m4 create mode 100644 gnulib-m4/isnand.m4 create mode 100644 gnulib-m4/isnanf.m4 create mode 100644 gnulib-m4/isnanl.m4 create mode 100644 gnulib-m4/lcmessage.m4 create mode 100644 gnulib-m4/ldexpl.m4 create mode 100644 gnulib-m4/lib-ld.m4 create mode 100644 gnulib-m4/lib-link.m4 create mode 100644 gnulib-m4/lib-prefix.m4 create mode 100644 gnulib-m4/localcharset.m4 create mode 100644 gnulib-m4/locale-fr.m4 create mode 100644 gnulib-m4/locale-ja.m4 create mode 100644 gnulib-m4/locale-tr.m4 create mode 100644 gnulib-m4/locale-zh.m4 create mode 100644 gnulib-m4/locale_h.m4 create mode 100644 gnulib-m4/localename.m4 create mode 100644 gnulib-m4/longlong.m4 create mode 100644 gnulib-m4/malloc.m4 create mode 100644 gnulib-m4/malloca.m4 create mode 100644 gnulib-m4/math_h.m4 create mode 100644 gnulib-m4/mbchar.m4 create mode 100644 gnulib-m4/mbiter.m4 create mode 100644 gnulib-m4/mbrtowc.m4 create mode 100644 gnulib-m4/mbsinit.m4 create mode 100644 gnulib-m4/mbstate_t.m4 create mode 100644 gnulib-m4/memchr.m4 create mode 100644 gnulib-m4/minmax.m4 create mode 100644 gnulib-m4/mmap-anon.m4 create mode 100644 gnulib-m4/multiarch.m4 create mode 100644 gnulib-m4/nocrash.m4 create mode 100644 gnulib-m4/printf-frexp.m4 create mode 100644 gnulib-m4/printf-frexpl.m4 create mode 100644 gnulib-m4/printf.m4 create mode 100644 gnulib-m4/relocatable-lib.m4 create mode 100644 gnulib-m4/setenv.m4 create mode 100644 gnulib-m4/signbit.m4 create mode 100644 gnulib-m4/size_max.m4 create mode 100644 gnulib-m4/stdbool.m4 create mode 100644 gnulib-m4/stdint.m4 create mode 100644 gnulib-m4/stdint_h.m4 create mode 100644 gnulib-m4/stdlib_h.m4 create mode 100644 gnulib-m4/strerror.m4 create mode 100644 gnulib-m4/string_h.m4 create mode 100644 gnulib-m4/unistd_h.m4 create mode 100644 gnulib-m4/vasnprintf.m4 create mode 100644 gnulib-m4/wchar.m4 create mode 100644 gnulib-m4/wchar_t.m4 create mode 100644 gnulib-m4/wctob.m4 create mode 100644 gnulib-m4/wctype.m4 create mode 100644 gnulib-m4/wcwidth.m4 create mode 100644 gnulib-m4/wint_t.m4 create mode 100644 gnulib-m4/xalloc.m4 create mode 100644 gnulib-m4/xsize.m4 create mode 100644 lib/Makefile.am create mode 100644 lib/Makefile.gnulib create mode 100644 lib/Makefile.in create mode 100644 lib/alloca.in.h create mode 100644 lib/array-mergesort.h create mode 100644 lib/c-ctype.c create mode 100644 lib/c-ctype.h create mode 100644 lib/c-strcase.h create mode 100644 lib/c-strcasecmp.c create mode 100644 lib/c-strcaseeq.h create mode 100644 lib/c-strncasecmp.c create mode 100755 lib/config.charset create mode 100755 lib/declared.sh create mode 100644 lib/errno.in.h create mode 100644 lib/exported.sh.in create mode 100644 lib/float+.h create mode 100644 lib/float.in.h create mode 100644 lib/fpucw.h create mode 100644 lib/frexp.c create mode 100644 lib/frexpl.c create mode 100644 lib/fseterr.c create mode 100644 lib/fseterr.h create mode 100644 lib/getpagesize.c create mode 100644 lib/iconv.in.h create mode 100644 lib/iconv_open-aix.gperf create mode 100644 lib/iconv_open-aix.h create mode 100644 lib/iconv_open-hpux.gperf create mode 100644 lib/iconv_open-hpux.h create mode 100644 lib/iconv_open-irix.gperf create mode 100644 lib/iconv_open-irix.h create mode 100644 lib/iconv_open-osf.gperf create mode 100644 lib/iconv_open-osf.h create mode 100644 lib/iconv_open.c create mode 100644 lib/iconveh.h create mode 100644 lib/isnan.c create mode 100644 lib/isnand-nolibm.h create mode 100644 lib/isnand.c create mode 100644 lib/isnanf-nolibm.h create mode 100644 lib/isnanf.c create mode 100644 lib/isnanl-nolibm.h create mode 100644 lib/isnanl.c create mode 100644 lib/libunistring.rc create mode 100644 lib/libunistring.sym create mode 100644 lib/localcharset.c create mode 100644 lib/localcharset.h create mode 100644 lib/localename.c create mode 100644 lib/localename.h create mode 100644 lib/malloc.c create mode 100644 lib/malloca.c create mode 100644 lib/malloca.h create mode 100644 lib/malloca.valgrind create mode 100644 lib/math.in.h create mode 100644 lib/mbchar.c create mode 100644 lib/mbchar.h create mode 100644 lib/mbiter.h create mode 100644 lib/mbrtowc.c create mode 100644 lib/mbsinit.c create mode 100644 lib/mbsnlen.c create mode 100644 lib/memchr.c create mode 100644 lib/memchr.valgrind create mode 100644 lib/memcmp2.c create mode 100644 lib/memcmp2.h create mode 100644 lib/memxfrm.c create mode 100644 lib/memxfrm.h create mode 100644 lib/minmax.h create mode 100644 lib/printf-args.c create mode 100644 lib/printf-args.h create mode 100644 lib/printf-frexp.c create mode 100644 lib/printf-frexp.h create mode 100644 lib/printf-frexpl.c create mode 100644 lib/printf-frexpl.h create mode 100644 lib/printf-parse.c create mode 100644 lib/printf-parse.h create mode 100644 lib/ref-add.sin create mode 100644 lib/ref-del.sin create mode 100644 lib/relocatable.c create mode 100644 lib/relocatable.h create mode 100644 lib/signbitd.c create mode 100644 lib/signbitf.c create mode 100644 lib/signbitl.c create mode 100644 lib/size_max.h create mode 100644 lib/stdbool.in.h create mode 100644 lib/stdint.in.h create mode 100644 lib/stdint.mini.h create mode 100644 lib/stdio-impl.h create mode 100644 lib/stdlib.in.h create mode 100644 lib/streq.h create mode 100644 lib/striconveh.c create mode 100644 lib/striconveh.h create mode 100644 lib/striconveha.c create mode 100644 lib/striconveha.h create mode 100644 lib/string.in.h create mode 100644 lib/unicase.h create mode 100644 lib/unicase/cased.c create mode 100644 lib/unicase/cased.h create mode 100644 lib/unicase/casefold.h create mode 100644 lib/unicase/caseprop.h create mode 100644 lib/unicase/context.h create mode 100644 lib/unicase/empty-prefix-context.c create mode 100644 lib/unicase/empty-suffix-context.c create mode 100644 lib/unicase/ignorable.c create mode 100644 lib/unicase/ignorable.h create mode 100644 lib/unicase/invariant.h create mode 100644 lib/unicase/locale-language.c create mode 100644 lib/unicase/locale-languages.gperf create mode 100644 lib/unicase/locale-languages.h create mode 100644 lib/unicase/simple-mapping.h create mode 100644 lib/unicase/special-casing-table.gperf create mode 100644 lib/unicase/special-casing-table.h create mode 100644 lib/unicase/special-casing.c create mode 100644 lib/unicase/special-casing.h create mode 100644 lib/unicase/tocasefold.c create mode 100644 lib/unicase/tocasefold.h create mode 100644 lib/unicase/tolower.c create mode 100644 lib/unicase/tolower.h create mode 100644 lib/unicase/totitle.c create mode 100644 lib/unicase/totitle.h create mode 100644 lib/unicase/toupper.c create mode 100644 lib/unicase/toupper.h create mode 100644 lib/unicase/u-casecmp.h create mode 100644 lib/unicase/u-casecoll.h create mode 100644 lib/unicase/u-casefold.h create mode 100644 lib/unicase/u-casemap.h create mode 100644 lib/unicase/u-casexfrm.h create mode 100644 lib/unicase/u-ct-casefold.h create mode 100644 lib/unicase/u-ct-totitle.h create mode 100644 lib/unicase/u-is-cased.h create mode 100644 lib/unicase/u-is-invariant.h create mode 100644 lib/unicase/u-totitle.h create mode 100644 lib/unicase/u16-casecmp.c create mode 100644 lib/unicase/u16-casecoll.c create mode 100644 lib/unicase/u16-casefold.c create mode 100644 lib/unicase/u16-casemap.c create mode 100644 lib/unicase/u16-casexfrm.c create mode 100644 lib/unicase/u16-ct-casefold.c create mode 100644 lib/unicase/u16-ct-tolower.c create mode 100644 lib/unicase/u16-ct-totitle.c create mode 100644 lib/unicase/u16-ct-toupper.c create mode 100644 lib/unicase/u16-is-cased.c create mode 100644 lib/unicase/u16-is-casefolded.c create mode 100644 lib/unicase/u16-is-invariant.c create mode 100644 lib/unicase/u16-is-lowercase.c create mode 100644 lib/unicase/u16-is-titlecase.c create mode 100644 lib/unicase/u16-is-uppercase.c create mode 100644 lib/unicase/u16-tolower.c create mode 100644 lib/unicase/u16-totitle.c create mode 100644 lib/unicase/u16-toupper.c create mode 100644 lib/unicase/u32-casecmp.c create mode 100644 lib/unicase/u32-casecoll.c create mode 100644 lib/unicase/u32-casefold.c create mode 100644 lib/unicase/u32-casemap.c create mode 100644 lib/unicase/u32-casexfrm.c create mode 100644 lib/unicase/u32-ct-casefold.c create mode 100644 lib/unicase/u32-ct-tolower.c create mode 100644 lib/unicase/u32-ct-totitle.c create mode 100644 lib/unicase/u32-ct-toupper.c create mode 100644 lib/unicase/u32-is-cased.c create mode 100644 lib/unicase/u32-is-casefolded.c create mode 100644 lib/unicase/u32-is-invariant.c create mode 100644 lib/unicase/u32-is-lowercase.c create mode 100644 lib/unicase/u32-is-titlecase.c create mode 100644 lib/unicase/u32-is-uppercase.c create mode 100644 lib/unicase/u32-tolower.c create mode 100644 lib/unicase/u32-totitle.c create mode 100644 lib/unicase/u32-toupper.c create mode 100644 lib/unicase/u8-casecmp.c create mode 100644 lib/unicase/u8-casecoll.c create mode 100644 lib/unicase/u8-casefold.c create mode 100644 lib/unicase/u8-casemap.c create mode 100644 lib/unicase/u8-casexfrm.c create mode 100644 lib/unicase/u8-ct-casefold.c create mode 100644 lib/unicase/u8-ct-tolower.c create mode 100644 lib/unicase/u8-ct-totitle.c create mode 100644 lib/unicase/u8-ct-toupper.c create mode 100644 lib/unicase/u8-is-cased.c create mode 100644 lib/unicase/u8-is-casefolded.c create mode 100644 lib/unicase/u8-is-invariant.c create mode 100644 lib/unicase/u8-is-lowercase.c create mode 100644 lib/unicase/u8-is-titlecase.c create mode 100644 lib/unicase/u8-is-uppercase.c create mode 100644 lib/unicase/u8-tolower.c create mode 100644 lib/unicase/u8-totitle.c create mode 100644 lib/unicase/u8-toupper.c create mode 100644 lib/unicase/ulc-casecmp.c create mode 100644 lib/unicase/ulc-casecoll.c create mode 100644 lib/unicase/ulc-casexfrm.c create mode 100644 lib/unicase/unicasemap.h create mode 100644 lib/uniconv.h create mode 100644 lib/uniconv/u-conv-from-enc.h create mode 100644 lib/uniconv/u-conv-to-enc.h create mode 100644 lib/uniconv/u-strconv-from-enc.h create mode 100644 lib/uniconv/u-strconv-to-enc.h create mode 100644 lib/uniconv/u16-conv-from-enc.c create mode 100644 lib/uniconv/u16-conv-to-enc.c create mode 100644 lib/uniconv/u16-strconv-from-enc.c create mode 100644 lib/uniconv/u16-strconv-from-locale.c create mode 100644 lib/uniconv/u16-strconv-to-enc.c create mode 100644 lib/uniconv/u16-strconv-to-locale.c create mode 100644 lib/uniconv/u32-conv-from-enc.c create mode 100644 lib/uniconv/u32-conv-to-enc.c create mode 100644 lib/uniconv/u32-strconv-from-enc.c create mode 100644 lib/uniconv/u32-strconv-from-locale.c create mode 100644 lib/uniconv/u32-strconv-to-enc.c create mode 100644 lib/uniconv/u32-strconv-to-locale.c create mode 100644 lib/uniconv/u8-conv-from-enc.c create mode 100644 lib/uniconv/u8-conv-to-enc.c create mode 100644 lib/uniconv/u8-strconv-from-enc.c create mode 100644 lib/uniconv/u8-strconv-from-locale.c create mode 100644 lib/uniconv/u8-strconv-to-enc.c create mode 100644 lib/uniconv/u8-strconv-to-locale.c create mode 100644 lib/unictype.h create mode 100644 lib/unictype/bidi_byname.c create mode 100644 lib/unictype/bidi_name.c create mode 100644 lib/unictype/bidi_of.c create mode 100644 lib/unictype/bidi_of.h create mode 100644 lib/unictype/bidi_test.c create mode 100644 lib/unictype/bitmap.h create mode 100644 lib/unictype/block_test.c create mode 100644 lib/unictype/blocks.c create mode 100644 lib/unictype/blocks.h create mode 100644 lib/unictype/categ_C.c create mode 100644 lib/unictype/categ_C.h create mode 100644 lib/unictype/categ_Cc.c create mode 100644 lib/unictype/categ_Cc.h create mode 100644 lib/unictype/categ_Cf.c create mode 100644 lib/unictype/categ_Cf.h create mode 100644 lib/unictype/categ_Cn.c create mode 100644 lib/unictype/categ_Cn.h create mode 100644 lib/unictype/categ_Co.c create mode 100644 lib/unictype/categ_Co.h create mode 100644 lib/unictype/categ_Cs.c create mode 100644 lib/unictype/categ_Cs.h create mode 100644 lib/unictype/categ_L.c create mode 100644 lib/unictype/categ_L.h create mode 100644 lib/unictype/categ_Ll.c create mode 100644 lib/unictype/categ_Ll.h create mode 100644 lib/unictype/categ_Lm.c create mode 100644 lib/unictype/categ_Lm.h create mode 100644 lib/unictype/categ_Lo.c create mode 100644 lib/unictype/categ_Lo.h create mode 100644 lib/unictype/categ_Lt.c create mode 100644 lib/unictype/categ_Lt.h create mode 100644 lib/unictype/categ_Lu.c create mode 100644 lib/unictype/categ_Lu.h create mode 100644 lib/unictype/categ_M.c create mode 100644 lib/unictype/categ_M.h create mode 100644 lib/unictype/categ_Mc.c create mode 100644 lib/unictype/categ_Mc.h create mode 100644 lib/unictype/categ_Me.c create mode 100644 lib/unictype/categ_Me.h create mode 100644 lib/unictype/categ_Mn.c create mode 100644 lib/unictype/categ_Mn.h create mode 100644 lib/unictype/categ_N.c create mode 100644 lib/unictype/categ_N.h create mode 100644 lib/unictype/categ_Nd.c create mode 100644 lib/unictype/categ_Nd.h create mode 100644 lib/unictype/categ_Nl.c create mode 100644 lib/unictype/categ_Nl.h create mode 100644 lib/unictype/categ_No.c create mode 100644 lib/unictype/categ_No.h create mode 100644 lib/unictype/categ_P.c create mode 100644 lib/unictype/categ_P.h create mode 100644 lib/unictype/categ_Pc.c create mode 100644 lib/unictype/categ_Pc.h create mode 100644 lib/unictype/categ_Pd.c create mode 100644 lib/unictype/categ_Pd.h create mode 100644 lib/unictype/categ_Pe.c create mode 100644 lib/unictype/categ_Pe.h create mode 100644 lib/unictype/categ_Pf.c create mode 100644 lib/unictype/categ_Pf.h create mode 100644 lib/unictype/categ_Pi.c create mode 100644 lib/unictype/categ_Pi.h create mode 100644 lib/unictype/categ_Po.c create mode 100644 lib/unictype/categ_Po.h create mode 100644 lib/unictype/categ_Ps.c create mode 100644 lib/unictype/categ_Ps.h create mode 100644 lib/unictype/categ_S.c create mode 100644 lib/unictype/categ_S.h create mode 100644 lib/unictype/categ_Sc.c create mode 100644 lib/unictype/categ_Sc.h create mode 100644 lib/unictype/categ_Sk.c create mode 100644 lib/unictype/categ_Sk.h create mode 100644 lib/unictype/categ_Sm.c create mode 100644 lib/unictype/categ_Sm.h create mode 100644 lib/unictype/categ_So.c create mode 100644 lib/unictype/categ_So.h create mode 100644 lib/unictype/categ_Z.c create mode 100644 lib/unictype/categ_Z.h create mode 100644 lib/unictype/categ_Zl.c create mode 100644 lib/unictype/categ_Zl.h create mode 100644 lib/unictype/categ_Zp.c create mode 100644 lib/unictype/categ_Zp.h create mode 100644 lib/unictype/categ_Zs.c create mode 100644 lib/unictype/categ_Zs.h create mode 100644 lib/unictype/categ_and.c create mode 100644 lib/unictype/categ_and_not.c create mode 100644 lib/unictype/categ_byname.c create mode 100644 lib/unictype/categ_name.c create mode 100644 lib/unictype/categ_none.c create mode 100644 lib/unictype/categ_of.c create mode 100644 lib/unictype/categ_of.h create mode 100644 lib/unictype/categ_or.c create mode 100644 lib/unictype/categ_test.c create mode 100644 lib/unictype/combining.c create mode 100644 lib/unictype/combining.h create mode 100644 lib/unictype/ctype_alnum.c create mode 100644 lib/unictype/ctype_alnum.h create mode 100644 lib/unictype/ctype_alpha.c create mode 100644 lib/unictype/ctype_alpha.h create mode 100644 lib/unictype/ctype_blank.c create mode 100644 lib/unictype/ctype_blank.h create mode 100644 lib/unictype/ctype_cntrl.c create mode 100644 lib/unictype/ctype_cntrl.h create mode 100644 lib/unictype/ctype_digit.c create mode 100644 lib/unictype/ctype_digit.h create mode 100644 lib/unictype/ctype_graph.c create mode 100644 lib/unictype/ctype_graph.h create mode 100644 lib/unictype/ctype_lower.c create mode 100644 lib/unictype/ctype_lower.h create mode 100644 lib/unictype/ctype_print.c create mode 100644 lib/unictype/ctype_print.h create mode 100644 lib/unictype/ctype_punct.c create mode 100644 lib/unictype/ctype_punct.h create mode 100644 lib/unictype/ctype_space.c create mode 100644 lib/unictype/ctype_space.h create mode 100644 lib/unictype/ctype_upper.c create mode 100644 lib/unictype/ctype_upper.h create mode 100644 lib/unictype/ctype_xdigit.c create mode 100644 lib/unictype/ctype_xdigit.h create mode 100644 lib/unictype/decdigit.c create mode 100644 lib/unictype/decdigit.h create mode 100644 lib/unictype/digit.c create mode 100644 lib/unictype/digit.h create mode 100644 lib/unictype/identsyntaxmap.h create mode 100644 lib/unictype/mirror.c create mode 100644 lib/unictype/mirror.h create mode 100644 lib/unictype/numeric.c create mode 100644 lib/unictype/numeric.h create mode 100644 lib/unictype/pr_alphabetic.c create mode 100644 lib/unictype/pr_alphabetic.h create mode 100644 lib/unictype/pr_ascii_hex_digit.c create mode 100644 lib/unictype/pr_ascii_hex_digit.h create mode 100644 lib/unictype/pr_bidi_arabic_digit.c create mode 100644 lib/unictype/pr_bidi_arabic_digit.h create mode 100644 lib/unictype/pr_bidi_arabic_right_to_left.c create mode 100644 lib/unictype/pr_bidi_arabic_right_to_left.h create mode 100644 lib/unictype/pr_bidi_block_separator.c create mode 100644 lib/unictype/pr_bidi_block_separator.h create mode 100644 lib/unictype/pr_bidi_boundary_neutral.c create mode 100644 lib/unictype/pr_bidi_boundary_neutral.h create mode 100644 lib/unictype/pr_bidi_common_separator.c create mode 100644 lib/unictype/pr_bidi_common_separator.h create mode 100644 lib/unictype/pr_bidi_control.c create mode 100644 lib/unictype/pr_bidi_control.h create mode 100644 lib/unictype/pr_bidi_embedding_or_override.c create mode 100644 lib/unictype/pr_bidi_embedding_or_override.h create mode 100644 lib/unictype/pr_bidi_eur_num_separator.c create mode 100644 lib/unictype/pr_bidi_eur_num_separator.h create mode 100644 lib/unictype/pr_bidi_eur_num_terminator.c create mode 100644 lib/unictype/pr_bidi_eur_num_terminator.h create mode 100644 lib/unictype/pr_bidi_european_digit.c create mode 100644 lib/unictype/pr_bidi_european_digit.h create mode 100644 lib/unictype/pr_bidi_hebrew_right_to_left.c create mode 100644 lib/unictype/pr_bidi_hebrew_right_to_left.h create mode 100644 lib/unictype/pr_bidi_left_to_right.c create mode 100644 lib/unictype/pr_bidi_left_to_right.h create mode 100644 lib/unictype/pr_bidi_non_spacing_mark.c create mode 100644 lib/unictype/pr_bidi_non_spacing_mark.h create mode 100644 lib/unictype/pr_bidi_other_neutral.c create mode 100644 lib/unictype/pr_bidi_other_neutral.h create mode 100644 lib/unictype/pr_bidi_pdf.c create mode 100644 lib/unictype/pr_bidi_pdf.h create mode 100644 lib/unictype/pr_bidi_segment_separator.c create mode 100644 lib/unictype/pr_bidi_segment_separator.h create mode 100644 lib/unictype/pr_bidi_whitespace.c create mode 100644 lib/unictype/pr_bidi_whitespace.h create mode 100644 lib/unictype/pr_byname.c create mode 100644 lib/unictype/pr_byname.gperf create mode 100644 lib/unictype/pr_byname.h create mode 100644 lib/unictype/pr_combining.c create mode 100644 lib/unictype/pr_combining.h create mode 100644 lib/unictype/pr_composite.c create mode 100644 lib/unictype/pr_composite.h create mode 100644 lib/unictype/pr_currency_symbol.c create mode 100644 lib/unictype/pr_currency_symbol.h create mode 100644 lib/unictype/pr_dash.c create mode 100644 lib/unictype/pr_dash.h create mode 100644 lib/unictype/pr_decimal_digit.c create mode 100644 lib/unictype/pr_decimal_digit.h create mode 100644 lib/unictype/pr_default_ignorable_code_point.c create mode 100644 lib/unictype/pr_default_ignorable_code_point.h create mode 100644 lib/unictype/pr_deprecated.c create mode 100644 lib/unictype/pr_deprecated.h create mode 100644 lib/unictype/pr_diacritic.c create mode 100644 lib/unictype/pr_diacritic.h create mode 100644 lib/unictype/pr_extender.c create mode 100644 lib/unictype/pr_extender.h create mode 100644 lib/unictype/pr_format_control.c create mode 100644 lib/unictype/pr_format_control.h create mode 100644 lib/unictype/pr_grapheme_base.c create mode 100644 lib/unictype/pr_grapheme_base.h create mode 100644 lib/unictype/pr_grapheme_extend.c create mode 100644 lib/unictype/pr_grapheme_extend.h create mode 100644 lib/unictype/pr_grapheme_link.c create mode 100644 lib/unictype/pr_grapheme_link.h create mode 100644 lib/unictype/pr_hex_digit.c create mode 100644 lib/unictype/pr_hex_digit.h create mode 100644 lib/unictype/pr_hyphen.c create mode 100644 lib/unictype/pr_hyphen.h create mode 100644 lib/unictype/pr_id_continue.c create mode 100644 lib/unictype/pr_id_continue.h create mode 100644 lib/unictype/pr_id_start.c create mode 100644 lib/unictype/pr_id_start.h create mode 100644 lib/unictype/pr_ideographic.c create mode 100644 lib/unictype/pr_ideographic.h create mode 100644 lib/unictype/pr_ids_binary_operator.c create mode 100644 lib/unictype/pr_ids_binary_operator.h create mode 100644 lib/unictype/pr_ids_trinary_operator.c create mode 100644 lib/unictype/pr_ids_trinary_operator.h create mode 100644 lib/unictype/pr_ignorable_control.c create mode 100644 lib/unictype/pr_ignorable_control.h create mode 100644 lib/unictype/pr_iso_control.c create mode 100644 lib/unictype/pr_iso_control.h create mode 100644 lib/unictype/pr_join_control.c create mode 100644 lib/unictype/pr_join_control.h create mode 100644 lib/unictype/pr_left_of_pair.c create mode 100644 lib/unictype/pr_left_of_pair.h create mode 100644 lib/unictype/pr_line_separator.c create mode 100644 lib/unictype/pr_line_separator.h create mode 100644 lib/unictype/pr_logical_order_exception.c create mode 100644 lib/unictype/pr_logical_order_exception.h create mode 100644 lib/unictype/pr_lowercase.c create mode 100644 lib/unictype/pr_lowercase.h create mode 100644 lib/unictype/pr_math.c create mode 100644 lib/unictype/pr_math.h create mode 100644 lib/unictype/pr_non_break.c create mode 100644 lib/unictype/pr_non_break.h create mode 100644 lib/unictype/pr_not_a_character.c create mode 100644 lib/unictype/pr_not_a_character.h create mode 100644 lib/unictype/pr_numeric.c create mode 100644 lib/unictype/pr_numeric.h create mode 100644 lib/unictype/pr_other_alphabetic.c create mode 100644 lib/unictype/pr_other_alphabetic.h create mode 100644 lib/unictype/pr_other_default_ignorable_code_point.c create mode 100644 lib/unictype/pr_other_default_ignorable_code_point.h create mode 100644 lib/unictype/pr_other_grapheme_extend.c create mode 100644 lib/unictype/pr_other_grapheme_extend.h create mode 100644 lib/unictype/pr_other_id_continue.c create mode 100644 lib/unictype/pr_other_id_continue.h create mode 100644 lib/unictype/pr_other_id_start.c create mode 100644 lib/unictype/pr_other_id_start.h create mode 100644 lib/unictype/pr_other_lowercase.c create mode 100644 lib/unictype/pr_other_lowercase.h create mode 100644 lib/unictype/pr_other_math.c create mode 100644 lib/unictype/pr_other_math.h create mode 100644 lib/unictype/pr_other_uppercase.c create mode 100644 lib/unictype/pr_other_uppercase.h create mode 100644 lib/unictype/pr_paired_punctuation.c create mode 100644 lib/unictype/pr_paired_punctuation.h create mode 100644 lib/unictype/pr_paragraph_separator.c create mode 100644 lib/unictype/pr_paragraph_separator.h create mode 100644 lib/unictype/pr_pattern_syntax.c create mode 100644 lib/unictype/pr_pattern_syntax.h create mode 100644 lib/unictype/pr_pattern_white_space.c create mode 100644 lib/unictype/pr_pattern_white_space.h create mode 100644 lib/unictype/pr_private_use.c create mode 100644 lib/unictype/pr_private_use.h create mode 100644 lib/unictype/pr_punctuation.c create mode 100644 lib/unictype/pr_punctuation.h create mode 100644 lib/unictype/pr_quotation_mark.c create mode 100644 lib/unictype/pr_quotation_mark.h create mode 100644 lib/unictype/pr_radical.c create mode 100644 lib/unictype/pr_radical.h create mode 100644 lib/unictype/pr_sentence_terminal.c create mode 100644 lib/unictype/pr_sentence_terminal.h create mode 100644 lib/unictype/pr_soft_dotted.c create mode 100644 lib/unictype/pr_soft_dotted.h create mode 100644 lib/unictype/pr_space.c create mode 100644 lib/unictype/pr_space.h create mode 100644 lib/unictype/pr_terminal_punctuation.c create mode 100644 lib/unictype/pr_terminal_punctuation.h create mode 100644 lib/unictype/pr_test.c create mode 100644 lib/unictype/pr_titlecase.c create mode 100644 lib/unictype/pr_titlecase.h create mode 100644 lib/unictype/pr_unassigned_code_value.c create mode 100644 lib/unictype/pr_unassigned_code_value.h create mode 100644 lib/unictype/pr_unified_ideograph.c create mode 100644 lib/unictype/pr_unified_ideograph.h create mode 100644 lib/unictype/pr_uppercase.c create mode 100644 lib/unictype/pr_uppercase.h create mode 100644 lib/unictype/pr_variation_selector.c create mode 100644 lib/unictype/pr_variation_selector.h create mode 100644 lib/unictype/pr_white_space.c create mode 100644 lib/unictype/pr_white_space.h create mode 100644 lib/unictype/pr_xid_continue.c create mode 100644 lib/unictype/pr_xid_continue.h create mode 100644 lib/unictype/pr_xid_start.c create mode 100644 lib/unictype/pr_xid_start.h create mode 100644 lib/unictype/pr_zero_width.c create mode 100644 lib/unictype/pr_zero_width.h create mode 100644 lib/unictype/scripts.c create mode 100644 lib/unictype/scripts.h create mode 100644 lib/unictype/scripts_byname.gperf create mode 100644 lib/unictype/scripts_byname.h create mode 100644 lib/unictype/sy_c_ident.c create mode 100644 lib/unictype/sy_c_ident.h create mode 100644 lib/unictype/sy_c_whitespace.c create mode 100644 lib/unictype/sy_java_ident.c create mode 100644 lib/unictype/sy_java_ident.h create mode 100644 lib/unictype/sy_java_whitespace.c create mode 100644 lib/unilbrk.h create mode 100644 lib/unilbrk/lbrkprop1.h create mode 100644 lib/unilbrk/lbrkprop2.h create mode 100644 lib/unilbrk/lbrktables.c create mode 100644 lib/unilbrk/lbrktables.h create mode 100644 lib/unilbrk/u16-possible-linebreaks.c create mode 100644 lib/unilbrk/u16-width-linebreaks.c create mode 100644 lib/unilbrk/u32-possible-linebreaks.c create mode 100644 lib/unilbrk/u32-width-linebreaks.c create mode 100644 lib/unilbrk/u8-possible-linebreaks.c create mode 100644 lib/unilbrk/u8-width-linebreaks.c create mode 100644 lib/unilbrk/ulc-common.c create mode 100644 lib/unilbrk/ulc-common.h create mode 100644 lib/unilbrk/ulc-possible-linebreaks.c create mode 100644 lib/unilbrk/ulc-width-linebreaks.c create mode 100644 lib/uniname.h create mode 100755 lib/uniname/gen-uninames.lisp create mode 100644 lib/uniname/uniname.c create mode 100644 lib/uniname/uninames.h create mode 100644 lib/uninorm.h create mode 100644 lib/uninorm/canonical-decomposition.c create mode 100644 lib/uninorm/compat-decomposition.c create mode 100644 lib/uninorm/composition-table.gperf create mode 100644 lib/uninorm/composition-table.h create mode 100644 lib/uninorm/composition.c create mode 100644 lib/uninorm/decompose-internal.c create mode 100644 lib/uninorm/decompose-internal.h create mode 100644 lib/uninorm/decomposing-form.c create mode 100644 lib/uninorm/decomposition-table.c create mode 100644 lib/uninorm/decomposition-table.h create mode 100644 lib/uninorm/decomposition-table1.h create mode 100644 lib/uninorm/decomposition-table2.h create mode 100644 lib/uninorm/decomposition.c create mode 100644 lib/uninorm/nfc.c create mode 100644 lib/uninorm/nfd.c create mode 100644 lib/uninorm/nfkc.c create mode 100644 lib/uninorm/nfkd.c create mode 100644 lib/uninorm/normalize-internal.h create mode 100644 lib/uninorm/u-normalize-internal.h create mode 100644 lib/uninorm/u-normcmp.h create mode 100644 lib/uninorm/u-normcoll.h create mode 100644 lib/uninorm/u-normxfrm.h create mode 100644 lib/uninorm/u16-normalize.c create mode 100644 lib/uninorm/u16-normcmp.c create mode 100644 lib/uninorm/u16-normcoll.c create mode 100644 lib/uninorm/u16-normxfrm.c create mode 100644 lib/uninorm/u32-normalize.c create mode 100644 lib/uninorm/u32-normcmp.c create mode 100644 lib/uninorm/u32-normcoll.c create mode 100644 lib/uninorm/u32-normxfrm.c create mode 100644 lib/uninorm/u8-normalize.c create mode 100644 lib/uninorm/u8-normcmp.c create mode 100644 lib/uninorm/u8-normcoll.c create mode 100644 lib/uninorm/u8-normxfrm.c create mode 100644 lib/uninorm/uninorm-filter.c create mode 100644 lib/unistd.in.h create mode 100644 lib/unistdio.h create mode 100644 lib/unistdio/u-asnprintf.h create mode 100644 lib/unistdio/u-asprintf.h create mode 100644 lib/unistdio/u-printf-args.c create mode 100644 lib/unistdio/u-printf-args.h create mode 100644 lib/unistdio/u-printf-parse.h create mode 100644 lib/unistdio/u-snprintf.h create mode 100644 lib/unistdio/u-sprintf.h create mode 100644 lib/unistdio/u-vasprintf.h create mode 100644 lib/unistdio/u-vsnprintf.h create mode 100644 lib/unistdio/u-vsprintf.h create mode 100644 lib/unistdio/u16-asnprintf.c create mode 100644 lib/unistdio/u16-asprintf.c create mode 100644 lib/unistdio/u16-printf-parse.c create mode 100644 lib/unistdio/u16-snprintf.c create mode 100644 lib/unistdio/u16-sprintf.c create mode 100644 lib/unistdio/u16-u16-asnprintf.c create mode 100644 lib/unistdio/u16-u16-asprintf.c create mode 100644 lib/unistdio/u16-u16-snprintf.c create mode 100644 lib/unistdio/u16-u16-sprintf.c create mode 100644 lib/unistdio/u16-u16-vasnprintf.c create mode 100644 lib/unistdio/u16-u16-vasprintf.c create mode 100644 lib/unistdio/u16-u16-vsnprintf.c create mode 100644 lib/unistdio/u16-u16-vsprintf.c create mode 100644 lib/unistdio/u16-vasnprintf.c create mode 100644 lib/unistdio/u16-vasprintf.c create mode 100644 lib/unistdio/u16-vsnprintf.c create mode 100644 lib/unistdio/u16-vsprintf.c create mode 100644 lib/unistdio/u32-asnprintf.c create mode 100644 lib/unistdio/u32-asprintf.c create mode 100644 lib/unistdio/u32-printf-parse.c create mode 100644 lib/unistdio/u32-snprintf.c create mode 100644 lib/unistdio/u32-sprintf.c create mode 100644 lib/unistdio/u32-u32-asnprintf.c create mode 100644 lib/unistdio/u32-u32-asprintf.c create mode 100644 lib/unistdio/u32-u32-snprintf.c create mode 100644 lib/unistdio/u32-u32-sprintf.c create mode 100644 lib/unistdio/u32-u32-vasnprintf.c create mode 100644 lib/unistdio/u32-u32-vasprintf.c create mode 100644 lib/unistdio/u32-u32-vsnprintf.c create mode 100644 lib/unistdio/u32-u32-vsprintf.c create mode 100644 lib/unistdio/u32-vasnprintf.c create mode 100644 lib/unistdio/u32-vasprintf.c create mode 100644 lib/unistdio/u32-vsnprintf.c create mode 100644 lib/unistdio/u32-vsprintf.c create mode 100644 lib/unistdio/u8-asnprintf.c create mode 100644 lib/unistdio/u8-asprintf.c create mode 100644 lib/unistdio/u8-printf-parse.c create mode 100644 lib/unistdio/u8-snprintf.c create mode 100644 lib/unistdio/u8-sprintf.c create mode 100644 lib/unistdio/u8-u8-asnprintf.c create mode 100644 lib/unistdio/u8-u8-asprintf.c create mode 100644 lib/unistdio/u8-u8-snprintf.c create mode 100644 lib/unistdio/u8-u8-sprintf.c create mode 100644 lib/unistdio/u8-u8-vasnprintf.c create mode 100644 lib/unistdio/u8-u8-vasprintf.c create mode 100644 lib/unistdio/u8-u8-vsnprintf.c create mode 100644 lib/unistdio/u8-u8-vsprintf.c create mode 100644 lib/unistdio/u8-vasnprintf.c create mode 100644 lib/unistdio/u8-vasprintf.c create mode 100644 lib/unistdio/u8-vsnprintf.c create mode 100644 lib/unistdio/u8-vsprintf.c create mode 100644 lib/unistdio/ulc-asnprintf.c create mode 100644 lib/unistdio/ulc-asprintf.c create mode 100644 lib/unistdio/ulc-fprintf.c create mode 100644 lib/unistdio/ulc-printf-parse.c create mode 100644 lib/unistdio/ulc-snprintf.c create mode 100644 lib/unistdio/ulc-sprintf.c create mode 100644 lib/unistdio/ulc-vasnprintf.c create mode 100644 lib/unistdio/ulc-vasprintf.c create mode 100644 lib/unistdio/ulc-vfprintf.c create mode 100644 lib/unistdio/ulc-vsnprintf.c create mode 100644 lib/unistdio/ulc-vsprintf.c create mode 100644 lib/unistr.h create mode 100644 lib/unistr/u-cmp2.h create mode 100644 lib/unistr/u-cpy-alloc.h create mode 100644 lib/unistr/u-cpy.h create mode 100644 lib/unistr/u-endswith.h create mode 100644 lib/unistr/u-move.h create mode 100644 lib/unistr/u-set.h create mode 100644 lib/unistr/u-startswith.h create mode 100644 lib/unistr/u-stpcpy.h create mode 100644 lib/unistr/u-stpncpy.h create mode 100644 lib/unistr/u-strcat.h create mode 100644 lib/unistr/u-strcoll.h create mode 100644 lib/unistr/u-strcpy.h create mode 100644 lib/unistr/u-strcspn.h create mode 100644 lib/unistr/u-strdup.h create mode 100644 lib/unistr/u-strlen.h create mode 100644 lib/unistr/u-strncat.h create mode 100644 lib/unistr/u-strncpy.h create mode 100644 lib/unistr/u-strnlen.h create mode 100644 lib/unistr/u-strpbrk.h create mode 100644 lib/unistr/u-strspn.h create mode 100644 lib/unistr/u-strstr.h create mode 100644 lib/unistr/u-strtok.h create mode 100644 lib/unistr/u16-check.c create mode 100644 lib/unistr/u16-chr.c create mode 100644 lib/unistr/u16-cmp.c create mode 100644 lib/unistr/u16-cmp2.c create mode 100644 lib/unistr/u16-cpy-alloc.c create mode 100644 lib/unistr/u16-cpy.c create mode 100644 lib/unistr/u16-endswith.c create mode 100644 lib/unistr/u16-mblen.c create mode 100644 lib/unistr/u16-mbsnlen.c create mode 100644 lib/unistr/u16-mbtouc-aux.c create mode 100644 lib/unistr/u16-mbtouc-unsafe-aux.c create mode 100644 lib/unistr/u16-mbtouc-unsafe.c create mode 100644 lib/unistr/u16-mbtouc.c create mode 100644 lib/unistr/u16-mbtoucr.c create mode 100644 lib/unistr/u16-move.c create mode 100644 lib/unistr/u16-next.c create mode 100644 lib/unistr/u16-prev.c create mode 100644 lib/unistr/u16-set.c create mode 100644 lib/unistr/u16-startswith.c create mode 100644 lib/unistr/u16-stpcpy.c create mode 100644 lib/unistr/u16-stpncpy.c create mode 100644 lib/unistr/u16-strcat.c create mode 100644 lib/unistr/u16-strchr.c create mode 100644 lib/unistr/u16-strcmp.c create mode 100644 lib/unistr/u16-strcoll.c create mode 100644 lib/unistr/u16-strcpy.c create mode 100644 lib/unistr/u16-strcspn.c create mode 100644 lib/unistr/u16-strdup.c create mode 100644 lib/unistr/u16-strlen.c create mode 100644 lib/unistr/u16-strmblen.c create mode 100644 lib/unistr/u16-strmbtouc.c create mode 100644 lib/unistr/u16-strncat.c create mode 100644 lib/unistr/u16-strncmp.c create mode 100644 lib/unistr/u16-strncpy.c create mode 100644 lib/unistr/u16-strnlen.c create mode 100644 lib/unistr/u16-strpbrk.c create mode 100644 lib/unistr/u16-strrchr.c create mode 100644 lib/unistr/u16-strspn.c create mode 100644 lib/unistr/u16-strstr.c create mode 100644 lib/unistr/u16-strtok.c create mode 100644 lib/unistr/u16-to-u32.c create mode 100644 lib/unistr/u16-to-u8.c create mode 100644 lib/unistr/u16-uctomb-aux.c create mode 100644 lib/unistr/u16-uctomb.c create mode 100644 lib/unistr/u32-check.c create mode 100644 lib/unistr/u32-chr.c create mode 100644 lib/unistr/u32-cmp.c create mode 100644 lib/unistr/u32-cmp2.c create mode 100644 lib/unistr/u32-cpy-alloc.c create mode 100644 lib/unistr/u32-cpy.c create mode 100644 lib/unistr/u32-endswith.c create mode 100644 lib/unistr/u32-mblen.c create mode 100644 lib/unistr/u32-mbsnlen.c create mode 100644 lib/unistr/u32-mbtouc-unsafe.c create mode 100644 lib/unistr/u32-mbtouc.c create mode 100644 lib/unistr/u32-mbtoucr.c create mode 100644 lib/unistr/u32-move.c create mode 100644 lib/unistr/u32-next.c create mode 100644 lib/unistr/u32-prev.c create mode 100644 lib/unistr/u32-set.c create mode 100644 lib/unistr/u32-startswith.c create mode 100644 lib/unistr/u32-stpcpy.c create mode 100644 lib/unistr/u32-stpncpy.c create mode 100644 lib/unistr/u32-strcat.c create mode 100644 lib/unistr/u32-strchr.c create mode 100644 lib/unistr/u32-strcmp.c create mode 100644 lib/unistr/u32-strcoll.c create mode 100644 lib/unistr/u32-strcpy.c create mode 100644 lib/unistr/u32-strcspn.c create mode 100644 lib/unistr/u32-strdup.c create mode 100644 lib/unistr/u32-strlen.c create mode 100644 lib/unistr/u32-strmblen.c create mode 100644 lib/unistr/u32-strmbtouc.c create mode 100644 lib/unistr/u32-strncat.c create mode 100644 lib/unistr/u32-strncmp.c create mode 100644 lib/unistr/u32-strncpy.c create mode 100644 lib/unistr/u32-strnlen.c create mode 100644 lib/unistr/u32-strpbrk.c create mode 100644 lib/unistr/u32-strrchr.c create mode 100644 lib/unistr/u32-strspn.c create mode 100644 lib/unistr/u32-strstr.c create mode 100644 lib/unistr/u32-strtok.c create mode 100644 lib/unistr/u32-to-u16.c create mode 100644 lib/unistr/u32-to-u8.c create mode 100644 lib/unistr/u32-uctomb.c create mode 100644 lib/unistr/u8-check.c create mode 100644 lib/unistr/u8-chr.c create mode 100644 lib/unistr/u8-cmp.c create mode 100644 lib/unistr/u8-cmp2.c create mode 100644 lib/unistr/u8-cpy-alloc.c create mode 100644 lib/unistr/u8-cpy.c create mode 100644 lib/unistr/u8-endswith.c create mode 100644 lib/unistr/u8-mblen.c create mode 100644 lib/unistr/u8-mbsnlen.c create mode 100644 lib/unistr/u8-mbtouc-aux.c create mode 100644 lib/unistr/u8-mbtouc-unsafe-aux.c create mode 100644 lib/unistr/u8-mbtouc-unsafe.c create mode 100644 lib/unistr/u8-mbtouc.c create mode 100644 lib/unistr/u8-mbtoucr.c create mode 100644 lib/unistr/u8-move.c create mode 100644 lib/unistr/u8-next.c create mode 100644 lib/unistr/u8-prev.c create mode 100644 lib/unistr/u8-set.c create mode 100644 lib/unistr/u8-startswith.c create mode 100644 lib/unistr/u8-stpcpy.c create mode 100644 lib/unistr/u8-stpncpy.c create mode 100644 lib/unistr/u8-strcat.c create mode 100644 lib/unistr/u8-strchr.c create mode 100644 lib/unistr/u8-strcmp.c create mode 100644 lib/unistr/u8-strcoll.c create mode 100644 lib/unistr/u8-strcpy.c create mode 100644 lib/unistr/u8-strcspn.c create mode 100644 lib/unistr/u8-strdup.c create mode 100644 lib/unistr/u8-strlen.c create mode 100644 lib/unistr/u8-strmblen.c create mode 100644 lib/unistr/u8-strmbtouc.c create mode 100644 lib/unistr/u8-strncat.c create mode 100644 lib/unistr/u8-strncmp.c create mode 100644 lib/unistr/u8-strncpy.c create mode 100644 lib/unistr/u8-strnlen.c create mode 100644 lib/unistr/u8-strpbrk.c create mode 100644 lib/unistr/u8-strrchr.c create mode 100644 lib/unistr/u8-strspn.c create mode 100644 lib/unistr/u8-strstr.c create mode 100644 lib/unistr/u8-strtok.c create mode 100644 lib/unistr/u8-to-u16.c create mode 100644 lib/unistr/u8-to-u32.c create mode 100644 lib/unistr/u8-uctomb-aux.c create mode 100644 lib/unistr/u8-uctomb.c create mode 100644 lib/unistring-notinline.h create mode 100644 lib/unistring/inline.h create mode 100644 lib/unistring/version.in.h create mode 100644 lib/unistring/woe32dll.in.h create mode 100644 lib/unitypes.h create mode 100644 lib/uniwbrk.h create mode 100644 lib/uniwbrk/u-wordbreaks.h create mode 100644 lib/uniwbrk/u16-wordbreaks.c create mode 100644 lib/uniwbrk/u32-wordbreaks.c create mode 100644 lib/uniwbrk/u8-wordbreaks.c create mode 100644 lib/uniwbrk/ulc-wordbreaks.c create mode 100644 lib/uniwbrk/wbrkprop.h create mode 100644 lib/uniwbrk/wbrktable.c create mode 100644 lib/uniwbrk/wbrktable.h create mode 100644 lib/uniwbrk/wordbreak-property.c create mode 100644 lib/uniwidth.h create mode 100644 lib/uniwidth/cjk.h create mode 100644 lib/uniwidth/u16-strwidth.c create mode 100644 lib/uniwidth/u16-width.c create mode 100644 lib/uniwidth/u32-strwidth.c create mode 100644 lib/uniwidth/u32-width.c create mode 100644 lib/uniwidth/u8-strwidth.c create mode 100644 lib/uniwidth/u8-width.c create mode 100644 lib/uniwidth/width.c create mode 100644 lib/vasnprintf.c create mode 100644 lib/verify.h create mode 100644 lib/version.c create mode 100644 lib/wchar.in.h create mode 100644 lib/wctype.in.h create mode 100644 lib/wcwidth.c create mode 100644 lib/xsize.h create mode 100644 m4/exported.m4 create mode 100644 m4/init-package-version.m4 create mode 100644 m4/libtool.m4 create mode 100644 m4/ltoptions.m4 create mode 100644 m4/ltsugar.m4 create mode 100644 m4/ltversion.m4 create mode 100644 m4/lt~obsolete.m4 create mode 100644 m4/woe32-dll.m4 create mode 100644 tests/Makefile.am create mode 100644 tests/Makefile.gnulib create mode 100644 tests/Makefile.in create mode 100644 tests/error.c create mode 100644 tests/error.h create mode 100644 tests/exitfail.c create mode 100644 tests/exitfail.h create mode 100644 tests/gettext.h create mode 100644 tests/intprops.h create mode 100644 tests/locale.in.h create mode 100644 tests/nan.h create mode 100644 tests/progname.c create mode 100644 tests/progname.h create mode 100644 tests/setenv.c create mode 100644 tests/strerror.c create mode 100644 tests/test-alloca-opt.c create mode 100644 tests/test-array-mergesort.c create mode 100644 tests/test-c-ctype.c create mode 100755 tests/test-c-strcase.sh create mode 100644 tests/test-c-strcasecmp.c create mode 100644 tests/test-c-strncasecmp.c create mode 100644 tests/test-environ.c create mode 100644 tests/test-errno.c create mode 100644 tests/test-frexpl.c create mode 100644 tests/test-fseterr.c create mode 100644 tests/test-iconv.c create mode 100644 tests/test-isnand-nolibm.c create mode 100644 tests/test-isnand.h create mode 100644 tests/test-isnanf-nolibm.c create mode 100644 tests/test-isnanf.h create mode 100644 tests/test-isnanl-nolibm.c create mode 100644 tests/test-isnanl.h create mode 100644 tests/test-locale.c create mode 100644 tests/test-localename.c create mode 100644 tests/test-malloca.c create mode 100644 tests/test-math.c create mode 100644 tests/test-mbrtowc.c create mode 100755 tests/test-mbrtowc1.sh create mode 100755 tests/test-mbrtowc2.sh create mode 100755 tests/test-mbrtowc3.sh create mode 100755 tests/test-mbrtowc4.sh create mode 100644 tests/test-mbsinit.c create mode 100755 tests/test-mbsinit.sh create mode 100644 tests/test-memchr.c create mode 100644 tests/test-printf-frexp.c create mode 100644 tests/test-printf-frexpl.c create mode 100644 tests/test-signbit.c create mode 100644 tests/test-stdbool.c create mode 100644 tests/test-stdint.c create mode 100644 tests/test-stdlib.c create mode 100644 tests/test-strerror.c create mode 100644 tests/test-striconveh.c create mode 100644 tests/test-striconveha.c create mode 100644 tests/test-string.c create mode 100644 tests/test-unistd.c create mode 100644 tests/test-wchar.c create mode 100644 tests/test-wctype.c create mode 100644 tests/test-wcwidth.c create mode 100644 tests/unicase/test-casecmp.h create mode 100644 tests/unicase/test-cased.c create mode 100644 tests/unicase/test-ignorable.c create mode 100644 tests/unicase/test-is-cased.h create mode 100644 tests/unicase/test-is-casefolded.h create mode 100644 tests/unicase/test-is-lowercase.h create mode 100644 tests/unicase/test-is-titlecase.h create mode 100644 tests/unicase/test-is-uppercase.h create mode 100644 tests/unicase/test-locale-language.c create mode 100755 tests/unicase/test-locale-language.sh create mode 100644 tests/unicase/test-mapping-part1.h create mode 100644 tests/unicase/test-mapping-part2.h create mode 100644 tests/unicase/test-predicate-part1.h create mode 100644 tests/unicase/test-predicate-part2.h create mode 100644 tests/unicase/test-u16-casecmp.c create mode 100644 tests/unicase/test-u16-casecoll.c create mode 100644 tests/unicase/test-u16-casefold.c create mode 100644 tests/unicase/test-u16-is-cased.c create mode 100644 tests/unicase/test-u16-is-casefolded.c create mode 100644 tests/unicase/test-u16-is-lowercase.c create mode 100644 tests/unicase/test-u16-is-titlecase.c create mode 100644 tests/unicase/test-u16-is-uppercase.c create mode 100644 tests/unicase/test-u16-tolower.c create mode 100644 tests/unicase/test-u16-totitle.c create mode 100644 tests/unicase/test-u16-toupper.c create mode 100644 tests/unicase/test-u32-casecmp.c create mode 100644 tests/unicase/test-u32-casecoll.c create mode 100644 tests/unicase/test-u32-casefold.c create mode 100644 tests/unicase/test-u32-is-cased.c create mode 100644 tests/unicase/test-u32-is-casefolded.c create mode 100644 tests/unicase/test-u32-is-lowercase.c create mode 100644 tests/unicase/test-u32-is-titlecase.c create mode 100644 tests/unicase/test-u32-is-uppercase.c create mode 100644 tests/unicase/test-u32-tolower.c create mode 100644 tests/unicase/test-u32-totitle.c create mode 100644 tests/unicase/test-u32-toupper.c create mode 100644 tests/unicase/test-u8-casecmp.c create mode 100644 tests/unicase/test-u8-casecoll.c create mode 100644 tests/unicase/test-u8-casefold.c create mode 100644 tests/unicase/test-u8-is-cased.c create mode 100644 tests/unicase/test-u8-is-casefolded.c create mode 100644 tests/unicase/test-u8-is-lowercase.c create mode 100644 tests/unicase/test-u8-is-titlecase.c create mode 100644 tests/unicase/test-u8-is-uppercase.c create mode 100644 tests/unicase/test-u8-tolower.c create mode 100644 tests/unicase/test-u8-totitle.c create mode 100644 tests/unicase/test-u8-toupper.c create mode 100644 tests/unicase/test-uc_tolower.c create mode 100644 tests/unicase/test-uc_totitle.c create mode 100644 tests/unicase/test-uc_toupper.c create mode 100644 tests/unicase/test-ulc-casecmp.c create mode 100755 tests/unicase/test-ulc-casecmp1.sh create mode 100755 tests/unicase/test-ulc-casecmp2.sh create mode 100644 tests/unicase/test-ulc-casecoll.c create mode 100755 tests/unicase/test-ulc-casecoll1.sh create mode 100755 tests/unicase/test-ulc-casecoll2.sh create mode 100644 tests/uniconv/test-u16-conv-from-enc.c create mode 100644 tests/uniconv/test-u16-conv-to-enc.c create mode 100644 tests/uniconv/test-u16-strconv-from-enc.c create mode 100644 tests/uniconv/test-u16-strconv-to-enc.c create mode 100644 tests/uniconv/test-u32-conv-from-enc.c create mode 100644 tests/uniconv/test-u32-conv-to-enc.c create mode 100644 tests/uniconv/test-u32-strconv-from-enc.c create mode 100644 tests/uniconv/test-u32-strconv-to-enc.c create mode 100644 tests/uniconv/test-u8-conv-from-enc.c create mode 100644 tests/uniconv/test-u8-conv-to-enc.c create mode 100644 tests/uniconv/test-u8-strconv-from-enc.c create mode 100644 tests/uniconv/test-u8-strconv-to-enc.c create mode 100644 tests/unictype/test-bidi_byname.c create mode 100644 tests/unictype/test-bidi_name.c create mode 100644 tests/unictype/test-bidi_of.c create mode 100644 tests/unictype/test-bidi_test.c create mode 100644 tests/unictype/test-block_list.c create mode 100644 tests/unictype/test-block_of.c create mode 100644 tests/unictype/test-block_test.c create mode 100644 tests/unictype/test-categ_C.c create mode 100644 tests/unictype/test-categ_Cc.c create mode 100644 tests/unictype/test-categ_Cf.c create mode 100644 tests/unictype/test-categ_Cn.c create mode 100644 tests/unictype/test-categ_Co.c create mode 100644 tests/unictype/test-categ_Cs.c create mode 100644 tests/unictype/test-categ_L.c create mode 100644 tests/unictype/test-categ_Ll.c create mode 100644 tests/unictype/test-categ_Lm.c create mode 100644 tests/unictype/test-categ_Lo.c create mode 100644 tests/unictype/test-categ_Lt.c create mode 100644 tests/unictype/test-categ_Lu.c create mode 100644 tests/unictype/test-categ_M.c create mode 100644 tests/unictype/test-categ_Mc.c create mode 100644 tests/unictype/test-categ_Me.c create mode 100644 tests/unictype/test-categ_Mn.c create mode 100644 tests/unictype/test-categ_N.c create mode 100644 tests/unictype/test-categ_Nd.c create mode 100644 tests/unictype/test-categ_Nl.c create mode 100644 tests/unictype/test-categ_No.c create mode 100644 tests/unictype/test-categ_P.c create mode 100644 tests/unictype/test-categ_Pc.c create mode 100644 tests/unictype/test-categ_Pd.c create mode 100644 tests/unictype/test-categ_Pe.c create mode 100644 tests/unictype/test-categ_Pf.c create mode 100644 tests/unictype/test-categ_Pi.c create mode 100644 tests/unictype/test-categ_Po.c create mode 100644 tests/unictype/test-categ_Ps.c create mode 100644 tests/unictype/test-categ_S.c create mode 100644 tests/unictype/test-categ_Sc.c create mode 100644 tests/unictype/test-categ_Sk.c create mode 100644 tests/unictype/test-categ_Sm.c create mode 100644 tests/unictype/test-categ_So.c create mode 100644 tests/unictype/test-categ_Z.c create mode 100644 tests/unictype/test-categ_Zl.c create mode 100644 tests/unictype/test-categ_Zp.c create mode 100644 tests/unictype/test-categ_Zs.c create mode 100644 tests/unictype/test-categ_and.c create mode 100644 tests/unictype/test-categ_and_not.c create mode 100644 tests/unictype/test-categ_byname.c create mode 100644 tests/unictype/test-categ_name.c create mode 100644 tests/unictype/test-categ_none.c create mode 100644 tests/unictype/test-categ_of.c create mode 100644 tests/unictype/test-categ_or.c create mode 100644 tests/unictype/test-categ_test_withtable.c create mode 100644 tests/unictype/test-combining.c create mode 100644 tests/unictype/test-ctype_alnum.c create mode 100644 tests/unictype/test-ctype_alpha.c create mode 100644 tests/unictype/test-ctype_blank.c create mode 100644 tests/unictype/test-ctype_cntrl.c create mode 100644 tests/unictype/test-ctype_digit.c create mode 100644 tests/unictype/test-ctype_graph.c create mode 100644 tests/unictype/test-ctype_lower.c create mode 100644 tests/unictype/test-ctype_print.c create mode 100644 tests/unictype/test-ctype_punct.c create mode 100644 tests/unictype/test-ctype_space.c create mode 100644 tests/unictype/test-ctype_upper.c create mode 100644 tests/unictype/test-ctype_xdigit.c create mode 100644 tests/unictype/test-decdigit.c create mode 100644 tests/unictype/test-decdigit.h create mode 100644 tests/unictype/test-digit.c create mode 100644 tests/unictype/test-digit.h create mode 100644 tests/unictype/test-mirror.c create mode 100644 tests/unictype/test-numeric.c create mode 100644 tests/unictype/test-numeric.h create mode 100644 tests/unictype/test-pr_alphabetic.c create mode 100644 tests/unictype/test-pr_ascii_hex_digit.c create mode 100644 tests/unictype/test-pr_bidi_arabic_digit.c create mode 100644 tests/unictype/test-pr_bidi_arabic_right_to_left.c create mode 100644 tests/unictype/test-pr_bidi_block_separator.c create mode 100644 tests/unictype/test-pr_bidi_boundary_neutral.c create mode 100644 tests/unictype/test-pr_bidi_common_separator.c create mode 100644 tests/unictype/test-pr_bidi_control.c create mode 100644 tests/unictype/test-pr_bidi_embedding_or_override.c create mode 100644 tests/unictype/test-pr_bidi_eur_num_separator.c create mode 100644 tests/unictype/test-pr_bidi_eur_num_terminator.c create mode 100644 tests/unictype/test-pr_bidi_european_digit.c create mode 100644 tests/unictype/test-pr_bidi_hebrew_right_to_left.c create mode 100644 tests/unictype/test-pr_bidi_left_to_right.c create mode 100644 tests/unictype/test-pr_bidi_non_spacing_mark.c create mode 100644 tests/unictype/test-pr_bidi_other_neutral.c create mode 100644 tests/unictype/test-pr_bidi_pdf.c create mode 100644 tests/unictype/test-pr_bidi_segment_separator.c create mode 100644 tests/unictype/test-pr_bidi_whitespace.c create mode 100644 tests/unictype/test-pr_byname.c create mode 100644 tests/unictype/test-pr_combining.c create mode 100644 tests/unictype/test-pr_composite.c create mode 100644 tests/unictype/test-pr_currency_symbol.c create mode 100644 tests/unictype/test-pr_dash.c create mode 100644 tests/unictype/test-pr_decimal_digit.c create mode 100644 tests/unictype/test-pr_default_ignorable_code_point.c create mode 100644 tests/unictype/test-pr_deprecated.c create mode 100644 tests/unictype/test-pr_diacritic.c create mode 100644 tests/unictype/test-pr_extender.c create mode 100644 tests/unictype/test-pr_format_control.c create mode 100644 tests/unictype/test-pr_grapheme_base.c create mode 100644 tests/unictype/test-pr_grapheme_extend.c create mode 100644 tests/unictype/test-pr_grapheme_link.c create mode 100644 tests/unictype/test-pr_hex_digit.c create mode 100644 tests/unictype/test-pr_hyphen.c create mode 100644 tests/unictype/test-pr_id_continue.c create mode 100644 tests/unictype/test-pr_id_start.c create mode 100644 tests/unictype/test-pr_ideographic.c create mode 100644 tests/unictype/test-pr_ids_binary_operator.c create mode 100644 tests/unictype/test-pr_ids_trinary_operator.c create mode 100644 tests/unictype/test-pr_ignorable_control.c create mode 100644 tests/unictype/test-pr_iso_control.c create mode 100644 tests/unictype/test-pr_join_control.c create mode 100644 tests/unictype/test-pr_left_of_pair.c create mode 100644 tests/unictype/test-pr_line_separator.c create mode 100644 tests/unictype/test-pr_logical_order_exception.c create mode 100644 tests/unictype/test-pr_lowercase.c create mode 100644 tests/unictype/test-pr_math.c create mode 100644 tests/unictype/test-pr_non_break.c create mode 100644 tests/unictype/test-pr_not_a_character.c create mode 100644 tests/unictype/test-pr_numeric.c create mode 100644 tests/unictype/test-pr_other_alphabetic.c create mode 100644 tests/unictype/test-pr_other_default_ignorable_code_point.c create mode 100644 tests/unictype/test-pr_other_grapheme_extend.c create mode 100644 tests/unictype/test-pr_other_id_continue.c create mode 100644 tests/unictype/test-pr_other_id_start.c create mode 100644 tests/unictype/test-pr_other_lowercase.c create mode 100644 tests/unictype/test-pr_other_math.c create mode 100644 tests/unictype/test-pr_other_uppercase.c create mode 100644 tests/unictype/test-pr_paired_punctuation.c create mode 100644 tests/unictype/test-pr_paragraph_separator.c create mode 100644 tests/unictype/test-pr_pattern_syntax.c create mode 100644 tests/unictype/test-pr_pattern_white_space.c create mode 100644 tests/unictype/test-pr_private_use.c create mode 100644 tests/unictype/test-pr_punctuation.c create mode 100644 tests/unictype/test-pr_quotation_mark.c create mode 100644 tests/unictype/test-pr_radical.c create mode 100644 tests/unictype/test-pr_sentence_terminal.c create mode 100644 tests/unictype/test-pr_soft_dotted.c create mode 100644 tests/unictype/test-pr_space.c create mode 100644 tests/unictype/test-pr_terminal_punctuation.c create mode 100644 tests/unictype/test-pr_test.c create mode 100644 tests/unictype/test-pr_titlecase.c create mode 100644 tests/unictype/test-pr_unassigned_code_value.c create mode 100644 tests/unictype/test-pr_unified_ideograph.c create mode 100644 tests/unictype/test-pr_uppercase.c create mode 100644 tests/unictype/test-pr_variation_selector.c create mode 100644 tests/unictype/test-pr_white_space.c create mode 100644 tests/unictype/test-pr_xid_continue.c create mode 100644 tests/unictype/test-pr_xid_start.c create mode 100644 tests/unictype/test-pr_zero_width.c create mode 100644 tests/unictype/test-predicate-part1.h create mode 100644 tests/unictype/test-predicate-part2.h create mode 100644 tests/unictype/test-scripts.c create mode 100644 tests/unictype/test-sy_c_ident.c create mode 100644 tests/unictype/test-sy_c_whitespace.c create mode 100644 tests/unictype/test-sy_java_ident.c create mode 100644 tests/unictype/test-sy_java_whitespace.c create mode 100644 tests/unilbrk/test-u16-possible-linebreaks.c create mode 100644 tests/unilbrk/test-u16-width-linebreaks.c create mode 100644 tests/unilbrk/test-u32-possible-linebreaks.c create mode 100644 tests/unilbrk/test-u32-width-linebreaks.c create mode 100644 tests/unilbrk/test-u8-possible-linebreaks.c create mode 100644 tests/unilbrk/test-u8-width-linebreaks.c create mode 100644 tests/unilbrk/test-ulc-possible-linebreaks.c create mode 100644 tests/unilbrk/test-ulc-width-linebreaks.c create mode 100644 tests/uniname/UnicodeDataNames.txt create mode 100644 tests/uniname/test-uninames.c create mode 100755 tests/uniname/test-uninames.sh create mode 100644 tests/uninorm/NormalizationTest.txt create mode 100644 tests/uninorm/test-canonical-decomposition.c create mode 100644 tests/uninorm/test-compat-decomposition.c create mode 100644 tests/uninorm/test-composition.c create mode 100644 tests/uninorm/test-decomposing-form.c create mode 100644 tests/uninorm/test-decomposition.c create mode 100644 tests/uninorm/test-nfc.c create mode 100644 tests/uninorm/test-nfd.c create mode 100644 tests/uninorm/test-nfkc.c create mode 100644 tests/uninorm/test-nfkd.c create mode 100644 tests/uninorm/test-u16-nfc.c create mode 100644 tests/uninorm/test-u16-nfd.c create mode 100644 tests/uninorm/test-u16-nfkc.c create mode 100644 tests/uninorm/test-u16-nfkd.c create mode 100644 tests/uninorm/test-u16-normcmp.c create mode 100644 tests/uninorm/test-u16-normcmp.h create mode 100644 tests/uninorm/test-u16-normcoll.c create mode 100644 tests/uninorm/test-u32-nfc-big.c create mode 100755 tests/uninorm/test-u32-nfc-big.sh create mode 100644 tests/uninorm/test-u32-nfc.c create mode 100644 tests/uninorm/test-u32-nfd-big.c create mode 100755 tests/uninorm/test-u32-nfd-big.sh create mode 100644 tests/uninorm/test-u32-nfd.c create mode 100644 tests/uninorm/test-u32-nfkc-big.c create mode 100755 tests/uninorm/test-u32-nfkc-big.sh create mode 100644 tests/uninorm/test-u32-nfkc.c create mode 100644 tests/uninorm/test-u32-nfkd-big.c create mode 100755 tests/uninorm/test-u32-nfkd-big.sh create mode 100644 tests/uninorm/test-u32-nfkd.c create mode 100644 tests/uninorm/test-u32-normalize-big.c create mode 100644 tests/uninorm/test-u32-normalize-big.h create mode 100644 tests/uninorm/test-u32-normcmp.c create mode 100644 tests/uninorm/test-u32-normcmp.h create mode 100644 tests/uninorm/test-u32-normcoll.c create mode 100644 tests/uninorm/test-u8-nfc.c create mode 100644 tests/uninorm/test-u8-nfd.c create mode 100644 tests/uninorm/test-u8-nfkc.c create mode 100644 tests/uninorm/test-u8-nfkd.c create mode 100644 tests/uninorm/test-u8-normcmp.c create mode 100644 tests/uninorm/test-u8-normcmp.h create mode 100644 tests/uninorm/test-u8-normcoll.c create mode 100644 tests/uninorm/test-uninorm-filter-nfc.c create mode 100644 tests/unistdio/test-u16-asnprintf1.c create mode 100644 tests/unistdio/test-u16-asnprintf1.h create mode 100644 tests/unistdio/test-u16-printf1.h create mode 100644 tests/unistdio/test-u16-vasnprintf1.c create mode 100644 tests/unistdio/test-u16-vasnprintf2.c create mode 100755 tests/unistdio/test-u16-vasnprintf2.sh create mode 100644 tests/unistdio/test-u16-vasnprintf3.c create mode 100755 tests/unistdio/test-u16-vasnprintf3.sh create mode 100644 tests/unistdio/test-u16-vasprintf1.c create mode 100644 tests/unistdio/test-u16-vsnprintf1.c create mode 100644 tests/unistdio/test-u16-vsprintf1.c create mode 100644 tests/unistdio/test-u32-asnprintf1.c create mode 100644 tests/unistdio/test-u32-asnprintf1.h create mode 100644 tests/unistdio/test-u32-printf1.h create mode 100644 tests/unistdio/test-u32-vasnprintf1.c create mode 100644 tests/unistdio/test-u32-vasnprintf2.c create mode 100755 tests/unistdio/test-u32-vasnprintf2.sh create mode 100644 tests/unistdio/test-u32-vasnprintf3.c create mode 100755 tests/unistdio/test-u32-vasnprintf3.sh create mode 100644 tests/unistdio/test-u32-vasprintf1.c create mode 100644 tests/unistdio/test-u32-vsnprintf1.c create mode 100644 tests/unistdio/test-u32-vsprintf1.c create mode 100644 tests/unistdio/test-u8-asnprintf1.c create mode 100644 tests/unistdio/test-u8-asnprintf1.h create mode 100644 tests/unistdio/test-u8-printf1.h create mode 100644 tests/unistdio/test-u8-vasnprintf1.c create mode 100644 tests/unistdio/test-u8-vasnprintf2.c create mode 100755 tests/unistdio/test-u8-vasnprintf2.sh create mode 100644 tests/unistdio/test-u8-vasnprintf3.c create mode 100755 tests/unistdio/test-u8-vasnprintf3.sh create mode 100644 tests/unistdio/test-u8-vasprintf1.c create mode 100644 tests/unistdio/test-u8-vsnprintf1.c create mode 100644 tests/unistdio/test-u8-vsprintf1.c create mode 100644 tests/unistdio/test-ulc-asnprintf1.c create mode 100644 tests/unistdio/test-ulc-asnprintf1.h create mode 100644 tests/unistdio/test-ulc-printf1.h create mode 100644 tests/unistdio/test-ulc-vasnprintf1.c create mode 100644 tests/unistdio/test-ulc-vasnprintf2.c create mode 100755 tests/unistdio/test-ulc-vasnprintf2.sh create mode 100644 tests/unistdio/test-ulc-vasnprintf3.c create mode 100755 tests/unistdio/test-ulc-vasnprintf3.sh create mode 100644 tests/unistdio/test-ulc-vasprintf1.c create mode 100644 tests/unistdio/test-ulc-vsnprintf1.c create mode 100644 tests/unistdio/test-ulc-vsprintf1.c create mode 100644 tests/uniwbrk/test-u16-wordbreaks.c create mode 100644 tests/uniwbrk/test-u32-wordbreaks.c create mode 100644 tests/uniwbrk/test-u8-wordbreaks.c create mode 100644 tests/uniwbrk/test-ulc-wordbreaks.c create mode 100755 tests/uniwbrk/test-ulc-wordbreaks.sh create mode 100644 tests/uniwidth/test-u16-strwidth.c create mode 100644 tests/uniwidth/test-u16-width.c create mode 100644 tests/uniwidth/test-u32-strwidth.c create mode 100644 tests/uniwidth/test-u32-width.c create mode 100644 tests/uniwidth/test-u8-strwidth.c create mode 100644 tests/uniwidth/test-u8-width.c create mode 100644 tests/uniwidth/test-uc_width.c create mode 100644 tests/uniwidth/test-uc_width2.c create mode 100755 tests/uniwidth/test-uc_width2.sh create mode 100644 tests/unsetenv.c create mode 100644 tests/wctob.c create mode 100644 tests/xalloc-die.c create mode 100644 tests/xalloc.h create mode 100644 tests/xmalloc.c create mode 100644 tests/zerosize-ptr.h create mode 100644 version.sh create mode 100644 woe32dll/export.h create mode 100644 woe32dll/unistring-exports.c diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 00000000..8bedd794 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Bruno Haible diff --git a/BUGS b/BUGS new file mode 100644 index 00000000..0d2f9798 --- /dev/null +++ b/BUGS @@ -0,0 +1,6 @@ +List of known bugs and limitations: + +- Line breaking of Thai text should use a dictionary based approach. If you + know of a public domain Thai word list that could be used for this purpose, + please let us know. + diff --git a/COPYING b/COPYING new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/COPYING.LIB b/COPYING.LIB new file mode 100644 index 00000000..fc8a5de7 --- /dev/null +++ b/COPYING.LIB @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 00000000..de708560 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,540 @@ +2009-06-30 Bruno Haible + + * Version 0.9.1 released. + +2009-06-30 Bruno Haible + + * woe32dll/unistring-exports.c: Add unicase_empty_prefix_context, + unicase_empty_suffix_context. + +2009-06-30 Bruno Haible + + * version.sh: Bump date. + * lib/Makefile.am (LTV_*): Update to 1:0:1. + * README: Update version. + +2009-06-30 Bruno Haible + + * doc/unicase.texi (Case mappings of substrings): Add an example. + +2009-06-29 Bruno Haible + + New functions for case mapping of substrings. + * autogen.sh (GNULIB_MODULES): Add unicase/* modules relating to + context sensitive case mapping. Preprocess also unicase.h. + * doc/unicase.texi (Case mappings of substrings): New section. + (Case insensitive comparison): Mention u*_ct_casefold functions. + * doc/libunistring.texi: Update menu. + Reported by Paolo Bonzini. + +2009-06-11 Thien-Thi Nguyen + + * doc/libunistring.texi (Autoconf macro): Small fixes. + +2009-05-31 Bruno Haible + + * doc/Makefile.am: Use dist-hook instead of old distdir hack. + * configure.ac (doc/Makefile.am): Don't invoke FIX_MAKEFILE_DISTRIB. + * m4/fixautomake.m4: Remove file. + +2009-05-30 Bruno Haible + + Generate a compiler independent . + * lib/Makefile.am (unistring/stdint.h): Produce a file that relies + on more #ifs. + Reported by David Byron . + +2009-05-30 Bruno Haible + + Generate a compiler independent . + * lib/stdbool.mini.h: New file, a reduced version of gnulib's + lib/stdbool.in.h. + * lib/Makefile.am (unistring/stdbool.h): Produce a file that relies + on #ifs. + Reported by David Byron . + +2009-05-23 Bruno Haible + + * configure.ac (AM_INIT_AUTOMAKE): Add 'silent-rules' option. + +2009-05-23 Bruno Haible + + * m4/init-package-version.m4: New file, from GNU gettext.. + * configure.ac: Invoke gl_INIT_PACKAGE. Use the preferred form of + AM_INIT_AUTOMAKE. + +2009-05-21 Bruno Haible + + Colored "make check" output. + * tests/Makefile.am (AUTOMAKE_OPTIONS): Add 1.11 and color-tests. + * autogen.sh: Update comment. + +2009-05-21 Bruno Haible + + Add support for automake 1.11. + * m4/fixautomake.m4: Update from GNU gettext. + * autogen.sh: Update comment. + +2009-05-10 Bruno Haible + + * doc/unictype.texi (Mirrored character): Fix typo. + Reported by David Byron . + +2009-05-10 Bruno Haible + + * doc/unicase.texi (Case mappings of characters, + Case mappings of strings): Explain what title case is. + Reported by Paolo Bonzini. + +2009-05-06 Bruno Haible + + * doc/libunistring.texi (texnl): Define using a trick by Karl Berry. + Add braces to all its uses. + * doc/unictype.texi: Likewise. + * doc/uniwbrk.texi: Likewise. + +2009-05-03 Bruno Haible + + * lib/Makefile.am (config.h): Echo the commands that are being + executed. + Reported by Ralf Wildenhues . + +2009-05-03 Bruno Haible + + * HACKING (Building): Mention also the configure option + --disable-static. + +2009-05-03 Bruno Haible + + New configure option --disable-namespacing. + * configure.ac: New option --disable-namespacing. + (NAMESPACING): New substituted variable. + * lib/Makefile.am (config.h): Don't alias any symbols if NAMESPACING is + set to empty. + * HACKING: New section "Building". + +2009-05-01 Bruno Haible + + * doc/libunistring.texi: Enable the table of contents also in TeX mode. + +2009-05-01 Bruno Haible + + Avoid "overfull hboxes" in the TeXed documentation. + * doc/libunistring.texi (texnl): New macro. + (Unicode, Autoconf macro): Use it. + * doc/unictype.texi (Canonical combining class, + Bidirectional category): Likewise. + * doc/uniwbrk.texi (Word break property): Likewise. + Reported by Ralf Wildenhues. + +2009-05-01 Bruno Haible + + * lib/exported.sh.in: Fix quoting of argument reference. + +2009-05-01 Bruno Haible + + * version.sh (GNULIB_GIT_COMMIT): New variable. + * HACKING: Clarify which version of gnulib to use. + Reported by Paolo Bonzini. + +2009-04-28 Ralf Wildenhues (tiny change) + + * doc/libunistring.texi: Fix typos. + * doc/unistr.texi: Likewise. + * doc/uniname.texi: Likewise. + * doc/unictype.texi: Likewise. + * doc/uninorm.texi: Likewise. + +2009-04-28 Bruno Haible + + Make VPATH builds work off a git checkout. + * lib/Makefile.am (config.h): Look for libunistring.sym first in the + current directory. + Reported by Ralf Wildenhues . + +2009-04-28 Thien-Thi Nguyen (tiny change) + + Fix typos. + * doc/uniconv.texi (uniconv.h): Fix typo. + * doc/unictype.texi (Properties): Fix typo. + +2009-04-28 Bruno Haible + + Doc tweaks. + * doc/libunistring.texi: Fix typo. + * doc/unistr.texi (u*_cmp2): Clarify what memcmp2 is. + * doc/uninorm.texi (u*_normxfrm): Fix description of return value. + * doc/unicase.texi (u*_casexfrm): Likewise. + Reported by Paolo Bonzini. + +2009-04-26 Bruno Haible + + * Version 0.9 released. + +2009-04-26 Bruno Haible + + * version.sh: Bump date. + +2009-04-26 Bruno Haible + + * doc/libunistring.texi: Initialize 'am' index. + (Using the library): New chapter. + +2009-04-26 Bruno Haible + + * README.woe32: New file, from GNU gettext. + * Makefile.am (EXTRA_DIST): Add it. + +2009-04-26 Bruno Haible + + * doc/uniconv.texi: Update for changed calling conventions of + u*_conv_from_encoding and u*_conv_to_encoding functions. + +2009-04-24 Bruno Haible + + Make VPATH builds on Cygwin work. + * lib/Makefile.am (AM_CPPFLAGS): Add the essential -I options. + +2009-04-24 Bruno Haible + + * gnulib-m4/gnulib-cache.m4: Updated by gnulib-tool. + +2009-04-24 Bruno Haible + + Make the installed package relocatable. + * autogen.sh (GNULIB_MODULES): Add relocatable-lib-lgpl. + * lib/Makefile.am (AM_CPPFLAGS): Add DEPENDS_ON_LIBICONV definition. + +2009-04-23 Bruno Haible + + Fix recognition of "nm" command. + * m4/libtool.m4 (LT_PATH_NM): Try "nm" program also when compiling for + mingw in a cygwin environment. + +2009-04-23 Bruno Haible + + * m4/libtool.m4: Fix recognition of 'link' command. + 2009-01-26 Peter Rosin + Don't settle for any dumpbin/link program as name lister. + * m4/libtool.m4 (LT_PATH_NM): When locating dumpbin or + link -dump, check if they appear to really be capable of name + listing, in order to eliminate e.g. link from coreutils. This + makes the name lister decision fall back on nm as the default + if no acceptable candidate is found, which mainly happens on + (arguably broken) cross compiles. + +2008-04-21 Bruno Haible + + Add version metainformation in Windows resource format. + * configure.ac: Invoke LT_LANG for Windows Resources. + (WOE32): New conditional. + * lib/libunistring.rc: New file. + * lib/Makefile.am (EXTRA_DIST): Add it. + (WOE32_LIBADD): New variable. + (libunistring.res.lo): New rule. + (libunistring_la_LIBADD, libunistring_la_DEPENDENCIES): Add + WOE32_LIBADD. + (config.h): Don't compile *.res.c files. + * build-aux/windres-options: New file, from GNU gettext. + * Makefile.am (EXTRA_DIST): Add it. + +2008-04-21 Bruno Haible + + Add version metainformation. + * configure.ac (AC_CONFIG_SRCDIR): Use lib/unistring/version.in.h. + (HEXVERSION): New variable, computed from VERSION. + (AC_CONFIG_FILES): Add lib/unistring/version.h. + * lib/unistring/version.in.h: New file. + * lib/version.c: New file. + * lib/Makefile.am (libunistring_la_SOURCES): Add version.c. + (nobase_nodist_include_HEADERS): Add unistring/version.h. + (HEADERS_WITH_EXTERNS): Add unistring/version.in.h. + * woe32dll/unistring-exports.c: Add _libunistring_version. + +2008-04-19 Bruno Haible + + Avoid compilation errors in tests/uninorm/test-nf*.c. + * configure.ac (WOE32DLL): Define also as a C macro. + +2008-04-19 Bruno Haible + + Avoid a compilation error of tests/unictype/test-categ_none.c. + * gnulib-local/modules/unictype/category-none-tests.diff: New file. + * gnulib-local/Makefile.am (EXTRA_DIST): Add it. + +2008-04-19 Bruno Haible + + Don't commit files brought in by autogen.sh. + * build-aux/config.guess: Remove from git repository. + * build-aux/config.sub: Likewise. + +2008-04-19 Bruno Haible + + Add support for building as shared library on Cygwin and mingw. + * autogen.sh: Insert LIBUNISTRING_DLL_VARIABLE tokens into + lib/unictype.h and lib/uninorm.h. + * gnulib-local/lib/unictype.h.diff: Add an include of + . + * gnulib-local/lib/uninorm.h.diff: New file. + * gnulib-local/Makefile.am (EXTRA_DIST): Add it. + * lib/unistring/woe32dll.in.h: New file. + * woe32dll/unistring-exports.c: New file. + * woe32dll/export.h: New file, from GNU gettext. + * Makefile.am (EXTRA_DIST): Add it. + * configure.ac (WOE32DLL): New conditional. + (DLL_VARIABLE): New substituted variable. + (AC_CONFIG_FILES): Add lib/unistring/woe32dll.h. + * lib/Makefile.am (nobase_nodist_include_HEADERS): Add + unistring/woe32dll.h. + (libunistring_la_SOURCES) [WOE32DLL]: Add unistring-exports.c. + (libunistring_la_LDFLAGS) [WOE32DLL]: Add --export-all-symbols linker + flag. + (config.h): Remove unused macro DLL_VARIABLE. + +2008-04-19 Bruno Haible + + Don't use unreliable linker options on native Windows. + * m4/woe32-dll.m4: New file, from GNU gettext. + * configure.ac: Invoke gl_WOE32_DLL. + +2008-04-11 Bruno Haible + + Limit the exported symbols through a config.h trick. + * m4/exported.m4: New file, from GNU gettext. + * lib/exported.sh.in: New file, from GNU gettext. + * configure.ac: Invoke gt_GLOBAL_SYMBOL_PIPE. + (AC_CONFIG_FILES): Add lib/exported.sh. + * lib/declared.sh: New file, borrowing from GNU gettext's moopp. + * lib/Makefile.am (HEADERS_WITH_EXTERNS): New variable. + (libunistring.sym, config.h): New rules. + (MOSTLYCLEANFILES, MAINTAINERCLEANFILES): Update accordingly. + (EXTRA_DIST): Add libunistring.sym, declared.sh. + * tests/Makefile.am (DEFAULT_INCLUDES): New variable. + * HACKING: Require GNU sed. + +2008-04-10 Bruno Haible + + Install all auxiliary include files in a subdirectory. + * lib/unistring/inline.h: Renamed from lib/unistring-inline.h. + * configure.ac: Invoke AC_PROG_MKDIR_P. + * lib/Makefile.am (nobase_include_HEADERS): Renamed from + include_HEADERS. Change unistring-inline.h to unistring/inline.h. + (nobase_nodist_include_HEADERS): Renamed from nodist_include_HEADERS. + Change unistring-*.h to unistring/*.h. + (unistring/stdbool.h): Renamed from unistring-stdbool.h. Ensure target + directory exists. + (unistring/stdint.h): Renamed from unistring-stdint.h. Ensure target + directory exists. + (unistring/localcharset.h): Renamed from unistring-localcharset.h. + Ensure target directory exists. + (unistring/iconveh.h): Renamed from unistring-iconveh.h Ensure target + directory exists. + (BUILT_SOURCES, MOSTLYCLEANFILES, CLEANFILES): Update. + (CLEANDIRS, CLEANDIRS_NOT_IN_SRCDIR): New variables. + (clean-local): New rule. + * gnulib-local/lib/unicase.h.diff: Update include statements. + * gnulib-local/lib/uniconv.h.diff: Likewise. + * gnulib-local/lib/unictype.h.diff: Likewise. + * gnulib-local/lib/unilbrk.h.diff: Likewise. + * gnulib-local/lib/unistr.h.diff: Likewise. + * gnulib-local/lib/unitypes.h.diff: Likewise. + * gnulib-local/lib/uniwidth.h.diff: Likewise. + * lib/unistring-notinline.h: Likewise. + +2008-04-10 Bruno Haible + + * doc/uniconv.h: Document the 'enum iconv_ilseq_handler' type. + +2008-04-10 Bruno Haible + + * doc/uniwbrk.texi (Word break property): Remove extra white space. + +2008-04-10 Bruno Haible + + Provide an installable iconveh.h replacement. + * gnulib-local/lib/uniconv.h.diff: Include unistring-iconveh.h instead + of iconveh.h. Don't include striconveha.h. + * lib/Makefile.am (nodist_include_HEADERS): Add unistring-iconveh.h. + (unistring-iconveh.h): New rule. + (BUILT_SOURCES, MOSTLYCLEANFILES, CLEANFILES): Update accordingly. + +2008-04-10 Bruno Haible + + Provide an installable localcharset.h replacement. + * gnulib-local/lib/uniconv.h.diff: New file. + * gnulib-local/lib/unilbrk.h.diff: New file. + * gnulib-local/lib/uniwidth.h.diff: New file. + * gnulib-local/Makefile.am (EXTRA_DIST): Add them. + * lib/Makefile.am (nodist_include_HEADERS): Add unistring-localcharset.h. + (unistring-localcharset.h): New rule. + (BUILT_SOURCES, MOSTLYCLEANFILES, CLEANFILES): Update accordingly. + +2008-04-10 Bruno Haible + + * INSTALL (Multiple Architectures): Recommend to use + --disable-dependency-tracking. + Suggested by Peter O'Gorman . + +2008-04-10 Bruno Haible + + Replace HAVE_INLINE in installed include files. + * lib/unistring-inline.h: New file. + * lib/unistring-notinline.h: New file. + * autogen.sh: Postprocess unistr.h. + * gnulib-local/lib/unistr.h.diff: Also include unistring-inline.h. + * lib/Makefile.am (include_HEADERS): Add unistring-inline.h. + (noinst_HEADERS): New variable. + (AM_CPPFLAGS): Define IN_LIBUNISTRING. + +2008-04-10 Bruno Haible + + Provide installable , replacements. + * autogen.sh: Pass --local-dir option to gnulib-tool. + * configure.ac (AC_CONFIG_FILES): Add gnulib-local/Makefile. + * Makefile.am (SUBDIRS): Add gnulib-local. + * gnulib-local/Makefile.am: New file. + * gnulib-local/lib/unitypes.h.diff: New file. + * gnulib-local/lib/unistr.h.diff: New file. + * gnulib-local/lib/unictype.h.diff: New file. + * gnulib-local/lib/unicase.h.diff: New file. + * lib/stdint.mini.h: New file, a reduced version of gnulib's + lib/stdint.in.h. + * lib/Makefile.am (nodist_include_HEADERS): New variable. + (unistring-stdbool.h, unistring-stdint.h): New rules. + (BUILT_SOURCES, MOSTLYCLEANFILES, CLEANFILES): Update accordingly. + (EXTRA_DIST): Add stdint.mini.h. + +2008-04-09 Bruno Haible + + Build and install documentation. + * autogen.sh: Fetch a recent copy of texinfo.tex. + * configure.ac (TEXI2DVI, DVIPS, PERL): New substituted variables. + (AC_CONFIG_FILES): Add doc/Makefile. + * m4/fixautomake.m4: New file, from GNU gettext. + * Makefile.am (SUBDIRS): Add doc. + (EXTRA_DIST): Add build-aux/texi2html. + * doc/Makefile.am: New file. + * doc/libunistring.texi: Set document encoding to UTF-8. + (arrow): Add a fallback definition for texi2html. + + Put the table of contents at the beginning, not at the end. + * build-aux/texi2html (INLINE_CONTENTS): Set to 1. + (THISVERSION): Append an 'a'. + + * build-aux/texi2html: New file, from texinfo-1.78. + +2008-04-06 Bruno Haible + + Add support for checking with valgrind. + * build-aux/run-test: New file. + * Makefile.am (EXTRA_DIST): Add it. + * tests/Makefile.am (CHECKER, CHECKER_END_OF_COMMENTS): New variables. + (TESTS_ENVIRONMENT): Add a run-test invocation. + * HACKING: Mention how to use valgrind. + +2008-04-06 Bruno Haible + + * Makefile.am (EXTRA_DIST): Add version.sh, DEPENDENCIES, HACKING, + autogen.sh, build-aux/fixaclocal. + * version.sh: New file. + +2008-04-05 Bruno Haible + + Allow building as a shared library on AIX. + * lib/Makefile.am (libunistring_la_LDFLAGS): Add -no-undefined flag + and INTL_MACOSX_LIBS (for MacOS X). + +2008-04-05 Bruno Haible + + Use libtool versioning. + * lib/Makefile.am (LTV_CURRENT, LTV_REVISION, LTV_AGE): New variables. + (libunistring_la_LDFLAGS): Pass -version-info option. + +2008-04-05 Bruno Haible + + * gnulib-m4/gnulib-cache.m4: New file, generated by gnulib-tool. + + * autogen.sh: New file. + * configure.ac: New file. + * build-aux/fixaclocal: New file, from GNU gettext. + * Makefile.am: New file. + * lib/Makefile.am: New file. + * tests/Makefile.am: New file. + +2008-04-05 Bruno Haible + + * INSTALL: Renamed from INSTALL.generic. Add section about + prerequisites, + +2008-04-05 Bruno Haible + + * doc/*.texi: Add index entries. + +2008-04-05 Bruno Haible + + * doc/unistr.texi (Elementary string functions): Document + u{8,16,32}_cmp2. + +2008-04-05 Bruno Haible + + * doc/libunistring.texi (func, posixfunc): New macros. + Use them where appropriate. + * doc/unistr.texi: Likewise. + +2008-04-05 Bruno Haible + + * doc/libunistring.texi: Complete the detailmenu. + +2008-04-05 Bruno Haible + + * doc/libunistring.texi: New file. + * doc/unitypes.texi: New file, based on gnulib/lib/unitypes.h. + * doc/unistr.texi: New file, based on gnulib/lib/unistr.h. + * doc/uniconv.texi: New file, based on gnulib/lib/uniconv.h. + * doc/unistdio.texi: New file, based on gnulib/lib/unistdio.h. + * doc/uniname.texi: New file, based on gnulib/lib/uniname.h. + * doc/unictype.texi: New file, based on gnulib/lib/unictype.h. + * doc/uniwidth.texi: New file, based on gnulib/lib/uniwidth.h. + * doc/uniwbrk.texi: New file, based on gnulib/lib/uniwbrk.h. + * doc/unilbrk.texi: New file, based on gnulib/lib/unilbrk.h. + * doc/uninorm.texi: New file, based on gnulib/lib/uninorm.h. + * doc/unicase.texi: New file, based on gnulib/lib/unicase.h. + * doc/uniregex.texi: New file. + * doc/gpl.texi: New file, from gnulib. + * doc/lgpl.texi: New file, from gnulib. + * doc/fdl.texi: New file, from gnulib. + +2008-03-14 Bruno Haible + + * INSTALL.generic: New file, from gnulib/doc/INSTALL.UTF-8 with an + added paragraph mentioning --with-libiconv-prefix. + + * COPYING.LIB: New file, from gnulib/doc/COPYING.LESSERv3. + * COPYING: New file, from gnulib/doc/COPYINGv3. + + * m4/libtool.m4: New file, from libtool-2.2.6, with modifications: + 2008-04-06 Bruno Haible + * m4/libtool.m4 (LT_INIT): When setting LIBTOOL, use + CONFIG_SHELL; don't assume that the Makefile.in will set SHELL + to ${CONFIG_SHELL}. + * m4/ltoptions.m4: New file, from libtool-2.2.6. + * m4/ltsugar.m4: Likewise. + * m4/ltversion.m4: Likewise. + * m4/lt~obsolete.m4: Likewise. + * build-aux/ltmain.sh: New file, from libtool-2.2.6, with + modifications. + 2008-09-28 Bruno Haible + * build-aux/ltmain.sh (func_emit_cwrapperexe_src): On mingw, + preprocess the argument vector through prepare_spawn. + + * build-aux/config.guess: New file, from gnulib, version 2009-02-03. + * build-aux/config.sub: Likewise. + + * README: New file. + * AUTHORS: New file. + * DEPENDENCIES: New file. + * BUGS: New file. + * HACKING: New file. + * THANKS: New file. + * NEWS: New file. + diff --git a/DEPENDENCIES b/DEPENDENCIES new file mode 100644 index 00000000..166db6ff --- /dev/null +++ b/DEPENDENCIES @@ -0,0 +1,17 @@ +The following packages should be installed before GNU libunistring is +installed: + +* GNU libiconv + + Not needed on systems with + - glibc 2.2 or newer, or + - MacOS X 10.3 or newer, or + - NetBSD 3.0 or newer. + But highly recommended on all other systems. + Needed for character set conversion of strings from/to Unicode. + + Homepage: + http://www.gnu.org/software/libiconv/ + + Download: + http://ftp.gnu.org/gnu/libiconv/ + ftp://ftp.gnu.org/gnu/libiconv/ + + If it is installed in a nonstandard directory, pass the option + --with-libiconv-prefix=DIR to 'configure'. diff --git a/HACKING b/HACKING new file mode 100644 index 00000000..227e0035 --- /dev/null +++ b/HACKING @@ -0,0 +1,84 @@ +All you need to know when hacking (modifying) GNU libunistring or when building +it off a git checkout. + + +Requirements +============ + +You will need reasonably recent versions of the build tools: + + * A C compiler. Such as GNU GCC. + + Homepage: + http://gcc.gnu.org/ + + * GNU automake + + Homepage: + http://www.gnu.org/software/automake/ + + * GNU autoconf + + Homepage: + http://www.gnu.org/software/autoconf/ + + * GNU m4 + + Homepage: + http://www.gnu.org/software/m4/ + + * GNU gperf + + Homepage: + http://www.gnu.org/software/gperf/ + + * GNU sed + + Homepage: + http://www.gnu.org/software/sed/ + + * Perl + + Homepage: + http://www.perl.org/ + + * Either an internet connection or a recent copy of GNU gnulib. + In order to work with the HEAD of libunistring development, you need the + HEAD of the gnulib development. + In order to work with the version of libunistring at a given date, you need + the version of gnulib of the same date. + In order to work with a released tarball of libunistring, you need the + particular version of gnulib which is indicated in the GNULIB_GIT_COMMIT + variable in version.sh. + + Homepage: + http://www.gnu.org/software/gnulib/ + +And, of course, the packages listed in the DEPENDENCIES file. + +Then you can run the 'autogen.sh' script + + +Sources +======= + +Most of the sources have their origin in gnulib. + + +Building +======== + +See the INSTALL file for generic instructions. + +To speed up the build: + 1) You can use the configure option --disable-namespacing. The speed up is + by a factor of 1.5. The resulting library is not namespace-clean and + therefore should not be installed (if you don't want to risk collisions + with other libraries) and should certainly not be distributed. + 2) You can use the configure option --disable-static. The speed up is by + a factor of 1.6. The resulting library cannot be used for static + linking and therefore should certainly not be distributed. + + +Running the testsuite in valgrind +================================= + +To run the test suite with a memory access checker and leak detector such as +valgrind, + 1) configure with the options --disable-shared and CFLAGS="-g", + 2) run "make", + 3) edit tests/Makefile to uncomment the appropriate definition of the CHECKER + macro, + 4) run "make check". diff --git a/INSTALL b/INSTALL new file mode 100644 index 00000000..9d4ec2e4 --- /dev/null +++ b/INSTALL @@ -0,0 +1,314 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006, 2007, 2008 Free Software Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Prerequisites +============= + + This package depends on a few other packages. They are listed in +the file ‘DEPENDENCIES’. It is recommended to install the listed +packages before installing this package. + +Basic Installation +================== + + Briefly, the shell commands ‘./configure; make; make install’ should +configure, build, and install this package. The following +more-detailed instructions are generic; see the ‘README’ file for +instructions specific to this package. + + The ‘configure’ shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a ‘Makefile’ in each directory of the package. +It may also create one or more ‘.h’ files containing system-dependent +definitions. Finally, it creates a shell script ‘config.status’ that +you can run in the future to recreate the current configuration, and a +file ‘config.log’ containing compiler output (useful mainly for +debugging ‘configure’). + + It can also use an optional file (typically called ‘config.cache’ +and enabled with ‘--cache-file=config.cache’ or simply ‘-C’) that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how ‘configure’ could check whether to do them, and mail +diffs or instructions to the address given in the ‘README’ so they can +be considered for the next release. If you are using the cache, and at +some point ‘config.cache’ contains results you don't want to keep, you +may remove or edit it. + + The file ‘configure.ac’ (or ‘configure.in’) is used to create +‘configure’ by a program called ‘autoconf’. You need ‘configure.ac’ if +you want to change it or regenerate ‘configure’ using a newer version +of ‘autoconf’. + +The simplest way to compile this package is: + + 1. ‘cd’ to the directory containing the package's source code and type + ‘./configure’ to configure the package for your system. + + Running ‘configure’ might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type ‘make’ to compile the package. + + 3. Optionally, type ‘make check’ to run any self-tests that come with + the package. + + 4. Type ‘make install’ to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing ‘make clean’. To also remove the + files that ‘configure’ created (so you can compile the package for + a different kind of computer), type ‘make distclean’. There is + also a ‘make maintainer-clean’ target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + + 6. Often, you can also type ‘make uninstall’ to remove the installed + files again. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the ‘configure’ script does not know about. Run ‘./configure --help’ +for details on some of the pertinent environment variables. + + You can give ‘configure’ initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU ‘make’. ‘cd’ to the +directory where you want the object files and executables to go and run +the ‘configure’ script. ‘configure’ automatically checks for the +source code in the directory that ‘configure’ is in and in ‘..’. + + With a non-GNU ‘make’, it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use ‘make distclean’ before +reconfiguring for another architecture. + + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple ‘-arch’ options to the +compiler but only a single ‘-arch’ option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" \ + --disable-dependency-tracking + + This is not guaranteed to produce working output in all cases. You +may have to build one architecture at a time and combine the results +using the ‘lipo’ tool if you have problems. + +Installation Names +================== + + By default, ‘make install’ installs the package's commands under +‘/usr/local/bin’, include files under ‘/usr/local/include’, etc. You +can specify an installation prefix other than ‘/usr/local’ by giving +‘configure’ the option ‘--prefix=PREFIX’. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option ‘--exec-prefix=PREFIX’ to ‘configure’, the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like ‘--bindir=DIR’ to specify different values for particular +kinds of files. Run ‘configure --help’ for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving ‘configure’ the +option ‘--program-prefix=PREFIX’ or ‘--program-suffix=SUFFIX’. + +Optional Features +================= + + Some packages pay attention to ‘--enable-FEATURE’ options to +‘configure’, where FEATURE indicates an optional part of the package. +They may also pay attention to ‘--with-PACKAGE’ options, where PACKAGE +is something like ‘gnu-as’ or ‘x’ (for the X Window System). The +‘README’ should mention any ‘--enable-’ and ‘--with-’ options that the +package recognizes. + + For packages that use the X Window System, ‘configure’ can usually +find the X include and library files automatically, but if it doesn't, +you can use the ‘configure’ options ‘--x-includes=DIR’ and +‘--x-libraries=DIR’ to specify their locations. + + For packages that use the GNU libiconv library, you can use the +‘configure’ option ‘--with-libiconv-prefix’ to specify the prefix you +used while installing GNU libiconv. This option is not necessary if +that other prefix is the same as the one now specified through --prefix. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its ‘’ header file. The option ‘-nodtk’ can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put ‘/usr/ucb’ early in your ‘PATH’. This +directory contains several dysfunctional programs; working variants of +these programs are available in ‘/usr/bin’. So, if you need ‘/usr/ucb’ +in your ‘PATH’, put it _after_ ‘/usr/bin’. + + On Haiku, software installed for all users goes in ‘/boot/common’, +not ‘/usr/local’. It is recommended to use the following options: + + ./configure --prefix=/boot/common + +Specifying the System Type +========================== + + There may be some features ‘configure’ cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, ‘configure’ can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +‘--build=TYPE’ option. TYPE can either be a short name for the system +type, such as ‘sun4’, or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file ‘config.sub’ for the possible values of each field. If +‘config.sub’ isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option ‘--target=TYPE’ to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with ‘--host=TYPE’. + +Sharing Defaults +================ + + If you want to set default values for ‘configure’ scripts to share, +you can create a site shell script called ‘config.site’ that gives +default values for variables like ‘CC’, ‘cache_file’, and ‘prefix’. +‘configure’ looks for ‘PREFIX/share/config.site’ if it exists, then +‘PREFIX/etc/config.site’ if it exists. Or, you can set the +‘CONFIG_SITE’ environment variable to the location of the site script. +A warning: not all ‘configure’ scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to ‘configure’. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the ‘configure’ command line, using ‘VAR=value’. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified ‘gcc’ to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for ‘CONFIG_SHELL’ due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +‘configure’ Invocation +====================== + + ‘configure’ recognizes the following options to control how it +operates. + +‘--help’ +‘-h’ + Print a summary of all of the options to ‘configure’, and exit. + +‘--help=short’ +‘--help=recursive’ + Print a summary of the options unique to this package's + ‘configure’, and exit. The ‘short’ variant lists options used + only in the top level, while the ‘recursive’ variant lists options + also present in any nested packages. + +‘--version’ +‘-V’ + Print the version of Autoconf used to generate the ‘configure’ + script, and exit. + +‘--cache-file=FILE’ + Enable the cache: use and save the results of the tests in FILE, + traditionally ‘config.cache’. FILE defaults to ‘/dev/null’ to + disable caching. + +‘--config-cache’ +‘-C’ + Alias for ‘--cache-file=config.cache’. + +‘--quiet’ +‘--silent’ +‘-q’ + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to ‘/dev/null’ (any error + messages will still be shown). + +‘--srcdir=DIR’ + Look for the package's source code in directory DIR. Usually + ‘configure’ can determine that directory automatically. + +‘--prefix=DIR’ + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +‘--no-create’ +‘-n’ + Run the configure checks, but stop before creating any output + files. + +‘configure’ also accepts some other, not widely useful, options. Run +‘configure --help’ for more details. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 00000000..91c0bf34 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,41 @@ +## Makefile for the toplevel directory of GNU libunistring. +## Copyright (C) 2009 Free Software Foundation, Inc. +## +## This program is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . + +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = 1.5 gnu no-dependencies +ACLOCAL = build-aux/fixaclocal @ACLOCAL@ +ACLOCAL_AMFLAGS = -I m4 -I gnulib-m4 + +SUBDIRS = doc gnulib-local lib tests + +EXTRA_DIST = \ + version.sh BUGS DEPENDENCIES HACKING autogen.sh \ + build-aux/fixaclocal build-aux/texi2html build-aux/run-test + + +# Allow users to use "gnulib-tool --update". +EXTRA_DIST += gnulib-m4/gnulib-cache.m4 + + +# Cygwin support. + +EXTRA_DIST += woe32dll/export.h + + +# Woe32 support. + +EXTRA_DIST += README.woe32 build-aux/windres-options diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 00000000..bc56d49f --- /dev/null +++ b/Makefile.in @@ -0,0 +1,1158 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(top_srcdir)/configure \ + $(top_srcdir)/lib/unistring/version.in.h \ + $(top_srcdir)/lib/unistring/woe32dll.in.h AUTHORS COPYING \ + COPYING.LIB ChangeLog INSTALL NEWS THANKS build-aux/compile \ + build-aux/config.guess build-aux/config.rpath \ + build-aux/config.sub build-aux/depcomp build-aux/install-sh \ + build-aux/ltmain.sh build-aux/mdate-sh build-aux/missing \ + build-aux/texinfo.tex +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ + $(top_srcdir)/gnulib-m4/alloca.m4 \ + $(top_srcdir)/gnulib-m4/codeset.m4 \ + $(top_srcdir)/gnulib-m4/eealloc.m4 \ + $(top_srcdir)/gnulib-m4/environ.m4 \ + $(top_srcdir)/gnulib-m4/errno_h.m4 \ + $(top_srcdir)/gnulib-m4/error.m4 \ + $(top_srcdir)/gnulib-m4/exitfail.m4 \ + $(top_srcdir)/gnulib-m4/exponentd.m4 \ + $(top_srcdir)/gnulib-m4/exponentf.m4 \ + $(top_srcdir)/gnulib-m4/exponentl.m4 \ + $(top_srcdir)/gnulib-m4/extensions.m4 \ + $(top_srcdir)/gnulib-m4/float_h.m4 \ + $(top_srcdir)/gnulib-m4/fpieee.m4 \ + $(top_srcdir)/gnulib-m4/frexp.m4 \ + $(top_srcdir)/gnulib-m4/frexpl.m4 \ + $(top_srcdir)/gnulib-m4/getpagesize.m4 \ + $(top_srcdir)/gnulib-m4/glibc21.m4 \ + $(top_srcdir)/gnulib-m4/gnulib-common.m4 \ + $(top_srcdir)/gnulib-m4/gnulib-comp.m4 \ + $(top_srcdir)/gnulib-m4/iconv.m4 \ + $(top_srcdir)/gnulib-m4/iconv_h.m4 \ + $(top_srcdir)/gnulib-m4/iconv_open.m4 \ + $(top_srcdir)/gnulib-m4/include_next.m4 \ + $(top_srcdir)/gnulib-m4/inline.m4 \ + $(top_srcdir)/gnulib-m4/intlmacosx.m4 \ + $(top_srcdir)/gnulib-m4/intmax_t.m4 \ + $(top_srcdir)/gnulib-m4/inttypes_h.m4 \ + $(top_srcdir)/gnulib-m4/isnand.m4 \ + $(top_srcdir)/gnulib-m4/isnanf.m4 \ + $(top_srcdir)/gnulib-m4/isnanl.m4 \ + $(top_srcdir)/gnulib-m4/lcmessage.m4 \ + $(top_srcdir)/gnulib-m4/ldexpl.m4 \ + $(top_srcdir)/gnulib-m4/lib-ld.m4 \ + $(top_srcdir)/gnulib-m4/lib-link.m4 \ + $(top_srcdir)/gnulib-m4/lib-prefix.m4 \ + $(top_srcdir)/gnulib-m4/localcharset.m4 \ + $(top_srcdir)/gnulib-m4/locale-fr.m4 \ + $(top_srcdir)/gnulib-m4/locale-ja.m4 \ + $(top_srcdir)/gnulib-m4/locale-tr.m4 \ + $(top_srcdir)/gnulib-m4/locale-zh.m4 \ + $(top_srcdir)/gnulib-m4/locale_h.m4 \ + $(top_srcdir)/gnulib-m4/localename.m4 \ + $(top_srcdir)/gnulib-m4/longlong.m4 \ + $(top_srcdir)/gnulib-m4/malloc.m4 \ + $(top_srcdir)/gnulib-m4/malloca.m4 \ + $(top_srcdir)/gnulib-m4/math_h.m4 \ + $(top_srcdir)/gnulib-m4/mbchar.m4 \ + $(top_srcdir)/gnulib-m4/mbiter.m4 \ + $(top_srcdir)/gnulib-m4/mbrtowc.m4 \ + $(top_srcdir)/gnulib-m4/mbsinit.m4 \ + $(top_srcdir)/gnulib-m4/mbstate_t.m4 \ + $(top_srcdir)/gnulib-m4/memchr.m4 \ + $(top_srcdir)/gnulib-m4/minmax.m4 \ + $(top_srcdir)/gnulib-m4/mmap-anon.m4 \ + $(top_srcdir)/gnulib-m4/multiarch.m4 \ + $(top_srcdir)/gnulib-m4/nocrash.m4 \ + $(top_srcdir)/gnulib-m4/printf-frexp.m4 \ + $(top_srcdir)/gnulib-m4/printf-frexpl.m4 \ + $(top_srcdir)/gnulib-m4/printf.m4 \ + $(top_srcdir)/gnulib-m4/relocatable-lib.m4 \ + $(top_srcdir)/gnulib-m4/setenv.m4 \ + $(top_srcdir)/gnulib-m4/signbit.m4 \ + $(top_srcdir)/gnulib-m4/size_max.m4 \ + $(top_srcdir)/gnulib-m4/stdbool.m4 \ + $(top_srcdir)/gnulib-m4/stdint.m4 \ + $(top_srcdir)/gnulib-m4/stdint_h.m4 \ + $(top_srcdir)/gnulib-m4/stdlib_h.m4 \ + $(top_srcdir)/gnulib-m4/strerror.m4 \ + $(top_srcdir)/gnulib-m4/string_h.m4 \ + $(top_srcdir)/gnulib-m4/unistd_h.m4 \ + $(top_srcdir)/gnulib-m4/vasnprintf.m4 \ + $(top_srcdir)/gnulib-m4/wchar.m4 \ + $(top_srcdir)/gnulib-m4/wchar_t.m4 \ + $(top_srcdir)/gnulib-m4/wctob.m4 \ + $(top_srcdir)/gnulib-m4/wctype.m4 \ + $(top_srcdir)/gnulib-m4/wcwidth.m4 \ + $(top_srcdir)/gnulib-m4/wint_t.m4 \ + $(top_srcdir)/gnulib-m4/xalloc.m4 \ + $(top_srcdir)/gnulib-m4/xsize.m4 $(top_srcdir)/m4/exported.m4 \ + $(top_srcdir)/m4/init-package-version.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/woe32-dll.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = lib/unistring/version.h lib/unistring/woe32dll.h +CONFIG_CLEAN_VPATH_FILES = +depcomp = +am__depfiles_maybe = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = build-aux/fixaclocal @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DLL_VARIABLE = @DLL_VARIABLE@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DVIPS = @DVIPS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +GLIBC21 = @GLIBC21@ +GLOBAL_SYMBOL_PIPE = @GLOBAL_SYMBOL_PIPE@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MATHL = @GNULIB_MATHL@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@ +HAVE_GLOBAL_SYMBOL_PIPE = @HAVE_GLOBAL_SYMBOL_PIPE@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HEXVERSION = @HEXVERSION@ +ICONV_H = @ICONV_H@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_H = @LOCALE_H@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NAMESPACING = @NAMESPACING@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +RC = @RC@ +RELOCATABLE = @RELOCATABLE@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +TEXI2DVI = @TEXI2DVI@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +VERSION = @VERSION@ +VOID_UNSETENV = @VOID_UNSETENV@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = 1.5 gnu no-dependencies +ACLOCAL_AMFLAGS = -I m4 -I gnulib-m4 +SUBDIRS = doc gnulib-local lib tests + +# Allow users to use "gnulib-tool --update". + +# Cygwin support. + +# Woe32 support. +EXTRA_DIST = version.sh BUGS DEPENDENCIES HACKING autogen.sh \ + build-aux/fixaclocal build-aux/texi2html build-aux/run-test \ + gnulib-m4/gnulib-cache.m4 woe32dll/export.h README.woe32 \ + build-aux/windres-options +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +lib/unistring/version.h: $(top_builddir)/config.status $(top_srcdir)/lib/unistring/version.in.h + cd $(top_builddir) && $(SHELL) ./config.status $@ +lib/unistring/woe32dll.h: $(top_builddir)/config.status $(top_srcdir)/lib/unistring/woe32dll.in.h + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile config.h +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-recursive uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 00000000..bc52e97e --- /dev/null +++ b/NEWS @@ -0,0 +1,9 @@ +New in 0.9.1: +* In the include file unicase.h, functions for case mapping of substrings have + been added. + +New in 0.9: +* The new include file unicase.h implements case folding. +* The new include file uninorm.h implements normalization. +* The new include file uniwbrk.h implements word break determination. +* The library source code is now part of gnulib. diff --git a/README b/README new file mode 100644 index 00000000..118aa23b --- /dev/null +++ b/README @@ -0,0 +1,69 @@ + GNU LIBUNISTRING - Unicode string library + +This library provides functions for manipulating Unicode strings and +for manipulating C strings according to the Unicode standard. + +It consists of the following parts: + + unistr.h elementary string functions + uniconv.h conversion from/to legacy encodings + unistdio.h formatted output to strings + uniname.h character names + unictype.h character classification and properties + uniwidth.h string width when using nonproportional fonts + uniwbrk.h word breaks + unilbrk.h line breaking algorithm + uninorm.h normalization (composition and decomposition) + unicase.h case folding + uniregex.h regular expressions (not yet implemented) + +libunistring is for you if your application involves non-trivial text +processing, such as upper/lower case conversions, line breaking, operations +on words, or more advanced analysis of text. Text provided by the user can, +in general, contain characters of all kinds of scripts. The text processing +functions provided by this library handle all scripts and all languages. + +libunistring is for you if your application already uses the ISO C / POSIX +, functions and the text it operates on is provided by +the user and can be in any language. + +libunistring is also for you if your application uses Unicode strings as +internal in-memory representation. + + +Installation +------------ + +As usual for GNU packages: + + $ ./configure --prefix=/usr/local + $ make + $ make install + + +Copyright +--------- + +The libunistring library and its header files are under the GNU LGPL, see +file COPYING.LIB. This license is based on the GNU GPL, see file COPYING. + +The documentation is under another license; see in the documentation. + + +Download +-------- + + http://ftp.gnu.org/gnu/libunistring/libunistring-0.9.1.tar.gz + +Homepage +-------- + + http://www.gnu.org/software/libunistring/ + +Bug reports to +-------------- + + + + +Bruno Haible diff --git a/README.woe32 b/README.woe32 new file mode 100644 index 00000000..07c72603 --- /dev/null +++ b/README.woe32 @@ -0,0 +1,40 @@ +Installation on Woe32 (WinNT/2000/XP/Vista, Win95/98/ME): + +This file explains how to create binaries for the mingw execution environment. +For how to create binaries for the cygwin environment, please see the normal +INSTALL file. MS Visual C/C++ with "nmake" is no longer supported. + +I recommend to use the cygwin environment as the development environment +and mingw only as the target (runtime, deployment) environment. +For this, you need to install + - cygwin, + - the mingw runtime package, also from the cygwin site. + +You must not install cygwin programs directly under /usr/local - +because the mingw compiler and linker would pick up the include files +and libraries from there, thus introducing an undesired dependency to +cygwin. You can for example achieve this by using the +configure option --prefix=/usr/local/cygwin each time you build a +program for cygwin. + +Building for mingw is then achieved through the following preparation +and configure commands: + + PATH=/usr/local/mingw/bin:$PATH + export PATH + ./configure --host=i586-pc-mingw32 --prefix=/usr/local/mingw \ + CPPFLAGS="-mno-cygwin -Wall -I/usr/local/mingw/include" \ + CFLAGS="-mno-cygwin -O2 -g" \ + CXXFLAGS="-mno-cygwin -O2 -g" \ + LDFLAGS="-mno-cygwin -L/usr/local/mingw/lib" + +The -mno-cygwin tells the cygwin compiler and linker to build for mingw. +The -I and -L option are so that packages previously built for the +same environment are found. The --host option tells the various +tools that you are building for mingw, not cygwin. + +Dependencies: + +This package depends on GNU libiconv. (See the file DEPENDENCIES.) Before +building this package, you need to build GNU libiconv, in the same development +environment, with the same configure options, and install it ("make install"). diff --git a/THANKS b/THANKS new file mode 100644 index 00000000..6d5dd374 --- /dev/null +++ b/THANKS @@ -0,0 +1,3 @@ + Thanks to for + +The Unicode consortium the Unicode Standard diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 00000000..e07b2825 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1558 @@ +# generated automatically by aclocal 1.11 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl + +# po.m4 serial 15 (gettext-0.17) +dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ(2.50) + +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + AC_REQUIRE([AM_NLS])dnl + + dnl Release version of the gettext macros. This is used to ensure that + dnl the gettext macros and po/Makefile.in.in are in sync. + AC_SUBST([GETTEXT_MACRO_VERSION], [0.17]) + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + dnl Test whether it is GNU msgfmt >= 0.15. +changequote(,)dnl + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([MSGFMT_015]) +changequote(,)dnl + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([GMSGFMT_015]) + + dnl Search for GNU xgettext 0.12 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Test whether it is GNU xgettext >= 0.15. +changequote(,)dnl + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac +changequote([,])dnl + AC_SUBST([XGETTEXT_015]) + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + + dnl Installation directories. + dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we + dnl have to define it here, so that it can be used in po/Makefile. + test -n "$localedir" || localedir='${datadir}/locale' + AC_SUBST([localedir]) + + dnl Support for AM_XGETTEXT_OPTION. + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) + + AC_CONFIG_COMMANDS([po-directories], [[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assigment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ + # When this code is run, in config.status, two variables have already been + # set: + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, + # - LINGUAS is the value of the environment variable LINGUAS at configure + # time. + +changequote(,)dnl + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + # Find a way to echo strings without interpreting backslash. + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='echo' + else + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='printf %s\n' + else + echo_func () { + cat < "$ac_file.tmp" + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + cat >> "$ac_file.tmp" < /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + cat >> "$ac_file.tmp" <> "$ac_file.tmp" < sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 1 + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# (`yes' being less verbose, `no' or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([gnulib-m4/00gnulib.m4]) +m4_include([gnulib-m4/alloca.m4]) +m4_include([gnulib-m4/codeset.m4]) +m4_include([gnulib-m4/eealloc.m4]) +m4_include([gnulib-m4/environ.m4]) +m4_include([gnulib-m4/errno_h.m4]) +m4_include([gnulib-m4/error.m4]) +m4_include([gnulib-m4/exitfail.m4]) +m4_include([gnulib-m4/exponentd.m4]) +m4_include([gnulib-m4/exponentf.m4]) +m4_include([gnulib-m4/exponentl.m4]) +m4_include([gnulib-m4/extensions.m4]) +m4_include([gnulib-m4/float_h.m4]) +m4_include([gnulib-m4/fpieee.m4]) +m4_include([gnulib-m4/frexp.m4]) +m4_include([gnulib-m4/frexpl.m4]) +m4_include([gnulib-m4/getpagesize.m4]) +m4_include([gnulib-m4/glibc21.m4]) +m4_include([gnulib-m4/gnulib-common.m4]) +m4_include([gnulib-m4/gnulib-comp.m4]) +m4_include([gnulib-m4/iconv.m4]) +m4_include([gnulib-m4/iconv_h.m4]) +m4_include([gnulib-m4/iconv_open.m4]) +m4_include([gnulib-m4/include_next.m4]) +m4_include([gnulib-m4/inline.m4]) +m4_include([gnulib-m4/intlmacosx.m4]) +m4_include([gnulib-m4/intmax_t.m4]) +m4_include([gnulib-m4/inttypes_h.m4]) +m4_include([gnulib-m4/isnand.m4]) +m4_include([gnulib-m4/isnanf.m4]) +m4_include([gnulib-m4/isnanl.m4]) +m4_include([gnulib-m4/lcmessage.m4]) +m4_include([gnulib-m4/ldexpl.m4]) +m4_include([gnulib-m4/lib-ld.m4]) +m4_include([gnulib-m4/lib-link.m4]) +m4_include([gnulib-m4/lib-prefix.m4]) +m4_include([gnulib-m4/localcharset.m4]) +m4_include([gnulib-m4/locale-fr.m4]) +m4_include([gnulib-m4/locale-ja.m4]) +m4_include([gnulib-m4/locale-tr.m4]) +m4_include([gnulib-m4/locale-zh.m4]) +m4_include([gnulib-m4/locale_h.m4]) +m4_include([gnulib-m4/localename.m4]) +m4_include([gnulib-m4/longlong.m4]) +m4_include([gnulib-m4/malloc.m4]) +m4_include([gnulib-m4/malloca.m4]) +m4_include([gnulib-m4/math_h.m4]) +m4_include([gnulib-m4/mbchar.m4]) +m4_include([gnulib-m4/mbiter.m4]) +m4_include([gnulib-m4/mbrtowc.m4]) +m4_include([gnulib-m4/mbsinit.m4]) +m4_include([gnulib-m4/mbstate_t.m4]) +m4_include([gnulib-m4/memchr.m4]) +m4_include([gnulib-m4/minmax.m4]) +m4_include([gnulib-m4/mmap-anon.m4]) +m4_include([gnulib-m4/multiarch.m4]) +m4_include([gnulib-m4/nocrash.m4]) +m4_include([gnulib-m4/printf-frexp.m4]) +m4_include([gnulib-m4/printf-frexpl.m4]) +m4_include([gnulib-m4/printf.m4]) +m4_include([gnulib-m4/relocatable-lib.m4]) +m4_include([gnulib-m4/setenv.m4]) +m4_include([gnulib-m4/signbit.m4]) +m4_include([gnulib-m4/size_max.m4]) +m4_include([gnulib-m4/stdbool.m4]) +m4_include([gnulib-m4/stdint.m4]) +m4_include([gnulib-m4/stdint_h.m4]) +m4_include([gnulib-m4/stdlib_h.m4]) +m4_include([gnulib-m4/strerror.m4]) +m4_include([gnulib-m4/string_h.m4]) +m4_include([gnulib-m4/unistd_h.m4]) +m4_include([gnulib-m4/vasnprintf.m4]) +m4_include([gnulib-m4/wchar.m4]) +m4_include([gnulib-m4/wchar_t.m4]) +m4_include([gnulib-m4/wctob.m4]) +m4_include([gnulib-m4/wctype.m4]) +m4_include([gnulib-m4/wcwidth.m4]) +m4_include([gnulib-m4/wint_t.m4]) +m4_include([gnulib-m4/xalloc.m4]) +m4_include([gnulib-m4/xsize.m4]) +m4_include([m4/exported.m4]) +m4_include([m4/init-package-version.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([m4/woe32-dll.m4]) diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 00000000..e062b33c --- /dev/null +++ b/autogen.sh @@ -0,0 +1,452 @@ +#!/bin/sh +# Convenience script for regenerating all autogeneratable files that are +# omitted from the version control repository. In particular, this script +# also regenerates all aclocal.m4, config.h.in, Makefile.in, configure files +# with new versions of autoconf or automake. +# +# This script requires autoconf-2.63 and automake-1.11 in the PATH. +# It also requires either +# - the GNULIB_TOOL environment variable pointing to the gnulib-tool script +# in a gnulib checkout, or +# - the git program in the PATH and an internet connection. +# It also requires +# - the gperf program. + +# Copyright (C) 2003-2009 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Usage: ./autogen.sh [--skip-gnulib] +# +# Usage from a git checkout: ./autogen.sh +# This uses an up-to-date gnulib checkout. +# +# Usage from a released tarball: ./autogen.sh --skip-gnulib +# This does not use a gnulib checkout. + +skip_gnulib=false +while :; do + case "$1" in + --skip-gnulib) skip_gnulib=true; shift;; + *) break ;; + esac +done + +if test $skip_gnulib = false; then + # texinfo.tex + # The most recent snapshot of it is available in the gnulib repository. + # But this is a snapshot, with all possible dangers. + # A stable release of it is available through "automake --add-missing --copy", + # but that is too old (does not support @arrow{}). So take the version which + # matches the latest stable texinfo release. + if test ! -f build-aux/texinfo.tex; then + { wget -q --timeout=5 -O build-aux/texinfo.tex.tmp 'http://cvs.savannah.gnu.org/viewvc/*checkout*/texinfo/doc/texinfo.tex?root=texinfo&pathrev=texinfo_4_13' \ + && mv build-aux/texinfo.tex.tmp build-aux/texinfo.tex; \ + } || rm -f build-aux/texinfo.tex.tmp + fi + if test -z "$GNULIB_TOOL"; then + # Check out gnulib in a subdirectory 'gnulib'. + if test -d gnulib; then + (cd gnulib && git pull) + else + git clone git://git.savannah.gnu.org/gnulib.git + fi + # Now it should contain a gnulib-tool. + if test -f gnulib/gnulib-tool; then + GNULIB_TOOL=`pwd`/gnulib/gnulib-tool + else + echo "** warning: gnulib-tool not found" 1>&2 + fi + fi + # Skip the gnulib-tool step if gnulib-tool was not found. + if test -n "$GNULIB_TOOL"; then + if test -f m4/gnulib-cache.m4; then + mv -f m4/gnulib-cache.m4 m4/gnulib-cache.m4~ + fi + if test -f lib/Makefile.gnulib; then + mv -f lib/Makefile.gnulib lib/Makefile.gnulib~ + fi + GNULIB_MODULES=' + unitypes + unistr/base + unistr/u8-check + unistr/u8-chr + unistr/u8-cmp + unistr/u8-cmp2 + unistr/u8-cpy + unistr/u8-cpy-alloc + unistr/u8-endswith + unistr/u8-mblen + unistr/u8-mbsnlen + unistr/u8-mbtouc + unistr/u8-mbtoucr + unistr/u8-mbtouc-unsafe + unistr/u8-move + unistr/u8-next + unistr/u8-prev + unistr/u8-set + unistr/u8-startswith + unistr/u8-stpcpy + unistr/u8-stpncpy + unistr/u8-strcat + unistr/u8-strchr + unistr/u8-strcmp + unistr/u8-strcoll + unistr/u8-strcpy + unistr/u8-strcspn + unistr/u8-strdup + unistr/u8-strlen + unistr/u8-strmblen + unistr/u8-strmbtouc + unistr/u8-strncat + unistr/u8-strncmp + unistr/u8-strncpy + unistr/u8-strnlen + unistr/u8-strpbrk + unistr/u8-strrchr + unistr/u8-strspn + unistr/u8-strstr + unistr/u8-strtok + unistr/u8-to-u16 + unistr/u8-to-u32 + unistr/u8-uctomb + unistr/u16-check + unistr/u16-chr + unistr/u16-cmp + unistr/u16-cmp2 + unistr/u16-cpy + unistr/u16-cpy-alloc + unistr/u16-endswith + unistr/u16-mblen + unistr/u16-mbsnlen + unistr/u16-mbtouc + unistr/u16-mbtoucr + unistr/u16-mbtouc-unsafe + unistr/u16-move + unistr/u16-next + unistr/u16-prev + unistr/u16-set + unistr/u16-startswith + unistr/u16-stpcpy + unistr/u16-stpncpy + unistr/u16-strcat + unistr/u16-strchr + unistr/u16-strcmp + unistr/u16-strcoll + unistr/u16-strcpy + unistr/u16-strcspn + unistr/u16-strdup + unistr/u16-strlen + unistr/u16-strmblen + unistr/u16-strmbtouc + unistr/u16-strncat + unistr/u16-strncmp + unistr/u16-strncpy + unistr/u16-strnlen + unistr/u16-strpbrk + unistr/u16-strrchr + unistr/u16-strspn + unistr/u16-strstr + unistr/u16-strtok + unistr/u16-to-u32 + unistr/u16-to-u8 + unistr/u16-uctomb + unistr/u32-check + unistr/u32-chr + unistr/u32-cmp + unistr/u32-cmp2 + unistr/u32-cpy + unistr/u32-cpy-alloc + unistr/u32-endswith + unistr/u32-mblen + unistr/u32-mbsnlen + unistr/u32-mbtouc + unistr/u32-mbtoucr + unistr/u32-mbtouc-unsafe + unistr/u32-move + unistr/u32-next + unistr/u32-prev + unistr/u32-set + unistr/u32-startswith + unistr/u32-stpcpy + unistr/u32-stpncpy + unistr/u32-strcat + unistr/u32-strchr + unistr/u32-strcmp + unistr/u32-strcoll + unistr/u32-strcpy + unistr/u32-strcspn + unistr/u32-strdup + unistr/u32-strlen + unistr/u32-strmblen + unistr/u32-strmbtouc + unistr/u32-strncat + unistr/u32-strncmp + unistr/u32-strncpy + unistr/u32-strnlen + unistr/u32-strpbrk + unistr/u32-strrchr + unistr/u32-strspn + unistr/u32-strstr + unistr/u32-strtok + unistr/u32-to-u16 + unistr/u32-to-u8 + unistr/u32-uctomb + uniconv/base + uniconv/u8-conv-from-enc + uniconv/u8-conv-to-enc + uniconv/u8-strconv-from-enc + uniconv/u8-strconv-from-locale + uniconv/u8-strconv-to-enc + uniconv/u8-strconv-to-locale + uniconv/u16-conv-from-enc + uniconv/u16-conv-to-enc + uniconv/u16-strconv-from-enc + uniconv/u16-strconv-from-locale + uniconv/u16-strconv-to-enc + uniconv/u16-strconv-to-locale + uniconv/u32-conv-from-enc + uniconv/u32-conv-to-enc + uniconv/u32-strconv-from-enc + uniconv/u32-strconv-from-locale + uniconv/u32-strconv-to-enc + uniconv/u32-strconv-to-locale + unistdio/base + unistdio/u8-asnprintf + unistdio/u8-asprintf + unistdio/u8-snprintf + unistdio/u8-sprintf + unistdio/u8-u8-asnprintf + unistdio/u8-u8-asprintf + unistdio/u8-u8-snprintf + unistdio/u8-u8-sprintf + unistdio/u8-u8-vasnprintf + unistdio/u8-u8-vasprintf + unistdio/u8-u8-vsnprintf + unistdio/u8-u8-vsprintf + unistdio/u8-vasnprintf + unistdio/u8-vasprintf + unistdio/u8-vsnprintf + unistdio/u8-vsprintf + unistdio/u16-asnprintf + unistdio/u16-asprintf + unistdio/u16-snprintf + unistdio/u16-sprintf + unistdio/u16-u16-asnprintf + unistdio/u16-u16-asprintf + unistdio/u16-u16-snprintf + unistdio/u16-u16-sprintf + unistdio/u16-u16-vasnprintf + unistdio/u16-u16-vasprintf + unistdio/u16-u16-vsnprintf + unistdio/u16-u16-vsprintf + unistdio/u16-vasnprintf + unistdio/u16-vasprintf + unistdio/u16-vsnprintf + unistdio/u16-vsprintf + unistdio/u32-asnprintf + unistdio/u32-asprintf + unistdio/u32-snprintf + unistdio/u32-sprintf + unistdio/u32-u32-asnprintf + unistdio/u32-u32-asprintf + unistdio/u32-u32-snprintf + unistdio/u32-u32-sprintf + unistdio/u32-u32-vasnprintf + unistdio/u32-u32-vasprintf + unistdio/u32-u32-vsnprintf + unistdio/u32-u32-vsprintf + unistdio/u32-vasnprintf + unistdio/u32-vasprintf + unistdio/u32-vsnprintf + unistdio/u32-vsprintf + unistdio/ulc-asnprintf + unistdio/ulc-asprintf + unistdio/ulc-fprintf + unistdio/ulc-snprintf + unistdio/ulc-sprintf + unistdio/ulc-vasnprintf + unistdio/ulc-vasprintf + unistdio/ulc-vfprintf + unistdio/ulc-vsnprintf + unistdio/ulc-vsprintf + uniname/base + uniname/uniname + unictype/base + unictype/bidicategory-all + unictype/block-all + unictype/category-all + unictype/combining-class + unictype/ctype-alnum + unictype/ctype-alpha + unictype/ctype-blank + unictype/ctype-cntrl + unictype/ctype-digit + unictype/ctype-graph + unictype/ctype-lower + unictype/ctype-print + unictype/ctype-punct + unictype/ctype-space + unictype/ctype-upper + unictype/ctype-xdigit + unictype/decimal-digit + unictype/digit + unictype/mirror + unictype/numeric + unictype/property-all + unictype/scripts-all + unictype/syntax-c-ident + unictype/syntax-c-whitespace + unictype/syntax-java-ident + unictype/syntax-java-whitespace + uniwidth/base + uniwidth/u8-strwidth + uniwidth/u8-width + uniwidth/u16-strwidth + uniwidth/u16-width + uniwidth/u32-strwidth + uniwidth/u32-width + uniwidth/width + uniwbrk/base + uniwbrk/u8-wordbreaks + uniwbrk/u16-wordbreaks + uniwbrk/u32-wordbreaks + uniwbrk/ulc-wordbreaks + uniwbrk/wordbreak-property + unilbrk/base + unilbrk/u8-possible-linebreaks + unilbrk/u8-width-linebreaks + unilbrk/u16-possible-linebreaks + unilbrk/u16-width-linebreaks + unilbrk/u32-possible-linebreaks + unilbrk/u32-width-linebreaks + unilbrk/ulc-possible-linebreaks + unilbrk/ulc-width-linebreaks + uninorm/base + uninorm/canonical-decomposition + uninorm/composition + uninorm/decomposition + uninorm/filter + uninorm/nfc + uninorm/nfd + uninorm/nfkc + uninorm/nfkd + uninorm/u8-normalize + uninorm/u8-normcmp + uninorm/u8-normcoll + uninorm/u8-normxfrm + uninorm/u16-normalize + uninorm/u16-normcmp + uninorm/u16-normcoll + uninorm/u16-normxfrm + uninorm/u32-normalize + uninorm/u32-normcmp + uninorm/u32-normcoll + uninorm/u32-normxfrm + unicase/base + unicase/empty-prefix-context + unicase/empty-suffix-context + unicase/locale-language + unicase/tolower + unicase/totitle + unicase/toupper + unicase/u8-casecmp + unicase/u8-casecoll + unicase/u8-casefold + unicase/u8-casexfrm + unicase/u8-ct-casefold + unicase/u8-ct-tolower + unicase/u8-ct-totitle + unicase/u8-ct-toupper + unicase/u8-is-cased + unicase/u8-is-casefolded + unicase/u8-is-lowercase + unicase/u8-is-titlecase + unicase/u8-is-uppercase + unicase/u8-tolower + unicase/u8-totitle + unicase/u8-toupper + unicase/u16-casecmp + unicase/u16-casecoll + unicase/u16-casefold + unicase/u16-casexfrm + unicase/u16-ct-casefold + unicase/u16-ct-tolower + unicase/u16-ct-totitle + unicase/u16-ct-toupper + unicase/u16-is-cased + unicase/u16-is-casefolded + unicase/u16-is-lowercase + unicase/u16-is-titlecase + unicase/u16-is-uppercase + unicase/u16-tolower + unicase/u16-totitle + unicase/u16-toupper + unicase/u32-casecmp + unicase/u32-casecoll + unicase/u32-casefold + unicase/u32-casexfrm + unicase/u32-ct-casefold + unicase/u32-ct-tolower + unicase/u32-ct-totitle + unicase/u32-ct-toupper + unicase/u32-is-cased + unicase/u32-is-casefolded + unicase/u32-is-lowercase + unicase/u32-is-titlecase + unicase/u32-is-uppercase + unicase/u32-tolower + unicase/u32-totitle + unicase/u32-toupper + unicase/ulc-casecmp + unicase/ulc-casecoll + unicase/ulc-casexfrm + relocatable-lib-lgpl + ' + $GNULIB_TOOL --lib=libunistring --source-base=lib --m4-base=gnulib-m4 --tests-base=tests \ + --with-tests --lgpl --makefile-name=Makefile.gnulib --libtool --local-dir=gnulib-local \ + --import $GNULIB_MODULES + # Change lib/unistr.h to be usable standalone. + sed -e 's/ifdef GNULIB_[A-Za-z0-9_]*/if 1/' -e 's/defined GNULIB_[A-Za-z0-9_]*/1/g' \ + -e 's/HAVE_INLINE/UNISTRING_HAVE_INLINE/g' \ + < lib/unistr.h \ + > lib/unistr.h.tmp \ + && mv lib/unistr.h.tmp lib/unistr.h + # Change lib/unictype.h and lib/uninorm.h for shared libraries on Woe32 systems. + sed -e 's/extern const uc_general_category_t UC_/extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_/' \ + -e 's/extern const uc_property_t UC_/extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_/' \ + < lib/unictype.h \ + > lib/unictype.h.tmp \ + && mv lib/unictype.h.tmp lib/unictype.h + sed -e 's/extern const struct unicode_normalization_form /extern LIBUNISTRING_DLL_VARIABLE const struct unicode_normalization_form /' \ + < lib/uninorm.h \ + > lib/uninorm.h.tmp \ + && mv lib/uninorm.h.tmp lib/uninorm.h + sed -e 's/extern const casing_/extern LIBUNISTRING_DLL_VARIABLE const casing_/' \ + < lib/unicase.h \ + > lib/unicase.h.tmp \ + && mv lib/unicase.h.tmp lib/unicase.h + $GNULIB_TOOL --copy-file build-aux/config.guess; chmod a+x build-aux/config.guess + $GNULIB_TOOL --copy-file build-aux/config.sub; chmod a+x build-aux/config.sub + # If we got no texinfo.tex so far, take the snapshot from gnulib. + if test ! -f build-aux/texinfo.tex; then + $GNULIB_TOOL --copy-file build-aux/texinfo.tex build-aux/texinfo.tex + fi + fi +fi + +build-aux/fixaclocal aclocal -I m4 -I gnulib-m4 +autoconf +autoheader && touch config.h.in +automake --add-missing --copy diff --git a/build-aux/compile b/build-aux/compile new file mode 100755 index 00000000..1b1d2321 --- /dev/null +++ b/build-aux/compile @@ -0,0 +1,142 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2005-05-14.22 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand `-c -o'. +Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file `INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; +esac + +ofile= +cfile= +eat= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we strip `-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/build-aux/config.guess b/build-aux/config.guess new file mode 100755 index 00000000..e3a2116a --- /dev/null +++ b/build-aux/config.guess @@ -0,0 +1,1533 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-06-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd | genuineintel) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/build-aux/config.rpath b/build-aux/config.rpath new file mode 100755 index 00000000..85c2f209 --- /dev/null +++ b/build-aux/config.rpath @@ -0,0 +1,672 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2008 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's _LT_CC_BASENAME. + +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's _LT_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + darwin*) + case $cc_basename in + xlc*) + wl='-Wl,' + ;; + esac + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + newsos6) + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + ecc*) + wl='-Wl,' + ;; + icc* | ifort*) + wl='-Wl,' + ;; + lf95*) + wl='-Wl,' + ;; + pgcc | pgf77 | pgf90) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + rdos*) + ;; + solaris*) + wl='-Wl,' + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + wl='-Wl,' + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's _LT_LINKER_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + case "$host_os" in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we cannot use + # them. + ld_shlibs=no + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32* | cegcc*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if test "$GCC" = yes ; then + : + else + case $cc_basename in + xlc*) + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + ;; + *) + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + ;; + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. +# Unlike libtool.m4, here we don't care about _all_ names of the library, but +# only about the one the linker finds when passed -lNAME. This is the last +# element of library_names_spec in libtool.m4, or possibly two of them if the +# linker has special search rules. +library_names_spec= # the last element of library_names_spec in libtool.m4 +libname_spec='lib$name' +case "$host_os" in + aix3*) + library_names_spec='$libname.a' + ;; + aix[4-9]*) + library_names_spec='$libname$shrext' + ;; + amigaos*) + library_names_spec='$libname.a' + ;; + beos*) + library_names_spec='$libname$shrext' + ;; + bsdi[45]*) + library_names_spec='$libname$shrext' + ;; + cygwin* | mingw* | pw32* | cegcc*) + shrext=.dll + library_names_spec='$libname.dll.a $libname.lib' + ;; + darwin* | rhapsody*) + shrext=.dylib + library_names_spec='$libname$shrext' + ;; + dgux*) + library_names_spec='$libname$shrext' + ;; + freebsd1*) + ;; + freebsd* | dragonfly*) + case "$host_os" in + freebsd[123]*) + library_names_spec='$libname$shrext$versuffix' ;; + *) + library_names_spec='$libname$shrext' ;; + esac + ;; + gnu*) + library_names_spec='$libname$shrext' + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + library_names_spec='$libname$shrext' + ;; + interix[3-9]*) + library_names_spec='$libname$shrext' + ;; + irix5* | irix6* | nonstopux*) + library_names_spec='$libname$shrext' + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux* | k*bsd*-gnu) + library_names_spec='$libname$shrext' + ;; + knetbsd*-gnu) + library_names_spec='$libname$shrext' + ;; + netbsd*) + library_names_spec='$libname$shrext' + ;; + newsos6) + library_names_spec='$libname$shrext' + ;; + nto-qnx*) + library_names_spec='$libname$shrext' + ;; + openbsd*) + library_names_spec='$libname$shrext$versuffix' + ;; + os2*) + libname_spec='$name' + shrext=.dll + library_names_spec='$libname.a' + ;; + osf3* | osf4* | osf5*) + library_names_spec='$libname$shrext' + ;; + rdos*) + ;; + solaris*) + library_names_spec='$libname$shrext' + ;; + sunos4*) + library_names_spec='$libname$shrext$versuffix' + ;; + sysv4 | sysv4.3*) + library_names_spec='$libname$shrext' + ;; + sysv4*MP*) + library_names_spec='$libname$shrext' + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + library_names_spec='$libname$shrext' + ;; + uts4*) + library_names_spec='$libname$shrext' + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/build-aux/depcomp b/build-aux/depcomp new file mode 100755 index 00000000..e5f9736c --- /dev/null +++ b/build-aux/depcomp @@ -0,0 +1,589 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2007-03-29.01 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software +# Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/build-aux/fixaclocal b/build-aux/fixaclocal new file mode 100755 index 00000000..10ff8e41 --- /dev/null +++ b/build-aux/fixaclocal @@ -0,0 +1,35 @@ +#!/bin/sh +# Script for fixing aclocal.m4 files produced by 'aclocal' from automake 1.10. +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Usage: fixaclocal aclocal [OPTIONS] + +"$@" +result=$? +if test $result = 0 && test -f aclocal.m4; then + # Remove the block of 4 lines starting with 'm4_if(m4_PACKAGE_VERSION' + # and the block of 5 lines starting with 'm4_if(AC_AUTOCONF_VERSION' + # (automake <= 1.10.1) or with 'm4_if(m4_defn([AC_AUTOCONF_VERSION])' + # (automake >= 1.10.2). + sed -e '/m4_if(m4_PACKAGE_VERSION/{N;N;N;d}' -e '/m4_if(AC_AUTOCONF_VERSION/{N;N;N;N;d}' -e '/m4_if(m4_defn(\[AC_AUTOCONF_VERSION\])/{N;N;N;N;d}' < aclocal.m4 > aclocal.m4.tmp + if cmp aclocal.m4 aclocal.m4.tmp > /dev/null; then + rm -f aclocal.m4.tmp + else + mv aclocal.m4.tmp aclocal.m4 + fi +else + exit $result +fi diff --git a/build-aux/install-sh b/build-aux/install-sh new file mode 100755 index 00000000..a5897de6 --- /dev/null +++ b/build-aux/install-sh @@ -0,0 +1,519 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2006-12-25.00 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/build-aux/link-warning.h b/build-aux/link-warning.h new file mode 100644 index 00000000..fda01941 --- /dev/null +++ b/build-aux/link-warning.h @@ -0,0 +1,28 @@ +/* GL_LINK_WARNING("literal string") arranges to emit the literal string as + a linker warning on most glibc systems. + We use a linker warning rather than a preprocessor warning, because + #warning cannot be used inside macros. */ +#ifndef GL_LINK_WARNING + /* This works on platforms with GNU ld and ELF object format. + Testing __GLIBC__ is sufficient for asserting that GNU ld is in use. + Testing __ELF__ guarantees the ELF object format. + Testing __GNUC__ is necessary for the compound expression syntax. */ +# if defined __GLIBC__ && defined __ELF__ && defined __GNUC__ +# define GL_LINK_WARNING(message) \ + GL_LINK_WARNING1 (__FILE__, __LINE__, message) +# define GL_LINK_WARNING1(file, line, message) \ + GL_LINK_WARNING2 (file, line, message) /* macroexpand file and line */ +# define GL_LINK_WARNING2(file, line, message) \ + GL_LINK_WARNING3 (file ":" #line ": warning: " message) +# define GL_LINK_WARNING3(message) \ + ({ static const char warning[sizeof (message)] \ + __attribute__ ((__unused__, \ + __section__ (".gnu.warning"), \ + __aligned__ (1))) \ + = message "\n"; \ + (void)0; \ + }) +# else +# define GL_LINK_WARNING(message) ((void) 0) +# endif +#endif diff --git a/build-aux/ltmain.sh b/build-aux/ltmain.sh new file mode 100644 index 00000000..271873d3 --- /dev/null +++ b/build-aux/ltmain.sh @@ -0,0 +1,8526 @@ +# Generated from ltmain.m4sh. + +# ltmain.sh (GNU libtool) 2.2.6 +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, +# or obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# Usage: $progname [OPTION]... [MODE-ARG]... +# +# Provide generalized library-building support services. +# +# --config show all configuration variables +# --debug enable verbose shell tracing +# -n, --dry-run display commands without modifying any files +# --features display basic configuration information and exit +# --mode=MODE use operation mode MODE +# --preserve-dup-deps don't remove duplicate dependency libraries +# --quiet, --silent don't print informational messages +# --tag=TAG use configuration variables from tag TAG +# -v, --verbose print informational messages (default) +# --version print version information +# -h, --help print short or long help message +# +# MODE must be one of the following: +# +# clean remove files from the build directory +# compile compile a source file into a libtool object +# execute automatically set library path, then run a program +# finish complete the installation of libtool libraries +# install install libraries or executables +# link create a library or an executable +# uninstall remove libraries from an installed directory +# +# MODE-ARGS vary depending on the MODE. +# Try `$progname --help --mode=MODE' for a more detailed description of MODE. +# +# When reporting a bug, please describe a test case to reproduce it and +# include the following information: +# +# host-triplet: $host +# shell: $SHELL +# compiler: $LTCC +# compiler flags: $LTCFLAGS +# linker: $LD (gnu? $with_gnu_ld) +# $progname: (GNU libtool) 2.2.6 +# automake: $automake_version +# autoconf: $autoconf_version +# +# Report bugs to . + +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=2.2.6 +TIMESTAMP="" +package_revision=1.3012 + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# NLS nuisances: We save the old values to restore during execute mode. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +lt_user_locale= +lt_safe_locale= +for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test \"\${$lt_var+set}\" = set; then + save_$lt_var=\$$lt_var + $lt_var=C + export $lt_var + lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" + lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" + fi" +done + +$lt_unset CDPATH + + + + + +: ${CP="cp -f"} +: ${ECHO="echo"} +: ${EGREP="/usr/bin/grep -E"} +: ${FGREP="/usr/bin/grep -F"} +: ${GREP="/usr/bin/grep"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SED="/opt/local/bin/gsed"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +exit_status=$EXIT_SUCCESS + +# Make sure IFS has a sensible default +lt_nl=' +' +IFS=" $lt_nl" + +dirname="s,/[^/]*$,," +basename="s,^.*/,," + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +# Generated shell functions inserted here. + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +# In the unlikely event $progname began with a '-', it would play havoc with +# func_echo (imagine progname=-n), so we prepend ./ in that case: +func_dirname_and_basename "$progpath" +progname=$func_basename_result +case $progname in + -*) progname=./$progname ;; +esac + +# Make sure we have an absolute path for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=$func_dirname_result + progdir=`cd "$progdir" && pwd` + progpath="$progdir/$progname" + ;; + *) + save_IFS="$IFS" + IFS=: + for progdir in $PATH; do + IFS="$save_IFS" + test -x "$progdir/$progname" && break + done + IFS="$save_IFS" + test -n "$progdir" || progdir=`pwd` + progpath="$progdir/$progname" + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='s/\([`"$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Re-`\' parameter expansions in output of double_quote_subst that were +# `\'-ed in input to the same. If an odd number of `\' preceded a '$' +# in input to double_quote_subst, that '$' was protected from expansion. +# Since each input `\' is now two `\'s, look for any number of runs of +# four `\'s followed by two `\'s and then a '$'. `\' that '$'. +bs='\\' +bs2='\\\\' +bs4='\\\\\\\\' +dollar='\$' +sed_double_backslash="\ + s/$bs4/&\\ +/g + s/^$bs2$dollar/$bs&/ + s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g + s/\n//g" + +# Standard options: +opt_dry_run=false +opt_help=false +opt_quiet=false +opt_verbose=false +opt_warning=: + +# func_echo arg... +# Echo program name prefixed message, along with the current mode +# name if it has been set yet. +func_echo () +{ + $ECHO "$progname${mode+: }$mode: $*" +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 +} + +# func_warning arg... +# Echo program name prefixed warning message to standard error. +func_warning () +{ + $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + + # bash bug again: + : +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "$help" +} +help="Try \`$progname --help' for more information." ## default + + +# func_grep expression filename +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_mkdir_p directory-path +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + my_directory_path="$1" + my_dir_list= + + if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then + + # Protect directory names starting with `-' + case $my_directory_path in + -*) my_directory_path="./$my_directory_path" ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$my_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + my_dir_list="$my_directory_path:$my_dir_list" + + # If the last portion added has no slash in it, the list is done + case $my_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` + done + my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` + + save_mkdir_p_IFS="$IFS"; IFS=':' + for my_dir in $my_dir_list; do + IFS="$save_mkdir_p_IFS" + # mkdir can fail with a `File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$my_dir" 2>/dev/null || : + done + IFS="$save_mkdir_p_IFS" + + # Bail out if we (or some other process) failed to create a directory. + test -d "$my_directory_path" || \ + func_fatal_error "Failed to create \`$1'" + fi +} + + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "X$my_tmpdir" | $Xsed +} + + +# func_quote_for_eval arg +# Aesthetically quote ARG to be evaled later. +# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT +# is double-quoted, suitable for a subsequent eval, whereas +# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters +# which are still active within double quotes backslashified. +func_quote_for_eval () +{ + case $1 in + *[\\\`\"\$]*) + func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; + *) + func_quote_for_eval_unquoted_result="$1" ;; + esac + + case $func_quote_for_eval_unquoted_result in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and and variable + # expansion for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" + ;; + *) + func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" + esac +} + + +# func_quote_for_expand arg +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + case $1 in + *[\\\`\"]*) + my_arg=`$ECHO "X$1" | $Xsed \ + -e "$double_quote_subst" -e "$sed_double_backslash"` ;; + *) + my_arg="$1" ;; + esac + + case $my_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + my_arg="\"$my_arg\"" + ;; + esac + + func_quote_for_expand_result="$my_arg" +} + + +# func_show_eval cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$my_cmd" + my_status=$? + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + +# func_show_eval_locale cmd [fail_exp] +# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + my_cmd="$1" + my_fail_exp="${2-:}" + + ${opt_silent-false} || { + func_quote_for_expand "$my_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + if ${opt_dry_run-false}; then :; else + eval "$lt_user_locale + $my_cmd" + my_status=$? + eval "$lt_safe_locale" + if test "$my_status" -eq 0; then :; else + eval "(exit $my_status); $my_fail_exp" + fi + fi +} + + + + + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# // + s/^# *$// + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ + p + }' < "$progpath" + exit $? +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED -n '/^# Usage:/,/# -h/ { + s/^# // + s/^# *$// + s/\$progname/'$progname'/ + p + }' < "$progpath" + $ECHO + $ECHO "run \`$progname --help | more' for full usage" + exit $? +} + +# func_help +# Echo long help message to standard output and exit. +func_help () +{ + $SED -n '/^# Usage:/,/# Report bugs to/ { + s/^# // + s/^# *$// + s*\$progname*'$progname'* + s*\$host*'"$host"'* + s*\$SHELL*'"$SHELL"'* + s*\$LTCC*'"$LTCC"'* + s*\$LTCFLAGS*'"$LTCFLAGS"'* + s*\$LD*'"$LD"'* + s/\$with_gnu_ld/'"$with_gnu_ld"'/ + s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ + s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ + p + }' < "$progpath" + exit $? +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +exit_cmd=: + + + + + +# Check that we have a working $ECHO. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell, and then maybe $ECHO will work. + exec $SHELL "$progpath" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `libtool --version' happen quickly. +{ + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Parse non-mode specific arguments: + while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --config) func_config ;; + + --debug) preserve_args="$preserve_args $opt" + func_echo "enabling shell trace mode" + opt_debug='set -x' + $opt_debug + ;; + + -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break + execute_dlfiles="$execute_dlfiles $1" + shift + ;; + + --dry-run | -n) opt_dry_run=: ;; + --features) func_features ;; + --finish) mode="finish" ;; + + --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break + case $1 in + # Valid mode arguments: + clean) ;; + compile) ;; + execute) ;; + finish) ;; + install) ;; + link) ;; + relink) ;; + uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; + esac + + mode="$1" + shift + ;; + + --preserve-dup-deps) + opt_duplicate_deps=: ;; + + --quiet|--silent) preserve_args="$preserve_args $opt" + opt_silent=: + ;; + + --verbose| -v) preserve_args="$preserve_args $opt" + opt_silent=false + ;; + + --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break + preserve_args="$preserve_args $opt $1" + func_enable_tag "$1" # tagname is set here + shift + ;; + + # Separate optargs to long options: + -dlopen=*|--mode=*|--tag=*) + func_opt_split "$opt" + set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + shift + ;; + + -\?|-h) func_usage ;; + --help) opt_help=: ;; + --version) func_version ;; + + -*) func_fatal_help "unrecognized option \`$opt'" ;; + + *) nonopt="$opt" + break + ;; + esac + done + + + case $host in + *cygwin* | *mingw* | *pw32* | *cegcc*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + ;; + esac + + # Having warned about all mis-specified options, bail out if + # anything was wrong. + $exit_cmd $EXIT_FAILURE +} + +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +## ----------- ## +## Main. ## +## ----------- ## + +$opt_help || { + # Sanity checks first: + func_check_version_match + + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" + fi + + test -z "$mode" && func_fatal_error "error: you must specify a MODE." + + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$mode' for more information." +} + + +# func_lalib_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null \ + | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool `.la' library or `.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if `file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case "$lalib_p_line" in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test "$lalib_p" = yes +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + func_lalib_p "$1" +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_ltwrapper_scriptname_result="" + if func_ltwrapper_executable_p "$1"; then + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" + fi +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $opt_debug + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$save_ifs + eval cmd=\"$cmd\" + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# `FILE.' does not work on cygwin managed mounts. +func_source () +{ + $opt_debug + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $opt_debug + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_quote_for_eval "$arg" + CC_quoted="$CC_quoted $func_quote_for_eval_result" + done + case "$@ " in + " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with \`--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T <?"'"'"' &()|`$[]' \ + && func_warning "libobj name \`$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname="$func_basename_result" + xdir="$func_dirname_result" + lobj=${xdir}$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + removelist="$removelist $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + removelist="$removelist $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + command="$command -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test "$suppress_opt" = yes; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test "$need_locks" = warn && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { +test "$mode" = compile && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -shared do not build a \`.o' file suitable for static linking + -static only build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE Use a list of object files found in FILE to specify objects + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode \`$mode'" + ;; + esac + + $ECHO + $ECHO "Try \`$progname --help' for more information about other modes." + + exit $? +} + + # Now that we've collected a possible --mode arg, show help if necessary + $opt_help && func_mode_help + + +# func_mode_execute arg... +func_mode_execute () +{ + $opt_debug + # The first argument is the command name. + cmd="$nonopt" + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + test -f "$file" \ + || func_fatal_help "\`$file' is not a file" + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "\`$file' was not linked with \`-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir="$func_dirname_result" + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir="$func_dirname_result" + ;; + + *) + func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file="$progdir/$program" + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_quote_for_eval "$file" + args="$args $func_quote_for_eval_result" + done + + if test "X$opt_dry_run" = Xfalse; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + $ECHO "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + fi +} + +test "$mode" = execute && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $opt_debug + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_silent && exit $EXIT_SUCCESS + + $ECHO "X----------------------------------------------------------------------" | $Xsed + $ECHO "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + $ECHO + $ECHO "If you ever happen to want to link against installed libraries" + $ECHO "in a given directory, LIBDIR, you must either use libtool, and" + $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" + $ECHO "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" + $ECHO " during execution" + fi + if test -n "$runpath_var"; then + $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" + $ECHO " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + $ECHO + + $ECHO "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" + $ECHO "pages." + ;; + *) + $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + $ECHO "X----------------------------------------------------------------------" | $Xsed + exit $EXIT_SUCCESS +} + +test "$mode" = finish && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $opt_debug + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $ECHO "X$nonopt" | $GREP shtool >/dev/null; then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + install_prog="$install_prog$func_quote_for_eval_result" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) + case " $install_prog " in + *[\\\ /]cp\ *) ;; + *) prev=$arg ;; + esac + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + install_prog="$install_prog $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the \`$prev' option requires an argument" + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir="$func_dirname_result" + destname="$func_basename_result" + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "\`$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "\`$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "\`$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir="$func_dirname_result" + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking \`$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname="$1" + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme="$stripme" + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme="" + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try `ln -sf' first, because the `ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name="$func_basename_result" + instname="$dir/$name"i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to \`$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + func_basename "$file" + destfile="$func_basename_result" + destfile="$destdir/$destfile" + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext="" + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script \`$wrapper'" + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "\`$lib' has not been installed in \`$libdir'" + finalize=no + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + $opt_dry_run || { + if test "$finalize" = yes; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file="$func_basename_result" + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_silent || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink \`$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file="$outputname" + else + func_warning "cannot relink \`$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name="$func_basename_result" + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run \`$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test "$mode" = install && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $opt_debug + my_outputname="$1" + my_originator="$2" + my_pic_p="${3-no}" + my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms="${my_outputname}S.c" + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${my_outputname}.nm" + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + func_verbose "generating symbol list for \`$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_verbose "extracting global C symbols from \`$progfile'" + $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$outputname.exp" + $opt_dry_run || { + $RM $export_symbols + eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from \`$dlprefile'" + func_basename "$dlprefile" + name="$func_basename_result" + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + $ECHO >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +" + case $host in + *cygwin* | *mingw* | *cegcc* ) + $ECHO >> "$output_objdir/$my_dlsyms" "\ +/* DATA imports from DLLs on WIN32 con't be const, because + runtime relocations are performed -- see ld's documentation + on pseudo-relocs. */" + lt_dlsym_const= ;; + *osf5*) + echo >> "$output_objdir/$my_dlsyms" "\ +/* This system does not cope well with relocations in const data */" + lt_dlsym_const= ;; + *) + lt_dlsym_const=const ;; + esac + + $ECHO >> "$output_objdir/$my_dlsyms" "\ +extern $lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[]; +$lt_dlsym_const lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{\ + { \"$my_originator\", (void *) 0 }," + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + $ECHO >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + if test "X$my_pic_p" != Xno; then + pic_flag_for_symtable=" $pic_flag" + fi + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) symtab_cflags="$symtab_cflags $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' + + # Transform the symbol file into the correct name. + symfileobj="$output_objdir/${my_outputname}S.$objext" + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for \`$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +func_win32_libid () +{ + $opt_debug + win32_libid_type="unknown" + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | + $SED -n -e ' + 1,100{ + / I /{ + s,.*,import, + p + q + } + }'` + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $opt_debug + f_ex_an_ar_dir="$1"; shift + f_ex_an_ar_oldlib="$1" + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $opt_debug + my_gentop="$1"; shift + my_oldlibs=${1+"$@"} + my_oldobjs="" + my_xlib="" + my_xabs="" + my_xdir="" + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib="$func_basename_result" + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir="$my_gentop/$my_xlib_u" + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + darwin_base_archive=`basename "$darwin_archive"` + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches ; do + func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" + $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" + cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" + func_extract_an_archive "`pwd`" "${darwin_base_archive}" + cd "$darwin_curdir" + $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + + func_extract_archives_result="$my_oldobjs" +} + + + +# func_emit_wrapper_part1 [arg=no] +# +# Emit the first part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part1 () +{ + func_emit_wrapper_part1_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part1_arg1=$1 + fi + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='${SED} -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + ECHO=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$ECHO works! + : + else + # Restart under the correct shell, and then maybe \$ECHO will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $ECHO "\ + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done +" +} +# end: func_emit_wrapper_part1 + +# func_emit_wrapper_part2 [arg=no] +# +# Emit the second part of a libtool wrapper script on stdout. +# For more information, see the description associated with +# func_emit_wrapper(), below. +func_emit_wrapper_part2 () +{ + func_emit_wrapper_part2_arg1=no + if test -n "$1" ; then + func_emit_wrapper_part2_arg1=$1 + fi + + $ECHO "\ + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} +# end: func_emit_wrapper_part2 + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory in which it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=no + if test -n "$1" ; then + func_emit_wrapper_arg1=$1 + fi + + # split this up so that func_emit_cwrapperexe_src + # can call each part independently. + func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" + func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" +} + + +# func_to_host_path arg +# +# Convert paths to host format when used with build tools. +# Intended for use with "native" mingw (where libtool itself +# is running under the msys shell), or in the following cross- +# build environments: +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# where wine is equipped with the `winepath' executable. +# In the native mingw case, the (msys) shell automatically +# converts paths for any non-msys applications it launches, +# but that facility isn't available from inside the cwrapper. +# Similar accommodations are necessary for $host mingw and +# $build cygwin. Calling this function does no harm for other +# $host/$build combinations not listed above. +# +# ARG is the path (on $build) that should be converted to +# the proper representation for $host. The result is stored +# in $func_to_host_path_result. +func_to_host_path () +{ + func_to_host_path_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + case $build in + *mingw* ) # actually, msys + # awkward: cmd appends spaces to result + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_path_tmp1=`( cmd //c echo "$1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_path_tmp1=`cygpath -w "$1"` + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # Unfortunately, winepath does not exit with a non-zero + # error code, so we are forced to check the contents of + # stdout. On the other hand, if the command is not + # found, the shell will set an exit code of 127 and print + # *an error message* to stdout. So we must check for both + # error code of zero AND non-empty stdout, which explains + # the odd construction: + func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` + if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then + func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ + $SED -e "$lt_sed_naive_backslashify"` + else + # Allow warning below. + func_to_host_path_result="" + fi + ;; + esac + if test -z "$func_to_host_path_result" ; then + func_error "Could not determine host path corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_path_result="$1" + fi + ;; + esac + fi +} +# end: func_to_host_path + +# func_to_host_pathlist arg +# +# Convert pathlists to host format when used with build tools. +# See func_to_host_path(), above. This function supports the +# following $build/$host combinations (but does no harm for +# combinations not listed here): +# $build $host +# mingw (msys) mingw [e.g. native] +# cygwin mingw +# *nix + wine mingw +# +# Path separators are also converted from $build format to +# $host format. If ARG begins or ends with a path separator +# character, it is preserved (but converted to $host format) +# on output. +# +# ARG is a pathlist (on $build) that should be converted to +# the proper representation on $host. The result is stored +# in $func_to_host_pathlist_result. +func_to_host_pathlist () +{ + func_to_host_pathlist_result="$1" + if test -n "$1" ; then + case $host in + *mingw* ) + lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_to_host_pathlist_tmp2="$1" + # Once set for this call, this variable should not be + # reassigned. It is used in tha fallback case. + func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e 's|^:*||' -e 's|:*$||'` + case $build in + *mingw* ) # Actually, msys. + # Awkward: cmd appends spaces to result. + lt_sed_strip_trailing_spaces="s/[ ]*\$//" + func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + *cygwin* ) + func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ + $SED -e "$lt_sed_naive_backslashify"` + ;; + * ) + # unfortunately, winepath doesn't convert pathlists + func_to_host_pathlist_result="" + func_to_host_pathlist_oldIFS=$IFS + IFS=: + for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do + IFS=$func_to_host_pathlist_oldIFS + if test -n "$func_to_host_pathlist_f" ; then + func_to_host_path "$func_to_host_pathlist_f" + if test -n "$func_to_host_path_result" ; then + if test -z "$func_to_host_pathlist_result" ; then + func_to_host_pathlist_result="$func_to_host_path_result" + else + func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" + fi + fi + fi + IFS=: + done + IFS=$func_to_host_pathlist_oldIFS + ;; + esac + if test -z "$func_to_host_pathlist_result" ; then + func_error "Could not determine the host path(s) corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This may break if $1 contains DOS-style drive + # specifications. The fix is not to complicate the expression + # below, but for the user to provide a working wine installation + # with winepath so that path translation in the cross-to-mingw + # case works properly. + lt_replace_pathsep_nix_to_dos="s|:|;|g" + func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ + $SED -e "$lt_replace_pathsep_nix_to_dos"` + fi + # Now, add the leading and trailing path separators back + case "$1" in + :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" + ;; + esac + case "$1" in + *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" + ;; + esac + ;; + esac + fi +} +# end: func_to_host_pathlist + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +# define setmode _setmode +#else +# include +# include +# ifdef __CYGWIN__ +# include +# define HAVE_SETENV +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(PATH_MAX) +# define LT_PATHMAX PATH_MAX +#elif defined(MAXPATHLEN) +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +#ifdef _MSC_VER +# define S_IXUSR _S_IEXEC +# define stat _stat +# ifndef _INTPTR_T_DEFINED +# define intptr_t int +# endif +#endif + +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifdef __CYGWIN__ +# define FOPEN_WB "wb" +#endif + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ +} while (0) + +#undef LTWRAPPER_DEBUGPRINTF +#if defined DEBUGWRAPPER +# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args +static void +ltwrapper_debugprintf (const char *fmt, ...) +{ + va_list args; + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); +} +#else +# define LTWRAPPER_DEBUGPRINTF(args) +#endif + +const char *program_name = NULL; + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_fatal (const char *message, ...); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_opt_process_env_set (const char *arg); +void lt_opt_process_env_prepend (const char *arg); +void lt_opt_process_env_append (const char *arg); +int lt_split_name_value (const char *arg, char** name, char** value); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); + +static const char *script_text_part1 = +EOF + + func_emit_wrapper_part1 yes | + $SED -e 's/\([\\"]\)/\\\1/g' \ + -e 's/^/ "/' -e 's/$/\\n"/' + echo ";" + cat <"))); + for (i = 0; i < newargc; i++) + { + LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); + } + +EOF + + case $host_os in + mingw*) + cat <<"EOF" + /* execv doesn't actually work on mingw as expected on unix */ + newargz = prepare_spawn (newargz); + rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); + if (rval == -1) + { + /* failed to start process */ + LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); + return 127; + } + return rval; +EOF + ;; + *) + cat <<"EOF" + execv (lt_argv_zero, newargz); + return rval; /* =127, but avoids unused variable warning */ +EOF + ;; + esac + + cat <<"EOF" +} + +void * +xmalloc (size_t num) +{ + void *p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; +} + +char * +xstrdup (const char *string) +{ + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), + string) : NULL; +} + +const char * +base_name (const char *name) +{ + const char *base; + +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha ((unsigned char) name[0]) && name[1] == ':') + name += 2; +#endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return base; +} + +int +check_executable (const char *path) +{ + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if ((stat (path, &st) >= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", + path ? (*path ? path : "EMPTY!") : "NULL!")); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + int tmp_len; + char *concat_name; + + LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", + wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined (HAVE_DOS_BASED_FILE_SYSTEM) + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = q - p; + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", + tmp_pathspec)); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + char *errstr = strerror (errno); + lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal ("Could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (strcmp (str, pat) == 0) + *str = '\0'; + } + return str; +} + +static void +lt_error_core (int exit_status, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); +} + +void +lt_setenv (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", + (name ? name : ""), + (value ? value : ""))); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + int len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + int orig_value_len = strlen (orig_value); + int add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +int +lt_split_name_value (const char *arg, char** name, char** value) +{ + const char *p; + int len; + if (!arg || !*arg) + return 1; + + p = strchr (arg, (int)'='); + + if (!p) + return 1; + + *value = xstrdup (++p); + + len = strlen (arg) - strlen (*value); + *name = XMALLOC (char, len); + strncpy (*name, arg, len-1); + (*name)[len - 1] = '\0'; + + return 0; +} + +void +lt_opt_process_env_set (const char *arg) +{ + char *name = NULL; + char *value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); + } + + lt_setenv (name, value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_prepend (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_opt_process_env_append (const char *arg) +{ + char *name = NULL; + char *value = NULL; + char *new_value = NULL; + + if (lt_split_name_value (arg, &name, &value) != 0) + { + XFREE (name); + XFREE (value); + lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); + } + + new_value = lt_extend_str (getenv (name), value, 1); + lt_setenv (name, new_value); + XFREE (new_value); + XFREE (name); + XFREE (value); +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + int len = strlen (new_value); + while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[len-1] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + (name ? name : ""), + (value ? value : ""))); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac +} +# end: func_emit_cwrapperexe_src + +# func_mode_link arg... +func_mode_link () +{ + $opt_debug + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module="${wl}-single_module" + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test "$build_libtool_libs" != yes && \ + func_fatal_configuration "can not build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg="$1" + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + test -f "$arg" \ + || func_fatal_error "symbol file \`$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) deplibs="$deplibs $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file \`$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + precious_regex) + precious_files_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds="$arg" + prev= + continue + ;; + weak) + weak_libs="$weak_libs $arg" + prev= + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "\`-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname '-L' '' "$arg" + dir=$func_stripname_result + if test -z "$dir"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between \`-L' and \`$1'" + else + func_fatal_error "need path for \`-L' option" + fi + fi + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of \`$dir'" + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + deplibs="$deplibs System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test "X$arg" = "X-lc" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; + esac + continue + ;; + + -multi_module) + single_module="${wl}-multi_module" + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "\`-no-install' is ignored for $host" + func_warning "assuming \`-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + func_quote_for_eval "$flag" + arg="$arg $wl$func_quote_for_eval_result" + compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" + linker_flags="$linker_flags $func_quote_for_eval_result" + done + IFS="$save_ifs" + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + # -64, -mips[0-9] enable 64-bit mode on the SGI compiler + # -r[0-9][0-9]* specifies the processor on the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler + # +DA*, +DD* enable 64-bit mode on the HP compiler + # -q* pass through compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* pass through architecture-specific + # compiler args for GCC + # -F/path gives path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC + # @file GCC response files + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + func_append compile_command " $arg" + func_append finalize_command " $arg" + compiler_flags="$compiler_flags $arg" + continue + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test "$pic_object" = none && + test "$non_pic_object" = none; then + func_fatal_error "cannot find name of object for \`$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + if test "$pic_object" != none; then + # Prepend the subdirectory the object is found in. + pic_object="$xdir$pic_object" + + if test "$prev" = dlfiles; then + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg="$pic_object" + fi + + # Non-PIC object. + if test "$non_pic_object" != none; then + # Prepend the subdirectory the object is found in. + non_pic_object="$xdir$non_pic_object" + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object="$pic_object" + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir="$func_dirname_result" + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "\`$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg="$func_quote_for_eval_result" + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the \`$prevarg' option requires an argument" + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname="$func_basename_result" + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + func_dirname "$output" "/" "" + output_objdir="$func_dirname_result$objdir" + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_duplicate_deps ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + + if test "$linkmode" = lib; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$pre_post_deps $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test "$linkmode,$pass" = "lib,link"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs="$tmp_deplibs" + fi + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan"; then + libs="$deplibs" + deplibs= + fi + if test "$linkmode" = prog; then + case $pass in + dlopen) libs="$dlfiles" ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test "$linkmode,$pass" = "lib,dlpreopen"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + case $lib in + *.la) func_source "$lib" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` + case " $weak_libs " in + *" $deplib_base "*) ;; + *) deplibs="$deplibs $deplib" ;; + esac + done + done + libs="$dlprefiles" + fi + if test "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + + for deplib in $libs; do + lib= + found=no + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + compiler_flags="$compiler_flags $deplib" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + func_warning "\`-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test "$linkmode" = lib; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib="$searchdir/lib${name}${search_ext}" + if test -f "$lib"; then + if test "$search_ext" = ".la"; then + found=yes + else + found=no + fi + break 2 + fi + done + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + else # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll="$l" + done + if test "X$ll" = "X$old_library" ; then # only static version available + found=no + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + lib=$ladir/$old_library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + fi + ;; # -l + *.ltframework) + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test "$linkmode" = lib ; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + *) + func_warning "\`-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + func_stripname '-R' '' "$deplib" + dir=$func_stripname_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=no + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=yes + fi + ;; + pass_all) + valid_a_lib=yes + ;; + esac + if test "$valid_a_lib" != yes; then + $ECHO + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because the file extensions .$libext of this argument makes me believe" + $ECHO "*** that it is just a static archive that I should not use here." + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + ;; + esac + continue + ;; + prog) + if test "$pass" != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + elif test "$linkmode" = prog; then + if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + + if test "$found" = yes || test -f "$lib"; then : + else + func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" + fi + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "\`$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir="$func_dirname_result" + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test "$pass" = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + elif test "$linkmode" != prog && test "$linkmode" != lib; then + func_fatal_error "\`$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for \`$lib'" + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + func_fatal_error "cannot -dlopen a convenience library: \`$lib'" + fi + if test -z "$dlname" || + test "$dlopen_support" != yes || + test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of \`$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir="$ladir" + fi + ;; + esac + func_basename "$lib" + laname="$func_basename_result" + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library \`$lib' was moved." + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir="$ladir" + absdir="$abs_ladir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir" && test "$linkmode" = prog; then + func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test "$linkmode" = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test "$linkmode" = prog && test "$pass" != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + newlib_search_path="$newlib_search_path $func_stripname_result" + ;; + esac + # Need to link against all dependency_libs? + if test "$linkalldeplibs" = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test "$linkmode,$pass" = "prog,link"; then + if test -n "$library_names" && + { { test "$prefer_static_libs" = no || + test "$prefer_static_libs,$installed" = "built,yes"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath:" in + *"$absdir:"*) ;; + *) temp_rpath="$temp_rpath$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test "$use_static_libs" = built && test "$installed" = yes; then + use_static_libs=no + fi + if test -n "$library_names" && + { test "$use_static_libs" = no || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc*) + # No point in relinking DLLs because paths are not encoded + notinst_deplibs="$notinst_deplibs $lib" + need_relink=no + ;; + *) + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule="" + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule="$dlpremoduletest" + break + fi + done + if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then + $ECHO + if test "$linkmode" = prog; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test "$linkmode" = lib && + test "$hardcode_into_libs" = yes; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname="$1" + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc*) + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + func_basename "$soroot" + soname="$func_basename_result" + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from \`$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for \`$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test "$linkmode" = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + case $host in + *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; + *-*-sysv4*uw2*) add_dir="-L$dir" ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we can not + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null ; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library" ; then + $ECHO + $ECHO "*** And there doesn't seem to be a static archive available" + $ECHO "*** The link will probably fail, sorry" + else + add="$dir/$old_library" + fi + elif test -n "$old_library"; then + add="$dir/$old_library" + fi + fi + esac + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test "$linkmode" = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && + test "$hardcode_minus_L" != yes && + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes && + test "$hardcode_direct_absolute" = no; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + elif test "$hardcode_automatic" = yes; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib" ; then + add="$inst_prefix_dir$libdir/$linklib" + else + add="$libdir/$linklib" + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + add_dir="$add_dir -L$inst_prefix_dir$libdir" + ;; + esac + fi + add="-l$name" + fi + + if test "$linkmode" = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test "$linkmode" = prog; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + $ECHO + $ECHO "*** Warning: This system can not link to static lib archive $lib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + $ECHO "*** But as you try to build a module library, libtool will still create " + $ECHO "*** a static module, that should work as long as the dlopening application" + $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test "$linkmode" = lib; then + if test -n "$dependency_libs" && + { test "$hardcode_into_libs" != yes || + test "$build_old_libs" = yes || + test "$link_static" = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if $opt_duplicate_deps ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + func_dirname "$deplib" "" "." + dir="$func_dirname_result" + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of \`$dir'" + absdir="$dir" + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names" ; then + for tmp in $deplibrary_names ; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl" ; then + depdepl="$absdir/$objdir/$depdepl" + darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" + linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" + path= + fi + fi + ;; + *) + path="-L$absdir/$objdir" + ;; + esac + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "\`$deplib' seems to be moved" + + path="-L$absdir" + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test "$pass" = link; then + if test "$linkmode" = "prog"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs="$newdependency_libs" + if test "$pass" = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test "$pass" != dlopen; then + if test "$pass" != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs ; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i="" + ;; + esac + if test -n "$i" ; then + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + fi + if test "$linkmode" = prog || test "$linkmode" = lib; then + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "\`-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "\`-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test "$module" = no && \ + func_fatal_help "libtool library \`$output' must begin with \`lib'" + + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" + else + $ECHO + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + test "$dlself" != no && \ + func_warning "\`-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test "$#" -gt 1 && \ + func_warning "ignoring multiple \`-rpath's for a libtool library" + + install_libdir="$1" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + # Some compilers have problems with a `.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "\`-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "\`-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + shift + IFS="$save_ifs" + + test -n "$7" && \ + func_fatal_help "too many parameters to \`-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major="$1" + number_minor="$2" + number_revision="$3" + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # which has an extra 1 added just for fun + # + case $version_type in + darwin|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age="$number_minor" + revision="$number_minor" + lt_irix_increment=no + ;; + esac + ;; + no) + current="$1" + revision="$2" + age="$3" + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT \`$current' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION \`$revision' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE \`$age' must be a nonnegative integer" + func_fatal_error "\`$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE \`$age' is greater than the current interface number \`$current'" + func_fatal_error "\`$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current" + ;; + + irix | nonstopux) + if test "X$lt_irix_increment" = "Xno"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test "$loop" -ne 0; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + func_arith $current - $age + major=.$func_arith_result + versuffix="$major.$age.$revision" + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test "$loop" -ne 0; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + qnx) + major=".$current" + versuffix=".$current" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + func_arith $current - $age + major=$func_arith_result + versuffix="-$major" + ;; + + *) + func_fatal_configuration "unknown library version type \`$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + func_warning "undefined symbols not allowed in $host shared libraries" + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + fi + + func_generate_dlsyms "$libname" "$libname" "yes" + libobjs="$libobjs $symfileobj" + test "X$libobjs" = "X " && libobjs= + + if test "$mode" != relink; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + if test "X$precious_files_regex" != "X"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + removelist="$removelist $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` + # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` + # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + ;; + esac + fi + if test -n "$a_deplib" ; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check above in file_magic test + if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + fi + if test -n "$a_deplib" ; then + droppeddeps=yes + $ECHO + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + $ECHO "*** I have the capability to make that library automatically link in when" + $ECHO "*** you link to this library. But I can only do this if you have a" + $ECHO "*** shared version of the library, which you do not appear to have" + $ECHO "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ + -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + for i in $predeps $postdeps ; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` + done + fi + if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | + $GREP . >/dev/null; then + $ECHO + if test "X$deplibs_check_method" = "Xnone"; then + $ECHO "*** Warning: inter-library dependencies are not supported in this platform." + else + $ECHO "*** Warning: inter-library dependencies are not known to be supported." + fi + $ECHO "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + $ECHO + $ECHO "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + $ECHO "*** a static module, that should work as long as the dlopening" + $ECHO "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + $ECHO + $ECHO "*** However, this would only work if libtool was able to extract symbol" + $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" + $ECHO "*** not find such a program. So, this module is probably useless." + $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + $ECHO "*** The inter-library dependencies that have been dropped here will be" + $ECHO "*** automatically added whenever a program is linked with this library" + $ECHO "*** or is declared to -dlopen it." + + if test "$allow_undefined" = no; then + $ECHO + $ECHO "*** Since this library must not contain undefined symbols," + $ECHO "*** because either the platform does not support them or" + $ECHO "*** it was explicitly requested with -no-undefined," + $ECHO "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + deplibs="$new_libs" + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname="$1" + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib="$output_objdir/$realname" + linknames= + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols="$output_objdir/$libname.uexp" + delfiles="$delfiles $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + if test "x`$SED 1q $export_symbols`" != xEXPORTS; then + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols="$export_symbols" + export_symbols= + always_export_symbols=yes + fi + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + func_len " $cmd" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test "$compiler_needs_object" = yes && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test "X$skipped_export" != "X:" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + output_la=`$ECHO "X$output" | $Xsed -e "$basename"` + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then + output=${output_objdir}/${output_la}.lnkscript + func_verbose "creating GNU ld script: $output" + $ECHO 'INPUT (' > $output + for obj in $save_libobjs + do + $ECHO "$obj" >> $output + done + $ECHO ')' >> $output + delfiles="$delfiles $output" + elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then + output=${output_objdir}/${output_la}.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test "$compiler_needs_object" = yes; then + firstobj="$1 " + shift + fi + for obj + do + $ECHO "$obj" >> $output + done + delfiles="$delfiles $output" + output=$firstobj\"$file_list_spec$output\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-${k}.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test "X$objlist" = X || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test "$k" -eq 1 ; then + # The first file doesn't have a previous command to add. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-${k}.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-${k}.$objext + objlist=$obj + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + if test -n "$last_robj"; then + eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" + fi + delfiles="$delfiles $output" + + else + output= + fi + + if ${skipped_export-false}; then + func_verbose "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + fi + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs="$IFS"; IFS='~' + for cmd in $concat_cmds; do + IFS="$save_ifs" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + if ${skipped_export-false}; then + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols="$export_symbols" + test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" + $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + fi + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test "$module" = yes && test -n "$module_cmds" ; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + libobjs="$libobjs $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + eval cmd=\"$cmd\" + $opt_silent || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + func_warning "\`-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "\`-l' and \`-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "\`-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "\`-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "\`-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object \`$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec and hope we can get by with + # turning comma into space.. + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` + else + gentop="$output_objdir/${obj}x" + generated="$generated $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "\`-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "\`-release' is ignored for programs" + + test "$preload" = yes \ + && test "$dlopen_support" = unknown \ + && test "$dlopen_self" = unknown \ + && test "$dlopen_self_static" = unknown && \ + func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test "$tagname" = CXX ; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + new_libs="$new_libs -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$new_libs $deplib" ;; + esac + ;; + *) new_libs="$new_libs $deplib" ;; + esac + done + compile_deplibs="$new_libs" + + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) dllsearchpath="$dllsearchpath:$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" "no" + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=yes + case $host in + *cygwin* | *mingw* ) + if test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + *cegcc) + # Disable wrappers for cegcc, we are cross compiling anyway. + wrappers_required=no + ;; + *) + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + wrappers_required=no + fi + ;; + esac + if test "$wrappers_required" = no; then + # Replace the output file specification. + compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.${objext}"; then + func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' + fi + + exit $exit_status + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + exit $EXIT_SUCCESS + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "\`$output' will be relinked during installation" + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $ECHO for shipping. + if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then + case $progpath in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; + *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; + esac + qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource="$output_path/$objdir/lt-$output_name.c" + cwrapper="$output_path/$output_name.exe" + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host" ; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save $symfileobj" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$old_deplibs $non_pic_objects" + if test "$preload" = yes && test -f "$symfileobj"; then + oldobjs="$oldobjs $symfileobj" + fi + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $addlibs + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + + func_extract_archives $gentop $dlprefiles + oldobjs="$oldobjs $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $ECHO "copying selected object files to avoid basename conflicts..." + gentop="$output_objdir/${outputname}x" + generated="$generated $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase="$func_basename_result" + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + oldobjs="$oldobjs $gentop/$newobj" + ;; + *) oldobjs="$oldobjs $obj" ;; + esac + done + fi + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj" ; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test "X$oldobjs" = "X" ; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` + if test "$hardcode_automatic" = yes ; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "\`$deplib' is not a valid libtool archive" + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlfiles="$newdlfiles $libdir/$name" + ;; + *) newdlfiles="$newdlfiles $lib" ;; + esac + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name="$func_basename_result" + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "\`$lib' is not a valid libtool archive" + newdlprefiles="$newdlprefiles $libdir/$name" + ;; + esac + done + dlprefiles="$newdlprefiles" + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlfiles="$newdlfiles $abs" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; + *) abs=`pwd`"/$lib" ;; + esac + newdlprefiles="$newdlprefiles $abs" + done + dlprefiles="$newdlprefiles" + fi + $RM $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that can not go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test "$need_relink" = yes; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +{ test "$mode" = link || test "$mode" = relink; } && + func_mode_link ${1+"$@"} + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $opt_debug + RM="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) RM="$RM $arg"; rmforce=yes ;; + -*) RM="$RM $arg" ;; + *) files="$files $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + func_dirname "$file" "" "." + dir="$func_dirname_result" + if test "X$dir" = X.; then + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + func_basename "$file" + name="$func_basename_result" + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + + case "$mode" in + clean) + case " $library_names " in + # " " in the beginning catches empty $dlname + *" $dlname "*) ;; + *) rmfiles="$rmfiles $objdir/$dlname" ;; + esac + test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && + test "$pic_object" != none; then + rmfiles="$rmfiles $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && + test "$non_pic_object" != none; then + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +{ test "$mode" = uninstall || test "$mode" = clean; } && + func_mode_uninstall ${1+"$@"} + +test -z "$mode" && { + help="$generic_help" + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode \`$mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# in which we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: +# vi:sw=2 + diff --git a/build-aux/mdate-sh b/build-aux/mdate-sh new file mode 100755 index 00000000..83d27009 --- /dev/null +++ b/build-aux/mdate-sh @@ -0,0 +1,205 @@ +#!/bin/sh +# Get modification time of a file or directory and pretty-print it. + +scriptversion=2007-03-30.02 + +# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005, 2007 Free Software +# Foundation, Inc. +# written by Ulrich Drepper , June 1995 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No file. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: mdate-sh [--help] [--version] FILE + +Pretty-print the modification time of FILE. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "mdate-sh $scriptversion" + exit $? + ;; +esac + +# Prevent date giving response in another language. +LANG=C +export LANG +LC_ALL=C +export LC_ALL +LC_TIME=C +export LC_TIME + +# GNU ls changes its time format in response to the TIME_STYLE +# variable. Since we cannot assume `unset' works, revert this +# variable to its documented default. +if test "${TIME_STYLE+set}" = set; then + TIME_STYLE=posix-long-iso + export TIME_STYLE +fi + +save_arg1=$1 + +# Find out how to get the extended ls output of a file or directory. +if ls -L /dev/null 1>/dev/null 2>&1; then + ls_command='ls -L -l -d' +else + ls_command='ls -l -d' +fi +# Avoid user/group names that might have spaces, when possible. +if ls -n /dev/null 1>/dev/null 2>&1; then + ls_command="$ls_command -n" +fi + +# A `ls -l' line looks as follows on OS/2. +# drwxrwx--- 0 Aug 11 2001 foo +# This differs from Unix, which adds ownership information. +# drwxrwx--- 2 root root 4096 Aug 11 2001 foo +# +# To find the date, we split the line on spaces and iterate on words +# until we find a month. This cannot work with files whose owner is a +# user named `Jan', or `Feb', etc. However, it's unlikely that `/' +# will be owned by a user whose name is a month. So we first look at +# the extended ls output of the root directory to decide how many +# words should be skipped to get the date. + +# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. +set x`$ls_command /` + +# Find which argument is the month. +month= +command= +until test $month +do + shift + # Add another shift to the command. + command="$command shift;" + case $1 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; + esac +done + +# Get the extended ls output of the file or directory. +set dummy x`eval "$ls_command \"\$save_arg1\""` + +# Remove all preceding arguments +eval $command + +# Because of the dummy argument above, month is in $2. +# +# On a POSIX system, we should have +# +# $# = 5 +# $1 = file size +# $2 = month +# $3 = day +# $4 = year or time +# $5 = filename +# +# On Darwin 7.7.0 and 7.6.0, we have +# +# $# = 4 +# $1 = day +# $2 = month +# $3 = year or time +# $4 = filename + +# Get the month. +case $2 in + Jan) month=January; nummonth=1;; + Feb) month=February; nummonth=2;; + Mar) month=March; nummonth=3;; + Apr) month=April; nummonth=4;; + May) month=May; nummonth=5;; + Jun) month=June; nummonth=6;; + Jul) month=July; nummonth=7;; + Aug) month=August; nummonth=8;; + Sep) month=September; nummonth=9;; + Oct) month=October; nummonth=10;; + Nov) month=November; nummonth=11;; + Dec) month=December; nummonth=12;; +esac + +case $3 in + ???*) day=$1;; + *) day=$3; shift;; +esac + +# Here we have to deal with the problem that the ls output gives either +# the time of day or the year. +case $3 in + *:*) set `date`; eval year=\$$# + case $2 in + Jan) nummonthtod=1;; + Feb) nummonthtod=2;; + Mar) nummonthtod=3;; + Apr) nummonthtod=4;; + May) nummonthtod=5;; + Jun) nummonthtod=6;; + Jul) nummonthtod=7;; + Aug) nummonthtod=8;; + Sep) nummonthtod=9;; + Oct) nummonthtod=10;; + Nov) nummonthtod=11;; + Dec) nummonthtod=12;; + esac + # For the first six month of the year the time notation can also + # be used for files modified in the last year. + if (expr $nummonth \> $nummonthtod) > /dev/null; + then + year=`expr $year - 1` + fi;; + *) year=$3;; +esac + +# The result. +echo $day $month $year + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/build-aux/missing b/build-aux/missing new file mode 100755 index 00000000..1c8ff704 --- /dev/null +++ b/build-aux/missing @@ -0,0 +1,367 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2006-05-10.23 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: +sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' +sed_minuso='s/.* -o \([^ ]*\).*/\1/p' + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case $1 in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + autom4te touch the output file, or create a stub one + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case $1 in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case $1 in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case $f in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if test ! -f y.tab.h; then + echo >y.tab.h + fi + if test ! -f y.tab.c; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if test $# -ne 1; then + eval LASTARG="\${$#}" + case $LASTARG in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if test -f "$SRCFILE"; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if test ! -f lex.yy.c; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n "$sed_output"` + test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n ' + /^@setfilename/{ + s/.* \([^ ]*\) *$/\1/ + p + q + }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case $firstarg in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case $firstarg in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/build-aux/run-test b/build-aux/run-test new file mode 100755 index 00000000..cfa77518 --- /dev/null +++ b/build-aux/run-test @@ -0,0 +1,139 @@ +#!/bin/sh +# +# Copyright (C) 2009 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This program is a test driver that supports running a test under valgrind. +# Usage: run-test CHECKER PROGRAM [ARGUMENT...] + +progname=$0 + +# func_usage +# outputs to stdout the --help usage message. +func_usage () +{ + echo "\ +Usage: run-test [OPTION...] CHECKER PROGRAM [ARGUMENT...] + +Runs PROGRAM under the control of CHECKER. + +CHECKER may be empty or a valgrind command with some options, such as +'valgrind --tool=memcheck --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes'. + +When CHECKER is not empty, it is recommended that the package has been +configured with + --disable-shared so that tests are real executables and not libtool + wrapper scripts, and + CFLAGS=\"-g\" so that valgrind shows line numbers. + +Report bugs to Bruno Haible." +} + +# func_version +# outputs to stdout the --version message. +func_version () +{ + echo "\ +run-test (GNU libunistring) +Copyright (C) 2009 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. + +Written by" "Bruno Haible" +} + +# func_fatal_error message +# outputs to stderr a fatal error message, and terminates the program. +# Input: +# - progname name of this program +func_fatal_error () +{ + echo "$progname: *** $1" 1>&2 + echo "$progname: *** Stop." 1>&2 + func_exit 1 +} + +# Command-line option processing. +# Removes the OPTIONS from the arguments. Sets the variables: +# - checker wrapper program for executables +{ + while test $# -gt 0; do + case "$1" in + --help | --hel | --he | --h ) + func_usage + exit $? ;; + --version | --versio | --versi | --vers | --ver | --ve | --v ) + func_version + exit $? ;; + -- ) + # Stop option processing + shift + break ;; + -* ) + echo "run-test: unknown option $1" 1>&2 + echo "Try 'run-test --help' for more information." 1>&2 + exit 1 ;; + * ) + break ;; + esac + done + + if test $# -lt 2; then + echo "run-test: too few arguments" 1>&2 + echo "Try 'run-test --help' for more information." 1>&2 + exit 1 + fi + + checker="$1" + shift +} + +if test -z "$checker"; then + # No checker. Run the test directly. + exec "$@" +else + # Using valgrind. We want to apply valgrind only to executables, not to + # shell script, because + # 1. we don't want to look for memory leaks in bash, + # 2. on a bi-arch system, we would get an error message such as + # "valgrind: wrong executable class (eg. 32-bit instead of 64-bit)". + case "$1" in + *.sh) + # A shell script. Ignore the checker. + exec "$@" + ;; + *) + # The 'file' command is not portable enough. So, look + # at the first two bytes of the file. Are they '#!'? + if { if od -A x < /dev/null >/dev/null 2>/dev/null; then + # Use POSIX od. + firstbytes=`od -A n -t o1 -N 2 < "$1" | tr -d ' '` + else + # Use BSD hexdump. + firstbytes=`dd if="$1" bs=1 count=2 2>/dev/null | hexdump -e '1/1 "%03o"'` + fi + test "$firstbytes" = "043041" + }; then + # A shell script. Ignore the checker. + exec "$@" + else + # An executable. Use the checker. + exec $checker "$@" + fi + ;; + esac +fi diff --git a/build-aux/texi2html b/build-aux/texi2html new file mode 100755 index 00000000..a0343665 --- /dev/null +++ b/build-aux/texi2html @@ -0,0 +1,19554 @@ +#! /usr/bin/perl -- # perl +'di '; +'ig 00 '; +#+############################################################################## +# +# texi2html: Program to transform Texinfo documents to HTML +# +# Copyright (C) 1999-2005 Patrice Dumas , +# Derek Price , +# Adrian Aichner , +# & others. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA +# +#-############################################################################## +# The man page for this program is included at the end of this file and can be +# viewed using the command 'nroff -man texi2html'. + +# for POSIX::setlocale and File::Spec +require 5.00405; +# Perl pragma to restrict unsafe constructs +use strict; +# used in case of tests, to revert to "C" locale. +use POSIX qw(setlocale LC_ALL LC_CTYPE); +# used to obtain the name of the current working directory +use Cwd; +# used to find a relative path back to the current working directory +use File::Spec; + +# +# According to +# larry.jones@sdrc.com (Larry Jones) +# this pragma is not present in perl5.004_02: +# +# Perl pragma to control optional warnings +# use warnings; + +#++########################################################################## +# +# NOTE FOR DEBUGGING THIS SCRIPT: +# You can run 'perl texi2html.pl' directly, provided you have +# the environment variable T2H_HOME set to the directory containing +# the texi2html.init, T2h_i18n.pm, translations.pl, l2h.init, +# T2h_l2h.pm files +# +#--########################################################################## + +# CVS version: +# $Id: texi2html.pl,v 1.182 2007/05/07 22:56:02 pertusus Exp $ + +# Homepage: +my $T2H_HOMEPAGE = "http://www.nongnu.org/texi2html/"; + +# Authors (appears in comments): +my $T2H_AUTHORS = < (original author) + Karl Berry + Olaf Bachmann + and many others. +Maintained by: Many creative people. +Send bugs and suggestions to +EOT + +# Version: set in configure.in +my $THISVERSION = '1.78a'; +my $THISPROG = "texi2html $THISVERSION"; # program name and version + +#+++######################################################################## +# # +# Paths and file names # +# # +#---######################################################################## + +# set by configure, prefix for the sysconfdir and so on +my $prefix = '/usr/local'; +my $sysconfdir; +my $pkgdatadir; +my $datadir; + +# We need to eval as $prefix has to be expanded. However when we haven't +# run configure @sysconfdir will be expanded as an array, thus we verify +# whether configure was run or not +if ('${prefix}/etc' ne '@' . 'sysconfdir@') +{ + $sysconfdir = eval '"${prefix}/etc"'; +} +else +{ + $sysconfdir = "/usr/local/etc"; +} + +if ('${prefix}/share' ne '@' . 'datadir@') +{ + $pkgdatadir = eval '"${prefix}/share/texi2html"'; + $datadir = eval '"${prefix}/share"'; +} +else +{ + $pkgdatadir = "/usr/local/share/texi2html"; + $datadir = "/usr/local/share"; +} + +my $i18n_dir = 'i18n'; # name of the directory containing the per language files +my $conf_file_name = 'Config' ; +my $texinfo_htmlxref = 'htmlxref.cnf'; + +# directories for texi2html init files +my @texi2html_config_dirs = ('./'); +push @texi2html_config_dirs, "$ENV{'HOME'}/.texi2html/" if (defined($ENV{'HOME'})); +push @texi2html_config_dirs, "$sysconfdir/texi2html/" if (defined($sysconfdir)); +push @texi2html_config_dirs, "$pkgdatadir" if (defined($pkgdatadir)); + +# directories for texinfo configuration files +my @texinfo_config_dirs = ('./.texinfo/'); +push @texinfo_config_dirs, "$ENV{'HOME'}/.texinfo/" if (defined($ENV{'HOME'})); +push @texinfo_config_dirs, "$sysconfdir/texinfo/" if (defined($sysconfdir)); +push @texinfo_config_dirs, "$datadir/texinfo/" if (defined($datadir)); + + +#+++######################################################################## +# # +# Constants # +# # +#---######################################################################## + +my $DEBUG_MENU = 1; +my $DEBUG_INDEX = 2; +my $DEBUG_TEXI = 4; +my $DEBUG_MACROS = 8; +my $DEBUG_FORMATS = 16; +my $DEBUG_ELEMENTS = 32; +my $DEBUG_USER = 64; +my $DEBUG_L2H = 128; + +my $ERROR = "***"; # prefix for errors +my $WARN = "**"; # prefix for warnings + +my $VARRE = '[\w\-]+'; # RE for a variable name +my $NODERE = '[^:]+'; # RE for node names + +my $MAX_LEVEL = 4; +my $MIN_LEVEL = 1; + +#+++########################################################################### +# # +# Initialization # +# Some declarations, some functions that are GPL and therefore cannot be in # +# texi2html.init, some functions that are not to be customized. # +# Pasted content of File $(srcdir)/texi2html.init: Default initializations # +# # +#---########################################################################### + +{ +package Texi2HTML::Config; + + +sub load($) +{ + my $file = shift; + eval { require($file) ;}; + if ($@ ne '') + { + print STDERR "error loading $file: $@\n"; + return 0; + } + return 1; +} + +# customization options variables + +use vars qw( +$DEBUG +$PREFIX +$VERBOSE +$SUBDIR +$IDX_SUMMARY +$SPLIT +$SHORT_REF +@EXPAND +$EXPAND +$TOP +$DOCTYPE +$FRAMESET_DOCTYPE +$CHECK +$TEST +$DUMP_TEXI +$MACRO_EXPAND +$USE_GLOSSARY +$INVISIBLE_MARK +$USE_ISO +$TOP_FILE +$TOC_FILE +$FRAMES +$SHOW_MENU +$NUMBER_SECTIONS +$USE_NODES +$USE_UNICODE +$USE_UNIDECODE +$TRANSLITERATE_NODE +$NODE_FILES +$NODE_NAME_IN_MENU +$AVOID_MENU_REDUNDANCY +$SECTION_NAVIGATION +$SHORTEXTN +$EXTENSION +$OUT +$NOVALIDATE +$DEF_TABLE +$LANG +$DO_CONTENTS +$DO_SCONTENTS +$SEPARATED_FOOTNOTES +$TOC_LINKS +$L2H +$L2H_L2H +$L2H_SKIP +$L2H_TMP +$L2H_CLEAN +$L2H_FILE +$L2H_HTML_VERSION +$EXTERNAL_DIR +@INCLUDE_DIRS +@PREPEND_DIRS +@CONF_DIRS +$IGNORE_PREAMBLE_TEXT +@CSS_FILES +$INLINE_CONTENTS +); + +# customization variables +# ENCODING is deprecated +use vars qw( +$ENCODING + +$ENCODING_NAME +$DOCUMENT_ENCODING +$OUT_ENCODING +$IN_ENCODING +$DEFAULT_ENCODING +$MENU_PRE_STYLE +$CENTER_IMAGE +$EXAMPLE_INDENT_CELL +$SMALL_EXAMPLE_INDENT_CELL +$SMALL_FONT_SIZE +$SMALL_RULE +$DEFAULT_RULE +$MIDDLE_RULE +$BIG_RULE +$TOP_HEADING +$INDEX_CHAPTER +$SPLIT_INDEX +$HREF_DIR_INSTEAD_FILE +$USE_MENU_DIRECTIONS +$AFTER_BODY_OPEN +$PRE_BODY_CLOSE +$EXTRA_HEAD +$VERTICAL_HEAD_NAVIGATION +$WORDS_IN_PAGE +$ICONS +$UNNUMBERED_SYMBOL_IN_MENU +$SIMPLE_MENU +$MENU_SYMBOL +$OPEN_QUOTE_SYMBOL +$CLOSE_QUOTE_SYMBOL +$TOC_LIST_STYLE +$TOC_LIST_ATTRIBUTE +$TOP_NODE_FILE +$TOP_NODE_UP +$NODE_FILE_EXTENSION +$BEFORE_OVERVIEW +$AFTER_OVERVIEW +$BEFORE_TOC_LINES +$AFTER_TOC_LINES +$NEW_CROSSREF_STYLE +$USER +$USE_NUMERIC_ENTITY +$DATE +%ACTIVE_ICONS +%NAVIGATION_TEXT +%PASSIVE_ICONS +%BUTTONS_NAME +%BUTTONS_GOTO +%BUTTONS_EXAMPLE +@CHAPTER_BUTTONS +@MISC_BUTTONS +@SECTION_BUTTONS +@SECTION_FOOTER_BUTTONS +@NODE_FOOTER_BUTTONS +@IMAGE_EXTENSIONS +); + +# customization variables which may be guessed in the script +#our $ADDRESS; +use vars qw( +$BODYTEXT +$CSS_LINES +$DOCUMENT_DESCRIPTION +$EXTERNAL_CROSSREF_SPLIT +); + +# I18n +use vars qw( +$I +$LANGUAGES +); + +# customizable subroutines references +use vars qw( +$print_section +$one_section +$end_section +$print_Top_header +$print_Top_footer +$print_Top +$print_Toc +$print_Overview +$print_Footnotes +$print_About +$print_misc_header +$print_misc_footer +$print_misc +$print_section_header +$print_section_footer +$print_chapter_header +$print_chapter_footer +$print_page_head +$print_page_foot +$print_head_navigation +$print_foot_navigation +$button_icon_img +$print_navigation +$about_body +$print_frame +$print_toc_frame +$toc_body +$titlepage +$css_lines +$print_redirection_page +$init_out +$finish_out +$node_file_name +$element_file_name +$inline_contents + +$protect_text +$anchor +$def_item +$def +$menu +$menu_link +$menu_description +$menu_comment +$simple_menu_link +$ref_beginning +$info_ref +$book_ref +$external_href +$external_ref +$internal_ref +$table_item +$table_line +$row +$cell +$list_item +$comment +$def_line +$def_line_no_texi +$raw +$raw_no_texi +$heading +$paragraph +$preformatted +$foot_line_and_ref +$foot_section +$address +$image +$image_files +$index_entry_label +$index_entry +$index_letter +$print_index +$index_summary +$summary_letter +$complex_format +$cartouche +$sp +$definition_category +$table_list +$copying_comment +$index_summary_file_entry +$index_summary_file_end +$index_summary_file_begin +$style +$format +$normal_text +$empty_line +$unknown +$unknown_style +$float +$caption_shortcaption +$listoffloats +$listoffloats_entry +$listoffloats_caption +$listoffloats_float_style +$listoffloats_style +$acronym_like +$quotation +$quotation_prepend_text +$paragraph_style_command +$heading_texi +$index_element_heading_texi + +$PRE_ABOUT +$AFTER_ABOUT +); + +# hash which entries might be redefined by the user +use vars qw( +$complex_format_map +%accent_map +%def_map +%format_map +%simple_map +%simple_map_pre +%simple_map_texi +%style_map +%style_map_pre +%style_map_texi +%simple_format_simple_map_texi +%simple_format_style_map_texi +%simple_format_texi_map +%command_type +%paragraph_style +%things_map +%pre_map +%texi_map +%unicode_map +%unicode_diacritical +%transliterate_map +%transliterate_accent_map +%no_transliterate_map +%ascii_character_map +%ascii_simple_map +%ascii_things_map +%numeric_entity_map +%perl_charset_to_html +%iso_symbols +%misc_command +%css_map +%format_in_paragraph +%special_list_commands +%accent_letters +%unicode_accents +%special_accents +@command_handler_init +@command_handler_process +@command_handler_finish +%command_handler +); + +# needed in this namespace for translations +$I = \&Texi2HTML::I18n::get_string; + +# +# Function refs covered by the GPL as part of the texi2html.pl original +# code. As such they cannot appear in texi2html.init which is public +# domain (at least the things coded by me, and, if I'm not wrong also the +# things coded by Olaf -- Pat). +# + +$toc_body = \&T2H_GPL_toc_body; +$style = \&T2H_GPL_style; +$format = \&T2H_GPL_format; + +sub T2H_GPL_toc_body($) +{ + my $elements_list = shift; + return unless ($DO_CONTENTS or $DO_SCONTENTS or $FRAMES); + my $current_level = 0; + my $ul_style = $NUMBER_SECTIONS ? $TOC_LIST_ATTRIBUTE : ''; + foreach my $element (@$elements_list) + { + next if ($element->{'top'} or $element->{'index_page'}); + my $ind = ' ' x $current_level; + my $level = $element->{'toc_level'}; + print STDERR "Bug no toc_level for ($element) $element->{'texi'}\n" if (!defined ($level)); + if ($level > $current_level) + { + while ($level > $current_level) + { + $current_level++; + my $ln = "\n$ind\n"; + $ind = ' ' x $current_level; + push(@{$Texi2HTML::TOC_LINES}, $ln); + } + } + elsif ($level < $current_level) + { + while ($level < $current_level) + { + $current_level--; + $ind = ' ' x $current_level; + my $line = "\n$ind"; + $line .= "" if ($level == $current_level); + push(@{$Texi2HTML::TOC_LINES}, "$line\n"); + + } + } + else + { + push(@{$Texi2HTML::TOC_LINES}, "\n"); + } + my $file = ''; + $file = $element->{'file'} if ($SPLIT); + my $text = $element->{'text'}; + #$text = $element->{'name'} unless ($NUMBER_SECTIONS); + my $entry = "
  • " . &$anchor ($element->{'tocid'}, "$file#$element->{'id'}",$text); + push (@{$Texi2HTML::TOC_LINES}, $ind . $entry); + push(@{$Texi2HTML::OVERVIEW}, $entry. "
  • \n") if ($level == 1); + } + while (0 < $current_level) + { + $current_level--; + my $ind = ' ' x $current_level; + push(@{$Texi2HTML::TOC_LINES}, "\n$ind\n"); + } + @{$Texi2HTML::TOC_LINES} = () unless ($DO_CONTENTS); + if (@{$Texi2HTML::TOC_LINES}) + { + unshift @{$Texi2HTML::TOC_LINES}, $BEFORE_TOC_LINES; + push @{$Texi2HTML::TOC_LINES}, $AFTER_TOC_LINES; + } + @{$Texi2HTML::OVERVIEW} = () unless ($DO_SCONTENTS or $FRAMES); + if (@{$Texi2HTML::OVERVIEW}) + { + unshift @{$Texi2HTML::OVERVIEW}, "\n"; + push @{$Texi2HTML::OVERVIEW}, "\n"; + unshift @{$Texi2HTML::OVERVIEW}, $BEFORE_OVERVIEW; + push @{$Texi2HTML::OVERVIEW}, $AFTER_OVERVIEW; + } +} + +sub T2H_GPL_style($$$$$$$$$) +{ # known style + my $style = shift; + my $command = shift; + my $text = shift; + my $args = shift; + my $no_close = shift; + my $no_open = shift; + my $line_nr = shift; + my $state = shift; + my $style_stack = shift; + + my $do_quotes = 0; + my $use_attribute = 0; + my $use_begin_end = 0; + if (ref($style) eq 'HASH') + { + #print STDERR "GPL_STYLE $command\n"; + #print STDERR " @$args\n"; + $do_quotes = $style->{'quote'}; + if ((@{$style->{'args'}} == 1) and defined($style->{'attribute'})) + { + $style = $style->{'attribute'}; + $use_attribute = 1; + $text = $args->[0]; + } + elsif (defined($style->{'function'})) + { + $text = &{$style->{'function'}}($command, $args, $style_stack, $state, $line_nr); + } + } + else + { + if ($style =~ s/^\"//) + { # add quotes + $do_quotes = 1; + } + if ($style =~ s/^\&//) + { # custom + $style = 'Texi2HTML::Config::' . $style; + eval "\$text = &$style(\$text, \$command, \$style_stack)"; + } + elsif ($style ne '') + { + $use_attribute = 1; + } + else + { # no style + } + } + if ($use_attribute) + { # good style + my $attribute_text = ''; + if ($style =~ /^(\w+)(\s+.*)/) + { + $style = $1; + $attribute_text = $2; + } +# $text = "<${style}$attribute_text>$text" ; + $text = "<${style}$attribute_text>" . "$text" if (!$no_open); + $text .= "" if (!$no_close); + if ($do_quotes) + { + $text = $OPEN_QUOTE_SYMBOL . "$text" if (!$no_open); + $text .= $CLOSE_QUOTE_SYMBOL if (!$no_close); + } + } + if (ref($style) eq 'HASH') + { + if (defined($style->{'begin'}) and !$no_open) + { + $text = $style->{'begin'} . $text; + } + if (defined($style->{'end'}) and !$no_close) + { + $text = $text . $style->{'end'}; + } + } + if ($do_quotes and !$use_attribute) + { + $text = $OPEN_QUOTE_SYMBOL . "$text" if (!$no_open); + $text .= $CLOSE_QUOTE_SYMBOL if (!$no_close); + } + return $text; +} + +sub T2H_GPL_format($$$) +{ + my $tag = shift; + my $element = shift; + my $text = shift; + return '' if (!defined($element) or ($text !~ /\S/)); + return $text if ($element eq ''); + my $attribute_text = ''; + if ($element =~ /^(\w+)(\s+.*)/) + { + $element = $1; + $attribute_text = $2; + } + return "<${element}$attribute_text>\n" . $text. "\n"; +} + +# leave this within comments, and keep the require statement +# This way, you can directly run texi2html.pl, if +# $ENV{T2H_HOME}/texi2html.init exists. + +# @INIT@ +# -*-perl-*- +###################################################################### +# File: texi2html.init +# +# Default values for command-line arguments and for various customizable +# procedures are set in this file. +# +# A copy of this file is pasted into the beginning of texi2html by +# running './configure'. +# +# Copy this file, rename it and make changes to it, if you like. +# Afterwards, load the file with command-line +# option -init-file +# +# $Id: texi2html.init,v 1.116 2007/05/07 22:56:02 pertusus Exp $ + +###################################################################### +# The following variables can also be set by command-line options +# +# +# The default values are set in this file, texi2html.init and the content +# of this file is included at the beginning of the texi2html script file. +# Those values may be overrided by values set in $sysconfdir/texi2htmlrc +# and then by values set in $HOME/texi2htmlrc. +# +# command line switches may override these values, and values set in files +# specified by -init-file are also taken into account. +# values set in these files overwrite values set by the command-line +# options appearing before -init-file and might still be overwritten by +# command-line arguments following the -init-file option. + +# -debug +# The integer value specifies what kind of debugging output is generated. +$DEBUG = 0; + +# -doctype +# The value is the 'SystemLiteral' which identifies the canonical DTD +# for the document. +# Definition: The SystemLiteral is called the entity's system +# identifier. It is a URI, which may be used to retrieve the entity. +# See http://www.xml.com/axml/target.html#NT-ExternalID +$DOCTYPE = ''; + +# -frameset-doctype +# When frames are used, this SystemLiteral identifies the DTD used for +# the file containing the frame description. +$FRAMESET_DOCTYPE = ''; + +# -test +# If this value is true, some variables which should be dynamically generated +# (the date, the user running texi2html, the version of texi2html) are set to +# fix and given values. This is usefull in case the resulting manual is +# compared with a reference. For example this is used in the tests of test.sh. +$TEST = 0; + +# -dump-texi +# This value is usefull for debugging purposes. The result of the first pass is +# put in .passtexi, the result of the second pass is put in +# .passfirst. +$DUMP_TEXI = 0; + +# -expand +# the @EXPAND array contains the expanded section names. +@EXPAND = ('html'); + +# -invisible +# This seems obsolete and is not used anywhere. +# This was a workaround for a known bug of many WWW browsers, including +# netscape. This was used to create invisible destination in anchors. +$INVISIBLE_MARK = ''; +# $INVISIBLE_MARK = ' '; + +# -iso +# if this value is true, ISO8859 characters are used for special symbols +# (like copyright, etc). +$USE_ISO = 1; + +# -I +# add a directory to the list of directories where @include files are +# searched for (besides the directory of the file). additional '-I' +# args are appended to this list. +# (APA: Don't implicitely search ., to conform with the docs!) +# my @INCLUDE_DIRS = ("."); +@INCLUDE_DIRS = (); + +# -P +# prepend a directory to the list of directories where @include files are +# searched for before the directory of the file. additional '-P' +# args are prepended to this list. +@PREPEND_DIRS = (); + +# --conf-dir +# append to the files searched for init files. +@CONF_DIRS = (); + +# -top-file +# This file name is used for the top-level file. +# The extension is set appropriately, if necessary. +# If empty, .html is used. +# Typically, you would set this to "index.html". +$TOP_FILE = ''; + +# -toc-file +# This file name is used for the table of contents. The +# extension is set appropriately, if necessary. +# If empty, _toc.html is used. +$TOC_FILE = ''; + +# -frames +# if the value is true, HTML 4.0 "frames" are used. +# A file describing the frame layout is generated, together with a file +# with the short table of contents. +$FRAMES = 0; + +# -menu | -nomenu +# if the value is true the Texinfo menus are shown. +$SHOW_MENU = 1; + +# -number | -nonumber +# if this is set the sections are numbered, and section names and numbers +# are used in references and menus (instead of node names). +$NUMBER_SECTIONS = 1; + +# -use-nodes +# if this is set the nodes are used as sectionning elements. +# Otherwise the nodes are incorporated in sections. +$USE_NODES = 0; + +# -node-files +# if this is set one file per node is generated, which can be a target for +# cross manual references. +$NODE_FILES = 0; + +# -split section|chapter|node|none +# if $SPLIT is set to 'section' (resp. 'chapter') one html file per section +# (resp. chapter) is generated. If $SPLIT is set to 'node' one html file per +# node or sectionning element is generated. In all these cases separate pages +# for Top, Table of content (Toc), Overview and About are generated. +# Otherwise a monolithic html file that contains the whole document is +# created. +#$SPLIT = 'section'; +$SPLIT = ''; + +# -sec-nav|-nosec-nav +# if this is set then navigation panels are printed at the beginning of each +# section. +# If the document is split at nodes then navigation panels are +# printed at the end if there were more than $WORDS_IN_PAGE words on page. +# +# If the document is split at sections this is ignored. +# +# This is most useful if you do not want to have section navigation +# with -split chapter. There will be chapter navigation panel at the +# beginning and at the end of chapters anyway. +$SECTION_NAVIGATION = 1; + +# -separated-footnotes +# if this is set footnotes are on a separated page. Otherwise they are at +# the end of each file (if the document is split). +$SEPARATED_FOOTNOTES = 1; + +# -toc-links +# if this is set, links from headings to toc entries are created. +$TOC_LINKS = 0; + +# -subdir +# If this is set, then put result files into the specified directory. +# If not set, then result files are put into the current directory. +#$SUBDIR = 'html'; +$SUBDIR = ''; + +# -short-extn +# If this is set, then all HTML files will have extension ".htm" instead of +# ".html". This is helpful when shipping the document to DOS-based systems. +$SHORTEXTN = 0; + +# -prefix +# This set the output file prefix, prepended to all .html, .gif and .pl files. +# By default, this is the basename of the document. +$PREFIX = ''; + +# -o filename +# If this is set a monolithic document is outputted into $filename. +$OUT = ''; + +# -no-validate +# suppress node cross-reference validation +$NOVALIDATE = 0; + +# -short-ref +# if this is set cross-references are given without section numbers. +$SHORT_REF = ''; + +# -idx-sum +# if value is set, then for each @printindex +# _.idx is created which contains lines of the form +# key ref sorted alphabetically (case matters). +$IDX_SUMMARY = 0; + +# -def-table +# If this is set a table construction for @def.... instead of definition +# lists. +# (New Option: 27.07.2000 Karl Heinz Marbaise) +$DEF_TABLE = 0; + +# -verbose +# if this is set chatter about what we are doing. +$VERBOSE = ''; + +# -lang +# use &$I('my string') if you want to have translations of 'my string' +# and provide the translations in $LANGUAGES->{$LANG} with 'my string' +# as key. +# To add a new language use ISO 639 language codes (see e.g. perl module +# Locale-Codes-1.02 for definitions). Supply translations in the +# $LANGUAGES hash and put it in a file with $LANG as name in an i18n +# directory. +# Default's to 'en' if not set or no @documentlanguage is specified. +$LANG = 'en'; + +# -ignore-preamble-text +# If this is set the text before @node and sectionning commands is ignored. +$IGNORE_PREAMBLE_TEXT = 0; + +# -html-xref-prefix +# base directory for external manuals. +#$EXTERNAL_DIR = '../'; +$EXTERNAL_DIR = undef; + +# -l2h +# if this is set, latex2html is used for generation of math content. +$L2H = ''; + +# -css-include +# All the specified css files are used. More precisely the @import sections +# are added to the beginning of the CSS_LINES the remaining is added at +# the end of the CSS_LINES (after the css rules generated by texi2html). +# cf texinfo manual for more info. +# - means STDIN +@CSS_FILES = (); + +###################### +# The following options are only relevant if $L2H is set +# +# -l2h-l2h +# name/location of latex2html program +$L2H_L2H = "latex2html"; + +# -l2h-skip +# If this is set the actual call to latex2html is skipped. The previously +# generated content is reused, instead. +$L2H_SKIP = ''; + +# -l2h-tmp +# If this is set l2h uses the specified directory for temporary files. The path +# leading to this directory may not contain a dot (i.e., a "."); +# otherwise, l2h will fail. +$L2H_TMP = ''; + +# -l2h-file +# If set, l2h uses the file as latex2html init file +$L2H_FILE = 'l2h.init'; + +# -l2h-clean +# if this is set the intermediate files generated by texi2html in relation with +# latex2html are cleaned (they all have the prefix _l2h_). +$L2H_CLEAN = 1; + +############################################################################## +# +# The following can only be set in the init file +# +############################################################################## + +# If true do table of contents even if there is no @content +$DO_CONTENTS = 0; + +# If true do short table of contents even if there is no @shortcontent +$DO_SCONTENTS = 0; + +# if set, output the contents where the command is located +$INLINE_CONTENTS = 1; + +# if this variable is true, numeric entities are used when there is no +# corresponding textual entity. +$USE_NUMERIC_ENTITY = 1; + +# if set, then use node names in menu entries, instead of section names +$NODE_NAME_IN_MENU = 0; + +# new style for crossrefs +$NEW_CROSSREF_STYLE = 1; + +# transliterate node names for external refs (and internal if NODE_FILES) +$TRANSLITERATE_NODE = 1; + +# if set and menu entry equals menu description, then do not print +# menu description. +# Likewise, if node name equals entry name, do not print entry name. +$AVOID_MENU_REDUNDANCY = 1; + +# if set, center @image by default +# otherwise, do not center by default +# Deprecated and not used anymore +$CENTER_IMAGE = 1; + +# used as identation for block enclosing command @example, etc +# If not empty, must be enclosed in +$EXAMPLE_INDENT_CELL = ' '; + +# same as above, only for @small +$SMALL_EXAMPLE_INDENT_CELL = ' '; + +# font size for @small +$SMALL_FONT_SIZE = '-1'; + +# horizontal rules +$SMALL_RULE = '
    '; +$DEFAULT_RULE = '
    '; +$MIDDLE_RULE = '
    '; +$BIG_RULE = '
    '; + +# if non-empty, and no @..heading appeared in Top node, then +# use this as header for top node/section, otherwise use value of +# @settitle or @shorttitle (in that order) +$TOP_HEADING = ''; + +# if set, use this chapter for 'Index' button, else +# use first chapter with @printindex +$INDEX_CHAPTER = ''; + +# if set and $SPLIT is set, then split index pages at the next letter +# after they have more than that many entries +$SPLIT_INDEX = 100; + +# symbol put at the beginning of nodes entry in menu (and optionnaly of +# unnumbered in menus, see next variable) +$MENU_SYMBOL = '•'; +#$MENU_SYMBOL = '*'; + +$SIMPLE_MENU = 0; + +$OPEN_QUOTE_SYMBOL = "\`"; +$CLOSE_QUOTE_SYMBOL = "'"; + +# if true put a $MENU_SYMBOL before unnumbered in menus +$UNNUMBERED_SYMBOL_IN_MENU = 0; + +# extension for nodes files when NODE_FILES is true +$NODE_FILE_EXTENSION = "html"; + +# extension +$EXTENSION = "html"; + +# file name used for Top node when NODE_FILES is true +$TOP_NODE_FILE = "index"; + +# node name used for Top node when automatic node directions are used +$TOP_NODE_UP = '(dir)'; + +# this controls the pre style for menus +$MENU_PRE_STYLE = 'font-family: serif'; + +# This controls the ul style for toc +$TOC_LIST_STYLE = 'list-style: none'; +$TOC_LIST_ATTRIBUTE = ' class="toc"'; + +# These lines are inserted before and after the shortcontents +$BEFORE_OVERVIEW = "
    \n"; +$AFTER_OVERVIEW = "
    \n"; + +# These lines are inserted before and after the contents +$BEFORE_TOC_LINES = "
    \n"; +$AFTER_TOC_LINES = "
    \n"; + +# if set (e.g., to index.html) replace hrefs to this file +# (i.e., to index.html) by ./ +# Obsolete. Worked around a bug that is fixed now. +$HREF_DIR_INSTEAD_FILE = ''; + +# text inserted after +$AFTER_BODY_OPEN = ''; + +# text inserted before , this will be automatically inside

    +$PRE_BODY_CLOSE = ''; + +# this is added inside after and some <meta name> +# stuff, it can be used for eg. <style>, <script>, <meta> etc. tags. +$EXTRA_HEAD = ''; + +# Specifies the minimum page length required before a navigation panel +# is placed at the bottom of a page +# FIXME this is not true: +# THIS_WORDS_IN_PAGE holds number of words of current page +$WORDS_IN_PAGE = 300; + +# if this is set a vertical navigation panel is used. +$VERTICAL_HEAD_NAVIGATION = 0; + +# html version for latex2html +$L2H_HTML_VERSION = "4.0"; + +# use the information given by menus to complete the node directions +$USE_MENU_DIRECTIONS = 1; + +# specify in this array which "buttons" should appear in which order +# in the navigation panel for sections; use ' ' for empty buttons (space) +@SECTION_BUTTONS = + ( + 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward', + ' ', ' ', ' ', ' ', + 'Top', 'Contents', 'Index', 'About', + ); + +# buttons for misc stuff +@MISC_BUTTONS = ('Top', 'Contents', 'Index', 'About'); + +# buttons for chapter file footers +# (and headers but only if SECTION_NAVIGATION is false) +@CHAPTER_BUTTONS = + ( + 'FastBack', 'FastForward', ' ', + ' ', ' ', ' ', ' ', + 'Top', 'Contents', 'Index', 'About', + ); + +# buttons for section file footers +@SECTION_FOOTER_BUTTONS = + ( + 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward' + ); + +@NODE_FOOTER_BUTTONS = + ( + 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward', + ' ', ' ', ' ', ' ', + 'Top', 'Contents', 'Index', 'About', +# 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward' + ); + +$ICONS = 0; + +# insert here name of icon images for buttons +# Icons are used, if $ICONS and resp. value are set +%ACTIVE_ICONS = + ( + 'Top', '', + 'Contents', '', + 'Overview', '', + 'Index', '', + 'This', '', + 'Back', '', + 'FastBack', '', + 'Prev', '', + 'Up', '', + 'Next', '', + 'NodeUp', '', + 'NodeNext', '', + 'NodePrev', '', + 'Following', '', + 'Forward', '', + 'FastForward', '', + 'About' , '', + 'First', '', + 'Last', '', + ' ', '' + ); + +# insert here name of icon images for these, if button is inactive +%PASSIVE_ICONS = + ( + 'Top', '', + 'Contents', '', + 'Overview', '', + 'Index', '', + 'This', '', + 'Back', '', + 'FastBack', '', + 'Prev', '', + 'Up', '', + 'Next', '', + 'NodeUp', '', + 'NodeNext', '', + 'NodePrev', '', + 'Following', '', + 'Forward', '', + 'FastForward', '', + 'About', '', + 'First', '', + 'Last', '', + ); + +@IMAGE_EXTENSIONS = ('png','jpg','jpeg','gif'); + +$init_out = \&t2h_default_init_out; +$finish_out = \&t2h_default_finish_out; + +# We have to do this dynamically because of internationalization and because +# in body $LANG could be used. +sub t2h_default_init_out() +{ +# Names of text as alternative for icons +# FIXME maybe get those in simple_format? + %NAVIGATION_TEXT = + ( + 'Top', &$I('Top'), + 'Contents', &$I('Contents'), + 'Overview', &$I('Overview'), + 'Index', &$I('Index'), + ' ', '   ', + 'This', &$I('current'), + 'Back', ' < ', + 'FastBack', ' << ', + 'Prev', &$I('Prev'), + 'Up', &$I(' Up '), + 'Next', &$I('Next'), + 'NodeUp', &$I('Node up'), + 'NodeNext', &$I('Next node'), + 'NodePrev', &$I('Previous node'), + 'Following', &$I('Following node'), + 'Forward', ' > ', + 'FastForward', ' >> ', + 'About', ' ? ', + 'First', ' |< ', + 'Last', ' >| ' + ); + + %BUTTONS_GOTO = + ( + 'Top', &$I('Cover (top) of document'), + 'Contents', &$I('Table of contents'), + 'Overview', &$I('Short table of contents'), + 'Index', &$I('Index'), + 'This', &$I('Current section'), + 'Back', &$I('Previous section in reading order'), + 'FastBack', &$I('Beginning of this chapter or previous chapter'), + 'Prev', &$I('Previous section on same level'), + 'Up', &$I('Up section'), + 'Next', &$I('Next section on same level'), + 'NodeUp', &$I('Up node'), + 'NodeNext', &$I('Next node'), + 'NodePrev', &$I('Previous node'), + 'Following', &$I('Node following in node reading order'), + 'Forward', &$I('Next section in reading order'), + 'FastForward', &$I('Next chapter'), + 'About' , &$I('About (help)'), + 'First', &$I('First section in reading order'), + 'Last', &$I('Last section in reading order'), + ); + + %BUTTONS_NAME = + ( + 'Top', &$I('Top'), + 'Contents', &$I('Contents'), + 'Overview', &$I('Overview'), + 'Index', &$I('Index'), + ' ', ' ', + 'This', &$I('This'), + 'Back', &$I('Back'), + 'FastBack', &$I('FastBack'), + 'Prev', &$I('Prev'), + 'Up', &$I('Up'), + 'Next', &$I('Next'), + 'NodeUp', &$I('NodeUp'), + 'NodeNext', &$I('NodeNext'), + 'NodePrev', &$I('NodePrev'), + 'Following', &$I('Following'), + 'Forward', &$I('Forward'), + 'FastForward', &$I('FastForward'), + 'About', &$I('About'), + 'First', &$I('First'), + 'Last', &$I('Last') + ); + + # Set the default body text, inserted between <body ... > + $BODYTEXT = 'lang="' . $LANG . '" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000"' unless (defined($BODYTEXT)); + if (!defined($EXTERNAL_CROSSREF_SPLIT)) + { + if ($SPLIT) + { + $EXTERNAL_CROSSREF_SPLIT = 1; + } + else + { + $EXTERNAL_CROSSREF_SPLIT = 0; + } + } + + $ENCODING_NAME = $ENCODING if (!defined($ENCODING_NAME) and + defined($ENCODING)); + + if (!defined($OUT_ENCODING) and (defined($ENCODING_NAME))) + { + $OUT_ENCODING = main::encoding_alias ($ENCODING_NAME); + $OUT_ENCODING = $ENCODING_NAME if (!defined($OUT_ENCODING)); + } + if (!defined($OUT_ENCODING) and (defined($IN_ENCODING))) + { + $OUT_ENCODING = $IN_ENCODING; + } + if (!defined($OUT_ENCODING) and (defined($DOCUMENT_ENCODING))) + { + $OUT_ENCODING = main::encoding_alias ($DOCUMENT_ENCODING); + $OUT_ENCODING = $DOCUMENT_ENCODING if (!defined($OUT_ENCODING)); + } + + if (!defined($ENCODING_NAME)) + { + if (defined($OUT_ENCODING) and defined($perl_charset_to_html{$OUT_ENCODING})) + { + $ENCODING_NAME = $perl_charset_to_html{$OUT_ENCODING}; + } + elsif (defined($IN_ENCODING) and defined($perl_charset_to_html{$IN_ENCODING})) + { + $ENCODING_NAME = $perl_charset_to_html{$IN_ENCODING}; + } + elsif (defined($DOCUMENT_ENCODING) and defined($perl_charset_to_html{$DOCUMENT_ENCODING})) + { + $ENCODING_NAME = $perl_charset_to_html{$DOCUMENT_ENCODING}; + } + elsif (defined($OUT_ENCODING)) + { + $ENCODING_NAME = $OUT_ENCODING; + } + elsif (defined($IN_ENCODING)) + { + $ENCODING_NAME = $IN_ENCODING; + } + elsif (defined($DOCUMENT_ENCODING)) + { + $ENCODING_NAME = $DOCUMENT_ENCODING; + } + elsif (defined($perl_charset_to_html{$DEFAULT_ENCODING})) + { + $ENCODING_NAME = $perl_charset_to_html{$DEFAULT_ENCODING}; + } + else + { + $ENCODING_NAME = 'us-ascii'; + } + } + my $out_encoding = $OUT_ENCODING; + $out_encoding = 'UNDEF' if (!defined($out_encoding)); + my $in_encoding = $IN_ENCODING; + $in_encoding = 'UNDEF' if (!defined($in_encoding)); + my $document_encoding = $DOCUMENT_ENCODING; + $document_encoding = 'UNDEF' if (!defined($document_encoding)); + print STDERR "# Encodings: doc $document_encoding, in $in_encoding out $out_encoding, name $ENCODING_NAME\n" if ($VERBOSE); + + if ($SIMPLE_MENU and !defined($complex_format_map->{'menu'})) + { + $complex_format_map->{'menu'} = { 'begin' => q{''} , 'end' => q{''}, + 'pre_style' => "$MENU_PRE_STYLE", 'class' => 'menu-preformatted' }; + } + + return $OUT_ENCODING; +}; + +sub t2h_default_finish_out() +{ +} + +####################################################################### +# +# Values guessed if not set here, set in init_out +# +####################################################################### + +$BODYTEXT = undef; + +# default used in init_out for the setting of the ENCODING_NAME variable +$DEFAULT_ENCODING = 'utf8'; + +# In file encoding. The @documentencoding overrides that variable. +$DOCUMENT_ENCODING = undef; + +# In file encoding, understandable by perl. Set according to DOCUMENT_ENCODING +$IN_ENCODING = undef; + +# Formatted document encoding name. If undef, set in init_out based on +# $OUT_ENCODING or $DOCUMENT_ENCODING if they are defined +$ENCODING_NAME = undef; + +# Out files encoding, understandable by perl. If undef, set in init_out +# using $ENCODING_NAME or $IN_ENCODING if they are defined +$OUT_ENCODING = undef; + +# if undef set to @documentdescription. If there is no @documentdescription, +# set in page_head +$DOCUMENT_DESCRIPTION = undef; + +# if undef set 1 if SPLIT, to 0 otherwise +$EXTERNAL_CROSSREF_SPLIT = undef; + +$USER = undef; +$DATE = undef; + + +######################################################################## +# Control of Page layout: +# You can make changes of the Page layout at two levels: +# 1.) For small changes, it is often enough to change the value of +# some global string/hash/array variables +# 2.) For larger changes, reimplement one of the T2H_DEFAULT_<fnc>* routines, +# give them another name, and assign them to the respective +# $<fnc> variable. + +# As a general interface, the hashes Texi2HTML::HREF, Texi2HTML::NAME, Texi2HTML::NODE, Texi2HTML::NO_TEXI, hold +# href, html-name, node-name, name after removal of texi commands of +# This -- current section (resp. html page) +# Top -- top element +# Contents -- Table of contents element +# Overview -- Short table of contents element +# Index -- Index page element +# About -- page which explain "navigation buttons" element +# First -- first node element +# Last -- last node element +# +# Whether or not the following hash values are set, depends on the context +# (all values are w.r.t. 'This' section) +# Next -- next element of texinfo +# Prev -- previous element of texinfo +# NodeUp -- up node of texinfo +# Following -- following node in node reading order, taking menu into account +# Forward -- next node in reading order +# Back -- previous node in reading order +# Up -- parent given by sectionning commands +# FastForward -- if leave node, up and next, else next node +# FastBackward-- if leave node, up and prev, else prev node +# +# Furthermore, the following global variabels are set: +# $Texi2HTML::THISDOC{title} -- title as set by @setttile +# $Texi2HTML::THISDOC{title_no_texi} -- title without texi (without html elements) +# $Texi2HTML::THISDOC{title_texi} -- title with texinfo @-commands +# $Texi2HTML::THISDOC{fulltitle} -- full title as set by @title... +# $Texi2HTML::THISDOC{subtitle} -- subtitle as set by @subtitle +# $Texi2HTML::THISDOC{author} -- author as set by @author +# $Texi2HTML::THISDOC{copying} -- text of @copying and @end copying in comment +# +# $Texi2HTML::THISDOC{program} -- name and version of texi2html +# $Texi2HTML::THISDOC{program_homepage} -- homepage for texi2html +# $Texi2HTML::THISDOC{program_authors} -- authors of texi2html +# $Texi2HTML::THISDOC{today} -- date formatted with pretty_date +# $Texi2HTML::THISDOC{toc_file} -- table of contents file +# $Texi2HTML::THISDOC{file_base_name} -- base name of the texinfo manual file +# $Texi2HTML::THISDOC{destination_directory} + # -- directory for the resulting files +# $Texi2HTML::THISDOC{user} -- user running the script +# $Texi2HTML::THISDOC{css_import_lines} -- ref on @import lines in css files +# $Texi2HTML::THISDOC{css_lines} -- ref on css rules lines +# other $Texi2HTML::THISDOC keys corresponds with texinfo commands, the value +# being the command arg, for the following commands: +# kbdinputstyle, paragraphindent, setchapternewpage, headings, footnotestyle, +# exampleindent, firstparagraphindent, everyheading, everyfooting, +# evenheading, evenfooting, oddheading, oddfooting +# +# and pointer to arrays of lines which need to be printed by main::print_lines +# $Texi2HTML::THIS_SECTION -- lines of 'This' section +# $Texi2HTML::THIS_HEADER -- lines preceding navigation panel of 'This' section +# $Texi2HTML::OVERVIEW -- lines of short table of contents +# $Texi2HTML::TOC_LINES -- lines of table of contents +# $Texi2HTML::TITLEPAGE -- lines of title page +# +# $Texi2HTML::THIS_ELEMENT holds the element reference. + +# +# There are the following subs which control the layout: +# +$print_section = \&T2H_DEFAULT_print_section; +$end_section = \&T2H_DEFAULT_end_section; +$one_section = \&T2H_DEFAULT_one_section; +$print_Top_header = \&T2H_DEFAULT_print_Top_header; +$print_Top_footer = \&T2H_DEFAULT_print_Top_footer; +$print_Top = \&T2H_DEFAULT_print_Top; +$print_Toc = \&T2H_DEFAULT_print_Toc; +$print_Overview = \&T2H_DEFAULT_print_Overview; +$print_Footnotes = \&T2H_DEFAULT_print_Footnotes; +$print_About = \&T2H_DEFAULT_print_About; +$print_misc_header = \&T2H_DEFAULT_print_misc_header; +$print_misc_footer = \&T2H_DEFAULT_print_misc_footer; +$print_misc = \&T2H_DEFAULT_print_misc; +$print_section_footer = \&T2H_DEFAULT_print_section_footer; +$print_chapter_header = \&T2H_DEFAULT_print_chapter_header; +$print_section_header = \&T2H_DEFAULT_print_section_header; +$print_chapter_footer = \&T2H_DEFAULT_print_chapter_footer; +$print_page_head = \&T2H_DEFAULT_print_page_head; +$print_page_foot = \&T2H_DEFAULT_print_page_foot; +$print_head_navigation = \&T2H_DEFAULT_print_head_navigation; +$print_foot_navigation = \&T2H_DEFAULT_print_foot_navigation; +$button_icon_img = \&T2H_DEFAULT_button_icon_img; +$print_navigation = \&T2H_DEFAULT_print_navigation; +$about_body = \&T2H_DEFAULT_about_body; +$print_frame = \&T2H_DEFAULT_print_frame; +$print_toc_frame = \&T2H_DEFAULT_print_toc_frame; +#$toc_body = \&T2H_DEFAULT_toc_body; +$titlepage = \&T2H_DEFAULT_titlepage; +$css_lines = \&T2H_DEFAULT_css_lines; +$print_redirection_page = \&T2H_DEFAULT_print_redirection_page; +$node_file_name = \&T2H_DEFAULT_node_file_name; +$inline_contents = \&T2H_DEFAULT_inline_contents; + +######################################################################## +# Layout for html for every sections +# +sub T2H_DEFAULT_print_section +{ + my $fh = shift; + my $first_in_page = shift; + my $previous_is_top = shift; + my $buttons = \@SECTION_BUTTONS; + + if ($first_in_page and $SECTION_NAVIGATION) + { + &$print_head_navigation($fh, $buttons); + } + else + { # got to do this here, as it isn't done in print_head_navigation + main::print_lines($fh, $Texi2HTML::THIS_HEADER); + &$print_navigation($fh, $buttons) if ($SECTION_NAVIGATION); + } + my $nw = main::print_lines($fh); + if (defined $SPLIT + and (($SPLIT eq 'node') && $SECTION_NAVIGATION)) + { + &$print_foot_navigation($fh); + print $fh "$SMALL_RULE\n"; + &$print_navigation($fh, \@NODE_FOOTER_BUTTONS) if (!defined($WORDS_IN_PAGE) or (defined ($nw) + and $nw >= $WORDS_IN_PAGE)); + } +} + +sub T2H_DEFAULT_one_section($) +{ + my $fh = shift; + main::print_lines($fh, $Texi2HTML::THIS_HEADER); + main::print_lines($fh); + print $fh "$SMALL_RULE\n"; + &$print_foot_navigation($fh); + &$print_page_foot($fh); +} + +################################################################### +# Layout of top-page I recommend that you use @ifnothtml, @ifhtml, +# @html within the Top texinfo node to specify content of top-level +# page. +# +# If you enclose everything in @ifnothtml, then title, subtitle, +# author and overview is printed +# Texi2HTML::HREF of Next, Prev, Up, Forward, Back are not defined +# if $T2H_SPLIT then Top page is in its own html file +sub T2H_DEFAULT_print_Top_header($$) +{ + my $fh = shift; + my $do_page_head = shift; + &$print_page_head($fh) if ($do_page_head); +} +sub T2H_DEFAULT_print_Top_footer($$) +{ + my $fh = shift; + my $end_page = shift; + my $buttons = \@MISC_BUTTONS; + &$print_foot_navigation($fh); + print $fh "$SMALL_RULE\n"; + if ($end_page) + { + &$print_navigation($fh, $buttons); + &$print_page_foot($fh); + } +} +sub T2H_DEFAULT_print_Top($$) +{ + my $fh = shift; + my $has_top_heading = shift; + + # for redefining navigation buttons use: + # my $buttons = [...]; + # as it is, 'Top', 'Contents', 'Index', 'About' are printed + my $buttons = \@MISC_BUTTONS; + &$print_head_navigation($fh, $buttons) if ($SPLIT or $SECTION_NAVIGATION); + my $nw; + if (@$Texi2HTML::THIS_SECTION) + { + # if top-level node has content, then print it with extra header + #print $fh "<h1>$Texi2HTML::NAME{Top}</h1>\n" + print $fh "<h1 class=\"settitle\">$Texi2HTML::NAME{Top}</h1>\n" + unless ($has_top_heading); + $nw = main::print_lines($fh, $Texi2HTML::THIS_SECTION); + } + else + { + # top-level node is fully enclosed in @ifnothtml + # print fulltitle, subtitle, author, Overview or table of contents + print $fh $Texi2HTML::TITLEPAGE; + if (@{$Texi2HTML::OVERVIEW} and !$Texi2HTML::THISDOC{'setshortcontentsaftertitlepage'}) + { + print $fh '<h2> ' . $Texi2HTML::NAME{'Overview'} . "</h2>\n" . "<blockquote\n"; + my $nw = main::print_lines($fh, $Texi2HTML::OVERVIEW); + print $fh "</blockquote>\n"; + } + elsif (@{$Texi2HTML::TOC_LINES} and !$Texi2HTML::THISDOC{'setcontentsaftertitlepage'}) + { + print $fh '<h1> ' . $Texi2HTML::NAME{'Contents'} . "</h1>\n"; + my $nw = main::print_lines($fh, $Texi2HTML::TOC_LINES); + } + } +} + +################################################################### +# Layout of Toc, Overview, and Footnotes pages +# By default, we use "normal" layout +# Texi2HTML::HREF of Next, Prev, Up, Forward, Back, etc are not defined +# use: my $buttons = [...] to redefine navigation buttons +sub T2H_DEFAULT_print_Toc +{ + return &$print_misc(@_); +} +sub T2H_DEFAULT_print_Overview +{ + return &$print_misc(@_); +} +sub T2H_DEFAULT_print_Footnotes +{ + return &$print_misc(@_); +} +sub T2H_DEFAULT_print_About +{ + # if there is no section navigation and it is not split, the + # navigation information is useless + return &$print_misc(@_) if ($SPLIT or $SECTION_NAVIGATION); +} + +sub T2H_DEFAULT_print_misc_header +{ + my $fh = shift; + my $buttons = shift; + &$print_page_head($fh) if $SPLIT; + &$print_head_navigation($fh, $buttons) if ($SPLIT or $SECTION_NAVIGATION); +} + +sub T2H_DEFAULT_print_misc_footer +{ + my $fh = shift; + my $buttons = shift; + my $nwords = shift; + &$print_foot_navigation($fh, $buttons); + print $fh "$SMALL_RULE\n"; + if ($SPLIT) + { + &$print_navigation($fh, $buttons);# if ($SPLIT ne 'node'); + &$print_page_foot($fh); + } +} + +sub T2H_DEFAULT_print_misc +{ + my $fh = shift; + my $buttons = \@MISC_BUTTONS; + &$print_misc_header($fh, $buttons); + print $fh "<h1>$Texi2HTML::NAME{This}</h1>\n"; + main::print_lines($fh); + &$print_misc_footer($fh, $buttons); +} +################################################################## +# section_footer is only called if SPLIT eq 'section' +# section_footer: after print_section of last section, before print_page_foot +# + +sub T2H_DEFAULT_print_section_footer +{ + my $fh = shift; + my $buttons = \@SECTION_FOOTER_BUTTONS; + &$end_section ($fh, 1); + &$print_navigation($fh, $buttons); +} + +################################################################### +# chapter_header and chapter_footer are only called if +# SPLIT eq 'chapter' +# chapter_header: after print_page_head, before print_section +# chapter_footer: after print_section of last section, before print_page_foot +# +# If you want to get rid of navigation stuff after each section, +# redefine print_section such that it does not call print_navigation, +# and put print_navigation into print_chapter_header +sub T2H_DEFAULT_print_chapter_header +{ + # nothing to do there, by default, the navigation panel + # is the section navigation panel + if (! $SECTION_NAVIGATION) + { # in this case print_navigation is called here. + my $fh = shift; + my $buttons = \@CHAPTER_BUTTONS; + &$print_head_navigation($fh, $buttons); #do that instead ? + #&$print_head_navigation($fh, $buttons); # FIXME VERTICAL_HEAD_NAVIGATION ? + print $fh "\n$MIDDLE_RULE\n"; + } +} + +sub T2H_DEFAULT_print_chapter_footer +{ + my $fh = shift; + my $buttons = \@CHAPTER_BUTTONS; + &$print_foot_navigation($fh); + print $fh "$BIG_RULE\n"; + &$print_navigation($fh, $buttons); +} + +sub T2H_DEFAULT_print_section_header +{ + # nothing to do there, by default + if (! $SECTION_NAVIGATION) + { # in this case print_navigation is called here. + my $fh = shift; + my $buttons = \@SECTION_BUTTONS; + &$print_head_navigation($fh, $buttons); + } +} + +################################################################### +# Layout of standard header and footer +# + +sub T2H_DEFAULT_print_page_head($) +{ + my $fh = shift; + my $longtitle = "$Texi2HTML::THISDOC{'title_simple_format'}"; + $longtitle .= ": $Texi2HTML::SIMPLE_TEXT{'This'}" if (defined ($Texi2HTML::SIMPLE_TEXT{'This'}) and ($Texi2HTML::SIMPLE_TEXT{'This'} !~ /^\s*$/) and $SPLIT); + my $description = $DOCUMENT_DESCRIPTION; + $description = $longtitle if (!defined($description)); + $description = "<meta name=\"description\" content=\"$description\">" if + ($description ne ''); + my $encoding = ''; + $encoding = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=$ENCODING_NAME\">" if (defined($ENCODING_NAME) and ($ENCODING_NAME ne '')); + print $fh <<EOT; +$DOCTYPE +<html> +$Texi2HTML::THISDOC{'copying'}<!-- Created on $Texi2HTML::THISDOC{today} by $Texi2HTML::THISDOC{program} --> +<!-- +$Texi2HTML::THISDOC{program_authors} +--> +<head> +<title>$longtitle + +$description + + + + +$encoding +$CSS_LINES +$EXTRA_HEAD + + + +$AFTER_BODY_OPEN +EOT +} + +sub program_string() +{ + my $user = $Texi2HTML::THISDOC{'user'}; + my $date = $Texi2HTML::THISDOC{'today'}; + $user = '' if (!defined($user)); + $date = '' if (!defined($date)); + if (($user ne '') and ($date ne '')) + { + return &$I('This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.', { + 'user' => $user, 'date' => $date, 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' => $Texi2HTML::THISDOC{'program'} }); + } + elsif ($user ne '') + { + return &$I('This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.', { + 'user' => $user, 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' => $Texi2HTML::THISDOC{'program'} }); + } + elsif ($date ne '') + { + return &$I('This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.', { + 'date' => $date, 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' => $Texi2HTML::THISDOC{'program'} }); + } + return &$I('This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.', { + 'program_homepage' => $Texi2HTML::THISDOC{'program_homepage'}, 'program' +=> $Texi2HTML::THISDOC{'program'} }); +} + +sub T2H_DEFAULT_end_section($$) +{ + my $fh = shift; + my $end_foot_navigation = shift; + &$print_foot_navigation($fh) if ($end_foot_navigation); + print $fh "$BIG_RULE\n"; +} + +sub T2H_DEFAULT_print_page_foot($) +{ + my $fh = shift; + my $program_string = program_string(); + print $fh < + + $program_string + +
    +$PRE_BODY_CLOSE +

    + + +EOT +} + +################################################################### +# Layout of navigation panel + +sub T2H_DEFAULT_print_head_navigation($$) +{ + my $fh = shift; + my $buttons = shift; + if ($VERTICAL_HEAD_NAVIGATION) + { + print $fh < + + +EOT + } + main::print_lines($fh, $Texi2HTML::THIS_HEADER); + &$print_navigation($fh, $buttons, $VERTICAL_HEAD_NAVIGATION); + if ($VERTICAL_HEAD_NAVIGATION) + { + print $fh < + +EOT + } + elsif (defined $SPLIT + and ($SPLIT eq 'node')) + { + print $fh "$SMALL_RULE\n"; + } +} + +sub T2H_DEFAULT_print_foot_navigation +{ + my $fh = shift; + if ($VERTICAL_HEAD_NAVIGATION) + { + print $fh < + + +EOT + } +} + +###################################################################### +# navigation panel +# +# how to create IMG tag +sub T2H_DEFAULT_button_icon_img +{ + my $button = shift; + my $icon = shift; + my $name = shift; + return '' if (!defined($icon)); + $button = "" if (!defined ($button)); + $name = '' if (!defined($name)); + my $alt = ''; + if ($name ne '') + { + if ($button ne '') + { + $alt = "$button: $name"; + } + else + { + $alt = $name; + } + } + else + { + $alt = $button; + } + return qq{$alt}; +} + +sub T2H_DEFAULT_print_navigation +{ + my $fh = shift; + my $buttons = shift; + my $vertical = shift; + my $spacing = 1; + print $fh '\n"; + + print $fh "" unless $vertical; + for my $button (@$buttons) + { + print $fh qq{\n} if $vertical; + print $fh qq{\n"; + print $fh "\n" if $vertical; + } + print $fh "" unless $vertical; + print $fh "
    }; + + if (ref($button) eq 'CODE') + { + &$button($fh, $vertical); + } + elsif (ref($button) eq 'SCALAR') + { + print $fh "$$button" if defined($$button); + } + elsif (ref($button) eq 'ARRAY') + { + my $text = $button->[1]; + my $button_href = $button->[0]; + # verify that $button_href is simple text and text is a reference + if (defined($button_href) and !ref($button_href) + and defined($text) and (ref($text) eq 'SCALAR') and defined($$text)) + { # use given text + if ($Texi2HTML::HREF{$button_href}) + { + print $fh "" . + &$anchor('', + $Texi2HTML::HREF{$button_href}, + $$text + ) + ; + } + else + { + print $fh $$text; + } + } + } + elsif ($button eq ' ') + { # handle space button + print $fh + ($ICONS && $ACTIVE_ICONS{' '}) ? + &$button_icon_img($BUTTONS_NAME{$button}, $ACTIVE_ICONS{' '}) : + $NAVIGATION_TEXT{' '}; + #next; + } + elsif ($Texi2HTML::HREF{$button}) + { # button is active + my $btitle = $BUTTONS_GOTO{$button} ? + 'title="' . $BUTTONS_GOTO{$button} . '"' : ''; + if ($ICONS && $ACTIVE_ICONS{$button}) + { # use icon + print $fh '' . + &$anchor('', + $Texi2HTML::HREF{$button}, + &$button_icon_img($BUTTONS_NAME{$button}, + $ACTIVE_ICONS{$button}, + $Texi2HTML::SIMPLE_TEXT{$button}), + $btitle + ); + } + else + { # use text + print $fh + '[' . + &$anchor('', + $Texi2HTML::HREF{$button}, + $NAVIGATION_TEXT{$button}, + $btitle + ) . + ']'; + } + } + else + { # button is passive + print $fh + $ICONS && $PASSIVE_ICONS{$button} ? + &$button_icon_img($BUTTONS_NAME{$button}, + $PASSIVE_ICONS{$button}, + $Texi2HTML::SIMPLE_TEXT{$button}) : + + "[" . $NAVIGATION_TEXT{$button} . "]"; + } + print $fh "
    \n"; +} + +###################################################################### +# Frames: this is from "Richard Y. Kim" +# Should be improved to be more conforming to other _print* functions +# FIXME pass toc_file and main_file as args or in $Texi2HTML::THISDOC ? + +sub T2H_DEFAULT_print_frame +{ + my $fh = shift; + my $toc_file = shift; + my $main_file = shift; + print $fh < +$Texi2HTML::THISDOC{title} + + + + + +EOT +} + +sub T2H_DEFAULT_print_toc_frame +{ + my $fh = shift; + my $stoc_lines = shift; + &$print_page_head($fh); + print $fh <Content +EOT + print $fh map {s/\bhref=/target="main" href=/; $_;} @$stoc_lines; + print $fh "\n"; +} + +# This subroutine is intended to fill @Texi2HTML::TOC_LINES and +# @Texi2HTML::OVERVIEW with the table of contents and short table of +# contents. +# +# arguments: +# ref on an array containing all the elements + +# each element is a reference on a hash. The following keys might be of +# use: +# 'top': true if this is the top element +# 'index_page': true if the element is an index page added because of index +# splitting +# 'toc_level': level of the element in the table of content. Highest level +# is 1 for the @top element and for chapters, appendix and so on, +# 2 for section, unnumberedsec and so on... +# 'tocid': label used for reference linking to the element in table of +# contents +# 'file': the file containing the element, usefull to do href to that file +# in case the document is split. +# 'text': text of the element, with section number +# 'text_nonumber': text of the element, without section number + +# Relevant configuration variables are: +# $NUMBER_SECTIONS +# $TOC_LIST_ATTRIBUTE: usefull in case a list is used +# $FRAMES: @Texi2HTML::OVERVIEW is used in one of the frames. +# $BEFORE_OVERVIEW +# $AFTER_OVERVIEW +# $BEFORE_TOC_LINES +# $AFTER_TOC_LINES +# $DO_CONTENTS +# $DO_SCONTENTS + +sub T2H_DEFAULT_toc_body($) +{ +} + +sub T2H_DEFAULT_inline_contents($$$) +{ + my $fh = shift; + my $command = shift; + my $element = shift; + my $name; + my $lines; + + my $result = undef; + + if ($command eq 'contents') + { + $name = $Texi2HTML::NAME{'Contents'}; + $lines = $Texi2HTML::TOC_LINES; + } + else + { + $name = $Texi2HTML::NAME{'Overview'}; + $lines = $Texi2HTML::OVERVIEW; + } + if (@{$lines}) + { + $result = [ "".&$anchor($element->{'id'})."\n", + "

    $name

    \n" ]; + push @$result, @$lines; + } + + return $result; +} + +sub T2H_DEFAULT_css_lines ($$) +{ + my $import_lines = shift; + my $rule_lines = shift; + return if (defined($CSS_LINES) or (!@$rule_lines and !@$import_lines and (! keys(%css_map)))); + $CSS_LINES = "\n"; +} + +###################################################################### +# About page +# + +# PRE_ABOUT can be a function reference or a scalar. +# Note that if it is a scalar, T2H_InitGlobals has not been called, +# and all global variables like $ADDRESS are not available. +$PRE_ABOUT = sub +{ + return ' ' . program_string() . "\n"; +}; + +# If customizing $AFTER_ABOUT, be sure to put the content inside

    . +$AFTER_ABOUT = ''; + +%BUTTONS_EXAMPLE = + ( + 'Top', '   ', + 'Contents', '   ', + 'Overview', '   ', + 'Index', '   ', + 'This', '1.2.3', + 'Back', '1.2.2', + 'FastBack', '1', + 'Prev', '1.2.2', + 'Up', '1.2', + 'Next', '1.2.4', + 'NodeUp', '1.2', + 'NodeNext', '1.2.4', + 'NodePrev', '1.2.2', + 'Following', '1.2.4', + 'Forward', '1.2.4', + 'FastForward', '2', + 'About', '   ', + 'First', '1.', + 'Last', '1.2.4', + ); + +sub T2H_DEFAULT_about_body +{ + my $about = "

    \n"; + if (ref($PRE_ABOUT) eq 'CODE') + { + $about .= &$PRE_ABOUT(); + } + else + { + $about .= $PRE_ABOUT; + } + $about .= < +

    +EOT + $about .= &$I(' The buttons in the navigation panels have the following meaning:') . "\n"; + $about .= < + + +EOT + $about .= ' \n" . +' \n" . +' \n" . +' \n" . " \n"; + + for my $button (@SECTION_BUTTONS) + { + next if $button eq ' ' || ref($button) eq 'CODE' || ref($button) eq 'SCALAR' || ref($button) eq 'ARRAY'; + $about .= " \n \n"; + $about .= <$BUTTONS_NAME{$button} + + + +EOT + } + + $about .= < + +

    +EOT + $about .= &$I(' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:') . "\n"; + +# where the Example assumes that the current position +# is at Subsubsection One-Two-Three of a document of +# the following structure: + $about .= < + +

      +EOT + $about .= '
    • 1. ' . &$I('Section One') . "\n" . +"
        \n" . +'
      • 1.1 ' . &$I('Subsection One-One') . "\n"; + $about .= < +
      • ...
      • +
      +
    • +EOT + $about .= '
    • 1.2 ' . &$I('Subsection One-Two') . "\n" . +"
        \n" . +'
      • 1.2.1 ' . &$I('Subsubsection One-Two-One') . "
      • \n" . +'
      • 1.2.2 ' . &$I('Subsubsection One-Two-Two') . "
      • \n" . +'
      • 1.2.3 ' . &$I('Subsubsection One-Two-Three') . "    \n" +. +' <== ' . &$I('Current Position') . "
      • \n" . +'
      • 1.2.4 ' . &$I('Subsubsection One-Two-Four') . "
      • \n" . +"
      \n" . +"
    • \n" . +'
    • 1.3 ' . &$I('Subsection One-Three') . "\n"; + $about .= < +
    • ...
    • +
    + +EOT + $about .= '
  • 1.4 ' . &$I('Subsection One-Four') . "
  • \n"; + $about .= < + + +$AFTER_ABOUT +EOT + return $about; +} + +sub T2H_DEFAULT_titlepage() +{ + my $result = ''; + if (@{$Texi2HTML::THISDOC{'titles'}} + or @{$Texi2HTML::THISDOC{'subtitles'}} + or @{$Texi2HTML::THISDOC{'authors'}}) + { + $result = "
    \n"; + foreach my $title (@{$Texi2HTML::THISDOC{'titles'}}) + { + $result .= '

    ' . $title . "

    \n"; + } + foreach my $subtitle (@{$Texi2HTML::THISDOC{'subtitles'}}) + { + $result .= '

    ' . $subtitle . "

    \n"; + } + foreach my $author (@{$Texi2HTML::THISDOC{'authors'}}) + { + $result .= ' ' . $author . "
    \n"; + } + $result .= "
    \n$DEFAULT_RULE\n"; + } + + $Texi2HTML::TITLEPAGE = $result . $Texi2HTML::TITLEPAGE; + + if ($Texi2HTML::THISDOC{'setcontentsaftertitlepage'} and @{$Texi2HTML::THISDOC{'inline_contents'}->{'contents'}}) + { + foreach my $line(@{$Texi2HTML::THISDOC{'inline_contents'}->{'contents'}}) + { + $Texi2HTML::TITLEPAGE .= $line; + } + $Texi2HTML::TITLEPAGE .= "$DEFAULT_RULE\n"; + } + if ($Texi2HTML::THISDOC{'setshortcontentsaftertitlepage'} and @{$Texi2HTML::THISDOC{'inline_contents'}->{'shortcontents'}}) + { + foreach my $line(@{$Texi2HTML::THISDOC{'inline_contents'}->{'shortcontents'}}) + { + $Texi2HTML::TITLEPAGE .= $line; + } + $Texi2HTML::TITLEPAGE .= "$DEFAULT_RULE\n"; + } +} + +# FIXME Honor DOCUMENT_DESCRIPTION? +sub T2H_DEFAULT_print_redirection_page($) +{ + my $fh = shift; + my $longtitle = "$Texi2HTML::THISDOC{'title_simple_format'}"; + $longtitle .= ": $Texi2HTML::SIMPLE_TEXT{'This'}" if exists $Texi2HTML::SIMPLE_TEXT{'This'}; + my $description = $longtitle; + my $encoding = ''; + $encoding = "" if (defined($ENCODING_NAME) and ($ENCODING_NAME ne '')); + my $href = &$anchor('', $Texi2HTML::HREF{'This'}, $Texi2HTML::NAME{'This'}); + my $string = &$I('The node you are looking for is at %{href}.', + { 'href' => $href }); + print $fh < + + + +$longtitle + + + + + + +$encoding +$CSS_LINES + +$EXTRA_HEAD + + + +$AFTER_BODY_OPEN +

    $string

    + +EOT +} + +sub T2H_DEFAULT_node_file_name($$) +{ + my $node = shift; + my $type = shift; + return undef if ($node->{'external_node'} or $node->{'index_page'} + or ($type eq 'top' and !$NEW_CROSSREF_STYLE)); + my $node_file_base; + if ($type eq 'top' and defined($TOP_NODE_FILE)) + { + $node_file_base = $TOP_NODE_FILE; + } + elsif ($NEW_CROSSREF_STYLE) + { + if ($TRANSLITERATE_NODE) + { + $node_file_base = $node->{'cross_manual_file'}; + } + else + { + $node_file_base = $node->{'cross_manual_target'}; + } + } + else + { + $node_file_base = main::remove_texi($node->{'texi'}); + $node_file_base =~ s/[^\w\.\-]/-/g; + } + if (defined($NODE_FILE_EXTENSION) and $NODE_FILE_EXTENSION ne '') + { + return ($node_file_base . ".$NODE_FILE_EXTENSION"); + } + return $node_file_base; +} + +######################################################################## +# Control of formatting: +# 1.) For some changes, it is often enough to change the value of +# some global map. It might necessitate building a little +# function along with the change in hash, if the change is the use +# of another function (in style_map). +# 2.) For other changes, reimplement one of the t2h_default_* routines, +# give them another name, and assign them to the respective +# $ variable (below). + + +# +# This hash should have keys corresponding with the nonletter command accent +# whose following character is considered to be the argument +# This hash associates an accent macro to the ISO name for the accent if any. +# The customary use of this map is to find the ISO name appearing in html +# entity (like é) associated with a texinfo accent macro. +# +# The keys of the hash are +# ": umlaut +# ~: tilda accent +# ^: circumflex accent +# `: grave accent +# ': acute accent +# =: macron accent +%accent_map = ( + '"', 'uml', + '~', 'tilde', + '^', 'circ', + '`', 'grave', + "'", 'acute', + '=', '', + ); + +# +# texinfo "simple things" (@foo) to HTML ones +# +%simple_map = ( + "*", "
    ", # HTML+ + ' ', ' ', + "\t", ' ', + "\n", ' ', + # "­" or "­" could also be possible for @-, but it seems + # that some browser will consider this as an always visible hyphen mark + # which is not what we want (see http://www.cs.tut.fi/~jkorpela/shy.html) + '-', '', # hyphenation hint + '|', '', # used in formatting commands @evenfooting and friends + '/', '', + # spacing commands + ':', '', + '!', '!', + '?', '?', + '.', '.', + '@', '@', + '}', '}', + '{', '{', + ); + +# this map is used in preformatted text +%simple_map_pre = %simple_map; +$simple_map_pre{'*'} = "\n"; + +# +# texinfo "things" (@foo{}) to HTML ones +# +%things_map = ( + 'TeX' => 'TeX', + 'LaTeX' => 'LaTeX', +# pertusus: unknown by makeinfo, not in texinfo manual (@* is the right thing) +# 'br', '
    ', # paragraph break + 'bullet' => '*', +# #'copyright' => '(C)', + 'copyright' => '©', + 'registeredsymbol' => '®', + 'dots' => '...', + 'enddots' => '....', + 'equiv' => '==', +# FIXME i18n + 'error' => 'error-->', + 'expansion' => '==>', + 'minus' => '-', + 'point' => '-!-', + 'print' => '-|', + 'result' => '=>', + # set in code using the language + # 'today', &pretty_date, + 'today' => '', + 'aa' => 'å', + 'AA' => 'Å', + 'ae' => 'æ', + 'oe' => 'œ', #pertusus: also œ. œ not in html 3.2 + 'AE' => 'Æ', + 'OE' => 'Œ', #pertusus: also Œ. Œ not in html 3.2 + 'o' => 'ø', + 'O' => 'Ø', + 'ss' => 'ß', + 'l' => 'ł', + 'L' => 'Ł', + 'exclamdown' => '¡', + 'questiondown' => '¿', + 'pounds' => '£', + 'ordf' => 'ª', + 'ordm' => 'º', + 'comma' => ',', + 'euro' => '€', + 'tie' => ' ', + ); + +# This map is used in preformatted environments +%pre_map = %things_map; +$pre_map{'dots'} = '...'; +$pre_map{'enddots'} = '....'; +#$pre_map{'br'} = "\n"; + +# ascii representation of @-commands +%ascii_simple_map = ( + "*", "\n", # HTML+ + ' ', ' ', + "\t", "\t", + "\n", "\n", + '-', '', # hyphenation hint + '|', '', # used in formatting commands @evenfooting and friends + '/', '', + ':', '', + '!', '!', + '?', '?', + '.', '.', + '@', '@', + '}', '}', + '{', '{', +); + +%ascii_things_map = ( + 'TeX' => 'TeX', + 'LaTeX' => 'LaTeX', + 'bullet' => '*', + 'copyright' => '(C)', + 'registeredsymbol' => '(R)', + 'dots' => '...', + 'enddots' => '....', + 'equiv' => '==', +# FIXME i18n + 'error' => 'error-->', + 'expansion' => '==>', + 'minus' => '-', + 'point' => '-!-', + 'print' => '-|', + 'result' => '=>', + 'today' => '', + 'aa' => 'aa', + 'AA' => 'AA', + 'ae' => 'ae', + 'oe' => 'oe', + 'AE' => 'AE', + 'OE' => 'OE', + 'o' => '/o', + 'O' => '/O', + 'ss' => 'ss', + 'l' => '/l', + 'L' => '/L', + 'exclamdown' => '?', + 'questiondown' => '!', + 'pounds' => '#', + 'ordf' => 'a', + 'ordm' => 'o', + 'comma' => ',', + 'euro' => 'Euro', + 'tie' => ' ', +); + +# +# This map is used when texi elements are removed and replaced +# by simple text +# +%simple_map_texi = ( + "*", "", + " ", " ", + "\t", " ", + "-", "-", # soft hyphen + "\n", "\n", + "|", "", + # spacing commands + ":", "", + "!", "!", + "?", "?", + ".", ".", + "-", "", + '@', '@', + '}', '}', + '{', '{', + ); + +# text replacing macros when texi commands are removed and plain text is +# produced +%texi_map = ( + 'TeX', 'TeX', + 'LaTeX', 'LaTeX', + 'bullet', '*', + 'copyright', 'C', + 'registeredsymbol', 'R', + 'dots', '...', + 'enddots', '....', + 'equiv', '==', + 'error', 'error-->', + 'expansion', '==>', + 'minus', '-', + 'point', '-!-', + 'print', '-|', + 'result', '=>', + 'today' => '', + 'aa', 'aa', + 'AA', 'AA', + 'ae', 'ae', + 'oe', 'oe', + 'AE', 'AE', + 'OE', 'OE', + 'o', 'o', + 'O', 'O', + 'ss', 'ss', + 'l', 'l', + 'L', 'L', + 'exclamdown', '! upside-down', + #'exclamdown', '¡', + 'questiondown', '? upside-down', + #'questiondown', '¿', + 'pounds', 'pound sterling', + #'pounds', '£' + 'ordf' => 'a', + 'ordm' => 'o', + 'comma' => ',', + 'euro' => 'Euro', + 'tie' => ' ', + ); + +# taken from +#Latin extended additionnal +#http://www.alanwood.net/unicode/latin_extended_additional.html +#C1 Controls and Latin-1 Supplement +#http://www.alanwood.net/unicode/latin_1_supplement.html +#Latin Extended-A +#http://www.alanwood.net/unicode/latin_extended_a.html +#Latin Extended-B +#http://www.alanwood.net/unicode/latin_extended_b.html +#dotless i: 0131 + +#http://www.alanwood.net/unicode/arrows.html 21** +#http://www.alanwood.net/unicode/general_punctuation.html 20** +#http://www.alanwood.net/unicode/mathematical_operators.html 22** + +%unicode_map = ( + 'bullet' => '2022', + 'copyright' => '00A9', + 'registeredsymbol' => '00AE', + 'dots' => '2026', + 'enddots' => '', + 'equiv' => '2261', + 'error' => '', + 'expansion' => '2192', + 'minus' => '2212', # in mathematical operators +# 'minus' => '002D', # in latin1 + 'point' => '2605', + 'print' => '22A3', + 'result' => '21D2', + 'today' => '', + 'aa' => '00E5', + 'AA' => '00C5', + 'ae' => '00E6', + 'oe' => '0153', + 'AE' => '00C6', + 'OE' => '0152', + 'o' => '00F8', + 'O' => '00D8', + 'ss' => '00DF', + 'l' => '0142', + 'L' => '0141', + 'exclamdown' => '00A1', + 'questiondown' => '00BF', + 'pounds' => '00A3', + 'ordf' => '00AA', + 'ordm' => '00BA', + 'comma' => '002C', + 'euro' => '20AC', + 'tie' => '', +# 'tie' => '0020', + ); + +%transliterate_map = ( + '00C5' => 'AA', + '00E5' => 'aa', + '00D8' => 'OE', + '00F8' => 'oe', + '00E6' => 'ae', + '0153' => 'oe', + '00C6' => 'AE', + '0152' => 'OE', + '00DF' => 'ss', + '0141' => 'L', + '0142' => 'l', + '00D0' => 'DH', + '0415' => 'E', + '0435' => 'e', + '0426' => 'C', + '042A' => 'W', + '044A' => 'w', + '042C' => 'X', + '044C' => 'x', + '042E' => 'yu', + '042F' => 'YA', + '044F' => 'ya', + '0433' => 'g', + '0446' => 'c', + '04D7' => 'IO', + '00DD' => 'Y', # unidecode gets this wrong ? + ); + +foreach my $symbol(keys(%unicode_map)) +{ + if ($unicode_map{$symbol} ne '' and !exists($transliterate_map{$symbol})) + { + $no_transliterate_map{$unicode_map{$symbol}} = 1; + } +} + +%ascii_character_map = ( + ' ' => '0020', + '!' => '0021', + '"' => '0022', + '#' => '0023', + '$' => '0024', + '%' => '0025', + '&' => '0026', + "'" => '0027', + '(' => '0028', + ')' => '0029', + '*' => '002A', + '+' => '002B', + ',' => '002C', + '-' => '002D', + '.' => '002E', + '/' => '002F', + ':' => '003A', + ';' => '003B', + '<' => '003C', + '=' => '003D', + '>' => '003E', + '?' => '003F', + '@' => '0040', + '[' => '005B', + '\\' => '005C', + ']' => '005D', + '^' => '005E', + '_' => '005F', + '`' => '0060', + '{' => '007B', + '|' => '007C', + '}' => '007D', + '~' => '007E', +); + +%perl_charset_to_html = ( + 'utf8' => 'utf-8', + 'utf-8-strict' => 'utf-8', + 'ascii' => 'us-ascii', +); + +# symbols used for the commands if $USE_ISO is true. +%iso_symbols = ( + 'equiv' => '≡', + 'dots' => '…', + 'bullet' => '•', + 'result' => '⇒', + 'expansion' => '→', + 'point' => '∗', + "'" => '’', + '`' => '‘', + ); + +# not used currently for html, but used in chm.init +%numeric_entity_map = (); + +foreach my $symbol (keys(%unicode_map)) +{ + if ($symbol ne '') + { + $numeric_entity_map{$symbol} = '&#' . hex($unicode_map{$symbol}) . ';'; + } +} + +# When the value begins with & the function with that name is used to do the +# html. The first argument is the text enclosed within {}, the second is the +# style name (which is also the key of the hash) +# +# Otherwithe the value is the html element used to enclose the text, and if +# there is a " the resulting text is also enclosed within `' +my %old_style_map = ( + 'acronym', '', + 'asis', '', + 'b', 'b', + 'cite', 'cite', + 'code', 'code', + 'command', 'code', + 'ctrl', '&default_ctrl', + 'dfn', 'em', + 'dmn', '', + 'email', '&default_email', + 'emph', 'em', + 'env', 'code', + 'file', '"tt', + 'i', 'i', + 'kbd', 'kbd', + 'key', 'kbd', + 'math', 'em', + 'option', '"samp', + 'r', '', + 'samp', '"samp', + 'sc', '&default_sc', + 'strong', 'strong', + 't', 'tt', + 'uref', '&default_uref', + 'url', '&default_url', + 'var', 'var', + 'verb', 'tt', + 'titlefont', '&default_titlefont', + 'w', '', + ); + +# default is {'args' => ['normal'], 'attribute' => ''}, +%style_map = ( + 'asis', {}, + 'b', {'attribute' => 'b'}, + 'cite', {'attribute' => 'cite'}, + 'code', {'args' => ['code'], 'attribute' => 'code'}, + 'command', {'args' => ['code'], 'attribute' => 'code'}, + 'ctrl', {'function' => \&t2h_default_ctrl,'type' => 'simple_type'}, + 'dfn', {'attribute' => 'em'}, + 'dmn', {}, + 'email', {'args' => ['code', 'normal'], + 'function' => \&t2h_default_email, + 'type' => 'simple_type'}, + #'email', {'args' => ['normal', 'normal'], + # 'function' => \&t2h_default_email}, + 'emph', {'attribute' => 'em'}, + 'env', {'args' => ['code'], 'attribute' => 'code'}, + 'file', {'args' => ['code'], 'attribute' => 'tt', 'quote' => '"'}, + 'i', {'attribute' => 'i'}, + 'slanted', {'attribute' => 'i'}, + 'sansserif', {'attribute' => 'span class="sansserif"'}, + 'kbd', {'args' => ['code'], 'attribute' => 'kbd'}, + 'key', {'begin' => '<', 'end' => '>'}, + 'math', {'attribute' => 'em'}, + 'option', {'args' => ['code'], 'attribute' => 'samp', 'quote' => '"'}, + 'r', {'attribute' => 'span class="roman"'}, + 'samp', {'args' => ['code'], 'attribute' => 'samp', 'quote' => '"'}, +# 'sc', {'function' => \&t2h_default_sc}, + 'sc', {'attribute' => 'small'}, + 'strong', {'attribute' => 'strong'}, + 't', {'attribute' => 'tt'}, + 'uref', {'function' => \&t2h_default_uref, + 'args' => ['code', 'normal', 'normal'], + 'type' => 'simple_type' }, + #'uref', {'function' => \&t2h_default_uref, + # 'args' => ['normal', 'normal', 'normal']}, + 'url', {'function' => \&t2h_default_uref, + 'args' => ['code', 'normal', 'normal'], + 'type' => 'simple_type'}, + 'indicateurl', {'args' => ['code'], 'begin' => '<', 'end' => '>','type' => 'simple_type'}, + 'var', {'attribute' => 'var'}, + 'verb', {'args' => ['code'], 'attribute' => 'tt'}, + 'titlefont', {'function' => \&t2h_default_titlefont, + 'type' => 'simple_type'}, + 'w', {'type' => 'simple_type'}, + ); + +%command_type = (); + +foreach my $style (keys(%style_map)) +{ + if (exists($style_map{$style}->{'type'})) + { + $command_type{$style} = $style_map{$style}->{'type'}; + } + else + { + $command_type{$style} = 'style'; + } +} + +%unicode_diacritical = ( + 'H' => '030B', + 'ringaccent' => '030A', + "'" => '0301', + 'v' => '030C', + ',' => '0327', + '^' => '0302', + 'dotaccent' => '0307', + '`' => '0300', + '=' => '0304', + '~' => '0303', + '"' => '0308', + 'udotaccent' => '0323', + 'ubaraccent' => '0332', + 'u' => '0306', + 'tieaccent' => '0361' +); + +%unicode_accents = ( + 'dotaccent' => { # dot above + 'A' => '0226', #C moz-1.2 + 'a' => '0227', #c moz-1.2 + 'B' => '1E02', + 'b' => '1E03', + 'C' => '010A', + 'c' => '010B', + 'D' => '1E0A', + 'd' => '1E0B', + 'E' => '0116', + 'e' => '0117', + 'F' => '1E1E', + 'f' => '1E1F', + 'G' => '0120', + 'g' => '0121', + 'H' => '1E22', + 'h' => '1E23', + 'i' => '0069', + 'I' => '0130', + 'N' => '1E44', + 'n' => '1E45', + 'O' => '022E', #Y moz-1.2 + 'o' => '022F', #v moz-1.2 + 'P' => '1E56', + 'p' => '1E57', + 'R' => '1E58', + 'r' => '1E59', + 'S' => '1E60', + 's' => '1E61', + 'T' => '1E6A', + 't' => '1E6B', + 'W' => '1E86', + 'w' => '1E87', + 'X' => '1E8A', + 'x' => '1E8B', + 'Y' => '1E8E', + 'y' => '1E8F', + 'Z' => '017B', + 'z' => '017C', + }, + 'udotaccent' => { # dot below + 'A' => '1EA0', + 'a' => '1EA1', + 'B' => '1E04', + 'b' => '1E05', + 'D' => '1E0C', + 'd' => '1E0D', + 'E' => '1EB8', + 'e' => '1EB9', + 'H' => '1E24', + 'h' => '1E25', + 'I' => '1ECA', + 'i' => '1ECB', + 'K' => '1E32', + 'k' => '1E33', + 'L' => '1E36', + 'l' => '1E37', + 'M' => '1E42', + 'm' => '1E43', + 'N' => '1E46', + 'n' => '1E47', + 'O' => '1ECC', + 'o' => '1ECD', + 'R' => '1E5A', + 'r' => '1E5B', + 'S' => '1E62', + 's' => '1E63', + 'T' => '1E6C', + 't' => '1E6D', + 'U' => '1EE4', + 'u' => '1EE5', + 'V' => '1E7E', + 'v' => '1E7F', + 'W' => '1E88', + 'w' => '1E89', + 'Y' => '1EF4', + 'y' => '1EF5', + 'Z' => '1E92', + 'z' => '1E93', + }, + 'ubaraccent' => { # line below + 'B' => '1E06', + 'b' => '1E07', + 'D' => '1E0E', + 'd' => '1E0F', + 'h' => '1E96', + 'K' => '1E34', + 'k' => '1E35', + 'L' => '1E3A', + 'l' => '1E3B', + 'N' => '1E48', + 'n' => '1E49', + 'R' => '1E5E', + 'r' => '1E5F', + 'T' => '1E6E', + 't' => '1E6F', + 'Z' => '1E94', + 'z' => '1E95', + }, + ',' => { # cedilla + 'C' => '00C7', + 'c' => '00E7', + 'D' => '1E10', + 'd' => '1E11', + 'E' => '0228', #C moz-1.2 + 'e' => '0229', #c moz-1.2 + 'G' => '0122', + 'g' => '0123', + 'H' => '1E28', + 'h' => '1E29', + 'K' => '0136', + 'k' => '0137', + 'L' => '013B', + 'l' => '013C', + 'N' => '0145', + 'n' => '0146', + 'R' => '0156', + 'r' => '0157', + 'S' => '015E', + 's' => '015F', + 'T' => '0162', + 't' => '0163', + }, + '=' => { # macron + 'A' => '0100', + 'a' => '0101', + 'E' => '0112', + 'e' => '0113', + 'I' => '012A', + 'i' => '012B', + 'G' => '1E20', + 'g' => '1E21', + 'O' => '014C', + 'o' => '014D', + 'U' => '016A', + 'u' => '016B', + 'Y' => '0232', #? moz-1.2 + 'y' => '0233', #? moz-1.2 + }, + '"' => { # diaeresis + 'A' => '00C4', + 'a' => '00E4', + 'E' => '00CB', + 'e' => '00EB', + 'H' => '1E26', + 'h' => '1E27', + 'I' => '00CF', + 'i' => '00EF', + 'O' => '00D6', + 'o' => '00F6', + 't' => '1E97', + 'U' => '00DC', + 'u' => '00FC', + 'W' => '1E84', + 'w' => '1E85', + 'X' => '1E8C', + 'x' => '1E8D', + 'y' => '00FF', + 'Y' => '0178', + }, + 'u' => { # breve + 'A' => '0102', + 'a' => '0103', + 'E' => '0114', + 'e' => '0115', + 'G' => '011E', + 'g' => '011F', + 'I' => '012C', + 'i' => '012D', + 'O' => '014E', + 'o' => '014F', + 'U' => '016C', + 'u' => '016D', + }, + "'" => { # acute + 'A' => '00C1', + 'a' => '00E1', + 'C' => '0106', + 'c' => '0107', + 'E' => '00C9', + 'e' => '00E9', + 'G' => '01F4', + 'g' => '01F5', + 'I' => '00CD', + 'i' => '00ED', + 'K' => '1E30', + 'k' => '1E31', + 'L' => '0139', + 'l' => '013A', + 'M' => '1E3E', + 'm' => '1E3F', + 'N' => '0143', + 'n' => '0144', + 'O' => '00D3', + 'o' => '00F3', + 'P' => '1E54', + 'p' => '1E55', + 'R' => '0154', + 'r' => '0155', + 'S' => '015A', + 's' => '015B', + 'U' => '00DA', + 'u' => '00FA', + 'W' => '1E82', + 'w' => '1E83', + 'Y' => '00DD', + 'y' => '00FD', + 'Z' => '0179', + 'z' => '018A', + }, + '~' => { # tilde + 'A' => '00C3', + 'a' => '00E3', + 'E' => '1EBC', + 'e' => '1EBD', + 'I' => '0128', + 'i' => '0129', + 'N' => '00D1', + 'n' => '00F1', + 'O' => '00D5', + 'o' => '00F5', + 'U' => '0168', + 'u' => '0169', + 'V' => '1E7C', + 'v' => '1E7D', + 'Y' => '1EF8', + 'y' => '1EF9', + }, + '`' => { # grave + 'A' => '00C0', + 'a' => '00E0', + 'E' => '00C8', + 'e' => '00E8', + 'I' => '00CC', + 'i' => '00EC', + 'N' => '01F8', + 'n' => '01F9', + 'O' => '00D2', + 'o' => '00F2', + 'U' => '00D9', + 'u' => '00F9', + 'W' => '1E80', + 'w' => '1E81', + 'Y' => '1EF2', + 'y' => '1EF3', + }, + '^' => { # circumflex + 'A' => '00C2', + 'a' => '00E2', + 'C' => '0108', + 'c' => '0109', + 'E' => '00CA', + 'e' => '00EA', + 'G' => '011C', + 'g' => '011D', + 'H' => '0124', + 'h' => '0125', + 'I' => '00CE', + 'i' => '00EE', + 'J' => '0134', + 'j' => '0135', + 'O' => '00D4', + 'o' => '00F4', + 'S' => '015C', + 's' => '015D', + 'U' => '00DB', + 'u' => '00FB', + 'W' => '0174', + 'w' => '0175', + 'Y' => '0176', + 'y' => '0177', + 'Z' => '1E90', + 'z' => '1E91', + }, + 'ringaccent' => { # ring + 'A' => '00C5', + 'a' => '00E5', + 'U' => '016E', + 'u' => '016F', + 'w' => '1E98', + 'y' => '1E99', + }, + 'v' => { # caron + 'A' => '01CD', + 'a' => '01CE', + 'C' => '010C', + 'c' => '010D', + 'D' => '010E', + 'd' => '010F', + 'E' => '011A', + 'e' => '011B', + 'G' => '01E6', + 'g' => '01E7', + 'H' => '021E', #K with moz-1.2 + 'h' => '021F', #k with moz-1.2 + 'I' => '01CF', + 'i' => '01D0', + 'K' => '01E8', + 'k' => '01E9', + 'L' => '013D', #L' with moz-1.2 + 'l' => '013E', #l' with moz-1.2 + 'N' => '0147', + 'n' => '0148', + 'O' => '01D1', + 'o' => '01D2', + 'R' => '0158', + 'r' => '0159', + 'S' => '0160', + 's' => '0161', + 'T' => '0164', + 't' => '0165', + 'U' => '01D3', + 'u' => '01D4', + 'Z' => '017D', + 'z' => '017E', + }, + 'H' => { # double acute + 'O' => '0150', + 'o' => '0151', + 'U' => '0170', + 'u' => '0171', + }, +); + +%transliterate_accent_map = (); +foreach my $command (keys(%unicode_accents)) +{ + foreach my $letter(keys (%{$unicode_accents{$command}})) + { + $transliterate_accent_map{$unicode_accents{$command}->{$letter}} + = $letter + unless (exists($transliterate_map{$unicode_accents{$command}->{$letter}})); + } +} + +%special_accents = ( + 'ringaccent' => 'aA', + "'" => 'aeiouyAEIOUY', + ',' => 'cC', + '^' => 'aeiouAEIOU', + '`' => 'aeiouAEIOU', + '~' => 'nNaoAO', + '"' => 'aeiouyAEIOU', +); + +foreach my $accent_command ('tieaccent', 'dotless', keys(%unicode_accents)) +{ + $style_map{$accent_command} = { 'function' => \&t2h_default_accent }; + $old_style_map{$accent_command} = '&default_accent'; + $style_map_texi{$accent_command} = { 'function' => \&t2h_default_ascii_accent }; +} + +sub default_accent($$) +{ + my $text = shift; + my $accent = shift; + return "&${text}$accent_map{$accent};" if (defined($accent_map{$accent}) and defined($special_accents{$accent}) and ($text =~ /^[$special_accents{$accent}]$/)); + return '&' . $text . 'ring;' if (($accent eq 'ringaccent') and (defined($special_accents{$accent})) and ($text =~ /^[$special_accents{$accent}]$/)); + return $text . '<' if ($accent eq 'v'); + return "&${text}cedil;" if (($accent eq ',') and (defined($special_accents{$accent})) and ($text =~ /^[$special_accents{$accent}]$/)); + return ascii_accents($text, $accent); +} + +sub t2h_default_accent($$) +{ + my $accent = shift; + my $args = shift; + + my $text = $args->[0]; + + return "&${text}$accent_map{$accent};" if (defined($accent_map{$accent}) and defined($special_accents{$accent}) and ($text =~ /^[$special_accents{$accent}]$/)); + return '&' . $text . 'ring;' if (($accent eq 'ringaccent') and (defined($special_accents{$accent})) and ($text =~ /^[$special_accents{$accent}]$/)); + return $text . '<' if ($accent eq 'v'); + return "&${text}cedil;" if (($accent eq ',') and (defined($special_accents{$accent})) and ($text =~ /^[$special_accents{$accent}]$/)); +# FIXME here there could be a conversion to the character in the right +# encoding, like +# if ($USE_UNICODE and defined($OUT_ENCODING) and $OUT_ENCODING ne '' +# and exists($unicode_accents{$accent}) and exists($unicode_accents{$accent}->{$text})) +# { +# my $encoded_char = Encode::encode($OUT_ENCODING, chr(hex($unicode_map{$thing})), Encode::FB_QUIET); +# return $encoded_char if ($encoded_char ne ''); +# } + if ($USE_NUMERIC_ENTITY) + { + if (exists($unicode_accents{$accent}) and exists($unicode_accents{$accent}->{$text})) + { + return ('&#' . hex($unicode_accents{$accent}->{$text}) . ';'); + } + } + return ascii_accents($text, $accent); +} + +sub ascii_accents($$) +{ + my $text = shift; + my $accent = shift; + return $text if ($accent eq 'dotless'); + return $text . $accent if (defined($accent_map{$accent})); + return $text . "''" if ($accent eq 'H'); + return $text . '.' if ($accent eq 'dotaccent'); + return $text . '*' if ($accent eq 'ringaccent'); + return $text . '[' if ($accent eq 'tieaccent'); + return $text . '(' if ($accent eq 'u'); + return $text . '_' if ($accent eq 'ubaraccent'); + return '.' . $text if ($accent eq 'udotaccent'); + return $text . '<' if ($accent eq 'v'); + return $text . ',' if ($accent eq ','); +} + +sub default_sc($$) +{ + return '' . uc($_[0]) . ''; +} + +# now unused, upcasing is done in normal_text +sub t2h_default_sc($$$) +{ + shift; + my $args = shift; + return '' . uc($args->[0]) . ''; +} + +sub default_ctrl($$) +{ + return "^$_[0]"; +} + +sub t2h_default_ctrl($$$) +{ + shift; + my $args = shift; + return "^$args->[0]"; +} + +sub default_sc_pre($$) +{ + return uc($_[0]); +} + +# now unused, upcasing is done in normal_text +sub t2h_default_sc_pre($$$) +{ + shift; + my $args = shift; + return uc($args->[0]); +} + +sub default_titlefont($$) +{ + return "

    $_[0]

    " if ($_[0] =~ /\S/); + return ''; +} + +# Avoid adding h1 if the text is empty +sub t2h_default_titlefont($$$) +{ + shift; + my $args = shift; + return "

    $args->[0]

    " if ($args->[0] =~ /\S/); + return ''; +} + +# At some point in time (before 4.7?) according to the texinfo +# manual, url shouldn't lead to a link but rather be formatted +# like text. It is now what indicateurl do, url is the same that +# uref with one arg. If we did like makeinfo did it would have been +#sub url($$) +#{ +# return '<' . $_[0] . '>'; +#} +# +# This is unused, t2h_default_uref is used instead +sub t2h_default_url ($$) +{ + shift; + my $args = shift; + my $url = shift @$args; + #$url =~ s/\s*$//; + #$url =~ s/^\s*//; + $url = main::normalise_space($url); + return '' unless ($url =~ /\S/); + return &$anchor('', $url, $url); +} + +sub default_url ($$) +{ + my $url = shift; + my $command = shift; + $url =~ s/\s*$//; + $url =~ s/^\s*//; + return '' unless ($url =~ /\S/); + return &$anchor('', $url, $url); +} + +sub default_uref($$) +{ + my $arg = shift; + my $command = shift; + my ($url, $text, $replacement); + ($url, $text, $replacement) = split /,\s*/, $arg; + $url =~ s/\s*$//; + $url =~ s/^\s*//; + $text = $replacement if (defined($replacement)); + $text = $url unless ($text); + return $text if ($url eq ''); + return &$anchor('', $url, $text); +} + +sub t2h_default_uref($$) +{ + shift; + my $args = shift; + my $url = shift @$args; + my $text = shift @$args; + my $replacement = shift @$args; + #$url =~ s/\s*$//; + #$url =~ s/^\s*//; + $url = main::normalise_space($url); + $replacement = '' if (!defined($replacement)); + $replacement = main::normalise_space($replacement); + $text = '' if (!defined($text)); + $text = main::normalise_space($text); + $text = $replacement if ($replacement ne ''); + $text = $url unless ($text ne ''); + return $text if ($url eq ''); + return &$anchor('', $url, $text); +} + +sub default_email($$) +{ + my $arg = shift; + my $command = shift; + my ($mail, $text); + ($mail, $text) = split /,\s*/, $arg; + $mail =~ s/\s*$//; + $mail =~ s/^\s*//; + $text = $mail unless ($text); + return $text if ($mail eq ''); + return &$anchor('', "mailto:$mail", $text); +} + +sub t2h_default_email($$) +{ + my $command = shift; + my $args = shift; + my $mail = shift @$args; + my $text = shift @$args; + $mail = main::normalise_space($mail); + #$mail =~ s/\s*$//; + #$mail =~ s/^\s*//; + $text = $mail unless (defined($text) and ($text ne '')); + $text = main::normalise_space($text); + return $text if ($mail eq ''); + return &$anchor('', "mailto:$mail", $text); +} + +sub t2h_default_ascii_accent($$$$) +{ + my $accent = shift; + my $args = shift; + + my $text = $args->[0]; + return ascii_accents($text, $accent); +} + +sub t2h_default_no_texi_email +{ + my $command = shift; + my $args = shift; + my $mail = shift @$args; + my $text = shift @$args; + $mail = main::normalise_space($mail); + #$mail =~ s/\s*$//; + #$mail =~ s/^\s*//; + return $text if (defined($text) and ($text ne '')); + return $mail; +} + +sub t2h_default_no_texi_image($$$$) +{ + my $command = shift; + my $args = shift; + my $text = $args->[0]; + $text = main::normalise_space($text); + my @args = split (/\s*,\s*/, $text); + return $args[0]; +} + +sub t2h_default_no_texi_acronym_like($$) +{ + my $command = shift; + my $args = shift; + my $acronym_texi = $args->[0]; + return (main::remove_texi($acronym_texi)); +} + +sub t2h_remove_command($$$$) +{ + return ''; +} + +# This is used for style in preformatted sections +my %old_style_map_pre = %old_style_map; +$old_style_map_pre{'sc'} = '&default_sc_pre'; +$old_style_map_pre{'titlefont'} = ''; + +foreach my $command (keys(%style_map)) +{ + $style_map_pre{$command} = {}; + $style_map_texi{$command} = {} if (!exists($style_map_texi{$command})); + $style_map_texi{$command}->{'args'} = $style_map{$command}->{'args'} + if (exists($style_map{$command}->{'args'})); + #print STDERR "COMMAND $command"; + + foreach my $key (keys(%{$style_map{$command}})) + { + $style_map_pre{$command}->{$key} = $style_map{$command}->{$key}; + } +} + +#$style_map_pre{'sc'}->{'function'} = \&t2h_default_sc_pre; +$style_map_pre{'sc'} = {}; +$style_map_pre{'titlefont'} = {}; + +#$style_map_texi{'sc'}->{'function'} = \&t2h_default_sc_pre; +$style_map_texi{'sc'} = {}; +$style_map_texi{'email'}->{'function'} = \&t2h_default_no_texi_email; + +####### special styles. You shouldn't need to change them +my %special_style = ( + #'xref' => ['keep','normal','normal','keep','normal'], + 'xref' => { 'args' => ['keep','keep','keep','keep','keep'], + 'function' => \&main::do_xref }, + 'ref' => { 'args' => ['keep','keep','keep','keep','keep'], + 'function' => \&main::do_xref }, + 'pxref' => { 'args' => ['keep','keep','keep','keep','keep'], + 'function' => \&main::do_xref }, + 'inforef' => { 'args' => ['keep','keep','keep'], + 'function' => \&main::do_xref }, + 'image' => { 'args' => ['keep'], 'function' => \&main::do_image }, + 'anchor' => { 'args' => ['keep'], 'function' => \&main::do_anchor_label }, + 'footnote' => { 'args' => ['keep'], 'function' => \&main::do_footnote }, + 'shortcaption' => { 'args' => ['keep'], 'function' => \&main::do_caption_shortcaption }, + 'caption' => { 'args' => ['keep'], 'function' => \&main::do_caption_shortcaption }, + 'acronym', {'args' => ['keep','keep'], 'function' => \&main::do_acronym_like}, + 'abbr', {'args' => ['keep','keep'], 'function' => \&main::do_acronym_like}, +); + +# @image is replaced by the first arg in strings +$style_map_texi{'image'} = { 'args' => ['keep'], + 'function' => \&t2h_default_no_texi_image }; + +$style_map_texi{'acronym'} = { 'args' => ['keep','keep'], + 'function' => \&t2h_default_no_texi_acronym_like }; +$style_map_texi{'abbr'} = { 'args' => ['keep','keep'], + 'function' => \&t2h_default_no_texi_acronym_like }; + +foreach my $special (keys(%special_style)) +{ + $style_map{$special} = $special_style{$special} + unless (defined($style_map{$special})); + $style_map_pre{$special} = $special_style{$special} + unless (defined($style_map_pre{$special})); + $style_map_texi{$special} = { 'args' => ['keep'], + 'function' => \&t2h_remove_command } + unless (defined($style_map_texi{$special})); +} +####### end special styles. + + +#foreach my $command (keys(%style_map)) +#{ +# print STDERR "STYLE_MAP_TEXI $command($style_map_texi{$command}) "; +# print STDERR "ARGS $style_map_texi{$command}->{'args'} " if (defined($style_map_texi{$command}->{'args'})); +# print STDERR "FUN $style_map_texi{$command}->{'function'} " if (defined($style_map_texi{$command}->{'function'})); +# print STDERR "\n"; +#} + +# uncomment to use the old interface +#%style_map = %old_style_map; +#%style_map_pre = %old_style_map_pre; + +%simple_format_simple_map_texi = %simple_map_pre; +%simple_format_texi_map = %pre_map; +%simple_format_style_map_texi = (); + +foreach my $command (keys(%style_map_texi)) +{ + #$simple_format_style_map_texi{$command} = {}; + foreach my $key (keys (%{$style_map_texi{$command}})) + { + #print STDERR "$command, $key, $style_map_texi{$command}->{$key}\n"; + $simple_format_style_map_texi{$command}->{$key} = + $style_map_texi{$command}->{$key}; + } + $simple_format_style_map_texi{$command} = {} if (!defined($simple_format_style_map_texi{$command})); +} + +foreach my $accent_command ('tieaccent', 'dotless', keys(%unicode_accents)) +{ +# $simple_format_style_map_texi{$accent_command}->{'args'} = ['normal']; + $simple_format_style_map_texi{$accent_command}->{'function'} = \&t2h_default_accent; +} + +%format_map = ( +# 'quotation' => 'blockquote', + # lists +# 'itemize' => 'ul', + 'enumerate' => 'ol', + 'multitable' => 'table', + 'table' => 'dl compact="compact"', + 'vtable' => 'dl compact="compact"', + 'ftable' => 'dl compact="compact"', + 'group' => '', + ); + +%special_list_commands = ( + 'table' => {}, + 'vtable' => {}, + 'ftable' => {}, + 'itemize' => { 'bullet' => '' } + ); +# +# texinfo format to align attribute of paragraphs +# + +%paragraph_style = ( + 'center' => 'center', + 'flushleft' => 'left', + 'flushright' => 'right', + ); + +# an eval of these $complex_format_map->{what}->{'begin'} yields beginning +# an eval of these $complex_format_map->{what}->{'end'} yields end +# $EXAMPLE_INDENT_CELL and SMALL_EXAMPLE_INDENT_CELL can be usefull here +$complex_format_map = +{ + 'example' => + { + 'begin' => q{"
    ' . &$I('Button') . " ' . &$I('Name') . " ' . &$I('Go to') . " ' . &$I('From 1.2.3 go to') . "
    "; + $about .= + ($ICONS && $ACTIVE_ICONS{$button} ? + &$button_icon_img($BUTTONS_NAME{$button}, $ACTIVE_ICONS{$button}) : + ' [' . $NAVIGATION_TEXT{$button} . '] '); + $about .= "$BUTTONS_GOTO{$button}$BUTTONS_EXAMPLE{$button}
    $EXAMPLE_INDENT_CELL
    "}, + 'end' => q{"
    \n"}, + }, + 'smallexample' => + { + 'begin' => q{"$SMALL_EXAMPLE_INDENT_CELL
    "}, + 'end' => q{"
    \n"}, + }, + 'display' => + { + 'begin' => q{"$EXAMPLE_INDENT_CELL
    "}, + 'end' => q{"
    \n"}, + }, + 'smalldisplay' => + { + 'begin' => q{"$SMALL_EXAMPLE_INDENT_CELL
    "}, + 'end' => q{"
    \n"}, + } +}; + +# format shouldn't narrow the margins + +$complex_format_map->{'lisp'} = $complex_format_map->{'example'}; +$complex_format_map->{'smalllisp'} = $complex_format_map->{'smallexample'}; +$complex_format_map->{'format'} = $complex_format_map->{'display'}; +$complex_format_map->{'smallformat'} = $complex_format_map->{'smalldisplay'}; + +%def_map = ( + # basic commands + 'deffn', [ 'f', 'category', 'name', 'arg' ], + 'defvr', [ 'v', 'category', 'name' ], + 'deftypefn', [ 'f', 'category', 'type', 'name', 'arg' ], + 'deftypeop', [ 'f', 'category', 'class' , 'type', 'name', 'arg' ], + 'deftypevr', [ 'v', 'category', 'type', 'name' ], + 'defcv', [ 'v', 'category', 'class' , 'name' ], + 'deftypecv', [ 'v', 'category', 'class' , 'type', 'name' ], + 'defop', [ 'f', 'category', 'class' , 'name', 'arg' ], + 'deftp', [ 't', 'category', 'name', 'arg' ], + # shortcuts + # FIXME i18n + 'defun', 'deffn Function', + 'defmac', 'deffn Macro', + 'defspec', 'deffn {Special Form}', + 'defvar', 'defvr Variable', + 'defopt', 'defvr {User Option}', + 'deftypefun', 'deftypefn {Function}', + 'deftypevar', 'deftypevr Variable', + 'defivar', 'defcv {Instance Variable}', + 'deftypeivar', 'deftypecv {Instance Variable}', + 'defmethod', 'defop Method', + 'deftypemethod', 'deftypeop Method', + ); + +# basic x commands +foreach my $key (keys(%def_map)) +{ + $def_map{$key . 'x'} = $def_map{$key}; +} + +# +# miscalleneous commands +# +# Depending on the value, the command arg or spaces following the command +# are handled differently: +# +# the value is a reference on a hash. +# the hash keys are +# 'arg' if the value is 'line' then the remaining of the line is the arg +# if it is a number it is the number of args (separated by spaces) +# 'skip' if the value is 'line' then the remaining of the line is skipped +# if the value is 'space' space but no newline is skipped +# if the value is 'whitespace' space is skipped +# if the value is 'linewhitespace' space is skipped if there are +# only spaces remaining on the line +# if the value is 'linespace' space but no newline is skipped if +# there are only spaces remaining on the line +# 'texi' if true it is some texinfo code and @value and @macros are expanded +# 'keep' if true the args and the macro are kept, otherwise the macro +# args and skipped stuffs are removed +%misc_command = ( + # not needed for formatting + 'raisesections' => {'skip' => 'line'}, # no arg + 'lowersections' => {'skip' => 'line'}, # no arg + 'contents' => {}, # no arg + 'shortcontents' => {}, # no arg + 'summarycontents'=> {}, # no arg + 'setcontentsaftertitlepage' => {}, # no arg + 'setshortcontentsaftertitlepage' => {}, # no arg + 'detailmenu' => {'skip' => 'whitespace'}, # no arg + 'end detailmenu' => {'skip' => 'space'}, # no arg + 'bye' => {'skip' => 'line'}, # no arg + # comments + 'comment' => {'arg' => 'line'}, + 'c' => {'arg' => 'line'}, + # in preamble + 'novalidate' => {}, # no arg + 'dircategory'=> {'skip' => 'line'}, # line. Position with regard + # with direntry is significant + 'pagesizes' => {'skip' => 'line', 'arg' => 2}, # can have 2 args + # or one? 200mm,150mm 11.5in + 'finalout' => {}, # no arg + 'paragraphindent' => {'skip' => 'line', 'arg' => 1}, # arg none asis + # or a number and forbids anything else on the line + 'firstparagraphindent' => {'skip' => 'line', 'arg' => 1}, # none insert + 'frenchspacing' => {'arg' => 1}, # on off + 'exampleindent' => {'skip' => 'line', 'arg' => 1}, # asis or a number + 'footnotestyle'=> {'skip' => 'line', 'arg' => 1}, # end and separate + # and nothing else on the line + 'afourpaper' => {'skip' => 'line'}, # no arg + 'afourlatex' => {'skip' => 'line'}, # no arg + 'afourwide' => {'skip' => 'line'}, # no arg + 'headings'=> {'skip' => 'line', 'arg' => 1}, + #off on single double singleafter doubleafter + # interacts with setchapternewpage + 'setchapternewpage' => {'skip' => 'line', 'arg' => 1}, # off on odd + 'everyheading' => {'arg' => 'line'}, + 'everyfooting' => {'arg' => 'line'}, + 'evenheading' => {'arg' => 'line'}, + 'evenfooting' => {'arg' => 'line'}, + 'oddheading' => {'arg' => 'line'}, + 'oddfooting' => {'arg' => 'line'}, + 'smallbook' => {'skip' => 'line'}, # no arg + 'setfilename' => {'arg' => 'line'}, + 'shorttitle' => {'arg' => 'line', 'texi' => 1}, + 'shorttitlepage' => {'arg' => 'line', 'texi' => 1}, + 'settitle' => {'arg' => 'line', 'texi' => 1}, + 'author' => {'arg' => 'line', 'texi' => 1}, + 'subtitle' => {'arg' => 'line', 'texi' => 1}, + 'title' => {'arg' => 'line', 'texi' => 1}, + 'syncodeindex' => {'skip' => 'linespace', 'arg' => 2}, + # args are index identifiers + 'synindex' => {'skip' => 'linespace', 'arg' => 2}, + 'defindex' => {'skip' => 'line', 'arg' => 1}, # one identifier arg + 'defcodeindex' => {'skip' => 'line', 'arg' => 1}, # one identifier arg + 'documentlanguage' => {'skip' => 'whitespace', 'arg' => 1}, + # language code arg + 'kbdinputstyle' => {'skip' => 'whitespace', 'arg' => 1}, # code + #example distinct + 'sp' => {'skip' => 'whitespace', 'arg' => 1}, # no arg + # at the end of line or a numerical arg + # formatting + 'page' => {}, # no arg (pagebreak) + 'refill' => {}, # no arg (obsolete, to be ignored) + 'noindent' => {'skip' => 'whitespace'}, # no arg + 'indent' => {'skip' => 'whitespace'}, + 'need' => {'skip' => 'line', 'arg' => 1}, # one numerical/real arg + 'exdent' => {'skip' => 'space'}, + # not valid for info (should be in @iftex) + 'vskip' => {'arg' => 'line'}, # arg line in TeX + 'cropmarks' => {}, # no arg + # miscalleneous + 'verbatiminclude'=> {'skip' => 'line'}, + 'documentencoding' => {'arg' => 1}, # makeinfo ignore the whole line + # ??? + 'filbreak' => {}, + # obsolete @-commands + 'quote-arg' => {}, + 'allow-recursion' => {}, + ); +my %misc_command_old = ( + # not needed for formatting + 'raisesections', 'line', # no arg + 'lowersections', 'line', # no arg + 'contents', 1, # no arg + 'shortcontents', 1, # no arg + 'summarycontents', 1, # no arg + 'detailmenu', 'whitespace', # no arg + 'end detailmenu', 'space', # no arg + #'end detailmenu', 1, # no arg + 'novalidate', 1, # no arg + 'bye', 'line', # no arg + # comments + 'comment', 'line', + 'c', 'line', + # in preamble + 'dircategory', 'line', # line. Position with regard with direntry is + # significant + 'pagesizes', 'line arg2', # can have 2 args + 'finalout', 1, # no arg + 'paragraphindent', 'line arg1', # in fact accepts only none asis + # or a number and forbids anything else on the line + 'firstparagraphindent', 'line arg1', # in fact accepts only none insert + 'exampleindent', 'line arg1', # in fact accepts only asis or a number + 'footnotestyle', 'line arg1', # in fact accepts only end and separate + # and nothing else on the line + 'afourpaper', 'line', # no arg + 'afourlatex', 'line', # no arg + 'afourwide', 'line', # no arg + 'headings', 'line', # one arg, possibilities are + #off on single double singleafter doubleafter + # interacts with setchapternewpage + 'setchapternewpage', 'line', # no arg + 'everyheading', 'line', + 'everyfooting', 'line', + 'evenheading', 'line', + 'evenfooting', 'line', + 'oddheading', 'line', + 'oddfooting', 'line', + 'smallbook', 'line', # no arg + 'setfilename', 'line', + 'shorttitle', 'linetexi', + 'shorttitlepage', 'linetexi', + 'settitle', 'linetexi', + 'author', 'linetexi', + 'subtitle', 'linetexi', + 'title','linetexi', + 'syncodeindex','linespace arg2', # args are + 'synindex','linespace arg2', + 'defindex', 'line arg1', # one identifier arg + 'defcodeindex', 'line arg1', # one identifier arg + 'documentlanguage', 'whitespace arg1', # one language code arg + 'kbdinputstyle', 'whitespace arg1', # one arg within + #code example distnct + 'sp', 'whitespace arg1', # no arg at the en of line or a numerical arg + # formatting + 'page', 1, # no arg (pagebreak) + 'refill', 1, # no arg (obsolete, to be ignored)) + 'noindent', 'space', # no arg + 'need', 'line arg1', # one numerical/real arg + 'exdent', 'space', + # not valid for info (should be in @iftex) + 'vskip', 'line', # arg line in TeX + 'cropmarks', 1, # no arg + # miscalleneous + 'verbatiminclude', 'line', + 'documentencoding', 'arg1', + # ??? + 'filbreak', 1, + ); + +%format_in_paragraph = ( + 'group' => 1, + 'html' => 1, +); +# map mapping css specification to style + +%css_map = + ( + 'ul.toc' => "$TOC_LIST_STYLE", + 'pre.menu-comment' => "$MENU_PRE_STYLE", + 'pre.menu-preformatted' => "$MENU_PRE_STYLE", + 'a.summary-letter' => 'text-decoration: none', + 'pre.display' => 'font-family: serif', + 'pre.smalldisplay' => 'font-family: serif; font-size: smaller', + 'pre.smallexample' => 'font-size: smaller', + 'span.sansserif' => 'font-family:sans-serif; font-weight:normal;', + 'span.roman' => 'font-family:serif; font-weight:normal;' + ); + +$css_map{'pre.format'} = $css_map{'pre.display'}; +$css_map{'pre.smallformat'} = $css_map{'pre.smalldisplay'}; +$css_map{'pre.smalllisp'} = $css_map{'pre.smallexample'}; + +# The command_handler arrays are for commands formatted externally. +# The function references in @command_handler_init are called +# before the second pass, before the @-commands text collection. +# Those in @command_handler_process are called between the second pass +# and the third pass, after collection of @-commands text and before their +# expansion. +# Those in @command_handler_process are called after the third pass, +# after the document generation. +@command_handler_init = (); +@command_handler_process = (); +@command_handler_finish = (); + +# the keys of %command_handler are @-command names and the value +# is a hash reference with the following keys: +# 'init' function reference used to collect the @-command text +# 'expand' function reference used when expanding the @-command text +%command_handler = (); + +# formatting functions + +$anchor = \&t2h_default_anchor; +$def_item = \&t2h_default_def_item; +$def = \&t2h_default_def; +$menu = \&t2h_default_menu; +$menu_link = \&t2h_default_menu_link; +$menu_comment = \&t2h_default_menu_comment; +$menu_description = \&t2h_default_menu_description; +$simple_menu_link = \&t2h_default_simple_menu_link; +$external_ref = \&t2h_default_external_ref; +$external_href = \&t2h_default_external_href; +$internal_ref = \&t2h_default_internal_ref; +$table_item = \&t2h_default_table_item; +$table_line = \&t2h_default_table_line; +$table_list = \&t2h_default_table_list; +$row = \&t2h_default_row; +$cell = \&t2h_default_cell; +$list_item = \&t2h_default_list_item; +$comment = \&t2h_default_comment; +$def_line = \&t2h_default_def_line; +$def_line_no_texi = \&t2h_default_def_line_no_texi; +$raw = \&t2h_default_raw; +$raw_no_texi = \&t2h_default_raw_no_texi; +$heading = \&t2h_default_heading; +$paragraph = \&t2h_default_paragraph; +$preformatted = \&t2h_default_preformatted; +$foot_line_and_ref = \&t2h_default_foot_line_and_ref; +$foot_section = \&t2h_default_foot_section; +$image_files = \&t2h_default_image_files; +$image = \&t2h_default_image; +$address = \&t2h_default_address; +$index_entry_label = \&t2h_default_index_entry_label; +$index_summary = \&t2h_default_index_summary; +$summary_letter = \&t2h_default_summary_letter; +$index_entry = \&t2h_default_index_entry; +$index_letter = \&t2h_default_index_letter; +$print_index = \&t2h_default_print_index; +$protect_text = \&t2h_default_protect_text; +$normal_text = \&t2h_default_normal_text; +$complex_format = \&t2h_default_complex_format; +$cartouche = \&t2h_default_cartouche; +$sp = \&t2h_default_sp; +$definition_category = \&t2h_default_definition_category; +$copying_comment = \&t2h_default_copying_comment; +$index_summary_file_entry = \&t2h_default_index_summary_file_entry; +$index_summary_file_end = \&t2h_default_index_summary_file_end; +$index_summary_file_begin = \&t2h_default_index_summary_file_begin; +$empty_line = \&t2h_default_empty_line; +$unknown = \&t2h_default_unknown; +$unknown_style = \&t2h_default_unknown_style; +$caption_shortcaption = \&t2h_caption_shortcaption; +$float = \&t2h_default_float; +$listoffloats = \&t2h_default_listoffloats; +$listoffloats_entry = \&t2h_default_listoffloats_entry; +$listoffloats_caption = \&t2h_default_listoffloats_caption; +$listoffloats_float_style = \&t2h_default_listoffloats_float_style; +$listoffloats_style = \&t2h_default_listoffloats_style; +$acronym_like = \&t2h_default_acronym_like; +$quotation = \&t2h_default_quotation; +$quotation_prepend_text = \&t2h_default_quotation_prepend_text; +$paragraph_style_command = \&t2h_default_paragraph_style_command; +$heading_texi = \&t2h_default_heading_texi; +$index_element_heading_texi = \&t2h_default_index_element_heading_texi; + +# This function is called whenever a complex format is processed +# +# arguments: +# name of the format +# text appearing inside the format +# +# an eval of $complex_format->{format name}->{'begin'} should lead to the +# beginning of the complex format, an eval of +# $complex_format->{format name}->{'end'} should lead to the end of the +# complex format. +sub t2h_default_complex_format($$) +{ + my $name = shift; + my $text = shift; + return '' if ($text eq ''); + my $beginning = eval "$complex_format_map->{$name}->{'begin'}"; + if ($@ ne '') + { + print STDERR "$ERROR Evaluation of $complex_format_map->{$name}->{'begin'}: $@"; + $beginning = ''; + + } + my $end = eval "$complex_format_map->{$name}->{'end'}"; + if ($@ ne '') + { + print STDERR "$ERROR Evaluation of $complex_format_map->{$name}->{'end'}: $@"; + $end = ''; + + } + return $beginning . $text . $end; +} + +sub t2h_default_empty_line($$) +{ + my $text = shift; + my $state = shift; + #ignore the line if it just follows a deff + return '' if ($state->{'deff_line'}); + return $text; +} + +sub t2h_default_unknown($$$$) +{ + my $macro = shift; + my $line = shift; + my $stack = shift; + my $state = shift; + + my ($result_line, $result, $result_text, $message); + return ($line, 0, undef, undef); +} + +sub t2h_default_unknown_style($$$$) +{ + my $command = shift; + my $text = shift; + my $state = shift; + + my ($result, $result_text, $message); + return (0, undef, undef); +} + +sub t2h_caption_shortcaption($) +{ + my $float = shift; + my $caption_lines; + my $shortcaption_lines; + my $style = $float->{'style_texi'}; + if (defined($float->{'nr'})) + { + my $nr = $float->{'nr'}; + if ($style ne '') + { + $style = &$I('%{style} %{number}', { 'style' => $style, 'number' => $nr}); + } + else + { + $style = $nr; + } + } + + if (defined($float->{'caption_texi'})) + { + @$caption_lines = @{$float->{'caption_texi'}}; + if (defined($style)) + { + $caption_lines->[0] = '@strong{' . &$I('%{style}: %{caption_first_line}', { 'style' => $style, 'caption_first_line' => $caption_lines->[0] }); + } + else + { + $caption_lines->[0] = '@strong{' . $caption_lines->[0]; + } + push @$caption_lines, "}\n"; + } + elsif (defined($style)) + { + $caption_lines->[0] = '@strong{' . $style . '}' . "\n"; + } + if (defined($float->{'shortcaption_texi'})) + { + @$shortcaption_lines = @{$float->{'shortcaption_texi'}}; + if (defined($style)) + { + $shortcaption_lines->[0] = '@strong{' . &$I('%{style}: %{shortcaption_first_line}', { 'style' => $style, 'shortcaption_first_line' => $shortcaption_lines->[0] }); + } + else + { + $shortcaption_lines->[0] = '@strong{' . $shortcaption_lines->[0]; + } + push @$shortcaption_lines, "}\n"; + } + elsif (defined($style)) + { + $shortcaption_lines->[0] = '@strong{' . $style . '}' . "\n"; + } + return ($caption_lines, $shortcaption_lines); +} + +sub t2h_default_float($$$$$) +{ + my $text = shift; + my $float = shift; + my $caption = shift; + my $shortcaption = shift; + + my $label = ''; + if (exists($float->{'id'})) + { + $label = &$anchor($float->{'id'}); + } + my $caption_text = ''; + + if (defined($float->{'caption_texi'})) + { + $caption_text = $caption; + } + elsif (defined($float->{'shortcaption_texi'})) + { + $caption_text = $shortcaption; + } + elsif (defined($caption)) + { + $caption_text = $caption; + } + + return '

    ' . "$label\n" . $text . '
    ' . $caption_text; +} + +sub t2h_default_listoffloats_style($) +{ + my $style_texi = shift; + return ($style_texi); +} + +sub t2h_default_listoffloats_float_style($$) +{ + my $style_texi = shift; + my $float = shift; + + my $style = $float->{'style_texi'}; + if (defined($float->{'nr'})) + { + my $nr = $float->{'nr'}; + if ($style ne '') + { + $style = &$I('%{style} %{number}', { 'style' => $style, 'number' => $nr}); + } + else + { + $style = $nr; + } + } + return $style; +} + +sub t2h_default_listoffloats_caption($) +{ + my $float = shift; + if (defined($float->{'shortcaption_texi'})) + { + return [ @{$float->{'shortcaption_texi'}} ]; + } + elsif (defined($float->{'caption_texi'})) + { + return [ @{$float->{'caption_texi'}} ]; + } + return [ ]; +} + +sub t2h_default_listoffloats_entry($$$$) +{ + my $style_texi = shift; + my $float = shift; + my $float_style = shift; + my $caption = shift; + my $href = shift; + + return '
    ' . &$anchor('', $href, $float_style) . '
    ' . $caption +. '
    ' . "\n"; +} + +sub t2h_default_listoffloats($$$) +{ + my $style_texi = shift; + my $style = shift; + my $float_entries = shift; + + my $result = "
    \n" ; + foreach my $float_entry (@$float_entries) + { + $result .= $float_entry; + } + return $result . "
    \n"; +} + +# This function is used to protect characters which are special in html +# in inline text: &, ", <, and >. +# +# argument: +# text to be protected +sub t2h_default_protect_text($) +{ + my $text = shift; + $text =~ s/&/&/g; + $text =~ s//>/g; + $text =~ s/\"/"/g; + return $text; +} + + +sub in_small_caps($) +{ + my $style_stack = shift; + my $in_sc = 0; + if ($style_stack and scalar(@{$style_stack})) + { + my $level = $#$style_stack; + #print STDERR ":::$level ::@{$style_stack}\n"; + while ($level >= 0) + { + if ($style_stack->[$level] eq 'sc') + { + $in_sc = 1; + last; + } + $level--; + } + } + return $in_sc; +} +# +# +sub t2h_default_normal_text($$$$$) +{ + my $text = shift; + my $in_raw_text = shift; + my $in_preformatted = shift; + my $in_code = shift; + my $style_stack = shift; + $text = uc($text) if (in_small_caps($style_stack)); + $text = &$protect_text($text) unless($in_raw_text); + if (! $in_code and !$in_preformatted) + { + if ($USE_ISO and !$in_raw_text) + { + $text =~ s/---/\&mdash\;/g; + $text =~ s/--/\&ndash\;/g; + $text =~ s/``/\&ldquo\;/g; + $text =~ s/''/\&rdquo\;/g; + } + else + { + if ($in_raw_text) #FIXME really do that ? + { + $text =~ s/``/"/g; + $text =~ s/''/"/g; + } + else + { + $text =~ s/``/"/g; + $text =~ s/''/"/g; + } + # temporary reuse '' to store --- !.... + # FIXME won't '---' be handled wrongly? + # FIXME really do that in raw text? + $text =~ s/---/''/g; + $text =~ s/--/-/g; + $text =~ s/''/--/g; + } + } + return $text; +} + +# This function produces an anchor +# +# arguments: +# $name : anchor name +# $href : anchor href +# text : text displayed +# extra_attribs : added to anchor attributes list +sub t2h_default_anchor($;$$$) +{ + my $name = shift; + my $href = shift; + my $text = shift; + my $attributes = shift; +#print STDERR "!$name!$href!$text!$attributes!\n"; + if (!defined($attributes) or ($attributes !~ /\S/)) + { + $attributes = ''; + } + else + { + $attributes = ' ' . $attributes; + } + $name = '' if (!defined($name) or ($name !~ /\S/)); + $href = '' if (!defined($href) or ($href !~ /\S/)); + $text = '' if (!defined($text)); + return $text if (($name eq '') and ($href eq '')); + $name = "name=\"$name\"" if ($name ne ''); + $href = "href=\"$href\"" if ($href ne ''); + $href = ' ' . $href if (($name ne '') and ($href ne '')); +#print STDERR "!!!$name!$href!$text!$attributes!\n"; + return "$text"; +} + +# This function is used to format the text associated with a @deff/@end deff +# +# argument: +# text +# +# $DEF_TABLE should be used to distinguish between @def formatted as table +# and as definition lists. +sub t2h_default_def_item($) +{ + my $text = shift; + if ($text =~ /\S/) + { + if (! $DEF_TABLE) + { + return '
    ' . $text . '
    '; + } + else + { + return '' . $text . ''; + } + } + return ''; +} + +sub t2h_default_definition_category($$$) +{ + my $name = shift; + my $class = shift; + my $style = shift; + return ($name) if (!defined($class) or $class =~ /^\s*$/); + if ($style eq 'f') + { + return &$I('%{name} on %{class}', { 'name' => $name, 'class' => $class }); + } + elsif ($style eq 'v') + { + return &$I('%{name} of %{class}', { 'name' => $name, 'class' => $class }); + } + else + { + return $name; + } +} + +# format the container for the @deffn line and text +# +# argument +# text of the whole @def, line and associated text. +# +# $DEF_TABLE should be used. +sub t2h_default_def($) +{ + my $text = shift; + if ($text =~ /\S/) + { + if (! $DEF_TABLE) + { + return "
    \n" . $text . "
    \n"; + } + else + { + return "\n" . $text . "
    \n"; + } + } + return ''; + +} + +# a whole menu +# +# argument: +# the whole menu text (entries and menu comments) +# +# argument: +# whole menu text. +sub t2h_default_menu($) +{ + my $text = shift; + if ($text =~ /\S/) + { + return "\n" + . $text . "
    \n"; + } +} + +# a simple menu entry ref in case we aren't in a standard menu context +sub t2h_default_simple_menu_link($$$$$$) +{ + my $entry = shift; + my $preformatted = shift; + my $href = shift; + my $node = shift; + my $name = shift; + my $ending = shift; + $ending = '' if (!defined($ending)); + if (($entry eq '') or $NODE_NAME_IN_MENU or $preformatted) + { + $name .= ':' if ($name ne ''); + $entry = "$MENU_SYMBOL$name$node"; + } + $entry = &$anchor('', $href, $entry) if ($href); + $entry .= $ending if ($preformatted); + $entry .= ' ' unless $preformatted; + return $entry; +} + +# formats a menu entry link pointing to a node or section +# +# arguments: +# the entry text +# the state, a hash reference holding informations about the context, with a +# usefull entry, 'preformatted', true if we are in a preformatted format +# (a format keeping space between words). In that case a function +# of the main program, main::do_preformatted($text, $state) might +# be used to format the text with the current format style. +# href is optionnal. It is the reference to the section or the node anchor +# which should be used to make the link (typically it is the argument +# of a href= attribute in a element). +sub t2h_default_menu_link($$$$$$) +{ + my $entry = shift; + my $state = shift; + my $href = shift; + my $node = shift; + my $name = shift; + my $ending = shift; +#print STDERR "MENU_LINK\n"; + if (($entry eq '') or $NODE_NAME_IN_MENU or $state->{'preformatted'}) + { + $name .= ':' if ($name ne ''); + $entry = "$MENU_SYMBOL$name$node"; + } + $entry = &$anchor ('', $href, $entry) if (defined($href)); + return $entry if ($SIMPLE_MENU); + if ($state->{'preformatted'}) + { + return '' . main::do_preformatted($entry . $ending, $state); + } + return "$entry  "; +} + +sub simplify_text($) +{ + my $text = shift; + $text =~ s/[^\w]//og; + return $text; +} + +# formats a menu entry description, ie the text appearing after the node +# specification in a menu entry an spanning until there is another +# menu entry, an empty line or some text at the very beginning of the line +# (we consider that text at the beginning of the line begins a menu comment) +# +# arguments: +# the description text +# the state. See menu_entry. +# the heading of the element associated with the node. +sub t2h_default_menu_description($$$) +{ + my $text = shift; + my $state = shift; + my $element_text = shift; + return $text if ($SIMPLE_MENU); +#print STDERR "MENU_DESCRIPTION element_text!$element_text, text!$text\n"; + if ($state->{'preformatted'}) + { + return main::do_preformatted($text, $state) . ''; + } + elsif ($AVOID_MENU_REDUNDANCY) + { + $text = '' if (simplify_text($element_text) eq simplify_text($text)); + } + return "$text\n"; +} + +# a menu comment (between menu lines) +# formats the container of a menu comment. A menu comment is any text +# appearing between menu lines, either separated by an empty line from +# the preceding menu entry, or a text beginning at the first character +# of the line (text not at the very beginning of the line is considered to +# be the continuation of a menu entry description text). +# +# The text itself is considered to be in a preformatted environment +# with name 'menu-commment' and with style $MENU_PRE_STYLE. +# +# argument +# text contained in the menu comment. +sub t2h_default_menu_comment($) +{ + my $text = shift; + return $text if ($SIMPLE_MENU); + if ($text =~ /\S/) + { + return "$text"; + } + return ''; +} + +# Construct a href to an external source of information. +# node is the node with texinfo @-commands +# node_id is the node transliterated and transformed as explained in the +# texinfo manual +# node_xhtml_id is the node transformed such that it is unique and can +# be used to make an html cross ref as explained in the texinfo manual +# file is the file in '(file)node' +sub t2h_default_external_href($$$) +{ + my $node = shift; + my $node_id = shift; + my $node_xhtml_id = shift; + my $file = shift; + $file = '' if (!defined($file)); + my $default_target_split = $EXTERNAL_CROSSREF_SPLIT; + my $target_split; + my $target_mono; + my $href_split; + my $href_mono; + if ($file ne '') + { + if ($NEW_CROSSREF_STYLE) + { + $file =~ s/\.[^\.]*$//; + $file =~ s/^.*\///; + my $href; + if (exists($Texi2HTML::THISDOC{'htmlxref'}->{$file})) + { + if (exists($Texi2HTML::THISDOC{'htmlxref'}->{$file}->{'split'})) + { + $target_split = 1; + $href_split = $Texi2HTML::THISDOC{'htmlxref'}->{$file}->{'split'}->{'href'}; + } + if (exists($Texi2HTML::THISDOC{'htmlxref'}->{$file}->{'mono'})) + { + $target_mono = 1; + $href_mono = $Texi2HTML::THISDOC{'htmlxref'}->{$file}->{'mono'}->{'href'}; + } + } + + if ((not $target_mono) and (not $target_split)) + { # nothing specified for that manual, use default + $target_split = $default_target_split; + } + elsif ($target_split and $target_mono) + { # depends on the splitting of the manual + $target_split = $SPLIT; + } + elsif ($target_mono) + { # only mono specified + $target_split = 0; + } + + if ($target_split) + { + if (defined($href_split)) + { + $file = "$href_split"; + } + elsif (defined($EXTERNAL_DIR)) + { + $file = "$EXTERNAL_DIR/$file"; + } + elsif ($SPLIT) + { + $file = "../$file"; + } + $file .= "/"; + } + else + {# target not split + if (defined($href_mono)) + { + $file = "$href_mono"; + } + else + { + if (defined($EXTERNAL_DIR)) + { + $file = "$EXTERNAL_DIR/$file"; + } + elsif ($SPLIT) + { + $file = "../$file"; + } + $file .= "." . $NODE_FILE_EXTENSION; + } + } + } + else + { + $file .= "/"; + if (defined($EXTERNAL_DIR)) + { + $file = $EXTERNAL_DIR . $file; + } + else + { + $file = '../' . $file; + } + } + } + else + { + $target_split = $default_target_split; + } + if ($node eq '') + { + if ($NEW_CROSSREF_STYLE) + { + if ($target_split) + { + return $file . $TOP_NODE_FILE . '.' . $NODE_FILE_EXTENSION . '#Top'; + # or ? + #return $file . '#Top'; + } + else + { + return $file . '#Top'; + } + } + else + { + return $file; + } + } + my $target; + if ($NEW_CROSSREF_STYLE) + { + $node = $node_id; + $target = $node_xhtml_id; + } + else + { + $node = main::remove_texi($node); + $node =~ s/[^\w\.\-]/-/g; + } + my $file_basename = $node; + $file_basename = $TOP_NODE_FILE if ($node =~ /^top$/i); + if ($NEW_CROSSREF_STYLE) + { + if ($target_split) + { + return $file . $file_basename . ".$NODE_FILE_EXTENSION" . '#' . $target; + } + else + { + return $file . '#' . $target; + } + } + else + { + return $file . $file_basename . ".$NODE_FILE_EXTENSION"; + } +} + +# format a reference external to the generated manual. This produces a full +# reference with introductive words and the reference itself. +# +# arguments: +# type of the reference: xref (reference at the beginning of a sentence), +# pxref (reference in a parenthesis), +# section in the book. This might be undef. +# book name. +# node and file name formatted according to the convention used in info +# '(file)node' and no node means the Top node. +# href linking to the html page containing the referenced node. A typical +# use for this href is a href attribute in an element +# an optionnal cross reference name +sub t2h_default_external_ref($$$$$$) +{ + my $type = shift; + my $section = shift; + my $book = shift; + my $file_node = shift; + my $href = shift; + my $cross_ref = shift; + + $file_node = "$cross_ref: $file_node" if (($file_node ne '') and ($cross_ref ne '')); + $file_node = &$anchor('', $href, $file_node) if ($file_node ne ''); + + # Yes, this is ugly, but this helps internationalization + if ($type eq 'pxref') + { + if (($book ne '') and ($file_node ne '')) + { + return &$I('see %{node_file_href} section `%{section}\' in @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book, 'section' => $section }) if ($section ne ''); + return &$I('see %{node_file_href} @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book }); + } + elsif ($book ne '') + { + return &$I('see section `%{section}\' in @cite{%{book}}', { 'book' => $book, 'section' => $section }) if ($section ne ''); + return &$I('see @cite{%{book}}', { 'book' => $book }); + } + elsif ($file_node ne '') + { + return &$I('see %{node_file_href}', { 'node_file_href' => $file_node }); + } + } + if ($type eq 'xref') + { + if (($book ne '') and ($file_node ne '')) + { + return &$I('See %{node_file_href} section `%{section}\' in @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book, 'section' => $section }) if ($section ne ''); + return &$I('See %{node_file_href} @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book }); + } + elsif ($book ne '') + { + return &$I('See section `%{section}\' in @cite{%{book}}', { 'book' => $book, 'section' => $section }) if ($section ne ''); + return &$I('See @cite{%{book}}', { 'book' => $book }); + } + elsif ($file_node ne '') + { + return &$I('See %{node_file_href}', { 'node_file_href' => $file_node }); + } + } + if ($type eq 'ref') + { + if (($book ne '') and ($file_node ne '')) + { + return &$I('%{node_file_href} section `%{section}\' in @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book, 'section' => $section }) if ($section ne ''); + return &$I('%{node_file_href} @cite{%{book}}', { 'node_file_href' => $file_node, 'book' => $book }); + } + elsif ($book ne '') + { + return &$I('section `%{section}\' in @cite{%{book}}', { 'book' => $book, 'section' => $section }) if ($section ne ''); + return &$I('@cite{%{book}}', { 'book' => $book }); + } + elsif ($file_node ne '') + { + return &$I('%{node_file_href}', { 'node_file_href' => $file_node }); + } + } + return ''; +} + +# format a reference to a node or a section in the generated manual. This +# produces a full reference with introductive words and the reference itself. +# +# arguments: +# type of the reference: xref (reference at the beginning of a sentence), +# pxref (reference in a parenthesis), +# href linking to the html page containing the node or the section. A typical +# use for this href is a href attribute in an element +# short name for this reference +# name for this reference +# boolean true if the reference is a reference to a section +# +# $SHORT_REF should be used. +sub t2h_default_internal_ref($$$$$) +{ + my $type = shift; + my $href = shift; + my $short_name = shift; + my $name = shift; + my $is_section = shift; + + if (! $SHORT_REF) + { + $name = &$anchor('', $href, $name); + if ($type eq 'pxref') + { + return &$I('see section %{reference_name}', { 'reference_name' => $name }) if ($is_section); + return &$I('see %{reference_name}', { 'reference_name' => $name }); + } + elsif ($type eq 'xref') + { + return &$I('See section %{reference_name}', { 'reference_name' => $name }) if ($is_section); + return &$I('See %{reference_name}', { 'reference_name' => $name }); + } + elsif ($type eq 'ref') + { + return &$I('%{reference_name}', { 'reference_name' => $name }); + } + } + else + { + $name = &$anchor('', $href, $short_name); + if ($type eq 'pxref') + { + return &$I('see %{reference_name}', { 'reference_name' => $name }); + } + elsif ($type eq 'xref') + { + return &$I('See %{reference_name}', { 'reference_name' => $name }); + } + elsif ($type eq 'ref') + { + return &$I('%{reference_name}', { 'reference_name' => $name }); + } + } + return ''; +} + +sub teletyped_in_stack($) +{ + my $stack = shift; + foreach my $element(reverse(@$stack)) + { + if ($complex_format_map->{$element}) + { + if (!$complex_format_map->{$element}->{'pre_style'}) + { + return 1; + } + else + { + return 0; + } + } + } + return 0; +} + +# text after @item in table, vtable and ftable +sub t2h_default_table_item($$$$$$) +{ + my $text = shift; + my $index_label = shift; + my $format = shift; + my $command = shift; + my $formatted_command = shift; + my $style_stack = shift; + #print STDERR "-> $format (@$style_stack)\n"; + $formatted_command = '' if (!defined($formatted_command) or + exists($special_list_commands{$format}->{$command})); + if (teletyped_in_stack($style_stack)) + { + $text .= ''; + $formatted_command = '' . $formatted_command; + } + $text .= "\n" . $index_label if (defined($index_label)); + return '
    ' . $formatted_command . $text . '
    ' . "\n"; +} + +# format text on the line following the @item line (in table, vtable and ftable) +sub t2h_default_table_line($) +{ + my $text = shift; + + if ($text =~ /\S/) + { + return '
    ' . $text . '
    ' . "\n"; + } + return ''; +} + +# row in multitable +sub t2h_default_row($$) +{ + my $text = shift; + my $macro = shift; + + if ($text =~ /\S/) + { + if ($macro eq 'headitem') + { + return '' . $text . '' . "\n"; + } + return '' . $text . '' . "\n"; + } + return ''; +} + +# cell in multitable +sub t2h_default_cell($$) +{ + my $text = shift; + my $row_macro = shift; + + if ($row_macro eq 'headitem') + { + return '' . $text . ''; + } + return '' . $text . ''; +} + +# format an item in a list +# +# argument: +# text of the item +# format of the list (itemize or enumerate) +# command passed as argument to the format +# formatted_command leading command formatted, if it is a thing command +sub t2h_default_list_item($$$$$$$) +{ + my $text = shift; + my $format = shift; + my $command = shift; + my $formatted_command = shift; + my $item_nr = shift; + my $enumerate_style = shift; + my $number = shift; + + $formatted_command = '' if (!defined($formatted_command) or + exists($special_list_commands{$format}->{$command})); + if ($text =~ /\S/) + { + return '
  • ' . $formatted_command . $text . '
  • '; + } + return ''; +} + +sub t2h_default_table_list($$$$$$) +{ + my $format = shift; + my $text = shift; + my $command = shift; + my $formatted_command = shift; + my $item_nr = shift; + my $enumerate_style = shift; + my $number = shift; + $formatted_command = '' if (!defined($formatted_command) or + exists($special_list_commands{$format}->{$command})); + if ($format eq 'itemize') + { + return "
      \n" . $text . "
    \n" if ($command eq 'bullet'); + return "\n" . $text . "\n"; + } +} + +# an html comment +sub t2h_default_comment($) +{ + my $text = shift; + $text =~ s/--+/-/go; + return '' . "\n"; +} + +sub t2h_collect_styles($) +{ + my $stack = shift; + my @result = (); + foreach my $style (reverse(@$stack)) + { +# last unless (defined($command_type{$style}) and $command_type{$style} eq 'style'); + push @result, $style if (defined($command_type{$style}) and $command_type{$style} eq 'style'); + } + return @result; +} + +sub t2h_get_attribute($;$) +{ + my $command = shift; + my $map_ref = shift; + $map_ref = \%style_map if (!defined($map_ref)); + return '' unless (defined($map_ref->{$command})); + if ((ref($map_ref->{$command}) eq 'HASH') + and exists($map_ref->{$command}->{'attribute'})) + { + return $map_ref->{$command}->{'attribute'}; + } + elsif ($map_ref->{$command} !~ /^&/) + { + my $attribute = $map_ref->{$command}; + $attribute =~ s/^\"//; + return $attribute; + } + return ''; +} + +sub t2h_begin_style($$;$) +{ + my $command = shift; + my $text = shift; + my $map_ref = shift; + my $attribute = t2h_get_attribute($command,$map_ref); + $attribute = "<$attribute>" if ($attribute ne ''); + return $attribute.$text; +} + +sub t2h_end_style($$;$) +{ + my $command = shift; + my $text = shift; + my $map_ref = shift; + my $attribute = t2h_get_attribute($command,$map_ref); + if ($attribute =~ /^(\w+)/) + { + $attribute = $1; + } + $attribute = "" if ($attribute ne ''); + return $text.$attribute; +} + +# a paragraph +# arguments: +# $text of the paragraph +# $align for the alignement +# $indent for the indent style (indent or noindent) +# The following is usefull if the paragraph is in an itemize. +# $paragraph_command is the leading formatting command (like @minus) +# $paragraph_command_formatted is the leading formatting command formatted +# $paragraph_number is a reference on the number of paragraphs appearing +# in the format. The value should be increased if a paragraph is done +# $format is the format name (@itemize) +sub t2h_default_paragraph($$$$$$$$$$$$) +{ + my $text = shift; + my $align = shift; + my $indent = shift; + my $paragraph_command = shift; + my $paragraph_command_formatted = shift; + my $paragraph_number = shift; + my $format = shift; + my $item_nr = shift; + my $enumerate_style = shift; + my $number = shift; + my $command_stack_at_end = shift; + my $command_stack_at_begin = shift; +#print STDERR "format: $format\n" if (defined($format)); +#print STDERR "paragraph @$command_stack_at_end; @$command_stack_at_begin\n"; + $paragraph_command_formatted = '' if (!defined($paragraph_command_formatted) or + exists($special_list_commands{$format}->{$paragraph_command})); + return '' if ($text =~ /^\s*$/); + foreach my $style(t2h_collect_styles($command_stack_at_begin)) + { + $text = t2h_begin_style($style, $text); + } + foreach my $style(t2h_collect_styles($command_stack_at_end)) + { + $text = t2h_end_style($style, $text); + } + if (defined($paragraph_number) and defined($$paragraph_number)) + { + $$paragraph_number++; + return $text if (($format eq 'itemize' or $format eq 'enumerate') and + ($$paragraph_number == 1)); + } + my $open = '

    '; + if ($align) + { + $open = "

    "; + } + return $open.$text.'

    '; +} + +# a preformatted region +# arguments: +# $text of the preformatted region +# $pre_style css style +# $class identifier for the preformatted region (example, menu-comment) +# The following is usefull if the preformatted is in an itemize. +# $leading_command is the leading formatting command (like @minus) +# $leading_command_formatted is the leading formatting command formatted +# $preformatted_number is a reference on the number of preformatteds appearing +# in the format. The value should be increased if a preformatted is done +sub t2h_default_preformatted($$$$$$$$$$$$) +{ + my $text = shift; + my $pre_style = shift; + my $class = shift; + my $leading_command = shift; + my $leading_command_formatted = shift; + my $preformatted_number = shift; + my $format = shift; + my $item_nr = shift; + my $enumerate_style = shift; + my $number = shift; + my $command_stack_at_end = shift; + my $command_stack_at_begin = shift; + +#print STDERR "preformatted @$command_stack_at_end; @$command_stack_at_begin\n"; + return '' if ($text eq ''); + $leading_command_formatted = '' if (!defined($leading_command_formatted) or + exists($special_list_commands{$format}->{$leading_command})); + if (defined($preformatted_number) and defined($$preformatted_number)) + { + $$preformatted_number++; + } + foreach my $style(t2h_collect_styles($command_stack_at_begin)) + { + $text = t2h_begin_style($style, $text, \%style_map_pre); + } + foreach my $style(t2h_collect_styles($command_stack_at_end)) + { + $text = t2h_end_style($style, $text, \%style_map_pre); + } + return "
    ".$text."
    "; +} + +# This function formats a heading for an element +# +# argument: +# an element. It is a hash reference for a node or a sectionning command. +# The interesting keys are: +# 'text': the heading text +# 'text_nonumber': the heading text without section number +# 'node': true if it is a node +# 'level': level of the element. 0 for @top, 1 for chapter, heading, +# appendix..., 2 for section and so on... +# 'tag_level': the sectionning element name, raisesections and lowersections +# taken into account +sub t2h_default_heading($) +{ + my $element = shift; + my $level = 3; + if (!$element->{'node'}) + { + $level = $element->{'level'}; + } + $level = 1 if ($level == 0); + my $text = $element->{'text'}; + return '' if ($text !~ /\S/); + my $class = $element->{'tag_level'}; + $class = 'unnumbered' if ($class eq 'top'); + if (defined($element->{'tocid'}) and $TOC_LINKS) + { + $text = &$anchor ('', "$Texi2HTML::THISDOC{'toc_file'}#$element->{'tocid'}", $text); + } + my $align = ''; + $align = ' align="center"' if ($element->{'tag'} eq 'centerchap'); + return " $text \n"; +} + +# formatting of raw regions +# if L2H is true another mechanism is used for tex +sub t2h_default_raw($$) +{ + my $style = shift; + my $text = shift; + if ($style eq 'verbatim' or $style eq 'tex') + { + return "
    " . &$protect_text($text) . '
    '; + } + elsif ($style eq 'html') + { + return $text; + } + else + { + warn "$WARN (bug) unknown style $style\n"; + return &$protect_text($text); + } +} + +# raw environment when removing texi (in comments) +sub t2h_default_raw_no_texi($$) +{ + my $style = shift; + my $text = shift; + return $text; +} + +# This function formats a footnote reference and the footnote text associated +# with a given footnote. +# The footnote reference is the text appearing in the main document pointing +# to the footnote text. +# +# arguments: +# absolute number of the footnote (in the document) +# relative number of the footnote (in the page) +# identifier for the footnote +# identifier for the footnote reference in the main document +# main document file +# footnote text file +# array with the footnote text lines +# the state. See menu entry. +# +# returns: +# reference on an array containing the footnote text lines which should +# have been updated +# the text for the reference pointing on the footnote text +sub t2h_default_foot_line_and_ref($$$$$$$) +{ + my $number_in_doc = shift; + my $number_in_page = shift; + my $footnote_id = shift; + my $place_id = shift; + my $document_file = shift; + my $footnote_file = shift; + my $lines = shift; + my $state = shift; + + unshift (@$lines, '

    ' . + &$anchor($footnote_id, $document_file . "#$place_id", + "($number_in_doc)") + . "

    \n"); + return ($lines, &$anchor($place_id, $footnote_file . "#$footnote_id", + "($number_in_doc)")); +} + +# formats a group of footnotes. +# +# argument: +# array reference on the footnotes texts lines +# +# returns an array reference on the group of footnotes lines +sub t2h_default_foot_section($) +{ + my $lines = shift; + unshift (@$lines, "
    \n" ,"$DEFAULT_RULE\n", "

    " . &$I('Footnotes') . "

    \n"); + push (@$lines, "
    \n"); + return $lines; +} + +sub t2h_default_image_files($$) +{ + my $base = shift; + my $extension = shift; + my @files = (); + return @files if (!defined($base) or ($base eq '')); + push @files,"$base.$extension" if (defined($extension) and ($extension ne '')); + foreach my $ext (@IMAGE_EXTENSIONS) + { + push @files, "$base.$ext"; + } + return @files; +} + +# format an image +# +# arguments: +# image file name with path +# image basename +# a boolean true if we are in a preformatted format +# image file name without path +# alt text +# width +# height +# raw alt +# extension +# path to working dir +# path to file relative from working dir +sub t2h_default_image($$$$$$$$$$$) +{ + my $file = shift; + my $base = shift; + my $preformatted = shift; + my $file_name = shift; + my $alt = shift; + my $width = shift; + my $height = shift; + my $raw_alt = shift; + my $extension = shift; + my $working_dir = shift; + my $file_path = shift; + + if (!defined($file_path) or $file_path eq '') + { + if (defined($extension) and $extension ne '') + { + $file = "$base.$extension"; + } + else + { + $file = "$base.jpg"; + } + main::echo_warn ("no image file for $base, (using $file)"); + } + $alt = &$protect_text($base) if (!defined($alt) or ($alt eq '')); + return "[ $alt ]" if ($preformatted); + # it is possible that $file_name is more correct as it allows the user + # to chose the relative path. + $file = &$protect_text($file); + return "\"$alt\""; +} + +# address put in footer describing when was generated and who did the manual +sub t2h_default_address($$) +{ + my $user = shift; + my $date = shift; + $user = '' if (!defined($user)); + $date = '' if (!defined($date)); + if (($user ne '') and ($date ne '')) + { + return &$I('by @emph{%{user}} on @emph{%{date}}', { 'user' => $user, + 'date' => $date }); + } + elsif ($user ne '') + { + return &$I('by @emph{%{user}}', { 'user' => $user }); + } + elsif ($date ne '') + { + return &$I('on @emph{%{date}}', { 'date' => $date }); + } + return ''; +} + +# format a target in the main document for an index entry. +# +# arguments: +# target identifier +# boolean true if in preformatted format +# FIXME document the remaining +sub t2h_default_index_entry_label($$) +{ + my $identifier = shift; + my $preformatted = shift; + + return '' if (!defined($identifier) or ($identifier !~ /\S/)); + my $label = &$anchor($identifier); + return $label . "\n" if (!$preformatted); + return $label; +} + +# process definition commands line @deffn for example +sub t2h_default_def_line($$$$$) +{ + my $category = shift; + my $name = shift; + my $type = shift; + my $arguments = shift; + my $index_label = shift; + $index_label = '' if (!defined($index_label)); + $category = '' if (!defined($category) or ($category =~ /^\s*$/)); + $name = '' if (!defined($name) or ($name =~ /^\s*$/)); + $type = '' if (!defined($type) or $type =~ /^\s*$/); + if (!defined($arguments) or $arguments =~ /^\s*$/) + { + $arguments = ''; + } + else + { + chomp ($arguments); + $arguments = '' . $arguments . ''; + } + my $type_name = ''; + $type_name = " $type" if ($type ne ''); + $type_name .= ' ' . $name . '' if ($name ne ''); + $type_name .= $arguments . "\n"; + if (! $DEF_TABLE) + { + return '
    '. '' . $category . ':' . $type_name . $index_label . "
    \n"; + } + else + { + + return "\n" . $type_name . + "\n" . $category . $index_label . "\n" . "\n"; + } +} + +# process definition commands line @deffn for example while removing texi +# commands +sub t2h_default_def_line_no_texi($$$$$) +{ + my $category = shift; + my $name = shift; + my $type = shift; + my $arguments = shift; + $name = '' if (!defined($name) or ($name =~ /^\s*$/)); + $type = '' if (!defined($type) or $type =~ /^\s*$/); + if (!defined($arguments) or $arguments =~ /^\s*$/) + { + $arguments = ''; + } + my $type_name = ''; + $type_name = " $type" if ($type ne ''); + $type_name .= ' ' . $name if ($name ne ''); + $type_name .= $arguments; + if (! $DEF_TABLE) + { + return $category . ':' . $type_name . "\n"; + } + else + { + + return $type_name . " " . $category . "\n"; + } +} + +# a cartouche +sub t2h_default_cartouche($$) +{ + my $text = shift; + + if ($text =~ /\S/) + { + return "
    \n" . $text . "
    \n"; + } + return ''; +} + +# key: +# origin_href: +# entry: +# texi entry: +# element_href: +# element_text: +sub t2h_default_index_summary_file_entry ($$$$$$$$) +{ + my $index_name = shift; + my $key = shift; + my $origin_href = shift; + my $entry = shift; + my $texi_entry = shift; + my $element_href = shift; + my $element_text = shift; + my $is_printed = shift; + print IDXFILE "key: $key\n origin_href: $origin_href\n entry: $entry\n" + . " texi_entry: $texi_entry\n" + . " element_href: $element_href\n element_text: $element_text\n"; +} + +sub t2h_default_index_summary_file_begin($$) +{ + my $name = shift; + my $is_printed = shift; + open(IDXFILE, ">$Texi2HTML::THISDOC{'destination_directory'}$Texi2HTML::THISDOC{'file_base_name'}" . "_$name.idx") + || die "Can't open >$Texi2HTML::THISDOC{'destination_directory'}$Texi2HTML::THISDOC{'file_base_name'}" . "_$name.idx for writing: $!\n"; +} + +sub t2h_default_index_summary_file_end($$) +{ + my $name = shift; + my $is_printed = shift; + close (IDXFILE); +} + +sub t2h_default_sp($$) +{ + my $number = shift; + my $preformatted = shift; + return "
    \n" x $number if (!$preformatted); + return "\n" x $number; +} + +sub t2h_default_acronym_like($$$$$$) +{ + my $command = shift; + my $acronym_texi = shift; + my $acronym_text = shift; + my $with_explanation = shift; + my $explanation_lines = shift; + my $explanation_text = shift; + my $explanation_simply_formatted = shift; + + my $attribute = $command; + my $opening = "<$attribute>"; + if (defined($explanation_simply_formatted)) + { + $opening = "<$attribute title=\"$explanation_simply_formatted\">"; + } + if ($with_explanation) + { + return &$I('%{acronym_like} (%{explanation})', {'acronym_like' => $opening . $acronym_text . "", 'explanation' => $explanation_text}) + } + else + { + return $opening . $acronym_text . ""; + } +} + +sub t2h_default_quotation_prepend_text($) +{ + my $text = shift; + return undef if (!defined($text) or $text =~ /^$/); +# FIXME if there is a @ protecting the end of line the result is +# @b{some text @:} +# It is likely not to be what was intended + chomp($text); + return &$I('@b{%{quotation_arg}:} ', {'quotation_arg' => $text}, {'keep_texi' => 1}); +} + +sub t2h_default_quotation($$$) +{ + my $text = shift; + my $argument_text = shift; + my $argument_text_texi = shift; +# my $argument_style_texi = shift; +# my $argument_style_id = shift; +# if (defined($argument_text)) +# { +# return '
    ' . &$I('%{style}:%{quotation}', +# {'style' => $argument_text, 'quotation' => $text}) . '
    ' ; +# } + return '
    ' . $text . "
    \n"; +} + +# format the text within a paragraph style format, +# +# argument: +# format name +# text within the format +sub t2h_default_paragraph_style_command($$) +{ + my $format = shift; + my $text = shift; + return $text; +} + +# format a whole index +# +# argument: +# index text +# index name +sub t2h_default_print_index($$) +{ + my $text = shift; + my $name = shift; + return "\n" . + "\n" + . "\n" . $text . + "
    " . &$I('Index Entry') . " " . &$I('Section') . "
    $DEFAULT_RULE
    \n"; +} + +# format a letter entry in an index page. The letter entry contains +# the index entries for the words beginning with that letter. It is +# a target for links pointing from the summary of the index. +# +# arguments: +# the letter +# identifier for the letter entry. This should be used to make the target +# identifier +# text of the index entries +sub t2h_default_index_letter($$$) +{ + my $letter = shift; + my $id = shift; + my $text = shift; + return '' . &$anchor($id,'',&$protect_text($letter)) . + "\n" . $text . + " $DEFAULT_RULE\n"; +} + +# format an index entry (in a letter entry). +# +# arguments: +# href to the main text, linking to the place where the index entry appears +# entry text +# href to the main text, linking to the section or node where the index +# entry appears +# section or node heading +sub t2h_default_index_entry($$$$) +{ + my $text_href = shift; + my $entry = shift; + my $element_href = shift; + my $element_text = shift; + + return '' . &$anchor('', $text_href, $entry) + . '' . &$anchor('', $element_href, $element_text) + . "\n"; +} + + +sub t2h_default_copying_comment($) +{ + my $copying_lines = shift; + my $text = &$comment(main::remove_texi(@$copying_lines)); + return $text; +} +# format a letter appearing in a summary for an index. The letter links to +# the place where the index elements beginning with this letter are (called +# a letter entry). +# +# arguments: +# letter +# file where the target letter entry is +# identifier for the target letter entry +sub t2h_default_summary_letter($$$) +{ + my $letter = shift; + my $file = shift; + my $identifier = shift; + return &$anchor('', $file . '#' . $identifier, '' . &$protect_text($letter) . '', 'class="summary-letter"'); +} + +# format an index summary. This is a list of letters linking to the letter +# entries. +# +# arguments: +# array reference containing the formatted alphabetical letters +# array reference containing the formatted non lphabetical letters +sub t2h_default_index_summary($$) +{ + my $alpha = shift; + my $nonalpha = shift; + my $join = ''; + my $nonalpha_text = ''; + my $alpha_text = ''; + $join = "   \n
    \n" if (@$nonalpha and @$alpha); + if (@$nonalpha) + { + $nonalpha_text = join("\n   \n", @$nonalpha) . "\n"; + } + if (@$alpha) + { + $alpha_text = join("\n   \n", @$alpha) . "\n   \n"; + } + return "
    " . &$I('Jump to') .":   " . + $nonalpha_text . $join . $alpha_text . "
    \n"; +} + +# return the heading with number texinfo text +# also called for nodes. +sub t2h_default_heading_texi($$$) +{ + my $tag = shift; + my $texi = shift; + my $number = shift; + $texi =~ s/\s*$//; + $texi =~ s/^\s*//; + return "$number $texi" if ($NUMBER_SECTIONS and defined($number) and ($number !~ /^\s*$/)) ; + return $texi; +} + +# return the heading texinfo text for split index sections +sub t2h_default_index_element_heading_texi($$$) +{ # FIXME i18n + my $heading_texi = shift; + my $tag = shift; + my $texi = shift; + my $number = shift; + my $first_letter = shift; + my $last_letter = shift; + return "$heading_texi: $first_letter -- $last_letter" if ($last_letter ne $first_letter); + return "$heading_texi: $first_letter"; +} + +1; + +require "$ENV{T2H_HOME}/texi2html.init" + if ($0 =~ /\.pl$/ && + -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init"); + +my $translation_file = 'translations.pl'; # file containing all the translations +my $T2H_OBSOLETE_STRINGS; + +# leave this within comments, and keep the require statement +# This way, you can directly run texi2html.pl, +# if $ENV{T2H_HOME}/translations.pl exists. +# +# @T2H_TRANSLATIONS_FILE@ +$LANGUAGES->{'de'} = { + ' The buttons in the navigation panels have the following meaning:' => '', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '', + ' Up ' => '', + '%{acronym_like} (%{explanation})' => '', + '%{month}, %{day} %{year}' => '', + '%{name} of %{class}' => '', + '%{name} on %{class}' => '', + '%{node_file_href}' => '', + '%{node_file_href} @cite{%{book}}' => '', + '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + '%{reference_name}' => '', + '%{style} %{number}' => '', + '%{style}: %{caption_first_line}' => '', + '%{style}: %{shortcaption_first_line}' => '', + '@b{%{quotation_arg}:} ' => '', + '@cite{%{book}}' => '', + 'About' => '', + 'About (help)' => '', + 'About This Document' => '@"Uber dieses Dokument', + 'April' => 'April', + 'August' => 'August', + 'Back' => '', + 'Beginning of this chapter or previous chapter' => '', + 'Button' => '', + 'Contents' => '', + 'Cover (top) of document' => '', + 'Current Position' => '', + 'Current section' => '', + 'December' => 'Dezember', + 'FastBack' => '', + 'FastForward' => '', + 'February' => 'Februar', + 'First' => '', + 'First section in reading order' => '', + 'Following' => '', + 'Following node' => '', + 'Footnotes' => 'Fu@ss{}noten', + 'Forward' => '', + 'From 1.2.3 go to' => '', + 'Go to' => '', + 'Index' => 'Index', + 'Index Entry' => '', + 'January' => 'Januar', + 'July' => 'Juli', + 'Jump to' => '', + 'June' => 'Juni', + 'Last' => '', + 'Last section in reading order' => '', + 'March' => 'M@"arz', + 'May' => 'Mai', + 'Menu:' => '', + 'Name' => '', + 'Next' => '', + 'Next chapter' => '', + 'Next node' => '', + 'Next section in reading order' => '', + 'Next section on same level' => '', + 'Node following in node reading order' => '', + 'Node up' => '', + 'NodeNext' => '', + 'NodePrev' => '', + 'NodeUp' => '', + 'November' => 'November', + 'October' => 'Oktober', + 'Overview' => '', + 'Overview:' => '', + 'Prev' => '', + 'Previous node' => '', + 'Previous section in reading order' => '', + 'Previous section on same level' => '', + 'Section' => '', + 'Section One' => '', + 'See %{node_file_href}' => '', + 'See %{node_file_href} @cite{%{book}}' => '', + 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'See %{reference_name}' => '', + 'See @cite{%{book}}' => '', + 'See section %{reference_name}' => '', + 'See section `%{section}\' in @cite{%{book}}' => '', + 'September' => 'September', + 'Short Table of Contents' => 'Kurzes Inhaltsverzeichniss', + 'Short table of contents' => '', + 'Subsection One-Four' => '', + 'Subsection One-One' => '', + 'Subsection One-Three' => '', + 'Subsection One-Two' => '', + 'Subsubsection One-Two-Four' => '', + 'Subsubsection One-Two-One' => '', + 'Subsubsection One-Two-Three' => '', + 'Subsubsection One-Two-Two' => '', + 'T2H_today' => '', + 'Table of Contents' => 'Inhaltsverzeichniss', + 'Table of contents' => '', + 'The node you are looking for is at %{href}.' => '', + 'This' => '', + 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => '', + 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'Top' => '', + 'Untitled Document' => '', + 'Up' => '', + 'Up node' => '', + 'Up section' => '', + 'by @emph{%{user}}' => '', + 'by @emph{%{user}} on @emph{%{date}}' => '', + 'current' => '', + 'on @emph{%{date}}' => '', + 'section `%{section}\' in @cite{%{book}}' => '', + 'see %{node_file_href}' => '', + 'see %{node_file_href} @cite{%{book}}' => '', + 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'see %{reference_name}' => '', + 'see @cite{%{book}}' => '', + 'see section %{reference_name}' => '', + 'see section `%{section}\' in @cite{%{book}}' => '', + 'unknown' => '' + }; + +$T2H_OBSOLETE_STRINGS->{'de'} = { + 'See' => 'Siehe', + 'section' => 'Abschnitt', + 'see' => 'siehe' + }; + + +$LANGUAGES->{'en'} = { + ' The buttons in the navigation panels have the following meaning:' => '', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '', + ' Up ' => '', + '%{acronym_like} (%{explanation})' => '', + '%{month}, %{day} %{year}' => '', + '%{name} of %{class}' => '', + '%{name} on %{class}' => '', + '%{node_file_href}' => '', + '%{node_file_href} @cite{%{book}}' => '', + '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + '%{reference_name}' => '', + '%{style} %{number}' => '', + '%{style}: %{caption_first_line}' => '', + '%{style}: %{shortcaption_first_line}' => '', + '@b{%{quotation_arg}:} ' => '', + '@cite{%{book}}' => '', + 'About' => '', + 'About (help)' => '', + 'About This Document' => '', + 'April' => '', + 'August' => '', + 'Back' => '', + 'Beginning of this chapter or previous chapter' => '', + 'Button' => '', + 'Contents' => '', + 'Cover (top) of document' => '', + 'Current Position' => '', + 'Current section' => '', + 'December' => '', + 'FastBack' => '', + 'FastForward' => '', + 'February' => '', + 'First' => '', + 'First section in reading order' => '', + 'Following' => '', + 'Following node' => '', + 'Footnotes' => '', + 'Forward' => '', + 'From 1.2.3 go to' => '', + 'Go to' => '', + 'Index' => '', + 'Index Entry' => '', + 'January' => '', + 'July' => '', + 'Jump to' => '', + 'June' => '', + 'Last' => '', + 'Last section in reading order' => '', + 'March' => '', + 'May' => '', + 'Menu:' => '', + 'Name' => '', + 'Next' => '', + 'Next chapter' => '', + 'Next node' => '', + 'Next section in reading order' => '', + 'Next section on same level' => '', + 'Node following in node reading order' => '', + 'Node up' => '', + 'NodeNext' => '', + 'NodePrev' => '', + 'NodeUp' => '', + 'November' => '', + 'October' => '', + 'Overview' => '', + 'Overview:' => '', + 'Prev' => '', + 'Previous node' => '', + 'Previous section in reading order' => '', + 'Previous section on same level' => '', + 'Section' => '', + 'Section One' => '', + 'See %{node_file_href}' => '', + 'See %{node_file_href} @cite{%{book}}' => '', + 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'See %{reference_name}' => '', + 'See @cite{%{book}}' => '', + 'See section %{reference_name}' => '', + 'See section `%{section}\' in @cite{%{book}}' => '', + 'September' => '', + 'Short Table of Contents' => '', + 'Short table of contents' => '', + 'Subsection One-Four' => '', + 'Subsection One-One' => '', + 'Subsection One-Three' => '', + 'Subsection One-Two' => '', + 'Subsubsection One-Two-Four' => '', + 'Subsubsection One-Two-One' => '', + 'Subsubsection One-Two-Three' => '', + 'Subsubsection One-Two-Two' => '', + 'T2H_today' => '%s, %d %d', + 'Table of Contents' => '', + 'Table of contents' => '', + 'The node you are looking for is at %{href}.' => '', + 'This' => '', + 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => '', + 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'Top' => '', + 'Untitled Document' => '', + 'Up' => '', + 'Up node' => '', + 'Up section' => '', + 'by @emph{%{user}}' => '', + 'by @emph{%{user}} on @emph{%{date}}' => '', + 'current' => '', + 'on @emph{%{date}}' => '', + 'section `%{section}\' in @cite{%{book}}' => '', + 'see %{node_file_href}' => '', + 'see %{node_file_href} @cite{%{book}}' => '', + 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'see %{reference_name}' => '', + 'see @cite{%{book}}' => '', + 'see section %{reference_name}' => '', + 'see section `%{section}\' in @cite{%{book}}' => '', + 'unknown' => '' + }; + +$T2H_OBSOLETE_STRINGS->{'en'} = {}; + + +$LANGUAGES->{'es'} = { + ' The buttons in the navigation panels have the following meaning:' => '', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '', + ' Up ' => '', + '%{acronym_like} (%{explanation})' => '', + '%{month}, %{day} %{year}' => '', + '%{name} of %{class}' => '', + '%{name} on %{class}' => '', + '%{node_file_href}' => '', + '%{node_file_href} @cite{%{book}}' => '', + '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + '%{reference_name}' => '', + '%{style} %{number}' => '', + '%{style}: %{caption_first_line}' => '', + '%{style}: %{shortcaption_first_line}' => '', + '@b{%{quotation_arg}:} ' => '', + '@cite{%{book}}' => '', + 'About' => '', + 'About (help)' => '', + 'About This Document' => '', + 'April' => 'abril', + 'August' => 'agosto', + 'Back' => '', + 'Beginning of this chapter or previous chapter' => '', + 'Button' => '', + 'Contents' => '', + 'Cover (top) of document' => '', + 'Current Position' => '', + 'Current section' => '', + 'December' => 'diciembre', + 'FastBack' => '', + 'FastForward' => '', + 'February' => 'febrero', + 'First' => '', + 'First section in reading order' => '', + 'Following' => '', + 'Following node' => '', + 'Footnotes' => '', + 'Forward' => '', + 'From 1.2.3 go to' => '', + 'Go to' => '', + 'Index' => 'Index', + 'Index Entry' => '', + 'January' => 'enero', + 'July' => 'julio', + 'Jump to' => '', + 'June' => 'junio', + 'Last' => '', + 'Last section in reading order' => '', + 'March' => 'marzo', + 'May' => 'mayo', + 'Menu:' => '', + 'Name' => '', + 'Next' => '', + 'Next chapter' => '', + 'Next node' => '', + 'Next section in reading order' => '', + 'Next section on same level' => '', + 'Node following in node reading order' => '', + 'Node up' => '', + 'NodeNext' => '', + 'NodePrev' => '', + 'NodeUp' => '', + 'November' => 'noviembre', + 'October' => 'octubre', + 'Overview' => '', + 'Overview:' => '', + 'Prev' => '', + 'Previous node' => '', + 'Previous section in reading order' => '', + 'Previous section on same level' => '', + 'Section' => '', + 'Section One' => '', + 'See %{node_file_href}' => '', + 'See %{node_file_href} @cite{%{book}}' => '', + 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'See %{reference_name}' => '', + 'See @cite{%{book}}' => '', + 'See section %{reference_name}' => '', + 'See section `%{section}\' in @cite{%{book}}' => '', + 'September' => 'septiembre', + 'Short Table of Contents' => 'Resumen del Contenido', + 'Short table of contents' => '', + 'Subsection One-Four' => '', + 'Subsection One-One' => '', + 'Subsection One-Three' => '', + 'Subsection One-Two' => '', + 'Subsubsection One-Two-Four' => '', + 'Subsubsection One-Two-One' => '', + 'Subsubsection One-Two-Three' => '', + 'Subsubsection One-Two-Two' => '', + 'T2H_today' => '', + 'Table of Contents' => '@\'{@dotless{I}}ndice General', + 'Table of contents' => '', + 'The node you are looking for is at %{href}.' => '', + 'This' => '', + 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => '', + 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'Top' => '', + 'Untitled Document' => '', + 'Up' => '', + 'Up node' => '', + 'Up section' => '', + 'by @emph{%{user}}' => '', + 'by @emph{%{user}} on @emph{%{date}}' => '', + 'current' => '', + 'on @emph{%{date}}' => '', + 'section `%{section}\' in @cite{%{book}}' => '', + 'see %{node_file_href}' => '', + 'see %{node_file_href} @cite{%{book}}' => '', + 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'see %{reference_name}' => '', + 'see @cite{%{book}}' => '', + 'see section %{reference_name}' => '', + 'see section `%{section}\' in @cite{%{book}}' => '', + 'unknown' => '' + }; + +$T2H_OBSOLETE_STRINGS->{'es'} = { + 'See' => 'V@\'ease', + 'section' => 'secci@\'on', + 'see' => 'v@\'ase' + }; + + +$LANGUAGES->{'fr'} = { + ' The buttons in the navigation panels have the following meaning:' => ' Les boutons de navigation ont la signification suivante :', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' Dans cet exemple on est @`a @strong{ Sous section un-deux-trois } dans un document dont la structure est :', + ' Up ' => 'Plus haut', + '%{acronym_like} (%{explanation})' => '', + '%{month}, %{day} %{year}' => 'le %{day} %{month} %{year}', + '%{name} of %{class}' => '%{name} de %{class}', + '%{name} on %{class}' => '%{name} de %{class}', + '%{node_file_href}' => '', + '%{node_file_href} @cite{%{book}}' => '', + '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} section `%{section}\' dans @cite{%{book}}', + '%{reference_name}' => '', + '%{style} %{number}' => '', + '%{style}: %{caption_first_line}' => '', + '%{style}: %{shortcaption_first_line}' => '', + '@b{%{quotation_arg}:} ' => '', + '@cite{%{book}}' => '', + 'About' => 'A propos', + 'About (help)' => 'A propos (page d\'aide)', + 'About This Document' => 'A propos de ce document', + 'April' => 'Avril', + 'August' => 'Ao@^ut', + 'Back' => 'Retour', + 'Beginning of this chapter or previous chapter' => 'D@\'ebut de ce chapitre ou chapitre pr@\'ec@\'edent', + 'Button' => 'Bouton', + 'Contents' => 'Table des mati@`eres', + 'Cover (top) of document' => 'Couverture (top) du document', + 'Current Position' => 'Position', + 'Current section' => 'Section actuelle', + 'December' => 'D@\'ecembre', + 'FastBack' => 'RetourRapide', + 'FastForward' => 'AvanceRapide', + 'February' => 'F@\'evrier', + 'First' => 'Premier', + 'First section in reading order' => 'Premi@`e section dans l\'ordre de lecture', + 'Following' => 'Suivant', + 'Following node' => 'N@oe{}ud suivant', + 'Footnotes' => 'Notes de bas de page', + 'Forward' => 'Avant', + 'From 1.2.3 go to' => 'Depuis 1.2.3 aller @`a', + 'Go to' => 'Aller @`a', + 'Index' => 'Index', + 'Index Entry' => 'Entr@\'ee d\'index', + 'January' => 'Janvier', + 'July' => 'Juillet', + 'Jump to' => 'Aller @`a', + 'June' => 'Juin', + 'Last' => 'Dernier', + 'Last section in reading order' => 'Derni@`ere section dans l\'ordre de lecture', + 'March' => 'Mars', + 'May' => 'Mai', + 'Menu:' => 'Menu@ :', + 'Name' => 'Nom', + 'Next' => 'Suivant', + 'Next chapter' => 'Chapitre suivant', + 'Next node' => 'N@oe{}ud suivant', + 'Next section in reading order' => 'Section suivante dans l\'ordre de lecture', + 'Next section on same level' => 'Section suivante au m@^eme niveau', + 'Node following in node reading order' => 'N@oe{}ud suivant dans l\'ordre de lecture', + 'Node up' => 'N@oe{}ud au dessus', + 'NodeNext' => 'N@oe{}udSuivant', + 'NodePrev' => 'N@oe{}udPr@\'ec@\'edent', + 'NodeUp' => 'N@oe{}udMonter', + 'November' => 'Novembre', + 'October' => 'Octobre', + 'Overview' => 'Vue d\'ensemble', + 'Overview:' => 'Vue d\'ensemble@ :', + 'Prev' => 'Pr@\'ec@\'edent', + 'Previous node' => 'N@oe{}ud pr@\'ec@\'edent', + 'Previous section in reading order' => 'Section pr@\'ec@\'edente dans l\'ordre de lecture', + 'Previous section on same level' => 'Section pr@\'ec@\'edente au m@^eme niveau', + 'Section' => '', + 'Section One' => 'Section un', + 'See %{node_file_href}' => 'Voir %{node_file_href}', + 'See %{node_file_href} @cite{%{book}}' => 'Voir %{node_file_href} @cite{%{book}}', + 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'Voir %{node_file_href} section `%{section}\' dans @cite{%{book}}', + 'See %{reference_name}' => 'Voir %{reference_name}', + 'See @cite{%{book}}' => 'Voir @cite{%{book}}', + 'See section %{reference_name}' => 'Voir la section %{reference_name}', + 'See section `%{section}\' in @cite{%{book}}' => 'Voir la section `%{section}\' dans @cite{%{book}}', + 'September' => 'Septembre', + 'Short Table of Contents' => 'R@\'esum@\'e du contenu', + 'Short table of contents' => 'R@\'esum@\'e du contenu', + 'Subsection One-Four' => 'Sous section un-quatre', + 'Subsection One-One' => 'Sous section un-un', + 'Subsection One-Three' => 'Sous section un-trois', + 'Subsection One-Two' => 'Sous section un-deux', + 'Subsubsection One-Two-Four' => 'Sous sous section un-deux-quatre', + 'Subsubsection One-Two-One' => 'Sous sous section un-deux-un', + 'Subsubsection One-Two-Three' => 'Sous sous section un-deux-trois', + 'Subsubsection One-Two-Two' => 'Sous sous section un-deux-deux', + 'T2H_today' => 'le %2$d %1$s %3$d', + 'Table of Contents' => 'Table des mati@`eres', + 'Table of contents' => 'Table des mati@`eres', + 'The node you are looking for is at %{href}.' => 'Le n@oe{}ud que vous recherchez est ici@ : %{href}.', + 'This' => 'Ici', + 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e par @emph{%{user}} @emph{%{date}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}.', + 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e par @emph{%{user}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}.', + 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e @emph{%{date}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}', + 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e en utilisant @uref{%{program_homepage}, @emph{%{program}}}.', + 'Top' => '', + 'Untitled Document' => 'Document sans titre', + 'Up' => 'Monter', + 'Up node' => 'N@oe{}ud au dessus', + 'Up section' => 'Section sup@\'erieure', + 'by @emph{%{user}}' => 'par @emph{%{user}}', + 'by @emph{%{user}} on @emph{%{date}}' => 'par @emph{%{user}} @emph{%{date}}', + 'current' => 'courante', + 'on @emph{%{date}}' => '@emph{%{date}}', + 'section `%{section}\' in @cite{%{book}}' => 'section `%{section}\' dans @cite{%{book}}', + 'see %{node_file_href}' => 'voir %{node_file_href}', + 'see %{node_file_href} @cite{%{book}}' => 'voir %{node_file_href} @cite{%{book}}', + 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'voir %{node_file_href} section `%{section}\' dans @cite{%{book}}', + 'see %{reference_name}' => 'voir %{reference_name}', + 'see @cite{%{book}}' => 'voir @cite{%{book}}', + 'see section %{reference_name}' => 'voir la section %{reference_name}', + 'see section `%{section}\' in @cite{%{book}}' => 'voir la section `%{section}\' dans @cite{{book}}', + 'unknown' => 'inconnu' + }; + +$T2H_OBSOLETE_STRINGS->{'fr'} = { + ' This document was generated %{who_and_when_generated} using %{program_homepage_href}.' => ' Ce document a été généré %{who_and_when_generated} en utilisant %{program_homepage_href}.', + ' where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:' => ' Dans cet exemple on est à Sous section un-deux-trois dans un document dont la structure est :', + '%{node_file_href} section `%{section}\' in %{book}' => '%{node_file_href} section `%{section}\' dans %{book}', + 'See' => 'Voir', + 'See %{node_file_href} %{book}' => 'Voir %{node_file_href} %{book}', + 'See %{node_file_href} section `%{section}\' in %{book}' => 'Voir %{node_file_href} section `%{section}\' dans %{book}', + 'See %{book}' => 'Voir %{book}', + 'See section `%{section}\' in %{book}' => 'Voir la section `%{section}\' dans %{book}', + 'This document was generated by %{user} on %{date} using %{program_homepage_href}.' => 'Ce document a été généré par %{user} %{date} en utilisant %{program_homepage_href}.', + 'This document was generated by %{user} using %{program_homepage_href}.' => 'Ce document a été généré par %{user} en utilisant %{program_homepage_href}.', + 'This document was generated by @emph{%{user}} on @emph{%{date}} using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e par @emph{%{user}} @emph{%{date}} en utilisant %{program_homepage_href}.', + 'This document was generated by @emph{%{user}} using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e par @emph{%{user}} en utilisant %{program_homepage_href}.', + 'This document was generated on %{date} using %{program_homepage_href}.' => 'Ce document a été généré %{date} en utilisant %{program_homepage_href}.', + 'This document was generated on @emph{%{date}} using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e @emph{%{date}} en utilisant %{program_homepage_href}.', + 'This document was generated on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e @emph{%{date}} en utilisant @uref{%{program_homepage}, @emph{%{program}}}.', + 'This document was generated using %{program_homepage_href}.' => 'Ce document a @\'et@\'e g@\'en@\'er@\'e en utilisant %{program_homepage_href}.', + 'about (help)' => '@`a propos (page d\'aide)', + 'about (this page)' => 'a propos (cette page)', + 'beginning of this chapter or previous chapter' => 'd@\'ebut de ce chapitre ou chapitre pr@\'ec@\'edent', + 'by %{user}' => 'par %{user}', + 'by %{user} on %{date}' => 'par %{user} %{date}', + 'concept index' => 'index', + 'cover (top) of document' => 'couverture (top) du document', + 'current section' => 'section actuelle', + 'first section in reading order' => 'premi@`e section dans l\'ordre de lecture', + 'following node' => 'node suivant', + 'index' => 'index', + 'last section in reading order' => 'derni@`ere section dans l\'ordre de lecture', + 'next chapter' => 'chapitre suivant', + 'next node' => 'node suivant', + 'next section in reading order' => 'section suivante dans l\'ordre de lecture', + 'next section on same level' => 'section suivante au m@^eme niveau', + 'node following in node reading order' => 'node suivant dans l\'ordre des nodes', + 'node up' => 'node au dessus', + 'on %{date}' => '%{date}', + 'previous node' => 'node pr@\'ec@\'edent', + 'previous section in reading order' => 'section pr@\'ec@\'edente dans l\'ordre de lecture', + 'previous section on same level' => 'section pr@\'ec@\'edente au m@^eme niveau', + 'section' => 'section', + 'section `%{section}\' in %{book}' => 'section `%{section}\' dans %{book}', + 'see' => 'voir', + 'see %{node_file_href} %{book}' => 'voir %{node_file_href} %{book}', + 'see %{node_file_href} section `%{section}\' in %{book}' => 'voir %{node_file_href} section `%{section}\' dans %{book}', + 'see %{book}' => 'voir %{book}', + 'see section `%{section}\' in %{book}' => 'voir la section `%{section}\' dans %{book}', + 'short table of contents' => 'table des mati@`eres r@\'esum@\'ee', + 'table of contents' => 'table des mati@`eres', + 'up node' => 'node au dessus', + 'up section' => 'section sup@\'erieure' + }; + + +$LANGUAGES->{'ja'} = { + ' The buttons in the navigation panels have the following meaning:' => 'ナビゲーションパネル中のボタンには以下の意味があります。', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '@strong{例}では、以下に示す構造を持つ文書の@strong{1.2.3項}を現在位置に仮定しています。', + ' Up ' => '上', + '%{acronym_like} (%{explanation})' => '', + '%{month}, %{day} %{year}' => '%{year}年%{month}月%{day}日', + '%{name} of %{class}' => '', + '%{name} on %{class}' => '', + '%{node_file_href}' => '', + '%{node_file_href} @cite{%{book}}' => '', + '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + '%{reference_name}' => '', + '%{style} %{number}' => '', + '%{style}: %{caption_first_line}' => '', + '%{style}: %{shortcaption_first_line}' => '', + '@b{%{quotation_arg}:} ' => '', + '@cite{%{book}}' => '', + 'About' => '', + 'About (help)' => '', + 'About This Document' => 'この文書について', + 'April' => '4月', + 'August' => '8月', + 'Back' => '', + 'Beginning of this chapter or previous chapter' => '', + 'Button' => 'ボタン', + 'Contents' => '目次', + 'Cover (top) of document' => '', + 'Current Position' => '現在位置', + 'Current section' => '', + 'December' => '12月', + 'FastBack' => '', + 'FastForward' => '', + 'February' => '2月', + 'First' => '', + 'First section in reading order' => '', + 'Following' => '', + 'Following node' => '', + 'Footnotes' => '脚注', + 'Forward' => '', + 'From 1.2.3 go to' => '1.2.3項からの移動先', + 'Go to' => '移動先', + 'Index' => '見出し', + 'Index Entry' => '見出し一覧', + 'January' => '1月', + 'July' => '7月', + 'Jump to' => '移動', + 'June' => '6月', + 'Last' => '', + 'Last section in reading order' => '', + 'March' => '3月', + 'May' => '5月', + 'Menu:' => 'メニュー', + 'Name' => '名称', + 'Next' => '次', + 'Next chapter' => '', + 'Next node' => '', + 'Next section in reading order' => '', + 'Next section on same level' => '', + 'Node following in node reading order' => '', + 'Node up' => '', + 'NodeNext' => '', + 'NodePrev' => '', + 'NodeUp' => '', + 'November' => '11月', + 'October' => '10月', + 'Overview' => '概要', + 'Overview:' => '概要:', + 'Prev' => '前', + 'Previous node' => '', + 'Previous section in reading order' => '', + 'Previous section on same level' => '', + 'Section' => '項', + 'Section One' => '第1項', + 'See %{node_file_href}' => '', + 'See %{node_file_href} @cite{%{book}}' => '', + 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'See %{reference_name}' => '', + 'See @cite{%{book}}' => '', + 'See section %{reference_name}' => '', + 'See section `%{section}\' in @cite{%{book}}' => '', + 'September' => '9月', + 'Short Table of Contents' => '簡略化した目次', + 'Short table of contents' => '', + 'Subsection One-Four' => '第1.4項', + 'Subsection One-One' => '第1.1項', + 'Subsection One-Three' => '第1.3項', + 'Subsection One-Two' => '第1.2項', + 'Subsubsection One-Two-Four' => '第1.2.4項', + 'Subsubsection One-Two-One' => '第1.2.1項', + 'Subsubsection One-Two-Three' => '第1.2.3項', + 'Subsubsection One-Two-Two' => '第1.2.2項', + 'T2H_today' => '%s, %d %d', + 'Table of Contents' => '目次', + 'Table of contents' => '', + 'The node you are looking for is at %{href}.' => '', + 'This' => '', + 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'この文書は@emph{%{user}}によって@emph{%{date}}に@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。', + 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'この文書は@emph{%{user}}によって@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。', + 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'この文書は@emph{%{date}}に@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。', + 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'この文書は@uref{%{program_homepage}, @emph{%{program}}}を用いて生成されました。', + 'Top' => '冒頭', + 'Untitled Document' => '無題の文書', + 'Up' => '', + 'Up node' => '', + 'Up section' => '', + 'by @emph{%{user}}' => '@emph{%{user}}', + 'by @emph{%{user}} on @emph{%{date}}' => '@emph{%{user}}, @emph{%{date}', + 'current' => '現在位置', + 'on @emph{%{date}}' => '@emph{%{date}}', + 'section `%{section}\' in @cite{%{book}}' => '@cite{%{book}}の `%{section}\' ', + 'see %{node_file_href}' => '%{node_file_href}参照', + 'see %{node_file_href} @cite{%{book}}' => '%{node_file_href} @cite{%{book}}参照', + 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'see %{reference_name}' => '', + 'see @cite{%{book}}' => '', + 'see section %{reference_name}' => '', + 'see section `%{section}\' in @cite{%{book}}' => '', + 'unknown' => '不明' + }; + +$T2H_OBSOLETE_STRINGS->{'ja'} = { + 'about (help)' => '使用法 (ヘルプ)', + 'beginning of this chapter or previous chapter' => 'この章または前の章の冒頭', + 'cover (top) of document' => '文書の表紙 (トップ)', + 'current section' => '現在の節', + 'first section in reading order' => '文書順で前の項', + 'following node' => '次の節', + 'index' => '見出し', + 'last section in reading order' => '文書順で最後の項', + 'next chapter' => '次の章', + 'next node' => '次の節', + 'next section in reading order' => '文書順で次の項', + 'next section on same level' => '同じ階層にある次の項', + 'node following in node reading order' => '文書順で次の節', + 'node up' => '上の節へ', + 'previous node' => '前の節', + 'previous section in reading order' => '文書順で前の節', + 'previous section on same level' => '同じ階層にある前の項', + 'short table of contents' => '簡略化した目次', + 'table of contents' => '文書の目次', + 'up node' => '上の節', + 'up section' => '上の項' + }; + + +$LANGUAGES->{'nl'} = { + ' The buttons in the navigation panels have the following meaning:' => '', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '', + ' Up ' => '', + '%{acronym_like} (%{explanation})' => '', + '%{month}, %{day} %{year}' => '', + '%{name} of %{class}' => '', + '%{name} on %{class}' => '', + '%{node_file_href}' => '', + '%{node_file_href} @cite{%{book}}' => '', + '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + '%{reference_name}' => '', + '%{style} %{number}' => '', + '%{style}: %{caption_first_line}' => '', + '%{style}: %{shortcaption_first_line}' => '', + '@b{%{quotation_arg}:} ' => '', + '@cite{%{book}}' => '', + 'About' => '', + 'About (help)' => '', + 'About This Document' => 'No translation available!', + 'April' => 'April', + 'August' => 'Augustus', + 'Back' => '', + 'Beginning of this chapter or previous chapter' => '', + 'Button' => '', + 'Contents' => '', + 'Cover (top) of document' => '', + 'Current Position' => '', + 'Current section' => '', + 'December' => 'December', + 'FastBack' => '', + 'FastForward' => '', + 'February' => 'Februari', + 'First' => '', + 'First section in reading order' => '', + 'Following' => '', + 'Following node' => '', + 'Footnotes' => 'No translation available!', + 'Forward' => '', + 'From 1.2.3 go to' => '', + 'Go to' => '', + 'Index' => 'Index', + 'Index Entry' => '', + 'January' => 'Januari', + 'July' => 'Juli', + 'Jump to' => '', + 'June' => 'Juni', + 'Last' => '', + 'Last section in reading order' => '', + 'March' => 'Maart', + 'May' => 'Mei', + 'Menu:' => '', + 'Name' => '', + 'Next' => '', + 'Next chapter' => '', + 'Next node' => '', + 'Next section in reading order' => '', + 'Next section on same level' => '', + 'Node following in node reading order' => '', + 'Node up' => '', + 'NodeNext' => '', + 'NodePrev' => '', + 'NodeUp' => '', + 'November' => 'November', + 'October' => 'Oktober', + 'Overview' => '', + 'Overview:' => '', + 'Prev' => '', + 'Previous node' => '', + 'Previous section in reading order' => '', + 'Previous section on same level' => '', + 'Section' => '', + 'Section One' => '', + 'See %{node_file_href}' => '', + 'See %{node_file_href} @cite{%{book}}' => '', + 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'See %{reference_name}' => '', + 'See @cite{%{book}}' => '', + 'See section %{reference_name}' => '', + 'See section `%{section}\' in @cite{%{book}}' => '', + 'September' => 'September', + 'Short Table of Contents' => 'Korte inhoudsopgave', + 'Short table of contents' => '', + 'Subsection One-Four' => '', + 'Subsection One-One' => '', + 'Subsection One-Three' => '', + 'Subsection One-Two' => '', + 'Subsubsection One-Two-Four' => '', + 'Subsubsection One-Two-One' => '', + 'Subsubsection One-Two-Three' => '', + 'Subsubsection One-Two-Two' => '', + 'T2H_today' => '', + 'Table of Contents' => 'Inhoudsopgave', + 'Table of contents' => '', + 'The node you are looking for is at %{href}.' => '', + 'This' => '', + 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => '', + 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'Top' => '', + 'Untitled Document' => '', + 'Up' => '', + 'Up node' => '', + 'Up section' => '', + 'by @emph{%{user}}' => '', + 'by @emph{%{user}} on @emph{%{date}}' => '', + 'current' => '', + 'on @emph{%{date}}' => '', + 'section `%{section}\' in @cite{%{book}}' => '', + 'see %{node_file_href}' => '', + 'see %{node_file_href} @cite{%{book}}' => '', + 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'see %{reference_name}' => '', + 'see @cite{%{book}}' => '', + 'see section %{reference_name}' => '', + 'see section `%{section}\' in @cite{%{book}}' => '', + 'unknown' => '' + }; + +$T2H_OBSOLETE_STRINGS->{'nl'} = { + 'See' => 'Zie', + 'section' => 'sectie', + 'see' => 'zie' + }; + + +$LANGUAGES->{'no'} = { + ' The buttons in the navigation panels have the following meaning:' => '', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => '', + ' Up ' => '', + '%{acronym_like} (%{explanation})' => '', + '%{month}, %{day} %{year}' => '', + '%{name} of %{class}' => '', + '%{name} on %{class}' => '', + '%{node_file_href}' => '', + '%{node_file_href} @cite{%{book}}' => '', + '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + '%{reference_name}' => '', + '%{style} %{number}' => '', + '%{style}: %{caption_first_line}' => '', + '%{style}: %{shortcaption_first_line}' => '', + '@b{%{quotation_arg}:} ' => '', + '@cite{%{book}}' => '', + 'About' => '', + 'About (help)' => '', + 'About This Document' => 'No translation available!', + 'April' => 'april', + 'August' => 'august', + 'Back' => '', + 'Beginning of this chapter or previous chapter' => '', + 'Button' => '', + 'Contents' => '', + 'Cover (top) of document' => '', + 'Current Position' => '', + 'Current section' => '', + 'December' => 'desember', + 'FastBack' => '', + 'FastForward' => '', + 'February' => 'februar', + 'First' => '', + 'First section in reading order' => '', + 'Following' => '', + 'Following node' => '', + 'Footnotes' => 'No translation available!', + 'Forward' => '', + 'From 1.2.3 go to' => '', + 'Go to' => '', + 'Index' => 'Indeks', + 'Index Entry' => '', + 'January' => 'januar', + 'July' => 'juli', + 'Jump to' => '', + 'June' => 'juni', + 'Last' => '', + 'Last section in reading order' => '', + 'March' => 'mars', + 'May' => 'mai', + 'Menu:' => '', + 'Name' => '', + 'Next' => '', + 'Next chapter' => '', + 'Next node' => '', + 'Next section in reading order' => '', + 'Next section on same level' => '', + 'Node following in node reading order' => '', + 'Node up' => '', + 'NodeNext' => '', + 'NodePrev' => '', + 'NodeUp' => '', + 'November' => 'november', + 'October' => 'oktober', + 'Overview' => '', + 'Overview:' => '', + 'Prev' => '', + 'Previous node' => '', + 'Previous section in reading order' => '', + 'Previous section on same level' => '', + 'Section' => '', + 'Section One' => '', + 'See %{node_file_href}' => '', + 'See %{node_file_href} @cite{%{book}}' => '', + 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'See %{reference_name}' => '', + 'See @cite{%{book}}' => '', + 'See section %{reference_name}' => '', + 'See section `%{section}\' in @cite{%{book}}' => '', + 'September' => 'september', + 'Short Table of Contents' => 'Kort innholdsfortegnelse', + 'Short table of contents' => '', + 'Subsection One-Four' => '', + 'Subsection One-One' => '', + 'Subsection One-Three' => '', + 'Subsection One-Two' => '', + 'Subsubsection One-Two-Four' => '', + 'Subsubsection One-Two-One' => '', + 'Subsubsection One-Two-Three' => '', + 'Subsubsection One-Two-Two' => '', + 'T2H_today' => '', + 'Table of Contents' => 'Innholdsfortegnelse', + 'Table of contents' => '', + 'The node you are looking for is at %{href}.' => '', + 'This' => '', + 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => '', + 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => '', + 'Top' => '', + 'Untitled Document' => '', + 'Up' => '', + 'Up node' => '', + 'Up section' => '', + 'by @emph{%{user}}' => '', + 'by @emph{%{user}} on @emph{%{date}}' => '', + 'current' => '', + 'on @emph{%{date}}' => '', + 'section `%{section}\' in @cite{%{book}}' => '', + 'see %{node_file_href}' => '', + 'see %{node_file_href} @cite{%{book}}' => '', + 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => '', + 'see %{reference_name}' => '', + 'see @cite{%{book}}' => '', + 'see section %{reference_name}' => '', + 'see section `%{section}\' in @cite{%{book}}' => '', + 'unknown' => '' + }; + +$T2H_OBSOLETE_STRINGS->{'no'} = { + 'See' => 'Se', + 'section' => 'avsnitt', + 'see' => 'se' + }; + + +$LANGUAGES->{'pt'} = { + ' The buttons in the navigation panels have the following meaning:' => ' Os bot@~oes nos pain@\'eis de navega@,{c}@~ao possuem os seguintes significados:', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' onde o @strong{ Exemplo } assume que a posi@,{c}@~ao atual localiza-se em @strong{ Subsub@,{c}@~ao Um-Dois-Tr@^es } de um documento com a seguinte estrutura:', + ' Up ' => ' Acima ', + '%{acronym_like} (%{explanation})' => '', + '%{month}, %{day} %{year}' => '%{day} de %{month} de %{year}', + '%{name} of %{class}' => '%{name} da %{class}', + '%{name} on %{class}' => '%{name} na %{class}', + '%{node_file_href}' => '', + '%{node_file_href} @cite{%{book}}' => '', + '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', + '%{reference_name}' => '', + '%{style} %{number}' => '', + '%{style}: %{caption_first_line}' => '', + '%{style}: %{shortcaption_first_line}' => '', + '@b{%{quotation_arg}:} ' => '', + '@cite{%{book}}' => '', + 'About' => 'Sobre', + 'About (help)' => 'Sobre (ajuda)', + 'About This Document' => 'Sobre Esse Documento', + 'April' => 'Abril', + 'August' => 'Agosto', + 'Back' => 'Volta', + 'Beginning of this chapter or previous chapter' => 'Come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior', + 'Button' => 'Bot@~ao', + 'Contents' => 'Conte@\'udo', + 'Cover (top) of document' => 'In@\'icio (topo) do documento', + 'Current Position' => 'Posi@,{c}@~ao Atual', + 'Current section' => 'Se@,{c}@~ao atual', + 'December' => 'Dezembro', + 'FastBack' => 'Voltar R@\'apido', + 'FastForward' => 'Avan@,{c}ar R@\'apido', + 'February' => 'Fevereiro', + 'First' => 'Primeiro', + 'First section in reading order' => 'Primeira se@,{c}@~ao na ordem de leitura', + 'Following' => 'Seguinte', + 'Following node' => 'Nodo seguinte', + 'Footnotes' => 'Notas de Rodap@\'e', + 'Forward' => 'Avan@,{c}ar', + 'From 1.2.3 go to' => 'De 1.2.3 v@\'a para', + 'Go to' => 'V@\'a para', + 'Index' => '@\'Indice', + 'Index Entry' => 'Entrada de @\'Indice', + 'January' => 'Janeiro', + 'July' => 'Julho', + 'Jump to' => 'Pular para', + 'June' => 'Junho', + 'Last' => '@\'Ultimo', + 'Last section in reading order' => '@\'Ultima se@,{c}@~ao na ordem de leitura', + 'March' => 'Mar@,{c}o', + 'May' => 'Maio', + 'Menu:' => '', + 'Name' => 'Nome', + 'Next' => 'Pr@\'oximo', + 'Next chapter' => 'Pr@\'oximo cap@\'itulo', + 'Next node' => 'Pr@\'oximo nodo', + 'Next section in reading order' => 'Pr@\'oxima se@,{c}@~ao na ordem de leitura', + 'Next section on same level' => 'Pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel', + 'Node following in node reading order' => 'Nodo seguinte na ordem de leitura de nodos', + 'Node up' => 'Nodo acima', + 'NodeNext' => 'Pr@\'oximo Nodo', + 'NodePrev' => 'Nodo Anterior', + 'NodeUp' => 'Nodo Acima', + 'November' => 'Novembro', + 'October' => 'Outubro', + 'Overview' => 'Vis@~ao geral', + 'Overview:' => 'Vis@~ao geral:', + 'Prev' => 'Pr@\'evio', + 'Previous node' => 'Nodo anterior', + 'Previous section in reading order' => 'Se@,{c}@~ao anterior na ordem de leitura', + 'Previous section on same level' => 'Se@,{c}@~ao anterior no mesmo n@\'ivel', + 'Section' => 'Se@,{c}@~ao', + 'Section One' => 'Se@,{c}@~ao Um', + 'See %{node_file_href}' => 'Veja %{node_file_href}', + 'See %{node_file_href} @cite{%{book}}' => 'Veja %{node_file_href} @cite{%{book}}', + 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'Veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', + 'See %{reference_name}' => 'Veja %{reference_name}', + 'See @cite{%{book}}' => 'Veja @cite{%{book}}', + 'See section %{reference_name}' => 'Veja se@,{c}@~ao %{reference_name}', + 'See section `%{section}\' in @cite{%{book}}' => 'Veja se@,{c}@~ao `%{section}\' em @cite{%{book}}', + 'September' => 'Setembro', + 'Short Table of Contents' => 'Breve Sum@\'ario', + 'Short table of contents' => 'Breve sum@\'ario', + 'Subsection One-Four' => 'Subse@,{c}@~ao Um-Quatro', + 'Subsection One-One' => 'Subse@,{c}@~ao Um-Um', + 'Subsection One-Three' => 'Subse@,{c}@~ao Um-Tr@^es', + 'Subsection One-Two' => 'Subse@,{c}@~ao Um-Dois', + 'Subsubsection One-Two-Four' => 'Subse@,{c}@~ao Um-Dois-Quatro', + 'Subsubsection One-Two-One' => 'Subse@,{c}@~ao Um-Dois-Um', + 'Subsubsection One-Two-Three' => 'Subse@,{c}@~ao Um-Dois-Tr@^es', + 'Subsubsection One-Two-Two' => 'Subse@,{c}@~ao Um-Dois-Dois', + 'T2H_today' => '', + 'Table of Contents' => 'Sum@\'ario', + 'Table of contents' => 'Sum@\'ario', + 'The node you are looking for is at %{href}.' => 'O nodo que vo@^e est@\'a olhando est@\'a em %{href}.', + 'This' => 'Esse', + 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gereado por @emph{%{user}} em @emph{%{date}} usando @uref{%{program_homepage}, @emph{%{program}}}.', + 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado por @emph{%{user}} usando @uref{%{program_homepage}, @emph{%{program}}}.', + 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Esse documento foi gerado em @i{%{date}} usando @uref{%{program_homepage}, @i{%{program}}}.', + 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado usando @uref{%{program_homepage}, @emph{%{program}}}.', + 'Top' => 'Topo', + 'Untitled Document' => 'Documento Sem Nome', + 'Up' => 'Acima', + 'Up node' => 'Nodo acima', + 'Up section' => 'Se@,{c}@~ao acima', + 'by @emph{%{user}}' => 'por @emph{%{user}}', + 'by @emph{%{user}} on @emph{%{date}}' => 'por @emph{%{user}} em @emph{%{date}}', + 'current' => 'atual', + 'on @emph{%{date}}' => 'em @emph{%{date}}', + 'section `%{section}\' in @cite{%{book}}' => 'se@,{c}@~ao `%{section}\' em @cite{%{book}}', + 'see %{node_file_href}' => 'veja %{node_file_href}', + 'see %{node_file_href} @cite{%{book}}' => 'veja %{node_file_href} @cite{%{book}}', + 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', + 'see %{reference_name}' => 'veja %{reference_name}', + 'see @cite{%{book}}' => 'veja @cite{%{book}}', + 'see section %{reference_name}' => 'veja se@,{c}@~ao %{reference_name}', + 'see section `%{section}\' in @cite{%{book}}' => 'veja se@,{c}@~ao `%{section}\' em @cite{%{book}}', + 'unknown' => 'desconhecido' + }; + +$T2H_OBSOLETE_STRINGS->{'pt'} = { + 'See' => 'Veja', + 'about (help)' => 'sobre (ajuda)', + 'beginning of this chapter or previous chapter' => 'come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior', + 'cover (top) of document' => 'in@\'icio (topo) do documento', + 'current section' => 'se@,{c}@~ao atual', + 'first section in reading order' => 'primeira se@,{c}@~ao na ordem de leitura', + 'following node' => 'nodo seguinte', + 'index' => '@\'indice', + 'last section in reading order' => '@\'ultima se@,{c}@~ao na ordem de leitura', + 'next chapter' => 'pr@\'oximo cap@\'itulo', + 'next node' => 'pr@\'oximo nodo', + 'next section in reading order' => 'pr@\'oxima se@,{c}@~ao na ordem de leitura', + 'next section on same level' => 'pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel', + 'node following in node reading order' => 'nodo seguinte na ordem de leitura de nodos', + 'node up' => 'nodo acima', + 'previous node' => 'nodo anterior', + 'previous section in reading order' => 'se@,{c}@~ao anterior na ordem de leitura', + 'previous section on same level' => 'se@,{c}@~ao anterior no mesmo n@\'ivel', + 'section' => 'Se@,{c}@~ao', + 'see' => 'veja', + 'short table of contents' => 'breve sum@\'ario', + 'table of contents' => 'sum@\'ario', + 'up node' => 'nodo acima', + 'up section' => 'se@,{c}@~ao acima' + }; + + +$LANGUAGES->{'pt_BR'} = { + ' The buttons in the navigation panels have the following meaning:' => ' Os bot@~oes nos pain@\'eis de navega@,{c}@~ao possuem os seguintes significados:', + ' where the @strong{ Example } assumes that the current position is at @strong{ Subsubsection One-Two-Three } of a document of the following structure:' => ' onde o @strong{ Exemplo } assume que a posi@,{c}@~ao atual localiza-se em @strong{ Subsub@,{c}@~ao Um-Dois-Tr@^es } de um documento com a seguinte estrutura:', + ' Up ' => ' Acima ', + '%{acronym_like} (%{explanation})' => '', + '%{month}, %{day} %{year}' => '%{day} de %{month} de %{year}', + '%{name} of %{class}' => '%{name} da %{class}', + '%{name} on %{class}' => '%{name} na %{class}', + '%{node_file_href}' => '', + '%{node_file_href} @cite{%{book}}' => '', + '%{node_file_href} section `%{section}\' in @cite{%{book}}' => '%{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', + '%{reference_name}' => '', + '%{style} %{number}' => '', + '%{style}: %{caption_first_line}' => '', + '%{style}: %{shortcaption_first_line}' => '', + '@b{%{quotation_arg}:} ' => '', + '@cite{%{book}}' => '', + 'About' => 'Sobre', + 'About (help)' => 'Sobre (ajuda)', + 'About This Document' => 'Sobre Esse Documento', + 'April' => 'Abril', + 'August' => 'Agosto', + 'Back' => 'Volta', + 'Beginning of this chapter or previous chapter' => 'Come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior', + 'Button' => 'Bot@~ao', + 'Contents' => 'Conte@\'udo', + 'Cover (top) of document' => 'In@\'icio (topo) do documento', + 'Current Position' => 'Posi@,{c}@~ao Atual', + 'Current section' => 'Se@,{c}@~ao atual', + 'December' => 'Dezembro', + 'FastBack' => 'Voltar R@\'apido', + 'FastForward' => 'Avan@,{c}ar R@\'apido', + 'February' => 'Fevereiro', + 'First' => 'Primeiro', + 'First section in reading order' => 'Primeira se@,{c}@~ao na ordem de leitura', + 'Following' => 'Seguinte', + 'Following node' => 'Nodo seguinte', + 'Footnotes' => 'Notas de Rodap@\'e', + 'Forward' => 'Avan@,{c}ar', + 'From 1.2.3 go to' => 'De 1.2.3 v@\'a para', + 'Go to' => 'V@\'a para', + 'Index' => '@\'Indice', + 'Index Entry' => 'Entrada de @\'Indice', + 'January' => 'Janeiro', + 'July' => 'Julho', + 'Jump to' => 'Pular para', + 'June' => 'Junho', + 'Last' => '@\'Ultimo', + 'Last section in reading order' => '@\'Ultima se@,{c}@~ao na ordem de leitura', + 'March' => 'Mar@,{c}o', + 'May' => 'Maio', + 'Menu:' => '', + 'Name' => 'Nome', + 'Next' => 'Pr@\'oximo', + 'Next chapter' => 'Pr@\'oximo cap@\'itulo', + 'Next node' => 'Pr@\'oximo nodo', + 'Next section in reading order' => 'Pr@\'oxima se@,{c}@~ao na ordem de leitura', + 'Next section on same level' => 'Pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel', + 'Node following in node reading order' => 'Nodo seguinte na ordem de leitura de nodos', + 'Node up' => 'Nodo acima', + 'NodeNext' => 'Pr@\'oximo Nodo', + 'NodePrev' => 'Nodo Anterior', + 'NodeUp' => 'Nodo Acima', + 'November' => 'Novembro', + 'October' => 'Outubro', + 'Overview' => 'Vis@~ao geral', + 'Overview:' => 'Vis@~ao geral:', + 'Prev' => 'Pr@\'evio', + 'Previous node' => 'Nodo anterior', + 'Previous section in reading order' => 'Se@,{c}@~ao anterior na ordem de leitura', + 'Previous section on same level' => 'Se@,{c}@~ao anterior no mesmo n@\'ivel', + 'Section' => 'Se@,{c}@~ao', + 'Section One' => 'Se@,{c}@~ao Um', + 'See %{node_file_href}' => 'Veja %{node_file_href}', + 'See %{node_file_href} @cite{%{book}}' => 'Veja %{node_file_href} @cite{%{book}}', + 'See %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'Veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', + 'See %{reference_name}' => 'Veja %{reference_name}', + 'See @cite{%{book}}' => 'Veja @cite{%{book}}', + 'See section %{reference_name}' => 'Veja se@,{c}@~ao %{reference_name}', + 'See section `%{section}\' in @cite{%{book}}' => 'Veja se@,{c}@~ao `%{section}\' em @cite{%{book}}', + 'September' => 'Setembro', + 'Short Table of Contents' => 'Breve Sum@\'ario', + 'Short table of contents' => 'Breve sum@\'ario', + 'Subsection One-Four' => 'Subse@,{c}@~ao Um-Quatro', + 'Subsection One-One' => 'Subse@,{c}@~ao Um-Um', + 'Subsection One-Three' => 'Subse@,{c}@~ao Um-Tr@^es', + 'Subsection One-Two' => 'Subse@,{c}@~ao Um-Dois', + 'Subsubsection One-Two-Four' => 'Subse@,{c}@~ao Um-Dois-Quatro', + 'Subsubsection One-Two-One' => 'Subse@,{c}@~ao Um-Dois-Um', + 'Subsubsection One-Two-Three' => 'Subse@,{c}@~ao Um-Dois-Tr@^es', + 'Subsubsection One-Two-Two' => 'Subse@,{c}@~ao Um-Dois-Dois', + 'T2H_today' => '', + 'Table of Contents' => 'Sum@\'ario', + 'Table of contents' => 'Sum@\'ario', + 'The node you are looking for is at %{href}.' => 'O nodo que vo@^e est@\'a olhando est@\'a em %{href}.', + 'This' => 'Esse', + 'This document was generated by @emph{%{user}} on @emph{%{date}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gereado por @emph{%{user}} em @emph{%{date}} usando @uref{%{program_homepage}, @emph{%{program}}}.', + 'This document was generated by @emph{%{user}} using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado por @emph{%{user}} usando @uref{%{program_homepage}, @emph{%{program}}}.', + 'This document was generated on @i{%{date}} using @uref{%{program_homepage}, @i{%{program}}}.' => 'Esse documento foi gerado em @i{%{date}} usando @uref{%{program_homepage}, @i{%{program}}}.', + 'This document was generated using @uref{%{program_homepage}, @emph{%{program}}}.' => 'Esse documento foi gerado usando @uref{%{program_homepage}, @emph{%{program}}}.', + 'Top' => 'Topo', + 'Untitled Document' => 'Documento Sem Nome', + 'Up' => 'Acima', + 'Up node' => 'Nodo acima', + 'Up section' => 'Se@,{c}@~ao acima', + 'by @emph{%{user}}' => 'por @emph{%{user}}', + 'by @emph{%{user}} on @emph{%{date}}' => 'por @emph{%{user}} em @emph{%{date}}', + 'current' => 'atual', + 'on @emph{%{date}}' => 'em @emph{%{date}}', + 'section `%{section}\' in @cite{%{book}}' => 'se@,{c}@~ao `%{section}\' em @cite{%{book}}', + 'see %{node_file_href}' => 'veja %{node_file_href}', + 'see %{node_file_href} @cite{%{book}}' => 'veja %{node_file_href} @cite{%{book}}', + 'see %{node_file_href} section `%{section}\' in @cite{%{book}}' => 'veja %{node_file_href} se@,{c}@~ao `%{section}\' em @cite{%{book}}', + 'see %{reference_name}' => 'veja %{reference_name}', + 'see @cite{%{book}}' => 'veja @cite{%{book}}', + 'see section %{reference_name}' => 'veja se@,{c}@~ao %{reference_name}', + 'see section `%{section}\' in @cite{%{book}}' => 'veja se@,{c}@~ao `%{section}\' em @cite{%{book}}', + 'unknown' => 'desconhecido' + }; + +$T2H_OBSOLETE_STRINGS->{'pt_BR'} = { + 'See' => 'Veja', + 'about (help)' => 'sobre (ajuda)', + 'beginning of this chapter or previous chapter' => 'come@,{c}o desse cap@\'itulo ou cap@\'itulo anterior', + 'cover (top) of document' => 'in@\'icio (topo) do documento', + 'current section' => 'se@,{c}@~ao atual', + 'first section in reading order' => 'primeira se@,{c}@~ao na ordem de leitura', + 'following node' => 'nodo seguinte', + 'index' => '@\'indice', + 'last section in reading order' => '@\'ultima se@,{c}@~ao na ordem de leitura', + 'next chapter' => 'pr@\'oximo cap@\'itulo', + 'next node' => 'pr@\'oximo nodo', + 'next section in reading order' => 'pr@\'oxima se@,{c}@~ao na ordem de leitura', + 'next section on same level' => 'pr@\'oxima se@,{c}@~ao no mesmo n@\'ivel', + 'node following in node reading order' => 'nodo seguinte na ordem de leitura de nodos', + 'node up' => 'nodo acima', + 'previous node' => 'nodo anterior', + 'previous section in reading order' => 'se@,{c}@~ao anterior na ordem de leitura', + 'previous section on same level' => 'se@,{c}@~ao anterior no mesmo n@\'ivel', + 'section' => 'Se@,{c}@~ao', + 'see' => 'veja', + 'short table of contents' => 'breve sum@\'ario', + 'table of contents' => 'sum@\'ario', + 'up node' => 'nodo acima', + 'up section' => 'se@,{c}@~ao acima' + }; + + + +require "$ENV{T2H_HOME}/$translation_file" + if ($0 =~ /\.pl$/ && + -e "$ENV{T2H_HOME}/$translation_file" && -r "$ENV{T2H_HOME}/$translation_file"); + +# set the default 'args' entry to normal for each style hash (and each command +# within) +my $name_index = -1; +my @hash_names = ('style_map', 'style_map_pre', 'style_map_texi', 'simple_format_style_map_texi'); +foreach my $hash (\%style_map, \%style_map_pre, \%style_map_texi, \%simple_format_style_map_texi) +{ + $name_index++; + my $name = $hash_names[$name_index]; # name associated with hash ref + foreach my $style (keys(%{$hash})) + { + next unless (ref($hash->{$style}) eq 'HASH'); + $hash->{$style}->{'args'} = ['normal'] if (!exists($hash->{$style}->{'args'})); + die "Bug: args not defined, but existing, for $style in $name" if (!defined($hash->{$style}->{'args'})); +#print STDERR "DEFAULT($name, $hash) add normal as arg for $style ($hash->{$style}), $hash->{$style}->{'args'}\n"; + } +} + +# +# Some functions used to override normal formatting functions in specific +# cases. The user shouldn't want to change them, but can use them. +# + +# used to utf8 encode the result +sub t2h_utf8_accent($$$) +{ + my $accent = shift; + my $args = shift; + my $style_stack = shift; + + my $text = $args->[0]; + #print STDERR "$accent\[".scalar(@$style_stack) ."\] (@$style_stack)\n"; + + # special handling of @dotless{i} + if ($accent eq 'dotless') + { + if (($text eq 'i') and (!defined($style_stack->[-1]) or (!defined($unicode_accents{$style_stack->[-1]})) or ($style_stack->[-1] eq 'tieaccent'))) + { + return "\x{0131}"; + } + #return "\x{}" if ($text eq 'j'); # not found ! + return $text; + } + + # FIXME \x{0131}\x{0308} for @dotless{i} @" doesn't lead to NFC 00ef. + return Unicode::Normalize::NFC($text . chr(hex($unicode_diacritical{$accent}))) + if (defined($unicode_diacritical{$accent})); + return ascii_accents($text, $accent); +} + +sub t2h_utf8_normal_text($$$$$) +{ + my $text = shift; + my $in_raw_text = shift; + my $in_preformatted = shift; + my $in_code =shift; + my $style_stack = shift; + $text = &$protect_text($text) unless($in_raw_text); + $text = uc($text) if (in_small_caps($style_stack)); + + if (!$in_code and !$in_preformatted) + { + $text =~ s/---/\x{2014}/g; + $text =~ s/--/\x{2013}/g; + $text =~ s/``/\x{201C}/g; + $text =~ s/''/\x{201D}/g; + } + return Unicode::Normalize::NFC($text); +} + +# these are unlikely to be used by users, as they are essentially +# used to follow the html external refs specification in texinfo +sub t2h_cross_manual_normal_text($$$$$) +{ + my $text = shift; + my $in_raw_text = shift; + my $in_preformatted = shift; + my $in_code =shift; + my $style_stack = shift; + + $text = uc($text) if (in_small_caps($style_stack)); + return $text if ($USE_UNICODE); + + # if there is no unicode support, we do all the transformations here + my $result = ''; + while ($text ne '') + { + if ($text =~ s/^([A-Za-z0-9]+)//o) + { + $result .= $1; + } + elsif ($text =~ s/^ //o) + { + $result .= '-'; + } + elsif ($text =~ s/^(.)//o) + { + if (exists($ascii_character_map{$1})) + { + $result .= '_' . lc($ascii_character_map{$1}); + } + else + { # wild guess that should work for latin1 + $result .= '_' . '00' . lc(sprintf("%02x",ord($1))); + } + } + else + { + print STDERR "Bug: unknown character in cross ref (likely in infinite loop)\n"; + sleep 1; + } + } + + return $result; +} + +sub t2h_nounicode_cross_manual_accent($$$) +{ + my $accent = shift; + my $args = shift; + my $style_stack = shift; + + my $text = $args->[0]; + + if ($accent eq 'dotless') + { + if (($text eq 'i') and (!defined($style_stack->[-1]) or (!defined($unicode_accents{$style_stack->[-1]})) or ($style_stack->[-1] eq 'tieaccent'))) + { + return "_0131"; + } + #return "\x{}" if ($text eq 'j'); # not found ! + return $text; + } + return '_' . lc($unicode_accents{$accent}->{$text}) + if (defined($unicode_accents{$accent}->{$text})); + return ($text . '_' . lc($unicode_diacritical{$accent})) + if (defined($unicode_diacritical{$accent})); + return ascii_accents($text, $accent); +} + +sub t2h_transliterate_cross_manual_accent($$) +{ + my $accent = shift; + my $args = shift; + + my $text = $args->[0]; + + if (exists($unicode_accents{$accent}->{$text}) and + exists ($transliterate_map{$unicode_accents{$accent}->{$text}})) + { + return $transliterate_map{$unicode_accents{$accent}->{$text}}; + } + return $text; +} + + +} # end package Texi2HTML::Config + +use vars qw( +%value +); + +# variables which might be redefined by the user but aren't likely to be +# they seem to be in the main namespace +use vars qw( +%index_names +%predefined_index +%valid_index +%sec2level +%code_style_map +%region_lines +%forbidden_index_name +); + +# Some global variables are set in the script, and used in the subroutines +# they are in the Texi2HTML namespace, thus prefixed with Texi2HTML::. +# see texi2html.init for details. + +#+++############################################################################ +# # +# Initialization # +# Pasted content of File $(srcdir)/MySimple.pm: Command-line processing # +# # +#---############################################################################ + +# leave this within comments, and keep the require statement +# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init +# exists. + +# @MYSIMPLE@ +package Getopt::MySimple; + +# Name: +# Getopt::MySimple. +# +# Documentation: +# POD-style (incomplete) documentation is in file MySimple.pod +# +# Tabs: +# 4 spaces || die. +# +# Author: +# Ron Savage rpsavage@ozemail.com.au. +# 1.00 19-Aug-97 Initial version. +# 1.10 13-Oct-97 Add arrays of switches (eg '=s@'). +# 1.20 3-Dec-97 Add 'Help' on a per-switch basis. +# 1.30 11-Dec-97 Change 'Help' to 'verbose'. Make all hash keys lowercase. +# 1.40 10-Nov-98 Change width of help report. Restructure tests. +# 1-Jul-00 Modifications for Texi2html + +# -------------------------------------------------------------------------- +# Locally modified by obachman (Display type instead of env, order by cmp) +# $Id: MySimple.pm,v 1.5 2006/04/17 23:11:09 pertusus Exp $ + +# use strict; +# no strict 'refs'; + +use vars qw(@EXPORT @EXPORT_OK @ISA); +use vars qw($fieldWidth $opt $VERSION); + +use Exporter(); +use Getopt::Long; + +@ISA = qw(Exporter); +@EXPORT = qw(); +@EXPORT_OK = qw($opt); # An alias for $self -> {'opt'}. + +# -------------------------------------------------------------------------- + +$fieldWidth = 20; +$VERSION = '1.41'; + +# -------------------------------------------------------------------------- + +sub byOrder +{ + my($self) = @_; + + return uc($a) cmp (uc($b)); +} + +# -------------------------------------------------------------------------- + +sub dumpOptions +{ + my($self) = @_; + + print 'Option', ' ' x ($fieldWidth - length('Option') ), "Value\n"; + + for (sort byOrder keys(%{$self -> {'opt'} }) ) + { + print "-$_", ' ' x ($fieldWidth - (1 + length) ), "${$self->{'opt'} }{$_}\n"; + } + + print "\n"; + +} # End of dumpOptions. + +# -------------------------------------------------------------------------- +# Return: +# 0 -> Error. +# 1 -> Ok. + +sub getOptions +{ + push(@_, 0) if ($#_ == 2); # Default for $ignoreCase is 0. + push(@_, 1) if ($#_ == 3); # Default for $helpThenExit is 1. + + my($self, $default, $helpText, $versionText, + $helpThenExit, $versionThenExit, $ignoreCase) = @_; + + $helpThenExit = 1 unless (defined($helpThenExit)); + $versionThenExit = 1 unless (defined($versionThenExit)); + $ignoreCase = 0 unless (defined($ignoreCase)); + + $self -> {'default'} = $default; + $self -> {'helpText'} = $helpText; + $self -> {'versionText'} = $versionText; + $Getopt::Long::ignorecase = $ignoreCase; + + unless (defined($self -> {'default'}{'help'})) + { + $self -> {'default'}{'help'} = + { + type => ':i', + default => '', + linkage => sub {$self->helpOptions($_[1]); sleep 5;exit (0) if $helpThenExit;}, + verbose => "print help and exit" + }; + } + + unless (defined($self -> {'default'}{'version'})) + { + $self -> {'default'}{'version'} = + { + type => '', + default => '', + linkage => sub {print $self->{'versionText'}; exit (0) if $versionThenExit;}, + verbose => "print version and exit" + }; + } + + for (keys(%{$self -> {'default'} }) ) + { + next unless (ref(${$self -> {'default'} }{$_}) eq 'HASH'); + my $type = ${$self -> {'default'} }{$_}{'type'}; + push(@{$self -> {'type'} }, "$_$type"); + $self->{'opt'}->{$_} = ${$self -> {'default'} }{$_}{'linkage'} + if ${$self -> {'default'} }{$_}{'linkage'}; + } + + my($result) = &GetOptions($self -> {'opt'}, @{$self -> {'type'} }); + + return $result unless $result; + + for (keys(%{$self -> {'default'} }) ) + { + if (! defined(${$self -> {'opt'} }{$_})) #{ + { + ${$self -> {'opt'} }{$_} = ${$self -> {'default'} }{$_}{'default'}; + } + } + + $result; +} # End of getOptions. + +# -------------------------------------------------------------------------- + +sub helpOptions +{ + my($self) = shift; + my($noHelp) = shift; + $noHelp = 0 unless $noHelp; + my($optwidth, $typewidth, $defaultwidth, $maxlinewidth, $valind, $valwidth) + = (10, 5, 9, 78, 4, 11); + + print "$self->{'helpText'}" if ($self -> {'helpText'}); + + print ' Option', ' ' x ($optwidth - length('Option') -1 ), + 'Type', ' ' x ($typewidth - length('Type') + 1), + 'Default', ' ' x ($defaultwidth - length('Default') ), + "Description\n"; + + for (sort byOrder keys(%{$self -> {'default'} }) ) + { + my($line, $help, $option, $val); + $option = $_; + next if ${$self->{'default'} }{$_}{'noHelp'} && ${$self->{'default'} }{$_}{'noHelp'} > $noHelp; + #$line = " -$_" . ' ' x ($optwidth - (2 + length) ) . + # "${$self->{'default'} }{$_}{'type'} ". + # ' ' x ($typewidth - (1+length(${$self -> {'default'} }{$_}{'type'}) )); + $line = " --$_" . "${$self->{'default'} }{$_}{'type'}". + ' ' x ($typewidth - (1+length(${$self -> {'default'} }{$_}{'type'}) )); + + $val = ${$self->{'default'} }{$_}{'linkage'}; + if ($val) + { + if ((ref($val) eq 'SCALAR') and (defined($$val))) + { + $val = $$val; + } + else + { + $val = ''; + } + } + elsif (defined(${$self->{'default'} }{$_}{'default'})) + { + $val = ${$self->{'default'} }{$_}{'default'}; + } + else + { + $val = ''; + } + $line .= "$val "; + $line .= ' ' x ($optwidth + $typewidth + $defaultwidth + 1 - length($line)); + + if (defined(${$self -> {'default'} }{$_}{'verbose'}) && + ${$self -> {'default'} }{$_}{'verbose'} ne '') + { + $help = "${$self->{'default'} }{$_}{'verbose'}"; + } + else + { + $help = ' '; + } + if ((length("$line") + length($help)) < $maxlinewidth) + { + print $line , $help, "\n"; + } + else + { + print $line, "\n", ' ' x $valind, $help, "\n"; + } + for $val (sort byOrder keys(%{${$self->{'default'}}{$option}{'values'}})) + { + print ' ' x ($valind + 2); + print $val, ' ', ' ' x ($valwidth - length($val) - 2); + print ${$self->{'default'}}{$option}{'values'}{$val}, "\n"; + } + } + + print <| ! no argument: variable is set to 1 on -foo (or, to 0 on -nofoo) + =s | :s mandatory (or, optional) string argument + =i | :i mandatory (or, optional) integer argument +EOT +} # End of helpOptions. + +#------------------------------------------------------------------- + +sub new +{ + my($class) = @_; + my($self) = {}; + $self -> {'default'} = {}; + $self -> {'helpText'} = ''; + $self -> {'opt'} = {}; + $opt = $self -> {'opt'}; # An alias for $self -> {'opt'}. + $self -> {'type'} = (); + + return bless $self, $class; + +} # End of new. + +# -------------------------------------------------------------------------- + +1; + +# End MySimple.pm + +require "$ENV{T2H_HOME}/MySimple.pm" + if ($0 =~ /\.pl$/ && + -e "$ENV{T2H_HOME}/MySimple.pm" && -r "$ENV{T2H_HOME}/MySimple.pm"); + +#+++######################################################################## +# # +# Initialization # +# Pasted content of File $(srcdir)/T2h_i18n.pm: Internationalisation # +# # +#---######################################################################## + +# leave this within comments, and keep the require statement +# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/T2h_i18n.pm +# exists. + +# @T2H_I18N@ +#+############################################################################## +# +# T2h_i18n.pm: Internationalization for texi2html +# +# Copyright (C) 1999-2005 Patrice Dumas , +# Derek Price , +# Adrian Aichner , +# & others. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +#-############################################################################## + +# This requires perl version 5 or higher +require 5.0; + +package Texi2HTML::I18n; + +use strict; + +use vars qw( +@ISA +@EXPORT +); + +use Exporter; +@ISA = qw(Exporter); +@EXPORT = qw(pretty_date); + +my $language; +my $i18n_dir = 'i18n'; # name of the directory containing the per language files +#my $translation_file = 'translations.pl'; # file containing all the translations +#my @known_languages = ('de', 'nl', 'es', 'no', 'pt', 'fr'); # The supported + # languages + +######################################################################## +# Language dependencies: +# To add a new language extend the WORDS hash and create $T2H_<...>_WORDS hash +# To redefine one word, simply do: +# $T2h_i18n::T2H_LANGUAGES->{}->{} = 'whatever' in your personal init file. +# + +# Those hashes are obsolete but retained here for reference + +my $T2H_WORDS_EN = +{ + # titles of pages + #'Table of Contents' => 'Table of Contents', + #'Short Table of Contents' => 'Short Table of Contents', + #'Index' => 'Index', + #'About This Document' => 'About This Document', + #'Footnotes' => 'Footnotes', + #'See' => 'See', + #'see' => 'see', + #'section' => 'section', + 'About This Document' => '', + 'Table of Contents' => '', + 'Short Table of Contents', => '', + 'Index' => '', + 'Footnotes' => '', + 'See' => '', + 'see' => '', + 'section' => '', + 'Top' => '', + 'Untitled Document' => '', + # If necessary, we could extend this as follows: + # # text for buttons + # 'Top_Button' => 'Top', + # 'ToC_Button' => 'Contents', + # 'Overview_Button' => 'Overview', + # 'Index_button' => 'Index', + # 'Back_Button' => 'Back', + # 'FastBack_Button' => 'FastBack', + # 'Prev_Button' => 'Prev', + # 'Up_Button' => 'Up', + # 'Next_Button' => 'Next', + # 'Forward_Button' =>'Forward', + # 'FastWorward_Button' => 'FastForward', + # 'First_Button' => 'First', + # 'Last_Button' => 'Last', + # 'About_Button' => 'About' + 'January' => '', + 'February' => '', + 'March' => '', + 'April' => '', + 'May' => '', + 'June' => '', + 'July' => '', + 'August' => '', + 'September' => '', + 'October' => '', + 'November' => '', + 'December' => '', + 'T2H_today' => '%s, %d %d', +}; + +my $T2H_WORDS_DE = +{ + 'Table of Contents' => 'Inhaltsverzeichniss', + 'Short Table of Contents' => 'Kurzes Inhaltsverzeichniss', + 'Index' => 'Index', + 'About This Document' => 'Über dieses Dokument', + 'Footnotes' => 'Fußnoten', + 'See' => 'Siehe', + 'see' => 'siehe', + 'section' => 'Abschnitt', + 'January' => 'Januar', + 'February' => 'Februar', + 'March' => 'März', + 'April' => 'April', + 'May' => 'Mai', + 'June' => 'Juni', + 'July' => 'Juli', + 'August' => 'August', + 'September' => 'September', + 'October' => 'Oktober', + 'November' => 'November', + 'December' => 'Dezember', +}; + +my $T2H_WORDS_NL = +{ + 'Table of Contents' => 'Inhoudsopgave', + 'Short Table of Contents' => 'Korte inhoudsopgave', + 'Index' => 'Index', #Not sure ;-) + 'About This Document' => 'No translation available!', #No translation available! + 'Footnotes' => 'No translation available!', #No translation available! + 'See' => 'Zie', + 'see' => 'zie', + 'section' => 'sectie', + 'January' => 'Januari', + 'February' => 'Februari', + 'March' => 'Maart', + 'April' => 'April', + 'May' => 'Mei', + 'June' => 'Juni', + 'July' => 'Juli', + 'August' => 'Augustus', + 'September' => 'September', + 'October' => 'Oktober', + 'November' => 'November', + 'December' => 'December', +}; + +my $T2H_WORDS_ES = +{ + 'Table of Contents' => 'índice General', + 'Short Table of Contents' => 'Resumen del Contenido', + 'Index' => 'Index', #Not sure ;-) + 'About This Document' => 'No translation available!', #No translation available! + 'Footnotes' => 'Fußnoten', + 'See' => 'Véase', + 'see' => 'véase', + 'section' => 'sección', + 'January' => 'enero', + 'February' => 'febrero', + 'March' => 'marzo', + 'April' => 'abril', + 'May' => 'mayo', + 'June' => 'junio', + 'July' => 'julio', + 'August' => 'agosto', + 'September' => 'septiembre', + 'October' => 'octubre', + 'November' => 'noviembre', + 'December' => 'diciembre', +}; + +my $T2H_WORDS_NO = +{ + 'Table of Contents' => 'Innholdsfortegnelse', + 'Short Table of Contents' => 'Kort innholdsfortegnelse', + 'Index' => 'Indeks', #Not sure ;-) + 'About This Document' => 'No translation available!', #No translation available! + 'Footnotes' => 'No translation available!', + 'See' => 'Se', + 'see' => 'se', + 'section' => 'avsnitt', + 'January' => 'januar', + 'February' => 'februar', + 'March' => 'mars', + 'April' => 'april', + 'May' => 'mai', + 'June' => 'juni', + 'July' => 'juli', + 'August' => 'august', + 'September' => 'september', + 'October' => 'oktober', + 'November' => 'november', + 'December' => 'desember', +}; + +my $T2H_WORDS_PT = +{ + 'Table of Contents' => 'Sumário', + 'Short Table of Contents' => 'Breve Sumário', + 'Index' => 'Índice', #Not sure ;-) + 'About This Document' => 'No translation available!', #No translation available! + 'Footnotes' => 'No translation available!', + 'See' => 'Veja', + 'see' => 'veja', + 'section' => 'Seção', + 'January' => 'Janeiro', + 'February' => 'Fevereiro', + 'March' => 'Março', + 'April' => 'Abril', + 'May' => 'Maio', + 'June' => 'Junho', + 'July' => 'Julho', + 'August' => 'Agosto', + 'September' => 'Setembro', + 'October' => 'Outubro', + 'November' => 'Novembro', + 'December' => 'Dezembro', +}; + +my $T2H_WORDS_FR = +{ + 'Table of Contents' => 'Table des matières', + 'Short Table of Contents' => 'Résumée du contenu', + 'Index' => 'Index', + 'About This Document' => 'A propos de ce document', + 'Footnotes' => 'Notes de bas de page', + 'See' => 'Voir', + 'see' => 'voir', + 'section' => 'section', + 'January' => 'Janvier', + 'February' => 'Février', + 'March' => 'Mars', + 'April' => 'Avril', + 'May' => 'Mai', + 'June' => 'Juin', + 'July' => 'Juillet', + 'August' => 'Août', + 'September' => 'Septembre', + 'October' => 'Octobre', + 'November' => 'Novembre', + 'December' => 'Décembre', + 'T2H_today' => 'le %2$d %1$s %3$d' +}; + +#$T2H_LANGUAGES = +#{ +# 'en' => $T2H_WORDS_EN, +# 'de' => $T2H_WORDS_DE, +# 'nl' => $T2H_WORDS_NL, +# 'es' => $T2H_WORDS_ES, +# 'no' => $T2H_WORDS_NO, +# 'pt' => $T2H_WORDS_PT, +# 'fr' => $T2H_WORDS_FR, +#}; + +sub set_language($) +{ + my $lang = shift; + if (defined($lang) && exists($Texi2HTML::Config::LANGUAGES->{$lang}) && defined($Texi2HTML::Config::LANGUAGES->{$lang})) + { + $language = $lang; + return 1; + } + else + { + return 0; + } +} + + +my @MONTH_NAMES = + ( + 'January', 'February', 'March', 'April', 'May', + 'June', 'July', 'August', 'September', 'October', + 'November', 'December' + ); + +my $I = \&get_string; + +sub pretty_date($) +{ + my $lang = shift; + my($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); + + ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); + $year += ($year < 70) ? 2000 : 1900; + # obachman: Let's do it as the Americans do + #return($MONTH_NAMES->{$lang}[$mon] . ", " . $mday . " " . $year); + #return(sprintf(&$I('T2H_today'), (get_string($MONTH_NAMES[$mon]), $mday, $year))); + return &$I('%{month}, %{day} %{year}', { 'month' => get_string($MONTH_NAMES[$mon]), + 'day' => $mday, 'year' => $year }); +} + +my $error_no_en = 0; +sub get_string($;$$) +{ + my $string = shift; + my $arguments = shift; + my $state = shift; + my $T2H_LANGUAGES = $Texi2HTML::Config::LANGUAGES; + if (! exists($T2H_LANGUAGES->{'en'})) + { + unless($error_no_en) + { + print STDERR "i18n: no LANGUAGES->{'en'} hash\n"; + $error_no_en = 1; + } + } + else + { + print STDERR "i18n: missing string $string\n" unless (exists ($T2H_LANGUAGES->{'en'}->{$string})); + if (defined ($T2H_LANGUAGES->{$language}->{$string}) and + ($T2H_LANGUAGES->{$language}->{$string} ne '')) + { + $string = $T2H_LANGUAGES->{$language}->{$string}; + } + elsif (defined ($T2H_LANGUAGES->{'en'}->{$string}) and + ($T2H_LANGUAGES->{'en'}->{$string} ne '')) + { + $string = $T2H_LANGUAGES->{'en'}->{$string}; + } + } + return main::substitute_line($string, $state) unless (defined($arguments) or !keys(%$arguments)); + # if there are arguments, we must protect the %{arg} constructs before + # doing substitute_line. So there is a first pass here to change %{arg} + # to %@{arg@} + my $result = ''; + if (!$state->{'keep_texi'}) + { + while ($string) + { + if ($string =~ s/^([^%]*)%//) + { + $result .= $1 if (defined($1)); + $result .= '%'; + if ($string =~ s/^%//) + { + $result .= '%'; + } + elsif ($string =~ /^\{(\w+)\}/ and exists($arguments->{$1})) + { + $string =~ s/^\{(\w+)\}//; + $result .= "\@\{$1\@\}"; + } + else + { + $result .= '%'; + } + next; + } + else + { + $result .= $string; + last; + } + } + $string = main::substitute_line($result, $state); + } + # now we substitute the arguments + $result = ''; + while ($string) + { + if ($string =~ s/^([^%]*)%//) + { + $result .= $1 if (defined($1)); + if ($string =~ s/^%//) + { + $result .= '%'; + } + elsif ($string =~ /^\{(\w+)\}/ and exists($arguments->{$1})) + { + $string =~ s/^\{(\w+)\}//; + $result .= $arguments->{$1}; + } + else + { + $result .= '%'; + } + next; + } + else + { + $result .= $string; + last; + } + } + return $result; +} + +1; +require "$ENV{T2H_HOME}/T2h_i18n.pm" + if ($0 =~ /\.pl$/ && + -e "$ENV{T2H_HOME}/T2h_i18n.pm" && -r "$ENV{T2H_HOME}/T2h_i18n.pm"); + + +######################################################################### +# +# latex2html stuff +# +#---###################################################################### + +{ +# leave this within comments, and keep the require statement +# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/T2h_l2h.pm +# exists. + +# @T2H_L2H@ +#+############################################################################## +# +# T2h_l2h.pm: interface to LaTeX2HTML +# +# Copyright (C) 1999-2005 Patrice Dumas , +# Derek Price , +# Adrian Aichner , +# & others. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 USA +# +#-############################################################################## + +require 5.0; +use strict; + +package Texi2HTML::LaTeX2HTML; +use Cwd; + + +# latex2html conversions consist of three stages: +# 1) ToLatex: Put "latex" code into a latex file +# 2) ToHtml: Use latex2html to generate corresponding html code and images +# 3) FromHtml: Extract generated code and images from latex2html run +# + +# init l2h defaults for files and names + +# global variable used for caching +use vars qw( + %l2h_cache + ); + +my ($l2h_name, $l2h_latex_file, $l2h_cache_file, $l2h_html_file, $l2h_prefix); + +# holds the status of latex2html operations. If 0 it means that there was +# an error +my $status = 0; + +my $debug; +my $verbose; +my $docu_rdir; +my $docu_name; +my $docu_ext; +my $ERROR = '***'; + +########################## +# +# First stage: Generation of Latex file +# Initialize with: init +# Add content with: to_latex ($text) --> HTML placeholder comment +# Finish with: finish_to_latex +# + +my $l2h_latex_preamble = <$l2h_latex_file")) + { + warn "$ERROR l2h: Can't open latex file '$l2h_latex_file' for writing: $!\n"; + $status = 0; + return; + } + warn "# l2h: use ${l2h_latex_file} as latex file\n" if ($verbose); + print L2H_LATEX $l2h_latex_preamble; + } + # open the database that holds cached text + init_cache(); + $status = 1; +} + + +# print text (2nd arg) into latex file (if not already there nor in cache) +# which can be later on replaced by the latex2html generated text. +# +sub to_latex($$$) +{ + my $command = shift; + my $text = shift; + my $counter = shift; + if ($command eq 'tex') + { + $text .= ' '; + } + elsif ($command eq 'math') + { + $text = "\$".$text."\$"; + } + $to_latex_count++; + $text =~ s/(\s*)$//; + # try whether we have text already on things to do + my $count = $l2h_to_latex{$text}; + unless ($count) + { + $latex_count++; + $count = $latex_count; + # try whether we can get it from cache + my $cached_text = from_cache($text); + if (defined($cached_text)) + { + $cached_count++; + # put the cached result in the html result array + $l2h_from_html[$count] = $cached_text; + } + else + { + $latex_converted_count++; + unless ($Texi2HTML::Config::L2H_SKIP) + { + print L2H_LATEX "\\begin{rawhtml}\n"; + print L2H_LATEX "\n"; + print L2H_LATEX "\\end{rawhtml}\n"; + + print L2H_LATEX "$text\n"; + + print L2H_LATEX "\\begin{rawhtml}\n"; + print L2H_LATEX "\n"; + print L2H_LATEX "\\end{rawhtml}\n"; + } + } + $l2h_to_latex[$count] = $text; + $l2h_to_latex{$text} = $count; + } + $global_count{"${command}_$counter"} = $count; + return 1; +} + +# print closing into latex file and close it +sub finish_to_latex() +{ + my $reused = $to_latex_count - $latex_converted_count - $cached_count; + unless ($Texi2HTML::Config::L2H_SKIP) + { + print L2H_LATEX $l2h_latex_closing; + close (L2H_LATEX); + } + warn "# l2h: finished to latex ($cached_count cached, $reused reused, $latex_converted_count to process)\n" if ($verbose); + unless ($latex_count) + { + # no @tex nor @math + finish(); + return 0; + } + return 1; +} + +################################### +# Second stage: Use latex2html to generate corresponding html code and images +# +# to_html([$l2h_latex_file, [$l2h_html_dir]]): +# Call latex2html on $l2h_latex_file +# Put images (prefixed with $l2h_name."_") and html file(s) in $l2h_html_dir +# Return 1, on success +# 0, otherwise +# +sub to_html() +{ + my ($call, $dotbug); + # when there are no tex constructs to convert (happens in case everything + # comes from the cache), there is no latex2html run + if ($Texi2HTML::Config::L2H_SKIP or ($latex_converted_count == 0)) + { + warn "# l2h: skipping latex2html run\n" if ($verbose); + return 1; + } + # Check for dot in directory where dvips will work + if ($Texi2HTML::Config::L2H_TMP) + { + if ($Texi2HTML::Config::L2H_TMP =~ /\./) + { + warn "$ERROR Warning l2h: l2h_tmp dir contains a dot. Use /tmp, instead\n"; + $dotbug = 1; + } + } + else + { + if (cwd() =~ /\./) + { + warn "$ERROR Warning l2h: current dir contains a dot. Use /tmp as l2h_tmp dir \n"; + $dotbug = 1; + } + } + # fix it, if necessary and hope that it works + $Texi2HTML::Config::L2H_TMP = "/tmp" if ($dotbug); + + $call = $Texi2HTML::Config::L2H_L2H; + # use init file, if specified + my $init_file = main::locate_init_file($Texi2HTML::Config::L2H_FILE); + $call = $call . " -init_file " . $init_file if ($init_file); + # set output dir + $call .= ($docu_rdir ? " -dir $docu_rdir" : " -no_subdir"); + # use l2h_tmp, if specified + $call .= " -tmp $Texi2HTML::Config::L2H_TMP" if ($Texi2HTML::Config::L2H_TMP); + # use a given html version if specified + $call .= " -html_version $Texi2HTML::Config::L2H_HTML_VERSION" if ($Texi2HTML::Config::L2H_HTML_VERSION); + # options we want to be sure of + $call .= " -address 0 -info 0 -split 0 -no_navigation -no_auto_link"; + $call .= " -prefix $l2h_prefix $l2h_latex_file"; + + warn "# l2h: executing '$call'\n" if ($verbose); + if (system($call)) + { + warn "$ERROR l2h: '${call}' did not succeed\n"; + return 0; + } + else + { + warn "# l2h: latex2html finished successfully\n" if ($verbose); + return 1; + } +} + +########################## +# Third stage: Extract generated contents from latex2html run +# Initialize with: init_from_html +# open $l2h_html_file for reading +# reads in contents into array indexed by numbers +# return 1, on success -- 0, otherwise +# Finish with: finish +# closes $l2h_html_dir/$l2h_name.".$docu_ext" + +# the images generated by latex2html have names like ${docu_name}_l2h_img?.png +# they are copied to ${docu_name}_?.png, and html is changed accordingly. +my %l2h_img; # associate src file to destination file + # such that files are not copied twice +my $image_count = 1; +sub change_image_file_names($) +{ + my $content = shift; + my @images = ($content =~ /SRC="(.*?)"/g); + my ($src, $dest); + + for $src (@images) + { + $dest = $l2h_img{$src}; + unless ($dest) + { + my $ext = ''; + if ($src =~ /.*\.(.*)$/ && $1 ne $docu_ext) + { + $ext = ".$1"; + } + else + { + warn "$ERROR: L2h image $src has invalid extension\n"; + next; + } + while (-e "$docu_rdir${docu_name}_${image_count}$ext") + { + $image_count++; + } + $dest = "${docu_name}_${image_count}$ext"; +# FIXME this isn't portable. + error condition not checked. + system("cp -f $docu_rdir$src $docu_rdir$dest"); + $l2h_img{$src} = $dest; +# FIXME error condition not checked + unlink "$docu_rdir$src" unless ($debug); + } + $content =~ s/SRC="$src"/SRC="$dest"/g; + } + return $content; +} + +my $extract_error_count = 0; +my $invalid_counter_count = 0; + +sub init_from_html() +{ + # when there are no tex constructs to convert (happens in case everything + # comes from the cache), the html file that was generated by previous + # latex2html runs isn't reused. + if ($latex_converted_count == 0) + { + return 1; + } + + if (! open(L2H_HTML, "<$l2h_html_file")) + { + warn "$ERROR l2h: Can't open $l2h_html_file for reading\n"; + return 0; + } + warn "# l2h: use $l2h_html_file as html file\n" if ($verbose); + + my $html_converted_count = 0; # number of html resulting texts + # retrieved in the file + + my ($count, $h_line); + while ($h_line = ) + { + if ($h_line =~ /^/) + { + $count = $1; + my $h_content = ''; + my $h_end_found = 0; + while ($h_line = ) + { + if ($h_line =~ /^/) + { + $h_end_found = 1; + chomp $h_content; + chomp $h_content; + $html_converted_count++; + # transform image file names and copy image files + $h_content = change_image_file_names($h_content); + # store result in the html result array + $l2h_from_html[$count] = $h_content; + # also add the result in cache hash + $l2h_cache{$l2h_to_latex[$count]} = $h_content; + last; + } + $h_content = $h_content.$h_line; + } + unless ($h_end_found) + { # couldn't found the closing comment. Certainly a bug. + warn "$ERROR l2h(BUG): l2h_end $l2h_name $count not found\n"; + close(L2H_HTML); + return 0; + } + } + } + + # Not the same number of converted elements and retrieved elements + if ($latex_converted_count != $html_converted_count) + { + warn "$ERROR l2h(BUG): waiting for $latex_converted_count elements found $html_converted_count\n"; + } + + warn "# l2h: Got $html_converted_count of $latex_count html contents\n" + if ($verbose); + + close(L2H_HTML); + return 1; +} + +my $html_output_count = 0; # html text outputed in html result file + +# called each time a construct handled by latex2html is encountered, should +# output the corresponding html +sub do_tex($$$$) +{ + my $style = shift; + my $counter = shift; + my $state = shift; + my $count = $global_count{"${style}_$counter"}; + ################################## begin debug section (incorrect counts) + if (!defined($count)) + { + # counter is undefined + $invalid_counter_count++; + warn "$ERROR l2h(BUG): undefined count for ${style}_$counter\n"; + return ("") + if ($debug); + return ''; + } + elsif(($count <= 0) or ($count > $latex_count)) + { + # counter out of range + $invalid_counter_count++; + warn "$ERROR l2h(BUG): Request of $count content which is out of valide range [0,$latex_count)\n"; + return ("") + if ($debug); + return ''; + } + ################################## end debug section (incorrect counts) + + # this seems to be a valid counter + my $result = ''; + $result = "" if ($debug); + if (defined($l2h_from_html[$count])) + { + $html_output_count++; + # maybe we could also have something if simple_format + # with Texi2HTML::Config::protect_text, once simple_format + # may happen for anything else than lines + if ($state->{'remove_texi'}) + {# don't protect anything + $result .= $l2h_to_latex[$count]; + } + else + { + $result .= $l2h_from_html[$count]; + } + } + else + { + # if the result is not in @l2h_from_html, there is an error somewhere. + $extract_error_count++; + warn "$ERROR l2h(BUG): can't extract content $count from html\n"; + # try simple (ordinary) substitution (without l2h) + $result .= "" if ($debug); + $result .= main::substitute_text({}, $l2h_to_latex[$count]); + } + $result .= "" if ($debug); + return $result; +} + +# store results in the cache and remove temporary files. +sub finish() +{ + return unless($status); + if ($verbose) + { + if ($extract_error_count + $invalid_counter_count) + { + warn "# l2h: finished from html ($extract_error_count extract and $invalid_counter_count invalid counter errors)\n"; + } + else + { + warn "# l2h: finished from html (no error)\n"; + } + if ($html_output_count != $latex_converted_count) + { # this may happen if @-commands are collected at some places + # but @-command at those places are not expanded later. For + # example @math on @multitable lines. + warn "# l2h: $html_output_count html outputed for $latex_converted_count converted\n"; + } + } + store_cache(); + if ($Texi2HTML::Config::L2H_CLEAN) + { + local ($_); + warn "# l2h: removing temporary files generated by l2h extension\n" + if $verbose; + while (<"$docu_rdir$l2h_name"*>) + { +# FIXME error condition not checked + unlink $_; + } + } + warn "# l2h: Finished\n" if $verbose; + return 1; +} + +# the driver of end of first pass, second pass and beginning of third pass +# +sub latex2html() +{ + return unless($status); + return unless ($status = finish_to_latex()); + return unless ($status = to_html()); + return unless ($status = init_from_html()); +} + + +############################## +# stuff for l2h caching +# + +# I tried doing this with a dbm data base, but it did not store all +# keys/values. Hence, I did as latex2html does it +sub init_cache +{ + if (-r "$l2h_cache_file") + { + my $rdo = do "$l2h_cache_file"; + warn("$ERROR l2h Error: could not load $docu_rdir$l2h_cache_file: $@\n") + unless ($rdo); + } +} + +# store all the text obtained through latex2html +sub store_cache +{ + return unless $latex_count; + my ($key, $value); + unless (open(FH, ">$l2h_cache_file")) + { + warn "$ERROR l2h Error: could not open $docu_rdir$l2h_cache_file for writing: $!\n"; + return; + } + while (($key, $value) = each %l2h_cache) + { + # escape stuff + $key =~ s|/|\\/|g; + $key =~ s|\\\\/|\\/|g; + # weird, a \ at the end of the key results in an error + # maybe this also broke the dbm database stuff + $key =~ s|\\$|\\\\|; + $value =~ s/\|/\\\|/go; + $value =~ s/\\\\\|/\\\|/go; + $value =~ s|\\\\|\\\\\\\\|g; + print FH "\n\$l2h_cache_key = q/$key/;\n"; + print FH "\$l2h_cache{\$l2h_cache_key} = q|$value|;\n"; + } + print FH "1;"; + close (FH); +} + +# return cached html, if it exists for text, and if all pictures +# are there, as well +sub from_cache($) +{ + my $text = shift; + my $cached = $l2h_cache{$text}; + if (defined($cached)) + { + while ($cached =~ m/SRC="(.*?)"/g) + { + unless (-e "$docu_rdir$1") + { + return undef; + } + } + return $cached; + } + return undef; +} + +1; + + +require "$ENV{T2H_HOME}/T2h_l2h.pm" + if ($0 =~ /\.pl$/ && + -e "$ENV{T2H_HOME}/T2h_l2h.pm" && -r "$ENV{T2H_HOME}/T2h_l2h.pm"); + +} + +{ +package Texi2HTML::LaTeX2HTML::Config; + +# latex2html variables +# These variables are not used. They are here for information only, and +# an example of config file for latex2html file is included. +my $ADDRESS; +my $ANTI_ALIAS; +my $ANTI_ALIAS_TEXT; +my $ASCII_MODE; +my $AUTO_LINK; +my $AUTO_PREFIX; +my $CHILDLINE; +my $DEBUG; +my $DESTDIR; +my $ERROR; +my $EXTERNAL_FILE; +my $EXTERNAL_IMAGES; +my $EXTERNAL_UP_LINK; +my $EXTERNAL_UP_TITLE; +my $FIGURE_SCALE_FACTOR; +my $HTML_VERSION; +my $IMAGES_ONLY; +my $INFO; +my $LINE_WIDTH; +my $LOCAL_ICONS; +my $LONG_TITLES; +my $MATH_SCALE_FACTOR; +my $MAX_LINK_DEPTH; +my $MAX_SPLIT_DEPTH; +my $NETSCAPE_HTML; +my $NOLATEX; +my $NO_FOOTNODE; +my $NO_IMAGES; +my $NO_NAVIGATION; +my $NO_SIMPLE_MATH; +my $NO_SUBDIR; +my $PAPERSIZE; +my $PREFIX; +my $PS_IMAGES; +my $REUSE; +my $SCALABLE_FONTS; +my $SHORTEXTN; +my $SHORT_INDEX; +my $SHOW_SECTION_NUMBERS; +my $SPLIT; +my $TEXDEFS; +my $TITLE; +my $TITLES_LANGUAGE; +my $TMP; +my $VERBOSE; +my $WORDS_IN_NAVIGATION_PANEL_TITLES; +my $WORDS_IN_PAGE; + +# @T2H_L2H_INIT@ + +###################################################################### +# from here on, its l2h init stuff +# + +## initialization for latex2html as for Singular manual generation +## obachman 3/99 + +# +# Options controlling Titles, File-Names, Tracing and Sectioning +# +$TITLE = ''; + +$SHORTEXTN = 0; + +$LONG_TITLES = 0; + +$DESTDIR = ''; + +$NO_SUBDIR = 1; + +$PREFIX = ''; + +$AUTO_PREFIX = 0; + +$AUTO_LINK = 0; + +$SPLIT = 0; + +$MAX_LINK_DEPTH = 0; + +$TMP = ''; + +$DEBUG = 0; + +$VERBOSE = 1; + +# +# Options controlling Extensions and Special Features +# +#$HTML_VERSION = "3.2"; # set by command line + +$TEXDEFS = 1; # we absolutely need that + +$EXTERNAL_FILE = ''; + +$SCALABLE_FONTS = 1; + +$NO_SIMPLE_MATH = 1; + +$LOCAL_ICONS = 1; + +$SHORT_INDEX = 0; + +$NO_FOOTNODE = 1; + +$ADDRESS = ''; + +$INFO = ''; + +# +# Switches controlling Image Generation +# +$ASCII_MODE = 0; + +$NOLATEX = 0; + +$EXTERNAL_IMAGES = 0; + +$PS_IMAGES = 0; + +$NO_IMAGES = 0; + +$IMAGES_ONLY = 0; + +$REUSE = 2; + +$ANTI_ALIAS = 1; + +$ANTI_ALIAS_TEXT = 1; + +# +#Switches controlling Navigation Panels +# +$NO_NAVIGATION = 1; +$ADDRESS = ''; +$INFO = 0; # 0 = do not make a "About this document..." section + +# +#Switches for Linking to other documents +# +# currently -- we don't care + +$MAX_SPLIT_DEPTH = 0; # Stop making separate files at this depth + +$MAX_LINK_DEPTH = 0; # Stop showing child nodes at this depth + +$NOLATEX = 0; # 1 = do not pass unknown environments to Latex + +$EXTERNAL_IMAGES = 0; # 1 = leave the images outside the document + +$ASCII_MODE = 0; # 1 = do not use any icons or internal images + +# 1 = use links to external postscript images rather than inlined bitmap +# images. +$PS_IMAGES = 0; +$SHOW_SECTION_NUMBERS = 0; + +### Other global variables ############################################### +$CHILDLINE = ""; + +# This is the line width measured in pixels and it is used to right justify +# equations and equation arrays; +$LINE_WIDTH = 500; + +# Used in conjunction with AUTO_NAVIGATION +$WORDS_IN_PAGE = 300; + +# The value of this variable determines how many words to use in each +# title that is added to the navigation panel (see below) +# +$WORDS_IN_NAVIGATION_PANEL_TITLES = 0; + +# This number will determine the size of the equations, special characters, +# and anything which will be converted into an inlined image +# *except* "image generating environments" such as "figure", "table" +# or "minipage". +# Effective values are those greater than 0. +# Sensible values are between 0.1 - 4. +$MATH_SCALE_FACTOR = 1.5; + +# This number will determine the size of +# image generating environments such as "figure", "table" or "minipage". +# Effective values are those greater than 0. +# Sensible values are between 0.1 - 4. +$FIGURE_SCALE_FACTOR = 1.6; + + +# If both of the following two variables are set then the "Up" button +# of the navigation panel in the first node/page of a converted document +# will point to $EXTERNAL_UP_LINK. $EXTERNAL_UP_TITLE should be set +# to some text which describes this external link. +$EXTERNAL_UP_LINK = ""; +$EXTERNAL_UP_TITLE = ""; + +# If this is set then the resulting HTML will look marginally better if viewed +# with Netscape. +$NETSCAPE_HTML = 1; + +# Valid paper sizes are "letter", "legal", "a4","a3","a2" and "a0" +# Paper sizes has no effect other than in the time it takes to create inlined +# images and in whether large images can be created at all ie +# - larger paper sizes *MAY* help with large image problems +# - smaller paper sizes are quicker to handle +$PAPERSIZE = "a4"; + +# Replace "english" with another language in order to tell LaTeX2HTML that you +# want some generated section titles (eg "Table of Contents" or "References") +# to appear in a different language. Currently only "english" and "french" +# is supported but it is very easy to add your own. See the example in the +# file "latex2html.config" +$TITLES_LANGUAGE = "english"; + +1; # This must be the last non-comment line + +# End File l2h.init +###################################################################### + +} + +package main; + +# +# pre-defined indices +# + +my %index_prefix_to_name = (); + +%index_names = +( + 'cp' => { 'prefix' => ['cp','c']}, + 'fn' => { 'prefix' => ['fn', 'f'], code => 1}, + 'vr' => { 'prefix' => ['vr', 'v'], code => 1}, + 'ky' => { 'prefix' => ['ky', 'k'], code => 1}, + 'pg' => { 'prefix' => ['pg', 'p'], code => 1}, + 'tp' => { 'prefix' => ['tp', 't'], code => 1} +); + +foreach my $name(keys(%index_names)) +{ + foreach my $prefix (@{$index_names{$name}->{'prefix'}}) + { + $forbidden_index_name{$prefix} = 1; + $index_prefix_to_name{$prefix} = $name; + } +} + +foreach my $other_forbidden_index_name ('info','ps','pdf','htm', + 'log','aux','dvi','texi','txi','texinfo','tex','bib') +{ + $forbidden_index_name{$other_forbidden_index_name} = 1; +} + +# commands with ---, -- '' and `` preserved +# usefull with the old interface + +%code_style_map = ( + 'code' => 1, + 'command' => 1, + 'env' => 1, + 'file' => 1, + 'kbd' => 1, + 'option' => 1, + 'samp' => 1, + 'verb' => 1, +); + +my @element_directions = ('Up', 'Forward', 'Back', 'Next', 'Prev', +'SectionNext', 'SectionPrev', 'SectionUp', 'FastForward', 'FastBack', +'This', 'NodeUp', 'NodePrev', 'NodeNext', 'Following' ); +$::simple_map_ref = \%Texi2HTML::Config::simple_map; +$::simple_map_pre_ref = \%Texi2HTML::Config::simple_map_pre; +$::simple_map_texi_ref = \%Texi2HTML::Config::simple_map_texi; +$::style_map_ref = \%Texi2HTML::Config::style_map; +$::style_map_pre_ref = \%Texi2HTML::Config::style_map_pre; +$::style_map_texi_ref = \%Texi2HTML::Config::style_map_texi; +$::things_map_ref = \%Texi2HTML::Config::things_map; +$::pre_map_ref = \%Texi2HTML::Config::pre_map; +$::texi_map_ref = \%Texi2HTML::Config::texi_map; + +# delete from hash if we are using the new interface +foreach my $code (keys(%code_style_map)) +{ + delete ($code_style_map{$code}) + if (ref($::style_map_ref->{$code}) eq 'HASH'); +} + +# no paragraph in these commands +my %no_paragraph_macro = ( + 'xref' => 1, + 'ref' => 1, + 'pxref' => 1, + 'inforef' => 1, + 'anchor' => 1, +); + + +# +# texinfo section names to level +# +%sec2level = ( + 'top', 0, + 'chapter', 1, + 'unnumbered', 1, + 'chapheading', 1, + 'appendix', 1, + 'section', 2, + 'unnumberedsec', 2, + 'heading', 2, + 'appendixsec', 2, + 'subsection', 3, + 'unnumberedsubsec', 3, + 'subheading', 3, + 'appendixsubsec', 3, + 'subsubsection', 4, + 'unnumberedsubsubsec', 4, + 'subsubheading', 4, + 'appendixsubsubsec', 4, + ); + +# the reverse mapping. There is an entry for each sectionning command. +# The value is a ref on an array containing at each index the corresponding +# sectionning command name. +my %level2sec; +{ + my $sections = [ ]; + my $appendices = [ ]; + my $unnumbered = [ ]; + my $headings = [ ]; + foreach my $command (keys (%sec2level)) + { + if ($command =~ /^appendix/) + { + $level2sec{$command} = $appendices; + } + elsif ($command =~ /^unnumbered/ or $command eq 'top') + { + $level2sec{$command} = $unnumbered; + } + elsif ($command =~ /section$/ or $command eq 'chapter') + { + $level2sec{$command} = $sections; + } + else + { + $level2sec{$command} = $headings; + } + $level2sec{$command}->[$sec2level{$command}] = $command; + } +} + +# this are synonyms +$sec2level{'appendixsection'} = 2; +# sec2level{'majorheading'} is also 1 and not 0 +$sec2level{'majorheading'} = 1; +$sec2level{'chapheading'} = 1; +$sec2level{'centerchap'} = 1; + +# sction to level hash not taking into account raise and lower sections +my %reference_sec2level = %sec2level; + +# regions treated especially. The text for these regions is collected in the +# corresponding array +%region_lines = ( + 'titlepage' => [ ], + 'documentdescription' => [ ], + 'copying' => [ ], +); + +# those macros aren't considered as beginning a paragraph +my %no_line_macros = ( + 'macro' => 1, + 'unmacro' => 1, + 'rmacro' => 1, + 'set' => 1, + 'clear' => 1, + 'titlefont' => 1, + 'include' => 1, + 'copying' => 1, + 'end copying' => 1, + 'tab' => 1, + 'item' => 1, + 'itemx' => 1, + '*' => 1, + 'float' => 1, + 'end float' => 1, + 'caption' => 1, + 'shortcaption' => 1, +); + +foreach my $key (keys(%Texi2HTML::Config::misc_command)) +{ + $no_line_macros{$key} = 1; +} + +# a hash associating a format @thing / @end thing with the type of the format +# 'complex_format' 'simple_format' 'deff' 'list' 'menu' 'paragraph_format' +my %format_type = (); + +foreach my $simple_format (keys(%Texi2HTML::Config::format_map)) +{ + $format_type{$simple_format} = 'simple_format'; +} +foreach my $paragraph_style (keys(%Texi2HTML::Config::paragraph_style)) +{ + $format_type{$paragraph_style} = 'paragraph_format'; +} +foreach my $complex_format (keys(%$Texi2HTML::Config::complex_format_map)) +{ + $format_type{$complex_format} = 'complex_format'; +} +foreach my $table (('table', 'ftable', 'vtable', 'multitable')) +{ + $format_type{$table} = 'table'; +} +foreach my $def_format (keys(%Texi2HTML::Config::def_map)) +{ + $format_type{$def_format} = 'deff'; +} +$format_type{'itemize'} = 'list'; +$format_type{'enumerate'} = 'list'; + +$format_type{'menu'} = 'menu'; + +$format_type{'cartouche'} = 'cartouche'; + +$format_type{'float'} = 'float'; + +$format_type{'quotation'} = 'quotation'; + +$format_type{'group'} = 'group'; + +foreach my $key (keys(%format_type)) +{ + $no_line_macros{$key} = 1; + $no_line_macros{"end $key"} = 1; +} + +foreach my $macro (keys(%Texi2HTML::Config::format_in_paragraph)) +{ + $no_line_macros{$macro} = 1; + $no_line_macros{"end $macro"} = 1; +} + +# fake format at the bottom of the stack +$format_type{'noformat'} = ''; + +# fake formats are formats used internally within other formats +# we associate them with a real format, for the error messages +my %fake_format = ( + 'line' => 'table', + 'term' => 'table', + 'item' => 'list or table', + 'row' => 'multitable row', + 'cell' => 'multitable cell', + 'deff_item' => 'definition command', + 'menu_comment' => 'menu', + 'menu_description' => 'menu', + 'menu_preformatted' => 'menu', + ); + +foreach my $key (keys(%fake_format)) +{ + $format_type{$key} = 'fake'; +} + +# raw formats which are expanded especially +my @raw_regions = ('html', 'verbatim', 'tex', 'xml', 'docbook'); + +# regions expanded or not depending on the value of this hash +my %text_macros = ( + 'iftex' => 0, + 'ignore' => 0, + 'menu' => 0, + 'ifplaintext' => 0, + 'ifinfo' => 0, + 'ifxml' => 0, + 'ifhtml' => 0, + 'ifdocbook' => 0, + 'html' => 0, + 'tex' => 0, + 'xml' => 0, + 'titlepage' => 1, + 'documentdescription' => 1, + 'copying' => 1, + 'ifnothtml' => 1, + 'ifnottex' => 1, + 'ifnotplaintext' => 1, + 'ifnotinfo' => 1, + 'ifnotxml' => 1, + 'ifnotdocbook' => 1, + 'direntry' => 0, + 'verbatim' => 'raw', + 'ifclear' => 'value', + 'ifset' => 'value' , + ); + +foreach my $key (keys(%text_macros)) +{ + unless ($text_macros{$key} eq 'raw') + { + $no_line_macros{$key} = 1; + $no_line_macros{"end $key"} = 1; + } +} + +# The css formats are associated with complex format commands, and associated +# with the 'pre_style' key +foreach my $complex_format (keys(%$Texi2HTML::Config::complex_format_map)) +{ + next if (defined($Texi2HTML::Config::complex_format_map->{$complex_format}->{'pre_style'})); + $Texi2HTML::Config::complex_format_map->{$complex_format}->{'pre_style'} = ''; + $Texi2HTML::Config::complex_format_map->{$complex_format}->{'pre_style'} = $Texi2HTML::Config::css_map{"pre.$complex_format"} if (exists($Texi2HTML::Config::css_map{"pre.$complex_format"})); +} + +#+++############################################################################ +# # +# Argument parsing, initialisation # +# # +#---############################################################################ + +# +# flush stdout and stderr after every write +# +select(STDERR); +$| = 1; +select(STDOUT); +$| = 1; + +my $I = \&Texi2HTML::I18n::get_string; + +my $T2H_USER; # user running the script +my $documentdescription; # text in @documentdescription + +# shorthand for Texi2HTML::Config::VERBOSE +my $T2H_VERBOSE; +my $T2H_DEBUG; + +sub echo_warn($;$); +#print STDERR "" . &$I('test i18n: \' , \a \\ %% %{unknown}a %known % %{known} \\', { 'known' => 'a known string', 'no' => 'nope'}); exit 0; + +# file: file name to locate. It can be a file path. +# all_files: if true collect all the files with that name, otherwise stop +# at first match. +# directories: a reference on a array containing a list of directories to +# search the file in. default is \@texi2html_config_dirs. +sub locate_init_file($;$$) +{ + my $file = shift; + my $all_files = shift; + my $directories = shift; + + $directories = \@texi2html_config_dirs if !defined($directories); + + if ($file =~ /^\//) + { + return $file if (-e $file and -r $file); + } + else + { + my @files; + foreach my $dir (@$directories) + { + next unless (-d "$dir"); + if ($all_files) + { + push (@files, "$dir/$file") if (-e "$dir/$file" and -r "$dir/$file"); + } + else + { + return "$dir/$file" if (-e "$dir/$file" and -r "$dir/$file"); + } + } + return @files if ($all_files); + } + return undef; +} + +# called on -init-file +sub load_init_file +{ + # First argument is option + shift; + # second argument is value of options + my $init_file = shift; + my $file; + if ($file = locate_init_file($init_file)) + { + print STDERR "# reading initialization file from $file\n" + if ($T2H_VERBOSE); + return (Texi2HTML::Config::load($file)); + } + else + { + print STDERR "$ERROR Error: can't read init file $init_file\n"; + return 0; + } +} + +my $cmd_line_lang = 0; # 1 if lang was succesfully set by the command line + # in that case @documentlanguage is ignored. +my $lang_set = 0; # 1 if lang was set + +# +# called on -lang +sub set_document_language ($;$$) +{ + my $lang = shift; + my $from_command_line = shift; + my $line_nr = shift; + my @files = locate_init_file("$i18n_dir/$lang", 1); + foreach my $file (@files) + { + Texi2HTML::Config::load($file); + } + if (Texi2HTML::I18n::set_language($lang)) + { + print STDERR "# using '$lang' as document language\n" if ($T2H_VERBOSE); + $Texi2HTML::Config::LANG = $lang; + $lang_set = 1; + $cmd_line_lang = 1 if ($from_command_line); + if (!$Texi2HTML::Config::TEST) + { + print STDERR "# Setting date in $Texi2HTML::Config::LANG\n" if ($T2H_DEBUG); + $Texi2HTML::THISDOC{'today'} = Texi2HTML::I18n::pretty_date($Texi2HTML::Config::LANG); # like "20 September 1993"; + } + else + { + $Texi2HTML::THISDOC{'today'} = 'a sunny day'; + } + $Texi2HTML::THISDOC{'today'} = $Texi2HTML::Config::DATE + if (defined($Texi2HTML::Config::DATE)); + $::things_map_ref->{'today'} = $Texi2HTML::THISDOC{'today'}; + $::pre_map_ref->{'today'} = $Texi2HTML::THISDOC{'today'}; + $::texi_map_ref->{'today'} = $Texi2HTML::THISDOC{'today'}; + } + else + { + echo_error ("Language specs for '$lang' do not exists. Reverting to '$Texi2HTML::Config::LANG'", $line_nr); + } +} + +# used to manage expanded sections from the command line +sub set_expansion($$) +{ + my $region = shift; + my $set = shift; + $set = 1 if (!defined($set)); + if ($set) + { + push (@Texi2HTML::Config::EXPAND, $region) unless (grep {$_ eq $region} @Texi2HTML::Config::EXPAND); + } + else + { + @Texi2HTML::Config::EXPAND = grep {$_ ne $region} @Texi2HTML::Config::EXPAND; + } +} + + +# find the encoding alias. +# with encoding support (USE_UNICODE), may return undef if no alias was found +sub encoding_alias($) +{ + my $encoding = shift; + return $encoding if (!defined($encoding) or $encoding eq ''); + if ($Texi2HTML::Config::USE_UNICODE) + { + if (! Encode::resolve_alias($encoding)) + { + echo_warn("Encoding $encoding unknown"); + return undef; + } + print STDERR "# Using encoding " . Encode::resolve_alias($encoding) . "\n" + if ($T2H_VERBOSE); + return Encode::resolve_alias($encoding); + } + else + { + echo_warn("No alias searched for encoding"); + return $encoding; + } +} + +# setup hashes used for html manual cross references in texinfo +my %cross_ref_texi_map = %Texi2HTML::Config::texi_map; + +$cross_ref_texi_map{'enddots'} = '...'; + +my %cross_ref_simple_map_texi = %Texi2HTML::Config::simple_map_texi; +my %cross_ref_style_map_texi = (); +my %cross_transliterate_style_map_texi = (); + +my %cross_transliterate_texi_map = %cross_ref_texi_map; + +foreach my $command (keys(%Texi2HTML::Config::style_map_texi)) +{ + $cross_ref_style_map_texi{$command} = {}; + $cross_transliterate_style_map_texi{$command} = {}; + foreach my $key (keys (%{$Texi2HTML::Config::style_map_texi{$command}})) + { +#print STDERR "$command, $key, $style_map_texi{$command}->{$key}\n"; + $cross_ref_style_map_texi{$command}->{$key} = + $Texi2HTML::Config::style_map_texi{$command}->{$key}; + $cross_transliterate_style_map_texi{$command}->{$key} = + $Texi2HTML::Config::style_map_texi{$command}->{$key}; + } +} + +$cross_ref_simple_map_texi{"\n"} = ' '; +$cross_ref_simple_map_texi{"*"} = ' '; + +my %nodes = (); # nodes hash. The key is the texi node name +my %cross_reference_nodes = (); # normalized node names arrays + +# This function is used to construct link names from node names as +# specified for texinfo +sub cross_manual_links() +{ + print STDERR "# Doing ".scalar(keys(%nodes))." cross manual links\n" + if ($T2H_DEBUG); + my $normal_text_kept = $Texi2HTML::Config::normal_text; + $::simple_map_texi_ref = \%cross_ref_simple_map_texi; + $::style_map_texi_ref = \%cross_ref_style_map_texi; + $::texi_map_ref = \%cross_ref_texi_map; + $Texi2HTML::Config::normal_text = \&Texi2HTML::Config::t2h_cross_manual_normal_text; + + foreach my $key (keys(%nodes)) + { + my $node = $nodes{$key}; + #print STDERR "CROSS_MANUAL:$key,$node\n"; + next if ($node->{'index_page'}); + if (!defined($node->{'texi'})) + { + ###################### debug section + foreach my $key (keys(%$node)) + { + #print STDERR "$key:$node->{$key}!!!\n"; + } + ###################### end debug section + } + else + { + $node->{'cross_manual_target'} = remove_texi($node->{'texi'}); + if ($Texi2HTML::Config::USE_UNICODE) + { + $node->{'cross_manual_target'} = Unicode::Normalize::NFC($node->{'cross_manual_target'}); + if ($Texi2HTML::Config::TRANSLITERATE_NODE and $Texi2HTML::Config::USE_UNIDECODE) + { + $node->{'cross_manual_file'} = + unicode_to_protected(unicode_to_transliterate($node->{'cross_manual_target'})); + } + $node->{'cross_manual_target'} = + unicode_to_protected($node->{'cross_manual_target'}); + } +#print STDERR "CROSS_MANUAL_TARGET $node->{'cross_manual_target'}\n"; + unless ($node->{'external_node'}) + { + if (exists($cross_reference_nodes{$node->{'cross_manual_target'}})) + { + my $other_node_array = $cross_reference_nodes{$node->{'cross_manual_target'}}; + my $node_seen; + foreach my $other_node (@{$other_node_array}) + { + $node_seen = $other_node; + last if ($nodes{$other_node}->{'seen'}) + } + echo_error("Node equivalent with `$node->{'texi'}' allready used `$node_seen'"); + push @{$other_node_array}, $node->{'texi'}; + } + else + { + push @{$cross_reference_nodes{$node->{'cross_manual_target'}}}, $node->{'texi'}; + } + } + } + } + + + if ($Texi2HTML::Config::TRANSLITERATE_NODE and + (!$Texi2HTML::Config::USE_UNICODE or !$Texi2HTML::Config::USE_UNIDECODE)) + { + $::style_map_texi_ref = \%cross_transliterate_style_map_texi; + $::texi_map_ref = \%cross_transliterate_texi_map; + + foreach my $key (keys(%nodes)) + { + my $node = $nodes{$key}; + next if ($node->{'index_page'}); + if (defined($node->{'texi'})) + { + $node->{'cross_manual_file'} = remove_texi($node->{'texi'}); + $node->{'cross_manual_file'} = unicode_to_protected(unicode_to_transliterate($node->{'cross_manual_file'})) if ($Texi2HTML::Config::USE_UNICODE); + } + } + } + + $Texi2HTML::Config::normal_text = $normal_text_kept; + $::simple_map_texi_ref = \%Texi2HTML::Config::simple_map_texi; + $::style_map_texi_ref = \%Texi2HTML::Config::style_map_texi; + $::texi_map_ref = \%Texi2HTML::Config::texi_map; +} + +sub unicode_to_protected($) +{ + my $text = shift; + my $result = ''; + while ($text ne '') + { + if ($text =~ s/^([A-Za-z0-9]+)//o) + { + $result .= $1; + } + elsif ($text =~ s/^ //o) + { + $result .= '-'; + } + elsif ($text =~ s/^(.)//o) + { + if (exists($Texi2HTML::Config::ascii_character_map{$1})) + { + $result .= '_' . lc($Texi2HTML::Config::ascii_character_map{$1}); + } + else + { + $result .= '_' . lc(sprintf("%04x",ord($1))); + } + } + else + { + print STDERR "Bug: unknown character in a cross ref (likely in infinite loop)\n"; + print STDERR "Text: !!$text!!\n"; + sleep 1; + } + } + return $result; +} + +sub unicode_to_transliterate($) +{ + my $text = shift; + my $result = ''; + while ($text ne '') + { + if ($text =~ s/^([A-Za-z0-9 ]+)//o) + { + $result .= $1; + } + elsif ($text =~ s/^(.)//o) + { + if (exists($Texi2HTML::Config::ascii_character_map{$1})) + { + $result .= $1; + } + elsif (exists($Texi2HTML::Config::transliterate_map{uc(sprintf("%04x",ord($1)))})) + { + $result .= $Texi2HTML::Config::transliterate_map{uc(sprintf("%04x",ord($1)))}; + } + elsif (exists($Texi2HTML::Config::unicode_diacritical{uc(sprintf("%04x",ord($1)))})) + { + $result .= ''; + } + else + { + if ($Texi2HTML::Config::USE_UNIDECODE) + { + $result .= unidecode($1); + } + else + { + $result .= $1; + } + } + } + else + { + print STDERR "Bug: unknown character in cross ref transliteration (likely in infinite loop)\n"; + sleep 1; + } + } + return $result; +} + +# This function is used to construct a link name from a node name as +# specified for texinfo +sub cross_manual_line($;$) +{ + my $text = shift; + my $transliterate = shift; +#print STDERR "cross_manual_line $text\n"; +#print STDERR "remove_texi text ". remove_texi($text)."\n\n\n"; + $::simple_map_texi_ref = \%cross_ref_simple_map_texi; + $::style_map_texi_ref = \%cross_ref_style_map_texi; + $::texi_map_ref = \%cross_ref_texi_map; + my $normal_text_kept = $Texi2HTML::Config::normal_text; + $Texi2HTML::Config::normal_text = \&Texi2HTML::Config::t2h_cross_manual_normal_text; + + my ($cross_ref_target, $cross_ref_file); + if ($Texi2HTML::Config::USE_UNICODE) + { + $cross_ref_target = Unicode::Normalize::NFC(remove_texi($text)); + if ($transliterate and $Texi2HTML::Config::USE_UNIDECODE) + { + $cross_ref_file = + unicode_to_protected(unicode_to_transliterate($cross_ref_target)); + } + $cross_ref_target = unicode_to_protected($cross_ref_target); + } + else + { + $cross_ref_target = remove_texi($text); + } + + if ($transliterate and + (!$Texi2HTML::Config::USE_UNICODE or !$Texi2HTML::Config::USE_UNIDECODE)) + { + $::style_map_texi_ref = \%cross_transliterate_style_map_texi; + $::texi_map_ref = \%cross_transliterate_texi_map; + $cross_ref_file = remove_texi($text); + $cross_ref_file = unicode_to_protected(unicode_to_transliterate($cross_ref_file)) + if ($Texi2HTML::Config::USE_UNICODE); + } + + $Texi2HTML::Config::normal_text = $normal_text_kept; + $::simple_map_texi_ref = \%Texi2HTML::Config::simple_map_texi; + $::style_map_texi_ref = \%Texi2HTML::Config::style_map_texi; + $::texi_map_ref = \%Texi2HTML::Config::texi_map; +#print STDERR "\n\ncross_ref $cross_ref\n"; + unless ($transliterate) + { + return $cross_ref_target; + } +# print STDERR "$text|$cross_ref_target|$cross_ref_file\n"; + return ($cross_ref_target, $cross_ref_file); +} + +# T2H_OPTIONS is a hash whose keys are the (long) names of valid +# command-line options and whose values are a hash with the following keys: +# type ==> one of !|=i|:i|=s|:s (see GetOpt::Long for more info) +# linkage ==> ref to scalar, array, or subroutine (see GetOpt::Long for more info) +# verbose ==> short description of option (displayed by -h) +# noHelp ==> if 1 -> for "not so important options": only print description on -h 1 +# 2 -> for obsolete options: only print description on -h 2 +my $T2H_OPTIONS; +$T2H_OPTIONS -> {'debug'} = +{ + type => '=i', + linkage => \$Texi2HTML::Config::DEBUG, + verbose => 'output HTML with debuging information', +}; + +$T2H_OPTIONS -> {'doctype'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::DOCTYPE, + verbose => 'document type which is output in header of HTML files', + noHelp => 1 +}; + +$T2H_OPTIONS -> {'frameset-doctype'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::FRAMESET_DOCTYPE, + verbose => 'document type for HTML frameset documents', + noHelp => 1 +}; + +$T2H_OPTIONS -> {'test'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::TEST, + verbose => 'use predefined information to avoid differences with reference files', + noHelp => 1 +}; + +$T2H_OPTIONS -> {'dump-texi'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::DUMP_TEXI, + verbose => 'dump the output of first pass into a file with extension passfirst and exit', + noHelp => 1 +}; + +$T2H_OPTIONS -> {'macro-expand'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::MACRO_EXPAND, + verbose => 'output macro expanded source in ', +}; + +$T2H_OPTIONS -> {'expand'} = +{ + type => '=s', + linkage => sub {set_expansion($_[1], 1);}, + verbose => 'Expand info|tex|none section of texinfo source', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'no-expand'} = +{ + type => '=s', + linkage => sub {set_expansion ($_[1], 0);}, + verbose => 'Don\'t expand the given section of texinfo source', +}; + +$T2H_OPTIONS -> {'noexpand'} = +{ + type => '=s', + linkage => $T2H_OPTIONS->{'no-expand'}->{'linkage'}, + verbose => $T2H_OPTIONS->{'no-expand'}->{'verbose'}, + noHelp => 1, +}; + +$T2H_OPTIONS -> {'ifhtml'} = +{ + type => '!', + linkage => sub { set_expansion('html', $_[1]); }, + verbose => "expand ifhtml and html sections", +}; + +$T2H_OPTIONS -> {'ifinfo'} = +{ + type => '!', + linkage => sub { set_expansion('info', $_[1]); }, + verbose => "expand ifinfo", +}; + +$T2H_OPTIONS -> {'ifxml'} = +{ + type => '!', + linkage => sub { set_expansion('xml', $_[1]); }, + verbose => "expand ifxml and xml sections", +}; + +$T2H_OPTIONS -> {'ifdocbook'} = +{ + type => '!', + linkage => sub { set_expansion('docbook', $_[1]); }, + verbose => "expand ifdocbook and docbook sections", +}; + +$T2H_OPTIONS -> {'iftex'} = +{ + type => '!', + linkage => sub { set_expansion('tex', $_[1]); }, + verbose => "expand iftex and tex sections", +}; + +$T2H_OPTIONS -> {'ifplaintext'} = +{ + type => '!', + linkage => sub { set_expansion('plaintext', $_[1]); }, + verbose => "expand ifplaintext sections", +}; + +$T2H_OPTIONS -> {'invisible'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::INVISIBLE_MARK, + verbose => 'use text in invisble anchor', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'iso'} = +{ + type => 'iso', + linkage => \$Texi2HTML::Config::USE_ISO, + verbose => 'if set, ISO8859 characters are used for special symbols (like copyright, etc)', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'I'} = +{ + type => '=s', + linkage => \@Texi2HTML::Config::INCLUDE_DIRS, + verbose => 'append $s to the @include search path', +}; + +$T2H_OPTIONS -> {'conf-dir'} = +{ + type => '=s', + linkage => \@Texi2HTML::Config::CONF_DIRS, + verbose => 'append $s to the init file directories', +}; + +$T2H_OPTIONS -> {'P'} = +{ + type => '=s', + linkage => sub {unshift (@Texi2HTML::Config::PREPEND_DIRS, $_[1]);}, + verbose => 'prepend $s to the @include search path', +}; + +$T2H_OPTIONS -> {'top-file'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::TOP_FILE, + verbose => 'use $s as top file, instead of .html', +}; + +$T2H_OPTIONS -> {'toc-file'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::TOC_FILE, + verbose => 'use $s as ToC file, instead of _toc.html', +}; + +$T2H_OPTIONS -> {'frames'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::FRAMES, + verbose => 'output files which use HTML 4.0 frames (experimental)', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'menu'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::SHOW_MENU, + verbose => 'output Texinfo menus', +}; + +$T2H_OPTIONS -> {'number'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::NUMBER_SECTIONS, + verbose => 'use numbered sections', +}; + +$T2H_OPTIONS -> {'use-nodes'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::USE_NODES, + verbose => 'use nodes for sectionning', +}; + +$T2H_OPTIONS -> {'node-files'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::NODE_FILES, + verbose => 'produce one file per node for cross references' +}; + +$T2H_OPTIONS -> {'separated-footnotes'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::SEPARATED_FOOTNOTES, + verbose => 'footnotes on a separated page', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'toc-links'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::TOC_LINKS, + verbose => 'create links from headings to toc entries' +}; + +$T2H_OPTIONS -> {'split'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::SPLIT, + verbose => 'split document on section|chapter|node else no splitting', +}; + +$T2H_OPTIONS -> {'sec-nav'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::SECTION_NAVIGATION, + verbose => 'output navigation panels for each section', +}; + +$T2H_OPTIONS -> {'subdir'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::SUBDIR, + verbose => 'put files in directory $s, not $cwd', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'short-ext'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::SHORTEXTN, + verbose => 'use "htm" extension for output HTML files', +}; + +$T2H_OPTIONS -> {'prefix'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::PREFIX, + verbose => 'use as prefix for output files, instead of ', +}; + +$T2H_OPTIONS -> {'output'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::OUT, + verbose => 'output goes to $s (directory if split)', +}; + +$T2H_OPTIONS -> {'no-validate'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::NOVALIDATE, + verbose => 'suppress node cross-reference validation', +}; + +$T2H_OPTIONS -> {'short-ref'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::SHORT_REF, + verbose => 'if set, references are without section numbers', +}; + +$T2H_OPTIONS -> {'idx-sum'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::IDX_SUMMARY, + verbose => 'if set, also output index summary', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'def-table'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::DEF_TABLE, + verbose => 'if set, \@def.. are converted using tables.', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'Verbose'} = +{ + type => '!', + linkage=> \$Texi2HTML::Config::VERBOSE, + verbose => 'print progress info to stdout', +}; + +$T2H_OPTIONS -> {'lang'} = +{ + type => '=s', + linkage => sub {set_document_language($_[1], 1)}, + verbose => 'use $s as document language (ISO 639 encoding)', +}; + +$T2H_OPTIONS -> {'ignore-preamble-text'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::IGNORE_PREAMBLE_TEXT, + verbose => 'if set, ignore the text before @node and sectionning commands', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'html-xref-prefix'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::EXTERNAL_DIR, + verbose => '$s is the base dir for external manual references', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'l2h'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::L2H, + verbose => 'if set, uses latex2html for @math and @tex', +}; + +$T2H_OPTIONS -> {'l2h-l2h'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::L2H_L2H, + verbose => 'program to use for latex2html translation', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'l2h-skip'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::L2H_SKIP, + verbose => 'if set, tries to reuse previously latex2html output', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'l2h-tmp'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::L2H_TMP, + verbose => 'if set, uses $s as temporary latex2html directory', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'l2h-file'} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::L2H_FILE, + verbose => 'if set, uses $s as latex2html init file', + noHelp => 1, +}; + + +$T2H_OPTIONS -> {'l2h-clean'} = +{ + type => '!', + linkage => \$Texi2HTML::Config::L2H_CLEAN, + verbose => 'if set, do not keep intermediate latex2html files for later reuse', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'D'} = +{ + type => '=s', + linkage => sub {$value{$_[1]} = 1;}, + verbose => 'equivalent to Texinfo "@set $s 1"', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'U'} = +{ + type => '=s', + linkage => sub {delete $value{$_[1]};}, + verbose => 'equivalent to Texinfo "@clear $s"', + noHelp => 1, +}; + +$T2H_OPTIONS -> {'init-file'} = +{ + type => '=s', + linkage => \&load_init_file, + verbose => 'load init file $s' +}; + +$T2H_OPTIONS -> {'css-include'} = +{ + type => '=s', + linkage => \@Texi2HTML::Config::CSS_FILES, + verbose => 'use css file $s' +}; + +## +## obsolete cmd line options +## +my $T2H_OBSOLETE_OPTIONS; + +$T2H_OBSOLETE_OPTIONS -> {'out-file'} = +{ + type => '=s', + linkage => sub {$Texi2HTML::Config::OUT = $_[1]; $Texi2HTML::Config::SPLIT = '';}, + verbose => 'if set, all HTML output goes into file $s, obsoleted by "-output" with different semantics', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {init_file} = +{ + type => '=s', + linkage => \&load_init_file, + verbose => 'obsolete, use "-init-file" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {l2h_clean} = +{ + type => '!', + linkage => \$Texi2HTML::Config::L2H_CLEAN, + verbose => 'obsolete, use "-l2h-clean" instead', + noHelp => 2, +}; + +$T2H_OBSOLETE_OPTIONS -> {l2h_l2h} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::L2H_L2H, + verbose => 'obsolete, use "-l2h-l2h" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {l2h_skip} = +{ + type => '!', + linkage => \$Texi2HTML::Config::L2H_SKIP, + verbose => 'obsolete, use "-l2h-skip" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {l2h_tmp} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::L2H_TMP, + verbose => 'obsolete, use "-l2h-tmp" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {out_file} = +{ + type => '=s', + linkage => sub {$Texi2HTML::Config::OUT = $_[1]; $Texi2HTML::Config::SPLIT = '';}, + verbose => 'obsolete, use "-out-file" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {short_ref} = +{ + type => '!', + linkage => \$Texi2HTML::Config::SHORT_REF, + verbose => 'obsolete, use "-short-ref" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {idx_sum} = +{ + type => '!', + linkage => \$Texi2HTML::Config::IDX_SUMMARY, + verbose => 'obsolete, use "-idx-sum" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {def_table} = +{ + type => '!', + linkage => \$Texi2HTML::Config::DEF_TABLE, + verbose => 'obsolete, use "-def-table" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {short_ext} = +{ + type => '!', + linkage => \$Texi2HTML::Config::SHORTEXTN, + verbose => 'obsolete, use "-short-ext" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {sec_nav} = +{ + type => '!', + linkage => \$Texi2HTML::Config::SECTION_NAVIGATION, + verbose => 'obsolete, use "-sec-nav" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {top_file} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::TOP_FILE, + verbose => 'obsolete, use "-top-file" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {toc_file} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::TOC_FILE, + verbose => 'obsolete, use "-toc-file" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {glossary} = +{ + type => '!', + linkage => \$Texi2HTML::Config::USE_GLOSSARY, + verbose => "this does nothing", + noHelp => 2, +}; + +$T2H_OBSOLETE_OPTIONS -> {check} = +{ + type => '!', + linkage => sub {exit 0;}, + verbose => "exit without doing anything", + noHelp => 2, +}; + +$T2H_OBSOLETE_OPTIONS -> {dump_texi} = +{ + type => '!', + linkage => \$Texi2HTML::Config::DUMP_TEXI, + verbose => 'obsolete, use "-dump-texi" instead', + noHelp => 1 +}; + +$T2H_OBSOLETE_OPTIONS -> {frameset_doctype} = +{ + type => '=s', + linkage => \$Texi2HTML::Config::FRAMESET_DOCTYPE, + verbose => 'obsolete, use "-frameset-doctype" instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {'no-section_navigation'} = +{ + type => '!', + linkage => sub {$Texi2HTML::Config::SECTION_NAVIGATION = 0;}, + verbose => 'obsolete, use -nosec_nav', + noHelp => 2, +}; +my $use_acc; # not used +$T2H_OBSOLETE_OPTIONS -> {use_acc} = +{ + type => '!', + linkage => \$use_acc, + verbose => 'obsolete, set to true unconditionnaly', + noHelp => 2 +}; +$T2H_OBSOLETE_OPTIONS -> {expandinfo} = +{ + type => '!', + linkage => sub {push @Texi2HTML::Config::EXPAND, 'info';}, + verbose => 'obsolete, use "-expand info" instead', + noHelp => 2, +}; +$T2H_OBSOLETE_OPTIONS -> {expandtex} = +{ + type => '!', + linkage => sub {push @Texi2HTML::Config::EXPAND, 'tex';}, + verbose => 'obsolete, use "-expand tex" instead', + noHelp => 2, +}; +$T2H_OBSOLETE_OPTIONS -> {monolithic} = +{ + type => '!', + linkage => sub {$Texi2HTML::Config::SPLIT = '';}, + verbose => 'obsolete, use "-split no" instead', + noHelp => 2 +}; +$T2H_OBSOLETE_OPTIONS -> {split_node} = +{ + type => '!', + linkage => sub{$Texi2HTML::Config::SPLIT = 'section';}, + verbose => 'obsolete, use "-split section" instead', + noHelp => 2, +}; +$T2H_OBSOLETE_OPTIONS -> {split_chapter} = +{ + type => '!', + linkage => sub{$Texi2HTML::Config::SPLIT = 'chapter';}, + verbose => 'obsolete, use "-split chapter" instead', + noHelp => 2, +}; +$T2H_OBSOLETE_OPTIONS -> {no_verbose} = +{ + type => '!', + linkage => sub {$Texi2HTML::Config::VERBOSE = 0;}, + verbose => 'obsolete, use -noverbose instead', + noHelp => 2, +}; +$T2H_OBSOLETE_OPTIONS -> {output_file} = +{ + type => '=s', + linkage => sub {$Texi2HTML::Config::OUT = $_[1]; $Texi2HTML::Config::SPLIT = '';}, + verbose => 'obsolete, use --out-file instead', + noHelp => 2 +}; + +$T2H_OBSOLETE_OPTIONS -> {section_navigation} = +{ + type => '!', + linkage => \$Texi2HTML::Config::SECTION_NAVIGATION, + verbose => 'obsolete, use --sec-nav instead', + noHelp => 2, +}; + +$T2H_OBSOLETE_OPTIONS -> {verbose} = +{ + type => '!', + linkage=> \$Texi2HTML::Config::VERBOSE, + verbose => 'obsolete, use -Verbose instead', + noHelp => 2 +}; + +# read initialzation from $sysconfdir/texi2htmlrc or $HOME/.texi2htmlrc +# (this is obsolete) +my @rc_files = (); +push @rc_files, "$sysconfdir/texi2htmlrc" if defined($sysconfdir); +push @rc_files, "$ENV{'HOME'}/.texi2htmlrc" if (defined($ENV{HOME})); +foreach my $i (@rc_files) +{ + if (-e $i and -r $i) + { + print STDERR "# reading initialization file from $i\n" + if ($T2H_VERBOSE); + print STDERR "Reading config from $i is obsolete, use texi2html/$conf_file_name instead\n"; + Texi2HTML::Config::load($i); + } +} + +# read initialization files +foreach my $file (locate_init_file($conf_file_name, 1)) +{ + print STDERR "# reading initialization file from $file\n" if ($T2H_VERBOSE); + Texi2HTML::Config::load($file); +} + +# +# %value hold texinfo variables, see also -D, -U, @set and @clear. +# we predefine html (the output format) and texi2html (the translator) +%value = + ( + 'html' => 1, + 'texi2html' => $THISVERSION, + ); + +#+++############################################################################ +# # +# parse command-line options +# # +#---############################################################################ + + +my $T2H_USAGE_TEXT = < {'help'} = +{ + type => ':i', + default => '', + linkage => sub {$options->helpOptions($_[1]); + print "\nSend bugs and suggestions to \n"; + exit (0);}, + verbose => "print help and exit" +}; + +# this avoids getOptions defining twice 'help' and 'version'. +$T2H_OBSOLETE_OPTIONS -> {'help'} = 0; +$T2H_OBSOLETE_OPTIONS -> {'version'} = 0; + +# some older version of GetOpt::Long don't have +# Getopt::Long::Configure("pass_through") +eval {Getopt::Long::Configure("pass_through");}; +my $Configure_failed = $@ && <getOptions($T2H_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) +{ + print STDERR "$Configure_failed" if $Configure_failed; + die $T2H_FAILURE_TEXT; +} +if (@ARGV > 1) +{ + eval {Getopt::Long::Configure("no_pass_through");}; + if (! $options->getOptions($T2H_OBSOLETE_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) + { + print STDERR "$Configure_failed" if $Configure_failed; + die $T2H_FAILURE_TEXT; + } +} + +# +# read texi2html extensions (if any) +# It is obsolete (obsoleted by -init-file). we keep it for backward +# compatibility. +my $extensions = 'texi2html.ext'; # extensions in working directory +if (-f $extensions) +{ + print STDERR "# reading extensions from $extensions\n" if $T2H_VERBOSE; + require($extensions); +} +my $progdir; +($progdir = $0) =~ s/[^\/]+$//; +if ($progdir && ($progdir ne './')) +{ + $extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory + if (-f $extensions) + { + print STDERR "# reading extensions from $extensions\n" if $T2H_VERBOSE; + require($extensions); + } +} + +# $T2H_DEBUG and $T2H_VERBOSE are shorthands +$T2H_DEBUG = $Texi2HTML::Config::DEBUG; +$T2H_VERBOSE = $Texi2HTML::Config::VERBOSE; + +$Texi2HTML::THISDOC{'debug_l2h'} = 0; +$Texi2HTML::THISDOC{'debug_l2h'} = 1 if ($T2H_DEBUG & $DEBUG_L2H); + + +#+++############################################################################ +# # +# evaluation of cmd line options +# # +#---############################################################################ + +# Fill in the %style_type hash, a hash associating style @-comand with +# the type, 'accent', real 'style', simple' style, or 'special'. +# 'simple_style' styles don't extend accross lines. +my %style_type = (); +my @simple_styles = ('ctrl', 'w', 'url','uref','indicateurl','email', + 'titlefont'); +foreach my $style (keys(%Texi2HTML::Config::style_map)) +{ + if (exists $Texi2HTML::Config::command_type{$style}) + { + $style_type{$style} = $Texi2HTML::Config::command_type{$style}; + next; + } + if (ref($Texi2HTML::Config::style_map{$style} eq 'HASH')) + { + $style_type{$style} = $Texi2HTML::Config::style_map{$style}->{'type'} + if (exists($Texi2HTML::Config::style_map{$style}->{'type'})); + } + else + { + $style_type{$style} = 'simple_style' if (grep {$_ eq $style} @simple_styles); + } + $style_type{$style} = 'style' unless (defined($style_type{$style})); +} +foreach my $accent (keys(%Texi2HTML::Config::unicode_accents), 'tieaccent', 'dotless') +{ + if (exists $Texi2HTML::Config::command_type{$accent}) + { + $style_type{$accent} = $Texi2HTML::Config::command_type{$accent}; + next; + } + $style_type{$accent} = 'accent'; +} +#foreach my $simple ('ctrl', 'w', 'url','uref','indicateurl','email') +#{ +# $style_type{$simple} = 'simple_style'; +#} +foreach my $special ('footnote', 'ref', 'xref', 'pxref', 'inforef', 'anchor', 'image') +{ + if (exists $Texi2HTML::Config::command_type{$special}) + { + $style_type{$special} = $Texi2HTML::Config::command_type{$special}; + next; + } + $style_type{$special} = 'special'; +} + +# retro compatibility for $Texi2HTML::Config::EXPAND +push (@Texi2HTML::Config::EXPAND, $Texi2HTML::Config::EXPAND) if ($Texi2HTML::Config::EXPAND); + +unshift @texi2html_config_dirs, @Texi2HTML::Config::CONF_DIRS; +# correct %text_macros based on command line and init +# variables +$text_macros{'menu'} = 1 if ($Texi2HTML::Config::SHOW_MENU); + +foreach my $expanded (@Texi2HTML::Config::EXPAND) +{ + $text_macros{"if$expanded"} = 1 if (exists($text_macros{"if$expanded"})); + next unless (exists($text_macros{$expanded})); + if (grep {$_ eq $expanded} @raw_regions) + { + $text_macros{$expanded} = 'raw'; + } + else + { + $text_macros{$expanded} = 1; + } +} + +# handle ifnot regions +foreach my $region (keys (%text_macros)) +{ + next if ($region =~ /^ifnot/); + if ($text_macros{$region} and $region =~ /^if(\w+)$/) + { + $text_macros{"ifnot$1"} = 0; + } +} + +if ($T2H_VERBOSE) +{ + print STDERR "# Expanded: "; + foreach my $text_macro (keys(%text_macros)) + { + print STDERR "$text_macro " if ($text_macros{$text_macro}); + } + print STDERR "\n"; +} + +# This is kept in that file although it is html formatting as it seems to +# be rather obsolete +$Texi2HTML::Config::INVISIBLE_MARK = '' if $Texi2HTML::Config::INVISIBLE_MARK eq 'xbm'; + +$T2H_DEBUG |= $DEBUG_TEXI if ($Texi2HTML::Config::DUMP_TEXI); + +# no user provided USE_UNICODE, use configure provided +if (!defined($Texi2HTML::Config::USE_UNICODE)) +{ + $Texi2HTML::Config::USE_UNICODE = '1'; +} + +# no user provided nor configured, run time test +if ($Texi2HTML::Config::USE_UNICODE eq '@' .'USE_UNICODE@') +{ + $Texi2HTML::Config::USE_UNICODE = 1; + eval { + require Encode; + require Unicode::Normalize; + Encode->import('encode'); + }; + $Texi2HTML::Config::USE_UNICODE = 0 if ($@); +} +elsif ($Texi2HTML::Config::USE_UNICODE) +{# user provided or set by configure + require Encode; + require Unicode::Normalize; + Encode->import('encode'); +} + +# no user provided USE_UNIDECODE, use configure provided +if (!defined($Texi2HTML::Config::USE_UNIDECODE)) +{ + $Texi2HTML::Config::USE_UNIDECODE = '0'; +} + +# no user provided nor configured, run time test +if ($Texi2HTML::Config::USE_UNIDECODE eq '@' .'USE_UNIDECODE@') +{ + $Texi2HTML::Config::USE_UNIDECODE = 1; + eval { + require Text::Unidecode; + Text::Unidecode->import('unidecode'); + }; + $Texi2HTML::Config::USE_UNIDECODE = 0 if ($@); +} +elsif ($Texi2HTML::Config::USE_UNIDECODE) +{# user provided or set by configure + require Text::Unidecode; + Text::Unidecode->import('unidecode'); +} + +print STDERR "# USE_UNICODE $Texi2HTML::Config::USE_UNICODE, USE_UNIDECODE $Texi2HTML::Config::USE_UNIDECODE \n" + if ($T2H_VERBOSE); + +# Construct hashes used for cross references generation +# Do it now as the user may have changed $USE_UNICODE + +foreach my $key (keys(%Texi2HTML::Config::unicode_map)) +{ + if ($Texi2HTML::Config::unicode_map{$key} ne '') + { + if ($Texi2HTML::Config::USE_UNICODE) + { + $cross_ref_texi_map{$key} = chr(hex($Texi2HTML::Config::unicode_map{$key})); + if (($Texi2HTML::Config::TRANSLITERATE_NODE and !$Texi2HTML::Config::USE_UNIDECODE) + and (exists ($Texi2HTML::Config::transliterate_map{$Texi2HTML::Config::unicode_map{$key}}))) + { + $cross_transliterate_texi_map{$key} = $Texi2HTML::Config::transliterate_map{$Texi2HTML::Config::unicode_map{$key}}; + + } + } + else + { + $cross_ref_texi_map{$key} = '_' . lc($Texi2HTML::Config::unicode_map{$key}); + if ($Texi2HTML::Config::TRANSLITERATE_NODE) + { + if (exists ($Texi2HTML::Config::transliterate_map{$Texi2HTML::Config::unicode_map{$key}})) + { + $cross_transliterate_texi_map{$key} = $Texi2HTML::Config::transliterate_map{$Texi2HTML::Config::unicode_map{$key}}; + } + else + { + $cross_transliterate_texi_map{$key} = '_' . lc($Texi2HTML::Config::unicode_map{$key}); + } + } + } + } +} +if ($Texi2HTML::Config::USE_UNICODE and $Texi2HTML::Config::TRANSLITERATE_NODE + and ! $Texi2HTML::Config::USE_UNIDECODE) +{ + foreach my $key (keys (%Texi2HTML::Config::transliterate_accent_map)) + { + $Texi2HTML::Config::transliterate_map{$key} = $Texi2HTML::Config::transliterate_accent_map{$key}; + } +} + +foreach my $key (keys(%cross_ref_style_map_texi)) +{ + if ($style_type{$key} eq 'accent' + and (ref($cross_ref_style_map_texi{$key}) eq 'HASH')) + { + if ($Texi2HTML::Config::USE_UNICODE) + { + $cross_ref_style_map_texi{$key}->{'function'} = \&Texi2HTML::Config::t2h_utf8_accent; + } + else + { + $cross_ref_style_map_texi{$key}->{'function'} = \&Texi2HTML::Config::t2h_nounicode_cross_manual_accent; + } + if ($Texi2HTML::Config::TRANSLITERATE_NODE and + !($Texi2HTML::Config::USE_UNICODE and $Texi2HTML::Config::USE_UNIDECODE)) + { + $cross_transliterate_style_map_texi{$key}->{'function'} = \&Texi2HTML::Config::t2h_transliterate_cross_manual_accent; + } + } +} + +# +# file name business +# + + +my $docu_dir; # directory of the document +my $docu_name; # basename of the document +my $docu_rdir; # directory for the output +my $docu_ext = $Texi2HTML::Config::EXTENSION; # extension +my $docu_toc; # document's table of contents +my $docu_stoc; # document's short toc +my $docu_foot; # document's footnotes +my $docu_about; # about this document +my $docu_top; # document top +my $docu_doc; # document (or document top of split) + +die "Need exactly one file to translate\n$T2H_FAILURE_TEXT" unless @ARGV == 1; +my $docu = shift(@ARGV); +if ($docu =~ /(.*\/)/) +{ + chop($docu_dir = $1); + $docu_name = $docu; + $docu_name =~ s/.*\///; +} +else +{ + $docu_dir = '.'; + $docu_name = $docu; +} +unshift(@Texi2HTML::Config::INCLUDE_DIRS, $docu_dir); +unshift(@Texi2HTML::Config::INCLUDE_DIRS, @Texi2HTML::Config::PREPEND_DIRS); +$docu_name =~ s/\.te?x(i|info)?$//; +$docu_name = $Texi2HTML::Config::PREFIX if $Texi2HTML::Config::PREFIX; + +# resulting files splitting +if ($Texi2HTML::Config::SPLIT =~ /section/i) +{ + $Texi2HTML::Config::SPLIT = 'section'; +} +elsif ($Texi2HTML::Config::SPLIT =~ /node/i) +{ + $Texi2HTML::Config::SPLIT = 'node'; +} +elsif ($Texi2HTML::Config::SPLIT =~ /chapter/i) +{ + $Texi2HTML::Config::SPLIT = 'chapter'; +} +else +{ + $Texi2HTML::Config::SPLIT = ''; +} + +# Something like backward compatibility +if ($Texi2HTML::Config::SPLIT and $Texi2HTML::Config::SUBDIR) +{ + $Texi2HTML::Config::OUT = $Texi2HTML::Config::SUBDIR; +} + +# subdir + +die "output to STDOUT and split or frames incompatible\n" + if (($Texi2HTML::Config::SPLIT or $Texi2HTML::Config::FRAMES) and ($Texi2HTML::Config::OUT eq '-')); + +if ($Texi2HTML::Config::SPLIT and ($Texi2HTML::Config::OUT eq '')) +{ + $Texi2HTML::Config::OUT = $docu_name; +} + +if ($Texi2HTML::Config::SPLIT and ($Texi2HTML::Config::OUT eq '.')) +{# This is to avoid trouble with latex2html + $Texi2HTML::Config::OUT = ''; +} + +$docu_rdir = ''; + +if ($Texi2HTML::Config::SPLIT and ($Texi2HTML::Config::OUT ne '')) +{ + $Texi2HTML::Config::OUT =~ s|/*$||; + $docu_rdir = "$Texi2HTML::Config::OUT/"; + unless (-d $Texi2HTML::Config::OUT) + { + if ( mkdir($Texi2HTML::Config::OUT, oct(755))) + { + print STDERR "# created directory $Texi2HTML::Config::OUT\n" if ($T2H_VERBOSE); + } + else + { + die "$ERROR can't create directory $Texi2HTML::Config::OUT\n"; + } + } + print STDERR "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE); +} +elsif (! $Texi2HTML::Config::SPLIT and ($Texi2HTML::Config::OUT ne '')) +{ + if ($Texi2HTML::Config::OUT =~ m|(.*)/|) + {# there is a leading directories + $docu_rdir = "$1/"; + unless (-d $docu_rdir) + { + if ( mkdir($docu_rdir, oct(755))) + { + print STDERR "# created directory $docu_rdir\n" if ($T2H_VERBOSE); + } + else + { + die "$ERROR can't create directory $docu_rdir\n"; + } + } + print STDERR "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE); + } + else + { + print STDERR "# putting result files into current directory \n" if ($T2H_VERBOSE); + $docu_rdir = ''; + } +} + +# We don't use "./" as $docu_rdir when $docu_rdir is the current directory +# because it is problematic for latex2html. To test writability with -w, +# however we need a real directory. +my $result_rdir = $docu_rdir; +$result_rdir = "." if ($docu_rdir eq ''); +unless (-w $result_rdir) +{ + $docu_rdir = 'current directory' if ($docu_rdir eq ''); + die "$ERROR $docu_rdir not writable\n"; +} + +# relative path leading to the working directory from the document directory +my $path_to_working_dir = $docu_rdir; +if ($docu_rdir ne '') +{ + my $cwd = cwd; + my $docu_path = $docu_rdir; + $docu_path = $cwd . '/' . $docu_path unless ($docu_path =~ /^\//); + my @result = (); + foreach my $element (split /\//, File::Spec->canonpath($docu_path)) + { + if ($element eq '') + { + push @result, ''; + } + elsif ($element eq '..') + { + if (@result and ($result[-1] eq '')) + { + print STDERR "Too much .. in absolute file name\n"; + } + elsif (@result and ($result[-1] ne '..')) + { + pop @result; + } + else + { + push @result, $element; + } + } + else + { + push @result, $element; + } + } + $path_to_working_dir = File::Spec->abs2rel($cwd, join ('/', @result)); + $path_to_working_dir =~ s|.*/||; + $path_to_working_dir .= '/' unless($path_to_working_dir eq ''); +} + +# extension +if ($Texi2HTML::Config::SHORTEXTN) +{ + $docu_ext = "htm"; +} + +$docu_doc = $docu_name . ($docu_ext ? ".$docu_ext" : ""); # document's contents +if ($Texi2HTML::Config::SPLIT) +{ + $docu_top = $Texi2HTML::Config::TOP_FILE || $docu_doc; + + if (defined $Texi2HTML::Config::element_file_name) + { + $docu_toc = &$Texi2HTML::Config::element_file_name + (undef, "toc", $docu_name); + $docu_stoc = &$Texi2HTML::Config::element_file_name + (undef, "stoc", $docu_name); + $docu_foot = &$Texi2HTML::Config::element_file_name + (undef, "foot", $docu_name); + $docu_about = &$Texi2HTML::Config::element_file_name + (undef, "about", $docu_name); + # $docu_top may be overwritten later. + } + if (!defined($docu_toc)) + { + my $default_toc = "${docu_name}_toc"; + $default_toc .= ".$docu_ext" if (defined($docu_ext)); + $docu_toc = $Texi2HTML::Config::TOC_FILE || $default_toc; + } + if (!defined($docu_stoc)) + { + $docu_stoc = "${docu_name}_ovr"; + $docu_stoc .= ".$docu_ext" if (defined($docu_ext)); + } + if (!defined($docu_foot)) + { + $docu_foot = "${docu_name}_fot"; + $docu_foot .= ".$docu_ext" if (defined($docu_ext)); + } + if (!defined($docu_about)) + { + $docu_about = "${docu_name}_abt"; + $docu_about .= ".$docu_ext" if (defined($docu_ext)); + } +} +else +{ + if ($Texi2HTML::Config::OUT) + { + $docu_doc = $Texi2HTML::Config::OUT; + $docu_doc =~ s|.*/||; + } + if (defined $Texi2HTML::Config::element_file_name) + { + my $docu_name = &$Texi2HTML::Config::element_file_name + (undef, "doc", $docu_name); + $docu_top = $docu_name if (defined($docu_name)); + } + $docu_toc = $docu_foot = $docu_stoc = $docu_about = $docu_top = $docu_doc; +} + +# Note that file extension has already been added here. + +# For use in init files +$Texi2HTML::THISDOC{'filename'}->{'top'} = $docu_top; +$Texi2HTML::THISDOC{'filename'}->{'foot'} = $docu_foot; +$Texi2HTML::THISDOC{'filename'}->{'stoc'} = $docu_stoc; +$Texi2HTML::THISDOC{'filename'}->{'about'} = $docu_about; +$Texi2HTML::THISDOC{'filename'}->{'toc'} = $docu_toc; +$Texi2HTML::THISDOC{'extension'} = $docu_ext; +# FIXME document that +$Texi2HTML::THISDOC{'out_dir'} = $docu_rdir; +$Texi2HTML::THISDOC{'file_base_name'} = $docu_name; + + +my $docu_doc_file = "$docu_rdir$docu_doc"; +my $docu_toc_file = "$docu_rdir$docu_toc"; +my $docu_stoc_file = "$docu_rdir$docu_stoc"; +my $docu_foot_file = "$docu_rdir$docu_foot"; +my $docu_about_file = "$docu_rdir$docu_about"; +my $docu_top_file = "$docu_rdir$docu_top"; + +my $docu_frame_file = "$docu_rdir${docu_name}_frame"; +$docu_frame_file .= ".$docu_ext" if $docu_ext; +my $docu_toc_frame_file = "$docu_rdir${docu_name}_toc_frame"; +$docu_toc_frame_file .= ".$docu_ext" if $docu_ext; + +# +# _foo: internal variables to track @foo +# +foreach my $key ('_author', '_title', '_subtitle', '_shorttitlepage', + '_settitle', '_setfilename', '_shorttitle', '_titlefont') +{ + $value{$key} = ''; # prevent -w warnings +} +my $index; # ref on a hash for the index entries +my %indices = (); # hash of indices names containing + #[ $pages, $entries ] (page indices and + # raw index entries) +my @index_labels = (); # array corresponding with @?index commands + # constructed during pass_texi, used to + # put labels in pass_text +# +# initial counters +# +my $foot_num = 0; +my $relative_foot_num = 0; +my $idx_num = 0; +my $sec_num = 0; +my $anchor_num = 0; + +# +# can I use ISO8859 characters? (HTML+) +# +if ($Texi2HTML::Config::USE_ISO) +{ + foreach my $thing (keys(%Texi2HTML::Config::iso_symbols)) + { + next unless exists ($::things_map_ref->{$thing}); + $::things_map_ref->{$thing} = $Texi2HTML::Config::iso_symbols{$thing}; + $::pre_map_ref->{$thing} = $Texi2HTML::Config::iso_symbols{$thing}; + $Texi2HTML::Config::simple_format_texi_map{$thing} = $Texi2HTML::Config::iso_symbols{$thing}; + } + # we don't override the user defined quote, but beware that this works + # only if the hardcoded defaults, '`' and "'" match with the defaults + # in the default init file + $Texi2HTML::Config::OPEN_QUOTE_SYMBOL = $Texi2HTML::Config::iso_symbols{'`'} + if (exists($Texi2HTML::Config::iso_symbols{'`'}) and ($Texi2HTML::Config::OPEN_QUOTE_SYMBOL eq '`')); + $Texi2HTML::Config::CLOSE_QUOTE_SYMBOL = $Texi2HTML::Config::iso_symbols{"'"} + if (exists($Texi2HTML::Config::iso_symbols{"'"}) and ($Texi2HTML::Config::CLOSE_QUOTE_SYMBOL eq "'")); +} + + + +# process a css file +sub process_css_file ($$) +{ + my $fh =shift; + my $file = shift; + my $in_rules = 0; + my $in_comment = 0; + my $in_import = 0; + my $in_string = 0; + my $rules = []; + my $imports = []; + while (<$fh>) + { + #print STDERR "Line: $_"; + if ($in_rules) + { + push @$rules, $_; + next; + } + my $text = ''; + while (1) + { + #sleep 1; + #print STDERR "${text}!in_comment $in_comment in_rules $in_rules in_import $in_import in_string $in_string: $_"; + if ($in_comment) + { + if (s/^(.*?\*\/)//) + { + $text .= $1; + $in_comment = 0; + } + else + { + push @$imports, $text . $_; + last; + } + } + elsif (!$in_string and s/^\///) + { # what do '\' do here ? + if (s/^\*//) + { + $text .= '/*'; + $in_comment = 1; + } + else + { + push (@$imports, $text. "\n") if ($text ne ''); + push (@$rules, '/' . $_); + $in_rules = 1; + last; + } + } + elsif (!$in_string and $in_import and s/^([\"\'])//) + { # strings outside of import start rules + $text .= "$1"; + $in_string = quotemeta("$1"); + } + elsif ($in_string and s/^(\\$in_string)//) + { + $text .= $1; + } + elsif ($in_string and s/^($in_string)//) + { + $text .= $1; + $in_string = 0; + } + elsif ((! $in_string and !$in_import) and (s/^([\\]?\@import)$// or s/^([\\]?\@import\s+)//)) + { + $text .= $1; + $in_import = 1; + } + elsif (!$in_string and $in_import and s/^\;//) + { + $text .= ';'; + $in_import = 0; + } + elsif (($in_import or $in_string) and s/^(.)//) + { + $text .= $1; + } + elsif (!$in_import and s/^([^\s])//) + { + push (@$imports, $text. "\n") if ($text ne ''); + push (@$rules, $1 . $_); + $in_rules = 1; + last; + } + elsif (s/^(\s)//) + { + $text .= $1; + } + elsif ($_ eq '') + { + push (@$imports, $text); + last; + } + } + } + warn "$WARN string not closed in css file $file\n" if ($in_string); + warn "$WARN comment not closed in css file $file\n" if ($in_comment); + warn "$WARN \@import not finished in css file $file\n" if ($in_import and !$in_comment and !$in_string); + return ($imports, $rules); +} + + + +# parse texinfo cnf file for external manual specifications. This was +# discussed on texinfo list but not in makeinfo for now. +my @texinfo_htmlxref_files = locate_init_file ($texinfo_htmlxref, 1, \@texinfo_config_dirs); +foreach my $file (@texinfo_htmlxref_files) +{ + print STDERR "html refs config file: $file\n" if ($T2H_DEBUG); + unless (open (HTMLXREF, $file)) + { + warn "Cannot open html refs config file ${file}: $!"; + next; + } + while () + { + my $line = $_; + s/[#]\s.*//; + s/^\s*//; + next if /^\s*$/; + my @htmlxref = split /\s+/; + my $manual = shift @htmlxref; + my $split_or_mono = shift @htmlxref; + if (!defined($split_or_mono) or ($split_or_mono ne 'split' and $split_or_mono ne 'mono')) + { + echo_warn("Bad line in $file: $line"); + next; + } + my $href = shift @htmlxref; + next if (exists($Texi2HTML::THISDOC{'htmlxref'}->{$manual}->{$split_or_mono}) and exists($Texi2HTML::THISDOC{'htmlxref'}->{$manual}->{$split_or_mono}->{'href'})); + + if (defined($href)) + { + $href =~ s/\/*$// if ($split_or_mono eq 'split'); + $Texi2HTML::THISDOC{'htmlxref'}->{$manual}->{$split_or_mono}->{'href'} = $href; + } + else + { + $Texi2HTML::THISDOC{'htmlxref'}->{$manual}->{$split_or_mono} = {}; + } + } + close (HTMLXREF); +} + +if ($T2H_DEBUG) +{ + foreach my $manual (keys(%{$Texi2HTML::THISDOC{'htmlxref'}})) + { + foreach my $split ('split', 'mono') + { + my $href = 'NO'; + next unless (exists($Texi2HTML::THISDOC{'htmlxref'}->{$manual}->{$split})); + $href = $Texi2HTML::THISDOC{'htmlxref'}->{$manual}->{$split}->{'href'} if + exists($Texi2HTML::THISDOC{'htmlxref'}->{$manual}->{$split}->{'href'}); + print STDERR "$manual: $split, href: $href\n"; + } + } +} + +print STDERR "# reading from $docu\n" if $T2H_VERBOSE; + +#+++########################################################################### +# # +# Pass texi: read source, handle variable, ignored text, # +# # +#---########################################################################### + +my @fhs = (); # hold the file handles to read +my $input_spool; # spooled lines to read +my @lines = (); # whole document +my @lines_numbers = (); # line number, originating file associated with + # whole document +my $macros; # macros. reference on a hash +my %info_enclose; # macros defined with definfoenclose +my $texi_line_number = { 'file_name' => '', 'line_nr' => 0, 'macro' => '' }; +my @floats = (); # floats list +my %floats = (); # floats by style + +sub initialise_state_texi($) +{ + my $state = shift; + $state->{'texi'} = 1; # for substitute_text and close_stack: + # 1 if pass_texi/scan_texi is to be used + $state->{'macro_inside'} = 0 unless(defined($state->{'macro_inside'})); + $state->{'ifvalue_inside'} = 0 unless(defined($state->{'ifvalue_inside'})); + $state->{'arg_expansion'} = 0 unless(defined($state->{'arg_expansion'})); +} + +my @first_lines = (); + +sub pass_texi() +{ + my $first_lines = 1; # is it the first lines + my $state = {}; + # holds the informations about the context + # to pass it down to the functions + initialise_state_texi($state); + my @stack; + my $text; + INPUT_LINE: while (defined($_ = next_line($texi_line_number))) + { + # + # remove the lines preceding \input or an @-command + # + if ($first_lines) + { + if (/^\\input/) + { + push @first_lines, $_; + $first_lines = 0; + next; + } + if (/^\s*\@/) + { + $first_lines = 0; + } + else + { + push @first_lines, $_; + next; + } + } + #print STDERR "PASS_TEXI($texi_line_number->{'line_nr'})$_"; + my $chomped_line = $_; + if (scan_texi ($_, \$text, \@stack, $state, $texi_line_number) and chomp($chomped_line)) + { + #print STDERR "==> new page (line_nr $texi_line_number->{'line_nr'},$texi_line_number->{'file_name'},$texi_line_number->{'macro'})\n"; + push (@lines_numbers, { 'file_name' => $texi_line_number->{'file_name'}, + 'line_nr' => $texi_line_number->{'line_nr'}, + 'macro' => $texi_line_number->{'macro'} }); + } + #dump_stack (\$text, \@stack, $state); + if ($state->{'bye'}) + { + #dump_stack(\$text, \@stack, $state); + # close stack after bye + #print STDERR "close stack after bye\n"; + close_stack_texi_structure(\$text, \@stack, $state, $texi_line_number); + #dump_stack(\$text, \@stack, $state); + } + next if (@stack); + $_ = $text; + $text = ''; + if (!defined($_)) + {# FIXME: remove the error message if it is reported too often + print STDERR "# \$_ undefined after scan_texi. This may be a bug, or not.\n"; + print STDERR "# Report (with texinfo file) if you want, otherwise ignore that message.\n"; + next unless ($state->{'bye'}); + } + push @lines, split_lines($_); + last if ($state->{'bye'}); + } + # close stack at the end of pass texi + #print STDERR "close stack at the end of pass texi\n"; + close_stack_texi_structure(\$text, \@stack, $state, $texi_line_number); + push @lines, split_lines($text); + print STDERR "# end of pass texi\n" if $T2H_VERBOSE; +} + +# return the line after preserving things according to misc_command map. +sub preserve_command($$) +{ + my $line = shift; + my $macro = shift; + my $text = ''; + my $args = ''; + my $skip_spec = ''; + my $arg_spec = ''; + + $skip_spec = $Texi2HTML::Config::misc_command{$macro}->{'skip'} + if (defined($Texi2HTML::Config::misc_command{$macro}->{'skip'})); + $arg_spec = $Texi2HTML::Config::misc_command{$macro}->{'arg'} + if (defined($Texi2HTML::Config::misc_command{$macro}->{'arg'})); + + if ($arg_spec eq 'line') + { + $text .= $line; + $args .= $line; + $line = ''; + } + elsif ($arg_spec) + { + my $arg_nr = $Texi2HTML::Config::misc_command{$macro}->{'arg'}; + while ($arg_nr) + { + $line =~ s/(\s+\S*)//o; + $text .= $1 if defined($1); + $args .= $1 if defined($1); + $arg_nr--; + } + } + + if ($macro eq 'bye') + { + $line = ''; + $text = "\n"; + } + elsif ($skip_spec eq 'linespace') + { + if ($line =~ /^\s*$/o) + { + $line =~ s/([ \t]*)//o; + $text .= $1; + } + } + elsif ($skip_spec eq 'linewhitespace') + { + if ($line =~ /^\s*$/o) + { + $text .= $line; + $line = ''; + } + } + elsif ($skip_spec eq 'line') + { + $text .= $line; + $line = ''; + } + elsif ($skip_spec eq 'whitespace') + { + $line =~ s/(\s*)//o; + $text .= $1; + } + elsif ($skip_spec eq 'space') + { + $line =~ s/([ \t]*)//o; + $text .= $1; + } + $line = '' if (!defined($line)); + return ($line, $text, $args); +} + +#+++########################################################################### +# # +# Pass structure: parse document structure # +# # +#---########################################################################### + +# This is a virtual element for things appearing before @node and +# sectionning commands +my $element_before_anything = +{ + 'before_anything' => 1, + 'place' => [], + 'texi' => 'VIRTUAL ELEMENT BEFORE ANYTHING', +}; + +# This is a place for index entries, anchors and so on appearing in +# copying or documentdescription +my $region_place = []; + +sub initialise_state_structure($) +{ + my $state = shift; + $state->{'structure'} = 1; # for substitute_text and close_stack: + # 1 if pass_structure/scan_structure is + # to be used + $state->{'menu'} = 0; # number of opened menus + $state->{'detailmenu'} = 0; # number of opened detailed menus + $state->{'sectionning_base'} = 0; # current base sectionning level + $state->{'table_stack'} = [ "no table" ]; # a stack of opened tables/lists + if (exists($state->{'region_lines'}) and !defined($state->{'region_lines'})) + { + delete ($state->{'region_lines'}); + print STDERR "Bug: state->{'region_lines'} exists but undef.\n"; + } +} + +my @doc_lines = (); # whole document +my @doc_numbers = (); # whole document line numbers and file names +my @nodes_list = (); # nodes in document reading order + # each member is a reference on a hash +my @sections_list = (); # sections in reading order + # each member is a reference on a hash +my @all_elements = (); # sectionning elements (nodes and sections) + # in reading order. Each member is a reference + # on a hash which also appears in %nodes, + # @sections_list @nodes_list, @elements_list +my @elements_list; # all the resulting elements in document order +my %sections = (); # sections hash. The key is the section number + # headings are there, although they are not elements +my $section_top; # @top section +my $element_top; # Top element +my $node_top; # Top node +my $node_first; # First node +my $element_index; # element with first index +my $element_chapter_index; # chapter with first index +my $element_first; # first element +my $element_last; # last element +my %special_commands; # hash for the commands specially handled + # by the user + +# This is a virtual element used to have the right hrefs for index entries +# and anchors in footnotes +my $footnote_element = +{ + 'id' => 'SEC_Foot', + 'file' => $docu_foot, + 'footnote' => 1, + 'element' => 1, + 'place' => [], +}; + +my %content_element = +( + 'contents' => { 'id' => 'SEC_Contents', 'contents' => 1, 'texi' => '_contents' }, + 'shortcontents' => { 'id' => 'SEC_Overview', 'shortcontents' => 1, 'texi' => '_shortcontents' }, +); + +#my $do_contents; # do table of contents if true +#my $do_scontents; # do short table of contents if true +my $novalidate = $Texi2HTML::Config::NOVALIDATE; # @novalidate appeared + +sub pass_structure() +{ + my $state = {}; + # holds the informations about the context + # to pass it down to the functions + initialise_state_structure($state); + $state->{'element'} = $element_before_anything; + $state->{'place'} = $element_before_anything->{'place'}; + my @stack; + my $text; + my $line_nr; + + while (@lines) + { + $_ = shift @lines; + my $chomped_line = $_; + if (!chomp($chomped_line) and @lines) + { + $lines[0] = $_ . $lines[0]; + next; + } + $line_nr = shift (@lines_numbers); + #print STDERR "PASS_STRUCTURE: $_"; + if (!$state->{'raw'} and !$state->{'verb'}) + { + my $tag = ''; + if (/^\s*\@(\w+)\b/) + { + $tag = $1; + } + + # + # analyze the tag + # + if ($tag and $tag eq 'node' or defined($sec2level{$tag}) or $tag eq 'printindex') + { + $_ = substitute_texi_line($_); + if ($tag eq 'node' or defined($sec2level{$tag})) + {# in pass structure node shouldn't appear in formats + close_stack_texi_structure(\$text, \@stack, $state, $line_nr); + if (exists($state->{'region_lines'})) + { + push @{$region_lines{$state->{'region_lines'}->{'format'}}}, split_lines($text); + close_region($state); + } + else + { + push @doc_lines, split_lines($text); + } + $text = ''; + } + if ($tag eq 'node') + { + my $node_ref; + my $auto_directions; + $auto_directions = 1 unless (/,/o); + my ($node, $node_next, $node_prev, $node_up) = split(/,/, $_); + $node =~ s/^\@node\s+// if ($node); + if ($node) + { + $node = normalise_space($node); + if (exists($nodes{$node}) and defined($nodes{$node}) + and $nodes{$node}->{'seen'}) + { + echo_error ("Duplicate node found: $node", $line_nr); + next; + } + else + { + if (exists($nodes{$node}) and defined($nodes{$node})) + { # node appeared in a menu + $node_ref = $nodes{$node}; + } + else + { + my $first; + $first = 1 if (!defined($node_ref)); + $node_ref = {}; + $node_first = $node_ref if ($first); + $nodes{$node} = $node_ref; + } + $node_ref->{'node'} = 1; + $node_ref->{'tag'} = 'node'; + $node_ref->{'tag_level'} = 'node'; + $node_ref->{'texi'} = $node; + $node_ref->{'seen'} = 1; + $node_ref->{'automatic_directions'} = $auto_directions; + $node_ref->{'place'} = []; + $node_ref->{'current_place'} = []; + merge_element_before_anything($node_ref); + $node_ref->{'index_names'} = []; + $state->{'place'} = $node_ref->{'current_place'}; + $state->{'element'} = $node_ref; + $state->{'after_element'} = 1; + $state->{'node_ref'} = $node_ref; + # makeinfo treats differently case variants of + # top in nodes and anchors and in refs commands and + # refs from nodes. + if ($node =~ /^top$/i) + { + if (!defined($node_top)) + { + $node_top = $node_ref; + $node_top->{'texi'} = 'Top'; + delete $nodes{$node}; + $nodes{$node_top->{'texi'}} = $node_ref; + } + else + { # All the refs are going to point to the first Top + echo_warn ("Top node allready exists", $line_nr); + #warn "$WARN Top node allready exists\n"; + } + } + unless (@nodes_list) + { + $node_ref->{'first'} = 1; + } + push (@nodes_list, $node_ref); + push @all_elements, $node_ref; + } + } + else + { + echo_error ("Node is undefined: $_ (eg. \@node NODE-NAME, NEXT, PREVIOUS, UP)", $line_nr); + next; + } + + if ($node_next) + { + $node_ref->{'node_next'} = normalise_node($node_next); + } + if ($node_prev) + { + $node_ref->{'node_prev'} = normalise_node($node_prev); + } + if ($node_up) + { + $node_ref->{'node_up'} = normalise_node($node_up); + } + } + elsif (defined($sec2level{$tag})) + { # section or heading + if (/^\@$tag\s*(.*)$/) + { + my $name = normalise_space($1); + $name = '' if (!defined($name)); + my $level = $sec2level{$tag}; + $state->{'after_element'} = 1; + my ($docid, $num); + if($tag ne 'top') + { + $sec_num++; + $num = $sec_num; + $docid = "SEC$sec_num"; + } + else + { + $num = 0; + $docid = "SEC_Top"; + } + if ($tag !~ /heading/) + { + my $section_ref = { 'texi' => $name, + 'level' => $level, + 'tag' => $tag, + 'sec_num' => $num, + 'section' => 1, + 'id' => $docid, + 'seen' => 1, + 'index_names' => [], + 'current_place' => [], + 'place' => [] + }; + + if ($tag eq 'top') + { + $section_ref->{'top'} = 1; + $section_ref->{'number'} = ''; + $sections{0} = $section_ref; + $section_top = $section_ref; + } + $sections{$num} = $section_ref; + merge_element_before_anything($section_ref); + if ($state->{'node_ref'} and !exists($state->{'node_ref'}->{'with_section'})) + { + my $node_ref = $state->{'node_ref'}; + $section_ref->{'node_ref'} = $node_ref; + $section_ref->{'titlefont'} = $node_ref->{'titlefont'}; + $node_ref->{'with_section'} = $section_ref; + $node_ref->{'top'} = 1 if ($tag eq 'top'); + } + if (! $name and $level) + { + echo_warn ("$tag without name", $line_nr); + } + push @sections_list, $section_ref; + push @all_elements, $section_ref; + $state->{'element'} = $section_ref; + $state->{'place'} = $section_ref->{'current_place'}; + my $node_ref = "NO NODE"; + my $node_texi =''; + if ($state->{'node_ref'}) + { + $node_ref = $state->{'node_ref'}; + $node_texi = $state->{'node_ref'}->{'texi'}; + } + print STDERR "# pass_structure node($node_ref)$node_texi, tag \@$tag($level) ref $section_ref, num,id $num,$docid\n $name\n" + if $T2H_DEBUG & $DEBUG_ELEMENTS; + } + else + { + my $section_ref = { 'texi' => $name, + 'level' => $level, + 'heading' => 1, + 'tag' => $tag, + 'tag_level' => $tag, + 'sec_num' => $sec_num, + 'id' => $docid, + 'number' => '' }; + $state->{'element'} = $section_ref; + push @{$state->{'place'}}, $section_ref; + $sections{$sec_num} = $section_ref; + } + } + } + elsif (/^\@printindex\s+(\w+)/) + { + unless (@all_elements) + { + echo_warn ("Printindex before document beginning: \@printindex $1", $line_nr); + next; + } + delete $state->{'after_element'}; + # $element_index is the first element with index + $element_index = $all_elements[-1] unless (defined($element_index)); + # associate the index to the element such that the page + # number is right + my $placed_elements = []; + push @{$all_elements[-1]->{'index_names'}}, { 'name' => $1, 'place' => $placed_elements }; + $state->{'place'} = $placed_elements; + } + if (exists($state->{'region_lines'})) + { + push @{$region_lines{$state->{'region_lines'}->{'format'}}}, $_; + } + else + { + push @doc_lines, $_; + push @doc_numbers, $line_nr; + } + next; + } + } + if (scan_structure ($_, \$text, \@stack, $state, $line_nr) and !(exists($state->{'region_lines'}))) + { + push (@doc_numbers, $line_nr); + } + next if (@stack); + $_ = $text; + $text = ''; + next if (!defined($_)); + if ($state->{'region_lines'}) + { + push @{$region_lines{$state->{'region_lines'}->{'format'}}}, split_lines($_); + } + else + { + push @doc_lines, split_lines($_); + } + } + if (@stack) + {# close stack at the end of pass structure + close_stack_texi_structure(\$text, \@stack, $state, $line_nr); + if ($text) + { + if (exists($state->{'region_lines'})) + { + push @{$region_lines{$state->{'region_lines'}->{'format'}}}, + split_lines($text); + } + else + { + push @doc_lines, split_lines($text); + } + } + } + echo_warn ("At end of document, $state->{'region_lines'}->{'number'} $state->{'region_lines'}->{'format'} not closed") if (exists($state->{'region_lines'})); + print STDERR "# end of pass structure\n" if $T2H_VERBOSE; +} + +# split line at end of line and put each resulting line in an array +# FIXME there must be a more perlish way to do it... Not a big deal +# as long as it work +sub split_lines($) +{ + my $line = shift; + my @result = (); + my $i = 0; + while ($line) + { + $result[$i] = ''; + $line =~ s/^(.*)//; + $result[$i] .= $1; + $result[$i] .= "\n" if ($line =~ s/^\n//); + #print STDERR "$i: $result[$i]"; + $i++; + } + return @result; +} + +# handle misc commands and misc command args +sub misc_command_structure($$$$) +{ + my $line = shift; + my $macro = shift; + my $state = shift; + my $line_nr = shift; + my $text; + my $args; + + if ($macro eq 'lowersections') + { + my ($sec, $level); + while (($sec, $level) = each %sec2level) + { + $sec2level{$sec} = $level + 1; + } + $state->{'sectionning_base'}--; + } + elsif ($macro eq 'raisesections') + { + my ($sec, $level); + while (($sec, $level) = each %sec2level) + { + $sec2level{$sec} = $level - 1; + } + $state->{'sectionning_base'}++; + } + elsif (($macro eq 'contents') or ($macro eq 'summarycontents') or ($macro eq 'shortcontents')) + { + if ($macro eq 'contents') + { + $Texi2HTML::Config::DO_CONTENTS = 1; + } + else + { + $macro = 'shortcontents'; + $Texi2HTML::Config::DO_SCONTENTS = 1; + } + push @{$state->{'place'}}, $content_element{$macro}; + } + elsif ($macro eq 'detailmenu') + { + $state->{'detailmenu'}++; + } + elsif ($macro eq 'novalidate') + { + $novalidate = 1; + $Texi2HTML::THISDOC{$macro} = 1; + } + elsif (grep {$_ eq $macro} ('settitle','setfilename','shortitle','shorttitlepage') + and ($line =~ /^\s+(.*)$/)) + { + $value{"_$macro"} = substitute_texi_line($1); + } + elsif (grep {$_ eq $macro} ('author','subtitle','title') + and ($line =~ /^\s+(.*)$/)) + { + $value{"_$macro"} .= substitute_texi_line($1)."\n"; + push @{$Texi2HTML::THISDOC{"${macro}s"}}, substitute_texi_line($1); + } + elsif ($macro eq 'synindex' || $macro eq 'syncodeindex') + { + if ($line =~ /^\s+(\w+)\s+(\w+)/) + { + my $index_from = $1; + my $index_to = $2; + echo_error ("unknown from index name $index_from in \@$macro", $line_nr) + unless $index_names{$index_from}; + echo_error ("unknown to index name $index_to in \@$macro", $line_nr) + unless $index_names{$index_to}; + if ($index_names{$index_from} and $index_names{$index_to}) + { + if ($macro eq 'syncodeindex') + { + $index_names{$index_to}->{'associated_indices_code'}->{$index_from} = 1; + } + else + { + $index_names{$index_to}->{'associated_indices'}->{$index_from} = 1; + } + push @{$Texi2HTML::THISDOC{$macro}}, [$index_from,$index_to]; + } + } + else + { + echo_error ("Bad $macro line: $line", $line_nr); + } + } + elsif ($macro eq 'defindex' || $macro eq 'defcodeindex') + { + if ($line =~ /^\s+(\w+)\s*$/) + { + my $name = $1; + if ($forbidden_index_name{$name}) + { + echo_error("Reserved index name $name", $line_nr); + } + else + { + @{$index_names{$name}->{'prefix'}} = ($name); + $index_names{$name}->{'code'} = 1 if $macro eq 'defcodeindex'; + $index_prefix_to_name{$name} = $name; + push @{$Texi2HTML::THISDOC{$macro}}, $name; + } + } + else + {# makeinfo don't warn and even accepts index with empty name + # and index with numbers only. I reported it on the mailing list + # this should be fixed in future makeinfo versions. + echo_error ("Bad $macro line: $line", $line_nr); + } + } + elsif ($macro eq 'documentlanguage') + { + if ($line =~ /\s+(\w+)/) + { + my $lang = $1; + set_document_language($lang, 0, $line_nr) if (!$cmd_line_lang && $lang); + # warning, this is not the language of the document but the one that + # appear in the texinfo... + $Texi2HTML::THISDOC{$macro} = $lang; + } + } + elsif ($macro eq 'kbdinputstyle') + {# makeinfo ignores that with --html. I reported it and it should be + # fixed in future makeinfo releases + if ($line =~ /\s+([a-z]+)/) + { + if ($1 eq 'code') + { + $::style_map_ref->{'kbd'} = $::style_map_ref->{'code'}; + $::style_map_pre_ref->{'kbd'} = $::style_map_pre_ref->{'code'}; + $Texi2HTML::THISDOC{$macro} = $1; + } + elsif ($1 eq 'example') + { + $::style_map_pre_ref->{'kbd'} = $::style_map_pre_ref->{'code'}; + $Texi2HTML::THISDOC{$macro} = $1; + } + elsif ($1 ne 'distinct') + { + echo_error ("Unknown argument for \@$macro: $1", $line_nr); + } + } + else + { + echo_error ("Bad \@$macro", $line_nr); + } + } + elsif ($macro eq 'paragraphindent') + { + if ($line =~ /\s+([0-9]+)/) + { + $Texi2HTML::THISDOC{$macro} = $1; + } + elsif (($line =~ /\s+(none)[^\w\-]/) or ($line =~ /\s+(asis)[^\w\-]/)) + { + $Texi2HTML::THISDOC{$macro} = $1; + } + else + { + echo_error ("Bad \@$macro", $line_nr); + } + } + elsif ($macro eq 'firstparagraphindent') + { + if (($line =~ /\s+(none)[^\w\-]/) or ($line =~ /\s+(insert)[^\w\-]/)) + { + $Texi2HTML::THISDOC{$macro} = $1; + } + else + { + echo_error ("Bad \@$macro", $line_nr); + } + } + elsif ($macro eq 'exampleindent') + { + if ($line =~ /^\s+([0-9]+)/) + { + $Texi2HTML::THISDOC{$macro} = $1; + } + elsif ($line =~ /^\s+(asis)[^\w\-]/) + { + $Texi2HTML::THISDOC{$macro} = $1; + } + else + { + echo_error ("Bad \@$macro", $line_nr); + } + } + elsif ($macro eq 'frenchspacing') + { + if (($line =~ /^\s+(on)[^\w\-]/) or ($line =~ /^\s+(off)[^\w\-]/)) + { + $Texi2HTML::THISDOC{$macro} = $1; + } + else + { + echo_error ("Bad \@$macro", $line_nr); + } + } + elsif ($macro eq 'footnotestyle') + { + if (($line =~ /^\s+(end)[^\w\-]/) or ($line =~ /^\s+(separate)[^\w\-]/)) + { + $Texi2HTML::THISDOC{$macro} = $1; + } + else + { + echo_error ("Bad \@$macro", $line_nr); + } + } + elsif ($macro eq 'headings') + { + my $valid_arg = 0; + foreach my $possible_arg (('off','on','single','double', + 'singleafter','doubleafter')) + { + if ($line =~ /^\s+($possible_arg)[^\w\-]/) + { + $valid_arg = 1; + $Texi2HTML::THISDOC{$macro} = $possible_arg; + last; + } + } + unless ($valid_arg) + { + echo_error ("Bad \@$macro", $line_nr); + } + } + elsif ($macro eq 'setchapternewpage') + { + if (($line =~ /^\s+(on)[^\w\-]/) or ($line =~ /^\s+(off)[^\w\-]/) + or ($line =~ /^\s+(odd)[^\w\-]/)) + { + $Texi2HTML::THISDOC{$macro} = $1; + } + else + { + echo_error ("Bad \@$macro", $line_nr); + } + } + elsif ($macro eq 'setcontentsaftertitlepage' or $macro eq 'setshortcontentsaftertitlepage') + { + $Texi2HTML::THISDOC{$macro} = 1; + my $tag = 'contents'; + $tag = 'shortcontents' if ($macro ne 'setcontentsaftertitlepage'); + $content_element{$tag}->{'aftertitlepage'} = 1; + } + elsif (grep {$macro eq $_} ('everyheading', 'everyfooting', + 'evenheading', 'evenfooting', 'oddheading', 'oddfooting')) + { + my $arg = $line; + $arg =~ s/^\s+//; + $Texi2HTML::THISDOC{$macro} = $arg; + } + elsif ($macro eq 'need') + { + unless (($line =~ /^\s+([0-9]+(\.[0-9]*)?)[^\w\-]/) or + ($line =~ /^\s+(\.[0-9]+)[^\w\-]/)) + { + echo_warn ("Bad \@$macro", $line_nr); + } + } + + ($text, $line, $args) = preserve_command($line, $macro); + return ($text, $line); +} + +# return the line after removing things according to misc_command map. +# if the skipped macro has an effect it is done here +# this is used during pass_text +sub misc_command_text($$$$$$) +{ + my $line = shift; + my $macro = shift; + my $stack = shift; + my $state = shift; + my $text = shift; + my $line_nr = shift; + my ($skipped, $remaining, $args); + # if it is true the command args are kept so the user can modify how + # they are skipped and handle them as unknown @-commands + my $keep = $Texi2HTML::Config::misc_command{$macro}->{'keep'}; + + if ($macro eq 'detailmenu') + { + $state->{'detailmenu'}++; + } + elsif ($macro eq 'sp') + { + my $sp_number; + if ($line =~ /^\s+(\d+)\s/) + { + $sp_number = $1; + } + elsif ($line =~ /(\s*)$/) + { + $sp_number = ''; + } + else + { + echo_error ("\@$macro needs a numeric arg or no arg", $line_nr); + } + $sp_number = 1 if ($sp_number eq ''); + if (!$state->{'remove_texi'}) + { + add_prev($text, $stack, &$Texi2HTML::Config::sp($sp_number, $state->{'preformatted'})); + } + } + elsif($macro eq 'verbatiminclude' and !$keep) + { + if ($line =~ /\s+(.+)/) + { + my $arg = $1; + my $file = locate_include_file($arg); + if (defined($file)) + { + if (!open(VERBINCLUDE, $file)) + { + echo_warn ("Can't read file $file: $!",$line_nr); + } + else + { + my $verb_text = ''; + while (my $line = ) + { + $verb_text .= $line; + } + + if ($state->{'remove_texi'}) + { + add_prev ($text, $stack, &$Texi2HTML::Config::raw_no_texi('verbatim', $verb_text)); + } + else + { + add_prev($text, $stack, &$Texi2HTML::Config::raw('verbatim', $verb_text)); + } + close VERBINCLUDE; + } + } + else + { + echo_error ("Can't find $arg, skipping", $line_nr); + } + } + else + { + echo_error ("Bad \@$macro line: $_", $line_nr); + } + } + elsif ($macro eq 'indent' or $macro eq 'noindent') + { + $state->{'paragraph_indent'} = $macro; + } + ($remaining, $skipped, $args) = preserve_command($line, $macro); + return ($skipped) if ($keep); + return $remaining if ($remaining ne ''); + return undef; +} + +# merge the things appearing before the first @node or sectionning command +# (held by element_before_anything) with the current element +# do that only once. +sub merge_element_before_anything($) +{ + my $element = shift; + if (exists($element_before_anything->{'place'})) + { + $element->{'current_place'} = $element_before_anything->{'place'}; + delete $element_before_anything->{'place'}; + foreach my $placed_thing (@{$element->{'current_place'}}) + { + $placed_thing->{'element'} = $element if (exists($placed_thing->{'element'})); + } + } + # this is certainly redundant with the above condition, but cleaner + # that way + if (exists($element_before_anything->{'titlefont'})) + { + $element->{'titlefont'} = $element_before_anything->{'titlefont'}; + delete $element_before_anything->{'titlefont'}; + } +} + +# find menu_prev, menu_up... for a node in menu +sub menu_entry_texi($$$) +{ + my $node = shift; + my $state = shift; + my $line_nr = shift; + my $node_menu_ref = {}; + if (exists($nodes{$node})) + { + $node_menu_ref = $nodes{$node}; + } + else + { + $nodes{$node} = $node_menu_ref; + $node_menu_ref->{'texi'} = $node; + $node_menu_ref->{'external_node'} = 1 if ($node =~ /\(.+\)/); + } + return if ($state->{'detailmenu'}); + if ($state->{'node_ref'}) + { + $node_menu_ref->{'menu_up'} = $state->{'node_ref'}; + $node_menu_ref->{'menu_up_hash'}->{$state->{'node_ref'}->{'texi'}} = 1; + } + else + { + echo_warn ("menu entry without previous node: $node", $line_nr) unless ($node =~ /\(.+\)/); + } + if ($state->{'prev_menu_node'}) + { + $node_menu_ref->{'menu_prev'} = $state->{'prev_menu_node'}; + $state->{'prev_menu_node'}->{'menu_next'} = $node_menu_ref; + } + elsif ($state->{'node_ref'}) + { + $state->{'node_ref'}->{'menu_child'} = $node_menu_ref; + } + $state->{'prev_menu_node'} = $node_menu_ref; +} + +sub equivalent_nodes($) +{ + my $name = shift; +#print STDERR "equivalent_nodes $name\n"; + my $node = normalise_node($name); + $name = cross_manual_line($node); + my @equivalent_nodes = (); + if (exists($cross_reference_nodes{$name})) + { + @equivalent_nodes = grep {$_ ne $node} @{$cross_reference_nodes{$name}}; + } + return @equivalent_nodes; +} + +my %files = (); # keys are files. This is used to avoid reusing an allready + # used file name +my %empty_indices = (); # value is true for an index name key if the index + # is empty +my %printed_indices = (); # value is true for an index name not empty and + # printed + +# find next, prev, up, back, forward, fastback, fastforward +# find element id and file +# split index pages +# associate placed items (items which have links to them) with the right +# file and id +# associate nodes with sections +sub rearrange_elements() +{ + print STDERR "# find sections levels and toplevel\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + + my $toplevel = 4; + # correct level if raisesections or lowersections overflowed + # and find toplevel level + # use %sections to modify also the headings + foreach my $section (values(%sections)) + { + my $level = $section->{'level'}; + if ($level > $MAX_LEVEL) + { + $section->{'level'} = $MAX_LEVEL; + } + elsif ($level < $MIN_LEVEL and !$section->{'top'}) + { + $section->{'level'} = $MIN_LEVEL; + } + else + { + $section->{'level'} = $level; + } + $section->{'toc_level'} = $section->{'level'}; + # This is for top + $section->{'toc_level'} = $MIN_LEVEL if ($section->{'level'} < $MIN_LEVEL); + # find the new tag corresponding with the level of the section + if ($section->{'tag'} !~ /heading/ and ($level ne $reference_sec2level{$section->{'tag'}})) + { + $section->{'tag_level'} = $level2sec{$section->{'tag'}}->[$section->{'level'}]; + } + else + { + $section->{'tag_level'} = $section->{'tag'}; + } + $toplevel = $section->{'level'} if (($section->{'level'} < $toplevel) and ($section->{'level'} > 0 and ($section->{'tag'} !~ /heading/))); + print STDERR "# section level $level: $section->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + } + + print STDERR "# find sections structure, construct section numbers (toplevel=$toplevel)\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + my $in_appendix = 0; + # these arrays have an element per sectionning level. + my @previous_numbers = (); # holds the number of the previous sections + # at the same and upper levels + my @previous_sections = (); # holds the ref of the previous sections + + foreach my $section (@sections_list) + { + ########################### debug + print STDERR "BUG: node or section_ref defined for section $section->{'texi'}\n" + if (exists($section->{'node'}) or exists($section->{'section_ref'})); + ########################### end debug + next if ($section->{'top'}); + print STDERR "Bug level undef for ($section) $section->{'texi'}\n" if (!defined($section->{'level'})); + $section->{'toplevel'} = 1 if ($section->{'level'} == $toplevel); + # undef things under that section level + for (my $level = $section->{'level'} + 1; $level < $MAX_LEVEL + 1 ; $level++) + { + $previous_numbers[$level] = undef; + $previous_sections[$level] = undef; + } + my $number_set; + # find number at the current level + if ($section->{'tag'} =~ /appendix/ and !$in_appendix) + { + $previous_numbers[$toplevel] = 'A'; + $in_appendix = 1; + $number_set = 1 if ($section->{'level'} == $toplevel); + } + if (!defined($previous_numbers[$section->{'level'}]) and !$number_set) + { + if ($section->{'tag'} =~ /unnumbered/) + { + $previous_numbers[$section->{'level'}] = undef; + } + else + { + $previous_numbers[$section->{'level'}] = 1; + } + } + elsif ($section->{'tag'} !~ /unnumbered/ and !$number_set) + { + $previous_numbers[$section->{'level'}]++; + } + # construct the section number + $section->{'number'} = ''; + + unless ($section->{'tag'} =~ /unnumbered/) + { + my $level = $section->{'level'}; + while ($level > $toplevel) + { + my $number = $previous_numbers[$level]; + $number = 0 if (!defined($number)); + if ($section->{'number'}) + { + $section->{'number'} = "$number.$section->{'number'}"; + } + else + { + $section->{'number'} = $number; + } + $level--; + } + my $toplevel_number = $previous_numbers[$toplevel]; + $toplevel_number = 0 if (!defined($toplevel_number)); + $section->{'number'} = "$toplevel_number.$section->{'number'}"; + } + # find the previous section + if (defined($previous_sections[$section->{'level'}])) + { + my $prev_section = $previous_sections[$section->{'level'}]; + $section->{'sectionprev'} = $prev_section; + $prev_section->{'sectionnext'} = $section; + } + # find the up section + if ($section->{'level'} == $toplevel) + { + $section->{'sectionup'} = undef; + } + else + { + my $level = $section->{'level'} - 1; + while (!defined($previous_sections[$level]) and ($level >= 0)) + { + $level--; + } + if ($level >= 0) + { + $section->{'sectionup'} = $previous_sections[$level]; + # 'child' is the first child + $section->{'sectionup'}->{'child'} = $section unless ($section->{'sectionprev'}); + push @{$section->{'sectionup'}->{'section_childs'}}, $section; + } + else + { + $section->{'sectionup'} = undef; + } + } + $previous_sections[$section->{'level'}] = $section; + # This is what is used in the .init file. + $section->{'up'} = $section->{'sectionup'}; + # Not used but documented. + $section->{'next'} = $section->{'sectionnext'}; + $section->{'prev'} = $section->{'sectionprev'}; + + ############################# debug + my $up = "NO_UP"; + $up = $section->{'sectionup'} if (defined($section->{'sectionup'})); + print STDERR "# numbering section ($section->{'level'}): $section->{'number'}: (up: $up) $section->{'texi'}\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + ############################# end debug + } + + # at that point there are still some node structures that are not + # in %nodes, (the external nodes, and unknown nodes in case + # novalidate is true) so we cannot find the id. The consequence is that + # some node equivalent with another node may not be catched during + # that pass. We mark the nodes that have directions for unreferenced + # nodes and make a second pass for these nodes afterwards. + my @nodes_with_unknown_directions = (); + + my @node_directions = ('node_prev', 'node_next', 'node_up'); + # handle nodes + # the node_prev... are texinfo strings, find the associated node references + print STDERR "# Resolve nodes directions\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + foreach my $node (@nodes_list) + { + foreach my $direction (@node_directions) + { + if (defined($node->{$direction}) and !ref($node->{$direction}) + and ($node->{$direction} ne '')) + { + if ($nodes{$node->{$direction}} and $nodes{$node->{$direction}}->{'seen'}) + { + $node->{$direction} = $nodes{$node->{$direction}}; + } + elsif (($node->{$direction} =~ /^\(.*\)/) or $novalidate) + { # ref to an external node + if (exists($nodes{$node->{$direction}})) + { + $node->{$direction} = $nodes{$node->{$direction}}; + } + else + { + # FIXME if {'seen'} this is a node appearing in the + # document and a node like `(file)node'. What to + # do then ? + my $node_ref = { 'texi' => $node->{$direction} }; + $node_ref->{'external_node'} = 1 if ($node->{$direction} =~ /^\(.*\)/); + $nodes{$node->{$direction}} = $node_ref; + $node->{$direction} = $node_ref; + } + } + else + { + push @nodes_with_unknown_directions, $node; + } + } + } + } + + # Find cross manual links as explained on the texinfo mailing list + # The specification is such that cross manual links formatting should + # be insensitive to the manual split + cross_manual_links(); + + # Now it is possible to find the unknown directions that are equivalent + # (have same node id) than an existing node + foreach my $node (@nodes_with_unknown_directions) + { + foreach my $direction (@node_directions) + { + if (defined($node->{$direction}) and !ref($node->{$direction}) + and ($node->{$direction} ne '')) + { + echo_warn ("$direction `$node->{$direction}' for `$node->{'texi'}' not found"); + my @equivalent_nodes = equivalent_nodes($node->{$direction}); + my $node_seen; + foreach my $equivalent_node (@equivalent_nodes) + { + if ($nodes{$equivalent_node}->{'seen'}) + { + $node_seen = $equivalent_node; + last; + } + } + if (defined($node_seen)) + { + echo_warn (" ---> but equivalent node `$node_seen' found"); + $node->{$direction} = $nodes{$node_seen}; + } + else + { + delete $node->{$direction}; + } + } + } + } + + # find section preceding and following top + my $section_before_top; # section preceding the top node + my $section_after_top; # section following the top node + if ($node_top) + { + my $previous_is_top = 0; + foreach my $element (@all_elements) + { + if ($element eq $node_top) + { + $previous_is_top = 1; + next; + } + if ($previous_is_top) + { + if ($element->{'section'}) + { + $section_after_top = $element; + last; + } + next; + } + $section_before_top = $element if ($element->{'section'}); + } + } + print STDERR "# section before Top: $section_before_top->{'texi'}\n" + if ($section_before_top and ($T2H_DEBUG & $DEBUG_ELEMENTS)); + print STDERR "# section after Top: $section_after_top->{'texi'}\n" + if ($section_after_top and ($T2H_DEBUG & $DEBUG_ELEMENTS)); + + print STDERR "# Build the elements list\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + if (!$Texi2HTML::Config::USE_NODES) + { + #the only sectionning elements are sections + @elements_list = @sections_list; + # if there is no section we use nodes... + if (!@elements_list) + { + print STDERR "# no section\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + @elements_list = @all_elements; + } + elsif (!$section_top and $node_top and !$node_top->{'with_section'}) + { # special case for the top node if it isn't associated with + # a section. The top node element is inserted between the + # $section_before_top and the $section_after_top + print STDERR "# Top not associated with a section\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + $node_top->{'top_as_section'} = 1; + $node_top->{'section_ref'} = $node_top; + my @old_element_lists = @elements_list; + @elements_list = (); + while (@old_element_lists) + { + my $section = shift @old_element_lists; + if ($section_before_top and ($section eq $section_before_top)) + { + push @elements_list, $section; + push @elements_list, $node_top; + last; + } + elsif ($section_after_top and ($section eq $section_after_top)) + { + push @elements_list, $node_top; + push @elements_list, $section; + last; + } + push @elements_list, $section; + } + push @elements_list, @old_element_lists; + } + + foreach my $element (@elements_list) + { + print STDERR "# new section element $element->{'texi'}\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + } + } + else + { + # elements are sections if possible, and node if no section associated + foreach my $element(@all_elements) + { + if ($element->{'node'}) + { + if (!defined($element->{'with_section'})) + { + $element->{'toc_level'} = $MIN_LEVEL if (!defined($element->{'toc_level'})); + print STDERR "# new node element ($element) $element->{'texi'}\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + push @elements_list, $element; + } + } + else + { + print STDERR "# new section element ($element) $element->{'texi'}\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + push @elements_list, $element; + } + } + } + + # nodes are attached to the section preceding them if not allready + # associated with a section + # here we don't set @{$element->{'nodes'}} since it may be changed + # below if split by indices. Therefore we only set + # @{$element->{'all_elements'}} with all the elements associated + # with an element output, in the right order + print STDERR "# Find the section associated with each node\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + my $current_section = $sections_list[0]; + $current_section = $node_top if ($node_top and $node_top->{'top_as_section'} and !$section_before_top); + foreach my $element (@all_elements) + { + if ($element->{'node'} and !$element->{'top_as_section'}) + { + if ($element->{'with_section'}) + { # the node is associated with a section + $element->{'section_ref'} = $element->{'with_section'}; + push @{$element->{'section_ref'}->{'all_elements'}}, $element, $element->{'section_ref'}; + # first index is section if the first index is associated with that node + $element_index = $element->{'section_ref'} if ($element_index and ($element_index eq $element)); + } + elsif (defined($current_section)) + {# node appearing after a section, but not before another section, + # or appearing before any section + $element->{'section_ref'} = $current_section; + $element->{'toc_level'} = $current_section->{'toc_level'}; + push @{$current_section->{'node_childs'}}, $element; + if ($Texi2HTML::Config::USE_NODES) + { # the node is an element itself + push @{$element->{'all_elements'}}, $element; + } + else + { + push @{$current_section->{'all_elements'}}, $element; + # first index is section if the first index is associated with that node + $element_index = $current_section if ($element_index and ($element_index eq $element)); + } + } + else + { # seems like there are only nodes in the documents + $element->{'toc_level'} = $MIN_LEVEL; + push @{$element->{'all_elements'}}, $element; + } + } + else + { + $current_section = $element; + if ($element->{'node'}) + { # Top node not associated with a section + $element->{'toc_level'} = $MIN_LEVEL; + push @{$element->{'section_ref'}->{'all_elements'}}, $element; + } + elsif (!$element->{'node_ref'}) + { # a section not preceded by a node + push @{$element->{'all_elements'}}, $element; + } + } + } + + # find first, last and top elements + $element_first = $elements_list[0]; + print STDERR "# element first: $element_first->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + print STDERR "# top node: $node_top->{'texi'}\n" if (defined($node_top) and + ($T2H_DEBUG & $DEBUG_ELEMENTS)); + # element top is the element with @top. + $element_top = $section_top; + # If the top node is associated with a section it is the top_element + # otherwise element top may be the top node + $element_top = $node_top if (!defined($element_top) and defined($node_top)); + # If there is no @top section no top node the first node is the top element + $element_top = $element_first unless (defined($element_top)); + $element_top->{'top'} = 1 if ($element_top->{'node'}); + print STDERR "# element top: $element_top->{'texi'}\n" if ($element_top and + ($T2H_DEBUG & $DEBUG_ELEMENTS)); + + # It is the last element before indices split, which may add new + # elements + $element_last = $elements_list[-1]; + + print STDERR "# Complete nodes next prev and up based on menus and sections\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + # set the default id based on the node number + my $node_nr = 1; + # find the node* directions + # find the directions corresponding with sections + # and set 'up' for the node + foreach my $node (@nodes_list) + { + # first a warning if the node and the equivalent nodes don't + # appear in menus + if (!$node->{'first'} and !$node->{'top'} and !$node->{'menu_up'} and ($node->{'texi'} !~ /^top$/i) and $Texi2HTML::Config::SHOW_MENU) + { + my @equivalent_nodes = equivalent_nodes($node->{'texi'}); + my $found = 0; + foreach my $equivalent_node (@equivalent_nodes) + { + if ($nodes{$equivalent_node}->{'first'} or $nodes{$equivalent_node}->{'menu_up'}) + { + $found = 1; + last; + } + } + unless ($found) + { + warn "$WARN `$node->{'texi'}' doesn't appear in menus\n"; + } + } + + # use values deduced from menus to complete missing up, next, prev + # or from sectionning commands if automatic sectionning + if ($node->{'node_up'}) + { + $node->{'nodeup'} = $node->{'node_up'}; + } + elsif ($node->{'automatic_directions'} and $node->{'section_ref'}) + { + if (defined($node_top) and ($node eq $node_top)) + { # Top node has a special up, which is (dir) by default + my $top_nodeup = $Texi2HTML::Config::TOP_NODE_UP; + if (exists($nodes{$top_nodeup})) + { + $node->{'nodeup'} = $nodes{$top_nodeup}; + } + else + { + my $node_ref = { 'texi' => $top_nodeup }; + $node_ref->{'external_node'} = 1; + $nodes{$top_nodeup} = $node_ref; + $node->{'nodeup'} = $node_ref; + } + } + elsif (defined($node->{'section_ref'}->{'sectionup'})) + { + $node->{'nodeup'} = get_node($node->{'section_ref'}->{'sectionup'}); + } + elsif ($node->{'section_ref'}->{'toplevel'} and ($node->{'section_ref'} ne $element_top)) + { + $node->{'nodeup'} = get_node($element_top); + } + print STDERR "# Deducing from section node_up $node->{'nodeup'}->{'texi'} for $node->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS and defined($node->{'nodeup'})); + } + + if (!$node->{'nodeup'} and $node->{'menu_up'} and $Texi2HTML::Config::USE_MENU_DIRECTIONS) + { # makeinfo don't do that + $node->{'nodeup'} = $node->{'menu_up'}; + print STDERR "# Deducing from menu node_up $node->{'menu_up'}->{'texi'} for $node->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + } + + if ($node->{'nodeup'} and !$node->{'nodeup'}->{'external_node'}) + { + # We detect when the up node has no menu entry for that node, as + # there may be infinite loops when finding following node (see below) + unless (defined($node->{'menu_up_hash'}) and ($node->{'menu_up_hash'}->{$node->{'nodeup'}->{'texi'}})) + { + print STDERR "$WARN `$node->{'nodeup'}->{'texi'}' is up for `$node->{'texi'}', but has no menu entry for this node\n" if ($Texi2HTML::Config::SHOW_MENU); + push @{$node->{'up_not_in_menu'}}, $node->{'nodeup'}->{'texi'}; + } + } + + # Find next node + if ($node->{'node_next'}) + { + $node->{'nodenext'} = $node->{'node_next'}; + } + elsif ($node->{'texi'} eq 'Top') + { # special case as said in the texinfo manual + $node->{'nodenext'} = $node->{'menu_child'} if ($node->{'menu_child'}); + } + elsif ($node->{'automatic_directions'}) + { + if (defined($node->{'section_ref'})) + { + my $next; + my $section = $node->{'section_ref'}; + if (defined($section->{'sectionnext'})) + { + $next = get_node($section->{'sectionnext'}) + } + else + { + while (defined($section->{'sectionup'}) and !defined($section->{'sectionnext'})) + { + $section = $section->{'sectionup'}; + } + if (defined($section->{'sectionnext'})) + { + $next = get_node($section->{'sectionnext'}); + } + } + $node->{'nodenext'} = $next; + } + } + # next we try menus. makeinfo don't do that + if (!defined($node->{'nodenext'}) and $node->{'menu_next'} + and $Texi2HTML::Config::USE_MENU_DIRECTIONS) + { + $node->{'nodenext'} = $node->{'menu_next'}; + } + # Find prev node + if ($node->{'node_prev'}) + { + $node->{'nodeprev'} = $node->{'node_prev'}; + } + elsif ($node->{'automatic_directions'}) + { + if (defined($node->{'section_ref'})) + { + my $section = $node->{'section_ref'}; + if (defined($section->{'sectionprev'})) + { + $node->{'nodeprev'} = get_node($section->{'sectionprev'}); + } + elsif (defined($section->{'sectionup'})) + { + $node->{'nodeprev'} = get_node($section->{'sectionup'}); + } + } + } + # next we try menus. makeinfo don't do that + if (!defined($node->{'nodeprev'}) and $node->{'menu_prev'} and $Texi2HTML::Config::USE_MENU_DIRECTIONS) + { + $node->{'nodeprev'} = $node->{'menu_prev'}; + } + # the prev node is the parent node + elsif (!defined($node->{'nodeprev'}) and $node->{'menu_up'} and $Texi2HTML::Config::USE_MENU_DIRECTIONS) + { + $node->{'nodeprev'} = $node->{'menu_up'}; + } + + # the following node is the node following in node reading order + # it is thus first the child, else the next, else the next following + # the up + if ($node->{'menu_child'}) + { + $node->{'following'} = $node->{'menu_child'}; + } + elsif ($node->{'automatic_directions'} and defined($node->{'section_ref'}) and defined($node->{'section_ref'}->{'child'})) + { + $node->{'following'} = get_node($node->{'section_ref'}->{'child'}); + } + elsif (defined($node->{'nodenext'})) + { + $node->{'following'} = $node->{'nodenext'}; + } + else + { + my $up = $node->{'nodeup'}; + # in order to avoid infinite recursion in case the up node is the + # node itself we use the up node as following when there isn't + # a correct menu structure, here and also below. + $node->{'following'} = $up if (defined($up) and grep {$_ eq $up->{'texi'}} @{$node->{'up_not_in_menu'}}); + while ((!defined($node->{'following'})) and (defined($up))) + { + if (($node_top) and ($up eq $node_top)) + { # if we are at Top, Top is following + $node->{'following'} = $node_top; + $up = undef; + } + if (defined($up->{'nodenext'})) + { + $node->{'following'} = $up->{'nodenext'}; + } + elsif (defined($up->{'nodeup'})) + { + if (! grep { $_ eq $up->{'nodeup'}->{'texi'} } @{$node->{'up_not_in_menu'}}) + { + $up = $up->{'nodeup'}; + } + else + { # in that case we can go into a infinite loop + $node->{'following'} = $up->{'nodeup'}; + } + } + else + { + $up = undef; + } + } + } + + if (defined($node->{'section_ref'})) + { + my $section = $node->{'section_ref'}; + foreach my $direction ('sectionnext', 'sectionprev', 'sectionup') + { + $node->{$direction} = $section->{$direction} + if (defined($section->{$direction})); + } + # this is a node appearing within a section but not associated + # with that section. We consider that it is below that section. + $node->{'sectionup'} = $section + if (grep {$node eq $_} @{$section->{'node_childs'}}); + } + # 'up' is used in .init files. Maybe should go away. + if (defined($node->{'sectionup'})) + { + $node->{'up'} = $node->{'sectionup'}; + } + elsif (defined($node->{'nodeup'}) and + (!$node_top or ($node ne $node_top))) + { + $node->{'up'} = $node->{'nodeup'}; + } + # 'next' not used but documented. + if (defined($node->{'sectionnext'})) + { + $node->{'next'} = $node->{'sectionnext'}; + } + if (defined($node->{'sectionprev'})) + { + $node->{'prev'} = $node->{'sectionprev'}; + } + + # default id for nodes. Should be overriden later. + $node->{'id'} = 'NOD' . $node_nr; + $node_nr++; + } + + print STDERR "# find forward and back\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + my $prev; + foreach my $element (@elements_list) + { + $element->{'element'} = 1; + # complete the up for toplevel elements now that element_top is defined + print STDERR "# fwd and back for $element->{'texi'}\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + # at that point no node may be toplevel, only sections. + if ($element->{'toplevel'} and ($element ne $element_top)) + { + $element->{'sectionup'} = $element_top; + $element->{'up'} = $element_top; + } + if ($prev) + { + $element->{'back'} = $prev; + $prev->{'forward'} = $element; + $prev = $element; + } + else + { + $prev = $element; + } + # If the element is not a node, then all the node directions are copied + # if there is an associated node + if (defined($element->{'node_ref'})) + { + $element->{'nodenext'} = $element->{'node_ref'}->{'nodenext'}; + $element->{'nodeprev'} = $element->{'node_ref'}->{'nodeprev'}; + $element->{'menu_next'} = $element->{'node_ref'}->{'menu_next'}; + $element->{'menu_prev'} = $element->{'node_ref'}->{'menu_prev'}; + $element->{'menu_child'} = $element->{'node_ref'}->{'menu_child'}; + $element->{'menu_up'} = $element->{'node_ref'}->{'menu_up'}; + $element->{'nodeup'} = $element->{'node_ref'}->{'nodeup'}; + $element->{'following'} = $element->{'node_ref'}->{'following'}; + } + elsif (! $element->{'node'}) + { # the section has no node associated. Find the node directions using + # sections + if (defined($element->{'sectionnext'})) + { + $element->{'nodenext'} = get_node($element->{'sectionnext'}); + } + if (defined($element->{'sectionprev'})) + { + $element->{'nodeprev'} = get_node($element->{'sectionprev'}); + } + if (defined($element->{'up'})) + { + $element->{'nodeup'} = get_node($element->{'up'}); + } + if ($element->{'child'}) + { + $element->{'following'} = get_node($element->{'child'}); + } + elsif ($element->{'sectionnext'}) + { + $element->{'following'} = get_node($element->{'sectionnext'}); + } + elsif ($element->{'up'}) + { + my $up = $element; + while ($up->{'up'} and !$element->{'following'}) + { + print STDERR "# Going up, searching next section from $up->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + $up = $up->{'up'}; + if ($up->{'sectionnext'}) + { + $element->{'following'} = get_node ($up->{'sectionnext'}); + } + # avoid infinite loop if the top is up for itself + last if ($up->{'toplevel'} or $up->{'top'}); + } + } + } + } + + my @new_elements = (); + print STDERR "# preparing indices\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + + while(@elements_list) + { + my $element = shift @elements_list; + # current_element is the last element which can hold text. It is + # initialized to a fake element + my $current_element = { 'holder' => 1, 'texi' => 'HOLDER', + 'place' => [], 'indices' => [] }; + # $back, $forward and $sectionnext are kept because $element + # is in @{$element->{'all_elements'}}, so it is possible that + # those directions get changed. + # back is set to find back and forward + my $back = $element->{'back'} if defined($element->{'back'}); + my $forward = $element->{'forward'}; + my $sectionnext = $element->{'sectionnext'}; + my $index_num = 0; + my @waiting_elements = (); # elements (nodes) not used for sectionning + # waiting to be associated with an element + foreach my $checked_element(@{$element->{'all_elements'}}) + { + if ($checked_element->{'element'}) + { # this is the element, we must add it + push @new_elements, $checked_element; + if ($current_element->{'holder'}) + { # no previous element added + push @{$checked_element->{'place'}}, @{$current_element->{'place'}}; + foreach my $index(@{$current_element->{'indices'}}) + { + push @{$checked_element->{'indices'}}, [ { 'element' => $checked_element, 'page' => $index->[0]->{'page'}, 'name' => $index->[0]->{'name'} } ] ; + } + } + else + { + $current_element->{'sectionnext'} = $checked_element; + $current_element->{'following'} = $checked_element; + $checked_element->{'sectionprev'} = $current_element; + } + $current_element = $checked_element; + $checked_element->{'back'} = $back; + $back->{'forward'} = $checked_element if (defined($back)); + $back = $checked_element; + push @{$checked_element->{'nodes'}}, @waiting_elements; + @waiting_elements = (); + } + elsif ($current_element->{'holder'}) + { + push @waiting_elements, $checked_element; + } + else + { + push @{$current_element->{'nodes'}}, $checked_element; + $checked_element->{'section_ref'} = $current_element; + } + push @{$current_element->{'place'}}, @{$checked_element->{'current_place'}}; + foreach my $index (@{$checked_element->{'index_names'}}) + { + print STDERR "# Index in `$checked_element->{'texi'}': $index->{'name'}. Current is `$current_element->{'texi'}'\n" + if ($T2H_DEBUG & $DEBUG_INDEX); + my ($pages, $entries) = get_index($index->{'name'}); + if (defined($pages)) + { + my @pages = @$pages; + my $first_page = shift @pages; + ############################## begin debug section + my $back_texi = 'NO_BACK'; + $back_texi = $back->{'texi'} if (defined($back)); + print STDERR "# Index first page (back `$back_texi', in `$current_element->{'texi'}')\n" if ($T2H_DEBUG & $DEBUG_INDEX); + ############################## end debug section + push @{$current_element->{'indices'}}, [ {'element' => $current_element, 'page' => $first_page, 'name' => $index->{'name'} } ]; + if (@pages) + {# index is split accross more than one page + if ($current_element->{'holder'}) + { # the current element isn't an element which is + # normally outputted. We add a real element. + # we are in a node of a section but the element + # is split by the index, thus we must add + # a new element which will contain the text + # between the beginning of the element and the index + # WARNING the added element is like a section, and + # indeed it is a 'section_ref' and 'sectionup' + # for other nodes, it has 'nodes' + # (see below and above). + # But it is also a node. It may have a 'with_section' + # and have a 'section_ref' + # it may be considered 'node_ref' for a section. + # and the Texi2HTML::NODE is relative to this + # added element. + + push @new_elements, $checked_element; + print STDERR "# Add `$checked_element->{'texi'}' before index page for `$element->{'texi'}'\n" + if ($T2H_DEBUG & $DEBUG_INDEX); + echo_warn("Add `$checked_element->{'texi'}' for indicing"); + $checked_element->{'element'} = 1; + $checked_element->{'level'} = $element->{'level'}; + $checked_element->{'toc_level'} = $element->{'toc_level'}; + $checked_element->{'toplevel'} = $element->{'toplevel'}; + if ($element->{'top'}) + { + $checked_element->{'toplevel'} = 1; + $checked_element->{'top'} = 1; + } + $checked_element->{'up'} = $element->{'up'}; + $checked_element->{'sectionup'} = $element->{'sectionup'}; + $checked_element->{'element_added'} = 1; + print STDERR "Bug: checked element wasn't seen" if + (!$checked_element->{'seen'}); + $element->{'sectionprev'}->{'sectionnext'} = $checked_element if (exists($element->{'sectionprev'})); + push @{$checked_element->{'place'}}, @{$current_element->{'place'}}; + foreach my $index(@{$current_element->{'indices'}}) + { + push @{$checked_element->{'indices'}}, [ { 'element' => $checked_element, 'page' => $index->[0]->{'page'}, 'name' => $index->[0]->{'name'} } ] ; + } + foreach my $waiting_element (@waiting_elements) + { + next if ($waiting_element eq $checked_element); + $waiting_element->{'section_ref'} = $checked_element; + $waiting_element->{'sectionup'} = $checked_element; + push @{$checked_element->{'nodes'}}, $waiting_element; + } + @waiting_elements = (); + $checked_element->{'back'} = $back; + $back->{'forward'} = $checked_element if (defined($back)); + $current_element = $checked_element; + $back = $checked_element; + } + my $index_page; + while(@pages) + { + print STDERR "# New page (back `$back->{'texi'}', current `$current_element->{'texi'}')\n" if ($T2H_DEBUG & $DEBUG_INDEX); + $index_num++; + my $page = shift @pages; + $index_page = { 'index_page' => 1, + 'texi' => "NOT REALLY USED: $current_element->{'texi'}' index $index->{'name'} page $index_num", + 'level' => $element->{'level'}, + 'tag' => $element->{'tag'}, + 'tag_level' => $element->{'tag_level'}, + 'toplevel' => $element->{'toplevel'}, + 'top' => $element->{'top'}, + 'up' => $element->{'up'}, + 'sectionup' => $element->{'sectionup'}, + 'back' => $back, + 'prev' => $back, + 'sectionnext' => $sectionnext, + 'following' => $current_element->{'following'}, + 'nodeup' => $current_element->{'nodeup'}, + 'nodenext' => $current_element->{'nodenext'}, + 'nodeprev' => $back, + 'place' => [], + 'seen' => 1, + 'page' => $page + }; + # the index page is associated with the new element + # if there is one, the element otherwise + if ($checked_element->{'element_added'}) + { + $index_page->{'original_index_element'} = $checked_element; + } + else + { + $index_page->{'original_index_element'} = $element; + } + $index_page->{'node'} = 1 if ($element->{'node'}); + while ($nodes{$index_page->{'texi'}}) + { + $nodes{$index_page->{'texi'}} .= ' '; + } + $nodes{$index_page->{'texi'}} = $index_page; + push @{$current_element->{'indices'}->[-1]}, {'element' => $index_page, 'page' => $page, 'name' => $index->{'name'} }; + push @new_elements, $index_page; + $back->{'forward'} = $index_page; + $back->{'nodenext'} = $index_page; + $back->{'sectionnext'} = $index_page unless ($back->{'top'}); + $back->{'following'} = $index_page; + $back = $index_page; + $index_page->{'toplevel'} = 1 if ($element->{'top'}); + } + $current_element = $index_page; + } + } + else + { + print STDERR "# Empty index: $index->{'name'}\n" + if ($T2H_DEBUG & $DEBUG_INDEX); + $empty_indices{$index->{'name'}} = 1; + } + push @{$current_element->{'place'}}, @{$index->{'place'}}; + } + } + if ($forward and ($current_element ne $element)) + { + $current_element->{'forward'} = $forward; + $forward->{'back'} = $current_element; + } + next if ($current_element eq $element or !$element->{'toplevel'}); + # reparent the elements below $element to the last index page + print STDERR "# Reparent for `$element->{'texi'}':\n" if ($T2H_DEBUG & $DEBUG_INDEX); + foreach my $reparented(@{$element->{'section_childs'}},@{$element->{'node_childs'}}) + { + $reparented->{'sectionup'} = $current_element; + print STDERR " reparented: $reparented->{'texi'}\n" + if ($T2H_DEBUG & $DEBUG_INDEX); + } + } + @elements_list = @new_elements; + + print STDERR "# find fastback and fastforward\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + foreach my $element (@elements_list) + { + my $up = get_top($element); + next unless (defined($up)); + $element_chapter_index = $up if ($element_index and ($element_index eq $element)); + # fastforward is the next element on same level than the upper parent + # element + $element->{'fastforward'} = $up->{'sectionnext'} if (exists ($up->{'sectionnext'})); + # if the element isn't at the highest level, fastback is the + # highest parent element + if ($up and ($up ne $element)) + { + $element->{'fastback'} = $up; + } + elsif ($element->{'toplevel'}) + { + # the element is a top level element, we adjust the next + # toplevel element fastback + $element->{'fastforward'}->{'fastback'} = $element if ($element->{'fastforward'}); + } + } + + # set 'reference_element' which is used each time there is a cross ref + # to that node. + # It is the section associated with the node except if USE_NODES + unless ($Texi2HTML::Config::USE_NODES) + { + foreach my $node(@nodes_list) + { + if ($node->{'with_section'}) + { + $node->{'reference_element'} = $node->{'with_section'}; + } + } + } + + my $index_nr = 0; + # convert directions in direction with first letter in all caps, to be + # consistent with the convention used in the .init file. + # find id for nodes and indices + foreach my $element (@elements_list) + { + $element->{'this'} = $element; + foreach my $direction (@element_directions) + { + my $direction_no_caps = $direction; + $direction_no_caps =~ tr/A-Z/a-z/; + $element->{$direction} = $element->{$direction_no_caps}; + } + if ($element->{'index_page'}) + { + $element->{'id'} = "INDEX" . $index_nr; + $index_nr++; + } + } + + print STDERR "# find float id\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + foreach my $float (@floats) + { + $float->{'style_id'} = cross_manual_line(normalise_space($float->{'style_texi'})); + my $float_style = { }; + if (exists($floats{$float->{'style_id'}})) + { + $float_style = $floats{$float->{'style_id'}}; + } + else + { + $floats{$float->{'style_id'}} = $float_style; + } + push @{$float_style->{'floats'}}, $float; + $float->{'absolute_nr'} = scalar(@{$float_style->{'floats'}}); + my $up = get_top($float->{'element'}); + if (defined($up) and (!defined($float_style->{'current_chapter'}) or ($up->{'texi'} ne $float_style->{'current_chapter'}))) + { + $float_style->{'current_chapter'} = $up->{'texi'}; + $float_style->{'nr_in_chapter'} = 1; + } + else + { + $float_style->{'nr_in_chapter'}++; + } + if (defined($up) and $up->{'number'} ne '') + { + $float->{'chapter_nr'} = $up->{'number'}; + $float->{'nr'} = $float->{'chapter_nr'} . $float_style->{'nr_in_chapter'}; + } + else + { + $float->{'nr'} = $float->{'absolute_nr'}; + } + } + + if ($Texi2HTML::Config::NEW_CROSSREF_STYLE) + { + foreach my $key (keys(%nodes)) + { + my $node = $nodes{$key}; + next if ($node->{'external_node'} or $node->{'index_page'}); + $node->{'id'} = node_to_id($node->{'cross_manual_target'}); + } + } + + # Find node file names and file names for nodes considered as elements + my $node_as_top; + if ($node_top) + { + $node_as_top = $node_top; + } + elsif ($element_top->{'node_ref'}) + { + $node_as_top = $element_top->{'node_ref'}; + } + else + { + $node_as_top = $node_first; + } + if ($node_as_top) + { + my $node_file; + $node_file = &$Texi2HTML::Config::node_file_name($node_as_top,'top'); + $node_as_top->{'node_file'} = $node_file if (defined($node_file)); + } + foreach my $key (keys(%nodes)) + { + my $node = $nodes{$key}; + next if (defined($node_as_top) and ($node eq $node_as_top)); + my $node_file = &$Texi2HTML::Config::node_file_name($node,''); + $node->{'node_file'} = $node_file if (defined($node_file)); + } + + print STDERR "# split and set files\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + # find document nr and document file for sections and nodes. + # Split according to Texi2HTML::Config::SPLIT. + # find file and id for placed elements (anchors, index entries, headings) + if ($Texi2HTML::Config::SPLIT) + { + my $cut_section = $toplevel; + my $doc_nr = -1; + if ($Texi2HTML::Config::SPLIT eq 'section') + { + $cut_section = 2 if ($toplevel <= 2); + } + my $previous_file; + foreach my $element (@elements_list) + { + print STDERR "# Splitting ($Texi2HTML::Config::SPLIT:$cut_section) $element->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + my $new_file = 0; + if ( + ($Texi2HTML::Config::SPLIT eq 'node') or + ( + defined($element->{'level'}) and ($element->{'level'} <= $cut_section) + ) + ) + { + $new_file = 1; + $doc_nr++; + } + $doc_nr = 0 if ($doc_nr < 0); # happens if first elements are nodes + $element->{'doc_nr'} = $doc_nr; + my $is_top = ''; + $element->{'file'} = "${docu_name}_$doc_nr" + . ($docu_ext ? ".$docu_ext" : ""); + if ($element->{'top'} or (defined($element->{'node_ref'}) and $element->{'node_ref'} eq $element_top)) + { # the top elements + $is_top = "top"; + $element->{'file'} = $docu_top; + } + elsif ($Texi2HTML::Config::NODE_FILES) + { + if ($new_file) + { + my $node = get_node($element) unless(exists($element->{'node_ref'}) + and $element->{'node_ref'}->{'element_added'}); + if ($node and defined($node->{'node_file'})) + { + $element->{'file'} = $node->{'node_file'}; + } + $previous_file = $element->{'file'}; + } + elsif($previous_file) + { + $element->{'file'} = $previous_file; + } + } + if (defined($Texi2HTML::Config::element_file_name)) + { + my $filename = + &$Texi2HTML::Config::element_file_name ($element, $is_top, $docu_name); + $element->{'file'} = $filename if (defined($filename)); + } + print STDERR "# add_file $element->{'file'} for $element->{'texi'}\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + add_file($element->{'file'}); + foreach my $place(@{$element->{'place'}}) + { + $place->{'file'} = $element->{'file'}; + $place->{'id'} = $element->{'id'} unless defined($place->{'id'}); + } + if ($element->{'nodes'}) + { + foreach my $node (@{$element->{'nodes'}}) + { + $node->{'doc_nr'} = $element->{'doc_nr'}; + $node->{'file'} = $element->{'file'}; + } + } + } + } + else + { # not split + add_file($docu_doc); + foreach my $element(@elements_list) + { + $element->{'file'} = $docu_doc; + $element->{'doc_nr'} = 0; + foreach my $place(@{$element->{'place'}}) + { + $place->{'file'} = $element->{'file'}; + $place->{'id'} = $element->{'id'} unless defined($place->{'id'}); + } + } + foreach my $node(@nodes_list) + { + $node->{'file'} = $docu_doc; + $node->{'doc_nr'} = 0; + } + } + # correct the id and file for the things placed in footnotes + foreach my $place(@{$footnote_element->{'place'}}) + { + $place->{'file'} = $footnote_element->{'file'}; + $place->{'id'} = $footnote_element->{'id'} unless defined($place->{'id'}); + } + # if setcontentsaftertitlepage is set, the contents should be associated + # with the titlepage. That's wat is done there. + push @$region_place, $content_element{'contents'} + if ($Texi2HTML::Config::DO_CONTENTS and $Texi2HTML::THISDOC{'setcontentsaftertitlepage'}); + push @$region_place, $content_element{'shortcontents'} + if ($Texi2HTML::Config::DO_SCONTENTS and $Texi2HTML::THISDOC{'setshortcontentsaftertitlepage'}); + # correct the id and file for the things placed in regions (copying...) + foreach my $place(@$region_place) + { +#print STDERR "entry $place->{'entry'} texi $place->{'texi'}\n"; + $place->{'file'} = $element_top->{'file'}; + $place->{'id'} = $element_top->{'id'} unless defined($place->{'id'}); + $place->{'element'} = $element_top if (exists($place->{'element'})); + } + foreach my $content_type(keys(%content_element)) + { + if (!defined($content_element{$content_type}->{'file'})) + { + print STDERR "# No content $content_type\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + $content_element{$content_type} = undef; + } + } + + ########################### debug prints + foreach my $file (keys(%files)) + { + last unless ($T2H_DEBUG & $DEBUG_ELEMENTS); + print STDERR "$file: counter $files{$file}->{'counter'}\n"; + } + foreach my $element ((@elements_list, $footnote_element)) + { + last unless ($T2H_DEBUG & $DEBUG_ELEMENTS); + my $is_toplevel = 'not toplevel'; + $is_toplevel = 'toplevel' if ($element->{'toplevel'}); + print STDERR "$element "; + if ($element->{'index_page'}) + { + print STDERR "index($element->{'id'}, $is_toplevel, doc_nr $element->{'doc_nr'}($element->{'file'})): $element->{'texi'}\n"; + } + elsif ($element->{'node'}) + { + print STDERR "node($element->{'id'}, toc_level $element->{'toc_level'}, $is_toplevel, doc_nr $element->{'doc_nr'}($element->{'file'})) $element->{'texi'}:\n"; + print STDERR " section_ref: $element->{'section_ref'}->{'texi'}\n" if (defined($element->{'section_ref'})); + } + elsif ($element->{'footnote'}) + { + print STDERR "footnotes($element->{'id'}, file $element->{'file'})\n"; + } + else + { + my $number = "UNNUMBERED"; + $number = $element->{'number'} if ($element->{'number'}); + print STDERR "$number ($element->{'id'}, $is_toplevel, level $element->{'level'}-$element->{'toc_level'}, doc_nr $element->{'doc_nr'}($element->{'file'})) $element->{'texi'}:\n"; + print STDERR " node_ref: $element->{'node_ref'}->{'texi'}\n" if (defined($element->{'node_ref'})); + } + + if (!$element->{'footnote'}) + { + if (!defined($files{$element->{'file'}})) + { + die "Bug: files{\$element->{'file'}} undef element $element->{'texi'}, file $element->{'file'}."; + } + print STDERR " file: $element->{'file'} $files{$element->{'file'}}, counter $files{$element->{'file'}}->{'counter'}\n"; + } + print STDERR " TOP($toplevel) " if ($element->{'top'}); + print STDERR " u: $element->{'up'}->{'texi'}\n" if (defined($element->{'up'})); + print STDERR " ch: $element->{'child'}->{'texi'}\n" if (defined($element->{'child'})); + print STDERR " fb: $element->{'fastback'}->{'texi'}\n" if (defined($element->{'fastback'})); + print STDERR " b: $element->{'back'}->{'texi'}\n" if (defined($element->{'back'})); + print STDERR " p: $element->{'prev'}->{'texi'}\n" if (defined($element->{'prev'})); + print STDERR " n: $element->{'sectionnext'}->{'texi'}\n" if (defined($element->{'sectionnext'})); + print STDERR " n_u: $element->{'nodeup'}->{'texi'}\n" if (defined($element->{'nodeup'})); + print STDERR " f: $element->{'forward'}->{'texi'}\n" if (defined($element->{'forward'})); + print STDERR " follow: $element->{'following'}->{'texi'}\n" if (defined($element->{'following'})); + print STDERR " m_p: $element->{'menu_prev'}->{'texi'}\n" if (defined($element->{'menu_prev'})); + print STDERR " m_n: $element->{'menu_next'}->{'texi'}\n" if (defined($element->{'menu_next'})); + print STDERR " m_u: $element->{'menu_up'}->{'texi'}\n" if (defined($element->{'menu_up'})); + print STDERR " m_ch: $element->{'menu_child'}->{'texi'}\n" if (defined($element->{'menu_child'})); + print STDERR " ff: $element->{'fastforward'}->{'texi'}\n" if (defined($element->{'fastforward'})); + if (defined($element->{'menu_up_hash'})) + { + print STDERR " parent nodes:\n"; + foreach my $menu_up (keys%{$element->{'menu_up_hash'}}) + { + print STDERR " $menu_up ($element->{'menu_up_hash'}->{$menu_up})\n"; + } + } + if (defined($element->{'nodes'})) + { + print STDERR " nodes: $element->{'nodes'} (@{$element->{'nodes'}})\n"; + foreach my $node (@{$element->{'nodes'}}) + { + my $beginning = " "; + $beginning = " *" if ($node->{'with_section'}); + my $file = $node->{'file'}; + $file = "file undef" if (! defined($node->{'file'})); + print STDERR "${beginning}$node->{'texi'} $file\n"; + } + } + print STDERR " places: $element->{'place'}\n"; + foreach my $place(@{$element->{'place'}}) + { + if (!$place->{'entry'} and !$place->{'float'} and !$place->{'texi'} and !$place->{'contents'} and !$place->{'shortcontents'}) + { + print STDERR "BUG: unknown placed stuff ========\n"; + foreach my $key (keys(%$place)) + { + print STDERR "$key: $place->{$key}\n"; + } + print STDERR "==================================\n"; + } + elsif ($place->{'entry'}) + { + print STDERR " index($place): $place->{'entry'}\n"; + } + elsif ($place->{'anchor'}) + { + print STDERR " anchor: $place->{'texi'}\n"; + } + elsif ($place->{'float'}) + { + if (defined($place->{'texi'})) + { + print STDERR " float($place): $place->{'texi'}\n"; + } + else + { + print STDERR " float($place): NO LABEL\n"; + } + } + elsif ($place->{'contents'}) + { + print STDERR " contents\n"; + } + elsif ($place->{'shortcontents'}) + { + print STDERR " shortcontents\n"; + } + else + { + print STDERR " heading: $place->{'texi'}\n"; + } + } + if ($element->{'indices'}) + { + print STDERR " indices: $element->{'indices'}\n"; + foreach my $index(@{$element->{'indices'}}) + { + print STDERR " $index: "; + foreach my $page (@$index) + { + print STDERR "'$page->{'element'}->{'texi'}'($page->{'name'}): $page->{'page'} "; + } + print STDERR "\n"; + } + } + } + ########################### end debug prints +} + +sub add_file($) +{ + my $file = shift; + if ($files{$file}) + { + $files{$file}->{'counter'}++; + } + else + { + $files{$file} = { + #'type' => 'section', + 'counter' => 1, + 'relative_foot_num' => 1, + 'foot_lines' => [] + }; + } +} + +# find parent element which is a top element, or a node within the top section +sub get_top($) +{ + my $element = shift; + my $up = $element; + while (!$up->{'toplevel'} and !$up->{'top'}) + { + $up = $up->{'sectionup'}; + if (!defined($up)) + { + # If there is no section, it is normal not to have toplevel element, + # and it is also the case if there is a low level element before + # a top level element + return undef; + } + } + return $up; +} + +sub get_node($) +{ + my $element = shift; + return undef if (!defined($element)); + return $element if ($element->{'node'}); + return $element->{'node_ref'} if ($element->{'node_ref'}); + return $element; +} +# get the html names from the texi for all elements +sub do_names() +{ + print STDERR "# Doing ". scalar(keys(%nodes)) . " nodes, ". + scalar(keys(%sections)) . " sections in ". $#elements_list . + " elements\n" if ($T2H_DEBUG); + # for nodes and anchors we haven't any state defined + # This seems right, however, as we don't want @refs or @footnotes + # or @anchors within nodes, section commands or anchors. + foreach my $node (keys(%nodes)) + { + next if ($nodes{$node}->{'index_page'}); # some nodes are index pages. + my $texi = &$Texi2HTML::Config::heading_texi($nodes{$node}->{'tag'}, + $nodes{$node}->{'texi'}, undef); + $nodes{$node}->{'text'} = substitute_line ($texi); + $nodes{$node}->{'text_nonumber'} = $nodes{$node}->{'text'}; + # backward compatibility + $nodes{$node}->{'name'} = $nodes{$node}->{'text_nonumber'}; + $nodes{$node}->{'no_texi'} = remove_texi($texi); + $nodes{$node}->{'simple_format'} = simple_format(undef, $texi); + $nodes{$node}->{'heading_texi'} = $texi; + # FIXME : what to do if $nodes{$node}->{'external_node'} and + # $nodes{$node}->{'seen'} + } + foreach my $number (keys(%sections)) + { + my $section = $sections{$number}; + #$section->{'name'} = substitute_line($section->{'texi'}); + my $texi = &$Texi2HTML::Config::heading_texi($section->{'tag'}, $section->{'texi'}, $section->{'number'}); + $section->{'text'} = substitute_line($texi); + $section->{'text_nonumber'} = substitute_line($section->{'texi'}); + # backward compatibility + $section->{'name'} = $section->{'text_nonumber'}; + $section->{'no_texi'} = remove_texi($texi); + $section->{'simple_format'} = simple_format(undef,$texi); + $section->{'heading_texi'} = $texi; + } + my $tocnr = 1; + foreach my $element (@elements_list) + { + if (!$element->{'top'} and !$element->{'index_page'}) + { # for link back to table of contents + # FIXME do it for top too? + $element->{'tocid'} = 'TOC' . $tocnr; + $tocnr++; + } + next if (defined($element->{'text'})); + if ($element->{'index_page'}) + { + my $page = $element->{'page'}; + my $original_element = $element->{'original_index_element'}; + my $texi = &$Texi2HTML::Config::index_element_heading_texi( + $original_element->{'heading_texi'}, + $original_element->{'tag'}, + $original_element->{'texi'}, + $original_element->{'number'}, + $page->{'first_letter'}, $page->{'last_letter'}); + $element->{'heading_texi'} = $texi; + $element->{'text'} = substitute_line($texi); + $element->{'no_texi'} = remove_texi($texi); + $element->{'simple_format'} = simple_format(undef,$texi); + } + } + print STDERR "# Names done\n" if ($T2H_DEBUG); +} + +@{$Texi2HTML::TOC_LINES} = (); # table of contents +@{$Texi2HTML::OVERVIEW} = (); # short table of contents + + + +#+++############################################################################ +# # +# Stuff related to Index generation # +# # +#---############################################################################ + +# called during pass_structure +sub enter_index_entry($$$$$$$) +{ + my $prefix = shift; + my $line_nr = shift; + my $key = shift; + my $place = shift; + my $element = shift; + my $use_section_id = shift; + my $command = shift; + unless ($index_prefix_to_name{$prefix}) + { + echo_error ("Undefined index command: ${prefix}index", $line_nr); + $key = ''; + } + if (!exists($element->{'tag'}) and !$element->{'footnote'}) + { + echo_warn ("Index entry before document: \@${prefix}index $key", $line_nr); + } + $key =~ s/\s+$//; + $key =~ s/^\s*//; + my $entry = $key; + # The $key is mostly usefull for alphabetical sorting + $key = remove_texi($key); + my $id = ''; + # don't add a specific index target if after a section or the index + # entry is in @copying or the like + unless ($use_section_id or ($place eq $region_place)) + { + $id = 'IDX' . ++$idx_num; + } + my $index_entry = { + 'entry' => $entry, + 'element' => $element, + 'prefix' => $prefix, + 'label' => $id, + 'command' => $command + }; + + print STDERR "# enter \@$command ${prefix}index '$key' with id $id ($index_entry)\n" + if ($T2H_DEBUG & $DEBUG_INDEX); + if ($key =~ /^\s*$/) + { + echo_warn("Empty index entry for \@$command",$line_nr); + # don't add the index entry to the list of index entries used for index + # entry formatting,if the index entry appears in a region like copying + push @index_labels, $index_entry unless ($place eq $region_place); + return; + } + while (exists $index->{$prefix}->{$key}) + { + $key .= ' '; + } + $index->{$prefix}->{$key} = $index_entry; + push @$place, $index_entry; + # don't add the index entry to the list of index entries used for index + # entry formatting,if the index entry appears in a region like copying + push @index_labels, $index_entry unless ($place eq $region_place); +} + +# sort according to cmp if both $a and $b are alphabetical or non alphabetical, +# otherwise the alphabetical is ranked first +sub by_alpha +{ + if ($a =~ /^[A-Za-z]/) + { + if ($b =~ /^[A-Za-z]/) + { + return lc($a) cmp lc($b); + } + else + { + return 1; + } + } + elsif ($b =~ /^[A-Za-z]/) + { + return -1; + } + else + { + return lc($a) cmp lc($b); + } +} + +# returns an array of index entries pages splitted by letters +# each page has the following members: +# 'first_letter' first letter on that page +# 'last_letter' last letter on that page +# 'letters' ref on an array with all the letters for that page +# 'entries_by_letter' ref on a hash. Each key is a letter, with value a ref +# on arrays of index entries beginning with this letter +sub get_index_pages($) +{ + my $entries = shift; + my (@letters); + my ($entries_by_letter, $pages, $page) = ({}, [], {}); + my @keys = sort by_alpha keys %$entries; + + # each index entry is placed according to its first letter in + # entries_by_letter + for my $key (@keys) + { + push @{$entries_by_letter->{uc(substr($key,0, 1))}} , $entries->{$key}; + } + @letters = sort by_alpha keys %$entries_by_letter; + $Texi2HTML::Config::SPLIT_INDEX = 0 unless $Texi2HTML::Config::SPLIT; + + if ($Texi2HTML::Config::SPLIT_INDEX and $Texi2HTML::Config::SPLIT_INDEX =~ /^\d+$/) + { + my $i = 0; + my ($prev_letter); + foreach my $letter (@letters) + { + if ($i > $Texi2HTML::Config::SPLIT_INDEX) + { + $page->{'last_letter'} = $prev_letter; + push @$pages, $page; + $i=0; + } + if ($i == 0) + { + $page = {}; + $page->{'letters'} = []; + $page->{'entries_by_letter'} = {}; + $page->{'first_letter'} = $letter; + } + push @{$page->{'letters'}}, $letter; + $page->{'entries_by_letter'}->{$letter} = [@{$entries_by_letter->{$letter}}]; + $i += scalar(@{$entries_by_letter->{$letter}}); + $prev_letter = $letter; + } + $page->{'last_letter'} = $letters[$#letters]; + push @$pages, $page; + } + else + { + warn "$WARN Bad Texi2HTML::Config::SPLIT_INDEX: $Texi2HTML::Config::SPLIT_INDEX\n" if ($Texi2HTML::Config::SPLIT_INDEX); + $page->{'first_letter'} = $letters[0]; + $page->{'last_letter'} = $letters[$#letters]; + $page->{'letters'} = \@letters; + $page->{'entries_by_letter'} = $entries_by_letter; + push @$pages, $page; + return $pages; + } + return $pages; +} + +# return the page and the entries. Cache the result in %indices. +sub get_index($;$) +{ + my $index_name = shift; + my $line_nr = shift; + + return (@{$indices{$index_name}}) if ($indices{$index_name}); + + unless (exists($index_names{$index_name})) + { + echo_error ("Bad index name: $index_name", $line_nr); + return; + } + # add the index name itself to the index names searched for index + # prefixes. Only those found associated by synindex or syncodeindex are + # allready there (unless this code has allready been called). + if ($index_names{$index_name}->{'code'}) + { + $index_names{$index_name}->{'associated_indices_code'}->{$index_name} = 1; + } + else + { + $index_names{$index_name}->{'associated_indices'}->{$index_name} = 1; + } + + # find all the index names associated with the prefixes and then + # all the entries associated with each prefix + my $entries = {}; + foreach my $associated_indice(keys %{$index_names{$index_name}->{'associated_indices'}}) + { + foreach my $prefix(@{$index_names{$associated_indice}->{'prefix'}}) + { + foreach my $key (keys %{$index->{$prefix}}) + { + $entries->{$key} = $index->{$prefix}->{$key}; + } + } + } + + foreach my $associated_indice (keys %{$index_names{$index_name}->{'associated_indices_code'}}) + { + unless (exists ($index_names{$index_name}->{'associated_indices'}->{$associated_indice})) + { + foreach my $prefix (@{$index_names{$associated_indice}->{'prefix'}}) + { + foreach my $key (keys (%{$index->{$prefix}})) + { + $entries->{$key} = $index->{$prefix}->{$key}; + # use @code for code style index entry + $entries->{$key}->{'entry'} = "\@code{$entries->{$key}->{entry}}"; + } + } + } + } + + return unless %$entries; + my $pages = get_index_pages($entries); + $indices{$index_name} = [ $pages, $entries ]; + return ($pages, $entries); +} + +my @foot_lines = (); # footnotes +my $copying_comment = ''; # comment constructed from text between + # @copying and @end copying with licence +my $to_encoding; # out file encoding +my %acronyms_like = (); # acronyms or similar commands associated texts + # the key are the commands, the values are + # hash references associating shorthands to + # texts. + +sub initialise_state($) +{ + my $state = shift; + $state->{'preformatted'} = 0 unless exists($state->{'preformatted'}); + $state->{'code_style'} = 0 unless exists($state->{'code_style'}); + $state->{'keep_texi'} = 0 unless exists($state->{'keep_texi'}); + $state->{'keep_nr'} = 0 unless exists($state->{'keep_nr'}); + $state->{'detailmenu'} = 0 unless exists($state->{'detailmenu'}); # number of opened detailed menus + $state->{'table_list_stack'} = [ {'format' => "noformat"} ] unless exists($state->{'table_list_stack'}); + $state->{'paragraph_style'} = [ '' ] unless exists($state->{'paragraph_style'}); + $state->{'preformatted_stack'} = [ '' ] unless exists($state->{'preformatted_stack'}); + $state->{'menu'} = 0 unless exists($state->{'menu'}); + $state->{'command_stack'} = [] unless exists($state->{'command_stack'}); + $state->{'quotation_stack'} = [] unless exists($state->{'quotation_stack'}); + # if there is no $state->{'element'} the first element is used + $state->{'element'} = $elements_list[0] unless (exists($state->{'element'}) and !$state->{'element'}->{'before_anything'}); +} + +sub pass_text() +{ + my %state; + initialise_state(\%state); + my @stack; + my $text; + my $doc_nr; + my $in_doc = 0; + my $element; + my @text =(); + my @section_lines = (); + my @head_lines = (); + my $one_section = 1 if (@elements_list == 1); + + if (@elements_list == 0) + { + warn "$WARN empty document\n"; + exit (0); + } + + # We set titlefont only if the titlefont appeared in the top element + if (defined($element_top->{'titlefont'})) + { + $value{'_titlefont'} = $element_top->{'titlefont'}; + } + + # prepare %Texi2HTML::THISDOC +# $Texi2HTML::THISDOC{'settitle_texi'} = $value{'_settitle'}; + $Texi2HTML::THISDOC{'fulltitle_texi'} = ''; + $Texi2HTML::THISDOC{'title_texi'} = ''; + foreach my $possible_fulltitle (('_title', '_settitle', '_shorttitlepage', '_titlefont')) + { + if ($value{$possible_fulltitle} ne '') + { + $Texi2HTML::THISDOC{'fulltitle_texi'} = $value{$possible_fulltitle}; + last; + } + } + foreach my $possible_title_texi ($value{'_settitle'}, $Texi2HTML::THISDOC{'fulltitle_texi'}) + { + if ($possible_title_texi ne '') + { + $Texi2HTML::THISDOC{'title_texi'} = $possible_title_texi; + last; + } + } +# $Texi2HTML::THISDOC{'fulltitle_texi'} = $value{'_title'} || $value{'_settitle'} || $value{'_shorttitlepage'} || $value{'_titlefont'}; +# $Texi2HTML::THISDOC{'title_texi'} = $value{'_title'} || $value{'_settitle'} || $value{'_shorttitlepage'} || $value{'_titlefont'}; + foreach my $texi_cmd (('shorttitlepage', 'settitle', 'author', + 'titlefont', 'subtitle', 'shorttitle')) + { + $Texi2HTML::THISDOC{$texi_cmd . '_texi'} = $value{'_' . $texi_cmd}; + } + foreach my $doc_thing (('shorttitlepage', 'settitle', 'author', + 'titlefont', 'subtitle', 'shorttitle', 'fulltitle', 'title')) + { + my $thing_texi = $Texi2HTML::THISDOC{$doc_thing . '_texi'}; + $Texi2HTML::THISDOC{$doc_thing} = substitute_line($thing_texi); + $Texi2HTML::THISDOC{$doc_thing . '_no_texi'} = + remove_texi($thing_texi); + $Texi2HTML::THISDOC{$doc_thing . '_simple_format'} = + simple_format(undef, $thing_texi); + } + + # find Top name + my $element_top_text = ''; + my $top_no_texi = ''; + my $top_simple_format = ''; + my $top_name; + if ($element_top and $element_top->{'text'} and (!$node_top or ($element_top ne $node_top))) + { + $element_top_text = $element_top->{'text'}; + $top_no_texi = $element_top->{'no_texi'}; + $top_simple_format = $element_top->{'simple_format'}; + } + foreach my $possible_top_name ($Texi2HTML::Config::TOP_HEADING, + $element_top_text, $Texi2HTML::THISDOC{'title'}, + $Texi2HTML::THISDOC{'shorttitle'}, &$I('Top')) + { + if (defined($possible_top_name) and $possible_top_name ne '') + { + $top_name = $possible_top_name; + last; + } + } + foreach my $possible_top_no_texi ($Texi2HTML::Config::TOP_HEADING, + $top_no_texi, $Texi2HTML::THISDOC{'title_no_texi'}, + $Texi2HTML::THISDOC{'shorttitle_no_texi'}, + &$I('Top',{},{'remove_texi' => 1})) + { + if (defined($possible_top_no_texi) and $possible_top_no_texi ne '') + { + $top_no_texi = $possible_top_no_texi; + last; + } + } + + foreach my $possible_top_simple_format ($top_simple_format, + $Texi2HTML::THISDOC{'title_simple_format'}, + $Texi2HTML::THISDOC{'shorttitle_simple_format'}, + &$I('Top',{}, {'simple_format' => 1})) + { + if (defined($possible_top_simple_format) and $possible_top_simple_format ne '') + { + $top_simple_format = $possible_top_simple_format; + last; + } + } + + +# my $top_name = $Texi2HTML::Config::TOP_HEADING || $element_top_text || $Texi2HTML::THISDOC{'title'} || $Texi2HTML::THISDOC{'shorttitle'} || &$I('Top'); + + if ($Texi2HTML::THISDOC{'fulltitle_texi'} eq '') + { + $Texi2HTML::THISDOC{'fulltitle_texi'} = &$I('Untitled Document',{}, + {'keep_texi' => 1}); + } + $Texi2HTML::THISDOC{'title_texi'} = $Texi2HTML::THISDOC{'settitle_texi'}; + $Texi2HTML::THISDOC{'title_texi'} = $Texi2HTML::THISDOC{'fulltitle_texi'} + if ($Texi2HTML::THISDOC{'title_texi'} eq ''); + + foreach my $doc_thing (('fulltitle', 'title')) + { + my $thing_texi = $Texi2HTML::THISDOC{$doc_thing . '_texi'}; + $Texi2HTML::THISDOC{$doc_thing} = substitute_line($thing_texi); + $Texi2HTML::THISDOC{$doc_thing . '_no_texi'} = + remove_texi($thing_texi); + $Texi2HTML::THISDOC{$doc_thing . '_simple_format'} = + simple_format(undef, $thing_texi); + } + + for my $key (keys %Texi2HTML::THISDOC) + { + next if (ref($Texi2HTML::THISDOC{$key})); +print STDERR "!!$key\n" if (!defined($Texi2HTML::THISDOC{$key})); + $Texi2HTML::THISDOC{$key} =~ s/\s*$//; + } + $Texi2HTML::THISDOC{'program'} = $THISPROG; + $Texi2HTML::THISDOC{'program_homepage'} = $T2H_HOMEPAGE; + $Texi2HTML::THISDOC{'program_authors'} = $T2H_AUTHORS; + $Texi2HTML::THISDOC{'user'} = $T2H_USER; + $Texi2HTML::THISDOC{'user'} = $Texi2HTML::Config::USER if (defined($Texi2HTML::Config::USER)); +# $Texi2HTML::THISDOC{'documentdescription'} = $documentdescription; + $Texi2HTML::THISDOC{'copying'} = $copying_comment; + $Texi2HTML::THISDOC{'destination_directory'} = $docu_rdir; + $Texi2HTML::THISDOC{'authors'} = [] if (!defined($Texi2HTML::THISDOC{'authors'})); + $Texi2HTML::THISDOC{'subtitles'} = [] if (!defined($Texi2HTML::THISDOC{'subtitles'})); + $Texi2HTML::THISDOC{'titles'} = [] if (!defined($Texi2HTML::THISDOC{'titles'})); + foreach my $element (('authors', 'subtitles', 'titles')) + { + my $i; + for ($i = 0; $i < $#{$Texi2HTML::THISDOC{$element}} + 1; $i++) + { + chomp ($Texi2HTML::THISDOC{$element}->[$i]); + $Texi2HTML::THISDOC{$element}->[$i] = substitute_line($Texi2HTML::THISDOC{$element}->[$i]); + #print STDERR "$element:$i: $Texi2HTML::THISDOC{$element}->[$i]\n"; + } + } + # prepare TOC, OVERVIEW... + my ($toc_file, $stoc_file, $foot_file, $about_file); + # if not split the references are to the same file + $toc_file = $stoc_file = $foot_file = $about_file = ''; + if ($Texi2HTML::Config::SPLIT) + { + $toc_file = $docu_toc; + $stoc_file = $docu_stoc; + if ($Texi2HTML::Config::INLINE_CONTENTS) + { + $toc_file = $content_element{'contents'}->{'file'} if (defined($content_element{'contents'})); + $stoc_file = $content_element{'shortcontents'}->{'file'} if (defined($content_element{'shortcontents'})); + } + $foot_file = $docu_foot; + $about_file = $docu_about; + } + $Texi2HTML::THISDOC{'toc_file'} = $toc_file; + $Texi2HTML::HREF{'Contents'} = $toc_file.'#'.$content_element{'contents'}->{'id'} if @{$Texi2HTML::TOC_LINES}; + $Texi2HTML::HREF{'Overview'} = $stoc_file.'#'.$content_element{'shortcontents'}->{'id'} if @{$Texi2HTML::OVERVIEW}; + $Texi2HTML::HREF{'Footnotes'} = $foot_file. '#SEC_Foot'; + $Texi2HTML::HREF{'About'} = $about_file . '#SEC_About' unless ($one_section or (not $Texi2HTML::Config::SPLIT and not $Texi2HTML::Config::SECTION_NAVIGATION)); + + $Texi2HTML::NAME{'First'} = $element_first->{'text'}; + $Texi2HTML::NAME{'Last'} = $element_last->{'text'}; + $Texi2HTML::NAME{'About'} = &$I('About This Document'); + $Texi2HTML::NAME{'Contents'} = &$I('Table of Contents'); + $Texi2HTML::NAME{'Overview'} = &$I('Short Table of Contents'); + $Texi2HTML::NAME{'Top'} = $top_name; + $Texi2HTML::NAME{'Footnotes'} = &$I('Footnotes'); + $Texi2HTML::NAME{'Index'} = $element_chapter_index->{'text'} if (defined($element_chapter_index)); + $Texi2HTML::NAME{'Index'} = $Texi2HTML::Config::INDEX_CHAPTER if ($Texi2HTML::Config::INDEX_CHAPTER ne ''); + + $Texi2HTML::NO_TEXI{'First'} = $element_first->{'no_texi'}; + $Texi2HTML::NO_TEXI{'Last'} = $element_last->{'no_texi'}; + $Texi2HTML::NO_TEXI{'About'} = &$I('About This Document', {}, {'remove_texi' => 1} ); + $Texi2HTML::NO_TEXI{'Contents'} = &$I('Table of Contents', {}, {'remove_texi' => 1} ); + $Texi2HTML::NO_TEXI{'Overview'} = &$I('Short Table of Contents', {}, {'remove_texi' => 1} ); + $Texi2HTML::NO_TEXI{'Top'} = $top_no_texi; + $Texi2HTML::NO_TEXI{'Footnotes'} = &$I('Footnotes', {}, {'remove_texi' => 1} ); + $Texi2HTML::NO_TEXI{'Index'} = $element_chapter_index->{'no_texi'} if (defined($element_chapter_index)); + + $Texi2HTML::SIMPLE_TEXT{'First'} = $element_first->{'simple_format'}; + $Texi2HTML::SIMPLE_TEXT{'Last'} = $element_last->{'simple_format'}; + $Texi2HTML::SIMPLE_TEXT{'About'} = &$I('About This Document', {}, {'simple_format' => 1}); + $Texi2HTML::SIMPLE_TEXT{'Contents'} = &$I('Table of Contents',{}, {'simple_format' => 1}); + $Texi2HTML::SIMPLE_TEXT{'Overview'} = &$I('Short Table of Contents', {}, {'simple_format' => 1}); + $Texi2HTML::SIMPLE_TEXT{'Top'} = $top_simple_format; + $Texi2HTML::SIMPLE_TEXT{'Footnotes'} = &$I('Footnotes', {},{'simple_format' => 1}); + + $Texi2HTML::SIMPLE_TEXT{'Index'} = $element_chapter_index->{'simple_format'} if (defined($element_chapter_index)); + # must be after toc_body, but before titlepage + for my $element_tag ('contents', 'shortcontents') + { + my $toc_lines = &$Texi2HTML::Config::inline_contents(undef, $element_tag, $content_element{$element_tag}); + @{$Texi2HTML::THISDOC{'inline_contents'}->{$element_tag}} = @$toc_lines if (defined($toc_lines)); + } + $Texi2HTML::TITLEPAGE = ''; + $Texi2HTML::TITLEPAGE = substitute_text({}, @{$region_lines{'titlepage'}}) + if (@{$region_lines{'titlepage'}}); + &$Texi2HTML::Config::titlepage(); + + &$Texi2HTML::Config::init_out(); + $to_encoding = $Texi2HTML::Config::OUT_ENCODING; + + ############################################################################ + # print frame and frame toc file + # + if ( $Texi2HTML::Config::FRAMES ) + { + my $FH = open_out($docu_frame_file); + print STDERR "# Creating frame in $docu_frame_file ...\n" if $T2H_VERBOSE; + &$Texi2HTML::Config::print_frame($FH, $docu_toc_frame_file, $docu_top_file); + close_out($FH, $docu_frame_file); + + $FH = open_out($docu_toc_frame_file); + print STDERR "# Creating toc frame in $docu_frame_file ...\n" if $T2H_VERBOSE; + &$Texi2HTML::Config::print_toc_frame($FH, $Texi2HTML::OVERVIEW); + close_out($FH, $docu_toc_frame_file); + } + + ############################################################################ + # + # + + my $FH; + my $index_pages; + my $index_pages_nr; + my $index_nr = 0; + my $line_nr; + my $first_section = 0; # 1 if it is the first section of a page + while (@doc_lines) + { + unless ($index_pages) + { # not in a index split over sections + $_ = shift @doc_lines; + my $chomped_line = $_; + if (!chomp($chomped_line) and @doc_lines) + { # if the line has no end of line it is concatenated with the next + $doc_lines[0] = $_ . $doc_lines[0]; + next; + } + $line_nr = shift (@doc_numbers); + #print STDERR "$line_nr->{'file_name'}($line_nr->{'macro'},$line_nr->{'line_nr'}) $_" if ($line_nr); + } + #print STDERR "PASS_TEXT: $_"; + #dump_stack(\$text, \@stack, \%state); + if (!$state{'raw'} and !$state{'verb'}) + { + my $tag = ''; + $tag = $1 if (/^\@(\w+)/ and !$index_pages); + + if (($tag eq 'node') or defined($sec2level{$tag}) or $index_pages) + { + if (@stack or (defined($text) and $text ne '')) + {# in pass text node and section shouldn't appear in formats + #print STDERR "close_stack before \@$tag\n"; + #print STDERR "text!$text%" if (! @stack); + close_stack(\$text, \@stack, \%state, $line_nr); + push @section_lines, $text; + $text = ''; + } + $sec_num++ if ($sec2level{$tag}); + my $new_element; + my $current_element; + if ($tag =~ /heading/) + {# handle headings, they are not in element lists + $current_element = $sections{$sec_num}; + #print STDERR "HEADING $_"; + if (! $element) + { + $new_element = shift @elements_list; + } + else + { + push (@section_lines, &$Texi2HTML::Config::anchor($current_element->{'id'}) . "\n"); + push @section_lines, &$Texi2HTML::Config::heading($current_element); + next; + } + } + elsif (!$index_pages) + {# handle node and structuring elements + $current_element = shift (@all_elements); + ########################## begin debug section + if ($current_element->{'node'}) + { + print STDERR 'NODE ' . "$current_element->{'texi'}($current_element->{'file'})" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + print STDERR "($current_element->{'section_ref'}->{'texi'})" if ($current_element->{'section_ref'} and ($T2H_DEBUG & $DEBUG_ELEMENTS)); + } + else + { + print STDERR 'SECTION ' . $current_element->{'texi'} if ($T2H_DEBUG & $DEBUG_ELEMENTS); + } + print STDERR ": $_" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + ########################## end debug section + + # The element begins a new section if there is no previous + # or it is an element and not the current one or the + # associated section (in case of node) is not the current + # one + if (!$element + or ($current_element->{'element'} and ($current_element ne $element)) + or ($current_element->{'section_ref'} and ($current_element->{'section_ref'} ne $element))) + { + $new_element = shift @elements_list; + } + ########################### begin debug + my $section_element = $new_element; + $section_element = $element unless ($section_element); + if (!$current_element->{'node'} and !$current_element->{'index_page'} and ($section_element ne $current_element)) + { + print STDERR "NODE: $element->{'texi'}\n" if ($element->{'node'}); + warn "elements_list and all_elements not in sync (elements $section_element->{'texi'}, all $current_element->{'texi'}): $_"; + } + ########################### end debug + } + else + { # this is a new index section + $new_element = $index_pages->[$index_pages_nr]->{'element'}; + $current_element = $index_pages->[$index_pages_nr]->{'element'}; + print STDERR "New index page '$new_element->{'texi'}' nr: $index_pages_nr\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + my $list_element = shift @elements_list; + die "element in index_pages $new_element->{'texi'} and in list $list_element->{'texi'} differs\n" unless ($list_element eq $new_element); + } + if ($new_element) + { + $index_nr = 0; + my $old = 'NO_OLD'; + $old = $element->{'texi'} if (defined($element)); + print STDERR "NEW: $new_element->{'texi'}, OLD: $old\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS); + # print the element that just finished + $Texi2HTML::THIS_SECTION = \@section_lines; + $Texi2HTML::THIS_HEADER = \@head_lines; + if ($element) + { + finish_element($FH, $element, $new_element, $first_section); + $first_section = 0; + @section_lines = (); + @head_lines = (); + } + else + { + print STDERR "# Writing elements:" if ($T2H_VERBOSE); + if ($Texi2HTML::Config::IGNORE_PREAMBLE_TEXT) + { + @section_lines = (); + @head_lines = (); + } + # remove empty line at the beginning of @section_lines + shift @section_lines while (@section_lines and ($section_lines[0] =~ /^\s*$/)); + } + # begin new element + my $previous_file; + $previous_file = $element->{'file'} if (defined($element)); + $element = $new_element; + $state{'element'} = $element; + $Texi2HTML::THIS_ELEMENT = $element; + #print STDERR "Doing hrefs for $element->{'texi'} First "; + $Texi2HTML::HREF{'First'} = href($element_first, $element->{'file'}); + #print STDERR "Last "; + $Texi2HTML::HREF{'Last'} = href($element_last, $element->{'file'}); + #print STDERR "Index "; + $Texi2HTML::HREF{'Index'} = href($element_chapter_index, $element->{'file'}) if (defined($element_chapter_index)); + #print STDERR "Top "; + $Texi2HTML::HREF{'Top'} = href($element_top, $element->{'file'}); + if ($Texi2HTML::Config::INLINE_CONTENTS) + { + $Texi2HTML::HREF{'Contents'} = href($content_element{'contents'}, $element->{'file'}); + $Texi2HTML::HREF{'Overview'} = href($content_element{'shortcontents'}, $element->{'file'}); + } + foreach my $direction (@element_directions) + { + my $elem = $element->{$direction}; + $Texi2HTML::NODE{$direction} = undef; + $Texi2HTML::HREF{$direction} = undef; + next unless (defined($elem)); + #print STDERR "$direction "; + if ($elem->{'node'} or $elem->{'external_node'} or $elem->{'index_page'} or !$elem->{'seen'}) + { + $Texi2HTML::NODE{$direction} = $elem->{'text'}; + } + elsif ($elem->{'node_ref'}) + { + $Texi2HTML::NODE{$direction} = $elem->{'node_ref'}->{'text'}; + } + if (!$elem->{'seen'}) + { + $Texi2HTML::HREF{$direction} = do_external_href($elem->{'texi'}); + } + else + { + $Texi2HTML::HREF{$direction} = href($elem, $element->{'file'}); + } + $Texi2HTML::NAME{$direction} = $elem->{'text'}; + $Texi2HTML::NO_TEXI{$direction} = $elem->{'no_texi'}; + $Texi2HTML::SIMPLE_TEXT{$direction} = $elem->{'simple_format'}; + #print STDERR "$direction ($element->{'texi'}): \n NO_TEXI: $Texi2HTML::NO_TEXI{$direction}\n NAME $Texi2HTML::NAME{$direction}\n NODE $Texi2HTML::NODE{$direction}\n HREF $Texi2HTML::HREF{$direction}\n\n"; + } + #print STDERR "\nDone hrefs for $element->{'texi'}\n"; + $files{$element->{'file'}}->{'counter'}--; + if (!defined($previous_file) or ($element->{'file'} ne $previous_file)) + { + my $file = $element->{'file'}; + print STDERR "\n" if ($T2H_VERBOSE and !$T2H_DEBUG); + print STDERR "# Writing to $docu_rdir$file " if $T2H_VERBOSE; + my $do_page_head = 0; + if ($files{$file}->{'filehandle'}) + { + $FH = $files{$file}->{'filehandle'}; + } + else + { + $FH = open_out("$docu_rdir$file"); +#print STDERR "OPEN $docu_rdir$file, $FH". scalar($FH)."\n"; + $files{$file}->{'filehandle'} = $FH; + $do_page_head = 1; + } + if ($element->{'top'}) + { + &$Texi2HTML::Config::print_Top_header($FH, $do_page_head); + } + else + { + &$Texi2HTML::Config::print_page_head($FH) if ($do_page_head); + &$Texi2HTML::Config::print_chapter_header($FH) if $Texi2HTML::Config::SPLIT eq 'chapter'; + &$Texi2HTML::Config::print_section_header($FH) if $Texi2HTML::Config::SPLIT eq 'section'; + } + $first_section = 1; + } + print STDERR "." if ($T2H_VERBOSE); + print STDERR "\n" if ($T2H_DEBUG); + } + my $label = &$Texi2HTML::Config::anchor($current_element->{'id'}) . "\n"; + if (@section_lines) + { + push (@section_lines, $label); + } + else + { + push @head_lines, $label; + } + if ($index_pages) + { + push @section_lines, &$Texi2HTML::Config::heading($element); + #print STDERR "Do index page $index_pages_nr\n"; + my $page = do_index_page($index_pages, $index_pages_nr); + push @section_lines, $page; + if (defined ($index_pages->[$index_pages_nr + 1])) + { + $index_pages_nr++; + } + else + { + $index_pages = undef; + } + next; + } + push @section_lines, &$Texi2HTML::Config::heading($current_element) if ($current_element->{'element'} and !$current_element->{'top'}); + next; + } + elsif ($tag eq 'printindex') + { + s/\s+(\w+)\s*//; + my $name = $1; + close_paragraph(\$text, \@stack, \%state); + next if (!$index_names{$name} or $empty_indices{$name}); + $printed_indices{$name} = 1; + print STDERR "print index $name($index_nr) in `$element->{'texi'}', element->{'indices'}: $element->{'indices'},\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS or $T2H_DEBUG & $DEBUG_INDEX); + print STDERR "element->{'indices'}->[index_nr]: $element->{'indices'}->[$index_nr] (@{$element->{'indices'}->[$index_nr]})\n" if ($T2H_DEBUG & $DEBUG_ELEMENTS or $T2H_DEBUG & $DEBUG_INDEX); + $index_pages = $element->{'indices'}->[$index_nr] if (@{$element->{'indices'}->[$index_nr]} > 1); + $index_pages_nr = 0; + add_prev(\$text, \@stack, do_index_page($element->{'indices'}->[$index_nr], 0)); + $index_pages_nr++; + $index_nr++; + begin_paragraph (\@stack, \%state) if ($state{'preformatted'}); + next if (@stack); + push @section_lines, $text; + $text = ''; + next; + } + elsif (($tag eq 'contents') or ($tag eq 'summarycontents') or ($tag eq 'shortcontents')) + { + my $element_tag = $tag; + $element_tag = 'shortcontents' if ($element_tag ne 'contents'); + if ($Texi2HTML::Config::INLINE_CONTENTS and !$content_element{$element_tag}->{'aftertitlepage'}) + { + if (@stack or (defined($text) and $text ne '')) + {# in pass text contents shouldn't appear in formats + close_stack(\$text, \@stack, \%state, $line_nr); + push @section_lines, $text; + $text = ''; + } + my $toc_lines = &$Texi2HTML::Config::inline_contents($FH, $tag, $content_element{$element_tag}); + push (@section_lines, @$toc_lines) if (defined($toc_lines)) ; + } + next; + } + } + scan_line($_, \$text, \@stack, \%state, $line_nr); + #print STDERR "after scan_line: $_"; + #dump_stack(\$text, \@stack, \%state); + next if (@stack); + if ($text ne '' ) + { + push @section_lines, $text; + $text = ''; + } + } + if (@stack) + {# close stack at the end of pass text + close_stack(\$text, \@stack, \%state, $line_nr); + } + if (defined($text)) + { + push @section_lines, $text; + } + print STDERR "\n" if ($T2H_VERBOSE); + + $Texi2HTML::THIS_SECTION = \@section_lines; + # if no sections, then simply print document as is + if ($one_section) + { + if (@foot_lines) + { + &$Texi2HTML::Config::foot_section (\@foot_lines); + push @section_lines, @foot_lines; + } + $Texi2HTML::THIS_HEADER = \@head_lines; + if ($element->{'top'}) + { + print STDERR "Bug: `$element->{'texi'}' level undef\n" if (!$element->{'node'} and !defined($element->{'level'})); + $element->{'level'} = 1 if (!defined($element->{'level'})); + $element->{'node'} = 0; # otherwise Texi2HTML::Config::heading may uses the node level + $element->{'text'} = $Texi2HTML::NAME{'Top'}; + print STDERR "[Top]" if ($T2H_VERBOSE); + unless ($element->{'titlefont'} or $element->{'index_page'}) + { + unshift @section_lines, &$Texi2HTML::Config::heading($element); + } + } + print STDERR "# Write the section $element->{'texi'}\n" if ($T2H_VERBOSE); + &$Texi2HTML::Config::one_section($FH); + close_out($FH); + return; + } + + finish_element ($FH, $element, undef, $first_section); + + ############################################################################ + # Print ToC, Overview, Footnotes + # + foreach my $direction (@element_directions) + { + $Texi2HTML::HREF{$direction} = undef; + delete $Texi2HTML::HREF{$direction}; + # it is better to undef in case the references to these hash entries + # are used, as if deleted, the + # references are still refering to the old, undeleted element + # (we could do both) + $Texi2HTML::NAME{$direction} = undef; + $Texi2HTML::NO_TEXI{$direction} = undef; + $Texi2HTML::SIMPLE_TEXT{$direction} = undef; + $Texi2HTML::NODE{$direction} = undef; + + $Texi2HTML::THIS_ELEMENT = undef; + } + if (@foot_lines) + { + print STDERR "# writing Footnotes in $docu_foot_file\n" if $T2H_VERBOSE; + $FH = open_out ($docu_foot_file) + if $Texi2HTML::Config::SPLIT; + $Texi2HTML::HREF{'This'} = $Texi2HTML::HREF{'Footnotes'}; + $Texi2HTML::HREF{'Footnotes'} = '#' . $footnote_element->{'id'}; + $Texi2HTML::NAME{'This'} = $Texi2HTML::NAME{'Footnotes'}; + $Texi2HTML::NO_TEXI{'This'} = $Texi2HTML::NO_TEXI{'Footnotes'}; + $Texi2HTML::SIMPLE_TEXT{'This'} = $Texi2HTML::SIMPLE_TEXT{'Footnotes'}; + $Texi2HTML::THIS_SECTION = \@foot_lines; + $Texi2HTML::THIS_HEADER = [ &$Texi2HTML::Config::anchor($footnote_element->{'id'}) . "\n" ]; + &$Texi2HTML::Config::print_Footnotes($FH); + close_out($FH, $docu_foot_file) + if ($Texi2HTML::Config::SPLIT); + $Texi2HTML::HREF{'Footnotes'} = $Texi2HTML::HREF{'This'}; + } + + if (@{$Texi2HTML::TOC_LINES} and !$Texi2HTML::Config::INLINE_CONTENTS) + { + print STDERR "# writing Toc in $docu_toc_file\n" if $T2H_VERBOSE; + $FH = open_out ($docu_toc_file) + if $Texi2HTML::Config::SPLIT; + $Texi2HTML::HREF{'This'} = $Texi2HTML::HREF{'Contents'}; + $Texi2HTML::HREF{'Contents'} = "#SEC_Contents"; + $Texi2HTML::NAME{'This'} = $Texi2HTML::NAME{'Contents'}; + $Texi2HTML::NO_TEXI{'This'} = $Texi2HTML::NO_TEXI{'Contents'}; + $Texi2HTML::SIMPLE_TEXT{'This'} = $Texi2HTML::SIMPLE_TEXT{'Contents'}; + $Texi2HTML::THIS_SECTION = $Texi2HTML::TOC_LINES; + $Texi2HTML::THIS_HEADER = [ &$Texi2HTML::Config::anchor("SEC_Contents") . "\n" ]; + &$Texi2HTML::Config::print_Toc($FH); + close_out($FH, $docu_toc_file) + if ($Texi2HTML::Config::SPLIT); + $Texi2HTML::HREF{'Contents'} = $Texi2HTML::HREF{'This'}; + } + + if (@{$Texi2HTML::OVERVIEW} and !$Texi2HTML::Config::INLINE_CONTENTS) + { + print STDERR "# writing Overview in $docu_stoc_file\n" if $T2H_VERBOSE; + $FH = open_out ($docu_stoc_file) + if $Texi2HTML::Config::SPLIT; + $Texi2HTML::HREF{This} = $Texi2HTML::HREF{Overview}; + $Texi2HTML::HREF{Overview} = "#SEC_Overview"; + $Texi2HTML::NAME{This} = $Texi2HTML::NAME{Overview}; + $Texi2HTML::NO_TEXI{This} = $Texi2HTML::NO_TEXI{Overview}; + $Texi2HTML::SIMPLE_TEXT{This} = $Texi2HTML::SIMPLE_TEXT{Overview}; + $Texi2HTML::THIS_SECTION = $Texi2HTML::OVERVIEW; + $Texi2HTML::THIS_HEADER = [ &$Texi2HTML::Config::anchor("SEC_Overview") . "\n" ]; + &$Texi2HTML::Config::print_Overview($FH); + close_out($FH,$docu_stoc_file) + if ($Texi2HTML::Config::SPLIT); + $Texi2HTML::HREF{Overview} = $Texi2HTML::HREF{This}; + } + my $about_body; + if ($about_body = &$Texi2HTML::Config::about_body()) + { + print STDERR "# writing About in $docu_about_file\n" if $T2H_VERBOSE; + $FH = open_out ($docu_about_file) + if $Texi2HTML::Config::SPLIT; + + $Texi2HTML::HREF{This} = $Texi2HTML::HREF{About}; + $Texi2HTML::HREF{About} = "#SEC_About"; + $Texi2HTML::NAME{This} = $Texi2HTML::NAME{About}; + $Texi2HTML::NO_TEXI{This} = $Texi2HTML::NO_TEXI{About}; + $Texi2HTML::SIMPLE_TEXT{This} = $Texi2HTML::SIMPLE_TEXT{About}; + $Texi2HTML::THIS_SECTION = [$about_body]; + $Texi2HTML::THIS_HEADER = [ &$Texi2HTML::Config::anchor("SEC_About") . "\n" ]; + &$Texi2HTML::Config::print_About($FH); + close_out($FH, $docu_stoc_file) + if ($Texi2HTML::Config::SPLIT); + $Texi2HTML::HREF{About} = $Texi2HTML::HREF{This}; + } + + unless ($Texi2HTML::Config::SPLIT) + { + &$Texi2HTML::Config::print_page_foot($FH); + close_out ($FH); + } +} + +# print section, close file if needed. +sub finish_element($$$$) +{ + my $FH = shift; + my $element = shift; + my $new_element = shift; + my $first_section = shift; +#print STDERR "FINISH_ELEMENT($FH)($element->{'texi'})[$element->{'file'}] counter $files{$element->{'file'}}->{'counter'}\n"; + + # handle foot notes + if ($Texi2HTML::Config::SPLIT and scalar(@foot_lines) + and !$Texi2HTML::Config::SEPARATED_FOOTNOTES + and (! $new_element or + ($element and ($new_element->{'file'} ne $element->{'file'}))) + ) + { + if ($files{$element->{'file'}}->{'counter'}) + {# there are other elements in that page we are not on its foot + $files{$element->{'file'}}->{'relative_foot_num'} + = $relative_foot_num; + push @{$files{$element->{'file'}}->{'foot_lines'}}, + @foot_lines; + } + else + {# we output the footnotes as we are at the file end + unshift @foot_lines, @{$files{$element->{'file'}}->{'foot_lines'}}; + &$Texi2HTML::Config::foot_section (\@foot_lines); + push @{$Texi2HTML::THIS_SECTION}, @foot_lines; + } + if ($new_element) + { + $relative_foot_num = + $files{$new_element->{'file'}}->{'relative_foot_num'}; + } + @foot_lines = (); + } + if ($element->{'top'}) + { + my $top_file = $docu_top_file; + #print STDERR "TOP $element->{'texi'}, @section_lines\n"; + print STDERR "[Top]" if ($T2H_VERBOSE); + $Texi2HTML::HREF{'Top'} = href($element_top, $element->{'file'}); + &$Texi2HTML::Config::print_Top($FH, ($element->{'titlefont'} or $element->{'index_page'})); + my $end_page = 0; + if ($Texi2HTML::Config::SPLIT) + { + if (!$files{$element->{'file'}}->{'counter'}) + { + $end_page = 1; + } + } + &$Texi2HTML::Config::print_Top_footer($FH, $end_page); + close_out($FH, $top_file) if ($end_page); + } + else + { + print STDERR "# do element $element->{'texi'}\n" + if ($T2H_DEBUG & $DEBUG_ELEMENTS); + &$Texi2HTML::Config::print_section($FH, $first_section); + if (defined($new_element) and ($new_element->{'file'} ne $element->{'file'})) + { + if (!$files{$element->{'file'}}->{'counter'}) + { + &$Texi2HTML::Config::print_chapter_footer($FH) if ($Texi2HTML::Config::SPLIT eq 'chapter'); + &$Texi2HTML::Config::print_section_footer($FH) if ($Texi2HTML::Config::SPLIT eq 'section'); + #print STDERR "Close file after $element->{'texi'}\n"; + &$Texi2HTML::Config::print_page_foot($FH); + close_out($FH); + } + else + { + print STDERR "counter $files{$element->{'file'}}->{'counter'} ne 0, file $element->{'file'}\n" if ($T2H_DEBUG); + } + } + elsif (!defined($new_element)) + { + if ($Texi2HTML::Config::SPLIT) + { # end of last splitted section + &$Texi2HTML::Config::print_chapter_footer($FH) if ($Texi2HTML::Config::SPLIT eq 'chapter'); + &$Texi2HTML::Config::print_section_footer($FH) if ($Texi2HTML::Config::SPLIT eq 'section'); + &$Texi2HTML::Config::print_page_foot($FH); + close_out($FH); + } + else + { + &$Texi2HTML::Config::end_section($FH, 1); + } + } + elsif ($new_element->{'top'}) + { + &$Texi2HTML::Config::end_section($FH, 1); + } + else + { + &$Texi2HTML::Config::end_section($FH); + } + } +} + +# write to files with name the node name for cross manual references. +sub do_node_files() +{ + foreach my $key (keys(%nodes)) + { + my $node = $nodes{$key}; + next unless ($node->{'node_file'}); + my $redirection_file = $docu_doc; + $redirection_file = $node->{'file'} if ($Texi2HTML::Config::SPLIT); + if (!$redirection_file) + { + print STDERR "Bug: file for redirection for `$node->{'texi'}' don't exist\n" unless ($novalidate); + next; + } + next if ($redirection_file eq $node->{'node_file'}); + my $file = "${docu_rdir}$node->{'node_file'}"; + $Texi2HTML::NODE{'This'} = $node->{'text'}; + $Texi2HTML::NO_TEXI{'This'} = $node->{'no_texi'}; + $Texi2HTML::SIMPLE_TEXT{'This'} = $node->{'simple_format'}; + $Texi2HTML::NAME{'This'} = $node->{'text'}; + $Texi2HTML::HREF{'This'} = "$node->{'file'}#$node->{'id'}"; + my $NODEFILE = open_out ($file); + &$Texi2HTML::Config::print_redirection_page ($NODEFILE); + close $NODEFILE || die "$ERROR: Can't close $file: $!\n"; + } +} + +#+++############################################################################ +# # +# Low level functions # +# # +#---############################################################################ + +sub locate_include_file($) +{ + my $file = shift; + + # APA: Don't implicitely search ., to conform with the docs! + # return $file if (-e $file && -r $file); + foreach my $dir (@Texi2HTML::Config::INCLUDE_DIRS) + { + return "$dir/$file" if (-e "$dir/$file" && -r "$dir/$file"); + } + return undef; +} + +sub open_file($$) +{ + my $name = shift; + my $line_number = shift; + local *FH; + if (open(*FH, "<$name")) + { + if (defined($Texi2HTML::Config::IN_ENCODING) and $Texi2HTML::Config::USE_UNICODE) + { + binmode(*FH, ":encoding($Texi2HTML::Config::IN_ENCODING)"); + } + my $file = { 'fh' => *FH, + 'input_spool' => { 'spool' => [], + 'macro' => '' }, + 'name' => $name, + 'line_nr' => 0 }; + unshift(@fhs, $file); + $input_spool = $file->{'input_spool'}; + $line_number->{'file_name'} = $name; + $line_number->{'line_nr'} = 1; + } + else + { + warn "$ERROR Can't read file $name: $!\n"; + } +} + +sub open_out($) +{ + my $file = shift; + local *FILE; + if ($file eq '-') + { + binmode(STDOUT, ":encoding($to_encoding)") if (defined($to_encoding) and $Texi2HTML::Config::USE_UNICODE); + return \*STDOUT; + } + + unless (open(FILE, ">$file")) + { + die "$ERROR Can't open $file for writing: $!\n"; + } + if (defined($to_encoding) and $Texi2HTML::Config::USE_UNICODE) + { + if ($to_encoding eq 'utf8' or $to_encoding eq 'utf-8-strict') + { + binmode(FILE, ':utf8'); + } + else + { + binmode(FILE, ':bytes'); + } + binmode(FILE, ":encoding($to_encoding)"); + } + return *FILE; +} + +# FIXME not used when split +sub close_out($;$) +{ + my $FH = shift; + my $file = shift; + $file = '' if (!defined($file)); + return if ($Texi2HTML::Config::OUT eq ''); + close ($FH) || die "$ERROR: Error occurred when closing $file: $!\n"; +} + +sub next_line($) +{ + my $line_number = shift; + while (@fhs) + { + my $file = $fhs[0]; + $line_number->{'file_name'} = $file->{'name'}; + $input_spool = $file->{'input_spool'}; + if (@{$input_spool->{'spool'}}) + { + $line_number->{'macro'} = $file->{'input_spool'}->{'macro'}; + $line_number->{'line_nr'} = $file->{'line_nr'}; + my $line = shift(@{$input_spool->{'spool'}}); + print STDERR "# unspooling $line" if ($T2H_DEBUG & $DEBUG_MACROS); + return($line); + } + else + { + $file->{'input_spool'}->{'macro'} = ''; + $line_number->{'macro'} = ''; + } + my $fh = $file->{'fh'}; + no strict "refs"; + my $line = <$fh>; + use strict "refs"; + my $chomped_line = $line; + $file->{'line_nr'}++ if (defined($line) and chomp($chomped_line)); + $line_number->{'line_nr'} = $file->{'line_nr'}; + return($line) if (defined($line)); + no strict "refs"; + close($fh); + use strict "refs"; + shift(@fhs); + } + return(undef); +} + +# echo a warning +sub echo_warn($;$) +{ + my $text = shift; + chomp ($text); + my $line_number = shift; + warn "$WARN $text " . format_line_number($line_number) . "\n"; +} + +sub echo_error($;$) +{ + my $text = shift; + chomp ($text); + my $line_number = shift; + warn "$ERROR $text " . format_line_number($line_number) . "\n"; +} + +sub format_line_number($) +{ + my $line_number = shift; + my $macro_text = ''; + #$line_number = undef; + return '' unless (defined($line_number)); + $macro_text = " in $line_number->{'macro'}" if ($line_number->{'macro'} ne ''); + my $file_text = '('; + $file_text = "(in $line_number->{'file_name'} " if ($line_number->{'file_name'} ne $docu); + return "${file_text}l. $line_number->{'line_nr'}" . $macro_text . ')'; +} + +# to debug, dump the result of pass_texi and pass_structure in a file +sub dump_texi($$;$$) +{ + my $lines = shift; + my $pass = shift; + my $numbers = shift; + my $file = shift; + $file = "$docu_rdir$docu_name" . ".pass$pass" if (!defined($file)); + unless (open(DMPTEXI, ">$file")) + { + warn "Can't open $file for writing: $!\n"; + } + print STDERR "# Dump texi\n" if ($T2H_VERBOSE); + my $index = 0; + foreach my $line (@$lines) + { + my $number_information = ''; + my $chomped_line = $line; + $number_information = "$numbers->[$index]->{'file_name'}($numbers->[$index]->{'macro'},$numbers->[$index]->{'line_nr'}) " if (defined($numbers)); + print DMPTEXI "${number_information}$line"; + $index++ if (chomp($chomped_line)); + } + close DMPTEXI; +} + +# return next tag on the line +sub next_tag($) +{ + my $line = shift; + # macro_regexp + if ($line =~ /^\s*\@(["'~\@\}\{,\.!\?\s\*\-\^`=:\|\/])/o or $line =~ /^\s*\@([a-zA-Z][\w-]*)([\s\{\}\@])/ or $line =~ /^\s*\@([a-zA-Z][\w-]*)$/) + { + return ($1); + } + return ''; +} + +sub top_stack($) +{ + my $stack = shift; + return undef unless(@$stack); + return $stack->[-1]; +} + +# return the next element with balanced {} +sub next_bracketed($$) +{ + my $line = shift; + my $line_nr = shift; + my $opened_braces = 0; + my $result = ''; + my $spaces; + if ($line =~ /^(\s*)$/) + { + return ('','',$1); + } + while ($line !~ /^\s*$/) + { +#print STDERR "next_bracketed($opened_braces): $result !!! $line"; + if (!$opened_braces) + { # beginning of item + $line =~ s/^(\s*)//; + $spaces = $1; + #if ($line =~ s/^([^\{\}\s]+)//) + if ($line =~ s/^([^\{\}]+?)(\s+)/$2/ or $line =~ s/^([^\{\}]+?)$//) + { + $result = $1; + $result =~ s/\s*$//; + return ($result, $line, $spaces); + } + elsif ($line =~ s/^([^\{\}]+?)([\{\}])/$2/) + { + $result = $1; + } + } + elsif($line =~ s/^([^\{\}]+)//) + { + $result .= $1; + } + if ($line =~ s/^([\{\}])//) + { + my $brace = $1; + $opened_braces++ if ($brace eq '{'); + $opened_braces-- if ($brace eq '}'); + + if ($opened_braces < 0) + { + echo_error("too much '}' in specification", $line_nr); + $opened_braces = 0; + next; + } + $result .= $brace; + return ($result, $line, $spaces) if ($opened_braces == 0); + } + } + if ($opened_braces) + { + echo_error("'{' not closed in specification", $line_nr); + return ($result . ( '}' x $opened_braces), '', $spaces); + } + print STDERR "BUG: at the end of next_bracketed\n"; + return undef; +} + +# do a href using file and id and taking care of ommitting file if it is +# the same +# element: structuring element to point to +# file: current file +sub href($$) +{ + my $element = shift; + my $file = shift; + return '' unless defined($element); + my $href = ''; + print STDERR "Bug: $element->{'texi'}, id undef\n" if (!defined($element->{'id'})); + print STDERR "Bug: $element->{'texi'}, file undef\n" if (!defined($element->{'file'})); +#foreach my $key (keys(%{$element})) +#{ +# my $value = 'UNDEF'; $value = $element->{$key} if defined($element->{$key}); +# print STDERR "$key: $value\n"; +#}print STDERR "\n"; + $href .= $element->{'file'} if (defined($element->{'file'}) and $file ne $element->{'file'}); + $href .= "#$element->{'id'}" if (defined($element->{'id'})); + return $href; +} + +sub normalise_space($) +{ + return undef unless (defined ($_[0])); + my $text = shift; + $text =~ s/\s+/ /go; + $text =~ s/ $//; + $text =~ s/^ //; + return $text; +} + +sub normalise_node($) +{ + return undef unless (defined ($_[0])); + my $text = shift; + $text = normalise_space($text); + $text =~ s/^top$/Top/i; + return $text; +} + +sub do_anchor_label($$$$) +{ + my $command = shift; + #my $anchor = shift; + my $args = shift; + my $anchor = $args->[0]; + my $style_stack = shift; + my $state = shift; + my $line_nr = shift; + + return '' if ($state->{'multiple_pass'}); + $anchor = normalise_node($anchor); + if (!exists($nodes{$anchor}) or !defined($nodes{$anchor}->{'id'})) + { + print STDERR "Bug: unknown anchor `$anchor'\n"; + } + return &$Texi2HTML::Config::anchor($nodes{$anchor}->{'id'}); +} + +sub get_format_command($) +{ + my $format = shift; + my $command = ''; + my $format_name = ''; + my $term = 0; + my $item_nr; + my $paragraph_number; + my $enumerate_type; + my $number; + + $command = $format->{'command'} if (defined($format->{'command'})); + $format_name = $format->{'format'} if (defined($format->{'format'})); + $term = 1 if ($format->{'term'}); #This should never happen + + return ($format_name,$command,\$format->{'paragraph_number'},$term, + $format->{'item_nr'}, $format->{'spec'}, $format->{'number'}, + $format->{'stack_at_beginning'}); +} + +sub do_paragraph($$) +{ + my $text = shift; + my $state = shift; + my ($format, $paragraph_command, $paragraph_number, $term, $item_nr, + $enumerate_type, $number,$stack_at_beginning) + = get_format_command ($state->{'paragraph_context'}); + delete $state->{'paragraph_context'}; + + my $indent_style = ''; + if (exists($state->{'paragraph_indent'})) + { + $indent_style = $state->{'paragraph_indent'}; + $state->{'paragraph_indent'} = undef; + delete $state->{'paragraph_indent'}; + } + my $paragraph_command_formatted; + $state->{'paragraph_nr'}--; + (print STDERR "Bug text undef in do_paragraph", return '') unless defined($text); + my $align = ''; + $align = $state->{'paragraph_style'}->[-1] if ($state->{'paragraph_style'}->[-1]); + + if (exists($::style_map_ref->{$paragraph_command}) and + !exists($Texi2HTML::Config::special_list_commands{$format}->{$paragraph_command})) + { + if ($format eq 'itemize') + { + chomp ($text); + $text = do_simple($paragraph_command, $text, $state, [$text]); + $text = $text . "\n"; + } + } + elsif (exists($::things_map_ref->{$paragraph_command})) + { + $paragraph_command_formatted = do_simple($paragraph_command, '', $state); + } + return &$Texi2HTML::Config::paragraph($text, $align, $indent_style, $paragraph_command, $paragraph_command_formatted, $paragraph_number, $format, $item_nr, $enumerate_type, $number,$state->{'command_stack'},$stack_at_beginning); +} + +sub do_preformatted($$) +{ + my $text = shift; + my $state = shift; + my ($format, $leading_command, $preformatted_number, $term, $item_nr, + $enumerate_type, $number,$stack_at_beginning) + = get_format_command($state->{'preformatted_context'}); + delete ($state->{'preformatted_context'}); + my $leading_command_formatted; + my $pre_style = ''; + my $class = ''; + $pre_style = $state->{'preformatted_stack'}->[-1]->{'pre_style'} if ($state->{'preformatted_stack'}->[-1]->{'pre_style'}); + $class = $state->{'preformatted_stack'}->[-1]->{'class'}; + print STDERR "BUG: !state->{'preformatted_stack'}->[-1]->{'class'}\n" unless ($class); + if (exists($::style_map_ref->{$leading_command}) and + !exists($Texi2HTML::Config::special_list_commands{$format}->{$leading_command}) and ($style_type{$leading_command} eq 'style')) + { + $text = do_simple($leading_command, $text, $state,[$text]) if ($format eq 'itemize'); + } + elsif (exists($::things_map_ref->{$leading_command})) + { + $leading_command_formatted = do_simple($leading_command, '', $state); + } + return &$Texi2HTML::Config::preformatted($text, $pre_style, $class, $leading_command, $leading_command_formatted, $preformatted_number, $format, $item_nr, $enumerate_type, $number,$state->{'command_stack'},$stack_at_beginning); +} + +sub do_external_href($) +{ + # node_id is a unique node identifier with only letters, digits, - and _ + # node_xhtml_id is almost the same, but xhtml id can only begin with + # letters, so a prefix has to be appended + my $texi_node = shift; + my $file = ''; + my $node_file = ''; + my $node_id = ''; + my $node_xhtml_id = ''; + +#print STDERR "do_external_href $texi_node\n"; + + if ($texi_node =~ s/^\((.+?)\)//) + { + $file = $1; + } + $texi_node = normalise_node($texi_node); + if ($texi_node ne '') + { + if (exists($nodes{$texi_node}) and ($nodes{$texi_node}->{'cross_manual_target'})) + { + $node_id = $nodes{$texi_node}->{'cross_manual_target'}; + if ($Texi2HTML::Config::TRANSLITERATE_NODE) + { + $node_file = $nodes{$texi_node}->{'cross_manual_file'}; + } + } + else + { + if ($Texi2HTML::Config::TRANSLITERATE_NODE) + { + ($node_id, $node_file) = cross_manual_line($texi_node,1); + } + else + { + $node_id = cross_manual_line($texi_node); + } + } + $node_xhtml_id = node_to_id($node_id); + $node_file = $node_id unless ($Texi2HTML::Config::TRANSLITERATE_NODE); + } + return &$Texi2HTML::Config::external_href($texi_node, $node_file, + $node_xhtml_id, $file); +} + +# transform node for cross ref name to id suitable for xhtml: an xhtml id +# must begin with a letter. +sub node_to_id($) +{ + my $cross_ref_node_name = shift; + $cross_ref_node_name =~ s/^([0-9_])/g_t$1/; + return $cross_ref_node_name; +} + +# return 1 if the following tag shouldn't begin a line +sub no_line($) +{ + my $line = shift; + my $next_tag = next_tag($line); + return 1 if (($line =~ /^\s*$/) or $no_line_macros{$next_tag} or + (($next_tag =~ /^(\w+?)index$/) and ($1 ne 'print')) or + (($line =~ /^\@end\s+(\w+)/) and $no_line_macros{"end $1"})); + return 0; +} + +sub no_paragraph($$) +{ + my $state = shift; + my $line = shift; + return ($state->{'paragraph_context'} or $state->{'preformatted'} or $state->{'remove_texi'} or no_line($line) or $state->{'no_paragraph'}); +} + +# We restart the preformatted format which was stopped +# by the format if in preformatted, and start a paragraph +# for the text following the end of the format, if needed +sub begin_paragraph_after_command($$$$) +{ + my $state = shift; + my $stack = shift; + my $command = shift; + my $text_following = shift; + + if (($state->{'preformatted'} + and !$Texi2HTML::Config::format_in_paragraph{$command}) + or (!no_paragraph($state,$text_following))) + { + begin_paragraph($stack, $state); + } +} + +# handle raw formatting, ignored regions... +sub do_text_macro($$$$$) +{ + my $type = shift; + my $line = shift; + my $state = shift; + my $stack = shift; + my $line_nr = shift; + my $value; + #print STDERR "do_text_macro $type\n"; + + if ($text_macros{$type} eq 'raw') + { + $state->{'raw'} = $type; + #print STDERR "RAW\n"; + if ($state->{'raw'}) + { + push @$stack, { 'style' => $type, 'text' => '' }; + } + } + elsif ($text_macros{$type} eq 'value') + { + if (($line =~ s/(\s+)($VARRE)$//) or ($line =~ s/(\s+)($VARRE)(\s)//)) + { + $value = $1 . $2; + $value .= $3 if defined($3); + if ($state->{'ignored'}) + { + if ($type eq $state->{'ignored'}) + { + $state->{'ifvalue_inside'}++; + } + # if 'ignored' we don't care about the command as long as + # the nesting is correct + return ($line,''); + } + my $open_ifvalue = 0; + if ($type eq 'ifclear') + { + if (defined($value{$2})) + { + $open_ifvalue = 1; + } + else + { + push @{$state->{'text_macro_stack'}}, $type; + } + } + elsif ($type eq 'ifset') + { + unless (defined($value{$2})) + { + $open_ifvalue = 1; + } + else + { + push @{$state->{'text_macro_stack'}}, $type; + } + } + if ($open_ifvalue) + { + $state->{'ignored'} = $type; + $state->{'ifvalue'} = $type; + $state->{'ifvalue_inside'} = 1; + # We add at the top of the stack to be able to close all + # opened comands when closing the ifset/ifclear (and ignore + # everything that is in those commands) + push @$stack, { 'style' => 'ifvalue', 'text' => '' }; + } + + } + else + { # we accept a lone @ifset or @ifclear if it is inside an + if ($type eq $state->{'ifvalue'}) + { + $state->{'ifvalue_inside'}++; + return ($line,''); + } + echo_error ("Bad $type line: $line", $line_nr) unless ($state->{'ignored'}); + } + } + elsif (not $text_macros{$type}) + { # ignored text + $state->{'ignored'} = $type; + #print STDERR "IGNORED\n"; + } + else + { + push @{$state->{'text_macro_stack'}}, $type unless($state->{'ignored'}) ; + } + my $text = "\@$type"; + $text .= $value if defined($value); + return ($line, $text); +} + +# do regions handled specially, currently only tex, going through latex2html +sub init_special($$) +{ + my $style = shift; + my $text = shift; + if (defined($Texi2HTML::Config::command_handler{$style}) and + defined($Texi2HTML::Config::command_handler{$style}->{'init'})) + { + $special_commands{$style}->{'count'} = 0 if (!defined($special_commands{$style})); + if ($Texi2HTML::Config::command_handler{$style}->{'init'}($style,$text, + $special_commands{$style}->{'count'} +1)) + { + $special_commands{$style}->{'count'}++; + return "\@special_${style}_".$special_commands{$style}->{'count'}."{}"; + } + return ''; + } +} + +sub do_insertcopying($) +{ + my $state = shift; + return '' unless @{$region_lines{'copying'}}; + my $insert_copying_state = duplicate_state($state); + $insert_copying_state->{'multiple_pass'} = 1; + return substitute_text($insert_copying_state, @{$region_lines{'copying'}}); +} + +sub get_deff_index($$$) +{ + my $tag = shift; + my $line = shift; + my $line_nr = shift; + + $tag =~ s/x$//; + my ($style, $category, $name, $type, $class, $arguments); + ($style, $category, $name, $type, $class, $arguments) = parse_def($tag, $line, $line_nr); + $name = &$Texi2HTML::Config::definition_category($name, $class, $style); + return ($style, '') if (!defined($name) or ($name =~ /^\s*$/)); + return ($style, $name, $arguments); +} + +sub parse_def($$$) +{ + my $command = shift; + my $line = shift; + my $line_nr = shift; + + my $tag = $command; + + if (!ref ($Texi2HTML::Config::def_map{$tag})) + { + # substitute shortcuts for definition commands + my $substituted = $Texi2HTML::Config::def_map{$tag}; + $substituted =~ s/(\w+)//; + $tag = $1; + $line = $substituted . $line; + } +#print STDERR "PARSE_DEF($command,$tag) $line"; + my ($category, $name, $type, $class, $arguments); + my @args = @{$Texi2HTML::Config::def_map{$tag}}; + my $style = shift @args; + while (@args) + { + my $arg = shift @args; + if (defined($arg)) + { + # backward compatibility, it was possible to have a { in front. + $arg =~ s/^\{//; + my $item; + my $spaces; + ($item, $line,$spaces) = next_bracketed($line, $line_nr); + last if (!defined($item)); + $item =~ s/^\{(.*)\}$/$1/ if ($item =~ /^\{/); + if ($arg eq 'category') + { + $category = $item; + } + elsif ($arg eq 'name') + { + $name = $item; + } + elsif ($arg eq 'type') + { + $type = $item; + } + elsif ($arg eq 'class') + { + $class = $item; + } + elsif ($arg eq 'arg') + { + $line = $spaces . $item . $line; + } + } + else + { + last; + } + } +#print STDERR "PARSE_DEF (style $style, category $category, name $name, type $type, class $class, line $line)\n"; + return ($style, $category, $name, $type, $class, $line); +} + +sub begin_deff_item($$;$) +{ + my $stack = shift; + my $state = shift; + my $no_paragraph = shift; + #print STDERR "DEF push deff_item for $state->{'deff'}\n"; + push @$stack, { 'format' => 'deff_item', 'text' => '', 'deff_line' => $state->{'deff_line'}}; + # there is no paragraph when a new deff just follows the deff we are + # opening + begin_paragraph($stack, $state) + if ($state->{'preformatted'} and !$no_paragraph); + delete($state->{'deff_line'}); + #dump_stack(undef, $stack, $state); +} + +sub begin_paragraph($$) +{ + my $stack = shift; + my $state = shift; + + my $command = 1; + my $top_format = top_format($stack); + if (defined($top_format)) + { + $command = $top_format; + } + else + { + $command = { }; + } + $command->{'stack_at_beginning'} = [ @{$state->{'command_stack'}} ]; + if ($state->{'preformatted'}) + { + push @$stack, {'format' => 'preformatted', 'text' => '' }; + $state->{'preformatted_context'} = $command; + push @$stack, @{$state->{'paragraph_macros'}} if $state->{'paragraph_macros'}; + delete $state->{'paragraph_macros'}; + return; + } + $state->{'paragraph_context'} = $command; + $state->{'paragraph_nr'}++; + push @$stack, {'format' => 'paragraph', 'text' => '' }; + # if there are macros which weren't closed when the previous + # paragraph was closed we reopen them here + push @$stack, @{$state->{'paragraph_macros'}} if $state->{'paragraph_macros'}; + delete $state->{'paragraph_macros'}; +} + +sub parse_format_command($$) +{ + my $line = shift; + my $tag = shift; + my $command = 'asis'; + # macro_regexp + if (($line =~ /^\s*\@([A-Za-z][\w-]*)(\{\})?$/ or $line =~ /^\s*\@([A-Za-z][\w-]*)(\{\})?\s/) and ($::things_map_ref->{$1} or defined($::style_map_ref->{$1}))) + { + # macro_regexp + $line =~ s/^\s*\@([A-Za-z][\w-]*)(\{\})?\s*//; + $command = $1; + } + return ('', $command) if ($line =~ /^\s*$/); + chomp $line; + $line = substitute_text ({'keep_nr' => 1, 'keep_texi' => 1, 'check_item' => $tag}, $line); + return ($line, $command); +} + +sub parse_enumerate($) +{ + my $line = shift; + my $spec; + if ($line =~ /^\s*(\w)\b/ and ($1 ne '_')) + { + $spec = $1; + $line =~ s/^\s*(\w)\s*//; + } + return ($line, $spec); +} + +sub parse_multitable($$) +{ + my $line = shift; + my $line_nr = shift; + # first find the table width + my $table_width = 0; + if ($line =~ s/^\s+\@columnfractions\s+//) + { + my @fractions = split /\s+/, $line; + $table_width = $#fractions + 1; + while (@fractions) + { + my $fraction = shift @fractions; + unless ($fraction =~ /^(\d*\.\d+)|(\d+)\.?$/) + { + echo_error ("column fraction not a number: $fraction", $line_nr); + #warn "$ERROR column fraction not a number: $fraction"; + } + } + } + else + { + my $element; + my $line_orig = $line; + while ($line !~ /^\s*$/) + { + my $spaces; + ($element, $line, $spaces) = next_bracketed($line, $line_nr); + if ($element =~ /^\{/) + { + $table_width++; + } + else + { + echo_error ("garbage in multitable specification: $element", $line_nr); + } + } + } + return ($table_width); +} + +sub end_format($$$$$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + my $format = shift; + my $line_nr = shift; + #print STDERR "END FORMAT $format\n"; + #dump_stack($text, $stack, $state); + #sleep 1; + if ($format_type{$format} eq 'menu') + { + $state->{'menu'}--; + close_menu($text, $stack, $state, $line_nr); + } + if (($format_type{$format} eq 'list') or ($format_type{$format} eq 'table')) + { # those functions return if they detect an inapropriate context + add_item($text, $stack, $state, $line_nr, '', 1); # handle lists + add_term($text, $stack, $state, $line_nr, 1); # handle table + add_line($text, $stack, $state, $line_nr, 1); # handle table + add_row($text, $stack, $state, $line_nr); # handle multitable + } + + #print STDERR "END_FORMAT\n"; + #dump_stack($text, $stack, $state); + + # set to 1 if there is a mismatch between the closed format and format + # opened before + my $format_mismatch = 0; + + my $format_ref = pop @$stack; + + ######################### debug + if (!defined($format_ref->{'text'})) + { + push @$stack, $format_ref; + print STDERR "Bug: text undef in end_format $format\n"; + dump_stack($text, $stack, $state); + pop @$stack; + } + ######################### end debug + + if (defined($Texi2HTML::Config::def_map{$format})) + { + close_stack($text, $stack, $state, $line_nr, undef, 'deff_item') + unless ($format_ref->{'format'} eq 'deff_item'); + add_prev($text, $stack, &$Texi2HTML::Config::def_item($format_ref->{'text'})); + $format_ref = pop @$stack; # pop deff + ######################################### debug + if (!defined($format_ref->{'format'}) or !defined($Texi2HTML::Config::def_map{$format_ref->{'format'}})) + { + print STDERR "Bug: not a def* under deff_item\n"; + push (@$stack, $format_ref); + dump_stack($text, $stack, $state); + pop @$stack; + } + ######################################### end debug + elsif ($format_ref->{'format'} ne $format) + { + $format_mismatch = 1; + echo_warn ("Waiting for \@end $format_ref->{'format'}, found \@end $format", $line_nr); + } + add_prev($text, $stack, &$Texi2HTML::Config::def($format_ref->{'text'})); + } + elsif ($format_type{$format} eq 'cartouche') + { + add_prev($text, $stack, &$Texi2HTML::Config::cartouche($format_ref->{'text'},$state->{'command_stack'})); + } + elsif ($format eq 'float') + { + unless (defined($state->{'float'})) + { + print STDERR "Bug: state->{'float'} not defined in float\n"; + next; + } + my ($caption_lines, $shortcaption_lines) = &$Texi2HTML::Config::caption_shortcaption($state->{'float'}); + my ($caption_text, $shortcaption_text); + $caption_text = substitute_text(duplicate_state($state), @$caption_lines) if (defined($caption_lines)); + $shortcaption_text = substitute_text(duplicate_state($state), @$shortcaption_lines) if (defined($shortcaption_lines)); + add_prev($text, $stack, &$Texi2HTML::Config::float($format_ref->{'text'}, $state->{'float'}, $caption_text, $shortcaption_text)); + delete $state->{'float'}; + } + elsif (exists ($Texi2HTML::Config::complex_format_map->{$format})) + { + $state->{'preformatted'}--; + pop @{$state->{'preformatted_stack'}}; + # debug + if (!defined($Texi2HTML::Config::complex_format_map->{$format_ref->{'format'}}->{'begin'})) + { + print STDERR "Bug undef $format_ref->{'format'}" . "->{'begin'} (for $format...)\n"; + dump_stack ($text, $stack, $state); + } + #print STDERR "before $format\n"; + #dump_stack ($text, $stack, $state); + add_prev($text, $stack, &$Texi2HTML::Config::complex_format($format_ref->{'format'}, $format_ref->{'text'})); + #print STDERR "after $format\n"; + #dump_stack ($text, $stack, $state); + } + elsif (($format_type{$format} eq 'table') or ($format_type{$format} eq 'list')) + { + #print STDERR "CLOSE $format ($format_ref->{'format'})\n$format_ref->{'text'}\n"; + pop @{$state->{'table_list_stack'}}; + #dump_stack($text, $stack, $state); + if ($format_ref->{'format'} ne $format) + { # for example vtable closing a table. Cannot be known + # before if in a cell + $format_mismatch = 1; + echo_warn ("Waiting for \@end $format_ref->{'format'}, found \@end $format ", $line_nr); + } + if ($Texi2HTML::Config::format_map{$format}) + { # table or list has a simple format + add_prev($text, $stack, end_simple_format($format_ref->{'format'}, $format_ref->{'text'})); + } + else + { # table or list handler defined by the user + add_prev($text, $stack, &$Texi2HTML::Config::table_list($format_ref->{'format'}, $format_ref->{'text'}, $format_ref->{'command'})); + } + } + elsif ($format_type{$format} eq 'menu') + { + # it should be short-circuited if $Texi2HTML::Config::SIMPLE_MENU + if ($state->{'preformatted'}) + { + # end the fake complex format + $state->{'preformatted'}--; + pop @{$state->{'preformatted_stack'}}; + pop @$stack; + } + add_prev($text, $stack, &$Texi2HTML::Config::menu($format_ref->{'text'})); + } + elsif ($format eq 'quotation') + { + my $quotation_args = pop @{$state->{'quotation_stack'}}; + #add_prev($text, $stack, &$Texi2HTML::Config::quotation($format_ref->{'text'}, $quotation_args->{'text'}, $quotation_args->{'style_texi'}, $quotation_args->{'style_id'})); + add_prev($text, $stack, &$Texi2HTML::Config::quotation($format_ref->{'text'}, $quotation_args->{'text'}, $quotation_args->{'text_texi'})); + } + elsif ($Texi2HTML::Config::paragraph_style{$format}) + { + if ($state->{'paragraph_style'}->[-1] eq $format) + { + pop @{$state->{'paragraph_style'}}; + } + add_prev($text, $stack, &$Texi2HTML::Config::paragraph_style_command($format_ref->{'format'},$format_ref->{'text'})); + } + elsif (exists($Texi2HTML::Config::format_map{$format})) + { + add_prev($text, $stack, end_simple_format($format_ref->{'format'}, $format_ref->{'text'})); + } + else + { + echo_warn("Unknown format $format", $line_nr); + } + # special case for center as it is at the bottom of the stack + my $removed_from_stack; + if ($format eq 'center') + { + $removed_from_stack = shift @{$state->{'command_stack'}}; + } + else + { + $removed_from_stack = pop @{$state->{'command_stack'}}; + } + if ($removed_from_stack ne $format and !$format_mismatch) + { + print STDERR "Bug: removed_from_stack $removed_from_stack ne format $format\n"; + } +} + +sub do_text($;$) +{ + my $text = shift; + my $state = shift; + return $text if ($state->{'keep_texi'}); + my $remove_texi = 1 if ($state->{'remove_texi'} and !$state->{'simple_format'}); + return (&$Texi2HTML::Config::normal_text($text, $remove_texi, $state->{'preformatted'}, $state->{'code_style'},$state->{'command_stack'})); +} + +sub end_simple_format($$) +{ + my $tag = shift; + my $text = shift; + + my $element = $Texi2HTML::Config::format_map{$tag}; + return &$Texi2HTML::Config::format($tag, $element, $text); +} + +sub close_menu($$$$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + if ($state->{'menu_comment'}) + { + #print STDERR "close MENU_COMMENT\n"; + #dump_stack($text, $stack, $state); + close_stack($text, $stack, $state, $line_nr, undef, 'menu_comment'); + # close_paragraph isn't needed in most cases, but a preformatted may + # appear after close_stack if we closed a format, as formats reopen + # preformatted. However it is empty and close_paragraph will remove it + close_paragraph($text, $stack, $state); + my $menu_comment = pop @$stack; + if (!$menu_comment->{'format'} or $menu_comment->{'format'} ne 'menu_comment') + { + warn "Bug waiting for menu_comment, got $menu_comment->{'format'}\n"; + dump_stack($text, $stack, $state); + } + add_prev($text, $stack, &$Texi2HTML::Config::menu_comment($menu_comment->{'text'})); + unless ($Texi2HTML::Config::SIMPLE_MENU) + { + pop @{$state->{'preformatted_stack'}}; + $state->{'preformatted'}--; + } + $state->{'menu_comment'}--; + } + if ($state->{'menu_entry'}) + { + close_stack($text, $stack,$state, $line_nr, undef, 'menu_description'); + my $descr = pop(@$stack); + print STDERR "# close_menu: close description\n" if ($T2H_DEBUG & $DEBUG_MENU); + add_prev($text, $stack, do_menu_description($descr->{'text'}, $state)); + delete $state->{'menu_entry'}; + } +} + +# Format menu link +sub do_menu_link($$;$) +{ + my $state = shift; + my $line_nr = shift; + my $simple = shift; + my $menu_entry = $state->{'menu_entry'}; + my $file = $state->{'element'}->{'file'}; + my $node_name = normalise_node($menu_entry->{'node'}); + + my $substitution_state = duplicate_state($state); + my $name = substitute_line($menu_entry->{'name'}, $substitution_state); + my $node_formatted = substitute_line($menu_entry->{'node'}, $substitution_state); + + my $entry = ''; + my $href; + my $element = $nodes{$node_name}; + + # menu points to an unknown node + if (!$element->{'seen'}) + { + if ($menu_entry->{'node'} =~ /^\s*\(.*\)/o or $novalidate) + { + # menu entry points to another info manual or invalid nodes + # and novalidate is set + #$href = $nodes{$node_name}->{'file'}; + $href = do_external_href($node_name); + } + else + { + echo_error ("Unknown node in menu entry `$node_name'", $line_nr); + # try to find an equivalent node + my @equivalent_nodes = equivalent_nodes($node_name); + my $node_seen; + foreach my $equivalent_node (@equivalent_nodes) + { + if ($nodes{$equivalent_node}->{'seen'}) + { + $node_seen = $equivalent_node; + last; + } + } + if (defined($node_seen)) + { + echo_warn (" ---> but equivalent node `$node_seen' found"); + $element = $nodes{$node_seen}; + } + } + } + + # the original node or an equivalent node was seen + if ($element->{'seen'}) + { + if ($element->{'reference_element'}) + { + $element = $element->{'reference_element'}; + } + + #print STDERR "SUBHREF in menu for `$element->{'texi'}'\n"; + $href = href($element, $file); + if (! $element->{'node'}) + { + $entry = $element->{'text'}; # this is the section/node name + $entry = "$Texi2HTML::Config::MENU_SYMBOL $entry" if (($entry ne '') and (!defined($element->{'number'}) or ($element->{'number'} =~ /^\s*$/)) and $Texi2HTML::Config::UNNUMBERED_SYMBOL_IN_MENU); + } + } + # save the element used for the href for the description + $menu_entry->{'menu_reference_element'} = $element; + + return &$Texi2HTML::Config::menu_link($entry, $substitution_state, $href, $node_formatted, $name, $menu_entry->{'ending'}) unless ($simple); + return &$Texi2HTML::Config::simple_menu_link($entry, $state->{'preformatted'}, $href, $node_formatted, $name, $menu_entry->{'ending'}); +} + +sub do_menu_description($$) +{ + my $descr = shift; + my $state = shift; + my $menu_entry = $state->{'menu_entry'}; + + my $element = $menu_entry->{'menu_reference_element'}; + + return &$Texi2HTML::Config::menu_description($descr, duplicate_state($state),$element->{'text_nonumber'}); +} + +sub do_xref($$$$) +{ + my $macro = shift; + my $args = shift; + my $style_stack = shift; + my $state = shift; + my $line_nr = shift; + + my $result = ''; + my @args = @$args; + #print STDERR "DO_XREF: $macro\n"; + my $j = 0; + for ($j = 0; $j <= $#$args; $j++) + { + $args[$j] = normalise_space($args[$j]); + # print STDERR " ($j)$args[$j]\n"; + } + $args[0] = '' if (!defined($args[0])); + my $node_texi = normalise_node($args[0]); + # a ref to a node in an info manual + if ($args[0] =~ s/^\(([^\)]+)\)\s*//) + { + if ($macro eq 'inforef') + { + $args[2] = $1 unless ($args[2]); + } + else + { + $args[3] = $1 unless ($args[3]); + } + } + if (($macro ne 'inforef') and $args[3]) + { + $node_texi = "($args[3])" . normalise_node($args[0]); + } + + if ($macro eq 'inforef') + { + if ((@args < 1) or ($args[0] eq '')) + { + echo_error ("Need a node name for \@$macro", $line_nr); + return ''; + } + if (@args > 3) + { + echo_warn ("Too much arguments for \@$macro", $line_nr); + } + $args[2] = '' if (!defined($args[2])); + $args[1] = '' if (!defined($args[1])); + $node_texi = "($args[2])$args[0]"; + } + + my $i; + my $new_state = duplicate_state($state); + $new_state->{'keep_texi'} = 0; + $new_state->{'keep_nr'} = 0; + for ($i = 0; $i < 5; $i++) + { + $args[$i] = substitute_line($args[$i], $new_state); + } + #print STDERR "(@args)\n"; + + if (($macro eq 'inforef') or ($args[3] ne '') or ($args[4] ne '')) + {# external ref + if ($macro eq 'inforef') + { + $macro = 'xref'; + $args[3] = $args[2]; + } + my $href = ''; + my $node_file = ''; + if ($args[3] ne '') + { + $href = do_external_href($node_texi); + $node_file = "($args[3])$args[0]"; + } + my $section = ''; + if ($args[4] ne '') + { + $section = $args[0]; + if ($args[2] ne '') + { + $section = $args[2]; + } + } + $result = &$Texi2HTML::Config::external_ref($macro, $section, $args[4], $node_file, $href, $args[1]); + } + else + { + my $element = $nodes{$node_texi}; + if ($element and $element->{'seen'}) + { + if ($element->{'reference_element'}) + { + $element = $element->{'reference_element'}; + } + my $file = ''; + if (defined($state->{'element'})) + { + $file = $state->{'element'}->{'file'}; + } + else + { + echo_warn ("\@$macro not in text (in anchor, node, section...)", $line_nr); + # if Texi2HTML::Config::SPLIT the file is '' which ensures + # a href with the file name. if ! Texi2HTML::Config::SPLIT + # the 2 file will be the same thus there won't be the file name + $file = $element->{'file'} unless ($Texi2HTML::Config::SPLIT); + } + #print STDERR "SUBHREF in ref to node `$node_texi': $_"; + my $href = href($element, $file); + my $section = $args[2]; + $section = $args[1] if ($section eq ''); + my $name = $section; + my $short_name = $section; + if ($section eq '') + { + # FIXME maybe one should use 'text' instead of 'text_nonumber' + # However the real fix would be to have an internal_ref call + # with more informations + $name = $element->{'text_nonumber'}; + $short_name = $args[0]; + } + $result = &$Texi2HTML::Config::internal_ref ($macro, $href, $short_name, $name, $element->{'section'}); + } + else + { + if (($node_texi eq '') or !$novalidate) + { + echo_error ("Undefined node `$node_texi' in \@$macro", $line_nr); + my $text = ''; + for (my $i = 0; $i < @$args -1; $i++) + { + $text .= $args->[$i] .','; + } + $text .= $args->[-1]; + $result = "\@$macro"."{${text}}"; + } + else + { + $result = &$Texi2HTML::Config::external_ref($macro, '', '', $args[0], do_external_href($node_texi), $args[1]); + } + } + } + return $result; +} + +sub do_acronym_like($$$$$) +{ + my $command = shift; + my $args = shift; + my $acronym_texi = shift @$args; + my $explanation = shift @$args; + my $style_stack = shift; + my $state = shift; + my $line_nr = shift; + + my $explanation_lines; + my $explanation_text; + my $explanation_simple_format; + + if (defined($explanation)) + { + $explanation =~ s/^\s*//; + $explanation =~ s/\s*$//; + $explanation = undef if ($explanation eq ''); + } + $acronym_texi =~ s/^\s*//; + $acronym_texi =~ s/\s*$//; + + return '' if ($acronym_texi eq ''); + + my $with_explanation = 0; + my $normalized_text = cross_manual_line(normalise_node($acronym_texi)); + if (defined($explanation)) + { + $with_explanation = 1; + $acronyms_like{$command}->{$normalized_text} = $explanation; + } + elsif (exists($acronyms_like{$command}->{$normalized_text})) + { + $explanation = $acronyms_like{$command}->{$normalized_text}; + } + + if (defined($explanation)) + { + @$explanation_lines = map {$_ = $_."\n"} split (/\n/, $explanation); + my $text = ''; + foreach my $line(@$explanation_lines) + { + $line .= ' ' if (chomp ($line)); + $text .= $line + } + $text =~ s/ $//; + my $simple_format_state = duplicate_state($state); + $explanation_simple_format = simple_format($simple_format_state,$text); + $explanation_text = substitute_line($text, duplicate_state($state)); + } + return &$Texi2HTML::Config::acronym_like($command, $acronym_texi, substitute_line($acronym_texi, duplicate_state($state)), + $with_explanation, $explanation_lines, $explanation_text, $explanation_simple_format); +} + +sub do_caption_shortcaption($$$$$) +{ + my $command = shift; + my $args = shift; + my $text = $args->[0]; + my $style_stack = shift; + my $state = shift; + my $line_nr = shift; + + if (!exists($state->{'float'})) + { +#dump_stack(\"", [], $state); + echo_error("\@$command outside of float", $line_nr); + return ''; + } + my $float = $state->{'float'}; + my @texi_lines = map {$_ = $_."\n"} split (/\n/, $text); + $float->{"${command}_texi"} = \@texi_lines; + return ''; +} + +# function called when a @float is encountered. Don't do any output +# but prepare $state->{'float'} +sub do_float_line($$$$$) +{ + my $command = shift; + my $args = shift; + my @args = @$args; + my $style_texi = shift @args; + my $label_texi = shift @args; + my $style_stack = shift; + my $state = shift; + my $line_nr = shift; + + $style_texi = undef if (defined($style_texi) and $style_texi=~/^\s*$/); + $label_texi = undef if (defined($label_texi) and $label_texi=~/^\s*$/); + if (defined($label_texi)) + { # the float is considered as a node as it may be a target for refs. + # it was entered as a node in the pass_structure and the float + # line was parsed at that time + $state->{'float'} = $nodes{normalise_node($label_texi)}; + #print STDERR "float: $state->{'float'}, $state->{'float'}->{'texi'}\n"; + } + else + { # a float without label. It can't be the target for refs. + $state->{'float'} = { 'float' => 1 }; + if (defined($style_texi)) + { + $state->{'float'}->{'style_texi'} = normalise_space($style_texi); + $state->{'float'}->{'style_id'} = + cross_manual_line($state->{'float'}->{'style_texi'}); + $state->{'float'}->{'style'} = substitute_line($style_texi); + } + #print STDERR "float: (no label) $state->{'float'}\n"; + } + return ''; +} + +sub do_quotation_line($$$$$) +{ + my $command = shift; + my $args = shift; + my @args = @$args; + my $text_texi = shift @args; + my $style_stack = shift; + my $state = shift; + my $line_nr = shift; + my $text; + + $text_texi = undef if (defined($text_texi) and $text_texi=~/^\s*$/); + if (defined($text_texi)) + { + $text = substitute_line($text_texi, duplicate_state($state)); + $text =~ s/\s*$//; + } + my $quotation_args = { 'text' => $text, 'text_texi' => $text_texi }; + push @{$state->{'quotation_stack'}}, $quotation_args; + $state->{'prepend_text'} = &$Texi2HTML::Config::quotation_prepend_text($text_texi); + return ''; +} + +sub do_def_line($$$$$) +{ + my $command = shift; + my $args = shift; + my @args = @$args; + my $arguments = shift @args; + my $style_stack = shift; + my $state = shift; + my $line_nr = shift; + + $state->{'deff_line'}->{'arguments'} = $arguments; + return ''; +} + +sub do_footnote($$$$) +{ + my $command = shift; + my $args = shift; + my $text = $args->[0]; + my $style_stack = shift; + my $state = shift; + my $line_nr = shift; + + $text .= "\n"; + $foot_num++; + $relative_foot_num++; + my $docid = "DOCF$foot_num"; + my $footid = "FOOT$foot_num"; + my $from_file = ''; + if ($state->{'element'} and $Texi2HTML::Config::SPLIT and $Texi2HTML::Config::SEPARATED_FOOTNOTES) + { + $from_file = $state->{'element'}->{'file'}; + } + my %state; + initialise_state(\%state); + if ($Texi2HTML::Config::SEPARATED_FOOTNOTES) + { + $state{'element'} = $footnote_element; + } + else + { + $state{'element'} = $state->{'element'}; + } + my $file = ''; + $file = $docu_foot if ($Texi2HTML::Config::SPLIT and $Texi2HTML::Config::SEPARATED_FOOTNOTES); + + # FIXME use split_lines ? It seems to work like it is now ? + my @lines = substitute_text(\%state, map {$_ = $_."\n"} split (/\n/, $text)); + my ($foot_lines, $foot_label) = &$Texi2HTML::Config::foot_line_and_ref ($foot_num, + $relative_foot_num, $footid, $docid, $from_file, $file, \@lines, $state); + push(@foot_lines, @{$foot_lines}); + return $foot_label; +} + +sub do_image($$$$) +{ + # replace images + my $command = shift; + my $args = shift; + my $text = $args->[0]; + my $style_stack = shift; + my $state = shift; + my $line_nr = shift; + $text =~ s/\s+/ /gos; # remove useless spaces and newlines + my @args = split (/\s*,\s*/, $text); + my $base = $args[0]; + if ($base eq '') + { + echo_error ("no file argument for \@image", $line_nr); + #warn "$ERROR no file argument for \@image\n"; + return ''; + } + $args[4] = '' if (!defined($args[4])); + $args[3] = '' if (!defined($args[3])); + my $image; + my $file_name; + my @file_names = &$Texi2HTML::Config::image_files($base,$args[4]); +# $image = locate_include_file("$base.$args[4]") if ($args[4] ne ''); + foreach my $file (@file_names) + { + if ($image = locate_include_file($file)) + { + $file_name = $file; + last; + } + } + $image = '' if (!defined($image)); + + my $alt; + if ($args[3] =~ /\S/) + { + # makeinfo don't do that. Maybe it should be remove_texi or + # simple_format... The raw alt is also given in argument + $alt = do_text($args[3]); + $alt = $alt if ($alt =~ /\S/); + } + return &$Texi2HTML::Config::image($path_to_working_dir . $image, $base, + $state->{'preformatted'}, $file_name, $alt, $args[1], $args[2], + $args[3], $args[4], $path_to_working_dir, $image); +} + +sub duplicate_state($) +{ + my $state = shift; + my $new_state = { 'element' => $state->{'element'}, + 'preformatted' => $state->{'preformatted'}, + 'code_style' => $state->{'code_style'}, + 'keep_texi' => $state->{'keep_texi'}, + 'keep_nr' => $state->{'keep_nr'}, + 'preformatted_stack' => $state->{'preformatted_stack'}, + 'multiple_pass' => $state->{'multiple_pass'}, +# this is needed for preformatted + 'command_stack' => [ @{$state->{'command_stack'}} ], + 'preformatted_context' => + {'stack_at_beginning' => [ @{$state->{'command_stack'}} ] } + }; + return $new_state; +} + +sub expand_macro($$$$$) +{ + my $name = shift; + my $args = shift; + my $end_line = shift; + my $line_nr = shift; + my $state = shift; + + # we dont expand macros when in ignored environment. + return if ($state->{'ignored'}); + my $index = 0; + foreach my $arg (@$args) + { # expand @macros in arguments. It is complicated because we must be + # carefull not to expand macros in @ignore section or the like, and + # still keep every single piece of text (including the @ignore macros). + $args->[$index] = substitute_text({'texi' => 1, 'arg_expansion' => 1}, split_lines($arg)); + $index++; + } + # retrieve the macro definition + my $macrobody = $macros->{$name}->{'body'}; + my $formal_args = $macros->{$name}->{'args'}; + my $args_index = $macros->{$name}->{'args_index'}; + my $i; + + die "Bug end_line not defined" if (!defined($end_line)); + + for ($i=0; $i<=$#$formal_args; $i++) + { + $args->[$i] = "" unless (defined($args->[$i])); + print STDERR "# arg($i): $args->[$i]\n" if ($T2H_DEBUG & $DEBUG_MACROS); + } + echo_error ("too much arguments for macro $name", $line_nr) if (defined($args->[$i + 1])); + my $result = ''; + while ($macrobody) + { + if ($macrobody =~ s/^([^\\]*)\\//o) + { + $result .= $1 if defined($1); + if ($macrobody =~ s/^\\//) + { + $result .= '\\'; + } + elsif ($macrobody =~ s/^(\@end\sr?macro)$// or $macrobody =~ s/^(\@end\sr?macro\s)// or $macrobody =~ s/^(\@r?macro\s+\w+\s*.*)//) + { # \ protect @end macro + $result .= $1; + } + elsif ($macrobody =~ s/^([^\\]*)\\//) + { + my $arg = $1; + if (defined($args_index->{$arg})) + { + $result .= $args->[$args_index->{$arg}]; + } + else + { + warn "$ERROR \\ not followed by \\ or an arg but by $arg in macro\n"; + $result .= '\\' . $arg; + } + } + next; + } + $result .= $macrobody; + last; + } + my @result = split(/^/m, $result); + # Add the result of the macro expansion back to the input_spool. + # Set the macro name if in the outer macro + if ($state->{'arg_expansion'}) + { + unshift @{$state->{'spool'}}, (@result, $end_line); + } + else + { + unshift @{$input_spool->{'spool'}}, (@result, $end_line); + $input_spool->{'macro'} = $name if ($input_spool->{'macro'} eq ''); + } + if ($T2H_DEBUG & $DEBUG_MACROS) + { + print STDERR "# macro expansion result:\n"; + #print STDERR "$first_line"; + foreach my $line (@result) + { + print STDERR "$line"; + } + print STDERR "# macro expansion result end\n"; + } +} + +sub do_index_summary_file($) +{ + my $name = shift; + my ($pages, $entries) = get_index($name); + &$Texi2HTML::Config::index_summary_file_begin ($name, $printed_indices{$name}); + print STDERR "# writing $name index summary\n" if $T2H_VERBOSE; + + foreach my $key (sort keys %$entries) + { + my $entry = $entries->{$key}; + my $indexed_element = $entry->{'element'}; + my $entry_element = $indexed_element; + # notice that we use the section associated with a node even when + # there is no with_section, i.e. when there is another node preceding + # the sectionning command. + # However when it is the Top node, we use the node instead. + # (for the Top node, 'top_as_section' is true) + $entry_element = $entry_element->{'section_ref'} if ($entry_element->{'section_ref'} and !$entry_element->{'top_as_section'}); + my $origin_href = $entry->{'file'}; + #print STDERR "$entry $entry->{'entry'}, real elem $indexed_element->{'texi'}, section $entry_element->{'texi'}, real $indexed_element->{'file'}, entry file $entry->{'file'}\n"; + if ($entry->{'label'}) + { + $origin_href .= '#' . $entry->{'label'}; + } + else + { + # If the $indexed_element element and the $index entry are on + # the same + # file the real element is prefered. If they aren't on the same file + # the entry id is choosed as it means that the real element + # and the index entry are separated by a printindex. + print STDERR "id undef ($entry) entry: $entry->{'entry'}, label: $indexed_element->{'text'}\n" if (!defined($entry->{'id'})); + if ($entry->{'file'} eq $indexed_element->{'file'}) + { + $origin_href .= '#' . $indexed_element->{'id'}; + } + else + { + $origin_href .= '#' . $entry->{'id'} ; + } + } + &$Texi2HTML::Config::index_summary_file_entry ($name, + $key, $origin_href, + substitute_line($entry->{'entry'}), $entry->{'entry'}, + href($entry_element, ''), + $entry_element->{'text'}, + $printed_indices{$name}); + } + &$Texi2HTML::Config::index_summary_file_end ($name, $printed_indices{$name}); +} + +sub do_index_page($$;$) +{ + my $index_elements = shift; + my $nr = shift; + my $page = shift; + my $index_element = $index_elements->[$nr]; + my $summary = do_index_summary($index_element->{'element'}, $index_elements); + my $entries = do_index_entries($index_element->{'element'}, $index_element->{'page'}, $index_element->{'name'}); + return $summary . $entries . $summary; +} + +sub do_index_summary($$) +{ + my $element = shift; + my $index_elements = shift; + + my @letters; + my @symbols; + + for my $index_element_item (@$index_elements) + { + my $index_element = $index_element_item->{'element'}; + my $file = ''; + $file .= $index_element->{'file'} if ($index_element->{'file'} ne $element->{'file'}); + my $index = 0; + for my $letter (@{$index_element_item->{'page'}->{'letters'}}) + { + if ($letter =~ /^[A-Za-z]/) + { + push @letters, &$Texi2HTML::Config::summary_letter($letter, $file, "$index_element->{'id'}" . "_$index"); + } + else + { + push @symbols, &$Texi2HTML::Config::summary_letter($letter, $file, "$index_element->{'id'}" . "_$index"); + } + $index++; + } + } + return &$Texi2HTML::Config::index_summary(\@letters, \@symbols); +} + +sub do_index_entries($$$) +{ + my $element = shift; + my $page = shift; + my $name = shift; + + my $letters = ''; + my $index = 0; + foreach my $letter (@{$page->{'letters'}}) + { + my $entries = ''; + foreach my $entry (@{$page->{'entries_by_letter'}->{$letter}}) + { + my $indexed_element = $entry->{'element'}; + my $entry_element = $indexed_element; + # notice that we use the section associated with a node even when + # there is no with_section, i.e. when there is another node preceding + # the sectionning command. + # However when it is the Top node, we use the node instead. + # (for the Top node, 'top_as_section' is true) + $entry_element = $entry_element->{'section_ref'} if ($entry_element->{'section_ref'} and !$entry_element->{'top_as_section'}); + my $origin_href = ''; + $origin_href = $entry->{'file'} if ($Texi2HTML::Config::SPLIT and $entry->{'file'} ne $element->{'file'}); + #print STDERR "$entry $entry->{'entry'}, real elem $indexed_element->{'texi'}, section $entry_element->{'texi'}, real $indexed_element->{'file'}, entry file $entry->{'file'}\n"; + if ($entry->{'label'}) + { + $origin_href .= '#' . $entry->{'label'}; + } + else + { + # If the $indexed_element element and the $index entry are + # in the same file the indexed_element is prefered. If they + # aren't in the same file the entry id is choosed as it means + # that the indexed_element element and the index entry are + # separated by a printindex. + print STDERR "id undef ($entry) entry: $entry->{'entry'}, label: $indexed_element->{'text'}\n" if (!defined($entry->{'id'})); + if ($entry->{'file'} eq $indexed_element->{'file'}) + { + $origin_href .= '#' . $indexed_element->{'id'}; + } + else + { + $origin_href .= '#' . $entry->{'id'} ; + } + } + #print STDERR "SUBHREF in index entry `$entry->{'entry'}' for `$entry_element->{'texi'}'\n"; + $entries .= &$Texi2HTML::Config::index_entry ($origin_href, + substitute_line($entry->{'entry'}), + href($entry_element, $element->{'file'}), + $entry_element->{'text'}); + } + $letters .= &$Texi2HTML::Config::index_letter ($letter, "$element->{'id'}" . "_$index", $entries); + $index++; + } + return &$Texi2HTML::Config::print_index($letters, $name); +} + +# remove texi commands, replacing with what seems adequate. see simple_map_texi +# and texi_map. +# Doesn't protect html +sub remove_texi(@) +{ + return substitute_text ({ 'remove_texi' => 1}, @_); +} + +# Same as remove texi but protect text and use special maps for @-commands +sub simple_format($@) +{ + my $state = shift; + $state = {} if (!defined($state)); + $state->{'remove_texi'} = 1; + $state->{'simple_format'} = 1; + # WARNING currently it is only used for lines. It may change in the future. + $state->{'no_paragraph'} = 1; + $::simple_map_texi_ref = \%Texi2HTML::Config::simple_format_simple_map_texi; + $::style_map_texi_ref = \%Texi2HTML::Config::simple_format_style_map_texi; + $::texi_map_ref = \%Texi2HTML::Config::simple_format_texi_map; + my $text = substitute_text($state, @_); + $::simple_map_texi_ref = \%Texi2HTML::Config::simple_map_texi; + $::style_map_texi_ref = \%Texi2HTML::Config::style_map_texi; + $::texi_map_ref = \%Texi2HTML::Config::texi_map; + return $text; +} + +sub enter_table_index_entry($$$$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + if ($state->{'item'} and ($state->{'table_stack'}->[-1] =~ /^(v|f)table$/)) + { + my $index = $1; + my $macro = $state->{'item'}; + delete $state->{'item'}; + close_stack($text, $stack, $state, $line_nr, undef, 'index_item'); + my $item = pop @$stack; + my $element = $state->{'element'}; + $element = $state->{'node_ref'} unless ($element); + enter_index_entry($index, $line_nr, $item->{'text'}, + $state->{'place'}, $element, 0, $state->{'table_stack'}->[-1]); + add_prev($text, $stack, "\@$macro" . $item->{'text'}); + } +} + +sub scan_texi($$$$;$) +{ + my $line = shift; + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + + die "stack not an array ref" unless (ref($stack) eq "ARRAY"); + local $_ = $line; + + while(1) + { + # scan_texi + #print STDERR "WHILE:$_"; + #print STDERR "ARG_EXPANSION: $state->{'arg_expansion'}\n" if ($state->{'arg_expansion'}); + #dump_stack($text, $stack, $state); + #print STDERR "ifvalue_inside $state->{'ifvalue_inside'}\n"; + + + # first we handle special cases: + # macro definition: $state->{'macro_inside'} + # macro arguments: $state->{'macro_name'} + # raw format: $state->{'raw'} + # @verb: $state->{'verb'} + # ignored: $state->{'ignored'} + # and then the remaining text/macros. + + # in macro definition + if ($state->{'macro_inside'}) + { + if (s/^([^\\\@]*\\)//) + {# protected character or @end macro + $state->{'macro'}->{'body'} .= $1 unless ($state->{'ignored'}); + if (s/^\\//) + { + $state->{'macro'}->{'body'} .= '\\' unless ($state->{'ignored'}); + next; + } + # I believe it is correct, although makeinfo don't do that. + elsif (s/^(\@end\sr?macro)$//o or s/^(\@end\sr?macro\s)//o + or s/^(\@r?macro\s+\w+\s*.*)//o) + { + $state->{'macro'}->{'body'} .= $1 unless ($state->{'ignored'}); + next; + } + } + #if (s/^(.*?)\@end\sr?macro$//o or s/^(.*?)\@end\sr?macro\s+//o) + if (s/^(\@end\sr?macro)$//o or s/^(\@end\sr?macro\s+)//o) + { + $state->{'macro_inside'}--; + next if ($state->{'ignored'}); + if ($state->{'macro_inside'}) + { + $state->{'macro'}->{'body'} .= $1; + next; + } + chomp $state->{'macro'}->{'body'}; + print STDERR "# end macro def. Body:\n$state->{'macro'}->{'body'}" + if ($T2H_DEBUG & $DEBUG_MACROS); + delete $state->{'macro'}; + return if (/^\s*$/); + next; + } + elsif(/^(\@r?macro\s+\w+\s*.*)/) + { + $state->{'macro'}->{'body'} .= $_ unless ($state->{'ignored'}); + $state->{'macro_inside'}++; + return; + } + elsif (s/^\@(.)//) + { + $state->{'macro'}->{'body'} .= '@' . $1 unless ($state->{'ignored'}); + next; + } + elsif (s/^\@//) + { + $state->{'macro'}->{'body'} .= '@' unless ($state->{'ignored'}); + next; + } + else + { + s/([^\@\\]*)//; + if ($state->{'ignored'}) + { + return if (/^$/); + next; + } + $state->{'macro'}->{'body'} .= $1 if (defined($1)); + if (/^$/) + { + $state->{'macro'}->{'body'} .= $_; + return; + } + next; + } + } + # in macro arguments parsing/expansion. Here \ { } and , if this is a + # multi args macro have a signification, the remaining is passed + # unmodified + if (defined($state->{'macro_name'})) + { + my $special_chars = quotemeta ('\{}'); + my $multi_args = 0; + my $formal_args = $macros->{$state->{'macro_name'}}->{'args'}; + $multi_args = 1 if ($#$formal_args >= 1); + $special_chars .= quotemeta(',') if ($multi_args); + if ($state->{'macro_args'}->[-1] eq '') + {# remove space at the very beginning + s/^\s*//o; + } + if (s/^([^$special_chars]*)([$special_chars])//) + { + $state->{'macro_args'}->[-1] .= $1 if defined($1); + # \ protects any character in macro arguments + if ($2 eq '\\') + { + print STDERR "# macro call: protected char\n" if ($T2H_DEBUG & $DEBUG_MACROS); + if (s/^(.)//) + { + $state->{'macro_args'}->[-1] .= $1; + } + else + { + $state->{'macro_args'}->[-1] .= '\\'; + } + } + elsif ($2 eq ',') + { # in texinfo 4.8.90 a comma in braces is protected + if ($state->{'macro_depth'} > 1) + { + $state->{'macro_args'}->[-1] .= ','; + } + else + { # separate args + print STDERR "# macro call: new arg\n" if ($T2H_DEBUG & $DEBUG_MACROS); + s/^\s*//o; + push @{$state->{'macro_args'}}, ''; + } + } + elsif ($2 eq '}') + { # balanced } ends the macro call, otherwise it is in the arg + $state->{'macro_depth'}--; + if ($state->{'macro_depth'} == 0) + { + print STDERR "# expanding macro $state->{'macro_name'}\n" if ($T2H_DEBUG & $DEBUG_MACROS); + $_ = expand_macro($state->{'macro_name'}, $state->{'macro_args'}, $_, $line_nr, $state); + delete $state->{'macro_name'}; + delete $state->{'macro_depth'}; + delete $state->{'macro_args'}; + return; + } + else + { + print STDERR "# macro call: closing }\n" if ($T2H_DEBUG & $DEBUG_MACROS); + add_text('}', \$state->{'macro_args'}->[-1]); + } + } + elsif ($2 eq '{') + { + print STDERR "# macro call: opening {\n" if ($T2H_DEBUG & $DEBUG_MACROS); + $state->{'macro_depth'}++; + add_text('{', \$state->{'macro_args'}->[-1]); + } + next; + } + print STDERR "# macro call: end of line\n" if ($T2H_DEBUG & $DEBUG_MACROS); + $state->{'macro_args'}->[-1] .= $_; + return; + } + # in a raw format, verbatim, tex or html + if ($state->{'raw'}) + { + my $tag = $state->{'raw'}; + + # debugging + if (! @$stack or ($stack->[-1]->{'style'} ne $tag)) + { + print STDERR "Bug: raw or special: $tag but not on top of stack\n"; + print STDERR "line: $_"; + dump_stack($text, $stack, $state); + exit 1; + } + + if (s/^(.*?)(\@end\s$tag)$// or s/^(.*?)(\@end\s$tag\s)//) + {# we add it even if 'ignored', it'll be discarded when there is + # the @end + add_prev ($text, $stack, $1); + my $end = $2; + my $style = pop @$stack; + if ($style->{'text'} !~ /^\s*$/ or $state->{'arg_expansion'}) + # FIXME if 'arg_expansion' and also 'ignored' is true, + # theoretically we should keep + # what is in the raw format however + # it will be removed later anyway + {# ARG_EXPANSION + my $after_macro = ''; + $after_macro = ' ' unless (/^\s*$/); + add_prev ($text, $stack, $style->{'text'} . $end . $after_macro) unless ($state->{'ignored'}); + delete $state->{'raw'}; + } + next; + } + else + {# we add it even if 'ignored', it'll be discarded when there is + # the @end + add_prev ($text, $stack, $_); + last; + } + } + + # in a @verb{ .. } macro + if (defined($state->{'verb'})) + { + #dump_stack($text, $stack, $state); + my $char = quotemeta($state->{'verb'}); + #print STDERR "VERB $char\n"; + if (s/^(.*?)$char\}/\}/) + {# we add it even if 'ignored', it'll be discarded when closing + add_prev($text, $stack, $1 . $state->{'verb'}); + $stack->[-1]->{'text'} = $state->{'verb'} . $stack->[-1]->{'text'}; + delete $state->{'verb'}; + next; + } + else + {# we add it even if 'ignored', it'll be discarded when closing + add_prev($text, $stack, $_); + last; + } + } + # In ignored region + if ($state->{'ignored'}) + { + #print STDERR "IGNORED(ifvalue($state->{'ifvalue_inside'})): $state->{'ignored'}\n"; + if (/^.*?\@end(\s+)([a-zA-Z]\w+)/) + { + if ($2 eq $state->{'ignored'}) + { + s/^(.*?\@end)(\s+)([a-zA-Z]\w+)//; + my $end_ignore = $1.$2.$3; + if (($state->{'ifvalue_inside'}) and $state->{'ignored'} eq $state->{'ifvalue'}) + { + if ($state->{'ifvalue_inside'} == 1) + {# closing still opened @-commands with braces + pop (@$stack) while (@$stack and $stack->[-1]->{'style'} ne 'ifvalue') + } + pop (@$stack); + $state->{'ifvalue_inside'}--; + } + $state->{'ignored'} = undef; + delete $state->{'ignored'}; + # We are stil in the ignored ifset or ifclear section + $state->{'ignored'} = $state->{'ifvalue'} if ($state->{'ifvalue_inside'}); + #dump_stack($text, $stack, $state); + # MACRO_ARG => keep ignored text + if ($state->{'arg_expansion'}) + {# this may not be very usefull as it'll be remove later + add_prev ($text, $stack, $end_ignore); + next; + } + return if /^\s*$/o; + next; + } + } + add_prev ($text, $stack, $_) if ($state->{'arg_expansion'}); + # we could theoretically continue for ignored commands other + # than ifset or ifclear, however it isn't usefull. + return unless ($state->{'ifvalue_inside'} and ($state->{'ignored'} eq $state->{'ifvalue'})); + } + + + # an @end tag + # macro_regexp + if (s/^([^{}@]*)\@end(\s+)([a-zA-Z][\w-]*)//) + { + my $leading_text = $1; + my $space = $2; + my $end_tag = $3; + # when 'ignored' we don't open environments that aren't associated + # with ignored regions, so we don't need to close them. + next if ($state->{'ignored'});# ARG_EXPANSION + add_prev($text, $stack, $leading_text); + if (defined($state->{'text_macro_stack'}) + and @{$state->{'text_macro_stack'}} + and ($end_tag eq $state->{'text_macro_stack'}->[-1])) + { + pop @{$state->{'text_macro_stack'}}; + # we keep menu and titlepage for the following pass + if ((($end_tag eq 'menu') and $text_macros{'menu'}) or ($region_lines{$end_tag}) or $state->{'arg_expansion'}) + { + add_prev($text, $stack, "\@end${space}$end_tag"); + } + else + { + #print STDERR "End $end_tag\n"; + #dump_stack($text, $stack, $state); + return if (/^\s*$/); + } + } + elsif ($text_macros{$end_tag}) + { + echo_error ("\@end $end_tag without corresponding element", $line_nr); + } + else + {# ARG_EXPANSION + add_prev($text, $stack, "\@end${space}$end_tag"); + } + next; + } + # macro_regexp + elsif (s/^([^{}@]*)\@(["'~\@\}\{,\.!\?\s\*\-\^`=:\|\/])//o or s/^([^{}@]*)\@([a-zA-Z][\w-]*)([\s\{\}\@])/$3/o or s/^([^{}@]*)\@([a-zA-Z][\w-]*)$//o) + {# ARG_EXPANSION + add_prev($text, $stack, $1) unless $state->{'ignored'}; + my $macro = $2; + #print STDERR "MACRO $macro\n"; + # handle skipped @-commands + $state->{'bye'} = 1 if ($macro eq 'bye' and !$state->{'ignored'} and !$state->{'arg_expansion'}); + if (defined($Texi2HTML::Config::misc_command{$macro}) and + !$Texi2HTML::Config::misc_command{$macro}->{'texi'} + and $macro ne 'documentencoding') + {# ARG_EXPANSION + my ($line, $args); + ($_, $line, $args) = preserve_command($_, $macro); + add_prev ($text, $stack, "\@$macro" . $line) unless $state->{'ignored'}; + } + # pertusus: it seems that value substitution are performed after + # macro argument expansions: if we have + # @set comma , + # and a call to a macro @macro {arg1 @value{comma} arg2} + # the macro arg is arg1 , arg2 and the comma don't separate + # args. Likewise it seems that the @value are not expanded + # in macro definitions + + # track variables + elsif($macro eq 'set' or $macro eq 'clear') + { + if ($macro eq 'set') + { + if (s/^(\s+)($VARRE)(\s+)(.*)$//o) + { + if ($state->{'arg_expansion'}) + { + my $line = "\@$macro" . $1.$2.$3; + $line .= $4 if (defined($4)); + add_prev($text, $stack, $line); + next; + } + next if $state->{'ignored'}; + $value{$2} = $4; + } + else + { + echo_warn ("Missing argument for \@$macro", $line_nr); + } + } + elsif ($macro eq 'clear') + { + if (s/^(\s+)($VARRE)//o) + { + if ($state->{'arg_expansion'}) + { + add_prev($text, $stack, "\@$macro" . $1 . $2); + next; + } + next if $state->{'ignored'}; + delete $value{$2}; + } + else + { + echo_warn ("Missing argument for \@$macro", $line_nr); + } + } + return if (/^\s*$/); + } + elsif ($macro =~ /^r?macro$/) + { #FIXME what to do if 'arg_expansion' is true (ie within another + # macro call arguments? + if (/^\s+(\w[\w-]*)\s*(.*)/) + { + my $name = $1; + unless ($state->{'ignored'}) + { + if (exists($macros->{$name})) + { + echo_warn ("macro `$name' allready defined " . + format_line_number($macros->{$name}->{'line_nr'}) . " redefined", $line_nr); + } + + } + $state->{'macro_inside'} = 1; + next if ($state->{'ignored'}); + # if in 'arg_expansion' we really want to take into account + # that we are in an ignored ifclear. + my @args = (); + @args = split(/\s*,\s*/ , $1) + if ($2 =~ /^\s*{\s*(.*?)\s*}\s*/); + # keep the context information of the definition + $macros->{$name}->{'line_nr'} = { 'file_name' => $line_nr->{'file_name'}, + 'line_nr' => $line_nr->{'line_nr'}, 'macro' => $line_nr->{'macro'} } if (defined($line_nr)); + $macros->{$name}->{'args'} = \@args; + my $arg_index = 0; + my $debug_msg = ''; + foreach my $arg (@args) + { # when expanding macros, the argument index is retrieved + # with args_index + $macros->{$name}->{'args_index'}->{$arg} = $arg_index; + $debug_msg .= "$arg($arg_index) "; + $arg_index++; + } + $macros->{$name}->{'body'} = ''; + $state->{'macro'} = $macros->{$name}; + print STDERR "# macro def $name: $debug_msg\n" + if ($T2H_DEBUG & $DEBUG_MACROS); + } + else + {# it means we have a macro without a name + echo_error ("Macro definition without macro name $_", $line_nr) + unless ($state->{'ignored'}); + } + return; + } + elsif (defined($text_macros{$macro})) + { + my $tag; + ($_, $tag) = do_text_macro($macro, $_, $state, $stack, $line_nr); + # if it is a raw formatting command or a menu command + # we must keep it for later, unless we are in an 'ignored'. + # if in 'arg_expansion' we keep everything. + my $macro_kept; + if ((($state->{'raw'} or (($macro eq 'menu') and $text_macros{'menu'}) or (exists($region_lines{$macro}))) and !$state->{'ignored'}) or $state->{'arg_expansion'}) + { + add_prev($text, $stack, $tag); + $macro_kept = 1; + } + #dump_stack ($text, $stack, $state); + next if $macro_kept; + return if (/^\s*$/); + } + elsif ($macro eq 'documentencoding') + { + my $spaces = ''; + my $encoding = ''; + if (s/(\s+)([0-9\w\-]+)//) + { + $spaces = $1; + $encoding = $2; + next if ($state->{'ignored'}); + if (!$state->{'arg_expansion'} and !$state->{'ignored'}) + { + $Texi2HTML::Config::DOCUMENT_ENCODING = $encoding; + my $from_encoding = encoding_alias($encoding); + $Texi2HTML::Config::IN_ENCODING = $from_encoding if + defined($from_encoding); + if (defined($from_encoding) and $Texi2HTML::Config::USE_UNICODE) + { + foreach my $file (@fhs) + { + binmode($file->{'fh'}, ":encoding($from_encoding)"); + } + } + } + }# ARG_EXPANSION + add_prev($text, $stack, "\@$macro" . $spaces . $encoding) unless ($state->{'ignored'}); + } + elsif ($macro eq 'definfoenclose') + { + # FIXME if 'ignored' or 'arg_expansion' maybe we could parse + # the args anyway and don't take away the whole line? + + # as in the makeinfo doc 'definfoenclose' may override + # texinfo @-commands like @i. It is what we do here. + if ($state->{'arg_expansion'}) + { + add_prev($text, $stack, "\@$macro" . $_); + return; + } + return if ($state->{'ignored'}); + if (s/^\s+([a-z]+)\s*,\s*([^\s]+)\s*,\s*([^\s]+)//) + { + $info_enclose{$1} = [ $2, $3 ]; + } + else + { + echo_error("Bad \@$macro", $line_nr); + } + return if (/^\s*$/); + s/^\s*//; + } + elsif ($macro eq 'include') + { + if ($state->{'arg_expansion'}) + { + add_prev($text, $stack, "\@$macro" . $_); + return; + } + return if ($state->{'ignored'}); + #if (s/^\s+([\/\w.+-]+)//o) + if (s/^(\s+)(.*)//o) + { + my $file_name = $2; + $file_name =~ s/\s*$//; + my $file = locate_include_file($file_name); + if (defined($file)) + { + open_file($file, $line_nr); + print STDERR "# including $file\n" if $T2H_VERBOSE; + } + else + { + echo_error ("Can't find $file_name, skipping", $line_nr); + } + } + else + { + echo_error ("Bad include line: $_", $line_nr); + return; + } + return; + } + elsif ($macro eq 'value') + { + if (s/^{($VARRE)}//) + { + my $value = $1; + if ($state->{'arg_expansion'}) + { + add_prev($text, $stack, "\@$macro" .'{'. $value .'}'); + next; + } + next if ($state->{'ignored'}); + my $expansion = "No value for $value"; + $expansion = $value{$value} if (defined($value{$value})); + $_ = $expansion . $_; + } + else + { + if ($state->{'arg_expansion'}) + { + add_prev($text, $stack, "\@$macro"); + next; + } + next if ($state->{'ignored'}); + echo_error ("bad \@value macro", $line_nr); + } + } + elsif ($macro eq 'unmacro') + { #FIXME with 'arg_expansion' should it be passed unmodified ? + if ($state->{'ignored'}) + { + s/^\s+(\w+)//; + } + else + { + delete $macros->{$1} if (s/^\s+(\w+)//); + } + return if (/^\s*$/); + s/^\s*//; + } + elsif (exists($macros->{$macro})) + {# it must be before the handling of {, otherwise it is considered + # to be regular texinfo @-command. Maybe it could be placed higher + # if we want user defined macros to override texinfo @-commands + + # in 'ignored' we parse macro defined args anyway as it removes + # some text, but we don't expand the macro + + my $ref = $macros->{$macro}->{'args'}; + # we remove any space/new line before the argument + if (s/^\s*{\s*//) + { # the macro has args + $state->{'macro_args'} = [ "" ]; + $state->{'macro_name'} = $macro; + $state->{'macro_depth'} = 1; + } + elsif (($#$ref >= 1) or ($#$ref <0)) + { # no brace -> no arg + $_ = expand_macro ($macro, [], $_, $line_nr, $state); + return; + } + else + { # macro with one arg on the line + chomp $_; + $_ = expand_macro ($macro, [$_], "\n", $line_nr, $state); + return; + } + } + elsif ($macro eq ',') + {# the @, causes problems when `,' separates things (in @node, @ref) + $_ = "\@m_cedilla" . $_; + } # handling of @, must be done before handling of { + elsif (s/^{//) + {# we add nested commands in a stack. verb is also on the stack + # but handled specifically. + # we add it the comands even in 'ignored' as their result is + # discarded when the closing brace appear, or the ifset or + # iclear is closed. + if ($macro eq 'verb') + { + if (/^$/) + { + echo_error ("without associated character", $line_nr); + #warn "$ERROR verb at end of line"; + } + else + { + s/^(.)//; + $state->{'verb'} = $1; + } + } + push (@$stack, { 'style' => $macro, 'text' => '' }); + } + else + { + add_prev($text, $stack, "\@$macro") unless($state->{'ignored'}); + } + next; + } + #elsif(s/^([^{}@]*)\@(.)//o) + elsif(s/^([^{}@]*)\@([^\s\}\{\@]*)//o) + {# ARG_EXPANSION + # No need to warn here for @ followed by a character that + # is not in any @-command and it is done later + add_prev($text, $stack, $1 . "\@$2") unless($state->{'ignored'}); + next; + } + elsif (s/^([^{}]*)([{}])//o) + { + # in ignored section we cannot be sure that there is an @-command + # allready opened so we must discard the text. + # ARG_EXPANSION + add_prev($text, $stack, $1) unless($state->{'ignored'}); + if ($2 eq '{') + { + # this empty style is for a lone brace. + # we add it even in 'ignored' as it is discarded when the closing + # brace appear, or the ifset or iclear is closed. + push @$stack, { 'style' => '', 'text' => '' }; + } + else + { + if (@$stack) + { + my $style = pop @$stack; + my $result; + if (($style->{'style'} ne '') and exists($info_enclose{$style->{'style'}}) and !$state->{'arg_expansion'}) + { + $result = $info_enclose{$style->{'style'}}->[0] . $style->{'text'} . $info_enclose{$style->{'style'}}->[1]; + } + elsif ($style->{'style'} ne '') + { + $result = '@' . $style->{'style'} . '{' . $style->{'text'} . '}'; + } + else + { + $result = '{' . $style->{'text'}; + # don't close { if we are closing stack as we are not + # sure this is a { ... } construct. i.e. we are + # not sure that the user properly closed the matching + # brace, so we don't close it ourselves + $result .= '}' unless ($state->{'close_stack'} or $state->{'arg_expansion'}); + } + if ($state->{'ignored'}) + {# ARG_EXPANSION + print STDERR "# Popped `$style->{'style'}' in ifset/ifclear\n" if ($T2H_DEBUG); + next; + } + add_prev ($text, $stack, $result); + #print STDERR "MACRO end $style->{'style'} remaining: $_"; + next; + } + else + {# ARG_EXPANSION + # we warn in the last pass that there is a } without open + add_prev ($text, $stack, '}') unless($state->{'ignored'}); + } + } + } + else + {# ARG_EXPANSION + #print STDERR "END_LINE $_"; + add_prev($text, $stack, $_) unless($state->{'ignored'}); + last; + } + } + return undef if ($state->{'ignored'}); + return 1; +} + +sub close_structure_command($$$$) +{ + my $cmd_ref = shift; + my $state = shift; + my $unclosed_commands = shift; + my $line_nr = shift; + my $result; + + if ($cmd_ref->{'style'} eq 'anchor') + { + my $anchor = $cmd_ref->{'text'}; + $anchor = normalise_node($anchor); + if ($nodes{$anchor}) + { + echo_error ("Duplicate node for anchor found: $anchor", $line_nr); + return ''; + } + $anchor_num++; + $nodes{$anchor} = { 'anchor' => 1, 'seen' => 1, 'texi' => $anchor, 'id' => 'ANC' . $anchor_num}; + push @{$state->{'place'}}, $nodes{$anchor}; + } + elsif ($cmd_ref->{'style'} eq 'footnote') + { + if ($Texi2HTML::Config::SEPARATED_FOOTNOTES) + { + $state->{'element'} = $state->{'footnote_element'}; + $state->{'place'} = $state->{'footnote_place'}; + } + } + elsif ($cmd_ref->{'style'} eq 'caption' or $cmd_ref->{'style'} + eq 'shortcaption' and $state->{'float'}) + { + my @texi_lines = map {$_ = $_."\n"} split (/\n/, $cmd_ref->{'text'}); + $state->{'float'}->{$cmd_ref->{'style'} . "_texi"} = \@texi_lines; + } + if (($cmd_ref->{'style'} eq 'titlefont') and ($cmd_ref->{'text'} =~ /\S/)) + { + $state->{'element'}->{'titlefont'} = $cmd_ref->{'text'} unless ((exists($state->{'region_lines'}) and ($state->{'region_lines'}->{'format'} eq 'titlepage')) or defined($state->{'element'}->{'titlefont'})) ; + } + if (defined($Texi2HTML::Config::command_handler{$cmd_ref->{'style'}})) + { + $result = init_special($cmd_ref->{'style'},$cmd_ref->{'text'}); + if ($unclosed_commands) + { + $result .= "\n"; # the end of line is eaten by init_special + echo_error("Closing specially handled \@-command $cmd_ref->{'style'}",$line_nr); + } + } + elsif ($cmd_ref->{'style'}) + { + $result = '@' . $cmd_ref->{'style'} . '{' . $cmd_ref->{'text'}; + $result .= '}' unless ($unclosed_commands); + } + else + { + $result = '{' . $cmd_ref->{'text'}; + # don't close { if we are closing stack as we are not + # sure this is a licit { ... } construct. + $result .= '}' unless ($unclosed_commands); + } + return $result; +} + +sub scan_structure($$$$;$) +{ + my $line = shift; + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + + die "stack not an array ref" unless (ref($stack) eq "ARRAY"); + local $_ = $line; + #print STDERR "SCAN_STRUCTURE: $line"; + #dump_stack ($text, $stack, $state); + if (!$state->{'raw'} and (!exists($state->{'region_lines'}))) + { + if (!$state->{'verb'} and $state->{'menu'} and /^\*/o) + { + # new menu entry + delete ($state->{'after_element'}); + my $menu_line = $_; + my $node; + if (/^\*\s+($NODERE)::/) + { + $node = $1; + } + elsif (/^\*\s+([^:]+):\s*([^\t,\.\n]+)[\t,\.\n]/) + { + #$name = $1; + $node = $2; + } + if ($node) + { + menu_entry_texi(normalise_node($node), $state, $line_nr); + } + } + unless (no_line($_)) + { + delete $state->{'after_element'}; + } + } + + while(1) + { + # scan structure + #print STDERR "WHILE (s):$_"; + #dump_stack($text, $stack, $state); + + # as texinfo 4.5 + # verbatim might begin at another position than beginning + # of line, and end verbatim might too. To end a verbatim section + # @end verbatim must have exactly one space between end and verbatim + # things following end verbatim are not ignored. + # + # html might begin at another position than beginning + # of line, but @end html must begin the line, and have + # exactly one space. Things following end html are ignored. + # tex and ignore works like html + # + # ifnothtml might begin at another position than beginning + # of line, and @end ifnothtml might too, there might be more + # than one space between @end and ifnothtml but nothing more on + # the line. + # @end itemize, @end ftable works like @end ifnothtml. + # except that @item on the same line than @end vtable doesn't work + # + # text right after the itemize before an item is displayed. + # @item might be somewhere in a line. + # strangely @item on the same line than @end vtable doesn't work + # there should be nothing else than a command following @itemize... + # + # see more examples in formatting directory + + if ($state->{'raw'}) + { + my $tag = $state->{'raw'}; + ################# debug + if (! @$stack or ($stack->[-1]->{'style'} ne $tag)) + { + print STDERR "Bug: raw or special: $tag but not on top of stack\n"; + print STDERR "line: $_"; + dump_stack($text, $stack, $state); + exit 1; + } + ################# end debug + if (s/^(.*?)\@end\s$tag$// or s/^(.*?)\@end\s$tag\s//) + { + add_prev ($text, $stack, $1); + delete $state->{'raw'}; + my $style = pop @$stack; + if (defined($Texi2HTML::Config::command_handler{$tag})) + { # replace the special region by what init_special give + if ($style->{'text'} !~ /^\s*$/) + { + add_prev ($text, $stack, init_special($style->{'style'}, $style->{'text'})); + } + + } + else + { + my $after_macro = ''; + $after_macro = ' ' unless (/^\s*$/); + add_prev ($text, $stack, $style->{'text'} . "\@end $tag" . $after_macro); + } + unless (no_line($_)) + { + delete ($state->{'after_element'}); + } + next; + } + else + { + add_prev ($text, $stack, $_); + return if (defined($Texi2HTML::Config::command_handler{$tag})); + last; + } + } + + if (defined($state->{'verb'})) + { + my $char = quotemeta($state->{'verb'}); + if (s/^(.*?)$char\}/\}/) + { + add_prev($text, $stack, $1 . $state->{'verb'}); + $stack->[-1]->{'text'} = $state->{'verb'} . $stack->[-1]->{'text'}; + delete $state->{'verb'}; + next; + } + else + { + add_prev($text, $stack, $_); + last; + } + } + + unless (no_line($_)) + { + delete $state->{'after_element'}; + } + # macro_regexp + if (s/^([^{}@]*)\@end\s+([a-zA-Z][\w-]*)//) + { + add_prev($text, $stack, $1); + my $end_tag = $2; + #print STDERR "END STRUCTURE $end_tag\n"; + $state->{'detailmenu'}-- if ($end_tag eq 'detailmenu' and $state->{'detailmenu'}); + if (defined($state->{'text_macro_stack'}) + and @{$state->{'text_macro_stack'}} + and ($end_tag eq $state->{'text_macro_stack'}->[-1])) + { + pop @{$state->{'text_macro_stack'}}; + if (exists($region_lines{$end_tag})) + { # end a region_line macro, like documentdescription, copying + print STDERR "Bug: end_tag $end_tag ne $state->{'region_lines'}->{'format'}" + if ( $end_tag ne $state->{'region_lines'}->{'format'}); + $state->{'region_lines'}->{'number'}--; + if ($state->{'region_lines'}->{'number'} == 0) + { + close_region($state); + } + #dump_stack($text, $stack, $state); + } + if ($end_tag eq 'menu') + { + add_prev($text, $stack, "\@end $end_tag"); + $state->{'menu'}--; + } + else + { + #print STDERR "End $end_tag\n"; + #dump_stack($text, $stack, $state); + return if (/^\s*$/); + } + } + elsif ($text_macros{$end_tag}) + { + echo_error ("\@end $end_tag without corresponding element", $line_nr); + #dump_stack($text, $stack, $state); + } + else + { + if ($end_tag eq 'float' and $state->{'float'}) + { + delete $state->{'float'}; + } + elsif ($end_tag eq $state->{'table_stack'}->[-1]) + { + enter_table_index_entry($text, $stack, $state, $line_nr); + pop @{$state->{'table_stack'}}; + } + #add end tag + add_prev($text, $stack, "\@end $end_tag"); + } + next; + } + #elsif (s/^([^{}@]*)\@([a-zA-Z]\w*|["'~\@\}\{,\.!\?\s\*\-\^`=:\/])//o) + # macro_regexp + elsif (s/^([^{}@]*)\@(["'~\@\}\{,\.!\?\s\*\-\^`=:\|\/])//o or s/^([^{}@]*)\@([a-zA-Z][\w-]*)([\s\{\}\@])/$3/o or s/^([^{}@]*)\@([a-zA-Z][\w-]*)$//o) + { + add_prev($text, $stack, $1); + my $macro = $2; + #print STDERR "MACRO $macro\n"; + if (defined($Texi2HTML::Config::misc_command{$macro})) + { + my $line; + ($_, $line) = misc_command_structure($_, $macro, $state, + $line_nr); + add_prev ($text, $stack, "\@$macro".$line); + next; + } + + if ($macro =~ /^(\w+?)index/ and ($1 ne 'print') and ($1 ne 'syncode') and ($1 ne 'syn') and ($1 ne 'def') and ($1 ne 'defcode')) + { + my $index_prefix = $1; + my $key = $_; + $key =~ s/^\s*//; + $_ = substitute_texi_line($_); + enter_index_entry($index_prefix, $line_nr, $key, $state->{'place'}, $state->{'element'}, $state->{'after_element'}, $macro); + add_prev ($text, $stack, "\@$macro" . $_); + last; + } + elsif (defined($text_macros{$macro})) + { + #print STDERR "TEXT_MACRO: $macro\n"; + if ($text_macros{$macro} eq 'raw') + { + $state->{'raw'} = $macro; + #print STDERR "RAW\n"; + } + elsif ($format_type{$macro} and $format_type{$macro} eq 'menu') + { + $state->{'menu'}++; + delete ($state->{'prev_menu_node'}); + push @{$state->{'text_macro_stack'}}, $macro; + #print STDERR "MENU (text_macro_stack: @{$state->{'text_macro_stack'}})\n"; + } + elsif (exists($region_lines{$macro})) + { + if (exists($state->{'region_lines'}) and ($state->{'region_lines'}->{'format'} ne $macro)) + { + echo_error("\@$macro not allowed within $state->{'region_lines'}->{'format'}", $line_nr); + next; + } + if (!exists($state->{'region_lines'})) + { + $state->{'region_lines'}->{'format'} = $macro; + $state->{'region_lines'}->{'number'} = 1; + $state->{'region_lines'}->{'after_element'} = 1 if ($state->{'after_element'}); + $state->{'region_lines'}->{'kept_place'} = $state->{'place'}; + $state->{'place'} = $region_place; + } + else + { + $state->{'region_lines'}->{'number'}++; + } + push @{$state->{'text_macro_stack'}}, $macro; + } + # if it is a raw formatting command or a menu command + # we must keep it for later + my $macro_kept; + if (($state->{'raw'} and (!defined($Texi2HTML::Config::command_handler{$macro}))) or ($macro eq 'menu')) + { + add_prev($text, $stack, "\@$macro"); + $macro_kept = 1; + } + if ($state->{'raw'}) + { + push @$stack, { 'style' => $macro, 'text' => '' }; + } + next if $macro_kept; + #dump_stack ($text, $stack, $state); + return if (/^\s*$/); + } + elsif ($macro eq 'float') + { + my ($style_texi, $label_texi) = split(/,/, $_); + $style_texi = normalise_space($style_texi); + $label_texi = undef if (defined($label_texi) and ($label_texi =~ /^\s*$/)); + if (defined($label_texi)) + { # The float may be a target for refs if it has a label + $label_texi = normalise_node($label_texi); + if (exists($nodes{$label_texi}) and defined($nodes{$label_texi}) + and $nodes{$label_texi}->{'seen'}) + { + echo_error ("Duplicate label found: $label_texi", $line_nr); + while ($_ =~ /,/) + { + $_ =~ s/,.*$//; + } + } + else + { + my $float = { }; + if (exists($nodes{$label_texi}) and defined($nodes{$label_texi})) + { # float appeared in a menu + $float = $nodes{$label_texi}; + } + else + { + $nodes{$label_texi} = $float; + } + $float->{'float'} = 1; + $float->{'tag'} = 'float'; + $float->{'texi'} = $label_texi; + $float->{'seen'} = 1; + $float->{'id'} = $label_texi; +#print STDERR "FLOAT: $float $float->{'texi'}, place $state->{'place'}\n"; + push @{$state->{'place'}}, $float; + $float->{'element'} = $state->{'element'}; + $state->{'float'} = $float; + $float->{'style_texi'} = $style_texi; + push @floats, $float; + } + } + add_prev($text, $stack, "\@$macro" . $_); + last; + } + elsif (defined($Texi2HTML::Config::def_map{$macro})) + { + #We must enter the index entries + my ($prefix, $entry, $argument) = get_deff_index($macro, $_, $line_nr); + # use deffn instead of deffnx for @-command record + # associated with index entry + my $idx_macro = $macro; + $idx_macro =~ s/x$//; + enter_index_entry($prefix, $line_nr, $entry, $state->{'place'}, + $state->{'element'}, 0, $idx_macro) if ($prefix); + s/(.*)//; + add_prev($text, $stack, "\@$macro" . $1); + # the text is discarded but we must handle correctly bad + # texinfo with 2 @def-like commands on the same line + substitute_text({'structure' => 1, 'place' => $state->{'place'} },($argument)); + } + elsif ($macro =~ /^itemx?$/) + { + enter_table_index_entry($text, $stack, $state, $line_nr); + if ($state->{'table_stack'}->[-1] =~ /^(v|f)table$/) + { + $state->{'item'} = $macro; + push @$stack, { 'format' => 'index_item', 'text' => "" }; + } + else + { + add_prev($text, $stack, "\@$macro"); + } + } + elsif ($format_type{$macro} and ($format_type{$macro} eq 'table' or $format_type{$macro} eq 'list')) + { # We must enter the index entries of (v|f)table thus we track + # in which table we are + push @{$state->{'table_stack'}}, $macro; + add_prev($text, $stack, "\@$macro"); + } + elsif (s/^{//) + { + if ($macro eq 'verb') + { + if (/^$/) + { + # We allready warned in pass texi + #warn "$ERROR verb at end of line"; + } + else + { + s/^(.)//; + $state->{'verb'} = $1; + } + } + elsif ($macro eq 'footnote' and $Texi2HTML::Config::SEPARATED_FOOTNOTES) + { + $state->{'footnote_element'} = $state->{'element'}; + $state->{'footnote_place'} = $state->{'place'}; + $state->{'element'} = $footnote_element; + $state->{'place'} = $footnote_element->{'place'}; + } + push (@$stack, { 'style' => $macro, 'text' => '' }); + } + else + { + add_prev($text, $stack, "\@$macro"); + } + next; + } + #elsif(s/^([^{}@]*)\@(.)//o) + elsif(s/^([^{}@]*)\@([^\s\}\{\@]*)//o) + { + add_prev($text, $stack, $1 . "\@$2"); + next; + } + elsif (s/^([^{}]*)([{}])//o) + { + add_prev($text, $stack, $1); + if ($2 eq '{') + { + push @$stack, { 'style' => '', 'text' => '' }; + } + else + { + if (@$stack) + { + my $style = pop @$stack; + my $result; + add_prev ($text, $stack, close_structure_command($style, + $state, 0, $line_nr)); + next; + } + else + { + # We warn in the last pass + #warn "$ERROR '}' without opening '{' line: $line"; + #echo_error ("'}' without opening '{' line: $line", $line_nr); + add_prev ($text, $stack, '}'); + } + } + } + else + { + #print STDERR "END_LINE $_"; + add_prev($text, $stack, $_); + enter_table_index_entry($text, $stack, $state, $line_nr); + last; + } + } + return 1; +} + +sub scan_line($$$$;$) +{ + my $line = shift; + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + + die "stack not an array ref" unless (ref($stack) eq "ARRAY"); + local $_ = $line; + #print STDERR "SCAN_LINE (@{$state->{'command_stack'}}): $line"; + #dump_stack($text, $stack, $state ); + my $new_menu_entry; # true if there is a new menu entry + my $menu_description_in_format; # true if we are in a menu description + # but in another format section (@table....) + if (defined($state->{'prepend_text'})) + { + $_ = $state->{'prepend_text'} . $_; + $state->{'prepend_text'} = undef; + delete $state->{'prepend_text'}; + } + + unless ($state->{'end_of_line_protected'} and $state->{'deff_line'}) + { # end of lines are really protected only for @def* + if (!$state->{'raw'} and !$state->{'verb'} and $state->{'menu'}) + { # new menu entry + my ($node, $name, $ending); + if (s/^\*(\s+$NODERE)(::)//o) + { + $node = $1; + $ending = $2; + } + elsif (s/^\*(\s+[^:]+):(\s*[^\t,\.\n]+)([\t,\.\n])//o) + { + $name = $1; + $node = $2; + $ending = $3; + } + if ($node) + { + my $top_stack = top_stack($stack); + if ($top_stack and $top_stack->{'format'} and + ( + ($top_stack->{'format'} eq 'menu_description') or + ($top_stack->{'format'} eq 'menu') or + (($top_stack->{'format'} eq 'preformatted') and (stack_order($stack, 'preformatted', 'menu_comment'))) or + ($top_stack->{'format'} eq 'menu_preformatted') or + ($top_stack->{'format'} eq 'menu_comment') + ) + ) + { # we are in a normal menu state. + close_menu($text, $stack, $state, $line_nr); + $new_menu_entry = 1; + $state->{'menu_entry'} = { 'name' => $name, 'node' => $node, + 'ending' => $ending }; + add_prev ($text, $stack, do_menu_link($state, $line_nr)); + print STDERR "# New menu entry: $node\n" if ($T2H_DEBUG & $DEBUG_MENU); + push @$stack, {'format' => 'menu_description', 'text' => ''}; + } + else + { # we are within a macro or a format. In that case we use + # a simplified formatting of menu which should be right whatever + # the context + my $menu_entry = $state->{'menu_entry'}; + $state->{'menu_entry'} = { 'name' => $name, 'node' => $node, + 'ending' => $ending }; + add_prev ($text, $stack, do_menu_link($state, $line_nr, 1)); + $state->{'menu_entry'} = $menu_entry; + } + } + } + # we're in a menu entry description + if ($state->{'menu_entry'} and !$new_menu_entry) + { + my $top_stack = top_stack($stack); + if (/^\s+\S.*$/ or (!$top_stack->{'format'} or ($top_stack->{'format'} ne 'menu_description'))) + { # description continues + $menu_description_in_format = 1 if ($top_stack->{'format'} and ($top_stack->{'format'} ne 'menu_description')); + print STDERR "# Description continues\n" if ($T2H_DEBUG & $DEBUG_MENU); + } + else + { # enter menu comment after menu entry + ################################ begin debug + if (!$top_stack->{'format'} or ($top_stack->{'format'} ne 'menu_description')) + { + print STDERR "Bug: begin menu comment but previous isn't menu_description\n"; + dump_stack ($text, $stack, $state); + } + print STDERR "# Menu comment begins\n" if ($T2H_DEBUG & $DEBUG_MENU); + ################################ end debug + my $descr = pop(@$stack); + + add_prev ($text, $stack, do_menu_description($descr->{'text'}, $state)); + delete $state->{'menu_entry'}; + unless (/^\s*\@end\s+menu\b/) + { + $state->{'menu_comment'}++; + push @$stack, {'format' => 'menu_comment', 'text' => ''}; + unless ($Texi2HTML::Config::SIMPLE_MENU) + { + push @{$state->{'preformatted_stack'}}, {'pre_style' => $Texi2HTML::Config::MENU_PRE_STYLE, 'class' => 'menu-comment' }; + $state->{'preformatted'}++; + begin_paragraph($stack, $state); + } + } + } + } + if (($state->{'menu_entry'} and !$menu_description_in_format) or $state->{'raw'} or $state->{'preformatted'} or $state->{'no_paragraph'} or $state->{'keep_texi'} or $state->{'remove_texi'}) + { # empty lines are left unmodified + if (/^\s*$/) + { + add_prev($text, $stack, $_); + return; + } + elsif (!$state->{'raw'}) + { + my $next_tag = next_tag($_); + if ($state->{'deff_line'} and !defined($Texi2HTML::Config::def_map{$next_tag})) + { + begin_deff_item($stack, $state); + } + } + } + else + { + if (/^\s*$/) + { + if ($state->{'paragraph_context'}) + { # An empty line ends a paragraph + close_paragraph($text, $stack, $state, $line_nr); + } + add_prev($text, $stack, &$Texi2HTML::Config::empty_line($_,$state)); + return 1; + } + else + { + #print STDERR "a line not empty and not in no paragraph format\n"; + my $next_tag = next_tag($_); + if ($state->{'deff_line'} and !defined($Texi2HTML::Config::def_map{$next_tag})) + { # finish opening the deff, as this is not a deff tag, it can't be + # a deff macro with x + begin_deff_item($stack, $state); + } + if (!no_paragraph($state,$_)) + { # open a paragraph, unless the line begins with a macro that + # shouldn't trigger a paragraph opening + begin_paragraph($stack, $state); + } + } + } + } + delete $state->{'end_of_line_protected'} + if ($state->{'end_of_line_protected'}); + + while(1) + { + # scan_line + #print STDERR "WHILE (l): $_|"; + #dump_stack($text, $stack, $state); + # we're in a raw format (html, tex if !L2H, verbatim) + if (defined($state->{'raw'})) + { + (dump_stack($text, $stack, $state), die "Bug for raw ($state->{'raw'})") if (! @$stack or ! ($stack->[-1]->{'style'} eq $state->{'raw'})); + if (s/^(.*?)\@end\s$state->{'raw'}$// or s/^(.*?)\@end\s$state->{'raw'}\s+//) + # don't protect html, it is done by Texi2HTML::Config::raw if needed + { + print STDERR "# end raw $state->{'raw'}\n" if ($T2H_DEBUG & $DEBUG_FORMATS); + add_prev ($text, $stack, $1); + my $style = pop @$stack; + if ($style->{'text'} !~ /^\s*$/) + { + if ($state->{'keep_texi'}) + { + add_prev ($text, $stack, $style->{'text'} . "\@end $state->{'raw'}"); + } + elsif ($state->{'remove_texi'}) + { + add_prev ($text, $stack, &$Texi2HTML::Config::raw_no_texi($style->{'style'}, $style->{'text'})); + } + else + { + add_prev($text, $stack, &$Texi2HTML::Config::raw($style->{'style'}, $style->{'text'})); + } + } + if (!$state->{'keep_texi'} and !$state->{'remove_texi'}) + { + # reopen preformatted if it was interrupted by the raw format + # if raw format is html the preformatted wasn't interrupted + begin_paragraph($stack, $state) if ($state->{'preformatted'} and (!$Texi2HTML::Config::format_in_paragraph{$state->{'raw'}})); + delete $state->{'raw'}; + return if (/^\s*$/); + } + delete $state->{'raw'}; + next; + } + else + { + print STDERR "#within raw $state->{'raw'}:$_" if ($T2H_DEBUG & $DEBUG_FORMATS); + add_prev ($text, $stack, $_); + last; + } + } + + # we are within a @verb + if (defined($state->{'verb'})) + { + my $char = quotemeta($state->{'verb'}); + if (s/^(.*?)$char\}/\}/) + { + if ($state->{'keep_texi'}) + { + add_prev($text, $stack, $1 . $state->{'verb'}); + $stack->[-1]->{'text'} = $state->{'verb'} . $stack->[-1]->{'text'}; + } + elsif ($state->{'remove_texi'}) + { + add_prev($text, $stack, $1); + } + else + { + add_prev($text, $stack, do_text($1, $state)); + } + delete $state->{'verb'}; + next; + } + else + { + add_prev($text, $stack, $_); + last; + } + } + + # a special case for @ followed by an end of line in deff + # FIXME this is similar with makeinfo, but shouldn't that + # be done for @floats and @quotations too? and @item, @center? + # this piece of code is required, to avoid the 'cmd_line' to be + # closed below + if ($state->{'end_of_line_protected'} and $state->{'deff_line'}) + { + print STDERR "Bug: 'end_of_line_protected' with text following: $_\n" + unless /^$/; + return; + } + + # We handle now the end tags + # macro_regexp + if ($state->{'keep_texi'} and s/^([^{}@]*)\@end\s+([a-zA-Z][\w-]*)//) + { + my $end_tag = $2; + add_prev($text, $stack, $1 . "\@end $end_tag"); + next; + } + # macro_regexp + elsif ($state->{'remove_texi'} and s/^([^{}@]*)\@end\s+([a-zA-Z][\w-]*)//) + { + add_prev($text, $stack, $1); + next; + } + # macro_regexp + if (s/^([^{}@,]*)\@end\s+([a-zA-Z][\w-]*)\s//o or s/^([^{}@,]*)\@end\s+([a-zA-Z][\w-]*)$//o) + { + add_prev($text, $stack, do_text($1, $state)); + my $end_tag = $2; + #print STDERR "END_MACRO $end_tag\n"; + #dump_stack ($text, $stack, $state); + + # First we test if the stack is not empty. + # Then we test if the end tag is a format tag. + # We then close paragraphs and preformatted at top of the stack. + # We handle the end tag (even when it was not the tag which appears + # on the top of the stack; in that case we close anything + # until that element) + $state->{'detailmenu'}-- if ($end_tag eq 'detailmenu' and $state->{'detailmenu'}); + # FIXME handle below (look for misc_command) to let the user + # keep that end tag. On the other hand it is only used for + # end detailmenu, so maybe it should just go and detailmenu + # could be handled like a normal format. Last there could be + # something similar than what is done for other misc_commands. + next if (defined($Texi2HTML::Config::misc_command{"end $end_tag"})); + my $top_stack = top_stack($stack); + if (!$top_stack) + { + echo_error ("\@end $end_tag without corresponding opening", $line_nr); + add_prev($text, $stack, "\@end $end_tag"); + next; + } + + if (!$format_type{$end_tag}) + { + echo_warn ("Unknown \@end $end_tag", $line_nr); + #warn "$ERROR Unknown \@end $end_tag\n"; + add_prev($text, $stack, "\@end $end_tag"); + next; + } + unless ($Texi2HTML::Config::format_in_paragraph{$end_tag}) + { # If the $end_tag is wrong we may be keeping paragraph + # for a format with paragraphs on the stack + close_paragraph($text, $stack, $state, $line_nr); + } + + $top_stack = top_stack($stack); + if (!$top_stack or (!defined($top_stack->{'format'}))) + { + echo_error ("\@end $end_tag without corresponding opening element", $line_nr); + add_prev($text, $stack, "\@end $end_tag"); + dump_stack ($text, $stack, $state) if ($T2H_DEBUG); + next; + } + # Warn if the format on top of stack is not compatible with the + # end tag, and find the end tag. + unless ( + ($top_stack->{'format'} eq $end_tag) + or + ( + ($format_type{$end_tag} eq 'menu') and + ( + ($top_stack->{'format'} eq 'menu_preformatted') or + ($top_stack->{'format'} eq 'menu_comment') or + ($top_stack->{'format'} eq 'menu_description') + ) + ) or + ( + ($end_tag eq 'multitable') and + ( + ($top_stack->{'format'} eq 'cell') or + ($top_stack->{'format'} eq 'null') + ) + ) or + ( + ($format_type{$end_tag} eq 'list' ) and + ($top_stack->{'format'} eq 'item') + ) or + ( + ( + ($format_type{$end_tag} eq 'table') and + ($end_tag ne 'multitable') + ) and + ( + ($top_stack->{'format'} eq 'term') or + ($top_stack->{'format'} eq 'line') + ) + ) or + ( + (defined($Texi2HTML::Config::def_map{$end_tag})) and + ($top_stack->{'format'} eq 'deff_item') + ) or + ( + ($end_tag eq 'row') and + ($top_stack->{'format'} eq 'cell') + ) + ) + { + # this is not the right format. We try to close other + # formats to find the format we are searching for. + # First we close paragraphs, as with a wrong $end_format + # they may not be closed properly. + close_paragraph($text, $stack, $state, $line_nr); + $top_stack = top_stack($stack); + if (!$top_stack or (!defined($top_stack->{'format'}))) + { + echo_error ("\@end $end_tag without corresponding opening element", $line_nr); + add_prev($text, $stack, "\@end $end_tag"); + dump_stack ($text, $stack, $state) if ($T2H_DEBUG); + next; + } + my $waited_format = $top_stack->{'format'}; + $waited_format = $fake_format{$top_stack->{'format'}} if ($format_type{$top_stack->{'format'}} eq 'fake'); + echo_error ("waiting for end of $waited_format, found \@end $end_tag", $line_nr); + close_stack($text, $stack, $state, $line_nr, undef, $end_tag); + # an empty preformatted may appear when closing things as + # when closed, formats reopen the preformatted environment + # in case there is some text following, but we know it isn't + # the case here, thus we can close paragraphs. + close_paragraph($text, $stack, $state); + my $new_top_stack = top_stack($stack); + next unless ($new_top_stack and defined($new_top_stack->{'format'}) and (($new_top_stack->{'format'} eq $end_tag) + or (($format_type{$new_top_stack->{'format'}} eq 'fake') and ($fake_format{$new_top_stack->{'format'}} eq $format_type{$end_tag})))); + } + # We should now be able to handle the format + if (defined($format_type{$end_tag}) and $format_type{$end_tag} ne 'fake') + { + end_format($text, $stack, $state, $end_tag, $line_nr); + begin_paragraph_after_command($state,$stack,$end_tag,$_); + } + else + { # this is a fake format, ie a format used internally, inside + # a real format. We do nothing, hoping the real format will + # get closed, closing the fake internal formats + #print STDERR "FAKE \@end $end_tag\n"; + } + next; + } + # This is a macro + #elsif (s/^([^{}@]*)\@([a-zA-Z]\w*|["'~\@\}\{,\.!\?\s\*\-\^`=:\/])//o) + # macro_regexp + elsif (s/^([^{},@]*)\@(["'~\@\}\{,\.!\?\s\*\-\^`=:\|\/])//o or s/^([^{}@,]*)\@([a-zA-Z][\w-]*)([\s\{\}\@])/$3/o or s/^([^{},@]*)\@([a-zA-Z][\w-]*)$//o) + { + add_prev($text, $stack, do_text($1, $state)); + my $macro = $2; + #print STDERR "MACRO $macro\n"; + #print STDERR "LINE $_"; + #dump_stack ($text, $stack, $state); + # This is a macro added by close_stack to mark paragraph end + if ($macro eq 'end_paragraph') + { + s/^\{\}//; + my $top_stack = top_stack($stack); + #################################### debug + if (!$top_stack or !$top_stack->{'format'} + or ($top_stack->{'format'} ne 'paragraph')) + { + print STDERR "Bug: end_paragraph but no paragraph to end\n"; + dump_stack ($text, $stack, $state); + next; + } + #################################### end debug + s/^\s//; + my $paragraph = pop @$stack; + add_prev ($text, $stack, do_paragraph($paragraph->{'text'}, $state)); + next; + } + # Handle macro added by close_stack to mark preformatted region end + elsif ($macro eq 'end_preformatted') + { + #print STDERR "END_PREFORMATTED\n"; + s/^\{\}//; + my $top_stack = top_stack($stack); + #################################### debug + if (!$top_stack or !$top_stack->{'format'} + or ($top_stack->{'format'} ne 'preformatted')) + { + print STDERR "Bug: end_preformatted but no preformatted to end\n"; + dump_stack ($text, $stack, $state); + next; + } + #################################### end debug + my $paragraph = pop @$stack; + s/^\s//; + add_prev ($text, $stack, do_preformatted($paragraph->{'text'}, $state)); + next; + } + if (defined($Texi2HTML::Config::misc_command{$macro})) + { + # The strange condition associated with 'keep_texi' is + # there because for an argument appearing on an @itemize + # line (we're in 'check_item'), meant to be prepended to an + # @item we don't want to keep @c or @comment as otherwise it + # eats the @item line. Other commands could do that too but + # then the user deserves what he gets. + if ($state->{'keep_texi'} and + (!$state->{'check_item'} or ($macro ne 'c' and $macro ne 'comment'))) + { + my ($line, $args); + ($_, $line, $args) = preserve_command($_, $macro); + add_prev($text, $stack, "\@$macro". $line); + next; + } + + # Handle the misc command + $_ = misc_command_text($_, $macro, $stack, $state, $text, $line_nr); + return unless (defined($_)); + unless ($Texi2HTML::Config::misc_command{$macro}->{'keep'}) + { + begin_paragraph($stack, $state) if + (!no_paragraph($state,$_)); + next; + } + } + if ($macro eq 'listoffloats') + { + if ($state->{'keep_texi'}) + { + if (s/(.*)//o) + { + add_prev($text, $stack, "\@$macro" . $1); + } + next; + } + return undef if ($state->{'remove_texi'}); + + if (s/^(\s+)(.*)//o) + { + my $arg = $2; + my $style_id = cross_manual_line(normalise_space($arg)); + my $style = substitute_line (&$Texi2HTML::Config::listoffloats_style($arg)); + if (exists ($floats{$style_id})) + { + close_paragraph($text, $stack, $state, $line_nr); + my @listoffloats_entries = (); + foreach my $float (@{$floats{$style_id}->{'floats'}}) + { + my $float_style = substitute_line(&$Texi2HTML::Config::listoffloats_float_style($arg, $float)); + my $caption_lines = &$Texi2HTML::Config::listoffloats_caption($float); + # we set 'multiple_pass' such that index entries + # and anchors are not handled one more time; + # the caption has allready been formatted, + # and these have been handled at the right place + my $caption = substitute_text({ 'multiple_pass' => 1 }, @$caption_lines); + push @listoffloats_entries, &$Texi2HTML::Config::listoffloats_entry($arg, $float, $float_style, $caption, href($float, $state->{'element'}->{'file'})); + } + add_prev($text, $stack, &$Texi2HTML::Config::listoffloats($arg, $style, \@listoffloats_entries)); + } + else + { + echo_warn ("Unknown float style $arg", $line_nr); + } + } + else + { + echo_error ("Bad \@$macro line: $_", $line_nr); + } + return undef; + } + # This is a @macroname{...} construct. We add it on top of stack + # It will be handled when we encounter the '}' + # There is a special case for def macros as @deffn{def} is licit + if (!$Texi2HTML::Config::def_map{$macro} and s/^{//) + { + if ($macro eq 'verb') + { + if (/^$/) + { + # Allready warned + #warn "$ERROR verb at end of line"; + } + else + { + s/^(.)//; + $state->{'verb'} = $1; + } + } + elsif ($macro eq 'm_cedilla' and !$state->{'keep_texi'}) + { + $macro = ','; + } + # currently if remove_texi and anchor/ref/footnote + # the text within the command is ignored + # see t2h_remove_command in texi2html.init + push (@$stack, { 'style' => $macro, 'text' => '', 'arg_nr' => 0 }); + $state->{'no_paragraph'}++ if ($no_paragraph_macro{$macro}); + open_arg($macro, 0, $state); + if (defined($style_type{$macro}) and (($style_type{$macro} eq 'style') or ($style_type{$macro} eq 'accent'))) + { + push (@{$state->{'command_stack'}}, $macro); + #print STDERR "# Stacked $macro (@{$state->{'command_stack'}})\n" if ($T2H_DEBUG); + } + next; + } + + # special case if we are checking itemize line. In that case + # we want to make sure that there is no @item on the @itemize + # line, otherwise it will be added on the front of another @item, + # leading to an infinite loop... + + if ($state->{'check_item'} and ($macro =~ /^itemx?$/ or $macro eq 'headitem')) + { + echo_error("\@$macro on \@$state->{'check_item'} line", $line_nr); + next; + } + + # if we're keeping texi unmodified we can do it now + if ($state->{'keep_texi'}) + { + # We treat specially formats accepting {} on command line + if ($macro eq 'multitable' or defined($Texi2HTML::Config::def_map{$macro})) + { + add_prev($text, $stack, "\@$macro" . $_); + $_ = ''; + next; + } + # @ at the end of line may protect the end of line even when + # keeping texi + if ($macro eq "\n") + { + $state->{'end_of_line_protected'} = 1; + #print STDERR "PROTECTING END OF LINE\n"; + } + + add_prev($text, $stack, "\@$macro"); + if ($text_macros{$macro} and $text_macros{$macro} eq 'raw') + { + $state->{'raw'} = $macro; + push (@$stack, {'style' => $macro, 'text' => ''}); + } + next; + } + + # If we are removing texi, the following macros are not removed + # as is but modified. So they are collected first, as if we were + # in normal text + + # a raw macro beginning + if ($text_macros{$macro} and $text_macros{$macro} eq 'raw') + { + if (!$Texi2HTML::Config::format_in_paragraph{$macro}) + { # close paragraph before verbatim (and tex if !L2H) + close_paragraph($text, $stack, $state, $line_nr); + } + $state->{'raw'} = $macro; + push (@$stack, {'style' => $macro, 'text' => ''}); + return if (/^\s*$/); + next; + } + my $simple_macro = 1; + # An accent macro + if (exists($Texi2HTML::Config::accent_map{$macro})) + { + push (@{$state->{'command_stack'}}, $macro); + if (s/^(\S)//o) + { + add_prev($text, $stack, do_simple($macro, $1, $state, [ $1 ], $line_nr)); + } + else + { # The accent is at end of line + add_prev($text, $stack, do_text($macro, $state)); + } + pop @{$state->{'command_stack'}}; + } + # an @-command which should be like @command{}. We handle it... + elsif ($::things_map_ref->{$macro}) + { + echo_warn ("$macro requires {}", $line_nr); + add_prev($text, $stack, do_simple($macro, '', $state)); + } + # an @-command like @command + elsif (defined($::simple_map_ref->{$macro})) + { + add_prev($text, $stack, do_simple($macro, '', $state)); + } + else + { + $simple_macro = 0; + } + if ($simple_macro) + {# if the macro didn't triggered a paragraph start it might now + begin_paragraph($stack, $state) if + ($no_line_macros{$macro} and !no_paragraph($state,$_)); + next; + } + # the following macros are modified or ignored if we are + # removing texi, and they are not handled like macros in text + if ($state->{'remove_texi'}) + { + # handle specially some macros + if ((($macro =~ /^(\w+?)index$/) and ($1 ne 'print')) or + ($macro eq 'itemize') or ($macro =~ /^(|v|f)table$/) + or ($macro eq 'multitable') or ($macro eq 'quotation')) + { + return; + } + elsif ($macro eq 'enumerate') + { + my $spec; + ($_, $spec) = parse_enumerate ($_); + return if (/^\s*$/); + next; + } + elsif (defined($Texi2HTML::Config::def_map{$macro})) + { + my ($style, $category, $name, $type, $class, $arguments); + ($style, $category, $name, $type, $class, $arguments) = parse_def($macro, $_, $line_nr); + # FIXME -- --- ''... lead to simple text in texi2html + # while they are kept as is in html coments by makeinfo + $category = remove_texi($category) if (defined($category)); + $name = remove_texi($name) if (defined($name)); + $type = remove_texi($type) if (defined($type)); + $class = remove_texi($class) if (defined($class)); + $arguments = remove_texi($arguments) if (defined($arguments)); + chomp($arguments); + add_prev($text, $stack, &$Texi2HTML::Config::def_line_no_texi($category, $name, $type, $arguments)); + return; + } + + # ignore other macros + next; + } + + # handle the other macros, in the context of some normal text + if (($macro =~ /^(\w+?)index$/) and ($1 ne 'print')) + { + add_prev($text, $stack, do_index_entry_label($macro,$state,$line_nr)); + return; + } + if ($macro eq 'insertcopying') + { + close_paragraph($text, $stack, $state, $line_nr); + add_prev($text, $stack, do_insertcopying($state)); + # reopen a preformatted format if it was interrupted by the macro + begin_paragraph ($stack, $state) if ($state->{'preformatted'}); + return; + } + if ($macro =~ /^itemx?$/o or ($macro eq 'headitem')) + { + #print STDERR "ITEM: $_"; + #dump_stack($text, $stack, $state); + abort_empty_preformatted($stack, $state); + # FIXME let the user be able not to close the paragraph + close_paragraph($text, $stack, $state, $line_nr); + # these functions return the format if in the right context + my $format; + if ($format = add_item($text, $stack, $state, $line_nr, $_)) + { # handle lists + } + elsif ($format = add_term($text, $stack, $state, $line_nr)) + {# handle table @item line + } + elsif ($format = add_line($text, $stack, $state, $line_nr)) + {# handle table text + } + if ($format) + { + if (defined($format->{'prepended'})) + { + $_ = $format->{'prepended'} . ' ' . $_ if ($format->{'prepended'} ne ''); + } + if (defined($format->{'command'})) + { + open_arg($format->{'command'},0, $state); + } + next; + } + $format = add_row ($text, $stack, $state, $line_nr); # handle multitable + unless ($format) + { + echo_warn ("\@$macro outside of table or list", $line_nr); + next; + } + push @$stack, {'format' => 'row', 'text' => '', 'item_cmd' => $macro }; + if ($format->{'max_columns'}) + { + push @$stack, {'format' => 'cell', 'text' => ''}; + $format->{'cell'} = 1; + + begin_paragraph_after_command($state,$stack,$macro,$_); + } + else + { + echo_warn ("\@$macro in empty multitable", $line_nr); + } + next; + } + if ($macro eq 'tab') + { + abort_empty_preformatted($stack, $state); + # FIXME let the user be able not to close the paragraph + close_paragraph($text, $stack, $state, $line_nr); + my $format = add_cell ($text, $stack, $state); + #print STDERR "tab, $format->{'cell'}, max $format->{'max_columns'}\n"; + if (!$format) + { + echo_warn ("\@$macro outside of multitable", $line_nr); + } + elsif (!$format->{'max_columns'}) + { + echo_warn ("\@$macro in empty multitable", $line_nr); + push @$stack, {'format' => 'null', 'text' => ''}; + next; + } + elsif ($format->{'cell'} > $format->{'max_columns'}) + { + echo_warn ("too much \@$macro (multitable has only $format->{'max_columns'} column(s))", $line_nr); + push @$stack, {'format' => 'null', 'text' => ''}; + next; + } + else + { + push @$stack, {'format' => 'cell', 'text' => ''}; + } + begin_paragraph_after_command($state,$stack,$macro,$_); + next; + } + # Macro opening a format (table, list, deff, example...) + if ($format_type{$macro} and ($format_type{$macro} ne 'fake')) + { + unless ($Texi2HTML::Config::format_in_paragraph{$macro}) + { + close_paragraph($text, $stack, $state, $line_nr); + } + push (@{$state->{'command_stack'}}, $macro); + if ($format_type{$macro} eq 'menu') + { + close_menu($text, $stack, $state, $line_nr); + $state->{'menu'}++; + } + # A deff like macro + if (defined($Texi2HTML::Config::def_map{$macro})) + { + my $top_format = top_format($stack); + if (defined($top_format) and ("$top_format->{'format'}x" eq $macro)) + { + # the @DEFx macro has been put at the top of the + # command_stack, although there is no real format opening + pop @{$state->{'command_stack'}}; + $macro =~ s/x$//o; + if (!$state->{'deff_line'}) + {# DEFx macro within a DEF paragraph + close_stack($text, $stack, $state, $line_nr, undef, 'deff_item'); + my $format_ref = pop @$stack; + add_prev($text, $stack, &$Texi2HTML::Config::def_item($format_ref->{'text'})); + } + #print STDERR "DEFx $macro\n"; + } + else + { + # The previous @def command isn't the same @def + # command. We begin the item for the previous @def + # command and immediately open the new one. + begin_deff_item($stack, $state, 1) if ($state->{'deff_line'}); + $macro =~ s/x$//o; + # we remove what is on the stack and put it back, + # to make sure that it is the form without x. + pop @{$state->{'command_stack'}}; + push @{$state->{'command_stack'}}, $macro; + #print STDERR "DEF begin $macro\n"; + push @$stack, { 'format' => $macro, 'text' => '' }; + } + #print STDERR "BEGIN_DEFF $macro\n"; + #dump_stack ($text, $stack, $state); + $state->{'deff_line'}->{'command'} = $macro; + my ($style, $category, $name, $type, $class, $arguments); + ($style, $category, $name, $type, $class, $_) = parse_def($macro, $_, $line_nr); + #print STDERR "AFTER parse_def $_"; + # duplicate_state? + $state->{'deff_line'}->{'style'} = $style; + $state->{'deff_line'}->{'category'} = substitute_line($category) if (defined($category)); + $state->{'deff_line'}->{'category'} = '' if (!defined($category)); + # FIXME -- --- ''... are transformed to entities by + # makeinfo. It may be wrong. + $state->{'deff_line'}->{'name'} = substitute_line($name) if (defined($name)); + $state->{'deff_line'}->{'name'} = '' if (!defined($name)); + $state->{'deff_line'}->{'type'} = substitute_line($type) if (defined($type)); + $state->{'deff_line'}->{'class'} = substitute_line($class) if (defined($class)); + # the remaining of the line (the argument) + #print STDERR "DEFF: open_cmd_line do_def_line $_"; + open_cmd_line($stack, $state, ['keep'], \&do_def_line); + next; + } + elsif (exists ($Texi2HTML::Config::complex_format_map->{$macro})) + { # handle menu if SIMPLE_MENU. see texi2html.init + $state->{'preformatted'}++; + my $complex_format = $Texi2HTML::Config::complex_format_map->{$macro}; + my $format = { 'format' => $macro, 'text' => '', 'pre_style' => $complex_format->{'pre_style'} }; + my $class = $macro; + $class = $complex_format->{'class'} if (defined($complex_format->{'class'})); + push @{$state->{'preformatted_stack'}}, {'pre_style' =>$complex_format->{'pre_style'}, 'class' => $class }; + push @$stack, $format; + unless ($Texi2HTML::Config::format_in_paragraph{$macro}) + { + begin_paragraph($stack, $state); + } + } + elsif ($Texi2HTML::Config::paragraph_style{$macro}) + { + push (@$stack, { 'format' => $macro, 'text' => '' }); + begin_paragraph_after_command($state,$stack,$macro,$_); + push @{$state->{'paragraph_style'}}, $macro; + if ($macro eq 'center') + { + # @center may be in a weird state with regard with + # nesting, so we put it on the bottom of the stack + pop @{$state->{'command_stack'}}; + unshift @{$state->{'command_stack'}}, $macro; + # for similar reasons, we may have a bad stack nesting + # which results in } after a closing. For example + # @center @samp{something @center end of samp} + # results to samp being kept in the 'command_stack' + + # we keep the end of line for @center, to + # avoid the return in case there is only spaces + # which occurs for all the format commmands followed by + # spaces only + next; + } + } + elsif ($format_type{$macro} eq 'menu') + { + # if $Texi2HTML::Config::SIMPLE_MENU we won't get there + # as the menu is a complex format in that case, so it + # is handled above + push @$stack, { 'format' => $macro, 'text' => '' }; + if ($state->{'preformatted'}) + { + # Start a fake complex format in order to have a given pre style + $state->{'preformatted'}++; + push @$stack, { 'format' => 'menu_preformatted', 'text' => '', 'pre_style' => $Texi2HTML::Config::MENU_PRE_STYLE }; + push @{$state->{'preformatted_stack'}}, {'pre_style' => $Texi2HTML::Config::MENU_PRE_STYLE, 'class' => 'menu-preformatted' }; + } + } + elsif (($format_type{$macro} eq 'list') or ($format_type{$macro} eq 'table')) + { + my $format; + #print STDERR "LIST_TABLE $macro\n"; + #dump_stack($text, $stack, $state); + if (($macro eq 'itemize') or ($macro =~ /^(|v|f)table$/)) + { + my $command; + my $prepended; + ($prepended, $command) = parse_format_command($_,$macro); + $format = { 'format' => $macro, 'text' => '', 'command' => $command, 'prepended' => $prepended, 'term' => 0 }; + $_ = ''; + } + elsif ($macro eq 'enumerate') + { + my $spec; + ($_, $spec) = parse_enumerate ($_); + $spec = 1 if (!defined($spec)); + $format = { 'format' => $macro, 'text' => '', 'spec' => $spec, 'item_nr' => 0 }; + } + elsif ($macro eq 'multitable') + { + my $max_columns = parse_multitable ($_, $line_nr); + if (!$max_columns) + { + echo_warn ("empty multitable", $line_nr); + $max_columns = 0; + } + $format = { 'format' => $macro, 'text' => '', 'max_columns' => $max_columns, 'cell' => 1 }; + } + $format->{'first'} = 1; + $format->{'paragraph_number'} = 0; + push @$stack, $format; + push @{$state->{'table_list_stack'}}, $format; + if ($macro =~ /^(|v|f)table$/) + { + push @$stack, { 'format' => 'line', 'text' => ''}; + } + elsif ($macro eq 'multitable') + { + if ($format->{'max_columns'}) + { + push @$stack, { 'format' => 'row', 'text' => '', 'item_cmd' => $macro }; + push @$stack, { 'format' => 'cell', 'text' => ''}; + } + else + { + # multitable without row... We use the special null + # format which content is ignored + push @$stack, { 'format' => 'null', 'text' => ''}; + push @$stack, { 'format' => 'null', 'text' => ''}; + } + } + if ($format_type{$macro} eq 'list') + { + push @$stack, { 'format' => 'item', 'text' => ''}; + } + begin_paragraph_after_command($state,$stack,$macro,$_) + if ($macro ne 'multitable'); + return if ($format_type{$macro} eq 'table' or $macro eq 'itemize'); + } + elsif ($macro eq 'float' or $macro eq 'quotation') + { + push @$stack, {'format' => $macro, 'text' => '' }; + if ($macro eq 'float') + { + open_cmd_line($stack, $state, ['keep','keep'], \&do_float_line); + } + elsif ($macro eq 'quotation') + { + open_cmd_line($stack, $state, ['keep'], \&do_quotation_line); + } + #dump_stack($text, $stack, $state); + next; + } + # keep this one at the end as there are some other formats + # which are also in format_map + elsif (defined($Texi2HTML::Config::format_map{$macro}) or ($format_type{$macro} eq 'cartouche')) + { + push @$stack, { 'format' => $macro, 'text' => '' }; + begin_paragraph_after_command($state,$stack,$macro,$_); + } + return if (/^\s*$/); + next; + } + $_ = do_unknown ($macro, $_, $text, $stack, $state, $line_nr); + next; + } + elsif(s/^([^{}@,]*)\@([^\s\}\{\@]*)//o) + { # A macro with a character which shouldn't appear in macro name + add_prev($text, $stack, do_text($1, $state)); + $_ = do_unknown ($2, $_, $text, $stack, $state, $line_nr); + next; + } + elsif (s/^([^{},]*)([{}])//o or (@$stack and + defined($stack->[-1]->{'style'}) and + ($stack->[-1]->{'style'} eq 'cmd_line') and /^([^{},]*)$/o)) + { + my $leading_text = $1; + my $brace = $2; + add_prev($text, $stack, do_text($leading_text, $state)); + if (defined($brace) and ($brace eq '{')) + { + add_prev($text, $stack, do_text('{',$state)); + unless ($state->{'keep_texi'} or $state->{'remove_texi'}) + { + echo_error ("'{' without macro. Before: $_", $line_nr); + } + } + elsif (defined($brace) and ($brace eq '}') and + (!@$stack or (!defined($stack->[-1]->{'style'})) + # a non empty stack, but with 'cmd_line' as first item on the stack + # is like an empty stack + or ($stack->[-1]->{'style'} eq 'cmd_line'))) + { + if ($state->{'keep_texi'}) + { + add_prev($text, $stack, '}'); + } + else + { + echo_error("'}' without opening '{' before: $_", $line_nr); + } + } + else + { # A @-command{ ...} is closed + my $style = pop @$stack; + my $command = $style->{'style'}; + my $result; + if (ref($::style_map_ref->{$command}) eq 'HASH') + { + push (@{$style->{'args'}}, $style->{'text'}); + $style->{'fulltext'} .= $style->{'text'}; + #my $number = 0; + #foreach my $arg(@{$style->{'args'}}) + #{ + #print STDERR " $number: $arg\n"; + # $number++; + #} + $style->{'text'} = $style->{'fulltext'}; + $state->{'keep_texi'} = 0 if ( + ($::style_map_ref->{$command}->{'args'}->[$style->{'arg_nr'}] eq 'keep') + and ($state->{'keep_nr'} == 1)); + } + $state->{'no_paragraph'}-- if ($no_paragraph_macro{$command}); + if ($command) + { + $style->{'no_close'} = 1 if ($state->{'no_close'}); + if ($::style_map_ref->{$command} and (defined($style_type{$command})) and ((!$style->{'no_close'} and ($style_type{$command} eq 'style')) or ($style_type{$command} eq 'accent'))) + { + my $style_command = pop @{$state->{'command_stack'}}; + if ($style_command ne $command) + { + print STDERR "Bug: $style_command on 'command_stack', not $command\n"; + push @$stack, $style; + push @{$state->{'command_stack'}}, $style_command; + print STDERR "Stacks before pop top:\n"; + dump_stack($text, $stack, $state); + pop @$stack; + } + } + if ($state->{'keep_texi'}) + { # don't expand @-commands in anchor, refs... + close_arg ($command, $style->{'arg_nr'}, $state); + $result = '@' . $command . '{' . $style->{'text'} . '}'; + } + else + { + $result = do_simple($command, $style->{'text'}, $state, $style->{'args'}, $line_nr, $style->{'no_open'}, $style->{'no_close'}); + if ($state->{'code_style'} < 0) + { + echo_error ("Bug: negative code_style: $state->{'code_style'}, line:$_", $line_nr); + } + } + } + else + { + print STDERR "Bug: empty style in pass_text\n"; + } + add_prev($text, $stack, $result); + if ($command eq 'cmd_line') + { + if ($state->{'deff_line'}) + { +#print STDERR "DO DEFF $state->{'deff_line'}->{'command'} $state->{'deff_line'}->{'arguments'}\n"; + my $command = $state->{'deff_line'}->{'command'}; + my $def_style = $state->{'deff_line'}->{'style'}; + my $category = $state->{'deff_line'}->{'category'}; + my $class = $state->{'deff_line'}->{'class'}; + my $type = $state->{'deff_line'}->{'type'}; + my $name = $state->{'deff_line'}->{'name'}; + #my $arguments = $state->{'deff'}->{'arguments'}; + my $arguments; + $arguments = substitute_line($state->{'deff_line'}->{'arguments'}) if (defined($state->{'deff_line'}->{'arguments'})); + + $category = &$Texi2HTML::Config::definition_category($category, $class, $def_style); + my $index_label = do_index_entry_label($command, $state,$line_nr); + add_prev($text, $stack, &$Texi2HTML::Config::def_line($category, $name, $type, $arguments, $index_label)); + } + elsif ($state->{'preformatted'}) + { # inconditionally begin a preformatted section for + # non @def* commands (currently @float and @quotation) + # for @def* it is done in begin_deff_item + begin_paragraph($stack, $state); + } + $state->{'no_paragraph'}--; + return; + } + } + } + elsif (s/^([^,]*)[,]//o) + { + add_prev($text, $stack, do_text($1, $state)); + if (@$stack and defined($stack->[-1]->{'style'}) + and (ref($::style_map_ref->{$stack->[-1]->{'style'}}) eq 'HASH')) + { + my $macro = $stack->[-1]->{'style'}; + my $style_args = $::style_map_ref->{$macro}->{'args'}; + if (defined($style_args->[$stack->[-1]->{'arg_nr'} + 1])) + { + push (@{$stack->[-1]->{'args'}}, $stack->[-1]->{'text'}); + $stack->[-1]->{'fulltext'} .= $stack->[-1]->{'text'} . do_text(',', $state); + $stack->[-1]->{'text'} = ''; + close_arg ($macro, $stack->[-1]->{'arg_nr'}, $state); + $stack->[-1]->{'arg_nr'}++; + open_arg ($macro, $stack->[-1]->{'arg_nr'}, $state); + next; + } + } + add_prev($text, $stack, do_text(',', $state)); + } + else + { # no macro nor '}', but normal text + add_prev($text, $stack, do_text($_, $state)); + #print STDERR "END LINE:$_!!!\n"; + #dump_stack($text, $stack, $state); + + # @item line is closed by end of line + add_term($text, $stack, $state, $line_nr); + + # @center is closed at the end of line. When a @-command which + # keeps the texi as is happens on the @center line, the @center + # is closed at the end of line appearing after the @-command + # closing (for example @ref, @footnote). + + # when 'closing_center' is true we don't retry to close + # the @center line. + if ($state->{'paragraph_style'}->[-1] eq 'center' + and !$state->{'closing_center'} and !$state->{'keep_texi'}) + { + $state->{'closing_center'} = 1; + unless ($Texi2HTML::Config::format_in_paragraph{'center'}) + { + close_paragraph($text, $stack, $state, $line_nr); + } + close_stack($text, $stack, $state, $line_nr, undef, 'center'); + delete $state->{'closing_center'}; + my $center = pop @$stack; + add_prev($text, $stack, &$Texi2HTML::Config::paragraph_style_command('center',$center->{'text'})); + my $top_paragraph_style = pop @{$state->{'paragraph_style'}}; + # center is at the bottom of the comand_stack because it + # may be nested in many way + my $bottom_command_stack = shift @{$state->{'command_stack'}}; + print STDERR "Bug: closing center, top_paragraph_style: $top_paragraph_style, bottom_command_stack: $bottom_command_stack.\n" + if ($bottom_command_stack ne 'center' or $top_paragraph_style ne 'center'); + $_ = ''; + next; + } + last; + } + } + return 1; +} + +sub open_arg($$$) +{ + my $macro = shift; + my $arg_nr = shift; + my $state = shift; + if (ref($::style_map_ref->{$macro}) eq 'HASH') + { + my $arg = $::style_map_ref->{$macro}->{'args'}->[$arg_nr]; + if ($arg eq 'code' and !$state->{'keep_texi'}) + { + $state->{'code_style'}++; + } + elsif ($arg eq 'keep') + { + $state->{'keep_nr'}++; + $state->{'keep_texi'} = 1; + } + } + elsif ($code_style_map{$macro} and !$state->{'keep_texi'}) + { + $state->{'code_style'}++; + } +} + +sub close_arg($$$) +{ + my $macro = shift; + my $arg_nr = shift; + my $state = shift; + if (ref($::style_map_ref->{$macro}) eq 'HASH') + { + my $arg = $::style_map_ref->{$macro}->{'args'}->[$arg_nr]; + if ($arg eq 'code' and !$state->{'keep_texi'}) + { + $state->{'code_style'}--; + } + elsif ($arg eq 'keep') + { + $state->{'keep_nr'}--; + $state->{'keep_texi'} = 0 if ($state->{'keep_nr'} == 0); + } +#print STDERR "c $arg_nr $macro $arg $state->{'code_style'}\n"; + } + elsif ($code_style_map{$macro} and !$state->{'keep_texi'}) + { + $state->{'code_style'}--; + } +} + +# add a special style on the top of the stack. This is used for commands +# that extend until the end of the line +sub open_cmd_line($$$$) +{ + my $stack = shift; + my $state = shift; + my $args = shift; + my $function = shift; + push @$stack, {'style' => 'cmd_line', 'text' => '', 'arg_nr' => 0}; + foreach my $hash (\%Texi2HTML::Config::style_map, \%Texi2HTML::Config::style_map_pre, \%Texi2HTML::Config::style_map_texi, \%Texi2HTML::Config::simple_format_style_map_texi) + { + $hash->{'cmd_line'}->{'args'} = $args; + $hash->{'cmd_line'}->{'function'} = $function; + } + $state->{'no_paragraph'}++; + open_arg ('cmd_line', 0, $state); +} + +# finish @item line in @*table +sub add_term($$$$;$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + my $end = shift; + return unless (exists ($state->{'table_list_stack'})); + my $format = $state->{'table_list_stack'}->[-1]; + return unless (($format_type{$format->{'format'}} eq 'table') and ($format->{'format'} ne 'multitable' ) and $format->{'term'}); + #print STDERR "ADD_TERM\n"; + # we set 'term' = 0 early such that if we encounter an end of line + # during close_stack we don't try to do the term once more + $state->{'table_list_stack'}->[-1]->{'term'} = 0; + # it is the first paragraph for the term. + $format->{'paragraph_number'} = 0; + + #dump_stack($text, $stack, $state); + close_stack($text, $stack, $state, $line_nr, undef, 'term'); + my $term = pop @$stack; + my $command_formatted; + chomp ($term->{'text'}); + if (exists($::style_map_ref->{$format->{'command'}}) and + !exists($Texi2HTML::Config::special_list_commands{$format->{'format'}}->{$format->{'command'}}) and ($style_type{$format->{'command'}} eq 'style')) + { + my $leading_spaces = ''; + my $trailing_spaces = ''; + $term->{'text'} =~ s/^(\s*)//o; + $leading_spaces = $1 if (defined($1)); + $term->{'text'} =~ s/(\s*)$//o; + $trailing_spaces = $1 if (defined($1)); + $term->{'text'} = do_simple($format->{'command'}, $term->{'text'}, $state, [$term->{'text'}]); + $term->{'text'} = $leading_spaces. $term->{'text'} .$trailing_spaces; + } + elsif (exists($::things_map_ref->{$format->{'command'}})) + { + $command_formatted = do_simple($format->{'command'}, '', $state); + } + my $index_label; + if ($format->{'format'} =~ /^(f|v)/o) + { + $index_label = do_index_entry_label($format->{'format'}, $state,$line_nr); + print STDERR "Bug: no index entry for $text" unless defined($index_label); + } + add_prev($text, $stack, &$Texi2HTML::Config::table_item($term->{'text'}, $index_label,$format->{'format'},$format->{'command'}, $command_formatted,$state->{'command_stack'})); + unless ($end) + { + push (@$stack, { 'format' => 'line', 'text' => '' }); + begin_paragraph($stack, $state) if ($state->{'preformatted'}); + } + return $format; +} + +sub add_row($$$$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + my $format = $state->{'table_list_stack'}->[-1]; + return unless ($format->{'format'} eq 'multitable'); + if ($format->{'cell'} > $format->{'max_columns'}) + { + close_stack($text, $stack, $state, $line_nr, undef, 'null'); + pop @$stack; + } + unless ($format->{'max_columns'}) + { # empty multitable + pop @$stack; # pop 'row' + return $format; + } + if ($format->{'first'}) + { # first row + $format->{'first'} = 0; + #dump_stack($text, $stack, $state); + #if ($stack->[-1]->{'format'} and ($stack->[-1]->{'format'} eq 'paragraph') and ($stack->[-1]->{'text'} =~ /^\s*$/) and ($format->{'cell'} == 1)) + if ($stack->[-1]->{'format'} and ($stack->[-1]->{'format'} eq 'cell') and ($stack->[-1]->{'text'} =~ /^\s*$/) and ($format->{'cell'} == 1)) + { + pop @$stack; + pop @$stack; + #pop @$stack; + return $format; + } + } + add_cell($text, $stack, $state); + my $row = pop @$stack; + add_prev($text, $stack, &$Texi2HTML::Config::row($row->{'text'}, $row->{'item_cmd'})); + return $format; +} + +sub add_cell($$$$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + my $format = $state->{'table_list_stack'}->[-1]; + return unless ($format->{'format'} eq 'multitable'); + if ($format->{'cell'} <= $format->{'max_columns'}) + { + close_stack($text, $stack, $state, $line_nr, undef, 'cell'); + my $cell = pop @$stack; + my $row = top_stack($stack); + print STDERR "Bug: top_stack of cell not a row\n" if (!defined($row) or !defined($row->{'format'}) or ($row->{'format'} ne 'row')); + add_prev($text, $stack, &$Texi2HTML::Config::cell($cell->{'text'}, $row->{'item_cmd'})); + $format->{'cell'}++; + } + return $format; +} + +sub add_line($$$$;$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + my $end = shift; + my $format = $state->{'table_list_stack'}->[-1]; + return unless ($format_type{$format->{'format'}} eq 'table' and ($format->{'format'} ne 'multitable') and ($format->{'term'} == 0)); + #print STDERR "ADD_LINE\n"; + #dump_stack($text, $stack, $state); + # as in pre the end of line are kept, we must explicitely abort empty + # preformatted, close_stack doesn't abort the empty preformatted regions. + abort_empty_preformatted($stack, $state) if ($format->{'first'}); + close_stack($text, $stack, $state, $line_nr, undef, 'line'); + my $line = pop @$stack; + $format->{'paragraph_number'} = 0; + my $first = 0; + $first = 1 if ($format->{'first'}); + if ($first) + { + $format->{'first'} = 0; + # we must have
    or
    following
    thus we do a + # &$Texi2HTML::Config::table_line here too, although it could have + # been a normal paragraph. + add_prev($text, $stack, &$Texi2HTML::Config::table_line($line->{'text'})) if ($line->{'text'} =~ /\S/o); + } + else + { + add_prev($text, $stack, &$Texi2HTML::Config::table_line($line->{'text'})); + } + unless($end) + { + push (@$stack, { 'format' => 'term', 'text' => '' }); + } + $format->{'term'} = 1; + return $format; +} + +# finish @enumerate or @itemize @item +sub add_item($$$$;$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + my $line = shift; + my $end = shift; + my $format = $state->{'table_list_stack'}->[-1]; + return unless ($format_type{$format->{'format'}} eq 'list'); + #print STDERR "ADD_ITEM: \n"; + # as in pre the end of line are kept, we must explicitely abort empty + # preformatted, close_stack doesn't do that. + abort_empty_preformatted($stack, $state) if ($format->{'first'}); + close_stack($text, $stack, $state, $line_nr, undef, 'item'); + $format->{'paragraph_number'} = 0; + if ($format->{'format'} eq 'enumerate') + { + $format->{'number'} = ''; + my $spec = $format->{'spec'}; + $format->{'item_nr'}++; + if ($spec =~ /^[0-9]$/) + { + $format->{'number'} = $spec + $format->{'item_nr'} - 1; + } + else + { + my $base_letter = ord('a'); + $base_letter = ord('A') if (ucfirst($spec) eq $spec); + + my @letter_ords = decompose(ord($spec) - $base_letter + $format->{'item_nr'} - 1, 26); + foreach my $ord (@letter_ords) + {# WARNING we go directly to 'ba' after 'z', and not 'aa' + #because 'ba' is 1,0 and 'aa' is 0,0. + $format->{'number'} = chr($base_letter + $ord) . $format->{'number'}; + } + } + } + + #dump_stack ($text, $stack, $state); + my $item = pop @$stack; + # the element following ol or ul must be li. Thus even though there + # is no @item we put a normal item. + + # don't do an item if it is the first and it is empty + if (!$format->{'first'} or ($item->{'text'} =~ /\S/o)) + { + my $formatted_command; + if (defined($format->{'command'}) and exists($::things_map_ref->{$format->{'command'}})) + { + $formatted_command = do_simple($format->{'command'}, '', $state); + } + #chomp($item->{'text'}); + add_prev($text, $stack, &$Texi2HTML::Config::list_item($item->{'text'},$format->{'format'},$format->{'command'}, $formatted_command, $format->{'item_nr'}, $format->{'spec'}, $format->{'number'})); + } + if ($format->{'first'}) + { + $format->{'first'} = 0; + } + + # Now prepare the new item + unless($end) + { + push (@$stack, { 'format' => 'item', 'text' => '' }); + begin_paragraph($stack, $state) unless (!$state->{'preformatted'} and no_line($line)); + } + return $format; +} + +# format ``simple'' macros, that is macros without arg or style macros +sub do_simple($$$;$$$$) +{ + my $macro = shift; + my $text = shift; + my $state = shift; + my $args = shift; + my $line_nr = shift; + my $no_open = shift; + my $no_close = shift; + + my $arg_nr = 0; + $arg_nr = @$args - 1 if (defined($args)); + +#print STDERR "DO_SIMPLE $macro $arg_nr $args @$args\n" if (defined($args)); + if (defined($::simple_map_ref->{$macro})) + { + # \n may in certain circumstances, protect end of lines + if ($macro eq "\n") + { + $state->{'end_of_line_protected'} = 1; + #print STDERR "PROTECTING END OF LINE\n"; + } + if ($state->{'keep_texi'}) + { + return "\@$macro"; + } + elsif ($state->{'remove_texi'}) + { +#print STDERR "DO_SIMPLE remove_texi $macro\n"; + return $::simple_map_texi_ref->{$macro}; + } + elsif ($state->{'preformatted'}) + { + return $::simple_map_pre_ref->{$macro}; + } + else + { + return $::simple_map_ref->{$macro}; + } + } + if (defined($::things_map_ref->{$macro})) + { + my $result; + if ($state->{'keep_texi'}) + { + $result = "\@$macro" . '{}'; + } + elsif ($state->{'remove_texi'}) + { + $result = $::texi_map_ref->{$macro}; +#print STDERR "DO_SIMPLE remove_texi texi_map $macro\n"; + } + elsif ($state->{'preformatted'}) + { + $result = $::pre_map_ref->{$macro}; + } + else + { + $result = $::things_map_ref->{$macro}; + } + return $result . $text; + } + elsif (defined($::style_map_ref->{$macro})) + { + if ($state->{'keep_texi'}) + { + return "\@$macro" . '{' . $text . '}'; + } + else + { + my $style; + my $result; + if ($state->{'remove_texi'}) + { +#print STDERR "REMOVE $macro, $style_map_texi_ref->{$macro}, fun $style_map_texi_ref->{$macro}->{'function'} remove cmd " . \&Texi2HTML::Config::t2h_remove_command . " ascii acc " . \&t2h_default_ascii_accent; + $style = $::style_map_texi_ref->{$macro}; + } + elsif ($state->{'preformatted'}) + { + $style = $::style_map_pre_ref->{$macro}; + } + else + { + $style = $::style_map_ref->{$macro}; + } + if (defined($style)) + { # known style + $result = &$Texi2HTML::Config::style($style, $macro, $text, $args, $no_close, $no_open, $line_nr, $state, $state->{'command_stack'}); + } + if (!$no_close) + { + close_arg($macro,$arg_nr, $state); + } + return $result; + } + } + elsif ($macro =~ /^special_(\w+)_(\d+)$/o) + { + my $style = $1; + my $count = $2; + print STDERR "Bug? text in \@$macro not empty.\n" if ($text ne ''); + if ($state->{'keep_texi'}) + {# text should be empty + return "\@$macro" . '{' . $text . '}'; + } + if (defined($Texi2HTML::Config::command_handler{$style}) and + defined($Texi2HTML::Config::command_handler{$style}->{'expand'})) + { + my $struct_count = 1+ $special_commands{$style}->{'max'} - $special_commands{$style}->{'count'}; + if (($count != $struct_count) and $T2H_DEBUG) + { + print STDERR "count $count in \@special $style and structure $struct_count differ\n"; + } + $special_commands{$style}->{'count'}--; + } + my $result = $Texi2HTML::Config::command_handler{$style}->{'expand'} + ($style,$count,$state,$text); + $result = '' if (!defined($result)); + return $result; + } + # Unknown macro + my $result = ''; + my ($done, $result_text, $message) = &$Texi2HTML::Config::unknown_style($macro, $text,$state); + if ($done) + { + echo_warn($message, $line_nr) if (defined($message)); + if (defined($result_text)) + { + $result = $result_text; + } + } + else + { + unless ($no_open) + { # we warn only if no_open is true, i.e. it is the first time we + # close the macro for a multiline macro + echo_warn ("Unknown command with braces `\@$macro'", $line_nr); + $result = do_text("\@$macro") . "{"; + } + $result .= $text; + $result .= '}' unless ($no_close); + } + return $result; +} + +sub do_unknown($$$$$$) +{ + my $macro = shift; + my $line = shift; + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + #print STDERR "do_unknown: $macro ::: $line"; + my ($result_line, $result, $result_text, $message) = &$Texi2HTML::Config::unknown($macro, $line,$stack,$state); + if ($result) + { + add_prev ($text, $stack, $result_text) if (defined($result_text)); + echo_warn($message, $line_nr) if (defined($message)); + return $result_line; + } + else + { + echo_warn ("Unknown command `\@$macro' (left as is)", $line_nr); + add_prev ($text, $stack, do_text("\@$macro")); + return $line; + } +} + +# used only during @macro processing +sub add_text($@) +{ + my $string = shift; + + return if (!defined($string)); + foreach my $scalar_ref (@_) + { + next unless defined($scalar_ref); + if (!defined($$scalar_ref)) + { + $$scalar_ref = $string; + } + else + { + $$scalar_ref .= $string; + } + return; + } +} + +sub add_prev ($$$) +{ + my $text = shift; + my $stack = shift; + my $string = shift; + + unless (defined($text) and ref($text) eq "SCALAR") + { + die "text not a SCALAR ref: " . ref($text) . ""; + } + #if (!defined($stack) or (ref($stack) ne "ARRAY")) + #{ + # $string = $stack; + # $stack = []; + #} + + return if (!defined($string)); + if (@$stack) + { + $stack->[-1]->{'text'} .= $string; + return; + } + + if (!defined($$text)) + { + $$text = $string; + } + else + { + $$text .= $string; + } +} + +sub close_stack_texi_structure($$$$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + + return undef unless (@$stack or $state->{'raw'} or $state->{'macro'} or $state->{'macro_name'} or $state->{'ignored'}); + + #print STDERR "close_stack_texi_structure\n"; + #dump_stack ($text, $stack, $state); + my $stack_level = $#$stack + 1; + my $string = ''; + + if ($state->{'ignored'}) + { + $string .= "\@end $state->{'ignored'} "; + echo_warn ("closing $state->{'ignored'}", $line_nr); + } + if ($state->{'texi'}) + { + if ($state->{'macro'}) + { + $string .= "\@end macro "; + echo_warn ("closing macro", $line_nr); + } + elsif ($state->{'macro_name'}) + { + $string .= ('}' x $state->{'macro_depth'}) . " "; + echo_warn ("closing $state->{'macro_name'} ($state->{'macro_depth'} braces missing)", $line_nr); + } + elsif ($state->{'verb'}) + { + echo_warn ("closing \@verb", $line_nr); + $string .= $state->{'verb'} . '}'; + } + elsif ($state->{'raw'}) + { + echo_warn ("closing \@$state->{'raw'} raw format", $line_nr); + $string .= "\@end $state->{'raw'} "; + } + if ($string ne '') + { + #print STDERR "close_stack scan_texi ($string)\n"; + scan_texi ($string, $text, $stack, $state, $line_nr); + $string = ''; + } + } + elsif ($state->{'verb'}) + { + $string .= $state->{'verb'}; + } + + while ($stack_level--) + { + my $stack_text = $stack->[$stack_level]->{'text'}; + $stack_text = '' if (!defined($stack_text)); + if ($stack->[$stack_level]->{'format'}) + { + my $format = $stack->[$stack_level]->{'format'}; + if ($format eq 'index_item') + { + enter_table_index_entry($text, $stack, $state, $line_nr); + next; + } + elsif (!defined($format_type{$format}) or ($format_type{$format} ne 'fake')) + { + $stack_text = "\@$format\n" . $stack_text; + } + } + elsif (defined($stack->[$stack_level]->{'style'})) + { + if ($state->{'structure'}) + { + $stack_text = close_structure_command($stack->[$stack_level], + $state,1,$line_nr) + } + else + { + my $style = $stack->[$stack_level]->{'style'}; + if ($style ne '') + { + $stack_text = "\@$style\{" . $stack_text; + } + else + {# this is a lone opened brace. We readd it there. + $stack_text = "\{" . $stack_text; + } + } + } + pop @$stack; + add_prev($text, $stack, $stack_text); + } + $stack = [ ]; + + $state->{'close_stack'} = 1; + if ($string ne '') + { + if ($state->{'texi'}) + { + #print STDERR "scan_texi in close_stack ($string)\n"; + scan_texi($string, $text, $stack, $state, $line_nr); + } + elsif ($state->{'structure'}) + { + #print STDERR "scan_structure in close_stack ($string)\n"; + scan_structure($string, $text, $stack, $state, $line_nr); + } + } + delete $state->{'close_stack'}; +} + +# close region like @insertcopying, titlepage... +# restore $state->{'after_element'} and delete the structure +sub close_region($) +{ + my $state = shift; + $state->{'after_element'} = 1; + delete $state->{'after_element'} unless + ($state->{'region_lines'}->{'after_element'}); + $state->{'place'} = $state->{'region_lines'}->{'kept_place'}; + delete $state->{'region_lines'}->{'number'}; + delete $state->{'region_lines'}->{'format'}; + delete $state->{'region_lines'}->{'after_element'}; + delete $state->{'region_lines'}->{'kept_place'}; + delete $state->{'region_lines'}; +} + +# close the stack, closing macros and formats left open. +# the precise behavior of the function depends on $close_paragraph: +# undef -> close everything +# defined -> remove empty paragraphs, close until the first format or +# paragraph. don't close styles, duplicate stack of styles not closed + +# if a $format is given the stack is closed according to $close_paragraph but +# if $format is encountered the closing stops + +sub close_stack($$$$;$$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + my $close_paragraph = shift; + my $format = shift; + my $new_stack; + + #print STDERR "sub_close_stack\n"; + return $new_stack unless (@$stack); + + my $stack_level = $#$stack + 1; + my $string = ''; + my $verb = ''; + + if ($state->{'verb'}) + { + $string .= $state->{'verb'}; + $verb = $state->{'verb'}; + } + + #debugging + #my $print_format = 'NO FORMAT'; + #$print_format = $format if ($format); + #my $print_close_paragraph = 'close everything'; + #$print_close_paragraph = 'close paragraph without duplicating' if (defined($close_paragraph)); + #$print_close_paragraph = $close_paragraph if ($close_paragraph); + #print STDERR "Close_stack: format $print_format, close_paragraph: $print_close_paragraph\n"; + + while ($stack_level--) + { + if ($stack->[$stack_level]->{'format'}) + { + my $stack_format = $stack->[$stack_level]->{'format'}; + last if (defined($close_paragraph) or (defined($format) and $stack_format eq $format)); + # We silently close paragraphs, preformatted sections and fake formats + if ($stack_format eq 'paragraph') + { + $string .= "\@end_paragraph{}"; + } + elsif ($stack_format eq 'preformatted') + { + $string .= "\@end_preformatted{}"; + } + else + { + if ($fake_format{$stack_format}) + { + warn "# Closing a fake format `$stack_format'\n" if ($T2H_VERBOSE); + } + elsif ($stack_format ne 'center') + { # we don't warn, but add an @end center + echo_warn ("closing `$stack_format'", $line_nr); + #dump_stack ($text, $stack, $state); + } + $string .= "\@end $stack_format "; + } + } + else + { + my $style = $stack->[$stack_level]->{'style'}; + # FIXME images, footnotes, xrefs, anchors with $close_paragraphs? + # seems that it is not possible, as it is triggered by + # close_paragraph which shouldn't be called with keep_texi + # and when the arguments are expanded, there is a + # substitute_line or similar with a new stack. + if ($close_paragraph) + { #duplicate the stack + # the !exists($style_type{$style}) condition catches the unknown + # @-commands: by default they are considered as style commands + if ((exists($style_type{$style}) and ($style_type{$style} eq 'style')) or (!exists($style_type{$style}))) + { + push @$new_stack, { 'style' => $style, 'text' => '', 'no_open' => 1, 'arg_nr' => 0 }; + $string .= '}'; + } + elsif (($style_type{$style} eq 'simple_style') or ($style_type{$style} eq 'accent')) + { + $string .= '}'; + } + else + { + print STDERR "$style while closing paragraph\n"; + } + } + else + { + dump_stack ($text, $stack, $state) if (!defined($style)); # bug + $string .= '}'; + echo_warn ("closing \@-command $style", $line_nr) if ($style); + } + } + } + $state->{'no_close'} = 1 if ($close_paragraph); + $state->{'close_stack'} = 1; + if ($string ne '') + { + #print STDERR "scan_line in CLOSE_STACK ($string)\n"; + #dump_stack ($text, $stack, $state); + scan_line($string, $text, $stack, $state, $line_nr); + } + delete $state->{'no_close'}; + delete $state->{'close_stack'}; + $state->{'verb'} = $verb if (($verb ne '') and $close_paragraph); + # cancel paragraph states and command_stack + # FIXME this seems to be unusefull, see formatting/center.texi + unless (defined($close_paragraph) or defined($format)) + { + $state->{'paragraph_style'} = [ '' ]; + $state->{'command_stack'} = [ '' ]; + } + return $new_stack; +} + +# given a stack and a list of formats, return true if the stack contains +# these formats, first on top +sub stack_order($@) +{ + my $stack = shift; + my $stack_level = $#$stack + 1; + while (@_) + { + my $format = shift; + while ($stack_level--) + { + if ($stack->[$stack_level]->{'format'}) + { + if ($stack->[$stack_level]->{'format'} eq $format) + { + $format = undef; + last; + } + else + { + return 0; + } + } + } + return 0 if ($format); + } + return 1; +} + +sub top_format($) +{ + my $stack = shift; + my $stack_level = $#$stack + 1; + while ($stack_level--) + { + if ($stack->[$stack_level]->{'format'} and !$fake_format{$stack->[$stack_level]->{'format'}}) + { + return $stack->[$stack_level]; + } + } + return undef; +} + +sub close_paragraph($$$;$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + my $line_nr = shift; + #my $macro = shift; + #print STDERR "CLOSE_PARAGRAPH\n"; + #dump_stack($text, $stack, $state); + my $new_stack = close_stack($text, $stack, $state, $line_nr, 1); + my $top_stack = top_stack($stack); + if ($top_stack and !defined($top_stack->{'format'})) + { #debug + print STDERR "Bug: no format on top stack\n"; + dump_stack($text, $stack, $state); + } + if ($top_stack and ($top_stack->{'format'} eq 'paragraph')) + { + my $paragraph = pop @$stack; + add_prev($text, $stack, do_paragraph($paragraph->{'text'}, $state)); + $state->{'paragraph_macros'} = $new_stack; + return 1; + } + elsif ($top_stack and ($top_stack->{'format'} eq 'preformatted')) + { + my $paragraph = pop @$stack; + add_prev($text, $stack, do_preformatted($paragraph->{'text'}, $state)); + $state->{'paragraph_macros'} = $new_stack; + return 1; + } + return; +} + +sub abort_empty_preformatted($$) +{ + my $stack = shift; + my $state = shift; + if (@$stack and $stack->[-1]->{'format'} + and ($stack->[-1]->{'format'} eq 'preformatted') + and ($stack->[-1]->{'text'} !~ /\S/)) + { + pop @$stack; + } +} + +# for debugging +sub dump_stack($$$) +{ + my $text = shift; + my $stack = shift; + my $state = shift; + + if (defined($$text)) + { + print STDERR "text: $$text\n"; + } + else + { + print STDERR "text: UNDEF\n"; + } + my $in_remove = 0; + my $in_simple_format = 0; + my $in_keep = 0; + $in_keep = 1 if ($state->{'keep_texi'}); + if (!$in_keep) + { + $in_simple_format = 1 if ($state->{'simple_format'}); + $in_remove = 1 if ($state->{'remove_texi'} and !$in_simple_format); + } + print STDERR "state(k${in_keep}s${in_simple_format}r${in_remove}): "; + foreach my $key (keys(%$state)) + { + my $value = 'UNDEF'; + $value = $state->{$key} if (defined($state->{$key})); + print STDERR "$key: $value " if (!ref($value)); + } + print STDERR "\n"; + my $stack_level = $#$stack + 1; + while ($stack_level--) + { + print STDERR " $stack_level-> "; + foreach my $key (keys(%{$stack->[$stack_level]})) + { + my $value = 'UNDEF'; + $value = $stack->[$stack_level]->{$key} if + (defined($stack->[$stack_level]->{$key})); + print STDERR "$key: $value "; + } + print STDERR "\n"; + } + if (defined($state->{'table_list_stack'})) + { + print STDERR "table_list_stack: "; + foreach my $format (@{$state->{'table_list_stack'}}) + { + print STDERR "$format->{'format'} "; + } + print STDERR "\n"; + } + if (defined($state->{'command_stack'})) + { + print STDERR "command_stack: "; + foreach my $style (@{$state->{'command_stack'}}) + { + print STDERR "($style) "; + } + print STDERR "\n"; + } + if (defined($state->{'region_lines'})) + { + print STDERR "region_lines($state->{'region_lines'}->{'number'}): $state->{'region_lines'}->{'format'}\n"; + } + if (defined($state->{'text_macro_stack'}) and @{$state->{'text_macro_stack'}}) + { + print STDERR "text_macro_stack: (@{$state->{'text_macro_stack'}})\n"; + } +} + +# for debugging +sub print_elements($) +{ + my $elements = shift; + foreach my $elem(@$elements) + { + if ($elem->{'node'}) + { + print STDERR "node-> $elem "; + } + else + { + print STDERR "chap=> $elem "; + } + foreach my $key (keys(%$elem)) + { + my $value = "UNDEF"; + $value = $elem->{$key} if (defined($elem->{$key})); + print STDERR "$key: $value "; + } + print STDERR "\n"; + } +} + +sub substitute_line($;$) +{ + my $line = shift; + my $state = shift; + $state = {} if (!defined($state)); + $state->{'no_paragraph'} = 1; + # this is usefull when called from &$I + return simple_format($state, $line) if ($state->{'simple_format'}); + return substitute_text($state, $line); +} + +sub substitute_text($@) +{ + my $state = shift; + my @stack = (); + my $text = ''; + my $result = ''; + if ($state->{'structure'}) + { + initialise_state_structure($state); + } + elsif ($state->{'texi'}) + { + initialise_state_texi($state); + } + else + { + initialise_state($state); + } + $state->{'spool'} = []; + #print STDERR "SUBST_TEXT begin\n"; + + while (@_ or @{$state->{'spool'}}) + { + my $line; + if (@{$state->{'spool'}}) + { + $line = shift @{$state->{'spool'}}; + } + else + { + $line = shift @_; + } + next unless (defined($line)); + if ($state->{'structure'}) + { + scan_structure ($line, \$text, \@stack, $state); + } + elsif ($state->{'texi'}) + { + scan_texi ($line, \$text, \@stack, $state); + } + else + { + scan_line($line, \$text, \@stack, $state); + } + next if (@stack); + $result .= $text; + $text = ''; + } + # FIXME could we have the line number ? + # close stack in substitute_text + if ($state->{'texi'} or $state->{'structure'}) + { + close_stack_texi_structure(\$text, \@stack, $state, undef); + } + else + { + close_stack(\$text, \@stack, $state, undef); + } + #print STDERR "SUBST_TEXT end\n"; + return $result . $text; +} + +# this function does the second pass formatting. It is not obvious that +# it is usefull as in that pass the collected things +sub substitute_texi_line($) +{ + my $text = shift; + return $text if $text =~ /^\s*$/; + #print STDERR "substitute_texi_line $text\n"; + my @text = substitute_text({'structure' => 1}, $text); + my @result = (); + while (@text) + { + push @result, split (/\n/, shift (@text)); + } + return '' unless (@result); + my $result = shift @result; + return $result . "\n" unless (@result); + foreach my $line (@result) + { + chomp $line; + $result .= ' ' . $line; + } + return $result . "\n"; +} + +sub print_lines($;$) +{ + my ($fh, $lines) = @_; + $lines = $Texi2HTML::THIS_SECTION unless $lines; + my @cnt; + my $cnt; + for my $line (@$lines) + { + print $fh $line; + if (defined($Texi2HTML::Config::WORDS_IN_PAGE) and ($Texi2HTML::Config::SPLIT eq 'node')) + { + @cnt = split(/\W*\s+\W*/, $line); + $cnt += scalar(@cnt); + } + } + return $cnt; +} + +sub do_index_entry_label($$$) +{ + my $command = shift; + my $state = shift; + my $line_nr = shift; + return '' if ($state->{'multiple_pass'}); + my $entry = shift @index_labels; + if (!defined($entry)) + { + echo_warn ("Not enough index entries !", $line_nr); + return ''; + } + if ($command ne $entry->{'command'}) + { + # happens with bad texinfo with a line like + # @deffn func aaaa args @defvr c--ategory d--efvr_name + echo_warn ("Waiting for index cmd \@$entry->{'command'}, got \@$command", $line_nr); + } + + print STDERR "[(index $command) $entry->{'entry'} $entry->{'label'}]\n" + if ($T2H_DEBUG & $DEBUG_INDEX); + return &$Texi2HTML::Config::index_entry_label ($entry->{'label'}, $state->{'preformatted'}, substitute_line($entry->{'entry'}), + $index_prefix_to_name{$prefix}, + $command); +} + +# decompose a decimal number on a given base. The algorithm looks like +# the division with growing powers (division suivant les puissances +# croissantes) ? +sub decompose($$) +{ + my $number = shift; + my $base = shift; + my @result = (); + + return (0) if ($number == 0); + my $power = 1; + my $remaining = $number; + + while ($remaining) + { + my $factor = $remaining % ($base ** $power); + $remaining -= $factor; + push (@result, $factor / ($base ** ($power - 1))); + $power++; + } + return @result; +} + +# main processing is called here +set_document_language('en') unless ($lang_set); +# APA: There's got to be a better way: +$T2H_USER = &$I('unknown'); + +if ($Texi2HTML::Config::TEST) +{ + # to generate files similar to reference ones to be able to check for + # real changes we use these dummy values if -test is given + $T2H_USER = 'a tester'; + $THISPROG = 'texi2html'; + setlocale( LC_ALL, "C" ); +} +else +{ + # the eval prevents this from breaking on system which do not have + # a proper getpwuid implemented + eval { ($T2H_USER = (getpwuid ($<))[6]) =~ s/,.*//;}; # Who am i + # APA: Provide Windows NT workaround until getpwuid gets + # implemented there. + $T2H_USER = $ENV{'USERNAME'} unless defined $T2H_USER; +} + +open_file($docu, $texi_line_number); +#Texi2HTML::LaTeX2HTML::init() if ($Texi2HTML::Config::L2H); +if ($Texi2HTML::Config::L2H) +{ + push @Texi2HTML::Config::command_handler_init, \&Texi2HTML::LaTeX2HTML::init; + push @Texi2HTML::Config::command_handler_process, \&Texi2HTML::LaTeX2HTML::latex2html; + push @Texi2HTML::Config::command_handler_finish, \&Texi2HTML::LaTeX2HTML::finish; + $Texi2HTML::Config::command_handler{'math'} = + { 'init' => \&Texi2HTML::LaTeX2HTML::to_latex, + 'expand' => \&Texi2HTML::LaTeX2HTML::do_tex + }; + $Texi2HTML::Config::command_handler{'tex'} = + { 'init' => \&Texi2HTML::LaTeX2HTML::to_latex, + 'expand' => \&Texi2HTML::LaTeX2HTML::do_tex + }; +} +foreach my $handler(@Texi2HTML::Config::command_handler_init) +{ + &$handler; +} + +my @css_import_lines; +my @css_rule_lines; + +# process css files +foreach my $file (@Texi2HTML::Config::CSS_FILES) +{ + my $css_file_fh; + my $css_file; + if ($file eq '-') + { + $css_file_fh = \*STDIN; + $css_file = '-'; + } + else + { + $css_file = locate_init_file ($file); + unless (defined($css_file)) + { + warn "css file $file not found\n"; + next; + } + unless (open (CSSFILE, "$css_file")) + { + warn "Cannot open ${css_file}: $!"; + next; + } + $css_file_fh = \*CSSFILE; + } + my ($import_lines, $rules_lines); + ($import_lines, $rules_lines) = process_css_file ($css_file_fh, $css_file); + push @css_import_lines, @$import_lines; + push @css_rule_lines, @$rules_lines; +} + +$Texi2HTML::THISDOC{'css_import_lines'} = \@css_import_lines; +$Texi2HTML::THISDOC{'css_lines'} = \@css_rule_lines; + +if ($T2H_DEBUG & $DEBUG_USER) +{ + if (@css_import_lines) + { + print STDERR "# css import lines\n"; + foreach my $line (@css_import_lines) + { + print STDERR "$line"; + } + } + if (@css_rule_lines) + { + print STDERR "# css rule lines\n"; + foreach my $line (@css_rule_lines) + { + print STDERR "$line"; + } + } +} + +pass_texi(); +dump_texi(\@lines, 'texi', \@lines_numbers) if ($T2H_DEBUG & $DEBUG_TEXI); +if (defined($Texi2HTML::Config::MACRO_EXPAND)) +{ + my @texi_lines = (@first_lines, @lines); + dump_texi(\@texi_lines, '', undef, $Texi2HTML::Config::MACRO_EXPAND); +} +pass_structure(); +if ($T2H_DEBUG & $DEBUG_TEXI) +{ + dump_texi(\@doc_lines, 'first', \@doc_numbers); + if (defined($Texi2HTML::Config::MACRO_EXPAND and $Texi2HTML::Config::DUMP_TEXI)) + { + unshift (@doc_lines, @first_lines); + push (@doc_lines, "\@bye\n"); + dump_texi(\@doc_lines, '', undef, $Texi2HTML::Config::MACRO_EXPAND . ".first"); + } +} +exit(0) if ($Texi2HTML::Config::DUMP_TEXI or defined($Texi2HTML::Config::MACRO_EXPAND)); + +foreach my $style (keys(%special_commands)) +{ + $special_commands{$style}->{'max'} = $special_commands{$style}->{'count'}; +} + +rearrange_elements(); +do_names(); + +#Texi2HTML::LaTeX2HTML::latex2html(); +foreach my $handler(@Texi2HTML::Config::command_handler_process) +{ + &$handler; +} + +if (@{$region_lines{'documentdescription'}} and (!defined($Texi2HTML::Config::DOCUMENT_DESCRIPTION))) +{ + my $documentdescription = remove_texi(@{$region_lines{'documentdescription'}}); + my @documentdescription = split (/\n/, $documentdescription); + $Texi2HTML::Config::DOCUMENT_DESCRIPTION = shift @documentdescription; + chomp $Texi2HTML::Config::DOCUMENT_DESCRIPTION; + foreach my $line (@documentdescription) + { + chomp $line; + $Texi2HTML::Config::DOCUMENT_DESCRIPTION .= ' ' . $line; + } +} +# do copyright notice inserted in comment at the beginning of the files +if (@{$region_lines{'copying'}}) +{ + $copying_comment = &$Texi2HTML::Config::copying_comment($region_lines{'copying'}); +} +&$Texi2HTML::Config::toc_body(\@elements_list); +$sec_num = 0; + + +&$Texi2HTML::Config::css_lines(\@css_import_lines, \@css_rule_lines); + +pass_text(); +print STDERR "BUG: " . scalar(@index_labels) . " index entries pending\n" + if (scalar(@index_labels)); +foreach my $special (keys(%special_commands)) +{ + my $count = $special_commands{$special}->{'count'}; + if (($count != 0) and $T2H_VERBOSE) + { + echo_warn ("$count special \@$special were not processed.\n"); + } +} +if ($Texi2HTML::Config::IDX_SUMMARY) +{ + foreach my $entry (keys(%index_names)) + { + do_index_summary_file($entry) unless ($empty_indices{$entry}); + } +} +do_node_files() if ($Texi2HTML::Config::NODE_FILES); +#l2h_FinishFromHtml() if ($Texi2HTML::Config::L2H); +#l2h_Finish() if($Texi2HTML::Config::L2H); +#Texi2HTML::LaTeX2HTML::finish(); +foreach my $handler(@Texi2HTML::Config::command_handler_finish) +{ + &$handler; +} +&$Texi2HTML::Config::finish_out(); +print STDERR "# that's all folks\n" if $T2H_VERBOSE; + +exit(0); + + +############################################################################## + +# These next few lines are legal in both Perl and nroff. + +.00 ; # finish .ig + +'di \" finish diversion--previous line must be blank +.nr nl 0-1 \" fake up transition to first page again +.nr % 0 \" start at page 1 +'; __END__ ############# From here on it's a standard manual page ############ + .so ${prefix}/man/man1/texi2html.1 diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex new file mode 100644 index 00000000..bac07260 --- /dev/null +++ b/build-aux/texinfo.tex @@ -0,0 +1,8997 @@ +% texinfo.tex -- TeX macros to handle Texinfo files. +% +% Load plain if necessary, i.e., if running under initex. +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi +% +\def\texinfoversion{2008-04-18.10} +% +% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, +% 2007, 2008 Free Software Foundation, Inc. +% +% This texinfo.tex file is free software: you can redistribute it and/or +% modify it under the terms of the GNU General Public License as +% published by the Free Software Foundation, either version 3 of the +% License, or (at your option) any later version. +% +% This texinfo.tex file is distributed in the hope that it will be +% useful, but WITHOUT ANY WARRANTY; without even the implied warranty +% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +% General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see . +% +% As a special exception, when this file is read by TeX when processing +% a Texinfo source document, you may use the result without +% restriction. (This has been our intent since Texinfo was invented.) +% +% Please try the latest version of texinfo.tex before submitting bug +% reports; you can get the latest version from: +% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or +% ftp://tug.org/tex/texinfo.tex +% (and all CTAN mirrors, see http://www.ctan.org). +% The texinfo.tex in any given distribution could well be out +% of date, so if that's what you're using, please check. +% +% Send bug reports to bug-texinfo@gnu.org. Please include including a +% complete document in each bug report with which we can reproduce the +% problem. Patches are, of course, greatly appreciated. +% +% To process a Texinfo manual with TeX, it's most reliable to use the +% texi2dvi shell script that comes with the distribution. For a simple +% manual foo.texi, however, you can get away with this: +% tex foo.texi +% texindex foo.?? +% tex foo.texi +% tex foo.texi +% dvips foo.dvi -o # or whatever; this makes foo.ps. +% The extra TeX runs get the cross-reference information correct. +% Sometimes one run after texindex suffices, and sometimes you need more +% than two; texi2dvi does it as many times as necessary. +% +% It is possible to adapt texinfo.tex for other languages, to some +% extent. You can get the existing language-specific files from the +% full Texinfo distribution. +% +% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. + + +\message{Loading texinfo [version \texinfoversion]:} + +% If in a .fmt file, print the version number +% and turn on active characters that we couldn't do earlier because +% they might have appeared in the input file name. +\everyjob{\message{[Texinfo version \texinfoversion]}% + \catcode`+=\active \catcode`\_=\active} + + +\chardef\other=12 + +% We never want plain's \outer definition of \+ in Texinfo. +% For @tex, we can use \tabalign. +\let\+ = \relax + +% Save some plain tex macros whose names we will redefine. +\let\ptexb=\b +\let\ptexbullet=\bullet +\let\ptexc=\c +\let\ptexcomma=\, +\let\ptexdot=\. +\let\ptexdots=\dots +\let\ptexend=\end +\let\ptexequiv=\equiv +\let\ptexexclam=\! +\let\ptexfootnote=\footnote +\let\ptexgtr=> +\let\ptexhat=^ +\let\ptexi=\i +\let\ptexindent=\indent +\let\ptexinsert=\insert +\let\ptexlbrace=\{ +\let\ptexless=< +\let\ptexnewwrite\newwrite +\let\ptexnoindent=\noindent +\let\ptexplus=+ +\let\ptexrbrace=\} +\let\ptexslash=\/ +\let\ptexstar=\* +\let\ptext=\t +\let\ptextop=\top + +% If this character appears in an error message or help string, it +% starts a new line in the output. +\newlinechar = `^^J + +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Pre-3.0. +\else + \def\linenumber{l.\the\inputlineno:\space} +\fi + +% Set up fixed words for English if not already set. +\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi +\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi +\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi +\ifx\putwordin\undefined \gdef\putwordin{in}\fi +\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi +\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi +\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi +\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi +\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi +\ifx\putwordof\undefined \gdef\putwordof{of}\fi +\ifx\putwordon\undefined \gdef\putwordon{on}\fi +\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi +\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi +\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi +\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi +\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi +\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi +\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi +% +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi +% +\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi +\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi +\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi +\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi +\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi + +% Since the category of space is not known, we have to be careful. +\chardef\spacecat = 10 +\def\spaceisspace{\catcode`\ =\spacecat} + +% sometimes characters are active, so we need control sequences. +\chardef\colonChar = `\: +\chardef\commaChar = `\, +\chardef\dashChar = `\- +\chardef\dotChar = `\. +\chardef\exclamChar= `\! +\chardef\lquoteChar= `\` +\chardef\questChar = `\? +\chardef\rquoteChar= `\' +\chardef\semiChar = `\; +\chardef\underChar = `\_ + +% Ignore a token. +% +\def\gobble#1{} + +% The following is used inside several \edef's. +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} + +% Hyphenation fixes. +\hyphenation{ + Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script + ap-pen-dix bit-map bit-maps + data-base data-bases eshell fall-ing half-way long-est man-u-script + man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm + par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces + spell-ing spell-ings + stand-alone strong-est time-stamp time-stamps which-ever white-space + wide-spread wrap-around +} + +% Margin to add to right of even pages, to left of odd pages. +\newdimen\bindingoffset +\newdimen\normaloffset +\newdimen\pagewidth \newdimen\pageheight + +% For a final copy, take out the rectangles +% that mark overfull boxes (in case you have decided +% that the text looks ok even though it passes the margin). +% +\def\finalout{\overfullrule=0pt} + +% @| inserts a changebar to the left of the current line. It should +% surround any changed text. This approach does *not* work if the +% change spans more than two lines of output. To handle that, we would +% have adopt a much more difficult approach (putting marks into the main +% vertical list for the beginning and end of each change). +% +\def\|{% + % \vadjust can only be used in horizontal mode. + \leavevmode + % + % Append this vertical mode material after the current line in the output. + \vadjust{% + % We want to insert a rule with the height and depth of the current + % leading; that is exactly what \strutbox is supposed to record. + \vskip-\baselineskip + % + % \vadjust-items are inserted at the left edge of the type. So + % the \llap here moves out into the left-hand margin. + \llap{% + % + % For a thicker or thinner bar, change the `1pt'. + \vrule height\baselineskip width1pt + % + % This is the space between the bar and the text. + \hskip 12pt + }% + }% +} + +% Sometimes it is convenient to have everything in the transcript file +% and nothing on the terminal. We don't just call \tracingall here, +% since that produces some useless output on the terminal. We also make +% some effort to order the tracing commands to reduce output in the log +% file; cf. trace.sty in LaTeX. +% +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% +\def\loggingall{% + \tracingstats2 + \tracingpages1 + \tracinglostchars2 % 2 gives us more in etex + \tracingparagraphs1 + \tracingoutput1 + \tracingmacros2 + \tracingrestores1 + \showboxbreadth\maxdimen \showboxdepth\maxdimen + \ifx\eTeXversion\undefined\else % etex gives us more logging + \tracingscantokens1 + \tracingifs1 + \tracinggroups1 + \tracingnesting2 + \tracingassigns1 + \fi + \tracingcommands3 % 3 gives us more in etex + \errorcontextlines16 +}% + +% add check for \lastpenalty to plain's definitions. If the last thing +% we did was a \nobreak, we don't want to insert more space. +% +\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount + \removelastskip\penalty-50\smallskip\fi\fi} +\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount + \removelastskip\penalty-100\medskip\fi\fi} +\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount + \removelastskip\penalty-200\bigskip\fi\fi} + +% For @cropmarks command. +% Do @cropmarks to get crop marks. +% +\newif\ifcropmarks +\let\cropmarks = \cropmarkstrue +% +% Dimensions to add cropmarks at corners. +% Added by P. A. MacKay, 12 Nov. 1986 +% +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines +\newdimen\cornerlong \cornerlong=1pc +\newdimen\cornerthick \cornerthick=.3pt +\newdimen\topandbottommargin \topandbottommargin=.75in + +% Output a mark which sets \thischapter, \thissection and \thiscolor. +% We dump everything together because we only have one kind of mark. +% This works because we only use \botmark / \topmark, not \firstmark. +% +% A mark contains a subexpression of the \ifcase ... \fi construct. +% \get*marks macros below extract the needed part using \ifcase. +% +% Another complication is to let the user choose whether \thischapter +% (\thissection) refers to the chapter (section) in effect at the top +% of a page, or that at the bottom of a page. The solution is +% described on page 260 of The TeXbook. It involves outputting two +% marks for the sectioning macros, one before the section break, and +% one after. I won't pretend I can describe this better than DEK... +\def\domark{% + \toks0=\expandafter{\lastchapterdefs}% + \toks2=\expandafter{\lastsectiondefs}% + \toks4=\expandafter{\prevchapterdefs}% + \toks6=\expandafter{\prevsectiondefs}% + \toks8=\expandafter{\lastcolordefs}% + \mark{% + \the\toks0 \the\toks2 + \noexpand\or \the\toks4 \the\toks6 + \noexpand\else \the\toks8 + }% +} +% \topmark doesn't work for the very first chapter (after the title +% page or the contents), so we use \firstmark there -- this gets us +% the mark with the chapter defs, unless the user sneaks in, e.g., +% @setcolor (or @url, or @link, etc.) between @contents and the very +% first @chapter. +\def\gettopheadingmarks{% + \ifcase0\topmark\fi + \ifx\thischapter\empty \ifcase0\firstmark\fi \fi +} +\def\getbottomheadingmarks{\ifcase1\botmark\fi} +\def\getcolormarks{\ifcase2\topmark\fi} + +% Avoid "undefined control sequence" errors. +\def\lastchapterdefs{} +\def\lastsectiondefs{} +\def\prevchapterdefs{} +\def\prevsectiondefs{} +\def\lastcolordefs{} + +% Main output routine. +\chardef\PAGE = 255 +\output = {\onepageout{\pagecontents\PAGE}} + +\newbox\headlinebox +\newbox\footlinebox + +% \onepageout takes a vbox as an argument. Note that \pagecontents +% does insertions, but you have to call it yourself. +\def\onepageout#1{% + \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi + % + \ifodd\pageno \advance\hoffset by \bindingoffset + \else \advance\hoffset by -\bindingoffset\fi + % + % Do this outside of the \shipout so @code etc. will be expanded in + % the headline as they should be, not taken literally (outputting ''code). + \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi + \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% + \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi + \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% + % + {% + % Have to do this stuff outside the \shipout because we want it to + % take effect in \write's, yet the group defined by the \vbox ends + % before the \shipout runs. + % + \indexdummies % don't expand commands in the output. + \normalturnoffactive % \ in index entries must not stay \, e.g., if + % the page break happens to be in the middle of an example. + % We don't want .vr (or whatever) entries like this: + % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} + % "\acronym" won't work when it's read back in; + % it needs to be + % {\code {{\tt \backslashcurfont }acronym} + \shipout\vbox{% + % Do this early so pdf references go to the beginning of the page. + \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi + % + \ifcropmarks \vbox to \outervsize\bgroup + \hsize = \outerhsize + \vskip-\topandbottommargin + \vtop to0pt{% + \line{\ewtop\hfil\ewtop}% + \nointerlineskip + \line{% + \vbox{\moveleft\cornerthick\nstop}% + \hfill + \vbox{\moveright\cornerthick\nstop}% + }% + \vss}% + \vskip\topandbottommargin + \line\bgroup + \hfil % center the page within the outer (page) hsize. + \ifodd\pageno\hskip\bindingoffset\fi + \vbox\bgroup + \fi + % + \unvbox\headlinebox + \pagebody{#1}% + \ifdim\ht\footlinebox > 0pt + % Only leave this space if the footline is nonempty. + % (We lessened \vsize for it in \oddfootingyyy.) + % The \baselineskip=24pt in plain's \makefootline has no effect. + \vskip 24pt + \unvbox\footlinebox + \fi + % + \ifcropmarks + \egroup % end of \vbox\bgroup + \hfil\egroup % end of (centering) \line\bgroup + \vskip\topandbottommargin plus1fill minus1fill + \boxmaxdepth = \cornerthick + \vbox to0pt{\vss + \line{% + \vbox{\moveleft\cornerthick\nsbot}% + \hfill + \vbox{\moveright\cornerthick\nsbot}% + }% + \nointerlineskip + \line{\ewbot\hfil\ewbot}% + }% + \egroup % \vbox from first cropmarks clause + \fi + }% end of \shipout\vbox + }% end of group with \indexdummies + \advancepageno + \ifnum\outputpenalty>-20000 \else\dosupereject\fi +} + +\newinsert\margin \dimen\margin=\maxdimen + +\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} +{\catcode`\@ =11 +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi +% marginal hacks, juha@viisa.uucp (Juha Takala) +\ifvoid\margin\else % marginal info is present + \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi +\dimen@=\dp#1\relax \unvbox#1\relax +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi +\ifr@ggedbottom \kern-\dimen@ \vfil \fi} +} + +% Here are the rules for the cropmarks. Note that they are +% offset so that the space between them is truly \outerhsize or \outervsize +% (P. A. MacKay, 12 November, 1986) +% +\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} +\def\nstop{\vbox + {\hrule height\cornerthick depth\cornerlong width\cornerthick}} +\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} +\def\nsbot{\vbox + {\hrule height\cornerlong depth\cornerthick width\cornerthick}} + +% Parse an argument, then pass it to #1. The argument is the rest of +% the input line (except we remove a trailing comment). #1 should be a +% macro which expects an ordinary undelimited TeX argument. +% +\def\parsearg{\parseargusing{}} +\def\parseargusing#1#2{% + \def\argtorun{#2}% + \begingroup + \obeylines + \spaceisspace + #1% + \parseargline\empty% Insert the \empty token, see \finishparsearg below. +} + +{\obeylines % + \gdef\parseargline#1^^M{% + \endgroup % End of the group started in \parsearg. + \argremovecomment #1\comment\ArgTerm% + }% +} + +% First remove any @comment, then any @c comment. +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} +\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} + +% Each occurrence of `\^^M' or `\^^M' is replaced by a single space. +% +% \argremovec might leave us with trailing space, e.g., +% @end itemize @c foo +% This space token undergoes the same procedure and is eventually removed +% by \finishparsearg. +% +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% + \def\temp{#3}% + \ifx\temp\empty + % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: + \let\temp\finishparsearg + \else + \let\temp\argcheckspaces + \fi + % Put the space token in: + \temp#1 #3\ArgTerm +} + +% If a _delimited_ argument is enclosed in braces, they get stripped; so +% to get _exactly_ the rest of the line, we had to prevent such situation. +% We prepended an \empty token at the very beginning and we expand it now, +% just before passing the control to \argtorun. +% (Similarly, we have to think about #3 of \argcheckspacesY above: it is +% either the null string, or it ends with \^^M---thus there is no danger +% that a pair of braces would be stripped. +% +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} + +% \parseargdef\foo{...} +% is roughly equivalent to +% \def\foo{\parsearg\Xfoo} +% \def\Xfoo#1{...} +% +% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my +% favourite TeX trick. --kasal, 16nov03 + +\def\parseargdef#1{% + \expandafter \doparseargdef \csname\string#1\endcsname #1% +} +\def\doparseargdef#1#2{% + \def#2{\parsearg#1}% + \def#1##1% +} + +% Several utility definitions with active space: +{ + \obeyspaces + \gdef\obeyedspace{ } + + % Make each space character in the input produce a normal interword + % space in the output. Don't allow a line break at this space, as this + % is used only in environments like @example, where each line of input + % should produce a line of output anyway. + % + \gdef\sepspaces{\obeyspaces\let =\tie} + + % If an index command is used in an @example environment, any spaces + % therein should become regular spaces in the raw index file, not the + % expansion of \tie (\leavevmode \penalty \@M \ ). + \gdef\unsepspaces{\let =\space} +} + + +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} + +% Define the framework for environments in texinfo.tex. It's used like this: +% +% \envdef\foo{...} +% \def\Efoo{...} +% +% It's the responsibility of \envdef to insert \begingroup before the +% actual body; @end closes the group after calling \Efoo. \envdef also +% defines \thisenv, so the current environment is known; @end checks +% whether the environment name matches. The \checkenv macro can also be +% used to check whether the current environment is the one expected. +% +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they +% are not treated as environments; they don't open a group. (The +% implementation of @end takes care not to call \endgroup in this +% special case.) + + +% At run-time, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty + +% ... but they get defined via ``\envdef\foo{...}'': +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} + +% Check whether we're in the right environment: +\def\checkenv#1{% + \def\temp{#1}% + \ifx\thisenv\temp + \else + \badenverr + \fi +} + +% Environment mismatch, #1 expected: +\def\badenverr{% + \errhelp = \EMsimple + \errmessage{This command can appear only \inenvironment\temp, + not \inenvironment\thisenv}% +} +\def\inenvironment#1{% + \ifx#1\empty + out of any environment% + \else + in environment \expandafter\string#1% + \fi +} + +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv +% +\parseargdef\end{% + \if 1\csname iscond.#1\endcsname + \else + % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 + \expandafter\checkenv\csname#1\endcsname + \csname E#1\endcsname + \endgroup + \fi +} + +\newhelp\EMsimple{Press RETURN to continue.} + + +%% Simple single-character @ commands + +% @@ prints an @ +% Kludge this until the fonts are right (grr). +\def\@{{\tt\char64}} + +% This is turned off because it was never documented +% and you can use @w{...} around a quote to suppress ligatures. +%% Define @` and @' to be the same as ` and ' +%% but suppressing ligatures. +%\def\`{{`}} +%\def\'{{'}} + +% Used to generate quoted braces. +\def\mylbrace {{\tt\char123}} +\def\myrbrace {{\tt\char125}} +\let\{=\mylbrace +\let\}=\myrbrace +\begingroup + % Definitions to produce \{ and \} commands for indices, + % and @{ and @} for the aux/toc files. + \catcode`\{ = \other \catcode`\} = \other + \catcode`\[ = 1 \catcode`\] = 2 + \catcode`\! = 0 \catcode`\\ = \other + !gdef!lbracecmd[\{]% + !gdef!rbracecmd[\}]% + !gdef!lbraceatcmd[@{]% + !gdef!rbraceatcmd[@}]% +!endgroup + +% @comma{} to avoid , parsing problems. +\let\comma = , + +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. +\let\, = \c +\let\dotaccent = \. +\def\ringaccent#1{{\accent23 #1}} +\let\tieaccent = \t +\let\ubaraccent = \b +\let\udotaccent = \d + +% Other special characters: @questiondown @exclamdown @ordf @ordm +% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. +\def\questiondown{?`} +\def\exclamdown{!`} +\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} +\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} + +% Dotless i and dotless j, used for accents. +\def\imacro{i} +\def\jmacro{j} +\def\dotless#1{% + \def\temp{#1}% + \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi + \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi + \else \errmessage{@dotless can be used only with i or j}% + \fi\fi +} + +% The \TeX{} logo, as in plain, but resetting the spacing so that a +% period following counts as ending a sentence. (Idea found in latex.) +% +\edef\TeX{\TeX \spacefactor=1000 } + +% @LaTeX{} logo. Not quite the same results as the definition in +% latex.ltx, since we use a different font for the raised A; it's most +% convenient for us to use an explicitly smaller font, rather than using +% the \scriptstyle font (since we don't reset \scriptstyle and +% \scriptscriptstyle). +% +\def\LaTeX{% + L\kern-.36em + {\setbox0=\hbox{T}% + \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% + \kern-.15em + \TeX +} + +% Be sure we're in horizontal mode when doing a tie, since we make space +% equivalent to this in @example-like environments. Otherwise, a space +% at the beginning of a line will start with \penalty -- and +% since \penalty is valid in vertical mode, we'd end up putting the +% penalty on the vertical list instead of in the new paragraph. +{\catcode`@ = 11 + % Avoid using \@M directly, because that causes trouble + % if the definition is written into an index file. + \global\let\tiepenalty = \@M + \gdef\tie{\leavevmode\penalty\tiepenalty\ } +} + +% @: forces normal size whitespace following. +\def\:{\spacefactor=1000 } + +% @* forces a line break. +\def\*{\hfil\break\hbox{}\ignorespaces} + +% @/ allows a line break. +\let\/=\allowbreak + +% @. is an end-of-sentence period. +\def\.{.\spacefactor=\endofsentencespacefactor\space} + +% @! is an end-of-sentence bang. +\def\!{!\spacefactor=\endofsentencespacefactor\space} + +% @? is an end-of-sentence query. +\def\?{?\spacefactor=\endofsentencespacefactor\space} + +% @frenchspacing on|off says whether to put extra space after punctuation. +% +\def\onword{on} +\def\offword{off} +% +\parseargdef\frenchspacing{% + \def\temp{#1}% + \ifx\temp\onword \plainfrenchspacing + \else\ifx\temp\offword \plainnonfrenchspacing + \else + \errhelp = \EMsimple + \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% + \fi\fi +} + +% @w prevents a word break. Without the \leavevmode, @w at the +% beginning of a paragraph, when TeX is still in vertical mode, would +% produce a whole line of output instead of starting the paragraph. +\def\w#1{\leavevmode\hbox{#1}} + +% @group ... @end group forces ... to be all on one page, by enclosing +% it in a TeX vbox. We use \vtop instead of \vbox to construct the box +% to keep its height that of a normal line. According to the rules for +% \topskip (p.114 of the TeXbook), the glue inserted is +% max (\topskip - \ht (first item), 0). If that height is large, +% therefore, no glue is inserted, and the space between the headline and +% the text is small, which looks bad. +% +% Another complication is that the group might be very large. This can +% cause the glue on the previous page to be unduly stretched, because it +% does not have much material. In this case, it's better to add an +% explicit \vfill so that the extra space is at the bottom. The +% threshold for doing this is if the group is more than \vfilllimit +% percent of a page (\vfilllimit can be changed inside of @tex). +% +\newbox\groupbox +\def\vfilllimit{0.7} +% +\envdef\group{% + \ifnum\catcode`\^^M=\active \else + \errhelp = \groupinvalidhelp + \errmessage{@group invalid in context where filling is enabled}% + \fi + \startsavinginserts + % + \setbox\groupbox = \vtop\bgroup + % Do @comment since we are called inside an environment such as + % @example, where each end-of-line in the input causes an + % end-of-line in the output. We don't want the end-of-line after + % the `@group' to put extra space in the output. Since @group + % should appear on a line by itself (according to the Texinfo + % manual), we don't worry about eating any user text. + \comment +} +% +% The \vtop produces a box with normal height and large depth; thus, TeX puts +% \baselineskip glue before it, and (when the next line of text is done) +% \lineskip glue after it. Thus, space below is not quite equal to space +% above. But it's pretty close. +\def\Egroup{% + % To get correct interline space between the last line of the group + % and the first line afterwards, we have to propagate \prevdepth. + \endgraf % Not \par, as it may have been set to \lisppar. + \global\dimen1 = \prevdepth + \egroup % End the \vtop. + % \dimen0 is the vertical size of the group's box. + \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox + % \dimen2 is how much space is left on the page (more or less). + \dimen2 = \pageheight \advance\dimen2 by -\pagetotal + % if the group doesn't fit on the current page, and it's a big big + % group, force a page break. + \ifdim \dimen0 > \dimen2 + \ifdim \pagetotal < \vfilllimit\pageheight + \page + \fi + \fi + \box\groupbox + \prevdepth = \dimen1 + \checkinserts +} +% +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help +% message, so this ends up printing `@group can only ...'. +% +\newhelp\groupinvalidhelp{% +group can only be used in environments such as @example,^^J% +where each line of input produces a line of output.} + +% @need space-in-mils +% forces a page break if there is not space-in-mils remaining. + +\newdimen\mil \mil=0.001in + +% Old definition--didn't work. +%\parseargdef\need{\par % +%% This method tries to make TeX break the page naturally +%% if the depth of the box does not fit. +%{\baselineskip=0pt% +%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak +%\prevdepth=-1000pt +%}} + +\parseargdef\need{% + % Ensure vertical mode, so we don't make a big box in the middle of a + % paragraph. + \par + % + % If the @need value is less than one line space, it's useless. + \dimen0 = #1\mil + \dimen2 = \ht\strutbox + \advance\dimen2 by \dp\strutbox + \ifdim\dimen0 > \dimen2 + % + % Do a \strut just to make the height of this box be normal, so the + % normal leading is inserted relative to the preceding line. + % And a page break here is fine. + \vtop to #1\mil{\strut\vfil}% + % + % TeX does not even consider page breaks if a penalty added to the + % main vertical list is 10000 or more. But in order to see if the + % empty box we just added fits on the page, we must make it consider + % page breaks. On the other hand, we don't want to actually break the + % page after the empty box. So we use a penalty of 9999. + % + % There is an extremely small chance that TeX will actually break the + % page at this \penalty, if there are no other feasible breakpoints in + % sight. (If the user is using lots of big @group commands, which + % almost-but-not-quite fill up a page, TeX will have a hard time doing + % good page breaking, for example.) However, I could not construct an + % example where a page broke at this \penalty; if it happens in a real + % document, then we can reconsider our strategy. + \penalty9999 + % + % Back up by the size of the box, whether we did a page break or not. + \kern -#1\mil + % + % Do not allow a page break right after this kern. + \nobreak + \fi +} + +% @br forces paragraph break (and is undocumented). + +\let\br = \par + +% @page forces the start of a new page. +% +\def\page{\par\vfill\supereject} + +% @exdent text.... +% outputs text on separate line in roman font, starting at standard page margin + +% This records the amount of indent in the innermost environment. +% That's how much \exdent should take out. +\newskip\exdentamount + +% This defn is used inside fill environments such as @defun. +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} + +% This defn is used inside nofill environments such as @example. +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount + \leftline{\hskip\leftskip{\rm#1}}}} + +% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current +% paragraph. For more general purposes, use the \margin insertion +% class. WHICH is `l' or `r'. +% +\newskip\inmarginspacing \inmarginspacing=1cm +\def\strutdepth{\dp\strutbox} +% +\def\doinmargin#1#2{\strut\vadjust{% + \nobreak + \kern-\strutdepth + \vtop to \strutdepth{% + \baselineskip=\strutdepth + \vss + % if you have multiple lines of stuff to put here, you'll need to + % make the vbox yourself of the appropriate size. + \ifx#1l% + \llap{\ignorespaces #2\hskip\inmarginspacing}% + \else + \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% + \fi + \null + }% +}} +\def\inleftmargin{\doinmargin l} +\def\inrightmargin{\doinmargin r} +% +% @inmargin{TEXT [, RIGHT-TEXT]} +% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; +% else use TEXT for both). +% +\def\inmargin#1{\parseinmargin #1,,\finish} +\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \def\lefttext{#1}% have both texts + \def\righttext{#2}% + \else + \def\lefttext{#1}% have only one text + \def\righttext{#1}% + \fi + % + \ifodd\pageno + \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin + \else + \def\temp{\inleftmargin\lefttext}% + \fi + \temp +} + +% @include FILE -- \input text of FILE. +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% + \pushthisfilestack + \def\thisfile{#1}% + {% + \makevalueexpandable % we want to expand any @value in FILE. + \turnoffactive % and allow special characters in the expansion + \edef\temp{\noexpand\input #1 }% + % + % This trickery is to read FILE outside of a group, in case it makes + % definitions, etc. + \expandafter + }\temp + \popthisfilestack +} +\def\filenamecatcodes{% + \catcode`\\=\other + \catcode`~=\other + \catcode`^=\other + \catcode`_=\other + \catcode`|=\other + \catcode`<=\other + \catcode`>=\other + \catcode`+=\other + \catcode`-=\other +} + +\def\pushthisfilestack{% + \expandafter\pushthisfilestackX\popthisfilestack\StackTerm +} +\def\pushthisfilestackX{% + \expandafter\pushthisfilestackY\thisfile\StackTerm +} +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% + \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: + the stack of filenames is empty.}} + +\def\thisfile{} + +% @center line +% outputs that line, centered. +% +\parseargdef\center{% + \ifhmode + \let\next\centerH + \else + \let\next\centerV + \fi + \next{\hfil \ignorespaces#1\unskip \hfil}% +} +\def\centerH#1{% + {% + \hfil\break + \advance\hsize by -\leftskip + \advance\hsize by -\rightskip + \line{#1}% + \break + }% +} +\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} + +% @sp n outputs n lines of vertical space + +\parseargdef\sp{\vskip #1\baselineskip} + +% @comment ...line which is ignored... +% @c is the same as @comment +% @ignore ... @end ignore is another way to write a comment + +\def\comment{\begingroup \catcode`\^^M=\other% +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% +\commentxxx} +{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} + +\let\c=\comment + +% @paragraphindent NCHARS +% We'll use ems for NCHARS, close enough. +% NCHARS can also be the word `asis' or `none'. +% We cannot feasibly implement @paragraphindent asis, though. +% +\def\asisword{asis} % no translation, these are keywords +\def\noneword{none} +% +\parseargdef\paragraphindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \defaultparindent = 0pt + \else + \defaultparindent = #1em + \fi + \fi + \parindent = \defaultparindent +} + +% @exampleindent NCHARS +% We'll use ems for NCHARS like @paragraphindent. +% It seems @exampleindent asis isn't necessary, but +% I preserve it to make it similar to @paragraphindent. +\parseargdef\exampleindent{% + \def\temp{#1}% + \ifx\temp\asisword + \else + \ifx\temp\noneword + \lispnarrowing = 0pt + \else + \lispnarrowing = #1em + \fi + \fi +} + +% @firstparagraphindent WORD +% If WORD is `none', then suppress indentation of the first paragraph +% after a section heading. If WORD is `insert', then do indent at such +% paragraphs. +% +% The paragraph indentation is suppressed or not by calling +% \suppressfirstparagraphindent, which the sectioning commands do. +% We switch the definition of this back and forth according to WORD. +% By default, we suppress indentation. +% +\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} +\def\insertword{insert} +% +\parseargdef\firstparagraphindent{% + \def\temp{#1}% + \ifx\temp\noneword + \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent + \else\ifx\temp\insertword + \let\suppressfirstparagraphindent = \relax + \else + \errhelp = \EMsimple + \errmessage{Unknown @firstparagraphindent option `\temp'}% + \fi\fi +} + +% Here is how we actually suppress indentation. Redefine \everypar to +% \kern backwards by \parindent, and then reset itself to empty. +% +% We also make \indent itself not actually do anything until the next +% paragraph. +% +\gdef\dosuppressfirstparagraphindent{% + \gdef\indent{% + \restorefirstparagraphindent + \indent + }% + \gdef\noindent{% + \restorefirstparagraphindent + \noindent + }% + \global\everypar = {% + \kern -\parindent + \restorefirstparagraphindent + }% +} + +\gdef\restorefirstparagraphindent{% + \global \let \indent = \ptexindent + \global \let \noindent = \ptexnoindent + \global \everypar = {}% +} + + +% @asis just yields its argument. Used with @table, for example. +% +\def\asis#1{#1} + +% @math outputs its argument in math mode. +% +% One complication: _ usually means subscripts, but it could also mean +% an actual _ character, as in @math{@var{some_variable} + 1}. So make +% _ active, and distinguish by seeing if the current family is \slfam, +% which is what @var uses. +{ + \catcode`\_ = \active + \gdef\mathunderscore{% + \catcode`\_=\active + \def_{\ifnum\fam=\slfam \_\else\sb\fi}% + } +} +% Another complication: we want \\ (and @\) to output a \ character. +% FYI, plain.tex uses \\ as a temporary control sequence (why?), but +% this is not advertised and we don't care. Texinfo does not +% otherwise define @\. +% +% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. +\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} +% +\def\math{% + \tex + \mathunderscore + \let\\ = \mathbackslash + \mathactive + % make the texinfo accent commands work in math mode + \let\"=\ddot + \let\'=\acute + \let\==\bar + \let\^=\hat + \let\`=\grave + \let\u=\breve + \let\v=\check + \let\~=\tilde + \let\dotaccent=\dot + $\finishmath +} +\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. + +% Some active characters (such as <) are spaced differently in math. +% We have to reset their definitions in case the @math was an argument +% to a command which sets the catcodes (such as @item or @section). +% +{ + \catcode`^ = \active + \catcode`< = \active + \catcode`> = \active + \catcode`+ = \active + \gdef\mathactive{% + \let^ = \ptexhat + \let< = \ptexless + \let> = \ptexgtr + \let+ = \ptexplus + } +} + +% Some math mode symbols. +\def\bullet{$\ptexbullet$} +\def\geq{\ifmmode \ge\else $\ge$\fi} +\def\leq{\ifmmode \le\else $\le$\fi} +\def\minus{\ifmmode -\else $-$\fi} + +% @dots{} outputs an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in the cm +% typewriter fonts as three actual period characters; on the other hand, +% in other typewriter fonts three periods are wider than 1.5em. So do +% whichever is larger. +% +\def\dots{% + \leavevmode + \setbox0=\hbox{...}% get width of three periods + \ifdim\wd0 > 1.5em + \dimen0 = \wd0 + \else + \dimen0 = 1.5em + \fi + \hbox to \dimen0{% + \hskip 0pt plus.25fil + .\hskip 0pt plus1fil + .\hskip 0pt plus1fil + .\hskip 0pt plus.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \dots + \spacefactor=\endofsentencespacefactor +} + +% @comma{} is so commas can be inserted into text without messing up +% Texinfo's parsing. +% +\let\comma = , + +% @refill is a no-op. +\let\refill=\relax + +% If working on a large document in chapters, it is convenient to +% be able to disable indexing, cross-referencing, and contents, for test runs. +% This is done with @novalidate (before @setfilename). +% +\newif\iflinks \linkstrue % by default we want the aux files. +\let\novalidate = \linksfalse + +% @setfilename is done at the beginning of every texinfo file. +% So open here the files we need to have open while reading the input. +% This makes it possible to make a .fmt file for texinfo. +\def\setfilename{% + \fixbackslash % Turn off hack to swallow `\input texinfo'. + \iflinks + \tryauxfile + % Open the new aux file. TeX will close it automatically at exit. + \immediate\openout\auxfile=\jobname.aux + \fi % \openindices needs to do some work in any case. + \openindices + \let\setfilename=\comment % Ignore extra @setfilename cmds. + % + % If texinfo.cnf is present on the system, read it. + % Useful for site-wide @afourpaper, etc. + \openin 1 texinfo.cnf + \ifeof 1 \else \input texinfo.cnf \fi + \closein 1 + % + \comment % Ignore the actual filename. +} + +% Called from \setfilename. +% +\def\openindices{% + \newindex{cp}% + \newcodeindex{fn}% + \newcodeindex{vr}% + \newcodeindex{tp}% + \newcodeindex{ky}% + \newcodeindex{pg}% +} + +% @bye. +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} + + +\message{pdf,} +% adobe `portable' document format +\newcount\tempnum +\newcount\lnkcount +\newtoks\filename +\newcount\filenamelength +\newcount\pgn +\newtoks\toksA +\newtoks\toksB +\newtoks\toksC +\newtoks\toksD +\newbox\boxA +\newcount\countA +\newif\ifpdf +\newif\ifpdfmakepagedest + +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as \undefined, +% borrowed from ifpdf.sty. +\ifx\pdfoutput\undefined +\else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi + +% PDF uses PostScript string constants for the names of xref targets, +% for display in the outlines, and in other places. Thus, we have to +% double any backslashes. Otherwise, a name like "\node" will be +% interpreted as a newline (\n), followed by o, d, e. Not good. +% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html +% (and related messages, the final outcome is that it is up to the TeX +% user to double the backslashes and otherwise make the string valid, so +% that's what we do). + +% double active backslashes. +% +{\catcode`\@=0 \catcode`\\=\active + @gdef@activebackslashdouble{% + @catcode`@\=@active + @let\=@doublebackslash} +} + +% To handle parens, we must adopt a different approach, since parens are +% not active characters. hyperref.dtx (which has the same problem as +% us) handles it with this amazing macro to replace tokens, with minor +% changes for Texinfo. It is included here under the GPL by permission +% from the author, Heiko Oberdiek. +% +% #1 is the tokens to replace. +% #2 is the replacement. +% #3 is the control sequence with the string. +% +\def\HyPsdSubst#1#2#3{% + \def\HyPsdReplace##1#1##2\END{% + ##1% + \ifx\\##2\\% + \else + #2% + \HyReturnAfterFi{% + \HyPsdReplace##2\END + }% + \fi + }% + \xdef#3{\expandafter\HyPsdReplace#3#1\END}% +} +\long\def\HyReturnAfterFi#1\fi{\fi#1} + +% #1 is a control sequence in which to do the replacements. +\def\backslashparens#1{% + \xdef#1{#1}% redefine it as its expansion; the definition is simply + % \lastnode when called from \setref -> \pdfmkdest. + \HyPsdSubst{(}{\realbackslash(}{#1}% + \HyPsdSubst{)}{\realbackslash)}{#1}% +} + +\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images +with PDF output, and none of those formats could be found. (.eps cannot +be supported due to the design of the PDF format; use regular TeX (DVI +output) for that.)} + +\ifpdf + % + % Color manipulation macros based on pdfcolor.tex. + \def\cmykDarkRed{0.28 1 1 0.35} + \def\cmykBlack{0 0 0 1} + % + \def\pdfsetcolor#1{\pdfliteral{#1 k}} + % Set color, and create a mark which defines \thiscolor accordingly, + % so that \makeheadline knows which color to restore. + \def\setcolor#1{% + \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% + \domark + \pdfsetcolor{#1}% + } + % + \def\maincolor{\cmykBlack} + \pdfsetcolor{\maincolor} + \edef\thiscolor{\maincolor} + \def\lastcolordefs{} + % + \def\makefootline{% + \baselineskip24pt + \line{\pdfsetcolor{\maincolor}\the\footline}% + } + % + \def\makeheadline{% + \vbox to 0pt{% + \vskip-22.5pt + \line{% + \vbox to8.5pt{}% + % Extract \thiscolor definition from the marks. + \getcolormarks + % Typeset the headline with \maincolor, then restore the color. + \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% + }% + \vss + }% + \nointerlineskip + } + % + % + \pdfcatalog{/PageMode /UseOutlines} + % + % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). + \def\dopdfimage#1#2#3{% + \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% + \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% + % + % pdftex (and the PDF format) support .png, .jpg, .pdf (among + % others). Let's try in that order. + \let\pdfimgext=\empty + \begingroup + \openin 1 #1.png \ifeof 1 + \openin 1 #1.jpg \ifeof 1 + \openin 1 #1.jpeg \ifeof 1 + \openin 1 #1.JPG \ifeof 1 + \openin 1 #1.pdf \ifeof 1 + \openin 1 #1.PDF \ifeof 1 + \errhelp = \nopdfimagehelp + \errmessage{Could not find image file #1 for pdf}% + \else \gdef\pdfimgext{PDF}% + \fi + \else \gdef\pdfimgext{pdf}% + \fi + \else \gdef\pdfimgext{JPG}% + \fi + \else \gdef\pdfimgext{jpeg}% + \fi + \else \gdef\pdfimgext{jpg}% + \fi + \else \gdef\pdfimgext{png}% + \fi + \closein 1 + \endgroup + % + % without \immediate, ancient pdftex seg faults when the same image is + % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) + \ifnum\pdftexversion < 14 + \immediate\pdfimage + \else + \immediate\pdfximage + \fi + \ifdim \wd0 >0pt width \imagewidth \fi + \ifdim \wd2 >0pt height \imageheight \fi + \ifnum\pdftexversion<13 + #1.\pdfimgext + \else + {#1.\pdfimgext}% + \fi + \ifnum\pdftexversion < 14 \else + \pdfrefximage \pdflastximage + \fi} + % + \def\pdfmkdest#1{{% + % We have to set dummies so commands such as @code, and characters + % such as \, aren't expanded when present in a section title. + \indexnofonts + \turnoffactive + \activebackslashdouble + \makevalueexpandable + \def\pdfdestname{#1}% + \backslashparens\pdfdestname + \safewhatsit{\pdfdest name{\pdfdestname} xyz}% + }} + % + % used to mark target names; must be expandable. + \def\pdfmkpgn#1{#1} + % + % by default, use a color that is dark enough to print on paper as + % nearly black, but still distinguishable for online viewing. + \def\urlcolor{\cmykDarkRed} + \def\linkcolor{\cmykDarkRed} + \def\endlink{\setcolor{\maincolor}\pdfendlink} + % + % Adding outlines to PDF; macros for calculating structure of outlines + % come from Petr Olsak + \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% + \else \csname#1\endcsname \fi} + \def\advancenumber#1{\tempnum=\expnumber{#1}\relax + \advance\tempnum by 1 + \expandafter\xdef\csname#1\endcsname{\the\tempnum}} + % + % #1 is the section text, which is what will be displayed in the + % outline by the pdf viewer. #2 is the pdf expression for the number + % of subentries (or empty, for subsubsections). #3 is the node text, + % which might be empty if this toc entry had no corresponding node. + % #4 is the page number + % + \def\dopdfoutline#1#2#3#4{% + % Generate a link to the node text if that exists; else, use the + % page number. We could generate a destination for the section + % text in the case where a section has no node, but it doesn't + % seem worth the trouble, since most documents are normally structured. + \def\pdfoutlinedest{#3}% + \ifx\pdfoutlinedest\empty + \def\pdfoutlinedest{#4}% + \else + % Doubled backslashes in the name. + {\activebackslashdouble \xdef\pdfoutlinedest{#3}% + \backslashparens\pdfoutlinedest}% + \fi + % + % Also double the backslashes in the display string. + {\activebackslashdouble \xdef\pdfoutlinetext{#1}% + \backslashparens\pdfoutlinetext}% + % + \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% + } + % + \def\pdfmakeoutlines{% + \begingroup + % Thanh's hack / proper braces in bookmarks + \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace + \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace + % + % Read toc silently, to get counts of subentries for \pdfoutline. + \def\numchapentry##1##2##3##4{% + \def\thischapnum{##2}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + }% + \def\numsecentry##1##2##3##4{% + \advancenumber{chap\thischapnum}% + \def\thissecnum{##2}% + \def\thissubsecnum{0}% + }% + \def\numsubsecentry##1##2##3##4{% + \advancenumber{sec\thissecnum}% + \def\thissubsecnum{##2}% + }% + \def\numsubsubsecentry##1##2##3##4{% + \advancenumber{subsec\thissubsecnum}% + }% + \def\thischapnum{0}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + % + % use \def rather than \let here because we redefine \chapentry et + % al. a second time, below. + \def\appentry{\numchapentry}% + \def\appsecentry{\numsecentry}% + \def\appsubsecentry{\numsubsecentry}% + \def\appsubsubsecentry{\numsubsubsecentry}% + \def\unnchapentry{\numchapentry}% + \def\unnsecentry{\numsecentry}% + \def\unnsubsecentry{\numsubsecentry}% + \def\unnsubsubsecentry{\numsubsubsecentry}% + \readdatafile{toc}% + % + % Read toc second time, this time actually producing the outlines. + % The `-' means take the \expnumber as the absolute number of + % subentries, which we calculated on our first read of the .toc above. + % + % We use the node names as the destinations. + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% count is always zero + \dopdfoutline{##1}{}{##3}{##4}}% + % + % PDF outlines are displayed using system fonts, instead of + % document fonts. Therefore we cannot use special characters, + % since the encoding is unknown. For example, the eogonek from + % Latin 2 (0xea) gets translated to a | character. Info from + % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. + % + % xx to do this right, we have to translate 8-bit characters to + % their "best" equivalent, based on the @documentencoding. Right + % now, I guess we'll just let the pdf reader have its way. + \indexnofonts + \setupdatafile + \catcode`\\=\active \otherbackslash + \input \tocreadfilename + \endgroup + } + % + \def\skipspaces#1{\def\PP{#1}\def\D{|}% + \ifx\PP\D\let\nextsp\relax + \else\let\nextsp\skipspaces + \ifx\p\space\else\addtokens{\filename}{\PP}% + \advance\filenamelength by 1 + \fi + \fi + \nextsp} + \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} + \ifnum\pdftexversion < 14 + \let \startlink \pdfannotlink + \else + \let \startlink \pdfstartlink + \fi + % make a live url in pdf output. + \def\pdfurl#1{% + \begingroup + % it seems we really need yet another set of dummies; have not + % tried to figure out what each command should do in the context + % of @url. for now, just make @/ a no-op, that's the only one + % people have actually reported a problem with. + % + \normalturnoffactive + \def\@{@}% + \let\/=\empty + \makevalueexpandable + \leavevmode\setcolor{\urlcolor}% + \startlink attr{/Border [0 0 0]}% + user{/Subtype /Link /A << /S /URI /URI (#1) >>}% + \endgroup} + \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} + \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} + \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} + \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} + \def\maketoks{% + \expandafter\poptoks\the\toksA|ENDTOKS|\relax + \ifx\first0\adn0 + \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 + \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 + \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 + \else + \ifnum0=\countA\else\makelink\fi + \ifx\first.\let\next=\done\else + \let\next=\maketoks + \addtokens{\toksB}{\the\toksD} + \ifx\first,\addtokens{\toksB}{\space}\fi + \fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \next} + \def\makelink{\addtokens{\toksB}% + {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} + \def\pdflink#1{% + \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} + \setcolor{\linkcolor}#1\endlink} + \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} +\else + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\setcolor = \gobble + \let\pdfsetcolor = \gobble + \let\pdfmakeoutlines = \relax +\fi % \ifx\pdfoutput + + +\message{fonts,} + +% Change the current font style to #1, remembering it in \curfontstyle. +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in +% italics, not bold italics. +% +\def\setfontstyle#1{% + \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. + \csname ten#1\endcsname % change the current font +} + +% Select #1 fonts with the current style. +% +\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} + +\def\rm{\fam=0 \setfontstyle{rm}} +\def\it{\fam=\itfam \setfontstyle{it}} +\def\sl{\fam=\slfam \setfontstyle{sl}} +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} +\def\tt{\fam=\ttfam \setfontstyle{tt}} + +% Texinfo sort of supports the sans serif font style, which plain TeX does not. +% So we set up a \sf. +\newfam\sffam +\def\sf{\fam=\sffam \setfontstyle{sf}} +\let\li = \sf % Sometimes we call it \li, not \sf. + +% We don't need math for this font style. +\def\ttsl{\setfontstyle{ttsl}} + + +% Default leading. +\newdimen\textleading \textleading = 13.2pt + +% Set the baselineskip to #1, and the lineskip and strut size +% correspondingly. There is no deep meaning behind these magic numbers +% used as factors; they just match (closely enough) what Knuth defined. +% +\def\lineskipfactor{.08333} +\def\strutheightpercent{.70833} +\def\strutdepthpercent {.29167} +% +% can get a sort of poor man's double spacing by redefining this. +\def\baselinefactor{1} +% +\def\setleading#1{% + \dimen0 = #1\relax + \normalbaselineskip = \baselinefactor\dimen0 + \normallineskip = \lineskipfactor\normalbaselineskip + \normalbaselines + \setbox\strutbox =\hbox{% + \vrule width0pt height\strutheightpercent\baselineskip + depth \strutdepthpercent \baselineskip + }% +} + +% PDF CMaps. See also LaTeX's t1.cmap. +% +% do nothing with this by default. +\expandafter\let\csname cmapOT1\endcsname\gobble +\expandafter\let\csname cmapOT1IT\endcsname\gobble +\expandafter\let\csname cmapOT1TT\endcsname\gobble + +% if we are producing pdf, and we have \pdffontattr, then define cmaps. +% (\pdffontattr was introduced many years ago, but people still run +% older pdftex's; it's easy to conditionalize, so we do.) +\ifpdf \ifx\pdffontattr\undefined \else + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1-0) +%%Title: (TeX-OT1-0 TeX OT1 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1) +/Supplement 0 +>> def +/CMapName /TeX-OT1-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<23> <26> <0023> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +40 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1IT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1IT-0) +%%Title: (TeX-OT1IT-0 TeX OT1IT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1IT) +/Supplement 0 +>> def +/CMapName /TeX-OT1IT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +8 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<25> <26> <0025> +<28> <3B> <0028> +<3F> <5B> <003F> +<5D> <5E> <005D> +<61> <7A> <0061> +<7B> <7C> <2013> +endbfrange +42 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <00660066> +<0C> <00660069> +<0D> <0066006C> +<0E> <006600660069> +<0F> <00660066006C> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<21> <0021> +<22> <201D> +<23> <0023> +<24> <00A3> +<27> <2019> +<3C> <00A1> +<3D> <003D> +<3E> <00BF> +<5C> <201C> +<5F> <02D9> +<60> <2018> +<7D> <02DD> +<7E> <007E> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1IT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +% +% \cmapOT1TT + \begingroup + \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. + \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: ProcSet (CIDInit) +%%IncludeResource: ProcSet (CIDInit) +%%BeginResource: CMap (TeX-OT1TT-0) +%%Title: (TeX-OT1TT-0 TeX OT1TT 0) +%%Version: 1.000 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (TeX) +/Ordering (OT1TT) +/Supplement 0 +>> def +/CMapName /TeX-OT1TT-0 def +/CMapType 2 def +1 begincodespacerange +<00> <7F> +endcodespacerange +5 beginbfrange +<00> <01> <0393> +<09> <0A> <03A8> +<21> <26> <0021> +<28> <5F> <0028> +<61> <7E> <0061> +endbfrange +32 beginbfchar +<02> <0398> +<03> <039B> +<04> <039E> +<05> <03A0> +<06> <03A3> +<07> <03D2> +<08> <03A6> +<0B> <2191> +<0C> <2193> +<0D> <0027> +<0E> <00A1> +<0F> <00BF> +<10> <0131> +<11> <0237> +<12> <0060> +<13> <00B4> +<14> <02C7> +<15> <02D8> +<16> <00AF> +<17> <02DA> +<18> <00B8> +<19> <00DF> +<1A> <00E6> +<1B> <0153> +<1C> <00F8> +<1D> <00C6> +<1E> <0152> +<1F> <00D8> +<20> <2423> +<27> <2019> +<60> <2018> +<7F> <00A8> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF + }\endgroup + \expandafter\edef\csname cmapOT1TT\endcsname#1{% + \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% + }% +\fi\fi + + +% Set the font macro #1 to the font named #2, adding on the +% specified font prefix (normally `cm'). +% #3 is the font's design size, #4 is a scale factor, #5 is the CMap +% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass +% empty to omit). +\def\setfont#1#2#3#4#5{% + \font#1=\fontprefix#2#3 scaled #4 + \csname cmap#5\endcsname#1% +} +% This is what gets called when #5 of \setfont is empty. +\let\cmap\gobble +% emacs-page end of cmaps + +% Use cm as the default font prefix. +% To specify the font prefix, you must define \fontprefix +% before you read in texinfo.tex. +\ifx\fontprefix\undefined +\def\fontprefix{cm} +\fi +% Support font families that don't use the same naming scheme as CM. +\def\rmshape{r} +\def\rmbshape{bx} %where the normal face is bold +\def\bfshape{b} +\def\bxshape{bx} +\def\ttshape{tt} +\def\ttbshape{tt} +\def\ttslshape{sltt} +\def\itshape{ti} +\def\itbshape{bxti} +\def\slshape{sl} +\def\slbshape{bxsl} +\def\sfshape{ss} +\def\sfbshape{ss} +\def\scshape{csc} +\def\scbshape{csc} + +% Definitions for a main text size of 11pt. This is the default in +% Texinfo. +% +\def\definetextfontsizexi{% +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1095} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1}{OT1} +\setfont\deftt\ttshape{10}{\magstep1}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\authorrm{\secrm} +\def\authortt{\sectt} +\def\titleecsize{2074} + +% Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} +\setfont\chaprm\rmbshape{12}{\magstep2}{OT1} +\setfont\chapit\itbshape{10}{\magstep3}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep3}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} +\setfont\chapsf\sfbshape{17}{1000}{OT1} +\let\chapbf=\chaprm +\setfont\chapsc\scbshape{10}{\magstep3}{OT1} +\font\chapi=cmmi12 scaled \magstep2 +\font\chapsy=cmsy10 scaled \magstep3 +\def\chapecsize{1728} + +% Section fonts (14.4pt). +\def\secnominalsize{14pt} +\setfont\secrm\rmbshape{12}{\magstep1}{OT1} +\setfont\secit\itbshape{10}{\magstep2}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep2}{OT1} +\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\secsf\sfbshape{12}{\magstep1}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep2}{OT1} +\font\seci=cmmi12 scaled \magstep1 +\font\secsy=cmsy10 scaled \magstep2 +\def\sececsize{1440} + +% Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} +\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} +\setfont\ssecit\itbshape{10}{1315}{OT1IT} +\setfont\ssecsl\slbshape{10}{1315}{OT1} +\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} +\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1315}{OT1} +\font\sseci=cmmi12 scaled \magstephalf +\font\ssecsy=cmsy10 scaled 1315 +\def\ssececsize{1200} + +% Reduced fonts for @acro in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000}{OT1} +\setfont\reducedtt\ttshape{10}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{1000}{OT1} +\setfont\reducedit\itshape{10}{1000}{OT1IT} +\setfont\reducedsl\slshape{10}{1000}{OT1} +\setfont\reducedsf\sfshape{10}{1000}{OT1} +\setfont\reducedsc\scshape{10}{1000}{OT1} +\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 +\def\reducedecsize{1000} + +% reset the current fonts +\textfonts +\rm +} % end of 11pt text font size definitions + + +% Definitions to make the main text be 10pt Computer Modern, with +% section, chapter, etc., sizes following suit. This is for the GNU +% Press printing of the Emacs 22 manual. Maybe other manuals in the +% future. Used with @smallbook, which sets the leading to 12pt. +% +\def\definetextfontsizex{% +% Text fonts (10pt). +\def\textnominalsize{10pt} +\edef\mainmagstep{1000} +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1} +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1} +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT} +\setfont\textsl\slshape{10}{\mainmagstep}{OT1} +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1} +\setfont\textsc\scshape{10}{\mainmagstep}{OT1} +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} +\font\texti=cmmi10 scaled \mainmagstep +\font\textsy=cmsy10 scaled \mainmagstep +\def\textecsize{1000} + +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstephalf}{OT1} +\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} +\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} + +% Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} +\setfont\smallrm\rmshape{9}{1000}{OT1} +\setfont\smalltt\ttshape{9}{1000}{OT1TT} +\setfont\smallbf\bfshape{10}{900}{OT1} +\setfont\smallit\itshape{9}{1000}{OT1IT} +\setfont\smallsl\slshape{9}{1000}{OT1} +\setfont\smallsf\sfshape{9}{1000}{OT1} +\setfont\smallsc\scshape{10}{900}{OT1} +\setfont\smallttsl\ttslshape{10}{900}{OT1TT} +\font\smalli=cmmi9 +\font\smallsy=cmsy9 +\def\smallecsize{0900} + +% Fonts for small examples (8pt). +\def\smallernominalsize{8pt} +\setfont\smallerrm\rmshape{8}{1000}{OT1} +\setfont\smallertt\ttshape{8}{1000}{OT1TT} +\setfont\smallerbf\bfshape{10}{800}{OT1} +\setfont\smallerit\itshape{8}{1000}{OT1IT} +\setfont\smallersl\slshape{8}{1000}{OT1} +\setfont\smallersf\sfshape{8}{1000}{OT1} +\setfont\smallersc\scshape{10}{800}{OT1} +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT} +\font\smalleri=cmmi8 +\font\smallersy=cmsy8 +\def\smallerecsize{0800} + +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1} +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT} +\setfont\titlesl\slbshape{10}{\magstep4}{OT1} +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1} +\let\titlebf=\titlerm +\setfont\titlesc\scbshape{10}{\magstep4}{OT1} +\font\titlei=cmmi12 scaled \magstep3 +\font\titlesy=cmsy10 scaled \magstep4 +\def\authorrm{\secrm} +\def\authortt{\sectt} +\def\titleecsize{2074} + +% Chapter fonts (14.4pt). +\def\chapnominalsize{14pt} +\setfont\chaprm\rmbshape{12}{\magstep1}{OT1} +\setfont\chapit\itbshape{10}{\magstep2}{OT1IT} +\setfont\chapsl\slbshape{10}{\magstep2}{OT1} +\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} +\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} +\setfont\chapsf\sfbshape{12}{\magstep1}{OT1} +\let\chapbf\chaprm +\setfont\chapsc\scbshape{10}{\magstep2}{OT1} +\font\chapi=cmmi12 scaled \magstep1 +\font\chapsy=cmsy10 scaled \magstep2 +\def\chapecsize{1440} + +% Section fonts (12pt). +\def\secnominalsize{12pt} +\setfont\secrm\rmbshape{12}{1000}{OT1} +\setfont\secit\itbshape{10}{\magstep1}{OT1IT} +\setfont\secsl\slbshape{10}{\magstep1}{OT1} +\setfont\sectt\ttbshape{12}{1000}{OT1TT} +\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} +\setfont\secsf\sfbshape{12}{1000}{OT1} +\let\secbf\secrm +\setfont\secsc\scbshape{10}{\magstep1}{OT1} +\font\seci=cmmi12 +\font\secsy=cmsy10 scaled \magstep1 +\def\sececsize{1200} + +% Subsection fonts (10pt). +\def\ssecnominalsize{10pt} +\setfont\ssecrm\rmbshape{10}{1000}{OT1} +\setfont\ssecit\itbshape{10}{1000}{OT1IT} +\setfont\ssecsl\slbshape{10}{1000}{OT1} +\setfont\ssectt\ttbshape{10}{1000}{OT1TT} +\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} +\setfont\ssecsf\sfbshape{10}{1000}{OT1} +\let\ssecbf\ssecrm +\setfont\ssecsc\scbshape{10}{1000}{OT1} +\font\sseci=cmmi10 +\font\ssecsy=cmsy10 +\def\ssececsize{1000} + +% Reduced fonts for @acro in text (9pt). +\def\reducednominalsize{9pt} +\setfont\reducedrm\rmshape{9}{1000}{OT1} +\setfont\reducedtt\ttshape{9}{1000}{OT1TT} +\setfont\reducedbf\bfshape{10}{900}{OT1} +\setfont\reducedit\itshape{9}{1000}{OT1IT} +\setfont\reducedsl\slshape{9}{1000}{OT1} +\setfont\reducedsf\sfshape{9}{1000}{OT1} +\setfont\reducedsc\scshape{10}{900}{OT1} +\setfont\reducedttsl\ttslshape{10}{900}{OT1TT} +\font\reducedi=cmmi9 +\font\reducedsy=cmsy9 +\def\reducedecsize{0900} + +% reduce space between paragraphs +\divide\parskip by 2 + +% reset the current fonts +\textfonts +\rm +} % end of 10pt text font size definitions + + +% We provide the user-level command +% @fonttextsize 10 +% (or 11) to redefine the text font size. pt is assumed. +% +\def\xword{10} +\def\xiword{11} +% +\parseargdef\fonttextsize{% + \def\textsizearg{#1}% + \wlog{doing @fonttextsize \textsizearg}% + % + % Set \globaldefs so that documents can use this inside @tex, since + % makeinfo 4.8 does not support it, but we need it nonetheless. + % + \begingroup \globaldefs=1 + \ifx\textsizearg\xword \definetextfontsizex + \else \ifx\textsizearg\xiword \definetextfontsizexi + \else + \errhelp=\EMsimple + \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} + \fi\fi + \endgroup +} + + +% In order for the font changes to affect most math symbols and letters, +% we have to define the \textfont of the standard families. Since +% texinfo doesn't allow for producing subscripts and superscripts except +% in the main text, we don't bother to reset \scriptfont and +% \scriptscriptfont (which would also require loading a lot more fonts). +% +\def\resetmathfonts{% + \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy + \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf + \textfont\ttfam=\tentt \textfont\sffam=\tensf +} + +% The font-changing commands redefine the meanings of \tenSTYLE, instead +% of just \STYLE. We do this because \STYLE needs to also set the +% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire +% \tenSTYLE to set the current font. +% +% Each font-changing command also sets the names \lsize (one size lower) +% and \lllsize (three sizes lower). These relative commands are used in +% the LaTeX logo and acronyms. +% +% This all needs generalizing, badly. +% +\def\textfonts{% + \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl + \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy + \let\tenttsl=\textttsl + \def\curfontsize{text}% + \def\lsize{reduced}\def\lllsize{smaller}% + \resetmathfonts \setleading{\textleading}} +\def\titlefonts{% + \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl + \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc + \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy + \let\tenttsl=\titlettsl + \def\curfontsize{title}% + \def\lsize{chap}\def\lllsize{subsec}% + \resetmathfonts \setleading{25pt}} +\def\titlefont#1{{\titlefonts\rm #1}} +\def\chapfonts{% + \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl + \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy + \let\tenttsl=\chapttsl + \def\curfontsize{chap}% + \def\lsize{sec}\def\lllsize{text}% + \resetmathfonts \setleading{19pt}} +\def\secfonts{% + \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl + \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy + \let\tenttsl=\secttsl + \def\curfontsize{sec}% + \def\lsize{subsec}\def\lllsize{reduced}% + \resetmathfonts \setleading{16pt}} +\def\subsecfonts{% + \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl + \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc + \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy + \let\tenttsl=\ssecttsl + \def\curfontsize{ssec}% + \def\lsize{text}\def\lllsize{small}% + \resetmathfonts \setleading{15pt}} +\let\subsubsecfonts = \subsecfonts +\def\reducedfonts{% + \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl + \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc + \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy + \let\tenttsl=\reducedttsl + \def\curfontsize{reduced}% + \def\lsize{small}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallfonts{% + \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl + \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc + \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy + \let\tenttsl=\smallttsl + \def\curfontsize{small}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} +\def\smallerfonts{% + \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl + \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc + \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy + \let\tenttsl=\smallerttsl + \def\curfontsize{smaller}% + \def\lsize{smaller}\def\lllsize{smaller}% + \resetmathfonts \setleading{9.5pt}} + +% Set the fonts to use with the @small... environments. +\let\smallexamplefonts = \smallfonts + +% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample +% can fit this many characters: +% 8.5x11=86 smallbook=72 a4=90 a5=69 +% If we use \scriptfonts (8pt), then we can fit this many characters: +% 8.5x11=90+ smallbook=80 a4=90+ a5=77 +% For me, subjectively, the few extra characters that fit aren't worth +% the additional smallness of 8pt. So I'm making the default 9pt. +% +% By the way, for comparison, here's what fits with @example (10pt): +% 8.5x11=71 smallbook=60 a4=75 a5=58 +% +% I wish the USA used A4 paper. +% --karl, 24jan03. + + +% Set up the default fonts, so we can use them for creating boxes. +% +\definetextfontsizexi + +% Define these so they can be easily changed for other fonts. +\def\angleleft{$\langle$} +\def\angleright{$\rangle$} + +% Count depth in font-changes, for error checks +\newcount\fontdepth \fontdepth=0 + +% Fonts for short table of contents. +\setfont\shortcontrm\rmshape{12}{1000}{OT1} +\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 +\setfont\shortcontsl\slshape{12}{1000}{OT1} +\setfont\shortconttt\ttshape{12}{1000}{OT1TT} + +%% Add scribe-like font environments, plus @l for inline lisp (usually sans +%% serif) and @ii for TeX italic + +% \smartitalic{ARG} outputs arg in italics, followed by an italic correction +% unless the following character is such as not to need one. +\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else + \ptexslash\fi\fi\fi} +\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} +\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally uses \ttsl. +% @var is set to this for defun arguments. +\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally use \sl. We never want +% ttsl for book titles, do we? +\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} + +\let\i=\smartitalic +\let\slanted=\smartslanted +\let\var=\smartslanted +\let\dfn=\smartslanted +\let\emph=\smartitalic + +% @b, explicit bold. +\def\b#1{{\bf #1}} +\let\strong=\b + +% @sansserif, explicit sans. +\def\sansserif#1{{\sf #1}} + +% We can't just use \exhyphenpenalty, because that only has effect at +% the end of a paragraph. Restore normal hyphenation at the end of the +% group within which \nohyphenation is presumably called. +% +\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} +\def\restorehyphenation{\hyphenchar\font = `- } + +% Set sfcode to normal for the chars that usually have another value. +% Can't use plain's \frenchspacing because it uses the `\x notation, and +% sometimes \x has an active definition that messes things up. +% +\catcode`@=11 + \def\plainfrenchspacing{% + \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m + \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m + \def\endofsentencespacefactor{1000}% for @. and friends + } + \def\plainnonfrenchspacing{% + \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 + \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 + \def\endofsentencespacefactor{3000}% for @. and friends + } +\catcode`@=\other +\def\endofsentencespacefactor{3000}% default + +\def\t#1{% + {\tt \rawbackslash \plainfrenchspacing #1}% + \null +} +\def\samp#1{`\tclose{#1}'\null} +\setfont\keyrm\rmshape{8}{1000}{OT1} +\font\keysy=cmsy9 +\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% + \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% + \vbox{\hrule\kern-0.4pt + \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% + \kern-0.4pt\hrule}% + \kern-.06em\raise0.4pt\hbox{\angleright}}}} +\def\key #1{{\nohyphenation \uppercase{#1}}\null} +% The old definition, with no lozenge: +%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} +\def\ctrl #1{{\tt \rawbackslash \hat}#1} + +% @file, @option are the same as @samp. +\let\file=\samp +\let\option=\samp + +% @code is a modification of @t, +% which makes spaces the same size as normal in the surrounding text. +\def\tclose#1{% + {% + % Change normal interword space to be same as for the current font. + \spaceskip = \fontdimen2\font + % + % Switch to typewriter. + \tt + % + % But `\ ' produces the large typewriter interword space. + \def\ {{\spaceskip = 0pt{} }}% + % + % Turn off hyphenation. + \nohyphenation + % + \rawbackslash + \plainfrenchspacing + #1% + }% + \null +} + +% We *must* turn on hyphenation at `-' and `_' in @code. +% Otherwise, it is too hard to avoid overfull hboxes +% in the Emacs manual, the Library manual, etc. + +% Unfortunately, TeX uses one parameter (\hyphenchar) to control +% both hyphenation at - and hyphenation within words. +% We must therefore turn them both off (\tclose does that) +% and arrange explicitly to hyphenate at a dash. +% -- rms. +{ + \catcode`\-=\active \catcode`\_=\active + \catcode`\'=\active \catcode`\`=\active + % + \global\def\code{\begingroup + \catcode\rquoteChar=\active \catcode\lquoteChar=\active + \let'\codequoteright \let`\codequoteleft + % + \catcode\dashChar=\active \catcode\underChar=\active + \ifallowcodebreaks + \let-\codedash + \let_\codeunder + \else + \let-\realdash + \let_\realunder + \fi + \codex + } +} + +\def\realdash{-} +\def\codedash{-\discretionary{}{}{}} +\def\codeunder{% + % this is all so @math{@code{var_name}+1} can work. In math mode, _ + % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) + % will therefore expand the active definition of _, which is us + % (inside @code that is), therefore an endless loop. + \ifusingtt{\ifmmode + \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. + \else\normalunderscore \fi + \discretionary{}{}{}}% + {\_}% +} +\def\codex #1{\tclose{#1}\endgroup} + +% An additional complication: the above will allow breaks after, e.g., +% each of the four underscores in __typeof__. This is undesirable in +% some manuals, especially if they don't have long identifiers in +% general. @allowcodebreaks provides a way to control this. +% +\newif\ifallowcodebreaks \allowcodebreakstrue + +\def\keywordtrue{true} +\def\keywordfalse{false} + +\parseargdef\allowcodebreaks{% + \def\txiarg{#1}% + \ifx\txiarg\keywordtrue + \allowcodebreakstrue + \else\ifx\txiarg\keywordfalse + \allowcodebreaksfalse + \else + \errhelp = \EMsimple + \errmessage{Unknown @allowcodebreaks option `\txiarg'}% + \fi\fi +} + +% @kbd is like @code, except that if the argument is just one @key command, +% then @kbd has no effect. + +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), +% `example' (@kbd uses ttsl only inside of @example and friends), +% or `code' (@kbd uses normal tty font always). +\parseargdef\kbdinputstyle{% + \def\txiarg{#1}% + \ifx\txiarg\worddistinct + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% + \else\ifx\txiarg\wordexample + \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% + \else\ifx\txiarg\wordcode + \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% + \else + \errhelp = \EMsimple + \errmessage{Unknown @kbdinputstyle option `\txiarg'}% + \fi\fi\fi +} +\def\worddistinct{distinct} +\def\wordexample{example} +\def\wordcode{code} + +% Default is `distinct.' +\kbdinputstyle distinct + +\def\xkey{\key} +\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% +\ifx\one\xkey\ifx\threex\three \key{#2}% +\else{\tclose{\kbdfont\look}}\fi +\else{\tclose{\kbdfont\look}}\fi} + +% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. +\let\indicateurl=\code +\let\env=\code +\let\command=\code + +% @clicksequence{File @click{} Open ...} +\def\clicksequence#1{\begingroup #1\endgroup} + +% @clickstyle @arrow (by default) +\parseargdef\clickstyle{\def\click{#1}} +\def\click{\arrow} + +% @uref (abbreviation for `urlref') takes an optional (comma-separated) +% second argument specifying the text to display and an optional third +% arg as text to display instead of (rather than in addition to) the url +% itself. First (mandatory) arg is the url. Perhaps eventually put in +% a hypertex \special here. +% +\def\uref#1{\douref #1,,,\finish} +\def\douref#1,#2,#3,#4\finish{\begingroup + \unsepspaces + \pdfurl{#1}% + \setbox0 = \hbox{\ignorespaces #3}% + \ifdim\wd0 > 0pt + \unhbox0 % third arg given, show only that + \else + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0 > 0pt + \ifpdf + \unhbox0 % PDF: 2nd arg given, show only it + \else + \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url + \fi + \else + \code{#1}% only url given, so show it + \fi + \fi + \endlink +\endgroup} + +% @url synonym for @uref, since that's how everyone uses it. +% +\let\url=\uref + +% rms does not like angle brackets --karl, 17may97. +% So now @email is just like @uref, unless we are pdf. +% +%\def\email#1{\angleleft{\tt #1}\angleright} +\ifpdf + \def\email#1{\doemail#1,,\finish} + \def\doemail#1,#2,#3\finish{\begingroup + \unsepspaces + \pdfurl{mailto:#1}% + \setbox0 = \hbox{\ignorespaces #2}% + \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi + \endlink + \endgroup} +\else + \let\email=\uref +\fi + +% Check if we are currently using a typewriter font. Since all the +% Computer Modern typewriter fonts have zero interword stretch (and +% shrink), and it is reasonable to expect all typewriter fonts to have +% this property, we can check that font parameter. +% +\def\ifmonospace{\ifdim\fontdimen3\font=0pt } + +% Typeset a dimension, e.g., `in' or `pt'. The only reason for the +% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. +% +\def\dmn#1{\thinspace #1} + +\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} + +% @l was never documented to mean ``switch to the Lisp font'', +% and it is not used as such in any manual I can find. We need it for +% Polish suppressed-l. --karl, 22sep96. +%\def\l#1{{\li #1}\null} + +% Explicit font changes: @r, @sc, undocumented @ii. +\def\r#1{{\rm #1}} % roman font +\def\sc#1{{\smallcaps#1}} % smallcaps font +\def\ii#1{{\it #1}} % italic font + +% @acronym for "FBI", "NATO", and the like. +% We print this one point size smaller, since it's intended for +% all-uppercase. +% +\def\acronym#1{\doacronym #1,,\finish} +\def\doacronym#1,#2,#3\finish{% + {\selectfonts\lsize #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @abbr for "Comput. J." and the like. +% No font change, but don't do end-of-sentence spacing. +% +\def\abbr#1{\doabbr #1,,\finish} +\def\doabbr#1,#2,#3\finish{% + {\plainfrenchspacing #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @pounds{} is a sterling sign, which Knuth put in the CM italic font. +% +\def\pounds{{\it\$}} + +% @euro{} comes from a separate font, depending on the current style. +% We use the free feym* fonts from the eurosym package by Henrik +% Theiling, which support regular, slanted, bold and bold slanted (and +% "outlined" (blackboard board, sort of) versions, which we don't need). +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. +% +% Although only regular is the truly official Euro symbol, we ignore +% that. The Euro is designed to be slightly taller than the regular +% font height. +% +% feymr - regular +% feymo - slanted +% feybr - bold +% feybo - bold slanted +% +% There is no good (free) typewriter version, to my knowledge. +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. +% Hmm. +% +% Also doesn't work in math. Do we need to do math with euro symbols? +% Hope not. +% +% +\def\euro{{\eurofont e}} +\def\eurofont{% + % We set the font at each command, rather than predefining it in + % \textfonts and the other font-switching commands, so that + % installations which never need the symbol don't have to have the + % font installed. + % + % There is only one designed size (nominal 10pt), so we always scale + % that to the current nominal size. + % + % By the way, simply using "at 1em" works for cmr10 and the like, but + % does not work for cmbx10 and other extended/shrunken fonts. + % + \def\eurosize{\csname\curfontsize nominalsize\endcsname}% + % + \ifx\curfontstyle\bfstylename + % bold: + \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize + \else + % regular: + \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize + \fi + \thiseurofont +} + +% Hacks for glyphs from the EC fonts similar to \euro. We don't +% use \let for the aliases, because sometimes we redefine the original +% macro, and the alias should reflect the redefinition. +\def\guillemetleft{{\ecfont \char"13}} +\def\guillemotleft{\guillemetleft} +\def\guillemetright{{\ecfont \char"14}} +\def\guillemotright{\guillemetright} +\def\guilsinglleft{{\ecfont \char"0E}} +\def\guilsinglright{{\ecfont \char"0F}} +\def\quotedblbase{{\ecfont \char"12}} +\def\quotesinglbase{{\ecfont \char"0D}} +% +\def\ecfont{% + % We can't distinguish serif/sanserif and italic/slanted, but this + % is used for crude hacks anyway (like adding French and German + % quotes to documents typeset with CM, where we lose kerning), so + % hopefully nobody will notice/care. + \edef\ecsize{\csname\curfontsize ecsize\endcsname}% + \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% + \ifx\curfontstyle\bfstylename + % bold: + \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize + \else + % regular: + \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize + \fi + \thisecfont +} + +% @registeredsymbol - R in a circle. The font for the R should really +% be smaller yet, but lllsize is the best we can do for now. +% Adapted from the plain.tex definition of \copyright. +% +\def\registeredsymbol{% + $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% + \hfil\crcr\Orb}}% + }$% +} + +% @textdegree - the normal degrees sign. +% +\def\textdegree{$^\circ$} + +% Laurent Siebenmann reports \Orb undefined with: +% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 +% so we'll define it if necessary. +% +\ifx\Orb\undefined +\def\Orb{\mathhexbox20D} +\fi + +% Quotes. +\chardef\quotedblleft="5C +\chardef\quotedblright=`\" +\chardef\quoteleft=`\` +\chardef\quoteright=`\' + + +\message{page headings,} + +\newskip\titlepagetopglue \titlepagetopglue = 1.5in +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc + +% First the title page. Must do @settitle before @titlepage. +\newif\ifseenauthor +\newif\iffinishedtitlepage + +% Do an implicit @contents or @shortcontents after @end titlepage if the +% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. +% +\newif\ifsetcontentsaftertitlepage + \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue +\newif\ifsetshortcontentsaftertitlepage + \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue + +\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% + \endgroup\page\hbox{}\page} + +\envdef\titlepage{% + % Open one extra group, as we want to close it in the middle of \Etitlepage. + \begingroup + \parindent=0pt \textfonts + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + \let\page = \oldpage + \page + \null + }% +} + +\def\Etitlepage{% + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon + % + % If they want short, they certainly want long too. + \ifsetshortcontentsaftertitlepage + \shortcontents + \contents + \global\let\shortcontents = \relax + \global\let\contents = \relax + \fi + % + \ifsetcontentsaftertitlepage + \contents + \global\let\contents = \relax + \global\let\shortcontents = \relax + \fi +} + +\def\finishtitlepage{% + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +%%% Macros to be used within @titlepage: + +\let\subtitlerm=\tenrm +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} + +\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines + \let\tt=\authortt} + +\parseargdef\title{% + \checkenv\titlepage + \leftline{\titlefonts\rm #1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt +} + +\parseargdef\subtitle{% + \checkenv\titlepage + {\subtitlefont \rightline{#1}}% +} + +% @author should come last, but may come many times. +% It can also be used inside @quotation. +% +\parseargdef\author{% + \def\temp{\quotation}% + \ifx\thisenv\temp + \def\quotationauthor{#1}% printed in \Equotation. + \else + \checkenv\titlepage + \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi + {\authorfont \leftline{#1}}% + \fi +} + + +%%% Set up page headings and footings. + +\let\thispage=\folio + +\newtoks\evenheadline % headline on even pages +\newtoks\oddheadline % headline on odd pages +\newtoks\evenfootline % footline on even pages +\newtoks\oddfootline % footline on odd pages + +% Now make TeX use those variables +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline + \else \the\evenheadline \fi}} +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline + \else \the\evenfootline \fi}\HEADINGShook} +\let\HEADINGShook=\relax + +% Commands to set those variables. +% For example, this is what @headings on does +% @evenheading @thistitle|@thispage|@thischapter +% @oddheading @thischapter|@thispage|@thistitle +% @evenfooting @thisfile|| +% @oddfooting ||@thisfile + + +\def\evenheading{\parsearg\evenheadingxxx} +\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddheading{\parsearg\oddheadingxxx} +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% + +\def\evenfooting{\parsearg\evenfootingxxx} +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} + +\def\oddfooting{\parsearg\oddfootingxxx} +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% + \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% + % + % Leave some space for the footline. Hopefully ok to assume + % @evenfooting will not be used by itself. + \global\advance\pageheight by -12pt + \global\advance\vsize by -12pt +} + +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + +% @evenheadingmarks top \thischapter <- chapter at the top of a page +% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page +% +% The same set of arguments for: +% +% @oddheadingmarks +% @evenfootingmarks +% @oddfootingmarks +% @everyheadingmarks +% @everyfootingmarks + +\def\evenheadingmarks{\headingmarks{even}{heading}} +\def\oddheadingmarks{\headingmarks{odd}{heading}} +\def\evenfootingmarks{\headingmarks{even}{footing}} +\def\oddfootingmarks{\headingmarks{odd}{footing}} +\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} + \headingmarks{odd}{heading}{#1} } +\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} + \headingmarks{odd}{footing}{#1} } +% #1 = even/odd, #2 = heading/footing, #3 = top/bottom. +\def\headingmarks#1#2#3 {% + \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname + \global\expandafter\let\csname get#1#2marks\endcsname \temp +} + +\everyheadingmarks bottom +\everyfootingmarks bottom + +% @headings double turns headings on for double-sided printing. +% @headings single turns headings on for single-sided printing. +% @headings off turns them off. +% @headings on same as @headings double, retained for compatibility. +% @headings after turns on double-sided headings after this page. +% @headings doubleafter turns on double-sided headings after this page. +% @headings singleafter turns on single-sided headings after this page. +% By default, they are off at the start of a document, +% and turned `on' after @end titlepage. + +\def\headings #1 {\csname HEADINGS#1\endcsname} + +\def\HEADINGSoff{% +\global\evenheadline={\hfil} \global\evenfootline={\hfil} +\global\oddheadline={\hfil} \global\oddfootline={\hfil}} +\HEADINGSoff +% When we turn headings on, set the page number to 1. +% For double-sided printing, put current file name in lower left corner, +% chapter name on inside top of right hand pages, document +% title on inside top of left hand pages, and page numbers on outside top +% edge of all pages. +\def\HEADINGSdouble{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} +\let\contentsalignmacro = \chappager + +% For single-sided printing, chapter title goes across top left of page, +% page number on top right. +\def\HEADINGSsingle{% +\global\pageno=1 +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} +\def\HEADINGSon{\HEADINGSdouble} + +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} +\let\HEADINGSdoubleafter=\HEADINGSafter +\def\HEADINGSdoublex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\folio\hfil\thistitle}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chapoddpage +} + +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} +\def\HEADINGSsinglex{% +\global\evenfootline={\hfil} +\global\oddfootline={\hfil} +\global\evenheadline={\line{\thischapter\hfil\folio}} +\global\oddheadline={\line{\thischapter\hfil\folio}} +\global\let\contentsalignmacro = \chappager +} + +% Subroutines used in generating headings +% This produces Day Month Year style of output. +% Only define if not already defined, in case a txi-??.tex file has set +% up a different format (e.g., txi-cs.tex does this). +\ifx\today\undefined +\def\today{% + \number\day\space + \ifcase\month + \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr + \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug + \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec + \fi + \space\number\year} +\fi + +% @settitle line... specifies the title of the document, for headings. +% It generates no output of its own. +\def\thistitle{\putwordNoTitle} +\def\settitle{\parsearg{\gdef\thistitle}} + + +\message{tables,} +% Tables -- @table, @ftable, @vtable, @item(x). + +% default indentation of table text +\newdimen\tableindent \tableindent=.8in +% default indentation of @itemize and @enumerate text +\newdimen\itemindent \itemindent=.3in +% margin between end of table item and start of table text. +\newdimen\itemmargin \itemmargin=.1in + +% used internally for \itemindent minus \itemmargin +\newdimen\itemmax + +% Note @table, @ftable, and @vtable define @item, @itemx, etc., with +% these defs. +% They also define \itemindex +% to index the item name in whatever manner is desired (perhaps none). + +\newif\ifitemxneedsnegativevskip + +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} + +\def\internalBitem{\smallbreak \parsearg\itemzzz} +\def\internalBitemx{\itemxpar \parsearg\itemzzz} + +\def\itemzzz #1{\begingroup % + \advance\hsize by -\rightskip + \advance\hsize by -\tableindent + \setbox0=\hbox{\itemindicate{#1}}% + \itemindex{#1}% + \nobreak % This prevents a break before @itemx. + % + % If the item text does not fit in the space we have, put it on a line + % by itself, and do not allow a page break either before or after that + % line. We do not start a paragraph here because then if the next + % command is, e.g., @kindex, the whatsit would get put into the + % horizontal list on a line by itself, resulting in extra blank space. + \ifdim \wd0>\itemmax + % + % Make this a paragraph so we get the \parskip glue and wrapping, + % but leave it ragged-right. + \begingroup + \advance\leftskip by-\tableindent + \advance\hsize by\tableindent + \advance\rightskip by0pt plus1fil + \leavevmode\unhbox0\par + \endgroup + % + % We're going to be starting a paragraph, but we don't want the + % \parskip glue -- logically it's part of the @item we just started. + \nobreak \vskip-\parskip + % + % Stop a page break at the \parskip glue coming up. However, if + % what follows is an environment such as @example, there will be no + % \parskip glue; then the negative vskip we just inserted would + % cause the example and the item to crash together. So we use this + % bizarre value of 10001 as a signal to \aboveenvbreak to insert + % \parskip glue after all. Section titles are handled this way also. + % + \penalty 10001 + \endgroup + \itemxneedsnegativevskipfalse + \else + % The item text fits into the space. Start a paragraph, so that the + % following text (if any) will end up on the same line. + \noindent + % Do this with kerns and \unhbox so that if there is a footnote in + % the item text, it can migrate to the main vertical list and + % eventually be printed. + \nobreak\kern-\tableindent + \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 + \unhbox0 + \nobreak\kern\dimen0 + \endgroup + \itemxneedsnegativevskiptrue + \fi +} + +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} + +% @table, @ftable, @vtable. +\envdef\table{% + \let\itemindex\gobble + \tablecheck{table}% +} +\envdef\ftable{% + \def\itemindex ##1{\doind {fn}{\code{##1}}}% + \tablecheck{ftable}% +} +\envdef\vtable{% + \def\itemindex ##1{\doind {vr}{\code{##1}}}% + \tablecheck{vtable}% +} +\def\tablecheck#1{% + \ifnum \the\catcode`\^^M=\active + \endgroup + \errmessage{This command won't work in this context; perhaps the problem is + that we are \inenvironment\thisenv}% + \def\next{\doignore{#1}}% + \else + \let\next\tablex + \fi + \next +} +\def\tablex#1{% + \def\itemindicate{#1}% + \parsearg\tabley +} +\def\tabley#1{% + {% + \makevalueexpandable + \edef\temp{\noexpand\tablez #1\space\space\space}% + \expandafter + }\temp \endtablez +} +\def\tablez #1 #2 #3 #4\endtablez{% + \aboveenvbreak + \ifnum 0#1>0 \advance \leftskip by #1\mil \fi + \ifnum 0#2>0 \tableindent=#2\mil \fi + \ifnum 0#3>0 \advance \rightskip by #3\mil \fi + \itemmax=\tableindent + \advance \itemmax by -\itemmargin + \advance \leftskip by \tableindent + \exdentamount=\tableindent + \parindent = 0pt + \parskip = \smallskipamount + \ifdim \parskip=0pt \parskip=2pt \fi + \let\item = \internalBitem + \let\itemx = \internalBitemx +} +\def\Etable{\endgraf\afterenvbreak} +\let\Eftable\Etable +\let\Evtable\Etable +\let\Eitemize\Etable +\let\Eenumerate\Etable + +% This is the counter used by @enumerate, which is really @itemize + +\newcount \itemno + +\envdef\itemize{\parsearg\doitemize} + +\def\doitemize#1{% + \aboveenvbreak + \itemmax=\itemindent + \advance\itemmax by -\itemmargin + \advance\leftskip by \itemindent + \exdentamount=\itemindent + \parindent=0pt + \parskip=\smallskipamount + \ifdim\parskip=0pt \parskip=2pt \fi + \def\itemcontents{#1}% + % @itemize with no arg is equivalent to @itemize @bullet. + \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi + \let\item=\itemizeitem +} + +% Definition of @item while inside @itemize and @enumerate. +% +\def\itemizeitem{% + \advance\itemno by 1 % for enumerations + {\let\par=\endgraf \smallbreak}% reasonable place to break + {% + % If the document has an @itemize directly after a section title, a + % \nobreak will be last on the list, and \sectionheading will have + % done a \vskip-\parskip. In that case, we don't want to zero + % parskip, or the item text will crash with the heading. On the + % other hand, when there is normal text preceding the item (as there + % usually is), we do want to zero parskip, or there would be too much + % space. In that case, we won't have a \nobreak before. At least + % that's the theory. + \ifnum\lastpenalty<10000 \parskip=0in \fi + \noindent + \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + \vadjust{\penalty 1200}}% not good to break after first line of item. + \flushcr +} + +% \splitoff TOKENS\endmark defines \first to be the first token in +% TOKENS, and \rest to be the remainder. +% +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% + +% Allow an optional argument of an uppercase letter, lowercase letter, +% or number, to specify the first label in the enumerated list. No +% argument is the same as `1'. +% +\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} +\def\enumeratey #1 #2\endenumeratey{% + % If we were given no argument, pretend we were given `1'. + \def\thearg{#1}% + \ifx\thearg\empty \def\thearg{1}\fi + % + % Detect if the argument is a single token. If so, it might be a + % letter. Otherwise, the only valid thing it can be is a number. + % (We will always have one token, because of the test we just made. + % This is a good thing, since \splitoff doesn't work given nothing at + % all -- the first parameter is undelimited.) + \expandafter\splitoff\thearg\endmark + \ifx\rest\empty + % Only one token in the argument. It could still be anything. + % A ``lowercase letter'' is one whose \lccode is nonzero. + % An ``uppercase letter'' is one whose \lccode is both nonzero, and + % not equal to itself. + % Otherwise, we assume it's a number. + % + % We need the \relax at the end of the \ifnum lines to stop TeX from + % continuing to look for a . + % + \ifnum\lccode\expandafter`\thearg=0\relax + \numericenumerate % a number (we hope) + \else + % It's a letter. + \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax + \lowercaseenumerate % lowercase letter + \else + \uppercaseenumerate % uppercase letter + \fi + \fi + \else + % Multiple tokens in the argument. We hope it's a number. + \numericenumerate + \fi +} + +% An @enumerate whose labels are integers. The starting integer is +% given in \thearg. +% +\def\numericenumerate{% + \itemno = \thearg + \startenumeration{\the\itemno}% +} + +% The starting (lowercase) letter is in \thearg. +\def\lowercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more lowercase letters in @enumerate; get a bigger + alphabet}% + \fi + \char\lccode\itemno + }% +} + +% The starting (uppercase) letter is in \thearg. +\def\uppercaseenumerate{% + \itemno = \expandafter`\thearg + \startenumeration{% + % Be sure we're not beyond the end of the alphabet. + \ifnum\itemno=0 + \errmessage{No more uppercase letters in @enumerate; get a bigger + alphabet} + \fi + \char\uccode\itemno + }% +} + +% Call \doitemize, adding a period to the first argument and supplying the +% common last two arguments. Also subtract one from the initial value in +% \itemno, since @item increments \itemno. +% +\def\startenumeration#1{% + \advance\itemno by -1 + \doitemize{#1.}\flushcr +} + +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg +% to @enumerate. +% +\def\alphaenumerate{\enumerate{a}} +\def\capsenumerate{\enumerate{A}} +\def\Ealphaenumerate{\Eenumerate} +\def\Ecapsenumerate{\Eenumerate} + + +% @multitable macros +% Amy Hendrickson, 8/18/94, 3/6/96 +% +% @multitable ... @end multitable will make as many columns as desired. +% Contents of each column will wrap at width given in preamble. Width +% can be specified either with sample text given in a template line, +% or in percent of \hsize, the current width of text on page. + +% Table can continue over pages but will only break between lines. + +% To make preamble: +% +% Either define widths of columns in terms of percent of \hsize: +% @multitable @columnfractions .25 .3 .45 +% @item ... +% +% Numbers following @columnfractions are the percent of the total +% current hsize to be used for each column. You may use as many +% columns as desired. + + +% Or use a template: +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item ... +% using the widest term desired in each column. + +% Each new table line starts with @item, each subsequent new column +% starts with @tab. Empty columns may be produced by supplying @tab's +% with nothing between them for as many times as empty columns are needed, +% ie, @tab@tab@tab will produce two empty columns. + +% @item, @tab do not need to be on their own lines, but it will not hurt +% if they are. + +% Sample multitable: + +% @multitable {Column 1 template} {Column 2 template} {Column 3 template} +% @item first col stuff @tab second col stuff @tab third col +% @item +% first col stuff +% @tab +% second col stuff +% @tab +% third col +% @item first col stuff @tab second col stuff +% @tab Many paragraphs of text may be used in any column. +% +% They will wrap at the width determined by the template. +% @item@tab@tab This will be in third column. +% @end multitable + +% Default dimensions may be reset by user. +% @multitableparskip is vertical space between paragraphs in table. +% @multitableparindent is paragraph indent in table. +% @multitablecolmargin is horizontal space to be left between columns. +% @multitablelinespace is space to leave between table items, baseline +% to baseline. +% 0pt means it depends on current normal line spacing. +% +\newskip\multitableparskip +\newskip\multitableparindent +\newdimen\multitablecolspace +\newskip\multitablelinespace +\multitableparskip=0pt +\multitableparindent=6pt +\multitablecolspace=12pt +\multitablelinespace=0pt + +% Macros used to set up halign preamble: +% +\let\endsetuptable\relax +\def\xendsetuptable{\endsetuptable} +\let\columnfractions\relax +\def\xcolumnfractions{\columnfractions} +\newif\ifsetpercent + +% #1 is the @columnfraction, usually a decimal number like .5, but might +% be just 1. We just use it, whatever it is. +% +\def\pickupwholefraction#1 {% + \global\advance\colcount by 1 + \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% + \setuptable +} + +\newcount\colcount +\def\setuptable#1{% + \def\firstarg{#1}% + \ifx\firstarg\xendsetuptable + \let\go = \relax + \else + \ifx\firstarg\xcolumnfractions + \global\setpercenttrue + \else + \ifsetpercent + \let\go\pickupwholefraction + \else + \global\advance\colcount by 1 + \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a + % separator; typically that is always in the input, anyway. + \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% + \fi + \fi + \ifx\go\pickupwholefraction + % Put the argument back for the \pickupwholefraction call, so + % we'll always have a period there to be parsed. + \def\go{\pickupwholefraction#1}% + \else + \let\go = \setuptable + \fi% + \fi + \go +} + +% multitable-only commands. +% +% @headitem starts a heading row, which we typeset in bold. +% Assignments have to be global since we are inside the implicit group +% of an alignment entry. Note that \everycr resets \everytab. +\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% +% +% A \tab used to include \hskip1sp. But then the space in a template +% line is not enough. That is bad. So let's go back to just `&' until +% we encounter the problem it was intended to solve again. +% --karl, nathan@acm.org, 20apr99. +\def\tab{\checkenv\multitable &\the\everytab}% + +% @multitable ... @end multitable definitions: +% +\newtoks\everytab % insert after every tab. +% +\envdef\multitable{% + \vskip\parskip + \startsavinginserts + % + % @item within a multitable starts a normal row. + % We use \def instead of \let so that if one of the multitable entries + % contains an @itemize, we don't choke on the \item (seen as \crcr aka + % \endtemplate) expanding \doitemize. + \def\item{\crcr}% + % + \tolerance=9500 + \hbadness=9500 + \setmultitablespacing + \parskip=\multitableparskip + \parindent=\multitableparindent + \overfullrule=0pt + \global\colcount=0 + % + \everycr = {% + \noalign{% + \global\everytab={}% + \global\colcount=0 % Reset the column counter. + % Check for saved footnotes, etc. + \checkinserts + % Keeps underfull box messages off when table breaks over pages. + %\filbreak + % Maybe so, but it also creates really weird page breaks when the + % table breaks over pages. Wouldn't \vfil be better? Wait until the + % problem manifests itself, so it can be fixed for real --karl. + }% + }% + % + \parsearg\domultitable +} +\def\domultitable#1{% + % To parse everything between @multitable and @item: + \setuptable#1 \endsetuptable + % + % This preamble sets up a generic column definition, which will + % be used as many times as user calls for columns. + % \vtop will set a single line and will also let text wrap and + % continue for many paragraphs if desired. + \halign\bgroup &% + \global\advance\colcount by 1 + \multistrut + \vtop{% + % Use the current \colcount to find the correct column width: + \hsize=\expandafter\csname col\the\colcount\endcsname + % + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % + % If the user has set preamble in terms of percent of \hsize we will + % use that dimension as the width of the column, and the \leftskip + % will keep entries from bumping into each other. Table will start at + % left margin and final column will justify at right margin. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \else + \ifsetpercent \else + % If user has not set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace. + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: + \leftskip=\multitablecolspace + \fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively + % marking characters. + \noindent\ignorespaces##\unskip\multistrut + }\cr +} +\def\Emultitable{% + \crcr + \egroup % end the \halign + \global\setpercentfalse +} + +\def\setmultitablespacing{% + \def\multistrut{\strut}% just use the standard line spacing + % + % Compute \multitablelinespace (if not defined by user) for use in + % \multitableparskip calculation. We used define \multistrut based on + % this, but (ironically) that caused the spacing to be off. + % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. +\ifdim\multitablelinespace=0pt +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip +\global\advance\multitablelinespace by-\ht0 +\fi +%% Test to see if parskip is larger than space between lines of +%% table. If not, do nothing. +%% If so, set to same dimension as multitablelinespace. +\ifdim\multitableparskip>\multitablelinespace +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi% +\ifdim\multitableparskip=0pt +\global\multitableparskip=\multitablelinespace +\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller + %% than skip between lines in the table. +\fi} + + +\message{conditionals,} + +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, +% @ifnotxml always succeed. They currently do nothing; we don't +% attempt to check whether the conditionals are properly nested. But we +% have to remember that they are conditionals, so that @end doesn't +% attempt to close an environment group. +% +\def\makecond#1{% + \expandafter\let\csname #1\endcsname = \relax + \expandafter\let\csname iscond.#1\endcsname = 1 +} +\makecond{iftex} +\makecond{ifnotdocbook} +\makecond{ifnothtml} +\makecond{ifnotinfo} +\makecond{ifnotplaintext} +\makecond{ifnotxml} + +% Ignore @ignore, @ifhtml, @ifinfo, and the like. +% +\def\direntry{\doignore{direntry}} +\def\documentdescription{\doignore{documentdescription}} +\def\docbook{\doignore{docbook}} +\def\html{\doignore{html}} +\def\ifdocbook{\doignore{ifdocbook}} +\def\ifhtml{\doignore{ifhtml}} +\def\ifinfo{\doignore{ifinfo}} +\def\ifnottex{\doignore{ifnottex}} +\def\ifplaintext{\doignore{ifplaintext}} +\def\ifxml{\doignore{ifxml}} +\def\ignore{\doignore{ignore}} +\def\menu{\doignore{menu}} +\def\xml{\doignore{xml}} + +% Ignore text until a line `@end #1', keeping track of nested conditionals. +% +% A count to remember the depth of nesting. +\newcount\doignorecount + +\def\doignore#1{\begingroup + % Scan in ``verbatim'' mode: + \obeylines + \catcode`\@ = \other + \catcode`\{ = \other + \catcode`\} = \other + % + % Make sure that spaces turn into tokens that match what \doignoretext wants. + \spaceisspace + % + % Count number of #1's that we've seen. + \doignorecount = 0 + % + % Swallow text until we reach the matching `@end #1'. + \dodoignore{#1}% +} + +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. + \obeylines % + % + \gdef\dodoignore#1{% + % #1 contains the command name as a string, e.g., `ifinfo'. + % + % Define a command to find the next `@end #1'. + \long\def\doignoretext##1^^M@end #1{% + \doignoretextyyy##1^^M@#1\_STOP_}% + % + % And this command to find another #1 command, at the beginning of a + % line. (Otherwise, we would consider a line `@c @ifset', for + % example, to count as an @ifset for nesting.) + \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% + % + % And now expand that command. + \doignoretext ^^M% + }% +} + +\def\doignoreyyy#1{% + \def\temp{#1}% + \ifx\temp\empty % Nothing found. + \let\next\doignoretextzzz + \else % Found a nested condition, ... + \advance\doignorecount by 1 + \let\next\doignoretextyyy % ..., look for another. + % If we're here, #1 ends with ^^M\ifinfo (for example). + \fi + \next #1% the token \_STOP_ is present just after this macro. +} + +% We have to swallow the remaining "\_STOP_". +% +\def\doignoretextzzz#1{% + \ifnum\doignorecount = 0 % We have just found the outermost @end. + \let\next\enddoignore + \else % Still inside a nested condition. + \advance\doignorecount by -1 + \let\next\doignoretext % Look for the next @end. + \fi + \next +} + +% Finish off ignored text. +{ \obeylines% + % Ignore anything after the last `@end #1'; this matters in verbatim + % environments, where otherwise the newline after an ignored conditional + % would result in a blank line in the output. + \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% +} + + +% @set VAR sets the variable VAR to an empty value. +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. +% +% Since we want to separate VAR from REST-OF-LINE (which might be +% empty), we can't just use \parsearg; we have to insert a space of our +% own to delimit the rest of the line, and then take it out again if we +% didn't need it. +% We rely on the fact that \parsearg sets \catcode`\ =10. +% +\parseargdef\set{\setyyy#1 \endsetyyy} +\def\setyyy#1 #2\endsetyyy{% + {% + \makevalueexpandable + \def\temp{#2}% + \edef\next{\gdef\makecsname{SET#1}}% + \ifx\temp\empty + \next{}% + \else + \setzzz#2\endsetzzz + \fi + }% +} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} + +% @clear VAR clears (i.e., unsets) the variable VAR. +% +\parseargdef\clear{% + {% + \makevalueexpandable + \global\expandafter\let\csname SET#1\endcsname=\relax + }% +} + +% @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} +{ + \catcode`\- = \active \catcode`\_ = \active + % + \gdef\makevalueexpandable{% + \let\value = \expandablevalue + % We don't want these characters active, ... + \catcode`\-=\other \catcode`\_=\other + % ..., but we might end up with active ones in the argument if + % we're called from @code, as @code{@value{foo-bar_}}, though. + % So \let them to their normal equivalents. + \let-\realdash \let_\normalunderscore + } +} + +% We have this subroutine so that we can handle at least some @value's +% properly in indexes (we call \makevalueexpandable in \indexdummies). +% The command has to be fully expandable (if the variable is set), since +% the result winds up in the index file. This means that if the +% variable's value contains other Texinfo commands, it's almost certain +% it will fail (although perhaps we could fix that with sufficient work +% to do a one-level expansion on the result, instead of complete). +% +\def\expandablevalue#1{% + \expandafter\ifx\csname SET#1\endcsname\relax + {[No value for ``#1'']}% + \message{Variable `#1', used in @value, is not set.}% + \else + \csname SET#1\endcsname + \fi +} + +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined +% with @set. +% +% To get special treatment of `@end ifset,' call \makeond and the redefine. +% +\makecond{ifset} +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} +\def\doifset#1#2{% + {% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname SET#2\endcsname\relax + #1% If not set, redefine \next. + \fi + \expandafter + }\next +} +\def\ifsetfail{\doignore{ifset}} + +% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been +% defined with @set, or has been undefined with @clear. +% +% The `\else' inside the `\doifset' parameter is a trick to reuse the +% above code: if the variable is not set, do nothing, if it is set, +% then redefine \next to \ifclearfail. +% +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} + +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory=\comment + +% @defininfoenclose. +\let\definfoenclose=\comment + + +\message{indexing,} +% Index generation facilities + +% Define \newwrite to be identical to plain tex's \newwrite +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} + +% \newindex {foo} defines an index named foo. +% It automatically defines \fooindex such that +% \fooindex ...rest of line... puts an entry in the index foo. +% It also defines \fooindfile to be the number of the output channel for +% the file that accumulates this index. The file's extension is foo. +% The name of an index should be no more than 2 characters long +% for the sake of vms. +% +\def\newindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 % Open the file + \fi + \expandafter\xdef\csname#1index\endcsname{% % Define @#1index + \noexpand\doindex{#1}} +} + +% @defindex foo == \newindex{foo} +% +\def\defindex{\parsearg\newindex} + +% Define @defcodeindex, like @defindex except put all entries in @code. +% +\def\defcodeindex{\parsearg\newcodeindex} +% +\def\newcodeindex#1{% + \iflinks + \expandafter\newwrite \csname#1indfile\endcsname + \openout \csname#1indfile\endcsname \jobname.#1 + \fi + \expandafter\xdef\csname#1index\endcsname{% + \noexpand\docodeindex{#1}}% +} + + +% @synindex foo bar makes index foo feed into index bar. +% Do this instead of @defindex foo if you don't want it as a separate index. +% +% @syncodeindex foo bar similar, but put all entries made for index foo +% inside @code. +% +\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} +\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} + +% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), +% #3 the target index (bar). +\def\dosynindex#1#2#3{% + % Only do \closeout if we haven't already done it, else we'll end up + % closing the target index. + \expandafter \ifx\csname donesynindex#2\endcsname \undefined + % The \closeout helps reduce unnecessary open files; the limit on the + % Acorn RISC OS is a mere 16 files. + \expandafter\closeout\csname#2indfile\endcsname + \expandafter\let\csname\donesynindex#2\endcsname = 1 + \fi + % redefine \fooindfile: + \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname + \expandafter\let\csname#2indfile\endcsname=\temp + % redefine \fooindex: + \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% +} + +% Define \doindex, the driver for all \fooindex macros. +% Argument #1 is generated by the calling \fooindex macro, +% and it is "foo", the name of the index. + +% \doindex just uses \parsearg; it calls \doind for the actual work. +% This is because \doind is more useful to call from other macros. + +% There is also \dosubind {index}{topic}{subtopic} +% which makes an entry in a two-level index such as the operation index. + +\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} +\def\singleindexer #1{\doind{\indexname}{#1}} + +% like the previous two, but they put @code around the argument. +\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} +\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} + +% Take care of Texinfo commands that can appear in an index entry. +% Since there are some commands we want to expand, and others we don't, +% we have to laboriously prevent expansion for those that we don't. +% +\def\indexdummies{% + \escapechar = `\\ % use backslash in output files. + \def\@{@}% change to @@ when we switch to @ as escape char in index files. + \def\ {\realbackslash\space }% + % + % Need these in case \tex is in effect and \{ is a \delimiter again. + % But can't use \lbracecmd and \rbracecmd because texindex assumes + % braces and backslashes are used only as delimiters. + \let\{ = \mylbrace + \let\} = \myrbrace + % + % I don't entirely understand this, but when an index entry is + % generated from a macro call, the \endinput which \scanmacro inserts + % causes processing to be prematurely terminated. This is, + % apparently, because \indexsorttmp is fully expanded, and \endinput + % is an expandable command. The redefinition below makes \endinput + % disappear altogether for that purpose -- although logging shows that + % processing continues to some further point. On the other hand, it + % seems \endinput does not hurt in the printed index arg, since that + % is still getting written without apparent harm. + % + % Sample source (mac-idx3.tex, reported by Graham Percival to + % help-texinfo, 22may06): + % @macro funindex {WORD} + % @findex xyz + % @end macro + % ... + % @funindex commtest + % + % The above is not enough to reproduce the bug, but it gives the flavor. + % + % Sample whatsit resulting: + % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} + % + % So: + \let\endinput = \empty + % + % Do the redefinitions. + \commondummies +} + +% For the aux and toc files, @ is the escape character. So we want to +% redefine everything using @ as the escape character (instead of +% \realbackslash, still used for index files). When everything uses @, +% this will be simpler. +% +\def\atdummies{% + \def\@{@@}% + \def\ {@ }% + \let\{ = \lbraceatcmd + \let\} = \rbraceatcmd + % + % Do the redefinitions. + \commondummies + \otherbackslash +} + +% Called from \indexdummies and \atdummies. +% +\def\commondummies{% + % + % \definedummyword defines \#1 as \string\#1\space, thus effectively + % preventing its expansion. This is used only for control% words, + % not control letters, because the \space would be incorrect for + % control characters, but is needed to separate the control word + % from whatever follows. + % + % For control letters, we have \definedummyletter, which omits the + % space. + % + % These can be used both for control words that take an argument and + % those that do not. If it is followed by {arg} in the input, then + % that will dutifully get written to the index (or wherever). + % + \def\definedummyword ##1{\def##1{\string##1\space}}% + \def\definedummyletter##1{\def##1{\string##1}}% + \let\definedummyaccent\definedummyletter + % + \commondummiesnofonts + % + \definedummyletter\_% + % + % Non-English letters. + \definedummyword\AA + \definedummyword\AE + \definedummyword\L + \definedummyword\OE + \definedummyword\O + \definedummyword\aa + \definedummyword\ae + \definedummyword\l + \definedummyword\oe + \definedummyword\o + \definedummyword\ss + \definedummyword\exclamdown + \definedummyword\questiondown + \definedummyword\ordf + \definedummyword\ordm + % + % Although these internal commands shouldn't show up, sometimes they do. + \definedummyword\bf + \definedummyword\gtr + \definedummyword\hat + \definedummyword\less + \definedummyword\sf + \definedummyword\sl + \definedummyword\tclose + \definedummyword\tt + % + \definedummyword\LaTeX + \definedummyword\TeX + % + % Assorted special characters. + \definedummyword\bullet + \definedummyword\comma + \definedummyword\copyright + \definedummyword\registeredsymbol + \definedummyword\dots + \definedummyword\enddots + \definedummyword\equiv + \definedummyword\error + \definedummyword\euro + \definedummyword\guillemetleft + \definedummyword\guillemetright + \definedummyword\guilsinglleft + \definedummyword\guilsinglright + \definedummyword\expansion + \definedummyword\minus + \definedummyword\pounds + \definedummyword\point + \definedummyword\print + \definedummyword\quotedblbase + \definedummyword\quotedblleft + \definedummyword\quotedblright + \definedummyword\quoteleft + \definedummyword\quoteright + \definedummyword\quotesinglbase + \definedummyword\result + \definedummyword\textdegree + % + % We want to disable all macros so that they are not expanded by \write. + \macrolist + % + \normalturnoffactive + % + % Handle some cases of @value -- where it does not contain any + % (non-fully-expandable) commands. + \makevalueexpandable +} + +% \commondummiesnofonts: common to \commondummies and \indexnofonts. +% +\def\commondummiesnofonts{% + % Control letters and accents. + \definedummyletter\!% + \definedummyaccent\"% + \definedummyaccent\'% + \definedummyletter\*% + \definedummyaccent\,% + \definedummyletter\.% + \definedummyletter\/% + \definedummyletter\:% + \definedummyaccent\=% + \definedummyletter\?% + \definedummyaccent\^% + \definedummyaccent\`% + \definedummyaccent\~% + \definedummyword\u + \definedummyword\v + \definedummyword\H + \definedummyword\dotaccent + \definedummyword\ringaccent + \definedummyword\tieaccent + \definedummyword\ubaraccent + \definedummyword\udotaccent + \definedummyword\dotless + % + % Texinfo font commands. + \definedummyword\b + \definedummyword\i + \definedummyword\r + \definedummyword\sc + \definedummyword\t + % + % Commands that take arguments. + \definedummyword\acronym + \definedummyword\cite + \definedummyword\code + \definedummyword\command + \definedummyword\dfn + \definedummyword\emph + \definedummyword\env + \definedummyword\file + \definedummyword\kbd + \definedummyword\key + \definedummyword\math + \definedummyword\option + \definedummyword\pxref + \definedummyword\ref + \definedummyword\samp + \definedummyword\strong + \definedummyword\tie + \definedummyword\uref + \definedummyword\url + \definedummyword\var + \definedummyword\verb + \definedummyword\w + \definedummyword\xref +} + +% \indexnofonts is used when outputting the strings to sort the index +% by, and when constructing control sequence names. It eliminates all +% control sequences and just writes whatever the best ASCII sort string +% would be for a given command (usually its argument). +% +\def\indexnofonts{% + % Accent commands should become @asis. + \def\definedummyaccent##1{\let##1\asis}% + % We can just ignore other control letters. + \def\definedummyletter##1{\let##1\empty}% + % Hopefully, all control words can become @asis. + \let\definedummyword\definedummyaccent + % + \commondummiesnofonts + % + % Don't no-op \tt, since it isn't a user-level command + % and is used in the definitions of the active chars like <, >, |, etc. + % Likewise with the other plain tex font commands. + %\let\tt=\asis + % + \def\ { }% + \def\@{@}% + % how to handle braces? + \def\_{\normalunderscore}% + % + % Non-English letters. + \def\AA{AA}% + \def\AE{AE}% + \def\L{L}% + \def\OE{OE}% + \def\O{O}% + \def\aa{aa}% + \def\ae{ae}% + \def\l{l}% + \def\oe{oe}% + \def\o{o}% + \def\ss{ss}% + \def\exclamdown{!}% + \def\questiondown{?}% + \def\ordf{a}% + \def\ordm{o}% + % + \def\LaTeX{LaTeX}% + \def\TeX{TeX}% + % + % Assorted special characters. + % (The following {} will end up in the sort string, but that's ok.) + \def\bullet{bullet}% + \def\comma{,}% + \def\copyright{copyright}% + \def\registeredsymbol{R}% + \def\dots{...}% + \def\enddots{...}% + \def\equiv{==}% + \def\error{error}% + \def\euro{euro}% + \def\guillemetleft{<<}% + \def\guillemetright{>>}% + \def\guilsinglleft{<}% + \def\guilsinglright{>}% + \def\expansion{==>}% + \def\minus{-}% + \def\pounds{pounds}% + \def\point{.}% + \def\print{-|}% + \def\quotedblbase{"}% + \def\quotedblleft{"}% + \def\quotedblright{"}% + \def\quoteleft{`}% + \def\quoteright{'}% + \def\quotesinglbase{,}% + \def\result{=>}% + \def\textdegree{degrees}% + % + % We need to get rid of all macros, leaving only the arguments (if present). + % Of course this is not nearly correct, but it is the best we can do for now. + % makeinfo does not expand macros in the argument to @deffn, which ends up + % writing an index entry, and texindex isn't prepared for an index sort entry + % that starts with \. + % + % Since macro invocations are followed by braces, we can just redefine them + % to take a single TeX argument. The case of a macro invocation that + % goes to end-of-line is not handled. + % + \macrolist +} + +\let\indexbackslash=0 %overridden during \printindex. +\let\SETmarginindex=\relax % put index entries in margin (undocumented)? + +% Most index entries go through here, but \dosubind is the general case. +% #1 is the index name, #2 is the entry text. +\def\doind#1#2{\dosubind{#1}{#2}{}} + +% Workhorse for all \fooindexes. +% #1 is name of index, #2 is stuff to put there, #3 is subentry -- +% empty if called from \doind, as we usually are (the main exception +% is with most defuns, which call us directly). +% +\def\dosubind#1#2#3{% + \iflinks + {% + % Store the main index entry text (including the third arg). + \toks0 = {#2}% + % If third arg is present, precede it with a space. + \def\thirdarg{#3}% + \ifx\thirdarg\empty \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + \edef\writeto{\csname#1indfile\endcsname}% + % + \safewhatsit\dosubindwrite + }% + \fi +} + +% Write the entry in \toks0 to the index file: +% +\def\dosubindwrite{% + % Put the index entry in the margin if desired. + \ifx\SETmarginindex\relax\else + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% + \fi + % + % Remember, we are within a group. + \indexdummies % Must do this here, since \bf, etc expand at this stage + \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % Process the index entry with all font commands turned off, to + % get the string to sort by. + {\indexnofonts + \edef\temp{\the\toks0}% need full expansion + \xdef\indexsorttmp{\temp}% + }% + % + % Set up the complete index entry, with both the sort key and + % the original text, including any font commands. We write + % three arguments to \entry to the .?? file (four in the + % subentry case), texindex reduces to two when writing the .??s + % sorted result. + \edef\temp{% + \write\writeto{% + \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% + }% + \temp +} + +% Take care of unwanted page breaks/skips around a whatsit: +% +% If a skip is the last thing on the list now, preserve it +% by backing up by \lastskip, doing the \write, then inserting +% the skip again. Otherwise, the whatsit generated by the +% \write or \pdfdest will make \lastskip zero. The result is that +% sequences like this: +% @end defun +% @tindex whatever +% @defun ... +% will have extra space inserted, because the \medbreak in the +% start of the @defun won't see the skip inserted by the @end of +% the previous defun. +% +% But don't do any of this if we're not in vertical mode. We +% don't want to do a \vskip and prematurely end a paragraph. +% +% Avoid page breaks due to these extra skips, too. +% +% But wait, there is a catch there: +% We'll have to check whether \lastskip is zero skip. \ifdim is not +% sufficient for this purpose, as it ignores stretch and shrink parts +% of the skip. The only way seems to be to check the textual +% representation of the skip. +% +% The following is almost like \def\zeroskipmacro{0.0pt} except that +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). +% +\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} +% +\newskip\whatsitskip +\newcount\whatsitpenalty +% +% ..., ready, GO: +% +\def\safewhatsit#1{% +\ifhmode + #1% +\else + % \lastskip and \lastpenalty cannot both be nonzero simultaneously. + \whatsitskip = \lastskip + \edef\lastskipmacro{\the\lastskip}% + \whatsitpenalty = \lastpenalty + % + % If \lastskip is nonzero, that means the last item was a + % skip. And since a skip is discardable, that means this + % -\whatsitskip glue we're inserting is preceded by a + % non-discardable item, therefore it is not a potential + % breakpoint, therefore no \nobreak needed. + \ifx\lastskipmacro\zeroskipmacro + \else + \vskip-\whatsitskip + \fi + % + #1% + % + \ifx\lastskipmacro\zeroskipmacro + % If \lastskip was zero, perhaps the last item was a penalty, and + % perhaps it was >=10000, e.g., a \nobreak. In that case, we want + % to re-insert the same penalty (values >10000 are used for various + % signals); since we just inserted a non-discardable item, any + % following glue (such as a \parskip) would be a breakpoint. For example: + % + % @deffn deffn-whatever + % @vindex index-whatever + % Description. + % would allow a break between the index-whatever whatsit + % and the "Description." paragraph. + \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi + \else + % On the other hand, if we had a nonzero \lastskip, + % this make-up glue would be preceded by a non-discardable item + % (the whatsit from the \write), so we must insert a \nobreak. + \nobreak\vskip\whatsitskip + \fi +\fi +} + +% The index entry written in the file actually looks like +% \entry {sortstring}{page}{topic} +% or +% \entry {sortstring}{page}{topic}{subtopic} +% The texindex program reads in these files and writes files +% containing these kinds of lines: +% \initial {c} +% before the first topic whose initial is c +% \entry {topic}{pagelist} +% for a topic that is used without subtopics +% \primary {topic} +% for the beginning of a topic that is used with subtopics +% \secondary {subtopic}{pagelist} +% for each subtopic. + +% Define the user-accessible indexing commands +% @findex, @vindex, @kindex, @cindex. + +\def\findex {\fnindex} +\def\kindex {\kyindex} +\def\cindex {\cpindex} +\def\vindex {\vrindex} +\def\tindex {\tpindex} +\def\pindex {\pgindex} + +\def\cindexsub {\begingroup\obeylines\cindexsub} +{\obeylines % +\gdef\cindexsub "#1" #2^^M{\endgroup % +\dosubind{cp}{#2}{#1}}} + +% Define the macros used in formatting output of the sorted index material. + +% @printindex causes a particular index (the ??s file) to get printed. +% It does not print any chapter heading (usually an @unnumbered). +% +\parseargdef\printindex{\begingroup + \dobreak \chapheadingskip{10000}% + % + \smallfonts \rm + \tolerance = 9500 + \plainfrenchspacing + \everypar = {}% don't want the \kern\-parindent from indentation suppression. + % + % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 11 + \openin 1 \jobname.#1s + \ifeof 1 + % \enddoublecolumns gets confused if there is no text in the index, + % and it loses the chapter title and the aux file entries for the + % index. The easiest way to prevent this problem is to make sure + % there is some text. + \putwordIndexNonexistent + \else + % + % If the index file exists but is empty, then \openin leaves \ifeof + % false. We have to make TeX try to read something from the file, so + % it can discover if there is anything in it. + \read 1 to \temp + \ifeof 1 + \putwordIndexIsEmpty + \else + % Index files are almost Texinfo source, but we use \ as the escape + % character. It would be better to use @, but that's too big a change + % to make right now. + \def\indexbackslash{\backslashcurfont}% + \catcode`\\ = 0 + \escapechar = `\\ + \begindoublecolumns + \input \jobname.#1s + \enddoublecolumns + \fi + \fi + \closein 1 +\endgroup} + +% These macros are used by the sorted index file itself. +% Change them to control the appearance of the index. + +\def\initial#1{{% + % Some minor font changes for the special characters. + \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt + % + % Remove any glue we may have, we'll be inserting our own. + \removelastskip + % + % We like breaks before the index initials, so insert a bonus. + \nobreak + \vskip 0pt plus 3\baselineskip + \penalty 0 + \vskip 0pt plus -3\baselineskip + % + % Typeset the initial. Making this add up to a whole number of + % baselineskips increases the chance of the dots lining up from column + % to column. It still won't often be perfect, because of the stretch + % we need before each entry, but it's better. + % + % No shrink because it confuses \balancecolumns. + \vskip 1.67\baselineskip plus .5\baselineskip + \leftline{\secbf #1}% + % Do our best not to break after the initial. + \nobreak + \vskip .33\baselineskip plus .1\baselineskip +}} + +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and +% then page number (#2) flushed to the right margin. It is used for index +% and table of contents entries. The paragraph is indented by \leftskip. +% +% A straightforward implementation would start like this: +% \def\entry#1#2{... +% But this freezes the catcodes in the argument, and can cause problems to +% @code, which sets - active. This problem was fixed by a kludge--- +% ``-'' was active throughout whole index, but this isn't really right. +% +% The right solution is to prevent \entry from swallowing the whole text. +% --kasal, 21nov03 +\def\entry{% + \begingroup + % + % Start a new paragraph if necessary, so our assignments below can't + % affect previous text. + \par + % + % Do not fill out the last line with white space. + \parfillskip = 0in + % + % No extra space above this paragraph. + \parskip = 0in + % + % Do not prefer a separate line ending with a hyphen to fewer lines. + \finalhyphendemerits = 0 + % + % \hangindent is only relevant when the entry text and page number + % don't both fit on one line. In that case, bob suggests starting the + % dots pretty far over on the line. Unfortunately, a large + % indentation looks wrong when the entry text itself is broken across + % lines. So we use a small indentation and put up with long leaders. + % + % \hangafter is reset to 1 (which is the value we want) at the start + % of each paragraph, so we need not do anything with that. + \hangindent = 2em + % + % When the entry text needs to be broken, just fill out the first line + % with blank space. + \rightskip = 0pt plus1fil + % + % A bit of stretch before each entry for the benefit of balancing + % columns. + \vskip 0pt plus1pt + % + % Swallow the left brace of the text (first parameter): + \afterassignment\doentry + \let\temp = +} +\def\doentry{% + \bgroup % Instead of the swallowed brace. + \noindent + \aftergroup\finishentry + % And now comes the text of the entry. +} +\def\finishentry#1{% + % #1 is the page number. + % + % The following is kludged to not output a line of dots in the index if + % there are no page numbers. The next person who breaks this will be + % cursed by a Unix daemon. + \setbox\boxA = \hbox{#1}% + \ifdim\wd\boxA = 0pt + \ % + \else + % + % If we must, put the page number on a line of its own, and fill out + % this line with blank space. (The \hfil is overwhelmed with the + % fill leaders glue in \indexdotfill if the page number does fit.) + \hfil\penalty50 + \null\nobreak\indexdotfill % Have leaders before the page number. + % + % The `\ ' here is removed by the implicit \unskip that TeX does as + % part of (the primitive) \par. Without it, a spurious underfull + % \hbox ensues. + \ifpdf + \pdfgettoks#1.% + \ \the\toksA + \else + \ #1% + \fi + \fi + \par + \endgroup +} + +% Like plain.tex's \dotfill, except uses up at least 1 em. +\def\indexdotfill{\cleaders + \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} + +\def\primary #1{\line{#1\hfil}} + +\newskip\secondaryindent \secondaryindent=0.5cm +\def\secondary#1#2{{% + \parfillskip=0in + \parskip=0in + \hangindent=1in + \hangafter=1 + \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill + \ifpdf + \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + \else + #2 + \fi + \par +}} + +% Define two-column mode, which we use to typeset indexes. +% Adapted from the TeXbook, page 416, which is to say, +% the manmac.tex format used to print the TeXbook itself. +\catcode`\@=11 + +\newbox\partialpage +\newdimen\doublecolumnhsize + +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns + % Grab any single-column material above us. + \output = {% + % + % Here is a possibility not foreseen in manmac: if we accumulate a + % whole lot of material, we might end up calling this \output + % routine twice in a row (see the doublecol-lose test, which is + % essentially a couple of indexes with @setchapternewpage off). In + % that case we just ship out what is in \partialpage with the normal + % output routine. Generally, \partialpage will be empty when this + % runs and this will be a no-op. See the indexspread.tex test case. + \ifvoid\partialpage \else + \onepageout{\pagecontents\partialpage}% + \fi + % + \global\setbox\partialpage = \vbox{% + % Unvbox the main output page. + \unvbox\PAGE + \kern-\topskip \kern\baselineskip + }% + }% + \eject % run that output routine to set \partialpage + % + % Use the double-column output routine for subsequent pages. + \output = {\doublecolumnout}% + % + % Change the page size parameters. We could do this once outside this + % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 + % format, but then we repeat the same computation. Repeating a couple + % of assignments once per index is clearly meaningless for the + % execution time, so we may as well do it in one place. + % + % First we halve the line length, less a little for the gutter between + % the columns. We compute the gutter based on the line length, so it + % changes automatically with the paper format. The magic constant + % below is chosen so that the gutter has the same value (well, +-<1pt) + % as it did when we hard-coded it. + % + % We put the result in a separate register, \doublecolumhsize, so we + % can restore it in \pagesofar, after \hsize itself has (potentially) + % been clobbered. + % + \doublecolumnhsize = \hsize + \advance\doublecolumnhsize by -.04154\hsize + \divide\doublecolumnhsize by 2 + \hsize = \doublecolumnhsize + % + % Double the \vsize as well. (We don't need a separate register here, + % since nobody clobbers \vsize.) + \vsize = 2\vsize +} + +% The double-column output routine for all double-column pages except +% the last. +% +\def\doublecolumnout{% + \splittopskip=\topskip \splitmaxdepth=\maxdepth + % Get the available space for the double columns -- the normal + % (undoubled) page height minus any material left over from the + % previous page. + \dimen@ = \vsize + \divide\dimen@ by 2 + \advance\dimen@ by -\ht\partialpage + % + % box0 will be the left-hand column, box2 the right. + \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ + \onepageout\pagesofar + \unvbox255 + \penalty\outputpenalty +} +% +% Re-output the contents of the output page -- any previous material, +% followed by the two boxes we just split, in box0 and box2. +\def\pagesofar{% + \unvbox\partialpage + % + \hsize = \doublecolumnhsize + \wd0=\hsize \wd2=\hsize + \hbox to\pagewidth{\box0\hfil\box2}% +} +% +% All done with double columns. +\def\enddoublecolumns{% + % The following penalty ensures that the page builder is exercised + % _before_ we change the output routine. This is necessary in the + % following situation: + % + % The last section of the index consists only of a single entry. + % Before this section, \pagetotal is less than \pagegoal, so no + % break occurs before the last section starts. However, the last + % section, consisting of \initial and the single \entry, does not + % fit on the page and has to be broken off. Without the following + % penalty the page builder will not be exercised until \eject + % below, and by that time we'll already have changed the output + % routine to the \balancecolumns version, so the next-to-last + % double-column page will be processed with \balancecolumns, which + % is wrong: The two columns will go to the main vertical list, with + % the broken-off section in the recent contributions. As soon as + % the output routine finishes, TeX starts reconsidering the page + % break. The two columns and the broken-off section both fit on the + % page, because the two columns now take up only half of the page + % goal. When TeX sees \eject from below which follows the final + % section, it invokes the new output routine that we've set after + % \balancecolumns below; \onepageout will try to fit the two columns + % and the final section into the vbox of \pageheight (see + % \pagebody), causing an overfull box. + % + % Note that glue won't work here, because glue does not exercise the + % page builder, unlike penalties (see The TeXbook, pp. 280-281). + \penalty0 + % + \output = {% + % Split the last of the double-column material. Leave it on the + % current page, no automatic page break. + \balancecolumns + % + % If we end up splitting too much material for the current page, + % though, there will be another page break right after this \output + % invocation ends. Having called \balancecolumns once, we do not + % want to call it again. Therefore, reset \output to its normal + % definition right away. (We hope \balancecolumns will never be + % called on to balance too much material, but if it is, this makes + % the output somewhat more palatable.) + \global\output = {\onepageout{\pagecontents\PAGE}}% + }% + \eject + \endgroup % started in \begindoublecolumns + % + % \pagegoal was set to the doubled \vsize above, since we restarted + % the current page. We're now back to normal single-column + % typesetting, so reset \pagegoal to the normal \vsize (after the + % \endgroup where \vsize got restored). + \pagegoal = \vsize +} +% +% Called at the end of the double column material. +\def\balancecolumns{% + \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. + \dimen@ = \ht0 + \advance\dimen@ by \topskip + \advance\dimen@ by-\baselineskip + \divide\dimen@ by 2 % target to split to + %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% + \splittopskip = \topskip + % Loop until we get a decent breakpoint. + {% + \vbadness = 10000 + \loop + \global\setbox3 = \copy0 + \global\setbox1 = \vsplit3 to \dimen@ + \ifdim\ht3>\dimen@ + \global\advance\dimen@ by 1pt + \repeat + }% + %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% + \setbox0=\vbox to\dimen@{\unvbox1}% + \setbox2=\vbox to\dimen@{\unvbox3}% + % + \pagesofar +} +\catcode`\@ = \other + + +\message{sectioning,} +% Chapters, sections, etc. + +% \unnumberedno is an oxymoron, of course. But we count the unnumbered +% sections so that we can refer to them unambiguously in the pdf +% outlines by their "section number". We avoid collisions with chapter +% numbers by starting them at 10000. (If a document ever has 10000 +% chapters, we're in trouble anyway, I'm sure.) +\newcount\unnumberedno \unnumberedno = 10000 +\newcount\chapno +\newcount\secno \secno=0 +\newcount\subsecno \subsecno=0 +\newcount\subsubsecno \subsubsecno=0 + +% This counter is funny since it counts through charcodes of letters A, B, ... +\newcount\appendixno \appendixno = `\@ +% +% \def\appendixletter{\char\the\appendixno} +% We do the following ugly conditional instead of the above simple +% construct for the sake of pdftex, which needs the actual +% letter in the expansion, not just typeset. +% +\def\appendixletter{% + \ifnum\appendixno=`A A% + \else\ifnum\appendixno=`B B% + \else\ifnum\appendixno=`C C% + \else\ifnum\appendixno=`D D% + \else\ifnum\appendixno=`E E% + \else\ifnum\appendixno=`F F% + \else\ifnum\appendixno=`G G% + \else\ifnum\appendixno=`H H% + \else\ifnum\appendixno=`I I% + \else\ifnum\appendixno=`J J% + \else\ifnum\appendixno=`K K% + \else\ifnum\appendixno=`L L% + \else\ifnum\appendixno=`M M% + \else\ifnum\appendixno=`N N% + \else\ifnum\appendixno=`O O% + \else\ifnum\appendixno=`P P% + \else\ifnum\appendixno=`Q Q% + \else\ifnum\appendixno=`R R% + \else\ifnum\appendixno=`S S% + \else\ifnum\appendixno=`T T% + \else\ifnum\appendixno=`U U% + \else\ifnum\appendixno=`V V% + \else\ifnum\appendixno=`W W% + \else\ifnum\appendixno=`X X% + \else\ifnum\appendixno=`Y Y% + \else\ifnum\appendixno=`Z Z% + % The \the is necessary, despite appearances, because \appendixletter is + % expanded while writing the .toc file. \char\appendixno is not + % expandable, thus it is written literally, thus all appendixes come out + % with the same letter (or @) in the toc without it. + \else\char\the\appendixno + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} + +% Each @chapter defines these (using marks) as the number+name, number +% and name of the chapter. Page headings and footings can use +% these. @section does likewise. +\def\thischapter{} +\def\thischapternum{} +\def\thischaptername{} +\def\thissection{} +\def\thissectionnum{} +\def\thissectionname{} + +\newcount\absseclevel % used to calculate proper heading level +\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count + +% @raisesections: treat @section as chapter, @subsection as section, etc. +\def\raisesections{\global\advance\secbase by -1} +\let\up=\raisesections % original BFox name + +% @lowersections: treat @chapter as section, @section as subsection, etc. +\def\lowersections{\global\advance\secbase by 1} +\let\down=\lowersections % original BFox name + +% we only have subsub. +\chardef\maxseclevel = 3 +% +% A numbered section within an unnumbered changes to unnumbered too. +% To achive this, remember the "biggest" unnum. sec. we are currently in: +\chardef\unmlevel = \maxseclevel +% +% Trace whether the current chapter is an appendix or not: +% \chapheadtype is "N" or "A", unnumbered chapters are ignored. +\def\chapheadtype{N} + +% Choose a heading macro +% #1 is heading type +% #2 is heading level +% #3 is text for heading +\def\genhead#1#2#3{% + % Compute the abs. sec. level: + \absseclevel=#2 + \advance\absseclevel by \secbase + % Make sure \absseclevel doesn't fall outside the range: + \ifnum \absseclevel < 0 + \absseclevel = 0 + \else + \ifnum \absseclevel > 3 + \absseclevel = 3 + \fi + \fi + % The heading type: + \def\headtype{#1}% + \if \headtype U% + \ifnum \absseclevel < \unmlevel + \chardef\unmlevel = \absseclevel + \fi + \else + % Check for appendix sections: + \ifnum \absseclevel = 0 + \edef\chapheadtype{\headtype}% + \else + \if \headtype A\if \chapheadtype N% + \errmessage{@appendix... within a non-appendix chapter}% + \fi\fi + \fi + % Check for numbered within unnumbered: + \ifnum \absseclevel > \unmlevel + \def\headtype{U}% + \else + \chardef\unmlevel = 3 + \fi + \fi + % Now print the heading: + \if \headtype U% + \ifcase\absseclevel + \unnumberedzzz{#3}% + \or \unnumberedseczzz{#3}% + \or \unnumberedsubseczzz{#3}% + \or \unnumberedsubsubseczzz{#3}% + \fi + \else + \if \headtype A% + \ifcase\absseclevel + \appendixzzz{#3}% + \or \appendixsectionzzz{#3}% + \or \appendixsubseczzz{#3}% + \or \appendixsubsubseczzz{#3}% + \fi + \else + \ifcase\absseclevel + \chapterzzz{#3}% + \or \seczzz{#3}% + \or \numberedsubseczzz{#3}% + \or \numberedsubsubseczzz{#3}% + \fi + \fi + \fi + \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @chapter, @appendix, @unnumbered. Increment top-level counter, reset +% all lower-level sectioning counters to zero. +% +% Also set \chaplevelprefix, which we prepend to @float sequence numbers +% (e.g., figures), q.v. By default (before any chapter), that is empty. +\let\chaplevelprefix = \empty +% +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz#1{% + % section resetting is \global in case the chapter is in a group, such + % as an @include file. + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\chapno by 1 + % + % Used for \float. + \gdef\chaplevelprefix{\the\chapno.}% + \resetallfloatnos + % + \message{\putwordChapter\space \the\chapno}% + % + % Write the actual heading. + \chapmacro{#1}{Ynumbered}{\the\chapno}% + % + % So @section and the like are numbered underneath this chapter. + \global\let\section = \numberedsec + \global\let\subsection = \numberedsubsec + \global\let\subsubsection = \numberedsubsubsec +} + +\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz +\def\appendixzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\appendixno by 1 + \gdef\chaplevelprefix{\appendixletter.}% + \resetallfloatnos + % + \def\appendixnum{\putwordAppendix\space \appendixletter}% + \message{\appendixnum}% + % + \chapmacro{#1}{Yappendix}{\appendixletter}% + % + \global\let\section = \appendixsec + \global\let\subsection = \appendixsubsec + \global\let\subsubsection = \appendixsubsubsec +} + +\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\unnumberedno by 1 + % + % Since an unnumbered has no number, no prefix for figures. + \global\let\chaplevelprefix = \empty + \resetallfloatnos + % + % This used to be simply \message{#1}, but TeX fully expands the + % argument to \message. Therefore, if #1 contained @-commands, TeX + % expanded them. For example, in `@unnumbered The @cite{Book}', TeX + % expanded @cite (which turns out to cause errors because \cite is meant + % to be executed, not expanded). + % + % Anyway, we don't want the fully-expanded definition of @cite to appear + % as a result of the \message, we just want `@cite' itself. We use + % \the to achieve this: TeX expands \the only once, + % simply yielding the contents of . (We also do this for + % the toc entries.) + \toks0 = {#1}% + \message{(\the\toks0)}% + % + \chapmacro{#1}{Ynothing}{\the\unnumberedno}% + % + \global\let\section = \unnumberedsec + \global\let\subsection = \unnumberedsubsec + \global\let\subsubsection = \unnumberedsubsubsec +} + +% @centerchap is like @unnumbered, but the heading is centered. +\outer\parseargdef\centerchap{% + % Well, we could do the following in a group, but that would break + % an assumption that \chapmacro is called at the outermost level. + % Thus we are safer this way: --kasal, 24feb04 + \let\centerparametersmaybe = \centerparameters + \unnmhead0{#1}% + \let\centerparametersmaybe = \relax +} + +% @top is like @unnumbered. +\let\top\unnumbered + +% Sections. +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz +\def\seczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% +} + +\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz +\def\appendixsectionzzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% +} +\let\appendixsec\appendixsection + +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz +\def\unnumberedseczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% +} + +% Subsections. +\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz +\def\numberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz +\def\appendixsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno}% +} + +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz +\def\unnumberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno}% +} + +% Subsubsections. +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz +\def\numberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynumbered}% + {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz +\def\appendixsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz +\def\unnumberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% +} + +% These macros control what the section commands do, according +% to what kind of chapter we are in (ordinary, appendix, or unnumbered). +% Define them by default for a numbered chapter. +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\let\subsubsection = \numberedsubsubsec + +% Define @majorheading, @heading and @subheading + +% NOTE on use of \vbox for chapter headings, section headings, and such: +% 1) We use \vbox rather than the earlier \line to permit +% overlong headings to fold. +% 2) \hyphenpenalty is set to 10000 because hyphenation in a +% heading is obnoxious; this forbids it. +% 3) Likewise, headings look best if no \parindent is used, and +% if justification is not attempted. Hence \raggedright. + + +\def\majorheading{% + {\advance\chapheadingskip by 10pt \chapbreak }% + \parsearg\chapheadingzzz +} + +\def\chapheading{\chapbreak \parsearg\chapheadingzzz} +\def\chapheadingzzz#1{% + {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}% + \bigskip \par\penalty 200\relax + \suppressfirstparagraphindent +} + +% @heading, @subheading, @subsubheading. +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} + +% These macros generate a chapter, section, etc. heading only +% (including whitespace, linebreaking, etc. around it), +% given all the information in convenient, parsed form. + +%%% Args are the skip and penalty (usually negative) +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} + +%%% Define plain chapter starts, and page on/off switching for it +% Parameter controlling skip before chapter headings (if needed) + +\newskip\chapheadingskip + +\def\chapbreak{\dobreak \chapheadingskip {-4000}} +\def\chappager{\par\vfill\supereject} +% Because \domark is called before \chapoddpage, the filler page will +% get the headings for the next chapter, which is wrong. But we don't +% care -- we just disable all headings on the filler page. +\def\chapoddpage{% + \chappager + \ifodd\pageno \else + \begingroup + \evenheadline={\hfil}\evenfootline={\hfil}% + \oddheadline={\hfil}\oddfootline={\hfil}% + \hbox to 0pt{}% + \chappager + \endgroup + \fi +} + +\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} + +\def\CHAPPAGoff{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chapbreak +\global\let\pagealignmacro=\chappager} + +\def\CHAPPAGon{% +\global\let\contentsalignmacro = \chappager +\global\let\pchapsepmacro=\chappager +\global\let\pagealignmacro=\chappager +\global\def\HEADINGSon{\HEADINGSsingle}} + +\def\CHAPPAGodd{% +\global\let\contentsalignmacro = \chapoddpage +\global\let\pchapsepmacro=\chapoddpage +\global\let\pagealignmacro=\chapoddpage +\global\def\HEADINGSon{\HEADINGSdouble}} + +\CHAPPAGon + +% Chapter opening. +% +% #1 is the text, #2 is the section type (Ynumbered, Ynothing, +% Yappendix, Yomitfromtoc), #3 the chapter number. +% +% To test against our argument. +\def\Ynothingkeyword{Ynothing} +\def\Yomitfromtockeyword{Yomitfromtoc} +\def\Yappendixkeyword{Yappendix} +% +\def\chapmacro#1#2#3{% + % Insert the first mark before the heading break (see notes for \domark). + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% + \gdef\thissection{}}% + % + \def\temptype{#2}% + \ifx\temptype\Ynothingkeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{\thischaptername}}% + \else\ifx\temptype\Yomitfromtockeyword + \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% + \gdef\thischapter{}}% + \else\ifx\temptype\Yappendixkeyword + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\appendixletter}% + \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \else + \toks0={#1}% + \xdef\lastchapterdefs{% + \gdef\noexpand\thischaptername{\the\toks0}% + \gdef\noexpand\thischapternum{\the\chapno}% + \gdef\noexpand\thischapter{\putwordChapter{} \noexpand\thischapternum: + \noexpand\thischaptername}% + }% + \fi\fi\fi + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert the chapter heading break. + \pchapsepmacro + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevchapterdefs=\lastchapterdefs + \let\prevsectiondefs=\lastsectiondefs + \domark + % + {% + \chapfonts \rm + % + % Have to define \lastsection before calling \donoderef, because the + % xref code eventually uses it. On the other hand, it has to be called + % after \pchapsepmacro, or the headline will change too soon. + \gdef\lastsection{#1}% + % + % Only insert the separating space if we have a chapter/appendix + % number, and don't print the unnumbered ``number''. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unnchap}% + \else\ifx\temptype\Yomitfromtockeyword + \setbox0 = \hbox{}% contents like unnumbered, but no toc entry + \def\toctype{omit}% + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% + \def\toctype{app}% + \else + \setbox0 = \hbox{#3\enspace}% + \def\toctype{numchap}% + \fi\fi\fi + % + % Write the toc entry for this chapter. Must come before the + % \donoderef, because we include the current node name in the toc + % entry, and \donoderef resets it to empty. + \writetocentry{\toctype}{#1}{#3}% + % + % For pdftex, we have to write out the node definition (aka, make + % the pdfdest) after any page break, but before the actual text has + % been typeset. If the destination for the pdf outline is after the + % text, then jumping from the outline may wind up with the text not + % being visible, for instance under high magnification. + \donoderef{#2}% + % + % Typeset the actual heading. + \nobreak % Avoid page breaks at the interline glue. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent=\wd0 \centerparametersmaybe + \unhbox0 #1\par}% + }% + \nobreak\bigskip % no page break after a chapter title + \nobreak +} + +% @centerchap -- centered and unnumbered. +\let\centerparametersmaybe = \relax +\def\centerparameters{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt +} + + +% I don't think this chapter style is supported any more, so I'm not +% updating it with the new noderef stuff. We'll see. --karl, 11aug03. +% +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} +% +\def\unnchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt\raggedright + \rm #1\hfill}}\bigskip \par\nobreak +} +\def\chfopen #1#2{\chapoddpage {\chapfonts +\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% +\par\penalty 5000 % +} +\def\centerchfopen #1{% +\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 + \parindent=0pt + \hfill {\rm #1}\hfill}}\bigskip \par\nobreak +} +\def\CHAPFopen{% + \global\let\chapmacro=\chfopen + \global\let\centerchapmacro=\centerchfopen} + + +% Section titles. These macros combine the section number parts and +% call the generic \sectionheading to do the printing. +% +\newskip\secheadingskip +\def\secheadingbreak{\dobreak \secheadingskip{-1000}} + +% Subsection titles. +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} + +% Subsubsection titles. +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} + + +% Print any size, any type, section title. +% +% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is +% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the +% section number. +% +\def\seckeyword{sec} +% +\def\sectionheading#1#2#3#4{% + {% + % Switch to the right set of fonts. + \csname #2fonts\endcsname \rm + % + \def\sectionlevel{#2}% + \def\temptype{#3}% + % + % Insert first mark before the heading break (see notes for \domark). + \let\prevsectiondefs=\lastsectiondefs + \ifx\temptype\Ynothingkeyword + \ifx\sectionlevel\seckeyword + \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% + \gdef\thissection{\thissectionname}}% + \fi + \else\ifx\temptype\Yomitfromtockeyword + % Don't redefine \thissection. + \else\ifx\temptype\Yappendixkeyword + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \else + \ifx\sectionlevel\seckeyword + \toks0={#1}% + \xdef\lastsectiondefs{% + \gdef\noexpand\thissectionname{\the\toks0}% + \gdef\noexpand\thissectionnum{#4}% + \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: + \noexpand\thissectionname}% + }% + \fi + \fi\fi\fi + % + % Output the mark. Pass it through \safewhatsit, to take care of + % the preceding space. + \safewhatsit\domark + % + % Insert space above the heading. + \csname #2headingbreak\endcsname + % + % Now the second mark, after the heading break. No break points + % between here and the heading. + \let\prevsectiondefs=\lastsectiondefs + \domark + % + % Only insert the space after the number if we have a section number. + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unn}% + \gdef\lastsection{#1}% + \else\ifx\temptype\Yomitfromtockeyword + % for @headings -- no section number, don't include in toc, + % and don't redefine \lastsection. + \setbox0 = \hbox{}% + \def\toctype{omit}% + \let\sectionlevel=\empty + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{#4\enspace}% + \def\toctype{app}% + \gdef\lastsection{#1}% + \else + \setbox0 = \hbox{#4\enspace}% + \def\toctype{num}% + \gdef\lastsection{#1}% + \fi\fi\fi + % + % Write the toc entry (before \donoderef). See comments in \chapmacro. + \writetocentry{\toctype\sectionlevel}{#1}{#4}% + % + % Write the node reference (= pdf destination for pdftex). + % Again, see comments in \chapmacro. + \donoderef{#3}% + % + % Interline glue will be inserted when the vbox is completed. + % That glue will be a valid breakpoint for the page, since it'll be + % preceded by a whatsit (usually from the \donoderef, or from the + % \writetocentry if there was no node). We don't want to allow that + % break, since then the whatsits could end up on page n while the + % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. + \nobreak + % + % Output the actual section heading. + \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright + \hangindent=\wd0 % zero if no section number + \unhbox0 #1}% + }% + % Add extra space after the heading -- half of whatever came above it. + % Don't allow stretch, though. + \kern .5 \csname #2headingskip\endcsname + % + % Do not let the kern be a potential breakpoint, as it would be if it + % was followed by glue. + \nobreak + % + % We'll almost certainly start a paragraph next, so don't let that + % glue accumulate. (Not a breakpoint because it's preceded by a + % discardable item.) + \vskip-\parskip + % + % This is purely so the last item on the list is a known \penalty > + % 10000. This is so \startdefun can avoid allowing breakpoints after + % section headings. Otherwise, it would insert a valid breakpoint between: + % + % @section sec-whatever + % @deffn def-whatever + \penalty 10001 +} + + +\message{toc,} +% Table of contents. +\newwrite\tocfile + +% Write an entry to the toc file, opening it if necessary. +% Called from @chapter, etc. +% +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} +% We append the current node name (if any) and page number as additional +% arguments for the \{chap,sec,...}entry macros which will eventually +% read this. The node name is used in the pdf outlines as the +% destination to jump to. +% +% We open the .toc file for writing here instead of at @setfilename (or +% any other fixed time) so that @contents can be anywhere in the document. +% But if #1 is `omit', then we don't do anything. This is used for the +% table of contents chapter openings themselves. +% +\newif\iftocfileopened +\def\omitkeyword{omit}% +% +\def\writetocentry#1#2#3{% + \edef\writetoctype{#1}% + \ifx\writetoctype\omitkeyword \else + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + % + \iflinks + {\atdummies + \edef\temp{% + \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% + \temp + }% + \fi + \fi + % + % Tell \shipout to create a pdf destination on each page, if we're + % writing pdf. These are used in the table of contents. We can't + % just write one on every page because the title pages are numbered + % 1 and 2 (the page numbers aren't printed), and so are the first + % two pages of the document. Thus, we'd have two destinations named + % `1', and two named `2'. + \ifpdf \global\pdfmakepagedesttrue \fi +} + + +% These characters do not print properly in the Computer Modern roman +% fonts, so we must take special care. This is more or less redundant +% with the Texinfo input format setup at the end of this file. +% +\def\activecatcodes{% + \catcode`\"=\active + \catcode`\$=\active + \catcode`\<=\active + \catcode`\>=\active + \catcode`\\=\active + \catcode`\^=\active + \catcode`\_=\active + \catcode`\|=\active + \catcode`\~=\active +} + + +% Read the toc file, which is essentially Texinfo input. +\def\readtocfile{% + \setupdatafile + \activecatcodes + \input \tocreadfilename +} + +\newskip\contentsrightmargin \contentsrightmargin=1in +\newcount\savepageno +\newcount\lastnegativepageno \lastnegativepageno = -1 + +% Prepare to read what we've written to \tocfile. +% +\def\startcontents#1{% + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund + \contentsalignmacro + \immediate\closeout\tocfile + % + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \chapmacro{#1}{Yomitfromtoc}{}% + % + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi +} + +% redefined for the two-volume lispref. We always output on +% \jobname.toc even if this is redefined. +% +\def\tocreadfilename{\jobname.toc} + +% Normal (long) toc. +% +\def\contents{% + \startcontents{\putwordTOC}% + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \ifeof 1 \else + \pdfmakeoutlines + \fi + \closein 1 + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} + +% And just the chapters. +\def\summarycontents{% + \startcontents{\putwordShortTOC}% + % + \let\numchapentry = \shortchapentry + \let\appentry = \shortchapentry + \let\unnchapentry = \shortunnchapentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf + \let\sl=\shortcontsl \let\tt=\shortconttt + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\numsecentry##1##2##3##4{} + \let\appsecentry = \numsecentry + \let\unnsecentry = \numsecentry + \let\numsubsecentry = \numsecentry + \let\appsubsecentry = \numsecentry + \let\unnsubsecentry = \numsecentry + \let\numsubsubsecentry = \numsecentry + \let\appsubsubsecentry = \numsecentry + \let\unnsubsubsecentry = \numsecentry + \openin 1 \tocreadfilename\space + \ifeof 1 \else + \readtocfile + \fi + \closein 1 + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno +} +\let\shortcontents = \summarycontents + +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g., `A' for an appendix, or `3' for a chapter. +% +\def\shortchaplabel#1{% + % This space should be enough, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + % + % We'd like to right-justify chapter numbers, but that looks strange + % with appendix letters. And right-justifying numbers and + % left-justifying letters looks strange when there is less than 10 + % chapters. Have to read the whole toc once to know how many chapters + % there are before deciding ... + \hbox to 1em{#1\hss}% +} + +% These macros generate individual entries in the table of contents. +% The first argument is the chapter or section name. +% The last argument is the page number. +% The arguments in between are the chapter number, section number, ... + +% Chapters, in the main contents. +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} +% +% Chapters, in the short toc. +% See comments in \dochapentry re vbox and related settings. +\def\shortchapentry#1#2#3#4{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% +} + +% Appendices, in the main contents. +% Need the word Appendix, and a fixed-size box. +% +\def\appendixbox#1{% + % We use M since it's probably the widest letter. + \setbox0 = \hbox{\putwordAppendix{} M}% + \hbox to \wd0{\putwordAppendix{} #1\hss}} +% +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} + +% Unnumbered chapters. +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} + +% Sections. +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} + +% Subsections. +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} +\let\appsubsecentry=\numsubsecentry +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} + +% And subsubsections. +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} +\let\appsubsubsecentry=\numsubsubsecentry +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} + +% This parameter controls the indentation of the various levels. +% Same as \defaultparindent. +\newdimen\tocindent \tocindent = 15pt + +% Now for the actual typesetting. In all these, #1 is the text and #2 is the +% page number. +% +% If the toc has to be broken over pages, we want it to be at chapters +% if at all possible; hence the \penalty. +\def\dochapentry#1#2{% + \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip + \begingroup + \chapentryfonts + \tocentry{#1}{\dopageno\bgroup#2\egroup}% + \endgroup + \nobreak\vskip .25\baselineskip plus.1\baselineskip +} + +\def\dosecentry#1#2{\begingroup + \secentryfonts \leftskip=\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsecentry#1#2{\begingroup + \subsecentryfonts \leftskip=2\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +\def\dosubsubsecentry#1#2{\begingroup + \subsubsecentryfonts \leftskip=3\tocindent + \tocentry{#1}{\dopageno\bgroup#2\egroup}% +\endgroup} + +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry + +% Space between chapter (or whatever) number and the title. +\def\labelspace{\hskip1em \relax} + +\def\dopageno#1{{\rm #1}} +\def\doshortpageno#1{{\rm #1}} + +\def\chapentryfonts{\secfonts \rm} +\def\secentryfonts{\textfonts} +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} + + +\message{environments,} +% @foo ... @end foo. + +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. +% +% Since these characters are used in examples, they should be an even number of +% \tt widths. Each \tt character is 1en, so two makes it 1em. +% +\def\point{$\star$} +\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} +\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} +\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} +\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} + +% The @error{} command. +% Adapted from the TeXbook's \boxit. +% +\newbox\errorbox +% +{\tentt \global\dimen0 = 3em}% Width of the box. +\dimen2 = .55pt % Thickness of rules +% The text. (`r' is open on the right, `e' somewhat less so on the left.) +\setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} +% +\setbox\errorbox=\hbox to \dimen0{\hfil + \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. + \advance\hsize by -2\dimen2 % Rules. + \vbox{% + \hrule height\dimen2 + \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. + \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. + \kern3pt\vrule width\dimen2}% Space to right. + \hrule height\dimen2} + \hfil} +% +\def\error{\leavevmode\lower.7ex\copy\errorbox} + +% @tex ... @end tex escapes into raw Tex temporarily. +% One exception: @ is still an escape character, so that @end tex works. +% But \@ or @@ will get a plain tex @ character. + +\envdef\tex{% + \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 + \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 + \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie + \catcode `\%=14 + \catcode `\+=\other + \catcode `\"=\other + \catcode `\|=\other + \catcode `\<=\other + \catcode `\>=\other + \escapechar=`\\ + % + \let\b=\ptexb + \let\bullet=\ptexbullet + \let\c=\ptexc + \let\,=\ptexcomma + \let\.=\ptexdot + \let\dots=\ptexdots + \let\equiv=\ptexequiv + \let\!=\ptexexclam + \let\i=\ptexi + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \let\{=\ptexlbrace + \let\+=\tabalign + \let\}=\ptexrbrace + \let\/=\ptexslash + \let\*=\ptexstar + \let\t=\ptext + \expandafter \let\csname top\endcsname=\ptextop % outer + \let\frenchspacing=\plainfrenchspacing + % + \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% + \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% + \def\@{@}% +} +% There is no need to define \Etex. + +% Define @lisp ... @end lisp. +% @lisp environment forms a group so it can rebind things, +% including the definition of @end lisp (which normally is erroneous). + +% Amount to narrow the margins by for @lisp. +\newskip\lispnarrowing \lispnarrowing=0.4in + +% This is the definition that ^^M gets inside @lisp, @example, and other +% such environments. \null is better than a space, since it doesn't +% have any width. +\def\lisppar{\null\endgraf} + +% This space is always present above and below environments. +\newskip\envskipamount \envskipamount = 0pt + +% Make spacing and below environment symmetrical. We use \parskip here +% to help in doing that, since in @example-like environments \parskip +% is reset to zero; thus the \afterenvbreak inserts no space -- but the +% start of the next paragraph will insert \parskip. +% +\def\aboveenvbreak{{% + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. + \ifnum \lastpenalty=10000 \else + \advance\envskipamount by \parskip + \endgraf + \ifdim\lastskip<\envskipamount + \removelastskip + % it's not a good place to break if the last penalty was \nobreak + % or better ... + \ifnum\lastpenalty<10000 \penalty-50 \fi + \vskip\envskipamount + \fi + \fi +}} + +\let\afterenvbreak = \aboveenvbreak + +% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will +% also clear it, so that its embedded environments do the narrowing again. +\let\nonarrowing=\relax + +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around +% environment contents. +\font\circle=lcircle10 +\newdimen\circthick +\newdimen\cartouter\newdimen\cartinner +\newskip\normbskip\newskip\normpskip\newskip\normlskip +\circthick=\fontdimen8\circle +% +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth +\def\ctr{{\hskip 6pt\circle\char'010}} +\def\cbl{{\circle\char'012\hskip -6pt}} +\def\cbr{{\hskip 6pt\circle\char'011}} +\def\carttop{\hbox to \cartouter{\hskip\lskip + \ctl\leaders\hrule height\circthick\hfil\ctr + \hskip\rskip}} +\def\cartbot{\hbox to \cartouter{\hskip\lskip + \cbl\leaders\hrule height\circthick\hfil\cbr + \hskip\rskip}} +% +\newskip\lskip\newskip\rskip + +\envdef\cartouche{% + \ifhmode\par\fi % can't be in the midst of a paragraph. + \startsavinginserts + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt % we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18.4pt % allow for 3pt kerns on either + % side, and for 6pt waste from + % each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing = t% + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \kern3pt + \hsize=\cartinner + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip + \comment % For explanation, see the end of \def\group. +} +\def\Ecartouche{% + \ifhmode\par\fi + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup + \checkinserts +} + + +% This macro is called at the beginning of all the @example variants, +% inside a group. +\def\nonfillstart{% + \aboveenvbreak + \hfuzz = 12pt % Don't be fussy + \sepspaces % Make spaces be word-separators rather than space tokens. + \let\par = \lisppar % don't ignore blank lines + \obeylines % each line of input is a line of output + \parskip = 0pt + \parindent = 0pt + \emergencystretch = 0pt % don't try to avoid overfull boxes + \ifx\nonarrowing\relax + \advance \leftskip by \lispnarrowing + \exdentamount=\lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \let\exdent=\nofillexdent +} + +% If you want all examples etc. small: @set dispenvsize small. +% If you want even small examples the full size: @set dispenvsize nosmall. +% This affects the following displayed environments: +% @example, @display, @format, @lisp +% +\def\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% + \ifx\SETdispenvsize\smallword + % end paragraph for sake of leading, in case document has no blank + % line. This is redundant with what happens in \aboveenvbreak, but + % we need to do it before changing the fonts, and it's inconvenient + % to change the fonts afterward. + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} +\def\setsmalldispenv{% + \ifx\SETdispenvsize\nosmallword + \else + \ifnum \lastpenalty=10000 \else \endgraf \fi + \smallexamplefonts \rm + \fi +} + +% We often define two environments, @foo and @smallfoo. +% Let's do it by one command: +\def\makedispenv #1#2{ + \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} + \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} + \expandafter\let\csname E#1\endcsname \afterenvbreak + \expandafter\let\csname Esmall#1\endcsname \afterenvbreak +} + +% Define two synonyms: +\def\maketwodispenvs #1#2#3{ + \makedispenv{#1}{#3} + \makedispenv{#2}{#3} +} + +% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. +% +% @smallexample and @smalllisp: use smaller fonts. +% Originally contributed by Pavel@xerox. +% +\maketwodispenvs {lisp}{example}{% + \nonfillstart + \tt\quoteexpand + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return +} +% @display/@smalldisplay: same as @lisp except keep current font. +% +\makedispenv {display}{% + \nonfillstart + \gobble +} + +% @format/@smallformat: same as @display except don't narrow margins. +% +\makedispenv{format}{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} + +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} +\let\Eflushleft = \afterenvbreak + +% @flushright. +% +\envdef\flushright{% + \let\nonarrowing = t% + \nonfillstart + \advance\leftskip by 0pt plus 1fill + \gobble +} +\let\Eflushright = \afterenvbreak + + +% @quotation does normal linebreaking (hence we can't use \nonfillstart) +% and narrows the margins. We keep \parskip nonzero in general, since +% we're doing normal filling. So, when using \aboveenvbreak and +% \afterenvbreak, temporarily make \parskip 0. +% +\envdef\quotation{% + {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip + \parindent=0pt + % + % @cartouche defines \nonarrowing to inhibit narrowing at next level down. + \ifx\nonarrowing\relax + \advance\leftskip by \lispnarrowing + \advance\rightskip by \lispnarrowing + \exdentamount = \lispnarrowing + \else + \let\nonarrowing = \relax + \fi + \parsearg\quotationlabel +} + +% We have retained a nonzero parskip for the environment, since we're +% doing normal filling. +% +\def\Equotation{% + \par + \ifx\quotationauthor\undefined\else + % indent a bit. + \leftline{\kern 2\leftskip \sl ---\quotationauthor}% + \fi + {\parskip=0pt \afterenvbreak}% +} + +% If we're given an argument, typeset it in bold with a colon after. +\def\quotationlabel#1{% + \def\temp{#1}% + \ifx\temp\empty \else + {\bf #1: }% + \fi +} + + +% LaTeX-like @verbatim...@end verbatim and @verb{...} +% If we want to allow any as delimiter, +% we need the curly braces so that makeinfo sees the @verb command, eg: +% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org +% +% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. +% +% [Knuth] p.344; only we need to do the other characters Texinfo sets +% active too. Otherwise, they get lost as the first character on a +% verbatim line. +\def\dospecials{% + \do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% + \do\<\do\>\do\|\do\@\do+\do\"% +} +% +% [Knuth] p. 380 +\def\uncatcodespecials{% + \def\do##1{\catcode`##1=\other}\dospecials} +% +% [Knuth] pp. 380,381,391 +% Disable Spanish ligatures ?` and !` of \tt font +\begingroup + \catcode`\`=\active\gdef`{\relax\lq} +\endgroup +% +% Setup for the @verb command. +% +% Eight spaces for a tab +\begingroup + \catcode`\^^I=\active + \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} +\endgroup +% +\def\setupverb{% + \tt % easiest (and conventionally used) font for verbatim + \def\par{\leavevmode\endgraf}% + \catcode`\`=\active + \tabeightspaces + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces +} + +% Setup for the @verbatim environment +% +% Real tab expansion +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount +% +\def\starttabbox{\setbox0=\hbox\bgroup} + +% Allow an option to not replace quotes with a regular directed right +% quote/apostrophe (char 0x27), but instead use the undirected quote +% from cmtt (char 0x0d). The undirected quote is ugly, so don't make it +% the default, but it works for pasting with more pdf viewers (at least +% evince), the lilypond developers report. xpdf does work with the +% regular 0x27. +% +\def\codequoteright{% + \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax + \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax + '% + \else \char'15 \fi + \else \char'15 \fi +} +% +% and a similar option for the left quote char vs. a grave accent. +% Modern fonts display ASCII 0x60 as a grave accent, so some people like +% the code environments to do likewise. +% +\def\codequoteleft{% + \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax + \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax + `% + \else \char'22 \fi + \else \char'22 \fi +} +% +\begingroup + \catcode`\^^I=\active + \gdef\tabexpand{% + \catcode`\^^I=\active + \def^^I{\leavevmode\egroup + \dimen0=\wd0 % the width so far, or since the previous tab + \divide\dimen0 by\tabw + \multiply\dimen0 by\tabw % compute previous multiple of \tabw + \advance\dimen0 by\tabw % advance to next multiple of \tabw + \wd0=\dimen0 \box0 \starttabbox + }% + } + \catcode`\'=\active + \gdef\rquoteexpand{\catcode\rquoteChar=\active \def'{\codequoteright}}% + % + \catcode`\`=\active + \gdef\lquoteexpand{\catcode\lquoteChar=\active \def`{\codequoteleft}}% + % + \gdef\quoteexpand{\rquoteexpand \lquoteexpand}% +\endgroup + +% start the verbatim environment. +\def\setupverbatim{% + \let\nonarrowing = t% + \nonfillstart + % Easiest (and conventionally used) font for verbatim + \tt + \def\par{\leavevmode\egroup\box0\endgraf}% + \catcode`\`=\active + \tabexpand + \quoteexpand + % Respect line breaks, + % print special symbols as themselves, and + % make each space count + % must do in this order: + \obeylines \uncatcodespecials \sepspaces + \everypar{\starttabbox}% +} + +% Do the @verb magic: verbatim text is quoted by unique +% delimiter characters. Before first delimiter expect a +% right brace, after last delimiter expect closing brace: +% +% \def\doverb'{'#1'}'{#1} +% +% [Knuth] p. 382; only eat outer {} +\begingroup + \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other + \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] +\endgroup +% +\def\verb{\begingroup\setupverb\doverb} +% +% +% Do the @verbatim magic: define the macro \doverbatim so that +% the (first) argument ends when '@end verbatim' is reached, ie: +% +% \def\doverbatim#1@end verbatim{#1} +% +% For Texinfo it's a lot easier than for LaTeX, +% because texinfo's \verbatim doesn't stop at '\end{verbatim}': +% we need not redefine '\', '{' and '}'. +% +% Inspired by LaTeX's verbatim command set [latex.ltx] +% +\begingroup + \catcode`\ =\active + \obeylines % + % ignore everything up to the first ^^M, that's the newline at the end + % of the @verbatim input line itself. Otherwise we get an extra blank + % line in the output. + \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% + % We really want {...\end verbatim} in the body of the macro, but + % without the active space; thus we have to use \xdef and \gobble. +\endgroup +% +\envdef\verbatim{% + \setupverbatim\doverbatim +} +\let\Everbatim = \afterenvbreak + + +% @verbatiminclude FILE - insert text of file in verbatim environment. +% +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} +% +\def\doverbatiminclude#1{% + {% + \makevalueexpandable + \setupverbatim + \input #1 + \afterenvbreak + }% +} + +% @copying ... @end copying. +% Save the text away for @insertcopying later. +% +% We save the uninterpreted tokens, rather than creating a box. +% Saving the text in a box would be much easier, but then all the +% typesetting commands (@smallbook, font changes, etc.) have to be done +% beforehand -- and a) we want @copying to be done first in the source +% file; b) letting users define the frontmatter in as flexible order as +% possible is very desirable. +% +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} +\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} +% +\def\insertcopying{% + \begingroup + \parindent = 0pt % paragraph indentation looks wrong on title page + \scanexp\copyingtext + \endgroup +} + + +\message{defuns,} +% @defun etc. + +\newskip\defbodyindent \defbodyindent=.4in +\newskip\defargsindent \defargsindent=50pt +\newskip\deflastargmargin \deflastargmargin=18pt +\newcount\defunpenalty + +% Start the processing of @deffn: +\def\startdefun{% + \ifnum\lastpenalty<10000 + \medbreak + \defunpenalty=10003 % Will keep this @deffn together with the + % following @def command, see below. + \else + % If there are two @def commands in a row, we'll have a \nobreak, + % which is there to keep the function description together with its + % header. But if there's nothing but headers, we need to allow a + % break somewhere. Check specifically for penalty 10002, inserted + % by \printdefunline, instead of 10000, since the sectioning + % commands also insert a nobreak penalty, and we don't want to allow + % a break between a section heading and a defun. + % + % As a minor refinement, we avoid "club" headers by signalling + % with penalty of 10003 after the very first @deffn in the + % sequence (see above), and penalty of 10002 after any following + % @def command. + \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi + % + % Similarly, after a section heading, do not allow a break. + % But do insert the glue. + \medskip % preceded by discardable penalty, so not a breakpoint + \fi + % + \parindent=0in + \advance\leftskip by \defbodyindent + \exdentamount=\defbodyindent +} + +\def\dodefunx#1{% + % First, check whether we are in the right environment: + \checkenv#1% + % + % As above, allow line break if we have multiple x headers in a row. + % It's not a great place, though. + \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi + % + % And now, it's time to reuse the body of the original defun: + \expandafter\gobbledefun#1% +} +\def\gobbledefun#1\startdefun{} + +% \printdefunline \deffnheader{text} +% +\def\printdefunline#1#2{% + \begingroup + % call \deffnheader: + #1#2 \endheader + % common ending: + \interlinepenalty = 10000 + \advance\rightskip by 0pt plus 1fil + \endgraf + \nobreak\vskip -\parskip + \penalty\defunpenalty % signal to \startdefun and \dodefunx + % Some of the @defun-type tags do not enable magic parentheses, + % rendering the following check redundant. But we don't optimize. + \checkparencounts + \endgroup +} + +\def\Edefun{\endgraf\medbreak} + +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remaining is to define \deffnheader. +% +\def\makedefun#1{% + \expandafter\let\csname E#1\endcsname = \Edefun + \edef\temp{\noexpand\domakedefun + \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% + \temp +} + +% \domakedefun \deffn \deffnx \deffnheader +% +% Define \deffn and \deffnx, without parameters. +% \deffnheader has to be defined explicitly. +% +\def\domakedefun#1#2#3{% + \envdef#1{% + \startdefun + \parseargusing\activeparens{\printdefunline#3}% + }% + \def#2{\dodefunx#1}% + \def#3% +} + +%%% Untyped functions: + +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} + +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} + +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deffngeneral {subind}category name args +% +\def\deffngeneral#1#2 #3 #4\endheader{% + % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. + \dosubind{fn}{\code{#3}}{#1}% + \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% +} + +%%% Typed functions: + +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} + +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} + +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } + +% \deftypefngeneral {subind}category type name args +% +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% + \dosubind{fn}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Typed variables: + +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} + +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} + +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } + +% \deftypecvgeneral {subind}category type var args +% +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% + \dosubind{vr}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% +} + +%%% Untyped variables: + +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } + +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} + +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } + +%%% Type: +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% + \doind{tp}{\code{#2}}% + \defname{#1}{}{#2}\defunargs{#3\unskip}% +} + +% Remaining @defun-like shortcuts: +\makedefun{defun}{\deffnheader{\putwordDeffunc} } +\makedefun{defmac}{\deffnheader{\putwordDefmac} } +\makedefun{defspec}{\deffnheader{\putwordDefspec} } +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } +\makedefun{defvar}{\defvrheader{\putwordDefvar} } +\makedefun{defopt}{\defvrheader{\putwordDefopt} } +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } +\makedefun{defmethod}{\defopon\putwordMethodon} +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} +\makedefun{defivar}{\defcvof\putwordInstanceVariableof} +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} + +% \defname, which formats the name of the @def (not the args). +% #1 is the category, such as "Function". +% #2 is the return type, if any. +% #3 is the function name. +% +% We are followed by (but not passed) the arguments, if any. +% +\def\defname#1#2#3{% + % Get the values of \leftskip and \rightskip as they were outside the @def... + \advance\leftskip by -\defbodyindent + % + % How we'll format the type name. Putting it in brackets helps + % distinguish it from the body text that may end up on the next line + % just below it. + \def\temp{#1}% + \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} + % + % Figure out line sizes for the paragraph shape. + % The first line needs space for \box0; but if \rightskip is nonzero, + % we need only space for the part of \box0 which exceeds it: + \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip + % The continuations: + \dimen2=\hsize \advance\dimen2 by -\defargsindent + % (plain.tex says that \dimen1 should be used only as global.) + \parshape 2 0in \dimen0 \defargsindent \dimen2 + % + % Put the type name to the right margin. + \noindent + \hbox to 0pt{% + \hfil\box0 \kern-\hsize + % \hsize has to be shortened this way: + \kern\leftskip + % Intentionally do not respect \rightskip, since we need the space. + }% + % + % Allow all lines to be underfull without complaint: + \tolerance=10000 \hbadness=10000 + \exdentamount=\defbodyindent + {% + % defun fonts. We use typewriter by default (used to be bold) because: + % . we're printing identifiers, they should be in tt in principle. + % . in languages with many accents, such as Czech or French, it's + % common to leave accents off identifiers. The result looks ok in + % tt, but exceedingly strange in rm. + % . we don't want -- and --- to be treated as ligatures. + % . this still does not fix the ?` and !` ligatures, but so far no + % one has made identifiers using them :). + \df \tt + \def\temp{#2}% return value type + \ifx\temp\empty\else \tclose{\temp} \fi + #3% output function name + }% + {\rm\enskip}% hskip 0.5 em of \tenrm + % + \boldbrax + % arguments will be output next, if any. +} + +% Print arguments in slanted roman (not ttsl), inconsistently with using +% tt for the name. This is because literal text is sometimes needed in +% the argument list (groff manual), and ttsl and tt are not very +% distinguishable. Prevent hyphenation at `-' chars. +% +\def\defunargs#1{% + % use sl by default (not ttsl), + % tt for the names. + \df \sl \hyphenchar\font=0 + % + % On the other hand, if an argument has two dashes (for instance), we + % want a way to get ttsl. Let's try @var for that. + \let\var=\ttslanted + #1% + \sl\hyphenchar\font=45 +} + +% We want ()&[] to print specially on the defun line. +% +\def\activeparens{% + \catcode`\(=\active \catcode`\)=\active + \catcode`\[=\active \catcode`\]=\active + \catcode`\&=\active +} + +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) + +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +{ + \activeparens + \global\let(=\lparen \global\let)=\rparen + \global\let[=\lbrack \global\let]=\rbrack + \global\let& = \& + + \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} + \gdef\magicamp{\let&=\amprm} +} + +\newcount\parencount + +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\def\parenfont{% + \ifampseen + % At the first level, print parens in roman, + % otherwise use the default font. + \ifnum \parencount=1 \rm \fi + \else + % The \sf parens (in \boldbrax) actually are a little bolder than + % the contained text. This is especially needed for [ and ] . + \sf + \fi +} +\def\infirstlevel#1{% + \ifampseen + \ifnum\parencount=1 + #1% + \fi + \fi +} +\def\bfafterword#1 {#1 \bf} + +\def\opnr{% + \global\advance\parencount by 1 + {\parenfont(}% + \infirstlevel \bfafterword +} +\def\clnr{% + {\parenfont)}% + \infirstlevel \sl + \global\advance\parencount by -1 +} + +\newcount\brackcount +\def\lbrb{% + \global\advance\brackcount by 1 + {\bf[}% +} +\def\rbrb{% + {\bf]}% + \global\advance\brackcount by -1 +} + +\def\checkparencounts{% + \ifnum\parencount=0 \else \badparencount \fi + \ifnum\brackcount=0 \else \badbrackcount \fi +} +% these should not use \errmessage; the glibc manual, at least, actually +% has such constructs (when documenting function pointers). +\def\badparencount{% + \message{Warning: unbalanced parentheses in @def...}% + \global\parencount=0 +} +\def\badbrackcount{% + \message{Warning: unbalanced square brackets in @def...}% + \global\brackcount=0 +} + + +\message{macros,} +% @macro. + +% To do this right we need a feature of e-TeX, \scantokens, +% which we arrange to emulate with a temporary file in ordinary TeX. +\ifx\eTeXversion\undefined + \newwrite\macscribble + \def\scantokens#1{% + \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp + } +\fi + +\def\scanmacro#1{% + \begingroup + \newlinechar`\^^M + \let\xeatspaces\eatspaces + % Undo catcode changes of \startcontents and \doprintindex + % When called from @insertcopying or (short)caption, we need active + % backslash to get it printed correctly. Previously, we had + % \catcode`\\=\other instead. We'll see whether a problem appears + % with macro expansion. --kasal, 19aug04 + \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ + % ... and \example + \spaceisspace + % + % Append \endinput to make sure that TeX does not see the ending newline. + % I've verified that it is necessary both for e-TeX and for ordinary TeX + % --kasal, 29nov03 + \scantokens{#1\endinput}% + \endgroup +} + +\def\scanexp#1{% + \edef\temp{\noexpand\scanmacro{#1}}% + \temp +} + +\newcount\paramno % Count of parameters +\newtoks\macname % Macro name +\newif\ifrecursive % Is it recursive? + +% List of all defined macros in the form +% \definedummyword\macro1\definedummyword\macro2... +% Currently is also contains all @aliases; the list can be split +% if there is a need. +\def\macrolist{} + +% Add the macro to \macrolist +\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} +\def\addtomacrolistxxx#1{% + \toks0 = \expandafter{\macrolist\definedummyword#1}% + \xdef\macrolist{\the\toks0}% +} + +% Utility routines. +% This does \let #1 = #2, with \csnames; that is, +% \let \csname#1\endcsname = \csname#2\endcsname +% (except of course we have to play expansion games). +% +\def\cslet#1#2{% + \expandafter\let + \csname#1\expandafter\endcsname + \csname#2\endcsname +} + +% Trim leading and trailing spaces off a string. +% Concepts from aro-bend problem 15 (see CTAN). +{\catcode`\@=11 +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} +\def\unbrace#1{#1} +\unbrace{\gdef\trim@@@ #1 } #2@{#1} +} + +% Trim a single trailing ^^M off a string. +{\catcode`\^^M=\other \catcode`\Q=3% +\gdef\eatcr #1{\eatcra #1Q^^MQ}% +\gdef\eatcra#1^^MQ{\eatcrb#1Q}% +\gdef\eatcrb#1Q#2Q{#1}% +} + +% Macro bodies are absorbed as an argument in a context where +% all characters are catcode 10, 11 or 12, except \ which is active +% (as in normal texinfo). It is necessary to change the definition of \. + +% Non-ASCII encodings make 8-bit characters active, so un-activate +% them to avoid their expansion. Must do this non-globally, to +% confine the change to the current group. + +% It's necessary to have hard CRs when the macro is executed. This is +% done by making ^^M (\endlinechar) catcode 12 when reading the macro +% body, and then making it the \newlinechar in \scanmacro. + +\def\scanctxt{% + \catcode`\"=\other + \catcode`\+=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\@=\other + \catcode`\^=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\~=\other + \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi +} + +\def\scanargctxt{% + \scanctxt + \catcode`\\=\other + \catcode`\^^M=\other +} + +\def\macrobodyctxt{% + \scanctxt + \catcode`\{=\other + \catcode`\}=\other + \catcode`\^^M=\other + \usembodybackslash +} + +\def\macroargctxt{% + \scanctxt + \catcode`\\=\other +} + +% \mbodybackslash is the definition of \ in @macro bodies. +% It maps \foo\ => \csname macarg.foo\endcsname => #N +% where N is the macro parameter number. +% We define \csname macarg.\endcsname to be \realbackslash, so +% \\ in macro replacement text gets you a backslash. + +{\catcode`@=0 @catcode`@\=@active + @gdef@usembodybackslash{@let\=@mbodybackslash} + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} +} +\expandafter\def\csname macarg.\endcsname{\realbackslash} + +\def\macro{\recursivefalse\parsearg\macroxxx} +\def\rmacro{\recursivetrue\parsearg\macroxxx} + +\def\macroxxx#1{% + \getargs{#1}% now \macname is the macname and \argl the arglist + \ifx\argl\empty % no arguments + \paramno=0% + \else + \expandafter\parsemargdef \argl;% + \fi + \if1\csname ismacro.\the\macname\endcsname + \message{Warning: redefining \the\macname}% + \else + \expandafter\ifx\csname \the\macname\endcsname \relax + \else \errmessage{Macro name \the\macname\space already defined}\fi + \global\cslet{macsave.\the\macname}{\the\macname}% + \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% + \addtomacrolist{\the\macname}% + \fi + \begingroup \macrobodyctxt + \ifrecursive \expandafter\parsermacbody + \else \expandafter\parsemacbody + \fi} + +\parseargdef\unmacro{% + \if1\csname ismacro.#1\endcsname + \global\cslet{#1}{macsave.#1}% + \global\expandafter\let \csname ismacro.#1\endcsname=0% + % Remove the macro name from \macrolist: + \begingroup + \expandafter\let\csname#1\endcsname \relax + \let\definedummyword\unmacrodo + \xdef\macrolist{\macrolist}% + \endgroup + \else + \errmessage{Macro #1 not defined}% + \fi +} + +% Called by \do from \dounmacro on each macro. The idea is to omit any +% macro definitions that have been changed to \relax. +% +\def\unmacrodo#1{% + \ifx #1\relax + % remove this + \else + \noexpand\definedummyword \noexpand#1% + \fi +} + +% This makes use of the obscure feature that if the last token of a +% is #, then the preceding argument is delimited by +% an opening brace, and that opening brace is not consumed. +\def\getargs#1{\getargsxxx#1{}} +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} +\def\getmacname #1 #2\relax{\macname={#1}} +\def\getmacargs#1{\def\argl{#1}} + +% Parse the optional {params} list. Set up \paramno and \paramlist +% so \defmacro knows what to do. Define \macarg.blah for each blah +% in the params list, to be ##N where N is the position in that list. +% That gets used by \mbodybackslash (above). + +% We need to get `macro parameter char #' into several definitions. +% The technique used is stolen from LaTeX: let \hash be something +% unexpandable, insert that wherever you need a #, and then redefine +% it to # just before using the token list produced. +% +% The same technique is used to protect \eatspaces till just before +% the macro is used. + +\def\parsemargdef#1;{\paramno=0\def\paramlist{}% + \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} +\def\parsemargdefxxx#1,{% + \if#1;\let\next=\relax + \else \let\next=\parsemargdefxxx + \advance\paramno by 1% + \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname + {\xeatspaces{\hash\the\paramno}}% + \edef\paramlist{\paramlist\hash\the\paramno,}% + \fi\next} + +% These two commands read recursive and nonrecursive macro bodies. +% (They're different since rec and nonrec macros end differently.) + +\long\def\parsemacbody#1@end macro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% +\long\def\parsermacbody#1@end rmacro% +{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% + +% This defines the macro itself. There are six cases: recursive and +% nonrecursive macros of zero, one, and many arguments. +% Much magic with \expandafter here. +% \xdef is used so that macro definitions will survive the file +% they're defined in; @include reads the file inside a group. +\def\defmacro{% + \let\hash=##% convert placeholders to macro parameter chars + \ifrecursive + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\scanmacro{\temp}}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup\noexpand\scanmacro{\temp}}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{\egroup\noexpand\scanmacro{\temp}}% + \fi + \else + \ifcase\paramno + % 0 + \expandafter\xdef\csname\the\macname\endcsname{% + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \or % 1 + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \noexpand\braceorline + \expandafter\noexpand\csname\the\macname xxx\endcsname}% + \expandafter\xdef\csname\the\macname xxx\endcsname##1{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \else % many + \expandafter\xdef\csname\the\macname\endcsname{% + \bgroup\noexpand\macroargctxt + \expandafter\noexpand\csname\the\macname xx\endcsname}% + \expandafter\xdef\csname\the\macname xx\endcsname##1{% + \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% + \expandafter\expandafter + \expandafter\xdef + \expandafter\expandafter + \csname\the\macname xxx\endcsname + \paramlist{% + \egroup + \noexpand\norecurse{\the\macname}% + \noexpand\scanmacro{\temp}\egroup}% + \fi + \fi} + +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} + +% \braceorline decides whether the next nonwhitespace character is a +% {. If so it reads up to the closing }, if not, it reads the whole +% line. Whatever was read is then fed to the next control sequence +% as an argument (by \parsebrace or \parsearg) +\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} +\def\braceorlinexxx{% + \ifx\nchar\bgroup\else + \expandafter\parsearg + \fi \macnamexxx} + + +% @alias. +% We need some trickery to remove the optional spaces around the equal +% sign. Just make them active and then expand them all to nothing. +\def\alias{\parseargusing\obeyspaces\aliasxxx} +\def\aliasxxx #1{\aliasyyy#1\relax} +\def\aliasyyy #1=#2\relax{% + {% + \expandafter\let\obeyedspace=\empty + \addtomacrolist{#1}% + \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% + }% + \next +} + + +\message{cross references,} + +\newwrite\auxfile +\newif\ifhavexrefs % True if xref values are known. +\newif\ifwarnedxrefs % True if we warned once that they aren't known. + +% @inforef is relatively simple. +\def\inforef #1{\inforefzzz #1,,,,**} +\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, + node \samp{\ignorespaces#1{}}} + +% @node's only job in TeX is to define \lastnode, which is used in +% cross-references. The @node line might or might not have commas, and +% might or might not have spaces before the first comma, like: +% @node foo , bar , ... +% We don't want such trailing spaces in the node name. +% +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} +% +% also remove a trailing comma, in case of something like this: +% @node Help-Cross, , , Cross-refs +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} + +\let\nwnode=\node +\let\lastnode=\empty + +% Write a cross-reference definition for the current node. #1 is the +% type (Ynumbered, Yappendix, Ynothing). +% +\def\donoderef#1{% + \ifx\lastnode\empty\else + \setref{\lastnode}{#1}% + \global\let\lastnode=\empty + \fi +} + +% @anchor{NAME} -- define xref target at arbitrary point. +% +\newcount\savesfregister +% +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} + +% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \lastsection, +% or the anchor name. +% 2) NAME-snt - section number and type, passed as the SNT arg, or +% empty for anchors. +% 3) NAME-pg - the page number. +% +% This is called from \donoderef, \anchor, and \dofloat. In the case of +% floats, there is an additional part, which is not written here: +% 4) NAME-lof - the text as it should appear in a @listoffloats. +% +\def\setref#1#2{% + \pdfmkdest{#1}% + \iflinks + {% + \atdummies % preserve commands, but don't expand them + \edef\writexrdef##1##2{% + \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef + ##1}{##2}}% these are parameters of \writexrdef + }% + \toks0 = \expandafter{\lastsection}% + \immediate \writexrdef{title}{\the\toks0 }% + \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. + \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout + }% + \fi +} + +% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is +% the node name, #2 the name of the Info cross-reference, #3 the printed +% node name, #4 the name of the Info file, #5 the name of the printed +% manual. All but the node name can be omitted. +% +\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} +\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} +\def\ref#1{\xrefX[#1,,,,,,,]} +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup + \unsepspaces + \def\printedmanual{\ignorespaces #5}% + \def\printedrefname{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual\unskip}% + \setbox0=\hbox{\printedrefname\unskip}% + \ifdim \wd0 = 0pt + % No printed node name was explicitly given. + \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax + % Use the node name inside the square brackets. + \def\printedrefname{\ignorespaces #1}% + \else + % Use the actual chapter/section title appear inside + % the square brackets. Use the real section title if we have it. + \ifdim \wd1 > 0pt + % It is in another manual, so we don't have it. + \def\printedrefname{\ignorespaces #1}% + \else + \ifhavexrefs + % We know the real title if we have the xref values. + \def\printedrefname{\refx{#1-title}{}}% + \else + % Otherwise just copy the Info node name. + \def\printedrefname{\ignorespaces #1}% + \fi% + \fi + \fi + \fi + % + % Make link in pdf output. + \ifpdf + {\indexnofonts + \turnoffactive + % This expands tokens, so do it after making catcode changes, so _ + % etc. don't get their TeX definitions. + \getfilename{#4}% + % + % See comments at \activebackslashdouble. + {\activebackslashdouble \xdef\pdfxrefdest{#1}% + \backslashparens\pdfxrefdest}% + % + \leavevmode + \startlink attr{/Border [0 0 0]}% + \ifnum\filenamelength>0 + goto file{\the\filename.pdf} name{\pdfxrefdest}% + \else + goto name{\pdfmkpgn{\pdfxrefdest}}% + \fi + }% + \setcolor{\linkcolor}% + \fi + % + % Float references are printed completely differently: "Figure 1.2" + % instead of "[somenode], p.3". We distinguish them by the + % LABEL-title being set to a magic string. + {% + % Have to otherify everything special to allow the \csname to + % include an _ in the xref name, etc. + \indexnofonts + \turnoffactive + \expandafter\global\expandafter\let\expandafter\Xthisreftitle + \csname XR#1-title\endcsname + }% + \iffloat\Xthisreftitle + % If the user specified the print name (third arg) to the ref, + % print it instead of our usual "Figure 1.2". + \ifdim\wd0 = 0pt + \refx{#1-snt}{}% + \else + \printedrefname + \fi + % + % if the user also gave the printed manual name (fifth arg), append + % "in MANUALNAME". + \ifdim \wd1 > 0pt + \space \putwordin{} \cite{\printedmanual}% + \fi + \else + % node/anchor (non-float) references. + % + % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not + % insert empty discretionaries after hyphens, which means that it will + % not find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, this + % is a loss. Therefore, we give the text of the node name again, so it + % is as if TeX is seeing it for the first time. + \ifdim \wd1 > 0pt + \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% + \else + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % output the `[mynode]' via a macro so it can be overridden. + \xrefprintnodename\printedrefname + % + % But we always want a comma and a space: + ,\space + % + % output the `page 3'. + \turnoffactive \putwordpage\tie\refx{#1-pg}{}% + \fi + \fi + \endlink +\endgroup} + +% This macro is called from \xrefX for the `[nodename]' part of xref +% output. It's a separate macro only so it can be changed more easily, +% since square brackets don't work well in some documents. Particularly +% one that Bob is working on :). +% +\def\xrefprintnodename#1{[#1]} + +% Things referred to by \setref. +% +\def\Ynothing{} +\def\Yomitfromtoc{} +\def\Ynumbered{% + \ifnum\secno=0 + \putwordChapter@tie \the\chapno + \else \ifnum\subsecno=0 + \putwordSection@tie \the\chapno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno + \else + \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} +\def\Yappendix{% + \ifnum\secno=0 + \putwordAppendix@tie @char\the\appendixno{}% + \else \ifnum\subsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno + \else \ifnum\subsubsecno=0 + \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno + \else + \putwordSection@tie + @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno + \fi\fi\fi +} + +% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. +% If its value is nonempty, SUFFIX is output afterward. +% +\def\refx#1#2{% + {% + \indexnofonts + \otherbackslash + \expandafter\global\expandafter\let\expandafter\thisrefX + \csname XR#1\endcsname + }% + \ifx\thisrefX\relax + % If not defined, say something at least. + \angleleft un\-de\-fined\angleright + \iflinks + \ifhavexrefs + \message{\linenumber Undefined cross reference `#1'.}% + \else + \ifwarnedxrefs\else + \global\warnedxrefstrue + \message{Cross reference values unknown; you must run TeX again.}% + \fi + \fi + \fi + \else + % It's defined, so just use it. + \thisrefX + \fi + #2% Output the suffix in any case. +} + +% This is the macro invoked by entries in the aux file. Usually it's +% just a \def (we prepend XR to the control sequence name to avoid +% collisions). But if this is a float type, we have more work to do. +% +\def\xrdef#1#2{% + {% The node name might contain 8-bit characters, which in our current + % implementation are changed to commands like @'e. Don't let these + % mess up the control sequence name. + \indexnofonts + \turnoffactive + \xdef\safexrefname{#1}% + }% + % + \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref + % + % Was that xref control sequence that we just defined for a float? + \expandafter\iffloat\csname XR\safexrefname\endcsname + % it was a float, and we have the (safe) float type in \iffloattype. + \expandafter\let\expandafter\floatlist + \csname floatlist\iffloattype\endcsname + % + % Is this the first time we've seen this float type? + \expandafter\ifx\floatlist\relax + \toks0 = {\do}% yes, so just \do + \else + % had it before, so preserve previous elements in list. + \toks0 = \expandafter{\floatlist\do}% + \fi + % + % Remember this xref in the control sequence \floatlistFLOATTYPE, + % for later use in \listoffloats. + \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 + {\safexrefname}}% + \fi +} + +% Read the last existing aux file, if any. No error if none exists. +% +\def\tryauxfile{% + \openin 1 \jobname.aux + \ifeof 1 \else + \readdatafile{aux}% + \global\havexrefstrue + \fi + \closein 1 +} + +\def\setupdatafile{% + \catcode`\^^@=\other + \catcode`\^^A=\other + \catcode`\^^B=\other + \catcode`\^^C=\other + \catcode`\^^D=\other + \catcode`\^^E=\other + \catcode`\^^F=\other + \catcode`\^^G=\other + \catcode`\^^H=\other + \catcode`\^^K=\other + \catcode`\^^L=\other + \catcode`\^^N=\other + \catcode`\^^P=\other + \catcode`\^^Q=\other + \catcode`\^^R=\other + \catcode`\^^S=\other + \catcode`\^^T=\other + \catcode`\^^U=\other + \catcode`\^^V=\other + \catcode`\^^W=\other + \catcode`\^^X=\other + \catcode`\^^Z=\other + \catcode`\^^[=\other + \catcode`\^^\=\other + \catcode`\^^]=\other + \catcode`\^^^=\other + \catcode`\^^_=\other + % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. + % in xref tags, i.e., node names. But since ^^e4 notation isn't + % supported in the main text, it doesn't seem desirable. Furthermore, + % that is not enough: for node names that actually contain a ^ + % character, we would end up writing a line like this: 'xrdef {'hat + % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first + % argument, and \hat is not an expandable control sequence. It could + % all be worked out, but why? Either we support ^^ or we don't. + % + % The other change necessary for this was to define \auxhat: + % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter + % and then to call \auxhat in \setq. + % + \catcode`\^=\other + % + % Special characters. Should be turned off anyway, but... + \catcode`\~=\other + \catcode`\[=\other + \catcode`\]=\other + \catcode`\"=\other + \catcode`\_=\other + \catcode`\|=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\$=\other + \catcode`\#=\other + \catcode`\&=\other + \catcode`\%=\other + \catcode`+=\other % avoid \+ for paranoia even though we've turned it off + % + % This is to support \ in node names and titles, since the \ + % characters end up in a \csname. It's easier than + % leaving it active and making its active definition an actual \ + % character. What I don't understand is why it works in the *value* + % of the xrdef. Seems like it should be a catcode12 \, and that + % should not typeset properly. But it works, so I'm moving on for + % now. --karl, 15jan04. + \catcode`\\=\other + % + % Make the characters 128-255 be printing characters. + {% + \count1=128 + \def\loop{% + \catcode\count1=\other + \advance\count1 by 1 + \ifnum \count1<256 \loop \fi + }% + }% + % + % @ is our escape character in .aux files, and we need braces. + \catcode`\{=1 + \catcode`\}=2 + \catcode`\@=0 +} + +\def\readdatafile#1{% +\begingroup + \setupdatafile + \input\jobname.#1 +\endgroup} + + +\message{insertions,} +% including footnotes. + +\newcount \footnoteno + +% The trailing space in the following definition for supereject is +% vital for proper filling; pages come out unaligned when you do a +% pagealignmacro call if that space before the closing brace is +% removed. (Generally, numeric constants should always be followed by a +% space to prevent strange expansion errors.) +\def\supereject{\par\penalty -20000\footnoteno =0 } + +% @footnotestyle is meaningful for info output only. +\let\footnotestyle=\comment + +{\catcode `\@=11 +% +% Auto-number footnotes. Otherwise like plain. +\gdef\footnote{% + \let\indent=\ptexindent + \let\noindent=\ptexnoindent + \global\advance\footnoteno by \@ne + \edef\thisfootno{$^{\the\footnoteno}$}% + % + % In case the footnote comes at the end of a sentence, preserve the + % extra spacing after we do the footnote number. + \let\@sf\empty + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi + % + % Remove inadvertent blank space before typesetting the footnote number. + \unskip + \thisfootno\@sf + \dofootnote +}% + +% Don't bother with the trickery in plain.tex to not require the +% footnote text as a parameter. Our footnotes don't need to be so general. +% +% Oh yes, they do; otherwise, @ifset (and anything else that uses +% \parseargline) fails inside footnotes because the tokens are fixed when +% the footnote is read. --karl, 16nov96. +% +\gdef\dofootnote{% + \insert\footins\bgroup + % We want to typeset this text as a normal paragraph, even if the + % footnote reference occurs in (for example) a display environment. + % So reset some parameters. + \hsize=\pagewidth + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z@skip + \rightskip\z@skip + \spaceskip\z@skip + \xspaceskip\z@skip + \parindent\defaultparindent + % + \smallfonts \rm + % + % Because we use hanging indentation in footnotes, a @noindent appears + % to exdent this text, so make it be a no-op. makeinfo does not use + % hanging indentation so @noindent can still be needed within footnote + % text after an @example or the like (not that this is good style). + \let\noindent = \relax + % + % Hang the footnote text off the number. Use \everypar in case the + % footnote extends for more than one paragraph. + \everypar = {\hang}% + \textindent{\thisfootno}% + % + % Don't crash into the line above the footnote text. Since this + % expands into a box, it must come within the paragraph, lest it + % provide a place where TeX can split the footnote. + \footstrut + \futurelet\next\fo@t +} +}%end \catcode `\@=11 + +% In case a @footnote appears in a vbox, save the footnote text and create +% the real \insert just after the vbox finished. Otherwise, the insertion +% would be lost. +% Similarly, if a @footnote appears inside an alignment, save the footnote +% text to a box and make the \insert when a row of the table is finished. +% And the same can be done for other insert classes. --kasal, 16nov03. + +% Replace the \insert primitive by a cheating macro. +% Deeper inside, just make sure that the saved insertions are not spilled +% out prematurely. +% +\def\startsavinginserts{% + \ifx \insert\ptexinsert + \let\insert\saveinsert + \else + \let\checkinserts\relax + \fi +} + +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. +% +\def\saveinsert#1{% + \edef\next{\noexpand\savetobox \makeSAVEname#1}% + \afterassignment\next + % swallow the left brace + \let\temp = +} +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} + +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} + +\def\placesaveins#1{% + \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname + {\box#1}% +} + +% eat @SAVE -- beware, all of them have catcode \other: +{ + \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) + \gdef\gobblesave @SAVE{} +} + +% initialization: +\def\newsaveins #1{% + \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% + \next +} +\def\newsaveinsX #1{% + \csname newbox\endcsname #1% + \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts + \checksaveins #1}% +} + +% initialize: +\let\checkinserts\empty +\newsaveins\footins +\newsaveins\margin + + +% @image. We use the macros from epsf.tex to support this. +% If epsf.tex is not installed and @image is used, we complain. +% +% Check for and read epsf.tex up front. If we read it only at @image +% time, we might be inside a group, and then its definitions would get +% undone and the next image would fail. +\openin 1 = epsf.tex +\ifeof 1 \else + % Do not bother showing banner with epsf.tex v2.7k (available in + % doc/epsf.tex and on ctan). + \def\epsfannounce{\toks0 = }% + \input epsf.tex +\fi +\closein 1 +% +% We will only complain once about lack of epsf.tex. +\newif\ifwarnednoepsf +\newhelp\noepsfhelp{epsf.tex must be installed for images to + work. It is also included in the Texinfo distribution, or you can get + it from ftp://tug.org/tex/epsf.tex.} +% +\def\image#1{% + \ifx\epsfbox\undefined + \ifwarnednoepsf \else + \errhelp = \noepsfhelp + \errmessage{epsf.tex not found, images will be ignored}% + \global\warnednoepsftrue + \fi + \else + \imagexxx #1,,,,,\finish + \fi +} +% +% Arguments to @image: +% #1 is (mandatory) image filename; we tack on .eps extension. +% #2 is (optional) width, #3 is (optional) height. +% #4 is (ignored optional) html alt text. +% #5 is (ignored optional) extension. +% #6 is just the usual extra ignored arg for parsing this stuff. +\newif\ifimagevmode +\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup + \catcode`\^^M = 5 % in case we're inside an example + \normalturnoffactive % allow _ et al. in names + % If the image is by itself, center it. + \ifvmode + \imagevmodetrue + \nobreak\medskip + % Usually we'll have text after the image which will insert + % \parskip glue, so insert it here too to equalize the space + % above and below. + \nobreak\vskip\parskip + \nobreak + \fi + % + % Leave vertical mode so that indentation from an enclosing + % environment such as @quotation is respected. On the other hand, if + % it's at the top level, we don't want the normal paragraph indentation. + \noindent + % + % Output the image. + \ifpdf + \dopdfimage{#1}{#2}{#3}% + \else + % \epsfbox itself resets \epsf?size at each figure. + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi + \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi + \epsfbox{#1.eps}% + \fi + % + \ifimagevmode \medskip \fi % space after the standalone image +\endgroup} + + +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, +% etc. We don't actually implement floating yet, we always include the +% float "here". But it seemed the best name for the future. +% +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} + +% There may be a space before second and/or third parameter; delete it. +\def\eatcommaspace#1, {#1,} + +% #1 is the optional FLOATTYPE, the text label for this float, typically +% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, +% this float will not be numbered and cannot be referred to. +% +% #2 is the optional xref label. Also must be present for the float to +% be referable. +% +% #3 is the optional positioning argument; for now, it is ignored. It +% will somehow specify the positions allowed to float to (here, top, bottom). +% +% We keep a separate counter for each FLOATTYPE, which we reset at each +% chapter-level command. +\let\resetallfloatnos=\empty +% +\def\dofloat#1,#2,#3,#4\finish{% + \let\thiscaption=\empty + \let\thisshortcaption=\empty + % + % don't lose footnotes inside @float. + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \startsavinginserts + % + % We can't be used inside a paragraph. + \par + % + \vtop\bgroup + \def\floattype{#1}% + \def\floatlabel{#2}% + \def\floatloc{#3}% we do nothing with this yet. + % + \ifx\floattype\empty + \let\safefloattype=\empty + \else + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + \fi + % + % If label is given but no type, we handle that as the empty type. + \ifx\floatlabel\empty \else + % We want each FLOATTYPE to be numbered separately (Figure 1, + % Table 1, Figure 2, ...). (And if no label, no number.) + % + \expandafter\getfloatno\csname\safefloattype floatno\endcsname + \global\advance\floatno by 1 + % + {% + % This magic value for \lastsection is output by \setref as the + % XREFLABEL-title value. \xrefX uses it to distinguish float + % labels (which have a completely different output format) from + % node and anchor labels. And \xrdef uses it to construct the + % lists of floats. + % + \edef\lastsection{\floatmagic=\safefloattype}% + \setref{\floatlabel}{Yfloat}% + }% + \fi + % + % start with \parskip glue, I guess. + \vskip\parskip + % + % Don't suppress indentation if a float happens to start a section. + \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption: Foo 1.1 +% @float Foo & @caption{Cap}: Foo: Cap +% @float Foo & no caption: Foo +% @float ,lbl & Caption{Cap}: 1.1: Cap +% @float ,lbl & no caption: 1.1 +% @float & @caption{Cap}: Cap +% @float & no caption: +% +\def\Efloat{% + \let\floatident = \empty + % + % In all cases, if we have a float type, it comes first. + \ifx\floattype\empty \else \def\floatident{\floattype}\fi + % + % If we have an xref label, the number comes next. + \ifx\floatlabel\empty \else + \ifx\floattype\empty \else % if also had float type, need tie first. + \appendtomacro\floatident{\tie}% + \fi + % the number. + \appendtomacro\floatident{\chaplevelprefix\the\floatno}% + \fi + % + % Start the printed caption with what we've constructed in + % \floatident, but keep it separate; we need \floatident again. + \let\captionline = \floatident + % + \ifx\thiscaption\empty \else + \ifx\floatident\empty \else + \appendtomacro\captionline{: }% had ident, so need a colon between + \fi + % + % caption text. + \appendtomacro\captionline{\scanexp\thiscaption}% + \fi + % + % If we have anything to print, print it, with space before. + % Eventually this needs to become an \insert. + \ifx\captionline\empty \else + \vskip.5\parskip + \captionline + % + % Space below caption. + \vskip\parskip + \fi + % + % If have an xref label, write the list of floats info. Do this + % after the caption, to avoid chance of it being a breakpoint. + \ifx\floatlabel\empty \else + % Write the text that goes in the lof to the aux file as + % \floatlabel-lof. Besides \floatident, we include the short + % caption if specified, else the full caption if specified, else nothing. + {% + \atdummies + % + % since we read the caption text in the macro world, where ^^M + % is turned into a normal character, we have to scan it back, so + % we don't write the literal three characters "^^M" into the aux file. + \scanexp{% + \xdef\noexpand\gtemp{% + \ifx\thisshortcaption\empty + \thiscaption + \else + \thisshortcaption + \fi + }% + }% + \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident + \ifx\gtemp\empty \else : \gtemp \fi}}% + }% + \fi + \egroup % end of \vtop + % + % place the captured inserts + % + % BEWARE: when the floats start floating, we have to issue warning + % whenever an insert appears inside a float which could possibly + % float. --kasal, 26may04 + % + \checkinserts +} + +% Append the tokens #2 to the definition of macro #1, not expanding either. +% +\def\appendtomacro#1#2{% + \expandafter\def\expandafter#1\expandafter{#1#2}% +} + +% @caption, @shortcaption +% +\def\caption{\docaption\thiscaption} +\def\shortcaption{\docaption\thisshortcaption} +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} +\def\defcaption#1#2{\egroup \def#1{#2}} + +% The parameter is the control sequence identifying the counter we are +% going to use. Create it if it doesn't exist and assign it to \floatno. +\def\getfloatno#1{% + \ifx#1\relax + % Haven't seen this figure type before. + \csname newcount\endcsname #1% + % + % Remember to reset this floatno at the next chap. + \expandafter\gdef\expandafter\resetallfloatnos + \expandafter{\resetallfloatnos #1=0 }% + \fi + \let\floatno#1% +} + +% \setref calls this to get the XREFLABEL-snt value. We want an @xref +% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we +% first read the @float command. +% +\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% + +% Magic string used for the XREFLABEL-title value, so \xrefX can +% distinguish floats from other xref types. +\def\floatmagic{!!float!!} + +% #1 is the control sequence we are passed; we expand into a conditional +% which is true if #1 represents a float ref. That is, the magic +% \lastsection value which we \setref above. +% +\def\iffloat#1{\expandafter\doiffloat#1==\finish} +% +% #1 is (maybe) the \floatmagic string. If so, #2 will be the +% (safe) float type for this float. We set \iffloattype to #2. +% +\def\doiffloat#1=#2=#3\finish{% + \def\temp{#1}% + \def\iffloattype{#2}% + \ifx\temp\floatmagic +} + +% @listoffloats FLOATTYPE - print a list of floats like a table of contents. +% +\parseargdef\listoffloats{% + \def\floattype{#1}% floattype + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + % + % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. + \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax + \ifhavexrefs + % if the user said @listoffloats foo but never @float foo. + \message{\linenumber No `\safefloattype' floats to list.}% + \fi + \else + \begingroup + \leftskip=\tocindent % indent these entries like a toc + \let\do=\listoffloatsdo + \csname floatlist\safefloattype\endcsname + \endgroup + \fi +} + +% This is called on each entry in a list of floats. We're passed the +% xref label, in the form LABEL-title, which is how we save it in the +% aux file. We strip off the -title and look up \XRLABEL-lof, which +% has the text we're supposed to typeset here. +% +% Figures without xref labels will not be included in the list (since +% they won't appear in the aux file). +% +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} +\def\listoffloatsdoentry#1-title\finish{{% + % Can't fully expand XR#1-lof because it can contain anything. Just + % pass the control sequence. On the other hand, XR#1-pg is just the + % page number, and we want to fully expand that so we can get a link + % in pdf output. + \toksA = \expandafter{\csname XR#1-lof\endcsname}% + % + % use the same \entry macro we use to generate the TOC and index. + \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% + \writeentry +}} + + +\message{localization,} + +% @documentlanguage is usually given very early, just after +% @setfilename. If done too late, it may not override everything +% properly. Single argument is the language (de) or locale (de_DE) +% abbreviation. It would be nice if we could set up a hyphenation file. +% +{ + \catcode`\_ = \active + \globaldefs=1 +\parseargdef\documentlanguage{\begingroup + \let_=\normalunderscore % normal _ character for filenames + \tex % read txi-??.tex file in plain TeX. + % Read the file by the name they passed if it exists. + \openin 1 txi-#1.tex + \ifeof 1 + \documentlanguagetrywithoutunderscore{#1_\finish}% + \else + \input txi-#1.tex + \fi + \closein 1 + \endgroup +\endgroup} +} +% +% If they passed de_DE, and txi-de_DE.tex doesn't exist, +% try txi-de.tex. +% +\def\documentlanguagetrywithoutunderscore#1_#2\finish{% + \openin 1 txi-#1.tex + \ifeof 1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \else + \input txi-#1.tex + \fi + \closein 1 +} +% +\newhelp\nolanghelp{The given language definition file cannot be found or +is empty. Maybe you need to install it? In the current directory +should work if nowhere else does.} + +% Set the catcode of characters 128 through 255 to the specified number. +% +\def\setnonasciicharscatcode#1{% + \count255=128 + \loop\ifnum\count255<256 + \global\catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +\def\setnonasciicharscatcodenonglobal#1{% + \count255=128 + \loop\ifnum\count255<256 + \catcode\count255=#1\relax + \advance\count255 by 1 + \repeat +} + +% @documentencoding sets the definition of non-ASCII characters +% according to the specified encoding. +% +\parseargdef\documentencoding{% + % Encoding being declared for the document. + \def\declaredencoding{\csname #1.enc\endcsname}% + % + % Supported encodings: names converted to tokens in order to be able + % to compare them with \ifx. + \def\ascii{\csname US-ASCII.enc\endcsname}% + \def\latnine{\csname ISO-8859-15.enc\endcsname}% + \def\latone{\csname ISO-8859-1.enc\endcsname}% + \def\lattwo{\csname ISO-8859-2.enc\endcsname}% + \def\utfeight{\csname UTF-8.enc\endcsname}% + % + \ifx \declaredencoding \ascii + \asciichardefs + % + \else \ifx \declaredencoding \lattwo + \setnonasciicharscatcode\active + \lattwochardefs + % + \else \ifx \declaredencoding \latone + \setnonasciicharscatcode\active + \latonechardefs + % + \else \ifx \declaredencoding \latnine + \setnonasciicharscatcode\active + \latninechardefs + % + \else \ifx \declaredencoding \utfeight + \setnonasciicharscatcode\active + \utfeightchardefs + % + \else + \message{Unknown document encoding #1, ignoring.}% + % + \fi % utfeight + \fi % latnine + \fi % latone + \fi % lattwo + \fi % ascii +} + +% A message to be logged when using a character that isn't available +% the default font encoding (OT1). +% +\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} + +% Take account of \c (plain) vs. \, (Texinfo) difference. +\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} + +% First, make active non-ASCII characters in order for them to be +% correctly categorized when TeX reads the replacement text of +% macros containing the character definitions. +\setnonasciicharscatcode\active +% +% Latin1 (ISO-8859-1) character definitions. +\def\latonechardefs{% + \gdef^^a0{~} + \gdef^^a1{\exclamdown} + \gdef^^a2{\missingcharmsg{CENT SIGN}} + \gdef^^a3{{\pounds}} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\missingcharmsg{YEN SIGN}} + \gdef^^a6{\missingcharmsg{BROKEN BAR}} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\copyright} + \gdef^^aa{\ordf} + \gdef^^ab{\missingcharmsg{LEFT-POINTING DOUBLE ANGLE QUOTATION MARK}} + \gdef^^ac{$\lnot$} + \gdef^^ad{\-} + \gdef^^ae{\registeredsymbol} + \gdef^^af{\={}} + % + \gdef^^b0{\textdegree} + \gdef^^b1{$\pm$} + \gdef^^b2{$^2$} + \gdef^^b3{$^3$} + \gdef^^b4{\'{}} + \gdef^^b5{$\mu$} + \gdef^^b6{\P} + % + \gdef^^b7{$^.$} + \gdef^^b8{\cedilla\ } + \gdef^^b9{$^1$} + \gdef^^ba{\ordm} + % + \gdef^^bb{\missingcharmsg{RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK}} + \gdef^^bc{$1\over4$} + \gdef^^bd{$1\over2$} + \gdef^^be{$3\over4$} + \gdef^^bf{\questiondown} + % + \gdef^^c0{\`A} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\~A} + \gdef^^c4{\"A} + \gdef^^c5{\ringaccent A} + \gdef^^c6{\AE} + \gdef^^c7{\cedilla C} + \gdef^^c8{\`E} + \gdef^^c9{\'E} + \gdef^^ca{\^E} + \gdef^^cb{\"E} + \gdef^^cc{\`I} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\"I} + % + \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER ETH}} + \gdef^^d1{\~N} + \gdef^^d2{\`O} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\~O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\O} + \gdef^^d9{\`U} + \gdef^^da{\'U} + \gdef^^db{\^U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\missingcharmsg{LATIN CAPITAL LETTER THORN}} + \gdef^^df{\ss} + % + \gdef^^e0{\`a} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\~a} + \gdef^^e4{\"a} + \gdef^^e5{\ringaccent a} + \gdef^^e6{\ae} + \gdef^^e7{\cedilla c} + \gdef^^e8{\`e} + \gdef^^e9{\'e} + \gdef^^ea{\^e} + \gdef^^eb{\"e} + \gdef^^ec{\`{\dotless i}} + \gdef^^ed{\'{\dotless i}} + \gdef^^ee{\^{\dotless i}} + \gdef^^ef{\"{\dotless i}} + % + \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER ETH}} + \gdef^^f1{\~n} + \gdef^^f2{\`o} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\~o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\o} + \gdef^^f9{\`u} + \gdef^^fa{\'u} + \gdef^^fb{\^u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\missingcharmsg{LATIN SMALL LETTER THORN}} + \gdef^^ff{\"y} +} + +% Latin9 (ISO-8859-15) encoding character definitions. +\def\latninechardefs{% + % Encoding is almost identical to Latin1. + \latonechardefs + % + \gdef^^a4{\euro} + \gdef^^a6{\v S} + \gdef^^a8{\v s} + \gdef^^b4{\v Z} + \gdef^^b8{\v z} + \gdef^^bc{\OE} + \gdef^^bd{\oe} + \gdef^^be{\"Y} +} + +% Latin2 (ISO-8859-2) character definitions. +\def\lattwochardefs{% + \gdef^^a0{~} + \gdef^^a1{\missingcharmsg{LATIN CAPITAL LETTER A WITH OGONEK}} + \gdef^^a2{\u{}} + \gdef^^a3{\L} + \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} + \gdef^^a5{\v L} + \gdef^^a6{\'S} + \gdef^^a7{\S} + \gdef^^a8{\"{}} + \gdef^^a9{\v S} + \gdef^^aa{\cedilla S} + \gdef^^ab{\v T} + \gdef^^ac{\'Z} + \gdef^^ad{\-} + \gdef^^ae{\v Z} + \gdef^^af{\dotaccent Z} + % + \gdef^^b0{\textdegree} + \gdef^^b1{\missingcharmsg{LATIN SMALL LETTER A WITH OGONEK}} + \gdef^^b2{\missingcharmsg{OGONEK}} + \gdef^^b3{\l} + \gdef^^b4{\'{}} + \gdef^^b5{\v l} + \gdef^^b6{\'s} + \gdef^^b7{\v{}} + \gdef^^b8{\cedilla\ } + \gdef^^b9{\v s} + \gdef^^ba{\cedilla s} + \gdef^^bb{\v t} + \gdef^^bc{\'z} + \gdef^^bd{\H{}} + \gdef^^be{\v z} + \gdef^^bf{\dotaccent z} + % + \gdef^^c0{\'R} + \gdef^^c1{\'A} + \gdef^^c2{\^A} + \gdef^^c3{\u A} + \gdef^^c4{\"A} + \gdef^^c5{\'L} + \gdef^^c6{\'C} + \gdef^^c7{\cedilla C} + \gdef^^c8{\v C} + \gdef^^c9{\'E} + \gdef^^ca{\missingcharmsg{LATIN CAPITAL LETTER E WITH OGONEK}} + \gdef^^cb{\"E} + \gdef^^cc{\v E} + \gdef^^cd{\'I} + \gdef^^ce{\^I} + \gdef^^cf{\v D} + % + \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}} + \gdef^^d1{\'N} + \gdef^^d2{\v N} + \gdef^^d3{\'O} + \gdef^^d4{\^O} + \gdef^^d5{\H O} + \gdef^^d6{\"O} + \gdef^^d7{$\times$} + \gdef^^d8{\v R} + \gdef^^d9{\ringaccent U} + \gdef^^da{\'U} + \gdef^^db{\H U} + \gdef^^dc{\"U} + \gdef^^dd{\'Y} + \gdef^^de{\cedilla T} + \gdef^^df{\ss} + % + \gdef^^e0{\'r} + \gdef^^e1{\'a} + \gdef^^e2{\^a} + \gdef^^e3{\u a} + \gdef^^e4{\"a} + \gdef^^e5{\'l} + \gdef^^e6{\'c} + \gdef^^e7{\cedilla c} + \gdef^^e8{\v c} + \gdef^^e9{\'e} + \gdef^^ea{\missingcharmsg{LATIN SMALL LETTER E WITH OGONEK}} + \gdef^^eb{\"e} + \gdef^^ec{\v e} + \gdef^^ed{\'\i} + \gdef^^ee{\^\i} + \gdef^^ef{\v d} + % + \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}} + \gdef^^f1{\'n} + \gdef^^f2{\v n} + \gdef^^f3{\'o} + \gdef^^f4{\^o} + \gdef^^f5{\H o} + \gdef^^f6{\"o} + \gdef^^f7{$\div$} + \gdef^^f8{\v r} + \gdef^^f9{\ringaccent u} + \gdef^^fa{\'u} + \gdef^^fb{\H u} + \gdef^^fc{\"u} + \gdef^^fd{\'y} + \gdef^^fe{\cedilla t} + \gdef^^ff{\dotaccent{}} +} + +% UTF-8 character definitions. +% +% This code to support UTF-8 is based on LaTeX's utf8.def, with some +% changes for Texinfo conventions. It is included here under the GPL by +% permission from Frank Mittelbach and the LaTeX team. +% +\newcount\countUTFx +\newcount\countUTFy +\newcount\countUTFz + +\gdef\UTFviiiTwoOctets#1#2{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\endcsname} +% +\gdef\UTFviiiThreeOctets#1#2#3{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} +% +\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter + \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} + +\gdef\UTFviiiDefined#1{% + \ifx #1\relax + \message{\linenumber Unicode char \string #1 not defined for Texinfo}% + \else + \expandafter #1% + \fi +} + +\begingroup + \catcode`\~13 + \catcode`\"12 + + \def\UTFviiiLoop{% + \global\catcode\countUTFx\active + \uccode`\~\countUTFx + \uppercase\expandafter{\UTFviiiTmp}% + \advance\countUTFx by 1 + \ifnum\countUTFx < \countUTFy + \expandafter\UTFviiiLoop + \fi} + + \countUTFx = "C2 + \countUTFy = "E0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiTwoOctets\string~}} + \UTFviiiLoop + + \countUTFx = "E0 + \countUTFy = "F0 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiThreeOctets\string~}} + \UTFviiiLoop + + \countUTFx = "F0 + \countUTFy = "F4 + \def\UTFviiiTmp{% + \xdef~{\noexpand\UTFviiiFourOctets\string~}} + \UTFviiiLoop +\endgroup + +\begingroup + \catcode`\"=12 + \catcode`\<=12 + \catcode`\.=12 + \catcode`\,=12 + \catcode`\;=12 + \catcode`\!=12 + \catcode`\~=13 + + \gdef\DeclareUnicodeCharacter#1#2{% + \countUTFz = "#1\relax + \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% + \begingroup + \parseXMLCharref + \def\UTFviiiTwoOctets##1##2{% + \csname u8:##1\string ##2\endcsname}% + \def\UTFviiiThreeOctets##1##2##3{% + \csname u8:##1\string ##2\string ##3\endcsname}% + \def\UTFviiiFourOctets##1##2##3##4{% + \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \gdef\UTFviiiTmp{#2}% + \endgroup} + + \gdef\parseXMLCharref{% + \ifnum\countUTFz < "A0\relax + \errhelp = \EMsimple + \errmessage{Cannot define Unicode char value < 00A0}% + \else\ifnum\countUTFz < "800\relax + \parseUTFviiiA,% + \parseUTFviiiB C\UTFviiiTwoOctets.,% + \else\ifnum\countUTFz < "10000\relax + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% + \else + \parseUTFviiiA;% + \parseUTFviiiA,% + \parseUTFviiiA!% + \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% + \fi\fi\fi + } + + \gdef\parseUTFviiiA#1{% + \countUTFx = \countUTFz + \divide\countUTFz by 64 + \countUTFy = \countUTFz + \multiply\countUTFz by 64 + \advance\countUTFx by -\countUTFz + \advance\countUTFx by 128 + \uccode `#1\countUTFx + \countUTFz = \countUTFy} + + \gdef\parseUTFviiiB#1#2#3#4{% + \advance\countUTFz by "#10\relax + \uccode `#3\countUTFz + \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} +\endgroup + +\def\utfeightchardefs{% + \DeclareUnicodeCharacter{00A0}{\tie} + \DeclareUnicodeCharacter{00A1}{\exclamdown} + \DeclareUnicodeCharacter{00A3}{\pounds} + \DeclareUnicodeCharacter{00A8}{\"{ }} + \DeclareUnicodeCharacter{00A9}{\copyright} + \DeclareUnicodeCharacter{00AA}{\ordf} + \DeclareUnicodeCharacter{00AB}{\guillemetleft} + \DeclareUnicodeCharacter{00AD}{\-} + \DeclareUnicodeCharacter{00AE}{\registeredsymbol} + \DeclareUnicodeCharacter{00AF}{\={ }} + + \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} + \DeclareUnicodeCharacter{00B4}{\'{ }} + \DeclareUnicodeCharacter{00B8}{\cedilla{ }} + \DeclareUnicodeCharacter{00BA}{\ordm} + \DeclareUnicodeCharacter{00BB}{\guillemetright} + \DeclareUnicodeCharacter{00BF}{\questiondown} + + \DeclareUnicodeCharacter{00C0}{\`A} + \DeclareUnicodeCharacter{00C1}{\'A} + \DeclareUnicodeCharacter{00C2}{\^A} + \DeclareUnicodeCharacter{00C3}{\~A} + \DeclareUnicodeCharacter{00C4}{\"A} + \DeclareUnicodeCharacter{00C5}{\AA} + \DeclareUnicodeCharacter{00C6}{\AE} + \DeclareUnicodeCharacter{00C7}{\cedilla{C}} + \DeclareUnicodeCharacter{00C8}{\`E} + \DeclareUnicodeCharacter{00C9}{\'E} + \DeclareUnicodeCharacter{00CA}{\^E} + \DeclareUnicodeCharacter{00CB}{\"E} + \DeclareUnicodeCharacter{00CC}{\`I} + \DeclareUnicodeCharacter{00CD}{\'I} + \DeclareUnicodeCharacter{00CE}{\^I} + \DeclareUnicodeCharacter{00CF}{\"I} + + \DeclareUnicodeCharacter{00D1}{\~N} + \DeclareUnicodeCharacter{00D2}{\`O} + \DeclareUnicodeCharacter{00D3}{\'O} + \DeclareUnicodeCharacter{00D4}{\^O} + \DeclareUnicodeCharacter{00D5}{\~O} + \DeclareUnicodeCharacter{00D6}{\"O} + \DeclareUnicodeCharacter{00D8}{\O} + \DeclareUnicodeCharacter{00D9}{\`U} + \DeclareUnicodeCharacter{00DA}{\'U} + \DeclareUnicodeCharacter{00DB}{\^U} + \DeclareUnicodeCharacter{00DC}{\"U} + \DeclareUnicodeCharacter{00DD}{\'Y} + \DeclareUnicodeCharacter{00DF}{\ss} + + \DeclareUnicodeCharacter{00E0}{\`a} + \DeclareUnicodeCharacter{00E1}{\'a} + \DeclareUnicodeCharacter{00E2}{\^a} + \DeclareUnicodeCharacter{00E3}{\~a} + \DeclareUnicodeCharacter{00E4}{\"a} + \DeclareUnicodeCharacter{00E5}{\aa} + \DeclareUnicodeCharacter{00E6}{\ae} + \DeclareUnicodeCharacter{00E7}{\cedilla{c}} + \DeclareUnicodeCharacter{00E8}{\`e} + \DeclareUnicodeCharacter{00E9}{\'e} + \DeclareUnicodeCharacter{00EA}{\^e} + \DeclareUnicodeCharacter{00EB}{\"e} + \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} + \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} + \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} + \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} + + \DeclareUnicodeCharacter{00F1}{\~n} + \DeclareUnicodeCharacter{00F2}{\`o} + \DeclareUnicodeCharacter{00F3}{\'o} + \DeclareUnicodeCharacter{00F4}{\^o} + \DeclareUnicodeCharacter{00F5}{\~o} + \DeclareUnicodeCharacter{00F6}{\"o} + \DeclareUnicodeCharacter{00F8}{\o} + \DeclareUnicodeCharacter{00F9}{\`u} + \DeclareUnicodeCharacter{00FA}{\'u} + \DeclareUnicodeCharacter{00FB}{\^u} + \DeclareUnicodeCharacter{00FC}{\"u} + \DeclareUnicodeCharacter{00FD}{\'y} + \DeclareUnicodeCharacter{00FF}{\"y} + + \DeclareUnicodeCharacter{0100}{\=A} + \DeclareUnicodeCharacter{0101}{\=a} + \DeclareUnicodeCharacter{0102}{\u{A}} + \DeclareUnicodeCharacter{0103}{\u{a}} + \DeclareUnicodeCharacter{0106}{\'C} + \DeclareUnicodeCharacter{0107}{\'c} + \DeclareUnicodeCharacter{0108}{\^C} + \DeclareUnicodeCharacter{0109}{\^c} + \DeclareUnicodeCharacter{010A}{\dotaccent{C}} + \DeclareUnicodeCharacter{010B}{\dotaccent{c}} + \DeclareUnicodeCharacter{010C}{\v{C}} + \DeclareUnicodeCharacter{010D}{\v{c}} + \DeclareUnicodeCharacter{010E}{\v{D}} + + \DeclareUnicodeCharacter{0112}{\=E} + \DeclareUnicodeCharacter{0113}{\=e} + \DeclareUnicodeCharacter{0114}{\u{E}} + \DeclareUnicodeCharacter{0115}{\u{e}} + \DeclareUnicodeCharacter{0116}{\dotaccent{E}} + \DeclareUnicodeCharacter{0117}{\dotaccent{e}} + \DeclareUnicodeCharacter{011A}{\v{E}} + \DeclareUnicodeCharacter{011B}{\v{e}} + \DeclareUnicodeCharacter{011C}{\^G} + \DeclareUnicodeCharacter{011D}{\^g} + \DeclareUnicodeCharacter{011E}{\u{G}} + \DeclareUnicodeCharacter{011F}{\u{g}} + + \DeclareUnicodeCharacter{0120}{\dotaccent{G}} + \DeclareUnicodeCharacter{0121}{\dotaccent{g}} + \DeclareUnicodeCharacter{0124}{\^H} + \DeclareUnicodeCharacter{0125}{\^h} + \DeclareUnicodeCharacter{0128}{\~I} + \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} + \DeclareUnicodeCharacter{012A}{\=I} + \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} + \DeclareUnicodeCharacter{012C}{\u{I}} + \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} + + \DeclareUnicodeCharacter{0130}{\dotaccent{I}} + \DeclareUnicodeCharacter{0131}{\dotless{i}} + \DeclareUnicodeCharacter{0132}{IJ} + \DeclareUnicodeCharacter{0133}{ij} + \DeclareUnicodeCharacter{0134}{\^J} + \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} + \DeclareUnicodeCharacter{0139}{\'L} + \DeclareUnicodeCharacter{013A}{\'l} + + \DeclareUnicodeCharacter{0141}{\L} + \DeclareUnicodeCharacter{0142}{\l} + \DeclareUnicodeCharacter{0143}{\'N} + \DeclareUnicodeCharacter{0144}{\'n} + \DeclareUnicodeCharacter{0147}{\v{N}} + \DeclareUnicodeCharacter{0148}{\v{n}} + \DeclareUnicodeCharacter{014C}{\=O} + \DeclareUnicodeCharacter{014D}{\=o} + \DeclareUnicodeCharacter{014E}{\u{O}} + \DeclareUnicodeCharacter{014F}{\u{o}} + + \DeclareUnicodeCharacter{0150}{\H{O}} + \DeclareUnicodeCharacter{0151}{\H{o}} + \DeclareUnicodeCharacter{0152}{\OE} + \DeclareUnicodeCharacter{0153}{\oe} + \DeclareUnicodeCharacter{0154}{\'R} + \DeclareUnicodeCharacter{0155}{\'r} + \DeclareUnicodeCharacter{0158}{\v{R}} + \DeclareUnicodeCharacter{0159}{\v{r}} + \DeclareUnicodeCharacter{015A}{\'S} + \DeclareUnicodeCharacter{015B}{\'s} + \DeclareUnicodeCharacter{015C}{\^S} + \DeclareUnicodeCharacter{015D}{\^s} + \DeclareUnicodeCharacter{015E}{\cedilla{S}} + \DeclareUnicodeCharacter{015F}{\cedilla{s}} + + \DeclareUnicodeCharacter{0160}{\v{S}} + \DeclareUnicodeCharacter{0161}{\v{s}} + \DeclareUnicodeCharacter{0162}{\cedilla{t}} + \DeclareUnicodeCharacter{0163}{\cedilla{T}} + \DeclareUnicodeCharacter{0164}{\v{T}} + + \DeclareUnicodeCharacter{0168}{\~U} + \DeclareUnicodeCharacter{0169}{\~u} + \DeclareUnicodeCharacter{016A}{\=U} + \DeclareUnicodeCharacter{016B}{\=u} + \DeclareUnicodeCharacter{016C}{\u{U}} + \DeclareUnicodeCharacter{016D}{\u{u}} + \DeclareUnicodeCharacter{016E}{\ringaccent{U}} + \DeclareUnicodeCharacter{016F}{\ringaccent{u}} + + \DeclareUnicodeCharacter{0170}{\H{U}} + \DeclareUnicodeCharacter{0171}{\H{u}} + \DeclareUnicodeCharacter{0174}{\^W} + \DeclareUnicodeCharacter{0175}{\^w} + \DeclareUnicodeCharacter{0176}{\^Y} + \DeclareUnicodeCharacter{0177}{\^y} + \DeclareUnicodeCharacter{0178}{\"Y} + \DeclareUnicodeCharacter{0179}{\'Z} + \DeclareUnicodeCharacter{017A}{\'z} + \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} + \DeclareUnicodeCharacter{017C}{\dotaccent{z}} + \DeclareUnicodeCharacter{017D}{\v{Z}} + \DeclareUnicodeCharacter{017E}{\v{z}} + + \DeclareUnicodeCharacter{01C4}{D\v{Z}} + \DeclareUnicodeCharacter{01C5}{D\v{z}} + \DeclareUnicodeCharacter{01C6}{d\v{z}} + \DeclareUnicodeCharacter{01C7}{LJ} + \DeclareUnicodeCharacter{01C8}{Lj} + \DeclareUnicodeCharacter{01C9}{lj} + \DeclareUnicodeCharacter{01CA}{NJ} + \DeclareUnicodeCharacter{01CB}{Nj} + \DeclareUnicodeCharacter{01CC}{nj} + \DeclareUnicodeCharacter{01CD}{\v{A}} + \DeclareUnicodeCharacter{01CE}{\v{a}} + \DeclareUnicodeCharacter{01CF}{\v{I}} + + \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} + \DeclareUnicodeCharacter{01D1}{\v{O}} + \DeclareUnicodeCharacter{01D2}{\v{o}} + \DeclareUnicodeCharacter{01D3}{\v{U}} + \DeclareUnicodeCharacter{01D4}{\v{u}} + + \DeclareUnicodeCharacter{01E2}{\={\AE}} + \DeclareUnicodeCharacter{01E3}{\={\ae}} + \DeclareUnicodeCharacter{01E6}{\v{G}} + \DeclareUnicodeCharacter{01E7}{\v{g}} + \DeclareUnicodeCharacter{01E8}{\v{K}} + \DeclareUnicodeCharacter{01E9}{\v{k}} + + \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} + \DeclareUnicodeCharacter{01F1}{DZ} + \DeclareUnicodeCharacter{01F2}{Dz} + \DeclareUnicodeCharacter{01F3}{dz} + \DeclareUnicodeCharacter{01F4}{\'G} + \DeclareUnicodeCharacter{01F5}{\'g} + \DeclareUnicodeCharacter{01F8}{\`N} + \DeclareUnicodeCharacter{01F9}{\`n} + \DeclareUnicodeCharacter{01FC}{\'{\AE}} + \DeclareUnicodeCharacter{01FD}{\'{\ae}} + \DeclareUnicodeCharacter{01FE}{\'{\O}} + \DeclareUnicodeCharacter{01FF}{\'{\o}} + + \DeclareUnicodeCharacter{021E}{\v{H}} + \DeclareUnicodeCharacter{021F}{\v{h}} + + \DeclareUnicodeCharacter{0226}{\dotaccent{A}} + \DeclareUnicodeCharacter{0227}{\dotaccent{a}} + \DeclareUnicodeCharacter{0228}{\cedilla{E}} + \DeclareUnicodeCharacter{0229}{\cedilla{e}} + \DeclareUnicodeCharacter{022E}{\dotaccent{O}} + \DeclareUnicodeCharacter{022F}{\dotaccent{o}} + + \DeclareUnicodeCharacter{0232}{\=Y} + \DeclareUnicodeCharacter{0233}{\=y} + \DeclareUnicodeCharacter{0237}{\dotless{j}} + + \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} + \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} + \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} + \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} + \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} + \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} + \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} + \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} + \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} + \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} + \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} + \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} + + \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} + \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} + + \DeclareUnicodeCharacter{1E20}{\=G} + \DeclareUnicodeCharacter{1E21}{\=g} + \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} + \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} + \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} + \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} + \DeclareUnicodeCharacter{1E26}{\"H} + \DeclareUnicodeCharacter{1E27}{\"h} + + \DeclareUnicodeCharacter{1E30}{\'K} + \DeclareUnicodeCharacter{1E31}{\'k} + \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} + \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} + \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} + \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} + \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} + \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} + \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} + \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} + \DeclareUnicodeCharacter{1E3E}{\'M} + \DeclareUnicodeCharacter{1E3F}{\'m} + + \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} + \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} + \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} + \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} + \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} + \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} + \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} + \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} + \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} + \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} + + \DeclareUnicodeCharacter{1E54}{\'P} + \DeclareUnicodeCharacter{1E55}{\'p} + \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} + \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} + \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} + \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} + \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} + \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} + \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} + \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} + + \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} + \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} + \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} + \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} + \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} + \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} + \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} + \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} + \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} + \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} + + \DeclareUnicodeCharacter{1E7C}{\~V} + \DeclareUnicodeCharacter{1E7D}{\~v} + \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} + \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} + + \DeclareUnicodeCharacter{1E80}{\`W} + \DeclareUnicodeCharacter{1E81}{\`w} + \DeclareUnicodeCharacter{1E82}{\'W} + \DeclareUnicodeCharacter{1E83}{\'w} + \DeclareUnicodeCharacter{1E84}{\"W} + \DeclareUnicodeCharacter{1E85}{\"w} + \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} + \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} + \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} + \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} + \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} + \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} + \DeclareUnicodeCharacter{1E8C}{\"X} + \DeclareUnicodeCharacter{1E8D}{\"x} + \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} + \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} + + \DeclareUnicodeCharacter{1E90}{\^Z} + \DeclareUnicodeCharacter{1E91}{\^z} + \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} + \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} + \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} + \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} + \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} + \DeclareUnicodeCharacter{1E97}{\"t} + \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} + \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} + + \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} + \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} + + \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} + \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} + \DeclareUnicodeCharacter{1EBC}{\~E} + \DeclareUnicodeCharacter{1EBD}{\~e} + + \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} + \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} + \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} + \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} + + \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} + \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} + + \DeclareUnicodeCharacter{1EF2}{\`Y} + \DeclareUnicodeCharacter{1EF3}{\`y} + \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} + + \DeclareUnicodeCharacter{1EF8}{\~Y} + \DeclareUnicodeCharacter{1EF9}{\~y} + + \DeclareUnicodeCharacter{2013}{--} + \DeclareUnicodeCharacter{2014}{---} + \DeclareUnicodeCharacter{2018}{\quoteleft} + \DeclareUnicodeCharacter{2019}{\quoteright} + \DeclareUnicodeCharacter{201A}{\quotesinglbase} + \DeclareUnicodeCharacter{201C}{\quotedblleft} + \DeclareUnicodeCharacter{201D}{\quotedblright} + \DeclareUnicodeCharacter{201E}{\quotedblbase} + \DeclareUnicodeCharacter{2022}{\bullet} + \DeclareUnicodeCharacter{2026}{\dots} + \DeclareUnicodeCharacter{2039}{\guilsinglleft} + \DeclareUnicodeCharacter{203A}{\guilsinglright} + \DeclareUnicodeCharacter{20AC}{\euro} + + \DeclareUnicodeCharacter{2192}{\expansion} + \DeclareUnicodeCharacter{21D2}{\result} + + \DeclareUnicodeCharacter{2212}{\minus} + \DeclareUnicodeCharacter{2217}{\point} + \DeclareUnicodeCharacter{2261}{\equiv} +}% end of \utfeightchardefs + + +% US-ASCII character definitions. +\def\asciichardefs{% nothing need be done + \relax +} + +% Make non-ASCII characters printable again for compatibility with +% existing Texinfo documents that may use them, even without declaring a +% document encoding. +% +\setnonasciicharscatcode \other + + +\message{formatting,} + +\newdimen\defaultparindent \defaultparindent = 15pt + +\chapheadingskip = 15pt plus 4pt minus 2pt +\secheadingskip = 12pt plus 3pt minus 2pt +\subsecheadingskip = 9pt plus 2pt minus 2pt + +% Prevent underfull vbox error messages. +\vbadness = 10000 + +% Don't be so finicky about underfull hboxes, either. +\hbadness = 2000 + +% Following George Bush, get rid of widows and orphans. +\widowpenalty=10000 +\clubpenalty=10000 + +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're +% using an old version of TeX, don't do anything. We want the amount of +% stretch added to depend on the line length, hence the dependence on +% \hsize. We call this whenever the paper size is set. +% +\def\setemergencystretch{% + \ifx\emergencystretch\thisisundefined + % Allow us to assign to \emergencystretch anyway. + \def\emergencystretch{\dimen0}% + \else + \emergencystretch = .15\hsize + \fi +} + +% Parameters in order: 1) textheight; 2) textwidth; +% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; +% 7) physical page height; 8) physical page width. +% +% We also call \setleading{\textleading}, so the caller should define +% \textleading. The caller should also set \parskip. +% +\def\internalpagesizes#1#2#3#4#5#6#7#8{% + \voffset = #3\relax + \topskip = #6\relax + \splittopskip = \topskip + % + \vsize = #1\relax + \advance\vsize by \topskip + \outervsize = \vsize + \advance\outervsize by 2\topandbottommargin + \pageheight = \vsize + % + \hsize = #2\relax + \outerhsize = \hsize + \advance\outerhsize by 0.5in + \pagewidth = \hsize + % + \normaloffset = #4\relax + \bindingoffset = #5\relax + % + \ifpdf + \pdfpageheight #7\relax + \pdfpagewidth #8\relax + % if we don't reset these, they will remain at "1 true in" of + % whatever layout pdftex was dumped with. + \pdfhorigin = 1 true in + \pdfvorigin = 1 true in + \fi + % + \setleading{\textleading} + % + \parindent = \defaultparindent + \setemergencystretch +} + +% @letterpaper (the default). +\def\letterpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % If page is nothing but text, make it come out even. + \internalpagesizes{607.2pt}{6in}% that's 46 lines + {\voffset}{.25in}% + {\bindingoffset}{36pt}% + {11in}{8.5in}% +}} + +% Use @smallbook to reset parameters for 7x9.25 trim size. +\def\smallbook{{\globaldefs = 1 + \parskip = 2pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.5in}{5in}% + {-.2in}{0in}% + {\bindingoffset}{16pt}% + {9.25in}{7in}% + % + \lispnarrowing = 0.3in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .5cm +}} + +% Use @smallerbook to reset parameters for 6x9 trim size. +% (Just testing, parameters still in flux.) +\def\smallerbook{{\globaldefs = 1 + \parskip = 1.5pt plus 1pt + \textleading = 12pt + % + \internalpagesizes{7.4in}{4.8in}% + {-.2in}{-.4in}% + {0pt}{14pt}% + {9in}{6in}% + % + \lispnarrowing = 0.25in + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = .4cm +}} + +% Use @afourpaper to print on European A4 paper. +\def\afourpaper{{\globaldefs = 1 + \parskip = 3pt plus 2pt minus 1pt + \textleading = 13.2pt + % + % Double-side printing via postscript on Laserjet 4050 + % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. + % To change the settings for a different printer or situation, adjust + % \normaloffset until the front-side and back-side texts align. Then + % do the same for \bindingoffset. You can set these for testing in + % your texinfo source file like this: + % @tex + % \global\normaloffset = -6mm + % \global\bindingoffset = 10mm + % @end tex + \internalpagesizes{673.2pt}{160mm}% that's 51 lines + {\voffset}{\hoffset}% + {\bindingoffset}{44pt}% + {297mm}{210mm}% + % + \tolerance = 700 + \hfuzz = 1pt + \contentsrightmargin = 0pt + \defbodyindent = 5mm +}} + +% Use @afivepaper to print on European A5 paper. +% From romildo@urano.iceb.ufop.br, 2 July 2000. +% He also recommends making @example and @lisp be small. +\def\afivepaper{{\globaldefs = 1 + \parskip = 2pt plus 1pt minus 0.1pt + \textleading = 12.5pt + % + \internalpagesizes{160mm}{120mm}% + {\voffset}{\hoffset}% + {\bindingoffset}{8pt}% + {210mm}{148mm}% + % + \lispnarrowing = 0.2in + \tolerance = 800 + \hfuzz = 1.2pt + \contentsrightmargin = 0pt + \defbodyindent = 2mm + \tableindent = 12mm +}} + +% A specific text layout, 24x15cm overall, intended for A4 paper. +\def\afourlatex{{\globaldefs = 1 + \afourpaper + \internalpagesizes{237mm}{150mm}% + {\voffset}{4.6mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + % + % Must explicitly reset to 0 because we call \afourpaper. + \globaldefs = 0 +}} + +% Use @afourwide to print on A4 paper in landscape format. +\def\afourwide{{\globaldefs = 1 + \afourpaper + \internalpagesizes{241mm}{165mm}% + {\voffset}{-2.95mm}% + {\bindingoffset}{7mm}% + {297mm}{210mm}% + \globaldefs = 0 +}} + +% @pagesizes TEXTHEIGHT[,TEXTWIDTH] +% Perhaps we should allow setting the margins, \topskip, \parskip, +% and/or leading, also. Or perhaps we should compute them somehow. +% +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} +\def\pagesizesyyy#1,#2,#3\finish{{% + \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi + \globaldefs = 1 + % + \parskip = 3pt plus 2pt minus 1pt + \setleading{\textleading}% + % + \dimen0 = #1\relax + \advance\dimen0 by \voffset + % + \dimen2 = \hsize + \advance\dimen2 by \normaloffset + % + \internalpagesizes{#1}{\hsize}% + {\voffset}{\normaloffset}% + {\bindingoffset}{44pt}% + {\dimen0}{\dimen2}% +}} + +% Set default to letter. +% +\letterpaper + + +\message{and turning on texinfo input format.} + +% Define macros to output various characters with catcode for normal text. +\catcode`\"=\other +\catcode`\~=\other +\catcode`\^=\other +\catcode`\_=\other +\catcode`\|=\other +\catcode`\<=\other +\catcode`\>=\other +\catcode`\+=\other +\catcode`\$=\other +\def\normaldoublequote{"} +\def\normaltilde{~} +\def\normalcaret{^} +\def\normalunderscore{_} +\def\normalverticalbar{|} +\def\normalless{<} +\def\normalgreater{>} +\def\normalplus{+} +\def\normaldollar{$}%$ font-lock fix + +% This macro is used to make a character print one way in \tt +% (where it can probably be output as-is), and another way in other fonts, +% where something hairier probably needs to be done. +% +% #1 is what to print if we are indeed using \tt; #2 is what to print +% otherwise. Since all the Computer Modern typewriter fonts have zero +% interword stretch (and shrink), and it is reasonable to expect all +% typewriter fonts to have this, we can check that font parameter. +% +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} + +% Same as above, but check for italic font. Actually this also catches +% non-italic slanted fonts since it is impossible to distinguish them from +% italic fonts. But since this is only used by $ and it uses \sl anyway +% this is not a problem. +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} + +% Turn off all special characters except @ +% (and those which the user can use as if they were ordinary). +% Most of these we simply print from the \tt font, but for some, we can +% use math or other variants that look better in normal text. + +\catcode`\"=\active +\def\activedoublequote{{\tt\char34}} +\let"=\activedoublequote +\catcode`\~=\active +\def~{{\tt\char126}} +\chardef\hat=`\^ +\catcode`\^=\active +\def^{{\tt \hat}} + +\catcode`\_=\active +\def_{\ifusingtt\normalunderscore\_} +\let\realunder=_ +% Subroutine for the previous macro. +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } + +\catcode`\|=\active +\def|{{\tt\char124}} +\chardef \less=`\< +\catcode`\<=\active +\def<{{\tt \less}} +\chardef \gtr=`\> +\catcode`\>=\active +\def>{{\tt \gtr}} +\catcode`\+=\active +\def+{{\tt \char 43}} +\catcode`\$=\active +\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix + +% If a .fmt file is being used, characters that might appear in a file +% name cannot be active until we have parsed the command line. +% So turn them off again, and have \everyjob (or @setfilename) turn them on. +% \otherifyactive is called near the end of this file. +\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} + +% Used sometimes to turn off (effectively) the active characters even after +% parsing them. +\def\turnoffactive{% + \normalturnoffactive + \otherbackslash +} + +\catcode`\@=0 + +% \backslashcurfont outputs one backslash character in current font, +% as in \char`\\. +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work + +% \realbackslash is an actual character `\' with catcode other, and +% \doublebackslash is two of them (for the pdf outlines). +{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} + +% In texinfo, backslash is an active character; it prints the backslash +% in fixed width font. +\catcode`\\=\active +@def@normalbackslash{{@tt@backslashcurfont}} +% On startup, @fixbackslash assigns: +% @let \ = @normalbackslash + +% \rawbackslash defines an active \ to do \backslashcurfont. +% \otherbackslash defines an active \ to be a literal `\' character with +% catcode other. +@gdef@rawbackslash{@let\=@backslashcurfont} +@gdef@otherbackslash{@let\=@realbackslash} + +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of +% the literal character `\'. +% +@def@normalturnoffactive{% + @let\=@normalbackslash + @let"=@normaldoublequote + @let~=@normaltilde + @let^=@normalcaret + @let_=@normalunderscore + @let|=@normalverticalbar + @let<=@normalless + @let>=@normalgreater + @let+=@normalplus + @let$=@normaldollar %$ font-lock fix + @unsepspaces +} + +% Make _ and + \other characters, temporarily. +% This is canceled by @fixbackslash. +@otherifyactive + +% If a .fmt file is being used, we don't want the `\input texinfo' to show up. +% That is what \eatinput is for; after that, the `\' should revert to printing +% a backslash. +% +@gdef@eatinput input texinfo{@fixbackslash} +@global@let\ = @eatinput + +% On the other hand, perhaps the file did not have a `\input texinfo'. Then +% the first `\' in the file would cause an error. This macro tries to fix +% that, assuming it is called before the first `\' could plausibly occur. +% Also turn back on active characters that might appear in the input +% file name, in case not using a pre-dumped format. +% +@gdef@fixbackslash{% + @ifx\@eatinput @let\ = @normalbackslash @fi + @catcode`+=@active + @catcode`@_=@active +} + +% Say @foo, not \foo, in error messages. +@escapechar = `@@ + +% These look ok in all fonts, so just make them not special. +@catcode`@& = @other +@catcode`@# = @other +@catcode`@% = @other + + +@c Local variables: +@c eval: (add-hook 'write-file-hooks 'time-stamp) +@c page-delimiter: "^\\\\message" +@c time-stamp-start: "def\\\\texinfoversion{" +@c time-stamp-format: "%:y-%02m-%02d.%02H" +@c time-stamp-end: "}" +@c End: + +@c vim:sw=2: + +@ignore + arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 +@end ignore diff --git a/build-aux/windres-options b/build-aux/windres-options new file mode 100755 index 00000000..779fddec --- /dev/null +++ b/build-aux/windres-options @@ -0,0 +1,45 @@ +#!/bin/sh +# Usage: windres-options [--escape] PACKAGE_VERSION +# Outputs a set of command-line options for 'windres', containing definitions +# for the preprocessor variables +# PACKAGE_VERSION_STRING +# PACKAGE_VERSION_MAJOR +# PACKAGE_VERSION_MINOR +# PACKAGE_VERSION_SUBMINOR + +escape= +if test "$1" = "--escape"; then + escape=yes + shift +fi +version="$1" # something like 2.0 or 2.17 or 2.17.3 or 2.17.3-pre3 + +sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;} +i\ +0 +q +' +sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;} +i\ +0 +q +' +sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;} +i\ +0 +q +' + +{ + echo "-DPACKAGE_VERSION_STRING=\"${version}\"" + echo "-DPACKAGE_VERSION_MAJOR="`echo "${version}" | sed -n -e "$sed_extract_major"` + echo "-DPACKAGE_VERSION_MINOR="`echo "${version}" | sed -n -e "$sed_extract_minor"` + echo "-DPACKAGE_VERSION_SUBMINOR="`echo "${version}" | sed -n -e "$sed_extract_subminor"` +} | +{ + if test -n "$escape"; then + sed -e 's,\(["\\]\),\\\1,g' + else + cat + fi +} diff --git a/config.h.in b/config.h.in new file mode 100644 index 00000000..ab2effb6 --- /dev/null +++ b/config.h.in @@ -0,0 +1,676 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if the compiler is building for multiple architectures of Apple + platforms at once. */ +#undef AA_APPLE_UNIVERSAL_BUILD + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Define to the number of bits in type 'ptrdiff_t'. */ +#undef BITSIZEOF_PTRDIFF_T + +/* Define to the number of bits in type 'sig_atomic_t'. */ +#undef BITSIZEOF_SIG_ATOMIC_T + +/* Define to the number of bits in type 'size_t'. */ +#undef BITSIZEOF_SIZE_T + +/* Define to the number of bits in type 'wchar_t'. */ +#undef BITSIZEOF_WCHAR_T + +/* Define to the number of bits in type 'wint_t'. */ +#undef BITSIZEOF_WINT_T + +/* Define if you wish *printf() functions that have a safe handling of + non-IEEE-754 'long double' values. */ +#undef CHECK_PRINTF_SAFE + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'double'. */ +#undef DBL_EXPBIT0_BIT + +/* Define as the word index where to find the exponent of 'double'. */ +#undef DBL_EXPBIT0_WORD + +/* Define as the bit index in the word where to find the sign of 'double'. */ +#undef DBL_SIGNBIT_BIT + +/* Define as the word index where to find the sign of 'double'. */ +#undef DBL_SIGNBIT_WORD + +/* Define to 1 if the package shall run at any location in the filesystem. */ +#undef ENABLE_RELOCATABLE + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'float'. */ +#undef FLT_EXPBIT0_BIT + +/* Define as the word index where to find the exponent of 'float'. */ +#undef FLT_EXPBIT0_WORD + +/* Define as the bit index in the word where to find the sign of 'float'. */ +#undef FLT_SIGNBIT_BIT + +/* Define as the word index where to find the sign of 'float'. */ +#undef FLT_SIGNBIT_WORD + +/* Define to 1 when using the gnulib module uninorm/u16-normalize. */ +#undef GNULIB_UNINORM_U16_NORMALIZE + +/* Define to 1 when using the gnulib module uninorm/u32-normalize. */ +#undef GNULIB_UNINORM_U32_NORMALIZE + +/* Define to 1 when using the gnulib module uninorm/u8-normalize. */ +#undef GNULIB_UNINORM_U8_NORMALIZE + +/* Define to 1 when using the gnulib module unistr/u16-mbtouc. */ +#undef GNULIB_UNISTR_U16_MBTOUC + +/* Define to 1 when using the gnulib module unistr/u16-mbtoucr. */ +#undef GNULIB_UNISTR_U16_MBTOUCR + +/* Define to 1 when using the gnulib module unistr/u16-mbtouc-unsafe. */ +#undef GNULIB_UNISTR_U16_MBTOUC_UNSAFE + +/* Define to 1 when using the gnulib module unistr/u16-uctomb. */ +#undef GNULIB_UNISTR_U16_UCTOMB + +/* Define to 1 when using the gnulib module unistr/u32-mbtouc. */ +#undef GNULIB_UNISTR_U32_MBTOUC + +/* Define to 1 when using the gnulib module unistr/u32-mbtoucr. */ +#undef GNULIB_UNISTR_U32_MBTOUCR + +/* Define to 1 when using the gnulib module unistr/u32-mbtouc-unsafe. */ +#undef GNULIB_UNISTR_U32_MBTOUC_UNSAFE + +/* Define to 1 when using the gnulib module unistr/u32-uctomb. */ +#undef GNULIB_UNISTR_U32_UCTOMB + +/* Define to 1 when using the gnulib module unistr/u8-mbtouc. */ +#undef GNULIB_UNISTR_U8_MBTOUC + +/* Define to 1 when using the gnulib module unistr/u8-mbtoucr. */ +#undef GNULIB_UNISTR_U8_MBTOUCR + +/* Define to 1 when using the gnulib module unistr/u8-mbtouc-unsafe. */ +#undef GNULIB_UNISTR_U8_MBTOUC_UNSAFE + +/* Define to 1 when using the gnulib module unistr/u8-uctomb. */ +#undef GNULIB_UNISTR_U8_UCTOMB + +/* Define to 1 if you have 'alloca' after including , a header that + may be supplied by this distribution. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_BP_SYM_H + +/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYCURRENT + +/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + +/* Define if the copysignf function is declared in and available in + libc. */ +#undef HAVE_COPYSIGNF_IN_LIBC + +/* Define if the copysignl function is declared in and available in + libc. */ +#undef HAVE_COPYSIGNL_IN_LIBC + +/* Define if the copysign function is declared in and available in + libc. */ +#undef HAVE_COPYSIGN_IN_LIBC + +/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't. + */ +#undef HAVE_DECL_ALARM + +/* Define to 1 if you have the declaration of `copysign', and to 0 if you + don't. */ +#undef HAVE_DECL_COPYSIGN + +/* Define to 1 if you have the declaration of `copysignf', and to 0 if you + don't. */ +#undef HAVE_DECL_COPYSIGNF + +/* Define to 1 if you have the declaration of `copysignl', and to 0 if you + don't. */ +#undef HAVE_DECL_COPYSIGNL + +/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you + don't. */ +#undef HAVE_DECL_GETC_UNLOCKED + +/* Define to 1 if you have the declaration of `strerror', and to 0 if you + don't. */ +#undef HAVE_DECL_STRERROR + +/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you + don't. */ +#undef HAVE_DECL_STRERROR_R + +/* Define to 1 if you have the declaration of `wctob', and to 0 if you don't. + */ +#undef HAVE_DECL_WCTOB + +/* Define to 1 if you have the declaration of `wcwidth', and to 0 if you + don't. */ +#undef HAVE_DECL_WCWIDTH + +/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you + don't. */ +#undef HAVE_DECL__SNPRINTF + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define if you have the declaration of environ. */ +#undef HAVE_ENVIRON_DECL + +/* Define to 1 if you have the header file. */ +#undef HAVE_ERRNO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_FLOAT_H + +/* Define if the frexpl function is available in libc. */ +#undef HAVE_FREXPL_IN_LIBC + +/* Define if the frexp function is available in libc. */ +#undef HAVE_FREXP_IN_LIBC + +/* Define to 1 if you have the `getpagesize' function. */ +#undef HAVE_GETPAGESIZE + +/* Define if you have the iconv() function and it works. */ +#undef HAVE_ICONV + +/* Define to 1 if you have the header file. */ +#undef HAVE_ICONV_H + +/* Define to 1 if the compiler supports one of the keywords 'inline', + '__inline__', '__inline' and effectively inlines functions marked as such. + */ +#undef HAVE_INLINE + +/* Define if you have the 'intmax_t' type in or . */ +#undef HAVE_INTMAX_T + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define if exists, doesn't clash with , and + declares uintmax_t. */ +#undef HAVE_INTTYPES_H_WITH_UINTMAX + +/* Define if the isnan(double) function is available in libc. */ +#undef HAVE_ISNAND_IN_LIBC + +/* Define if the isnan(float) function is available in libc. */ +#undef HAVE_ISNANF_IN_LIBC + +/* Define if the isnan(long double) function is available in libc. */ +#undef HAVE_ISNANL_IN_LIBC + +/* Define to 1 if you have the `iswcntrl' function. */ +#undef HAVE_ISWCNTRL + +/* Define if you have and nl_langinfo(CODESET). */ +#undef HAVE_LANGINFO_CODESET + +/* Define if your file defines LC_MESSAGES. */ +#undef HAVE_LC_MESSAGES + +/* Define if the ldexpl function is available in libc. */ +#undef HAVE_LDEXPL_IN_LIBC + +/* Define if the ldexp function is available in libc. */ +#undef HAVE_LDEXP_IN_LIBC + +/* Define to 1 if you have the header file. */ +#undef HAVE_LOCALE_H + +/* Define to 1 if the system has the type `long long int'. */ +#undef HAVE_LONG_LONG_INT + +/* Define if the 'malloc' function is POSIX compliant. */ +#undef HAVE_MALLOC_POSIX + +/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including + config.h and . */ +#undef HAVE_MAP_ANONYMOUS + +/* Define to 1 if you have the header file. */ +#undef HAVE_MATH_H + +/* Define to 1 if you have the `mbrtowc' function. */ +#undef HAVE_MBRTOWC + +/* Define to 1 if you have the `mbsinit' function. */ +#undef HAVE_MBSINIT + +/* Define to 1 if declares mbstate_t. */ +#undef HAVE_MBSTATE_T + +/* Define to 1 if you have the `memchr' function. */ +#undef HAVE_MEMCHR + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if defines the MIN and MAX macros. */ +#undef HAVE_MINMAX_IN_LIMITS_H + +/* Define to 1 if defines the MIN and MAX macros. */ +#undef HAVE_MINMAX_IN_SYS_PARAM_H + +/* Define to 1 if you have the `mprotect' function. */ +#undef HAVE_MPROTECT + +/* Define to 1 if you have the `nl_langinfo' function. */ +#undef HAVE_NL_LANGINFO + +/* Define to 1 if you have the header file. */ +#undef HAVE_OS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_RANDOM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SEARCH_H + +/* Define to 1 if you have the `setenv' function. */ +#undef HAVE_SETENV + +/* Define to 1 if you have the `setlocale' function. */ +#undef HAVE_SETLOCALE + +/* Define to 1 if 'sig_atomic_t' is a signed integer type. */ +#undef HAVE_SIGNED_SIG_ATOMIC_T + +/* Define to 1 if 'wchar_t' is a signed integer type. */ +#undef HAVE_SIGNED_WCHAR_T + +/* Define to 1 if 'wint_t' is a signed integer type. */ +#undef HAVE_SIGNED_WINT_T + +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF + +/* Define to 1 if stdbool.h conforms to C99. */ +#undef HAVE_STDBOOL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define if exists, doesn't clash with , and declares + uintmax_t. */ +#undef HAVE_STDINT_H_WITH_UINTMAX + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `stpcpy' function. */ +#undef HAVE_STPCPY + +/* Define to 1 if you have the `strdup' function. */ +#undef HAVE_STRDUP + +/* Define to 1 if you have the `strerror_r' function. */ +#undef HAVE_STRERROR_R + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strnlen' function. */ +#undef HAVE_STRNLEN + +/* Define to 1 if the system has the type `struct random_data'. */ +#undef HAVE_STRUCT_RANDOM_DATA + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_BITYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_MMAN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the `tsearch' function. */ +#undef HAVE_TSEARCH + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `unsetenv' function. */ +#undef HAVE_UNSETENV + +/* Define to 1 if the system has the type `unsigned long long int'. */ +#undef HAVE_UNSIGNED_LONG_LONG_INT + +/* Define to 1 if you have the header file. */ +#undef HAVE_WCHAR_H + +/* Define if you have the 'wchar_t' type. */ +#undef HAVE_WCHAR_T + +/* Define to 1 if you have the `wcrtomb' function. */ +#undef HAVE_WCRTOMB + +/* Define to 1 if you have the `wcslen' function. */ +#undef HAVE_WCSLEN + +/* Define to 1 if you have the `wcsnlen' function. */ +#undef HAVE_WCSNLEN + +/* Define to 1 if you have the `wctob' function. */ +#undef HAVE_WCTOB + +/* Define to 1 if you have the header file. */ +#undef HAVE_WCTYPE_H + +/* Define to 1 if you have the `wcwidth' function. */ +#undef HAVE_WCWIDTH + +/* Define to 1 if you have the header file. */ +#undef HAVE_WINSOCK2_H + +/* Define if you have the 'wint_t' type. */ +#undef HAVE_WINT_T + +/* Define to 1 if the system has the type `_Bool'. */ +#undef HAVE__BOOL + +/* Define as const if the declaration of iconv() needs const. */ +#undef ICONV_CONST + +/* Define to a symbolic name denoting the flavor of iconv_open() + implementation. */ +#undef ICONV_FLAVOR + +/* Define to the value of ${prefix}, as a string. */ +#undef INSTALLPREFIX + +/* Define as the bit index in the word where to find bit 0 of the exponent of + 'long double'. */ +#undef LDBL_EXPBIT0_BIT + +/* Define as the word index where to find the exponent of 'long double'. */ +#undef LDBL_EXPBIT0_WORD + +/* Define as the bit index in the word where to find the sign of 'long + double'. */ +#undef LDBL_SIGNBIT_BIT + +/* Define as the word index where to find the sign of 'long double'. */ +#undef LDBL_SIGNBIT_WORD + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ +#undef MALLOC_0_IS_NONNULL + +/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */ +#undef MAP_ANONYMOUS + +/* Define if the mbrtowc function has the NULL string argument bug. */ +#undef MBRTOWC_NULL_ARG_BUG + +/* Define if the mbrtowc function does not return 0 for a NUL character. */ +#undef MBRTOWC_NUL_RETVAL_BUG + +/* Define if the mbrtowc function returns a wrong return value. */ +#undef MBRTOWC_RETVAL_BUG + +/* Define if the vasnprintf implementation needs special code for the 'a' and + 'A' directives. */ +#undef NEED_PRINTF_DIRECTIVE_A + +/* Define if the vasnprintf implementation needs special code for the 'F' + directive. */ +#undef NEED_PRINTF_DIRECTIVE_F + +/* Define if the vasnprintf implementation needs special code for the 'ls' + directive. */ +#undef NEED_PRINTF_DIRECTIVE_LS + +/* Define if the vasnprintf implementation needs special code for 'double' + arguments. */ +#undef NEED_PRINTF_DOUBLE + +/* Define if the vasnprintf implementation needs special code for surviving + out-of-memory conditions. */ +#undef NEED_PRINTF_ENOMEM + +/* Define if the vasnprintf implementation needs special code for the ' flag. + */ +#undef NEED_PRINTF_FLAG_GROUPING + +/* Define if the vasnprintf implementation needs special code for the '-' + flag. */ +#undef NEED_PRINTF_FLAG_LEFTADJUST + +/* Define if the vasnprintf implementation needs special code for the 0 flag. + */ +#undef NEED_PRINTF_FLAG_ZERO + +/* Define if the vasnprintf implementation needs special code for infinite + 'double' arguments. */ +#undef NEED_PRINTF_INFINITE_DOUBLE + +/* Define if the vasnprintf implementation needs special code for infinite + 'long double' arguments. */ +#undef NEED_PRINTF_INFINITE_LONG_DOUBLE + +/* Define if the vasnprintf implementation needs special code for 'long + double' arguments. */ +#undef NEED_PRINTF_LONG_DOUBLE + +/* Define if the vasnprintf implementation needs special code for supporting + large precisions without arbitrary bounds. */ +#undef NEED_PRINTF_UNBOUNDED_PRECISION + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'ptrdiff_t'. */ +#undef PTRDIFF_T_SUFFIX + +/* Define this to 1 if strerror is broken. */ +#undef REPLACE_STRERROR + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'sig_atomic_t'. */ +#undef SIG_ATOMIC_T_SUFFIX + +/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +#ifndef SIZE_MAX +# undef SIZE_MAX +#endif + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'size_t'. */ +#undef SIZE_T_SUFFIX + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if strerror_r returns char *. */ +#undef STRERROR_R_CHAR_P + +/* Version number of package */ +#undef VERSION + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wchar_t'. */ +#undef WCHAR_T_SUFFIX + +/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type + 'wint_t'. */ +#undef WINT_T_SUFFIX + +/* Define when --enable-shared is used on mingw or Cygwin. */ +#undef WOE32DLL + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + +/* Define to 500 only on HP-UX. */ +#undef _XOPEN_SOURCE + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to long or long long if and don't define. */ +#undef intmax_t + +/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for MacOS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif + +/* Define to a type if does not define. */ +#undef mbstate_t + +/* Define as the type of the result of subtracting two pointers, if the system + doesn't define it. */ +#undef ptrdiff_t + +/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#undef restrict +/* Work around a bug in Sun C++: it does not support _Restrict, even + though the corresponding Sun C compiler does, which causes + "#define restrict _Restrict" in the previous line. Perhaps some future + version of Sun C++ will work with _Restrict; if so, it'll probably + define __RESTRICT, just as Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +#endif + +/* Define to `unsigned int' if does not define. */ +#undef size_t + +/* Define as a marker that can be attached to function parameter declarations + for parameters that are not used. This helps to reduce warnings, such as + from GCC -Wunused-parameter. */ +#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _UNUSED_PARAMETER_ __attribute__ ((__unused__)) +#else +# define _UNUSED_PARAMETER_ +#endif + diff --git a/configure b/configure new file mode 100755 index 00000000..b551c597 --- /dev/null +++ b/configure @@ -0,0 +1,41717 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.63. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell bug-autoconf@gnu.org about your system, + echo including any error possibly output before this message. + echo This can help us improve future autoconf versions. + echo Configuration will now proceed without shell functions. +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="lib/unistring/version.in.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_header_list= +ac_func_list= +ac_subst_vars='gltests_LTLIBOBJS +gltests_LIBOBJS +gl_LTLIBOBJS +gl_LIBOBJS +am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +PERL +DVIPS +TEXI2DVI +HEXVERSION +HAVE_GLOBAL_SYMBOL_PIPE +GLOBAL_SYMBOL_PIPE +NAMESPACING +DLL_VARIABLE +WOE32DLL_FALSE +WOE32DLL_TRUE +LIBTESTS_LIBDEPS +LOCALE_H +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H +NEXT_LOCALE_H +LTLIBINTL +LIBINTL +LOCALE_TR_UTF8 +LOCALE_FR +REPLACE_ISWCNTRL +WCTYPE_H +HAVE_WCTYPE_H +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H +NEXT_WCTYPE_H +HAVE_ISWCNTRL +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H +NEXT_WCHAR_H +HAVE_WCHAR_H +HAVE_WINT_T +HAVE_UNISTD_H +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H +NEXT_UNISTD_H +NEXT_AS_FIRST_DIRECTIVE_STRING_H +NEXT_STRING_H +HAVE_RANDOM_H +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H +NEXT_STDLIB_H +STDINT_H +WINT_T_SUFFIX +WCHAR_T_SUFFIX +SIG_ATOMIC_T_SUFFIX +SIZE_T_SUFFIX +PTRDIFF_T_SUFFIX +HAVE_SIGNED_WINT_T +HAVE_SIGNED_WCHAR_T +HAVE_SIGNED_SIG_ATOMIC_T +BITSIZEOF_WINT_T +BITSIZEOF_WCHAR_T +BITSIZEOF_SIG_ATOMIC_T +BITSIZEOF_SIZE_T +BITSIZEOF_PTRDIFF_T +HAVE_SYS_BITYPES_H +HAVE_SYS_INTTYPES_H +HAVE_STDINT_H +NEXT_AS_FIRST_DIRECTIVE_STDINT_H +NEXT_STDINT_H +HAVE_SYS_TYPES_H +HAVE_INTTYPES_H +HAVE_UNSIGNED_LONG_LONG_INT +HAVE_LONG_LONG_INT +HAVE__BOOL +STDBOOL_H +RELOCATABLE +APPLE_UNIVERSAL_BUILD +REPLACE_STRSIGNAL +REPLACE_STRERROR +REPLACE_STRCASESTR +REPLACE_STRSTR +REPLACE_STRDUP +REPLACE_MEMMEM +REPLACE_MEMCHR +HAVE_STRVERSCMP +HAVE_DECL_STRSIGNAL +HAVE_DECL_STRERROR +HAVE_DECL_STRTOK_R +HAVE_STRCASESTR +HAVE_STRSEP +HAVE_STRPBRK +HAVE_DECL_STRNLEN +HAVE_DECL_STRNDUP +HAVE_STRNDUP +HAVE_DECL_STRDUP +HAVE_STRCHRNUL +HAVE_STPNCPY +HAVE_STPCPY +HAVE_RAWMEMCHR +HAVE_DECL_MEMRCHR +HAVE_MEMPCPY +HAVE_DECL_MEMMEM +GNULIB_STRVERSCMP +GNULIB_STRSIGNAL +GNULIB_STRERROR +GNULIB_MBSTOK_R +GNULIB_MBSSEP +GNULIB_MBSSPN +GNULIB_MBSPBRK +GNULIB_MBSCSPN +GNULIB_MBSCASESTR +GNULIB_MBSPCASECMP +GNULIB_MBSNCASECMP +GNULIB_MBSCASECMP +GNULIB_MBSSTR +GNULIB_MBSRCHR +GNULIB_MBSCHR +GNULIB_MBSNLEN +GNULIB_MBSLEN +GNULIB_STRTOK_R +GNULIB_STRCASESTR +GNULIB_STRSTR +GNULIB_STRSEP +GNULIB_STRPBRK +GNULIB_STRNLEN +GNULIB_STRNDUP +GNULIB_STRDUP +GNULIB_STRCHRNUL +GNULIB_STPNCPY +GNULIB_STPCPY +GNULIB_RAWMEMCHR +GNULIB_MEMRCHR +GNULIB_MEMPCPY +GNULIB_MEMMEM +GNULIB_MEMCHR +LOCALE_FR_UTF8 +LOCALE_ZH_CN +LOCALE_JA +WCHAR_H +REPLACE_WCWIDTH +REPLACE_WCSNRTOMBS +REPLACE_WCSRTOMBS +REPLACE_WCRTOMB +REPLACE_MBSNRTOWCS +REPLACE_MBSRTOWCS +REPLACE_MBRLEN +REPLACE_MBRTOWC +REPLACE_MBSINIT +REPLACE_WCTOB +REPLACE_BTOWC +REPLACE_MBSTATE_T +HAVE_DECL_WCWIDTH +HAVE_DECL_WCTOB +HAVE_WCSNRTOMBS +HAVE_WCSRTOMBS +HAVE_WCRTOMB +HAVE_MBSNRTOWCS +HAVE_MBSRTOWCS +HAVE_MBRLEN +HAVE_MBRTOWC +HAVE_MBSINIT +HAVE_BTOWC +GNULIB_WCWIDTH +GNULIB_WCSNRTOMBS +GNULIB_WCSRTOMBS +GNULIB_WCRTOMB +GNULIB_MBSNRTOWCS +GNULIB_MBSRTOWCS +GNULIB_MBRLEN +GNULIB_MBRTOWC +GNULIB_MBSINIT +GNULIB_WCTOB +GNULIB_BTOWC +NEXT_AS_FIRST_DIRECTIVE_MATH_H +NEXT_MATH_H +VOID_UNSETENV +REPLACE_STRTOD +REPLACE_PUTENV +REPLACE_MKSTEMP +HAVE_DECL_GETLOADAVG +HAVE_UNSETENV +HAVE_SYS_LOADAVG_H +HAVE_STRUCT_RANDOM_DATA +HAVE_STRTOULL +HAVE_STRTOLL +HAVE_STRTOD +HAVE_SETENV +HAVE_RPMATCH +HAVE_RANDOM_R +HAVE_REALLOC_POSIX +HAVE_MKDTEMP +HAVE_GETSUBOPT +HAVE_CALLOC_POSIX +HAVE_ATOLL +GNULIB_UNSETENV +GNULIB_STRTOULL +GNULIB_STRTOLL +GNULIB_STRTOD +GNULIB_SETENV +GNULIB_RPMATCH +GNULIB_RANDOM_R +GNULIB_PUTENV +GNULIB_MKSTEMP +GNULIB_MKDTEMP +GNULIB_GETSUBOPT +GNULIB_GETLOADAVG +GNULIB_ATOLL +GNULIB_CALLOC_POSIX +GNULIB_REALLOC_POSIX +GNULIB_MALLOC_POSIX +HAVE_MALLOC_POSIX +INTL_MACOSX_LIBS +LOCALCHARSET_TESTS_ENVIRONMENT +GLIBC21 +NEXT_AS_FIRST_DIRECTIVE_ICONV_H +NEXT_ICONV_H +ICONV_H +REPLACE_ICONV_UTF +REPLACE_ICONV_OPEN +REPLACE_ICONV +LTLIBICONV +LIBICONV +UNISTD_H_HAVE_WINSOCK2_H +REPLACE_WRITE +REPLACE_LSEEK +REPLACE_LCHOWN +REPLACE_GETPAGESIZE +REPLACE_GETCWD +REPLACE_FCHDIR +REPLACE_CLOSE +REPLACE_CHOWN +HAVE_SYS_PARAM_H +HAVE_OS_H +HAVE_DECL_GETLOGIN_R +HAVE_DECL_ENVIRON +HAVE_SLEEP +HAVE_READLINK +HAVE_LINK +HAVE_GETUSERSHELL +HAVE_GETPAGESIZE +HAVE_GETHOSTNAME +HAVE_GETDTABLESIZE +HAVE_GETDOMAINNAME +HAVE_FTRUNCATE +HAVE_FSYNC +HAVE_EUIDACCESS +HAVE_DUP2 +GNULIB_WRITE +GNULIB_UNISTD_H_SIGPIPE +GNULIB_SLEEP +GNULIB_READLINK +GNULIB_LSEEK +GNULIB_LINK +GNULIB_LCHOWN +GNULIB_GETUSERSHELL +GNULIB_GETPAGESIZE +GNULIB_GETLOGIN_R +GNULIB_GETHOSTNAME +GNULIB_GETDTABLESIZE +GNULIB_GETDOMAINNAME +GNULIB_GETCWD +GNULIB_FTRUNCATE +GNULIB_FSYNC +GNULIB_FCHDIR +GNULIB_EUIDACCESS +GNULIB_ENVIRON +GNULIB_DUP2 +GNULIB_CLOSE +GNULIB_CHOWN +REPLACE_TRUNCL +REPLACE_SIGNBIT_USING_GCC +REPLACE_SIGNBIT +REPLACE_ROUNDL +REPLACE_ROUNDF +REPLACE_ROUND +REPLACE_NAN +REPLACE_LDEXPL +REPLACE_ISNAN +REPLACE_ISINF +REPLACE_ISFINITE +REPLACE_HUGE_VAL +REPLACE_FREXPL +REPLACE_FREXP +REPLACE_FLOORL +REPLACE_FLOORF +REPLACE_CEILL +REPLACE_CEILF +HAVE_DECL_TRUNCF +HAVE_DECL_TRUNC +HAVE_DECL_TANL +HAVE_DECL_SQRTL +HAVE_DECL_SINL +HAVE_DECL_LOGL +HAVE_DECL_LDEXPL +HAVE_DECL_FREXPL +HAVE_DECL_EXPL +HAVE_DECL_COSL +HAVE_DECL_ATANL +HAVE_DECL_ASINL +HAVE_DECL_ACOSL +HAVE_ISNANL +HAVE_ISNAND +HAVE_ISNANF +GNULIB_TRUNCL +GNULIB_TRUNCF +GNULIB_TRUNC +GNULIB_SIGNBIT +GNULIB_ROUNDL +GNULIB_ROUNDF +GNULIB_ROUND +GNULIB_MATHL +GNULIB_LDEXPL +GNULIB_ISNANL +GNULIB_ISNAND +GNULIB_ISNANF +GNULIB_ISNAN +GNULIB_ISINF +GNULIB_ISFINITE +GNULIB_FREXPL +GNULIB_FREXP +GNULIB_FLOORL +GNULIB_FLOORF +GNULIB_CEILL +GNULIB_CEILF +FLOAT_H +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H +NEXT_FLOAT_H +EOVERFLOW_VALUE +EOVERFLOW_HIDDEN +ENOLINK_VALUE +ENOLINK_HIDDEN +EMULTIHOP_VALUE +EMULTIHOP_HIDDEN +ERRNO_H +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H +NEXT_ERRNO_H +PRAGMA_SYSTEM_HEADER +INCLUDE_NEXT_AS_FIRST_DIRECTIVE +INCLUDE_NEXT +ALLOCA_H +ALLOCA +GL_COND_LIBTOOL_FALSE +GL_COND_LIBTOOL_TRUE +WOE32_FALSE +WOE32_TRUE +RC +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +AR +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +OBJDUMP +DLLTOOL +AS +EGREP +GREP +RANLIB +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_rpath +with_libiconv_prefix +enable_relocatable +enable_namespacing +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 + { (exit 1); exit 1; }; } + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { $as_echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { $as_echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 + { (exit 1); exit 1; }; } ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { $as_echo "$as_me: error: working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-rpath do not hardcode runtime library paths + --enable-relocatable install a package that can be moved in the filesystem + --disable-namespacing build a library that exports undesired symbols + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.63 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.63. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test -r "$ac_site_file"; then + { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +ac_header_list="$ac_header_list errno.h" +ac_header_list="$ac_header_list float.h" +ac_header_list="$ac_header_list iconv.h" +ac_header_list="$ac_header_list math.h" +ac_func_list="$ac_func_list mbsinit" +ac_func_list="$ac_func_list mbrtowc" +ac_header_list="$ac_header_list sys/mman.h" +ac_func_list="$ac_func_list mprotect" +gl_printf_safe=yes +ac_header_list="$ac_header_list stdint.h" +ac_header_list="$ac_header_list wchar.h" +ac_header_list="$ac_header_list stdlib.h" +ac_header_list="$ac_header_list string.h" +ac_header_list="$ac_header_list unistd.h" +ac_func_list="$ac_func_list stpcpy" +ac_func_list="$ac_func_list strdup" +ac_func_list="$ac_func_list iswcntrl" +ac_header_list="$ac_header_list wctype.h" +ac_func_list="$ac_func_list wcwidth" +ac_header_list="$ac_header_list locale.h" +ac_func_list="$ac_func_list setenv" +ac_header_list="$ac_header_list sys/socket.h" +ac_func_list="$ac_func_list wctob" +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_aux_dir= +for ac_dir in build-aux "$srcdir"/build-aux; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in build-aux \"$srcdir\"/build-aux" >&5 +$as_echo "$as_me: error: cannot find install-sh or install.sh in build-aux \"$srcdir\"/build-aux" >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +. $srcdir/version.sh + + + + + +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + +done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + { { $as_echo "$as_me:$LINENO: error: unsafe absolute working directory name" >&5 +$as_echo "$as_me: error: unsafe absolute working directory name" >&2;} + { (exit 1); exit 1; }; };; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + { { $as_echo "$as_me:$LINENO: error: unsafe srcdir value: \`$srcdir'" >&5 +$as_echo "$as_me: error: unsafe srcdir value: \`$srcdir'" >&2;} + { (exit 1); exit 1; }; };; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { $as_echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +$as_echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { $as_echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +$as_echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:$LINENO: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=1;; +esac +AM_BACKSLASH='\' + + + + if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + { { $as_echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +$as_echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='' + VERSION='' + + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + PACKAGE=libunistring + + VERSION=$VERSION_NUMBER + + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + + + +ac_config_headers="$ac_config_headers config.h" + + +am__tar='${AMTAR} chof - --owner=root --group=root "$$tardir"' + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:$LINENO: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + +# Provide some information about the compiler. +$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } + fi + fi +fi +{ $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest$ac_cv_exeext +{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:$LINENO: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:$LINENO: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:$LINENO: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:$LINENO: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + +done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done +done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 +$as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} + { (exit 1); exit 1; }; } + +{ $as_echo "$as_me:$LINENO: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +$as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 +$as_echo "$as_me: error: invalid value of canonical build" >&2;} + { (exit 1); exit 1; }; };; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:$LINENO: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 +$as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} + { (exit 1); exit 1; }; } +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 +$as_echo "$as_me: error: invalid value of canonical host" >&2;} + { (exit 1); exit 1; }; };; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test "x$CC" != xcc; then + { $as_echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $as_echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + test -f conftest2.$ac_objext && { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + test -f conftest2.$ac_objext && { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + +cat >>confdefs.h <<\_ACEOF +#define NO_MINUS_C_MINUS_O 1 +_ACEOF + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + + + +{ $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + if test "${ac_cv_header_minix_config_h+set}" = set; then + { $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5 +$as_echo_n "checking for minix/config.h... " >&6; } +if test "${ac_cv_header_minix_config_h+set}" = set; then + $as_echo_n "(cached) " >&6 +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 +$as_echo "$ac_cv_header_minix_config_h" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking minix/config.h usability" >&5 +$as_echo_n "checking minix/config.h usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking minix/config.h presence" >&5 +$as_echo_n "checking minix/config.h presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for minix/config.h" >&5 +$as_echo_n "checking for minix/config.h... " >&6; } +if test "${ac_cv_header_minix_config_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_header_minix_config_h=$ac_header_preproc +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 +$as_echo "$ac_cv_header_minix_config_h" >&6; } + +fi +if test "x$ac_cv_header_minix_config_h" = x""yes; then + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +cat >>confdefs.h <<\_ACEOF +#define _POSIX_SOURCE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define _POSIX_1_SOURCE 2 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define _MINIX 1 +_ACEOF + + fi + + case "$host_os" in + hpux*) + +cat >>confdefs.h <<\_ACEOF +#define _XOPEN_SOURCE 500 +_ACEOF + + ;; + esac + + + + { $as_echo "$as_me:$LINENO: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test "${ac_cv_safe_to_define___extensions__+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_safe_to_define___extensions__=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_safe_to_define___extensions__=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + cat >>confdefs.h <<\_ACEOF +#define __EXTENSIONS__ 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define _ALL_SOURCE 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define _GNU_SOURCE 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define _POSIX_PTHREAD_SEMANTICS 1 +_ACEOF + + cat >>confdefs.h <<\_ACEOF +#define _TANDEM_SOURCE 1 +_ACEOF + + + + + + + + + + + + + # IEEE behaviour is the default on all CPUs except Alpha and SH + # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 + # and the GCC 4.1.2 manual). + case "$host_cpu" in + alpha*) + # On Alpha systems, a compiler option provides the behaviour. + # See the ieee(3) manual page, also available at + # + if test -n "$GCC"; then + # GCC has the option -mieee. + CPPFLAGS="$CPPFLAGS -mieee" + else + # Compaq (ex-DEC) C has the option -ieee. + CPPFLAGS="$CPPFLAGS -ieee" + fi + ;; + sh*) + if test -n "$GCC"; then + # GCC has the option -mieee. + CPPFLAGS="$CPPFLAGS -mieee" + fi + ;; + esac + + + + + + + + + + + + + + + + case "$host_os" in + mingw* | cygwin*) + { $as_echo "$as_me:$LINENO: checking for auto-import of symbols" >&5 +$as_echo_n "checking for auto-import of symbols... " >&6; } + if test "${gl_cv_ld_autoimport+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + gl_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,--disable-auto-import" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_ld_autoimport=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_ld_autoimport=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$gl_save_LDFLAGS" +fi + + { $as_echo "$as_me:$LINENO: result: $gl_cv_ld_autoimport" >&5 +$as_echo "$gl_cv_ld_autoimport" >&6; } + if test $gl_cv_ld_autoimport = yes; then + LDFLAGS="$LDFLAGS -Wl,--disable-auto-import" + fi + ;; + esac + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:$LINENO: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6' +macro_revision='1.3012' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +{ $as_echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + $as_unset ac_script || ac_script= + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable sed could be found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable sed could be found in \$PATH" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done +done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + { { $as_echo "$as_me:$LINENO: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +$as_echo "$as_me: error: no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:$LINENO: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" \ + && { test "$build" = "$host" \ + || { test "$build_os" = cygwin && test "$host_os" = mingw32; }; \ + }; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:5990: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:5993: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:5996: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:$LINENO: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:$LINENO: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:$LINENO: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:$LINENO: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:$LINENO: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:$LINENO: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:$LINENO: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:$LINENO: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:$LINENO: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 7198 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + lt_cv_cc_needs_belf=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + lt_cv_cc_needs_belf=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:$LINENO: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:$LINENO: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:$LINENO: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:$LINENO: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:$LINENO: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + lt_cv_ld_exported_symbols_list=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + lt_cv_ld_exported_symbols_list=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + + +for ac_header in dlfcn.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +# Set options +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:$LINENO: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AS+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:$LINENO: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + enable_dlopen=no + + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL="${CONFIG_SHELL-$SHELL} "'$(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:$LINENO: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:$LINENO: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8865: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:8869: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:9204: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:9208: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:9309: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:9313: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:9364: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:9368: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:$LINENO: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat >conftest.$ac_ext <<_ACEOF +int foo(void) {} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:$LINENO: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\"") >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then + shlibpath_overrides_runpath=yes +fi + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:$LINENO: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:$LINENO: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dl_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + { $as_echo "$as_me:$LINENO: checking for shl_load" >&5 +$as_echo_n "checking for shl_load... " >&6; } +if test "${ac_cv_func_shl_load+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define shl_load to an innocuous variant, in case declares shl_load. + For example, HP-UX 11i declares gettimeofday. */ +#define shl_load innocuous_shl_load + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef shl_load + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_shl_load || defined __stub___shl_load +choke me +#endif + +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_shl_load=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_shl_load=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 +$as_echo "$ac_cv_func_shl_load" >&6; } +if test "x$ac_cv_func_shl_load" = x""yes; then + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dld_shl_load=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_shl_load=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + { $as_echo "$as_me:$LINENO: checking for dlopen" >&5 +$as_echo_n "checking for dlopen... " >&6; } +if test "${ac_cv_func_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define dlopen to an innocuous variant, in case declares dlopen. + For example, HP-UX 11i declares gettimeofday. */ +#define dlopen innocuous_dlopen + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef dlopen + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_dlopen || defined __stub___dlopen +choke me +#endif + +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 +$as_echo "$ac_cv_func_dlopen" >&6; } +if test "x$ac_cv_func_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dl_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dl_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_svld_dlopen=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_svld_dlopen=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_dld_dld_link=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_dld_dld_link=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 12164 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 12260 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:$LINENO: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:$LINENO: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:$LINENO: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:$LINENO: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:$LINENO: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. +set dummy ${ac_tool_prefix}windres; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$RC"; then + ac_cv_prog_RC="$RC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RC="${ac_tool_prefix}windres" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +RC=$ac_cv_prog_RC +if test -n "$RC"; then + { $as_echo "$as_me:$LINENO: result: $RC" >&5 +$as_echo "$RC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RC"; then + ac_ct_RC=$RC + # Extract the first word of "windres", so it can be a program name with args. +set dummy windres; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RC+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RC"; then + ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RC="windres" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RC=$ac_cv_prog_ac_ct_RC +if test -n "$ac_ct_RC"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_RC" >&5 +$as_echo "$ac_ct_RC" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RC" = x; then + RC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RC=$ac_ct_RC + fi +else + RC="$ac_cv_prog_RC" +fi + + + + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +objext_RC=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +compiler_RC=$CC +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + +lt_cv_prog_compiler_c_o_RC=yes + +if test -n "$compiler"; then + : + + + +fi + +GCC=$lt_save_GCC +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +case "$host_os" in + mingw* | cygwin*) is_woe32=yes ;; + *) is_woe32=no ;; +esac + if test $is_woe32 = yes; then + WOE32_TRUE= + WOE32_FALSE='#' +else + WOE32_TRUE='#' + WOE32_FALSE= +fi + + + + + + + + + + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:$LINENO: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if test "${ac_cv_working_alloca_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_working_alloca_h=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_working_alloca_h=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ALLOCA_H 1 +_ACEOF + +fi + +{ $as_echo "$as_me:$LINENO: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if test "${ac_cv_func_alloca_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_alloca_works=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_alloca_works=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ALLOCA 1 +_ACEOF + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + + + + + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +cat >>confdefs.h <<\_ACEOF +#define C_ALLOCA 1 +_ACEOF + + +{ $as_echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if test "${ac_cv_os_cray+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if test "${ac_cv_c_stack_direction+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_c_stack_direction=0 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +find_stack_direction () +{ + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; +} + +int +main () +{ + return find_stack_direction () < 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_stack_direction=1 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_stack_direction=-1 +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } + +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + + + + { $as_echo "$as_me:$LINENO: checking whether the preprocessor supports include_next" >&5 +$as_echo_n "checking whether the preprocessor supports include_next... " >&6; } +if test "${gl_cv_have_include_next+set}" = set; then + $as_echo_n "(cached) " >&6 +else + rm -rf conftestd1a conftestd1b conftestd2 + mkdir conftestd1a conftestd1b conftestd2 + cat < conftestd1a/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include_next +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat < conftestd1b/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include +#include_next +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat < conftestd2/conftest.h +#ifndef DEFINED_IN_CONFTESTD1 +#error "include_next test doesn't work" +#endif +#define DEFINED_IN_CONFTESTD2 +EOF + gl_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" + cat >conftest.$ac_ext <<_ACEOF +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_have_include_next=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" + cat >conftest.$ac_ext <<_ACEOF +#include +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_have_include_next=buggy +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_have_include_next=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CPPFLAGS="$gl_save_CPPFLAGS" + rm -rf conftestd1a conftestd1b conftestd2 + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_have_include_next" >&5 +$as_echo "$gl_cv_have_include_next" >&6; } + PRAGMA_SYSTEM_HEADER= + if test $gl_cv_have_include_next = yes; then + INCLUDE_NEXT=include_next + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + if test -n "$GCC"; then + PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' + fi + else + if test $gl_cv_have_include_next = buggy; then + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + else + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include + fi + fi + + + + + + + + +for ac_header in $ac_header_list +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + { $as_echo "$as_me:$LINENO: checking for complete errno.h" >&5 +$as_echo_n "checking for complete errno.h... " >&6; } +if test "${gl_cv_header_errno_h_complete+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#if !defined ENOMSG +booboo +#endif +#if !defined EIDRM +booboo +#endif +#if !defined ENOLINK +booboo +#endif +#if !defined EPROTO +booboo +#endif +#if !defined EMULTIHOP +booboo +#endif +#if !defined EBADMSG +booboo +#endif +#if !defined EOVERFLOW +booboo +#endif +#if !defined ENOTSUP +booboo +#endif +#if !defined ESTALE +booboo +#endif +#if !defined ECANCELED +booboo +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "booboo" >/dev/null 2>&1; then + gl_cv_header_errno_h_complete=no +else + gl_cv_header_errno_h_complete=yes +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_complete" >&5 +$as_echo "$gl_cv_header_errno_h_complete" >&6; } + if test $gl_cv_header_errno_h_complete = yes; then + ERRNO_H='' + else + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_errno_h='<'errno.h'>' + else + { $as_echo "$as_me:$LINENO: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if test "${gl_cv_next_errno_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_errno_h = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_errno_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/errno.h#{ + s#.*"\(.*/errno.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_errno_h='<'errno.h'>' + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_errno_h" >&5 +$as_echo "$gl_cv_next_errno_h" >&6; } + fi + NEXT_ERRNO_H=$gl_cv_next_errno_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'errno.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_errno_h + fi + NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive + + + + ERRNO_H='errno.h' + fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:$LINENO: checking for EMULTIHOP value" >&5 +$as_echo_n "checking for EMULTIHOP value... " >&6; } +if test "${gl_cv_header_errno_h_EMULTIHOP+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#ifdef EMULTIHOP +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_EMULTIHOP=yes +else + gl_cv_header_errno_h_EMULTIHOP=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EMULTIHOP = no; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +#ifdef EMULTIHOP +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_EMULTIHOP=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((EMULTIHOP) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((EMULTIHOP) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((EMULTIHOP) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((EMULTIHOP) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((EMULTIHOP) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) gl_cv_header_errno_h_EMULTIHOP=$ac_lo;; +'') ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +static long int longval () { return EMULTIHOP; } +static unsigned long int ulongval () { return EMULTIHOP; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if ((EMULTIHOP) < 0) + { + long int i = longval (); + if (i != (EMULTIHOP)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != (EMULTIHOP)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_header_errno_h_EMULTIHOP=`cat conftest.val` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val + fi + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 +$as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; } + case $gl_cv_header_errno_h_EMULTIHOP in + yes | no) + EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= + ;; + *) + EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" + ;; + esac + + + fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:$LINENO: checking for ENOLINK value" >&5 +$as_echo_n "checking for ENOLINK value... " >&6; } +if test "${gl_cv_header_errno_h_ENOLINK+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#ifdef ENOLINK +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_ENOLINK=yes +else + gl_cv_header_errno_h_ENOLINK=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_ENOLINK = no; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +#ifdef ENOLINK +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_ENOLINK=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_ENOLINK = hidden; then + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((ENOLINK) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((ENOLINK) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((ENOLINK) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((ENOLINK) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((ENOLINK) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) gl_cv_header_errno_h_ENOLINK=$ac_lo;; +'') ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +static long int longval () { return ENOLINK; } +static unsigned long int ulongval () { return ENOLINK; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if ((ENOLINK) < 0) + { + long int i = longval (); + if (i != (ENOLINK)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != (ENOLINK)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_header_errno_h_ENOLINK=`cat conftest.val` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val + fi + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_ENOLINK" >&5 +$as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; } + case $gl_cv_header_errno_h_ENOLINK in + yes | no) + ENOLINK_HIDDEN=0; ENOLINK_VALUE= + ;; + *) + ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" + ;; + esac + + + fi + + + if test -n "$ERRNO_H"; then + { $as_echo "$as_me:$LINENO: checking for EOVERFLOW value" >&5 +$as_echo_n "checking for EOVERFLOW value... " >&6; } +if test "${gl_cv_header_errno_h_EOVERFLOW+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#ifdef EOVERFLOW +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_EOVERFLOW=yes +else + gl_cv_header_errno_h_EOVERFLOW=no +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EOVERFLOW = no; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +#ifdef EOVERFLOW +yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then + gl_cv_header_errno_h_EOVERFLOW=hidden +fi +rm -f conftest* + + if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((EOVERFLOW) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((EOVERFLOW) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((EOVERFLOW) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((EOVERFLOW) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +int +main () +{ +static int test_array [1 - 2 * !((EOVERFLOW) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) gl_cv_header_errno_h_EOVERFLOW=$ac_lo;; +'') ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include + +static long int longval () { return EOVERFLOW; } +static unsigned long int ulongval () { return EOVERFLOW; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if ((EOVERFLOW) < 0) + { + long int i = longval (); + if (i != (EOVERFLOW)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != (EOVERFLOW)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_header_errno_h_EOVERFLOW=`cat conftest.val` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val + fi + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 +$as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; } + case $gl_cv_header_errno_h_EOVERFLOW in + yes | no) + EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= + ;; + *) + EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" + ;; + esac + + + fi + + + + + + GNULIB_CEILF=0; + GNULIB_CEILL=0; + GNULIB_FLOORF=0; + GNULIB_FLOORL=0; + GNULIB_FREXP=0; + GNULIB_FREXPL=0; + GNULIB_ISFINITE=0; + GNULIB_ISINF=0; + GNULIB_ISNAN=0; + GNULIB_ISNANF=0; + GNULIB_ISNAND=0; + GNULIB_ISNANL=0; + GNULIB_LDEXPL=0; + GNULIB_MATHL=0; + GNULIB_ROUND=0; + GNULIB_ROUNDF=0; + GNULIB_ROUNDL=0; + GNULIB_SIGNBIT=0; + GNULIB_TRUNC=0; + GNULIB_TRUNCF=0; + GNULIB_TRUNCL=0; + HAVE_ISNANF=1; + HAVE_ISNAND=1; + HAVE_ISNANL=1; + HAVE_DECL_ACOSL=1; + HAVE_DECL_ASINL=1; + HAVE_DECL_ATANL=1; + HAVE_DECL_COSL=1; + HAVE_DECL_EXPL=1; + HAVE_DECL_FREXPL=1; + HAVE_DECL_LDEXPL=1; + HAVE_DECL_LOGL=1; + HAVE_DECL_SINL=1; + HAVE_DECL_SQRTL=1; + HAVE_DECL_TANL=1; + HAVE_DECL_TRUNC=1; + HAVE_DECL_TRUNCF=1; + REPLACE_CEILF=0; + REPLACE_CEILL=0; + REPLACE_FLOORF=0; + REPLACE_FLOORL=0; + REPLACE_FREXP=0; + REPLACE_FREXPL=0; + REPLACE_HUGE_VAL=0; + REPLACE_ISFINITE=0; + REPLACE_ISINF=0; + REPLACE_ISNAN=0; + REPLACE_LDEXPL=0; + REPLACE_NAN=0; + REPLACE_ROUND=0; + REPLACE_ROUNDF=0; + REPLACE_ROUNDL=0; + REPLACE_SIGNBIT=0; + REPLACE_SIGNBIT_USING_GCC=0; + REPLACE_TRUNCL=0; + + + GNULIB_CHOWN=0; + GNULIB_CLOSE=0; + GNULIB_DUP2=0; + GNULIB_ENVIRON=0; + GNULIB_EUIDACCESS=0; + GNULIB_FCHDIR=0; + GNULIB_FSYNC=0; + GNULIB_FTRUNCATE=0; + GNULIB_GETCWD=0; + GNULIB_GETDOMAINNAME=0; + GNULIB_GETDTABLESIZE=0; + GNULIB_GETHOSTNAME=0; + GNULIB_GETLOGIN_R=0; + GNULIB_GETPAGESIZE=0; + GNULIB_GETUSERSHELL=0; + GNULIB_LCHOWN=0; + GNULIB_LINK=0; + GNULIB_LSEEK=0; + GNULIB_READLINK=0; + GNULIB_SLEEP=0; + GNULIB_UNISTD_H_SIGPIPE=0; + GNULIB_WRITE=0; + HAVE_DUP2=1; + HAVE_EUIDACCESS=1; + HAVE_FSYNC=1; + HAVE_FTRUNCATE=1; + HAVE_GETDOMAINNAME=1; + HAVE_GETDTABLESIZE=1; + HAVE_GETHOSTNAME=1; + HAVE_GETPAGESIZE=1; + HAVE_GETUSERSHELL=1; + HAVE_LINK=1; + HAVE_READLINK=1; + HAVE_SLEEP=1; + HAVE_DECL_ENVIRON=1; + HAVE_DECL_GETLOGIN_R=1; + HAVE_OS_H=0; + HAVE_SYS_PARAM_H=0; + REPLACE_CHOWN=0; + REPLACE_CLOSE=0; + REPLACE_FCHDIR=0; + REPLACE_GETCWD=0; + REPLACE_GETPAGESIZE=0; + REPLACE_LCHOWN=0; + REPLACE_LSEEK=0; + REPLACE_WRITE=0; + UNISTD_H_HAVE_WINSOCK2_H=0; + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:$LINENO: checking for ld used by GCC" >&5 +$as_echo_n "checking for ld used by GCC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${acl_cv_path_LD+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:$LINENO: result: $LD" >&5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +$as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +{ $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${acl_cv_prog_gnu_ld+set}" = set; then + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + + { $as_echo "$as_me:$LINENO: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if test "${acl_cv_rpath+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + { $as_echo "$as_me:$LINENO: checking for 64-bit host" >&5 +$as_echo_n "checking for 64-bit host... " >&6; } +if test "${gl_cv_solaris_64bit+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#ifdef _LP64 +sixtyfour bits +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sixtyfour bits" >/dev/null 2>&1; then + gl_cv_solaris_64bit=yes +else + gl_cv_solaris_64bit=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_solaris_64bit" >&5 +$as_echo "$gl_cv_solaris_64bit" >&6; } + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then + withval=$with_libiconv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBICONV= + LTLIBICONV= + INCICONV= + LIBICONV_PREFIX= + HAVE_LIBICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + REPLACE_ICONV=0; + REPLACE_ICONV_OPEN=0; + REPLACE_ICONV_UTF=0; + ICONV_H=''; + + + +{ $as_echo "$as_me:$LINENO: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if test "${ac_cv_c_inline+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_inline=$ac_kw +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + + { $as_echo "$as_me:$LINENO: checking where to find the exponent in a 'float'" >&5 +$as_echo_n "checking where to find the exponent in a 'float'... " >&6; } +if test "${gl_cv_cc_float_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_cc_float_expbit0="word 0 bit 23" +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (float x) +{ + memory_float m; + size_t i; + /* Clear it first, in case + sizeof (float) < sizeof (memory_float). */ + memset (&m, 0, sizeof (memory_float)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25f); + add_to_ored_words (0.5f); + add_to_ored_words (1.0f); + add_to_ored_words (2.0f); + add_to_ored_words (4.0f); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_cc_float_expbit0=`cat conftest.out` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_cc_float_expbit0="unknown" +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + rm -f conftest.out + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_cc_float_expbit0" >&5 +$as_echo "$gl_cv_cc_float_expbit0" >&6; } + case "$gl_cv_cc_float_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + + { $as_echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + + # Check for potential -arch flags. It is not universal unless + # there are some -arch flags. Note that *ppc* also matches + # ppc64. This check is also rather less than ideal. + case "${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" in #( + *-arch*ppc*|*-arch*i386*|*-arch*x86_64*) ac_cv_c_bigendian=universal;; + esac +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then + # Try to guess by grepping values from an object file. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_bigendian=no +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_bigendian=yes +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + cat >>confdefs.h <<\_ACEOF +#define WORDS_BIGENDIAN 1 +_ACEOF +;; #( + no) + ;; #( + universal) + +cat >>confdefs.h <<\_ACEOF +#define AC_APPLE_UNIVERSAL_BUILD 1 +_ACEOF + + ;; #( + *) + { { $as_echo "$as_me:$LINENO: error: unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" >&5 +$as_echo "$as_me: error: unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} + { (exit 1); exit 1; }; } ;; + esac + + + + { $as_echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5 +$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } +if test "${am_cv_langinfo_codeset+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +char* cs = nl_langinfo(CODESET); return !cs; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + am_cv_langinfo_codeset=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + am_cv_langinfo_codeset=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5 +$as_echo "$am_cv_langinfo_codeset" >&6; } + if test $am_cv_langinfo_codeset = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LANGINFO_CODESET 1 +_ACEOF + + fi + +{ $as_echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5 +$as_echo_n "checking whether getc_unlocked is declared... " >&6; } +if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef getc_unlocked + (void) getc_unlocked; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_getc_unlocked=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_getc_unlocked=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5 +$as_echo "$ac_cv_have_decl_getc_unlocked" >&6; } +if test "x$ac_cv_have_decl_getc_unlocked" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETC_UNLOCKED 1 +_ACEOF + + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETC_UNLOCKED 0 +_ACEOF + + +fi + + + + { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5 +$as_echo_n "checking whether we are using the GNU C Library 2.1 or newer... " >&6; } +if test "${ac_cv_gnu_library_2_1+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky GNU user" >/dev/null 2>&1; then + ac_cv_gnu_library_2_1=yes +else + ac_cv_gnu_library_2_1=no +fi +rm -f conftest* + + + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5 +$as_echo "$ac_cv_gnu_library_2_1" >&6; } + + GLIBC21="$ac_cv_gnu_library_2_1" + + + + { $as_echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 +$as_echo_n "checking for LC_MESSAGES... " >&6; } +if test "${gt_cv_val_LC_MESSAGES+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +return LC_MESSAGES + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gt_cv_val_LC_MESSAGES=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_val_LC_MESSAGES=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_val_LC_MESSAGES" >&5 +$as_echo "$gt_cv_val_LC_MESSAGES" >&6; } + if test $gt_cv_val_LC_MESSAGES = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LC_MESSAGES 1 +_ACEOF + + fi + + + { $as_echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gt_cv_func_CFPreferencesCopyAppValue=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_func_CFPreferencesCopyAppValue=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CFPREFERENCESCOPYAPPVALUE 1 +_ACEOF + + fi + { $as_echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5 +$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } +if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +CFLocaleCopyCurrent(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gt_cv_func_CFLocaleCopyCurrent=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_func_CFLocaleCopyCurrent=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CFLOCALECOPYCURRENT 1 +_ACEOF + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + + + { $as_echo "$as_me:$LINENO: checking whether malloc, realloc, calloc are POSIX compliant" >&5 +$as_echo_n "checking whether malloc, realloc, calloc are POSIX compliant... " >&6; } +if test "${gl_cv_func_malloc_posix+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + choke me + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_func_malloc_posix=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_malloc_posix=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_malloc_posix" >&5 +$as_echo "$gl_cv_func_malloc_posix" >&6; } + + + GNULIB_MALLOC_POSIX=0; + GNULIB_REALLOC_POSIX=0; + GNULIB_CALLOC_POSIX=0; + GNULIB_ATOLL=0; + GNULIB_GETLOADAVG=0; + GNULIB_GETSUBOPT=0; + GNULIB_MKDTEMP=0; + GNULIB_MKSTEMP=0; + GNULIB_PUTENV=0; + GNULIB_RANDOM_R=0; + GNULIB_RPMATCH=0; + GNULIB_SETENV=0; + GNULIB_STRTOD=0; + GNULIB_STRTOLL=0; + GNULIB_STRTOULL=0; + GNULIB_UNSETENV=0; + HAVE_ATOLL=1; + HAVE_CALLOC_POSIX=1; + HAVE_GETSUBOPT=1; + HAVE_MALLOC_POSIX=1; + HAVE_MKDTEMP=1; + HAVE_REALLOC_POSIX=1; + HAVE_RANDOM_R=1; + HAVE_RPMATCH=1; + HAVE_SETENV=1; + HAVE_STRTOD=1; + HAVE_STRTOLL=1; + HAVE_STRTOULL=1; + HAVE_STRUCT_RANDOM_DATA=1; + HAVE_SYS_LOADAVG_H=0; + HAVE_UNSETENV=1; + HAVE_DECL_GETLOADAVG=1; + REPLACE_MKSTEMP=0; + REPLACE_PUTENV=0; + REPLACE_STRTOD=0; + VOID_UNSETENV=0; + + + +for ac_header in stdlib.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:$LINENO: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_malloc_0_nonnull=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_malloc_0_nonnull=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_malloc_0_nonnull=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then + gl_cv_func_malloc_0_nonnull=1 +else + gl_cv_func_malloc_0_nonnull=0 +fi + + + +cat >>confdefs.h <<_ACEOF +#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull +_ACEOF + + + + { $as_echo "$as_me:$LINENO: checking for long long int" >&5 +$as_echo_n "checking for long long int... " >&6; } +if test "${ac_cv_type_long_long_int+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF + + /* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63; +int +main () +{ +/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull)); + ; + return 0; +} + +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + if test "$cross_compiling" = yes; then + ac_cv_type_long_long_int=yes +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #ifndef LLONG_MAX + # define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + # define LLONG_MAX (HALF - 1 + HALF) + #endif +int +main () +{ +long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_long_long_int=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_type_long_long_int=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_long_long_int=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_long_long_int" >&5 +$as_echo "$ac_cv_type_long_long_int" >&6; } + if test $ac_cv_type_long_long_int = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LONG_LONG_INT 1 +_ACEOF + + fi + + + + + + { $as_echo "$as_me:$LINENO: checking for mbstate_t" >&5 +$as_echo_n "checking for mbstate_t... " >&6; } +if test "${ac_cv_type_mbstate_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +# include +int +main () +{ +mbstate_t x; return sizeof x; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_type_mbstate_t=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_mbstate_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_mbstate_t" >&5 +$as_echo "$ac_cv_type_mbstate_t" >&6; } + if test $ac_cv_type_mbstate_t = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MBSTATE_T 1 +_ACEOF + + else + +cat >>confdefs.h <<\_ACEOF +#define mbstate_t int +_ACEOF + + fi + + + { $as_echo "$as_me:$LINENO: checking whether mbrtowc and mbstate_t are properly declared" >&5 +$as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; } +if test "${ac_cv_func_mbrtowc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +wchar_t wc; + char const s[] = ""; + size_t n = 1; + mbstate_t state; + return ! (sizeof state && (mbrtowc) (&wc, s, n, &state)); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_mbrtowc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_mbrtowc=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_mbrtowc" >&5 +$as_echo "$ac_cv_func_mbrtowc" >&6; } + if test $ac_cv_func_mbrtowc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MBRTOWC 1 +_ACEOF + + fi + + + GNULIB_BTOWC=0; + GNULIB_WCTOB=0; + GNULIB_MBSINIT=0; + GNULIB_MBRTOWC=0; + GNULIB_MBRLEN=0; + GNULIB_MBSRTOWCS=0; + GNULIB_MBSNRTOWCS=0; + GNULIB_WCRTOMB=0; + GNULIB_WCSRTOMBS=0; + GNULIB_WCSNRTOMBS=0; + GNULIB_WCWIDTH=0; + HAVE_BTOWC=1; + HAVE_MBSINIT=1; + HAVE_MBRTOWC=1; + HAVE_MBRLEN=1; + HAVE_MBSRTOWCS=1; + HAVE_MBSNRTOWCS=1; + HAVE_WCRTOMB=1; + HAVE_WCSRTOMBS=1; + HAVE_WCSNRTOMBS=1; + HAVE_DECL_WCTOB=1; + HAVE_DECL_WCWIDTH=1; + REPLACE_MBSTATE_T=0; + REPLACE_BTOWC=0; + REPLACE_WCTOB=0; + REPLACE_MBSINIT=0; + REPLACE_MBRTOWC=0; + REPLACE_MBRLEN=0; + REPLACE_MBSRTOWCS=0; + REPLACE_MBSNRTOWCS=0; + REPLACE_WCRTOMB=0; + REPLACE_WCSRTOMBS=0; + REPLACE_WCSNRTOMBS=0; + REPLACE_WCWIDTH=0; + WCHAR_H=''; + + + + + +for ac_func in $ac_func_list +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional japanese locale" >&5 +$as_echo_n "checking for a traditional japanese locale... " >&6; } +if test "${gt_cv_locale_ja+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_ja" >&5 +$as_echo "$gt_cv_locale_ja" >&6; } + LOCALE_JA=$gt_cv_locale_ja + + + + + + { $as_echo "$as_me:$LINENO: checking for a transitional chinese locale" >&5 +$as_echo_n "checking for a transitional chinese locale... " >&6; } +if test "${gt_cv_locale_zh_CN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_zh_CN" >&5 +$as_echo "$gt_cv_locale_zh_CN" >&6; } + LOCALE_ZH_CN=$gt_cv_locale_zh_CN + + + + + { $as_echo "$as_me:$LINENO: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + GNULIB_MEMCHR=0; + GNULIB_MEMMEM=0; + GNULIB_MEMPCPY=0; + GNULIB_MEMRCHR=0; + GNULIB_RAWMEMCHR=0; + GNULIB_STPCPY=0; + GNULIB_STPNCPY=0; + GNULIB_STRCHRNUL=0; + GNULIB_STRDUP=0; + GNULIB_STRNDUP=0; + GNULIB_STRNLEN=0; + GNULIB_STRPBRK=0; + GNULIB_STRSEP=0; + GNULIB_STRSTR=0; + GNULIB_STRCASESTR=0; + GNULIB_STRTOK_R=0; + GNULIB_MBSLEN=0; + GNULIB_MBSNLEN=0; + GNULIB_MBSCHR=0; + GNULIB_MBSRCHR=0; + GNULIB_MBSSTR=0; + GNULIB_MBSCASECMP=0; + GNULIB_MBSNCASECMP=0; + GNULIB_MBSPCASECMP=0; + GNULIB_MBSCASESTR=0; + GNULIB_MBSCSPN=0; + GNULIB_MBSPBRK=0; + GNULIB_MBSSPN=0; + GNULIB_MBSSEP=0; + GNULIB_MBSTOK_R=0; + GNULIB_STRERROR=0; + GNULIB_STRSIGNAL=0; + GNULIB_STRVERSCMP=0; + HAVE_DECL_MEMMEM=1; + HAVE_MEMPCPY=1; + HAVE_DECL_MEMRCHR=1; + HAVE_RAWMEMCHR=1; + HAVE_STPCPY=1; + HAVE_STPNCPY=1; + HAVE_STRCHRNUL=1; + HAVE_DECL_STRDUP=1; + HAVE_STRNDUP=1; + HAVE_DECL_STRNDUP=1; + HAVE_DECL_STRNLEN=1; + HAVE_STRPBRK=1; + HAVE_STRSEP=1; + HAVE_STRCASESTR=1; + HAVE_DECL_STRTOK_R=1; + HAVE_DECL_STRERROR=1; + HAVE_DECL_STRSIGNAL=1; + HAVE_STRVERSCMP=1; + REPLACE_MEMCHR=0; + REPLACE_MEMMEM=0; + REPLACE_STRDUP=0; + REPLACE_STRSTR=0; + REPLACE_STRCASESTR=0; + REPLACE_STRERROR=0; + REPLACE_STRSIGNAL=0; + + + + + + + + + + + + + # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it + # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is + # irrelevant for anonymous mappings. + { $as_echo "$as_me:$LINENO: checking for mmap" >&5 +$as_echo_n "checking for mmap... " >&6; } +if test "${ac_cv_func_mmap+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define mmap to an innocuous variant, in case declares mmap. + For example, HP-UX 11i declares gettimeofday. */ +#define mmap innocuous_mmap + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char mmap (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef mmap + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char mmap (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_mmap || defined __stub___mmap +choke me +#endif + +int +main () +{ +return mmap (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_func_mmap=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_mmap=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_mmap" >&5 +$as_echo "$ac_cv_func_mmap" >&6; } +if test "x$ac_cv_func_mmap" = x""yes; then + gl_have_mmap=yes +else + gl_have_mmap=no +fi + + + # Try to allow MAP_ANONYMOUS. + gl_have_mmap_anonymous=no + if test $gl_have_mmap = yes; then + { $as_echo "$as_me:$LINENO: checking for MAP_ANONYMOUS" >&5 +$as_echo_n "checking for MAP_ANONYMOUS... " >&6; } + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#ifdef MAP_ANONYMOUS + I cant identify this map. +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "I cant identify this map." >/dev/null 2>&1; then + gl_have_mmap_anonymous=yes +fi +rm -f conftest* + + if test $gl_have_mmap_anonymous != yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#ifdef MAP_ANON + I cant identify this map. +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "I cant identify this map." >/dev/null 2>&1; then + +cat >>confdefs.h <<\_ACEOF +#define MAP_ANONYMOUS MAP_ANON +_ACEOF + + gl_have_mmap_anonymous=yes +fi +rm -f conftest* + + fi + { $as_echo "$as_me:$LINENO: result: $gl_have_mmap_anonymous" >&5 +$as_echo "$gl_have_mmap_anonymous" >&6; } + if test $gl_have_mmap_anonymous = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MAP_ANONYMOUS 1 +_ACEOF + + fi + fi + + + + + + + + + + + + + + + + + + + + + + + + +for ac_func in memchr +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +else + + gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext" + +fi +done + + + if test $ac_cv_func_memchr = no; then + + +for ac_header in bp-sym.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + REPLACE_MEMCHR=1 + fi + + if test $ac_cv_func_memchr = yes; then + # Detect platform-specific bugs in some versions of glibc: + # memchr should not dereference anything with length 0 + # http://bugzilla.redhat.com/499689 + # memchr should not dereference overestimated length after a match + # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 + # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 + # Assume that memchr works on platforms that lack mprotect. + { $as_echo "$as_me:$LINENO: checking whether memchr works" >&5 +$as_echo_n "checking whether memchr works... " >&6; } +if test "${gl_cv_func_memchr_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + gl_cv_func_memchr_works="guessing no" +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#if HAVE_SYS_MMAN_H +# include +# include +# include +# include +# ifndef MAP_FILE +# define MAP_FILE 0 +# endif +#endif + +int +main () +{ + + char *fence = NULL; +#if HAVE_SYS_MMAN_H && HAVE_MPROTECT +# if HAVE_MAP_ANONYMOUS + const int flags = MAP_ANONYMOUS | MAP_PRIVATE; + const int fd = -1; +# else /* !HAVE_MAP_ANONYMOUS */ + const int flags = MAP_FILE | MAP_PRIVATE; + int fd = open ("/dev/zero", O_RDONLY, 0666); + if (fd >= 0) +# endif + { + int pagesize = getpagesize (); + char *two_pages = + (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, + flags, fd, 0); + if (two_pages != (char *)(-1) + && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) + fence = two_pages + pagesize; + } +#endif + if (fence) + { + if (memchr (fence, 0, 0)) + return 1; + strcpy (fence - 9, "12345678"); + if (memchr (fence - 9, 0, 79) != fence - 1) + return 2; + } + return 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_memchr_works=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_memchr_works=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_memchr_works" >&5 +$as_echo "$gl_cv_func_memchr_works" >&6; } + if test "$gl_cv_func_memchr_works" != yes; then + + +for ac_header in bp-sym.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + REPLACE_MEMCHR=1 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS memchr.$ac_objext" + + fi + fi + + + + + + { $as_echo "$as_me:$LINENO: checking whether defines MIN and MAX" >&5 +$as_echo_n "checking whether defines MIN and MAX... " >&6; } +if test "${gl_cv_minmax_in_limits_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int x = MIN (42, 17); +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_minmax_in_limits_h=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_minmax_in_limits_h=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_minmax_in_limits_h" >&5 +$as_echo "$gl_cv_minmax_in_limits_h" >&6; } + if test $gl_cv_minmax_in_limits_h = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MINMAX_IN_LIMITS_H 1 +_ACEOF + + fi + + + + + + + { $as_echo "$as_me:$LINENO: checking whether defines MIN and MAX" >&5 +$as_echo_n "checking whether defines MIN and MAX... " >&6; } +if test "${gl_cv_minmax_in_sys_param_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int x = MIN (42, 17); +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_minmax_in_sys_param_h=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_minmax_in_sys_param_h=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_minmax_in_sys_param_h" >&5 +$as_echo "$gl_cv_minmax_in_sys_param_h" >&6; } + if test $gl_cv_minmax_in_sys_param_h = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MINMAX_IN_SYS_PARAM_H 1 +_ACEOF + + fi + + + + + + gl_cv_c_multiarch=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + + arch= + prev= + for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do + if test -n "$prev"; then + case $word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$arch" || test "$arch" = "$word"; then + arch="$word" + else + gl_cv_c_multiarch=yes + fi + ;; + esac + prev= + else + if test "x$word" = "x-arch"; then + prev=arch + fi + fi + done + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $gl_cv_c_multiarch = yes; then + +cat >>confdefs.h <<\_ACEOF +#define AA_APPLE_UNIVERSAL_BUILD 1 +_ACEOF + + APPLE_UNIVERSAL_BUILD=1 + else + APPLE_UNIVERSAL_BUILD=0 + fi + + + + { $as_echo "$as_me:$LINENO: checking whether to activate relocatable installation" >&5 +$as_echo_n "checking whether to activate relocatable installation... " >&6; } + # Check whether --enable-relocatable was given. +if test "${enable_relocatable+set}" = set; then + enableval=$enable_relocatable; if test "$enableval" != no; then + RELOCATABLE=yes + else + RELOCATABLE=no + fi + +else + RELOCATABLE=no +fi + + + { $as_echo "$as_me:$LINENO: result: $RELOCATABLE" >&5 +$as_echo "$RELOCATABLE" >&6; } + + + + if test "X$prefix" = "XNONE"; then + reloc_final_prefix="$ac_default_prefix" + else + reloc_final_prefix="$prefix" + fi + +cat >>confdefs.h <<_ACEOF +#define INSTALLPREFIX "${reloc_final_prefix}" +_ACEOF + + if test $RELOCATABLE = yes; then + +cat >>confdefs.h <<\_ACEOF +#define ENABLE_RELOCATABLE 1 +_ACEOF + + fi + +{ $as_echo "$as_me:$LINENO: checking for stdbool.h that conforms to C99" >&5 +$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } +if test "${ac_cv_header_stdbool_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #include + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + bool e = &s; + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + #if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a run-time + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); + #endif + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + +int +main () +{ + + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdbool_h=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdbool_h=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdbool_h" >&5 +$as_echo "$ac_cv_header_stdbool_h" >&6; } + { $as_echo "$as_me:$LINENO: checking for _Bool" >&5 +$as_echo_n "checking for _Bool... " >&6; } +if test "${ac_cv_type__Bool+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type__Bool=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof (_Bool)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof ((_Bool))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type__Bool=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type__Bool" >&5 +$as_echo "$ac_cv_type__Bool" >&6; } +if test "x$ac_cv_type__Bool" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE__BOOL 1 +_ACEOF + + +fi + + if test $ac_cv_header_stdbool_h = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_STDBOOL_H 1 +_ACEOF + + fi + + { $as_echo "$as_me:$LINENO: checking for unsigned long long int" >&5 +$as_echo_n "checking for unsigned long long int... " >&6; } +if test "${ac_cv_type_unsigned_long_long_int+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF + + /* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63; +int +main () +{ +/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull)); + ; + return 0; +} + +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_type_unsigned_long_long_int=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_unsigned_long_long_int=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long_int" >&5 +$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } + if test $ac_cv_type_unsigned_long_long_int = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_UNSIGNED_LONG_LONG_INT 1 +_ACEOF + + fi + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for C/C++ restrict keyword" >&5 +$as_echo_n "checking for C/C++ restrict keyword... " >&6; } +if test "${ac_cv_c_restrict+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_restrict=no + # The order here caters to the fact that C++ does not require restrict. + for ac_kw in __restrict __restrict__ _Restrict restrict; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +typedef int * int_ptr; + int foo (int_ptr $ac_kw ip) { + return ip[0]; + } +int +main () +{ +int s[1]; + int * $ac_kw t = s; + t[0] = 0; + return foo(t) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_restrict=$ac_kw +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_restrict" != no && break + done + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_c_restrict" >&5 +$as_echo "$ac_cv_c_restrict" >&6; } + + + case $ac_cv_c_restrict in + restrict) ;; + no) cat >>confdefs.h <<\_ACEOF +#define restrict /**/ +_ACEOF + ;; + *) cat >>confdefs.h <<_ACEOF +#define restrict $ac_cv_c_restrict +_ACEOF + ;; + esac + + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_string_h='<'string.h'>' + else + { $as_echo "$as_me:$LINENO: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if test "${gl_cv_next_string_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_string_h = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_string_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/string.h#{ + s#.*"\(.*/string.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_string_h='<'string.h'>' + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_string_h" >&5 +$as_echo "$gl_cv_next_string_h" >&6; } + fi + NEXT_STRING_H=$gl_cv_next_string_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'string.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_string_h + fi + NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive + + + + + + + + { $as_echo "$as_me:$LINENO: checking for wchar_t" >&5 +$as_echo_n "checking for wchar_t... " >&6; } +if test "${gt_cv_c_wchar_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + wchar_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gt_cv_c_wchar_t=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_c_wchar_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_c_wchar_t" >&5 +$as_echo "$gt_cv_c_wchar_t" >&6; } + if test $gt_cv_c_wchar_t = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_WCHAR_T 1 +_ACEOF + + fi + + + { $as_echo "$as_me:$LINENO: checking for wint_t" >&5 +$as_echo_n "checking for wint_t... " >&6; } +if test "${gt_cv_c_wint_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include + wint_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gt_cv_c_wint_t=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_c_wint_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_c_wint_t" >&5 +$as_echo "$gt_cv_c_wint_t" >&6; } + if test $gt_cv_c_wint_t = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_WINT_T 1 +_ACEOF + + fi + +{ $as_echo "$as_me:$LINENO: checking for size_t" >&5 +$as_echo_n "checking for size_t... " >&6; } +if test "${ac_cv_type_size_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_size_t=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof (size_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof ((size_t))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_size_t=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +$as_echo "$ac_cv_type_size_t" >&6; } +if test "x$ac_cv_type_size_t" = x""yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + + + { $as_echo "$as_me:$LINENO: checking for inttypes.h" >&5 +$as_echo_n "checking for inttypes.h... " >&6; } +if test "${gl_cv_header_inttypes_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +uintmax_t i = (uintmax_t) -1; return !i; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_header_inttypes_h=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_header_inttypes_h=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_inttypes_h" >&5 +$as_echo "$gl_cv_header_inttypes_h" >&6; } + if test $gl_cv_header_inttypes_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 +_ACEOF + + fi + + + { $as_echo "$as_me:$LINENO: checking for stdint.h" >&5 +$as_echo_n "checking for stdint.h... " >&6; } +if test "${gl_cv_header_stdint_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +uintmax_t i = (uintmax_t) -1; return !i; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_header_stdint_h=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_header_stdint_h=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_stdint_h" >&5 +$as_echo "$gl_cv_header_stdint_h" >&6; } + if test $gl_cv_header_stdint_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H_WITH_UINTMAX 1 +_ACEOF + + fi + + + + + { $as_echo "$as_me:$LINENO: checking for intmax_t" >&5 +$as_echo_n "checking for intmax_t... " >&6; } +if test "${gt_cv_c_intmax_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_STDINT_H_WITH_UINTMAX +#include +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include +#endif + +int +main () +{ +intmax_t x = -1; return !x; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gt_cv_c_intmax_t=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_c_intmax_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_c_intmax_t" >&5 +$as_echo "$gt_cv_c_intmax_t" >&6; } + if test $gt_cv_c_intmax_t = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_INTMAX_T 1 +_ACEOF + + else + + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + +cat >>confdefs.h <<_ACEOF +#define intmax_t $ac_type +_ACEOF + + fi + + + + + + + + + + + + +for ac_func in snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + { $as_echo "$as_me:$LINENO: checking whether _snprintf is declared" >&5 +$as_echo_n "checking whether _snprintf is declared... " >&6; } +if test "${ac_cv_have_decl__snprintf+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _snprintf + (void) _snprintf; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl__snprintf=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl__snprintf=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl__snprintf" >&5 +$as_echo "$ac_cv_have_decl__snprintf" >&6; } +if test "x$ac_cv_have_decl__snprintf" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__SNPRINTF 1 +_ACEOF + + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__SNPRINTF 0 +_ACEOF + + +fi + + + + + + + { $as_echo "$as_me:$LINENO: checking whether printf supports 'long double' arguments" >&5 +$as_echo_n "checking whether printf supports 'long double' arguments... " >&6; } +if test "${gl_cv_func_printf_long_double+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + beos*) gl_cv_func_printf_long_double="guessing no";; + mingw* | pw*) gl_cv_func_printf_long_double="guessing no";; + *) gl_cv_func_printf_long_double="guessing yes";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +static char buf[10000]; +int main () +{ + buf[0] = '\0'; + if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000e+00 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.75 33") != 0) + return 1; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_printf_long_double=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_printf_long_double=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_printf_long_double" >&5 +$as_echo "$gl_cv_func_printf_long_double" >&6; } + + + + case "$gl_cv_func_printf_long_double" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + { $as_echo "$as_me:$LINENO: checking whether printf supports infinite 'double' arguments" >&5 +$as_echo_n "checking whether printf supports infinite 'double' arguments... " >&6; } +if test "${gl_cv_func_printf_infinite+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_infinite="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; + darwin*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; + hpux*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_infinite="guessing no";; + netbsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_infinite="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite="guessing no";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static int +have_minus_zero () +{ + static double plus_zero = 0.0; + double minus_zero = - plus_zero; + return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; +} +static char buf[10000]; +static double zero = 0.0; +int main () +{ + if (sprintf (buf, "%f", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%f", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%f", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%e", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%e", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%e", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%g", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%g", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%g", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + /* This test fails on HP-UX 10.20. */ + if (have_minus_zero ()) + if (sprintf (buf, "%g", - zero) < 0 + || strcmp (buf, "-0") != 0) + return 1; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_printf_infinite=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_printf_infinite=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_printf_infinite" >&5 +$as_echo "$gl_cv_func_printf_infinite" >&6; } + + + + + + if test -n "$gl_printf_safe"; then + +cat >>confdefs.h <<\_ACEOF +#define CHECK_PRINTF_SAFE 1 +_ACEOF + + fi + case "$gl_cv_func_printf_long_double" in + *yes) + { $as_echo "$as_me:$LINENO: checking whether printf supports infinite 'long double' arguments" >&5 +$as_echo_n "checking whether printf supports infinite 'long double' arguments... " >&6; } +if test "${gl_cv_func_printf_infinite_long_double+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_cpu" in + # Guess no on ia64, x86_64, i386. + ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; + *) + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_infinite_long_double="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_infinite_long_double="guessing no";; + darwin*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; + hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_infinite_long_double="guessing no";; + netbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite_long_double="guessing no";; + esac + ;; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +#include +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on MacOS X. */ +#include +#include +#include +#include +#include +#include +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data[1024]; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#else +/* Avoid a crash on POSIX systems. */ +#include +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif + +#include +#include +#include +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static char buf[10000]; +static long double zeroL = 0.0L; +int main () +{ + nocrash_init(); + if (sprintf (buf, "%Lf", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Lf", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Le", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Le", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Lg", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { + /* Signalling NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Infinity. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Zero. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Unnormalized number. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Denormal. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } +#endif + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_printf_infinite_long_double=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_printf_infinite_long_double=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_printf_infinite_long_double" >&5 +$as_echo "$gl_cv_func_printf_infinite_long_double" >&6; } + ;; + *) + gl_cv_func_printf_infinite_long_double="irrelevant" + ;; + esac + + + + { $as_echo "$as_me:$LINENO: checking whether printf supports the 'a' and 'A' directives" >&5 +$as_echo_n "checking whether printf supports the 'a' and 'A' directives... " >&6; } +if test "${gl_cv_func_printf_directive_a+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess yes on glibc >= 2.5 systems. + *-gnu*) + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #include + #ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2) + BZ2908 + #endif + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "BZ2908" >/dev/null 2>&1; then + gl_cv_func_printf_directive_a="guessing yes" +else + gl_cv_func_printf_directive_a="guessing no" +fi +rm -f conftest* + + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_a="guessing no";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.922p+1 33") != 0 + && strcmp (buf, "0x3.244p+0 33") != 0 + && strcmp (buf, "0x6.488p-1 33") != 0 + && strcmp (buf, "0xc.91p-2 33") != 0)) + return 1; + if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "-0X1.922P+1 33") != 0 + && strcmp (buf, "-0X3.244P+0 33") != 0 + && strcmp (buf, "-0X6.488P-1 33") != 0 + && strcmp (buf, "-0XC.91P-2 33") != 0)) + return 1; + /* This catches a FreeBSD 6.1 bug: it doesn't round. */ + if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.83p+0 33") != 0 + && strcmp (buf, "0x3.05p-1 33") != 0 + && strcmp (buf, "0x6.0ap-2 33") != 0 + && strcmp (buf, "0xc.14p-3 33") != 0)) + return 1; + /* This catches a FreeBSD 6.1 bug. See + */ + if (sprintf (buf, "%010a %d", 1.0 / 0.0, 33, 44, 55) < 0 + || buf[0] == '0') + return 1; + /* This catches a MacOS X 10.3.9 (Darwin 7.9) bug. */ + if (sprintf (buf, "%.1a", 1.999) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + return 1; + /* This catches the same MacOS X 10.3.9 (Darwin 7.9) bug and also a + glibc 2.4 bug . */ + if (sprintf (buf, "%.1La", 1.999L) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + return 1; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_printf_directive_a=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_printf_directive_a=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_printf_directive_a" >&5 +$as_echo "$gl_cv_func_printf_directive_a" >&6; } + + + + { $as_echo "$as_me:$LINENO: checking whether printf supports the 'F' directive" >&5 +$as_echo_n "checking whether printf supports the 'F' directive... " >&6; } +if test "${gl_cv_func_printf_directive_f+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_directive_f="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; + darwin*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[0-9]*) gl_cv_func_printf_directive_f="guessing no";; + solaris*) gl_cv_func_printf_directive_f="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_f="guessing no";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 + || strcmp (buf, "1234567.000000 33") != 0) + return 1; + if (sprintf (buf, "%F", 1.0 / 0.0) < 0 + || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) + return 1; + /* This catches a Cygwin 1.5.x bug. */ + if (sprintf (buf, "%.F", 1234.0) < 0 + || strcmp (buf, "1234") != 0) + return 1; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_printf_directive_f=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_printf_directive_f=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_printf_directive_f" >&5 +$as_echo "$gl_cv_func_printf_directive_f" >&6; } + + + + { $as_echo "$as_me:$LINENO: checking whether printf supports the 'ls' directive" >&5 +$as_echo_n "checking whether printf supports the 'ls' directive... " >&6; } +if test "${gl_cv_func_printf_directive_ls+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + openbsd*) gl_cv_func_printf_directive_ls="guessing no";; + irix*) gl_cv_func_printf_directive_ls="guessing no";; + solaris*) gl_cv_func_printf_directive_ls="guessing no";; + cygwin*) gl_cv_func_printf_directive_ls="guessing no";; + beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; + *) gl_cv_func_printf_directive_ls="guessing yes";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +#include +int main () +{ + char buf[100]; + /* Test whether %ls works at all. + This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on + Cygwin 1.5. */ + { + static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "abc") != 0) + return 1; + } + /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an + assertion failure inside libc), but not on OpenBSD 4.0. */ + { + static const wchar_t wstring[] = { 'a', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "a") != 0) + return 1; + } + /* Test whether precisions in %ls are supported as specified in ISO C 99 + section 7.19.6.1: + "If a precision is specified, no more than that many bytes are written + (including shift sequences, if any), and the array shall contain a + null wide character if, to equal the multibyte character sequence + length given by the precision, the function would need to access a + wide character one past the end of the array." + This test fails on Solaris 10. */ + { + static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%.2ls", wstring) < 0 + || strcmp (buf, "ab") != 0) + return 1; + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_printf_directive_ls=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_printf_directive_ls=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_printf_directive_ls" >&5 +$as_echo "$gl_cv_func_printf_directive_ls" >&6; } + + + + { $as_echo "$as_me:$LINENO: checking whether printf supports the grouping flag" >&5 +$as_echo_n "checking whether printf supports the grouping flag... " >&6; } +if test "${gl_cv_func_printf_flag_grouping+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; + netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; + mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; + *) gl_cv_func_printf_flag_grouping="guessing yes";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%'d %d", 1234567, 99) < 0 + || buf[strlen (buf) - 1] != '9') + return 1; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_printf_flag_grouping=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_printf_flag_grouping=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_printf_flag_grouping" >&5 +$as_echo "$gl_cv_func_printf_flag_grouping" >&6; } + + + + { $as_echo "$as_me:$LINENO: checking whether printf supports the left-adjust flag correctly" >&5 +$as_echo_n "checking whether printf supports the left-adjust flag correctly... " >&6; } +if test "${gl_cv_func_printf_flag_leftadjust+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess yes on HP-UX 11. + hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; + # Guess no on HP-UX 10 and older. + hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; + # Guess yes otherwise. + *) gl_cv_func_printf_flag_leftadjust="guessing yes";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +static char buf[100]; +int main () +{ + /* Check that a '-' flag is not annihilated by a negative width. */ + if (sprintf (buf, "a%-*sc", -3, "b") < 0 + || strcmp (buf, "ab c") != 0) + return 1; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_printf_flag_leftadjust=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_printf_flag_leftadjust=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_printf_flag_leftadjust" >&5 +$as_echo "$gl_cv_func_printf_flag_leftadjust" >&6; } + + + + { $as_echo "$as_me:$LINENO: checking whether printf supports the zero flag correctly" >&5 +$as_echo_n "checking whether printf supports the zero flag correctly... " >&6; } +if test "${gl_cv_func_printf_flag_zero+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_flag_zero="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_flag_zero="guessing no";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%010f", 1.0 / 0.0, 33, 44, 55) < 0 + || (strcmp (buf, " inf") != 0 + && strcmp (buf, " infinity") != 0)) + return 1; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_printf_flag_zero=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_printf_flag_zero=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_printf_flag_zero" >&5 +$as_echo "$gl_cv_func_printf_flag_zero" >&6; } + + + + { $as_echo "$as_me:$LINENO: checking whether printf supports large precisions" >&5 +$as_echo_n "checking whether printf supports large precisions... " >&6; } +if test "${gl_cv_func_printf_precision+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + case "$host_os" in + # Guess no only on native Win32 and BeOS systems. + mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; + beos*) gl_cv_func_printf_precision="guessing no" ;; + *) gl_cv_func_printf_precision="guessing yes" ;; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +static char buf[5000]; +int main () +{ +#ifdef __BEOS__ + /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ + return 1; +#endif + if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) + return 1; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_printf_precision=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_printf_precision=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_printf_precision" >&5 +$as_echo "$gl_cv_func_printf_precision" >&6; } + + + + + { $as_echo "$as_me:$LINENO: checking whether printf survives out-of-memory conditions" >&5 +$as_echo_n "checking whether printf survives out-of-memory conditions... " >&6; } +if test "${gl_cv_func_printf_enomem+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + gl_cv_func_printf_enomem="guessing no" + if test "$cross_compiling" = no; then + if test $APPLE_UNIVERSAL_BUILD = 0; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + +#include +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on MacOS X. */ +#include +#include +#include +#include +#include +#include +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data1024; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#else +/* Avoid a crash on POSIX systems. */ +#include +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif + +#include +#include +#include +#include +#include +int main() +{ + struct rlimit limit; + int ret; + nocrash_init (); + /* Some printf implementations allocate temporary space with malloc. */ + /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ +#ifdef RLIMIT_DATA + if (getrlimit (RLIMIT_DATA, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_DATA, &limit) < 0) + return 77; +#endif + /* On Linux systems, malloc() is limited by RLIMIT_AS. */ +#ifdef RLIMIT_AS + if (getrlimit (RLIMIT_AS, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_AS, &limit) < 0) + return 77; +#endif + /* Some printf implementations allocate temporary space on the stack. */ +#ifdef RLIMIT_STACK + if (getrlimit (RLIMIT_STACK, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_STACK, &limit) < 0) + return 77; +#endif + ret = printf ("%.5000000f", 1.0); + return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + (./conftest + result=$? + if test $result != 0 && test $result != 77; then result=1; fi + exit $result + ) >/dev/null 2>/dev/null + case $? in + 0) gl_cv_func_printf_enomem="yes" ;; + 77) gl_cv_func_printf_enomem="guessing no" ;; + *) gl_cv_func_printf_enomem="no" ;; + esac + else + gl_cv_func_printf_enomem="guessing no" + fi + rm -fr conftest* + else + gl_cv_func_printf_enomem="guessing no" + fi + fi + if test "$gl_cv_func_printf_enomem" = "guessing no"; then + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Solaris. + solaris*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on AIX. + aix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on HP-UX/hppa. + hpux*) case "$host_cpu" in + hppa*) gl_cv_func_printf_enomem="guessing yes";; + *) gl_cv_func_printf_enomem="guessing no";; + esac + ;; + # Guess yes on IRIX. + irix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on OSF/1. + osf*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Haiku. + haiku*) gl_cv_func_printf_enomem="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_enomem="guessing no";; + esac + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_printf_enomem" >&5 +$as_echo "$gl_cv_func_printf_enomem" >&6; } + + + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking whether strerror_r is declared" >&5 +$as_echo_n "checking whether strerror_r is declared... " >&6; } +if test "${ac_cv_have_decl_strerror_r+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef strerror_r + (void) strerror_r; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_strerror_r=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_strerror_r=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror_r" >&5 +$as_echo "$ac_cv_have_decl_strerror_r" >&6; } +if test "x$ac_cv_have_decl_strerror_r" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR_R 1 +_ACEOF + + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR_R 0 +_ACEOF + + +fi + + + +for ac_func in strerror_r +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:$LINENO: checking whether strerror_r returns char *" >&5 +$as_echo_n "checking whether strerror_r returns char *... " >&6; } +if test "${ac_cv_func_strerror_r_char_p+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + ac_cv_func_strerror_r_char_p=no + if test $ac_cv_have_decl_strerror_r = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + char *p = strerror_r (0, buf, sizeof buf); + return !p || x; + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_func_strerror_r_char_p=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + else + # strerror_r is not declared. Choose between + # systems that have relatively inaccessible declarations for the + # function. BeOS and DEC UNIX 4.0 fall in this category, but the + # former has a strerror_r that returns char*, while the latter + # has a strerror_r that returns `int'. + # This test should segfault on the DEC system. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + extern char *strerror_r (); +int +main () +{ +char buf[100]; + char x = *strerror_r (0, buf, sizeof buf); + return ! isalpha (x); + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_strerror_r_char_p=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_strerror_r_char_p" >&5 +$as_echo "$ac_cv_func_strerror_r_char_p" >&6; } +if test $ac_cv_func_strerror_r_char_p = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STRERROR_R_CHAR_P 1 +_ACEOF + +fi + + + XGETTEXT_EXTRA_OPTIONS= + + + + + + + + + + + if test -z "$ERRNO_H"; then + { $as_echo "$as_me:$LINENO: checking for working strerror function" >&5 +$as_echo_n "checking for working strerror function... " >&6; } +if test "${gl_cv_func_working_strerror+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +return !*strerror (-2); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_func_working_strerror=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_working_strerror=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +return !*strerror (-2); + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_working_strerror=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_working_strerror=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_working_strerror" >&5 +$as_echo "$gl_cv_func_working_strerror" >&6; } + if test $gl_cv_func_working_strerror = no; then + REPLACE_STRERROR=1 + fi + else + REPLACE_STRERROR=1 + fi + if test $REPLACE_STRERROR = 1; then + + { $as_echo "$as_me:$LINENO: checking whether strerror is declared" >&5 +$as_echo_n "checking whether strerror is declared... " >&6; } +if test "${ac_cv_have_decl_strerror+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef strerror + (void) strerror; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_strerror=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_strerror=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_strerror" >&5 +$as_echo "$ac_cv_have_decl_strerror" >&6; } +if test "x$ac_cv_have_decl_strerror" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR 1 +_ACEOF + + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRERROR 0 +_ACEOF + + +fi + + + + + + + + + if test $ac_cv_header_sys_socket_h != yes; then + +for ac_header in winsock2.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + fi + + fi + +{ $as_echo "$as_me:$LINENO: checking whether alarm is declared" >&5 +$as_echo_n "checking whether alarm is declared... " >&6; } +if test "${ac_cv_have_decl_alarm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +#ifndef alarm + (void) alarm; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_alarm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_alarm=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_alarm" >&5 +$as_echo "$ac_cv_have_decl_alarm" >&6; } +if test "x$ac_cv_have_decl_alarm" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ALARM 1 +_ACEOF + + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ALARM 0 +_ACEOF + + +fi + + + + + + if true; then + GL_COND_LIBTOOL_TRUE= + GL_COND_LIBTOOL_FALSE='#' +else + GL_COND_LIBTOOL_TRUE='#' + GL_COND_LIBTOOL_FALSE= +fi + + gl_cond_libtool=true + + + + + + + + + + gl_source_base='lib' + + + + + + if test $ac_cv_func_alloca_works = no; then + : + fi + + # Define an additional variable used in the Makefile substitution. + if test $ac_cv_working_alloca_h = yes; then + { $as_echo "$as_me:$LINENO: checking for alloca as a compiler built-in" >&5 +$as_echo_n "checking for alloca as a compiler built-in... " >&6; } +if test "${gl_cv_rpl_alloca+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#if defined __GNUC__ || defined _AIX || defined _MSC_VER + Need own alloca +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Need own alloca" >/dev/null 2>&1; then + gl_cv_rpl_alloca=yes +else + gl_cv_rpl_alloca=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_rpl_alloca" >&5 +$as_echo "$gl_cv_rpl_alloca" >&6; } + if test $gl_cv_rpl_alloca = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ALLOCA 1 +_ACEOF + + ALLOCA_H=alloca.h + else + ALLOCA_H= + fi + else + ALLOCA_H=alloca.h + fi + + + + + + + FLOAT_H= + case "$host_os" in + beos* | openbsd*) + FLOAT_H=float.h + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_float_h='<'float.h'>' + else + { $as_echo "$as_me:$LINENO: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if test "${gl_cv_next_float_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_float_h = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_float_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/float.h#{ + s#.*"\(.*/float.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_float_h='<'float.h'>' + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_float_h" >&5 +$as_echo "$gl_cv_next_float_h" >&6; } + fi + NEXT_FLOAT_H=$gl_cv_next_float_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'float.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_float_h + fi + NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive + + + + ;; + esac + + + + + { $as_echo "$as_me:$LINENO: checking whether frexpl() can be used without linking with libm" >&5 +$as_echo_n "checking whether frexpl() can be used without linking with libm... " >&6; } +if test "${gl_cv_func_frexpl_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + long double x; +int +main () +{ +int e; return frexpl (x, &e) > 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_func_frexpl_no_libm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_frexpl_no_libm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_frexpl_no_libm" >&5 +$as_echo "$gl_cv_func_frexpl_no_libm" >&6; } + if test $gl_cv_func_frexpl_no_libm = yes; then + + + { $as_echo "$as_me:$LINENO: checking whether frexpl works" >&5 +$as_echo_n "checking whether frexpl works... " >&6; } +if test "${gl_cv_func_frexpl_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_os" in + aix* | beos* | darwin* | irix* | mingw* | pw*) + gl_cv_func_frexpl_works="guessing no";; + *) gl_cv_func_frexpl_works="guessing yes";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +/* Override the values of , like done in float.in.h. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +extern long double frexpl (long double, int *); +int main() +{ + volatile long double x; + /* Test on finite numbers that fails on AIX 5.1. */ + x = 16.0L; + { + int exp = -9999; + frexpl (x, &exp); + if (exp != 5) + return 1; + } + /* Test on finite numbers that fails on MacOS X 10.4, because its frexpl + function returns an invalid (incorrectly normalized) value: it returns + y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } + but the correct result is + 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ + x = 1.01L; + { + int exp = -9999; + long double y = frexpl (x, &exp); + if (!(exp == 1 && y == 0.505L)) + return 1; + } + /* Test on large finite numbers. This fails on BeOS at i = 16322, while + LDBL_MAX_EXP = 16384. + In the loop end test, we test x against Infinity, rather than comparing + i with LDBL_MAX_EXP, because BeOS has a wrong LDBL_MAX_EXP. */ + { + int i; + for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) + { + int exp = -9999; + frexpl (x, &exp); + if (exp != i) + return 1; + } + } + /* Test on denormalized numbers. */ + { + int i; + for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) + ; + if (x > 0.0L) + { + int exp; + long double y = frexpl (x, &exp); + /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, + exp = -16382, y = 0.5. On MacOS X 10.5: exp = -16384, y = 0.5. */ + if (exp != LDBL_MIN_EXP - 1) + return 1; + } + } + /* Test on infinite numbers. */ + x = 1.0L / 0.0L; + { + int exp; + long double y = frexpl (x, &exp); + if (y != x) + return 1; + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_frexpl_works=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_frexpl_works=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_frexpl_works" >&5 +$as_echo "$gl_cv_func_frexpl_works" >&6; } + + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FREXPL_IN_LIBC 1 +_ACEOF + + { $as_echo "$as_me:$LINENO: checking whether frexpl is declared" >&5 +$as_echo_n "checking whether frexpl is declared... " >&6; } +if test "${ac_cv_have_decl_frexpl+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef frexpl + (void) frexpl; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_frexpl=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_frexpl=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_frexpl" >&5 +$as_echo "$ac_cv_have_decl_frexpl" >&6; } +if test "x$ac_cv_have_decl_frexpl" = x""yes; then + : +else + HAVE_DECL_FREXPL=0 +fi + + else + HAVE_DECL_FREXPL=0 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS frexpl.$ac_objext" + + fi + + + + GNULIB_FREXPL=1 + + + + + +for ac_func in getpagesize +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + if test $ac_cv_func_getpagesize = no; then + HAVE_GETPAGESIZE=0 + +for ac_header in OS.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_OS_h = yes; then + HAVE_OS_H=1 + fi + +for ac_header in sys/param.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_sys_param_h = yes; then + HAVE_SYS_PARAM_H=1 + fi + fi + case "$host_os" in + mingw*) + REPLACE_GETPAGESIZE=1 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS getpagesize.$ac_objext" + + ;; + esac + + + + GNULIB_GETPAGESIZE=1 + + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:$LINENO: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if test "${am_cv_func_iconv+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + am_cv_func_iconv=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:$LINENO: checking for working iconv" >&5 +$as_echo_n "checking for working iconv... " >&6; } +if test "${am_cv_func_iconv_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + if test "$cross_compiling" = yes; then + case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +int main () +{ + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + return 1; + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + return 1; + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + return 1; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_func_iconv_works=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +am_cv_func_iconv_works=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + LIBS="$am_save_LIBS" + +fi +{ $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv_works" >&5 +$as_echo "$am_cv_func_iconv_works" >&6; } + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ICONV 1 +_ACEOF + + fi + if test "$am_cv_lib_iconv" = yes; then + { $as_echo "$as_me:$LINENO: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:$LINENO: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:$LINENO: checking for iconv declaration" >&5 +$as_echo_n "checking for iconv declaration... " >&6; } + if test "${am_cv_proto_iconv+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + am_cv_proto_iconv_arg1="" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + am_cv_proto_iconv_arg1="const" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" +fi + + am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + { $as_echo "$as_me:$LINENO: result: ${ac_t:- + }$am_cv_proto_iconv" >&5 +$as_echo "${ac_t:- + }$am_cv_proto_iconv" >&6; } + +cat >>confdefs.h <<_ACEOF +#define ICONV_CONST $am_cv_proto_iconv_arg1 +_ACEOF + + fi + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_iconv_h='<'iconv.h'>' + else + { $as_echo "$as_me:$LINENO: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if test "${gl_cv_next_iconv_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_iconv_h = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_iconv_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/iconv.h#{ + s#.*"\(.*/iconv.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_iconv_h='<'iconv.h'>' + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_iconv_h" >&5 +$as_echo "$gl_cv_next_iconv_h" >&6; } + fi + NEXT_ICONV_H=$gl_cv_next_iconv_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'iconv.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_iconv_h + fi + NEXT_AS_FIRST_DIRECTIVE_ICONV_H=$gl_next_as_first_directive + + + + + + + + + if test "$am_cv_func_iconv" = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + #include + #if defined _LIBICONV_VERSION || defined __GLIBC__ + gnu_iconv + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "gnu_iconv" >/dev/null 2>&1; then + gl_func_iconv_gnu=yes +else + gl_func_iconv_gnu=no +fi +rm -f conftest* + + if test $gl_func_iconv_gnu = no; then + iconv_flavor= + case "$host_os" in + aix*) iconv_flavor=ICONV_FLAVOR_AIX ;; + irix*) iconv_flavor=ICONV_FLAVOR_IRIX ;; + hpux*) iconv_flavor=ICONV_FLAVOR_HPUX ;; + osf*) iconv_flavor=ICONV_FLAVOR_OSF ;; + esac + if test -n "$iconv_flavor"; then + +cat >>confdefs.h <<_ACEOF +#define ICONV_FLAVOR $iconv_flavor +_ACEOF + + + + + ICONV_H='iconv.h' + + REPLACE_ICONV_OPEN=1 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS iconv_open.$ac_objext" + + + fi + fi + fi + + + + { $as_echo "$as_me:$LINENO: checking whether the compiler generally respects inline" >&5 +$as_echo_n "checking whether the compiler generally respects inline... " >&6; } +if test "${gl_cv_c_inline_effective+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test $ac_cv_c_inline = no; then + gl_cv_c_inline_effective=no + else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifdef __NO_INLINE__ + #error "inline is not effective" + #endif + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_c_inline_effective=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_c_inline_effective=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_c_inline_effective" >&5 +$as_echo "$gl_cv_c_inline_effective" >&6; } + if test $gl_cv_c_inline_effective = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_INLINE 1 +_ACEOF + + fi + + + + { $as_echo "$as_me:$LINENO: checking whether isnan(double) can be used without linking with libm" >&5 +$as_echo_n "checking whether isnan(double) can be used without linking with libm... " >&6; } +if test "${gl_cv_func_isnand_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #if __GNUC__ >= 4 + # undef isnand + # define isnand(x) __builtin_isnan ((double)(x)) + #else + # undef isnand + # define isnand(x) isnan ((double)(x)) + #endif + double x; +int +main () +{ +return isnand (x); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_func_isnand_no_libm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_isnand_no_libm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_isnand_no_libm" >&5 +$as_echo "$gl_cv_func_isnand_no_libm" >&6; } + + if test $gl_cv_func_isnand_no_libm = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ISNAND_IN_LIBC 1 +_ACEOF + + else + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS isnand.$ac_objext" + + + { $as_echo "$as_me:$LINENO: checking where to find the exponent in a 'double'" >&5 +$as_echo_n "checking where to find the exponent in a 'double'... " >&6; } +if test "${gl_cv_cc_double_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#if defined arm || defined __arm || defined __arm__ + mixed_endianness +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "mixed_endianness" >/dev/null 2>&1; then + gl_cv_cc_double_expbit0="unknown" +else + + + : +if test "${ac_cv_c_bigendian+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + + # Check for potential -arch flags. It is not universal unless + # there are some -arch flags. Note that *ppc* also matches + # ppc64. This check is also rather less than ideal. + case "${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" in #( + *-arch*ppc*|*-arch*i386*|*-arch*x86_64*) ac_cv_c_bigendian=universal;; + esac +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then + # Try to guess by grepping values from an object file. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_bigendian=no +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_bigendian=yes +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi +fi +: + case $ac_cv_c_bigendian in #( + yes) + gl_cv_cc_double_expbit0="word 0 bit 20";; #( + no) + gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( + universal) + +cat >>confdefs.h <<\_ACEOF +#define AC_APPLE_UNIVERSAL_BUILD 1 +_ACEOF + + ;; #( + *) + gl_cv_cc_double_expbit0="unknown" ;; + esac + + +fi +rm -f conftest* + + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (double x) +{ + memory_double m; + size_t i; + /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ + memset (&m, 0, sizeof (memory_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25); + add_to_ored_words (0.5); + add_to_ored_words (1.0); + add_to_ored_words (2.0); + add_to_ored_words (4.0); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_cc_double_expbit0=`cat conftest.out` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_cc_double_expbit0="unknown" +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + rm -f conftest.out + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_cc_double_expbit0" >&5 +$as_echo "$gl_cv_cc_double_expbit0" >&6; } + case "$gl_cv_cc_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + fi + + + + { $as_echo "$as_me:$LINENO: checking whether isnan(float) can be used without linking with libm" >&5 +$as_echo_n "checking whether isnan(float) can be used without linking with libm... " >&6; } +if test "${gl_cv_func_isnanf_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #if __GNUC__ >= 4 + # undef isnanf + # define isnanf(x) __builtin_isnanf ((float)(x)) + #elif defined isnan + # undef isnanf + # define isnanf(x) isnan ((float)(x)) + #endif + float x; +int +main () +{ +return isnanf (x); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_func_isnanf_no_libm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_isnanf_no_libm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_isnanf_no_libm" >&5 +$as_echo "$gl_cv_func_isnanf_no_libm" >&6; } + + if test $gl_cv_func_isnanf_no_libm = yes; then + + + + { $as_echo "$as_me:$LINENO: checking whether isnan(float) works" >&5 +$as_echo_n "checking whether isnan(float) works... " >&6; } +if test "${gl_cv_func_isnanf_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_os" in + irix* | solaris*) gl_cv_func_isnanf_works="guessing no";; + *) gl_cv_func_isnanf_works="guessing yes";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#if __GNUC__ >= 4 +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +#elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +#endif +/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +#ifdef __DECC +static float +NaN () +{ + static float zero = 0.0f; + return zero / zero; +} +#else +# define NaN() (0.0f / 0.0f) +#endif +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; float value; } memory_float; +int main() +{ + memory_float m; + + if (isnanf (1.0f / 0.0f)) + return 1; + + if (!isnanf (NaN ())) + return 1; + +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + /* The isnanf function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit. */ + if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) + { + m.value = NaN (); + /* Set the bits below the exponent to 01111...111. */ + m.word[0] &= -1U << FLT_EXPBIT0_BIT; + m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1; + if (!isnanf (m.value)) + return 1; + } +#endif + + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_isnanf_works=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_isnanf_works=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_isnanf_works" >&5 +$as_echo "$gl_cv_func_isnanf_works" >&6; } + + fi + if test $gl_cv_func_isnanf_no_libm = yes \ + && { case "$gl_cv_func_isnanf_works" in + *yes) true;; + *) false;; + esac + }; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ISNANF_IN_LIBC 1 +_ACEOF + + else + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS isnanf.$ac_objext" + + + { $as_echo "$as_me:$LINENO: checking where to find the exponent in a 'float'" >&5 +$as_echo_n "checking where to find the exponent in a 'float'... " >&6; } +if test "${gl_cv_cc_float_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_cc_float_expbit0="word 0 bit 23" +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (float x) +{ + memory_float m; + size_t i; + /* Clear it first, in case + sizeof (float) < sizeof (memory_float). */ + memset (&m, 0, sizeof (memory_float)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25f); + add_to_ored_words (0.5f); + add_to_ored_words (1.0f); + add_to_ored_words (2.0f); + add_to_ored_words (4.0f); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_cc_float_expbit0=`cat conftest.out` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_cc_float_expbit0="unknown" +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + rm -f conftest.out + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_cc_float_expbit0" >&5 +$as_echo "$gl_cv_cc_float_expbit0" >&6; } + case "$gl_cv_cc_float_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + fi + + + + { $as_echo "$as_me:$LINENO: checking whether isnan(long double) can be used without linking with libm" >&5 +$as_echo_n "checking whether isnan(long double) can be used without linking with libm... " >&6; } +if test "${gl_cv_func_isnanl_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #if __GNUC__ >= 4 + # undef isnanl + # define isnanl(x) __builtin_isnanl ((long double)(x)) + #elif defined isnan + # undef isnanl + # define isnanl(x) isnan ((long double)(x)) + #endif + long double x; +int +main () +{ +return isnanl (x); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_func_isnanl_no_libm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_isnanl_no_libm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_isnanl_no_libm" >&5 +$as_echo "$gl_cv_func_isnanl_no_libm" >&6; } + + gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm + if test $gl_func_isnanl_no_libm = yes; then + + + + { $as_echo "$as_me:$LINENO: checking whether isnanl works" >&5 +$as_echo_n "checking whether isnanl works... " >&6; } +if test "${gl_cv_func_isnanl_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_cpu" in + # Guess no on ia64, x86_64, i386. + ia64 | x86_64 | i*86) gl_cv_func_isnanl_works="guessing no";; + *) + case "$host_os" in + netbsd*) gl_cv_func_isnanl_works="guessing no";; + *) gl_cv_func_isnanl_works="guessing yes";; + esac + ;; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#if __GNUC__ >= 4 +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +#elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +#endif +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; long double value; } + memory_long_double; +/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the + runtime type conversion. */ +#ifdef __sgi +static long double NaNl () +{ + double zero = 0.0; + return zero / zero; +} +#else +# define NaNl() (0.0L / 0.0L) +#endif +int main () +{ + memory_long_double m; + unsigned int i; + + if (!isnanl (NaNl ())) + return 1; + + /* The isnanl function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit (since the exponent never extends to + bit 31). */ + m.value = NaNl (); + m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + for (i = 0; i < NWORDS; i++) + m.word[i] |= 1; + if (!isnanl (m.value)) + return 1; + +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { + /* Signalling NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in + Intel IA-64 Architecture Software Developer's Manual, Volume 1: + Application Architecture. + Table 5-2 "Floating-Point Register Encodings" + Figure 5-6 "Memory to Floating-Point Register Data Translation" + */ + { /* Pseudo-NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Infinity. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Zero. */ + static memory_long_double x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Unnormalized number. */ + static memory_long_double x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Denormal. */ + static memory_long_double x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } +#endif + + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_isnanl_works=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_isnanl_works=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_isnanl_works" >&5 +$as_echo "$gl_cv_func_isnanl_works" >&6; } + + case "$gl_cv_func_isnanl_works" in + *yes) ;; + *) gl_func_isnanl_no_libm=no ;; + esac + fi + if test $gl_func_isnanl_no_libm = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ISNANL_IN_LIBC 1 +_ACEOF + + else + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS isnanl.$ac_objext" + + + + { $as_echo "$as_me:$LINENO: checking where to find the exponent in a 'long double'" >&5 +$as_echo_n "checking where to find the exponent in a 'long double'... " >&6; } +if test "${gl_cv_cc_long_double_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + gl_cv_cc_long_double_expbit0="unknown" + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_long_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (long double x) +{ + memory_long_double m; + size_t i; + /* Clear it first, in case + sizeof (long double) < sizeof (memory_long_double). */ + memset (&m, 0, sizeof (memory_long_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25L); + add_to_ored_words (0.5L); + add_to_ored_words (1.0L); + add_to_ored_words (2.0L); + add_to_ored_words (4.0L); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_cc_long_double_expbit0=`cat conftest.out` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_cc_long_double_expbit0="unknown" +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + rm -f conftest.out + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_cc_long_double_expbit0" >&5 +$as_echo "$gl_cv_cc_long_double_expbit0" >&6; } + case "$gl_cv_cc_long_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define LDBL_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define LDBL_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + fi + + + + + + + + + + + + LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(top_builddir)/$gl_source_base\"" + + + + + +for ac_func in setlocale +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + if test $gl_cv_func_malloc_posix = yes; then + HAVE_MALLOC_POSIX=1 + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MALLOC_POSIX 1 +_ACEOF + + else + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" + + HAVE_MALLOC_POSIX=0 + fi + + + + + GNULIB_MALLOC_POSIX=1 + + + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_math_h='<'math.h'>' + else + { $as_echo "$as_me:$LINENO: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if test "${gl_cv_next_math_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_math_h = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_math_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/math.h#{ + s#.*"\(.*/math.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_math_h='<'math.h'>' + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_math_h" >&5 +$as_echo "$gl_cv_next_math_h" >&6; } + fi + NEXT_MATH_H=$gl_cv_next_math_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'math.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_math_h + fi + NEXT_AS_FIRST_DIRECTIVE_MATH_H=$gl_next_as_first_directive + + + + { $as_echo "$as_me:$LINENO: checking whether NAN macro works" >&5 +$as_echo_n "checking whether NAN macro works... " >&6; } +if test "${gl_cv_header_math_nan_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +/* Solaris 10 has a broken definition of NAN. Other platforms + fail to provide NAN, or provide it only in C99 mode; this + test only needs to fail when NAN is provided but wrong. */ + float f = 1.0f; +#ifdef NAN + f = NAN; +#endif + return f == 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_header_math_nan_works=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_header_math_nan_works=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_math_nan_works" >&5 +$as_echo "$gl_cv_header_math_nan_works" >&6; } + if test $gl_cv_header_math_nan_works = no; then + REPLACE_NAN=1 + fi + { $as_echo "$as_me:$LINENO: checking whether HUGE_VAL works" >&5 +$as_echo_n "checking whether HUGE_VAL works... " >&6; } +if test "${gl_cv_header_math_huge_val_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +/* Solaris 10 has a broken definition of HUGE_VAL. */ + double d = HUGE_VAL; + return d == 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_header_math_huge_val_works=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_header_math_huge_val_works=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_math_huge_val_works" >&5 +$as_echo "$gl_cv_header_math_huge_val_works" >&6; } + if test $gl_cv_header_math_huge_val_works = no; then + REPLACE_HUGE_VAL=1 + fi + + + + + + + + : + + + + + + + + + + + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:$LINENO: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 1; + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_mbrtowc_incomplete_state=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:$LINENO: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 1; + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_mbrtowc_sanitycheck=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + if test $REPLACE_MBSTATE_T = 1; then + + + WCHAR_H=wchar.h + + fi + + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBRTOWC=1 + fi + + + + + + + if test $ac_cv_func_mbrtowc = no; then + HAVE_MBRTOWC=0 + fi + if test $HAVE_MBRTOWC != 0 && test $REPLACE_MBRTOWC != 1; then + + + + { $as_echo "$as_me:$LINENO: checking whether mbrtowc handles a NULL string argument" >&5 +$as_echo_n "checking whether mbrtowc handles a NULL string argument... " >&6; } +if test "${gl_cv_func_mbrtowc_null_arg+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on OSF/1. + osf*) gl_cv_func_mbrtowc_null_arg="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none; then + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + mbstate_t state; + wchar_t wc; + int ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + mbrtowc (&wc, NULL, 5, &state); + /* Check that wc was not modified. */ + if (wc != (wchar_t) 0xBADFACE) + return 1; + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_mbrtowc_null_arg=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_mbrtowc_null_arg=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_null_arg" >&5 +$as_echo "$gl_cv_func_mbrtowc_null_arg" >&6; } + + + + + + { $as_echo "$as_me:$LINENO: checking whether mbrtowc has a correct return value" >&5 +$as_echo_n "checking whether mbrtowc has a correct return value... " >&6; } +if test "${gl_cv_func_mbrtowc_retval+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on HP-UX and Solaris. + hpux* | solaris*) gl_cv_func_mbrtowc_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_retval="guessing yes" ;; + esac + if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +int main () +{ + /* This fails on Solaris. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 1) + return 1; + } + } + /* This fails on HP-UX 11.11. */ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 2) + return 1; + } + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_mbrtowc_retval=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_mbrtowc_retval=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_retval" >&6; } + + + + + { $as_echo "$as_me:$LINENO: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 +$as_echo_n "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } +if test "${gl_cv_func_mbrtowc_nul_retval+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8 and 9. + solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +int main () +{ + /* This fails on Solaris 8 and 9. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "", 1, &state) != 0) + return 1; + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_mbrtowc_nul_retval=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_mbrtowc_nul_retval=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_nul_retval" >&5 +$as_echo "$gl_cv_func_mbrtowc_nul_retval" >&6; } + + case "$gl_cv_func_mbrtowc_null_arg" in + *yes) ;; + *) +cat >>confdefs.h <<\_ACEOF +#define MBRTOWC_NULL_ARG_BUG 1 +_ACEOF + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_retval" in + *yes) ;; + *) +cat >>confdefs.h <<\_ACEOF +#define MBRTOWC_RETVAL_BUG 1 +_ACEOF + + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_nul_retval" in + *yes) ;; + *) +cat >>confdefs.h <<\_ACEOF +#define MBRTOWC_NUL_RETVAL_BUG 1 +_ACEOF + + REPLACE_MBRTOWC=1 + ;; + esac + fi + if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then + + + WCHAR_H=wchar.h + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbrtowc.$ac_objext" + + + : + + fi + + + + GNULIB_MBRTOWC=1 + + + + + + + + + + + + + + + + + + + + + + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + + + + { $as_echo "$as_me:$LINENO: checking whether mbrtowc handles incomplete characters" >&5 +$as_echo_n "checking whether mbrtowc handles incomplete characters... " >&6; } +if test "${gl_cv_func_mbrtowc_incomplete_state+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on AIX and OSF/1. + osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac + if test $LOCALE_JA != none; then + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 1; + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_mbrtowc_incomplete_state=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_mbrtowc_incomplete_state=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 +$as_echo "$gl_cv_func_mbrtowc_incomplete_state" >&6; } + + + + + { $as_echo "$as_me:$LINENO: checking whether mbrtowc works as well as mbtowc" >&5 +$as_echo_n "checking whether mbrtowc works as well as mbtowc... " >&6; } +if test "${gl_cv_func_mbrtowc_sanitycheck+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac + if test $LOCALE_ZH_CN != none; then + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 1; + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_mbrtowc_sanitycheck=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_mbrtowc_sanitycheck=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 +$as_echo "$gl_cv_func_mbrtowc_sanitycheck" >&6; } + + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + if test $REPLACE_MBSTATE_T = 1; then + + + WCHAR_H=wchar.h + + fi + + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSINIT=1 + fi + + + + + + + if test $ac_cv_func_mbsinit = no; then + HAVE_MBSINIT=0 + fi + if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then + + + WCHAR_H=wchar.h + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS mbsinit.$ac_objext" + + + : + + fi + + + + GNULIB_MBSINIT=1 + + + + GNULIB_MBSNLEN=1 + + + + + GNULIB_MEMCHR=1 + + + + + + + { $as_echo "$as_me:$LINENO: checking whether frexp can be used without linking with libm" >&5 +$as_echo_n "checking whether frexp can be used without linking with libm... " >&6; } +if test "${gl_cv_func_frexp_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + double x; + int y; +int +main () +{ +return frexp (x, &y) < 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_func_frexp_no_libm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_frexp_no_libm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_frexp_no_libm" >&5 +$as_echo "$gl_cv_func_frexp_no_libm" >&6; } + if test $gl_cv_func_frexp_no_libm = yes; then + + + { $as_echo "$as_me:$LINENO: checking whether frexp works" >&5 +$as_echo_n "checking whether frexp works... " >&6; } +if test "${gl_cv_func_frexp_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_os" in + netbsd* | irix* | mingw*) gl_cv_func_frexp_works="guessing no";; + *) gl_cv_func_frexp_works="guessing yes";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +int main() +{ + int i; + volatile double x; +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ + double zero = 0.0; + /* Test on denormalized numbers. */ + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + ; + if (x > 0.0) + { + int exp; + double y = frexp (x, &exp); + /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. + On NetBSD: y = 0.75. Correct: y = 0.5. */ + if (y != 0.5) + return 1; + } + /* Test on infinite numbers. */ + x = 1.0 / 0.0; + { + int exp; + double y = frexp (x, &exp); + if (y != x) + return 1; + } + /* Test on negative zero. */ + x = -zero; + { + int exp; + double y = frexp (x, &exp); + if (memcmp (&y, &x, sizeof x)) + return 1; + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_frexp_works=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_frexp_works=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_frexp_works" >&5 +$as_echo "$gl_cv_func_frexp_works" >&6; } + + case "$gl_cv_func_frexp_works" in + *yes) + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FREXP_IN_LIBC 1 +_ACEOF + + ;; + esac + fi + + { $as_echo "$as_me:$LINENO: checking whether ldexp can be used without linking with libm" >&5 +$as_echo_n "checking whether ldexp can be used without linking with libm... " >&6; } +if test "${gl_cv_func_ldexp_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + double x; + int y; +int +main () +{ +return ldexp (x, y) < 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_func_ldexp_no_libm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_ldexp_no_libm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_ldexp_no_libm" >&5 +$as_echo "$gl_cv_func_ldexp_no_libm" >&6; } + if test $gl_cv_func_ldexp_no_libm = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LDEXP_IN_LIBC 1 +_ACEOF + + fi + + + + { $as_echo "$as_me:$LINENO: checking whether frexpl can be used without linking with libm" >&5 +$as_echo_n "checking whether frexpl can be used without linking with libm... " >&6; } +if test "${gl_cv_func_frexpl_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + long double x; + int y; +int +main () +{ +return frexpl (x, &y) < 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_func_frexpl_no_libm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_frexpl_no_libm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_frexpl_no_libm" >&5 +$as_echo "$gl_cv_func_frexpl_no_libm" >&6; } + if test $gl_cv_func_frexpl_no_libm = yes; then + + + { $as_echo "$as_me:$LINENO: checking whether frexpl works" >&5 +$as_echo_n "checking whether frexpl works... " >&6; } +if test "${gl_cv_func_frexpl_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_os" in + aix* | beos* | darwin* | irix* | mingw* | pw*) + gl_cv_func_frexpl_works="guessing no";; + *) gl_cv_func_frexpl_works="guessing yes";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +/* Override the values of , like done in float.in.h. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +extern long double frexpl (long double, int *); +int main() +{ + volatile long double x; + /* Test on finite numbers that fails on AIX 5.1. */ + x = 16.0L; + { + int exp = -9999; + frexpl (x, &exp); + if (exp != 5) + return 1; + } + /* Test on finite numbers that fails on MacOS X 10.4, because its frexpl + function returns an invalid (incorrectly normalized) value: it returns + y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } + but the correct result is + 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ + x = 1.01L; + { + int exp = -9999; + long double y = frexpl (x, &exp); + if (!(exp == 1 && y == 0.505L)) + return 1; + } + /* Test on large finite numbers. This fails on BeOS at i = 16322, while + LDBL_MAX_EXP = 16384. + In the loop end test, we test x against Infinity, rather than comparing + i with LDBL_MAX_EXP, because BeOS has a wrong LDBL_MAX_EXP. */ + { + int i; + for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) + { + int exp = -9999; + frexpl (x, &exp); + if (exp != i) + return 1; + } + } + /* Test on denormalized numbers. */ + { + int i; + for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) + ; + if (x > 0.0L) + { + int exp; + long double y = frexpl (x, &exp); + /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, + exp = -16382, y = 0.5. On MacOS X 10.5: exp = -16384, y = 0.5. */ + if (exp != LDBL_MIN_EXP - 1) + return 1; + } + } + /* Test on infinite numbers. */ + x = 1.0L / 0.0L; + { + int exp; + long double y = frexpl (x, &exp); + if (y != x) + return 1; + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_frexpl_works=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_frexpl_works=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_frexpl_works" >&5 +$as_echo "$gl_cv_func_frexpl_works" >&6; } + + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_FREXPL_IN_LIBC 1 +_ACEOF + + { $as_echo "$as_me:$LINENO: checking whether frexpl is declared" >&5 +$as_echo_n "checking whether frexpl is declared... " >&6; } +if test "${ac_cv_have_decl_frexpl+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef frexpl + (void) frexpl; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_frexpl=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_frexpl=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_frexpl" >&5 +$as_echo "$ac_cv_have_decl_frexpl" >&6; } +if test "x$ac_cv_have_decl_frexpl" = x""yes; then + : +else + HAVE_DECL_FREXPL=0 +fi + + fi + + { $as_echo "$as_me:$LINENO: checking whether ldexpl can be used without linking with libm" >&5 +$as_echo_n "checking whether ldexpl can be used without linking with libm... " >&6; } +if test "${gl_cv_func_ldexpl_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + long double x; + int y; +int +main () +{ +return ldexpl (x, y) < 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_func_ldexpl_no_libm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_ldexpl_no_libm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_ldexpl_no_libm" >&5 +$as_echo "$gl_cv_func_ldexpl_no_libm" >&6; } + if test $gl_cv_func_ldexpl_no_libm = yes; then + + + { $as_echo "$as_me:$LINENO: checking whether ldexpl works" >&5 +$as_echo_n "checking whether ldexpl works... " >&6; } +if test "${gl_cv_func_ldexpl_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + case "$host_os" in + aix*) gl_cv_func_ldexpl_works="guessing no";; + *) gl_cv_func_ldexpl_works="guessing yes";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +extern long double ldexpl (long double, int); +int main() +{ + volatile long double x1 = 1.0; + volatile long double y1 = ldexpl (x1, -1); + volatile long double x2 = 1.73205L; + volatile long double y2 = ldexpl (x2, 0); + return (y1 != 0.5L) || (y2 != x2); +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_ldexpl_works=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_ldexpl_works=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_ldexpl_works" >&5 +$as_echo "$gl_cv_func_ldexpl_works" >&6; } + + case "$gl_cv_func_ldexpl_works" in + *yes) + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LDEXPL_IN_LIBC 1 +_ACEOF + + { $as_echo "$as_me:$LINENO: checking whether ldexpl is declared" >&5 +$as_echo_n "checking whether ldexpl is declared... " >&6; } +if test "${ac_cv_have_decl_ldexpl+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef ldexpl + (void) ldexpl; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_ldexpl=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_ldexpl=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_ldexpl" >&5 +$as_echo "$ac_cv_have_decl_ldexpl" >&6; } +if test "x$ac_cv_have_decl_ldexpl" = x""yes; then + : +else + HAVE_DECL_LDEXPL=0 +fi + + ;; + esac + fi + + + + + if test $RELOCATABLE = yes; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS relocatable.$ac_objext" + + fi + + + + { $as_echo "$as_me:$LINENO: checking for signbit macro" >&5 +$as_echo_n "checking for signbit macro... " >&6; } +if test "${gl_cv_func_signbit+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_func_signbit="guessing no" +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +/* If signbit is defined as a function, don't use it, since calling it for + 'float' or 'long double' arguments would involve conversions. + If signbit is not declared at all but exists as a library function, don't + use it, since the prototype may not match. + If signbit is not declared at all but exists as a compiler built-in, don't + use it, since it's preferable to use __builtin_signbit* (no warnings, + no conversions). */ +#ifndef signbit +# error "signbit should be a macro" +#endif +#include + +/* Global variables. + Needed because GCC 4 constant-folds __builtin_signbitl (literal) + but cannot constant-fold __builtin_signbitl (variable). */ +float vf; +double vd; +long double vl; +int main () +{ +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -p0f and -p0d instead. */ +float p0f = 0.0f; +float m0f = -p0f; +double p0d = 0.0; +double m0d = -p0d; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use another constant expression instead. + But that expression does not work on other platforms, such as when + cross-compiling to PowerPC on MacOS X 10.5. */ +long double p0l = 0.0L; +#if defined __hpux || defined __sgi +long double m0l = -LDBL_MIN * LDBL_MIN; +#else +long double m0l = -p0l; +#endif + if (signbit (vf)) + vf++; + { + float plus_inf = 1.0f / p0f; + float minus_inf = -1.0f / p0f; + if (!(!signbit (255.0f) + && signbit (-255.0f) + && !signbit (p0f) + && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vd)) + vd++; + { + double plus_inf = 1.0 / p0d; + double minus_inf = -1.0 / p0d; + if (!(!signbit (255.0) + && signbit (-255.0) + && !signbit (p0d) + && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vl)) + vl++; + { + long double plus_inf = 1.0L / p0l; + long double minus_inf = -1.0L / p0l; + if (!(!signbit (255.0L) + && signbit (-255.0L) + && !signbit (p0l) + && (memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + return 0; +} + + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_signbit=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_signbit=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_signbit" >&5 +$as_echo "$gl_cv_func_signbit" >&6; } + { $as_echo "$as_me:$LINENO: checking for signbit compiler built-ins" >&5 +$as_echo_n "checking for signbit compiler built-ins... " >&6; } +if test "${gl_cv_func_signbit_gcc+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_func_signbit_gcc="guessing no" +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#if __GNUC__ >= 4 +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ + sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ + __builtin_signbitf (x)) +#else +# error "signbit should be three compiler built-ins" +#endif +#include + +/* Global variables. + Needed because GCC 4 constant-folds __builtin_signbitl (literal) + but cannot constant-fold __builtin_signbitl (variable). */ +float vf; +double vd; +long double vl; +int main () +{ +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -p0f and -p0d instead. */ +float p0f = 0.0f; +float m0f = -p0f; +double p0d = 0.0; +double m0d = -p0d; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use another constant expression instead. + But that expression does not work on other platforms, such as when + cross-compiling to PowerPC on MacOS X 10.5. */ +long double p0l = 0.0L; +#if defined __hpux || defined __sgi +long double m0l = -LDBL_MIN * LDBL_MIN; +#else +long double m0l = -p0l; +#endif + if (signbit (vf)) + vf++; + { + float plus_inf = 1.0f / p0f; + float minus_inf = -1.0f / p0f; + if (!(!signbit (255.0f) + && signbit (-255.0f) + && !signbit (p0f) + && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vd)) + vd++; + { + double plus_inf = 1.0 / p0d; + double minus_inf = -1.0 / p0d; + if (!(!signbit (255.0) + && signbit (-255.0) + && !signbit (p0d) + && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vl)) + vl++; + { + long double plus_inf = 1.0L / p0l; + long double minus_inf = -1.0L / p0l; + if (!(!signbit (255.0L) + && signbit (-255.0L) + && !signbit (p0l) + && (memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + return 0; +} + + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_signbit_gcc=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_signbit_gcc=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_signbit_gcc" >&5 +$as_echo "$gl_cv_func_signbit_gcc" >&6; } + if test "$gl_cv_func_signbit_gcc" = yes; then + REPLACE_SIGNBIT_USING_GCC=1 + else + if test "$gl_cv_func_signbit" != yes; then + REPLACE_SIGNBIT=1 + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS signbitf.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS signbitd.$ac_objext" + + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS signbitl.$ac_objext" + + + + { $as_echo "$as_me:$LINENO: checking where to find the sign bit in a 'float'" >&5 +$as_echo_n "checking where to find the sign bit in a 'float'... " >&6; } +if test "${gl_cv_cc_float_signbit+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + gl_cv_cc_float_signbit="unknown" + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0f }; +static memory_float minus = { -1.0f }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + return 1; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + return 1; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + return 1; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + return (fclose (fp) != 0); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_cc_float_signbit=`cat conftest.out` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_cc_float_signbit="unknown" +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + rm -f conftest.out + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_cc_float_signbit" >&5 +$as_echo "$gl_cv_cc_float_signbit" >&6; } + case "$gl_cv_cc_float_signbit" in + word*bit*) + word=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define FLT_SIGNBIT_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define FLT_SIGNBIT_BIT $bit +_ACEOF + + ;; + esac + + + + + { $as_echo "$as_me:$LINENO: checking where to find the sign bit in a 'double'" >&5 +$as_echo_n "checking where to find the sign bit in a 'double'... " >&6; } +if test "${gl_cv_cc_double_signbit+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + gl_cv_cc_double_signbit="unknown" + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0 }; +static memory_float minus = { -1.0 }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + return 1; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + return 1; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + return 1; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + return (fclose (fp) != 0); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_cc_double_signbit=`cat conftest.out` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_cc_double_signbit="unknown" +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + rm -f conftest.out + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_cc_double_signbit" >&5 +$as_echo "$gl_cv_cc_double_signbit" >&6; } + case "$gl_cv_cc_double_signbit" in + word*bit*) + word=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define DBL_SIGNBIT_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DBL_SIGNBIT_BIT $bit +_ACEOF + + ;; + esac + + + + + { $as_echo "$as_me:$LINENO: checking where to find the sign bit in a 'long double'" >&5 +$as_echo_n "checking where to find the sign bit in a 'long double'... " >&6; } +if test "${gl_cv_cc_long_double_signbit+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + gl_cv_cc_long_double_signbit="unknown" + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0L }; +static memory_float minus = { -1.0L }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + return 1; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + return 1; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + return 1; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + return (fclose (fp) != 0); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_cc_long_double_signbit=`cat conftest.out` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_cc_long_double_signbit="unknown" +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + rm -f conftest.out + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_cc_long_double_signbit" >&5 +$as_echo "$gl_cv_cc_long_double_signbit" >&6; } + case "$gl_cv_cc_long_double_signbit" in + word*bit*) + word=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define LDBL_SIGNBIT_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define LDBL_SIGNBIT_BIT $bit +_ACEOF + + ;; + esac + + + if test "$gl_cv_cc_float_signbit" = unknown; then + { $as_echo "$as_me:$LINENO: checking whether copysignf is declared" >&5 +$as_echo_n "checking whether copysignf is declared... " >&6; } +if test "${ac_cv_have_decl_copysignf+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef copysignf + (void) copysignf; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_copysignf=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_copysignf=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_copysignf" >&5 +$as_echo "$ac_cv_have_decl_copysignf" >&6; } +if test "x$ac_cv_have_decl_copysignf" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGNF 1 +_ACEOF + + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGNF 0 +_ACEOF + + +fi + + + if test "$ac_cv_have_decl_copysignf" = yes; then + { $as_echo "$as_me:$LINENO: checking whether copysignf can be used without linking with libm" >&5 +$as_echo_n "checking whether copysignf can be used without linking with libm... " >&6; } +if test "${gl_cv_func_copysignf_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + float x, y; +int +main () +{ +return copysignf (x, y) < 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_func_copysignf_no_libm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_copysignf_no_libm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_copysignf_no_libm" >&5 +$as_echo "$gl_cv_func_copysignf_no_libm" >&6; } + if test $gl_cv_func_copysignf_no_libm = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COPYSIGNF_IN_LIBC 1 +_ACEOF + + fi + fi + fi + if test "$gl_cv_cc_double_signbit" = unknown; then + { $as_echo "$as_me:$LINENO: checking whether copysign is declared" >&5 +$as_echo_n "checking whether copysign is declared... " >&6; } +if test "${ac_cv_have_decl_copysign+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef copysign + (void) copysign; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_copysign=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_copysign=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_copysign" >&5 +$as_echo "$ac_cv_have_decl_copysign" >&6; } +if test "x$ac_cv_have_decl_copysign" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGN 1 +_ACEOF + + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGN 0 +_ACEOF + + +fi + + + if test "$ac_cv_have_decl_copysign" = yes; then + { $as_echo "$as_me:$LINENO: checking whether copysign can be used without linking with libm" >&5 +$as_echo_n "checking whether copysign can be used without linking with libm... " >&6; } +if test "${gl_cv_func_copysign_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + double x, y; +int +main () +{ +return copysign (x, y) < 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_func_copysign_no_libm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_copysign_no_libm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_copysign_no_libm" >&5 +$as_echo "$gl_cv_func_copysign_no_libm" >&6; } + if test $gl_cv_func_copysign_no_libm = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COPYSIGN_IN_LIBC 1 +_ACEOF + + fi + fi + fi + if test "$gl_cv_cc_long_double_signbit" = unknown; then + { $as_echo "$as_me:$LINENO: checking whether copysignl is declared" >&5 +$as_echo_n "checking whether copysignl is declared... " >&6; } +if test "${ac_cv_have_decl_copysignl+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef copysignl + (void) copysignl; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_copysignl=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_copysignl=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_copysignl" >&5 +$as_echo "$ac_cv_have_decl_copysignl" >&6; } +if test "x$ac_cv_have_decl_copysignl" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGNL 1 +_ACEOF + + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_COPYSIGNL 0 +_ACEOF + + +fi + + + if test "$ac_cv_have_decl_copysignl" = yes; then + { $as_echo "$as_me:$LINENO: checking whether copysignl can be used without linking with libm" >&5 +$as_echo_n "checking whether copysignl can be used without linking with libm... " >&6; } +if test "${gl_cv_func_copysignl_no_libm+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + long double x, y; +int +main () +{ +return copysignl (x, y) < 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + gl_cv_func_copysignl_no_libm=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_copysignl_no_libm=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_copysignl_no_libm" >&5 +$as_echo "$gl_cv_func_copysignl_no_libm" >&6; } + if test $gl_cv_func_copysignl_no_libm = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_COPYSIGNL_IN_LIBC 1 +_ACEOF + + fi + fi + fi + fi + fi + + + + GNULIB_SIGNBIT=1 + + + +for ac_header in stdint.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + { $as_echo "$as_me:$LINENO: checking for SIZE_MAX" >&5 +$as_echo_n "checking for SIZE_MAX... " >&6; } +if test "${gl_cv_size_max+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + gl_cv_size_max= + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#if HAVE_STDINT_H +#include +#endif +#ifdef SIZE_MAX +Found it +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Found it" >/dev/null 2>&1; then + gl_cv_size_max=yes +fi +rm -f conftest* + + if test -z "$gl_cv_size_max"; then + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof (size_t) * CHAR_BIT - 1) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof (size_t) * CHAR_BIT - 1) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof (size_t) * CHAR_BIT - 1) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof (size_t) * CHAR_BIT - 1) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof (size_t) * CHAR_BIT - 1) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) size_t_bits_minus_1=$ac_lo;; +'') size_t_bits_minus_1= ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +static long int longval () { return sizeof (size_t) * CHAR_BIT - 1; } +static unsigned long int ulongval () { return sizeof (size_t) * CHAR_BIT - 1; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if ((sizeof (size_t) * CHAR_BIT - 1) < 0) + { + long int i = longval (); + if (i != (sizeof (size_t) * CHAR_BIT - 1)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != (sizeof (size_t) * CHAR_BIT - 1)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + size_t_bits_minus_1=`cat conftest.val` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +size_t_bits_minus_1= +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) fits_in_uint=$ac_lo;; +'') fits_in_uint= ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +static long int longval () { return sizeof (size_t) <= sizeof (unsigned int); } +static unsigned long int ulongval () { return sizeof (size_t) <= sizeof (unsigned int); } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if ((sizeof (size_t) <= sizeof (unsigned int)) < 0) + { + long int i = longval (); + if (i != (sizeof (size_t) <= sizeof (unsigned int))) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != (sizeof (size_t) <= sizeof (unsigned int))) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + fits_in_uint=`cat conftest.val` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +fits_in_uint= +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val + if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then + if test $fits_in_uint = 1; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + extern size_t foo; + extern unsigned long foo; + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + fits_in_uint=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $fits_in_uint = 1; then + gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" + else + gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" + fi + else + gl_cv_size_max='((size_t)~(size_t)0)' + fi + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_size_max" >&5 +$as_echo "$gl_cv_size_max" >&6; } + if test "$gl_cv_size_max" != yes; then + +cat >>confdefs.h <<_ACEOF +#define SIZE_MAX $gl_cv_size_max +_ACEOF + + fi + + + + + + + # Define two additional variables used in the Makefile substitution. + + if test "$ac_cv_header_stdbool_h" = yes; then + STDBOOL_H='' + else + STDBOOL_H='stdbool.h' + fi + + + if test "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 + else + HAVE__BOOL=0 + fi + + + + + + if test $ac_cv_type_long_long_int = yes; then + HAVE_LONG_LONG_INT=1 + else + HAVE_LONG_LONG_INT=0 + fi + + + if test $ac_cv_type_unsigned_long_long_int = yes; then + HAVE_UNSIGNED_LONG_LONG_INT=1 + else + HAVE_UNSIGNED_LONG_LONG_INT=0 + fi + + + if test $ac_cv_header_inttypes_h = yes; then + HAVE_INTTYPES_H=1 + else + HAVE_INTTYPES_H=0 + fi + + + if test $ac_cv_header_sys_types_h = yes; then + HAVE_SYS_TYPES_H=1 + else + HAVE_SYS_TYPES_H=0 + fi + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdint_h='<'stdint.h'>' + else + { $as_echo "$as_me:$LINENO: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if test "${gl_cv_next_stdint_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stdint_h = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stdint.h#{ + s#.*"\(.*/stdint.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_stdint_h='<'stdint.h'>' + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_stdint_h" >&5 +$as_echo "$gl_cv_next_stdint_h" >&6; } + fi + NEXT_STDINT_H=$gl_cv_next_stdint_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stdint.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stdint_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive + + + + if test $ac_cv_header_stdint_h = yes; then + HAVE_STDINT_H=1 + else + HAVE_STDINT_H=0 + fi + + + if test $ac_cv_header_stdint_h = yes; then + { $as_echo "$as_me:$LINENO: checking whether stdint.h conforms to C99" >&5 +$as_echo_n "checking whether stdint.h conforms to C99... " >&6; } +if test "${gl_cv_header_working_stdint_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + gl_cv_header_working_stdint_h=no + cat >conftest.$ac_ext <<_ACEOF + + /* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include +/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ +#if !(defined WCHAR_MIN && defined WCHAR_MAX) +#error "WCHAR_MIN, WCHAR_MAX not defined in " +#endif + + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + + +#ifdef INT8_MAX +int8_t a1 = INT8_MAX; +int8_t a1min = INT8_MIN; +#endif +#ifdef INT16_MAX +int16_t a2 = INT16_MAX; +int16_t a2min = INT16_MIN; +#endif +#ifdef INT32_MAX +int32_t a3 = INT32_MAX; +int32_t a3min = INT32_MIN; +#endif +#ifdef INT64_MAX +int64_t a4 = INT64_MAX; +int64_t a4min = INT64_MIN; +#endif +#ifdef UINT8_MAX +uint8_t b1 = UINT8_MAX; +#else +typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; +#endif +#ifdef UINT16_MAX +uint16_t b2 = UINT16_MAX; +#endif +#ifdef UINT32_MAX +uint32_t b3 = UINT32_MAX; +#endif +#ifdef UINT64_MAX +uint64_t b4 = UINT64_MAX; +#endif +int_least8_t c1 = INT8_C (0x7f); +int_least8_t c1max = INT_LEAST8_MAX; +int_least8_t c1min = INT_LEAST8_MIN; +int_least16_t c2 = INT16_C (0x7fff); +int_least16_t c2max = INT_LEAST16_MAX; +int_least16_t c2min = INT_LEAST16_MIN; +int_least32_t c3 = INT32_C (0x7fffffff); +int_least32_t c3max = INT_LEAST32_MAX; +int_least32_t c3min = INT_LEAST32_MIN; +int_least64_t c4 = INT64_C (0x7fffffffffffffff); +int_least64_t c4max = INT_LEAST64_MAX; +int_least64_t c4min = INT_LEAST64_MIN; +uint_least8_t d1 = UINT8_C (0xff); +uint_least8_t d1max = UINT_LEAST8_MAX; +uint_least16_t d2 = UINT16_C (0xffff); +uint_least16_t d2max = UINT_LEAST16_MAX; +uint_least32_t d3 = UINT32_C (0xffffffff); +uint_least32_t d3max = UINT_LEAST32_MAX; +uint_least64_t d4 = UINT64_C (0xffffffffffffffff); +uint_least64_t d4max = UINT_LEAST64_MAX; +int_fast8_t e1 = INT_FAST8_MAX; +int_fast8_t e1min = INT_FAST8_MIN; +int_fast16_t e2 = INT_FAST16_MAX; +int_fast16_t e2min = INT_FAST16_MIN; +int_fast32_t e3 = INT_FAST32_MAX; +int_fast32_t e3min = INT_FAST32_MIN; +int_fast64_t e4 = INT_FAST64_MAX; +int_fast64_t e4min = INT_FAST64_MIN; +uint_fast8_t f1 = UINT_FAST8_MAX; +uint_fast16_t f2 = UINT_FAST16_MAX; +uint_fast32_t f3 = UINT_FAST32_MAX; +uint_fast64_t f4 = UINT_FAST64_MAX; +#ifdef INTPTR_MAX +intptr_t g = INTPTR_MAX; +intptr_t gmin = INTPTR_MIN; +#endif +#ifdef UINTPTR_MAX +uintptr_t h = UINTPTR_MAX; +#endif +intmax_t i = INTMAX_MAX; +uintmax_t j = UINTMAX_MAX; + +#include /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) +struct s { + int check_PTRDIFF: + PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) + && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) + ? 1 : -1; + /* Detect bug in FreeBSD 6.0 / ia64. */ + int check_SIG_ATOMIC: + SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) + && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) + ? 1 : -1; + int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; + int check_WCHAR: + WCHAR_MIN == TYPE_MINIMUM (wchar_t) + && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) + ? 1 : -1; + /* Detect bug in mingw. */ + int check_WINT: + WINT_MIN == TYPE_MINIMUM (wint_t) + && WINT_MAX == TYPE_MAXIMUM (wint_t) + ? 1 : -1; + + /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ + int check_UINT8_C: + (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; + int check_UINT16_C: + (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; + + /* Detect bugs in OpenBSD 3.9 stdint.h. */ +#ifdef UINT8_MAX + int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; +#endif +#ifdef UINT16_MAX + int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; +#endif +#ifdef UINT32_MAX + int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; +#endif +#ifdef UINT64_MAX + int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; +#endif + int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; + int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; + int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; + int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; + int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; + int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; + int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; + int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; + int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; + int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; + int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; +}; + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + if test "$cross_compiling" = yes; then + gl_cv_header_working_stdint_h=yes + +else + cat >conftest.$ac_ext <<_ACEOF + + /* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include + + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + + +#include +#include +#define MVAL(macro) MVAL1(macro) +#define MVAL1(expression) #expression +static const char *macro_values[] = + { +#ifdef INT8_MAX + MVAL (INT8_MAX), +#endif +#ifdef INT16_MAX + MVAL (INT16_MAX), +#endif +#ifdef INT32_MAX + MVAL (INT32_MAX), +#endif +#ifdef INT64_MAX + MVAL (INT64_MAX), +#endif +#ifdef UINT8_MAX + MVAL (UINT8_MAX), +#endif +#ifdef UINT16_MAX + MVAL (UINT16_MAX), +#endif +#ifdef UINT32_MAX + MVAL (UINT32_MAX), +#endif +#ifdef UINT64_MAX + MVAL (UINT64_MAX), +#endif + NULL + }; + +int +main () +{ + + const char **mv; + for (mv = macro_values; *mv != NULL; mv++) + { + const char *value = *mv; + /* Test whether it looks like a cast expression. */ + if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 + || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 + || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 + || strncmp (value, "((int)"/*)*/, 6) == 0 + || strncmp (value, "((signed short)"/*)*/, 15) == 0 + || strncmp (value, "((signed char)"/*)*/, 14) == 0) + return 1; + } + return 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_header_working_stdint_h=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_working_stdint_h" >&5 +$as_echo "$gl_cv_header_working_stdint_h" >&6; } + fi + if test "$gl_cv_header_working_stdint_h" = yes; then + STDINT_H= + else + + +for ac_header in sys/inttypes.h sys/bitypes.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_sys_inttypes_h = yes; then + HAVE_SYS_INTTYPES_H=1 + else + HAVE_SYS_INTTYPES_H=0 + fi + + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + else + HAVE_SYS_BITYPES_H=0 + fi + + + + + + + + + + + + if test $APPLE_UNIVERSAL_BUILD = 0; then + + + + + for gltype in ptrdiff_t size_t ; do + { $as_echo "$as_me:$LINENO: checking for bit size of $gltype" >&5 +$as_echo_n "checking for bit size of $gltype... " >&6; } +if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) result=$ac_lo;; +'') result=unknown ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +static long int longval () { return sizeof ($gltype) * CHAR_BIT; } +static unsigned long int ulongval () { return sizeof ($gltype) * CHAR_BIT; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if ((sizeof ($gltype) * CHAR_BIT) < 0) + { + long int i = longval (); + if (i != (sizeof ($gltype) * CHAR_BIT)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != (sizeof ($gltype) * CHAR_BIT)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + result=`cat conftest.val` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +result=unknown +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val + eval gl_cv_bitsizeof_${gltype}=\$result + +fi +ac_res=`eval 'as_val=${'gl_cv_bitsizeof_${gltype}'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + cat >>confdefs.h <<_ACEOF +#define BITSIZEOF_${GLTYPE} $result +_ACEOF + + eval BITSIZEOF_${GLTYPE}=\$result + done + + + fi + + + + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:$LINENO: checking for bit size of $gltype" >&5 +$as_echo_n "checking for bit size of $gltype... " >&6; } +if { as_var=gl_cv_bitsizeof_${gltype}; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=0 ac_mid=0 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr $ac_mid + 1` + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=-1 ac_mid=-1 + while :; do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_lo=$ac_mid; break +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_hi=`expr '(' $ac_mid ')' - 1` + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + ac_mid=`expr 2 '*' $ac_mid` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo= ac_hi= +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +int +main () +{ +static int test_array [1 - 2 * !((sizeof ($gltype) * CHAR_BIT) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_hi=$ac_mid +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_lo=`expr '(' $ac_mid ')' + 1` +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in +?*) result=$ac_lo;; +'') result=unknown ;; +esac +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + +#include +static long int longval () { return sizeof ($gltype) * CHAR_BIT; } +static unsigned long int ulongval () { return sizeof ($gltype) * CHAR_BIT; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if ((sizeof ($gltype) * CHAR_BIT) < 0) + { + long int i = longval (); + if (i != (sizeof ($gltype) * CHAR_BIT)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != (sizeof ($gltype) * CHAR_BIT)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + result=`cat conftest.val` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +result=unknown +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +rm -f conftest.val + eval gl_cv_bitsizeof_${gltype}=\$result + +fi +ac_res=`eval 'as_val=${'gl_cv_bitsizeof_${gltype}'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + cat >>confdefs.h <<_ACEOF +#define BITSIZEOF_${GLTYPE} $result +_ACEOF + + eval BITSIZEOF_${GLTYPE}=\$result + done + + + + + + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:$LINENO: checking whether $gltype is signed" >&5 +$as_echo_n "checking whether $gltype is signed... " >&6; } +if { as_var=gl_cv_type_${gltype}_signed; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + + int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + result=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + result=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval gl_cv_type_${gltype}_signed=\$result + +fi +ac_res=`eval 'as_val=${'gl_cv_type_${gltype}_signed'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval result=\$gl_cv_type_${gltype}_signed + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + if test "$result" = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_SIGNED_${GLTYPE} 1 +_ACEOF + + eval HAVE_SIGNED_${GLTYPE}=1 + else + eval HAVE_SIGNED_${GLTYPE}=0 + fi + done + + + gl_cv_type_ptrdiff_t_signed=yes + gl_cv_type_size_t_signed=no + if test $APPLE_UNIVERSAL_BUILD = 0; then + + + + + for gltype in ptrdiff_t size_t ; do + { $as_echo "$as_me:$LINENO: checking for $gltype integer literal suffix" >&5 +$as_echo_n "checking for $gltype integer literal suffix... " >&6; } +if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + + extern $gltype foo; + extern $gltype1 foo; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval gl_cv_type_${gltype}_suffix=\$glsuf +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done +fi +ac_res=`eval 'as_val=${'gl_cv_type_${gltype}_suffix'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + cat >>confdefs.h <<_ACEOF +#define ${GLTYPE}_SUFFIX $result +_ACEOF + + done + + + fi + + + + + + for gltype in sig_atomic_t wchar_t wint_t ; do + { $as_echo "$as_me:$LINENO: checking for $gltype integer literal suffix" >&5 +$as_echo_n "checking for $gltype integer literal suffix... " >&6; } +if { as_var=gl_cv_type_${gltype}_suffix; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif + + extern $gltype foo; + extern $gltype1 foo; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval gl_cv_type_${gltype}_suffix=\$glsuf +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done +fi +ac_res=`eval 'as_val=${'gl_cv_type_${gltype}_suffix'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + cat >>confdefs.h <<_ACEOF +#define ${GLTYPE}_SUFFIX $result +_ACEOF + + done + + + + STDINT_H=stdint.h + fi + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_stdlib_h='<'stdlib.h'>' + else + { $as_echo "$as_me:$LINENO: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if test "${gl_cv_next_stdlib_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_stdlib_h = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_stdlib_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/stdlib.h#{ + s#.*"\(.*/stdlib.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_stdlib_h='<'stdlib.h'>' + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_stdlib_h" >&5 +$as_echo "$gl_cv_next_stdlib_h" >&6; } + fi + NEXT_STDLIB_H=$gl_cv_next_stdlib_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'stdlib.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_stdlib_h + fi + NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive + + + + +for ac_header in random.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_random_h = yes; then + HAVE_RANDOM_H=1 + else + HAVE_RANDOM_H=0 + fi + + { $as_echo "$as_me:$LINENO: checking for struct random_data" >&5 +$as_echo_n "checking for struct random_data... " >&6; } +if test "${ac_cv_type_struct_random_data+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_struct_random_data=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #if HAVE_RANDOM_H + # include + #endif + + +int +main () +{ +if (sizeof (struct random_data)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #if HAVE_RANDOM_H + # include + #endif + + +int +main () +{ +if (sizeof ((struct random_data))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_struct_random_data=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_random_data" >&5 +$as_echo "$ac_cv_type_struct_random_data" >&6; } +if test "x$ac_cv_type_struct_random_data" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_RANDOM_DATA 1 +_ACEOF + + +else + HAVE_STRUCT_RANDOM_DATA=0 +fi + + + if test $gl_cond_libtool = false; then + gl_ltlibdeps="$gl_ltlibdeps $LTLIBICONV" + gl_libdeps="$gl_libdeps $LIBICONV" + fi + + + + + + + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNINORM_U16_NORMALIZE 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNINORM_U32_NORMALIZE 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNINORM_U8_NORMALIZE 1 +_ACEOF + + + + + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_unistd_h='<'unistd.h'>' + else + { $as_echo "$as_me:$LINENO: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if test "${gl_cv_next_unistd_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_unistd_h = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_unistd_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/unistd.h#{ + s#.*"\(.*/unistd.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_unistd_h='<'unistd.h'>' + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_unistd_h" >&5 +$as_echo "$gl_cv_next_unistd_h" >&6; } + fi + NEXT_UNISTD_H=$gl_cv_next_unistd_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'unistd.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_unistd_h + fi + NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive + + + + + + + + + + + if test $ac_cv_header_unistd_h = yes; then + HAVE_UNISTD_H=1 + else + HAVE_UNISTD_H=0 + fi + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking for ptrdiff_t" >&5 +$as_echo_n "checking for ptrdiff_t... " >&6; } +if test "${ac_cv_type_ptrdiff_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_ptrdiff_t=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof (ptrdiff_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof ((ptrdiff_t))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_ptrdiff_t=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5 +$as_echo "$ac_cv_type_ptrdiff_t" >&6; } +if test "x$ac_cv_type_ptrdiff_t" = x""yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define ptrdiff_t long +_ACEOF + + +fi + + + + + + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_A 1 +_ACEOF + + +for ac_func in nl_langinfo +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_F 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_LS 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_GROUPING 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_LEFTADJUST 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_ZERO 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_UNBOUNDED_PRECISION 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_ENOMEM 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_A 1 +_ACEOF + + +for ac_func in nl_langinfo +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_F 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_LS 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_GROUPING 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_LEFTADJUST 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_ZERO 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_UNBOUNDED_PRECISION 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_ENOMEM 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + + + + { $as_echo "$as_me:$LINENO: checking for ptrdiff_t" >&5 +$as_echo_n "checking for ptrdiff_t... " >&6; } +if test "${ac_cv_type_ptrdiff_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_ptrdiff_t=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof (ptrdiff_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof ((ptrdiff_t))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_ptrdiff_t=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5 +$as_echo "$ac_cv_type_ptrdiff_t" >&6; } +if test "x$ac_cv_type_ptrdiff_t" = x""yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define ptrdiff_t long +_ACEOF + + +fi + + + + + + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_A 1 +_ACEOF + + +for ac_func in nl_langinfo +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_F 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_LS 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_GROUPING 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_LEFTADJUST 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_ZERO 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_UNBOUNDED_PRECISION 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_ENOMEM 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_A 1 +_ACEOF + + +for ac_func in nl_langinfo +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_F 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_LS 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_GROUPING 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_LEFTADJUST 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_ZERO 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_UNBOUNDED_PRECISION 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_ENOMEM 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + + + + { $as_echo "$as_me:$LINENO: checking for ptrdiff_t" >&5 +$as_echo_n "checking for ptrdiff_t... " >&6; } +if test "${ac_cv_type_ptrdiff_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_ptrdiff_t=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof (ptrdiff_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof ((ptrdiff_t))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_ptrdiff_t=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5 +$as_echo "$ac_cv_type_ptrdiff_t" >&6; } +if test "x$ac_cv_type_ptrdiff_t" = x""yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define ptrdiff_t long +_ACEOF + + +fi + + + + + + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_A 1 +_ACEOF + + +for ac_func in nl_langinfo +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_F 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_LS 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_GROUPING 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_LEFTADJUST 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_ZERO 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_UNBOUNDED_PRECISION 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_ENOMEM 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_A 1 +_ACEOF + + +for ac_func in nl_langinfo +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_F 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_LS 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_GROUPING 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_LEFTADJUST 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_ZERO 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_UNBOUNDED_PRECISION 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_ENOMEM 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + + + + { $as_echo "$as_me:$LINENO: checking for ptrdiff_t" >&5 +$as_echo_n "checking for ptrdiff_t... " >&6; } +if test "${ac_cv_type_ptrdiff_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_type_ptrdiff_t=no +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof (ptrdiff_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if (sizeof ((ptrdiff_t))) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_type_ptrdiff_t=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5 +$as_echo "$ac_cv_type_ptrdiff_t" >&6; } +if test "x$ac_cv_type_ptrdiff_t" = x""yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define ptrdiff_t long +_ACEOF + + +fi + + + + + + + + + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_DOUBLE 1 +_ACEOF + + ;; + esac + + + + + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + ;; + esac + + + + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_A 1 +_ACEOF + + +for ac_func in nl_langinfo +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + ;; + esac + + + + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_F 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DIRECTIVE_LS 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_GROUPING 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_LEFTADJUST 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_FLAG_ZERO 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_UNBOUNDED_PRECISION 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_ENOMEM 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_DOUBLE 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define NEED_PRINTF_LONG_DOUBLE 1 +_ACEOF + + ;; + esac + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U16_MBTOUC 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U16_MBTOUC_UNSAFE 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U16_MBTOUCR 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U16_UCTOMB 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U32_MBTOUC 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U32_MBTOUC_UNSAFE 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U32_MBTOUCR 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U32_UCTOMB 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U8_MBTOUC 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U8_MBTOUC_UNSAFE 1 +_ACEOF + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U8_MBTOUCR 1 +_ACEOF + + + + + + + + + + + + + + + + +cat >>confdefs.h <<\_ACEOF +#define GNULIB_UNISTR_U8_UCTOMB 1 +_ACEOF + + + + + { $as_echo "$as_me:$LINENO: checking whether is standalone" >&5 +$as_echo_n "checking whether is standalone... " >&6; } +if test "${gl_cv_header_wchar_h_standalone+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#include +wchar_t w; +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_header_wchar_h_standalone=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_header_wchar_h_standalone=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_wchar_h_standalone" >&5 +$as_echo "$gl_cv_header_wchar_h_standalone" >&6; } + + + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + + + if test $gl_cv_header_wchar_h_standalone != yes || test $gt_cv_c_wint_t != yes; then + WCHAR_H=wchar.h + fi + + + + + + + + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_wchar_h='<'wchar.h'>' + else + { $as_echo "$as_me:$LINENO: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if test "${gl_cv_next_wchar_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_wchar_h = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/wchar.h#{ + s#.*"\(.*/wchar.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_wchar_h='<'wchar.h'>' + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_wchar_h" >&5 +$as_echo "$gl_cv_next_wchar_h" >&6; } + fi + NEXT_WCHAR_H=$gl_cv_next_wchar_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'wchar.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_wchar_h + fi + NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive + + + + + + + + + + + + + if test $ac_cv_func_iswcntrl = yes; then + HAVE_ISWCNTRL=1 + else + HAVE_ISWCNTRL=0 + fi + + + + + + + + + + + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + + + WCTYPE_H=wctype.h + if test $ac_cv_header_wctype_h = yes; then + if test $ac_cv_func_iswcntrl = yes; then + { $as_echo "$as_me:$LINENO: checking whether iswcntrl works" >&5 +$as_echo_n "checking whether iswcntrl works... " >&6; } +if test "${gl_cv_func_iswcntrl_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #if __GNU_LIBRARY__ == 1 + Linux libc5 i18n is broken. + #endif +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_func_iswcntrl_works=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_func_iswcntrl_works=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + #include + #include + #include + int main () { return iswprint ('x') == 0; } +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_iswcntrl_works=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_iswcntrl_works=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_iswcntrl_works" >&5 +$as_echo "$gl_cv_func_iswcntrl_works" >&6; } + if test $gl_cv_func_iswcntrl_works = yes; then + WCTYPE_H= + fi + fi + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_wctype_h='<'wctype.h'>' + else + { $as_echo "$as_me:$LINENO: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if test "${gl_cv_next_wctype_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_wctype_h = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/wctype.h#{ + s#.*"\(.*/wctype.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_wctype_h='<'wctype.h'>' + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_wctype_h" >&5 +$as_echo "$gl_cv_next_wctype_h" >&6; } + fi + NEXT_WCTYPE_H=$gl_cv_next_wctype_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'wctype.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_wctype_h + fi + NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive + + + + HAVE_WCTYPE_H=1 + else + HAVE_WCTYPE_H=0 + fi + + + + if test "$gl_cv_func_iswcntrl_works" = no; then + REPLACE_ISWCNTRL=1 + else + REPLACE_ISWCNTRL=0 + fi + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking whether wcwidth is declared" >&5 +$as_echo_n "checking whether wcwidth is declared... " >&6; } +if test "${ac_cv_have_decl_wcwidth+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* AIX 3.2.5 declares wcwidth in . */ +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include + + +int +main () +{ +#ifndef wcwidth + (void) wcwidth; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_wcwidth=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_wcwidth=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_wcwidth" >&5 +$as_echo "$ac_cv_have_decl_wcwidth" >&6; } +if test "x$ac_cv_have_decl_wcwidth" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_WCWIDTH 1 +_ACEOF + + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_WCWIDTH 0 +_ACEOF + + +fi + + + if test $ac_cv_have_decl_wcwidth != yes; then + HAVE_DECL_WCWIDTH=0 + fi + + if test $ac_cv_func_wcwidth = no; then + REPLACE_WCWIDTH=1 + else + { $as_echo "$as_me:$LINENO: checking whether wcwidth works reasonably in UTF-8 locales" >&5 +$as_echo_n "checking whether wcwidth works reasonably in UTF-8 locales... " >&6; } +if test "${gl_cv_func_wcwidth_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_func_wcwidth_works="guessing no" +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +/* AIX 3.2.5 declares wcwidth in . */ +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include +#if !HAVE_DECL_WCWIDTH +extern +# ifdef __cplusplus +"C" +# endif +int wcwidth (int); +#endif +int main () +{ + if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL) + if (wcwidth (0x0301) > 0 || wcwidth (0x200B) > 0) + return 1; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_wcwidth_works=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_wcwidth_works=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_wcwidth_works" >&5 +$as_echo "$gl_cv_func_wcwidth_works" >&6; } + case "$gl_cv_func_wcwidth_works" in + *yes) ;; + *no) REPLACE_WCWIDTH=1 ;; + esac + fi + if test $REPLACE_WCWIDTH = 1; then + + + + + + + + + gl_LIBOBJS="$gl_LIBOBJS wcwidth.$ac_objext" + + fi + + if test $REPLACE_WCWIDTH = 1 || test $HAVE_DECL_WCWIDTH = 0; then + + + WCHAR_H=wchar.h + + fi + + + + GNULIB_WCWIDTH=1 + + + + + +for ac_header in stdint.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + + + + + + gltests_libdeps= + gltests_ltlibdeps= + + + + + + + + + + gl_source_base='tests' + + + + { $as_echo "$as_me:$LINENO: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:$LINENO: checking for a turkish Unicode locale" >&5 +$as_echo_n "checking for a turkish Unicode locale... " >&6; } +if test "${gt_cv_locale_tr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. But BeOS does not + implement the Turkish upper-/lowercase mappings. Therefore, let this + program return 1 on BeOS. */ + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the tr_TR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the eighth month, the second + character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f) + return 1; + /* Check whether the upper-/lowercase mappings are as expected for + Turkish. */ + if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i' + || towupper(0x0131) != 'I' || towlower ('I') != 0x0131) + return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr.UTF-8 + else + # None found. + gt_cv_locale_tr_utf8=none + fi + fi + fi + else + gt_cv_locale_tr_utf8=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_tr_utf8" >&5 +$as_echo "$gt_cv_locale_tr_utf8" >&6; } + LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8 + + + + + + + + { $as_echo "$as_me:$LINENO: checking if environ is properly declared" >&5 +$as_echo_n "checking if environ is properly declared... " >&6; } + if test "${gt_cv_var_environ_declaration+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + extern struct { int foo; } environ; +int +main () +{ +environ.foo = 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gt_cv_var_environ_declaration=no +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_var_environ_declaration=yes +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + { $as_echo "$as_me:$LINENO: result: $gt_cv_var_environ_declaration" >&5 +$as_echo "$gt_cv_var_environ_declaration" >&6; } + if test $gt_cv_var_environ_declaration = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ENVIRON_DECL 1 +_ACEOF + + fi + + + if test $gt_cv_var_environ_declaration != yes; then + HAVE_DECL_ENVIRON=0 + fi + + + + GNULIB_ENVIRON=1 + + + + + + + + + + + + + + +{ $as_echo "$as_me:$LINENO: checking for error_at_line" >&5 +$as_echo_n "checking for error_at_line... " >&6; } +if test "${ac_cv_lib_error_at_line+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +error_at_line (0, 0, "", 0, "an error occurred"); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + ac_cv_lib_error_at_line=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_lib_error_at_line=no +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_error_at_line" >&5 +$as_echo "$ac_cv_lib_error_at_line" >&6; } +if test $ac_cv_lib_error_at_line = no; then + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS error.$ac_objext" + +fi + + + + : + + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" + + + + XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" + + + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS exitfail.$ac_objext" + + + : + + + + + { $as_echo "$as_me:$LINENO: checking where to find the exponent in a 'double'" >&5 +$as_echo_n "checking where to find the exponent in a 'double'... " >&6; } +if test "${gl_cv_cc_double_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#if defined arm || defined __arm || defined __arm__ + mixed_endianness +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "mixed_endianness" >/dev/null 2>&1; then + gl_cv_cc_double_expbit0="unknown" +else + + + : +if test "${ac_cv_c_bigendian+set}" = set; then + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + + # Check for potential -arch flags. It is not universal unless + # there are some -arch flags. Note that *ppc* also matches + # ppc64. This check is also rather less than ideal. + case "${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" in #( + *-arch*ppc*|*-arch*i386*|*-arch*x86_64*) ac_cv_c_bigendian=universal;; + esac +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_bigendian=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_bigendian=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then + # Try to guess by grepping values from an object file. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_bigendian=no +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_bigendian=yes +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi +fi +: + case $ac_cv_c_bigendian in #( + yes) + gl_cv_cc_double_expbit0="word 0 bit 20";; #( + no) + gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( + universal) + +cat >>confdefs.h <<\_ACEOF +#define AC_APPLE_UNIVERSAL_BUILD 1 +_ACEOF + + ;; #( + *) + gl_cv_cc_double_expbit0="unknown" ;; + esac + + +fi +rm -f conftest* + + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (double x) +{ + memory_double m; + size_t i; + /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ + memset (&m, 0, sizeof (memory_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25); + add_to_ored_words (0.5); + add_to_ored_words (1.0); + add_to_ored_words (2.0); + add_to_ored_words (4.0); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_cc_double_expbit0=`cat conftest.out` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_cc_double_expbit0="unknown" +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + rm -f conftest.out + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_cc_double_expbit0" >&5 +$as_echo "$gl_cv_cc_double_expbit0" >&6; } + case "$gl_cv_cc_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define DBL_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + { $as_echo "$as_me:$LINENO: checking where to find the exponent in a 'float'" >&5 +$as_echo_n "checking where to find the exponent in a 'float'... " >&6; } +if test "${gl_cv_cc_float_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + gl_cv_cc_float_expbit0="word 0 bit 23" +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (float x) +{ + memory_float m; + size_t i; + /* Clear it first, in case + sizeof (float) < sizeof (memory_float). */ + memset (&m, 0, sizeof (memory_float)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25f); + add_to_ored_words (0.5f); + add_to_ored_words (1.0f); + add_to_ored_words (2.0f); + add_to_ored_words (4.0f); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_cc_float_expbit0=`cat conftest.out` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_cc_float_expbit0="unknown" +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + rm -f conftest.out + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_cc_float_expbit0" >&5 +$as_echo "$gl_cv_cc_float_expbit0" >&6; } + case "$gl_cv_cc_float_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define FLT_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + + { $as_echo "$as_me:$LINENO: checking where to find the exponent in a 'long double'" >&5 +$as_echo_n "checking where to find the exponent in a 'long double'... " >&6; } +if test "${gl_cv_cc_long_double_expbit0+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then + + gl_cv_cc_long_double_expbit0="unknown" + +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_long_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (long double x) +{ + memory_long_double m; + size_t i; + /* Clear it first, in case + sizeof (long double) < sizeof (memory_long_double). */ + memset (&m, 0, sizeof (memory_long_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25L); + add_to_ored_words (0.5L); + add_to_ored_words (1.0L); + add_to_ored_words (2.0L); + add_to_ored_words (4.0L); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_cc_long_double_expbit0=`cat conftest.out` +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_cc_long_double_expbit0="unknown" +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + rm -f conftest.out + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_cc_long_double_expbit0" >&5 +$as_echo "$gl_cv_cc_long_double_expbit0" >&6; } + case "$gl_cv_cc_long_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` + +cat >>confdefs.h <<_ACEOF +#define LDBL_EXPBIT0_WORD $word +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define LDBL_EXPBIT0_BIT $bit +_ACEOF + + ;; + esac + + + { $as_echo "$as_me:$LINENO: checking whether locale.h conforms to POSIX" >&5 +$as_echo_n "checking whether locale.h conforms to POSIX... " >&6; } +if test "${gl_cv_header_working_locale_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int x = LC_MESSAGES; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gl_cv_header_working_locale_h=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gl_cv_header_working_locale_h=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_header_working_locale_h" >&5 +$as_echo "$gl_cv_header_working_locale_h" >&6; } + if test $gl_cv_header_working_locale_h = yes; then + LOCALE_H= + else + + + + + + + + + + + + if test $gl_cv_have_include_next = yes; then + gl_cv_next_locale_h='<'locale.h'>' + else + { $as_echo "$as_me:$LINENO: checking absolute name of " >&5 +$as_echo_n "checking absolute name of ... " >&6; } +if test "${gl_cv_next_locale_h+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + if test $ac_cv_header_locale_h = yes; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + gl_cv_next_locale_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | + sed -n '\#/locale.h#{ + s#.*"\(.*/locale.h\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"' + else + gl_cv_next_locale_h='<'locale.h'>' + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_next_locale_h" >&5 +$as_echo "$gl_cv_next_locale_h" >&6; } + fi + NEXT_LOCALE_H=$gl_cv_next_locale_h + + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'locale.h'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=$gl_cv_next_locale_h + fi + NEXT_AS_FIRST_DIRECTIVE_LOCALE_H=$gl_next_as_first_directive + + + + LOCALE_H=locale.h + fi + + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:$LINENO: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional japanese locale" >&5 +$as_echo_n "checking for a traditional japanese locale... " >&6; } +if test "${gt_cv_locale_ja+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_ja" >&5 +$as_echo "$gt_cv_locale_ja" >&6; } + LOCALE_JA=$gt_cv_locale_ja + + + + + + { $as_echo "$as_me:$LINENO: checking for a transitional chinese locale" >&5 +$as_echo_n "checking for a transitional chinese locale... " >&6; } +if test "${gt_cv_locale_zh_CN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_zh_CN" >&5 +$as_echo "$gt_cv_locale_zh_CN" >&6; } + LOCALE_ZH_CN=$gt_cv_locale_zh_CN + + + + + { $as_echo "$as_me:$LINENO: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + + + + + + if test $ac_cv_func_setenv = no; then + HAVE_SETENV=0 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS setenv.$ac_objext" + + + + + + + + + + + +for ac_header in search.h +do +as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 +$as_echo_n "checking $ac_header usability... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 +$as_echo_n "checking $ac_header presence... " >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 +$as_echo_n "checking for $ac_header... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + +fi +as_val=`eval 'as_val=${'$as_ac_Header'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_func in tsearch +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + fi + + + + GNULIB_SETENV=1 + + + + + + { $as_echo "$as_me:$LINENO: checking for wchar_t" >&5 +$as_echo_n "checking for wchar_t... " >&6; } +if test "${gt_cv_c_wchar_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + wchar_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gt_cv_c_wchar_t=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_c_wchar_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_c_wchar_t" >&5 +$as_echo "$gt_cv_c_wchar_t" >&6; } + if test $gt_cv_c_wchar_t = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_WCHAR_T 1 +_ACEOF + + fi + + + { $as_echo "$as_me:$LINENO: checking for wint_t" >&5 +$as_echo_n "checking for wint_t... " >&6; } +if test "${gt_cv_c_wint_t+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include + wint_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gt_cv_c_wint_t=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_c_wint_t=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_c_wint_t" >&5 +$as_echo "$gt_cv_c_wint_t" >&6; } + if test $gt_cv_c_wint_t = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_WINT_T 1 +_ACEOF + + fi + + + + if test $REPLACE_STRERROR = 1; then + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS strerror.$ac_objext" + + +cat >>confdefs.h <<_ACEOF +#define REPLACE_STRERROR $REPLACE_STRERROR +_ACEOF + + fi + + + + GNULIB_STRERROR=1 + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:$LINENO: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional japanese locale" >&5 +$as_echo_n "checking for a traditional japanese locale... " >&6; } +if test "${gt_cv_locale_ja+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_ja" >&5 +$as_echo "$gt_cv_locale_ja" >&6; } + LOCALE_JA=$gt_cv_locale_ja + + + + + { $as_echo "$as_me:$LINENO: checking for a turkish Unicode locale" >&5 +$as_echo_n "checking for a turkish Unicode locale... " >&6; } +if test "${gt_cv_locale_tr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. But BeOS does not + implement the Turkish upper-/lowercase mappings. Therefore, let this + program return 1 on BeOS. */ + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the tr_TR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the eighth month, the second + character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f) + return 1; + /* Check whether the upper-/lowercase mappings are as expected for + Turkish. */ + if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i' + || towupper(0x0131) != 'I' || towlower ('I') != 0x0131) + return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr.UTF-8 + else + # None found. + gt_cv_locale_tr_utf8=none + fi + fi + fi + else + gt_cv_locale_tr_utf8=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_tr_utf8" >&5 +$as_echo "$gt_cv_locale_tr_utf8" >&6; } + LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8 + + + + + + { $as_echo "$as_me:$LINENO: checking for a transitional chinese locale" >&5 +$as_echo_n "checking for a transitional chinese locale... " >&6; } +if test "${gt_cv_locale_zh_CN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_zh_CN" >&5 +$as_echo "$gt_cv_locale_zh_CN" >&6; } + LOCALE_ZH_CN=$gt_cv_locale_zh_CN + + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:$LINENO: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:$LINENO: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:$LINENO: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:$LINENO: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:$LINENO: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + { $as_echo "$as_me:$LINENO: checking for a french Unicode locale" >&5 +$as_echo_n "checking for a french Unicode locale... " >&6; } +if test "${gt_cv_locale_fr_utf8+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr_utf8" >&5 +$as_echo "$gt_cv_locale_fr_utf8" >&6; } + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + + + + + + { $as_echo "$as_me:$LINENO: checking for a traditional french locale" >&5 +$as_echo_n "checking for a traditional french locale... " >&6; } +if test "${gt_cv_locale_fr+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} + +_ACEOF + if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_locale_fr" >&5 +$as_echo "$gt_cv_locale_fr" >&6; } + LOCALE_FR=$gt_cv_locale_fr + + + + + +for ac_func in unsetenv +do +as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 +$as_echo_n "checking for $ac_func... " >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then + eval "$as_ac_var=yes" +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -rf conftest.dSYM +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +as_val=`eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` + if test "x$as_val" = x""yes; then + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + if test $ac_cv_func_unsetenv = no; then + HAVE_UNSETENV=0 + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS unsetenv.$ac_objext" + + + + + + + + + + + else + { $as_echo "$as_me:$LINENO: checking for unsetenv() return type" >&5 +$as_echo_n "checking for unsetenv() return type... " >&6; } +if test "${gt_cv_func_unsetenv_ret+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +int unsetenv (const char *name); +#else +int unsetenv(); +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + gt_cv_func_unsetenv_ret='int' +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + gt_cv_func_unsetenv_ret='void' +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $gt_cv_func_unsetenv_ret" >&5 +$as_echo "$gt_cv_func_unsetenv_ret" >&6; } + if test $gt_cv_func_unsetenv_ret = 'void'; then + VOID_UNSETENV=1 + fi + fi + + + + GNULIB_UNSETENV=1 + + + + + + + + + + + if test $ac_cv_func_wctob = no; then + HAVE_DECL_WCTOB=0 + + + WCHAR_H=wchar.h + + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS wctob.$ac_objext" + + + : + + else + + + + { $as_echo "$as_me:$LINENO: checking whether wctob works" >&5 +$as_echo_n "checking whether wctob works... " >&6; } +if test "${gl_cv_func_wctob_works+set}" = set; then + $as_echo_n "(cached) " >&6 +else + + case "$host_os" in + # Guess no on Solaris <= 9. + solaris2.[1-9] | solaris2.[1-9].*) + gl_cv_func_wctob_works="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_wctob_works="guessing yes" ;; + esac + if test $LOCALE_FR != none; then + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + wchar_t wc; + + if (mbtowc (&wc, "\374", 1) == 1) + if (wctob (wc) != (unsigned char) '\374') + return 1; + } + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gl_cv_func_wctob_works=yes +else + $as_echo "$as_me: program exited with status $ac_status" >&5 +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gl_cv_func_wctob_works=no +fi +rm -rf conftest.dSYM +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + fi + +fi +{ $as_echo "$as_me:$LINENO: result: $gl_cv_func_wctob_works" >&5 +$as_echo "$gl_cv_func_wctob_works" >&6; } + case "$gl_cv_func_wctob_works" in + *yes) ;; + *) REPLACE_WCTOB=1 ;; + esac + if test $REPLACE_WCTOB = 1; then + + + WCHAR_H=wchar.h + + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS wctob.$ac_objext" + + + : + + else + + { $as_echo "$as_me:$LINENO: checking whether wctob is declared" >&5 +$as_echo_n "checking whether wctob is declared... " >&6; } +if test "${ac_cv_have_decl_wctob+set}" = set; then + $as_echo_n "(cached) " >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include + + +int +main () +{ +#ifndef wctob + (void) wctob; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" +$as_echo "$ac_try_echo") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_have_decl_wctob=yes +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_have_decl_wctob=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:$LINENO: result: $ac_cv_have_decl_wctob" >&5 +$as_echo "$ac_cv_have_decl_wctob" >&6; } +if test "x$ac_cv_have_decl_wctob" = x""yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_WCTOB 1 +_ACEOF + + +else + cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_WCTOB 0 +_ACEOF + + +fi + + + if test $ac_cv_have_decl_wctob != yes; then + HAVE_DECL_WCTOB=0 + + + WCHAR_H=wchar.h + + fi + fi + fi + + + + GNULIB_WCTOB=1 + + + + + + + + + + + gltests_LIBOBJS="$gltests_LIBOBJS xmalloc.$ac_objext" + + + + + : + + + : + + + + + + + + + + + + LIBTESTS_LIBDEPS="$gltests_libdeps" + + + +if test "$enable_shared" = yes; then + case "$host_os" in + mingw* | cygwin*) is_woe32dll=yes ;; + *) is_woe32dll=no ;; + esac +else + is_woe32dll=no +fi + if test $is_woe32dll = yes; then + WOE32DLL_TRUE= + WOE32DLL_FALSE='#' +else + WOE32DLL_TRUE='#' + WOE32DLL_FALSE= +fi + +if test $is_woe32dll = yes; then + DLL_VARIABLE='__declspec (dllimport)' +else + DLL_VARIABLE= +fi + +if test $is_woe32dll = yes; then + +cat >>confdefs.h <<\_ACEOF +#define WOE32DLL 1 +_ACEOF + +fi + +# Check whether --enable-namespacing was given. +if test "${enable_namespacing+set}" = set; then + enableval=$enable_namespacing; : +else + enable_namespacing=yes +fi + +if test "$enable_namespacing" != no; then + NAMESPACING=yes +else + NAMESPACING= +fi + + +{ $as_echo "$as_me:$LINENO: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" \ + && { test "$build" = "$host" \ + || { test "$build_os" = cygwin && test "$host_os" = mingw32; }; \ + }; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:$LINENO: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:$LINENO: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + +{ $as_echo "$as_me:$LINENO: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:38857: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:38860: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:38863: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:$LINENO: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + + + + + GLOBAL_SYMBOL_PIPE=$lt_cv_sys_global_symbol_pipe + + if test -n "$GLOBAL_SYMBOL_PIPE"; then + HAVE_GLOBAL_SYMBOL_PIPE=1 + else + HAVE_GLOBAL_SYMBOL_PIPE= + fi + + + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:$LINENO: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + + +sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;} +i\ +0 +q +' +sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;} +i\ +0 +q +' + +version_major=`echo "${VERSION}" | sed -n -e "$sed_extract_major"` +version_minor=`echo "${VERSION}" | sed -n -e "$sed_extract_minor"` +HEXVERSION=0x`$AWK 'BEGIN { printf("%02d%02d"',"$version_major","$version_minor"') }'` + + +ac_aux_dir_abs=`cd $ac_aux_dir && pwd` +# Extract the first word of "texi2dvi", so it can be a program name with args. +set dummy texi2dvi; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TEXI2DVI+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $TEXI2DVI in + [\\/]* | ?:[\\/]*) + ac_cv_path_TEXI2DVI="$TEXI2DVI" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TEXI2DVI="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + test -z "$ac_cv_path_TEXI2DVI" && ac_cv_path_TEXI2DVI="$ac_aux_dir_abs/missing texi2dvi" + ;; +esac +fi +TEXI2DVI=$ac_cv_path_TEXI2DVI +if test -n "$TEXI2DVI"; then + { $as_echo "$as_me:$LINENO: result: $TEXI2DVI" >&5 +$as_echo "$TEXI2DVI" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "dvips", so it can be a program name with args. +set dummy dvips; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DVIPS+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $DVIPS in + [\\/]* | ?:[\\/]*) + ac_cv_path_DVIPS="$DVIPS" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + test -z "$ac_cv_path_DVIPS" && ac_cv_path_DVIPS="$ac_aux_dir_abs/missing dvips" + ;; +esac +fi +DVIPS=$ac_cv_path_DVIPS +if test -n "$DVIPS"; then + { $as_echo "$as_me:$LINENO: result: $DVIPS" >&5 +$as_echo "$DVIPS" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PERL+set}" = set; then + $as_echo_n "(cached) " >&6 +else + case $PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="$ac_aux_dir_abs/missing perl" + ;; +esac +fi +PERL=$ac_cv_path_PERL +if test -n "$PERL"; then + { $as_echo "$as_me:$LINENO: result: $PERL" >&5 +$as_echo "$PERL" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +ac_config_files="$ac_config_files Makefile" + +ac_config_files="$ac_config_files doc/Makefile" + +ac_config_files="$ac_config_files gnulib-local/Makefile" + +ac_config_files="$ac_config_files lib/Makefile" + +ac_config_files="$ac_config_files lib/exported.sh" + +ac_config_files="$ac_config_files lib/unistring/version.h:lib/unistring/version.in.h" + +ac_config_files="$ac_config_files lib/unistring/woe32dll.h:lib/unistring/woe32dll.in.h" + +ac_config_files="$ac_config_files tests/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${WOE32_TRUE}" && test -z "${WOE32_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"WOE32\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"WOE32\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"GL_COND_LIBTOOL\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"GL_COND_LIBTOOL\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + + + + gl_libobjs= + gl_ltlibobjs= + if test -n "$gl_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do + gl_libobjs="$gl_libobjs $i.$ac_objext" + gl_ltlibobjs="$gl_ltlibobjs $i.lo" + done + fi + gl_LIBOBJS=$gl_libobjs + + gl_LTLIBOBJS=$gl_ltlibobjs + + + + + gltests_libobjs= + gltests_ltlibobjs= + if test -n "$gltests_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do + gltests_libobjs="$gltests_libobjs $i.$ac_objext" + gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" + done + fi + gltests_LIBOBJS=$gltests_libobjs + + gltests_LTLIBOBJS=$gltests_ltlibobjs + + +if test -z "${WOE32DLL_TRUE}" && test -z "${WOE32DLL_FALSE}"; then + { { $as_echo "$as_me:$LINENO: error: conditional \"WOE32DLL\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +$as_echo "$as_me: error: conditional \"WOE32DLL\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.63. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTION]... [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.63, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { $as_echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { $as_echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' +LD_RC='`$ECHO "X$LD_RC" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds_RC='`$ECHO "X$old_archive_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +compiler_RC='`$ECHO "X$compiler_RC" | $Xsed -e "$delay_single_quote_subst"`' +GCC_RC='`$ECHO "X$GCC_RC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_RC='`$ECHO "X$lt_prog_compiler_no_builtin_flag_RC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl_RC='`$ECHO "X$lt_prog_compiler_wl_RC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic_RC='`$ECHO "X$lt_prog_compiler_pic_RC" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static_RC='`$ECHO "X$lt_prog_compiler_static_RC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_RC='`$ECHO "X$lt_cv_prog_compiler_c_o_RC" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc_RC='`$ECHO "X$archive_cmds_need_lc_RC" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_RC='`$ECHO "X$enable_shared_with_static_runtimes_RC" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec_RC='`$ECHO "X$export_dynamic_flag_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec_RC='`$ECHO "X$whole_archive_flag_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object_RC='`$ECHO "X$compiler_needs_object_RC" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds_RC='`$ECHO "X$old_archive_from_new_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_RC='`$ECHO "X$old_archive_from_expsyms_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_RC='`$ECHO "X$archive_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds_RC='`$ECHO "X$archive_expsym_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds_RC='`$ECHO "X$module_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds_RC='`$ECHO "X$module_expsym_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld_RC='`$ECHO "X$with_gnu_ld_RC" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag_RC='`$ECHO "X$allow_undefined_flag_RC" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag_RC='`$ECHO "X$no_undefined_flag_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_RC='`$ECHO "X$hardcode_libdir_flag_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_RC='`$ECHO "X$hardcode_libdir_flag_spec_ld_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator_RC='`$ECHO "X$hardcode_libdir_separator_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_RC='`$ECHO "X$hardcode_direct_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute_RC='`$ECHO "X$hardcode_direct_absolute_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L_RC='`$ECHO "X$hardcode_minus_L_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var_RC='`$ECHO "X$hardcode_shlibpath_var_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic_RC='`$ECHO "X$hardcode_automatic_RC" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath_RC='`$ECHO "X$inherit_rpath_RC" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs_RC='`$ECHO "X$link_all_deplibs_RC" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path_RC='`$ECHO "X$fix_srcfile_path_RC" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols_RC='`$ECHO "X$always_export_symbols_RC" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds_RC='`$ECHO "X$export_symbols_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms_RC='`$ECHO "X$exclude_expsyms_RC" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms_RC='`$ECHO "X$include_expsyms_RC" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds_RC='`$ECHO "X$prelink_cmds_RC" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec_RC='`$ECHO "X$file_list_spec_RC" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action_RC='`$ECHO "X$hardcode_action_RC" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib \ +LD_RC \ +compiler_RC \ +lt_prog_compiler_no_builtin_flag_RC \ +lt_prog_compiler_wl_RC \ +lt_prog_compiler_pic_RC \ +lt_prog_compiler_static_RC \ +lt_cv_prog_compiler_c_o_RC \ +export_dynamic_flag_spec_RC \ +whole_archive_flag_spec_RC \ +compiler_needs_object_RC \ +with_gnu_ld_RC \ +allow_undefined_flag_RC \ +no_undefined_flag_RC \ +hardcode_libdir_flag_spec_RC \ +hardcode_libdir_flag_spec_ld_RC \ +hardcode_libdir_separator_RC \ +fix_srcfile_path_RC \ +exclude_expsyms_RC \ +include_expsyms_RC \ +file_list_spec_RC; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +old_archive_cmds_RC \ +old_archive_from_new_cmds_RC \ +old_archive_from_expsyms_cmds_RC \ +archive_cmds_RC \ +archive_expsym_cmds_RC \ +module_cmds_RC \ +module_expsym_cmds_RC \ +export_symbols_cmds_RC \ +prelink_cmds_RC; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "gnulib-local/Makefile") CONFIG_FILES="$CONFIG_FILES gnulib-local/Makefile" ;; + "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "lib/exported.sh") CONFIG_FILES="$CONFIG_FILES lib/exported.sh" ;; + "lib/unistring/version.h") CONFIG_FILES="$CONFIG_FILES lib/unistring/version.h:lib/unistring/version.in.h" ;; + "lib/unistring/woe32dll.h") CONFIG_FILES="$CONFIG_FILES lib/unistring/woe32dll.h:lib/unistring/woe32dll.in.h" ;; + "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + + *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + $as_echo "$as_me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=' ' +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 +$as_echo "$as_me: error: could not setup config files machinery" >&2;} + { (exit 1); exit 1; }; } +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 +$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 +$as_echo "$as_me: error: could not setup config headers machinery" >&2;} + { (exit 1); exit 1; }; } +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 +$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + ac_file_inputs="$ac_file_inputs '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 +$as_echo "$as_me: error: could not create $ac_file" >&2;} + { (exit 1); exit 1; }; } + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 +$as_echo "$as_me: error: could not create -" >&2;} + { (exit 1); exit 1; }; } + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir=$dirpart/$fdir + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="RC " + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Assembler program. +AS=$AS + +# DLL creation program. +DLLTOOL=$DLLTOOL + +# Object dumper program. +OBJDUMP=$OBJDUMP + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: RC + +# The linker used to build libraries. +LD=$lt_LD_RC + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_RC + +# A language specific compiler. +CC=$lt_compiler_RC + +# Is the compiler the GNU compiler? +with_gcc=$GCC_RC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_RC + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_RC + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_RC + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_RC + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_RC + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_RC +archive_expsym_cmds=$lt_archive_expsym_cmds_RC + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_RC +module_expsym_cmds=$lt_module_expsym_cmds_RC + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_RC + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_RC + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_RC + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_RC + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_RC + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_RC + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_RC + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_RC + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_RC + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_RC + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_RC + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_RC + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_RC + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_RC + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_RC + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_RC + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_RC + +# ### END LIBTOOL TAG CONFIG: RC +_LT_EOF + + ;; + + esac +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 00000000..4c513457 --- /dev/null +++ b/configure.ac @@ -0,0 +1,153 @@ +dnl Configuration for the toplevel directory of GNU libunistring +dnl Copyright (C) 2009 Free Software Foundation, Inc. +dnl +dnl This program is free software: you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 3 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +dnl GNU General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program. If not, see . + +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ([2.63]) +AC_INIT +AC_CONFIG_SRCDIR([lib/unistring/version.in.h]) +AC_CONFIG_AUX_DIR([build-aux]) +. $srcdir/version.sh +gl_INIT_PACKAGE([libunistring], [$VERSION_NUMBER]) +AM_INIT_AUTOMAKE([silent-rules]) +AM_CONFIG_HEADER([config.h]) + +dnl Override automake's tar command used for creating distributions. +am__tar='${AMTAR} chof - --owner=root --group=root "$$tardir"' + +dnl Checks for basic programs. + +AC_PROG_CC +AC_PROG_CPP +AC_PROG_INSTALL +AC_PROG_MKDIR_P + +dnl Check for host type. + +AC_CANONICAL_HOST + +dnl Checks that augment the CPPFLAGS. + +gl_EARLY + +dnl Checks for compiler output filename suffixes. + +AC_OBJEXT +AC_EXEEXT + +dnl Check for build configuration. + +gl_WOE32_DLL + +LT_INIT([win32-dll]) + +dnl Prepares the libtool configuration for handling of Windows resources, and +dnl sets the RC variable to a program that compiles Windows resource files. +LT_LANG([Windows Resource]) + +dnl On mingw and Cygwin, we can activate special Makefile rules which add +dnl version information to the shared libraries and executables. +case "$host_os" in + mingw* | cygwin*) is_woe32=yes ;; + *) is_woe32=no ;; +esac +AM_CONDITIONAL([WOE32], [test $is_woe32 = yes]) + +dnl Checks for types, header files, functions and declarations. + +gl_INIT + +dnl Compilation on mingw and Cygwin needs special Makefile rules, because +dnl 1. when we install a shared library, we must arrange to export +dnl auxiliary pointer variables for every exported variable, +dnl 2. when we install a shared library and a static library simultaneously, +dnl the include file specifies __declspec(dllimport) and therefore we +dnl must arrange to define the auxiliary pointer variables for the +dnl exported variables _also_ in the static library. +if test "$enable_shared" = yes; then + case "$host_os" in + mingw* | cygwin*) is_woe32dll=yes ;; + *) is_woe32dll=no ;; + esac +else + is_woe32dll=no +fi +AM_CONDITIONAL([WOE32DLL], [test $is_woe32dll = yes]) +if test $is_woe32dll = yes; then + DLL_VARIABLE='__declspec (dllimport)' +else + DLL_VARIABLE= +fi +AC_SUBST([DLL_VARIABLE]) +dnl Some parts of the tests have to be skipped when the tests are linked with +dnl the shared library. This is because in this situation, the address of a +dnl global variable in the shared library cannot be used as initializer of a +dnl global or static variable. +dnl gcc would say: "error: initializer element is not constant". +if test $is_woe32dll = yes; then + AC_DEFINE([WOE32DLL], [1], + [Define when --enable-shared is used on mingw or Cygwin.]) +fi + +dnl Namespacing is the default: it builds a namespace clean library. +dnl Allow the user to disable namespacing. This speeds up "make" considerably. +AC_ARG_ENABLE([namespacing], + [ --disable-namespacing build a library that exports undesired symbols], + [:], [enable_namespacing=yes]) +if test "$enable_namespacing" != no; then + NAMESPACING=yes +else + NAMESPACING= +fi +AC_SUBST([NAMESPACING]) + +dnl Check for prerequisites of exported.sh. +gt_GLOBAL_SYMBOL_PIPE + +dnl Substitutable version number. +AC_PROG_AWK +changequote(,) +sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;} +i\ +0 +q +' +sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;} +i\ +0 +q +' +changequote([,]) +version_major=`echo "${VERSION}" | sed -n -e "$sed_extract_major"` +version_minor=`echo "${VERSION}" | sed -n -e "$sed_extract_minor"` +HEXVERSION=0x`$AWK 'BEGIN { printf("%02d%02d"',"$version_major","$version_minor"') }'` +AC_SUBST([HEXVERSION]) + +dnl Check for tools needed for formatting the documentation. +ac_aux_dir_abs=`cd $ac_aux_dir && pwd` +AC_PATH_PROG([TEXI2DVI], [texi2dvi], [$ac_aux_dir_abs/missing texi2dvi]) +AC_PATH_PROG([DVIPS], [dvips], [$ac_aux_dir_abs/missing dvips]) +AC_PATH_PROG([PERL], [perl], [$ac_aux_dir_abs/missing perl]) + +AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([doc/Makefile]) +AC_CONFIG_FILES([gnulib-local/Makefile]) +AC_CONFIG_FILES([lib/Makefile]) +AC_CONFIG_FILES([lib/exported.sh]) +AC_CONFIG_FILES([lib/unistring/version.h:lib/unistring/version.in.h]) +AC_CONFIG_FILES([lib/unistring/woe32dll.h:lib/unistring/woe32dll.in.h]) +AC_CONFIG_FILES([tests/Makefile]) +AC_OUTPUT diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 00000000..a66c69da --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,185 @@ +## Makefile for the doc subdirectory of GNU libunistring. +## Copyright (C) 2009 Free Software Foundation, Inc. +## +## This program is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . + +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = 1.5 gnits +EXTRA_DIST = +MOSTLYCLEANFILES = + +# List of -I options referring to directories that contain texinfo sources +# used by this directory. +# Should contain at least one -I option, to work around a bug in texi2dvi 1.13, +# see . +TEXINCLUDES = -I . + +MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@ +MAKEINFOFLAGS = $(TEXINCLUDES) --no-split + +info_TEXINFOS = libunistring.texi +# List of texinfo sources @included by libunistring.texi, excluding version.texi. +libunistring_TEXINFOS = \ + unitypes.texi unistr.texi uniconv.texi unistdio.texi uniname.texi \ + unictype.texi uniwidth.texi uniwbrk.texi unilbrk.texi uninorm.texi \ + unicase.texi uniregex.texi \ + gpl.texi lgpl.texi fdl.texi + +# The dependencies of stamp-vti generated by automake are incomplete. +# So we have to duplicate the entire rule which would otherwise be generated +# by automake. +$(srcdir)/stamp-vti: $(info_TEXINFOS) $(libunistring_TEXINFOS) $(top_srcdir)/version.sh + (dir=.; test -f ./libunistring.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/libunistring.texi`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > vti.tmp + cmp -s vti.tmp $(srcdir)/version.texi \ + || (echo "Updating $(srcdir)/version.texi"; \ + cp vti.tmp $(srcdir)/version.texi) + rm -f vti.tmp + cp $(srcdir)/version.texi $@ + +# We distribute only the split HTML documentation. +# The user can generate the others, via +# make libunistring.ps +# make libunistring.pdf +# make libunistring.html + +all-local: html-local +install-data-local: install-html +installdirs-local: installdirs-html +uninstall-local: uninstall-html +dist-hook: dist-html + +html-local: html-split +# Override of automake's definition. The HTML files we want to distribute are +# not the ones that automake knows about, and we cannot define HTMLS to a value +# containing wildcards. +install-html: install-html-split + @: +uninstall-html: uninstall-html-split +dist-html: dist-html-split + +# CLEANFILES: libunistring.{dvi,ps,pdf,html} are already known to automake. +MAINTAINERCLEANFILES = libunistring_*.html + + +# Documentation in DVI format. + +# Override of automake's definition: +#TEXI2DVI = @TEXI2DVI@ +TEXI2DVI = @TEXI2DVI@ $(TEXINCLUDES) + +# The install-dvi target is already defined by automake. + +installdirs-dvi: + $(mkdir_p) $(DESTDIR)$(dvidir) + +uninstall-dvi: + $(RM) $(DESTDIR)$(dvidir)/libunistring.dvi + + +# Documentation in Postscript format. + +# Override of automake's definition: +#DVIPS = @DVIPS@ +DVIPS = @DVIPS@ -D600 + +libunistring.ps: libunistring.dvi + $(DVIPS) -o $@ `if test -f libunistring.dvi; then echo libunistring.dvi; else echo $(srcdir)/libunistring.dvi; fi` + +# The install-ps target is already defined by automake. + +installdirs-ps: + $(mkdir_p) $(DESTDIR)$(psdir) + +uninstall-ps: + $(RM) $(DESTDIR)$(psdir)/libunistring.ps + + +# Documentation in Portable Document Format. + +# Override of automake's definition: +#TEXI2PDF = @TEXI2DVI@ --pdf +TEXI2PDF = @TEXI2DVI@ --pdf $(TEXINCLUDES) + +# The install-pdf target is already defined by automake. + +installdirs-pdf: + $(mkdir_p) $(DESTDIR)$(pdfdir) + +uninstall-pdf: + $(RM) $(DESTDIR)$(pdfdir)/libunistring.pdf + + +# Documentation in HTML format. + +TEXI2HTML = @PERL@ $(top_srcdir)/build-aux/texi2html + +html-monolithic: libunistring.html +html-split: libunistring_toc.html + +# Override of automake's definition. +# We want to use texi2html, not makeinfo --html. +libunistring.html: libunistring.texi version.texi $(libunistring_TEXINFOS) + $(TEXI2HTML) $(TEXINCLUDES) -no-sec-nav -no-menu -toc-links -number -monolithic `if test -f libunistring.texi; then echo libunistring.texi; else echo $(srcdir)/libunistring.texi; fi` + +libunistring_toc.html: libunistring.texi version.texi $(libunistring_TEXINFOS) + case "@PERL@" in \ + *"/missing perl") \ + $(TEXI2HTML) $(TEXINCLUDES) -no-sec-nav -no-menu -toc-links -number -split_chapter `if test -f libunistring.texi; then echo libunistring.texi; else echo $(srcdir)/libunistring.texi; fi` || exit 0 ;; \ + *) $(RM) libunistring_*.html ; \ + $(TEXI2HTML) $(TEXINCLUDES) -no-sec-nav -no-menu -toc-links -number -split_chapter `if test -f libunistring.texi; then echo libunistring.texi; else echo $(srcdir)/libunistring.texi; fi` ;; \ + esac \ + && { mv libunistring/libunistring.html libunistring_toc.html; \ + mv libunistring/*.html .; \ + rmdir libunistring; \ + } + +install-html-monolithic: libunistring.html + $(mkdir_p) $(DESTDIR)$(htmldir) + $(INSTALL_DATA) `if test -f libunistring.html; then echo .; else echo $(srcdir); fi`/libunistring.html $(DESTDIR)$(htmldir)/libunistring.html + +install-html-split: libunistring_toc.html + $(mkdir_p) $(DESTDIR)$(htmldir) + for file in `if test -f libunistring_toc.html; then echo .; else echo $(srcdir); fi`/libunistring_*.html; do \ + $(INSTALL_DATA) $$file $(DESTDIR)$(htmldir)/`basename $$file`; \ + done + +installdirs-html: + $(mkdir_p) $(DESTDIR)$(htmldir) + +uninstall-html-monolithic: + $(RM) $(DESTDIR)$(htmldir)/libunistring.html + +uninstall-html-split: + $(RM) $(DESTDIR)$(htmldir)/libunistring_*.html + +dist-html-monolithic: + $(mkdir_p) $(distdir)/ + file=libunistring.html; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + cp -p $$d/$$file $(distdir)/$$file || exit 1 + +# We would like to put libunistring_*.html into EXTRA_DIST, but it doesn't work. +dist-html-split: + $(mkdir_p) $(distdir)/ + file=libunistring_toc.html; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + for file in `cd $$d && echo libunistring_*.html`; do \ + cp -p $$d/$$file $(distdir)/$$file || exit 1; \ + done diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 00000000..66a4a3bc --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,1207 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +DIST_COMMON = $(libunistring_TEXINFOS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/stamp-vti \ + $(srcdir)/version.texi +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ + $(top_srcdir)/gnulib-m4/alloca.m4 \ + $(top_srcdir)/gnulib-m4/codeset.m4 \ + $(top_srcdir)/gnulib-m4/eealloc.m4 \ + $(top_srcdir)/gnulib-m4/environ.m4 \ + $(top_srcdir)/gnulib-m4/errno_h.m4 \ + $(top_srcdir)/gnulib-m4/error.m4 \ + $(top_srcdir)/gnulib-m4/exitfail.m4 \ + $(top_srcdir)/gnulib-m4/exponentd.m4 \ + $(top_srcdir)/gnulib-m4/exponentf.m4 \ + $(top_srcdir)/gnulib-m4/exponentl.m4 \ + $(top_srcdir)/gnulib-m4/extensions.m4 \ + $(top_srcdir)/gnulib-m4/float_h.m4 \ + $(top_srcdir)/gnulib-m4/fpieee.m4 \ + $(top_srcdir)/gnulib-m4/frexp.m4 \ + $(top_srcdir)/gnulib-m4/frexpl.m4 \ + $(top_srcdir)/gnulib-m4/getpagesize.m4 \ + $(top_srcdir)/gnulib-m4/glibc21.m4 \ + $(top_srcdir)/gnulib-m4/gnulib-common.m4 \ + $(top_srcdir)/gnulib-m4/gnulib-comp.m4 \ + $(top_srcdir)/gnulib-m4/iconv.m4 \ + $(top_srcdir)/gnulib-m4/iconv_h.m4 \ + $(top_srcdir)/gnulib-m4/iconv_open.m4 \ + $(top_srcdir)/gnulib-m4/include_next.m4 \ + $(top_srcdir)/gnulib-m4/inline.m4 \ + $(top_srcdir)/gnulib-m4/intlmacosx.m4 \ + $(top_srcdir)/gnulib-m4/intmax_t.m4 \ + $(top_srcdir)/gnulib-m4/inttypes_h.m4 \ + $(top_srcdir)/gnulib-m4/isnand.m4 \ + $(top_srcdir)/gnulib-m4/isnanf.m4 \ + $(top_srcdir)/gnulib-m4/isnanl.m4 \ + $(top_srcdir)/gnulib-m4/lcmessage.m4 \ + $(top_srcdir)/gnulib-m4/ldexpl.m4 \ + $(top_srcdir)/gnulib-m4/lib-ld.m4 \ + $(top_srcdir)/gnulib-m4/lib-link.m4 \ + $(top_srcdir)/gnulib-m4/lib-prefix.m4 \ + $(top_srcdir)/gnulib-m4/localcharset.m4 \ + $(top_srcdir)/gnulib-m4/locale-fr.m4 \ + $(top_srcdir)/gnulib-m4/locale-ja.m4 \ + $(top_srcdir)/gnulib-m4/locale-tr.m4 \ + $(top_srcdir)/gnulib-m4/locale-zh.m4 \ + $(top_srcdir)/gnulib-m4/locale_h.m4 \ + $(top_srcdir)/gnulib-m4/localename.m4 \ + $(top_srcdir)/gnulib-m4/longlong.m4 \ + $(top_srcdir)/gnulib-m4/malloc.m4 \ + $(top_srcdir)/gnulib-m4/malloca.m4 \ + $(top_srcdir)/gnulib-m4/math_h.m4 \ + $(top_srcdir)/gnulib-m4/mbchar.m4 \ + $(top_srcdir)/gnulib-m4/mbiter.m4 \ + $(top_srcdir)/gnulib-m4/mbrtowc.m4 \ + $(top_srcdir)/gnulib-m4/mbsinit.m4 \ + $(top_srcdir)/gnulib-m4/mbstate_t.m4 \ + $(top_srcdir)/gnulib-m4/memchr.m4 \ + $(top_srcdir)/gnulib-m4/minmax.m4 \ + $(top_srcdir)/gnulib-m4/mmap-anon.m4 \ + $(top_srcdir)/gnulib-m4/multiarch.m4 \ + $(top_srcdir)/gnulib-m4/nocrash.m4 \ + $(top_srcdir)/gnulib-m4/printf-frexp.m4 \ + $(top_srcdir)/gnulib-m4/printf-frexpl.m4 \ + $(top_srcdir)/gnulib-m4/printf.m4 \ + $(top_srcdir)/gnulib-m4/relocatable-lib.m4 \ + $(top_srcdir)/gnulib-m4/setenv.m4 \ + $(top_srcdir)/gnulib-m4/signbit.m4 \ + $(top_srcdir)/gnulib-m4/size_max.m4 \ + $(top_srcdir)/gnulib-m4/stdbool.m4 \ + $(top_srcdir)/gnulib-m4/stdint.m4 \ + $(top_srcdir)/gnulib-m4/stdint_h.m4 \ + $(top_srcdir)/gnulib-m4/stdlib_h.m4 \ + $(top_srcdir)/gnulib-m4/strerror.m4 \ + $(top_srcdir)/gnulib-m4/string_h.m4 \ + $(top_srcdir)/gnulib-m4/unistd_h.m4 \ + $(top_srcdir)/gnulib-m4/vasnprintf.m4 \ + $(top_srcdir)/gnulib-m4/wchar.m4 \ + $(top_srcdir)/gnulib-m4/wchar_t.m4 \ + $(top_srcdir)/gnulib-m4/wctob.m4 \ + $(top_srcdir)/gnulib-m4/wctype.m4 \ + $(top_srcdir)/gnulib-m4/wcwidth.m4 \ + $(top_srcdir)/gnulib-m4/wint_t.m4 \ + $(top_srcdir)/gnulib-m4/xalloc.m4 \ + $(top_srcdir)/gnulib-m4/xsize.m4 $(top_srcdir)/m4/exported.m4 \ + $(top_srcdir)/m4/init-package-version.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/woe32-dll.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +INFO_DEPS = $(srcdir)/libunistring.info +TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex +am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux +DVIS = libunistring.dvi +PDFS = libunistring.pdf +PSS = libunistring.ps +HTMLS = libunistring.html +TEXINFOS = libunistring.texi +MAKEINFOHTML = $(MAKEINFO) --html +AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) +am__installdirs = "$(DESTDIR)$(infodir)" +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DLL_VARIABLE = @DLL_VARIABLE@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ + +# Documentation in Postscript format. + +# Override of automake's definition: +#DVIPS = @DVIPS@ +DVIPS = @DVIPS@ -D600 +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +GLIBC21 = @GLIBC21@ +GLOBAL_SYMBOL_PIPE = @GLOBAL_SYMBOL_PIPE@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MATHL = @GNULIB_MATHL@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@ +HAVE_GLOBAL_SYMBOL_PIPE = @HAVE_GLOBAL_SYMBOL_PIPE@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HEXVERSION = @HEXVERSION@ +ICONV_H = @ICONV_H@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_H = @LOCALE_H@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NAMESPACING = @NAMESPACING@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +RC = @RC@ +RELOCATABLE = @RELOCATABLE@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ + +# Documentation in DVI format. + +# Override of automake's definition: +#TEXI2DVI = @TEXI2DVI@ +TEXI2DVI = @TEXI2DVI@ $(TEXINCLUDES) +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +VERSION = @VERSION@ +VOID_UNSETENV = @VOID_UNSETENV@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = 1.5 gnits +EXTRA_DIST = +MOSTLYCLEANFILES = + +# List of -I options referring to directories that contain texinfo sources +# used by this directory. +# Should contain at least one -I option, to work around a bug in texi2dvi 1.13, +# see . +TEXINCLUDES = -I . +MAKEINFOFLAGS = $(TEXINCLUDES) --no-split +info_TEXINFOS = libunistring.texi +# List of texinfo sources @included by libunistring.texi, excluding version.texi. +libunistring_TEXINFOS = \ + unitypes.texi unistr.texi uniconv.texi unistdio.texi uniname.texi \ + unictype.texi uniwidth.texi uniwbrk.texi unilbrk.texi uninorm.texi \ + unicase.texi uniregex.texi \ + gpl.texi lgpl.texi fdl.texi + + +# CLEANFILES: libunistring.{dvi,ps,pdf,html} are already known to automake. +MAINTAINERCLEANFILES = libunistring_*.html + +# Documentation in Portable Document Format. + +# Override of automake's definition: +#TEXI2PDF = @TEXI2DVI@ --pdf +TEXI2PDF = @TEXI2DVI@ --pdf $(TEXINCLUDES) + +# Documentation in HTML format. +TEXI2HTML = @PERL@ $(top_srcdir)/build-aux/texi2html +all: all-am + +.SUFFIXES: +.SUFFIXES: .dvi .html .info .pdf .ps .texi +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +.texi.info: + restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + am__cwd=`pwd` && $(am__cd) $(srcdir) && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ + for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ + if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ + done; \ + else :; fi && \ + cd "$$am__cwd"; \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ $<; \ + then \ + rc=0; \ + $(am__cd) $(srcdir); \ + else \ + rc=$$?; \ + $(am__cd) $(srcdir) && \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +.texi.dvi: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) $< + +.texi.pdf: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) $< + +.texi.html: + rm -rf $(@:.html=.htp) + if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) $<; \ + then \ + rm -rf $@; \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ + else \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ + exit 1; \ + fi +$(srcdir)/libunistring.info: libunistring.texi $(srcdir)/version.texi $(libunistring_TEXINFOS) +libunistring.dvi: libunistring.texi $(srcdir)/version.texi $(libunistring_TEXINFOS) +libunistring.pdf: libunistring.texi $(srcdir)/version.texi $(libunistring_TEXINFOS) +$(srcdir)/version.texi: $(srcdir)/stamp-vti + +mostlyclean-vti: + -rm -f vti.tmp + +maintainer-clean-vti: + -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi +.dvi.ps: + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + $(DVIPS) -o $@ $< + +uninstall-dvi-am: + @$(NORMAL_UNINSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ + rm -f "$(DESTDIR)$(dvidir)/$$f"; \ + done + +uninstall-html-am: + @$(NORMAL_UNINSTALL) + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + +uninstall-info-am: + @$(PRE_UNINSTALL) + @if test -d '$(DESTDIR)$(infodir)' && \ + (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ + done; \ + else :; fi + @$(NORMAL_UNINSTALL) + @list='$(INFO_DEPS)'; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ + (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ + echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ + rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ + else :; fi); \ + done + +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ + done + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ + rm -f "$(DESTDIR)$(psdir)/$$f"; \ + done + +dist-info: $(INFO_DEPS) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; \ + for base in $$list; do \ + case $$base in \ + $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$base; then d=.; else d=$(srcdir); fi; \ + base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ + for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ + if test -f $$file; then \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ + else :; fi; \ + done; \ + done + +mostlyclean-aminfo: + -rm -rf libunistring.am libunistring.aux libunistring.cp libunistring.cps \ + libunistring.fn libunistring.ky libunistring.kys \ + libunistring.log libunistring.pg libunistring.pgs \ + libunistring.tmp libunistring.toc libunistring.tp \ + libunistring.vr libunistring.vrs + +clean-aminfo: + -test -z "libunistring.dvi libunistring.pdf libunistring.ps libunistring.html" \ + || rm -rf libunistring.dvi libunistring.pdf libunistring.ps libunistring.html + +maintainer-clean-aminfo: + @list='$(INFO_DEPS)'; for i in $$list; do \ + i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ + echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ + rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-info dist-hook +check-am: all-am +check: check-am +all-am: Makefile $(INFO_DEPS) all-local +installdirs: installdirs-local + for dir in "$(DESTDIR)$(infodir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: $(DVIS) + +html: html-am + +html-am: $(HTMLS) html-local + +info: info-am + +info-am: $(INFO_DEPS) + +install-data-am: install-data-local install-info-am + +install-dvi: install-dvi-am + +install-dvi-am: $(DVIS) + @$(NORMAL_INSTALL) + test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ + done +install-exec-am: + +install-html-am: $(HTMLS) + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ + else \ + list2="$$list2 $$d$$p"; \ + fi; \ + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } +install-info: install-info-am + +install-info-am: $(INFO_DEPS) + @$(NORMAL_INSTALL) + test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + esac; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ + for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + if test -f $$ifile; then \ + echo "$$ifile"; \ + else : ; fi; \ + done; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done + @$(POST_INSTALL) + @if (install-info --version && \ + install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ + for file in $$list; do \ + relfile=`echo "$$file" | sed 's|^.*/||'`; \ + echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ + install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ + done; \ + else : ; fi +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: $(PDFS) + @$(NORMAL_INSTALL) + test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done +install-ps: install-ps-am + +install-ps-am: $(PSS) + @$(NORMAL_INSTALL) + test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ + mostlyclean-libtool mostlyclean-vti + +pdf: pdf-am + +pdf-am: $(PDFS) + +ps: ps-am + +ps-am: $(PSS) + +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-local uninstall-pdf-am uninstall-ps-am + +.MAKE: install-am install-strip + +.PHONY: all all-am all-local check check-am clean clean-aminfo \ + clean-generic clean-libtool dist-hook dist-info distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am html-local info info-am install install-am \ + install-data install-data-am install-data-local install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-local maintainer-clean maintainer-clean-aminfo \ + maintainer-clean-generic maintainer-clean-vti mostlyclean \ + mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool \ + mostlyclean-vti pdf pdf-am ps ps-am uninstall uninstall-am \ + uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-local uninstall-pdf-am uninstall-ps-am + + +# The dependencies of stamp-vti generated by automake are incomplete. +# So we have to duplicate the entire rule which would otherwise be generated +# by automake. +$(srcdir)/stamp-vti: $(info_TEXINFOS) $(libunistring_TEXINFOS) $(top_srcdir)/version.sh + (dir=.; test -f ./libunistring.texi || dir=$(srcdir); \ + set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/libunistring.texi`; \ + echo "@set UPDATED $$1 $$2 $$3"; \ + echo "@set UPDATED-MONTH $$2 $$3"; \ + echo "@set EDITION $(VERSION)"; \ + echo "@set VERSION $(VERSION)") > vti.tmp + cmp -s vti.tmp $(srcdir)/version.texi \ + || (echo "Updating $(srcdir)/version.texi"; \ + cp vti.tmp $(srcdir)/version.texi) + rm -f vti.tmp + cp $(srcdir)/version.texi $@ + +# We distribute only the split HTML documentation. +# The user can generate the others, via +# make libunistring.ps +# make libunistring.pdf +# make libunistring.html + +all-local: html-local +install-data-local: install-html +installdirs-local: installdirs-html +uninstall-local: uninstall-html +dist-hook: dist-html + +html-local: html-split +# Override of automake's definition. The HTML files we want to distribute are +# not the ones that automake knows about, and we cannot define HTMLS to a value +# containing wildcards. +install-html: install-html-split + @: +uninstall-html: uninstall-html-split +dist-html: dist-html-split + +# The install-dvi target is already defined by automake. + +installdirs-dvi: + $(mkdir_p) $(DESTDIR)$(dvidir) + +uninstall-dvi: + $(RM) $(DESTDIR)$(dvidir)/libunistring.dvi + +libunistring.ps: libunistring.dvi + $(DVIPS) -o $@ `if test -f libunistring.dvi; then echo libunistring.dvi; else echo $(srcdir)/libunistring.dvi; fi` + +# The install-ps target is already defined by automake. + +installdirs-ps: + $(mkdir_p) $(DESTDIR)$(psdir) + +uninstall-ps: + $(RM) $(DESTDIR)$(psdir)/libunistring.ps + +# The install-pdf target is already defined by automake. + +installdirs-pdf: + $(mkdir_p) $(DESTDIR)$(pdfdir) + +uninstall-pdf: + $(RM) $(DESTDIR)$(pdfdir)/libunistring.pdf + +html-monolithic: libunistring.html +html-split: libunistring_toc.html + +# Override of automake's definition. +# We want to use texi2html, not makeinfo --html. +libunistring.html: libunistring.texi version.texi $(libunistring_TEXINFOS) + $(TEXI2HTML) $(TEXINCLUDES) -no-sec-nav -no-menu -toc-links -number -monolithic `if test -f libunistring.texi; then echo libunistring.texi; else echo $(srcdir)/libunistring.texi; fi` + +libunistring_toc.html: libunistring.texi version.texi $(libunistring_TEXINFOS) + case "@PERL@" in \ + *"/missing perl") \ + $(TEXI2HTML) $(TEXINCLUDES) -no-sec-nav -no-menu -toc-links -number -split_chapter `if test -f libunistring.texi; then echo libunistring.texi; else echo $(srcdir)/libunistring.texi; fi` || exit 0 ;; \ + *) $(RM) libunistring_*.html ; \ + $(TEXI2HTML) $(TEXINCLUDES) -no-sec-nav -no-menu -toc-links -number -split_chapter `if test -f libunistring.texi; then echo libunistring.texi; else echo $(srcdir)/libunistring.texi; fi` ;; \ + esac \ + && { mv libunistring/libunistring.html libunistring_toc.html; \ + mv libunistring/*.html .; \ + rmdir libunistring; \ + } + +install-html-monolithic: libunistring.html + $(mkdir_p) $(DESTDIR)$(htmldir) + $(INSTALL_DATA) `if test -f libunistring.html; then echo .; else echo $(srcdir); fi`/libunistring.html $(DESTDIR)$(htmldir)/libunistring.html + +install-html-split: libunistring_toc.html + $(mkdir_p) $(DESTDIR)$(htmldir) + for file in `if test -f libunistring_toc.html; then echo .; else echo $(srcdir); fi`/libunistring_*.html; do \ + $(INSTALL_DATA) $$file $(DESTDIR)$(htmldir)/`basename $$file`; \ + done + +installdirs-html: + $(mkdir_p) $(DESTDIR)$(htmldir) + +uninstall-html-monolithic: + $(RM) $(DESTDIR)$(htmldir)/libunistring.html + +uninstall-html-split: + $(RM) $(DESTDIR)$(htmldir)/libunistring_*.html + +dist-html-monolithic: + $(mkdir_p) $(distdir)/ + file=libunistring.html; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + cp -p $$d/$$file $(distdir)/$$file || exit 1 + +# We would like to put libunistring_*.html into EXTRA_DIST, but it doesn't work. +dist-html-split: + $(mkdir_p) $(distdir)/ + file=libunistring_toc.html; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + for file in `cd $$d && echo libunistring_*.html`; do \ + cp -p $$d/$$file $(distdir)/$$file || exit 1; \ + done + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/fdl.texi b/doc/fdl.texi new file mode 100644 index 00000000..8805f1a4 --- /dev/null +++ b/doc/fdl.texi @@ -0,0 +1,506 @@ +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +@end display + +@enumerate 0 +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. + +This License is a kind of ``copyleft'', which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. + +A ``Modified Version'' of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. + +The ``Invariant Sections'' are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. + +The ``Cover Texts'' are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A ``Transparent'' copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. + +Examples of suitable formats for Transparent copies include plain +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. + +The ``Title Page'' means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, ``Title Page'' means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. + +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and +you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. + +If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. + +It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: + +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. + +You may add a section Entitled ``Endorsements'', provided it contains +nothing but endorsements of your Modified Version by various +parties---for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. + +You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + +@item +FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@uref{http://www.gnu.org/copyleft/}. + +Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + +@end enumerate + +@page +@heading ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: + +@smallexample +@group + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + +If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/doc/gpl.texi b/doc/gpl.texi new file mode 100644 index 00000000..97a17e19 --- /dev/null +++ b/doc/gpl.texi @@ -0,0 +1,717 @@ +@c The GNU General Public License. +@center Version 3, 29 June 2007 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. +@end display + +@heading Preamble + +The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom +to share and change all versions of a program---to make sure it remains +free software for all its users. We, the Free Software Foundation, +use the GNU General Public License for most of our software; it +applies also to any other work released this way by its authors. You +can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you +have certain responsibilities if you distribute copies of the +software, or if you modify it: responsibilities to respect the freedom +of others. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, +receive or can get the source code. And you must show them these +terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the +manufacturer can do so. This is fundamentally incompatible with the +aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for +individuals to use, which is precisely where it is most unacceptable. +Therefore, we have designed this version of the GPL to prohibit the +practice for those products. If such problems arise substantially in +other domains, we stand ready to extend this provision to those +domains in future versions of the GPL, as needed to protect the +freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish +to avoid the special danger that patents applied to a free program +could make it effectively proprietary. To prevent this, the GPL +assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + +@heading TERMS AND CONDITIONS + +@enumerate 0 +@item Definitions. + +``This License'' refers to version 3 of the GNU General Public License. + +``Copyright'' also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +``The Program'' refers to any copyrightable work licensed under this +License. Each licensee is addressed as ``you''. ``Licensees'' and +``recipients'' may be individuals or organizations. + +To ``modify'' a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a ``modified version'' of +the earlier work or a work ``based on'' the earlier work. + +A ``covered work'' means either the unmodified Program or a work based +on the Program. + +To ``propagate'' a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To ``convey'' a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays ``Appropriate Legal Notices'' to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +@item Source Code. + +The ``source code'' for a work means the preferred form of the work for +making modifications to it. ``Object code'' means any non-source form +of a work. + +A ``Standard Interface'' means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The ``System Libraries'' of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +``Major Component'', in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The ``Corresponding Source'' for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +@item Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +@item Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +@item Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +@item Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +@enumerate a +@item +The work must carry prominent notices stating that you modified it, +and giving a relevant date. + +@item +The work must carry prominent notices stating that it is released +under this License and any conditions added under section 7. This +requirement modifies the requirement in section 4 to ``keep intact all +notices''. + +@item +You must license the entire work, as a whole, under this License to +anyone who comes into possession of a copy. This License will +therefore apply, along with any applicable section 7 additional terms, +to the whole of the work, and all its parts, regardless of how they +are packaged. This License gives no permission to license the work in +any other way, but it does not invalidate such permission if you have +separately received it. + +@item +If the work has interactive user interfaces, each must display +Appropriate Legal Notices; however, if the Program has interactive +interfaces that do not display Appropriate Legal Notices, your work +need not make them do so. +@end enumerate + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +``aggregate'' if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +@item Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +@enumerate a +@item +Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by the +Corresponding Source fixed on a durable physical medium customarily +used for software interchange. + +@item +Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by a written +offer, valid for at least three years and valid for as long as you +offer spare parts or customer support for that product model, to give +anyone who possesses the object code either (1) a copy of the +Corresponding Source for all the software in the product that is +covered by this License, on a durable physical medium customarily used +for software interchange, for a price no more than your reasonable +cost of physically performing this conveying of source, or (2) access +to copy the Corresponding Source from a network server at no charge. + +@item +Convey individual copies of the object code with a copy of the written +offer to provide the Corresponding Source. This alternative is +allowed only occasionally and noncommercially, and only if you +received the object code with such an offer, in accord with subsection +6b. + +@item +Convey the object code by offering access from a designated place +(gratis or for a charge), and offer equivalent access to the +Corresponding Source in the same way through the same place at no +further charge. You need not require recipients to copy the +Corresponding Source along with the object code. If the place to copy +the object code is a network server, the Corresponding Source may be +on a different server (operated by you or a third party) that supports +equivalent copying facilities, provided you maintain clear directions +next to the object code saying where to find the Corresponding Source. +Regardless of what server hosts the Corresponding Source, you remain +obligated to ensure that it is available for as long as needed to +satisfy these requirements. + +@item +Convey the object code using peer-to-peer transmission, provided you +inform other peers where the object code and Corresponding Source of +the work are being offered to the general public at no charge under +subsection 6d. + +@end enumerate + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A ``User Product'' is either (1) a ``consumer product'', which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +``normally used'' refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +``Installation Information'' for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +@item Additional Terms. + +``Additional permissions'' are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +@enumerate a +@item +Disclaiming warranty or limiting liability differently from the terms +of sections 15 and 16 of this License; or + +@item +Requiring preservation of specified reasonable legal notices or author +attributions in that material or in the Appropriate Legal Notices +displayed by works containing it; or + +@item +Prohibiting misrepresentation of the origin of that material, or +requiring that modified versions of such material be marked in +reasonable ways as different from the original version; or + +@item +Limiting the use for publicity purposes of names of licensors or +authors of the material; or + +@item +Declining to grant rights under trademark law for use of some trade +names, trademarks, or service marks; or + +@item +Requiring indemnification of licensors and authors of that material by +anyone who conveys the material (or modified versions of it) with +contractual assumptions of liability to the recipient, for any +liability that these contractual assumptions directly impose on those +licensors and authors. +@end enumerate + +All other non-permissive additional terms are considered ``further +restrictions'' within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +@item Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +@item Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +@item Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An ``entity transaction'' is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +@item Patents. + +A ``contributor'' is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's ``contributor version''. + +A contributor's ``essential patent claims'' are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, ``control'' includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a ``patent license'' is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To ``grant'' such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. ``Knowingly relying'' means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is ``discriminatory'' if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +@item No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey +a covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree +to terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +@item Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +@item Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU General Public +License ``or any later version'' applies to it, you have the option of +following the terms and conditions either of that numbered version or +of any later version published by the Free Software Foundation. If +the Program does not specify a version number of the GNU General +Public License, you may choose any version ever published by the Free +Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU General Public License can be used, that proxy's public +statement of acceptance of a version permanently authorizes you to +choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +@item Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +@item Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +@item Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +@end enumerate + +@heading END OF TERMS AND CONDITIONS + +@heading How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the ``copyright'' line and a pointer to where the full notice is found. + +@smallexample +@var{one line to give the program's name and a brief idea of what it does.} +Copyright (C) @var{year} @var{name of author} + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or (at +your option) any later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see @url{http://www.gnu.org/licenses/}. +@end smallexample + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + +@smallexample +@var{program} Copyright (C) @var{year} @var{name of author} +This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. +This is free software, and you are welcome to redistribute it +under certain conditions; type @samp{show c} for details. +@end smallexample + +The hypothetical commands @samp{show w} and @samp{show c} should show +the appropriate parts of the General Public License. Of course, your +program's commands might be different; for a GUI interface, you would +use an ``about box''. + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a ``copyright disclaimer'' for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +@url{http://www.gnu.org/licenses/}. + +The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use +the GNU Lesser General Public License instead of this License. But +first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. diff --git a/doc/lgpl.texi b/doc/lgpl.texi new file mode 100644 index 00000000..c29a6fb4 --- /dev/null +++ b/doc/lgpl.texi @@ -0,0 +1,190 @@ +@c The GNU Lesser General Public License. +@center Version 3, 29 June 2007 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. + +@display +Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. +@end display + +This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + +@enumerate 0 +@item Additional Definitions. + +As used herein, ``this License'' refers to version 3 of the GNU Lesser +General Public License, and the ``GNU GPL'' refers to version 3 of the GNU +General Public License. + +``The Library'' refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + +An ``Application'' is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + +A ``Combined Work'' is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the ``Linked +Version''. + +The ``Minimal Corresponding Source'' for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + +The ``Corresponding Application Code'' for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + +@item Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + +@item Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + +@enumerate a +@item +under this License, provided that you make a good faith effort to +ensure that, in the event an Application does not supply the +function or data, the facility still operates, and performs +whatever part of its purpose remains meaningful, or + +@item +under the GNU GPL, with none of the additional permissions of +this License applicable to that copy. +@end enumerate + +@item Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + +@enumerate a +@item +Give prominent notice with each copy of the object code that the +Library is used in it and that the Library and its use are +covered by this License. +@item +Accompany the object code with a copy of the GNU GPL and this license +document. +@end enumerate + +@item Combined Works. + +You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + +@enumerate a +@item +Give prominent notice with each copy of the Combined Work that +the Library is used in it and that the Library and its use are +covered by this License. +@item +Accompany the Combined Work with a copy of the GNU GPL and this license +document. +@item +For a Combined Work that displays copyright notices during +execution, include the copyright notice for the Library among +these notices, as well as a reference directing the user to the +copies of the GNU GPL and this license document. +@item +Do one of the following: + +@enumerate 0 +@item +Convey the Minimal Corresponding Source under the terms of this +License, and the Corresponding Application Code in a form +suitable for, and under terms that permit, the user to +recombine or relink the Application with a modified version of +the Linked Version to produce a modified Combined Work, in the +manner specified by section 6 of the GNU GPL for conveying +Corresponding Source. +@item +Use a suitable shared library mechanism for linking with the +Library. A suitable mechanism is one that (a) uses at run time +a copy of the Library already present on the user's computer +system, and (b) will operate properly with a modified version +of the Library that is interface-compatible with the Linked +Version. +@end enumerate + +@item +Provide Installation Information, but only if you would otherwise +be required to provide such information under section 6 of the +GNU GPL, and only to the extent that such information is +necessary to install and execute a modified version of the +Combined Work produced by recombining or relinking the +Application with a modified version of the Linked Version. (If +you use option 4d0, the Installation Information must accompany +the Minimal Corresponding Source and Corresponding Application +Code. If you use option 4d1, you must provide the Installation +Information in the manner specified by section 6 of the GNU GPL +for conveying Corresponding Source.) +@end enumerate + +@item Combined Libraries. + +You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + +@enumerate a +@item +Accompany the combined library with a copy of the same work based +on the Library, uncombined with any other library facilities, +conveyed under the terms of this License. +@item +Give prominent notice with the combined library that part of it +is a work based on the Library, and explaining where to find the +accompanying uncombined form of the same work. +@end enumerate + +@item Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License ``or any later version'' +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + +@end enumerate diff --git a/doc/libunistring.info b/doc/libunistring.info new file mode 100644 index 00000000..2fad8fec --- /dev/null +++ b/doc/libunistring.info @@ -0,0 +1,6200 @@ +This is libunistring.info, produced by makeinfo version 4.13 from +libunistring.texi. + +INFO-DIR-SECTION Software development +START-INFO-DIR-ENTRY +* GNU libunistring: (libunistring). Unicode string library. +END-INFO-DIR-ENTRY + + This manual is for GNU libunistring. + + +File: libunistring.info, Node: Top, Next: Introduction, Up: (dir) + +GNU libunistring +**************** + +* Menu: + +* Introduction:: Who may need Unicode strings? +* Conventions:: Conventions used in this manual +* unitypes.h:: Elementary types +* unistr.h:: Elementary Unicode string functions +* uniconv.h:: Conversions between Unicode and encodings +* unistdio.h:: Output with Unicode strings +* uniname.h:: Names of Unicode characters +* unictype.h:: Unicode character classification and properties +* uniwidth.h:: Display width +* uniwbrk.h:: Word breaks in strings +* unilbrk.h:: Line breaking +* uninorm.h:: Normalization forms +* unicase.h:: Case mappings +* uniregex.h:: Regular expressions +* Using the library:: How to link with the library and use it? +* More functionality:: More advanced functionality +* Licenses:: Licenses + +* Index:: General Index + + --- The Detailed Node Listing --- + +Introduction + +* Unicode:: What is Unicode? +* Unicode and i18n:: Unicode and internationalization +* Locale encodings:: What is a locale encoding? +* In-memory representation:: How to represent strings in memory? +* char * strings:: What to keep in mind with `char *' strings +* The wchar_t mess:: Why `wchar_t *' strings are useless +* Unicode strings:: How are Unicode strings represented? + +unistr.h + +* Elementary string checks:: +* Elementary string conversions:: +* Elementary string functions:: +* Elementary string functions with memory allocation:: +* Elementary string functions on NUL terminated strings:: + +unictype.h + +* General category:: +* Canonical combining class:: +* Bidirectional category:: +* Decimal digit value:: +* Digit value:: +* Numeric value:: +* Mirrored character:: +* Properties:: +* Scripts:: +* Blocks:: +* ISO C and Java syntax:: +* Classifications like in ISO C:: + +General category + +* Object oriented API:: +* Bit mask API:: + +Properties + +* Properties as objects:: +* Properties as functions:: + +uniwbrk.h + +* Word breaks in a string:: +* Word break property:: + +uninorm.h + +* Decomposition of characters:: +* Composition of characters:: +* Normalization of strings:: +* Normalizing comparisons:: +* Normalization of streams:: + +unicase,h + +* Case mappings of characters:: +* Case mappings of strings:: +* Case mappings of substrings:: +* Case insensitive comparison:: +* Case detection:: + +Using the library + +* Installation:: +* Compiler options:: +* Include files:: +* Autoconf macro:: +* Reporting problems:: + +Licenses + +* GNU GPL:: GNU General Public License +* GNU LGPL:: GNU Lesser General Public License +* GNU FDL:: GNU Free Documentation License + + +File: libunistring.info, Node: Introduction, Next: Conventions, Prev: Top, Up: Top + +1 Introduction +************** + + This library provides functions for manipulating Unicode strings and +for manipulating C strings according to the Unicode standard. + + It consists of the following parts: + +`' + elementary string functions + +`' + conversion from/to legacy encodings + +`' + formatted output to strings + +`' + character names + +`' + character classification and properties + +`' + string width when using nonproportional fonts + +`' + word breaks + +`' + line breaking algorithm + +`' + normalization (composition and decomposition) + +`' + case folding + +`' + regular expressions (not yet implemented) + + libunistring is for you if your application involves non-trivial text +processing, such as upper/lower case conversions, line breaking, +operations on words, or more advanced analysis of text. Text provided +by the user can, in general, contain characters of all kinds of +scripts. The text processing functions provided by this library handle +all scripts and all languages. + + libunistring is for you if your application already uses the ISO C / +POSIX `', `' functions and the text it operates on is +provided by the user and can be in any language. + + libunistring is also for you if your application uses Unicode +strings as internal in-memory representation. + +* Menu: + +* Unicode:: What is Unicode? +* Unicode and i18n:: Unicode and internationalization +* Locale encodings:: What is a locale encoding? +* In-memory representation:: How to represent strings in memory? +* char * strings:: What to keep in mind with `char *' strings +* The wchar_t mess:: Why `wchar_t *' strings are useless +* Unicode strings:: How are Unicode strings represented? + + +File: libunistring.info, Node: Unicode, Next: Unicode and i18n, Up: Introduction + +1.1 Unicode +=========== + + Unicode is a standardized repertoire of characters that contains +characters from all scripts of the world, from Latin letters to Chinese +ideographs and Babylonian cuneiform glyphs. It also specifies how +these characters are to be rendered on a screen or on paper, and how +common text processing (word selection, line breaking, uppercasing of +page titles etc.) is supposed to behave on Unicode text. + + Unicode also specifies three ways of storing sequences of Unicode +characters in a computer whose basic unit of data is an 8-bit byte: +UTF-8 + Every character is represented as 1 to 4 bytes. + +UTF-16 + Every character is represented as 1 to 2 units of 16 bits. + +UTF-32, a.k.a. UCS-4 + Every character is represented as 1 unit of 32 bits. + + For encoding Unicode text in a file, UTF-8 is usually used. For +encoding Unicode strings in memory for a program, either of the three +encoding forms can be reasonably used. + + Unicode is widely used on the web. Prior to the use of Unicode, web +pages were in many different encodings (ISO-8859-1 for English, French, +Spanish, ISO-8859-2 for Polish, ISO-8859-7 for Greek, KOI8-R for +Russian, GB2312 or BIG5 for Chinese, ISO-2022-JP-2 or EUC-JP or +Shift_JIS for Japanese, and many many others). It was next to +impossible to create a document that contained Chinese and Polish text +in the same document. Due to the many encodings for Japanese, even the +processing of pure Japanese text was error prone. + + References: + * The Unicode standard: `http://www.unicode.org/' + + * Definition of UTF-8: `http://www.rfc-editor.org/rfc/rfc3629.txt' + + * Definition of UTF-16: `http://www.rfc-editor.org/rfc/rfc2781.txt' + + * Markus Kuhn's UTF-8 and Unicode FAQ: + `http://www.cl.cam.ac.uk/~mgk25/unicode.html' + + +File: libunistring.info, Node: Unicode and i18n, Next: Locale encodings, Prev: Unicode, Up: Introduction + +1.2 Unicode and Internationalization +==================================== + + Internationalization is the process of changing the source code of a +program so that it can meet the expectations of users in any culture, +if culture specific data (translations, images etc.) are provided. + + Use of Unicode is not strictly required for internationalization, +but it makes internationalization much easier, because operations that +need to look at specific characters (like hyphenation, spell checking, +or the automatic conversion of double-quotes to opening and closing +double-quote characters) don't need to consider multiple possible +encodings of the text. + + Use of Unicode also enables multilingualization: the ability of +having text in multiple languages present in the same document or even +in the same line of text. + + But use of Unicode is not everything. Internationalization usually +consists of three features: + * Use of Unicode where needed for text processing. This is what + this library is for. + + * Use of message catalogs for messages shown to the user, This is + what GNU gettext is about. + + * Use of locale specific conventions for date and time formats, for + numeric formatting, or for sorting of text. This can be done + adequately with the POSIX APIs and the implementation of locales + in the GNU C library. + + +File: libunistring.info, Node: Locale encodings, Next: In-memory representation, Prev: Unicode and i18n, Up: Introduction + +1.3 Locale encodings +==================== + + A locale is a set of cultural conventions. According to POSIX, for +a program, at any moment, there is one locale being designated as the +"current locale". (Actually, POSIX supports also one locale per +thread, but this feature is not yet universally implemented and not +widely used.) The locale is partitioned into several aspects, called +the "categories" of the locale. The main various aspects are: + * The character encoding and the character properties. This is the + `LC_CTYPE' category. + + * The sorting rules for text. This is the `LC_COLLATE' category. + + * The language specific translations of messages. This is the + `LC_MESSAGES' category. + + * The formatting rules for numbers, such as the decimal separator. + This is the `LC_NUMERIC' category. + + * The formatting rules for amounts of money. This is the + `LC_MONETARY' category. + + * The formatting of date and time. This is the `LC_TIME' category. + + In particular, the `LC_CTYPE' category of the current locale +determines the character encoding. This is the encoding of `char *' +strings. We also call it the "locale encoding". GNU libunistring has +a function, `locale_charset', that returns a standardized (platform +independent) name for this encoding. + + All locale encodings used on glibc systems are essentially ASCII +compatible: Most graphic ASCII characters have the same representation, +as a single byte, in that encoding as in ASCII. + + Among the possible locale encodings are UTF-8 and GB18030. Both +allow to represent any Unicode character as a sequence of bytes. UTF-8 +is used in most of the world, whereas GB18030 is used in the People's +Republic of China, because it is backward compatible with the GB2312 +encoding that was used in this country earlier. + + The legacy locale encodings, ISO-8859-15 (which supplanted +ISO-8859-1 in most of Europe), ISO-8859-2, KOI8-R, EUC-JP, etc., are +still in use in many places, though. + + UTF-16 and UTF-32 are not used as locale encodings, because they are +not ASCII compatible. + + +File: libunistring.info, Node: In-memory representation, Next: char * strings, Prev: Locale encodings, Up: Introduction + +1.4 Choice of in-memory representation of strings +================================================= + + There are three ways of representing strings in memory of a running +program. + * As `char *' strings. Such strings are represented in locale + encoding. This approach is employed when not much text processing + is done by the program. When some Unicode aware processing is to + be done, a string is converted to Unicode on the fly and back to + locale encoding afterwards. + + * As UTF-8 or UTF-16 or UTF-32 strings. This implies that + conversion from locale encoding to Unicode is performed on input, + and in the opposite direction on output. This approach is + employed when the program does a significant amount of text + processing, or when the program has multiple threads operating on + the same data but in different locales. + + * As `wchar_t *', a.k.a. "wide strings". This approach is misguided, + see *note The wchar_t mess::. + + +File: libunistring.info, Node: char * strings, Next: The wchar_t mess, Prev: In-memory representation, Up: Introduction + +1.5 `char *' strings +==================== + + The classical C strings, with its C library support standardized by +ISO C and POSIX, can be used in internationalized programs with some +precautions. The problem with this API is that many of the C library +functions for strings don't work correctly on strings in locale +encodings, leading to bugs that only people in some cultures of the +world will experience. + + The first problem with the C library API is the support of multibyte +locales. According to the locale encoding, in general, every character +is represented by one or more bytes (up to 4 bytes in practice -- but +use `MB_LEN_MAX' instead of the number 4 in the code). When every +character is represented by only 1 byte, we speak of an "unibyte +locale", otherwise of a "multibyte locale". It is important to realize +that the majority of Unix installations nowadays use UTF-8 or GB18030 +as locale encoding; therefore, the majority of users are using +multibyte locales. + + The important fact to remember is: _A `char' is a byte, not a +character._ + + As a consequence: + * The `' API is useless in this context; it does not work in + multibyte locales. + + * The `strlen' function does not return the number of characters in + a string. Nor does it return the number of screen columns occupied + by a string after it is output. It merely returns the number of + _bytes_ occupied by a string. + + * Truncating a string, for example, with `strncpy', can have the + effect of truncating it in the middle of a multibyte character. + Such a string will, when output, have a garbled character at its + end, often represented by a hollow box. + + * `strchr' and `strrchr' do not work with multibyte strings if the + locale encoding is GB18030 and the character to be searched is a + digit. + + * `strstr' does not work with multibyte strings if the locale + encoding is different from UTF-8. + + * `strcspn', `strpbrk', `strspn' cannot work correctly in multibyte + locales: they assume the second argument is a list of single-byte + characters. Even in this simple case, they do not work with + multibyte strings if the locale encoding is GB18030 and one of the + characters to be searched is a digit. + + * `strsep' and `strtok_r' do not work with multibyte strings unless + all of the delimiter characters are ASCII characters < 0x30. + + * The `strcasecmp', `strncasecmp', and `strcasestr' functions do not + work with multibyte strings. + + The workarounds can be found in GNU gnulib +`http://www.gnu.org/software/gnulib/'. + * gnulib has modules `mbchar', `mbiter', `mbuiter' that represent + multibyte characters and allow to iterate across a multibyte + string with the same ease as through a unibyte string. + + * gnulib has functions `mbslen' and `mbswidth' that can be used + instead of `strlen' when the number of characters or the number of + screen columns of a string is requested. + + * gnulib has functions `mbschr' and `mbsrrchr' that are like + `strchr' and `strrchr', but work in multibyte locales. + + * gnulib has a function `mbsstr', like `strstr', but works in + multibyte locales. + + * gnulib has functions `mbscspn', `mbspbrk', `mbsspn' that are like + `strcspn', `strpbrk', `strspn', but work in multibyte locales. + + * gnulib has functions `mbssep' and `mbstok_r' that are like + `strsep' and `strtok_r' but work in multibyte locales. + + * gnulib has functions `mbscasecmp', `mbsncasecmp', `mbspcasecmp', + and `mbscasestr' that are like `strcasecmp', `strncasecmp', and + `strcasestr', but work in multibyte locales. Still, the function + `ulc_casecmp' is preferable to these functions; see below. + + The second problem with the C library API is that it has some +assumptions built-in that are not valid in some languages: + * It assumes that there are only two forms of every character: + uppercase and lowercase. This is not true for Croatian, where the + character LETTER DZ WITH CARON comes in three forms: LATIN CAPITAL + LETTER DZ WITH CARON (DZ), LATIN CAPITAL LETTER D WITH SMALL + LETTER Z WITH CARON (Dz), LATIN SMALL LETTER DZ WITH CARON (dz). + + * It assumes that uppercasing of 1 character leads to 1 character. + This is not true for German, where the LATIN SMALL LETTER SHARP S, + when uppercased, becomes `SS'. + + * It assumes that there is 1:1 mapping between uppercase and + lowercase forms. This is not true for the Greek sigma: GREEK + CAPITAL LETTER SIGMA is the uppercase of both GREEK SMALL LETTER + SIGMA and GREEK SMALL LETTER FINAL SIGMA. + + * It assumes that the upper/lowercase mappings are position + independent. This is not true for the Greek sigma and the + Lithuanian i. + + The correct way to deal with this problem is + 1. to provide functions for titlecasing, as well as for upper- and + lowercasing, + + 2. to view case transformations as functions that operates on strings, + rather than on characters. + + This is implemented in this library, through the functions declared +in `', see *note unicase.h::. + + +File: libunistring.info, Node: The wchar_t mess, Next: Unicode strings, Prev: char * strings, Up: Introduction + +1.6 The `wchar_t' mess +====================== + + The ISO C and POSIX standard creators made an attempt to fix the +first problem mentioned in the previous section. They introduced + * a type `wchar_t', designed to encapsulate an entire character, + + * a "wide string" type `wchar_t *', and + + * functions declared in `' that were meant to supplant the + ones in `'. + + Unfortunately, this API and its implementation has numerous problems: + + * On AIX and Windows platforms, `wchar_t' is a 16-bit type. This + means that it can never accommodate an entire Unicode character. + Either the `wchar_t *' strings are limited to characters in UCS-2 + (the "Basic Multilingual Plane" of Unicode), or -- if `wchar_t *' + strings are encoded in UTF-16 -- a `wchar_t' represents only half + of a character in the worst case, making the `' functions + pointless. + + * On Solaris and FreeBSD, the `wchar_t' encoding is locale dependent + and undocumented. This means, if you want to know any property of + a `wchar_t' character, other than the properties defined by + `' -- such as whether it's a dash, currency symbol, + paragraph separator, or similar --, you have to convert it to + `char *' encoding first, by use of the function `wctomb'. + + * When you read a stream of wide characters, through the functions + `fgetwc' and `fgetws', and when the input stream/file is not in + the expected encoding, you have no way to determine the invalid + byte sequence and do some corrective action. If you use these + functions, your program becomes "garbage in - more garbage out" or + "garbage in - abort". + + As a consequence, it is better to use multibyte strings, as +explained in the previous section. Such multibyte strings can bypass +limitations of the `wchar_t' type, if you use functions defined in +gnulib and libunistring for text processing. They can also faithfully +transport malformed characters that were present in the input, without +requiring the program to produce garbage or abort. + + +File: libunistring.info, Node: Unicode strings, Prev: The wchar_t mess, Up: Introduction + +1.7 Unicode strings +=================== + + libunistring supports Unicode strings in three representations: + * UTF-8 strings, through the type `uint8_t *'. The units are bytes + (`uint8_t'). + + * UTF-16 strings, through the type `uint16_t *', The units are + 16-bit memory words (`uint16_t'). + + * UTF-32 strings, through the type `uint32_t *'. The units are + 32-bit memory words (`uint32_t'). + + As with C strings, there are two variants: + * Unicode strings with a terminating NUL character are represented as + a pointer to the first unit of the string. There is a unit + containing a 0 value at the end. It is considered part of the + string for all memory allocation purposes, but is not considered + part of the string for all other logical purposes. + + * Unicode strings where embedded NUL characters are allowed. These + are represented by a pointer to the first unit and the number of + units (not bytes!) of the string. In this setting, there is no + trailing zero-valued unit used as "end marker". + + +File: libunistring.info, Node: Conventions, Next: unitypes.h, Prev: Introduction, Up: Top + +2 Conventions +************* + + This chapter explains conventions valid throughout the libunistring +library. + + Variables of type `char *' denote C strings in locale encoding. See +*note Locale encodings::. + + Variables of type `uint8_t *' denote UTF-8 strings. Their units are +bytes. + + Variables of type `uint16_t *' denote UTF-16 strings, without byte +order mark. Their units are 2-byte words. + + Variables of type `uint32_t *' denote UTF-32 strings, without byte +order mark. Their units are 4-byte words. + + Argument pairs `(S, N)' denote a string `S[0..N-1]' with exactly N +units. + + All functions with prefix `ulc_' operate on C strings in locale +encoding. + + All functions with prefix `u8_' operate on UTF-8 strings. + + All functions with prefix `u16_' operate on UTF-16 strings. + + All functions with prefix `u32_' operate on UTF-32 strings. + + For every function with prefix `u8_', operating on UTF-8 strings, +there is also a corresponding function with prefix `u16_', operating on +UTF-16 strings, and a corresponding function with prefix `u32_', +operating on UTF-32 strings. Their description is analogous; in this +documentation we describe only the function that operates on UTF-8 +strings, for brevity. + + A declaration with a variable N denotes the three concrete +declarations with N = 8, N = 16, N = 32. + + All parameters starting with `str' and the parameters of functions +starting with `u8_str'/`u16_str'/`u32_str' denote a NUL terminated +string. + + Error values are always returned through the `errno' variable, +usually with a return value that indicates the presence of an error +(NULL for functions that return an pointer, or -1 for functions that +return an `int'). + + Functions returning a string result take a `(RESULTBUF, LENGTHP)' +argument pair. If RESULTBUF is not NULL and the result fits into +`*LENGTHP' units, it is put in RESULTBUF, and RESULTBUF is returned. +Otherwise, a freshly allocated string is returned. In both cases, +`*LENGTHP' is set to the length (number of units) of the returned +string. In case of error, NULL is returned and `errno' is set. + + +File: libunistring.info, Node: unitypes.h, Next: unistr.h, Prev: Conventions, Up: Top + +3 Elementary types `' +********************************* + + The include file `' provides the following basic types. + + -- Type: uint8_t + -- Type: uint16_t + -- Type: uint32_t + These are the storage units of UTF-8/16/32 strings, respectively. + The definitions are taken from `', on platforms where + this include file is present. + + -- Type: ucs4_t + This type represents a single Unicode character, outside of an + UTF-32 string. + + +File: libunistring.info, Node: unistr.h, Next: uniconv.h, Prev: unitypes.h, Up: Top + +4 Elementary Unicode string functions `' +************************************************** + + This include file declares elementary functions for Unicode strings. +It is essentially the equivalent of what `' is for C strings. + +* Menu: + +* Elementary string checks:: +* Elementary string conversions:: +* Elementary string functions:: +* Elementary string functions with memory allocation:: +* Elementary string functions on NUL terminated strings:: + + +File: libunistring.info, Node: Elementary string checks, Next: Elementary string conversions, Up: unistr.h + +4.1 Elementary string checks +============================ + + The following function is available to verify the integrity of a +Unicode string. + + -- Function: const uint8_t * u8_check (const uint8_t *S, size_t N) + -- Function: const uint16_t * u16_check (const uint16_t *S, size_t N) + -- Function: const uint32_t * u32_check (const uint32_t *S, size_t N) + This function checks whether a Unicode string is well-formed. It + returns NULL if valid, or a pointer to the first invalid unit + otherwise. + + +File: libunistring.info, Node: Elementary string conversions, Next: Elementary string functions, Prev: Elementary string checks, Up: unistr.h + +4.2 Elementary string conversions +================================= + + The following functions perform conversions between the different +forms of Unicode strings. + + -- Function: uint16_t * u8_to_u16 (const uint8_t *S, size_t N, + uint16_t *RESULTBUF, size_t *LENGTHP) + Converts an UTF-8 string to an UTF-16 string. + + -- Function: uint32_t * u8_to_u32 (const uint8_t *S, size_t N, + uint32_t *RESULTBUF, size_t *LENGTHP) + Converts an UTF-8 string to an UTF-32 string. + + -- Function: uint8_t * u16_to_u8 (const uint16_t *S, size_t N, uint8_t + *RESULTBUF, size_t *LENGTHP) + Converts an UTF-16 string to an UTF-8 string. + + -- Function: uint32_t * u16_to_u32 (const uint16_t *S, size_t N, + uint32_t *RESULTBUF, size_t *LENGTHP) + Converts an UTF-16 string to an UTF-32 string. + + -- Function: uint8_t * u32_to_u8 (const uint32_t *S, size_t N, uint8_t + *RESULTBUF, size_t *LENGTHP) + Converts an UTF-32 string to an UTF-8 string. + + -- Function: uint16_t * u32_to_u16 (const uint32_t *S, size_t N, + uint16_t *RESULTBUF, size_t *LENGTHP) + Converts an UTF-32 string to an UTF-16 string. + + +File: libunistring.info, Node: Elementary string functions, Next: Elementary string functions with memory allocation, Prev: Elementary string conversions, Up: unistr.h + +4.3 Elementary string functions +=============================== + + The following functions inspect and return details about the first +character in a Unicode string. + + -- Function: int u8_mblen (const uint8_t *S, size_t N) + -- Function: int u16_mblen (const uint16_t *S, size_t N) + -- Function: int u32_mblen (const uint32_t *S, size_t N) + Returns the length (number of units) of the first character in S, + which is no longer than N. Returns 0 if it is the NUL character. + Returns -1 upon failure. + + This function is similar to `mblen', except that it operates on a + Unicode string and that S must not be NULL. + + -- Function: int u8_mbtouc_unsafe (ucs4_t *PUC, const uint8_t *S, + size_t N) + -- Function: int u16_mbtouc_unsafe (ucs4_t *PUC, const uint16_t *S, + size_t N) + -- Function: int u32_mbtouc_unsafe (ucs4_t *PUC, const uint32_t *S, + size_t N) + Returns the length (number of units) of the first character in S, + putting its `ucs4_t' representation in `*PUC'. Upon failure, + `*PUC' is set to `0xfffd', and an appropriate number of units is + returned. + + The number of available units, N, must be > 0. + + This function is similar to `mbtowc', except that it operates on a + Unicode string, PUC and S must not be NULL, N must be > 0, and the + NUL character is not treated specially. + + -- Function: int u8_mbtouc (ucs4_t *PUC, const uint8_t *S, size_t N) + -- Function: int u16_mbtouc (ucs4_t *PUC, const uint16_t *S, size_t N) + -- Function: int u32_mbtouc (ucs4_t *PUC, const uint32_t *S, size_t N) + This function is like `u8_mbtouc_unsafe', except that it will + detect an invalid UTF-8 character, even if the library is compiled + without `--enable-safety'. + + -- Function: int u8_mbtoucr (ucs4_t *PUC, const uint8_t *S, size_t N) + -- Function: int u16_mbtoucr (ucs4_t *PUC, const uint16_t *S, size_t N) + -- Function: int u32_mbtoucr (ucs4_t *PUC, const uint32_t *S, size_t N) + Returns the length (number of units) of the first character in S, + putting its `ucs4_t' representation in `*PUC'. Upon failure, + `*PUC' is set to `0xfffd', and -1 is returned for an invalid + sequence of units, -2 is returned for an incomplete sequence of + units. + + The number of available units, N, must be > 0. + + This function is similar to `u8_mbtouc', except that the return + value gives more details about the failure, similar to `mbrtowc'. + + The following function stores a Unicode character as a Unicode +string in memory. + + -- Function: int u8_uctomb (uint8_t *S, ucs4_t UC, int N) + -- Function: int u16_uctomb (uint16_t *S, ucs4_t UC, int N) + -- Function: int u32_uctomb (uint32_t *S, ucs4_t UC, int N) + Puts the multibyte character represented by UC in S, returning its + length. Returns -1 upon failure, -2 if the number of available + units, N, is too small. The latter case cannot occur if N >= + 6/2/1, respectively. + + This function is similar to `wctomb', except that it operates on a + Unicode strings, S must not be NULL, and the argument N must be + specified. + + The following functions copy Unicode strings in memory. + + -- Function: uint8_t * u8_cpy (uint8_t *DEST, const uint8_t *SRC, + size_t N) + -- Function: uint16_t * u16_cpy (uint16_t *DEST, const uint16_t *SRC, + size_t N) + -- Function: uint32_t * u32_cpy (uint32_t *DEST, const uint32_t *SRC, + size_t N) + Copies N units from SRC to DEST. + + This function is similar to `memcpy', except that it operates on + Unicode strings. + + -- Function: uint8_t * u8_move (uint8_t *DEST, const uint8_t *SRC, + size_t N) + -- Function: uint16_t * u16_move (uint16_t *DEST, const uint16_t *SRC, + size_t N) + -- Function: uint32_t * u32_move (uint32_t *DEST, const uint32_t *SRC, + size_t N) + Copies N units from SRC to DEST, guaranteeing correct behavior for + overlapping memory areas. + + This function is similar to `memmove', except that it operates on + Unicode strings. + + The following function fills a Unicode string. + + -- Function: uint8_t * u8_set (uint8_t *S, ucs4_t UC, size_t N) + -- Function: uint16_t * u16_set (uint16_t *S, ucs4_t UC, size_t N) + -- Function: uint32_t * u32_set (uint32_t *S, ucs4_t UC, size_t N) + Sets the first N characters of S to UC. UC should be a character + that occupies only 1 unit. + + This function is similar to `memset', except that it operates on + Unicode strings. + + The following function compares two Unicode strings of the same +length. + + -- Function: int u8_cmp (const uint8_t *S1, const uint8_t *S2, size_t + N) + -- Function: int u16_cmp (const uint16_t *S1, const uint16_t *S2, + size_t N) + -- Function: int u32_cmp (const uint32_t *S1, const uint32_t *S2, + size_t N) + Compares S1 and S2, each of length N, lexicographically. Returns + a negative value if S1 compares smaller than S2, a positive value + if S1 compares larger than S2, or 0 if they compare equal. + + This function is similar to `memcmp', except that it operates on + Unicode strings. + + The following function compares two Unicode strings of possibly +different lengths. + + -- Function: int u8_cmp2 (const uint8_t *S1, size_t N1, const uint8_t + *S2, size_t N2) + -- Function: int u16_cmp2 (const uint16_t *S1, size_t N1, const + uint16_t *S2, size_t N2) + -- Function: int u32_cmp2 (const uint32_t *S1, size_t N1, const + uint32_t *S2, size_t N2) + Compares S1 and S2, lexicographically. Returns a negative value + if S1 compares smaller than S2, a positive value if S1 compares + larger than S2, or 0 if they compare equal. + + This function is similar to the gnulib function `memcmp2', except + that it operates on Unicode strings. + + The following function searches for a given Unicode character. + + -- Function: uint8_t * u8_chr (const uint8_t *S, size_t N, ucs4_t UC) + -- Function: uint16_t * u16_chr (const uint16_t *S, size_t N, ucs4_t + UC) + -- Function: uint32_t * u32_chr (const uint32_t *S, size_t N, ucs4_t + UC) + Searches the string at S for UC. Returns a pointer to the first + occurrence of UC in S, or NULL if UC does not occur in S. + + This function is similar to `memchr', except that it operates on + Unicode strings. + + The following function counts the number of Unicode characters. + + -- Function: size_t u8_mbsnlen (const uint8_t *S, size_t N) + -- Function: size_t u16_mbsnlen (const uint16_t *S, size_t N) + -- Function: size_t u32_mbsnlen (const uint32_t *S, size_t N) + Counts and returns the number of Unicode characters in the N units + from S. + + This function is similar to the gnulib function `mbsnlen', except + that it operates on Unicode strings. + + +File: libunistring.info, Node: Elementary string functions with memory allocation, Next: Elementary string functions on NUL terminated strings, Prev: Elementary string functions, Up: unistr.h + +4.4 Elementary string functions with memory allocation +====================================================== + + The following function copies a Unicode string. + + -- Function: uint8_t * u8_cpy_alloc (const uint8_t *S, size_t N) + -- Function: uint16_t * u16_cpy_alloc (const uint16_t *S, size_t N) + -- Function: uint32_t * u32_cpy_alloc (const uint32_t *S, size_t N) + Makes a freshly allocated copy of S, of length N. + + +File: libunistring.info, Node: Elementary string functions on NUL terminated strings, Prev: Elementary string functions with memory allocation, Up: unistr.h + +4.5 Elementary string functions on NUL terminated strings +========================================================= + + The following functions inspect and return details about the first +character in a Unicode string. + + -- Function: int u8_strmblen (const uint8_t *S) + -- Function: int u16_strmblen (const uint16_t *S) + -- Function: int u32_strmblen (const uint32_t *S) + Returns the length (number of units) of the first character in S. + Returns 0 if it is the NUL character. Returns -1 upon failure. + + -- Function: int u8_strmbtouc (ucs4_t *PUC, const uint8_t *S) + -- Function: int u16_strmbtouc (ucs4_t *PUC, const uint16_t *S) + -- Function: int u32_strmbtouc (ucs4_t *PUC, const uint32_t *S) + Returns the length (number of units) of the first character in S, + putting its `ucs4_t' representation in `*PUC'. Returns 0 if it is + the NUL character. Returns -1 upon failure. + + -- Function: const uint8_t * u8_next (ucs4_t *PUC, const uint8_t *S) + -- Function: const uint16_t * u16_next (ucs4_t *PUC, const uint16_t *S) + -- Function: const uint32_t * u32_next (ucs4_t *PUC, const uint32_t *S) + Forward iteration step. Advances the pointer past the next + character, or returns NULL if the end of the string has been + reached. Puts the character's `ucs4_t' representation in `*PUC'. + + The following function inspects and returns details about the +previous character in a Unicode string. + + -- Function: const uint8_t * u8_prev (ucs4_t *PUC, const uint8_t *S, + const uint8_t *START) + -- Function: const uint16_t * u16_prev (ucs4_t *PUC, const uint16_t + *S, const uint16_t *START) + -- Function: const uint32_t * u32_prev (ucs4_t *PUC, const uint32_t + *S, const uint32_t *START) + Backward iteration step. Advances the pointer to point to the + previous character, or returns NULL if the beginning of the string + had been reached. Puts the character's `ucs4_t' representation in + `*PUC'. + + The following functions determine the length of a Unicode string. + + -- Function: size_t u8_strlen (const uint8_t *S) + -- Function: size_t u16_strlen (const uint16_t *S) + -- Function: size_t u32_strlen (const uint32_t *S) + Returns the number of units in S. + + This function is similar to `strlen' and `wcslen', except that it + operates on Unicode strings. + + -- Function: size_t u8_strnlen (const uint8_t *S, size_t MAXLEN) + -- Function: size_t u16_strnlen (const uint16_t *S, size_t MAXLEN) + -- Function: size_t u32_strnlen (const uint32_t *S, size_t MAXLEN) + Returns the number of units in S, but at most MAXLEN. + + This function is similar to `strnlen' and `wcsnlen', except that + it operates on Unicode strings. + + The following functions copy portions of Unicode strings in memory. + + -- Function: uint8_t * u8_strcpy (uint8_t *DEST, const uint8_t *SRC) + -- Function: uint16_t * u16_strcpy (uint16_t *DEST, const uint16_t + *SRC) + -- Function: uint32_t * u32_strcpy (uint32_t *DEST, const uint32_t + *SRC) + Copies SRC to DEST. + + This function is similar to `strcpy' and `wcscpy', except that it + operates on Unicode strings. + + -- Function: uint8_t * u8_stpcpy (uint8_t *DEST, const uint8_t *SRC) + -- Function: uint16_t * u16_stpcpy (uint16_t *DEST, const uint16_t + *SRC) + -- Function: uint32_t * u32_stpcpy (uint32_t *DEST, const uint32_t + *SRC) + Copies SRC to DEST, returning the address of the terminating NUL + in DEST. + + This function is similar to `stpcpy', except that it operates on + Unicode strings. + + -- Function: uint8_t * u8_strncpy (uint8_t *DEST, const uint8_t *SRC, + size_t N) + -- Function: uint16_t * u16_strncpy (uint16_t *DEST, const uint16_t + *SRC, size_t N) + -- Function: uint32_t * u32_strncpy (uint32_t *DEST, const uint32_t + *SRC, size_t N) + Copies no more than N units of SRC to DEST. + + This function is similar to `strncpy' and `wcsncpy', except that + it operates on Unicode strings. + + -- Function: uint8_t * u8_stpncpy (uint8_t *DEST, const uint8_t *SRC, + size_t N) + -- Function: uint16_t * u16_stpncpy (uint16_t *DEST, const uint16_t + *SRC, size_t N) + -- Function: uint32_t * u32_stpncpy (uint32_t *DEST, const uint32_t + *SRC, size_t N) + Copies no more than N units of SRC to DEST, returning the address + of the last unit written into DEST. + + This function is similar to `stpncpy', except that it operates on + Unicode strings. + + -- Function: uint8_t * u8_strcat (uint8_t *DEST, const uint8_t *SRC) + -- Function: uint16_t * u16_strcat (uint16_t *DEST, const uint16_t + *SRC) + -- Function: uint32_t * u32_strcat (uint32_t *DEST, const uint32_t + *SRC) + Appends SRC onto DEST. + + This function is similar to `strcat' and `wcscat', except that it + operates on Unicode strings. + + -- Function: uint8_t * u8_strncat (uint8_t *DEST, const uint8_t *SRC, + size_t N) + -- Function: uint16_t * u16_strncat (uint16_t *DEST, const uint16_t + *SRC, size_t N) + -- Function: uint32_t * u32_strncat (uint32_t *DEST, const uint32_t + *SRC, size_t N) + Appends no more than N units of SRC onto DEST. + + This function is similar to `strncat' and `wcsncat', except that + it operates on Unicode strings. + + The following functions compare two Unicode strings. + + -- Function: int u8_strcmp (const uint8_t *S1, const uint8_t *S2) + -- Function: int u16_strcmp (const uint16_t *S1, const uint16_t *S2) + -- Function: int u32_strcmp (const uint32_t *S1, const uint32_t *S2) + Compares S1 and S2, lexicographically. Returns a negative value + if S1 compares smaller than S2, a positive value if S1 compares + larger than S2, or 0 if they compare equal. + + This function is similar to `strcmp' and `wcscmp', except that it + operates on Unicode strings. + + -- Function: int u8_strcoll (const uint8_t *S1, const uint8_t *S2) + -- Function: int u16_strcoll (const uint16_t *S1, const uint16_t *S2) + -- Function: int u32_strcoll (const uint32_t *S1, const uint32_t *S2) + Compares S1 and S2 using the collation rules of the current locale. + Returns -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2. Upon failure, + sets `errno' and returns any value. + + This function is similar to `strcoll' and `wcscoll', except that + it operates on Unicode strings. + + Note that this function may consider different canonical + normalizations of the same string as having a large distance. It + is therefore better to use the function `u8_normcoll' instead of + this one; see *note uninorm.h::. + + -- Function: int u8_strncmp (const uint8_t *S1, const uint8_t *S2, + size_t N) + -- Function: int u16_strncmp (const uint16_t *S1, const uint16_t *S2, + size_t N) + -- Function: int u32_strncmp (const uint32_t *S1, const uint32_t *S2, + size_t N) + Compares no more than N units of S1 and S2. + + This function is similar to `strncmp' and `wcsncmp', except that + it operates on Unicode strings. + + The following function allocates a duplicate of a Unicode string. + + -- Function: uint8_t * u8_strdup (const uint8_t *S) + -- Function: uint16_t * u16_strdup (const uint16_t *S) + -- Function: uint32_t * u32_strdup (const uint32_t *S) + Duplicates S, returning an identical malloc'd string. + + This function is similar to `strdup' and `wcsdup', except that it + operates on Unicode strings. + + The following functions search for a given Unicode character. + + -- Function: uint8_t * u8_strchr (const uint8_t *STR, ucs4_t UC) + -- Function: uint16_t * u16_strchr (const uint16_t *STR, ucs4_t UC) + -- Function: uint32_t * u32_strchr (const uint32_t *STR, ucs4_t UC) + Finds the first occurrence of UC in STR. + + This function is similar to `strchr' and `wcschr', except that it + operates on Unicode strings. + + -- Function: uint8_t * u8_strrchr (const uint8_t *STR, ucs4_t UC) + -- Function: uint16_t * u16_strrchr (const uint16_t *STR, ucs4_t UC) + -- Function: uint32_t * u32_strrchr (const uint32_t *STR, ucs4_t UC) + Finds the last occurrence of UC in STR. + + This function is similar to `strrchr' and `wcsrchr', except that + it operates on Unicode strings. + + The following functions search for the first occurrence of some +Unicode character in or outside a given set of Unicode characters. + + -- Function: size_t u8_strcspn (const uint8_t *STR, const uint8_t + *REJECT) + -- Function: size_t u16_strcspn (const uint16_t *STR, const uint16_t + *REJECT) + -- Function: size_t u32_strcspn (const uint32_t *STR, const uint32_t + *REJECT) + Returns the length of the initial segment of STR which consists + entirely of Unicode characters not in REJECT. + + This function is similar to `strcspn' and `wcscspn', except that + it operates on Unicode strings. + + -- Function: size_t u8_strspn (const uint8_t *STR, const uint8_t + *ACCEPT) + -- Function: size_t u16_strspn (const uint16_t *STR, const uint16_t + *ACCEPT) + -- Function: size_t u32_strspn (const uint32_t *STR, const uint32_t + *ACCEPT) + Returns the length of the initial segment of STR which consists + entirely of Unicode characters in ACCEPT. + + This function is similar to `strspn' and `wcsspn', except that it + operates on Unicode strings. + + -- Function: uint8_t * u8_strpbrk (const uint8_t *STR, const uint8_t + *ACCEPT) + -- Function: uint16_t * u16_strpbrk (const uint16_t *STR, const + uint16_t *ACCEPT) + -- Function: uint32_t * u32_strpbrk (const uint32_t *STR, const + uint32_t *ACCEPT) + Finds the first occurrence in STR of any character in ACCEPT. + + This function is similar to `strpbrk' and `wcspbrk', except that + it operates on Unicode strings. + + The following functions search whether a given Unicode string is a +substring of another Unicode string. + + -- Function: uint8_t * u8_strstr (const uint8_t *HAYSTACK, const + uint8_t *NEEDLE) + -- Function: uint16_t * u16_strstr (const uint16_t *HAYSTACK, const + uint16_t *NEEDLE) + -- Function: uint32_t * u32_strstr (const uint32_t *HAYSTACK, const + uint32_t *NEEDLE) + Finds the first occurrence of NEEDLE in HAYSTACK. + + This function is similar to `strstr' and `wcsstr', except that it + operates on Unicode strings. + + -- Function: bool u8_startswith (const uint8_t *STR, const uint8_t + *PREFIX) + -- Function: bool u16_startswith (const uint16_t *STR, const uint16_t + *PREFIX) + -- Function: bool u32_startswith (const uint32_t *STR, const uint32_t + *PREFIX) + Tests whether STR starts with PREFIX. + + -- Function: bool u8_endswith (const uint8_t *STR, const uint8_t + *SUFFIX) + -- Function: bool u16_endswith (const uint16_t *STR, const uint16_t + *SUFFIX) + -- Function: bool u32_endswith (const uint32_t *STR, const uint32_t + *SUFFIX) + Tests whether STR ends with SUFFIX. + + The following function does one step in tokenizing a Unicode string. + + -- Function: uint8_t * u8_strtok (uint8_t *STR, const uint8_t *DELIM, + uint8_t **PTR) + -- Function: uint16_t * u16_strtok (uint16_t *STR, const uint16_t + *DELIM, uint16_t **PTR) + -- Function: uint32_t * u32_strtok (uint32_t *STR, const uint32_t + *DELIM, uint32_t **PTR) + Divides STR into tokens separated by characters in DELIM. + + This function is similar to `strtok_r' and `wcstok', except that + it operates on Unicode strings. Its interface is actually more + similar to `wcstok' than to `strtok'. + + +File: libunistring.info, Node: uniconv.h, Next: unistdio.h, Prev: unistr.h, Up: Top + +5 Conversions between Unicode and encodings `' +********************************************************* + + This include file declares functions for converting between Unicode +strings and `char *' strings in locale encoding or in other specified +encodings. + + The following function returns the locale encoding. + + -- Function: const char * locale_charset () + Determines the current locale's character encoding, and + canonicalizes it into one of the canonical names listed in + `config.charset'. If the canonical name cannot be determined, the + result is a non-canonical name. + + The result must not be freed; it is statically allocated. + + The result of this function can be used as an argument to the + `iconv_open' function in GNU libc, in GNU libiconv, or in the + gnulib provided wrapper around the native `iconv_open' function. + It may not work as an argument to the native `iconv_open' function + directly. + + The handling of unconvertible characters during the conversions can +be parametrized through the following enumeration type: + + -- Type: enum iconv_ilseq_handler + This type specifies how unconvertible characters in the input are + handled. + + -- Constant: enum iconv_ilseq_handler iconveh_error + This handler causes the function to return with `errno' set to + `EILSEQ'. + + -- Constant: enum iconv_ilseq_handler iconveh_question_mark + This handler produces one question mark `?' per unconvertible + character. + + -- Constant: enum iconv_ilseq_handler iconveh_escape_sequence + This handler produces an escape sequence `\uXXXX' or `\UXXXXXXXX' + for each unconvertible character. + + The following functions convert between strings in a specified +encoding and Unicode strings. + + -- Function: uint8_t * u8_conv_from_encoding (const char *FROMCODE, + enum iconv_ilseq_handler HANDLER, const char *SRC, size_t + SRCLEN, size_t *OFFSETS, uint8_t *RESULTBUF, size_t *LENGTHP) + -- Function: uint16_t * u16_conv_from_encoding (const char *FROMCODE, + enum iconv_ilseq_handler HANDLER, const char *SRC, size_t + SRCLEN, size_t *OFFSETS, uint16_t *RESULTBUF, size_t *LENGTHP) + -- Function: uint32_t * u32_conv_from_encoding (const char *FROMCODE, + enum iconv_ilseq_handler HANDLER, const char *SRC, size_t + SRCLEN, size_t *OFFSETS, uint32_t *RESULTBUF, size_t *LENGTHP) + Converts an entire string, possibly including NUL bytes, from one + encoding to UTF-8 encoding. + + Converts a memory region given in encoding FROMCODE. FROMCODE is + as for the `iconv_open' function. + + The input is in the memory region between SRC (inclusive) and `SRC + + SRCLEN' (exclusive). + + If OFFSETS is not NULL, it should point to an array of SRCLEN + integers; this array is filled with offsets into the result, i.e. + the character starting at `SRC[i]' corresponds to the character + starting at `RESULT[OFFSETS[i]]', and other offsets are set to + `(size_t)(-1)'. + + `RESULTBUF' and `*LENGTHP' should be a scratch buffer and its + size, or `RESULTBUF' can be NULL. + + May erase the contents of the memory at `RESULTBUF'. + + If successful: The resulting Unicode string (non-NULL) is returned + and its length stored in `*LENGTHP'. The resulting string is + `RESULTBUF' if no dynamic memory allocation was necessary, or a + freshly allocated memory block otherwise. + + In case of error: NULL is returned and `errno' is set. Particular + `errno' values: `EINVAL', `EILSEQ', `ENOMEM'. + + -- Function: char * u8_conv_to_encoding (const char *TOCODE, enum + iconv_ilseq_handler HANDLER, const uint8_t *SRC, size_t + SRCLEN, size_t *OFFSETS, char *RESULTBUF, size_t *LENGTHP) + -- Function: char * u16_conv_to_encoding (const char *TOCODE, enum + iconv_ilseq_handler HANDLER, const uint16_t *SRC, size_t + SRCLEN, size_t *OFFSETS, char *RESULTBUF, size_t *LENGTHP) + -- Function: char * u32_conv_to_encoding (const char *TOCODE, enum + iconv_ilseq_handler HANDLER, const uint32_t *SRC, size_t + SRCLEN, size_t *OFFSETS, char *RESULTBUF, size_t *LENGTHP) + Converts an entire Unicode string, possibly including NUL units, + from UTF-8 encoding to a given encoding. + + Converts a memory region to encoding TOCODE. TOCODE is as for the + `iconv_open' function. + + The input is in the memory region between SRC (inclusive) and `SRC + + SRCLEN' (exclusive). + + If OFFSETS is not NULL, it should point to an array of SRCLEN + integers; this array is filled with offsets into the result, i.e. + the character starting at `SRC[i]' corresponds to the character + starting at `RESULT[OFFSETS[i]]', and other offsets are set to + `(size_t)(-1)'. + + `RESULTBUF' and `*LENGTHP' should be a scratch buffer and its + size, or `RESULTBUF' can be NULL. + + May erase the contents of the memory at `RESULTBUF'. + + If successful: The resulting Unicode string (non-NULL) is returned + and its length stored in `*LENGTHP'. The resulting string is + `RESULTBUF' if no dynamic memory allocation was necessary, or a + freshly allocated memory block otherwise. + + In case of error: NULL is returned and `errno' is set. Particular + `errno' values: `EINVAL', `EILSEQ', `ENOMEM'. + + The following functions convert between NUL terminated strings in a +specified encoding and NUL terminated Unicode strings. + + -- Function: uint8_t * u8_strconv_from_encoding (const char *STRING, + const char *FROMCODE, enum iconv_ilseq_handler HANDLER) + -- Function: uint16_t * u16_strconv_from_encoding (const char *STRING, + const char *FROMCODE, enum iconv_ilseq_handler HANDLER) + -- Function: uint32_t * u32_strconv_from_encoding (const char *STRING, + const char *FROMCODE, enum iconv_ilseq_handler HANDLER) + Converts a NUL terminated string from a given encoding. + + The result is `malloc' allocated, or NULL (with ERRNO set) in case + of error. + + Particular `errno' values: `EILSEQ', `ENOMEM'. + + -- Function: char * u8_strconv_to_encoding (const uint8_t *STRING, + const char *TOCODE, enum iconv_ilseq_handler HANDLER) + -- Function: char * u16_strconv_to_encoding (const uint16_t *STRING, + const char *TOCODE, enum iconv_ilseq_handler HANDLER) + -- Function: char * u32_strconv_to_encoding (const uint32_t *STRING, + const char *TOCODE, enum iconv_ilseq_handler HANDLER) + Converts a NUL terminated string to a given encoding. + + The result is `malloc' allocated, or NULL (with `errno' set) in + case of error. + + Particular `errno' values: `EILSEQ', `ENOMEM'. + + The following functions are shorthands that convert between NUL +terminated strings in locale encoding and NUL terminated Unicode +strings. + + -- Function: uint8_t * u8_strconv_from_locale (const char *STRING) + -- Function: uint16_t * u16_strconv_from_locale (const char *STRING) + -- Function: uint32_t * u32_strconv_from_locale (const char *STRING) + Converts a NUL terminated string from the locale encoding. + + The result is `malloc' allocated, or NULL (with `errno' set) in + case of error. + + Particular `errno' values: `ENOMEM'. + + -- Function: char * u8_strconv_to_locale (const uint8_t *STRING) + -- Function: char * u16_strconv_to_locale (const uint16_t *STRING) + -- Function: char * u32_strconv_to_locale (const uint32_t *STRING) + Converts a NUL terminated string to the locale encoding. + + The result is `malloc' allocated, or NULL (with `errno' set) in + case of error. + + Particular `errno' values: `ENOMEM'. + + +File: libunistring.info, Node: unistdio.h, Next: uniname.h, Prev: uniconv.h, Up: Top + +6 Output with Unicode strings `' +******************************************** + + This include file declares functions for doing formatted output with +Unicode strings. It defines a set of functions similar to `fprintf' and +`sprintf', which are declared in `'. + + These functions work like the `printf' function family. In the +format string: + * The format directive `U' takes an UTF-8 string (`const uint8_t *'). + + * The format directive `lU' takes an UTF-16 string (`const uint16_t + *'). + + * The format directive `llU' takes an UTF-32 string (`const uint32_t + *'). + + A function name with an infix `v' indicates that a `va_list' is +passed instead of multiple arguments. + + The functions `*sprintf' have a BUF argument that is assumed to be +large enough. (_DANGEROUS! Overflowing the buffer will crash the +program._) + + The functions `*snprintf' have a BUF argument that is assumed to be +SIZE units large. (_DANGEROUS! The resulting string might be +truncated in the middle of a multibyte character._) + + The functions `*asprintf' have a RESULTP argument. The result will +be freshly allocated and stored in `*resultp'. + + The functions `*asnprintf' have a (RESULTBUF, LENGTHP) argument +pair. If RESULTBUF is not NULL and the result fits into `*LENGTHP' +units, it is put in RESULTBUF, and RESULTBUF is returned. Otherwise, a +freshly allocated string is returned. In both cases, `*LENGTHP' is set +to the length (number of units) of the returned string. In case of +error, NULL is returned and `errno' is set. + + The following functions take an ASCII format string and return a +result that is a `char *' string in locale encoding. + + -- Function: int ulc_sprintf (char *BUF, const char *FORMAT, ...) + + -- Function: int ulc_snprintf (char *BUF, size_t size, const char + *FORMAT, ...) + + -- Function: int ulc_asprintf (char **RESULTP, const char *FORMAT, ...) + + -- Function: char * ulc_asnprintf (char *RESULTBUF, size_t *LENGTHP, + const char *FORMAT, ...) + + -- Function: int ulc_vsprintf (char *BUF, const char *FORMAT, va_list + AP) + + -- Function: int ulc_vsnprintf (char *BUF, size_t size, const char + *FORMAT, va_list AP) + + -- Function: int ulc_vasprintf (char **RESULTP, const char *FORMAT, + va_list AP) + + -- Function: char * ulc_vasnprintf (char *RESULTBUF, size_t *LENGTHP, + const char *FORMAT, va_list AP) + + The following functions take an ASCII format string and return a +result in UTF-8 format. + + -- Function: int u8_sprintf (uint8_t *BUF, const char *FORMAT, ...) + + -- Function: int u8_snprintf (uint8_t *BUF, size_t SIZE, const char + *FORMAT, ...) + + -- Function: int u8_asprintf (uint8_t **RESULTP, const char *FORMAT, + ...) + + -- Function: uint8_t * u8_asnprintf (uint8_t *RESULTBUF, size_t + *LENGTHP, const char *FORMAT, ...) + + -- Function: int u8_vsprintf (uint8_t *BUF, const char *FORMAT, + va_list ap) + + -- Function: int u8_vsnprintf (uint8_t *BUF, size_t SIZE, const char + *FORMAT, va_list AP) + + -- Function: int u8_vasprintf (uint8_t **RESULTP, const char *FORMAT, + va_list AP) + + -- Function: uint8_t * u8_vasnprintf (uint8_t *resultbuf, size_t + *LENGTHP, const char *FORMAT, va_list AP) + + The following functions take an UTF-8 format string and return a +result in UTF-8 format. + + -- Function: int u8_u8_sprintf (uint8_t *BUF, const uint8_t *FORMAT, + ...) + + -- Function: int u8_u8_snprintf (uint8_t *BUF, size_t SIZE, const + uint8_t *FORMAT, ...) + + -- Function: int u8_u8_asprintf (uint8_t **RESULTP, const uint8_t + *FORMAT, ...) + + -- Function: uint8_t * u8_u8_asnprintf (uint8_t *resultbuf, size_t + *LENGTHP, const uint8_t *FORMAT, ...) + + -- Function: int u8_u8_vsprintf (uint8_t *BUF, const uint8_t *FORMAT, + va_list AP) + + -- Function: int u8_u8_vsnprintf (uint8_t *BUF, size_t SIZE, const + uint8_t *FORMAT, va_list AP) + + -- Function: int u8_u8_vasprintf (uint8_t **RESULTP, const uint8_t + *FORMAT, va_list AP) + + -- Function: uint8_t * u8_u8_vasnprintf (uint8_t *resultbuf, size_t + *LENGTHP, const uint8_t *FORMAT, va_list AP) + + The following functions take an ASCII format string and return a +result in UTF-16 format. + + -- Function: int u16_sprintf (uint16_t *BUF, const char *FORMAT, ...) + + -- Function: int u16_snprintf (uint16_t *BUF, size_t SIZE, const char + *FORMAT, ...) + + -- Function: int u16_asprintf (uint16_t **RESULTP, const char *FORMAT, + ...) + + -- Function: uint16_t * u16_asnprintf (uint16_t *RESULTBUF, size_t + *LENGTHP, const char *FORMAT, ...) + + -- Function: int u16_vsprintf (uint16_t *BUF, const char *FORMAT, + va_list ap) + + -- Function: int u16_vsnprintf (uint16_t *BUF, size_t SIZE, const char + *FORMAT, va_list AP) + + -- Function: int u16_vasprintf (uint16_t **RESULTP, const char + *FORMAT, va_list AP) + + -- Function: uint16_t * u16_vasnprintf (uint16_t *resultbuf, size_t + *LENGTHP, const char *FORMAT, va_list AP) + + The following functions take an UTF-16 format string and return a +result in UTF-16 format. + + -- Function: int u16_u16_sprintf (uint16_t *BUF, const uint16_t + *FORMAT, ...) + + -- Function: int u16_u16_snprintf (uint16_t *BUF, size_t SIZE, const + uint16_t *FORMAT, ...) + + -- Function: int u16_u16_asprintf (uint16_t **RESULTP, const uint16_t + *FORMAT, ...) + + -- Function: uint16_t * u16_u16_asnprintf (uint16_t *resultbuf, size_t + *LENGTHP, const uint16_t *FORMAT, ...) + + -- Function: int u16_u16_vsprintf (uint16_t *BUF, const uint16_t + *FORMAT, va_list AP) + + -- Function: int u16_u16_vsnprintf (uint16_t *BUF, size_t SIZE, const + uint16_t *FORMAT, va_list AP) + + -- Function: int u16_u16_vasprintf (uint16_t **RESULTP, const uint16_t + *FORMAT, va_list AP) + + -- Function: uint16_t * u16_u16_vasnprintf (uint16_t *resultbuf, + size_t *LENGTHP, const uint16_t *FORMAT, va_list AP) + + The following functions take an ASCII format string and return a +result in UTF-32 format. + + -- Function: int u32_sprintf (uint32_t *BUF, const char *FORMAT, ...) + + -- Function: int u32_snprintf (uint32_t *BUF, size_t SIZE, const char + *FORMAT, ...) + + -- Function: int u32_asprintf (uint32_t **RESULTP, const char *FORMAT, + ...) + + -- Function: uint32_t * u32_asnprintf (uint32_t *RESULTBUF, size_t + *LENGTHP, const char *FORMAT, ...) + + -- Function: int u32_vsprintf (uint32_t *BUF, const char *FORMAT, + va_list ap) + + -- Function: int u32_vsnprintf (uint32_t *BUF, size_t SIZE, const char + *FORMAT, va_list AP) + + -- Function: int u32_vasprintf (uint32_t **RESULTP, const char + *FORMAT, va_list AP) + + -- Function: uint32_t * u32_vasnprintf (uint32_t *resultbuf, size_t + *LENGTHP, const char *FORMAT, va_list AP) + + The following functions take an UTF-32 format string and return a +result in UTF-32 format. + + -- Function: int u32_u32_sprintf (uint32_t *BUF, const uint32_t + *FORMAT, ...) + + -- Function: int u32_u32_snprintf (uint32_t *BUF, size_t SIZE, const + uint32_t *FORMAT, ...) + + -- Function: int u32_u32_asprintf (uint32_t **RESULTP, const uint32_t + *FORMAT, ...) + + -- Function: uint32_t * u32_u32_asnprintf (uint32_t *resultbuf, size_t + *LENGTHP, const uint32_t *FORMAT, ...) + + -- Function: int u32_u32_vsprintf (uint32_t *BUF, const uint32_t + *FORMAT, va_list AP) + + -- Function: int u32_u32_vsnprintf (uint32_t *BUF, size_t SIZE, const + uint32_t *FORMAT, va_list AP) + + -- Function: int u32_u32_vasprintf (uint32_t **RESULTP, const uint32_t + *FORMAT, va_list AP) + + -- Function: uint32_t * u32_u32_vasnprintf (uint32_t *resultbuf, + size_t *LENGTHP, const uint32_t *FORMAT, va_list AP) + + The following functions take an ASCII format string and produce +output in locale encoding to a `FILE' stream. + + -- Function: int ulc_fprintf (FILE *STREAM, const char *FORMAT, ...) + + -- Function: int ulc_vfprintf (FILE *STREAM, const char *FORMAT, + va_list AP) + + +File: libunistring.info, Node: uniname.h, Next: unictype.h, Prev: unistdio.h, Up: Top + +7 Names of Unicode characters `' +******************************************* + + This include file implements the association between a Unicode +character and its name. + + The name of a Unicode character allows to distinguish it from other, +similar looking characters. For example, the character `x' has the name +`"LATIN SMALL LETTER X"' and is therefore different from the character +named `"MULTIPLICATION SIGN"'. + + -- Macro: unsigned int UNINAME_MAX + This macro expands to a constant that is the required size of + buffer for a Unicode character name. + + -- Function: char * unicode_character_name (ucs4_t UC, char *BUF) + Looks up the name of a Unicode character, in uppercase ASCII. BUF + must point to a buffer, at least `UNINAME_MAX' bytes in size. + Returns the filled BUF, or NULL if the character does not have a + name. + + -- Function: ucs4_t unicode_name_character (const char *NAME) + Looks up the Unicode character with a given name, in upper- or + lowercase ASCII. Returns the character if found, or + `UNINAME_INVALID' if not found. + + -- Macro: ucs4_t UNINAME_INVALID + This macro expands to a constant that is a special return value of + the `unicode_name_character' function. + + +File: libunistring.info, Node: unictype.h, Next: uniwidth.h, Prev: uniname.h, Up: Top + +8 Unicode character classification and properties `' +**************************************************************** + + This include file declares functions that classify Unicode characters +and that test whether Unicode characters have specific properties. + + The classification assigns a "general category" to every Unicode +character. This is similar to the classification provided by ISO C in +`'. + + Properties are the data that guides various text processing +algorithms in the presence of specific Unicode characters. + +* Menu: + +* General category:: +* Canonical combining class:: +* Bidirectional category:: +* Decimal digit value:: +* Digit value:: +* Numeric value:: +* Mirrored character:: +* Properties:: +* Scripts:: +* Blocks:: +* ISO C and Java syntax:: +* Classifications like in ISO C:: + + +File: libunistring.info, Node: General category, Next: Canonical combining class, Up: unictype.h + +8.1 General category +==================== + + Every Unicode character or code point has a _general category_ +assigned to it. This classification is important for most algorithms +that work on Unicode text. + + The GNU libunistring library provides two kinds of API for working +with general categories. The object oriented API uses a variable to +denote every predefined general category value or combinations thereof. +The low-level API uses a bit mask instead. The advantage of the object +oriented API is that if only a few predefined general category values +are used, the data tables are relatively small. When you combine +general category values (using `uc_general_category_or', +`uc_general_category_and', or `uc_general_category_and_not'), or when +you use the low level bit masks, a big table is used thats holds the +complete general category information for all Unicode characters. + +* Menu: + +* Object oriented API:: +* Bit mask API:: + + +File: libunistring.info, Node: Object oriented API, Next: Bit mask API, Up: General category + +8.1.1 The object oriented API for general category +-------------------------------------------------- + + -- Type: uc_general_category_t + This data type denotes a general category value. It is an + immediate type that can be copied by simple assignment, without + involving memory allocation. It is not an array type. + + The following are the predefined general category value. Additional +general categories may be added in the future. + + -- Constant: uc_general_category_t UC_CATEGORY_L + -- Constant: uc_general_category_t UC_CATEGORY_Lu + -- Constant: uc_general_category_t UC_CATEGORY_Ll + -- Constant: uc_general_category_t UC_CATEGORY_Lt + -- Constant: uc_general_category_t UC_CATEGORY_Lm + -- Constant: uc_general_category_t UC_CATEGORY_Lo + -- Constant: uc_general_category_t UC_CATEGORY_M + -- Constant: uc_general_category_t UC_CATEGORY_Mn + -- Constant: uc_general_category_t UC_CATEGORY_Mc + -- Constant: uc_general_category_t UC_CATEGORY_Me + -- Constant: uc_general_category_t UC_CATEGORY_N + -- Constant: uc_general_category_t UC_CATEGORY_Nd + -- Constant: uc_general_category_t UC_CATEGORY_Nl + -- Constant: uc_general_category_t UC_CATEGORY_No + -- Constant: uc_general_category_t UC_CATEGORY_P + -- Constant: uc_general_category_t UC_CATEGORY_Pc + -- Constant: uc_general_category_t UC_CATEGORY_Pd + -- Constant: uc_general_category_t UC_CATEGORY_Ps + -- Constant: uc_general_category_t UC_CATEGORY_Pe + -- Constant: uc_general_category_t UC_CATEGORY_Pi + -- Constant: uc_general_category_t UC_CATEGORY_Pf + -- Constant: uc_general_category_t UC_CATEGORY_Po + -- Constant: uc_general_category_t UC_CATEGORY_S + -- Constant: uc_general_category_t UC_CATEGORY_Sm + -- Constant: uc_general_category_t UC_CATEGORY_Sc + -- Constant: uc_general_category_t UC_CATEGORY_Sk + -- Constant: uc_general_category_t UC_CATEGORY_So + -- Constant: uc_general_category_t UC_CATEGORY_Z + -- Constant: uc_general_category_t UC_CATEGORY_Zs + -- Constant: uc_general_category_t UC_CATEGORY_Zl + -- Constant: uc_general_category_t UC_CATEGORY_Zp + -- Constant: uc_general_category_t UC_CATEGORY_C + -- Constant: uc_general_category_t UC_CATEGORY_Cc + -- Constant: uc_general_category_t UC_CATEGORY_Cf + -- Constant: uc_general_category_t UC_CATEGORY_Cs + -- Constant: uc_general_category_t UC_CATEGORY_Co + -- Constant: uc_general_category_t UC_CATEGORY_Cn + + The following are alias names for predefined General category values. + + -- Macro: uc_general_category_t UC_LETTER + This is another name for `UC_CATEGORY_L'. + + -- Macro: uc_general_category_t UC_UPPERCASE_LETTER + This is another name for `UC_CATEGORY_Lu'. + + -- Macro: uc_general_category_t UC_LOWERCASE_LETTER + This is another name for `UC_CATEGORY_Ll'. + + -- Macro: uc_general_category_t UC_TITLECASE_LETTER + This is another name for `UC_CATEGORY_Lt'. + + -- Macro: uc_general_category_t UC_MODIFIER_LETTER + This is another name for `UC_CATEGORY_Lm'. + + -- Macro: uc_general_category_t UC_OTHER_LETTER + This is another name for `UC_CATEGORY_Lo'. + + -- Macro: uc_general_category_t UC_MARK + This is another name for `UC_CATEGORY_M'. + + -- Macro: uc_general_category_t UC_NON_SPACING_MARK + This is another name for `UC_CATEGORY_Mn'. + + -- Macro: uc_general_category_t UC_COMBINING_SPACING_MARK + This is another name for `UC_CATEGORY_Mc'. + + -- Macro: uc_general_category_t UC_ENCLOSING_MARK + This is another name for `UC_CATEGORY_Me'. + + -- Macro: uc_general_category_t UC_NUMBER + This is another name for `UC_CATEGORY_N'. + + -- Macro: uc_general_category_t UC_DECIMAL_DIGIT_NUMBER + This is another name for `UC_CATEGORY_Nd'. + + -- Macro: uc_general_category_t UC_LETTER_NUMBER + This is another name for `UC_CATEGORY_Nl'. + + -- Macro: uc_general_category_t UC_OTHER_NUMBER + This is another name for `UC_CATEGORY_No'. + + -- Macro: uc_general_category_t UC_PUNCTUATION + This is another name for `UC_CATEGORY_P'. + + -- Macro: uc_general_category_t UC_CONNECTOR_PUNCTUATION + This is another name for `UC_CATEGORY_Pc'. + + -- Macro: uc_general_category_t UC_DASH_PUNCTUATION + This is another name for `UC_CATEGORY_Pd'. + + -- Macro: uc_general_category_t UC_OPEN_PUNCTUATION + This is another name for `UC_CATEGORY_Ps' ("start punctuation"). + + -- Macro: uc_general_category_t UC_CLOSE_PUNCTUATION + This is another name for `UC_CATEGORY_Pe' ("end punctuation"). + + -- Macro: uc_general_category_t UC_INITIAL_QUOTE_PUNCTUATION + This is another name for `UC_CATEGORY_Pi'. + + -- Macro: uc_general_category_t UC_FINAL_QUOTE_PUNCTUATION + This is another name for `UC_CATEGORY_Pf'. + + -- Macro: uc_general_category_t UC_OTHER_PUNCTUATION + This is another name for `UC_CATEGORY_Po'. + + -- Macro: uc_general_category_t UC_SYMBOL + This is another name for `UC_CATEGORY_S'. + + -- Macro: uc_general_category_t UC_MATH_SYMBOL + This is another name for `UC_CATEGORY_Sm'. + + -- Macro: uc_general_category_t UC_CURRENCY_SYMBOL + This is another name for `UC_CATEGORY_Sc'. + + -- Macro: uc_general_category_t UC_MODIFIER_SYMBOL + This is another name for `UC_CATEGORY_Sk'. + + -- Macro: uc_general_category_t UC_OTHER_SYMBOL + This is another name for `UC_CATEGORY_So'. + + -- Macro: uc_general_category_t UC_SEPARATOR + This is another name for `UC_CATEGORY_Z'. + + -- Macro: uc_general_category_t UC_SPACE_SEPARATOR + This is another name for `UC_CATEGORY_Zs'. + + -- Macro: uc_general_category_t UC_LINE_SEPARATOR + This is another name for `UC_CATEGORY_Zl'. + + -- Macro: uc_general_category_t UC_PARAGRAPH_SEPARATOR + This is another name for `UC_CATEGORY_Zp'. + + -- Macro: uc_general_category_t UC_OTHER + This is another name for `UC_CATEGORY_C'. + + -- Macro: uc_general_category_t UC_CONTROL + This is another name for `UC_CATEGORY_Cc'. + + -- Macro: uc_general_category_t UC_FORMAT + This is another name for `UC_CATEGORY_Cf'. + + -- Macro: uc_general_category_t UC_SURROGATE + This is another name for `UC_CATEGORY_Cs'. All code points in this + category are invalid characters. + + -- Macro: uc_general_category_t UC_PRIVATE_USE + This is another name for `UC_CATEGORY_Co'. + + -- Macro: uc_general_category_t UC_UNASSIGNED + This is another name for `UC_CATEGORY_Cn'. Some code points in + this category are invalid characters. + + The following functions combine general categories, like in a +boolean algebra, except that there is no `not' operation. + + -- Function: uc_general_category_t uc_general_category_or + (uc_general_category_t CATEGORY1, uc_general_category_t + CATEGORY2) + Returns the union of two general categories. This corresponds to + the unions of the two sets of characters. + + -- Function: uc_general_category_t uc_general_category_and + (uc_general_category_t CATEGORY1, uc_general_category_t + CATEGORY2) + Returns the intersection of two general categories as bit masks. + This _does not_ correspond to the intersection of the two sets of + characters. + + -- Function: uc_general_category_t uc_general_category_and_not + (uc_general_category_t CATEGORY1, uc_general_category_t + CATEGORY2) + Returns the intersection of a general category with the complement + of a second general category, as bit masks. This _does not_ + correspond to the intersection with complement, when viewing the + categories as sets of characters. + + The following functions associate general categories with their name. + + -- Function: const char * uc_general_category_name + (uc_general_category_t CATEGORY) + Returns the name of a general category. Returns NULL if the + general category corresponds to a bit mask that does not have a + name. + + -- Function: uc_general_category_t uc_general_category_byname (const + char *CATEGORY_NAME) + Returns the general category given by name, e.g. `"Lu"'. + + The following functions view general categories as sets of Unicode +characters. + + -- Function: uc_general_category_t uc_general_category (ucs4_t UC) + Returns the general category of a Unicode character. + + This function uses a big table. + + -- Function: bool uc_is_general_category (ucs4_t UC, + uc_general_category_t CATEGORY) + Tests whether a Unicode character belongs to a given category. + The CATEGORY argument can be a predefined general category or the + combination of several predefined general categories. + + +File: libunistring.info, Node: Bit mask API, Prev: Object oriented API, Up: General category + +8.1.2 The bit mask API for general category +------------------------------------------- + + The following are the predefined general category value as bit masks. +Additional general categories may be added in the future. + + -- Macro: uint32_t UC_CATEGORY_MASK_L + -- Macro: uint32_t UC_CATEGORY_MASK_Lu + -- Macro: uint32_t UC_CATEGORY_MASK_Ll + -- Macro: uint32_t UC_CATEGORY_MASK_Lt + -- Macro: uint32_t UC_CATEGORY_MASK_Lm + -- Macro: uint32_t UC_CATEGORY_MASK_Lo + -- Macro: uint32_t UC_CATEGORY_MASK_M + -- Macro: uint32_t UC_CATEGORY_MASK_Mn + -- Macro: uint32_t UC_CATEGORY_MASK_Mc + -- Macro: uint32_t UC_CATEGORY_MASK_Me + -- Macro: uint32_t UC_CATEGORY_MASK_N + -- Macro: uint32_t UC_CATEGORY_MASK_Nd + -- Macro: uint32_t UC_CATEGORY_MASK_Nl + -- Macro: uint32_t UC_CATEGORY_MASK_No + -- Macro: uint32_t UC_CATEGORY_MASK_P + -- Macro: uint32_t UC_CATEGORY_MASK_Pc + -- Macro: uint32_t UC_CATEGORY_MASK_Pd + -- Macro: uint32_t UC_CATEGORY_MASK_Ps + -- Macro: uint32_t UC_CATEGORY_MASK_Pe + -- Macro: uint32_t UC_CATEGORY_MASK_Pi + -- Macro: uint32_t UC_CATEGORY_MASK_Pf + -- Macro: uint32_t UC_CATEGORY_MASK_Po + -- Macro: uint32_t UC_CATEGORY_MASK_S + -- Macro: uint32_t UC_CATEGORY_MASK_Sm + -- Macro: uint32_t UC_CATEGORY_MASK_Sc + -- Macro: uint32_t UC_CATEGORY_MASK_Sk + -- Macro: uint32_t UC_CATEGORY_MASK_So + -- Macro: uint32_t UC_CATEGORY_MASK_Z + -- Macro: uint32_t UC_CATEGORY_MASK_Zs + -- Macro: uint32_t UC_CATEGORY_MASK_Zl + -- Macro: uint32_t UC_CATEGORY_MASK_Zp + -- Macro: uint32_t UC_CATEGORY_MASK_C + -- Macro: uint32_t UC_CATEGORY_MASK_Cc + -- Macro: uint32_t UC_CATEGORY_MASK_Cf + -- Macro: uint32_t UC_CATEGORY_MASK_Cs + -- Macro: uint32_t UC_CATEGORY_MASK_Co + -- Macro: uint32_t UC_CATEGORY_MASK_Cn + + The following function views general categories as sets of Unicode +characters. + + -- Function: bool uc_is_general_category_withtable (ucs4_t UC, + uint32_t BITMASK) + Tests whether a Unicode character belongs to a given category. + The BITMASK argument can be a predefined general category bitmask + or the combination of several predefined general category bitmasks. + + This function uses a big table comprising all general categories. + + +File: libunistring.info, Node: Canonical combining class, Next: Bidirectional category, Prev: General category, Up: unictype.h + +8.2 Canonical combining class +============================= + + Every Unicode character or code point has a _canonical combining +class_ assigned to it. + + What is the meaning of the canonical combining class? Essentially, +it indicates the priority with which a combining character is attached +to its base character. The characters for which the canonical +combining class is 0 are the base characters, and the characters for +which it is greater than 0 are the combining characters. Combining +characters are rendered near/attached/around their base character, and +combining characters with small combining classes are attached "first" +or "closer" to the base character. + + The canonical combining class of a character is a number in the range +0..255. The possible values are described in the Unicode Character +Database `http://www.unicode.org/Public/UNIDATA/UCD.html'. The list +here is not definitive; more values can be added in future versions. + + -- Constant: int UC_CCC_NR + The canonical combining class value for "Not Reordered" characters. + The value is 0. + + -- Constant: int UC_CCC_OV + The canonical combining class value for "Overlay" characters. + + -- Constant: int UC_CCC_NK + The canonical combining class value for "Nukta" characters. + + -- Constant: int UC_CCC_KV + The canonical combining class value for "Kana Voicing" characters. + + -- Constant: int UC_CCC_VR + The canonical combining class value for "Virama" characters. + + -- Constant: int UC_CCC_ATBL + The canonical combining class value for "Attached Below Left" + characters. + + -- Constant: int UC_CCC_ATB + The canonical combining class value for "Attached Below" + characters. + + -- Constant: int UC_CCC_ATAR + The canonical combining class value for "Attached Above Right" + characters. + + -- Constant: int UC_CCC_BL + The canonical combining class value for "Below Left" characters. + + -- Constant: int UC_CCC_B + The canonical combining class value for "Below" characters. + + -- Constant: int UC_CCC_BR + The canonical combining class value for "Below Right" characters. + + -- Constant: int UC_CCC_L + The canonical combining class value for "Left" characters. + + -- Constant: int UC_CCC_R + The canonical combining class value for "Right" characters. + + -- Constant: int UC_CCC_AL + The canonical combining class value for "Above Left" characters. + + -- Constant: int UC_CCC_A + The canonical combining class value for "Above" characters. + + -- Constant: int UC_CCC_AR + The canonical combining class value for "Above Right" characters. + + -- Constant: int UC_CCC_DB + The canonical combining class value for "Double Below" characters. + + -- Constant: int UC_CCC_DA + The canonical combining class value for "Double Above" characters. + + -- Constant: int UC_CCC_IS + The canonical combining class value for "Iota Subscript" + characters. + + The following function looks up the canonical combining class of a +character. + + -- Function: int uc_combining_class (ucs4_t UC) + Returns the canonical combining class of a Unicode character. + + +File: libunistring.info, Node: Bidirectional category, Next: Decimal digit value, Prev: Canonical combining class, Up: unictype.h + +8.3 Bidirectional category +========================== + + Every Unicode character or code point has a _bidirectional category_ +assigned to it. + + The bidirectional category guides the bidirectional algorithm +(`http://www.unicode.org/reports/tr9/'). The possible values are the +following. + + -- Constant: int UC_BIDI_L + The bidirectional category for `Left-to-Right`" characters. + + -- Constant: int UC_BIDI_LRE + The bidirectional category for "Left-to-Right Embedding" + characters. + + -- Constant: int UC_BIDI_LRO + The bidirectional category for "Left-to-Right Override" characters. + + -- Constant: int UC_BIDI_R + The bidirectional category for "Right-to-Left" characters. + + -- Constant: int UC_BIDI_AL + The bidirectional category for "Right-to-Left Arabic" characters. + + -- Constant: int UC_BIDI_RLE + The bidirectional category for "Right-to-Left Embedding" + characters. + + -- Constant: int UC_BIDI_RLO + The bidirectional category for "Right-to-Left Override" characters. + + -- Constant: int UC_BIDI_PDF + The bidirectional category for "Pop Directional Format" characters. + + -- Constant: int UC_BIDI_EN + The bidirectional category for "European Number" characters. + + -- Constant: int UC_BIDI_ES + The bidirectional category for "European Number Separator" + characters. + + -- Constant: int UC_BIDI_ET + The bidirectional category for "European Number Terminator" + characters. + + -- Constant: int UC_BIDI_AN + The bidirectional category for "Arabic Number" characters. + + -- Constant: int UC_BIDI_CS + The bidirectional category for "Common Number Separator" + characters. + + -- Constant: int UC_BIDI_NSM + The bidirectional category for "Non-Spacing Mark" characters. + + -- Constant: int UC_BIDI_BN + The bidirectional category for "Boundary Neutral" characters. + + -- Constant: int UC_BIDI_B + The bidirectional category for "Paragraph Separator" characters. + + -- Constant: int UC_BIDI_S + The bidirectional category for "Segment Separator" characters. + + -- Constant: int UC_BIDI_WS + The bidirectional category for "Whitespace" characters. + + -- Constant: int UC_BIDI_ON + The bidirectional category for "Other Neutral" characters. + + The following functions implement the association between a +bidirectional category and its name. + + -- Function: const char * uc_bidi_category_name (int CATEGORY) + Returns the name of a bidirectional category. + + -- Function: int uc_bidi_category_byname (const char *CATEGORY_NAME) + Returns the bidirectional category given by name, e.g. `"LRE"'. + + The following functions view bidirectional categories as sets of +Unicode characters. + + -- Function: int uc_bidi_category (ucs4_t UC) + Returns the bidirectional category of a Unicode character. + + -- Function: bool uc_is_bidi_category (ucs4_t UC, int CATEGORY) + Tests whether a Unicode character belongs to a given bidirectional + category. + + +File: libunistring.info, Node: Decimal digit value, Next: Digit value, Prev: Bidirectional category, Up: unictype.h + +8.4 Decimal digit value +======================= + + Decimal digits (like the digits from `0' to `9') exist in many +scripts. The following function converts a decimal digit character to +its numerical value. + + -- Function: int uc_decimal_value (ucs4_t UC) + Returns the decimal digit value of a Unicode character. The + return value is an integer in the range 0..9, or -1 for characters + that do not represent a decimal digit. + + +File: libunistring.info, Node: Digit value, Next: Numeric value, Prev: Decimal digit value, Up: unictype.h + +8.5 Digit value +=============== + + Digit characters are like decimal digit characters, possibly in +special forms, like as superscript, subscript, or circled. The +following function converts a digit character to its numerical value. + + -- Function: int uc_digit_value (ucs4_t UC) + Returns the digit value of a Unicode character. The return value + is an integer in the range 0..9, or -1 for characters that do not + represent a digit. + + +File: libunistring.info, Node: Numeric value, Next: Mirrored character, Prev: Digit value, Up: unictype.h + +8.6 Numeric value +================= + + There are also characters that represent numbers without a digit +system, like the Roman numerals, and fractional numbers, like 1/4 or +3/4. + + The following type represents the numeric value of a Unicode +character. + + -- Type: uc_fraction_t + This is a structure type with the following fields: + int numerator; + int denominator; + An integer N is represented by `numerator = N', `denominator = 1'. + + The following function converts a number character to its numerical +value. + + -- Function: uc_fraction_t uc_numeric_value (ucs4_t UC) + Returns the numeric value of a Unicode character. The return + value is a fraction, or the pseudo-fraction `{ 0, 0 }' for + characters that do not represent a number. + + +File: libunistring.info, Node: Mirrored character, Next: Properties, Prev: Numeric value, Up: unictype.h + +8.7 Mirrored character +====================== + + Character mirroring is used to associate the closing parenthesis +character to the opening parenthesis character, the closing brace +character with the opening brace character, and so on. + + The following function looks up the mirrored character of a Unicode +character. + + -- Function: bool uc_mirror_char (ucs4_t UC, ucs4_t *PUC) + Stores the mirrored character of a Unicode character UC in `*PUC' + and returns `true', if it exists. Otherwise it stores UC + unmodified in `*PUC' and returns `false'. + + +File: libunistring.info, Node: Properties, Next: Scripts, Prev: Mirrored character, Up: unictype.h + +8.8 Properties +============== + + This section defines boolean properties of Unicode characters. This +means, a character either has the given property or does not have it. +In other words, the property can be viewed as a subset of the set of +Unicode characters. + + The GNU libunistring library provides two kinds of API for working +with properties. The object oriented API uses a type `uc_property_t' +to designate a property. In the function-based API, which is a bit more +low level, a property is merely a function. + +* Menu: + +* Properties as objects:: +* Properties as functions:: + + +File: libunistring.info, Node: Properties as objects, Next: Properties as functions, Up: Properties + +8.8.1 Properties as objects - the object oriented API +----------------------------------------------------- + + The following type designates a property on Unicode characters. + + -- Type: uc_property_t + This data type denotes a boolean property on Unicode characters. + It is an immediate type that can be copied by simple assignment, + without involving memory allocation. It is not an array type. + + Many Unicode properties are predefined. + + The following are general properties. + + -- Constant: uc_property_t UC_PROPERTY_WHITE_SPACE + -- Constant: uc_property_t UC_PROPERTY_ALPHABETIC + -- Constant: uc_property_t UC_PROPERTY_OTHER_ALPHABETIC + -- Constant: uc_property_t UC_PROPERTY_NOT_A_CHARACTER + -- Constant: uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT + -- Constant: uc_property_t +UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT + -- Constant: uc_property_t UC_PROPERTY_DEPRECATED + -- Constant: uc_property_t UC_PROPERTY_LOGICAL_ORDER_EXCEPTION + -- Constant: uc_property_t UC_PROPERTY_VARIATION_SELECTOR + -- Constant: uc_property_t UC_PROPERTY_PRIVATE_USE + -- Constant: uc_property_t UC_PROPERTY_UNASSIGNED_CODE_VALUE + + The following properties are related to case folding. + + -- Constant: uc_property_t UC_PROPERTY_UPPERCASE + -- Constant: uc_property_t UC_PROPERTY_OTHER_UPPERCASE + -- Constant: uc_property_t UC_PROPERTY_LOWERCASE + -- Constant: uc_property_t UC_PROPERTY_OTHER_LOWERCASE + -- Constant: uc_property_t UC_PROPERTY_TITLECASE + -- Constant: uc_property_t UC_PROPERTY_SOFT_DOTTED + + The following properties are related to identifiers. + + -- Constant: uc_property_t UC_PROPERTY_ID_START + -- Constant: uc_property_t UC_PROPERTY_OTHER_ID_START + -- Constant: uc_property_t UC_PROPERTY_ID_CONTINUE + -- Constant: uc_property_t UC_PROPERTY_OTHER_ID_CONTINUE + -- Constant: uc_property_t UC_PROPERTY_XID_START + -- Constant: uc_property_t UC_PROPERTY_XID_CONTINUE + -- Constant: uc_property_t UC_PROPERTY_PATTERN_WHITE_SPACE + -- Constant: uc_property_t UC_PROPERTY_PATTERN_SYNTAX + + The following properties have an influence on shaping and rendering. + + -- Constant: uc_property_t UC_PROPERTY_JOIN_CONTROL + -- Constant: uc_property_t UC_PROPERTY_GRAPHEME_BASE + -- Constant: uc_property_t UC_PROPERTY_GRAPHEME_EXTEND + -- Constant: uc_property_t UC_PROPERTY_OTHER_GRAPHEME_EXTEND + -- Constant: uc_property_t UC_PROPERTY_GRAPHEME_LINK + + The following properties relate to bidirectional reordering. + + -- Constant: uc_property_t UC_PROPERTY_BIDI_CONTROL + -- Constant: uc_property_t UC_PROPERTY_BIDI_LEFT_TO_RIGHT + -- Constant: uc_property_t UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT + -- Constant: uc_property_t UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT + -- Constant: uc_property_t UC_PROPERTY_BIDI_EUROPEAN_DIGIT + -- Constant: uc_property_t UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR + -- Constant: uc_property_t UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR + -- Constant: uc_property_t UC_PROPERTY_BIDI_ARABIC_DIGIT + -- Constant: uc_property_t UC_PROPERTY_BIDI_COMMON_SEPARATOR + -- Constant: uc_property_t UC_PROPERTY_BIDI_BLOCK_SEPARATOR + -- Constant: uc_property_t UC_PROPERTY_BIDI_SEGMENT_SEPARATOR + -- Constant: uc_property_t UC_PROPERTY_BIDI_WHITESPACE + -- Constant: uc_property_t UC_PROPERTY_BIDI_NON_SPACING_MARK + -- Constant: uc_property_t UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL + -- Constant: uc_property_t UC_PROPERTY_BIDI_PDF + -- Constant: uc_property_t UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE + -- Constant: uc_property_t UC_PROPERTY_BIDI_OTHER_NEUTRAL + + The following properties deal with number representations. + + -- Constant: uc_property_t UC_PROPERTY_HEX_DIGIT + -- Constant: uc_property_t UC_PROPERTY_ASCII_HEX_DIGIT + + The following properties deal with CJK. + + -- Constant: uc_property_t UC_PROPERTY_IDEOGRAPHIC + -- Constant: uc_property_t UC_PROPERTY_UNIFIED_IDEOGRAPH + -- Constant: uc_property_t UC_PROPERTY_RADICAL + -- Constant: uc_property_t UC_PROPERTY_IDS_BINARY_OPERATOR + -- Constant: uc_property_t UC_PROPERTY_IDS_TRINARY_OPERATOR + + Other miscellaneous properties are: + + -- Constant: uc_property_t UC_PROPERTY_ZERO_WIDTH + -- Constant: uc_property_t UC_PROPERTY_SPACE + -- Constant: uc_property_t UC_PROPERTY_NON_BREAK + -- Constant: uc_property_t UC_PROPERTY_ISO_CONTROL + -- Constant: uc_property_t UC_PROPERTY_FORMAT_CONTROL + -- Constant: uc_property_t UC_PROPERTY_DASH + -- Constant: uc_property_t UC_PROPERTY_HYPHEN + -- Constant: uc_property_t UC_PROPERTY_PUNCTUATION + -- Constant: uc_property_t UC_PROPERTY_LINE_SEPARATOR + -- Constant: uc_property_t UC_PROPERTY_PARAGRAPH_SEPARATOR + -- Constant: uc_property_t UC_PROPERTY_QUOTATION_MARK + -- Constant: uc_property_t UC_PROPERTY_SENTENCE_TERMINAL + -- Constant: uc_property_t UC_PROPERTY_TERMINAL_PUNCTUATION + -- Constant: uc_property_t UC_PROPERTY_CURRENCY_SYMBOL + -- Constant: uc_property_t UC_PROPERTY_MATH + -- Constant: uc_property_t UC_PROPERTY_OTHER_MATH + -- Constant: uc_property_t UC_PROPERTY_PAIRED_PUNCTUATION + -- Constant: uc_property_t UC_PROPERTY_LEFT_OF_PAIR + -- Constant: uc_property_t UC_PROPERTY_COMBINING + -- Constant: uc_property_t UC_PROPERTY_COMPOSITE + -- Constant: uc_property_t UC_PROPERTY_DECIMAL_DIGIT + -- Constant: uc_property_t UC_PROPERTY_NUMERIC + -- Constant: uc_property_t UC_PROPERTY_DIACRITIC + -- Constant: uc_property_t UC_PROPERTY_EXTENDER + -- Constant: uc_property_t UC_PROPERTY_IGNORABLE_CONTROL + + The following function looks up a property by its name. + + -- Function: uc_property_t uc_property_byname (const char + *PROPERTY_NAME) + Returns the property given by name, e.g. `"White space"'. If a + property with the given name exists, the result will satisfy the + `uc_property_is_valid' predicate. Otherwise the result will not + satisfy this predicate and must not be passed to functions that + expect an `uc_property_t' argument. + + This function references a big table of all predefined properties. + Its use can significantly increase the size of your application. + + -- Function: bool uc_property_is_valid (uc_property_t property) + Returns `true' when the given property is valid, or `false' + otherwise. + + The following function views a property as a set of Unicode +characters. + + -- Function: bool uc_is_property (ucs4_t UC, uc_property_t PROPERTY) + Tests whether the Unicode character UC has the given property. + + +File: libunistring.info, Node: Properties as functions, Prev: Properties as objects, Up: Properties + +8.8.2 Properties as functions - the functional API +-------------------------------------------------- + + The following are general properties. + + -- Function: bool uc_is_property_white_space (ucs4_t UC) + -- Function: bool uc_is_property_alphabetic (ucs4_t UC) + -- Function: bool uc_is_property_other_alphabetic (ucs4_t UC) + -- Function: bool uc_is_property_not_a_character (ucs4_t UC) + -- Function: bool uc_is_property_default_ignorable_code_point (ucs4_t + UC) + -- Function: bool uc_is_property_other_default_ignorable_code_point + (ucs4_t UC) + -- Function: bool uc_is_property_deprecated (ucs4_t UC) + -- Function: bool uc_is_property_logical_order_exception (ucs4_t UC) + -- Function: bool uc_is_property_variation_selector (ucs4_t UC) + -- Function: bool uc_is_property_private_use (ucs4_t UC) + -- Function: bool uc_is_property_unassigned_code_value (ucs4_t UC) + + The following properties are related to case folding. + + -- Function: bool uc_is_property_uppercase (ucs4_t UC) + -- Function: bool uc_is_property_other_uppercase (ucs4_t UC) + -- Function: bool uc_is_property_lowercase (ucs4_t UC) + -- Function: bool uc_is_property_other_lowercase (ucs4_t UC) + -- Function: bool uc_is_property_titlecase (ucs4_t UC) + -- Function: bool uc_is_property_soft_dotted (ucs4_t UC) + + The following properties are related to identifiers. + + -- Function: bool uc_is_property_id_start (ucs4_t UC) + -- Function: bool uc_is_property_other_id_start (ucs4_t UC) + -- Function: bool uc_is_property_id_continue (ucs4_t UC) + -- Function: bool uc_is_property_other_id_continue (ucs4_t UC) + -- Function: bool uc_is_property_xid_start (ucs4_t UC) + -- Function: bool uc_is_property_xid_continue (ucs4_t UC) + -- Function: bool uc_is_property_pattern_white_space (ucs4_t UC) + -- Function: bool uc_is_property_pattern_syntax (ucs4_t UC) + + The following properties have an influence on shaping and rendering. + + -- Function: bool uc_is_property_join_control (ucs4_t UC) + -- Function: bool uc_is_property_grapheme_base (ucs4_t UC) + -- Function: bool uc_is_property_grapheme_extend (ucs4_t UC) + -- Function: bool uc_is_property_other_grapheme_extend (ucs4_t UC) + -- Function: bool uc_is_property_grapheme_link (ucs4_t UC) + + The following properties relate to bidirectional reordering. + + -- Function: bool uc_is_property_bidi_control (ucs4_t UC) + -- Function: bool uc_is_property_bidi_left_to_right (ucs4_t UC) + -- Function: bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t UC) + -- Function: bool uc_is_property_bidi_arabic_right_to_left (ucs4_t UC) + -- Function: bool uc_is_property_bidi_european_digit (ucs4_t UC) + -- Function: bool uc_is_property_bidi_eur_num_separator (ucs4_t UC) + -- Function: bool uc_is_property_bidi_eur_num_terminator (ucs4_t UC) + -- Function: bool uc_is_property_bidi_arabic_digit (ucs4_t UC) + -- Function: bool uc_is_property_bidi_common_separator (ucs4_t UC) + -- Function: bool uc_is_property_bidi_block_separator (ucs4_t UC) + -- Function: bool uc_is_property_bidi_segment_separator (ucs4_t UC) + -- Function: bool uc_is_property_bidi_whitespace (ucs4_t UC) + -- Function: bool uc_is_property_bidi_non_spacing_mark (ucs4_t UC) + -- Function: bool uc_is_property_bidi_boundary_neutral (ucs4_t UC) + -- Function: bool uc_is_property_bidi_pdf (ucs4_t UC) + -- Function: bool uc_is_property_bidi_embedding_or_override (ucs4_t UC) + -- Function: bool uc_is_property_bidi_other_neutral (ucs4_t UC) + + The following properties deal with number representations. + + -- Function: bool uc_is_property_hex_digit (ucs4_t UC) + -- Function: bool uc_is_property_ascii_hex_digit (ucs4_t UC) + + The following properties deal with CJK. + + -- Function: bool uc_is_property_ideographic (ucs4_t UC) + -- Function: bool uc_is_property_unified_ideograph (ucs4_t UC) + -- Function: bool uc_is_property_radical (ucs4_t UC) + -- Function: bool uc_is_property_ids_binary_operator (ucs4_t UC) + -- Function: bool uc_is_property_ids_trinary_operator (ucs4_t UC) + + Other miscellaneous properties are: + + -- Function: bool uc_is_property_zero_width (ucs4_t UC) + -- Function: bool uc_is_property_space (ucs4_t UC) + -- Function: bool uc_is_property_non_break (ucs4_t UC) + -- Function: bool uc_is_property_iso_control (ucs4_t UC) + -- Function: bool uc_is_property_format_control (ucs4_t UC) + -- Function: bool uc_is_property_dash (ucs4_t UC) + -- Function: bool uc_is_property_hyphen (ucs4_t UC) + -- Function: bool uc_is_property_punctuation (ucs4_t UC) + -- Function: bool uc_is_property_line_separator (ucs4_t UC) + -- Function: bool uc_is_property_paragraph_separator (ucs4_t UC) + -- Function: bool uc_is_property_quotation_mark (ucs4_t UC) + -- Function: bool uc_is_property_sentence_terminal (ucs4_t UC) + -- Function: bool uc_is_property_terminal_punctuation (ucs4_t UC) + -- Function: bool uc_is_property_currency_symbol (ucs4_t UC) + -- Function: bool uc_is_property_math (ucs4_t UC) + -- Function: bool uc_is_property_other_math (ucs4_t UC) + -- Function: bool uc_is_property_paired_punctuation (ucs4_t UC) + -- Function: bool uc_is_property_left_of_pair (ucs4_t UC) + -- Function: bool uc_is_property_combining (ucs4_t UC) + -- Function: bool uc_is_property_composite (ucs4_t UC) + -- Function: bool uc_is_property_decimal_digit (ucs4_t UC) + -- Function: bool uc_is_property_numeric (ucs4_t UC) + -- Function: bool uc_is_property_diacritic (ucs4_t UC) + -- Function: bool uc_is_property_extender (ucs4_t UC) + -- Function: bool uc_is_property_ignorable_control (ucs4_t UC) + + +File: libunistring.info, Node: Scripts, Next: Blocks, Prev: Properties, Up: unictype.h + +8.9 Scripts +=========== + + The Unicode characters are subdivided into scripts. + + The following type is used to represent a script: + + -- Type: uc_script_t + This data type is a structure type that refers to statically + allocated read-only data. It contains the following fields: + const char *name; + + The `name' field contains the name of the script. + + The following functions look up a script. + + -- Function: const uc_script_t * uc_script (ucs4_t UC) + Returns the script of a Unicode character. Returns NULL if UC + does not belong to any script. + + -- Function: const uc_script_t * uc_script_byname (const char + *SCRIPT_NAME) + Returns the script given by its name, e.g. `"HAN"'. Returns NULL + if a script with the given name does not exist. + + The following function views a script as a set of Unicode characters. + + -- Function: bool uc_is_script (ucs4_t UC, const uc_script_t *SCRIPT) + Tests whether a Unicode character belongs to a given script. + + The following gives a global picture of all scripts. + + -- Function: void uc_all_scripts (const uc_script_t **SCRIPTS, size_t + *COUNT) + Get the list of all scripts. Stores a pointer to an array of all + scripts in `*SCRIPTS' and the length of this array in `*COUNT'. + + +File: libunistring.info, Node: Blocks, Next: ISO C and Java syntax, Prev: Scripts, Up: unictype.h + +8.10 Blocks +=========== + + The Unicode characters are subdivided into blocks. A block is an +interval of Unicode code points. + + The following type is used to represent a block. + + -- Type: uc_block_t + This data type is a structure type that refers to statically + allocated data. It contains the following fields: + ucs4_t start; + ucs4_t end; + const char *name; + + The `start' field is the first Unicode code point in the block. + + The `end' field is the last Unicode code point in the block. + + The `name' field is the name of the block. + + The following function looks up a block. + + -- Function: const uc_block_t * uc_block (ucs4_t UC) + Returns the block a character belongs to. + + The following function views a block as a set of Unicode characters. + + -- Function: bool uc_is_block (ucs4_t UC, const uc_block_t *BLOCK) + Tests whether a Unicode character belongs to a given block. + + The following gives a global picture of all block. + + -- Function: void uc_all_blocks (const uc_block_t **BLOCKS, size_t + *COUNT) + Get the list of all blocks. Stores a pointer to an array of all + blocks in `*BLOCKS' and the length of this array in `*COUNT'. + + +File: libunistring.info, Node: ISO C and Java syntax, Next: Classifications like in ISO C, Prev: Blocks, Up: unictype.h + +8.11 ISO C and Java syntax +========================== + + The following properties are taken from language standards. The +supported language standards are ISO C 99 and Java. + + -- Function: bool uc_is_c_whitespace (ucs4_t UC) + Tests whether a Unicode character is considered whitespace in ISO + C 99. + + -- Function: bool uc_is_java_whitespace (ucs4_t UC) + Tests whether a Unicode character is considered whitespace in Java. + + The following enumerated values are the possible return values of +the functions `uc_c_ident_category' and `uc_java_ident_category'. + + -- Constant: int UC_IDENTIFIER_START + This return value means that the given character is valid as first + or subsequent character in an identifier. + + -- Constant: int UC_IDENTIFIER_VALID + This return value means that the given character is valid as + subsequent character only. + + -- Constant: int UC_IDENTIFIER_INVALID + This return value means that the given character is not valid in + an identifier. + + -- Constant: int UC_IDENTIFIER_IGNORABLE + This return value (only for Java) means that the given character + is ignorable. + + The following function determine whether a given character can be a +constituent of an identifier in the given programming language. + + -- Function: int uc_c_ident_category (ucs4_t UC) + Returns the categorization of a Unicode character with respect to + the ISO C 99 identifier syntax. + + -- Function: int uc_java_ident_category (ucs4_t UC) + Returns the categorization of a Unicode character with respect to + the Java identifier syntax. + + +File: libunistring.info, Node: Classifications like in ISO C, Prev: ISO C and Java syntax, Up: unictype.h + +8.12 Classifications like in ISO C +================================== + + The following character classifications mimic those declared in the +ISO C header files `' and `'. These functions are +deprecated, because this set of functions was designed with ASCII in +mind and cannot reflect the more diverse reality of the Unicode +character set. But they can be a quick-and-dirty porting aid when +migrating from `wchar_t' APIs to Unicode strings. + + -- Function: bool uc_is_alnum (ucs4_t UC) + Tests for any character for which `uc_is_alpha' or `uc_is_digit' is + true. + + -- Function: bool uc_is_alpha (ucs4_t UC) + Tests for any character for which `uc_is_upper' or `uc_is_lower' is + true, or any character that is one of a locale-specific set of + characters for which none of `uc_is_cntrl', `uc_is_digit', + `uc_is_punct', or `uc_is_space' is true. + + -- Function: bool uc_is_cntrl (ucs4_t UC) + Tests for any control character. + + -- Function: bool uc_is_digit (ucs4_t UC) + Tests for any character that corresponds to a decimal-digit + character. + + -- Function: bool uc_is_graph (ucs4_t UC) + Tests for any character for which `uc_is_print' is true and + `uc_is_space' is false. + + -- Function: bool uc_is_lower (ucs4_t UC) + Tests for any character that corresponds to a lowercase letter or + is one of a locale-specific set of characters for which none of + `uc_is_cntrl', `uc_is_digit', `uc_is_punct', or `uc_is_space' is + true. + + -- Function: bool uc_is_print (ucs4_t UC) + Tests for any printing character. + + -- Function: bool uc_is_punct (ucs4_t UC) + Tests for any printing character that is one of a locale-specific + set of characters for which neither `uc_is_space' nor + `uc_is_alnum' is true. + + -- Function: bool uc_is_space (ucs4_t UC) + Test for any character that corresponds to a locale-specific set + of characters for which none of `uc_is_alnum', `uc_is_graph', or + `uc_is_punct' is true. + + -- Function: bool uc_is_upper (ucs4_t UC) + Tests for any character that corresponds to an uppercase letter or + is one of a locale-specific set of characters for which none of + `uc_is_cntrl', `uc_is_digit', `uc_is_punct', or `uc_is_space' is + true. + + -- Function: bool uc_is_xdigit (ucs4_t UC) + Tests for any character that corresponds to a hexadecimal-digit + character. + + -- Function: bool uc_is_blank (ucs4_t UC) + Tests for any character that corresponds to a standard blank + character or a locale-specific set of characters for which + `uc_is_alnum' is false. + + +File: libunistring.info, Node: uniwidth.h, Next: uniwbrk.h, Prev: unictype.h, Up: Top + +9 Display width `' +****************************** + + This include file declares functions that return the display width, +measured in columns, of characters or strings, when output to a device +that uses non-proportional fonts. + + Note that for some rarely used characters the actual fonts or +terminal emulators can use a different width. There is no mechanism +for communicating the display width of characters across a Unix +pseudo-terminal (tty). Also, there are scripts with complex rendering, +like the Indic scripts. For these scripts, there is no such concept as +non-proportional fonts. Therefore the results of these functions +usually work fine on most scripts and on most characters but can fail +to represent the actual display width. + + These functions are locale dependent. The ENCODING argument +identifies the encoding (e.g. `"ISO-8859-2"' for Polish). + + -- Function: int uc_width (ucs4_t UC, const char *ENCODING) + Determines and returns the number of column positions required for + UC. Returns -1 if UC is a control character that has an influence + on the column position when output. + + -- Function: int u8_width (const uint8_t *S, size_t N, const char + *ENCODING) + -- Function: int u16_width (const uint16_t *S, size_t N, const char + *ENCODING) + -- Function: int u32_width (const uint32_t *S, size_t N, const char + *ENCODING) + Determines and returns the number of column positions required for + first N units (or fewer if S ends before this) in S. This + function ignores control characters in the string. + + -- Function: int u8_strwidth (const uint8_t *S, const char *ENCODING) + -- Function: int u16_strwidth (const uint16_t *S, const char *ENCODING) + -- Function: int u32_strwidth (const uint32_t *S, const char *ENCODING) + Determines and returns the number of column positions required for + S. This function ignores control characters in the string. + + +File: libunistring.info, Node: uniwbrk.h, Next: unilbrk.h, Prev: uniwidth.h, Up: Top + +10 Word breaks in strings `' +*************************************** + + This include file declares functions for determining where in a +string "words" start and end. Here "words" are not necessarily the +same as entities that can be looked up in dictionaries, but rather +groups of consecutive characters that should not be split by text +processing operations. + +* Menu: + +* Word breaks in a string:: +* Word break property:: + + +File: libunistring.info, Node: Word breaks in a string, Next: Word break property, Up: uniwbrk.h + +10.1 Word breaks in a string +============================ + + The following functions determine the word breaks in a string. + + -- Function: void u8_wordbreaks (const uint8_t *S, size_t N, char *P) + -- Function: void u16_wordbreaks (const uint16_t *S, size_t N, char *P) + -- Function: void u32_wordbreaks (const uint32_t *S, size_t N, char *P) + -- Function: void ulc_wordbreaks (const char *S, size_t N, char *P) + Determines the word break points in S, an array of N units, and + stores the result at `P[0..N-1]'. + `P[i] = 1' + means that there is a word boundary between `S[i-1]' and + `S[i]'. + + `P[i] = 0' + means that `S[i-1]' and `S[i]' must not be separated. + `P[0]' is always set to 0. If an application wants to consider a + word break to be present at the beginning of the string (before + `S[0]') or at the end of the string (after `S[0..N-1]'), it has to + treat these cases explicitly. + + +File: libunistring.info, Node: Word break property, Prev: Word breaks in a string, Up: uniwbrk.h + +10.2 Word break property +======================== + + This is a more low-level API. The word break property is a property +defined in Unicode Standard Annex #29, section "Word Boundaries", see +`http://www.unicode.org/reports/tr29/#Word_Boundaries'. It is used for +determining the word breaks in a string. + + The following are the possible values of the word break property. +More values may be added in the future. + + -- Constant: int WBP_OTHER + -- Constant: int WBP_CR + -- Constant: int WBP_LF + -- Constant: int WBP_NEWLINE + -- Constant: int WBP_EXTEND + -- Constant: int WBP_FORMAT + -- Constant: int WBP_KATAKANA + -- Constant: int WBP_ALETTER + -- Constant: int WBP_MIDNUMLET + -- Constant: int WBP_MIDLETTER + -- Constant: int WBP_MIDNUM + -- Constant: int WBP_NUMERIC + -- Constant: int WBP_EXTENDNUMLET + + The following function looks up the word break property of a +character. + + -- Function: int uc_wordbreak_property (ucs4_t UC) + Returns the Word_Break property of a Unicode character. + + +File: libunistring.info, Node: unilbrk.h, Next: uninorm.h, Prev: uniwbrk.h, Up: Top + +11 Line breaking `' +****************************** + + This include file declares functions for determining where in a +string line breaks could or should be introduced, in order to make the +displayed string fit into a column of given width. + + These functions are locale dependent. The ENCODING argument +identifies the encoding (e.g. `"ISO-8859-2"' for Polish). + + The following enumerated values indicate whether, at a given +position, a line break is possible or not. Given an string S as an +array `S[0..N-1]' and a position I, the values have the following +meanings: + + -- Constant: int UC_BREAK_MANDATORY + This value indicates that `S[I]' is a line break character. + + -- Constant: int UC_BREAK_POSSIBLE + This value indicates that a line break may be inserted between + `S[I-1]' and `S[I]'. + + -- Constant: int UC_BREAK_HYPHENATION + This value indicates that a hyphen and a line break may be + inserted between `S[I-1]' and `S[I]'. But beware of language + dependent hyphenation rules. + + -- Constant: int UC_BREAK_PROHIBITED + This value indicates that `S[I-1]' and `S[I]' must not be + separated. + + -- Constant: int UC_BREAK_UNDEFINED + This value is not used as a return value; rather, in the + overriding argument of the `u*_width_linebreaks' functions, it + indicates the absence of an override. + + The following functions determine the positions at which line breaks +are possible. + + -- Function: void u8_possible_linebreaks (const uint8_t *S, size_t N, + const char *ENCODING, char *P) + -- Function: void u16_possible_linebreaks (const uint16_t *S, size_t + N, const char *ENCODING, char *P) + -- Function: void u32_possible_linebreaks (const uint32_t *S, size_t + N, const char *ENCODING, char *P) + -- Function: void ulc_possible_linebreaks (const char *S, size_t N, + const char *ENCODING, char *P) + Determines the line break points in S, and stores the result at + `P[0..N-1]'. Every `P[I]' is assigned one of the values + `UC_BREAK_MANDATORY', `UC_BREAK_POSSIBLE', `UC_BREAK_HYPHENATION', + `UC_BREAK_PROHIBITED'. + + The following functions determine where line breaks should be +inserted so that each line fits in a given width, when output to a +device that uses non-proportional fonts. + + -- Function: int u8_width_linebreaks (const uint8_t *S, size_t N, int + WIDTH, int START_COLUMN, int AT_END_COLUMNS, const char + *OVERRIDE, const char *ENCODING, char *P) + -- Function: int u16_width_linebreaks (const uint16_t *S, size_t N, + int WIDTH, int START_COLUMN, int AT_END_COLUMNS, const char + *OVERRIDE, const char *ENCODING, char *P) + -- Function: int u32_width_linebreaks (const uint32_t *S, size_t N, + int WIDTH, int START_COLUMN, int AT_END_COLUMNS, const char + *OVERRIDE, const char *ENCODING, char *P) + -- Function: int ulc_width_linebreaks (const char *S, size_t N, int + WIDTH, int START_COLUMN, int AT_END_COLUMNS, const char + *OVERRIDE, const char *ENCODING, char *P) + Chooses the best line breaks, assuming that every character + occupies a width given by the `uc_width' function (see *note + uniwidth.h::). + + The string is `S[0..N-1]'. + + The maximum number of columns per line is given as WIDTH. The + starting column of the string is given as START_COLUMN. If the + algorithm shall keep room after the last piece, this amount of + room can be given as AT_END_COLUMNS. + + OVERRIDE is an optional override; if `OVERRIDE[I] != + UC_BREAK_UNDEFINED', `OVERRIDE[I]' takes precedence over `P[I]' as + returned by the `u*_possible_linebreaks' function. + + The given ENCODING is used for disambiguating widths in `uc_width'. + + Returns the column after the end of the string, and stores the + result at `P[0..N-1]'. Every `P[I]' is assigned one of the values + `UC_BREAK_MANDATORY', `UC_BREAK_POSSIBLE', `UC_BREAK_HYPHENATION', + `UC_BREAK_PROHIBITED'. Here the value `UC_BREAK_POSSIBLE' + indicates that a line break _should_ be inserted. + + +File: libunistring.info, Node: uninorm.h, Next: unicase.h, Prev: unilbrk.h, Up: Top + +12 Normalization forms (composition and decomposition) `' +******************************************************************** + + This include file defines functions for transforming Unicode strings +to one of the four normal forms, known as NFC, NFD, NKFC, NFKD. These +transformations involve decomposition and -- for NFC and NFKC -- +composition of Unicode characters. + +* Menu: + +* Decomposition of characters:: +* Composition of characters:: +* Normalization of strings:: +* Normalizing comparisons:: +* Normalization of streams:: + + +File: libunistring.info, Node: Decomposition of characters, Next: Composition of characters, Up: uninorm.h + +12.1 Decomposition of Unicode characters +======================================== + + The following enumerated values are the possible types of +decomposition of a Unicode character. + + -- Constant: int UC_DECOMP_CANONICAL + Denotes canonical decomposition. + + -- Constant: int UC_DECOMP_FONT + UCD marker: `'. Denotes a font variant (e.g. a blackletter + form). + + -- Constant: int UC_DECOMP_NOBREAK + UCD marker: `'. Denotes a no-break version of a space or + hyphen. + + -- Constant: int UC_DECOMP_INITIAL + UCD marker: `'. Denotes an initial presentation form + (Arabic). + + -- Constant: int UC_DECOMP_MEDIAL + UCD marker: `'. Denotes a medial presentation form + (Arabic). + + -- Constant: int UC_DECOMP_FINAL + UCD marker: `'. Denotes a final presentation form (Arabic). + + -- Constant: int UC_DECOMP_ISOLATED + UCD marker: `'. Denotes an isolated presentation form + (Arabic). + + -- Constant: int UC_DECOMP_CIRCLE + UCD marker: `'. Denotes an encircled form. + + -- Constant: int UC_DECOMP_SUPER + UCD marker: `'. Denotes a superscript form. + + -- Constant: int UC_DECOMP_SUB + UCD marker: `'. Denotes a subscript form. + + -- Constant: int UC_DECOMP_VERTICAL + UCD marker: `'. Denotes a vertical layout presentation + form. + + -- Constant: int UC_DECOMP_WIDE + UCD marker: `'. Denotes a wide (or zenkaku) compatibility + character. + + -- Constant: int UC_DECOMP_NARROW + UCD marker: `'. Denotes a narrow (or hankaku) + compatibility character. + + -- Constant: int UC_DECOMP_SMALL + UCD marker: `'. Denotes a small variant form (CNS + compatibility). + + -- Constant: int UC_DECOMP_SQUARE + UCD marker: `'. Denotes a CJK squared font variant. + + -- Constant: int UC_DECOMP_FRACTION + UCD marker: `'. Denotes a vulgar fraction form. + + -- Constant: int UC_DECOMP_COMPAT + UCD marker: `'. Denotes an otherwise unspecified + compatibility character. + + The following constant denotes the maximum size of decomposition of +a single Unicode character. + + -- Macro: unsigned int UC_DECOMPOSITION_MAX_LENGTH + This macro expands to a constant that is the required size of + buffer passed to the `uc_decomposition' and + `uc_canonical_decomposition' functions. + + The following functions decompose a Unicode character. + + -- Function: int uc_decomposition (ucs4_t UC, int *DECOMP_TAG, ucs4_t + *DECOMPOSITION) + Returns the character decomposition mapping of the Unicode + character UC. DECOMPOSITION must point to an array of at least + `UC_DECOMPOSITION_MAX_LENGTH' `ucs_t' elements. + + When a decomposition exists, `DECOMPOSITION[0..N-1]' and + `*DECOMP_TAG' are filled and N is returned. Otherwise -1 is + returned. + + -- Function: int uc_canonical_decomposition (ucs4_t UC, ucs4_t + *DECOMPOSITION) + Returns the canonical character decomposition mapping of the + Unicode character UC. DECOMPOSITION must point to an array of at + least `UC_DECOMPOSITION_MAX_LENGTH' `ucs_t' elements. + + When a decomposition exists, `DECOMPOSITION[0..N-1]' is filled and + N is returned. Otherwise -1 is returned. + + +File: libunistring.info, Node: Composition of characters, Next: Normalization of strings, Prev: Decomposition of characters, Up: uninorm.h + +12.2 Composition of Unicode characters +====================================== + + The following function composes a Unicode character from two Unicode +characters. + + -- Function: ucs4_t uc_composition (ucs4_t UC1, ucs4_t UC2) + Attempts to combine the Unicode characters UC1, UC2. UC1 is known + to have canonical combining class 0. + + Returns the combination of UC1 and UC2, if it exists. Returns 0 + otherwise. + + Not all decompositions can be recombined using this function. See + the Unicode file `CompositionExclusions.txt' for details. + + +File: libunistring.info, Node: Normalization of strings, Next: Normalizing comparisons, Prev: Composition of characters, Up: uninorm.h + +12.3 Normalization of strings +============================= + + The Unicode standard defines four normalization forms for Unicode +strings. The following type is used to denote a normalization form. + + -- Type: uninorm_t + An object of type `uninorm_t' denotes a Unicode normalization form. + This is a scalar type; its values can be compared with `=='. + + The following constants denote the four normalization forms. + + -- Macro: uninorm_t UNINORM_NFD + Denotes Normalization form D: canonical decomposition. + + -- Macro: uninorm_t UNINORM_NFC + Normalization form C: canonical decomposition, then canonical + composition. + + -- Macro: uninorm_t UNINORM_NFKD + Normalization form KD: compatibility decomposition. + + -- Macro: uninorm_t UNINORM_NFKC + Normalization form KC: compatibility decomposition, then canonical + composition. + + The following functions operate on `uninorm_t' objects. + + -- Function: bool uninorm_is_compat_decomposing (uninorm_t NF) + Tests whether the normalization form NF does compatibility + decomposition. + + -- Function: bool uninorm_is_composing (uninorm_t NF) + Tests whether the normalization form NF includes canonical + composition. + + -- Function: uninorm_t uninorm_decomposing_form (uninorm_t NF) + Returns the decomposing variant of the normalization form NF. + This maps NFC,NFD -> NFD and NFKC,NFKD -> NFKD. + + The following functions apply a Unicode normalization form to a +Unicode string. + + -- Function: uint8_t * u8_normalize (uninorm_t NF, const uint8_t *S, + size_t N, uint8_t *RESULTBUF, size_t *LENGTHP) + -- Function: uint16_t * u16_normalize (uninorm_t NF, const uint16_t + *S, size_t N, uint16_t *RESULTBUF, size_t *LENGTHP) + -- Function: uint32_t * u32_normalize (uninorm_t NF, const uint32_t + *S, size_t N, uint32_t *RESULTBUF, size_t *LENGTHP) + Returns the specified normalization form of a string. + + +File: libunistring.info, Node: Normalizing comparisons, Next: Normalization of streams, Prev: Normalization of strings, Up: uninorm.h + +12.4 Normalizing comparisons +============================ + + The following functions compare Unicode string, ignoring differences +in normalization. + + -- Function: int u8_normcmp (const uint8_t *S1, size_t N1, const + uint8_t *S2, size_t N2, uninorm_t NF, int *RESULTP) + -- Function: int u16_normcmp (const uint16_t *S1, size_t N1, const + uint16_t *S2, size_t N2, uninorm_t NF, int *RESULTP) + -- Function: int u32_normcmp (const uint32_t *S1, size_t N1, const + uint32_t *S2, size_t N2, uninorm_t NF, int *RESULTP) + Compares S1 and S2, ignoring differences in normalization. + + NF must be either `UNINORM_NFD' or `UNINORM_NFKD'. + + If successful, sets `*RESULTP' to -1 if S1 < S2, 0 if S1 = S2, 1 + if S1 > S2, and returns 0. Upon failure, returns -1 with `errno' + set. + + -- Function: char * u8_normxfrm (const uint8_t *S, size_t N, uninorm_t + NF, char *RESULTBUF, size_t *LENGTHP) + -- Function: char * u16_normxfrm (const uint16_t *S, size_t N, + uninorm_t NF, char *RESULTBUF, size_t *LENGTHP) + -- Function: char * u32_normxfrm (const uint32_t *S, size_t N, + uninorm_t NF, char *RESULTBUF, size_t *LENGTHP) + Converts the string S of length N to a NUL-terminated byte + sequence, in such a way that comparing `u8_normxfrm (S1)' and + `u8_normxfrm (S2)' with the `u8_cmp2' function is equivalent to + comparing S1 and S2 with the `u8_normcoll' function. + + NF must be either `UNINORM_NFC' or `UNINORM_NFKC'. + + -- Function: int u8_normcoll (const uint8_t *S1, size_t N1, const + uint8_t *S2, size_t N2, uninorm_t NF, int *RESULTP) + -- Function: int u16_normcoll (const uint16_t *S1, size_t N1, const + uint16_t *S2, size_t N2, uninorm_t NF, int *RESULTP) + -- Function: int u32_normcoll (const uint32_t *S1, size_t N1, const + uint32_t *S2, size_t N2, uninorm_t NF, int *RESULTP) + Compares S1 and S2, ignoring differences in normalization, using + the collation rules of the current locale. + + NF must be either `UNINORM_NFC' or `UNINORM_NFKC'. + + If successful, sets `*RESULTP' to -1 if S1 < S2, 0 if S1 = S2, 1 + if S1 > S2, and returns 0. Upon failure, returns -1 with `errno' + set. + + +File: libunistring.info, Node: Normalization of streams, Prev: Normalizing comparisons, Up: uninorm.h + +12.5 Normalization of streams of Unicode characters +=================================================== + + A "stream of Unicode characters" is essentially a function that +accepts an `ucs4_t' argument repeatedly, optionally combined with a +function that "flushes" the stream. + + -- Type: struct uninorm_filter + This is the data type of a stream of Unicode characters that + normalizes its input according to a given normalization form and + passes the normalized character sequence to the encapsulated + stream of Unicode characters. + + -- Function: struct uninorm_filter * uninorm_filter_create (uninorm_t + NF, int (*STREAM_FUNC) (void *STREAM_DATA, ucs4_t UC), void + *STREAM_DATA) + Creates and returns a normalization filter for Unicode characters. + + The pair (STREAM_FUNC, STREAM_DATA) is the encapsulated stream. + `STREAM_FUNC (STREAM_DATA, UC)' receives the Unicode character UC + and returns 0 if successful, or -1 with `errno' set upon failure. + + Returns the new filter, or NULL with `errno' set upon failure. + + -- Function: int uninorm_filter_write (struct uninorm_filter *FILTER, + ucs4_t UC) + Stuffs a Unicode character into a normalizing filter. Returns 0 + if successful, or -1 with `errno' set upon failure. + + -- Function: int uninorm_filter_flush (struct uninorm_filter *FILTER) + Brings data buffered in the filter to its destination, the + encapsulated stream. + + Returns 0 if successful, or -1 with `errno' set upon failure. + + Note! If after calling this function, additional characters are + written into the filter, the resulting character sequence in the + encapsulated stream will not necessarily be normalized. + + -- Function: int uninorm_filter_free (struct uninorm_filter *FILTER) + Brings data buffered in the filter to its destination, the + encapsulated stream, then closes and frees the filter. + + Returns 0 if successful, or -1 with `errno' set upon failure. + + +File: libunistring.info, Node: unicase.h, Next: uniregex.h, Prev: uninorm.h, Up: Top + +13 Case mappings `' +****************************** + + This include file defines functions for case mapping for Unicode +strings and case insensitive comparison of Unicode strings and C +strings. + + These string functions fix the problems that were mentioned in *note +char * strings::, namely, they handle the Croatian LETTER DZ WITH +CARON, the German LATIN SMALL LETTER SHARP S, the Greek sigma and the +Lithuanian i correctly. + +* Menu: + +* Case mappings of characters:: +* Case mappings of strings:: +* Case mappings of substrings:: +* Case insensitive comparison:: +* Case detection:: + + +File: libunistring.info, Node: Case mappings of characters, Next: Case mappings of strings, Up: unicase.h + +13.1 Case mappings of characters +================================ + + The following functions implement case mappings on Unicode +characters -- for those cases only where the result of the mapping is a +again a single Unicode character. + + These mappings are locale and context independent. + + *WARNING!* These functions are not sufficient for languages such as +German, Greek and Lithuanian. Better use the functions below that +treat an entire string at once and are language aware. + + -- Function: ucs4_t uc_toupper (ucs4_t UC) + Returns the uppercase mapping of the Unicode character UC. + + -- Function: ucs4_t uc_tolower (ucs4_t UC) + Returns the lowercase mapping of the Unicode character UC. + + -- Function: ucs4_t uc_totitle (ucs4_t UC) + Returns the titlecase mapping of the Unicode character UC. + + The titlecase mapping of a character is to be used when the + character should look like upper case and the following characters + are lower cased. + + For most characters, this is the same as the uppercase mapping. + There are only few characters where the title case variant and the + uuper case variant are different. These characters occur in the + Latin writing of the Croatian, Bosnian, and Serbian languages. + + Lower case Title case Upper case + ------------------------------------------------------------------ + LATIN SMALL LETTER LJ LATIN CAPITAL LETTER LATIN CAPITAL LETTER + L WITH SMALL LETTER J LJ + LATIN SMALL LETTER NJ LATIN CAPITAL LETTER LATIN CAPITAL LETTER + N WITH SMALL LETTER J NJ + LATIN SMALL LETTER DZ LATIN CAPITAL LETTER LATIN CAPITAL LETTER + D WITH SMALL LETTER Z DZ + LATIN SMALL LETTER LATIN CAPITAL LETTER LATIN CAPITAL LETTER + DZ WITH CARON D WITH SMALL LETTER DZ WITH CARON + Z WITH CARON + + +File: libunistring.info, Node: Case mappings of strings, Next: Case mappings of substrings, Prev: Case mappings of characters, Up: unicase.h + +13.2 Case mappings of strings +============================= + + Case mapping should always be performed on entire strings, not on +individual characters. The functions in this sections do so. + + These functions allow to apply a normalization after the case +mapping. The reason is that if you want to treat `ä' and `Ä' the +same, you most often also want to treat the composed and decomposed +forms of such a character, U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS +and U+0041 LATIN CAPITAL LETTER A U+0308 COMBINING DIAERESIS the same. +The NF argument designates the normalization. + + These functions are locale dependent. The ISO639_LANGUAGE argument +identifies the language (e.g. `"tr"' for Turkish). NULL means to use +locale independent case mappings. + + -- Function: const char * uc_locale_language () + Returns the ISO 639 language code of the current locale. Returns + `""' if it is unknown, or in the "C" locale. + + -- Function: uint8_t * u8_toupper (const uint8_t *S, size_t N, const + char *ISO639_LANGUAGE, uninorm_t NF, uint8_t *RESULTBUF, + size_t *LENGTHP) + -- Function: uint16_t * u16_toupper (const uint16_t *S, size_t N, + const char *ISO639_LANGUAGE, uninorm_t NF, uint16_t + *RESULTBUF, size_t *LENGTHP) + -- Function: uint32_t * u32_toupper (const uint32_t *S, size_t N, + const char *ISO639_LANGUAGE, uninorm_t NF, uint32_t + *RESULTBUF, size_t *LENGTHP) + Returns the uppercase mapping of a string. + + The NF argument identifies the normalization form to apply after + the case-mapping. It can also be NULL, for no normalization. + + -- Function: uint8_t * u8_tolower (const uint8_t *S, size_t N, const + char *ISO639_LANGUAGE, uninorm_t NF, uint8_t *RESULTBUF, + size_t *LENGTHP) + -- Function: uint16_t * u16_tolower (const uint16_t *S, size_t N, + const char *ISO639_LANGUAGE, uninorm_t NF, uint16_t + *RESULTBUF, size_t *LENGTHP) + -- Function: uint32_t * u32_tolower (const uint32_t *S, size_t N, + const char *ISO639_LANGUAGE, uninorm_t NF, uint32_t + *RESULTBUF, size_t *LENGTHP) + Returns the lowercase mapping of a string. + + The NF argument identifies the normalization form to apply after + the case-mapping. It can also be NULL, for no normalization. + + -- Function: uint8_t * u8_totitle (const uint8_t *S, size_t N, const + char *ISO639_LANGUAGE, uninorm_t NF, uint8_t *RESULTBUF, + size_t *LENGTHP) + -- Function: uint16_t * u16_totitle (const uint16_t *S, size_t N, + const char *ISO639_LANGUAGE, uninorm_t NF, uint16_t + *RESULTBUF, size_t *LENGTHP) + -- Function: uint32_t * u32_totitle (const uint32_t *S, size_t N, + const char *ISO639_LANGUAGE, uninorm_t NF, uint32_t + *RESULTBUF, size_t *LENGTHP) + Returns the titlecase mapping of a string. + + Mapping to title case means that, in each word, the first cased + character is being mapped to title case and the remaining + characters of the word are being mapped to lower case. + + The NF argument identifies the normalization form to apply after + the case-mapping. It can also be NULL, for no normalization. + + +File: libunistring.info, Node: Case mappings of substrings, Next: Case insensitive comparison, Prev: Case mappings of strings, Up: unicase.h + +13.3 Case mappings of substrings +================================ + + Case mapping of a substring cannot simply be performed by extracting +the substring and then applying the case mapping function to it. This +does not work because case mapping requires some information about the +surrounding characters. The following functions allow to apply case +mappings to substrings of a given string, while taking into account the +characters that precede it (the "prefix") and the characters that +follow it (the "suffix"). + + -- Type: casing_prefix_context_t + This data type denotes the case-mapping context that is given by a + prefix string. It is an immediate type that can be copied by + simple assignment, without involving memory allocation. It is not + an array type. + + -- Constant: casing_prefix_context_t unicase_empty_prefix_context + This constant is the case-mapping context that corresponds to an + empty prefix string. + + The following functions return `casing_prefix_context_t' objects: + + -- Function: casing_prefix_context_t u8_casing_prefix_context (const + uint8_t *S, size_t N) + -- Function: casing_prefix_context_t u16_casing_prefix_context (const + uint16_t *S, size_t N) + -- Function: casing_prefix_context_t u32_casing_prefix_context (const + uint32_t *S, size_t N) + Returns the case-mapping context of a given prefix string. + + -- Function: casing_prefix_context_t u8_casing_prefixes_context (const + uint8_t *S, size_t N, casing_prefix_context_t A_CONTEXT) + -- Function: casing_prefix_context_t u16_casing_prefixes_context + (const uint16_t *S, size_t N, casing_prefix_context_t + A_CONTEXT) + -- Function: casing_prefix_context_t u32_casing_prefixes_context + (const uint32_t *S, size_t N, casing_prefix_context_t + A_CONTEXT) + Returns the case-mapping context of the prefix concat(A, S), given + the case-mapping context of the prefix A. + + -- Type: casing_suffix_context_t + This data type denotes the case-mapping context that is given by a + suffix string. It is an immediate type that can be copied by + simple assignment, without involving memory allocation. It is not + an array type. + + -- Constant: casing_suffix_context_t unicase_empty_suffix_context + This constant is the case-mapping context that corresponds to an + empty suffix string. + + The following functions return `casing_suffix_context_t' objects: + + -- Function: casing_suffix_context_t u8_casing_suffix_context (const + uint8_t *S, size_t N) + -- Function: casing_suffix_context_t u16_casing_suffix_context (const + uint16_t *S, size_t N) + -- Function: casing_suffix_context_t u32_casing_suffix_context (const + uint32_t *S, size_t N) + Returns the case-mapping context of a given suffix string. + + -- Function: casing_suffix_context_t u8_casing_suffixes_context (const + uint8_t *S, size_t N, casing_suffix_context_t A_CONTEXT) + -- Function: casing_suffix_context_t u16_casing_suffixes_context + (const uint16_t *S, size_t N, casing_suffix_context_t + A_CONTEXT) + -- Function: casing_suffix_context_t u32_casing_suffixes_context + (const uint32_t *S, size_t N, casing_suffix_context_t + A_CONTEXT) + Returns the case-mapping context of the suffix concat(S, A), given + the case-mapping context of the suffix A. + + The following functions perform a case mapping, considering the +prefix context and the suffix context. + + -- Function: uint8_t * u8_ct_toupper (const uint8_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint8_t *RESULTBUF, size_t + *LENGTHP) + -- Function: uint16_t * u16_ct_toupper (const uint16_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint16_t *RESULTBUF, size_t + *LENGTHP) + -- Function: uint32_t * u32_ct_toupper (const uint32_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint32_t *RESULTBUF, size_t + *LENGTHP) + Returns the uppercase mapping of a string that is surrounded by a + prefix and a suffix. + + -- Function: uint8_t * u8_ct_tolower (const uint8_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint8_t *RESULTBUF, size_t + *LENGTHP) + -- Function: uint16_t * u16_ct_tolower (const uint16_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint16_t *RESULTBUF, size_t + *LENGTHP) + -- Function: uint32_t * u32_ct_tolower (const uint32_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint32_t *RESULTBUF, size_t + *LENGTHP) + Returns the lowercase mapping of a string that is surrounded by a + prefix and a suffix. + + -- Function: uint8_t * u8_ct_totitle (const uint8_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint8_t *RESULTBUF, size_t + *LENGTHP) + -- Function: uint16_t * u16_ct_totitle (const uint16_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint16_t *RESULTBUF, size_t + *LENGTHP) + -- Function: uint32_t * u32_ct_totitle (const uint32_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint32_t *RESULTBUF, size_t + *LENGTHP) + Returns the titlecase mapping of a string that is surrounded by a + prefix and a suffix. + + For example, to uppercase the UTF-8 substring between `s + +start_index' and `s + end_index' of a string that extends from `s' to +`s + u8_strlen (s)', you can use the statements + + size_t result_length; + uint8_t result = + u8_ct_toupper (s + start_index, end_index - start_index, + u8_casing_prefix_context (s, start_index), + u8_casing_suffix_context (s + end_index, + u8_strlen (s) - end_index), + iso639_language, NULL, NULL, &result_length); + + +File: libunistring.info, Node: Case insensitive comparison, Next: Case detection, Prev: Case mappings of substrings, Up: unicase.h + +13.4 Case insensitive comparison +================================ + + The following functions implement comparison that ignores +differences in case and normalization. + + -- Function: uint8_t * u8_casefold (const uint8_t *S, size_t N, const + char *ISO639_LANGUAGE, uninorm_t NF, uint8_t *RESULTBUF, + size_t *LENGTHP) + -- Function: uint16_t * u16_casefold (const uint16_t *S, size_t N, + const char *ISO639_LANGUAGE, uninorm_t NF, uint16_t + *RESULTBUF, size_t *LENGTHP) + -- Function: uint32_t * u32_casefold (const uint32_t *S, size_t N, + const char *ISO639_LANGUAGE, uninorm_t NF, uint32_t + *RESULTBUF, size_t *LENGTHP) + Returns the case folded string. + + Comparing `u8_casefold (S1)' and `u8_casefold (S2)' with the + `u8_cmp2' function is equivalent to comparing S1 and S2 with + `u8_casecmp'. + + The NF argument identifies the normalization form to apply after + the case-mapping. It can also be NULL, for no normalization. + + -- Function: uint8_t * u8_ct_casefold (const uint8_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint8_t *RESULTBUF, size_t + *LENGTHP) + -- Function: uint16_t * u16_ct_casefold (const uint16_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint16_t *RESULTBUF, size_t + *LENGTHP) + -- Function: uint32_t * u32_ct_casefold (const uint32_t *S, size_t N, + casing_prefix_context_t PREFIX_CONTEXT, + casing_suffix_context_t SUFFIX_CONTEXT, const char + *ISO639_LANGUAGE, uninorm_t NF, uint32_t *RESULTBUF, size_t + *LENGTHP) + Returns the case folded string. The case folding takes into + account the case mapping contexts of the prefix and suffix strings. + + -- Function: int u8_casecmp (const uint8_t *S1, size_t N1, const + uint8_t *S2, size_t N2, const char *ISO639_LANGUAGE, + uninorm_t NF, int *RESULTP) + -- Function: int u16_casecmp (const uint16_t *S1, size_t N1, const + uint16_t *S2, size_t N2, const char *ISO639_LANGUAGE, + uninorm_t NF, int *RESULTP) + -- Function: int u32_casecmp (const uint32_t *S1, size_t N1, const + uint32_t *S2, size_t N2, const char *ISO639_LANGUAGE, + uninorm_t NF, int *RESULTP) + -- Function: int ulc_casecmp (const char *S1, size_t N1, const char + *S2, size_t N2, const char *ISO639_LANGUAGE, uninorm_t NF, + int *RESULTP) + Compares S1 and S2, ignoring differences in case and normalization. + + The NF argument identifies the normalization form to apply after + the case-mapping. It can also be NULL, for no normalization. + + If successful, sets `*RESULTP' to -1 if S1 < S2, 0 if S1 = S2, 1 + if S1 > S2, and returns 0. Upon failure, returns -1 with `errno' + set. + + The following functions additionally take into account the sorting +rules of the current locale. + + -- Function: char * u8_casexfrm (const uint8_t *S, size_t N, const + char *ISO639_LANGUAGE, uninorm_t NF, char *RESULTBUF, size_t + *LENGTHP) + -- Function: char * u16_casexfrm (const uint16_t *S, size_t N, const + char *ISO639_LANGUAGE, uninorm_t NF, char *RESULTBUF, size_t + *LENGTHP) + -- Function: char * u32_casexfrm (const uint32_t *S, size_t N, const + char *ISO639_LANGUAGE, uninorm_t NF, char *RESULTBUF, size_t + *LENGTHP) + -- Function: char * ulc_casexfrm (const char *S, size_t N, const char + *ISO639_LANGUAGE, uninorm_t NF, char *RESULTBUF, size_t + *LENGTHP) + Converts the string S of length N to a NUL-terminated byte + sequence, in such a way that comparing `u8_casexfrm (S1)' and + `u8_casexfrm (S2)' with the gnulib function `memcmp2' is + equivalent to comparing S1 and S2 with `u8_casecoll'. + + NF must be either `UNINORM_NFC', `UNINORM_NFKC', or NULL for no + normalization. + + -- Function: int u8_casecoll (const uint8_t *S1, size_t N1, const + uint8_t *S2, size_t N2, const char *ISO639_LANGUAGE, + uninorm_t NF, int *RESULTP) + -- Function: int u16_casecoll (const uint16_t *S1, size_t N1, const + uint16_t *S2, size_t N2, const char *ISO639_LANGUAGE, + uninorm_t NF, int *RESULTP) + -- Function: int u32_casecoll (const uint32_t *S1, size_t N1, const + uint32_t *S2, size_t N2, const char *ISO639_LANGUAGE, + uninorm_t NF, int *RESULTP) + -- Function: int ulc_casecoll (const char *S1, size_t N1, const char + *S2, size_t N2, const char *ISO639_LANGUAGE, uninorm_t NF, + int *RESULTP) + Compares S1 and S2, ignoring differences in case and normalization, + using the collation rules of the current locale. + + The NF argument identifies the normalization form to apply after + the case-mapping. It must be either `UNINORM_NFC' or + `UNINORM_NFKC'. It can also be NULL, for no normalization. + + If successful, sets `*RESULTP' to -1 if S1 < S2, 0 if S1 = S2, 1 + if S1 > S2, and returns 0. Upon failure, returns -1 with `errno' + set. + + +File: libunistring.info, Node: Case detection, Prev: Case insensitive comparison, Up: unicase.h + +13.5 Case detection +=================== + + The following functions determine whether a Unicode string is +entirely in upper case. or entirely in lower case, or entirely in title +case, or already case-folded. + + -- Function: int u8_is_uppercase (const uint8_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + -- Function: int u16_is_uppercase (const uint16_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + -- Function: int u32_is_uppercase (const uint32_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + Sets `*RESULTP' to true if mapping NFD(S) to upper case is a + no-op, or to false otherwise, and returns 0. Upon failure, + returns -1 with `errno' set. + + -- Function: int u8_is_lowercase (const uint8_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + -- Function: int u16_is_lowercase (const uint16_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + -- Function: int u32_is_lowercase (const uint32_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + Sets `*RESULTP' to true if mapping NFD(S) to lower case is a + no-op, or to false otherwise, and returns 0. Upon failure, + returns -1 with `errno' set. + + -- Function: int u8_is_titlecase (const uint8_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + -- Function: int u16_is_titlecase (const uint16_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + -- Function: int u32_is_titlecase (const uint32_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + Sets `*RESULTP' to true if mapping NFD(S) to title case is a + no-op, or to false otherwise, and returns 0. Upon failure, + returns -1 with `errno' set. + + -- Function: int u8_is_casefolded (const uint8_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + -- Function: int u16_is_casefolded (const uint16_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + -- Function: int u32_is_casefolded (const uint32_t *S, size_t N, const + char *ISO639_LANGUAGE, bool *RESULTP) + Sets `*RESULTP' to true if applying case folding to NFD(S) is a + no-op, or to false otherwise, and returns 0. Upon failure, + returns -1 with `errno' set. + + The following functions determine whether case mappings have any +effect on a Unicode string. + + -- Function: int u8_is_cased (const uint8_t *S, size_t N, const char + *ISO639_LANGUAGE, bool *RESULTP) + -- Function: int u16_is_cased (const uint16_t *S, size_t N, const char + *ISO639_LANGUAGE, bool *RESULTP) + -- Function: int u32_is_cased (const uint32_t *S, size_t N, const char + *ISO639_LANGUAGE, bool *RESULTP) + Sets `*RESULTP' to true if case matters for S, that is, if mapping + NFD(S) to either upper case or lower case or title case is not a + no-op. Set `*RESULTP' to false if NFD(S) maps to itself under the + upper case mapping, under the lower case mapping, and under the + title case mapping; in other words, when NFD(S) consists entirely + of caseless characters. Upon failure, returns -1 with `errno' set. + + +File: libunistring.info, Node: uniregex.h, Next: Using the library, Prev: unicase.h, Up: Top + +14 Regular expressions `' +************************************* + + This include file is not yet implemented. + + +File: libunistring.info, Node: Using the library, Next: More functionality, Prev: uniregex.h, Up: Top + +15 Using the library +******************** + + This chapter explains some practical considerations, regarding the +installation and compiler options that are needed in order to use this +library. + +* Menu: + +* Installation:: +* Compiler options:: +* Include files:: +* Autoconf macro:: +* Reporting problems:: + + +File: libunistring.info, Node: Installation, Next: Compiler options, Up: Using the library + +15.1 Installation +================= + + Before you can use the library, it must be installed. First, you +have to make sure all dependencies are installed. They are listed in +the file `DEPENDENCIES'. + + Then you can proceed to build and install the library, as described +in the file `INSTALL'. For installation on Windows systems, please +refer to the file `README.woe32'. + + +File: libunistring.info, Node: Compiler options, Next: Include files, Prev: Installation, Up: Using the library + +15.2 Compiler options +===================== + + Let's denote as `LIBUNISTRING_PREFIX' the value of the `--prefix' +option that you passed to `configure' while installing this package. +If you didn't pass any `--prefix' option, then the package is installed +in `/usr/local'. + + Let's denote as `LIBUNISTRING_INCLUDEDIR' the directory where the +include files were installed. This is usually the same as +`${LIBUNISTRING_PREFIX}/include'. Except that if you passed an +`--includedir' option to `configure', it is the value of that option. + + Let's further denote as `LIBUNISTRING_LIBDIR' the directory where +the library itself was installed. This is the value that you passed +with the `--libdir' option to `configure', or otherwise the same as +`${LIBUNISTRING_PREFIX}/lib'. Recall that when building in 64-bit mode +on a 64-bit GNU/Linux system that supports executables in either 64-bit +mode or 32-bit mode, you should have used the option +`--libdir=${LIBUNISTRING_PREFIX}/lib64'. + + So that the compiler finds the include files, you have to pass it the +option `-I${LIBUNISTRING_INCLUDEDIR}'. + + So that the compiler finds the library during its linking pass, you +have to pass it the options `-L${LIBUNISTRING_LIBDIR} -lunistring'. On +some systems, in some configurations, you also have to pass options +needed for linking with `libiconv'. The autoconf macro +`gl_LIBUNISTRING' (see *note Autoconf macro::) deals with this +particularity. + + +File: libunistring.info, Node: Include files, Next: Autoconf macro, Prev: Compiler options, Up: Using the library + +15.3 Include files +================== + + Most of the include files have been presented in the introduction, +see *note Introduction::, and subsequent detailed chapters. + + Another include file is `'. It contains the +version number of the libunistring library. + + -- Macro: int _LIBUNISTRING_VERSION + This constant contains the version of libunistring that is being + used at compile time. It encodes the major and minor parts of the + version number only. These parts are encoded in the form + `(major<<8) + minor'. + + -- Constant: int _libunistring_version + This constant contains the version of libunistring that is being + used at run time. It encodes the major and minor parts of the + version number only. These parts are encoded in the form + `(major<<8) + minor'. + + It is possible that `_libunistring_version' is greater than +`_LIBUNISTRING_VERSION'. This can happen when you use `libunistring' +as a shared library, and a newer, binary backward-compatible version +has been installed after your program that uses `libunistring' was +installed. + + +File: libunistring.info, Node: Autoconf macro, Next: Reporting problems, Prev: Include files, Up: Using the library + +15.4 Autoconf macro +=================== + + GNU Gnulib provides an autoconf macro that tests for the availability +of `libunistring'. It is contained in the Gnulib module +`libunistring', see +`http://www.gnu.org/software/gnulib/MODULES.html#module=libunistring'. + + The macro is called `gl_LIBUNISTRING'. It searches for an installed +libunistring. If found, it sets and AC_SUBSTs `HAVE_LIBUNISTRING=yes' +and the `LIBUNISTRING' and `LTLIBUNISTRING' variables and augments the +`CPPFLAGS' variable, and defines the C macro `HAVE_LIBUNISTRING' to 1. +Otherwise, it sets and AC_SUBSTs `HAVE_LIBUNISTRING=no' and +`LIBUNISTRING' and `LTLIBUNISTRING' to empty. + + The complexities that `gl_LIBUNISTRING' deals with are the following: + + * On some operating systems, in some configurations, libunistring + depends on `libiconv', and the options for linking with libiconv + must be mentioned explicitly on the link command line. + + * GNU `libunistring', if installed, is not necessarily already in the + search path (`CPPFLAGS' for the include file search path, + `LDFLAGS' for the library search path). + + * GNU `libunistring', if installed, is not necessarily already in the + run time library search path. To avoid the need for setting an + environment variable like `LD_LIBRARY_PATH', the macro adds the + appropriate run time search path options to the `LIBUNISTRING' + variable. This works on most systems. + + +File: libunistring.info, Node: Reporting problems, Prev: Autoconf macro, Up: Using the library + +15.5 Reporting problems +======================= + + If you encounter any problem, please don't hesitate to send a +detailed bug report to the `bug-libunistring@gnu.org' mailing list. +You can alternatively also use the bug tracker at the project page +`https://savannah.gnu.org/projects/libunistring'. + + Please always include the version number of this library, and a short +description of your operating system and compilation environment with +corresponding version numbers. + + For problems that appear while building and installing +`libunistring', for which you don't find the remedy in the `INSTALL' +file, please include a description of the options that you passed to +the `configure' script. + + +File: libunistring.info, Node: More functionality, Next: Licenses, Prev: Using the library, Up: Top + +16 More advanced functionality +****************************** + + For bidirectional reordering of strings, we recommend the GNU +FriBidi library: `http://www.fribidi.org/'. + + For the rendering of Unicode strings outside of the context of a +given toolkit (KDE/Qt or GNOME/Gtk), we recommend the Pango library: +`http://www.pango.org/'. + + +File: libunistring.info, Node: Licenses, Next: Index, Prev: More functionality, Up: Top + +Appendix A Licenses +******************* + + The files of this package are covered by the licenses indicated in +each particular file or directory. Here is a summary: + + * The `libunistring' library is covered by the GNU Lesser General + Public License (LGPL). A copy of the license is included in *note + GNU LGPL::. + + * This manual is free documentation. It is dually licensed under the + GNU FDL and the GNU GPL. This means that you can redistribute this + manual under either of these two licenses, at your choice. + This manual is covered by the GNU FDL. Permission is granted to + copy, distribute and/or modify this document under the terms of the + GNU Free Documentation License (FDL), either version 1.2 of the + License, or (at your option) any later version published by the + Free Software Foundation (FSF); with no Invariant Sections, with no + Front-Cover Text, and with no Back-Cover Texts. A copy of the + license is included in *note GNU FDL::. + This manual is covered by the GNU GPL. You can redistribute it + and/or modify it under the terms of the GNU General Public License + (GPL), either version 3 of the License, or (at your option) any + later version published by the Free Software Foundation (FSF). A + copy of the license is included in *note GNU GPL::. + +* Menu: + +* GNU GPL:: GNU General Public License +* GNU LGPL:: GNU Lesser General Public License +* GNU FDL:: GNU Free Documentation License + + +File: libunistring.info, Node: GNU GPL, Next: GNU LGPL, Up: Licenses + +A.1 GNU GENERAL PUBLIC LICENSE +============================== + + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' + + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + +Preamble +======== + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains +free software for all its users. We, the Free Software Foundation, use +the GNU General Public License for most of our software; it applies +also to any other work released this way by its authors. You can apply +it to your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you +have certain responsibilities if you distribute copies of the software, +or if you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the +manufacturer can do so. This is fundamentally incompatible with the +aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for +individuals to use, which is precisely where it is most unacceptable. +Therefore, we have designed this version of the GPL to prohibit the +practice for those products. If such problems arise substantially in +other domains, we stand ready to extend this provision to those domains +in future versions of the GPL, as needed to protect the freedom of +users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + +TERMS AND CONDITIONS +==================== + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public + License. + + "Copyright" also means copyright-like laws that apply to other + kinds of works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this + License. Each licensee is addressed as "you". "Licensees" and + "recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the + work in a fashion requiring copyright permission, other than the + making of an exact copy. The resulting work is called a "modified + version" of the earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work + based on the Program. + + To "propagate" a work means to do anything with it that, without + permission, would make you directly or secondarily liable for + infringement under applicable copyright law, except executing it + on a computer or modifying a private copy. Propagation includes + copying, distribution (with or without modification), making + available to the public, and in some countries other activities as + well. + + To "convey" a work means any kind of propagation that enables other + parties to make or receive copies. Mere interaction with a user + through a computer network, with no transfer of a copy, is not + conveying. + + An interactive user interface displays "Appropriate Legal Notices" + to the extent that it includes a convenient and prominently visible + feature that (1) displays an appropriate copyright notice, and (2) + tells the user that there is no warranty for the work (except to + the extent that warranties are provided), that licensees may + convey the work under this License, and how to view a copy of this + License. If the interface presents a list of user commands or + options, such as a menu, a prominent item in the list meets this + criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work + for making modifications to it. "Object code" means any + non-source form of a work. + + A "Standard Interface" means an interface that either is an + official standard defined by a recognized standards body, or, in + the case of interfaces specified for a particular programming + language, one that is widely used among developers working in that + language. + + The "System Libraries" of an executable work include anything, + other than the work as a whole, that (a) is included in the normal + form of packaging a Major Component, but which is not part of that + Major Component, and (b) serves only to enable use of the work + with that Major Component, or to implement a Standard Interface + for which an implementation is available to the public in source + code form. A "Major Component", in this context, means a major + essential component (kernel, window system, and so on) of the + specific operating system (if any) on which the executable work + runs, or a compiler used to produce the work, or an object code + interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all + the source code needed to generate, install, and (for an executable + work) run the object code and to modify the work, including + scripts to control those activities. However, it does not include + the work's System Libraries, or general-purpose tools or generally + available free programs which are used unmodified in performing + those activities but which are not part of the work. For example, + Corresponding Source includes interface definition files + associated with source files for the work, and the source code for + shared libraries and dynamically linked subprograms that the work + is specifically designed to require, such as by intimate data + communication or control flow between those subprograms and other + parts of the work. + + The Corresponding Source need not include anything that users can + regenerate automatically from other parts of the Corresponding + Source. + + The Corresponding Source for a work in source code form is that + same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of + copyright on the Program, and are irrevocable provided the stated + conditions are met. This License explicitly affirms your unlimited + permission to run the unmodified Program. The output from running + a covered work is covered by this License only if the output, + given its content, constitutes a covered work. This License + acknowledges your rights of fair use or other equivalent, as + provided by copyright law. + + You may make, run and propagate covered works that you do not + convey, without conditions so long as your license otherwise + remains in force. You may convey covered works to others for the + sole purpose of having them make modifications exclusively for + you, or provide you with facilities for running those works, + provided that you comply with the terms of this License in + conveying all material for which you do not control copyright. + Those thus making or running the covered works for you must do so + exclusively on your behalf, under your direction and control, on + terms that prohibit them from making any copies of your + copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under + the conditions stated below. Sublicensing is not allowed; section + 10 makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological + measure under any applicable law fulfilling obligations under + article 11 of the WIPO copyright treaty adopted on 20 December + 1996, or similar laws prohibiting or restricting circumvention of + such measures. + + When you convey a covered work, you waive any legal power to forbid + circumvention of technological measures to the extent such + circumvention is effected by exercising rights under this License + with respect to the covered work, and you disclaim any intention + to limit operation or modification of the work as a means of + enforcing, against the work's users, your or third parties' legal + rights to forbid circumvention of technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you + receive it, in any medium, provided that you conspicuously and + appropriately publish on each copy an appropriate copyright notice; + keep intact all notices stating that this License and any + non-permissive terms added in accord with section 7 apply to the + code; keep intact all notices of the absence of any warranty; and + give all recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, + and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to + produce it from the Program, in the form of source code under the + terms of section 4, provided that you also meet all of these + conditions: + + a. The work must carry prominent notices stating that you + modified it, and giving a relevant date. + + b. The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in + section 4 to "keep intact all notices". + + c. You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable + section 7 additional terms, to the whole of the work, and all + its parts, regardless of how they are packaged. This License + gives no permission to license the work in any other way, but + it does not invalidate such permission if you have separately + received it. + + d. If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has + interactive interfaces that do not display Appropriate Legal + Notices, your work need not make them do so. + + A compilation of a covered work with other separate and independent + works, which are not by their nature extensions of the covered + work, and which are not combined with it such as to form a larger + program, in or on a volume of a storage or distribution medium, is + called an "aggregate" if the compilation and its resulting + copyright are not used to limit the access or legal rights of the + compilation's users beyond what the individual works permit. + Inclusion of a covered work in an aggregate does not cause this + License to apply to the other parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms + of sections 4 and 5, provided that you also convey the + machine-readable Corresponding Source under the terms of this + License, in one of these ways: + + a. Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b. Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for + as long as you offer spare parts or customer support for that + product model, to give anyone who possesses the object code + either (1) a copy of the Corresponding Source for all the + software in the product that is covered by this License, on a + durable physical medium customarily used for software + interchange, for a price no more than your reasonable cost of + physically performing this conveying of source, or (2) access + to copy the Corresponding Source from a network server at no + charge. + + c. Convey individual copies of the object code with a copy of + the written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, + and only if you received the object code with such an offer, + in accord with subsection 6b. + + d. Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access + to the Corresponding Source in the same way through the same + place at no further charge. You need not require recipients + to copy the Corresponding Source along with the object code. + If the place to copy the object code is a network server, the + Corresponding Source may be on a different server (operated + by you or a third party) that supports equivalent copying + facilities, provided you maintain clear directions next to + the object code saying where to find the Corresponding Source. + Regardless of what server hosts the Corresponding Source, you + remain obligated to ensure that it is available for as long + as needed to satisfy these requirements. + + e. Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the + general public at no charge under subsection 6d. + + + A separable portion of the object code, whose source code is + excluded from the Corresponding Source as a System Library, need + not be included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means + any tangible personal property which is normally used for personal, + family, or household purposes, or (2) anything designed or sold for + incorporation into a dwelling. In determining whether a product + is a consumer product, doubtful cases shall be resolved in favor of + coverage. For a particular product received by a particular user, + "normally used" refers to a typical or common use of that class of + product, regardless of the status of the particular user or of the + way in which the particular user actually uses, or expects or is + expected to use, the product. A product is a consumer product + regardless of whether the product has substantial commercial, + industrial or non-consumer uses, unless such uses represent the + only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, + procedures, authorization keys, or other information required to + install and execute modified versions of a covered work in that + User Product from a modified version of its Corresponding Source. + The information must suffice to ensure that the continued + functioning of the modified object code is in no case prevented or + interfered with solely because modification has been made. + + If you convey an object code work under this section in, or with, + or specifically for use in, a User Product, and the conveying + occurs as part of a transaction in which the right of possession + and use of the User Product is transferred to the recipient in + perpetuity or for a fixed term (regardless of how the transaction + is characterized), the Corresponding Source conveyed under this + section must be accompanied by the Installation Information. But + this requirement does not apply if neither you nor any third party + retains the ability to install modified object code on the User + Product (for example, the work has been installed in ROM). + + The requirement to provide Installation Information does not + include a requirement to continue to provide support service, + warranty, or updates for a work that has been modified or + installed by the recipient, or for the User Product in which it + has been modified or installed. Access to a network may be denied + when the modification itself materially and adversely affects the + operation of the network or violates the rules and protocols for + communication across the network. + + Corresponding Source conveyed, and Installation Information + provided, in accord with this section must be in a format that is + publicly documented (and with an implementation available to the + public in source code form), and must require no special password + or key for unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of + this License by making exceptions from one or more of its + conditions. Additional permissions that are applicable to the + entire Program shall be treated as though they were included in + this License, to the extent that they are valid under applicable + law. If additional permissions apply only to part of the Program, + that part may be used separately under those permissions, but the + entire Program remains governed by this License without regard to + the additional permissions. + + When you convey a copy of a covered work, you may at your option + remove any additional permissions from that copy, or from any part + of it. (Additional permissions may be written to require their own + removal in certain cases when you modify the work.) You may place + additional permissions on material, added by you to a covered work, + for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material + you add to a covered work, you may (if authorized by the copyright + holders of that material) supplement the terms of this License + with terms: + + a. Disclaiming warranty or limiting liability differently from + the terms of sections 15 and 16 of this License; or + + b. Requiring preservation of specified reasonable legal notices + or author attributions in that material or in the Appropriate + Legal Notices displayed by works containing it; or + + c. Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be + marked in reasonable ways as different from the original + version; or + + d. Limiting the use for publicity purposes of names of licensors + or authors of the material; or + + e. Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f. Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified + versions of it) with contractual assumptions of liability to + the recipient, for any liability that these contractual + assumptions directly impose on those licensors and authors. + + All other non-permissive additional terms are considered "further + restrictions" within the meaning of section 10. If the Program as + you received it, or any part of it, contains a notice stating that + it is governed by this License along with a term that is a further + restriction, you may remove that term. If a license document + contains a further restriction but permits relicensing or + conveying under this License, you may add to a covered work + material governed by the terms of that license document, provided + that the further restriction does not survive such relicensing or + conveying. + + If you add terms to a covered work in accord with this section, you + must place, in the relevant source files, a statement of the + additional terms that apply to those files, or a notice indicating + where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in + the form of a separately written license, or stated as exceptions; + the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly + provided under this License. Any attempt otherwise to propagate or + modify it is void, and will automatically terminate your rights + under this License (including any patent licenses granted under + the third paragraph of section 11). + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, you do not qualify to receive new + licenses for the same material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or + run a copy of the Program. Ancillary propagation of a covered work + occurring solely as a consequence of using peer-to-peer + transmission to receive a copy likewise does not require + acceptance. However, nothing other than this License grants you + permission to propagate or modify any covered work. These actions + infringe copyright if you do not accept this License. Therefore, + by modifying or propagating a covered work, you indicate your + acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically + receives a license from the original licensors, to run, modify and + propagate that work, subject to this License. You are not + responsible for enforcing compliance by third parties with this + License. + + An "entity transaction" is a transaction transferring control of an + organization, or substantially all assets of one, or subdividing an + organization, or merging organizations. If propagation of a + covered work results from an entity transaction, each party to that + transaction who receives a copy of the work also receives whatever + licenses to the work the party's predecessor in interest had or + could give under the previous paragraph, plus a right to + possession of the Corresponding Source of the work from the + predecessor in interest, if the predecessor has it or can get it + with reasonable efforts. + + You may not impose any further restrictions on the exercise of the + rights granted or affirmed under this License. For example, you + may not impose a license fee, royalty, or other charge for + exercise of rights granted under this License, and you may not + initiate litigation (including a cross-claim or counterclaim in a + lawsuit) alleging that any patent claim is infringed by making, + using, selling, offering for sale, or importing the Program or any + portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this + License of the Program or a work on which the Program is based. + The work thus licensed is called the contributor's "contributor + version". + + A contributor's "essential patent claims" are all patent claims + owned or controlled by the contributor, whether already acquired or + hereafter acquired, that would be infringed by some manner, + permitted by this License, of making, using, or selling its + contributor version, but do not include claims that would be + infringed only as a consequence of further modification of the + contributor version. For purposes of this definition, "control" + includes the right to grant patent sublicenses in a manner + consistent with the requirements of this License. + + Each contributor grants you a non-exclusive, worldwide, + royalty-free patent license under the contributor's essential + patent claims, to make, use, sell, offer for sale, import and + otherwise run, modify and propagate the contents of its + contributor version. + + In the following three paragraphs, a "patent license" is any + express agreement or commitment, however denominated, not to + enforce a patent (such as an express permission to practice a + patent or covenant not to sue for patent infringement). To + "grant" such a patent license to a party means to make such an + agreement or commitment not to enforce a patent against the party. + + If you convey a covered work, knowingly relying on a patent + license, and the Corresponding Source of the work is not available + for anyone to copy, free of charge and under the terms of this + License, through a publicly available network server or other + readily accessible means, then you must either (1) cause the + Corresponding Source to be so available, or (2) arrange to deprive + yourself of the benefit of the patent license for this particular + work, or (3) arrange, in a manner consistent with the requirements + of this License, to extend the patent license to downstream + recipients. "Knowingly relying" means you have actual knowledge + that, but for the patent license, your conveying the covered work + in a country, or your recipient's use of the covered work in a + country, would infringe one or more identifiable patents in that + country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or + arrangement, you convey, or propagate by procuring conveyance of, a + covered work, and grant a patent license to some of the parties + receiving the covered work authorizing them to use, propagate, + modify or convey a specific copy of the covered work, then the + patent license you grant is automatically extended to all + recipients of the covered work and works based on it. + + A patent license is "discriminatory" if it does not include within + the scope of its coverage, prohibits the exercise of, or is + conditioned on the non-exercise of one or more of the rights that + are specifically granted under this License. You may not convey a + covered work if you are a party to an arrangement with a third + party that is in the business of distributing software, under + which you make payment to the third party based on the extent of + your activity of conveying the work, and under which the third + party grants, to any of the parties who would receive the covered + work from you, a discriminatory patent license (a) in connection + with copies of the covered work conveyed by you (or copies made + from those copies), or (b) primarily for and in connection with + specific products or compilations that contain the covered work, + unless you entered into that arrangement, or that patent license + was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting + any implied license or other defenses to infringement that may + otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this + License. If you cannot convey a covered work so as to satisfy + simultaneously your obligations under this License and any other + pertinent obligations, then as a consequence you may not convey it + at all. For example, if you agree to terms that obligate you to + collect a royalty for further conveying from those to whom you + convey the Program, the only way you could satisfy both those + terms and this License would be to refrain entirely from conveying + the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have + permission to link or combine any covered work with a work licensed + under version 3 of the GNU Affero General Public License into a + single combined work, and to convey the resulting work. The terms + of this License will continue to apply to the part which is the + covered work, but the special requirements of the GNU Affero + General Public License, section 13, concerning interaction through + a network will apply to the combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new + versions of the GNU General Public License from time to time. + Such new versions will be similar in spirit to the present + version, but may differ in detail to address new problems or + concerns. + + Each version is given a distinguishing version number. If the + Program specifies that a certain numbered version of the GNU + General Public License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that numbered version or of any later version published by the + Free Software Foundation. If the Program does not specify a + version number of the GNU General Public License, you may choose + any version ever published by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future + versions of the GNU General Public License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Program. + + Later license versions may give you additional or different + permissions. However, no additional obligations are imposed on any + author or copyright holder as a result of your choosing to follow a + later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY + APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE + COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE + RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. + SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES + AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU + FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE + THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA + BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD + PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER + PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF + THE POSSIBILITY OF SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided + above cannot be given local legal effect according to their terms, + reviewing courts shall apply local law that most closely + approximates an absolute waiver of all civil liability in + connection with the Program, unless a warranty or assumption of + liability accompanies a copy of the Program in return for a fee. + + +END OF TERMS AND CONDITIONS +=========================== + +How to Apply These Terms to Your New Programs +============================================= + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. + Copyright (C) YEAR NAME OF AUTHOR + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at + your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see `http://www.gnu.org/licenses/'. + + Also add information on how to contact you by electronic and paper +mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + PROGRAM Copyright (C) YEAR NAME OF AUTHOR + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, your +program's commands might be different; for a GUI interface, you would +use an "about box". + + You should also get your employer (if you work as a programmer) or +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. For more information on this, and how to apply and follow +the GNU GPL, see `http://www.gnu.org/licenses/'. + + The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use the +GNU Lesser General Public License instead of this License. But first, +please read `http://www.gnu.org/philosophy/why-not-lgpl.html'. + + +File: libunistring.info, Node: GNU LGPL, Next: GNU FDL, Prev: GNU GPL, Up: Licenses + +A.2 GNU LESSER GENERAL PUBLIC LICENSE +===================================== + + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/' + + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU + Lesser General Public License, and the "GNU GPL" refers to version + 3 of the GNU General Public License. + + "The Library" refers to a covered work governed by this License, + other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface + provided by the Library, but which is not otherwise based on the + Library. Defining a subclass of a class defined by the Library is + deemed a mode of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an + Application with the Library. The particular version of the + Library with which the Combined Work was made is also called the + "Linked Version". + + The "Minimal Corresponding Source" for a Combined Work means the + Corresponding Source for the Combined Work, excluding any source + code for portions of the Combined Work that, considered in + isolation, are based on the Application, and not on the Linked + Version. + + The "Corresponding Application Code" for a Combined Work means the + object code and/or source code for the Application, including any + data and utility programs needed for reproducing the Combined Work + from the Application, but excluding the System Libraries of the + Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this + License without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a + facility refers to a function or data to be supplied by an + Application that uses the facility (other than as an argument + passed when the facility is invoked), then you may convey a copy + of the modified version: + + a. under this License, provided that you make a good faith + effort to ensure that, in the event an Application does not + supply the function or data, the facility still operates, and + performs whatever part of its purpose remains meaningful, or + + b. under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material + from a header file that is part of the Library. You may convey + such object code under terms of your choice, provided that, if the + incorporated material is not limited to numerical parameters, data + structure layouts and accessors, or small macros, inline functions + and templates (ten or fewer lines in length), you do both of the + following: + + a. Give prominent notice with each copy of the object code that + the Library is used in it and that the Library and its use are + covered by this License. + + b. Accompany the object code with a copy of the GNU GPL and this + license document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, + taken together, effectively do not restrict modification of the + portions of the Library contained in the Combined Work and reverse + engineering for debugging such modifications, if you also do each + of the following: + + a. Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b. Accompany the Combined Work with a copy of the GNU GPL and + this license document. + + c. For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to + the copies of the GNU GPL and this license document. + + d. Do one of the following: + + 0. Convey the Minimal Corresponding Source under the terms + of this License, and the Corresponding Application Code + in a form suitable for, and under terms that permit, the + user to recombine or relink the Application with a + modified version of the Linked Version to produce a + modified Combined Work, in the manner specified by + section 6 of the GNU GPL for conveying Corresponding + Source. + + 1. Use a suitable shared library mechanism for linking with + the Library. A suitable mechanism is one that (a) uses + at run time a copy of the Library already present on the + user's computer system, and (b) will operate properly + with a modified version of the Library that is + interface-compatible with the Linked Version. + + e. Provide Installation Information, but only if you would + otherwise be required to provide such information under + section 6 of the GNU GPL, and only to the extent that such + information is necessary to install and execute a modified + version of the Combined Work produced by recombining or + relinking the Application with a modified version of the + Linked Version. (If you use option 4d0, the Installation + Information must accompany the Minimal Corresponding Source + and Corresponding Application Code. If you use option 4d1, + you must provide the Installation Information in the manner + specified by section 6 of the GNU GPL for conveying + Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the + Library side by side in a single library together with other + library facilities that are not Applications and are not covered + by this License, and convey such a combined library under terms of + your choice, if you do both of the following: + + a. Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities, conveyed under the terms of this License. + + b. Give prominent notice with the combined library that part of + it is a work based on the Library, and explaining where to + find the accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new + versions of the GNU Lesser General Public License from time to + time. Such new versions will be similar in spirit to the present + version, but may differ in detail to address new problems or + concerns. + + Each version is given a distinguishing version number. If the + Library as you received it specifies that a certain numbered + version of the GNU Lesser General Public License "or any later + version" applies to it, you have the option of following the terms + and conditions either of that published version or of any later + version published by the Free Software Foundation. If the Library + as you received it does not specify a version number of the GNU + Lesser General Public License, you may choose any version of the + GNU Lesser General Public License ever published by the Free + Software Foundation. + + If the Library as you received it specifies that a proxy can decide + whether future versions of the GNU Lesser General Public License + shall apply, that proxy's public statement of acceptance of any + version is permanent authorization for you to choose that version + for the Library. + + + +File: libunistring.info, Node: GNU FDL, Prev: GNU LGPL, Up: Licenses + +A.3 GNU Free Documentation License +================================== + + Version 1.3, 3 November 2008 + + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + `http://fsf.org/' + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + 0. PREAMBLE + + The purpose of this License is to make a manual, textbook, or other + functional and useful document "free" in the sense of freedom: to + assure everyone the effective freedom to copy and redistribute it, + with or without modifying it, either commercially or + noncommercially. Secondarily, this License preserves for the + author and publisher a way to get credit for their work, while not + being considered responsible for modifications made by others. + + This License is a kind of "copyleft", which means that derivative + works of the document must themselves be free in the same sense. + It complements the GNU General Public License, which is a copyleft + license designed for free software. + + We have designed this License in order to use it for manuals for + free software, because free software needs free documentation: a + free program should come with manuals providing the same freedoms + that the software does. But this License is not limited to + software manuals; it can be used for any textual work, regardless + of subject matter or whether it is published as a printed book. + We recommend this License principally for works whose purpose is + instruction or reference. + + 1. APPLICABILITY AND DEFINITIONS + + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. + + A "Modified Version" of the Document means any work containing the + Document or a portion of it, either copied verbatim, or with + modifications and/or translated into another language. + + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. + + The "Invariant Sections" are certain Secondary Sections whose + titles are designated, as being those of Invariant Sections, in + the notice that says that the Document is released under this + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. + + The "Cover Texts" are certain short passages of text that are + listed, as Front-Cover Texts or Back-Cover Texts, in the notice + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. + + A "Transparent" copy of the Document means a machine-readable copy, + represented in a format whose specification is available to the + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images + composed of pixels) generic paint programs or (for drawings) some + widely available drawing editor, and that is suitable for input to + text formatters or for automatic translation to a variety of + formats suitable for input to text formatters. A copy made in an + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". + + Examples of suitable formats for Transparent copies include plain + ASCII without markup, Texinfo input format, LaTeX input format, + SGML or XML using a publicly available DTD, and + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include proprietary formats that + can be read and edited only by proprietary word processors, SGML or + XML for which the DTD and/or processing tools are not generally + available, and the machine-generated HTML, PostScript or PDF + produced by some word processors for output purposes only. + + The "Title Page" means, for a printed book, the title page itself, + plus such following pages as are needed to hold, legibly, the + material this License requires to appear in the title page. For + works in formats which do not have any title page as such, "Title + Page" means the text near the most prominent appearance of the + work's title, preceding the beginning of the body of the text. + + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + + 2. VERBATIM COPYING + + You may copy and distribute the Document in any medium, either + commercially or noncommercially, provided that this License, the + copyright notices, and the license notice saying this License + applies to the Document are reproduced in all copies, and that you + add no other conditions whatsoever to those of this License. You + may not use technical measures to obstruct or control the reading + or further copying of the copies you make or distribute. However, + you may accept compensation in exchange for copies. If you + distribute a large enough number of copies you must also follow + the conditions in section 3. + + You may also lend copies, under the same conditions stated above, + and you may publicly display copies. + + 3. COPYING IN QUANTITY + + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and + Back-Cover Texts on the back cover. Both covers must also clearly + and legibly identify you as the publisher of these copies. The + front cover must present the full title with all words of the + title equally prominent and visible. You may add other material + on the covers in addition. Copying with changes limited to the + covers, as long as they preserve the title of the Document and + satisfy these conditions, can be treated as verbatim copying in + other respects. + + If the required texts for either cover are too voluminous to fit + legibly, you should put the first ones listed (as many as fit + reasonably) on the actual cover, and continue the rest onto + adjacent pages. + + If you publish or distribute Opaque copies of the Document + numbering more than 100, you must either include a + machine-readable Transparent copy along with each Opaque copy, or + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the + latter option, you must take reasonably prudent steps, when you + begin distribution of Opaque copies in quantity, to ensure that + this Transparent copy will remain thus accessible at the stated + location until at least one year after the last time you + distribute an Opaque copy (directly or through your agents or + retailers) of that edition to the public. + + It is requested, but not required, that you contact the authors of + the Document well before redistributing any large number of + copies, to give them a chance to provide you with an updated + version of the Document. + + 4. MODIFICATIONS + + You may copy and distribute a Modified Version of the Document + under the conditions of sections 2 and 3 above, provided that you + release the Modified Version under precisely this License, with + the Modified Version filling the role of the Document, thus + licensing distribution and modification of the Modified Version to + whoever possesses a copy of it. In addition, you must do these + things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title + distinct from that of the Document, and from those of + previous versions (which should, if there were any, be listed + in the History section of the Document). You may use the + same title as a previous version if the original publisher of + that version gives permission. + + B. List on the Title Page, as authors, one or more persons or + entities responsible for authorship of the modifications in + the Modified Version, together with at least five of the + principal authors of the Document (all of its principal + authors, if it has fewer than five), unless they release you + from this requirement. + + C. State on the Title page the name of the publisher of the + Modified Version, as the publisher. + + D. Preserve all the copyright notices of the Document. + + E. Add an appropriate copyright notice for your modifications + adjacent to the other copyright notices. + + F. Include, immediately after the copyright notices, a license + notice giving the public permission to use the Modified + Version under the terms of this License, in the form shown in + the Addendum below. + + G. Preserve in that license notice the full lists of Invariant + Sections and required Cover Texts given in the Document's + license notice. + + H. Include an unaltered copy of this License. + + I. Preserve the section Entitled "History", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + J. Preserve the network location, if any, given in the Document + for public access to a Transparent copy of the Document, and + likewise the network locations given in the Document for + previous versions it was based on. These may be placed in + the "History" section. You may omit a network location for a + work that was published at least four years before the + Document itself, or if the original publisher of the version + it refers to gives permission. + + K. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + L. Preserve all the Invariant Sections of the Document, + unaltered in their text and in their titles. Section numbers + or the equivalent are not considered part of the section + titles. + + M. Delete any section Entitled "Endorsements". Such a section + may not be included in the Modified Version. + + N. Do not retitle any existing section to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. + + If the Modified Version includes new front-matter sections or + appendices that qualify as Secondary Sections and contain no + material copied from the Document, you may at your option + designate some or all of these sections as invariant. To do this, + add their titles to the list of Invariant Sections in the Modified + Version's license notice. These titles must be distinct from any + other section titles. + + You may add a section Entitled "Endorsements", provided it contains + nothing but endorsements of your Modified Version by various + parties--for example, statements of peer review or that the text + has been approved by an organization as the authoritative + definition of a standard. + + You may add a passage of up to five words as a Front-Cover Text, + and a passage of up to 25 words as a Back-Cover Text, to the end + of the list of Cover Texts in the Modified Version. Only one + passage of Front-Cover Text and one of Back-Cover Text may be + added by (or through arrangements made by) any one entity. If the + Document already includes a cover text for the same cover, + previously added by you or by arrangement made by the same entity + you are acting on behalf of, you may not add another; but you may + replace the old one, on explicit permission from the previous + publisher that added the old one. + + The author(s) and publisher(s) of the Document do not by this + License give permission to use their names for publicity for or to + assert or imply endorsement of any Modified Version. + + 5. COMBINING DOCUMENTS + + You may combine the Document with other documents released under + this License, under the terms defined in section 4 above for + modified versions, provided that you include in the combination + all of the Invariant Sections of all of the original documents, + unmodified, and list them all as Invariant Sections of your + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. + + The combined work need only contain one copy of this License, and + multiple identical Invariant Sections may be replaced with a single + copy. If there are multiple Invariant Sections with the same name + but different contents, make the title of each such section unique + by adding at the end of it, in parentheses, the name of the + original author or publisher of that section if known, or else a + unique number. Make the same adjustment to the section titles in + the list of Invariant Sections in the license notice of the + combined work. + + In the combination, you must combine any sections Entitled + "History" in the various original documents, forming one section + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." + + 6. COLLECTIONS OF DOCUMENTS + + You may make a collection consisting of the Document and other + documents released under this License, and replace the individual + copies of this License in the various documents with a single copy + that is included in the collection, provided that you follow the + rules of this License for verbatim copying of each of the + documents in all other respects. + + You may extract a single document from such a collection, and + distribute it individually under this License, provided you insert + a copy of this License into the extracted document, and follow + this License in all other respects regarding verbatim copying of + that document. + + 7. AGGREGATION WITH INDEPENDENT WORKS + + A compilation of the Document or its derivatives with other + separate and independent documents or works, in or on a volume of + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. + + If the Cover Text requirement of section 3 is applicable to these + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. + + 8. TRANSLATION + + Translation is considered a kind of modification, so you may + distribute translations of the Document under the terms of section + 4. Replacing Invariant Sections with translations requires special + permission from their copyright holders, but you may include + translations of some or all Invariant Sections in addition to the + original versions of these Invariant Sections. You may include a + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. + + 9. TERMINATION + + You may not copy, modify, sublicense, or distribute the Document + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, receipt of a copy of some or all of + the same material does not give you any rights to use it. + + 10. FUTURE REVISIONS OF THIS LICENSE + + The Free Software Foundation may publish new, revised versions of + the GNU Free Documentation License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. See + `http://www.gnu.org/copyleft/'. + + Each version of the License is given a distinguishing version + number. If the Document specifies that a particular numbered + version of this License "or any later version" applies to it, you + have the option of following the terms and conditions either of + that specified version or of any later version that has been + published (not as a draft) by the Free Software Foundation. If + the Document does not specify a version number of this License, + you may choose any version ever published (not as a draft) by the + Free Software Foundation. If the Document specifies that a proxy + can decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. + + +ADDENDUM: How to use this License for your documents +==================================================== + + To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and license +notices just after the title page: + + Copyright (C) YEAR YOUR NAME. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. + + If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, to +permit their use in free software. + + +File: libunistring.info, Node: Index, Prev: Licenses, Up: Top + +Index +***** + +[index] +* Menu: + +* ambiguous width: uniwidth.h. (line 10) +* argument conventions: Conventions. (line 9) +* autoconf macro: Autoconf macro. (line 6) +* bidirectional category: Bidirectional category. + (line 6) +* bidirectional reordering: More functionality. (line 6) +* block: Blocks. (line 6) +* breaks, line: unilbrk.h. (line 6) +* breaks, word: uniwbrk.h. (line 6) +* bug reports: Reporting problems. (line 6) +* bug tracker: Reporting problems. (line 6) +* C string functions: char * strings. (line 6) +* C, programming language: ISO C and Java syntax. + (line 6) +* C-like API: Classifications like in ISO C. + (line 6) +* canonical combining class: Canonical combining class. + (line 6) +* case detection: Case detection. (line 6) +* case mappings: Case mappings of strings. + (line 6) +* casing_prefix_context_t: Case mappings of substrings. + (line 15) +* casing_suffix_context_t: Case mappings of substrings. + (line 46) +* char, type: char * strings. (line 23) +* combining, Unicode characters: Composition of characters. + (line 6) +* comparing <1>: Elementary string functions on NUL terminated strings. + (line 128) +* comparing: Elementary string functions. + (line 108) +* comparing, ignoring case: Case insensitive comparison. + (line 6) +* comparing, ignoring case, with collation rules: Case insensitive comparison. + (line 66) +* comparing, ignoring normalization: Normalizing comparisons. + (line 6) +* comparing, ignoring normalization and case: Case insensitive comparison. + (line 6) +* comparing, ignoring normalization and case, with collation rules: Case insensitive comparison. + (line 66) +* comparing, ignoring normalization, with collation rules: Normalizing comparisons. + (line 23) +* comparing, with collation rules: Elementary string functions on NUL terminated strings. + (line 140) +* comparing, with collation rules, ignoring case: Case insensitive comparison. + (line 66) +* comparing, with collation rules, ignoring normalization: Normalizing comparisons. + (line 23) +* comparing, with collation rules, ignoring normalization and case: Case insensitive comparison. + (line 66) +* compiler options: Compiler options. (line 24) +* composing, Unicode characters: Composition of characters. + (line 6) +* converting <1>: uniconv.h. (line 45) +* converting: Elementary string conversions. + (line 6) +* copying <1>: Elementary string functions on NUL terminated strings. + (line 61) +* copying: Elementary string functions. + (line 72) +* counting: Elementary string functions. + (line 153) +* decomposing: Decomposition of characters. + (line 6) +* dependencies: Installation. (line 6) +* detecting case: Case detection. (line 6) +* duplicating <1>: Elementary string functions on NUL terminated strings. + (line 166) +* duplicating: Elementary string functions with memory allocation. + (line 6) +* enum iconv_ilseq_handler: uniconv.h. (line 30) +* FDL, GNU Free Documentation License: GNU FDL. (line 6) +* formatted output: unistdio.h. (line 6) +* fullwidth: uniwidth.h. (line 22) +* general category: General category. (line 6) +* gl_LIBUNISTRING: Autoconf macro. (line 11) +* GPL, GNU General Public License: GNU GPL. (line 6) +* halfwidth: uniwidth.h. (line 22) +* identifiers: ISO C and Java syntax. + (line 6) +* installation: Installation. (line 10) +* internationalization: Unicode and i18n. (line 6) +* iterating <1>: Elementary string functions on NUL terminated strings. + (line 15) +* iterating: Elementary string functions. + (line 6) +* Java, programming language: ISO C and Java syntax. + (line 6) +* LGPL, GNU Lesser General Public License: GNU LGPL. (line 6) +* License, GNU FDL: GNU FDL. (line 6) +* License, GNU GPL: GNU GPL. (line 6) +* License, GNU LGPL: GNU LGPL. (line 6) +* Licenses: Licenses. (line 6) +* line breaks: unilbrk.h. (line 6) +* locale: Locale encodings. (line 6) +* locale categories: Locale encodings. (line 10) +* locale encoding <1>: uniconv.h. (line 10) +* locale encoding: Locale encodings. (line 28) +* locale language: Case mappings of strings. + (line 16) +* locale, multibyte: char * strings. (line 13) +* locale_charset: uniconv.h. (line 13) +* lowercasing: Case mappings of strings. + (line 6) +* mailing list: Reporting problems. (line 6) +* mirroring, of Unicode character: Mirrored character. (line 6) +* normal forms: uninorm.h. (line 6) +* normalizing: uninorm.h. (line 6) +* output, formatted: unistdio.h. (line 6) +* properties, of Unicode character: Properties. (line 6) +* regular expression: uniregex.h. (line 6) +* rendering: More functionality. (line 9) +* return value conventions: Conventions. (line 47) +* scripts: Scripts. (line 6) +* searching, for a character <1>: Elementary string functions on NUL terminated strings. + (line 176) +* searching, for a character: Elementary string functions. + (line 140) +* searching, for a substring: Elementary string functions on NUL terminated strings. + (line 232) +* stream, normalizing a: Normalization of streams. + (line 6) +* struct uninorm_filter: Normalization of streams. + (line 11) +* titlecasing: Case mappings of strings. + (line 6) +* u16_asnprintf: unistdio.h. (line 132) +* u16_asprintf: unistdio.h. (line 129) +* u16_casecmp: Case insensitive comparison. + (line 51) +* u16_casecoll: Case insensitive comparison. + (line 95) +* u16_casefold: Case insensitive comparison. + (line 15) +* u16_casexfrm: Case insensitive comparison. + (line 75) +* u16_casing_prefix_context: Case mappings of substrings. + (line 30) +* u16_casing_prefixes_context: Case mappings of substrings. + (line 39) +* u16_casing_suffix_context: Case mappings of substrings. + (line 61) +* u16_casing_suffixes_context: Case mappings of substrings. + (line 70) +* u16_check: Elementary string checks. + (line 11) +* u16_chr: Elementary string functions. + (line 145) +* u16_cmp: Elementary string functions. + (line 115) +* u16_cmp2: Elementary string functions. + (line 131) +* u16_conv_from_encoding: uniconv.h. (line 54) +* u16_conv_to_encoding: uniconv.h. (line 91) +* u16_cpy: Elementary string functions. + (line 78) +* u16_cpy_alloc: Elementary string functions with memory allocation. + (line 10) +* u16_ct_casefold: Case insensitive comparison. + (line 37) +* u16_ct_tolower: Case mappings of substrings. + (line 107) +* u16_ct_totitle: Case mappings of substrings. + (line 125) +* u16_ct_toupper: Case mappings of substrings. + (line 89) +* u16_endswith: Elementary string functions on NUL terminated strings. + (line 258) +* u16_is_cased: Case detection. (line 57) +* u16_is_casefolded: Case detection. (line 44) +* u16_is_lowercase: Case detection. (line 24) +* u16_is_titlecase: Case detection. (line 34) +* u16_is_uppercase: Case detection. (line 14) +* u16_mblen: Elementary string functions. + (line 11) +* u16_mbsnlen: Elementary string functions. + (line 157) +* u16_mbtouc: Elementary string functions. + (line 38) +* u16_mbtouc_unsafe: Elementary string functions. + (line 23) +* u16_mbtoucr: Elementary string functions. + (line 45) +* u16_move: Elementary string functions. + (line 89) +* u16_next: Elementary string functions on NUL terminated strings. + (line 24) +* u16_normalize: Normalization of strings. + (line 50) +* u16_normcmp: Normalizing comparisons. + (line 13) +* u16_normcoll: Normalizing comparisons. + (line 40) +* u16_normxfrm: Normalizing comparisons. + (line 27) +* u16_possible_linebreaks: unilbrk.h. (line 46) +* u16_prev: Elementary string functions on NUL terminated strings. + (line 36) +* u16_set: Elementary string functions. + (line 101) +* u16_snprintf: unistdio.h. (line 126) +* u16_sprintf: unistdio.h. (line 123) +* u16_startswith: Elementary string functions on NUL terminated strings. + (line 250) +* u16_stpcpy: Elementary string functions on NUL terminated strings. + (line 76) +* u16_stpncpy: Elementary string functions on NUL terminated strings. + (line 99) +* u16_strcat: Elementary string functions on NUL terminated strings. + (line 110) +* u16_strchr: Elementary string functions on NUL terminated strings. + (line 180) +* u16_strcmp: Elementary string functions on NUL terminated strings. + (line 132) +* u16_strcoll: Elementary string functions on NUL terminated strings. + (line 142) +* u16_strconv_from_encoding: uniconv.h. (line 129) +* u16_strconv_from_locale: uniconv.h. (line 157) +* u16_strconv_to_encoding: uniconv.h. (line 142) +* u16_strconv_to_locale: uniconv.h. (line 167) +* u16_strcpy: Elementary string functions on NUL terminated strings. + (line 66) +* u16_strcspn: Elementary string functions on NUL terminated strings. + (line 201) +* u16_strdup: Elementary string functions on NUL terminated strings. + (line 170) +* u16_strlen: Elementary string functions on NUL terminated strings. + (line 47) +* u16_strmblen: Elementary string functions on NUL terminated strings. + (line 11) +* u16_strmbtouc: Elementary string functions on NUL terminated strings. + (line 17) +* u16_strncat: Elementary string functions on NUL terminated strings. + (line 121) +* u16_strncmp: Elementary string functions on NUL terminated strings. + (line 159) +* u16_strncpy: Elementary string functions on NUL terminated strings. + (line 88) +* u16_strnlen: Elementary string functions on NUL terminated strings. + (line 55) +* u16_strpbrk: Elementary string functions on NUL terminated strings. + (line 225) +* u16_strrchr: Elementary string functions on NUL terminated strings. + (line 188) +* u16_strspn: Elementary string functions on NUL terminated strings. + (line 213) +* u16_strstr: Elementary string functions on NUL terminated strings. + (line 239) +* u16_strtok: Elementary string functions on NUL terminated strings. + (line 268) +* u16_strwidth: uniwidth.h. (line 39) +* u16_to_u32: Elementary string conversions. + (line 23) +* u16_to_u8: Elementary string conversions. + (line 19) +* u16_tolower: Case mappings of strings. + (line 44) +* u16_totitle: Case mappings of strings. + (line 58) +* u16_toupper: Case mappings of strings. + (line 30) +* u16_u16_asnprintf: unistdio.h. (line 159) +* u16_u16_asprintf: unistdio.h. (line 156) +* u16_u16_snprintf: unistdio.h. (line 153) +* u16_u16_sprintf: unistdio.h. (line 150) +* u16_u16_vasnprintf: unistdio.h. (line 171) +* u16_u16_vasprintf: unistdio.h. (line 168) +* u16_u16_vsnprintf: unistdio.h. (line 165) +* u16_u16_vsprintf: unistdio.h. (line 162) +* u16_uctomb: Elementary string functions. + (line 62) +* u16_vasnprintf: unistdio.h. (line 144) +* u16_vasprintf: unistdio.h. (line 141) +* u16_vsnprintf: unistdio.h. (line 138) +* u16_vsprintf: unistdio.h. (line 135) +* u16_width: uniwidth.h. (line 31) +* u16_width_linebreaks: unilbrk.h. (line 65) +* u16_wordbreaks: Word breaks in a string. + (line 10) +* u32_asnprintf: unistdio.h. (line 185) +* u32_asprintf: unistdio.h. (line 182) +* u32_casecmp: Case insensitive comparison. + (line 54) +* u32_casecoll: Case insensitive comparison. + (line 98) +* u32_casefold: Case insensitive comparison. + (line 18) +* u32_casexfrm: Case insensitive comparison. + (line 78) +* u32_casing_prefix_context: Case mappings of substrings. + (line 32) +* u32_casing_prefixes_context: Case mappings of substrings. + (line 42) +* u32_casing_suffix_context: Case mappings of substrings. + (line 63) +* u32_casing_suffixes_context: Case mappings of substrings. + (line 73) +* u32_check: Elementary string checks. + (line 12) +* u32_chr: Elementary string functions. + (line 147) +* u32_cmp: Elementary string functions. + (line 117) +* u32_cmp2: Elementary string functions. + (line 133) +* u32_conv_from_encoding: uniconv.h. (line 57) +* u32_conv_to_encoding: uniconv.h. (line 94) +* u32_cpy: Elementary string functions. + (line 80) +* u32_cpy_alloc: Elementary string functions with memory allocation. + (line 11) +* u32_ct_casefold: Case insensitive comparison. + (line 42) +* u32_ct_tolower: Case mappings of substrings. + (line 112) +* u32_ct_totitle: Case mappings of substrings. + (line 130) +* u32_ct_toupper: Case mappings of substrings. + (line 94) +* u32_endswith: Elementary string functions on NUL terminated strings. + (line 260) +* u32_is_cased: Case detection. (line 59) +* u32_is_casefolded: Case detection. (line 46) +* u32_is_lowercase: Case detection. (line 26) +* u32_is_titlecase: Case detection. (line 36) +* u32_is_uppercase: Case detection. (line 16) +* u32_mblen: Elementary string functions. + (line 12) +* u32_mbsnlen: Elementary string functions. + (line 158) +* u32_mbtouc: Elementary string functions. + (line 39) +* u32_mbtouc_unsafe: Elementary string functions. + (line 25) +* u32_mbtoucr: Elementary string functions. + (line 46) +* u32_move: Elementary string functions. + (line 91) +* u32_next: Elementary string functions on NUL terminated strings. + (line 25) +* u32_normalize: Normalization of strings. + (line 52) +* u32_normcmp: Normalizing comparisons. + (line 15) +* u32_normcoll: Normalizing comparisons. + (line 42) +* u32_normxfrm: Normalizing comparisons. + (line 29) +* u32_possible_linebreaks: unilbrk.h. (line 48) +* u32_prev: Elementary string functions on NUL terminated strings. + (line 38) +* u32_set: Elementary string functions. + (line 102) +* u32_snprintf: unistdio.h. (line 179) +* u32_sprintf: unistdio.h. (line 176) +* u32_startswith: Elementary string functions on NUL terminated strings. + (line 252) +* u32_stpcpy: Elementary string functions on NUL terminated strings. + (line 78) +* u32_stpncpy: Elementary string functions on NUL terminated strings. + (line 101) +* u32_strcat: Elementary string functions on NUL terminated strings. + (line 112) +* u32_strchr: Elementary string functions on NUL terminated strings. + (line 181) +* u32_strcmp: Elementary string functions on NUL terminated strings. + (line 133) +* u32_strcoll: Elementary string functions on NUL terminated strings. + (line 143) +* u32_strconv_from_encoding: uniconv.h. (line 131) +* u32_strconv_from_locale: uniconv.h. (line 158) +* u32_strconv_to_encoding: uniconv.h. (line 144) +* u32_strconv_to_locale: uniconv.h. (line 168) +* u32_strcpy: Elementary string functions on NUL terminated strings. + (line 68) +* u32_strcspn: Elementary string functions on NUL terminated strings. + (line 203) +* u32_strdup: Elementary string functions on NUL terminated strings. + (line 171) +* u32_strlen: Elementary string functions on NUL terminated strings. + (line 48) +* u32_strmblen: Elementary string functions on NUL terminated strings. + (line 12) +* u32_strmbtouc: Elementary string functions on NUL terminated strings. + (line 18) +* u32_strncat: Elementary string functions on NUL terminated strings. + (line 123) +* u32_strncmp: Elementary string functions on NUL terminated strings. + (line 161) +* u32_strncpy: Elementary string functions on NUL terminated strings. + (line 90) +* u32_strnlen: Elementary string functions on NUL terminated strings. + (line 56) +* u32_strpbrk: Elementary string functions on NUL terminated strings. + (line 227) +* u32_strrchr: Elementary string functions on NUL terminated strings. + (line 189) +* u32_strspn: Elementary string functions on NUL terminated strings. + (line 215) +* u32_strstr: Elementary string functions on NUL terminated strings. + (line 241) +* u32_strtok: Elementary string functions on NUL terminated strings. + (line 270) +* u32_strwidth: uniwidth.h. (line 40) +* u32_to_u16: Elementary string conversions. + (line 31) +* u32_to_u8: Elementary string conversions. + (line 27) +* u32_tolower: Case mappings of strings. + (line 47) +* u32_totitle: Case mappings of strings. + (line 61) +* u32_toupper: Case mappings of strings. + (line 33) +* u32_u32_asnprintf: unistdio.h. (line 212) +* u32_u32_asprintf: unistdio.h. (line 209) +* u32_u32_snprintf: unistdio.h. (line 206) +* u32_u32_sprintf: unistdio.h. (line 203) +* u32_u32_vasnprintf: unistdio.h. (line 224) +* u32_u32_vasprintf: unistdio.h. (line 221) +* u32_u32_vsnprintf: unistdio.h. (line 218) +* u32_u32_vsprintf: unistdio.h. (line 215) +* u32_uctomb: Elementary string functions. + (line 63) +* u32_vasnprintf: unistdio.h. (line 197) +* u32_vasprintf: unistdio.h. (line 194) +* u32_vsnprintf: unistdio.h. (line 191) +* u32_vsprintf: unistdio.h. (line 188) +* u32_width: uniwidth.h. (line 33) +* u32_width_linebreaks: unilbrk.h. (line 68) +* u32_wordbreaks: Word breaks in a string. + (line 11) +* u8_asnprintf: unistdio.h. (line 79) +* u8_asprintf: unistdio.h. (line 76) +* u8_casecmp: Case insensitive comparison. + (line 48) +* u8_casecoll: Case insensitive comparison. + (line 92) +* u8_casefold: Case insensitive comparison. + (line 12) +* u8_casexfrm: Case insensitive comparison. + (line 72) +* u8_casing_prefix_context: Case mappings of substrings. + (line 28) +* u8_casing_prefixes_context: Case mappings of substrings. + (line 36) +* u8_casing_suffix_context: Case mappings of substrings. + (line 59) +* u8_casing_suffixes_context: Case mappings of substrings. + (line 67) +* u8_check: Elementary string checks. + (line 10) +* u8_chr: Elementary string functions. + (line 143) +* u8_cmp: Elementary string functions. + (line 113) +* u8_cmp2: Elementary string functions. + (line 129) +* u8_conv_from_encoding: uniconv.h. (line 51) +* u8_conv_to_encoding: uniconv.h. (line 88) +* u8_cpy: Elementary string functions. + (line 76) +* u8_cpy_alloc: Elementary string functions with memory allocation. + (line 9) +* u8_ct_casefold: Case insensitive comparison. + (line 32) +* u8_ct_tolower: Case mappings of substrings. + (line 102) +* u8_ct_totitle: Case mappings of substrings. + (line 120) +* u8_ct_toupper: Case mappings of substrings. + (line 84) +* u8_endswith: Elementary string functions on NUL terminated strings. + (line 256) +* u8_is_cased: Case detection. (line 55) +* u8_is_casefolded: Case detection. (line 42) +* u8_is_lowercase: Case detection. (line 22) +* u8_is_titlecase: Case detection. (line 32) +* u8_is_uppercase: Case detection. (line 12) +* u8_mblen: Elementary string functions. + (line 10) +* u8_mbsnlen: Elementary string functions. + (line 156) +* u8_mbtouc: Elementary string functions. + (line 37) +* u8_mbtouc_unsafe: Elementary string functions. + (line 21) +* u8_mbtoucr: Elementary string functions. + (line 44) +* u8_move: Elementary string functions. + (line 87) +* u8_next: Elementary string functions on NUL terminated strings. + (line 23) +* u8_normalize: Normalization of strings. + (line 48) +* u8_normcmp: Normalizing comparisons. + (line 11) +* u8_normcoll: Normalizing comparisons. + (line 38) +* u8_normxfrm: Normalizing comparisons. + (line 25) +* u8_possible_linebreaks: unilbrk.h. (line 44) +* u8_prev: Elementary string functions on NUL terminated strings. + (line 34) +* u8_set: Elementary string functions. + (line 100) +* u8_snprintf: unistdio.h. (line 73) +* u8_sprintf: unistdio.h. (line 70) +* u8_startswith: Elementary string functions on NUL terminated strings. + (line 248) +* u8_stpcpy: Elementary string functions on NUL terminated strings. + (line 74) +* u8_stpncpy: Elementary string functions on NUL terminated strings. + (line 97) +* u8_strcat: Elementary string functions on NUL terminated strings. + (line 108) +* u8_strchr: Elementary string functions on NUL terminated strings. + (line 179) +* u8_strcmp: Elementary string functions on NUL terminated strings. + (line 131) +* u8_strcoll: Elementary string functions on NUL terminated strings. + (line 141) +* u8_strconv_from_encoding: uniconv.h. (line 127) +* u8_strconv_from_locale: uniconv.h. (line 156) +* u8_strconv_to_encoding: uniconv.h. (line 140) +* u8_strconv_to_locale: uniconv.h. (line 166) +* u8_strcpy: Elementary string functions on NUL terminated strings. + (line 64) +* u8_strcspn: Elementary string functions on NUL terminated strings. + (line 199) +* u8_strdup: Elementary string functions on NUL terminated strings. + (line 169) +* u8_strlen: Elementary string functions on NUL terminated strings. + (line 46) +* u8_strmblen: Elementary string functions on NUL terminated strings. + (line 10) +* u8_strmbtouc: Elementary string functions on NUL terminated strings. + (line 16) +* u8_strncat: Elementary string functions on NUL terminated strings. + (line 119) +* u8_strncmp: Elementary string functions on NUL terminated strings. + (line 157) +* u8_strncpy: Elementary string functions on NUL terminated strings. + (line 86) +* u8_strnlen: Elementary string functions on NUL terminated strings. + (line 54) +* u8_strpbrk: Elementary string functions on NUL terminated strings. + (line 223) +* u8_strrchr: Elementary string functions on NUL terminated strings. + (line 187) +* u8_strspn: Elementary string functions on NUL terminated strings. + (line 211) +* u8_strstr: Elementary string functions on NUL terminated strings. + (line 237) +* u8_strtok: Elementary string functions on NUL terminated strings. + (line 266) +* u8_strwidth: uniwidth.h. (line 38) +* u8_to_u16: Elementary string conversions. + (line 11) +* u8_to_u32: Elementary string conversions. + (line 15) +* u8_tolower: Case mappings of strings. + (line 41) +* u8_totitle: Case mappings of strings. + (line 55) +* u8_toupper: Case mappings of strings. + (line 27) +* u8_u8_asnprintf: unistdio.h. (line 106) +* u8_u8_asprintf: unistdio.h. (line 103) +* u8_u8_snprintf: unistdio.h. (line 100) +* u8_u8_sprintf: unistdio.h. (line 97) +* u8_u8_vasnprintf: unistdio.h. (line 118) +* u8_u8_vasprintf: unistdio.h. (line 115) +* u8_u8_vsnprintf: unistdio.h. (line 112) +* u8_u8_vsprintf: unistdio.h. (line 109) +* u8_uctomb: Elementary string functions. + (line 61) +* u8_vasnprintf: unistdio.h. (line 91) +* u8_vasprintf: unistdio.h. (line 88) +* u8_vsnprintf: unistdio.h. (line 85) +* u8_vsprintf: unistdio.h. (line 82) +* u8_width: uniwidth.h. (line 29) +* u8_width_linebreaks: unilbrk.h. (line 62) +* u8_wordbreaks: Word breaks in a string. + (line 9) +* uc_all_blocks: Blocks. (line 38) +* uc_all_scripts: Scripts. (line 37) +* uc_bidi_category: Bidirectional category. + (line 88) +* uc_bidi_category_byname: Bidirectional category. + (line 82) +* uc_bidi_category_name: Bidirectional category. + (line 79) +* uc_block: Blocks. (line 27) +* uc_block_t: Blocks. (line 12) +* uc_c_ident_category: ISO C and Java syntax. + (line 39) +* uc_canonical_decomposition: Decomposition of characters. + (line 92) +* uc_combining_class: Canonical combining class. + (line 89) +* uc_composition: Composition of characters. + (line 10) +* uc_decimal_value: Decimal digit value. (line 11) +* uc_decomposition: Decomposition of characters. + (line 82) +* uc_digit_value: Digit value. (line 11) +* uc_fraction_t: Numeric value. (line 14) +* uc_general_category: Object oriented API. (line 207) +* uc_general_category_and: Object oriented API. (line 179) +* uc_general_category_and_not: Object oriented API. (line 186) +* uc_general_category_byname: Object oriented API. (line 201) +* uc_general_category_name: Object oriented API. (line 195) +* uc_general_category_or: Object oriented API. (line 173) +* uc_general_category_t: Object oriented API. (line 7) +* uc_is_alnum: Classifications like in ISO C. + (line 14) +* uc_is_alpha: Classifications like in ISO C. + (line 18) +* uc_is_bidi_category: Bidirectional category. + (line 91) +* uc_is_blank: Classifications like in ISO C. + (line 64) +* uc_is_block: Blocks. (line 32) +* uc_is_c_whitespace: ISO C and Java syntax. + (line 10) +* uc_is_cntrl: Classifications like in ISO C. + (line 24) +* uc_is_digit: Classifications like in ISO C. + (line 27) +* uc_is_general_category: Object oriented API. (line 213) +* uc_is_general_category_withtable: Bit mask API. (line 52) +* uc_is_graph: Classifications like in ISO C. + (line 31) +* uc_is_java_whitespace: ISO C and Java syntax. + (line 14) +* uc_is_lower: Classifications like in ISO C. + (line 35) +* uc_is_print: Classifications like in ISO C. + (line 41) +* uc_is_property: Properties as objects. + (line 140) +* uc_is_property_alphabetic: Properties as functions. + (line 10) +* uc_is_property_ascii_hex_digit: Properties as functions. + (line 74) +* uc_is_property_bidi_arabic_digit: Properties as functions. + (line 60) +* uc_is_property_bidi_arabic_right_to_left: Properties as functions. + (line 56) +* uc_is_property_bidi_block_separator: Properties as functions. + (line 62) +* uc_is_property_bidi_boundary_neutral: Properties as functions. + (line 66) +* uc_is_property_bidi_common_separator: Properties as functions. + (line 61) +* uc_is_property_bidi_control: Properties as functions. + (line 53) +* uc_is_property_bidi_embedding_or_override: Properties as functions. + (line 68) +* uc_is_property_bidi_eur_num_separator: Properties as functions. + (line 58) +* uc_is_property_bidi_eur_num_terminator: Properties as functions. + (line 59) +* uc_is_property_bidi_european_digit: Properties as functions. + (line 57) +* uc_is_property_bidi_hebrew_right_to_left: Properties as functions. + (line 55) +* uc_is_property_bidi_left_to_right: Properties as functions. + (line 54) +* uc_is_property_bidi_non_spacing_mark: Properties as functions. + (line 65) +* uc_is_property_bidi_other_neutral: Properties as functions. + (line 69) +* uc_is_property_bidi_pdf: Properties as functions. + (line 67) +* uc_is_property_bidi_segment_separator: Properties as functions. + (line 63) +* uc_is_property_bidi_whitespace: Properties as functions. + (line 64) +* uc_is_property_combining: Properties as functions. + (line 104) +* uc_is_property_composite: Properties as functions. + (line 105) +* uc_is_property_currency_symbol: Properties as functions. + (line 99) +* uc_is_property_dash: Properties as functions. + (line 91) +* uc_is_property_decimal_digit: Properties as functions. + (line 106) +* uc_is_property_default_ignorable_code_point: Properties as functions. + (line 14) +* uc_is_property_deprecated: Properties as functions. + (line 17) +* uc_is_property_diacritic: Properties as functions. + (line 108) +* uc_is_property_extender: Properties as functions. + (line 109) +* uc_is_property_format_control: Properties as functions. + (line 90) +* uc_is_property_grapheme_base: Properties as functions. + (line 46) +* uc_is_property_grapheme_extend: Properties as functions. + (line 47) +* uc_is_property_grapheme_link: Properties as functions. + (line 49) +* uc_is_property_hex_digit: Properties as functions. + (line 73) +* uc_is_property_hyphen: Properties as functions. + (line 92) +* uc_is_property_id_continue: Properties as functions. + (line 36) +* uc_is_property_id_start: Properties as functions. + (line 34) +* uc_is_property_ideographic: Properties as functions. + (line 78) +* uc_is_property_ids_binary_operator: Properties as functions. + (line 81) +* uc_is_property_ids_trinary_operator: Properties as functions. + (line 82) +* uc_is_property_ignorable_control: Properties as functions. + (line 110) +* uc_is_property_iso_control: Properties as functions. + (line 89) +* uc_is_property_join_control: Properties as functions. + (line 45) +* uc_is_property_left_of_pair: Properties as functions. + (line 103) +* uc_is_property_line_separator: Properties as functions. + (line 94) +* uc_is_property_logical_order_exception: Properties as functions. + (line 18) +* uc_is_property_lowercase: Properties as functions. + (line 27) +* uc_is_property_math: Properties as functions. + (line 100) +* uc_is_property_non_break: Properties as functions. + (line 88) +* uc_is_property_not_a_character: Properties as functions. + (line 12) +* uc_is_property_numeric: Properties as functions. + (line 107) +* uc_is_property_other_alphabetic: Properties as functions. + (line 11) +* uc_is_property_other_default_ignorable_code_point: Properties as functions. + (line 16) +* uc_is_property_other_grapheme_extend: Properties as functions. + (line 48) +* uc_is_property_other_id_continue: Properties as functions. + (line 37) +* uc_is_property_other_id_start: Properties as functions. + (line 35) +* uc_is_property_other_lowercase: Properties as functions. + (line 28) +* uc_is_property_other_math: Properties as functions. + (line 101) +* uc_is_property_other_uppercase: Properties as functions. + (line 26) +* uc_is_property_paired_punctuation: Properties as functions. + (line 102) +* uc_is_property_paragraph_separator: Properties as functions. + (line 95) +* uc_is_property_pattern_syntax: Properties as functions. + (line 41) +* uc_is_property_pattern_white_space: Properties as functions. + (line 40) +* uc_is_property_private_use: Properties as functions. + (line 20) +* uc_is_property_punctuation: Properties as functions. + (line 93) +* uc_is_property_quotation_mark: Properties as functions. + (line 96) +* uc_is_property_radical: Properties as functions. + (line 80) +* uc_is_property_sentence_terminal: Properties as functions. + (line 97) +* uc_is_property_soft_dotted: Properties as functions. + (line 30) +* uc_is_property_space: Properties as functions. + (line 87) +* uc_is_property_terminal_punctuation: Properties as functions. + (line 98) +* uc_is_property_titlecase: Properties as functions. + (line 29) +* uc_is_property_unassigned_code_value: Properties as functions. + (line 21) +* uc_is_property_unified_ideograph: Properties as functions. + (line 79) +* uc_is_property_uppercase: Properties as functions. + (line 25) +* uc_is_property_variation_selector: Properties as functions. + (line 19) +* uc_is_property_white_space: Properties as functions. + (line 9) +* uc_is_property_xid_continue: Properties as functions. + (line 39) +* uc_is_property_xid_start: Properties as functions. + (line 38) +* uc_is_property_zero_width: Properties as functions. + (line 86) +* uc_is_punct: Classifications like in ISO C. + (line 44) +* uc_is_script: Scripts. (line 31) +* uc_is_space: Classifications like in ISO C. + (line 49) +* uc_is_upper: Classifications like in ISO C. + (line 54) +* uc_is_xdigit: Classifications like in ISO C. + (line 60) +* uc_java_ident_category: ISO C and Java syntax. + (line 43) +* uc_locale_language: Case mappings of strings. + (line 21) +* uc_mirror_char: Mirrored character. (line 14) +* uc_numeric_value: Numeric value. (line 23) +* uc_property_byname: Properties as objects. + (line 123) +* uc_property_is_valid: Properties as objects. + (line 133) +* uc_property_t: Properties as objects. + (line 9) +* uc_script: Scripts. (line 20) +* uc_script_byname: Scripts. (line 25) +* uc_script_t: Scripts. (line 11) +* uc_tolower: Case mappings of characters. + (line 20) +* uc_totitle: Case mappings of characters. + (line 23) +* uc_toupper: Case mappings of characters. + (line 17) +* uc_width: uniwidth.h. (line 23) +* uc_wordbreak_property: Word break property. (line 32) +* UCS-4: Unicode. (line 14) +* ucs4_t: unitypes.h. (line 16) +* uint16_t: unitypes.h. (line 10) +* uint32_t: unitypes.h. (line 11) +* uint8_t: unitypes.h. (line 9) +* ulc_asnprintf: unistdio.h. (line 53) +* ulc_asprintf: unistdio.h. (line 50) +* ulc_casecmp: Case insensitive comparison. + (line 57) +* ulc_casecoll: Case insensitive comparison. + (line 101) +* ulc_casexfrm: Case insensitive comparison. + (line 81) +* ulc_fprintf: unistdio.h. (line 229) +* ulc_possible_linebreaks: unilbrk.h. (line 50) +* ulc_snprintf: unistdio.h. (line 48) +* ulc_sprintf: unistdio.h. (line 45) +* ulc_vasnprintf: unistdio.h. (line 65) +* ulc_vasprintf: unistdio.h. (line 62) +* ulc_vfprintf: unistdio.h. (line 232) +* ulc_vsnprintf: unistdio.h. (line 59) +* ulc_vsprintf: unistdio.h. (line 56) +* ulc_width_linebreaks: unilbrk.h. (line 71) +* ulc_wordbreaks: Word breaks in a string. + (line 12) +* Unicode: Unicode. (line 6) +* Unicode character, bidirectional category: Bidirectional category. + (line 6) +* Unicode character, block: Blocks. (line 24) +* Unicode character, canonical combining class: Canonical combining class. + (line 6) +* Unicode character, case mappings: Case mappings of characters. + (line 6) +* Unicode character, classification: General category. (line 6) +* Unicode character, classification like in C: Classifications like in ISO C. + (line 6) +* Unicode character, general category: General category. (line 6) +* Unicode character, mirroring: Mirrored character. (line 6) +* Unicode character, name: uniname.h. (line 6) +* Unicode character, properties: Properties. (line 6) +* Unicode character, script: Scripts. (line 17) +* Unicode character, validity in C identifiers: ISO C and Java syntax. + (line 38) +* Unicode character, validity in Java identifiers: ISO C and Java syntax. + (line 42) +* Unicode character, value <1>: Numeric value. (line 6) +* Unicode character, value <2>: Digit value. (line 6) +* Unicode character, value: Decimal digit value. (line 6) +* Unicode character, width: uniwidth.h. (line 22) +* unicode_character_name: uniname.h. (line 19) +* unicode_name_character: uniname.h. (line 25) +* uninorm_decomposing_form: Normalization of strings. + (line 40) +* uninorm_filter_create: Normalization of streams. + (line 19) +* uninorm_filter_flush: Normalization of streams. + (line 33) +* uninorm_filter_free: Normalization of streams. + (line 43) +* uninorm_filter_write: Normalization of streams. + (line 29) +* uninorm_is_compat_decomposing: Normalization of strings. + (line 32) +* uninorm_is_composing: Normalization of strings. + (line 36) +* uninorm_t: Normalization of strings. + (line 10) +* uppercasing: Case mappings of strings. + (line 6) +* use cases: Introduction. (line 44) +* UTF-16: Unicode. (line 14) +* UTF-16, strings: Unicode strings. (line 6) +* UTF-32: Unicode. (line 14) +* UTF-32, strings: Unicode strings. (line 6) +* UTF-8: Unicode. (line 14) +* UTF-8, strings: Unicode strings. (line 6) +* validity: Elementary string checks. + (line 6) +* value, of libunistring: Introduction. (line 44) +* value, of Unicode character <1>: Numeric value. (line 6) +* value, of Unicode character <2>: Digit value. (line 6) +* value, of Unicode character: Decimal digit value. (line 6) +* verification: Elementary string checks. + (line 6) +* wchar_t, type: The wchar_t mess. (line 6) +* width: uniwidth.h. (line 6) +* word breaks: uniwbrk.h. (line 6) +* wrapping: unilbrk.h. (line 6) + + + +Tag Table: +Node: Top270 +Node: Introduction3239 +Node: Unicode5236 +Node: Unicode and i18n7116 +Node: Locale encodings8579 +Node: In-memory representation10787 +Node: char * strings11896 +Node: The wchar_t mess17153 +Node: Unicode strings19357 +Node: Conventions20508 +Node: unitypes.h22708 +Node: unistr.h23280 +Node: Elementary string checks23837 +Node: Elementary string conversions24459 +Node: Elementary string functions25761 +Node: Elementary string functions with memory allocation32732 +Node: Elementary string functions on NUL terminated strings33354 +Node: uniconv.h45090 +Node: unistdio.h52801 +Node: uniname.h61004 +Node: unictype.h62337 +Node: General category63246 +Node: Object oriented API64289 +Node: Bit mask API72751 +Node: Canonical combining class75005 +Node: Bidirectional category78219 +Node: Decimal digit value81276 +Node: Digit value81837 +Node: Numeric value82398 +Node: Mirrored character83289 +Node: Properties83962 +Node: Properties as objects84653 +Node: Properties as functions91031 +Node: Scripts96582 +Node: Blocks97968 +Node: ISO C and Java syntax99291 +Node: Classifications like in ISO C101001 +Node: uniwidth.h103705 +Node: uniwbrk.h105742 +Node: Word breaks in a string106269 +Node: Word break property107320 +Node: unilbrk.h108416 +Node: uninorm.h112587 +Node: Decomposition of characters113219 +Node: Composition of characters116595 +Node: Normalization of strings117304 +Node: Normalizing comparisons119366 +Node: Normalization of streams121722 +Node: unicase.h123810 +Node: Case mappings of characters124495 +Node: Case mappings of strings126542 +Node: Case mappings of substrings129875 +Node: Case insensitive comparison136805 +Node: Case detection142156 +Node: uniregex.h145424 +Node: Using the library145647 +Node: Installation146058 +Node: Compiler options146531 +Node: Include files148090 +Node: Autoconf macro149314 +Node: Reporting problems150872 +Node: More functionality151669 +Node: Licenses152112 +Node: GNU GPL153747 +Node: GNU LGPL191292 +Node: GNU FDL199738 +Node: Index224863 + +End Tag Table + + +Local Variables: +coding: utf-8 +End: diff --git a/doc/libunistring.texi b/doc/libunistring.texi new file mode 100644 index 00000000..8eb8061f --- /dev/null +++ b/doc/libunistring.texi @@ -0,0 +1,989 @@ +\input texinfo @c -*-texinfo-*- +@comment %**start of header +@setfilename libunistring.info +@documentencoding UTF-8 +@settitle GNU libunistring +@finalout +@c Indices: +@c am = autoconf macro @amindex +@c cp = concept @cindex +@c fn = function @findex +@c tp = type @tindex +@c Unused predefined indices: +@c ky = keystroke @kindex +@c pg = program @pindex +@c vr = variable @vindex +@defcodeindex am +@syncodeindex am cp +@syncodeindex fn cp +@syncodeindex tp cp +@ifclear texi2html +@firstparagraphindent insert +@end ifclear +@c texi2html-1.76 does not support @arrow{}. +@ifset texi2html +@macro arrow{} +→ +@end macro +@end ifset +@comment %**end of header + +@include version.texi + +@c Location of the POSIX specification on the web. +@set POSIXURL http://www.opengroup.org/onlinepubs/9699919799 + +@c Macro for referencing a POSIX function. +@c We don't write it as func(), see section "GNU Manuals" of the +@c GNU coding standards. +@ifinfo +@macro posixfunc{func} +@code{\func\} +@end macro +@end ifinfo +@ifnotinfo +@macro posixfunc{func} +@uref{@value{POSIXURL}/functions/\func\.html,,@code{\func\}} +@end macro +@end ifnotinfo + +@c Macro for referencing a normal function. +@c We don't write it as func(), see section "GNU Manuals" of the +@c GNU coding standards. +@macro func{func} +@code{\func\} +@end macro + +@c Macro for an advisory ragged line break in TeX mode. +@c Needed because there are long unbreakable pieces of text (such as URLs or +@c formulas), TeX is too shy to move them to a new line. TeX considers only +@c two choices: a line break in aligned mode (which it rejects due to aesthetic +@c reasons) and writing into the margin. What we want in many cases is a line +@c break without filling the first line. Like what @* delivers. But we want it +@c only when needed, so that it disappears when unrelated changes in the same +@c paragraph cause a line break in a nearby position. And we need it only in +@c TeX mode. info and HTML modes are fine. +@c This trick is from Karl Berry. +@iftex +@macro texnl +@hfil@penalty9000@hfilneg +@end macro +@end iftex +@ifnottex +@macro texnl +@end macro +@end ifnottex + +@ifinfo +@dircategory Software development +@direntry +* GNU libunistring: (libunistring). Unicode string library. +@end direntry +@end ifinfo + +@ifinfo +This manual is for GNU libunistring. + +@ignore +@c This was: @copying but it triggers a makeinfo 4.13 bug +Copyright (C) 2001-2009 Free Software Foundation, Inc. + +This manual is free documentation. It is dually licensed under the +GNU FDL and the GNU GPL. This means that you can redistribute this +manual under either of these two licenses, at your choice. + +This manual is covered by the GNU FDL. Permission is granted to copy, +distribute and/or modify this document under the terms of the +GNU Free Documentation License (FDL), either version 1.2 of the +License, or (at your option) any later version published by the +Free Software Foundation (FSF); with no Invariant Sections, with no +Front-Cover Text, and with no Back-Cover Texts. +A copy of the license is included in @ref{GNU FDL}. + +This manual is covered by the GNU GPL. You can redistribute it and/or +modify it under the terms of the GNU General Public License (GPL), either +version 3 of the License, or (at your option) any later version published +by the Free Software Foundation (FSF). +A copy of the license is included in @ref{GNU GPL}. +@end ignore +@end ifinfo + +@titlepage +@title GNU libunistring, version @value{VERSION} +@subtitle updated @value{UPDATED} +@subtitle Edition @value{EDITION}, @value{UPDATED} +@author Bruno Haible + +@ifnothtml +@page +@vskip 0pt plus 1filll +@c @insertcopying +Copyright (C) 2001-2009 Free Software Foundation, Inc. + +This manual is free documentation. It is dually licensed under the +GNU FDL and the GNU GPL. This means that you can redistribute this +manual under either of these two licenses, at your choice. + +This manual is covered by the GNU FDL. Permission is granted to copy, +distribute and/or modify this document under the terms of the +GNU Free Documentation License (FDL), either version 1.2 of the +License, or (at your option) any later version published by the +Free Software Foundation (FSF); with no Invariant Sections, with no +Front-Cover Text, and with no Back-Cover Texts. +A copy of the license is included in @ref{GNU FDL}. + +This manual is covered by the GNU GPL. You can redistribute it and/or +modify it under the terms of the GNU General Public License (GPL), either +version 3 of the License, or (at your option) any later version published +by the Free Software Foundation (FSF). +A copy of the license is included in @ref{GNU GPL}. +@end ifnothtml +@end titlepage + +@c Table of Contents +@contents + +@ifnottex +@node Top +@top GNU libunistring +@end ifnottex + +@menu +* Introduction:: Who may need Unicode strings? +* Conventions:: Conventions used in this manual +* unitypes.h:: Elementary types +* unistr.h:: Elementary Unicode string functions +* uniconv.h:: Conversions between Unicode and encodings +* unistdio.h:: Output with Unicode strings +* uniname.h:: Names of Unicode characters +* unictype.h:: Unicode character classification and properties +* uniwidth.h:: Display width +* uniwbrk.h:: Word breaks in strings +* unilbrk.h:: Line breaking +* uninorm.h:: Normalization forms +* unicase.h:: Case mappings +* uniregex.h:: Regular expressions +* Using the library:: How to link with the library and use it? +* More functionality:: More advanced functionality +* Licenses:: Licenses + +* Index:: General Index + +@detailmenu + --- The Detailed Node Listing --- + +Introduction + +* Unicode:: What is Unicode? +* Unicode and i18n:: Unicode and internationalization +* Locale encodings:: What is a locale encoding? +* In-memory representation:: How to represent strings in memory? +* char * strings:: What to keep in mind with @code{char *} strings +* The wchar_t mess:: Why @code{wchar_t *} strings are useless +* Unicode strings:: How are Unicode strings represented? + +unistr.h + +* Elementary string checks:: +* Elementary string conversions:: +* Elementary string functions:: +* Elementary string functions with memory allocation:: +* Elementary string functions on NUL terminated strings:: + +unictype.h + +* General category:: +* Canonical combining class:: +* Bidirectional category:: +* Decimal digit value:: +* Digit value:: +* Numeric value:: +* Mirrored character:: +* Properties:: +* Scripts:: +* Blocks:: +* ISO C and Java syntax:: +* Classifications like in ISO C:: + +General category + +* Object oriented API:: +* Bit mask API:: + +Properties + +* Properties as objects:: +* Properties as functions:: + +uniwbrk.h + +* Word breaks in a string:: +* Word break property:: + +uninorm.h + +* Decomposition of characters:: +* Composition of characters:: +* Normalization of strings:: +* Normalizing comparisons:: +* Normalization of streams:: + +unicase,h + +* Case mappings of characters:: +* Case mappings of strings:: +* Case mappings of substrings:: +* Case insensitive comparison:: +* Case detection:: + +Using the library + +* Installation:: +* Compiler options:: +* Include files:: +* Autoconf macro:: +* Reporting problems:: + +Licenses + +* GNU GPL:: GNU General Public License +* GNU LGPL:: GNU Lesser General Public License +* GNU FDL:: GNU Free Documentation License + +@end detailmenu +@end menu + +@node Introduction +@chapter Introduction + +This library provides functions for manipulating Unicode strings and +for manipulating C strings according to the Unicode standard. + +It consists of the following parts: + +@table @code +@item +elementary string functions +@item +conversion from/to legacy encodings +@item +formatted output to strings +@item +character names +@item +character classification and properties +@item +string width when using nonproportional fonts +@item +word breaks +@item +line breaking algorithm +@item +normalization (composition and decomposition) +@item +case folding +@item +regular expressions (not yet implemented) +@end table + +@cindex use cases +@cindex value, of libunistring +libunistring is for you if your application involves non-trivial text +processing, such as upper/lower case conversions, line breaking, operations +on words, or more advanced analysis of text. Text provided by the user can, +in general, contain characters of all kinds of scripts. The text processing +functions provided by this library handle all scripts and all languages. + +libunistring is for you if your application already uses the ISO C / POSIX +@code{}, @code{} functions and the text it operates on is +provided by the user and can be in any language. + +libunistring is also for you if your application uses Unicode strings as +internal in-memory representation. + +@menu +* Unicode:: What is Unicode? +* Unicode and i18n:: Unicode and internationalization +* Locale encodings:: What is a locale encoding? +* In-memory representation:: How to represent strings in memory? +* char * strings:: What to keep in mind with @code{char *} strings +* The wchar_t mess:: Why @code{wchar_t *} strings are useless +* Unicode strings:: How are Unicode strings represented? +@end menu + +@node Unicode +@section Unicode + +@cindex Unicode +Unicode is a standardized repertoire of characters that contains characters +from all scripts of the world, from Latin letters to Chinese ideographs +and Babylonian cuneiform glyphs. It also specifies how these characters +are to be rendered on a screen or on paper, and how common text processing +(word selection, line breaking, uppercasing of page titles etc.) is supposed +to behave on Unicode text. + +Unicode also specifies three ways of storing sequences of Unicode +characters in a computer whose basic unit of data is an 8-bit byte: +@cindex UTF-8 +@cindex UTF-16 +@cindex UTF-32 +@cindex UCS-4 +@table @asis +@item UTF-8 +Every character is represented as 1 to 4 bytes. +@item UTF-16 +Every character is represented as 1 to 2 units of 16 bits. +@item UTF-32, a.k.a@. UCS-4 +Every character is represented as 1 unit of 32 bits. +@end table + +For encoding Unicode text in a file, UTF-8 is usually used. For encoding +Unicode strings in memory for a program, either of the three encoding forms +can be reasonably used. + +Unicode is widely used on the web. Prior to the use of Unicode, web pages +were in many different encodings (ISO-8859-1 for English, French, Spanish, +ISO-8859-2 for Polish, ISO-8859-7 for Greek, KOI8-R for Russian, GB2312 or +BIG5 for Chinese, ISO-2022-JP-2 or EUC-JP or Shift_JIS for Japanese, and many +many others). It was next to impossible to create a document that contained +Chinese and Polish text in the same document. Due to the many encodings for +Japanese, even the processing of pure Japanese text was error prone. + +References: +@itemize @bullet +@item +The Unicode standard:@texnl{} @url{http://www.unicode.org/} +@item +Definition of UTF-8:@texnl{} @url{http://www.rfc-editor.org/rfc/rfc3629.txt} +@item +Definition of UTF-16:@texnl{} @url{http://www.rfc-editor.org/rfc/rfc2781.txt} +@item +Markus Kuhn's UTF-8 and Unicode FAQ:@texnl{} +@url{http://www.cl.cam.ac.uk/~mgk25/unicode.html} +@end itemize + +@node Unicode and i18n +@section Unicode and Internationalization + +@cindex internationalization +Internationalization is the process of changing the source code of a program +so that it can meet the expectations of users in any culture, if culture +specific data (translations, images etc.) are provided. + +Use of Unicode is not strictly required for internationalization, but it +makes internationalization much easier, because operations that need to +look at specific characters (like hyphenation, spell checking, or the +automatic conversion of double-quotes to opening and closing double-quote +characters) don't need to consider multiple possible encodings of the text. + +Use of Unicode also enables multilingualization: the ability of having text +in multiple languages present in the same document or even in the same line +of text. + +But use of Unicode is not everything. Internationalization usually consists +of three features: +@itemize @bullet +@item +Use of Unicode where needed for text processing. This is what this library +is for. +@item +Use of message catalogs for messages shown to the user, This is what +GNU gettext is about. +@item +Use of locale specific conventions for date and time formats, for numeric +formatting, or for sorting of text. This can be done adequately with the +POSIX APIs and the implementation of locales in the GNU C library. +@end itemize + +@node Locale encodings +@section Locale encodings + +@cindex locale +A locale is a set of cultural conventions. According to POSIX, for a program, +at any moment, there is one locale being designated as the ``current locale''. +(Actually, POSIX supports also one locale per thread, but this feature is not +yet universally implemented and not widely used.) +@cindex locale categories +The locale is partitioned into several aspects, called the ``categories'' +of the locale. The main various aspects are: +@itemize +@item +The character encoding and the character properties. This is the +@code{LC_CTYPE} category. +@item +The sorting rules for text. This is the @code{LC_COLLATE} category. +@item +The language specific translations of messages. This is the +@code{LC_MESSAGES} category. +@item +The formatting rules for numbers, such as the decimal separator. This is +the @code{LC_NUMERIC} category. +@item +The formatting rules for amounts of money. This is the @code{LC_MONETARY} +category. +@item +The formatting of date and time. This is the @code{LC_TIME} category. +@end itemize + +@cindex locale encoding +In particular, the @code{LC_CTYPE} category of the current locale determines +the character encoding. This is the encoding of @samp{char *} strings. +We also call it the ``locale encoding''. GNU libunistring has a function, +@func{locale_charset}, that returns a standardized (platform independent) +name for this encoding. + +All locale encodings used on glibc systems are essentially ASCII compatible: +Most graphic ASCII characters have the same representation, as a single byte, +in that encoding as in ASCII. + +Among the possible locale encodings are UTF-8 and GB18030. Both allow +to represent any Unicode character as a sequence of bytes. UTF-8 is used in +most of the world, whereas GB18030 is used in the People's Republic of China, +because it is backward compatible with the GB2312 encoding that was used in +this country earlier. + +The legacy locale encodings, ISO-8859-15 (which supplanted ISO-8859-1 in +most of Europe), ISO-8859-2, KOI8-R, EUC-JP, etc., are still in use in +many places, though. + +UTF-16 and UTF-32 are not used as locale encodings, because they are not +ASCII compatible. + +@node In-memory representation +@section Choice of in-memory representation of strings + +There are three ways of representing strings in memory of a running +program. +@itemize +@item +As @samp{char *} strings. Such strings are represented in locale encoding. +This approach is employed when not much text processing is done by the +program. When some Unicode aware processing is to be done, a string is +converted to Unicode on the fly and back to locale encoding afterwards. +@item +As UTF-8 or UTF-16 or UTF-32 strings. This implies that conversion from +locale encoding to Unicode is performed on input, and in the opposite +direction on output. This approach is employed when the program does +a significant amount of text processing, or when the program has multiple +threads operating on the same data but in different locales. +@item +As @samp{wchar_t *}, a.k.a@. ``wide strings''. This approach is misguided, +see @ref{The wchar_t mess}. +@end itemize + +@node char * strings +@section @samp{char *} strings + +@cindex C string functions +The classical C strings, with its C library support standardized by +ISO C and POSIX, can be used in internationalized programs with some +precautions. The problem with this API is that many of the C library +functions for strings don't work correctly on strings in locale +encodings, leading to bugs that only people in some cultures of the +world will experience. + +@cindex locale, multibyte +The first problem with the C library API is the support of multibyte +locales. According to the locale encoding, in general, every character +is represented by one or more bytes (up to 4 bytes in practice --- but +use @code{MB_LEN_MAX} instead of the number 4 in the code). +When every character is represented by only 1 byte, we speak of an +``unibyte locale'', otherwise of a ``multibyte locale''. It is important +to realize that the majority of Unix installations nowadays use UTF-8 +or GB18030 as locale encoding; therefore, the majority of users are +using multibyte locales. + +@cindex char, type +The important fact to remember is: +@cartouche +@emph{A @samp{char} is a byte, not a character.} +@end cartouche + +As a consequence: +@itemize +@item +The @code{} API is useless in this context; it does not work in +multibyte locales. +@item +The @posixfunc{strlen} function does not return the number of characters +in a string. Nor does it return the number of screen columns occupied +by a string after it is output. It merely returns the number of +@emph{bytes} occupied by a string. +@item +Truncating a string, for example, with @posixfunc{strncpy}, can have the +effect of truncating it in the middle of a multibyte character. Such +a string will, when output, have a garbled character at its end, often +represented by a hollow box. +@item +@posixfunc{strchr} and @posixfunc{strrchr} do not work with multibyte strings +if the locale encoding is GB18030 and the character to be searched is +a digit. +@item +@posixfunc{strstr} does not work with multibyte strings if the locale encoding +is different from UTF-8. +@item +@posixfunc{strcspn}, @posixfunc{strpbrk}, @posixfunc{strspn} cannot work +correctly in multibyte locales: they assume the second argument is a list of +single-byte characters. Even in this simple case, they do not work with +multibyte strings if the locale encoding is GB18030 and one of the +characters to be searched is a digit. +@item +@posixfunc{strsep} and @posixfunc{strtok_r} do not work with multibyte strings +unless all of the delimiter characters are ASCII characters < 0x30. +@item +The @posixfunc{strcasecmp}, @posixfunc{strncasecmp}, and @posixfunc{strcasestr} +functions do not work with multibyte strings. +@end itemize + +The workarounds can be found in GNU gnulib +@url{http://www.gnu.org/software/gnulib/}. +@itemize +@item +gnulib has modules @samp{mbchar}, @samp{mbiter}, @samp{mbuiter} that +represent multibyte characters and allow to iterate across a multibyte +string with the same ease as through a unibyte string. +@item +gnulib has functions @func{mbslen} and @func{mbswidth} that can be +used instead of @posixfunc{strlen} when the number of characters or the +number of screen columns of a string is requested. +@item +gnulib has functions @func{mbschr} and @func{mbsrrchr} that are +like @posixfunc{strchr} and @posixfunc{strrchr}, but work in multibyte locales. +@item +gnulib has a function @func{mbsstr}, like @posixfunc{strstr}, but works +in multibyte locales. +@item +gnulib has functions @func{mbscspn}, @func{mbspbrk}, @func{mbsspn} +that are like @posixfunc{strcspn}, @posixfunc{strpbrk}, @posixfunc{strspn}, but +work in multibyte locales. +@item +gnulib has functions @func{mbssep} and @func{mbstok_r} that are +like @posixfunc{strsep} and @posixfunc{strtok_r} but work in multibyte locales. +@item +gnulib has functions @func{mbscasecmp}, @func{mbsncasecmp}, +@func{mbspcasecmp}, and @func{mbscasestr} that are like @posixfunc{strcasecmp}, +@posixfunc{strncasecmp}, and @posixfunc{strcasestr}, but +work in multibyte locales. Still, the function @code{ulc_casecmp} is +preferable to these functions; see below. +@end itemize + +The second problem with the C library API is that it has some assumptions built-in that are not valid in some languages: +@itemize +@item +It assumes that there are only two forms of every character: uppercase +and lowercase. This is not true for Croatian, where the character +@sc{LETTER DZ WITH CARON} comes in three forms: +@sc{LATIN CAPITAL LETTER DZ WITH CARON} (DZ), +@sc{LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON} (Dz), +@sc{LATIN SMALL LETTER DZ WITH CARON} (dz). +@item +It assumes that uppercasing of 1 character leads to 1 character. This +is not true for German, where the @sc{LATIN SMALL LETTER SHARP S}, when +uppercased, becomes @samp{SS}. +@item +It assumes that there is 1:1 mapping between uppercase and lowercase forms. +This is not true for the Greek sigma: @sc{GREEK CAPITAL LETTER SIGMA} is +the uppercase of both @sc{GREEK SMALL LETTER SIGMA} and +@sc{GREEK SMALL LETTER FINAL SIGMA}. +@item +It assumes that the upper/lowercase mappings are position independent. +This is not true for the Greek sigma and the Lithuanian i. +@end itemize + +The correct way to deal with this problem is +@enumerate +@item +to provide functions for titlecasing, as well as for upper- and +lowercasing, +@item +to view case transformations as functions that operates on strings, +rather than on characters. +@end enumerate + +This is implemented in this library, through the functions declared in @code{}, see @ref{unicase.h}. + +@node The wchar_t mess +@section The @code{wchar_t} mess + +@cindex wchar_t, type +The ISO C and POSIX standard creators made an attempt to fix the first +problem mentioned in the previous section. They introduced +@itemize +@item +a type @samp{wchar_t}, designed to encapsulate an entire character, +@item +a ``wide string'' type @samp{wchar_t *}, and +@item +functions declared in @code{} that were meant to supplant the +ones in @code{}. +@end itemize + +Unfortunately, this API and its implementation has numerous problems: + +@itemize +@item +On AIX and Windows platforms, @code{wchar_t} is a 16-bit type. This +means that it can never accommodate an entire Unicode character. Either +the @code{wchar_t *} strings are limited to characters in UCS-2 (the +``Basic Multilingual Plane'' of Unicode), or --- if @code{wchar_t *} +strings are encoded in UTF-16 --- a @code{wchar_t} represents only half +of a character in the worst case, making the @code{} functions +pointless. + +@item +On Solaris and FreeBSD, the @code{wchar_t} encoding is locale dependent +and undocumented. This means, if you want to know any property of a +@code{wchar_t} character, other than the properties defined by +@code{} --- such as whether it's a dash, currency symbol, +paragraph separator, or similar ---, you have to convert it to +@code{char *} encoding first, by use of the function @posixfunc{wctomb}. + +@item +When you read a stream of wide characters, through the functions +@posixfunc{fgetwc} and @posixfunc{fgetws}, and when the input stream/file is +not in the expected encoding, you have no way to determine the invalid +byte sequence and do some corrective action. If you use these +functions, your program becomes ``garbage in - more garbage out'' or +``garbage in - abort''. +@end itemize + +As a consequence, it is better to use multibyte strings, as explained in +the previous section. Such multibyte strings can bypass limitations +of the @code{wchar_t} type, if you use functions defined in gnulib and +libunistring for text processing. They can also faithfully transport +malformed characters that were present in the input, without requiring +the program to produce garbage or abort. + +@node Unicode strings +@section Unicode strings + +libunistring supports Unicode strings in three representations: +@cindex UTF-8, strings +@cindex UTF-16, strings +@cindex UTF-32, strings +@itemize +@item +UTF-8 strings, through the type @samp{uint8_t *}. The units are bytes +(@code{uint8_t}). +@item +UTF-16 strings, through the type @samp{uint16_t *}, The units are 16-bit +memory words (@code{uint16_t}). +@item +UTF-32 strings, through the type @samp{uint32_t *}. The units are 32-bit +memory words (@code{uint32_t}). +@end itemize + +As with C strings, there are two variants: +@itemize +@item +Unicode strings with a terminating NUL character are represented as +a pointer to the first unit of the string. There is a unit containing +a 0 value at the end. It is considered part of the string for all +memory allocation purposes, but is not considered part of the string +for all other logical purposes. +@item +Unicode strings where embedded NUL characters are allowed. These +are represented by a pointer to the first unit and the number of units +(not bytes!) of the string. In this setting, there is no trailing +zero-valued unit used as ``end marker''. +@end itemize + +@node Conventions +@chapter Conventions + +This chapter explains conventions valid throughout the libunistring library. + +@cindex argument conventions +Variables of type @code{char *} denote C strings in locale encoding. +See @ref{Locale encodings}. + +Variables of type @code{uint8_t *} denote UTF-8 strings. Their units +are bytes. + +Variables of type @code{uint16_t *} denote UTF-16 strings, without byte +order mark. Their units are 2-byte words. + +Variables of type @code{uint32_t *} denote UTF-32 strings, without byte +order mark. Their units are 4-byte words. + +Argument pairs @code{(@var{s}, @var{n})} denote a string +@code{@var{s}[0..@var{n}-1]} with exactly @var{n} units. + +All functions with prefix @samp{ulc_} operate on C strings in locale +encoding. + +All functions with prefix @samp{u8_} operate on UTF-8 strings. + +All functions with prefix @samp{u16_} operate on UTF-16 strings. + +All functions with prefix @samp{u32_} operate on UTF-32 strings. + +For every function with prefix @samp{u8_}, operating on UTF-8 strings, +there is also a corresponding function with prefix @samp{u16_}, +operating on UTF-16 strings, and a corresponding function with prefix +@samp{u32_}, operating on UTF-32 strings. Their description is +analogous; in this documentation we describe only the function that +operates on UTF-8 strings, for brevity. + +A declaration with a variable @var{n} denotes the three concrete +declarations with @var{n} = 8, @var{n} = 16, @var{n} = 32. + +All parameters starting with @samp{str} and the parameters of +functions starting with @code{u8_str}/@code{u16_str}/@code{u32_str} +denote a NUL terminated string. + +@cindex return value conventions +Error values are always returned through the @code{errno} variable, +usually with a return value that indicates the presence of an error +(NULL for functions that return an pointer, or -1 for functions that +return an @code{int}). + +Functions returning a string result take a +@code{(@var{resultbuf}, @var{lengthp})} +argument pair. If @var{resultbuf} is not NULL and the result fits +into @code{*@var{lengthp}} units, it is put in @var{resultbuf}, and +@var{resultbuf} is returned. Otherwise, a freshly allocated string +is returned. In both cases, @code{*@var{lengthp}} is set to the +length (number of units) of the returned string. In case of error, +NULL is returned and @code{errno} is set. + +@include unitypes.texi +@include unistr.texi +@include uniconv.texi +@include unistdio.texi +@include uniname.texi +@include unictype.texi +@include uniwidth.texi +@include uniwbrk.texi +@include unilbrk.texi +@include uninorm.texi +@include unicase.texi +@include uniregex.texi + +@node Using the library +@chapter Using the library + +This chapter explains some practical considerations, regarding the +installation and compiler options that are needed in order to use this +library. + +@menu +* Installation:: +* Compiler options:: +* Include files:: +* Autoconf macro:: +* Reporting problems:: +@end menu + +@node Installation +@section Installation + +@cindex dependencies +Before you can use the library, it must be installed. First, you have to +make sure all dependencies are installed. They are listed in the file +@file{DEPENDENCIES}. + +@cindex installation +Then you can proceed to build and install the library, as described in the +file @file{INSTALL}. For installation on Windows systems, please refer to +the file @file{README.woe32}. + +@node Compiler options +@section Compiler options + +Let's denote as @code{LIBUNISTRING_PREFIX} the value of the @samp{--prefix} +option that you passed to @code{configure} while installing this package. +If you didn't pass any @samp{--prefix} option, then the package is installed +in @file{/usr/local}. + +Let's denote as @code{LIBUNISTRING_INCLUDEDIR} the directory where the +include files were installed. This is usually the same as +@code{$@{LIBUNISTRING_PREFIX@}/include}. Except that if you passed an +@samp{--includedir} option to @code{configure}, it is the value of that +option. + +Let's further denote as @code{LIBUNISTRING_LIBDIR} the directory where +the library itself was installed. This is the value that you passed +with the @samp{--libdir} option to @code{configure}, or otherwise the +same as @code{$@{LIBUNISTRING_PREFIX@}/lib}. Recall that when building +in 64-bit mode on a 64-bit GNU/Linux system that supports executables +in either 64-bit mode or 32-bit mode, you should have used the option +@code{--libdir=$@{LIBUNISTRING_PREFIX@}/lib64}. + +@cindex compiler options +So that the compiler finds the include files, you have to pass it the +option @code{-I$@{LIBUNISTRING_INCLUDEDIR@}}. + +So that the compiler finds the library during its linking pass, you have +to pass it the options @code{-L$@{LIBUNISTRING_LIBDIR@} -lunistring}. +On some systems, in some configurations, you also have to pass options +needed for linking with @code{libiconv}. The autoconf macro +@code{gl_LIBUNISTRING} (see @ref{Autoconf macro}) deals with this +particularity. + +@node Include files +@section Include files + +Most of the include files have been presented in the introduction, see +@ref{Introduction}, and subsequent detailed chapters. + +Another include file is @code{}. It contains the +version number of the libunistring library. + +@deftypevr Macro int _LIBUNISTRING_VERSION +This constant contains the version of libunistring that is being used +at compile time. It encodes the major and minor parts of the version +number only. These parts are encoded in the form @code{(major<<8) + minor}. +@end deftypevr + +@deftypevr Constant int _libunistring_version +This constant contains the version of libunistring that is being used +at run time. It encodes the major and minor parts of the version +number only. These parts are encoded in the form @code{(major<<8) + minor}. +@end deftypevr + +It is possible that @code{_libunistring_version} is greater than +@code{_LIBUNISTRING_VERSION}. This can happen when you use +@code{libunistring} as a shared library, and a newer, binary +backward-compatible version has been installed after your program +that uses @code{libunistring} was installed. + +@node Autoconf macro +@section Autoconf macro + +@cindex autoconf macro +GNU Gnulib provides an autoconf macro that tests for the availability +of @code{libunistring}. It is contained in the Gnulib module +@samp{libunistring}, see@texnl{} +@url{http://www.gnu.org/software/gnulib/MODULES.html#module=libunistring}. + +@amindex gl_LIBUNISTRING +The macro is called @code{gl_LIBUNISTRING}. It searches for an installed +libunistring. If found, it sets and AC_SUBSTs @code{HAVE_LIBUNISTRING=yes} +and the @code{LIBUNISTRING} and @code{LTLIBUNISTRING} variables and augments +the @code{CPPFLAGS} variable, and defines the C macro +@code{HAVE_LIBUNISTRING} to 1. Otherwise, it sets and AC_SUBSTs +@code{HAVE_LIBUNISTRING=no} and @code{LIBUNISTRING} and @code{LTLIBUNISTRING} +to empty. + +The complexities that @code{gl_LIBUNISTRING} deals with are the following: + +@itemize @bullet +@item +On some operating systems, in some configurations, libunistring depends +on @code{libiconv}, and the options for linking with libiconv must be +mentioned explicitly on the link command line. + +@item +GNU @code{libunistring}, if installed, is not necessarily already in the +search path (@code{CPPFLAGS} for the include file search path, +@code{LDFLAGS} for the library search path). + +@item +GNU @code{libunistring}, if installed, is not necessarily already in the +run time library search path. To avoid the need for setting an environment +variable like @code{LD_LIBRARY_PATH}, the macro adds the appropriate +run time search path options to the @code{LIBUNISTRING} variable. This works +on most systems. +@end itemize + +@node Reporting problems +@section Reporting problems + +@cindex bug reports +@cindex bug tracker +@cindex mailing list +If you encounter any problem, please don't hesitate to send a detailed +bug report to the @code{bug-libunistring@@gnu.org} mailing list. You can +alternatively also use the bug tracker at the project page +@url{https://savannah.gnu.org/projects/libunistring}. + +Please always include the version number of this library, and a short +description of your operating system and compilation environment with +corresponding version numbers. + +For problems that appear while building and installing @code{libunistring}, +for which you don't find the remedy in the @file{INSTALL} file, please include +a description of the options that you passed to the @samp{configure} script. + +@node More functionality +@chapter More advanced functionality + +@cindex bidirectional reordering +For bidirectional reordering of strings, we recommend the GNU FriBidi library: +@url{http://www.fribidi.org/}. + +@cindex rendering +For the rendering of Unicode strings outside of the context of a given toolkit +(KDE/Qt or GNOME/Gtk), we recommend the Pango library: +@url{http://www.pango.org/}. + +@node Licenses +@appendix Licenses +@cindex Licenses + +The files of this package are covered by the licenses indicated in each +particular file or directory. Here is a summary: + +@itemize @bullet +@item +The @code{libunistring} library is covered by the +GNU Lesser General Public License (LGPL). +A copy of the license is included in @ref{GNU LGPL}. + +@item +This manual is free documentation. It is dually licensed under the +GNU FDL and the GNU GPL. This means that you can redistribute this +manual under either of these two licenses, at your choice. +@* +This manual is covered by the GNU FDL. Permission is granted to copy, +distribute and/or modify this document under the terms of the +GNU Free Documentation License (FDL), either version 1.2 of the +License, or (at your option) any later version published by the +Free Software Foundation (FSF); with no Invariant Sections, with no +Front-Cover Text, and with no Back-Cover Texts. +A copy of the license is included in @ref{GNU FDL}. +@* +This manual is covered by the GNU GPL. You can redistribute it and/or +modify it under the terms of the GNU General Public License (GPL), either +version 3 of the License, or (at your option) any later version published +by the Free Software Foundation (FSF). +A copy of the license is included in @ref{GNU GPL}. +@end itemize + +@menu +* GNU GPL:: GNU General Public License +* GNU LGPL:: GNU Lesser General Public License +* GNU FDL:: GNU Free Documentation License +@end menu + +@page +@node GNU GPL +@appendixsec GNU GENERAL PUBLIC LICENSE +@cindex GPL, GNU General Public License +@cindex License, GNU GPL +@include gpl.texi +@page +@node GNU LGPL +@appendixsec GNU LESSER GENERAL PUBLIC LICENSE +@cindex LGPL, GNU Lesser General Public License +@cindex License, GNU LGPL +@include lgpl.texi +@page +@node GNU FDL +@appendixsec GNU Free Documentation License +@cindex FDL, GNU Free Documentation License +@cindex License, GNU FDL +@include fdl.texi + +@node Index +@unnumbered Index + +@printindex cp + +@bye + +@c Local Variables: +@c indent-tabs-mode: nil +@c whitespace-check-buffer-indent: nil +@c End: diff --git a/doc/libunistring_1.html b/doc/libunistring_1.html new file mode 100644 index 00000000..646fdc65 --- /dev/null +++ b/doc/libunistring_1.html @@ -0,0 +1,531 @@ + + + + + +GNU libunistring: 1. Introduction + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    +
    + +

    1. Introduction

    + +

    This library provides functions for manipulating Unicode strings and +for manipulating C strings according to the Unicode standard. +

    +

    It consists of the following parts: +

    +
    +
    <unistr.h>
    +

    elementary string functions +

    +
    <uniconv.h>
    +

    conversion from/to legacy encodings +

    +
    <unistdio.h>
    +

    formatted output to strings +

    +
    <uniname.h>
    +

    character names +

    +
    <unictype.h>
    +

    character classification and properties +

    +
    <uniwidth.h>
    +

    string width when using nonproportional fonts +

    +
    <uniwbrk.h>
    +

    word breaks +

    +
    <unilbrk.h>
    +

    line breaking algorithm +

    +
    <uninorm.h>
    +

    normalization (composition and decomposition) +

    +
    <unicase.h>
    +

    case folding +

    +
    <uniregex.h>
    +

    regular expressions (not yet implemented) +

    +
    + + + +

    libunistring is for you if your application involves non-trivial text +processing, such as upper/lower case conversions, line breaking, operations +on words, or more advanced analysis of text. Text provided by the user can, +in general, contain characters of all kinds of scripts. The text processing +functions provided by this library handle all scripts and all languages. +

    +

    libunistring is for you if your application already uses the ISO C / POSIX +<ctype.h>, <wctype.h> functions and the text it operates on is +provided by the user and can be in any language. +

    +

    libunistring is also for you if your application uses Unicode strings as +internal in-memory representation. +

    + +
    + + +

    1.1 Unicode

    + +

    Unicode is a standardized repertoire of characters that contains characters +from all scripts of the world, from Latin letters to Chinese ideographs +and Babylonian cuneiform glyphs. It also specifies how these characters +are to be rendered on a screen or on paper, and how common text processing +(word selection, line breaking, uppercasing of page titles etc.) is supposed +to behave on Unicode text. +

    +

    Unicode also specifies three ways of storing sequences of Unicode +characters in a computer whose basic unit of data is an 8-bit byte: + + + + +

    +
    UTF-8
    +

    Every character is represented as 1 to 4 bytes. +

    +
    UTF-16
    +

    Every character is represented as 1 to 2 units of 16 bits. +

    +
    UTF-32, a.k.a. UCS-4
    +

    Every character is represented as 1 unit of 32 bits. +

    +
    + +

    For encoding Unicode text in a file, UTF-8 is usually used. For encoding +Unicode strings in memory for a program, either of the three encoding forms +can be reasonably used. +

    +

    Unicode is widely used on the web. Prior to the use of Unicode, web pages +were in many different encodings (ISO-8859-1 for English, French, Spanish, +ISO-8859-2 for Polish, ISO-8859-7 for Greek, KOI8-R for Russian, GB2312 or +BIG5 for Chinese, ISO-2022-JP-2 or EUC-JP or Shift_JIS for Japanese, and many +many others). It was next to impossible to create a document that contained +Chinese and Polish text in the same document. Due to the many encodings for +Japanese, even the processing of pure Japanese text was error prone. +

    +

    References: +

    + +
    + + +

    1.2 Unicode and Internationalization

    + +

    Internationalization is the process of changing the source code of a program +so that it can meet the expectations of users in any culture, if culture +specific data (translations, images etc.) are provided. +

    +

    Use of Unicode is not strictly required for internationalization, but it +makes internationalization much easier, because operations that need to +look at specific characters (like hyphenation, spell checking, or the +automatic conversion of double-quotes to opening and closing double-quote +characters) don't need to consider multiple possible encodings of the text. +

    +

    Use of Unicode also enables multilingualization: the ability of having text +in multiple languages present in the same document or even in the same line +of text. +

    +

    But use of Unicode is not everything. Internationalization usually consists +of three features: +

      +
    • +Use of Unicode where needed for text processing. This is what this library +is for. +
    • +Use of message catalogs for messages shown to the user, This is what +GNU gettext is about. +
    • +Use of locale specific conventions for date and time formats, for numeric +formatting, or for sorting of text. This can be done adequately with the +POSIX APIs and the implementation of locales in the GNU C library. +
    + +
    + + +

    1.3 Locale encodings

    + +

    A locale is a set of cultural conventions. According to POSIX, for a program, +at any moment, there is one locale being designated as the “current locale”. +(Actually, POSIX supports also one locale per thread, but this feature is not +yet universally implemented and not widely used.) + +The locale is partitioned into several aspects, called the “categories” +of the locale. The main various aspects are: +

      +
    • +The character encoding and the character properties. This is the +LC_CTYPE category. +
    • +The sorting rules for text. This is the LC_COLLATE category. +
    • +The language specific translations of messages. This is the +LC_MESSAGES category. +
    • +The formatting rules for numbers, such as the decimal separator. This is +the LC_NUMERIC category. +
    • +The formatting rules for amounts of money. This is the LC_MONETARY +category. +
    • +The formatting of date and time. This is the LC_TIME category. +
    + + +

    In particular, the LC_CTYPE category of the current locale determines +the character encoding. This is the encoding of ‘char *’ strings. +We also call it the “locale encoding”. GNU libunistring has a function, +locale_charset, that returns a standardized (platform independent) +name for this encoding. +

    +

    All locale encodings used on glibc systems are essentially ASCII compatible: +Most graphic ASCII characters have the same representation, as a single byte, +in that encoding as in ASCII. +

    +

    Among the possible locale encodings are UTF-8 and GB18030. Both allow +to represent any Unicode character as a sequence of bytes. UTF-8 is used in +most of the world, whereas GB18030 is used in the People's Republic of China, +because it is backward compatible with the GB2312 encoding that was used in +this country earlier. +

    +

    The legacy locale encodings, ISO-8859-15 (which supplanted ISO-8859-1 in +most of Europe), ISO-8859-2, KOI8-R, EUC-JP, etc., are still in use in +many places, though. +

    +

    UTF-16 and UTF-32 are not used as locale encodings, because they are not +ASCII compatible. +

    +
    + + +

    1.4 Choice of in-memory representation of strings

    + +

    There are three ways of representing strings in memory of a running +program. +

      +
    • +As ‘char *’ strings. Such strings are represented in locale encoding. +This approach is employed when not much text processing is done by the +program. When some Unicode aware processing is to be done, a string is +converted to Unicode on the fly and back to locale encoding afterwards. +
    • +As UTF-8 or UTF-16 or UTF-32 strings. This implies that conversion from +locale encoding to Unicode is performed on input, and in the opposite +direction on output. This approach is employed when the program does +a significant amount of text processing, or when the program has multiple +threads operating on the same data but in different locales. +
    • +As ‘wchar_t *’, a.k.a. “wide strings”. This approach is misguided, +see The wchar_t mess. +
    + +
    + + +

    1.5 ‘char *’ strings

    + +

    The classical C strings, with its C library support standardized by +ISO C and POSIX, can be used in internationalized programs with some +precautions. The problem with this API is that many of the C library +functions for strings don't work correctly on strings in locale +encodings, leading to bugs that only people in some cultures of the +world will experience. +

    + +

    The first problem with the C library API is the support of multibyte +locales. According to the locale encoding, in general, every character +is represented by one or more bytes (up to 4 bytes in practice — but +use MB_LEN_MAX instead of the number 4 in the code). +When every character is represented by only 1 byte, we speak of an +“unibyte locale”, otherwise of a “multibyte locale”. It is important +to realize that the majority of Unix installations nowadays use UTF-8 +or GB18030 as locale encoding; therefore, the majority of users are +using multibyte locales. +

    + +

    The important fact to remember is: +

    +

    A ‘char’ is a byte, not a character. +

    + +

    As a consequence: +

      +
    • +The <ctype.h> API is useless in this context; it does not work in +multibyte locales. +
    • +The strlen function does not return the number of characters +in a string. Nor does it return the number of screen columns occupied +by a string after it is output. It merely returns the number of +bytes occupied by a string. +
    • +Truncating a string, for example, with strncpy, can have the +effect of truncating it in the middle of a multibyte character. Such +a string will, when output, have a garbled character at its end, often +represented by a hollow box. +
    • +strchr and strrchr do not work with multibyte strings +if the locale encoding is GB18030 and the character to be searched is +a digit. +
    • +strstr does not work with multibyte strings if the locale encoding +is different from UTF-8. +
    • +strcspn, strpbrk, strspn cannot work +correctly in multibyte locales: they assume the second argument is a list of +single-byte characters. Even in this simple case, they do not work with +multibyte strings if the locale encoding is GB18030 and one of the +characters to be searched is a digit. +
    • +strsep and strtok_r do not work with multibyte strings +unless all of the delimiter characters are ASCII characters < 0x30. +
    • +The strcasecmp, strncasecmp, and strcasestr +functions do not work with multibyte strings. +
    + +

    The workarounds can be found in GNU gnulib +http://www.gnu.org/software/gnulib/. +

      +
    • +gnulib has modules ‘mbchar’, ‘mbiter’, ‘mbuiter’ that +represent multibyte characters and allow to iterate across a multibyte +string with the same ease as through a unibyte string. +
    • +gnulib has functions mbslen and mbswidth that can be +used instead of strlen when the number of characters or the +number of screen columns of a string is requested. +
    • +gnulib has functions mbschr and mbsrrchr that are +like strchr and strrchr, but work in multibyte locales. +
    • +gnulib has a function mbsstr, like strstr, but works +in multibyte locales. +
    • +gnulib has functions mbscspn, mbspbrk, mbsspn +that are like strcspn, strpbrk, strspn, but +work in multibyte locales. +
    • +gnulib has functions mbssep and mbstok_r that are +like strsep and strtok_r but work in multibyte locales. +
    • +gnulib has functions mbscasecmp, mbsncasecmp, +mbspcasecmp, and mbscasestr that are like strcasecmp, +strncasecmp, and strcasestr, but +work in multibyte locales. Still, the function ulc_casecmp is +preferable to these functions; see below. +
    + +

    The second problem with the C library API is that it has some assumptions built-in that are not valid in some languages: +

      +
    • +It assumes that there are only two forms of every character: uppercase +and lowercase. This is not true for Croatian, where the character +LETTER DZ WITH CARON comes in three forms: +LATIN CAPITAL LETTER DZ WITH CARON (DZ), +LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON (Dz), +LATIN SMALL LETTER DZ WITH CARON (dz). +
    • +It assumes that uppercasing of 1 character leads to 1 character. This +is not true for German, where the LATIN SMALL LETTER SHARP S, when +uppercased, becomes ‘SS’. +
    • +It assumes that there is 1:1 mapping between uppercase and lowercase forms. +This is not true for the Greek sigma: GREEK CAPITAL LETTER SIGMA is +the uppercase of both GREEK SMALL LETTER SIGMA and +GREEK SMALL LETTER FINAL SIGMA. +
    • +It assumes that the upper/lowercase mappings are position independent. +This is not true for the Greek sigma and the Lithuanian i. +
    + +

    The correct way to deal with this problem is +

      +
    1. +to provide functions for titlecasing, as well as for upper- and +lowercasing, +
    2. +to view case transformations as functions that operates on strings, +rather than on characters. +
    + +

    This is implemented in this library, through the functions declared in <unicase.h>, see Case mappings <unicase.h>. +

    +
    + + +

    1.6 The wchar_t mess

    + +

    The ISO C and POSIX standard creators made an attempt to fix the first +problem mentioned in the previous section. They introduced +

      +
    • +a type ‘wchar_t’, designed to encapsulate an entire character, +
    • +a “wide string” type ‘wchar_t *’, and +
    • +functions declared in <wctype.h> that were meant to supplant the +ones in <ctype.h>. +
    + +

    Unfortunately, this API and its implementation has numerous problems: +

    +
      +
    • +On AIX and Windows platforms, wchar_t is a 16-bit type. This +means that it can never accommodate an entire Unicode character. Either +the wchar_t * strings are limited to characters in UCS-2 (the +“Basic Multilingual Plane” of Unicode), or — if wchar_t * +strings are encoded in UTF-16 — a wchar_t represents only half +of a character in the worst case, making the <wctype.h> functions +pointless. + +
    • +On Solaris and FreeBSD, the wchar_t encoding is locale dependent +and undocumented. This means, if you want to know any property of a +wchar_t character, other than the properties defined by +<wctype.h> — such as whether it's a dash, currency symbol, +paragraph separator, or similar —, you have to convert it to +char * encoding first, by use of the function wctomb. + +
    • +When you read a stream of wide characters, through the functions +fgetwc and fgetws, and when the input stream/file is +not in the expected encoding, you have no way to determine the invalid +byte sequence and do some corrective action. If you use these +functions, your program becomes “garbage in - more garbage out” or +“garbage in - abort”. +
    + +

    As a consequence, it is better to use multibyte strings, as explained in +the previous section. Such multibyte strings can bypass limitations +of the wchar_t type, if you use functions defined in gnulib and +libunistring for text processing. They can also faithfully transport +malformed characters that were present in the input, without requiring +the program to produce garbage or abort. +

    +
    + + +

    1.7 Unicode strings

    + +

    libunistring supports Unicode strings in three representations: + + + +

      +
    • +UTF-8 strings, through the type ‘uint8_t *’. The units are bytes +(uint8_t). +
    • +UTF-16 strings, through the type ‘uint16_t *’, The units are 16-bit +memory words (uint16_t). +
    • +UTF-32 strings, through the type ‘uint32_t *’. The units are 32-bit +memory words (uint32_t). +
    + +

    As with C strings, there are two variants: +

      +
    • +Unicode strings with a terminating NUL character are represented as +a pointer to the first unit of the string. There is a unit containing +a 0 value at the end. It is considered part of the string for all +memory allocation purposes, but is not considered part of the string +for all other logical purposes. +
    • +Unicode strings where embedded NUL characters are allowed. These +are represented by a pointer to the first unit and the number of units +(not bytes!) of the string. In this setting, there is no trailing +zero-valued unit used as “end marker”. +
    + +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_10.html b/doc/libunistring_10.html new file mode 100644 index 00000000..bf22ca1b --- /dev/null +++ b/doc/libunistring_10.html @@ -0,0 +1,192 @@ + + + + + +GNU libunistring: 10. Word breaks in strings <uniwbrk.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    10. Word breaks in strings <uniwbrk.h>

    + +

    This include file declares functions for determining where in a string +“words” start and end. Here “words” are not necessarily the same as +entities that can be looked up in dictionaries, but rather groups of +consecutive characters that should not be split by text processing +operations. +

    + +
    + + +

    10.1 Word breaks in a string

    + +

    The following functions determine the word breaks in a string. +

    +
    +
    Function: void u8_wordbreaks (const uint8_t *s, size_t n, char *p) + +
    +
    Function: void u16_wordbreaks (const uint16_t *s, size_t n, char *p) + +
    +
    Function: void u32_wordbreaks (const uint32_t *s, size_t n, char *p) + +
    +
    Function: void ulc_wordbreaks (const char *s, size_t n, char *p) + +
    +

    Determines the word break points in s, an array of n units, and +stores the result at p[0..n-1]. +

    +
    p[i] = 1
    +

    means that there is a word boundary between s[i-1] and +s[i]. +

    +
    p[i] = 0
    +

    means that s[i-1] and s[i] must not be separated. +

    +
    +

    p[0] is always set to 0. If an application wants to consider a +word break to be present at the beginning of the string (before +s[0]) or at the end of the string (after +s[0..n-1]), it has to treat these cases explicitly. +

    + +
    + + +

    10.2 Word break property

    + +

    This is a more low-level API. The word break property is a property defined +in Unicode Standard Annex #29, section “Word Boundaries”, see +http://www.unicode.org/reports/tr29/#Word_Boundaries. It is +used for determining the word breaks in a string. +

    +

    The following are the possible values of the word break property. More values +may be added in the future. +

    +
    +
    Constant: int WBP_OTHER + +
    +
    Constant: int WBP_CR + +
    +
    Constant: int WBP_LF + +
    +
    Constant: int WBP_NEWLINE + +
    +
    Constant: int WBP_EXTEND + +
    +
    Constant: int WBP_FORMAT + +
    +
    Constant: int WBP_KATAKANA + +
    +
    Constant: int WBP_ALETTER + +
    +
    Constant: int WBP_MIDNUMLET + +
    +
    Constant: int WBP_MIDLETTER + +
    +
    Constant: int WBP_MIDNUM + +
    +
    Constant: int WBP_NUMERIC + +
    +
    Constant: int WBP_EXTENDNUMLET + +
    +
    + +

    The following function looks up the word break property of a character. +

    +
    +
    Function: int uc_wordbreak_property (ucs4_t uc) + +
    +

    Returns the Word_Break property of a Unicode character. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_11.html b/doc/libunistring_11.html new file mode 100644 index 00000000..b0016788 --- /dev/null +++ b/doc/libunistring_11.html @@ -0,0 +1,200 @@ + + + + + +GNU libunistring: 11. Line breaking <unilbrk.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    11. Line breaking <unilbrk.h>

    + +

    This include file declares functions for determining where in a string +line breaks could or should be introduced, in order to make the displayed +string fit into a column of given width. +

    +

    These functions are locale dependent. The encoding argument identifies +the encoding (e.g. "ISO-8859-2" for Polish). +

    +

    The following enumerated values indicate whether, at a given position, a line +break is possible or not. Given an string s as an array +s[0..n-1] and a position i, the values have the +following meanings: +

    +
    +
    Constant: int UC_BREAK_MANDATORY + +
    +

    This value indicates that s[i] is a line break character. +

    + +
    +
    Constant: int UC_BREAK_POSSIBLE + +
    +

    This value indicates that a line break may be inserted between +s[i-1] and s[i]. +

    + +
    +
    Constant: int UC_BREAK_HYPHENATION + +
    +

    This value indicates that a hyphen and a line break may be inserted between +s[i-1] and s[i]. But beware of language +dependent hyphenation rules. +

    + +
    +
    Constant: int UC_BREAK_PROHIBITED + +
    +

    This value indicates that s[i-1] and s[i] +must not be separated. +

    + +
    +
    Constant: int UC_BREAK_UNDEFINED + +
    +

    This value is not used as a return value; rather, in the overriding argument of +the u*_width_linebreaks functions, it indicates the absence of an +override. +

    + +

    The following functions determine the positions at which line breaks are +possible. +

    +
    +
    Function: void u8_possible_linebreaks (const uint8_t *s, size_t n, const char *encoding, char *p) + +
    +
    Function: void u16_possible_linebreaks (const uint16_t *s, size_t n, const char *encoding, char *p) + +
    +
    Function: void u32_possible_linebreaks (const uint32_t *s, size_t n, const char *encoding, char *p) + +
    +
    Function: void ulc_possible_linebreaks (const char *s, size_t n, const char *encoding, char *p) + +
    +

    Determines the line break points in s, and stores the result at +p[0..n-1]. Every p[i] is assigned one of +the values UC_BREAK_MANDATORY, UC_BREAK_POSSIBLE, +UC_BREAK_HYPHENATION, UC_BREAK_PROHIBITED. +

    + +

    The following functions determine where line breaks should be inserted so that +each line fits in a given width, when output to a device that uses +non-proportional fonts. +

    +
    +
    Function: int u8_width_linebreaks (const uint8_t *s, size_t n, int width, int start_column, int at_end_columns, const char *override, const char *encoding, char *p) + +
    +
    Function: int u16_width_linebreaks (const uint16_t *s, size_t n, int width, int start_column, int at_end_columns, const char *override, const char *encoding, char *p) + +
    +
    Function: int u32_width_linebreaks (const uint32_t *s, size_t n, int width, int start_column, int at_end_columns, const char *override, const char *encoding, char *p) + +
    +
    Function: int ulc_width_linebreaks (const char *s, size_t n, int width, int start_column, int at_end_columns, const char *override, const char *encoding, char *p) + +
    +

    Chooses the best line breaks, assuming that every character occupies a width +given by the uc_width function (see Display width <uniwidth.h>). +

    +

    The string is s[0..n-1]. +

    +

    The maximum number of columns per line is given as width. +The starting column of the string is given as start_column. +If the algorithm shall keep room after the last piece, this amount of room can +be given as at_end_columns. +

    +

    override is an optional override; if +override[i] != UC_BREAK_UNDEFINED, +override[i] takes precedence over p[i] +as returned by the u*_possible_linebreaks function. +

    +

    The given encoding is used for disambiguating widths in uc_width. +

    +

    Returns the column after the end of the string, and stores the result at +p[0..n-1]. Every p[i] is assigned one of +the values UC_BREAK_MANDATORY, UC_BREAK_POSSIBLE, +UC_BREAK_HYPHENATION, UC_BREAK_PROHIBITED. Here the value +UC_BREAK_POSSIBLE indicates that a line break should be inserted. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_12.html b/doc/libunistring_12.html new file mode 100644 index 00000000..0bf1e933 --- /dev/null +++ b/doc/libunistring_12.html @@ -0,0 +1,507 @@ + + + + + +GNU libunistring: 12. Normalization forms (composition and decomposition) <uninorm.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    12. Normalization forms (composition and decomposition) <uninorm.h>

    + +

    This include file defines functions for transforming Unicode strings to one +of the four normal forms, known as NFC, NFD, NKFC, NFKD. These +transformations involve decomposition and — for NFC and NFKC — composition +of Unicode characters. +

    + +
    + + +

    12.1 Decomposition of Unicode characters

    + +

    The following enumerated values are the possible types of decomposition of a +Unicode character. +

    +
    +
    Constant: int UC_DECOMP_CANONICAL + +
    +

    Denotes canonical decomposition. +

    + +
    +
    Constant: int UC_DECOMP_FONT + +
    +

    UCD marker: <font>. Denotes a font variant (e.g. a blackletter form). +

    + +
    +
    Constant: int UC_DECOMP_NOBREAK + +
    +

    UCD marker: <noBreak>. +Denotes a no-break version of a space or hyphen. +

    + +
    +
    Constant: int UC_DECOMP_INITIAL + +
    +

    UCD marker: <initial>. +Denotes an initial presentation form (Arabic). +

    + +
    +
    Constant: int UC_DECOMP_MEDIAL + +
    +

    UCD marker: <medial>. +Denotes a medial presentation form (Arabic). +

    + +
    +
    Constant: int UC_DECOMP_FINAL + +
    +

    UCD marker: <final>. +Denotes a final presentation form (Arabic). +

    + +
    +
    Constant: int UC_DECOMP_ISOLATED + +
    +

    UCD marker: <isolated>. +Denotes an isolated presentation form (Arabic). +

    + +
    +
    Constant: int UC_DECOMP_CIRCLE + +
    +

    UCD marker: <circle>. +Denotes an encircled form. +

    + +
    +
    Constant: int UC_DECOMP_SUPER + +
    +

    UCD marker: <super>. +Denotes a superscript form. +

    + +
    +
    Constant: int UC_DECOMP_SUB + +
    +

    UCD marker: <sub>. +Denotes a subscript form. +

    + +
    +
    Constant: int UC_DECOMP_VERTICAL + +
    +

    UCD marker: <vertical>. +Denotes a vertical layout presentation form. +

    + +
    +
    Constant: int UC_DECOMP_WIDE + +
    +

    UCD marker: <wide>. +Denotes a wide (or zenkaku) compatibility character. +

    + +
    +
    Constant: int UC_DECOMP_NARROW + +
    +

    UCD marker: <narrow>. +Denotes a narrow (or hankaku) compatibility character. +

    + +
    +
    Constant: int UC_DECOMP_SMALL + +
    +

    UCD marker: <small>. +Denotes a small variant form (CNS compatibility). +

    + +
    +
    Constant: int UC_DECOMP_SQUARE + +
    +

    UCD marker: <square>. +Denotes a CJK squared font variant. +

    + +
    +
    Constant: int UC_DECOMP_FRACTION + +
    +

    UCD marker: <fraction>. +Denotes a vulgar fraction form. +

    + +
    +
    Constant: int UC_DECOMP_COMPAT + +
    +

    UCD marker: <compat>. +Denotes an otherwise unspecified compatibility character. +

    + +

    The following constant denotes the maximum size of decomposition of a single +Unicode character. +

    +
    +
    Macro: unsigned int UC_DECOMPOSITION_MAX_LENGTH + +
    +

    This macro expands to a constant that is the required size of buffer passed to +the uc_decomposition and uc_canonical_decomposition functions. +

    + +

    The following functions decompose a Unicode character. +

    +
    +
    Function: int uc_decomposition (ucs4_t uc, int *decomp_tag, ucs4_t *decomposition) + +
    +

    Returns the character decomposition mapping of the Unicode character uc. +decomposition must point to an array of at least +UC_DECOMPOSITION_MAX_LENGTH ucs_t elements. +

    +

    When a decomposition exists, decomposition[0..n-1] and +*decomp_tag are filled and n is returned. Otherwise -1 is +returned. +

    + +
    +
    Function: int uc_canonical_decomposition (ucs4_t uc, ucs4_t *decomposition) + +
    +

    Returns the canonical character decomposition mapping of the Unicode character +uc. decomposition must point to an array of at least +UC_DECOMPOSITION_MAX_LENGTH ucs_t elements. +

    +

    When a decomposition exists, decomposition[0..n-1] is filled +and n is returned. Otherwise -1 is returned. +

    + +
    + + +

    12.2 Composition of Unicode characters

    + +

    The following function composes a Unicode character from two Unicode +characters. +

    +
    +
    Function: ucs4_t uc_composition (ucs4_t uc1, ucs4_t uc2) + +
    +

    Attempts to combine the Unicode characters uc1, uc2. +uc1 is known to have canonical combining class 0. +

    +

    Returns the combination of uc1 and uc2, if it exists. +Returns 0 otherwise. +

    +

    Not all decompositions can be recombined using this function. See the Unicode +file ‘CompositionExclusions.txt’ for details. +

    + +
    + + +

    12.3 Normalization of strings

    + +

    The Unicode standard defines four normalization forms for Unicode strings. +The following type is used to denote a normalization form. +

    +
    +
    Type: uninorm_t + +
    +

    An object of type uninorm_t denotes a Unicode normalization form. +This is a scalar type; its values can be compared with ==. +

    + +

    The following constants denote the four normalization forms. +

    +
    +
    Macro: uninorm_t UNINORM_NFD + +
    +

    Denotes Normalization form D: canonical decomposition. +

    + +
    +
    Macro: uninorm_t UNINORM_NFC + +
    +

    Normalization form C: canonical decomposition, then canonical composition. +

    + +
    +
    Macro: uninorm_t UNINORM_NFKD + +
    +

    Normalization form KD: compatibility decomposition. +

    + +
    +
    Macro: uninorm_t UNINORM_NFKC + +
    +

    Normalization form KC: compatibility decomposition, then canonical composition. +

    + +

    The following functions operate on uninorm_t objects. +

    +
    +
    Function: bool uninorm_is_compat_decomposing (uninorm_t nf) + +
    +

    Tests whether the normalization form nf does compatibility decomposition. +

    + +
    +
    Function: bool uninorm_is_composing (uninorm_t nf) + +
    +

    Tests whether the normalization form nf includes canonical composition. +

    + +
    +
    Function: uninorm_t uninorm_decomposing_form (uninorm_t nf) + +
    +

    Returns the decomposing variant of the normalization form nf. +This maps NFC,NFD → NFD and NFKC,NFKD → NFKD. +

    + +

    The following functions apply a Unicode normalization form to a Unicode string. +

    +
    +
    Function: uint8_t * u8_normalize (uninorm_t nf, const uint8_t *s, size_t n, uint8_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint16_t * u16_normalize (uninorm_t nf, const uint16_t *s, size_t n, uint16_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint32_t * u32_normalize (uninorm_t nf, const uint32_t *s, size_t n, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Returns the specified normalization form of a string. +

    + +
    + + +

    12.4 Normalizing comparisons

    + +

    The following functions compare Unicode string, ignoring differences in +normalization. +

    +
    +
    Function: int u8_normcmp (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, uninorm_t nf, int *resultp) + +
    +
    Function: int u16_normcmp (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, uninorm_t nf, int *resultp) + +
    +
    Function: int u32_normcmp (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, uninorm_t nf, int *resultp) + +
    +

    Compares s1 and s2, ignoring differences in normalization. +

    +

    nf must be either UNINORM_NFD or UNINORM_NFKD. +

    +

    If successful, sets *resultp to -1 if s1 < s2, +0 if s1 = s2, 1 if s1 > s2, and returns 0. +Upon failure, returns -1 with errno set. +

    + + + +
    +
    Function: char * u8_normxfrm (const uint8_t *s, size_t n, uninorm_t nf, char *resultbuf, size_t *lengthp) + +
    +
    Function: char * u16_normxfrm (const uint16_t *s, size_t n, uninorm_t nf, char *resultbuf, size_t *lengthp) + +
    +
    Function: char * u32_normxfrm (const uint32_t *s, size_t n, uninorm_t nf, char *resultbuf, size_t *lengthp) + +
    +

    Converts the string s of length n to a NUL-terminated byte +sequence, in such a way that comparing u8_normxfrm (s1) and +u8_normxfrm (s2) with the u8_cmp2 function is equivalent to +comparing s1 and s2 with the u8_normcoll function. +

    +

    nf must be either UNINORM_NFC or UNINORM_NFKC. +

    + +
    +
    Function: int u8_normcoll (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, uninorm_t nf, int *resultp) + +
    +
    Function: int u16_normcoll (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, uninorm_t nf, int *resultp) + +
    +
    Function: int u32_normcoll (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, uninorm_t nf, int *resultp) + +
    +

    Compares s1 and s2, ignoring differences in normalization, using +the collation rules of the current locale. +

    +

    nf must be either UNINORM_NFC or UNINORM_NFKC. +

    +

    If successful, sets *resultp to -1 if s1 < s2, +0 if s1 = s2, 1 if s1 > s2, and returns 0. +Upon failure, returns -1 with errno set. +

    + +
    + + +

    12.5 Normalization of streams of Unicode characters

    + +

    A “stream of Unicode characters” is essentially a function that accepts an +ucs4_t argument repeatedly, optionally combined with a function that +“flushes” the stream. +

    +
    +
    Type: struct uninorm_filter + +
    +

    This is the data type of a stream of Unicode characters that normalizes its +input according to a given normalization form and passes the normalized +character sequence to the encapsulated stream of Unicode characters. +

    + +
    +
    Function: struct uninorm_filter * uninorm_filter_create (uninorm_t nf, int (*stream_func) (void *stream_data, ucs4_t uc), void *stream_data) + +
    +

    Creates and returns a normalization filter for Unicode characters. +

    +

    The pair (stream_func, stream_data) is the encapsulated stream. +stream_func (stream_data, uc) receives the Unicode +character uc and returns 0 if successful, or -1 with errno set +upon failure. +

    +

    Returns the new filter, or NULL with errno set upon failure. +

    + +
    +
    Function: int uninorm_filter_write (struct uninorm_filter *filter, ucs4_t uc) + +
    +

    Stuffs a Unicode character into a normalizing filter. +Returns 0 if successful, or -1 with errno set upon failure. +

    + +
    +
    Function: int uninorm_filter_flush (struct uninorm_filter *filter) + +
    +

    Brings data buffered in the filter to its destination, the encapsulated stream. +

    +

    Returns 0 if successful, or -1 with errno set upon failure. +

    +

    Note! If after calling this function, additional characters are written +into the filter, the resulting character sequence in the encapsulated stream +will not necessarily be normalized. +

    + +
    +
    Function: int uninorm_filter_free (struct uninorm_filter *filter) + +
    +

    Brings data buffered in the filter to its destination, the encapsulated stream, +then closes and frees the filter. +

    +

    Returns 0 if successful, or -1 with errno set upon failure. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_13.html b/doc/libunistring_13.html new file mode 100644 index 00000000..1597ec11 --- /dev/null +++ b/doc/libunistring_13.html @@ -0,0 +1,611 @@ + + + + + +GNU libunistring: 13. Case mappings <unicase.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    13. Case mappings <unicase.h>

    + +

    This include file defines functions for case mapping for Unicode strings and +case insensitive comparison of Unicode strings and C strings. +

    +

    These string functions fix the problems that were mentioned in +char *’ strings, namely, they handle the Croatian +LETTER DZ WITH CARON, the German LATIN SMALL LETTER SHARP S, the +Greek sigma and the Lithuanian i correctly. +

    + +
    + + +

    13.1 Case mappings of characters

    + +

    The following functions implement case mappings on Unicode characters — +for those cases only where the result of the mapping is a again a single +Unicode character. +

    +

    These mappings are locale and context independent. +

    +
    +

    WARNING! These functions are not sufficient for languages such as +German, Greek and Lithuanian. Better use the functions below that treat an +entire string at once and are language aware. +

    + +
    +
    Function: ucs4_t uc_toupper (ucs4_t uc) + +
    +

    Returns the uppercase mapping of the Unicode character uc. +

    + +
    +
    Function: ucs4_t uc_tolower (ucs4_t uc) + +
    +

    Returns the lowercase mapping of the Unicode character uc. +

    + +
    +
    Function: ucs4_t uc_totitle (ucs4_t uc) + +
    +

    Returns the titlecase mapping of the Unicode character uc. +

    +

    The titlecase mapping of a character is to be used when the character should +look like upper case and the following characters are lower cased. +

    +

    For most characters, this is the same as the uppercase mapping. There are +only few characters where the title case variant and the uuper case variant +are different. These characters occur in the Latin writing of the Croatian, +Bosnian, and Serbian languages. +

    + + + + + + +

    Lower case

    Title case

    Upper case +

    LATIN SMALL LETTER LJ +

    LATIN CAPITAL LETTER L WITH SMALL LETTER J +

    LATIN CAPITAL LETTER LJ +

    LATIN SMALL LETTER NJ +

    LATIN CAPITAL LETTER N WITH SMALL LETTER J +

    LATIN CAPITAL LETTER NJ +

    LATIN SMALL LETTER DZ +

    LATIN CAPITAL LETTER D WITH SMALL LETTER Z +

    LATIN CAPITAL LETTER DZ +

    LATIN SMALL LETTER DZ WITH CARON +

    LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +

    LATIN CAPITAL LETTER DZ WITH CARON +

    +
    + +
    + + +

    13.2 Case mappings of strings

    + +

    Case mapping should always be performed on entire strings, not on individual +characters. The functions in this sections do so. +

    +

    These functions allow to apply a normalization after the case mapping. The +reason is that if you want to treat ‘ä’ and ‘Ä’ the same, +you most often also want to treat the composed and decomposed forms of such +a character, U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS and +U+0041 LATIN CAPITAL LETTER A U+0308 COMBINING DIAERESIS the same. +The nf argument designates the normalization. +

    + +

    These functions are locale dependent. The iso639_language argument +identifies the language (e.g. "tr" for Turkish). NULL means to use +locale independent case mappings. +

    +
    +
    Function: const char * uc_locale_language () + +
    +

    Returns the ISO 639 language code of the current locale. +Returns "" if it is unknown, or in the "C" locale. +

    + +
    +
    Function: uint8_t * u8_toupper (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint16_t * u16_toupper (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint32_t * u32_toupper (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Returns the uppercase mapping of a string. +

    +

    The nf argument identifies the normalization form to apply after the +case-mapping. It can also be NULL, for no normalization. +

    + +
    +
    Function: uint8_t * u8_tolower (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint16_t * u16_tolower (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint32_t * u32_tolower (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Returns the lowercase mapping of a string. +

    +

    The nf argument identifies the normalization form to apply after the +case-mapping. It can also be NULL, for no normalization. +

    + +
    +
    Function: uint8_t * u8_totitle (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint16_t * u16_totitle (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint32_t * u32_totitle (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Returns the titlecase mapping of a string. +

    +

    Mapping to title case means that, in each word, the first cased character +is being mapped to title case and the remaining characters of the word +are being mapped to lower case. +

    +

    The nf argument identifies the normalization form to apply after the +case-mapping. It can also be NULL, for no normalization. +

    + +
    + + +

    13.3 Case mappings of substrings

    + +

    Case mapping of a substring cannot simply be performed by extracting the +substring and then applying the case mapping function to it. This does not +work because case mapping requires some information about the surrounding +characters. The following functions allow to apply case mappings to +substrings of a given string, while taking into account the characters that +precede it (the “prefix”) and the characters that follow it (the “suffix”). +

    +
    +
    Type: casing_prefix_context_t + +
    +

    This data type denotes the case-mapping context that is given by a prefix +string. It is an immediate type that can be copied by simple assignment, +without involving memory allocation. It is not an array type. +

    + +
    +
    Constant: casing_prefix_context_t unicase_empty_prefix_context + +
    +

    This constant is the case-mapping context that corresponds to an empty prefix +string. +

    + +

    The following functions return casing_prefix_context_t objects: +

    +
    +
    Function: casing_prefix_context_t u8_casing_prefix_context (const uint8_t *s, size_t n) + +
    +
    Function: casing_prefix_context_t u16_casing_prefix_context (const uint16_t *s, size_t n) + +
    +
    Function: casing_prefix_context_t u32_casing_prefix_context (const uint32_t *s, size_t n) + +
    +

    Returns the case-mapping context of a given prefix string. +

    + +
    +
    Function: casing_prefix_context_t u8_casing_prefixes_context (const uint8_t *s, size_t n, casing_prefix_context_t a_context) + +
    +
    Function: casing_prefix_context_t u16_casing_prefixes_context (const uint16_t *s, size_t n, casing_prefix_context_t a_context) + +
    +
    Function: casing_prefix_context_t u32_casing_prefixes_context (const uint32_t *s, size_t n, casing_prefix_context_t a_context) + +
    +

    Returns the case-mapping context of the prefix concat(a, s), +given the case-mapping context of the prefix a. +

    + +
    +
    Type: casing_suffix_context_t + +
    +

    This data type denotes the case-mapping context that is given by a suffix +string. It is an immediate type that can be copied by simple assignment, +without involving memory allocation. It is not an array type. +

    + +
    +
    Constant: casing_suffix_context_t unicase_empty_suffix_context + +
    +

    This constant is the case-mapping context that corresponds to an empty suffix +string. +

    + +

    The following functions return casing_suffix_context_t objects: +

    +
    +
    Function: casing_suffix_context_t u8_casing_suffix_context (const uint8_t *s, size_t n) + +
    +
    Function: casing_suffix_context_t u16_casing_suffix_context (const uint16_t *s, size_t n) + +
    +
    Function: casing_suffix_context_t u32_casing_suffix_context (const uint32_t *s, size_t n) + +
    +

    Returns the case-mapping context of a given suffix string. +

    + +
    +
    Function: casing_suffix_context_t u8_casing_suffixes_context (const uint8_t *s, size_t n, casing_suffix_context_t a_context) + +
    +
    Function: casing_suffix_context_t u16_casing_suffixes_context (const uint16_t *s, size_t n, casing_suffix_context_t a_context) + +
    +
    Function: casing_suffix_context_t u32_casing_suffixes_context (const uint32_t *s, size_t n, casing_suffix_context_t a_context) + +
    +

    Returns the case-mapping context of the suffix concat(s, a), +given the case-mapping context of the suffix a. +

    + +

    The following functions perform a case mapping, considering the +prefix context and the suffix context. +

    +
    +
    Function: uint8_t * u8_ct_toupper (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint16_t * u16_ct_toupper (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint32_t * u32_ct_toupper (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Returns the uppercase mapping of a string that is surrounded by a prefix +and a suffix. +

    + +
    +
    Function: uint8_t * u8_ct_tolower (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint16_t * u16_ct_tolower (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint32_t * u32_ct_tolower (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Returns the lowercase mapping of a string that is surrounded by a prefix +and a suffix. +

    + +
    +
    Function: uint8_t * u8_ct_totitle (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint16_t * u16_ct_totitle (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint32_t * u32_ct_totitle (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Returns the titlecase mapping of a string that is surrounded by a prefix +and a suffix. +

    + +

    For example, to uppercase the UTF-8 substring between s + start_index +and s + end_index of a string that extends from s to +s + u8_strlen (s), you can use the statements +

    +
     
    size_t result_length;
    +uint8_t result =
    +  u8_ct_toupper (s + start_index, end_index - start_index,
    +                 u8_casing_prefix_context (s, start_index),
    +                 u8_casing_suffix_context (s + end_index,
    +                                           u8_strlen (s) - end_index),
    +                 iso639_language, NULL, NULL, &result_length);
    +
    + +
    + + +

    13.4 Case insensitive comparison

    + +

    The following functions implement comparison that ignores differences in case +and normalization. +

    +
    +
    Function: uint8_t * u8_casefold (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint16_t * u16_casefold (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint32_t * u32_casefold (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Returns the case folded string. +

    +

    Comparing u8_casefold (s1) and u8_casefold (s2) +with the u8_cmp2 function is equivalent to comparing s1 and +s2 with u8_casecmp. +

    +

    The nf argument identifies the normalization form to apply after the +case-mapping. It can also be NULL, for no normalization. +

    + +
    +
    Function: uint8_t * u8_ct_casefold (const uint8_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint8_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint16_t * u16_ct_casefold (const uint16_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint16_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint32_t * u32_ct_casefold (const uint32_t *s, size_t n, casing_prefix_context_t prefix_context, casing_suffix_context_t suffix_context, const char *iso639_language, uninorm_t nf, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Returns the case folded string. The case folding takes into account the +case mapping contexts of the prefix and suffix strings. +

    + +
    +
    Function: int u8_casecmp (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp) + +
    +
    Function: int u16_casecmp (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp) + +
    +
    Function: int u32_casecmp (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp) + +
    +
    Function: int ulc_casecmp (const char *s1, size_t n1, const char *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp) + +
    +

    Compares s1 and s2, ignoring differences in case and normalization. +

    +

    The nf argument identifies the normalization form to apply after the +case-mapping. It can also be NULL, for no normalization. +

    +

    If successful, sets *resultp to -1 if s1 < s2, +0 if s1 = s2, 1 if s1 > s2, and returns 0. +Upon failure, returns -1 with errno set. +

    + + + + + +

    The following functions additionally take into account the sorting rules of the +current locale. +

    +
    +
    Function: char * u8_casexfrm (const uint8_t *s, size_t n, const char *iso639_language, uninorm_t nf, char *resultbuf, size_t *lengthp) + +
    +
    Function: char * u16_casexfrm (const uint16_t *s, size_t n, const char *iso639_language, uninorm_t nf, char *resultbuf, size_t *lengthp) + +
    +
    Function: char * u32_casexfrm (const uint32_t *s, size_t n, const char *iso639_language, uninorm_t nf, char *resultbuf, size_t *lengthp) + +
    +
    Function: char * ulc_casexfrm (const char *s, size_t n, const char *iso639_language, uninorm_t nf, char *resultbuf, size_t *lengthp) + +
    +

    Converts the string s of length n to a NUL-terminated byte +sequence, in such a way that comparing u8_casexfrm (s1) and +u8_casexfrm (s2) with the gnulib function memcmp2 is +equivalent to comparing s1 and s2 with u8_casecoll. +

    +

    nf must be either UNINORM_NFC, UNINORM_NFKC, or NULL for +no normalization. +

    + +
    +
    Function: int u8_casecoll (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp) + +
    +
    Function: int u16_casecoll (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp) + +
    +
    Function: int u32_casecoll (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp) + +
    +
    Function: int ulc_casecoll (const char *s1, size_t n1, const char *s2, size_t n2, const char *iso639_language, uninorm_t nf, int *resultp) + +
    +

    Compares s1 and s2, ignoring differences in case and normalization, +using the collation rules of the current locale. +

    +

    The nf argument identifies the normalization form to apply after the +case-mapping. It must be either UNINORM_NFC or UNINORM_NFKC. +It can also be NULL, for no normalization. +

    +

    If successful, sets *resultp to -1 if s1 < s2, +0 if s1 = s2, 1 if s1 > s2, and returns 0. +Upon failure, returns -1 with errno set. +

    + +
    + + +

    13.5 Case detection

    + +

    The following functions determine whether a Unicode string is entirely in +upper case. or entirely in lower case, or entirely in title case, or already +case-folded. +

    +
    +
    Function: int u8_is_uppercase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +
    Function: int u16_is_uppercase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +
    Function: int u32_is_uppercase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +

    Sets *resultp to true if mapping NFD(s) to upper case is +a no-op, or to false otherwise, and returns 0. Upon failure, returns -1 with +errno set. +

    + +
    +
    Function: int u8_is_lowercase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +
    Function: int u16_is_lowercase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +
    Function: int u32_is_lowercase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +

    Sets *resultp to true if mapping NFD(s) to lower case is +a no-op, or to false otherwise, and returns 0. Upon failure, returns -1 with +errno set. +

    + +
    +
    Function: int u8_is_titlecase (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +
    Function: int u16_is_titlecase (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +
    Function: int u32_is_titlecase (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +

    Sets *resultp to true if mapping NFD(s) to title case is +a no-op, or to false otherwise, and returns 0. Upon failure, returns -1 with +errno set. +

    + +
    +
    Function: int u8_is_casefolded (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +
    Function: int u16_is_casefolded (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +
    Function: int u32_is_casefolded (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +

    Sets *resultp to true if applying case folding to NFD(S) is +a no-op, or to false otherwise, and returns 0. Upon failure, returns -1 with +errno set. +

    + +

    The following functions determine whether case mappings have any effect on a +Unicode string. +

    +
    +
    Function: int u8_is_cased (const uint8_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +
    Function: int u16_is_cased (const uint16_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +
    Function: int u32_is_cased (const uint32_t *s, size_t n, const char *iso639_language, bool *resultp) + +
    +

    Sets *resultp to true if case matters for s, that is, if +mapping NFD(s) to either upper case or lower case or title case is not +a no-op. Set *resultp to false if NFD(s) maps to itself +under the upper case mapping, under the lower case mapping, and under the title +case mapping; in other words, when NFD(s) consists entirely of caseless +characters. Upon failure, returns -1 with errno set. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_14.html b/doc/libunistring_14.html new file mode 100644 index 00000000..f0b21257 --- /dev/null +++ b/doc/libunistring_14.html @@ -0,0 +1,87 @@ + + + + + +GNU libunistring: 14. Regular expressions <uniregex.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    14. Regular expressions <uniregex.h>

    + +

    This include file is not yet implemented. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_15.html b/doc/libunistring_15.html new file mode 100644 index 00000000..7c7ac329 --- /dev/null +++ b/doc/libunistring_15.html @@ -0,0 +1,232 @@ + + + + + +GNU libunistring: 15. Using the library + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    15. Using the library

    + +

    This chapter explains some practical considerations, regarding the +installation and compiler options that are needed in order to use this +library. +

    + +
    + + +

    15.1 Installation

    + +

    Before you can use the library, it must be installed. First, you have to +make sure all dependencies are installed. They are listed in the file +‘DEPENDENCIES’. +

    + +

    Then you can proceed to build and install the library, as described in the +file ‘INSTALL’. For installation on Windows systems, please refer to +the file ‘README.woe32’. +

    +
    + + +

    15.2 Compiler options

    + +

    Let's denote as LIBUNISTRING_PREFIX the value of the ‘--prefix’ +option that you passed to configure while installing this package. +If you didn't pass any ‘--prefix’ option, then the package is installed +in ‘/usr/local’. +

    +

    Let's denote as LIBUNISTRING_INCLUDEDIR the directory where the +include files were installed. This is usually the same as +${LIBUNISTRING_PREFIX}/include. Except that if you passed an +‘--includedir’ option to configure, it is the value of that +option. +

    +

    Let's further denote as LIBUNISTRING_LIBDIR the directory where +the library itself was installed. This is the value that you passed +with the ‘--libdir’ option to configure, or otherwise the +same as ${LIBUNISTRING_PREFIX}/lib. Recall that when building +in 64-bit mode on a 64-bit GNU/Linux system that supports executables +in either 64-bit mode or 32-bit mode, you should have used the option +--libdir=${LIBUNISTRING_PREFIX}/lib64. +

    + +

    So that the compiler finds the include files, you have to pass it the +option -I${LIBUNISTRING_INCLUDEDIR}. +

    +

    So that the compiler finds the library during its linking pass, you have +to pass it the options -L${LIBUNISTRING_LIBDIR} -lunistring. +On some systems, in some configurations, you also have to pass options +needed for linking with libiconv. The autoconf macro +gl_LIBUNISTRING (see Autoconf macro) deals with this +particularity. +

    +
    + + +

    15.3 Include files

    + +

    Most of the include files have been presented in the introduction, see +Introduction, and subsequent detailed chapters. +

    +

    Another include file is <unistring/version.h>. It contains the +version number of the libunistring library. +

    +
    +
    Macro: int _LIBUNISTRING_VERSION + +
    +

    This constant contains the version of libunistring that is being used +at compile time. It encodes the major and minor parts of the version +number only. These parts are encoded in the form (major<<8) + minor. +

    + +
    +
    Constant: int _libunistring_version + +
    +

    This constant contains the version of libunistring that is being used +at run time. It encodes the major and minor parts of the version +number only. These parts are encoded in the form (major<<8) + minor. +

    + +

    It is possible that _libunistring_version is greater than +_LIBUNISTRING_VERSION. This can happen when you use +libunistring as a shared library, and a newer, binary +backward-compatible version has been installed after your program +that uses libunistring was installed. +

    +
    + + +

    15.4 Autoconf macro

    + +

    GNU Gnulib provides an autoconf macro that tests for the availability +of libunistring. It is contained in the Gnulib module +‘libunistring’, see +http://www.gnu.org/software/gnulib/MODULES.html#module=libunistring. +

    + +

    The macro is called gl_LIBUNISTRING. It searches for an installed +libunistring. If found, it sets and AC_SUBSTs HAVE_LIBUNISTRING=yes +and the LIBUNISTRING and LTLIBUNISTRING variables and augments +the CPPFLAGS variable, and defines the C macro +HAVE_LIBUNISTRING to 1. Otherwise, it sets and AC_SUBSTs +HAVE_LIBUNISTRING=no and LIBUNISTRING and LTLIBUNISTRING +to empty. +

    +

    The complexities that gl_LIBUNISTRING deals with are the following: +

    +
      +
    • +On some operating systems, in some configurations, libunistring depends +on libiconv, and the options for linking with libiconv must be +mentioned explicitly on the link command line. + +
    • +GNU libunistring, if installed, is not necessarily already in the +search path (CPPFLAGS for the include file search path, +LDFLAGS for the library search path). + +
    • +GNU libunistring, if installed, is not necessarily already in the +run time library search path. To avoid the need for setting an environment +variable like LD_LIBRARY_PATH, the macro adds the appropriate +run time search path options to the LIBUNISTRING variable. This works +on most systems. +
    + +
    + + +

    15.5 Reporting problems

    + +

    If you encounter any problem, please don't hesitate to send a detailed +bug report to the bug-libunistring@gnu.org mailing list. You can +alternatively also use the bug tracker at the project page +https://savannah.gnu.org/projects/libunistring. +

    +

    Please always include the version number of this library, and a short +description of your operating system and compilation environment with +corresponding version numbers. +

    +

    For problems that appear while building and installing libunistring, +for which you don't find the remedy in the ‘INSTALL’ file, please include +a description of the options that you passed to the ‘configure’ script. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_16.html b/doc/libunistring_16.html new file mode 100644 index 00000000..bfe61265 --- /dev/null +++ b/doc/libunistring_16.html @@ -0,0 +1,93 @@ + + + + + +GNU libunistring: 16. More advanced functionality + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    16. More advanced functionality

    + +

    For bidirectional reordering of strings, we recommend the GNU FriBidi library: +http://www.fribidi.org/. +

    + +

    For the rendering of Unicode strings outside of the context of a given toolkit +(KDE/Qt or GNOME/Gtk), we recommend the Pango library: +http://www.pango.org/. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_17.html b/doc/libunistring_17.html new file mode 100644 index 00000000..73ade2f2 --- /dev/null +++ b/doc/libunistring_17.html @@ -0,0 +1,1526 @@ + + + + + +GNU libunistring: A. Licenses + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    A. Licenses

    + +

    The files of this package are covered by the licenses indicated in each +particular file or directory. Here is a summary: +

    +
      +
    • +The libunistring library is covered by the +GNU Lesser General Public License (LGPL). +A copy of the license is included in GNU LESSER GENERAL PUBLIC LICENSE. + +
    • +This manual is free documentation. It is dually licensed under the +GNU FDL and the GNU GPL. This means that you can redistribute this +manual under either of these two licenses, at your choice. +
      +This manual is covered by the GNU FDL. Permission is granted to copy, +distribute and/or modify this document under the terms of the +GNU Free Documentation License (FDL), either version 1.2 of the +License, or (at your option) any later version published by the +Free Software Foundation (FSF); with no Invariant Sections, with no +Front-Cover Text, and with no Back-Cover Texts. +A copy of the license is included in GNU Free Documentation License. +
      +This manual is covered by the GNU GPL. You can redistribute it and/or +modify it under the terms of the GNU General Public License (GPL), either +version 3 of the License, or (at your option) any later version published +by the Free Software Foundation (FSF). +A copy of the license is included in GNU GENERAL PUBLIC LICENSE. +
    + + + +
    + + +

    A.1 GNU GENERAL PUBLIC LICENSE

    +

    Version 3, 29 June 2007 +

    + +
     
    Copyright © 2007 Free Software Foundation, Inc. http://fsf.org/
    +
    +Everyone is permitted to copy and distribute verbatim copies of this
    +license document, but changing it is not allowed.
    +
    + + +

    Preamble

    + +

    The GNU General Public License is a free, copyleft license for +software and other kinds of works. +

    +

    The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom +to share and change all versions of a program—to make sure it remains +free software for all its users. We, the Free Software Foundation, +use the GNU General Public License for most of our software; it +applies also to any other work released this way by its authors. You +can apply it to your programs, too. +

    +

    When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. +

    +

    To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you +have certain responsibilities if you distribute copies of the +software, or if you modify it: responsibilities to respect the freedom +of others. +

    +

    For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, +receive or can get the source code. And you must show them these +terms so they know their rights. +

    +

    Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. +

    +

    For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. +

    +

    Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the +manufacturer can do so. This is fundamentally incompatible with the +aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for +individuals to use, which is precisely where it is most unacceptable. +Therefore, we have designed this version of the GPL to prohibit the +practice for those products. If such problems arise substantially in +other domains, we stand ready to extend this provision to those +domains in future versions of the GPL, as needed to protect the +freedom of users. +

    +

    Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish +to avoid the special danger that patents applied to a free program +could make it effectively proprietary. To prevent this, the GPL +assures that patents cannot be used to render the program non-free. +

    +

    The precise terms and conditions for copying, distribution and +modification follow. +

    + +

    TERMS AND CONDITIONS

    + +
      +
    1. Definitions. + +

      “This License” refers to version 3 of the GNU General Public License. +

      +

      “Copyright” also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. +

      +

      “The Program” refers to any copyrightable work licensed under this +License. Each licensee is addressed as “you”. “Licensees” and +“recipients” may be individuals or organizations. +

      +

      To “modify” a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a “modified version” of +the earlier work or a work “based on” the earlier work. +

      +

      A “covered work” means either the unmodified Program or a work based +on the Program. +

      +

      To “propagate” a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. +

      +

      To “convey” a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. +

      +

      An interactive user interface displays “Appropriate Legal Notices” to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. +

      +
    2. Source Code. + +

      The “source code” for a work means the preferred form of the work for +making modifications to it. “Object code” means any non-source form +of a work. +

      +

      A “Standard Interface” means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. +

      +

      The “System Libraries” of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +“Major Component”, in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. +

      +

      The “Corresponding Source” for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. +

      +

      The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. +

      +

      The Corresponding Source for a work in source code form is that same +work. +

      +
    3. Basic Permissions. + +

      All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. +

      +

      You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. +

      +

      Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. +

      +
    4. Protecting Users' Legal Rights From Anti-Circumvention Law. + +

      No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. +

      +

      When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. +

      +
    5. Conveying Verbatim Copies. + +

      You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. +

      +

      You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. +

      +
    6. Conveying Modified Source Versions. + +

      You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: +

      +
        +
      1. +The work must carry prominent notices stating that you modified it, +and giving a relevant date. + +
      2. +The work must carry prominent notices stating that it is released +under this License and any conditions added under section 7. This +requirement modifies the requirement in section 4 to “keep intact all +notices”. + +
      3. +You must license the entire work, as a whole, under this License to +anyone who comes into possession of a copy. This License will +therefore apply, along with any applicable section 7 additional terms, +to the whole of the work, and all its parts, regardless of how they +are packaged. This License gives no permission to license the work in +any other way, but it does not invalidate such permission if you have +separately received it. + +
      4. +If the work has interactive user interfaces, each must display +Appropriate Legal Notices; however, if the Program has interactive +interfaces that do not display Appropriate Legal Notices, your work +need not make them do so. +
      + +

      A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +“aggregate” if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. +

      +
    7. Conveying Non-Source Forms. + +

      You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: +

      +
        +
      1. +Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by the +Corresponding Source fixed on a durable physical medium customarily +used for software interchange. + +
      2. +Convey the object code in, or embodied in, a physical product +(including a physical distribution medium), accompanied by a written +offer, valid for at least three years and valid for as long as you +offer spare parts or customer support for that product model, to give +anyone who possesses the object code either (1) a copy of the +Corresponding Source for all the software in the product that is +covered by this License, on a durable physical medium customarily used +for software interchange, for a price no more than your reasonable +cost of physically performing this conveying of source, or (2) access +to copy the Corresponding Source from a network server at no charge. + +
      3. +Convey individual copies of the object code with a copy of the written +offer to provide the Corresponding Source. This alternative is +allowed only occasionally and noncommercially, and only if you +received the object code with such an offer, in accord with subsection +6b. + +
      4. +Convey the object code by offering access from a designated place +(gratis or for a charge), and offer equivalent access to the +Corresponding Source in the same way through the same place at no +further charge. You need not require recipients to copy the +Corresponding Source along with the object code. If the place to copy +the object code is a network server, the Corresponding Source may be +on a different server (operated by you or a third party) that supports +equivalent copying facilities, provided you maintain clear directions +next to the object code saying where to find the Corresponding Source. +Regardless of what server hosts the Corresponding Source, you remain +obligated to ensure that it is available for as long as needed to +satisfy these requirements. + +
      5. +Convey the object code using peer-to-peer transmission, provided you +inform other peers where the object code and Corresponding Source of +the work are being offered to the general public at no charge under +subsection 6d. + +
      + +

      A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. +

      +

      A “User Product” is either (1) a “consumer product”, which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +“normally used” refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. +

      +

      “Installation Information” for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. +

      +

      If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). +

      +

      The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. +

      +

      Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. +

      +
    8. Additional Terms. + +

      “Additional permissions” are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. +

      +

      When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. +

      +

      Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: +

      +
        +
      1. +Disclaiming warranty or limiting liability differently from the terms +of sections 15 and 16 of this License; or + +
      2. +Requiring preservation of specified reasonable legal notices or author +attributions in that material or in the Appropriate Legal Notices +displayed by works containing it; or + +
      3. +Prohibiting misrepresentation of the origin of that material, or +requiring that modified versions of such material be marked in +reasonable ways as different from the original version; or + +
      4. +Limiting the use for publicity purposes of names of licensors or +authors of the material; or + +
      5. +Declining to grant rights under trademark law for use of some trade +names, trademarks, or service marks; or + +
      6. +Requiring indemnification of licensors and authors of that material by +anyone who conveys the material (or modified versions of it) with +contractual assumptions of liability to the recipient, for any +liability that these contractual assumptions directly impose on those +licensors and authors. +
      + +

      All other non-permissive additional terms are considered “further +restrictions” within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. +

      +

      If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. +

      +

      Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. +

      +
    9. Termination. + +

      You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). +

      +

      However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. +

      +

      Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. +

      +

      Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. +

      +
    10. Acceptance Not Required for Having Copies. + +

      You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. +

      +
    11. Automatic Licensing of Downstream Recipients. + +

      Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. +

      +

      An “entity transaction” is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. +

      +

      You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. +

      +
    12. Patents. + +

      A “contributor” is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's “contributor version”. +

      +

      A contributor's “essential patent claims” are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, “control” includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. +

      +

      Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. +

      +

      In the following three paragraphs, a “patent license” is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To “grant” such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. +

      +

      If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. “Knowingly relying” means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. +

      +

      If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. +

      +

      A patent license is “discriminatory” if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. +

      +

      Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. +

      +
    13. No Surrender of Others' Freedom. + +

      If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey +a covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree +to terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. +

      +
    14. Use with the GNU Affero General Public License. + +

      Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. +

      +
    15. Revised Versions of this License. + +

      The Free Software Foundation may publish revised and/or new versions +of the GNU General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. +

      +

      Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU General Public +License “or any later version” applies to it, you have the option of +following the terms and conditions either of that numbered version or +of any later version published by the Free Software Foundation. If +the Program does not specify a version number of the GNU General +Public License, you may choose any version ever published by the Free +Software Foundation. +

      +

      If the Program specifies that a proxy can decide which future versions +of the GNU General Public License can be used, that proxy's public +statement of acceptance of a version permanently authorizes you to +choose that version for the Program. +

      +

      Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. +

      +
    16. Disclaimer of Warranty. + +

      THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. +

      +
    17. Limitation of Liability. + +

      IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +

      +
    18. Interpretation of Sections 15 and 16. + +

      If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. +

      +
    + + +

    END OF TERMS AND CONDITIONS

    + + +

    How to Apply These Terms to Your New Programs

    + +

    If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. +

    +

    To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the “copyright” line and a pointer to where the full notice is found. +

    +
     
    one line to give the program's name and a brief idea of what it does.
    +Copyright (C) year name of author
    +
    +This program is free software: you can redistribute it and/or modify
    +it under the terms of the GNU General Public License as published by
    +the Free Software Foundation, either version 3 of the License, or (at
    +your option) any later version.
    +
    +This program is distributed in the hope that it will be useful, but
    +WITHOUT ANY WARRANTY; without even the implied warranty of
    +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +General Public License for more details.
    +
    +You should have received a copy of the GNU General Public License
    +along with this program.  If not, see http://www.gnu.org/licenses/.
    +
    + +

    Also add information on how to contact you by electronic and paper mail. +

    +

    If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: +

    +
     
    program Copyright (C) year name of author
    +This program comes with ABSOLUTELY NO WARRANTY; for details type ‘show w’.
    +This is free software, and you are welcome to redistribute it
    +under certain conditions; type ‘show c’ for details.
    +
    + +

    The hypothetical commands ‘show w’ and ‘show c’ should show +the appropriate parts of the General Public License. Of course, your +program's commands might be different; for a GUI interface, you would +use an “about box”. +

    +

    You should also get your employer (if you work as a programmer) or school, +if any, to sign a “copyright disclaimer” for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +http://www.gnu.org/licenses/. +

    +

    The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use +the GNU Lesser General Public License instead of this License. But +first, please read http://www.gnu.org/philosophy/why-not-lgpl.html. + +


    + + +

    A.2 GNU LESSER GENERAL PUBLIC LICENSE

    +

    Version 3, 29 June 2007 +

    + +
     
    Copyright © 2007 Free Software Foundation, Inc. http://fsf.org/
    +
    +Everyone is permitted to copy and distribute verbatim copies of this
    +license document, but changing it is not allowed.
    +
    + +

    This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. +

    +
      +
    1. Additional Definitions. + +

      As used herein, “this License” refers to version 3 of the GNU Lesser +General Public License, and the “GNU GPL” refers to version 3 of the GNU +General Public License. +

      +

      “The Library” refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. +

      +

      An “Application” is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. +

      +

      A “Combined Work” is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the “Linked +Version”. +

      +

      The “Minimal Corresponding Source” for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. +

      +

      The “Corresponding Application Code” for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. +

      +
    2. Exception to Section 3 of the GNU GPL. + +

      You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. +

      +
    3. Conveying Modified Versions. + +

      If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: +

      +
        +
      1. +under this License, provided that you make a good faith effort to +ensure that, in the event an Application does not supply the +function or data, the facility still operates, and performs +whatever part of its purpose remains meaningful, or + +
      2. +under the GNU GPL, with none of the additional permissions of +this License applicable to that copy. +
      + +
    4. Object Code Incorporating Material from Library Header Files. + +

      The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: +

      +
        +
      1. +Give prominent notice with each copy of the object code that the +Library is used in it and that the Library and its use are +covered by this License. +
      2. +Accompany the object code with a copy of the GNU GPL and this license +document. +
      + +
    5. Combined Works. + +

      You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: +

      +
        +
      1. +Give prominent notice with each copy of the Combined Work that +the Library is used in it and that the Library and its use are +covered by this License. +
      2. +Accompany the Combined Work with a copy of the GNU GPL and this license +document. +
      3. +For a Combined Work that displays copyright notices during +execution, include the copyright notice for the Library among +these notices, as well as a reference directing the user to the +copies of the GNU GPL and this license document. +
      4. +Do one of the following: + +
          +
        1. +Convey the Minimal Corresponding Source under the terms of this +License, and the Corresponding Application Code in a form +suitable for, and under terms that permit, the user to +recombine or relink the Application with a modified version of +the Linked Version to produce a modified Combined Work, in the +manner specified by section 6 of the GNU GPL for conveying +Corresponding Source. +
        2. +Use a suitable shared library mechanism for linking with the +Library. A suitable mechanism is one that (a) uses at run time +a copy of the Library already present on the user's computer +system, and (b) will operate properly with a modified version +of the Library that is interface-compatible with the Linked +Version. +
        + +
      5. +Provide Installation Information, but only if you would otherwise +be required to provide such information under section 6 of the +GNU GPL, and only to the extent that such information is +necessary to install and execute a modified version of the +Combined Work produced by recombining or relinking the +Application with a modified version of the Linked Version. (If +you use option 4d0, the Installation Information must accompany +the Minimal Corresponding Source and Corresponding Application +Code. If you use option 4d1, you must provide the Installation +Information in the manner specified by section 6 of the GNU GPL +for conveying Corresponding Source.) +
      + +
    6. Combined Libraries. + +

      You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: +

      +
        +
      1. +Accompany the combined library with a copy of the same work based +on the Library, uncombined with any other library facilities, +conveyed under the terms of this License. +
      2. +Give prominent notice with the combined library that part of it +is a work based on the Library, and explaining where to find the +accompanying uncombined form of the same work. +
      + +
    7. Revised Versions of the GNU Lesser General Public License. + +

      The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. +

      +

      Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License “or any later version” +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. +

      +

      If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. +

      +
    + +
    + + +

    A.3 GNU Free Documentation License

    +

    Version 1.3, 3 November 2008 +

    + +
     
    Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
    +http://fsf.org/
    +
    +Everyone is permitted to copy and distribute verbatim copies
    +of this license document, but changing it is not allowed.
    +
    + +
      +
    1. +PREAMBLE + +

      The purpose of this License is to make a manual, textbook, or other +functional and useful document free in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. +

      +

      This License is a kind of “copyleft”, which means that derivative +works of the document must themselves be free in the same sense. It +complements the GNU General Public License, which is a copyleft +license designed for free software. +

      +

      We have designed this License in order to use it for manuals for free +software, because free software needs free documentation: a free +program should come with manuals providing the same freedoms that the +software does. But this License is not limited to software manuals; +it can be used for any textual work, regardless of subject matter or +whether it is published as a printed book. We recommend this License +principally for works whose purpose is instruction or reference. +

      +
    2. +APPLICABILITY AND DEFINITIONS + +

      This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The “Document”, below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as “you”. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. +

      +

      A “Modified Version” of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. +

      +

      A “Secondary Section” is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical +connection with the subject or with related matters, or of legal, +commercial, philosophical, ethical or political position regarding +them. +

      +

      The “Invariant Sections” are certain Secondary Sections whose titles +are designated, as being those of Invariant Sections, in the notice +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. +

      +

      The “Cover Texts” are certain short passages of text that are listed, +as Front-Cover Texts or Back-Cover Texts, in the notice that says that +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. +

      +

      A “Transparent” copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed of +pixels) generic paint programs or (for drawings) some widely available +drawing editor, and that is suitable for input to text formatters or +for automatic translation to a variety of formats suitable for input +to text formatters. A copy made in an otherwise Transparent file +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not “Transparent” is called “Opaque”. +

      +

      Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input +format, SGML or XML using a publicly available +DTD, and standard-conforming simple HTML, +PostScript or PDF designed for human modification. Examples +of transparent image formats include PNG, XCF and +JPG. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, SGML or +XML for which the DTD and/or processing tools are +not generally available, and the machine-generated HTML, +PostScript or PDF produced by some word processors for +output purposes only. +

      +

      The “Title Page” means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the material +this License requires to appear in the title page. For works in +formats which do not have any title page as such, “Title Page” means +the text near the most prominent appearance of the work's title, +preceding the beginning of the body of the text. +

      +

      The “publisher” means any person or entity that distributes copies +of the Document to the public. +

      +

      A section “Entitled XYZ” means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as “Acknowledgements”, +“Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” +of such a section when you modify the Document means that it remains a +section “Entitled XYZ” according to this definition. +

      +

      The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. +

      +
    3. +VERBATIM COPYING + +

      You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License applies +to the Document are reproduced in all copies, and that you add no other +conditions whatsoever to those of this License. You may not use +technical measures to obstruct or control the reading or further +copying of the copies you make or distribute. However, you may accept +compensation in exchange for copies. If you distribute a large enough +number of copies you must also follow the conditions in section 3. +

      +

      You may also lend copies, under the same conditions stated above, and +you may publicly display copies. +

      +
    4. +COPYING IN QUANTITY + +

      If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover +Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on +the back cover. Both covers must also clearly and legibly identify +you as the publisher of these copies. The front cover must present +the full title with all words of the title equally prominent and +visible. You may add other material on the covers in addition. +Copying with changes limited to the covers, as long as they preserve +the title of the Document and satisfy these conditions, can be treated +as verbatim copying in other respects. +

      +

      If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto adjacent +pages. +

      +

      If you publish or distribute Opaque copies of the Document numbering +more than 100, you must either include a machine-readable Transparent +copy along with each Opaque copy, or state in or with each Opaque copy +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. +

      +

      It is requested, but not required, that you contact the authors of the +Document well before redistributing any large number of copies, to give +them a chance to provide you with an updated version of the Document. +

      +
    5. +MODIFICATIONS + +

      You may copy and distribute a Modified Version of the Document under +the conditions of sections 2 and 3 above, provided that you release +the Modified Version under precisely this License, with the Modified +Version filling the role of the Document, thus licensing distribution +and modification of the Modified Version to whoever possesses a copy +of it. In addition, you must do these things in the Modified Version: +

      +
        +
      1. +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +
      2. +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +
      3. +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +
      4. +Preserve all the copyright notices of the Document. + +
      5. +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +
      6. +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +
      7. +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +
      8. +Include an unaltered copy of this License. + +
      9. +Preserve the section Entitled “History”, Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled “History” in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +
      10. +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the “History” section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +
      11. +For any section Entitled “Acknowledgements” or “Dedications”, Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +
      12. +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +
      13. +Delete any section Entitled “Endorsements”. Such a section +may not be included in the Modified Version. + +
      14. +Do not retitle any existing section to be Entitled “Endorsements” or +to conflict in title with any Invariant Section. + +
      15. +Preserve any Warranty Disclaimers. +
      + +

      If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no material +copied from the Document, you may at your option designate some or all +of these sections as invariant. To do this, add their titles to the +list of Invariant Sections in the Modified Version's license notice. +These titles must be distinct from any other section titles. +

      +

      You may add a section Entitled “Endorsements”, provided it contains +nothing but endorsements of your Modified Version by various +parties—for example, statements of peer review or that the text has +been approved by an organization as the authoritative definition of a +standard. +

      +

      You may add a passage of up to five words as a Front-Cover Text, and a +passage of up to 25 words as a Back-Cover Text, to the end of the list +of Cover Texts in the Modified Version. Only one passage of +Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document already +includes a cover text for the same cover, previously added by you or +by arrangement made by the same entity you are acting on behalf of, +you may not add another; but you may replace the old one, on explicit +permission from the previous publisher that added the old one. +

      +

      The author(s) and publisher(s) of the Document do not by this License +give permission to use their names for publicity for or to assert or +imply endorsement of any Modified Version. +

      +
    6. +COMBINING DOCUMENTS + +

      You may combine the Document with other documents released under this +License, under the terms defined in section 4 above for modified +versions, provided that you include in the combination all of the +Invariant Sections of all of the original documents, unmodified, and +list them all as Invariant Sections of your combined work in its +license notice, and that you preserve all their Warranty Disclaimers. +

      +

      The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name but +different contents, make the title of each such section unique by +adding at the end of it, in parentheses, the name of the original +author or publisher of that section if known, or else a unique number. +Make the same adjustment to the section titles in the list of +Invariant Sections in the license notice of the combined work. +

      +

      In the combination, you must combine any sections Entitled “History” +in the various original documents, forming one section Entitled +“History”; likewise combine any sections Entitled “Acknowledgements”, +and any sections Entitled “Dedications”. You must delete all +sections Entitled “Endorsements.” +

      +
    7. +COLLECTIONS OF DOCUMENTS + +

      You may make a collection consisting of the Document and other documents +released under this License, and replace the individual copies of this +License in the various documents with a single copy that is included in +the collection, provided that you follow the rules of this License for +verbatim copying of each of the documents in all other respects. +

      +

      You may extract a single document from such a collection, and distribute +it individually under this License, provided you insert a copy of this +License into the extracted document, and follow this License in all +other respects regarding verbatim copying of that document. +

      +
    8. +AGGREGATION WITH INDEPENDENT WORKS + +

      A compilation of the Document or its derivatives with other separate +and independent documents or works, in or on a volume of a storage or +distribution medium, is called an “aggregate” if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. +

      +

      If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. +

      +
    9. +TRANSLATION + +

      Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of section 4. +Replacing Invariant Sections with translations requires special +permission from their copyright holders, but you may include +translations of some or all Invariant Sections in addition to the +original versions of these Invariant Sections. You may include a +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. +

      +

      If a section in the Document is Entitled “Acknowledgements”, +“Dedications”, or “History”, the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. +

      +
    10. +TERMINATION + +

      You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. +

      +

      However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. +

      +

      Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. +

      +

      Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. +

      +
    11. +FUTURE REVISIONS OF THIS LICENSE + +

      The Free Software Foundation may publish new, revised versions +of the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +http://www.gnu.org/copyleft/. +

      +

      Each version of the License is given a distinguishing version number. +If the Document specifies that a particular numbered version of this +License “or any later version” applies to it, you have the option of +following the terms and conditions either of that specified version or +of any later version that has been published (not as a draft) by the +Free Software Foundation. If the Document does not specify a version +number of this License, you may choose any version ever published (not +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. +

      +
    12. +RELICENSING + +

      “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +“Massive Multiauthor Collaboration” (or “MMC”) contained in the +site means any set of copyrightable works thus published on the MMC +site. +

      +

      “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. +

      +

      “Incorporate” means to publish or republish a Document, in whole or +in part, as part of another Document. +

      +

      An MMC is “eligible for relicensing” if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. +

      +

      The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. +

      +
    + + + +

    ADDENDUM: How to use this License for your documents

    + +

    To use this License in a document you have written, include a copy of +the License in the document and put the following copyright and +license notices just after the title page: +

    +
     
      Copyright (C)  year  your name.
    +  Permission is granted to copy, distribute and/or modify this document
    +  under the terms of the GNU Free Documentation License, Version 1.3
    +  or any later version published by the Free Software Foundation;
    +  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
    +  Texts.  A copy of the license is included in the section entitled ``GNU
    +  Free Documentation License''.
    +
    + +

    If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the “with…Texts.” line with this: +

    +
     
        with the Invariant Sections being list their titles, with
    +    the Front-Cover Texts being list, and with the Back-Cover Texts
    +    being list.
    +
    + +

    If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. +

    +

    If your document contains nontrivial examples of program code, we +recommend releasing these examples in parallel under your choice of +free software license, such as the GNU General Public License, +to permit their use in free software. +

    + + +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_18.html b/doc/libunistring_18.html new file mode 100644 index 00000000..8237bf6a --- /dev/null +++ b/doc/libunistring_18.html @@ -0,0 +1,770 @@ + + + + + +GNU libunistring: Index + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    Index

    + +
    Jump to:   A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +I +   +J +   +L +   +M +   +N +   +O +   +P +   +R +   +S +   +T +   +U +   +V +   +W +   +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Index Entry Section

    A
    ambiguous width9. Display width <uniwidth.h>
    argument conventions2. Conventions
    autoconf macro15.4 Autoconf macro

    B
    bidirectional category8.3 Bidirectional category
    bidirectional reordering16. More advanced functionality
    block8.10 Blocks
    breaks, line11. Line breaking <unilbrk.h>
    breaks, word10. Word breaks in strings <uniwbrk.h>
    bug reports15.5 Reporting problems
    bug tracker15.5 Reporting problems

    C
    C string functions1.5 ‘char *’ strings
    C, programming language8.11 ISO C and Java syntax
    C-like API8.12 Classifications like in ISO C
    canonical combining class8.2 Canonical combining class
    case detection13.5 Case detection
    case mappings13.2 Case mappings of strings
    casing_prefix_context_t13.3 Case mappings of substrings
    casing_suffix_context_t13.3 Case mappings of substrings
    char, type1.5 ‘char *’ strings
    combining, Unicode characters12.2 Composition of Unicode characters
    comparing4.3 Elementary string functions
    comparing4.5 Elementary string functions on NUL terminated strings
    comparing, ignoring case13.4 Case insensitive comparison
    comparing, ignoring case, with collation rules13.4 Case insensitive comparison
    comparing, ignoring normalization12.4 Normalizing comparisons
    comparing, ignoring normalization and case13.4 Case insensitive comparison
    comparing, ignoring normalization and case, with collation rules13.4 Case insensitive comparison
    comparing, ignoring normalization, with collation rules12.4 Normalizing comparisons
    comparing, with collation rules4.5 Elementary string functions on NUL terminated strings
    comparing, with collation rules, ignoring case13.4 Case insensitive comparison
    comparing, with collation rules, ignoring normalization12.4 Normalizing comparisons
    comparing, with collation rules, ignoring normalization and case13.4 Case insensitive comparison
    compiler options15.2 Compiler options
    composing, Unicode characters12.2 Composition of Unicode characters
    converting4.2 Elementary string conversions
    converting5. Conversions between Unicode and encodings <uniconv.h>
    copying4.3 Elementary string functions
    copying4.5 Elementary string functions on NUL terminated strings
    counting4.3 Elementary string functions

    D
    decomposing12.1 Decomposition of Unicode characters
    dependencies15.1 Installation
    detecting case13.5 Case detection
    duplicating4.4 Elementary string functions with memory allocation
    duplicating4.5 Elementary string functions on NUL terminated strings

    E
    enum iconv_ilseq_handler5. Conversions between Unicode and encodings <uniconv.h>

    F
    FDL, GNU Free Documentation LicenseA.3 GNU Free Documentation License
    formatted output6. Output with Unicode strings <unistdio.h>
    fullwidth9. Display width <uniwidth.h>

    G
    general category8.1 General category
    gl_LIBUNISTRING15.4 Autoconf macro
    GPL, GNU General Public LicenseA.1 GNU GENERAL PUBLIC LICENSE

    H
    halfwidth9. Display width <uniwidth.h>

    I
    identifiers8.11 ISO C and Java syntax
    installation15.1 Installation
    internationalization1.2 Unicode and Internationalization
    iterating4.3 Elementary string functions
    iterating4.5 Elementary string functions on NUL terminated strings

    J
    Java, programming language8.11 ISO C and Java syntax

    L
    LGPL, GNU Lesser General Public LicenseA.2 GNU LESSER GENERAL PUBLIC LICENSE
    License, GNU FDLA.3 GNU Free Documentation License
    License, GNU GPLA.1 GNU GENERAL PUBLIC LICENSE
    License, GNU LGPLA.2 GNU LESSER GENERAL PUBLIC LICENSE
    LicensesA. Licenses
    line breaks11. Line breaking <unilbrk.h>
    locale1.3 Locale encodings
    locale categories1.3 Locale encodings
    locale encoding1.3 Locale encodings
    locale encoding5. Conversions between Unicode and encodings <uniconv.h>
    locale language13.2 Case mappings of strings
    locale, multibyte1.5 ‘char *’ strings
    locale_charset5. Conversions between Unicode and encodings <uniconv.h>
    lowercasing13.2 Case mappings of strings

    M
    mailing list15.5 Reporting problems
    mirroring, of Unicode character8.7 Mirrored character

    N
    normal forms12. Normalization forms (composition and decomposition) <uninorm.h>
    normalizing12. Normalization forms (composition and decomposition) <uninorm.h>

    O
    output, formatted6. Output with Unicode strings <unistdio.h>

    P
    properties, of Unicode character8.8 Properties

    R
    regular expression14. Regular expressions <uniregex.h>
    rendering16. More advanced functionality
    return value conventions2. Conventions

    S
    scripts8.9 Scripts
    searching, for a character4.3 Elementary string functions
    searching, for a character4.5 Elementary string functions on NUL terminated strings
    searching, for a substring4.5 Elementary string functions on NUL terminated strings
    stream, normalizing a12.5 Normalization of streams of Unicode characters
    struct uninorm_filter12.5 Normalization of streams of Unicode characters

    T
    titlecasing13.2 Case mappings of strings

    U
    u16_asnprintf6. Output with Unicode strings <unistdio.h>
    u16_asprintf6. Output with Unicode strings <unistdio.h>
    u16_casecmp13.4 Case insensitive comparison
    u16_casecoll13.4 Case insensitive comparison
    u16_casefold13.4 Case insensitive comparison
    u16_casexfrm13.4 Case insensitive comparison
    u16_casing_prefix_context13.3 Case mappings of substrings
    u16_casing_prefixes_context13.3 Case mappings of substrings
    u16_casing_suffix_context13.3 Case mappings of substrings
    u16_casing_suffixes_context13.3 Case mappings of substrings
    u16_check4.1 Elementary string checks
    u16_chr4.3 Elementary string functions
    u16_cmp4.3 Elementary string functions
    u16_cmp24.3 Elementary string functions
    u16_conv_from_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u16_conv_to_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u16_cpy4.3 Elementary string functions
    u16_cpy_alloc4.4 Elementary string functions with memory allocation
    u16_ct_casefold13.4 Case insensitive comparison
    u16_ct_tolower13.3 Case mappings of substrings
    u16_ct_totitle13.3 Case mappings of substrings
    u16_ct_toupper13.3 Case mappings of substrings
    u16_endswith4.5 Elementary string functions on NUL terminated strings
    u16_is_cased13.5 Case detection
    u16_is_casefolded13.5 Case detection
    u16_is_lowercase13.5 Case detection
    u16_is_titlecase13.5 Case detection
    u16_is_uppercase13.5 Case detection
    u16_mblen4.3 Elementary string functions
    u16_mbsnlen4.3 Elementary string functions
    u16_mbtouc4.3 Elementary string functions
    u16_mbtouc_unsafe4.3 Elementary string functions
    u16_mbtoucr4.3 Elementary string functions
    u16_move4.3 Elementary string functions
    u16_next4.5 Elementary string functions on NUL terminated strings
    u16_normalize12.3 Normalization of strings
    u16_normcmp12.4 Normalizing comparisons
    u16_normcoll12.4 Normalizing comparisons
    u16_normxfrm12.4 Normalizing comparisons
    u16_possible_linebreaks11. Line breaking <unilbrk.h>
    u16_prev4.5 Elementary string functions on NUL terminated strings
    u16_set4.3 Elementary string functions
    u16_snprintf6. Output with Unicode strings <unistdio.h>
    u16_sprintf6. Output with Unicode strings <unistdio.h>
    u16_startswith4.5 Elementary string functions on NUL terminated strings
    u16_stpcpy4.5 Elementary string functions on NUL terminated strings
    u16_stpncpy4.5 Elementary string functions on NUL terminated strings
    u16_strcat4.5 Elementary string functions on NUL terminated strings
    u16_strchr4.5 Elementary string functions on NUL terminated strings
    u16_strcmp4.5 Elementary string functions on NUL terminated strings
    u16_strcoll4.5 Elementary string functions on NUL terminated strings
    u16_strconv_from_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u16_strconv_from_locale5. Conversions between Unicode and encodings <uniconv.h>
    u16_strconv_to_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u16_strconv_to_locale5. Conversions between Unicode and encodings <uniconv.h>
    u16_strcpy4.5 Elementary string functions on NUL terminated strings
    u16_strcspn4.5 Elementary string functions on NUL terminated strings
    u16_strdup4.5 Elementary string functions on NUL terminated strings
    u16_strlen4.5 Elementary string functions on NUL terminated strings
    u16_strmblen4.5 Elementary string functions on NUL terminated strings
    u16_strmbtouc4.5 Elementary string functions on NUL terminated strings
    u16_strncat4.5 Elementary string functions on NUL terminated strings
    u16_strncmp4.5 Elementary string functions on NUL terminated strings
    u16_strncpy4.5 Elementary string functions on NUL terminated strings
    u16_strnlen4.5 Elementary string functions on NUL terminated strings
    u16_strpbrk4.5 Elementary string functions on NUL terminated strings
    u16_strrchr4.5 Elementary string functions on NUL terminated strings
    u16_strspn4.5 Elementary string functions on NUL terminated strings
    u16_strstr4.5 Elementary string functions on NUL terminated strings
    u16_strtok4.5 Elementary string functions on NUL terminated strings
    u16_strwidth9. Display width <uniwidth.h>
    u16_to_u324.2 Elementary string conversions
    u16_to_u84.2 Elementary string conversions
    u16_tolower13.2 Case mappings of strings
    u16_totitle13.2 Case mappings of strings
    u16_toupper13.2 Case mappings of strings
    u16_u16_asnprintf6. Output with Unicode strings <unistdio.h>
    u16_u16_asprintf6. Output with Unicode strings <unistdio.h>
    u16_u16_snprintf6. Output with Unicode strings <unistdio.h>
    u16_u16_sprintf6. Output with Unicode strings <unistdio.h>
    u16_u16_vasnprintf6. Output with Unicode strings <unistdio.h>
    u16_u16_vasprintf6. Output with Unicode strings <unistdio.h>
    u16_u16_vsnprintf6. Output with Unicode strings <unistdio.h>
    u16_u16_vsprintf6. Output with Unicode strings <unistdio.h>
    u16_uctomb4.3 Elementary string functions
    u16_vasnprintf6. Output with Unicode strings <unistdio.h>
    u16_vasprintf6. Output with Unicode strings <unistdio.h>
    u16_vsnprintf6. Output with Unicode strings <unistdio.h>
    u16_vsprintf6. Output with Unicode strings <unistdio.h>
    u16_width9. Display width <uniwidth.h>
    u16_width_linebreaks11. Line breaking <unilbrk.h>
    u16_wordbreaks10.1 Word breaks in a string
    u32_asnprintf6. Output with Unicode strings <unistdio.h>
    u32_asprintf6. Output with Unicode strings <unistdio.h>
    u32_casecmp13.4 Case insensitive comparison
    u32_casecoll13.4 Case insensitive comparison
    u32_casefold13.4 Case insensitive comparison
    u32_casexfrm13.4 Case insensitive comparison
    u32_casing_prefix_context13.3 Case mappings of substrings
    u32_casing_prefixes_context13.3 Case mappings of substrings
    u32_casing_suffix_context13.3 Case mappings of substrings
    u32_casing_suffixes_context13.3 Case mappings of substrings
    u32_check4.1 Elementary string checks
    u32_chr4.3 Elementary string functions
    u32_cmp4.3 Elementary string functions
    u32_cmp24.3 Elementary string functions
    u32_conv_from_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u32_conv_to_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u32_cpy4.3 Elementary string functions
    u32_cpy_alloc4.4 Elementary string functions with memory allocation
    u32_ct_casefold13.4 Case insensitive comparison
    u32_ct_tolower13.3 Case mappings of substrings
    u32_ct_totitle13.3 Case mappings of substrings
    u32_ct_toupper13.3 Case mappings of substrings
    u32_endswith4.5 Elementary string functions on NUL terminated strings
    u32_is_cased13.5 Case detection
    u32_is_casefolded13.5 Case detection
    u32_is_lowercase13.5 Case detection
    u32_is_titlecase13.5 Case detection
    u32_is_uppercase13.5 Case detection
    u32_mblen4.3 Elementary string functions
    u32_mbsnlen4.3 Elementary string functions
    u32_mbtouc4.3 Elementary string functions
    u32_mbtouc_unsafe4.3 Elementary string functions
    u32_mbtoucr4.3 Elementary string functions
    u32_move4.3 Elementary string functions
    u32_next4.5 Elementary string functions on NUL terminated strings
    u32_normalize12.3 Normalization of strings
    u32_normcmp12.4 Normalizing comparisons
    u32_normcoll12.4 Normalizing comparisons
    u32_normxfrm12.4 Normalizing comparisons
    u32_possible_linebreaks11. Line breaking <unilbrk.h>
    u32_prev4.5 Elementary string functions on NUL terminated strings
    u32_set4.3 Elementary string functions
    u32_snprintf6. Output with Unicode strings <unistdio.h>
    u32_sprintf6. Output with Unicode strings <unistdio.h>
    u32_startswith4.5 Elementary string functions on NUL terminated strings
    u32_stpcpy4.5 Elementary string functions on NUL terminated strings
    u32_stpncpy4.5 Elementary string functions on NUL terminated strings
    u32_strcat4.5 Elementary string functions on NUL terminated strings
    u32_strchr4.5 Elementary string functions on NUL terminated strings
    u32_strcmp4.5 Elementary string functions on NUL terminated strings
    u32_strcoll4.5 Elementary string functions on NUL terminated strings
    u32_strconv_from_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u32_strconv_from_locale5. Conversions between Unicode and encodings <uniconv.h>
    u32_strconv_to_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u32_strconv_to_locale5. Conversions between Unicode and encodings <uniconv.h>
    u32_strcpy4.5 Elementary string functions on NUL terminated strings
    u32_strcspn4.5 Elementary string functions on NUL terminated strings
    u32_strdup4.5 Elementary string functions on NUL terminated strings
    u32_strlen4.5 Elementary string functions on NUL terminated strings
    u32_strmblen4.5 Elementary string functions on NUL terminated strings
    u32_strmbtouc4.5 Elementary string functions on NUL terminated strings
    u32_strncat4.5 Elementary string functions on NUL terminated strings
    u32_strncmp4.5 Elementary string functions on NUL terminated strings
    u32_strncpy4.5 Elementary string functions on NUL terminated strings
    u32_strnlen4.5 Elementary string functions on NUL terminated strings
    u32_strpbrk4.5 Elementary string functions on NUL terminated strings
    u32_strrchr4.5 Elementary string functions on NUL terminated strings
    u32_strspn4.5 Elementary string functions on NUL terminated strings
    u32_strstr4.5 Elementary string functions on NUL terminated strings
    u32_strtok4.5 Elementary string functions on NUL terminated strings
    u32_strwidth9. Display width <uniwidth.h>
    u32_to_u164.2 Elementary string conversions
    u32_to_u84.2 Elementary string conversions
    u32_tolower13.2 Case mappings of strings
    u32_totitle13.2 Case mappings of strings
    u32_toupper13.2 Case mappings of strings
    u32_u32_asnprintf6. Output with Unicode strings <unistdio.h>
    u32_u32_asprintf6. Output with Unicode strings <unistdio.h>
    u32_u32_snprintf6. Output with Unicode strings <unistdio.h>
    u32_u32_sprintf6. Output with Unicode strings <unistdio.h>
    u32_u32_vasnprintf6. Output with Unicode strings <unistdio.h>
    u32_u32_vasprintf6. Output with Unicode strings <unistdio.h>
    u32_u32_vsnprintf6. Output with Unicode strings <unistdio.h>
    u32_u32_vsprintf6. Output with Unicode strings <unistdio.h>
    u32_uctomb4.3 Elementary string functions
    u32_vasnprintf6. Output with Unicode strings <unistdio.h>
    u32_vasprintf6. Output with Unicode strings <unistdio.h>
    u32_vsnprintf6. Output with Unicode strings <unistdio.h>
    u32_vsprintf6. Output with Unicode strings <unistdio.h>
    u32_width9. Display width <uniwidth.h>
    u32_width_linebreaks11. Line breaking <unilbrk.h>
    u32_wordbreaks10.1 Word breaks in a string
    u8_asnprintf6. Output with Unicode strings <unistdio.h>
    u8_asprintf6. Output with Unicode strings <unistdio.h>
    u8_casecmp13.4 Case insensitive comparison
    u8_casecoll13.4 Case insensitive comparison
    u8_casefold13.4 Case insensitive comparison
    u8_casexfrm13.4 Case insensitive comparison
    u8_casing_prefix_context13.3 Case mappings of substrings
    u8_casing_prefixes_context13.3 Case mappings of substrings
    u8_casing_suffix_context13.3 Case mappings of substrings
    u8_casing_suffixes_context13.3 Case mappings of substrings
    u8_check4.1 Elementary string checks
    u8_chr4.3 Elementary string functions
    u8_cmp4.3 Elementary string functions
    u8_cmp24.3 Elementary string functions
    u8_conv_from_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u8_conv_to_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u8_cpy4.3 Elementary string functions
    u8_cpy_alloc4.4 Elementary string functions with memory allocation
    u8_ct_casefold13.4 Case insensitive comparison
    u8_ct_tolower13.3 Case mappings of substrings
    u8_ct_totitle13.3 Case mappings of substrings
    u8_ct_toupper13.3 Case mappings of substrings
    u8_endswith4.5 Elementary string functions on NUL terminated strings
    u8_is_cased13.5 Case detection
    u8_is_casefolded13.5 Case detection
    u8_is_lowercase13.5 Case detection
    u8_is_titlecase13.5 Case detection
    u8_is_uppercase13.5 Case detection
    u8_mblen4.3 Elementary string functions
    u8_mbsnlen4.3 Elementary string functions
    u8_mbtouc4.3 Elementary string functions
    u8_mbtouc_unsafe4.3 Elementary string functions
    u8_mbtoucr4.3 Elementary string functions
    u8_move4.3 Elementary string functions
    u8_next4.5 Elementary string functions on NUL terminated strings
    u8_normalize12.3 Normalization of strings
    u8_normcmp12.4 Normalizing comparisons
    u8_normcoll12.4 Normalizing comparisons
    u8_normxfrm12.4 Normalizing comparisons
    u8_possible_linebreaks11. Line breaking <unilbrk.h>
    u8_prev4.5 Elementary string functions on NUL terminated strings
    u8_set4.3 Elementary string functions
    u8_snprintf6. Output with Unicode strings <unistdio.h>
    u8_sprintf6. Output with Unicode strings <unistdio.h>
    u8_startswith4.5 Elementary string functions on NUL terminated strings
    u8_stpcpy4.5 Elementary string functions on NUL terminated strings
    u8_stpncpy4.5 Elementary string functions on NUL terminated strings
    u8_strcat4.5 Elementary string functions on NUL terminated strings
    u8_strchr4.5 Elementary string functions on NUL terminated strings
    u8_strcmp4.5 Elementary string functions on NUL terminated strings
    u8_strcoll4.5 Elementary string functions on NUL terminated strings
    u8_strconv_from_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u8_strconv_from_locale5. Conversions between Unicode and encodings <uniconv.h>
    u8_strconv_to_encoding5. Conversions between Unicode and encodings <uniconv.h>
    u8_strconv_to_locale5. Conversions between Unicode and encodings <uniconv.h>
    u8_strcpy4.5 Elementary string functions on NUL terminated strings
    u8_strcspn4.5 Elementary string functions on NUL terminated strings
    u8_strdup4.5 Elementary string functions on NUL terminated strings
    u8_strlen4.5 Elementary string functions on NUL terminated strings
    u8_strmblen4.5 Elementary string functions on NUL terminated strings
    u8_strmbtouc4.5 Elementary string functions on NUL terminated strings
    u8_strncat4.5 Elementary string functions on NUL terminated strings
    u8_strncmp4.5 Elementary string functions on NUL terminated strings
    u8_strncpy4.5 Elementary string functions on NUL terminated strings
    u8_strnlen4.5 Elementary string functions on NUL terminated strings
    u8_strpbrk4.5 Elementary string functions on NUL terminated strings
    u8_strrchr4.5 Elementary string functions on NUL terminated strings
    u8_strspn4.5 Elementary string functions on NUL terminated strings
    u8_strstr4.5 Elementary string functions on NUL terminated strings
    u8_strtok4.5 Elementary string functions on NUL terminated strings
    u8_strwidth9. Display width <uniwidth.h>
    u8_to_u164.2 Elementary string conversions
    u8_to_u324.2 Elementary string conversions
    u8_tolower13.2 Case mappings of strings
    u8_totitle13.2 Case mappings of strings
    u8_toupper13.2 Case mappings of strings
    u8_u8_asnprintf6. Output with Unicode strings <unistdio.h>
    u8_u8_asprintf6. Output with Unicode strings <unistdio.h>
    u8_u8_snprintf6. Output with Unicode strings <unistdio.h>
    u8_u8_sprintf6. Output with Unicode strings <unistdio.h>
    u8_u8_vasnprintf6. Output with Unicode strings <unistdio.h>
    u8_u8_vasprintf6. Output with Unicode strings <unistdio.h>
    u8_u8_vsnprintf6. Output with Unicode strings <unistdio.h>
    u8_u8_vsprintf6. Output with Unicode strings <unistdio.h>
    u8_uctomb4.3 Elementary string functions
    u8_vasnprintf6. Output with Unicode strings <unistdio.h>
    u8_vasprintf6. Output with Unicode strings <unistdio.h>
    u8_vsnprintf6. Output with Unicode strings <unistdio.h>
    u8_vsprintf6. Output with Unicode strings <unistdio.h>
    u8_width9. Display width <uniwidth.h>
    u8_width_linebreaks11. Line breaking <unilbrk.h>
    u8_wordbreaks10.1 Word breaks in a string
    uc_all_blocks8.10 Blocks
    uc_all_scripts8.9 Scripts
    uc_bidi_category8.3 Bidirectional category
    uc_bidi_category_byname8.3 Bidirectional category
    uc_bidi_category_name8.3 Bidirectional category
    uc_block8.10 Blocks
    uc_block_t8.10 Blocks
    uc_c_ident_category8.11 ISO C and Java syntax
    uc_canonical_decomposition12.1 Decomposition of Unicode characters
    uc_combining_class8.2 Canonical combining class
    uc_composition12.2 Composition of Unicode characters
    uc_decimal_value8.4 Decimal digit value
    uc_decomposition12.1 Decomposition of Unicode characters
    uc_digit_value8.5 Digit value
    uc_fraction_t8.6 Numeric value
    uc_general_category8.1.1 The object oriented API for general category
    uc_general_category_and8.1.1 The object oriented API for general category
    uc_general_category_and_not8.1.1 The object oriented API for general category
    uc_general_category_byname8.1.1 The object oriented API for general category
    uc_general_category_name8.1.1 The object oriented API for general category
    uc_general_category_or8.1.1 The object oriented API for general category
    uc_general_category_t8.1.1 The object oriented API for general category
    uc_is_alnum8.12 Classifications like in ISO C
    uc_is_alpha8.12 Classifications like in ISO C
    uc_is_bidi_category8.3 Bidirectional category
    uc_is_blank8.12 Classifications like in ISO C
    uc_is_block8.10 Blocks
    uc_is_c_whitespace8.11 ISO C and Java syntax
    uc_is_cntrl8.12 Classifications like in ISO C
    uc_is_digit8.12 Classifications like in ISO C
    uc_is_general_category8.1.1 The object oriented API for general category
    uc_is_general_category_withtable8.1.2 The bit mask API for general category
    uc_is_graph8.12 Classifications like in ISO C
    uc_is_java_whitespace8.11 ISO C and Java syntax
    uc_is_lower8.12 Classifications like in ISO C
    uc_is_print8.12 Classifications like in ISO C
    uc_is_property8.8.1 Properties as objects – the object oriented API
    uc_is_property_alphabetic8.8.2 Properties as functions – the functional API
    uc_is_property_ascii_hex_digit8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_arabic_digit8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_arabic_right_to_left8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_block_separator8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_boundary_neutral8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_common_separator8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_control8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_embedding_or_override8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_eur_num_separator8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_eur_num_terminator8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_european_digit8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_hebrew_right_to_left8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_left_to_right8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_non_spacing_mark8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_other_neutral8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_pdf8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_segment_separator8.8.2 Properties as functions – the functional API
    uc_is_property_bidi_whitespace8.8.2 Properties as functions – the functional API
    uc_is_property_combining8.8.2 Properties as functions – the functional API
    uc_is_property_composite8.8.2 Properties as functions – the functional API
    uc_is_property_currency_symbol8.8.2 Properties as functions – the functional API
    uc_is_property_dash8.8.2 Properties as functions – the functional API
    uc_is_property_decimal_digit8.8.2 Properties as functions – the functional API
    uc_is_property_default_ignorable_code_point8.8.2 Properties as functions – the functional API
    uc_is_property_deprecated8.8.2 Properties as functions – the functional API
    uc_is_property_diacritic8.8.2 Properties as functions – the functional API
    uc_is_property_extender8.8.2 Properties as functions – the functional API
    uc_is_property_format_control8.8.2 Properties as functions – the functional API
    uc_is_property_grapheme_base8.8.2 Properties as functions – the functional API
    uc_is_property_grapheme_extend8.8.2 Properties as functions – the functional API
    uc_is_property_grapheme_link8.8.2 Properties as functions – the functional API
    uc_is_property_hex_digit8.8.2 Properties as functions – the functional API
    uc_is_property_hyphen8.8.2 Properties as functions – the functional API
    uc_is_property_id_continue8.8.2 Properties as functions – the functional API
    uc_is_property_id_start8.8.2 Properties as functions – the functional API
    uc_is_property_ideographic8.8.2 Properties as functions – the functional API
    uc_is_property_ids_binary_operator8.8.2 Properties as functions – the functional API
    uc_is_property_ids_trinary_operator8.8.2 Properties as functions – the functional API
    uc_is_property_ignorable_control8.8.2 Properties as functions – the functional API
    uc_is_property_iso_control8.8.2 Properties as functions – the functional API
    uc_is_property_join_control8.8.2 Properties as functions – the functional API
    uc_is_property_left_of_pair8.8.2 Properties as functions – the functional API
    uc_is_property_line_separator8.8.2 Properties as functions – the functional API
    uc_is_property_logical_order_exception8.8.2 Properties as functions – the functional API
    uc_is_property_lowercase8.8.2 Properties as functions – the functional API
    uc_is_property_math8.8.2 Properties as functions – the functional API
    uc_is_property_non_break8.8.2 Properties as functions – the functional API
    uc_is_property_not_a_character8.8.2 Properties as functions – the functional API
    uc_is_property_numeric8.8.2 Properties as functions – the functional API
    uc_is_property_other_alphabetic8.8.2 Properties as functions – the functional API
    uc_is_property_other_default_ignorable_code_point8.8.2 Properties as functions – the functional API
    uc_is_property_other_grapheme_extend8.8.2 Properties as functions – the functional API
    uc_is_property_other_id_continue8.8.2 Properties as functions – the functional API
    uc_is_property_other_id_start8.8.2 Properties as functions – the functional API
    uc_is_property_other_lowercase8.8.2 Properties as functions – the functional API
    uc_is_property_other_math8.8.2 Properties as functions – the functional API
    uc_is_property_other_uppercase8.8.2 Properties as functions – the functional API
    uc_is_property_paired_punctuation8.8.2 Properties as functions – the functional API
    uc_is_property_paragraph_separator8.8.2 Properties as functions – the functional API
    uc_is_property_pattern_syntax8.8.2 Properties as functions – the functional API
    uc_is_property_pattern_white_space8.8.2 Properties as functions – the functional API
    uc_is_property_private_use8.8.2 Properties as functions – the functional API
    uc_is_property_punctuation8.8.2 Properties as functions – the functional API
    uc_is_property_quotation_mark8.8.2 Properties as functions – the functional API
    uc_is_property_radical8.8.2 Properties as functions – the functional API
    uc_is_property_sentence_terminal8.8.2 Properties as functions – the functional API
    uc_is_property_soft_dotted8.8.2 Properties as functions – the functional API
    uc_is_property_space8.8.2 Properties as functions – the functional API
    uc_is_property_terminal_punctuation8.8.2 Properties as functions – the functional API
    uc_is_property_titlecase8.8.2 Properties as functions – the functional API
    uc_is_property_unassigned_code_value8.8.2 Properties as functions – the functional API
    uc_is_property_unified_ideograph8.8.2 Properties as functions – the functional API
    uc_is_property_uppercase8.8.2 Properties as functions – the functional API
    uc_is_property_variation_selector8.8.2 Properties as functions – the functional API
    uc_is_property_white_space8.8.2 Properties as functions – the functional API
    uc_is_property_xid_continue8.8.2 Properties as functions – the functional API
    uc_is_property_xid_start8.8.2 Properties as functions – the functional API
    uc_is_property_zero_width8.8.2 Properties as functions – the functional API
    uc_is_punct8.12 Classifications like in ISO C
    uc_is_script8.9 Scripts
    uc_is_space8.12 Classifications like in ISO C
    uc_is_upper8.12 Classifications like in ISO C
    uc_is_xdigit8.12 Classifications like in ISO C
    uc_java_ident_category8.11 ISO C and Java syntax
    uc_locale_language13.2 Case mappings of strings
    uc_mirror_char8.7 Mirrored character
    uc_numeric_value8.6 Numeric value
    uc_property_byname8.8.1 Properties as objects – the object oriented API
    uc_property_is_valid8.8.1 Properties as objects – the object oriented API
    uc_property_t8.8.1 Properties as objects – the object oriented API
    uc_script8.9 Scripts
    uc_script_byname8.9 Scripts
    uc_script_t8.9 Scripts
    uc_tolower13.1 Case mappings of characters
    uc_totitle13.1 Case mappings of characters
    uc_toupper13.1 Case mappings of characters
    uc_width9. Display width <uniwidth.h>
    uc_wordbreak_property10.2 Word break property
    UCS-41.1 Unicode
    ucs4_t3. Elementary types <unitypes.h>
    uint16_t3. Elementary types <unitypes.h>
    uint32_t3. Elementary types <unitypes.h>
    uint8_t3. Elementary types <unitypes.h>
    ulc_asnprintf6. Output with Unicode strings <unistdio.h>
    ulc_asprintf6. Output with Unicode strings <unistdio.h>
    ulc_casecmp13.4 Case insensitive comparison
    ulc_casecoll13.4 Case insensitive comparison
    ulc_casexfrm13.4 Case insensitive comparison
    ulc_fprintf6. Output with Unicode strings <unistdio.h>
    ulc_possible_linebreaks11. Line breaking <unilbrk.h>
    ulc_snprintf6. Output with Unicode strings <unistdio.h>
    ulc_sprintf6. Output with Unicode strings <unistdio.h>
    ulc_vasnprintf6. Output with Unicode strings <unistdio.h>
    ulc_vasprintf6. Output with Unicode strings <unistdio.h>
    ulc_vfprintf6. Output with Unicode strings <unistdio.h>
    ulc_vsnprintf6. Output with Unicode strings <unistdio.h>
    ulc_vsprintf6. Output with Unicode strings <unistdio.h>
    ulc_width_linebreaks11. Line breaking <unilbrk.h>
    ulc_wordbreaks10.1 Word breaks in a string
    Unicode1.1 Unicode
    Unicode character, bidirectional category8.3 Bidirectional category
    Unicode character, block8.10 Blocks
    Unicode character, canonical combining class8.2 Canonical combining class
    Unicode character, case mappings13.1 Case mappings of characters
    Unicode character, classification8.1 General category
    Unicode character, classification like in C8.12 Classifications like in ISO C
    Unicode character, general category8.1 General category
    Unicode character, mirroring8.7 Mirrored character
    Unicode character, name7. Names of Unicode characters <uniname.h>
    Unicode character, properties8.8 Properties
    Unicode character, script8.9 Scripts
    Unicode character, validity in C identifiers8.11 ISO C and Java syntax
    Unicode character, validity in Java identifiers8.11 ISO C and Java syntax
    Unicode character, value8.4 Decimal digit value
    Unicode character, value8.5 Digit value
    Unicode character, value8.6 Numeric value
    Unicode character, width9. Display width <uniwidth.h>
    unicode_character_name7. Names of Unicode characters <uniname.h>
    unicode_name_character7. Names of Unicode characters <uniname.h>
    uninorm_decomposing_form12.3 Normalization of strings
    uninorm_filter_create12.5 Normalization of streams of Unicode characters
    uninorm_filter_flush12.5 Normalization of streams of Unicode characters
    uninorm_filter_free12.5 Normalization of streams of Unicode characters
    uninorm_filter_write12.5 Normalization of streams of Unicode characters
    uninorm_is_compat_decomposing12.3 Normalization of strings
    uninorm_is_composing12.3 Normalization of strings
    uninorm_t12.3 Normalization of strings
    uppercasing13.2 Case mappings of strings
    use cases1. Introduction
    UTF-161.1 Unicode
    UTF-16, strings1.7 Unicode strings
    UTF-321.1 Unicode
    UTF-32, strings1.7 Unicode strings
    UTF-81.1 Unicode
    UTF-8, strings1.7 Unicode strings

    +
    Jump to:   A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +I +   +J +   +L +   +M +   +N +   +O +   +P +   +R +   +S +   +T +   +U +   +V +   +W +   +
    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_19.html b/doc/libunistring_19.html new file mode 100644 index 00000000..5974e2f6 --- /dev/null +++ b/doc/libunistring_19.html @@ -0,0 +1,188 @@ + + + + + +GNU libunistring: Index: V – W + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + +

    Index: V – W

    +
    Jump to:   A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +I +   +J +   +L +   +M +   +N +   +O +   +P +   +R +   +S +   +T +   +U +   +V +   +W +   +
    + + + + + + + + + + + + + + + + + +
    Index Entry Section

    V
    validity4.1 Elementary string checks
    value, of libunistring1. Introduction
    value, of Unicode character8.4 Decimal digit value
    value, of Unicode character8.5 Digit value
    value, of Unicode character8.6 Numeric value
    verification4.1 Elementary string checks

    W
    wchar_t, type1.6 The wchar_t mess
    width9. Display width <uniwidth.h>
    word breaks10. Word breaks in strings <uniwbrk.h>
    wrapping11. Line breaking <unilbrk.h>

    +
    Jump to:   A +   +B +   +C +   +D +   +E +   +F +   +G +   +H +   +I +   +J +   +L +   +M +   +N +   +O +   +P +   +R +   +S +   +T +   +U +   +V +   +W +   +
    + +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_2.html b/doc/libunistring_2.html new file mode 100644 index 00000000..6d63b632 --- /dev/null +++ b/doc/libunistring_2.html @@ -0,0 +1,141 @@ + + + + + +GNU libunistring: 2. Conventions + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    2. Conventions

    + +

    This chapter explains conventions valid throughout the libunistring library. +

    + +

    Variables of type char * denote C strings in locale encoding. +See Locale encodings. +

    +

    Variables of type uint8_t * denote UTF-8 strings. Their units +are bytes. +

    +

    Variables of type uint16_t * denote UTF-16 strings, without byte +order mark. Their units are 2-byte words. +

    +

    Variables of type uint32_t * denote UTF-32 strings, without byte +order mark. Their units are 4-byte words. +

    +

    Argument pairs (s, n) denote a string +s[0..n-1] with exactly n units. +

    +

    All functions with prefix ‘ulc_’ operate on C strings in locale +encoding. +

    +

    All functions with prefix ‘u8_’ operate on UTF-8 strings. +

    +

    All functions with prefix ‘u16_’ operate on UTF-16 strings. +

    +

    All functions with prefix ‘u32_’ operate on UTF-32 strings. +

    +

    For every function with prefix ‘u8_’, operating on UTF-8 strings, +there is also a corresponding function with prefix ‘u16_’, +operating on UTF-16 strings, and a corresponding function with prefix +‘u32_’, operating on UTF-32 strings. Their description is +analogous; in this documentation we describe only the function that +operates on UTF-8 strings, for brevity. +

    +

    A declaration with a variable n denotes the three concrete +declarations with n = 8, n = 16, n = 32. +

    +

    All parameters starting with ‘str’ and the parameters of +functions starting with u8_str/u16_str/u32_str +denote a NUL terminated string. +

    + +

    Error values are always returned through the errno variable, +usually with a return value that indicates the presence of an error +(NULL for functions that return an pointer, or -1 for functions that +return an int). +

    +

    Functions returning a string result take a +(resultbuf, lengthp) +argument pair. If resultbuf is not NULL and the result fits +into *lengthp units, it is put in resultbuf, and +resultbuf is returned. Otherwise, a freshly allocated string +is returned. In both cases, *lengthp is set to the +length (number of units) of the returned string. In case of error, +NULL is returned and errno is set. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_3.html b/doc/libunistring_3.html new file mode 100644 index 00000000..cc446970 --- /dev/null +++ b/doc/libunistring_3.html @@ -0,0 +1,107 @@ + + + + + +GNU libunistring: 3. Elementary types <unitypes.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    3. Elementary types <unitypes.h>

    + +

    The include file <unitypes.h> provides the following basic types. +

    +
    +
    Type: uint8_t + +
    +
    Type: uint16_t + +
    +
    Type: uint32_t + +
    +

    These are the storage units of UTF-8/16/32 strings, respectively. The definitions are +taken from <stdint.h>, on platforms where this include file is present. +

    + +
    +
    Type: ucs4_t + +
    +

    This type represents a single Unicode character, outside of an UTF-32 string. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_4.html b/doc/libunistring_4.html new file mode 100644 index 00000000..60992cd0 --- /dev/null +++ b/doc/libunistring_4.html @@ -0,0 +1,864 @@ + + + + + +GNU libunistring: 4. Elementary Unicode string functions <unistr.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    4. Elementary Unicode string functions <unistr.h>

    + +

    This include file declares elementary functions for Unicode strings. It is +essentially the equivalent of what <string.h> is for C strings. +

    + +
    + + +

    4.1 Elementary string checks

    + +

    The following function is available to verify the integrity of a Unicode string. +

    +
    +
    Function: const uint8_t * u8_check (const uint8_t *s, size_t n) + +
    +
    Function: const uint16_t * u16_check (const uint16_t *s, size_t n) + +
    +
    Function: const uint32_t * u32_check (const uint32_t *s, size_t n) + +
    +

    This function checks whether a Unicode string is well-formed. +It returns NULL if valid, or a pointer to the first invalid unit otherwise. +

    + +
    + + +

    4.2 Elementary string conversions

    + +

    The following functions perform conversions between the different forms of Unicode strings. +

    +
    +
    Function: uint16_t * u8_to_u16 (const uint8_t *s, size_t n, uint16_t *resultbuf, size_t *lengthp) + +
    +

    Converts an UTF-8 string to an UTF-16 string. +

    + +
    +
    Function: uint32_t * u8_to_u32 (const uint8_t *s, size_t n, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Converts an UTF-8 string to an UTF-32 string. +

    + +
    +
    Function: uint8_t * u16_to_u8 (const uint16_t *s, size_t n, uint8_t *resultbuf, size_t *lengthp) + +
    +

    Converts an UTF-16 string to an UTF-8 string. +

    + +
    +
    Function: uint32_t * u16_to_u32 (const uint16_t *s, size_t n, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Converts an UTF-16 string to an UTF-32 string. +

    + +
    +
    Function: uint8_t * u32_to_u8 (const uint32_t *s, size_t n, uint8_t *resultbuf, size_t *lengthp) + +
    +

    Converts an UTF-32 string to an UTF-8 string. +

    + +
    +
    Function: uint16_t * u32_to_u16 (const uint32_t *s, size_t n, uint16_t *resultbuf, size_t *lengthp) + +
    +

    Converts an UTF-32 string to an UTF-16 string. +

    + +
    + + +

    4.3 Elementary string functions

    + +

    The following functions inspect and return details about the first character +in a Unicode string. +

    +
    +
    Function: int u8_mblen (const uint8_t *s, size_t n) + +
    +
    Function: int u16_mblen (const uint16_t *s, size_t n) + +
    +
    Function: int u32_mblen (const uint32_t *s, size_t n) + +
    +

    Returns the length (number of units) of the first character in s, which +is no longer than n. Returns 0 if it is the NUL character. Returns -1 +upon failure. +

    +

    This function is similar to mblen, except that it operates on a +Unicode string and that s must not be NULL. +

    + +
    +
    Function: int u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n) + +
    +
    Function: int u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n) + +
    +
    Function: int u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n) + +
    +

    Returns the length (number of units) of the first character in s, +putting its ucs4_t representation in *puc. Upon failure, +*puc is set to 0xfffd, and an appropriate number of units +is returned. +

    +

    The number of available units, n, must be > 0. +

    +

    This function is similar to mbtowc, except that it operates on a +Unicode string, puc and s must not be NULL, n must be > 0, +and the NUL character is not treated specially. +

    + +
    +
    Function: int u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n) + +
    +
    Function: int u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n) + +
    +
    Function: int u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n) + +
    +

    This function is like u8_mbtouc_unsafe, except that it will detect an +invalid UTF-8 character, even if the library is compiled without +‘--enable-safety’. +

    + +
    +
    Function: int u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n) + +
    +
    Function: int u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n) + +
    +
    Function: int u32_mbtoucr (ucs4_t *puc, const uint32_t *s, size_t n) + +
    +

    Returns the length (number of units) of the first character in s, +putting its ucs4_t representation in *puc. Upon failure, +*puc is set to 0xfffd, and -1 is returned for an invalid +sequence of units, -2 is returned for an incomplete sequence of units. +

    +

    The number of available units, n, must be > 0. +

    +

    This function is similar to u8_mbtouc, except that the return value +gives more details about the failure, similar to mbrtowc. +

    + +

    The following function stores a Unicode character as a Unicode string in +memory. +

    +
    +
    Function: int u8_uctomb (uint8_t *s, ucs4_t uc, int n) + +
    +
    Function: int u16_uctomb (uint16_t *s, ucs4_t uc, int n) + +
    +
    Function: int u32_uctomb (uint32_t *s, ucs4_t uc, int n) + +
    +

    Puts the multibyte character represented by uc in s, returning its +length. Returns -1 upon failure, -2 if the number of available units, n, +is too small. The latter case cannot occur if n >= 6/2/1, respectively. +

    +

    This function is similar to wctomb, except that it operates on a +Unicode strings, s must not be NULL, and the argument n must be +specified. +

    + + +

    The following functions copy Unicode strings in memory. +

    +
    +
    Function: uint8_t * u8_cpy (uint8_t *dest, const uint8_t *src, size_t n) + +
    +
    Function: uint16_t * u16_cpy (uint16_t *dest, const uint16_t *src, size_t n) + +
    +
    Function: uint32_t * u32_cpy (uint32_t *dest, const uint32_t *src, size_t n) + +
    +

    Copies n units from src to dest. +

    +

    This function is similar to memcpy, except that it operates on +Unicode strings. +

    + +
    +
    Function: uint8_t * u8_move (uint8_t *dest, const uint8_t *src, size_t n) + +
    +
    Function: uint16_t * u16_move (uint16_t *dest, const uint16_t *src, size_t n) + +
    +
    Function: uint32_t * u32_move (uint32_t *dest, const uint32_t *src, size_t n) + +
    +

    Copies n units from src to dest, guaranteeing correct +behavior for overlapping memory areas. +

    +

    This function is similar to memmove, except that it operates on +Unicode strings. +

    + +

    The following function fills a Unicode string. +

    +
    +
    Function: uint8_t * u8_set (uint8_t *s, ucs4_t uc, size_t n) + +
    +
    Function: uint16_t * u16_set (uint16_t *s, ucs4_t uc, size_t n) + +
    +
    Function: uint32_t * u32_set (uint32_t *s, ucs4_t uc, size_t n) + +
    +

    Sets the first n characters of s to uc. uc should be +a character that occupies only 1 unit. +

    +

    This function is similar to memset, except that it operates on +Unicode strings. +

    + + +

    The following function compares two Unicode strings of the same length. +

    +
    +
    Function: int u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n) + +
    +
    Function: int u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n) + +
    +
    Function: int u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n) + +
    +

    Compares s1 and s2, each of length n, lexicographically. +Returns a negative value if s1 compares smaller than s2, +a positive value if s1 compares larger than s2, or 0 if +they compare equal. +

    +

    This function is similar to memcmp, except that it operates on +Unicode strings. +

    + +

    The following function compares two Unicode strings of possibly different +lengths. +

    +
    +
    Function: int u8_cmp2 (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2) + +
    +
    Function: int u16_cmp2 (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2) + +
    +
    Function: int u32_cmp2 (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2) + +
    +

    Compares s1 and s2, lexicographically. +Returns a negative value if s1 compares smaller than s2, +a positive value if s1 compares larger than s2, or 0 if +they compare equal. +

    +

    This function is similar to the gnulib function memcmp2, except that it +operates on Unicode strings. +

    + + +

    The following function searches for a given Unicode character. +

    +
    +
    Function: uint8_t * u8_chr (const uint8_t *s, size_t n, ucs4_t uc) + +
    +
    Function: uint16_t * u16_chr (const uint16_t *s, size_t n, ucs4_t uc) + +
    +
    Function: uint32_t * u32_chr (const uint32_t *s, size_t n, ucs4_t uc) + +
    +

    Searches the string at s for uc. Returns a pointer to the first +occurrence of uc in s, or NULL if uc does not occur in +s. +

    +

    This function is similar to memchr, except that it operates on +Unicode strings. +

    + + +

    The following function counts the number of Unicode characters. +

    +
    +
    Function: size_t u8_mbsnlen (const uint8_t *s, size_t n) + +
    +
    Function: size_t u16_mbsnlen (const uint16_t *s, size_t n) + +
    +
    Function: size_t u32_mbsnlen (const uint32_t *s, size_t n) + +
    +

    Counts and returns the number of Unicode characters in the n units +from s. +

    +

    This function is similar to the gnulib function mbsnlen, except that +it operates on Unicode strings. +

    + +
    + + +

    4.4 Elementary string functions with memory allocation

    + +

    The following function copies a Unicode string. +

    +
    +
    Function: uint8_t * u8_cpy_alloc (const uint8_t *s, size_t n) + +
    +
    Function: uint16_t * u16_cpy_alloc (const uint16_t *s, size_t n) + +
    +
    Function: uint32_t * u32_cpy_alloc (const uint32_t *s, size_t n) + +
    +

    Makes a freshly allocated copy of s, of length n. +

    + +
    + + +

    4.5 Elementary string functions on NUL terminated strings

    + +

    The following functions inspect and return details about the first character +in a Unicode string. +

    +
    +
    Function: int u8_strmblen (const uint8_t *s) + +
    +
    Function: int u16_strmblen (const uint16_t *s) + +
    +
    Function: int u32_strmblen (const uint32_t *s) + +
    +

    Returns the length (number of units) of the first character in s. +Returns 0 if it is the NUL character. Returns -1 upon failure. +

    + + +
    +
    Function: int u8_strmbtouc (ucs4_t *puc, const uint8_t *s) + +
    +
    Function: int u16_strmbtouc (ucs4_t *puc, const uint16_t *s) + +
    +
    Function: int u32_strmbtouc (ucs4_t *puc, const uint32_t *s) + +
    +

    Returns the length (number of units) of the first character in s, +putting its ucs4_t representation in *puc. Returns 0 +if it is the NUL character. Returns -1 upon failure. +

    + +
    +
    Function: const uint8_t * u8_next (ucs4_t *puc, const uint8_t *s) + +
    +
    Function: const uint16_t * u16_next (ucs4_t *puc, const uint16_t *s) + +
    +
    Function: const uint32_t * u32_next (ucs4_t *puc, const uint32_t *s) + +
    +

    Forward iteration step. Advances the pointer past the next character, +or returns NULL if the end of the string has been reached. Puts the +character's ucs4_t representation in *puc. +

    + +

    The following function inspects and returns details about the previous +character in a Unicode string. +

    +
    +
    Function: const uint8_t * u8_prev (ucs4_t *puc, const uint8_t *s, const uint8_t *start) + +
    +
    Function: const uint16_t * u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start) + +
    +
    Function: const uint32_t * u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start) + +
    +

    Backward iteration step. Advances the pointer to point to the previous +character, or returns NULL if the beginning of the string had been reached. +Puts the character's ucs4_t representation in *puc. +

    + +

    The following functions determine the length of a Unicode string. +

    +
    +
    Function: size_t u8_strlen (const uint8_t *s) + +
    +
    Function: size_t u16_strlen (const uint16_t *s) + +
    +
    Function: size_t u32_strlen (const uint32_t *s) + +
    +

    Returns the number of units in s. +

    +

    This function is similar to strlen and wcslen, except +that it operates on Unicode strings. +

    + +
    +
    Function: size_t u8_strnlen (const uint8_t *s, size_t maxlen) + +
    +
    Function: size_t u16_strnlen (const uint16_t *s, size_t maxlen) + +
    +
    Function: size_t u32_strnlen (const uint32_t *s, size_t maxlen) + +
    +

    Returns the number of units in s, but at most maxlen. +

    +

    This function is similar to strnlen and wcsnlen, except +that it operates on Unicode strings. +

    + + +

    The following functions copy portions of Unicode strings in memory. +

    +
    +
    Function: uint8_t * u8_strcpy (uint8_t *dest, const uint8_t *src) + +
    +
    Function: uint16_t * u16_strcpy (uint16_t *dest, const uint16_t *src) + +
    +
    Function: uint32_t * u32_strcpy (uint32_t *dest, const uint32_t *src) + +
    +

    Copies src to dest. +

    +

    This function is similar to strcpy and wcscpy, except +that it operates on Unicode strings. +

    + +
    +
    Function: uint8_t * u8_stpcpy (uint8_t *dest, const uint8_t *src) + +
    +
    Function: uint16_t * u16_stpcpy (uint16_t *dest, const uint16_t *src) + +
    +
    Function: uint32_t * u32_stpcpy (uint32_t *dest, const uint32_t *src) + +
    +

    Copies src to dest, returning the address of the terminating NUL +in dest. +

    +

    This function is similar to stpcpy, except that it operates on +Unicode strings. +

    + +
    +
    Function: uint8_t * u8_strncpy (uint8_t *dest, const uint8_t *src, size_t n) + +
    +
    Function: uint16_t * u16_strncpy (uint16_t *dest, const uint16_t *src, size_t n) + +
    +
    Function: uint32_t * u32_strncpy (uint32_t *dest, const uint32_t *src, size_t n) + +
    +

    Copies no more than n units of src to dest. +

    +

    This function is similar to strncpy and wcsncpy, except +that it operates on Unicode strings. +

    + +
    +
    Function: uint8_t * u8_stpncpy (uint8_t *dest, const uint8_t *src, size_t n) + +
    +
    Function: uint16_t * u16_stpncpy (uint16_t *dest, const uint16_t *src, size_t n) + +
    +
    Function: uint32_t * u32_stpncpy (uint32_t *dest, const uint32_t *src, size_t n) + +
    +

    Copies no more than n units of src to dest, returning the +address of the last unit written into dest. +

    +

    This function is similar to stpncpy, except that it operates on +Unicode strings. +

    + +
    +
    Function: uint8_t * u8_strcat (uint8_t *dest, const uint8_t *src) + +
    +
    Function: uint16_t * u16_strcat (uint16_t *dest, const uint16_t *src) + +
    +
    Function: uint32_t * u32_strcat (uint32_t *dest, const uint32_t *src) + +
    +

    Appends src onto dest. +

    +

    This function is similar to strcat and wcscat, except +that it operates on Unicode strings. +

    + +
    +
    Function: uint8_t * u8_strncat (uint8_t *dest, const uint8_t *src, size_t n) + +
    +
    Function: uint16_t * u16_strncat (uint16_t *dest, const uint16_t *src, size_t n) + +
    +
    Function: uint32_t * u32_strncat (uint32_t *dest, const uint32_t *src, size_t n) + +
    +

    Appends no more than n units of src onto dest. +

    +

    This function is similar to strncat and wcsncat, except +that it operates on Unicode strings. +

    + + +

    The following functions compare two Unicode strings. +

    +
    +
    Function: int u8_strcmp (const uint8_t *s1, const uint8_t *s2) + +
    +
    Function: int u16_strcmp (const uint16_t *s1, const uint16_t *s2) + +
    +
    Function: int u32_strcmp (const uint32_t *s1, const uint32_t *s2) + +
    +

    Compares s1 and s2, lexicographically. +Returns a negative value if s1 compares smaller than s2, +a positive value if s1 compares larger than s2, or 0 if +they compare equal. +

    +

    This function is similar to strcmp and wcscmp, except +that it operates on Unicode strings. +

    + + +
    +
    Function: int u8_strcoll (const uint8_t *s1, const uint8_t *s2) + +
    +
    Function: int u16_strcoll (const uint16_t *s1, const uint16_t *s2) + +
    +
    Function: int u32_strcoll (const uint32_t *s1, const uint32_t *s2) + +
    +

    Compares s1 and s2 using the collation rules of the current +locale. +Returns -1 if s1 < s2, 0 if s1 = s2, 1 if +s1 > s2. Upon failure, sets errno and returns any value. +

    +

    This function is similar to strcoll and wcscoll, except +that it operates on Unicode strings. +

    +

    Note that this function may consider different canonical normalizations +of the same string as having a large distance. It is therefore better to +use the function u8_normcoll instead of this one; see Normalization forms (composition and decomposition) <uninorm.h>. +

    + +
    +
    Function: int u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n) + +
    +
    Function: int u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n) + +
    +
    Function: int u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n) + +
    +

    Compares no more than n units of s1 and s2. +

    +

    This function is similar to strncmp and wcsncmp, except +that it operates on Unicode strings. +

    + + +

    The following function allocates a duplicate of a Unicode string. +

    +
    +
    Function: uint8_t * u8_strdup (const uint8_t *s) + +
    +
    Function: uint16_t * u16_strdup (const uint16_t *s) + +
    +
    Function: uint32_t * u32_strdup (const uint32_t *s) + +
    +

    Duplicates s, returning an identical malloc'd string. +

    +

    This function is similar to strdup and wcsdup, except +that it operates on Unicode strings. +

    + + +

    The following functions search for a given Unicode character. +

    +
    +
    Function: uint8_t * u8_strchr (const uint8_t *str, ucs4_t uc) + +
    +
    Function: uint16_t * u16_strchr (const uint16_t *str, ucs4_t uc) + +
    +
    Function: uint32_t * u32_strchr (const uint32_t *str, ucs4_t uc) + +
    +

    Finds the first occurrence of uc in str. +

    +

    This function is similar to strchr and wcschr, except +that it operates on Unicode strings. +

    + +
    +
    Function: uint8_t * u8_strrchr (const uint8_t *str, ucs4_t uc) + +
    +
    Function: uint16_t * u16_strrchr (const uint16_t *str, ucs4_t uc) + +
    +
    Function: uint32_t * u32_strrchr (const uint32_t *str, ucs4_t uc) + +
    +

    Finds the last occurrence of uc in str. +

    +

    This function is similar to strrchr and wcsrchr, except +that it operates on Unicode strings. +

    + +

    The following functions search for the first occurrence of some Unicode +character in or outside a given set of Unicode characters. +

    +
    +
    Function: size_t u8_strcspn (const uint8_t *str, const uint8_t *reject) + +
    +
    Function: size_t u16_strcspn (const uint16_t *str, const uint16_t *reject) + +
    +
    Function: size_t u32_strcspn (const uint32_t *str, const uint32_t *reject) + +
    +

    Returns the length of the initial segment of str which consists entirely +of Unicode characters not in reject. +

    +

    This function is similar to strcspn and wcscspn, except +that it operates on Unicode strings. +

    + +
    +
    Function: size_t u8_strspn (const uint8_t *str, const uint8_t *accept) + +
    +
    Function: size_t u16_strspn (const uint16_t *str, const uint16_t *accept) + +
    +
    Function: size_t u32_strspn (const uint32_t *str, const uint32_t *accept) + +
    +

    Returns the length of the initial segment of str which consists entirely +of Unicode characters in accept. +

    +

    This function is similar to strspn and wcsspn, except +that it operates on Unicode strings. +

    + +
    +
    Function: uint8_t * u8_strpbrk (const uint8_t *str, const uint8_t *accept) + +
    +
    Function: uint16_t * u16_strpbrk (const uint16_t *str, const uint16_t *accept) + +
    +
    Function: uint32_t * u32_strpbrk (const uint32_t *str, const uint32_t *accept) + +
    +

    Finds the first occurrence in str of any character in accept. +

    +

    This function is similar to strpbrk and wcspbrk, except +that it operates on Unicode strings. +

    + + +

    The following functions search whether a given Unicode string is a substring +of another Unicode string. +

    +
    +
    Function: uint8_t * u8_strstr (const uint8_t *haystack, const uint8_t *needle) + +
    +
    Function: uint16_t * u16_strstr (const uint16_t *haystack, const uint16_t *needle) + +
    +
    Function: uint32_t * u32_strstr (const uint32_t *haystack, const uint32_t *needle) + +
    +

    Finds the first occurrence of needle in haystack. +

    +

    This function is similar to strstr and wcsstr, except +that it operates on Unicode strings. +

    + +
    +
    Function: bool u8_startswith (const uint8_t *str, const uint8_t *prefix) + +
    +
    Function: bool u16_startswith (const uint16_t *str, const uint16_t *prefix) + +
    +
    Function: bool u32_startswith (const uint32_t *str, const uint32_t *prefix) + +
    +

    Tests whether str starts with prefix. +

    + +
    +
    Function: bool u8_endswith (const uint8_t *str, const uint8_t *suffix) + +
    +
    Function: bool u16_endswith (const uint16_t *str, const uint16_t *suffix) + +
    +
    Function: bool u32_endswith (const uint32_t *str, const uint32_t *suffix) + +
    +

    Tests whether str ends with suffix. +

    + +

    The following function does one step in tokenizing a Unicode string. +

    +
    +
    Function: uint8_t * u8_strtok (uint8_t *str, const uint8_t *delim, uint8_t **ptr) + +
    +
    Function: uint16_t * u16_strtok (uint16_t *str, const uint16_t *delim, uint16_t **ptr) + +
    +
    Function: uint32_t * u32_strtok (uint32_t *str, const uint32_t *delim, uint32_t **ptr) + +
    +

    Divides str into tokens separated by characters in delim. +

    +

    This function is similar to strtok_r and wcstok, except +that it operates on Unicode strings. Its interface is actually more similar to +wcstok than to strtok. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_5.html b/doc/libunistring_5.html new file mode 100644 index 00000000..92e115f9 --- /dev/null +++ b/doc/libunistring_5.html @@ -0,0 +1,296 @@ + + + + + +GNU libunistring: 5. Conversions between Unicode and encodings <uniconv.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    5. Conversions between Unicode and encodings <uniconv.h>

    + +

    This include file declares functions for converting between Unicode strings +and char * strings in locale encoding or in other specified encodings. +

    + +

    The following function returns the locale encoding. +

    +
    +
    Function: const char * locale_charset () + +
    +

    Determines the current locale's character encoding, and canonicalizes it +into one of the canonical names listed in ‘config.charset’. +If the canonical name cannot be determined, the result is a non-canonical +name. +

    +

    The result must not be freed; it is statically allocated. +

    +

    The result of this function can be used as an argument to the iconv_open +function in GNU libc, in GNU libiconv, or in the gnulib provided wrapper +around the native iconv_open function. It may not work as an argument +to the native iconv_open function directly. +

    + +

    The handling of unconvertible characters during the conversions can be +parametrized through the following enumeration type: +

    +
    +
    Type: enum iconv_ilseq_handler + +
    +

    This type specifies how unconvertible characters in the input are handled. +

    + +
    +
    Constant: enum iconv_ilseq_handler iconveh_error + +
    +

    This handler causes the function to return with errno set to +EILSEQ. +

    + +
    +
    Constant: enum iconv_ilseq_handler iconveh_question_mark + +
    +

    This handler produces one question mark ‘?’ per unconvertible character. +

    + +
    +
    Constant: enum iconv_ilseq_handler iconveh_escape_sequence + +
    +

    This handler produces an escape sequence \uxxxx or +\Uxxxxxxxx for each unconvertible character. +

    + + +

    The following functions convert between strings in a specified encoding and +Unicode strings. +

    +
    +
    Function: uint8_t * u8_conv_from_encoding (const char *fromcode, enum iconv_ilseq_handler handler, const char *src, size_t srclen, size_t *offsets, uint8_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint16_t * u16_conv_from_encoding (const char *fromcode, enum iconv_ilseq_handler handler, const char *src, size_t srclen, size_t *offsets, uint16_t *resultbuf, size_t *lengthp) + +
    +
    Function: uint32_t * u32_conv_from_encoding (const char *fromcode, enum iconv_ilseq_handler handler, const char *src, size_t srclen, size_t *offsets, uint32_t *resultbuf, size_t *lengthp) + +
    +

    Converts an entire string, possibly including NUL bytes, from one encoding +to UTF-8 encoding. +

    +

    Converts a memory region given in encoding fromcode. fromcode is +as for the iconv_open function. +

    +

    The input is in the memory region between src (inclusive) and +src + srclen (exclusive). +

    +

    If offsets is not NULL, it should point to an array of srclen +integers; this array is filled with offsets into the result, i.e. the +character starting at src[i] corresponds to the character starting +at result[offsets[i]], and other offsets are set to +(size_t)(-1). +

    +

    resultbuf and *lengthp should be a scratch +buffer and its size, or resultbuf can be NULL. +

    +

    May erase the contents of the memory at resultbuf. +

    +

    If successful: The resulting Unicode string (non-NULL) is returned and +its length stored in *lengthp. The resulting string is +resultbuf if no dynamic memory allocation was necessary, +or a freshly allocated memory block otherwise. +

    +

    In case of error: NULL is returned and errno is set. +Particular errno values: EINVAL, EILSEQ, ENOMEM. +

    + +
    +
    Function: char * u8_conv_to_encoding (const char *tocode, enum iconv_ilseq_handler handler, const uint8_t *src, size_t srclen, size_t *offsets, char *resultbuf, size_t *lengthp) + +
    +
    Function: char * u16_conv_to_encoding (const char *tocode, enum iconv_ilseq_handler handler, const uint16_t *src, size_t srclen, size_t *offsets, char *resultbuf, size_t *lengthp) + +
    +
    Function: char * u32_conv_to_encoding (const char *tocode, enum iconv_ilseq_handler handler, const uint32_t *src, size_t srclen, size_t *offsets, char *resultbuf, size_t *lengthp) + +
    +

    Converts an entire Unicode string, possibly including NUL units, from UTF-8 +encoding to a given encoding. +

    +

    Converts a memory region to encoding tocode. tocode is as for +the iconv_open function. +

    +

    The input is in the memory region between src (inclusive) and +src + srclen (exclusive). +

    +

    If offsets is not NULL, it should point to an array of srclen +integers; this array is filled with offsets into the result, i.e. the +character starting at src[i] corresponds to the character starting +at result[offsets[i]], and other offsets are set to +(size_t)(-1). +

    +

    resultbuf and *lengthp should be a scratch +buffer and its size, or resultbuf can be NULL. +

    +

    May erase the contents of the memory at resultbuf. +

    +

    If successful: The resulting Unicode string (non-NULL) is returned and +its length stored in *lengthp. The resulting string is +resultbuf if no dynamic memory allocation was necessary, +or a freshly allocated memory block otherwise. +

    +

    In case of error: NULL is returned and errno is set. +Particular errno values: EINVAL, EILSEQ, ENOMEM. +

    + +

    The following functions convert between NUL terminated strings in a specified +encoding and NUL terminated Unicode strings. +

    +
    +
    Function: uint8_t * u8_strconv_from_encoding (const char *string, const char *fromcode, enum iconv_ilseq_handler handler) + +
    +
    Function: uint16_t * u16_strconv_from_encoding (const char *string, const char *fromcode, enum iconv_ilseq_handler handler) + +
    +
    Function: uint32_t * u32_strconv_from_encoding (const char *string, const char *fromcode, enum iconv_ilseq_handler handler) + +
    +

    Converts a NUL terminated string from a given encoding. +

    +

    The result is malloc allocated, or NULL (with errno set) in case of error. +

    +

    Particular errno values: EILSEQ, ENOMEM. +

    + +
    +
    Function: char * u8_strconv_to_encoding (const uint8_t *string, const char *tocode, enum iconv_ilseq_handler handler) + +
    +
    Function: char * u16_strconv_to_encoding (const uint16_t *string, const char *tocode, enum iconv_ilseq_handler handler) + +
    +
    Function: char * u32_strconv_to_encoding (const uint32_t *string, const char *tocode, enum iconv_ilseq_handler handler) + +
    +

    Converts a NUL terminated string to a given encoding. +

    +

    The result is malloc allocated, or NULL (with errno set) in case of error. +

    +

    Particular errno values: EILSEQ, ENOMEM. +

    + +

    The following functions are shorthands that convert between NUL terminated +strings in locale encoding and NUL terminated Unicode strings. +

    +
    +
    Function: uint8_t * u8_strconv_from_locale (const char *string) + +
    +
    Function: uint16_t * u16_strconv_from_locale (const char *string) + +
    +
    Function: uint32_t * u32_strconv_from_locale (const char *string) + +
    +

    Converts a NUL terminated string from the locale encoding. +

    +

    The result is malloc allocated, or NULL (with errno set) in case of error. +

    +

    Particular errno values: ENOMEM. +

    + +
    +
    Function: char * u8_strconv_to_locale (const uint8_t *string) + +
    +
    Function: char * u16_strconv_to_locale (const uint16_t *string) + +
    +
    Function: char * u32_strconv_to_locale (const uint32_t *string) + +
    +

    Converts a NUL terminated string to the locale encoding. +

    +

    The result is malloc allocated, or NULL (with errno set) in case of error. +

    +

    Particular errno values: ENOMEM. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_6.html b/doc/libunistring_6.html new file mode 100644 index 00000000..33cda594 --- /dev/null +++ b/doc/libunistring_6.html @@ -0,0 +1,451 @@ + + + + + +GNU libunistring: 6. Output with Unicode strings <unistdio.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    6. Output with Unicode strings <unistdio.h>

    + +

    This include file declares functions for doing formatted output with Unicode +strings. It defines a set of functions similar to fprintf and +sprintf, which are declared in <stdio.h>. +

    +

    These functions work like the printf function family. +In the format string: +

      +
    • +The format directive ‘U’ takes an UTF-8 string (const uint8_t *). +
    • +The format directive ‘lU’ takes an UTF-16 string +(const uint16_t *). +
    • +The format directive ‘llU’ takes an UTF-32 string +(const uint32_t *). +
    + +

    A function name with an infix ‘v’ indicates that a va_list is +passed instead of multiple arguments. +

    +

    The functions *sprintf have a buf argument that is assumed to be +large enough. +(DANGEROUS! Overflowing the buffer will crash the program.) +

    +

    The functions *snprintf have a buf argument that is assumed to be +size units large. (DANGEROUS! The resulting string might be +truncated in the middle of a multibyte character.) +

    +

    The functions *asprintf have a resultp argument. The result will +be freshly allocated and stored in *resultp. +

    +

    The functions *asnprintf have a (resultbuf, lengthp) +argument pair. If resultbuf is not NULL and the result fits into +*lengthp units, it is put in resultbuf, and resultbuf +is returned. Otherwise, a freshly allocated string is returned. In both +cases, *lengthp is set to the length (number of units) of the +returned string. In case of error, NULL is returned and errno is set. +

    +

    The following functions take an ASCII format string and return a result that +is a char * string in locale encoding. +

    +
    +
    Function: int ulc_sprintf (char *buf, const char *format, ...) + +
    +
    + +
    +
    Function: int ulc_snprintf (char *buf, size_t size, const char *format, ...) + +
    +
    + +
    +
    Function: int ulc_asprintf (char **resultp, const char *format, ...) + +
    +
    + +
    +
    Function: char * ulc_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) + +
    +
    + +
    +
    Function: int ulc_vsprintf (char *buf, const char *format, va_list ap) + +
    +
    + +
    +
    Function: int ulc_vsnprintf (char *buf, size_t size, const char *format, va_list ap) + +
    +
    + +
    +
    Function: int ulc_vasprintf (char **resultp, const char *format, va_list ap) + +
    +
    + +
    +
    Function: char * ulc_vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list ap) + +
    +
    + +

    The following functions take an ASCII format string and return a result in +UTF-8 format. +

    +
    +
    Function: int u8_sprintf (uint8_t *buf, const char *format, ...) + +
    +
    +
    +
    Function: int u8_snprintf (uint8_t *buf, size_t size, const char *format, ...) + +
    +
    +
    +
    Function: int u8_asprintf (uint8_t **resultp, const char *format, ...) + +
    +
    +
    +
    Function: uint8_t * u8_asnprintf (uint8_t *resultbuf, size_t *lengthp, const char *format, ...) + +
    +
    +
    +
    Function: int u8_vsprintf (uint8_t *buf, const char *format, va_list ap) + +
    +
    +
    +
    Function: int u8_vsnprintf (uint8_t *buf, size_t size, const char *format, va_list ap) + +
    +
    +
    +
    Function: int u8_vasprintf (uint8_t **resultp, const char *format, va_list ap) + +
    +
    +
    +
    Function: uint8_t * u8_vasnprintf (uint8_t *resultbuf, size_t *lengthp, const char *format, va_list ap) + +
    +
    + +

    The following functions take an UTF-8 format string and return a result in +UTF-8 format. +

    +
    +
    Function: int u8_u8_sprintf (uint8_t *buf, const uint8_t *format, ...) + +
    +
    +
    +
    Function: int u8_u8_snprintf (uint8_t *buf, size_t size, const uint8_t *format, ...) + +
    +
    +
    +
    Function: int u8_u8_asprintf (uint8_t **resultp, const uint8_t *format, ...) + +
    +
    +
    +
    Function: uint8_t * u8_u8_asnprintf (uint8_t *resultbuf, size_t *lengthp, const uint8_t *format, ...) + +
    +
    +
    +
    Function: int u8_u8_vsprintf (uint8_t *buf, const uint8_t *format, va_list ap) + +
    +
    +
    +
    Function: int u8_u8_vsnprintf (uint8_t *buf, size_t size, const uint8_t *format, va_list ap) + +
    +
    +
    +
    Function: int u8_u8_vasprintf (uint8_t **resultp, const uint8_t *format, va_list ap) + +
    +
    +
    +
    Function: uint8_t * u8_u8_vasnprintf (uint8_t *resultbuf, size_t *lengthp, const uint8_t *format, va_list ap) + +
    +
    + +

    The following functions take an ASCII format string and return a result in +UTF-16 format. +

    +
    +
    Function: int u16_sprintf (uint16_t *buf, const char *format, ...) + +
    +
    +
    +
    Function: int u16_snprintf (uint16_t *buf, size_t size, const char *format, ...) + +
    +
    +
    +
    Function: int u16_asprintf (uint16_t **resultp, const char *format, ...) + +
    +
    +
    +
    Function: uint16_t * u16_asnprintf (uint16_t *resultbuf, size_t *lengthp, const char *format, ...) + +
    +
    +
    +
    Function: int u16_vsprintf (uint16_t *buf, const char *format, va_list ap) + +
    +
    +
    +
    Function: int u16_vsnprintf (uint16_t *buf, size_t size, const char *format, va_list ap) + +
    +
    +
    +
    Function: int u16_vasprintf (uint16_t **resultp, const char *format, va_list ap) + +
    +
    +
    +
    Function: uint16_t * u16_vasnprintf (uint16_t *resultbuf, size_t *lengthp, const char *format, va_list ap) + +
    +
    + +

    The following functions take an UTF-16 format string and return a result in +UTF-16 format. +

    +
    +
    Function: int u16_u16_sprintf (uint16_t *buf, const uint16_t *format, ...) + +
    +
    +
    +
    Function: int u16_u16_snprintf (uint16_t *buf, size_t size, const uint16_t *format, ...) + +
    +
    +
    +
    Function: int u16_u16_asprintf (uint16_t **resultp, const uint16_t *format, ...) + +
    +
    +
    +
    Function: uint16_t * u16_u16_asnprintf (uint16_t *resultbuf, size_t *lengthp, const uint16_t *format, ...) + +
    +
    +
    +
    Function: int u16_u16_vsprintf (uint16_t *buf, const uint16_t *format, va_list ap) + +
    +
    +
    +
    Function: int u16_u16_vsnprintf (uint16_t *buf, size_t size, const uint16_t *format, va_list ap) + +
    +
    +
    +
    Function: int u16_u16_vasprintf (uint16_t **resultp, const uint16_t *format, va_list ap) + +
    +
    +
    +
    Function: uint16_t * u16_u16_vasnprintf (uint16_t *resultbuf, size_t *lengthp, const uint16_t *format, va_list ap) + +
    +
    + +

    The following functions take an ASCII format string and return a result in +UTF-32 format. +

    +
    +
    Function: int u32_sprintf (uint32_t *buf, const char *format, ...) + +
    +
    +
    +
    Function: int u32_snprintf (uint32_t *buf, size_t size, const char *format, ...) + +
    +
    +
    +
    Function: int u32_asprintf (uint32_t **resultp, const char *format, ...) + +
    +
    +
    +
    Function: uint32_t * u32_asnprintf (uint32_t *resultbuf, size_t *lengthp, const char *format, ...) + +
    +
    +
    +
    Function: int u32_vsprintf (uint32_t *buf, const char *format, va_list ap) + +
    +
    +
    +
    Function: int u32_vsnprintf (uint32_t *buf, size_t size, const char *format, va_list ap) + +
    +
    +
    +
    Function: int u32_vasprintf (uint32_t **resultp, const char *format, va_list ap) + +
    +
    +
    +
    Function: uint32_t * u32_vasnprintf (uint32_t *resultbuf, size_t *lengthp, const char *format, va_list ap) + +
    +
    + +

    The following functions take an UTF-32 format string and return a result in +UTF-32 format. +

    +
    +
    Function: int u32_u32_sprintf (uint32_t *buf, const uint32_t *format, ...) + +
    +
    +
    +
    Function: int u32_u32_snprintf (uint32_t *buf, size_t size, const uint32_t *format, ...) + +
    +
    +
    +
    Function: int u32_u32_asprintf (uint32_t **resultp, const uint32_t *format, ...) + +
    +
    +
    +
    Function: uint32_t * u32_u32_asnprintf (uint32_t *resultbuf, size_t *lengthp, const uint32_t *format, ...) + +
    +
    +
    +
    Function: int u32_u32_vsprintf (uint32_t *buf, const uint32_t *format, va_list ap) + +
    +
    +
    +
    Function: int u32_u32_vsnprintf (uint32_t *buf, size_t size, const uint32_t *format, va_list ap) + +
    +
    +
    +
    Function: int u32_u32_vasprintf (uint32_t **resultp, const uint32_t *format, va_list ap) + +
    +
    +
    +
    Function: uint32_t * u32_u32_vasnprintf (uint32_t *resultbuf, size_t *lengthp, const uint32_t *format, va_list ap) + +
    +
    + +

    The following functions take an ASCII format string and produce output in +locale encoding to a FILE stream. +

    +
    +
    Function: int ulc_fprintf (FILE *stream, const char *format, ...) + +
    +
    +
    +
    Function: int ulc_vfprintf (FILE *stream, const char *format, va_list ap) + +
    +
    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_7.html b/doc/libunistring_7.html new file mode 100644 index 00000000..6fe526d9 --- /dev/null +++ b/doc/libunistring_7.html @@ -0,0 +1,125 @@ + + + + + +GNU libunistring: 7. Names of Unicode characters <uniname.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    7. Names of Unicode characters <uniname.h>

    + +

    This include file implements the association between a Unicode character and +its name. +

    +

    The name of a Unicode character allows to distinguish it from other, similar +looking characters. For example, the character ‘x’ has the name +"LATIN SMALL LETTER X" and is therefore different from the character +named "MULTIPLICATION SIGN". +

    +
    +
    Macro: unsigned int UNINAME_MAX + +
    +

    This macro expands to a constant that is the required size of buffer for a +Unicode character name. +

    + +
    +
    Function: char * unicode_character_name (ucs4_t uc, char *buf) + +
    +

    Looks up the name of a Unicode character, in uppercase ASCII. +buf must point to a buffer, at least UNINAME_MAX bytes in size. +Returns the filled buf, or NULL if the character does not have a name. +

    + +
    +
    Function: ucs4_t unicode_name_character (const char *name) + +
    +

    Looks up the Unicode character with a given name, in upper- or lowercase +ASCII. Returns the character if found, or UNINAME_INVALID if not found. +

    + +
    +
    Macro: ucs4_t UNINAME_INVALID + +
    +

    This macro expands to a constant that is a special return value of the +unicode_name_character function. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_8.html b/doc/libunistring_8.html new file mode 100644 index 00000000..def5e04a --- /dev/null +++ b/doc/libunistring_8.html @@ -0,0 +1,2071 @@ + + + + + +GNU libunistring: 8. Unicode character classification and properties <unictype.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    8. Unicode character classification and properties <unictype.h>

    + +

    This include file declares functions that classify Unicode characters +and that test whether Unicode characters have specific properties. +

    +

    The classification assigns a “general category” to every Unicode +character. This is similar to the classification provided by ISO C in +<wctype.h>. +

    +

    Properties are the data that guides various text processing algorithms +in the presence of specific Unicode characters. +

    + +
    + + +

    8.1 General category

    + +

    Every Unicode character or code point has a general category assigned +to it. This classification is important for most algorithms that work on +Unicode text. +

    +

    The GNU libunistring library provides two kinds of API for working with +general categories. The object oriented API uses a variable to denote +every predefined general category value or combinations thereof. The +low-level API uses a bit mask instead. The advantage of the object oriented +API is that if only a few predefined general category values are used, +the data tables are relatively small. When you combine general category +values (using uc_general_category_or, uc_general_category_and, +or uc_general_category_and_not), or when you use the low level +bit masks, a big table is used thats holds the complete general category +information for all Unicode characters. +

    + +
    + + +

    8.1.1 The object oriented API for general category

    + +
    +
    Type: uc_general_category_t + +
    +

    This data type denotes a general category value. It is an immediate type that +can be copied by simple assignment, without involving memory allocation. It is +not an array type. +

    + +

    The following are the predefined general category value. Additional general +categories may be added in the future. +

    +
    +
    Constant: uc_general_category_t UC_CATEGORY_L + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Lu + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Ll + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Lt + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Lm + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Lo + +
    +
    Constant: uc_general_category_t UC_CATEGORY_M + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Mn + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Mc + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Me + +
    +
    Constant: uc_general_category_t UC_CATEGORY_N + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Nd + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Nl + +
    +
    Constant: uc_general_category_t UC_CATEGORY_No + +
    +
    Constant: uc_general_category_t UC_CATEGORY_P + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Pc + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Pd + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Ps + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Pe + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Pi + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Pf + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Po + +
    +
    Constant: uc_general_category_t UC_CATEGORY_S + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Sm + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Sc + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Sk + +
    +
    Constant: uc_general_category_t UC_CATEGORY_So + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Z + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Zs + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Zl + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Zp + +
    +
    Constant: uc_general_category_t UC_CATEGORY_C + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Cc + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Cf + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Cs + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Co + +
    +
    Constant: uc_general_category_t UC_CATEGORY_Cn + +
    +
    + +

    The following are alias names for predefined General category values. +

    +
    +
    Macro: uc_general_category_t UC_LETTER + +
    +

    This is another name for UC_CATEGORY_L. +

    + +
    +
    Macro: uc_general_category_t UC_UPPERCASE_LETTER + +
    +

    This is another name for UC_CATEGORY_Lu. +

    + +
    +
    Macro: uc_general_category_t UC_LOWERCASE_LETTER + +
    +

    This is another name for UC_CATEGORY_Ll. +

    + +
    +
    Macro: uc_general_category_t UC_TITLECASE_LETTER + +
    +

    This is another name for UC_CATEGORY_Lt. +

    + +
    +
    Macro: uc_general_category_t UC_MODIFIER_LETTER + +
    +

    This is another name for UC_CATEGORY_Lm. +

    + +
    +
    Macro: uc_general_category_t UC_OTHER_LETTER + +
    +

    This is another name for UC_CATEGORY_Lo. +

    + +
    +
    Macro: uc_general_category_t UC_MARK + +
    +

    This is another name for UC_CATEGORY_M. +

    + +
    +
    Macro: uc_general_category_t UC_NON_SPACING_MARK + +
    +

    This is another name for UC_CATEGORY_Mn. +

    + +
    +
    Macro: uc_general_category_t UC_COMBINING_SPACING_MARK + +
    +

    This is another name for UC_CATEGORY_Mc. +

    + +
    +
    Macro: uc_general_category_t UC_ENCLOSING_MARK + +
    +

    This is another name for UC_CATEGORY_Me. +

    + +
    +
    Macro: uc_general_category_t UC_NUMBER + +
    +

    This is another name for UC_CATEGORY_N. +

    + +
    +
    Macro: uc_general_category_t UC_DECIMAL_DIGIT_NUMBER + +
    +

    This is another name for UC_CATEGORY_Nd. +

    + +
    +
    Macro: uc_general_category_t UC_LETTER_NUMBER + +
    +

    This is another name for UC_CATEGORY_Nl. +

    + +
    +
    Macro: uc_general_category_t UC_OTHER_NUMBER + +
    +

    This is another name for UC_CATEGORY_No. +

    + +
    +
    Macro: uc_general_category_t UC_PUNCTUATION + +
    +

    This is another name for UC_CATEGORY_P. +

    + +
    +
    Macro: uc_general_category_t UC_CONNECTOR_PUNCTUATION + +
    +

    This is another name for UC_CATEGORY_Pc. +

    + +
    +
    Macro: uc_general_category_t UC_DASH_PUNCTUATION + +
    +

    This is another name for UC_CATEGORY_Pd. +

    + +
    +
    Macro: uc_general_category_t UC_OPEN_PUNCTUATION + +
    +

    This is another name for UC_CATEGORY_Ps (“start punctuation”). +

    + +
    +
    Macro: uc_general_category_t UC_CLOSE_PUNCTUATION + +
    +

    This is another name for UC_CATEGORY_Pe (“end punctuation”). +

    + +
    +
    Macro: uc_general_category_t UC_INITIAL_QUOTE_PUNCTUATION + +
    +

    This is another name for UC_CATEGORY_Pi. +

    + +
    +
    Macro: uc_general_category_t UC_FINAL_QUOTE_PUNCTUATION + +
    +

    This is another name for UC_CATEGORY_Pf. +

    + +
    +
    Macro: uc_general_category_t UC_OTHER_PUNCTUATION + +
    +

    This is another name for UC_CATEGORY_Po. +

    + +
    +
    Macro: uc_general_category_t UC_SYMBOL + +
    +

    This is another name for UC_CATEGORY_S. +

    + +
    +
    Macro: uc_general_category_t UC_MATH_SYMBOL + +
    +

    This is another name for UC_CATEGORY_Sm. +

    + +
    +
    Macro: uc_general_category_t UC_CURRENCY_SYMBOL + +
    +

    This is another name for UC_CATEGORY_Sc. +

    + +
    +
    Macro: uc_general_category_t UC_MODIFIER_SYMBOL + +
    +

    This is another name for UC_CATEGORY_Sk. +

    + +
    +
    Macro: uc_general_category_t UC_OTHER_SYMBOL + +
    +

    This is another name for UC_CATEGORY_So. +

    + +
    +
    Macro: uc_general_category_t UC_SEPARATOR + +
    +

    This is another name for UC_CATEGORY_Z. +

    + +
    +
    Macro: uc_general_category_t UC_SPACE_SEPARATOR + +
    +

    This is another name for UC_CATEGORY_Zs. +

    + +
    +
    Macro: uc_general_category_t UC_LINE_SEPARATOR + +
    +

    This is another name for UC_CATEGORY_Zl. +

    + +
    +
    Macro: uc_general_category_t UC_PARAGRAPH_SEPARATOR + +
    +

    This is another name for UC_CATEGORY_Zp. +

    + +
    +
    Macro: uc_general_category_t UC_OTHER + +
    +

    This is another name for UC_CATEGORY_C. +

    + +
    +
    Macro: uc_general_category_t UC_CONTROL + +
    +

    This is another name for UC_CATEGORY_Cc. +

    + +
    +
    Macro: uc_general_category_t UC_FORMAT + +
    +

    This is another name for UC_CATEGORY_Cf. +

    + +
    +
    Macro: uc_general_category_t UC_SURROGATE + +
    +

    This is another name for UC_CATEGORY_Cs. All code points in this +category are invalid characters. +

    + +
    +
    Macro: uc_general_category_t UC_PRIVATE_USE + +
    +

    This is another name for UC_CATEGORY_Co. +

    + +
    +
    Macro: uc_general_category_t UC_UNASSIGNED + +
    +

    This is another name for UC_CATEGORY_Cn. Some code points in this +category are invalid characters. +

    + +

    The following functions combine general categories, like in a boolean algebra, +except that there is no ‘not’ operation. +

    +
    +
    Function: uc_general_category_t uc_general_category_or (uc_general_category_t category1, uc_general_category_t category2) + +
    +

    Returns the union of two general categories. +This corresponds to the unions of the two sets of characters. +

    + +
    +
    Function: uc_general_category_t uc_general_category_and (uc_general_category_t category1, uc_general_category_t category2) + +
    +

    Returns the intersection of two general categories as bit masks. +This does not correspond to the intersection of the two sets of +characters. +

    + +
    +
    Function: uc_general_category_t uc_general_category_and_not (uc_general_category_t category1, uc_general_category_t category2) + +
    +

    Returns the intersection of a general category with the complement of a +second general category, as bit masks. +This does not correspond to the intersection with complement, when +viewing the categories as sets of characters. +

    + +

    The following functions associate general categories with their name. +

    +
    +
    Function: const char * uc_general_category_name (uc_general_category_t category) + +
    +

    Returns the name of a general category. +Returns NULL if the general category corresponds to a bit mask that does not +have a name. +

    + +
    +
    Function: uc_general_category_t uc_general_category_byname (const char *category_name) + +
    +

    Returns the general category given by name, e.g. "Lu". +

    + +

    The following functions view general categories as sets of Unicode characters. +

    +
    +
    Function: uc_general_category_t uc_general_category (ucs4_t uc) + +
    +

    Returns the general category of a Unicode character. +

    +

    This function uses a big table. +

    + +
    +
    Function: bool uc_is_general_category (ucs4_t uc, uc_general_category_t category) + +
    +

    Tests whether a Unicode character belongs to a given category. +The category argument can be a predefined general category or the +combination of several predefined general categories. +

    + +
    + + +

    8.1.2 The bit mask API for general category

    + +

    The following are the predefined general category value as bit masks. +Additional general categories may be added in the future. +

    +
    +
    Macro: uint32_t UC_CATEGORY_MASK_L + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Lu + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Ll + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Lt + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Lm + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Lo + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_M + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Mn + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Mc + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Me + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_N + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Nd + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Nl + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_No + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_P + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Pc + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Pd + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Ps + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Pe + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Pi + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Pf + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Po + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_S + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Sm + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Sc + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Sk + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_So + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Z + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Zs + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Zl + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Zp + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_C + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Cc + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Cf + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Cs + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Co + +
    +
    Macro: uint32_t UC_CATEGORY_MASK_Cn + +
    +
    + +

    The following function views general categories as sets of Unicode characters. +

    +
    +
    Function: bool uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask) + +
    +

    Tests whether a Unicode character belongs to a given category. +The bitmask argument can be a predefined general category bitmask or the +combination of several predefined general category bitmasks. +

    +

    This function uses a big table comprising all general categories. +

    + +
    + + +

    8.2 Canonical combining class

    + +

    Every Unicode character or code point has a canonical combining class +assigned to it. +

    +

    What is the meaning of the canonical combining class? Essentially, it +indicates the priority with which a combining character is attached to its +base character. The characters for which the canonical combining class is 0 +are the base characters, and the characters for which it is greater than 0 are +the combining characters. Combining characters are rendered +near/attached/around their base character, and combining characters with small +combining classes are attached "first" or "closer" to the base character. +

    +

    The canonical combining class of a character is a number in the range +0..255. The possible values are described in the Unicode Character Database +http://www.unicode.org/Public/UNIDATA/UCD.html. The list here is +not definitive; more values can be added in future versions. +

    +
    +
    Constant: int UC_CCC_NR + +
    +

    The canonical combining class value for “Not Reordered” characters. +The value is 0. +

    + +
    +
    Constant: int UC_CCC_OV + +
    +

    The canonical combining class value for “Overlay” characters. +

    + +
    +
    Constant: int UC_CCC_NK + +
    +

    The canonical combining class value for “Nukta” characters. +

    + +
    +
    Constant: int UC_CCC_KV + +
    +

    The canonical combining class value for “Kana Voicing” characters. +

    + +
    +
    Constant: int UC_CCC_VR + +
    +

    The canonical combining class value for “Virama” characters. +

    + +
    +
    Constant: int UC_CCC_ATBL + +
    +

    The canonical combining class value for “Attached Below Left” characters. +

    + +
    +
    Constant: int UC_CCC_ATB + +
    +

    The canonical combining class value for “Attached Below” characters. +

    + +
    +
    Constant: int UC_CCC_ATAR + +
    +

    The canonical combining class value for “Attached Above Right” characters. +

    + +
    +
    Constant: int UC_CCC_BL + +
    +

    The canonical combining class value for “Below Left” characters. +

    + +
    +
    Constant: int UC_CCC_B + +
    +

    The canonical combining class value for “Below” characters. +

    + +
    +
    Constant: int UC_CCC_BR + +
    +

    The canonical combining class value for “Below Right” characters. +

    + +
    +
    Constant: int UC_CCC_L + +
    +

    The canonical combining class value for “Left” characters. +

    + +
    +
    Constant: int UC_CCC_R + +
    +

    The canonical combining class value for “Right” characters. +

    + +
    +
    Constant: int UC_CCC_AL + +
    +

    The canonical combining class value for “Above Left” characters. +

    + +
    +
    Constant: int UC_CCC_A + +
    +

    The canonical combining class value for “Above” characters. +

    + +
    +
    Constant: int UC_CCC_AR + +
    +

    The canonical combining class value for “Above Right” characters. +

    + +
    +
    Constant: int UC_CCC_DB + +
    +

    The canonical combining class value for “Double Below” characters. +

    + +
    +
    Constant: int UC_CCC_DA + +
    +

    The canonical combining class value for “Double Above” characters. +

    + +
    +
    Constant: int UC_CCC_IS + +
    +

    The canonical combining class value for “Iota Subscript” characters. +

    + +

    The following function looks up the canonical combining class of a character. +

    +
    +
    Function: int uc_combining_class (ucs4_t uc) + +
    +

    Returns the canonical combining class of a Unicode character. +

    + +
    + + +

    8.3 Bidirectional category

    + +

    Every Unicode character or code point has a bidirectional category +assigned to it. +

    +

    The bidirectional category guides the bidirectional algorithm +(http://www.unicode.org/reports/tr9/). The possible values are +the following. +

    +
    +
    Constant: int UC_BIDI_L + +
    +

    The bidirectional category for `Left-to-Right`” characters. +

    + +
    +
    Constant: int UC_BIDI_LRE + +
    +

    The bidirectional category for “Left-to-Right Embedding” characters. +

    + +
    +
    Constant: int UC_BIDI_LRO + +
    +

    The bidirectional category for “Left-to-Right Override” characters. +

    + +
    +
    Constant: int UC_BIDI_R + +
    +

    The bidirectional category for “Right-to-Left” characters. +

    + +
    +
    Constant: int UC_BIDI_AL + +
    +

    The bidirectional category for “Right-to-Left Arabic” characters. +

    + +
    +
    Constant: int UC_BIDI_RLE + +
    +

    The bidirectional category for “Right-to-Left Embedding” characters. +

    + +
    +
    Constant: int UC_BIDI_RLO + +
    +

    The bidirectional category for “Right-to-Left Override” characters. +

    + +
    +
    Constant: int UC_BIDI_PDF + +
    +

    The bidirectional category for “Pop Directional Format” characters. +

    + +
    +
    Constant: int UC_BIDI_EN + +
    +

    The bidirectional category for “European Number” characters. +

    + +
    +
    Constant: int UC_BIDI_ES + +
    +

    The bidirectional category for “European Number Separator” characters. +

    + +
    +
    Constant: int UC_BIDI_ET + +
    +

    The bidirectional category for “European Number Terminator” characters. +

    + +
    +
    Constant: int UC_BIDI_AN + +
    +

    The bidirectional category for “Arabic Number” characters. +

    + +
    +
    Constant: int UC_BIDI_CS + +
    +

    The bidirectional category for “Common Number Separator” characters. +

    + +
    +
    Constant: int UC_BIDI_NSM + +
    +

    The bidirectional category for “Non-Spacing Mark” characters. +

    + +
    +
    Constant: int UC_BIDI_BN + +
    +

    The bidirectional category for “Boundary Neutral” characters. +

    + +
    +
    Constant: int UC_BIDI_B + +
    +

    The bidirectional category for “Paragraph Separator” characters. +

    + +
    +
    Constant: int UC_BIDI_S + +
    +

    The bidirectional category for “Segment Separator” characters. +

    + +
    +
    Constant: int UC_BIDI_WS + +
    +

    The bidirectional category for “Whitespace” characters. +

    + +
    +
    Constant: int UC_BIDI_ON + +
    +

    The bidirectional category for “Other Neutral” characters. +

    + +

    The following functions implement the association between a bidirectional +category and its name. +

    +
    +
    Function: const char * uc_bidi_category_name (int category) + +
    +

    Returns the name of a bidirectional category. +

    + +
    +
    Function: int uc_bidi_category_byname (const char *category_name) + +
    +

    Returns the bidirectional category given by name, e.g. "LRE". +

    + +

    The following functions view bidirectional categories as sets of Unicode +characters. +

    +
    +
    Function: int uc_bidi_category (ucs4_t uc) + +
    +

    Returns the bidirectional category of a Unicode character. +

    + +
    +
    Function: bool uc_is_bidi_category (ucs4_t uc, int category) + +
    +

    Tests whether a Unicode character belongs to a given bidirectional category. +

    + +
    + + +

    8.4 Decimal digit value

    + +

    Decimal digits (like the digits from ‘0’ to ‘9’) exist in many +scripts. The following function converts a decimal digit character to its +numerical value. +

    +
    +
    Function: int uc_decimal_value (ucs4_t uc) + +
    +

    Returns the decimal digit value of a Unicode character. +The return value is an integer in the range 0..9, or -1 for characters that +do not represent a decimal digit. +

    + +
    + + +

    8.5 Digit value

    + +

    Digit characters are like decimal digit characters, possibly in special forms, +like as superscript, subscript, or circled. The following function converts a +digit character to its numerical value. +

    +
    +
    Function: int uc_digit_value (ucs4_t uc) + +
    +

    Returns the digit value of a Unicode character. +The return value is an integer in the range 0..9, or -1 for characters that +do not represent a digit. +

    + +
    + + +

    8.6 Numeric value

    + +

    There are also characters that represent numbers without a digit system, like +the Roman numerals, and fractional numbers, like 1/4 or 3/4. +

    +

    The following type represents the numeric value of a Unicode character. +

    +
    Type: uc_fraction_t + +
    +

    This is a structure type with the following fields: +

     
    int numerator;
    +int denominator;
    +
    +

    An integer n is represented by numerator = n, +denominator = 1. +

    + +

    The following function converts a number character to its numerical value. +

    +
    +
    Function: uc_fraction_t uc_numeric_value (ucs4_t uc) + +
    +

    Returns the numeric value of a Unicode character. +The return value is a fraction, or the pseudo-fraction { 0, 0 } for +characters that do not represent a number. +

    + +
    + + +

    8.7 Mirrored character

    + +

    Character mirroring is used to associate the closing parenthesis character +to the opening parenthesis character, the closing brace character with the +opening brace character, and so on. +

    +

    The following function looks up the mirrored character of a Unicode character. +

    +
    +
    Function: bool uc_mirror_char (ucs4_t uc, ucs4_t *puc) + +
    +

    Stores the mirrored character of a Unicode character uc in +*puc and returns true, if it exists. Otherwise it +stores uc unmodified in *puc and returns false. +

    + +
    + + +

    8.8 Properties

    + +

    This section defines boolean properties of Unicode characters. This +means, a character either has the given property or does not have it. +In other words, the property can be viewed as a subset of the set of +Unicode characters. +

    +

    The GNU libunistring library provides two kinds of API for working with +properties. The object oriented API uses a type uc_property_t +to designate a property. In the function-based API, which is a bit more +low level, a property is merely a function. +

    + +
    + + +

    8.8.1 Properties as objects – the object oriented API

    + +

    The following type designates a property on Unicode characters. +

    +
    +
    Type: uc_property_t + +
    +

    This data type denotes a boolean property on Unicode characters. It is an +immediate type that can be copied by simple assignment, without involving +memory allocation. It is not an array type. +

    + +

    Many Unicode properties are predefined. +

    +

    The following are general properties. +

    +
    +
    Constant: uc_property_t UC_PROPERTY_WHITE_SPACE + +
    +
    Constant: uc_property_t UC_PROPERTY_ALPHABETIC + +
    +
    Constant: uc_property_t UC_PROPERTY_OTHER_ALPHABETIC + +
    +
    Constant: uc_property_t UC_PROPERTY_NOT_A_CHARACTER + +
    +
    Constant: uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT + +
    +
    Constant: uc_property_t UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT + +
    +
    Constant: uc_property_t UC_PROPERTY_DEPRECATED + +
    +
    Constant: uc_property_t UC_PROPERTY_LOGICAL_ORDER_EXCEPTION + +
    +
    Constant: uc_property_t UC_PROPERTY_VARIATION_SELECTOR + +
    +
    Constant: uc_property_t UC_PROPERTY_PRIVATE_USE + +
    +
    Constant: uc_property_t UC_PROPERTY_UNASSIGNED_CODE_VALUE + +
    +
    + +

    The following properties are related to case folding. +

    +
    +
    Constant: uc_property_t UC_PROPERTY_UPPERCASE + +
    +
    Constant: uc_property_t UC_PROPERTY_OTHER_UPPERCASE + +
    +
    Constant: uc_property_t UC_PROPERTY_LOWERCASE + +
    +
    Constant: uc_property_t UC_PROPERTY_OTHER_LOWERCASE + +
    +
    Constant: uc_property_t UC_PROPERTY_TITLECASE + +
    +
    Constant: uc_property_t UC_PROPERTY_SOFT_DOTTED + +
    +
    + +

    The following properties are related to identifiers. +

    +
    +
    Constant: uc_property_t UC_PROPERTY_ID_START + +
    +
    Constant: uc_property_t UC_PROPERTY_OTHER_ID_START + +
    +
    Constant: uc_property_t UC_PROPERTY_ID_CONTINUE + +
    +
    Constant: uc_property_t UC_PROPERTY_OTHER_ID_CONTINUE + +
    +
    Constant: uc_property_t UC_PROPERTY_XID_START + +
    +
    Constant: uc_property_t UC_PROPERTY_XID_CONTINUE + +
    +
    Constant: uc_property_t UC_PROPERTY_PATTERN_WHITE_SPACE + +
    +
    Constant: uc_property_t UC_PROPERTY_PATTERN_SYNTAX + +
    +
    + +

    The following properties have an influence on shaping and rendering. +

    +
    +
    Constant: uc_property_t UC_PROPERTY_JOIN_CONTROL + +
    +
    Constant: uc_property_t UC_PROPERTY_GRAPHEME_BASE + +
    +
    Constant: uc_property_t UC_PROPERTY_GRAPHEME_EXTEND + +
    +
    Constant: uc_property_t UC_PROPERTY_OTHER_GRAPHEME_EXTEND + +
    +
    Constant: uc_property_t UC_PROPERTY_GRAPHEME_LINK + +
    +
    + +

    The following properties relate to bidirectional reordering. +

    +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_CONTROL + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_LEFT_TO_RIGHT + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_EUROPEAN_DIGIT + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_ARABIC_DIGIT + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_COMMON_SEPARATOR + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_BLOCK_SEPARATOR + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_SEGMENT_SEPARATOR + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_WHITESPACE + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_NON_SPACING_MARK + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_PDF + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE + +
    +
    Constant: uc_property_t UC_PROPERTY_BIDI_OTHER_NEUTRAL + +
    +
    + +

    The following properties deal with number representations. +

    +
    +
    Constant: uc_property_t UC_PROPERTY_HEX_DIGIT + +
    +
    Constant: uc_property_t UC_PROPERTY_ASCII_HEX_DIGIT + +
    +
    + +

    The following properties deal with CJK. +

    +
    +
    Constant: uc_property_t UC_PROPERTY_IDEOGRAPHIC + +
    +
    Constant: uc_property_t UC_PROPERTY_UNIFIED_IDEOGRAPH + +
    +
    Constant: uc_property_t UC_PROPERTY_RADICAL + +
    +
    Constant: uc_property_t UC_PROPERTY_IDS_BINARY_OPERATOR + +
    +
    Constant: uc_property_t UC_PROPERTY_IDS_TRINARY_OPERATOR + +
    +
    + +

    Other miscellaneous properties are: +

    +
    +
    Constant: uc_property_t UC_PROPERTY_ZERO_WIDTH + +
    +
    Constant: uc_property_t UC_PROPERTY_SPACE + +
    +
    Constant: uc_property_t UC_PROPERTY_NON_BREAK + +
    +
    Constant: uc_property_t UC_PROPERTY_ISO_CONTROL + +
    +
    Constant: uc_property_t UC_PROPERTY_FORMAT_CONTROL + +
    +
    Constant: uc_property_t UC_PROPERTY_DASH + +
    +
    Constant: uc_property_t UC_PROPERTY_HYPHEN + +
    +
    Constant: uc_property_t UC_PROPERTY_PUNCTUATION + +
    +
    Constant: uc_property_t UC_PROPERTY_LINE_SEPARATOR + +
    +
    Constant: uc_property_t UC_PROPERTY_PARAGRAPH_SEPARATOR + +
    +
    Constant: uc_property_t UC_PROPERTY_QUOTATION_MARK + +
    +
    Constant: uc_property_t UC_PROPERTY_SENTENCE_TERMINAL + +
    +
    Constant: uc_property_t UC_PROPERTY_TERMINAL_PUNCTUATION + +
    +
    Constant: uc_property_t UC_PROPERTY_CURRENCY_SYMBOL + +
    +
    Constant: uc_property_t UC_PROPERTY_MATH + +
    +
    Constant: uc_property_t UC_PROPERTY_OTHER_MATH + +
    +
    Constant: uc_property_t UC_PROPERTY_PAIRED_PUNCTUATION + +
    +
    Constant: uc_property_t UC_PROPERTY_LEFT_OF_PAIR + +
    +
    Constant: uc_property_t UC_PROPERTY_COMBINING + +
    +
    Constant: uc_property_t UC_PROPERTY_COMPOSITE + +
    +
    Constant: uc_property_t UC_PROPERTY_DECIMAL_DIGIT + +
    +
    Constant: uc_property_t UC_PROPERTY_NUMERIC + +
    +
    Constant: uc_property_t UC_PROPERTY_DIACRITIC + +
    +
    Constant: uc_property_t UC_PROPERTY_EXTENDER + +
    +
    Constant: uc_property_t UC_PROPERTY_IGNORABLE_CONTROL + +
    +
    + +

    The following function looks up a property by its name. +

    +
    +
    Function: uc_property_t uc_property_byname (const char *property_name) + +
    +

    Returns the property given by name, e.g. "White space". If a property +with the given name exists, the result will satisfy the +uc_property_is_valid predicate. Otherwise the result will not satisfy +this predicate and must not be passed to functions that expect an +uc_property_t argument. +

    +

    This function references a big table of all predefined properties. Its use +can significantly increase the size of your application. +

    + +
    +
    Function: bool uc_property_is_valid (uc_property_t property) + +
    +

    Returns true when the given property is valid, or false +otherwise. +

    + +

    The following function views a property as a set of Unicode characters. +

    +
    +
    Function: bool uc_is_property (ucs4_t uc, uc_property_t property) + +
    +

    Tests whether the Unicode character uc has the given property. +

    + +
    + + +

    8.8.2 Properties as functions – the functional API

    + +

    The following are general properties. +

    +
    +
    Function: bool uc_is_property_white_space (ucs4_t uc) + +
    +
    Function: bool uc_is_property_alphabetic (ucs4_t uc) + +
    +
    Function: bool uc_is_property_other_alphabetic (ucs4_t uc) + +
    +
    Function: bool uc_is_property_not_a_character (ucs4_t uc) + +
    +
    Function: bool uc_is_property_default_ignorable_code_point (ucs4_t uc) + +
    +
    Function: bool uc_is_property_other_default_ignorable_code_point (ucs4_t uc) + +
    +
    Function: bool uc_is_property_deprecated (ucs4_t uc) + +
    +
    Function: bool uc_is_property_logical_order_exception (ucs4_t uc) + +
    +
    Function: bool uc_is_property_variation_selector (ucs4_t uc) + +
    +
    Function: bool uc_is_property_private_use (ucs4_t uc) + +
    +
    Function: bool uc_is_property_unassigned_code_value (ucs4_t uc) + +
    +
    + +

    The following properties are related to case folding. +

    +
    +
    Function: bool uc_is_property_uppercase (ucs4_t uc) + +
    +
    Function: bool uc_is_property_other_uppercase (ucs4_t uc) + +
    +
    Function: bool uc_is_property_lowercase (ucs4_t uc) + +
    +
    Function: bool uc_is_property_other_lowercase (ucs4_t uc) + +
    +
    Function: bool uc_is_property_titlecase (ucs4_t uc) + +
    +
    Function: bool uc_is_property_soft_dotted (ucs4_t uc) + +
    +
    + +

    The following properties are related to identifiers. +

    +
    +
    Function: bool uc_is_property_id_start (ucs4_t uc) + +
    +
    Function: bool uc_is_property_other_id_start (ucs4_t uc) + +
    +
    Function: bool uc_is_property_id_continue (ucs4_t uc) + +
    +
    Function: bool uc_is_property_other_id_continue (ucs4_t uc) + +
    +
    Function: bool uc_is_property_xid_start (ucs4_t uc) + +
    +
    Function: bool uc_is_property_xid_continue (ucs4_t uc) + +
    +
    Function: bool uc_is_property_pattern_white_space (ucs4_t uc) + +
    +
    Function: bool uc_is_property_pattern_syntax (ucs4_t uc) + +
    +
    + +

    The following properties have an influence on shaping and rendering. +

    +
    +
    Function: bool uc_is_property_join_control (ucs4_t uc) + +
    +
    Function: bool uc_is_property_grapheme_base (ucs4_t uc) + +
    +
    Function: bool uc_is_property_grapheme_extend (ucs4_t uc) + +
    +
    Function: bool uc_is_property_other_grapheme_extend (ucs4_t uc) + +
    +
    Function: bool uc_is_property_grapheme_link (ucs4_t uc) + +
    +
    + +

    The following properties relate to bidirectional reordering. +

    +
    +
    Function: bool uc_is_property_bidi_control (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_left_to_right (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_arabic_right_to_left (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_european_digit (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_eur_num_separator (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_eur_num_terminator (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_arabic_digit (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_common_separator (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_block_separator (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_segment_separator (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_whitespace (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_non_spacing_mark (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_boundary_neutral (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_pdf (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_embedding_or_override (ucs4_t uc) + +
    +
    Function: bool uc_is_property_bidi_other_neutral (ucs4_t uc) + +
    +
    + +

    The following properties deal with number representations. +

    +
    +
    Function: bool uc_is_property_hex_digit (ucs4_t uc) + +
    +
    Function: bool uc_is_property_ascii_hex_digit (ucs4_t uc) + +
    +
    + +

    The following properties deal with CJK. +

    +
    +
    Function: bool uc_is_property_ideographic (ucs4_t uc) + +
    +
    Function: bool uc_is_property_unified_ideograph (ucs4_t uc) + +
    +
    Function: bool uc_is_property_radical (ucs4_t uc) + +
    +
    Function: bool uc_is_property_ids_binary_operator (ucs4_t uc) + +
    +
    Function: bool uc_is_property_ids_trinary_operator (ucs4_t uc) + +
    +
    + +

    Other miscellaneous properties are: +

    +
    +
    Function: bool uc_is_property_zero_width (ucs4_t uc) + +
    +
    Function: bool uc_is_property_space (ucs4_t uc) + +
    +
    Function: bool uc_is_property_non_break (ucs4_t uc) + +
    +
    Function: bool uc_is_property_iso_control (ucs4_t uc) + +
    +
    Function: bool uc_is_property_format_control (ucs4_t uc) + +
    +
    Function: bool uc_is_property_dash (ucs4_t uc) + +
    +
    Function: bool uc_is_property_hyphen (ucs4_t uc) + +
    +
    Function: bool uc_is_property_punctuation (ucs4_t uc) + +
    +
    Function: bool uc_is_property_line_separator (ucs4_t uc) + +
    +
    Function: bool uc_is_property_paragraph_separator (ucs4_t uc) + +
    +
    Function: bool uc_is_property_quotation_mark (ucs4_t uc) + +
    +
    Function: bool uc_is_property_sentence_terminal (ucs4_t uc) + +
    +
    Function: bool uc_is_property_terminal_punctuation (ucs4_t uc) + +
    +
    Function: bool uc_is_property_currency_symbol (ucs4_t uc) + +
    +
    Function: bool uc_is_property_math (ucs4_t uc) + +
    +
    Function: bool uc_is_property_other_math (ucs4_t uc) + +
    +
    Function: bool uc_is_property_paired_punctuation (ucs4_t uc) + +
    +
    Function: bool uc_is_property_left_of_pair (ucs4_t uc) + +
    +
    Function: bool uc_is_property_combining (ucs4_t uc) + +
    +
    Function: bool uc_is_property_composite (ucs4_t uc) + +
    +
    Function: bool uc_is_property_decimal_digit (ucs4_t uc) + +
    +
    Function: bool uc_is_property_numeric (ucs4_t uc) + +
    +
    Function: bool uc_is_property_diacritic (ucs4_t uc) + +
    +
    Function: bool uc_is_property_extender (ucs4_t uc) + +
    +
    Function: bool uc_is_property_ignorable_control (ucs4_t uc) + +
    +
    + +
    + + +

    8.9 Scripts

    + +

    The Unicode characters are subdivided into scripts. +

    +

    The following type is used to represent a script: +

    +
    +
    Type: uc_script_t + +
    +

    This data type is a structure type that refers to statically allocated +read-only data. It contains the following fields: +

     
    const char *name;
    +
    + +

    The name field contains the name of the script. +

    + + +

    The following functions look up a script. +

    +
    +
    Function: const uc_script_t * uc_script (ucs4_t uc) + +
    +

    Returns the script of a Unicode character. Returns NULL if uc does not +belong to any script. +

    + +
    +
    Function: const uc_script_t * uc_script_byname (const char *script_name) + +
    +

    Returns the script given by its name, e.g. "HAN". Returns NULL if a +script with the given name does not exist. +

    + +

    The following function views a script as a set of Unicode characters. +

    +
    +
    Function: bool uc_is_script (ucs4_t uc, const uc_script_t *script) + +
    +

    Tests whether a Unicode character belongs to a given script. +

    + +

    The following gives a global picture of all scripts. +

    +
    +
    Function: void uc_all_scripts (const uc_script_t **scripts, size_t *count) + +
    +

    Get the list of all scripts. Stores a pointer to an array of all scripts in +*scripts and the length of this array in *count. +

    + +
    + + +

    8.10 Blocks

    + +

    The Unicode characters are subdivided into blocks. A block is an interval of +Unicode code points. +

    +

    The following type is used to represent a block. +

    +
    +
    Type: uc_block_t + +
    +

    This data type is a structure type that refers to statically allocated data. +It contains the following fields: +

     
    ucs4_t start;
    +ucs4_t end;
    +const char *name;
    +
    + +

    The start field is the first Unicode code point in the block. +

    +

    The end field is the last Unicode code point in the block. +

    +

    The name field is the name of the block. +

    + + +

    The following function looks up a block. +

    +
    +
    Function: const uc_block_t * uc_block (ucs4_t uc) + +
    +

    Returns the block a character belongs to. +

    + +

    The following function views a block as a set of Unicode characters. +

    +
    +
    Function: bool uc_is_block (ucs4_t uc, const uc_block_t *block) + +
    +

    Tests whether a Unicode character belongs to a given block. +

    + +

    The following gives a global picture of all block. +

    +
    +
    Function: void uc_all_blocks (const uc_block_t **blocks, size_t *count) + +
    +

    Get the list of all blocks. Stores a pointer to an array of all blocks in +*blocks and the length of this array in *count. +

    + +
    + + +

    8.11 ISO C and Java syntax

    + +

    The following properties are taken from language standards. The supported +language standards are ISO C 99 and Java. +

    +
    +
    Function: bool uc_is_c_whitespace (ucs4_t uc) + +
    +

    Tests whether a Unicode character is considered whitespace in ISO C 99. +

    + +
    +
    Function: bool uc_is_java_whitespace (ucs4_t uc) + +
    +

    Tests whether a Unicode character is considered whitespace in Java. +

    + +

    The following enumerated values are the possible return values of the functions +uc_c_ident_category and uc_java_ident_category. +

    +
    +
    Constant: int UC_IDENTIFIER_START + +
    +

    This return value means that the given character is valid as first or +subsequent character in an identifier. +

    + +
    +
    Constant: int UC_IDENTIFIER_VALID + +
    +

    This return value means that the given character is valid as subsequent +character only. +

    + +
    +
    Constant: int UC_IDENTIFIER_INVALID + +
    +

    This return value means that the given character is not valid in an identifier. +

    + +
    +
    Constant: int UC_IDENTIFIER_IGNORABLE + +
    +

    This return value (only for Java) means that the given character is ignorable. +

    + +

    The following function determine whether a given character can be a constituent +of an identifier in the given programming language. +

    + +
    +
    Function: int uc_c_ident_category (ucs4_t uc) + +
    +

    Returns the categorization of a Unicode character with respect to the ISO C 99 +identifier syntax. +

    + + +
    +
    Function: int uc_java_ident_category (ucs4_t uc) + +
    +

    Returns the categorization of a Unicode character with respect to the Java +identifier syntax. +

    + +
    + + +

    8.12 Classifications like in ISO C

    + +

    The following character classifications mimic those declared in the ISO C +header files <ctype.h> and <wctype.h>. These functions are +deprecated, because this set of functions was designed with ASCII in mind and +cannot reflect the more diverse reality of the Unicode character set. But +they can be a quick-and-dirty porting aid when migrating from wchar_t +APIs to Unicode strings. +

    +
    +
    Function: bool uc_is_alnum (ucs4_t uc) + +
    +

    Tests for any character for which uc_is_alpha or uc_is_digit is +true. +

    + +
    +
    Function: bool uc_is_alpha (ucs4_t uc) + +
    +

    Tests for any character for which uc_is_upper or uc_is_lower is +true, or any character that is one of a locale-specific set of characters for +which none of uc_is_cntrl, uc_is_digit, uc_is_punct, or +uc_is_space is true. +

    + +
    +
    Function: bool uc_is_cntrl (ucs4_t uc) + +
    +

    Tests for any control character. +

    + +
    +
    Function: bool uc_is_digit (ucs4_t uc) + +
    +

    Tests for any character that corresponds to a decimal-digit character. +

    + +
    +
    Function: bool uc_is_graph (ucs4_t uc) + +
    +

    Tests for any character for which uc_is_print is true and +uc_is_space is false. +

    + +
    +
    Function: bool uc_is_lower (ucs4_t uc) + +
    +

    Tests for any character that corresponds to a lowercase letter or is one +of a locale-specific set of characters for which none of uc_is_cntrl, +uc_is_digit, uc_is_punct, or uc_is_space is true. +

    + +
    +
    Function: bool uc_is_print (ucs4_t uc) + +
    +

    Tests for any printing character. +

    + +
    +
    Function: bool uc_is_punct (ucs4_t uc) + +
    +

    Tests for any printing character that is one of a locale-specific set of +characters for which neither uc_is_space nor uc_is_alnum is true. +

    + +
    +
    Function: bool uc_is_space (ucs4_t uc) + +
    +

    Test for any character that corresponds to a locale-specific set of characters +for which none of uc_is_alnum, uc_is_graph, or uc_is_punct +is true. +

    + +
    +
    Function: bool uc_is_upper (ucs4_t uc) + +
    +

    Tests for any character that corresponds to an uppercase letter or is one +of a locale-specific set of characters for which none of uc_is_cntrl, +uc_is_digit, uc_is_punct, or uc_is_space is true. +

    + +
    +
    Function: bool uc_is_xdigit (ucs4_t uc) + +
    +

    Tests for any character that corresponds to a hexadecimal-digit character. +

    + +
    +
    Function: bool uc_is_blank (ucs4_t uc) + +
    +

    Tests for any character that corresponds to a standard blank character or +a locale-specific set of characters for which uc_is_alnum is false. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_9.html b/doc/libunistring_9.html new file mode 100644 index 00000000..0586e0f2 --- /dev/null +++ b/doc/libunistring_9.html @@ -0,0 +1,141 @@ + + + + + +GNU libunistring: 9. Display width <uniwidth.h> + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    + +
    + + +

    9. Display width <uniwidth.h>

    + +

    This include file declares functions that return the display width, measured +in columns, of characters or strings, when output to a device that uses +non-proportional fonts. +

    + +

    Note that for some rarely used characters the actual fonts or terminal +emulators can use a different width. There is no mechanism for communicating +the display width of characters across a Unix pseudo-terminal (tty). Also, +there are scripts with complex rendering, like the Indic scripts. For these +scripts, there is no such concept as non-proportional fonts. Therefore +the results of these functions usually work fine on most scripts and on +most characters but can fail to represent the actual display width. +

    +

    These functions are locale dependent. The encoding argument identifies +the encoding (e.g. "ISO-8859-2" for Polish). +

    + + + +
    +
    Function: int uc_width (ucs4_t uc, const char *encoding) + +
    +

    Determines and returns the number of column positions required for uc. +Returns -1 if uc is a control character that has an influence on the +column position when output. +

    + +
    +
    Function: int u8_width (const uint8_t *s, size_t n, const char *encoding) + +
    +
    Function: int u16_width (const uint16_t *s, size_t n, const char *encoding) + +
    +
    Function: int u32_width (const uint32_t *s, size_t n, const char *encoding) + +
    +

    Determines and returns the number of column positions required for first +n units (or fewer if s ends before this) in s. This +function ignores control characters in the string. +

    + +
    +
    Function: int u8_strwidth (const uint8_t *s, const char *encoding) + +
    +
    Function: int u16_strwidth (const uint16_t *s, const char *encoding) + +
    +
    Function: int u32_strwidth (const uint32_t *s, const char *encoding) + +
    +

    Determines and returns the number of column positions required for s. +This function ignores control characters in the string. +

    +
    + + + + + + + + + + + + +
    [ << ][ >> ]           [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_abt.html b/doc/libunistring_abt.html new file mode 100644 index 00000000..47d71bac --- /dev/null +++ b/doc/libunistring_abt.html @@ -0,0 +1,167 @@ + + + + + +GNU libunistring: About This Document + + + + + + + + + + + + + + + + + + + + +
    [Top][Contents][Index][ ? ]
    +

    About This Document

    +

    + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. +

    +

    + The buttons in the navigation panels have the following meaning: +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Button Name Go to From 1.2.3 go to
    [ < ] BackPrevious section in reading order1.2.2
    [ > ] ForwardNext section in reading order1.2.4
    [ << ] FastBackBeginning of this chapter or previous chapter1
    [ Up ] UpUp section1.2
    [ >> ] FastForwardNext chapter2
    [Top] TopCover (top) of document  
    [Contents] ContentsTable of contents  
    [Index] IndexIndex  
    [ ? ] AboutAbout (help)  
    + +

    + where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure: +

    + +
      +
    • 1. Section One +
        +
      • 1.1 Subsection One-One +
          +
        • ...
        • +
        +
      • +
      • 1.2 Subsection One-Two +
          +
        • 1.2.1 Subsubsection One-Two-One
        • +
        • 1.2.2 Subsubsection One-Two-Two
        • +
        • 1.2.3 Subsubsection One-Two-Three     + <== Current Position
        • +
        • 1.2.4 Subsubsection One-Two-Four
        • +
        +
      • +
      • 1.3 Subsection One-Three +
          +
        • ...
        • +
        +
      • +
      • 1.4 Subsection One-Four
      • +
      +
    • +
    + +
    + + + + + +
    [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/libunistring_toc.html b/doc/libunistring_toc.html new file mode 100644 index 00000000..e7e4e51e --- /dev/null +++ b/doc/libunistring_toc.html @@ -0,0 +1,164 @@ + + + + + +GNU libunistring: GNU libunistring + + + + + + + + + + + + + + + + + + + +
    [Top][Contents][Index][ ? ]
    +

    GNU libunistring

    + +

    Table of Contents

    +
    + + +
    + + + + + +
    + + + + + +
    [Top][Contents][Index][ ? ]
    +

    + + This document was generated by Bruno Haible on July, 1 2009 using texi2html 1.78a. + +
    + +

    + + diff --git a/doc/stamp-vti b/doc/stamp-vti new file mode 100644 index 00000000..ee4ba906 --- /dev/null +++ b/doc/stamp-vti @@ -0,0 +1,4 @@ +@set UPDATED 29 June 2009 +@set UPDATED-MONTH June 2009 +@set EDITION 0.9.1 +@set VERSION 0.9.1 diff --git a/doc/unicase.texi b/doc/unicase.texi new file mode 100644 index 00000000..14b46be0 --- /dev/null +++ b/doc/unicase.texi @@ -0,0 +1,364 @@ +@node unicase.h +@chapter Case mappings @code{} + +This include file defines functions for case mapping for Unicode strings and +case insensitive comparison of Unicode strings and C strings. + +These string functions fix the problems that were mentioned in +@ref{char * strings}, namely, they handle the Croatian +@sc{LETTER DZ WITH CARON}, the German @sc{LATIN SMALL LETTER SHARP S}, the +Greek sigma and the Lithuanian i correctly. + +@menu +* Case mappings of characters:: +* Case mappings of strings:: +* Case mappings of substrings:: +* Case insensitive comparison:: +* Case detection:: +@end menu + +@node Case mappings of characters +@section Case mappings of characters + +@cindex Unicode character, case mappings +The following functions implement case mappings on Unicode characters --- +for those cases only where the result of the mapping is a again a single +Unicode character. + +These mappings are locale and context independent. + +@cartouche +@strong{WARNING!} These functions are not sufficient for languages such as +German, Greek and Lithuanian. Better use the functions below that treat an +entire string at once and are language aware. +@end cartouche + +@deftypefun ucs4_t uc_toupper (ucs4_t @var{uc}) +Returns the uppercase mapping of the Unicode character @var{uc}. +@end deftypefun + +@deftypefun ucs4_t uc_tolower (ucs4_t @var{uc}) +Returns the lowercase mapping of the Unicode character @var{uc}. +@end deftypefun + +@deftypefun ucs4_t uc_totitle (ucs4_t @var{uc}) +Returns the titlecase mapping of the Unicode character @var{uc}. + +The titlecase mapping of a character is to be used when the character should +look like upper case and the following characters are lower cased. + +For most characters, this is the same as the uppercase mapping. There are +only few characters where the title case variant and the uuper case variant +are different. These characters occur in the Latin writing of the Croatian, +Bosnian, and Serbian languages. + +@c Normally we would use .33 space for each column, but this is too much in +@c TeX mode, see +@c . +@multitable @columnfractions .31 .31 .31 +@headitem Lower case @tab Title case @tab Upper case +@item LATIN SMALL LETTER LJ + @tab LATIN CAPITAL LETTER L WITH SMALL LETTER J + @tab LATIN CAPITAL LETTER LJ +@item LATIN SMALL LETTER NJ + @tab LATIN CAPITAL LETTER N WITH SMALL LETTER J + @tab LATIN CAPITAL LETTER NJ +@item LATIN SMALL LETTER DZ + @tab LATIN CAPITAL LETTER D WITH SMALL LETTER Z + @tab LATIN CAPITAL LETTER DZ +@item LATIN SMALL LETTER DZ WITH CARON + @tab LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON + @tab LATIN CAPITAL LETTER DZ WITH CARON +@end multitable +@end deftypefun + +@node Case mappings of strings +@section Case mappings of strings + +@cindex case mappings +@cindex uppercasing +@cindex lowercasing +@cindex titlecasing +Case mapping should always be performed on entire strings, not on individual +characters. The functions in this sections do so. + +These functions allow to apply a normalization after the case mapping. The +reason is that if you want to treat @samp{@"{a}} and @samp{@"{A}} the same, +you most often also want to treat the composed and decomposed forms of such +a character, U+00C4 @sc{LATIN CAPITAL LETTER A WITH DIAERESIS} and +U+0041 @sc{LATIN CAPITAL LETTER A} U+0308 @sc{COMBINING DIAERESIS} the same. +The @var{nf} argument designates the normalization. + +@cindex locale language +These functions are locale dependent. The @var{iso639_language} argument +identifies the language (e.g. @code{"tr"} for Turkish). NULL means to use +locale independent case mappings. + +@deftypefun {const char *} uc_locale_language () +Returns the ISO 639 language code of the current locale. +Returns @code{""} if it is unknown, or in the "C" locale. +@end deftypefun + +@deftypefun {uint8_t *} u8_toupper (const uint8_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint16_t *} u16_toupper (const uint16_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint32_t *} u32_toupper (const uint32_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Returns the uppercase mapping of a string. + +The @var{nf} argument identifies the normalization form to apply after the +case-mapping. It can also be NULL, for no normalization. +@end deftypefun + +@deftypefun {uint8_t *} u8_tolower (const uint8_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint16_t *} u16_tolower (const uint16_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint32_t *} u32_tolower (const uint32_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Returns the lowercase mapping of a string. + +The @var{nf} argument identifies the normalization form to apply after the +case-mapping. It can also be NULL, for no normalization. +@end deftypefun + +@deftypefun {uint8_t *} u8_totitle (const uint8_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint16_t *} u16_totitle (const uint16_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint32_t *} u32_totitle (const uint32_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Returns the titlecase mapping of a string. + +Mapping to title case means that, in each word, the first cased character +is being mapped to title case and the remaining characters of the word +are being mapped to lower case. + +The @var{nf} argument identifies the normalization form to apply after the +case-mapping. It can also be NULL, for no normalization. +@end deftypefun + +@node Case mappings of substrings +@section Case mappings of substrings + +Case mapping of a substring cannot simply be performed by extracting the +substring and then applying the case mapping function to it. This does not +work because case mapping requires some information about the surrounding +characters. The following functions allow to apply case mappings to +substrings of a given string, while taking into account the characters that +precede it (the ``prefix'') and the characters that follow it (the ``suffix''). + +@deftp Type casing_prefix_context_t +This data type denotes the case-mapping context that is given by a prefix +string. It is an immediate type that can be copied by simple assignment, +without involving memory allocation. It is not an array type. +@end deftp + +@deftypevr Constant casing_prefix_context_t unicase_empty_prefix_context +This constant is the case-mapping context that corresponds to an empty prefix +string. +@end deftypevr + +The following functions return @code{casing_prefix_context_t} objects: + +@deftypefun casing_prefix_context_t u8_casing_prefix_context (const uint8_t *@var{s}, size_t @var{n}) +@deftypefunx casing_prefix_context_t u16_casing_prefix_context (const uint16_t *@var{s}, size_t @var{n}) +@deftypefunx casing_prefix_context_t u32_casing_prefix_context (const uint32_t *@var{s}, size_t @var{n}) +Returns the case-mapping context of a given prefix string. +@end deftypefun + +@deftypefun casing_prefix_context_t u8_casing_prefixes_context (const uint8_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{a_context}) +@deftypefunx casing_prefix_context_t u16_casing_prefixes_context (const uint16_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{a_context}) +@deftypefunx casing_prefix_context_t u32_casing_prefixes_context (const uint32_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{a_context}) +Returns the case-mapping context of the prefix concat(@var{a}, @var{s}), +given the case-mapping context of the prefix @var{a}. +@end deftypefun + +@deftp Type casing_suffix_context_t +This data type denotes the case-mapping context that is given by a suffix +string. It is an immediate type that can be copied by simple assignment, +without involving memory allocation. It is not an array type. +@end deftp + +@deftypevr Constant casing_suffix_context_t unicase_empty_suffix_context +This constant is the case-mapping context that corresponds to an empty suffix +string. +@end deftypevr + +The following functions return @code{casing_suffix_context_t} objects: + +@deftypefun casing_suffix_context_t u8_casing_suffix_context (const uint8_t *@var{s}, size_t @var{n}) +@deftypefunx casing_suffix_context_t u16_casing_suffix_context (const uint16_t *@var{s}, size_t @var{n}) +@deftypefunx casing_suffix_context_t u32_casing_suffix_context (const uint32_t *@var{s}, size_t @var{n}) +Returns the case-mapping context of a given suffix string. +@end deftypefun + +@deftypefun casing_suffix_context_t u8_casing_suffixes_context (const uint8_t *@var{s}, size_t @var{n}, casing_suffix_context_t @var{a_context}) +@deftypefunx casing_suffix_context_t u16_casing_suffixes_context (const uint16_t *@var{s}, size_t @var{n}, casing_suffix_context_t @var{a_context}) +@deftypefunx casing_suffix_context_t u32_casing_suffixes_context (const uint32_t *@var{s}, size_t @var{n}, casing_suffix_context_t @var{a_context}) +Returns the case-mapping context of the suffix concat(@var{s}, @var{a}), +given the case-mapping context of the suffix @var{a}. +@end deftypefun + +The following functions perform a case mapping, considering the +prefix context and the suffix context. + +@deftypefun {uint8_t *} u8_ct_toupper (const uint8_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint16_t *} u16_ct_toupper (const uint16_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint32_t *} u32_ct_toupper (const uint32_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Returns the uppercase mapping of a string that is surrounded by a prefix +and a suffix. +@end deftypefun + +@deftypefun {uint8_t *} u8_ct_tolower (const uint8_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint16_t *} u16_ct_tolower (const uint16_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint32_t *} u32_ct_tolower (const uint32_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Returns the lowercase mapping of a string that is surrounded by a prefix +and a suffix. +@end deftypefun + +@deftypefun {uint8_t *} u8_ct_totitle (const uint8_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint16_t *} u16_ct_totitle (const uint16_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint32_t *} u32_ct_totitle (const uint32_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Returns the titlecase mapping of a string that is surrounded by a prefix +and a suffix. +@end deftypefun + +For example, to uppercase the UTF-8 substring between @code{s + start_index} +and @code{s + end_index} of a string that extends from @code{s} to +@code{s + u8_strlen (s)}, you can use the statements + +@smallexample +size_t result_length; +uint8_t result = + u8_ct_toupper (s + start_index, end_index - start_index, + u8_casing_prefix_context (s, start_index), + u8_casing_suffix_context (s + end_index, + u8_strlen (s) - end_index), + iso639_language, NULL, NULL, &result_length); +@end smallexample + +@node Case insensitive comparison +@section Case insensitive comparison + +@cindex comparing, ignoring case +@cindex comparing, ignoring normalization and case +The following functions implement comparison that ignores differences in case +and normalization. + +@deftypefun {uint8_t *} u8_casefold (const uint8_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint16_t *} u16_casefold (const uint16_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint32_t *} u32_casefold (const uint32_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Returns the case folded string. + +Comparing @code{u8_casefold (@var{s1})} and @code{u8_casefold (@var{s2})} +with the @code{u8_cmp2} function is equivalent to comparing @var{s1} and +@var{s2} with @code{u8_casecmp}. + +The @var{nf} argument identifies the normalization form to apply after the +case-mapping. It can also be NULL, for no normalization. +@end deftypefun + +@deftypefun {uint8_t *} u8_ct_casefold (const uint8_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint16_t *} u16_ct_casefold (const uint16_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint32_t *} u32_ct_casefold (const uint32_t *@var{s}, size_t @var{n}, casing_prefix_context_t @var{prefix_context}, casing_suffix_context_t @var{suffix_context}, const char *@var{iso639_language}, uninorm_t @var{nf}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Returns the case folded string. The case folding takes into account the +case mapping contexts of the prefix and suffix strings. +@end deftypefun + +@deftypefun int u8_casecmp (const uint8_t *@var{s1}, size_t @var{n1}, const uint8_t *@var{s2}, size_t @var{n2}, const char *@var{iso639_language}, uninorm_t @var{nf}, int *@var{resultp}) +@deftypefunx int u16_casecmp (const uint16_t *@var{s1}, size_t @var{n1}, const uint16_t *@var{s2}, size_t @var{n2}, const char *@var{iso639_language}, uninorm_t @var{nf}, int *@var{resultp}) +@deftypefunx int u32_casecmp (const uint32_t *@var{s1}, size_t @var{n1}, const uint32_t *@var{s2}, size_t @var{n2}, const char *@var{iso639_language}, uninorm_t @var{nf}, int *@var{resultp}) +@deftypefunx int ulc_casecmp (const char *@var{s1}, size_t @var{n1}, const char *@var{s2}, size_t @var{n2}, const char *@var{iso639_language}, uninorm_t @var{nf}, int *@var{resultp}) +Compares @var{s1} and @var{s2}, ignoring differences in case and normalization. + +The @var{nf} argument identifies the normalization form to apply after the +case-mapping. It can also be NULL, for no normalization. + +If successful, sets @code{*@var{resultp}} to -1 if @var{s1} < @var{s2}, +0 if @var{s1} = @var{s2}, 1 if @var{s1} > @var{s2}, and returns 0. +Upon failure, returns -1 with @code{errno} set. +@end deftypefun + +@cindex comparing, ignoring case, with collation rules +@cindex comparing, with collation rules, ignoring case +@cindex comparing, ignoring normalization and case, with collation rules +@cindex comparing, with collation rules, ignoring normalization and case +The following functions additionally take into account the sorting rules of the +current locale. + +@deftypefun {char *} u8_casexfrm (const uint8_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, char *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {char *} u16_casexfrm (const uint16_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, char *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {char *} u32_casexfrm (const uint32_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, char *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {char *} ulc_casexfrm (const char *@var{s}, size_t @var{n}, const char *@var{iso639_language}, uninorm_t @var{nf}, char *@var{resultbuf}, size_t *@var{lengthp}) +Converts the string @var{s} of length @var{n} to a NUL-terminated byte +sequence, in such a way that comparing @code{u8_casexfrm (@var{s1})} and +@code{u8_casexfrm (@var{s2})} with the gnulib function @code{memcmp2} is +equivalent to comparing @var{s1} and @var{s2} with @code{u8_casecoll}. + +@var{nf} must be either @code{UNINORM_NFC}, @code{UNINORM_NFKC}, or NULL for +no normalization. +@end deftypefun + +@deftypefun int u8_casecoll (const uint8_t *@var{s1}, size_t @var{n1}, const uint8_t *@var{s2}, size_t @var{n2}, const char *@var{iso639_language}, uninorm_t @var{nf}, int *@var{resultp}) +@deftypefunx int u16_casecoll (const uint16_t *@var{s1}, size_t @var{n1}, const uint16_t *@var{s2}, size_t @var{n2}, const char *@var{iso639_language}, uninorm_t @var{nf}, int *@var{resultp}) +@deftypefunx int u32_casecoll (const uint32_t *@var{s1}, size_t @var{n1}, const uint32_t *@var{s2}, size_t @var{n2}, const char *@var{iso639_language}, uninorm_t @var{nf}, int *@var{resultp}) +@deftypefunx int ulc_casecoll (const char *@var{s1}, size_t @var{n1}, const char *@var{s2}, size_t @var{n2}, const char *@var{iso639_language}, uninorm_t @var{nf}, int *@var{resultp}) +Compares @var{s1} and @var{s2}, ignoring differences in case and normalization, +using the collation rules of the current locale. + +The @var{nf} argument identifies the normalization form to apply after the +case-mapping. It must be either @code{UNINORM_NFC} or @code{UNINORM_NFKC}. +It can also be NULL, for no normalization. + +If successful, sets @code{*@var{resultp}} to -1 if @var{s1} < @var{s2}, +0 if @var{s1} = @var{s2}, 1 if @var{s1} > @var{s2}, and returns 0. +Upon failure, returns -1 with @code{errno} set. +@end deftypefun + +@node Case detection +@section Case detection + +@cindex case detection +@cindex detecting case +The following functions determine whether a Unicode string is entirely in +upper case. or entirely in lower case, or entirely in title case, or already +case-folded. + +@deftypefun int u8_is_uppercase (const uint8_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +@deftypefunx int u16_is_uppercase (const uint16_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +@deftypefunx int u32_is_uppercase (const uint32_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +Sets @code{*@var{resultp}} to true if mapping NFD(@var{s}) to upper case is +a no-op, or to false otherwise, and returns 0. Upon failure, returns -1 with +@code{errno} set. +@end deftypefun + +@deftypefun int u8_is_lowercase (const uint8_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +@deftypefunx int u16_is_lowercase (const uint16_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +@deftypefunx int u32_is_lowercase (const uint32_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +Sets @code{*@var{resultp}} to true if mapping NFD(@var{s}) to lower case is +a no-op, or to false otherwise, and returns 0. Upon failure, returns -1 with +@code{errno} set. +@end deftypefun + +@deftypefun int u8_is_titlecase (const uint8_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +@deftypefunx int u16_is_titlecase (const uint16_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +@deftypefunx int u32_is_titlecase (const uint32_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +Sets @code{*@var{resultp}} to true if mapping NFD(@var{s}) to title case is +a no-op, or to false otherwise, and returns 0. Upon failure, returns -1 with +@code{errno} set. +@end deftypefun + +@deftypefun int u8_is_casefolded (const uint8_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +@deftypefunx int u16_is_casefolded (const uint16_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +@deftypefunx int u32_is_casefolded (const uint32_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +Sets @code{*@var{resultp}} to true if applying case folding to NFD(@var{S}) is +a no-op, or to false otherwise, and returns 0. Upon failure, returns -1 with +@code{errno} set. +@end deftypefun + +The following functions determine whether case mappings have any effect on a +Unicode string. + +@deftypefun int u8_is_cased (const uint8_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +@deftypefunx int u16_is_cased (const uint16_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +@deftypefunx int u32_is_cased (const uint32_t *@var{s}, size_t @var{n}, const char *@var{iso639_language}, bool *@var{resultp}) +Sets @code{*@var{resultp}} to true if case matters for @var{s}, that is, if +mapping NFD(@var{s}) to either upper case or lower case or title case is not +a no-op. Set @code{*@var{resultp}} to false if NFD(@var{s}) maps to itself +under the upper case mapping, under the lower case mapping, and under the title +case mapping; in other words, when NFD(@var{s}) consists entirely of caseless +characters. Upon failure, returns -1 with @code{errno} set. +@end deftypefun diff --git a/doc/uniconv.texi b/doc/uniconv.texi new file mode 100644 index 00000000..07cfa1be --- /dev/null +++ b/doc/uniconv.texi @@ -0,0 +1,157 @@ +@node uniconv.h +@chapter Conversions between Unicode and encodings @code{} + +This include file declares functions for converting between Unicode strings +and @code{char *} strings in locale encoding or in other specified encodings. + +@cindex locale encoding +The following function returns the locale encoding. + +@deftypefun {const char *} locale_charset () +Determines the current locale's character encoding, and canonicalizes it +into one of the canonical names listed in @file{config.charset}. +If the canonical name cannot be determined, the result is a non-canonical +name. + +The result must not be freed; it is statically allocated. + +The result of this function can be used as an argument to the @code{iconv_open} +function in GNU libc, in GNU libiconv, or in the gnulib provided wrapper +around the native @code{iconv_open} function. It may not work as an argument +to the native @code{iconv_open} function directly. +@end deftypefun + +The handling of unconvertible characters during the conversions can be +parametrized through the following enumeration type: + +@deftp Type {enum iconv_ilseq_handler} +This type specifies how unconvertible characters in the input are handled. +@end deftp + +@deftypevr Constant {enum iconv_ilseq_handler} iconveh_error +This handler causes the function to return with @code{errno} set to +@code{EILSEQ}. +@end deftypevr + +@deftypevr Constant {enum iconv_ilseq_handler} iconveh_question_mark +This handler produces one question mark @samp{?} per unconvertible character. +@end deftypevr + +@deftypevr Constant {enum iconv_ilseq_handler} iconveh_escape_sequence +This handler produces an escape sequence @code{\u@var{xxxx}} or +@code{\U@var{xxxxxxxx}} for each unconvertible character. +@end deftypevr + +@cindex converting +The following functions convert between strings in a specified encoding and +Unicode strings. + +@deftypefun {uint8_t *} u8_conv_from_encoding (const char *@var{fromcode}, enum iconv_ilseq_handler @var{handler}, const char *@var{src}, size_t @var{srclen}, size_t *@var{offsets}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint16_t *} u16_conv_from_encoding (const char *@var{fromcode}, enum iconv_ilseq_handler @var{handler}, const char *@var{src}, size_t @var{srclen}, size_t *@var{offsets}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint32_t *} u32_conv_from_encoding (const char *@var{fromcode}, enum iconv_ilseq_handler @var{handler}, const char *@var{src}, size_t @var{srclen}, size_t *@var{offsets}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Converts an entire string, possibly including NUL bytes, from one encoding +to UTF-8 encoding. + +Converts a memory region given in encoding @var{fromcode}. @var{fromcode} is +as for the @code{iconv_open} function. + +The input is in the memory region between @var{src} (inclusive) and +@code{@var{src} + @var{srclen}} (exclusive). + +If @var{offsets} is not NULL, it should point to an array of @var{srclen} +integers; this array is filled with offsets into the result, i.e@. the +character starting at @code{@var{src}[i]} corresponds to the character starting +at @code{@var{result}[@var{offsets}[i]]}, and other offsets are set to +@code{(size_t)(-1)}. + +@code{@var{resultbuf}} and @code{*@var{lengthp}} should be a scratch +buffer and its size, or @code{@var{resultbuf}} can be NULL. + +May erase the contents of the memory at @code{@var{resultbuf}}. + +If successful: The resulting Unicode string (non-NULL) is returned and +its length stored in @code{*@var{lengthp}}. The resulting string is +@code{@var{resultbuf}} if no dynamic memory allocation was necessary, +or a freshly allocated memory block otherwise. + +In case of error: NULL is returned and @code{errno} is set. +Particular @code{errno} values: @code{EINVAL}, @code{EILSEQ}, @code{ENOMEM}. +@end deftypefun + +@deftypefun {char *} u8_conv_to_encoding (const char *@var{tocode}, enum iconv_ilseq_handler @var{handler}, const uint8_t *@var{src}, size_t @var{srclen}, size_t *@var{offsets}, char *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {char *} u16_conv_to_encoding (const char *@var{tocode}, enum iconv_ilseq_handler @var{handler}, const uint16_t *@var{src}, size_t @var{srclen}, size_t *@var{offsets}, char *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {char *} u32_conv_to_encoding (const char *@var{tocode}, enum iconv_ilseq_handler @var{handler}, const uint32_t *@var{src}, size_t @var{srclen}, size_t *@var{offsets}, char *@var{resultbuf}, size_t *@var{lengthp}) +Converts an entire Unicode string, possibly including NUL units, from UTF-8 +encoding to a given encoding. + +Converts a memory region to encoding @var{tocode}. @var{tocode} is as for +the @code{iconv_open} function. + +The input is in the memory region between @var{src} (inclusive) and +@code{@var{src} + @var{srclen}} (exclusive). + +If @var{offsets} is not NULL, it should point to an array of @var{srclen} +integers; this array is filled with offsets into the result, i.e@. the +character starting at @code{@var{src}[i]} corresponds to the character starting +at @code{@var{result}[@var{offsets}[i]]}, and other offsets are set to +@code{(size_t)(-1)}. + +@code{@var{resultbuf}} and @code{*@var{lengthp}} should be a scratch +buffer and its size, or @code{@var{resultbuf}} can be NULL. + +May erase the contents of the memory at @code{@var{resultbuf}}. + +If successful: The resulting Unicode string (non-NULL) is returned and +its length stored in @code{*@var{lengthp}}. The resulting string is +@code{@var{resultbuf}} if no dynamic memory allocation was necessary, +or a freshly allocated memory block otherwise. + +In case of error: NULL is returned and @code{errno} is set. +Particular @code{errno} values: @code{EINVAL}, @code{EILSEQ}, @code{ENOMEM}. +@end deftypefun + +The following functions convert between NUL terminated strings in a specified +encoding and NUL terminated Unicode strings. + +@deftypefun {uint8_t *} u8_strconv_from_encoding (const char *@var{string}, const char *@var{fromcode}, enum iconv_ilseq_handler @var{handler}) +@deftypefunx {uint16_t *} u16_strconv_from_encoding (const char *@var{string}, const char *@var{fromcode}, enum iconv_ilseq_handler @var{handler}) +@deftypefunx {uint32_t *} u32_strconv_from_encoding (const char *@var{string}, const char *@var{fromcode}, enum iconv_ilseq_handler @var{handler}) +Converts a NUL terminated string from a given encoding. + +The result is @code{malloc} allocated, or NULL (with @var{errno} set) in case of error. + +Particular @code{errno} values: @code{EILSEQ}, @code{ENOMEM}. +@end deftypefun + +@deftypefun {char *} u8_strconv_to_encoding (const uint8_t *@var{string}, const char *@var{tocode}, enum iconv_ilseq_handler @var{handler}) +@deftypefunx {char *} u16_strconv_to_encoding (const uint16_t *@var{string}, const char *@var{tocode}, enum iconv_ilseq_handler @var{handler}) +@deftypefunx {char *} u32_strconv_to_encoding (const uint32_t *@var{string}, const char *@var{tocode}, enum iconv_ilseq_handler @var{handler}) +Converts a NUL terminated string to a given encoding. + +The result is @code{malloc} allocated, or NULL (with @code{errno} set) in case of error. + +Particular @code{errno} values: @code{EILSEQ}, @code{ENOMEM}. +@end deftypefun + +The following functions are shorthands that convert between NUL terminated +strings in locale encoding and NUL terminated Unicode strings. + +@deftypefun {uint8_t *} u8_strconv_from_locale (const char *@var{string}) +@deftypefunx {uint16_t *} u16_strconv_from_locale (const char *@var{string}) +@deftypefunx {uint32_t *} u32_strconv_from_locale (const char *@var{string}) +Converts a NUL terminated string from the locale encoding. + +The result is @code{malloc} allocated, or NULL (with @code{errno} set) in case of error. + +Particular @code{errno} values: @code{ENOMEM}. +@end deftypefun + +@deftypefun {char *} u8_strconv_to_locale (const uint8_t *@var{string}) +@deftypefunx {char *} u16_strconv_to_locale (const uint16_t *@var{string}) +@deftypefunx {char *} u32_strconv_to_locale (const uint32_t *@var{string}) +Converts a NUL terminated string to the locale encoding. + +The result is @code{malloc} allocated, or NULL (with @code{errno} set) in case of error. + +Particular @code{errno} values: @code{ENOMEM}. +@end deftypefun diff --git a/doc/unictype.texi b/doc/unictype.texi new file mode 100644 index 00000000..129159c7 --- /dev/null +++ b/doc/unictype.texi @@ -0,0 +1,1145 @@ +@node unictype.h +@chapter Unicode character classification and properties @code{} + +This include file declares functions that classify Unicode characters +and that test whether Unicode characters have specific properties. + +The classification assigns a ``general category'' to every Unicode +character. This is similar to the classification provided by ISO C in +@code{}. + +Properties are the data that guides various text processing algorithms +in the presence of specific Unicode characters. + +@menu +* General category:: +* Canonical combining class:: +* Bidirectional category:: +* Decimal digit value:: +* Digit value:: +* Numeric value:: +* Mirrored character:: +* Properties:: +* Scripts:: +* Blocks:: +* ISO C and Java syntax:: +* Classifications like in ISO C:: +@end menu + +@node General category +@section General category + +@cindex general category +@cindex Unicode character, general category +@cindex Unicode character, classification +Every Unicode character or code point has a @emph{general category} assigned +to it. This classification is important for most algorithms that work on +Unicode text. + +The GNU libunistring library provides two kinds of API for working with +general categories. The object oriented API uses a variable to denote +every predefined general category value or combinations thereof. The +low-level API uses a bit mask instead. The advantage of the object oriented +API is that if only a few predefined general category values are used, +the data tables are relatively small. When you combine general category +values (using @code{uc_general_category_or}, @code{uc_general_category_and}, +or @code{uc_general_category_and_not}), or when you use the low level +bit masks, a big table is used thats holds the complete general category +information for all Unicode characters. + +@menu +* Object oriented API:: +* Bit mask API:: +@end menu + +@node Object oriented API +@subsection The object oriented API for general category + +@deftp Type uc_general_category_t +This data type denotes a general category value. It is an immediate type that +can be copied by simple assignment, without involving memory allocation. It is +not an array type. +@end deftp + +The following are the predefined general category value. Additional general +categories may be added in the future. + +@deftypevr Constant uc_general_category_t UC_CATEGORY_L +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Lu +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Ll +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Lt +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Lm +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Lo +@deftypevrx Constant uc_general_category_t UC_CATEGORY_M +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Mn +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Mc +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Me +@deftypevrx Constant uc_general_category_t UC_CATEGORY_N +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Nd +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Nl +@deftypevrx Constant uc_general_category_t UC_CATEGORY_No +@deftypevrx Constant uc_general_category_t UC_CATEGORY_P +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Pc +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Pd +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Ps +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Pe +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Pi +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Pf +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Po +@deftypevrx Constant uc_general_category_t UC_CATEGORY_S +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Sm +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Sc +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Sk +@deftypevrx Constant uc_general_category_t UC_CATEGORY_So +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Z +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Zs +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Zl +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Zp +@deftypevrx Constant uc_general_category_t UC_CATEGORY_C +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Cc +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Cf +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Cs +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Co +@deftypevrx Constant uc_general_category_t UC_CATEGORY_Cn +@end deftypevr + +The following are alias names for predefined General category values. + +@deftypevr Macro uc_general_category_t UC_LETTER +This is another name for @code{UC_CATEGORY_L}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_UPPERCASE_LETTER +This is another name for @code{UC_CATEGORY_Lu}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_LOWERCASE_LETTER +This is another name for @code{UC_CATEGORY_Ll}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_TITLECASE_LETTER +This is another name for @code{UC_CATEGORY_Lt}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_MODIFIER_LETTER +This is another name for @code{UC_CATEGORY_Lm}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_OTHER_LETTER +This is another name for @code{UC_CATEGORY_Lo}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_MARK +This is another name for @code{UC_CATEGORY_M}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_NON_SPACING_MARK +This is another name for @code{UC_CATEGORY_Mn}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_COMBINING_SPACING_MARK +This is another name for @code{UC_CATEGORY_Mc}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_ENCLOSING_MARK +This is another name for @code{UC_CATEGORY_Me}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_NUMBER +This is another name for @code{UC_CATEGORY_N}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_DECIMAL_DIGIT_NUMBER +This is another name for @code{UC_CATEGORY_Nd}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_LETTER_NUMBER +This is another name for @code{UC_CATEGORY_Nl}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_OTHER_NUMBER +This is another name for @code{UC_CATEGORY_No}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_PUNCTUATION +This is another name for @code{UC_CATEGORY_P}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_CONNECTOR_PUNCTUATION +This is another name for @code{UC_CATEGORY_Pc}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_DASH_PUNCTUATION +This is another name for @code{UC_CATEGORY_Pd}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_OPEN_PUNCTUATION +This is another name for @code{UC_CATEGORY_Ps} (``start punctuation''). +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_CLOSE_PUNCTUATION +This is another name for @code{UC_CATEGORY_Pe} (``end punctuation''). +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_INITIAL_QUOTE_PUNCTUATION +This is another name for @code{UC_CATEGORY_Pi}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_FINAL_QUOTE_PUNCTUATION +This is another name for @code{UC_CATEGORY_Pf}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_OTHER_PUNCTUATION +This is another name for @code{UC_CATEGORY_Po}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_SYMBOL +This is another name for @code{UC_CATEGORY_S}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_MATH_SYMBOL +This is another name for @code{UC_CATEGORY_Sm}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_CURRENCY_SYMBOL +This is another name for @code{UC_CATEGORY_Sc}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_MODIFIER_SYMBOL +This is another name for @code{UC_CATEGORY_Sk}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_OTHER_SYMBOL +This is another name for @code{UC_CATEGORY_So}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_SEPARATOR +This is another name for @code{UC_CATEGORY_Z}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_SPACE_SEPARATOR +This is another name for @code{UC_CATEGORY_Zs}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_LINE_SEPARATOR +This is another name for @code{UC_CATEGORY_Zl}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_PARAGRAPH_SEPARATOR +This is another name for @code{UC_CATEGORY_Zp}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_OTHER +This is another name for @code{UC_CATEGORY_C}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_CONTROL +This is another name for @code{UC_CATEGORY_Cc}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_FORMAT +This is another name for @code{UC_CATEGORY_Cf}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_SURROGATE +This is another name for @code{UC_CATEGORY_Cs}. All code points in this +category are invalid characters. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_PRIVATE_USE +This is another name for @code{UC_CATEGORY_Co}. +@end deftypevr + +@deftypevr Macro uc_general_category_t UC_UNASSIGNED +This is another name for @code{UC_CATEGORY_Cn}. Some code points in this +category are invalid characters. +@end deftypevr + +The following functions combine general categories, like in a boolean algebra, +except that there is no @samp{not} operation. + +@deftypefun uc_general_category_t uc_general_category_or (uc_general_category_t @var{category1}, uc_general_category_t @var{category2}) +Returns the union of two general categories. +This corresponds to the unions of the two sets of characters. +@end deftypefun + +@deftypefun uc_general_category_t uc_general_category_and (uc_general_category_t @var{category1}, uc_general_category_t @var{category2}) +Returns the intersection of two general categories as bit masks. +This @emph{does not} correspond to the intersection of the two sets of +characters. +@c Really?? +@end deftypefun + +@deftypefun uc_general_category_t uc_general_category_and_not (uc_general_category_t @var{category1}, uc_general_category_t @var{category2}) +Returns the intersection of a general category with the complement of a +second general category, as bit masks. +This @emph{does not} correspond to the intersection with complement, when +viewing the categories as sets of characters. +@c Really?? +@end deftypefun + +The following functions associate general categories with their name. + +@deftypefun {const char *} uc_general_category_name (uc_general_category_t @var{category}) +Returns the name of a general category. +Returns NULL if the general category corresponds to a bit mask that does not +have a name. +@end deftypefun + +@deftypefun uc_general_category_t uc_general_category_byname (const char *@var{category_name}) +Returns the general category given by name, e.g@. @code{"Lu"}. +@end deftypefun + +The following functions view general categories as sets of Unicode characters. + +@deftypefun uc_general_category_t uc_general_category (ucs4_t @var{uc}) +Returns the general category of a Unicode character. + +This function uses a big table. +@end deftypefun + +@deftypefun bool uc_is_general_category (ucs4_t @var{uc}, uc_general_category_t @var{category}) +Tests whether a Unicode character belongs to a given category. +The @var{category} argument can be a predefined general category or the +combination of several predefined general categories. +@end deftypefun + +@node Bit mask API +@subsection The bit mask API for general category + +The following are the predefined general category value as bit masks. +Additional general categories may be added in the future. + +@deftypevr Macro uint32_t UC_CATEGORY_MASK_L +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Lu +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Ll +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Lt +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Lm +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Lo +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_M +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Mn +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Mc +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Me +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_N +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Nd +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Nl +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_No +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_P +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Pc +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Pd +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Ps +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Pe +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Pi +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Pf +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Po +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_S +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Sm +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Sc +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Sk +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_So +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Z +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Zs +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Zl +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Zp +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_C +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Cc +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Cf +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Cs +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Co +@deftypevrx Macro uint32_t UC_CATEGORY_MASK_Cn +@end deftypevr + +The following function views general categories as sets of Unicode characters. + +@deftypefun bool uc_is_general_category_withtable (ucs4_t @var{uc}, uint32_t @var{bitmask}) +Tests whether a Unicode character belongs to a given category. +The @var{bitmask} argument can be a predefined general category bitmask or the +combination of several predefined general category bitmasks. + +This function uses a big table comprising all general categories. +@end deftypefun + +@node Canonical combining class +@section Canonical combining class + +@cindex canonical combining class +@cindex Unicode character, canonical combining class +Every Unicode character or code point has a @emph{canonical combining class} +assigned to it. + +What is the meaning of the canonical combining class? Essentially, it +indicates the priority with which a combining character is attached to its +base character. The characters for which the canonical combining class is 0 +are the base characters, and the characters for which it is greater than 0 are +the combining characters. Combining characters are rendered +near/attached/around their base character, and combining characters with small +combining classes are attached "first" or "closer" to the base character. + +The canonical combining class of a character is a number in the range +0..255. The possible values are described in the Unicode Character Database +@texnl{}@url{http://www.unicode.org/Public/UNIDATA/UCD.html}. The list here is +not definitive; more values can be added in future versions. + +@deftypevr Constant int UC_CCC_NR +The canonical combining class value for ``Not Reordered'' characters. +The value is 0. +@end deftypevr + +@deftypevr Constant int UC_CCC_OV +The canonical combining class value for ``Overlay'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_NK +The canonical combining class value for ``Nukta'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_KV +The canonical combining class value for ``Kana Voicing'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_VR +The canonical combining class value for ``Virama'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_ATBL +The canonical combining class value for ``Attached Below Left'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_ATB +The canonical combining class value for ``Attached Below'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_ATAR +The canonical combining class value for ``Attached Above Right'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_BL +The canonical combining class value for ``Below Left'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_B +The canonical combining class value for ``Below'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_BR +The canonical combining class value for ``Below Right'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_L +The canonical combining class value for ``Left'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_R +The canonical combining class value for ``Right'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_AL +The canonical combining class value for ``Above Left'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_A +The canonical combining class value for ``Above'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_AR +The canonical combining class value for ``Above Right'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_DB +The canonical combining class value for ``Double Below'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_DA +The canonical combining class value for ``Double Above'' characters. +@end deftypevr + +@deftypevr Constant int UC_CCC_IS +The canonical combining class value for ``Iota Subscript'' characters. +@end deftypevr + +The following function looks up the canonical combining class of a character. + +@deftypefun int uc_combining_class (ucs4_t @var{uc}) +Returns the canonical combining class of a Unicode character. +@end deftypefun + +@node Bidirectional category +@section Bidirectional category + +@cindex bidirectional category +@cindex Unicode character, bidirectional category +Every Unicode character or code point has a @emph{bidirectional category} +assigned to it. + +The bidirectional category guides the bidirectional algorithm@texnl{} +(@url{http://www.unicode.org/reports/tr9/}). The possible values are +the following. + +@deftypevr Constant int UC_BIDI_L +The bidirectional category for `Left-to-Right`'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_LRE +The bidirectional category for ``Left-to-Right Embedding'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_LRO +The bidirectional category for ``Left-to-Right Override'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_R +The bidirectional category for ``Right-to-Left'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_AL +The bidirectional category for ``Right-to-Left Arabic'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_RLE +The bidirectional category for ``Right-to-Left Embedding'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_RLO +The bidirectional category for ``Right-to-Left Override'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_PDF +The bidirectional category for ``Pop Directional Format'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_EN +The bidirectional category for ``European Number'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_ES +The bidirectional category for ``European Number Separator'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_ET +The bidirectional category for ``European Number Terminator'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_AN +The bidirectional category for ``Arabic Number'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_CS +The bidirectional category for ``Common Number Separator'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_NSM +The bidirectional category for ``Non-Spacing Mark'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_BN +The bidirectional category for ``Boundary Neutral'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_B +The bidirectional category for ``Paragraph Separator'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_S +The bidirectional category for ``Segment Separator'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_WS +The bidirectional category for ``Whitespace'' characters. +@end deftypevr + +@deftypevr Constant int UC_BIDI_ON +The bidirectional category for ``Other Neutral'' characters. +@end deftypevr + +The following functions implement the association between a bidirectional +category and its name. + +@deftypefun {const char *} uc_bidi_category_name (int @var{category}) +Returns the name of a bidirectional category. +@end deftypefun + +@deftypefun int uc_bidi_category_byname (const char *@var{category_name}) +Returns the bidirectional category given by name, e.g@. @code{"LRE"}. +@end deftypefun + +The following functions view bidirectional categories as sets of Unicode +characters. + +@deftypefun int uc_bidi_category (ucs4_t @var{uc}) +Returns the bidirectional category of a Unicode character. +@end deftypefun + +@deftypefun bool uc_is_bidi_category (ucs4_t @var{uc}, int @var{category}) +Tests whether a Unicode character belongs to a given bidirectional category. +@end deftypefun + +@node Decimal digit value +@section Decimal digit value + +@cindex value, of Unicode character +@cindex Unicode character, value +Decimal digits (like the digits from @samp{0} to @samp{9}) exist in many +scripts. The following function converts a decimal digit character to its +numerical value. + +@deftypefun int uc_decimal_value (ucs4_t @var{uc}) +Returns the decimal digit value of a Unicode character. +The return value is an integer in the range 0..9, or -1 for characters that +do not represent a decimal digit. +@end deftypefun + +@node Digit value +@section Digit value + +@cindex value, of Unicode character +@cindex Unicode character, value +Digit characters are like decimal digit characters, possibly in special forms, +like as superscript, subscript, or circled. The following function converts a +digit character to its numerical value. + +@deftypefun int uc_digit_value (ucs4_t @var{uc}) +Returns the digit value of a Unicode character. +The return value is an integer in the range 0..9, or -1 for characters that +do not represent a digit. +@end deftypefun + +@node Numeric value +@section Numeric value + +@cindex value, of Unicode character +@cindex Unicode character, value +There are also characters that represent numbers without a digit system, like +the Roman numerals, and fractional numbers, like 1/4 or 3/4. + +The following type represents the numeric value of a Unicode character. +@deftp Type uc_fraction_t +This is a structure type with the following fields: +@smallexample +int numerator; +int denominator; +@end smallexample +An integer @var{n} is represented by @code{numerator = @var{n}}, +@code{denominator = 1}. +@end deftp + +The following function converts a number character to its numerical value. + +@deftypefun uc_fraction_t uc_numeric_value (ucs4_t @var{uc}) +Returns the numeric value of a Unicode character. +The return value is a fraction, or the pseudo-fraction @code{@{ 0, 0 @}} for +characters that do not represent a number. +@end deftypefun + +@node Mirrored character +@section Mirrored character + +@cindex mirroring, of Unicode character +@cindex Unicode character, mirroring +Character mirroring is used to associate the closing parenthesis character +to the opening parenthesis character, the closing brace character with the +opening brace character, and so on. + +The following function looks up the mirrored character of a Unicode character. + +@deftypefun bool uc_mirror_char (ucs4_t @var{uc}, ucs4_t *@var{puc}) +Stores the mirrored character of a Unicode character @var{uc} in +@code{*@var{puc}} and returns @code{true}, if it exists. Otherwise it +stores @var{uc} unmodified in @code{*@var{puc}} and returns @code{false}. +@end deftypefun + +@node Properties +@section Properties + +@cindex properties, of Unicode character +@cindex Unicode character, properties +This section defines boolean properties of Unicode characters. This +means, a character either has the given property or does not have it. +In other words, the property can be viewed as a subset of the set of +Unicode characters. + +The GNU libunistring library provides two kinds of API for working with +properties. The object oriented API uses a type @code{uc_property_t} +to designate a property. In the function-based API, which is a bit more +low level, a property is merely a function. + +@menu +* Properties as objects:: +* Properties as functions:: +@end menu + +@node Properties as objects +@subsection Properties as objects -- the object oriented API + +The following type designates a property on Unicode characters. + +@deftp Type uc_property_t +This data type denotes a boolean property on Unicode characters. It is an +immediate type that can be copied by simple assignment, without involving +memory allocation. It is not an array type. +@end deftp + +Many Unicode properties are predefined. + +The following are general properties. + +@deftypevr Constant uc_property_t UC_PROPERTY_WHITE_SPACE +@deftypevrx Constant uc_property_t UC_PROPERTY_ALPHABETIC +@deftypevrx Constant uc_property_t UC_PROPERTY_OTHER_ALPHABETIC +@deftypevrx Constant uc_property_t UC_PROPERTY_NOT_A_CHARACTER +@deftypevrx Constant uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT +@deftypevrx Constant uc_property_t UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT +@deftypevrx Constant uc_property_t UC_PROPERTY_DEPRECATED +@deftypevrx Constant uc_property_t UC_PROPERTY_LOGICAL_ORDER_EXCEPTION +@deftypevrx Constant uc_property_t UC_PROPERTY_VARIATION_SELECTOR +@deftypevrx Constant uc_property_t UC_PROPERTY_PRIVATE_USE +@deftypevrx Constant uc_property_t UC_PROPERTY_UNASSIGNED_CODE_VALUE +@end deftypevr + +The following properties are related to case folding. + +@deftypevr Constant uc_property_t UC_PROPERTY_UPPERCASE +@deftypevrx Constant uc_property_t UC_PROPERTY_OTHER_UPPERCASE +@deftypevrx Constant uc_property_t UC_PROPERTY_LOWERCASE +@deftypevrx Constant uc_property_t UC_PROPERTY_OTHER_LOWERCASE +@deftypevrx Constant uc_property_t UC_PROPERTY_TITLECASE +@deftypevrx Constant uc_property_t UC_PROPERTY_SOFT_DOTTED +@end deftypevr + +The following properties are related to identifiers. + +@deftypevr Constant uc_property_t UC_PROPERTY_ID_START +@deftypevrx Constant uc_property_t UC_PROPERTY_OTHER_ID_START +@deftypevrx Constant uc_property_t UC_PROPERTY_ID_CONTINUE +@deftypevrx Constant uc_property_t UC_PROPERTY_OTHER_ID_CONTINUE +@deftypevrx Constant uc_property_t UC_PROPERTY_XID_START +@deftypevrx Constant uc_property_t UC_PROPERTY_XID_CONTINUE +@deftypevrx Constant uc_property_t UC_PROPERTY_PATTERN_WHITE_SPACE +@deftypevrx Constant uc_property_t UC_PROPERTY_PATTERN_SYNTAX +@end deftypevr + +The following properties have an influence on shaping and rendering. + +@deftypevr Constant uc_property_t UC_PROPERTY_JOIN_CONTROL +@deftypevrx Constant uc_property_t UC_PROPERTY_GRAPHEME_BASE +@deftypevrx Constant uc_property_t UC_PROPERTY_GRAPHEME_EXTEND +@deftypevrx Constant uc_property_t UC_PROPERTY_OTHER_GRAPHEME_EXTEND +@deftypevrx Constant uc_property_t UC_PROPERTY_GRAPHEME_LINK +@end deftypevr + +The following properties relate to bidirectional reordering. + +@deftypevr Constant uc_property_t UC_PROPERTY_BIDI_CONTROL +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_LEFT_TO_RIGHT +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_EUROPEAN_DIGIT +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_ARABIC_DIGIT +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_COMMON_SEPARATOR +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_BLOCK_SEPARATOR +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_SEGMENT_SEPARATOR +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_WHITESPACE +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_NON_SPACING_MARK +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_PDF +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE +@deftypevrx Constant uc_property_t UC_PROPERTY_BIDI_OTHER_NEUTRAL +@end deftypevr + +The following properties deal with number representations. + +@deftypevr Constant uc_property_t UC_PROPERTY_HEX_DIGIT +@deftypevrx Constant uc_property_t UC_PROPERTY_ASCII_HEX_DIGIT +@end deftypevr + +The following properties deal with CJK. + +@deftypevr Constant uc_property_t UC_PROPERTY_IDEOGRAPHIC +@deftypevrx Constant uc_property_t UC_PROPERTY_UNIFIED_IDEOGRAPH +@deftypevrx Constant uc_property_t UC_PROPERTY_RADICAL +@deftypevrx Constant uc_property_t UC_PROPERTY_IDS_BINARY_OPERATOR +@deftypevrx Constant uc_property_t UC_PROPERTY_IDS_TRINARY_OPERATOR +@end deftypevr + +Other miscellaneous properties are: + +@deftypevr Constant uc_property_t UC_PROPERTY_ZERO_WIDTH +@deftypevrx Constant uc_property_t UC_PROPERTY_SPACE +@deftypevrx Constant uc_property_t UC_PROPERTY_NON_BREAK +@deftypevrx Constant uc_property_t UC_PROPERTY_ISO_CONTROL +@deftypevrx Constant uc_property_t UC_PROPERTY_FORMAT_CONTROL +@deftypevrx Constant uc_property_t UC_PROPERTY_DASH +@deftypevrx Constant uc_property_t UC_PROPERTY_HYPHEN +@deftypevrx Constant uc_property_t UC_PROPERTY_PUNCTUATION +@deftypevrx Constant uc_property_t UC_PROPERTY_LINE_SEPARATOR +@deftypevrx Constant uc_property_t UC_PROPERTY_PARAGRAPH_SEPARATOR +@deftypevrx Constant uc_property_t UC_PROPERTY_QUOTATION_MARK +@deftypevrx Constant uc_property_t UC_PROPERTY_SENTENCE_TERMINAL +@deftypevrx Constant uc_property_t UC_PROPERTY_TERMINAL_PUNCTUATION +@deftypevrx Constant uc_property_t UC_PROPERTY_CURRENCY_SYMBOL +@deftypevrx Constant uc_property_t UC_PROPERTY_MATH +@deftypevrx Constant uc_property_t UC_PROPERTY_OTHER_MATH +@deftypevrx Constant uc_property_t UC_PROPERTY_PAIRED_PUNCTUATION +@deftypevrx Constant uc_property_t UC_PROPERTY_LEFT_OF_PAIR +@deftypevrx Constant uc_property_t UC_PROPERTY_COMBINING +@deftypevrx Constant uc_property_t UC_PROPERTY_COMPOSITE +@deftypevrx Constant uc_property_t UC_PROPERTY_DECIMAL_DIGIT +@deftypevrx Constant uc_property_t UC_PROPERTY_NUMERIC +@deftypevrx Constant uc_property_t UC_PROPERTY_DIACRITIC +@deftypevrx Constant uc_property_t UC_PROPERTY_EXTENDER +@deftypevrx Constant uc_property_t UC_PROPERTY_IGNORABLE_CONTROL +@end deftypevr + +The following function looks up a property by its name. + +@deftypefun uc_property_t uc_property_byname (const char *@var{property_name}) +Returns the property given by name, e.g. @code{"White space"}. If a property +with the given name exists, the result will satisfy the +@code{uc_property_is_valid} predicate. Otherwise the result will not satisfy +this predicate and must not be passed to functions that expect an +@code{uc_property_t} argument. + +This function references a big table of all predefined properties. Its use +can significantly increase the size of your application. +@end deftypefun + +@deftypefun bool uc_property_is_valid (uc_property_t property) +Returns @code{true} when the given property is valid, or @code{false} +otherwise. +@end deftypefun + +The following function views a property as a set of Unicode characters. + +@deftypefun bool uc_is_property (ucs4_t @var{uc}, uc_property_t @var{property}) +Tests whether the Unicode character @var{uc} has the given property. +@end deftypefun + +@node Properties as functions +@subsection Properties as functions -- the functional API + +The following are general properties. + +@deftypefun bool uc_is_property_white_space (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_alphabetic (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_other_alphabetic (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_not_a_character (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_default_ignorable_code_point (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_other_default_ignorable_code_point (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_deprecated (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_logical_order_exception (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_variation_selector (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_private_use (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_unassigned_code_value (ucs4_t @var{uc}) +@end deftypefun + +The following properties are related to case folding. + +@deftypefun bool uc_is_property_uppercase (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_other_uppercase (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_lowercase (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_other_lowercase (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_titlecase (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_soft_dotted (ucs4_t @var{uc}) +@end deftypefun + +The following properties are related to identifiers. + +@deftypefun bool uc_is_property_id_start (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_other_id_start (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_id_continue (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_other_id_continue (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_xid_start (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_xid_continue (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_pattern_white_space (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_pattern_syntax (ucs4_t @var{uc}) +@end deftypefun + +The following properties have an influence on shaping and rendering. + +@deftypefun bool uc_is_property_join_control (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_grapheme_base (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_grapheme_extend (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_other_grapheme_extend (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_grapheme_link (ucs4_t @var{uc}) +@end deftypefun + +The following properties relate to bidirectional reordering. + +@deftypefun bool uc_is_property_bidi_control (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_left_to_right (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_arabic_right_to_left (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_european_digit (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_eur_num_separator (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_eur_num_terminator (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_arabic_digit (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_common_separator (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_block_separator (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_segment_separator (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_whitespace (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_non_spacing_mark (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_boundary_neutral (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_pdf (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_embedding_or_override (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_bidi_other_neutral (ucs4_t @var{uc}) +@end deftypefun + +The following properties deal with number representations. + +@deftypefun bool uc_is_property_hex_digit (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_ascii_hex_digit (ucs4_t @var{uc}) +@end deftypefun + +The following properties deal with CJK. + +@deftypefun bool uc_is_property_ideographic (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_unified_ideograph (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_radical (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_ids_binary_operator (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_ids_trinary_operator (ucs4_t @var{uc}) +@end deftypefun + +Other miscellaneous properties are: + +@deftypefun bool uc_is_property_zero_width (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_space (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_non_break (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_iso_control (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_format_control (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_dash (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_hyphen (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_punctuation (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_line_separator (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_paragraph_separator (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_quotation_mark (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_sentence_terminal (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_terminal_punctuation (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_currency_symbol (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_math (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_other_math (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_paired_punctuation (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_left_of_pair (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_combining (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_composite (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_decimal_digit (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_numeric (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_diacritic (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_extender (ucs4_t @var{uc}) +@deftypefunx bool uc_is_property_ignorable_control (ucs4_t @var{uc}) +@end deftypefun + +@node Scripts +@section Scripts + +@cindex scripts +The Unicode characters are subdivided into scripts. + +The following type is used to represent a script: + +@deftp Type uc_script_t +This data type is a structure type that refers to statically allocated +read-only data. It contains the following fields: +@smallexample +const char *name; +@end smallexample + +The @code{name} field contains the name of the script. +@end deftp + +@cindex Unicode character, script +The following functions look up a script. + +@deftypefun {const uc_script_t *} uc_script (ucs4_t @var{uc}) +Returns the script of a Unicode character. Returns NULL if @var{uc} does not +belong to any script. +@end deftypefun + +@deftypefun {const uc_script_t *} uc_script_byname (const char *@var{script_name}) +Returns the script given by its name, e.g@. @code{"HAN"}. Returns NULL if a +script with the given name does not exist. +@end deftypefun + +The following function views a script as a set of Unicode characters. + +@deftypefun bool uc_is_script (ucs4_t @var{uc}, const uc_script_t *@var{script}) +Tests whether a Unicode character belongs to a given script. +@end deftypefun + +The following gives a global picture of all scripts. + +@deftypefun void uc_all_scripts (const uc_script_t **@var{scripts}, size_t *@var{count}) +Get the list of all scripts. Stores a pointer to an array of all scripts in +@code{*@var{scripts}} and the length of this array in @code{*@var{count}}. +@end deftypefun + +@node Blocks +@section Blocks + +@cindex block +The Unicode characters are subdivided into blocks. A block is an interval of +Unicode code points. + +The following type is used to represent a block. + +@deftp Type uc_block_t +This data type is a structure type that refers to statically allocated data. +It contains the following fields: +@smallexample +ucs4_t start; +ucs4_t end; +const char *name; +@end smallexample + +The @code{start} field is the first Unicode code point in the block. + +The @code{end} field is the last Unicode code point in the block. + +The @code{name} field is the name of the block. +@end deftp + +@cindex Unicode character, block +The following function looks up a block. + +@deftypefun {const uc_block_t *} uc_block (ucs4_t @var{uc}) +Returns the block a character belongs to. +@end deftypefun + +The following function views a block as a set of Unicode characters. + +@deftypefun bool uc_is_block (ucs4_t @var{uc}, const uc_block_t *@var{block}) +Tests whether a Unicode character belongs to a given block. +@end deftypefun + +The following gives a global picture of all block. + +@deftypefun void uc_all_blocks (const uc_block_t **@var{blocks}, size_t *@var{count}) +Get the list of all blocks. Stores a pointer to an array of all blocks in +@code{*@var{blocks}} and the length of this array in @code{*@var{count}}. +@end deftypefun + +@node ISO C and Java syntax +@section ISO C and Java syntax + +@cindex C, programming language +@cindex Java, programming language +@cindex identifiers +The following properties are taken from language standards. The supported +language standards are ISO C 99 and Java. + +@deftypefun bool uc_is_c_whitespace (ucs4_t @var{uc}) +Tests whether a Unicode character is considered whitespace in ISO C 99. +@end deftypefun + +@deftypefun bool uc_is_java_whitespace (ucs4_t @var{uc}) +Tests whether a Unicode character is considered whitespace in Java. +@end deftypefun + +The following enumerated values are the possible return values of the functions +@code{uc_c_ident_category} and @code{uc_java_ident_category}. + +@deftypevr Constant int UC_IDENTIFIER_START +This return value means that the given character is valid as first or +subsequent character in an identifier. +@end deftypevr + +@deftypevr Constant int UC_IDENTIFIER_VALID +This return value means that the given character is valid as subsequent +character only. +@end deftypevr + +@deftypevr Constant int UC_IDENTIFIER_INVALID +This return value means that the given character is not valid in an identifier. +@end deftypevr + +@deftypevr Constant int UC_IDENTIFIER_IGNORABLE +This return value (only for Java) means that the given character is ignorable. +@end deftypevr + +The following function determine whether a given character can be a constituent +of an identifier in the given programming language. + +@cindex Unicode character, validity in C identifiers +@deftypefun int uc_c_ident_category (ucs4_t @var{uc}) +Returns the categorization of a Unicode character with respect to the ISO C 99 +identifier syntax. +@end deftypefun + +@cindex Unicode character, validity in Java identifiers +@deftypefun int uc_java_ident_category (ucs4_t @var{uc}) +Returns the categorization of a Unicode character with respect to the Java +identifier syntax. +@end deftypefun + +@node Classifications like in ISO C +@section Classifications like in ISO C + +@cindex C-like API +@cindex Unicode character, classification like in C +The following character classifications mimic those declared in the ISO C +header files @code{} and @code{}. These functions are +deprecated, because this set of functions was designed with ASCII in mind and +cannot reflect the more diverse reality of the Unicode character set. But +they can be a quick-and-dirty porting aid when migrating from @code{wchar_t} +APIs to Unicode strings. + +@deftypefun bool uc_is_alnum (ucs4_t @var{uc}) +Tests for any character for which @code{uc_is_alpha} or @code{uc_is_digit} is +true. +@end deftypefun + +@deftypefun bool uc_is_alpha (ucs4_t @var{uc}) +Tests for any character for which @code{uc_is_upper} or @code{uc_is_lower} is +true, or any character that is one of a locale-specific set of characters for +which none of @code{uc_is_cntrl}, @code{uc_is_digit}, @code{uc_is_punct}, or +@code{uc_is_space} is true. +@end deftypefun + +@deftypefun bool uc_is_cntrl (ucs4_t @var{uc}) +Tests for any control character. +@end deftypefun + +@deftypefun bool uc_is_digit (ucs4_t @var{uc}) +Tests for any character that corresponds to a decimal-digit character. +@end deftypefun + +@deftypefun bool uc_is_graph (ucs4_t @var{uc}) +Tests for any character for which @code{uc_is_print} is true and +@code{uc_is_space} is false. +@end deftypefun + +@deftypefun bool uc_is_lower (ucs4_t @var{uc}) +Tests for any character that corresponds to a lowercase letter or is one +of a locale-specific set of characters for which none of @code{uc_is_cntrl}, +@code{uc_is_digit}, @code{uc_is_punct}, or @code{uc_is_space} is true. +@end deftypefun + +@deftypefun bool uc_is_print (ucs4_t @var{uc}) +Tests for any printing character. +@end deftypefun + +@deftypefun bool uc_is_punct (ucs4_t @var{uc}) +Tests for any printing character that is one of a locale-specific set of +characters for which neither @code{uc_is_space} nor @code{uc_is_alnum} is true. +@end deftypefun + +@deftypefun bool uc_is_space (ucs4_t @var{uc}) +Test for any character that corresponds to a locale-specific set of characters +for which none of @code{uc_is_alnum}, @code{uc_is_graph}, or @code{uc_is_punct} +is true. +@end deftypefun + +@deftypefun bool uc_is_upper (ucs4_t @var{uc}) +Tests for any character that corresponds to an uppercase letter or is one +of a locale-specific set of characters for which none of @code{uc_is_cntrl}, +@code{uc_is_digit}, @code{uc_is_punct}, or @code{uc_is_space} is true. +@end deftypefun + +@deftypefun bool uc_is_xdigit (ucs4_t @var{uc}) +Tests for any character that corresponds to a hexadecimal-digit character. +@end deftypefun + +@deftypefun bool uc_is_blank (ucs4_t @var{uc}) +Tests for any character that corresponds to a standard blank character or +a locale-specific set of characters for which @code{uc_is_alnum} is false. +@end deftypefun diff --git a/doc/unilbrk.texi b/doc/unilbrk.texi new file mode 100644 index 00000000..5441f317 --- /dev/null +++ b/doc/unilbrk.texi @@ -0,0 +1,88 @@ +@node unilbrk.h +@chapter Line breaking @code{} + +@cindex line breaks +@cindex breaks, line +@cindex wrapping +This include file declares functions for determining where in a string +line breaks could or should be introduced, in order to make the displayed +string fit into a column of given width. + +These functions are locale dependent. The @var{encoding} argument identifies +the encoding (e.g@. @code{"ISO-8859-2"} for Polish). + +The following enumerated values indicate whether, at a given position, a line +break is possible or not. Given an string @var{s} as an array +@code{@var{s}[0..@var{n}-1]} and a position @var{i}, the values have the +following meanings: + +@deftypevr Constant int UC_BREAK_MANDATORY +This value indicates that @code{@var{s}[@var{i}]} is a line break character. +@end deftypevr + +@deftypevr Constant int UC_BREAK_POSSIBLE +This value indicates that a line break may be inserted between +@code{@var{s}[@var{i}-1]} and @code{@var{s}[@var{i}]}. +@end deftypevr + +@deftypevr Constant int UC_BREAK_HYPHENATION +This value indicates that a hyphen and a line break may be inserted between +@code{@var{s}[@var{i}-1]} and @code{@var{s}[@var{i}]}. But beware of language +dependent hyphenation rules. +@end deftypevr + +@deftypevr Constant int UC_BREAK_PROHIBITED +This value indicates that @code{@var{s}[@var{i}-1]} and @code{@var{s}[@var{i}]} +must not be separated. +@end deftypevr + +@deftypevr Constant int UC_BREAK_UNDEFINED +This value is not used as a return value; rather, in the overriding argument of +the @code{u*_width_linebreaks} functions, it indicates the absence of an +override. +@end deftypevr + +The following functions determine the positions at which line breaks are +possible. + +@deftypefun void u8_possible_linebreaks (const uint8_t *@var{s}, size_t @var{n}, const char *@var{encoding}, char *@var{p}) +@deftypefunx void u16_possible_linebreaks (const uint16_t *@var{s}, size_t @var{n}, const char *@var{encoding}, char *@var{p}) +@deftypefunx void u32_possible_linebreaks (const uint32_t *@var{s}, size_t @var{n}, const char *@var{encoding}, char *@var{p}) +@deftypefunx void ulc_possible_linebreaks (const char *@var{s}, size_t @var{n}, const char *@var{encoding}, char *@var{p}) +Determines the line break points in @var{s}, and stores the result at +@code{@var{p}[0..@var{n}-1]}. Every @code{@var{p}[@var{i}]} is assigned one of +the values @code{UC_BREAK_MANDATORY}, @code{UC_BREAK_POSSIBLE}, +@code{UC_BREAK_HYPHENATION}, @code{UC_BREAK_PROHIBITED}. +@end deftypefun + +The following functions determine where line breaks should be inserted so that +each line fits in a given width, when output to a device that uses +non-proportional fonts. + +@deftypefun int u8_width_linebreaks (const uint8_t *@var{s}, size_t @var{n}, int @var{width}, int @var{start_column}, int @var{at_end_columns}, const char *@var{override}, const char *@var{encoding}, char *@var{p}) +@deftypefunx int u16_width_linebreaks (const uint16_t *@var{s}, size_t @var{n}, int @var{width}, int @var{start_column}, int @var{at_end_columns}, const char *@var{override}, const char *@var{encoding}, char *@var{p}) +@deftypefunx int u32_width_linebreaks (const uint32_t *@var{s}, size_t @var{n}, int @var{width}, int @var{start_column}, int @var{at_end_columns}, const char *@var{override}, const char *@var{encoding}, char *@var{p}) +@deftypefunx int ulc_width_linebreaks (const char *@var{s}, size_t @var{n}, int @var{width}, int @var{start_column}, int @var{at_end_columns}, const char *@var{override}, const char *@var{encoding}, char *@var{p}) +Chooses the best line breaks, assuming that every character occupies a width +given by the @code{uc_width} function (see @ref{uniwidth.h}). + +The string is @code{@var{s}[0..@var{n}-1]}. + +The maximum number of columns per line is given as @var{width}. +The starting column of the string is given as @var{start_column}. +If the algorithm shall keep room after the last piece, this amount of room can +be given as @var{at_end_columns}. + +@var{override} is an optional override; if +@code{@var{override}[@var{i}] != UC_BREAK_UNDEFINED}, +@code{@var{override}[@var{i}]} takes precedence over @code{@var{p}[@var{i}]} +as returned by the @code{u*_possible_linebreaks} function. + +The given @var{encoding} is used for disambiguating widths in @code{uc_width}. + +Returns the column after the end of the string, and stores the result at +@code{@var{p}[0..@var{n}-1]}. Every @code{@var{p}[@var{i}]} is assigned one of +the values @code{UC_BREAK_MANDATORY}, @code{UC_BREAK_POSSIBLE}, +@code{UC_BREAK_HYPHENATION}, @code{UC_BREAK_PROHIBITED}. Here the value +@code{UC_BREAK_POSSIBLE} indicates that a line break @emph{should} be inserted. +@end deftypefun diff --git a/doc/uniname.texi b/doc/uniname.texi new file mode 100644 index 00000000..66461be5 --- /dev/null +++ b/doc/uniname.texi @@ -0,0 +1,32 @@ +@node uniname.h +@chapter Names of Unicode characters @code{} + +@cindex Unicode character, name +This include file implements the association between a Unicode character and +its name. + +The name of a Unicode character allows to distinguish it from other, similar +looking characters. For example, the character @samp{x} has the name +@code{"LATIN SMALL LETTER X"} and is therefore different from the character +named @code{"MULTIPLICATION SIGN"}. + +@deftypevr Macro {unsigned int} UNINAME_MAX +This macro expands to a constant that is the required size of buffer for a +Unicode character name. +@end deftypevr + +@deftypefun {char *} unicode_character_name (ucs4_t @var{uc}, char *@var{buf}) +Looks up the name of a Unicode character, in uppercase ASCII. +@var{buf} must point to a buffer, at least @code{UNINAME_MAX} bytes in size. +Returns the filled @var{buf}, or NULL if the character does not have a name. +@end deftypefun + +@deftypefun ucs4_t unicode_name_character (const char *@var{name}) +Looks up the Unicode character with a given name, in upper- or lowercase +ASCII. Returns the character if found, or @code{UNINAME_INVALID} if not found. +@end deftypefun + +@deftypevr Macro ucs4_t UNINAME_INVALID +This macro expands to a constant that is a special return value of the +@code{unicode_name_character} function. +@end deftypevr diff --git a/doc/uninorm.texi b/doc/uninorm.texi new file mode 100644 index 00000000..d4206d50 --- /dev/null +++ b/doc/uninorm.texi @@ -0,0 +1,299 @@ +@node uninorm.h +@chapter Normalization forms (composition and decomposition) @code{} + +@cindex normal forms +@cindex normalizing +This include file defines functions for transforming Unicode strings to one +of the four normal forms, known as NFC, NFD, NKFC, NFKD. These +transformations involve decomposition and --- for NFC and NFKC --- composition +of Unicode characters. + +@menu +* Decomposition of characters:: +* Composition of characters:: +* Normalization of strings:: +* Normalizing comparisons:: +* Normalization of streams:: +@end menu + +@node Decomposition of characters +@section Decomposition of Unicode characters + +@cindex decomposing +The following enumerated values are the possible types of decomposition of a +Unicode character. + +@deftypevr Constant int UC_DECOMP_CANONICAL +Denotes canonical decomposition. +@end deftypevr + +@deftypevr Constant int UC_DECOMP_FONT +UCD marker: @code{}. Denotes a font variant (e.g. a blackletter form). +@end deftypevr + +@deftypevr Constant int UC_DECOMP_NOBREAK +UCD marker: @code{}. +Denotes a no-break version of a space or hyphen. +@end deftypevr + +@deftypevr Constant int UC_DECOMP_INITIAL +UCD marker: @code{}. +Denotes an initial presentation form (Arabic). +@end deftypevr + +@deftypevr Constant int UC_DECOMP_MEDIAL +UCD marker: @code{}. +Denotes a medial presentation form (Arabic). +@end deftypevr + +@deftypevr Constant int UC_DECOMP_FINAL +UCD marker: @code{}. +Denotes a final presentation form (Arabic). +@end deftypevr + +@deftypevr Constant int UC_DECOMP_ISOLATED +UCD marker: @code{}. +Denotes an isolated presentation form (Arabic). +@end deftypevr + +@deftypevr Constant int UC_DECOMP_CIRCLE +UCD marker: @code{}. +Denotes an encircled form. +@end deftypevr + +@deftypevr Constant int UC_DECOMP_SUPER +UCD marker: @code{}. +Denotes a superscript form. +@end deftypevr + +@deftypevr Constant int UC_DECOMP_SUB +UCD marker: @code{}. +Denotes a subscript form. +@end deftypevr + +@deftypevr Constant int UC_DECOMP_VERTICAL +UCD marker: @code{}. +Denotes a vertical layout presentation form. +@end deftypevr + +@deftypevr Constant int UC_DECOMP_WIDE +UCD marker: @code{}. +Denotes a wide (or zenkaku) compatibility character. +@end deftypevr + +@deftypevr Constant int UC_DECOMP_NARROW +UCD marker: @code{}. +Denotes a narrow (or hankaku) compatibility character. +@end deftypevr + +@deftypevr Constant int UC_DECOMP_SMALL +UCD marker: @code{}. +Denotes a small variant form (CNS compatibility). +@end deftypevr + +@deftypevr Constant int UC_DECOMP_SQUARE +UCD marker: @code{}. +Denotes a CJK squared font variant. +@end deftypevr + +@deftypevr Constant int UC_DECOMP_FRACTION +UCD marker: @code{}. +Denotes a vulgar fraction form. +@end deftypevr + +@deftypevr Constant int UC_DECOMP_COMPAT +UCD marker: @code{}. +Denotes an otherwise unspecified compatibility character. +@end deftypevr + +The following constant denotes the maximum size of decomposition of a single +Unicode character. + +@deftypevr Macro {unsigned int} UC_DECOMPOSITION_MAX_LENGTH +This macro expands to a constant that is the required size of buffer passed to +the @code{uc_decomposition} and @code{uc_canonical_decomposition} functions. +@end deftypevr + +The following functions decompose a Unicode character. + +@deftypefun int uc_decomposition (ucs4_t @var{uc}, int *@var{decomp_tag}, ucs4_t *@var{decomposition}) +Returns the character decomposition mapping of the Unicode character @var{uc}. +@var{decomposition} must point to an array of at least +@code{UC_DECOMPOSITION_MAX_LENGTH} @code{ucs_t} elements. + +When a decomposition exists, @code{@var{decomposition}[0..@var{n}-1]} and +@code{*@var{decomp_tag}} are filled and @var{n} is returned. Otherwise -1 is +returned. +@end deftypefun + +@deftypefun int uc_canonical_decomposition (ucs4_t @var{uc}, ucs4_t *@var{decomposition}) +Returns the canonical character decomposition mapping of the Unicode character +@var{uc}. @var{decomposition} must point to an array of at least +@code{UC_DECOMPOSITION_MAX_LENGTH} @code{ucs_t} elements. + +When a decomposition exists, @code{@var{decomposition}[0..@var{n}-1]} is filled +and @var{n} is returned. Otherwise -1 is returned. +@end deftypefun + +@node Composition of characters +@section Composition of Unicode characters + +@cindex composing, Unicode characters +@cindex combining, Unicode characters +The following function composes a Unicode character from two Unicode +characters. + +@deftypefun ucs4_t uc_composition (ucs4_t @var{uc1}, ucs4_t @var{uc2}) +Attempts to combine the Unicode characters @var{uc1}, @var{uc2}. +@var{uc1} is known to have canonical combining class 0. + +Returns the combination of @var{uc1} and @var{uc2}, if it exists. +Returns 0 otherwise. + +Not all decompositions can be recombined using this function. See the Unicode +file @file{CompositionExclusions.txt} for details. +@end deftypefun + +@node Normalization of strings +@section Normalization of strings + +The Unicode standard defines four normalization forms for Unicode strings. +The following type is used to denote a normalization form. + +@deftp Type uninorm_t +An object of type @code{uninorm_t} denotes a Unicode normalization form. +This is a scalar type; its values can be compared with @code{==}. +@end deftp + +The following constants denote the four normalization forms. + +@deftypevr Macro uninorm_t UNINORM_NFD +Denotes Normalization form D: canonical decomposition. +@end deftypevr + +@deftypevr Macro uninorm_t UNINORM_NFC +Normalization form C: canonical decomposition, then canonical composition. +@end deftypevr + +@deftypevr Macro uninorm_t UNINORM_NFKD +Normalization form KD: compatibility decomposition. +@end deftypevr + +@deftypevr Macro uninorm_t UNINORM_NFKC +Normalization form KC: compatibility decomposition, then canonical composition. +@end deftypevr + +The following functions operate on @code{uninorm_t} objects. + +@deftypefun bool uninorm_is_compat_decomposing (uninorm_t @var{nf}) +Tests whether the normalization form @var{nf} does compatibility decomposition. +@end deftypefun + +@deftypefun bool uninorm_is_composing (uninorm_t @var{nf}) +Tests whether the normalization form @var{nf} includes canonical composition. +@end deftypefun + +@deftypefun uninorm_t uninorm_decomposing_form (uninorm_t @var{nf}) +Returns the decomposing variant of the normalization form @var{nf}. +This maps NFC,NFD @arrow{} NFD and NFKC,NFKD @arrow{} NFKD. +@end deftypefun + +The following functions apply a Unicode normalization form to a Unicode string. + +@deftypefun {uint8_t *} u8_normalize (uninorm_t @var{nf}, const uint8_t *@var{s}, size_t @var{n}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint16_t *} u16_normalize (uninorm_t @var{nf}, const uint16_t *@var{s}, size_t @var{n}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {uint32_t *} u32_normalize (uninorm_t @var{nf}, const uint32_t *@var{s}, size_t @var{n}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Returns the specified normalization form of a string. +@end deftypefun + +@node Normalizing comparisons +@section Normalizing comparisons + +@cindex comparing, ignoring normalization +The following functions compare Unicode string, ignoring differences in +normalization. + +@deftypefun int u8_normcmp (const uint8_t *@var{s1}, size_t @var{n1}, const uint8_t *@var{s2}, size_t @var{n2}, uninorm_t @var{nf}, int *@var{resultp}) +@deftypefunx int u16_normcmp (const uint16_t *@var{s1}, size_t @var{n1}, const uint16_t *@var{s2}, size_t @var{n2}, uninorm_t @var{nf}, int *@var{resultp}) +@deftypefunx int u32_normcmp (const uint32_t *@var{s1}, size_t @var{n1}, const uint32_t *@var{s2}, size_t @var{n2}, uninorm_t @var{nf}, int *@var{resultp}) +Compares @var{s1} and @var{s2}, ignoring differences in normalization. + +@var{nf} must be either @code{UNINORM_NFD} or @code{UNINORM_NFKD}. + +If successful, sets @code{*@var{resultp}} to -1 if @var{s1} < @var{s2}, +0 if @var{s1} = @var{s2}, 1 if @var{s1} > @var{s2}, and returns 0. +Upon failure, returns -1 with @code{errno} set. +@end deftypefun + +@cindex comparing, ignoring normalization, with collation rules +@cindex comparing, with collation rules, ignoring normalization +@deftypefun {char *} u8_normxfrm (const uint8_t *@var{s}, size_t @var{n}, uninorm_t @var{nf}, char *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {char *} u16_normxfrm (const uint16_t *@var{s}, size_t @var{n}, uninorm_t @var{nf}, char *@var{resultbuf}, size_t *@var{lengthp}) +@deftypefunx {char *} u32_normxfrm (const uint32_t *@var{s}, size_t @var{n}, uninorm_t @var{nf}, char *@var{resultbuf}, size_t *@var{lengthp}) +Converts the string @var{s} of length @var{n} to a NUL-terminated byte +sequence, in such a way that comparing @code{u8_normxfrm (@var{s1})} and +@code{u8_normxfrm (@var{s2})} with the @code{u8_cmp2} function is equivalent to +comparing @var{s1} and @var{s2} with the @code{u8_normcoll} function. + +@var{nf} must be either @code{UNINORM_NFC} or @code{UNINORM_NFKC}. +@end deftypefun + +@deftypefun int u8_normcoll (const uint8_t *@var{s1}, size_t @var{n1}, const uint8_t *@var{s2}, size_t @var{n2}, uninorm_t @var{nf}, int *@var{resultp}) +@deftypefunx int u16_normcoll (const uint16_t *@var{s1}, size_t @var{n1}, const uint16_t *@var{s2}, size_t @var{n2}, uninorm_t @var{nf}, int *@var{resultp}) +@deftypefunx int u32_normcoll (const uint32_t *@var{s1}, size_t @var{n1}, const uint32_t *@var{s2}, size_t @var{n2}, uninorm_t @var{nf}, int *@var{resultp}) +Compares @var{s1} and @var{s2}, ignoring differences in normalization, using +the collation rules of the current locale. + +@var{nf} must be either @code{UNINORM_NFC} or @code{UNINORM_NFKC}. + +If successful, sets @code{*@var{resultp}} to -1 if @var{s1} < @var{s2}, +0 if @var{s1} = @var{s2}, 1 if @var{s1} > @var{s2}, and returns 0. +Upon failure, returns -1 with @code{errno} set. +@end deftypefun + +@node Normalization of streams +@section Normalization of streams of Unicode characters + +@cindex stream, normalizing a +A ``stream of Unicode characters'' is essentially a function that accepts an +@code{ucs4_t} argument repeatedly, optionally combined with a function that +``flushes'' the stream. + +@deftp Type {struct uninorm_filter} +This is the data type of a stream of Unicode characters that normalizes its +input according to a given normalization form and passes the normalized +character sequence to the encapsulated stream of Unicode characters. +@end deftp + +@deftypefun {struct uninorm_filter *} uninorm_filter_create (uninorm_t @var{nf}, int (*@var{stream_func}) (void *@var{stream_data}, ucs4_t @var{uc}), void *@var{stream_data}) +Creates and returns a normalization filter for Unicode characters. + +The pair (@var{stream_func}, @var{stream_data}) is the encapsulated stream. +@code{@var{stream_func} (@var{stream_data}, @var{uc})} receives the Unicode +character @var{uc} and returns 0 if successful, or -1 with @code{errno} set +upon failure. + +Returns the new filter, or NULL with @code{errno} set upon failure. +@end deftypefun + +@deftypefun int uninorm_filter_write (struct uninorm_filter *@var{filter}, ucs4_t @var{uc}) +Stuffs a Unicode character into a normalizing filter. +Returns 0 if successful, or -1 with @code{errno} set upon failure. +@end deftypefun + +@deftypefun int uninorm_filter_flush (struct uninorm_filter *@var{filter}) +Brings data buffered in the filter to its destination, the encapsulated stream. + +Returns 0 if successful, or -1 with @code{errno} set upon failure. + +Note! If after calling this function, additional characters are written +into the filter, the resulting character sequence in the encapsulated stream +will not necessarily be normalized. +@end deftypefun + +@deftypefun int uninorm_filter_free (struct uninorm_filter *@var{filter}) +Brings data buffered in the filter to its destination, the encapsulated stream, +then closes and frees the filter. + +Returns 0 if successful, or -1 with @code{errno} set upon failure. +@end deftypefun diff --git a/doc/uniregex.texi b/doc/uniregex.texi new file mode 100644 index 00000000..ae290ffa --- /dev/null +++ b/doc/uniregex.texi @@ -0,0 +1,5 @@ +@node uniregex.h +@chapter Regular expressions @code{} + +@cindex regular expression +This include file is not yet implemented. diff --git a/doc/unistdio.texi b/doc/unistdio.texi new file mode 100644 index 00000000..e1fb9cfa --- /dev/null +++ b/doc/unistdio.texi @@ -0,0 +1,197 @@ +@node unistdio.h +@chapter Output with Unicode strings @code{} + +@cindex formatted output +@cindex output, formatted +This include file declares functions for doing formatted output with Unicode +strings. It defines a set of functions similar to @code{fprintf} and +@code{sprintf}, which are declared in @code{}. + +These functions work like the @code{printf} function family. +In the format string: +@itemize +@item +The format directive @samp{U} takes an UTF-8 string (@code{const uint8_t *}). +@item +The format directive @samp{lU} takes an UTF-16 string +(@code{const uint16_t *}). +@item +The format directive @samp{llU} takes an UTF-32 string +(@code{const uint32_t *}). +@end itemize + +A function name with an infix @samp{v} indicates that a @code{va_list} is +passed instead of multiple arguments. + +The functions @code{*sprintf} have a @var{buf} argument that is assumed to be +large enough. +(@emph{DANGEROUS! Overflowing the buffer will crash the program.}) + +The functions @code{*snprintf} have a @var{buf} argument that is assumed to be +@var{size} units large. (@emph{DANGEROUS! The resulting string might be +truncated in the middle of a multibyte character.}) + +The functions @code{*asprintf} have a @var{resultp} argument. The result will +be freshly allocated and stored in @code{*resultp}. + +The functions @code{*asnprintf} have a (@var{resultbuf}, @var{lengthp}) +argument pair. If @var{resultbuf} is not NULL and the result fits into +@code{*@var{lengthp}} units, it is put in @var{resultbuf}, and @var{resultbuf} +is returned. Otherwise, a freshly allocated string is returned. In both +cases, @code{*@var{lengthp}} is set to the length (number of units) of the +returned string. In case of error, NULL is returned and @code{errno} is set. + +The following functions take an ASCII format string and return a result that +is a @code{char *} string in locale encoding. + +@deftypefun int ulc_sprintf (char *@var{buf}, const char *@var{format}, ...) +@end deftypefun + +@deftypefun int ulc_snprintf (char *@var{buf}, size_t size, const char *@var{format}, ...) +@end deftypefun + +@deftypefun int ulc_asprintf (char **@var{resultp}, const char *@var{format}, ...) +@end deftypefun + +@deftypefun {char *} ulc_asnprintf (char *@var{resultbuf}, size_t *@var{lengthp}, const char *@var{format}, ...) +@end deftypefun + +@deftypefun int ulc_vsprintf (char *@var{buf}, const char *@var{format}, va_list @var{ap}) +@end deftypefun + +@deftypefun int ulc_vsnprintf (char *@var{buf}, size_t size, const char *@var{format}, va_list @var{ap}) +@end deftypefun + +@deftypefun int ulc_vasprintf (char **@var{resultp}, const char *@var{format}, va_list @var{ap}) +@end deftypefun + +@deftypefun {char *} ulc_vasnprintf (char *@var{resultbuf}, size_t *@var{lengthp}, const char *@var{format}, va_list @var{ap}) +@end deftypefun + +The following functions take an ASCII format string and return a result in +UTF-8 format. + +@deftypefun int u8_sprintf (uint8_t *@var{buf}, const char *@var{format}, ...) +@end deftypefun +@deftypefun int u8_snprintf (uint8_t *@var{buf}, size_t @var{size}, const char *@var{format}, ...) +@end deftypefun +@deftypefun int u8_asprintf (uint8_t **@var{resultp}, const char *@var{format}, ...) +@end deftypefun +@deftypefun {uint8_t *} u8_asnprintf (uint8_t *@var{resultbuf}, size_t *@var{lengthp}, const char *@var{format}, ...) +@end deftypefun +@deftypefun int u8_vsprintf (uint8_t *@var{buf}, const char *@var{format}, va_list ap) +@end deftypefun +@deftypefun int u8_vsnprintf (uint8_t *@var{buf}, size_t @var{size}, const char *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun int u8_vasprintf (uint8_t **@var{resultp}, const char *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun {uint8_t *} u8_vasnprintf (uint8_t *resultbuf, size_t *@var{lengthp}, const char *@var{format}, va_list @var{ap}) +@end deftypefun + +The following functions take an UTF-8 format string and return a result in +UTF-8 format. + +@deftypefun int u8_u8_sprintf (uint8_t *@var{buf}, const uint8_t *@var{format}, ...) +@end deftypefun +@deftypefun int u8_u8_snprintf (uint8_t *@var{buf}, size_t @var{size}, const uint8_t *@var{format}, ...) +@end deftypefun +@deftypefun int u8_u8_asprintf (uint8_t **@var{resultp}, const uint8_t *@var{format}, ...) +@end deftypefun +@deftypefun {uint8_t *} u8_u8_asnprintf (uint8_t *resultbuf, size_t *@var{lengthp}, const uint8_t *@var{format}, ...) +@end deftypefun +@deftypefun int u8_u8_vsprintf (uint8_t *@var{buf}, const uint8_t *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun int u8_u8_vsnprintf (uint8_t *@var{buf}, size_t @var{size}, const uint8_t *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun int u8_u8_vasprintf (uint8_t **@var{resultp}, const uint8_t *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun {uint8_t *} u8_u8_vasnprintf (uint8_t *resultbuf, size_t *@var{lengthp}, const uint8_t *@var{format}, va_list @var{ap}) +@end deftypefun + +The following functions take an ASCII format string and return a result in +UTF-16 format. + +@deftypefun int u16_sprintf (uint16_t *@var{buf}, const char *@var{format}, ...) +@end deftypefun +@deftypefun int u16_snprintf (uint16_t *@var{buf}, size_t @var{size}, const char *@var{format}, ...) +@end deftypefun +@deftypefun int u16_asprintf (uint16_t **@var{resultp}, const char *@var{format}, ...) +@end deftypefun +@deftypefun {uint16_t *} u16_asnprintf (uint16_t *@var{resultbuf}, size_t *@var{lengthp}, const char *@var{format}, ...) +@end deftypefun +@deftypefun int u16_vsprintf (uint16_t *@var{buf}, const char *@var{format}, va_list ap) +@end deftypefun +@deftypefun int u16_vsnprintf (uint16_t *@var{buf}, size_t @var{size}, const char *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun int u16_vasprintf (uint16_t **@var{resultp}, const char *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun {uint16_t *} u16_vasnprintf (uint16_t *resultbuf, size_t *@var{lengthp}, const char *@var{format}, va_list @var{ap}) +@end deftypefun + +The following functions take an UTF-16 format string and return a result in +UTF-16 format. + +@deftypefun int u16_u16_sprintf (uint16_t *@var{buf}, const uint16_t *@var{format}, ...) +@end deftypefun +@deftypefun int u16_u16_snprintf (uint16_t *@var{buf}, size_t @var{size}, const uint16_t *@var{format}, ...) +@end deftypefun +@deftypefun int u16_u16_asprintf (uint16_t **@var{resultp}, const uint16_t *@var{format}, ...) +@end deftypefun +@deftypefun {uint16_t *} u16_u16_asnprintf (uint16_t *resultbuf, size_t *@var{lengthp}, const uint16_t *@var{format}, ...) +@end deftypefun +@deftypefun int u16_u16_vsprintf (uint16_t *@var{buf}, const uint16_t *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun int u16_u16_vsnprintf (uint16_t *@var{buf}, size_t @var{size}, const uint16_t *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun int u16_u16_vasprintf (uint16_t **@var{resultp}, const uint16_t *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun {uint16_t *} u16_u16_vasnprintf (uint16_t *resultbuf, size_t *@var{lengthp}, const uint16_t *@var{format}, va_list @var{ap}) +@end deftypefun + +The following functions take an ASCII format string and return a result in +UTF-32 format. + +@deftypefun int u32_sprintf (uint32_t *@var{buf}, const char *@var{format}, ...) +@end deftypefun +@deftypefun int u32_snprintf (uint32_t *@var{buf}, size_t @var{size}, const char *@var{format}, ...) +@end deftypefun +@deftypefun int u32_asprintf (uint32_t **@var{resultp}, const char *@var{format}, ...) +@end deftypefun +@deftypefun {uint32_t *} u32_asnprintf (uint32_t *@var{resultbuf}, size_t *@var{lengthp}, const char *@var{format}, ...) +@end deftypefun +@deftypefun int u32_vsprintf (uint32_t *@var{buf}, const char *@var{format}, va_list ap) +@end deftypefun +@deftypefun int u32_vsnprintf (uint32_t *@var{buf}, size_t @var{size}, const char *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun int u32_vasprintf (uint32_t **@var{resultp}, const char *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun {uint32_t *} u32_vasnprintf (uint32_t *resultbuf, size_t *@var{lengthp}, const char *@var{format}, va_list @var{ap}) +@end deftypefun + +The following functions take an UTF-32 format string and return a result in +UTF-32 format. + +@deftypefun int u32_u32_sprintf (uint32_t *@var{buf}, const uint32_t *@var{format}, ...) +@end deftypefun +@deftypefun int u32_u32_snprintf (uint32_t *@var{buf}, size_t @var{size}, const uint32_t *@var{format}, ...) +@end deftypefun +@deftypefun int u32_u32_asprintf (uint32_t **@var{resultp}, const uint32_t *@var{format}, ...) +@end deftypefun +@deftypefun {uint32_t *} u32_u32_asnprintf (uint32_t *resultbuf, size_t *@var{lengthp}, const uint32_t *@var{format}, ...) +@end deftypefun +@deftypefun int u32_u32_vsprintf (uint32_t *@var{buf}, const uint32_t *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun int u32_u32_vsnprintf (uint32_t *@var{buf}, size_t @var{size}, const uint32_t *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun int u32_u32_vasprintf (uint32_t **@var{resultp}, const uint32_t *@var{format}, va_list @var{ap}) +@end deftypefun +@deftypefun {uint32_t *} u32_u32_vasnprintf (uint32_t *resultbuf, size_t *@var{lengthp}, const uint32_t *@var{format}, va_list @var{ap}) +@end deftypefun + +The following functions take an ASCII format string and produce output in +locale encoding to a @code{FILE} stream. + +@deftypefun int ulc_fprintf (FILE *@var{stream}, const char *@var{format}, ...) +@end deftypefun +@deftypefun int ulc_vfprintf (FILE *@var{stream}, const char *@var{format}, va_list @var{ap}) +@end deftypefun diff --git a/doc/unistr.texi b/doc/unistr.texi new file mode 100644 index 00000000..9c6261b2 --- /dev/null +++ b/doc/unistr.texi @@ -0,0 +1,493 @@ +@node unistr.h +@chapter Elementary Unicode string functions @code{} + +This include file declares elementary functions for Unicode strings. It is +essentially the equivalent of what @code{} is for C strings. + +@menu +* Elementary string checks:: +* Elementary string conversions:: +* Elementary string functions:: +* Elementary string functions with memory allocation:: +* Elementary string functions on NUL terminated strings:: +@end menu + +@node Elementary string checks +@section Elementary string checks + +@cindex validity +@cindex verification +The following function is available to verify the integrity of a Unicode string. + +@deftypefun {const uint8_t *} u8_check (const uint8_t *@var{s}, size_t @var{n}) +@deftypefunx {const uint16_t *} u16_check (const uint16_t *@var{s}, size_t @var{n}) +@deftypefunx {const uint32_t *} u32_check (const uint32_t *@var{s}, size_t @var{n}) +This function checks whether a Unicode string is well-formed. +It returns NULL if valid, or a pointer to the first invalid unit otherwise. +@end deftypefun + +@node Elementary string conversions +@section Elementary string conversions + +@cindex converting +The following functions perform conversions between the different forms of Unicode strings. + +@deftypefun {uint16_t *} u8_to_u16 (const uint8_t *@var{s}, size_t @var{n}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +Converts an UTF-8 string to an UTF-16 string. +@end deftypefun + +@deftypefun {uint32_t *} u8_to_u32 (const uint8_t *@var{s}, size_t @var{n}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Converts an UTF-8 string to an UTF-32 string. +@end deftypefun + +@deftypefun {uint8_t *} u16_to_u8 (const uint16_t *@var{s}, size_t @var{n}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +Converts an UTF-16 string to an UTF-8 string. +@end deftypefun + +@deftypefun {uint32_t *} u16_to_u32 (const uint16_t *@var{s}, size_t @var{n}, uint32_t *@var{resultbuf}, size_t *@var{lengthp}) +Converts an UTF-16 string to an UTF-32 string. +@end deftypefun + +@deftypefun {uint8_t *} u32_to_u8 (const uint32_t *@var{s}, size_t @var{n}, uint8_t *@var{resultbuf}, size_t *@var{lengthp}) +Converts an UTF-32 string to an UTF-8 string. +@end deftypefun + +@deftypefun {uint16_t *} u32_to_u16 (const uint32_t *@var{s}, size_t @var{n}, uint16_t *@var{resultbuf}, size_t *@var{lengthp}) +Converts an UTF-32 string to an UTF-16 string. +@end deftypefun + +@node Elementary string functions +@section Elementary string functions + +@cindex iterating +The following functions inspect and return details about the first character +in a Unicode string. + +@deftypefun int u8_mblen (const uint8_t *@var{s}, size_t @var{n}) +@deftypefunx int u16_mblen (const uint16_t *@var{s}, size_t @var{n}) +@deftypefunx int u32_mblen (const uint32_t *@var{s}, size_t @var{n}) +Returns the length (number of units) of the first character in @var{s}, which +is no longer than @var{n}. Returns 0 if it is the NUL character. Returns -1 +upon failure. + +This function is similar to @posixfunc{mblen}, except that it operates on a +Unicode string and that @var{s} must not be NULL. +@end deftypefun + +@deftypefun int u8_mbtouc_unsafe (ucs4_t *@var{puc}, const uint8_t *@var{s}, size_t @var{n}) +@deftypefunx int u16_mbtouc_unsafe (ucs4_t *@var{puc}, const uint16_t *@var{s}, size_t @var{n}) +@deftypefunx int u32_mbtouc_unsafe (ucs4_t *@var{puc}, const uint32_t *@var{s}, size_t @var{n}) +Returns the length (number of units) of the first character in @var{s}, +putting its @code{ucs4_t} representation in @code{*@var{puc}}. Upon failure, +@code{*@var{puc}} is set to @code{0xfffd}, and an appropriate number of units +is returned. + +The number of available units, @var{n}, must be > 0. + +This function is similar to @posixfunc{mbtowc}, except that it operates on a +Unicode string, @var{puc} and @var{s} must not be NULL, @var{n} must be > 0, +and the NUL character is not treated specially. +@end deftypefun + +@deftypefun int u8_mbtouc (ucs4_t *@var{puc}, const uint8_t *@var{s}, size_t @var{n}) +@deftypefunx int u16_mbtouc (ucs4_t *@var{puc}, const uint16_t *@var{s}, size_t @var{n}) +@deftypefunx int u32_mbtouc (ucs4_t *@var{puc}, const uint32_t *@var{s}, size_t @var{n}) +This function is like @code{u8_mbtouc_unsafe}, except that it will detect an +invalid UTF-8 character, even if the library is compiled without +@option{--enable-safety}. +@end deftypefun + +@deftypefun int u8_mbtoucr (ucs4_t *@var{puc}, const uint8_t *@var{s}, size_t @var{n}) +@deftypefunx int u16_mbtoucr (ucs4_t *@var{puc}, const uint16_t *@var{s}, size_t @var{n}) +@deftypefunx int u32_mbtoucr (ucs4_t *@var{puc}, const uint32_t *@var{s}, size_t @var{n}) +Returns the length (number of units) of the first character in @var{s}, +putting its @code{ucs4_t} representation in @code{*@var{puc}}. Upon failure, +@code{*@var{puc}} is set to @code{0xfffd}, and -1 is returned for an invalid +sequence of units, -2 is returned for an incomplete sequence of units. + +The number of available units, @var{n}, must be > 0. + +This function is similar to @code{u8_mbtouc}, except that the return value +gives more details about the failure, similar to @posixfunc{mbrtowc}. +@end deftypefun + +The following function stores a Unicode character as a Unicode string in +memory. + +@deftypefun int u8_uctomb (uint8_t *@var{s}, ucs4_t @var{uc}, int @var{n}) +@deftypefunx int u16_uctomb (uint16_t *@var{s}, ucs4_t @var{uc}, int @var{n}) +@deftypefunx int u32_uctomb (uint32_t *@var{s}, ucs4_t @var{uc}, int @var{n}) +Puts the multibyte character represented by @var{uc} in @var{s}, returning its +length. Returns -1 upon failure, -2 if the number of available units, @var{n}, +is too small. The latter case cannot occur if @var{n} >= 6/2/1, respectively. + +This function is similar to @posixfunc{wctomb}, except that it operates on a +Unicode strings, @var{s} must not be NULL, and the argument @var{n} must be +specified. +@end deftypefun + +@cindex copying +The following functions copy Unicode strings in memory. + +@deftypefun {uint8_t *} u8_cpy (uint8_t *@var{dest}, const uint8_t *@var{src}, size_t @var{n}) +@deftypefunx {uint16_t *} u16_cpy (uint16_t *@var{dest}, const uint16_t *@var{src}, size_t @var{n}) +@deftypefunx {uint32_t *} u32_cpy (uint32_t *@var{dest}, const uint32_t *@var{src}, size_t @var{n}) +Copies @var{n} units from @var{src} to @var{dest}. + +This function is similar to @posixfunc{memcpy}, except that it operates on +Unicode strings. +@end deftypefun + +@deftypefun {uint8_t *} u8_move (uint8_t *@var{dest}, const uint8_t *@var{src}, size_t @var{n}) +@deftypefunx {uint16_t *} u16_move (uint16_t *@var{dest}, const uint16_t *@var{src}, size_t @var{n}) +@deftypefunx {uint32_t *} u32_move (uint32_t *@var{dest}, const uint32_t *@var{src}, size_t @var{n}) +Copies @var{n} units from @var{src} to @var{dest}, guaranteeing correct +behavior for overlapping memory areas. + +This function is similar to @posixfunc{memmove}, except that it operates on +Unicode strings. +@end deftypefun + +The following function fills a Unicode string. + +@deftypefun {uint8_t *} u8_set (uint8_t *@var{s}, ucs4_t @var{uc}, size_t @var{n}) +@deftypefunx {uint16_t *} u16_set (uint16_t *@var{s}, ucs4_t @var{uc}, size_t @var{n}) +@deftypefunx {uint32_t *} u32_set (uint32_t *@var{s}, ucs4_t @var{uc}, size_t @var{n}) +Sets the first @var{n} characters of @var{s} to @var{uc}. @var{uc} should be +a character that occupies only 1 unit. + +This function is similar to @posixfunc{memset}, except that it operates on +Unicode strings. +@end deftypefun + +@cindex comparing +The following function compares two Unicode strings of the same length. + +@deftypefun int u8_cmp (const uint8_t *@var{s1}, const uint8_t *@var{s2}, size_t @var{n}) +@deftypefunx int u16_cmp (const uint16_t *@var{s1}, const uint16_t *@var{s2}, size_t @var{n}) +@deftypefunx int u32_cmp (const uint32_t *@var{s1}, const uint32_t *@var{s2}, size_t @var{n}) +Compares @var{s1} and @var{s2}, each of length @var{n}, lexicographically. +Returns a negative value if @var{s1} compares smaller than @var{s2}, +a positive value if @var{s1} compares larger than @var{s2}, or 0 if +they compare equal. + +This function is similar to @posixfunc{memcmp}, except that it operates on +Unicode strings. +@end deftypefun + +The following function compares two Unicode strings of possibly different +lengths. + +@deftypefun int u8_cmp2 (const uint8_t *@var{s1}, size_t @var{n1}, const uint8_t *@var{s2}, size_t @var{n2}) +@deftypefunx int u16_cmp2 (const uint16_t *@var{s1}, size_t @var{n1}, const uint16_t *@var{s2}, size_t @var{n2}) +@deftypefunx int u32_cmp2 (const uint32_t *@var{s1}, size_t @var{n1}, const uint32_t *@var{s2}, size_t @var{n2}) +Compares @var{s1} and @var{s2}, lexicographically. +Returns a negative value if @var{s1} compares smaller than @var{s2}, +a positive value if @var{s1} compares larger than @var{s2}, or 0 if +they compare equal. + +This function is similar to the gnulib function @func{memcmp2}, except that it +operates on Unicode strings. +@end deftypefun + +@cindex searching, for a character +The following function searches for a given Unicode character. + +@deftypefun {uint8_t *} u8_chr (const uint8_t *@var{s}, size_t @var{n}, ucs4_t @var{uc}) +@deftypefunx {uint16_t *} u16_chr (const uint16_t *@var{s}, size_t @var{n}, ucs4_t @var{uc}) +@deftypefunx {uint32_t *} u32_chr (const uint32_t *@var{s}, size_t @var{n}, ucs4_t @var{uc}) +Searches the string at @var{s} for @var{uc}. Returns a pointer to the first +occurrence of @var{uc} in @var{s}, or NULL if @var{uc} does not occur in +@var{s}. + +This function is similar to @posixfunc{memchr}, except that it operates on +Unicode strings. +@end deftypefun + +@cindex counting +The following function counts the number of Unicode characters. + +@deftypefun size_t u8_mbsnlen (const uint8_t *@var{s}, size_t @var{n}) +@deftypefunx size_t u16_mbsnlen (const uint16_t *@var{s}, size_t @var{n}) +@deftypefunx size_t u32_mbsnlen (const uint32_t *@var{s}, size_t @var{n}) +Counts and returns the number of Unicode characters in the @var{n} units +from @var{s}. + +This function is similar to the gnulib function @func{mbsnlen}, except that +it operates on Unicode strings. +@end deftypefun + +@node Elementary string functions with memory allocation +@section Elementary string functions with memory allocation + +@cindex duplicating +The following function copies a Unicode string. + +@deftypefun {uint8_t *} u8_cpy_alloc (const uint8_t *@var{s}, size_t @var{n}) +@deftypefunx {uint16_t *} u16_cpy_alloc (const uint16_t *@var{s}, size_t @var{n}) +@deftypefunx {uint32_t *} u32_cpy_alloc (const uint32_t *@var{s}, size_t @var{n}) +Makes a freshly allocated copy of @var{s}, of length @var{n}. +@end deftypefun + +@node Elementary string functions on NUL terminated strings +@section Elementary string functions on NUL terminated strings + +The following functions inspect and return details about the first character +in a Unicode string. + +@deftypefun int u8_strmblen (const uint8_t *@var{s}) +@deftypefunx int u16_strmblen (const uint16_t *@var{s}) +@deftypefunx int u32_strmblen (const uint32_t *@var{s}) +Returns the length (number of units) of the first character in @var{s}. +Returns 0 if it is the NUL character. Returns -1 upon failure. +@end deftypefun + +@cindex iterating +@deftypefun int u8_strmbtouc (ucs4_t *@var{puc}, const uint8_t *@var{s}) +@deftypefunx int u16_strmbtouc (ucs4_t *@var{puc}, const uint16_t *@var{s}) +@deftypefunx int u32_strmbtouc (ucs4_t *@var{puc}, const uint32_t *@var{s}) +Returns the length (number of units) of the first character in @var{s}, +putting its @code{ucs4_t} representation in @code{*@var{puc}}. Returns 0 +if it is the NUL character. Returns -1 upon failure. +@end deftypefun + +@deftypefun {const uint8_t *} u8_next (ucs4_t *@var{puc}, const uint8_t *@var{s}) +@deftypefunx {const uint16_t *} u16_next (ucs4_t *@var{puc}, const uint16_t *@var{s}) +@deftypefunx {const uint32_t *} u32_next (ucs4_t *@var{puc}, const uint32_t *@var{s}) +Forward iteration step. Advances the pointer past the next character, +or returns NULL if the end of the string has been reached. Puts the +character's @code{ucs4_t} representation in @code{*@var{puc}}. +@end deftypefun + +The following function inspects and returns details about the previous +character in a Unicode string. + +@deftypefun {const uint8_t *} u8_prev (ucs4_t *@var{puc}, const uint8_t *@var{s}, const uint8_t *@var{start}) +@deftypefunx {const uint16_t *} u16_prev (ucs4_t *@var{puc}, const uint16_t *@var{s}, const uint16_t *@var{start}) +@deftypefunx {const uint32_t *} u32_prev (ucs4_t *@var{puc}, const uint32_t *@var{s}, const uint32_t *@var{start}) +Backward iteration step. Advances the pointer to point to the previous +character, or returns NULL if the beginning of the string had been reached. +Puts the character's @code{ucs4_t} representation in @code{*@var{puc}}. +@end deftypefun + +The following functions determine the length of a Unicode string. + +@deftypefun size_t u8_strlen (const uint8_t *@var{s}) +@deftypefunx size_t u16_strlen (const uint16_t *@var{s}) +@deftypefunx size_t u32_strlen (const uint32_t *@var{s}) +Returns the number of units in @var{s}. + +This function is similar to @posixfunc{strlen} and @posixfunc{wcslen}, except +that it operates on Unicode strings. +@end deftypefun + +@deftypefun size_t u8_strnlen (const uint8_t *@var{s}, size_t @var{maxlen}) +@deftypefunx size_t u16_strnlen (const uint16_t *@var{s}, size_t @var{maxlen}) +@deftypefunx size_t u32_strnlen (const uint32_t *@var{s}, size_t @var{maxlen}) +Returns the number of units in @var{s}, but at most @var{maxlen}. + +This function is similar to @posixfunc{strnlen} and @posixfunc{wcsnlen}, except +that it operates on Unicode strings. +@end deftypefun + +@cindex copying +The following functions copy portions of Unicode strings in memory. + +@deftypefun {uint8_t *} u8_strcpy (uint8_t *@var{dest}, const uint8_t *@var{src}) +@deftypefunx {uint16_t *} u16_strcpy (uint16_t *@var{dest}, const uint16_t *@var{src}) +@deftypefunx {uint32_t *} u32_strcpy (uint32_t *@var{dest}, const uint32_t *@var{src}) +Copies @var{src} to @var{dest}. + +This function is similar to @posixfunc{strcpy} and @posixfunc{wcscpy}, except +that it operates on Unicode strings. +@end deftypefun + +@deftypefun {uint8_t *} u8_stpcpy (uint8_t *@var{dest}, const uint8_t *@var{src}) +@deftypefunx {uint16_t *} u16_stpcpy (uint16_t *@var{dest}, const uint16_t *@var{src}) +@deftypefunx {uint32_t *} u32_stpcpy (uint32_t *@var{dest}, const uint32_t *@var{src}) +Copies @var{src} to @var{dest}, returning the address of the terminating NUL +in @var{dest}. + +This function is similar to @posixfunc{stpcpy}, except that it operates on +Unicode strings. +@end deftypefun + +@deftypefun {uint8_t *} u8_strncpy (uint8_t *@var{dest}, const uint8_t *@var{src}, size_t @var{n}) +@deftypefunx {uint16_t *} u16_strncpy (uint16_t *@var{dest}, const uint16_t *@var{src}, size_t @var{n}) +@deftypefunx {uint32_t *} u32_strncpy (uint32_t *@var{dest}, const uint32_t *@var{src}, size_t @var{n}) +Copies no more than @var{n} units of @var{src} to @var{dest}. + +This function is similar to @posixfunc{strncpy} and @posixfunc{wcsncpy}, except +that it operates on Unicode strings. +@end deftypefun + +@deftypefun {uint8_t *} u8_stpncpy (uint8_t *@var{dest}, const uint8_t *@var{src}, size_t @var{n}) +@deftypefunx {uint16_t *} u16_stpncpy (uint16_t *@var{dest}, const uint16_t *@var{src}, size_t @var{n}) +@deftypefunx {uint32_t *} u32_stpncpy (uint32_t *@var{dest}, const uint32_t *@var{src}, size_t @var{n}) +Copies no more than @var{n} units of @var{src} to @var{dest}, returning the +address of the last unit written into @var{dest}. + +This function is similar to @posixfunc{stpncpy}, except that it operates on +Unicode strings. +@end deftypefun + +@deftypefun {uint8_t *} u8_strcat (uint8_t *@var{dest}, const uint8_t *@var{src}) +@deftypefunx {uint16_t *} u16_strcat (uint16_t *@var{dest}, const uint16_t *@var{src}) +@deftypefunx {uint32_t *} u32_strcat (uint32_t *@var{dest}, const uint32_t *@var{src}) +Appends @var{src} onto @var{dest}. + +This function is similar to @posixfunc{strcat} and @posixfunc{wcscat}, except +that it operates on Unicode strings. +@end deftypefun + +@deftypefun {uint8_t *} u8_strncat (uint8_t *@var{dest}, const uint8_t *@var{src}, size_t @var{n}) +@deftypefunx {uint16_t *} u16_strncat (uint16_t *@var{dest}, const uint16_t *@var{src}, size_t @var{n}) +@deftypefunx {uint32_t *} u32_strncat (uint32_t *@var{dest}, const uint32_t *@var{src}, size_t @var{n}) +Appends no more than @var{n} units of @var{src} onto @var{dest}. + +This function is similar to @posixfunc{strncat} and @posixfunc{wcsncat}, except +that it operates on Unicode strings. +@end deftypefun + +@cindex comparing +The following functions compare two Unicode strings. + +@deftypefun int u8_strcmp (const uint8_t *@var{s1}, const uint8_t *@var{s2}) +@deftypefunx int u16_strcmp (const uint16_t *@var{s1}, const uint16_t *@var{s2}) +@deftypefunx int u32_strcmp (const uint32_t *@var{s1}, const uint32_t *@var{s2}) +Compares @var{s1} and @var{s2}, lexicographically. +Returns a negative value if @var{s1} compares smaller than @var{s2}, +a positive value if @var{s1} compares larger than @var{s2}, or 0 if +they compare equal. + +This function is similar to @posixfunc{strcmp} and @posixfunc{wcscmp}, except +that it operates on Unicode strings. +@end deftypefun + +@cindex comparing, with collation rules +@deftypefun int u8_strcoll (const uint8_t *@var{s1}, const uint8_t *@var{s2}) +@deftypefunx int u16_strcoll (const uint16_t *@var{s1}, const uint16_t *@var{s2}) +@deftypefunx int u32_strcoll (const uint32_t *@var{s1}, const uint32_t *@var{s2}) +Compares @var{s1} and @var{s2} using the collation rules of the current +locale. +Returns -1 if @var{s1} < @var{s2}, 0 if @var{s1} = @var{s2}, 1 if +@var{s1} > @var{s2}. Upon failure, sets @code{errno} and returns any value. + +This function is similar to @posixfunc{strcoll} and @posixfunc{wcscoll}, except +that it operates on Unicode strings. + +Note that this function may consider different canonical normalizations +of the same string as having a large distance. It is therefore better to +use the function @code{u8_normcoll} instead of this one; see @ref{uninorm.h}. +@end deftypefun + +@deftypefun int u8_strncmp (const uint8_t *@var{s1}, const uint8_t *@var{s2}, size_t @var{n}) +@deftypefunx int u16_strncmp (const uint16_t *@var{s1}, const uint16_t *@var{s2}, size_t @var{n}) +@deftypefunx int u32_strncmp (const uint32_t *@var{s1}, const uint32_t *@var{s2}, size_t @var{n}) +Compares no more than @var{n} units of @var{s1} and @var{s2}. + +This function is similar to @posixfunc{strncmp} and @posixfunc{wcsncmp}, except +that it operates on Unicode strings. +@end deftypefun + +@cindex duplicating +The following function allocates a duplicate of a Unicode string. + +@deftypefun {uint8_t *} u8_strdup (const uint8_t *@var{s}) +@deftypefunx {uint16_t *} u16_strdup (const uint16_t *@var{s}) +@deftypefunx {uint32_t *} u32_strdup (const uint32_t *@var{s}) +Duplicates @var{s}, returning an identical malloc'd string. + +This function is similar to @posixfunc{strdup} and @posixfunc{wcsdup}, except +that it operates on Unicode strings. +@end deftypefun + +@cindex searching, for a character +The following functions search for a given Unicode character. + +@deftypefun {uint8_t *} u8_strchr (const uint8_t *@var{str}, ucs4_t @var{uc}) +@deftypefunx {uint16_t *} u16_strchr (const uint16_t *@var{str}, ucs4_t @var{uc}) +@deftypefunx {uint32_t *} u32_strchr (const uint32_t *@var{str}, ucs4_t @var{uc}) +Finds the first occurrence of @var{uc} in @var{str}. + +This function is similar to @posixfunc{strchr} and @posixfunc{wcschr}, except +that it operates on Unicode strings. +@end deftypefun + +@deftypefun {uint8_t *} u8_strrchr (const uint8_t *@var{str}, ucs4_t @var{uc}) +@deftypefunx {uint16_t *} u16_strrchr (const uint16_t *@var{str}, ucs4_t @var{uc}) +@deftypefunx {uint32_t *} u32_strrchr (const uint32_t *@var{str}, ucs4_t @var{uc}) +Finds the last occurrence of @var{uc} in @var{str}. + +This function is similar to @posixfunc{strrchr} and @posixfunc{wcsrchr}, except +that it operates on Unicode strings. +@end deftypefun + +The following functions search for the first occurrence of some Unicode +character in or outside a given set of Unicode characters. + +@deftypefun size_t u8_strcspn (const uint8_t *@var{str}, const uint8_t *@var{reject}) +@deftypefunx size_t u16_strcspn (const uint16_t *@var{str}, const uint16_t *@var{reject}) +@deftypefunx size_t u32_strcspn (const uint32_t *@var{str}, const uint32_t *@var{reject}) +Returns the length of the initial segment of @var{str} which consists entirely +of Unicode characters not in @var{reject}. + +This function is similar to @posixfunc{strcspn} and @posixfunc{wcscspn}, except +that it operates on Unicode strings. +@end deftypefun + +@deftypefun size_t u8_strspn (const uint8_t *@var{str}, const uint8_t *@var{accept}) +@deftypefunx size_t u16_strspn (const uint16_t *@var{str}, const uint16_t *@var{accept}) +@deftypefunx size_t u32_strspn (const uint32_t *@var{str}, const uint32_t *@var{accept}) +Returns the length of the initial segment of @var{str} which consists entirely +of Unicode characters in @var{accept}. + +This function is similar to @posixfunc{strspn} and @posixfunc{wcsspn}, except +that it operates on Unicode strings. +@end deftypefun + +@deftypefun {uint8_t *} u8_strpbrk (const uint8_t *@var{str}, const uint8_t *@var{accept}) +@deftypefunx {uint16_t *} u16_strpbrk (const uint16_t *@var{str}, const uint16_t *@var{accept}) +@deftypefunx {uint32_t *} u32_strpbrk (const uint32_t *@var{str}, const uint32_t *@var{accept}) +Finds the first occurrence in @var{str} of any character in @var{accept}. + +This function is similar to @posixfunc{strpbrk} and @posixfunc{wcspbrk}, except +that it operates on Unicode strings. +@end deftypefun + +@cindex searching, for a substring +The following functions search whether a given Unicode string is a substring +of another Unicode string. + +@deftypefun {uint8_t *} u8_strstr (const uint8_t *@var{haystack}, const uint8_t *@var{needle}) +@deftypefunx {uint16_t *} u16_strstr (const uint16_t *@var{haystack}, const uint16_t *@var{needle}) +@deftypefunx {uint32_t *} u32_strstr (const uint32_t *@var{haystack}, const uint32_t *@var{needle}) +Finds the first occurrence of @var{needle} in @var{haystack}. + +This function is similar to @posixfunc{strstr} and @posixfunc{wcsstr}, except +that it operates on Unicode strings. +@end deftypefun + +@deftypefun bool u8_startswith (const uint8_t *@var{str}, const uint8_t *@var{prefix}) +@deftypefunx bool u16_startswith (const uint16_t *@var{str}, const uint16_t *@var{prefix}) +@deftypefunx bool u32_startswith (const uint32_t *@var{str}, const uint32_t *@var{prefix}) +Tests whether @var{str} starts with @var{prefix}. +@end deftypefun + +@deftypefun bool u8_endswith (const uint8_t *@var{str}, const uint8_t *@var{suffix}) +@deftypefunx bool u16_endswith (const uint16_t *@var{str}, const uint16_t *@var{suffix}) +@deftypefunx bool u32_endswith (const uint32_t *@var{str}, const uint32_t *@var{suffix}) +Tests whether @var{str} ends with @var{suffix}. +@end deftypefun + +The following function does one step in tokenizing a Unicode string. + +@deftypefun {uint8_t *} u8_strtok (uint8_t *@var{str}, const uint8_t *@var{delim}, uint8_t **@var{ptr}) +@deftypefunx {uint16_t *} u16_strtok (uint16_t *@var{str}, const uint16_t *@var{delim}, uint16_t **@var{ptr}) +@deftypefunx {uint32_t *} u32_strtok (uint32_t *@var{str}, const uint32_t *@var{delim}, uint32_t **@var{ptr}) +Divides @var{str} into tokens separated by characters in @var{delim}. + +This function is similar to @posixfunc{strtok_r} and @posixfunc{wcstok}, except +that it operates on Unicode strings. Its interface is actually more similar to +@code{wcstok} than to @code{strtok}. +@end deftypefun diff --git a/doc/unitypes.texi b/doc/unitypes.texi new file mode 100644 index 00000000..696ba881 --- /dev/null +++ b/doc/unitypes.texi @@ -0,0 +1,15 @@ +@node unitypes.h +@chapter Elementary types @code{} + +The include file @code{} provides the following basic types. + +@deftp Type uint8_t +@deftpx Type uint16_t +@deftpx Type uint32_t +These are the storage units of UTF-8/16/32 strings, respectively. The definitions are +taken from @code{}, on platforms where this include file is present. +@end deftp + +@deftp Type ucs4_t +This type represents a single Unicode character, outside of an UTF-32 string. +@end deftp diff --git a/doc/uniwbrk.texi b/doc/uniwbrk.texi new file mode 100644 index 00000000..6f06b926 --- /dev/null +++ b/doc/uniwbrk.texi @@ -0,0 +1,71 @@ +@node uniwbrk.h +@chapter Word breaks in strings @code{} + +@cindex word breaks +@cindex breaks, word +This include file declares functions for determining where in a string +``words'' start and end. Here ``words'' are not necessarily the same as +entities that can be looked up in dictionaries, but rather groups of +consecutive characters that should not be split by text processing +operations. + +@menu +* Word breaks in a string:: +* Word break property:: +@end menu + +@node Word breaks in a string +@section Word breaks in a string + +The following functions determine the word breaks in a string. + +@deftypefun void u8_wordbreaks (const uint8_t *@var{s}, size_t @var{n}, char *@var{p}) +@deftypefunx void u16_wordbreaks (const uint16_t *@var{s}, size_t @var{n}, char *@var{p}) +@deftypefunx void u32_wordbreaks (const uint32_t *@var{s}, size_t @var{n}, char *@var{p}) +@deftypefunx void ulc_wordbreaks (const char *@var{s}, size_t @var{n}, char *@var{p}) +Determines the word break points in @var{s}, an array of @var{n} units, and +stores the result at @code{@var{p}[0..@var{n}-1]}. +@table @asis +@item @code{@var{p}[i] = 1} +means that there is a word boundary between @code{@var{s}[i-1]} and +@code{@var{s}[i]}. +@item @code{@var{p}[i] = 0} +means that @code{@var{s}[i-1]} and @code{@var{s}[i]} must not be separated. +@end table +@code{@var{p}[0]} is always set to 0. If an application wants to consider a +word break to be present at the beginning of the string (before +@code{@var{s}[0]}) or at the end of the string (after +@code{@var{s}[0..@var{n}-1]}), it has to treat these cases explicitly. +@end deftypefun + +@node Word break property +@section Word break property + +This is a more low-level API. The word break property is a property defined +in Unicode Standard Annex #29, section ``Word Boundaries'', see +@url{http://www.unicode.org/reports/tr29/#Word_Boundaries}.@texnl{} It is +used for determining the word breaks in a string. + +The following are the possible values of the word break property. More values +may be added in the future. + +@deftypevr Constant int WBP_OTHER +@deftypevrx Constant int WBP_CR +@deftypevrx Constant int WBP_LF +@deftypevrx Constant int WBP_NEWLINE +@deftypevrx Constant int WBP_EXTEND +@deftypevrx Constant int WBP_FORMAT +@deftypevrx Constant int WBP_KATAKANA +@deftypevrx Constant int WBP_ALETTER +@deftypevrx Constant int WBP_MIDNUMLET +@deftypevrx Constant int WBP_MIDLETTER +@deftypevrx Constant int WBP_MIDNUM +@deftypevrx Constant int WBP_NUMERIC +@deftypevrx Constant int WBP_EXTENDNUMLET +@end deftypevr + +The following function looks up the word break property of a character. + +@deftypefun int uc_wordbreak_property (ucs4_t @var{uc}) +Returns the Word_Break property of a Unicode character. +@end deftypefun diff --git a/doc/uniwidth.texi b/doc/uniwidth.texi new file mode 100644 index 00000000..a05d101d --- /dev/null +++ b/doc/uniwidth.texi @@ -0,0 +1,43 @@ +@node uniwidth.h +@chapter Display width @code{} + +@cindex width +This include file declares functions that return the display width, measured +in columns, of characters or strings, when output to a device that uses +non-proportional fonts. + +@cindex ambiguous width +Note that for some rarely used characters the actual fonts or terminal +emulators can use a different width. There is no mechanism for communicating +the display width of characters across a Unix pseudo-terminal (tty). Also, +there are scripts with complex rendering, like the Indic scripts. For these +scripts, there is no such concept as non-proportional fonts. Therefore +the results of these functions usually work fine on most scripts and on +most characters but can fail to represent the actual display width. + +These functions are locale dependent. The @var{encoding} argument identifies +the encoding (e.g@. @code{"ISO-8859-2"} for Polish). + +@cindex Unicode character, width +@cindex halfwidth +@cindex fullwidth +@deftypefun int uc_width (ucs4_t @var{uc}, const char *@var{encoding}) +Determines and returns the number of column positions required for @var{uc}. +Returns -1 if @var{uc} is a control character that has an influence on the +column position when output. +@end deftypefun + +@deftypefun int u8_width (const uint8_t *@var{s}, size_t @var{n}, const char *@var{encoding}) +@deftypefunx int u16_width (const uint16_t *@var{s}, size_t @var{n}, const char *@var{encoding}) +@deftypefunx int u32_width (const uint32_t *@var{s}, size_t @var{n}, const char *@var{encoding}) +Determines and returns the number of column positions required for first +@var{n} units (or fewer if @var{s} ends before this) in @var{s}. This +function ignores control characters in the string. +@end deftypefun + +@deftypefun int u8_strwidth (const uint8_t *@var{s}, const char *@var{encoding}) +@deftypefunx int u16_strwidth (const uint16_t *@var{s}, const char *@var{encoding}) +@deftypefunx int u32_strwidth (const uint32_t *@var{s}, const char *@var{encoding}) +Determines and returns the number of column positions required for @var{s}. +This function ignores control characters in the string. +@end deftypefun diff --git a/doc/version.texi b/doc/version.texi new file mode 100644 index 00000000..ee4ba906 --- /dev/null +++ b/doc/version.texi @@ -0,0 +1,4 @@ +@set UPDATED 29 June 2009 +@set UPDATED-MONTH June 2009 +@set EDITION 0.9.1 +@set VERSION 0.9.1 diff --git a/gnulib-local/Makefile.am b/gnulib-local/Makefile.am new file mode 100644 index 00000000..c415913e --- /dev/null +++ b/gnulib-local/Makefile.am @@ -0,0 +1,30 @@ +## Makefile for the gnulib-local directory of GNU libunistring +## Copyright (C) 2006-2009 Free Software Foundation, Inc. +## +## This program is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . + +## Process this file with automake to produce Makefile.in. + +# Generate this list with +# find . '(' -name Makefile.am ')' -prune -o -type f '!' '(' -name '*.orig' -or -name '*~' ')' -printf '%P\n' | sort | tr '\012' @ | sed 's/@$/%/;s/@/ \\@/g' | tr @% '\012\012' +EXTRA_DIST = \ +lib/unicase.h.diff \ +lib/uniconv.h.diff \ +lib/unictype.h.diff \ +lib/unilbrk.h.diff \ +lib/uninorm.h.diff \ +lib/unistr.h.diff \ +lib/unitypes.h.diff \ +lib/uniwidth.h.diff \ +modules/unictype/category-none-tests.diff diff --git a/gnulib-local/Makefile.in b/gnulib-local/Makefile.in new file mode 100644 index 00000000..9c67bff5 --- /dev/null +++ b/gnulib-local/Makefile.in @@ -0,0 +1,783 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = gnulib-local +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ + $(top_srcdir)/gnulib-m4/alloca.m4 \ + $(top_srcdir)/gnulib-m4/codeset.m4 \ + $(top_srcdir)/gnulib-m4/eealloc.m4 \ + $(top_srcdir)/gnulib-m4/environ.m4 \ + $(top_srcdir)/gnulib-m4/errno_h.m4 \ + $(top_srcdir)/gnulib-m4/error.m4 \ + $(top_srcdir)/gnulib-m4/exitfail.m4 \ + $(top_srcdir)/gnulib-m4/exponentd.m4 \ + $(top_srcdir)/gnulib-m4/exponentf.m4 \ + $(top_srcdir)/gnulib-m4/exponentl.m4 \ + $(top_srcdir)/gnulib-m4/extensions.m4 \ + $(top_srcdir)/gnulib-m4/float_h.m4 \ + $(top_srcdir)/gnulib-m4/fpieee.m4 \ + $(top_srcdir)/gnulib-m4/frexp.m4 \ + $(top_srcdir)/gnulib-m4/frexpl.m4 \ + $(top_srcdir)/gnulib-m4/getpagesize.m4 \ + $(top_srcdir)/gnulib-m4/glibc21.m4 \ + $(top_srcdir)/gnulib-m4/gnulib-common.m4 \ + $(top_srcdir)/gnulib-m4/gnulib-comp.m4 \ + $(top_srcdir)/gnulib-m4/iconv.m4 \ + $(top_srcdir)/gnulib-m4/iconv_h.m4 \ + $(top_srcdir)/gnulib-m4/iconv_open.m4 \ + $(top_srcdir)/gnulib-m4/include_next.m4 \ + $(top_srcdir)/gnulib-m4/inline.m4 \ + $(top_srcdir)/gnulib-m4/intlmacosx.m4 \ + $(top_srcdir)/gnulib-m4/intmax_t.m4 \ + $(top_srcdir)/gnulib-m4/inttypes_h.m4 \ + $(top_srcdir)/gnulib-m4/isnand.m4 \ + $(top_srcdir)/gnulib-m4/isnanf.m4 \ + $(top_srcdir)/gnulib-m4/isnanl.m4 \ + $(top_srcdir)/gnulib-m4/lcmessage.m4 \ + $(top_srcdir)/gnulib-m4/ldexpl.m4 \ + $(top_srcdir)/gnulib-m4/lib-ld.m4 \ + $(top_srcdir)/gnulib-m4/lib-link.m4 \ + $(top_srcdir)/gnulib-m4/lib-prefix.m4 \ + $(top_srcdir)/gnulib-m4/localcharset.m4 \ + $(top_srcdir)/gnulib-m4/locale-fr.m4 \ + $(top_srcdir)/gnulib-m4/locale-ja.m4 \ + $(top_srcdir)/gnulib-m4/locale-tr.m4 \ + $(top_srcdir)/gnulib-m4/locale-zh.m4 \ + $(top_srcdir)/gnulib-m4/locale_h.m4 \ + $(top_srcdir)/gnulib-m4/localename.m4 \ + $(top_srcdir)/gnulib-m4/longlong.m4 \ + $(top_srcdir)/gnulib-m4/malloc.m4 \ + $(top_srcdir)/gnulib-m4/malloca.m4 \ + $(top_srcdir)/gnulib-m4/math_h.m4 \ + $(top_srcdir)/gnulib-m4/mbchar.m4 \ + $(top_srcdir)/gnulib-m4/mbiter.m4 \ + $(top_srcdir)/gnulib-m4/mbrtowc.m4 \ + $(top_srcdir)/gnulib-m4/mbsinit.m4 \ + $(top_srcdir)/gnulib-m4/mbstate_t.m4 \ + $(top_srcdir)/gnulib-m4/memchr.m4 \ + $(top_srcdir)/gnulib-m4/minmax.m4 \ + $(top_srcdir)/gnulib-m4/mmap-anon.m4 \ + $(top_srcdir)/gnulib-m4/multiarch.m4 \ + $(top_srcdir)/gnulib-m4/nocrash.m4 \ + $(top_srcdir)/gnulib-m4/printf-frexp.m4 \ + $(top_srcdir)/gnulib-m4/printf-frexpl.m4 \ + $(top_srcdir)/gnulib-m4/printf.m4 \ + $(top_srcdir)/gnulib-m4/relocatable-lib.m4 \ + $(top_srcdir)/gnulib-m4/setenv.m4 \ + $(top_srcdir)/gnulib-m4/signbit.m4 \ + $(top_srcdir)/gnulib-m4/size_max.m4 \ + $(top_srcdir)/gnulib-m4/stdbool.m4 \ + $(top_srcdir)/gnulib-m4/stdint.m4 \ + $(top_srcdir)/gnulib-m4/stdint_h.m4 \ + $(top_srcdir)/gnulib-m4/stdlib_h.m4 \ + $(top_srcdir)/gnulib-m4/strerror.m4 \ + $(top_srcdir)/gnulib-m4/string_h.m4 \ + $(top_srcdir)/gnulib-m4/unistd_h.m4 \ + $(top_srcdir)/gnulib-m4/vasnprintf.m4 \ + $(top_srcdir)/gnulib-m4/wchar.m4 \ + $(top_srcdir)/gnulib-m4/wchar_t.m4 \ + $(top_srcdir)/gnulib-m4/wctob.m4 \ + $(top_srcdir)/gnulib-m4/wctype.m4 \ + $(top_srcdir)/gnulib-m4/wcwidth.m4 \ + $(top_srcdir)/gnulib-m4/wint_t.m4 \ + $(top_srcdir)/gnulib-m4/xalloc.m4 \ + $(top_srcdir)/gnulib-m4/xsize.m4 $(top_srcdir)/m4/exported.m4 \ + $(top_srcdir)/m4/init-package-version.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/woe32-dll.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DLL_VARIABLE = @DLL_VARIABLE@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DVIPS = @DVIPS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +GLIBC21 = @GLIBC21@ +GLOBAL_SYMBOL_PIPE = @GLOBAL_SYMBOL_PIPE@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MATHL = @GNULIB_MATHL@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@ +HAVE_GLOBAL_SYMBOL_PIPE = @HAVE_GLOBAL_SYMBOL_PIPE@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HEXVERSION = @HEXVERSION@ +ICONV_H = @ICONV_H@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_H = @LOCALE_H@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NAMESPACING = @NAMESPACING@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +RC = @RC@ +RELOCATABLE = @RELOCATABLE@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +TEXI2DVI = @TEXI2DVI@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +VERSION = @VERSION@ +VOID_UNSETENV = @VOID_UNSETENV@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Generate this list with +# find . '(' -name Makefile.am ')' -prune -o -type f '!' '(' -name '*.orig' -or -name '*~' ')' -printf '%P\n' | sort | tr '\012' @ | sed 's/@$/%/;s/@/ \\@/g' | tr @% '\012\012' +EXTRA_DIST = \ +lib/unicase.h.diff \ +lib/uniconv.h.diff \ +lib/unictype.h.diff \ +lib/unilbrk.h.diff \ +lib/uninorm.h.diff \ +lib/unistr.h.diff \ +lib/unitypes.h.diff \ +lib/uniwidth.h.diff \ +modules/unictype/category-none-tests.diff + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu gnulib-local/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu gnulib-local/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gnulib-local/lib/unicase.h.diff b/gnulib-local/lib/unicase.h.diff new file mode 100644 index 00000000..13817709 --- /dev/null +++ b/gnulib-local/lib/unicase.h.diff @@ -0,0 +1,19 @@ +*** unicase.h.orig 2009-04-05 19:30:26.000000000 +0200 +--- unicase.h 2009-04-10 16:21:23.000000000 +0200 +*************** +*** 20,26 **** + #include "unitypes.h" + + /* Get bool. */ +! #include + + /* Get size_t. */ + #include +--- 20,26 ---- + #include "unitypes.h" + + /* Get bool. */ +! #include + + /* Get size_t. */ + #include diff --git a/gnulib-local/lib/uniconv.h.diff b/gnulib-local/lib/uniconv.h.diff new file mode 100644 index 00000000..d6403230 --- /dev/null +++ b/gnulib-local/lib/uniconv.h.diff @@ -0,0 +1,28 @@ +*** uniconv.h.orig 2009-04-10 23:40:31.000000000 +0200 +--- uniconv.h 2009-04-10 23:41:19.000000000 +0200 +*************** +*** 23,35 **** + #include "unitypes.h" + + /* Get enum iconv_ilseq_handler. */ +! #include "iconveh.h" +! +! /* Get uniconv_register_autodetect() declaration. */ +! #include "striconveha.h" + + /* Get locale_charset() declaration. */ +! #include "localcharset.h" + + + #ifdef __cplusplus +--- 23,32 ---- + #include "unitypes.h" + + /* Get enum iconv_ilseq_handler. */ +! #include + + /* Get locale_charset() declaration. */ +! #include + + + #ifdef __cplusplus diff --git a/gnulib-local/lib/unictype.h.diff b/gnulib-local/lib/unictype.h.diff new file mode 100644 index 00000000..14347bc1 --- /dev/null +++ b/gnulib-local/lib/unictype.h.diff @@ -0,0 +1,24 @@ +*** unictype.h.orig 2009-04-05 12:15:57.000000000 +0200 +--- unictype.h 2009-04-12 04:31:36.000000000 +0200 +*************** +*** 19,26 **** + + #include "unitypes.h" + + /* Get bool. */ +! #include + + /* Get size_t. */ + #include +--- 19,29 ---- + + #include "unitypes.h" + ++ /* Get LIBUNISTRING_DLL_VARIABLE. */ ++ #include ++ + /* Get bool. */ +! #include + + /* Get size_t. */ + #include diff --git a/gnulib-local/lib/unilbrk.h.diff b/gnulib-local/lib/unilbrk.h.diff new file mode 100644 index 00000000..a5b86c3d --- /dev/null +++ b/gnulib-local/lib/unilbrk.h.diff @@ -0,0 +1,19 @@ +*** unilbrk.h.orig 2008-05-10 14:46:17.000000000 +0200 +--- unilbrk.h 2009-04-10 22:39:40.000000000 +0200 +*************** +*** 24,30 **** + #include "unitypes.h" + + /* Get locale_charset() declaration. */ +! #include "localcharset.h" + + + #ifdef __cplusplus +--- 24,30 ---- + #include "unitypes.h" + + /* Get locale_charset() declaration. */ +! #include + + + #ifdef __cplusplus diff --git a/gnulib-local/lib/uninorm.h.diff b/gnulib-local/lib/uninorm.h.diff new file mode 100644 index 00000000..89d89950 --- /dev/null +++ b/gnulib-local/lib/uninorm.h.diff @@ -0,0 +1,14 @@ +*** uninorm.h.orig 2009-04-05 12:38:24.000000000 +0200 +--- uninorm.h 2009-04-12 04:31:52.000000000 +0200 +*************** +*** 18,23 **** +--- 18,26 ---- + #ifndef _UNINORM_H + #define _UNINORM_H + ++ /* Get LIBUNISTRING_DLL_VARIABLE. */ ++ #include ++ + /* Get size_t. */ + #include + diff --git a/gnulib-local/lib/unistr.h.diff b/gnulib-local/lib/unistr.h.diff new file mode 100644 index 00000000..4572049a --- /dev/null +++ b/gnulib-local/lib/unistr.h.diff @@ -0,0 +1,24 @@ +*** unistr.h.orig 2009-04-05 12:22:17.000000000 +0200 +--- unistr.h 2009-04-10 18:57:37.000000000 +0200 +*************** +*** 19,26 **** + + #include "unitypes.h" + + /* Get bool. */ +! #include + + /* Get size_t. */ + #include +--- 19,29 ---- + + #include "unitypes.h" + ++ /* Get inline if available. */ ++ #include ++ + /* Get bool. */ +! #include + + /* Get size_t. */ + #include diff --git a/gnulib-local/lib/unitypes.h.diff b/gnulib-local/lib/unitypes.h.diff new file mode 100644 index 00000000..39597ffd --- /dev/null +++ b/gnulib-local/lib/unitypes.h.diff @@ -0,0 +1,19 @@ +*** unitypes.h.orig 2009-04-05 19:30:36.000000000 +0200 +--- unitypes.h 2009-04-10 16:22:07.000000000 +0200 +*************** +*** 18,24 **** + #define _UNITYPES_H + + /* Get uint8_t, uint16_t, uint32_t. */ +! #include + + /* Type representing a Unicode character. */ + typedef uint32_t ucs4_t; +--- 18,24 ---- + #define _UNITYPES_H + + /* Get uint8_t, uint16_t, uint32_t. */ +! #include + + /* Type representing a Unicode character. */ + typedef uint32_t ucs4_t; diff --git a/gnulib-local/lib/uniwidth.h.diff b/gnulib-local/lib/uniwidth.h.diff new file mode 100644 index 00000000..7448d4c0 --- /dev/null +++ b/gnulib-local/lib/uniwidth.h.diff @@ -0,0 +1,19 @@ +*** uniwidth.h.orig 2007-10-07 17:24:38.000000000 +0200 +--- uniwidth.h 2009-04-10 22:39:46.000000000 +0200 +*************** +*** 23,29 **** + #include + + /* Get locale_charset() declaration. */ +! #include "localcharset.h" + + #ifdef __cplusplus + extern "C" { +--- 23,29 ---- + #include + + /* Get locale_charset() declaration. */ +! #include + + #ifdef __cplusplus + extern "C" { diff --git a/gnulib-local/modules/unictype/category-none-tests.diff b/gnulib-local/modules/unictype/category-none-tests.diff new file mode 100644 index 00000000..4e8b507a --- /dev/null +++ b/gnulib-local/modules/unictype/category-none-tests.diff @@ -0,0 +1,14 @@ +*** category-none-tests.orig 2007-11-12 00:55:16.000000000 +0100 +--- category-none-tests 2009-04-20 00:09:17.000000000 +0200 +*************** +*** 7,13 **** +--- 7,15 ---- + configure.ac: + + Makefile.am: ++ if !WOE32DLL + TESTS += test-categ_none + check_PROGRAMS += test-categ_none + test_categ_none_SOURCES = unictype/test-categ_none.c ++ endif + diff --git a/gnulib-m4/00gnulib.m4 b/gnulib-m4/00gnulib.m4 new file mode 100644 index 00000000..d4d04d15 --- /dev/null +++ b/gnulib-m4/00gnulib.m4 @@ -0,0 +1,30 @@ +# 00gnulib.m4 serial 2 +dnl Copyright (C) 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This file must be named something that sorts before all other +dnl gnulib-provided .m4 files. It is needed until such time as we can +dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE semantics. + +# AC_DEFUN_ONCE([NAME], VALUE) +# ---------------------------- +# Define NAME to expand to VALUE on the first use (whether by direct +# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses. +# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier. This +# definition is slower than the version in Autoconf 2.64, because it +# can only use interfaces that existed since 2.59; but it achieves the +# same effect. Quoting is necessary to avoid confusing Automake. +m4_version_prereq([2.63.263], [], +[m4_define([AC][_DEFUN_ONCE], + [AC][_DEFUN([$1], + [AC_REQUIRE([_gl_DEFUN_ONCE([$1])], + [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl +[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])]) + +# gl_00GNULIB +# ----------- +# Witness macro that this file has been included. Needed to force +# Automake to include this file prior to all other gnulib .m4 files. +AC_DEFUN([gl_00GNULIB]) diff --git a/gnulib-m4/alloca.m4 b/gnulib-m4/alloca.m4 new file mode 100644 index 00000000..4b978e13 --- /dev/null +++ b/gnulib-m4/alloca.m4 @@ -0,0 +1,46 @@ +# alloca.m4 serial 9 +dnl Copyright (C) 2002-2004, 2006, 2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_ALLOCA], +[ + dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57. + AC_REQUIRE([AC_PROG_CPP]) + AC_REQUIRE([AC_PROG_EGREP]) + + AC_REQUIRE([AC_FUNC_ALLOCA]) + if test $ac_cv_func_alloca_works = no; then + gl_PREREQ_ALLOCA + fi + + # Define an additional variable used in the Makefile substitution. + if test $ac_cv_working_alloca_h = yes; then + AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ + AC_EGREP_CPP([Need own alloca], [ +#if defined __GNUC__ || defined _AIX || defined _MSC_VER + Need own alloca +#endif + ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) + ]) + if test $gl_cv_rpl_alloca = yes; then + dnl OK, alloca can be implemented through a compiler built-in. + AC_DEFINE([HAVE_ALLOCA], [1], + [Define to 1 if you have 'alloca' after including , + a header that may be supplied by this distribution.]) + ALLOCA_H=alloca.h + else + dnl alloca exists as a library function, i.e. it is slow and probably + dnl a memory leak. Don't define HAVE_ALLOCA in this case. + ALLOCA_H= + fi + else + ALLOCA_H=alloca.h + fi + AC_SUBST([ALLOCA_H]) +]) + +# Prerequisites of lib/alloca.c. +# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. +AC_DEFUN([gl_PREREQ_ALLOCA], [:]) diff --git a/gnulib-m4/codeset.m4 b/gnulib-m4/codeset.m4 new file mode 100644 index 00000000..413217bd --- /dev/null +++ b/gnulib-m4/codeset.m4 @@ -0,0 +1,21 @@ +# codeset.m4 serial 4 (gettext-0.18) +dnl Copyright (C) 2000-2002, 2006, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET); return !cs;], + [am_cv_langinfo_codeset=yes], + [am_cv_langinfo_codeset=no]) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE([HAVE_LANGINFO_CODESET], [1], + [Define if you have and nl_langinfo(CODESET).]) + fi +]) diff --git a/gnulib-m4/eealloc.m4 b/gnulib-m4/eealloc.m4 new file mode 100644 index 00000000..3c9c0b52 --- /dev/null +++ b/gnulib-m4/eealloc.m4 @@ -0,0 +1,32 @@ +# eealloc.m4 serial 2 +dnl Copyright (C) 2003, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_EEALLOC], +[ + AC_REQUIRE([gl_EEMALLOC]) + AC_REQUIRE([gl_EEREALLOC]) + AC_REQUIRE([AC_C_INLINE]) +]) + +AC_DEFUN([gl_EEMALLOC], +[ + _AC_FUNC_MALLOC_IF( + [gl_cv_func_malloc_0_nonnull=1], + [gl_cv_func_malloc_0_nonnull=0]) + AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull], + [If malloc(0) is != NULL, define this to 1. Otherwise define this + to 0.]) +]) + +AC_DEFUN([gl_EEREALLOC], +[ + _AC_FUNC_REALLOC_IF( + [gl_cv_func_realloc_0_nonnull=1], + [gl_cv_func_realloc_0_nonnull=0]) + AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull], + [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this + to 0.]) +]) diff --git a/gnulib-m4/environ.m4 b/gnulib-m4/environ.m4 new file mode 100644 index 00000000..b17bb60a --- /dev/null +++ b/gnulib-m4/environ.m4 @@ -0,0 +1,36 @@ +# environ.m4 serial 2 +dnl Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_ENVIRON], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + dnl Persuade glibc to declare environ. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + gt_CHECK_VAR_DECL([#include ], environ) + if test $gt_cv_var_environ_declaration != yes; then + HAVE_DECL_ENVIRON=0 + fi +]) + +# Check if a variable is properly declared. +# gt_CHECK_VAR_DECL(includes,variable) +AC_DEFUN([gt_CHECK_VAR_DECL], +[ + define([gt_cv_var], [gt_cv_var_]$2[_declaration]) + AC_MSG_CHECKING([if $2 is properly declared]) + AC_CACHE_VAL([gt_cv_var], [ + AC_TRY_COMPILE([$1 + extern struct { int foo; } $2;], + [$2.foo = 1;], + gt_cv_var=no, + gt_cv_var=yes)]) + AC_MSG_RESULT([$gt_cv_var]) + if test $gt_cv_var = yes; then + AC_DEFINE([HAVE_]translit($2, [a-z], [A-Z])[_DECL], 1, + [Define if you have the declaration of $2.]) + fi + undefine([gt_cv_var]) +]) diff --git a/gnulib-m4/errno_h.m4 b/gnulib-m4/errno_h.m4 new file mode 100644 index 00000000..4ce1ccbd --- /dev/null +++ b/gnulib-m4/errno_h.m4 @@ -0,0 +1,115 @@ +# errno_h.m4 serial 6 +dnl Copyright (C) 2004, 2006, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ + AC_EGREP_CPP([booboo],[ +#include +#if !defined ENOMSG +booboo +#endif +#if !defined EIDRM +booboo +#endif +#if !defined ENOLINK +booboo +#endif +#if !defined EPROTO +booboo +#endif +#if !defined EMULTIHOP +booboo +#endif +#if !defined EBADMSG +booboo +#endif +#if !defined EOVERFLOW +booboo +#endif +#if !defined ENOTSUP +booboo +#endif +#if !defined ESTALE +booboo +#endif +#if !defined ECANCELED +booboo +#endif + ], + [gl_cv_header_errno_h_complete=no], + [gl_cv_header_errno_h_complete=yes]) + ]) + if test $gl_cv_header_errno_h_complete = yes; then + ERRNO_H='' + else + gl_CHECK_NEXT_HEADERS([errno.h]) + ERRNO_H='errno.h' + fi + AC_SUBST([ERRNO_H]) + gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) + gl_REPLACE_ERRNO_VALUE([ENOLINK]) + gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) +]) + +# Assuming $1 = EOVERFLOW. +# The EOVERFLOW errno value ought to be defined in , according to +# POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and +# some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. +# Check for the value of EOVERFLOW. +# Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. +AC_DEFUN([gl_REPLACE_ERRNO_VALUE], +[ + if test -n "$ERRNO_H"; then + AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ + AC_EGREP_CPP([yes],[ +#include +#ifdef ]$1[ +yes +#endif + ], + [gl_cv_header_errno_h_]$1[=yes], + [gl_cv_header_errno_h_]$1[=no]) + if test $gl_cv_header_errno_h_]$1[ = no; then + AC_EGREP_CPP([yes],[ +#define _XOPEN_SOURCE_EXTENDED 1 +#include +#ifdef ]$1[ +yes +#endif + ], [gl_cv_header_errno_h_]$1[=hidden]) + if test $gl_cv_header_errno_h_]$1[ = hidden; then + dnl The macro exists but is hidden. + dnl Define it to the same value. + AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ +#define _XOPEN_SOURCE_EXTENDED 1 +#include +/* The following two lines are a workaround against an autoconf-2.52 bug. */ +#include +#include +]) + fi + fi + ]) + case $gl_cv_header_errno_h_]$1[ in + yes | no) + ]$1[_HIDDEN=0; ]$1[_VALUE= + ;; + *) + ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" + ;; + esac + AC_SUBST($1[_HIDDEN]) + AC_SUBST($1[_VALUE]) + fi +]) + +dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) diff --git a/gnulib-m4/error.m4 b/gnulib-m4/error.m4 new file mode 100644 index 00000000..7c7746e2 --- /dev/null +++ b/gnulib-m4/error.m4 @@ -0,0 +1,22 @@ +#serial 11 + +# Copyright (C) 1996, 1997, 1998, 2001, 2002, 2003, 2004 Free Software +# Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_ERROR], +[ + AC_FUNC_ERROR_AT_LINE + dnl Note: AC_FUNC_ERROR_AT_LINE does AC_LIBSOURCES([error.h, error.c]). + gl_PREREQ_ERROR +]) + +# Prerequisites of lib/error.c. +AC_DEFUN([gl_PREREQ_ERROR], +[ + AC_REQUIRE([AC_FUNC_STRERROR_R]) + : +]) diff --git a/gnulib-m4/exitfail.m4 b/gnulib-m4/exitfail.m4 new file mode 100644 index 00000000..b7a691e5 --- /dev/null +++ b/gnulib-m4/exitfail.m4 @@ -0,0 +1,13 @@ +# exitfail.m4 serial 6 +dnl Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_EXITFAIL], +[ + AC_LIBOBJ([exitfail]) + + dnl No prerequisites of lib/exitfail.c. + : +]) diff --git a/gnulib-m4/exponentd.m4 b/gnulib-m4/exponentd.m4 new file mode 100644 index 00000000..140cee4a --- /dev/null +++ b/gnulib-m4/exponentd.m4 @@ -0,0 +1,114 @@ +# exponentd.m4 serial 1 +dnl Copyright (C) 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION], +[ + AC_CACHE_CHECK([where to find the exponent in a 'double'], + [gl_cv_cc_double_expbit0], + [ + AC_TRY_RUN([ +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { double value; unsigned int word[NWORDS]; } memory_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (double x) +{ + memory_double m; + size_t i; + /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ + memset (&m, 0, sizeof (memory_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25); + add_to_ored_words (0.5); + add_to_ored_words (1.0); + add_to_ored_words (2.0); + add_to_ored_words (4.0); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + ], + [gl_cv_cc_double_expbit0=`cat conftest.out`], + [gl_cv_cc_double_expbit0="unknown"], + [ + dnl On ARM, there are two 'double' floating-point formats, used by + dnl different sets of instructions: The older FPA instructions assume + dnl that they are stored in big-endian word order, while the words + dnl (like integer types) are stored in little-endian byte order. + dnl The newer VFP instructions assume little-endian order consistenly. + AC_EGREP_CPP([mixed_endianness], [ +#if defined arm || defined __arm || defined __arm__ + mixed_endianness +#endif + ], + [gl_cv_cc_double_expbit0="unknown"], + [ + pushdef([AC_MSG_CHECKING],[:])dnl + pushdef([AC_MSG_RESULT],[:])dnl + pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl + AC_C_BIGENDIAN( + [gl_cv_cc_double_expbit0="word 0 bit 20"], + [gl_cv_cc_double_expbit0="word 1 bit 20"], + [gl_cv_cc_double_expbit0="unknown"]) + popdef([AC_MSG_RESULT_UNQUOTED])dnl + popdef([AC_MSG_RESULT])dnl + popdef([AC_MSG_CHECKING])dnl + ]) + ]) + rm -f conftest.out + ]) + case "$gl_cv_cc_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], + [Define as the word index where to find the exponent of 'double'.]) + AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], + [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) + ;; + esac +]) diff --git a/gnulib-m4/exponentf.m4 b/gnulib-m4/exponentf.m4 new file mode 100644 index 00000000..7ff34131 --- /dev/null +++ b/gnulib-m4/exponentf.m4 @@ -0,0 +1,91 @@ +# exponentf.m4 serial 1 +dnl Copyright (C) 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +AC_DEFUN([gl_FLOAT_EXPONENT_LOCATION], +[ + AC_CACHE_CHECK([where to find the exponent in a 'float'], + [gl_cv_cc_float_expbit0], + [ + AC_TRY_RUN([ +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { float value; unsigned int word[NWORDS]; } memory_float; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (float x) +{ + memory_float m; + size_t i; + /* Clear it first, in case + sizeof (float) < sizeof (memory_float). */ + memset (&m, 0, sizeof (memory_float)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25f); + add_to_ored_words (0.5f); + add_to_ored_words (1.0f); + add_to_ored_words (2.0f); + add_to_ored_words (4.0f); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + ], + [gl_cv_cc_float_expbit0=`cat conftest.out`], + [gl_cv_cc_float_expbit0="unknown"], + [gl_cv_cc_float_expbit0="word 0 bit 23"]) + rm -f conftest.out + ]) + case "$gl_cv_cc_float_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([FLT_EXPBIT0_WORD], [$word], + [Define as the word index where to find the exponent of 'float'.]) + AC_DEFINE_UNQUOTED([FLT_EXPBIT0_BIT], [$bit], + [Define as the bit index in the word where to find bit 0 of the exponent of 'float'.]) + ;; + esac +]) diff --git a/gnulib-m4/exponentl.m4 b/gnulib-m4/exponentl.m4 new file mode 100644 index 00000000..98e35eb2 --- /dev/null +++ b/gnulib-m4/exponentl.m4 @@ -0,0 +1,97 @@ +# exponentl.m4 serial 2 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +AC_DEFUN([gl_LONG_DOUBLE_EXPONENT_LOCATION], +[ + AC_REQUIRE([gl_BIGENDIAN]) + AC_CACHE_CHECK([where to find the exponent in a 'long double'], + [gl_cv_cc_long_double_expbit0], + [ + AC_TRY_RUN([ +#include +#include +#include +#include +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { long double value; unsigned int word[NWORDS]; } + memory_long_double; +static unsigned int ored_words[NWORDS]; +static unsigned int anded_words[NWORDS]; +static void add_to_ored_words (long double x) +{ + memory_long_double m; + size_t i; + /* Clear it first, in case + sizeof (long double) < sizeof (memory_long_double). */ + memset (&m, 0, sizeof (memory_long_double)); + m.value = x; + for (i = 0; i < NWORDS; i++) + { + ored_words[i] |= m.word[i]; + anded_words[i] &= m.word[i]; + } +} +int main () +{ + size_t j; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + for (j = 0; j < NWORDS; j++) + anded_words[j] = ~ (unsigned int) 0; + add_to_ored_words (0.25L); + add_to_ored_words (0.5L); + add_to_ored_words (1.0L); + add_to_ored_words (2.0L); + add_to_ored_words (4.0L); + /* Remove bits that are common (e.g. if representation of the first mantissa + bit is explicit). */ + for (j = 0; j < NWORDS; j++) + ored_words[j] &= ~anded_words[j]; + /* Now find the nonzero word. */ + for (j = 0; j < NWORDS; j++) + if (ored_words[j] != 0) + break; + if (j < NWORDS) + { + size_t i; + for (i = j + 1; i < NWORDS; i++) + if (ored_words[i] != 0) + { + fprintf (fp, "unknown"); + return (fclose (fp) != 0); + } + for (i = 0; ; i++) + if ((ored_words[j] >> i) & 1) + { + fprintf (fp, "word %d bit %d", (int) j, (int) i); + return (fclose (fp) != 0); + } + } + fprintf (fp, "unknown"); + return (fclose (fp) != 0); +} + ], + [gl_cv_cc_long_double_expbit0=`cat conftest.out`], + [gl_cv_cc_long_double_expbit0="unknown"], + [ + dnl When cross-compiling, we don't know. It depends on the + dnl ABI and compiler version. There are too many cases. + gl_cv_cc_long_double_expbit0="unknown" + ]) + rm -f conftest.out + ]) + case "$gl_cv_cc_long_double_expbit0" in + word*bit*) + word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_WORD], [$word], + [Define as the word index where to find the exponent of 'long double'.]) + AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_BIT], [$bit], + [Define as the bit index in the word where to find bit 0 of the exponent of 'long double'.]) + ;; + esac +]) diff --git a/gnulib-m4/extensions.m4 b/gnulib-m4/extensions.m4 new file mode 100644 index 00000000..ba6d5e19 --- /dev/null +++ b/gnulib-m4/extensions.m4 @@ -0,0 +1,104 @@ +# serial 8 -*- Autoconf -*- +# Enable extensions on systems that normally disable them. + +# Copyright (C) 2003, 2006-2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS +# Autoconf. Perhaps we can remove this once we can assume Autoconf +# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly +# enough in this area it's likely we'll need to redefine +# AC_USE_SYSTEM_EXTENSIONS for quite some time. + +# AC_USE_SYSTEM_EXTENSIONS +# ------------------------ +# Enable extensions on systems that normally disable them, +# typically due to standards-conformance issues. +# Remember that #undef in AH_VERBATIM gets replaced with #define by +# AC_DEFINE. The goal here is to define all known feature-enabling +# macros, then, if reports of conflicts are made, disable macros that +# cause problems on some platforms (such as __EXTENSIONS__). +AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], +[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl +AC_BEFORE([$0], [AC_RUN_IFELSE])dnl + + AC_REQUIRE([AC_CANONICAL_HOST]) + + AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) + if test "$MINIX" = yes; then + AC_DEFINE([_POSIX_SOURCE], [1], + [Define to 1 if you need to in order for `stat' and other + things to work.]) + AC_DEFINE([_POSIX_1_SOURCE], [2], + [Define to 2 if the system does not provide POSIX.1 features + except with this defined.]) + AC_DEFINE([_MINIX], [1], + [Define to 1 if on MINIX.]) + fi + + dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, + dnl regardless of whether the flags -Ae or _D_HPUX_SOURCE=1 are already + dnl provided. + case "$host_os" in + hpux*) + AC_DEFINE([_XOPEN_SOURCE], [500], + [Define to 500 only on HP-UX.]) + ;; + esac + + AH_VERBATIM([__EXTENSIONS__], +[/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif +]) + AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], + [ac_cv_safe_to_define___extensions__], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[ +# define __EXTENSIONS__ 1 + ]AC_INCLUDES_DEFAULT])], + [ac_cv_safe_to_define___extensions__=yes], + [ac_cv_safe_to_define___extensions__=no])]) + test $ac_cv_safe_to_define___extensions__ = yes && + AC_DEFINE([__EXTENSIONS__]) + AC_DEFINE([_ALL_SOURCE]) + AC_DEFINE([_GNU_SOURCE]) + AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) + AC_DEFINE([_TANDEM_SOURCE]) +])# AC_USE_SYSTEM_EXTENSIONS + +# gl_USE_SYSTEM_EXTENSIONS +# ------------------------ +# Enable extensions on systems that normally disable them, +# typically due to standards-conformance issues. +AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], +[ + dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS. + dnl gnulib does not need it. But if it gets required by third-party macros + dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a + dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". + dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE, + dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck. + AC_REQUIRE([AC_GNU_SOURCE]) + + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) +]) diff --git a/gnulib-m4/float_h.m4 b/gnulib-m4/float_h.m4 new file mode 100644 index 00000000..d36e3a46 --- /dev/null +++ b/gnulib-m4/float_h.m4 @@ -0,0 +1,19 @@ +# float_h.m4 serial 3 +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FLOAT_H], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + FLOAT_H= + case "$host_os" in + beos* | openbsd*) + FLOAT_H=float.h + gl_CHECK_NEXT_HEADERS([float.h]) + ;; + esac + AC_SUBST([FLOAT_H]) +]) diff --git a/gnulib-m4/fpieee.m4 b/gnulib-m4/fpieee.m4 new file mode 100644 index 00000000..9f4a92cb --- /dev/null +++ b/gnulib-m4/fpieee.m4 @@ -0,0 +1,52 @@ +# fpieee.m4 serial 1 +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl IEEE 754 standardized three items: +dnl - The formats of single-float and double-float - nowadays commonly +dnl available as 'float' and 'double' in C and C++. +dnl No autoconf test needed. +dnl - The overflow and division by zero behaviour: The result are values +dnl '±Inf' and 'NaN', rather than exceptions as it was before. +dnl This file provides an autoconf macro for ensuring this behaviour of +dnl floating-point operations. +dnl - A set of conditions (overflow, underflow, inexact, etc.) which can +dnl be configured to trigger an exception. +dnl This cannot be done in a portable way: it depends on the compiler, +dnl libc, kernel, and CPU. No autoconf macro is provided for this. + +dnl Ensure non-trapping behaviour of floating-point overflow and +dnl floating-point division by zero. +dnl (For integer overflow, see gcc's -ftrapv option; for integer division by +dnl zero, see the autoconf macro in intdiv0.m4.) + +AC_DEFUN([gl_FP_IEEE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + # IEEE behaviour is the default on all CPUs except Alpha and SH + # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 + # and the GCC 4.1.2 manual). + case "$host_cpu" in + alpha*) + # On Alpha systems, a compiler option provides the behaviour. + # See the ieee(3) manual page, also available at + # + if test -n "$GCC"; then + # GCC has the option -mieee. + CPPFLAGS="$CPPFLAGS -mieee" + else + # Compaq (ex-DEC) C has the option -ieee. + CPPFLAGS="$CPPFLAGS -ieee" + fi + ;; + sh*) + if test -n "$GCC"; then + # GCC has the option -mieee. + CPPFLAGS="$CPPFLAGS -mieee" + fi + ;; + esac +]) diff --git a/gnulib-m4/frexp.m4 b/gnulib-m4/frexp.m4 new file mode 100644 index 00000000..6c911121 --- /dev/null +++ b/gnulib-m4/frexp.m4 @@ -0,0 +1,146 @@ +# frexp.m4 serial 7 +dnl Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FREXP], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + FREXP_LIBM= + AC_CACHE_CHECK([whether frexp() can be used without linking with libm], + [gl_cv_func_frexp_no_libm], + [ + AC_TRY_LINK([#include + double x;], + [int e; return frexp (x, &e) > 0;], + [gl_cv_func_frexp_no_libm=yes], + [gl_cv_func_frexp_no_libm=no]) + ]) + if test $gl_cv_func_frexp_no_libm = no; then + AC_CACHE_CHECK([whether frexp() can be used with libm], + [gl_cv_func_frexp_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + double x;], + [int e; return frexp (x, &e) > 0;], + [gl_cv_func_frexp_in_libm=yes], + [gl_cv_func_frexp_in_libm=no]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_frexp_in_libm = yes; then + FREXP_LIBM=-lm + fi + fi + if test $gl_cv_func_frexp_no_libm = yes \ + || test $gl_cv_func_frexp_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $FREXP_LIBM" + gl_FUNC_FREXP_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_frexp_works" in + *yes) gl_func_frexp=yes ;; + *) gl_func_frexp=no; REPLACE_FREXP=1; FREXP_LIBM= ;; + esac + else + gl_func_frexp=no + fi + if test $gl_func_frexp = yes; then + AC_DEFINE([HAVE_FREXP], [1], + [Define if the frexp() function is available and works.]) + else + AC_LIBOBJ([frexp]) + fi + AC_SUBST([FREXP_LIBM]) +]) + +AC_DEFUN([gl_FUNC_FREXP_NO_LIBM], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_CACHE_CHECK([whether frexp() can be used without linking with libm], + [gl_cv_func_frexp_no_libm], + [ + AC_TRY_LINK([#include + double x;], + [int e; return frexp (x, &e) > 0;], + [gl_cv_func_frexp_no_libm=yes], + [gl_cv_func_frexp_no_libm=no]) + ]) + if test $gl_cv_func_frexp_no_libm = yes; then + gl_FUNC_FREXP_WORKS + case "$gl_cv_func_frexp_works" in + *yes) gl_func_frexp_no_libm=yes ;; + *) gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;; + esac + else + gl_func_frexp_no_libm=no + dnl Set REPLACE_FREXP here because the system may have frexp in libm. + REPLACE_FREXP=1 + fi + if test $gl_func_frexp_no_libm = yes; then + AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], + [Define if the frexp() function is available in libc.]) + else + AC_LIBOBJ([frexp]) + fi +]) + +dnl Test whether frexp() works also on denormalized numbers (this fails e.g. on +dnl NetBSD 3.0), on infinite numbers (this fails e.g. on IRIX 6.5 and mingw), +dnl and on negative zero (this fails e.g. on NetBSD 4.99). +AC_DEFUN([gl_FUNC_FREXP_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether frexp works], [gl_cv_func_frexp_works], + [ + AC_TRY_RUN([ +#include +#include +#include +int main() +{ + int i; + volatile double x; +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ + double zero = 0.0; + /* Test on denormalized numbers. */ + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + ; + if (x > 0.0) + { + int exp; + double y = frexp (x, &exp); + /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. + On NetBSD: y = 0.75. Correct: y = 0.5. */ + if (y != 0.5) + return 1; + } + /* Test on infinite numbers. */ + x = 1.0 / 0.0; + { + int exp; + double y = frexp (x, &exp); + if (y != x) + return 1; + } + /* Test on negative zero. */ + x = -zero; + { + int exp; + double y = frexp (x, &exp); + if (memcmp (&y, &x, sizeof x)) + return 1; + } + return 0; +}], [gl_cv_func_frexp_works=yes], [gl_cv_func_frexp_works=no], + [case "$host_os" in + netbsd* | irix* | mingw*) gl_cv_func_frexp_works="guessing no";; + *) gl_cv_func_frexp_works="guessing yes";; + esac + ]) + ]) +]) diff --git a/gnulib-m4/frexpl.m4 b/gnulib-m4/frexpl.m4 new file mode 100644 index 00000000..c5da7446 --- /dev/null +++ b/gnulib-m4/frexpl.m4 @@ -0,0 +1,186 @@ +# frexpl.m4 serial 9 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_FREXPL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + FREXPL_LIBM= + AC_CACHE_CHECK([whether frexpl() can be used without linking with libm], + [gl_cv_func_frexpl_no_libm], + [ + AC_TRY_LINK([#include + long double x;], + [int e; return frexpl (x, &e) > 0;], + [gl_cv_func_frexpl_no_libm=yes], + [gl_cv_func_frexpl_no_libm=no]) + ]) + if test $gl_cv_func_frexpl_no_libm = no; then + AC_CACHE_CHECK([whether frexpl() can be used with libm], + [gl_cv_func_frexpl_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + long double x;], + [int e; return frexpl (x, &e) > 0;], + [gl_cv_func_frexpl_in_libm=yes], + [gl_cv_func_frexpl_in_libm=no]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_frexpl_in_libm = yes; then + FREXPL_LIBM=-lm + fi + fi + if test $gl_cv_func_frexpl_no_libm = yes \ + || test $gl_cv_func_frexpl_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $FREXPL_LIBM" + gl_FUNC_FREXPL_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl=yes ;; + *) gl_func_frexpl=no; REPLACE_FREXPL=1; FREXPL_LIBM= ;; + esac + else + gl_func_frexpl=no + fi + if test $gl_func_frexpl = yes; then + AC_DEFINE([HAVE_FREXPL], [1], + [Define if the frexpl() function is available.]) + dnl Also check whether it's declared. + dnl MacOS X 10.3 has frexpl() in libc but doesn't declare it in . + AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [#include ]) + else + HAVE_DECL_FREXPL=0 + AC_LIBOBJ([frexpl]) + fi + AC_SUBST([FREXPL_LIBM]) +]) + +AC_DEFUN([gl_FUNC_FREXPL_NO_LIBM], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_CACHE_CHECK([whether frexpl() can be used without linking with libm], + [gl_cv_func_frexpl_no_libm], + [ + AC_TRY_LINK([#include + long double x;], + [int e; return frexpl (x, &e) > 0;], + [gl_cv_func_frexpl_no_libm=yes], + [gl_cv_func_frexpl_no_libm=no]) + ]) + if test $gl_cv_func_frexpl_no_libm = yes; then + gl_FUNC_FREXPL_WORKS + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], + [Define if the frexpl() function is available in libc.]) + dnl Also check whether it's declared. + dnl MacOS X 10.3 has frexpl() in libc but doesn't declare it in . + AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [#include ]) + else + HAVE_DECL_FREXPL=0 + AC_LIBOBJ([frexpl]) + fi +]) + +dnl Test whether frexpl() works on finite numbers (this fails on +dnl MacOS X 10.4/PowerPC, on AIX 5.1, and on BeOS), on denormalized numbers +dnl (this fails on MacOS X 10.5/i386), and also on infinite numbers (this +dnl fails e.g. on IRIX 6.5 and mingw). +AC_DEFUN([gl_FUNC_FREXPL_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether frexpl works], [gl_cv_func_frexpl_works], + [ + AC_TRY_RUN([ +#include +#include +/* Override the values of , like done in float.in.h. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +#endif +extern long double frexpl (long double, int *); +int main() +{ + volatile long double x; + /* Test on finite numbers that fails on AIX 5.1. */ + x = 16.0L; + { + int exp = -9999; + frexpl (x, &exp); + if (exp != 5) + return 1; + } + /* Test on finite numbers that fails on MacOS X 10.4, because its frexpl + function returns an invalid (incorrectly normalized) value: it returns + y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } + but the correct result is + 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ + x = 1.01L; + { + int exp = -9999; + long double y = frexpl (x, &exp); + if (!(exp == 1 && y == 0.505L)) + return 1; + } + /* Test on large finite numbers. This fails on BeOS at i = 16322, while + LDBL_MAX_EXP = 16384. + In the loop end test, we test x against Infinity, rather than comparing + i with LDBL_MAX_EXP, because BeOS has a wrong LDBL_MAX_EXP. */ + { + int i; + for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) + { + int exp = -9999; + frexpl (x, &exp); + if (exp != i) + return 1; + } + } + /* Test on denormalized numbers. */ + { + int i; + for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) + ; + if (x > 0.0L) + { + int exp; + long double y = frexpl (x, &exp); + /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, + exp = -16382, y = 0.5. On MacOS X 10.5: exp = -16384, y = 0.5. */ + if (exp != LDBL_MIN_EXP - 1) + return 1; + } + } + /* Test on infinite numbers. */ + x = 1.0L / 0.0L; + { + int exp; + long double y = frexpl (x, &exp); + if (y != x) + return 1; + } + return 0; +}], [gl_cv_func_frexpl_works=yes], [gl_cv_func_frexpl_works=no], + [case "$host_os" in + aix* | beos* | darwin* | irix* | mingw* | pw*) + gl_cv_func_frexpl_works="guessing no";; + *) gl_cv_func_frexpl_works="guessing yes";; + esac + ]) + ]) +]) diff --git a/gnulib-m4/getpagesize.m4 b/gnulib-m4/getpagesize.m4 new file mode 100644 index 00000000..0d07a3a5 --- /dev/null +++ b/gnulib-m4/getpagesize.m4 @@ -0,0 +1,29 @@ +# getpagesize.m4 serial 7 +dnl Copyright (C) 2002, 2004-2005, 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_GETPAGESIZE], +[ + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_FUNCS([getpagesize]) + if test $ac_cv_func_getpagesize = no; then + HAVE_GETPAGESIZE=0 + AC_CHECK_HEADERS([OS.h]) + if test $ac_cv_header_OS_h = yes; then + HAVE_OS_H=1 + fi + AC_CHECK_HEADERS([sys/param.h]) + if test $ac_cv_header_sys_param_h = yes; then + HAVE_SYS_PARAM_H=1 + fi + fi + case "$host_os" in + mingw*) + REPLACE_GETPAGESIZE=1 + AC_LIBOBJ([getpagesize]) + ;; + esac +]) diff --git a/gnulib-m4/glibc21.m4 b/gnulib-m4/glibc21.m4 new file mode 100644 index 00000000..93fbf474 --- /dev/null +++ b/gnulib-m4/glibc21.m4 @@ -0,0 +1,30 @@ +# glibc21.m4 serial 4 +dnl Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([gl_GLIBC21], + [ + AC_CACHE_CHECK([whether we are using the GNU C Library 2.1 or newer], + [ac_cv_gnu_library_2_1], + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + [ac_cv_gnu_library_2_1=yes], + [ac_cv_gnu_library_2_1=no]) + ] + ) + AC_SUBST([GLIBC21]) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) diff --git a/gnulib-m4/gnulib-cache.m4 b/gnulib-m4/gnulib-cache.m4 new file mode 100644 index 00000000..b3ae1d22 --- /dev/null +++ b/gnulib-m4/gnulib-cache.m4 @@ -0,0 +1,373 @@ +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# +# This file represents the specification of how gnulib-tool is used. +# It acts as a cache: It is written and read by gnulib-tool. +# In projects using CVS, this file is meant to be stored in CVS, +# like the configure.ac and various Makefile.am files. + + +# Specification in the form of a command-line invocation: +# gnulib-tool --import --dir=. --local-dir=gnulib-local --lib=libunistring --source-base=lib --m4-base=gnulib-m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --with-tests --lgpl --makefile-name=Makefile.gnulib --libtool --macro-prefix=gl relocatable-lib-lgpl unicase/base unicase/empty-prefix-context unicase/empty-suffix-context unicase/locale-language unicase/tolower unicase/totitle unicase/toupper unicase/u16-casecmp unicase/u16-casecoll unicase/u16-casefold unicase/u16-casexfrm unicase/u16-ct-casefold unicase/u16-ct-tolower unicase/u16-ct-totitle unicase/u16-ct-toupper unicase/u16-is-cased unicase/u16-is-casefolded unicase/u16-is-lowercase unicase/u16-is-titlecase unicase/u16-is-uppercase unicase/u16-tolower unicase/u16-totitle unicase/u16-toupper unicase/u32-casecmp unicase/u32-casecoll unicase/u32-casefold unicase/u32-casexfrm unicase/u32-ct-casefold unicase/u32-ct-tolower unicase/u32-ct-totitle unicase/u32-ct-toupper unicase/u32-is-cased unicase/u32-is-casefolded unicase/u32-is-lowercase unicase/u32-is-titlecase unicase/u32-is-uppercase unicase/u32-tolower unicase/u32-totitle unicase/u32-toupper unicase/u8-casecmp unicase/u8-casecoll unicase/u8-casefold unicase/u8-casexfrm unicase/u8-ct-casefold unicase/u8-ct-tolower unicase/u8-ct-totitle unicase/u8-ct-toupper unicase/u8-is-cased unicase/u8-is-casefolded unicase/u8-is-lowercase unicase/u8-is-titlecase unicase/u8-is-uppercase unicase/u8-tolower unicase/u8-totitle unicase/u8-toupper unicase/ulc-casecmp unicase/ulc-casecoll unicase/ulc-casexfrm uniconv/base uniconv/u16-conv-from-enc uniconv/u16-conv-to-enc uniconv/u16-strconv-from-enc uniconv/u16-strconv-from-locale uniconv/u16-strconv-to-enc uniconv/u16-strconv-to-locale uniconv/u32-conv-from-enc uniconv/u32-conv-to-enc uniconv/u32-strconv-from-enc uniconv/u32-strconv-from-locale uniconv/u32-strconv-to-enc uniconv/u32-strconv-to-locale uniconv/u8-conv-from-enc uniconv/u8-conv-to-enc uniconv/u8-strconv-from-enc uniconv/u8-strconv-from-locale uniconv/u8-strconv-to-enc uniconv/u8-strconv-to-locale unictype/base unictype/bidicategory-all unictype/block-all unictype/category-all unictype/combining-class unictype/ctype-alnum unictype/ctype-alpha unictype/ctype-blank unictype/ctype-cntrl unictype/ctype-digit unictype/ctype-graph unictype/ctype-lower unictype/ctype-print unictype/ctype-punct unictype/ctype-space unictype/ctype-upper unictype/ctype-xdigit unictype/decimal-digit unictype/digit unictype/mirror unictype/numeric unictype/property-all unictype/scripts-all unictype/syntax-c-ident unictype/syntax-c-whitespace unictype/syntax-java-ident unictype/syntax-java-whitespace unilbrk/base unilbrk/tables unilbrk/u16-possible-linebreaks unilbrk/u16-width-linebreaks unilbrk/u32-possible-linebreaks unilbrk/u32-width-linebreaks unilbrk/u8-possible-linebreaks unilbrk/u8-width-linebreaks unilbrk/ulc-possible-linebreaks unilbrk/ulc-width-linebreaks uniname/base uniname/uniname uninorm/base uninorm/canonical-decomposition uninorm/compat-decomposition uninorm/composition uninorm/decomposition uninorm/filter uninorm/nfc uninorm/nfd uninorm/nfkc uninorm/nfkd uninorm/u16-normalize uninorm/u16-normcmp uninorm/u16-normcoll uninorm/u16-normxfrm uninorm/u32-normalize uninorm/u32-normcmp uninorm/u32-normcoll uninorm/u32-normxfrm uninorm/u8-normalize uninorm/u8-normcmp uninorm/u8-normcoll uninorm/u8-normxfrm unistdio/base unistdio/u16-asnprintf unistdio/u16-asprintf unistdio/u16-snprintf unistdio/u16-sprintf unistdio/u16-u16-asnprintf unistdio/u16-u16-asprintf unistdio/u16-u16-snprintf unistdio/u16-u16-sprintf unistdio/u16-u16-vasnprintf unistdio/u16-u16-vasprintf unistdio/u16-u16-vsnprintf unistdio/u16-u16-vsprintf unistdio/u16-vasnprintf unistdio/u16-vasprintf unistdio/u16-vsnprintf unistdio/u16-vsprintf unistdio/u32-asnprintf unistdio/u32-asprintf unistdio/u32-snprintf unistdio/u32-sprintf unistdio/u32-u32-asnprintf unistdio/u32-u32-asprintf unistdio/u32-u32-snprintf unistdio/u32-u32-sprintf unistdio/u32-u32-vasnprintf unistdio/u32-u32-vasprintf unistdio/u32-u32-vsnprintf unistdio/u32-u32-vsprintf unistdio/u32-vasnprintf unistdio/u32-vasprintf unistdio/u32-vsnprintf unistdio/u32-vsprintf unistdio/u8-asnprintf unistdio/u8-asprintf unistdio/u8-snprintf unistdio/u8-sprintf unistdio/u8-u8-asnprintf unistdio/u8-u8-asprintf unistdio/u8-u8-snprintf unistdio/u8-u8-sprintf unistdio/u8-u8-vasnprintf unistdio/u8-u8-vasprintf unistdio/u8-u8-vsnprintf unistdio/u8-u8-vsprintf unistdio/u8-vasnprintf unistdio/u8-vasprintf unistdio/u8-vsnprintf unistdio/u8-vsprintf unistdio/ulc-asnprintf unistdio/ulc-asprintf unistdio/ulc-fprintf unistdio/ulc-snprintf unistdio/ulc-sprintf unistdio/ulc-vasnprintf unistdio/ulc-vasprintf unistdio/ulc-vfprintf unistdio/ulc-vsnprintf unistdio/ulc-vsprintf unistr/base unistr/u16-check unistr/u16-chr unistr/u16-cmp unistr/u16-cmp2 unistr/u16-cpy unistr/u16-cpy-alloc unistr/u16-endswith unistr/u16-mblen unistr/u16-mbsnlen unistr/u16-mbtouc unistr/u16-mbtouc-unsafe unistr/u16-mbtoucr unistr/u16-move unistr/u16-next unistr/u16-prev unistr/u16-set unistr/u16-startswith unistr/u16-stpcpy unistr/u16-stpncpy unistr/u16-strcat unistr/u16-strchr unistr/u16-strcmp unistr/u16-strcoll unistr/u16-strcpy unistr/u16-strcspn unistr/u16-strdup unistr/u16-strlen unistr/u16-strmblen unistr/u16-strmbtouc unistr/u16-strncat unistr/u16-strncmp unistr/u16-strncpy unistr/u16-strnlen unistr/u16-strpbrk unistr/u16-strrchr unistr/u16-strspn unistr/u16-strstr unistr/u16-strtok unistr/u16-to-u32 unistr/u16-to-u8 unistr/u16-uctomb unistr/u32-check unistr/u32-chr unistr/u32-cmp unistr/u32-cmp2 unistr/u32-cpy unistr/u32-cpy-alloc unistr/u32-endswith unistr/u32-mblen unistr/u32-mbsnlen unistr/u32-mbtouc unistr/u32-mbtouc-unsafe unistr/u32-mbtoucr unistr/u32-move unistr/u32-next unistr/u32-prev unistr/u32-set unistr/u32-startswith unistr/u32-stpcpy unistr/u32-stpncpy unistr/u32-strcat unistr/u32-strchr unistr/u32-strcmp unistr/u32-strcoll unistr/u32-strcpy unistr/u32-strcspn unistr/u32-strdup unistr/u32-strlen unistr/u32-strmblen unistr/u32-strmbtouc unistr/u32-strncat unistr/u32-strncmp unistr/u32-strncpy unistr/u32-strnlen unistr/u32-strpbrk unistr/u32-strrchr unistr/u32-strspn unistr/u32-strstr unistr/u32-strtok unistr/u32-to-u16 unistr/u32-to-u8 unistr/u32-uctomb unistr/u8-check unistr/u8-chr unistr/u8-cmp unistr/u8-cmp2 unistr/u8-cpy unistr/u8-cpy-alloc unistr/u8-endswith unistr/u8-mblen unistr/u8-mbsnlen unistr/u8-mbtouc unistr/u8-mbtouc-unsafe unistr/u8-mbtoucr unistr/u8-move unistr/u8-next unistr/u8-prev unistr/u8-set unistr/u8-startswith unistr/u8-stpcpy unistr/u8-stpncpy unistr/u8-strcat unistr/u8-strchr unistr/u8-strcmp unistr/u8-strcoll unistr/u8-strcpy unistr/u8-strcspn unistr/u8-strdup unistr/u8-strlen unistr/u8-strmblen unistr/u8-strmbtouc unistr/u8-strncat unistr/u8-strncmp unistr/u8-strncpy unistr/u8-strnlen unistr/u8-strpbrk unistr/u8-strrchr unistr/u8-strspn unistr/u8-strstr unistr/u8-strtok unistr/u8-to-u16 unistr/u8-to-u32 unistr/u8-uctomb unitypes uniwbrk/base uniwbrk/u16-wordbreaks uniwbrk/u32-wordbreaks uniwbrk/u8-wordbreaks uniwbrk/ulc-wordbreaks uniwbrk/wordbreak-property uniwidth/base uniwidth/u16-strwidth uniwidth/u16-width uniwidth/u32-strwidth uniwidth/u32-width uniwidth/u8-strwidth uniwidth/u8-width uniwidth/width + +# Specification in the form of a few gnulib-tool.m4 macro invocations: +gl_LOCAL_DIR([gnulib-local]) +gl_MODULES([ + relocatable-lib-lgpl + unicase/base + unicase/empty-prefix-context + unicase/empty-suffix-context + unicase/locale-language + unicase/tolower + unicase/totitle + unicase/toupper + unicase/u16-casecmp + unicase/u16-casecoll + unicase/u16-casefold + unicase/u16-casexfrm + unicase/u16-ct-casefold + unicase/u16-ct-tolower + unicase/u16-ct-totitle + unicase/u16-ct-toupper + unicase/u16-is-cased + unicase/u16-is-casefolded + unicase/u16-is-lowercase + unicase/u16-is-titlecase + unicase/u16-is-uppercase + unicase/u16-tolower + unicase/u16-totitle + unicase/u16-toupper + unicase/u32-casecmp + unicase/u32-casecoll + unicase/u32-casefold + unicase/u32-casexfrm + unicase/u32-ct-casefold + unicase/u32-ct-tolower + unicase/u32-ct-totitle + unicase/u32-ct-toupper + unicase/u32-is-cased + unicase/u32-is-casefolded + unicase/u32-is-lowercase + unicase/u32-is-titlecase + unicase/u32-is-uppercase + unicase/u32-tolower + unicase/u32-totitle + unicase/u32-toupper + unicase/u8-casecmp + unicase/u8-casecoll + unicase/u8-casefold + unicase/u8-casexfrm + unicase/u8-ct-casefold + unicase/u8-ct-tolower + unicase/u8-ct-totitle + unicase/u8-ct-toupper + unicase/u8-is-cased + unicase/u8-is-casefolded + unicase/u8-is-lowercase + unicase/u8-is-titlecase + unicase/u8-is-uppercase + unicase/u8-tolower + unicase/u8-totitle + unicase/u8-toupper + unicase/ulc-casecmp + unicase/ulc-casecoll + unicase/ulc-casexfrm + uniconv/base + uniconv/u16-conv-from-enc + uniconv/u16-conv-to-enc + uniconv/u16-strconv-from-enc + uniconv/u16-strconv-from-locale + uniconv/u16-strconv-to-enc + uniconv/u16-strconv-to-locale + uniconv/u32-conv-from-enc + uniconv/u32-conv-to-enc + uniconv/u32-strconv-from-enc + uniconv/u32-strconv-from-locale + uniconv/u32-strconv-to-enc + uniconv/u32-strconv-to-locale + uniconv/u8-conv-from-enc + uniconv/u8-conv-to-enc + uniconv/u8-strconv-from-enc + uniconv/u8-strconv-from-locale + uniconv/u8-strconv-to-enc + uniconv/u8-strconv-to-locale + unictype/base + unictype/bidicategory-all + unictype/block-all + unictype/category-all + unictype/combining-class + unictype/ctype-alnum + unictype/ctype-alpha + unictype/ctype-blank + unictype/ctype-cntrl + unictype/ctype-digit + unictype/ctype-graph + unictype/ctype-lower + unictype/ctype-print + unictype/ctype-punct + unictype/ctype-space + unictype/ctype-upper + unictype/ctype-xdigit + unictype/decimal-digit + unictype/digit + unictype/mirror + unictype/numeric + unictype/property-all + unictype/scripts-all + unictype/syntax-c-ident + unictype/syntax-c-whitespace + unictype/syntax-java-ident + unictype/syntax-java-whitespace + unilbrk/base + unilbrk/tables + unilbrk/u16-possible-linebreaks + unilbrk/u16-width-linebreaks + unilbrk/u32-possible-linebreaks + unilbrk/u32-width-linebreaks + unilbrk/u8-possible-linebreaks + unilbrk/u8-width-linebreaks + unilbrk/ulc-possible-linebreaks + unilbrk/ulc-width-linebreaks + uniname/base + uniname/uniname + uninorm/base + uninorm/canonical-decomposition + uninorm/compat-decomposition + uninorm/composition + uninorm/decomposition + uninorm/filter + uninorm/nfc + uninorm/nfd + uninorm/nfkc + uninorm/nfkd + uninorm/u16-normalize + uninorm/u16-normcmp + uninorm/u16-normcoll + uninorm/u16-normxfrm + uninorm/u32-normalize + uninorm/u32-normcmp + uninorm/u32-normcoll + uninorm/u32-normxfrm + uninorm/u8-normalize + uninorm/u8-normcmp + uninorm/u8-normcoll + uninorm/u8-normxfrm + unistdio/base + unistdio/u16-asnprintf + unistdio/u16-asprintf + unistdio/u16-snprintf + unistdio/u16-sprintf + unistdio/u16-u16-asnprintf + unistdio/u16-u16-asprintf + unistdio/u16-u16-snprintf + unistdio/u16-u16-sprintf + unistdio/u16-u16-vasnprintf + unistdio/u16-u16-vasprintf + unistdio/u16-u16-vsnprintf + unistdio/u16-u16-vsprintf + unistdio/u16-vasnprintf + unistdio/u16-vasprintf + unistdio/u16-vsnprintf + unistdio/u16-vsprintf + unistdio/u32-asnprintf + unistdio/u32-asprintf + unistdio/u32-snprintf + unistdio/u32-sprintf + unistdio/u32-u32-asnprintf + unistdio/u32-u32-asprintf + unistdio/u32-u32-snprintf + unistdio/u32-u32-sprintf + unistdio/u32-u32-vasnprintf + unistdio/u32-u32-vasprintf + unistdio/u32-u32-vsnprintf + unistdio/u32-u32-vsprintf + unistdio/u32-vasnprintf + unistdio/u32-vasprintf + unistdio/u32-vsnprintf + unistdio/u32-vsprintf + unistdio/u8-asnprintf + unistdio/u8-asprintf + unistdio/u8-snprintf + unistdio/u8-sprintf + unistdio/u8-u8-asnprintf + unistdio/u8-u8-asprintf + unistdio/u8-u8-snprintf + unistdio/u8-u8-sprintf + unistdio/u8-u8-vasnprintf + unistdio/u8-u8-vasprintf + unistdio/u8-u8-vsnprintf + unistdio/u8-u8-vsprintf + unistdio/u8-vasnprintf + unistdio/u8-vasprintf + unistdio/u8-vsnprintf + unistdio/u8-vsprintf + unistdio/ulc-asnprintf + unistdio/ulc-asprintf + unistdio/ulc-fprintf + unistdio/ulc-snprintf + unistdio/ulc-sprintf + unistdio/ulc-vasnprintf + unistdio/ulc-vasprintf + unistdio/ulc-vfprintf + unistdio/ulc-vsnprintf + unistdio/ulc-vsprintf + unistr/base + unistr/u16-check + unistr/u16-chr + unistr/u16-cmp + unistr/u16-cmp2 + unistr/u16-cpy + unistr/u16-cpy-alloc + unistr/u16-endswith + unistr/u16-mblen + unistr/u16-mbsnlen + unistr/u16-mbtouc + unistr/u16-mbtouc-unsafe + unistr/u16-mbtoucr + unistr/u16-move + unistr/u16-next + unistr/u16-prev + unistr/u16-set + unistr/u16-startswith + unistr/u16-stpcpy + unistr/u16-stpncpy + unistr/u16-strcat + unistr/u16-strchr + unistr/u16-strcmp + unistr/u16-strcoll + unistr/u16-strcpy + unistr/u16-strcspn + unistr/u16-strdup + unistr/u16-strlen + unistr/u16-strmblen + unistr/u16-strmbtouc + unistr/u16-strncat + unistr/u16-strncmp + unistr/u16-strncpy + unistr/u16-strnlen + unistr/u16-strpbrk + unistr/u16-strrchr + unistr/u16-strspn + unistr/u16-strstr + unistr/u16-strtok + unistr/u16-to-u32 + unistr/u16-to-u8 + unistr/u16-uctomb + unistr/u32-check + unistr/u32-chr + unistr/u32-cmp + unistr/u32-cmp2 + unistr/u32-cpy + unistr/u32-cpy-alloc + unistr/u32-endswith + unistr/u32-mblen + unistr/u32-mbsnlen + unistr/u32-mbtouc + unistr/u32-mbtouc-unsafe + unistr/u32-mbtoucr + unistr/u32-move + unistr/u32-next + unistr/u32-prev + unistr/u32-set + unistr/u32-startswith + unistr/u32-stpcpy + unistr/u32-stpncpy + unistr/u32-strcat + unistr/u32-strchr + unistr/u32-strcmp + unistr/u32-strcoll + unistr/u32-strcpy + unistr/u32-strcspn + unistr/u32-strdup + unistr/u32-strlen + unistr/u32-strmblen + unistr/u32-strmbtouc + unistr/u32-strncat + unistr/u32-strncmp + unistr/u32-strncpy + unistr/u32-strnlen + unistr/u32-strpbrk + unistr/u32-strrchr + unistr/u32-strspn + unistr/u32-strstr + unistr/u32-strtok + unistr/u32-to-u16 + unistr/u32-to-u8 + unistr/u32-uctomb + unistr/u8-check + unistr/u8-chr + unistr/u8-cmp + unistr/u8-cmp2 + unistr/u8-cpy + unistr/u8-cpy-alloc + unistr/u8-endswith + unistr/u8-mblen + unistr/u8-mbsnlen + unistr/u8-mbtouc + unistr/u8-mbtouc-unsafe + unistr/u8-mbtoucr + unistr/u8-move + unistr/u8-next + unistr/u8-prev + unistr/u8-set + unistr/u8-startswith + unistr/u8-stpcpy + unistr/u8-stpncpy + unistr/u8-strcat + unistr/u8-strchr + unistr/u8-strcmp + unistr/u8-strcoll + unistr/u8-strcpy + unistr/u8-strcspn + unistr/u8-strdup + unistr/u8-strlen + unistr/u8-strmblen + unistr/u8-strmbtouc + unistr/u8-strncat + unistr/u8-strncmp + unistr/u8-strncpy + unistr/u8-strnlen + unistr/u8-strpbrk + unistr/u8-strrchr + unistr/u8-strspn + unistr/u8-strstr + unistr/u8-strtok + unistr/u8-to-u16 + unistr/u8-to-u32 + unistr/u8-uctomb + unitypes + uniwbrk/base + uniwbrk/u16-wordbreaks + uniwbrk/u32-wordbreaks + uniwbrk/u8-wordbreaks + uniwbrk/ulc-wordbreaks + uniwbrk/wordbreak-property + uniwidth/base + uniwidth/u16-strwidth + uniwidth/u16-width + uniwidth/u32-strwidth + uniwidth/u32-width + uniwidth/u8-strwidth + uniwidth/u8-width + uniwidth/width +]) +gl_AVOID([]) +gl_SOURCE_BASE([lib]) +gl_M4_BASE([gnulib-m4]) +gl_PO_BASE([]) +gl_DOC_BASE([doc]) +gl_TESTS_BASE([tests]) +gl_WITH_TESTS +gl_LIB([libunistring]) +gl_LGPL +gl_MAKEFILE_NAME([Makefile.gnulib]) +gl_LIBTOOL +gl_MACRO_PREFIX([gl]) +gl_PO_DOMAIN([]) diff --git a/gnulib-m4/gnulib-common.m4 b/gnulib-m4/gnulib-common.m4 new file mode 100644 index 00000000..c8fda203 --- /dev/null +++ b/gnulib-m4/gnulib-common.m4 @@ -0,0 +1,124 @@ +# gnulib-common.m4 serial 11 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# gl_COMMON +# is expanded unconditionally through gnulib-tool magic. +AC_DEFUN([gl_COMMON], [ + dnl Use AC_REQUIRE here, so that the code is expanded once only. + AC_REQUIRE([gl_00GNULIB]) + AC_REQUIRE([gl_COMMON_BODY]) +]) +AC_DEFUN([gl_COMMON_BODY], [ + AH_VERBATIM([isoc99_inline], +[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports + the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of + earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. + __APPLE__ && __MACH__ test for MacOS X. + __APPLE_CC__ tests for the Apple compiler and its version. + __STDC_VERSION__ tests for the C99 mode. */ +#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ +# define __GNUC_STDC_INLINE__ 1 +#endif]) + AH_VERBATIM([unused_parameter], +[/* Define as a marker that can be attached to function parameter declarations + for parameters that are not used. This helps to reduce warnings, such as + from GCC -Wunused-parameter. */ +#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +# define _UNUSED_PARAMETER_ __attribute__ ((__unused__)) +#else +# define _UNUSED_PARAMETER_ +#endif +]) +]) + +# gl_MODULE_INDICATOR([modulename]) +# defines a C macro indicating the presence of the given module. +AC_DEFUN([gl_MODULE_INDICATOR], +[ + AC_DEFINE([GNULIB_]translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], + [Define to 1 when using the gnulib module ]$1[.]) +]) + +# m4_foreach_w +# is a backport of autoconf-2.59c's m4_foreach_w. +# Remove this macro when we can assume autoconf >= 2.60. +m4_ifndef([m4_foreach_w], + [m4_define([m4_foreach_w], + [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])]) + +# AC_PROG_MKDIR_P +# is a backport of autoconf-2.60's AC_PROG_MKDIR_P. +# Remove this macro when we can assume autoconf >= 2.60. +m4_ifdef([AC_PROG_MKDIR_P], [], [ + AC_DEFUN_ONCE([AC_PROG_MKDIR_P], + [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake + MKDIR_P='$(mkdir_p)' + AC_SUBST([MKDIR_P])])]) + +# AC_C_RESTRICT +# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61, +# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++ +# works. +# This definition can be removed once autoconf >= 2.62 can be assumed. +AC_DEFUN([AC_C_RESTRICT], +[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], + [ac_cv_c_restrict=no + # The order here caters to the fact that C++ does not require restrict. + for ac_kw in __restrict __restrict__ _Restrict restrict; do + AC_COMPILE_IFELSE([AC_LANG_PROGRAM( + [[typedef int * int_ptr; + int foo (int_ptr $ac_kw ip) { + return ip[0]; + }]], + [[int s[1]; + int * $ac_kw t = s; + t[0] = 0; + return foo(t)]])], + [ac_cv_c_restrict=$ac_kw]) + test "$ac_cv_c_restrict" != no && break + done + ]) + AH_VERBATIM([restrict], +[/* Define to the equivalent of the C99 'restrict' keyword, or to + nothing if this is not supported. Do not define if restrict is + supported directly. */ +#undef restrict +/* Work around a bug in Sun C++: it does not support _Restrict, even + though the corresponding Sun C compiler does, which causes + "#define restrict _Restrict" in the previous line. Perhaps some future + version of Sun C++ will work with _Restrict; if so, it'll probably + define __RESTRICT, just as Sun C does. */ +#if defined __SUNPRO_CC && !defined __RESTRICT +# define _Restrict +#endif]) + case $ac_cv_c_restrict in + restrict) ;; + no) AC_DEFINE([restrict], []) ;; + *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; + esac +]) + +# gl_BIGENDIAN +# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. +# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some +# macros invoke AC_C_BIGENDIAN with arguments. +AC_DEFUN([gl_BIGENDIAN], +[ + AC_C_BIGENDIAN +]) + +# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) +# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not +# output a spurious "(cached)" mark in the midst of other configure output. +# This macro should be used instead of AC_CACHE_VAL when it is not surrounded +# by an AC_MSG_CHECKING/AC_MSG_RESULT pair. +AC_DEFUN([gl_CACHE_VAL_SILENT], +[ + saved_as_echo_n="$as_echo_n" + as_echo_n=':' + AC_CACHE_VAL([$1], [$2]) + as_echo_n="$saved_as_echo_n" +]) diff --git a/gnulib-m4/gnulib-comp.m4 b/gnulib-m4/gnulib-comp.m4 new file mode 100644 index 00000000..efa88e95 --- /dev/null +++ b/gnulib-m4/gnulib-comp.m4 @@ -0,0 +1,1602 @@ +# DO NOT EDIT! GENERATED AUTOMATICALLY! +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. +# +# This file represents the compiled summary of the specification in +# gnulib-cache.m4. It lists the computed macro invocations that need +# to be invoked from configure.ac. +# In projects using CVS, this file can be treated like other built files. + + +# This macro should be invoked from ./configure.ac, in the section +# "Checks for programs", right after AC_PROG_CC, and certainly before +# any checks for libraries, header files, types and library functions. +AC_DEFUN([gl_EARLY], +[ + m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace + m4_pattern_allow([^gl_ES$])dnl a valid locale name + m4_pattern_allow([^gl_LIBOBJS$])dnl a variable + m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable + AC_REQUIRE([AC_PROG_RANLIB]) + AC_REQUIRE([AM_PROG_CC_C_O]) + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + AC_REQUIRE([gl_FP_IEEE]) +]) + +# This macro should be invoked from ./configure.ac, in the section +# "Check for header files, types and library functions". +AC_DEFUN([gl_INIT], +[ + AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) + gl_cond_libtool=true + m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) + m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) + m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) + m4_pushdef([gl_LIBSOURCES_LIST], []) + m4_pushdef([gl_LIBSOURCES_DIR], []) + gl_COMMON + gl_source_base='lib' + gl_FUNC_ALLOCA + gl_HEADER_ERRNO_H + gl_FLOAT_H + gl_FUNC_FREXPL_NO_LIBM + gl_MATH_MODULE_INDICATOR([frexpl]) + gl_FUNC_GETPAGESIZE + gl_UNISTD_MODULE_INDICATOR([getpagesize]) + AM_ICONV + gl_ICONV_H + gl_FUNC_ICONV_OPEN + gl_INLINE + gl_FUNC_ISNAND_NO_LIBM + gl_FUNC_ISNANF_NO_LIBM + gl_FUNC_ISNANL_NO_LIBM + gl_LOCALCHARSET + LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(top_builddir)/$gl_source_base\"" + AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) + gl_LOCALENAME + gl_FUNC_MALLOC_POSIX + gl_STDLIB_MODULE_INDICATOR([malloc-posix]) + gl_MALLOCA + gl_MATH_H + gl_MBCHAR + gl_MBITER + gl_FUNC_MBRTOWC + gl_WCHAR_MODULE_INDICATOR([mbrtowc]) + gl_FUNC_MBSINIT + gl_WCHAR_MODULE_INDICATOR([mbsinit]) + gl_STRING_MODULE_INDICATOR([mbsnlen]) + gl_FUNC_MEMCHR + gl_STRING_MODULE_INDICATOR([memchr]) + gl_MINMAX + gl_MULTIARCH + gl_FUNC_PRINTF_FREXP + gl_FUNC_PRINTF_FREXPL + m4_divert_text([INIT_PREPARE], [gl_printf_safe=yes]) + gl_RELOCATABLE_LIBRARY + gl_SIGNBIT + gl_MATH_MODULE_INDICATOR([signbit]) + gl_SIZE_MAX + AM_STDBOOL_H + gl_STDINT_H + gl_STDLIB_H + if test $gl_cond_libtool = false; then + gl_ltlibdeps="$gl_ltlibdeps $LTLIBICONV" + gl_libdeps="$gl_libdeps $LIBICONV" + fi + gl_HEADER_STRING_H + AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([AC_C_INLINE]) + AC_REQUIRE([AC_C_INLINE]) + gl_MODULE_INDICATOR([uninorm/u16-normalize]) + gl_MODULE_INDICATOR([uninorm/u32-normalize]) + gl_MODULE_INDICATOR([uninorm/u8-normalize]) + gl_UNISTD_H + gl_PREREQ_PRINTF_ARGS + gl_PREREQ_PRINTF_PARSE + gl_PREREQ_VASNPRINTF_WITH_EXTRAS + gl_PREREQ_VASNPRINTF_WITH_EXTRAS + gl_PREREQ_PRINTF_PARSE + gl_PREREQ_VASNPRINTF_WITH_EXTRAS + gl_PREREQ_VASNPRINTF_WITH_EXTRAS + gl_PREREQ_PRINTF_PARSE + gl_PREREQ_VASNPRINTF_WITH_EXTRAS + gl_PREREQ_VASNPRINTF_WITH_EXTRAS + gl_PREREQ_PRINTF_PARSE + gl_PREREQ_VASNPRINTF_WITH_EXTRAS + gl_MODULE_INDICATOR([unistr/u16-mbtouc]) + gl_MODULE_INDICATOR([unistr/u16-mbtouc-unsafe]) + gl_MODULE_INDICATOR([unistr/u16-mbtoucr]) + gl_MODULE_INDICATOR([unistr/u16-uctomb]) + gl_MODULE_INDICATOR([unistr/u32-mbtouc]) + gl_MODULE_INDICATOR([unistr/u32-mbtouc-unsafe]) + gl_MODULE_INDICATOR([unistr/u32-mbtoucr]) + gl_MODULE_INDICATOR([unistr/u32-uctomb]) + gl_MODULE_INDICATOR([unistr/u8-mbtouc]) + gl_MODULE_INDICATOR([unistr/u8-mbtouc-unsafe]) + gl_MODULE_INDICATOR([unistr/u8-mbtoucr]) + AC_CHECK_FUNCS_ONCE([stpcpy]) + AC_CHECK_FUNCS_ONCE([strdup]) + gl_MODULE_INDICATOR([unistr/u8-uctomb]) + gl_WCHAR_H + gl_WCTYPE_H + gl_FUNC_WCWIDTH + gl_WCHAR_MODULE_INDICATOR([wcwidth]) + gl_XSIZE + m4_ifval(gl_LIBSOURCES_LIST, [ + m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || + for gl_file in ]gl_LIBSOURCES_LIST[ ; do + if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then + echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 + exit 1 + fi + done])dnl + m4_if(m4_sysval, [0], [], + [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) + ]) + m4_popdef([gl_LIBSOURCES_DIR]) + m4_popdef([gl_LIBSOURCES_LIST]) + m4_popdef([AC_LIBSOURCES]) + m4_popdef([AC_REPLACE_FUNCS]) + m4_popdef([AC_LIBOBJ]) + AC_CONFIG_COMMANDS_PRE([ + gl_libobjs= + gl_ltlibobjs= + if test -n "$gl_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do + gl_libobjs="$gl_libobjs $i.$ac_objext" + gl_ltlibobjs="$gl_ltlibobjs $i.lo" + done + fi + AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) + AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) + ]) + gltests_libdeps= + gltests_ltlibdeps= + m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) + m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) + m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) + m4_pushdef([gltests_LIBSOURCES_LIST], []) + m4_pushdef([gltests_LIBSOURCES_DIR], []) + gl_COMMON + gl_source_base='tests' + gt_LOCALE_FR + gt_LOCALE_TR_UTF8 + gl_ENVIRON + gl_UNISTD_MODULE_INDICATOR([environ]) + gl_ERROR + m4_ifdef([AM_XGETTEXT_OPTION], + [AM_XGETTEXT_OPTION([--flag=error:3:c-format]) + AM_XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) + gl_EXITFAIL + AC_SUBST([LIBINTL]) + AC_SUBST([LTLIBINTL]) + gl_DOUBLE_EXPONENT_LOCATION + gl_FLOAT_EXPONENT_LOCATION + gl_LONG_DOUBLE_EXPONENT_LOCATION + gl_LOCALE_H + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_JA + gt_LOCALE_ZH_CN + gt_LOCALE_FR_UTF8 + gl_FUNC_SETENV + gl_STDLIB_MODULE_INDICATOR([setenv]) + AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) + AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) + AC_REQUIRE([gl_LONG_DOUBLE_EXPONENT_LOCATION]) + gt_TYPE_WCHAR_T + gt_TYPE_WINT_T + gl_FUNC_STRERROR + gl_STRING_MODULE_INDICATOR([strerror]) + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_JA + gt_LOCALE_TR_UTF8 + gt_LOCALE_ZH_CN + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + AC_CHECK_DECLS_ONCE([alarm]) + AC_CHECK_DECLS_ONCE([alarm]) + AC_CHECK_DECLS_ONCE([alarm]) + AC_CHECK_DECLS_ONCE([alarm]) + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_FR + gt_LOCALE_FR_UTF8 + gt_LOCALE_FR + gl_FUNC_UNSETENV + gl_STDLIB_MODULE_INDICATOR([unsetenv]) + gl_FUNC_WCTOB + gl_WCHAR_MODULE_INDICATOR([wctob]) + gl_XALLOC + m4_ifval(gltests_LIBSOURCES_LIST, [ + m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || + for gl_file in ]gltests_LIBSOURCES_LIST[ ; do + if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then + echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 + exit 1 + fi + done])dnl + m4_if(m4_sysval, [0], [], + [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) + ]) + m4_popdef([gltests_LIBSOURCES_DIR]) + m4_popdef([gltests_LIBSOURCES_LIST]) + m4_popdef([AC_LIBSOURCES]) + m4_popdef([AC_REPLACE_FUNCS]) + m4_popdef([AC_LIBOBJ]) + AC_CONFIG_COMMANDS_PRE([ + gltests_libobjs= + gltests_ltlibobjs= + if test -n "$gltests_LIBOBJS"; then + # Remove the extension. + sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed "$sed_drop_objext" | sort | uniq`; do + gltests_libobjs="$gltests_libobjs $i.$ac_objext" + gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" + done + fi + AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) + AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) + ]) + LIBTESTS_LIBDEPS="$gltests_libdeps" + AC_SUBST([LIBTESTS_LIBDEPS]) +]) + +# Like AC_LIBOBJ, except that the module name goes +# into gl_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gl_LIBOBJ], [ + AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl + gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" +]) + +# Like AC_REPLACE_FUNCS, except that the module name goes +# into gl_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gl_REPLACE_FUNCS], [ + m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl + AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) +]) + +# Like AC_LIBSOURCES, except the directory where the source file is +# expected is derived from the gnulib-tool parameterization, +# and alloca is special cased (for the alloca-opt module). +# We could also entirely rely on EXTRA_lib..._SOURCES. +AC_DEFUN([gl_LIBSOURCES], [ + m4_foreach([_gl_NAME], [$1], [ + m4_if(_gl_NAME, [alloca.c], [], [ + m4_define([gl_LIBSOURCES_DIR], [lib]) + m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) + ]) + ]) +]) + +# Like AC_LIBOBJ, except that the module name goes +# into gltests_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gltests_LIBOBJ], [ + AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl + gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" +]) + +# Like AC_REPLACE_FUNCS, except that the module name goes +# into gltests_LIBOBJS instead of into LIBOBJS. +AC_DEFUN([gltests_REPLACE_FUNCS], [ + m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl + AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) +]) + +# Like AC_LIBSOURCES, except the directory where the source file is +# expected is derived from the gnulib-tool parameterization, +# and alloca is special cased (for the alloca-opt module). +# We could also entirely rely on EXTRA_lib..._SOURCES. +AC_DEFUN([gltests_LIBSOURCES], [ + m4_foreach([_gl_NAME], [$1], [ + m4_if(_gl_NAME, [alloca.c], [], [ + m4_define([gltests_LIBSOURCES_DIR], [tests]) + m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) + ]) + ]) +]) + +# This macro records the list of files which have been installed by +# gnulib-tool and may be removed by future gnulib-tool invocations. +AC_DEFUN([gl_FILE_LIST], [ + build-aux/config.rpath + build-aux/link-warning.h + doc/relocatable.texi + lib/alloca.in.h + lib/array-mergesort.h + lib/c-ctype.c + lib/c-ctype.h + lib/c-strcase.h + lib/c-strcasecmp.c + lib/c-strcaseeq.h + lib/c-strncasecmp.c + lib/config.charset + lib/errno.in.h + lib/float+.h + lib/float.in.h + lib/fpucw.h + lib/frexp.c + lib/frexpl.c + lib/fseterr.c + lib/fseterr.h + lib/getpagesize.c + lib/iconv.in.h + lib/iconv_open-aix.gperf + lib/iconv_open-hpux.gperf + lib/iconv_open-irix.gperf + lib/iconv_open-osf.gperf + lib/iconv_open.c + lib/iconveh.h + lib/isnan.c + lib/isnand-nolibm.h + lib/isnand.c + lib/isnanf-nolibm.h + lib/isnanf.c + lib/isnanl-nolibm.h + lib/isnanl.c + lib/localcharset.c + lib/localcharset.h + lib/localename.c + lib/localename.h + lib/malloc.c + lib/malloca.c + lib/malloca.h + lib/malloca.valgrind + lib/math.in.h + lib/mbchar.c + lib/mbchar.h + lib/mbiter.h + lib/mbrtowc.c + lib/mbsinit.c + lib/mbsnlen.c + lib/memchr.c + lib/memchr.valgrind + lib/memcmp2.c + lib/memcmp2.h + lib/memxfrm.c + lib/memxfrm.h + lib/minmax.h + lib/printf-args.c + lib/printf-args.h + lib/printf-frexp.c + lib/printf-frexp.h + lib/printf-frexpl.c + lib/printf-frexpl.h + lib/printf-parse.c + lib/printf-parse.h + lib/ref-add.sin + lib/ref-del.sin + lib/relocatable.c + lib/relocatable.h + lib/signbitd.c + lib/signbitf.c + lib/signbitl.c + lib/size_max.h + lib/stdbool.in.h + lib/stdint.in.h + lib/stdio-impl.h + lib/stdlib.in.h + lib/streq.h + lib/striconveh.c + lib/striconveh.h + lib/striconveha.c + lib/striconveha.h + lib/string.in.h + lib/unicase.h + lib/unicase/cased.c + lib/unicase/cased.h + lib/unicase/casefold.h + lib/unicase/caseprop.h + lib/unicase/context.h + lib/unicase/empty-prefix-context.c + lib/unicase/empty-suffix-context.c + lib/unicase/ignorable.c + lib/unicase/ignorable.h + lib/unicase/invariant.h + lib/unicase/locale-language.c + lib/unicase/locale-languages.gperf + lib/unicase/simple-mapping.h + lib/unicase/special-casing-table.gperf + lib/unicase/special-casing.c + lib/unicase/special-casing.h + lib/unicase/tocasefold.c + lib/unicase/tocasefold.h + lib/unicase/tolower.c + lib/unicase/tolower.h + lib/unicase/totitle.c + lib/unicase/totitle.h + lib/unicase/toupper.c + lib/unicase/toupper.h + lib/unicase/u-casecmp.h + lib/unicase/u-casecoll.h + lib/unicase/u-casefold.h + lib/unicase/u-casemap.h + lib/unicase/u-casexfrm.h + lib/unicase/u-ct-casefold.h + lib/unicase/u-ct-totitle.h + lib/unicase/u-is-cased.h + lib/unicase/u-is-invariant.h + lib/unicase/u-totitle.h + lib/unicase/u16-casecmp.c + lib/unicase/u16-casecoll.c + lib/unicase/u16-casefold.c + lib/unicase/u16-casemap.c + lib/unicase/u16-casexfrm.c + lib/unicase/u16-ct-casefold.c + lib/unicase/u16-ct-tolower.c + lib/unicase/u16-ct-totitle.c + lib/unicase/u16-ct-toupper.c + lib/unicase/u16-is-cased.c + lib/unicase/u16-is-casefolded.c + lib/unicase/u16-is-invariant.c + lib/unicase/u16-is-lowercase.c + lib/unicase/u16-is-titlecase.c + lib/unicase/u16-is-uppercase.c + lib/unicase/u16-tolower.c + lib/unicase/u16-totitle.c + lib/unicase/u16-toupper.c + lib/unicase/u32-casecmp.c + lib/unicase/u32-casecoll.c + lib/unicase/u32-casefold.c + lib/unicase/u32-casemap.c + lib/unicase/u32-casexfrm.c + lib/unicase/u32-ct-casefold.c + lib/unicase/u32-ct-tolower.c + lib/unicase/u32-ct-totitle.c + lib/unicase/u32-ct-toupper.c + lib/unicase/u32-is-cased.c + lib/unicase/u32-is-casefolded.c + lib/unicase/u32-is-invariant.c + lib/unicase/u32-is-lowercase.c + lib/unicase/u32-is-titlecase.c + lib/unicase/u32-is-uppercase.c + lib/unicase/u32-tolower.c + lib/unicase/u32-totitle.c + lib/unicase/u32-toupper.c + lib/unicase/u8-casecmp.c + lib/unicase/u8-casecoll.c + lib/unicase/u8-casefold.c + lib/unicase/u8-casemap.c + lib/unicase/u8-casexfrm.c + lib/unicase/u8-ct-casefold.c + lib/unicase/u8-ct-tolower.c + lib/unicase/u8-ct-totitle.c + lib/unicase/u8-ct-toupper.c + lib/unicase/u8-is-cased.c + lib/unicase/u8-is-casefolded.c + lib/unicase/u8-is-invariant.c + lib/unicase/u8-is-lowercase.c + lib/unicase/u8-is-titlecase.c + lib/unicase/u8-is-uppercase.c + lib/unicase/u8-tolower.c + lib/unicase/u8-totitle.c + lib/unicase/u8-toupper.c + lib/unicase/ulc-casecmp.c + lib/unicase/ulc-casecoll.c + lib/unicase/ulc-casexfrm.c + lib/unicase/unicasemap.h + lib/uniconv.h + lib/uniconv/u-conv-from-enc.h + lib/uniconv/u-conv-to-enc.h + lib/uniconv/u-strconv-from-enc.h + lib/uniconv/u-strconv-to-enc.h + lib/uniconv/u16-conv-from-enc.c + lib/uniconv/u16-conv-to-enc.c + lib/uniconv/u16-strconv-from-enc.c + lib/uniconv/u16-strconv-from-locale.c + lib/uniconv/u16-strconv-to-enc.c + lib/uniconv/u16-strconv-to-locale.c + lib/uniconv/u32-conv-from-enc.c + lib/uniconv/u32-conv-to-enc.c + lib/uniconv/u32-strconv-from-enc.c + lib/uniconv/u32-strconv-from-locale.c + lib/uniconv/u32-strconv-to-enc.c + lib/uniconv/u32-strconv-to-locale.c + lib/uniconv/u8-conv-from-enc.c + lib/uniconv/u8-conv-to-enc.c + lib/uniconv/u8-strconv-from-enc.c + lib/uniconv/u8-strconv-from-locale.c + lib/uniconv/u8-strconv-to-enc.c + lib/uniconv/u8-strconv-to-locale.c + lib/unictype.h + lib/unictype/bidi_byname.c + lib/unictype/bidi_name.c + lib/unictype/bidi_of.c + lib/unictype/bidi_of.h + lib/unictype/bidi_test.c + lib/unictype/bitmap.h + lib/unictype/block_test.c + lib/unictype/blocks.c + lib/unictype/blocks.h + lib/unictype/categ_C.c + lib/unictype/categ_C.h + lib/unictype/categ_Cc.c + lib/unictype/categ_Cc.h + lib/unictype/categ_Cf.c + lib/unictype/categ_Cf.h + lib/unictype/categ_Cn.c + lib/unictype/categ_Cn.h + lib/unictype/categ_Co.c + lib/unictype/categ_Co.h + lib/unictype/categ_Cs.c + lib/unictype/categ_Cs.h + lib/unictype/categ_L.c + lib/unictype/categ_L.h + lib/unictype/categ_Ll.c + lib/unictype/categ_Ll.h + lib/unictype/categ_Lm.c + lib/unictype/categ_Lm.h + lib/unictype/categ_Lo.c + lib/unictype/categ_Lo.h + lib/unictype/categ_Lt.c + lib/unictype/categ_Lt.h + lib/unictype/categ_Lu.c + lib/unictype/categ_Lu.h + lib/unictype/categ_M.c + lib/unictype/categ_M.h + lib/unictype/categ_Mc.c + lib/unictype/categ_Mc.h + lib/unictype/categ_Me.c + lib/unictype/categ_Me.h + lib/unictype/categ_Mn.c + lib/unictype/categ_Mn.h + lib/unictype/categ_N.c + lib/unictype/categ_N.h + lib/unictype/categ_Nd.c + lib/unictype/categ_Nd.h + lib/unictype/categ_Nl.c + lib/unictype/categ_Nl.h + lib/unictype/categ_No.c + lib/unictype/categ_No.h + lib/unictype/categ_P.c + lib/unictype/categ_P.h + lib/unictype/categ_Pc.c + lib/unictype/categ_Pc.h + lib/unictype/categ_Pd.c + lib/unictype/categ_Pd.h + lib/unictype/categ_Pe.c + lib/unictype/categ_Pe.h + lib/unictype/categ_Pf.c + lib/unictype/categ_Pf.h + lib/unictype/categ_Pi.c + lib/unictype/categ_Pi.h + lib/unictype/categ_Po.c + lib/unictype/categ_Po.h + lib/unictype/categ_Ps.c + lib/unictype/categ_Ps.h + lib/unictype/categ_S.c + lib/unictype/categ_S.h + lib/unictype/categ_Sc.c + lib/unictype/categ_Sc.h + lib/unictype/categ_Sk.c + lib/unictype/categ_Sk.h + lib/unictype/categ_Sm.c + lib/unictype/categ_Sm.h + lib/unictype/categ_So.c + lib/unictype/categ_So.h + lib/unictype/categ_Z.c + lib/unictype/categ_Z.h + lib/unictype/categ_Zl.c + lib/unictype/categ_Zl.h + lib/unictype/categ_Zp.c + lib/unictype/categ_Zp.h + lib/unictype/categ_Zs.c + lib/unictype/categ_Zs.h + lib/unictype/categ_and.c + lib/unictype/categ_and_not.c + lib/unictype/categ_byname.c + lib/unictype/categ_name.c + lib/unictype/categ_none.c + lib/unictype/categ_of.c + lib/unictype/categ_of.h + lib/unictype/categ_or.c + lib/unictype/categ_test.c + lib/unictype/combining.c + lib/unictype/combining.h + lib/unictype/ctype_alnum.c + lib/unictype/ctype_alnum.h + lib/unictype/ctype_alpha.c + lib/unictype/ctype_alpha.h + lib/unictype/ctype_blank.c + lib/unictype/ctype_blank.h + lib/unictype/ctype_cntrl.c + lib/unictype/ctype_cntrl.h + lib/unictype/ctype_digit.c + lib/unictype/ctype_digit.h + lib/unictype/ctype_graph.c + lib/unictype/ctype_graph.h + lib/unictype/ctype_lower.c + lib/unictype/ctype_lower.h + lib/unictype/ctype_print.c + lib/unictype/ctype_print.h + lib/unictype/ctype_punct.c + lib/unictype/ctype_punct.h + lib/unictype/ctype_space.c + lib/unictype/ctype_space.h + lib/unictype/ctype_upper.c + lib/unictype/ctype_upper.h + lib/unictype/ctype_xdigit.c + lib/unictype/ctype_xdigit.h + lib/unictype/decdigit.c + lib/unictype/decdigit.h + lib/unictype/digit.c + lib/unictype/digit.h + lib/unictype/identsyntaxmap.h + lib/unictype/mirror.c + lib/unictype/mirror.h + lib/unictype/numeric.c + lib/unictype/numeric.h + lib/unictype/pr_alphabetic.c + lib/unictype/pr_alphabetic.h + lib/unictype/pr_ascii_hex_digit.c + lib/unictype/pr_ascii_hex_digit.h + lib/unictype/pr_bidi_arabic_digit.c + lib/unictype/pr_bidi_arabic_digit.h + lib/unictype/pr_bidi_arabic_right_to_left.c + lib/unictype/pr_bidi_arabic_right_to_left.h + lib/unictype/pr_bidi_block_separator.c + lib/unictype/pr_bidi_block_separator.h + lib/unictype/pr_bidi_boundary_neutral.c + lib/unictype/pr_bidi_boundary_neutral.h + lib/unictype/pr_bidi_common_separator.c + lib/unictype/pr_bidi_common_separator.h + lib/unictype/pr_bidi_control.c + lib/unictype/pr_bidi_control.h + lib/unictype/pr_bidi_embedding_or_override.c + lib/unictype/pr_bidi_embedding_or_override.h + lib/unictype/pr_bidi_eur_num_separator.c + lib/unictype/pr_bidi_eur_num_separator.h + lib/unictype/pr_bidi_eur_num_terminator.c + lib/unictype/pr_bidi_eur_num_terminator.h + lib/unictype/pr_bidi_european_digit.c + lib/unictype/pr_bidi_european_digit.h + lib/unictype/pr_bidi_hebrew_right_to_left.c + lib/unictype/pr_bidi_hebrew_right_to_left.h + lib/unictype/pr_bidi_left_to_right.c + lib/unictype/pr_bidi_left_to_right.h + lib/unictype/pr_bidi_non_spacing_mark.c + lib/unictype/pr_bidi_non_spacing_mark.h + lib/unictype/pr_bidi_other_neutral.c + lib/unictype/pr_bidi_other_neutral.h + lib/unictype/pr_bidi_pdf.c + lib/unictype/pr_bidi_pdf.h + lib/unictype/pr_bidi_segment_separator.c + lib/unictype/pr_bidi_segment_separator.h + lib/unictype/pr_bidi_whitespace.c + lib/unictype/pr_bidi_whitespace.h + lib/unictype/pr_byname.c + lib/unictype/pr_byname.gperf + lib/unictype/pr_combining.c + lib/unictype/pr_combining.h + lib/unictype/pr_composite.c + lib/unictype/pr_composite.h + lib/unictype/pr_currency_symbol.c + lib/unictype/pr_currency_symbol.h + lib/unictype/pr_dash.c + lib/unictype/pr_dash.h + lib/unictype/pr_decimal_digit.c + lib/unictype/pr_decimal_digit.h + lib/unictype/pr_default_ignorable_code_point.c + lib/unictype/pr_default_ignorable_code_point.h + lib/unictype/pr_deprecated.c + lib/unictype/pr_deprecated.h + lib/unictype/pr_diacritic.c + lib/unictype/pr_diacritic.h + lib/unictype/pr_extender.c + lib/unictype/pr_extender.h + lib/unictype/pr_format_control.c + lib/unictype/pr_format_control.h + lib/unictype/pr_grapheme_base.c + lib/unictype/pr_grapheme_base.h + lib/unictype/pr_grapheme_extend.c + lib/unictype/pr_grapheme_extend.h + lib/unictype/pr_grapheme_link.c + lib/unictype/pr_grapheme_link.h + lib/unictype/pr_hex_digit.c + lib/unictype/pr_hex_digit.h + lib/unictype/pr_hyphen.c + lib/unictype/pr_hyphen.h + lib/unictype/pr_id_continue.c + lib/unictype/pr_id_continue.h + lib/unictype/pr_id_start.c + lib/unictype/pr_id_start.h + lib/unictype/pr_ideographic.c + lib/unictype/pr_ideographic.h + lib/unictype/pr_ids_binary_operator.c + lib/unictype/pr_ids_binary_operator.h + lib/unictype/pr_ids_trinary_operator.c + lib/unictype/pr_ids_trinary_operator.h + lib/unictype/pr_ignorable_control.c + lib/unictype/pr_ignorable_control.h + lib/unictype/pr_iso_control.c + lib/unictype/pr_iso_control.h + lib/unictype/pr_join_control.c + lib/unictype/pr_join_control.h + lib/unictype/pr_left_of_pair.c + lib/unictype/pr_left_of_pair.h + lib/unictype/pr_line_separator.c + lib/unictype/pr_line_separator.h + lib/unictype/pr_logical_order_exception.c + lib/unictype/pr_logical_order_exception.h + lib/unictype/pr_lowercase.c + lib/unictype/pr_lowercase.h + lib/unictype/pr_math.c + lib/unictype/pr_math.h + lib/unictype/pr_non_break.c + lib/unictype/pr_non_break.h + lib/unictype/pr_not_a_character.c + lib/unictype/pr_not_a_character.h + lib/unictype/pr_numeric.c + lib/unictype/pr_numeric.h + lib/unictype/pr_other_alphabetic.c + lib/unictype/pr_other_alphabetic.h + lib/unictype/pr_other_default_ignorable_code_point.c + lib/unictype/pr_other_default_ignorable_code_point.h + lib/unictype/pr_other_grapheme_extend.c + lib/unictype/pr_other_grapheme_extend.h + lib/unictype/pr_other_id_continue.c + lib/unictype/pr_other_id_continue.h + lib/unictype/pr_other_id_start.c + lib/unictype/pr_other_id_start.h + lib/unictype/pr_other_lowercase.c + lib/unictype/pr_other_lowercase.h + lib/unictype/pr_other_math.c + lib/unictype/pr_other_math.h + lib/unictype/pr_other_uppercase.c + lib/unictype/pr_other_uppercase.h + lib/unictype/pr_paired_punctuation.c + lib/unictype/pr_paired_punctuation.h + lib/unictype/pr_paragraph_separator.c + lib/unictype/pr_paragraph_separator.h + lib/unictype/pr_pattern_syntax.c + lib/unictype/pr_pattern_syntax.h + lib/unictype/pr_pattern_white_space.c + lib/unictype/pr_pattern_white_space.h + lib/unictype/pr_private_use.c + lib/unictype/pr_private_use.h + lib/unictype/pr_punctuation.c + lib/unictype/pr_punctuation.h + lib/unictype/pr_quotation_mark.c + lib/unictype/pr_quotation_mark.h + lib/unictype/pr_radical.c + lib/unictype/pr_radical.h + lib/unictype/pr_sentence_terminal.c + lib/unictype/pr_sentence_terminal.h + lib/unictype/pr_soft_dotted.c + lib/unictype/pr_soft_dotted.h + lib/unictype/pr_space.c + lib/unictype/pr_space.h + lib/unictype/pr_terminal_punctuation.c + lib/unictype/pr_terminal_punctuation.h + lib/unictype/pr_test.c + lib/unictype/pr_titlecase.c + lib/unictype/pr_titlecase.h + lib/unictype/pr_unassigned_code_value.c + lib/unictype/pr_unassigned_code_value.h + lib/unictype/pr_unified_ideograph.c + lib/unictype/pr_unified_ideograph.h + lib/unictype/pr_uppercase.c + lib/unictype/pr_uppercase.h + lib/unictype/pr_variation_selector.c + lib/unictype/pr_variation_selector.h + lib/unictype/pr_white_space.c + lib/unictype/pr_white_space.h + lib/unictype/pr_xid_continue.c + lib/unictype/pr_xid_continue.h + lib/unictype/pr_xid_start.c + lib/unictype/pr_xid_start.h + lib/unictype/pr_zero_width.c + lib/unictype/pr_zero_width.h + lib/unictype/scripts.c + lib/unictype/scripts.h + lib/unictype/scripts_byname.gperf + lib/unictype/sy_c_ident.c + lib/unictype/sy_c_ident.h + lib/unictype/sy_c_whitespace.c + lib/unictype/sy_java_ident.c + lib/unictype/sy_java_ident.h + lib/unictype/sy_java_whitespace.c + lib/unilbrk.h + lib/unilbrk/lbrkprop1.h + lib/unilbrk/lbrkprop2.h + lib/unilbrk/lbrktables.c + lib/unilbrk/lbrktables.h + lib/unilbrk/u16-possible-linebreaks.c + lib/unilbrk/u16-width-linebreaks.c + lib/unilbrk/u32-possible-linebreaks.c + lib/unilbrk/u32-width-linebreaks.c + lib/unilbrk/u8-possible-linebreaks.c + lib/unilbrk/u8-width-linebreaks.c + lib/unilbrk/ulc-common.c + lib/unilbrk/ulc-common.h + lib/unilbrk/ulc-possible-linebreaks.c + lib/unilbrk/ulc-width-linebreaks.c + lib/uniname.h + lib/uniname/gen-uninames.lisp + lib/uniname/uniname.c + lib/uniname/uninames.h + lib/uninorm.h + lib/uninorm/canonical-decomposition.c + lib/uninorm/compat-decomposition.c + lib/uninorm/composition-table.gperf + lib/uninorm/composition.c + lib/uninorm/decompose-internal.c + lib/uninorm/decompose-internal.h + lib/uninorm/decomposing-form.c + lib/uninorm/decomposition-table.c + lib/uninorm/decomposition-table.h + lib/uninorm/decomposition-table1.h + lib/uninorm/decomposition-table2.h + lib/uninorm/decomposition.c + lib/uninorm/nfc.c + lib/uninorm/nfd.c + lib/uninorm/nfkc.c + lib/uninorm/nfkd.c + lib/uninorm/normalize-internal.h + lib/uninorm/u-normalize-internal.h + lib/uninorm/u-normcmp.h + lib/uninorm/u-normcoll.h + lib/uninorm/u-normxfrm.h + lib/uninorm/u16-normalize.c + lib/uninorm/u16-normcmp.c + lib/uninorm/u16-normcoll.c + lib/uninorm/u16-normxfrm.c + lib/uninorm/u32-normalize.c + lib/uninorm/u32-normcmp.c + lib/uninorm/u32-normcoll.c + lib/uninorm/u32-normxfrm.c + lib/uninorm/u8-normalize.c + lib/uninorm/u8-normcmp.c + lib/uninorm/u8-normcoll.c + lib/uninorm/u8-normxfrm.c + lib/uninorm/uninorm-filter.c + lib/unistd.in.h + lib/unistdio.h + lib/unistdio/u-asnprintf.h + lib/unistdio/u-asprintf.h + lib/unistdio/u-printf-args.c + lib/unistdio/u-printf-args.h + lib/unistdio/u-printf-parse.h + lib/unistdio/u-snprintf.h + lib/unistdio/u-sprintf.h + lib/unistdio/u-vasprintf.h + lib/unistdio/u-vsnprintf.h + lib/unistdio/u-vsprintf.h + lib/unistdio/u16-asnprintf.c + lib/unistdio/u16-asprintf.c + lib/unistdio/u16-printf-parse.c + lib/unistdio/u16-snprintf.c + lib/unistdio/u16-sprintf.c + lib/unistdio/u16-u16-asnprintf.c + lib/unistdio/u16-u16-asprintf.c + lib/unistdio/u16-u16-snprintf.c + lib/unistdio/u16-u16-sprintf.c + lib/unistdio/u16-u16-vasnprintf.c + lib/unistdio/u16-u16-vasprintf.c + lib/unistdio/u16-u16-vsnprintf.c + lib/unistdio/u16-u16-vsprintf.c + lib/unistdio/u16-vasnprintf.c + lib/unistdio/u16-vasprintf.c + lib/unistdio/u16-vsnprintf.c + lib/unistdio/u16-vsprintf.c + lib/unistdio/u32-asnprintf.c + lib/unistdio/u32-asprintf.c + lib/unistdio/u32-printf-parse.c + lib/unistdio/u32-snprintf.c + lib/unistdio/u32-sprintf.c + lib/unistdio/u32-u32-asnprintf.c + lib/unistdio/u32-u32-asprintf.c + lib/unistdio/u32-u32-snprintf.c + lib/unistdio/u32-u32-sprintf.c + lib/unistdio/u32-u32-vasnprintf.c + lib/unistdio/u32-u32-vasprintf.c + lib/unistdio/u32-u32-vsnprintf.c + lib/unistdio/u32-u32-vsprintf.c + lib/unistdio/u32-vasnprintf.c + lib/unistdio/u32-vasprintf.c + lib/unistdio/u32-vsnprintf.c + lib/unistdio/u32-vsprintf.c + lib/unistdio/u8-asnprintf.c + lib/unistdio/u8-asprintf.c + lib/unistdio/u8-printf-parse.c + lib/unistdio/u8-snprintf.c + lib/unistdio/u8-sprintf.c + lib/unistdio/u8-u8-asnprintf.c + lib/unistdio/u8-u8-asprintf.c + lib/unistdio/u8-u8-snprintf.c + lib/unistdio/u8-u8-sprintf.c + lib/unistdio/u8-u8-vasnprintf.c + lib/unistdio/u8-u8-vasprintf.c + lib/unistdio/u8-u8-vsnprintf.c + lib/unistdio/u8-u8-vsprintf.c + lib/unistdio/u8-vasnprintf.c + lib/unistdio/u8-vasprintf.c + lib/unistdio/u8-vsnprintf.c + lib/unistdio/u8-vsprintf.c + lib/unistdio/ulc-asnprintf.c + lib/unistdio/ulc-asprintf.c + lib/unistdio/ulc-fprintf.c + lib/unistdio/ulc-printf-parse.c + lib/unistdio/ulc-snprintf.c + lib/unistdio/ulc-sprintf.c + lib/unistdio/ulc-vasnprintf.c + lib/unistdio/ulc-vasprintf.c + lib/unistdio/ulc-vfprintf.c + lib/unistdio/ulc-vsnprintf.c + lib/unistdio/ulc-vsprintf.c + lib/unistr.h + lib/unistr/u-cmp2.h + lib/unistr/u-cpy-alloc.h + lib/unistr/u-cpy.h + lib/unistr/u-endswith.h + lib/unistr/u-move.h + lib/unistr/u-set.h + lib/unistr/u-startswith.h + lib/unistr/u-stpcpy.h + lib/unistr/u-stpncpy.h + lib/unistr/u-strcat.h + lib/unistr/u-strcoll.h + lib/unistr/u-strcpy.h + lib/unistr/u-strcspn.h + lib/unistr/u-strdup.h + lib/unistr/u-strlen.h + lib/unistr/u-strncat.h + lib/unistr/u-strncpy.h + lib/unistr/u-strnlen.h + lib/unistr/u-strpbrk.h + lib/unistr/u-strspn.h + lib/unistr/u-strstr.h + lib/unistr/u-strtok.h + lib/unistr/u16-check.c + lib/unistr/u16-chr.c + lib/unistr/u16-cmp.c + lib/unistr/u16-cmp2.c + lib/unistr/u16-cpy-alloc.c + lib/unistr/u16-cpy.c + lib/unistr/u16-endswith.c + lib/unistr/u16-mblen.c + lib/unistr/u16-mbsnlen.c + lib/unistr/u16-mbtouc-aux.c + lib/unistr/u16-mbtouc-unsafe-aux.c + lib/unistr/u16-mbtouc-unsafe.c + lib/unistr/u16-mbtouc.c + lib/unistr/u16-mbtoucr.c + lib/unistr/u16-move.c + lib/unistr/u16-next.c + lib/unistr/u16-prev.c + lib/unistr/u16-set.c + lib/unistr/u16-startswith.c + lib/unistr/u16-stpcpy.c + lib/unistr/u16-stpncpy.c + lib/unistr/u16-strcat.c + lib/unistr/u16-strchr.c + lib/unistr/u16-strcmp.c + lib/unistr/u16-strcoll.c + lib/unistr/u16-strcpy.c + lib/unistr/u16-strcspn.c + lib/unistr/u16-strdup.c + lib/unistr/u16-strlen.c + lib/unistr/u16-strmblen.c + lib/unistr/u16-strmbtouc.c + lib/unistr/u16-strncat.c + lib/unistr/u16-strncmp.c + lib/unistr/u16-strncpy.c + lib/unistr/u16-strnlen.c + lib/unistr/u16-strpbrk.c + lib/unistr/u16-strrchr.c + lib/unistr/u16-strspn.c + lib/unistr/u16-strstr.c + lib/unistr/u16-strtok.c + lib/unistr/u16-to-u32.c + lib/unistr/u16-to-u8.c + lib/unistr/u16-uctomb-aux.c + lib/unistr/u16-uctomb.c + lib/unistr/u32-check.c + lib/unistr/u32-chr.c + lib/unistr/u32-cmp.c + lib/unistr/u32-cmp2.c + lib/unistr/u32-cpy-alloc.c + lib/unistr/u32-cpy.c + lib/unistr/u32-endswith.c + lib/unistr/u32-mblen.c + lib/unistr/u32-mbsnlen.c + lib/unistr/u32-mbtouc-unsafe.c + lib/unistr/u32-mbtouc.c + lib/unistr/u32-mbtoucr.c + lib/unistr/u32-move.c + lib/unistr/u32-next.c + lib/unistr/u32-prev.c + lib/unistr/u32-set.c + lib/unistr/u32-startswith.c + lib/unistr/u32-stpcpy.c + lib/unistr/u32-stpncpy.c + lib/unistr/u32-strcat.c + lib/unistr/u32-strchr.c + lib/unistr/u32-strcmp.c + lib/unistr/u32-strcoll.c + lib/unistr/u32-strcpy.c + lib/unistr/u32-strcspn.c + lib/unistr/u32-strdup.c + lib/unistr/u32-strlen.c + lib/unistr/u32-strmblen.c + lib/unistr/u32-strmbtouc.c + lib/unistr/u32-strncat.c + lib/unistr/u32-strncmp.c + lib/unistr/u32-strncpy.c + lib/unistr/u32-strnlen.c + lib/unistr/u32-strpbrk.c + lib/unistr/u32-strrchr.c + lib/unistr/u32-strspn.c + lib/unistr/u32-strstr.c + lib/unistr/u32-strtok.c + lib/unistr/u32-to-u16.c + lib/unistr/u32-to-u8.c + lib/unistr/u32-uctomb.c + lib/unistr/u8-check.c + lib/unistr/u8-chr.c + lib/unistr/u8-cmp.c + lib/unistr/u8-cmp2.c + lib/unistr/u8-cpy-alloc.c + lib/unistr/u8-cpy.c + lib/unistr/u8-endswith.c + lib/unistr/u8-mblen.c + lib/unistr/u8-mbsnlen.c + lib/unistr/u8-mbtouc-aux.c + lib/unistr/u8-mbtouc-unsafe-aux.c + lib/unistr/u8-mbtouc-unsafe.c + lib/unistr/u8-mbtouc.c + lib/unistr/u8-mbtoucr.c + lib/unistr/u8-move.c + lib/unistr/u8-next.c + lib/unistr/u8-prev.c + lib/unistr/u8-set.c + lib/unistr/u8-startswith.c + lib/unistr/u8-stpcpy.c + lib/unistr/u8-stpncpy.c + lib/unistr/u8-strcat.c + lib/unistr/u8-strchr.c + lib/unistr/u8-strcmp.c + lib/unistr/u8-strcoll.c + lib/unistr/u8-strcpy.c + lib/unistr/u8-strcspn.c + lib/unistr/u8-strdup.c + lib/unistr/u8-strlen.c + lib/unistr/u8-strmblen.c + lib/unistr/u8-strmbtouc.c + lib/unistr/u8-strncat.c + lib/unistr/u8-strncmp.c + lib/unistr/u8-strncpy.c + lib/unistr/u8-strnlen.c + lib/unistr/u8-strpbrk.c + lib/unistr/u8-strrchr.c + lib/unistr/u8-strspn.c + lib/unistr/u8-strstr.c + lib/unistr/u8-strtok.c + lib/unistr/u8-to-u16.c + lib/unistr/u8-to-u32.c + lib/unistr/u8-uctomb-aux.c + lib/unistr/u8-uctomb.c + lib/unitypes.h + lib/uniwbrk.h + lib/uniwbrk/u-wordbreaks.h + lib/uniwbrk/u16-wordbreaks.c + lib/uniwbrk/u32-wordbreaks.c + lib/uniwbrk/u8-wordbreaks.c + lib/uniwbrk/ulc-wordbreaks.c + lib/uniwbrk/wbrkprop.h + lib/uniwbrk/wbrktable.c + lib/uniwbrk/wbrktable.h + lib/uniwbrk/wordbreak-property.c + lib/uniwidth.h + lib/uniwidth/cjk.h + lib/uniwidth/u16-strwidth.c + lib/uniwidth/u16-width.c + lib/uniwidth/u32-strwidth.c + lib/uniwidth/u32-width.c + lib/uniwidth/u8-strwidth.c + lib/uniwidth/u8-width.c + lib/uniwidth/width.c + lib/vasnprintf.c + lib/verify.h + lib/wchar.in.h + lib/wctype.in.h + lib/wcwidth.c + lib/xsize.h + m4/00gnulib.m4 + m4/alloca.m4 + m4/codeset.m4 + m4/eealloc.m4 + m4/environ.m4 + m4/errno_h.m4 + m4/error.m4 + m4/exitfail.m4 + m4/exponentd.m4 + m4/exponentf.m4 + m4/exponentl.m4 + m4/extensions.m4 + m4/float_h.m4 + m4/fpieee.m4 + m4/frexp.m4 + m4/frexpl.m4 + m4/getpagesize.m4 + m4/glibc21.m4 + m4/gnulib-common.m4 + m4/iconv.m4 + m4/iconv_h.m4 + m4/iconv_open.m4 + m4/include_next.m4 + m4/inline.m4 + m4/intlmacosx.m4 + m4/intmax_t.m4 + m4/inttypes_h.m4 + m4/isnand.m4 + m4/isnanf.m4 + m4/isnanl.m4 + m4/lcmessage.m4 + m4/ldexpl.m4 + m4/lib-ld.m4 + m4/lib-link.m4 + m4/lib-prefix.m4 + m4/localcharset.m4 + m4/locale-fr.m4 + m4/locale-ja.m4 + m4/locale-tr.m4 + m4/locale-zh.m4 + m4/locale_h.m4 + m4/localename.m4 + m4/longlong.m4 + m4/malloc.m4 + m4/malloca.m4 + m4/math_h.m4 + m4/mbchar.m4 + m4/mbiter.m4 + m4/mbrtowc.m4 + m4/mbsinit.m4 + m4/mbstate_t.m4 + m4/memchr.m4 + m4/minmax.m4 + m4/mmap-anon.m4 + m4/multiarch.m4 + m4/nocrash.m4 + m4/printf-frexp.m4 + m4/printf-frexpl.m4 + m4/printf.m4 + m4/relocatable-lib.m4 + m4/setenv.m4 + m4/signbit.m4 + m4/size_max.m4 + m4/stdbool.m4 + m4/stdint.m4 + m4/stdint_h.m4 + m4/stdlib_h.m4 + m4/strerror.m4 + m4/string_h.m4 + m4/unistd_h.m4 + m4/vasnprintf.m4 + m4/wchar.m4 + m4/wchar_t.m4 + m4/wctob.m4 + m4/wctype.m4 + m4/wcwidth.m4 + m4/wint_t.m4 + m4/xalloc.m4 + m4/xsize.m4 + tests/nan.h + tests/test-alloca-opt.c + tests/test-array-mergesort.c + tests/test-c-ctype.c + tests/test-c-strcase.sh + tests/test-c-strcasecmp.c + tests/test-c-strncasecmp.c + tests/test-environ.c + tests/test-errno.c + tests/test-frexpl.c + tests/test-fseterr.c + tests/test-iconv.c + tests/test-isnand-nolibm.c + tests/test-isnand.h + tests/test-isnanf-nolibm.c + tests/test-isnanf.h + tests/test-isnanl-nolibm.c + tests/test-isnanl.h + tests/test-locale.c + tests/test-localename.c + tests/test-malloca.c + tests/test-math.c + tests/test-mbrtowc.c + tests/test-mbrtowc1.sh + tests/test-mbrtowc2.sh + tests/test-mbrtowc3.sh + tests/test-mbrtowc4.sh + tests/test-mbsinit.c + tests/test-mbsinit.sh + tests/test-memchr.c + tests/test-printf-frexp.c + tests/test-printf-frexpl.c + tests/test-signbit.c + tests/test-stdbool.c + tests/test-stdint.c + tests/test-stdlib.c + tests/test-strerror.c + tests/test-striconveh.c + tests/test-striconveha.c + tests/test-string.c + tests/test-unistd.c + tests/test-wchar.c + tests/test-wctype.c + tests/test-wcwidth.c + tests/unicase/test-casecmp.h + tests/unicase/test-cased.c + tests/unicase/test-ignorable.c + tests/unicase/test-is-cased.h + tests/unicase/test-is-casefolded.h + tests/unicase/test-is-lowercase.h + tests/unicase/test-is-titlecase.h + tests/unicase/test-is-uppercase.h + tests/unicase/test-locale-language.c + tests/unicase/test-locale-language.sh + tests/unicase/test-mapping-part1.h + tests/unicase/test-mapping-part2.h + tests/unicase/test-predicate-part1.h + tests/unicase/test-predicate-part2.h + tests/unicase/test-u16-casecmp.c + tests/unicase/test-u16-casecoll.c + tests/unicase/test-u16-casefold.c + tests/unicase/test-u16-is-cased.c + tests/unicase/test-u16-is-casefolded.c + tests/unicase/test-u16-is-lowercase.c + tests/unicase/test-u16-is-titlecase.c + tests/unicase/test-u16-is-uppercase.c + tests/unicase/test-u16-tolower.c + tests/unicase/test-u16-totitle.c + tests/unicase/test-u16-toupper.c + tests/unicase/test-u32-casecmp.c + tests/unicase/test-u32-casecoll.c + tests/unicase/test-u32-casefold.c + tests/unicase/test-u32-is-cased.c + tests/unicase/test-u32-is-casefolded.c + tests/unicase/test-u32-is-lowercase.c + tests/unicase/test-u32-is-titlecase.c + tests/unicase/test-u32-is-uppercase.c + tests/unicase/test-u32-tolower.c + tests/unicase/test-u32-totitle.c + tests/unicase/test-u32-toupper.c + tests/unicase/test-u8-casecmp.c + tests/unicase/test-u8-casecoll.c + tests/unicase/test-u8-casefold.c + tests/unicase/test-u8-is-cased.c + tests/unicase/test-u8-is-casefolded.c + tests/unicase/test-u8-is-lowercase.c + tests/unicase/test-u8-is-titlecase.c + tests/unicase/test-u8-is-uppercase.c + tests/unicase/test-u8-tolower.c + tests/unicase/test-u8-totitle.c + tests/unicase/test-u8-toupper.c + tests/unicase/test-uc_tolower.c + tests/unicase/test-uc_totitle.c + tests/unicase/test-uc_toupper.c + tests/unicase/test-ulc-casecmp.c + tests/unicase/test-ulc-casecmp1.sh + tests/unicase/test-ulc-casecmp2.sh + tests/unicase/test-ulc-casecoll.c + tests/unicase/test-ulc-casecoll1.sh + tests/unicase/test-ulc-casecoll2.sh + tests/uniconv/test-u16-conv-from-enc.c + tests/uniconv/test-u16-conv-to-enc.c + tests/uniconv/test-u16-strconv-from-enc.c + tests/uniconv/test-u16-strconv-to-enc.c + tests/uniconv/test-u32-conv-from-enc.c + tests/uniconv/test-u32-conv-to-enc.c + tests/uniconv/test-u32-strconv-from-enc.c + tests/uniconv/test-u32-strconv-to-enc.c + tests/uniconv/test-u8-conv-from-enc.c + tests/uniconv/test-u8-conv-to-enc.c + tests/uniconv/test-u8-strconv-from-enc.c + tests/uniconv/test-u8-strconv-to-enc.c + tests/unictype/test-bidi_byname.c + tests/unictype/test-bidi_name.c + tests/unictype/test-bidi_of.c + tests/unictype/test-bidi_test.c + tests/unictype/test-block_list.c + tests/unictype/test-block_of.c + tests/unictype/test-block_test.c + tests/unictype/test-categ_C.c + tests/unictype/test-categ_Cc.c + tests/unictype/test-categ_Cf.c + tests/unictype/test-categ_Cn.c + tests/unictype/test-categ_Co.c + tests/unictype/test-categ_Cs.c + tests/unictype/test-categ_L.c + tests/unictype/test-categ_Ll.c + tests/unictype/test-categ_Lm.c + tests/unictype/test-categ_Lo.c + tests/unictype/test-categ_Lt.c + tests/unictype/test-categ_Lu.c + tests/unictype/test-categ_M.c + tests/unictype/test-categ_Mc.c + tests/unictype/test-categ_Me.c + tests/unictype/test-categ_Mn.c + tests/unictype/test-categ_N.c + tests/unictype/test-categ_Nd.c + tests/unictype/test-categ_Nl.c + tests/unictype/test-categ_No.c + tests/unictype/test-categ_P.c + tests/unictype/test-categ_Pc.c + tests/unictype/test-categ_Pd.c + tests/unictype/test-categ_Pe.c + tests/unictype/test-categ_Pf.c + tests/unictype/test-categ_Pi.c + tests/unictype/test-categ_Po.c + tests/unictype/test-categ_Ps.c + tests/unictype/test-categ_S.c + tests/unictype/test-categ_Sc.c + tests/unictype/test-categ_Sk.c + tests/unictype/test-categ_Sm.c + tests/unictype/test-categ_So.c + tests/unictype/test-categ_Z.c + tests/unictype/test-categ_Zl.c + tests/unictype/test-categ_Zp.c + tests/unictype/test-categ_Zs.c + tests/unictype/test-categ_and.c + tests/unictype/test-categ_and_not.c + tests/unictype/test-categ_byname.c + tests/unictype/test-categ_name.c + tests/unictype/test-categ_none.c + tests/unictype/test-categ_of.c + tests/unictype/test-categ_or.c + tests/unictype/test-categ_test_withtable.c + tests/unictype/test-combining.c + tests/unictype/test-ctype_alnum.c + tests/unictype/test-ctype_alpha.c + tests/unictype/test-ctype_blank.c + tests/unictype/test-ctype_cntrl.c + tests/unictype/test-ctype_digit.c + tests/unictype/test-ctype_graph.c + tests/unictype/test-ctype_lower.c + tests/unictype/test-ctype_print.c + tests/unictype/test-ctype_punct.c + tests/unictype/test-ctype_space.c + tests/unictype/test-ctype_upper.c + tests/unictype/test-ctype_xdigit.c + tests/unictype/test-decdigit.c + tests/unictype/test-decdigit.h + tests/unictype/test-digit.c + tests/unictype/test-digit.h + tests/unictype/test-mirror.c + tests/unictype/test-numeric.c + tests/unictype/test-numeric.h + tests/unictype/test-pr_alphabetic.c + tests/unictype/test-pr_ascii_hex_digit.c + tests/unictype/test-pr_bidi_arabic_digit.c + tests/unictype/test-pr_bidi_arabic_right_to_left.c + tests/unictype/test-pr_bidi_block_separator.c + tests/unictype/test-pr_bidi_boundary_neutral.c + tests/unictype/test-pr_bidi_common_separator.c + tests/unictype/test-pr_bidi_control.c + tests/unictype/test-pr_bidi_embedding_or_override.c + tests/unictype/test-pr_bidi_eur_num_separator.c + tests/unictype/test-pr_bidi_eur_num_terminator.c + tests/unictype/test-pr_bidi_european_digit.c + tests/unictype/test-pr_bidi_hebrew_right_to_left.c + tests/unictype/test-pr_bidi_left_to_right.c + tests/unictype/test-pr_bidi_non_spacing_mark.c + tests/unictype/test-pr_bidi_other_neutral.c + tests/unictype/test-pr_bidi_pdf.c + tests/unictype/test-pr_bidi_segment_separator.c + tests/unictype/test-pr_bidi_whitespace.c + tests/unictype/test-pr_byname.c + tests/unictype/test-pr_combining.c + tests/unictype/test-pr_composite.c + tests/unictype/test-pr_currency_symbol.c + tests/unictype/test-pr_dash.c + tests/unictype/test-pr_decimal_digit.c + tests/unictype/test-pr_default_ignorable_code_point.c + tests/unictype/test-pr_deprecated.c + tests/unictype/test-pr_diacritic.c + tests/unictype/test-pr_extender.c + tests/unictype/test-pr_format_control.c + tests/unictype/test-pr_grapheme_base.c + tests/unictype/test-pr_grapheme_extend.c + tests/unictype/test-pr_grapheme_link.c + tests/unictype/test-pr_hex_digit.c + tests/unictype/test-pr_hyphen.c + tests/unictype/test-pr_id_continue.c + tests/unictype/test-pr_id_start.c + tests/unictype/test-pr_ideographic.c + tests/unictype/test-pr_ids_binary_operator.c + tests/unictype/test-pr_ids_trinary_operator.c + tests/unictype/test-pr_ignorable_control.c + tests/unictype/test-pr_iso_control.c + tests/unictype/test-pr_join_control.c + tests/unictype/test-pr_left_of_pair.c + tests/unictype/test-pr_line_separator.c + tests/unictype/test-pr_logical_order_exception.c + tests/unictype/test-pr_lowercase.c + tests/unictype/test-pr_math.c + tests/unictype/test-pr_non_break.c + tests/unictype/test-pr_not_a_character.c + tests/unictype/test-pr_numeric.c + tests/unictype/test-pr_other_alphabetic.c + tests/unictype/test-pr_other_default_ignorable_code_point.c + tests/unictype/test-pr_other_grapheme_extend.c + tests/unictype/test-pr_other_id_continue.c + tests/unictype/test-pr_other_id_start.c + tests/unictype/test-pr_other_lowercase.c + tests/unictype/test-pr_other_math.c + tests/unictype/test-pr_other_uppercase.c + tests/unictype/test-pr_paired_punctuation.c + tests/unictype/test-pr_paragraph_separator.c + tests/unictype/test-pr_pattern_syntax.c + tests/unictype/test-pr_pattern_white_space.c + tests/unictype/test-pr_private_use.c + tests/unictype/test-pr_punctuation.c + tests/unictype/test-pr_quotation_mark.c + tests/unictype/test-pr_radical.c + tests/unictype/test-pr_sentence_terminal.c + tests/unictype/test-pr_soft_dotted.c + tests/unictype/test-pr_space.c + tests/unictype/test-pr_terminal_punctuation.c + tests/unictype/test-pr_test.c + tests/unictype/test-pr_titlecase.c + tests/unictype/test-pr_unassigned_code_value.c + tests/unictype/test-pr_unified_ideograph.c + tests/unictype/test-pr_uppercase.c + tests/unictype/test-pr_variation_selector.c + tests/unictype/test-pr_white_space.c + tests/unictype/test-pr_xid_continue.c + tests/unictype/test-pr_xid_start.c + tests/unictype/test-pr_zero_width.c + tests/unictype/test-predicate-part1.h + tests/unictype/test-predicate-part2.h + tests/unictype/test-scripts.c + tests/unictype/test-sy_c_ident.c + tests/unictype/test-sy_c_whitespace.c + tests/unictype/test-sy_java_ident.c + tests/unictype/test-sy_java_whitespace.c + tests/unilbrk/test-u16-possible-linebreaks.c + tests/unilbrk/test-u16-width-linebreaks.c + tests/unilbrk/test-u32-possible-linebreaks.c + tests/unilbrk/test-u32-width-linebreaks.c + tests/unilbrk/test-u8-possible-linebreaks.c + tests/unilbrk/test-u8-width-linebreaks.c + tests/unilbrk/test-ulc-possible-linebreaks.c + tests/unilbrk/test-ulc-width-linebreaks.c + tests/uniname/UnicodeDataNames.txt + tests/uniname/test-uninames.c + tests/uniname/test-uninames.sh + tests/uninorm/NormalizationTest.txt + tests/uninorm/test-canonical-decomposition.c + tests/uninorm/test-compat-decomposition.c + tests/uninorm/test-composition.c + tests/uninorm/test-decomposing-form.c + tests/uninorm/test-decomposition.c + tests/uninorm/test-nfc.c + tests/uninorm/test-nfd.c + tests/uninorm/test-nfkc.c + tests/uninorm/test-nfkd.c + tests/uninorm/test-u16-nfc.c + tests/uninorm/test-u16-nfd.c + tests/uninorm/test-u16-nfkc.c + tests/uninorm/test-u16-nfkd.c + tests/uninorm/test-u16-normcmp.c + tests/uninorm/test-u16-normcmp.h + tests/uninorm/test-u16-normcoll.c + tests/uninorm/test-u32-nfc-big.c + tests/uninorm/test-u32-nfc-big.sh + tests/uninorm/test-u32-nfc.c + tests/uninorm/test-u32-nfd-big.c + tests/uninorm/test-u32-nfd-big.sh + tests/uninorm/test-u32-nfd.c + tests/uninorm/test-u32-nfkc-big.c + tests/uninorm/test-u32-nfkc-big.sh + tests/uninorm/test-u32-nfkc.c + tests/uninorm/test-u32-nfkd-big.c + tests/uninorm/test-u32-nfkd-big.sh + tests/uninorm/test-u32-nfkd.c + tests/uninorm/test-u32-normalize-big.c + tests/uninorm/test-u32-normalize-big.h + tests/uninorm/test-u32-normcmp.c + tests/uninorm/test-u32-normcmp.h + tests/uninorm/test-u32-normcoll.c + tests/uninorm/test-u8-nfc.c + tests/uninorm/test-u8-nfd.c + tests/uninorm/test-u8-nfkc.c + tests/uninorm/test-u8-nfkd.c + tests/uninorm/test-u8-normcmp.c + tests/uninorm/test-u8-normcmp.h + tests/uninorm/test-u8-normcoll.c + tests/uninorm/test-uninorm-filter-nfc.c + tests/unistdio/test-u16-asnprintf1.c + tests/unistdio/test-u16-asnprintf1.h + tests/unistdio/test-u16-printf1.h + tests/unistdio/test-u16-vasnprintf1.c + tests/unistdio/test-u16-vasnprintf2.c + tests/unistdio/test-u16-vasnprintf2.sh + tests/unistdio/test-u16-vasnprintf3.c + tests/unistdio/test-u16-vasnprintf3.sh + tests/unistdio/test-u16-vasprintf1.c + tests/unistdio/test-u16-vsnprintf1.c + tests/unistdio/test-u16-vsprintf1.c + tests/unistdio/test-u32-asnprintf1.c + tests/unistdio/test-u32-asnprintf1.h + tests/unistdio/test-u32-printf1.h + tests/unistdio/test-u32-vasnprintf1.c + tests/unistdio/test-u32-vasnprintf2.c + tests/unistdio/test-u32-vasnprintf2.sh + tests/unistdio/test-u32-vasnprintf3.c + tests/unistdio/test-u32-vasnprintf3.sh + tests/unistdio/test-u32-vasprintf1.c + tests/unistdio/test-u32-vsnprintf1.c + tests/unistdio/test-u32-vsprintf1.c + tests/unistdio/test-u8-asnprintf1.c + tests/unistdio/test-u8-asnprintf1.h + tests/unistdio/test-u8-printf1.h + tests/unistdio/test-u8-vasnprintf1.c + tests/unistdio/test-u8-vasnprintf2.c + tests/unistdio/test-u8-vasnprintf2.sh + tests/unistdio/test-u8-vasnprintf3.c + tests/unistdio/test-u8-vasnprintf3.sh + tests/unistdio/test-u8-vasprintf1.c + tests/unistdio/test-u8-vsnprintf1.c + tests/unistdio/test-u8-vsprintf1.c + tests/unistdio/test-ulc-asnprintf1.c + tests/unistdio/test-ulc-asnprintf1.h + tests/unistdio/test-ulc-printf1.h + tests/unistdio/test-ulc-vasnprintf1.c + tests/unistdio/test-ulc-vasnprintf2.c + tests/unistdio/test-ulc-vasnprintf2.sh + tests/unistdio/test-ulc-vasnprintf3.c + tests/unistdio/test-ulc-vasnprintf3.sh + tests/unistdio/test-ulc-vasprintf1.c + tests/unistdio/test-ulc-vsnprintf1.c + tests/unistdio/test-ulc-vsprintf1.c + tests/uniwbrk/test-u16-wordbreaks.c + tests/uniwbrk/test-u32-wordbreaks.c + tests/uniwbrk/test-u8-wordbreaks.c + tests/uniwbrk/test-ulc-wordbreaks.c + tests/uniwbrk/test-ulc-wordbreaks.sh + tests/uniwidth/test-u16-strwidth.c + tests/uniwidth/test-u16-width.c + tests/uniwidth/test-u32-strwidth.c + tests/uniwidth/test-u32-width.c + tests/uniwidth/test-u8-strwidth.c + tests/uniwidth/test-u8-width.c + tests/uniwidth/test-uc_width.c + tests/uniwidth/test-uc_width2.c + tests/uniwidth/test-uc_width2.sh + tests/zerosize-ptr.h + tests=lib/error.c + tests=lib/error.h + tests=lib/exitfail.c + tests=lib/exitfail.h + tests=lib/gettext.h + tests=lib/intprops.h + tests=lib/locale.in.h + tests=lib/progname.c + tests=lib/progname.h + tests=lib/setenv.c + tests=lib/strerror.c + tests=lib/unsetenv.c + tests=lib/wctob.c + tests=lib/xalloc-die.c + tests=lib/xalloc.h + tests=lib/xmalloc.c +]) diff --git a/gnulib-m4/iconv.m4 b/gnulib-m4/iconv.m4 new file mode 100644 index 00000000..3cc62682 --- /dev/null +++ b/gnulib-m4/iconv.m4 @@ -0,0 +1,180 @@ +# iconv.m4 serial AM7 (gettext-0.18) +dnl Copyright (C) 2000-2002, 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([iconv]) +]) + +AC_DEFUN([AM_ICONV_LINK], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + + dnl Add $INCICONV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libiconv and not disabled its use + dnl via --without-libiconv-prefix, he wants to use it. The first + dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) + + AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + [am_cv_func_iconv=yes]) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + [am_cv_lib_iconv=yes] + [am_cv_func_iconv=yes]) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ + dnl This tests against bugs in AIX 5.1 and HP-UX 11.11. + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + AC_TRY_RUN([ +#include +#include +int main () +{ + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + return 1; + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + return 1; + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + return 1; + return 0; +}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], + [case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac]) + LIBS="$am_save_LIBS" + ]) + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + AC_DEFINE([HAVE_ICONV], [1], + [Define if you have the iconv() function and it works.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST([LIBICONV]) + AC_SUBST([LTLIBICONV]) +]) + +AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL([am_cv_proto_iconv], [ + AC_TRY_COMPILE([ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([${ac_t:- + }$am_cv_proto_iconv]) + AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], + [Define as const if the declaration of iconv() needs const.]) + fi +]) diff --git a/gnulib-m4/iconv_h.m4 b/gnulib-m4/iconv_h.m4 new file mode 100644 index 00000000..bc05b055 --- /dev/null +++ b/gnulib-m4/iconv_h.m4 @@ -0,0 +1,34 @@ +# iconv_h.m4 serial 4 +dnl Copyright (C) 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_ICONV_H], +[ + AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([iconv.h]) +]) + +dnl Unconditionally enables the replacement of . +AC_DEFUN([gl_REPLACE_ICONV_H], +[ + AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + ICONV_H='iconv.h' +]) + +AC_DEFUN([gl_ICONV_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_ICONV_H_DEFAULTS], +[ + dnl Assume proper GNU behavior unless another module says otherwise. + REPLACE_ICONV=0; AC_SUBST([REPLACE_ICONV]) + REPLACE_ICONV_OPEN=0; AC_SUBST([REPLACE_ICONV_OPEN]) + REPLACE_ICONV_UTF=0; AC_SUBST([REPLACE_ICONV_UTF]) + ICONV_H=''; AC_SUBST([ICONV_H]) +]) diff --git a/gnulib-m4/iconv_open.m4 b/gnulib-m4/iconv_open.m4 new file mode 100644 index 00000000..c7b948e9 --- /dev/null +++ b/gnulib-m4/iconv_open.m4 @@ -0,0 +1,237 @@ +# iconv_open.m4 serial 5 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_ICONV_OPEN], +[ + AC_REQUIRE([AM_ICONV]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + if test "$am_cv_func_iconv" = yes; then + dnl Test whether iconv_open accepts standardized encoding names. + dnl We know that GNU libiconv and GNU libc do. + AC_EGREP_CPP([gnu_iconv], [ + #include + #if defined _LIBICONV_VERSION || defined __GLIBC__ + gnu_iconv + #endif + ], [gl_func_iconv_gnu=yes], [gl_func_iconv_gnu=no]) + if test $gl_func_iconv_gnu = no; then + iconv_flavor= + case "$host_os" in + aix*) iconv_flavor=ICONV_FLAVOR_AIX ;; + irix*) iconv_flavor=ICONV_FLAVOR_IRIX ;; + hpux*) iconv_flavor=ICONV_FLAVOR_HPUX ;; + osf*) iconv_flavor=ICONV_FLAVOR_OSF ;; + esac + if test -n "$iconv_flavor"; then + AC_DEFINE_UNQUOTED([ICONV_FLAVOR], [$iconv_flavor], + [Define to a symbolic name denoting the flavor of iconv_open() + implementation.]) + gl_REPLACE_ICONV_OPEN + fi + fi + fi +]) + +AC_DEFUN([gl_REPLACE_ICONV_OPEN], +[ + gl_REPLACE_ICONV_H + REPLACE_ICONV_OPEN=1 + AC_LIBOBJ([iconv_open]) +]) + +AC_DEFUN([gl_FUNC_ICONV_OPEN_UTF], +[ + AC_REQUIRE([gl_FUNC_ICONV_OPEN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + if test "$am_cv_func_iconv" = yes; then + if test -n "$am_cv_proto_iconv_arg1"; then + ICONV_CONST="const" + else + ICONV_CONST= + fi + AC_SUBST([ICONV_CONST]) + AC_CACHE_CHECK([whether iconv supports conversion between UTF-8 and UTF-{16,32}{BE,LE}], + [gl_cv_func_iconv_supports_utf], + [ + save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_TRY_RUN([ +#include +#include +#include +#include +#include +#define ASSERT(expr) if (!(expr)) return 1; +int main () +{ + /* Test conversion from UTF-8 to UTF-16BE with no errors. */ + { + static const char input[] = + "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; + static const char expected[] = + "\000J\000a\000p\000a\000n\000e\000s\000e\000 \000(\145\345\147\054\212\236\000)\000 \000[\330\065\335\015\330\065\335\036\330\065\335\055\000]"; + iconv_t cd; + char buf[100]; + const char *inptr; + size_t inbytesleft; + char *outptr; + size_t outbytesleft; + size_t res; + cd = iconv_open ("UTF-16BE", "UTF-8"); + ASSERT (cd != (iconv_t)(-1)); + inptr = input; + inbytesleft = sizeof (input) - 1; + outptr = buf; + outbytesleft = sizeof (buf); + res = iconv (cd, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + (sizeof (expected) - 1)); + ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); + ASSERT (iconv_close (cd) == 0); + } + /* Test conversion from UTF-8 to UTF-16LE with no errors. */ + { + static const char input[] = + "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; + static const char expected[] = + "J\000a\000p\000a\000n\000e\000s\000e\000 \000(\000\345\145\054\147\236\212)\000 \000[\000\065\330\015\335\065\330\036\335\065\330\055\335]\000"; + iconv_t cd; + char buf[100]; + const char *inptr; + size_t inbytesleft; + char *outptr; + size_t outbytesleft; + size_t res; + cd = iconv_open ("UTF-16LE", "UTF-8"); + ASSERT (cd != (iconv_t)(-1)); + inptr = input; + inbytesleft = sizeof (input) - 1; + outptr = buf; + outbytesleft = sizeof (buf); + res = iconv (cd, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + (sizeof (expected) - 1)); + ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); + ASSERT (iconv_close (cd) == 0); + } + /* Test conversion from UTF-8 to UTF-32BE with no errors. */ + { + static const char input[] = + "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; + static const char expected[] = + "\000\000\000J\000\000\000a\000\000\000p\000\000\000a\000\000\000n\000\000\000e\000\000\000s\000\000\000e\000\000\000 \000\000\000(\000\000\145\345\000\000\147\054\000\000\212\236\000\000\000)\000\000\000 \000\000\000[\000\001\325\015\000\001\325\036\000\001\325\055\000\000\000]"; + iconv_t cd; + char buf[100]; + const char *inptr; + size_t inbytesleft; + char *outptr; + size_t outbytesleft; + size_t res; + cd = iconv_open ("UTF-32BE", "UTF-8"); + ASSERT (cd != (iconv_t)(-1)); + inptr = input; + inbytesleft = sizeof (input) - 1; + outptr = buf; + outbytesleft = sizeof (buf); + res = iconv (cd, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + (sizeof (expected) - 1)); + ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); + ASSERT (iconv_close (cd) == 0); + } + /* Test conversion from UTF-8 to UTF-32LE with no errors. */ + { + static const char input[] = + "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; + static const char expected[] = + "J\000\000\000a\000\000\000p\000\000\000a\000\000\000n\000\000\000e\000\000\000s\000\000\000e\000\000\000 \000\000\000(\000\000\000\345\145\000\000\054\147\000\000\236\212\000\000)\000\000\000 \000\000\000[\000\000\000\015\325\001\000\036\325\001\000\055\325\001\000]\000\000\000"; + iconv_t cd; + char buf[100]; + const char *inptr; + size_t inbytesleft; + char *outptr; + size_t outbytesleft; + size_t res; + cd = iconv_open ("UTF-32LE", "UTF-8"); + ASSERT (cd != (iconv_t)(-1)); + inptr = input; + inbytesleft = sizeof (input) - 1; + outptr = buf; + outbytesleft = sizeof (buf); + res = iconv (cd, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + (sizeof (expected) - 1)); + ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); + ASSERT (iconv_close (cd) == 0); + } + /* Test conversion from UTF-16BE to UTF-8 with no errors. + This test fails on NetBSD 3.0. */ + { + static const char input[] = + "\000J\000a\000p\000a\000n\000e\000s\000e\000 \000(\145\345\147\054\212\236\000)\000 \000[\330\065\335\015\330\065\335\036\330\065\335\055\000]"; + static const char expected[] = + "Japanese (\346\227\245\346\234\254\350\252\236) [\360\235\224\215\360\235\224\236\360\235\224\255]"; + iconv_t cd; + char buf[100]; + const char *inptr; + size_t inbytesleft; + char *outptr; + size_t outbytesleft; + size_t res; + cd = iconv_open ("UTF-8", "UTF-16BE"); + ASSERT (cd != (iconv_t)(-1)); + inptr = input; + inbytesleft = sizeof (input) - 1; + outptr = buf; + outbytesleft = sizeof (buf); + res = iconv (cd, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + (sizeof (expected) - 1)); + ASSERT (memcmp (buf, expected, sizeof (expected) - 1) == 0); + ASSERT (iconv_close (cd) == 0); + } + return 0; +}], [gl_cv_func_iconv_supports_utf=yes], [gl_cv_func_iconv_supports_utf=no], + [ + dnl We know that GNU libiconv, GNU libc, and Solaris >= 9 do. + dnl OSF/1 5.1 has these encodings, but inserts a BOM in the "to" + dnl direction. + gl_cv_func_iconv_supports_utf=no + if test $gl_func_iconv_gnu = yes; then + gl_cv_func_iconv_supports_utf=yes + else +changequote(,)dnl + case "$host_os" in + solaris2.9 | solaris2.1[0-9]) gl_cv_func_iconv_supports_utf=yes ;; + esac +changequote([,])dnl + fi + ]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_iconv_supports_utf = no; then + REPLACE_ICONV_UTF=1 + AC_DEFINE([REPLACE_ICONV_UTF], [1], + [Define if the iconv() functions are enhanced to handle the UTF-{16,32}{BE,LE} encodings.]) + REPLACE_ICONV=1 + gl_REPLACE_ICONV_OPEN + AC_LIBOBJ([iconv]) + AC_LIBOBJ([iconv_close]) + fi + fi +]) diff --git a/gnulib-m4/include_next.m4 b/gnulib-m4/include_next.m4 new file mode 100644 index 00000000..5e22ded9 --- /dev/null +++ b/gnulib-m4/include_next.m4 @@ -0,0 +1,187 @@ +# include_next.m4 serial 14 +dnl Copyright (C) 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert and Derek Price. + +dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER. +dnl +dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to +dnl 'include' otherwise. +dnl +dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler +dnl supports it in the special case that it is the first include directive in +dnl the given file, or to 'include' otherwise. +dnl +dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, +dnl so as to avoid GCC warnings when the gcc option -pedantic is used. +dnl '#pragma GCC system_header' has the same effect as if the file was found +dnl through the include search path specified with '-isystem' options (as +dnl opposed to the search path specified with '-I' options). Namely, gcc +dnl does not warn about some things, and on some systems (Solaris and Interix) +dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side +dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead +dnl of plain '__STDC__'. + +AC_DEFUN([gl_INCLUDE_NEXT], +[ + AC_LANG_PREPROC_REQUIRE() + AC_CACHE_CHECK([whether the preprocessor supports include_next], + [gl_cv_have_include_next], + [rm -rf conftestd1a conftestd1b conftestd2 + mkdir conftestd1a conftestd1b conftestd2 + dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on + dnl AIX 6.1 support include_next when used as first preprocessor directive + dnl in a file, but not when preceded by another include directive. Check + dnl for this bug by including . + dnl Additionally, with this same compiler, include_next is a no-op when + dnl used in a header file that was included by specifying its absolute + dnl file name. Despite these two bugs, include_next is used in the + dnl compiler's . By virtue of the second bug, we need to use + dnl include_next as well in this case. + cat < conftestd1a/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include_next +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat < conftestd1b/conftest.h +#define DEFINED_IN_CONFTESTD1 +#include +#include_next +#ifdef DEFINED_IN_CONFTESTD2 +int foo; +#else +#error "include_next doesn't work" +#endif +EOF + cat < conftestd2/conftest.h +#ifndef DEFINED_IN_CONFTESTD1 +#error "include_next test doesn't work" +#endif +#define DEFINED_IN_CONFTESTD2 +EOF + gl_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" + AC_COMPILE_IFELSE([#include ], + [gl_cv_have_include_next=yes], + [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" + AC_COMPILE_IFELSE([#include ], + [gl_cv_have_include_next=buggy], + [gl_cv_have_include_next=no]) + ]) + CPPFLAGS="$gl_save_CPPFLAGS" + rm -rf conftestd1a conftestd1b conftestd2 + ]) + PRAGMA_SYSTEM_HEADER= + if test $gl_cv_have_include_next = yes; then + INCLUDE_NEXT=include_next + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + if test -n "$GCC"; then + PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' + fi + else + if test $gl_cv_have_include_next = buggy; then + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next + else + INCLUDE_NEXT=include + INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include + fi + fi + AC_SUBST([INCLUDE_NEXT]) + AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) + AC_SUBST([PRAGMA_SYSTEM_HEADER]) +]) + +# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) +# ------------------------------------------ +# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be +# ''; otherwise define it to be +# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. +# Also, if #include_next works as first preprocessing directive in a file, +# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be ''; otherwise define it to +# be +# '"///usr/include/foo.h"', or whatever other absolute file name is suitable. +# That way, a header file with the following line: +# #@INCLUDE_NEXT@ @NEXT_FOO_H@ +# or +# #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ +# behaves (after sed substitution) as if it contained +# #include_next +# even if the compiler does not support include_next. +# The three "///" are to pacify Sun C 5.8, which otherwise would say +# "warning: #include of /usr/include/... may be non-portable". +# Use `""', not `<>', so that the /// cannot be confused with a C99 comment. +# Note: This macro assumes that the header file is not empty after +# preprocessing, i.e. it does not only define preprocessor macros but also +# provides some type/enum definitions or function/variable declarations. +AC_DEFUN([gl_CHECK_NEXT_HEADERS], +[ + AC_REQUIRE([gl_INCLUDE_NEXT]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_CHECK_HEADERS_ONCE([$1]) + + m4_foreach_w([gl_HEADER_NAME], [$1], + [AS_VAR_PUSHDEF([gl_next_header], + [gl_cv_next_]m4_defn([gl_HEADER_NAME])) + if test $gl_cv_have_include_next = yes; then + AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) + else + AC_CACHE_CHECK( + [absolute name of <]m4_defn([gl_HEADER_NAME])[>], + m4_defn([gl_next_header]), + [AS_VAR_PUSHDEF([gl_header_exists], + [ac_cv_header_]m4_defn([gl_HEADER_NAME])) + if test AS_VAR_GET(gl_header_exists) = yes; then + AC_LANG_CONFTEST( + [AC_LANG_SOURCE( + [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]] + )]) + dnl AIX "xlc -E" and "cc -E" omit #line directives for header files + dnl that contain only a #include of other header files and no + dnl non-comment tokens of their own. This leads to a failure to + dnl detect the absolute name of , , + dnl and others. The workaround is to force preservation of comments + dnl through option -C. This ensures all necessary #line directives + dnl are present. GCC supports option -C as well. + case "$host_os" in + aix*) gl_absname_cpp="$ac_cpp -C" ;; + *) gl_absname_cpp="$ac_cpp" ;; + esac + dnl eval is necessary to expand gl_absname_cpp. + dnl Ultrix and Pyramid sh refuse to redirect output of eval, + dnl so use subshell. + AS_VAR_SET([gl_next_header], + ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | + sed -n '\#/]m4_defn([gl_HEADER_NAME])[#{ + s#.*"\(.*/]m4_defn([gl_HEADER_NAME])[\)".*#\1# + s#^/[^/]#//&# + p + q + }'`'"']) + else + AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) + fi + AS_VAR_POPDEF([gl_header_exists])]) + fi + AC_SUBST( + AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), + [AS_VAR_GET([gl_next_header])]) + if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' + gl_next_as_first_directive='<'gl_HEADER_NAME'>' + else + # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' + gl_next_as_first_directive=AS_VAR_GET([gl_next_header]) + fi + AC_SUBST( + AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), + [$gl_next_as_first_directive]) + AS_VAR_POPDEF([gl_next_header])]) +]) diff --git a/gnulib-m4/inline.m4 b/gnulib-m4/inline.m4 new file mode 100644 index 00000000..cee51099 --- /dev/null +++ b/gnulib-m4/inline.m4 @@ -0,0 +1,40 @@ +# inline.m4 serial 4 +dnl Copyright (C) 2006, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Test for the 'inline' keyword or equivalent. +dnl Define 'inline' to a supported equivalent, or to nothing if not supported, +dnl like AC_C_INLINE does. Also, define HAVE_INLINE if 'inline' or an +dnl equivalent is effectively supported, i.e. if the compiler is likely to +dnl drop unused 'static inline' functions. +AC_DEFUN([gl_INLINE], +[ + AC_REQUIRE([AC_C_INLINE]) + AC_CACHE_CHECK([whether the compiler generally respects inline], + [gl_cv_c_inline_effective], + [if test $ac_cv_c_inline = no; then + gl_cv_c_inline_effective=no + else + dnl GCC defines __NO_INLINE__ if not optimizing or if -fno-inline is + dnl specified. + dnl Use AC_COMPILE_IFELSE here, not AC_EGREP_CPP, because the result + dnl depends on optimization flags, which can be in CFLAGS. + dnl (AC_EGREP_CPP looks only at the CPPFLAGS.) + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], + [[#ifdef __NO_INLINE__ + #error "inline is not effective" + #endif]])], + [gl_cv_c_inline_effective=yes], + [gl_cv_c_inline_effective=no]) + fi + ]) + if test $gl_cv_c_inline_effective = yes; then + AC_DEFINE([HAVE_INLINE], [1], + [Define to 1 if the compiler supports one of the keywords + 'inline', '__inline__', '__inline' and effectively inlines + functions marked as such.]) + fi +]) diff --git a/gnulib-m4/intlmacosx.m4 b/gnulib-m4/intlmacosx.m4 new file mode 100644 index 00000000..c24837c4 --- /dev/null +++ b/gnulib-m4/intlmacosx.m4 @@ -0,0 +1,51 @@ +# intlmacosx.m4 serial 3 (gettext-0.18) +dnl Copyright (C) 2004-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Checks for special options needed on MacOS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in MacOS X 10.2. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + [gt_cv_func_CFPreferencesCopyAppValue], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#include ], + [CFPreferencesCopyAppValue(NULL, NULL)], + [gt_cv_func_CFPreferencesCopyAppValue=yes], + [gt_cv_func_CFPreferencesCopyAppValue=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], + [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) + fi + dnl Check for API introduced in MacOS X 10.3. + AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], + [gt_cv_func_CFLocaleCopyCurrent=yes], + [gt_cv_func_CFLocaleCopyCurrent=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], + [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + AC_SUBST([INTL_MACOSX_LIBS]) +]) diff --git a/gnulib-m4/intmax_t.m4 b/gnulib-m4/intmax_t.m4 new file mode 100644 index 00000000..264cb571 --- /dev/null +++ b/gnulib-m4/intmax_t.m4 @@ -0,0 +1,61 @@ +# intmax_t.m4 serial 7 +dnl Copyright (C) 1997-2004, 2006-2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +AC_PREREQ([2.13]) + +# Define intmax_t to 'long' or 'long long' +# if it is not already defined in or . + +AC_DEFUN([gl_AC_TYPE_INTMAX_T], +[ + dnl For simplicity, we assume that a header file defines 'intmax_t' if and + dnl only if it defines 'uintmax_t'. + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], + [Define to long or long long if and don't define.]) + else + AC_DEFINE([HAVE_INTMAX_T], [1], + [Define if you have the 'intmax_t' type in or .]) + fi +]) + +dnl An alternative would be to explicitly test for 'intmax_t'. + +AC_DEFUN([gt_AC_TYPE_INTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], + [AC_TRY_COMPILE([ +#include +#include +#if HAVE_STDINT_H_WITH_UINTMAX +#include +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include +#endif +], [intmax_t x = -1; return !x;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)]) + if test $gt_cv_c_intmax_t = yes; then + AC_DEFINE([HAVE_INTMAX_T], [1], + [Define if you have the 'intmax_t' type in or .]) + else + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + test $ac_cv_type_long_long_int = yes \ + && ac_type='long long' \ + || ac_type='long' + AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], + [Define to long or long long if and don't define.]) + fi +]) diff --git a/gnulib-m4/inttypes_h.m4 b/gnulib-m4/inttypes_h.m4 new file mode 100644 index 00000000..f4ca1602 --- /dev/null +++ b/gnulib-m4/inttypes_h.m4 @@ -0,0 +1,26 @@ +# inttypes_h.m4 serial 9 +dnl Copyright (C) 1997-2004, 2006, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1; return !i;], + [gl_cv_header_inttypes_h=yes], + [gl_cv_header_inttypes_h=no])]) + if test $gl_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) diff --git a/gnulib-m4/isnand.m4 b/gnulib-m4/isnand.m4 new file mode 100644 index 00000000..c823c2ce --- /dev/null +++ b/gnulib-m4/isnand.m4 @@ -0,0 +1,95 @@ +# isnand.m4 serial 6 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to get or define isnand(). + +AC_DEFUN([gl_FUNC_ISNAND], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + ISNAND_LIBM= + gl_HAVE_ISNAND_NO_LIBM + if test $gl_cv_func_isnand_no_libm = no; then + gl_HAVE_ISNAND_IN_LIBM + if test $gl_cv_func_isnand_in_libm = yes; then + ISNAND_LIBM=-lm + fi + fi + dnl The variable gl_func_isnand set here is used by isnan.m4. + if test $gl_cv_func_isnand_no_libm = yes \ + || test $gl_cv_func_isnand_in_libm = yes; then + gl_func_isnand=yes + else + gl_func_isnand=no + HAVE_ISNAND=0 + gl_BUILD_ISNAND + fi + AC_SUBST([ISNAND_LIBM]) +]) + +dnl Check how to get or define isnand() without linking with libm. + +AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM], +[ + gl_HAVE_ISNAND_NO_LIBM + if test $gl_cv_func_isnand_no_libm = yes; then + AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1], + [Define if the isnan(double) function is available in libc.]) + else + gl_BUILD_ISNAND + fi +]) + +dnl Pull in replacement isnand definition. It does not need -lm. +AC_DEFUN([gl_BUILD_ISNAND], +[ + AC_LIBOBJ([isnand]) + gl_DOUBLE_EXPONENT_LOCATION +]) + +dnl Test whether isnand() can be used with libm. + +AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM], +[ + AC_CACHE_CHECK([whether isnan(double) can be used with libm], + [gl_cv_func_isnand_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnand + # define isnand(x) __builtin_isnand ((double)(x)) + #elif defined isnan + # undef isnand + # define isnand(x) isnan ((double)(x)) + #endif + double x;], + [return isnand (x);], + [gl_cv_func_isnand_in_libm=yes], + [gl_cv_func_isnand_in_libm=no]) + LIBS="$save_LIBS" + ]) +]) + +AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM], +[ + AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm], + [gl_cv_func_isnand_no_libm], + [ + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnand + # define isnand(x) __builtin_isnan ((double)(x)) + #else + # undef isnand + # define isnand(x) isnan ((double)(x)) + #endif + double x;], + [return isnand (x);], + [gl_cv_func_isnand_no_libm=yes], + [gl_cv_func_isnand_no_libm=no]) + ]) +]) diff --git a/gnulib-m4/isnanf.m4 b/gnulib-m4/isnanf.m4 new file mode 100644 index 00000000..2ad8f945 --- /dev/null +++ b/gnulib-m4/isnanf.m4 @@ -0,0 +1,179 @@ +# isnanf.m4 serial 10 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to get or define isnanf(). + +AC_DEFUN([gl_FUNC_ISNANF], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + ISNANF_LIBM= + gl_HAVE_ISNANF_NO_LIBM + if test $gl_cv_func_isnanf_no_libm = no; then + gl_HAVE_ISNANF_IN_LIBM + if test $gl_cv_func_isnanf_in_libm = yes; then + ISNANF_LIBM=-lm + fi + fi + if test $gl_cv_func_isnanf_no_libm = yes \ + || test $gl_cv_func_isnanf_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $ISNANF_LIBM" + gl_ISNANF_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_isnanf_works" in + *yes) gl_func_isnanf=yes ;; + *) gl_func_isnanf=no; ISNANF_LIBM= ;; + esac + else + gl_func_isnanf=no + fi + if test $gl_func_isnanf != yes; then + HAVE_ISNANF=0 + gl_BUILD_ISNANF + fi + AC_SUBST([ISNANF_LIBM]) +]) + +dnl Check how to get or define isnanf() without linking with libm. + +AC_DEFUN([gl_FUNC_ISNANF_NO_LIBM], +[ + gl_HAVE_ISNANF_NO_LIBM + if test $gl_cv_func_isnanf_no_libm = yes; then + gl_ISNANF_WORKS + fi + if test $gl_cv_func_isnanf_no_libm = yes \ + && { case "$gl_cv_func_isnanf_works" in + *yes) true;; + *) false;; + esac + }; then + AC_DEFINE([HAVE_ISNANF_IN_LIBC], [1], + [Define if the isnan(float) function is available in libc.]) + else + gl_BUILD_ISNANF + fi +]) + +dnl Pull in replacement isnanf definition. It does not need -lm. +AC_DEFUN([gl_BUILD_ISNANF], +[ + AC_LIBOBJ([isnanf]) + gl_FLOAT_EXPONENT_LOCATION +]) + +dnl Test whether isnanf() can be used without libm. +AC_DEFUN([gl_HAVE_ISNANF_NO_LIBM], +[ + AC_CACHE_CHECK([whether isnan(float) can be used without linking with libm], + [gl_cv_func_isnanf_no_libm], + [ + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnanf + # define isnanf(x) __builtin_isnanf ((float)(x)) + #elif defined isnan + # undef isnanf + # define isnanf(x) isnan ((float)(x)) + #endif + float x;], + [return isnanf (x);], + [gl_cv_func_isnanf_no_libm=yes], + [gl_cv_func_isnanf_no_libm=no]) + ]) +]) + +dnl Test whether isnanf() can be used with libm. +AC_DEFUN([gl_HAVE_ISNANF_IN_LIBM], +[ + AC_CACHE_CHECK([whether isnan(float) can be used with libm], + [gl_cv_func_isnanf_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnanf + # define isnanf(x) __builtin_isnanf ((float)(x)) + #elif defined isnan + # undef isnanf + # define isnanf(x) isnan ((float)(x)) + #endif + float x;], + [return isnanf (x);], + [gl_cv_func_isnanf_in_libm=yes], + [gl_cv_func_isnanf_in_libm=no]) + LIBS="$save_LIBS" + ]) +]) + +dnl Test whether isnanf() rejects Infinity (this fails on Solaris 2.5.1), +dnl recognizes a NaN (this fails on IRIX 6.5 with cc), and recognizes a NaN +dnl with in-memory representation 0x7fbfffff (this fails on IRIX 6.5). +AC_DEFUN([gl_ISNANF_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) + AC_CACHE_CHECK([whether isnan(float) works], [gl_cv_func_isnanf_works], + [ + AC_TRY_RUN([ +#include +#if __GNUC__ >= 4 +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +#elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +#endif +/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +#ifdef __DECC +static float +NaN () +{ + static float zero = 0.0f; + return zero / zero; +} +#else +# define NaN() (0.0f / 0.0f) +#endif +#define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; float value; } memory_float; +int main() +{ + memory_float m; + + if (isnanf (1.0f / 0.0f)) + return 1; + + if (!isnanf (NaN ())) + return 1; + +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + /* The isnanf function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit. */ + if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) + { + m.value = NaN (); + /* Set the bits below the exponent to 01111...111. */ + m.word[0] &= -1U << FLT_EXPBIT0_BIT; + m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1; + if (!isnanf (m.value)) + return 1; + } +#endif + + return 0; +}], [gl_cv_func_isnanf_works=yes], [gl_cv_func_isnanf_works=no], + [case "$host_os" in + irix* | solaris*) gl_cv_func_isnanf_works="guessing no";; + *) gl_cv_func_isnanf_works="guessing yes";; + esac + ]) + ]) +]) diff --git a/gnulib-m4/isnanl.m4 b/gnulib-m4/isnanl.m4 new file mode 100644 index 00000000..e3029f5c --- /dev/null +++ b/gnulib-m4/isnanl.m4 @@ -0,0 +1,245 @@ +# isnanl.m4 serial 12 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_ISNANL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + ISNANL_LIBM= + gl_HAVE_ISNANL_NO_LIBM + if test $gl_cv_func_isnanl_no_libm = no; then + gl_HAVE_ISNANL_IN_LIBM + if test $gl_cv_func_isnanl_in_libm = yes; then + ISNANL_LIBM=-lm + fi + fi + if test $gl_cv_func_isnanl_no_libm = yes \ + || test $gl_cv_func_isnanl_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $ISNANL_LIBM" + gl_FUNC_ISNANL_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_isnanl_works" in + *yes) gl_func_isnanl=yes ;; + *) gl_func_isnanl=no; ISNANL_LIBM= ;; + esac + else + gl_func_isnanl=no + fi + if test $gl_func_isnanl != yes; then + HAVE_ISNANL=0 + gl_BUILD_ISNANL + fi + AC_SUBST([ISNANL_LIBM]) +]) + +AC_DEFUN([gl_FUNC_ISNANL_NO_LIBM], +[ + gl_HAVE_ISNANL_NO_LIBM + gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm + if test $gl_func_isnanl_no_libm = yes; then + gl_FUNC_ISNANL_WORKS + case "$gl_cv_func_isnanl_works" in + *yes) ;; + *) gl_func_isnanl_no_libm=no ;; + esac + fi + if test $gl_func_isnanl_no_libm = yes; then + AC_DEFINE([HAVE_ISNANL_IN_LIBC], [1], + [Define if the isnan(long double) function is available in libc.]) + else + gl_BUILD_ISNANL + fi +]) + +dnl Pull in replacement isnanl definition. It does not need -lm. +AC_DEFUN([gl_BUILD_ISNANL], +[ + AC_LIBOBJ([isnanl]) + gl_LONG_DOUBLE_EXPONENT_LOCATION +]) + +dnl Test whether isnanl() can be used without libm. +AC_DEFUN([gl_HAVE_ISNANL_NO_LIBM], +[ + AC_CACHE_CHECK([whether isnan(long double) can be used without linking with libm], + [gl_cv_func_isnanl_no_libm], + [ + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnanl + # define isnanl(x) __builtin_isnanl ((long double)(x)) + #elif defined isnan + # undef isnanl + # define isnanl(x) isnan ((long double)(x)) + #endif + long double x;], + [return isnanl (x);], + [gl_cv_func_isnanl_no_libm=yes], + [gl_cv_func_isnanl_no_libm=no]) + ]) +]) + +dnl Test whether isnanl() can be used with libm. +AC_DEFUN([gl_HAVE_ISNANL_IN_LIBM], +[ + AC_CACHE_CHECK([whether isnan(long double) can be used with libm], + [gl_cv_func_isnanl_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + #if __GNUC__ >= 4 + # undef isnanl + # define isnanl(x) __builtin_isnanl ((long double)(x)) + #elif defined isnan + # undef isnanl + # define isnanl(x) isnan ((long double)(x)) + #endif + long double x;], + [return isnanl (x);], + [gl_cv_func_isnanl_in_libm=yes], + [gl_cv_func_isnanl_in_libm=no]) + LIBS="$save_LIBS" + ]) +]) + +dnl Test whether isnanl() recognizes all numbers which are neither finite nor +dnl infinite. This test fails e.g. on NetBSD/i386 and on glibc/ia64. +dnl Also, the GCC >= 4.0 built-in __builtin_isnanl does not pass the tests +dnl - for pseudo-denormals on i686 and x86_64, +dnl - for pseudo-zeroes, unnormalized numbers, and pseudo-denormals on ia64. +AC_DEFUN([gl_FUNC_ISNANL_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether isnanl works], [gl_cv_func_isnanl_works], + [ + AC_TRY_RUN([ +#include +#include +#include +#if __GNUC__ >= 4 +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +#elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +#endif +#define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { unsigned int word[NWORDS]; long double value; } + memory_long_double; +/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the + runtime type conversion. */ +#ifdef __sgi +static long double NaNl () +{ + double zero = 0.0; + return zero / zero; +} +#else +# define NaNl() (0.0L / 0.0L) +#endif +int main () +{ + memory_long_double m; + unsigned int i; + + if (!isnanl (NaNl ())) + return 1; + + /* The isnanl function should be immune against changes in the sign bit and + in the mantissa bits. The xor operation twiddles a bit that can only be + a sign bit or a mantissa bit (since the exponent never extends to + bit 31). */ + m.value = NaNl (); + m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); + for (i = 0; i < NWORDS; i++) + m.word[i] |= 1; + if (!isnanl (m.value)) + return 1; + +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { + /* Signalling NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in + Intel IA-64 Architecture Software Developer's Manual, Volume 1: + Application Architecture. + Table 5-2 "Floating-Point Register Encodings" + Figure 5-6 "Memory to Floating-Point Register Data Translation" + */ + { /* Pseudo-NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Infinity. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Zero. */ + static memory_long_double x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Unnormalized number. */ + static memory_long_double x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } + { /* Pseudo-Denormal. */ + static memory_long_double x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (!isnanl (x.value)) + return 1; + } +#endif + + return 0; +}], [gl_cv_func_isnanl_works=yes], [gl_cv_func_isnanl_works=no], + [case "$host_cpu" in + # Guess no on ia64, x86_64, i386. + ia64 | x86_64 | i*86) gl_cv_func_isnanl_works="guessing no";; + *) + case "$host_os" in + netbsd*) gl_cv_func_isnanl_works="guessing no";; + *) gl_cv_func_isnanl_works="guessing yes";; + esac + ;; + esac + ]) + ]) +]) diff --git a/gnulib-m4/lcmessage.m4 b/gnulib-m4/lcmessage.m4 new file mode 100644 index 00000000..fa8e4167 --- /dev/null +++ b/gnulib-m4/lcmessage.m4 @@ -0,0 +1,30 @@ +# lcmessage.m4 serial 6 (gettext-0.18) +dnl Copyright (C) 1995-2002, 2004-2005, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995. + +# Check whether LC_MESSAGES is available in . + +AC_DEFUN([gt_LC_MESSAGES], +[ + AC_CACHE_CHECK([for LC_MESSAGES], [gt_cv_val_LC_MESSAGES], + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + [gt_cv_val_LC_MESSAGES=yes], [gt_cv_val_LC_MESSAGES=no])]) + if test $gt_cv_val_LC_MESSAGES = yes; then + AC_DEFINE([HAVE_LC_MESSAGES], [1], + [Define if your file defines LC_MESSAGES.]) + fi +]) diff --git a/gnulib-m4/ldexpl.m4 b/gnulib-m4/ldexpl.m4 new file mode 100644 index 00000000..8ba85c61 --- /dev/null +++ b/gnulib-m4/ldexpl.m4 @@ -0,0 +1,88 @@ +# ldexpl.m4 serial 4 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_LDEXPL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + LDEXPL_LIBM= + AC_CACHE_CHECK([whether ldexpl() can be used without linking with libm], + [gl_cv_func_ldexpl_no_libm], + [ + AC_TRY_LINK([#include + long double x;], + [return ldexpl (x, -1) > 0;], + [gl_cv_func_ldexpl_no_libm=yes], + [gl_cv_func_ldexpl_no_libm=no]) + ]) + if test $gl_cv_func_ldexpl_no_libm = no; then + AC_CACHE_CHECK([whether ldexpl() can be used with libm], + [gl_cv_func_ldexpl_in_libm], + [ + save_LIBS="$LIBS" + LIBS="$LIBS -lm" + AC_TRY_LINK([#include + long double x;], + [return ldexpl (x, -1) > 0;], + [gl_cv_func_ldexpl_in_libm=yes], + [gl_cv_func_ldexpl_in_libm=no]) + LIBS="$save_LIBS" + ]) + if test $gl_cv_func_ldexpl_in_libm = yes; then + LDEXPL_LIBM=-lm + fi + fi + if test $gl_cv_func_ldexpl_no_libm = yes \ + || test $gl_cv_func_ldexpl_in_libm = yes; then + save_LIBS="$LIBS" + LIBS="$LIBS $LDEXPL_LIBM" + gl_FUNC_LDEXPL_WORKS + LIBS="$save_LIBS" + case "$gl_cv_func_ldexpl_works" in + *yes) gl_func_ldexpl=yes ;; + *) gl_func_ldexpl=no; REPLACE_LDEXPL=1; LDEXPL_LIBM= ;; + esac + else + gl_func_ldexpl=no + fi + if test $gl_func_ldexpl = yes; then + AC_DEFINE([HAVE_LDEXPL], [1], + [Define if the ldexpl() function is available.]) + dnl Also check whether it's declared. + dnl MacOS X 10.3 has ldexpl() in libc but doesn't declare it in . + AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [#include ]) + else + HAVE_DECL_LDEXPL=0 + AC_LIBOBJ([ldexpl]) + fi + AC_SUBST([LDEXPL_LIBM]) +]) + +dnl Test whether ldexpl() works on finite numbers (this fails on AIX 5.1 +dnl and MacOS X 10.4/PowerPC). +AC_DEFUN([gl_FUNC_LDEXPL_WORKS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether ldexpl works], [gl_cv_func_ldexpl_works], + [ + AC_TRY_RUN([ +#include +extern long double ldexpl (long double, int); +int main() +{ + volatile long double x1 = 1.0; + volatile long double y1 = ldexpl (x1, -1); + volatile long double x2 = 1.73205L; + volatile long double y2 = ldexpl (x2, 0); + return (y1 != 0.5L) || (y2 != x2); +}], [gl_cv_func_ldexpl_works=yes], [gl_cv_func_ldexpl_works=no], + [case "$host_os" in + aix*) gl_cv_func_ldexpl_works="guessing no";; + *) gl_cv_func_ldexpl_works="guessing yes";; + esac + ]) + ]) +]) diff --git a/gnulib-m4/lib-ld.m4 b/gnulib-m4/lib-ld.m4 new file mode 100644 index 00000000..e4863f2c --- /dev/null +++ b/gnulib-m4/lib-ld.m4 @@ -0,0 +1,110 @@ +# lib-ld.m4 serial 4 (gettext-0.18) +dnl Copyright (C) 1996-2003, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL([acl_cv_path_LD], +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT([$LD]) +else + AC_MSG_RESULT([no]) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) diff --git a/gnulib-m4/lib-link.m4 b/gnulib-m4/lib-link.m4 new file mode 100644 index 00000000..2f8b7ff3 --- /dev/null +++ b/gnulib-m4/lib-link.m4 @@ -0,0 +1,764 @@ +# lib-link.m4 serial 20 (gettext-0.18) +dnl Copyright (C) 2001-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ([2.54]) + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[translit([$1],[./-], [___])]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + popdef([NAME]) + popdef([Name]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. The missing-message +dnl defaults to 'no' and may contain additional hints for the user. +dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} +dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[translit([$1],[./-], [___])]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIB[]NAME" + AC_TRY_LINK([$3], [$4], + [ac_cv_lib[]Name=yes], + [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + LIB[]NAME[]_PREFIX= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + popdef([NAME]) + popdef([Name]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl acl_libext, +dnl acl_shlibext, +dnl acl_hardcode_libdir_flag_spec, +dnl acl_hardcode_libdir_separator, +dnl acl_hardcode_direct, +dnl acl_hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + dnl Tell automake >= 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE([rpath], + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_FROMPACKAGE(name, package) +dnl declares that libname comes from the given package. The configure file +dnl will then not have a --with-libname-prefix option but a +dnl --with-package-prefix option. Several libraries can come from the same +dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar +dnl macro call that searches for libname. +AC_DEFUN([AC_LIB_FROMPACKAGE], +[ + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + define([acl_frompackage_]NAME, [$2]) + popdef([NAME]) + pushdef([PACK],[$2]) + pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + define([acl_libsinpackage_]PACKUP, + m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1]) + popdef([PACKUP]) + popdef([PACK]) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found +dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) + pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) + dnl Autoconf >= 2.61 supports dots in --with options. + pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_ARG_WITH(P_A_C_K[-prefix], +[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib + --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + LIB[]NAME[]_PREFIX= + dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been + dnl computed. So it has to be reset here. + HAVE_LIB[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + dnl The same code as in the loop below: + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$acl_hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi + popdef([P_A_C_K]) + popdef([PACKLIBS]) + popdef([PACKUP]) + popdef([PACK]) + popdef([NAME]) +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi + done + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi + fi + fi + AC_SUBST([$1]) +]) diff --git a/gnulib-m4/lib-prefix.m4 b/gnulib-m4/lib-prefix.m4 new file mode 100644 index 00000000..4b7ee335 --- /dev/null +++ b/gnulib-m4/lib-prefix.m4 @@ -0,0 +1,224 @@ +# lib-prefix.m4 serial 7 (gettext-0.18) +dnl Copyright (C) 2001-2005, 2008-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates +dnl - a variable acl_libdirstem, containing the basename of the libdir, either +dnl "lib" or "lib64" or "lib/64", +dnl - a variable acl_libdirstem2, as a secondary possible value for +dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or +dnl "lib/amd64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib and lib64. + dnl On glibc systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine + dnl the compiler's default mode by looking at the compiler's library search + dnl path. If at least one of its elements ends in /lib64 or points to a + dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. + dnl Otherwise we use the default, namely "lib". + dnl On Solaris systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or + dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. + AC_REQUIRE([AC_CANONICAL_HOST]) + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment + dnl . + dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." + dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the + dnl symlink is missing, so we set acl_libdirstem2 too. + AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], + [AC_EGREP_CPP([sixtyfour bits], [ +#ifdef _LP64 +sixtyfour bits +#endif + ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) + ]) + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" +]) diff --git a/gnulib-m4/localcharset.m4 b/gnulib-m4/localcharset.m4 new file mode 100644 index 00000000..e9601041 --- /dev/null +++ b/gnulib-m4/localcharset.m4 @@ -0,0 +1,16 @@ +# localcharset.m4 serial 6 +dnl Copyright (C) 2002, 2004, 2006, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_LOCALCHARSET], +[ + dnl Prerequisites of lib/localcharset.c. + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CHECK_DECLS_ONCE([getc_unlocked]) + + dnl Prerequisites of the lib/Makefile.am snippet. + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_GLIBC21]) +]) diff --git a/gnulib-m4/locale-fr.m4 b/gnulib-m4/locale-fr.m4 new file mode 100644 index 00000000..653a5bc2 --- /dev/null +++ b/gnulib-m4/locale-fr.m4 @@ -0,0 +1,185 @@ +# locale-fr.m4 serial 11 +dnl Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Determine the name of a french locale with traditional encoding. +AC_DEFUN([gt_LOCALE_FR], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only + one byte long. This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO-8859-1 + else + # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. + if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.ISO8859-1 + else + # Test for the HP-UX locale name. + if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr_FR.iso88591 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr=fr + else + # None found. + gt_cv_locale_fr=none + fi + fi + fi + fi + fi + fi + rm -fr conftest* + ]) + LOCALE_FR=$gt_cv_locale_fr + AC_SUBST([LOCALE_FR]) +]) + +dnl Determine the name of a french locale with UTF-8 encoding. +AC_DEFUN([gt_LOCALE_FR_UTF8], +[ + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. */ +#if !(defined __BEOS__ || defined __HAIKU__) + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +# if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +# endif +# ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +# endif + /* Check whether in the abbreviation of the second month, the second + character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') + return 1; +#endif + /* Check whether the decimal separator is a comma. + On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point + are nl_langinfo(RADIXCHAR) are both ".". */ + if (localeconv () ->decimal_point[0] != ',') return 1; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr_FR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_fr_utf8=fr.UTF-8 + else + # None found. + gt_cv_locale_fr_utf8=none + fi + fi + fi + fi + rm -fr conftest* + ]) + LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 + AC_SUBST([LOCALE_FR_UTF8]) +]) diff --git a/gnulib-m4/locale-ja.m4 b/gnulib-m4/locale-ja.m4 new file mode 100644 index 00000000..93605764 --- /dev/null +++ b/gnulib-m4/locale-ja.m4 @@ -0,0 +1,107 @@ +# locale-ja.m4 serial 7 +dnl Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Determine the name of a japanese locale with EUC-JP encoding. +AC_DEFUN([gt_LOCALE_JA], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales + on Cygwin 1.5.x. */ + if (MB_CUR_MAX == 1) + return 1; + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the AIX locale name. + if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC-JP + else + # Test for the HP-UX, OSF/1, NetBSD locale name. + if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.eucJP + else + # Test for the IRIX, FreeBSD locale name. + if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja_JP.EUC + else + # Test for the Solaris 7 locale name. + if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_ja=ja + else + # Special test for NetBSD 1.6. + if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then + gt_cv_locale_ja=ja_JP.eucJP + else + # None found. + gt_cv_locale_ja=none + fi + fi + fi + fi + fi + fi + fi + rm -fr conftest* + ]) + LOCALE_JA=$gt_cv_locale_ja + AC_SUBST([LOCALE_JA]) +]) diff --git a/gnulib-m4/locale-tr.m4 b/gnulib-m4/locale-tr.m4 new file mode 100644 index 00000000..6162f65c --- /dev/null +++ b/gnulib-m4/locale-tr.m4 @@ -0,0 +1,97 @@ +# locale-tr.m4 serial 6 +dnl Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Determine the name of a turkish locale with UTF-8 encoding. +AC_DEFUN([gt_LOCALE_TR_UTF8], +[ + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a turkish Unicode locale], [gt_cv_locale_tr_utf8], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () { + /* On BeOS, locales are not implemented in libc. Rather, libintl + imitates locale dependent behaviour by looking at the environment + variables, and all locales use the UTF-8 encoding. But BeOS does not + implement the Turkish upper-/lowercase mappings. Therefore, let this + program return 1 on BeOS. */ + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the tr_TR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in the abbreviation of the eighth month, the second + character (should be U+011F: LATIN SMALL LETTER G WITH BREVE) is + two bytes long, with UTF-8 encoding. */ + t.tm_year = 1992 - 1900; t.tm_mon = 8 - 1; t.tm_mday = 19; + if (strftime (buf, sizeof (buf), "%b", &t) < 4 + || buf[1] != (char) 0xc4 || buf[2] != (char) 0x9f) + return 1; + /* Check whether the upper-/lowercase mappings are as expected for + Turkish. */ + if (towupper ('i') != 0x0130 || towlower (0x0130) != 'i' + || towupper(0x0131) != 'I' || towlower ('I') != 0x0131) + return 1; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the usual locale name. + if (LC_ALL=tr_TR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=tr_TR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr_TR.UTF-8 + else + # Test for the Solaris 7 locale name. + if (LC_ALL=tr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_tr_utf8=tr.UTF-8 + else + # None found. + gt_cv_locale_tr_utf8=none + fi + fi + fi + else + gt_cv_locale_tr_utf8=none + fi + rm -fr conftest* + ]) + LOCALE_TR_UTF8=$gt_cv_locale_tr_utf8 + AC_SUBST([LOCALE_TR_UTF8]) +]) diff --git a/gnulib-m4/locale-zh.m4 b/gnulib-m4/locale-zh.m4 new file mode 100644 index 00000000..36a5f1df --- /dev/null +++ b/gnulib-m4/locale-zh.m4 @@ -0,0 +1,92 @@ +# locale-zh.m4 serial 6 +dnl Copyright (C) 2003, 2005-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Determine the name of a chinese locale with GB18030 encoding. +AC_DEFUN([gt_LOCALE_ZH_CN], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AM_LANGINFO_CODESET]) + AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [ + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +changequote(,)dnl +#include +#include +#include +#if HAVE_LANGINFO_CODESET +# include +#endif +#include +#include +struct tm t; +char buf[16]; +int main () +{ + const char *p; + /* Check whether the given locale name is recognized by the system. */ + if (setlocale (LC_ALL, "") == NULL) return 1; + /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". + On MacOS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) + is empty, and the behaviour of Tcl 8.4 in this locale is not useful. + On OpenBSD 4.0, when an unsupported locale is specified, setlocale() + succeeds but then nl_langinfo(CODESET) is "646". In this situation, + some unit tests fail. */ +#if HAVE_LANGINFO_CODESET + { + const char *cs = nl_langinfo (CODESET); + if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) + return 1; + } +#endif +#ifdef __CYGWIN__ + /* On Cygwin, avoid locale names without encoding suffix, because the + locale_charset() function relies on the encoding suffix. Note that + LC_ALL is set on the command line. */ + if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; +#endif + /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. + This excludes the UTF-8 encoding. */ + t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; + if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; + for (p = buf; *p != '\0'; p++) + if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) + return 1; + /* Check whether a typical GB18030 multibyte sequence is recognized as a + single wide character. This excludes the GB2312 and GBK encodings. */ + if (mblen ("\203\062\332\066", 5) != 4) + return 1; + return 0; +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because + # otherwise on MacOS X 10.3.5 the LC_TIME=C from the beginning of the + # configure script would override the LC_ALL setting. Likewise for + # LC_CTYPE, which is also set at the beginning of the configure script. + # Test for the locale name without encoding suffix. + if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN + else + # Test for the locale name with explicit encoding suffix. + if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then + gt_cv_locale_zh_CN=zh_CN.GB18030 + else + # None found. + gt_cv_locale_zh_CN=none + fi + fi + else + # If there was a link error, due to mblen(), the system is so old that + # it certainly doesn't have a chinese locale. + gt_cv_locale_zh_CN=none + fi + rm -fr conftest* + ]) + LOCALE_ZH_CN=$gt_cv_locale_zh_CN + AC_SUBST([LOCALE_ZH_CN]) +]) diff --git a/gnulib-m4/locale_h.m4 b/gnulib-m4/locale_h.m4 new file mode 100644 index 00000000..2bf5abcc --- /dev/null +++ b/gnulib-m4/locale_h.m4 @@ -0,0 +1,22 @@ +# locale_h.m4 serial 2 +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_LOCALE_H], +[ + AC_CACHE_CHECK([whether locale.h conforms to POSIX], + [gl_cv_header_working_locale_h], + [AC_TRY_COMPILE([#include +int x = LC_MESSAGES;], [], + [gl_cv_header_working_locale_h=yes], + [gl_cv_header_working_locale_h=no])]) + if test $gl_cv_header_working_locale_h = yes; then + LOCALE_H= + else + gl_CHECK_NEXT_HEADERS([locale.h]) + LOCALE_H=locale.h + fi + AC_SUBST([LOCALE_H]) +]) diff --git a/gnulib-m4/localename.m4 b/gnulib-m4/localename.m4 new file mode 100644 index 00000000..94e9705d --- /dev/null +++ b/gnulib-m4/localename.m4 @@ -0,0 +1,12 @@ +# localename.m4 serial 1 +dnl Copyright (C) 2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_LOCALENAME], +[ + AC_REQUIRE([gt_LC_MESSAGES]) + AC_REQUIRE([gt_INTL_MACOSX]) + AC_CHECK_FUNCS([setlocale]) +]) diff --git a/gnulib-m4/longlong.m4 b/gnulib-m4/longlong.m4 new file mode 100644 index 00000000..eedc8d56 --- /dev/null +++ b/gnulib-m4/longlong.m4 @@ -0,0 +1,106 @@ +# longlong.m4 serial 14 +dnl Copyright (C) 1999-2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_LONG_LONG_INT if 'long long int' works. +# This fixes a bug in Autoconf 2.61, but can be removed once we +# assume 2.62 everywhere. + +# Note: If the type 'long long int' exists but is only 32 bits large +# (as on some very old compilers), HAVE_LONG_LONG_INT will not be +# defined. In this case you can treat 'long long int' like 'long int'. + +AC_DEFUN([AC_TYPE_LONG_LONG_INT], +[ + AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], + [AC_LINK_IFELSE( + [_AC_TYPE_LONG_LONG_SNIPPET], + [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. + dnl If cross compiling, assume the bug isn't important, since + dnl nobody cross compiles for this platform as far as we know. + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[@%:@include + @%:@ifndef LLONG_MAX + @%:@ define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + @%:@ define LLONG_MAX (HALF - 1 + HALF) + @%:@endif]], + [[long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0;]])], + [ac_cv_type_long_long_int=yes], + [ac_cv_type_long_long_int=no], + [ac_cv_type_long_long_int=yes])], + [ac_cv_type_long_long_int=no])]) + if test $ac_cv_type_long_long_int = yes; then + AC_DEFINE([HAVE_LONG_LONG_INT], [1], + [Define to 1 if the system has the type `long long int'.]) + fi +]) + +# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. +# This fixes a bug in Autoconf 2.61, but can be removed once we +# assume 2.62 everywhere. + +# Note: If the type 'unsigned long long int' exists but is only 32 bits +# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT +# will not be defined. In this case you can treat 'unsigned long long int' +# like 'unsigned long int'. + +AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], +[ + AC_CACHE_CHECK([for unsigned long long int], + [ac_cv_type_unsigned_long_long_int], + [AC_LINK_IFELSE( + [_AC_TYPE_LONG_LONG_SNIPPET], + [ac_cv_type_unsigned_long_long_int=yes], + [ac_cv_type_unsigned_long_long_int=no])]) + if test $ac_cv_type_unsigned_long_long_int = yes; then + AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], + [Define to 1 if the system has the type `unsigned long long int'.]) + fi +]) + +# Expands to a C program that can be used to test for simultaneous support +# of 'long long' and 'unsigned long long'. We don't want to say that +# 'long long' is available if 'unsigned long long' is not, or vice versa, +# because too many programs rely on the symmetry between signed and unsigned +# integer types (excluding 'bool'). +AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], +[ + AC_LANG_PROGRAM( + [[/* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63;]], + [[/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull));]]) +]) diff --git a/gnulib-m4/malloc.m4 b/gnulib-m4/malloc.m4 new file mode 100644 index 00000000..80701716 --- /dev/null +++ b/gnulib-m4/malloc.m4 @@ -0,0 +1,41 @@ +# malloc.m4 serial 9 +dnl Copyright (C) 2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# gl_FUNC_MALLOC_POSIX +# -------------------- +# Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it +# fails), and replace malloc if it is not. +AC_DEFUN([gl_FUNC_MALLOC_POSIX], +[ + AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) + if test $gl_cv_func_malloc_posix = yes; then + HAVE_MALLOC_POSIX=1 + AC_DEFINE([HAVE_MALLOC_POSIX], [1], + [Define if the 'malloc' function is POSIX compliant.]) + else + AC_LIBOBJ([malloc]) + HAVE_MALLOC_POSIX=0 + fi + AC_SUBST([HAVE_MALLOC_POSIX]) +]) + +# Test whether malloc, realloc, calloc are POSIX compliant, +# Set gl_cv_func_malloc_posix to yes or no accordingly. +AC_DEFUN([gl_CHECK_MALLOC_POSIX], +[ + AC_CACHE_CHECK([whether malloc, realloc, calloc are POSIX compliant], + [gl_cv_func_malloc_posix], + [ + dnl It is too dangerous to try to allocate a large amount of memory: + dnl some systems go to their knees when you do that. So assume that + dnl all Unix implementations of the function are POSIX compliant. + AC_TRY_COMPILE([], + [#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + choke me + #endif + ], [gl_cv_func_malloc_posix=yes], [gl_cv_func_malloc_posix=no]) + ]) +]) diff --git a/gnulib-m4/malloca.m4 b/gnulib-m4/malloca.m4 new file mode 100644 index 00000000..2841ae83 --- /dev/null +++ b/gnulib-m4/malloca.m4 @@ -0,0 +1,14 @@ +# malloca.m4 serial 1 +dnl Copyright (C) 2003-2004, 2006-2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_MALLOCA], +[ + dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables + dnl @ALLOCA@ and @LTALLOCA@. + dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies. + AC_REQUIRE([gl_EEMALLOC]) + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) +]) diff --git a/gnulib-m4/math_h.m4 b/gnulib-m4/math_h.m4 new file mode 100644 index 00000000..d941bc33 --- /dev/null +++ b/gnulib-m4/math_h.m4 @@ -0,0 +1,103 @@ +# math_h.m4 serial 14 +dnl Copyright (C) 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_MATH_H], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([math.h]) + AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[/* Solaris 10 has a broken definition of NAN. Other platforms + fail to provide NAN, or provide it only in C99 mode; this + test only needs to fail when NAN is provided but wrong. */ + float f = 1.0f; +#ifdef NAN + f = NAN; +#endif + return f == 0;]])], + [gl_cv_header_math_nan_works=yes], + [gl_cv_header_math_nan_works=no])]) + if test $gl_cv_header_math_nan_works = no; then + REPLACE_NAN=1 + fi + AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], + [[/* Solaris 10 has a broken definition of HUGE_VAL. */ + double d = HUGE_VAL; + return d == 0;]])], + [gl_cv_header_math_huge_val_works=yes], + [gl_cv_header_math_huge_val_works=no])]) + if test $gl_cv_header_math_huge_val_works = no; then + REPLACE_HUGE_VAL=1 + fi +]) + +AC_DEFUN([gl_MATH_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_MATH_H_DEFAULTS], +[ + GNULIB_CEILF=0; AC_SUBST([GNULIB_CEILF]) + GNULIB_CEILL=0; AC_SUBST([GNULIB_CEILL]) + GNULIB_FLOORF=0; AC_SUBST([GNULIB_FLOORF]) + GNULIB_FLOORL=0; AC_SUBST([GNULIB_FLOORL]) + GNULIB_FREXP=0; AC_SUBST([GNULIB_FREXP]) + GNULIB_FREXPL=0; AC_SUBST([GNULIB_FREXPL]) + GNULIB_ISFINITE=0; AC_SUBST([GNULIB_ISFINITE]) + GNULIB_ISINF=0; AC_SUBST([GNULIB_ISINF]) + GNULIB_ISNAN=0; AC_SUBST([GNULIB_ISNAN]) + GNULIB_ISNANF=0; AC_SUBST([GNULIB_ISNANF]) + GNULIB_ISNAND=0; AC_SUBST([GNULIB_ISNAND]) + GNULIB_ISNANL=0; AC_SUBST([GNULIB_ISNANL]) + GNULIB_LDEXPL=0; AC_SUBST([GNULIB_LDEXPL]) + GNULIB_MATHL=0; AC_SUBST([GNULIB_MATHL]) + GNULIB_ROUND=0; AC_SUBST([GNULIB_ROUND]) + GNULIB_ROUNDF=0; AC_SUBST([GNULIB_ROUNDF]) + GNULIB_ROUNDL=0; AC_SUBST([GNULIB_ROUNDL]) + GNULIB_SIGNBIT=0; AC_SUBST([GNULIB_SIGNBIT]) + GNULIB_TRUNC=0; AC_SUBST([GNULIB_TRUNC]) + GNULIB_TRUNCF=0; AC_SUBST([GNULIB_TRUNCF]) + GNULIB_TRUNCL=0; AC_SUBST([GNULIB_TRUNCL]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF]) + HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND]) + HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL]) + HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL]) + HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL]) + HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL]) + HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) + HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) + HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL]) + HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL]) + HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) + HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL]) + HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL]) + HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL]) + HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) + HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) + REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) + REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) + REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF]) + REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL]) + REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP]) + REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL]) + REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL]) + REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) + REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) + REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) + REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL]) + REPLACE_NAN=0; AC_SUBST([REPLACE_NAN]) + REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) + REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) + REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) + REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) + REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC]) + REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) +]) diff --git a/gnulib-m4/mbchar.m4 b/gnulib-m4/mbchar.m4 new file mode 100644 index 00000000..e73e2b4b --- /dev/null +++ b/gnulib-m4/mbchar.m4 @@ -0,0 +1,13 @@ +# mbchar.m4 serial 7 +dnl Copyright (C) 2005-2007 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl autoconf tests required for use of mbchar.m4 +dnl From Bruno Haible. + +AC_DEFUN([gl_MBCHAR], +[ + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) +]) diff --git a/gnulib-m4/mbiter.m4 b/gnulib-m4/mbiter.m4 new file mode 100644 index 00000000..88ba5694 --- /dev/null +++ b/gnulib-m4/mbiter.m4 @@ -0,0 +1,17 @@ +# mbiter.m4 serial 4 +dnl Copyright (C) 2005, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl autoconf tests required for use of mbiter.h +dnl From Bruno Haible. + +AC_DEFUN([gl_MBITER], +[ + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + dnl The following line is that so the user can test HAVE_MBRTOWC before + dnl #include "mbiter.h" or "mbuiter.h". It can be removed in 2010. + AC_REQUIRE([AC_FUNC_MBRTOWC]) + : +]) diff --git a/gnulib-m4/mbrtowc.m4 b/gnulib-m4/mbrtowc.m4 new file mode 100644 index 00000000..2fddcc8a --- /dev/null +++ b/gnulib-m4/mbrtowc.m4 @@ -0,0 +1,383 @@ +# mbrtowc.m4 serial 16 +dnl Copyright (C) 2001-2002, 2004-2005, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_MBRTOWC], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + gl_MBSTATE_T_BROKEN + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBRTOWC=1 + fi + AC_CHECK_FUNCS_ONCE([mbrtowc]) + if test $ac_cv_func_mbrtowc = no; then + HAVE_MBRTOWC=0 + fi + if test $HAVE_MBRTOWC != 0 && test $REPLACE_MBRTOWC != 1; then + gl_MBRTOWC_NULL_ARG + gl_MBRTOWC_RETVAL + gl_MBRTOWC_NUL_RETVAL + case "$gl_cv_func_mbrtowc_null_arg" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_NULL_ARG_BUG], [1], + [Define if the mbrtowc function has the NULL string argument bug.]) + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_retval" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1], + [Define if the mbrtowc function returns a wrong return value.]) + REPLACE_MBRTOWC=1 + ;; + esac + case "$gl_cv_func_mbrtowc_nul_retval" in + *yes) ;; + *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1], + [Define if the mbrtowc function does not return 0 for a NUL character.]) + REPLACE_MBRTOWC=1 + ;; + esac + fi + if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([mbrtowc]) + gl_PREREQ_MBRTOWC + fi +]) + +dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that +dnl redefines the semantics of the given mbstate_t type. +dnl Result is REPLACE_MBSTATE_T. +dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to +dnl avoid inconsistencies. + +AC_DEFUN([gl_MBSTATE_T_BROKEN], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + AC_CHECK_FUNCS_ONCE([mbsinit]) + AC_CHECK_FUNCS_ONCE([mbrtowc]) + if test $ac_cv_func_mbsinit = yes && test $ac_cv_func_mbrtowc = yes; then + gl_MBRTOWC_INCOMPLETE_STATE + gl_MBRTOWC_SANITYCHECK + REPLACE_MBSTATE_T=0 + case "$gl_cv_func_mbrtowc_incomplete_state" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + case "$gl_cv_func_mbrtowc_sanitycheck" in + *yes) ;; + *) REPLACE_MBSTATE_T=1 ;; + esac + else + REPLACE_MBSTATE_T=1 + fi + if test $REPLACE_MBSTATE_T = 1; then + gl_REPLACE_WCHAR_H + fi +]) + +dnl Test whether mbrtowc puts the state into non-initial state when parsing an +dnl incomplete multibyte character. +dnl Result is gl_cv_func_mbrtowc_incomplete_state. + +AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_JA]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc handles incomplete characters], + [gl_cv_func_mbrtowc_incomplete_state], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on AIX and OSF/1. + osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_JA != none; then + AC_TRY_RUN([ +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + if (mbsinit (&state)) + return 1; + } + return 0; +}], + [gl_cv_func_mbrtowc_incomplete_state=yes], + [gl_cv_func_mbrtowc_incomplete_state=no], + [:]) + fi + ]) +]) + +dnl Test whether mbrtowc works not worse than mbtowc. +dnl Result is gl_cv_func_mbrtowc_sanitycheck. + +AC_DEFUN([gl_MBRTOWC_SANITYCHECK], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_ZH_CN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc], + [gl_cv_func_mbrtowc_sanitycheck], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris 8. + solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_ZH_CN != none; then + AC_TRY_RUN([ +#include +#include +#include +#include +int main () +{ + /* This fails on Solaris 8: + mbrtowc returns 2, and sets wc to 0x00F0. + mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 3, 6, &state) != 4 + && mbtowc (&wc, input + 3, 6) == 4) + return 1; + } + return 0; +}], + [gl_cv_func_mbrtowc_sanitycheck=yes], + [gl_cv_func_mbrtowc_sanitycheck=no], + [:]) + fi + ]) +]) + +dnl Test whether mbrtowc supports a NULL string argument correctly. +dnl Result is gl_cv_func_mbrtowc_null_arg. + +AC_DEFUN([gl_MBRTOWC_NULL_ARG], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument], + [gl_cv_func_mbrtowc_null_arg], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on OSF/1. + osf*) gl_cv_func_mbrtowc_null_arg="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_null_arg="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR_UTF8 != none; then + AC_TRY_RUN([ +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + mbstate_t state; + wchar_t wc; + int ret; + + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + mbrtowc (&wc, NULL, 5, &state); + /* Check that wc was not modified. */ + if (wc != (wchar_t) 0xBADFACE) + return 1; + } + return 0; +}], [gl_cv_func_mbrtowc_null_arg=yes], [gl_cv_func_mbrtowc_null_arg=no], [:]) + fi + ]) +]) + +dnl Test whether mbrtowc, when parsing the end of a multibyte character, +dnl correctly returns the number of bytes that were needed to complete the +dnl character (not the total number of bytes of the multibyte character). +dnl Result is gl_cv_func_mbrtowc_retval. + +AC_DEFUN([gl_MBRTOWC_RETVAL], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR_UTF8]) + AC_REQUIRE([gt_LOCALE_JA]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc has a correct return value], + [gl_cv_func_mbrtowc_retval], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on HP-UX and Solaris. + hpux* | solaris*) gl_cv_func_mbrtowc_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_retval="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none; then + AC_TRY_RUN([ +#include +#include +#include +int main () +{ + /* This fails on Solaris. */ + if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 1) + return 1; + } + } + /* This fails on HP-UX 11.11. */ + if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) + { + char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) + { + input[1] = '\0'; + if (mbrtowc (&wc, input + 2, 5, &state) != 2) + return 1; + } + } + return 0; +}], + [gl_cv_func_mbrtowc_retval=yes], + [gl_cv_func_mbrtowc_retval=no], + [:]) + fi + ]) +]) + +dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0. +dnl Result is gl_cv_func_mbrtowc_nul_retval. + +AC_DEFUN([gl_MBRTOWC_NUL_RETVAL], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_ZH_CN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character], + [gl_cv_func_mbrtowc_nul_retval], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris 8 and 9. + solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_ZH_CN != none; then + AC_TRY_RUN([ +#include +#include +#include +int main () +{ + /* This fails on Solaris 8 and 9. */ + if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) + { + mbstate_t state; + wchar_t wc; + + memset (&state, '\0', sizeof (mbstate_t)); + if (mbrtowc (&wc, "", 1, &state) != 0) + return 1; + } + return 0; +}], + [gl_cv_func_mbrtowc_nul_retval=yes], + [gl_cv_func_mbrtowc_nul_retval=no], + [:]) + fi + ]) +]) + +# Prerequisites of lib/mbrtowc.c. +AC_DEFUN([gl_PREREQ_MBRTOWC], [ + : +]) + + +dnl From Paul Eggert + +dnl This override of an autoconf macro can be removed when autoconf 2.60 or +dnl newer can be assumed everywhere. + +m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.60]),[-1],[ +AC_DEFUN([AC_FUNC_MBRTOWC], +[ + dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60. + AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared], + gl_cv_func_mbrtowc, + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[wchar_t wc; + char const s[] = ""; + size_t n = 1; + mbstate_t state; + return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])], + gl_cv_func_mbrtowc=yes, + gl_cv_func_mbrtowc=no)]) + if test $gl_cv_func_mbrtowc = yes; then + AC_DEFINE([HAVE_MBRTOWC], [1], + [Define to 1 if mbrtowc and mbstate_t are properly declared.]) + fi +]) +]) diff --git a/gnulib-m4/mbsinit.m4 b/gnulib-m4/mbsinit.m4 new file mode 100644 index 00000000..03b055cd --- /dev/null +++ b/gnulib-m4/mbsinit.m4 @@ -0,0 +1,30 @@ +# mbsinit.m4 serial 3 +dnl Copyright (C) 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_MBSINIT], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_REQUIRE([AC_TYPE_MBSTATE_T]) + gl_MBSTATE_T_BROKEN + if test $REPLACE_MBSTATE_T = 1; then + REPLACE_MBSINIT=1 + fi + AC_CHECK_FUNCS_ONCE([mbsinit]) + if test $ac_cv_func_mbsinit = no; then + HAVE_MBSINIT=0 + fi + if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([mbsinit]) + gl_PREREQ_MBSINIT + fi +]) + +# Prerequisites of lib/mbsinit.c. +AC_DEFUN([gl_PREREQ_MBSINIT], [ + : +]) diff --git a/gnulib-m4/mbstate_t.m4 b/gnulib-m4/mbstate_t.m4 new file mode 100644 index 00000000..d4ec6f0f --- /dev/null +++ b/gnulib-m4/mbstate_t.m4 @@ -0,0 +1,34 @@ +# mbstate_t.m4 serial 12 +dnl Copyright (C) 2000-2002, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# From Paul Eggert. + +# BeOS 5 has but does not define mbstate_t, +# so you can't declare an object of that type. +# Check for this incompatibility with Standard C. + +# AC_TYPE_MBSTATE_T +# ----------------- +AC_DEFUN([AC_TYPE_MBSTATE_T], +[ + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl for HP-UX 11.11 + + AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [AC_INCLUDES_DEFAULT[ +# include ]], + [[mbstate_t x; return sizeof x;]])], + [ac_cv_type_mbstate_t=yes], + [ac_cv_type_mbstate_t=no])]) + if test $ac_cv_type_mbstate_t = yes; then + AC_DEFINE([HAVE_MBSTATE_T], [1], + [Define to 1 if declares mbstate_t.]) + else + AC_DEFINE([mbstate_t], [int], + [Define to a type if does not define.]) + fi +]) diff --git a/gnulib-m4/memchr.m4 b/gnulib-m4/memchr.m4 new file mode 100644 index 00000000..1194bac2 --- /dev/null +++ b/gnulib-m4/memchr.m4 @@ -0,0 +1,86 @@ +# memchr.m4 serial 7 +dnl Copyright (C) 2002, 2003, 2004, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN_ONCE([gl_FUNC_MEMCHR], +[ + dnl Check for prerequisites for memory fence checks. + gl_FUNC_MMAP_ANON + AC_CHECK_HEADERS_ONCE([sys/mman.h]) + AC_CHECK_FUNCS_ONCE([mprotect]) + + dnl These days, we assume memchr is present. But just in case... + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REPLACE_FUNCS([memchr]) + if test $ac_cv_func_memchr = no; then + gl_PREREQ_MEMCHR + REPLACE_MEMCHR=1 + fi + + if test $ac_cv_func_memchr = yes; then + # Detect platform-specific bugs in some versions of glibc: + # memchr should not dereference anything with length 0 + # http://bugzilla.redhat.com/499689 + # memchr should not dereference overestimated length after a match + # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 + # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 + # Assume that memchr works on platforms that lack mprotect. + AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], + [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ +#include +#if HAVE_SYS_MMAN_H +# include +# include +# include +# include +# ifndef MAP_FILE +# define MAP_FILE 0 +# endif +#endif +]], [[ + char *fence = NULL; +#if HAVE_SYS_MMAN_H && HAVE_MPROTECT +# if HAVE_MAP_ANONYMOUS + const int flags = MAP_ANONYMOUS | MAP_PRIVATE; + const int fd = -1; +# else /* !HAVE_MAP_ANONYMOUS */ + const int flags = MAP_FILE | MAP_PRIVATE; + int fd = open ("/dev/zero", O_RDONLY, 0666); + if (fd >= 0) +# endif + { + int pagesize = getpagesize (); + char *two_pages = + (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, + flags, fd, 0); + if (two_pages != (char *)(-1) + && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) + fence = two_pages + pagesize; + } +#endif + if (fence) + { + if (memchr (fence, 0, 0)) + return 1; + strcpy (fence - 9, "12345678"); + if (memchr (fence - 9, 0, 79) != fence - 1) + return 2; + } + return 0; +]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], + [dnl Be pessimistic for now. + gl_cv_func_memchr_works="guessing no"])]) + if test "$gl_cv_func_memchr_works" != yes; then + gl_PREREQ_MEMCHR + REPLACE_MEMCHR=1 + AC_LIBOBJ([memchr]) + fi + fi +]) + +# Prerequisites of lib/memchr.c. +AC_DEFUN([gl_PREREQ_MEMCHR], [ + AC_CHECK_HEADERS([bp-sym.h]) +]) diff --git a/gnulib-m4/minmax.m4 b/gnulib-m4/minmax.m4 new file mode 100644 index 00000000..d2993fba --- /dev/null +++ b/gnulib-m4/minmax.m4 @@ -0,0 +1,41 @@ +# minmax.m4 serial 3 +dnl Copyright (C) 2005, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_PREREQ([2.52]) + +AC_DEFUN([gl_MINMAX], +[ + AC_REQUIRE([gl_PREREQ_MINMAX]) +]) + +# Prerequisites of lib/minmax.h. +AC_DEFUN([gl_PREREQ_MINMAX], +[ + gl_MINMAX_IN_HEADER([limits.h]) + gl_MINMAX_IN_HEADER([sys/param.h]) +]) + +dnl gl_MINMAX_IN_HEADER(HEADER) +dnl The parameter has to be a literal header name; it cannot be macro, +dnl nor a shell variable. (Because autoheader collects only AC_DEFINE +dnl invocations with a literal macro name.) +AC_DEFUN([gl_MINMAX_IN_HEADER], +[ + m4_pushdef([header], AS_TR_SH([$1])) + m4_pushdef([HEADER], AS_TR_CPP([$1])) + AC_CACHE_CHECK([whether <$1> defines MIN and MAX], + [gl_cv_minmax_in_]header, + [AC_TRY_COMPILE([#include <$1> +int x = MIN (42, 17);], [], + [gl_cv_minmax_in_]header[=yes], + [gl_cv_minmax_in_]header[=no])]) + if test $gl_cv_minmax_in_[]header = yes; then + AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, + [Define to 1 if <$1> defines the MIN and MAX macros.]) + fi + m4_popdef([HEADER]) + m4_popdef([header]) +]) diff --git a/gnulib-m4/mmap-anon.m4 b/gnulib-m4/mmap-anon.m4 new file mode 100644 index 00000000..14b6270d --- /dev/null +++ b/gnulib-m4/mmap-anon.m4 @@ -0,0 +1,59 @@ +# mmap-anon.m4 serial 8 +dnl Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Detect how mmap can be used to create anonymous (not file-backed) memory +# mappings. +# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS +# and MAP_ANON exist and have the same value. +# - On HP-UX, only MAP_ANONYMOUS exists. +# - On MacOS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists. +# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be +# used. + +AC_DEFUN([gl_FUNC_MMAP_ANON], +[ + dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57. + AC_REQUIRE([AC_PROG_CPP]) + AC_REQUIRE([AC_PROG_EGREP]) + + dnl Persuade glibc to define MAP_ANONYMOUS. + AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) + + # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it + # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is + # irrelevant for anonymous mappings. + AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no]) + + # Try to allow MAP_ANONYMOUS. + gl_have_mmap_anonymous=no + if test $gl_have_mmap = yes; then + AC_MSG_CHECKING([for MAP_ANONYMOUS]) + AC_EGREP_CPP([I cant identify this map.], [ +#include +#ifdef MAP_ANONYMOUS + I cant identify this map. +#endif +], + [gl_have_mmap_anonymous=yes]) + if test $gl_have_mmap_anonymous != yes; then + AC_EGREP_CPP([I cant identify this map.], [ +#include +#ifdef MAP_ANON + I cant identify this map. +#endif +], + [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON], + [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.]) + gl_have_mmap_anonymous=yes]) + fi + AC_MSG_RESULT([$gl_have_mmap_anonymous]) + if test $gl_have_mmap_anonymous = yes; then + AC_DEFINE([HAVE_MAP_ANONYMOUS], [1], + [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including + config.h and .]) + fi + fi +]) diff --git a/gnulib-m4/multiarch.m4 b/gnulib-m4/multiarch.m4 new file mode 100644 index 00000000..ec377bac --- /dev/null +++ b/gnulib-m4/multiarch.m4 @@ -0,0 +1,65 @@ +# multiarch.m4 serial 5 +dnl Copyright (C) 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Determine whether the compiler is or may be producing universal binaries. +# +# On MacOS X 10.5 and later systems, the user can create libraries and +# executables that work on multiple system types--known as "fat" or +# "universal" binaries--by specifying multiple '-arch' options to the +# compiler but only a single '-arch' option to the preprocessor. Like +# this: +# +# ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +# CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ +# CPP="gcc -E" CXXCPP="g++ -E" +# +# Detect this situation and set the macro AA_APPLE_UNIVERSAL_BUILD at the +# beginning of config.h and set APPLE_UNIVERSAL_BUILD accordingly. + +AC_DEFUN_ONCE([gl_MULTIARCH], +[ + dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. + gl_cv_c_multiarch=no + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE( + [[#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + ]])], + [ + dnl Check for potential -arch flags. It is not universal unless + dnl there are at least two -arch flags with different values. + arch= + prev= + for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do + if test -n "$prev"; then + case $word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$arch" || test "$arch" = "$word"; then + arch="$word" + else + gl_cv_c_multiarch=yes + fi + ;; + esac + prev= + else + if test "x$word" = "x-arch"; then + prev=arch + fi + fi + done + ]) + if test $gl_cv_c_multiarch = yes; then + AC_DEFINE([AA_APPLE_UNIVERSAL_BUILD], [1], + [Define if the compiler is building for multiple architectures of Apple platforms at once.]) + APPLE_UNIVERSAL_BUILD=1 + else + APPLE_UNIVERSAL_BUILD=0 + fi + AC_SUBST([APPLE_UNIVERSAL_BUILD]) +]) diff --git a/gnulib-m4/nocrash.m4 b/gnulib-m4/nocrash.m4 new file mode 100644 index 00000000..8626ea0b --- /dev/null +++ b/gnulib-m4/nocrash.m4 @@ -0,0 +1,102 @@ +# nocrash.m4 serial 2 +dnl Copyright (C) 2005, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini. + +AC_PREREQ([2.13]) + +dnl Expands to some code for use in .c programs that will cause the configure +dnl test to exit instead of crashing. This is useful to avoid triggering +dnl action from a background debugger and to avoid core dumps. +dnl Usage: ... +dnl ]GL_NOCRASH[ +dnl ... +dnl int main() { nocrash_init(); ... } +AC_DEFUN([GL_NOCRASH],[[ +#include +#if defined __MACH__ && defined __APPLE__ +/* Avoid a crash on MacOS X. */ +#include +#include +#include +#include +#include +#include +/* The exception port on which our thread listens. */ +static mach_port_t our_exception_port; +/* The main function of the thread listening for exceptions of type + EXC_BAD_ACCESS. */ +static void * +mach_exception_thread (void *arg) +{ + /* Buffer for a message to be received. */ + struct { + mach_msg_header_t head; + mach_msg_body_t msgh_body; + char data[1024]; + } msg; + mach_msg_return_t retval; + /* Wait for a message on the exception port. */ + retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), + our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); + if (retval != MACH_MSG_SUCCESS) + abort (); + exit (1); +} +static void +nocrash_init (void) +{ + mach_port_t self = mach_task_self (); + /* Allocate a port on which the thread shall listen for exceptions. */ + if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) + == KERN_SUCCESS) { + /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ + if (mach_port_insert_right (self, our_exception_port, our_exception_port, + MACH_MSG_TYPE_MAKE_SEND) + == KERN_SUCCESS) { + /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting + for us. */ + exception_mask_t mask = EXC_MASK_BAD_ACCESS; + /* Create the thread listening on the exception port. */ + pthread_attr_t attr; + pthread_t thread; + if (pthread_attr_init (&attr) == 0 + && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 + && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { + pthread_attr_destroy (&attr); + /* Replace the exception port info for these exceptions with our own. + Note that we replace the exception port for the entire task, not only + for a particular thread. This has the effect that when our exception + port gets the message, the thread specific exception port has already + been asked, and we don't need to bother about it. + See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ + task_set_exception_ports (self, mask, our_exception_port, + EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); + } + } + } +} +#else +/* Avoid a crash on POSIX systems. */ +#include +/* A POSIX signal handler. */ +static void +exception_handler (int sig) +{ + exit (1); +} +static void +nocrash_init (void) +{ +#ifdef SIGSEGV + signal (SIGSEGV, exception_handler); +#endif +#ifdef SIGBUS + signal (SIGBUS, exception_handler); +#endif +} +#endif +]]) diff --git a/gnulib-m4/printf-frexp.m4 b/gnulib-m4/printf-frexp.m4 new file mode 100644 index 00000000..fa0aa158 --- /dev/null +++ b/gnulib-m4/printf-frexp.m4 @@ -0,0 +1,45 @@ +# printf-frexp.m4 serial 3 +dnl Copyright (C) 2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to define printf_frexp() without linking with libm. + +AC_DEFUN([gl_FUNC_PRINTF_FREXP], +[ + AC_CACHE_CHECK([whether frexp can be used without linking with libm], + [gl_cv_func_frexp_no_libm], + [ + AC_TRY_LINK([#include + double x; + int y;], + [return frexp (x, &y) < 1;], + [gl_cv_func_frexp_no_libm=yes], + [gl_cv_func_frexp_no_libm=no]) + ]) + if test $gl_cv_func_frexp_no_libm = yes; then + gl_FUNC_FREXP_WORKS + case "$gl_cv_func_frexp_works" in + *yes) + AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], + [Define if the frexp function is available in libc.]) + ;; + esac + fi + + AC_CACHE_CHECK([whether ldexp can be used without linking with libm], + [gl_cv_func_ldexp_no_libm], + [ + AC_TRY_LINK([#include + double x; + int y;], + [return ldexp (x, y) < 1;], + [gl_cv_func_ldexp_no_libm=yes], + [gl_cv_func_ldexp_no_libm=no]) + ]) + if test $gl_cv_func_ldexp_no_libm = yes; then + AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1], + [Define if the ldexp function is available in libc.]) + fi +]) diff --git a/gnulib-m4/printf-frexpl.m4 b/gnulib-m4/printf-frexpl.m4 new file mode 100644 index 00000000..f2eb2004 --- /dev/null +++ b/gnulib-m4/printf-frexpl.m4 @@ -0,0 +1,64 @@ +# printf-frexpl.m4 serial 6 +dnl Copyright (C) 2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Check how to define printf_frexpl() without linking with libm. + +AC_DEFUN([gl_FUNC_PRINTF_FREXPL], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + dnl Subset of gl_FUNC_FREXPL_NO_LIBM. + AC_CACHE_CHECK([whether frexpl can be used without linking with libm], + [gl_cv_func_frexpl_no_libm], + [ + AC_TRY_LINK([#include + long double x; + int y;], + [return frexpl (x, &y) < 1;], + [gl_cv_func_frexpl_no_libm=yes], + [gl_cv_func_frexpl_no_libm=no]) + ]) + if test $gl_cv_func_frexpl_no_libm = yes; then + gl_FUNC_FREXPL_WORKS + case "$gl_cv_func_frexpl_works" in + *yes) gl_func_frexpl_no_libm=yes ;; + *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; + esac + else + gl_func_frexpl_no_libm=no + dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. + REPLACE_FREXPL=1 + fi + if test $gl_func_frexpl_no_libm = yes; then + AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], + [Define if the frexpl function is available in libc.]) + dnl Also check whether it's declared. + dnl MacOS X 10.3 has frexpl() in libc but doesn't declare it in . + AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [#include ]) + fi + + AC_CACHE_CHECK([whether ldexpl can be used without linking with libm], + [gl_cv_func_ldexpl_no_libm], + [ + AC_TRY_LINK([#include + long double x; + int y;], + [return ldexpl (x, y) < 1;], + [gl_cv_func_ldexpl_no_libm=yes], + [gl_cv_func_ldexpl_no_libm=no]) + ]) + if test $gl_cv_func_ldexpl_no_libm = yes; then + gl_FUNC_LDEXPL_WORKS + case "$gl_cv_func_ldexpl_works" in + *yes) + AC_DEFINE([HAVE_LDEXPL_IN_LIBC], [1], + [Define if the ldexpl function is available in libc.]) + dnl Also check whether it's declared. + dnl MacOS X 10.3 has ldexpl() in libc but doesn't declare it in . + AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [#include ]) + ;; + esac + fi +]) diff --git a/gnulib-m4/printf.m4 b/gnulib-m4/printf.m4 new file mode 100644 index 00000000..87aa45c5 --- /dev/null +++ b/gnulib-m4/printf.m4 @@ -0,0 +1,1416 @@ +# printf.m4 serial 33 +dnl Copyright (C) 2003, 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Test whether the *printf family of functions supports the 'j', 'z', 't', +dnl 'L' size specifiers. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_sizes_c99. + +AC_DEFUN([gl_PRINTF_SIZES_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports size specifiers as in C99], + [gl_cv_func_printf_sizes_c99], + [ + AC_TRY_RUN([ +#include +#include +#include +#include +#if HAVE_STDINT_H_WITH_UINTMAX +# include +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +# include +#endif +static char buf[100]; +int main () +{ +#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX + buf[0] = '\0'; + if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 + || strcmp (buf, "12345671 33") != 0) + return 1; +#endif + buf[0] = '\0'; + if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 + || strcmp (buf, "12345672 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 + || strcmp (buf, "12345673 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 + || strcmp (buf, "1.5 33") != 0) + return 1; + return 0; +}], [gl_cv_func_printf_sizes_c99=yes], [gl_cv_func_printf_sizes_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_printf_sizes_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; + darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_printf_sizes_c99="guessing no";; + openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[0-9]*) gl_cv_func_printf_sizes_c99="guessing no";; + solaris*) gl_cv_func_printf_sizes_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_sizes_c99="guessing no";; + netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_sizes_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports 'long double' +dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_long_double. + +AC_DEFUN([gl_PRINTF_LONG_DOUBLE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports 'long double' arguments], + [gl_cv_func_printf_long_double], + [ + AC_TRY_RUN([ +#include +#include +static char buf[10000]; +int main () +{ + buf[0] = '\0'; + if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.750000e+00 33") != 0) + return 1; + buf[0] = '\0'; + if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 + || strcmp (buf, "1.75 33") != 0) + return 1; + return 0; +}], [gl_cv_func_printf_long_double=yes], [gl_cv_func_printf_long_double=no], + [ +changequote(,)dnl + case "$host_os" in + beos*) gl_cv_func_printf_long_double="guessing no";; + mingw* | pw*) gl_cv_func_printf_long_double="guessing no";; + *) gl_cv_func_printf_long_double="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports infinite and NaN +dnl 'double' arguments and negative zero arguments in the %f, %e, %g +dnl directives. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_infinite. + +AC_DEFUN([gl_PRINTF_INFINITE], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], + [gl_cv_func_printf_infinite], + [ + AC_TRY_RUN([ +#include +#include +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static int +have_minus_zero () +{ + static double plus_zero = 0.0; + double minus_zero = - plus_zero; + return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; +} +static char buf[10000]; +static double zero = 0.0; +int main () +{ + if (sprintf (buf, "%f", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%f", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%f", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%e", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%e", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%e", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%g", 1.0 / 0.0) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%g", -1.0 / 0.0) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%g", zero / zero) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + /* This test fails on HP-UX 10.20. */ + if (have_minus_zero ()) + if (sprintf (buf, "%g", - zero) < 0 + || strcmp (buf, "-0") != 0) + return 1; + return 0; +}], [gl_cv_func_printf_infinite=yes], [gl_cv_func_printf_infinite=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_infinite="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; + darwin*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; + hpux*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_infinite="guessing no";; + netbsd*) gl_cv_func_printf_infinite="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_infinite="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports infinite and NaN +dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_infinite_long_double. + +AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_BIGENDIAN]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + dnl The user can set or unset the variable gl_printf_safe to indicate + dnl that he wishes a safe handling of non-IEEE-754 'long double' values. + if test -n "$gl_printf_safe"; then + AC_DEFINE([CHECK_PRINTF_SAFE], [1], + [Define if you wish *printf() functions that have a safe handling of + non-IEEE-754 'long double' values.]) + fi + case "$gl_cv_func_printf_long_double" in + *yes) + AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], + [gl_cv_func_printf_infinite_long_double], + [ + AC_TRY_RUN([ +]GL_NOCRASH[ +#include +#include +#include +static int +strisnan (const char *string, size_t start_index, size_t end_index) +{ + if (start_index < end_index) + { + if (string[start_index] == '-') + start_index++; + if (start_index + 3 <= end_index + && memcmp (string + start_index, "nan", 3) == 0) + { + start_index += 3; + if (start_index == end_index + || (string[start_index] == '(' && string[end_index - 1] == ')')) + return 1; + } + } + return 0; +} +static char buf[10000]; +static long double zeroL = 0.0L; +int main () +{ + nocrash_init(); + if (sprintf (buf, "%Lf", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Lf", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Le", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Le", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", 1.0L / 0.0L) < 0 + || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) + return 1; + if (sprintf (buf, "%Lg", -1.0L / 0.0L) < 0 + || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) + return 1; + if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; +#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { + /* Signalling NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-NaN. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Infinity. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Zero. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Unnormalized number. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } + { /* Pseudo-Denormal. */ + static union { unsigned int word[4]; long double value; } x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + if (sprintf (buf, "%Lf", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Le", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + if (sprintf (buf, "%Lg", x.value) < 0 + || !strisnan (buf, 0, strlen (buf))) + return 1; + } +#endif + return 0; +}], + [gl_cv_func_printf_infinite_long_double=yes], + [gl_cv_func_printf_infinite_long_double=no], + [ +changequote(,)dnl + case "$host_cpu" in + # Guess no on ia64, x86_64, i386. + ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; + *) + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_infinite_long_double="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_infinite_long_double="guessing no";; + darwin*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; + hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_printf_infinite_long_double="guessing no";; + netbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_infinite_long_double="guessing no";; + esac + ;; + esac +changequote([,])dnl + ]) + ]) + ;; + *) + gl_cv_func_printf_infinite_long_double="irrelevant" + ;; + esac +]) + +dnl Test whether the *printf family of functions supports the 'a' and 'A' +dnl conversion specifier for hexadecimal output of floating-point numbers. +dnl (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_a. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_A], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], + [gl_cv_func_printf_directive_a], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.922p+1 33") != 0 + && strcmp (buf, "0x3.244p+0 33") != 0 + && strcmp (buf, "0x6.488p-1 33") != 0 + && strcmp (buf, "0xc.91p-2 33") != 0)) + return 1; + if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 + || (strcmp (buf, "-0X1.922P+1 33") != 0 + && strcmp (buf, "-0X3.244P+0 33") != 0 + && strcmp (buf, "-0X6.488P-1 33") != 0 + && strcmp (buf, "-0XC.91P-2 33") != 0)) + return 1; + /* This catches a FreeBSD 6.1 bug: it doesn't round. */ + if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 + || (strcmp (buf, "0x1.83p+0 33") != 0 + && strcmp (buf, "0x3.05p-1 33") != 0 + && strcmp (buf, "0x6.0ap-2 33") != 0 + && strcmp (buf, "0xc.14p-3 33") != 0)) + return 1; + /* This catches a FreeBSD 6.1 bug. See + */ + if (sprintf (buf, "%010a %d", 1.0 / 0.0, 33, 44, 55) < 0 + || buf[0] == '0') + return 1; + /* This catches a MacOS X 10.3.9 (Darwin 7.9) bug. */ + if (sprintf (buf, "%.1a", 1.999) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + return 1; + /* This catches the same MacOS X 10.3.9 (Darwin 7.9) bug and also a + glibc 2.4 bug . */ + if (sprintf (buf, "%.1La", 1.999L) < 0 + || (strcmp (buf, "0x1.0p+1") != 0 + && strcmp (buf, "0x2.0p+0") != 0 + && strcmp (buf, "0x4.0p-1") != 0 + && strcmp (buf, "0x8.0p-2") != 0)) + return 1; + return 0; +}], [gl_cv_func_printf_directive_a=yes], [gl_cv_func_printf_directive_a=no], + [ + case "$host_os" in + # Guess yes on glibc >= 2.5 systems. + *-gnu*) + AC_EGREP_CPP([BZ2908], [ + #include + #ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2) + BZ2908 + #endif + #endif + ], + [gl_cv_func_printf_directive_a="guessing yes"], + [gl_cv_func_printf_directive_a="guessing no"]) + ;; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_a="guessing no";; + esac + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %F format +dnl directive. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_f. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_F], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'F' directive], + [gl_cv_func_printf_directive_f], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 + || strcmp (buf, "1234567.000000 33") != 0) + return 1; + if (sprintf (buf, "%F", 1.0 / 0.0) < 0 + || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) + return 1; + /* This catches a Cygwin 1.5.x bug. */ + if (sprintf (buf, "%.F", 1234.0) < 0 + || strcmp (buf, "1234") != 0) + return 1; + return 0; +}], [gl_cv_func_printf_directive_f=yes], [gl_cv_func_printf_directive_f=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on FreeBSD >= 6. + freebsd[1-5]*) gl_cv_func_printf_directive_f="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; + darwin*) gl_cv_func_printf_directive_f="guessing yes";; + # Guess yes on Solaris >= 2.10. + solaris2.[0-9]*) gl_cv_func_printf_directive_f="guessing no";; + solaris*) gl_cv_func_printf_directive_f="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_directive_f="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %n format +dnl directive. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_printf_directive_n. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_N], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'n' directive], + [gl_cv_func_printf_directive_n], + [ + AC_TRY_RUN([ +#include +#include +static char fmtstring[10]; +static char buf[100]; +int main () +{ + int count = -1; + /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) + support %n in format strings in read-only memory but not in writable + memory. */ + strcpy (fmtstring, "%d %n"); + if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 + || strcmp (buf, "123 ") != 0 + || count != 4) + return 1; + return 0; +}], [gl_cv_func_printf_directive_n=yes], [gl_cv_func_printf_directive_n=no], + [ +changequote(,)dnl + case "$host_os" in + *) gl_cv_func_printf_directive_n="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the %ls format +dnl directive and in particular, when a precision is specified, whether +dnl the functions stop converting the wide string argument when the number +dnl of bytes that have been produced by this conversion equals or exceeds +dnl the precision. +dnl Result is gl_cv_func_printf_directive_ls. + +AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the 'ls' directive], + [gl_cv_func_printf_directive_ls], + [ + AC_TRY_RUN([ +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include +#include +#include +int main () +{ + char buf[100]; + /* Test whether %ls works at all. + This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on + Cygwin 1.5. */ + { + static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "abc") != 0) + return 1; + } + /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an + assertion failure inside libc), but not on OpenBSD 4.0. */ + { + static const wchar_t wstring[] = { 'a', 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%ls", wstring) < 0 + || strcmp (buf, "a") != 0) + return 1; + } + /* Test whether precisions in %ls are supported as specified in ISO C 99 + section 7.19.6.1: + "If a precision is specified, no more than that many bytes are written + (including shift sequences, if any), and the array shall contain a + null wide character if, to equal the multibyte character sequence + length given by the precision, the function would need to access a + wide character one past the end of the array." + This test fails on Solaris 10. */ + { + static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; + buf[0] = '\0'; + if (sprintf (buf, "%.2ls", wstring) < 0 + || strcmp (buf, "ab") != 0) + return 1; + } + return 0; +}], [gl_cv_func_printf_directive_ls=yes], [gl_cv_func_printf_directive_ls=no], + [ +changequote(,)dnl + case "$host_os" in + openbsd*) gl_cv_func_printf_directive_ls="guessing no";; + irix*) gl_cv_func_printf_directive_ls="guessing no";; + solaris*) gl_cv_func_printf_directive_ls="guessing no";; + cygwin*) gl_cv_func_printf_directive_ls="guessing no";; + beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; + *) gl_cv_func_printf_directive_ls="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports POSIX/XSI format +dnl strings with positions. (POSIX:2001) +dnl Result is gl_cv_func_printf_positions. + +AC_DEFUN([gl_PRINTF_POSITIONS], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], + [gl_cv_func_printf_positions], + [ + AC_TRY_RUN([ +#include +#include +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +}], [gl_cv_func_printf_positions=yes], [gl_cv_func_printf_positions=no], + [ +changequote(,)dnl + case "$host_os" in + netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) + gl_cv_func_printf_positions="guessing no";; + beos*) gl_cv_func_printf_positions="guessing no";; + mingw* | pw*) gl_cv_func_printf_positions="guessing no";; + *) gl_cv_func_printf_positions="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports POSIX/XSI format +dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) +dnl Result is gl_cv_func_printf_flag_grouping. + +AC_DEFUN([gl_PRINTF_FLAG_GROUPING], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the grouping flag], + [gl_cv_func_printf_flag_grouping], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%'d %d", 1234567, 99) < 0 + || buf[strlen (buf) - 1] != '9') + return 1; + return 0; +}], [gl_cv_func_printf_flag_grouping=yes], [gl_cv_func_printf_flag_grouping=no], + [ +changequote(,)dnl + case "$host_os" in + cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; + netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; + mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; + *) gl_cv_func_printf_flag_grouping="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports the - flag correctly. +dnl (ISO C99.) See +dnl +dnl Result is gl_cv_func_printf_flag_leftadjust. + +AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], + [gl_cv_func_printf_flag_leftadjust], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + /* Check that a '-' flag is not annihilated by a negative width. */ + if (sprintf (buf, "a%-*sc", -3, "b") < 0 + || strcmp (buf, "ab c") != 0) + return 1; + return 0; +}], + [gl_cv_func_printf_flag_leftadjust=yes], + [gl_cv_func_printf_flag_leftadjust=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on HP-UX 11. + hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; + # Guess no on HP-UX 10 and older. + hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; + # Guess yes otherwise. + *) gl_cv_func_printf_flag_leftadjust="guessing yes";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports padding of non-finite +dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See +dnl +dnl Result is gl_cv_func_printf_flag_zero. + +AC_DEFUN([gl_PRINTF_FLAG_ZERO], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports the zero flag correctly], + [gl_cv_func_printf_flag_zero], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + if (sprintf (buf, "%010f", 1.0 / 0.0, 33, 44, 55) < 0 + || (strcmp (buf, " inf") != 0 + && strcmp (buf, " infinity") != 0)) + return 1; + return 0; +}], [gl_cv_func_printf_flag_zero=yes], [gl_cv_func_printf_flag_zero=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_flag_zero="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_flag_zero="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_flag_zero="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions supports large precisions. +dnl On mingw, precisions larger than 512 are treated like 512, in integer, +dnl floating-point or pointer output. On BeOS, precisions larger than 1044 +dnl crash the program. +dnl Result is gl_cv_func_printf_precision. + +AC_DEFUN([gl_PRINTF_PRECISION], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf supports large precisions], + [gl_cv_func_printf_precision], + [ + AC_TRY_RUN([ +#include +#include +static char buf[5000]; +int main () +{ +#ifdef __BEOS__ + /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ + return 1; +#endif + if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) + return 1; + return 0; +}], [gl_cv_func_printf_precision=yes], [gl_cv_func_printf_precision=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess no only on native Win32 and BeOS systems. + mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; + beos*) gl_cv_func_printf_precision="guessing no" ;; + *) gl_cv_func_printf_precision="guessing yes" ;; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the *printf family of functions recovers gracefully in case +dnl of an out-of-memory condition, or whether it crashes the entire program. +dnl Result is gl_cv_func_printf_enomem. + +AC_DEFUN([gl_PRINTF_ENOMEM], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gl_MULTIARCH]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether printf survives out-of-memory conditions], + [gl_cv_func_printf_enomem], + [ + gl_cv_func_printf_enomem="guessing no" + if test "$cross_compiling" = no; then + if test $APPLE_UNIVERSAL_BUILD = 0; then + AC_LANG_CONFTEST([AC_LANG_SOURCE([ +]GL_NOCRASH[ +changequote(,)dnl +#include +#include +#include +#include +#include +int main() +{ + struct rlimit limit; + int ret; + nocrash_init (); + /* Some printf implementations allocate temporary space with malloc. */ + /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ +#ifdef RLIMIT_DATA + if (getrlimit (RLIMIT_DATA, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_DATA, &limit) < 0) + return 77; +#endif + /* On Linux systems, malloc() is limited by RLIMIT_AS. */ +#ifdef RLIMIT_AS + if (getrlimit (RLIMIT_AS, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_AS, &limit) < 0) + return 77; +#endif + /* Some printf implementations allocate temporary space on the stack. */ +#ifdef RLIMIT_STACK + if (getrlimit (RLIMIT_STACK, &limit) < 0) + return 77; + if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) + limit.rlim_max = 5000000; + limit.rlim_cur = limit.rlim_max; + if (setrlimit (RLIMIT_STACK, &limit) < 0) + return 77; +#endif + ret = printf ("%.5000000f", 1.0); + return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); +} +changequote([,])dnl + ])]) + if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then + (./conftest + result=$? + if test $result != 0 && test $result != 77; then result=1; fi + exit $result + ) >/dev/null 2>/dev/null + case $? in + 0) gl_cv_func_printf_enomem="yes" ;; + 77) gl_cv_func_printf_enomem="guessing no" ;; + *) gl_cv_func_printf_enomem="no" ;; + esac + else + gl_cv_func_printf_enomem="guessing no" + fi + rm -fr conftest* + else + dnl A universal build on Apple MacOS X platforms. + dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. + dnl But we need a configuration result that is valid in both modes. + gl_cv_func_printf_enomem="guessing no" + fi + fi + if test "$gl_cv_func_printf_enomem" = "guessing no"; then +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Solaris. + solaris*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on AIX. + aix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on HP-UX/hppa. + hpux*) case "$host_cpu" in + hppa*) gl_cv_func_printf_enomem="guessing yes";; + *) gl_cv_func_printf_enomem="guessing no";; + esac + ;; + # Guess yes on IRIX. + irix*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on OSF/1. + osf*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_printf_enomem="guessing yes";; + # Guess yes on Haiku. + haiku*) gl_cv_func_printf_enomem="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_printf_enomem="guessing no";; + esac +changequote([,])dnl + fi + ]) +]) + +dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) +dnl Result is ac_cv_func_snprintf. + +AC_DEFUN([gl_SNPRINTF_PRESENCE], +[ + AC_CHECK_FUNCS_ONCE([snprintf]) +]) + +dnl Test whether the string produced by the snprintf function is always NUL +dnl terminated. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_snprintf_truncation_c99. + +AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether snprintf truncates the result as in C99], + [gl_cv_func_snprintf_truncation_c99], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + strcpy (buf, "ABCDEF"); + snprintf (buf, 3, "%d %d", 4567, 89); + if (memcmp (buf, "45\0DEF", 6) != 0) + return 1; + return 0; +}], [gl_cv_func_snprintf_truncation_c99=yes], [gl_cv_func_snprintf_truncation_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; + darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_snprintf_truncation_c99="guessing no";; + openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on HP-UX >= 11. + hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; + hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on OSF/1 >= 5. + osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; + osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_truncation_c99="guessing no";; + netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_truncation_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the return value of the snprintf function is the number +dnl of bytes (excluding the terminating NUL) that would have been produced +dnl if the buffer had been large enough. (ISO C99, POSIX:2001) +dnl For example, this test program fails on IRIX 6.5: +dnl --------------------------------------------------------------------- +dnl #include +dnl int main() +dnl { +dnl static char buf[8]; +dnl int retval = snprintf (buf, 3, "%d", 12345); +dnl return retval >= 0 && retval < 3; +dnl } +dnl --------------------------------------------------------------------- +dnl Result is gl_cv_func_snprintf_retval_c99. + +AC_DEFUN([gl_SNPRINTF_RETVAL_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], + [gl_cv_func_snprintf_retval_c99], + [ + AC_TRY_RUN([ +#include +#include +static char buf[100]; +int main () +{ + strcpy (buf, "ABCDEF"); + if (snprintf (buf, 3, "%d %d", 4567, 89) != 7) + return 1; + return 0; +}], [gl_cv_func_snprintf_retval_c99=yes], [gl_cv_func_snprintf_retval_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_snprintf_retval_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; + darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on OpenBSD >= 3.9. + openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) + gl_cv_func_snprintf_retval_c99="guessing no";; + openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5]*) gl_cv_func_snprintf_retval_c99="guessing no";; + solaris*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; + aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_retval_c99="guessing no";; + netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_retval_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the snprintf function supports the %n format directive +dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) +dnl Result is gl_cv_func_snprintf_directive_n. + +AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], + [gl_cv_func_snprintf_directive_n], + [ + AC_TRY_RUN([ +#include +#include +static char fmtstring[10]; +static char buf[100]; +int main () +{ + int count = -1; + /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) + support %n in format strings in read-only memory but not in writable + memory. */ + strcpy (fmtstring, "%d %n"); + snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); + if (count != 6) + return 1; + return 0; +}], [gl_cv_func_snprintf_directive_n=yes], [gl_cv_func_snprintf_directive_n=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_snprintf_directive_n="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; + darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5]*) gl_cv_func_snprintf_directive_n="guessing no";; + solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; + aix*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on OSF/1 >= 5. + osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; + osf*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_snprintf_directive_n="guessing no";; + netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_snprintf_directive_n="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_snprintf_directive_n="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl Test whether the snprintf function, when passed a size = 1, writes any +dnl output without bounds in this case, behaving like sprintf. This is the +dnl case on Linux libc5. +dnl Result is gl_cv_func_snprintf_size1. + +AC_DEFUN([gl_SNPRINTF_SIZE1], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_CACHE_CHECK([whether snprintf respects a size of 1], + [gl_cv_func_snprintf_size1], + [ + AC_TRY_RUN([ +#include +int main() +{ + static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; + snprintf (buf, 1, "%d", 12345); + return buf[1] != 'E'; +}], + [gl_cv_func_snprintf_size1=yes], + [gl_cv_func_snprintf_size1=no], + [gl_cv_func_snprintf_size1="guessing yes"]) + ]) +]) + +dnl Test whether the vsnprintf function, when passed a zero size, produces no +dnl output. (ISO C99, POSIX:2001) +dnl For example, snprintf nevertheless writes a NUL byte in this case +dnl on OSF/1 5.1: +dnl --------------------------------------------------------------------- +dnl #include +dnl int main() +dnl { +dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; +dnl snprintf (buf, 0, "%d", 12345); +dnl return buf[0] != 'D'; +dnl } +dnl --------------------------------------------------------------------- +dnl And vsnprintf writes any output without bounds in this case, behaving like +dnl vsprintf, on HP-UX 11 and OSF/1 5.1: +dnl --------------------------------------------------------------------- +dnl #include +dnl #include +dnl static int my_snprintf (char *buf, int size, const char *format, ...) +dnl { +dnl va_list args; +dnl int ret; +dnl va_start (args, format); +dnl ret = vsnprintf (buf, size, format, args); +dnl va_end (args); +dnl return ret; +dnl } +dnl int main() +dnl { +dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; +dnl my_snprintf (buf, 0, "%d", 12345); +dnl return buf[0] != 'D'; +dnl } +dnl --------------------------------------------------------------------- +dnl Result is gl_cv_func_vsnprintf_zerosize_c99. + +AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], + [gl_cv_func_vsnprintf_zerosize_c99], + [ + AC_TRY_RUN([ +#include +#include +static int my_snprintf (char *buf, int size, const char *format, ...) +{ + va_list args; + int ret; + va_start (args, format); + ret = vsnprintf (buf, size, format, args); + va_end (args); + return ret; +} +int main() +{ + static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; + my_snprintf (buf, 0, "%d", 12345); + return buf[0] != 'D'; +}], + [gl_cv_func_vsnprintf_zerosize_c99=yes], + [gl_cv_func_vsnprintf_zerosize_c99=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc systems. + *-gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on FreeBSD >= 5. + freebsd[1-4]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on MacOS X >= 10.3. + darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on Cygwin. + cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on Solaris >= 2.6. + solaris2.[0-5]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on AIX >= 4. + aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on IRIX >= 6.5. + irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on NetBSD >= 3. + netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) + gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on BeOS. + beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # Guess yes on mingw. + mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; + # If we don't know, assume the worst. + *) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; + esac +changequote([,])dnl + ]) + ]) +]) + +dnl The results of these tests on various platforms are: +dnl +dnl 1 = gl_PRINTF_SIZES_C99 +dnl 2 = gl_PRINTF_LONG_DOUBLE +dnl 3 = gl_PRINTF_INFINITE +dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE +dnl 5 = gl_PRINTF_DIRECTIVE_A +dnl 6 = gl_PRINTF_DIRECTIVE_F +dnl 7 = gl_PRINTF_DIRECTIVE_N +dnl 8 = gl_PRINTF_DIRECTIVE_LS +dnl 9 = gl_PRINTF_POSITIONS +dnl 10 = gl_PRINTF_FLAG_GROUPING +dnl 11 = gl_PRINTF_FLAG_LEFTADJUST +dnl 12 = gl_PRINTF_FLAG_ZERO +dnl 13 = gl_PRINTF_PRECISION +dnl 14 = gl_PRINTF_ENOMEM +dnl 15 = gl_SNPRINTF_PRESENCE +dnl 16 = gl_SNPRINTF_TRUNCATION_C99 +dnl 17 = gl_SNPRINTF_RETVAL_C99 +dnl 18 = gl_SNPRINTF_DIRECTIVE_N +dnl 19 = gl_SNPRINTF_SIZE1 +dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99 +dnl +dnl 1 = checking whether printf supports size specifiers as in C99... +dnl 2 = checking whether printf supports 'long double' arguments... +dnl 3 = checking whether printf supports infinite 'double' arguments... +dnl 4 = checking whether printf supports infinite 'long double' arguments... +dnl 5 = checking whether printf supports the 'a' and 'A' directives... +dnl 6 = checking whether printf supports the 'F' directive... +dnl 7 = checking whether printf supports the 'n' directive... +dnl 8 = checking whether printf supports the 'ls' directive... +dnl 9 = checking whether printf supports POSIX/XSI format strings with positions... +dnl 10 = checking whether printf supports the grouping flag... +dnl 11 = checking whether printf supports the left-adjust flag correctly... +dnl 12 = checking whether printf supports the zero flag correctly... +dnl 13 = checking whether printf supports large precisions... +dnl 14 = checking whether printf survives out-of-memory conditions... +dnl 15 = checking for snprintf... +dnl 16 = checking whether snprintf truncates the result as in C99... +dnl 17 = checking whether snprintf returns a byte count as in C99... +dnl 18 = checking whether snprintf fully supports the 'n' directive... +dnl 19 = checking whether snprintf respects a size of 1... +dnl 20 = checking whether vsnprintf respects a zero size as in C99... +dnl +dnl . = yes, # = no. +dnl +dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 +dnl glibc 2.5 . . . . . . . . . . . . . . . . . . . . +dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . . . +dnl FreeBSD 5.4, 6.1 . . . . # . . . . . . # . # . . . . . . +dnl MacOS X 10.3.9 . . . . # . . . . . . # . # . . . . . . +dnl OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . . +dnl Cygwin 1.7.0 (2009) . . . # . . . ? . . . . . ? . . . . . . +dnl Cygwin 1.5.25 (2008) . . . # # . . # . . . . . # . . . . . . +dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . . +dnl Solaris 10 . . # # # . . # . . . # . . . . . . . . +dnl Solaris 2.6 ... 9 # . # # # # . # . . . # . . . . . . . . +dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # # +dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . . +dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . . . . . +dnl HP-UX 11.31 . . . . # . . . . . . # . . . . # # . . +dnl HP-UX 11.{00,11,23} # . . . # # . . . . . # . . . . # # . # +dnl HP-UX 10.20 # . # . # # . ? . . # # . . . . # # ? # +dnl IRIX 6.5 # . # # # # . # . . . # . . . . # . . . +dnl OSF/1 5.1 # . # # # # . . . . . # . . . . # . . # +dnl OSF/1 4.0d # . # # # # . . . . . # . . # # # # # # +dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ? +dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . . +dnl Haiku . . . # # # . # . . . . . ? . . . . . . +dnl BeOS # # . # # # . ? # . ? . # ? . . . . . . +dnl mingw # # # # # # . . # # . # # ? . # # # . . diff --git a/gnulib-m4/relocatable-lib.m4 b/gnulib-m4/relocatable-lib.m4 new file mode 100644 index 00000000..fd99cdae --- /dev/null +++ b/gnulib-m4/relocatable-lib.m4 @@ -0,0 +1,56 @@ +# relocatable-lib.m4 serial 4 +dnl Copyright (C) 2003, 2005-2007, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Support for relocatable libraries. +AC_DEFUN([gl_RELOCATABLE_LIBRARY], +[ + AC_REQUIRE([gl_RELOCATABLE_LIBRARY_BODY]) + if test $RELOCATABLE = yes; then + AC_LIBOBJ([relocatable]) + fi +]) +AC_DEFUN([gl_RELOCATABLE_LIBRARY_BODY], +[ + AC_REQUIRE([gl_RELOCATABLE_NOP]) + dnl Easier to put this here once, instead of into the DEFS of each Makefile. + if test "X$prefix" = "XNONE"; then + reloc_final_prefix="$ac_default_prefix" + else + reloc_final_prefix="$prefix" + fi + AC_DEFINE_UNQUOTED([INSTALLPREFIX], ["${reloc_final_prefix}"], + [Define to the value of ${prefix}, as a string.]) + if test $RELOCATABLE = yes; then + AC_DEFINE([ENABLE_RELOCATABLE], [1], + [Define to 1 if the package shall run at any location in the filesystem.]) + fi +]) + +dnl Like gl_RELOCATABLE_LIBRARY, except prepare for separate compilation +dnl (no AC_LIBOBJ). +AC_DEFUN([gl_RELOCATABLE_LIBRARY_SEPARATE], +[ + AC_REQUIRE([gl_RELOCATABLE_LIBRARY_BODY]) +]) + +dnl Support for relocatable packages for which it is a nop. +AC_DEFUN([gl_RELOCATABLE_NOP], +[ + AC_MSG_CHECKING([whether to activate relocatable installation]) + AC_ARG_ENABLE([relocatable], + [ --enable-relocatable install a package that can be moved in the filesystem], + [if test "$enableval" != no; then + RELOCATABLE=yes + else + RELOCATABLE=no + fi + ], RELOCATABLE=no) + AC_SUBST([RELOCATABLE]) + AC_MSG_RESULT([$RELOCATABLE]) +]) + diff --git a/gnulib-m4/setenv.m4 b/gnulib-m4/setenv.m4 new file mode 100644 index 00000000..e28407ee --- /dev/null +++ b/gnulib-m4/setenv.m4 @@ -0,0 +1,71 @@ +# setenv.m4 serial 11 +dnl Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_SETENV], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([setenv]) + if test $ac_cv_func_setenv = no; then + HAVE_SETENV=0 + AC_LIBOBJ([setenv]) + gl_PREREQ_SETENV + fi +]) + +# Like gl_FUNC_SETENV, except prepare for separate compilation (no AC_LIBOBJ). +AC_DEFUN([gl_FUNC_SETENV_SEPARATE], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([setenv]) + if test $ac_cv_func_setenv = no; then + HAVE_SETENV=0 + fi + gl_PREREQ_SETENV +]) + +AC_DEFUN([gl_FUNC_UNSETENV], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + AC_CHECK_FUNCS([unsetenv]) + if test $ac_cv_func_unsetenv = no; then + HAVE_UNSETENV=0 + AC_LIBOBJ([unsetenv]) + gl_PREREQ_UNSETENV + else + AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], + [AC_TRY_COMPILE([#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +int unsetenv (const char *name); +#else +int unsetenv(); +#endif +], , gt_cv_func_unsetenv_ret='int', gt_cv_func_unsetenv_ret='void')]) + if test $gt_cv_func_unsetenv_ret = 'void'; then + VOID_UNSETENV=1 + fi + fi +]) + +# Prerequisites of lib/setenv.c. +AC_DEFUN([gl_PREREQ_SETENV], +[ + AC_REQUIRE([AC_FUNC_ALLOCA]) + AC_REQUIRE([gl_ENVIRON]) + AC_CHECK_HEADERS_ONCE([unistd.h]) + AC_CHECK_HEADERS([search.h]) + AC_CHECK_FUNCS([tsearch]) +]) + +# Prerequisites of lib/unsetenv.c. +AC_DEFUN([gl_PREREQ_UNSETENV], +[ + AC_REQUIRE([gl_ENVIRON]) + AC_CHECK_HEADERS_ONCE([unistd.h]) +]) diff --git a/gnulib-m4/signbit.m4 b/gnulib-m4/signbit.m4 new file mode 100644 index 00000000..233bf2a3 --- /dev/null +++ b/gnulib-m4/signbit.m4 @@ -0,0 +1,287 @@ +# signbit.m4 serial 6 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_SIGNBIT], +[ + AC_REQUIRE([gl_MATH_H_DEFAULTS]) + AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit], + [ + AC_TRY_RUN([ +#include +/* If signbit is defined as a function, don't use it, since calling it for + 'float' or 'long double' arguments would involve conversions. + If signbit is not declared at all but exists as a library function, don't + use it, since the prototype may not match. + If signbit is not declared at all but exists as a compiler built-in, don't + use it, since it's preferable to use __builtin_signbit* (no warnings, + no conversions). */ +#ifndef signbit +# error "signbit should be a macro" +#endif +#include +]gl_SIGNBIT_TEST_PROGRAM +, [gl_cv_func_signbit=yes], [gl_cv_func_signbit=no], + [gl_cv_func_signbit="guessing no"]) + ]) + dnl GCC 4.0 and newer provides three built-ins for signbit. + dnl They can be used without warnings, also in C++, regardless of . + dnl But they may expand to calls to functions, which may or may not be in + dnl libc. + AC_CACHE_CHECK([for signbit compiler built-ins], [gl_cv_func_signbit_gcc], + [ + AC_TRY_RUN([ +#if __GNUC__ >= 4 +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ + sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ + __builtin_signbitf (x)) +#else +# error "signbit should be three compiler built-ins" +#endif +#include +]gl_SIGNBIT_TEST_PROGRAM +, [gl_cv_func_signbit_gcc=yes], [gl_cv_func_signbit_gcc=no], + [gl_cv_func_signbit_gcc="guessing no"]) + ]) + dnl Use the compiler built-ins whenever possible, because they are more + dnl efficient than the system library functions (if they exist). + if test "$gl_cv_func_signbit_gcc" = yes; then + REPLACE_SIGNBIT_USING_GCC=1 + else + if test "$gl_cv_func_signbit" != yes; then + REPLACE_SIGNBIT=1 + AC_LIBOBJ([signbitf]) + AC_LIBOBJ([signbitd]) + AC_LIBOBJ([signbitl]) + gl_FLOAT_SIGN_LOCATION + gl_DOUBLE_SIGN_LOCATION + gl_LONG_DOUBLE_SIGN_LOCATION + if test "$gl_cv_cc_float_signbit" = unknown; then + dnl Test whether copysignf() is declared. + AC_CHECK_DECLS([copysignf], , , [#include ]) + if test "$ac_cv_have_decl_copysignf" = yes; then + dnl Test whether copysignf() can be used without libm. + AC_CACHE_CHECK([whether copysignf can be used without linking with libm], + [gl_cv_func_copysignf_no_libm], + [ + AC_TRY_LINK([#include + float x, y;], + [return copysignf (x, y) < 0;], + [gl_cv_func_copysignf_no_libm=yes], + [gl_cv_func_copysignf_no_libm=no]) + ]) + if test $gl_cv_func_copysignf_no_libm = yes; then + AC_DEFINE([HAVE_COPYSIGNF_IN_LIBC], [1], + [Define if the copysignf function is declared in and available in libc.]) + fi + fi + fi + if test "$gl_cv_cc_double_signbit" = unknown; then + dnl Test whether copysign() is declared. + AC_CHECK_DECLS([copysign], , , [#include ]) + if test "$ac_cv_have_decl_copysign" = yes; then + dnl Test whether copysign() can be used without libm. + AC_CACHE_CHECK([whether copysign can be used without linking with libm], + [gl_cv_func_copysign_no_libm], + [ + AC_TRY_LINK([#include + double x, y;], + [return copysign (x, y) < 0;], + [gl_cv_func_copysign_no_libm=yes], + [gl_cv_func_copysign_no_libm=no]) + ]) + if test $gl_cv_func_copysign_no_libm = yes; then + AC_DEFINE([HAVE_COPYSIGN_IN_LIBC], [1], + [Define if the copysign function is declared in and available in libc.]) + fi + fi + fi + if test "$gl_cv_cc_long_double_signbit" = unknown; then + dnl Test whether copysignl() is declared. + AC_CHECK_DECLS([copysignl], , , [#include ]) + if test "$ac_cv_have_decl_copysignl" = yes; then + dnl Test whether copysignl() can be used without libm. + AC_CACHE_CHECK([whether copysignl can be used without linking with libm], + [gl_cv_func_copysignl_no_libm], + [ + AC_TRY_LINK([#include + long double x, y;], + [return copysignl (x, y) < 0;], + [gl_cv_func_copysignl_no_libm=yes], + [gl_cv_func_copysignl_no_libm=no]) + ]) + if test $gl_cv_func_copysignl_no_libm = yes; then + AC_DEFINE([HAVE_COPYSIGNL_IN_LIBC], [1], + [Define if the copysignl function is declared in and available in libc.]) + fi + fi + fi + fi + fi +]) + +AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[ +/* Global variables. + Needed because GCC 4 constant-folds __builtin_signbitl (literal) + but cannot constant-fold __builtin_signbitl (variable). */ +float vf; +double vd; +long double vl; +int main () +{ +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -p0f and -p0d instead. */ +float p0f = 0.0f; +float m0f = -p0f; +double p0d = 0.0; +double m0d = -p0d; +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use another constant expression instead. + But that expression does not work on other platforms, such as when + cross-compiling to PowerPC on MacOS X 10.5. */ +long double p0l = 0.0L; +#if defined __hpux || defined __sgi +long double m0l = -LDBL_MIN * LDBL_MIN; +#else +long double m0l = -p0l; +#endif + if (signbit (vf)) + vf++; + { + float plus_inf = 1.0f / p0f; + float minus_inf = -1.0f / p0f; + if (!(!signbit (255.0f) + && signbit (-255.0f) + && !signbit (p0f) + && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vd)) + vd++; + { + double plus_inf = 1.0 / p0d; + double minus_inf = -1.0 / p0d; + if (!(!signbit (255.0) + && signbit (-255.0) + && !signbit (p0d) + && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + if (signbit (vl)) + vl++; + { + long double plus_inf = 1.0L / p0l; + long double minus_inf = -1.0L / p0l; + if (!(!signbit (255.0L) + && signbit (-255.0L) + && !signbit (p0l) + && (memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)) + && !signbit (plus_inf) + && signbit (minus_inf))) + return 1; + } + return 0; +} +]]) + +AC_DEFUN([gl_FLOAT_SIGN_LOCATION], +[ + gl_FLOATTYPE_SIGN_LOCATION([float], [gl_cv_cc_float_signbit], [f], [FLT]) +]) + +AC_DEFUN([gl_DOUBLE_SIGN_LOCATION], +[ + gl_FLOATTYPE_SIGN_LOCATION([double], [gl_cv_cc_double_signbit], [], [DBL]) +]) + +AC_DEFUN([gl_LONG_DOUBLE_SIGN_LOCATION], +[ + gl_FLOATTYPE_SIGN_LOCATION([long double], [gl_cv_cc_long_double_signbit], [L], [LDBL]) +]) + +AC_DEFUN([gl_FLOATTYPE_SIGN_LOCATION], +[ + AC_CACHE_CHECK([where to find the sign bit in a '$1'], + [$2], + [ + AC_TRY_RUN([ +#include +#include +#define NWORDS \ + ((sizeof ($1) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { $1 value; unsigned int word[NWORDS]; } + memory_float; +static memory_float plus = { 1.0$3 }; +static memory_float minus = { -1.0$3 }; +int main () +{ + size_t j, k, i; + unsigned int m; + FILE *fp = fopen ("conftest.out", "w"); + if (fp == NULL) + return 1; + /* Find the different bit. */ + k = 0; m = 0; + for (j = 0; j < NWORDS; j++) + { + unsigned int x = plus.word[j] ^ minus.word[j]; + if ((x & (x - 1)) || (x && m)) + { + /* More than one bit difference. */ + fprintf (fp, "unknown"); + return 1; + } + if (x) + { + k = j; + m = x; + } + } + if (m == 0) + { + /* No difference. */ + fprintf (fp, "unknown"); + return 1; + } + /* Now m = plus.word[k] ^ ~minus.word[k]. */ + if (plus.word[k] & ~minus.word[k]) + { + /* Oh? The sign bit is set in the positive and cleared in the negative + numbers? */ + fprintf (fp, "unknown"); + return 1; + } + for (i = 0; ; i++) + if ((m >> i) & 1) + break; + fprintf (fp, "word %d bit %d", (int) k, (int) i); + return (fclose (fp) != 0); +} + ], + [$2=`cat conftest.out`], + [$2="unknown"], + [ + dnl When cross-compiling, we don't know. It depends on the + dnl ABI and compiler version. There are too many cases. + $2="unknown" + ]) + rm -f conftest.out + ]) + case "$]$2[" in + word*bit*) + word=`echo "$]$2[" | sed -e 's/word //' -e 's/ bit.*//'` + bit=`echo "$]$2[" | sed -e 's/word.*bit //'` + AC_DEFINE_UNQUOTED([$4][_SIGNBIT_WORD], [$word], + [Define as the word index where to find the sign of '$1'.]) + AC_DEFINE_UNQUOTED([$4][_SIGNBIT_BIT], [$bit], + [Define as the bit index in the word where to find the sign of '$1'.]) + ;; + esac +]) diff --git a/gnulib-m4/size_max.m4 b/gnulib-m4/size_max.m4 new file mode 100644 index 00000000..35bd3d6a --- /dev/null +++ b/gnulib-m4/size_max.m4 @@ -0,0 +1,75 @@ +# size_max.m4 serial 9 +dnl Copyright (C) 2003, 2005-2006, 2008-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gl_SIZE_MAX], +[ + AC_CHECK_HEADERS([stdint.h]) + dnl First test whether the system already has SIZE_MAX. + AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ + gl_cv_size_max= + AC_EGREP_CPP([Found it], [ +#include +#if HAVE_STDINT_H +#include +#endif +#ifdef SIZE_MAX +Found it +#endif +], [gl_cv_size_max=yes]) + if test -z "$gl_cv_size_max"; then + dnl Define it ourselves. Here we assume that the type 'size_t' is not wider + dnl than the type 'unsigned long'. Try hard to find a definition that can + dnl be used in a preprocessor #if, i.e. doesn't contain a cast. + AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], + [#include +#include ], [size_t_bits_minus_1=]) + AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], + [#include ], [fits_in_uint=]) + if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then + if test $fits_in_uint = 1; then + dnl Even though SIZE_MAX fits in an unsigned int, it must be of type + dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. + AC_TRY_COMPILE([#include + extern size_t foo; + extern unsigned long foo; + ], [], [fits_in_uint=0]) + fi + dnl We cannot use 'expr' to simplify this expression, because 'expr' + dnl works only with 'long' integers in the host environment, while we + dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. + if test $fits_in_uint = 1; then + gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" + else + gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" + fi + else + dnl Shouldn't happen, but who knows... + gl_cv_size_max='((size_t)~(size_t)0)' + fi + fi + ]) + if test "$gl_cv_size_max" != yes; then + AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], + [Define as the maximum value of type 'size_t', if the system doesn't define it.]) + fi + dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after + dnl . Remember that the #undef in AH_VERBATIM gets replaced with + dnl #define by AC_DEFINE_UNQUOTED. + AH_VERBATIM([SIZE_MAX], +[/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +#ifndef SIZE_MAX +# undef SIZE_MAX +#endif]) +]) + +dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) diff --git a/gnulib-m4/stdbool.m4 b/gnulib-m4/stdbool.m4 new file mode 100644 index 00000000..57c804a8 --- /dev/null +++ b/gnulib-m4/stdbool.m4 @@ -0,0 +1,115 @@ +# Check for stdbool.h that conforms to C99. + +dnl Copyright (C) 2002-2006, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Prepare for substituting if it is not supported. + +AC_DEFUN([AM_STDBOOL_H], +[ + AC_REQUIRE([AC_HEADER_STDBOOL]) + + # Define two additional variables used in the Makefile substitution. + + if test "$ac_cv_header_stdbool_h" = yes; then + STDBOOL_H='' + else + STDBOOL_H='stdbool.h' + fi + AC_SUBST([STDBOOL_H]) + + if test "$ac_cv_type__Bool" = yes; then + HAVE__BOOL=1 + else + HAVE__BOOL=0 + fi + AC_SUBST([HAVE__BOOL]) +]) + +# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. +AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) + +# This macro is only needed in autoconf <= 2.59. Newer versions of autoconf +# have this macro built-in. + +AC_DEFUN([AC_HEADER_STDBOOL], + [AC_CACHE_CHECK([for stdbool.h that conforms to C99], + [ac_cv_header_stdbool_h], + [AC_TRY_COMPILE( + [ + #include + #ifndef bool + "error: bool is not defined" + #endif + #ifndef false + "error: false is not defined" + #endif + #if false + "error: false is not 0" + #endif + #ifndef true + "error: true is not defined" + #endif + #if true != 1 + "error: true is not 1" + #endif + #ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" + #endif + + struct s { _Bool s: 1; _Bool t; } s; + + char a[true == 1 ? 1 : -1]; + char b[false == 0 ? 1 : -1]; + char c[__bool_true_false_are_defined == 1 ? 1 : -1]; + char d[(bool) 0.5 == true ? 1 : -1]; + bool e = &s; + char f[(_Bool) 0.0 == false ? 1 : -1]; + char g[true]; + char h[sizeof (_Bool)]; + char i[sizeof s.t]; + enum { j = false, k = true, l = false * true, m = true * 256 }; + _Bool n[m]; + char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; + #if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a run-time + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); + #endif + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; + ], + [ + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); + ], + [ac_cv_header_stdbool_h=yes], + [ac_cv_header_stdbool_h=no])]) + AC_CHECK_TYPES([_Bool]) + if test $ac_cv_header_stdbool_h = yes; then + AC_DEFINE([HAVE_STDBOOL_H], [1], [Define to 1 if stdbool.h conforms to C99.]) + fi]) diff --git a/gnulib-m4/stdint.m4 b/gnulib-m4/stdint.m4 new file mode 100644 index 00000000..a2e8bdd6 --- /dev/null +++ b/gnulib-m4/stdint.m4 @@ -0,0 +1,472 @@ +# stdint.m4 serial 34 +dnl Copyright (C) 2001-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert and Bruno Haible. +dnl Test whether is supported or must be substituted. + +AC_DEFUN([gl_STDINT_H], +[ + AC_PREREQ([2.59])dnl + + dnl Check for long long int and unsigned long long int. + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + if test $ac_cv_type_long_long_int = yes; then + HAVE_LONG_LONG_INT=1 + else + HAVE_LONG_LONG_INT=0 + fi + AC_SUBST([HAVE_LONG_LONG_INT]) + AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) + if test $ac_cv_type_unsigned_long_long_int = yes; then + HAVE_UNSIGNED_LONG_LONG_INT=1 + else + HAVE_UNSIGNED_LONG_LONG_INT=0 + fi + AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT]) + + dnl Check for . + dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h. + if test $ac_cv_header_inttypes_h = yes; then + HAVE_INTTYPES_H=1 + else + HAVE_INTTYPES_H=0 + fi + AC_SUBST([HAVE_INTTYPES_H]) + + dnl Check for . + dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h. + if test $ac_cv_header_sys_types_h = yes; then + HAVE_SYS_TYPES_H=1 + else + HAVE_SYS_TYPES_H=0 + fi + AC_SUBST([HAVE_SYS_TYPES_H]) + + gl_CHECK_NEXT_HEADERS([stdint.h]) + if test $ac_cv_header_stdint_h = yes; then + HAVE_STDINT_H=1 + else + HAVE_STDINT_H=0 + fi + AC_SUBST([HAVE_STDINT_H]) + + dnl Now see whether we need a substitute . + if test $ac_cv_header_stdint_h = yes; then + AC_CACHE_CHECK([whether stdint.h conforms to C99], + [gl_cv_header_working_stdint_h], + [gl_cv_header_working_stdint_h=no + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include +/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in . */ +#if !(defined WCHAR_MIN && defined WCHAR_MAX) +#error "WCHAR_MIN, WCHAR_MAX not defined in " +#endif +] +gl_STDINT_INCLUDES +[ +#ifdef INT8_MAX +int8_t a1 = INT8_MAX; +int8_t a1min = INT8_MIN; +#endif +#ifdef INT16_MAX +int16_t a2 = INT16_MAX; +int16_t a2min = INT16_MIN; +#endif +#ifdef INT32_MAX +int32_t a3 = INT32_MAX; +int32_t a3min = INT32_MIN; +#endif +#ifdef INT64_MAX +int64_t a4 = INT64_MAX; +int64_t a4min = INT64_MIN; +#endif +#ifdef UINT8_MAX +uint8_t b1 = UINT8_MAX; +#else +typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; +#endif +#ifdef UINT16_MAX +uint16_t b2 = UINT16_MAX; +#endif +#ifdef UINT32_MAX +uint32_t b3 = UINT32_MAX; +#endif +#ifdef UINT64_MAX +uint64_t b4 = UINT64_MAX; +#endif +int_least8_t c1 = INT8_C (0x7f); +int_least8_t c1max = INT_LEAST8_MAX; +int_least8_t c1min = INT_LEAST8_MIN; +int_least16_t c2 = INT16_C (0x7fff); +int_least16_t c2max = INT_LEAST16_MAX; +int_least16_t c2min = INT_LEAST16_MIN; +int_least32_t c3 = INT32_C (0x7fffffff); +int_least32_t c3max = INT_LEAST32_MAX; +int_least32_t c3min = INT_LEAST32_MIN; +int_least64_t c4 = INT64_C (0x7fffffffffffffff); +int_least64_t c4max = INT_LEAST64_MAX; +int_least64_t c4min = INT_LEAST64_MIN; +uint_least8_t d1 = UINT8_C (0xff); +uint_least8_t d1max = UINT_LEAST8_MAX; +uint_least16_t d2 = UINT16_C (0xffff); +uint_least16_t d2max = UINT_LEAST16_MAX; +uint_least32_t d3 = UINT32_C (0xffffffff); +uint_least32_t d3max = UINT_LEAST32_MAX; +uint_least64_t d4 = UINT64_C (0xffffffffffffffff); +uint_least64_t d4max = UINT_LEAST64_MAX; +int_fast8_t e1 = INT_FAST8_MAX; +int_fast8_t e1min = INT_FAST8_MIN; +int_fast16_t e2 = INT_FAST16_MAX; +int_fast16_t e2min = INT_FAST16_MIN; +int_fast32_t e3 = INT_FAST32_MAX; +int_fast32_t e3min = INT_FAST32_MIN; +int_fast64_t e4 = INT_FAST64_MAX; +int_fast64_t e4min = INT_FAST64_MIN; +uint_fast8_t f1 = UINT_FAST8_MAX; +uint_fast16_t f2 = UINT_FAST16_MAX; +uint_fast32_t f3 = UINT_FAST32_MAX; +uint_fast64_t f4 = UINT_FAST64_MAX; +#ifdef INTPTR_MAX +intptr_t g = INTPTR_MAX; +intptr_t gmin = INTPTR_MIN; +#endif +#ifdef UINTPTR_MAX +uintptr_t h = UINTPTR_MAX; +#endif +intmax_t i = INTMAX_MAX; +uintmax_t j = UINTMAX_MAX; + +#include /* for CHAR_BIT */ +#define TYPE_MINIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +#define TYPE_MAXIMUM(t) \ + ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) +struct s { + int check_PTRDIFF: + PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) + && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) + ? 1 : -1; + /* Detect bug in FreeBSD 6.0 / ia64. */ + int check_SIG_ATOMIC: + SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) + && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) + ? 1 : -1; + int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; + int check_WCHAR: + WCHAR_MIN == TYPE_MINIMUM (wchar_t) + && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) + ? 1 : -1; + /* Detect bug in mingw. */ + int check_WINT: + WINT_MIN == TYPE_MINIMUM (wint_t) + && WINT_MAX == TYPE_MAXIMUM (wint_t) + ? 1 : -1; + + /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ + int check_UINT8_C: + (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; + int check_UINT16_C: + (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; + + /* Detect bugs in OpenBSD 3.9 stdint.h. */ +#ifdef UINT8_MAX + int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; +#endif +#ifdef UINT16_MAX + int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; +#endif +#ifdef UINT32_MAX + int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; +#endif +#ifdef UINT64_MAX + int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; +#endif + int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; + int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; + int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; + int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; + int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; + int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; + int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; + int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; + int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; + int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; + int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; +}; + ]])], + [dnl Determine whether the various *_MIN, *_MAX macros are usable + dnl in preprocessor expression. We could do it by compiling a test + dnl program for each of these macros. It is faster to run a program + dnl that inspects the macro expansion. + dnl This detects a bug on HP-UX 11.23/ia64. + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#define __STDC_CONSTANT_MACROS 1 /* to make it work also in C++ mode */ +#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ +#include +] +gl_STDINT_INCLUDES +[ +#include +#include +#define MVAL(macro) MVAL1(macro) +#define MVAL1(expression) #expression +static const char *macro_values[] = + { +#ifdef INT8_MAX + MVAL (INT8_MAX), +#endif +#ifdef INT16_MAX + MVAL (INT16_MAX), +#endif +#ifdef INT32_MAX + MVAL (INT32_MAX), +#endif +#ifdef INT64_MAX + MVAL (INT64_MAX), +#endif +#ifdef UINT8_MAX + MVAL (UINT8_MAX), +#endif +#ifdef UINT16_MAX + MVAL (UINT16_MAX), +#endif +#ifdef UINT32_MAX + MVAL (UINT32_MAX), +#endif +#ifdef UINT64_MAX + MVAL (UINT64_MAX), +#endif + NULL + }; +]], [[ + const char **mv; + for (mv = macro_values; *mv != NULL; mv++) + { + const char *value = *mv; + /* Test whether it looks like a cast expression. */ + if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 + || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 + || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 + || strncmp (value, "((int)"/*)*/, 6) == 0 + || strncmp (value, "((signed short)"/*)*/, 15) == 0 + || strncmp (value, "((signed char)"/*)*/, 14) == 0) + return 1; + } + return 0; +]])], + [gl_cv_header_working_stdint_h=yes], + [], + [dnl When cross-compiling, assume it works. + gl_cv_header_working_stdint_h=yes + ]) + ]) + ]) + fi + if test "$gl_cv_header_working_stdint_h" = yes; then + STDINT_H= + else + dnl Check for , and for + dnl (used in Linux libc4 >= 4.6.7 and libc5). + AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) + if test $ac_cv_header_sys_inttypes_h = yes; then + HAVE_SYS_INTTYPES_H=1 + else + HAVE_SYS_INTTYPES_H=0 + fi + AC_SUBST([HAVE_SYS_INTTYPES_H]) + if test $ac_cv_header_sys_bitypes_h = yes; then + HAVE_SYS_BITYPES_H=1 + else + HAVE_SYS_BITYPES_H=0 + fi + AC_SUBST([HAVE_SYS_BITYPES_H]) + + dnl Check for (missing in Linux uClibc when built without wide + dnl character support). + AC_CHECK_HEADERS_ONCE([wchar.h]) + + gl_STDINT_TYPE_PROPERTIES + STDINT_H=stdint.h + fi + AC_SUBST([STDINT_H]) +]) + +dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) +dnl Determine the size of each of the given types in bits. +AC_DEFUN([gl_STDINT_BITSIZEOF], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), + [Define to the number of bits in type ']gltype['.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], + [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], + [$2 +#include ], [result=unknown]) + eval gl_cv_bitsizeof_${gltype}=\$result + ]) + eval result=\$gl_cv_bitsizeof_${gltype} + if test $result = unknown; then + dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, + dnl do a syntax check even on unused #if conditions and give an error + dnl on valid C code like this: + dnl #if 0 + dnl # if > 32 + dnl # endif + dnl #endif + result=0 + fi + GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) + eval BITSIZEOF_${GLTYPE}=\$result + done + m4_foreach_w([gltype], [$1], + [AC_SUBST([BITSIZEOF_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) +]) + +dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) +dnl Determine the signedness of each of the given types. +dnl Define HAVE_SIGNED_TYPE if type is signed. +AC_DEFUN([gl_CHECK_TYPES_SIGNED], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), + [Define to 1 if ']gltype[' is a signed integer type.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([$2[ + int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], + result=yes, result=no) + eval gl_cv_type_${gltype}_signed=\$result + ]) + eval result=\$gl_cv_type_${gltype}_signed + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + if test "$result" = yes; then + AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) + eval HAVE_SIGNED_${GLTYPE}=1 + else + eval HAVE_SIGNED_${GLTYPE}=0 + fi + done + m4_foreach_w([gltype], [$1], + [AC_SUBST([HAVE_SIGNED_]translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) +]) + +dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) +dnl Determine the suffix to use for integer constants of the given types. +dnl Define t_SUFFIX for each such type. +AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], +[ + dnl Use a shell loop, to avoid bloating configure, and + dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into + dnl config.h.in, + dnl - extra AC_SUBST calls, so that the right substitutions are made. + m4_foreach_w([gltype], [$1], + [AH_TEMPLATE(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], + [Define to l, ll, u, ul, ull, etc., as suitable for + constants of type ']gltype['.])]) + for gltype in $1 ; do + AC_CACHE_CHECK([for $gltype integer literal suffix], + [gl_cv_type_${gltype}_suffix], + [eval gl_cv_type_${gltype}_suffix=no + eval result=\$gl_cv_type_${gltype}_signed + if test "$result" = yes; then + glsufu= + else + glsufu=u + fi + for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do + case $glsuf in + '') gltype1='int';; + l) gltype1='long int';; + ll) gltype1='long long int';; + i64) gltype1='__int64';; + u) gltype1='unsigned int';; + ul) gltype1='unsigned long int';; + ull) gltype1='unsigned long long int';; + ui64)gltype1='unsigned __int64';; + esac + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([$2[ + extern $gltype foo; + extern $gltype1 foo;]])], + [eval gl_cv_type_${gltype}_suffix=\$glsuf]) + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" != no && break + done]) + GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` + eval result=\$gl_cv_type_${gltype}_suffix + test "$result" = no && result= + eval ${GLTYPE}_SUFFIX=\$result + AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) + done + m4_foreach_w([gltype], [$1], + [AC_SUBST(translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) +]) + +dnl gl_STDINT_INCLUDES +AC_DEFUN([gl_STDINT_INCLUDES], +[[ + /* BSD/OS 4.0.1 has a bug: , and must be + included before . */ + #include + #include + #if HAVE_WCHAR_H + # include + # include + # include + #endif +]]) + +dnl gl_STDINT_TYPE_PROPERTIES +dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t +dnl of interest to stdint.in.h. +AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], +[ + AC_REQUIRE([gl_MULTIARCH]) + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_STDINT_BITSIZEOF([ptrdiff_t size_t], + [gl_STDINT_INCLUDES]) + fi + gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) + gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) + gl_cv_type_ptrdiff_t_signed=yes + gl_cv_type_size_t_signed=no + if test $APPLE_UNIVERSAL_BUILD = 0; then + gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], + [gl_STDINT_INCLUDES]) + fi + gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], + [gl_STDINT_INCLUDES]) +]) + +dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) + +# Hey Emacs! +# Local Variables: +# indent-tabs-mode: nil +# End: diff --git a/gnulib-m4/stdint_h.m4 b/gnulib-m4/stdint_h.m4 new file mode 100644 index 00000000..82f0c244 --- /dev/null +++ b/gnulib-m4/stdint_h.m4 @@ -0,0 +1,26 @@ +# stdint_h.m4 serial 8 +dnl Copyright (C) 1997-2004, 2006, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_STDINT_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_STDINT_H], +[ + AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1; return !i;], + [gl_cv_header_stdint_h=yes], + [gl_cv_header_stdint_h=no])]) + if test $gl_cv_header_stdint_h = yes; then + AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) diff --git a/gnulib-m4/stdlib_h.m4 b/gnulib-m4/stdlib_h.m4 new file mode 100644 index 00000000..b295f16b --- /dev/null +++ b/gnulib-m4/stdlib_h.m4 @@ -0,0 +1,73 @@ +# stdlib_h.m4 serial 15 +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_STDLIB_H], +[ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([stdlib.h]) + AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT]) + if test $ac_cv_header_random_h = yes; then + HAVE_RANDOM_H=1 + else + HAVE_RANDOM_H=0 + fi + AC_SUBST([HAVE_RANDOM_H]) + AC_CHECK_TYPES([struct random_data], + [], [HAVE_STRUCT_RANDOM_DATA=0], + [[#include + #if HAVE_RANDOM_H + # include + #endif + ]]) +]) + +AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_STDLIB_H_DEFAULTS], +[ + GNULIB_MALLOC_POSIX=0; AC_SUBST([GNULIB_MALLOC_POSIX]) + GNULIB_REALLOC_POSIX=0; AC_SUBST([GNULIB_REALLOC_POSIX]) + GNULIB_CALLOC_POSIX=0; AC_SUBST([GNULIB_CALLOC_POSIX]) + GNULIB_ATOLL=0; AC_SUBST([GNULIB_ATOLL]) + GNULIB_GETLOADAVG=0; AC_SUBST([GNULIB_GETLOADAVG]) + GNULIB_GETSUBOPT=0; AC_SUBST([GNULIB_GETSUBOPT]) + GNULIB_MKDTEMP=0; AC_SUBST([GNULIB_MKDTEMP]) + GNULIB_MKSTEMP=0; AC_SUBST([GNULIB_MKSTEMP]) + GNULIB_PUTENV=0; AC_SUBST([GNULIB_PUTENV]) + GNULIB_RANDOM_R=0; AC_SUBST([GNULIB_RANDOM_R]) + GNULIB_RPMATCH=0; AC_SUBST([GNULIB_RPMATCH]) + GNULIB_SETENV=0; AC_SUBST([GNULIB_SETENV]) + GNULIB_STRTOD=0; AC_SUBST([GNULIB_STRTOD]) + GNULIB_STRTOLL=0; AC_SUBST([GNULIB_STRTOLL]) + GNULIB_STRTOULL=0; AC_SUBST([GNULIB_STRTOULL]) + GNULIB_UNSETENV=0; AC_SUBST([GNULIB_UNSETENV]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) + HAVE_CALLOC_POSIX=1; AC_SUBST([HAVE_CALLOC_POSIX]) + HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) + HAVE_MALLOC_POSIX=1; AC_SUBST([HAVE_MALLOC_POSIX]) + HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) + HAVE_REALLOC_POSIX=1; AC_SUBST([HAVE_REALLOC_POSIX]) + HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) + HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) + HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) + HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) + HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) + HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) + HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) + HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) + HAVE_UNSETENV=1; AC_SUBST([HAVE_UNSETENV]) + HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) + REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) + REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) + REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) + VOID_UNSETENV=0; AC_SUBST([VOID_UNSETENV]) +]) diff --git a/gnulib-m4/strerror.m4 b/gnulib-m4/strerror.m4 new file mode 100644 index 00000000..8c16ca9a --- /dev/null +++ b/gnulib-m4/strerror.m4 @@ -0,0 +1,68 @@ +# strerror.m4 serial 9 +dnl Copyright (C) 2002, 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_STRERROR], +[ + AC_REQUIRE([gl_FUNC_STRERROR_SEPARATE]) + if test $REPLACE_STRERROR = 1; then + AC_LIBOBJ([strerror]) + AC_DEFINE_UNQUOTED([REPLACE_STRERROR], [$REPLACE_STRERROR], + [Define this to 1 if strerror is broken.]) + fi +]) + +# Like gl_FUNC_STRERROR, except prepare for separate compilation (no AC_LIBOBJ). +AC_DEFUN([gl_FUNC_STRERROR_SEPARATE], +[ + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REQUIRE([gl_HEADER_ERRNO_H]) + if test -z "$ERRNO_H"; then + AC_CACHE_CHECK([for working strerror function], + [gl_cv_func_working_strerror], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include + ]], + [[return !*strerror (-2);]])], + [gl_cv_func_working_strerror=yes], + [gl_cv_func_working_strerror=no], + [dnl Assume crossbuild works if it compiles. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include + ]], + [[return !*strerror (-2);]])], + [gl_cv_func_working_strerror=yes], + [gl_cv_func_working_strerror=no]) + ]) + ]) + if test $gl_cv_func_working_strerror = no; then + dnl The system's strerror() fails to return a string for out-of-range + dnl integers. Replace it. + REPLACE_STRERROR=1 + fi + else + dnl The system's strerror() cannot know about the new errno values we add + dnl to . Replace it. + REPLACE_STRERROR=1 + fi + if test $REPLACE_STRERROR = 1; then + gl_PREREQ_STRERROR + fi +]) + +# Prerequisites of lib/strerror.c. +AC_DEFUN([gl_PREREQ_STRERROR], [ + AC_CHECK_DECLS([strerror]) + AC_CHECK_HEADERS_ONCE([sys/socket.h]) + if test $ac_cv_header_sys_socket_h != yes; then + dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make + dnl the check for those headers unconditional; yet cygwin reports + dnl that the headers are present but cannot be compiled (since on + dnl cygwin, all socket information should come from sys/socket.h). + AC_CHECK_HEADERS([winsock2.h]) + fi +]) diff --git a/gnulib-m4/string_h.m4 b/gnulib-m4/string_h.m4 new file mode 100644 index 00000000..11f09c8b --- /dev/null +++ b/gnulib-m4/string_h.m4 @@ -0,0 +1,94 @@ +# Configure a GNU-like replacement for . + +# Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 7 + +# Written by Paul Eggert. + +AC_DEFUN([gl_HEADER_STRING_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_HEADER_STRING_H_BODY]) +]) + +AC_DEFUN([gl_HEADER_STRING_H_BODY], +[ + AC_REQUIRE([AC_C_RESTRICT]) + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + gl_CHECK_NEXT_HEADERS([string.h]) +]) + +AC_DEFUN([gl_STRING_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS], +[ + GNULIB_MEMCHR=0; AC_SUBST([GNULIB_MEMCHR]) + GNULIB_MEMMEM=0; AC_SUBST([GNULIB_MEMMEM]) + GNULIB_MEMPCPY=0; AC_SUBST([GNULIB_MEMPCPY]) + GNULIB_MEMRCHR=0; AC_SUBST([GNULIB_MEMRCHR]) + GNULIB_RAWMEMCHR=0; AC_SUBST([GNULIB_RAWMEMCHR]) + GNULIB_STPCPY=0; AC_SUBST([GNULIB_STPCPY]) + GNULIB_STPNCPY=0; AC_SUBST([GNULIB_STPNCPY]) + GNULIB_STRCHRNUL=0; AC_SUBST([GNULIB_STRCHRNUL]) + GNULIB_STRDUP=0; AC_SUBST([GNULIB_STRDUP]) + GNULIB_STRNDUP=0; AC_SUBST([GNULIB_STRNDUP]) + GNULIB_STRNLEN=0; AC_SUBST([GNULIB_STRNLEN]) + GNULIB_STRPBRK=0; AC_SUBST([GNULIB_STRPBRK]) + GNULIB_STRSEP=0; AC_SUBST([GNULIB_STRSEP]) + GNULIB_STRSTR=0; AC_SUBST([GNULIB_STRSTR]) + GNULIB_STRCASESTR=0; AC_SUBST([GNULIB_STRCASESTR]) + GNULIB_STRTOK_R=0; AC_SUBST([GNULIB_STRTOK_R]) + GNULIB_MBSLEN=0; AC_SUBST([GNULIB_MBSLEN]) + GNULIB_MBSNLEN=0; AC_SUBST([GNULIB_MBSNLEN]) + GNULIB_MBSCHR=0; AC_SUBST([GNULIB_MBSCHR]) + GNULIB_MBSRCHR=0; AC_SUBST([GNULIB_MBSRCHR]) + GNULIB_MBSSTR=0; AC_SUBST([GNULIB_MBSSTR]) + GNULIB_MBSCASECMP=0; AC_SUBST([GNULIB_MBSCASECMP]) + GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP]) + GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP]) + GNULIB_MBSCASESTR=0; AC_SUBST([GNULIB_MBSCASESTR]) + GNULIB_MBSCSPN=0; AC_SUBST([GNULIB_MBSCSPN]) + GNULIB_MBSPBRK=0; AC_SUBST([GNULIB_MBSPBRK]) + GNULIB_MBSSPN=0; AC_SUBST([GNULIB_MBSSPN]) + GNULIB_MBSSEP=0; AC_SUBST([GNULIB_MBSSEP]) + GNULIB_MBSTOK_R=0; AC_SUBST([GNULIB_MBSTOK_R]) + GNULIB_STRERROR=0; AC_SUBST([GNULIB_STRERROR]) + GNULIB_STRSIGNAL=0; AC_SUBST([GNULIB_STRSIGNAL]) + GNULIB_STRVERSCMP=0; AC_SUBST([GNULIB_STRVERSCMP]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) + HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) + HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) + HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) + HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) + HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) + HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) + HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) + HAVE_STRNDUP=1; AC_SUBST([HAVE_STRNDUP]) + HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) + HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) + HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) + HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) + HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) + HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) + HAVE_DECL_STRERROR=1; AC_SUBST([HAVE_DECL_STRERROR]) + HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) + HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) + REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) + REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) + REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) + REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) + REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) + REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) + REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) +]) diff --git a/gnulib-m4/unistd_h.m4 b/gnulib-m4/unistd_h.m4 new file mode 100644 index 00000000..ff9a4ea0 --- /dev/null +++ b/gnulib-m4/unistd_h.m4 @@ -0,0 +1,83 @@ +# unistd_h.m4 serial 17 +dnl Copyright (C) 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Simon Josefsson, Bruno Haible. + +AC_DEFUN([gl_UNISTD_H], +[ + dnl Use AC_REQUIRE here, so that the default behavior below is expanded + dnl once only, before all statements that occur in other macros. + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + + gl_CHECK_NEXT_HEADERS([unistd.h]) + + AC_CHECK_HEADERS_ONCE([unistd.h]) + if test $ac_cv_header_unistd_h = yes; then + HAVE_UNISTD_H=1 + else + HAVE_UNISTD_H=0 + fi + AC_SUBST([HAVE_UNISTD_H]) +]) + +AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_UNISTD_H_DEFAULTS], +[ + GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) + GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) + GNULIB_DUP2=0; AC_SUBST([GNULIB_DUP2]) + GNULIB_ENVIRON=0; AC_SUBST([GNULIB_ENVIRON]) + GNULIB_EUIDACCESS=0; AC_SUBST([GNULIB_EUIDACCESS]) + GNULIB_FCHDIR=0; AC_SUBST([GNULIB_FCHDIR]) + GNULIB_FSYNC=0; AC_SUBST([GNULIB_FSYNC]) + GNULIB_FTRUNCATE=0; AC_SUBST([GNULIB_FTRUNCATE]) + GNULIB_GETCWD=0; AC_SUBST([GNULIB_GETCWD]) + GNULIB_GETDOMAINNAME=0; AC_SUBST([GNULIB_GETDOMAINNAME]) + GNULIB_GETDTABLESIZE=0; AC_SUBST([GNULIB_GETDTABLESIZE]) + GNULIB_GETHOSTNAME=0; AC_SUBST([GNULIB_GETHOSTNAME]) + GNULIB_GETLOGIN_R=0; AC_SUBST([GNULIB_GETLOGIN_R]) + GNULIB_GETPAGESIZE=0; AC_SUBST([GNULIB_GETPAGESIZE]) + GNULIB_GETUSERSHELL=0; AC_SUBST([GNULIB_GETUSERSHELL]) + GNULIB_LCHOWN=0; AC_SUBST([GNULIB_LCHOWN]) + GNULIB_LINK=0; AC_SUBST([GNULIB_LINK]) + GNULIB_LSEEK=0; AC_SUBST([GNULIB_LSEEK]) + GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) + GNULIB_SLEEP=0; AC_SUBST([GNULIB_SLEEP]) + GNULIB_UNISTD_H_SIGPIPE=0; AC_SUBST([GNULIB_UNISTD_H_SIGPIPE]) + GNULIB_WRITE=0; AC_SUBST([GNULIB_WRITE]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_DUP2=1; AC_SUBST([HAVE_DUP2]) + HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) + HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) + HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) + HAVE_GETDOMAINNAME=1; AC_SUBST([HAVE_GETDOMAINNAME]) + HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) + HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) + HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) + HAVE_GETUSERSHELL=1; AC_SUBST([HAVE_GETUSERSHELL]) + HAVE_LINK=1; AC_SUBST([HAVE_LINK]) + HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) + HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) + HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) + HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) + HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) + HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) + REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) + REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) + REPLACE_FCHDIR=0; AC_SUBST([REPLACE_FCHDIR]) + REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) + REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) + REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) + REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) + REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) + UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) +]) diff --git a/gnulib-m4/vasnprintf.m4 b/gnulib-m4/vasnprintf.m4 new file mode 100644 index 00000000..3a1d1e01 --- /dev/null +++ b/gnulib-m4/vasnprintf.m4 @@ -0,0 +1,276 @@ +# vasnprintf.m4 serial 29 +dnl Copyright (C) 2002-2004, 2006-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_VASNPRINTF], +[ + AC_CHECK_FUNCS_ONCE([vasnprintf]) + if test $ac_cv_func_vasnprintf = no; then + gl_REPLACE_VASNPRINTF + fi +]) + +AC_DEFUN([gl_REPLACE_VASNPRINTF], +[ + AC_CHECK_FUNCS_ONCE([vasnprintf]) + AC_LIBOBJ([vasnprintf]) + AC_LIBOBJ([printf-args]) + AC_LIBOBJ([printf-parse]) + AC_LIBOBJ([asnprintf]) + if test $ac_cv_func_vasnprintf = yes; then + AC_DEFINE([REPLACE_VASNPRINTF], [1], + [Define if vasnprintf exists but is overridden by gnulib.]) + fi + gl_PREREQ_PRINTF_ARGS + gl_PREREQ_PRINTF_PARSE + gl_PREREQ_VASNPRINTF + gl_PREREQ_ASNPRINTF +]) + +# Prequisites of lib/printf-args.h, lib/printf-args.c. +AC_DEFUN([gl_PREREQ_PRINTF_ARGS], +[ + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) +]) + +# Prequisites of lib/printf-parse.h, lib/printf-parse.c. +AC_DEFUN([gl_PREREQ_PRINTF_PARSE], +[ + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) + AC_REQUIRE([AC_TYPE_SIZE_T]) + AC_CHECK_TYPE([ptrdiff_t], , + [AC_DEFINE([ptrdiff_t], [long], + [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) + ]) + AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) +]) + +# Prerequisites of lib/vasnprintf.c. +AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], +[ + AC_REQUIRE([AC_FUNC_ALLOCA]) + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) + AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) + dnl Use the _snprintf function only if it is declared (because on NetBSD it + dnl is defined as a weak alias of snprintf; we prefer to use the latter). + AC_CHECK_DECLS([_snprintf], , , [#include ]) +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting 'long double' +# arguments. +AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) + case "$gl_cv_func_printf_long_double" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' +# arguments. +AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_INFINITE]) + case "$gl_cv_func_printf_infinite" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + infinite 'double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' +# arguments. +AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], +[ + AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) + dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if + dnl NEED_PRINTF_LONG_DOUBLE is already set. + AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) + case "$gl_cv_func_printf_long_double" in + *yes) + case "$gl_cv_func_printf_infinite_long_double" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + infinite 'long double' arguments.]) + ;; + esac + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) + case "$gl_cv_func_printf_directive_a" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], + [Define if the vasnprintf implementation needs special code for + the 'a' and 'A' directives.]) + AC_CHECK_FUNCS([nl_langinfo]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) + case "$gl_cv_func_printf_directive_f" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], + [Define if the vasnprintf implementation needs special code for + the 'F' directive.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. +AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], +[ + AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) + case "$gl_cv_func_printf_directive_ls" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], + [Define if the vasnprintf implementation needs special code for + the 'ls' directive.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], +[ + AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) + case "$gl_cv_func_printf_flag_grouping" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], + [Define if the vasnprintf implementation needs special code for the + ' flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], +[ + AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) + case "$gl_cv_func_printf_flag_leftadjust" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], + [Define if the vasnprintf implementation needs special code for the + '-' flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. +AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], +[ + AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) + case "$gl_cv_func_printf_flag_zero" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], + [Define if the vasnprintf implementation needs special code for the + 0 flag.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for supporting large precisions. +AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], +[ + AC_REQUIRE([gl_PRINTF_PRECISION]) + case "$gl_cv_func_printf_precision" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], + [Define if the vasnprintf implementation needs special code for + supporting large precisions without arbitrary bounds.]) + AC_DEFINE([NEED_PRINTF_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'double' arguments.]) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory +# conditions. +AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], +[ + AC_REQUIRE([gl_PRINTF_ENOMEM]) + case "$gl_cv_func_printf_enomem" in + *yes) + ;; + *) + AC_DEFINE([NEED_PRINTF_ENOMEM], [1], + [Define if the vasnprintf implementation needs special code for + surviving out-of-memory conditions.]) + AC_DEFINE([NEED_PRINTF_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'double' arguments.]) + AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], + [Define if the vasnprintf implementation needs special code for + 'long double' arguments.]) + ;; + esac +]) + +# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. +AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], +[ + AC_REQUIRE([gl_PREREQ_VASNPRINTF]) + gl_PREREQ_VASNPRINTF_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE + gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE + gl_PREREQ_VASNPRINTF_DIRECTIVE_A + gl_PREREQ_VASNPRINTF_DIRECTIVE_F + gl_PREREQ_VASNPRINTF_DIRECTIVE_LS + gl_PREREQ_VASNPRINTF_FLAG_GROUPING + gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST + gl_PREREQ_VASNPRINTF_FLAG_ZERO + gl_PREREQ_VASNPRINTF_PRECISION + gl_PREREQ_VASNPRINTF_ENOMEM +]) + +# Prerequisites of lib/asnprintf.c. +AC_DEFUN([gl_PREREQ_ASNPRINTF], +[ +]) diff --git a/gnulib-m4/wchar.m4 b/gnulib-m4/wchar.m4 new file mode 100644 index 00000000..2e52a82a --- /dev/null +++ b/gnulib-m4/wchar.m4 @@ -0,0 +1,100 @@ +dnl A placeholder for ISO C99 , for platforms that have issues. + +dnl Copyright (C) 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Eric Blake. + +# wchar.m4 serial 23 + +AC_DEFUN([gl_WCHAR_H], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + AC_CACHE_CHECK([whether is standalone], + [gl_cv_header_wchar_h_standalone], + [AC_COMPILE_IFELSE([[#include +wchar_t w;]], + [gl_cv_header_wchar_h_standalone=yes], + [gl_cv_header_wchar_h_standalone=no])]) + + AC_REQUIRE([gt_TYPE_WINT_T]) + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + AC_SUBST([HAVE_WINT_T]) + + if test $gl_cv_header_wchar_h_standalone != yes || test $gt_cv_c_wint_t != yes; then + WCHAR_H=wchar.h + fi + + dnl Prepare for creating substitute . + dnl Do it always: WCHAR_H may be empty here but can be set later. + dnl Check for (missing in Linux uClibc when built without wide + dnl character support). + AC_CHECK_HEADERS_ONCE([wchar.h]) + if test $ac_cv_header_wchar_h = yes; then + HAVE_WCHAR_H=1 + else + HAVE_WCHAR_H=0 + fi + AC_SUBST([HAVE_WCHAR_H]) + gl_CHECK_NEXT_HEADERS([wchar.h]) +]) + +dnl Unconditionally enables the replacement of . +AC_DEFUN([gl_REPLACE_WCHAR_H], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + WCHAR_H=wchar.h +]) + +AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], +[ + dnl Use AC_REQUIRE here, so that the default settings are expanded once only. + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + GNULIB_[]m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./-],[ABCDEFGHIJKLMNOPQRSTUVWXYZ___])=1 +]) + +AC_DEFUN([gl_WCHAR_H_DEFAULTS], +[ + GNULIB_BTOWC=0; AC_SUBST([GNULIB_BTOWC]) + GNULIB_WCTOB=0; AC_SUBST([GNULIB_WCTOB]) + GNULIB_MBSINIT=0; AC_SUBST([GNULIB_MBSINIT]) + GNULIB_MBRTOWC=0; AC_SUBST([GNULIB_MBRTOWC]) + GNULIB_MBRLEN=0; AC_SUBST([GNULIB_MBRLEN]) + GNULIB_MBSRTOWCS=0; AC_SUBST([GNULIB_MBSRTOWCS]) + GNULIB_MBSNRTOWCS=0; AC_SUBST([GNULIB_MBSNRTOWCS]) + GNULIB_WCRTOMB=0; AC_SUBST([GNULIB_WCRTOMB]) + GNULIB_WCSRTOMBS=0; AC_SUBST([GNULIB_WCSRTOMBS]) + GNULIB_WCSNRTOMBS=0; AC_SUBST([GNULIB_WCSNRTOMBS]) + GNULIB_WCWIDTH=0; AC_SUBST([GNULIB_WCWIDTH]) + dnl Assume proper GNU behavior unless another module says otherwise. + HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) + HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) + HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) + HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) + HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) + HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) + HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) + HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) + HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) + HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) + HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) + REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) + REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) + REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) + REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) + REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) + REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) + REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) + REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS]) + REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) + REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) + REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) + REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) + WCHAR_H=''; AC_SUBST([WCHAR_H]) +]) diff --git a/gnulib-m4/wchar_t.m4 b/gnulib-m4/wchar_t.m4 new file mode 100644 index 00000000..fb27a7f6 --- /dev/null +++ b/gnulib-m4/wchar_t.m4 @@ -0,0 +1,20 @@ +# wchar_t.m4 serial 3 (gettext-0.18) +dnl Copyright (C) 2002-2003, 2008, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether has the 'wchar_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WCHAR_T], +[ + AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], + [AC_TRY_COMPILE([#include + wchar_t foo = (wchar_t)'\0';], , + [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) + if test $gt_cv_c_wchar_t = yes; then + AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) + fi +]) diff --git a/gnulib-m4/wctob.m4 b/gnulib-m4/wctob.m4 new file mode 100644 index 00000000..39270c9d --- /dev/null +++ b/gnulib-m4/wctob.m4 @@ -0,0 +1,91 @@ +# wctob.m4 serial 4 +dnl Copyright (C) 2008-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_WCTOB], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + AC_CHECK_FUNCS_ONCE([wctob]) + if test $ac_cv_func_wctob = no; then + HAVE_DECL_WCTOB=0 + gl_REPLACE_WCHAR_H + AC_LIBOBJ([wctob]) + gl_PREREQ_WCTOB + else + + dnl Solaris 9 has the wctob() function but it does not work. + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([gt_LOCALE_FR]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + AC_CACHE_CHECK([whether wctob works], + [gl_cv_func_wctob_works], + [ + dnl Initial guess, used when cross-compiling or when no suitable locale + dnl is present. +changequote(,)dnl + case "$host_os" in + # Guess no on Solaris <= 9. + solaris2.[1-9] | solaris2.[1-9].*) + gl_cv_func_wctob_works="guessing no" ;; + # Guess yes otherwise. + *) gl_cv_func_wctob_works="guessing yes" ;; + esac +changequote([,])dnl + if test $LOCALE_FR != none; then + AC_TRY_RUN([ +#include +#include +#include +int main () +{ + if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) + { + wchar_t wc; + + if (mbtowc (&wc, "\374", 1) == 1) + if (wctob (wc) != (unsigned char) '\374') + return 1; + } + return 0; +}], + [gl_cv_func_wctob_works=yes], + [gl_cv_func_wctob_works=no], + [:]) + fi + ]) + case "$gl_cv_func_wctob_works" in + *yes) ;; + *) REPLACE_WCTOB=1 ;; + esac + if test $REPLACE_WCTOB = 1; then + gl_REPLACE_WCHAR_H + AC_LIBOBJ([wctob]) + gl_PREREQ_WCTOB + else + + dnl IRIX 6.5 has the wctob() function but does not declare it. + AC_CHECK_DECLS([wctob], [], [], [ +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include +]) + if test $ac_cv_have_decl_wctob != yes; then + HAVE_DECL_WCTOB=0 + gl_REPLACE_WCHAR_H + fi + fi + fi +]) + +# Prerequisites of lib/wctob.c. +AC_DEFUN([gl_PREREQ_WCTOB], [ + : +]) diff --git a/gnulib-m4/wctype.m4 b/gnulib-m4/wctype.m4 new file mode 100644 index 00000000..6a1b6f07 --- /dev/null +++ b/gnulib-m4/wctype.m4 @@ -0,0 +1,74 @@ +# wctype.m4 serial 2 + +dnl A placeholder for ISO C99 , for platforms that lack it. + +dnl Copyright (C) 2006-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +AC_DEFUN([gl_WCTYPE_H], +[ + AC_REQUIRE([AC_PROG_CC]) + AC_CHECK_FUNCS_ONCE([iswcntrl]) + if test $ac_cv_func_iswcntrl = yes; then + HAVE_ISWCNTRL=1 + else + HAVE_ISWCNTRL=0 + fi + AC_SUBST([HAVE_ISWCNTRL]) + AC_CHECK_HEADERS_ONCE([wctype.h]) + AC_REQUIRE([AC_C_INLINE]) + + AC_REQUIRE([gt_TYPE_WINT_T]) + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + AC_SUBST([HAVE_WINT_T]) + + WCTYPE_H=wctype.h + if test $ac_cv_header_wctype_h = yes; then + if test $ac_cv_func_iswcntrl = yes; then + dnl Linux libc5 has an iswprint function that returns 0 for all arguments. + dnl The other functions are likely broken in the same way. + AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works], + [ + AC_TRY_RUN([#include + #include + #include + #include + #include + int main () { return iswprint ('x') == 0; }], + [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no], + [AC_TRY_COMPILE([#include + #if __GNU_LIBRARY__ == 1 + Linux libc5 i18n is broken. + #endif], [], + [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no]) + ]) + ]) + if test $gl_cv_func_iswcntrl_works = yes; then + WCTYPE_H= + fi + fi + dnl Compute NEXT_WCTYPE_H even if WCTYPE_H is empty, + dnl for the benefit of builds from non-distclean directories. + gl_CHECK_NEXT_HEADERS([wctype.h]) + HAVE_WCTYPE_H=1 + else + HAVE_WCTYPE_H=0 + fi + AC_SUBST([HAVE_WCTYPE_H]) + AC_SUBST([WCTYPE_H]) + + if test "$gl_cv_func_iswcntrl_works" = no; then + REPLACE_ISWCNTRL=1 + else + REPLACE_ISWCNTRL=0 + fi + AC_SUBST([REPLACE_ISWCNTRL]) +]) diff --git a/gnulib-m4/wcwidth.m4 b/gnulib-m4/wcwidth.m4 new file mode 100644 index 00000000..4bedefae --- /dev/null +++ b/gnulib-m4/wcwidth.m4 @@ -0,0 +1,85 @@ +# wcwidth.m4 serial 14 +dnl Copyright (C) 2006-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_FUNC_WCWIDTH], +[ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + + dnl Persuade glibc to declare wcwidth(). + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) + + AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) + + AC_CHECK_HEADERS_ONCE([wchar.h]) + AC_CHECK_FUNCS_ONCE([wcwidth]) + + AC_CHECK_DECLS([wcwidth], [], [], [ +/* AIX 3.2.5 declares wcwidth in . */ +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include +]) + if test $ac_cv_have_decl_wcwidth != yes; then + HAVE_DECL_WCWIDTH=0 + fi + + if test $ac_cv_func_wcwidth = no; then + REPLACE_WCWIDTH=1 + else + dnl On MacOS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1. + dnl On OSF/1 5.1, wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1. + dnl This leads to bugs in 'ls' (coreutils). + AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales], + [gl_cv_func_wcwidth_works], + [ + AC_TRY_RUN([ +#include +/* AIX 3.2.5 declares wcwidth in . */ +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include +#if !HAVE_DECL_WCWIDTH +extern +# ifdef __cplusplus +"C" +# endif +int wcwidth (int); +#endif +int main () +{ + if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL) + if (wcwidth (0x0301) > 0 || wcwidth (0x200B) > 0) + return 1; + return 0; +}], [gl_cv_func_wcwidth_works=yes], [gl_cv_func_wcwidth_works=no], + [gl_cv_func_wcwidth_works="guessing no"]) + ]) + case "$gl_cv_func_wcwidth_works" in + *yes) ;; + *no) REPLACE_WCWIDTH=1 ;; + esac + fi + if test $REPLACE_WCWIDTH = 1; then + AC_LIBOBJ([wcwidth]) + fi + + if test $REPLACE_WCWIDTH = 1 || test $HAVE_DECL_WCWIDTH = 0; then + gl_REPLACE_WCHAR_H + fi +]) diff --git a/gnulib-m4/wint_t.m4 b/gnulib-m4/wint_t.m4 new file mode 100644 index 00000000..47a4363d --- /dev/null +++ b/gnulib-m4/wint_t.m4 @@ -0,0 +1,28 @@ +# wint_t.m4 serial 4 (gettext-0.18) +dnl Copyright (C) 2003, 2007-2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether has the 'wint_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WINT_T], +[ + AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], + [AC_TRY_COMPILE([ +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include + wint_t foo = (wchar_t)'\0';], , + [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])]) + if test $gt_cv_c_wint_t = yes; then + AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) + fi +]) diff --git a/gnulib-m4/xalloc.m4 b/gnulib-m4/xalloc.m4 new file mode 100644 index 00000000..837a948c --- /dev/null +++ b/gnulib-m4/xalloc.m4 @@ -0,0 +1,24 @@ +# xalloc.m4 serial 16 +dnl Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_XALLOC], +[ + AC_LIBOBJ([xmalloc]) + + gl_PREREQ_XALLOC + gl_PREREQ_XMALLOC +]) + +# Prerequisites of lib/xalloc.h. +AC_DEFUN([gl_PREREQ_XALLOC], [ + AC_REQUIRE([gl_INLINE]) + : +]) + +# Prerequisites of lib/xmalloc.c. +AC_DEFUN([gl_PREREQ_XMALLOC], [ + : +]) diff --git a/gnulib-m4/xsize.m4 b/gnulib-m4/xsize.m4 new file mode 100644 index 00000000..631893cf --- /dev/null +++ b/gnulib-m4/xsize.m4 @@ -0,0 +1,13 @@ +# xsize.m4 serial 4 +dnl Copyright (C) 2003-2004, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_XSIZE], +[ + dnl Prerequisites of lib/xsize.h. + AC_REQUIRE([gl_SIZE_MAX]) + AC_REQUIRE([AC_C_INLINE]) + AC_CHECK_HEADERS([stdint.h]) +]) diff --git a/lib/Makefile.am b/lib/Makefile.am new file mode 100644 index 00000000..24644e33 --- /dev/null +++ b/lib/Makefile.am @@ -0,0 +1,297 @@ +## Makefile for the lib subdirectory of GNU libunistring. +## Copyright (C) 2009 Free Software Foundation, Inc. +## +## This program is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . + +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects no-dependencies +EXTRA_DIST = +BUILT_SOURCES = +MOSTLYCLEANFILES = core *.stackdump +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = +SUFFIXES = + +lib_LTLIBRARIES = libunistring.la + +nobase_include_HEADERS = \ + unitypes.h \ + unistr.h \ + uniconv.h \ + unistdio.h \ + uniname.h \ + unictype.h \ + uniwidth.h \ + uniwbrk.h \ + unilbrk.h \ + uninorm.h \ + unicase.h \ + unistring/inline.h + +noinst_HEADERS = \ + unistring-notinline.h + +AM_CPPFLAGS = \ + -I. -I$(srcdir) \ + -I$(top_builddir) -I$(top_srcdir) \ + -DIN_LIBUNISTRING + +# Rules generated and collected by gnulib-tool. +include Makefile.gnulib + +# Additional source files. +libunistring_la_SOURCES += version.c + +# The and replacements that can be installed. +nobase_nodist_include_HEADERS = \ + unistring/stdbool.h \ + unistring/stdint.h + +# Produce an unistring/stdbool.h that is not compiler dependent. +# GCC >= 2.95 has . +# AIX >= 5.3 has . +# Solaris 10 and some HP-UX 11 versions have but it does not +# necessarily work. +unistring/stdbool.h : $(STDBOOL_H) + @MKDIR_P@ unistring + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#if !defined _GL_STDBOOL_H'; \ + if test -f /usr/include/stdbool.h; then \ + echo '#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) || defined _AIX'; \ + else \ + echo '#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))'; \ + fi; \ + echo '#include '; \ + echo '#else'; \ + cat $(srcdir)/stdbool.mini.h; \ + echo '#endif'; \ + echo '#endif'; \ + } > $@-t + mv $@-t $@ +BUILT_SOURCES += unistring/stdbool.h +MOSTLYCLEANFILES += unistring/stdbool.h-t +CLEANFILES += unistring/stdbool.h + +# Produce an unistring/stdint.h that is not compiler dependent. +# Glibc >= 2 has . +# On most other platforms that have it, it is buggy in one way or the other. +unistring/stdint.h : $(STDINT_H) stdint.mini.h + @MKDIR_P@ unistring + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#include '; \ + echo '#if __GLIBC__ >= 2'; \ + echo '#include '; \ + echo '#else'; \ + if test -f /usr/include/stdint.h; then \ + HAVE_STDINT_H='1'; \ + else \ + HAVE_STDINT_H='defined __MINGW32__ || defined __HAIKU__'; \ + fi; \ + if test -f /usr/include/inttypes.h; then \ + HAVE_INTTYPES_H='1'; \ + else \ + HAVE_INTTYPES_H='defined __MINGW32__ || defined __HAIKU__'; \ + fi; \ + if test -f /usr/include/sys/inttypes.h; then \ + HAVE_SYS_INTTYPES_H='1'; \ + else \ + HAVE_SYS_INTTYPES_H='0'; \ + fi; \ + sed -e 's/@''HAVE_STDINT_H''@/'"$$HAVE_STDINT_H"'/g' \ + -e 's|@''INCLUDE_NEXT''@|include|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@||g' \ + -e 's|@''NEXT_STDINT_H''@||g' \ + -e 's/@''HAVE_SYS_TYPES_H''@/1/g' \ + -e 's/@''HAVE_INTTYPES_H''@/'"$$HAVE_INTTYPES_H"'/g' \ + -e 's/@''HAVE_SYS_INTTYPES_H''@/'"$$HAVE_SYS_INTTYPES_H"'/g' \ + -e 's/@''HAVE_SYS_BITYPES_H''@/0/g' \ + < $(srcdir)/stdint.mini.h; \ + echo '#endif'; \ + } > $@-t + mv $@-t $@ +BUILT_SOURCES += unistring/stdint.h +MOSTLYCLEANFILES += unistring/stdint.h-t +CLEANFILES += unistring/stdint.h +EXTRA_DIST += stdint.mini.h + +# localcharset.h is not public, but its contents is documented. +nobase_nodist_include_HEADERS += unistring/localcharset.h +unistring/localcharset.h : localcharset.h + @MKDIR_P@ unistring + rm -f $@-t $@ + cp $(srcdir)/localcharset.h $@-t + mv $@-t $@ +BUILT_SOURCES += unistring/localcharset.h +MOSTLYCLEANFILES += unistring/localcharset.h-t +CLEANFILES += unistring/localcharset.h + +# iconveh.h is not public, but its contents is documented. +nobase_nodist_include_HEADERS += unistring/iconveh.h +unistring/iconveh.h : iconveh.h + @MKDIR_P@ unistring + rm -f $@-t $@ + cp $(srcdir)/iconveh.h $@-t + mv $@-t $@ +BUILT_SOURCES += unistring/iconveh.h +MOSTLYCLEANFILES += unistring/iconveh.h-t +CLEANFILES += unistring/iconveh.h + +# unistring/version.h is public. +nobase_nodist_include_HEADERS += unistring/version.h + +# unistring/woe32dll.h is not public, but is included by other header files. +nobase_nodist_include_HEADERS += unistring/woe32dll.h + +# Directories that contain some CLEANFILES. +CLEANDIRS = +CLEANDIRS_NOT_IN_SRCDIR = unistring +clean-local: clean-generic + @for dir in '' $(CLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + if test '$(srcdir)' != '.'; then \ + for dir in '' $(CLEANDIRS_NOT_IN_SRCDIR); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + fi; \ + : + +# List of header files that get installed and that declare 'extern' symbols. +HEADERS_WITH_EXTERNS = \ + unitypes.h \ + unistr.h \ + uniconv.h \ + unistdio.h \ + uniname.h \ + unictype.h \ + uniwidth.h \ + uniwbrk.h \ + unilbrk.h \ + uninorm.h \ + unicase.h \ + localcharset.h \ + iconveh.h \ + unistring/version.in.h + +# List of exported symbols. +# We extract it from the header files that get installed, removing symbols +# start with "_UC". +# This file has the same format as the one expected by the libtool option +# '-export-symbols', but we don't use this option, because it would prevent us +# from building some of the gnulib unit tests. +libunistring.sym : $(HEADERS_WITH_EXTERNS) + for f in $(HEADERS_WITH_EXTERNS); do cat $(srcdir)/$$f; done \ + | $(srcdir)/declared.sh | LC_ALL=C sort | LC_ALL=C uniq \ + | grep -v '^_UC' \ + > $@-t + mv $@-t $@ +# We distribute it because declared.sh relies on GNU sed. +MOSTLYCLEANFILES += libunistring.sym-t +MAINTAINERCLEANFILES += libunistring.sym +EXTRA_DIST += libunistring.sym declared.sh + +# Tell the mingw or Cygwin linker which symbols to export. +if WOE32DLL +libunistring_la_SOURCES += ../woe32dll/unistring-exports.c +libunistring_la_LDFLAGS += -Wl,--export-all-symbols +endif + +# Hide undesired symbols that are defined by libunistring_la_SOURCES or +# libunistring_la_LIBADD from the global namespace, by prefixing them with +# "libunistring_". +all check install: config.h +config.h: $(BUILT_SOURCES) libunistring.sym + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + : "Avoid double inclusion, to avoid a warning about redefinitions."; \ + echo '#ifndef UNISTRING_CONFIG_H'; \ + echo '#define UNISTRING_CONFIG_H'; \ + echo; \ + echo '#include "../config.h"'; \ + echo; \ + echo '#endif /* UNISTRING_CONFIG_H */'; \ + } > config.h && \ + if test -n "$(NAMESPACING)" && test -n "$(HAVE_GLOBAL_SYMBOL_PIPE)"; then \ + { \ + { \ + for f in $(libunistring_la_SOURCES) $(libunistring_la_LIBADD); do \ + case $$f in \ + *.res.lo ) ;; \ + *.c | *.$(OBJEXT) | *.lo ) \ + sf=`echo "$$f" | sed -e 's,\\.[^.]*$$,,'`.c; \ + test -f $$sf || sf=$(srcdir)/$$sf; \ + of=`echo "$$f" | sed -e 's,^.*/,,' -e 's,\\.[^.]*$$,,'`.$(OBJEXT); \ + echo "$(COMPILE) -c $$sf" 1>&6; \ + $(COMPILE) -c $$sf || { rm -f config.h; exit 1; }; \ + sh ./exported.sh $$of 1>&5; \ + rm -f $$of `echo "$$of" | sed -e 's,\\.$(OBJEXT)$$,.lo,'`; \ + ;; \ + esac; \ + done; \ + } 5>&1 \ + | sed -e 's,.* ,,' | LC_ALL=C sort | LC_ALL=C uniq \ + | { \ + if test -f libunistring.sym; then \ + symfile='libunistring.sym'; \ + else \ + symfile='$(srcdir)/libunistring.sym'; \ + fi; \ + LC_ALL=C join -v 1 - $$symfile; \ + } \ + | sed -e 's,^\(.*\)$$,#define \1 libunistring_\1,' > config.h-t; \ + } 6>&1 && \ + if test -f config.h; then \ + cat config.h-t >> config.h; \ + rm -f config.h-t; \ + else \ + rm -f config.h-t; \ + exit 1; \ + fi \ + fi +MOSTLYCLEANFILES += config.h config.h-t + +# Version information according to Woe32 conventions. +EXTRA_DIST += libunistring.rc +if WOE32 +WOE32_LIBADD = libunistring.res.lo +libunistring.res.lo : $(srcdir)/libunistring.rc + $(LIBTOOL) --tag=RC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(RC) `$(SHELL) $(top_srcdir)/build-aux/windres-options --escape $(VERSION)` -i $(srcdir)/libunistring.rc -o libunistring.res.lo --output-format=coff +MOSTLYCLEANFILES += libunistring.res.lo +else +WOE32_LIBADD = +endif +libunistring_la_LIBADD += $(WOE32_LIBADD) +libunistring_la_DEPENDENCIES += $(WOE32_LIBADD) + +# Parametrization of the 'relocatable-lib-lgpl' module. +AM_CPPFLAGS += -DDEPENDS_ON_LIBICONV=1 + +# Libtool's library version information for libunistring. +# See the libtool documentation, section "Library interface versions". +LTV_CURRENT=1 +LTV_REVISION=0 +LTV_AGE=1 + +# How to build libunistring.la. +libunistring_la_LDFLAGS += \ + -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ + -rpath $(libdir) \ + @INTL_MACOSX_LIBS@ -no-undefined diff --git a/lib/Makefile.gnulib b/lib/Makefile.gnulib new file mode 100644 index 00000000..b7a5d319 --- /dev/null +++ b/lib/Makefile.gnulib @@ -0,0 +1,4655 @@ +## DO NOT EDIT! GENERATED AUTOMATICALLY! +## Process this file with automake to produce Makefile.in. +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. + + +MOSTLYCLEANFILES += core *.stackdump + + +libunistring_la_SOURCES = +libunistring_la_LIBADD = $(gl_LTLIBOBJS) +libunistring_la_DEPENDENCIES = $(gl_LTLIBOBJS) +EXTRA_libunistring_la_SOURCES = +libunistring_la_LDFLAGS = $(AM_LDFLAGS) + +## begin gnulib module alloca-opt + +BUILT_SOURCES += $(ALLOCA_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +alloca.h: alloca.in.h + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/alloca.in.h; \ + } > $@-t + mv -f $@-t $@ +MOSTLYCLEANFILES += alloca.h alloca.h-t + +EXTRA_DIST += alloca.in.h + +## end gnulib module alloca-opt + +## begin gnulib module array-mergesort + + +EXTRA_DIST += array-mergesort.h + +## end gnulib module array-mergesort + +## begin gnulib module c-ctype + +libunistring_la_SOURCES += c-ctype.h c-ctype.c + +## end gnulib module c-ctype + +## begin gnulib module c-strcase + +libunistring_la_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c + +## end gnulib module c-strcase + +## begin gnulib module c-strcaseeq + + +EXTRA_DIST += c-strcaseeq.h + +## end gnulib module c-strcaseeq + +## begin gnulib module configmake + +# Retrieve values of the variables through 'configure' followed by +# 'make', not directly through 'configure', so that a user who +# sets some of these variables consistently on the 'make' command +# line gets correct results. +# +# One advantage of this approach, compared to the classical +# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS, +# is that it protects against the use of undefined variables. +# If, say, $(libdir) is not set in the Makefile, LIBDIR is not +# defined by this module, and code using LIBDIR gives a +# compilation error. +# +# Another advantage is that 'make' output is shorter. +# +# Listed in the same order as the GNU makefile conventions. +# The Automake-defined pkg* macros are appended, in the order +# listed in the Automake 1.10a+ documentation. +configmake.h: Makefile + rm -f $@-t + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#define PREFIX "$(prefix)"'; \ + echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ + echo '#define BINDIR "$(bindir)"'; \ + echo '#define SBINDIR "$(sbindir)"'; \ + echo '#define LIBEXECDIR "$(libexecdir)"'; \ + echo '#define DATAROOTDIR "$(datarootdir)"'; \ + echo '#define DATADIR "$(datadir)"'; \ + echo '#define SYSCONFDIR "$(sysconfdir)"'; \ + echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ + echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ + echo '#define INCLUDEDIR "$(includedir)"'; \ + echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ + echo '#define DOCDIR "$(docdir)"'; \ + echo '#define INFODIR "$(infodir)"'; \ + echo '#define HTMLDIR "$(htmldir)"'; \ + echo '#define DVIDIR "$(dvidir)"'; \ + echo '#define PDFDIR "$(pdfdir)"'; \ + echo '#define PSDIR "$(psdir)"'; \ + echo '#define LIBDIR "$(libdir)"'; \ + echo '#define LISPDIR "$(lispdir)"'; \ + echo '#define LOCALEDIR "$(localedir)"'; \ + echo '#define MANDIR "$(mandir)"'; \ + echo '#define MANEXT "$(manext)"'; \ + echo '#define PKGDATADIR "$(pkgdatadir)"'; \ + echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ + echo '#define PKGLIBDIR "$(pkglibdir)"'; \ + echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ + } | sed '/""/d' > $@-t + if test -f $@ && cmp $@-t $@ > /dev/null; then \ + rm -f $@-t; \ + else \ + rm -f $@; mv $@-t $@; \ + fi + +BUILT_SOURCES += configmake.h +CLEANFILES += configmake.h configmake.h-t + +## end gnulib module configmake + +## begin gnulib module errno + +BUILT_SOURCES += $(ERRNO_H) + +# We need the following in order to create when the system +# doesn't have one that is POSIX compliant. +errno.h: errno.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ + -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ + -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ + -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ + -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ + -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ + -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ + < $(srcdir)/errno.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += errno.h errno.h-t + +EXTRA_DIST += errno.in.h + +## end gnulib module errno + +## begin gnulib module float + +BUILT_SOURCES += $(FLOAT_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +float.h: float.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ + < $(srcdir)/float.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += float.h float.h-t + +EXTRA_DIST += float.in.h + +## end gnulib module float + +## begin gnulib module fpucw + + +EXTRA_DIST += fpucw.h + +## end gnulib module fpucw + +## begin gnulib module frexpl-nolibm + + +EXTRA_DIST += frexp.c frexpl.c + +EXTRA_libunistring_la_SOURCES += frexp.c frexpl.c + +## end gnulib module frexpl-nolibm + +## begin gnulib module fseterr + +libunistring_la_SOURCES += fseterr.c + +EXTRA_DIST += fseterr.h stdio-impl.h + +## end gnulib module fseterr + +## begin gnulib module getpagesize + + +EXTRA_DIST += getpagesize.c + +EXTRA_libunistring_la_SOURCES += getpagesize.c + +## end gnulib module getpagesize + +## begin gnulib module gperf + +GPERF = gperf + +## end gnulib module gperf + +## begin gnulib module havelib + + +EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath + +## end gnulib module havelib + +## begin gnulib module iconv_open + +BUILT_SOURCES += $(ICONV_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +iconv.h: iconv.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_ICONV_H''@|$(NEXT_ICONV_H)|g' \ + -e 's|@''ICONV_CONST''@|$(ICONV_CONST)|g' \ + -e 's|@''REPLACE_ICONV''@|$(REPLACE_ICONV)|g' \ + -e 's|@''REPLACE_ICONV_OPEN''@|$(REPLACE_ICONV_OPEN)|g' \ + -e 's|@''REPLACE_ICONV_UTF''@|$(REPLACE_ICONV_UTF)|g' \ + < $(srcdir)/iconv.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += iconv.h iconv.h-t + +iconv_open-aix.h: iconv_open-aix.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-aix.gperf > $(srcdir)/iconv_open-aix.h-t + mv $(srcdir)/iconv_open-aix.h-t $(srcdir)/iconv_open-aix.h +iconv_open-hpux.h: iconv_open-hpux.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-hpux.gperf > $(srcdir)/iconv_open-hpux.h-t + mv $(srcdir)/iconv_open-hpux.h-t $(srcdir)/iconv_open-hpux.h +iconv_open-irix.h: iconv_open-irix.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-irix.gperf > $(srcdir)/iconv_open-irix.h-t + mv $(srcdir)/iconv_open-irix.h-t $(srcdir)/iconv_open-irix.h +iconv_open-osf.h: iconv_open-osf.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-osf.gperf > $(srcdir)/iconv_open-osf.h-t + mv $(srcdir)/iconv_open-osf.h-t $(srcdir)/iconv_open-osf.h +BUILT_SOURCES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h +MOSTLYCLEANFILES += iconv_open-aix.h-t iconv_open-hpux.h-t iconv_open-irix.h-t iconv_open-osf.h-t +MAINTAINERCLEANFILES += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h +EXTRA_DIST += iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h iconv_open-osf.h + +EXTRA_DIST += iconv.in.h iconv_open-aix.gperf iconv_open-hpux.gperf iconv_open-irix.gperf iconv_open-osf.gperf iconv_open.c + +EXTRA_libunistring_la_SOURCES += iconv_open.c + +## end gnulib module iconv_open + +## begin gnulib module isnand-nolibm + + +EXTRA_DIST += float+.h isnan.c isnand-nolibm.h isnand.c + +EXTRA_libunistring_la_SOURCES += isnan.c isnand.c + +## end gnulib module isnand-nolibm + +## begin gnulib module isnanf-nolibm + + +EXTRA_DIST += float+.h isnan.c isnanf-nolibm.h isnanf.c + +EXTRA_libunistring_la_SOURCES += isnan.c isnanf.c + +## end gnulib module isnanf-nolibm + +## begin gnulib module isnanl-nolibm + + +EXTRA_DIST += float+.h isnan.c isnanl-nolibm.h isnanl.c + +EXTRA_libunistring_la_SOURCES += isnan.c isnanl.c + +## end gnulib module isnanl-nolibm + +## begin gnulib module link-warning + +LINK_WARNING_H=$(top_srcdir)/build-aux/link-warning.h + +EXTRA_DIST += $(top_srcdir)/build-aux/link-warning.h + +## end gnulib module link-warning + +## begin gnulib module localcharset + +libunistring_la_SOURCES += localcharset.h localcharset.c + +# We need the following in order to install a simple file in $(libdir) +# which is shared with other installed packages. We use a list of referencing +# packages so that "make uninstall" will remove the file if and only if it +# is not used by another installed package. +# On systems with glibc-2.1 or newer, the file is redundant, therefore we +# avoid installing it. + +all-local: charset.alias ref-add.sed ref-del.sed + +charset_alias = $(DESTDIR)$(libdir)/charset.alias +charset_tmp = $(DESTDIR)$(libdir)/charset.tmp +install-exec-local: install-exec-localcharset +install-exec-localcharset: all-local + if test $(GLIBC21) = no; then \ + case '$(host_os)' in \ + darwin[56]*) \ + need_charset_alias=true ;; \ + darwin* | cygwin* | mingw* | pw32* | cegcc*) \ + need_charset_alias=false ;; \ + *) \ + need_charset_alias=true ;; \ + esac ; \ + else \ + need_charset_alias=false ; \ + fi ; \ + if $$need_charset_alias; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ + fi ; \ + if test -f $(charset_alias); then \ + sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + else \ + if $$need_charset_alias; then \ + sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + fi ; \ + fi + +uninstall-local: uninstall-localcharset +uninstall-localcharset: all-local + if test -f $(charset_alias); then \ + sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ + if grep '^# Packages using this file: $$' $(charset_tmp) \ + > /dev/null; then \ + rm -f $(charset_alias); \ + else \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ + fi; \ + rm -f $(charset_tmp); \ + fi + +charset.alias: config.charset + rm -f t-$@ $@ + $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ + mv t-$@ $@ + +SUFFIXES += .sed .sin +.sin.sed: + rm -f t-$@ $@ + sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ + mv t-$@ $@ + +CLEANFILES += charset.alias ref-add.sed ref-del.sed + +EXTRA_DIST += config.charset ref-add.sin ref-del.sin + +## end gnulib module localcharset + +## begin gnulib module localename + +libunistring_la_SOURCES += localename.c + +EXTRA_DIST += localename.h + +## end gnulib module localename + +## begin gnulib module malloc-posix + + +EXTRA_DIST += malloc.c + +EXTRA_libunistring_la_SOURCES += malloc.c + +## end gnulib module malloc-posix + +## begin gnulib module malloca + +libunistring_la_SOURCES += malloca.c + +EXTRA_DIST += malloca.h malloca.valgrind + +## end gnulib module malloca + +## begin gnulib module math + +BUILT_SOURCES += math.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +math.h: math.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ + -e 's|@''GNULIB_CEILF''@|$(GNULIB_CEILF)|g' \ + -e 's|@''GNULIB_CEILL''@|$(GNULIB_CEILL)|g' \ + -e 's|@''GNULIB_FLOORF''@|$(GNULIB_FLOORF)|g' \ + -e 's|@''GNULIB_FLOORL''@|$(GNULIB_FLOORL)|g' \ + -e 's|@''GNULIB_FREXP''@|$(GNULIB_FREXP)|g' \ + -e 's|@''GNULIB_FREXPL''@|$(GNULIB_FREXPL)|g' \ + -e 's|@''GNULIB_ISFINITE''@|$(GNULIB_ISFINITE)|g' \ + -e 's|@''GNULIB_ISINF''@|$(GNULIB_ISINF)|g' \ + -e 's|@''GNULIB_ISNAN''@|$(GNULIB_ISNAN)|g' \ + -e 's|@''GNULIB_ISNANF''@|$(GNULIB_ISNANF)|g' \ + -e 's|@''GNULIB_ISNAND''@|$(GNULIB_ISNAND)|g' \ + -e 's|@''GNULIB_ISNANL''@|$(GNULIB_ISNANL)|g' \ + -e 's|@''GNULIB_LDEXPL''@|$(GNULIB_LDEXPL)|g' \ + -e 's|@''GNULIB_MATHL''@|$(GNULIB_MATHL)|g' \ + -e 's|@''GNULIB_ROUND''@|$(GNULIB_ROUND)|g' \ + -e 's|@''GNULIB_ROUNDF''@|$(GNULIB_ROUNDF)|g' \ + -e 's|@''GNULIB_ROUNDL''@|$(GNULIB_ROUNDL)|g' \ + -e 's|@''GNULIB_SIGNBIT''@|$(GNULIB_SIGNBIT)|g' \ + -e 's|@''GNULIB_TRUNC''@|$(GNULIB_TRUNC)|g' \ + -e 's|@''GNULIB_TRUNCF''@|$(GNULIB_TRUNCF)|g' \ + -e 's|@''GNULIB_TRUNCL''@|$(GNULIB_TRUNCL)|g' \ + -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ + -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ + -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ + -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ + -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ + -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ + -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ + -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ + -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ + -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ + -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ + -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ + -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ + -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ + -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ + -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ + -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ + -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ + -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ + -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ + -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ + -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ + -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ + -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ + -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ + -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ + -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ + -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ + -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ + -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ + -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ + -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ + -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ + -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/math.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += math.h math.h-t + +EXTRA_DIST += math.in.h + +## end gnulib module math + +## begin gnulib module mbchar + +libunistring_la_SOURCES += mbchar.c + +EXTRA_DIST += mbchar.h + +## end gnulib module mbchar + +## begin gnulib module mbiter + +libunistring_la_SOURCES += mbiter.h + +## end gnulib module mbiter + +## begin gnulib module mbrtowc + + +EXTRA_DIST += mbrtowc.c + +EXTRA_libunistring_la_SOURCES += mbrtowc.c + +## end gnulib module mbrtowc + +## begin gnulib module mbsinit + + +EXTRA_DIST += mbsinit.c + +EXTRA_libunistring_la_SOURCES += mbsinit.c + +## end gnulib module mbsinit + +## begin gnulib module mbsnlen + +libunistring_la_SOURCES += mbsnlen.c + +## end gnulib module mbsnlen + +## begin gnulib module memchr + + +EXTRA_DIST += memchr.c memchr.valgrind + +EXTRA_libunistring_la_SOURCES += memchr.c + +## end gnulib module memchr + +## begin gnulib module memcmp2 + +libunistring_la_SOURCES += memcmp2.c + +EXTRA_DIST += memcmp2.h + +## end gnulib module memcmp2 + +## begin gnulib module memxfrm + +libunistring_la_SOURCES += memxfrm.c + +EXTRA_DIST += memxfrm.h + +## end gnulib module memxfrm + +## begin gnulib module minmax + +libunistring_la_SOURCES += minmax.h + +## end gnulib module minmax + +## begin gnulib module printf-frexp + +libunistring_la_SOURCES += printf-frexp.c + +EXTRA_DIST += printf-frexp.h + +## end gnulib module printf-frexp + +## begin gnulib module printf-frexpl + +libunistring_la_SOURCES += printf-frexpl.c + +EXTRA_DIST += printf-frexp.c printf-frexpl.h + +EXTRA_libunistring_la_SOURCES += printf-frexp.c + +## end gnulib module printf-frexpl + +## begin gnulib module relocatable-lib-lgpl + +DEFS += -DNO_XMALLOC + +EXTRA_DIST += relocatable.c relocatable.h + +EXTRA_libunistring_la_SOURCES += relocatable.c + +## end gnulib module relocatable-lib-lgpl + +## begin gnulib module signbit + + +EXTRA_DIST += float+.h signbitd.c signbitf.c signbitl.c + +EXTRA_libunistring_la_SOURCES += signbitd.c signbitf.c signbitl.c + +## end gnulib module signbit + +## begin gnulib module size_max + +libunistring_la_SOURCES += size_max.h + +## end gnulib module size_max + +## begin gnulib module stdbool + +BUILT_SOURCES += $(STDBOOL_H) + +# We need the following in order to create when the system +# doesn't have one that works. +stdbool.h: stdbool.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += stdbool.h stdbool.h-t + +EXTRA_DIST += stdbool.in.h + +## end gnulib module stdbool + +## begin gnulib module stdint + +BUILT_SOURCES += $(STDINT_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdint.h: stdint.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ + -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ + -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ + -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ + -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ + -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ + -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ + -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ + -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ + -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ + -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ + < $(srcdir)/stdint.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += stdint.h stdint.h-t + +EXTRA_DIST += stdint.in.h + +## end gnulib module stdint + +## begin gnulib module stdlib + +BUILT_SOURCES += stdlib.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdlib.h: stdlib.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \ + -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \ + -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \ + -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \ + -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \ + -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \ + -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \ + -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \ + -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \ + -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \ + -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \ + -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \ + -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \ + -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \ + -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \ + -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \ + -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ + -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \ + -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ + -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \ + -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ + -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ + -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ + -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ + -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \ + -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ + -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/stdlib.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += stdlib.h stdlib.h-t + +EXTRA_DIST += stdlib.in.h + +## end gnulib module stdlib + +## begin gnulib module streq + + +EXTRA_DIST += streq.h + +## end gnulib module streq + +## begin gnulib module striconveh + +libunistring_la_SOURCES += striconveh.h striconveh.c +if GL_COND_LIBTOOL +libunistring_la_LDFLAGS += $(LTLIBICONV) +endif + +EXTRA_DIST += iconveh.h + +## end gnulib module striconveh + +## begin gnulib module striconveha + +libunistring_la_SOURCES += striconveha.h striconveha.c + +## end gnulib module striconveha + +## begin gnulib module string + +BUILT_SOURCES += string.h + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +string.h: string.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \ + -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \ + -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \ + -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \ + -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \ + -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \ + -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \ + -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \ + -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \ + -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \ + -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \ + -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \ + -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \ + -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \ + -e 's|@''GNULIB_MEMCHR''@|$(GNULIB_MEMCHR)|g' \ + -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \ + -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \ + -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \ + -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \ + -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \ + -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \ + -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \ + -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \ + -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \ + -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \ + -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \ + -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \ + -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \ + -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \ + -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \ + -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \ + -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \ + -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \ + -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ + -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ + -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ + -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ + -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ + -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ + -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ + -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ + -e 's|@''HAVE_STRNDUP''@|$(HAVE_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ + -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ + -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ + -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ + -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \ + -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/string.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += string.h string.h-t + +EXTRA_DIST += string.in.h + +## end gnulib module string + +## begin gnulib module unicase/base + + +EXTRA_DIST += unicase.h + +## end gnulib module unicase/base + +## begin gnulib module unicase/cased + +libunistring_la_SOURCES += unicase/cased.c + +EXTRA_DIST += unicase/cased.h unicase/caseprop.h unictype/bitmap.h + +## end gnulib module unicase/cased + +## begin gnulib module unicase/empty-prefix-context + +libunistring_la_SOURCES += unicase/empty-prefix-context.c + +## end gnulib module unicase/empty-prefix-context + +## begin gnulib module unicase/empty-suffix-context + +libunistring_la_SOURCES += unicase/empty-suffix-context.c + +## end gnulib module unicase/empty-suffix-context + +## begin gnulib module unicase/ignorable + +libunistring_la_SOURCES += unicase/ignorable.c + +EXTRA_DIST += unicase/caseprop.h unicase/ignorable.h unictype/bitmap.h + +## end gnulib module unicase/ignorable + +## begin gnulib module unicase/locale-language + +libunistring_la_SOURCES += unicase/locale-language.c + +unicase/locale-languages.h: $(srcdir)/unicase/locale-languages.gperf + $(GPERF) -m 10 $(srcdir)/unicase/locale-languages.gperf > $(srcdir)/unicase/locale-languages.h-t + mv $(srcdir)/unicase/locale-languages.h-t $(srcdir)/unicase/locale-languages.h +BUILT_SOURCES += unicase/locale-languages.h +MOSTLYCLEANFILES += unicase/locale-languages.h-t +MAINTAINERCLEANFILES += unicase/locale-languages.h +EXTRA_DIST += unicase/locale-languages.h + +EXTRA_DIST += unicase/locale-languages.gperf + +## end gnulib module unicase/locale-language + +## begin gnulib module unicase/special-casing + +libunistring_la_SOURCES += unicase/special-casing.c + +unicase/special-casing-table.h: $(srcdir)/unicase/special-casing-table.gperf + $(GPERF) -m 10 $(srcdir)/unicase/special-casing-table.gperf > $(srcdir)/unicase/special-casing-table.h-t + mv $(srcdir)/unicase/special-casing-table.h-t $(srcdir)/unicase/special-casing-table.h +BUILT_SOURCES += unicase/special-casing-table.h +MOSTLYCLEANFILES += unicase/special-casing-table.h-t +MAINTAINERCLEANFILES += unicase/special-casing-table.h +EXTRA_DIST += unicase/special-casing-table.h + +EXTRA_DIST += unicase/special-casing-table.gperf unicase/special-casing.h + +## end gnulib module unicase/special-casing + +## begin gnulib module unicase/tocasefold + +libunistring_la_SOURCES += unicase/tocasefold.c + +EXTRA_DIST += unicase/casefold.h unicase/simple-mapping.h unicase/tocasefold.h + +## end gnulib module unicase/tocasefold + +## begin gnulib module unicase/tolower + +libunistring_la_SOURCES += unicase/tolower.c + +EXTRA_DIST += unicase/simple-mapping.h unicase/tolower.h + +## end gnulib module unicase/tolower + +## begin gnulib module unicase/totitle + +libunistring_la_SOURCES += unicase/totitle.c + +EXTRA_DIST += unicase/simple-mapping.h unicase/totitle.h + +## end gnulib module unicase/totitle + +## begin gnulib module unicase/toupper + +libunistring_la_SOURCES += unicase/toupper.c + +EXTRA_DIST += unicase/simple-mapping.h unicase/toupper.h + +## end gnulib module unicase/toupper + +## begin gnulib module unicase/u16-casecmp + +libunistring_la_SOURCES += unicase/u16-casecmp.c + +EXTRA_DIST += unicase/u-casecmp.h + +## end gnulib module unicase/u16-casecmp + +## begin gnulib module unicase/u16-casecoll + +libunistring_la_SOURCES += unicase/u16-casecoll.c + +EXTRA_DIST += unicase/u-casecoll.h + +## end gnulib module unicase/u16-casecoll + +## begin gnulib module unicase/u16-casefold + +libunistring_la_SOURCES += unicase/u16-casefold.c + +EXTRA_DIST += unicase/u-casefold.h + +## end gnulib module unicase/u16-casefold + +## begin gnulib module unicase/u16-casemap + +libunistring_la_SOURCES += unicase/u16-casemap.c + +EXTRA_DIST += unicase/context.h unicase/u-casemap.h unicase/unicasemap.h + +## end gnulib module unicase/u16-casemap + +## begin gnulib module unicase/u16-casexfrm + +libunistring_la_SOURCES += unicase/u16-casexfrm.c + +EXTRA_DIST += unicase/u-casexfrm.h + +## end gnulib module unicase/u16-casexfrm + +## begin gnulib module unicase/u16-ct-casefold + +libunistring_la_SOURCES += unicase/u16-ct-casefold.c + +EXTRA_DIST += unicase/u-ct-casefold.h + +## end gnulib module unicase/u16-ct-casefold + +## begin gnulib module unicase/u16-ct-tolower + +libunistring_la_SOURCES += unicase/u16-ct-tolower.c + +## end gnulib module unicase/u16-ct-tolower + +## begin gnulib module unicase/u16-ct-totitle + +libunistring_la_SOURCES += unicase/u16-ct-totitle.c + +EXTRA_DIST += unicase/context.h unicase/u-ct-totitle.h + +## end gnulib module unicase/u16-ct-totitle + +## begin gnulib module unicase/u16-ct-toupper + +libunistring_la_SOURCES += unicase/u16-ct-toupper.c + +## end gnulib module unicase/u16-ct-toupper + +## begin gnulib module unicase/u16-is-cased + +libunistring_la_SOURCES += unicase/u16-is-cased.c + +EXTRA_DIST += unicase/u-is-cased.h + +## end gnulib module unicase/u16-is-cased + +## begin gnulib module unicase/u16-is-casefolded + +libunistring_la_SOURCES += unicase/u16-is-casefolded.c + +## end gnulib module unicase/u16-is-casefolded + +## begin gnulib module unicase/u16-is-invariant + +libunistring_la_SOURCES += unicase/u16-is-invariant.c + +EXTRA_DIST += unicase/invariant.h unicase/u-is-invariant.h + +## end gnulib module unicase/u16-is-invariant + +## begin gnulib module unicase/u16-is-lowercase + +libunistring_la_SOURCES += unicase/u16-is-lowercase.c + +## end gnulib module unicase/u16-is-lowercase + +## begin gnulib module unicase/u16-is-titlecase + +libunistring_la_SOURCES += unicase/u16-is-titlecase.c + +## end gnulib module unicase/u16-is-titlecase + +## begin gnulib module unicase/u16-is-uppercase + +libunistring_la_SOURCES += unicase/u16-is-uppercase.c + +## end gnulib module unicase/u16-is-uppercase + +## begin gnulib module unicase/u16-tolower + +libunistring_la_SOURCES += unicase/u16-tolower.c + +## end gnulib module unicase/u16-tolower + +## begin gnulib module unicase/u16-totitle + +libunistring_la_SOURCES += unicase/u16-totitle.c + +EXTRA_DIST += unicase/u-totitle.h + +## end gnulib module unicase/u16-totitle + +## begin gnulib module unicase/u16-toupper + +libunistring_la_SOURCES += unicase/u16-toupper.c + +## end gnulib module unicase/u16-toupper + +## begin gnulib module unicase/u32-casecmp + +libunistring_la_SOURCES += unicase/u32-casecmp.c + +EXTRA_DIST += unicase/u-casecmp.h + +## end gnulib module unicase/u32-casecmp + +## begin gnulib module unicase/u32-casecoll + +libunistring_la_SOURCES += unicase/u32-casecoll.c + +EXTRA_DIST += unicase/u-casecoll.h + +## end gnulib module unicase/u32-casecoll + +## begin gnulib module unicase/u32-casefold + +libunistring_la_SOURCES += unicase/u32-casefold.c + +EXTRA_DIST += unicase/u-casefold.h + +## end gnulib module unicase/u32-casefold + +## begin gnulib module unicase/u32-casemap + +libunistring_la_SOURCES += unicase/u32-casemap.c + +EXTRA_DIST += unicase/context.h unicase/u-casemap.h unicase/unicasemap.h + +## end gnulib module unicase/u32-casemap + +## begin gnulib module unicase/u32-casexfrm + +libunistring_la_SOURCES += unicase/u32-casexfrm.c + +EXTRA_DIST += unicase/u-casexfrm.h + +## end gnulib module unicase/u32-casexfrm + +## begin gnulib module unicase/u32-ct-casefold + +libunistring_la_SOURCES += unicase/u32-ct-casefold.c + +EXTRA_DIST += unicase/u-ct-casefold.h + +## end gnulib module unicase/u32-ct-casefold + +## begin gnulib module unicase/u32-ct-tolower + +libunistring_la_SOURCES += unicase/u32-ct-tolower.c + +## end gnulib module unicase/u32-ct-tolower + +## begin gnulib module unicase/u32-ct-totitle + +libunistring_la_SOURCES += unicase/u32-ct-totitle.c + +EXTRA_DIST += unicase/context.h unicase/u-ct-totitle.h + +## end gnulib module unicase/u32-ct-totitle + +## begin gnulib module unicase/u32-ct-toupper + +libunistring_la_SOURCES += unicase/u32-ct-toupper.c + +## end gnulib module unicase/u32-ct-toupper + +## begin gnulib module unicase/u32-is-cased + +libunistring_la_SOURCES += unicase/u32-is-cased.c + +EXTRA_DIST += unicase/u-is-cased.h + +## end gnulib module unicase/u32-is-cased + +## begin gnulib module unicase/u32-is-casefolded + +libunistring_la_SOURCES += unicase/u32-is-casefolded.c + +## end gnulib module unicase/u32-is-casefolded + +## begin gnulib module unicase/u32-is-invariant + +libunistring_la_SOURCES += unicase/u32-is-invariant.c + +EXTRA_DIST += unicase/invariant.h unicase/u-is-invariant.h + +## end gnulib module unicase/u32-is-invariant + +## begin gnulib module unicase/u32-is-lowercase + +libunistring_la_SOURCES += unicase/u32-is-lowercase.c + +## end gnulib module unicase/u32-is-lowercase + +## begin gnulib module unicase/u32-is-titlecase + +libunistring_la_SOURCES += unicase/u32-is-titlecase.c + +## end gnulib module unicase/u32-is-titlecase + +## begin gnulib module unicase/u32-is-uppercase + +libunistring_la_SOURCES += unicase/u32-is-uppercase.c + +## end gnulib module unicase/u32-is-uppercase + +## begin gnulib module unicase/u32-tolower + +libunistring_la_SOURCES += unicase/u32-tolower.c + +## end gnulib module unicase/u32-tolower + +## begin gnulib module unicase/u32-totitle + +libunistring_la_SOURCES += unicase/u32-totitle.c + +EXTRA_DIST += unicase/u-totitle.h + +## end gnulib module unicase/u32-totitle + +## begin gnulib module unicase/u32-toupper + +libunistring_la_SOURCES += unicase/u32-toupper.c + +## end gnulib module unicase/u32-toupper + +## begin gnulib module unicase/u8-casecmp + +libunistring_la_SOURCES += unicase/u8-casecmp.c + +EXTRA_DIST += unicase/u-casecmp.h + +## end gnulib module unicase/u8-casecmp + +## begin gnulib module unicase/u8-casecoll + +libunistring_la_SOURCES += unicase/u8-casecoll.c + +EXTRA_DIST += unicase/u-casecoll.h + +## end gnulib module unicase/u8-casecoll + +## begin gnulib module unicase/u8-casefold + +libunistring_la_SOURCES += unicase/u8-casefold.c + +EXTRA_DIST += unicase/u-casefold.h + +## end gnulib module unicase/u8-casefold + +## begin gnulib module unicase/u8-casemap + +libunistring_la_SOURCES += unicase/u8-casemap.c + +EXTRA_DIST += unicase/context.h unicase/u-casemap.h unicase/unicasemap.h + +## end gnulib module unicase/u8-casemap + +## begin gnulib module unicase/u8-casexfrm + +libunistring_la_SOURCES += unicase/u8-casexfrm.c + +EXTRA_DIST += unicase/u-casexfrm.h + +## end gnulib module unicase/u8-casexfrm + +## begin gnulib module unicase/u8-ct-casefold + +libunistring_la_SOURCES += unicase/u8-ct-casefold.c + +EXTRA_DIST += unicase/u-ct-casefold.h + +## end gnulib module unicase/u8-ct-casefold + +## begin gnulib module unicase/u8-ct-tolower + +libunistring_la_SOURCES += unicase/u8-ct-tolower.c + +## end gnulib module unicase/u8-ct-tolower + +## begin gnulib module unicase/u8-ct-totitle + +libunistring_la_SOURCES += unicase/u8-ct-totitle.c + +EXTRA_DIST += unicase/context.h unicase/u-ct-totitle.h + +## end gnulib module unicase/u8-ct-totitle + +## begin gnulib module unicase/u8-ct-toupper + +libunistring_la_SOURCES += unicase/u8-ct-toupper.c + +## end gnulib module unicase/u8-ct-toupper + +## begin gnulib module unicase/u8-is-cased + +libunistring_la_SOURCES += unicase/u8-is-cased.c + +EXTRA_DIST += unicase/u-is-cased.h + +## end gnulib module unicase/u8-is-cased + +## begin gnulib module unicase/u8-is-casefolded + +libunistring_la_SOURCES += unicase/u8-is-casefolded.c + +## end gnulib module unicase/u8-is-casefolded + +## begin gnulib module unicase/u8-is-invariant + +libunistring_la_SOURCES += unicase/u8-is-invariant.c + +EXTRA_DIST += unicase/invariant.h unicase/u-is-invariant.h + +## end gnulib module unicase/u8-is-invariant + +## begin gnulib module unicase/u8-is-lowercase + +libunistring_la_SOURCES += unicase/u8-is-lowercase.c + +## end gnulib module unicase/u8-is-lowercase + +## begin gnulib module unicase/u8-is-titlecase + +libunistring_la_SOURCES += unicase/u8-is-titlecase.c + +## end gnulib module unicase/u8-is-titlecase + +## begin gnulib module unicase/u8-is-uppercase + +libunistring_la_SOURCES += unicase/u8-is-uppercase.c + +## end gnulib module unicase/u8-is-uppercase + +## begin gnulib module unicase/u8-tolower + +libunistring_la_SOURCES += unicase/u8-tolower.c + +## end gnulib module unicase/u8-tolower + +## begin gnulib module unicase/u8-totitle + +libunistring_la_SOURCES += unicase/u8-totitle.c + +EXTRA_DIST += unicase/u-totitle.h + +## end gnulib module unicase/u8-totitle + +## begin gnulib module unicase/u8-toupper + +libunistring_la_SOURCES += unicase/u8-toupper.c + +## end gnulib module unicase/u8-toupper + +## begin gnulib module unicase/ulc-casecmp + +libunistring_la_SOURCES += unicase/ulc-casecmp.c + +EXTRA_DIST += unicase/u-casecmp.h + +## end gnulib module unicase/ulc-casecmp + +## begin gnulib module unicase/ulc-casecoll + +libunistring_la_SOURCES += unicase/ulc-casecoll.c + +EXTRA_DIST += unicase/u-casecoll.h + +## end gnulib module unicase/ulc-casecoll + +## begin gnulib module unicase/ulc-casexfrm + +libunistring_la_SOURCES += unicase/ulc-casexfrm.c + +## end gnulib module unicase/ulc-casexfrm + +## begin gnulib module uniconv/base + + +EXTRA_DIST += iconveh.h localcharset.h striconveha.h uniconv.h + +## end gnulib module uniconv/base + +## begin gnulib module uniconv/u16-conv-from-enc + +libunistring_la_SOURCES += uniconv/u16-conv-from-enc.c + +EXTRA_DIST += uniconv/u-conv-from-enc.h + +## end gnulib module uniconv/u16-conv-from-enc + +## begin gnulib module uniconv/u16-conv-to-enc + +libunistring_la_SOURCES += uniconv/u16-conv-to-enc.c + +EXTRA_DIST += uniconv/u-conv-to-enc.h + +## end gnulib module uniconv/u16-conv-to-enc + +## begin gnulib module uniconv/u16-strconv-from-enc + +libunistring_la_SOURCES += uniconv/u16-strconv-from-enc.c + +EXTRA_DIST += uniconv/u-strconv-from-enc.h + +## end gnulib module uniconv/u16-strconv-from-enc + +## begin gnulib module uniconv/u16-strconv-from-locale + +libunistring_la_SOURCES += uniconv/u16-strconv-from-locale.c + +## end gnulib module uniconv/u16-strconv-from-locale + +## begin gnulib module uniconv/u16-strconv-to-enc + +libunistring_la_SOURCES += uniconv/u16-strconv-to-enc.c + +EXTRA_DIST += uniconv/u-strconv-to-enc.h + +## end gnulib module uniconv/u16-strconv-to-enc + +## begin gnulib module uniconv/u16-strconv-to-locale + +libunistring_la_SOURCES += uniconv/u16-strconv-to-locale.c + +## end gnulib module uniconv/u16-strconv-to-locale + +## begin gnulib module uniconv/u32-conv-from-enc + +libunistring_la_SOURCES += uniconv/u32-conv-from-enc.c + +EXTRA_DIST += uniconv/u-conv-from-enc.h + +## end gnulib module uniconv/u32-conv-from-enc + +## begin gnulib module uniconv/u32-conv-to-enc + +libunistring_la_SOURCES += uniconv/u32-conv-to-enc.c + +EXTRA_DIST += uniconv/u-conv-to-enc.h + +## end gnulib module uniconv/u32-conv-to-enc + +## begin gnulib module uniconv/u32-strconv-from-enc + +libunistring_la_SOURCES += uniconv/u32-strconv-from-enc.c + +EXTRA_DIST += uniconv/u-strconv-from-enc.h + +## end gnulib module uniconv/u32-strconv-from-enc + +## begin gnulib module uniconv/u32-strconv-from-locale + +libunistring_la_SOURCES += uniconv/u32-strconv-from-locale.c + +## end gnulib module uniconv/u32-strconv-from-locale + +## begin gnulib module uniconv/u32-strconv-to-enc + +libunistring_la_SOURCES += uniconv/u32-strconv-to-enc.c + +EXTRA_DIST += uniconv/u-strconv-to-enc.h + +## end gnulib module uniconv/u32-strconv-to-enc + +## begin gnulib module uniconv/u32-strconv-to-locale + +libunistring_la_SOURCES += uniconv/u32-strconv-to-locale.c + +## end gnulib module uniconv/u32-strconv-to-locale + +## begin gnulib module uniconv/u8-conv-from-enc + +libunistring_la_SOURCES += uniconv/u8-conv-from-enc.c + +## end gnulib module uniconv/u8-conv-from-enc + +## begin gnulib module uniconv/u8-conv-to-enc + +libunistring_la_SOURCES += uniconv/u8-conv-to-enc.c + +## end gnulib module uniconv/u8-conv-to-enc + +## begin gnulib module uniconv/u8-strconv-from-enc + +libunistring_la_SOURCES += uniconv/u8-strconv-from-enc.c + +EXTRA_DIST += uniconv/u-strconv-from-enc.h + +## end gnulib module uniconv/u8-strconv-from-enc + +## begin gnulib module uniconv/u8-strconv-from-locale + +libunistring_la_SOURCES += uniconv/u8-strconv-from-locale.c + +## end gnulib module uniconv/u8-strconv-from-locale + +## begin gnulib module uniconv/u8-strconv-to-enc + +libunistring_la_SOURCES += uniconv/u8-strconv-to-enc.c + +## end gnulib module uniconv/u8-strconv-to-enc + +## begin gnulib module uniconv/u8-strconv-to-locale + +libunistring_la_SOURCES += uniconv/u8-strconv-to-locale.c + +## end gnulib module uniconv/u8-strconv-to-locale + +## begin gnulib module unictype/base + + +EXTRA_DIST += unictype.h + +## end gnulib module unictype/base + +## begin gnulib module unictype/bidicategory-byname + +libunistring_la_SOURCES += unictype/bidi_byname.c + +## end gnulib module unictype/bidicategory-byname + +## begin gnulib module unictype/bidicategory-name + +libunistring_la_SOURCES += unictype/bidi_name.c + +## end gnulib module unictype/bidicategory-name + +## begin gnulib module unictype/bidicategory-of + +libunistring_la_SOURCES += unictype/bidi_of.c + +EXTRA_DIST += unictype/bidi_of.h + +## end gnulib module unictype/bidicategory-of + +## begin gnulib module unictype/bidicategory-test + +libunistring_la_SOURCES += unictype/bidi_test.c + +## end gnulib module unictype/bidicategory-test + +## begin gnulib module unictype/block-list + +libunistring_la_SOURCES += unictype/blocks.c + +EXTRA_DIST += unictype/blocks.h + +## end gnulib module unictype/block-list + +## begin gnulib module unictype/block-test + +libunistring_la_SOURCES += unictype/block_test.c + +## end gnulib module unictype/block-test + +## begin gnulib module unictype/category-C + +libunistring_la_SOURCES += unictype/categ_C.c + +EXTRA_DIST += unictype/categ_C.h + +## end gnulib module unictype/category-C + +## begin gnulib module unictype/category-Cc + +libunistring_la_SOURCES += unictype/categ_Cc.c + +EXTRA_DIST += unictype/categ_Cc.h + +## end gnulib module unictype/category-Cc + +## begin gnulib module unictype/category-Cf + +libunistring_la_SOURCES += unictype/categ_Cf.c + +EXTRA_DIST += unictype/categ_Cf.h + +## end gnulib module unictype/category-Cf + +## begin gnulib module unictype/category-Cn + +libunistring_la_SOURCES += unictype/categ_Cn.c + +EXTRA_DIST += unictype/categ_Cn.h + +## end gnulib module unictype/category-Cn + +## begin gnulib module unictype/category-Co + +libunistring_la_SOURCES += unictype/categ_Co.c + +EXTRA_DIST += unictype/categ_Co.h + +## end gnulib module unictype/category-Co + +## begin gnulib module unictype/category-Cs + +libunistring_la_SOURCES += unictype/categ_Cs.c + +EXTRA_DIST += unictype/categ_Cs.h + +## end gnulib module unictype/category-Cs + +## begin gnulib module unictype/category-L + +libunistring_la_SOURCES += unictype/categ_L.c + +EXTRA_DIST += unictype/categ_L.h + +## end gnulib module unictype/category-L + +## begin gnulib module unictype/category-Ll + +libunistring_la_SOURCES += unictype/categ_Ll.c + +EXTRA_DIST += unictype/categ_Ll.h + +## end gnulib module unictype/category-Ll + +## begin gnulib module unictype/category-Lm + +libunistring_la_SOURCES += unictype/categ_Lm.c + +EXTRA_DIST += unictype/categ_Lm.h + +## end gnulib module unictype/category-Lm + +## begin gnulib module unictype/category-Lo + +libunistring_la_SOURCES += unictype/categ_Lo.c + +EXTRA_DIST += unictype/categ_Lo.h + +## end gnulib module unictype/category-Lo + +## begin gnulib module unictype/category-Lt + +libunistring_la_SOURCES += unictype/categ_Lt.c + +EXTRA_DIST += unictype/categ_Lt.h + +## end gnulib module unictype/category-Lt + +## begin gnulib module unictype/category-Lu + +libunistring_la_SOURCES += unictype/categ_Lu.c + +EXTRA_DIST += unictype/categ_Lu.h + +## end gnulib module unictype/category-Lu + +## begin gnulib module unictype/category-M + +libunistring_la_SOURCES += unictype/categ_M.c + +EXTRA_DIST += unictype/categ_M.h + +## end gnulib module unictype/category-M + +## begin gnulib module unictype/category-Mc + +libunistring_la_SOURCES += unictype/categ_Mc.c + +EXTRA_DIST += unictype/categ_Mc.h + +## end gnulib module unictype/category-Mc + +## begin gnulib module unictype/category-Me + +libunistring_la_SOURCES += unictype/categ_Me.c + +EXTRA_DIST += unictype/categ_Me.h + +## end gnulib module unictype/category-Me + +## begin gnulib module unictype/category-Mn + +libunistring_la_SOURCES += unictype/categ_Mn.c + +EXTRA_DIST += unictype/categ_Mn.h + +## end gnulib module unictype/category-Mn + +## begin gnulib module unictype/category-N + +libunistring_la_SOURCES += unictype/categ_N.c + +EXTRA_DIST += unictype/categ_N.h + +## end gnulib module unictype/category-N + +## begin gnulib module unictype/category-Nd + +libunistring_la_SOURCES += unictype/categ_Nd.c + +EXTRA_DIST += unictype/categ_Nd.h + +## end gnulib module unictype/category-Nd + +## begin gnulib module unictype/category-Nl + +libunistring_la_SOURCES += unictype/categ_Nl.c + +EXTRA_DIST += unictype/categ_Nl.h + +## end gnulib module unictype/category-Nl + +## begin gnulib module unictype/category-No + +libunistring_la_SOURCES += unictype/categ_No.c + +EXTRA_DIST += unictype/categ_No.h + +## end gnulib module unictype/category-No + +## begin gnulib module unictype/category-P + +libunistring_la_SOURCES += unictype/categ_P.c + +EXTRA_DIST += unictype/categ_P.h + +## end gnulib module unictype/category-P + +## begin gnulib module unictype/category-Pc + +libunistring_la_SOURCES += unictype/categ_Pc.c + +EXTRA_DIST += unictype/categ_Pc.h + +## end gnulib module unictype/category-Pc + +## begin gnulib module unictype/category-Pd + +libunistring_la_SOURCES += unictype/categ_Pd.c + +EXTRA_DIST += unictype/categ_Pd.h + +## end gnulib module unictype/category-Pd + +## begin gnulib module unictype/category-Pe + +libunistring_la_SOURCES += unictype/categ_Pe.c + +EXTRA_DIST += unictype/categ_Pe.h + +## end gnulib module unictype/category-Pe + +## begin gnulib module unictype/category-Pf + +libunistring_la_SOURCES += unictype/categ_Pf.c + +EXTRA_DIST += unictype/categ_Pf.h + +## end gnulib module unictype/category-Pf + +## begin gnulib module unictype/category-Pi + +libunistring_la_SOURCES += unictype/categ_Pi.c + +EXTRA_DIST += unictype/categ_Pi.h + +## end gnulib module unictype/category-Pi + +## begin gnulib module unictype/category-Po + +libunistring_la_SOURCES += unictype/categ_Po.c + +EXTRA_DIST += unictype/categ_Po.h + +## end gnulib module unictype/category-Po + +## begin gnulib module unictype/category-Ps + +libunistring_la_SOURCES += unictype/categ_Ps.c + +EXTRA_DIST += unictype/categ_Ps.h + +## end gnulib module unictype/category-Ps + +## begin gnulib module unictype/category-S + +libunistring_la_SOURCES += unictype/categ_S.c + +EXTRA_DIST += unictype/categ_S.h + +## end gnulib module unictype/category-S + +## begin gnulib module unictype/category-Sc + +libunistring_la_SOURCES += unictype/categ_Sc.c + +EXTRA_DIST += unictype/categ_Sc.h + +## end gnulib module unictype/category-Sc + +## begin gnulib module unictype/category-Sk + +libunistring_la_SOURCES += unictype/categ_Sk.c + +EXTRA_DIST += unictype/categ_Sk.h + +## end gnulib module unictype/category-Sk + +## begin gnulib module unictype/category-Sm + +libunistring_la_SOURCES += unictype/categ_Sm.c + +EXTRA_DIST += unictype/categ_Sm.h + +## end gnulib module unictype/category-Sm + +## begin gnulib module unictype/category-So + +libunistring_la_SOURCES += unictype/categ_So.c + +EXTRA_DIST += unictype/categ_So.h + +## end gnulib module unictype/category-So + +## begin gnulib module unictype/category-Z + +libunistring_la_SOURCES += unictype/categ_Z.c + +EXTRA_DIST += unictype/categ_Z.h + +## end gnulib module unictype/category-Z + +## begin gnulib module unictype/category-Zl + +libunistring_la_SOURCES += unictype/categ_Zl.c + +EXTRA_DIST += unictype/categ_Zl.h + +## end gnulib module unictype/category-Zl + +## begin gnulib module unictype/category-Zp + +libunistring_la_SOURCES += unictype/categ_Zp.c + +EXTRA_DIST += unictype/categ_Zp.h + +## end gnulib module unictype/category-Zp + +## begin gnulib module unictype/category-Zs + +libunistring_la_SOURCES += unictype/categ_Zs.c + +EXTRA_DIST += unictype/categ_Zs.h + +## end gnulib module unictype/category-Zs + +## begin gnulib module unictype/category-and + +libunistring_la_SOURCES += unictype/categ_and.c + +## end gnulib module unictype/category-and + +## begin gnulib module unictype/category-and-not + +libunistring_la_SOURCES += unictype/categ_and_not.c + +## end gnulib module unictype/category-and-not + +## begin gnulib module unictype/category-byname + +libunistring_la_SOURCES += unictype/categ_byname.c + +## end gnulib module unictype/category-byname + +## begin gnulib module unictype/category-name + +libunistring_la_SOURCES += unictype/categ_name.c + +## end gnulib module unictype/category-name + +## begin gnulib module unictype/category-none + +libunistring_la_SOURCES += unictype/categ_none.c + +## end gnulib module unictype/category-none + +## begin gnulib module unictype/category-of + +libunistring_la_SOURCES += unictype/categ_of.c + +EXTRA_DIST += unictype/categ_of.h + +## end gnulib module unictype/category-of + +## begin gnulib module unictype/category-or + +libunistring_la_SOURCES += unictype/categ_or.c + +## end gnulib module unictype/category-or + +## begin gnulib module unictype/category-test + +libunistring_la_SOURCES += unictype/categ_test.c + +EXTRA_DIST += unictype/bitmap.h + +## end gnulib module unictype/category-test + +## begin gnulib module unictype/combining-class + +libunistring_la_SOURCES += unictype/combining.c + +EXTRA_DIST += unictype/combining.h + +## end gnulib module unictype/combining-class + +## begin gnulib module unictype/ctype-alnum + +libunistring_la_SOURCES += unictype/ctype_alnum.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_alnum.h + +## end gnulib module unictype/ctype-alnum + +## begin gnulib module unictype/ctype-alpha + +libunistring_la_SOURCES += unictype/ctype_alpha.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_alpha.h + +## end gnulib module unictype/ctype-alpha + +## begin gnulib module unictype/ctype-blank + +libunistring_la_SOURCES += unictype/ctype_blank.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_blank.h + +## end gnulib module unictype/ctype-blank + +## begin gnulib module unictype/ctype-cntrl + +libunistring_la_SOURCES += unictype/ctype_cntrl.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_cntrl.h + +## end gnulib module unictype/ctype-cntrl + +## begin gnulib module unictype/ctype-digit + +libunistring_la_SOURCES += unictype/ctype_digit.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_digit.h + +## end gnulib module unictype/ctype-digit + +## begin gnulib module unictype/ctype-graph + +libunistring_la_SOURCES += unictype/ctype_graph.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_graph.h + +## end gnulib module unictype/ctype-graph + +## begin gnulib module unictype/ctype-lower + +libunistring_la_SOURCES += unictype/ctype_lower.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_lower.h + +## end gnulib module unictype/ctype-lower + +## begin gnulib module unictype/ctype-print + +libunistring_la_SOURCES += unictype/ctype_print.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_print.h + +## end gnulib module unictype/ctype-print + +## begin gnulib module unictype/ctype-punct + +libunistring_la_SOURCES += unictype/ctype_punct.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_punct.h + +## end gnulib module unictype/ctype-punct + +## begin gnulib module unictype/ctype-space + +libunistring_la_SOURCES += unictype/ctype_space.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_space.h + +## end gnulib module unictype/ctype-space + +## begin gnulib module unictype/ctype-upper + +libunistring_la_SOURCES += unictype/ctype_upper.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_upper.h + +## end gnulib module unictype/ctype-upper + +## begin gnulib module unictype/ctype-xdigit + +libunistring_la_SOURCES += unictype/ctype_xdigit.c + +EXTRA_DIST += unictype/bitmap.h unictype/ctype_xdigit.h + +## end gnulib module unictype/ctype-xdigit + +## begin gnulib module unictype/decimal-digit + +libunistring_la_SOURCES += unictype/decdigit.c + +EXTRA_DIST += unictype/decdigit.h + +## end gnulib module unictype/decimal-digit + +## begin gnulib module unictype/digit + +libunistring_la_SOURCES += unictype/digit.c + +EXTRA_DIST += unictype/digit.h + +## end gnulib module unictype/digit + +## begin gnulib module unictype/mirror + +libunistring_la_SOURCES += unictype/mirror.c + +EXTRA_DIST += unictype/mirror.h + +## end gnulib module unictype/mirror + +## begin gnulib module unictype/numeric + +libunistring_la_SOURCES += unictype/numeric.c + +EXTRA_DIST += unictype/numeric.h + +## end gnulib module unictype/numeric + +## begin gnulib module unictype/property-alphabetic + +libunistring_la_SOURCES += unictype/pr_alphabetic.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_alphabetic.h + +## end gnulib module unictype/property-alphabetic + +## begin gnulib module unictype/property-ascii-hex-digit + +libunistring_la_SOURCES += unictype/pr_ascii_hex_digit.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_ascii_hex_digit.h + +## end gnulib module unictype/property-ascii-hex-digit + +## begin gnulib module unictype/property-bidi-arabic-digit + +libunistring_la_SOURCES += unictype/pr_bidi_arabic_digit.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_arabic_digit.h + +## end gnulib module unictype/property-bidi-arabic-digit + +## begin gnulib module unictype/property-bidi-arabic-right-to-left + +libunistring_la_SOURCES += unictype/pr_bidi_arabic_right_to_left.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_arabic_right_to_left.h + +## end gnulib module unictype/property-bidi-arabic-right-to-left + +## begin gnulib module unictype/property-bidi-block-separator + +libunistring_la_SOURCES += unictype/pr_bidi_block_separator.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_block_separator.h + +## end gnulib module unictype/property-bidi-block-separator + +## begin gnulib module unictype/property-bidi-boundary-neutral + +libunistring_la_SOURCES += unictype/pr_bidi_boundary_neutral.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_boundary_neutral.h + +## end gnulib module unictype/property-bidi-boundary-neutral + +## begin gnulib module unictype/property-bidi-common-separator + +libunistring_la_SOURCES += unictype/pr_bidi_common_separator.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_common_separator.h + +## end gnulib module unictype/property-bidi-common-separator + +## begin gnulib module unictype/property-bidi-control + +libunistring_la_SOURCES += unictype/pr_bidi_control.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_control.h + +## end gnulib module unictype/property-bidi-control + +## begin gnulib module unictype/property-bidi-embedding-or-override + +libunistring_la_SOURCES += unictype/pr_bidi_embedding_or_override.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_embedding_or_override.h + +## end gnulib module unictype/property-bidi-embedding-or-override + +## begin gnulib module unictype/property-bidi-eur-num-separator + +libunistring_la_SOURCES += unictype/pr_bidi_eur_num_separator.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_eur_num_separator.h + +## end gnulib module unictype/property-bidi-eur-num-separator + +## begin gnulib module unictype/property-bidi-eur-num-terminator + +libunistring_la_SOURCES += unictype/pr_bidi_eur_num_terminator.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_eur_num_terminator.h + +## end gnulib module unictype/property-bidi-eur-num-terminator + +## begin gnulib module unictype/property-bidi-european-digit + +libunistring_la_SOURCES += unictype/pr_bidi_european_digit.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_european_digit.h + +## end gnulib module unictype/property-bidi-european-digit + +## begin gnulib module unictype/property-bidi-hebrew-right-to-left + +libunistring_la_SOURCES += unictype/pr_bidi_hebrew_right_to_left.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_hebrew_right_to_left.h + +## end gnulib module unictype/property-bidi-hebrew-right-to-left + +## begin gnulib module unictype/property-bidi-left-to-right + +libunistring_la_SOURCES += unictype/pr_bidi_left_to_right.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_left_to_right.h + +## end gnulib module unictype/property-bidi-left-to-right + +## begin gnulib module unictype/property-bidi-non-spacing-mark + +libunistring_la_SOURCES += unictype/pr_bidi_non_spacing_mark.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_non_spacing_mark.h + +## end gnulib module unictype/property-bidi-non-spacing-mark + +## begin gnulib module unictype/property-bidi-other-neutral + +libunistring_la_SOURCES += unictype/pr_bidi_other_neutral.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_other_neutral.h + +## end gnulib module unictype/property-bidi-other-neutral + +## begin gnulib module unictype/property-bidi-pdf + +libunistring_la_SOURCES += unictype/pr_bidi_pdf.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_pdf.h + +## end gnulib module unictype/property-bidi-pdf + +## begin gnulib module unictype/property-bidi-segment-separator + +libunistring_la_SOURCES += unictype/pr_bidi_segment_separator.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_segment_separator.h + +## end gnulib module unictype/property-bidi-segment-separator + +## begin gnulib module unictype/property-bidi-whitespace + +libunistring_la_SOURCES += unictype/pr_bidi_whitespace.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_bidi_whitespace.h + +## end gnulib module unictype/property-bidi-whitespace + +## begin gnulib module unictype/property-byname + +libunistring_la_SOURCES += unictype/pr_byname.c + +unictype/pr_byname.h: unictype/pr_byname.gperf + $(GPERF) -m 10 $(srcdir)/unictype/pr_byname.gperf > $(srcdir)/unictype/pr_byname.h-t + mv $(srcdir)/unictype/pr_byname.h-t $(srcdir)/unictype/pr_byname.h +BUILT_SOURCES += unictype/pr_byname.h +MOSTLYCLEANFILES += unictype/pr_byname.h-t +MAINTAINERCLEANFILES += unictype/pr_byname.h +EXTRA_DIST += unictype/pr_byname.h + +EXTRA_DIST += unictype/pr_byname.gperf + +## end gnulib module unictype/property-byname + +## begin gnulib module unictype/property-combining + +libunistring_la_SOURCES += unictype/pr_combining.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_combining.h + +## end gnulib module unictype/property-combining + +## begin gnulib module unictype/property-composite + +libunistring_la_SOURCES += unictype/pr_composite.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_composite.h + +## end gnulib module unictype/property-composite + +## begin gnulib module unictype/property-currency-symbol + +libunistring_la_SOURCES += unictype/pr_currency_symbol.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_currency_symbol.h + +## end gnulib module unictype/property-currency-symbol + +## begin gnulib module unictype/property-dash + +libunistring_la_SOURCES += unictype/pr_dash.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_dash.h + +## end gnulib module unictype/property-dash + +## begin gnulib module unictype/property-decimal-digit + +libunistring_la_SOURCES += unictype/pr_decimal_digit.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_decimal_digit.h + +## end gnulib module unictype/property-decimal-digit + +## begin gnulib module unictype/property-default-ignorable-code-point + +libunistring_la_SOURCES += unictype/pr_default_ignorable_code_point.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_default_ignorable_code_point.h + +## end gnulib module unictype/property-default-ignorable-code-point + +## begin gnulib module unictype/property-deprecated + +libunistring_la_SOURCES += unictype/pr_deprecated.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_deprecated.h + +## end gnulib module unictype/property-deprecated + +## begin gnulib module unictype/property-diacritic + +libunistring_la_SOURCES += unictype/pr_diacritic.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_diacritic.h + +## end gnulib module unictype/property-diacritic + +## begin gnulib module unictype/property-extender + +libunistring_la_SOURCES += unictype/pr_extender.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_extender.h + +## end gnulib module unictype/property-extender + +## begin gnulib module unictype/property-format-control + +libunistring_la_SOURCES += unictype/pr_format_control.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_format_control.h + +## end gnulib module unictype/property-format-control + +## begin gnulib module unictype/property-grapheme-base + +libunistring_la_SOURCES += unictype/pr_grapheme_base.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_grapheme_base.h + +## end gnulib module unictype/property-grapheme-base + +## begin gnulib module unictype/property-grapheme-extend + +libunistring_la_SOURCES += unictype/pr_grapheme_extend.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_grapheme_extend.h + +## end gnulib module unictype/property-grapheme-extend + +## begin gnulib module unictype/property-grapheme-link + +libunistring_la_SOURCES += unictype/pr_grapheme_link.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_grapheme_link.h + +## end gnulib module unictype/property-grapheme-link + +## begin gnulib module unictype/property-hex-digit + +libunistring_la_SOURCES += unictype/pr_hex_digit.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_hex_digit.h + +## end gnulib module unictype/property-hex-digit + +## begin gnulib module unictype/property-hyphen + +libunistring_la_SOURCES += unictype/pr_hyphen.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_hyphen.h + +## end gnulib module unictype/property-hyphen + +## begin gnulib module unictype/property-id-continue + +libunistring_la_SOURCES += unictype/pr_id_continue.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_id_continue.h + +## end gnulib module unictype/property-id-continue + +## begin gnulib module unictype/property-id-start + +libunistring_la_SOURCES += unictype/pr_id_start.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_id_start.h + +## end gnulib module unictype/property-id-start + +## begin gnulib module unictype/property-ideographic + +libunistring_la_SOURCES += unictype/pr_ideographic.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_ideographic.h + +## end gnulib module unictype/property-ideographic + +## begin gnulib module unictype/property-ids-binary-operator + +libunistring_la_SOURCES += unictype/pr_ids_binary_operator.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_ids_binary_operator.h + +## end gnulib module unictype/property-ids-binary-operator + +## begin gnulib module unictype/property-ids-trinary-operator + +libunistring_la_SOURCES += unictype/pr_ids_trinary_operator.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_ids_trinary_operator.h + +## end gnulib module unictype/property-ids-trinary-operator + +## begin gnulib module unictype/property-ignorable-control + +libunistring_la_SOURCES += unictype/pr_ignorable_control.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_ignorable_control.h + +## end gnulib module unictype/property-ignorable-control + +## begin gnulib module unictype/property-iso-control + +libunistring_la_SOURCES += unictype/pr_iso_control.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_iso_control.h + +## end gnulib module unictype/property-iso-control + +## begin gnulib module unictype/property-join-control + +libunistring_la_SOURCES += unictype/pr_join_control.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_join_control.h + +## end gnulib module unictype/property-join-control + +## begin gnulib module unictype/property-left-of-pair + +libunistring_la_SOURCES += unictype/pr_left_of_pair.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_left_of_pair.h + +## end gnulib module unictype/property-left-of-pair + +## begin gnulib module unictype/property-line-separator + +libunistring_la_SOURCES += unictype/pr_line_separator.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_line_separator.h + +## end gnulib module unictype/property-line-separator + +## begin gnulib module unictype/property-logical-order-exception + +libunistring_la_SOURCES += unictype/pr_logical_order_exception.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_logical_order_exception.h + +## end gnulib module unictype/property-logical-order-exception + +## begin gnulib module unictype/property-lowercase + +libunistring_la_SOURCES += unictype/pr_lowercase.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_lowercase.h + +## end gnulib module unictype/property-lowercase + +## begin gnulib module unictype/property-math + +libunistring_la_SOURCES += unictype/pr_math.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_math.h + +## end gnulib module unictype/property-math + +## begin gnulib module unictype/property-non-break + +libunistring_la_SOURCES += unictype/pr_non_break.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_non_break.h + +## end gnulib module unictype/property-non-break + +## begin gnulib module unictype/property-not-a-character + +libunistring_la_SOURCES += unictype/pr_not_a_character.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_not_a_character.h + +## end gnulib module unictype/property-not-a-character + +## begin gnulib module unictype/property-numeric + +libunistring_la_SOURCES += unictype/pr_numeric.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_numeric.h + +## end gnulib module unictype/property-numeric + +## begin gnulib module unictype/property-other-alphabetic + +libunistring_la_SOURCES += unictype/pr_other_alphabetic.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_other_alphabetic.h + +## end gnulib module unictype/property-other-alphabetic + +## begin gnulib module unictype/property-other-default-ignorable-code-point + +libunistring_la_SOURCES += unictype/pr_other_default_ignorable_code_point.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_other_default_ignorable_code_point.h + +## end gnulib module unictype/property-other-default-ignorable-code-point + +## begin gnulib module unictype/property-other-grapheme-extend + +libunistring_la_SOURCES += unictype/pr_other_grapheme_extend.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_other_grapheme_extend.h + +## end gnulib module unictype/property-other-grapheme-extend + +## begin gnulib module unictype/property-other-id-continue + +libunistring_la_SOURCES += unictype/pr_other_id_continue.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_other_id_continue.h + +## end gnulib module unictype/property-other-id-continue + +## begin gnulib module unictype/property-other-id-start + +libunistring_la_SOURCES += unictype/pr_other_id_start.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_other_id_start.h + +## end gnulib module unictype/property-other-id-start + +## begin gnulib module unictype/property-other-lowercase + +libunistring_la_SOURCES += unictype/pr_other_lowercase.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_other_lowercase.h + +## end gnulib module unictype/property-other-lowercase + +## begin gnulib module unictype/property-other-math + +libunistring_la_SOURCES += unictype/pr_other_math.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_other_math.h + +## end gnulib module unictype/property-other-math + +## begin gnulib module unictype/property-other-uppercase + +libunistring_la_SOURCES += unictype/pr_other_uppercase.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_other_uppercase.h + +## end gnulib module unictype/property-other-uppercase + +## begin gnulib module unictype/property-paired-punctuation + +libunistring_la_SOURCES += unictype/pr_paired_punctuation.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_paired_punctuation.h + +## end gnulib module unictype/property-paired-punctuation + +## begin gnulib module unictype/property-paragraph-separator + +libunistring_la_SOURCES += unictype/pr_paragraph_separator.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_paragraph_separator.h + +## end gnulib module unictype/property-paragraph-separator + +## begin gnulib module unictype/property-pattern-syntax + +libunistring_la_SOURCES += unictype/pr_pattern_syntax.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_pattern_syntax.h + +## end gnulib module unictype/property-pattern-syntax + +## begin gnulib module unictype/property-pattern-white-space + +libunistring_la_SOURCES += unictype/pr_pattern_white_space.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_pattern_white_space.h + +## end gnulib module unictype/property-pattern-white-space + +## begin gnulib module unictype/property-private-use + +libunistring_la_SOURCES += unictype/pr_private_use.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_private_use.h + +## end gnulib module unictype/property-private-use + +## begin gnulib module unictype/property-punctuation + +libunistring_la_SOURCES += unictype/pr_punctuation.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_punctuation.h + +## end gnulib module unictype/property-punctuation + +## begin gnulib module unictype/property-quotation-mark + +libunistring_la_SOURCES += unictype/pr_quotation_mark.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_quotation_mark.h + +## end gnulib module unictype/property-quotation-mark + +## begin gnulib module unictype/property-radical + +libunistring_la_SOURCES += unictype/pr_radical.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_radical.h + +## end gnulib module unictype/property-radical + +## begin gnulib module unictype/property-sentence-terminal + +libunistring_la_SOURCES += unictype/pr_sentence_terminal.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_sentence_terminal.h + +## end gnulib module unictype/property-sentence-terminal + +## begin gnulib module unictype/property-soft-dotted + +libunistring_la_SOURCES += unictype/pr_soft_dotted.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_soft_dotted.h + +## end gnulib module unictype/property-soft-dotted + +## begin gnulib module unictype/property-space + +libunistring_la_SOURCES += unictype/pr_space.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_space.h + +## end gnulib module unictype/property-space + +## begin gnulib module unictype/property-terminal-punctuation + +libunistring_la_SOURCES += unictype/pr_terminal_punctuation.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_terminal_punctuation.h + +## end gnulib module unictype/property-terminal-punctuation + +## begin gnulib module unictype/property-test + +libunistring_la_SOURCES += unictype/pr_test.c + +## end gnulib module unictype/property-test + +## begin gnulib module unictype/property-titlecase + +libunistring_la_SOURCES += unictype/pr_titlecase.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_titlecase.h + +## end gnulib module unictype/property-titlecase + +## begin gnulib module unictype/property-unassigned-code-value + +libunistring_la_SOURCES += unictype/pr_unassigned_code_value.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_unassigned_code_value.h + +## end gnulib module unictype/property-unassigned-code-value + +## begin gnulib module unictype/property-unified-ideograph + +libunistring_la_SOURCES += unictype/pr_unified_ideograph.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_unified_ideograph.h + +## end gnulib module unictype/property-unified-ideograph + +## begin gnulib module unictype/property-uppercase + +libunistring_la_SOURCES += unictype/pr_uppercase.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_uppercase.h + +## end gnulib module unictype/property-uppercase + +## begin gnulib module unictype/property-variation-selector + +libunistring_la_SOURCES += unictype/pr_variation_selector.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_variation_selector.h + +## end gnulib module unictype/property-variation-selector + +## begin gnulib module unictype/property-white-space + +libunistring_la_SOURCES += unictype/pr_white_space.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_white_space.h + +## end gnulib module unictype/property-white-space + +## begin gnulib module unictype/property-xid-continue + +libunistring_la_SOURCES += unictype/pr_xid_continue.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_xid_continue.h + +## end gnulib module unictype/property-xid-continue + +## begin gnulib module unictype/property-xid-start + +libunistring_la_SOURCES += unictype/pr_xid_start.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_xid_start.h + +## end gnulib module unictype/property-xid-start + +## begin gnulib module unictype/property-zero-width + +libunistring_la_SOURCES += unictype/pr_zero_width.c + +EXTRA_DIST += unictype/bitmap.h unictype/pr_zero_width.h + +## end gnulib module unictype/property-zero-width + +## begin gnulib module unictype/scripts + +libunistring_la_SOURCES += unictype/scripts.c + +unictype/scripts_byname.h: unictype/scripts_byname.gperf + $(GPERF) -m 10 $(srcdir)/unictype/scripts_byname.gperf > $(srcdir)/unictype/scripts_byname.h-t + mv $(srcdir)/unictype/scripts_byname.h-t $(srcdir)/unictype/scripts_byname.h +BUILT_SOURCES += unictype/scripts_byname.h +MOSTLYCLEANFILES += unictype/scripts_byname.h-t +MAINTAINERCLEANFILES += unictype/scripts_byname.h +EXTRA_DIST += unictype/scripts_byname.h + +EXTRA_DIST += unictype/scripts.h unictype/scripts_byname.gperf + +## end gnulib module unictype/scripts + +## begin gnulib module unictype/syntax-c-ident + +libunistring_la_SOURCES += unictype/sy_c_ident.c + +EXTRA_DIST += unictype/identsyntaxmap.h unictype/sy_c_ident.h + +## end gnulib module unictype/syntax-c-ident + +## begin gnulib module unictype/syntax-c-whitespace + +libunistring_la_SOURCES += unictype/sy_c_whitespace.c + +## end gnulib module unictype/syntax-c-whitespace + +## begin gnulib module unictype/syntax-java-ident + +libunistring_la_SOURCES += unictype/sy_java_ident.c + +EXTRA_DIST += unictype/identsyntaxmap.h unictype/sy_java_ident.h + +## end gnulib module unictype/syntax-java-ident + +## begin gnulib module unictype/syntax-java-whitespace + +libunistring_la_SOURCES += unictype/sy_java_whitespace.c + +## end gnulib module unictype/syntax-java-whitespace + +## begin gnulib module unilbrk/base + + +EXTRA_DIST += unilbrk.h + +## end gnulib module unilbrk/base + +## begin gnulib module unilbrk/tables + +libunistring_la_SOURCES += unilbrk/lbrktables.c + +EXTRA_DIST += unilbrk/lbrkprop1.h unilbrk/lbrkprop2.h unilbrk/lbrktables.h + +## end gnulib module unilbrk/tables + +## begin gnulib module unilbrk/u16-possible-linebreaks + +libunistring_la_SOURCES += unilbrk/u16-possible-linebreaks.c + +EXTRA_DIST += uniwidth/cjk.h + +## end gnulib module unilbrk/u16-possible-linebreaks + +## begin gnulib module unilbrk/u16-width-linebreaks + +libunistring_la_SOURCES += unilbrk/u16-width-linebreaks.c + +## end gnulib module unilbrk/u16-width-linebreaks + +## begin gnulib module unilbrk/u32-possible-linebreaks + +libunistring_la_SOURCES += unilbrk/u32-possible-linebreaks.c + +EXTRA_DIST += uniwidth/cjk.h + +## end gnulib module unilbrk/u32-possible-linebreaks + +## begin gnulib module unilbrk/u32-width-linebreaks + +libunistring_la_SOURCES += unilbrk/u32-width-linebreaks.c + +## end gnulib module unilbrk/u32-width-linebreaks + +## begin gnulib module unilbrk/u8-possible-linebreaks + +libunistring_la_SOURCES += unilbrk/u8-possible-linebreaks.c + +EXTRA_DIST += uniwidth/cjk.h + +## end gnulib module unilbrk/u8-possible-linebreaks + +## begin gnulib module unilbrk/u8-width-linebreaks + +libunistring_la_SOURCES += unilbrk/u8-width-linebreaks.c + +## end gnulib module unilbrk/u8-width-linebreaks + +## begin gnulib module unilbrk/ulc-common + +libunistring_la_SOURCES += unilbrk/ulc-common.c + +EXTRA_DIST += unilbrk/ulc-common.h + +## end gnulib module unilbrk/ulc-common + +## begin gnulib module unilbrk/ulc-possible-linebreaks + +libunistring_la_SOURCES += unilbrk/ulc-possible-linebreaks.c + +## end gnulib module unilbrk/ulc-possible-linebreaks + +## begin gnulib module unilbrk/ulc-width-linebreaks + +libunistring_la_SOURCES += unilbrk/ulc-width-linebreaks.c + +## end gnulib module unilbrk/ulc-width-linebreaks + +## begin gnulib module uniname/base + + +EXTRA_DIST += uniname.h + +## end gnulib module uniname/base + +## begin gnulib module uniname/uniname + +libunistring_la_SOURCES += uniname/uniname.c + +EXTRA_DIST += uniname/gen-uninames.lisp uniname/uninames.h + +## end gnulib module uniname/uniname + +## begin gnulib module uninorm/base + + +EXTRA_DIST += uninorm.h + +## end gnulib module uninorm/base + +## begin gnulib module uninorm/canonical-decomposition + +libunistring_la_SOURCES += uninorm/canonical-decomposition.c + +## end gnulib module uninorm/canonical-decomposition + +## begin gnulib module uninorm/compat-decomposition + +libunistring_la_SOURCES += uninorm/compat-decomposition.c + +EXTRA_DIST += uninorm/decompose-internal.h + +## end gnulib module uninorm/compat-decomposition + +## begin gnulib module uninorm/composition + +libunistring_la_SOURCES += uninorm/composition.c + +uninorm/composition-table.h: $(srcdir)/uninorm/composition-table.gperf + $(GPERF) -m 1 $(srcdir)/uninorm/composition-table.gperf > $(srcdir)/uninorm/composition-table.h-t + mv $(srcdir)/uninorm/composition-table.h-t $(srcdir)/uninorm/composition-table.h +BUILT_SOURCES += uninorm/composition-table.h +MOSTLYCLEANFILES += uninorm/composition-table.h-t +MAINTAINERCLEANFILES += uninorm/composition-table.h +EXTRA_DIST += uninorm/composition-table.h + +EXTRA_DIST += uninorm/composition-table.gperf + +## end gnulib module uninorm/composition + +## begin gnulib module uninorm/decompose-internal + +libunistring_la_SOURCES += uninorm/decompose-internal.c + +EXTRA_DIST += uninorm/decompose-internal.h + +## end gnulib module uninorm/decompose-internal + +## begin gnulib module uninorm/decomposing-form + +libunistring_la_SOURCES += uninorm/decomposing-form.c + +EXTRA_DIST += uninorm/normalize-internal.h + +## end gnulib module uninorm/decomposing-form + +## begin gnulib module uninorm/decomposition + +libunistring_la_SOURCES += uninorm/decomposition.c + +## end gnulib module uninorm/decomposition + +## begin gnulib module uninorm/decomposition-table + +libunistring_la_SOURCES += uninorm/decomposition-table.c + +EXTRA_DIST += uninorm/decomposition-table.h uninorm/decomposition-table1.h uninorm/decomposition-table2.h + +## end gnulib module uninorm/decomposition-table + +## begin gnulib module uninorm/filter + +libunistring_la_SOURCES += uninorm/uninorm-filter.c + +EXTRA_DIST += uninorm/normalize-internal.h + +## end gnulib module uninorm/filter + +## begin gnulib module uninorm/nfc + +libunistring_la_SOURCES += uninorm/nfc.c + +EXTRA_DIST += uninorm/normalize-internal.h + +## end gnulib module uninorm/nfc + +## begin gnulib module uninorm/nfd + +libunistring_la_SOURCES += uninorm/nfd.c + +EXTRA_DIST += uninorm/normalize-internal.h + +## end gnulib module uninorm/nfd + +## begin gnulib module uninorm/nfkc + +libunistring_la_SOURCES += uninorm/nfkc.c + +EXTRA_DIST += uninorm/normalize-internal.h + +## end gnulib module uninorm/nfkc + +## begin gnulib module uninorm/nfkd + +libunistring_la_SOURCES += uninorm/nfkd.c + +EXTRA_DIST += uninorm/normalize-internal.h + +## end gnulib module uninorm/nfkd + +## begin gnulib module uninorm/u16-normalize + +libunistring_la_SOURCES += uninorm/u16-normalize.c + +EXTRA_DIST += uninorm/normalize-internal.h uninorm/u-normalize-internal.h + +## end gnulib module uninorm/u16-normalize + +## begin gnulib module uninorm/u16-normcmp + +libunistring_la_SOURCES += uninorm/u16-normcmp.c + +EXTRA_DIST += uninorm/u-normcmp.h + +## end gnulib module uninorm/u16-normcmp + +## begin gnulib module uninorm/u16-normcoll + +libunistring_la_SOURCES += uninorm/u16-normcoll.c + +EXTRA_DIST += uninorm/u-normcoll.h + +## end gnulib module uninorm/u16-normcoll + +## begin gnulib module uninorm/u16-normxfrm + +libunistring_la_SOURCES += uninorm/u16-normxfrm.c + +EXTRA_DIST += uninorm/u-normxfrm.h + +## end gnulib module uninorm/u16-normxfrm + +## begin gnulib module uninorm/u32-normalize + +libunistring_la_SOURCES += uninorm/u32-normalize.c + +EXTRA_DIST += uninorm/normalize-internal.h uninorm/u-normalize-internal.h + +## end gnulib module uninorm/u32-normalize + +## begin gnulib module uninorm/u32-normcmp + +libunistring_la_SOURCES += uninorm/u32-normcmp.c + +EXTRA_DIST += uninorm/u-normcmp.h + +## end gnulib module uninorm/u32-normcmp + +## begin gnulib module uninorm/u32-normcoll + +libunistring_la_SOURCES += uninorm/u32-normcoll.c + +EXTRA_DIST += uninorm/u-normcoll.h + +## end gnulib module uninorm/u32-normcoll + +## begin gnulib module uninorm/u32-normxfrm + +libunistring_la_SOURCES += uninorm/u32-normxfrm.c + +EXTRA_DIST += uninorm/u-normxfrm.h + +## end gnulib module uninorm/u32-normxfrm + +## begin gnulib module uninorm/u8-normalize + +libunistring_la_SOURCES += uninorm/u8-normalize.c + +EXTRA_DIST += uninorm/normalize-internal.h uninorm/u-normalize-internal.h + +## end gnulib module uninorm/u8-normalize + +## begin gnulib module uninorm/u8-normcmp + +libunistring_la_SOURCES += uninorm/u8-normcmp.c + +EXTRA_DIST += uninorm/u-normcmp.h + +## end gnulib module uninorm/u8-normcmp + +## begin gnulib module uninorm/u8-normcoll + +libunistring_la_SOURCES += uninorm/u8-normcoll.c + +EXTRA_DIST += uninorm/u-normcoll.h + +## end gnulib module uninorm/u8-normcoll + +## begin gnulib module uninorm/u8-normxfrm + +libunistring_la_SOURCES += uninorm/u8-normxfrm.c + +EXTRA_DIST += uninorm/u-normxfrm.h + +## end gnulib module uninorm/u8-normxfrm + +## begin gnulib module unistd + +BUILT_SOURCES += unistd.h + +# We need the following in order to create an empty placeholder for +# when the system doesn't have one. +unistd.h: unistd.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \ + -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \ + -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \ + -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \ + -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \ + -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \ + -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \ + -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \ + -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \ + -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \ + -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \ + -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \ + -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \ + -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \ + -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \ + -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \ + -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \ + -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \ + -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \ + -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \ + -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \ + -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \ + -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ + -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ + -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \ + -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ + -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ + -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ + -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ + -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ + -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/unistd.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += unistd.h unistd.h-t + +EXTRA_DIST += unistd.in.h + +## end gnulib module unistd + +## begin gnulib module unistdio/base + + +EXTRA_DIST += unistdio.h + +## end gnulib module unistdio/base + +## begin gnulib module unistdio/u-printf-args + +libunistring_la_SOURCES += unistdio/u-printf-args.c + +EXTRA_DIST += printf-args.c printf-args.h unistdio/u-printf-args.h + +EXTRA_libunistring_la_SOURCES += printf-args.c + +## end gnulib module unistdio/u-printf-args + +## begin gnulib module unistdio/u16-asnprintf + +libunistring_la_SOURCES += unistdio/u16-asnprintf.c + +EXTRA_DIST += unistdio/u-asnprintf.h + +## end gnulib module unistdio/u16-asnprintf + +## begin gnulib module unistdio/u16-asprintf + +libunistring_la_SOURCES += unistdio/u16-asprintf.c + +EXTRA_DIST += unistdio/u-asprintf.h + +## end gnulib module unistdio/u16-asprintf + +## begin gnulib module unistdio/u16-printf-parse + +libunistring_la_SOURCES += unistdio/u16-printf-parse.c + +EXTRA_DIST += printf-parse.c printf-parse.h unistdio/u-printf-parse.h + +EXTRA_libunistring_la_SOURCES += printf-parse.c + +## end gnulib module unistdio/u16-printf-parse + +## begin gnulib module unistdio/u16-snprintf + +libunistring_la_SOURCES += unistdio/u16-snprintf.c + +EXTRA_DIST += unistdio/u-snprintf.h + +## end gnulib module unistdio/u16-snprintf + +## begin gnulib module unistdio/u16-sprintf + +libunistring_la_SOURCES += unistdio/u16-sprintf.c + +EXTRA_DIST += unistdio/u-sprintf.h + +## end gnulib module unistdio/u16-sprintf + +## begin gnulib module unistdio/u16-u16-asnprintf + +libunistring_la_SOURCES += unistdio/u16-u16-asnprintf.c + +EXTRA_DIST += unistdio/u-asnprintf.h + +## end gnulib module unistdio/u16-u16-asnprintf + +## begin gnulib module unistdio/u16-u16-asprintf + +libunistring_la_SOURCES += unistdio/u16-u16-asprintf.c + +EXTRA_DIST += unistdio/u-asprintf.h + +## end gnulib module unistdio/u16-u16-asprintf + +## begin gnulib module unistdio/u16-u16-snprintf + +libunistring_la_SOURCES += unistdio/u16-u16-snprintf.c + +EXTRA_DIST += unistdio/u-snprintf.h + +## end gnulib module unistdio/u16-u16-snprintf + +## begin gnulib module unistdio/u16-u16-sprintf + +libunistring_la_SOURCES += unistdio/u16-u16-sprintf.c + +EXTRA_DIST += unistdio/u-sprintf.h + +## end gnulib module unistdio/u16-u16-sprintf + +## begin gnulib module unistdio/u16-u16-vasnprintf + +libunistring_la_SOURCES += unistdio/u16-u16-vasnprintf.c + +EXTRA_DIST += vasnprintf.c + +EXTRA_libunistring_la_SOURCES += vasnprintf.c + +## end gnulib module unistdio/u16-u16-vasnprintf + +## begin gnulib module unistdio/u16-u16-vasprintf + +libunistring_la_SOURCES += unistdio/u16-u16-vasprintf.c + +EXTRA_DIST += unistdio/u-vasprintf.h + +## end gnulib module unistdio/u16-u16-vasprintf + +## begin gnulib module unistdio/u16-u16-vsnprintf + +libunistring_la_SOURCES += unistdio/u16-u16-vsnprintf.c + +EXTRA_DIST += unistdio/u-vsnprintf.h + +## end gnulib module unistdio/u16-u16-vsnprintf + +## begin gnulib module unistdio/u16-u16-vsprintf + +libunistring_la_SOURCES += unistdio/u16-u16-vsprintf.c + +EXTRA_DIST += unistdio/u-vsprintf.h + +## end gnulib module unistdio/u16-u16-vsprintf + +## begin gnulib module unistdio/u16-vasnprintf + +libunistring_la_SOURCES += unistdio/u16-vasnprintf.c + +EXTRA_DIST += vasnprintf.c + +EXTRA_libunistring_la_SOURCES += vasnprintf.c + +## end gnulib module unistdio/u16-vasnprintf + +## begin gnulib module unistdio/u16-vasprintf + +libunistring_la_SOURCES += unistdio/u16-vasprintf.c + +EXTRA_DIST += unistdio/u-vasprintf.h + +## end gnulib module unistdio/u16-vasprintf + +## begin gnulib module unistdio/u16-vsnprintf + +libunistring_la_SOURCES += unistdio/u16-vsnprintf.c + +EXTRA_DIST += unistdio/u-vsnprintf.h + +## end gnulib module unistdio/u16-vsnprintf + +## begin gnulib module unistdio/u16-vsprintf + +libunistring_la_SOURCES += unistdio/u16-vsprintf.c + +EXTRA_DIST += unistdio/u-vsprintf.h + +## end gnulib module unistdio/u16-vsprintf + +## begin gnulib module unistdio/u32-asnprintf + +libunistring_la_SOURCES += unistdio/u32-asnprintf.c + +EXTRA_DIST += unistdio/u-asnprintf.h + +## end gnulib module unistdio/u32-asnprintf + +## begin gnulib module unistdio/u32-asprintf + +libunistring_la_SOURCES += unistdio/u32-asprintf.c + +EXTRA_DIST += unistdio/u-asprintf.h + +## end gnulib module unistdio/u32-asprintf + +## begin gnulib module unistdio/u32-printf-parse + +libunistring_la_SOURCES += unistdio/u32-printf-parse.c + +EXTRA_DIST += printf-parse.c printf-parse.h unistdio/u-printf-parse.h + +EXTRA_libunistring_la_SOURCES += printf-parse.c + +## end gnulib module unistdio/u32-printf-parse + +## begin gnulib module unistdio/u32-snprintf + +libunistring_la_SOURCES += unistdio/u32-snprintf.c + +EXTRA_DIST += unistdio/u-snprintf.h + +## end gnulib module unistdio/u32-snprintf + +## begin gnulib module unistdio/u32-sprintf + +libunistring_la_SOURCES += unistdio/u32-sprintf.c + +EXTRA_DIST += unistdio/u-sprintf.h + +## end gnulib module unistdio/u32-sprintf + +## begin gnulib module unistdio/u32-u32-asnprintf + +libunistring_la_SOURCES += unistdio/u32-u32-asnprintf.c + +EXTRA_DIST += unistdio/u-asnprintf.h + +## end gnulib module unistdio/u32-u32-asnprintf + +## begin gnulib module unistdio/u32-u32-asprintf + +libunistring_la_SOURCES += unistdio/u32-u32-asprintf.c + +EXTRA_DIST += unistdio/u-asprintf.h + +## end gnulib module unistdio/u32-u32-asprintf + +## begin gnulib module unistdio/u32-u32-snprintf + +libunistring_la_SOURCES += unistdio/u32-u32-snprintf.c + +EXTRA_DIST += unistdio/u-snprintf.h + +## end gnulib module unistdio/u32-u32-snprintf + +## begin gnulib module unistdio/u32-u32-sprintf + +libunistring_la_SOURCES += unistdio/u32-u32-sprintf.c + +EXTRA_DIST += unistdio/u-sprintf.h + +## end gnulib module unistdio/u32-u32-sprintf + +## begin gnulib module unistdio/u32-u32-vasnprintf + +libunistring_la_SOURCES += unistdio/u32-u32-vasnprintf.c + +EXTRA_DIST += vasnprintf.c + +EXTRA_libunistring_la_SOURCES += vasnprintf.c + +## end gnulib module unistdio/u32-u32-vasnprintf + +## begin gnulib module unistdio/u32-u32-vasprintf + +libunistring_la_SOURCES += unistdio/u32-u32-vasprintf.c + +EXTRA_DIST += unistdio/u-vasprintf.h + +## end gnulib module unistdio/u32-u32-vasprintf + +## begin gnulib module unistdio/u32-u32-vsnprintf + +libunistring_la_SOURCES += unistdio/u32-u32-vsnprintf.c + +EXTRA_DIST += unistdio/u-vsnprintf.h + +## end gnulib module unistdio/u32-u32-vsnprintf + +## begin gnulib module unistdio/u32-u32-vsprintf + +libunistring_la_SOURCES += unistdio/u32-u32-vsprintf.c + +EXTRA_DIST += unistdio/u-vsprintf.h + +## end gnulib module unistdio/u32-u32-vsprintf + +## begin gnulib module unistdio/u32-vasnprintf + +libunistring_la_SOURCES += unistdio/u32-vasnprintf.c + +EXTRA_DIST += vasnprintf.c + +EXTRA_libunistring_la_SOURCES += vasnprintf.c + +## end gnulib module unistdio/u32-vasnprintf + +## begin gnulib module unistdio/u32-vasprintf + +libunistring_la_SOURCES += unistdio/u32-vasprintf.c + +EXTRA_DIST += unistdio/u-vasprintf.h + +## end gnulib module unistdio/u32-vasprintf + +## begin gnulib module unistdio/u32-vsnprintf + +libunistring_la_SOURCES += unistdio/u32-vsnprintf.c + +EXTRA_DIST += unistdio/u-vsnprintf.h + +## end gnulib module unistdio/u32-vsnprintf + +## begin gnulib module unistdio/u32-vsprintf + +libunistring_la_SOURCES += unistdio/u32-vsprintf.c + +EXTRA_DIST += unistdio/u-vsprintf.h + +## end gnulib module unistdio/u32-vsprintf + +## begin gnulib module unistdio/u8-asnprintf + +libunistring_la_SOURCES += unistdio/u8-asnprintf.c + +EXTRA_DIST += unistdio/u-asnprintf.h + +## end gnulib module unistdio/u8-asnprintf + +## begin gnulib module unistdio/u8-asprintf + +libunistring_la_SOURCES += unistdio/u8-asprintf.c + +EXTRA_DIST += unistdio/u-asprintf.h + +## end gnulib module unistdio/u8-asprintf + +## begin gnulib module unistdio/u8-printf-parse + +libunistring_la_SOURCES += unistdio/u8-printf-parse.c + +EXTRA_DIST += printf-parse.c printf-parse.h unistdio/u-printf-parse.h + +EXTRA_libunistring_la_SOURCES += printf-parse.c + +## end gnulib module unistdio/u8-printf-parse + +## begin gnulib module unistdio/u8-snprintf + +libunistring_la_SOURCES += unistdio/u8-snprintf.c + +EXTRA_DIST += unistdio/u-snprintf.h + +## end gnulib module unistdio/u8-snprintf + +## begin gnulib module unistdio/u8-sprintf + +libunistring_la_SOURCES += unistdio/u8-sprintf.c + +EXTRA_DIST += unistdio/u-sprintf.h + +## end gnulib module unistdio/u8-sprintf + +## begin gnulib module unistdio/u8-u8-asnprintf + +libunistring_la_SOURCES += unistdio/u8-u8-asnprintf.c + +EXTRA_DIST += unistdio/u-asnprintf.h + +## end gnulib module unistdio/u8-u8-asnprintf + +## begin gnulib module unistdio/u8-u8-asprintf + +libunistring_la_SOURCES += unistdio/u8-u8-asprintf.c + +EXTRA_DIST += unistdio/u-asprintf.h + +## end gnulib module unistdio/u8-u8-asprintf + +## begin gnulib module unistdio/u8-u8-snprintf + +libunistring_la_SOURCES += unistdio/u8-u8-snprintf.c + +EXTRA_DIST += unistdio/u-snprintf.h + +## end gnulib module unistdio/u8-u8-snprintf + +## begin gnulib module unistdio/u8-u8-sprintf + +libunistring_la_SOURCES += unistdio/u8-u8-sprintf.c + +EXTRA_DIST += unistdio/u-sprintf.h + +## end gnulib module unistdio/u8-u8-sprintf + +## begin gnulib module unistdio/u8-u8-vasnprintf + +libunistring_la_SOURCES += unistdio/u8-u8-vasnprintf.c + +EXTRA_DIST += vasnprintf.c + +EXTRA_libunistring_la_SOURCES += vasnprintf.c + +## end gnulib module unistdio/u8-u8-vasnprintf + +## begin gnulib module unistdio/u8-u8-vasprintf + +libunistring_la_SOURCES += unistdio/u8-u8-vasprintf.c + +EXTRA_DIST += unistdio/u-vasprintf.h + +## end gnulib module unistdio/u8-u8-vasprintf + +## begin gnulib module unistdio/u8-u8-vsnprintf + +libunistring_la_SOURCES += unistdio/u8-u8-vsnprintf.c + +EXTRA_DIST += unistdio/u-vsnprintf.h + +## end gnulib module unistdio/u8-u8-vsnprintf + +## begin gnulib module unistdio/u8-u8-vsprintf + +libunistring_la_SOURCES += unistdio/u8-u8-vsprintf.c + +EXTRA_DIST += unistdio/u-vsprintf.h + +## end gnulib module unistdio/u8-u8-vsprintf + +## begin gnulib module unistdio/u8-vasnprintf + +libunistring_la_SOURCES += unistdio/u8-vasnprintf.c + +EXTRA_DIST += vasnprintf.c + +EXTRA_libunistring_la_SOURCES += vasnprintf.c + +## end gnulib module unistdio/u8-vasnprintf + +## begin gnulib module unistdio/u8-vasprintf + +libunistring_la_SOURCES += unistdio/u8-vasprintf.c + +EXTRA_DIST += unistdio/u-vasprintf.h + +## end gnulib module unistdio/u8-vasprintf + +## begin gnulib module unistdio/u8-vsnprintf + +libunistring_la_SOURCES += unistdio/u8-vsnprintf.c + +EXTRA_DIST += unistdio/u-vsnprintf.h + +## end gnulib module unistdio/u8-vsnprintf + +## begin gnulib module unistdio/u8-vsprintf + +libunistring_la_SOURCES += unistdio/u8-vsprintf.c + +EXTRA_DIST += unistdio/u-vsprintf.h + +## end gnulib module unistdio/u8-vsprintf + +## begin gnulib module unistdio/ulc-asnprintf + +libunistring_la_SOURCES += unistdio/ulc-asnprintf.c + +EXTRA_DIST += unistdio/u-asnprintf.h + +## end gnulib module unistdio/ulc-asnprintf + +## begin gnulib module unistdio/ulc-asprintf + +libunistring_la_SOURCES += unistdio/ulc-asprintf.c + +EXTRA_DIST += unistdio/u-asprintf.h + +## end gnulib module unistdio/ulc-asprintf + +## begin gnulib module unistdio/ulc-fprintf + +libunistring_la_SOURCES += unistdio/ulc-fprintf.c + +## end gnulib module unistdio/ulc-fprintf + +## begin gnulib module unistdio/ulc-printf-parse + +libunistring_la_SOURCES += unistdio/ulc-printf-parse.c + +EXTRA_DIST += printf-parse.c printf-parse.h unistdio/u-printf-parse.h + +EXTRA_libunistring_la_SOURCES += printf-parse.c + +## end gnulib module unistdio/ulc-printf-parse + +## begin gnulib module unistdio/ulc-snprintf + +libunistring_la_SOURCES += unistdio/ulc-snprintf.c + +EXTRA_DIST += unistdio/u-snprintf.h + +## end gnulib module unistdio/ulc-snprintf + +## begin gnulib module unistdio/ulc-sprintf + +libunistring_la_SOURCES += unistdio/ulc-sprintf.c + +EXTRA_DIST += unistdio/u-sprintf.h + +## end gnulib module unistdio/ulc-sprintf + +## begin gnulib module unistdio/ulc-vasnprintf + +libunistring_la_SOURCES += unistdio/ulc-vasnprintf.c + +EXTRA_DIST += vasnprintf.c + +EXTRA_libunistring_la_SOURCES += vasnprintf.c + +## end gnulib module unistdio/ulc-vasnprintf + +## begin gnulib module unistdio/ulc-vasprintf + +libunistring_la_SOURCES += unistdio/ulc-vasprintf.c + +EXTRA_DIST += unistdio/u-vasprintf.h + +## end gnulib module unistdio/ulc-vasprintf + +## begin gnulib module unistdio/ulc-vfprintf + +libunistring_la_SOURCES += unistdio/ulc-vfprintf.c + +## end gnulib module unistdio/ulc-vfprintf + +## begin gnulib module unistdio/ulc-vsnprintf + +libunistring_la_SOURCES += unistdio/ulc-vsnprintf.c + +EXTRA_DIST += unistdio/u-vsnprintf.h + +## end gnulib module unistdio/ulc-vsnprintf + +## begin gnulib module unistdio/ulc-vsprintf + +libunistring_la_SOURCES += unistdio/ulc-vsprintf.c + +EXTRA_DIST += unistdio/u-vsprintf.h + +## end gnulib module unistdio/ulc-vsprintf + +## begin gnulib module unistr/base + + +EXTRA_DIST += unistr.h + +## end gnulib module unistr/base + +## begin gnulib module unistr/u16-check + +libunistring_la_SOURCES += unistr/u16-check.c + +## end gnulib module unistr/u16-check + +## begin gnulib module unistr/u16-chr + +libunistring_la_SOURCES += unistr/u16-chr.c + +## end gnulib module unistr/u16-chr + +## begin gnulib module unistr/u16-cmp + +libunistring_la_SOURCES += unistr/u16-cmp.c + +## end gnulib module unistr/u16-cmp + +## begin gnulib module unistr/u16-cmp2 + +libunistring_la_SOURCES += unistr/u16-cmp2.c + +EXTRA_DIST += unistr/u-cmp2.h + +## end gnulib module unistr/u16-cmp2 + +## begin gnulib module unistr/u16-cpy + +libunistring_la_SOURCES += unistr/u16-cpy.c + +EXTRA_DIST += unistr/u-cpy.h + +## end gnulib module unistr/u16-cpy + +## begin gnulib module unistr/u16-cpy-alloc + +libunistring_la_SOURCES += unistr/u16-cpy-alloc.c + +EXTRA_DIST += unistr/u-cpy-alloc.h + +## end gnulib module unistr/u16-cpy-alloc + +## begin gnulib module unistr/u16-endswith + +libunistring_la_SOURCES += unistr/u16-endswith.c + +EXTRA_DIST += unistr/u-endswith.h + +## end gnulib module unistr/u16-endswith + +## begin gnulib module unistr/u16-mblen + +libunistring_la_SOURCES += unistr/u16-mblen.c + +## end gnulib module unistr/u16-mblen + +## begin gnulib module unistr/u16-mbsnlen + +libunistring_la_SOURCES += unistr/u16-mbsnlen.c + +## end gnulib module unistr/u16-mbsnlen + +## begin gnulib module unistr/u16-mbtouc + +libunistring_la_SOURCES += unistr/u16-mbtouc.c unistr/u16-mbtouc-aux.c + +## end gnulib module unistr/u16-mbtouc + +## begin gnulib module unistr/u16-mbtouc-unsafe + +libunistring_la_SOURCES += unistr/u16-mbtouc-unsafe.c unistr/u16-mbtouc-unsafe-aux.c + +## end gnulib module unistr/u16-mbtouc-unsafe + +## begin gnulib module unistr/u16-mbtoucr + +libunistring_la_SOURCES += unistr/u16-mbtoucr.c + +## end gnulib module unistr/u16-mbtoucr + +## begin gnulib module unistr/u16-move + +libunistring_la_SOURCES += unistr/u16-move.c + +EXTRA_DIST += unistr/u-move.h + +## end gnulib module unistr/u16-move + +## begin gnulib module unistr/u16-next + +libunistring_la_SOURCES += unistr/u16-next.c + +## end gnulib module unistr/u16-next + +## begin gnulib module unistr/u16-prev + +libunistring_la_SOURCES += unistr/u16-prev.c + +## end gnulib module unistr/u16-prev + +## begin gnulib module unistr/u16-set + +libunistring_la_SOURCES += unistr/u16-set.c + +EXTRA_DIST += unistr/u-set.h + +## end gnulib module unistr/u16-set + +## begin gnulib module unistr/u16-startswith + +libunistring_la_SOURCES += unistr/u16-startswith.c + +EXTRA_DIST += unistr/u-startswith.h + +## end gnulib module unistr/u16-startswith + +## begin gnulib module unistr/u16-stpcpy + +libunistring_la_SOURCES += unistr/u16-stpcpy.c + +EXTRA_DIST += unistr/u-stpcpy.h + +## end gnulib module unistr/u16-stpcpy + +## begin gnulib module unistr/u16-stpncpy + +libunistring_la_SOURCES += unistr/u16-stpncpy.c + +EXTRA_DIST += unistr/u-stpncpy.h + +## end gnulib module unistr/u16-stpncpy + +## begin gnulib module unistr/u16-strcat + +libunistring_la_SOURCES += unistr/u16-strcat.c + +EXTRA_DIST += unistr/u-strcat.h + +## end gnulib module unistr/u16-strcat + +## begin gnulib module unistr/u16-strchr + +libunistring_la_SOURCES += unistr/u16-strchr.c + +## end gnulib module unistr/u16-strchr + +## begin gnulib module unistr/u16-strcmp + +libunistring_la_SOURCES += unistr/u16-strcmp.c + +## end gnulib module unistr/u16-strcmp + +## begin gnulib module unistr/u16-strcoll + +libunistring_la_SOURCES += unistr/u16-strcoll.c + +EXTRA_DIST += unistr/u-strcoll.h + +## end gnulib module unistr/u16-strcoll + +## begin gnulib module unistr/u16-strcpy + +libunistring_la_SOURCES += unistr/u16-strcpy.c + +EXTRA_DIST += unistr/u-strcpy.h + +## end gnulib module unistr/u16-strcpy + +## begin gnulib module unistr/u16-strcspn + +libunistring_la_SOURCES += unistr/u16-strcspn.c + +EXTRA_DIST += unistr/u-strcspn.h + +## end gnulib module unistr/u16-strcspn + +## begin gnulib module unistr/u16-strdup + +libunistring_la_SOURCES += unistr/u16-strdup.c + +EXTRA_DIST += unistr/u-strdup.h + +## end gnulib module unistr/u16-strdup + +## begin gnulib module unistr/u16-strlen + +libunistring_la_SOURCES += unistr/u16-strlen.c + +EXTRA_DIST += unistr/u-strlen.h + +## end gnulib module unistr/u16-strlen + +## begin gnulib module unistr/u16-strmblen + +libunistring_la_SOURCES += unistr/u16-strmblen.c + +## end gnulib module unistr/u16-strmblen + +## begin gnulib module unistr/u16-strmbtouc + +libunistring_la_SOURCES += unistr/u16-strmbtouc.c + +## end gnulib module unistr/u16-strmbtouc + +## begin gnulib module unistr/u16-strncat + +libunistring_la_SOURCES += unistr/u16-strncat.c + +EXTRA_DIST += unistr/u-strncat.h + +## end gnulib module unistr/u16-strncat + +## begin gnulib module unistr/u16-strncmp + +libunistring_la_SOURCES += unistr/u16-strncmp.c + +## end gnulib module unistr/u16-strncmp + +## begin gnulib module unistr/u16-strncpy + +libunistring_la_SOURCES += unistr/u16-strncpy.c + +EXTRA_DIST += unistr/u-strncpy.h + +## end gnulib module unistr/u16-strncpy + +## begin gnulib module unistr/u16-strnlen + +libunistring_la_SOURCES += unistr/u16-strnlen.c + +EXTRA_DIST += unistr/u-strnlen.h + +## end gnulib module unistr/u16-strnlen + +## begin gnulib module unistr/u16-strpbrk + +libunistring_la_SOURCES += unistr/u16-strpbrk.c + +EXTRA_DIST += unistr/u-strpbrk.h + +## end gnulib module unistr/u16-strpbrk + +## begin gnulib module unistr/u16-strrchr + +libunistring_la_SOURCES += unistr/u16-strrchr.c + +## end gnulib module unistr/u16-strrchr + +## begin gnulib module unistr/u16-strspn + +libunistring_la_SOURCES += unistr/u16-strspn.c + +EXTRA_DIST += unistr/u-strspn.h + +## end gnulib module unistr/u16-strspn + +## begin gnulib module unistr/u16-strstr + +libunistring_la_SOURCES += unistr/u16-strstr.c + +EXTRA_DIST += unistr/u-strstr.h + +## end gnulib module unistr/u16-strstr + +## begin gnulib module unistr/u16-strtok + +libunistring_la_SOURCES += unistr/u16-strtok.c + +EXTRA_DIST += unistr/u-strtok.h + +## end gnulib module unistr/u16-strtok + +## begin gnulib module unistr/u16-to-u32 + +libunistring_la_SOURCES += unistr/u16-to-u32.c + +## end gnulib module unistr/u16-to-u32 + +## begin gnulib module unistr/u16-to-u8 + +libunistring_la_SOURCES += unistr/u16-to-u8.c + +## end gnulib module unistr/u16-to-u8 + +## begin gnulib module unistr/u16-uctomb + +libunistring_la_SOURCES += unistr/u16-uctomb.c unistr/u16-uctomb-aux.c + +## end gnulib module unistr/u16-uctomb + +## begin gnulib module unistr/u32-check + +libunistring_la_SOURCES += unistr/u32-check.c + +## end gnulib module unistr/u32-check + +## begin gnulib module unistr/u32-chr + +libunistring_la_SOURCES += unistr/u32-chr.c + +## end gnulib module unistr/u32-chr + +## begin gnulib module unistr/u32-cmp + +libunistring_la_SOURCES += unistr/u32-cmp.c + +## end gnulib module unistr/u32-cmp + +## begin gnulib module unistr/u32-cmp2 + +libunistring_la_SOURCES += unistr/u32-cmp2.c + +EXTRA_DIST += unistr/u-cmp2.h + +## end gnulib module unistr/u32-cmp2 + +## begin gnulib module unistr/u32-cpy + +libunistring_la_SOURCES += unistr/u32-cpy.c + +EXTRA_DIST += unistr/u-cpy.h + +## end gnulib module unistr/u32-cpy + +## begin gnulib module unistr/u32-cpy-alloc + +libunistring_la_SOURCES += unistr/u32-cpy-alloc.c + +EXTRA_DIST += unistr/u-cpy-alloc.h + +## end gnulib module unistr/u32-cpy-alloc + +## begin gnulib module unistr/u32-endswith + +libunistring_la_SOURCES += unistr/u32-endswith.c + +EXTRA_DIST += unistr/u-endswith.h + +## end gnulib module unistr/u32-endswith + +## begin gnulib module unistr/u32-mblen + +libunistring_la_SOURCES += unistr/u32-mblen.c + +## end gnulib module unistr/u32-mblen + +## begin gnulib module unistr/u32-mbsnlen + +libunistring_la_SOURCES += unistr/u32-mbsnlen.c + +## end gnulib module unistr/u32-mbsnlen + +## begin gnulib module unistr/u32-mbtouc + +libunistring_la_SOURCES += unistr/u32-mbtouc.c + +## end gnulib module unistr/u32-mbtouc + +## begin gnulib module unistr/u32-mbtouc-unsafe + +libunistring_la_SOURCES += unistr/u32-mbtouc-unsafe.c + +## end gnulib module unistr/u32-mbtouc-unsafe + +## begin gnulib module unistr/u32-mbtoucr + +libunistring_la_SOURCES += unistr/u32-mbtoucr.c + +## end gnulib module unistr/u32-mbtoucr + +## begin gnulib module unistr/u32-move + +libunistring_la_SOURCES += unistr/u32-move.c + +EXTRA_DIST += unistr/u-move.h + +## end gnulib module unistr/u32-move + +## begin gnulib module unistr/u32-next + +libunistring_la_SOURCES += unistr/u32-next.c + +## end gnulib module unistr/u32-next + +## begin gnulib module unistr/u32-prev + +libunistring_la_SOURCES += unistr/u32-prev.c + +## end gnulib module unistr/u32-prev + +## begin gnulib module unistr/u32-set + +libunistring_la_SOURCES += unistr/u32-set.c + +EXTRA_DIST += unistr/u-set.h + +## end gnulib module unistr/u32-set + +## begin gnulib module unistr/u32-startswith + +libunistring_la_SOURCES += unistr/u32-startswith.c + +EXTRA_DIST += unistr/u-startswith.h + +## end gnulib module unistr/u32-startswith + +## begin gnulib module unistr/u32-stpcpy + +libunistring_la_SOURCES += unistr/u32-stpcpy.c + +EXTRA_DIST += unistr/u-stpcpy.h + +## end gnulib module unistr/u32-stpcpy + +## begin gnulib module unistr/u32-stpncpy + +libunistring_la_SOURCES += unistr/u32-stpncpy.c + +EXTRA_DIST += unistr/u-stpncpy.h + +## end gnulib module unistr/u32-stpncpy + +## begin gnulib module unistr/u32-strcat + +libunistring_la_SOURCES += unistr/u32-strcat.c + +EXTRA_DIST += unistr/u-strcat.h + +## end gnulib module unistr/u32-strcat + +## begin gnulib module unistr/u32-strchr + +libunistring_la_SOURCES += unistr/u32-strchr.c + +## end gnulib module unistr/u32-strchr + +## begin gnulib module unistr/u32-strcmp + +libunistring_la_SOURCES += unistr/u32-strcmp.c + +## end gnulib module unistr/u32-strcmp + +## begin gnulib module unistr/u32-strcoll + +libunistring_la_SOURCES += unistr/u32-strcoll.c + +EXTRA_DIST += unistr/u-strcoll.h + +## end gnulib module unistr/u32-strcoll + +## begin gnulib module unistr/u32-strcpy + +libunistring_la_SOURCES += unistr/u32-strcpy.c + +EXTRA_DIST += unistr/u-strcpy.h + +## end gnulib module unistr/u32-strcpy + +## begin gnulib module unistr/u32-strcspn + +libunistring_la_SOURCES += unistr/u32-strcspn.c + +## end gnulib module unistr/u32-strcspn + +## begin gnulib module unistr/u32-strdup + +libunistring_la_SOURCES += unistr/u32-strdup.c + +EXTRA_DIST += unistr/u-strdup.h + +## end gnulib module unistr/u32-strdup + +## begin gnulib module unistr/u32-strlen + +libunistring_la_SOURCES += unistr/u32-strlen.c + +EXTRA_DIST += unistr/u-strlen.h + +## end gnulib module unistr/u32-strlen + +## begin gnulib module unistr/u32-strmblen + +libunistring_la_SOURCES += unistr/u32-strmblen.c + +## end gnulib module unistr/u32-strmblen + +## begin gnulib module unistr/u32-strmbtouc + +libunistring_la_SOURCES += unistr/u32-strmbtouc.c + +## end gnulib module unistr/u32-strmbtouc + +## begin gnulib module unistr/u32-strncat + +libunistring_la_SOURCES += unistr/u32-strncat.c + +EXTRA_DIST += unistr/u-strncat.h + +## end gnulib module unistr/u32-strncat + +## begin gnulib module unistr/u32-strncmp + +libunistring_la_SOURCES += unistr/u32-strncmp.c + +## end gnulib module unistr/u32-strncmp + +## begin gnulib module unistr/u32-strncpy + +libunistring_la_SOURCES += unistr/u32-strncpy.c + +EXTRA_DIST += unistr/u-strncpy.h + +## end gnulib module unistr/u32-strncpy + +## begin gnulib module unistr/u32-strnlen + +libunistring_la_SOURCES += unistr/u32-strnlen.c + +EXTRA_DIST += unistr/u-strnlen.h + +## end gnulib module unistr/u32-strnlen + +## begin gnulib module unistr/u32-strpbrk + +libunistring_la_SOURCES += unistr/u32-strpbrk.c + +## end gnulib module unistr/u32-strpbrk + +## begin gnulib module unistr/u32-strrchr + +libunistring_la_SOURCES += unistr/u32-strrchr.c + +## end gnulib module unistr/u32-strrchr + +## begin gnulib module unistr/u32-strspn + +libunistring_la_SOURCES += unistr/u32-strspn.c + +## end gnulib module unistr/u32-strspn + +## begin gnulib module unistr/u32-strstr + +libunistring_la_SOURCES += unistr/u32-strstr.c + +EXTRA_DIST += unistr/u-strstr.h + +## end gnulib module unistr/u32-strstr + +## begin gnulib module unistr/u32-strtok + +libunistring_la_SOURCES += unistr/u32-strtok.c + +EXTRA_DIST += unistr/u-strtok.h + +## end gnulib module unistr/u32-strtok + +## begin gnulib module unistr/u32-to-u16 + +libunistring_la_SOURCES += unistr/u32-to-u16.c + +## end gnulib module unistr/u32-to-u16 + +## begin gnulib module unistr/u32-to-u8 + +libunistring_la_SOURCES += unistr/u32-to-u8.c + +## end gnulib module unistr/u32-to-u8 + +## begin gnulib module unistr/u32-uctomb + +libunistring_la_SOURCES += unistr/u32-uctomb.c + +## end gnulib module unistr/u32-uctomb + +## begin gnulib module unistr/u8-check + +libunistring_la_SOURCES += unistr/u8-check.c + +## end gnulib module unistr/u8-check + +## begin gnulib module unistr/u8-chr + +libunistring_la_SOURCES += unistr/u8-chr.c + +## end gnulib module unistr/u8-chr + +## begin gnulib module unistr/u8-cmp + +libunistring_la_SOURCES += unistr/u8-cmp.c + +## end gnulib module unistr/u8-cmp + +## begin gnulib module unistr/u8-cmp2 + +libunistring_la_SOURCES += unistr/u8-cmp2.c + +EXTRA_DIST += unistr/u-cmp2.h + +## end gnulib module unistr/u8-cmp2 + +## begin gnulib module unistr/u8-cpy + +libunistring_la_SOURCES += unistr/u8-cpy.c + +EXTRA_DIST += unistr/u-cpy.h + +## end gnulib module unistr/u8-cpy + +## begin gnulib module unistr/u8-cpy-alloc + +libunistring_la_SOURCES += unistr/u8-cpy-alloc.c + +EXTRA_DIST += unistr/u-cpy-alloc.h + +## end gnulib module unistr/u8-cpy-alloc + +## begin gnulib module unistr/u8-endswith + +libunistring_la_SOURCES += unistr/u8-endswith.c + +EXTRA_DIST += unistr/u-endswith.h + +## end gnulib module unistr/u8-endswith + +## begin gnulib module unistr/u8-mblen + +libunistring_la_SOURCES += unistr/u8-mblen.c + +## end gnulib module unistr/u8-mblen + +## begin gnulib module unistr/u8-mbsnlen + +libunistring_la_SOURCES += unistr/u8-mbsnlen.c + +## end gnulib module unistr/u8-mbsnlen + +## begin gnulib module unistr/u8-mbtouc + +libunistring_la_SOURCES += unistr/u8-mbtouc.c unistr/u8-mbtouc-aux.c + +## end gnulib module unistr/u8-mbtouc + +## begin gnulib module unistr/u8-mbtouc-unsafe + +libunistring_la_SOURCES += unistr/u8-mbtouc-unsafe.c unistr/u8-mbtouc-unsafe-aux.c + +## end gnulib module unistr/u8-mbtouc-unsafe + +## begin gnulib module unistr/u8-mbtoucr + +libunistring_la_SOURCES += unistr/u8-mbtoucr.c + +## end gnulib module unistr/u8-mbtoucr + +## begin gnulib module unistr/u8-move + +libunistring_la_SOURCES += unistr/u8-move.c + +EXTRA_DIST += unistr/u-move.h + +## end gnulib module unistr/u8-move + +## begin gnulib module unistr/u8-next + +libunistring_la_SOURCES += unistr/u8-next.c + +## end gnulib module unistr/u8-next + +## begin gnulib module unistr/u8-prev + +libunistring_la_SOURCES += unistr/u8-prev.c + +## end gnulib module unistr/u8-prev + +## begin gnulib module unistr/u8-set + +libunistring_la_SOURCES += unistr/u8-set.c + +## end gnulib module unistr/u8-set + +## begin gnulib module unistr/u8-startswith + +libunistring_la_SOURCES += unistr/u8-startswith.c + +EXTRA_DIST += unistr/u-startswith.h + +## end gnulib module unistr/u8-startswith + +## begin gnulib module unistr/u8-stpcpy + +libunistring_la_SOURCES += unistr/u8-stpcpy.c + +EXTRA_DIST += unistr/u-stpcpy.h + +## end gnulib module unistr/u8-stpcpy + +## begin gnulib module unistr/u8-stpncpy + +libunistring_la_SOURCES += unistr/u8-stpncpy.c + +EXTRA_DIST += unistr/u-stpncpy.h + +## end gnulib module unistr/u8-stpncpy + +## begin gnulib module unistr/u8-strcat + +libunistring_la_SOURCES += unistr/u8-strcat.c + +## end gnulib module unistr/u8-strcat + +## begin gnulib module unistr/u8-strchr + +libunistring_la_SOURCES += unistr/u8-strchr.c + +## end gnulib module unistr/u8-strchr + +## begin gnulib module unistr/u8-strcmp + +libunistring_la_SOURCES += unistr/u8-strcmp.c + +## end gnulib module unistr/u8-strcmp + +## begin gnulib module unistr/u8-strcoll + +libunistring_la_SOURCES += unistr/u8-strcoll.c + +EXTRA_DIST += unistr/u-strcoll.h + +## end gnulib module unistr/u8-strcoll + +## begin gnulib module unistr/u8-strcpy + +libunistring_la_SOURCES += unistr/u8-strcpy.c + +## end gnulib module unistr/u8-strcpy + +## begin gnulib module unistr/u8-strcspn + +libunistring_la_SOURCES += unistr/u8-strcspn.c + +EXTRA_DIST += unistr/u-strcspn.h + +## end gnulib module unistr/u8-strcspn + +## begin gnulib module unistr/u8-strdup + +libunistring_la_SOURCES += unistr/u8-strdup.c + +EXTRA_DIST += unistr/u-strdup.h + +## end gnulib module unistr/u8-strdup + +## begin gnulib module unistr/u8-strlen + +libunistring_la_SOURCES += unistr/u8-strlen.c + +## end gnulib module unistr/u8-strlen + +## begin gnulib module unistr/u8-strmblen + +libunistring_la_SOURCES += unistr/u8-strmblen.c + +## end gnulib module unistr/u8-strmblen + +## begin gnulib module unistr/u8-strmbtouc + +libunistring_la_SOURCES += unistr/u8-strmbtouc.c + +## end gnulib module unistr/u8-strmbtouc + +## begin gnulib module unistr/u8-strncat + +libunistring_la_SOURCES += unistr/u8-strncat.c + +## end gnulib module unistr/u8-strncat + +## begin gnulib module unistr/u8-strncmp + +libunistring_la_SOURCES += unistr/u8-strncmp.c + +## end gnulib module unistr/u8-strncmp + +## begin gnulib module unistr/u8-strncpy + +libunistring_la_SOURCES += unistr/u8-strncpy.c + +## end gnulib module unistr/u8-strncpy + +## begin gnulib module unistr/u8-strnlen + +libunistring_la_SOURCES += unistr/u8-strnlen.c + +EXTRA_DIST += unistr/u-strnlen.h + +## end gnulib module unistr/u8-strnlen + +## begin gnulib module unistr/u8-strpbrk + +libunistring_la_SOURCES += unistr/u8-strpbrk.c + +EXTRA_DIST += unistr/u-strpbrk.h + +## end gnulib module unistr/u8-strpbrk + +## begin gnulib module unistr/u8-strrchr + +libunistring_la_SOURCES += unistr/u8-strrchr.c + +## end gnulib module unistr/u8-strrchr + +## begin gnulib module unistr/u8-strspn + +libunistring_la_SOURCES += unistr/u8-strspn.c + +EXTRA_DIST += unistr/u-strspn.h + +## end gnulib module unistr/u8-strspn + +## begin gnulib module unistr/u8-strstr + +libunistring_la_SOURCES += unistr/u8-strstr.c + +EXTRA_DIST += unistr/u-strstr.h + +## end gnulib module unistr/u8-strstr + +## begin gnulib module unistr/u8-strtok + +libunistring_la_SOURCES += unistr/u8-strtok.c + +EXTRA_DIST += unistr/u-strtok.h + +## end gnulib module unistr/u8-strtok + +## begin gnulib module unistr/u8-to-u16 + +libunistring_la_SOURCES += unistr/u8-to-u16.c + +## end gnulib module unistr/u8-to-u16 + +## begin gnulib module unistr/u8-to-u32 + +libunistring_la_SOURCES += unistr/u8-to-u32.c + +## end gnulib module unistr/u8-to-u32 + +## begin gnulib module unistr/u8-uctomb + +libunistring_la_SOURCES += unistr/u8-uctomb.c unistr/u8-uctomb-aux.c + +## end gnulib module unistr/u8-uctomb + +## begin gnulib module unitypes + + +EXTRA_DIST += unitypes.h + +## end gnulib module unitypes + +## begin gnulib module uniwbrk/base + + +EXTRA_DIST += uniwbrk.h + +## end gnulib module uniwbrk/base + +## begin gnulib module uniwbrk/table + +libunistring_la_SOURCES += uniwbrk/wbrktable.c + +EXTRA_DIST += uniwbrk/wbrktable.h + +## end gnulib module uniwbrk/table + +## begin gnulib module uniwbrk/u16-wordbreaks + +libunistring_la_SOURCES += uniwbrk/u16-wordbreaks.c + +EXTRA_DIST += uniwbrk/u-wordbreaks.h + +## end gnulib module uniwbrk/u16-wordbreaks + +## begin gnulib module uniwbrk/u32-wordbreaks + +libunistring_la_SOURCES += uniwbrk/u32-wordbreaks.c + +EXTRA_DIST += uniwbrk/u-wordbreaks.h + +## end gnulib module uniwbrk/u32-wordbreaks + +## begin gnulib module uniwbrk/u8-wordbreaks + +libunistring_la_SOURCES += uniwbrk/u8-wordbreaks.c + +EXTRA_DIST += uniwbrk/u-wordbreaks.h + +## end gnulib module uniwbrk/u8-wordbreaks + +## begin gnulib module uniwbrk/ulc-wordbreaks + +libunistring_la_SOURCES += uniwbrk/ulc-wordbreaks.c + +## end gnulib module uniwbrk/ulc-wordbreaks + +## begin gnulib module uniwbrk/wordbreak-property + +libunistring_la_SOURCES += uniwbrk/wordbreak-property.c + +EXTRA_DIST += uniwbrk/wbrkprop.h + +## end gnulib module uniwbrk/wordbreak-property + +## begin gnulib module uniwidth/base + + +EXTRA_DIST += localcharset.h uniwidth.h + +## end gnulib module uniwidth/base + +## begin gnulib module uniwidth/u16-strwidth + +libunistring_la_SOURCES += uniwidth/u16-strwidth.c + +## end gnulib module uniwidth/u16-strwidth + +## begin gnulib module uniwidth/u16-width + +libunistring_la_SOURCES += uniwidth/u16-width.c + +## end gnulib module uniwidth/u16-width + +## begin gnulib module uniwidth/u32-strwidth + +libunistring_la_SOURCES += uniwidth/u32-strwidth.c + +## end gnulib module uniwidth/u32-strwidth + +## begin gnulib module uniwidth/u32-width + +libunistring_la_SOURCES += uniwidth/u32-width.c + +## end gnulib module uniwidth/u32-width + +## begin gnulib module uniwidth/u8-strwidth + +libunistring_la_SOURCES += uniwidth/u8-strwidth.c + +## end gnulib module uniwidth/u8-strwidth + +## begin gnulib module uniwidth/u8-width + +libunistring_la_SOURCES += uniwidth/u8-width.c + +## end gnulib module uniwidth/u8-width + +## begin gnulib module uniwidth/width + +libunistring_la_SOURCES += uniwidth/width.c + +EXTRA_DIST += uniwidth/cjk.h + +## end gnulib module uniwidth/width + +## begin gnulib module verify + +libunistring_la_SOURCES += verify.h + +## end gnulib module verify + +## begin gnulib module wchar + +BUILT_SOURCES += $(WCHAR_H) + +# We need the following in order to create when the system +# version does not work standalone. +wchar.h: wchar.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \ + -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \ + -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \ + -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \ + -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \ + -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \ + -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \ + -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \ + -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \ + -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \ + -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \ + -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ + -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ + -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ + -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ + -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ + -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ + -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ + -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ + -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ + -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ + -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ + -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ + -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ + -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ + -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ + -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ + -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ + -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ + -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ + -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ + -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ + -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/wchar.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += wchar.h wchar.h-t + +EXTRA_DIST += wchar.in.h + +## end gnulib module wchar + +## begin gnulib module wctype + +BUILT_SOURCES += $(WCTYPE_H) + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +wctype.h: wctype.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ + < $(srcdir)/wctype.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += wctype.h wctype.h-t + +EXTRA_DIST += wctype.in.h + +## end gnulib module wctype + +## begin gnulib module wcwidth + + +EXTRA_DIST += wcwidth.c + +EXTRA_libunistring_la_SOURCES += wcwidth.c + +## end gnulib module wcwidth + +## begin gnulib module xsize + +libunistring_la_SOURCES += xsize.h + +## end gnulib module xsize + + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : diff --git a/lib/Makefile.in b/lib/Makefile.in new file mode 100644 index 00000000..a8cc5680 --- /dev/null +++ b/lib/Makefile.in @@ -0,0 +1,4285 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(nobase_include_HEADERS) $(noinst_HEADERS) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.gnulib \ + $(srcdir)/Makefile.in $(srcdir)/exported.sh.in +@GL_COND_LIBTOOL_TRUE@am__append_1 = $(LTLIBICONV) + +# Tell the mingw or Cygwin linker which symbols to export. +@WOE32DLL_TRUE@am__append_2 = ../woe32dll/unistring-exports.c +@WOE32DLL_TRUE@am__append_3 = -Wl,--export-all-symbols +@WOE32_TRUE@am__append_4 = libunistring.res.lo +subdir = lib +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ + $(top_srcdir)/gnulib-m4/alloca.m4 \ + $(top_srcdir)/gnulib-m4/codeset.m4 \ + $(top_srcdir)/gnulib-m4/eealloc.m4 \ + $(top_srcdir)/gnulib-m4/environ.m4 \ + $(top_srcdir)/gnulib-m4/errno_h.m4 \ + $(top_srcdir)/gnulib-m4/error.m4 \ + $(top_srcdir)/gnulib-m4/exitfail.m4 \ + $(top_srcdir)/gnulib-m4/exponentd.m4 \ + $(top_srcdir)/gnulib-m4/exponentf.m4 \ + $(top_srcdir)/gnulib-m4/exponentl.m4 \ + $(top_srcdir)/gnulib-m4/extensions.m4 \ + $(top_srcdir)/gnulib-m4/float_h.m4 \ + $(top_srcdir)/gnulib-m4/fpieee.m4 \ + $(top_srcdir)/gnulib-m4/frexp.m4 \ + $(top_srcdir)/gnulib-m4/frexpl.m4 \ + $(top_srcdir)/gnulib-m4/getpagesize.m4 \ + $(top_srcdir)/gnulib-m4/glibc21.m4 \ + $(top_srcdir)/gnulib-m4/gnulib-common.m4 \ + $(top_srcdir)/gnulib-m4/gnulib-comp.m4 \ + $(top_srcdir)/gnulib-m4/iconv.m4 \ + $(top_srcdir)/gnulib-m4/iconv_h.m4 \ + $(top_srcdir)/gnulib-m4/iconv_open.m4 \ + $(top_srcdir)/gnulib-m4/include_next.m4 \ + $(top_srcdir)/gnulib-m4/inline.m4 \ + $(top_srcdir)/gnulib-m4/intlmacosx.m4 \ + $(top_srcdir)/gnulib-m4/intmax_t.m4 \ + $(top_srcdir)/gnulib-m4/inttypes_h.m4 \ + $(top_srcdir)/gnulib-m4/isnand.m4 \ + $(top_srcdir)/gnulib-m4/isnanf.m4 \ + $(top_srcdir)/gnulib-m4/isnanl.m4 \ + $(top_srcdir)/gnulib-m4/lcmessage.m4 \ + $(top_srcdir)/gnulib-m4/ldexpl.m4 \ + $(top_srcdir)/gnulib-m4/lib-ld.m4 \ + $(top_srcdir)/gnulib-m4/lib-link.m4 \ + $(top_srcdir)/gnulib-m4/lib-prefix.m4 \ + $(top_srcdir)/gnulib-m4/localcharset.m4 \ + $(top_srcdir)/gnulib-m4/locale-fr.m4 \ + $(top_srcdir)/gnulib-m4/locale-ja.m4 \ + $(top_srcdir)/gnulib-m4/locale-tr.m4 \ + $(top_srcdir)/gnulib-m4/locale-zh.m4 \ + $(top_srcdir)/gnulib-m4/locale_h.m4 \ + $(top_srcdir)/gnulib-m4/localename.m4 \ + $(top_srcdir)/gnulib-m4/longlong.m4 \ + $(top_srcdir)/gnulib-m4/malloc.m4 \ + $(top_srcdir)/gnulib-m4/malloca.m4 \ + $(top_srcdir)/gnulib-m4/math_h.m4 \ + $(top_srcdir)/gnulib-m4/mbchar.m4 \ + $(top_srcdir)/gnulib-m4/mbiter.m4 \ + $(top_srcdir)/gnulib-m4/mbrtowc.m4 \ + $(top_srcdir)/gnulib-m4/mbsinit.m4 \ + $(top_srcdir)/gnulib-m4/mbstate_t.m4 \ + $(top_srcdir)/gnulib-m4/memchr.m4 \ + $(top_srcdir)/gnulib-m4/minmax.m4 \ + $(top_srcdir)/gnulib-m4/mmap-anon.m4 \ + $(top_srcdir)/gnulib-m4/multiarch.m4 \ + $(top_srcdir)/gnulib-m4/nocrash.m4 \ + $(top_srcdir)/gnulib-m4/printf-frexp.m4 \ + $(top_srcdir)/gnulib-m4/printf-frexpl.m4 \ + $(top_srcdir)/gnulib-m4/printf.m4 \ + $(top_srcdir)/gnulib-m4/relocatable-lib.m4 \ + $(top_srcdir)/gnulib-m4/setenv.m4 \ + $(top_srcdir)/gnulib-m4/signbit.m4 \ + $(top_srcdir)/gnulib-m4/size_max.m4 \ + $(top_srcdir)/gnulib-m4/stdbool.m4 \ + $(top_srcdir)/gnulib-m4/stdint.m4 \ + $(top_srcdir)/gnulib-m4/stdint_h.m4 \ + $(top_srcdir)/gnulib-m4/stdlib_h.m4 \ + $(top_srcdir)/gnulib-m4/strerror.m4 \ + $(top_srcdir)/gnulib-m4/string_h.m4 \ + $(top_srcdir)/gnulib-m4/unistd_h.m4 \ + $(top_srcdir)/gnulib-m4/vasnprintf.m4 \ + $(top_srcdir)/gnulib-m4/wchar.m4 \ + $(top_srcdir)/gnulib-m4/wchar_t.m4 \ + $(top_srcdir)/gnulib-m4/wctob.m4 \ + $(top_srcdir)/gnulib-m4/wctype.m4 \ + $(top_srcdir)/gnulib-m4/wcwidth.m4 \ + $(top_srcdir)/gnulib-m4/wint_t.m4 \ + $(top_srcdir)/gnulib-m4/xalloc.m4 \ + $(top_srcdir)/gnulib-m4/xsize.m4 $(top_srcdir)/m4/exported.m4 \ + $(top_srcdir)/m4/init-package-version.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/woe32-dll.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = exported.sh +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" \ + "$(DESTDIR)$(includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +am__DEPENDENCIES_1 = +@WOE32_TRUE@am__DEPENDENCIES_2 = libunistring.res.lo +am__libunistring_la_SOURCES_DIST = c-ctype.h c-ctype.c c-strcase.h \ + c-strcasecmp.c c-strncasecmp.c fseterr.c localcharset.h \ + localcharset.c localename.c malloca.c mbchar.c mbiter.h \ + mbsnlen.c memcmp2.c memxfrm.c minmax.h printf-frexp.c \ + printf-frexpl.c size_max.h striconveh.h striconveh.c \ + striconveha.h striconveha.c unicase/cased.c \ + unicase/empty-prefix-context.c unicase/empty-suffix-context.c \ + unicase/ignorable.c unicase/locale-language.c \ + unicase/special-casing.c unicase/tocasefold.c \ + unicase/tolower.c unicase/totitle.c unicase/toupper.c \ + unicase/u16-casecmp.c unicase/u16-casecoll.c \ + unicase/u16-casefold.c unicase/u16-casemap.c \ + unicase/u16-casexfrm.c unicase/u16-ct-casefold.c \ + unicase/u16-ct-tolower.c unicase/u16-ct-totitle.c \ + unicase/u16-ct-toupper.c unicase/u16-is-cased.c \ + unicase/u16-is-casefolded.c unicase/u16-is-invariant.c \ + unicase/u16-is-lowercase.c unicase/u16-is-titlecase.c \ + unicase/u16-is-uppercase.c unicase/u16-tolower.c \ + unicase/u16-totitle.c unicase/u16-toupper.c \ + unicase/u32-casecmp.c unicase/u32-casecoll.c \ + unicase/u32-casefold.c unicase/u32-casemap.c \ + unicase/u32-casexfrm.c unicase/u32-ct-casefold.c \ + unicase/u32-ct-tolower.c unicase/u32-ct-totitle.c \ + unicase/u32-ct-toupper.c unicase/u32-is-cased.c \ + unicase/u32-is-casefolded.c unicase/u32-is-invariant.c \ + unicase/u32-is-lowercase.c unicase/u32-is-titlecase.c \ + unicase/u32-is-uppercase.c unicase/u32-tolower.c \ + unicase/u32-totitle.c unicase/u32-toupper.c \ + unicase/u8-casecmp.c unicase/u8-casecoll.c \ + unicase/u8-casefold.c unicase/u8-casemap.c \ + unicase/u8-casexfrm.c unicase/u8-ct-casefold.c \ + unicase/u8-ct-tolower.c unicase/u8-ct-totitle.c \ + unicase/u8-ct-toupper.c unicase/u8-is-cased.c \ + unicase/u8-is-casefolded.c unicase/u8-is-invariant.c \ + unicase/u8-is-lowercase.c unicase/u8-is-titlecase.c \ + unicase/u8-is-uppercase.c unicase/u8-tolower.c \ + unicase/u8-totitle.c unicase/u8-toupper.c \ + unicase/ulc-casecmp.c unicase/ulc-casecoll.c \ + unicase/ulc-casexfrm.c uniconv/u16-conv-from-enc.c \ + uniconv/u16-conv-to-enc.c uniconv/u16-strconv-from-enc.c \ + uniconv/u16-strconv-from-locale.c uniconv/u16-strconv-to-enc.c \ + uniconv/u16-strconv-to-locale.c uniconv/u32-conv-from-enc.c \ + uniconv/u32-conv-to-enc.c uniconv/u32-strconv-from-enc.c \ + uniconv/u32-strconv-from-locale.c uniconv/u32-strconv-to-enc.c \ + uniconv/u32-strconv-to-locale.c uniconv/u8-conv-from-enc.c \ + uniconv/u8-conv-to-enc.c uniconv/u8-strconv-from-enc.c \ + uniconv/u8-strconv-from-locale.c uniconv/u8-strconv-to-enc.c \ + uniconv/u8-strconv-to-locale.c unictype/bidi_byname.c \ + unictype/bidi_name.c unictype/bidi_of.c unictype/bidi_test.c \ + unictype/blocks.c unictype/block_test.c unictype/categ_C.c \ + unictype/categ_Cc.c unictype/categ_Cf.c unictype/categ_Cn.c \ + unictype/categ_Co.c unictype/categ_Cs.c unictype/categ_L.c \ + unictype/categ_Ll.c unictype/categ_Lm.c unictype/categ_Lo.c \ + unictype/categ_Lt.c unictype/categ_Lu.c unictype/categ_M.c \ + unictype/categ_Mc.c unictype/categ_Me.c unictype/categ_Mn.c \ + unictype/categ_N.c unictype/categ_Nd.c unictype/categ_Nl.c \ + unictype/categ_No.c unictype/categ_P.c unictype/categ_Pc.c \ + unictype/categ_Pd.c unictype/categ_Pe.c unictype/categ_Pf.c \ + unictype/categ_Pi.c unictype/categ_Po.c unictype/categ_Ps.c \ + unictype/categ_S.c unictype/categ_Sc.c unictype/categ_Sk.c \ + unictype/categ_Sm.c unictype/categ_So.c unictype/categ_Z.c \ + unictype/categ_Zl.c unictype/categ_Zp.c unictype/categ_Zs.c \ + unictype/categ_and.c unictype/categ_and_not.c \ + unictype/categ_byname.c unictype/categ_name.c \ + unictype/categ_none.c unictype/categ_of.c unictype/categ_or.c \ + unictype/categ_test.c unictype/combining.c \ + unictype/ctype_alnum.c unictype/ctype_alpha.c \ + unictype/ctype_blank.c unictype/ctype_cntrl.c \ + unictype/ctype_digit.c unictype/ctype_graph.c \ + unictype/ctype_lower.c unictype/ctype_print.c \ + unictype/ctype_punct.c unictype/ctype_space.c \ + unictype/ctype_upper.c unictype/ctype_xdigit.c \ + unictype/decdigit.c unictype/digit.c unictype/mirror.c \ + unictype/numeric.c unictype/pr_alphabetic.c \ + unictype/pr_ascii_hex_digit.c unictype/pr_bidi_arabic_digit.c \ + unictype/pr_bidi_arabic_right_to_left.c \ + unictype/pr_bidi_block_separator.c \ + unictype/pr_bidi_boundary_neutral.c \ + unictype/pr_bidi_common_separator.c unictype/pr_bidi_control.c \ + unictype/pr_bidi_embedding_or_override.c \ + unictype/pr_bidi_eur_num_separator.c \ + unictype/pr_bidi_eur_num_terminator.c \ + unictype/pr_bidi_european_digit.c \ + unictype/pr_bidi_hebrew_right_to_left.c \ + unictype/pr_bidi_left_to_right.c \ + unictype/pr_bidi_non_spacing_mark.c \ + unictype/pr_bidi_other_neutral.c unictype/pr_bidi_pdf.c \ + unictype/pr_bidi_segment_separator.c \ + unictype/pr_bidi_whitespace.c unictype/pr_byname.c \ + unictype/pr_combining.c unictype/pr_composite.c \ + unictype/pr_currency_symbol.c unictype/pr_dash.c \ + unictype/pr_decimal_digit.c \ + unictype/pr_default_ignorable_code_point.c \ + unictype/pr_deprecated.c unictype/pr_diacritic.c \ + unictype/pr_extender.c unictype/pr_format_control.c \ + unictype/pr_grapheme_base.c unictype/pr_grapheme_extend.c \ + unictype/pr_grapheme_link.c unictype/pr_hex_digit.c \ + unictype/pr_hyphen.c unictype/pr_id_continue.c \ + unictype/pr_id_start.c unictype/pr_ideographic.c \ + unictype/pr_ids_binary_operator.c \ + unictype/pr_ids_trinary_operator.c \ + unictype/pr_ignorable_control.c unictype/pr_iso_control.c \ + unictype/pr_join_control.c unictype/pr_left_of_pair.c \ + unictype/pr_line_separator.c \ + unictype/pr_logical_order_exception.c unictype/pr_lowercase.c \ + unictype/pr_math.c unictype/pr_non_break.c \ + unictype/pr_not_a_character.c unictype/pr_numeric.c \ + unictype/pr_other_alphabetic.c \ + unictype/pr_other_default_ignorable_code_point.c \ + unictype/pr_other_grapheme_extend.c \ + unictype/pr_other_id_continue.c unictype/pr_other_id_start.c \ + unictype/pr_other_lowercase.c unictype/pr_other_math.c \ + unictype/pr_other_uppercase.c unictype/pr_paired_punctuation.c \ + unictype/pr_paragraph_separator.c unictype/pr_pattern_syntax.c \ + unictype/pr_pattern_white_space.c unictype/pr_private_use.c \ + unictype/pr_punctuation.c unictype/pr_quotation_mark.c \ + unictype/pr_radical.c unictype/pr_sentence_terminal.c \ + unictype/pr_soft_dotted.c unictype/pr_space.c \ + unictype/pr_terminal_punctuation.c unictype/pr_test.c \ + unictype/pr_titlecase.c unictype/pr_unassigned_code_value.c \ + unictype/pr_unified_ideograph.c unictype/pr_uppercase.c \ + unictype/pr_variation_selector.c unictype/pr_white_space.c \ + unictype/pr_xid_continue.c unictype/pr_xid_start.c \ + unictype/pr_zero_width.c unictype/scripts.c \ + unictype/sy_c_ident.c unictype/sy_c_whitespace.c \ + unictype/sy_java_ident.c unictype/sy_java_whitespace.c \ + unilbrk/lbrktables.c unilbrk/u16-possible-linebreaks.c \ + unilbrk/u16-width-linebreaks.c \ + unilbrk/u32-possible-linebreaks.c \ + unilbrk/u32-width-linebreaks.c \ + unilbrk/u8-possible-linebreaks.c unilbrk/u8-width-linebreaks.c \ + unilbrk/ulc-common.c unilbrk/ulc-possible-linebreaks.c \ + unilbrk/ulc-width-linebreaks.c uniname/uniname.c \ + uninorm/canonical-decomposition.c \ + uninorm/compat-decomposition.c uninorm/composition.c \ + uninorm/decompose-internal.c uninorm/decomposing-form.c \ + uninorm/decomposition.c uninorm/decomposition-table.c \ + uninorm/uninorm-filter.c uninorm/nfc.c uninorm/nfd.c \ + uninorm/nfkc.c uninorm/nfkd.c uninorm/u16-normalize.c \ + uninorm/u16-normcmp.c uninorm/u16-normcoll.c \ + uninorm/u16-normxfrm.c uninorm/u32-normalize.c \ + uninorm/u32-normcmp.c uninorm/u32-normcoll.c \ + uninorm/u32-normxfrm.c uninorm/u8-normalize.c \ + uninorm/u8-normcmp.c uninorm/u8-normcoll.c \ + uninorm/u8-normxfrm.c unistdio/u-printf-args.c \ + unistdio/u16-asnprintf.c unistdio/u16-asprintf.c \ + unistdio/u16-printf-parse.c unistdio/u16-snprintf.c \ + unistdio/u16-sprintf.c unistdio/u16-u16-asnprintf.c \ + unistdio/u16-u16-asprintf.c unistdio/u16-u16-snprintf.c \ + unistdio/u16-u16-sprintf.c unistdio/u16-u16-vasnprintf.c \ + unistdio/u16-u16-vasprintf.c unistdio/u16-u16-vsnprintf.c \ + unistdio/u16-u16-vsprintf.c unistdio/u16-vasnprintf.c \ + unistdio/u16-vasprintf.c unistdio/u16-vsnprintf.c \ + unistdio/u16-vsprintf.c unistdio/u32-asnprintf.c \ + unistdio/u32-asprintf.c unistdio/u32-printf-parse.c \ + unistdio/u32-snprintf.c unistdio/u32-sprintf.c \ + unistdio/u32-u32-asnprintf.c unistdio/u32-u32-asprintf.c \ + unistdio/u32-u32-snprintf.c unistdio/u32-u32-sprintf.c \ + unistdio/u32-u32-vasnprintf.c unistdio/u32-u32-vasprintf.c \ + unistdio/u32-u32-vsnprintf.c unistdio/u32-u32-vsprintf.c \ + unistdio/u32-vasnprintf.c unistdio/u32-vasprintf.c \ + unistdio/u32-vsnprintf.c unistdio/u32-vsprintf.c \ + unistdio/u8-asnprintf.c unistdio/u8-asprintf.c \ + unistdio/u8-printf-parse.c unistdio/u8-snprintf.c \ + unistdio/u8-sprintf.c unistdio/u8-u8-asnprintf.c \ + unistdio/u8-u8-asprintf.c unistdio/u8-u8-snprintf.c \ + unistdio/u8-u8-sprintf.c unistdio/u8-u8-vasnprintf.c \ + unistdio/u8-u8-vasprintf.c unistdio/u8-u8-vsnprintf.c \ + unistdio/u8-u8-vsprintf.c unistdio/u8-vasnprintf.c \ + unistdio/u8-vasprintf.c unistdio/u8-vsnprintf.c \ + unistdio/u8-vsprintf.c unistdio/ulc-asnprintf.c \ + unistdio/ulc-asprintf.c unistdio/ulc-fprintf.c \ + unistdio/ulc-printf-parse.c unistdio/ulc-snprintf.c \ + unistdio/ulc-sprintf.c unistdio/ulc-vasnprintf.c \ + unistdio/ulc-vasprintf.c unistdio/ulc-vfprintf.c \ + unistdio/ulc-vsnprintf.c unistdio/ulc-vsprintf.c \ + unistr/u16-check.c unistr/u16-chr.c unistr/u16-cmp.c \ + unistr/u16-cmp2.c unistr/u16-cpy.c unistr/u16-cpy-alloc.c \ + unistr/u16-endswith.c unistr/u16-mblen.c unistr/u16-mbsnlen.c \ + unistr/u16-mbtouc.c unistr/u16-mbtouc-aux.c \ + unistr/u16-mbtouc-unsafe.c unistr/u16-mbtouc-unsafe-aux.c \ + unistr/u16-mbtoucr.c unistr/u16-move.c unistr/u16-next.c \ + unistr/u16-prev.c unistr/u16-set.c unistr/u16-startswith.c \ + unistr/u16-stpcpy.c unistr/u16-stpncpy.c unistr/u16-strcat.c \ + unistr/u16-strchr.c unistr/u16-strcmp.c unistr/u16-strcoll.c \ + unistr/u16-strcpy.c unistr/u16-strcspn.c unistr/u16-strdup.c \ + unistr/u16-strlen.c unistr/u16-strmblen.c \ + unistr/u16-strmbtouc.c unistr/u16-strncat.c \ + unistr/u16-strncmp.c unistr/u16-strncpy.c unistr/u16-strnlen.c \ + unistr/u16-strpbrk.c unistr/u16-strrchr.c unistr/u16-strspn.c \ + unistr/u16-strstr.c unistr/u16-strtok.c unistr/u16-to-u32.c \ + unistr/u16-to-u8.c unistr/u16-uctomb.c unistr/u16-uctomb-aux.c \ + unistr/u32-check.c unistr/u32-chr.c unistr/u32-cmp.c \ + unistr/u32-cmp2.c unistr/u32-cpy.c unistr/u32-cpy-alloc.c \ + unistr/u32-endswith.c unistr/u32-mblen.c unistr/u32-mbsnlen.c \ + unistr/u32-mbtouc.c unistr/u32-mbtouc-unsafe.c \ + unistr/u32-mbtoucr.c unistr/u32-move.c unistr/u32-next.c \ + unistr/u32-prev.c unistr/u32-set.c unistr/u32-startswith.c \ + unistr/u32-stpcpy.c unistr/u32-stpncpy.c unistr/u32-strcat.c \ + unistr/u32-strchr.c unistr/u32-strcmp.c unistr/u32-strcoll.c \ + unistr/u32-strcpy.c unistr/u32-strcspn.c unistr/u32-strdup.c \ + unistr/u32-strlen.c unistr/u32-strmblen.c \ + unistr/u32-strmbtouc.c unistr/u32-strncat.c \ + unistr/u32-strncmp.c unistr/u32-strncpy.c unistr/u32-strnlen.c \ + unistr/u32-strpbrk.c unistr/u32-strrchr.c unistr/u32-strspn.c \ + unistr/u32-strstr.c unistr/u32-strtok.c unistr/u32-to-u16.c \ + unistr/u32-to-u8.c unistr/u32-uctomb.c unistr/u8-check.c \ + unistr/u8-chr.c unistr/u8-cmp.c unistr/u8-cmp2.c \ + unistr/u8-cpy.c unistr/u8-cpy-alloc.c unistr/u8-endswith.c \ + unistr/u8-mblen.c unistr/u8-mbsnlen.c unistr/u8-mbtouc.c \ + unistr/u8-mbtouc-aux.c unistr/u8-mbtouc-unsafe.c \ + unistr/u8-mbtouc-unsafe-aux.c unistr/u8-mbtoucr.c \ + unistr/u8-move.c unistr/u8-next.c unistr/u8-prev.c \ + unistr/u8-set.c unistr/u8-startswith.c unistr/u8-stpcpy.c \ + unistr/u8-stpncpy.c unistr/u8-strcat.c unistr/u8-strchr.c \ + unistr/u8-strcmp.c unistr/u8-strcoll.c unistr/u8-strcpy.c \ + unistr/u8-strcspn.c unistr/u8-strdup.c unistr/u8-strlen.c \ + unistr/u8-strmblen.c unistr/u8-strmbtouc.c unistr/u8-strncat.c \ + unistr/u8-strncmp.c unistr/u8-strncpy.c unistr/u8-strnlen.c \ + unistr/u8-strpbrk.c unistr/u8-strrchr.c unistr/u8-strspn.c \ + unistr/u8-strstr.c unistr/u8-strtok.c unistr/u8-to-u16.c \ + unistr/u8-to-u32.c unistr/u8-uctomb.c unistr/u8-uctomb-aux.c \ + uniwbrk/wbrktable.c uniwbrk/u16-wordbreaks.c \ + uniwbrk/u32-wordbreaks.c uniwbrk/u8-wordbreaks.c \ + uniwbrk/ulc-wordbreaks.c uniwbrk/wordbreak-property.c \ + uniwidth/u16-strwidth.c uniwidth/u16-width.c \ + uniwidth/u32-strwidth.c uniwidth/u32-width.c \ + uniwidth/u8-strwidth.c uniwidth/u8-width.c uniwidth/width.c \ + verify.h xsize.h version.c ../woe32dll/unistring-exports.c +am__dirstamp = $(am__leading_dot)dirstamp +@WOE32DLL_TRUE@am__objects_1 = ../woe32dll/unistring-exports.lo +am_libunistring_la_OBJECTS = c-ctype.lo c-strcasecmp.lo \ + c-strncasecmp.lo fseterr.lo localcharset.lo localename.lo \ + malloca.lo mbchar.lo mbsnlen.lo memcmp2.lo memxfrm.lo \ + printf-frexp.lo printf-frexpl.lo striconveh.lo striconveha.lo \ + unicase/cased.lo unicase/empty-prefix-context.lo \ + unicase/empty-suffix-context.lo unicase/ignorable.lo \ + unicase/locale-language.lo unicase/special-casing.lo \ + unicase/tocasefold.lo unicase/tolower.lo unicase/totitle.lo \ + unicase/toupper.lo unicase/u16-casecmp.lo \ + unicase/u16-casecoll.lo unicase/u16-casefold.lo \ + unicase/u16-casemap.lo unicase/u16-casexfrm.lo \ + unicase/u16-ct-casefold.lo unicase/u16-ct-tolower.lo \ + unicase/u16-ct-totitle.lo unicase/u16-ct-toupper.lo \ + unicase/u16-is-cased.lo unicase/u16-is-casefolded.lo \ + unicase/u16-is-invariant.lo unicase/u16-is-lowercase.lo \ + unicase/u16-is-titlecase.lo unicase/u16-is-uppercase.lo \ + unicase/u16-tolower.lo unicase/u16-totitle.lo \ + unicase/u16-toupper.lo unicase/u32-casecmp.lo \ + unicase/u32-casecoll.lo unicase/u32-casefold.lo \ + unicase/u32-casemap.lo unicase/u32-casexfrm.lo \ + unicase/u32-ct-casefold.lo unicase/u32-ct-tolower.lo \ + unicase/u32-ct-totitle.lo unicase/u32-ct-toupper.lo \ + unicase/u32-is-cased.lo unicase/u32-is-casefolded.lo \ + unicase/u32-is-invariant.lo unicase/u32-is-lowercase.lo \ + unicase/u32-is-titlecase.lo unicase/u32-is-uppercase.lo \ + unicase/u32-tolower.lo unicase/u32-totitle.lo \ + unicase/u32-toupper.lo unicase/u8-casecmp.lo \ + unicase/u8-casecoll.lo unicase/u8-casefold.lo \ + unicase/u8-casemap.lo unicase/u8-casexfrm.lo \ + unicase/u8-ct-casefold.lo unicase/u8-ct-tolower.lo \ + unicase/u8-ct-totitle.lo unicase/u8-ct-toupper.lo \ + unicase/u8-is-cased.lo unicase/u8-is-casefolded.lo \ + unicase/u8-is-invariant.lo unicase/u8-is-lowercase.lo \ + unicase/u8-is-titlecase.lo unicase/u8-is-uppercase.lo \ + unicase/u8-tolower.lo unicase/u8-totitle.lo \ + unicase/u8-toupper.lo unicase/ulc-casecmp.lo \ + unicase/ulc-casecoll.lo unicase/ulc-casexfrm.lo \ + uniconv/u16-conv-from-enc.lo uniconv/u16-conv-to-enc.lo \ + uniconv/u16-strconv-from-enc.lo \ + uniconv/u16-strconv-from-locale.lo \ + uniconv/u16-strconv-to-enc.lo uniconv/u16-strconv-to-locale.lo \ + uniconv/u32-conv-from-enc.lo uniconv/u32-conv-to-enc.lo \ + uniconv/u32-strconv-from-enc.lo \ + uniconv/u32-strconv-from-locale.lo \ + uniconv/u32-strconv-to-enc.lo uniconv/u32-strconv-to-locale.lo \ + uniconv/u8-conv-from-enc.lo uniconv/u8-conv-to-enc.lo \ + uniconv/u8-strconv-from-enc.lo \ + uniconv/u8-strconv-from-locale.lo uniconv/u8-strconv-to-enc.lo \ + uniconv/u8-strconv-to-locale.lo unictype/bidi_byname.lo \ + unictype/bidi_name.lo unictype/bidi_of.lo \ + unictype/bidi_test.lo unictype/blocks.lo \ + unictype/block_test.lo unictype/categ_C.lo \ + unictype/categ_Cc.lo unictype/categ_Cf.lo unictype/categ_Cn.lo \ + unictype/categ_Co.lo unictype/categ_Cs.lo unictype/categ_L.lo \ + unictype/categ_Ll.lo unictype/categ_Lm.lo unictype/categ_Lo.lo \ + unictype/categ_Lt.lo unictype/categ_Lu.lo unictype/categ_M.lo \ + unictype/categ_Mc.lo unictype/categ_Me.lo unictype/categ_Mn.lo \ + unictype/categ_N.lo unictype/categ_Nd.lo unictype/categ_Nl.lo \ + unictype/categ_No.lo unictype/categ_P.lo unictype/categ_Pc.lo \ + unictype/categ_Pd.lo unictype/categ_Pe.lo unictype/categ_Pf.lo \ + unictype/categ_Pi.lo unictype/categ_Po.lo unictype/categ_Ps.lo \ + unictype/categ_S.lo unictype/categ_Sc.lo unictype/categ_Sk.lo \ + unictype/categ_Sm.lo unictype/categ_So.lo unictype/categ_Z.lo \ + unictype/categ_Zl.lo unictype/categ_Zp.lo unictype/categ_Zs.lo \ + unictype/categ_and.lo unictype/categ_and_not.lo \ + unictype/categ_byname.lo unictype/categ_name.lo \ + unictype/categ_none.lo unictype/categ_of.lo \ + unictype/categ_or.lo unictype/categ_test.lo \ + unictype/combining.lo unictype/ctype_alnum.lo \ + unictype/ctype_alpha.lo unictype/ctype_blank.lo \ + unictype/ctype_cntrl.lo unictype/ctype_digit.lo \ + unictype/ctype_graph.lo unictype/ctype_lower.lo \ + unictype/ctype_print.lo unictype/ctype_punct.lo \ + unictype/ctype_space.lo unictype/ctype_upper.lo \ + unictype/ctype_xdigit.lo unictype/decdigit.lo \ + unictype/digit.lo unictype/mirror.lo unictype/numeric.lo \ + unictype/pr_alphabetic.lo unictype/pr_ascii_hex_digit.lo \ + unictype/pr_bidi_arabic_digit.lo \ + unictype/pr_bidi_arabic_right_to_left.lo \ + unictype/pr_bidi_block_separator.lo \ + unictype/pr_bidi_boundary_neutral.lo \ + unictype/pr_bidi_common_separator.lo \ + unictype/pr_bidi_control.lo \ + unictype/pr_bidi_embedding_or_override.lo \ + unictype/pr_bidi_eur_num_separator.lo \ + unictype/pr_bidi_eur_num_terminator.lo \ + unictype/pr_bidi_european_digit.lo \ + unictype/pr_bidi_hebrew_right_to_left.lo \ + unictype/pr_bidi_left_to_right.lo \ + unictype/pr_bidi_non_spacing_mark.lo \ + unictype/pr_bidi_other_neutral.lo unictype/pr_bidi_pdf.lo \ + unictype/pr_bidi_segment_separator.lo \ + unictype/pr_bidi_whitespace.lo unictype/pr_byname.lo \ + unictype/pr_combining.lo unictype/pr_composite.lo \ + unictype/pr_currency_symbol.lo unictype/pr_dash.lo \ + unictype/pr_decimal_digit.lo \ + unictype/pr_default_ignorable_code_point.lo \ + unictype/pr_deprecated.lo unictype/pr_diacritic.lo \ + unictype/pr_extender.lo unictype/pr_format_control.lo \ + unictype/pr_grapheme_base.lo unictype/pr_grapheme_extend.lo \ + unictype/pr_grapheme_link.lo unictype/pr_hex_digit.lo \ + unictype/pr_hyphen.lo unictype/pr_id_continue.lo \ + unictype/pr_id_start.lo unictype/pr_ideographic.lo \ + unictype/pr_ids_binary_operator.lo \ + unictype/pr_ids_trinary_operator.lo \ + unictype/pr_ignorable_control.lo unictype/pr_iso_control.lo \ + unictype/pr_join_control.lo unictype/pr_left_of_pair.lo \ + unictype/pr_line_separator.lo \ + unictype/pr_logical_order_exception.lo \ + unictype/pr_lowercase.lo unictype/pr_math.lo \ + unictype/pr_non_break.lo unictype/pr_not_a_character.lo \ + unictype/pr_numeric.lo unictype/pr_other_alphabetic.lo \ + unictype/pr_other_default_ignorable_code_point.lo \ + unictype/pr_other_grapheme_extend.lo \ + unictype/pr_other_id_continue.lo unictype/pr_other_id_start.lo \ + unictype/pr_other_lowercase.lo unictype/pr_other_math.lo \ + unictype/pr_other_uppercase.lo \ + unictype/pr_paired_punctuation.lo \ + unictype/pr_paragraph_separator.lo \ + unictype/pr_pattern_syntax.lo \ + unictype/pr_pattern_white_space.lo unictype/pr_private_use.lo \ + unictype/pr_punctuation.lo unictype/pr_quotation_mark.lo \ + unictype/pr_radical.lo unictype/pr_sentence_terminal.lo \ + unictype/pr_soft_dotted.lo unictype/pr_space.lo \ + unictype/pr_terminal_punctuation.lo unictype/pr_test.lo \ + unictype/pr_titlecase.lo unictype/pr_unassigned_code_value.lo \ + unictype/pr_unified_ideograph.lo unictype/pr_uppercase.lo \ + unictype/pr_variation_selector.lo unictype/pr_white_space.lo \ + unictype/pr_xid_continue.lo unictype/pr_xid_start.lo \ + unictype/pr_zero_width.lo unictype/scripts.lo \ + unictype/sy_c_ident.lo unictype/sy_c_whitespace.lo \ + unictype/sy_java_ident.lo unictype/sy_java_whitespace.lo \ + unilbrk/lbrktables.lo unilbrk/u16-possible-linebreaks.lo \ + unilbrk/u16-width-linebreaks.lo \ + unilbrk/u32-possible-linebreaks.lo \ + unilbrk/u32-width-linebreaks.lo \ + unilbrk/u8-possible-linebreaks.lo \ + unilbrk/u8-width-linebreaks.lo unilbrk/ulc-common.lo \ + unilbrk/ulc-possible-linebreaks.lo \ + unilbrk/ulc-width-linebreaks.lo uniname/uniname.lo \ + uninorm/canonical-decomposition.lo \ + uninorm/compat-decomposition.lo uninorm/composition.lo \ + uninorm/decompose-internal.lo uninorm/decomposing-form.lo \ + uninorm/decomposition.lo uninorm/decomposition-table.lo \ + uninorm/uninorm-filter.lo uninorm/nfc.lo uninorm/nfd.lo \ + uninorm/nfkc.lo uninorm/nfkd.lo uninorm/u16-normalize.lo \ + uninorm/u16-normcmp.lo uninorm/u16-normcoll.lo \ + uninorm/u16-normxfrm.lo uninorm/u32-normalize.lo \ + uninorm/u32-normcmp.lo uninorm/u32-normcoll.lo \ + uninorm/u32-normxfrm.lo uninorm/u8-normalize.lo \ + uninorm/u8-normcmp.lo uninorm/u8-normcoll.lo \ + uninorm/u8-normxfrm.lo unistdio/u-printf-args.lo \ + unistdio/u16-asnprintf.lo unistdio/u16-asprintf.lo \ + unistdio/u16-printf-parse.lo unistdio/u16-snprintf.lo \ + unistdio/u16-sprintf.lo unistdio/u16-u16-asnprintf.lo \ + unistdio/u16-u16-asprintf.lo unistdio/u16-u16-snprintf.lo \ + unistdio/u16-u16-sprintf.lo unistdio/u16-u16-vasnprintf.lo \ + unistdio/u16-u16-vasprintf.lo unistdio/u16-u16-vsnprintf.lo \ + unistdio/u16-u16-vsprintf.lo unistdio/u16-vasnprintf.lo \ + unistdio/u16-vasprintf.lo unistdio/u16-vsnprintf.lo \ + unistdio/u16-vsprintf.lo unistdio/u32-asnprintf.lo \ + unistdio/u32-asprintf.lo unistdio/u32-printf-parse.lo \ + unistdio/u32-snprintf.lo unistdio/u32-sprintf.lo \ + unistdio/u32-u32-asnprintf.lo unistdio/u32-u32-asprintf.lo \ + unistdio/u32-u32-snprintf.lo unistdio/u32-u32-sprintf.lo \ + unistdio/u32-u32-vasnprintf.lo unistdio/u32-u32-vasprintf.lo \ + unistdio/u32-u32-vsnprintf.lo unistdio/u32-u32-vsprintf.lo \ + unistdio/u32-vasnprintf.lo unistdio/u32-vasprintf.lo \ + unistdio/u32-vsnprintf.lo unistdio/u32-vsprintf.lo \ + unistdio/u8-asnprintf.lo unistdio/u8-asprintf.lo \ + unistdio/u8-printf-parse.lo unistdio/u8-snprintf.lo \ + unistdio/u8-sprintf.lo unistdio/u8-u8-asnprintf.lo \ + unistdio/u8-u8-asprintf.lo unistdio/u8-u8-snprintf.lo \ + unistdio/u8-u8-sprintf.lo unistdio/u8-u8-vasnprintf.lo \ + unistdio/u8-u8-vasprintf.lo unistdio/u8-u8-vsnprintf.lo \ + unistdio/u8-u8-vsprintf.lo unistdio/u8-vasnprintf.lo \ + unistdio/u8-vasprintf.lo unistdio/u8-vsnprintf.lo \ + unistdio/u8-vsprintf.lo unistdio/ulc-asnprintf.lo \ + unistdio/ulc-asprintf.lo unistdio/ulc-fprintf.lo \ + unistdio/ulc-printf-parse.lo unistdio/ulc-snprintf.lo \ + unistdio/ulc-sprintf.lo unistdio/ulc-vasnprintf.lo \ + unistdio/ulc-vasprintf.lo unistdio/ulc-vfprintf.lo \ + unistdio/ulc-vsnprintf.lo unistdio/ulc-vsprintf.lo \ + unistr/u16-check.lo unistr/u16-chr.lo unistr/u16-cmp.lo \ + unistr/u16-cmp2.lo unistr/u16-cpy.lo unistr/u16-cpy-alloc.lo \ + unistr/u16-endswith.lo unistr/u16-mblen.lo \ + unistr/u16-mbsnlen.lo unistr/u16-mbtouc.lo \ + unistr/u16-mbtouc-aux.lo unistr/u16-mbtouc-unsafe.lo \ + unistr/u16-mbtouc-unsafe-aux.lo unistr/u16-mbtoucr.lo \ + unistr/u16-move.lo unistr/u16-next.lo unistr/u16-prev.lo \ + unistr/u16-set.lo unistr/u16-startswith.lo \ + unistr/u16-stpcpy.lo unistr/u16-stpncpy.lo \ + unistr/u16-strcat.lo unistr/u16-strchr.lo unistr/u16-strcmp.lo \ + unistr/u16-strcoll.lo unistr/u16-strcpy.lo \ + unistr/u16-strcspn.lo unistr/u16-strdup.lo \ + unistr/u16-strlen.lo unistr/u16-strmblen.lo \ + unistr/u16-strmbtouc.lo unistr/u16-strncat.lo \ + unistr/u16-strncmp.lo unistr/u16-strncpy.lo \ + unistr/u16-strnlen.lo unistr/u16-strpbrk.lo \ + unistr/u16-strrchr.lo unistr/u16-strspn.lo \ + unistr/u16-strstr.lo unistr/u16-strtok.lo unistr/u16-to-u32.lo \ + unistr/u16-to-u8.lo unistr/u16-uctomb.lo \ + unistr/u16-uctomb-aux.lo unistr/u32-check.lo unistr/u32-chr.lo \ + unistr/u32-cmp.lo unistr/u32-cmp2.lo unistr/u32-cpy.lo \ + unistr/u32-cpy-alloc.lo unistr/u32-endswith.lo \ + unistr/u32-mblen.lo unistr/u32-mbsnlen.lo unistr/u32-mbtouc.lo \ + unistr/u32-mbtouc-unsafe.lo unistr/u32-mbtoucr.lo \ + unistr/u32-move.lo unistr/u32-next.lo unistr/u32-prev.lo \ + unistr/u32-set.lo unistr/u32-startswith.lo \ + unistr/u32-stpcpy.lo unistr/u32-stpncpy.lo \ + unistr/u32-strcat.lo unistr/u32-strchr.lo unistr/u32-strcmp.lo \ + unistr/u32-strcoll.lo unistr/u32-strcpy.lo \ + unistr/u32-strcspn.lo unistr/u32-strdup.lo \ + unistr/u32-strlen.lo unistr/u32-strmblen.lo \ + unistr/u32-strmbtouc.lo unistr/u32-strncat.lo \ + unistr/u32-strncmp.lo unistr/u32-strncpy.lo \ + unistr/u32-strnlen.lo unistr/u32-strpbrk.lo \ + unistr/u32-strrchr.lo unistr/u32-strspn.lo \ + unistr/u32-strstr.lo unistr/u32-strtok.lo unistr/u32-to-u16.lo \ + unistr/u32-to-u8.lo unistr/u32-uctomb.lo unistr/u8-check.lo \ + unistr/u8-chr.lo unistr/u8-cmp.lo unistr/u8-cmp2.lo \ + unistr/u8-cpy.lo unistr/u8-cpy-alloc.lo unistr/u8-endswith.lo \ + unistr/u8-mblen.lo unistr/u8-mbsnlen.lo unistr/u8-mbtouc.lo \ + unistr/u8-mbtouc-aux.lo unistr/u8-mbtouc-unsafe.lo \ + unistr/u8-mbtouc-unsafe-aux.lo unistr/u8-mbtoucr.lo \ + unistr/u8-move.lo unistr/u8-next.lo unistr/u8-prev.lo \ + unistr/u8-set.lo unistr/u8-startswith.lo unistr/u8-stpcpy.lo \ + unistr/u8-stpncpy.lo unistr/u8-strcat.lo unistr/u8-strchr.lo \ + unistr/u8-strcmp.lo unistr/u8-strcoll.lo unistr/u8-strcpy.lo \ + unistr/u8-strcspn.lo unistr/u8-strdup.lo unistr/u8-strlen.lo \ + unistr/u8-strmblen.lo unistr/u8-strmbtouc.lo \ + unistr/u8-strncat.lo unistr/u8-strncmp.lo unistr/u8-strncpy.lo \ + unistr/u8-strnlen.lo unistr/u8-strpbrk.lo unistr/u8-strrchr.lo \ + unistr/u8-strspn.lo unistr/u8-strstr.lo unistr/u8-strtok.lo \ + unistr/u8-to-u16.lo unistr/u8-to-u32.lo unistr/u8-uctomb.lo \ + unistr/u8-uctomb-aux.lo uniwbrk/wbrktable.lo \ + uniwbrk/u16-wordbreaks.lo uniwbrk/u32-wordbreaks.lo \ + uniwbrk/u8-wordbreaks.lo uniwbrk/ulc-wordbreaks.lo \ + uniwbrk/wordbreak-property.lo uniwidth/u16-strwidth.lo \ + uniwidth/u16-width.lo uniwidth/u32-strwidth.lo \ + uniwidth/u32-width.lo uniwidth/u8-strwidth.lo \ + uniwidth/u8-width.lo uniwidth/width.lo version.lo \ + $(am__objects_1) +libunistring_la_OBJECTS = $(am_libunistring_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +libunistring_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libunistring_la_LDFLAGS) $(LDFLAGS) \ + -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = +am__depfiles_maybe = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libunistring_la_SOURCES) $(EXTRA_libunistring_la_SOURCES) +DIST_SOURCES = $(am__libunistring_la_SOURCES_DIST) \ + $(EXTRA_libunistring_la_SOURCES) +HEADERS = $(nobase_include_HEADERS) $(nobase_nodist_include_HEADERS) \ + $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ -DNO_XMALLOC +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DLL_VARIABLE = @DLL_VARIABLE@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DVIPS = @DVIPS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +GLIBC21 = @GLIBC21@ +GLOBAL_SYMBOL_PIPE = @GLOBAL_SYMBOL_PIPE@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MATHL = @GNULIB_MATHL@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@ +HAVE_GLOBAL_SYMBOL_PIPE = @HAVE_GLOBAL_SYMBOL_PIPE@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HEXVERSION = @HEXVERSION@ +ICONV_H = @ICONV_H@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_H = @LOCALE_H@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NAMESPACING = @NAMESPACING@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +RC = @RC@ +RELOCATABLE = @RELOCATABLE@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +TEXI2DVI = @TEXI2DVI@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +VERSION = @VERSION@ +VOID_UNSETENV = @VOID_UNSETENV@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects no-dependencies + +# Version information according to Woe32 conventions. +EXTRA_DIST = alloca.in.h array-mergesort.h c-strcaseeq.h errno.in.h \ + float.in.h fpucw.h frexp.c frexpl.c fseterr.h stdio-impl.h \ + getpagesize.c $(top_srcdir)/build-aux/config.rpath \ + iconv_open-aix.h iconv_open-hpux.h iconv_open-irix.h \ + iconv_open-osf.h iconv.in.h iconv_open-aix.gperf \ + iconv_open-hpux.gperf iconv_open-irix.gperf \ + iconv_open-osf.gperf iconv_open.c float+.h isnan.c \ + isnand-nolibm.h isnand.c float+.h isnan.c isnanf-nolibm.h \ + isnanf.c float+.h isnan.c isnanl-nolibm.h isnanl.c \ + $(top_srcdir)/build-aux/link-warning.h config.charset \ + ref-add.sin ref-del.sin localename.h malloc.c malloca.h \ + malloca.valgrind math.in.h mbchar.h mbrtowc.c mbsinit.c \ + memchr.c memchr.valgrind memcmp2.h memxfrm.h printf-frexp.h \ + printf-frexp.c printf-frexpl.h relocatable.c relocatable.h \ + float+.h signbitd.c signbitf.c signbitl.c stdbool.in.h \ + stdint.in.h stdlib.in.h streq.h iconveh.h string.in.h \ + unicase.h unicase/cased.h unicase/caseprop.h unictype/bitmap.h \ + unicase/caseprop.h unicase/ignorable.h unictype/bitmap.h \ + unicase/locale-languages.h unicase/locale-languages.gperf \ + unicase/special-casing-table.h \ + unicase/special-casing-table.gperf unicase/special-casing.h \ + unicase/casefold.h unicase/simple-mapping.h \ + unicase/tocasefold.h unicase/simple-mapping.h \ + unicase/tolower.h unicase/simple-mapping.h unicase/totitle.h \ + unicase/simple-mapping.h unicase/toupper.h unicase/u-casecmp.h \ + unicase/u-casecoll.h unicase/u-casefold.h unicase/context.h \ + unicase/u-casemap.h unicase/unicasemap.h unicase/u-casexfrm.h \ + unicase/u-ct-casefold.h unicase/context.h \ + unicase/u-ct-totitle.h unicase/u-is-cased.h \ + unicase/invariant.h unicase/u-is-invariant.h \ + unicase/u-totitle.h unicase/u-casecmp.h unicase/u-casecoll.h \ + unicase/u-casefold.h unicase/context.h unicase/u-casemap.h \ + unicase/unicasemap.h unicase/u-casexfrm.h \ + unicase/u-ct-casefold.h unicase/context.h \ + unicase/u-ct-totitle.h unicase/u-is-cased.h \ + unicase/invariant.h unicase/u-is-invariant.h \ + unicase/u-totitle.h unicase/u-casecmp.h unicase/u-casecoll.h \ + unicase/u-casefold.h unicase/context.h unicase/u-casemap.h \ + unicase/unicasemap.h unicase/u-casexfrm.h \ + unicase/u-ct-casefold.h unicase/context.h \ + unicase/u-ct-totitle.h unicase/u-is-cased.h \ + unicase/invariant.h unicase/u-is-invariant.h \ + unicase/u-totitle.h unicase/u-casecmp.h unicase/u-casecoll.h \ + iconveh.h localcharset.h striconveha.h uniconv.h \ + uniconv/u-conv-from-enc.h uniconv/u-conv-to-enc.h \ + uniconv/u-strconv-from-enc.h uniconv/u-strconv-to-enc.h \ + uniconv/u-conv-from-enc.h uniconv/u-conv-to-enc.h \ + uniconv/u-strconv-from-enc.h uniconv/u-strconv-to-enc.h \ + uniconv/u-strconv-from-enc.h unictype.h unictype/bidi_of.h \ + unictype/blocks.h unictype/categ_C.h unictype/categ_Cc.h \ + unictype/categ_Cf.h unictype/categ_Cn.h unictype/categ_Co.h \ + unictype/categ_Cs.h unictype/categ_L.h unictype/categ_Ll.h \ + unictype/categ_Lm.h unictype/categ_Lo.h unictype/categ_Lt.h \ + unictype/categ_Lu.h unictype/categ_M.h unictype/categ_Mc.h \ + unictype/categ_Me.h unictype/categ_Mn.h unictype/categ_N.h \ + unictype/categ_Nd.h unictype/categ_Nl.h unictype/categ_No.h \ + unictype/categ_P.h unictype/categ_Pc.h unictype/categ_Pd.h \ + unictype/categ_Pe.h unictype/categ_Pf.h unictype/categ_Pi.h \ + unictype/categ_Po.h unictype/categ_Ps.h unictype/categ_S.h \ + unictype/categ_Sc.h unictype/categ_Sk.h unictype/categ_Sm.h \ + unictype/categ_So.h unictype/categ_Z.h unictype/categ_Zl.h \ + unictype/categ_Zp.h unictype/categ_Zs.h unictype/categ_of.h \ + unictype/bitmap.h unictype/combining.h unictype/bitmap.h \ + unictype/ctype_alnum.h unictype/bitmap.h \ + unictype/ctype_alpha.h unictype/bitmap.h \ + unictype/ctype_blank.h unictype/bitmap.h \ + unictype/ctype_cntrl.h unictype/bitmap.h \ + unictype/ctype_digit.h unictype/bitmap.h \ + unictype/ctype_graph.h unictype/bitmap.h \ + unictype/ctype_lower.h unictype/bitmap.h \ + unictype/ctype_print.h unictype/bitmap.h \ + unictype/ctype_punct.h unictype/bitmap.h \ + unictype/ctype_space.h unictype/bitmap.h \ + unictype/ctype_upper.h unictype/bitmap.h \ + unictype/ctype_xdigit.h unictype/decdigit.h unictype/digit.h \ + unictype/mirror.h unictype/numeric.h unictype/bitmap.h \ + unictype/pr_alphabetic.h unictype/bitmap.h \ + unictype/pr_ascii_hex_digit.h unictype/bitmap.h \ + unictype/pr_bidi_arabic_digit.h unictype/bitmap.h \ + unictype/pr_bidi_arabic_right_to_left.h unictype/bitmap.h \ + unictype/pr_bidi_block_separator.h unictype/bitmap.h \ + unictype/pr_bidi_boundary_neutral.h unictype/bitmap.h \ + unictype/pr_bidi_common_separator.h unictype/bitmap.h \ + unictype/pr_bidi_control.h unictype/bitmap.h \ + unictype/pr_bidi_embedding_or_override.h unictype/bitmap.h \ + unictype/pr_bidi_eur_num_separator.h unictype/bitmap.h \ + unictype/pr_bidi_eur_num_terminator.h unictype/bitmap.h \ + unictype/pr_bidi_european_digit.h unictype/bitmap.h \ + unictype/pr_bidi_hebrew_right_to_left.h unictype/bitmap.h \ + unictype/pr_bidi_left_to_right.h unictype/bitmap.h \ + unictype/pr_bidi_non_spacing_mark.h unictype/bitmap.h \ + unictype/pr_bidi_other_neutral.h unictype/bitmap.h \ + unictype/pr_bidi_pdf.h unictype/bitmap.h \ + unictype/pr_bidi_segment_separator.h unictype/bitmap.h \ + unictype/pr_bidi_whitespace.h unictype/pr_byname.h \ + unictype/pr_byname.gperf unictype/bitmap.h \ + unictype/pr_combining.h unictype/bitmap.h \ + unictype/pr_composite.h unictype/bitmap.h \ + unictype/pr_currency_symbol.h unictype/bitmap.h \ + unictype/pr_dash.h unictype/bitmap.h \ + unictype/pr_decimal_digit.h unictype/bitmap.h \ + unictype/pr_default_ignorable_code_point.h unictype/bitmap.h \ + unictype/pr_deprecated.h unictype/bitmap.h \ + unictype/pr_diacritic.h unictype/bitmap.h \ + unictype/pr_extender.h unictype/bitmap.h \ + unictype/pr_format_control.h unictype/bitmap.h \ + unictype/pr_grapheme_base.h unictype/bitmap.h \ + unictype/pr_grapheme_extend.h unictype/bitmap.h \ + unictype/pr_grapheme_link.h unictype/bitmap.h \ + unictype/pr_hex_digit.h unictype/bitmap.h unictype/pr_hyphen.h \ + unictype/bitmap.h unictype/pr_id_continue.h unictype/bitmap.h \ + unictype/pr_id_start.h unictype/bitmap.h \ + unictype/pr_ideographic.h unictype/bitmap.h \ + unictype/pr_ids_binary_operator.h unictype/bitmap.h \ + unictype/pr_ids_trinary_operator.h unictype/bitmap.h \ + unictype/pr_ignorable_control.h unictype/bitmap.h \ + unictype/pr_iso_control.h unictype/bitmap.h \ + unictype/pr_join_control.h unictype/bitmap.h \ + unictype/pr_left_of_pair.h unictype/bitmap.h \ + unictype/pr_line_separator.h unictype/bitmap.h \ + unictype/pr_logical_order_exception.h unictype/bitmap.h \ + unictype/pr_lowercase.h unictype/bitmap.h unictype/pr_math.h \ + unictype/bitmap.h unictype/pr_non_break.h unictype/bitmap.h \ + unictype/pr_not_a_character.h unictype/bitmap.h \ + unictype/pr_numeric.h unictype/bitmap.h \ + unictype/pr_other_alphabetic.h unictype/bitmap.h \ + unictype/pr_other_default_ignorable_code_point.h \ + unictype/bitmap.h unictype/pr_other_grapheme_extend.h \ + unictype/bitmap.h unictype/pr_other_id_continue.h \ + unictype/bitmap.h unictype/pr_other_id_start.h \ + unictype/bitmap.h unictype/pr_other_lowercase.h \ + unictype/bitmap.h unictype/pr_other_math.h unictype/bitmap.h \ + unictype/pr_other_uppercase.h unictype/bitmap.h \ + unictype/pr_paired_punctuation.h unictype/bitmap.h \ + unictype/pr_paragraph_separator.h unictype/bitmap.h \ + unictype/pr_pattern_syntax.h unictype/bitmap.h \ + unictype/pr_pattern_white_space.h unictype/bitmap.h \ + unictype/pr_private_use.h unictype/bitmap.h \ + unictype/pr_punctuation.h unictype/bitmap.h \ + unictype/pr_quotation_mark.h unictype/bitmap.h \ + unictype/pr_radical.h unictype/bitmap.h \ + unictype/pr_sentence_terminal.h unictype/bitmap.h \ + unictype/pr_soft_dotted.h unictype/bitmap.h \ + unictype/pr_space.h unictype/bitmap.h \ + unictype/pr_terminal_punctuation.h unictype/bitmap.h \ + unictype/pr_titlecase.h unictype/bitmap.h \ + unictype/pr_unassigned_code_value.h unictype/bitmap.h \ + unictype/pr_unified_ideograph.h unictype/bitmap.h \ + unictype/pr_uppercase.h unictype/bitmap.h \ + unictype/pr_variation_selector.h unictype/bitmap.h \ + unictype/pr_white_space.h unictype/bitmap.h \ + unictype/pr_xid_continue.h unictype/bitmap.h \ + unictype/pr_xid_start.h unictype/bitmap.h \ + unictype/pr_zero_width.h unictype/scripts_byname.h \ + unictype/scripts.h unictype/scripts_byname.gperf \ + unictype/identsyntaxmap.h unictype/sy_c_ident.h \ + unictype/identsyntaxmap.h unictype/sy_java_ident.h unilbrk.h \ + unilbrk/lbrkprop1.h unilbrk/lbrkprop2.h unilbrk/lbrktables.h \ + uniwidth/cjk.h uniwidth/cjk.h uniwidth/cjk.h \ + unilbrk/ulc-common.h uniname.h uniname/gen-uninames.lisp \ + uniname/uninames.h uninorm.h uninorm/decompose-internal.h \ + uninorm/composition-table.h uninorm/composition-table.gperf \ + uninorm/decompose-internal.h uninorm/normalize-internal.h \ + uninorm/decomposition-table.h uninorm/decomposition-table1.h \ + uninorm/decomposition-table2.h uninorm/normalize-internal.h \ + uninorm/normalize-internal.h uninorm/normalize-internal.h \ + uninorm/normalize-internal.h uninorm/normalize-internal.h \ + uninorm/normalize-internal.h uninorm/u-normalize-internal.h \ + uninorm/u-normcmp.h uninorm/u-normcoll.h uninorm/u-normxfrm.h \ + uninorm/normalize-internal.h uninorm/u-normalize-internal.h \ + uninorm/u-normcmp.h uninorm/u-normcoll.h uninorm/u-normxfrm.h \ + uninorm/normalize-internal.h uninorm/u-normalize-internal.h \ + uninorm/u-normcmp.h uninorm/u-normcoll.h uninorm/u-normxfrm.h \ + unistd.in.h unistdio.h printf-args.c printf-args.h \ + unistdio/u-printf-args.h unistdio/u-asnprintf.h \ + unistdio/u-asprintf.h printf-parse.c printf-parse.h \ + unistdio/u-printf-parse.h unistdio/u-snprintf.h \ + unistdio/u-sprintf.h unistdio/u-asnprintf.h \ + unistdio/u-asprintf.h unistdio/u-snprintf.h \ + unistdio/u-sprintf.h vasnprintf.c unistdio/u-vasprintf.h \ + unistdio/u-vsnprintf.h unistdio/u-vsprintf.h vasnprintf.c \ + unistdio/u-vasprintf.h unistdio/u-vsnprintf.h \ + unistdio/u-vsprintf.h unistdio/u-asnprintf.h \ + unistdio/u-asprintf.h printf-parse.c printf-parse.h \ + unistdio/u-printf-parse.h unistdio/u-snprintf.h \ + unistdio/u-sprintf.h unistdio/u-asnprintf.h \ + unistdio/u-asprintf.h unistdio/u-snprintf.h \ + unistdio/u-sprintf.h vasnprintf.c unistdio/u-vasprintf.h \ + unistdio/u-vsnprintf.h unistdio/u-vsprintf.h vasnprintf.c \ + unistdio/u-vasprintf.h unistdio/u-vsnprintf.h \ + unistdio/u-vsprintf.h unistdio/u-asnprintf.h \ + unistdio/u-asprintf.h printf-parse.c printf-parse.h \ + unistdio/u-printf-parse.h unistdio/u-snprintf.h \ + unistdio/u-sprintf.h unistdio/u-asnprintf.h \ + unistdio/u-asprintf.h unistdio/u-snprintf.h \ + unistdio/u-sprintf.h vasnprintf.c unistdio/u-vasprintf.h \ + unistdio/u-vsnprintf.h unistdio/u-vsprintf.h vasnprintf.c \ + unistdio/u-vasprintf.h unistdio/u-vsnprintf.h \ + unistdio/u-vsprintf.h unistdio/u-asnprintf.h \ + unistdio/u-asprintf.h printf-parse.c printf-parse.h \ + unistdio/u-printf-parse.h unistdio/u-snprintf.h \ + unistdio/u-sprintf.h vasnprintf.c unistdio/u-vasprintf.h \ + unistdio/u-vsnprintf.h unistdio/u-vsprintf.h unistr.h \ + unistr/u-cmp2.h unistr/u-cpy.h unistr/u-cpy-alloc.h \ + unistr/u-endswith.h unistr/u-move.h unistr/u-set.h \ + unistr/u-startswith.h unistr/u-stpcpy.h unistr/u-stpncpy.h \ + unistr/u-strcat.h unistr/u-strcoll.h unistr/u-strcpy.h \ + unistr/u-strcspn.h unistr/u-strdup.h unistr/u-strlen.h \ + unistr/u-strncat.h unistr/u-strncpy.h unistr/u-strnlen.h \ + unistr/u-strpbrk.h unistr/u-strspn.h unistr/u-strstr.h \ + unistr/u-strtok.h unistr/u-cmp2.h unistr/u-cpy.h \ + unistr/u-cpy-alloc.h unistr/u-endswith.h unistr/u-move.h \ + unistr/u-set.h unistr/u-startswith.h unistr/u-stpcpy.h \ + unistr/u-stpncpy.h unistr/u-strcat.h unistr/u-strcoll.h \ + unistr/u-strcpy.h unistr/u-strdup.h unistr/u-strlen.h \ + unistr/u-strncat.h unistr/u-strncpy.h unistr/u-strnlen.h \ + unistr/u-strstr.h unistr/u-strtok.h unistr/u-cmp2.h \ + unistr/u-cpy.h unistr/u-cpy-alloc.h unistr/u-endswith.h \ + unistr/u-move.h unistr/u-startswith.h unistr/u-stpcpy.h \ + unistr/u-stpncpy.h unistr/u-strcoll.h unistr/u-strcspn.h \ + unistr/u-strdup.h unistr/u-strnlen.h unistr/u-strpbrk.h \ + unistr/u-strspn.h unistr/u-strstr.h unistr/u-strtok.h \ + unitypes.h uniwbrk.h uniwbrk/wbrktable.h \ + uniwbrk/u-wordbreaks.h uniwbrk/u-wordbreaks.h \ + uniwbrk/u-wordbreaks.h uniwbrk/wbrkprop.h localcharset.h \ + uniwidth.h uniwidth/cjk.h wchar.in.h wctype.in.h wcwidth.c \ + stdint.mini.h libunistring.sym declared.sh libunistring.rc +BUILT_SOURCES = $(ALLOCA_H) configmake.h $(ERRNO_H) $(FLOAT_H) \ + $(ICONV_H) iconv_open-aix.h iconv_open-hpux.h \ + iconv_open-irix.h iconv_open-osf.h math.h $(STDBOOL_H) \ + $(STDINT_H) stdlib.h string.h unicase/locale-languages.h \ + unicase/special-casing-table.h unictype/pr_byname.h \ + unictype/scripts_byname.h uninorm/composition-table.h unistd.h \ + $(WCHAR_H) $(WCTYPE_H) unistring/stdbool.h unistring/stdint.h \ + unistring/localcharset.h unistring/iconveh.h +# We distribute it because declared.sh relies on GNU sed. +MOSTLYCLEANFILES = core *.stackdump core *.stackdump alloca.h \ + alloca.h-t errno.h errno.h-t float.h float.h-t iconv.h \ + iconv.h-t iconv_open-aix.h-t iconv_open-hpux.h-t \ + iconv_open-irix.h-t iconv_open-osf.h-t math.h math.h-t \ + stdbool.h stdbool.h-t stdint.h stdint.h-t stdlib.h stdlib.h-t \ + string.h string.h-t unicase/locale-languages.h-t \ + unicase/special-casing-table.h-t unictype/pr_byname.h-t \ + unictype/scripts_byname.h-t uninorm/composition-table.h-t \ + unistd.h unistd.h-t wchar.h wchar.h-t wctype.h wctype.h-t \ + unistring/stdbool.h-t unistring/stdint.h-t \ + unistring/localcharset.h-t unistring/iconveh.h-t \ + libunistring.sym-t config.h config.h-t $(am__append_4) +CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \ + ref-del.sed unistring/stdbool.h unistring/stdint.h \ + unistring/localcharset.h unistring/iconveh.h +DISTCLEANFILES = +MAINTAINERCLEANFILES = iconv_open-aix.h iconv_open-hpux.h \ + iconv_open-irix.h iconv_open-osf.h unicase/locale-languages.h \ + unicase/special-casing-table.h unictype/pr_byname.h \ + unictype/scripts_byname.h uninorm/composition-table.h \ + libunistring.sym +SUFFIXES = .sed .sin +lib_LTLIBRARIES = libunistring.la +nobase_include_HEADERS = \ + unitypes.h \ + unistr.h \ + uniconv.h \ + unistdio.h \ + uniname.h \ + unictype.h \ + uniwidth.h \ + uniwbrk.h \ + unilbrk.h \ + uninorm.h \ + unicase.h \ + unistring/inline.h + +noinst_HEADERS = \ + unistring-notinline.h + + +# Parametrization of the 'relocatable-lib-lgpl' module. +AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_builddir) -I$(top_srcdir) \ + -DIN_LIBUNISTRING -DDEPENDS_ON_LIBICONV=1 + +# Rules generated and collected by gnulib-tool. + +# Additional source files. +libunistring_la_SOURCES = c-ctype.h c-ctype.c c-strcase.h \ + c-strcasecmp.c c-strncasecmp.c fseterr.c localcharset.h \ + localcharset.c localename.c malloca.c mbchar.c mbiter.h \ + mbsnlen.c memcmp2.c memxfrm.c minmax.h printf-frexp.c \ + printf-frexpl.c size_max.h striconveh.h striconveh.c \ + striconveha.h striconveha.c unicase/cased.c \ + unicase/empty-prefix-context.c unicase/empty-suffix-context.c \ + unicase/ignorable.c unicase/locale-language.c \ + unicase/special-casing.c unicase/tocasefold.c \ + unicase/tolower.c unicase/totitle.c unicase/toupper.c \ + unicase/u16-casecmp.c unicase/u16-casecoll.c \ + unicase/u16-casefold.c unicase/u16-casemap.c \ + unicase/u16-casexfrm.c unicase/u16-ct-casefold.c \ + unicase/u16-ct-tolower.c unicase/u16-ct-totitle.c \ + unicase/u16-ct-toupper.c unicase/u16-is-cased.c \ + unicase/u16-is-casefolded.c unicase/u16-is-invariant.c \ + unicase/u16-is-lowercase.c unicase/u16-is-titlecase.c \ + unicase/u16-is-uppercase.c unicase/u16-tolower.c \ + unicase/u16-totitle.c unicase/u16-toupper.c \ + unicase/u32-casecmp.c unicase/u32-casecoll.c \ + unicase/u32-casefold.c unicase/u32-casemap.c \ + unicase/u32-casexfrm.c unicase/u32-ct-casefold.c \ + unicase/u32-ct-tolower.c unicase/u32-ct-totitle.c \ + unicase/u32-ct-toupper.c unicase/u32-is-cased.c \ + unicase/u32-is-casefolded.c unicase/u32-is-invariant.c \ + unicase/u32-is-lowercase.c unicase/u32-is-titlecase.c \ + unicase/u32-is-uppercase.c unicase/u32-tolower.c \ + unicase/u32-totitle.c unicase/u32-toupper.c \ + unicase/u8-casecmp.c unicase/u8-casecoll.c \ + unicase/u8-casefold.c unicase/u8-casemap.c \ + unicase/u8-casexfrm.c unicase/u8-ct-casefold.c \ + unicase/u8-ct-tolower.c unicase/u8-ct-totitle.c \ + unicase/u8-ct-toupper.c unicase/u8-is-cased.c \ + unicase/u8-is-casefolded.c unicase/u8-is-invariant.c \ + unicase/u8-is-lowercase.c unicase/u8-is-titlecase.c \ + unicase/u8-is-uppercase.c unicase/u8-tolower.c \ + unicase/u8-totitle.c unicase/u8-toupper.c \ + unicase/ulc-casecmp.c unicase/ulc-casecoll.c \ + unicase/ulc-casexfrm.c uniconv/u16-conv-from-enc.c \ + uniconv/u16-conv-to-enc.c uniconv/u16-strconv-from-enc.c \ + uniconv/u16-strconv-from-locale.c uniconv/u16-strconv-to-enc.c \ + uniconv/u16-strconv-to-locale.c uniconv/u32-conv-from-enc.c \ + uniconv/u32-conv-to-enc.c uniconv/u32-strconv-from-enc.c \ + uniconv/u32-strconv-from-locale.c uniconv/u32-strconv-to-enc.c \ + uniconv/u32-strconv-to-locale.c uniconv/u8-conv-from-enc.c \ + uniconv/u8-conv-to-enc.c uniconv/u8-strconv-from-enc.c \ + uniconv/u8-strconv-from-locale.c uniconv/u8-strconv-to-enc.c \ + uniconv/u8-strconv-to-locale.c unictype/bidi_byname.c \ + unictype/bidi_name.c unictype/bidi_of.c unictype/bidi_test.c \ + unictype/blocks.c unictype/block_test.c unictype/categ_C.c \ + unictype/categ_Cc.c unictype/categ_Cf.c unictype/categ_Cn.c \ + unictype/categ_Co.c unictype/categ_Cs.c unictype/categ_L.c \ + unictype/categ_Ll.c unictype/categ_Lm.c unictype/categ_Lo.c \ + unictype/categ_Lt.c unictype/categ_Lu.c unictype/categ_M.c \ + unictype/categ_Mc.c unictype/categ_Me.c unictype/categ_Mn.c \ + unictype/categ_N.c unictype/categ_Nd.c unictype/categ_Nl.c \ + unictype/categ_No.c unictype/categ_P.c unictype/categ_Pc.c \ + unictype/categ_Pd.c unictype/categ_Pe.c unictype/categ_Pf.c \ + unictype/categ_Pi.c unictype/categ_Po.c unictype/categ_Ps.c \ + unictype/categ_S.c unictype/categ_Sc.c unictype/categ_Sk.c \ + unictype/categ_Sm.c unictype/categ_So.c unictype/categ_Z.c \ + unictype/categ_Zl.c unictype/categ_Zp.c unictype/categ_Zs.c \ + unictype/categ_and.c unictype/categ_and_not.c \ + unictype/categ_byname.c unictype/categ_name.c \ + unictype/categ_none.c unictype/categ_of.c unictype/categ_or.c \ + unictype/categ_test.c unictype/combining.c \ + unictype/ctype_alnum.c unictype/ctype_alpha.c \ + unictype/ctype_blank.c unictype/ctype_cntrl.c \ + unictype/ctype_digit.c unictype/ctype_graph.c \ + unictype/ctype_lower.c unictype/ctype_print.c \ + unictype/ctype_punct.c unictype/ctype_space.c \ + unictype/ctype_upper.c unictype/ctype_xdigit.c \ + unictype/decdigit.c unictype/digit.c unictype/mirror.c \ + unictype/numeric.c unictype/pr_alphabetic.c \ + unictype/pr_ascii_hex_digit.c unictype/pr_bidi_arabic_digit.c \ + unictype/pr_bidi_arabic_right_to_left.c \ + unictype/pr_bidi_block_separator.c \ + unictype/pr_bidi_boundary_neutral.c \ + unictype/pr_bidi_common_separator.c unictype/pr_bidi_control.c \ + unictype/pr_bidi_embedding_or_override.c \ + unictype/pr_bidi_eur_num_separator.c \ + unictype/pr_bidi_eur_num_terminator.c \ + unictype/pr_bidi_european_digit.c \ + unictype/pr_bidi_hebrew_right_to_left.c \ + unictype/pr_bidi_left_to_right.c \ + unictype/pr_bidi_non_spacing_mark.c \ + unictype/pr_bidi_other_neutral.c unictype/pr_bidi_pdf.c \ + unictype/pr_bidi_segment_separator.c \ + unictype/pr_bidi_whitespace.c unictype/pr_byname.c \ + unictype/pr_combining.c unictype/pr_composite.c \ + unictype/pr_currency_symbol.c unictype/pr_dash.c \ + unictype/pr_decimal_digit.c \ + unictype/pr_default_ignorable_code_point.c \ + unictype/pr_deprecated.c unictype/pr_diacritic.c \ + unictype/pr_extender.c unictype/pr_format_control.c \ + unictype/pr_grapheme_base.c unictype/pr_grapheme_extend.c \ + unictype/pr_grapheme_link.c unictype/pr_hex_digit.c \ + unictype/pr_hyphen.c unictype/pr_id_continue.c \ + unictype/pr_id_start.c unictype/pr_ideographic.c \ + unictype/pr_ids_binary_operator.c \ + unictype/pr_ids_trinary_operator.c \ + unictype/pr_ignorable_control.c unictype/pr_iso_control.c \ + unictype/pr_join_control.c unictype/pr_left_of_pair.c \ + unictype/pr_line_separator.c \ + unictype/pr_logical_order_exception.c unictype/pr_lowercase.c \ + unictype/pr_math.c unictype/pr_non_break.c \ + unictype/pr_not_a_character.c unictype/pr_numeric.c \ + unictype/pr_other_alphabetic.c \ + unictype/pr_other_default_ignorable_code_point.c \ + unictype/pr_other_grapheme_extend.c \ + unictype/pr_other_id_continue.c unictype/pr_other_id_start.c \ + unictype/pr_other_lowercase.c unictype/pr_other_math.c \ + unictype/pr_other_uppercase.c unictype/pr_paired_punctuation.c \ + unictype/pr_paragraph_separator.c unictype/pr_pattern_syntax.c \ + unictype/pr_pattern_white_space.c unictype/pr_private_use.c \ + unictype/pr_punctuation.c unictype/pr_quotation_mark.c \ + unictype/pr_radical.c unictype/pr_sentence_terminal.c \ + unictype/pr_soft_dotted.c unictype/pr_space.c \ + unictype/pr_terminal_punctuation.c unictype/pr_test.c \ + unictype/pr_titlecase.c unictype/pr_unassigned_code_value.c \ + unictype/pr_unified_ideograph.c unictype/pr_uppercase.c \ + unictype/pr_variation_selector.c unictype/pr_white_space.c \ + unictype/pr_xid_continue.c unictype/pr_xid_start.c \ + unictype/pr_zero_width.c unictype/scripts.c \ + unictype/sy_c_ident.c unictype/sy_c_whitespace.c \ + unictype/sy_java_ident.c unictype/sy_java_whitespace.c \ + unilbrk/lbrktables.c unilbrk/u16-possible-linebreaks.c \ + unilbrk/u16-width-linebreaks.c \ + unilbrk/u32-possible-linebreaks.c \ + unilbrk/u32-width-linebreaks.c \ + unilbrk/u8-possible-linebreaks.c unilbrk/u8-width-linebreaks.c \ + unilbrk/ulc-common.c unilbrk/ulc-possible-linebreaks.c \ + unilbrk/ulc-width-linebreaks.c uniname/uniname.c \ + uninorm/canonical-decomposition.c \ + uninorm/compat-decomposition.c uninorm/composition.c \ + uninorm/decompose-internal.c uninorm/decomposing-form.c \ + uninorm/decomposition.c uninorm/decomposition-table.c \ + uninorm/uninorm-filter.c uninorm/nfc.c uninorm/nfd.c \ + uninorm/nfkc.c uninorm/nfkd.c uninorm/u16-normalize.c \ + uninorm/u16-normcmp.c uninorm/u16-normcoll.c \ + uninorm/u16-normxfrm.c uninorm/u32-normalize.c \ + uninorm/u32-normcmp.c uninorm/u32-normcoll.c \ + uninorm/u32-normxfrm.c uninorm/u8-normalize.c \ + uninorm/u8-normcmp.c uninorm/u8-normcoll.c \ + uninorm/u8-normxfrm.c unistdio/u-printf-args.c \ + unistdio/u16-asnprintf.c unistdio/u16-asprintf.c \ + unistdio/u16-printf-parse.c unistdio/u16-snprintf.c \ + unistdio/u16-sprintf.c unistdio/u16-u16-asnprintf.c \ + unistdio/u16-u16-asprintf.c unistdio/u16-u16-snprintf.c \ + unistdio/u16-u16-sprintf.c unistdio/u16-u16-vasnprintf.c \ + unistdio/u16-u16-vasprintf.c unistdio/u16-u16-vsnprintf.c \ + unistdio/u16-u16-vsprintf.c unistdio/u16-vasnprintf.c \ + unistdio/u16-vasprintf.c unistdio/u16-vsnprintf.c \ + unistdio/u16-vsprintf.c unistdio/u32-asnprintf.c \ + unistdio/u32-asprintf.c unistdio/u32-printf-parse.c \ + unistdio/u32-snprintf.c unistdio/u32-sprintf.c \ + unistdio/u32-u32-asnprintf.c unistdio/u32-u32-asprintf.c \ + unistdio/u32-u32-snprintf.c unistdio/u32-u32-sprintf.c \ + unistdio/u32-u32-vasnprintf.c unistdio/u32-u32-vasprintf.c \ + unistdio/u32-u32-vsnprintf.c unistdio/u32-u32-vsprintf.c \ + unistdio/u32-vasnprintf.c unistdio/u32-vasprintf.c \ + unistdio/u32-vsnprintf.c unistdio/u32-vsprintf.c \ + unistdio/u8-asnprintf.c unistdio/u8-asprintf.c \ + unistdio/u8-printf-parse.c unistdio/u8-snprintf.c \ + unistdio/u8-sprintf.c unistdio/u8-u8-asnprintf.c \ + unistdio/u8-u8-asprintf.c unistdio/u8-u8-snprintf.c \ + unistdio/u8-u8-sprintf.c unistdio/u8-u8-vasnprintf.c \ + unistdio/u8-u8-vasprintf.c unistdio/u8-u8-vsnprintf.c \ + unistdio/u8-u8-vsprintf.c unistdio/u8-vasnprintf.c \ + unistdio/u8-vasprintf.c unistdio/u8-vsnprintf.c \ + unistdio/u8-vsprintf.c unistdio/ulc-asnprintf.c \ + unistdio/ulc-asprintf.c unistdio/ulc-fprintf.c \ + unistdio/ulc-printf-parse.c unistdio/ulc-snprintf.c \ + unistdio/ulc-sprintf.c unistdio/ulc-vasnprintf.c \ + unistdio/ulc-vasprintf.c unistdio/ulc-vfprintf.c \ + unistdio/ulc-vsnprintf.c unistdio/ulc-vsprintf.c \ + unistr/u16-check.c unistr/u16-chr.c unistr/u16-cmp.c \ + unistr/u16-cmp2.c unistr/u16-cpy.c unistr/u16-cpy-alloc.c \ + unistr/u16-endswith.c unistr/u16-mblen.c unistr/u16-mbsnlen.c \ + unistr/u16-mbtouc.c unistr/u16-mbtouc-aux.c \ + unistr/u16-mbtouc-unsafe.c unistr/u16-mbtouc-unsafe-aux.c \ + unistr/u16-mbtoucr.c unistr/u16-move.c unistr/u16-next.c \ + unistr/u16-prev.c unistr/u16-set.c unistr/u16-startswith.c \ + unistr/u16-stpcpy.c unistr/u16-stpncpy.c unistr/u16-strcat.c \ + unistr/u16-strchr.c unistr/u16-strcmp.c unistr/u16-strcoll.c \ + unistr/u16-strcpy.c unistr/u16-strcspn.c unistr/u16-strdup.c \ + unistr/u16-strlen.c unistr/u16-strmblen.c \ + unistr/u16-strmbtouc.c unistr/u16-strncat.c \ + unistr/u16-strncmp.c unistr/u16-strncpy.c unistr/u16-strnlen.c \ + unistr/u16-strpbrk.c unistr/u16-strrchr.c unistr/u16-strspn.c \ + unistr/u16-strstr.c unistr/u16-strtok.c unistr/u16-to-u32.c \ + unistr/u16-to-u8.c unistr/u16-uctomb.c unistr/u16-uctomb-aux.c \ + unistr/u32-check.c unistr/u32-chr.c unistr/u32-cmp.c \ + unistr/u32-cmp2.c unistr/u32-cpy.c unistr/u32-cpy-alloc.c \ + unistr/u32-endswith.c unistr/u32-mblen.c unistr/u32-mbsnlen.c \ + unistr/u32-mbtouc.c unistr/u32-mbtouc-unsafe.c \ + unistr/u32-mbtoucr.c unistr/u32-move.c unistr/u32-next.c \ + unistr/u32-prev.c unistr/u32-set.c unistr/u32-startswith.c \ + unistr/u32-stpcpy.c unistr/u32-stpncpy.c unistr/u32-strcat.c \ + unistr/u32-strchr.c unistr/u32-strcmp.c unistr/u32-strcoll.c \ + unistr/u32-strcpy.c unistr/u32-strcspn.c unistr/u32-strdup.c \ + unistr/u32-strlen.c unistr/u32-strmblen.c \ + unistr/u32-strmbtouc.c unistr/u32-strncat.c \ + unistr/u32-strncmp.c unistr/u32-strncpy.c unistr/u32-strnlen.c \ + unistr/u32-strpbrk.c unistr/u32-strrchr.c unistr/u32-strspn.c \ + unistr/u32-strstr.c unistr/u32-strtok.c unistr/u32-to-u16.c \ + unistr/u32-to-u8.c unistr/u32-uctomb.c unistr/u8-check.c \ + unistr/u8-chr.c unistr/u8-cmp.c unistr/u8-cmp2.c \ + unistr/u8-cpy.c unistr/u8-cpy-alloc.c unistr/u8-endswith.c \ + unistr/u8-mblen.c unistr/u8-mbsnlen.c unistr/u8-mbtouc.c \ + unistr/u8-mbtouc-aux.c unistr/u8-mbtouc-unsafe.c \ + unistr/u8-mbtouc-unsafe-aux.c unistr/u8-mbtoucr.c \ + unistr/u8-move.c unistr/u8-next.c unistr/u8-prev.c \ + unistr/u8-set.c unistr/u8-startswith.c unistr/u8-stpcpy.c \ + unistr/u8-stpncpy.c unistr/u8-strcat.c unistr/u8-strchr.c \ + unistr/u8-strcmp.c unistr/u8-strcoll.c unistr/u8-strcpy.c \ + unistr/u8-strcspn.c unistr/u8-strdup.c unistr/u8-strlen.c \ + unistr/u8-strmblen.c unistr/u8-strmbtouc.c unistr/u8-strncat.c \ + unistr/u8-strncmp.c unistr/u8-strncpy.c unistr/u8-strnlen.c \ + unistr/u8-strpbrk.c unistr/u8-strrchr.c unistr/u8-strspn.c \ + unistr/u8-strstr.c unistr/u8-strtok.c unistr/u8-to-u16.c \ + unistr/u8-to-u32.c unistr/u8-uctomb.c unistr/u8-uctomb-aux.c \ + uniwbrk/wbrktable.c uniwbrk/u16-wordbreaks.c \ + uniwbrk/u32-wordbreaks.c uniwbrk/u8-wordbreaks.c \ + uniwbrk/ulc-wordbreaks.c uniwbrk/wordbreak-property.c \ + uniwidth/u16-strwidth.c uniwidth/u16-width.c \ + uniwidth/u32-strwidth.c uniwidth/u32-width.c \ + uniwidth/u8-strwidth.c uniwidth/u8-width.c uniwidth/width.c \ + verify.h xsize.h version.c $(am__append_2) +libunistring_la_LIBADD = $(gl_LTLIBOBJS) $(WOE32_LIBADD) +libunistring_la_DEPENDENCIES = $(gl_LTLIBOBJS) $(WOE32_LIBADD) +EXTRA_libunistring_la_SOURCES = frexp.c frexpl.c getpagesize.c \ + iconv_open.c isnan.c isnand.c isnan.c isnanf.c isnan.c \ + isnanl.c malloc.c mbrtowc.c mbsinit.c memchr.c printf-frexp.c \ + relocatable.c signbitd.c signbitf.c signbitl.c printf-args.c \ + printf-parse.c vasnprintf.c vasnprintf.c printf-parse.c \ + vasnprintf.c vasnprintf.c printf-parse.c vasnprintf.c \ + vasnprintf.c printf-parse.c vasnprintf.c wcwidth.c + +# How to build libunistring.la. +libunistring_la_LDFLAGS = $(AM_LDFLAGS) $(am__append_1) \ + $(am__append_3) -version-info \ + $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) -rpath $(libdir) \ + @INTL_MACOSX_LIBS@ -no-undefined +GPERF = gperf +LINK_WARNING_H = $(top_srcdir)/build-aux/link-warning.h +charset_alias = $(DESTDIR)$(libdir)/charset.alias +charset_tmp = $(DESTDIR)$(libdir)/charset.tmp + +# The and replacements that can be installed. + +# localcharset.h is not public, but its contents is documented. + +# iconveh.h is not public, but its contents is documented. + +# unistring/version.h is public. + +# unistring/woe32dll.h is not public, but is included by other header files. +nobase_nodist_include_HEADERS = unistring/stdbool.h unistring/stdint.h \ + unistring/localcharset.h unistring/iconveh.h \ + unistring/version.h unistring/woe32dll.h + +# Directories that contain some CLEANFILES. +CLEANDIRS = +CLEANDIRS_NOT_IN_SRCDIR = unistring + +# List of header files that get installed and that declare 'extern' symbols. +HEADERS_WITH_EXTERNS = \ + unitypes.h \ + unistr.h \ + uniconv.h \ + unistdio.h \ + uniname.h \ + unictype.h \ + uniwidth.h \ + uniwbrk.h \ + unilbrk.h \ + uninorm.h \ + unicase.h \ + localcharset.h \ + iconveh.h \ + unistring/version.in.h + +@WOE32_FALSE@WOE32_LIBADD = +@WOE32_TRUE@WOE32_LIBADD = libunistring.res.lo + +# Libtool's library version information for libunistring. +# See the libtool documentation, section "Library interface versions". +LTV_CURRENT = 1 +LTV_REVISION = 0 +LTV_AGE = 1 +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .sed .sin .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.gnulib $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnits lib/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +exported.sh: $(top_builddir)/config.status $(srcdir)/exported.sh.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +unicase/$(am__dirstamp): + @$(MKDIR_P) unicase + @: > unicase/$(am__dirstamp) +unicase/cased.lo: unicase/$(am__dirstamp) +unicase/empty-prefix-context.lo: unicase/$(am__dirstamp) +unicase/empty-suffix-context.lo: unicase/$(am__dirstamp) +unicase/ignorable.lo: unicase/$(am__dirstamp) +unicase/locale-language.lo: unicase/$(am__dirstamp) +unicase/special-casing.lo: unicase/$(am__dirstamp) +unicase/tocasefold.lo: unicase/$(am__dirstamp) +unicase/tolower.lo: unicase/$(am__dirstamp) +unicase/totitle.lo: unicase/$(am__dirstamp) +unicase/toupper.lo: unicase/$(am__dirstamp) +unicase/u16-casecmp.lo: unicase/$(am__dirstamp) +unicase/u16-casecoll.lo: unicase/$(am__dirstamp) +unicase/u16-casefold.lo: unicase/$(am__dirstamp) +unicase/u16-casemap.lo: unicase/$(am__dirstamp) +unicase/u16-casexfrm.lo: unicase/$(am__dirstamp) +unicase/u16-ct-casefold.lo: unicase/$(am__dirstamp) +unicase/u16-ct-tolower.lo: unicase/$(am__dirstamp) +unicase/u16-ct-totitle.lo: unicase/$(am__dirstamp) +unicase/u16-ct-toupper.lo: unicase/$(am__dirstamp) +unicase/u16-is-cased.lo: unicase/$(am__dirstamp) +unicase/u16-is-casefolded.lo: unicase/$(am__dirstamp) +unicase/u16-is-invariant.lo: unicase/$(am__dirstamp) +unicase/u16-is-lowercase.lo: unicase/$(am__dirstamp) +unicase/u16-is-titlecase.lo: unicase/$(am__dirstamp) +unicase/u16-is-uppercase.lo: unicase/$(am__dirstamp) +unicase/u16-tolower.lo: unicase/$(am__dirstamp) +unicase/u16-totitle.lo: unicase/$(am__dirstamp) +unicase/u16-toupper.lo: unicase/$(am__dirstamp) +unicase/u32-casecmp.lo: unicase/$(am__dirstamp) +unicase/u32-casecoll.lo: unicase/$(am__dirstamp) +unicase/u32-casefold.lo: unicase/$(am__dirstamp) +unicase/u32-casemap.lo: unicase/$(am__dirstamp) +unicase/u32-casexfrm.lo: unicase/$(am__dirstamp) +unicase/u32-ct-casefold.lo: unicase/$(am__dirstamp) +unicase/u32-ct-tolower.lo: unicase/$(am__dirstamp) +unicase/u32-ct-totitle.lo: unicase/$(am__dirstamp) +unicase/u32-ct-toupper.lo: unicase/$(am__dirstamp) +unicase/u32-is-cased.lo: unicase/$(am__dirstamp) +unicase/u32-is-casefolded.lo: unicase/$(am__dirstamp) +unicase/u32-is-invariant.lo: unicase/$(am__dirstamp) +unicase/u32-is-lowercase.lo: unicase/$(am__dirstamp) +unicase/u32-is-titlecase.lo: unicase/$(am__dirstamp) +unicase/u32-is-uppercase.lo: unicase/$(am__dirstamp) +unicase/u32-tolower.lo: unicase/$(am__dirstamp) +unicase/u32-totitle.lo: unicase/$(am__dirstamp) +unicase/u32-toupper.lo: unicase/$(am__dirstamp) +unicase/u8-casecmp.lo: unicase/$(am__dirstamp) +unicase/u8-casecoll.lo: unicase/$(am__dirstamp) +unicase/u8-casefold.lo: unicase/$(am__dirstamp) +unicase/u8-casemap.lo: unicase/$(am__dirstamp) +unicase/u8-casexfrm.lo: unicase/$(am__dirstamp) +unicase/u8-ct-casefold.lo: unicase/$(am__dirstamp) +unicase/u8-ct-tolower.lo: unicase/$(am__dirstamp) +unicase/u8-ct-totitle.lo: unicase/$(am__dirstamp) +unicase/u8-ct-toupper.lo: unicase/$(am__dirstamp) +unicase/u8-is-cased.lo: unicase/$(am__dirstamp) +unicase/u8-is-casefolded.lo: unicase/$(am__dirstamp) +unicase/u8-is-invariant.lo: unicase/$(am__dirstamp) +unicase/u8-is-lowercase.lo: unicase/$(am__dirstamp) +unicase/u8-is-titlecase.lo: unicase/$(am__dirstamp) +unicase/u8-is-uppercase.lo: unicase/$(am__dirstamp) +unicase/u8-tolower.lo: unicase/$(am__dirstamp) +unicase/u8-totitle.lo: unicase/$(am__dirstamp) +unicase/u8-toupper.lo: unicase/$(am__dirstamp) +unicase/ulc-casecmp.lo: unicase/$(am__dirstamp) +unicase/ulc-casecoll.lo: unicase/$(am__dirstamp) +unicase/ulc-casexfrm.lo: unicase/$(am__dirstamp) +uniconv/$(am__dirstamp): + @$(MKDIR_P) uniconv + @: > uniconv/$(am__dirstamp) +uniconv/u16-conv-from-enc.lo: uniconv/$(am__dirstamp) +uniconv/u16-conv-to-enc.lo: uniconv/$(am__dirstamp) +uniconv/u16-strconv-from-enc.lo: uniconv/$(am__dirstamp) +uniconv/u16-strconv-from-locale.lo: uniconv/$(am__dirstamp) +uniconv/u16-strconv-to-enc.lo: uniconv/$(am__dirstamp) +uniconv/u16-strconv-to-locale.lo: uniconv/$(am__dirstamp) +uniconv/u32-conv-from-enc.lo: uniconv/$(am__dirstamp) +uniconv/u32-conv-to-enc.lo: uniconv/$(am__dirstamp) +uniconv/u32-strconv-from-enc.lo: uniconv/$(am__dirstamp) +uniconv/u32-strconv-from-locale.lo: uniconv/$(am__dirstamp) +uniconv/u32-strconv-to-enc.lo: uniconv/$(am__dirstamp) +uniconv/u32-strconv-to-locale.lo: uniconv/$(am__dirstamp) +uniconv/u8-conv-from-enc.lo: uniconv/$(am__dirstamp) +uniconv/u8-conv-to-enc.lo: uniconv/$(am__dirstamp) +uniconv/u8-strconv-from-enc.lo: uniconv/$(am__dirstamp) +uniconv/u8-strconv-from-locale.lo: uniconv/$(am__dirstamp) +uniconv/u8-strconv-to-enc.lo: uniconv/$(am__dirstamp) +uniconv/u8-strconv-to-locale.lo: uniconv/$(am__dirstamp) +unictype/$(am__dirstamp): + @$(MKDIR_P) unictype + @: > unictype/$(am__dirstamp) +unictype/bidi_byname.lo: unictype/$(am__dirstamp) +unictype/bidi_name.lo: unictype/$(am__dirstamp) +unictype/bidi_of.lo: unictype/$(am__dirstamp) +unictype/bidi_test.lo: unictype/$(am__dirstamp) +unictype/blocks.lo: unictype/$(am__dirstamp) +unictype/block_test.lo: unictype/$(am__dirstamp) +unictype/categ_C.lo: unictype/$(am__dirstamp) +unictype/categ_Cc.lo: unictype/$(am__dirstamp) +unictype/categ_Cf.lo: unictype/$(am__dirstamp) +unictype/categ_Cn.lo: unictype/$(am__dirstamp) +unictype/categ_Co.lo: unictype/$(am__dirstamp) +unictype/categ_Cs.lo: unictype/$(am__dirstamp) +unictype/categ_L.lo: unictype/$(am__dirstamp) +unictype/categ_Ll.lo: unictype/$(am__dirstamp) +unictype/categ_Lm.lo: unictype/$(am__dirstamp) +unictype/categ_Lo.lo: unictype/$(am__dirstamp) +unictype/categ_Lt.lo: unictype/$(am__dirstamp) +unictype/categ_Lu.lo: unictype/$(am__dirstamp) +unictype/categ_M.lo: unictype/$(am__dirstamp) +unictype/categ_Mc.lo: unictype/$(am__dirstamp) +unictype/categ_Me.lo: unictype/$(am__dirstamp) +unictype/categ_Mn.lo: unictype/$(am__dirstamp) +unictype/categ_N.lo: unictype/$(am__dirstamp) +unictype/categ_Nd.lo: unictype/$(am__dirstamp) +unictype/categ_Nl.lo: unictype/$(am__dirstamp) +unictype/categ_No.lo: unictype/$(am__dirstamp) +unictype/categ_P.lo: unictype/$(am__dirstamp) +unictype/categ_Pc.lo: unictype/$(am__dirstamp) +unictype/categ_Pd.lo: unictype/$(am__dirstamp) +unictype/categ_Pe.lo: unictype/$(am__dirstamp) +unictype/categ_Pf.lo: unictype/$(am__dirstamp) +unictype/categ_Pi.lo: unictype/$(am__dirstamp) +unictype/categ_Po.lo: unictype/$(am__dirstamp) +unictype/categ_Ps.lo: unictype/$(am__dirstamp) +unictype/categ_S.lo: unictype/$(am__dirstamp) +unictype/categ_Sc.lo: unictype/$(am__dirstamp) +unictype/categ_Sk.lo: unictype/$(am__dirstamp) +unictype/categ_Sm.lo: unictype/$(am__dirstamp) +unictype/categ_So.lo: unictype/$(am__dirstamp) +unictype/categ_Z.lo: unictype/$(am__dirstamp) +unictype/categ_Zl.lo: unictype/$(am__dirstamp) +unictype/categ_Zp.lo: unictype/$(am__dirstamp) +unictype/categ_Zs.lo: unictype/$(am__dirstamp) +unictype/categ_and.lo: unictype/$(am__dirstamp) +unictype/categ_and_not.lo: unictype/$(am__dirstamp) +unictype/categ_byname.lo: unictype/$(am__dirstamp) +unictype/categ_name.lo: unictype/$(am__dirstamp) +unictype/categ_none.lo: unictype/$(am__dirstamp) +unictype/categ_of.lo: unictype/$(am__dirstamp) +unictype/categ_or.lo: unictype/$(am__dirstamp) +unictype/categ_test.lo: unictype/$(am__dirstamp) +unictype/combining.lo: unictype/$(am__dirstamp) +unictype/ctype_alnum.lo: unictype/$(am__dirstamp) +unictype/ctype_alpha.lo: unictype/$(am__dirstamp) +unictype/ctype_blank.lo: unictype/$(am__dirstamp) +unictype/ctype_cntrl.lo: unictype/$(am__dirstamp) +unictype/ctype_digit.lo: unictype/$(am__dirstamp) +unictype/ctype_graph.lo: unictype/$(am__dirstamp) +unictype/ctype_lower.lo: unictype/$(am__dirstamp) +unictype/ctype_print.lo: unictype/$(am__dirstamp) +unictype/ctype_punct.lo: unictype/$(am__dirstamp) +unictype/ctype_space.lo: unictype/$(am__dirstamp) +unictype/ctype_upper.lo: unictype/$(am__dirstamp) +unictype/ctype_xdigit.lo: unictype/$(am__dirstamp) +unictype/decdigit.lo: unictype/$(am__dirstamp) +unictype/digit.lo: unictype/$(am__dirstamp) +unictype/mirror.lo: unictype/$(am__dirstamp) +unictype/numeric.lo: unictype/$(am__dirstamp) +unictype/pr_alphabetic.lo: unictype/$(am__dirstamp) +unictype/pr_ascii_hex_digit.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_arabic_digit.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_arabic_right_to_left.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_block_separator.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_boundary_neutral.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_common_separator.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_control.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_embedding_or_override.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_eur_num_separator.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_eur_num_terminator.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_european_digit.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_hebrew_right_to_left.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_left_to_right.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_non_spacing_mark.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_other_neutral.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_pdf.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_segment_separator.lo: unictype/$(am__dirstamp) +unictype/pr_bidi_whitespace.lo: unictype/$(am__dirstamp) +unictype/pr_byname.lo: unictype/$(am__dirstamp) +unictype/pr_combining.lo: unictype/$(am__dirstamp) +unictype/pr_composite.lo: unictype/$(am__dirstamp) +unictype/pr_currency_symbol.lo: unictype/$(am__dirstamp) +unictype/pr_dash.lo: unictype/$(am__dirstamp) +unictype/pr_decimal_digit.lo: unictype/$(am__dirstamp) +unictype/pr_default_ignorable_code_point.lo: unictype/$(am__dirstamp) +unictype/pr_deprecated.lo: unictype/$(am__dirstamp) +unictype/pr_diacritic.lo: unictype/$(am__dirstamp) +unictype/pr_extender.lo: unictype/$(am__dirstamp) +unictype/pr_format_control.lo: unictype/$(am__dirstamp) +unictype/pr_grapheme_base.lo: unictype/$(am__dirstamp) +unictype/pr_grapheme_extend.lo: unictype/$(am__dirstamp) +unictype/pr_grapheme_link.lo: unictype/$(am__dirstamp) +unictype/pr_hex_digit.lo: unictype/$(am__dirstamp) +unictype/pr_hyphen.lo: unictype/$(am__dirstamp) +unictype/pr_id_continue.lo: unictype/$(am__dirstamp) +unictype/pr_id_start.lo: unictype/$(am__dirstamp) +unictype/pr_ideographic.lo: unictype/$(am__dirstamp) +unictype/pr_ids_binary_operator.lo: unictype/$(am__dirstamp) +unictype/pr_ids_trinary_operator.lo: unictype/$(am__dirstamp) +unictype/pr_ignorable_control.lo: unictype/$(am__dirstamp) +unictype/pr_iso_control.lo: unictype/$(am__dirstamp) +unictype/pr_join_control.lo: unictype/$(am__dirstamp) +unictype/pr_left_of_pair.lo: unictype/$(am__dirstamp) +unictype/pr_line_separator.lo: unictype/$(am__dirstamp) +unictype/pr_logical_order_exception.lo: unictype/$(am__dirstamp) +unictype/pr_lowercase.lo: unictype/$(am__dirstamp) +unictype/pr_math.lo: unictype/$(am__dirstamp) +unictype/pr_non_break.lo: unictype/$(am__dirstamp) +unictype/pr_not_a_character.lo: unictype/$(am__dirstamp) +unictype/pr_numeric.lo: unictype/$(am__dirstamp) +unictype/pr_other_alphabetic.lo: unictype/$(am__dirstamp) +unictype/pr_other_default_ignorable_code_point.lo: \ + unictype/$(am__dirstamp) +unictype/pr_other_grapheme_extend.lo: unictype/$(am__dirstamp) +unictype/pr_other_id_continue.lo: unictype/$(am__dirstamp) +unictype/pr_other_id_start.lo: unictype/$(am__dirstamp) +unictype/pr_other_lowercase.lo: unictype/$(am__dirstamp) +unictype/pr_other_math.lo: unictype/$(am__dirstamp) +unictype/pr_other_uppercase.lo: unictype/$(am__dirstamp) +unictype/pr_paired_punctuation.lo: unictype/$(am__dirstamp) +unictype/pr_paragraph_separator.lo: unictype/$(am__dirstamp) +unictype/pr_pattern_syntax.lo: unictype/$(am__dirstamp) +unictype/pr_pattern_white_space.lo: unictype/$(am__dirstamp) +unictype/pr_private_use.lo: unictype/$(am__dirstamp) +unictype/pr_punctuation.lo: unictype/$(am__dirstamp) +unictype/pr_quotation_mark.lo: unictype/$(am__dirstamp) +unictype/pr_radical.lo: unictype/$(am__dirstamp) +unictype/pr_sentence_terminal.lo: unictype/$(am__dirstamp) +unictype/pr_soft_dotted.lo: unictype/$(am__dirstamp) +unictype/pr_space.lo: unictype/$(am__dirstamp) +unictype/pr_terminal_punctuation.lo: unictype/$(am__dirstamp) +unictype/pr_test.lo: unictype/$(am__dirstamp) +unictype/pr_titlecase.lo: unictype/$(am__dirstamp) +unictype/pr_unassigned_code_value.lo: unictype/$(am__dirstamp) +unictype/pr_unified_ideograph.lo: unictype/$(am__dirstamp) +unictype/pr_uppercase.lo: unictype/$(am__dirstamp) +unictype/pr_variation_selector.lo: unictype/$(am__dirstamp) +unictype/pr_white_space.lo: unictype/$(am__dirstamp) +unictype/pr_xid_continue.lo: unictype/$(am__dirstamp) +unictype/pr_xid_start.lo: unictype/$(am__dirstamp) +unictype/pr_zero_width.lo: unictype/$(am__dirstamp) +unictype/scripts.lo: unictype/$(am__dirstamp) +unictype/sy_c_ident.lo: unictype/$(am__dirstamp) +unictype/sy_c_whitespace.lo: unictype/$(am__dirstamp) +unictype/sy_java_ident.lo: unictype/$(am__dirstamp) +unictype/sy_java_whitespace.lo: unictype/$(am__dirstamp) +unilbrk/$(am__dirstamp): + @$(MKDIR_P) unilbrk + @: > unilbrk/$(am__dirstamp) +unilbrk/lbrktables.lo: unilbrk/$(am__dirstamp) +unilbrk/u16-possible-linebreaks.lo: unilbrk/$(am__dirstamp) +unilbrk/u16-width-linebreaks.lo: unilbrk/$(am__dirstamp) +unilbrk/u32-possible-linebreaks.lo: unilbrk/$(am__dirstamp) +unilbrk/u32-width-linebreaks.lo: unilbrk/$(am__dirstamp) +unilbrk/u8-possible-linebreaks.lo: unilbrk/$(am__dirstamp) +unilbrk/u8-width-linebreaks.lo: unilbrk/$(am__dirstamp) +unilbrk/ulc-common.lo: unilbrk/$(am__dirstamp) +unilbrk/ulc-possible-linebreaks.lo: unilbrk/$(am__dirstamp) +unilbrk/ulc-width-linebreaks.lo: unilbrk/$(am__dirstamp) +uniname/$(am__dirstamp): + @$(MKDIR_P) uniname + @: > uniname/$(am__dirstamp) +uniname/uniname.lo: uniname/$(am__dirstamp) +uninorm/$(am__dirstamp): + @$(MKDIR_P) uninorm + @: > uninorm/$(am__dirstamp) +uninorm/canonical-decomposition.lo: uninorm/$(am__dirstamp) +uninorm/compat-decomposition.lo: uninorm/$(am__dirstamp) +uninorm/composition.lo: uninorm/$(am__dirstamp) +uninorm/decompose-internal.lo: uninorm/$(am__dirstamp) +uninorm/decomposing-form.lo: uninorm/$(am__dirstamp) +uninorm/decomposition.lo: uninorm/$(am__dirstamp) +uninorm/decomposition-table.lo: uninorm/$(am__dirstamp) +uninorm/uninorm-filter.lo: uninorm/$(am__dirstamp) +uninorm/nfc.lo: uninorm/$(am__dirstamp) +uninorm/nfd.lo: uninorm/$(am__dirstamp) +uninorm/nfkc.lo: uninorm/$(am__dirstamp) +uninorm/nfkd.lo: uninorm/$(am__dirstamp) +uninorm/u16-normalize.lo: uninorm/$(am__dirstamp) +uninorm/u16-normcmp.lo: uninorm/$(am__dirstamp) +uninorm/u16-normcoll.lo: uninorm/$(am__dirstamp) +uninorm/u16-normxfrm.lo: uninorm/$(am__dirstamp) +uninorm/u32-normalize.lo: uninorm/$(am__dirstamp) +uninorm/u32-normcmp.lo: uninorm/$(am__dirstamp) +uninorm/u32-normcoll.lo: uninorm/$(am__dirstamp) +uninorm/u32-normxfrm.lo: uninorm/$(am__dirstamp) +uninorm/u8-normalize.lo: uninorm/$(am__dirstamp) +uninorm/u8-normcmp.lo: uninorm/$(am__dirstamp) +uninorm/u8-normcoll.lo: uninorm/$(am__dirstamp) +uninorm/u8-normxfrm.lo: uninorm/$(am__dirstamp) +unistdio/$(am__dirstamp): + @$(MKDIR_P) unistdio + @: > unistdio/$(am__dirstamp) +unistdio/u-printf-args.lo: unistdio/$(am__dirstamp) +unistdio/u16-asnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-asprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-printf-parse.lo: unistdio/$(am__dirstamp) +unistdio/u16-snprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-sprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-u16-asnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-u16-asprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-u16-snprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-u16-sprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-u16-vasnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-u16-vasprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-u16-vsnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-u16-vsprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-vasnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-vasprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-vsnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u16-vsprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-asnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-asprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-printf-parse.lo: unistdio/$(am__dirstamp) +unistdio/u32-snprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-sprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-u32-asnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-u32-asprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-u32-snprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-u32-sprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-u32-vasnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-u32-vasprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-u32-vsnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-u32-vsprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-vasnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-vasprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-vsnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u32-vsprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-asnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-asprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-printf-parse.lo: unistdio/$(am__dirstamp) +unistdio/u8-snprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-sprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-u8-asnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-u8-asprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-u8-snprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-u8-sprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-u8-vasnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-u8-vasprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-u8-vsnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-u8-vsprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-vasnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-vasprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-vsnprintf.lo: unistdio/$(am__dirstamp) +unistdio/u8-vsprintf.lo: unistdio/$(am__dirstamp) +unistdio/ulc-asnprintf.lo: unistdio/$(am__dirstamp) +unistdio/ulc-asprintf.lo: unistdio/$(am__dirstamp) +unistdio/ulc-fprintf.lo: unistdio/$(am__dirstamp) +unistdio/ulc-printf-parse.lo: unistdio/$(am__dirstamp) +unistdio/ulc-snprintf.lo: unistdio/$(am__dirstamp) +unistdio/ulc-sprintf.lo: unistdio/$(am__dirstamp) +unistdio/ulc-vasnprintf.lo: unistdio/$(am__dirstamp) +unistdio/ulc-vasprintf.lo: unistdio/$(am__dirstamp) +unistdio/ulc-vfprintf.lo: unistdio/$(am__dirstamp) +unistdio/ulc-vsnprintf.lo: unistdio/$(am__dirstamp) +unistdio/ulc-vsprintf.lo: unistdio/$(am__dirstamp) +unistr/$(am__dirstamp): + @$(MKDIR_P) unistr + @: > unistr/$(am__dirstamp) +unistr/u16-check.lo: unistr/$(am__dirstamp) +unistr/u16-chr.lo: unistr/$(am__dirstamp) +unistr/u16-cmp.lo: unistr/$(am__dirstamp) +unistr/u16-cmp2.lo: unistr/$(am__dirstamp) +unistr/u16-cpy.lo: unistr/$(am__dirstamp) +unistr/u16-cpy-alloc.lo: unistr/$(am__dirstamp) +unistr/u16-endswith.lo: unistr/$(am__dirstamp) +unistr/u16-mblen.lo: unistr/$(am__dirstamp) +unistr/u16-mbsnlen.lo: unistr/$(am__dirstamp) +unistr/u16-mbtouc.lo: unistr/$(am__dirstamp) +unistr/u16-mbtouc-aux.lo: unistr/$(am__dirstamp) +unistr/u16-mbtouc-unsafe.lo: unistr/$(am__dirstamp) +unistr/u16-mbtouc-unsafe-aux.lo: unistr/$(am__dirstamp) +unistr/u16-mbtoucr.lo: unistr/$(am__dirstamp) +unistr/u16-move.lo: unistr/$(am__dirstamp) +unistr/u16-next.lo: unistr/$(am__dirstamp) +unistr/u16-prev.lo: unistr/$(am__dirstamp) +unistr/u16-set.lo: unistr/$(am__dirstamp) +unistr/u16-startswith.lo: unistr/$(am__dirstamp) +unistr/u16-stpcpy.lo: unistr/$(am__dirstamp) +unistr/u16-stpncpy.lo: unistr/$(am__dirstamp) +unistr/u16-strcat.lo: unistr/$(am__dirstamp) +unistr/u16-strchr.lo: unistr/$(am__dirstamp) +unistr/u16-strcmp.lo: unistr/$(am__dirstamp) +unistr/u16-strcoll.lo: unistr/$(am__dirstamp) +unistr/u16-strcpy.lo: unistr/$(am__dirstamp) +unistr/u16-strcspn.lo: unistr/$(am__dirstamp) +unistr/u16-strdup.lo: unistr/$(am__dirstamp) +unistr/u16-strlen.lo: unistr/$(am__dirstamp) +unistr/u16-strmblen.lo: unistr/$(am__dirstamp) +unistr/u16-strmbtouc.lo: unistr/$(am__dirstamp) +unistr/u16-strncat.lo: unistr/$(am__dirstamp) +unistr/u16-strncmp.lo: unistr/$(am__dirstamp) +unistr/u16-strncpy.lo: unistr/$(am__dirstamp) +unistr/u16-strnlen.lo: unistr/$(am__dirstamp) +unistr/u16-strpbrk.lo: unistr/$(am__dirstamp) +unistr/u16-strrchr.lo: unistr/$(am__dirstamp) +unistr/u16-strspn.lo: unistr/$(am__dirstamp) +unistr/u16-strstr.lo: unistr/$(am__dirstamp) +unistr/u16-strtok.lo: unistr/$(am__dirstamp) +unistr/u16-to-u32.lo: unistr/$(am__dirstamp) +unistr/u16-to-u8.lo: unistr/$(am__dirstamp) +unistr/u16-uctomb.lo: unistr/$(am__dirstamp) +unistr/u16-uctomb-aux.lo: unistr/$(am__dirstamp) +unistr/u32-check.lo: unistr/$(am__dirstamp) +unistr/u32-chr.lo: unistr/$(am__dirstamp) +unistr/u32-cmp.lo: unistr/$(am__dirstamp) +unistr/u32-cmp2.lo: unistr/$(am__dirstamp) +unistr/u32-cpy.lo: unistr/$(am__dirstamp) +unistr/u32-cpy-alloc.lo: unistr/$(am__dirstamp) +unistr/u32-endswith.lo: unistr/$(am__dirstamp) +unistr/u32-mblen.lo: unistr/$(am__dirstamp) +unistr/u32-mbsnlen.lo: unistr/$(am__dirstamp) +unistr/u32-mbtouc.lo: unistr/$(am__dirstamp) +unistr/u32-mbtouc-unsafe.lo: unistr/$(am__dirstamp) +unistr/u32-mbtoucr.lo: unistr/$(am__dirstamp) +unistr/u32-move.lo: unistr/$(am__dirstamp) +unistr/u32-next.lo: unistr/$(am__dirstamp) +unistr/u32-prev.lo: unistr/$(am__dirstamp) +unistr/u32-set.lo: unistr/$(am__dirstamp) +unistr/u32-startswith.lo: unistr/$(am__dirstamp) +unistr/u32-stpcpy.lo: unistr/$(am__dirstamp) +unistr/u32-stpncpy.lo: unistr/$(am__dirstamp) +unistr/u32-strcat.lo: unistr/$(am__dirstamp) +unistr/u32-strchr.lo: unistr/$(am__dirstamp) +unistr/u32-strcmp.lo: unistr/$(am__dirstamp) +unistr/u32-strcoll.lo: unistr/$(am__dirstamp) +unistr/u32-strcpy.lo: unistr/$(am__dirstamp) +unistr/u32-strcspn.lo: unistr/$(am__dirstamp) +unistr/u32-strdup.lo: unistr/$(am__dirstamp) +unistr/u32-strlen.lo: unistr/$(am__dirstamp) +unistr/u32-strmblen.lo: unistr/$(am__dirstamp) +unistr/u32-strmbtouc.lo: unistr/$(am__dirstamp) +unistr/u32-strncat.lo: unistr/$(am__dirstamp) +unistr/u32-strncmp.lo: unistr/$(am__dirstamp) +unistr/u32-strncpy.lo: unistr/$(am__dirstamp) +unistr/u32-strnlen.lo: unistr/$(am__dirstamp) +unistr/u32-strpbrk.lo: unistr/$(am__dirstamp) +unistr/u32-strrchr.lo: unistr/$(am__dirstamp) +unistr/u32-strspn.lo: unistr/$(am__dirstamp) +unistr/u32-strstr.lo: unistr/$(am__dirstamp) +unistr/u32-strtok.lo: unistr/$(am__dirstamp) +unistr/u32-to-u16.lo: unistr/$(am__dirstamp) +unistr/u32-to-u8.lo: unistr/$(am__dirstamp) +unistr/u32-uctomb.lo: unistr/$(am__dirstamp) +unistr/u8-check.lo: unistr/$(am__dirstamp) +unistr/u8-chr.lo: unistr/$(am__dirstamp) +unistr/u8-cmp.lo: unistr/$(am__dirstamp) +unistr/u8-cmp2.lo: unistr/$(am__dirstamp) +unistr/u8-cpy.lo: unistr/$(am__dirstamp) +unistr/u8-cpy-alloc.lo: unistr/$(am__dirstamp) +unistr/u8-endswith.lo: unistr/$(am__dirstamp) +unistr/u8-mblen.lo: unistr/$(am__dirstamp) +unistr/u8-mbsnlen.lo: unistr/$(am__dirstamp) +unistr/u8-mbtouc.lo: unistr/$(am__dirstamp) +unistr/u8-mbtouc-aux.lo: unistr/$(am__dirstamp) +unistr/u8-mbtouc-unsafe.lo: unistr/$(am__dirstamp) +unistr/u8-mbtouc-unsafe-aux.lo: unistr/$(am__dirstamp) +unistr/u8-mbtoucr.lo: unistr/$(am__dirstamp) +unistr/u8-move.lo: unistr/$(am__dirstamp) +unistr/u8-next.lo: unistr/$(am__dirstamp) +unistr/u8-prev.lo: unistr/$(am__dirstamp) +unistr/u8-set.lo: unistr/$(am__dirstamp) +unistr/u8-startswith.lo: unistr/$(am__dirstamp) +unistr/u8-stpcpy.lo: unistr/$(am__dirstamp) +unistr/u8-stpncpy.lo: unistr/$(am__dirstamp) +unistr/u8-strcat.lo: unistr/$(am__dirstamp) +unistr/u8-strchr.lo: unistr/$(am__dirstamp) +unistr/u8-strcmp.lo: unistr/$(am__dirstamp) +unistr/u8-strcoll.lo: unistr/$(am__dirstamp) +unistr/u8-strcpy.lo: unistr/$(am__dirstamp) +unistr/u8-strcspn.lo: unistr/$(am__dirstamp) +unistr/u8-strdup.lo: unistr/$(am__dirstamp) +unistr/u8-strlen.lo: unistr/$(am__dirstamp) +unistr/u8-strmblen.lo: unistr/$(am__dirstamp) +unistr/u8-strmbtouc.lo: unistr/$(am__dirstamp) +unistr/u8-strncat.lo: unistr/$(am__dirstamp) +unistr/u8-strncmp.lo: unistr/$(am__dirstamp) +unistr/u8-strncpy.lo: unistr/$(am__dirstamp) +unistr/u8-strnlen.lo: unistr/$(am__dirstamp) +unistr/u8-strpbrk.lo: unistr/$(am__dirstamp) +unistr/u8-strrchr.lo: unistr/$(am__dirstamp) +unistr/u8-strspn.lo: unistr/$(am__dirstamp) +unistr/u8-strstr.lo: unistr/$(am__dirstamp) +unistr/u8-strtok.lo: unistr/$(am__dirstamp) +unistr/u8-to-u16.lo: unistr/$(am__dirstamp) +unistr/u8-to-u32.lo: unistr/$(am__dirstamp) +unistr/u8-uctomb.lo: unistr/$(am__dirstamp) +unistr/u8-uctomb-aux.lo: unistr/$(am__dirstamp) +uniwbrk/$(am__dirstamp): + @$(MKDIR_P) uniwbrk + @: > uniwbrk/$(am__dirstamp) +uniwbrk/wbrktable.lo: uniwbrk/$(am__dirstamp) +uniwbrk/u16-wordbreaks.lo: uniwbrk/$(am__dirstamp) +uniwbrk/u32-wordbreaks.lo: uniwbrk/$(am__dirstamp) +uniwbrk/u8-wordbreaks.lo: uniwbrk/$(am__dirstamp) +uniwbrk/ulc-wordbreaks.lo: uniwbrk/$(am__dirstamp) +uniwbrk/wordbreak-property.lo: uniwbrk/$(am__dirstamp) +uniwidth/$(am__dirstamp): + @$(MKDIR_P) uniwidth + @: > uniwidth/$(am__dirstamp) +uniwidth/u16-strwidth.lo: uniwidth/$(am__dirstamp) +uniwidth/u16-width.lo: uniwidth/$(am__dirstamp) +uniwidth/u32-strwidth.lo: uniwidth/$(am__dirstamp) +uniwidth/u32-width.lo: uniwidth/$(am__dirstamp) +uniwidth/u8-strwidth.lo: uniwidth/$(am__dirstamp) +uniwidth/u8-width.lo: uniwidth/$(am__dirstamp) +uniwidth/width.lo: uniwidth/$(am__dirstamp) +../woe32dll/$(am__dirstamp): + @$(MKDIR_P) ../woe32dll + @: > ../woe32dll/$(am__dirstamp) +../woe32dll/unistring-exports.lo: ../woe32dll/$(am__dirstamp) +libunistring.la: $(libunistring_la_OBJECTS) $(libunistring_la_DEPENDENCIES) + $(AM_V_CCLD)$(libunistring_la_LINK) -rpath $(libdir) $(libunistring_la_OBJECTS) $(libunistring_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f ../woe32dll/unistring-exports.$(OBJEXT) + -rm -f ../woe32dll/unistring-exports.lo + -rm -f unicase/cased.$(OBJEXT) + -rm -f unicase/cased.lo + -rm -f unicase/empty-prefix-context.$(OBJEXT) + -rm -f unicase/empty-prefix-context.lo + -rm -f unicase/empty-suffix-context.$(OBJEXT) + -rm -f unicase/empty-suffix-context.lo + -rm -f unicase/ignorable.$(OBJEXT) + -rm -f unicase/ignorable.lo + -rm -f unicase/locale-language.$(OBJEXT) + -rm -f unicase/locale-language.lo + -rm -f unicase/special-casing.$(OBJEXT) + -rm -f unicase/special-casing.lo + -rm -f unicase/tocasefold.$(OBJEXT) + -rm -f unicase/tocasefold.lo + -rm -f unicase/tolower.$(OBJEXT) + -rm -f unicase/tolower.lo + -rm -f unicase/totitle.$(OBJEXT) + -rm -f unicase/totitle.lo + -rm -f unicase/toupper.$(OBJEXT) + -rm -f unicase/toupper.lo + -rm -f unicase/u16-casecmp.$(OBJEXT) + -rm -f unicase/u16-casecmp.lo + -rm -f unicase/u16-casecoll.$(OBJEXT) + -rm -f unicase/u16-casecoll.lo + -rm -f unicase/u16-casefold.$(OBJEXT) + -rm -f unicase/u16-casefold.lo + -rm -f unicase/u16-casemap.$(OBJEXT) + -rm -f unicase/u16-casemap.lo + -rm -f unicase/u16-casexfrm.$(OBJEXT) + -rm -f unicase/u16-casexfrm.lo + -rm -f unicase/u16-ct-casefold.$(OBJEXT) + -rm -f unicase/u16-ct-casefold.lo + -rm -f unicase/u16-ct-tolower.$(OBJEXT) + -rm -f unicase/u16-ct-tolower.lo + -rm -f unicase/u16-ct-totitle.$(OBJEXT) + -rm -f unicase/u16-ct-totitle.lo + -rm -f unicase/u16-ct-toupper.$(OBJEXT) + -rm -f unicase/u16-ct-toupper.lo + -rm -f unicase/u16-is-cased.$(OBJEXT) + -rm -f unicase/u16-is-cased.lo + -rm -f unicase/u16-is-casefolded.$(OBJEXT) + -rm -f unicase/u16-is-casefolded.lo + -rm -f unicase/u16-is-invariant.$(OBJEXT) + -rm -f unicase/u16-is-invariant.lo + -rm -f unicase/u16-is-lowercase.$(OBJEXT) + -rm -f unicase/u16-is-lowercase.lo + -rm -f unicase/u16-is-titlecase.$(OBJEXT) + -rm -f unicase/u16-is-titlecase.lo + -rm -f unicase/u16-is-uppercase.$(OBJEXT) + -rm -f unicase/u16-is-uppercase.lo + -rm -f unicase/u16-tolower.$(OBJEXT) + -rm -f unicase/u16-tolower.lo + -rm -f unicase/u16-totitle.$(OBJEXT) + -rm -f unicase/u16-totitle.lo + -rm -f unicase/u16-toupper.$(OBJEXT) + -rm -f unicase/u16-toupper.lo + -rm -f unicase/u32-casecmp.$(OBJEXT) + -rm -f unicase/u32-casecmp.lo + -rm -f unicase/u32-casecoll.$(OBJEXT) + -rm -f unicase/u32-casecoll.lo + -rm -f unicase/u32-casefold.$(OBJEXT) + -rm -f unicase/u32-casefold.lo + -rm -f unicase/u32-casemap.$(OBJEXT) + -rm -f unicase/u32-casemap.lo + -rm -f unicase/u32-casexfrm.$(OBJEXT) + -rm -f unicase/u32-casexfrm.lo + -rm -f unicase/u32-ct-casefold.$(OBJEXT) + -rm -f unicase/u32-ct-casefold.lo + -rm -f unicase/u32-ct-tolower.$(OBJEXT) + -rm -f unicase/u32-ct-tolower.lo + -rm -f unicase/u32-ct-totitle.$(OBJEXT) + -rm -f unicase/u32-ct-totitle.lo + -rm -f unicase/u32-ct-toupper.$(OBJEXT) + -rm -f unicase/u32-ct-toupper.lo + -rm -f unicase/u32-is-cased.$(OBJEXT) + -rm -f unicase/u32-is-cased.lo + -rm -f unicase/u32-is-casefolded.$(OBJEXT) + -rm -f unicase/u32-is-casefolded.lo + -rm -f unicase/u32-is-invariant.$(OBJEXT) + -rm -f unicase/u32-is-invariant.lo + -rm -f unicase/u32-is-lowercase.$(OBJEXT) + -rm -f unicase/u32-is-lowercase.lo + -rm -f unicase/u32-is-titlecase.$(OBJEXT) + -rm -f unicase/u32-is-titlecase.lo + -rm -f unicase/u32-is-uppercase.$(OBJEXT) + -rm -f unicase/u32-is-uppercase.lo + -rm -f unicase/u32-tolower.$(OBJEXT) + -rm -f unicase/u32-tolower.lo + -rm -f unicase/u32-totitle.$(OBJEXT) + -rm -f unicase/u32-totitle.lo + -rm -f unicase/u32-toupper.$(OBJEXT) + -rm -f unicase/u32-toupper.lo + -rm -f unicase/u8-casecmp.$(OBJEXT) + -rm -f unicase/u8-casecmp.lo + -rm -f unicase/u8-casecoll.$(OBJEXT) + -rm -f unicase/u8-casecoll.lo + -rm -f unicase/u8-casefold.$(OBJEXT) + -rm -f unicase/u8-casefold.lo + -rm -f unicase/u8-casemap.$(OBJEXT) + -rm -f unicase/u8-casemap.lo + -rm -f unicase/u8-casexfrm.$(OBJEXT) + -rm -f unicase/u8-casexfrm.lo + -rm -f unicase/u8-ct-casefold.$(OBJEXT) + -rm -f unicase/u8-ct-casefold.lo + -rm -f unicase/u8-ct-tolower.$(OBJEXT) + -rm -f unicase/u8-ct-tolower.lo + -rm -f unicase/u8-ct-totitle.$(OBJEXT) + -rm -f unicase/u8-ct-totitle.lo + -rm -f unicase/u8-ct-toupper.$(OBJEXT) + -rm -f unicase/u8-ct-toupper.lo + -rm -f unicase/u8-is-cased.$(OBJEXT) + -rm -f unicase/u8-is-cased.lo + -rm -f unicase/u8-is-casefolded.$(OBJEXT) + -rm -f unicase/u8-is-casefolded.lo + -rm -f unicase/u8-is-invariant.$(OBJEXT) + -rm -f unicase/u8-is-invariant.lo + -rm -f unicase/u8-is-lowercase.$(OBJEXT) + -rm -f unicase/u8-is-lowercase.lo + -rm -f unicase/u8-is-titlecase.$(OBJEXT) + -rm -f unicase/u8-is-titlecase.lo + -rm -f unicase/u8-is-uppercase.$(OBJEXT) + -rm -f unicase/u8-is-uppercase.lo + -rm -f unicase/u8-tolower.$(OBJEXT) + -rm -f unicase/u8-tolower.lo + -rm -f unicase/u8-totitle.$(OBJEXT) + -rm -f unicase/u8-totitle.lo + -rm -f unicase/u8-toupper.$(OBJEXT) + -rm -f unicase/u8-toupper.lo + -rm -f unicase/ulc-casecmp.$(OBJEXT) + -rm -f unicase/ulc-casecmp.lo + -rm -f unicase/ulc-casecoll.$(OBJEXT) + -rm -f unicase/ulc-casecoll.lo + -rm -f unicase/ulc-casexfrm.$(OBJEXT) + -rm -f unicase/ulc-casexfrm.lo + -rm -f uniconv/u16-conv-from-enc.$(OBJEXT) + -rm -f uniconv/u16-conv-from-enc.lo + -rm -f uniconv/u16-conv-to-enc.$(OBJEXT) + -rm -f uniconv/u16-conv-to-enc.lo + -rm -f uniconv/u16-strconv-from-enc.$(OBJEXT) + -rm -f uniconv/u16-strconv-from-enc.lo + -rm -f uniconv/u16-strconv-from-locale.$(OBJEXT) + -rm -f uniconv/u16-strconv-from-locale.lo + -rm -f uniconv/u16-strconv-to-enc.$(OBJEXT) + -rm -f uniconv/u16-strconv-to-enc.lo + -rm -f uniconv/u16-strconv-to-locale.$(OBJEXT) + -rm -f uniconv/u16-strconv-to-locale.lo + -rm -f uniconv/u32-conv-from-enc.$(OBJEXT) + -rm -f uniconv/u32-conv-from-enc.lo + -rm -f uniconv/u32-conv-to-enc.$(OBJEXT) + -rm -f uniconv/u32-conv-to-enc.lo + -rm -f uniconv/u32-strconv-from-enc.$(OBJEXT) + -rm -f uniconv/u32-strconv-from-enc.lo + -rm -f uniconv/u32-strconv-from-locale.$(OBJEXT) + -rm -f uniconv/u32-strconv-from-locale.lo + -rm -f uniconv/u32-strconv-to-enc.$(OBJEXT) + -rm -f uniconv/u32-strconv-to-enc.lo + -rm -f uniconv/u32-strconv-to-locale.$(OBJEXT) + -rm -f uniconv/u32-strconv-to-locale.lo + -rm -f uniconv/u8-conv-from-enc.$(OBJEXT) + -rm -f uniconv/u8-conv-from-enc.lo + -rm -f uniconv/u8-conv-to-enc.$(OBJEXT) + -rm -f uniconv/u8-conv-to-enc.lo + -rm -f uniconv/u8-strconv-from-enc.$(OBJEXT) + -rm -f uniconv/u8-strconv-from-enc.lo + -rm -f uniconv/u8-strconv-from-locale.$(OBJEXT) + -rm -f uniconv/u8-strconv-from-locale.lo + -rm -f uniconv/u8-strconv-to-enc.$(OBJEXT) + -rm -f uniconv/u8-strconv-to-enc.lo + -rm -f uniconv/u8-strconv-to-locale.$(OBJEXT) + -rm -f uniconv/u8-strconv-to-locale.lo + -rm -f unictype/bidi_byname.$(OBJEXT) + -rm -f unictype/bidi_byname.lo + -rm -f unictype/bidi_name.$(OBJEXT) + -rm -f unictype/bidi_name.lo + -rm -f unictype/bidi_of.$(OBJEXT) + -rm -f unictype/bidi_of.lo + -rm -f unictype/bidi_test.$(OBJEXT) + -rm -f unictype/bidi_test.lo + -rm -f unictype/block_test.$(OBJEXT) + -rm -f unictype/block_test.lo + -rm -f unictype/blocks.$(OBJEXT) + -rm -f unictype/blocks.lo + -rm -f unictype/categ_C.$(OBJEXT) + -rm -f unictype/categ_C.lo + -rm -f unictype/categ_Cc.$(OBJEXT) + -rm -f unictype/categ_Cc.lo + -rm -f unictype/categ_Cf.$(OBJEXT) + -rm -f unictype/categ_Cf.lo + -rm -f unictype/categ_Cn.$(OBJEXT) + -rm -f unictype/categ_Cn.lo + -rm -f unictype/categ_Co.$(OBJEXT) + -rm -f unictype/categ_Co.lo + -rm -f unictype/categ_Cs.$(OBJEXT) + -rm -f unictype/categ_Cs.lo + -rm -f unictype/categ_L.$(OBJEXT) + -rm -f unictype/categ_L.lo + -rm -f unictype/categ_Ll.$(OBJEXT) + -rm -f unictype/categ_Ll.lo + -rm -f unictype/categ_Lm.$(OBJEXT) + -rm -f unictype/categ_Lm.lo + -rm -f unictype/categ_Lo.$(OBJEXT) + -rm -f unictype/categ_Lo.lo + -rm -f unictype/categ_Lt.$(OBJEXT) + -rm -f unictype/categ_Lt.lo + -rm -f unictype/categ_Lu.$(OBJEXT) + -rm -f unictype/categ_Lu.lo + -rm -f unictype/categ_M.$(OBJEXT) + -rm -f unictype/categ_M.lo + -rm -f unictype/categ_Mc.$(OBJEXT) + -rm -f unictype/categ_Mc.lo + -rm -f unictype/categ_Me.$(OBJEXT) + -rm -f unictype/categ_Me.lo + -rm -f unictype/categ_Mn.$(OBJEXT) + -rm -f unictype/categ_Mn.lo + -rm -f unictype/categ_N.$(OBJEXT) + -rm -f unictype/categ_N.lo + -rm -f unictype/categ_Nd.$(OBJEXT) + -rm -f unictype/categ_Nd.lo + -rm -f unictype/categ_Nl.$(OBJEXT) + -rm -f unictype/categ_Nl.lo + -rm -f unictype/categ_No.$(OBJEXT) + -rm -f unictype/categ_No.lo + -rm -f unictype/categ_P.$(OBJEXT) + -rm -f unictype/categ_P.lo + -rm -f unictype/categ_Pc.$(OBJEXT) + -rm -f unictype/categ_Pc.lo + -rm -f unictype/categ_Pd.$(OBJEXT) + -rm -f unictype/categ_Pd.lo + -rm -f unictype/categ_Pe.$(OBJEXT) + -rm -f unictype/categ_Pe.lo + -rm -f unictype/categ_Pf.$(OBJEXT) + -rm -f unictype/categ_Pf.lo + -rm -f unictype/categ_Pi.$(OBJEXT) + -rm -f unictype/categ_Pi.lo + -rm -f unictype/categ_Po.$(OBJEXT) + -rm -f unictype/categ_Po.lo + -rm -f unictype/categ_Ps.$(OBJEXT) + -rm -f unictype/categ_Ps.lo + -rm -f unictype/categ_S.$(OBJEXT) + -rm -f unictype/categ_S.lo + -rm -f unictype/categ_Sc.$(OBJEXT) + -rm -f unictype/categ_Sc.lo + -rm -f unictype/categ_Sk.$(OBJEXT) + -rm -f unictype/categ_Sk.lo + -rm -f unictype/categ_Sm.$(OBJEXT) + -rm -f unictype/categ_Sm.lo + -rm -f unictype/categ_So.$(OBJEXT) + -rm -f unictype/categ_So.lo + -rm -f unictype/categ_Z.$(OBJEXT) + -rm -f unictype/categ_Z.lo + -rm -f unictype/categ_Zl.$(OBJEXT) + -rm -f unictype/categ_Zl.lo + -rm -f unictype/categ_Zp.$(OBJEXT) + -rm -f unictype/categ_Zp.lo + -rm -f unictype/categ_Zs.$(OBJEXT) + -rm -f unictype/categ_Zs.lo + -rm -f unictype/categ_and.$(OBJEXT) + -rm -f unictype/categ_and.lo + -rm -f unictype/categ_and_not.$(OBJEXT) + -rm -f unictype/categ_and_not.lo + -rm -f unictype/categ_byname.$(OBJEXT) + -rm -f unictype/categ_byname.lo + -rm -f unictype/categ_name.$(OBJEXT) + -rm -f unictype/categ_name.lo + -rm -f unictype/categ_none.$(OBJEXT) + -rm -f unictype/categ_none.lo + -rm -f unictype/categ_of.$(OBJEXT) + -rm -f unictype/categ_of.lo + -rm -f unictype/categ_or.$(OBJEXT) + -rm -f unictype/categ_or.lo + -rm -f unictype/categ_test.$(OBJEXT) + -rm -f unictype/categ_test.lo + -rm -f unictype/combining.$(OBJEXT) + -rm -f unictype/combining.lo + -rm -f unictype/ctype_alnum.$(OBJEXT) + -rm -f unictype/ctype_alnum.lo + -rm -f unictype/ctype_alpha.$(OBJEXT) + -rm -f unictype/ctype_alpha.lo + -rm -f unictype/ctype_blank.$(OBJEXT) + -rm -f unictype/ctype_blank.lo + -rm -f unictype/ctype_cntrl.$(OBJEXT) + -rm -f unictype/ctype_cntrl.lo + -rm -f unictype/ctype_digit.$(OBJEXT) + -rm -f unictype/ctype_digit.lo + -rm -f unictype/ctype_graph.$(OBJEXT) + -rm -f unictype/ctype_graph.lo + -rm -f unictype/ctype_lower.$(OBJEXT) + -rm -f unictype/ctype_lower.lo + -rm -f unictype/ctype_print.$(OBJEXT) + -rm -f unictype/ctype_print.lo + -rm -f unictype/ctype_punct.$(OBJEXT) + -rm -f unictype/ctype_punct.lo + -rm -f unictype/ctype_space.$(OBJEXT) + -rm -f unictype/ctype_space.lo + -rm -f unictype/ctype_upper.$(OBJEXT) + -rm -f unictype/ctype_upper.lo + -rm -f unictype/ctype_xdigit.$(OBJEXT) + -rm -f unictype/ctype_xdigit.lo + -rm -f unictype/decdigit.$(OBJEXT) + -rm -f unictype/decdigit.lo + -rm -f unictype/digit.$(OBJEXT) + -rm -f unictype/digit.lo + -rm -f unictype/mirror.$(OBJEXT) + -rm -f unictype/mirror.lo + -rm -f unictype/numeric.$(OBJEXT) + -rm -f unictype/numeric.lo + -rm -f unictype/pr_alphabetic.$(OBJEXT) + -rm -f unictype/pr_alphabetic.lo + -rm -f unictype/pr_ascii_hex_digit.$(OBJEXT) + -rm -f unictype/pr_ascii_hex_digit.lo + -rm -f unictype/pr_bidi_arabic_digit.$(OBJEXT) + -rm -f unictype/pr_bidi_arabic_digit.lo + -rm -f unictype/pr_bidi_arabic_right_to_left.$(OBJEXT) + -rm -f unictype/pr_bidi_arabic_right_to_left.lo + -rm -f unictype/pr_bidi_block_separator.$(OBJEXT) + -rm -f unictype/pr_bidi_block_separator.lo + -rm -f unictype/pr_bidi_boundary_neutral.$(OBJEXT) + -rm -f unictype/pr_bidi_boundary_neutral.lo + -rm -f unictype/pr_bidi_common_separator.$(OBJEXT) + -rm -f unictype/pr_bidi_common_separator.lo + -rm -f unictype/pr_bidi_control.$(OBJEXT) + -rm -f unictype/pr_bidi_control.lo + -rm -f unictype/pr_bidi_embedding_or_override.$(OBJEXT) + -rm -f unictype/pr_bidi_embedding_or_override.lo + -rm -f unictype/pr_bidi_eur_num_separator.$(OBJEXT) + -rm -f unictype/pr_bidi_eur_num_separator.lo + -rm -f unictype/pr_bidi_eur_num_terminator.$(OBJEXT) + -rm -f unictype/pr_bidi_eur_num_terminator.lo + -rm -f unictype/pr_bidi_european_digit.$(OBJEXT) + -rm -f unictype/pr_bidi_european_digit.lo + -rm -f unictype/pr_bidi_hebrew_right_to_left.$(OBJEXT) + -rm -f unictype/pr_bidi_hebrew_right_to_left.lo + -rm -f unictype/pr_bidi_left_to_right.$(OBJEXT) + -rm -f unictype/pr_bidi_left_to_right.lo + -rm -f unictype/pr_bidi_non_spacing_mark.$(OBJEXT) + -rm -f unictype/pr_bidi_non_spacing_mark.lo + -rm -f unictype/pr_bidi_other_neutral.$(OBJEXT) + -rm -f unictype/pr_bidi_other_neutral.lo + -rm -f unictype/pr_bidi_pdf.$(OBJEXT) + -rm -f unictype/pr_bidi_pdf.lo + -rm -f unictype/pr_bidi_segment_separator.$(OBJEXT) + -rm -f unictype/pr_bidi_segment_separator.lo + -rm -f unictype/pr_bidi_whitespace.$(OBJEXT) + -rm -f unictype/pr_bidi_whitespace.lo + -rm -f unictype/pr_byname.$(OBJEXT) + -rm -f unictype/pr_byname.lo + -rm -f unictype/pr_combining.$(OBJEXT) + -rm -f unictype/pr_combining.lo + -rm -f unictype/pr_composite.$(OBJEXT) + -rm -f unictype/pr_composite.lo + -rm -f unictype/pr_currency_symbol.$(OBJEXT) + -rm -f unictype/pr_currency_symbol.lo + -rm -f unictype/pr_dash.$(OBJEXT) + -rm -f unictype/pr_dash.lo + -rm -f unictype/pr_decimal_digit.$(OBJEXT) + -rm -f unictype/pr_decimal_digit.lo + -rm -f unictype/pr_default_ignorable_code_point.$(OBJEXT) + -rm -f unictype/pr_default_ignorable_code_point.lo + -rm -f unictype/pr_deprecated.$(OBJEXT) + -rm -f unictype/pr_deprecated.lo + -rm -f unictype/pr_diacritic.$(OBJEXT) + -rm -f unictype/pr_diacritic.lo + -rm -f unictype/pr_extender.$(OBJEXT) + -rm -f unictype/pr_extender.lo + -rm -f unictype/pr_format_control.$(OBJEXT) + -rm -f unictype/pr_format_control.lo + -rm -f unictype/pr_grapheme_base.$(OBJEXT) + -rm -f unictype/pr_grapheme_base.lo + -rm -f unictype/pr_grapheme_extend.$(OBJEXT) + -rm -f unictype/pr_grapheme_extend.lo + -rm -f unictype/pr_grapheme_link.$(OBJEXT) + -rm -f unictype/pr_grapheme_link.lo + -rm -f unictype/pr_hex_digit.$(OBJEXT) + -rm -f unictype/pr_hex_digit.lo + -rm -f unictype/pr_hyphen.$(OBJEXT) + -rm -f unictype/pr_hyphen.lo + -rm -f unictype/pr_id_continue.$(OBJEXT) + -rm -f unictype/pr_id_continue.lo + -rm -f unictype/pr_id_start.$(OBJEXT) + -rm -f unictype/pr_id_start.lo + -rm -f unictype/pr_ideographic.$(OBJEXT) + -rm -f unictype/pr_ideographic.lo + -rm -f unictype/pr_ids_binary_operator.$(OBJEXT) + -rm -f unictype/pr_ids_binary_operator.lo + -rm -f unictype/pr_ids_trinary_operator.$(OBJEXT) + -rm -f unictype/pr_ids_trinary_operator.lo + -rm -f unictype/pr_ignorable_control.$(OBJEXT) + -rm -f unictype/pr_ignorable_control.lo + -rm -f unictype/pr_iso_control.$(OBJEXT) + -rm -f unictype/pr_iso_control.lo + -rm -f unictype/pr_join_control.$(OBJEXT) + -rm -f unictype/pr_join_control.lo + -rm -f unictype/pr_left_of_pair.$(OBJEXT) + -rm -f unictype/pr_left_of_pair.lo + -rm -f unictype/pr_line_separator.$(OBJEXT) + -rm -f unictype/pr_line_separator.lo + -rm -f unictype/pr_logical_order_exception.$(OBJEXT) + -rm -f unictype/pr_logical_order_exception.lo + -rm -f unictype/pr_lowercase.$(OBJEXT) + -rm -f unictype/pr_lowercase.lo + -rm -f unictype/pr_math.$(OBJEXT) + -rm -f unictype/pr_math.lo + -rm -f unictype/pr_non_break.$(OBJEXT) + -rm -f unictype/pr_non_break.lo + -rm -f unictype/pr_not_a_character.$(OBJEXT) + -rm -f unictype/pr_not_a_character.lo + -rm -f unictype/pr_numeric.$(OBJEXT) + -rm -f unictype/pr_numeric.lo + -rm -f unictype/pr_other_alphabetic.$(OBJEXT) + -rm -f unictype/pr_other_alphabetic.lo + -rm -f unictype/pr_other_default_ignorable_code_point.$(OBJEXT) + -rm -f unictype/pr_other_default_ignorable_code_point.lo + -rm -f unictype/pr_other_grapheme_extend.$(OBJEXT) + -rm -f unictype/pr_other_grapheme_extend.lo + -rm -f unictype/pr_other_id_continue.$(OBJEXT) + -rm -f unictype/pr_other_id_continue.lo + -rm -f unictype/pr_other_id_start.$(OBJEXT) + -rm -f unictype/pr_other_id_start.lo + -rm -f unictype/pr_other_lowercase.$(OBJEXT) + -rm -f unictype/pr_other_lowercase.lo + -rm -f unictype/pr_other_math.$(OBJEXT) + -rm -f unictype/pr_other_math.lo + -rm -f unictype/pr_other_uppercase.$(OBJEXT) + -rm -f unictype/pr_other_uppercase.lo + -rm -f unictype/pr_paired_punctuation.$(OBJEXT) + -rm -f unictype/pr_paired_punctuation.lo + -rm -f unictype/pr_paragraph_separator.$(OBJEXT) + -rm -f unictype/pr_paragraph_separator.lo + -rm -f unictype/pr_pattern_syntax.$(OBJEXT) + -rm -f unictype/pr_pattern_syntax.lo + -rm -f unictype/pr_pattern_white_space.$(OBJEXT) + -rm -f unictype/pr_pattern_white_space.lo + -rm -f unictype/pr_private_use.$(OBJEXT) + -rm -f unictype/pr_private_use.lo + -rm -f unictype/pr_punctuation.$(OBJEXT) + -rm -f unictype/pr_punctuation.lo + -rm -f unictype/pr_quotation_mark.$(OBJEXT) + -rm -f unictype/pr_quotation_mark.lo + -rm -f unictype/pr_radical.$(OBJEXT) + -rm -f unictype/pr_radical.lo + -rm -f unictype/pr_sentence_terminal.$(OBJEXT) + -rm -f unictype/pr_sentence_terminal.lo + -rm -f unictype/pr_soft_dotted.$(OBJEXT) + -rm -f unictype/pr_soft_dotted.lo + -rm -f unictype/pr_space.$(OBJEXT) + -rm -f unictype/pr_space.lo + -rm -f unictype/pr_terminal_punctuation.$(OBJEXT) + -rm -f unictype/pr_terminal_punctuation.lo + -rm -f unictype/pr_test.$(OBJEXT) + -rm -f unictype/pr_test.lo + -rm -f unictype/pr_titlecase.$(OBJEXT) + -rm -f unictype/pr_titlecase.lo + -rm -f unictype/pr_unassigned_code_value.$(OBJEXT) + -rm -f unictype/pr_unassigned_code_value.lo + -rm -f unictype/pr_unified_ideograph.$(OBJEXT) + -rm -f unictype/pr_unified_ideograph.lo + -rm -f unictype/pr_uppercase.$(OBJEXT) + -rm -f unictype/pr_uppercase.lo + -rm -f unictype/pr_variation_selector.$(OBJEXT) + -rm -f unictype/pr_variation_selector.lo + -rm -f unictype/pr_white_space.$(OBJEXT) + -rm -f unictype/pr_white_space.lo + -rm -f unictype/pr_xid_continue.$(OBJEXT) + -rm -f unictype/pr_xid_continue.lo + -rm -f unictype/pr_xid_start.$(OBJEXT) + -rm -f unictype/pr_xid_start.lo + -rm -f unictype/pr_zero_width.$(OBJEXT) + -rm -f unictype/pr_zero_width.lo + -rm -f unictype/scripts.$(OBJEXT) + -rm -f unictype/scripts.lo + -rm -f unictype/sy_c_ident.$(OBJEXT) + -rm -f unictype/sy_c_ident.lo + -rm -f unictype/sy_c_whitespace.$(OBJEXT) + -rm -f unictype/sy_c_whitespace.lo + -rm -f unictype/sy_java_ident.$(OBJEXT) + -rm -f unictype/sy_java_ident.lo + -rm -f unictype/sy_java_whitespace.$(OBJEXT) + -rm -f unictype/sy_java_whitespace.lo + -rm -f unilbrk/lbrktables.$(OBJEXT) + -rm -f unilbrk/lbrktables.lo + -rm -f unilbrk/u16-possible-linebreaks.$(OBJEXT) + -rm -f unilbrk/u16-possible-linebreaks.lo + -rm -f unilbrk/u16-width-linebreaks.$(OBJEXT) + -rm -f unilbrk/u16-width-linebreaks.lo + -rm -f unilbrk/u32-possible-linebreaks.$(OBJEXT) + -rm -f unilbrk/u32-possible-linebreaks.lo + -rm -f unilbrk/u32-width-linebreaks.$(OBJEXT) + -rm -f unilbrk/u32-width-linebreaks.lo + -rm -f unilbrk/u8-possible-linebreaks.$(OBJEXT) + -rm -f unilbrk/u8-possible-linebreaks.lo + -rm -f unilbrk/u8-width-linebreaks.$(OBJEXT) + -rm -f unilbrk/u8-width-linebreaks.lo + -rm -f unilbrk/ulc-common.$(OBJEXT) + -rm -f unilbrk/ulc-common.lo + -rm -f unilbrk/ulc-possible-linebreaks.$(OBJEXT) + -rm -f unilbrk/ulc-possible-linebreaks.lo + -rm -f unilbrk/ulc-width-linebreaks.$(OBJEXT) + -rm -f unilbrk/ulc-width-linebreaks.lo + -rm -f uniname/uniname.$(OBJEXT) + -rm -f uniname/uniname.lo + -rm -f uninorm/canonical-decomposition.$(OBJEXT) + -rm -f uninorm/canonical-decomposition.lo + -rm -f uninorm/compat-decomposition.$(OBJEXT) + -rm -f uninorm/compat-decomposition.lo + -rm -f uninorm/composition.$(OBJEXT) + -rm -f uninorm/composition.lo + -rm -f uninorm/decompose-internal.$(OBJEXT) + -rm -f uninorm/decompose-internal.lo + -rm -f uninorm/decomposing-form.$(OBJEXT) + -rm -f uninorm/decomposing-form.lo + -rm -f uninorm/decomposition-table.$(OBJEXT) + -rm -f uninorm/decomposition-table.lo + -rm -f uninorm/decomposition.$(OBJEXT) + -rm -f uninorm/decomposition.lo + -rm -f uninorm/nfc.$(OBJEXT) + -rm -f uninorm/nfc.lo + -rm -f uninorm/nfd.$(OBJEXT) + -rm -f uninorm/nfd.lo + -rm -f uninorm/nfkc.$(OBJEXT) + -rm -f uninorm/nfkc.lo + -rm -f uninorm/nfkd.$(OBJEXT) + -rm -f uninorm/nfkd.lo + -rm -f uninorm/u16-normalize.$(OBJEXT) + -rm -f uninorm/u16-normalize.lo + -rm -f uninorm/u16-normcmp.$(OBJEXT) + -rm -f uninorm/u16-normcmp.lo + -rm -f uninorm/u16-normcoll.$(OBJEXT) + -rm -f uninorm/u16-normcoll.lo + -rm -f uninorm/u16-normxfrm.$(OBJEXT) + -rm -f uninorm/u16-normxfrm.lo + -rm -f uninorm/u32-normalize.$(OBJEXT) + -rm -f uninorm/u32-normalize.lo + -rm -f uninorm/u32-normcmp.$(OBJEXT) + -rm -f uninorm/u32-normcmp.lo + -rm -f uninorm/u32-normcoll.$(OBJEXT) + -rm -f uninorm/u32-normcoll.lo + -rm -f uninorm/u32-normxfrm.$(OBJEXT) + -rm -f uninorm/u32-normxfrm.lo + -rm -f uninorm/u8-normalize.$(OBJEXT) + -rm -f uninorm/u8-normalize.lo + -rm -f uninorm/u8-normcmp.$(OBJEXT) + -rm -f uninorm/u8-normcmp.lo + -rm -f uninorm/u8-normcoll.$(OBJEXT) + -rm -f uninorm/u8-normcoll.lo + -rm -f uninorm/u8-normxfrm.$(OBJEXT) + -rm -f uninorm/u8-normxfrm.lo + -rm -f uninorm/uninorm-filter.$(OBJEXT) + -rm -f uninorm/uninorm-filter.lo + -rm -f unistdio/u-printf-args.$(OBJEXT) + -rm -f unistdio/u-printf-args.lo + -rm -f unistdio/u16-asnprintf.$(OBJEXT) + -rm -f unistdio/u16-asnprintf.lo + -rm -f unistdio/u16-asprintf.$(OBJEXT) + -rm -f unistdio/u16-asprintf.lo + -rm -f unistdio/u16-printf-parse.$(OBJEXT) + -rm -f unistdio/u16-printf-parse.lo + -rm -f unistdio/u16-snprintf.$(OBJEXT) + -rm -f unistdio/u16-snprintf.lo + -rm -f unistdio/u16-sprintf.$(OBJEXT) + -rm -f unistdio/u16-sprintf.lo + -rm -f unistdio/u16-u16-asnprintf.$(OBJEXT) + -rm -f unistdio/u16-u16-asnprintf.lo + -rm -f unistdio/u16-u16-asprintf.$(OBJEXT) + -rm -f unistdio/u16-u16-asprintf.lo + -rm -f unistdio/u16-u16-snprintf.$(OBJEXT) + -rm -f unistdio/u16-u16-snprintf.lo + -rm -f unistdio/u16-u16-sprintf.$(OBJEXT) + -rm -f unistdio/u16-u16-sprintf.lo + -rm -f unistdio/u16-u16-vasnprintf.$(OBJEXT) + -rm -f unistdio/u16-u16-vasnprintf.lo + -rm -f unistdio/u16-u16-vasprintf.$(OBJEXT) + -rm -f unistdio/u16-u16-vasprintf.lo + -rm -f unistdio/u16-u16-vsnprintf.$(OBJEXT) + -rm -f unistdio/u16-u16-vsnprintf.lo + -rm -f unistdio/u16-u16-vsprintf.$(OBJEXT) + -rm -f unistdio/u16-u16-vsprintf.lo + -rm -f unistdio/u16-vasnprintf.$(OBJEXT) + -rm -f unistdio/u16-vasnprintf.lo + -rm -f unistdio/u16-vasprintf.$(OBJEXT) + -rm -f unistdio/u16-vasprintf.lo + -rm -f unistdio/u16-vsnprintf.$(OBJEXT) + -rm -f unistdio/u16-vsnprintf.lo + -rm -f unistdio/u16-vsprintf.$(OBJEXT) + -rm -f unistdio/u16-vsprintf.lo + -rm -f unistdio/u32-asnprintf.$(OBJEXT) + -rm -f unistdio/u32-asnprintf.lo + -rm -f unistdio/u32-asprintf.$(OBJEXT) + -rm -f unistdio/u32-asprintf.lo + -rm -f unistdio/u32-printf-parse.$(OBJEXT) + -rm -f unistdio/u32-printf-parse.lo + -rm -f unistdio/u32-snprintf.$(OBJEXT) + -rm -f unistdio/u32-snprintf.lo + -rm -f unistdio/u32-sprintf.$(OBJEXT) + -rm -f unistdio/u32-sprintf.lo + -rm -f unistdio/u32-u32-asnprintf.$(OBJEXT) + -rm -f unistdio/u32-u32-asnprintf.lo + -rm -f unistdio/u32-u32-asprintf.$(OBJEXT) + -rm -f unistdio/u32-u32-asprintf.lo + -rm -f unistdio/u32-u32-snprintf.$(OBJEXT) + -rm -f unistdio/u32-u32-snprintf.lo + -rm -f unistdio/u32-u32-sprintf.$(OBJEXT) + -rm -f unistdio/u32-u32-sprintf.lo + -rm -f unistdio/u32-u32-vasnprintf.$(OBJEXT) + -rm -f unistdio/u32-u32-vasnprintf.lo + -rm -f unistdio/u32-u32-vasprintf.$(OBJEXT) + -rm -f unistdio/u32-u32-vasprintf.lo + -rm -f unistdio/u32-u32-vsnprintf.$(OBJEXT) + -rm -f unistdio/u32-u32-vsnprintf.lo + -rm -f unistdio/u32-u32-vsprintf.$(OBJEXT) + -rm -f unistdio/u32-u32-vsprintf.lo + -rm -f unistdio/u32-vasnprintf.$(OBJEXT) + -rm -f unistdio/u32-vasnprintf.lo + -rm -f unistdio/u32-vasprintf.$(OBJEXT) + -rm -f unistdio/u32-vasprintf.lo + -rm -f unistdio/u32-vsnprintf.$(OBJEXT) + -rm -f unistdio/u32-vsnprintf.lo + -rm -f unistdio/u32-vsprintf.$(OBJEXT) + -rm -f unistdio/u32-vsprintf.lo + -rm -f unistdio/u8-asnprintf.$(OBJEXT) + -rm -f unistdio/u8-asnprintf.lo + -rm -f unistdio/u8-asprintf.$(OBJEXT) + -rm -f unistdio/u8-asprintf.lo + -rm -f unistdio/u8-printf-parse.$(OBJEXT) + -rm -f unistdio/u8-printf-parse.lo + -rm -f unistdio/u8-snprintf.$(OBJEXT) + -rm -f unistdio/u8-snprintf.lo + -rm -f unistdio/u8-sprintf.$(OBJEXT) + -rm -f unistdio/u8-sprintf.lo + -rm -f unistdio/u8-u8-asnprintf.$(OBJEXT) + -rm -f unistdio/u8-u8-asnprintf.lo + -rm -f unistdio/u8-u8-asprintf.$(OBJEXT) + -rm -f unistdio/u8-u8-asprintf.lo + -rm -f unistdio/u8-u8-snprintf.$(OBJEXT) + -rm -f unistdio/u8-u8-snprintf.lo + -rm -f unistdio/u8-u8-sprintf.$(OBJEXT) + -rm -f unistdio/u8-u8-sprintf.lo + -rm -f unistdio/u8-u8-vasnprintf.$(OBJEXT) + -rm -f unistdio/u8-u8-vasnprintf.lo + -rm -f unistdio/u8-u8-vasprintf.$(OBJEXT) + -rm -f unistdio/u8-u8-vasprintf.lo + -rm -f unistdio/u8-u8-vsnprintf.$(OBJEXT) + -rm -f unistdio/u8-u8-vsnprintf.lo + -rm -f unistdio/u8-u8-vsprintf.$(OBJEXT) + -rm -f unistdio/u8-u8-vsprintf.lo + -rm -f unistdio/u8-vasnprintf.$(OBJEXT) + -rm -f unistdio/u8-vasnprintf.lo + -rm -f unistdio/u8-vasprintf.$(OBJEXT) + -rm -f unistdio/u8-vasprintf.lo + -rm -f unistdio/u8-vsnprintf.$(OBJEXT) + -rm -f unistdio/u8-vsnprintf.lo + -rm -f unistdio/u8-vsprintf.$(OBJEXT) + -rm -f unistdio/u8-vsprintf.lo + -rm -f unistdio/ulc-asnprintf.$(OBJEXT) + -rm -f unistdio/ulc-asnprintf.lo + -rm -f unistdio/ulc-asprintf.$(OBJEXT) + -rm -f unistdio/ulc-asprintf.lo + -rm -f unistdio/ulc-fprintf.$(OBJEXT) + -rm -f unistdio/ulc-fprintf.lo + -rm -f unistdio/ulc-printf-parse.$(OBJEXT) + -rm -f unistdio/ulc-printf-parse.lo + -rm -f unistdio/ulc-snprintf.$(OBJEXT) + -rm -f unistdio/ulc-snprintf.lo + -rm -f unistdio/ulc-sprintf.$(OBJEXT) + -rm -f unistdio/ulc-sprintf.lo + -rm -f unistdio/ulc-vasnprintf.$(OBJEXT) + -rm -f unistdio/ulc-vasnprintf.lo + -rm -f unistdio/ulc-vasprintf.$(OBJEXT) + -rm -f unistdio/ulc-vasprintf.lo + -rm -f unistdio/ulc-vfprintf.$(OBJEXT) + -rm -f unistdio/ulc-vfprintf.lo + -rm -f unistdio/ulc-vsnprintf.$(OBJEXT) + -rm -f unistdio/ulc-vsnprintf.lo + -rm -f unistdio/ulc-vsprintf.$(OBJEXT) + -rm -f unistdio/ulc-vsprintf.lo + -rm -f unistr/u16-check.$(OBJEXT) + -rm -f unistr/u16-check.lo + -rm -f unistr/u16-chr.$(OBJEXT) + -rm -f unistr/u16-chr.lo + -rm -f unistr/u16-cmp.$(OBJEXT) + -rm -f unistr/u16-cmp.lo + -rm -f unistr/u16-cmp2.$(OBJEXT) + -rm -f unistr/u16-cmp2.lo + -rm -f unistr/u16-cpy-alloc.$(OBJEXT) + -rm -f unistr/u16-cpy-alloc.lo + -rm -f unistr/u16-cpy.$(OBJEXT) + -rm -f unistr/u16-cpy.lo + -rm -f unistr/u16-endswith.$(OBJEXT) + -rm -f unistr/u16-endswith.lo + -rm -f unistr/u16-mblen.$(OBJEXT) + -rm -f unistr/u16-mblen.lo + -rm -f unistr/u16-mbsnlen.$(OBJEXT) + -rm -f unistr/u16-mbsnlen.lo + -rm -f unistr/u16-mbtouc-aux.$(OBJEXT) + -rm -f unistr/u16-mbtouc-aux.lo + -rm -f unistr/u16-mbtouc-unsafe-aux.$(OBJEXT) + -rm -f unistr/u16-mbtouc-unsafe-aux.lo + -rm -f unistr/u16-mbtouc-unsafe.$(OBJEXT) + -rm -f unistr/u16-mbtouc-unsafe.lo + -rm -f unistr/u16-mbtouc.$(OBJEXT) + -rm -f unistr/u16-mbtouc.lo + -rm -f unistr/u16-mbtoucr.$(OBJEXT) + -rm -f unistr/u16-mbtoucr.lo + -rm -f unistr/u16-move.$(OBJEXT) + -rm -f unistr/u16-move.lo + -rm -f unistr/u16-next.$(OBJEXT) + -rm -f unistr/u16-next.lo + -rm -f unistr/u16-prev.$(OBJEXT) + -rm -f unistr/u16-prev.lo + -rm -f unistr/u16-set.$(OBJEXT) + -rm -f unistr/u16-set.lo + -rm -f unistr/u16-startswith.$(OBJEXT) + -rm -f unistr/u16-startswith.lo + -rm -f unistr/u16-stpcpy.$(OBJEXT) + -rm -f unistr/u16-stpcpy.lo + -rm -f unistr/u16-stpncpy.$(OBJEXT) + -rm -f unistr/u16-stpncpy.lo + -rm -f unistr/u16-strcat.$(OBJEXT) + -rm -f unistr/u16-strcat.lo + -rm -f unistr/u16-strchr.$(OBJEXT) + -rm -f unistr/u16-strchr.lo + -rm -f unistr/u16-strcmp.$(OBJEXT) + -rm -f unistr/u16-strcmp.lo + -rm -f unistr/u16-strcoll.$(OBJEXT) + -rm -f unistr/u16-strcoll.lo + -rm -f unistr/u16-strcpy.$(OBJEXT) + -rm -f unistr/u16-strcpy.lo + -rm -f unistr/u16-strcspn.$(OBJEXT) + -rm -f unistr/u16-strcspn.lo + -rm -f unistr/u16-strdup.$(OBJEXT) + -rm -f unistr/u16-strdup.lo + -rm -f unistr/u16-strlen.$(OBJEXT) + -rm -f unistr/u16-strlen.lo + -rm -f unistr/u16-strmblen.$(OBJEXT) + -rm -f unistr/u16-strmblen.lo + -rm -f unistr/u16-strmbtouc.$(OBJEXT) + -rm -f unistr/u16-strmbtouc.lo + -rm -f unistr/u16-strncat.$(OBJEXT) + -rm -f unistr/u16-strncat.lo + -rm -f unistr/u16-strncmp.$(OBJEXT) + -rm -f unistr/u16-strncmp.lo + -rm -f unistr/u16-strncpy.$(OBJEXT) + -rm -f unistr/u16-strncpy.lo + -rm -f unistr/u16-strnlen.$(OBJEXT) + -rm -f unistr/u16-strnlen.lo + -rm -f unistr/u16-strpbrk.$(OBJEXT) + -rm -f unistr/u16-strpbrk.lo + -rm -f unistr/u16-strrchr.$(OBJEXT) + -rm -f unistr/u16-strrchr.lo + -rm -f unistr/u16-strspn.$(OBJEXT) + -rm -f unistr/u16-strspn.lo + -rm -f unistr/u16-strstr.$(OBJEXT) + -rm -f unistr/u16-strstr.lo + -rm -f unistr/u16-strtok.$(OBJEXT) + -rm -f unistr/u16-strtok.lo + -rm -f unistr/u16-to-u32.$(OBJEXT) + -rm -f unistr/u16-to-u32.lo + -rm -f unistr/u16-to-u8.$(OBJEXT) + -rm -f unistr/u16-to-u8.lo + -rm -f unistr/u16-uctomb-aux.$(OBJEXT) + -rm -f unistr/u16-uctomb-aux.lo + -rm -f unistr/u16-uctomb.$(OBJEXT) + -rm -f unistr/u16-uctomb.lo + -rm -f unistr/u32-check.$(OBJEXT) + -rm -f unistr/u32-check.lo + -rm -f unistr/u32-chr.$(OBJEXT) + -rm -f unistr/u32-chr.lo + -rm -f unistr/u32-cmp.$(OBJEXT) + -rm -f unistr/u32-cmp.lo + -rm -f unistr/u32-cmp2.$(OBJEXT) + -rm -f unistr/u32-cmp2.lo + -rm -f unistr/u32-cpy-alloc.$(OBJEXT) + -rm -f unistr/u32-cpy-alloc.lo + -rm -f unistr/u32-cpy.$(OBJEXT) + -rm -f unistr/u32-cpy.lo + -rm -f unistr/u32-endswith.$(OBJEXT) + -rm -f unistr/u32-endswith.lo + -rm -f unistr/u32-mblen.$(OBJEXT) + -rm -f unistr/u32-mblen.lo + -rm -f unistr/u32-mbsnlen.$(OBJEXT) + -rm -f unistr/u32-mbsnlen.lo + -rm -f unistr/u32-mbtouc-unsafe.$(OBJEXT) + -rm -f unistr/u32-mbtouc-unsafe.lo + -rm -f unistr/u32-mbtouc.$(OBJEXT) + -rm -f unistr/u32-mbtouc.lo + -rm -f unistr/u32-mbtoucr.$(OBJEXT) + -rm -f unistr/u32-mbtoucr.lo + -rm -f unistr/u32-move.$(OBJEXT) + -rm -f unistr/u32-move.lo + -rm -f unistr/u32-next.$(OBJEXT) + -rm -f unistr/u32-next.lo + -rm -f unistr/u32-prev.$(OBJEXT) + -rm -f unistr/u32-prev.lo + -rm -f unistr/u32-set.$(OBJEXT) + -rm -f unistr/u32-set.lo + -rm -f unistr/u32-startswith.$(OBJEXT) + -rm -f unistr/u32-startswith.lo + -rm -f unistr/u32-stpcpy.$(OBJEXT) + -rm -f unistr/u32-stpcpy.lo + -rm -f unistr/u32-stpncpy.$(OBJEXT) + -rm -f unistr/u32-stpncpy.lo + -rm -f unistr/u32-strcat.$(OBJEXT) + -rm -f unistr/u32-strcat.lo + -rm -f unistr/u32-strchr.$(OBJEXT) + -rm -f unistr/u32-strchr.lo + -rm -f unistr/u32-strcmp.$(OBJEXT) + -rm -f unistr/u32-strcmp.lo + -rm -f unistr/u32-strcoll.$(OBJEXT) + -rm -f unistr/u32-strcoll.lo + -rm -f unistr/u32-strcpy.$(OBJEXT) + -rm -f unistr/u32-strcpy.lo + -rm -f unistr/u32-strcspn.$(OBJEXT) + -rm -f unistr/u32-strcspn.lo + -rm -f unistr/u32-strdup.$(OBJEXT) + -rm -f unistr/u32-strdup.lo + -rm -f unistr/u32-strlen.$(OBJEXT) + -rm -f unistr/u32-strlen.lo + -rm -f unistr/u32-strmblen.$(OBJEXT) + -rm -f unistr/u32-strmblen.lo + -rm -f unistr/u32-strmbtouc.$(OBJEXT) + -rm -f unistr/u32-strmbtouc.lo + -rm -f unistr/u32-strncat.$(OBJEXT) + -rm -f unistr/u32-strncat.lo + -rm -f unistr/u32-strncmp.$(OBJEXT) + -rm -f unistr/u32-strncmp.lo + -rm -f unistr/u32-strncpy.$(OBJEXT) + -rm -f unistr/u32-strncpy.lo + -rm -f unistr/u32-strnlen.$(OBJEXT) + -rm -f unistr/u32-strnlen.lo + -rm -f unistr/u32-strpbrk.$(OBJEXT) + -rm -f unistr/u32-strpbrk.lo + -rm -f unistr/u32-strrchr.$(OBJEXT) + -rm -f unistr/u32-strrchr.lo + -rm -f unistr/u32-strspn.$(OBJEXT) + -rm -f unistr/u32-strspn.lo + -rm -f unistr/u32-strstr.$(OBJEXT) + -rm -f unistr/u32-strstr.lo + -rm -f unistr/u32-strtok.$(OBJEXT) + -rm -f unistr/u32-strtok.lo + -rm -f unistr/u32-to-u16.$(OBJEXT) + -rm -f unistr/u32-to-u16.lo + -rm -f unistr/u32-to-u8.$(OBJEXT) + -rm -f unistr/u32-to-u8.lo + -rm -f unistr/u32-uctomb.$(OBJEXT) + -rm -f unistr/u32-uctomb.lo + -rm -f unistr/u8-check.$(OBJEXT) + -rm -f unistr/u8-check.lo + -rm -f unistr/u8-chr.$(OBJEXT) + -rm -f unistr/u8-chr.lo + -rm -f unistr/u8-cmp.$(OBJEXT) + -rm -f unistr/u8-cmp.lo + -rm -f unistr/u8-cmp2.$(OBJEXT) + -rm -f unistr/u8-cmp2.lo + -rm -f unistr/u8-cpy-alloc.$(OBJEXT) + -rm -f unistr/u8-cpy-alloc.lo + -rm -f unistr/u8-cpy.$(OBJEXT) + -rm -f unistr/u8-cpy.lo + -rm -f unistr/u8-endswith.$(OBJEXT) + -rm -f unistr/u8-endswith.lo + -rm -f unistr/u8-mblen.$(OBJEXT) + -rm -f unistr/u8-mblen.lo + -rm -f unistr/u8-mbsnlen.$(OBJEXT) + -rm -f unistr/u8-mbsnlen.lo + -rm -f unistr/u8-mbtouc-aux.$(OBJEXT) + -rm -f unistr/u8-mbtouc-aux.lo + -rm -f unistr/u8-mbtouc-unsafe-aux.$(OBJEXT) + -rm -f unistr/u8-mbtouc-unsafe-aux.lo + -rm -f unistr/u8-mbtouc-unsafe.$(OBJEXT) + -rm -f unistr/u8-mbtouc-unsafe.lo + -rm -f unistr/u8-mbtouc.$(OBJEXT) + -rm -f unistr/u8-mbtouc.lo + -rm -f unistr/u8-mbtoucr.$(OBJEXT) + -rm -f unistr/u8-mbtoucr.lo + -rm -f unistr/u8-move.$(OBJEXT) + -rm -f unistr/u8-move.lo + -rm -f unistr/u8-next.$(OBJEXT) + -rm -f unistr/u8-next.lo + -rm -f unistr/u8-prev.$(OBJEXT) + -rm -f unistr/u8-prev.lo + -rm -f unistr/u8-set.$(OBJEXT) + -rm -f unistr/u8-set.lo + -rm -f unistr/u8-startswith.$(OBJEXT) + -rm -f unistr/u8-startswith.lo + -rm -f unistr/u8-stpcpy.$(OBJEXT) + -rm -f unistr/u8-stpcpy.lo + -rm -f unistr/u8-stpncpy.$(OBJEXT) + -rm -f unistr/u8-stpncpy.lo + -rm -f unistr/u8-strcat.$(OBJEXT) + -rm -f unistr/u8-strcat.lo + -rm -f unistr/u8-strchr.$(OBJEXT) + -rm -f unistr/u8-strchr.lo + -rm -f unistr/u8-strcmp.$(OBJEXT) + -rm -f unistr/u8-strcmp.lo + -rm -f unistr/u8-strcoll.$(OBJEXT) + -rm -f unistr/u8-strcoll.lo + -rm -f unistr/u8-strcpy.$(OBJEXT) + -rm -f unistr/u8-strcpy.lo + -rm -f unistr/u8-strcspn.$(OBJEXT) + -rm -f unistr/u8-strcspn.lo + -rm -f unistr/u8-strdup.$(OBJEXT) + -rm -f unistr/u8-strdup.lo + -rm -f unistr/u8-strlen.$(OBJEXT) + -rm -f unistr/u8-strlen.lo + -rm -f unistr/u8-strmblen.$(OBJEXT) + -rm -f unistr/u8-strmblen.lo + -rm -f unistr/u8-strmbtouc.$(OBJEXT) + -rm -f unistr/u8-strmbtouc.lo + -rm -f unistr/u8-strncat.$(OBJEXT) + -rm -f unistr/u8-strncat.lo + -rm -f unistr/u8-strncmp.$(OBJEXT) + -rm -f unistr/u8-strncmp.lo + -rm -f unistr/u8-strncpy.$(OBJEXT) + -rm -f unistr/u8-strncpy.lo + -rm -f unistr/u8-strnlen.$(OBJEXT) + -rm -f unistr/u8-strnlen.lo + -rm -f unistr/u8-strpbrk.$(OBJEXT) + -rm -f unistr/u8-strpbrk.lo + -rm -f unistr/u8-strrchr.$(OBJEXT) + -rm -f unistr/u8-strrchr.lo + -rm -f unistr/u8-strspn.$(OBJEXT) + -rm -f unistr/u8-strspn.lo + -rm -f unistr/u8-strstr.$(OBJEXT) + -rm -f unistr/u8-strstr.lo + -rm -f unistr/u8-strtok.$(OBJEXT) + -rm -f unistr/u8-strtok.lo + -rm -f unistr/u8-to-u16.$(OBJEXT) + -rm -f unistr/u8-to-u16.lo + -rm -f unistr/u8-to-u32.$(OBJEXT) + -rm -f unistr/u8-to-u32.lo + -rm -f unistr/u8-uctomb-aux.$(OBJEXT) + -rm -f unistr/u8-uctomb-aux.lo + -rm -f unistr/u8-uctomb.$(OBJEXT) + -rm -f unistr/u8-uctomb.lo + -rm -f uniwbrk/u16-wordbreaks.$(OBJEXT) + -rm -f uniwbrk/u16-wordbreaks.lo + -rm -f uniwbrk/u32-wordbreaks.$(OBJEXT) + -rm -f uniwbrk/u32-wordbreaks.lo + -rm -f uniwbrk/u8-wordbreaks.$(OBJEXT) + -rm -f uniwbrk/u8-wordbreaks.lo + -rm -f uniwbrk/ulc-wordbreaks.$(OBJEXT) + -rm -f uniwbrk/ulc-wordbreaks.lo + -rm -f uniwbrk/wbrktable.$(OBJEXT) + -rm -f uniwbrk/wbrktable.lo + -rm -f uniwbrk/wordbreak-property.$(OBJEXT) + -rm -f uniwbrk/wordbreak-property.lo + -rm -f uniwidth/u16-strwidth.$(OBJEXT) + -rm -f uniwidth/u16-strwidth.lo + -rm -f uniwidth/u16-width.$(OBJEXT) + -rm -f uniwidth/u16-width.lo + -rm -f uniwidth/u32-strwidth.$(OBJEXT) + -rm -f uniwidth/u32-strwidth.lo + -rm -f uniwidth/u32-width.$(OBJEXT) + -rm -f uniwidth/u32-width.lo + -rm -f uniwidth/u8-strwidth.$(OBJEXT) + -rm -f uniwidth/u8-strwidth.lo + -rm -f uniwidth/u8-width.$(OBJEXT) + -rm -f uniwidth/u8-width.lo + -rm -f uniwidth/width.$(OBJEXT) + -rm -f uniwidth/width.lo + +distclean-compile: + -rm -f *.tab.c + +.c.o: + $(AM_V_CC) @AM_BACKSLASH@ + $(COMPILE) -c -o $@ $< + +.c.obj: + $(AM_V_CC) @AM_BACKSLASH@ + $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: + $(AM_V_CC) @AM_BACKSLASH@ + $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + -rm -rf ../woe32dll/.libs ../woe32dll/_libs + -rm -rf unicase/.libs unicase/_libs + -rm -rf uniconv/.libs uniconv/_libs + -rm -rf unictype/.libs unictype/_libs + -rm -rf unilbrk/.libs unilbrk/_libs + -rm -rf uniname/.libs uniname/_libs + -rm -rf uninorm/.libs uninorm/_libs + -rm -rf unistdio/.libs unistdio/_libs + -rm -rf unistr/.libs unistr/_libs + -rm -rf uniwbrk/.libs uniwbrk/_libs + -rm -rf uniwidth/.libs uniwidth/_libs +install-nobase_includeHEADERS: $(nobase_include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \ + $(am__nobase_list) | while read dir files; do \ + xfiles=; for file in $$files; do \ + if test -f "$$file"; then xfiles="$$xfiles $$file"; \ + else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ + test -z "$$xfiles" || { \ + test "x$$dir" = x. || { \ + echo "$(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \ + echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \ + $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \ + done + +uninstall-nobase_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \ + $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includedir)" && rm -f $$files +install-nobase_nodist_includeHEADERS: $(nobase_nodist_include_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" + @list='$(nobase_nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ + $(am__nobase_list) | while read dir files; do \ + xfiles=; for file in $$files; do \ + if test -f "$$file"; then xfiles="$$xfiles $$file"; \ + else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ + test -z "$$xfiles" || { \ + test "x$$dir" = x. || { \ + echo "$(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \ + $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \ + echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \ + $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \ + done + +uninstall-nobase_nodist_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(nobase_nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ + $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(includedir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) all-local +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f ../woe32dll/$(am__dirstamp) + -rm -f unicase/$(am__dirstamp) + -rm -f uniconv/$(am__dirstamp) + -rm -f unictype/$(am__dirstamp) + -rm -f unilbrk/$(am__dirstamp) + -rm -f uniname/$(am__dirstamp) + -rm -f uninorm/$(am__dirstamp) + -rm -f unistdio/$(am__dirstamp) + -rm -f unistr/$(am__dirstamp) + -rm -f uniwbrk/$(am__dirstamp) + -rm -f uniwidth/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-nobase_includeHEADERS \ + install-nobase_nodist_includeHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-exec-local install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool mostlyclean-local + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES uninstall-local \ + uninstall-nobase_includeHEADERS \ + uninstall-nobase_nodist_includeHEADERS + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ + clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ + ctags distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-exec-local install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-man \ + install-nobase_includeHEADERS \ + install-nobase_nodist_includeHEADERS install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ + pdf-am ps ps-am tags uninstall uninstall-am \ + uninstall-libLTLIBRARIES uninstall-local \ + uninstall-nobase_includeHEADERS \ + uninstall-nobase_nodist_includeHEADERS + + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +alloca.h: alloca.in.h + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + cat $(srcdir)/alloca.in.h; \ + } > $@-t + mv -f $@-t $@ + +# Retrieve values of the variables through 'configure' followed by +# 'make', not directly through 'configure', so that a user who +# sets some of these variables consistently on the 'make' command +# line gets correct results. +# +# One advantage of this approach, compared to the classical +# approach of adding -DLIBDIR=\"$(libdir)\" etc. to AM_CPPFLAGS, +# is that it protects against the use of undefined variables. +# If, say, $(libdir) is not set in the Makefile, LIBDIR is not +# defined by this module, and code using LIBDIR gives a +# compilation error. +# +# Another advantage is that 'make' output is shorter. +# +# Listed in the same order as the GNU makefile conventions. +# The Automake-defined pkg* macros are appended, in the order +# listed in the Automake 1.10a+ documentation. +configmake.h: Makefile + rm -f $@-t + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#define PREFIX "$(prefix)"'; \ + echo '#define EXEC_PREFIX "$(exec_prefix)"'; \ + echo '#define BINDIR "$(bindir)"'; \ + echo '#define SBINDIR "$(sbindir)"'; \ + echo '#define LIBEXECDIR "$(libexecdir)"'; \ + echo '#define DATAROOTDIR "$(datarootdir)"'; \ + echo '#define DATADIR "$(datadir)"'; \ + echo '#define SYSCONFDIR "$(sysconfdir)"'; \ + echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \ + echo '#define LOCALSTATEDIR "$(localstatedir)"'; \ + echo '#define INCLUDEDIR "$(includedir)"'; \ + echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \ + echo '#define DOCDIR "$(docdir)"'; \ + echo '#define INFODIR "$(infodir)"'; \ + echo '#define HTMLDIR "$(htmldir)"'; \ + echo '#define DVIDIR "$(dvidir)"'; \ + echo '#define PDFDIR "$(pdfdir)"'; \ + echo '#define PSDIR "$(psdir)"'; \ + echo '#define LIBDIR "$(libdir)"'; \ + echo '#define LISPDIR "$(lispdir)"'; \ + echo '#define LOCALEDIR "$(localedir)"'; \ + echo '#define MANDIR "$(mandir)"'; \ + echo '#define MANEXT "$(manext)"'; \ + echo '#define PKGDATADIR "$(pkgdatadir)"'; \ + echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \ + echo '#define PKGLIBDIR "$(pkglibdir)"'; \ + echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \ + } | sed '/""/d' > $@-t + if test -f $@ && cmp $@-t $@ > /dev/null; then \ + rm -f $@-t; \ + else \ + rm -f $@; mv $@-t $@; \ + fi + +# We need the following in order to create when the system +# doesn't have one that is POSIX compliant. +errno.h: errno.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ + -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ + -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ + -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ + -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ + -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ + -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ + < $(srcdir)/errno.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +float.h: float.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ + < $(srcdir)/float.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +iconv.h: iconv.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_ICONV_H''@|$(NEXT_ICONV_H)|g' \ + -e 's|@''ICONV_CONST''@|$(ICONV_CONST)|g' \ + -e 's|@''REPLACE_ICONV''@|$(REPLACE_ICONV)|g' \ + -e 's|@''REPLACE_ICONV_OPEN''@|$(REPLACE_ICONV_OPEN)|g' \ + -e 's|@''REPLACE_ICONV_UTF''@|$(REPLACE_ICONV_UTF)|g' \ + < $(srcdir)/iconv.in.h; \ + } > $@-t + mv $@-t $@ + +iconv_open-aix.h: iconv_open-aix.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-aix.gperf > $(srcdir)/iconv_open-aix.h-t + mv $(srcdir)/iconv_open-aix.h-t $(srcdir)/iconv_open-aix.h +iconv_open-hpux.h: iconv_open-hpux.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-hpux.gperf > $(srcdir)/iconv_open-hpux.h-t + mv $(srcdir)/iconv_open-hpux.h-t $(srcdir)/iconv_open-hpux.h +iconv_open-irix.h: iconv_open-irix.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-irix.gperf > $(srcdir)/iconv_open-irix.h-t + mv $(srcdir)/iconv_open-irix.h-t $(srcdir)/iconv_open-irix.h +iconv_open-osf.h: iconv_open-osf.gperf + $(GPERF) -m 10 $(srcdir)/iconv_open-osf.gperf > $(srcdir)/iconv_open-osf.h-t + mv $(srcdir)/iconv_open-osf.h-t $(srcdir)/iconv_open-osf.h + +# We need the following in order to install a simple file in $(libdir) +# which is shared with other installed packages. We use a list of referencing +# packages so that "make uninstall" will remove the file if and only if it +# is not used by another installed package. +# On systems with glibc-2.1 or newer, the file is redundant, therefore we +# avoid installing it. + +all-local: charset.alias ref-add.sed ref-del.sed +install-exec-local: install-exec-localcharset +install-exec-localcharset: all-local + if test $(GLIBC21) = no; then \ + case '$(host_os)' in \ + darwin[56]*) \ + need_charset_alias=true ;; \ + darwin* | cygwin* | mingw* | pw32* | cegcc*) \ + need_charset_alias=false ;; \ + *) \ + need_charset_alias=true ;; \ + esac ; \ + else \ + need_charset_alias=false ; \ + fi ; \ + if $$need_charset_alias; then \ + $(mkinstalldirs) $(DESTDIR)$(libdir) ; \ + fi ; \ + if test -f $(charset_alias); then \ + sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + else \ + if $$need_charset_alias; then \ + sed -f ref-add.sed charset.alias > $(charset_tmp) ; \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \ + rm -f $(charset_tmp) ; \ + fi ; \ + fi + +uninstall-local: uninstall-localcharset +uninstall-localcharset: all-local + if test -f $(charset_alias); then \ + sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \ + if grep '^# Packages using this file: $$' $(charset_tmp) \ + > /dev/null; then \ + rm -f $(charset_alias); \ + else \ + $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \ + fi; \ + rm -f $(charset_tmp); \ + fi + +charset.alias: config.charset + rm -f t-$@ $@ + $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ + mv t-$@ $@ +.sin.sed: + rm -f t-$@ $@ + sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ + mv t-$@ $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +math.h: math.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ + -e 's|@''GNULIB_CEILF''@|$(GNULIB_CEILF)|g' \ + -e 's|@''GNULIB_CEILL''@|$(GNULIB_CEILL)|g' \ + -e 's|@''GNULIB_FLOORF''@|$(GNULIB_FLOORF)|g' \ + -e 's|@''GNULIB_FLOORL''@|$(GNULIB_FLOORL)|g' \ + -e 's|@''GNULIB_FREXP''@|$(GNULIB_FREXP)|g' \ + -e 's|@''GNULIB_FREXPL''@|$(GNULIB_FREXPL)|g' \ + -e 's|@''GNULIB_ISFINITE''@|$(GNULIB_ISFINITE)|g' \ + -e 's|@''GNULIB_ISINF''@|$(GNULIB_ISINF)|g' \ + -e 's|@''GNULIB_ISNAN''@|$(GNULIB_ISNAN)|g' \ + -e 's|@''GNULIB_ISNANF''@|$(GNULIB_ISNANF)|g' \ + -e 's|@''GNULIB_ISNAND''@|$(GNULIB_ISNAND)|g' \ + -e 's|@''GNULIB_ISNANL''@|$(GNULIB_ISNANL)|g' \ + -e 's|@''GNULIB_LDEXPL''@|$(GNULIB_LDEXPL)|g' \ + -e 's|@''GNULIB_MATHL''@|$(GNULIB_MATHL)|g' \ + -e 's|@''GNULIB_ROUND''@|$(GNULIB_ROUND)|g' \ + -e 's|@''GNULIB_ROUNDF''@|$(GNULIB_ROUNDF)|g' \ + -e 's|@''GNULIB_ROUNDL''@|$(GNULIB_ROUNDL)|g' \ + -e 's|@''GNULIB_SIGNBIT''@|$(GNULIB_SIGNBIT)|g' \ + -e 's|@''GNULIB_TRUNC''@|$(GNULIB_TRUNC)|g' \ + -e 's|@''GNULIB_TRUNCF''@|$(GNULIB_TRUNCF)|g' \ + -e 's|@''GNULIB_TRUNCL''@|$(GNULIB_TRUNCL)|g' \ + -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ + -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ + -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ + -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ + -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ + -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ + -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ + -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ + -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ + -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ + -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ + -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ + -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ + -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ + -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ + -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ + -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ + -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ + -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ + -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ + -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ + -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ + -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ + -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ + -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ + -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ + -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ + -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ + -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ + -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ + -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ + -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ + -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \ + -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/math.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works. +stdbool.h: stdbool.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdint.h: stdint.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ + -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ + -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ + -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ + -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \ + -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \ + -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ + -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ + -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ + -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ + -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ + -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ + -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ + -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ + -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ + -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ + -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ + < $(srcdir)/stdint.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +stdlib.h: stdlib.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ + -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ + -e 's|@''GNULIB_MALLOC_POSIX''@|$(GNULIB_MALLOC_POSIX)|g' \ + -e 's|@''GNULIB_REALLOC_POSIX''@|$(GNULIB_REALLOC_POSIX)|g' \ + -e 's|@''GNULIB_CALLOC_POSIX''@|$(GNULIB_CALLOC_POSIX)|g' \ + -e 's|@''GNULIB_ATOLL''@|$(GNULIB_ATOLL)|g' \ + -e 's|@''GNULIB_GETLOADAVG''@|$(GNULIB_GETLOADAVG)|g' \ + -e 's|@''GNULIB_GETSUBOPT''@|$(GNULIB_GETSUBOPT)|g' \ + -e 's|@''GNULIB_MKDTEMP''@|$(GNULIB_MKDTEMP)|g' \ + -e 's|@''GNULIB_MKSTEMP''@|$(GNULIB_MKSTEMP)|g' \ + -e 's|@''GNULIB_PUTENV''@|$(GNULIB_PUTENV)|g' \ + -e 's|@''GNULIB_RANDOM_R''@|$(GNULIB_RANDOM_R)|g' \ + -e 's|@''GNULIB_RPMATCH''@|$(GNULIB_RPMATCH)|g' \ + -e 's|@''GNULIB_SETENV''@|$(GNULIB_SETENV)|g' \ + -e 's|@''GNULIB_STRTOD''@|$(GNULIB_STRTOD)|g' \ + -e 's|@''GNULIB_STRTOLL''@|$(GNULIB_STRTOLL)|g' \ + -e 's|@''GNULIB_STRTOULL''@|$(GNULIB_STRTOULL)|g' \ + -e 's|@''GNULIB_UNSETENV''@|$(GNULIB_UNSETENV)|g' \ + -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ + -e 's|@''HAVE_CALLOC_POSIX''@|$(HAVE_CALLOC_POSIX)|g' \ + -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ + -e 's|@''HAVE_MALLOC_POSIX''@|$(HAVE_MALLOC_POSIX)|g' \ + -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ + -e 's|@''HAVE_REALLOC_POSIX''@|$(HAVE_REALLOC_POSIX)|g' \ + -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ + -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ + -e 's|@''HAVE_SETENV''@|$(HAVE_SETENV)|g' \ + -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ + -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ + -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ + -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ + -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ + -e 's|@''HAVE_UNSETENV''@|$(HAVE_UNSETENV)|g' \ + -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ + -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ + -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ + -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ + -e 's|@''VOID_UNSETENV''@|$(VOID_UNSETENV)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/stdlib.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +string.h: string.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ + -e 's|@''GNULIB_MBSLEN''@|$(GNULIB_MBSLEN)|g' \ + -e 's|@''GNULIB_MBSNLEN''@|$(GNULIB_MBSNLEN)|g' \ + -e 's|@''GNULIB_MBSCHR''@|$(GNULIB_MBSCHR)|g' \ + -e 's|@''GNULIB_MBSRCHR''@|$(GNULIB_MBSRCHR)|g' \ + -e 's|@''GNULIB_MBSSTR''@|$(GNULIB_MBSSTR)|g' \ + -e 's|@''GNULIB_MBSCASECMP''@|$(GNULIB_MBSCASECMP)|g' \ + -e 's|@''GNULIB_MBSNCASECMP''@|$(GNULIB_MBSNCASECMP)|g' \ + -e 's|@''GNULIB_MBSPCASECMP''@|$(GNULIB_MBSPCASECMP)|g' \ + -e 's|@''GNULIB_MBSCASESTR''@|$(GNULIB_MBSCASESTR)|g' \ + -e 's|@''GNULIB_MBSCSPN''@|$(GNULIB_MBSCSPN)|g' \ + -e 's|@''GNULIB_MBSPBRK''@|$(GNULIB_MBSPBRK)|g' \ + -e 's|@''GNULIB_MBSSPN''@|$(GNULIB_MBSSPN)|g' \ + -e 's|@''GNULIB_MBSSEP''@|$(GNULIB_MBSSEP)|g' \ + -e 's|@''GNULIB_MBSTOK_R''@|$(GNULIB_MBSTOK_R)|g' \ + -e 's|@''GNULIB_MEMCHR''@|$(GNULIB_MEMCHR)|g' \ + -e 's|@''GNULIB_MEMMEM''@|$(GNULIB_MEMMEM)|g' \ + -e 's|@''GNULIB_MEMPCPY''@|$(GNULIB_MEMPCPY)|g' \ + -e 's|@''GNULIB_MEMRCHR''@|$(GNULIB_MEMRCHR)|g' \ + -e 's|@''GNULIB_RAWMEMCHR''@|$(GNULIB_RAWMEMCHR)|g' \ + -e 's|@''GNULIB_STPCPY''@|$(GNULIB_STPCPY)|g' \ + -e 's|@''GNULIB_STPNCPY''@|$(GNULIB_STPNCPY)|g' \ + -e 's|@''GNULIB_STRCHRNUL''@|$(GNULIB_STRCHRNUL)|g' \ + -e 's|@''GNULIB_STRDUP''@|$(GNULIB_STRDUP)|g' \ + -e 's|@''GNULIB_STRNDUP''@|$(GNULIB_STRNDUP)|g' \ + -e 's|@''GNULIB_STRNLEN''@|$(GNULIB_STRNLEN)|g' \ + -e 's|@''GNULIB_STRPBRK''@|$(GNULIB_STRPBRK)|g' \ + -e 's|@''GNULIB_STRSEP''@|$(GNULIB_STRSEP)|g' \ + -e 's|@''GNULIB_STRSTR''@|$(GNULIB_STRSTR)|g' \ + -e 's|@''GNULIB_STRCASESTR''@|$(GNULIB_STRCASESTR)|g' \ + -e 's|@''GNULIB_STRTOK_R''@|$(GNULIB_STRTOK_R)|g' \ + -e 's|@''GNULIB_STRERROR''@|$(GNULIB_STRERROR)|g' \ + -e 's|@''GNULIB_STRSIGNAL''@|$(GNULIB_STRSIGNAL)|g' \ + -e 's|@''GNULIB_STRVERSCMP''@|$(GNULIB_STRVERSCMP)|g' \ + -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ + -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ + -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ + -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ + -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ + -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ + -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ + -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ + -e 's|@''HAVE_STRNDUP''@|$(HAVE_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ + -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ + -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ + -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ + -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ + -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ + -e 's|@''HAVE_DECL_STRERROR''@|$(HAVE_DECL_STRERROR)|g' \ + -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ + -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ + -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ + -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ + -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ + -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ + -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ + -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/string.in.h; \ + } > $@-t + mv $@-t $@ + +unicase/locale-languages.h: $(srcdir)/unicase/locale-languages.gperf + $(GPERF) -m 10 $(srcdir)/unicase/locale-languages.gperf > $(srcdir)/unicase/locale-languages.h-t + mv $(srcdir)/unicase/locale-languages.h-t $(srcdir)/unicase/locale-languages.h + +unicase/special-casing-table.h: $(srcdir)/unicase/special-casing-table.gperf + $(GPERF) -m 10 $(srcdir)/unicase/special-casing-table.gperf > $(srcdir)/unicase/special-casing-table.h-t + mv $(srcdir)/unicase/special-casing-table.h-t $(srcdir)/unicase/special-casing-table.h + +unictype/pr_byname.h: unictype/pr_byname.gperf + $(GPERF) -m 10 $(srcdir)/unictype/pr_byname.gperf > $(srcdir)/unictype/pr_byname.h-t + mv $(srcdir)/unictype/pr_byname.h-t $(srcdir)/unictype/pr_byname.h + +unictype/scripts_byname.h: unictype/scripts_byname.gperf + $(GPERF) -m 10 $(srcdir)/unictype/scripts_byname.gperf > $(srcdir)/unictype/scripts_byname.h-t + mv $(srcdir)/unictype/scripts_byname.h-t $(srcdir)/unictype/scripts_byname.h + +uninorm/composition-table.h: $(srcdir)/uninorm/composition-table.gperf + $(GPERF) -m 1 $(srcdir)/uninorm/composition-table.gperf > $(srcdir)/uninorm/composition-table.h-t + mv $(srcdir)/uninorm/composition-table.h-t $(srcdir)/uninorm/composition-table.h + +# We need the following in order to create an empty placeholder for +# when the system doesn't have one. +unistd.h: unistd.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ + -e 's|@''GNULIB_CHOWN''@|$(GNULIB_CHOWN)|g' \ + -e 's|@''GNULIB_CLOSE''@|$(GNULIB_CLOSE)|g' \ + -e 's|@''GNULIB_DUP2''@|$(GNULIB_DUP2)|g' \ + -e 's|@''GNULIB_ENVIRON''@|$(GNULIB_ENVIRON)|g' \ + -e 's|@''GNULIB_EUIDACCESS''@|$(GNULIB_EUIDACCESS)|g' \ + -e 's|@''GNULIB_FCHDIR''@|$(GNULIB_FCHDIR)|g' \ + -e 's|@''GNULIB_FSYNC''@|$(GNULIB_FSYNC)|g' \ + -e 's|@''GNULIB_FTRUNCATE''@|$(GNULIB_FTRUNCATE)|g' \ + -e 's|@''GNULIB_GETCWD''@|$(GNULIB_GETCWD)|g' \ + -e 's|@''GNULIB_GETDOMAINNAME''@|$(GNULIB_GETDOMAINNAME)|g' \ + -e 's|@''GNULIB_GETDTABLESIZE''@|$(GNULIB_GETDTABLESIZE)|g' \ + -e 's|@''GNULIB_GETHOSTNAME''@|$(GNULIB_GETHOSTNAME)|g' \ + -e 's|@''GNULIB_GETLOGIN_R''@|$(GNULIB_GETLOGIN_R)|g' \ + -e 's|@''GNULIB_GETPAGESIZE''@|$(GNULIB_GETPAGESIZE)|g' \ + -e 's|@''GNULIB_GETUSERSHELL''@|$(GNULIB_GETUSERSHELL)|g' \ + -e 's|@''GNULIB_LCHOWN''@|$(GNULIB_LCHOWN)|g' \ + -e 's|@''GNULIB_LINK''@|$(GNULIB_LINK)|g' \ + -e 's|@''GNULIB_LSEEK''@|$(GNULIB_LSEEK)|g' \ + -e 's|@''GNULIB_READLINK''@|$(GNULIB_READLINK)|g' \ + -e 's|@''GNULIB_SLEEP''@|$(GNULIB_SLEEP)|g' \ + -e 's|@''GNULIB_UNISTD_H_SIGPIPE''@|$(GNULIB_UNISTD_H_SIGPIPE)|g' \ + -e 's|@''GNULIB_WRITE''@|$(GNULIB_WRITE)|g' \ + -e 's|@''HAVE_DUP2''@|$(HAVE_DUP2)|g' \ + -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ + -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ + -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ + -e 's|@''HAVE_GETDOMAINNAME''@|$(HAVE_GETDOMAINNAME)|g' \ + -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ + -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ + -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ + -e 's|@''HAVE_GETUSERSHELL''@|$(HAVE_GETUSERSHELL)|g' \ + -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ + -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ + -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ + -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ + -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ + -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ + -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ + -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ + -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ + -e 's|@''REPLACE_FCHDIR''@|$(REPLACE_FCHDIR)|g' \ + -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ + -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ + -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ + -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ + -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ + -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/unistd.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# version does not work standalone. +wchar.h: wchar.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ + -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ + -e 's|@''GNULIB_BTOWC''@|$(GNULIB_BTOWC)|g' \ + -e 's|@''GNULIB_WCTOB''@|$(GNULIB_WCTOB)|g' \ + -e 's|@''GNULIB_MBSINIT''@|$(GNULIB_MBSINIT)|g' \ + -e 's|@''GNULIB_MBRTOWC''@|$(GNULIB_MBRTOWC)|g' \ + -e 's|@''GNULIB_MBRLEN''@|$(GNULIB_MBRLEN)|g' \ + -e 's|@''GNULIB_MBSRTOWCS''@|$(GNULIB_MBSRTOWCS)|g' \ + -e 's|@''GNULIB_MBSNRTOWCS''@|$(GNULIB_MBSNRTOWCS)|g' \ + -e 's|@''GNULIB_WCRTOMB''@|$(GNULIB_WCRTOMB)|g' \ + -e 's|@''GNULIB_WCSRTOMBS''@|$(GNULIB_WCSRTOMBS)|g' \ + -e 's|@''GNULIB_WCSNRTOMBS''@|$(GNULIB_WCSNRTOMBS)|g' \ + -e 's|@''GNULIB_WCWIDTH''@|$(GNULIB_WCWIDTH)|g' \ + -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ + -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ + -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ + -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ + -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ + -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ + -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ + -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ + -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ + -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ + -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ + -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ + -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ + -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ + -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ + -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ + -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ + -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ + -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ + -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ + -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ + -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ + -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ + -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ + -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ + < $(srcdir)/wchar.in.h; \ + } > $@-t + mv $@-t $@ + +# We need the following in order to create when the system +# doesn't have one that works with the given compiler. +wctype.h: wctype.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + sed -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ + -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ + -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ + -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ + -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ + < $(srcdir)/wctype.in.h; \ + } > $@-t + mv $@-t $@ + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : + +# Produce an unistring/stdbool.h that is not compiler dependent. +# GCC >= 2.95 has . +# AIX >= 5.3 has . +# Solaris 10 and some HP-UX 11 versions have but it does not +# necessarily work. +unistring/stdbool.h : $(STDBOOL_H) + @MKDIR_P@ unistring + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#if !defined _GL_STDBOOL_H'; \ + if test -f /usr/include/stdbool.h; then \ + echo '#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) || defined _AIX'; \ + else \ + echo '#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95))'; \ + fi; \ + echo '#include '; \ + echo '#else'; \ + cat $(srcdir)/stdbool.mini.h; \ + echo '#endif'; \ + echo '#endif'; \ + } > $@-t + mv $@-t $@ + +# Produce an unistring/stdint.h that is not compiler dependent. +# Glibc >= 2 has . +# On most other platforms that have it, it is buggy in one way or the other. +unistring/stdint.h : $(STDINT_H) stdint.mini.h + @MKDIR_P@ unistring + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + echo '#include '; \ + echo '#if __GLIBC__ >= 2'; \ + echo '#include '; \ + echo '#else'; \ + if test -f /usr/include/stdint.h; then \ + HAVE_STDINT_H='1'; \ + else \ + HAVE_STDINT_H='defined __MINGW32__ || defined __HAIKU__'; \ + fi; \ + if test -f /usr/include/inttypes.h; then \ + HAVE_INTTYPES_H='1'; \ + else \ + HAVE_INTTYPES_H='defined __MINGW32__ || defined __HAIKU__'; \ + fi; \ + if test -f /usr/include/sys/inttypes.h; then \ + HAVE_SYS_INTTYPES_H='1'; \ + else \ + HAVE_SYS_INTTYPES_H='0'; \ + fi; \ + sed -e 's/@''HAVE_STDINT_H''@/'"$$HAVE_STDINT_H"'/g' \ + -e 's|@''INCLUDE_NEXT''@|include|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@||g' \ + -e 's|@''NEXT_STDINT_H''@||g' \ + -e 's/@''HAVE_SYS_TYPES_H''@/1/g' \ + -e 's/@''HAVE_INTTYPES_H''@/'"$$HAVE_INTTYPES_H"'/g' \ + -e 's/@''HAVE_SYS_INTTYPES_H''@/'"$$HAVE_SYS_INTTYPES_H"'/g' \ + -e 's/@''HAVE_SYS_BITYPES_H''@/0/g' \ + < $(srcdir)/stdint.mini.h; \ + echo '#endif'; \ + } > $@-t + mv $@-t $@ +unistring/localcharset.h : localcharset.h + @MKDIR_P@ unistring + rm -f $@-t $@ + cp $(srcdir)/localcharset.h $@-t + mv $@-t $@ +unistring/iconveh.h : iconveh.h + @MKDIR_P@ unistring + rm -f $@-t $@ + cp $(srcdir)/iconveh.h $@-t + mv $@-t $@ +clean-local: clean-generic + @for dir in '' $(CLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + if test '$(srcdir)' != '.'; then \ + for dir in '' $(CLEANDIRS_NOT_IN_SRCDIR); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + fi; \ + : + +# List of exported symbols. +# We extract it from the header files that get installed, removing symbols +# start with "_UC". +# This file has the same format as the one expected by the libtool option +# '-export-symbols', but we don't use this option, because it would prevent us +# from building some of the gnulib unit tests. +libunistring.sym : $(HEADERS_WITH_EXTERNS) + for f in $(HEADERS_WITH_EXTERNS); do cat $(srcdir)/$$f; done \ + | $(srcdir)/declared.sh | LC_ALL=C sort | LC_ALL=C uniq \ + | grep -v '^_UC' \ + > $@-t + mv $@-t $@ + +# Hide undesired symbols that are defined by libunistring_la_SOURCES or +# libunistring_la_LIBADD from the global namespace, by prefixing them with +# "libunistring_". +all check install: config.h +config.h: $(BUILT_SOURCES) libunistring.sym + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ + : "Avoid double inclusion, to avoid a warning about redefinitions."; \ + echo '#ifndef UNISTRING_CONFIG_H'; \ + echo '#define UNISTRING_CONFIG_H'; \ + echo; \ + echo '#include "../config.h"'; \ + echo; \ + echo '#endif /* UNISTRING_CONFIG_H */'; \ + } > config.h && \ + if test -n "$(NAMESPACING)" && test -n "$(HAVE_GLOBAL_SYMBOL_PIPE)"; then \ + { \ + { \ + for f in $(libunistring_la_SOURCES) $(libunistring_la_LIBADD); do \ + case $$f in \ + *.res.lo ) ;; \ + *.c | *.$(OBJEXT) | *.lo ) \ + sf=`echo "$$f" | sed -e 's,\\.[^.]*$$,,'`.c; \ + test -f $$sf || sf=$(srcdir)/$$sf; \ + of=`echo "$$f" | sed -e 's,^.*/,,' -e 's,\\.[^.]*$$,,'`.$(OBJEXT); \ + echo "$(COMPILE) -c $$sf" 1>&6; \ + $(COMPILE) -c $$sf || { rm -f config.h; exit 1; }; \ + sh ./exported.sh $$of 1>&5; \ + rm -f $$of `echo "$$of" | sed -e 's,\\.$(OBJEXT)$$,.lo,'`; \ + ;; \ + esac; \ + done; \ + } 5>&1 \ + | sed -e 's,.* ,,' | LC_ALL=C sort | LC_ALL=C uniq \ + | { \ + if test -f libunistring.sym; then \ + symfile='libunistring.sym'; \ + else \ + symfile='$(srcdir)/libunistring.sym'; \ + fi; \ + LC_ALL=C join -v 1 - $$symfile; \ + } \ + | sed -e 's,^\(.*\)$$,#define \1 libunistring_\1,' > config.h-t; \ + } 6>&1 && \ + if test -f config.h; then \ + cat config.h-t >> config.h; \ + rm -f config.h-t; \ + else \ + rm -f config.h-t; \ + exit 1; \ + fi \ + fi +@WOE32_TRUE@libunistring.res.lo : $(srcdir)/libunistring.rc +@WOE32_TRUE@ $(LIBTOOL) --tag=RC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(RC) `$(SHELL) $(top_srcdir)/build-aux/windres-options --escape $(VERSION)` -i $(srcdir)/libunistring.rc -o libunistring.res.lo --output-format=coff + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/lib/alloca.in.h b/lib/alloca.in.h new file mode 100644 index 00000000..3d4f88b3 --- /dev/null +++ b/lib/alloca.in.h @@ -0,0 +1,56 @@ +/* Memory allocation on the stack. + + Copyright (C) 1995, 1999, 2001-2004, 2006-2008 Free Software + Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA. */ + +/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H + means there is a real alloca function. */ +#ifndef _GL_ALLOCA_H +#define _GL_ALLOCA_H + +/* alloca (N) returns a pointer to N bytes of memory + allocated on the stack, which will last until the function returns. + Use of alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns, + - for huge N (say, N >= 65536) - you never know how large (or small) + the stack is, and when the stack cannot fulfill the memory allocation + request, the program just crashes. + */ + +#ifndef alloca +# ifdef __GNUC__ +# define alloca __builtin_alloca +# elif defined _AIX +# define alloca __alloca +# elif defined _MSC_VER +# include +# define alloca _alloca +# elif defined __DECC && defined __VMS +# define alloca __ALLOCA +# else +# include +# ifdef __cplusplus +extern "C" +# endif +void *alloca (size_t); +# endif +#endif + +#endif /* _GL_ALLOCA_H */ diff --git a/lib/array-mergesort.h b/lib/array-mergesort.h new file mode 100644 index 00000000..3988d289 --- /dev/null +++ b/lib/array-mergesort.h @@ -0,0 +1,274 @@ +/* Stable-sorting of an array using mergesort. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* This file implements stable sorting of an array, using the mergesort + algorithm. + Worst-case running time for an array of length N is O(N log N). + Unlike the mpsort module, the algorithm here attempts to minimize not + only the number of comparisons, but also the number of copying operations. + + Before including this file, you need to define + ELEMENT The type of every array element. + COMPARE A two-argument macro that takes two 'const ELEMENT *' + pointers and returns a negative, zero, or positive 'int' + value if the element pointed to by the first argument is, + respectively, less, equal, or greater than the element + pointed to by the second argument. + STATIC The storage class of the functions being defined. + Before including this file, you also need to include: + #include + */ + +/* Merge the sorted arrays src1[0..n1-1] and src2[0..n2-1] into + dst[0..n1+n2-1]. In case of ambiguity, put the elements of src1 + before the elements of src2. + n1 and n2 must be > 0. + The arrays src1 and src2 must not overlap the dst array, except that + src1 may be dst[n2..n1+n2-1], or src2 may be dst[n1..n1+n2-1]. */ +static void +merge (const ELEMENT *src1, size_t n1, + const ELEMENT *src2, size_t n2, + ELEMENT *dst) +{ + for (;;) /* while (n1 > 0 && n2 > 0) */ + { + if (COMPARE (src1, src2) <= 0) + { + *dst++ = *src1++; + n1--; + if (n1 == 0) + break; + } + else + { + *dst++ = *src2++; + n2--; + if (n2 == 0) + break; + } + } + /* Here n1 == 0 || n2 == 0 but also n1 > 0 || n2 > 0. */ + if (n1 > 0) + { + if (dst != src1) + do + { + *dst++ = *src1++; + n1--; + } + while (n1 > 0); + } + else /* n2 > 0 */ + { + if (dst != src2) + do + { + *dst++ = *src2++; + n2--; + } + while (n2 > 0); + } +} + +/* Sort src[0..n-1] into dst[0..n-1], using tmp[0..n/2-1] as temporary + (scratch) storage. + The arrays src, dst, tmp must not overlap. */ +STATIC void +merge_sort_fromto (const ELEMENT *src, ELEMENT *dst, size_t n, ELEMENT *tmp) +{ + switch (n) + { + case 0: + return; + case 1: + /* Nothing to do. */ + dst[0] = src[0]; + return; + case 2: + /* Trivial case. */ + if (COMPARE (&src[0], &src[1]) <= 0) + { + /* src[0] <= src[1] */ + dst[0] = src[0]; + dst[1] = src[1]; + } + else + { + dst[0] = src[1]; + dst[1] = src[0]; + } + break; + case 3: + /* Simple case. */ + if (COMPARE (&src[0], &src[1]) <= 0) + { + if (COMPARE (&src[1], &src[2]) <= 0) + { + /* src[0] <= src[1] <= src[2] */ + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + } + else if (COMPARE (&src[0], &src[2]) <= 0) + { + /* src[0] <= src[2] < src[1] */ + dst[0] = src[0]; + dst[1] = src[2]; + dst[2] = src[1]; + } + else + { + /* src[2] < src[0] <= src[1] */ + dst[0] = src[2]; + dst[1] = src[0]; + dst[2] = src[1]; + } + } + else + { + if (COMPARE (&src[0], &src[2]) <= 0) + { + /* src[1] < src[0] <= src[2] */ + dst[0] = src[1]; + dst[1] = src[0]; + dst[2] = src[2]; + } + else if (COMPARE (&src[1], &src[2]) <= 0) + { + /* src[1] <= src[2] < src[0] */ + dst[0] = src[1]; + dst[1] = src[2]; + dst[2] = src[0]; + } + else + { + /* src[2] < src[1] < src[0] */ + dst[0] = src[2]; + dst[1] = src[1]; + dst[2] = src[0]; + } + } + break; + default: + { + size_t n1 = n / 2; + size_t n2 = (n + 1) / 2; + /* Note: n1 + n2 = n, n1 <= n2. */ + /* Sort src[n1..n-1] into dst[n1..n-1], scratching tmp[0..n2/2-1]. */ + merge_sort_fromto (src + n1, dst + n1, n2, tmp); + /* Sort src[0..n1-1] into tmp[0..n1-1], scratching dst[0..n1-1]. */ + merge_sort_fromto (src, tmp, n1, dst); + /* Merge the two half results. */ + merge (tmp, n1, dst + n1, n2, dst); + } + break; + } +} + +/* Sort src[0..n-1], using tmp[0..n-1] as temporary (scratch) storage. + The arrays src, tmp must not overlap. */ +STATIC void +merge_sort_inplace (ELEMENT *src, size_t n, ELEMENT *tmp) +{ + switch (n) + { + case 0: + case 1: + /* Nothing to do. */ + return; + case 2: + /* Trivial case. */ + if (COMPARE (&src[0], &src[1]) <= 0) + { + /* src[0] <= src[1] */ + } + else + { + ELEMENT t = src[0]; + src[0] = src[1]; + src[1] = t; + } + break; + case 3: + /* Simple case. */ + if (COMPARE (&src[0], &src[1]) <= 0) + { + if (COMPARE (&src[1], &src[2]) <= 0) + { + /* src[0] <= src[1] <= src[2] */ + } + else if (COMPARE (&src[0], &src[2]) <= 0) + { + /* src[0] <= src[2] < src[1] */ + ELEMENT t = src[1]; + src[1] = src[2]; + src[2] = t; + } + else + { + /* src[2] < src[0] <= src[1] */ + ELEMENT t = src[0]; + src[0] = src[2]; + src[2] = src[1]; + src[1] = t; + } + } + else + { + if (COMPARE (&src[0], &src[2]) <= 0) + { + /* src[1] < src[0] <= src[2] */ + ELEMENT t = src[0]; + src[0] = src[1]; + src[1] = t; + } + else if (COMPARE (&src[1], &src[2]) <= 0) + { + /* src[1] <= src[2] < src[0] */ + ELEMENT t = src[0]; + src[0] = src[1]; + src[1] = src[2]; + src[2] = t; + } + else + { + /* src[2] < src[1] < src[0] */ + ELEMENT t = src[0]; + src[0] = src[2]; + src[2] = t; + } + } + break; + default: + { + size_t n1 = n / 2; + size_t n2 = (n + 1) / 2; + /* Note: n1 + n2 = n, n1 <= n2. */ + /* Sort src[n1..n-1], scratching tmp[0..n2-1]. */ + merge_sort_inplace (src + n1, n2, tmp); + /* Sort src[0..n1-1] into tmp[0..n1-1], scratching tmp[n1..2*n1-1]. */ + merge_sort_fromto (src, tmp, n1, tmp + n1); + /* Merge the two half results. */ + merge (tmp, n1, src + n1, n2, src); + } + break; + } +} + +#undef ELEMENT +#undef COMPARE +#undef STATIC diff --git a/lib/c-ctype.c b/lib/c-ctype.c new file mode 100644 index 00000000..e36a5134 --- /dev/null +++ b/lib/c-ctype.c @@ -0,0 +1,396 @@ +/* Character handling in C locale. + + Copyright 2000-2003, 2006 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#define NO_C_CTYPE_MACROS +#include "c-ctype.h" + +/* The function isascii is not locale dependent. Its use in EBCDIC is + questionable. */ +bool +c_isascii (int c) +{ + return (c >= 0x00 && c <= 0x7f); +} + +bool +c_isalnum (int c) +{ +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII + return ((c >= '0' && c <= '9') + || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')); +#else + return ((c >= '0' && c <= '9') + || (c >= 'A' && c <= 'Z') + || (c >= 'a' && c <= 'z')); +#endif +#else + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isalpha (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII + return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'); +#else + return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')); +#endif +#else + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isblank (int c) +{ + return (c == ' ' || c == '\t'); +} + +bool +c_iscntrl (int c) +{ +#if C_CTYPE_ASCII + return ((c & ~0x1f) == 0 || c == 0x7f); +#else + switch (c) + { + case ' ': case '!': case '"': case '#': case '$': case '%': + case '&': case '\'': case '(': case ')': case '*': case '+': + case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': case '?': + case '@': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case '[': case '\\': case ']': case '^': case '_': case '`': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case '{': case '|': case '}': case '~': + return 0; + default: + return 1; + } +#endif +} + +bool +c_isdigit (int c) +{ +#if C_CTYPE_CONSECUTIVE_DIGITS + return (c >= '0' && c <= '9'); +#else + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + return 1; + default: + return 0; + } +#endif +} + +bool +c_islower (int c) +{ +#if C_CTYPE_CONSECUTIVE_LOWERCASE + return (c >= 'a' && c <= 'z'); +#else + switch (c) + { + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isgraph (int c) +{ +#if C_CTYPE_ASCII + return (c >= '!' && c <= '~'); +#else + switch (c) + { + case '!': case '"': case '#': case '$': case '%': case '&': + case '\'': case '(': case ')': case '*': case '+': case ',': + case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': case '?': + case '@': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case '[': case '\\': case ']': case '^': case '_': case '`': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case '{': case '|': case '}': case '~': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isprint (int c) +{ +#if C_CTYPE_ASCII + return (c >= ' ' && c <= '~'); +#else + switch (c) + { + case ' ': case '!': case '"': case '#': case '$': case '%': + case '&': case '\'': case '(': case ')': case '*': case '+': + case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': case '?': + case '@': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case '[': case '\\': case ']': case '^': case '_': case '`': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case '{': case '|': case '}': case '~': + return 1; + default: + return 0; + } +#endif +} + +bool +c_ispunct (int c) +{ +#if C_CTYPE_ASCII + return ((c >= '!' && c <= '~') + && !((c >= '0' && c <= '9') + || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'))); +#else + switch (c) + { + case '!': case '"': case '#': case '$': case '%': case '&': + case '\'': case '(': case ')': case '*': case '+': case ',': + case '-': case '.': case '/': + case ':': case ';': case '<': case '=': case '>': case '?': + case '@': + case '[': case '\\': case ']': case '^': case '_': case '`': + case '{': case '|': case '}': case '~': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isspace (int c) +{ + return (c == ' ' || c == '\t' + || c == '\n' || c == '\v' || c == '\f' || c == '\r'); +} + +bool +c_isupper (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE + return (c >= 'A' && c <= 'Z'); +#else + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + return 1; + default: + return 0; + } +#endif +} + +bool +c_isxdigit (int c) +{ +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII + return ((c >= '0' && c <= '9') + || ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F')); +#else + return ((c >= '0' && c <= '9') + || (c >= 'A' && c <= 'F') + || (c >= 'a' && c <= 'f')); +#endif +#else + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + return 1; + default: + return 0; + } +#endif +} + +int +c_tolower (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE + return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c); +#else + switch (c) + { + case 'A': return 'a'; + case 'B': return 'b'; + case 'C': return 'c'; + case 'D': return 'd'; + case 'E': return 'e'; + case 'F': return 'f'; + case 'G': return 'g'; + case 'H': return 'h'; + case 'I': return 'i'; + case 'J': return 'j'; + case 'K': return 'k'; + case 'L': return 'l'; + case 'M': return 'm'; + case 'N': return 'n'; + case 'O': return 'o'; + case 'P': return 'p'; + case 'Q': return 'q'; + case 'R': return 'r'; + case 'S': return 's'; + case 'T': return 't'; + case 'U': return 'u'; + case 'V': return 'v'; + case 'W': return 'w'; + case 'X': return 'x'; + case 'Y': return 'y'; + case 'Z': return 'z'; + default: return c; + } +#endif +} + +int +c_toupper (int c) +{ +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE + return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c); +#else + switch (c) + { + case 'a': return 'A'; + case 'b': return 'B'; + case 'c': return 'C'; + case 'd': return 'D'; + case 'e': return 'E'; + case 'f': return 'F'; + case 'g': return 'G'; + case 'h': return 'H'; + case 'i': return 'I'; + case 'j': return 'J'; + case 'k': return 'K'; + case 'l': return 'L'; + case 'm': return 'M'; + case 'n': return 'N'; + case 'o': return 'O'; + case 'p': return 'P'; + case 'q': return 'Q'; + case 'r': return 'R'; + case 's': return 'S'; + case 't': return 'T'; + case 'u': return 'U'; + case 'v': return 'V'; + case 'w': return 'W'; + case 'x': return 'X'; + case 'y': return 'Y'; + case 'z': return 'Z'; + default: return c; + } +#endif +} diff --git a/lib/c-ctype.h b/lib/c-ctype.h new file mode 100644 index 00000000..d7b067e8 --- /dev/null +++ b/lib/c-ctype.h @@ -0,0 +1,295 @@ +/* Character handling in C locale. + + These functions work like the corresponding functions in , + except that they have the C (POSIX) locale hardwired, whereas the + functions' behaviour depends on the current locale set via + setlocale. + + Copyright (C) 2000-2003, 2006, 2008 Free Software Foundation, Inc. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program; if not, write to the Free Software Foundation, +Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef C_CTYPE_H +#define C_CTYPE_H + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* The functions defined in this file assume the "C" locale and a character + set without diacritics (ASCII-US or EBCDIC-US or something like that). + Even if the "C" locale on a particular system is an extension of the ASCII + character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it + is ISO-8859-1), the functions in this file recognize only the ASCII + characters. */ + + +/* Check whether the ASCII optimizations apply. */ + +/* ANSI C89 (and ISO C99 5.2.1.3 too) already guarantees that + '0', '1', ..., '9' have consecutive integer values. */ +#define C_CTYPE_CONSECUTIVE_DIGITS 1 + +#if ('A' <= 'Z') \ + && ('A' + 1 == 'B') && ('B' + 1 == 'C') && ('C' + 1 == 'D') \ + && ('D' + 1 == 'E') && ('E' + 1 == 'F') && ('F' + 1 == 'G') \ + && ('G' + 1 == 'H') && ('H' + 1 == 'I') && ('I' + 1 == 'J') \ + && ('J' + 1 == 'K') && ('K' + 1 == 'L') && ('L' + 1 == 'M') \ + && ('M' + 1 == 'N') && ('N' + 1 == 'O') && ('O' + 1 == 'P') \ + && ('P' + 1 == 'Q') && ('Q' + 1 == 'R') && ('R' + 1 == 'S') \ + && ('S' + 1 == 'T') && ('T' + 1 == 'U') && ('U' + 1 == 'V') \ + && ('V' + 1 == 'W') && ('W' + 1 == 'X') && ('X' + 1 == 'Y') \ + && ('Y' + 1 == 'Z') +#define C_CTYPE_CONSECUTIVE_UPPERCASE 1 +#endif + +#if ('a' <= 'z') \ + && ('a' + 1 == 'b') && ('b' + 1 == 'c') && ('c' + 1 == 'd') \ + && ('d' + 1 == 'e') && ('e' + 1 == 'f') && ('f' + 1 == 'g') \ + && ('g' + 1 == 'h') && ('h' + 1 == 'i') && ('i' + 1 == 'j') \ + && ('j' + 1 == 'k') && ('k' + 1 == 'l') && ('l' + 1 == 'm') \ + && ('m' + 1 == 'n') && ('n' + 1 == 'o') && ('o' + 1 == 'p') \ + && ('p' + 1 == 'q') && ('q' + 1 == 'r') && ('r' + 1 == 's') \ + && ('s' + 1 == 't') && ('t' + 1 == 'u') && ('u' + 1 == 'v') \ + && ('v' + 1 == 'w') && ('w' + 1 == 'x') && ('x' + 1 == 'y') \ + && ('y' + 1 == 'z') +#define C_CTYPE_CONSECUTIVE_LOWERCASE 1 +#endif + +#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) +/* The character set is ASCII or one of its variants or extensions, not EBCDIC. + Testing the value of '\n' and '\r' is not relevant. */ +#define C_CTYPE_ASCII 1 +#endif + + +/* Function declarations. */ + +/* Unlike the functions in , which require an argument in the range + of the 'unsigned char' type, the functions here operate on values that are + in the 'unsigned char' range or in the 'char' range. In other words, + when you have a 'char' value, you need to cast it before using it as + argument to a function: + + const char *s = ...; + if (isalpha ((unsigned char) *s)) ... + + but you don't need to cast it for the functions defined in this file: + + const char *s = ...; + if (c_isalpha (*s)) ... + */ + +extern bool c_isascii (int c); /* not locale dependent */ + +extern bool c_isalnum (int c); +extern bool c_isalpha (int c); +extern bool c_isblank (int c); +extern bool c_iscntrl (int c); +extern bool c_isdigit (int c); +extern bool c_islower (int c); +extern bool c_isgraph (int c); +extern bool c_isprint (int c); +extern bool c_ispunct (int c); +extern bool c_isspace (int c); +extern bool c_isupper (int c); +extern bool c_isxdigit (int c); + +extern int c_tolower (int c); +extern int c_toupper (int c); + + +#if defined __GNUC__ && defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && !defined NO_C_CTYPE_MACROS + +/* ASCII optimizations. */ + +#undef c_isascii +#define c_isascii(c) \ + ({ int __c = (c); \ + (__c >= 0x00 && __c <= 0x7f); \ + }) + +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII +#undef c_isalnum +#define c_isalnum(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z')); \ + }) +#else +#undef c_isalnum +#define c_isalnum(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || (__c >= 'A' && __c <= 'Z') \ + || (__c >= 'a' && __c <= 'z')); \ + }) +#endif +#endif + +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII +#undef c_isalpha +#define c_isalpha(c) \ + ({ int __c = (c); \ + ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'Z'); \ + }) +#else +#undef c_isalpha +#define c_isalpha(c) \ + ({ int __c = (c); \ + ((__c >= 'A' && __c <= 'Z') || (__c >= 'a' && __c <= 'z')); \ + }) +#endif +#endif + +#undef c_isblank +#define c_isblank(c) \ + ({ int __c = (c); \ + (__c == ' ' || __c == '\t'); \ + }) + +#if C_CTYPE_ASCII +#undef c_iscntrl +#define c_iscntrl(c) \ + ({ int __c = (c); \ + ((__c & ~0x1f) == 0 || __c == 0x7f); \ + }) +#endif + +#if C_CTYPE_CONSECUTIVE_DIGITS +#undef c_isdigit +#define c_isdigit(c) \ + ({ int __c = (c); \ + (__c >= '0' && __c <= '9'); \ + }) +#endif + +#if C_CTYPE_CONSECUTIVE_LOWERCASE +#undef c_islower +#define c_islower(c) \ + ({ int __c = (c); \ + (__c >= 'a' && __c <= 'z'); \ + }) +#endif + +#if C_CTYPE_ASCII +#undef c_isgraph +#define c_isgraph(c) \ + ({ int __c = (c); \ + (__c >= '!' && __c <= '~'); \ + }) +#endif + +#if C_CTYPE_ASCII +#undef c_isprint +#define c_isprint(c) \ + ({ int __c = (c); \ + (__c >= ' ' && __c <= '~'); \ + }) +#endif + +#if C_CTYPE_ASCII +#undef c_ispunct +#define c_ispunct(c) \ + ({ int _c = (c); \ + (c_isgraph (_c) && ! c_isalnum (_c)); \ + }) +#endif + +#undef c_isspace +#define c_isspace(c) \ + ({ int __c = (c); \ + (__c == ' ' || __c == '\t' \ + || __c == '\n' || __c == '\v' || __c == '\f' || __c == '\r'); \ + }) + +#if C_CTYPE_CONSECUTIVE_UPPERCASE +#undef c_isupper +#define c_isupper(c) \ + ({ int __c = (c); \ + (__c >= 'A' && __c <= 'Z'); \ + }) +#endif + +#if C_CTYPE_CONSECUTIVE_DIGITS \ + && C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#if C_CTYPE_ASCII +#undef c_isxdigit +#define c_isxdigit(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || ((__c & ~0x20) >= 'A' && (__c & ~0x20) <= 'F')); \ + }) +#else +#undef c_isxdigit +#define c_isxdigit(c) \ + ({ int __c = (c); \ + ((__c >= '0' && __c <= '9') \ + || (__c >= 'A' && __c <= 'F') \ + || (__c >= 'a' && __c <= 'f')); \ + }) +#endif +#endif + +#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +#undef c_tolower +#define c_tolower(c) \ + ({ int __c = (c); \ + (__c >= 'A' && __c <= 'Z' ? __c - 'A' + 'a' : __c); \ + }) +#undef c_toupper +#define c_toupper(c) \ + ({ int __c = (c); \ + (__c >= 'a' && __c <= 'z' ? __c - 'a' + 'A' : __c); \ + }) +#endif + +#endif /* optimizing for speed */ + + +#ifdef __cplusplus +} +#endif + +#endif /* C_CTYPE_H */ diff --git a/lib/c-strcase.h b/lib/c-strcase.h new file mode 100644 index 00000000..714a3c62 --- /dev/null +++ b/lib/c-strcase.h @@ -0,0 +1,55 @@ +/* Case-insensitive string comparison functions in C locale. + Copyright (C) 1995-1996, 2001, 2003, 2005 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef C_STRCASE_H +#define C_STRCASE_H + +#include + + +/* The functions defined in this file assume the "C" locale and a character + set without diacritics (ASCII-US or EBCDIC-US or something like that). + Even if the "C" locale on a particular system is an extension of the ASCII + character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it + is ISO-8859-1), the functions in this file recognize only the ASCII + characters. More precisely, one of the string arguments must be an ASCII + string; the other one can also contain non-ASCII characters (but then + the comparison result will be nonzero). */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compare strings S1 and S2, ignoring case, returning less than, equal to or + greater than zero if S1 is lexicographically less than, equal to or greater + than S2. */ +extern int c_strcasecmp (const char *s1, const char *s2); + +/* Compare no more than N characters of strings S1 and S2, ignoring case, + returning less than, equal to or greater than zero if S1 is + lexicographically less than, equal to or greater than S2. */ +extern int c_strncasecmp (const char *s1, const char *s2, size_t n); + + +#ifdef __cplusplus +} +#endif + + +#endif /* C_STRCASE_H */ diff --git a/lib/c-strcasecmp.c b/lib/c-strcasecmp.c new file mode 100644 index 00000000..a5238988 --- /dev/null +++ b/lib/c-strcasecmp.c @@ -0,0 +1,57 @@ +/* c-strcasecmp.c -- case insensitive string comparator in C locale + Copyright (C) 1998-1999, 2005-2006 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#include "c-strcase.h" + +#include + +#include "c-ctype.h" + +int +c_strcasecmp (const char *s1, const char *s2) +{ + register const unsigned char *p1 = (const unsigned char *) s1; + register const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2) + return 0; + + do + { + c1 = c_tolower (*p1); + c2 = c_tolower (*p2); + + if (c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); +} diff --git a/lib/c-strcaseeq.h b/lib/c-strcaseeq.h new file mode 100644 index 00000000..cd29b66c --- /dev/null +++ b/lib/c-strcaseeq.h @@ -0,0 +1,184 @@ +/* Optimized case-insensitive string comparison in C locale. + Copyright (C) 2001-2002, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include "c-strcase.h" +#include "c-ctype.h" + +/* STRCASEEQ allows to optimize string comparison with a small literal string. + STRCASEEQ (s, "UTF-8", 'U','T','F','-','8',0,0,0,0) + is semantically equivalent to + c_strcasecmp (s, "UTF-8") == 0 + just faster. */ + +/* Help GCC to generate good code for string comparisons with + immediate strings. */ +#if defined (__GNUC__) && defined (__OPTIMIZE__) + +/* Case insensitive comparison of ASCII characters. */ +# if C_CTYPE_ASCII +# define CASEEQ(other,upper) \ + (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper)) +# elif C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE +# define CASEEQ(other,upper) \ + (c_isupper (upper) ? (other) == (upper) || (other) == (upper) - 'A' + 'a' : (other) == (upper)) +# else +# define CASEEQ(other,upper) \ + (c_toupper (other) == (upper)) +# endif + +static inline int +strcaseeq9 (const char *s1, const char *s2) +{ + return c_strcasecmp (s1 + 9, s2 + 9) == 0; +} + +static inline int +strcaseeq8 (const char *s1, const char *s2, char s28) +{ + if (CASEEQ (s1[8], s28)) + { + if (s28 == 0) + return 1; + else + return strcaseeq9 (s1, s2); + } + else + return 0; +} + +static inline int +strcaseeq7 (const char *s1, const char *s2, char s27, char s28) +{ + if (CASEEQ (s1[7], s27)) + { + if (s27 == 0) + return 1; + else + return strcaseeq8 (s1, s2, s28); + } + else + return 0; +} + +static inline int +strcaseeq6 (const char *s1, const char *s2, char s26, char s27, char s28) +{ + if (CASEEQ (s1[6], s26)) + { + if (s26 == 0) + return 1; + else + return strcaseeq7 (s1, s2, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[5], s25)) + { + if (s25 == 0) + return 1; + else + return strcaseeq6 (s1, s2, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[4], s24)) + { + if (s24 == 0) + return 1; + else + return strcaseeq5 (s1, s2, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[3], s23)) + { + if (s23 == 0) + return 1; + else + return strcaseeq4 (s1, s2, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[2], s22)) + { + if (s22 == 0) + return 1; + else + return strcaseeq3 (s1, s2, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[1], s21)) + { + if (s21 == 0) + return 1; + else + return strcaseeq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +strcaseeq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (CASEEQ (s1[0], s20)) + { + if (s20 == 0) + return 1; + else + return strcaseeq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + strcaseeq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) + +#else + +#define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + (c_strcasecmp (s1, s2) == 0) + +#endif diff --git a/lib/c-strncasecmp.c b/lib/c-strncasecmp.c new file mode 100644 index 00000000..c1496ca4 --- /dev/null +++ b/lib/c-strncasecmp.c @@ -0,0 +1,57 @@ +/* c-strncasecmp.c -- case insensitive string comparator in C locale + Copyright (C) 1998-1999, 2005-2006 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#include "c-strcase.h" + +#include + +#include "c-ctype.h" + +int +c_strncasecmp (const char *s1, const char *s2, size_t n) +{ + register const unsigned char *p1 = (const unsigned char *) s1; + register const unsigned char *p2 = (const unsigned char *) s2; + unsigned char c1, c2; + + if (p1 == p2 || n == 0) + return 0; + + do + { + c1 = c_tolower (*p1); + c2 = c_tolower (*p2); + + if (--n == 0 || c1 == '\0') + break; + + ++p1; + ++p2; + } + while (c1 == c2); + + if (UCHAR_MAX <= INT_MAX) + return c1 - c2; + else + /* On machines where 'char' and 'int' are types of the same size, the + difference of two 'unsigned char' values - including the sign bit - + doesn't fit in an 'int'. */ + return (c1 > c2 ? 1 : c1 < c2 ? -1 : 0); +} diff --git a/lib/config.charset b/lib/config.charset new file mode 100755 index 00000000..c1a7f5db --- /dev/null +++ b/lib/config.charset @@ -0,0 +1,683 @@ +#! /bin/sh +# Output a system dependent table of character encoding aliases. +# +# Copyright (C) 2000-2004, 2006-2009 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License along +# with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# The table consists of lines of the form +# ALIAS CANONICAL +# +# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". +# ALIAS is compared in a case sensitive way. +# +# CANONICAL is the GNU canonical name for this character encoding. +# It must be an encoding supported by libiconv. Support by GNU libc is +# also desirable. CANONICAL is case insensitive. Usually an upper case +# MIME charset name is preferred. +# The current list of GNU canonical charset names is as follows. +# +# name MIME? used by which systems +# ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin +# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-3 Y glibc solaris +# ISO-8859-4 Y osf solaris freebsd netbsd openbsd darwin +# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-6 Y glibc aix hpux solaris +# ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd openbsd darwin +# ISO-8859-8 Y glibc aix hpux osf solaris +# ISO-8859-9 Y glibc aix hpux irix osf solaris darwin +# ISO-8859-13 glibc netbsd openbsd darwin +# ISO-8859-14 glibc +# ISO-8859-15 glibc aix osf solaris freebsd netbsd openbsd darwin +# KOI8-R Y glibc solaris freebsd netbsd openbsd darwin +# KOI8-U Y glibc freebsd netbsd openbsd darwin +# KOI8-T glibc +# CP437 dos +# CP775 dos +# CP850 aix osf dos +# CP852 dos +# CP855 dos +# CP856 aix +# CP857 dos +# CP861 dos +# CP862 dos +# CP864 dos +# CP865 dos +# CP866 freebsd netbsd openbsd darwin dos +# CP869 dos +# CP874 woe32 dos +# CP922 aix +# CP932 aix woe32 dos +# CP943 aix +# CP949 osf darwin woe32 dos +# CP950 woe32 dos +# CP1046 aix +# CP1124 aix +# CP1125 dos +# CP1129 aix +# CP1131 darwin +# CP1250 woe32 +# CP1251 glibc solaris netbsd openbsd darwin woe32 +# CP1252 aix woe32 +# CP1253 woe32 +# CP1254 woe32 +# CP1255 glibc woe32 +# CP1256 woe32 +# CP1257 woe32 +# GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin +# EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin +# EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin +# EUC-TW glibc aix hpux irix osf solaris netbsd +# BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin +# BIG5-HKSCS glibc solaris darwin +# GBK glibc aix osf solaris darwin woe32 dos +# GB18030 glibc solaris netbsd darwin +# SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin +# JOHAB glibc solaris woe32 +# TIS-620 glibc aix hpux osf solaris +# VISCII Y glibc +# TCVN5712-1 glibc +# ARMSCII-8 glibc darwin +# GEORGIAN-PS glibc +# PT154 glibc +# HP-ROMAN8 hpux +# HP-ARABIC8 hpux +# HP-GREEK8 hpux +# HP-HEBREW8 hpux +# HP-TURKISH8 hpux +# HP-KANA8 hpux +# DEC-KANJI osf +# DEC-HANYU osf +# UTF-8 Y glibc aix hpux osf solaris netbsd darwin +# +# Note: Names which are not marked as being a MIME name should not be used in +# Internet protocols for information interchange (mail, news, etc.). +# +# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications +# must understand both names and treat them as equivalent. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM + +host="$1" +os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` +echo "# This file contains a table of character encoding aliases," +echo "# suitable for operating system '${os}'." +echo "# It was automatically generated from config.charset." +# List of references, updated during installation: +echo "# Packages using this file: " +case "$os" in + linux-gnulibc1*) + # Linux libc5 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + echo "POSIX ASCII" + for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ + en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ + en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ + es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ + et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ + fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ + it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ + sv_FI sv_SE; do + echo "$l ISO-8859-1" + echo "$l.iso-8859-1 ISO-8859-1" + echo "$l.iso-8859-15 ISO-8859-15" + echo "$l.iso-8859-15@euro ISO-8859-15" + echo "$l@euro ISO-8859-15" + echo "$l.cp-437 CP437" + echo "$l.cp-850 CP850" + echo "$l.cp-1252 CP1252" + echo "$l.cp-1252@euro CP1252" + #echo "$l.atari-st ATARI-ST" # not a commonly used encoding + echo "$l.utf-8 UTF-8" + echo "$l.utf-8@euro UTF-8" + done + for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ + sl_SI sr sr_CS sr_YU; do + echo "$l ISO-8859-2" + echo "$l.iso-8859-2 ISO-8859-2" + echo "$l.cp-852 CP852" + echo "$l.cp-1250 CP1250" + echo "$l.utf-8 UTF-8" + done + for l in mk mk_MK ru ru_RU; do + echo "$l ISO-8859-5" + echo "$l.iso-8859-5 ISO-8859-5" + echo "$l.koi8-r KOI8-R" + echo "$l.cp-866 CP866" + echo "$l.cp-1251 CP1251" + echo "$l.utf-8 UTF-8" + done + for l in ar ar_SA; do + echo "$l ISO-8859-6" + echo "$l.iso-8859-6 ISO-8859-6" + echo "$l.cp-864 CP864" + #echo "$l.cp-868 CP868" # not a commonly used encoding + echo "$l.cp-1256 CP1256" + echo "$l.utf-8 UTF-8" + done + for l in el el_GR gr gr_GR; do + echo "$l ISO-8859-7" + echo "$l.iso-8859-7 ISO-8859-7" + echo "$l.cp-869 CP869" + echo "$l.cp-1253 CP1253" + echo "$l.cp-1253@euro CP1253" + echo "$l.utf-8 UTF-8" + echo "$l.utf-8@euro UTF-8" + done + for l in he he_IL iw iw_IL; do + echo "$l ISO-8859-8" + echo "$l.iso-8859-8 ISO-8859-8" + echo "$l.cp-862 CP862" + echo "$l.cp-1255 CP1255" + echo "$l.utf-8 UTF-8" + done + for l in tr tr_TR; do + echo "$l ISO-8859-9" + echo "$l.iso-8859-9 ISO-8859-9" + echo "$l.cp-857 CP857" + echo "$l.cp-1254 CP1254" + echo "$l.utf-8 UTF-8" + done + for l in lt lt_LT lv lv_LV; do + #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name + echo "$l ISO-8859-13" + done + for l in ru_UA uk uk_UA; do + echo "$l KOI8-U" + done + for l in zh zh_CN; do + #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name + echo "$l GB2312" + done + for l in ja ja_JP ja_JP.EUC; do + echo "$l EUC-JP" + done + for l in ko ko_KR; do + echo "$l EUC-KR" + done + for l in th th_TH; do + echo "$l TIS-620" + done + for l in fa fa_IR; do + #echo "$l ISIRI-3342" # a broken encoding + echo "$l.utf-8 UTF-8" + done + ;; + linux* | *-gnu*) + # With glibc-2.1 or newer, we don't need any canonicalization, + # because glibc has iconv and both glibc and libiconv support all + # GNU canonical names directly. Therefore, the Makefile does not + # need to install the alias file at all. + # The following applies only to glibc-2.0.x and older libcs. + echo "ISO_646.IRV:1983 ASCII" + ;; + aix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "IBM-850 CP850" + echo "IBM-856 CP856" + echo "IBM-921 ISO-8859-13" + echo "IBM-922 CP922" + echo "IBM-932 CP932" + echo "IBM-943 CP943" + echo "IBM-1046 CP1046" + echo "IBM-1124 CP1124" + echo "IBM-1129 CP1129" + echo "IBM-1252 CP1252" + echo "IBM-eucCN GB2312" + echo "IBM-eucJP EUC-JP" + echo "IBM-eucKR EUC-KR" + echo "IBM-eucTW EUC-TW" + echo "big5 BIG5" + echo "GBK GBK" + echo "TIS-620 TIS-620" + echo "UTF-8 UTF-8" + ;; + hpux*) + echo "iso88591 ISO-8859-1" + echo "iso88592 ISO-8859-2" + echo "iso88595 ISO-8859-5" + echo "iso88596 ISO-8859-6" + echo "iso88597 ISO-8859-7" + echo "iso88598 ISO-8859-8" + echo "iso88599 ISO-8859-9" + echo "iso885915 ISO-8859-15" + echo "roman8 HP-ROMAN8" + echo "arabic8 HP-ARABIC8" + echo "greek8 HP-GREEK8" + echo "hebrew8 HP-HEBREW8" + echo "turkish8 HP-TURKISH8" + echo "kana8 HP-KANA8" + echo "tis620 TIS-620" + echo "big5 BIG5" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "hp15CN GB2312" + #echo "ccdc ?" # what is this? + echo "SJIS SHIFT_JIS" + echo "utf8 UTF-8" + ;; + irix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-9 ISO-8859-9" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + ;; + osf*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "cp850 CP850" + echo "big5 BIG5" + echo "dechanyu DEC-HANYU" + echo "dechanzi GB2312" + echo "deckanji DEC-KANJI" + echo "deckorean EUC-KR" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "GBK GBK" + echo "KSC5601 CP949" + echo "sdeckanji EUC-JP" + echo "SJIS SHIFT_JIS" + echo "TACTIS TIS-620" + echo "UTF-8 UTF-8" + ;; + solaris*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-3 ISO-8859-3" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "koi8-r KOI8-R" + echo "ansi-1251 CP1251" + echo "BIG5 BIG5" + echo "Big5-HKSCS BIG5-HKSCS" + echo "gb2312 GB2312" + echo "GBK GBK" + echo "GB18030 GB18030" + echo "cns11643 EUC-TW" + echo "5601 EUC-KR" + echo "ko_KR.johap92 JOHAB" + echo "eucJP EUC-JP" + echo "PCK SHIFT_JIS" + echo "TIS620.2533 TIS-620" + #echo "sun_eu_greek ?" # what is this? + echo "UTF-8 UTF-8" + ;; + freebsd* | os2*) + # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just + # reuse FreeBSD's locale data for OS/2. + echo "C ASCII" + echo "US-ASCII ASCII" + for l in la_LN lt_LN; do + echo "$l.ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ + lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do + echo "$l.ISO_8859-1 ISO-8859-1" + echo "$l.DIS_8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do + echo "$l.ISO_8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO_8859-4 ISO-8859-4" + done + for l in ru_RU ru_SU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO_8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ja_JP.Shift_JIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + netbsd*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "BIG5 BIG5" + echo "SJIS SHIFT_JIS" + ;; + openbsd*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + ;; + darwin[56]*) + # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + for l in en_AU en_CA en_GB en_US la_LN; do + echo "$l.US-ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ + nl_NL no_NO pt_PT sv_SE; do + echo "$l ISO-8859-1" + echo "$l.ISO8859-1 ISO-8859-1" + echo "$l.ISO8859-15 ISO-8859-15" + done + for l in la_LN; do + echo "$l.ISO8859-1 ISO-8859-1" + echo "$l.ISO8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do + echo "$l.ISO8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO8859-4 ISO-8859-4" + done + for l in ru_RU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + for l in bg_BG; do + echo "$l.CP1251 CP1251" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + darwin*) + # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is + # useless: + # - It returns the empty string when LANG is set to a locale of the + # form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 + # LC_CTYPE file. + # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by + # the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. + # - The documentation says: + # "... all code that calls BSD system routines should ensure + # that the const *char parameters of these routines are in UTF-8 + # encoding. All BSD system functions expect their string + # parameters to be in UTF-8 encoding and nothing else." + # It also says + # "An additional caveat is that string parameters for files, + # paths, and other file-system entities must be in canonical + # UTF-8. In a canonical UTF-8 Unicode string, all decomposable + # characters are decomposed ..." + # but this is not true: You can pass non-decomposed UTF-8 strings + # to file system functions, and it is the OS which will convert + # them to decomposed UTF-8 before accessing the file system. + # - The Apple Terminal application displays UTF-8 by default. + # - However, other applications are free to use different encodings: + # - xterm uses ISO-8859-1 by default. + # - TextEdit uses MacRoman by default. + # We prefer UTF-8 over decomposed UTF-8-MAC because one should + # minimize the use of decomposed Unicode. Unfortunately, through the + # Darwin file system, decomposed UTF-8 strings are leaked into user + # space nevertheless. + # Then there are also the locales with encodings other than US-ASCII + # and UTF-8. These locales can be occasionally useful to users (e.g. + # when grepping through ISO-8859-1 encoded text files), when all their + # file names are in US-ASCII. + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + echo "KOI8-R KOI8-R" + echo "KOI8-U KOI8-U" + echo "CP866 CP866" + echo "CP949 CP949" + echo "CP1131 CP1131" + echo "CP1251 CP1251" + echo "eucCN GB2312" + echo "GB2312 GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "Big5 BIG5" + echo "Big5HKSCS BIG5-HKSCS" + echo "GBK GBK" + echo "GB18030 GB18030" + echo "SJIS SHIFT_JIS" + echo "ARMSCII-8 ARMSCII-8" + echo "PT154 PT154" + #echo "ISCII-DEV ?" + echo "* UTF-8" + ;; + beos* | haiku*) + # BeOS and Haiku have a single locale, and it has UTF-8 encoding. + echo "* UTF-8" + ;; + msdosdjgpp*) + # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "#" + echo "# The encodings given here may not all be correct." + echo "# If you find that the encoding given for your language and" + echo "# country is not the one your DOS machine actually uses, just" + echo "# correct it in this file, and send a mail to" + echo "# Juan Manuel Guerrero " + echo "# and Bruno Haible ." + echo "#" + echo "C ASCII" + # ISO-8859-1 languages + echo "ca CP850" + echo "ca_ES CP850" + echo "da CP865" # not CP850 ?? + echo "da_DK CP865" # not CP850 ?? + echo "de CP850" + echo "de_AT CP850" + echo "de_CH CP850" + echo "de_DE CP850" + echo "en CP850" + echo "en_AU CP850" # not CP437 ?? + echo "en_CA CP850" + echo "en_GB CP850" + echo "en_NZ CP437" + echo "en_US CP437" + echo "en_ZA CP850" # not CP437 ?? + echo "es CP850" + echo "es_AR CP850" + echo "es_BO CP850" + echo "es_CL CP850" + echo "es_CO CP850" + echo "es_CR CP850" + echo "es_CU CP850" + echo "es_DO CP850" + echo "es_EC CP850" + echo "es_ES CP850" + echo "es_GT CP850" + echo "es_HN CP850" + echo "es_MX CP850" + echo "es_NI CP850" + echo "es_PA CP850" + echo "es_PY CP850" + echo "es_PE CP850" + echo "es_SV CP850" + echo "es_UY CP850" + echo "es_VE CP850" + echo "et CP850" + echo "et_EE CP850" + echo "eu CP850" + echo "eu_ES CP850" + echo "fi CP850" + echo "fi_FI CP850" + echo "fr CP850" + echo "fr_BE CP850" + echo "fr_CA CP850" + echo "fr_CH CP850" + echo "fr_FR CP850" + echo "ga CP850" + echo "ga_IE CP850" + echo "gd CP850" + echo "gd_GB CP850" + echo "gl CP850" + echo "gl_ES CP850" + echo "id CP850" # not CP437 ?? + echo "id_ID CP850" # not CP437 ?? + echo "is CP861" # not CP850 ?? + echo "is_IS CP861" # not CP850 ?? + echo "it CP850" + echo "it_CH CP850" + echo "it_IT CP850" + echo "lt CP775" + echo "lt_LT CP775" + echo "lv CP775" + echo "lv_LV CP775" + echo "nb CP865" # not CP850 ?? + echo "nb_NO CP865" # not CP850 ?? + echo "nl CP850" + echo "nl_BE CP850" + echo "nl_NL CP850" + echo "nn CP865" # not CP850 ?? + echo "nn_NO CP865" # not CP850 ?? + echo "no CP865" # not CP850 ?? + echo "no_NO CP865" # not CP850 ?? + echo "pt CP850" + echo "pt_BR CP850" + echo "pt_PT CP850" + echo "sv CP850" + echo "sv_SE CP850" + # ISO-8859-2 languages + echo "cs CP852" + echo "cs_CZ CP852" + echo "hr CP852" + echo "hr_HR CP852" + echo "hu CP852" + echo "hu_HU CP852" + echo "pl CP852" + echo "pl_PL CP852" + echo "ro CP852" + echo "ro_RO CP852" + echo "sk CP852" + echo "sk_SK CP852" + echo "sl CP852" + echo "sl_SI CP852" + echo "sq CP852" + echo "sq_AL CP852" + echo "sr CP852" # CP852 or CP866 or CP855 ?? + echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? + echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? + # ISO-8859-3 languages + echo "mt CP850" + echo "mt_MT CP850" + # ISO-8859-5 languages + echo "be CP866" + echo "be_BE CP866" + echo "bg CP866" # not CP855 ?? + echo "bg_BG CP866" # not CP855 ?? + echo "mk CP866" # not CP855 ?? + echo "mk_MK CP866" # not CP855 ?? + echo "ru CP866" + echo "ru_RU CP866" + echo "uk CP1125" + echo "uk_UA CP1125" + # ISO-8859-6 languages + echo "ar CP864" + echo "ar_AE CP864" + echo "ar_DZ CP864" + echo "ar_EG CP864" + echo "ar_IQ CP864" + echo "ar_IR CP864" + echo "ar_JO CP864" + echo "ar_KW CP864" + echo "ar_MA CP864" + echo "ar_OM CP864" + echo "ar_QA CP864" + echo "ar_SA CP864" + echo "ar_SY CP864" + # ISO-8859-7 languages + echo "el CP869" + echo "el_GR CP869" + # ISO-8859-8 languages + echo "he CP862" + echo "he_IL CP862" + # ISO-8859-9 languages + echo "tr CP857" + echo "tr_TR CP857" + # Japanese + echo "ja CP932" + echo "ja_JP CP932" + # Chinese + echo "zh_CN GBK" + echo "zh_TW CP950" # not CP938 ?? + # Korean + echo "kr CP949" # not CP934 ?? + echo "kr_KR CP949" # not CP934 ?? + # Thai + echo "th CP874" + echo "th_TH CP874" + # Other + echo "eo CP850" + echo "eo_EO CP850" + ;; +esac diff --git a/lib/declared.sh b/lib/declared.sh new file mode 100755 index 00000000..fbd5996c --- /dev/null +++ b/lib/declared.sh @@ -0,0 +1,135 @@ +#! /bin/sh +# +# Copyright (C) 2009 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This script determines the declared global symbols in a C header file. +# Assumptions: +# - The header files are in C, with only C89 comments. +# - No use of macros with parameters. +# - All global declarations are marked with 'extern'. +# - All declarations end in ';' on the same line. +# - Not more than one symbol is declared in a declaration. + +# func_usage +# outputs to stdout the --help usage message. +func_usage () +{ + echo "\ +Usage: declared.sh [OPTION]... < SOURCE.h + +Extracts the declared global symbols of a C header file. + +Options: + --help print this help and exit + --version print version information and exit + +Report bugs to ." +} + +# func_version +# outputs to stdout the --version message. +func_version () +{ + echo "declared.sh (GNU libunistring)" + echo "Copyright (C) 2006, 2009 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law." + echo "Written by" "Bruno Haible" +} + +# func_fatal_error message +# outputs to stderr a fatal error message, and terminates the program. +func_fatal_error () +{ + echo "declared.sh: *** $1" 1>&2 + echo "declared.sh: *** Stop." 1>&2 + exit 1 +} + +# Command-line option processing. +while test $# -gt 0; do + case "$1" in + --help | --hel | --he | --h ) + func_usage + exit 0 ;; + --version | --versio | --versi | --vers | --ver | --ve | --v ) + func_version + exit 0 ;; + -- ) # Stop option prcessing + shift; break ;; + -* ) + func_fatal_error "unrecognized option: $option" + ;; + * ) + break ;; + esac +done + +if test $# -gt 0; then + func_fatal_error "too many arguments" +fi + +# A sed expression that removes ANSI C and ISO C99 comments. +sed_remove_comments=" +/[/][/*]/{ + ta + :a + s,^\\(\\([^\"'/]\\|\"\\([^\\\"]\\|[\\].\\)*\"\\|'\\([^\\']\\|[\\].\\)*'\\|[/][^\"'/*]\\|[/]\"\\([^\\\"]\\|[\\].\\)*\"\\|[/]'\\([^\\']\\|[\\].\\)*'\\)*\\)//.*,\\1, + te + s,^\\(\\([^\"'/]\\|\"\\([^\\\"]\\|[\\].\\)*\"\\|'\\([^\\']\\|[\\].\\)*'\\|[/][^\"'/*]\\|[/]\"\\([^\\\"]\\|[\\].\\)*\"\\|[/]'\\([^\\']\\|[\\].\\)*'\\)*\\)/[*]\\([^*]\\|[*][^/*]\\)*[*][*]*/,\\1 , + ta + /^\\([^\"'/]\\|\"\\([^\\\"]\\|[\\].\\)*\"\\|'\\([^\\']\\|[\\].\\)*'\\|[/][^\"'/*]\\|[/]\"\\([^\\\"]\\|[\\].\\)*\"\\|[/]'\\([^\\']\\|[\\].\\)*'\\)*[/][*]/{ + s,^\\(\\([^\"'/]\\|\"\\([^\\\"]\\|[\\].\\)*\"\\|'\\([^\\']\\|[\\].\\)*'\\|[/][^\"'/*]\\|[/]\"\\([^\\\"]\\|[\\].\\)*\"\\|[/]'\\([^\\']\\|[\\].\\)*'\\)*\\)/[*].*,\\1 , + tu + :u + n + s,^\\([^*]\\|[*][^/*]\\)*[*][*]*/,, + tv + s,^.*\$,, + bu + :v + } + :e +}" + +# Check that 'sed' supports the kind of regular expressions used in +# sed_remove_comments. The use of \| meaning alternation of basic regular +# expressions is a GNU extension. +sed_test='s,^\(\(a\|X\)*\)//.*,\1,' +sed_result=`echo 'aaa//bcd' | sed -e "$sed_test"` +test "$sed_result" = 'aaa' \ + || func_fatal_error "The 'sed' program is not GNU sed. Try installing GNU sed." + +# A sed expression that joins 'extern' declarations that are broken over +# several lines. +sed_join_multiline_externs=' +/^extern [^;]*$/{ + :a + N + s/\n/ /g + /^extern [^;]*$/{ + ba + } +}' + +# A sed expression that extracts the identifier of each 'extern' declaration. +sed_extract_extern_declared='s/^extern [^()]* \([A-Za-z_][A-Za-z0-9_]*\) *[;(].*$/\1/p' + +sed -e "$sed_remove_comments" \ + | sed -e "$sed_join_multiline_externs" \ + | sed -n -e "$sed_extract_extern_declared" diff --git a/lib/errno.in.h b/lib/errno.in.h new file mode 100644 index 00000000..a9b81d5d --- /dev/null +++ b/lib/errno.in.h @@ -0,0 +1,160 @@ +/* A POSIX-like . + + Copyright (C) 2008-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_ERRNO_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_ERRNO_H@ + +#ifndef _GL_ERRNO_H +#define _GL_ERRNO_H + + +/* On native Windows platforms, many macros are not defined. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +/* POSIX says that EAGAIN and EWOULDBLOCK may have the same value. */ +# define EWOULDBLOCK EAGAIN + +/* Values >= 100 seem safe to use. */ +# define ETXTBSY 100 +# define GNULIB_defined_ETXTBSY 1 + +/* These are intentionally the same values as the WSA* error numbers, defined + in . */ +# define EINPROGRESS 10036 +# define EALREADY 10037 +# define ENOTSOCK 10038 +# define EDESTADDRREQ 10039 +# define EMSGSIZE 10040 +# define EPROTOTYPE 10041 +# define ENOPROTOOPT 10042 +# define EPROTONOSUPPORT 10043 +# define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ +# define EOPNOTSUPP 10045 +# define EPFNOSUPPORT 10046 /* not required by POSIX */ +# define EAFNOSUPPORT 10047 +# define EADDRINUSE 10048 +# define EADDRNOTAVAIL 10049 +# define ENETDOWN 10050 +# define ENETUNREACH 10051 +# define ENETRESET 10052 +# define ECONNABORTED 10053 +# define ECONNRESET 10054 +# define ENOBUFS 10055 +# define EISCONN 10056 +# define ENOTCONN 10057 +# define ESHUTDOWN 10058 /* not required by POSIX */ +# define ETOOMANYREFS 10059 /* not required by POSIX */ +# define ETIMEDOUT 10060 +# define ECONNREFUSED 10061 +# define ELOOP 10062 +# define EHOSTDOWN 10064 /* not required by POSIX */ +# define EHOSTUNREACH 10065 +# define EPROCLIM 10067 /* not required by POSIX */ +# define EUSERS 10068 /* not required by POSIX */ +# define EDQUOT 10069 +# define ESTALE 10070 +# define EREMOTE 10071 /* not required by POSIX */ +# define GNULIB_defined_ESOCK 1 + +# endif + + +/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros + EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ +# if @EMULTIHOP_HIDDEN@ +# define EMULTIHOP @EMULTIHOP_VALUE@ +# define GNULIB_defined_EMULTIHOP 1 +# endif +# if @ENOLINK_HIDDEN@ +# define ENOLINK @ENOLINK_VALUE@ +# define GNULIB_defined_ENOLINK 1 +# endif +# if @EOVERFLOW_HIDDEN@ +# define EOVERFLOW @EOVERFLOW_VALUE@ +# define GNULIB_defined_EOVERFLOW 1 +# endif + + +/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, + EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. + Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, + HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. + + Note: When one of these systems defines some of these macros some day, + binaries will have to be recompiled so that they recognizes the new + errno values from the system. */ + +# ifndef ENOMSG +# define ENOMSG 2000 +# define GNULIB_defined_ENOMSG 1 +# endif + +# ifndef EIDRM +# define EIDRM 2001 +# define GNULIB_defined_EIDRM 1 +# endif + +# ifndef ENOLINK +# define ENOLINK 2002 +# define GNULIB_defined_ENOLINK 1 +# endif + +# ifndef EPROTO +# define EPROTO 2003 +# define GNULIB_defined_EPROTO 1 +# endif + +# ifndef EMULTIHOP +# define EMULTIHOP 2004 +# define GNULIB_defined_EMULTIHOP 1 +# endif + +# ifndef EBADMSG +# define EBADMSG 2005 +# define GNULIB_defined_EBADMSG 1 +# endif + +# ifndef EOVERFLOW +# define EOVERFLOW 2006 +# define GNULIB_defined_EOVERFLOW 1 +# endif + +# ifndef ENOTSUP +# define ENOTSUP 2007 +# define GNULIB_defined_ENOTSUP 1 +# endif + +# ifndef ESTALE +# define ESTALE 2009 +# define GNULIB_defined_ESTALE 1 +# endif + +# ifndef ECANCELED +# define ECANCELED 2008 +# define GNULIB_defined_ECANCELED 1 +# endif + + +#endif /* _GL_ERRNO_H */ +#endif /* _GL_ERRNO_H */ diff --git a/lib/exported.sh.in b/lib/exported.sh.in new file mode 100644 index 00000000..7bd3b1ed --- /dev/null +++ b/lib/exported.sh.in @@ -0,0 +1,24 @@ +#! /bin/sh +# +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# This is a script that determines the exported symbols of an object file. +# This is a separate script because $(GLOBAL_SYMBOL_PIPE) cannot be used in a +# Makefile, since it may contain dollar signs. + +nm_cmd="@NM@ \"\$1\" | @GLOBAL_SYMBOL_PIPE@" +eval $nm_cmd diff --git a/lib/float+.h b/lib/float+.h new file mode 100644 index 00000000..2288e3d3 --- /dev/null +++ b/lib/float+.h @@ -0,0 +1,148 @@ +/* Supplemental information about the floating-point formats. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _FLOATPLUS_H +#define _FLOATPLUS_H + +#include +#include + +/* Number of bits in the mantissa of a floating-point number, including the + "hidden bit". */ +#if FLT_RADIX == 2 +# define FLT_MANT_BIT FLT_MANT_DIG +# define DBL_MANT_BIT DBL_MANT_DIG +# define LDBL_MANT_BIT LDBL_MANT_DIG +#elif FLT_RADIX == 4 +# define FLT_MANT_BIT (FLT_MANT_DIG * 2) +# define DBL_MANT_BIT (DBL_MANT_DIG * 2) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) +#elif FLT_RADIX == 16 +# define FLT_MANT_BIT (FLT_MANT_DIG * 4) +# define DBL_MANT_BIT (DBL_MANT_DIG * 4) +# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) +#endif + +/* Bit mask that can be used to mask the exponent, as an unsigned number. */ +#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) +#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) +#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) + +/* Number of bits used for the exponent of a floating-point number, including + the exponent's sign. */ +#define FLT_EXP_BIT \ + (FLT_EXP_MASK < 0x100 ? 8 : \ + FLT_EXP_MASK < 0x200 ? 9 : \ + FLT_EXP_MASK < 0x400 ? 10 : \ + FLT_EXP_MASK < 0x800 ? 11 : \ + FLT_EXP_MASK < 0x1000 ? 12 : \ + FLT_EXP_MASK < 0x2000 ? 13 : \ + FLT_EXP_MASK < 0x4000 ? 14 : \ + FLT_EXP_MASK < 0x8000 ? 15 : \ + FLT_EXP_MASK < 0x10000 ? 16 : \ + FLT_EXP_MASK < 0x20000 ? 17 : \ + FLT_EXP_MASK < 0x40000 ? 18 : \ + FLT_EXP_MASK < 0x80000 ? 19 : \ + FLT_EXP_MASK < 0x100000 ? 20 : \ + FLT_EXP_MASK < 0x200000 ? 21 : \ + FLT_EXP_MASK < 0x400000 ? 22 : \ + FLT_EXP_MASK < 0x800000 ? 23 : \ + FLT_EXP_MASK < 0x1000000 ? 24 : \ + FLT_EXP_MASK < 0x2000000 ? 25 : \ + FLT_EXP_MASK < 0x4000000 ? 26 : \ + FLT_EXP_MASK < 0x8000000 ? 27 : \ + FLT_EXP_MASK < 0x10000000 ? 28 : \ + FLT_EXP_MASK < 0x20000000 ? 29 : \ + FLT_EXP_MASK < 0x40000000 ? 30 : \ + FLT_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define DBL_EXP_BIT \ + (DBL_EXP_MASK < 0x100 ? 8 : \ + DBL_EXP_MASK < 0x200 ? 9 : \ + DBL_EXP_MASK < 0x400 ? 10 : \ + DBL_EXP_MASK < 0x800 ? 11 : \ + DBL_EXP_MASK < 0x1000 ? 12 : \ + DBL_EXP_MASK < 0x2000 ? 13 : \ + DBL_EXP_MASK < 0x4000 ? 14 : \ + DBL_EXP_MASK < 0x8000 ? 15 : \ + DBL_EXP_MASK < 0x10000 ? 16 : \ + DBL_EXP_MASK < 0x20000 ? 17 : \ + DBL_EXP_MASK < 0x40000 ? 18 : \ + DBL_EXP_MASK < 0x80000 ? 19 : \ + DBL_EXP_MASK < 0x100000 ? 20 : \ + DBL_EXP_MASK < 0x200000 ? 21 : \ + DBL_EXP_MASK < 0x400000 ? 22 : \ + DBL_EXP_MASK < 0x800000 ? 23 : \ + DBL_EXP_MASK < 0x1000000 ? 24 : \ + DBL_EXP_MASK < 0x2000000 ? 25 : \ + DBL_EXP_MASK < 0x4000000 ? 26 : \ + DBL_EXP_MASK < 0x8000000 ? 27 : \ + DBL_EXP_MASK < 0x10000000 ? 28 : \ + DBL_EXP_MASK < 0x20000000 ? 29 : \ + DBL_EXP_MASK < 0x40000000 ? 30 : \ + DBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) +#define LDBL_EXP_BIT \ + (LDBL_EXP_MASK < 0x100 ? 8 : \ + LDBL_EXP_MASK < 0x200 ? 9 : \ + LDBL_EXP_MASK < 0x400 ? 10 : \ + LDBL_EXP_MASK < 0x800 ? 11 : \ + LDBL_EXP_MASK < 0x1000 ? 12 : \ + LDBL_EXP_MASK < 0x2000 ? 13 : \ + LDBL_EXP_MASK < 0x4000 ? 14 : \ + LDBL_EXP_MASK < 0x8000 ? 15 : \ + LDBL_EXP_MASK < 0x10000 ? 16 : \ + LDBL_EXP_MASK < 0x20000 ? 17 : \ + LDBL_EXP_MASK < 0x40000 ? 18 : \ + LDBL_EXP_MASK < 0x80000 ? 19 : \ + LDBL_EXP_MASK < 0x100000 ? 20 : \ + LDBL_EXP_MASK < 0x200000 ? 21 : \ + LDBL_EXP_MASK < 0x400000 ? 22 : \ + LDBL_EXP_MASK < 0x800000 ? 23 : \ + LDBL_EXP_MASK < 0x1000000 ? 24 : \ + LDBL_EXP_MASK < 0x2000000 ? 25 : \ + LDBL_EXP_MASK < 0x4000000 ? 26 : \ + LDBL_EXP_MASK < 0x8000000 ? 27 : \ + LDBL_EXP_MASK < 0x10000000 ? 28 : \ + LDBL_EXP_MASK < 0x20000000 ? 29 : \ + LDBL_EXP_MASK < 0x40000000 ? 30 : \ + LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ + 32) + +/* Number of bits used for a floating-point number: the mantissa (not + counting the "hidden bit", since it may or may not be explicit), the + exponent, and the sign. */ +#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) +#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) +#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) + +/* Number of bytes used for a floating-point number. + This can be smaller than the 'sizeof'. For example, on i386 systems, + 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence + LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but + sizeof (long double) = 12 or = 16. */ +#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) +#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) + +/* Verify that SIZEOF_FLT <= sizeof (float) etc. */ +typedef int verify_sizeof_flt[2 * (SIZEOF_FLT <= sizeof (float)) - 1]; +typedef int verify_sizeof_dbl[2 * (SIZEOF_DBL <= sizeof (double)) - 1]; +typedef int verify_sizeof_ldbl[2 * (SIZEOF_LDBL <= sizeof (long double)) - 1]; + +#endif /* _FLOATPLUS_H */ diff --git a/lib/float.in.h b/lib/float.in.h new file mode 100644 index 00000000..63d55f87 --- /dev/null +++ b/lib/float.in.h @@ -0,0 +1,62 @@ +/* A correct . + + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_FLOAT_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_FLOAT_H@ + +#ifndef _GL_FLOAT_H +#define _GL_FLOAT_H + +/* 'long double' properties. */ +#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) +/* Number of mantissa units, in base FLT_RADIX. */ +# undef LDBL_MANT_DIG +# define LDBL_MANT_DIG 64 +/* Number of decimal digits that is sufficient for representing a number. */ +# undef LDBL_DIG +# define LDBL_DIG 18 +/* x-1 where x is the smallest representable number > 1. */ +# undef LDBL_EPSILON +# define LDBL_EPSILON 1.0842021724855044340E-19L +/* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ +# undef LDBL_MIN_EXP +# define LDBL_MIN_EXP (-16381) +/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ +# undef LDBL_MAX_EXP +# define LDBL_MAX_EXP 16384 +/* Minimum positive normalized number. */ +# undef LDBL_MIN +# define LDBL_MIN 3.3621031431120935063E-4932L +/* Maximum representable finite number. */ +# undef LDBL_MAX +# define LDBL_MAX 1.1897314953572317650E+4932L +/* Minimum e such that 10^e is in the range of normalized numbers. */ +# undef LDBL_MIN_10_EXP +# define LDBL_MIN_10_EXP (-4931) +/* Maximum e such that 10^e is in the range of representable finite numbers. */ +# undef LDBL_MAX_10_EXP +# define LDBL_MAX_10_EXP 4932 +#endif + +#endif /* _GL_FLOAT_H */ +#endif /* _GL_FLOAT_H */ diff --git a/lib/fpucw.h b/lib/fpucw.h new file mode 100644 index 00000000..4bd00811 --- /dev/null +++ b/lib/fpucw.h @@ -0,0 +1,107 @@ +/* Manipulating the FPU control word. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _FPUCW_H +#define _FPUCW_H + +/* The i386 floating point hardware (the 387 compatible FPU, not the modern + SSE/SSE2 hardware) has a controllable rounding precision. It is specified + through the 'PC' bits in the FPU control word ('fctrl' register). (See + the GNU libc i386 header for details.) + + On some platforms, such as Linux or Solaris, the default precision setting + is set to "extended precision". This means that 'long double' instructions + operate correctly, but 'double' computations often produce slightly + different results as on strictly IEEE 754 conforming systems. + + On some platforms, such as NetBSD, the default precision is set to + "double precision". This means that 'long double' instructions will operate + only as 'double', i.e. lead wrong results. + + The FPU control word is under control of the application, i.e. it is + not required to be set either way by the ABI. (In fact, the i386 ABI + http://refspecs.freestandards.org/elf/abi386-4.pdf page 3-12 = page 38 + is not clear about it. But in any case, gcc treats the control word + like a "preserved" register: it emits code that assumes that the control + word is preserved across calls, and it restores the control word at the + end of functions that modify it.) + + See Vincent Lefèvre's page http://www.vinc17.org/research/extended.en.html + for a good explanation. + See http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html for + some argumentation which setting should be the default. */ + +/* This header file provides the following facilities: + fpucw_t integral type holding the value of 'fctrl' + FPU_PC_MASK bit mask denoting the precision control + FPU_PC_DOUBLE precision control for 53 bits mantissa + FPU_PC_EXTENDED precision control for 64 bits mantissa + GET_FPUCW () yields the current FPU control word + SET_FPUCW (word) sets the FPU control word + DECL_LONG_DOUBLE_ROUNDING variable declaration for + BEGIN/END_LONG_DOUBLE_ROUNDING + BEGIN_LONG_DOUBLE_ROUNDING () starts a sequence of instructions with + 'long double' safe operation precision + END_LONG_DOUBLE_ROUNDING () ends a sequence of instructions with + 'long double' safe operation precision + */ + +/* Inline assembler like this works only with GNU C. */ +#if (defined __i386__ || defined __x86_64__) && defined __GNUC__ + +typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */ + +# define FPU_PC_MASK 0x0300 +# define FPU_PC_DOUBLE 0x200 /* glibc calls this _FPU_DOUBLE */ +# define FPU_PC_EXTENDED 0x300 /* glibc calls this _FPU_EXTENDED */ + +# define GET_FPUCW() \ + ({ fpucw_t _cw; \ + __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ + _cw; \ + }) +# define SET_FPUCW(word) \ + (void)({ fpucw_t _ncw = (word); \ + __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw)); \ + }) + +# define DECL_LONG_DOUBLE_ROUNDING \ + fpucw_t oldcw; +# define BEGIN_LONG_DOUBLE_ROUNDING() \ + (void)(oldcw = GET_FPUCW (), \ + SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED)) +# define END_LONG_DOUBLE_ROUNDING() \ + SET_FPUCW (oldcw) + +#else + +typedef unsigned int fpucw_t; + +# define FPU_PC_MASK 0 +# define FPU_PC_DOUBLE 0 +# define FPU_PC_EXTENDED 0 + +# define GET_FPUCW() 0 +# define SET_FPUCW(word) (void)(word) + +# define DECL_LONG_DOUBLE_ROUNDING +# define BEGIN_LONG_DOUBLE_ROUNDING() +# define END_LONG_DOUBLE_ROUNDING() + +#endif + +#endif /* _FPUCW_H */ diff --git a/lib/frexp.c b/lib/frexp.c new file mode 100644 index 00000000..8c72660e --- /dev/null +++ b/lib/frexp.c @@ -0,0 +1,166 @@ +/* Split a double into fraction and mantissa. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paolo Bonzini , 2003, and + Bruno Haible , 2007. */ + +#include + +/* Specification. */ +#include + +#include +#ifdef USE_LONG_DOUBLE +# include "isnanl-nolibm.h" +# include "fpucw.h" +#else +# include "isnand-nolibm.h" +#endif + +/* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater + than 2, or not even a power of 2, some rounding errors can occur, so that + then the returned mantissa is only guaranteed to be <= 1.0, not < 1.0. */ + +#ifdef USE_LONG_DOUBLE +# define FUNC frexpl +# define DOUBLE long double +# define ISNAN isnanl +# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING +# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () +# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () +# define L_(literal) literal##L +#else +# define FUNC frexp +# define DOUBLE double +# define ISNAN isnand +# define DECL_ROUNDING +# define BEGIN_ROUNDING() +# define END_ROUNDING() +# define L_(literal) literal +#endif + +DOUBLE +FUNC (DOUBLE x, int *expptr) +{ + int sign; + int exponent; + DECL_ROUNDING + + /* Test for NaN, infinity, and zero. */ + if (ISNAN (x) || x + x == x) + { + *expptr = 0; + return x; + } + + sign = 0; + if (x < 0) + { + x = - x; + sign = -1; + } + + BEGIN_ROUNDING (); + + { + /* Since the exponent is an 'int', it fits in 64 bits. Therefore the + loops are executed no more than 64 times. */ + DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ + DOUBLE powh[64]; /* powh[i] = 2^-2^i */ + int i; + + exponent = 0; + if (x >= L_(1.0)) + { + /* A positive exponent. */ + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x >= 1.0. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (x >= pow2_i) + { + exponent += (1 << i); + x *= powh_i; + } + else + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + /* Avoid making x too small, as it could become a denormalized + number and thus lose precision. */ + while (i > 0 && x < pow2[i - 1]) + { + i--; + powh_i = powh[i]; + } + exponent += (1 << i); + x *= powh_i; + /* Here 2^-2^i <= x < 1.0. */ + } + else + { + /* A negative or zero exponent. */ + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x < 1.0. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (x < powh_i) + { + exponent -= (1 << i); + x *= pow2_i; + } + else + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + /* Here 2^-2^i <= x < 1.0. */ + } + + /* Invariants: x * 2^exponent = argument, and 2^-2^i <= x < 1.0. */ + while (i > 0) + { + i--; + if (x < powh[i]) + { + exponent -= (1 << i); + x *= pow2[i]; + } + } + /* Here 0.5 <= x < 1.0. */ + } + + if (sign < 0) + x = - x; + + END_ROUNDING (); + + *expptr = exponent; + return x; +} diff --git a/lib/frexpl.c b/lib/frexpl.c new file mode 100644 index 00000000..08f489c9 --- /dev/null +++ b/lib/frexpl.c @@ -0,0 +1,18 @@ +/* Split a 'long double' into fraction and mantissa. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#define USE_LONG_DOUBLE +#include "frexp.c" diff --git a/lib/fseterr.c b/lib/fseterr.c new file mode 100644 index 00000000..6c31eebd --- /dev/null +++ b/lib/fseterr.c @@ -0,0 +1,74 @@ +/* Set the error indicator of a stream. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "fseterr.h" + +#include + +#include "stdio-impl.h" + +void +fseterr (FILE *fp) +{ + /* Most systems provide FILE as a struct and the necessary bitmask in + , because they need it for implementing getc() and putc() as + fast macros. */ +#if defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ + fp->_flags |= _IO_ERR_SEEN; +#elif defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + fp_->_flags |= __SERR; +#elif defined __EMX__ /* emx+gcc */ + fp->_flags |= _IOERR; +#elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw */ + fp_->_flag |= _IOERR; +#elif defined __UCLIBC__ /* uClibc */ + fp->__modeflags |= __FLAG_ERROR; +#elif defined __QNX__ /* QNX */ + fp->_Mode |= 0x200 /* _MERR */; +#elif defined __MINT__ /* Atari FreeMiNT */ + fp->__error = 1; +#elif 0 /* unknown */ + /* Portable fallback, based on an idea by Rich Felker. + Wow! 6 system calls for something that is just a bit operation! + Not activated on any system, because there is no way to repair FP when + the sequence of system calls fails, and library code should not call + abort(). */ + int saved_errno; + int fd; + int fd2; + + saved_errno = errno; + fflush (fp); + fd = fileno (fp); + fd2 = dup (fd); + if (fd2 >= 0) + { + close (fd); + fputc ('\0', fp); /* This should set the error indicator. */ + fflush (fp); /* Or this. */ + if (dup2 (fd2, fd) < 0) + /* Whee... we botched the stream and now cannot restore it! */ + abort (); + close (fd2); + } + errno = saved_errno; +#else + #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib." +#endif +} diff --git a/lib/fseterr.h b/lib/fseterr.h new file mode 100644 index 00000000..0adadc34 --- /dev/null +++ b/lib/fseterr.h @@ -0,0 +1,37 @@ +/* Set the error indicator of a stream. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _FSETERR_H +#define _FSETERR_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Set the error indicator of the stream FP. + The "error indicator" is set when an I/O operation on the stream fails, and + is cleared (together with the "end-of-file" indicator) by clearerr (FP). */ +extern void fseterr (FILE *fp); + + +#ifdef __cplusplus +} +#endif + +#endif /* _FSETERR_H */ diff --git a/lib/getpagesize.c b/lib/getpagesize.c new file mode 100644 index 00000000..82238df1 --- /dev/null +++ b/lib/getpagesize.c @@ -0,0 +1,39 @@ +/* getpagesize emulation for systems where it cannot be done in a C macro. + + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible and Martin Lambers. */ + +#include + +/* Specification. */ +#include + +/* This implementation is only for native Win32 systems. */ +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + +# define WIN32_LEAN_AND_MEAN +# include + +int +getpagesize (void) +{ + SYSTEM_INFO system_info; + GetSystemInfo (&system_info); + return system_info.dwPageSize; +} + +#endif diff --git a/lib/iconv.in.h b/lib/iconv.in.h new file mode 100644 index 00000000..915dce2e --- /dev/null +++ b/lib/iconv.in.h @@ -0,0 +1,71 @@ +/* A GNU-like . + + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_ICONV_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_ICONV_H@ + +#ifndef _GL_ICONV_H +#define _GL_ICONV_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#if @REPLACE_ICONV_OPEN@ +/* An iconv_open wrapper that supports the IANA standardized encoding names + ("ISO-8859-1" etc.) as far as possible. */ +# define iconv_open rpl_iconv_open +extern iconv_t iconv_open (const char *tocode, const char *fromcode); +#endif + +#if @REPLACE_ICONV_UTF@ +/* Special constants for supporting UTF-{16,32}{BE,LE} encodings. + Not public. */ +# define _ICONV_UTF8_UTF16BE (iconv_t)(-161) +# define _ICONV_UTF8_UTF16LE (iconv_t)(-162) +# define _ICONV_UTF8_UTF32BE (iconv_t)(-163) +# define _ICONV_UTF8_UTF32LE (iconv_t)(-164) +# define _ICONV_UTF16BE_UTF8 (iconv_t)(-165) +# define _ICONV_UTF16LE_UTF8 (iconv_t)(-166) +# define _ICONV_UTF32BE_UTF8 (iconv_t)(-167) +# define _ICONV_UTF32LE_UTF8 (iconv_t)(-168) +#endif + +#if @REPLACE_ICONV@ +# define iconv rpl_iconv +extern size_t iconv (iconv_t cd, + @ICONV_CONST@ char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft); +# define iconv_close rpl_iconv_close +extern int iconv_close (iconv_t cd); +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_ICONV_H */ +#endif /* _GL_ICONV_H */ diff --git a/lib/iconv_open-aix.gperf b/lib/iconv_open-aix.gperf new file mode 100644 index 00000000..6782b995 --- /dev/null +++ b/lib/iconv_open-aix.gperf @@ -0,0 +1,44 @@ +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On AIX 5.1, look in /usr/lib/nls/loc/uconvTable. +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "ISO8859-3" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-15, "ISO8859-15" +CP437, "IBM-437" +CP850, "IBM-850" +CP852, "IBM-852" +CP856, "IBM-856" +CP857, "IBM-857" +CP861, "IBM-861" +CP865, "IBM-865" +CP869, "IBM-869" +ISO-8859-13, "IBM-921" +CP922, "IBM-922" +CP932, "IBM-932" +CP943, "IBM-943" +CP1046, "IBM-1046" +CP1124, "IBM-1124" +CP1125, "IBM-1125" +CP1129, "IBM-1129" +CP1252, "IBM-1252" +GB2312, "IBM-eucCN" +EUC-JP, "IBM-eucJP" +EUC-KR, "IBM-eucKR" +EUC-TW, "IBM-eucTW" +BIG5, "big5" diff --git a/lib/iconv_open-aix.h b/lib/iconv_open-aix.h new file mode 100644 index 00000000..129e0308 --- /dev/null +++ b/lib/iconv_open-aix.h @@ -0,0 +1,256 @@ +/* ANSI-C code produced by gperf version 3.0.4 */ +/* Command-line: gperf -m 10 ./iconv_open-aix.gperf */ +/* Computed positions: -k'4,$' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "./iconv_open-aix.gperf" +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; + +#define TOTAL_KEYWORDS 32 +#define MIN_WORD_LENGTH 4 +#define MAX_WORD_LENGTH 11 +#define MIN_HASH_VALUE 6 +#define MAX_HASH_VALUE 44 +/* maximum key range = 39, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +mapping_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 0, 4, 25, + 0, 11, 24, 9, 17, 3, 14, 21, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 3, 45, 1, 45, 45, 45, 45, 0, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45 + }; + return len + asso_values[(unsigned char)str[3]+2] + asso_values[(unsigned char)str[len - 1]]; +} + +struct stringpool_t + { + char stringpool_str6[sizeof("EUC-TW")]; + char stringpool_str7[sizeof("EUC-KR")]; + char stringpool_str8[sizeof("CP852")]; + char stringpool_str9[sizeof("EUC-JP")]; + char stringpool_str10[sizeof("ISO-8859-2")]; + char stringpool_str11[sizeof("CP857")]; + char stringpool_str12[sizeof("CP850")]; + char stringpool_str13[sizeof("ISO-8859-7")]; + char stringpool_str14[sizeof("CP932")]; + char stringpool_str15[sizeof("GB2312")]; + char stringpool_str16[sizeof("BIG5")]; + char stringpool_str17[sizeof("CP437")]; + char stringpool_str19[sizeof("ISO-8859-5")]; + char stringpool_str20[sizeof("ISO-8859-15")]; + char stringpool_str21[sizeof("ISO-8859-3")]; + char stringpool_str22[sizeof("ISO-8859-13")]; + char stringpool_str23[sizeof("CP1046")]; + char stringpool_str24[sizeof("ISO-8859-8")]; + char stringpool_str25[sizeof("CP856")]; + char stringpool_str26[sizeof("CP1125")]; + char stringpool_str27[sizeof("ISO-8859-6")]; + char stringpool_str28[sizeof("CP865")]; + char stringpool_str29[sizeof("CP922")]; + char stringpool_str30[sizeof("CP1252")]; + char stringpool_str31[sizeof("ISO-8859-9")]; + char stringpool_str33[sizeof("CP943")]; + char stringpool_str34[sizeof("ISO-8859-4")]; + char stringpool_str35[sizeof("ISO-8859-1")]; + char stringpool_str38[sizeof("CP1129")]; + char stringpool_str40[sizeof("CP869")]; + char stringpool_str41[sizeof("CP1124")]; + char stringpool_str44[sizeof("CP861")]; + }; +static const struct stringpool_t stringpool_contents = + { + "EUC-TW", + "EUC-KR", + "CP852", + "EUC-JP", + "ISO-8859-2", + "CP857", + "CP850", + "ISO-8859-7", + "CP932", + "GB2312", + "BIG5", + "CP437", + "ISO-8859-5", + "ISO-8859-15", + "ISO-8859-3", + "ISO-8859-13", + "CP1046", + "ISO-8859-8", + "CP856", + "CP1125", + "ISO-8859-6", + "CP865", + "CP922", + "CP1252", + "ISO-8859-9", + "CP943", + "ISO-8859-4", + "ISO-8859-1", + "CP1129", + "CP869", + "CP1124", + "CP861" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct mapping mappings[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 43 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str6, "IBM-eucTW"}, +#line 42 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str7, "IBM-eucKR"}, +#line 25 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str8, "IBM-852"}, +#line 41 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str9, "IBM-eucJP"}, +#line 14 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str10, "ISO8859-2"}, +#line 27 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str11, "IBM-857"}, +#line 24 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str12, "IBM-850"}, +#line 19 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str13, "ISO8859-7"}, +#line 33 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str14, "IBM-932"}, +#line 40 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str15, "IBM-eucCN"}, +#line 44 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str16, "big5"}, +#line 23 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str17, "IBM-437"}, + {-1}, +#line 17 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str19, "ISO8859-5"}, +#line 22 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str20, "ISO8859-15"}, +#line 15 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str21, "ISO8859-3"}, +#line 31 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str22, "IBM-921"}, +#line 35 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str23, "IBM-1046"}, +#line 20 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str24, "ISO8859-8"}, +#line 26 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str25, "IBM-856"}, +#line 37 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str26, "IBM-1125"}, +#line 18 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str27, "ISO8859-6"}, +#line 29 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str28, "IBM-865"}, +#line 32 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str29, "IBM-922"}, +#line 39 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str30, "IBM-1252"}, +#line 21 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str31, "ISO8859-9"}, + {-1}, +#line 34 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str33, "IBM-943"}, +#line 16 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str34, "ISO8859-4"}, +#line 13 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str35, "ISO8859-1"}, + {-1}, {-1}, +#line 38 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str38, "IBM-1129"}, + {-1}, +#line 30 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str40, "IBM-869"}, +#line 36 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str41, "IBM-1124"}, + {-1}, {-1}, +#line 28 "./iconv_open-aix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str44, "IBM-861"} + }; + +#ifdef __GNUC__ +__inline +#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct mapping * +mapping_lookup (register const char *str, register unsigned int len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = mapping_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register int o = mappings[key].standard_name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &mappings[key]; + } + } + } + return 0; +} diff --git a/lib/iconv_open-hpux.gperf b/lib/iconv_open-hpux.gperf new file mode 100644 index 00000000..5a35c83e --- /dev/null +++ b/lib/iconv_open-hpux.gperf @@ -0,0 +1,56 @@ +struct mapping { int standard_name; const char vendor_name[9 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On HP-UX 11.11, look in /usr/lib/nls/iconv. +ISO-8859-1, "iso88591" +ISO-8859-2, "iso88592" +ISO-8859-5, "iso88595" +ISO-8859-6, "iso88596" +ISO-8859-7, "iso88597" +ISO-8859-8, "iso88598" +ISO-8859-9, "iso88599" +ISO-8859-15, "iso885915" +CP437, "cp437" +CP775, "cp775" +CP850, "cp850" +CP852, "cp852" +CP855, "cp855" +CP857, "cp857" +CP861, "cp861" +CP862, "cp862" +CP864, "cp864" +CP865, "cp865" +CP866, "cp866" +CP869, "cp869" +CP874, "cp874" +CP1250, "cp1250" +CP1251, "cp1251" +CP1252, "cp1252" +CP1253, "cp1253" +CP1254, "cp1254" +CP1255, "cp1255" +CP1256, "cp1256" +CP1257, "cp1257" +CP1258, "cp1258" +HP-ROMAN8, "roman8" +HP-ARABIC8, "arabic8" +HP-GREEK8, "greek8" +HP-HEBREW8, "hebrew8" +HP-TURKISH8, "turkish8" +HP-KANA8, "kana8" +TIS-620, "tis620" +GB2312, "hp15CN" +EUC-JP, "eucJP" +EUC-KR, "eucKR" +EUC-TW, "eucTW" +BIG5, "big5" +SHIFT_JIS, "sjis" +UTF-8, "utf8" diff --git a/lib/iconv_open-hpux.h b/lib/iconv_open-hpux.h new file mode 100644 index 00000000..3bcff76a --- /dev/null +++ b/lib/iconv_open-hpux.h @@ -0,0 +1,299 @@ +/* ANSI-C code produced by gperf version 3.0.4 */ +/* Command-line: gperf -m 10 ./iconv_open-hpux.gperf */ +/* Computed positions: -k'4,$' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "./iconv_open-hpux.gperf" +struct mapping { int standard_name; const char vendor_name[9 + 1]; }; + +#define TOTAL_KEYWORDS 44 +#define MIN_WORD_LENGTH 4 +#define MAX_WORD_LENGTH 11 +#define MIN_HASH_VALUE 6 +#define MAX_HASH_VALUE 49 +/* maximum key range = 44, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +mapping_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 1, 2, + 24, 43, 5, 10, 0, 13, 32, 3, 19, 18, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 5, + 50, 50, 50, 50, 14, 5, 0, 50, 50, 0, + 27, 50, 12, 14, 50, 50, 0, 5, 2, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 + }; + return len + asso_values[(unsigned char)str[3]+4] + asso_values[(unsigned char)str[len - 1]]; +} + +struct stringpool_t + { + char stringpool_str6[sizeof("CP1256")]; + char stringpool_str7[sizeof("CP1250")]; + char stringpool_str8[sizeof("CP1251")]; + char stringpool_str9[sizeof("CP850")]; + char stringpool_str10[sizeof("TIS-620")]; + char stringpool_str11[sizeof("CP1254")]; + char stringpool_str12[sizeof("ISO-8859-6")]; + char stringpool_str13[sizeof("EUC-TW")]; + char stringpool_str14[sizeof("ISO-8859-1")]; + char stringpool_str15[sizeof("ISO-8859-9")]; + char stringpool_str16[sizeof("CP1255")]; + char stringpool_str17[sizeof("BIG5")]; + char stringpool_str18[sizeof("CP855")]; + char stringpool_str19[sizeof("CP1257")]; + char stringpool_str20[sizeof("EUC-KR")]; + char stringpool_str21[sizeof("CP857")]; + char stringpool_str22[sizeof("ISO-8859-5")]; + char stringpool_str23[sizeof("ISO-8859-15")]; + char stringpool_str24[sizeof("CP866")]; + char stringpool_str25[sizeof("ISO-8859-7")]; + char stringpool_str26[sizeof("CP861")]; + char stringpool_str27[sizeof("CP869")]; + char stringpool_str28[sizeof("CP874")]; + char stringpool_str29[sizeof("CP864")]; + char stringpool_str30[sizeof("CP1252")]; + char stringpool_str31[sizeof("CP437")]; + char stringpool_str32[sizeof("CP852")]; + char stringpool_str33[sizeof("CP775")]; + char stringpool_str34[sizeof("CP865")]; + char stringpool_str35[sizeof("EUC-JP")]; + char stringpool_str36[sizeof("ISO-8859-2")]; + char stringpool_str37[sizeof("SHIFT_JIS")]; + char stringpool_str38[sizeof("CP1258")]; + char stringpool_str39[sizeof("UTF-8")]; + char stringpool_str40[sizeof("HP-KANA8")]; + char stringpool_str41[sizeof("HP-ROMAN8")]; + char stringpool_str42[sizeof("HP-HEBREW8")]; + char stringpool_str43[sizeof("GB2312")]; + char stringpool_str44[sizeof("ISO-8859-8")]; + char stringpool_str45[sizeof("HP-TURKISH8")]; + char stringpool_str46[sizeof("HP-GREEK8")]; + char stringpool_str47[sizeof("HP-ARABIC8")]; + char stringpool_str48[sizeof("CP862")]; + char stringpool_str49[sizeof("CP1253")]; + }; +static const struct stringpool_t stringpool_contents = + { + "CP1256", + "CP1250", + "CP1251", + "CP850", + "TIS-620", + "CP1254", + "ISO-8859-6", + "EUC-TW", + "ISO-8859-1", + "ISO-8859-9", + "CP1255", + "BIG5", + "CP855", + "CP1257", + "EUC-KR", + "CP857", + "ISO-8859-5", + "ISO-8859-15", + "CP866", + "ISO-8859-7", + "CP861", + "CP869", + "CP874", + "CP864", + "CP1252", + "CP437", + "CP852", + "CP775", + "CP865", + "EUC-JP", + "ISO-8859-2", + "SHIFT_JIS", + "CP1258", + "UTF-8", + "HP-KANA8", + "HP-ROMAN8", + "HP-HEBREW8", + "GB2312", + "ISO-8859-8", + "HP-TURKISH8", + "HP-GREEK8", + "HP-ARABIC8", + "CP862", + "CP1253" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct mapping mappings[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 40 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str6, "cp1256"}, +#line 34 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str7, "cp1250"}, +#line 35 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str8, "cp1251"}, +#line 23 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str9, "cp850"}, +#line 49 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str10, "tis620"}, +#line 38 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str11, "cp1254"}, +#line 16 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str12, "iso88596"}, +#line 53 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str13, "eucTW"}, +#line 13 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str14, "iso88591"}, +#line 19 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str15, "iso88599"}, +#line 39 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str16, "cp1255"}, +#line 54 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str17, "big5"}, +#line 25 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str18, "cp855"}, +#line 41 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str19, "cp1257"}, +#line 52 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str20, "eucKR"}, +#line 26 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str21, "cp857"}, +#line 15 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str22, "iso88595"}, +#line 20 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str23, "iso885915"}, +#line 31 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str24, "cp866"}, +#line 17 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str25, "iso88597"}, +#line 27 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str26, "cp861"}, +#line 32 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str27, "cp869"}, +#line 33 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str28, "cp874"}, +#line 29 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str29, "cp864"}, +#line 36 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str30, "cp1252"}, +#line 21 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str31, "cp437"}, +#line 24 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str32, "cp852"}, +#line 22 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str33, "cp775"}, +#line 30 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str34, "cp865"}, +#line 51 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str35, "eucJP"}, +#line 14 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str36, "iso88592"}, +#line 55 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str37, "sjis"}, +#line 42 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str38, "cp1258"}, +#line 56 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str39, "utf8"}, +#line 48 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str40, "kana8"}, +#line 43 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str41, "roman8"}, +#line 46 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str42, "hebrew8"}, +#line 50 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str43, "hp15CN"}, +#line 18 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str44, "iso88598"}, +#line 47 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str45, "turkish8"}, +#line 45 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str46, "greek8"}, +#line 44 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str47, "arabic8"}, +#line 28 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str48, "cp862"}, +#line 37 "./iconv_open-hpux.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str49, "cp1253"} + }; + +#ifdef __GNUC__ +__inline +#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct mapping * +mapping_lookup (register const char *str, register unsigned int len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = mapping_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register int o = mappings[key].standard_name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &mappings[key]; + } + } + } + return 0; +} diff --git a/lib/iconv_open-irix.gperf b/lib/iconv_open-irix.gperf new file mode 100644 index 00000000..3672a801 --- /dev/null +++ b/lib/iconv_open-irix.gperf @@ -0,0 +1,31 @@ +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On IRIX 6.5, look in /usr/lib/iconv and /usr/lib/international/encodings. +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "ISO8859-3" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-15, "ISO8859-15" +KOI8-R, "KOI8" +CP855, "DOS855" +CP1251, "WIN1251" +GB2312, "eucCN" +EUC-JP, "eucJP" +EUC-KR, "eucKR" +EUC-TW, "eucTW" +SHIFT_JIS, "sjis" +TIS-620, "TIS620" diff --git a/lib/iconv_open-irix.h b/lib/iconv_open-irix.h new file mode 100644 index 00000000..74ceb8f5 --- /dev/null +++ b/lib/iconv_open-irix.h @@ -0,0 +1,199 @@ +/* ANSI-C code produced by gperf version 3.0.4 */ +/* Command-line: gperf -m 10 ./iconv_open-irix.gperf */ +/* Computed positions: -k'1,$' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "./iconv_open-irix.gperf" +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; + +#define TOTAL_KEYWORDS 19 +#define MIN_WORD_LENGTH 5 +#define MAX_WORD_LENGTH 11 +#define MIN_HASH_VALUE 5 +#define MAX_HASH_VALUE 23 +/* maximum key range = 19, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +mapping_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 8, 2, + 5, 12, 11, 0, 10, 9, 8, 7, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 0, 24, 0, + 24, 5, 24, 0, 24, 7, 24, 24, 24, 24, + 7, 24, 1, 0, 8, 24, 24, 0, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24 + }; + return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]]; +} + +struct stringpool_t + { + char stringpool_str5[sizeof("CP855")]; + char stringpool_str6[sizeof("EUC-TW")]; + char stringpool_str7[sizeof("EUC-KR")]; + char stringpool_str8[sizeof("CP1251")]; + char stringpool_str9[sizeof("SHIFT_JIS")]; + char stringpool_str10[sizeof("ISO-8859-5")]; + char stringpool_str11[sizeof("ISO-8859-15")]; + char stringpool_str12[sizeof("ISO-8859-1")]; + char stringpool_str13[sizeof("EUC-JP")]; + char stringpool_str14[sizeof("KOI8-R")]; + char stringpool_str15[sizeof("ISO-8859-2")]; + char stringpool_str16[sizeof("GB2312")]; + char stringpool_str17[sizeof("ISO-8859-9")]; + char stringpool_str18[sizeof("ISO-8859-8")]; + char stringpool_str19[sizeof("ISO-8859-7")]; + char stringpool_str20[sizeof("ISO-8859-6")]; + char stringpool_str21[sizeof("ISO-8859-4")]; + char stringpool_str22[sizeof("ISO-8859-3")]; + char stringpool_str23[sizeof("TIS-620")]; + }; +static const struct stringpool_t stringpool_contents = + { + "CP855", + "EUC-TW", + "EUC-KR", + "CP1251", + "SHIFT_JIS", + "ISO-8859-5", + "ISO-8859-15", + "ISO-8859-1", + "EUC-JP", + "KOI8-R", + "ISO-8859-2", + "GB2312", + "ISO-8859-9", + "ISO-8859-8", + "ISO-8859-7", + "ISO-8859-6", + "ISO-8859-4", + "ISO-8859-3", + "TIS-620" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct mapping mappings[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, +#line 24 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str5, "DOS855"}, +#line 29 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str6, "eucTW"}, +#line 28 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str7, "eucKR"}, +#line 25 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str8, "WIN1251"}, +#line 30 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str9, "sjis"}, +#line 17 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str10, "ISO8859-5"}, +#line 22 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str11, "ISO8859-15"}, +#line 13 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str12, "ISO8859-1"}, +#line 27 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str13, "eucJP"}, +#line 23 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str14, "KOI8"}, +#line 14 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str15, "ISO8859-2"}, +#line 26 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str16, "eucCN"}, +#line 21 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str17, "ISO8859-9"}, +#line 20 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str18, "ISO8859-8"}, +#line 19 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str19, "ISO8859-7"}, +#line 18 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str20, "ISO8859-6"}, +#line 16 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str21, "ISO8859-4"}, +#line 15 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str22, "ISO8859-3"}, +#line 31 "./iconv_open-irix.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str23, "TIS620"} + }; + +#ifdef __GNUC__ +__inline +#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct mapping * +mapping_lookup (register const char *str, register unsigned int len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = mapping_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register int o = mappings[key].standard_name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &mappings[key]; + } + } + } + return 0; +} diff --git a/lib/iconv_open-osf.gperf b/lib/iconv_open-osf.gperf new file mode 100644 index 00000000..f468ff60 --- /dev/null +++ b/lib/iconv_open-osf.gperf @@ -0,0 +1,50 @@ +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; +%struct-type +%language=ANSI-C +%define slot-name standard_name +%define hash-function-name mapping_hash +%define lookup-function-name mapping_lookup +%readonly-tables +%global-table +%define word-array-name mappings +%pic +%% +# On OSF/1 5.1, look in /usr/lib/nls/loc/iconv. +ISO-8859-1, "ISO8859-1" +ISO-8859-2, "ISO8859-2" +ISO-8859-3, "ISO8859-3" +ISO-8859-4, "ISO8859-4" +ISO-8859-5, "ISO8859-5" +ISO-8859-6, "ISO8859-6" +ISO-8859-7, "ISO8859-7" +ISO-8859-8, "ISO8859-8" +ISO-8859-9, "ISO8859-9" +ISO-8859-15, "ISO8859-15" +CP437, "cp437" +CP775, "cp775" +CP850, "cp850" +CP852, "cp852" +CP855, "cp855" +CP857, "cp857" +CP861, "cp861" +CP862, "cp862" +CP865, "cp865" +CP866, "cp866" +CP869, "cp869" +CP874, "cp874" +CP949, "KSC5601" +CP1250, "cp1250" +CP1251, "cp1251" +CP1252, "cp1252" +CP1253, "cp1253" +CP1254, "cp1254" +CP1255, "cp1255" +CP1256, "cp1256" +CP1257, "cp1257" +CP1258, "cp1258" +EUC-JP, "eucJP" +EUC-KR, "eucKR" +EUC-TW, "eucTW" +BIG5, "big5" +SHIFT_JIS, "SJIS" +TIS-620, "TACTIS" diff --git a/lib/iconv_open-osf.h b/lib/iconv_open-osf.h new file mode 100644 index 00000000..4d357649 --- /dev/null +++ b/lib/iconv_open-osf.h @@ -0,0 +1,278 @@ +/* ANSI-C code produced by gperf version 3.0.4 */ +/* Command-line: gperf -m 10 ./iconv_open-osf.gperf */ +/* Computed positions: -k'4,$' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "./iconv_open-osf.gperf" +struct mapping { int standard_name; const char vendor_name[10 + 1]; }; + +#define TOTAL_KEYWORDS 38 +#define MIN_WORD_LENGTH 4 +#define MAX_WORD_LENGTH 11 +#define MIN_HASH_VALUE 6 +#define MAX_HASH_VALUE 47 +/* maximum key range = 42, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +mapping_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 2, 29, + 24, 34, 31, 0, 15, 14, 10, 13, 2, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 7, 48, 48, 48, 48, 48, 48, + 11, 48, 2, 7, 48, 48, 48, 1, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48 + }; + return len + asso_values[(unsigned char)str[3]+3] + asso_values[(unsigned char)str[len - 1]]; +} + +struct stringpool_t + { + char stringpool_str6[sizeof("CP1255")]; + char stringpool_str7[sizeof("CP775")]; + char stringpool_str8[sizeof("CP1250")]; + char stringpool_str9[sizeof("EUC-TW")]; + char stringpool_str10[sizeof("EUC-KR")]; + char stringpool_str11[sizeof("TIS-620")]; + char stringpool_str12[sizeof("ISO-8859-5")]; + char stringpool_str13[sizeof("ISO-8859-15")]; + char stringpool_str14[sizeof("BIG5")]; + char stringpool_str15[sizeof("CP855")]; + char stringpool_str16[sizeof("CP1258")]; + char stringpool_str17[sizeof("CP850")]; + char stringpool_str18[sizeof("CP865")]; + char stringpool_str19[sizeof("EUC-JP")]; + char stringpool_str20[sizeof("CP1257")]; + char stringpool_str21[sizeof("CP1256")]; + char stringpool_str22[sizeof("ISO-8859-8")]; + char stringpool_str23[sizeof("SHIFT_JIS")]; + char stringpool_str25[sizeof("ISO-8859-9")]; + char stringpool_str26[sizeof("ISO-8859-7")]; + char stringpool_str27[sizeof("ISO-8859-6")]; + char stringpool_str29[sizeof("CP857")]; + char stringpool_str30[sizeof("CP1252")]; + char stringpool_str31[sizeof("CP869")]; + char stringpool_str32[sizeof("CP949")]; + char stringpool_str33[sizeof("CP866")]; + char stringpool_str34[sizeof("CP437")]; + char stringpool_str35[sizeof("CP1251")]; + char stringpool_str36[sizeof("ISO-8859-2")]; + char stringpool_str37[sizeof("CP1254")]; + char stringpool_str38[sizeof("CP874")]; + char stringpool_str39[sizeof("CP852")]; + char stringpool_str40[sizeof("CP1253")]; + char stringpool_str41[sizeof("ISO-8859-1")]; + char stringpool_str42[sizeof("CP862")]; + char stringpool_str43[sizeof("ISO-8859-4")]; + char stringpool_str46[sizeof("ISO-8859-3")]; + char stringpool_str47[sizeof("CP861")]; + }; +static const struct stringpool_t stringpool_contents = + { + "CP1255", + "CP775", + "CP1250", + "EUC-TW", + "EUC-KR", + "TIS-620", + "ISO-8859-5", + "ISO-8859-15", + "BIG5", + "CP855", + "CP1258", + "CP850", + "CP865", + "EUC-JP", + "CP1257", + "CP1256", + "ISO-8859-8", + "SHIFT_JIS", + "ISO-8859-9", + "ISO-8859-7", + "ISO-8859-6", + "CP857", + "CP1252", + "CP869", + "CP949", + "CP866", + "CP437", + "CP1251", + "ISO-8859-2", + "CP1254", + "CP874", + "CP852", + "CP1253", + "ISO-8859-1", + "CP862", + "ISO-8859-4", + "ISO-8859-3", + "CP861" + }; +#define stringpool ((const char *) &stringpool_contents) + +static const struct mapping mappings[] = + { + {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, +#line 41 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str6, "cp1255"}, +#line 24 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str7, "cp775"}, +#line 36 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str8, "cp1250"}, +#line 47 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str9, "eucTW"}, +#line 46 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str10, "eucKR"}, +#line 50 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str11, "TACTIS"}, +#line 17 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str12, "ISO8859-5"}, +#line 22 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str13, "ISO8859-15"}, +#line 48 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str14, "big5"}, +#line 27 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str15, "cp855"}, +#line 44 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str16, "cp1258"}, +#line 25 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str17, "cp850"}, +#line 31 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str18, "cp865"}, +#line 45 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str19, "eucJP"}, +#line 43 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str20, "cp1257"}, +#line 42 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str21, "cp1256"}, +#line 20 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str22, "ISO8859-8"}, +#line 49 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str23, "SJIS"}, + {-1}, +#line 21 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str25, "ISO8859-9"}, +#line 19 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str26, "ISO8859-7"}, +#line 18 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str27, "ISO8859-6"}, + {-1}, +#line 28 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str29, "cp857"}, +#line 38 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str30, "cp1252"}, +#line 33 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str31, "cp869"}, +#line 35 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str32, "KSC5601"}, +#line 32 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str33, "cp866"}, +#line 23 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str34, "cp437"}, +#line 37 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str35, "cp1251"}, +#line 14 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str36, "ISO8859-2"}, +#line 40 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str37, "cp1254"}, +#line 34 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str38, "cp874"}, +#line 26 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str39, "cp852"}, +#line 39 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str40, "cp1253"}, +#line 13 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str41, "ISO8859-1"}, +#line 30 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str42, "cp862"}, +#line 16 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str43, "ISO8859-4"}, + {-1}, {-1}, +#line 15 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str46, "ISO8859-3"}, +#line 29 "./iconv_open-osf.gperf" + {(int)(long)&((struct stringpool_t *)0)->stringpool_str47, "cp861"} + }; + +#ifdef __GNUC__ +__inline +#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct mapping * +mapping_lookup (register const char *str, register unsigned int len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = mapping_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register int o = mappings[key].standard_name; + if (o >= 0) + { + register const char *s = o + stringpool; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &mappings[key]; + } + } + } + return 0; +} diff --git a/lib/iconv_open.c b/lib/iconv_open.c new file mode 100644 index 00000000..3d873acd --- /dev/null +++ b/lib/iconv_open.c @@ -0,0 +1,172 @@ +/* Character set conversion. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#include + +#include +#include +#include "c-ctype.h" +#include "c-strcase.h" + +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + +/* Namespace cleanliness. */ +#define mapping_lookup rpl_iconv_open_mapping_lookup + +/* The macro ICONV_FLAVOR is defined to one of these or undefined. */ + +#define ICONV_FLAVOR_AIX "iconv_open-aix.h" +#define ICONV_FLAVOR_HPUX "iconv_open-hpux.h" +#define ICONV_FLAVOR_IRIX "iconv_open-irix.h" +#define ICONV_FLAVOR_OSF "iconv_open-osf.h" + +#ifdef ICONV_FLAVOR +# include ICONV_FLAVOR +#endif + +iconv_t +rpl_iconv_open (const char *tocode, const char *fromcode) +#undef iconv_open +{ + char fromcode_upper[32]; + char tocode_upper[32]; + char *fromcode_upper_end; + char *tocode_upper_end; + +#if REPLACE_ICONV_UTF + /* Special handling of conversion between UTF-8 and UTF-{16,32}{BE,LE}. + Do this here, before calling the real iconv_open(), because OSF/1 5.1 + iconv() to these encoding inserts a BOM, which is wrong. + We do not need to handle conversion between arbitrary encodings and + UTF-{16,32}{BE,LE}, because the 'striconveh' module implements two-step + conversion throough UTF-8. + The _ICONV_* constants are chosen to be disjoint from any iconv_t + returned by the system's iconv_open() functions. Recall that iconv_t + is a scalar type. */ + if (c_toupper (fromcode[0]) == 'U' + && c_toupper (fromcode[1]) == 'T' + && c_toupper (fromcode[2]) == 'F' + && fromcode[3] == '-') + { + if (c_toupper (tocode[0]) == 'U' + && c_toupper (tocode[1]) == 'T' + && c_toupper (tocode[2]) == 'F' + && tocode[3] == '-') + { + if (strcmp (fromcode + 4, "8") == 0) + { + if (c_strcasecmp (tocode + 4, "16BE") == 0) + return _ICONV_UTF8_UTF16BE; + if (c_strcasecmp (tocode + 4, "16LE") == 0) + return _ICONV_UTF8_UTF16LE; + if (c_strcasecmp (tocode + 4, "32BE") == 0) + return _ICONV_UTF8_UTF32BE; + if (c_strcasecmp (tocode + 4, "32LE") == 0) + return _ICONV_UTF8_UTF32LE; + } + else if (strcmp (tocode + 4, "8") == 0) + { + if (c_strcasecmp (fromcode + 4, "16BE") == 0) + return _ICONV_UTF16BE_UTF8; + if (c_strcasecmp (fromcode + 4, "16LE") == 0) + return _ICONV_UTF16LE_UTF8; + if (c_strcasecmp (fromcode + 4, "32BE") == 0) + return _ICONV_UTF32BE_UTF8; + if (c_strcasecmp (fromcode + 4, "32LE") == 0) + return _ICONV_UTF32LE_UTF8; + } + } + } +#endif + + /* Do *not* add special support for 8-bit encodings like ASCII or ISO-8859-1 + here. This would lead to programs that work in some locales (such as the + "C" or "en_US" locales) but do not work in East Asian locales. It is + better if programmers make their programs depend on GNU libiconv (except + on glibc systems), e.g. by using the AM_ICONV macro and documenting the + dependency in an INSTALL or DEPENDENCIES file. */ + + /* Try with the original names first. + This covers the case when fromcode or tocode is a lowercase encoding name + that is understood by the system's iconv_open but not listed in our + mappings table. */ + { + iconv_t cd = iconv_open (tocode, fromcode); + if (cd != (iconv_t)(-1)) + return cd; + } + + /* Convert the encodings to upper case, because + 1. in the arguments of iconv_open() on AIX, HP-UX, and OSF/1 the case + matters, + 2. it makes searching in the table faster. */ + { + const char *p = fromcode; + char *q = fromcode_upper; + while ((*q = c_toupper (*p)) != '\0') + { + p++; + q++; + if (q == &fromcode_upper[SIZEOF (fromcode_upper)]) + { + errno = EINVAL; + return (iconv_t)(-1); + } + } + fromcode_upper_end = q; + } + + { + const char *p = tocode; + char *q = tocode_upper; + while ((*q = c_toupper (*p)) != '\0') + { + p++; + q++; + if (q == &tocode_upper[SIZEOF (tocode_upper)]) + { + errno = EINVAL; + return (iconv_t)(-1); + } + } + tocode_upper_end = q; + } + +#ifdef ICONV_FLAVOR + /* Apply the mappings. */ + { + const struct mapping *m = + mapping_lookup (fromcode_upper, fromcode_upper_end - fromcode_upper); + + fromcode = (m != NULL ? m->vendor_name : fromcode_upper); + } + { + const struct mapping *m = + mapping_lookup (tocode_upper, tocode_upper_end - tocode_upper); + + tocode = (m != NULL ? m->vendor_name : tocode_upper); + } +#else + fromcode = fromcode_upper; + tocode = tocode_upper; +#endif + + return iconv_open (tocode, fromcode); +} diff --git a/lib/iconveh.h b/lib/iconveh.h new file mode 100644 index 00000000..06cda52e --- /dev/null +++ b/lib/iconveh.h @@ -0,0 +1,41 @@ +/* Character set conversion handler type. + Copyright (C) 2001-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _ICONVEH_H +#define _ICONVEH_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Handling of unconvertible characters. */ +enum iconv_ilseq_handler +{ + iconveh_error, /* return and set errno = EILSEQ */ + iconveh_question_mark, /* use one '?' per unconvertible character */ + iconveh_escape_sequence /* use escape sequence \uxxxx or \Uxxxxxxxx */ +}; + + +#ifdef __cplusplus +} +#endif + + +#endif /* _ICONVEH_H */ diff --git a/lib/isnan.c b/lib/isnan.c new file mode 100644 index 00000000..f24f5761 --- /dev/null +++ b/lib/isnan.c @@ -0,0 +1,161 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include +#include + +#include "float+.h" + +#ifdef USE_LONG_DOUBLE +# define FUNC rpl_isnanl +# define DOUBLE long double +# define MAX_EXP LDBL_MAX_EXP +# define MIN_EXP LDBL_MIN_EXP +# if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT +# define KNOWN_EXPBIT0_LOCATION +# define EXPBIT0_WORD LDBL_EXPBIT0_WORD +# define EXPBIT0_BIT LDBL_EXPBIT0_BIT +# endif +# define SIZE SIZEOF_LDBL +# define L_(literal) literal##L +#elif ! defined USE_FLOAT +# define FUNC rpl_isnand +# define DOUBLE double +# define MAX_EXP DBL_MAX_EXP +# define MIN_EXP DBL_MIN_EXP +# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT +# define KNOWN_EXPBIT0_LOCATION +# define EXPBIT0_WORD DBL_EXPBIT0_WORD +# define EXPBIT0_BIT DBL_EXPBIT0_BIT +# endif +# define SIZE SIZEOF_DBL +# define L_(literal) literal +#else /* defined USE_FLOAT */ +# define FUNC rpl_isnanf +# define DOUBLE float +# define MAX_EXP FLT_MAX_EXP +# define MIN_EXP FLT_MIN_EXP +# if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT +# define KNOWN_EXPBIT0_LOCATION +# define EXPBIT0_WORD FLT_EXPBIT0_WORD +# define EXPBIT0_BIT FLT_EXPBIT0_BIT +# endif +# define SIZE SIZEOF_FLT +# define L_(literal) literal##f +#endif + +#define EXP_MASK ((MAX_EXP - MIN_EXP) | 7) + +#define NWORDS \ + ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) +typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double; + +int +FUNC (DOUBLE x) +{ +#ifdef KNOWN_EXPBIT0_LOCATION +# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) + /* Special CPU dependent code is needed to treat bit patterns outside the + IEEE 754 specification (such as Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals) as NaNs. + These bit patterns are: + - exponent = 0x0001..0x7FFF, mantissa bit 63 = 0, + - exponent = 0x0000, mantissa bit 63 = 1. + The NaN bit pattern is: + - exponent = 0x7FFF, mantissa >= 0x8000000000000001. */ + memory_double m; + unsigned int exponent; + + m.value = x; + exponent = (m.word[EXPBIT0_WORD] >> EXPBIT0_BIT) & EXP_MASK; +# ifdef WORDS_BIGENDIAN + /* Big endian: EXPBIT0_WORD = 0, EXPBIT0_BIT = 16. */ + if (exponent == 0) + return 1 & (m.word[0] >> 15); + else if (exponent == EXP_MASK) + return (((m.word[0] ^ 0x8000U) << 16) | m.word[1] | (m.word[2] >> 16)) != 0; + else + return 1 & ~(m.word[0] >> 15); +# else + /* Little endian: EXPBIT0_WORD = 2, EXPBIT0_BIT = 0. */ + if (exponent == 0) + return (m.word[1] >> 31); + else if (exponent == EXP_MASK) + return ((m.word[1] ^ 0x80000000U) | m.word[0]) != 0; + else + return (m.word[1] >> 31) ^ 1; +# endif +# else + /* Be careful to not do any floating-point operation on x, such as x == x, + because x may be a signaling NaN. */ +# if defined __SUNPRO_C || defined __DECC || (defined __sgi && !defined __GNUC__) + /* The Sun C 5.0 compilers and the Compaq (ex-DEC) 6.4 compilers don't + recognize the initializers as constant expressions. The latter compiler + also fails when constant-folding 0.0 / 0.0 even when constant-folding is + not required. The SGI MIPSpro C compiler complains about "floating-point + operation result is out of range". */ + static DOUBLE zero = L_(0.0); + memory_double nan; + DOUBLE plus_inf = L_(1.0) / L_(0.0); + DOUBLE minus_inf = -L_(1.0) / L_(0.0); + nan.value = zero / zero; +# else + static memory_double nan = { L_(0.0) / L_(0.0) }; + static DOUBLE plus_inf = L_(1.0) / L_(0.0); + static DOUBLE minus_inf = -L_(1.0) / L_(0.0); +# endif + { + memory_double m; + + /* A NaN can be recognized through its exponent. But exclude +Infinity and + -Infinity, which have the same exponent. */ + m.value = x; + if (((m.word[EXPBIT0_WORD] ^ nan.word[EXPBIT0_WORD]) + & (EXP_MASK << EXPBIT0_BIT)) + == 0) + return (memcmp (&m.value, &plus_inf, SIZE) != 0 + && memcmp (&m.value, &minus_inf, SIZE) != 0); + else + return 0; + } +# endif +#else + /* The configuration did not find sufficient information. Give up about + the signaling NaNs, handle only the quiet NaNs. */ + if (x == x) + { +# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) + /* Detect any special bit patterns that pass ==; see comment above. */ + memory_double m1; + memory_double m2; + + memset (&m1.value, 0, SIZE); + memset (&m2.value, 0, SIZE); + m1.value = x; + m2.value = x + (x ? 0.0L : -0.0L); + if (memcmp (&m1.value, &m2.value, SIZE) != 0) + return 1; +# endif + return 0; + } + else + return 1; +#endif +} diff --git a/lib/isnand-nolibm.h b/lib/isnand-nolibm.h new file mode 100644 index 00000000..0a1c6ab7 --- /dev/null +++ b/lib/isnand-nolibm.h @@ -0,0 +1,33 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if HAVE_ISNAND_IN_LIBC +/* Get declaration of isnan macro. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnand +# define isnand(x) __builtin_isnan ((double)(x)) +# else +# undef isnand +# define isnand(x) isnan ((double)(x)) +# endif +#else +/* Test whether X is a NaN. */ +# undef isnand +# define isnand rpl_isnand +extern int isnand (double x); +#endif diff --git a/lib/isnand.c b/lib/isnand.c new file mode 100644 index 00000000..d5220cb8 --- /dev/null +++ b/lib/isnand.c @@ -0,0 +1,19 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include "isnan.c" diff --git a/lib/isnanf-nolibm.h b/lib/isnanf-nolibm.h new file mode 100644 index 00000000..cb2263e6 --- /dev/null +++ b/lib/isnanf-nolibm.h @@ -0,0 +1,33 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if HAVE_ISNANF_IN_LIBC +/* Get declaration of isnan macro or (older) isnanf function. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +# elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +# endif +#else +/* Test whether X is a NaN. */ +# undef isnanf +# define isnanf rpl_isnanf +extern int isnanf (float x); +#endif diff --git a/lib/isnanf.c b/lib/isnanf.c new file mode 100644 index 00000000..6e39706e --- /dev/null +++ b/lib/isnanf.c @@ -0,0 +1,20 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#define USE_FLOAT +#include "isnan.c" diff --git a/lib/isnanl-nolibm.h b/lib/isnanl-nolibm.h new file mode 100644 index 00000000..7fd46f8d --- /dev/null +++ b/lib/isnanl-nolibm.h @@ -0,0 +1,33 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if HAVE_ISNANL_IN_LIBC +/* Get declaration of isnan macro or (older) isnanl function. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +# elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +# endif +#else +/* Test whether X is a NaN. */ +# undef isnanl +# define isnanl rpl_isnanl +extern int isnanl (long double x); +#endif diff --git a/lib/isnanl.c b/lib/isnanl.c new file mode 100644 index 00000000..b7d899b2 --- /dev/null +++ b/lib/isnanl.c @@ -0,0 +1,20 @@ +/* Test for NaN that does not need libm. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#define USE_LONG_DOUBLE +#include "isnan.c" diff --git a/lib/libunistring.rc b/lib/libunistring.rc new file mode 100644 index 00000000..f1b51afa --- /dev/null +++ b/lib/libunistring.rc @@ -0,0 +1,38 @@ +/* Resources for unistring.dll */ + +#include + +VS_VERSION_INFO VERSIONINFO + FILEVERSION PACKAGE_VERSION_MAJOR,PACKAGE_VERSION_MINOR,PACKAGE_VERSION_SUBMINOR,0 + PRODUCTVERSION PACKAGE_VERSION_MAJOR,PACKAGE_VERSION_MINOR,PACKAGE_VERSION_SUBMINOR,0 + FILEFLAGSMASK 0x3fL /* VS_FFI_FILEFLAGSMASK */ +#ifdef _DEBUG + FILEFLAGS 0x1L /* VS_FF_DEBUG */ +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x10004L /* VOS_DOS_WINDOWS32 */ + FILETYPE 0x2L /* VFT_DLL */ + FILESUBTYPE 0x0L /* VFT2_UNKNOWN */ +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "04090000" /* Lang = US English, Charset = ASCII */ + BEGIN + VALUE "Comments", "This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License version 3 or later. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see \0" + VALUE "CompanyName", "Free Software Foundation\0" + VALUE "FileDescription", "LGPLed libunistring for Windows NT/2000/XP/Vista and Windows 95/98/ME\0" + VALUE "FileVersion", PACKAGE_VERSION_STRING "\0" + VALUE "InternalName", "unistring.dll\0" + VALUE "LegalCopyright", "Copyright (C) 2001-2009\0" + VALUE "LegalTrademarks", "\0" + VALUE "OriginalFilename", "unistring.dll\0" + VALUE "ProductName", "libunistring: Unicode string library\0" + VALUE "ProductVersion", PACKAGE_VERSION_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 0 /* US English, ASCII */ + END +END diff --git a/lib/libunistring.sym b/lib/libunistring.sym new file mode 100644 index 00000000..b7e824ff --- /dev/null +++ b/lib/libunistring.sym @@ -0,0 +1,559 @@ +UC_CATEGORY_C +UC_CATEGORY_Cc +UC_CATEGORY_Cf +UC_CATEGORY_Cn +UC_CATEGORY_Co +UC_CATEGORY_Cs +UC_CATEGORY_L +UC_CATEGORY_Ll +UC_CATEGORY_Lm +UC_CATEGORY_Lo +UC_CATEGORY_Lt +UC_CATEGORY_Lu +UC_CATEGORY_M +UC_CATEGORY_Mc +UC_CATEGORY_Me +UC_CATEGORY_Mn +UC_CATEGORY_N +UC_CATEGORY_Nd +UC_CATEGORY_Nl +UC_CATEGORY_No +UC_CATEGORY_P +UC_CATEGORY_Pc +UC_CATEGORY_Pd +UC_CATEGORY_Pe +UC_CATEGORY_Pf +UC_CATEGORY_Pi +UC_CATEGORY_Po +UC_CATEGORY_Ps +UC_CATEGORY_S +UC_CATEGORY_Sc +UC_CATEGORY_Sk +UC_CATEGORY_Sm +UC_CATEGORY_So +UC_CATEGORY_Z +UC_CATEGORY_Zl +UC_CATEGORY_Zp +UC_CATEGORY_Zs +UC_PROPERTY_ALPHABETIC +UC_PROPERTY_ASCII_HEX_DIGIT +UC_PROPERTY_BIDI_ARABIC_DIGIT +UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT +UC_PROPERTY_BIDI_BLOCK_SEPARATOR +UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL +UC_PROPERTY_BIDI_COMMON_SEPARATOR +UC_PROPERTY_BIDI_CONTROL +UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE +UC_PROPERTY_BIDI_EUROPEAN_DIGIT +UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR +UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR +UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT +UC_PROPERTY_BIDI_LEFT_TO_RIGHT +UC_PROPERTY_BIDI_NON_SPACING_MARK +UC_PROPERTY_BIDI_OTHER_NEUTRAL +UC_PROPERTY_BIDI_PDF +UC_PROPERTY_BIDI_SEGMENT_SEPARATOR +UC_PROPERTY_BIDI_WHITESPACE +UC_PROPERTY_COMBINING +UC_PROPERTY_COMPOSITE +UC_PROPERTY_CURRENCY_SYMBOL +UC_PROPERTY_DASH +UC_PROPERTY_DECIMAL_DIGIT +UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT +UC_PROPERTY_DEPRECATED +UC_PROPERTY_DIACRITIC +UC_PROPERTY_EXTENDER +UC_PROPERTY_FORMAT_CONTROL +UC_PROPERTY_GRAPHEME_BASE +UC_PROPERTY_GRAPHEME_EXTEND +UC_PROPERTY_GRAPHEME_LINK +UC_PROPERTY_HEX_DIGIT +UC_PROPERTY_HYPHEN +UC_PROPERTY_IDEOGRAPHIC +UC_PROPERTY_IDS_BINARY_OPERATOR +UC_PROPERTY_IDS_TRINARY_OPERATOR +UC_PROPERTY_ID_CONTINUE +UC_PROPERTY_ID_START +UC_PROPERTY_IGNORABLE_CONTROL +UC_PROPERTY_ISO_CONTROL +UC_PROPERTY_JOIN_CONTROL +UC_PROPERTY_LEFT_OF_PAIR +UC_PROPERTY_LINE_SEPARATOR +UC_PROPERTY_LOGICAL_ORDER_EXCEPTION +UC_PROPERTY_LOWERCASE +UC_PROPERTY_MATH +UC_PROPERTY_NON_BREAK +UC_PROPERTY_NOT_A_CHARACTER +UC_PROPERTY_NUMERIC +UC_PROPERTY_OTHER_ALPHABETIC +UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT +UC_PROPERTY_OTHER_GRAPHEME_EXTEND +UC_PROPERTY_OTHER_ID_CONTINUE +UC_PROPERTY_OTHER_ID_START +UC_PROPERTY_OTHER_LOWERCASE +UC_PROPERTY_OTHER_MATH +UC_PROPERTY_OTHER_UPPERCASE +UC_PROPERTY_PAIRED_PUNCTUATION +UC_PROPERTY_PARAGRAPH_SEPARATOR +UC_PROPERTY_PATTERN_SYNTAX +UC_PROPERTY_PATTERN_WHITE_SPACE +UC_PROPERTY_PRIVATE_USE +UC_PROPERTY_PUNCTUATION +UC_PROPERTY_QUOTATION_MARK +UC_PROPERTY_RADICAL +UC_PROPERTY_SENTENCE_TERMINAL +UC_PROPERTY_SOFT_DOTTED +UC_PROPERTY_SPACE +UC_PROPERTY_TERMINAL_PUNCTUATION +UC_PROPERTY_TITLECASE +UC_PROPERTY_UNASSIGNED_CODE_VALUE +UC_PROPERTY_UNIFIED_IDEOGRAPH +UC_PROPERTY_UPPERCASE +UC_PROPERTY_VARIATION_SELECTOR +UC_PROPERTY_WHITE_SPACE +UC_PROPERTY_XID_CONTINUE +UC_PROPERTY_XID_START +UC_PROPERTY_ZERO_WIDTH +_libunistring_version +locale_charset +u16_asnprintf +u16_asprintf +u16_casecmp +u16_casecoll +u16_casefold +u16_casexfrm +u16_casing_prefix_context +u16_casing_prefixes_context +u16_casing_suffix_context +u16_casing_suffixes_context +u16_check +u16_chr +u16_cmp +u16_cmp2 +u16_conv_from_encoding +u16_conv_to_encoding +u16_cpy +u16_cpy_alloc +u16_ct_casefold +u16_ct_tolower +u16_ct_totitle +u16_ct_toupper +u16_endswith +u16_is_cased +u16_is_casefolded +u16_is_lowercase +u16_is_titlecase +u16_is_uppercase +u16_mblen +u16_mbsnlen +u16_mbtouc +u16_mbtouc_aux +u16_mbtouc_unsafe +u16_mbtouc_unsafe_aux +u16_mbtoucr +u16_move +u16_next +u16_normalize +u16_normcmp +u16_normcoll +u16_normxfrm +u16_possible_linebreaks +u16_prev +u16_set +u16_snprintf +u16_sprintf +u16_startswith +u16_stpcpy +u16_stpncpy +u16_strcat +u16_strchr +u16_strcmp +u16_strcoll +u16_strconv_from_encoding +u16_strconv_from_locale +u16_strconv_to_encoding +u16_strconv_to_locale +u16_strcpy +u16_strcspn +u16_strdup +u16_strlen +u16_strmblen +u16_strmbtouc +u16_strncat +u16_strncmp +u16_strncpy +u16_strnlen +u16_strpbrk +u16_strrchr +u16_strspn +u16_strstr +u16_strtok +u16_strwidth +u16_to_u32 +u16_to_u8 +u16_tolower +u16_totitle +u16_toupper +u16_u16_asnprintf +u16_u16_asprintf +u16_u16_snprintf +u16_u16_sprintf +u16_u16_vasnprintf +u16_u16_vasprintf +u16_u16_vsnprintf +u16_u16_vsprintf +u16_uctomb +u16_uctomb_aux +u16_vasnprintf +u16_vasprintf +u16_vsnprintf +u16_vsprintf +u16_width +u16_width_linebreaks +u16_wordbreaks +u32_asnprintf +u32_asprintf +u32_casecmp +u32_casecoll +u32_casefold +u32_casexfrm +u32_casing_prefix_context +u32_casing_prefixes_context +u32_casing_suffix_context +u32_casing_suffixes_context +u32_check +u32_chr +u32_cmp +u32_cmp2 +u32_conv_from_encoding +u32_conv_to_encoding +u32_cpy +u32_cpy_alloc +u32_ct_casefold +u32_ct_tolower +u32_ct_totitle +u32_ct_toupper +u32_endswith +u32_is_cased +u32_is_casefolded +u32_is_lowercase +u32_is_titlecase +u32_is_uppercase +u32_mblen +u32_mbsnlen +u32_mbtouc +u32_mbtouc_unsafe +u32_mbtoucr +u32_move +u32_next +u32_normalize +u32_normcmp +u32_normcoll +u32_normxfrm +u32_possible_linebreaks +u32_prev +u32_set +u32_snprintf +u32_sprintf +u32_startswith +u32_stpcpy +u32_stpncpy +u32_strcat +u32_strchr +u32_strcmp +u32_strcoll +u32_strconv_from_encoding +u32_strconv_from_locale +u32_strconv_to_encoding +u32_strconv_to_locale +u32_strcpy +u32_strcspn +u32_strdup +u32_strlen +u32_strmblen +u32_strmbtouc +u32_strncat +u32_strncmp +u32_strncpy +u32_strnlen +u32_strpbrk +u32_strrchr +u32_strspn +u32_strstr +u32_strtok +u32_strwidth +u32_to_u16 +u32_to_u8 +u32_tolower +u32_totitle +u32_toupper +u32_u32_asnprintf +u32_u32_asprintf +u32_u32_snprintf +u32_u32_sprintf +u32_u32_vasnprintf +u32_u32_vasprintf +u32_u32_vsnprintf +u32_u32_vsprintf +u32_uctomb +u32_vasnprintf +u32_vasprintf +u32_vsnprintf +u32_vsprintf +u32_width +u32_width_linebreaks +u32_wordbreaks +u8_asnprintf +u8_asprintf +u8_casecmp +u8_casecoll +u8_casefold +u8_casexfrm +u8_casing_prefix_context +u8_casing_prefixes_context +u8_casing_suffix_context +u8_casing_suffixes_context +u8_check +u8_chr +u8_cmp +u8_cmp2 +u8_conv_from_encoding +u8_conv_to_encoding +u8_cpy +u8_cpy_alloc +u8_ct_casefold +u8_ct_tolower +u8_ct_totitle +u8_ct_toupper +u8_endswith +u8_is_cased +u8_is_casefolded +u8_is_lowercase +u8_is_titlecase +u8_is_uppercase +u8_mblen +u8_mbsnlen +u8_mbtouc +u8_mbtouc_aux +u8_mbtouc_unsafe +u8_mbtouc_unsafe_aux +u8_mbtoucr +u8_move +u8_next +u8_normalize +u8_normcmp +u8_normcoll +u8_normxfrm +u8_possible_linebreaks +u8_prev +u8_set +u8_snprintf +u8_sprintf +u8_startswith +u8_stpcpy +u8_stpncpy +u8_strcat +u8_strchr +u8_strcmp +u8_strcoll +u8_strconv_from_encoding +u8_strconv_from_locale +u8_strconv_to_encoding +u8_strconv_to_locale +u8_strcpy +u8_strcspn +u8_strdup +u8_strlen +u8_strmblen +u8_strmbtouc +u8_strncat +u8_strncmp +u8_strncpy +u8_strnlen +u8_strpbrk +u8_strrchr +u8_strspn +u8_strstr +u8_strtok +u8_strwidth +u8_to_u16 +u8_to_u32 +u8_tolower +u8_totitle +u8_toupper +u8_u8_asnprintf +u8_u8_asprintf +u8_u8_snprintf +u8_u8_sprintf +u8_u8_vasnprintf +u8_u8_vasprintf +u8_u8_vsnprintf +u8_u8_vsprintf +u8_uctomb +u8_uctomb_aux +u8_vasnprintf +u8_vasprintf +u8_vsnprintf +u8_vsprintf +u8_width +u8_width_linebreaks +u8_wordbreaks +uc_all_blocks +uc_all_scripts +uc_bidi_category +uc_bidi_category_byname +uc_bidi_category_name +uc_block +uc_c_ident_category +uc_canonical_decomposition +uc_combining_class +uc_composition +uc_decimal_value +uc_decomposition +uc_digit_value +uc_general_category +uc_general_category_and +uc_general_category_and_not +uc_general_category_byname +uc_general_category_name +uc_general_category_or +uc_is_alnum +uc_is_alpha +uc_is_bidi_category +uc_is_blank +uc_is_block +uc_is_c_whitespace +uc_is_cntrl +uc_is_digit +uc_is_general_category +uc_is_general_category_withtable +uc_is_graph +uc_is_java_whitespace +uc_is_lower +uc_is_print +uc_is_property +uc_is_property_alphabetic +uc_is_property_ascii_hex_digit +uc_is_property_bidi_arabic_digit +uc_is_property_bidi_arabic_right_to_left +uc_is_property_bidi_block_separator +uc_is_property_bidi_boundary_neutral +uc_is_property_bidi_common_separator +uc_is_property_bidi_control +uc_is_property_bidi_embedding_or_override +uc_is_property_bidi_eur_num_separator +uc_is_property_bidi_eur_num_terminator +uc_is_property_bidi_european_digit +uc_is_property_bidi_hebrew_right_to_left +uc_is_property_bidi_left_to_right +uc_is_property_bidi_non_spacing_mark +uc_is_property_bidi_other_neutral +uc_is_property_bidi_pdf +uc_is_property_bidi_segment_separator +uc_is_property_bidi_whitespace +uc_is_property_combining +uc_is_property_composite +uc_is_property_currency_symbol +uc_is_property_dash +uc_is_property_decimal_digit +uc_is_property_default_ignorable_code_point +uc_is_property_deprecated +uc_is_property_diacritic +uc_is_property_extender +uc_is_property_format_control +uc_is_property_grapheme_base +uc_is_property_grapheme_extend +uc_is_property_grapheme_link +uc_is_property_hex_digit +uc_is_property_hyphen +uc_is_property_id_continue +uc_is_property_id_start +uc_is_property_ideographic +uc_is_property_ids_binary_operator +uc_is_property_ids_trinary_operator +uc_is_property_ignorable_control +uc_is_property_iso_control +uc_is_property_join_control +uc_is_property_left_of_pair +uc_is_property_line_separator +uc_is_property_logical_order_exception +uc_is_property_lowercase +uc_is_property_math +uc_is_property_non_break +uc_is_property_not_a_character +uc_is_property_numeric +uc_is_property_other_alphabetic +uc_is_property_other_default_ignorable_code_point +uc_is_property_other_grapheme_extend +uc_is_property_other_id_continue +uc_is_property_other_id_start +uc_is_property_other_lowercase +uc_is_property_other_math +uc_is_property_other_uppercase +uc_is_property_paired_punctuation +uc_is_property_paragraph_separator +uc_is_property_pattern_syntax +uc_is_property_pattern_white_space +uc_is_property_private_use +uc_is_property_punctuation +uc_is_property_quotation_mark +uc_is_property_radical +uc_is_property_sentence_terminal +uc_is_property_soft_dotted +uc_is_property_space +uc_is_property_terminal_punctuation +uc_is_property_titlecase +uc_is_property_unassigned_code_value +uc_is_property_unified_ideograph +uc_is_property_uppercase +uc_is_property_variation_selector +uc_is_property_white_space +uc_is_property_xid_continue +uc_is_property_xid_start +uc_is_property_zero_width +uc_is_punct +uc_is_script +uc_is_space +uc_is_upper +uc_is_xdigit +uc_java_ident_category +uc_locale_language +uc_mirror_char +uc_numeric_value +uc_property_byname +uc_script +uc_script_byname +uc_tolower +uc_totitle +uc_toupper +uc_width +uc_wordbreak_property +ulc_asnprintf +ulc_asprintf +ulc_casecmp +ulc_casecoll +ulc_casexfrm +ulc_fprintf +ulc_possible_linebreaks +ulc_snprintf +ulc_sprintf +ulc_vasnprintf +ulc_vasprintf +ulc_vfprintf +ulc_vsnprintf +ulc_vsprintf +ulc_width_linebreaks +ulc_wordbreaks +unicase_empty_prefix_context +unicase_empty_suffix_context +unicode_character_name +unicode_name_character +uninorm_decomposing_form +uninorm_filter_create +uninorm_filter_flush +uninorm_filter_free +uninorm_filter_write +uninorm_nfc +uninorm_nfd +uninorm_nfkc +uninorm_nfkd diff --git a/lib/localcharset.c b/lib/localcharset.c new file mode 100644 index 00000000..93da1707 --- /dev/null +++ b/lib/localcharset.c @@ -0,0 +1,499 @@ +/* Determine a canonical name for the current locale's character encoding. + + Copyright (C) 2000-2006, 2008-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "localcharset.h" + +#include +#include +#include +#include + +#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET +# define DARWIN7 /* Darwin 7 or newer, i.e. MacOS X 10.3 or newer */ +#endif + +#if defined _WIN32 || defined __WIN32__ +# define WIN32_NATIVE +#endif + +#if defined __EMX__ +/* Assume EMX program runs on OS/2, even if compiled under DOS. */ +# ifndef OS2 +# define OS2 +# endif +#endif + +#if !defined WIN32_NATIVE +# if HAVE_LANGINFO_CODESET +# include +# else +# if 0 /* see comment below */ +# include +# endif +# endif +# ifdef __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include +# endif +#elif defined WIN32_NATIVE +# define WIN32_LEAN_AND_MEAN +# include +#endif +#if defined OS2 +# define INCL_DOS +# include +#endif + +#if ENABLE_RELOCATABLE +# include "relocatable.h" +#else +# define relocate(pathname) (pathname) +#endif + +/* Get LIBDIR. */ +#ifndef LIBDIR +# include "configmake.h" +#endif + +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Win32, Cygwin, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#endif + +#ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +#endif + +#ifndef ISSLASH +# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) +#endif + +#if HAVE_DECL_GETC_UNLOCKED +# undef getc +# define getc getc_unlocked +#endif + +/* The following static variable is declared 'volatile' to avoid a + possible multithread problem in the function get_charset_aliases. If we + are running in a threaded environment, and if two threads initialize + 'charset_aliases' simultaneously, both will produce the same value, + and everything will be ok if the two assignments to 'charset_aliases' + are atomic. But I don't know what will happen if the two assignments mix. */ +#if __STDC__ != 1 +# define volatile /* empty */ +#endif +/* Pointer to the contents of the charset.alias file, if it has already been + read, else NULL. Its format is: + ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ +static const char * volatile charset_aliases; + +/* Return a pointer to the contents of the charset.alias file. */ +static const char * +get_charset_aliases (void) +{ + const char *cp; + + cp = charset_aliases; + if (cp == NULL) + { +#if !(defined DARWIN7 || defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) + FILE *fp; + const char *dir; + const char *base = "charset.alias"; + char *file_name; + + /* Make it possible to override the charset.alias location. This is + necessary for running the testsuite before "make install". */ + dir = getenv ("CHARSETALIASDIR"); + if (dir == NULL || dir[0] == '\0') + dir = relocate (LIBDIR); + + /* Concatenate dir and base into freshly allocated file_name. */ + { + size_t dir_len = strlen (dir); + size_t base_len = strlen (base); + int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); + file_name = (char *) malloc (dir_len + add_slash + base_len + 1); + if (file_name != NULL) + { + memcpy (file_name, dir, dir_len); + if (add_slash) + file_name[dir_len] = DIRECTORY_SEPARATOR; + memcpy (file_name + dir_len + add_slash, base, base_len + 1); + } + } + + if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) + /* Out of memory or file not found, treat it as empty. */ + cp = ""; + else + { + /* Parse the file's contents. */ + char *res_ptr = NULL; + size_t res_size = 0; + + for (;;) + { + int c; + char buf1[50+1]; + char buf2[50+1]; + size_t l1, l2; + char *old_res_ptr; + + c = getc (fp); + if (c == EOF) + break; + if (c == '\n' || c == ' ' || c == '\t') + continue; + if (c == '#') + { + /* Skip comment, to end of line. */ + do + c = getc (fp); + while (!(c == EOF || c == '\n')); + if (c == EOF) + break; + continue; + } + ungetc (c, fp); + if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) + break; + l1 = strlen (buf1); + l2 = strlen (buf2); + old_res_ptr = res_ptr; + if (res_size == 0) + { + res_size = l1 + 1 + l2 + 1; + res_ptr = (char *) malloc (res_size + 1); + } + else + { + res_size += l1 + 1 + l2 + 1; + res_ptr = (char *) realloc (res_ptr, res_size + 1); + } + if (res_ptr == NULL) + { + /* Out of memory. */ + res_size = 0; + if (old_res_ptr != NULL) + free (old_res_ptr); + break; + } + strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); + strcpy (res_ptr + res_size - (l2 + 1), buf2); + } + fclose (fp); + if (res_size == 0) + cp = ""; + else + { + *(res_ptr + res_size) = '\0'; + cp = res_ptr; + } + } + + if (file_name != NULL) + free (file_name); + +#else + +# if defined DARWIN7 + /* To avoid the trouble of installing a file that is shared by many + GNU packages -- many packaging systems have problems with this --, + simply inline the aliases here. */ + cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" + "ISO8859-2" "\0" "ISO-8859-2" "\0" + "ISO8859-4" "\0" "ISO-8859-4" "\0" + "ISO8859-5" "\0" "ISO-8859-5" "\0" + "ISO8859-7" "\0" "ISO-8859-7" "\0" + "ISO8859-9" "\0" "ISO-8859-9" "\0" + "ISO8859-13" "\0" "ISO-8859-13" "\0" + "ISO8859-15" "\0" "ISO-8859-15" "\0" + "KOI8-R" "\0" "KOI8-R" "\0" + "KOI8-U" "\0" "KOI8-U" "\0" + "CP866" "\0" "CP866" "\0" + "CP949" "\0" "CP949" "\0" + "CP1131" "\0" "CP1131" "\0" + "CP1251" "\0" "CP1251" "\0" + "eucCN" "\0" "GB2312" "\0" + "GB2312" "\0" "GB2312" "\0" + "eucJP" "\0" "EUC-JP" "\0" + "eucKR" "\0" "EUC-KR" "\0" + "Big5" "\0" "BIG5" "\0" + "Big5HKSCS" "\0" "BIG5-HKSCS" "\0" + "GBK" "\0" "GBK" "\0" + "GB18030" "\0" "GB18030" "\0" + "SJIS" "\0" "SHIFT_JIS" "\0" + "ARMSCII-8" "\0" "ARMSCII-8" "\0" + "PT154" "\0" "PT154" "\0" + /*"ISCII-DEV" "\0" "?" "\0"*/ + "*" "\0" "UTF-8" "\0"; +# endif + +# if defined VMS + /* To avoid the troubles of an extra file charset.alias_vms in the + sources of many GNU packages, simply inline the aliases here. */ + /* The list of encodings is taken from the OpenVMS 7.3-1 documentation + "Compaq C Run-Time Library Reference Manual for OpenVMS systems" + section 10.7 "Handling Different Character Sets". */ + cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" + "ISO8859-2" "\0" "ISO-8859-2" "\0" + "ISO8859-5" "\0" "ISO-8859-5" "\0" + "ISO8859-7" "\0" "ISO-8859-7" "\0" + "ISO8859-8" "\0" "ISO-8859-8" "\0" + "ISO8859-9" "\0" "ISO-8859-9" "\0" + /* Japanese */ + "eucJP" "\0" "EUC-JP" "\0" + "SJIS" "\0" "SHIFT_JIS" "\0" + "DECKANJI" "\0" "DEC-KANJI" "\0" + "SDECKANJI" "\0" "EUC-JP" "\0" + /* Chinese */ + "eucTW" "\0" "EUC-TW" "\0" + "DECHANYU" "\0" "DEC-HANYU" "\0" + "DECHANZI" "\0" "GB2312" "\0" + /* Korean */ + "DECKOREAN" "\0" "EUC-KR" "\0"; +# endif + +# if defined WIN32_NATIVE || defined __CYGWIN__ + /* To avoid the troubles of installing a separate file in the same + directory as the DLL and of retrieving the DLL's directory at + runtime, simply inline the aliases here. */ + + cp = "CP936" "\0" "GBK" "\0" + "CP1361" "\0" "JOHAB" "\0" + "CP20127" "\0" "ASCII" "\0" + "CP20866" "\0" "KOI8-R" "\0" + "CP20936" "\0" "GB2312" "\0" + "CP21866" "\0" "KOI8-RU" "\0" + "CP28591" "\0" "ISO-8859-1" "\0" + "CP28592" "\0" "ISO-8859-2" "\0" + "CP28593" "\0" "ISO-8859-3" "\0" + "CP28594" "\0" "ISO-8859-4" "\0" + "CP28595" "\0" "ISO-8859-5" "\0" + "CP28596" "\0" "ISO-8859-6" "\0" + "CP28597" "\0" "ISO-8859-7" "\0" + "CP28598" "\0" "ISO-8859-8" "\0" + "CP28599" "\0" "ISO-8859-9" "\0" + "CP28605" "\0" "ISO-8859-15" "\0" + "CP38598" "\0" "ISO-8859-8" "\0" + "CP51932" "\0" "EUC-JP" "\0" + "CP51936" "\0" "GB2312" "\0" + "CP51949" "\0" "EUC-KR" "\0" + "CP51950" "\0" "EUC-TW" "\0" + "CP54936" "\0" "GB18030" "\0" + "CP65001" "\0" "UTF-8" "\0"; +# endif +#endif + + charset_aliases = cp; + } + + return cp; +} + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in config.charset. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. */ + +#ifdef STATIC +STATIC +#endif +const char * +locale_charset (void) +{ + const char *codeset; + const char *aliases; + +#if !(defined WIN32_NATIVE || defined OS2) + +# if HAVE_LANGINFO_CODESET + + /* Most systems support nl_langinfo (CODESET) nowadays. */ + codeset = nl_langinfo (CODESET); + +# ifdef __CYGWIN__ + /* Cygwin 2006 does not have locales. nl_langinfo (CODESET) always + returns "US-ASCII". As long as this is not fixed, return the suffix + of the locale name from the environment variables (if present) or + the codepage as a number. */ + if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) + { + const char *locale; + static char buf[2 + 10 + 1]; + + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return + it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (buf)) + { + memcpy (buf, dot, modifier - dot); + buf [modifier - dot] = '\0'; + return buf; + } + } + } + + /* Woe32 has a function returning the locale's codepage as a number. */ + sprintf (buf, "CP%u", GetACP ()); + codeset = buf; + } +# endif + +# else + + /* On old systems which lack it, use setlocale or getenv. */ + const char *locale = NULL; + + /* But most old systems don't have a complete set of locales. Some + (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't + use setlocale here; it would return "C" when it doesn't support the + locale name the user has set. */ +# if 0 + locale = setlocale (LC_CTYPE, NULL); +# endif + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + } + + /* On some old systems, one used to set locale = "iso8859_1". On others, + you set it to "language_COUNTRY.charset". In any case, we resolve it + through the charset.alias file. */ + codeset = locale; + +# endif + +#elif defined WIN32_NATIVE + + static char buf[2 + 10 + 1]; + + /* Woe32 has a function returning the locale's codepage as a number. */ + sprintf (buf, "CP%u", GetACP ()); + codeset = buf; + +#elif defined OS2 + + const char *locale; + static char buf[2 + 10 + 1]; + ULONG cp[3]; + ULONG cplen; + + /* Allow user to override the codeset, as set in the operating system, + with standard language environment variables. */ + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (buf)) + { + memcpy (buf, dot, modifier - dot); + buf [modifier - dot] = '\0'; + return buf; + } + } + + /* Resolve through the charset.alias file. */ + codeset = locale; + } + else + { + /* OS/2 has a function returning the locale's codepage as a number. */ + if (DosQueryCp (sizeof (cp), cp, &cplen)) + codeset = ""; + else + { + sprintf (buf, "CP%u", cp[0]); + codeset = buf; + } + } + +#endif + + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; + + /* Resolve alias. */ + for (aliases = get_charset_aliases (); + *aliases != '\0'; + aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) + if (strcmp (codeset, aliases) == 0 + || (aliases[0] == '*' && aliases[1] == '\0')) + { + codeset = aliases + strlen (aliases) + 1; + break; + } + + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + if (codeset[0] == '\0') + codeset = "ASCII"; + + return codeset; +} diff --git a/lib/localcharset.h b/lib/localcharset.h new file mode 100644 index 00000000..1772a50f --- /dev/null +++ b/lib/localcharset.h @@ -0,0 +1,41 @@ +/* Determine a canonical name for the current locale's character encoding. + Copyright (C) 2000-2003 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _LOCALCHARSET_H +#define _LOCALCHARSET_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in config.charset. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. */ +extern const char * locale_charset (void); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LOCALCHARSET_H */ diff --git a/lib/localename.c b/lib/localename.c new file mode 100644 index 00000000..9f4c1819 --- /dev/null +++ b/lib/localename.c @@ -0,0 +1,1692 @@ +/* Determine name of the currently selected locale. + Copyright (C) 1995-1999, 2000-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA. */ + +/* Written by Ulrich Drepper , 1995. */ +/* Win32 code written by Tor Lillqvist . */ +/* MacOS X code written by Bruno Haible . */ + +#include + +/* Specification. */ +#ifdef IN_LIBINTL +# include "gettextP.h" +#else +# include "localename.h" +#endif + +#include +#include + +#if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE +# include +# include +# if HAVE_CFLOCALECOPYCURRENT +# include +# elif HAVE_CFPREFERENCESCOPYAPPVALUE +# include +# endif +#endif + +#if defined _WIN32 || defined __WIN32__ +# define WIN32_NATIVE +#endif + +#ifdef WIN32_NATIVE +# define WIN32_LEAN_AND_MEAN +# include +/* List of language codes, sorted by value: + 0x01 LANG_ARABIC + 0x02 LANG_BULGARIAN + 0x03 LANG_CATALAN + 0x04 LANG_CHINESE + 0x05 LANG_CZECH + 0x06 LANG_DANISH + 0x07 LANG_GERMAN + 0x08 LANG_GREEK + 0x09 LANG_ENGLISH + 0x0a LANG_SPANISH + 0x0b LANG_FINNISH + 0x0c LANG_FRENCH + 0x0d LANG_HEBREW + 0x0e LANG_HUNGARIAN + 0x0f LANG_ICELANDIC + 0x10 LANG_ITALIAN + 0x11 LANG_JAPANESE + 0x12 LANG_KOREAN + 0x13 LANG_DUTCH + 0x14 LANG_NORWEGIAN + 0x15 LANG_POLISH + 0x16 LANG_PORTUGUESE + 0x17 LANG_RHAETO_ROMANCE + 0x18 LANG_ROMANIAN + 0x19 LANG_RUSSIAN + 0x1a LANG_CROATIAN == LANG_SERBIAN + 0x1b LANG_SLOVAK + 0x1c LANG_ALBANIAN + 0x1d LANG_SWEDISH + 0x1e LANG_THAI + 0x1f LANG_TURKISH + 0x20 LANG_URDU + 0x21 LANG_INDONESIAN + 0x22 LANG_UKRAINIAN + 0x23 LANG_BELARUSIAN + 0x24 LANG_SLOVENIAN + 0x25 LANG_ESTONIAN + 0x26 LANG_LATVIAN + 0x27 LANG_LITHUANIAN + 0x28 LANG_TAJIK + 0x29 LANG_FARSI + 0x2a LANG_VIETNAMESE + 0x2b LANG_ARMENIAN + 0x2c LANG_AZERI + 0x2d LANG_BASQUE + 0x2e LANG_SORBIAN + 0x2f LANG_MACEDONIAN + 0x30 LANG_SUTU + 0x31 LANG_TSONGA + 0x32 LANG_TSWANA + 0x33 LANG_VENDA + 0x34 LANG_XHOSA + 0x35 LANG_ZULU + 0x36 LANG_AFRIKAANS + 0x37 LANG_GEORGIAN + 0x38 LANG_FAEROESE + 0x39 LANG_HINDI + 0x3a LANG_MALTESE + 0x3b LANG_SAAMI + 0x3c LANG_GAELIC + 0x3d LANG_YIDDISH + 0x3e LANG_MALAY + 0x3f LANG_KAZAK + 0x40 LANG_KYRGYZ + 0x41 LANG_SWAHILI + 0x42 LANG_TURKMEN + 0x43 LANG_UZBEK + 0x44 LANG_TATAR + 0x45 LANG_BENGALI + 0x46 LANG_PUNJABI + 0x47 LANG_GUJARATI + 0x48 LANG_ORIYA + 0x49 LANG_TAMIL + 0x4a LANG_TELUGU + 0x4b LANG_KANNADA + 0x4c LANG_MALAYALAM + 0x4d LANG_ASSAMESE + 0x4e LANG_MARATHI + 0x4f LANG_SANSKRIT + 0x50 LANG_MONGOLIAN + 0x51 LANG_TIBETAN + 0x52 LANG_WELSH + 0x53 LANG_CAMBODIAN + 0x54 LANG_LAO + 0x55 LANG_BURMESE + 0x56 LANG_GALICIAN + 0x57 LANG_KONKANI + 0x58 LANG_MANIPURI + 0x59 LANG_SINDHI + 0x5a LANG_SYRIAC + 0x5b LANG_SINHALESE + 0x5c LANG_CHEROKEE + 0x5d LANG_INUKTITUT + 0x5e LANG_AMHARIC + 0x5f LANG_TAMAZIGHT + 0x60 LANG_KASHMIRI + 0x61 LANG_NEPALI + 0x62 LANG_FRISIAN + 0x63 LANG_PASHTO + 0x64 LANG_TAGALOG + 0x65 LANG_DIVEHI + 0x66 LANG_EDO + 0x67 LANG_FULFULDE + 0x68 LANG_HAUSA + 0x69 LANG_IBIBIO + 0x6a LANG_YORUBA + 0x70 LANG_IGBO + 0x71 LANG_KANURI + 0x72 LANG_OROMO + 0x73 LANG_TIGRINYA + 0x74 LANG_GUARANI + 0x75 LANG_HAWAIIAN + 0x76 LANG_LATIN + 0x77 LANG_SOMALI + 0x78 LANG_YI + 0x79 LANG_PAPIAMENTU +*/ +/* Mingw headers don't have latest language and sublanguage codes. */ +# ifndef LANG_AFRIKAANS +# define LANG_AFRIKAANS 0x36 +# endif +# ifndef LANG_ALBANIAN +# define LANG_ALBANIAN 0x1c +# endif +# ifndef LANG_AMHARIC +# define LANG_AMHARIC 0x5e +# endif +# ifndef LANG_ARABIC +# define LANG_ARABIC 0x01 +# endif +# ifndef LANG_ARMENIAN +# define LANG_ARMENIAN 0x2b +# endif +# ifndef LANG_ASSAMESE +# define LANG_ASSAMESE 0x4d +# endif +# ifndef LANG_AZERI +# define LANG_AZERI 0x2c +# endif +# ifndef LANG_BASQUE +# define LANG_BASQUE 0x2d +# endif +# ifndef LANG_BELARUSIAN +# define LANG_BELARUSIAN 0x23 +# endif +# ifndef LANG_BENGALI +# define LANG_BENGALI 0x45 +# endif +# ifndef LANG_BURMESE +# define LANG_BURMESE 0x55 +# endif +# ifndef LANG_CAMBODIAN +# define LANG_CAMBODIAN 0x53 +# endif +# ifndef LANG_CATALAN +# define LANG_CATALAN 0x03 +# endif +# ifndef LANG_CHEROKEE +# define LANG_CHEROKEE 0x5c +# endif +# ifndef LANG_DIVEHI +# define LANG_DIVEHI 0x65 +# endif +# ifndef LANG_EDO +# define LANG_EDO 0x66 +# endif +# ifndef LANG_ESTONIAN +# define LANG_ESTONIAN 0x25 +# endif +# ifndef LANG_FAEROESE +# define LANG_FAEROESE 0x38 +# endif +# ifndef LANG_FARSI +# define LANG_FARSI 0x29 +# endif +# ifndef LANG_FRISIAN +# define LANG_FRISIAN 0x62 +# endif +# ifndef LANG_FULFULDE +# define LANG_FULFULDE 0x67 +# endif +# ifndef LANG_GAELIC +# define LANG_GAELIC 0x3c +# endif +# ifndef LANG_GALICIAN +# define LANG_GALICIAN 0x56 +# endif +# ifndef LANG_GEORGIAN +# define LANG_GEORGIAN 0x37 +# endif +# ifndef LANG_GUARANI +# define LANG_GUARANI 0x74 +# endif +# ifndef LANG_GUJARATI +# define LANG_GUJARATI 0x47 +# endif +# ifndef LANG_HAUSA +# define LANG_HAUSA 0x68 +# endif +# ifndef LANG_HAWAIIAN +# define LANG_HAWAIIAN 0x75 +# endif +# ifndef LANG_HEBREW +# define LANG_HEBREW 0x0d +# endif +# ifndef LANG_HINDI +# define LANG_HINDI 0x39 +# endif +# ifndef LANG_IBIBIO +# define LANG_IBIBIO 0x69 +# endif +# ifndef LANG_IGBO +# define LANG_IGBO 0x70 +# endif +# ifndef LANG_INDONESIAN +# define LANG_INDONESIAN 0x21 +# endif +# ifndef LANG_INUKTITUT +# define LANG_INUKTITUT 0x5d +# endif +# ifndef LANG_KANNADA +# define LANG_KANNADA 0x4b +# endif +# ifndef LANG_KANURI +# define LANG_KANURI 0x71 +# endif +# ifndef LANG_KASHMIRI +# define LANG_KASHMIRI 0x60 +# endif +# ifndef LANG_KAZAK +# define LANG_KAZAK 0x3f +# endif +# ifndef LANG_KONKANI +# define LANG_KONKANI 0x57 +# endif +# ifndef LANG_KYRGYZ +# define LANG_KYRGYZ 0x40 +# endif +# ifndef LANG_LAO +# define LANG_LAO 0x54 +# endif +# ifndef LANG_LATIN +# define LANG_LATIN 0x76 +# endif +# ifndef LANG_LATVIAN +# define LANG_LATVIAN 0x26 +# endif +# ifndef LANG_LITHUANIAN +# define LANG_LITHUANIAN 0x27 +# endif +# ifndef LANG_MACEDONIAN +# define LANG_MACEDONIAN 0x2f +# endif +# ifndef LANG_MALAY +# define LANG_MALAY 0x3e +# endif +# ifndef LANG_MALAYALAM +# define LANG_MALAYALAM 0x4c +# endif +# ifndef LANG_MALTESE +# define LANG_MALTESE 0x3a +# endif +# ifndef LANG_MANIPURI +# define LANG_MANIPURI 0x58 +# endif +# ifndef LANG_MAORI +# define LANG_MAORI 0x81 +# endif +# ifndef LANG_MARATHI +# define LANG_MARATHI 0x4e +# endif +# ifndef LANG_MONGOLIAN +# define LANG_MONGOLIAN 0x50 +# endif +# ifndef LANG_NEPALI +# define LANG_NEPALI 0x61 +# endif +# ifndef LANG_ORIYA +# define LANG_ORIYA 0x48 +# endif +# ifndef LANG_OROMO +# define LANG_OROMO 0x72 +# endif +# ifndef LANG_PAPIAMENTU +# define LANG_PAPIAMENTU 0x79 +# endif +# ifndef LANG_PASHTO +# define LANG_PASHTO 0x63 +# endif +# ifndef LANG_PUNJABI +# define LANG_PUNJABI 0x46 +# endif +# ifndef LANG_QUECHUA +# define LANG_QUECHUA 0x6b +# endif +# ifndef LANG_RHAETO_ROMANCE +# define LANG_RHAETO_ROMANCE 0x17 +# endif +# ifndef LANG_SAAMI +# define LANG_SAAMI 0x3b +# endif +# ifndef LANG_SANSKRIT +# define LANG_SANSKRIT 0x4f +# endif +# ifndef LANG_SERBIAN +# define LANG_SERBIAN 0x1a +# endif +# ifndef LANG_SINDHI +# define LANG_SINDHI 0x59 +# endif +# ifndef LANG_SINHALESE +# define LANG_SINHALESE 0x5b +# endif +# ifndef LANG_SLOVAK +# define LANG_SLOVAK 0x1b +# endif +# ifndef LANG_SOMALI +# define LANG_SOMALI 0x77 +# endif +# ifndef LANG_SORBIAN +# define LANG_SORBIAN 0x2e +# endif +# ifndef LANG_SOTHO +# define LANG_SOTHO 0x6c +# endif +# ifndef LANG_SUTU +# define LANG_SUTU 0x30 +# endif +# ifndef LANG_SWAHILI +# define LANG_SWAHILI 0x41 +# endif +# ifndef LANG_SYRIAC +# define LANG_SYRIAC 0x5a +# endif +# ifndef LANG_TAGALOG +# define LANG_TAGALOG 0x64 +# endif +# ifndef LANG_TAJIK +# define LANG_TAJIK 0x28 +# endif +# ifndef LANG_TAMAZIGHT +# define LANG_TAMAZIGHT 0x5f +# endif +# ifndef LANG_TAMIL +# define LANG_TAMIL 0x49 +# endif +# ifndef LANG_TATAR +# define LANG_TATAR 0x44 +# endif +# ifndef LANG_TELUGU +# define LANG_TELUGU 0x4a +# endif +# ifndef LANG_THAI +# define LANG_THAI 0x1e +# endif +# ifndef LANG_TIBETAN +# define LANG_TIBETAN 0x51 +# endif +# ifndef LANG_TIGRINYA +# define LANG_TIGRINYA 0x73 +# endif +# ifndef LANG_TSONGA +# define LANG_TSONGA 0x31 +# endif +# ifndef LANG_TSWANA +# define LANG_TSWANA 0x32 +# endif +# ifndef LANG_TURKMEN +# define LANG_TURKMEN 0x42 +# endif +# ifndef LANG_UIGHUR +# define LANG_UIGHUR 0x80 +# endif +# ifndef LANG_UKRAINIAN +# define LANG_UKRAINIAN 0x22 +# endif +# ifndef LANG_URDU +# define LANG_URDU 0x20 +# endif +# ifndef LANG_UZBEK +# define LANG_UZBEK 0x43 +# endif +# ifndef LANG_VENDA +# define LANG_VENDA 0x33 +# endif +# ifndef LANG_VIETNAMESE +# define LANG_VIETNAMESE 0x2a +# endif +# ifndef LANG_WELSH +# define LANG_WELSH 0x52 +# endif +# ifndef LANG_XHOSA +# define LANG_XHOSA 0x34 +# endif +# ifndef LANG_YI +# define LANG_YI 0x78 +# endif +# ifndef LANG_YIDDISH +# define LANG_YIDDISH 0x3d +# endif +# ifndef LANG_YORUBA +# define LANG_YORUBA 0x6a +# endif +# ifndef LANG_ZULU +# define LANG_ZULU 0x35 +# endif +# ifndef SUBLANG_ARABIC_SAUDI_ARABIA +# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 +# endif +# ifndef SUBLANG_ARABIC_IRAQ +# define SUBLANG_ARABIC_IRAQ 0x02 +# endif +# ifndef SUBLANG_ARABIC_EGYPT +# define SUBLANG_ARABIC_EGYPT 0x03 +# endif +# ifndef SUBLANG_ARABIC_LIBYA +# define SUBLANG_ARABIC_LIBYA 0x04 +# endif +# ifndef SUBLANG_ARABIC_ALGERIA +# define SUBLANG_ARABIC_ALGERIA 0x05 +# endif +# ifndef SUBLANG_ARABIC_MOROCCO +# define SUBLANG_ARABIC_MOROCCO 0x06 +# endif +# ifndef SUBLANG_ARABIC_TUNISIA +# define SUBLANG_ARABIC_TUNISIA 0x07 +# endif +# ifndef SUBLANG_ARABIC_OMAN +# define SUBLANG_ARABIC_OMAN 0x08 +# endif +# ifndef SUBLANG_ARABIC_YEMEN +# define SUBLANG_ARABIC_YEMEN 0x09 +# endif +# ifndef SUBLANG_ARABIC_SYRIA +# define SUBLANG_ARABIC_SYRIA 0x0a +# endif +# ifndef SUBLANG_ARABIC_JORDAN +# define SUBLANG_ARABIC_JORDAN 0x0b +# endif +# ifndef SUBLANG_ARABIC_LEBANON +# define SUBLANG_ARABIC_LEBANON 0x0c +# endif +# ifndef SUBLANG_ARABIC_KUWAIT +# define SUBLANG_ARABIC_KUWAIT 0x0d +# endif +# ifndef SUBLANG_ARABIC_UAE +# define SUBLANG_ARABIC_UAE 0x0e +# endif +# ifndef SUBLANG_ARABIC_BAHRAIN +# define SUBLANG_ARABIC_BAHRAIN 0x0f +# endif +# ifndef SUBLANG_ARABIC_QATAR +# define SUBLANG_ARABIC_QATAR 0x10 +# endif +# ifndef SUBLANG_AZERI_LATIN +# define SUBLANG_AZERI_LATIN 0x01 +# endif +# ifndef SUBLANG_AZERI_CYRILLIC +# define SUBLANG_AZERI_CYRILLIC 0x02 +# endif +# ifndef SUBLANG_BENGALI_INDIA +# define SUBLANG_BENGALI_INDIA 0x01 +# endif +# ifndef SUBLANG_BENGALI_BANGLADESH +# define SUBLANG_BENGALI_BANGLADESH 0x02 +# endif +# ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN +# define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05 +# endif +# ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC +# define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08 +# endif +# ifndef SUBLANG_CROATIAN_CROATIA +# define SUBLANG_CROATIAN_CROATIA 0x01 +# endif +# ifndef SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN +# define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04 +# endif +# ifndef SUBLANG_CHINESE_MACAU +# define SUBLANG_CHINESE_MACAU 0x05 +# endif +# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA +# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 +# endif +# ifndef SUBLANG_ENGLISH_JAMAICA +# define SUBLANG_ENGLISH_JAMAICA 0x08 +# endif +# ifndef SUBLANG_ENGLISH_CARIBBEAN +# define SUBLANG_ENGLISH_CARIBBEAN 0x09 +# endif +# ifndef SUBLANG_ENGLISH_BELIZE +# define SUBLANG_ENGLISH_BELIZE 0x0a +# endif +# ifndef SUBLANG_ENGLISH_TRINIDAD +# define SUBLANG_ENGLISH_TRINIDAD 0x0b +# endif +# ifndef SUBLANG_ENGLISH_ZIMBABWE +# define SUBLANG_ENGLISH_ZIMBABWE 0x0c +# endif +# ifndef SUBLANG_ENGLISH_PHILIPPINES +# define SUBLANG_ENGLISH_PHILIPPINES 0x0d +# endif +# ifndef SUBLANG_ENGLISH_INDONESIA +# define SUBLANG_ENGLISH_INDONESIA 0x0e +# endif +# ifndef SUBLANG_ENGLISH_HONGKONG +# define SUBLANG_ENGLISH_HONGKONG 0x0f +# endif +# ifndef SUBLANG_ENGLISH_INDIA +# define SUBLANG_ENGLISH_INDIA 0x10 +# endif +# ifndef SUBLANG_ENGLISH_MALAYSIA +# define SUBLANG_ENGLISH_MALAYSIA 0x11 +# endif +# ifndef SUBLANG_ENGLISH_SINGAPORE +# define SUBLANG_ENGLISH_SINGAPORE 0x12 +# endif +# ifndef SUBLANG_FRENCH_LUXEMBOURG +# define SUBLANG_FRENCH_LUXEMBOURG 0x05 +# endif +# ifndef SUBLANG_FRENCH_MONACO +# define SUBLANG_FRENCH_MONACO 0x06 +# endif +# ifndef SUBLANG_FRENCH_WESTINDIES +# define SUBLANG_FRENCH_WESTINDIES 0x07 +# endif +# ifndef SUBLANG_FRENCH_REUNION +# define SUBLANG_FRENCH_REUNION 0x08 +# endif +# ifndef SUBLANG_FRENCH_CONGO +# define SUBLANG_FRENCH_CONGO 0x09 +# endif +# ifndef SUBLANG_FRENCH_SENEGAL +# define SUBLANG_FRENCH_SENEGAL 0x0a +# endif +# ifndef SUBLANG_FRENCH_CAMEROON +# define SUBLANG_FRENCH_CAMEROON 0x0b +# endif +# ifndef SUBLANG_FRENCH_COTEDIVOIRE +# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c +# endif +# ifndef SUBLANG_FRENCH_MALI +# define SUBLANG_FRENCH_MALI 0x0d +# endif +# ifndef SUBLANG_FRENCH_MOROCCO +# define SUBLANG_FRENCH_MOROCCO 0x0e +# endif +# ifndef SUBLANG_FRENCH_HAITI +# define SUBLANG_FRENCH_HAITI 0x0f +# endif +# ifndef SUBLANG_GERMAN_LUXEMBOURG +# define SUBLANG_GERMAN_LUXEMBOURG 0x04 +# endif +# ifndef SUBLANG_GERMAN_LIECHTENSTEIN +# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 +# endif +# ifndef SUBLANG_KASHMIRI_INDIA +# define SUBLANG_KASHMIRI_INDIA 0x02 +# endif +# ifndef SUBLANG_MALAY_MALAYSIA +# define SUBLANG_MALAY_MALAYSIA 0x01 +# endif +# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM +# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 +# endif +# ifndef SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA +# define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01 +# endif +# ifndef SUBLANG_MONGOLIAN_PRC +# define SUBLANG_MONGOLIAN_PRC 0x02 +# endif +# ifndef SUBLANG_NEPALI_INDIA +# define SUBLANG_NEPALI_INDIA 0x02 +# endif +# ifndef SUBLANG_PUNJABI_INDIA +# define SUBLANG_PUNJABI_INDIA 0x01 +# endif +# ifndef SUBLANG_PUNJABI_PAKISTAN +# define SUBLANG_PUNJABI_PAKISTAN 0x02 +# endif +# ifndef SUBLANG_QUECHUA_BOLIVIA +# define SUBLANG_QUECHUA_BOLIVIA 0x01 +# endif +# ifndef SUBLANG_QUECHUA_ECUADOR +# define SUBLANG_QUECHUA_ECUADOR 0x02 +# endif +# ifndef SUBLANG_QUECHUA_PERU +# define SUBLANG_QUECHUA_PERU 0x03 +# endif +# ifndef SUBLANG_ROMANIAN_ROMANIA +# define SUBLANG_ROMANIAN_ROMANIA 0x01 +# endif +# ifndef SUBLANG_ROMANIAN_MOLDOVA +# define SUBLANG_ROMANIAN_MOLDOVA 0x02 +# endif +# ifndef SUBLANG_RUSSIAN_RUSSIA +# define SUBLANG_RUSSIAN_RUSSIA 0x01 +# endif +# ifndef SUBLANG_RUSSIAN_MOLDAVIA +# define SUBLANG_RUSSIAN_MOLDAVIA 0x02 +# endif +# ifndef SUBLANG_SERBIAN_LATIN +# define SUBLANG_SERBIAN_LATIN 0x02 +# endif +# ifndef SUBLANG_SERBIAN_CYRILLIC +# define SUBLANG_SERBIAN_CYRILLIC 0x03 +# endif +# ifndef SUBLANG_SINDHI_INDIA +# define SUBLANG_SINDHI_INDIA 0x01 +# endif +# undef SUBLANG_SINDHI_PAKISTAN +# define SUBLANG_SINDHI_PAKISTAN 0x02 +# ifndef SUBLANG_SINDHI_AFGHANISTAN +# define SUBLANG_SINDHI_AFGHANISTAN 0x02 +# endif +# ifndef SUBLANG_SPANISH_GUATEMALA +# define SUBLANG_SPANISH_GUATEMALA 0x04 +# endif +# ifndef SUBLANG_SPANISH_COSTA_RICA +# define SUBLANG_SPANISH_COSTA_RICA 0x05 +# endif +# ifndef SUBLANG_SPANISH_PANAMA +# define SUBLANG_SPANISH_PANAMA 0x06 +# endif +# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC +# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 +# endif +# ifndef SUBLANG_SPANISH_VENEZUELA +# define SUBLANG_SPANISH_VENEZUELA 0x08 +# endif +# ifndef SUBLANG_SPANISH_COLOMBIA +# define SUBLANG_SPANISH_COLOMBIA 0x09 +# endif +# ifndef SUBLANG_SPANISH_PERU +# define SUBLANG_SPANISH_PERU 0x0a +# endif +# ifndef SUBLANG_SPANISH_ARGENTINA +# define SUBLANG_SPANISH_ARGENTINA 0x0b +# endif +# ifndef SUBLANG_SPANISH_ECUADOR +# define SUBLANG_SPANISH_ECUADOR 0x0c +# endif +# ifndef SUBLANG_SPANISH_CHILE +# define SUBLANG_SPANISH_CHILE 0x0d +# endif +# ifndef SUBLANG_SPANISH_URUGUAY +# define SUBLANG_SPANISH_URUGUAY 0x0e +# endif +# ifndef SUBLANG_SPANISH_PARAGUAY +# define SUBLANG_SPANISH_PARAGUAY 0x0f +# endif +# ifndef SUBLANG_SPANISH_BOLIVIA +# define SUBLANG_SPANISH_BOLIVIA 0x10 +# endif +# ifndef SUBLANG_SPANISH_EL_SALVADOR +# define SUBLANG_SPANISH_EL_SALVADOR 0x11 +# endif +# ifndef SUBLANG_SPANISH_HONDURAS +# define SUBLANG_SPANISH_HONDURAS 0x12 +# endif +# ifndef SUBLANG_SPANISH_NICARAGUA +# define SUBLANG_SPANISH_NICARAGUA 0x13 +# endif +# ifndef SUBLANG_SPANISH_PUERTO_RICO +# define SUBLANG_SPANISH_PUERTO_RICO 0x14 +# endif +# ifndef SUBLANG_SPANISH_US +# define SUBLANG_SPANISH_US 0x15 +# endif +# ifndef SUBLANG_SWEDISH_FINLAND +# define SUBLANG_SWEDISH_FINLAND 0x02 +# endif +# ifndef SUBLANG_TAMAZIGHT_ARABIC +# define SUBLANG_TAMAZIGHT_ARABIC 0x01 +# endif +# ifndef SUBLANG_TAMAZIGHT_ALGERIA_LATIN +# define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02 +# endif +# ifndef SUBLANG_TIBETAN_PRC +# define SUBLANG_TIBETAN_PRC 0x01 +# endif +# undef SUBLANG_TIBETAN_BHUTAN +# define SUBLANG_TIBETAN_BHUTAN 0x02 +# ifndef SUBLANG_TIGRINYA_ETHIOPIA +# define SUBLANG_TIGRINYA_ETHIOPIA 0x01 +# endif +# ifndef SUBLANG_TIGRINYA_ERITREA +# define SUBLANG_TIGRINYA_ERITREA 0x02 +# endif +# ifndef SUBLANG_UIGHUR_PRC +# define SUBLANG_UIGHUR_PRC 0x01 +# endif +# ifndef SUBLANG_URDU_PAKISTAN +# define SUBLANG_URDU_PAKISTAN 0x01 +# endif +# ifndef SUBLANG_URDU_INDIA +# define SUBLANG_URDU_INDIA 0x02 +# endif +# ifndef SUBLANG_UZBEK_LATIN +# define SUBLANG_UZBEK_LATIN 0x01 +# endif +# ifndef SUBLANG_UZBEK_CYRILLIC +# define SUBLANG_UZBEK_CYRILLIC 0x02 +# endif +/* GetLocaleInfoA operations. */ +# ifndef LOCALE_SNAME +# define LOCALE_SNAME 0x5c +# endif +#endif + + +#if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE +/* MacOS X 10.2 or newer */ + +/* Canonicalize a MacOS X locale name to a Unix locale name. + NAME is a sufficiently large buffer. + On input, it contains the MacOS X locale name. + On output, it contains the Unix locale name. */ +# if !defined IN_LIBINTL +static +# endif +void +gl_locale_name_canonicalize (char *name) +{ + /* This conversion is based on a posting by + Deborah GoldSmith on 2005-03-08, + http://lists.apple.com/archives/carbon-dev/2005/Mar/msg00293.html */ + + /* Convert legacy (NeXTstep inherited) English names to Unix (ISO 639 and + ISO 3166) names. Prior to MacOS X 10.3, there is no API for doing this. + Therefore we do it ourselves, using a table based on the results of the + MacOS X 10.3.8 function + CFLocaleCreateCanonicalLocaleIdentifierFromString(). */ + typedef struct { const char legacy[21+1]; const char unixy[5+1]; } + legacy_entry; + static const legacy_entry legacy_table[] = { + { "Afrikaans", "af" }, + { "Albanian", "sq" }, + { "Amharic", "am" }, + { "Arabic", "ar" }, + { "Armenian", "hy" }, + { "Assamese", "as" }, + { "Aymara", "ay" }, + { "Azerbaijani", "az" }, + { "Basque", "eu" }, + { "Belarusian", "be" }, + { "Belorussian", "be" }, + { "Bengali", "bn" }, + { "Brazilian Portugese", "pt_BR" }, + { "Brazilian Portuguese", "pt_BR" }, + { "Breton", "br" }, + { "Bulgarian", "bg" }, + { "Burmese", "my" }, + { "Byelorussian", "be" }, + { "Catalan", "ca" }, + { "Chewa", "ny" }, + { "Chichewa", "ny" }, + { "Chinese", "zh" }, + { "Chinese, Simplified", "zh_CN" }, + { "Chinese, Traditional", "zh_TW" }, + { "Chinese, Tradtional", "zh_TW" }, + { "Croatian", "hr" }, + { "Czech", "cs" }, + { "Danish", "da" }, + { "Dutch", "nl" }, + { "Dzongkha", "dz" }, + { "English", "en" }, + { "Esperanto", "eo" }, + { "Estonian", "et" }, + { "Faroese", "fo" }, + { "Farsi", "fa" }, + { "Finnish", "fi" }, + { "Flemish", "nl_BE" }, + { "French", "fr" }, + { "Galician", "gl" }, + { "Gallegan", "gl" }, + { "Georgian", "ka" }, + { "German", "de" }, + { "Greek", "el" }, + { "Greenlandic", "kl" }, + { "Guarani", "gn" }, + { "Gujarati", "gu" }, + { "Hawaiian", "haw" }, /* Yes, "haw", not "cpe". */ + { "Hebrew", "he" }, + { "Hindi", "hi" }, + { "Hungarian", "hu" }, + { "Icelandic", "is" }, + { "Indonesian", "id" }, + { "Inuktitut", "iu" }, + { "Irish", "ga" }, + { "Italian", "it" }, + { "Japanese", "ja" }, + { "Javanese", "jv" }, + { "Kalaallisut", "kl" }, + { "Kannada", "kn" }, + { "Kashmiri", "ks" }, + { "Kazakh", "kk" }, + { "Khmer", "km" }, + { "Kinyarwanda", "rw" }, + { "Kirghiz", "ky" }, + { "Korean", "ko" }, + { "Kurdish", "ku" }, + { "Latin", "la" }, + { "Latvian", "lv" }, + { "Lithuanian", "lt" }, + { "Macedonian", "mk" }, + { "Malagasy", "mg" }, + { "Malay", "ms" }, + { "Malayalam", "ml" }, + { "Maltese", "mt" }, + { "Manx", "gv" }, + { "Marathi", "mr" }, + { "Moldavian", "mo" }, + { "Mongolian", "mn" }, + { "Nepali", "ne" }, + { "Norwegian", "nb" }, /* Yes, "nb", not the obsolete "no". */ + { "Nyanja", "ny" }, + { "Nynorsk", "nn" }, + { "Oriya", "or" }, + { "Oromo", "om" }, + { "Panjabi", "pa" }, + { "Pashto", "ps" }, + { "Persian", "fa" }, + { "Polish", "pl" }, + { "Portuguese", "pt" }, + { "Portuguese, Brazilian", "pt_BR" }, + { "Punjabi", "pa" }, + { "Pushto", "ps" }, + { "Quechua", "qu" }, + { "Romanian", "ro" }, + { "Ruanda", "rw" }, + { "Rundi", "rn" }, + { "Russian", "ru" }, + { "Sami", "se_NO" }, /* Not just "se". */ + { "Sanskrit", "sa" }, + { "Scottish", "gd" }, + { "Serbian", "sr" }, + { "Simplified Chinese", "zh_CN" }, + { "Sindhi", "sd" }, + { "Sinhalese", "si" }, + { "Slovak", "sk" }, + { "Slovenian", "sl" }, + { "Somali", "so" }, + { "Spanish", "es" }, + { "Sundanese", "su" }, + { "Swahili", "sw" }, + { "Swedish", "sv" }, + { "Tagalog", "tl" }, + { "Tajik", "tg" }, + { "Tajiki", "tg" }, + { "Tamil", "ta" }, + { "Tatar", "tt" }, + { "Telugu", "te" }, + { "Thai", "th" }, + { "Tibetan", "bo" }, + { "Tigrinya", "ti" }, + { "Tongan", "to" }, + { "Traditional Chinese", "zh_TW" }, + { "Turkish", "tr" }, + { "Turkmen", "tk" }, + { "Uighur", "ug" }, + { "Ukrainian", "uk" }, + { "Urdu", "ur" }, + { "Uzbek", "uz" }, + { "Vietnamese", "vi" }, + { "Welsh", "cy" }, + { "Yiddish", "yi" } + }; + + /* Convert new-style locale names with language tags (ISO 639 and ISO 15924) + to Unix (ISO 639 and ISO 3166) names. */ + typedef struct { const char langtag[7+1]; const char unixy[12+1]; } + langtag_entry; + static const langtag_entry langtag_table[] = { + /* MacOS X has "az-Arab", "az-Cyrl", "az-Latn". + The default script for az on Unix is Latin. */ + { "az-Latn", "az" }, + /* MacOS X has "ga-dots". Does not yet exist on Unix. */ + { "ga-dots", "ga" }, + /* MacOS X has "kk-Cyrl". Does not yet exist on Unix. */ + /* MacOS X has "mn-Cyrl", "mn-Mong". + The default script for mn on Unix is Cyrillic. */ + { "mn-Cyrl", "mn" }, + /* MacOS X has "ms-Arab", "ms-Latn". + The default script for ms on Unix is Latin. */ + { "ms-Latn", "ms" }, + /* MacOS X has "tg-Cyrl". + The default script for tg on Unix is Cyrillic. */ + { "tg-Cyrl", "tg" }, + /* MacOS X has "tk-Cyrl". Does not yet exist on Unix. */ + /* MacOS X has "tt-Cyrl". + The default script for tt on Unix is Cyrillic. */ + { "tt-Cyrl", "tt" }, + /* MacOS X has "zh-Hans", "zh-Hant". + Country codes are used to distinguish these on Unix. */ + { "zh-Hans", "zh_CN" }, + { "zh-Hant", "zh_TW" } + }; + + /* Convert script names (ISO 15924) to Unix conventions. + See http://www.unicode.org/iso15924/iso15924-codes.html */ + typedef struct { const char script[4+1]; const char unixy[9+1]; } + script_entry; + static const script_entry script_table[] = { + { "Arab", "arabic" }, + { "Cyrl", "cyrillic" }, + { "Mong", "mongolian" } + }; + + /* Step 1: Convert using legacy_table. */ + if (name[0] >= 'A' && name[0] <= 'Z') + { + unsigned int i1, i2; + i1 = 0; + i2 = sizeof (legacy_table) / sizeof (legacy_entry); + while (i2 - i1 > 1) + { + /* At this point we know that if name occurs in legacy_table, + its index must be >= i1 and < i2. */ + unsigned int i = (i1 + i2) >> 1; + const legacy_entry *p = &legacy_table[i]; + if (strcmp (name, p->legacy) < 0) + i2 = i; + else + i1 = i; + } + if (strcmp (name, legacy_table[i1].legacy) == 0) + { + strcpy (name, legacy_table[i1].unixy); + return; + } + } + + /* Step 2: Convert using langtag_table and script_table. */ + if (strlen (name) == 7 && name[2] == '-') + { + unsigned int i1, i2; + i1 = 0; + i2 = sizeof (langtag_table) / sizeof (langtag_entry); + while (i2 - i1 > 1) + { + /* At this point we know that if name occurs in langtag_table, + its index must be >= i1 and < i2. */ + unsigned int i = (i1 + i2) >> 1; + const langtag_entry *p = &langtag_table[i]; + if (strcmp (name, p->langtag) < 0) + i2 = i; + else + i1 = i; + } + if (strcmp (name, langtag_table[i1].langtag) == 0) + { + strcpy (name, langtag_table[i1].unixy); + return; + } + + i1 = 0; + i2 = sizeof (script_table) / sizeof (script_entry); + while (i2 - i1 > 1) + { + /* At this point we know that if (name + 3) occurs in script_table, + its index must be >= i1 and < i2. */ + unsigned int i = (i1 + i2) >> 1; + const script_entry *p = &script_table[i]; + if (strcmp (name + 3, p->script) < 0) + i2 = i; + else + i1 = i; + } + if (strcmp (name + 3, script_table[i1].script) == 0) + { + name[2] = '@'; + strcpy (name + 3, script_table[i1].unixy); + return; + } + } + + /* Step 3: Convert new-style dash to Unix underscore. */ + { + char *p; + for (p = name; *p != '\0'; p++) + if (*p == '-') + *p = '_'; + } +} + +#endif + + +#ifdef WIN32_NATIVE + +/* Canonicalize a Win32 native locale name to a Unix locale name. + NAME is a sufficiently large buffer. + On input, it contains the Win32 locale name. + On output, it contains the Unix locale name. */ +# if !defined IN_LIBINTL +static +# endif +void +gl_locale_name_canonicalize (char *name) +{ + /* FIXME: This is probably incomplete: it does not handle "zh-Hans" and + "zh-Hant". */ + char *p; + + for (p = name; *p != '\0'; p++) + if (*p == '-') + { + *p = '_'; + p++; + for (; *p != '\0'; p++) + { + if (*p >= 'a' && *p <= 'z') + *p += 'A' - 'a'; + if (*p == '-') + { + *p = '\0'; + return; + } + } + return; + } +} + +# if !defined IN_LIBINTL +static +# endif +const char * +gl_locale_name_from_win32_LANGID (LANGID langid) +{ + /* Activate the new code only when the GETTEXT_MUI environment variable is + set, for the time being, since the new code is not well tested. */ + if (getenv ("GETTEXT_MUI") != NULL) + { + static char namebuf[256]; + + /* Query the system's notion of locale name. + On Windows95/98/ME, GetLocaleInfoA returns some incorrect results. + But we don't need to support systems that are so old. */ + if (GetLocaleInfoA (MAKELCID (langid, SORT_DEFAULT), LOCALE_SNAME, + namebuf, sizeof (namebuf) - 1)) + { + /* Convert it to a Unix locale name. */ + gl_locale_name_canonicalize (namebuf); + return namebuf; + } + } + /* Internet Explorer has an LCID to RFC3066 name mapping stored in + HKEY_CLASSES_ROOT\Mime\Database\Rfc1766. But we better don't use that + since IE's i18n subsystem is known to be inconsistent with the Win32 base + (e.g. they have different character conversion facilities that produce + different results). */ + /* Use our own table. */ + { + int primary, sub; + + /* Split into language and territory part. */ + primary = PRIMARYLANGID (langid); + sub = SUBLANGID (langid); + + /* Dispatch on language. + See also http://www.unicode.org/unicode/onlinedat/languages.html . + For details about languages, see http://www.ethnologue.com/ . */ + switch (primary) + { + case LANG_AFRIKAANS: return "af_ZA"; + case LANG_ALBANIAN: return "sq_AL"; + case LANG_AMHARIC: return "am_ET"; + case LANG_ARABIC: + switch (sub) + { + case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA"; + case SUBLANG_ARABIC_IRAQ: return "ar_IQ"; + case SUBLANG_ARABIC_EGYPT: return "ar_EG"; + case SUBLANG_ARABIC_LIBYA: return "ar_LY"; + case SUBLANG_ARABIC_ALGERIA: return "ar_DZ"; + case SUBLANG_ARABIC_MOROCCO: return "ar_MA"; + case SUBLANG_ARABIC_TUNISIA: return "ar_TN"; + case SUBLANG_ARABIC_OMAN: return "ar_OM"; + case SUBLANG_ARABIC_YEMEN: return "ar_YE"; + case SUBLANG_ARABIC_SYRIA: return "ar_SY"; + case SUBLANG_ARABIC_JORDAN: return "ar_JO"; + case SUBLANG_ARABIC_LEBANON: return "ar_LB"; + case SUBLANG_ARABIC_KUWAIT: return "ar_KW"; + case SUBLANG_ARABIC_UAE: return "ar_AE"; + case SUBLANG_ARABIC_BAHRAIN: return "ar_BH"; + case SUBLANG_ARABIC_QATAR: return "ar_QA"; + } + return "ar"; + case LANG_ARMENIAN: return "hy_AM"; + case LANG_ASSAMESE: return "as_IN"; + case LANG_AZERI: + switch (sub) + { + /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */ + case SUBLANG_AZERI_LATIN: return "az_AZ@latin"; + case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic"; + } + return "az"; + case LANG_BASQUE: + switch (sub) + { + case SUBLANG_DEFAULT: return "eu_ES"; + } + return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */ + case LANG_BELARUSIAN: return "be_BY"; + case LANG_BENGALI: + switch (sub) + { + case SUBLANG_BENGALI_INDIA: return "bn_IN"; + case SUBLANG_BENGALI_BANGLADESH: return "bn_BD"; + } + return "bn"; + case LANG_BULGARIAN: return "bg_BG"; + case LANG_BURMESE: return "my_MM"; + case LANG_CAMBODIAN: return "km_KH"; + case LANG_CATALAN: return "ca_ES"; + case LANG_CHEROKEE: return "chr_US"; + case LANG_CHINESE: + switch (sub) + { + case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW"; + case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN"; + case SUBLANG_CHINESE_HONGKONG: return "zh_HK"; + case SUBLANG_CHINESE_SINGAPORE: return "zh_SG"; + case SUBLANG_CHINESE_MACAU: return "zh_MO"; + } + return "zh"; + case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN + * What used to be called Serbo-Croatian + * should really now be two separate + * languages because of political reasons. + * (Says tml, who knows nothing about Serbian + * or Croatian.) + * (I can feel those flames coming already.) + */ + switch (sub) + { + case SUBLANG_CROATIAN_CROATIA: return "hr_HR"; + case SUBLANG_SERBIAN_LATIN: return "sr_CS"; + case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic"; + case SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN: return "hr_BA"; + case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN: return "bs_BA"; + case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC: return "bs_BA@cyrillic"; + } + return "hr"; + case LANG_CZECH: return "cs_CZ"; + case LANG_DANISH: return "da_DK"; + case LANG_DIVEHI: return "dv_MV"; + case LANG_DUTCH: + switch (sub) + { + case SUBLANG_DUTCH: return "nl_NL"; + case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE"; + } + return "nl"; + case LANG_EDO: return "bin_NG"; + case LANG_ENGLISH: + switch (sub) + { + /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought + * English was the language spoken in England. + * Oh well. + */ + case SUBLANG_ENGLISH_US: return "en_US"; + case SUBLANG_ENGLISH_UK: return "en_GB"; + case SUBLANG_ENGLISH_AUS: return "en_AU"; + case SUBLANG_ENGLISH_CAN: return "en_CA"; + case SUBLANG_ENGLISH_NZ: return "en_NZ"; + case SUBLANG_ENGLISH_EIRE: return "en_IE"; + case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA"; + case SUBLANG_ENGLISH_JAMAICA: return "en_JM"; + case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */ + case SUBLANG_ENGLISH_BELIZE: return "en_BZ"; + case SUBLANG_ENGLISH_TRINIDAD: return "en_TT"; + case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW"; + case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH"; + case SUBLANG_ENGLISH_INDONESIA: return "en_ID"; + case SUBLANG_ENGLISH_HONGKONG: return "en_HK"; + case SUBLANG_ENGLISH_INDIA: return "en_IN"; + case SUBLANG_ENGLISH_MALAYSIA: return "en_MY"; + case SUBLANG_ENGLISH_SINGAPORE: return "en_SG"; + } + return "en"; + case LANG_ESTONIAN: return "et_EE"; + case LANG_FAEROESE: return "fo_FO"; + case LANG_FARSI: return "fa_IR"; + case LANG_FINNISH: return "fi_FI"; + case LANG_FRENCH: + switch (sub) + { + case SUBLANG_FRENCH: return "fr_FR"; + case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE"; + case SUBLANG_FRENCH_CANADIAN: return "fr_CA"; + case SUBLANG_FRENCH_SWISS: return "fr_CH"; + case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU"; + case SUBLANG_FRENCH_MONACO: return "fr_MC"; + case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */ + case SUBLANG_FRENCH_REUNION: return "fr_RE"; + case SUBLANG_FRENCH_CONGO: return "fr_CG"; + case SUBLANG_FRENCH_SENEGAL: return "fr_SN"; + case SUBLANG_FRENCH_CAMEROON: return "fr_CM"; + case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI"; + case SUBLANG_FRENCH_MALI: return "fr_ML"; + case SUBLANG_FRENCH_MOROCCO: return "fr_MA"; + case SUBLANG_FRENCH_HAITI: return "fr_HT"; + } + return "fr"; + case LANG_FRISIAN: return "fy_NL"; + case LANG_FULFULDE: + /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */ + return "ff_NG"; + case LANG_GAELIC: + switch (sub) + { + case 0x01: /* SCOTTISH */ return "gd_GB"; + case 0x02: /* IRISH */ return "ga_IE"; + } + return "C"; + case LANG_GALICIAN: return "gl_ES"; + case LANG_GEORGIAN: return "ka_GE"; + case LANG_GERMAN: + switch (sub) + { + case SUBLANG_GERMAN: return "de_DE"; + case SUBLANG_GERMAN_SWISS: return "de_CH"; + case SUBLANG_GERMAN_AUSTRIAN: return "de_AT"; + case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU"; + case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI"; + } + return "de"; + case LANG_GREEK: return "el_GR"; + case LANG_GUARANI: return "gn_PY"; + case LANG_GUJARATI: return "gu_IN"; + case LANG_HAUSA: return "ha_NG"; + case LANG_HAWAIIAN: + /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers) + or Hawaii Creole English ("cpe_US", 600000 speakers)? */ + return "cpe_US"; + case LANG_HEBREW: return "he_IL"; + case LANG_HINDI: return "hi_IN"; + case LANG_HUNGARIAN: return "hu_HU"; + case LANG_IBIBIO: return "nic_NG"; + case LANG_ICELANDIC: return "is_IS"; + case LANG_IGBO: return "ig_NG"; + case LANG_INDONESIAN: return "id_ID"; + case LANG_INUKTITUT: return "iu_CA"; + case LANG_ITALIAN: + switch (sub) + { + case SUBLANG_ITALIAN: return "it_IT"; + case SUBLANG_ITALIAN_SWISS: return "it_CH"; + } + return "it"; + case LANG_JAPANESE: return "ja_JP"; + case LANG_KANNADA: return "kn_IN"; + case LANG_KANURI: return "kr_NG"; + case LANG_KASHMIRI: + switch (sub) + { + case SUBLANG_DEFAULT: return "ks_PK"; + case SUBLANG_KASHMIRI_INDIA: return "ks_IN"; + } + return "ks"; + case LANG_KAZAK: return "kk_KZ"; + case LANG_KONKANI: + /* FIXME: Adjust this when such locales appear on Unix. */ + return "kok_IN"; + case LANG_KOREAN: return "ko_KR"; + case LANG_KYRGYZ: return "ky_KG"; + case LANG_LAO: return "lo_LA"; + case LANG_LATIN: return "la_VA"; + case LANG_LATVIAN: return "lv_LV"; + case LANG_LITHUANIAN: return "lt_LT"; + case LANG_MACEDONIAN: return "mk_MK"; + case LANG_MALAY: + switch (sub) + { + case SUBLANG_MALAY_MALAYSIA: return "ms_MY"; + case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN"; + } + return "ms"; + case LANG_MALAYALAM: return "ml_IN"; + case LANG_MALTESE: return "mt_MT"; + case LANG_MANIPURI: + /* FIXME: Adjust this when such locales appear on Unix. */ + return "mni_IN"; + case LANG_MAORI: return "mi_NZ"; + case LANG_MARATHI: return "mr_IN"; + case LANG_MONGOLIAN: + switch (sub) + { + case SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA: return "mn_MN"; + case SUBLANG_MONGOLIAN_PRC: return "mn_CN"; + } + return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */ + case LANG_NEPALI: + switch (sub) + { + case SUBLANG_DEFAULT: return "ne_NP"; + case SUBLANG_NEPALI_INDIA: return "ne_IN"; + } + return "ne"; + case LANG_NORWEGIAN: + switch (sub) + { + case SUBLANG_NORWEGIAN_BOKMAL: return "nb_NO"; + case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO"; + } + return "no"; + case LANG_ORIYA: return "or_IN"; + case LANG_OROMO: return "om_ET"; + case LANG_PAPIAMENTU: return "pap_AN"; + case LANG_PASHTO: + return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */ + case LANG_POLISH: return "pl_PL"; + case LANG_PORTUGUESE: + switch (sub) + { + case SUBLANG_PORTUGUESE: return "pt_PT"; + /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT. + Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */ + case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR"; + } + return "pt"; + case LANG_PUNJABI: + switch (sub) + { + case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */ + case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */ + } + return "pa"; + case LANG_QUECHUA: + switch (sub) + { + case SUBLANG_QUECHUA_BOLIVIA: return "qu_BO"; + case SUBLANG_QUECHUA_ECUADOR: return "qu_EC"; + case SUBLANG_QUECHUA_PERU: return "qu_PE"; + } + return "qu"; + case LANG_RHAETO_ROMANCE: return "rm_CH"; + case LANG_ROMANIAN: + switch (sub) + { + case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO"; + case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD"; + } + return "ro"; + case LANG_RUSSIAN: + switch (sub) + { + case SUBLANG_RUSSIAN_RUSSIA: return "ru_RU"; + case SUBLANG_RUSSIAN_MOLDAVIA: return "ru_MD"; + } + return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */ + case LANG_SAAMI: /* actually Northern Sami */ return "se_NO"; + case LANG_SANSKRIT: return "sa_IN"; + case LANG_SINDHI: + switch (sub) + { + case SUBLANG_SINDHI_INDIA: return "sd_IN"; + case SUBLANG_SINDHI_PAKISTAN: return "sd_PK"; + /*case SUBLANG_SINDHI_AFGHANISTAN: return "sd_AF";*/ + } + return "sd"; + case LANG_SINHALESE: return "si_LK"; + case LANG_SLOVAK: return "sk_SK"; + case LANG_SLOVENIAN: return "sl_SI"; + case LANG_SOMALI: return "so_SO"; + case LANG_SORBIAN: + /* FIXME: Adjust this when such locales appear on Unix. */ + return "wen_DE"; + case LANG_SOTHO: + /* calls + it "Sepedi"; according to + + + it's the same as Northern Sotho. */ + return "nso_ZA"; + case LANG_SPANISH: + switch (sub) + { + case SUBLANG_SPANISH: return "es_ES"; + case SUBLANG_SPANISH_MEXICAN: return "es_MX"; + case SUBLANG_SPANISH_MODERN: + return "es_ES@modern"; /* not seen on Unix */ + case SUBLANG_SPANISH_GUATEMALA: return "es_GT"; + case SUBLANG_SPANISH_COSTA_RICA: return "es_CR"; + case SUBLANG_SPANISH_PANAMA: return "es_PA"; + case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO"; + case SUBLANG_SPANISH_VENEZUELA: return "es_VE"; + case SUBLANG_SPANISH_COLOMBIA: return "es_CO"; + case SUBLANG_SPANISH_PERU: return "es_PE"; + case SUBLANG_SPANISH_ARGENTINA: return "es_AR"; + case SUBLANG_SPANISH_ECUADOR: return "es_EC"; + case SUBLANG_SPANISH_CHILE: return "es_CL"; + case SUBLANG_SPANISH_URUGUAY: return "es_UY"; + case SUBLANG_SPANISH_PARAGUAY: return "es_PY"; + case SUBLANG_SPANISH_BOLIVIA: return "es_BO"; + case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV"; + case SUBLANG_SPANISH_HONDURAS: return "es_HN"; + case SUBLANG_SPANISH_NICARAGUA: return "es_NI"; + case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR"; + case SUBLANG_SPANISH_US: return "es_US"; + } + return "es"; + case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */ + case LANG_SWAHILI: return "sw_KE"; + case LANG_SWEDISH: + switch (sub) + { + case SUBLANG_DEFAULT: return "sv_SE"; + case SUBLANG_SWEDISH_FINLAND: return "sv_FI"; + } + return "sv"; + case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */ + case LANG_TAGALOG: return "tl_PH"; + case LANG_TAJIK: return "tg_TJ"; + case LANG_TAMAZIGHT: + switch (sub) + { + /* FIXME: Adjust this when Tamazight locales appear on Unix. */ + case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic"; + case SUBLANG_TAMAZIGHT_ALGERIA_LATIN: return "ber_DZ@latin"; + } + return "ber_MA"; + case LANG_TAMIL: + switch (sub) + { + case SUBLANG_DEFAULT: return "ta_IN"; + } + return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */ + case LANG_TATAR: return "tt_RU"; + case LANG_TELUGU: return "te_IN"; + case LANG_THAI: return "th_TH"; + case LANG_TIBETAN: + switch (sub) + { + case SUBLANG_TIBETAN_PRC: + /* Most Tibetans would not like "bo_CN". But Tibet does not yet + have a country code of its own. */ + return "bo"; + case SUBLANG_TIBETAN_BHUTAN: return "bo_BT"; + } + return "bo"; + case LANG_TIGRINYA: + switch (sub) + { + case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET"; + case SUBLANG_TIGRINYA_ERITREA: return "ti_ER"; + } + return "ti"; + case LANG_TSONGA: return "ts_ZA"; + case LANG_TSWANA: return "tn_BW"; + case LANG_TURKISH: return "tr_TR"; + case LANG_TURKMEN: return "tk_TM"; + case LANG_UIGHUR: + switch (sub) + { + case SUBLANG_UIGHUR_PRC: return "ug_CN"; + } + return "ug"; + case LANG_UKRAINIAN: return "uk_UA"; + case LANG_URDU: + switch (sub) + { + case SUBLANG_URDU_PAKISTAN: return "ur_PK"; + case SUBLANG_URDU_INDIA: return "ur_IN"; + } + return "ur"; + case LANG_UZBEK: + switch (sub) + { + case SUBLANG_UZBEK_LATIN: return "uz_UZ"; + case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic"; + } + return "uz"; + case LANG_VENDA: return "ve_ZA"; + case LANG_VIETNAMESE: return "vi_VN"; + case LANG_WELSH: return "cy_GB"; + case LANG_XHOSA: return "xh_ZA"; + case LANG_YI: return "sit_CN"; + case LANG_YIDDISH: return "yi_IL"; + case LANG_YORUBA: return "yo_NG"; + case LANG_ZULU: return "zu_ZA"; + default: return "C"; + } + } +} + +# if !defined IN_LIBINTL +static +# endif +const char * +gl_locale_name_from_win32_LCID (LCID lcid) +{ + LANGID langid; + + /* Strip off the sorting rules, keep only the language part. */ + langid = LANGIDFROMLCID (lcid); + + return gl_locale_name_from_win32_LANGID (langid); +} + +#endif + + +/* XPG3 defines the result of 'setlocale (category, NULL)' as: + "Directs 'setlocale()' to query 'category' and return the current + setting of 'local'." + However it does not specify the exact format. Neither do SUSV2 and + ISO C 99. So we can use this feature only on selected systems (e.g. + those using GNU C Library). */ +#if defined _LIBC || (defined __GLIBC__ && __GLIBC__ >= 2) +# define HAVE_LOCALE_NULL +#endif + +/* Determine the current locale's name, and canonicalize it into XPG syntax + language[_territory][.codeset][@modifier] + The codeset part in the result is not reliable; the locale_charset() + should be used for codeset information instead. + The result must not be freed; it is statically allocated. */ + +const char * +gl_locale_name_posix (int category, const char *categoryname) +{ + /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'. + On some systems this can be done by the 'setlocale' function itself. */ +#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL + return setlocale (category, NULL); +#else + const char *retval; + + /* Setting of LC_ALL overrides all other. */ + retval = getenv ("LC_ALL"); + if (retval != NULL && retval[0] != '\0') + return retval; + /* Next comes the name of the desired category. */ + retval = getenv (categoryname); + if (retval != NULL && retval[0] != '\0') + return retval; + /* Last possibility is the LANG environment variable. */ + retval = getenv ("LANG"); + if (retval != NULL && retval[0] != '\0') + return retval; + + return NULL; +#endif +} + +const char * +gl_locale_name_default (void) +{ + /* POSIX:2001 says: + "All implementations shall define a locale as the default locale, to be + invoked when no environment variables are set, or set to the empty + string. This default locale can be the POSIX locale or any other + implementation-defined locale. Some implementations may provide + facilities for local installation administrators to set the default + locale, customizing it for each location. POSIX:2001 does not require + such a facility. */ + +#if !(HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE || defined(WIN32_NATIVE)) + + /* The system does not have a way of setting the locale, other than the + POSIX specified environment variables. We use C as default locale. */ + return "C"; + +#else + + /* Return an XPG style locale name language[_territory][@modifier]. + Don't even bother determining the codeset; it's not useful in this + context, because message catalogs are not specific to a single + codeset. */ + +# if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE + /* MacOS X 10.2 or newer */ + { + /* Cache the locale name, since CoreFoundation calls are expensive. */ + static const char *cached_localename; + + if (cached_localename == NULL) + { + char namebuf[256]; +# if HAVE_CFLOCALECOPYCURRENT /* MacOS X 10.3 or newer */ + CFLocaleRef locale = CFLocaleCopyCurrent (); + CFStringRef name = CFLocaleGetIdentifier (locale); + + if (CFStringGetCString (name, namebuf, sizeof(namebuf), + kCFStringEncodingASCII)) + { + gl_locale_name_canonicalize (namebuf); + cached_localename = strdup (namebuf); + } + CFRelease (locale); +# elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */ + CFTypeRef value = + CFPreferencesCopyAppValue (CFSTR ("AppleLocale"), + kCFPreferencesCurrentApplication); + if (value != NULL + && CFGetTypeID (value) == CFStringGetTypeID () + && CFStringGetCString ((CFStringRef)value, namebuf, sizeof(namebuf), + kCFStringEncodingASCII)) + { + gl_locale_name_canonicalize (namebuf); + cached_localename = strdup (namebuf); + } +# endif + if (cached_localename == NULL) + cached_localename = "C"; + } + return cached_localename; + } + +# endif + +# if defined(WIN32_NATIVE) /* WIN32, not Cygwin */ + { + LCID lcid; + + /* Use native Win32 API locale ID. */ + lcid = GetThreadLocale (); + + return gl_locale_name_from_win32_LCID (lcid); + } +# endif +#endif +} + +const char * +gl_locale_name (int category, const char *categoryname) +{ + const char *retval; + + retval = gl_locale_name_posix (category, categoryname); + if (retval != NULL) + return retval; + + return gl_locale_name_default (); +} diff --git a/lib/localename.h b/lib/localename.h new file mode 100644 index 00000000..f633ad8b --- /dev/null +++ b/lib/localename.h @@ -0,0 +1,77 @@ +/* Determine name of the currently selected locale. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA. */ + +#ifndef _GL_LOCALENAME_H +#define _GL_LOCALENAME_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine the current locale's name. + It considers both the POSIX notion of locale name (see function + gl_locale_name_posix) and the system notion of locale name (see function + gl_locale_name_default). + CATEGORY is a locale category abbreviation, as defined in , + but not LC_ALL. E.g. LC_MESSAGES. + CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". + Return the locale category's name, canonicalized into XPG syntax + language[_territory][.codeset][@modifier] + The codeset part in the result is not reliable; the locale_charset() + should be used for codeset information instead. + The result must not be freed; it is statically allocated. */ +extern const char * gl_locale_name (int category, const char *categoryname); + +/* Determine the current locale's name, as specified by setlocale() calls + or by environment variables. + CATEGORY is a locale category abbreviation, as defined in , + but not LC_ALL. E.g. LC_MESSAGES. + CATEGORYNAME is the name of CATEGORY as a string, e.g. "LC_MESSAGES". + Return the locale category's name, canonicalized into XPG syntax + language[_territory][.codeset][@modifier] + or NULL if no locale has been specified to setlocale() or by environment + variables. + The codeset part in the result is not reliable; the locale_charset() + should be used for codeset information instead. + The result must not be freed; it is statically allocated. */ +extern const char * gl_locale_name_posix (int category, const char *categoryname); + +/* Determine the default locale's name. This is the current locale's name, + if not specified by setlocale() calls or by environment variables. This + locale name is usually determined by systems settings that the user can + manipulate through a GUI. + + Quoting POSIX:2001: + "All implementations shall define a locale as the default locale, + to be invoked when no environment variables are set, or set to the + empty string. This default locale can be the C locale or any other + implementation-defined locale. Some implementations may provide + facilities for local installation administrators to set the default + locale, customizing it for each location. IEEE Std 1003.1-2001 does + not require such a facility." + + The result must not be freed; it is statically allocated. */ +extern const char * gl_locale_name_default (void); + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_LOCALENAME_H */ diff --git a/lib/malloc.c b/lib/malloc.c new file mode 100644 index 00000000..9111c7a1 --- /dev/null +++ b/lib/malloc.c @@ -0,0 +1,57 @@ +/* malloc() function that is glibc compatible. + + Copyright (C) 1997, 1998, 2006, 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* written by Jim Meyering and Bruno Haible */ + +#include +/* Only the AC_FUNC_MALLOC macro defines 'malloc' already in config.h. */ +#ifdef malloc +# define NEED_MALLOC_GNU +# undef malloc +#endif + +/* Specification. */ +#include + +#include + +/* Call the system's malloc below. */ +#undef malloc + +/* Allocate an N-byte block of memory from the heap. + If N is zero, allocate a 1-byte block. */ + +void * +rpl_malloc (size_t n) +{ + void *result; + +#ifdef NEED_MALLOC_GNU + if (n == 0) + n = 1; +#endif + + result = malloc (n); + +#if !HAVE_MALLOC_POSIX + if (result == NULL) + errno = ENOMEM; +#endif + + return result; +} diff --git a/lib/malloca.c b/lib/malloca.c new file mode 100644 index 00000000..7905e615 --- /dev/null +++ b/lib/malloca.c @@ -0,0 +1,137 @@ +/* Safe automatic memory allocation. + Copyright (C) 2003, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include + +/* Specification. */ +#include "malloca.h" + +/* The speed critical point in this file is freea() applied to an alloca() + result: it must be fast, to match the speed of alloca(). The speed of + mmalloca() and freea() in the other case are not critical, because they + are only invoked for big memory sizes. */ + +#if HAVE_ALLOCA + +/* Store the mmalloca() results in a hash table. This is needed to reliably + distinguish a mmalloca() result and an alloca() result. + + Although it is possible that the same pointer is returned by alloca() and + by mmalloca() at different times in the same application, it does not lead + to a bug in freea(), because: + - Before a pointer returned by alloca() can point into malloc()ed memory, + the function must return, and once this has happened the programmer must + not call freea() on it anyway. + - Before a pointer returned by mmalloca() can point into the stack, it + must be freed. The only function that can free it is freea(), and + when freea() frees it, it also removes it from the hash table. */ + +#define MAGIC_NUMBER 0x1415fb4a +#define MAGIC_SIZE sizeof (int) +/* This is how the header info would look like without any alignment + considerations. */ +struct preliminary_header { void *next; char room[MAGIC_SIZE]; }; +/* But the header's size must be a multiple of sa_alignment_max. */ +#define HEADER_SIZE \ + (((sizeof (struct preliminary_header) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max) +struct header { void *next; char room[HEADER_SIZE - sizeof (struct preliminary_header) + MAGIC_SIZE]; }; +/* Verify that HEADER_SIZE == sizeof (struct header). */ +typedef int verify1[2 * (HEADER_SIZE == sizeof (struct header)) - 1]; +/* We make the hash table quite big, so that during lookups the probability + of empty hash buckets is quite high. There is no need to make the hash + table resizable, because when the hash table gets filled so much that the + lookup becomes slow, it means that the application has memory leaks. */ +#define HASH_TABLE_SIZE 257 +static void * mmalloca_results[HASH_TABLE_SIZE]; + +#endif + +void * +mmalloca (size_t n) +{ +#if HAVE_ALLOCA + /* Allocate one more word, that serves as an indicator for malloc()ed + memory, so that freea() of an alloca() result is fast. */ + size_t nplus = n + HEADER_SIZE; + + if (nplus >= n) + { + char *p = (char *) malloc (nplus); + + if (p != NULL) + { + size_t slot; + + p += HEADER_SIZE; + + /* Put a magic number into the indicator word. */ + ((int *) p)[-1] = MAGIC_NUMBER; + + /* Enter p into the hash table. */ + slot = (unsigned long) p % HASH_TABLE_SIZE; + ((struct header *) (p - HEADER_SIZE))->next = mmalloca_results[slot]; + mmalloca_results[slot] = p; + + return p; + } + } + /* Out of memory. */ + return NULL; +#else +# if !MALLOC_0_IS_NONNULL + if (n == 0) + n = 1; +# endif + return malloc (n); +#endif +} + +#if HAVE_ALLOCA +void +freea (void *p) +{ + /* mmalloca() may have returned NULL. */ + if (p != NULL) + { + /* Attempt to quickly distinguish the mmalloca() result - which has + a magic indicator word - and the alloca() result - which has an + uninitialized indicator word. It is for this test that sa_increment + additional bytes are allocated in the alloca() case. */ + if (((int *) p)[-1] == MAGIC_NUMBER) + { + /* Looks like a mmalloca() result. To see whether it really is one, + perform a lookup in the hash table. */ + size_t slot = (unsigned long) p % HASH_TABLE_SIZE; + void **chain = &mmalloca_results[slot]; + for (; *chain != NULL;) + { + if (*chain == p) + { + /* Found it. Remove it from the hash table and free it. */ + char *p_begin = (char *) p - HEADER_SIZE; + *chain = ((struct header *) p_begin)->next; + free (p_begin); + return; + } + chain = &((struct header *) ((char *) *chain - HEADER_SIZE))->next; + } + } + /* At this point, we know it was not a mmalloca() result. */ + } +} +#endif diff --git a/lib/malloca.h b/lib/malloca.h new file mode 100644 index 00000000..7d92b0af --- /dev/null +++ b/lib/malloca.h @@ -0,0 +1,134 @@ +/* Safe automatic memory allocation. + Copyright (C) 2003-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _MALLOCA_H +#define _MALLOCA_H + +#include +#include +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* safe_alloca(N) is equivalent to alloca(N) when it is safe to call + alloca(N); otherwise it returns NULL. It either returns N bytes of + memory allocated on the stack, that lasts until the function returns, + or NULL. + Use of safe_alloca should be avoided: + - inside arguments of function calls - undefined behaviour, + - in inline functions - the allocation may actually last until the + calling function returns. +*/ +#if HAVE_ALLOCA +/* The OS usually guarantees only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + allocate anything larger than 4096 bytes. Also care for the possibility + of a few compiler-allocated temporary stack slots. + This must be a macro, not an inline function. */ +# define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) +#else +# define safe_alloca(N) ((void) (N), NULL) +#endif + +/* malloca(N) is a safe variant of alloca(N). It allocates N bytes of + memory allocated on the stack, that must be freed using freea() before + the function returns. Upon failure, it returns NULL. */ +#if HAVE_ALLOCA +# define malloca(N) \ + ((N) < 4032 - sa_increment \ + ? (void *) ((char *) alloca ((N) + sa_increment) + sa_increment) \ + : mmalloca (N)) +#else +# define malloca(N) \ + mmalloca (N) +#endif +extern void * mmalloca (size_t n); + +/* Free a block of memory allocated through malloca(). */ +#if HAVE_ALLOCA +extern void freea (void *p); +#else +# define freea free +#endif + +/* nmalloca(N,S) is an overflow-safe variant of malloca (N * S). + It allocates an array of N objects, each with S bytes of memory, + on the stack. S must be positive and N must be nonnegative. + The array must be freed using freea() before the function returns. */ +#if 1 +/* Cf. the definition of xalloc_oversized. */ +# define nmalloca(n, s) \ + ((n) > (size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) \ + ? NULL \ + : malloca ((n) * (s))) +#else +extern void * nmalloca (size_t n, size_t s); +#endif + + +#ifdef __cplusplus +} +#endif + + +/* ------------------- Auxiliary, non-public definitions ------------------- */ + +/* Determine the alignment of a type at compile time. */ +#if defined __GNUC__ +# define sa_alignof __alignof__ +#elif defined __cplusplus + template struct sa_alignof_helper { char __slot1; type __slot2; }; +# define sa_alignof(type) offsetof (sa_alignof_helper, __slot2) +#elif defined __hpux + /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof + values. */ +# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) +#elif defined _AIX + /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof + values. */ +# define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) +#else +# define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) +#endif + +enum +{ +/* The desired alignment of memory allocations is the maximum alignment + among all elementary types. */ + sa_alignment_long = sa_alignof (long), + sa_alignment_double = sa_alignof (double), +#if HAVE_LONG_LONG_INT + sa_alignment_longlong = sa_alignof (long long), +#endif + sa_alignment_longdouble = sa_alignof (long double), + sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) +#if HAVE_LONG_LONG_INT + | (sa_alignment_longlong - 1) +#endif + | (sa_alignment_longdouble - 1) + ) + 1, +/* The increment that guarantees room for a magic word must be >= sizeof (int) + and a multiple of sa_alignment_max. */ + sa_increment = ((sizeof (int) + sa_alignment_max - 1) / sa_alignment_max) * sa_alignment_max +}; + +#endif /* _MALLOCA_H */ diff --git a/lib/malloca.valgrind b/lib/malloca.valgrind new file mode 100644 index 00000000..52f0a50f --- /dev/null +++ b/lib/malloca.valgrind @@ -0,0 +1,7 @@ +# Suppress a valgrind message about use of uninitialized memory in freea(). +# This use is OK because it provides only a speedup. +{ + freea + Memcheck:Cond + fun:freea +} diff --git a/lib/math.in.h b/lib/math.in.h new file mode 100644 index 00000000..efca0f0b --- /dev/null +++ b/lib/math.in.h @@ -0,0 +1,567 @@ +/* A GNU-like . + + Copyright (C) 2002-2003, 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _GL_MATH_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ + +#ifndef _GL_MATH_H +#define _GL_MATH_H + + +/* The definition of GL_LINK_WARNING is copied here. */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* POSIX allows platforms that don't support NAN. But all major + machines in the past 15 years have supported something close to + IEEE NaN, so we define this unconditionally. We also must define + it on platforms like Solaris 10, where NAN is present but defined + as a function pointer rather than a floating point constant. */ +#if !defined NAN || @REPLACE_NAN@ +# undef NAN + /* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +# ifdef __DECC +static float +_NaN () +{ + static float zero = 0.0f; + return zero / zero; +} +# define NAN (_NaN()) +# else +# define NAN (0.0f / 0.0f) +# endif +#endif + +/* Solaris 10 defines HUGE_VAL, but as a function pointer rather + than a floating point constant. */ +#if @REPLACE_HUGE_VAL@ +# undef HUGE_VAL +# define HUGE_VAL (1.0 / 0.0) +#endif + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if @GNULIB_FREXP@ +# if @REPLACE_FREXP@ +# define frexp rpl_frexp +extern double frexp (double x, int *expptr); +# endif +#elif defined GNULIB_POSIXCHECK +# undef frexp +# define frexp(x,e) \ + (GL_LINK_WARNING ("frexp is unportable - " \ + "use gnulib module frexp for portability"), \ + frexp (x, e)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_ACOSL@ +extern long double acosl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef acosl +# define acosl(x) \ + (GL_LINK_WARNING ("acosl is unportable - " \ + "use gnulib module mathl for portability"), \ + acosl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_ASINL@ +extern long double asinl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef asinl +# define asinl(x) \ + (GL_LINK_WARNING ("asinl is unportable - " \ + "use gnulib module mathl for portability"), \ + asinl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_ATANL@ +extern long double atanl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef atanl +# define atanl(x) \ + (GL_LINK_WARNING ("atanl is unportable - " \ + "use gnulib module mathl for portability"), \ + atanl (x)) +#endif + + +#if @GNULIB_CEILF@ +# if @REPLACE_CEILF@ +# define ceilf rpl_ceilf +extern float ceilf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef ceilf +# define ceilf(x) \ + (GL_LINK_WARNING ("ceilf is unportable - " \ + "use gnulib module ceilf for portability"), \ + ceilf (x)) +#endif + +#if @GNULIB_CEILL@ +# if @REPLACE_CEILL@ +# define ceill rpl_ceill +extern long double ceill (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef ceill +# define ceill(x) \ + (GL_LINK_WARNING ("ceill is unportable - " \ + "use gnulib module ceill for portability"), \ + ceill (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_COSL@ +extern long double cosl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef cosl +# define cosl(x) \ + (GL_LINK_WARNING ("cosl is unportable - " \ + "use gnulib module mathl for portability"), \ + cosl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_EXPL@ +extern long double expl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef expl +# define expl(x) \ + (GL_LINK_WARNING ("expl is unportable - " \ + "use gnulib module mathl for portability"), \ + expl (x)) +#endif + + +#if @GNULIB_FLOORF@ +# if @REPLACE_FLOORF@ +# define floorf rpl_floorf +extern float floorf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef floorf +# define floorf(x) \ + (GL_LINK_WARNING ("floorf is unportable - " \ + "use gnulib module floorf for portability"), \ + floorf (x)) +#endif + +#if @GNULIB_FLOORL@ +# if @REPLACE_FLOORL@ +# define floorl rpl_floorl +extern long double floorl (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef floorl +# define floorl(x) \ + (GL_LINK_WARNING ("floorl is unportable - " \ + "use gnulib module floorl for portability"), \ + floorl (x)) +#endif + + +/* Write x as + x = mantissa * 2^exp + where + If x finite and nonzero: 0.5 <= |mantissa| < 1.0. + If x is zero: mantissa = x, exp = 0. + If x is infinite or NaN: mantissa = x, exp unspecified. + Store exp in *EXPPTR and return mantissa. */ +#if @GNULIB_FREXPL@ && @REPLACE_FREXPL@ +# define frexpl rpl_frexpl +#endif +#if (@GNULIB_FREXPL@ && @REPLACE_FREXPL@) || !@HAVE_DECL_FREXPL@ +extern long double frexpl (long double x, int *expptr); +#endif +#if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK +# undef frexpl +# define frexpl(x,e) \ + (GL_LINK_WARNING ("frexpl is unportable - " \ + "use gnulib module frexpl for portability"), \ + frexpl (x, e)) +#endif + + +/* Return x * 2^exp. */ +#if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@ +# define ldexpl rpl_ldexpl +#endif +#if (@GNULIB_LDEXPL@ && @REPLACE_LDEXPL@) || !@HAVE_DECL_LDEXPL@ +extern long double ldexpl (long double x, int exp); +#endif +#if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK +# undef ldexpl +# define ldexpl(x,e) \ + (GL_LINK_WARNING ("ldexpl is unportable - " \ + "use gnulib module ldexpl for portability"), \ + ldexpl (x, e)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_LOGL@ +extern long double logl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef logl +# define logl(x) \ + (GL_LINK_WARNING ("logl is unportable - " \ + "use gnulib module mathl for portability"), \ + logl (x)) +#endif + + +#if @GNULIB_ROUNDF@ +# if @REPLACE_ROUNDF@ +# undef roundf +# define roundf rpl_roundf +extern float roundf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef roundf +# define roundf(x) \ + (GL_LINK_WARNING ("roundf is unportable - " \ + "use gnulib module roundf for portability"), \ + roundf (x)) +#endif + +#if @GNULIB_ROUND@ +# if @REPLACE_ROUND@ +# undef round +# define round rpl_round +extern double round (double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef round +# define round(x) \ + (GL_LINK_WARNING ("round is unportable - " \ + "use gnulib module round for portability"), \ + round (x)) +#endif + +#if @GNULIB_ROUNDL@ +# if @REPLACE_ROUNDL@ +# undef roundl +# define roundl rpl_roundl +extern long double roundl (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef roundl +# define roundl(x) \ + (GL_LINK_WARNING ("roundl is unportable - " \ + "use gnulib module roundl for portability"), \ + roundl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_SINL@ +extern long double sinl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef sinl +# define sinl(x) \ + (GL_LINK_WARNING ("sinl is unportable - " \ + "use gnulib module mathl for portability"), \ + sinl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_SQRTL@ +extern long double sqrtl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef sqrtl +# define sqrtl(x) \ + (GL_LINK_WARNING ("sqrtl is unportable - " \ + "use gnulib module mathl for portability"), \ + sqrtl (x)) +#endif + + +#if @GNULIB_MATHL@ || !@HAVE_DECL_TANL@ +extern long double tanl (long double x); +#endif +#if !@GNULIB_MATHL@ && defined GNULIB_POSIXCHECK +# undef tanl +# define tanl(x) \ + (GL_LINK_WARNING ("tanl is unportable - " \ + "use gnulib module mathl for portability"), \ + tanl (x)) +#endif + + +#if @GNULIB_TRUNCF@ +# if !@HAVE_DECL_TRUNCF@ +# define truncf rpl_truncf +extern float truncf (float x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef truncf +# define truncf(x) \ + (GL_LINK_WARNING ("truncf is unportable - " \ + "use gnulib module truncf for portability"), \ + truncf (x)) +#endif + +#if @GNULIB_TRUNC@ +# if !@HAVE_DECL_TRUNC@ +# define trunc rpl_trunc +extern double trunc (double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef trunc +# define trunc(x) \ + (GL_LINK_WARNING ("trunc is unportable - " \ + "use gnulib module trunc for portability"), \ + trunc (x)) +#endif + +#if @GNULIB_TRUNCL@ +# if @REPLACE_TRUNCL@ +# undef truncl +# define truncl rpl_truncl +extern long double truncl (long double x); +# endif +#elif defined GNULIB_POSIXCHECK +# undef truncl +# define truncl(x) \ + (GL_LINK_WARNING ("truncl is unportable - " \ + "use gnulib module truncl for portability"), \ + truncl (x)) +#endif + + +#if @GNULIB_ISFINITE@ +# if @REPLACE_ISFINITE@ +extern int gl_isfinitef (float x); +extern int gl_isfinited (double x); +extern int gl_isfinitel (long double x); +# undef isfinite +# define isfinite(x) \ + (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \ + sizeof (x) == sizeof (double) ? gl_isfinited (x) : \ + gl_isfinitef (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#if @GNULIB_ISINF@ +# if @REPLACE_ISINF@ +extern int gl_isinff (float x); +extern int gl_isinfd (double x); +extern int gl_isinfl (long double x); +# undef isinf +# define isinf(x) \ + (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \ + sizeof (x) == sizeof (double) ? gl_isinfd (x) : \ + gl_isinff (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#if @GNULIB_ISNANF@ +/* Test for NaN for 'float' numbers. */ +# if @HAVE_ISNANF@ +/* The original included above provides a declaration of isnan macro + or (older) isnanf function. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanf +# define isnanf(x) __builtin_isnanf ((float)(x)) +# elif defined isnan +# undef isnanf +# define isnanf(x) isnan ((float)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnanf +# define isnanf rpl_isnanf +extern int isnanf (float x); +# endif +#endif + +#if @GNULIB_ISNAND@ +/* Test for NaN for 'double' numbers. + This function is a gnulib extension, unlike isnan() which applied only + to 'double' numbers earlier but now is a type-generic macro. */ +# if @HAVE_ISNAND@ +/* The original included above provides a declaration of isnan macro. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnand +# define isnand(x) __builtin_isnan ((double)(x)) +# else +# undef isnand +# define isnand(x) isnan ((double)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnand +# define isnand rpl_isnand +extern int isnand (double x); +# endif +#endif + +#if @GNULIB_ISNANL@ +/* Test for NaN for 'long double' numbers. */ +# if @HAVE_ISNANL@ +/* The original included above provides a declaration of isnan macro or (older) isnanl function. */ +# include +# if __GNUC__ >= 4 + /* GCC 4.0 and newer provides three built-ins for isnan. */ +# undef isnanl +# define isnanl(x) __builtin_isnanl ((long double)(x)) +# elif defined isnan +# undef isnanl +# define isnanl(x) isnan ((long double)(x)) +# endif +# else +/* Test whether X is a NaN. */ +# undef isnanl +# define isnanl rpl_isnanl +extern int isnanl (long double x); +# endif +#endif + +/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL! */ +#if @GNULIB_ISNAN@ +# if @REPLACE_ISNAN@ +/* We can't just use the isnanf macro (e.g.) as exposed by + isnanf.h (e.g.) here, because those may end up being macros + that recursively expand back to isnan. So use the gnulib + replacements for them directly. */ +# if @HAVE_ISNANF@ && __GNUC__ >= 4 +# define gl_isnan_f(x) __builtin_isnan ((float)(x)) +# else +extern int rpl_isnanf (float x); +# define gl_isnan_f(x) rpl_isnanf (x) +# endif +# if @HAVE_ISNAND@ && __GNUC__ >= 4 +# define gl_isnan_d(x) __builtin_isnan ((double)(x)) +# else +extern int rpl_isnand (double x); +# define gl_isnan_d(x) rpl_isnand (x) +# endif +# if @HAVE_ISNANL@ && __GNUC__ >= 4 +# define gl_isnan_l(x) __builtin_isnan ((long double)(x)) +# else +extern int rpl_isnanl (long double x); +# define gl_isnan_l(x) rpl_isnanl (x) +# endif +# undef isnan +# define isnan(x) \ + (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \ + sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \ + gl_isnan_f (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#if @GNULIB_SIGNBIT@ +# if @REPLACE_SIGNBIT_USING_GCC@ +# undef signbit + /* GCC 4.0 and newer provides three built-ins for signbit. */ +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ + sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ + __builtin_signbitf (x)) +# endif +# if @REPLACE_SIGNBIT@ +# undef signbit +extern int gl_signbitf (float arg); +extern int gl_signbitd (double arg); +extern int gl_signbitl (long double arg); +# if __GNUC__ >= 2 && !__STRICT_ANSI__ +# if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf +# define gl_signbitf_OPTIMIZED_MACRO +# define gl_signbitf(arg) \ + ({ union { float _value; \ + unsigned int _word[(sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ + }) +# endif +# if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd +# define gl_signbitd_OPTIMIZED_MACRO +# define gl_signbitd(arg) \ + ({ union { double _value; \ + unsigned int _word[(sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ + }) +# endif +# if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl +# define gl_signbitl_OPTIMIZED_MACRO +# define gl_signbitl(arg) \ + ({ union { long double _value; \ + unsigned int _word[(sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)]; \ + } _m; \ + _m._value = (arg); \ + (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ + }) +# endif +# endif +# define signbit(x) \ + (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ + sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ + gl_signbitf (x)) +# endif +#elif defined GNULIB_POSIXCHECK + /* How to override a macro? */ +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_MATH_H */ +#endif /* _GL_MATH_H */ diff --git a/lib/mbchar.c b/lib/mbchar.c new file mode 100644 index 00000000..0851d8ad --- /dev/null +++ b/lib/mbchar.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2001, 2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +#include + +#include + +#include "mbchar.h" + +#if IS_BASIC_ASCII + +/* Bit table of characters in the ISO C "basic character set". */ +const unsigned int is_basic_table [UCHAR_MAX / 32 + 1] = +{ + 0x00001a00, /* '\t' '\v' '\f' */ + 0xffffffef, /* ' '...'#' '%'...'?' */ + 0xfffffffe, /* 'A'...'Z' '[' '\\' ']' '^' '_' */ + 0x7ffffffe /* 'a'...'z' '{' '|' '}' '~' */ + /* The remaining bits are 0. */ +}; + +#endif /* IS_BASIC_ASCII */ diff --git a/lib/mbchar.h b/lib/mbchar.h new file mode 100644 index 00000000..e184dd02 --- /dev/null +++ b/lib/mbchar.h @@ -0,0 +1,350 @@ +/* Multibyte character data type. + Copyright (C) 2001, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +/* A multibyte character is a short subsequence of a char* string, + representing a single wide character. + + We use multibyte characters instead of wide characters because of + the following goals: + 1) correct multibyte handling, i.e. operate according to the LC_CTYPE + locale, + 2) ease of maintenance, i.e. the maintainer needs not know all details + of the ISO C 99 standard, + 3) don't fail grossly if the input is not in the encoding set by the + locale, because often different encodings are in use in the same + countries (ISO-8859-1/UTF-8, EUC-JP/Shift_JIS, ...), + 4) fast in the case of ASCII characters, + 5) portability, i.e. don't make unportable assumptions about wchar_t. + + Multibyte characters are only accessed through the mb* macros. + + mb_ptr (mbc) + return a pointer to the beginning of the multibyte sequence. + + mb_len (mbc) + returns the number of bytes occupied by the multibyte sequence. + Always > 0. + + mb_iseq (mbc, sc) + returns true if mbc is the standard ASCII character sc. + + mb_isnul (mbc) + returns true if mbc is the nul character. + + mb_cmp (mbc1, mbc2) + returns a positive, zero, or negative value depending on whether mbc1 + sorts after, same or before mbc2. + + mb_casecmp (mbc1, mbc2) + returns a positive, zero, or negative value depending on whether mbc1 + sorts after, same or before mbc2, modulo upper/lowercase conversion. + + mb_equal (mbc1, mbc2) + returns true if mbc1 and mbc2 are equal. + + mb_caseequal (mbc1, mbc2) + returns true if mbc1 and mbc2 are equal modulo upper/lowercase conversion. + + mb_isalnum (mbc) + returns true if mbc is alphanumeric. + + mb_isalpha (mbc) + returns true if mbc is alphabetic. + + mb_isascii(mbc) + returns true if mbc is plain ASCII. + + mb_isblank (mbc) + returns true if mbc is a blank. + + mb_iscntrl (mbc) + returns true if mbc is a control character. + + mb_isdigit (mbc) + returns true if mbc is a decimal digit. + + mb_isgraph (mbc) + returns true if mbc is a graphic character. + + mb_islower (mbc) + returns true if mbc is lowercase. + + mb_isprint (mbc) + returns true if mbc is a printable character. + + mb_ispunct (mbc) + returns true if mbc is a punctuation character. + + mb_isspace (mbc) + returns true if mbc is a space character. + + mb_isupper (mbc) + returns true if mbc is uppercase. + + mb_isxdigit (mbc) + returns true if mbc is a hexadecimal digit. + + mb_width (mbc) + returns the number of columns on the output device occupied by mbc. + Always >= 0. + + mb_putc (mbc, stream) + outputs mbc on stream, a byte oriented FILE stream opened for output. + + mb_setascii (&mbc, sc) + assigns the standard ASCII character sc to mbc. + + mb_copy (&destmbc, &srcmbc) + copies srcmbc to destmbc. + + Here are the function prototypes of the macros. + + extern const char * mb_ptr (const mbchar_t mbc); + extern size_t mb_len (const mbchar_t mbc); + extern bool mb_iseq (const mbchar_t mbc, char sc); + extern bool mb_isnul (const mbchar_t mbc); + extern int mb_cmp (const mbchar_t mbc1, const mbchar_t mbc2); + extern int mb_casecmp (const mbchar_t mbc1, const mbchar_t mbc2); + extern bool mb_equal (const mbchar_t mbc1, const mbchar_t mbc2); + extern bool mb_caseequal (const mbchar_t mbc1, const mbchar_t mbc2); + extern bool mb_isalnum (const mbchar_t mbc); + extern bool mb_isalpha (const mbchar_t mbc); + extern bool mb_isascii (const mbchar_t mbc); + extern bool mb_isblank (const mbchar_t mbc); + extern bool mb_iscntrl (const mbchar_t mbc); + extern bool mb_isdigit (const mbchar_t mbc); + extern bool mb_isgraph (const mbchar_t mbc); + extern bool mb_islower (const mbchar_t mbc); + extern bool mb_isprint (const mbchar_t mbc); + extern bool mb_ispunct (const mbchar_t mbc); + extern bool mb_isspace (const mbchar_t mbc); + extern bool mb_isupper (const mbchar_t mbc); + extern bool mb_isxdigit (const mbchar_t mbc); + extern int mb_width (const mbchar_t mbc); + extern void mb_putc (const mbchar_t mbc, FILE *stream); + extern void mb_setascii (mbchar_t *new, char sc); + extern void mb_copy (mbchar_t *new, const mbchar_t *old); + */ + +#ifndef _MBCHAR_H +#define _MBCHAR_H 1 + +#include +#include + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.1 has a bug: and must be included before + . */ +#include +#include +#include +#include + +#define MBCHAR_BUF_SIZE 24 + +struct mbchar +{ + const char *ptr; /* pointer to current character */ + size_t bytes; /* number of bytes of current character, > 0 */ + bool wc_valid; /* true if wc is a valid wide character */ + wchar_t wc; /* if wc_valid: the current character */ + char buf[MBCHAR_BUF_SIZE]; /* room for the bytes, used for file input only */ +}; + +/* EOF (not a real character) is represented with bytes = 0 and + wc_valid = false. */ + +typedef struct mbchar mbchar_t; + +/* Access the current character. */ +#define mb_ptr(mbc) ((mbc).ptr) +#define mb_len(mbc) ((mbc).bytes) + +/* Comparison of characters. */ +#define mb_iseq(mbc, sc) ((mbc).wc_valid && (mbc).wc == (sc)) +#define mb_isnul(mbc) ((mbc).wc_valid && (mbc).wc == 0) +#define mb_cmp(mbc1, mbc2) \ + ((mbc1).wc_valid \ + ? ((mbc2).wc_valid \ + ? (int) (mbc1).wc - (int) (mbc2).wc \ + : -1) \ + : ((mbc2).wc_valid \ + ? 1 \ + : (mbc1).bytes == (mbc2).bytes \ + ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ + : (mbc1).bytes < (mbc2).bytes \ + ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ + : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) +#define mb_casecmp(mbc1, mbc2) \ + ((mbc1).wc_valid \ + ? ((mbc2).wc_valid \ + ? (int) towlower ((mbc1).wc) - (int) towlower ((mbc2).wc) \ + : -1) \ + : ((mbc2).wc_valid \ + ? 1 \ + : (mbc1).bytes == (mbc2).bytes \ + ? memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) \ + : (mbc1).bytes < (mbc2).bytes \ + ? (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) > 0 ? 1 : -1) \ + : (memcmp ((mbc1).ptr, (mbc2).ptr, (mbc2).bytes) >= 0 ? 1 : -1))) +#define mb_equal(mbc1, mbc2) \ + ((mbc1).wc_valid && (mbc2).wc_valid \ + ? (mbc1).wc == (mbc2).wc \ + : (mbc1).bytes == (mbc2).bytes \ + && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) +#define mb_caseequal(mbc1, mbc2) \ + ((mbc1).wc_valid && (mbc2).wc_valid \ + ? towlower ((mbc1).wc) == towlower ((mbc2).wc) \ + : (mbc1).bytes == (mbc2).bytes \ + && memcmp ((mbc1).ptr, (mbc2).ptr, (mbc1).bytes) == 0) + +/* , classification. */ +#define mb_isascii(mbc) \ + ((mbc).wc_valid && (mbc).wc >= 0 && (mbc).wc <= 127) +#define mb_isalnum(mbc) ((mbc).wc_valid && iswalnum ((mbc).wc)) +#define mb_isalpha(mbc) ((mbc).wc_valid && iswalpha ((mbc).wc)) +#define mb_isblank(mbc) ((mbc).wc_valid && iswblank ((mbc).wc)) +#define mb_iscntrl(mbc) ((mbc).wc_valid && iswcntrl ((mbc).wc)) +#define mb_isdigit(mbc) ((mbc).wc_valid && iswdigit ((mbc).wc)) +#define mb_isgraph(mbc) ((mbc).wc_valid && iswgraph ((mbc).wc)) +#define mb_islower(mbc) ((mbc).wc_valid && iswlower ((mbc).wc)) +#define mb_isprint(mbc) ((mbc).wc_valid && iswprint ((mbc).wc)) +#define mb_ispunct(mbc) ((mbc).wc_valid && iswpunct ((mbc).wc)) +#define mb_isspace(mbc) ((mbc).wc_valid && iswspace ((mbc).wc)) +#define mb_isupper(mbc) ((mbc).wc_valid && iswupper ((mbc).wc)) +#define mb_isxdigit(mbc) ((mbc).wc_valid && iswxdigit ((mbc).wc)) + +/* Extra function. */ + +/* Unprintable characters appear as a small box of width 1. */ +#define MB_UNPRINTABLE_WIDTH 1 + +static inline int +mb_width_aux (wint_t wc) +{ + int w = wcwidth (wc); + /* For unprintable characters, arbitrarily return 0 for control characters + and MB_UNPRINTABLE_WIDTH otherwise. */ + return (w >= 0 ? w : iswcntrl (wc) ? 0 : MB_UNPRINTABLE_WIDTH); +} + +#define mb_width(mbc) \ + ((mbc).wc_valid ? mb_width_aux ((mbc).wc) : MB_UNPRINTABLE_WIDTH) + +/* Output. */ +#define mb_putc(mbc, stream) fwrite ((mbc).ptr, 1, (mbc).bytes, (stream)) + +/* Assignment. */ +#define mb_setascii(mbc, sc) \ + ((mbc)->ptr = (mbc)->buf, (mbc)->bytes = 1, (mbc)->wc_valid = 1, \ + (mbc)->wc = (mbc)->buf[0] = (sc)) + +/* Copying a character. */ +static inline void +mb_copy (mbchar_t *new_mbc, const mbchar_t *old_mbc) +{ + if (old_mbc->ptr == &old_mbc->buf[0]) + { + memcpy (&new_mbc->buf[0], &old_mbc->buf[0], old_mbc->bytes); + new_mbc->ptr = &new_mbc->buf[0]; + } + else + new_mbc->ptr = old_mbc->ptr; + new_mbc->bytes = old_mbc->bytes; + if ((new_mbc->wc_valid = old_mbc->wc_valid)) + new_mbc->wc = old_mbc->wc; +} + + +/* is_basic(c) tests whether the single-byte character c is in the + ISO C "basic character set". + This is a convenience function, and is in this file only to share code + between mbiter_multi.h and mbfile_multi.h. */ +#if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) +/* The character set is ISO-646, not EBCDIC. */ +# define IS_BASIC_ASCII 1 + +extern const unsigned int is_basic_table[]; + +static inline bool +is_basic (char c) +{ + return (is_basic_table [(unsigned char) c >> 5] >> ((unsigned char) c & 31)) + & 1; +} + +#else + +static inline bool +is_basic (char c) +{ + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + return 1; + default: + return 0; + } +} + +#endif + +#endif /* _MBCHAR_H */ diff --git a/lib/mbiter.h b/lib/mbiter.h new file mode 100644 index 00000000..a4782d4b --- /dev/null +++ b/lib/mbiter.h @@ -0,0 +1,215 @@ +/* Iterating through multibyte strings: macros for multi-byte encodings. + Copyright (C) 2001, 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +/* The macros in this file implement forward iteration through a + multi-byte string. + + With these macros, an iteration loop that looks like + + char *iter; + for (iter = buf; iter < buf + buflen; iter++) + { + do_something (*iter); + } + + becomes + + mbi_iterator_t iter; + for (mbi_init (iter, buf, buflen); mbi_avail (iter); mbi_advance (iter)) + { + do_something (mbi_cur_ptr (iter), mb_len (mbi_cur (iter))); + } + + The benefit of these macros over plain use of mbrtowc is: + - Handling of invalid multibyte sequences is possible without + making the code more complicated, while still preserving the + invalid multibyte sequences. + + mbi_iterator_t + is a type usable for variable declarations. + + mbi_init (iter, startptr, length) + initializes the iterator, starting at startptr and crossing length bytes. + + mbi_avail (iter) + returns true if there are more multibyte chracters available before + the end of string is reached. In this case, mbi_cur (iter) is + initialized to the next multibyte chracter. + + mbi_advance (iter) + advances the iterator by one multibyte character. + + mbi_cur (iter) + returns the current multibyte character, of type mbchar_t. All the + macros defined in mbchar.h can be used on it. + + mbi_cur_ptr (iter) + return a pointer to the beginning of the current multibyte character. + + mbi_reloc (iter, ptrdiff) + relocates iterator when the string is moved by ptrdiff bytes. + + mbi_copy (&destiter, &srciter) + copies srciter to destiter. + + Here are the function prototypes of the macros. + + extern void mbi_init (mbi_iterator_t iter, + const char *startptr, size_t length); + extern bool mbi_avail (mbi_iterator_t iter); + extern void mbi_advance (mbi_iterator_t iter); + extern mbchar_t mbi_cur (mbi_iterator_t iter); + extern const char * mbi_cur_ptr (mbi_iterator_t iter); + extern void mbi_reloc (mbi_iterator_t iter, ptrdiff_t ptrdiff); + extern void mbi_copy (mbi_iterator_t *new, const mbi_iterator_t *old); + */ + +#ifndef _MBITER_H +#define _MBITER_H 1 + +#include +#include +#include +#include + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.1 has a bug: and must be included before + . */ +#include +#include +#include + +#include "mbchar.h" + +struct mbiter_multi +{ + const char *limit; /* pointer to end of string */ + bool in_shift; /* true if next byte may not be interpreted as ASCII */ + mbstate_t state; /* if in_shift: current shift state */ + bool next_done; /* true if mbi_avail has already filled the following */ + struct mbchar cur; /* the current character: + const char *cur.ptr pointer to current character + The following are only valid after mbi_avail. + size_t cur.bytes number of bytes of current character + bool cur.wc_valid true if wc is a valid wide character + wchar_t cur.wc if wc_valid: the current character + */ +}; + +static inline void +mbiter_multi_next (struct mbiter_multi *iter) +{ + if (iter->next_done) + return; + if (iter->in_shift) + goto with_shift; + /* Handle most ASCII characters quickly, without calling mbrtowc(). */ + if (is_basic (*iter->cur.ptr)) + { + /* These characters are part of the basic character set. ISO C 99 + guarantees that their wide character code is identical to their + char code. */ + iter->cur.bytes = 1; + iter->cur.wc = *iter->cur.ptr; + iter->cur.wc_valid = true; + } + else + { + assert (mbsinit (&iter->state)); + iter->in_shift = true; + with_shift: + iter->cur.bytes = mbrtowc (&iter->cur.wc, iter->cur.ptr, + iter->limit - iter->cur.ptr, &iter->state); + if (iter->cur.bytes == (size_t) -1) + { + /* An invalid multibyte sequence was encountered. */ + iter->cur.bytes = 1; + iter->cur.wc_valid = false; + /* Whether to set iter->in_shift = false and reset iter->state + or not is not very important; the string is bogus anyway. */ + } + else if (iter->cur.bytes == (size_t) -2) + { + /* An incomplete multibyte character at the end. */ + iter->cur.bytes = iter->limit - iter->cur.ptr; + iter->cur.wc_valid = false; + /* Whether to set iter->in_shift = false and reset iter->state + or not is not important; the string end is reached anyway. */ + } + else + { + if (iter->cur.bytes == 0) + { + /* A null wide character was encountered. */ + iter->cur.bytes = 1; + assert (*iter->cur.ptr == '\0'); + assert (iter->cur.wc == 0); + } + iter->cur.wc_valid = true; + + /* When in the initial state, we can go back treating ASCII + characters more quickly. */ + if (mbsinit (&iter->state)) + iter->in_shift = false; + } + } + iter->next_done = true; +} + +static inline void +mbiter_multi_reloc (struct mbiter_multi *iter, ptrdiff_t ptrdiff) +{ + iter->cur.ptr += ptrdiff; + iter->limit += ptrdiff; +} + +static inline void +mbiter_multi_copy (struct mbiter_multi *new_iter, const struct mbiter_multi *old_iter) +{ + new_iter->limit = old_iter->limit; + if ((new_iter->in_shift = old_iter->in_shift)) + memcpy (&new_iter->state, &old_iter->state, sizeof (mbstate_t)); + else + memset (&new_iter->state, 0, sizeof (mbstate_t)); + new_iter->next_done = old_iter->next_done; + mb_copy (&new_iter->cur, &old_iter->cur); +} + +/* Iteration macros. */ +typedef struct mbiter_multi mbi_iterator_t; +#define mbi_init(iter, startptr, length) \ + ((iter).cur.ptr = (startptr), (iter).limit = (iter).cur.ptr + (length), \ + (iter).in_shift = false, memset (&(iter).state, '\0', sizeof (mbstate_t)), \ + (iter).next_done = false) +#define mbi_avail(iter) \ + ((iter).cur.ptr < (iter).limit && (mbiter_multi_next (&(iter)), true)) +#define mbi_advance(iter) \ + ((iter).cur.ptr += (iter).cur.bytes, (iter).next_done = false) + +/* Access to the current character. */ +#define mbi_cur(iter) (iter).cur +#define mbi_cur_ptr(iter) (iter).cur.ptr + +/* Relocation. */ +#define mbi_reloc(iter, ptrdiff) mbiter_multi_reloc (&iter, ptrdiff) + +/* Copying an iterator. */ +#define mbi_copy mbiter_multi_copy + +#endif /* _MBITER_H */ diff --git a/lib/mbrtowc.c b/lib/mbrtowc.c new file mode 100644 index 00000000..7b528e80 --- /dev/null +++ b/lib/mbrtowc.c @@ -0,0 +1,386 @@ +/* Convert multibyte character to wide character. + Copyright (C) 1999-2002, 2005-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#if GNULIB_defined_mbstate_t +/* Implement mbrtowc() on top of mbtowc(). */ + +# include +# include + +# include "localcharset.h" +# include "streq.h" +# include "verify.h" + + +verify (sizeof (mbstate_t) >= 4); + +static char internal_state[4]; + +size_t +mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ + char *pstate = (char *)ps; + + if (pstate == NULL) + pstate = internal_state; + + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } + + if (n == 0) + return (size_t)(-2); + + /* Here n > 0. */ + { + size_t nstate = pstate[0]; + char buf[4]; + const char *p; + size_t m; + + switch (nstate) + { + case 0: + p = s; + m = n; + break; + case 3: + buf[2] = pstate[3]; + /*FALLTHROUGH*/ + case 2: + buf[1] = pstate[2]; + /*FALLTHROUGH*/ + case 1: + buf[0] = pstate[1]; + p = buf; + m = nstate; + buf[m++] = s[0]; + if (n >= 2 && m < 4) + { + buf[m++] = s[1]; + if (n >= 3 && m < 4) + buf[m++] = s[2]; + } + break; + default: + errno = EINVAL; + return (size_t)(-1); + } + + /* Here m > 0. */ + +# if __GLIBC__ + /* Work around bug */ + mbtowc (NULL, NULL, 0); +# endif + { + int res = mbtowc (pwc, p, m); + + if (res >= 0) + { + if (pwc != NULL && ((*pwc == 0) != (res == 0))) + abort (); + if (nstate >= (res > 0 ? res : 1)) + abort (); + res -= nstate; + pstate[0] = 0; + return res; + } + + /* mbtowc does not distinguish between invalid and incomplete multibyte + sequences. But mbrtowc needs to make this distinction. + There are two possible approaches: + - Use iconv() and its return value. + - Use built-in knowledge about the possible encodings. + Given the low quality of implementation of iconv() on the systems that + lack mbrtowc(), we use the second approach. + The possible encodings are: + - 8-bit encodings, + - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, + - UTF-8. + Use specialized code for each. */ + if (m >= 4 || m >= MB_CUR_MAX) + goto invalid; + /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ + { + const char *encoding = locale_charset (); + + if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) + { + /* Cf. unistr/u8-mblen.c. */ + unsigned char c = (unsigned char) p[0]; + + if (c >= 0xc2) + { + if (c < 0xe0) + { + if (m == 1) + goto incomplete; + } + else if (c < 0xf0) + { + if (m == 1) + goto incomplete; + if (m == 2) + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xe1 || c2 >= 0xa0) + && (c != 0xed || c2 < 0xa0)) + goto incomplete; + } + } + else if (c <= 0xf4) + { + if (m == 1) + goto incomplete; + else /* m == 2 || m == 3 */ + { + unsigned char c2 = (unsigned char) p[1]; + + if ((c2 ^ 0x80) < 0x40 + && (c >= 0xf1 || c2 >= 0x90) + && (c < 0xf4 || (c == 0xf4 && c2 < 0x90))) + { + if (m == 2) + goto incomplete; + else /* m == 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if ((c3 ^ 0x80) < 0x40) + goto incomplete; + } + } + } + } + } + goto invalid; + } + + /* As a reference for this code, you can use the GNU libiconv + implementation. Look for uses of the RET_TOOFEW macro. */ + + if (STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) + goto incomplete; + } + if (m == 2) + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8f) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0xa1 && c2 < 0xff) + goto incomplete; + } + } + goto invalid; + } + if (STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) + || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0xa1 && c < 0xff) + goto incomplete; + } + goto invalid; + } + if (STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0xa1 && c < 0xff) || c == 0x8e) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c == 0x8e) + goto incomplete; + } + goto invalid; + } + if (STREQ (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) + goto incomplete; + } + else /* m == 2 || m == 3 */ + { + unsigned char c = (unsigned char) p[0]; + + if (c >= 0x90 && c <= 0xe3) + { + unsigned char c2 = (unsigned char) p[1]; + + if (c2 >= 0x30 && c2 <= 0x39) + { + if (m == 2) + goto incomplete; + else /* m == 3 */ + { + unsigned char c3 = (unsigned char) p[2]; + + if (c3 >= 0x81 && c3 <= 0xfe) + goto incomplete; + } + } + } + } + goto invalid; + } + if (STREQ (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) + { + if (m == 1) + { + unsigned char c = (unsigned char) p[0]; + + if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) + || (c >= 0xf0 && c <= 0xf9)) + goto incomplete; + } + goto invalid; + } + + /* An unknown multibyte encoding. */ + goto incomplete; + } + + incomplete: + { + size_t k = nstate; + /* Here 0 <= k < m < 4. */ + pstate[++k] = s[0]; + if (k < m) + { + pstate[++k] = s[1]; + if (k < m) + pstate[++k] = s[2]; + } + if (k != m) + abort (); + } + pstate[0] = m; + return (size_t)(-2); + + invalid: + errno = EILSEQ; + /* The conversion state is undefined, says POSIX. */ + return (size_t)(-1); + } + } +} + +#else +/* Override the system's mbrtowc() function. */ + +# undef mbrtowc + +size_t +rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ +# if MBRTOWC_NULL_ARG_BUG || MBRTOWC_RETVAL_BUG + if (s == NULL) + { + pwc = NULL; + s = ""; + n = 1; + } +# endif + +# if MBRTOWC_RETVAL_BUG + { + static mbstate_t internal_state; + + /* Override mbrtowc's internal state. We can not call mbsinit() on the + hidden internal state, but we can call it on our variable. */ + if (ps == NULL) + ps = &internal_state; + + if (!mbsinit (ps)) + { + /* Parse the rest of the multibyte character byte for byte. */ + size_t count = 0; + for (; n > 0; s++, n--) + { + wchar_t wc; + size_t ret = mbrtowc (&wc, s, 1, ps); + + if (ret == (size_t)(-1)) + return (size_t)(-1); + count++; + if (ret != (size_t)(-2)) + { + /* The multibyte character has been completed. */ + if (pwc != NULL) + *pwc = wc; + return (wc == 0 ? 0 : count); + } + } + return (size_t)(-2); + } + } +# endif + +# if MBRTOWC_NUL_RETVAL_BUG + { + wchar_t wc; + size_t ret = mbrtowc (&wc, s, n, ps); + + if (ret != (size_t)(-1) && ret != (size_t)(-2)) + { + if (pwc != NULL) + *pwc = wc; + if (wc == 0) + ret = 0; + } + return ret; + } +# else + return mbrtowc (pwc, s, n, ps); +# endif +} + +#endif diff --git a/lib/mbsinit.c b/lib/mbsinit.c new file mode 100644 index 00000000..74957943 --- /dev/null +++ b/lib/mbsinit.c @@ -0,0 +1,47 @@ +/* Test for initial conversion state. + Copyright (C) 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include "verify.h" + +/* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs() + and wcrtomb(), wcsrtombs(). + We assume that + - sizeof (mbstate_t) >= 4, + - only stateless encodings are supported (such as UTF-8 and EUC-JP, but + not ISO-2022 variants), + - for each encoding, the number of bytes for a wide character is <= 4. + (This maximum is attained for UTF-8, GB18030, EUC-TW.) + We define the meaning of mbstate_t as follows: + - In mb -> wc direction, mbstate_t's first byte contains the number of + buffered bytes (in the range 0..3), followed by up to 3 buffered bytes. + - In wc -> mb direction, mbstate_t contains no information. In other + words, it is always in the initial state. */ + +verify (sizeof (mbstate_t) >= 4); + +int +mbsinit (const mbstate_t *ps) +{ + const char *pstate = (const char *)ps; + + return pstate[0] == 0; +} diff --git a/lib/mbsnlen.c b/lib/mbsnlen.c new file mode 100644 index 00000000..5ed55567 --- /dev/null +++ b/lib/mbsnlen.c @@ -0,0 +1,45 @@ +/* Counting the multibyte characters in a string. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include + +#include "mbiter.h" + +/* Return the number of multibyte characters in the character string starting + at STRING and ending at STRING + LEN. */ +size_t +mbsnlen (const char *string, size_t len) +{ + if (MB_CUR_MAX > 1) + { + size_t count; + mbi_iterator_t iter; + + count = 0; + for (mbi_init (iter, string, len); mbi_avail (iter); mbi_advance (iter)) + count++; + + return count; + } + else + return len; +} diff --git a/lib/memchr.c b/lib/memchr.c new file mode 100644 index 00000000..3ea1d5ba --- /dev/null +++ b/lib/memchr.c @@ -0,0 +1,172 @@ +/* Copyright (C) 1991, 1993, 1996, 1997, 1999, 2000, 2003, 2004, 2006, 2008 + Free Software Foundation, Inc. + + Based on strlen implementation by Torbjorn Granlund (tege@sics.se), + with help from Dan Sahlin (dan@sics.se) and + commentary by Jim Blandy (jimb@ai.mit.edu); + adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), + and implemented by Roland McGrath (roland@ai.mit.edu). + +NOTE: The canonical source of this file is maintained with the GNU C Library. +Bugs can be reported to bug-glibc@prep.ai.mit.edu. + +This program is free software: you can redistribute it and/or modify it +under the terms of the GNU Lesser General Public License as published by the +Free Software Foundation; either version 3 of the License, or any +later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with this program. If not, see . */ + +#ifndef _LIBC +# include +#endif + +#include + +#include + +#if defined _LIBC +# include +#else +# define reg_char char +#endif + +#include + +#if HAVE_BP_SYM_H || defined _LIBC +# include +#else +# define BP_SYM(sym) sym +#endif + +#undef __memchr +#ifdef _LIBC +# undef memchr +#endif + +#ifndef weak_alias +# define __memchr memchr +#endif + +/* Search no more than N bytes of S for C. */ +void * +__memchr (void const *s, int c_in, size_t n) +{ + /* On 32-bit hardware, choosing longword to be a 32-bit unsigned + long instead of a 64-bit uintmax_t tends to give better + performance. On 64-bit hardware, unsigned long is generally 64 + bits already. Change this typedef to experiment with + performance. */ + typedef unsigned long int longword; + + const unsigned char *char_ptr; + const longword *longword_ptr; + longword repeated_one; + longword repeated_c; + unsigned reg_char c; + + c = (unsigned char) c_in; + + /* Handle the first few bytes by reading one byte at a time. + Do this until CHAR_PTR is aligned on a longword boundary. */ + for (char_ptr = (const unsigned char *) s; + n > 0 && (size_t) char_ptr % sizeof (longword) != 0; + --n, ++char_ptr) + if (*char_ptr == c) + return (void *) char_ptr; + + longword_ptr = (const longword *) char_ptr; + + /* All these elucidatory comments refer to 4-byte longwords, + but the theory applies equally well to any size longwords. */ + + /* Compute auxiliary longword values: + repeated_one is a value which has a 1 in every byte. + repeated_c has c in every byte. */ + repeated_one = 0x01010101; + repeated_c = c | (c << 8); + repeated_c |= repeated_c << 16; + if (0xffffffffU < (longword) -1) + { + repeated_one |= repeated_one << 31 << 1; + repeated_c |= repeated_c << 31 << 1; + if (8 < sizeof (longword)) + { + size_t i; + + for (i = 64; i < sizeof (longword) * 8; i *= 2) + { + repeated_one |= repeated_one << i; + repeated_c |= repeated_c << i; + } + } + } + + /* Instead of the traditional loop which tests each byte, we will test a + longword at a time. The tricky part is testing if *any of the four* + bytes in the longword in question are equal to c. We first use an xor + with repeated_c. This reduces the task to testing whether *any of the + four* bytes in longword1 is zero. + + We compute tmp = + ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). + That is, we perform the following operations: + 1. Subtract repeated_one. + 2. & ~longword1. + 3. & a mask consisting of 0x80 in every byte. + Consider what happens in each byte: + - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, + and step 3 transforms it into 0x80. A carry can also be propagated + to more significant bytes. + - If a byte of longword1 is nonzero, let its lowest 1 bit be at + position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, + the byte ends in a single bit of value 0 and k bits of value 1. + After step 2, the result is just k bits of value 1: 2^k - 1. After + step 3, the result is 0. And no carry is produced. + So, if longword1 has only non-zero bytes, tmp is zero. + Whereas if longword1 has a zero byte, call j the position of the least + significant zero byte. Then the result has a zero at positions 0, ..., + j-1 and a 0x80 at position j. We cannot predict the result at the more + significant bytes (positions j+1..3), but it does not matter since we + already have a non-zero bit at position 8*j+7. + + So, the test whether any byte in longword1 is zero is equivalent to + testing whether tmp is nonzero. */ + + while (n >= sizeof (longword)) + { + longword longword1 = *longword_ptr ^ repeated_c; + + if ((((longword1 - repeated_one) & ~longword1) + & (repeated_one << 7)) != 0) + break; + longword_ptr++; + n -= sizeof (longword); + } + + char_ptr = (const unsigned char *) longword_ptr; + + /* At this point, we know that either n < sizeof (longword), or one of the + sizeof (longword) bytes starting at char_ptr is == c. On little-endian + machines, we could determine the first such byte without any further + memory accesses, just by looking at the tmp result from the last loop + iteration. But this does not work on big-endian machines. Choose code + that works in both cases. */ + + for (; n > 0; --n, ++char_ptr) + { + if (*char_ptr == c) + return (void *) char_ptr; + } + + return NULL; +} +#ifdef weak_alias +weak_alias (__memchr, BP_SYM (memchr)) +#endif diff --git a/lib/memchr.valgrind b/lib/memchr.valgrind new file mode 100644 index 00000000..60f247e1 --- /dev/null +++ b/lib/memchr.valgrind @@ -0,0 +1,14 @@ +# Suppress a valgrind message about use of uninitialized memory in memchr(). +# POSIX states that when the character is found, memchr must not read extra +# bytes in an overestimated length (for example, where memchr is used to +# implement strnlen). However, we use a safe word read to provide a speedup. +{ + memchr-value4 + Memcheck:Value4 + fun:rpl_memchr +} +{ + memchr-value8 + Memcheck:Value8 + fun:rpl_memchr +} diff --git a/lib/memcmp2.c b/lib/memcmp2.c new file mode 100644 index 00000000..7f8f6049 --- /dev/null +++ b/lib/memcmp2.c @@ -0,0 +1,36 @@ +/* Compare two memory areas with possibly different lengths. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "memcmp2.h" + +#include + +int +memcmp2 (const char *s1, size_t n1, const char *s2, size_t n2) +{ + int cmp = memcmp (s1, s2, n1 <= n2 ? n1 : n2); + if (cmp == 0) + { + if (n1 < n2) + cmp = -1; + else if (n1 > n2) + cmp = 1; + } + return cmp; +} diff --git a/lib/memcmp2.h b/lib/memcmp2.h new file mode 100644 index 00000000..f3230554 --- /dev/null +++ b/lib/memcmp2.h @@ -0,0 +1,39 @@ +/* Compare two memory areas with possibly different lengths. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef MEMCMP2_H +#define MEMCMP2_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Compare the memory regions S1 = [s1..s1+N1-1], S2 = [s2..s2+n2-1], + lexicographically. + This function's result is locale independent, unlike memcoll()'s. + Return a negative number if S1 < S2, a positive number if S1 > S2, or + 0 if S1 and S2 have the same contents. */ +extern int memcmp2 (const char *s1, size_t n1, const char *s2, size_t n2); + + +#ifdef __cplusplus +} +#endif + +#endif /* MEMCMP2_H */ diff --git a/lib/memxfrm.c b/lib/memxfrm.c new file mode 100644 index 00000000..dc6eda1f --- /dev/null +++ b/lib/memxfrm.c @@ -0,0 +1,137 @@ +/* Locale dependent memory area transformation for comparison. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "memxfrm.h" + +#include +#include +#include + +char * +memxfrm (char *s, size_t n, char *resultbuf, size_t *lengthp) +{ + /* Result accumulator. */ + char *result; + size_t length; + size_t allocated; + + char orig_sentinel; + + /* Initial memory allocation. */ + if (resultbuf != NULL && *lengthp > 0) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + allocated = (n > 0 ? n : 1); + result = (char *) malloc (allocated); + if (result == NULL) + goto out_of_memory_2; + } + length = 0; + + /* Add sentinel.byte. */ + orig_sentinel = s[n]; + s[n] = '\0'; + + /* Iterate through S, transforming each NUL terminated segment. + Accumulate the resulting transformed segments in result, separated by + NULs. */ + { + const char *p_end = s + n + 1; + const char *p; + + p = s; + for (;;) + { + /* Search next NUL byte. */ + const char *q = p + strlen (p); + + for (;;) + { + size_t k; + + errno = 0; + k = strxfrm (result + length, p, allocated - length); + if (errno != 0) + goto fail; + if (k >= allocated - length) + { + /* Grow the result buffer. */ + char *new_result; + + allocated = 2 * allocated; + if (allocated < 64) + allocated = 64; + if (result == resultbuf) + new_result = (char *) malloc (allocated); + else + new_result = (char *) realloc (result, allocated); + if (new_result == NULL) + goto out_of_memory_1; + result = new_result; + } + else + { + length += k; + break; + } + } + + p = q + 1; + if (p == p_end) + break; + result[length] = '\0'; + length++; + } + } + + /* Shrink the allocated memory if possible. */ + if (result != resultbuf && (length > 0 ? length : 1) < allocated) + { + char *memory = (char *) realloc (result, length > 0 ? length : 1); + if (memory != NULL) + result = memory; + } + + s[n] = orig_sentinel; + *lengthp = length; + return result; + + fail: + { + int saved_errno = errno; + if (result != resultbuf) + free (result); + s[n] = orig_sentinel; + errno = saved_errno; + return NULL; + } + + out_of_memory_1: + if (result != resultbuf) + free (result); + s[n] = orig_sentinel; + out_of_memory_2: + errno = ENOMEM; + return NULL; +} diff --git a/lib/memxfrm.h b/lib/memxfrm.h new file mode 100644 index 00000000..d78900a7 --- /dev/null +++ b/lib/memxfrm.h @@ -0,0 +1,48 @@ +/* Locale dependent memory area transformation for comparison. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef MEMXFRM_H +#define MEMXFRM_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Generalization of strxfrm() to strings with embedded NUL bytes. */ + +/* Transform the memory area [S..S+N-1] to a memory area, in such a way that + comparing (S1,N1) and (S2,N2) with memcoll() is equivalent to comparing + memxfrm(S1,N1) and memxfrm(S2,N2) with memcmp2(). + The byte S[N] may be temporarily overwritten by this function, but will be + restored before this function returns. + The result of this function depends on the LC_COLLATE category of the + current locale. + If successful: If resultbuf is not NULL and the result fits into *lengthp + bytes, it is put in resultbuf, and resultbuf is returned. Otherwise, a + freshly allocated string is returned. In both cases, *lengthp is set to the + length of the returned string. + Upon failure, return NULL, with errno set. */ +extern char * memxfrm (char *s, size_t n, char *resultbuf, size_t *lengthp); + + +#ifdef __cplusplus +} +#endif + +#endif /* MEMXFRM_H */ diff --git a/lib/minmax.h b/lib/minmax.h new file mode 100644 index 00000000..4cafb2f2 --- /dev/null +++ b/lib/minmax.h @@ -0,0 +1,60 @@ +/* MIN, MAX macros. + Copyright (C) 1995, 1998, 2001, 2003, 2005 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _MINMAX_H +#define _MINMAX_H + +/* Note: MIN, MAX are also defined in on some systems + (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about + MIN, MAX macro redefinitions on some systems; the workaround is to + #include this file as the last one among the #include list. */ + +/* Before we define the following symbols we get the file + since otherwise we get redefinitions on some systems if is + included after this file. Likewise for . + If more than one of these system headers define MIN and MAX, pick just + one of the headers (because the definitions most likely are the same). */ +#if HAVE_MINMAX_IN_LIMITS_H +# include +#elif HAVE_MINMAX_IN_SYS_PARAM_H +# include +#endif + +/* Note: MIN and MAX should be used with two arguments of the + same type. They might not return the minimum and maximum of their two + arguments, if the arguments have different types or have unusual + floating-point values. For example, on a typical host with 32-bit 'int', + 64-bit 'long long', and 64-bit IEEE 754 'double' types: + + MAX (-1, 2147483648) returns 4294967295. + MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. + MAX (NaN, 0.0) returns 0.0. + MAX (+0.0, -0.0) returns -0.0. + + and in each case the answer is in some sense bogus. */ + +/* MAX(a,b) returns the maximum of A and B. */ +#ifndef MAX +# define MAX(a,b) ((a) > (b) ? (a) : (b)) +#endif + +/* MIN(a,b) returns the minimum of A and B. */ +#ifndef MIN +# define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#endif /* _MINMAX_H */ diff --git a/lib/printf-args.c b/lib/printf-args.c new file mode 100644 index 00000000..c31d2042 --- /dev/null +++ b/lib/printf-args.c @@ -0,0 +1,187 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002-2003, 2005-2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + PRINTF_FETCHARGS Name of the function to be defined. + STATIC Set to 'static' to declare the function static. */ + +#ifndef PRINTF_FETCHARGS +# include +#endif + +/* Specification. */ +#ifndef PRINTF_FETCHARGS +# include "printf-args.h" +#endif + +#ifdef STATIC +STATIC +#endif +int +PRINTF_FETCHARGS (va_list args, arguments *a) +{ + size_t i; + argument *ap; + + for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) + switch (ap->type) + { + case TYPE_SCHAR: + ap->a.a_schar = va_arg (args, /*signed char*/ int); + break; + case TYPE_UCHAR: + ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); + break; + case TYPE_SHORT: + ap->a.a_short = va_arg (args, /*short*/ int); + break; + case TYPE_USHORT: + ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); + break; + case TYPE_INT: + ap->a.a_int = va_arg (args, int); + break; + case TYPE_UINT: + ap->a.a_uint = va_arg (args, unsigned int); + break; + case TYPE_LONGINT: + ap->a.a_longint = va_arg (args, long int); + break; + case TYPE_ULONGINT: + ap->a.a_ulongint = va_arg (args, unsigned long int); + break; +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + ap->a.a_longlongint = va_arg (args, long long int); + break; + case TYPE_ULONGLONGINT: + ap->a.a_ulonglongint = va_arg (args, unsigned long long int); + break; +#endif + case TYPE_DOUBLE: + ap->a.a_double = va_arg (args, double); + break; + case TYPE_LONGDOUBLE: + ap->a.a_longdouble = va_arg (args, long double); + break; + case TYPE_CHAR: + ap->a.a_char = va_arg (args, int); + break; +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: + /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by + default argument promotions", this is not the case in mingw32, + where wint_t is 'unsigned short'. */ + ap->a.a_wide_char = + (sizeof (wint_t) < sizeof (int) + ? va_arg (args, int) + : va_arg (args, wint_t)); + break; +#endif + case TYPE_STRING: + ap->a.a_string = va_arg (args, const char *); + /* A null pointer is an invalid argument for "%s", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_string == NULL) + ap->a.a_string = "(NULL)"; + break; +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: + ap->a.a_wide_string = va_arg (args, const wchar_t *); + /* A null pointer is an invalid argument for "%ls", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_wide_string == NULL) + { + static const wchar_t wide_null_string[] = + { + (wchar_t)'(', + (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', + (wchar_t)')', + (wchar_t)0 + }; + ap->a.a_wide_string = wide_null_string; + } + break; +#endif + case TYPE_POINTER: + ap->a.a_pointer = va_arg (args, void *); + break; + case TYPE_COUNT_SCHAR_POINTER: + ap->a.a_count_schar_pointer = va_arg (args, signed char *); + break; + case TYPE_COUNT_SHORT_POINTER: + ap->a.a_count_short_pointer = va_arg (args, short *); + break; + case TYPE_COUNT_INT_POINTER: + ap->a.a_count_int_pointer = va_arg (args, int *); + break; + case TYPE_COUNT_LONGINT_POINTER: + ap->a.a_count_longint_pointer = va_arg (args, long int *); + break; +#if HAVE_LONG_LONG_INT + case TYPE_COUNT_LONGLONGINT_POINTER: + ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); + break; +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + case TYPE_U8_STRING: + ap->a.a_u8_string = va_arg (args, const uint8_t *); + /* A null pointer is an invalid argument for "%U", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u8_string == NULL) + { + static const uint8_t u8_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u8_string = u8_null_string; + } + break; + case TYPE_U16_STRING: + ap->a.a_u16_string = va_arg (args, const uint16_t *); + /* A null pointer is an invalid argument for "%lU", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u16_string == NULL) + { + static const uint16_t u16_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u16_string = u16_null_string; + } + break; + case TYPE_U32_STRING: + ap->a.a_u32_string = va_arg (args, const uint32_t *); + /* A null pointer is an invalid argument for "%llU", but in practice + it occurs quite frequently in printf statements that produce + debug output. Use a fallback in this case. */ + if (ap->a.a_u32_string == NULL) + { + static const uint32_t u32_null_string[] = + { '(', 'N', 'U', 'L', 'L', ')', 0 }; + ap->a.a_u32_string = u32_null_string; + } + break; +#endif + default: + /* Unknown type. */ + return -1; + } + return 0; +} diff --git a/lib/printf-args.h b/lib/printf-args.h new file mode 100644 index 00000000..4c68f115 --- /dev/null +++ b/lib/printf-args.h @@ -0,0 +1,154 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002-2003, 2006-2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _PRINTF_ARGS_H +#define _PRINTF_ARGS_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + PRINTF_FETCHARGS Name of the function to be declared. + STATIC Set to 'static' to declare the function static. */ + +/* Default parameters. */ +#ifndef PRINTF_FETCHARGS +# define PRINTF_FETCHARGS printf_fetchargs +#endif + +/* Get size_t. */ +#include + +/* Get wchar_t. */ +#if HAVE_WCHAR_T +# include +#endif + +/* Get wint_t. */ +#if HAVE_WINT_T +# include +#endif + +/* Get va_list. */ +#include + + +/* Argument types */ +typedef enum +{ + TYPE_NONE, + TYPE_SCHAR, + TYPE_UCHAR, + TYPE_SHORT, + TYPE_USHORT, + TYPE_INT, + TYPE_UINT, + TYPE_LONGINT, + TYPE_ULONGINT, +#if HAVE_LONG_LONG_INT + TYPE_LONGLONGINT, + TYPE_ULONGLONGINT, +#endif + TYPE_DOUBLE, + TYPE_LONGDOUBLE, + TYPE_CHAR, +#if HAVE_WINT_T + TYPE_WIDE_CHAR, +#endif + TYPE_STRING, +#if HAVE_WCHAR_T + TYPE_WIDE_STRING, +#endif + TYPE_POINTER, + TYPE_COUNT_SCHAR_POINTER, + TYPE_COUNT_SHORT_POINTER, + TYPE_COUNT_INT_POINTER, + TYPE_COUNT_LONGINT_POINTER +#if HAVE_LONG_LONG_INT +, TYPE_COUNT_LONGLONGINT_POINTER +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ +, TYPE_U8_STRING +, TYPE_U16_STRING +, TYPE_U32_STRING +#endif +} arg_type; + +/* Polymorphic argument */ +typedef struct +{ + arg_type type; + union + { + signed char a_schar; + unsigned char a_uchar; + short a_short; + unsigned short a_ushort; + int a_int; + unsigned int a_uint; + long int a_longint; + unsigned long int a_ulongint; +#if HAVE_LONG_LONG_INT + long long int a_longlongint; + unsigned long long int a_ulonglongint; +#endif + float a_float; + double a_double; + long double a_longdouble; + int a_char; +#if HAVE_WINT_T + wint_t a_wide_char; +#endif + const char* a_string; +#if HAVE_WCHAR_T + const wchar_t* a_wide_string; +#endif + void* a_pointer; + signed char * a_count_schar_pointer; + short * a_count_short_pointer; + int * a_count_int_pointer; + long int * a_count_longint_pointer; +#if HAVE_LONG_LONG_INT + long long int * a_count_longlongint_pointer; +#endif +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + const uint8_t * a_u8_string; + const uint16_t * a_u16_string; + const uint32_t * a_u32_string; +#endif + } + a; +} +argument; + +typedef struct +{ + size_t count; + argument *arg; +} +arguments; + + +/* Fetch the arguments, putting them into a. */ +#ifdef STATIC +STATIC +#else +extern +#endif +int PRINTF_FETCHARGS (va_list args, arguments *a); + +#endif /* _PRINTF_ARGS_H */ diff --git a/lib/printf-frexp.c b/lib/printf-frexp.c new file mode 100644 index 00000000..014c8539 --- /dev/null +++ b/lib/printf-frexp.c @@ -0,0 +1,188 @@ +/* Split a double into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#ifdef USE_LONG_DOUBLE +# include "printf-frexpl.h" +#else +# include "printf-frexp.h" +#endif + +#include +#include +#ifdef USE_LONG_DOUBLE +# include "fpucw.h" +#endif + +/* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater + than 2, or not even a power of 2, some rounding errors can occur, so that + then the returned mantissa is only guaranteed to be <= 2.0, not < 2.0. */ + +#ifdef USE_LONG_DOUBLE +# define FUNC printf_frexpl +# define DOUBLE long double +# define MIN_EXP LDBL_MIN_EXP +# if HAVE_FREXPL_IN_LIBC && HAVE_LDEXPL_IN_LIBC +# define USE_FREXP_LDEXP +# define FREXP frexpl +# define LDEXP ldexpl +# endif +# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING +# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () +# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () +# define L_(literal) literal##L +#else +# define FUNC printf_frexp +# define DOUBLE double +# define MIN_EXP DBL_MIN_EXP +# if HAVE_FREXP_IN_LIBC && HAVE_LDEXP_IN_LIBC +# define USE_FREXP_LDEXP +# define FREXP frexp +# define LDEXP ldexp +# endif +# define DECL_ROUNDING +# define BEGIN_ROUNDING() +# define END_ROUNDING() +# define L_(literal) literal +#endif + +DOUBLE +FUNC (DOUBLE x, int *expptr) +{ + int exponent; + DECL_ROUNDING + + BEGIN_ROUNDING (); + +#ifdef USE_FREXP_LDEXP + /* frexp and ldexp are usually faster than the loop below. */ + x = FREXP (x, &exponent); + + x = x + x; + exponent -= 1; + + if (exponent < MIN_EXP - 1) + { + x = LDEXP (x, exponent - (MIN_EXP - 1)); + exponent = MIN_EXP - 1; + } +#else + { + /* Since the exponent is an 'int', it fits in 64 bits. Therefore the + loops are executed no more than 64 times. */ + DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ + DOUBLE powh[64]; /* powh[i] = 2^-2^i */ + int i; + + exponent = 0; + if (x >= L_(1.0)) + { + /* A nonnegative exponent. */ + { + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x >= 1.0. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (x >= pow2_i) + { + exponent += (1 << i); + x *= powh_i; + } + else + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + } + /* Here 1.0 <= x < 2^2^i. */ + } + else + { + /* A negative exponent. */ + { + DOUBLE pow2_i; /* = pow2[i] */ + DOUBLE powh_i; /* = powh[i] */ + + /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, + x * 2^exponent = argument, x < 1.0, exponent >= MIN_EXP - 1. */ + for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); + ; + i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) + { + if (exponent - (1 << i) < MIN_EXP - 1) + break; + + exponent -= (1 << i); + x *= pow2_i; + if (x >= L_(1.0)) + break; + + pow2[i] = pow2_i; + powh[i] = powh_i; + } + } + /* Here either x < 1.0 and exponent - 2^i < MIN_EXP - 1 <= exponent, + or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ + + if (x < L_(1.0)) + /* Invariants: x * 2^exponent = argument, x < 1.0 and + exponent - 2^i < MIN_EXP - 1 <= exponent. */ + while (i > 0) + { + i--; + if (exponent - (1 << i) >= MIN_EXP - 1) + { + exponent -= (1 << i); + x *= pow2[i]; + if (x >= L_(1.0)) + break; + } + } + + /* Here either x < 1.0 and exponent = MIN_EXP - 1, + or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ + } + + /* Invariants: x * 2^exponent = argument, and + either x < 1.0 and exponent = MIN_EXP - 1, + or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ + while (i > 0) + { + i--; + if (x >= pow2[i]) + { + exponent += (1 << i); + x *= powh[i]; + } + } + /* Here either x < 1.0 and exponent = MIN_EXP - 1, + or 1.0 <= x < 2.0 and exponent >= MIN_EXP - 1. */ + } +#endif + + END_ROUNDING (); + + *expptr = exponent; + return x; +} diff --git a/lib/printf-frexp.h b/lib/printf-frexp.h new file mode 100644 index 00000000..197898d7 --- /dev/null +++ b/lib/printf-frexp.h @@ -0,0 +1,23 @@ +/* Split a double into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Write a finite, positive number x as + x = mantissa * 2^exp + where exp >= DBL_MIN_EXP - 1, + mantissa < 2.0, + if x is not a denormalized number then mantissa >= 1.0. + Store exp in *EXPPTR and return mantissa. */ +extern double printf_frexp (double x, int *expptr); diff --git a/lib/printf-frexpl.c b/lib/printf-frexpl.c new file mode 100644 index 00000000..864b2152 --- /dev/null +++ b/lib/printf-frexpl.c @@ -0,0 +1,18 @@ +/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#define USE_LONG_DOUBLE +#include "printf-frexp.c" diff --git a/lib/printf-frexpl.h b/lib/printf-frexpl.h new file mode 100644 index 00000000..718093d3 --- /dev/null +++ b/lib/printf-frexpl.h @@ -0,0 +1,23 @@ +/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Write a finite, positive number x as + x = mantissa * 2^exp + where exp >= LDBL_MIN_EXP - 1, + mantissa < 2.0, + if x is not a denormalized number then mantissa >= 1.0. + Store exp in *EXPPTR and return mantissa. */ +extern long double printf_frexpl (long double x, int *expptr); diff --git a/lib/printf-parse.c b/lib/printf-parse.c new file mode 100644 index 00000000..85c454b2 --- /dev/null +++ b/lib/printf-parse.c @@ -0,0 +1,627 @@ +/* Formatted output to strings. + Copyright (C) 1999-2000, 2002-2003, 2006-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* This file can be parametrized with the following macros: + CHAR_T The element type of the format string. + CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters + in the format string are ASCII. + DIRECTIVE Structure denoting a format directive. + Depends on CHAR_T. + DIRECTIVES Structure denoting the set of format directives of a + format string. Depends on CHAR_T. + PRINTF_PARSE Function that parses a format string. + Depends on CHAR_T. + STATIC Set to 'static' to declare the function static. + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ + +#ifndef PRINTF_PARSE +# include +#endif + +/* Specification. */ +#ifndef PRINTF_PARSE +# include "printf-parse.h" +#endif + +/* Default parameters. */ +#ifndef PRINTF_PARSE +# define PRINTF_PARSE printf_parse +# define CHAR_T char +# define DIRECTIVE char_directive +# define DIRECTIVES char_directives +#endif + +/* Get size_t, NULL. */ +#include + +/* Get intmax_t. */ +#if defined IN_LIBINTL || defined IN_LIBASPRINTF +# if HAVE_STDINT_H_WITH_UINTMAX +# include +# endif +# if HAVE_INTTYPES_H_WITH_UINTMAX +# include +# endif +#else +# include +#endif + +/* malloc(), realloc(), free(). */ +#include + +/* errno. */ +#include + +/* Checked size_t computations. */ +#include "xsize.h" + +#if CHAR_T_ONLY_ASCII +/* c_isascii(). */ +# include "c-ctype.h" +#endif + +#ifdef STATIC +STATIC +#endif +int +PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) +{ + const CHAR_T *cp = format; /* pointer into format */ + size_t arg_posn = 0; /* number of regular arguments consumed */ + size_t d_allocated; /* allocated elements of d->dir */ + size_t a_allocated; /* allocated elements of a->arg */ + size_t max_width_length = 0; + size_t max_precision_length = 0; + + d->count = 0; + d_allocated = 1; + d->dir = (DIRECTIVE *) malloc (d_allocated * sizeof (DIRECTIVE)); + if (d->dir == NULL) + /* Out of memory. */ + goto out_of_memory_1; + + a->count = 0; + a_allocated = 0; + a->arg = NULL; + +#define REGISTER_ARG(_index_,_type_) \ + { \ + size_t n = (_index_); \ + if (n >= a_allocated) \ + { \ + size_t memory_size; \ + argument *memory; \ + \ + a_allocated = xtimes (a_allocated, 2); \ + if (a_allocated <= n) \ + a_allocated = xsum (n, 1); \ + memory_size = xtimes (a_allocated, sizeof (argument)); \ + if (size_overflow_p (memory_size)) \ + /* Overflow, would lead to out of memory. */ \ + goto out_of_memory; \ + memory = (argument *) (a->arg \ + ? realloc (a->arg, memory_size) \ + : malloc (memory_size)); \ + if (memory == NULL) \ + /* Out of memory. */ \ + goto out_of_memory; \ + a->arg = memory; \ + } \ + while (a->count <= n) \ + a->arg[a->count++].type = TYPE_NONE; \ + if (a->arg[n].type == TYPE_NONE) \ + a->arg[n].type = (_type_); \ + else if (a->arg[n].type != (_type_)) \ + /* Ambiguous type for positional argument. */ \ + goto error; \ + } + + while (*cp != '\0') + { + CHAR_T c = *cp++; + if (c == '%') + { + size_t arg_index = ARG_NONE; + DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ + + /* Initialize the next directive. */ + dp->dir_start = cp - 1; + dp->flags = 0; + dp->width_start = NULL; + dp->width_end = NULL; + dp->width_arg_index = ARG_NONE; + dp->precision_start = NULL; + dp->precision_end = NULL; + dp->precision_arg_index = ARG_NONE; + dp->arg_index = ARG_NONE; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory later. */ + goto error; + arg_index = n - 1; + cp = np + 1; + } + } + + /* Read the flags. */ + for (;;) + { + if (*cp == '\'') + { + dp->flags |= FLAG_GROUP; + cp++; + } + else if (*cp == '-') + { + dp->flags |= FLAG_LEFT; + cp++; + } + else if (*cp == '+') + { + dp->flags |= FLAG_SHOWSIGN; + cp++; + } + else if (*cp == ' ') + { + dp->flags |= FLAG_SPACE; + cp++; + } + else if (*cp == '#') + { + dp->flags |= FLAG_ALT; + cp++; + } + else if (*cp == '0') + { + dp->flags |= FLAG_ZERO; + cp++; + } + else + break; + } + + /* Parse the field width. */ + if (*cp == '*') + { + dp->width_start = cp; + cp++; + dp->width_end = cp; + if (max_width_length < 1) + max_width_length = 1; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory later. */ + goto error; + dp->width_arg_index = n - 1; + cp = np + 1; + } + } + if (dp->width_arg_index == ARG_NONE) + { + dp->width_arg_index = arg_posn++; + if (dp->width_arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->width_arg_index, TYPE_INT); + } + else if (*cp >= '0' && *cp <= '9') + { + size_t width_length; + + dp->width_start = cp; + for (; *cp >= '0' && *cp <= '9'; cp++) + ; + dp->width_end = cp; + width_length = dp->width_end - dp->width_start; + if (max_width_length < width_length) + max_width_length = width_length; + } + + /* Parse the precision. */ + if (*cp == '.') + { + cp++; + if (*cp == '*') + { + dp->precision_start = cp - 1; + cp++; + dp->precision_end = cp; + if (max_precision_length < 2) + max_precision_length = 2; + + /* Test for positional argument. */ + if (*cp >= '0' && *cp <= '9') + { + const CHAR_T *np; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + ; + if (*np == '$') + { + size_t n = 0; + + for (np = cp; *np >= '0' && *np <= '9'; np++) + n = xsum (xtimes (n, 10), *np - '0'); + if (n == 0) + /* Positional argument 0. */ + goto error; + if (size_overflow_p (n)) + /* n too large, would lead to out of memory + later. */ + goto error; + dp->precision_arg_index = n - 1; + cp = np + 1; + } + } + if (dp->precision_arg_index == ARG_NONE) + { + dp->precision_arg_index = arg_posn++; + if (dp->precision_arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->precision_arg_index, TYPE_INT); + } + else + { + size_t precision_length; + + dp->precision_start = cp - 1; + for (; *cp >= '0' && *cp <= '9'; cp++) + ; + dp->precision_end = cp; + precision_length = dp->precision_end - dp->precision_start; + if (max_precision_length < precision_length) + max_precision_length = precision_length; + } + } + + { + arg_type type; + + /* Parse argument type/size specifiers. */ + { + int flags = 0; + + for (;;) + { + if (*cp == 'h') + { + flags |= (1 << (flags & 1)); + cp++; + } + else if (*cp == 'L') + { + flags |= 4; + cp++; + } + else if (*cp == 'l') + { + flags += 8; + cp++; + } + else if (*cp == 'j') + { + if (sizeof (intmax_t) > sizeof (long)) + { + /* intmax_t = long long */ + flags += 16; + } + else if (sizeof (intmax_t) > sizeof (int)) + { + /* intmax_t = long */ + flags += 8; + } + cp++; + } + else if (*cp == 'z' || *cp == 'Z') + { + /* 'z' is standardized in ISO C 99, but glibc uses 'Z' + because the warning facility in gcc-2.95.2 understands + only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ + if (sizeof (size_t) > sizeof (long)) + { + /* size_t = long long */ + flags += 16; + } + else if (sizeof (size_t) > sizeof (int)) + { + /* size_t = long */ + flags += 8; + } + cp++; + } + else if (*cp == 't') + { + if (sizeof (ptrdiff_t) > sizeof (long)) + { + /* ptrdiff_t = long long */ + flags += 16; + } + else if (sizeof (ptrdiff_t) > sizeof (int)) + { + /* ptrdiff_t = long */ + flags += 8; + } + cp++; + } +#if defined __APPLE__ && defined __MACH__ + /* On MacOS X 10.3, PRIdMAX is defined as "qd". + We cannot change it to "lld" because PRIdMAX must also + be understood by the system's printf routines. */ + else if (*cp == 'q') + { + if (64 / 8 > sizeof (long)) + { + /* int64_t = long long */ + flags += 16; + } + else + { + /* int64_t = long */ + flags += 8; + } + cp++; + } +#endif +#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + /* On native Win32, PRIdMAX is defined as "I64d". + We cannot change it to "lld" because PRIdMAX must also + be understood by the system's printf routines. */ + else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') + { + if (64 / 8 > sizeof (long)) + { + /* __int64 = long long */ + flags += 16; + } + else + { + /* __int64 = long */ + flags += 8; + } + cp += 3; + } +#endif + else + break; + } + + /* Read the conversion character. */ + c = *cp++; + switch (c) + { + case 'd': case 'i': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_LONGLONGINT; + else +#endif + /* If 'long long' exists and is the same as 'long', we parse + "lld" into TYPE_LONGINT. */ + if (flags >= 8) + type = TYPE_LONGINT; + else if (flags & 2) + type = TYPE_SCHAR; + else if (flags & 1) + type = TYPE_SHORT; + else + type = TYPE_INT; + break; + case 'o': case 'u': case 'x': case 'X': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_ULONGLONGINT; + else +#endif + /* If 'unsigned long long' exists and is the same as + 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ + if (flags >= 8) + type = TYPE_ULONGINT; + else if (flags & 2) + type = TYPE_UCHAR; + else if (flags & 1) + type = TYPE_USHORT; + else + type = TYPE_UINT; + break; + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': + case 'a': case 'A': + if (flags >= 16 || (flags & 4)) + type = TYPE_LONGDOUBLE; + else + type = TYPE_DOUBLE; + break; + case 'c': + if (flags >= 8) +#if HAVE_WINT_T + type = TYPE_WIDE_CHAR; +#else + goto error; +#endif + else + type = TYPE_CHAR; + break; +#if HAVE_WINT_T + case 'C': + type = TYPE_WIDE_CHAR; + c = 'c'; + break; +#endif + case 's': + if (flags >= 8) +#if HAVE_WCHAR_T + type = TYPE_WIDE_STRING; +#else + goto error; +#endif + else + type = TYPE_STRING; + break; +#if HAVE_WCHAR_T + case 'S': + type = TYPE_WIDE_STRING; + c = 's'; + break; +#endif + case 'p': + type = TYPE_POINTER; + break; + case 'n': +#if HAVE_LONG_LONG_INT + /* If 'long long' exists and is larger than 'long': */ + if (flags >= 16 || (flags & 4)) + type = TYPE_COUNT_LONGLONGINT_POINTER; + else +#endif + /* If 'long long' exists and is the same as 'long', we parse + "lln" into TYPE_COUNT_LONGINT_POINTER. */ + if (flags >= 8) + type = TYPE_COUNT_LONGINT_POINTER; + else if (flags & 2) + type = TYPE_COUNT_SCHAR_POINTER; + else if (flags & 1) + type = TYPE_COUNT_SHORT_POINTER; + else + type = TYPE_COUNT_INT_POINTER; + break; +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + case 'U': + if (flags >= 16) + type = TYPE_U32_STRING; + else if (flags >= 8) + type = TYPE_U16_STRING; + else + type = TYPE_U8_STRING; + break; +#endif + case '%': + type = TYPE_NONE; + break; + default: + /* Unknown conversion character. */ + goto error; + } + } + + if (type != TYPE_NONE) + { + dp->arg_index = arg_index; + if (dp->arg_index == ARG_NONE) + { + dp->arg_index = arg_posn++; + if (dp->arg_index == ARG_NONE) + /* arg_posn wrapped around. */ + goto error; + } + REGISTER_ARG (dp->arg_index, type); + } + dp->conversion = c; + dp->dir_end = cp; + } + + d->count++; + if (d->count >= d_allocated) + { + size_t memory_size; + DIRECTIVE *memory; + + d_allocated = xtimes (d_allocated, 2); + memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); + if (size_overflow_p (memory_size)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + memory = (DIRECTIVE *) realloc (d->dir, memory_size); + if (memory == NULL) + /* Out of memory. */ + goto out_of_memory; + d->dir = memory; + } + } +#if CHAR_T_ONLY_ASCII + else if (!c_isascii (c)) + { + /* Non-ASCII character. Not supported. */ + goto error; + } +#endif + } + d->dir[d->count].dir_start = cp; + + d->max_width_length = max_width_length; + d->max_precision_length = max_precision_length; + return 0; + +error: + if (a->arg) + free (a->arg); + if (d->dir) + free (d->dir); + errno = EINVAL; + return -1; + +out_of_memory: + if (a->arg) + free (a->arg); + if (d->dir) + free (d->dir); +out_of_memory_1: + errno = ENOMEM; + return -1; +} + +#undef PRINTF_PARSE +#undef DIRECTIVES +#undef DIRECTIVE +#undef CHAR_T_ONLY_ASCII +#undef CHAR_T diff --git a/lib/printf-parse.h b/lib/printf-parse.h new file mode 100644 index 00000000..0a496cbd --- /dev/null +++ b/lib/printf-parse.h @@ -0,0 +1,179 @@ +/* Parse printf format string. + Copyright (C) 1999, 2002-2003, 2005, 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _PRINTF_PARSE_H +#define _PRINTF_PARSE_H + +/* This file can be parametrized with the following macros: + ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. + STATIC Set to 'static' to declare the function static. */ + +#include "printf-args.h" + + +/* Flags */ +#define FLAG_GROUP 1 /* ' flag */ +#define FLAG_LEFT 2 /* - flag */ +#define FLAG_SHOWSIGN 4 /* + flag */ +#define FLAG_SPACE 8 /* space flag */ +#define FLAG_ALT 16 /* # flag */ +#define FLAG_ZERO 32 + +/* arg_index value indicating that no argument is consumed. */ +#define ARG_NONE (~(size_t)0) + +/* xxx_directive: A parsed directive. + xxx_directives: A parsed format string. */ + +/* A parsed directive. */ +typedef struct +{ + const char* dir_start; + const char* dir_end; + int flags; + const char* width_start; + const char* width_end; + size_t width_arg_index; + const char* precision_start; + const char* precision_end; + size_t precision_arg_index; + char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +char_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + char_directive *dir; + size_t max_width_length; + size_t max_precision_length; +} +char_directives; + +#if ENABLE_UNISTDIO + +/* A parsed directive. */ +typedef struct +{ + const uint8_t* dir_start; + const uint8_t* dir_end; + int flags; + const uint8_t* width_start; + const uint8_t* width_end; + size_t width_arg_index; + const uint8_t* precision_start; + const uint8_t* precision_end; + size_t precision_arg_index; + uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u8_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u8_directive *dir; + size_t max_width_length; + size_t max_precision_length; +} +u8_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint16_t* dir_start; + const uint16_t* dir_end; + int flags; + const uint16_t* width_start; + const uint16_t* width_end; + size_t width_arg_index; + const uint16_t* precision_start; + const uint16_t* precision_end; + size_t precision_arg_index; + uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u16_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u16_directive *dir; + size_t max_width_length; + size_t max_precision_length; +} +u16_directives; + +/* A parsed directive. */ +typedef struct +{ + const uint32_t* dir_start; + const uint32_t* dir_end; + int flags; + const uint32_t* width_start; + const uint32_t* width_end; + size_t width_arg_index; + const uint32_t* precision_start; + const uint32_t* precision_end; + size_t precision_arg_index; + uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ + size_t arg_index; +} +u32_directive; + +/* A parsed format string. */ +typedef struct +{ + size_t count; + u32_directive *dir; + size_t max_width_length; + size_t max_precision_length; +} +u32_directives; + +#endif + + +/* Parses the format string. Fills in the number N of directives, and fills + in directives[0], ..., directives[N-1], and sets directives[N].dir_start + to the end of the format string. Also fills in the arg_type fields of the + arguments and the needed count of arguments. */ +#if ENABLE_UNISTDIO +extern int + ulc_printf_parse (const char *format, char_directives *d, arguments *a); +extern int + u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); +extern int + u16_printf_parse (const uint16_t *format, u16_directives *d, + arguments *a); +extern int + u32_printf_parse (const uint32_t *format, u32_directives *d, + arguments *a); +#else +# ifdef STATIC +STATIC +# else +extern +# endif +int printf_parse (const char *format, char_directives *d, arguments *a); +#endif + +#endif /* _PRINTF_PARSE_H */ diff --git a/lib/ref-add.sin b/lib/ref-add.sin new file mode 100644 index 00000000..3acdcc84 --- /dev/null +++ b/lib/ref-add.sin @@ -0,0 +1,30 @@ +# Add this package to a list of references stored in a text file. +# +# Copyright (C) 2000 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License along +# with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# Written by Bruno Haible . +# +/^# Packages using this file: / { + s/# Packages using this file:// + ta + :a + s/ @PACKAGE@ / @PACKAGE@ / + tb + s/ $/ @PACKAGE@ / + :b + s/^/# Packages using this file:/ +} diff --git a/lib/ref-del.sin b/lib/ref-del.sin new file mode 100644 index 00000000..7923d062 --- /dev/null +++ b/lib/ref-del.sin @@ -0,0 +1,25 @@ +# Remove this package from a list of references stored in a text file. +# +# Copyright (C) 2000 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License along +# with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# Written by Bruno Haible . +# +/^# Packages using this file: / { + s/# Packages using this file:// + s/ @PACKAGE@ / / + s/^/# Packages using this file:/ +} diff --git a/lib/relocatable.c b/lib/relocatable.c new file mode 100644 index 00000000..09ff8c9e --- /dev/null +++ b/lib/relocatable.c @@ -0,0 +1,493 @@ +/* Provide relocatable packages. + Copyright (C) 2003-2006, 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA. */ + + +/* Tell glibc's to provide a prototype for getline(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include + +/* Specification. */ +#include "relocatable.h" + +#if ENABLE_RELOCATABLE + +#include +#include +#include +#include + +#ifdef NO_XMALLOC +# define xmalloc malloc +#else +# include "xalloc.h" +#endif + +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include +#endif + +#if DEPENDS_ON_LIBCHARSET +# include +#endif +#if DEPENDS_ON_LIBICONV && HAVE_ICONV +# include +#endif +#if DEPENDS_ON_LIBINTL && ENABLE_NLS +# include +#endif + +/* Faked cheap 'bool'. */ +#undef bool +#undef false +#undef true +#define bool int +#define false 0 +#define true 1 + +/* Pathname support. + ISSLASH(C) tests whether C is a directory separator character. + IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. + */ +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Win32, Cygwin, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +# define HAS_DEVICE(P) \ + ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ + && (P)[1] == ':') +# define IS_PATH_WITH_DIR(P) \ + (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) +# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) +#else + /* Unix */ +# define ISSLASH(C) ((C) == '/') +# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) +# define FILE_SYSTEM_PREFIX_LEN(P) 0 +#endif + +/* Original installation prefix. */ +static char *orig_prefix; +static size_t orig_prefix_len; +/* Current installation prefix. */ +static char *curr_prefix; +static size_t curr_prefix_len; +/* These prefixes do not end in a slash. Anything that will be concatenated + to them must start with a slash. */ + +/* Sets the original and the current installation prefix of this module. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +static void +set_this_relocation_prefix (const char *orig_prefix_arg, + const char *curr_prefix_arg) +{ + if (orig_prefix_arg != NULL && curr_prefix_arg != NULL + /* Optimization: if orig_prefix and curr_prefix are equal, the + relocation is a nop. */ + && strcmp (orig_prefix_arg, curr_prefix_arg) != 0) + { + /* Duplicate the argument strings. */ + char *memory; + + orig_prefix_len = strlen (orig_prefix_arg); + curr_prefix_len = strlen (curr_prefix_arg); + memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1); +#ifdef NO_XMALLOC + if (memory != NULL) +#endif + { + memcpy (memory, orig_prefix_arg, orig_prefix_len + 1); + orig_prefix = memory; + memory += orig_prefix_len + 1; + memcpy (memory, curr_prefix_arg, curr_prefix_len + 1); + curr_prefix = memory; + return; + } + } + orig_prefix = NULL; + curr_prefix = NULL; + /* Don't worry about wasted memory here - this function is usually only + called once. */ +} + +/* Sets the original and the current installation prefix of the package. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +void +set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) +{ + set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg); + + /* Now notify all dependent libraries. */ +#if DEPENDS_ON_LIBCHARSET + libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); +#endif +#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109 + libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); +#endif +#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix + libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); +#endif +} + +#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR) + +/* Convenience function: + Computes the current installation prefix, based on the original + installation prefix, the original installation directory of a particular + file, and the current pathname of this file. + Returns it, freshly allocated. Returns NULL upon failure. */ +#ifdef IN_LIBRARY +#define compute_curr_prefix local_compute_curr_prefix +static +#endif +char * +compute_curr_prefix (const char *orig_installprefix, + const char *orig_installdir, + const char *curr_pathname) +{ + char *curr_installdir; + const char *rel_installdir; + + if (curr_pathname == NULL) + return NULL; + + /* Determine the relative installation directory, relative to the prefix. + This is simply the difference between orig_installprefix and + orig_installdir. */ + if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix)) + != 0) + /* Shouldn't happen - nothing should be installed outside $(prefix). */ + return NULL; + rel_installdir = orig_installdir + strlen (orig_installprefix); + + /* Determine the current installation directory. */ + { + const char *p_base = curr_pathname + FILE_SYSTEM_PREFIX_LEN (curr_pathname); + const char *p = curr_pathname + strlen (curr_pathname); + char *q; + + while (p > p_base) + { + p--; + if (ISSLASH (*p)) + break; + } + + q = (char *) xmalloc (p - curr_pathname + 1); +#ifdef NO_XMALLOC + if (q == NULL) + return NULL; +#endif + memcpy (q, curr_pathname, p - curr_pathname); + q[p - curr_pathname] = '\0'; + curr_installdir = q; + } + + /* Compute the current installation prefix by removing the trailing + rel_installdir from it. */ + { + const char *rp = rel_installdir + strlen (rel_installdir); + const char *cp = curr_installdir + strlen (curr_installdir); + const char *cp_base = + curr_installdir + FILE_SYSTEM_PREFIX_LEN (curr_installdir); + + while (rp > rel_installdir && cp > cp_base) + { + bool same = false; + const char *rpi = rp; + const char *cpi = cp; + + while (rpi > rel_installdir && cpi > cp_base) + { + rpi--; + cpi--; + if (ISSLASH (*rpi) || ISSLASH (*cpi)) + { + if (ISSLASH (*rpi) && ISSLASH (*cpi)) + same = true; + break; + } + /* Do case-insensitive comparison if the filesystem is always or + often case-insensitive. It's better to accept the comparison + if the difference is only in case, rather than to fail. */ +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Win32, Cygwin, OS/2, DOS - case insignificant filesystem */ + if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi) + != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi)) + break; +#else + if (*rpi != *cpi) + break; +#endif + } + if (!same) + break; + /* The last pathname component was the same. opi and cpi now point + to the slash before it. */ + rp = rpi; + cp = cpi; + } + + if (rp > rel_installdir) + { + /* Unexpected: The curr_installdir does not end with rel_installdir. */ + free (curr_installdir); + return NULL; + } + + { + size_t curr_prefix_len = cp - curr_installdir; + char *curr_prefix; + + curr_prefix = (char *) xmalloc (curr_prefix_len + 1); +#ifdef NO_XMALLOC + if (curr_prefix == NULL) + { + free (curr_installdir); + return NULL; + } +#endif + memcpy (curr_prefix, curr_installdir, curr_prefix_len); + curr_prefix[curr_prefix_len] = '\0'; + + free (curr_installdir); + + return curr_prefix; + } + } +} + +#endif /* !IN_LIBRARY || PIC */ + +#if defined PIC && defined INSTALLDIR + +/* Full pathname of shared library, or NULL. */ +static char *shared_library_fullname; + +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ + +/* Determine the full pathname of the shared library when it is loaded. */ + +BOOL WINAPI +DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved) +{ + (void) reserved; + + if (event == DLL_PROCESS_ATTACH) + { + /* The DLL is being loaded into an application's address range. */ + static char location[MAX_PATH]; + + if (!GetModuleFileName (module_handle, location, sizeof (location))) + /* Shouldn't happen. */ + return FALSE; + + if (!IS_PATH_WITH_DIR (location)) + /* Shouldn't happen. */ + return FALSE; + + { +#if defined __CYGWIN__ + /* On Cygwin, we need to convert paths coming from Win32 system calls + to the Unix-like slashified notation. */ + static char location_as_posix_path[2 * MAX_PATH]; + /* There's no error return defined for cygwin_conv_to_posix_path. + See cygwin-api/func-cygwin-conv-to-posix-path.html. + Does it overflow the buffer of expected size MAX_PATH or does it + truncate the path? I don't know. Let's catch both. */ + cygwin_conv_to_posix_path (location, location_as_posix_path); + location_as_posix_path[MAX_PATH - 1] = '\0'; + if (strlen (location_as_posix_path) >= MAX_PATH - 1) + /* A sign of buffer overflow or path truncation. */ + return FALSE; + shared_library_fullname = strdup (location_as_posix_path); +#else + shared_library_fullname = strdup (location); +#endif + } + } + + return TRUE; +} + +#else /* Unix except Cygwin */ + +static void +find_shared_library_fullname () +{ +#if defined __linux__ && __GLIBC__ >= 2 + /* Linux has /proc/self/maps. glibc 2 has the getline() function. */ + FILE *fp; + + /* Open the current process' maps file. It describes one VMA per line. */ + fp = fopen ("/proc/self/maps", "r"); + if (fp) + { + unsigned long address = (unsigned long) &find_shared_library_fullname; + for (;;) + { + unsigned long start, end; + int c; + + if (fscanf (fp, "%lx-%lx", &start, &end) != 2) + break; + if (address >= start && address <= end - 1) + { + /* Found it. Now see if this line contains a filename. */ + while (c = getc (fp), c != EOF && c != '\n' && c != '/') + continue; + if (c == '/') + { + size_t size; + int len; + + ungetc (c, fp); + shared_library_fullname = NULL; size = 0; + len = getline (&shared_library_fullname, &size, fp); + if (len >= 0) + { + /* Success: filled shared_library_fullname. */ + if (len > 0 && shared_library_fullname[len - 1] == '\n') + shared_library_fullname[len - 1] = '\0'; + } + } + break; + } + while (c = getc (fp), c != EOF && c != '\n') + continue; + } + fclose (fp); + } +#endif +} + +#endif /* (WIN32 or Cygwin) / (Unix except Cygwin) */ + +/* Return the full pathname of the current shared library. + Return NULL if unknown. + Guaranteed to work only on Linux, Cygwin and Woe32. */ +static char * +get_shared_library_fullname () +{ +#if !(defined _WIN32 || defined __WIN32__ || defined __CYGWIN__) + static bool tried_find_shared_library_fullname; + if (!tried_find_shared_library_fullname) + { + find_shared_library_fullname (); + tried_find_shared_library_fullname = true; + } +#endif + return shared_library_fullname; +} + +#endif /* PIC */ + +/* Returns the pathname, relocated according to the current installation + directory. + The returned string is either PATHNAME unmodified or a freshly allocated + string that you can free with free() after casting it to 'char *'. */ +const char * +relocate (const char *pathname) +{ +#if defined PIC && defined INSTALLDIR + static int initialized; + + /* Initialization code for a shared library. */ + if (!initialized) + { + /* At this point, orig_prefix and curr_prefix likely have already been + set through the main program's set_program_name_and_installdir + function. This is sufficient in the case that the library has + initially been installed in the same orig_prefix. But we can do + better, to also cover the cases that 1. it has been installed + in a different prefix before being moved to orig_prefix and (later) + to curr_prefix, 2. unlike the program, it has not moved away from + orig_prefix. */ + const char *orig_installprefix = INSTALLPREFIX; + const char *orig_installdir = INSTALLDIR; + char *curr_prefix_better; + + curr_prefix_better = + compute_curr_prefix (orig_installprefix, orig_installdir, + get_shared_library_fullname ()); + + set_relocation_prefix (orig_installprefix, + curr_prefix_better != NULL + ? curr_prefix_better + : curr_prefix); + + if (curr_prefix_better != NULL) + free (curr_prefix_better); + + initialized = 1; + } +#endif + + /* Note: It is not necessary to perform case insensitive comparison here, + even for DOS-like filesystems, because the pathname argument was + typically created from the same Makefile variable as orig_prefix came + from. */ + if (orig_prefix != NULL && curr_prefix != NULL + && strncmp (pathname, orig_prefix, orig_prefix_len) == 0) + { + if (pathname[orig_prefix_len] == '\0') + { + /* pathname equals orig_prefix. */ + char *result = (char *) xmalloc (strlen (curr_prefix) + 1); + +#ifdef NO_XMALLOC + if (result != NULL) +#endif + { + strcpy (result, curr_prefix); + return result; + } + } + else if (ISSLASH (pathname[orig_prefix_len])) + { + /* pathname starts with orig_prefix. */ + const char *pathname_tail = &pathname[orig_prefix_len]; + char *result = + (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1); + +#ifdef NO_XMALLOC + if (result != NULL) +#endif + { + memcpy (result, curr_prefix, curr_prefix_len); + strcpy (result + curr_prefix_len, pathname_tail); + return result; + } + } + } + /* Nothing to relocate. */ + return pathname; +} + +#endif diff --git a/lib/relocatable.h b/lib/relocatable.h new file mode 100644 index 00000000..5dfd7108 --- /dev/null +++ b/lib/relocatable.h @@ -0,0 +1,83 @@ +/* Provide relocatable packages. + Copyright (C) 2003, 2005, 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2003. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, + USA. */ + +#ifndef _RELOCATABLE_H +#define _RELOCATABLE_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/* This can be enabled through the configure --enable-relocatable option. */ +#if ENABLE_RELOCATABLE + +/* When building a DLL, we must export some functions. Note that because + this is a private .h file, we don't need to use __declspec(dllimport) + in any case. */ +#if HAVE_VISIBILITY && BUILDING_DLL +# define RELOCATABLE_DLL_EXPORTED __attribute__((__visibility__("default"))) +#elif defined _MSC_VER && BUILDING_DLL +# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport) +#else +# define RELOCATABLE_DLL_EXPORTED +#endif + +/* Sets the original and the current installation prefix of the package. + Relocation simply replaces a pathname starting with the original prefix + by the corresponding pathname with the current prefix instead. Both + prefixes should be directory names without trailing slash (i.e. use "" + instead of "/"). */ +extern RELOCATABLE_DLL_EXPORTED void + set_relocation_prefix (const char *orig_prefix, + const char *curr_prefix); + +/* Returns the pathname, relocated according to the current installation + directory. + The returned string is either PATHNAME unmodified or a freshly allocated + string that you can free with free() after casting it to 'char *'. */ +extern const char * relocate (const char *pathname); + +/* Memory management: relocate() potentially allocates memory, because it has + to construct a fresh pathname. If this is a problem because your program + calls relocate() frequently, think about caching the result. Or free the + return value if it was different from the argument pathname. */ + +/* Convenience function: + Computes the current installation prefix, based on the original + installation prefix, the original installation directory of a particular + file, and the current pathname of this file. + Returns it, freshly allocated. Returns NULL upon failure. */ +extern char * compute_curr_prefix (const char *orig_installprefix, + const char *orig_installdir, + const char *curr_pathname); + +#else + +/* By default, we use the hardwired pathnames. */ +#define relocate(pathname) (pathname) + +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _RELOCATABLE_H */ diff --git a/lib/signbitd.c b/lib/signbitd.c new file mode 100644 index 00000000..8d082b6c --- /dev/null +++ b/lib/signbitd.c @@ -0,0 +1,64 @@ +/* signbit() macro: Determine the sign bit of a floating-point number. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include "isnand-nolibm.h" +#include "float+.h" + +#ifdef gl_signbitd_OPTIMIZED_MACRO +# undef gl_signbitd +#endif + +int +gl_signbitd (double arg) +{ +#if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT + /* The use of a union to extract the bits of the representation of a + 'long double' is safe in practice, despite of the "aliasing rules" of + C99, because the GCC docs say + "Even with '-fstrict-aliasing', type-punning is allowed, provided the + memory is accessed through the union type." + and similarly for other compilers. */ +# define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { double value; unsigned int word[NWORDS]; } m; + m.value = arg; + return (m.word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; +#elif HAVE_COPYSIGN_IN_LIBC + return copysign (1.0, arg) < 0; +#else + /* This does not do the right thing for NaN, but this is irrelevant for + most use cases. */ + if (isnand (arg)) + return 0; + if (arg < 0.0) + return 1; + else if (arg == 0.0) + { + /* Distinguish 0.0 and -0.0. */ + static double plus_zero = 0.0; + double arg_mem = arg; + return (memcmp (&plus_zero, &arg_mem, SIZEOF_DBL) != 0); + } + else + return 0; +#endif +} diff --git a/lib/signbitf.c b/lib/signbitf.c new file mode 100644 index 00000000..e75f38c7 --- /dev/null +++ b/lib/signbitf.c @@ -0,0 +1,64 @@ +/* signbit() macro: Determine the sign bit of a floating-point number. + Copyright (C) 2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include "isnanf-nolibm.h" +#include "float+.h" + +#ifdef gl_signbitf_OPTIMIZED_MACRO +# undef gl_signbitf +#endif + +int +gl_signbitf (float arg) +{ +#if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT + /* The use of a union to extract the bits of the representation of a + 'long double' is safe in practice, despite of the "aliasing rules" of + C99, because the GCC docs say + "Even with '-fstrict-aliasing', type-punning is allowed, provided the + memory is accessed through the union type." + and similarly for other compilers. */ +# define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { float value; unsigned int word[NWORDS]; } m; + m.value = arg; + return (m.word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; +#elif HAVE_COPYSIGNF_IN_LIBC + return copysignf (1.0f, arg) < 0; +#else + /* This does not do the right thing for NaN, but this is irrelevant for + most use cases. */ + if (isnanf (arg)) + return 0; + if (arg < 0.0f) + return 1; + else if (arg == 0.0f) + { + /* Distinguish 0.0f and -0.0f. */ + static float plus_zero = 0.0f; + float arg_mem = arg; + return (memcmp (&plus_zero, &arg_mem, SIZEOF_FLT) != 0); + } + else + return 0; +#endif +} diff --git a/lib/signbitl.c b/lib/signbitl.c new file mode 100644 index 00000000..465937f9 --- /dev/null +++ b/lib/signbitl.c @@ -0,0 +1,64 @@ +/* signbit() macro: Determine the sign bit of a floating-point number. + Copyright (C) 2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include "isnanl-nolibm.h" +#include "float+.h" + +#ifdef gl_signbitl_OPTIMIZED_MACRO +# undef gl_signbitl +#endif + +int +gl_signbitl (long double arg) +{ +#if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT + /* The use of a union to extract the bits of the representation of a + 'long double' is safe in practice, despite of the "aliasing rules" of + C99, because the GCC docs say + "Even with '-fstrict-aliasing', type-punning is allowed, provided the + memory is accessed through the union type." + and similarly for other compilers. */ +# define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + union { long double value; unsigned int word[NWORDS]; } m; + m.value = arg; + return (m.word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; +#elif HAVE_COPYSIGNL_IN_LIBC + return copysignl (1.0L, arg) < 0; +#else + /* This does not do the right thing for NaN, but this is irrelevant for + most use cases. */ + if (isnanl (arg)) + return 0; + if (arg < 0.0L) + return 1; + else if (arg == 0.0L) + { + /* Distinguish 0.0L and -0.0L. */ + static long double plus_zero = 0.0L; + long double arg_mem = arg; + return (memcmp (&plus_zero, &arg_mem, SIZEOF_LDBL) != 0); + } + else + return 0; +#endif +} diff --git a/lib/size_max.h b/lib/size_max.h new file mode 100644 index 00000000..419d73a1 --- /dev/null +++ b/lib/size_max.h @@ -0,0 +1,31 @@ +/* size_max.h -- declare SIZE_MAX through system headers + Copyright (C) 2005-2006 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef GNULIB_SIZE_MAX_H +#define GNULIB_SIZE_MAX_H + +/* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ +# include +/* Get SIZE_MAX declaration on systems like glibc 2. */ +# if HAVE_STDINT_H +# include +# endif +/* On systems where these include files don't define it, SIZE_MAX is defined + in config.h. */ + +#endif /* GNULIB_SIZE_MAX_H */ diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h new file mode 100644 index 00000000..3390484f --- /dev/null +++ b/lib/stdbool.in.h @@ -0,0 +1,119 @@ +/* Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_STDBOOL_H +#define _GL_STDBOOL_H + +/* ISO C 99 for platforms that lack it. */ + +/* Usage suggestions: + + Programs that use should be aware of some limitations + and standards compliance issues. + + Standards compliance: + + - must be #included before 'bool', 'false', 'true' + can be used. + + - You cannot assume that sizeof (bool) == 1. + + - Programs should not undefine the macros bool, true, and false, + as C99 lists that as an "obsolescent feature". + + Limitations of this substitute, when used in a C89 environment: + + - must be #included before the '_Bool' type can be used. + + - You cannot assume that _Bool is a typedef; it might be a macro. + + - Bit-fields of type 'bool' are not supported. Portable code + should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. + + - In C99, casts and automatic conversions to '_Bool' or 'bool' are + performed in such a way that every nonzero value gets converted + to 'true', and zero gets converted to 'false'. This doesn't work + with this substitute. With this substitute, only the values 0 and 1 + give the expected result when converted to _Bool' or 'bool'. + + Also, it is suggested that programs use 'bool' rather than '_Bool'; + this isn't required, but 'bool' is more common. */ + + +/* 7.16. Boolean type and values */ + +/* BeOS already #defines false 0, true 1. We use the same + definitions below, but temporarily we have to #undef them. */ +#if defined __BEOS__ && !defined __HAIKU__ +# include /* defines bool but not _Bool */ +# undef false +# undef true +#endif + +/* For the sake of symbolic names in gdb, we define true and false as + enum constants, not only as macros. + It is tempting to write + typedef enum { false = 0, true = 1 } _Bool; + so that gdb prints values of type 'bool' symbolically. But if we do + this, values of type '_Bool' may promote to 'int' or 'unsigned int' + (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' + (see ISO C 99 6.3.1.1.(2)). So we add a negative value to the + enum; this ensures that '_Bool' promotes to 'int'. */ +#if defined __cplusplus || (defined __BEOS__ && !defined __HAIKU__) + /* A compiler known to have 'bool'. */ + /* If the compiler already has both 'bool' and '_Bool', we can assume they + are the same types. */ +# if !@HAVE__BOOL@ +typedef bool _Bool; +# endif +#else +# if !defined __GNUC__ + /* If @HAVE__BOOL@: + Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when + the built-in _Bool type is used. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + Similar bugs are likely with other compilers as well; this file + wouldn't be used if was working. + So we override the _Bool type. + If !@HAVE__BOOL@: + Need to define _Bool ourselves. As 'signed char' or as an enum type? + Use of a typedef, with SunPRO C, leads to a stupid + "warning: _Bool is a keyword in ISO C99". + Use of an enum type, with IRIX cc, leads to a stupid + "warning(1185): enumerated type mixed with another type". + Even the existence of an enum type, without a typedef, + "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. + The only benefit of the enum, debuggability, is not important + with these compilers. So use 'signed char' and no enum. */ +# define _Bool signed char +# else + /* With this compiler, trust the _Bool type if the compiler has it. */ +# if !@HAVE__BOOL@ +typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; +# endif +# endif +#endif +#define bool _Bool + +/* The other macros must be usable in preprocessor directives. */ +#define false 0 +#define true 1 +#define __bool_true_false_are_defined 1 + +#endif /* _GL_STDBOOL_H */ diff --git a/lib/stdint.in.h b/lib/stdint.in.h new file mode 100644 index 00000000..11a21176 --- /dev/null +++ b/lib/stdint.in.h @@ -0,0 +1,567 @@ +/* Copyright (C) 2001-2002, 2004-2009 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. + This file is part of gnulib. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* + * ISO C 99 for platforms that lack it. + * + */ + +#ifndef _GL_STDINT_H + +/* When including a system file that in turn includes , + use the system , not our substitute. This avoids + problems with (for example) VMS, whose includes + . */ +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* Get those types that are already defined in other system include + files, so that we can "#define int8_t signed char" below without + worrying about a later system include file containing a "typedef + signed char int8_t;" that will get messed up by our macro. Our + macros should all be consistent with the system versions, except + for the "fast" types and macros, which we recommend against using + in public interfaces due to compiler differences. */ + +#if @HAVE_STDINT_H@ +# if defined __sgi && ! defined __c99 + /* Bypass IRIX's if in C89 mode, since it merely annoys users + with "This header file is to be used only for c99 mode compilations" + diagnostics. */ +# define __STDINT_H__ +# endif + /* Other systems may have an incomplete or buggy . + Include it before , since any "#include " + in would reinclude us, skipping our contents because + _GL_STDINT_H is defined. + The include_next requires a split double-inclusion guard. */ +# if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +# endif +# @INCLUDE_NEXT@ @NEXT_STDINT_H@ +#endif + +#if ! defined _GL_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H +#define _GL_STDINT_H + +/* defines some of the stdint.h types as well, on glibc, + IRIX 6.5, and OpenBSD 3.8 (via ). + AIX 5.2 isn't needed and causes troubles. + MacOS X 10.4.6 includes (which is us), but + relies on the system definitions, so include + after @NEXT_STDINT_H@. */ +#if @HAVE_SYS_TYPES_H@ && ! defined _AIX +# include +#endif + +/* Get LONG_MIN, LONG_MAX, ULONG_MAX. */ +#include + +#if @HAVE_INTTYPES_H@ + /* In OpenBSD 3.8, includes , which defines + int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. + also defines intptr_t and uintptr_t. */ +# include +#elif @HAVE_SYS_INTTYPES_H@ + /* Solaris 7 has the types except the *_fast*_t types, and + the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ +# include +#endif + +#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ + /* Linux libc4 >= 4.6.7 and libc5 have a that defines + int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is + included by . */ +# include +#endif + +#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* Minimum and maximum values for a integer type under the usual assumption. + Return an unspecified value if BITS == 0, adding a check to pacify + picky compilers. */ + +#define _STDINT_MIN(signed, bits, zero) \ + ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero)) + +#define _STDINT_MAX(signed, bits, zero) \ + ((signed) \ + ? ~ _STDINT_MIN (signed, bits, zero) \ + : /* The expression for the unsigned case. The subtraction of (signed) \ + is a nop in the unsigned case and avoids "signed integer overflow" \ + warnings in the signed case. */ \ + ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) + +/* 7.18.1.1. Exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +#undef int8_t +#undef uint8_t +typedef signed char gl_int8_t; +typedef unsigned char gl_uint8_t; +#define int8_t gl_int8_t +#define uint8_t gl_uint8_t + +#undef int16_t +#undef uint16_t +typedef short int gl_int16_t; +typedef unsigned short int gl_uint16_t; +#define int16_t gl_int16_t +#define uint16_t gl_uint16_t + +#undef int32_t +#undef uint32_t +typedef int gl_int32_t; +typedef unsigned int gl_uint32_t; +#define int32_t gl_int32_t +#define uint32_t gl_uint32_t + +/* Do not undefine int64_t if gnulib is not being used with 64-bit + types, since otherwise it breaks platforms like Tandem/NSK. */ +#if LONG_MAX >> 31 >> 31 == 1 +# undef int64_t +typedef long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +#elif defined _MSC_VER +# undef int64_t +typedef __int64 gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +#elif @HAVE_LONG_LONG_INT@ +# undef int64_t +typedef long long int gl_int64_t; +# define int64_t gl_int64_t +# define GL_INT64_T +#endif + +#if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# undef uint64_t +typedef unsigned long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +#elif defined _MSC_VER +# undef uint64_t +typedef unsigned __int64 gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +#elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# undef uint64_t +typedef unsigned long long int gl_uint64_t; +# define uint64_t gl_uint64_t +# define GL_UINT64_T +#endif + +/* Avoid collision with Solaris 2.5.1 etc. */ +#define _UINT8_T +#define _UINT32_T +#define _UINT64_T + + +/* 7.18.1.2. Minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +#undef int_least8_t +#undef uint_least8_t +#undef int_least16_t +#undef uint_least16_t +#undef int_least32_t +#undef uint_least32_t +#undef int_least64_t +#undef uint_least64_t +#define int_least8_t int8_t +#define uint_least8_t uint8_t +#define int_least16_t int16_t +#define uint_least16_t uint16_t +#define int_least32_t int32_t +#define uint_least32_t uint32_t +#ifdef GL_INT64_T +# define int_least64_t int64_t +#endif +#ifdef GL_UINT64_T +# define uint_least64_t uint64_t +#endif + +/* 7.18.1.3. Fastest minimum-width integer types */ + +/* Note: Other substitutes may define these types differently. + It is not recommended to use these types in public header files. */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. Assume that 'long int' + is fast enough for all narrower integers. */ + +#undef int_fast8_t +#undef uint_fast8_t +#undef int_fast16_t +#undef uint_fast16_t +#undef int_fast32_t +#undef uint_fast32_t +#undef int_fast64_t +#undef uint_fast64_t +typedef long int gl_int_fast8_t; +typedef unsigned long int gl_uint_fast8_t; +typedef long int gl_int_fast16_t; +typedef unsigned long int gl_uint_fast16_t; +typedef long int gl_int_fast32_t; +typedef unsigned long int gl_uint_fast32_t; +#define int_fast8_t gl_int_fast8_t +#define uint_fast8_t gl_uint_fast8_t +#define int_fast16_t gl_int_fast16_t +#define uint_fast16_t gl_uint_fast16_t +#define int_fast32_t gl_int_fast32_t +#define uint_fast32_t gl_uint_fast32_t +#ifdef GL_INT64_T +# define int_fast64_t int64_t +#endif +#ifdef GL_UINT64_T +# define uint_fast64_t uint64_t +#endif + +/* 7.18.1.4. Integer types capable of holding object pointers */ + +#undef intptr_t +#undef uintptr_t +typedef long int gl_intptr_t; +typedef unsigned long int gl_uintptr_t; +#define intptr_t gl_intptr_t +#define uintptr_t gl_uintptr_t + +/* 7.18.1.5. Greatest-width integer types */ + +/* Note: These types are compiler dependent. It may be unwise to use them in + public header files. */ + +#undef intmax_t +#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +typedef long long int gl_intmax_t; +# define intmax_t gl_intmax_t +#elif defined GL_INT64_T +# define intmax_t int64_t +#else +typedef long int gl_intmax_t; +# define intmax_t gl_intmax_t +#endif + +#undef uintmax_t +#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +typedef unsigned long long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +#elif defined GL_UINT64_T +# define uintmax_t uint64_t +#else +typedef unsigned long int gl_uintmax_t; +# define uintmax_t gl_uintmax_t +#endif + +/* Verify that intmax_t and uintmax_t have the same size. Too much code + breaks if this is not the case. If this check fails, the reason is likely + to be found in the autoconf macros. */ +typedef int _verify_intmax_size[2 * (sizeof (intmax_t) == sizeof (uintmax_t)) - 1]; + +/* 7.18.2. Limits of specified-width integer types */ + +#if ! defined __cplusplus || defined __STDC_LIMIT_MACROS + +/* 7.18.2.1. Limits of exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +#undef INT8_MIN +#undef INT8_MAX +#undef UINT8_MAX +#define INT8_MIN (~ INT8_MAX) +#define INT8_MAX 127 +#define UINT8_MAX 255 + +#undef INT16_MIN +#undef INT16_MAX +#undef UINT16_MAX +#define INT16_MIN (~ INT16_MAX) +#define INT16_MAX 32767 +#define UINT16_MAX 65535 + +#undef INT32_MIN +#undef INT32_MAX +#undef UINT32_MAX +#define INT32_MIN (~ INT32_MAX) +#define INT32_MAX 2147483647 +#define UINT32_MAX 4294967295U + +#undef INT64_MIN +#undef INT64_MAX +#ifdef GL_INT64_T +/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 + evaluates the latter incorrectly in preprocessor expressions. */ +# define INT64_MIN (- INTMAX_C (1) << 63) +# define INT64_MAX INTMAX_C (9223372036854775807) +#endif + +#undef UINT64_MAX +#ifdef GL_UINT64_T +# define UINT64_MAX UINTMAX_C (18446744073709551615) +#endif + +/* 7.18.2.2. Limits of minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types + are the same as the corresponding N_t types. */ + +#undef INT_LEAST8_MIN +#undef INT_LEAST8_MAX +#undef UINT_LEAST8_MAX +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST8_MAX INT8_MAX +#define UINT_LEAST8_MAX UINT8_MAX + +#undef INT_LEAST16_MIN +#undef INT_LEAST16_MAX +#undef UINT_LEAST16_MAX +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST16_MAX INT16_MAX +#define UINT_LEAST16_MAX UINT16_MAX + +#undef INT_LEAST32_MIN +#undef INT_LEAST32_MAX +#undef UINT_LEAST32_MAX +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST32_MAX INT32_MAX +#define UINT_LEAST32_MAX UINT32_MAX + +#undef INT_LEAST64_MIN +#undef INT_LEAST64_MAX +#ifdef GL_INT64_T +# define INT_LEAST64_MIN INT64_MIN +# define INT_LEAST64_MAX INT64_MAX +#endif + +#undef UINT_LEAST64_MAX +#ifdef GL_UINT64_T +# define UINT_LEAST64_MAX UINT64_MAX +#endif + +/* 7.18.2.3. Limits of fastest minimum-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types + are taken from the same list of types. */ + +#undef INT_FAST8_MIN +#undef INT_FAST8_MAX +#undef UINT_FAST8_MAX +#define INT_FAST8_MIN LONG_MIN +#define INT_FAST8_MAX LONG_MAX +#define UINT_FAST8_MAX ULONG_MAX + +#undef INT_FAST16_MIN +#undef INT_FAST16_MAX +#undef UINT_FAST16_MAX +#define INT_FAST16_MIN LONG_MIN +#define INT_FAST16_MAX LONG_MAX +#define UINT_FAST16_MAX ULONG_MAX + +#undef INT_FAST32_MIN +#undef INT_FAST32_MAX +#undef UINT_FAST32_MAX +#define INT_FAST32_MIN LONG_MIN +#define INT_FAST32_MAX LONG_MAX +#define UINT_FAST32_MAX ULONG_MAX + +#undef INT_FAST64_MIN +#undef INT_FAST64_MAX +#ifdef GL_INT64_T +# define INT_FAST64_MIN INT64_MIN +# define INT_FAST64_MAX INT64_MAX +#endif + +#undef UINT_FAST64_MAX +#ifdef GL_UINT64_T +# define UINT_FAST64_MAX UINT64_MAX +#endif + +/* 7.18.2.4. Limits of integer types capable of holding object pointers */ + +#undef INTPTR_MIN +#undef INTPTR_MAX +#undef UINTPTR_MAX +#define INTPTR_MIN LONG_MIN +#define INTPTR_MAX LONG_MAX +#define UINTPTR_MAX ULONG_MAX + +/* 7.18.2.5. Limits of greatest-width integer types */ + +#undef INTMAX_MIN +#undef INTMAX_MAX +#ifdef INT64_MAX +# define INTMAX_MIN INT64_MIN +# define INTMAX_MAX INT64_MAX +#else +# define INTMAX_MIN INT32_MIN +# define INTMAX_MAX INT32_MAX +#endif + +#undef UINTMAX_MAX +#ifdef UINT64_MAX +# define UINTMAX_MAX UINT64_MAX +#else +# define UINTMAX_MAX UINT32_MAX +#endif + +/* 7.18.3. Limits of other integer types */ + +/* ptrdiff_t limits */ +#undef PTRDIFF_MIN +#undef PTRDIFF_MAX +#if @APPLE_UNIVERSAL_BUILD@ +# ifdef _LP64 +# define PTRDIFF_MIN _STDINT_MIN (1, 64, 0l) +# define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) +# else +# define PTRDIFF_MIN _STDINT_MIN (1, 32, 0) +# define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) +# endif +#else +# define PTRDIFF_MIN \ + _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) +# define PTRDIFF_MAX \ + _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) +#endif + +/* sig_atomic_t limits */ +#undef SIG_ATOMIC_MIN +#undef SIG_ATOMIC_MAX +#define SIG_ATOMIC_MIN \ + _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ + 0@SIG_ATOMIC_T_SUFFIX@) +#define SIG_ATOMIC_MAX \ + _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ + 0@SIG_ATOMIC_T_SUFFIX@) + + +/* size_t limit */ +#undef SIZE_MAX +#if @APPLE_UNIVERSAL_BUILD@ +# ifdef _LP64 +# define SIZE_MAX _STDINT_MAX (0, 64, 0ul) +# else +# define SIZE_MAX _STDINT_MAX (0, 32, 0ul) +# endif +#else +# define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) +#endif + +/* wchar_t limits */ +/* Get WCHAR_MIN, WCHAR_MAX. + This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested + includes -> -> -> , and the latter includes + and assumes its types are already defined. */ +#if ! (defined WCHAR_MIN && defined WCHAR_MAX) +# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +# include +# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H +#endif +#undef WCHAR_MIN +#undef WCHAR_MAX +#define WCHAR_MIN \ + _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) +#define WCHAR_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) + +/* wint_t limits */ +#undef WINT_MIN +#undef WINT_MAX +#define WINT_MIN \ + _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) +#define WINT_MAX \ + _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) + +#endif /* !defined __cplusplus || defined __STDC_LIMIT_MACROS */ + +/* 7.18.4. Macros for integer constants */ + +#if ! defined __cplusplus || defined __STDC_CONSTANT_MACROS + +/* 7.18.4.1. Macros for minimum-width integer constants */ +/* According to ISO C 99 Technical Corrigendum 1 */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ + +#undef INT8_C +#undef UINT8_C +#define INT8_C(x) x +#define UINT8_C(x) x + +#undef INT16_C +#undef UINT16_C +#define INT16_C(x) x +#define UINT16_C(x) x + +#undef INT32_C +#undef UINT32_C +#define INT32_C(x) x +#define UINT32_C(x) x ## U + +#undef INT64_C +#undef UINT64_C +#if LONG_MAX >> 31 >> 31 == 1 +# define INT64_C(x) x##L +#elif defined _MSC_VER +# define INT64_C(x) x##i64 +#elif @HAVE_LONG_LONG_INT@ +# define INT64_C(x) x##LL +#endif +#if ULONG_MAX >> 31 >> 31 >> 1 == 1 +# define UINT64_C(x) x##UL +#elif defined _MSC_VER +# define UINT64_C(x) x##ui64 +#elif @HAVE_UNSIGNED_LONG_LONG_INT@ +# define UINT64_C(x) x##ULL +#endif + +/* 7.18.4.2. Macros for greatest-width integer constants */ + +#undef INTMAX_C +#if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1 +# define INTMAX_C(x) x##LL +#elif defined GL_INT64_T +# define INTMAX_C(x) INT64_C(x) +#else +# define INTMAX_C(x) x##L +#endif + +#undef UINTMAX_C +#if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1 +# define UINTMAX_C(x) x##ULL +#elif defined GL_UINT64_T +# define UINTMAX_C(x) UINT64_C(x) +#else +# define UINTMAX_C(x) x##UL +#endif + +#endif /* !defined __cplusplus || defined __STDC_CONSTANT_MACROS */ + +#endif /* _GL_STDINT_H */ +#endif /* !defined _GL_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/lib/stdint.mini.h b/lib/stdint.mini.h new file mode 100644 index 00000000..d6f2cb01 --- /dev/null +++ b/lib/stdint.mini.h @@ -0,0 +1,128 @@ +/* Copyright (C) 2001-2002, 2004-2009 Free Software Foundation, Inc. + Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. + This file is part of gnulib. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* + * Subset of ISO C 99 for platforms that lack it. + * + */ + +#ifndef _UNISTRING_STDINT_H + +/* When including a system file that in turn includes , + use the system , not our substitute. This avoids + problems with (for example) VMS, whose includes + . */ +#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + +/* Get those types that are already defined in other system include + files, so that we can "#define int8_t signed char" below without + worrying about a later system include file containing a "typedef + signed char int8_t;" that will get messed up by our macro. Our + macros should all be consistent with the system versions, except + for the "fast" types and macros, which we recommend against using + in public interfaces due to compiler differences. */ + +#if @HAVE_STDINT_H@ +# if defined __sgi && ! defined __c99 + /* Bypass IRIX's if in C89 mode, since it merely annoys users + with "This header file is to be used only for c99 mode compilations" + diagnostics. */ +# define __STDINT_H__ +# endif + /* Other systems may have an incomplete or buggy . + Include it before , since any "#include " + in would reinclude us, skipping our contents because + _UNISTRING_STDINT_H is defined. + The include_next requires a split double-inclusion guard. */ +# if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +# endif +# @INCLUDE_NEXT@ @NEXT_STDINT_H@ +#endif + +#if ! defined _UNISTRING_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H +#define _UNISTRING_STDINT_H + +/* defines some of the stdint.h types as well, on glibc, + IRIX 6.5, and OpenBSD 3.8 (via ). + AIX 5.2 isn't needed and causes troubles. + MacOS X 10.4.6 includes (which is us), but + relies on the system definitions, so include + after @NEXT_STDINT_H@. */ +#if @HAVE_SYS_TYPES_H@ && ! defined _AIX +# include +#endif + +/* Get LONG_MIN, LONG_MAX, ULONG_MAX. */ +#include + +#if @HAVE_INTTYPES_H@ + /* In OpenBSD 3.8, includes , which defines + int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. + also defines intptr_t and uintptr_t. */ +# include +#elif @HAVE_SYS_INTTYPES_H@ + /* Solaris 7 has the types except the *_fast*_t types, and + the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ +# include +#endif + +#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ + /* Linux libc4 >= 4.6.7 and libc5 have a that defines + int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is + included by . */ +# include +#endif + +#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H + + +/* 7.18.1.1. Exact-width integer types */ + +/* Here we assume a standard architecture where the hardware integer + types have 8, 16, 32, optionally 64 bits. */ + +#undef int8_t +#undef uint8_t +typedef signed char unistring_int8_t; +typedef unsigned char unistring_uint8_t; +#define int8_t unistring_int8_t +#define uint8_t unistring_uint8_t + +#undef int16_t +#undef uint16_t +typedef short int unistring_int16_t; +typedef unsigned short int unistring_uint16_t; +#define int16_t unistring_int16_t +#define uint16_t unistring_uint16_t + +#undef int32_t +#undef uint32_t +typedef int unistring_int32_t; +typedef unsigned int unistring_uint32_t; +#define int32_t unistring_int32_t +#define uint32_t unistring_uint32_t + +/* Avoid collision with Solaris 2.5.1 etc. */ +#define _UINT8_T +#define _UINT32_T +#define _UINT64_T + + +#endif /* _UNISTRING_STDINT_H */ +#endif /* !defined _UNISTRING_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h new file mode 100644 index 00000000..162d90de --- /dev/null +++ b/lib/stdio-impl.h @@ -0,0 +1,94 @@ +/* Implementation details of FILE streams. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Many stdio implementations have the same logic and therefore can share + the same implementation of stdio extension API, except that some fields + have different naming conventions, or their access requires some casts. */ + + +/* BSD stdio derived implementations. */ + +#if defined __sferror || defined __DragonFly__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, MacOS X, Cygwin */ + +# if defined __DragonFly__ /* DragonFly */ + /* See . */ +# define fp_ ((struct { struct __FILE_public pub; \ + struct { unsigned char *_base; int _size; } _bf; \ + void *cookie; \ + void *_close; \ + void *_read; \ + void *_seek; \ + void *_write; \ + struct { unsigned char *_base; int _size; } _ub; \ + int _ur; \ + unsigned char _ubuf[3]; \ + unsigned char _nbuf[1]; \ + struct { unsigned char *_base; int _size; } _lb; \ + int _blksize; \ + fpos_t _offset; \ + /* More fields, not relevant here. */ \ + } *) fp) + /* See . */ +# define _p pub._p +# define _flags pub._flags +# define _r pub._r +# define _w pub._w +# else +# define fp_ fp +# endif + +# if defined __NetBSD__ || defined __OpenBSD__ /* NetBSD, OpenBSD */ + /* See + and */ + struct __sfileext + { + struct __sbuf _ub; /* ungetc buffer */ + /* More fields, not relevant here. */ + }; +# define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub +# else /* FreeBSD, DragonFly, MacOS X, Cygwin */ +# define fp_ub fp_->_ub +# endif + +# define HASUB(fp) (fp_ub._base != NULL) + +#endif + + +/* SystemV derived implementations. */ + +#if defined _IOERR + +# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ +# define fp_ ((struct { unsigned char *_ptr; \ + unsigned char *_base; \ + unsigned char *_end; \ + long _cnt; \ + int _file; \ + unsigned int _flag; \ + } *) fp) +# else +# define fp_ fp +# endif + +# if defined _SCO_DS /* OpenServer */ +# define _cnt __cnt +# define _ptr __ptr +# define _base __base +# define _flag __flag +# endif + +#endif diff --git a/lib/stdlib.in.h b/lib/stdlib.in.h new file mode 100644 index 00000000..23325b56 --- /dev/null +++ b/lib/stdlib.in.h @@ -0,0 +1,383 @@ +/* A GNU-like . + + Copyright (C) 1995, 2001-2004, 2006-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_malloc_and_calloc +/* Special invocation convention inside glibc header files. */ + +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_STDLIB_H + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STDLIB_H@ + +#ifndef _GL_STDLIB_H +#define _GL_STDLIB_H + + +/* Solaris declares getloadavg() in . */ +#if @GNULIB_GETLOADAVG@ && @HAVE_SYS_LOADAVG_H@ +# include +#endif + +/* OSF/1 5.1 declares 'struct random_data' in , which is included + from if _REENTRANT is defined. Include it always. */ +#if @HAVE_RANDOM_H@ +# include +#endif + +#if @GNULIB_RANDOM_R@ || !@HAVE_STRUCT_RANDOM_DATA@ +# include +#endif + +#if !@HAVE_STRUCT_RANDOM_DATA@ +struct random_data +{ + int32_t *fptr; /* Front pointer. */ + int32_t *rptr; /* Rear pointer. */ + int32_t *state; /* Array of state values. */ + int rand_type; /* Type of random number generator. */ + int rand_deg; /* Degree of random number generator. */ + int rand_sep; /* Distance between front and rear. */ + int32_t *end_ptr; /* Pointer behind state table. */ +}; +#endif + +/* The definition of GL_LINK_WARNING is copied here. */ + + +/* Some systems do not define EXIT_*, despite otherwise supporting C89. */ +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +/* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere + with proper operation of xargs. */ +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#elif EXIT_FAILURE != 1 +# undef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if @GNULIB_MALLOC_POSIX@ +# if !@HAVE_MALLOC_POSIX@ +# undef malloc +# define malloc rpl_malloc +extern void * malloc (size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef malloc +# define malloc(s) \ + (GL_LINK_WARNING ("malloc is not POSIX compliant everywhere - " \ + "use gnulib module malloc-posix for portability"), \ + malloc (s)) +#endif + + +#if @GNULIB_REALLOC_POSIX@ +# if !@HAVE_REALLOC_POSIX@ +# undef realloc +# define realloc rpl_realloc +extern void * realloc (void *ptr, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef realloc +# define realloc(p,s) \ + (GL_LINK_WARNING ("realloc is not POSIX compliant everywhere - " \ + "use gnulib module realloc-posix for portability"), \ + realloc (p, s)) +#endif + + +#if @GNULIB_CALLOC_POSIX@ +# if !@HAVE_CALLOC_POSIX@ +# undef calloc +# define calloc rpl_calloc +extern void * calloc (size_t nmemb, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef calloc +# define calloc(n,s) \ + (GL_LINK_WARNING ("calloc is not POSIX compliant everywhere - " \ + "use gnulib module calloc-posix for portability"), \ + calloc (n, s)) +#endif + + +#if @GNULIB_ATOLL@ +# if !@HAVE_ATOLL@ +/* Parse a signed decimal integer. + Returns the value of the integer. Errors are not detected. */ +extern long long atoll (const char *string); +# endif +#elif defined GNULIB_POSIXCHECK +# undef atoll +# define atoll(s) \ + (GL_LINK_WARNING ("atoll is unportable - " \ + "use gnulib module atoll for portability"), \ + atoll (s)) +#endif + + +#if @GNULIB_GETLOADAVG@ +# if !@HAVE_DECL_GETLOADAVG@ +/* Store max(NELEM,3) load average numbers in LOADAVG[]. + The three numbers are the load average of the last 1 minute, the last 5 + minutes, and the last 15 minutes, respectively. + LOADAVG is an array of NELEM numbers. */ +extern int getloadavg (double loadavg[], int nelem); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getloadavg +# define getloadavg(l,n) \ + (GL_LINK_WARNING ("getloadavg is not portable - " \ + "use gnulib module getloadavg for portability"), \ + getloadavg (l, n)) +#endif + + +#if @GNULIB_GETSUBOPT@ +/* Assuming *OPTIONP is a comma separated list of elements of the form + "token" or "token=value", getsubopt parses the first of these elements. + If the first element refers to a "token" that is member of the given + NULL-terminated array of tokens: + - It replaces the comma with a NUL byte, updates *OPTIONP to point past + the first option and the comma, sets *VALUEP to the value of the + element (or NULL if it doesn't contain an "=" sign), + - It returns the index of the "token" in the given array of tokens. + Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. + For more details see the POSIX:2001 specification. + http://www.opengroup.org/susv3xsh/getsubopt.html */ +# if !@HAVE_GETSUBOPT@ +extern int getsubopt (char **optionp, char *const *tokens, char **valuep); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getsubopt +# define getsubopt(o,t,v) \ + (GL_LINK_WARNING ("getsubopt is unportable - " \ + "use gnulib module getsubopt for portability"), \ + getsubopt (o, t, v)) +#endif + + +#if @GNULIB_MKDTEMP@ +# if !@HAVE_MKDTEMP@ +/* Create a unique temporary directory from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the directory name unique. + Returns TEMPLATE, or a null pointer if it cannot get a unique name. + The directory is created mode 700. */ +extern char * mkdtemp (char * /*template*/); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mkdtemp +# define mkdtemp(t) \ + (GL_LINK_WARNING ("mkdtemp is unportable - " \ + "use gnulib module mkdtemp for portability"), \ + mkdtemp (t)) +#endif + + +#if @GNULIB_MKSTEMP@ +# if @REPLACE_MKSTEMP@ +/* Create a unique temporary file from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the file name unique. + The file is then created, ensuring it didn't exist before. + The file is created read-write (mask at least 0600 & ~umask), but it may be + world-readable and world-writable (mask 0666 & ~umask), depending on the + implementation. + Returns the open file descriptor if successful, otherwise -1 and errno + set. */ +# define mkstemp rpl_mkstemp +extern int mkstemp (char * /*template*/); +# else +/* On MacOS X 10.3, only declares mkstemp. */ +# include +# endif +#elif defined GNULIB_POSIXCHECK +# undef mkstemp +# define mkstemp(t) \ + (GL_LINK_WARNING ("mkstemp is unportable - " \ + "use gnulib module mkstemp for portability"), \ + mkstemp (t)) +#endif + + +#if @GNULIB_PUTENV@ +# if @REPLACE_PUTENV@ +# undef putenv +# define putenv rpl_putenv +extern int putenv (char *string); +# endif +#endif + + +#if @GNULIB_RANDOM_R@ +# if !@HAVE_RANDOM_R@ + +# ifndef RAND_MAX +# define RAND_MAX 2147483647 +# endif + +int srandom_r (unsigned int seed, struct random_data *rand_state); +int initstate_r (unsigned int seed, char *buf, size_t buf_size, + struct random_data *rand_state); +int setstate_r (char *arg_state, struct random_data *rand_state); +int random_r (struct random_data *buf, int32_t *result); +# endif +#elif defined GNULIB_POSIXCHECK +# undef random_r +# define random_r(b,r) \ + (GL_LINK_WARNING ("random_r is unportable - " \ + "use gnulib module random_r for portability"), \ + random_r (b,r)) +# undef initstate_r +# define initstate_r(s,b,sz,r) \ + (GL_LINK_WARNING ("initstate_r is unportable - " \ + "use gnulib module random_r for portability"), \ + initstate_r (s,b,sz,r)) +# undef srandom_r +# define srandom_r(s,r) \ + (GL_LINK_WARNING ("srandom_r is unportable - " \ + "use gnulib module random_r for portability"), \ + srandom_r (s,r)) +# undef setstate_r +# define setstate_r(a,r) \ + (GL_LINK_WARNING ("setstate_r is unportable - " \ + "use gnulib module random_r for portability"), \ + setstate_r (a,r)) +#endif + + +#if @GNULIB_RPMATCH@ +# if !@HAVE_RPMATCH@ +/* Test a user response to a question. + Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ +extern int rpmatch (const char *response); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rpmatch +# define rpmatch(r) \ + (GL_LINK_WARNING ("rpmatch is unportable - " \ + "use gnulib module rpmatch for portability"), \ + rpmatch (r)) +#endif + + +#if @GNULIB_SETENV@ +# if !@HAVE_SETENV@ +/* Set NAME to VALUE in the environment. + If REPLACE is nonzero, overwrite an existing value. */ +extern int setenv (const char *name, const char *value, int replace); +# endif +#endif + + +#if @GNULIB_UNSETENV@ +# if @HAVE_UNSETENV@ +# if @VOID_UNSETENV@ +/* On some systems, unsetenv() returns void. + This is the case for MacOS X 10.3, FreeBSD 4.8, NetBSD 1.6, OpenBSD 3.4. */ +# define unsetenv(name) ((unsetenv)(name), 0) +# endif +# else +/* Remove the variable NAME from the environment. */ +extern int unsetenv (const char *name); +# endif +#endif + + +#if @GNULIB_STRTOD@ +# if @REPLACE_STRTOD@ +# define strtod rpl_strtod +# endif +# if !@HAVE_STRTOD@ || @REPLACE_STRTOD@ + /* Parse a double from STRING, updating ENDP if appropriate. */ +extern double strtod (const char *str, char **endp); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtod +# define strtod(s, e) \ + (GL_LINK_WARNING ("strtod is unportable - " \ + "use gnulib module strtod for portability"), \ + strtod (s, e)) +#endif + + +#if @GNULIB_STRTOLL@ +# if !@HAVE_STRTOLL@ +/* Parse a signed integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set + to ERANGE. */ +extern long long strtoll (const char *string, char **endptr, int base); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtoll +# define strtoll(s,e,b) \ + (GL_LINK_WARNING ("strtoll is unportable - " \ + "use gnulib module strtoll for portability"), \ + strtoll (s, e, b)) +#endif + + +#if @GNULIB_STRTOULL@ +# if !@HAVE_STRTOULL@ +/* Parse an unsigned integer whose textual representation starts at STRING. + The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, + it may be decimal or octal (with prefix "0") or hexadecimal (with prefix + "0x"). + If ENDPTR is not NULL, the address of the first byte after the integer is + stored in *ENDPTR. + Upon overflow, the return value is ULLONG_MAX, and errno is set to + ERANGE. */ +extern unsigned long long strtoull (const char *string, char **endptr, int base); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtoull +# define strtoull(s,e,b) \ + (GL_LINK_WARNING ("strtoull is unportable - " \ + "use gnulib module strtoull for portability"), \ + strtoull (s, e, b)) +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_STDLIB_H */ +#endif /* _GL_STDLIB_H */ +#endif diff --git a/lib/streq.h b/lib/streq.h new file mode 100644 index 00000000..1b4b1c58 --- /dev/null +++ b/lib/streq.h @@ -0,0 +1,176 @@ +/* Optimized string comparison. + Copyright (C) 2001-2002, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#ifndef _GL_STREQ_H +#define _GL_STREQ_H + +#include + +/* STREQ allows to optimize string comparison with a small literal string. + STREQ (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + is semantically equivalent to + strcmp (s, "EUC-KR") == 0 + just faster. */ + +/* Help GCC to generate good code for string comparisons with + immediate strings. */ +#if defined (__GNUC__) && defined (__OPTIMIZE__) + +static inline int +streq9 (const char *s1, const char *s2) +{ + return strcmp (s1 + 9, s2 + 9) == 0; +} + +static inline int +streq8 (const char *s1, const char *s2, char s28) +{ + if (s1[8] == s28) + { + if (s28 == 0) + return 1; + else + return streq9 (s1, s2); + } + else + return 0; +} + +static inline int +streq7 (const char *s1, const char *s2, char s27, char s28) +{ + if (s1[7] == s27) + { + if (s27 == 0) + return 1; + else + return streq8 (s1, s2, s28); + } + else + return 0; +} + +static inline int +streq6 (const char *s1, const char *s2, char s26, char s27, char s28) +{ + if (s1[6] == s26) + { + if (s26 == 0) + return 1; + else + return streq7 (s1, s2, s27, s28); + } + else + return 0; +} + +static inline int +streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) +{ + if (s1[5] == s25) + { + if (s25 == 0) + return 1; + else + return streq6 (s1, s2, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[4] == s24) + { + if (s24 == 0) + return 1; + else + return streq5 (s1, s2, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[3] == s23) + { + if (s23 == 0) + return 1; + else + return streq4 (s1, s2, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[2] == s22) + { + if (s22 == 0) + return 1; + else + return streq3 (s1, s2, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[1] == s21) + { + if (s21 == 0) + return 1; + else + return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +static inline int +streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) +{ + if (s1[0] == s20) + { + if (s20 == 0) + return 1; + else + return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); + } + else + return 0; +} + +#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) + +#else + +#define STREQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ + (strcmp (s1, s2) == 0) + +#endif + +#endif /* _GL_STREQ_H */ diff --git a/lib/striconveh.c b/lib/striconveh.c new file mode 100644 index 00000000..b39a01f1 --- /dev/null +++ b/lib/striconveh.c @@ -0,0 +1,1251 @@ +/* Character set conversion with error handling. + Copyright (C) 2001-2008 Free Software Foundation, Inc. + Written by Bruno Haible and Simon Josefsson. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "striconveh.h" + +#include +#include +#include +#include + +#if HAVE_ICONV +# include +# include "unistr.h" +#endif + +#include "c-strcase.h" +#include "c-strcaseeq.h" + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + + +#if HAVE_ICONV + +/* The caller must provide CD, CD1, CD2, not just CD, because when a conversion + error occurs, we may have to determine the Unicode representation of the + inconvertible character. */ + +/* iconv_carefully is like iconv, except that it stops as soon as it encounters + a conversion error, and it returns in *INCREMENTED a boolean telling whether + it has incremented the input pointers past the error location. */ +# if !defined _LIBICONV_VERSION && !defined __GLIBC__ +/* Irix iconv() inserts a NUL byte if it cannot convert. + NetBSD iconv() inserts a question mark if it cannot convert. + Only GNU libiconv and GNU libc are known to prefer to fail rather + than doing a lossy conversion. */ +static size_t +iconv_carefully (iconv_t cd, + const char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft, + bool *incremented) +{ + const char *inptr = *inbuf; + const char *inptr_end = inptr + *inbytesleft; + char *outptr = *outbuf; + size_t outsize = *outbytesleft; + const char *inptr_before; + size_t res; + + do + { + size_t insize; + + inptr_before = inptr; + res = (size_t)(-1); + + for (insize = 1; inptr + insize <= inptr_end; insize++) + { + res = iconv (cd, + (ICONV_CONST char **) &inptr, &insize, + &outptr, &outsize); + if (!(res == (size_t)(-1) && errno == EINVAL)) + break; + /* iconv can eat up a shift sequence but give EINVAL while attempting + to convert the first character. E.g. libiconv does this. */ + if (inptr > inptr_before) + { + res = 0; + break; + } + } + + if (res == 0) + { + *outbuf = outptr; + *outbytesleft = outsize; + } + } + while (res == 0 && inptr < inptr_end); + + *inbuf = inptr; + *inbytesleft = inptr_end - inptr; + if (res != (size_t)(-1) && res > 0) + { + /* iconv() has already incremented INPTR. We cannot go back to a + previous INPTR, otherwise the state inside CD would become invalid, + if FROM_CODESET is a stateful encoding. So, tell the caller that + *INBUF has already been incremented. */ + *incremented = (inptr > inptr_before); + errno = EILSEQ; + return (size_t)(-1); + } + else + { + *incremented = false; + return res; + } +} +# else +# define iconv_carefully(cd, inbuf, inbytesleft, outbuf, outbytesleft, incremented) \ + (*(incremented) = false, \ + iconv (cd, (ICONV_CONST char **) (inbuf), inbytesleft, outbuf, outbytesleft)) +# endif + +/* iconv_carefully_1 is like iconv_carefully, except that it stops after + converting one character or one shift sequence. */ +static size_t +iconv_carefully_1 (iconv_t cd, + const char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft, + bool *incremented) +{ + const char *inptr_before = *inbuf; + const char *inptr = inptr_before; + const char *inptr_end = inptr_before + *inbytesleft; + char *outptr = *outbuf; + size_t outsize = *outbytesleft; + size_t res = (size_t)(-1); + size_t insize; + + for (insize = 1; inptr_before + insize <= inptr_end; insize++) + { + inptr = inptr_before; + res = iconv (cd, + (ICONV_CONST char **) &inptr, &insize, + &outptr, &outsize); + if (!(res == (size_t)(-1) && errno == EINVAL)) + break; + /* iconv can eat up a shift sequence but give EINVAL while attempting + to convert the first character. E.g. libiconv does this. */ + if (inptr > inptr_before) + { + res = 0; + break; + } + } + + *inbuf = inptr; + *inbytesleft = inptr_end - inptr; +# if !defined _LIBICONV_VERSION && !defined __GLIBC__ + /* Irix iconv() inserts a NUL byte if it cannot convert. + NetBSD iconv() inserts a question mark if it cannot convert. + Only GNU libiconv and GNU libc are known to prefer to fail rather + than doing a lossy conversion. */ + if (res != (size_t)(-1) && res > 0) + { + /* iconv() has already incremented INPTR. We cannot go back to a + previous INPTR, otherwise the state inside CD would become invalid, + if FROM_CODESET is a stateful encoding. So, tell the caller that + *INBUF has already been incremented. */ + *incremented = (inptr > inptr_before); + errno = EILSEQ; + return (size_t)(-1); + } +# endif + + if (res != (size_t)(-1)) + { + *outbuf = outptr; + *outbytesleft = outsize; + } + *incremented = false; + return res; +} + +/* utf8conv_carefully is like iconv, except that + - it converts from UTF-8 to UTF-8, + - it stops as soon as it encounters a conversion error, and it returns + in *INCREMENTED a boolean telling whether it has incremented the input + pointers past the error location, + - if one_character_only is true, it stops after converting one + character. */ +static size_t +utf8conv_carefully (bool one_character_only, + const char **inbuf, size_t *inbytesleft, + char **outbuf, size_t *outbytesleft, + bool *incremented) +{ + const char *inptr = *inbuf; + size_t insize = *inbytesleft; + char *outptr = *outbuf; + size_t outsize = *outbytesleft; + size_t res; + + res = 0; + do + { + ucs4_t uc; + int n; + int m; + + n = u8_mbtoucr (&uc, (const uint8_t *) inptr, insize); + if (n < 0) + { + errno = (n == -2 ? EINVAL : EILSEQ); + n = u8_mbtouc (&uc, (const uint8_t *) inptr, insize); + inptr += n; + insize -= n; + res = (size_t)(-1); + *incremented = true; + break; + } + if (outsize == 0) + { + errno = E2BIG; + res = (size_t)(-1); + *incremented = false; + break; + } + m = u8_uctomb ((uint8_t *) outptr, uc, outsize); + if (m == -2) + { + errno = E2BIG; + res = (size_t)(-1); + *incremented = false; + break; + } + inptr += n; + insize -= n; + if (m == -1) + { + errno = EILSEQ; + res = (size_t)(-1); + *incremented = true; + break; + } + outptr += m; + outsize -= m; + } + while (!one_character_only && insize > 0); + + *inbuf = inptr; + *inbytesleft = insize; + *outbuf = outptr; + *outbytesleft = outsize; + return res; +} + +static int +mem_cd_iconveh_internal (const char *src, size_t srclen, + iconv_t cd, iconv_t cd1, iconv_t cd2, + enum iconv_ilseq_handler handler, + size_t extra_alloc, + size_t *offsets, + char **resultp, size_t *lengthp) +{ + /* When a conversion error occurs, we cannot start using CD1 and CD2 at + this point: FROM_CODESET may be a stateful encoding like ISO-2022-KR. + Instead, we have to start afresh from the beginning of SRC. */ + /* Use a temporary buffer, so that for small strings, a single malloc() + call will be sufficient. */ +# define tmpbufsize 4096 + /* The alignment is needed when converting e.g. to glibc's WCHAR_T or + libiconv's UCS-4-INTERNAL encoding. */ + union { unsigned int align; char buf[tmpbufsize]; } tmp; +# define tmpbuf tmp.buf + + char *initial_result; + char *result; + size_t allocated; + size_t length; + size_t last_length = (size_t)(-1); /* only needed if offsets != NULL */ + + if (*resultp != NULL && *lengthp >= sizeof (tmpbuf)) + { + initial_result = *resultp; + allocated = *lengthp; + } + else + { + initial_result = tmpbuf; + allocated = sizeof (tmpbuf); + } + result = initial_result; + + /* Test whether a direct conversion is possible at all. */ + if (cd == (iconv_t)(-1)) + goto indirectly; + + if (offsets != NULL) + { + size_t i; + + for (i = 0; i < srclen; i++) + offsets[i] = (size_t)(-1); + + last_length = (size_t)(-1); + } + length = 0; + + /* First, try a direct conversion, and see whether a conversion error + occurs at all. */ + { + const char *inptr = src; + size_t insize = srclen; + + /* Avoid glibc-2.1 bug and Solaris 2.7-2.9 bug. */ +# if defined _LIBICONV_VERSION \ + || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun) + /* Set to the initial state. */ + iconv (cd, NULL, NULL, NULL, NULL); +# endif + + while (insize > 0) + { + char *outptr = result + length; + size_t outsize = allocated - extra_alloc - length; + bool incremented; + size_t res; + bool grow; + + if (offsets != NULL) + { + if (length != last_length) /* ensure that offset[] be increasing */ + { + offsets[inptr - src] = length; + last_length = length; + } + res = iconv_carefully_1 (cd, + &inptr, &insize, + &outptr, &outsize, + &incremented); + } + else + /* Use iconv_carefully instead of iconv here, because: + - If TO_CODESET is UTF-8, we can do the error handling in this + loop, no need for a second loop, + - With iconv() implementations other than GNU libiconv and GNU + libc, if we use iconv() in a big swoop, checking for an E2BIG + return, we lose the number of irreversible conversions. */ + res = iconv_carefully (cd, + &inptr, &insize, + &outptr, &outsize, + &incremented); + + length = outptr - result; + grow = (length + extra_alloc > allocated / 2); + if (res == (size_t)(-1)) + { + if (errno == E2BIG) + grow = true; + else if (errno == EINVAL) + break; + else if (errno == EILSEQ && handler != iconveh_error) + { + if (cd2 == (iconv_t)(-1)) + { + /* TO_CODESET is UTF-8. */ + /* Error handling can produce up to 1 byte of output. */ + if (length + 1 + extra_alloc > allocated) + { + char *memory; + + allocated = 2 * allocated; + if (length + 1 + extra_alloc > allocated) + abort (); + if (result == initial_result) + memory = (char *) malloc (allocated); + else + memory = (char *) realloc (result, allocated); + if (memory == NULL) + { + if (result != initial_result) + free (result); + errno = ENOMEM; + return -1; + } + if (result == initial_result) + memcpy (memory, initial_result, length); + result = memory; + grow = false; + } + /* The input is invalid in FROM_CODESET. Eat up one byte + and emit a question mark. */ + if (!incremented) + { + if (insize == 0) + abort (); + inptr++; + insize--; + } + result[length] = '?'; + length++; + } + else + goto indirectly; + } + else + { + if (result != initial_result) + { + int saved_errno = errno; + free (result); + errno = saved_errno; + } + return -1; + } + } + if (insize == 0) + break; + if (grow) + { + char *memory; + + allocated = 2 * allocated; + if (result == initial_result) + memory = (char *) malloc (allocated); + else + memory = (char *) realloc (result, allocated); + if (memory == NULL) + { + if (result != initial_result) + free (result); + errno = ENOMEM; + return -1; + } + if (result == initial_result) + memcpy (memory, initial_result, length); + result = memory; + } + } + } + + /* Now get the conversion state back to the initial state. + But avoid glibc-2.1 bug and Solaris 2.7 bug. */ +#if defined _LIBICONV_VERSION \ + || !((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) || defined __sun) + for (;;) + { + char *outptr = result + length; + size_t outsize = allocated - extra_alloc - length; + size_t res; + + res = iconv (cd, NULL, NULL, &outptr, &outsize); + length = outptr - result; + if (res == (size_t)(-1)) + { + if (errno == E2BIG) + { + char *memory; + + allocated = 2 * allocated; + if (result == initial_result) + memory = (char *) malloc (allocated); + else + memory = (char *) realloc (result, allocated); + if (memory == NULL) + { + if (result != initial_result) + free (result); + errno = ENOMEM; + return -1; + } + if (result == initial_result) + memcpy (memory, initial_result, length); + result = memory; + } + else + { + if (result != initial_result) + { + int saved_errno = errno; + free (result); + errno = saved_errno; + } + return -1; + } + } + else + break; + } +#endif + + /* The direct conversion succeeded. */ + goto done; + + indirectly: + /* The direct conversion failed. + Use a conversion through UTF-8. */ + if (offsets != NULL) + { + size_t i; + + for (i = 0; i < srclen; i++) + offsets[i] = (size_t)(-1); + + last_length = (size_t)(-1); + } + length = 0; + { + const bool slowly = (offsets != NULL || handler == iconveh_error); +# define utf8bufsize 4096 /* may also be smaller or larger than tmpbufsize */ + char utf8buf[utf8bufsize + 1]; + size_t utf8len = 0; + const char *in1ptr = src; + size_t in1size = srclen; + bool do_final_flush1 = true; + bool do_final_flush2 = true; + + /* Avoid glibc-2.1 bug and Solaris 2.7-2.9 bug. */ +# if defined _LIBICONV_VERSION \ + || !((__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) || defined __sun) + /* Set to the initial state. */ + if (cd1 != (iconv_t)(-1)) + iconv (cd1, NULL, NULL, NULL, NULL); + if (cd2 != (iconv_t)(-1)) + iconv (cd2, NULL, NULL, NULL, NULL); +# endif + + while (in1size > 0 || do_final_flush1 || utf8len > 0 || do_final_flush2) + { + char *out1ptr = utf8buf + utf8len; + size_t out1size = utf8bufsize - utf8len; + bool incremented1; + size_t res1; + int errno1; + + /* Conversion step 1: from FROM_CODESET to UTF-8. */ + if (in1size > 0) + { + if (offsets != NULL + && length != last_length) /* ensure that offset[] be increasing */ + { + offsets[in1ptr - src] = length; + last_length = length; + } + if (cd1 != (iconv_t)(-1)) + { + if (slowly) + res1 = iconv_carefully_1 (cd1, + &in1ptr, &in1size, + &out1ptr, &out1size, + &incremented1); + else + res1 = iconv_carefully (cd1, + &in1ptr, &in1size, + &out1ptr, &out1size, + &incremented1); + } + else + { + /* FROM_CODESET is UTF-8. */ + res1 = utf8conv_carefully (slowly, + &in1ptr, &in1size, + &out1ptr, &out1size, + &incremented1); + } + } + else if (do_final_flush1) + { + /* Now get the conversion state of CD1 back to the initial state. + But avoid glibc-2.1 bug and Solaris 2.7 bug. */ +# if defined _LIBICONV_VERSION \ + || !((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) || defined __sun) + if (cd1 != (iconv_t)(-1)) + res1 = iconv (cd1, NULL, NULL, &out1ptr, &out1size); + else +# endif + res1 = 0; + do_final_flush1 = false; + incremented1 = true; + } + else + { + res1 = 0; + incremented1 = true; + } + if (res1 == (size_t)(-1) + && !(errno == E2BIG || errno == EINVAL || errno == EILSEQ)) + { + if (result != initial_result) + { + int saved_errno = errno; + free (result); + errno = saved_errno; + } + return -1; + } + if (res1 == (size_t)(-1) + && errno == EILSEQ && handler != iconveh_error) + { + /* The input is invalid in FROM_CODESET. Eat up one byte and + emit a question mark. Room for the question mark was allocated + at the end of utf8buf. */ + if (!incremented1) + { + if (in1size == 0) + abort (); + in1ptr++; + in1size--; + } + utf8buf[utf8len++] = '?'; + } + errno1 = errno; + utf8len = out1ptr - utf8buf; + + if (offsets != NULL + || in1size == 0 + || utf8len > utf8bufsize / 2 + || (res1 == (size_t)(-1) && errno1 == E2BIG)) + { + /* Conversion step 2: from UTF-8 to TO_CODESET. */ + const char *in2ptr = utf8buf; + size_t in2size = utf8len; + + while (in2size > 0 + || (in1size == 0 && !do_final_flush1 && do_final_flush2)) + { + char *out2ptr = result + length; + size_t out2size = allocated - extra_alloc - length; + bool incremented2; + size_t res2; + bool grow; + + if (in2size > 0) + { + if (cd2 != (iconv_t)(-1)) + res2 = iconv_carefully (cd2, + &in2ptr, &in2size, + &out2ptr, &out2size, + &incremented2); + else + /* TO_CODESET is UTF-8. */ + res2 = utf8conv_carefully (false, + &in2ptr, &in2size, + &out2ptr, &out2size, + &incremented2); + } + else /* in1size == 0 && !do_final_flush1 + && in2size == 0 && do_final_flush2 */ + { + /* Now get the conversion state of CD1 back to the initial + state. But avoid glibc-2.1 bug and Solaris 2.7 bug. */ +# if defined _LIBICONV_VERSION \ + || !((__GLIBC__ == 2 && __GLIBC_MINOR__ <= 1) || defined __sun) + if (cd2 != (iconv_t)(-1)) + res2 = iconv (cd2, NULL, NULL, &out2ptr, &out2size); + else +# endif + res2 = 0; + do_final_flush2 = false; + incremented2 = true; + } + + length = out2ptr - result; + grow = (length + extra_alloc > allocated / 2); + if (res2 == (size_t)(-1)) + { + if (errno == E2BIG) + grow = true; + else if (errno == EINVAL) + break; + else if (errno == EILSEQ && handler != iconveh_error) + { + /* Error handling can produce up to 10 bytes of ASCII + output. But TO_CODESET may be UCS-2, UTF-16 or + UCS-4, so use CD2 here as well. */ + char scratchbuf[10]; + size_t scratchlen; + ucs4_t uc; + const char *inptr; + size_t insize; + size_t res; + + if (incremented2) + { + if (u8_prev (&uc, (const uint8_t *) in2ptr, + (const uint8_t *) utf8buf) + == NULL) + abort (); + } + else + { + int n; + if (in2size == 0) + abort (); + n = u8_mbtouc_unsafe (&uc, (const uint8_t *) in2ptr, + in2size); + in2ptr += n; + in2size -= n; + } + + if (handler == iconveh_escape_sequence) + { + static char hex[16] = "0123456789ABCDEF"; + scratchlen = 0; + scratchbuf[scratchlen++] = '\\'; + if (uc < 0x10000) + scratchbuf[scratchlen++] = 'u'; + else + { + scratchbuf[scratchlen++] = 'U'; + scratchbuf[scratchlen++] = hex[(uc>>28) & 15]; + scratchbuf[scratchlen++] = hex[(uc>>24) & 15]; + scratchbuf[scratchlen++] = hex[(uc>>20) & 15]; + scratchbuf[scratchlen++] = hex[(uc>>16) & 15]; + } + scratchbuf[scratchlen++] = hex[(uc>>12) & 15]; + scratchbuf[scratchlen++] = hex[(uc>>8) & 15]; + scratchbuf[scratchlen++] = hex[(uc>>4) & 15]; + scratchbuf[scratchlen++] = hex[uc & 15]; + } + else + { + scratchbuf[0] = '?'; + scratchlen = 1; + } + + inptr = scratchbuf; + insize = scratchlen; + if (cd2 != (iconv_t)(-1)) + res = iconv (cd2, + (ICONV_CONST char **) &inptr, &insize, + &out2ptr, &out2size); + else + { + /* TO_CODESET is UTF-8. */ + if (out2size >= insize) + { + memcpy (out2ptr, inptr, insize); + out2ptr += insize; + out2size -= insize; + inptr += insize; + insize = 0; + res = 0; + } + else + { + errno = E2BIG; + res = (size_t)(-1); + } + } + length = out2ptr - result; + if (res == (size_t)(-1) && errno == E2BIG) + { + char *memory; + + allocated = 2 * allocated; + if (length + 1 + extra_alloc > allocated) + abort (); + if (result == initial_result) + memory = (char *) malloc (allocated); + else + memory = (char *) realloc (result, allocated); + if (memory == NULL) + { + if (result != initial_result) + free (result); + errno = ENOMEM; + return -1; + } + if (result == initial_result) + memcpy (memory, initial_result, length); + result = memory; + grow = false; + + out2ptr = result + length; + out2size = allocated - extra_alloc - length; + if (cd2 != (iconv_t)(-1)) + res = iconv (cd2, + (ICONV_CONST char **) &inptr, + &insize, + &out2ptr, &out2size); + else + { + /* TO_CODESET is UTF-8. */ + if (!(out2size >= insize)) + abort (); + memcpy (out2ptr, inptr, insize); + out2ptr += insize; + out2size -= insize; + inptr += insize; + insize = 0; + res = 0; + } + length = out2ptr - result; + } +# if !defined _LIBICONV_VERSION && !defined __GLIBC__ + /* Irix iconv() inserts a NUL byte if it cannot convert. + NetBSD iconv() inserts a question mark if it cannot + convert. + Only GNU libiconv and GNU libc are known to prefer + to fail rather than doing a lossy conversion. */ + if (res != (size_t)(-1) && res > 0) + { + errno = EILSEQ; + res = (size_t)(-1); + } +# endif + if (res == (size_t)(-1)) + { + /* Failure converting the ASCII replacement. */ + if (result != initial_result) + { + int saved_errno = errno; + free (result); + errno = saved_errno; + } + return -1; + } + } + else + { + if (result != initial_result) + { + int saved_errno = errno; + free (result); + errno = saved_errno; + } + return -1; + } + } + if (!(in2size > 0 + || (in1size == 0 && !do_final_flush1 && do_final_flush2))) + break; + if (grow) + { + char *memory; + + allocated = 2 * allocated; + if (result == initial_result) + memory = (char *) malloc (allocated); + else + memory = (char *) realloc (result, allocated); + if (memory == NULL) + { + if (result != initial_result) + free (result); + errno = ENOMEM; + return -1; + } + if (result == initial_result) + memcpy (memory, initial_result, length); + result = memory; + } + } + + /* Move the remaining bytes to the beginning of utf8buf. */ + if (in2size > 0) + memmove (utf8buf, in2ptr, in2size); + utf8len = in2size; + } + + if (res1 == (size_t)(-1)) + { + if (errno1 == EINVAL) + in1size = 0; + else if (errno1 == EILSEQ) + { + if (result != initial_result) + free (result); + errno = errno1; + return -1; + } + } + } +# undef utf8bufsize + } + + done: + /* Now the final memory allocation. */ + if (result == tmpbuf) + { + size_t memsize = length + extra_alloc; + char *memory; + + memory = (char *) malloc (memsize > 0 ? memsize : 1); + if (memory != NULL) + { + memcpy (memory, tmpbuf, length); + result = memory; + } + else + { + errno = ENOMEM; + return -1; + } + } + else if (result != *resultp && length + extra_alloc < allocated) + { + /* Shrink the allocated memory if possible. */ + size_t memsize = length + extra_alloc; + char *memory; + + memory = (char *) realloc (result, memsize > 0 ? memsize : 1); + if (memory != NULL) + result = memory; + } + *resultp = result; + *lengthp = length; + return 0; +# undef tmpbuf +# undef tmpbufsize +} + +int +mem_cd_iconveh (const char *src, size_t srclen, + iconv_t cd, iconv_t cd1, iconv_t cd2, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp) +{ + return mem_cd_iconveh_internal (src, srclen, cd, cd1, cd2, handler, 0, + offsets, resultp, lengthp); +} + +char * +str_cd_iconveh (const char *src, + iconv_t cd, iconv_t cd1, iconv_t cd2, + enum iconv_ilseq_handler handler) +{ + /* For most encodings, a trailing NUL byte in the input will be converted + to a trailing NUL byte in the output. But not for UTF-7. So that this + function is usable for UTF-7, we have to exclude the NUL byte from the + conversion and add it by hand afterwards. */ + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconveh_internal (src, strlen (src), + cd, cd1, cd2, handler, 1, NULL, + &result, &length); + + if (retval < 0) + { + if (result != NULL) + { + int saved_errno = errno; + free (result); + errno = saved_errno; + } + return NULL; + } + + /* Add the terminating NUL byte. */ + result[length] = '\0'; + + return result; +} + +#endif + +int +mem_iconveh (const char *src, size_t srclen, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp) +{ + if (srclen == 0) + { + /* Nothing to convert. */ + *lengthp = 0; + return 0; + } + else if (offsets == NULL && c_strcasecmp (from_codeset, to_codeset) == 0) + { + char *result; + + if (*resultp != NULL && *lengthp >= srclen) + result = *resultp; + else + { + result = (char *) malloc (srclen); + if (result == NULL) + { + errno = ENOMEM; + return -1; + } + } + memcpy (result, src, srclen); + *resultp = result; + *lengthp = srclen; + return 0; + } + else + { +#if HAVE_ICONV + iconv_t cd; + iconv_t cd1; + iconv_t cd2; + char *result; + size_t length; + int retval; + + /* Avoid glibc-2.1 bug with EUC-KR. */ +# if (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) && !defined _LIBICONV_VERSION + if (c_strcasecmp (from_codeset, "EUC-KR") == 0 + || c_strcasecmp (to_codeset, "EUC-KR") == 0) + { + errno = EINVAL; + return -1; + } +# endif + + cd = iconv_open (to_codeset, from_codeset); + + if (STRCASEEQ (from_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0)) + cd1 = (iconv_t)(-1); + else + { + cd1 = iconv_open ("UTF-8", from_codeset); + if (cd1 == (iconv_t)(-1)) + { + int saved_errno = errno; + if (cd != (iconv_t)(-1)) + iconv_close (cd); + errno = saved_errno; + return -1; + } + } + + if (STRCASEEQ (to_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0) +# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 || _LIBICONV_VERSION >= 0x0105 + || c_strcasecmp (to_codeset, "UTF-8//TRANSLIT") == 0 +# endif + ) + cd2 = (iconv_t)(-1); + else + { + cd2 = iconv_open (to_codeset, "UTF-8"); + if (cd2 == (iconv_t)(-1)) + { + int saved_errno = errno; + if (cd1 != (iconv_t)(-1)) + iconv_close (cd1); + if (cd != (iconv_t)(-1)) + iconv_close (cd); + errno = saved_errno; + return -1; + } + } + + result = *resultp; + length = *lengthp; + retval = mem_cd_iconveh (src, srclen, cd, cd1, cd2, handler, offsets, + &result, &length); + + if (retval < 0) + { + /* Close cd, cd1, cd2, but preserve the errno from str_cd_iconv. */ + int saved_errno = errno; + if (cd2 != (iconv_t)(-1)) + iconv_close (cd2); + if (cd1 != (iconv_t)(-1)) + iconv_close (cd1); + if (cd != (iconv_t)(-1)) + iconv_close (cd); + errno = saved_errno; + } + else + { + if (cd2 != (iconv_t)(-1) && iconv_close (cd2) < 0) + { + /* Return -1, but free the allocated memory, and while doing + that, preserve the errno from iconv_close. */ + int saved_errno = errno; + if (cd1 != (iconv_t)(-1)) + iconv_close (cd1); + if (cd != (iconv_t)(-1)) + iconv_close (cd); + if (result != *resultp && result != NULL) + free (result); + errno = saved_errno; + return -1; + } + if (cd1 != (iconv_t)(-1) && iconv_close (cd1) < 0) + { + /* Return -1, but free the allocated memory, and while doing + that, preserve the errno from iconv_close. */ + int saved_errno = errno; + if (cd != (iconv_t)(-1)) + iconv_close (cd); + if (result != *resultp && result != NULL) + free (result); + errno = saved_errno; + return -1; + } + if (cd != (iconv_t)(-1) && iconv_close (cd) < 0) + { + /* Return -1, but free the allocated memory, and while doing + that, preserve the errno from iconv_close. */ + int saved_errno = errno; + if (result != *resultp && result != NULL) + free (result); + errno = saved_errno; + return -1; + } + *resultp = result; + *lengthp = length; + } + return retval; +#else + /* This is a different error code than if iconv_open existed but didn't + support from_codeset and to_codeset, so that the caller can emit + an error message such as + "iconv() is not supported. Installing GNU libiconv and + then reinstalling this package would fix this." */ + errno = ENOSYS; + return -1; +#endif + } +} + +char * +str_iconveh (const char *src, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler) +{ + if (*src == '\0' || c_strcasecmp (from_codeset, to_codeset) == 0) + { + char *result = strdup (src); + + if (result == NULL) + errno = ENOMEM; + return result; + } + else + { +#if HAVE_ICONV + iconv_t cd; + iconv_t cd1; + iconv_t cd2; + char *result; + + /* Avoid glibc-2.1 bug with EUC-KR. */ +# if (__GLIBC__ - 0 == 2 && __GLIBC_MINOR__ - 0 <= 1) && !defined _LIBICONV_VERSION + if (c_strcasecmp (from_codeset, "EUC-KR") == 0 + || c_strcasecmp (to_codeset, "EUC-KR") == 0) + { + errno = EINVAL; + return NULL; + } +# endif + + cd = iconv_open (to_codeset, from_codeset); + + if (STRCASEEQ (from_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0)) + cd1 = (iconv_t)(-1); + else + { + cd1 = iconv_open ("UTF-8", from_codeset); + if (cd1 == (iconv_t)(-1)) + { + int saved_errno = errno; + if (cd != (iconv_t)(-1)) + iconv_close (cd); + errno = saved_errno; + return NULL; + } + } + + if (STRCASEEQ (to_codeset, "UTF-8", 'U','T','F','-','8',0,0,0,0) +# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 || _LIBICONV_VERSION >= 0x0105 + || c_strcasecmp (to_codeset, "UTF-8//TRANSLIT") == 0 +# endif + ) + cd2 = (iconv_t)(-1); + else + { + cd2 = iconv_open (to_codeset, "UTF-8"); + if (cd2 == (iconv_t)(-1)) + { + int saved_errno = errno; + if (cd1 != (iconv_t)(-1)) + iconv_close (cd1); + if (cd != (iconv_t)(-1)) + iconv_close (cd); + errno = saved_errno; + return NULL; + } + } + + result = str_cd_iconveh (src, cd, cd1, cd2, handler); + + if (result == NULL) + { + /* Close cd, cd1, cd2, but preserve the errno from str_cd_iconv. */ + int saved_errno = errno; + if (cd2 != (iconv_t)(-1)) + iconv_close (cd2); + if (cd1 != (iconv_t)(-1)) + iconv_close (cd1); + if (cd != (iconv_t)(-1)) + iconv_close (cd); + errno = saved_errno; + } + else + { + if (cd2 != (iconv_t)(-1) && iconv_close (cd2) < 0) + { + /* Return NULL, but free the allocated memory, and while doing + that, preserve the errno from iconv_close. */ + int saved_errno = errno; + if (cd1 != (iconv_t)(-1)) + iconv_close (cd1); + if (cd != (iconv_t)(-1)) + iconv_close (cd); + free (result); + errno = saved_errno; + return NULL; + } + if (cd1 != (iconv_t)(-1) && iconv_close (cd1) < 0) + { + /* Return NULL, but free the allocated memory, and while doing + that, preserve the errno from iconv_close. */ + int saved_errno = errno; + if (cd != (iconv_t)(-1)) + iconv_close (cd); + free (result); + errno = saved_errno; + return NULL; + } + if (cd != (iconv_t)(-1) && iconv_close (cd) < 0) + { + /* Return NULL, but free the allocated memory, and while doing + that, preserve the errno from iconv_close. */ + int saved_errno = errno; + free (result); + errno = saved_errno; + return NULL; + } + } + return result; +#else + /* This is a different error code than if iconv_open existed but didn't + support from_codeset and to_codeset, so that the caller can emit + an error message such as + "iconv() is not supported. Installing GNU libiconv and + then reinstalling this package would fix this." */ + errno = ENOSYS; + return NULL; +#endif + } +} diff --git a/lib/striconveh.h b/lib/striconveh.h new file mode 100644 index 00000000..98b4d0c5 --- /dev/null +++ b/lib/striconveh.h @@ -0,0 +1,120 @@ +/* Character set conversion with error handling. + Copyright (C) 2001-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible and Simon Josefsson. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _STRICONVEH_H +#define _STRICONVEH_H + +#include +#if HAVE_ICONV +#include +#endif + +#include "iconveh.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +#if HAVE_ICONV + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + CD is the conversion descriptor from FROMCODE to TOCODE, or (iconv_t)(-1) if + the system does not support a direct conversion from FROMCODE to TOCODE. + CD1 is the conversion descriptor from FROM_CODESET to UTF-8 (or + (iconv_t)(-1) if FROM_CODESET is UTF-8). + CD2 is the conversion descriptor from UTF-8 to TO_CODESET (or (iconv_t)(-1) + if TO_CODESET is UTF-8). + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int + mem_cd_iconveh (const char *src, size_t srclen, + iconv_t cd, iconv_t cd1, iconv_t cd2, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + CD is the conversion descriptor from FROMCODE to TOCODE, or (iconv_t)(-1) if + the system does not support a direct conversion from FROMCODE to TOCODE. + Both the "from" and the "to" encoding must use a single NUL byte at the end + of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + CD1 is the conversion descriptor from FROM_CODESET to UTF-8 (or + (iconv_t)(-1) if FROM_CODESET is UTF-8). + CD2 is the conversion descriptor from UTF-8 to TO_CODESET (or (iconv_t)(-1) + if TO_CODESET is UTF-8). + Allocate a malloced memory block for the result. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * + str_cd_iconveh (const char *src, + iconv_t cd, iconv_t cd1, iconv_t cd2, + enum iconv_ilseq_handler handler); + +#endif + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int + mem_iconveh (const char *src, size_t srclen, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + Both the "from" and the "to" encoding must use a single NUL byte at the + end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + Allocate a malloced memory block for the result. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * + str_iconveh (const char *src, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _STRICONVEH_H */ diff --git a/lib/striconveha.c b/lib/striconveha.c new file mode 100644 index 00000000..a0567b42 --- /dev/null +++ b/lib/striconveha.c @@ -0,0 +1,348 @@ +/* Character set conversion with error handling and autodetection. + Copyright (C) 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "striconveha.h" + +#include +#include +#include + +#include "malloca.h" +#include "c-strcase.h" +#include "striconveh.h" + +#define SIZEOF(a) (sizeof(a)/sizeof(a[0])) + + +/* Autodetection list. */ + +struct autodetect_alias +{ + struct autodetect_alias *next; + const char *name; + const char * const *encodings_to_try; +}; + +static const char * const autodetect_utf8_try[] = +{ + /* Try UTF-8 first. There are very few ISO-8859-1 inputs that would + be valid UTF-8, but many UTF-8 inputs are valid ISO-8859-1. */ + "UTF-8", "ISO-8859-1", + NULL +}; +static const char * const autodetect_jp_try[] = +{ + /* Try 7-bit encoding first. If the input contains bytes >= 0x80, + it will fail. + Try EUC-JP next. Short SHIFT_JIS inputs may come out wrong. This + is unavoidable. People will condemn SHIFT_JIS. + If we tried SHIFT_JIS first, then some short EUC-JP inputs would + come out wrong, and people would condemn EUC-JP and Unix, which + would not be good. + Finally try SHIFT_JIS. */ + "ISO-2022-JP-2", "EUC-JP", "SHIFT_JIS", + NULL +}; +static const char * const autodetect_kr_try[] = +{ + /* Try 7-bit encoding first. If the input contains bytes >= 0x80, + it will fail. + Finally try EUC-KR. */ + "ISO-2022-KR", "EUC-KR", + NULL +}; + +static struct autodetect_alias autodetect_predefined[] = +{ + { &autodetect_predefined[1], "autodetect_utf8", autodetect_utf8_try }, + { &autodetect_predefined[2], "autodetect_jp", autodetect_jp_try }, + { NULL, "autodetect_kr", autodetect_kr_try } +}; + +static struct autodetect_alias *autodetect_list = &autodetect_predefined[0]; +static struct autodetect_alias **autodetect_list_end = + &autodetect_predefined[SIZEOF(autodetect_predefined)-1].next; + +int +uniconv_register_autodetect (const char *name, + const char * const *try_in_order) +{ + size_t namelen; + size_t listlen; + size_t memneed; + size_t i; + char *memory; + struct autodetect_alias *new_alias; + char *new_name; + const char **new_try_in_order; + + /* The TRY_IN_ORDER list must not be empty. */ + if (try_in_order[0] == NULL) + { + errno = EINVAL; + return -1; + } + + /* We must deep-copy NAME and TRY_IN_ORDER, because they may be allocated + with dynamic extent. */ + namelen = strlen (name) + 1; + memneed = sizeof (struct autodetect_alias) + namelen + sizeof (char *); + for (i = 0; try_in_order[i] != NULL; i++) + memneed += sizeof (char *) + strlen (try_in_order[i]) + 1; + listlen = i; + + memory = (char *) malloc (memneed); + if (memory != NULL) + { + new_alias = (struct autodetect_alias *) memory; + memory += sizeof (struct autodetect_alias); + + new_try_in_order = (const char **) memory; + memory += (listlen + 1) * sizeof (char *); + + new_name = (char *) memory; + memcpy (new_name, name, namelen); + memory += namelen; + + for (i = 0; i < listlen; i++) + { + size_t len = strlen (try_in_order[i]) + 1; + memcpy (memory, try_in_order[i], len); + new_try_in_order[i] = (const char *) memory; + memory += len; + } + new_try_in_order[i] = NULL; + + /* Now insert the new alias. */ + new_alias->name = new_name; + new_alias->encodings_to_try = new_try_in_order; + new_alias->next = NULL; + /* FIXME: Not multithread-safe. */ + *autodetect_list_end = new_alias; + autodetect_list_end = &new_alias->next; + return 0; + } + else + { + errno = ENOMEM; + return -1; + } +} + +/* Like mem_iconveha, except no handling of transliteration. */ +static int +mem_iconveha_notranslit (const char *src, size_t srclen, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp) +{ + int retval = mem_iconveh (src, srclen, from_codeset, to_codeset, handler, + offsets, resultp, lengthp); + if (retval >= 0 || errno != EINVAL) + return retval; + else + { + struct autodetect_alias *alias; + + /* Unsupported from_codeset or to_codeset. Check whether the caller + requested autodetection. */ + for (alias = autodetect_list; alias != NULL; alias = alias->next) + if (strcmp (from_codeset, alias->name) == 0) + { + const char * const *encodings; + + if (handler != iconveh_error) + { + /* First try all encodings without any forgiving. */ + encodings = alias->encodings_to_try; + do + { + retval = mem_iconveha_notranslit (src, srclen, + *encodings, to_codeset, + iconveh_error, offsets, + resultp, lengthp); + if (!(retval < 0 && errno == EILSEQ)) + return retval; + encodings++; + } + while (*encodings != NULL); + } + + encodings = alias->encodings_to_try; + do + { + retval = mem_iconveha_notranslit (src, srclen, + *encodings, to_codeset, + handler, offsets, + resultp, lengthp); + if (!(retval < 0 && errno == EILSEQ)) + return retval; + encodings++; + } + while (*encodings != NULL); + + /* Return the last call's result. */ + return -1; + } + + /* It wasn't an autodetection name. */ + errno = EINVAL; + return -1; + } +} + +int +mem_iconveha (const char *src, size_t srclen, + const char *from_codeset, const char *to_codeset, + bool transliterate, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp) +{ + if (srclen == 0) + { + /* Nothing to convert. */ + *lengthp = 0; + return 0; + } + + /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5, + we want to use transliteration. */ +#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 || _LIBICONV_VERSION >= 0x0105 + if (transliterate) + { + int retval; + size_t len = strlen (to_codeset); + char *to_codeset_suffixed = (char *) malloca (len + 10 + 1); + memcpy (to_codeset_suffixed, to_codeset, len); + memcpy (to_codeset_suffixed + len, "//TRANSLIT", 10 + 1); + + retval = mem_iconveha_notranslit (src, srclen, + from_codeset, to_codeset_suffixed, + handler, offsets, resultp, lengthp); + + freea (to_codeset_suffixed); + + return retval; + } + else +#endif + return mem_iconveha_notranslit (src, srclen, + from_codeset, to_codeset, + handler, offsets, resultp, lengthp); +} + +/* Like str_iconveha, except no handling of transliteration. */ +static char * +str_iconveha_notranslit (const char *src, + const char *from_codeset, const char *to_codeset, + enum iconv_ilseq_handler handler) +{ + char *result = str_iconveh (src, from_codeset, to_codeset, handler); + + if (result != NULL || errno != EINVAL) + return result; + else + { + struct autodetect_alias *alias; + + /* Unsupported from_codeset or to_codeset. Check whether the caller + requested autodetection. */ + for (alias = autodetect_list; alias != NULL; alias = alias->next) + if (strcmp (from_codeset, alias->name) == 0) + { + const char * const *encodings; + + if (handler != iconveh_error) + { + /* First try all encodings without any forgiving. */ + encodings = alias->encodings_to_try; + do + { + result = str_iconveha_notranslit (src, + *encodings, to_codeset, + iconveh_error); + if (!(result == NULL && errno == EILSEQ)) + return result; + encodings++; + } + while (*encodings != NULL); + } + + encodings = alias->encodings_to_try; + do + { + result = str_iconveha_notranslit (src, + *encodings, to_codeset, + handler); + if (!(result == NULL && errno == EILSEQ)) + return result; + encodings++; + } + while (*encodings != NULL); + + /* Return the last call's result. */ + return NULL; + } + + /* It wasn't an autodetection name. */ + errno = EINVAL; + return NULL; + } +} + +char * +str_iconveha (const char *src, + const char *from_codeset, const char *to_codeset, + bool transliterate, + enum iconv_ilseq_handler handler) +{ + if (*src == '\0' || c_strcasecmp (from_codeset, to_codeset) == 0) + { + char *result = strdup (src); + + if (result == NULL) + errno = ENOMEM; + return result; + } + + /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5, + we want to use transliteration. */ +#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 || _LIBICONV_VERSION >= 0x0105 + if (transliterate) + { + char *result; + size_t len = strlen (to_codeset); + char *to_codeset_suffixed = (char *) malloca (len + 10 + 1); + memcpy (to_codeset_suffixed, to_codeset, len); + memcpy (to_codeset_suffixed + len, "//TRANSLIT", 10 + 1); + + result = str_iconveha_notranslit (src, from_codeset, to_codeset_suffixed, + handler); + + freea (to_codeset_suffixed); + + return result; + } + else +#endif + return str_iconveha_notranslit (src, from_codeset, to_codeset, handler); +} diff --git a/lib/striconveha.h b/lib/striconveha.h new file mode 100644 index 00000000..c88eb52f --- /dev/null +++ b/lib/striconveha.h @@ -0,0 +1,95 @@ +/* Character set conversion with error handling and autodetection. + Copyright (C) 2002, 2005, 2007-2009 Free Software Foundation, Inc. + Written by Bruno Haible. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _STRICONVEHA_H +#define _STRICONVEHA_H + +#include +#include + +#include "iconveh.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Convert an entire string from one encoding to another, using iconv. + The original string is at [SRC,...,SRC+SRCLEN-1]. + The "from" encoding can also be a name defined for autodetection. + If TRANSLITERATE is true, transliteration will attempted to avoid conversion + errors, for iconv implementations that support this. Usually you'll choose + TRANSLITERATE = true if HANDLER != iconveh_error. + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + *RESULTP and *LENGTH should initially be a scratch buffer and its size, + or *RESULTP can initially be NULL. + May erase the contents of the memory at *RESULTP. + Return value: 0 if successful, otherwise -1 and errno set. + If successful: The resulting string is stored in *RESULTP and its length + in *LENGTHP. *RESULTP is set to a freshly allocated memory block, or is + unchanged if no dynamic memory allocation was necessary. */ +extern int + mem_iconveha (const char *src, size_t srclen, + const char *from_codeset, const char *to_codeset, + bool transliterate, + enum iconv_ilseq_handler handler, + size_t *offsets, + char **resultp, size_t *lengthp); + +/* Convert an entire string from one encoding to another, using iconv. + The original string is the NUL-terminated string starting at SRC. + Both the "from" and the "to" encoding must use a single NUL byte at the + end of the string (i.e. not UCS-2, UCS-4, UTF-16, UTF-32). + The "from" encoding can also be a name defined for autodetection. + If TRANSLITERATE is true, transliteration will attempted to avoid conversion + errors, for iconv implementations that support this. Usually you'll choose + TRANSLITERATE = true if HANDLER != iconveh_error. + Allocate a malloced memory block for the result. + Return value: the freshly allocated resulting NUL-terminated string if + successful, otherwise NULL and errno set. */ +extern char * + str_iconveha (const char *src, + const char *from_codeset, const char *to_codeset, + bool transliterate, + enum iconv_ilseq_handler handler); + + +/* In the above, FROM_CODESET can also be one of the following values: + "autodetect_utf8" supports ISO-8859-1 and UTF-8 + "autodetect_jp" supports EUC-JP, ISO-2022-JP-2 and SHIFT_JIS + "autodetect_kr" supports EUC-KR and ISO-2022-KR + More names can be defined for autodetection. */ + +/* Registers an encoding name for autodetection. + TRY_IN_ORDER is a NULL terminated list of encodings to be tried. + Returns 0 upon success, or -1 (with errno set) in case of error. + Particular errno values: ENOMEM. */ +extern int + uniconv_register_autodetect (const char *name, + const char * const *try_in_order); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _STRICONVEHA_H */ diff --git a/lib/string.in.h b/lib/string.in.h new file mode 100644 index 00000000..fe114256 --- /dev/null +++ b/lib/string.in.h @@ -0,0 +1,620 @@ +/* A GNU-like . + + Copyright (C) 1995-1996, 2001-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_STRING_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_STRING_H@ + +#ifndef _GL_STRING_H +#define _GL_STRING_H + + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +/* The attribute __pure__ was added in gcc 2.96. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) +# define __pure__ /* empty */ +# endif +#endif + + +/* The definition of GL_LINK_WARNING is copied here. */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return the first instance of C within N bytes of S, or NULL. */ +#if @GNULIB_MEMCHR@ +# if @REPLACE_MEMCHR@ +# define memchr rpl_memchr +extern void *memchr (void const *__s, int __c, size_t __n) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memchr +# define memchr(s,c,n) \ + (GL_LINK_WARNING ("memchr has platform-specific bugs - " \ + "use gnulib module memchr for portability" ), \ + memchr (s, c, n)) +#endif + +/* Return the first occurrence of NEEDLE in HAYSTACK. */ +#if @GNULIB_MEMMEM@ +# if @REPLACE_MEMMEM@ +# define memmem rpl_memmem +# endif +# if ! @HAVE_DECL_MEMMEM@ || @REPLACE_MEMMEM@ +extern void *memmem (void const *__haystack, size_t __haystack_len, + void const *__needle, size_t __needle_len) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memmem +# define memmem(a,al,b,bl) \ + (GL_LINK_WARNING ("memmem is unportable and often quadratic - " \ + "use gnulib module memmem-simple for portability, " \ + "and module memmem for speed" ), \ + memmem (a, al, b, bl)) +#endif + +/* Copy N bytes of SRC to DEST, return pointer to bytes after the + last written byte. */ +#if @GNULIB_MEMPCPY@ +# if ! @HAVE_MEMPCPY@ +extern void *mempcpy (void *restrict __dest, void const *restrict __src, + size_t __n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mempcpy +# define mempcpy(a,b,n) \ + (GL_LINK_WARNING ("mempcpy is unportable - " \ + "use gnulib module mempcpy for portability"), \ + mempcpy (a, b, n)) +#endif + +/* Search backwards through a block for a byte (specified as an int). */ +#if @GNULIB_MEMRCHR@ +# if ! @HAVE_DECL_MEMRCHR@ +extern void *memrchr (void const *, int, size_t) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef memrchr +# define memrchr(a,b,c) \ + (GL_LINK_WARNING ("memrchr is unportable - " \ + "use gnulib module memrchr for portability"), \ + memrchr (a, b, c)) +#endif + +/* Find the first occurrence of C in S. More efficient than + memchr(S,C,N), at the expense of undefined behavior if C does not + occur within N bytes. */ +#if @GNULIB_RAWMEMCHR@ +# if ! @HAVE_RAWMEMCHR@ +extern void *rawmemchr (void const *__s, int __c_in) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef rawmemchr +# define rawmemchr(a,b) \ + (GL_LINK_WARNING ("rawmemchr is unportable - " \ + "use gnulib module rawmemchr for portability"), \ + rawmemchr (a, b)) +#endif + +/* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ +#if @GNULIB_STPCPY@ +# if ! @HAVE_STPCPY@ +extern char *stpcpy (char *restrict __dst, char const *restrict __src); +# endif +#elif defined GNULIB_POSIXCHECK +# undef stpcpy +# define stpcpy(a,b) \ + (GL_LINK_WARNING ("stpcpy is unportable - " \ + "use gnulib module stpcpy for portability"), \ + stpcpy (a, b)) +#endif + +/* Copy no more than N bytes of SRC to DST, returning a pointer past the + last non-NUL byte written into DST. */ +#if @GNULIB_STPNCPY@ +# if ! @HAVE_STPNCPY@ +# define stpncpy gnu_stpncpy +extern char *stpncpy (char *restrict __dst, char const *restrict __src, + size_t __n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef stpncpy +# define stpncpy(a,b,n) \ + (GL_LINK_WARNING ("stpncpy is unportable - " \ + "use gnulib module stpncpy for portability"), \ + stpncpy (a, b, n)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strchr +# define strchr(s,c) \ + (GL_LINK_WARNING ("strchr cannot work correctly on character strings " \ + "in some multibyte locales - " \ + "use mbschr if you care about internationalization"), \ + strchr (s, c)) +#endif + +/* Find the first occurrence of C in S or the final NUL byte. */ +#if @GNULIB_STRCHRNUL@ +# if ! @HAVE_STRCHRNUL@ +extern char *strchrnul (char const *__s, int __c_in) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strchrnul +# define strchrnul(a,b) \ + (GL_LINK_WARNING ("strchrnul is unportable - " \ + "use gnulib module strchrnul for portability"), \ + strchrnul (a, b)) +#endif + +/* Duplicate S, returning an identical malloc'd string. */ +#if @GNULIB_STRDUP@ +# if @REPLACE_STRDUP@ +# undef strdup +# define strdup rpl_strdup +# endif +# if !(@HAVE_DECL_STRDUP@ || defined strdup) || @REPLACE_STRDUP@ +extern char *strdup (char const *__s); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strdup +# define strdup(a) \ + (GL_LINK_WARNING ("strdup is unportable - " \ + "use gnulib module strdup for portability"), \ + strdup (a)) +#endif + +/* Return a newly allocated copy of at most N bytes of STRING. */ +#if @GNULIB_STRNDUP@ +# if ! @HAVE_STRNDUP@ +# undef strndup +# define strndup rpl_strndup +# endif +# if ! @HAVE_STRNDUP@ || ! @HAVE_DECL_STRNDUP@ +extern char *strndup (char const *__string, size_t __n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strndup +# define strndup(a,n) \ + (GL_LINK_WARNING ("strndup is unportable - " \ + "use gnulib module strndup for portability"), \ + strndup (a, n)) +#endif + +/* Find the length (number of bytes) of STRING, but scan at most + MAXLEN bytes. If no '\0' terminator is found in that many bytes, + return MAXLEN. */ +#if @GNULIB_STRNLEN@ +# if ! @HAVE_DECL_STRNLEN@ +extern size_t strnlen (char const *__string, size_t __maxlen) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strnlen +# define strnlen(a,n) \ + (GL_LINK_WARNING ("strnlen is unportable - " \ + "use gnulib module strnlen for portability"), \ + strnlen (a, n)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strcspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strcspn +# define strcspn(s,a) \ + (GL_LINK_WARNING ("strcspn cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbscspn if you care about internationalization"), \ + strcspn (s, a)) +#endif + +/* Find the first occurrence in S of any character in ACCEPT. */ +#if @GNULIB_STRPBRK@ +# if ! @HAVE_STRPBRK@ +extern char *strpbrk (char const *__s, char const *__accept) + __attribute__ ((__pure__)); +# endif +# if defined GNULIB_POSIXCHECK +/* strpbrk() assumes the second argument is a list of single-byte characters. + Even in this simple case, it does not work with multibyte strings if the + locale encoding is GB18030 and one of the characters to be searched is a + digit. */ +# undef strpbrk +# define strpbrk(s,a) \ + (GL_LINK_WARNING ("strpbrk cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbspbrk if you care about internationalization"), \ + strpbrk (s, a)) +# endif +#elif defined GNULIB_POSIXCHECK +# undef strpbrk +# define strpbrk(s,a) \ + (GL_LINK_WARNING ("strpbrk is unportable - " \ + "use gnulib module strpbrk for portability"), \ + strpbrk (s, a)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strspn() assumes the second argument is a list of single-byte characters. + Even in this simple case, it cannot work with multibyte strings. */ +# undef strspn +# define strspn(s,a) \ + (GL_LINK_WARNING ("strspn cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbsspn if you care about internationalization"), \ + strspn (s, a)) +#endif + +#if defined GNULIB_POSIXCHECK +/* strrchr() does not work with multibyte strings if the locale encoding is + GB18030 and the character to be searched is a digit. */ +# undef strrchr +# define strrchr(s,c) \ + (GL_LINK_WARNING ("strrchr cannot work correctly on character strings " \ + "in some multibyte locales - " \ + "use mbsrchr if you care about internationalization"), \ + strrchr (s, c)) +#endif + +/* Search the next delimiter (char listed in DELIM) starting at *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP + to point to the next char after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of strtok() that is multithread-safe and supports + empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strtok_r(). */ +#if @GNULIB_STRSEP@ +# if ! @HAVE_STRSEP@ +extern char *strsep (char **restrict __stringp, char const *restrict __delim); +# endif +# if defined GNULIB_POSIXCHECK +# undef strsep +# define strsep(s,d) \ + (GL_LINK_WARNING ("strsep cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbssep if you care about internationalization"), \ + strsep (s, d)) +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsep +# define strsep(s,d) \ + (GL_LINK_WARNING ("strsep is unportable - " \ + "use gnulib module strsep for portability"), \ + strsep (s, d)) +#endif + +#if @GNULIB_STRSTR@ +# if @REPLACE_STRSTR@ +# define strstr rpl_strstr +char *strstr (const char *haystack, const char *needle) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +/* strstr() does not work with multibyte strings if the locale encoding is + different from UTF-8: + POSIX says that it operates on "strings", and "string" in POSIX is defined + as a sequence of bytes, not of characters. */ +# undef strstr +# define strstr(a,b) \ + (GL_LINK_WARNING ("strstr is quadratic on many systems, and cannot " \ + "work correctly on character strings in most " \ + "multibyte locales - " \ + "use mbsstr if you care about internationalization, " \ + "or use strstr if you care about speed"), \ + strstr (a, b)) +#endif + +/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive + comparison. */ +#if @GNULIB_STRCASESTR@ +# if @REPLACE_STRCASESTR@ +# define strcasestr rpl_strcasestr +# endif +# if ! @HAVE_STRCASESTR@ || @REPLACE_STRCASESTR@ +extern char *strcasestr (const char *haystack, const char *needle) + __attribute__ ((__pure__)); +# endif +#elif defined GNULIB_POSIXCHECK +/* strcasestr() does not work with multibyte strings: + It is a glibc extension, and glibc implements it only for unibyte + locales. */ +# undef strcasestr +# define strcasestr(a,b) \ + (GL_LINK_WARNING ("strcasestr does work correctly on character strings " \ + "in multibyte locales - " \ + "use mbscasestr if you care about " \ + "internationalization, or use c-strcasestr if you want " \ + "a locale independent function"), \ + strcasestr (a, b)) +#endif + +/* Parse S into tokens separated by characters in DELIM. + If S is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = strtok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + This is a variant of strtok() that is multithread-safe. + + For the POSIX documentation for this function, see: + http://www.opengroup.org/susv3xsh/strtok.html + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + Caveat: It doesn't work with multibyte strings unless all of the delimiter + characters are ASCII characters < 0x30. + + See also strsep(). */ +#if @GNULIB_STRTOK_R@ +# if ! @HAVE_DECL_STRTOK_R@ +extern char *strtok_r (char *restrict s, char const *restrict delim, + char **restrict save_ptr); +# endif +# if defined GNULIB_POSIXCHECK +# undef strtok_r +# define strtok_r(s,d,p) \ + (GL_LINK_WARNING ("strtok_r cannot work correctly on character strings " \ + "in multibyte locales - " \ + "use mbstok_r if you care about internationalization"), \ + strtok_r (s, d, p)) +# endif +#elif defined GNULIB_POSIXCHECK +# undef strtok_r +# define strtok_r(s,d,p) \ + (GL_LINK_WARNING ("strtok_r is unportable - " \ + "use gnulib module strtok_r for portability"), \ + strtok_r (s, d, p)) +#endif + + +/* The following functions are not specified by POSIX. They are gnulib + extensions. */ + +#if @GNULIB_MBSLEN@ +/* Return the number of multibyte characters in the character string STRING. + This considers multibyte characters, unlike strlen, which counts bytes. */ +extern size_t mbslen (const char *string); +#endif + +#if @GNULIB_MBSNLEN@ +/* Return the number of multibyte characters in the character string starting + at STRING and ending at STRING + LEN. */ +extern size_t mbsnlen (const char *string, size_t len); +#endif + +#if @GNULIB_MBSCHR@ +/* Locate the first single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# define mbschr rpl_mbschr /* avoid collision with HP-UX function */ +extern char * mbschr (const char *string, int c); +#endif + +#if @GNULIB_MBSRCHR@ +/* Locate the last single-byte character C in the character string STRING, + and return a pointer to it. Return NULL if C is not found in STRING. + Unlike strrchr(), this function works correctly in multibyte locales with + encodings such as GB18030. */ +# define mbsrchr rpl_mbsrchr /* avoid collision with HP-UX function */ +extern char * mbsrchr (const char *string, int c); +#endif + +#if @GNULIB_MBSSTR@ +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. + Unlike strstr(), this function works correctly in multibyte locales with + encodings different from UTF-8. */ +extern char * mbsstr (const char *haystack, const char *needle); +#endif + +#if @GNULIB_MBSCASECMP@ +/* Compare the character strings S1 and S2, ignoring case, returning less than, + equal to or greater than zero if S1 is lexicographically less than, equal to + or greater than S2. + Note: This function may, in multibyte locales, return 0 for strings of + different lengths! + Unlike strcasecmp(), this function works correctly in multibyte locales. */ +extern int mbscasecmp (const char *s1, const char *s2); +#endif + +#if @GNULIB_MBSNCASECMP@ +/* Compare the initial segment of the character string S1 consisting of at most + N characters with the initial segment of the character string S2 consisting + of at most N characters, ignoring case, returning less than, equal to or + greater than zero if the initial segment of S1 is lexicographically less + than, equal to or greater than the initial segment of S2. + Note: This function may, in multibyte locales, return 0 for initial segments + of different lengths! + Unlike strncasecmp(), this function works correctly in multibyte locales. + But beware that N is not a byte count but a character count! */ +extern int mbsncasecmp (const char *s1, const char *s2, size_t n); +#endif + +#if @GNULIB_MBSPCASECMP@ +/* Compare the initial segment of the character string STRING consisting of + at most mbslen (PREFIX) characters with the character string PREFIX, + ignoring case, returning less than, equal to or greater than zero if this + initial segment is lexicographically less than, equal to or greater than + PREFIX. + Note: This function may, in multibyte locales, return 0 if STRING is of + smaller length than PREFIX! + Unlike strncasecmp(), this function works correctly in multibyte + locales. */ +extern char * mbspcasecmp (const char *string, const char *prefix); +#endif + +#if @GNULIB_MBSCASESTR@ +/* Find the first occurrence of the character string NEEDLE in the character + string HAYSTACK, using case-insensitive comparison. + Note: This function may, in multibyte locales, return success even if + strlen (haystack) < strlen (needle) ! + Unlike strcasestr(), this function works correctly in multibyte locales. */ +extern char * mbscasestr (const char *haystack, const char *needle); +#endif + +#if @GNULIB_MBSCSPN@ +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strcspn(), this function works correctly in multibyte locales. */ +extern size_t mbscspn (const char *string, const char *accept); +#endif + +#if @GNULIB_MBSPBRK@ +/* Find the first occurrence in the character string STRING of any character + in the character string ACCEPT. Return the pointer to it, or NULL if none + exists. + Unlike strpbrk(), this function works correctly in multibyte locales. */ +# define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ +extern char * mbspbrk (const char *string, const char *accept); +#endif + +#if @GNULIB_MBSSPN@ +/* Find the first occurrence in the character string STRING of any character + not in the character string REJECT. Return the number of bytes from the + beginning of the string to this occurrence, or to the end of the string + if none exists. + Unlike strspn(), this function works correctly in multibyte locales. */ +extern size_t mbsspn (const char *string, const char *reject); +#endif + +#if @GNULIB_MBSSEP@ +/* Search the next delimiter (multibyte character listed in the character + string DELIM) starting at the character string *STRINGP. + If one is found, overwrite it with a NUL, and advance *STRINGP to point + to the next multibyte character after it. Otherwise, set *STRINGP to NULL. + If *STRINGP was already NULL, nothing happens. + Return the old value of *STRINGP. + + This is a variant of mbstok_r() that supports empty fields. + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbstok_r(). */ +extern char * mbssep (char **stringp, const char *delim); +#endif + +#if @GNULIB_MBSTOK_R@ +/* Parse the character string STRING into tokens separated by characters in + the character string DELIM. + If STRING is NULL, the saved pointer in SAVE_PTR is used as + the next starting point. For example: + char s[] = "-abc-=-def"; + char *sp; + x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" + x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL + x = mbstok_r(NULL, "=", &sp); // x = NULL + // s = "abc\0-def\0" + + Caveat: It modifies the original string. + Caveat: These functions cannot be used on constant strings. + Caveat: The identity of the delimiting character is lost. + + See also mbssep(). */ +extern char * mbstok_r (char *string, const char *delim, char **save_ptr); +#endif + +/* Map any int, typically from errno, into an error message. */ +#if @GNULIB_STRERROR@ +# if @REPLACE_STRERROR@ +# undef strerror +# define strerror rpl_strerror +extern char *strerror (int); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strerror +# define strerror(e) \ + (GL_LINK_WARNING ("strerror is unportable - " \ + "use gnulib module strerror to guarantee non-NULL result"), \ + strerror (e)) +#endif + +#if @GNULIB_STRSIGNAL@ +# if @REPLACE_STRSIGNAL@ +# define strsignal rpl_strsignal +# endif +# if ! @HAVE_DECL_STRSIGNAL@ || @REPLACE_STRSIGNAL@ +extern char *strsignal (int __sig); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strsignal +# define strsignal(a) \ + (GL_LINK_WARNING ("strsignal is unportable - " \ + "use gnulib module strsignal for portability"), \ + strsignal (a)) +#endif + +#if @GNULIB_STRVERSCMP@ +# if !@HAVE_STRVERSCMP@ +extern int strverscmp (const char *, const char *); +# endif +#elif defined GNULIB_POSIXCHECK +# undef strverscmp +# define strverscmp(a, b) \ + (GL_LINK_WARNING ("strverscmp is unportable - " \ + "use gnulib module strverscmp for portability"), \ + strverscmp (a, b)) +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_STRING_H */ +#endif /* _GL_STRING_H */ diff --git a/lib/unicase.h b/lib/unicase.h new file mode 100644 index 00000000..e360ef44 --- /dev/null +++ b/lib/unicase.h @@ -0,0 +1,457 @@ +/* Unicode character case mappings. + Copyright (C) 2002, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNICASE_H +#define _UNICASE_H + +#include "unitypes.h" + +/* Get bool. */ +#include + +/* Get size_t. */ +#include + +/* Get uninorm_t. */ +#include "uninorm.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* ========================================================================= */ + +/* Character case mappings. + These mappings are locale and context independent. + WARNING! These functions are not sufficient for languages such as German. + Better use the functions below that treat an entire string at once and are + language aware. */ + +/* Return the uppercase mapping of a Unicode character. */ +extern ucs4_t + uc_toupper (ucs4_t uc); + +/* Return the lowercase mapping of a Unicode character. */ +extern ucs4_t + uc_tolower (ucs4_t uc); + +/* Return the titlecase mapping of a Unicode character. */ +extern ucs4_t + uc_totitle (ucs4_t uc); + +/* ========================================================================= */ + +/* String case mappings. */ + +/* These functions are locale dependent. The iso639_language argument + identifies the language (e.g. "tr" for Turkish). NULL means to use + locale independent case mappings. */ + +/* Return the ISO 639 language code of the current locale. + Return "" if it is unknown, or in the "C" locale. */ +extern const char * + uc_locale_language (void); + +/* Conventions: + + All functions prefixed with u8_ operate on UTF-8 encoded strings. + Their unit is an uint8_t (1 byte). + + All functions prefixed with u16_ operate on UTF-16 encoded strings. + Their unit is an uint16_t (a 2-byte word). + + All functions prefixed with u32_ operate on UCS-4 encoded strings. + Their unit is an uint32_t (a 4-byte word). + + All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly + n units. + + Functions returning a string result take a (resultbuf, lengthp) argument + pair. If resultbuf is not NULL and the result fits into *lengthp units, + it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly + allocated string is returned. In both cases, *lengthp is set to the + length (number of units) of the returned string. In case of error, + NULL is returned and errno is set. */ + +/* Return the uppercase mapping of a string. + The nf argument identifies the normalization form to apply after the + case-mapping. It can also be NULL, for no normalization. */ +extern uint8_t * + u8_toupper (const uint8_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp); +extern uint16_t * + u16_toupper (const uint16_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp); +extern uint32_t * + u32_toupper (const uint32_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp); + +/* Return the lowercase mapping of a string. + The nf argument identifies the normalization form to apply after the + case-mapping. It can also be NULL, for no normalization. */ +extern uint8_t * + u8_tolower (const uint8_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp); +extern uint16_t * + u16_tolower (const uint16_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp); +extern uint32_t * + u32_tolower (const uint32_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp); + +/* Return the titlecase mapping of a string. + The nf argument identifies the normalization form to apply after the + case-mapping. It can also be NULL, for no normalization. */ +extern uint8_t * + u8_totitle (const uint8_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp); +extern uint16_t * + u16_totitle (const uint16_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp); +extern uint32_t * + u32_totitle (const uint32_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp); + +/* The case-mapping context given by a prefix string. */ +typedef struct casing_prefix_context + { + /* These fields are private, undocumented. */ + uint32_t last_char_except_ignorable; + uint32_t last_char_normal_or_above; + } + casing_prefix_context_t; +/* The case-mapping context of the empty prefix string. */ +extern LIBUNISTRING_DLL_VARIABLE const casing_prefix_context_t unicase_empty_prefix_context; +/* Return the case-mapping context of a given prefix string. */ +extern casing_prefix_context_t + u8_casing_prefix_context (const uint8_t *s, size_t n); +extern casing_prefix_context_t + u16_casing_prefix_context (const uint16_t *s, size_t n); +extern casing_prefix_context_t + u32_casing_prefix_context (const uint32_t *s, size_t n); +/* Return the case-mapping context of the prefix concat(A, S), given the + case-mapping context of the prefix A. */ +extern casing_prefix_context_t + u8_casing_prefixes_context (const uint8_t *s, size_t n, + casing_prefix_context_t a_context); +extern casing_prefix_context_t + u16_casing_prefixes_context (const uint16_t *s, size_t n, + casing_prefix_context_t a_context); +extern casing_prefix_context_t + u32_casing_prefixes_context (const uint32_t *s, size_t n, + casing_prefix_context_t a_context); + +/* The case-mapping context given by a suffix string. */ +typedef struct casing_suffix_context + { + /* These fields are private, undocumented. */ + uint32_t first_char_except_ignorable; + uint32_t bits; + } + casing_suffix_context_t; +/* The case-mapping context of the empty suffix string. */ +extern LIBUNISTRING_DLL_VARIABLE const casing_suffix_context_t unicase_empty_suffix_context; +/* Return the case-mapping context of a given suffix string. */ +extern casing_suffix_context_t + u8_casing_suffix_context (const uint8_t *s, size_t n); +extern casing_suffix_context_t + u16_casing_suffix_context (const uint16_t *s, size_t n); +extern casing_suffix_context_t + u32_casing_suffix_context (const uint32_t *s, size_t n); +/* Return the case-mapping context of the suffix concat(S, A), given the + case-mapping context of the suffix A. */ +extern casing_suffix_context_t + u8_casing_suffixes_context (const uint8_t *s, size_t n, + casing_suffix_context_t a_context); +extern casing_suffix_context_t + u16_casing_suffixes_context (const uint16_t *s, size_t n, + casing_suffix_context_t a_context); +extern casing_suffix_context_t + u32_casing_suffixes_context (const uint32_t *s, size_t n, + casing_suffix_context_t a_context); + +/* Return the uppercase mapping of a string that is surrounded by a prefix + and a suffix. */ +extern uint8_t * + u8_ct_toupper (const uint8_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp); +extern uint16_t * + u16_ct_toupper (const uint16_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp); +extern uint32_t * + u32_ct_toupper (const uint32_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp); + +/* Return the lowercase mapping of a string that is surrounded by a prefix + and a suffix. */ +extern uint8_t * + u8_ct_tolower (const uint8_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp); +extern uint16_t * + u16_ct_tolower (const uint16_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp); +extern uint32_t * + u32_ct_tolower (const uint32_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp); + +/* Return the titlecase mapping of a string that is surrounded by a prefix + and a suffix. */ +extern uint8_t * + u8_ct_totitle (const uint8_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp); +extern uint16_t * + u16_ct_totitle (const uint16_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp); +extern uint32_t * + u32_ct_totitle (const uint32_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp); + +/* Return the case folded string. + Comparing uN_casefold (S1) and uN_casefold (S2) with uN_cmp2() is equivalent + to comparing S1 and S2 with uN_casecmp(). + The nf argument identifies the normalization form to apply after the + case-mapping. It can also be NULL, for no normalization. */ +extern uint8_t * + u8_casefold (const uint8_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp); +extern uint16_t * + u16_casefold (const uint16_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp); +extern uint32_t * + u32_casefold (const uint32_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp); +/* Likewise, for a string that is surrounded by a prefix and a suffix. */ +extern uint8_t * + u8_ct_casefold (const uint8_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp); +extern uint16_t * + u16_ct_casefold (const uint16_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp); +extern uint32_t * + u32_ct_casefold (const uint32_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp); + +/* Compare S1 and S2, ignoring differences in case and normalization. + The nf argument identifies the normalization form to apply after the + case-mapping. It can also be NULL, for no normalization. + If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and + return 0. Upon failure, return -1 with errno set. */ +extern int + u8_casecmp (const uint8_t *s1, size_t n1, + const uint8_t *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp); +extern int + u16_casecmp (const uint16_t *s1, size_t n1, + const uint16_t *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp); +extern int + u32_casecmp (const uint32_t *s1, size_t n1, + const uint32_t *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp); +extern int + ulc_casecmp (const char *s1, size_t n1, + const char *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp); + +/* Convert the string S of length N to a NUL-terminated byte sequence, in such + a way that comparing uN_casexfrm (S1) and uN_casexfrm (S2) with the gnulib + function memcmp2() is equivalent to comparing S1 and S2 with uN_casecoll(). + NF must be either UNINORM_NFC, UNINORM_NFKC, or NULL for no normalization. */ +extern char * + u8_casexfrm (const uint8_t *s, size_t n, const char *iso639_language, + uninorm_t nf, char *resultbuf, size_t *lengthp); +extern char * + u16_casexfrm (const uint16_t *s, size_t n, const char *iso639_language, + uninorm_t nf, char *resultbuf, size_t *lengthp); +extern char * + u32_casexfrm (const uint32_t *s, size_t n, const char *iso639_language, + uninorm_t nf, char *resultbuf, size_t *lengthp); +extern char * + ulc_casexfrm (const char *s, size_t n, const char *iso639_language, + uninorm_t nf, char *resultbuf, size_t *lengthp); + +/* Compare S1 and S2, ignoring differences in case and normalization, using the + collation rules of the current locale. + The nf argument identifies the normalization form to apply after the + case-mapping. It must be either UNINORM_NFC or UNINORM_NFKC. It can also + be NULL, for no normalization. + If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and + return 0. Upon failure, return -1 with errno set. */ +extern int + u8_casecoll (const uint8_t *s1, size_t n1, + const uint8_t *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp); +extern int + u16_casecoll (const uint16_t *s1, size_t n1, + const uint16_t *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp); +extern int + u32_casecoll (const uint32_t *s1, size_t n1, + const uint32_t *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp); +extern int + ulc_casecoll (const char *s1, size_t n1, + const char *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp); + + +/* Set *RESULTP to true if mapping NFD(S) to upper case is a no-op, or to false + otherwise, and return 0. Upon failure, return -1 with errno set. */ +extern int + u8_is_uppercase (const uint8_t *s, size_t n, + const char *iso639_language, + bool *resultp); +extern int + u16_is_uppercase (const uint16_t *s, size_t n, + const char *iso639_language, + bool *resultp); +extern int + u32_is_uppercase (const uint32_t *s, size_t n, + const char *iso639_language, + bool *resultp); + +/* Set *RESULTP to true if mapping NFD(S) to lower case is a no-op, or to false + otherwise, and return 0. Upon failure, return -1 with errno set. */ +extern int + u8_is_lowercase (const uint8_t *s, size_t n, + const char *iso639_language, + bool *resultp); +extern int + u16_is_lowercase (const uint16_t *s, size_t n, + const char *iso639_language, + bool *resultp); +extern int + u32_is_lowercase (const uint32_t *s, size_t n, + const char *iso639_language, + bool *resultp); + +/* Set *RESULTP to true if mapping NFD(S) to title case is a no-op, or to false + otherwise, and return 0. Upon failure, return -1 with errno set. */ +extern int + u8_is_titlecase (const uint8_t *s, size_t n, + const char *iso639_language, + bool *resultp); +extern int + u16_is_titlecase (const uint16_t *s, size_t n, + const char *iso639_language, + bool *resultp); +extern int + u32_is_titlecase (const uint32_t *s, size_t n, + const char *iso639_language, + bool *resultp); + +/* Set *RESULTP to true if applying case folding to NFD(S) is a no-op, or to + false otherwise, and return 0. Upon failure, return -1 with errno set. */ +extern int + u8_is_casefolded (const uint8_t *s, size_t n, + const char *iso639_language, + bool *resultp); +extern int + u16_is_casefolded (const uint16_t *s, size_t n, + const char *iso639_language, + bool *resultp); +extern int + u32_is_casefolded (const uint32_t *s, size_t n, + const char *iso639_language, + bool *resultp); + +/* Set *RESULTP to true if case matters for S, that is, if mapping NFD(S) to + either upper case or lower case or title case is not a no-op. + Set *RESULTP to false if NFD(S) maps to itself under the upper case mapping, + under the lower case mapping, and under the title case mapping; in other + words, when NFD(S) consists entirely of caseless characters. + Upon failure, return -1 with errno set. */ +extern int + u8_is_cased (const uint8_t *s, size_t n, + const char *iso639_language, + bool *resultp); +extern int + u16_is_cased (const uint16_t *s, size_t n, + const char *iso639_language, + bool *resultp); +extern int + u32_is_cased (const uint32_t *s, size_t n, + const char *iso639_language, + bool *resultp); + + +/* ========================================================================= */ + +#ifdef __cplusplus +} +#endif + +#endif /* _UNICASE_H */ diff --git a/lib/unicase/cased.c b/lib/unicase/cased.c new file mode 100644 index 00000000..5fbf4cb7 --- /dev/null +++ b/lib/unicase/cased.c @@ -0,0 +1,53 @@ +/* Test whether a Unicode character is cased. + Copyright (C) 2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "caseprop.h" + +/* Quoting the Unicode standard: + Definition: A character is defined to be "cased" if it has the Lowercase + or Uppercase property or has a General_Category value of + Titlecase_Letter. */ + +#if 0 + +#include "unictype.h" + +bool +uc_is_cased (ucs4_t uc) +{ + return (uc_is_property_lowercase (uc) + || uc_is_property_uppercase (uc) + || uc_is_general_category (uc, UC_TITLECASE_LETTER)); +} + +#else + +#include "unictype/bitmap.h" + +/* Define u_casing_property_cased table. */ +#include "cased.h" + +bool +uc_is_cased (ucs4_t uc) +{ + return bitmap_lookup (&u_casing_property_cased, uc); +} + +#endif diff --git a/lib/unicase/cased.h b/lib/unicase/cased.h new file mode 100644 index 00000000..ea2c2eaa --- /dev/null +++ b/lib/unicase/cased.h @@ -0,0 +1,343 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Casing Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[15 << 4]; + } +u_casing_property_cased = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, + 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xF7FFFFFF, 0xFFFFFFF0, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFEFFFFF, 0x01FFFFFF, 0x00000003, 0x0000001F, + 0x00000000, 0x00000000, 0x00000020, 0x3CCF0000, + 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0x007FFFFF, 0xFFFFFFFE, + 0x000000FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, + 0x00000000, 0x00000000, 0x00000000, 0x80020000, + 0x001F0000, 0x00000000, 0x00000000, 0x00000000, + 0x3E2FFC84, 0xF21FBD50, 0x000043E0, 0xFFFFFFFF, + 0x00000018, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFC00000, 0xFFFFFFFF, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, + 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0x00003FFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000018FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, + 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, + 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000 + } +}; diff --git a/lib/unicase/casefold.h b/lib/unicase/casefold.h new file mode 100644 index 00000000..d1f434ca --- /dev/null +++ b/lib/unicase/casefold.h @@ -0,0 +1,22 @@ +/* Casefolding of Unicode characters. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include "unitypes.h" + +/* Return the casefold mapping of a Unicode character. */ +extern ucs4_t + uc_tocasefold (ucs4_t uc); diff --git a/lib/unicase/caseprop.h b/lib/unicase/caseprop.h new file mode 100644 index 00000000..f84453ec --- /dev/null +++ b/lib/unicase/caseprop.h @@ -0,0 +1,32 @@ +/* Case related properties of Unicode characters. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include +#include "unitypes.h" + +/* Determine whether a character is "cased" according to the Unicode Standard, + , section 3.13, + definition D120. */ +extern bool + uc_is_cased (ucs4_t uc); + +/* Determine whether a character is "case-ignorable" + according to the Unicode Standard, + , section 3.13, + definition D121. */ +extern bool + uc_is_case_ignorable (ucs4_t uc); diff --git a/lib/unicase/context.h b/lib/unicase/context.h new file mode 100644 index 00000000..6a35798d --- /dev/null +++ b/lib/unicase/context.h @@ -0,0 +1,65 @@ +/* Case-mapping contexts of UTF-8/UTF-16/UTF-32 substring. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +/* The context of a prefix string combines the information of the "Before C" + conditions of the Unicode Standard, + , section 3.13, + table 3-14 "Context Specification for Casing". + + casing_prefix_context_t contains the following fields: + + // Helper for evaluating the FINAL_SIGMA condition: + // Last character that was not case-ignorable. + ucs4_t last_char_except_ignorable; + + // Helper for evaluating the AFTER_SOFT_DOTTED and AFTER_I conditions: + // Last character that was of combining class 230 ("Above") or 0. + ucs4_t last_char_normal_or_above; + + Three bits would be sufficient to carry the context information, but + that would require to invoke uc_is_cased and uc_is_property_soft_dotted + ahead of time, more often than actually needed. */ + + +/* The context of a suffix string combines the information of the "After C" + conditions of the Unicode Standard, + , section 3.13, + table 3-14 "Context Specification for Casing". + + casing_suffix_context_t contains the following fields: + + // For evaluating the FINAL_SIGMA condition: + // First character that was not case-ignorable. + ucs4_t first_char_except_ignorable; + + // For evaluating the MORE_ABOVE condition: + // Bit 0 is set if the suffix contains a character of combining class + // 230 (Above) with no character of combining class 0 or 230 (Above) + // before it. + // + // For evaluating the BEFORE_DOT condition: + // Bit 1 is set if the suffix contains a COMBINING DOT ABOVE (U+0307) + // with no character of combining class 0 or 230 (Above) before it. + // + uint32_t bits; + + Three bits would be sufficient to carry the context information, but + that would require to invoke uc_is_cased ahead of time, more often than + actually needed. */ +#define SCC_MORE_ABOVE_MASK 1 +#define SCC_BEFORE_DOT_MASK 2 diff --git a/lib/unicase/empty-prefix-context.c b/lib/unicase/empty-prefix-context.c new file mode 100644 index 00000000..3c46e9e3 --- /dev/null +++ b/lib/unicase/empty-prefix-context.c @@ -0,0 +1,27 @@ +/* Case-mapping context of empty prefix string. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +const casing_prefix_context_t unicase_empty_prefix_context = + { + 0xFFFD /* last_char_except_ignorable */, + 0xFFFD /* last_char_normal_or_above */ + }; diff --git a/lib/unicase/empty-suffix-context.c b/lib/unicase/empty-suffix-context.c new file mode 100644 index 00000000..4e00bffe --- /dev/null +++ b/lib/unicase/empty-suffix-context.c @@ -0,0 +1,27 @@ +/* Case-mapping context of empty suffix string. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +const casing_suffix_context_t unicase_empty_suffix_context = + { + 0xFFFD /* first_char_except_ignorable */, + 0 /* bits */ + }; diff --git a/lib/unicase/ignorable.c b/lib/unicase/ignorable.c new file mode 100644 index 00000000..84b2634c --- /dev/null +++ b/lib/unicase/ignorable.c @@ -0,0 +1,71 @@ +/* Test whether a Unicode character is case-ignorable. + Copyright (C) 2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "caseprop.h" + +/* Quoting the Unicode standard: + Definition: A character is defined to be "case-ignorable" if it has the + value MidLetter {or the value MidNumLet} for the Word_Break property or + its General_Category is one of Nonspacing_Mark (Mn), Enclosing_Mark (Me), + Format (Cf), Modifier_Letter (Lm), or Modifier_Symbol (Sk). + The text marked in braces was added in Unicode 5.1.0, see + section "Update of + Definition of case-ignorable". */ +/* Since this predicate is only used for the "Before C" and "After C" + conditions of FINAL_SIGMA, we exclude the "cased" characters here. + This simplifies the evaluation of the regular expressions + \p{cased} (\p{case-ignorable})* C + and + C (\p{case-ignorable})* \p{cased} + */ + +#if 0 + +#include "unictype.h" +#include "uniwbrk.h" + +bool +uc_is_case_ignorable (ucs4_t uc) +{ + int wbp = uc_wordbreak_property (uc); + + return (wbp == WBP_MIDLETTER || wbp == WBP_MIDNUMLET + || uc_is_general_category_withtable (uc, UC_CATEGORY_MASK_Mn + | UC_CATEGORY_MASK_Me + | UC_CATEGORY_MASK_Cf + | UC_CATEGORY_MASK_Lm + | UC_CATEGORY_MASK_Sk)) + && !uc_is_cased (uc); +} + +#else + +#include "unictype/bitmap.h" + +/* Define u_casing_property_case_ignorable table. */ +#include "ignorable.h" + +bool +uc_is_case_ignorable (ucs4_t uc) +{ + return bitmap_lookup (&u_casing_property_case_ignorable, uc); +} + +#endif diff --git a/lib/unicase/ignorable.h b/lib/unicase/ignorable.h new file mode 100644 index 00000000..3b29290f --- /dev/null +++ b/lib/unicase/ignorable.h @@ -0,0 +1,544 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Casing Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + /*unsigned*/ int level3[30 << 4]; + } +u_casing_property_case_ignorable = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + 16 + 384 * sizeof (short) / sizeof (int) + 0, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + 16 + 384 * sizeof (short) / sizeof (int) + 80, + 16 + 384 * sizeof (short) / sizeof (int) + 96, + 16 + 384 * sizeof (short) / sizeof (int) + 112, + 16 + 384 * sizeof (short) / sizeof (int) + 128, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 160, + 16 + 384 * sizeof (short) / sizeof (int) + 176, + 16 + 384 * sizeof (short) / sizeof (int) + 192, + 16 + 384 * sizeof (short) / sizeof (int) + 208, + 16 + 384 * sizeof (short) / sizeof (int) + 224, + 16 + 384 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 256, + 16 + 384 * sizeof (short) / sizeof (int) + 272, + 16 + 384 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 304, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 320, + 16 + 384 * sizeof (short) / sizeof (int) + 336, + 16 + 384 * sizeof (short) / sizeof (int) + 352, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 368, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 384, + 16 + 384 * sizeof (short) / sizeof (int) + 400, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 416, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 432, + 16 + 384 * sizeof (short) / sizeof (int) + 448, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 464, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x04004080, 0x40000000, 0x00000001, + 0x00000000, 0x0190A100, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFE000000, 0xFFFFFFFC, 0xFFFFFFE0, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFDF, 0x0030FFFF, + 0x000000B0, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000003F8, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x02000000, 0x00000000, + 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00100000, + 0x07FF000F, 0x00000000, 0x7FFFF801, 0x00010000, + 0x00000000, 0x00000000, 0xFFC00000, 0x00003DFF, + 0x00028000, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x00000000, 0x0001FFC0, 0x00000000, 0x043FF800, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000006, 0x10000000, 0x001E21FE, 0x0002000C, + 0x00000002, 0x10000000, 0x0000201E, 0x0000000C, + 0x00000006, 0x10000000, 0x00023986, 0x00230000, + 0x00000006, 0x10000000, 0x000021BE, 0x0000000C, + 0x00000002, 0x90000000, 0x0040201E, 0x0000000C, + 0x00000004, 0x00000000, 0x00002001, 0x00000000, + 0x00000000, 0xC0000000, 0x00603DC1, 0x0000000C, + 0x00000000, 0x90000000, 0x00003040, 0x0000000C, + 0x00000000, 0x00000000, 0x0000201E, 0x0000000C, + 0x00000000, 0x00000000, 0x005C0400, 0x00000000, + 0x00000000, 0x07F20000, 0x00007FC0, 0x00000000, + 0x00000000, 0x1BF20000, 0x00003F40, 0x00000000, + 0x03000000, 0x02A00000, 0x00000000, 0x7FFE0000, + 0xFEFF00DF, 0x1FFFFFFF, 0x00000040, 0x00000000, + 0x00000000, 0x66FDE000, 0xC3000000, 0x001E0001, + 0x00002064, 0x00000000, 0x00000000, 0x10000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, + 0x00000000, 0x3FB00000, 0x208FFE40, 0x00000000, + 0x00003800, 0x00000000, 0x00000008, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x0E040187, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x01800000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000F, 0x17D00000, 0x00000004, 0x000FF800, + 0x00000003, 0x0000033C, 0x00000000, 0x00000000, + 0x00000000, 0x00CFF000, 0x00000000, 0x3F000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xC000007F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, + 0x0300F800, 0x00007C90, 0x00000000, 0x0000FC1F, + 0x00000000, 0x00000000, 0xFFFF0000, 0x0001FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00008000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x00000000, 0x00008000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000020, 0x083EFC00, 0x00000000, 0x00000000, + 0x7E000000, 0x00000000, 0x00000000, 0x70000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00200000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00001000, 0x00000000, 0x00000000, 0xB0078000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x00000003, 0x00000000, 0x00000000, + 0x00000700, 0x00000000, 0x00000000, 0x00000000, + 0x00000844, 0x00000060, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000010, 0x00000000, + 0x00000000, 0x00003FC0, 0x0003FF80, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00667E00, 0x00001008, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x40000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0008FFFF, 0x0000007F, 0x00240000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0x04004080, 0x40000000, 0x00000001, 0x00010000, + 0xC0000000, 0x00000000, 0x00000000, 0x0E000008, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFF80380, + 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000001C, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF + } +}; diff --git a/lib/unicase/invariant.h b/lib/unicase/invariant.h new file mode 100644 index 00000000..20151433 --- /dev/null +++ b/lib/unicase/invariant.h @@ -0,0 +1,45 @@ +/* Internal functions for Unicode character case mappings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include +#include + +#include "unitypes.h" +#include "uninorm.h" + +/* Return true if mapping NFD(S) to via MAPPING is a no-op. */ +extern int + u8_is_invariant (const uint8_t *s, size_t n, + uint8_t * (*mapping) (const uint8_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp), + const char *iso639_language, + bool *resultp); +extern int + u16_is_invariant (const uint16_t *s, size_t n, + uint16_t * (*mapping) (const uint16_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp), + const char *iso639_language, + bool *resultp); +extern int + u32_is_invariant (const uint32_t *s, size_t n, + uint32_t * (*mapping) (const uint32_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp), + const char *iso639_language, + bool *resultp); diff --git a/lib/unicase/locale-language.c b/lib/unicase/locale-language.c new file mode 100644 index 00000000..074baa41 --- /dev/null +++ b/lib/unicase/locale-language.c @@ -0,0 +1,55 @@ +/* Language code of current locale. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "localename.h" + +#include "unicase/locale-languages.h" + +const char * +uc_locale_language (void) +{ + const char *locale_name = gl_locale_name (LC_CTYPE, "LC_CTYPE"); + const char *p; + + /* Find the end of the language portion. */ + p = locale_name; + while (*p != '\0' && *p != '_' && *p != '.' && *p != '@') + p++; + + /* Return a statically allocated pointer to the language portion, so that the + caller of this function does not need to free() the result. + We could use a dynamically built unification table. But given that the + set of possible languages is small, it is easier (and excludes ENOMEM + error conditions) to allocate the unification table statically. */ + if (p != locale_name) + { + const char *language = + uc_locale_languages_lookup (locale_name, p - locale_name); + if (language != NULL) + return language; + } + + return ""; +} diff --git a/lib/unicase/locale-languages.gperf b/lib/unicase/locale-languages.gperf new file mode 100644 index 00000000..da0d94e7 --- /dev/null +++ b/lib/unicase/locale-languages.gperf @@ -0,0 +1,270 @@ +%language=ANSI-C +%define hash-function-name uc_locale_language_hash +%define lookup-function-name uc_locale_languages_lookup +%compare-lengths +%compare-strncmp +%readonly-tables +%pic +/* List of languages taken from gettext/gettext-tools/src/lang-table.c + on 2009-02-07. */ +%% +"aa", /* Afar" */ +"ab", /* Abkhazian" */ +"ace", /* Achinese" */ +"ae", /* Avestan" */ +"af", /* Afrikaans" */ +"ak", /* Akan" */ +"am", /* Amharic" */ +"an", /* Aragonese" */ +"ang", /* Old English" */ +"ar", /* Arabic" */ +"as", /* Assamese" */ +"ast", /* Asturian" */ +"av", /* Avaric" */ +"awa", /* Awadhi" */ +"ay", /* Aymara" */ +"az", /* Azerbaijani" */ +"ba", /* Bashkir" */ +"bal", /* Baluchi" */ +"ban", /* Balinese" */ +"be", /* Belarusian" */ +"bej", /* Beja" */ +"bem", /* Bemba" */ +"bg", /* Bulgarian" */ +"bh", /* Bihari" */ +"bho", /* Bhojpuri" */ +"bi", /* Bislama" */ +"bik", /* Bikol" */ +"bin", /* Bini" */ +"bm", /* Bambara" */ +"bn", /* Bengali" */ +"bo", /* Tibetan" */ +"br", /* Breton" */ +"bs", /* Bosnian" */ +"bug", /* Buginese" */ +"ca", /* Catalan" */ +"ce", /* Chechen" */ +"ceb", /* Cebuano" */ +"ch", /* Chamorro" */ +"co", /* Corsican" */ +"cr", /* Cree" */ +"crh", /* Crimean Tatar" */ +"cs", /* Czech" */ +"csb", /* Kashubian" */ +"cu", /* Church Slavic" */ +"cv", /* Chuvash" */ +"cy", /* Welsh" */ +"da", /* Danish" */ +"de", /* German" */ +"din", /* Dinka" */ +"doi", /* Dogri" */ +"dv", /* Divehi" */ +"dz", /* Dzongkha" */ +"ee", /* Ewe" */ +"el", /* Greek" */ +"en", /* English" */ +"eo", /* Esperanto" */ +"es", /* Spanish" */ +"et", /* Estonian" */ +"eu", /* Basque" */ +"fa", /* Persian" */ +"ff", /* Fulah" */ +"fi", /* Finnish" */ +"fil", /* Filipino" */ +"fj", /* Fijian" */ +"fo", /* Faroese" */ +"fon", /* Fon" */ +"fr", /* French" */ +"fur", /* Friulian" */ +"fy", /* Western Frisian" */ +"ga", /* Irish" */ +"gd", /* Scottish Gaelic" */ +"gl", /* Galician" */ +"gn", /* Guarani" */ +"gon", /* Gondi" */ +"gsw", /* Swiss German" */ +"gu", /* Gujarati" */ +"gv", /* Manx" */ +"ha", /* Hausa" */ +"he", /* Hebrew" */ +"hi", /* Hindi" */ +"hil", /* Hiligaynon" */ +"hmn", /* Hmong" */ +"ho", /* Hiri Motu" */ +"hr", /* Croatian" */ +"ht", /* Haitian" */ +"hu", /* Hungarian" */ +"hy", /* Armenian" */ +"hz", /* Herero" */ +"ia", /* Interlingua" */ +"id", /* Indonesian" */ +"ie", /* Interlingue" */ +"ig", /* Igbo" */ +"ii", /* Sichuan Yi" */ +"ik", /* Inupiak" */ +"ilo", /* Iloko" */ +"is", /* Icelandic" */ +"it", /* Italian" */ +"iu", /* Inuktitut" */ +"ja", /* Japanese" */ +"jab", /* Hyam" */ +"jv", /* Javanese" */ +"ka", /* Georgian" */ +"kab", /* Kabyle" */ +"kaj", /* Jju" */ +"kam", /* Kamba" */ +"kbd", /* Kabardian" */ +"kcg", /* Tyap" */ +"kdm", /* Kagoma" */ +"kg", /* Kongo" */ +"ki", /* Kikuyu" */ +"kj", /* Kuanyama" */ +"kk", /* Kazakh" */ +"kl", /* Kalaallisut" */ +"km", /* Central Khmer" */ +"kmb", /* Kimbundu" */ +"kn", /* Kannada" */ +"ko", /* Korean" */ +"kr", /* Kanuri" */ +"kru", /* Kurukh" */ +"ks", /* Kashmiri" */ +"ku", /* Kurdish" */ +"kv", /* Komi" */ +"kw", /* Cornish" */ +"ky", /* Kirghiz" */ +"kok", /* Konkani" */ +"la", /* Latin" */ +"lb", /* Letzeburgesch" */ +"lg", /* Ganda" */ +"li", /* Limburgish" */ +"ln", /* Lingala" */ +"lo", /* Laotian" */ +"lt", /* Lithuanian" */ +"lu", /* Luba-Katanga" */ +"lua", /* Luba-Lulua" */ +"luo", /* Luo" */ +"lv", /* Latvian" */ +"mad", /* Madurese" */ +"mag", /* Magahi" */ +"mai", /* Maithili" */ +"mak", /* Makasar" */ +"man", /* Mandingo" */ +"men", /* Mende" */ +"mg", /* Malagasy" */ +"mh", /* Marshallese" */ +"mi", /* Maori" */ +"min", /* Minangkabau" */ +"mk", /* Macedonian" */ +"ml", /* Malayalam" */ +"mn", /* Mongolian" */ +"mni", /* Manipuri" */ +"mo", /* Moldavian" */ +"mos", /* Mossi" */ +"mr", /* Marathi" */ +"ms", /* Malay" */ +"mt", /* Maltese" */ +"mwr", /* Marwari" */ +"my", /* Burmese" */ +"myn", /* Mayan" */ +"na", /* Nauru" */ +"nap", /* Neapolitan" */ +"nah", /* Nahuatl" */ +"nb", /* Norwegian Bokmal" */ +"nd", /* North Ndebele" */ +"nds", /* Low Saxon" */ +"ne", /* Nepali" */ +"ng", /* Ndonga" */ +"nl", /* Dutch" */ +"nn", /* Norwegian Nynorsk" */ +"no", /* Norwegian" */ +"nr", /* South Ndebele" */ +"nso", /* Northern Sotho" */ +"nv", /* Navajo" */ +"ny", /* Nyanja" */ +"nym", /* Nyamwezi" */ +"nyn", /* Nyankole" */ +"oc", /* Occitan" */ +"oj", /* Ojibwa" */ +"om", /* (Afan) Oromo" */ +"or", /* Oriya" */ +"os", /* Ossetian" */ +"pa", /* Punjabi" */ +"pag", /* Pangasinan" */ +"pam", /* Pampanga" */ +"pap", /* Papiamento" */ +"pbb", /* Páez" */ +"pi", /* Pali" */ +"pl", /* Polish" */ +"ps", /* Pashto" */ +"pt", /* Portuguese" */ +"qu", /* Quechua" */ +"raj", /* Rajasthani" */ +"rm", /* Romansh" */ +"rn", /* Kirundi" */ +"ro", /* Romanian" */ +"ru", /* Russian" */ +"rw", /* Kinyarwanda" */ +"sa", /* Sanskrit" */ +"sas", /* Sasak" */ +"sat", /* Santali" */ +"sc", /* Sardinian" */ +"scn", /* Sicilian" */ +"sd", /* Sindhi" */ +"se", /* Northern Sami" */ +"sg", /* Sango" */ +"shn", /* Shan" */ +"si", /* Sinhala" */ +"sid", /* Sidamo" */ +"sk", /* Slovak" */ +"sl", /* Slovenian" */ +"sm", /* Samoan" */ +"sn", /* Shona" */ +"so", /* Somali" */ +"sq", /* Albanian" */ +"sr", /* Serbian" */ +"srr", /* Serer" */ +"ss", /* Siswati" */ +"st", /* Sesotho" */ +"su", /* Sundanese" */ +"suk", /* Sukuma" */ +"sus", /* Susu" */ +"sv", /* Swedish" */ +"sw", /* Swahili" */ +"ta", /* Tamil" */ +"te", /* Telugu" */ +"tem", /* Timne" */ +"tet", /* Tetum" */ +"tg", /* Tajik" */ +"th", /* Thai" */ +"ti", /* Tigrinya" */ +"tiv", /* Tiv" */ +"tk", /* Turkmen" */ +"tl", /* Tagalog" */ +"tn", /* Setswana" */ +"to", /* Tonga" */ +"tr", /* Turkish" */ +"ts", /* Tsonga" */ +"tt", /* Tatar" */ +"tum", /* Tumbuka" */ +"tw", /* Twi" */ +"ty", /* Tahitian" */ +"ug", /* Uighur" */ +"uk", /* Ukrainian" */ +"umb", /* Umbundu" */ +"ur", /* Urdu" */ +"uz", /* Uzbek" */ +"ve", /* Venda" */ +"vi", /* Vietnamese" */ +"vo", /* Volapuk" */ +"wal", /* Walamo" */ +"war", /* Waray" */ +"wen", /* Sorbian" */ +"wo", /* Wolof" */ +"xh", /* Xhosa" */ +"yao", /* Yao" */ +"yi", /* Yiddish" */ +"yo", /* Yoruba" */ +"za", /* Zhuang" */ +"zh", /* Chinese" */ +"zu", /* Zulu" */ +"zap", /* Zapotec" */ diff --git a/lib/unicase/locale-languages.h b/lib/unicase/locale-languages.h new file mode 100644 index 00000000..96c241be --- /dev/null +++ b/lib/unicase/locale-languages.h @@ -0,0 +1,1034 @@ +/* ANSI-C code produced by gperf version 3.0.4 */ +/* Command-line: gperf -m 10 ./unicase/locale-languages.gperf */ +/* Computed positions: -k'1-3' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + + +#define TOTAL_KEYWORDS 260 +#define MIN_WORD_LENGTH 2 +#define MAX_WORD_LENGTH 3 +#define MIN_HASH_VALUE 4 +#define MAX_HASH_VALUE 461 +/* maximum key range = 458, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +uc_locale_language_hash (register const char *str, register unsigned int len) +{ + static const unsigned short asso_values[] = + { + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 4, + 48, 12, 35, 124, 222, 107, 187, 191, 145, 241, + 11, 73, 0, 114, 4, 66, 213, 88, 2, 25, + 31, 209, 10, 160, 157, 154, 247, 175, 96, 462, + 0, 34, 49, 227, 52, 187, 245, 462, 207, 231, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462 + }; + register int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[2]+2]; + /*FALLTHROUGH*/ + case 2: + hval += asso_values[(unsigned char)str[1]+17]; + /*FALLTHROUGH*/ + case 1: + hval += asso_values[(unsigned char)str[0]+3]; + break; + } + return hval; +} + +#ifdef __GNUC__ +__inline +#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const char * +uc_locale_languages_lookup (register const char *str, register unsigned int len) +{ + struct stringpool_t + { + char stringpool_str4[sizeof("sq")]; + char stringpool_str5[sizeof("men")]; + char stringpool_str6[sizeof("se")]; + char stringpool_str7[sizeof("man")]; + char stringpool_str8[sizeof("sa")]; + char stringpool_str11[sizeof("sat")]; + char stringpool_str12[sizeof("mi")]; + char stringpool_str13[sizeof("min")]; + char stringpool_str14[sizeof("si")]; + char stringpool_str15[sizeof("wen")]; + char stringpool_str16[sizeof("be")]; + char stringpool_str17[sizeof("ka")]; + char stringpool_str18[sizeof("ba")]; + char stringpool_str19[sizeof("ban")]; + char stringpool_str23[sizeof("ki")]; + char stringpool_str24[sizeof("bi")]; + char stringpool_str25[sizeof("bin")]; + char stringpool_str28[sizeof("wal")]; + char stringpool_str29[sizeof("te")]; + char stringpool_str30[sizeof("bal")]; + char stringpool_str31[sizeof("ta")]; + char stringpool_str32[sizeof("tet")]; + char stringpool_str33[sizeof("mg")]; + char stringpool_str35[sizeof("sg")]; + char stringpool_str36[sizeof("mr")]; + char stringpool_str37[sizeof("ti")]; + char stringpool_str38[sizeof("sr")]; + char stringpool_str39[sizeof("ce")]; + char stringpool_str40[sizeof("or")]; + char stringpool_str41[sizeof("ca")]; + char stringpool_str42[sizeof("mad")]; + char stringpool_str44[sizeof("kg")]; + char stringpool_str45[sizeof("bg")]; + char stringpool_str47[sizeof("kr")]; + char stringpool_str48[sizeof("br")]; + char stringpool_str50[sizeof("sid")]; + char stringpool_str51[sizeof("ms")]; + char stringpool_str52[sizeof("ae")]; + char stringpool_str53[sizeof("ss")]; + char stringpool_str54[sizeof("aa")]; + char stringpool_str55[sizeof("os")]; + char stringpool_str56[sizeof("su")]; + char stringpool_str58[sizeof("tg")]; + char stringpool_str61[sizeof("tr")]; + char stringpool_str62[sizeof("ks")]; + char stringpool_str63[sizeof("bs")]; + char stringpool_str64[sizeof("ug")]; + char stringpool_str65[sizeof("ku")]; + char stringpool_str66[sizeof("kab")]; + char stringpool_str67[sizeof("ur")]; + char stringpool_str69[sizeof("tiv")]; + char stringpool_str71[sizeof("cr")]; + char stringpool_str72[sizeof("pa")]; + char stringpool_str73[sizeof("kru")]; + char stringpool_str75[sizeof("af")]; + char stringpool_str76[sizeof("ts")]; + char stringpool_str77[sizeof("pap")]; + char stringpool_str78[sizeof("pi")]; + char stringpool_str79[sizeof("la")]; + char stringpool_str84[sizeof("ar")]; + char stringpool_str85[sizeof("li")]; + char stringpool_str86[sizeof("cs")]; + char stringpool_str88[sizeof("ceb")]; + char stringpool_str89[sizeof("cu")]; + char stringpool_str90[sizeof("bem")]; + char stringpool_str91[sizeof("kam")]; + char stringpool_str92[sizeof("sd")]; + char stringpool_str97[sizeof("sas")]; + char stringpool_str98[sizeof("mo")]; + char stringpool_str99[sizeof("as")]; + char stringpool_str100[sizeof("so")]; + char stringpool_str102[sizeof("ast")]; + char stringpool_str103[sizeof("tem")]; + char stringpool_str106[sizeof("lg")]; + char stringpool_str108[sizeof("wo")]; + char stringpool_str109[sizeof("ko")]; + char stringpool_str110[sizeof("bo")]; + char stringpool_str113[sizeof("fa")]; + char stringpool_str114[sizeof("mag")]; + char stringpool_str115[sizeof("kbd")]; + char stringpool_str116[sizeof("ab")]; + char stringpool_str117[sizeof("ps")]; + char stringpool_str118[sizeof("ne")]; + char stringpool_str119[sizeof("fi")]; + char stringpool_str120[sizeof("na")]; + char stringpool_str123[sizeof("to")]; + char stringpool_str125[sizeof("nap")]; + char stringpool_str127[sizeof("lu")]; + char stringpool_str128[sizeof("de")]; + char stringpool_str130[sizeof("da")]; + char stringpool_str131[sizeof("fil")]; + char stringpool_str132[sizeof("lua")]; + char stringpool_str133[sizeof("co")]; + char stringpool_str134[sizeof("ff")]; + char stringpool_str135[sizeof("csb")]; + char stringpool_str137[sizeof("din")]; + char stringpool_str141[sizeof("lb")]; + char stringpool_str142[sizeof("ru")]; + char stringpool_str143[sizeof("fr")]; + char stringpool_str145[sizeof("sus")]; + char stringpool_str146[sizeof("pam")]; + char stringpool_str147[sizeof("ng")]; + char stringpool_str149[sizeof("ie")]; + char stringpool_str150[sizeof("nr")]; + char stringpool_str151[sizeof("ia")]; + char stringpool_str153[sizeof("tum")]; + char stringpool_str156[sizeof("ml")]; + char stringpool_str157[sizeof("ii")]; + char stringpool_str158[sizeof("sl")]; + char stringpool_str159[sizeof("mk")]; + char stringpool_str160[sizeof("za")]; + char stringpool_str161[sizeof("sk")]; + char stringpool_str162[sizeof("bej")]; + char stringpool_str163[sizeof("kaj")]; + char stringpool_str165[sizeof("zap")]; + char stringpool_str166[sizeof("oj")]; + char stringpool_str167[sizeof("kl")]; + char stringpool_str169[sizeof("yi")]; + char stringpool_str170[sizeof("kk")]; + char stringpool_str171[sizeof("lo")]; + char stringpool_str173[sizeof("kj")]; + char stringpool_str174[sizeof("bug")]; + char stringpool_str175[sizeof("kdm")]; + char stringpool_str177[sizeof("mn")]; + char stringpool_str178[sizeof("ig")]; + char stringpool_str179[sizeof("sn")]; + char stringpool_str180[sizeof("pag")]; + char stringpool_str181[sizeof("tl")]; + char stringpool_str182[sizeof("nb")]; + char stringpool_str183[sizeof("pbb")]; + char stringpool_str184[sizeof("tk")]; + char stringpool_str186[sizeof("ro")]; + char stringpool_str187[sizeof("mos")]; + char stringpool_str188[sizeof("kn")]; + char stringpool_str189[sizeof("bn")]; + char stringpool_str190[sizeof("uk")]; + char stringpool_str191[sizeof("sv")]; + char stringpool_str193[sizeof("ga")]; + char stringpool_str195[sizeof("he")]; + char stringpool_str196[sizeof("is")]; + char stringpool_str197[sizeof("ha")]; + char stringpool_str198[sizeof("mai")]; + char stringpool_str199[sizeof("iu")]; + char stringpool_str200[sizeof("kv")]; + char stringpool_str202[sizeof("tn")]; + char stringpool_str203[sizeof("hi")]; + char stringpool_str204[sizeof("nd")]; + char stringpool_str205[sizeof("fo")]; + char stringpool_str206[sizeof("fon")]; + char stringpool_str207[sizeof("ak")]; + char stringpool_str208[sizeof("zu")]; + char stringpool_str209[sizeof("my")]; + char stringpool_str210[sizeof("myn")]; + char stringpool_str211[sizeof("mh")]; + char stringpool_str212[sizeof("no")]; + char stringpool_str213[sizeof("ve")]; + char stringpool_str214[sizeof("shn")]; + char stringpool_str215[sizeof("hil")]; + char stringpool_str217[sizeof("sc")]; + char stringpool_str218[sizeof("scn")]; + char stringpool_str219[sizeof("oc")]; + char stringpool_str220[sizeof("ky")]; + char stringpool_str221[sizeof("vi")]; + char stringpool_str222[sizeof("pl")]; + char stringpool_str223[sizeof("bh")]; + char stringpool_str224[sizeof("cv")]; + char stringpool_str225[sizeof("an")]; + char stringpool_str226[sizeof("ee")]; + char stringpool_str227[sizeof("hr")]; + char stringpool_str229[sizeof("mt")]; + char stringpool_str230[sizeof("war")]; + char stringpool_str231[sizeof("st")]; + char stringpool_str234[sizeof("ty")]; + char stringpool_str235[sizeof("id")]; + char stringpool_str236[sizeof("th")]; + char stringpool_str237[sizeof("av")]; + char stringpool_str240[sizeof("raj")]; + char stringpool_str241[sizeof("gu")]; + char stringpool_str242[sizeof("luo")]; + char stringpool_str244[sizeof("cy")]; + char stringpool_str245[sizeof("hu")]; + char stringpool_str246[sizeof("ch")]; + char stringpool_str247[sizeof("ja")]; + char stringpool_str248[sizeof("mak")]; + char stringpool_str249[sizeof("sw")]; + char stringpool_str250[sizeof("ln")]; + char stringpool_str251[sizeof("sm")]; + char stringpool_str252[sizeof("srr")]; + char stringpool_str253[sizeof("om")]; + char stringpool_str254[sizeof("tt")]; + char stringpool_str255[sizeof("yo")]; + char stringpool_str257[sizeof("ay")]; + char stringpool_str258[sizeof("kw")]; + char stringpool_str259[sizeof("crh")]; + char stringpool_str260[sizeof("km")]; + char stringpool_str261[sizeof("bm")]; + char stringpool_str262[sizeof("lv")]; + char stringpool_str264[sizeof("uz")]; + char stringpool_str265[sizeof("rn")]; + char stringpool_str266[sizeof("bik")]; + char stringpool_str267[sizeof("qu")]; + char stringpool_str269[sizeof("fj")]; + char stringpool_str270[sizeof("nl")]; + char stringpool_str272[sizeof("tw")]; + char stringpool_str273[sizeof("es")]; + char stringpool_str276[sizeof("eu")]; + char stringpool_str277[sizeof("gd")]; + char stringpool_str278[sizeof("yao")]; + char stringpool_str280[sizeof("nso")]; + char stringpool_str281[sizeof("az")]; + char stringpool_str286[sizeof("gon")]; + char stringpool_str289[sizeof("ho")]; + char stringpool_str291[sizeof("nn")]; + char stringpool_str293[sizeof("nds")]; + char stringpool_str295[sizeof("pt")]; + char stringpool_str296[sizeof("jab")]; + char stringpool_str297[sizeof("am")]; + char stringpool_str298[sizeof("suk")]; + char stringpool_str300[sizeof("awa")]; + char stringpool_str302[sizeof("lt")]; + char stringpool_str303[sizeof("nv")]; + char stringpool_str304[sizeof("ik")]; + char stringpool_str307[sizeof("vo")]; + char stringpool_str308[sizeof("nah")]; + char stringpool_str309[sizeof("kmb")]; + char stringpool_str313[sizeof("dv")]; + char stringpool_str316[sizeof("fy")]; + char stringpool_str320[sizeof("eo")]; + char stringpool_str323[sizeof("ny")]; + char stringpool_str324[sizeof("nyn")]; + char stringpool_str329[sizeof("umb")]; + char stringpool_str333[sizeof("ang")]; + char stringpool_str334[sizeof("kcg")]; + char stringpool_str335[sizeof("rw")]; + char stringpool_str337[sizeof("rm")]; + char stringpool_str338[sizeof("bho")]; + char stringpool_str343[sizeof("gl")]; + char stringpool_str351[sizeof("kok")]; + char stringpool_str357[sizeof("dz")]; + char stringpool_str364[sizeof("gn")]; + char stringpool_str365[sizeof("zh")]; + char stringpool_str369[sizeof("mni")]; + char stringpool_str371[sizeof("xh")]; + char stringpool_str374[sizeof("it")]; + char stringpool_str375[sizeof("fur")]; + char stringpool_str376[sizeof("gv")]; + char stringpool_str378[sizeof("el")]; + char stringpool_str388[sizeof("ace")]; + char stringpool_str397[sizeof("nym")]; + char stringpool_str399[sizeof("en")]; + char stringpool_str400[sizeof("hy")]; + char stringpool_str414[sizeof("doi")]; + char stringpool_str416[sizeof("ilo")]; + char stringpool_str420[sizeof("ht")]; + char stringpool_str424[sizeof("hz")]; + char stringpool_str430[sizeof("jv")]; + char stringpool_str441[sizeof("hmn")]; + char stringpool_str448[sizeof("gsw")]; + char stringpool_str451[sizeof("et")]; + char stringpool_str461[sizeof("mwr")]; + }; + static const struct stringpool_t stringpool_contents = + { + "sq", + "men", + "se", + "man", + "sa", + "sat", + "mi", + "min", + "si", + "wen", + "be", + "ka", + "ba", + "ban", + "ki", + "bi", + "bin", + "wal", + "te", + "bal", + "ta", + "tet", + "mg", + "sg", + "mr", + "ti", + "sr", + "ce", + "or", + "ca", + "mad", + "kg", + "bg", + "kr", + "br", + "sid", + "ms", + "ae", + "ss", + "aa", + "os", + "su", + "tg", + "tr", + "ks", + "bs", + "ug", + "ku", + "kab", + "ur", + "tiv", + "cr", + "pa", + "kru", + "af", + "ts", + "pap", + "pi", + "la", + "ar", + "li", + "cs", + "ceb", + "cu", + "bem", + "kam", + "sd", + "sas", + "mo", + "as", + "so", + "ast", + "tem", + "lg", + "wo", + "ko", + "bo", + "fa", + "mag", + "kbd", + "ab", + "ps", + "ne", + "fi", + "na", + "to", + "nap", + "lu", + "de", + "da", + "fil", + "lua", + "co", + "ff", + "csb", + "din", + "lb", + "ru", + "fr", + "sus", + "pam", + "ng", + "ie", + "nr", + "ia", + "tum", + "ml", + "ii", + "sl", + "mk", + "za", + "sk", + "bej", + "kaj", + "zap", + "oj", + "kl", + "yi", + "kk", + "lo", + "kj", + "bug", + "kdm", + "mn", + "ig", + "sn", + "pag", + "tl", + "nb", + "pbb", + "tk", + "ro", + "mos", + "kn", + "bn", + "uk", + "sv", + "ga", + "he", + "is", + "ha", + "mai", + "iu", + "kv", + "tn", + "hi", + "nd", + "fo", + "fon", + "ak", + "zu", + "my", + "myn", + "mh", + "no", + "ve", + "shn", + "hil", + "sc", + "scn", + "oc", + "ky", + "vi", + "pl", + "bh", + "cv", + "an", + "ee", + "hr", + "mt", + "war", + "st", + "ty", + "id", + "th", + "av", + "raj", + "gu", + "luo", + "cy", + "hu", + "ch", + "ja", + "mak", + "sw", + "ln", + "sm", + "srr", + "om", + "tt", + "yo", + "ay", + "kw", + "crh", + "km", + "bm", + "lv", + "uz", + "rn", + "bik", + "qu", + "fj", + "nl", + "tw", + "es", + "eu", + "gd", + "yao", + "nso", + "az", + "gon", + "ho", + "nn", + "nds", + "pt", + "jab", + "am", + "suk", + "awa", + "lt", + "nv", + "ik", + "vo", + "nah", + "kmb", + "dv", + "fy", + "eo", + "ny", + "nyn", + "umb", + "ang", + "kcg", + "rw", + "rm", + "bho", + "gl", + "kok", + "dz", + "gn", + "zh", + "mni", + "xh", + "it", + "fur", + "gv", + "el", + "ace", + "nym", + "en", + "hy", + "doi", + "ilo", + "ht", + "hz", + "jv", + "hmn", + "gsw", + "et", + "mwr" + }; + #define stringpool ((const char *) &stringpool_contents) + static const unsigned char lengthtable[] = + { + 0, 0, 0, 0, 2, 3, 2, 3, 2, 0, 0, 3, 2, 3, + 2, 3, 2, 2, 2, 3, 0, 0, 0, 2, 2, 3, 0, 0, + 3, 2, 3, 2, 3, 2, 0, 2, 2, 2, 2, 2, 2, 2, + 3, 0, 2, 2, 0, 2, 2, 0, 3, 2, 2, 2, 2, 2, + 2, 0, 2, 0, 0, 2, 2, 2, 2, 2, 3, 2, 0, 3, + 0, 2, 2, 3, 0, 2, 2, 3, 2, 2, 0, 0, 0, 0, + 2, 2, 2, 0, 3, 2, 3, 3, 2, 0, 0, 0, 0, 3, + 2, 2, 2, 0, 3, 3, 0, 0, 2, 0, 2, 2, 2, 0, + 0, 2, 3, 3, 2, 2, 2, 2, 2, 0, 0, 2, 0, 3, + 0, 2, 2, 0, 2, 3, 3, 2, 2, 3, 0, 3, 0, 0, + 0, 2, 2, 2, 0, 3, 3, 2, 0, 2, 2, 2, 0, 3, + 0, 0, 2, 2, 2, 2, 2, 2, 3, 3, 0, 3, 2, 2, + 0, 2, 2, 2, 0, 2, 3, 3, 0, 2, 2, 2, 3, 2, + 2, 3, 2, 0, 2, 3, 2, 2, 2, 2, 0, 2, 0, 2, + 2, 2, 3, 2, 2, 0, 2, 2, 2, 2, 3, 2, 2, 2, + 3, 2, 2, 2, 3, 3, 0, 2, 3, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 0, 2, 3, 2, 0, 0, 2, 2, 2, 2, + 0, 0, 3, 2, 3, 0, 2, 2, 2, 2, 3, 2, 2, 2, + 3, 2, 2, 2, 0, 2, 2, 3, 2, 2, 2, 0, 2, 2, + 3, 2, 0, 2, 2, 0, 2, 2, 0, 0, 2, 2, 3, 0, + 3, 2, 0, 0, 0, 0, 3, 0, 0, 2, 0, 2, 0, 3, + 0, 2, 3, 2, 3, 0, 3, 0, 2, 2, 2, 0, 0, 2, + 3, 3, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 2, 0, + 0, 2, 3, 0, 0, 0, 0, 3, 0, 0, 0, 3, 3, 2, + 0, 2, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, + 2, 2, 0, 0, 0, 3, 0, 2, 0, 0, 2, 3, 2, 0, + 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 0, 2, 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, + 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3 + }; + static const int wordlist[] = + { + -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str4, + (int)(long)&((struct stringpool_t *)0)->stringpool_str5, + (int)(long)&((struct stringpool_t *)0)->stringpool_str6, + (int)(long)&((struct stringpool_t *)0)->stringpool_str7, + (int)(long)&((struct stringpool_t *)0)->stringpool_str8, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str11, + (int)(long)&((struct stringpool_t *)0)->stringpool_str12, + (int)(long)&((struct stringpool_t *)0)->stringpool_str13, + (int)(long)&((struct stringpool_t *)0)->stringpool_str14, + (int)(long)&((struct stringpool_t *)0)->stringpool_str15, + (int)(long)&((struct stringpool_t *)0)->stringpool_str16, + (int)(long)&((struct stringpool_t *)0)->stringpool_str17, + (int)(long)&((struct stringpool_t *)0)->stringpool_str18, + (int)(long)&((struct stringpool_t *)0)->stringpool_str19, + -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str23, + (int)(long)&((struct stringpool_t *)0)->stringpool_str24, + (int)(long)&((struct stringpool_t *)0)->stringpool_str25, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str28, + (int)(long)&((struct stringpool_t *)0)->stringpool_str29, + (int)(long)&((struct stringpool_t *)0)->stringpool_str30, + (int)(long)&((struct stringpool_t *)0)->stringpool_str31, + (int)(long)&((struct stringpool_t *)0)->stringpool_str32, + (int)(long)&((struct stringpool_t *)0)->stringpool_str33, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str35, + (int)(long)&((struct stringpool_t *)0)->stringpool_str36, + (int)(long)&((struct stringpool_t *)0)->stringpool_str37, + (int)(long)&((struct stringpool_t *)0)->stringpool_str38, + (int)(long)&((struct stringpool_t *)0)->stringpool_str39, + (int)(long)&((struct stringpool_t *)0)->stringpool_str40, + (int)(long)&((struct stringpool_t *)0)->stringpool_str41, + (int)(long)&((struct stringpool_t *)0)->stringpool_str42, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str44, + (int)(long)&((struct stringpool_t *)0)->stringpool_str45, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str47, + (int)(long)&((struct stringpool_t *)0)->stringpool_str48, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str50, + (int)(long)&((struct stringpool_t *)0)->stringpool_str51, + (int)(long)&((struct stringpool_t *)0)->stringpool_str52, + (int)(long)&((struct stringpool_t *)0)->stringpool_str53, + (int)(long)&((struct stringpool_t *)0)->stringpool_str54, + (int)(long)&((struct stringpool_t *)0)->stringpool_str55, + (int)(long)&((struct stringpool_t *)0)->stringpool_str56, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str58, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str61, + (int)(long)&((struct stringpool_t *)0)->stringpool_str62, + (int)(long)&((struct stringpool_t *)0)->stringpool_str63, + (int)(long)&((struct stringpool_t *)0)->stringpool_str64, + (int)(long)&((struct stringpool_t *)0)->stringpool_str65, + (int)(long)&((struct stringpool_t *)0)->stringpool_str66, + (int)(long)&((struct stringpool_t *)0)->stringpool_str67, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str69, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str71, + (int)(long)&((struct stringpool_t *)0)->stringpool_str72, + (int)(long)&((struct stringpool_t *)0)->stringpool_str73, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str75, + (int)(long)&((struct stringpool_t *)0)->stringpool_str76, + (int)(long)&((struct stringpool_t *)0)->stringpool_str77, + (int)(long)&((struct stringpool_t *)0)->stringpool_str78, + (int)(long)&((struct stringpool_t *)0)->stringpool_str79, + -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str84, + (int)(long)&((struct stringpool_t *)0)->stringpool_str85, + (int)(long)&((struct stringpool_t *)0)->stringpool_str86, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str88, + (int)(long)&((struct stringpool_t *)0)->stringpool_str89, + (int)(long)&((struct stringpool_t *)0)->stringpool_str90, + (int)(long)&((struct stringpool_t *)0)->stringpool_str91, + (int)(long)&((struct stringpool_t *)0)->stringpool_str92, + -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str97, + (int)(long)&((struct stringpool_t *)0)->stringpool_str98, + (int)(long)&((struct stringpool_t *)0)->stringpool_str99, + (int)(long)&((struct stringpool_t *)0)->stringpool_str100, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str102, + (int)(long)&((struct stringpool_t *)0)->stringpool_str103, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str106, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str108, + (int)(long)&((struct stringpool_t *)0)->stringpool_str109, + (int)(long)&((struct stringpool_t *)0)->stringpool_str110, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str113, + (int)(long)&((struct stringpool_t *)0)->stringpool_str114, + (int)(long)&((struct stringpool_t *)0)->stringpool_str115, + (int)(long)&((struct stringpool_t *)0)->stringpool_str116, + (int)(long)&((struct stringpool_t *)0)->stringpool_str117, + (int)(long)&((struct stringpool_t *)0)->stringpool_str118, + (int)(long)&((struct stringpool_t *)0)->stringpool_str119, + (int)(long)&((struct stringpool_t *)0)->stringpool_str120, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str123, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str125, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str127, + (int)(long)&((struct stringpool_t *)0)->stringpool_str128, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str130, + (int)(long)&((struct stringpool_t *)0)->stringpool_str131, + (int)(long)&((struct stringpool_t *)0)->stringpool_str132, + (int)(long)&((struct stringpool_t *)0)->stringpool_str133, + (int)(long)&((struct stringpool_t *)0)->stringpool_str134, + (int)(long)&((struct stringpool_t *)0)->stringpool_str135, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str137, + -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str141, + (int)(long)&((struct stringpool_t *)0)->stringpool_str142, + (int)(long)&((struct stringpool_t *)0)->stringpool_str143, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str145, + (int)(long)&((struct stringpool_t *)0)->stringpool_str146, + (int)(long)&((struct stringpool_t *)0)->stringpool_str147, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str149, + (int)(long)&((struct stringpool_t *)0)->stringpool_str150, + (int)(long)&((struct stringpool_t *)0)->stringpool_str151, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str153, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str156, + (int)(long)&((struct stringpool_t *)0)->stringpool_str157, + (int)(long)&((struct stringpool_t *)0)->stringpool_str158, + (int)(long)&((struct stringpool_t *)0)->stringpool_str159, + (int)(long)&((struct stringpool_t *)0)->stringpool_str160, + (int)(long)&((struct stringpool_t *)0)->stringpool_str161, + (int)(long)&((struct stringpool_t *)0)->stringpool_str162, + (int)(long)&((struct stringpool_t *)0)->stringpool_str163, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str165, + (int)(long)&((struct stringpool_t *)0)->stringpool_str166, + (int)(long)&((struct stringpool_t *)0)->stringpool_str167, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str169, + (int)(long)&((struct stringpool_t *)0)->stringpool_str170, + (int)(long)&((struct stringpool_t *)0)->stringpool_str171, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str173, + (int)(long)&((struct stringpool_t *)0)->stringpool_str174, + (int)(long)&((struct stringpool_t *)0)->stringpool_str175, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str177, + (int)(long)&((struct stringpool_t *)0)->stringpool_str178, + (int)(long)&((struct stringpool_t *)0)->stringpool_str179, + (int)(long)&((struct stringpool_t *)0)->stringpool_str180, + (int)(long)&((struct stringpool_t *)0)->stringpool_str181, + (int)(long)&((struct stringpool_t *)0)->stringpool_str182, + (int)(long)&((struct stringpool_t *)0)->stringpool_str183, + (int)(long)&((struct stringpool_t *)0)->stringpool_str184, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str186, + (int)(long)&((struct stringpool_t *)0)->stringpool_str187, + (int)(long)&((struct stringpool_t *)0)->stringpool_str188, + (int)(long)&((struct stringpool_t *)0)->stringpool_str189, + (int)(long)&((struct stringpool_t *)0)->stringpool_str190, + (int)(long)&((struct stringpool_t *)0)->stringpool_str191, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str193, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str195, + (int)(long)&((struct stringpool_t *)0)->stringpool_str196, + (int)(long)&((struct stringpool_t *)0)->stringpool_str197, + (int)(long)&((struct stringpool_t *)0)->stringpool_str198, + (int)(long)&((struct stringpool_t *)0)->stringpool_str199, + (int)(long)&((struct stringpool_t *)0)->stringpool_str200, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str202, + (int)(long)&((struct stringpool_t *)0)->stringpool_str203, + (int)(long)&((struct stringpool_t *)0)->stringpool_str204, + (int)(long)&((struct stringpool_t *)0)->stringpool_str205, + (int)(long)&((struct stringpool_t *)0)->stringpool_str206, + (int)(long)&((struct stringpool_t *)0)->stringpool_str207, + (int)(long)&((struct stringpool_t *)0)->stringpool_str208, + (int)(long)&((struct stringpool_t *)0)->stringpool_str209, + (int)(long)&((struct stringpool_t *)0)->stringpool_str210, + (int)(long)&((struct stringpool_t *)0)->stringpool_str211, + (int)(long)&((struct stringpool_t *)0)->stringpool_str212, + (int)(long)&((struct stringpool_t *)0)->stringpool_str213, + (int)(long)&((struct stringpool_t *)0)->stringpool_str214, + (int)(long)&((struct stringpool_t *)0)->stringpool_str215, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str217, + (int)(long)&((struct stringpool_t *)0)->stringpool_str218, + (int)(long)&((struct stringpool_t *)0)->stringpool_str219, + (int)(long)&((struct stringpool_t *)0)->stringpool_str220, + (int)(long)&((struct stringpool_t *)0)->stringpool_str221, + (int)(long)&((struct stringpool_t *)0)->stringpool_str222, + (int)(long)&((struct stringpool_t *)0)->stringpool_str223, + (int)(long)&((struct stringpool_t *)0)->stringpool_str224, + (int)(long)&((struct stringpool_t *)0)->stringpool_str225, + (int)(long)&((struct stringpool_t *)0)->stringpool_str226, + (int)(long)&((struct stringpool_t *)0)->stringpool_str227, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str229, + (int)(long)&((struct stringpool_t *)0)->stringpool_str230, + (int)(long)&((struct stringpool_t *)0)->stringpool_str231, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str234, + (int)(long)&((struct stringpool_t *)0)->stringpool_str235, + (int)(long)&((struct stringpool_t *)0)->stringpool_str236, + (int)(long)&((struct stringpool_t *)0)->stringpool_str237, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str240, + (int)(long)&((struct stringpool_t *)0)->stringpool_str241, + (int)(long)&((struct stringpool_t *)0)->stringpool_str242, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str244, + (int)(long)&((struct stringpool_t *)0)->stringpool_str245, + (int)(long)&((struct stringpool_t *)0)->stringpool_str246, + (int)(long)&((struct stringpool_t *)0)->stringpool_str247, + (int)(long)&((struct stringpool_t *)0)->stringpool_str248, + (int)(long)&((struct stringpool_t *)0)->stringpool_str249, + (int)(long)&((struct stringpool_t *)0)->stringpool_str250, + (int)(long)&((struct stringpool_t *)0)->stringpool_str251, + (int)(long)&((struct stringpool_t *)0)->stringpool_str252, + (int)(long)&((struct stringpool_t *)0)->stringpool_str253, + (int)(long)&((struct stringpool_t *)0)->stringpool_str254, + (int)(long)&((struct stringpool_t *)0)->stringpool_str255, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str257, + (int)(long)&((struct stringpool_t *)0)->stringpool_str258, + (int)(long)&((struct stringpool_t *)0)->stringpool_str259, + (int)(long)&((struct stringpool_t *)0)->stringpool_str260, + (int)(long)&((struct stringpool_t *)0)->stringpool_str261, + (int)(long)&((struct stringpool_t *)0)->stringpool_str262, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str264, + (int)(long)&((struct stringpool_t *)0)->stringpool_str265, + (int)(long)&((struct stringpool_t *)0)->stringpool_str266, + (int)(long)&((struct stringpool_t *)0)->stringpool_str267, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str269, + (int)(long)&((struct stringpool_t *)0)->stringpool_str270, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str272, + (int)(long)&((struct stringpool_t *)0)->stringpool_str273, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str276, + (int)(long)&((struct stringpool_t *)0)->stringpool_str277, + (int)(long)&((struct stringpool_t *)0)->stringpool_str278, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str280, + (int)(long)&((struct stringpool_t *)0)->stringpool_str281, + -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str286, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str289, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str291, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str293, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str295, + (int)(long)&((struct stringpool_t *)0)->stringpool_str296, + (int)(long)&((struct stringpool_t *)0)->stringpool_str297, + (int)(long)&((struct stringpool_t *)0)->stringpool_str298, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str300, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str302, + (int)(long)&((struct stringpool_t *)0)->stringpool_str303, + (int)(long)&((struct stringpool_t *)0)->stringpool_str304, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str307, + (int)(long)&((struct stringpool_t *)0)->stringpool_str308, + (int)(long)&((struct stringpool_t *)0)->stringpool_str309, + -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str313, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str316, + -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str320, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str323, + (int)(long)&((struct stringpool_t *)0)->stringpool_str324, + -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str329, + -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str333, + (int)(long)&((struct stringpool_t *)0)->stringpool_str334, + (int)(long)&((struct stringpool_t *)0)->stringpool_str335, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str337, + (int)(long)&((struct stringpool_t *)0)->stringpool_str338, + -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str343, + -1, -1, -1, -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str351, + -1, -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str357, + -1, -1, -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str364, + (int)(long)&((struct stringpool_t *)0)->stringpool_str365, + -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str369, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str371, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str374, + (int)(long)&((struct stringpool_t *)0)->stringpool_str375, + (int)(long)&((struct stringpool_t *)0)->stringpool_str376, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str378, + -1, -1, -1, -1, -1, -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str388, + -1, -1, -1, -1, -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str397, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str399, + (int)(long)&((struct stringpool_t *)0)->stringpool_str400, + -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str414, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str416, + -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str420, + -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str424, + -1, -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str430, + -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str441, + -1, -1, -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str448, + -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str451, + -1, -1, -1, -1, -1, -1, -1, -1, -1, + (int)(long)&((struct stringpool_t *)0)->stringpool_str461 + }; + + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = uc_locale_language_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + if (len == lengthtable[key]) + { + register const char *s = wordlist[key] + stringpool; + + if (*str == *s && !memcmp (str + 1, s + 1, len - 1)) + return s; + } + } + return 0; +} diff --git a/lib/unicase/simple-mapping.h b/lib/unicase/simple-mapping.h new file mode 100644 index 00000000..44cecc81 --- /dev/null +++ b/lib/unicase/simple-mapping.h @@ -0,0 +1,39 @@ +/* Simple case mapping for Unicode characters. + Copyright (C) 2002, 2006, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +ucs4_t +FUNC (ucs4_t uc) +{ + unsigned int index1 = uc >> mapping_header_0; + if (index1 < mapping_header_1) + { + int lookup1 = u_mapping.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> mapping_header_2) & mapping_header_3; + int lookup2 = u_mapping.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc & mapping_header_4); + int lookup3 = u_mapping.level3[lookup2 + index3]; + + return uc + lookup3; + } + } + } + return uc; +} diff --git a/lib/unicase/special-casing-table.gperf b/lib/unicase/special-casing-table.gperf new file mode 100644 index 00000000..78e8fcdd --- /dev/null +++ b/lib/unicase/special-casing-table.gperf @@ -0,0 +1,136 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Special casing rules of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 5.1.0. */ +struct special_casing_rule { char code[3]; }; +%struct-type +%language=ANSI-C +%define slot-name code +%define hash-function-name gl_unicase_special_hash +%define lookup-function-name gl_unicase_special_lookup +%compare-lengths +%compare-strncmp +%readonly-tables +%omit-struct-type +%% +"\x00\x49\x00", 1, SCC_MORE_ABOVE , { 'l', 't' }, { 0x0049, 0, 0 }, { 0x0069, 0x0307, 0 }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 } +"\x00\x49\x01", 1, -SCC_BEFORE_DOT , { 't', 'r' }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } +"\x00\x49\x02", 1, -SCC_BEFORE_DOT , { 'a', 'z' }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } +"\x00\x49\x03", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } +"\x00\x49\x04", 0, SCC_ALWAYS , { 'a', 'z' }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 } +"\x00\x4a\x00", 0, SCC_MORE_ABOVE , { 'l', 't' }, { 0x004A, 0, 0 }, { 0x006A, 0x0307, 0 }, { 0x004A, 0, 0 }, { 0x006A, 0, 0 } +"\x00\x69\x00", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } +"\x00\x69\x01", 0, SCC_ALWAYS , { 'a', 'z' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } +"\x00\xcc\x00", 0, SCC_ALWAYS , { 'l', 't' }, { 0x00CC, 0, 0 }, { 0x0069, 0x0307, 0x0300 }, { 0x00CC, 0, 0 }, { 0x00EC, 0, 0 } +"\x00\xcd\x00", 0, SCC_ALWAYS , { 'l', 't' }, { 0x00CD, 0, 0 }, { 0x0069, 0x0307, 0x0301 }, { 0x00CD, 0, 0 }, { 0x00ED, 0, 0 } +"\x00\xdf\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0053, 0 }, { 0x00DF, 0, 0 }, { 0x0053, 0x0073, 0 }, { 0x0073, 0x0073, 0 } +"\x01\x28\x00", 0, SCC_ALWAYS , { 'l', 't' }, { 0x0128, 0, 0 }, { 0x0069, 0x0307, 0x0303 }, { 0x0128, 0, 0 }, { 0x0129, 0, 0 } +"\x01\x2e\x00", 0, SCC_MORE_ABOVE , { 'l', 't' }, { 0x012E, 0, 0 }, { 0x012F, 0x0307, 0 }, { 0x012E, 0, 0 }, { 0x012F, 0, 0 } +"\x01\x30\x00", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } +"\x01\x30\x01", 1, SCC_ALWAYS , { 'a', 'z' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 } +"\x01\x30\x02", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0130, 0, 0 }, { 0x0069, 0x0307, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0x0307, 0 } +"\x01\x49\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x02BC, 0x004E, 0 }, { 0x0149, 0, 0 }, { 0x02BC, 0x004E, 0 }, { 0x02BC, 0x006E, 0 } +"\x01\xf0\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x004A, 0x030C, 0 }, { 0x01F0, 0, 0 }, { 0x004A, 0x030C, 0 }, { 0x006A, 0x030C, 0 } +"\x03\x07\x00", 1, SCC_AFTER_SOFT_DOTTED, { 'l', 't' }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 } +"\x03\x07\x01", 1, SCC_AFTER_I , { 't', 'r' }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0x0307, 0, 0 } +"\x03\x07\x02", 0, SCC_AFTER_I , { 'a', 'z' }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0x0307, 0, 0 } +"\x03\x90\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0301 }, { 0x0390, 0, 0 }, { 0x0399, 0x0308, 0x0301 }, { 0x03B9, 0x0308, 0x0301 } +"\x03\xa3\x00", 0, SCC_FINAL_SIGMA , { '\0', '\0' }, { 0x03A3, 0, 0 }, { 0x03C2, 0, 0 }, { 0x03A3, 0, 0 }, { 0x03C3, 0, 0 } +"\x03\xb0\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0301 }, { 0x03B0, 0, 0 }, { 0x03A5, 0x0308, 0x0301 }, { 0x03C5, 0x0308, 0x0301 } +"\x05\x87\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0535, 0x0552, 0 }, { 0x0587, 0, 0 }, { 0x0535, 0x0582, 0 }, { 0x0565, 0x0582, 0 } +"\x1e\x96\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0048, 0x0331, 0 }, { 0x1E96, 0, 0 }, { 0x0048, 0x0331, 0 }, { 0x0068, 0x0331, 0 } +"\x1e\x97\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0054, 0x0308, 0 }, { 0x1E97, 0, 0 }, { 0x0054, 0x0308, 0 }, { 0x0074, 0x0308, 0 } +"\x1e\x98\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0057, 0x030A, 0 }, { 0x1E98, 0, 0 }, { 0x0057, 0x030A, 0 }, { 0x0077, 0x030A, 0 } +"\x1e\x99\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0059, 0x030A, 0 }, { 0x1E99, 0, 0 }, { 0x0059, 0x030A, 0 }, { 0x0079, 0x030A, 0 } +"\x1e\x9a\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0041, 0x02BE, 0 }, { 0x1E9A, 0, 0 }, { 0x0041, 0x02BE, 0 }, { 0x0061, 0x02BE, 0 } +"\x1e\x9e\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1E9E, 0, 0 }, { 0x00DF, 0, 0 }, { 0x1E9E, 0, 0 }, { 0x0073, 0x0073, 0 } +"\x1f\x50\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0 }, { 0x1F50, 0, 0 }, { 0x03A5, 0x0313, 0 }, { 0x03C5, 0x0313, 0 } +"\x1f\x52\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0300 }, { 0x1F52, 0, 0 }, { 0x03A5, 0x0313, 0x0300 }, { 0x03C5, 0x0313, 0x0300 } +"\x1f\x54\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0301 }, { 0x1F54, 0, 0 }, { 0x03A5, 0x0313, 0x0301 }, { 0x03C5, 0x0313, 0x0301 } +"\x1f\x56\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0342 }, { 0x1F56, 0, 0 }, { 0x03A5, 0x0313, 0x0342 }, { 0x03C5, 0x0313, 0x0342 } +"\x1f\x80\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F08, 0x0399, 0 }, { 0x1F80, 0, 0 }, { 0x1F88, 0, 0 }, { 0x1F00, 0x03B9, 0 } +"\x1f\x81\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F09, 0x0399, 0 }, { 0x1F81, 0, 0 }, { 0x1F89, 0, 0 }, { 0x1F01, 0x03B9, 0 } +"\x1f\x82\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0A, 0x0399, 0 }, { 0x1F82, 0, 0 }, { 0x1F8A, 0, 0 }, { 0x1F02, 0x03B9, 0 } +"\x1f\x83\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0B, 0x0399, 0 }, { 0x1F83, 0, 0 }, { 0x1F8B, 0, 0 }, { 0x1F03, 0x03B9, 0 } +"\x1f\x84\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0C, 0x0399, 0 }, { 0x1F84, 0, 0 }, { 0x1F8C, 0, 0 }, { 0x1F04, 0x03B9, 0 } +"\x1f\x85\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0D, 0x0399, 0 }, { 0x1F85, 0, 0 }, { 0x1F8D, 0, 0 }, { 0x1F05, 0x03B9, 0 } +"\x1f\x86\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0E, 0x0399, 0 }, { 0x1F86, 0, 0 }, { 0x1F8E, 0, 0 }, { 0x1F06, 0x03B9, 0 } +"\x1f\x87\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0F, 0x0399, 0 }, { 0x1F87, 0, 0 }, { 0x1F8F, 0, 0 }, { 0x1F07, 0x03B9, 0 } +"\x1f\x88\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F08, 0x0399, 0 }, { 0x1F80, 0, 0 }, { 0x1F88, 0, 0 }, { 0x1F00, 0x03B9, 0 } +"\x1f\x89\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F09, 0x0399, 0 }, { 0x1F81, 0, 0 }, { 0x1F89, 0, 0 }, { 0x1F01, 0x03B9, 0 } +"\x1f\x8a\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0A, 0x0399, 0 }, { 0x1F82, 0, 0 }, { 0x1F8A, 0, 0 }, { 0x1F02, 0x03B9, 0 } +"\x1f\x8b\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0B, 0x0399, 0 }, { 0x1F83, 0, 0 }, { 0x1F8B, 0, 0 }, { 0x1F03, 0x03B9, 0 } +"\x1f\x8c\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0C, 0x0399, 0 }, { 0x1F84, 0, 0 }, { 0x1F8C, 0, 0 }, { 0x1F04, 0x03B9, 0 } +"\x1f\x8d\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0D, 0x0399, 0 }, { 0x1F85, 0, 0 }, { 0x1F8D, 0, 0 }, { 0x1F05, 0x03B9, 0 } +"\x1f\x8e\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0E, 0x0399, 0 }, { 0x1F86, 0, 0 }, { 0x1F8E, 0, 0 }, { 0x1F06, 0x03B9, 0 } +"\x1f\x8f\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0F, 0x0399, 0 }, { 0x1F87, 0, 0 }, { 0x1F8F, 0, 0 }, { 0x1F07, 0x03B9, 0 } +"\x1f\x90\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F28, 0x0399, 0 }, { 0x1F90, 0, 0 }, { 0x1F98, 0, 0 }, { 0x1F20, 0x03B9, 0 } +"\x1f\x91\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F29, 0x0399, 0 }, { 0x1F91, 0, 0 }, { 0x1F99, 0, 0 }, { 0x1F21, 0x03B9, 0 } +"\x1f\x92\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2A, 0x0399, 0 }, { 0x1F92, 0, 0 }, { 0x1F9A, 0, 0 }, { 0x1F22, 0x03B9, 0 } +"\x1f\x93\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2B, 0x0399, 0 }, { 0x1F93, 0, 0 }, { 0x1F9B, 0, 0 }, { 0x1F23, 0x03B9, 0 } +"\x1f\x94\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2C, 0x0399, 0 }, { 0x1F94, 0, 0 }, { 0x1F9C, 0, 0 }, { 0x1F24, 0x03B9, 0 } +"\x1f\x95\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2D, 0x0399, 0 }, { 0x1F95, 0, 0 }, { 0x1F9D, 0, 0 }, { 0x1F25, 0x03B9, 0 } +"\x1f\x96\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2E, 0x0399, 0 }, { 0x1F96, 0, 0 }, { 0x1F9E, 0, 0 }, { 0x1F26, 0x03B9, 0 } +"\x1f\x97\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2F, 0x0399, 0 }, { 0x1F97, 0, 0 }, { 0x1F9F, 0, 0 }, { 0x1F27, 0x03B9, 0 } +"\x1f\x98\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F28, 0x0399, 0 }, { 0x1F90, 0, 0 }, { 0x1F98, 0, 0 }, { 0x1F20, 0x03B9, 0 } +"\x1f\x99\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F29, 0x0399, 0 }, { 0x1F91, 0, 0 }, { 0x1F99, 0, 0 }, { 0x1F21, 0x03B9, 0 } +"\x1f\x9a\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2A, 0x0399, 0 }, { 0x1F92, 0, 0 }, { 0x1F9A, 0, 0 }, { 0x1F22, 0x03B9, 0 } +"\x1f\x9b\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2B, 0x0399, 0 }, { 0x1F93, 0, 0 }, { 0x1F9B, 0, 0 }, { 0x1F23, 0x03B9, 0 } +"\x1f\x9c\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2C, 0x0399, 0 }, { 0x1F94, 0, 0 }, { 0x1F9C, 0, 0 }, { 0x1F24, 0x03B9, 0 } +"\x1f\x9d\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2D, 0x0399, 0 }, { 0x1F95, 0, 0 }, { 0x1F9D, 0, 0 }, { 0x1F25, 0x03B9, 0 } +"\x1f\x9e\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2E, 0x0399, 0 }, { 0x1F96, 0, 0 }, { 0x1F9E, 0, 0 }, { 0x1F26, 0x03B9, 0 } +"\x1f\x9f\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2F, 0x0399, 0 }, { 0x1F97, 0, 0 }, { 0x1F9F, 0, 0 }, { 0x1F27, 0x03B9, 0 } +"\x1f\xa0\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F68, 0x0399, 0 }, { 0x1FA0, 0, 0 }, { 0x1FA8, 0, 0 }, { 0x1F60, 0x03B9, 0 } +"\x1f\xa1\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F69, 0x0399, 0 }, { 0x1FA1, 0, 0 }, { 0x1FA9, 0, 0 }, { 0x1F61, 0x03B9, 0 } +"\x1f\xa2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6A, 0x0399, 0 }, { 0x1FA2, 0, 0 }, { 0x1FAA, 0, 0 }, { 0x1F62, 0x03B9, 0 } +"\x1f\xa3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6B, 0x0399, 0 }, { 0x1FA3, 0, 0 }, { 0x1FAB, 0, 0 }, { 0x1F63, 0x03B9, 0 } +"\x1f\xa4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6C, 0x0399, 0 }, { 0x1FA4, 0, 0 }, { 0x1FAC, 0, 0 }, { 0x1F64, 0x03B9, 0 } +"\x1f\xa5\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6D, 0x0399, 0 }, { 0x1FA5, 0, 0 }, { 0x1FAD, 0, 0 }, { 0x1F65, 0x03B9, 0 } +"\x1f\xa6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6E, 0x0399, 0 }, { 0x1FA6, 0, 0 }, { 0x1FAE, 0, 0 }, { 0x1F66, 0x03B9, 0 } +"\x1f\xa7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6F, 0x0399, 0 }, { 0x1FA7, 0, 0 }, { 0x1FAF, 0, 0 }, { 0x1F67, 0x03B9, 0 } +"\x1f\xa8\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F68, 0x0399, 0 }, { 0x1FA0, 0, 0 }, { 0x1FA8, 0, 0 }, { 0x1F60, 0x03B9, 0 } +"\x1f\xa9\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F69, 0x0399, 0 }, { 0x1FA1, 0, 0 }, { 0x1FA9, 0, 0 }, { 0x1F61, 0x03B9, 0 } +"\x1f\xaa\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6A, 0x0399, 0 }, { 0x1FA2, 0, 0 }, { 0x1FAA, 0, 0 }, { 0x1F62, 0x03B9, 0 } +"\x1f\xab\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6B, 0x0399, 0 }, { 0x1FA3, 0, 0 }, { 0x1FAB, 0, 0 }, { 0x1F63, 0x03B9, 0 } +"\x1f\xac\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6C, 0x0399, 0 }, { 0x1FA4, 0, 0 }, { 0x1FAC, 0, 0 }, { 0x1F64, 0x03B9, 0 } +"\x1f\xad\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6D, 0x0399, 0 }, { 0x1FA5, 0, 0 }, { 0x1FAD, 0, 0 }, { 0x1F65, 0x03B9, 0 } +"\x1f\xae\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6E, 0x0399, 0 }, { 0x1FA6, 0, 0 }, { 0x1FAE, 0, 0 }, { 0x1F66, 0x03B9, 0 } +"\x1f\xaf\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6F, 0x0399, 0 }, { 0x1FA7, 0, 0 }, { 0x1FAF, 0, 0 }, { 0x1F67, 0x03B9, 0 } +"\x1f\xb2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FBA, 0x0399, 0 }, { 0x1FB2, 0, 0 }, { 0x1FBA, 0x0345, 0 }, { 0x1F70, 0x03B9, 0 } +"\x1f\xb3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0399, 0 }, { 0x1FB3, 0, 0 }, { 0x1FBC, 0, 0 }, { 0x03B1, 0x03B9, 0 } +"\x1f\xb4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0386, 0x0399, 0 }, { 0x1FB4, 0, 0 }, { 0x0386, 0x0345, 0 }, { 0x03AC, 0x03B9, 0 } +"\x1f\xb6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0342, 0 }, { 0x1FB6, 0, 0 }, { 0x0391, 0x0342, 0 }, { 0x03B1, 0x0342, 0 } +"\x1f\xb7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0342, 0x0399 }, { 0x1FB7, 0, 0 }, { 0x0391, 0x0342, 0x0345 }, { 0x03B1, 0x0342, 0x03B9 } +"\x1f\xbc\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0399, 0 }, { 0x1FB3, 0, 0 }, { 0x1FBC, 0, 0 }, { 0x03B1, 0x03B9, 0 } +"\x1f\xc2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FCA, 0x0399, 0 }, { 0x1FC2, 0, 0 }, { 0x1FCA, 0x0345, 0 }, { 0x1F74, 0x03B9, 0 } +"\x1f\xc3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0399, 0 }, { 0x1FC3, 0, 0 }, { 0x1FCC, 0, 0 }, { 0x03B7, 0x03B9, 0 } +"\x1f\xc4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0389, 0x0399, 0 }, { 0x1FC4, 0, 0 }, { 0x0389, 0x0345, 0 }, { 0x03AE, 0x03B9, 0 } +"\x1f\xc6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0342, 0 }, { 0x1FC6, 0, 0 }, { 0x0397, 0x0342, 0 }, { 0x03B7, 0x0342, 0 } +"\x1f\xc7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0342, 0x0399 }, { 0x1FC7, 0, 0 }, { 0x0397, 0x0342, 0x0345 }, { 0x03B7, 0x0342, 0x03B9 } +"\x1f\xcc\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0399, 0 }, { 0x1FC3, 0, 0 }, { 0x1FCC, 0, 0 }, { 0x03B7, 0x03B9, 0 } +"\x1f\xd2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0300 }, { 0x1FD2, 0, 0 }, { 0x0399, 0x0308, 0x0300 }, { 0x03B9, 0x0308, 0x0300 } +"\x1f\xd3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0301 }, { 0x1FD3, 0, 0 }, { 0x0399, 0x0308, 0x0301 }, { 0x03B9, 0x0308, 0x0301 } +"\x1f\xd6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0342, 0 }, { 0x1FD6, 0, 0 }, { 0x0399, 0x0342, 0 }, { 0x03B9, 0x0342, 0 } +"\x1f\xd7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0342 }, { 0x1FD7, 0, 0 }, { 0x0399, 0x0308, 0x0342 }, { 0x03B9, 0x0308, 0x0342 } +"\x1f\xe2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0300 }, { 0x1FE2, 0, 0 }, { 0x03A5, 0x0308, 0x0300 }, { 0x03C5, 0x0308, 0x0300 } +"\x1f\xe3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0301 }, { 0x1FE3, 0, 0 }, { 0x03A5, 0x0308, 0x0301 }, { 0x03C5, 0x0308, 0x0301 } +"\x1f\xe4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A1, 0x0313, 0 }, { 0x1FE4, 0, 0 }, { 0x03A1, 0x0313, 0 }, { 0x03C1, 0x0313, 0 } +"\x1f\xe6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0342, 0 }, { 0x1FE6, 0, 0 }, { 0x03A5, 0x0342, 0 }, { 0x03C5, 0x0342, 0 } +"\x1f\xe7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0342 }, { 0x1FE7, 0, 0 }, { 0x03A5, 0x0308, 0x0342 }, { 0x03C5, 0x0308, 0x0342 } +"\x1f\xf2\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FFA, 0x0399, 0 }, { 0x1FF2, 0, 0 }, { 0x1FFA, 0x0345, 0 }, { 0x1F7C, 0x03B9, 0 } +"\x1f\xf3\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0399, 0 }, { 0x1FF3, 0, 0 }, { 0x1FFC, 0, 0 }, { 0x03C9, 0x03B9, 0 } +"\x1f\xf4\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x038F, 0x0399, 0 }, { 0x1FF4, 0, 0 }, { 0x038F, 0x0345, 0 }, { 0x03CE, 0x03B9, 0 } +"\x1f\xf6\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0342, 0 }, { 0x1FF6, 0, 0 }, { 0x03A9, 0x0342, 0 }, { 0x03C9, 0x0342, 0 } +"\x1f\xf7\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0342, 0x0399 }, { 0x1FF7, 0, 0 }, { 0x03A9, 0x0342, 0x0345 }, { 0x03C9, 0x0342, 0x03B9 } +"\x1f\xfc\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0399, 0 }, { 0x1FF3, 0, 0 }, { 0x1FFC, 0, 0 }, { 0x03C9, 0x03B9, 0 } +"\xfb\x00\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0 }, { 0xFB00, 0, 0 }, { 0x0046, 0x0066, 0 }, { 0x0066, 0x0066, 0 } +"\xfb\x01\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0049, 0 }, { 0xFB01, 0, 0 }, { 0x0046, 0x0069, 0 }, { 0x0066, 0x0069, 0 } +"\xfb\x02\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x004C, 0 }, { 0xFB02, 0, 0 }, { 0x0046, 0x006C, 0 }, { 0x0066, 0x006C, 0 } +"\xfb\x03\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0x0049 }, { 0xFB03, 0, 0 }, { 0x0046, 0x0066, 0x0069 }, { 0x0066, 0x0066, 0x0069 } +"\xfb\x04\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0x004C }, { 0xFB04, 0, 0 }, { 0x0046, 0x0066, 0x006C }, { 0x0066, 0x0066, 0x006C } +"\xfb\x05\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0054, 0 }, { 0xFB05, 0, 0 }, { 0x0053, 0x0074, 0 }, { 0x0073, 0x0074, 0 } +"\xfb\x06\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0054, 0 }, { 0xFB06, 0, 0 }, { 0x0053, 0x0074, 0 }, { 0x0073, 0x0074, 0 } +"\xfb\x13\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x0546, 0 }, { 0xFB13, 0, 0 }, { 0x0544, 0x0576, 0 }, { 0x0574, 0x0576, 0 } +"\xfb\x14\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x0535, 0 }, { 0xFB14, 0, 0 }, { 0x0544, 0x0565, 0 }, { 0x0574, 0x0565, 0 } +"\xfb\x15\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x053B, 0 }, { 0xFB15, 0, 0 }, { 0x0544, 0x056B, 0 }, { 0x0574, 0x056B, 0 } +"\xfb\x16\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x054E, 0x0546, 0 }, { 0xFB16, 0, 0 }, { 0x054E, 0x0576, 0 }, { 0x057E, 0x0576, 0 } +"\xfb\x17\x00", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x053D, 0 }, { 0xFB17, 0, 0 }, { 0x0544, 0x056D, 0 }, { 0x0574, 0x056D, 0 } diff --git a/lib/unicase/special-casing-table.h b/lib/unicase/special-casing-table.h new file mode 100644 index 00000000..c25bb94f --- /dev/null +++ b/lib/unicase/special-casing-table.h @@ -0,0 +1,339 @@ +/* ANSI-C code produced by gperf version 3.0.4 */ +/* Command-line: gperf -m 10 ./unicase/special-casing-table.gperf */ +/* Computed positions: -k'1-3' */ + + +#define TOTAL_KEYWORDS 122 +#define MIN_WORD_LENGTH 3 +#define MAX_WORD_LENGTH 3 +#define MIN_HASH_VALUE 0 +#define MAX_HASH_VALUE 121 +/* maximum key range = 122, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +/*ARGSUSED*/ +static unsigned int +gl_unicase_special_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 2, 0, 4, 5, 37, 12, 121, 4, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 120, + 119, 118, 117, 116, 122, 122, 122, 122, 122, 122, + 5, 3, 122, 122, 122, 122, 122, 122, 122, 122, + 115, 122, 122, 122, 122, 122, 114, 122, 6, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 1, 111, 122, 122, 122, 122, 122, + 109, 122, 108, 122, 107, 122, 106, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 33, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 105, 104, + 103, 102, 101, 100, 99, 31, 98, 97, 96, 95, + 94, 93, 92, 91, 28, 90, 89, 88, 87, 86, + 27, 24, 23, 20, 19, 85, 84, 83, 16, 82, + 81, 80, 79, 15, 78, 77, 76, 75, 74, 73, + 72, 71, 70, 69, 68, 67, 64, 122, 65, 64, + 63, 122, 62, 61, 122, 122, 122, 122, 60, 122, + 122, 122, 122, 122, 59, 58, 57, 122, 56, 55, + 122, 122, 122, 122, 14, 55, 122, 122, 122, 122, + 53, 52, 122, 122, 51, 50, 122, 122, 122, 122, + 122, 122, 122, 50, 122, 122, 48, 47, 46, 122, + 45, 44, 122, 122, 122, 122, 122, 122, 122, 122, + 46, 122, 42, 41, 39, 122, 38, 35, 122, 122, + 122, 0, 33, 122, 122, 122, 122 + }; + return asso_values[(unsigned char)str[2]+1] + asso_values[(unsigned char)str[1]] + asso_values[(unsigned char)str[0]]; +} + +#ifdef __GNUC__ +__inline +#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct special_casing_rule * +gl_unicase_special_lookup (register const char *str, register unsigned int len) +{ + static const unsigned char lengthtable[] = + { + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 + }; + static const struct special_casing_rule wordlist[] = + { +#line 126 "./unicase/special-casing-table.gperf" + {"\373\001\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0049, 0 }, { 0xFB01, 0, 0 }, { 0x0046, 0x0069, 0 }, { 0x0066, 0x0069, 0 }}, +#line 31 "./unicase/special-casing-table.gperf" + {"\001I\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x02BC, 0x004E, 0 }, { 0x0149, 0, 0 }, { 0x02BC, 0x004E, 0 }, { 0x02BC, 0x006E, 0 }}, +#line 125 "./unicase/special-casing-table.gperf" + {"\373\000\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0 }, { 0xFB00, 0, 0 }, { 0x0046, 0x0066, 0 }, { 0x0066, 0x0066, 0 }}, +#line 15 "./unicase/special-casing-table.gperf" + {"\000I\000", 1, SCC_MORE_ABOVE , { 'l', 't' }, { 0x0049, 0, 0 }, { 0x0069, 0x0307, 0 }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }}, +#line 127 "./unicase/special-casing-table.gperf" + {"\373\002\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x004C, 0 }, { 0xFB02, 0, 0 }, { 0x0046, 0x006C, 0 }, { 0x0066, 0x006C, 0 }}, +#line 128 "./unicase/special-casing-table.gperf" + {"\373\003\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0x0049 }, { 0xFB03, 0, 0 }, { 0x0046, 0x0066, 0x0069 }, { 0x0066, 0x0066, 0x0069 }}, +#line 28 "./unicase/special-casing-table.gperf" + {"\0010\000", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }}, +#line 16 "./unicase/special-casing-table.gperf" + {"\000I\001", 1, -SCC_BEFORE_DOT , { 't', 'r' }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }}, +#line 17 "./unicase/special-casing-table.gperf" + {"\000I\002", 1, -SCC_BEFORE_DOT , { 'a', 'z' }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }}, +#line 33 "./unicase/special-casing-table.gperf" + {"\003\007\000", 1, SCC_AFTER_SOFT_DOTTED, { 'l', 't' }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }}, +#line 29 "./unicase/special-casing-table.gperf" + {"\0010\001", 1, SCC_ALWAYS , { 'a', 'z' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }}, +#line 30 "./unicase/special-casing-table.gperf" + {"\0010\002", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0130, 0, 0 }, { 0x0069, 0x0307, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0x0307, 0 }}, +#line 130 "./unicase/special-casing-table.gperf" + {"\373\005\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0054, 0 }, { 0xFB05, 0, 0 }, { 0x0053, 0x0074, 0 }, { 0x0073, 0x0074, 0 }}, +#line 34 "./unicase/special-casing-table.gperf" + {"\003\007\001", 1, SCC_AFTER_I , { 't', 'r' }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0x0307, 0, 0 }}, +#line 35 "./unicase/special-casing-table.gperf" + {"\003\007\002", 0, SCC_AFTER_I , { 'a', 'z' }, { 0x0307, 0, 0 }, { 0, 0, 0 }, { 0x0307, 0, 0 }, { 0x0307, 0, 0 }}, +#line 19 "./unicase/special-casing-table.gperf" + {"\000I\004", 0, SCC_ALWAYS , { 'a', 'z' }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }}, +#line 23 "./unicase/special-casing-table.gperf" + {"\000\314\000", 0, SCC_ALWAYS , { 'l', 't' }, { 0x00CC, 0, 0 }, { 0x0069, 0x0307, 0x0300 }, { 0x00CC, 0, 0 }, { 0x00EC, 0, 0 }}, +#line 109 "./unicase/special-casing-table.gperf" + {"\037\314\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0399, 0 }, { 0x1FC3, 0, 0 }, { 0x1FCC, 0, 0 }, { 0x03B7, 0x03B9, 0 }}, +#line 85 "./unicase/special-casing-table.gperf" + {"\037\243\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6B, 0x0399, 0 }, { 0x1FA3, 0, 0 }, { 0x1FAB, 0, 0 }, { 0x1F63, 0x03B9, 0 }}, +#line 80 "./unicase/special-casing-table.gperf" + {"\037\236\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2E, 0x0399, 0 }, { 0x1F96, 0, 0 }, { 0x1F9E, 0, 0 }, { 0x1F26, 0x03B9, 0 }}, +#line 37 "./unicase/special-casing-table.gperf" + {"\003\243\000", 0, SCC_FINAL_SIGMA , { '\0', '\0' }, { 0x03A3, 0, 0 }, { 0x03C2, 0, 0 }, { 0x03A3, 0, 0 }, { 0x03C3, 0, 0 }}, +#line 45 "./unicase/special-casing-table.gperf" + {"\036\236\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1E9E, 0, 0 }, { 0x00DF, 0, 0 }, { 0x1E9E, 0, 0 }, { 0x0073, 0x0073, 0 }}, +#line 76 "./unicase/special-casing-table.gperf" + {"\037\232\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2A, 0x0399, 0 }, { 0x1F92, 0, 0 }, { 0x1F9A, 0, 0 }, { 0x1F22, 0x03B9, 0 }}, +#line 75 "./unicase/special-casing-table.gperf" + {"\037\231\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F29, 0x0399, 0 }, { 0x1F91, 0, 0 }, { 0x1F99, 0, 0 }, { 0x1F21, 0x03B9, 0 }}, +#line 44 "./unicase/special-casing-table.gperf" + {"\036\232\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0041, 0x02BE, 0 }, { 0x1E9A, 0, 0 }, { 0x0041, 0x02BE, 0 }, { 0x0061, 0x02BE, 0 }}, +#line 43 "./unicase/special-casing-table.gperf" + {"\036\231\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0059, 0x030A, 0 }, { 0x1E99, 0, 0 }, { 0x0059, 0x030A, 0 }, { 0x0079, 0x030A, 0 }}, +#line 74 "./unicase/special-casing-table.gperf" + {"\037\230\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F28, 0x0399, 0 }, { 0x1F90, 0, 0 }, { 0x1F98, 0, 0 }, { 0x1F20, 0x03B9, 0 }}, +#line 73 "./unicase/special-casing-table.gperf" + {"\037\227\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2F, 0x0399, 0 }, { 0x1F97, 0, 0 }, { 0x1F9F, 0, 0 }, { 0x1F27, 0x03B9, 0 }}, +#line 42 "./unicase/special-casing-table.gperf" + {"\036\230\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0057, 0x030A, 0 }, { 0x1E98, 0, 0 }, { 0x0057, 0x030A, 0 }, { 0x0077, 0x030A, 0 }}, +#line 41 "./unicase/special-casing-table.gperf" + {"\036\227\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0054, 0x0308, 0 }, { 0x1E97, 0, 0 }, { 0x0054, 0x0308, 0 }, { 0x0074, 0x0308, 0 }}, +#line 72 "./unicase/special-casing-table.gperf" + {"\037\226\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2E, 0x0399, 0 }, { 0x1F96, 0, 0 }, { 0x1F9E, 0, 0 }, { 0x1F26, 0x03B9, 0 }}, +#line 66 "./unicase/special-casing-table.gperf" + {"\037\220\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F28, 0x0399, 0 }, { 0x1F90, 0, 0 }, { 0x1F98, 0, 0 }, { 0x1F20, 0x03B9, 0 }}, +#line 40 "./unicase/special-casing-table.gperf" + {"\036\226\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0048, 0x0331, 0 }, { 0x1E96, 0, 0 }, { 0x0048, 0x0331, 0 }, { 0x0068, 0x0331, 0 }}, +#line 36 "./unicase/special-casing-table.gperf" + {"\003\220\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0301 }, { 0x0390, 0, 0 }, { 0x0399, 0x0308, 0x0301 }, { 0x03B9, 0x0308, 0x0301 }}, +#line 57 "./unicase/special-casing-table.gperf" + {"\037\207\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0F, 0x0399, 0 }, { 0x1F87, 0, 0 }, { 0x1F8F, 0, 0 }, { 0x1F07, 0x03B9, 0 }}, +#line 21 "./unicase/special-casing-table.gperf" + {"\000i\000", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }}, +#line 124 "./unicase/special-casing-table.gperf" + {"\037\374\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0399, 0 }, { 0x1FF3, 0, 0 }, { 0x1FFC, 0, 0 }, { 0x03C9, 0x03B9, 0 }}, +#line 129 "./unicase/special-casing-table.gperf" + {"\373\004\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0046, 0x0046, 0x004C }, { 0xFB04, 0, 0 }, { 0x0046, 0x0066, 0x006C }, { 0x0066, 0x0066, 0x006C }}, +#line 123 "./unicase/special-casing-table.gperf" + {"\037\367\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0342, 0x0399 }, { 0x1FF7, 0, 0 }, { 0x03A9, 0x0342, 0x0345 }, { 0x03C9, 0x0342, 0x03B9 }}, +#line 22 "./unicase/special-casing-table.gperf" + {"\000i\001", 0, SCC_ALWAYS , { 'a', 'z' }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }, { 0x0130, 0, 0 }, { 0x0069, 0, 0 }}, +#line 18 "./unicase/special-casing-table.gperf" + {"\000I\003", 1, SCC_ALWAYS , { 't', 'r' }, { 0x0049, 0, 0 }, { 0x0069, 0, 0 }, { 0x0049, 0, 0 }, { 0x0131, 0, 0 }}, +#line 122 "./unicase/special-casing-table.gperf" + {"\037\366\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0342, 0 }, { 0x1FF6, 0, 0 }, { 0x03A9, 0x0342, 0 }, { 0x03C9, 0x0342, 0 }}, +#line 121 "./unicase/special-casing-table.gperf" + {"\037\364\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x038F, 0x0399, 0 }, { 0x1FF4, 0, 0 }, { 0x038F, 0x0345, 0 }, { 0x03CE, 0x03B9, 0 }}, +#line 39 "./unicase/special-casing-table.gperf" + {"\005\207\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0535, 0x0552, 0 }, { 0x0587, 0, 0 }, { 0x0535, 0x0582, 0 }, { 0x0565, 0x0582, 0 }}, +#line 120 "./unicase/special-casing-table.gperf" + {"\037\363\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A9, 0x0399, 0 }, { 0x1FF3, 0, 0 }, { 0x1FFC, 0, 0 }, { 0x03C9, 0x03B9, 0 }}, +#line 119 "./unicase/special-casing-table.gperf" + {"\037\362\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FFA, 0x0399, 0 }, { 0x1FF2, 0, 0 }, { 0x1FFA, 0x0345, 0 }, { 0x1F7C, 0x03B9, 0 }}, +#line 32 "./unicase/special-casing-table.gperf" + {"\001\360\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x004A, 0x030C, 0 }, { 0x01F0, 0, 0 }, { 0x004A, 0x030C, 0 }, { 0x006A, 0x030C, 0 }}, +#line 118 "./unicase/special-casing-table.gperf" + {"\037\347\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0342 }, { 0x1FE7, 0, 0 }, { 0x03A5, 0x0308, 0x0342 }, { 0x03C5, 0x0308, 0x0342 }}, +#line 117 "./unicase/special-casing-table.gperf" + {"\037\346\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0342, 0 }, { 0x1FE6, 0, 0 }, { 0x03A5, 0x0342, 0 }, { 0x03C5, 0x0342, 0 }}, +#line 116 "./unicase/special-casing-table.gperf" + {"\037\344\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A1, 0x0313, 0 }, { 0x1FE4, 0, 0 }, { 0x03A1, 0x0313, 0 }, { 0x03C1, 0x0313, 0 }}, +#line 115 "./unicase/special-casing-table.gperf" + {"\037\343\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0301 }, { 0x1FE3, 0, 0 }, { 0x03A5, 0x0308, 0x0301 }, { 0x03C5, 0x0308, 0x0301 }}, +#line 114 "./unicase/special-casing-table.gperf" + {"\037\342\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0300 }, { 0x1FE2, 0, 0 }, { 0x03A5, 0x0308, 0x0300 }, { 0x03C5, 0x0308, 0x0300 }}, +#line 25 "./unicase/special-casing-table.gperf" + {"\000\337\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0053, 0 }, { 0x00DF, 0, 0 }, { 0x0053, 0x0073, 0 }, { 0x0073, 0x0073, 0 }}, +#line 113 "./unicase/special-casing-table.gperf" + {"\037\327\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0342 }, { 0x1FD7, 0, 0 }, { 0x0399, 0x0308, 0x0342 }, { 0x03B9, 0x0308, 0x0342 }}, +#line 112 "./unicase/special-casing-table.gperf" + {"\037\326\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0342, 0 }, { 0x1FD6, 0, 0 }, { 0x0399, 0x0342, 0 }, { 0x03B9, 0x0342, 0 }}, +#line 111 "./unicase/special-casing-table.gperf" + {"\037\323\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0301 }, { 0x1FD3, 0, 0 }, { 0x0399, 0x0308, 0x0301 }, { 0x03B9, 0x0308, 0x0301 }}, +#line 110 "./unicase/special-casing-table.gperf" + {"\037\322\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0399, 0x0308, 0x0300 }, { 0x1FD2, 0, 0 }, { 0x0399, 0x0308, 0x0300 }, { 0x03B9, 0x0308, 0x0300 }}, +#line 24 "./unicase/special-casing-table.gperf" + {"\000\315\000", 0, SCC_ALWAYS , { 'l', 't' }, { 0x00CD, 0, 0 }, { 0x0069, 0x0307, 0x0301 }, { 0x00CD, 0, 0 }, { 0x00ED, 0, 0 }}, +#line 108 "./unicase/special-casing-table.gperf" + {"\037\307\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0342, 0x0399 }, { 0x1FC7, 0, 0 }, { 0x0397, 0x0342, 0x0345 }, { 0x03B7, 0x0342, 0x03B9 }}, +#line 107 "./unicase/special-casing-table.gperf" + {"\037\306\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0342, 0 }, { 0x1FC6, 0, 0 }, { 0x0397, 0x0342, 0 }, { 0x03B7, 0x0342, 0 }}, +#line 106 "./unicase/special-casing-table.gperf" + {"\037\304\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0389, 0x0399, 0 }, { 0x1FC4, 0, 0 }, { 0x0389, 0x0345, 0 }, { 0x03AE, 0x03B9, 0 }}, +#line 105 "./unicase/special-casing-table.gperf" + {"\037\303\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0397, 0x0399, 0 }, { 0x1FC3, 0, 0 }, { 0x1FCC, 0, 0 }, { 0x03B7, 0x03B9, 0 }}, +#line 104 "./unicase/special-casing-table.gperf" + {"\037\302\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FCA, 0x0399, 0 }, { 0x1FC2, 0, 0 }, { 0x1FCA, 0x0345, 0 }, { 0x1F74, 0x03B9, 0 }}, +#line 103 "./unicase/special-casing-table.gperf" + {"\037\274\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0399, 0 }, { 0x1FB3, 0, 0 }, { 0x1FBC, 0, 0 }, { 0x03B1, 0x03B9, 0 }}, +#line 102 "./unicase/special-casing-table.gperf" + {"\037\267\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0342, 0x0399 }, { 0x1FB7, 0, 0 }, { 0x0391, 0x0342, 0x0345 }, { 0x03B1, 0x0342, 0x03B9 }}, +#line 101 "./unicase/special-casing-table.gperf" + {"\037\266\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0342, 0 }, { 0x1FB6, 0, 0 }, { 0x0391, 0x0342, 0 }, { 0x03B1, 0x0342, 0 }}, +#line 100 "./unicase/special-casing-table.gperf" + {"\037\264\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0386, 0x0399, 0 }, { 0x1FB4, 0, 0 }, { 0x0386, 0x0345, 0 }, { 0x03AC, 0x03B9, 0 }}, +#line 99 "./unicase/special-casing-table.gperf" + {"\037\263\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0391, 0x0399, 0 }, { 0x1FB3, 0, 0 }, { 0x1FBC, 0, 0 }, { 0x03B1, 0x03B9, 0 }}, +#line 98 "./unicase/special-casing-table.gperf" + {"\037\262\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1FBA, 0x0399, 0 }, { 0x1FB2, 0, 0 }, { 0x1FBA, 0x0345, 0 }, { 0x1F70, 0x03B9, 0 }}, +#line 38 "./unicase/special-casing-table.gperf" + {"\003\260\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0308, 0x0301 }, { 0x03B0, 0, 0 }, { 0x03A5, 0x0308, 0x0301 }, { 0x03C5, 0x0308, 0x0301 }}, +#line 97 "./unicase/special-casing-table.gperf" + {"\037\257\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6F, 0x0399, 0 }, { 0x1FA7, 0, 0 }, { 0x1FAF, 0, 0 }, { 0x1F67, 0x03B9, 0 }}, +#line 96 "./unicase/special-casing-table.gperf" + {"\037\256\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6E, 0x0399, 0 }, { 0x1FA6, 0, 0 }, { 0x1FAE, 0, 0 }, { 0x1F66, 0x03B9, 0 }}, +#line 95 "./unicase/special-casing-table.gperf" + {"\037\255\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6D, 0x0399, 0 }, { 0x1FA5, 0, 0 }, { 0x1FAD, 0, 0 }, { 0x1F65, 0x03B9, 0 }}, +#line 94 "./unicase/special-casing-table.gperf" + {"\037\254\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6C, 0x0399, 0 }, { 0x1FA4, 0, 0 }, { 0x1FAC, 0, 0 }, { 0x1F64, 0x03B9, 0 }}, +#line 93 "./unicase/special-casing-table.gperf" + {"\037\253\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6B, 0x0399, 0 }, { 0x1FA3, 0, 0 }, { 0x1FAB, 0, 0 }, { 0x1F63, 0x03B9, 0 }}, +#line 92 "./unicase/special-casing-table.gperf" + {"\037\252\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6A, 0x0399, 0 }, { 0x1FA2, 0, 0 }, { 0x1FAA, 0, 0 }, { 0x1F62, 0x03B9, 0 }}, +#line 91 "./unicase/special-casing-table.gperf" + {"\037\251\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F69, 0x0399, 0 }, { 0x1FA1, 0, 0 }, { 0x1FA9, 0, 0 }, { 0x1F61, 0x03B9, 0 }}, +#line 90 "./unicase/special-casing-table.gperf" + {"\037\250\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F68, 0x0399, 0 }, { 0x1FA0, 0, 0 }, { 0x1FA8, 0, 0 }, { 0x1F60, 0x03B9, 0 }}, +#line 89 "./unicase/special-casing-table.gperf" + {"\037\247\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6F, 0x0399, 0 }, { 0x1FA7, 0, 0 }, { 0x1FAF, 0, 0 }, { 0x1F67, 0x03B9, 0 }}, +#line 88 "./unicase/special-casing-table.gperf" + {"\037\246\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6E, 0x0399, 0 }, { 0x1FA6, 0, 0 }, { 0x1FAE, 0, 0 }, { 0x1F66, 0x03B9, 0 }}, +#line 87 "./unicase/special-casing-table.gperf" + {"\037\245\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6D, 0x0399, 0 }, { 0x1FA5, 0, 0 }, { 0x1FAD, 0, 0 }, { 0x1F65, 0x03B9, 0 }}, +#line 86 "./unicase/special-casing-table.gperf" + {"\037\244\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6C, 0x0399, 0 }, { 0x1FA4, 0, 0 }, { 0x1FAC, 0, 0 }, { 0x1F64, 0x03B9, 0 }}, +#line 84 "./unicase/special-casing-table.gperf" + {"\037\242\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F6A, 0x0399, 0 }, { 0x1FA2, 0, 0 }, { 0x1FAA, 0, 0 }, { 0x1F62, 0x03B9, 0 }}, +#line 83 "./unicase/special-casing-table.gperf" + {"\037\241\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F69, 0x0399, 0 }, { 0x1FA1, 0, 0 }, { 0x1FA9, 0, 0 }, { 0x1F61, 0x03B9, 0 }}, +#line 82 "./unicase/special-casing-table.gperf" + {"\037\240\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F68, 0x0399, 0 }, { 0x1FA0, 0, 0 }, { 0x1FA8, 0, 0 }, { 0x1F60, 0x03B9, 0 }}, +#line 81 "./unicase/special-casing-table.gperf" + {"\037\237\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2F, 0x0399, 0 }, { 0x1F97, 0, 0 }, { 0x1F9F, 0, 0 }, { 0x1F27, 0x03B9, 0 }}, +#line 79 "./unicase/special-casing-table.gperf" + {"\037\235\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2D, 0x0399, 0 }, { 0x1F95, 0, 0 }, { 0x1F9D, 0, 0 }, { 0x1F25, 0x03B9, 0 }}, +#line 78 "./unicase/special-casing-table.gperf" + {"\037\234\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2C, 0x0399, 0 }, { 0x1F94, 0, 0 }, { 0x1F9C, 0, 0 }, { 0x1F24, 0x03B9, 0 }}, +#line 77 "./unicase/special-casing-table.gperf" + {"\037\233\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2B, 0x0399, 0 }, { 0x1F93, 0, 0 }, { 0x1F9B, 0, 0 }, { 0x1F23, 0x03B9, 0 }}, +#line 71 "./unicase/special-casing-table.gperf" + {"\037\225\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2D, 0x0399, 0 }, { 0x1F95, 0, 0 }, { 0x1F9D, 0, 0 }, { 0x1F25, 0x03B9, 0 }}, +#line 70 "./unicase/special-casing-table.gperf" + {"\037\224\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2C, 0x0399, 0 }, { 0x1F94, 0, 0 }, { 0x1F9C, 0, 0 }, { 0x1F24, 0x03B9, 0 }}, +#line 69 "./unicase/special-casing-table.gperf" + {"\037\223\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2B, 0x0399, 0 }, { 0x1F93, 0, 0 }, { 0x1F9B, 0, 0 }, { 0x1F23, 0x03B9, 0 }}, +#line 68 "./unicase/special-casing-table.gperf" + {"\037\222\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F2A, 0x0399, 0 }, { 0x1F92, 0, 0 }, { 0x1F9A, 0, 0 }, { 0x1F22, 0x03B9, 0 }}, +#line 67 "./unicase/special-casing-table.gperf" + {"\037\221\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F29, 0x0399, 0 }, { 0x1F91, 0, 0 }, { 0x1F99, 0, 0 }, { 0x1F21, 0x03B9, 0 }}, +#line 65 "./unicase/special-casing-table.gperf" + {"\037\217\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0F, 0x0399, 0 }, { 0x1F87, 0, 0 }, { 0x1F8F, 0, 0 }, { 0x1F07, 0x03B9, 0 }}, +#line 64 "./unicase/special-casing-table.gperf" + {"\037\216\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0E, 0x0399, 0 }, { 0x1F86, 0, 0 }, { 0x1F8E, 0, 0 }, { 0x1F06, 0x03B9, 0 }}, +#line 63 "./unicase/special-casing-table.gperf" + {"\037\215\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0D, 0x0399, 0 }, { 0x1F85, 0, 0 }, { 0x1F8D, 0, 0 }, { 0x1F05, 0x03B9, 0 }}, +#line 62 "./unicase/special-casing-table.gperf" + {"\037\214\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0C, 0x0399, 0 }, { 0x1F84, 0, 0 }, { 0x1F8C, 0, 0 }, { 0x1F04, 0x03B9, 0 }}, +#line 61 "./unicase/special-casing-table.gperf" + {"\037\213\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0B, 0x0399, 0 }, { 0x1F83, 0, 0 }, { 0x1F8B, 0, 0 }, { 0x1F03, 0x03B9, 0 }}, +#line 60 "./unicase/special-casing-table.gperf" + {"\037\212\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0A, 0x0399, 0 }, { 0x1F82, 0, 0 }, { 0x1F8A, 0, 0 }, { 0x1F02, 0x03B9, 0 }}, +#line 59 "./unicase/special-casing-table.gperf" + {"\037\211\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F09, 0x0399, 0 }, { 0x1F81, 0, 0 }, { 0x1F89, 0, 0 }, { 0x1F01, 0x03B9, 0 }}, +#line 58 "./unicase/special-casing-table.gperf" + {"\037\210\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F08, 0x0399, 0 }, { 0x1F80, 0, 0 }, { 0x1F88, 0, 0 }, { 0x1F00, 0x03B9, 0 }}, +#line 56 "./unicase/special-casing-table.gperf" + {"\037\206\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0E, 0x0399, 0 }, { 0x1F86, 0, 0 }, { 0x1F8E, 0, 0 }, { 0x1F06, 0x03B9, 0 }}, +#line 55 "./unicase/special-casing-table.gperf" + {"\037\205\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0D, 0x0399, 0 }, { 0x1F85, 0, 0 }, { 0x1F8D, 0, 0 }, { 0x1F05, 0x03B9, 0 }}, +#line 54 "./unicase/special-casing-table.gperf" + {"\037\204\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0C, 0x0399, 0 }, { 0x1F84, 0, 0 }, { 0x1F8C, 0, 0 }, { 0x1F04, 0x03B9, 0 }}, +#line 53 "./unicase/special-casing-table.gperf" + {"\037\203\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0B, 0x0399, 0 }, { 0x1F83, 0, 0 }, { 0x1F8B, 0, 0 }, { 0x1F03, 0x03B9, 0 }}, +#line 52 "./unicase/special-casing-table.gperf" + {"\037\202\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F0A, 0x0399, 0 }, { 0x1F82, 0, 0 }, { 0x1F8A, 0, 0 }, { 0x1F02, 0x03B9, 0 }}, +#line 51 "./unicase/special-casing-table.gperf" + {"\037\201\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F09, 0x0399, 0 }, { 0x1F81, 0, 0 }, { 0x1F89, 0, 0 }, { 0x1F01, 0x03B9, 0 }}, +#line 50 "./unicase/special-casing-table.gperf" + {"\037\200\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x1F08, 0x0399, 0 }, { 0x1F80, 0, 0 }, { 0x1F88, 0, 0 }, { 0x1F00, 0x03B9, 0 }}, +#line 49 "./unicase/special-casing-table.gperf" + {"\037V\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0342 }, { 0x1F56, 0, 0 }, { 0x03A5, 0x0313, 0x0342 }, { 0x03C5, 0x0313, 0x0342 }}, +#line 48 "./unicase/special-casing-table.gperf" + {"\037T\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0301 }, { 0x1F54, 0, 0 }, { 0x03A5, 0x0313, 0x0301 }, { 0x03C5, 0x0313, 0x0301 }}, +#line 47 "./unicase/special-casing-table.gperf" + {"\037R\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0x0300 }, { 0x1F52, 0, 0 }, { 0x03A5, 0x0313, 0x0300 }, { 0x03C5, 0x0313, 0x0300 }}, +#line 46 "./unicase/special-casing-table.gperf" + {"\037P\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x03A5, 0x0313, 0 }, { 0x1F50, 0, 0 }, { 0x03A5, 0x0313, 0 }, { 0x03C5, 0x0313, 0 }}, +#line 20 "./unicase/special-casing-table.gperf" + {"\000J\000", 0, SCC_MORE_ABOVE , { 'l', 't' }, { 0x004A, 0, 0 }, { 0x006A, 0x0307, 0 }, { 0x004A, 0, 0 }, { 0x006A, 0, 0 }}, +#line 27 "./unicase/special-casing-table.gperf" + {"\001.\000", 0, SCC_MORE_ABOVE , { 'l', 't' }, { 0x012E, 0, 0 }, { 0x012F, 0x0307, 0 }, { 0x012E, 0, 0 }, { 0x012F, 0, 0 }}, +#line 26 "./unicase/special-casing-table.gperf" + {"\001(\000", 0, SCC_ALWAYS , { 'l', 't' }, { 0x0128, 0, 0 }, { 0x0069, 0x0307, 0x0303 }, { 0x0128, 0, 0 }, { 0x0129, 0, 0 }}, +#line 136 "./unicase/special-casing-table.gperf" + {"\373\027\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x053D, 0 }, { 0xFB17, 0, 0 }, { 0x0544, 0x056D, 0 }, { 0x0574, 0x056D, 0 }}, +#line 135 "./unicase/special-casing-table.gperf" + {"\373\026\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x054E, 0x0546, 0 }, { 0xFB16, 0, 0 }, { 0x054E, 0x0576, 0 }, { 0x057E, 0x0576, 0 }}, +#line 134 "./unicase/special-casing-table.gperf" + {"\373\025\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x053B, 0 }, { 0xFB15, 0, 0 }, { 0x0544, 0x056B, 0 }, { 0x0574, 0x056B, 0 }}, +#line 133 "./unicase/special-casing-table.gperf" + {"\373\024\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x0535, 0 }, { 0xFB14, 0, 0 }, { 0x0544, 0x0565, 0 }, { 0x0574, 0x0565, 0 }}, +#line 132 "./unicase/special-casing-table.gperf" + {"\373\023\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0544, 0x0546, 0 }, { 0xFB13, 0, 0 }, { 0x0544, 0x0576, 0 }, { 0x0574, 0x0576, 0 }}, +#line 131 "./unicase/special-casing-table.gperf" + {"\373\006\000", 0, SCC_ALWAYS , { '\0', '\0' }, { 0x0053, 0x0054, 0 }, { 0xFB06, 0, 0 }, { 0x0053, 0x0074, 0 }, { 0x0073, 0x0074, 0 }} + }; + + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = gl_unicase_special_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + if (len == lengthtable[key]) + { + register const char *s = wordlist[key].code; + + if (*str == *s && !memcmp (str + 1, s + 1, len - 1)) + return &wordlist[key]; + } + } + return 0; +} diff --git a/lib/unicase/special-casing.c b/lib/unicase/special-casing.c new file mode 100644 index 00000000..9cc207c6 --- /dev/null +++ b/lib/unicase/special-casing.c @@ -0,0 +1,25 @@ +/* Special casing table. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "special-casing.h" + +#include + +#include "unicase/special-casing-table.h" diff --git a/lib/unicase/special-casing.h b/lib/unicase/special-casing.h new file mode 100644 index 00000000..ab88b84d --- /dev/null +++ b/lib/unicase/special-casing.h @@ -0,0 +1,60 @@ +/* Special casing table. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +/* A special casing context. + A context is negated through x -> -x. */ +enum +{ + SCC_ALWAYS = 0, + SCC_FINAL_SIGMA = 1, + SCC_AFTER_SOFT_DOTTED = 2, + SCC_MORE_ABOVE = 3, + SCC_BEFORE_DOT = 4, + SCC_AFTER_I = 5 +}; + +struct special_casing_rule +{ + /* The first two bytes are the code, in big-endian order. The third byte + only distinguishes different rules pertaining to the same code. */ + /*unsigned*/ char code[3]; + + /* True when this rule is not the last one for the given code. */ + /*bool*/ unsigned int has_next : 1; + + /* Context. */ + signed int context : 7; + + /* Language, or an empty string. */ + char language[2]; + + /* Mapping to upper case. Between 0 and 3 characters. Filled with 0s. */ + unsigned short upper[3]; + + /* Mapping to lower case. Between 0 and 3 characters. Filled with 0s. */ + unsigned short lower[3]; + + /* Mapping to title case. Between 0 and 3 characters. Filled with 0s. */ + unsigned short title[3]; + + /* Casefolding mapping. Between 0 and 3 characters. Filled with 0s. */ + unsigned short casefold[3]; +}; + +extern const struct special_casing_rule * + gl_unicase_special_lookup (const char *str, unsigned int len); diff --git a/lib/unicase/tocasefold.c b/lib/unicase/tocasefold.c new file mode 100644 index 00000000..752ba60a --- /dev/null +++ b/lib/unicase/tocasefold.c @@ -0,0 +1,27 @@ +/* Casefold mapping for Unicode characters (locale and context independent). + Copyright (C) 2002, 2006, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "casefold.h" + +/* Define u_mapping table. */ +#include "tocasefold.h" + +#define FUNC uc_tocasefold +#include "simple-mapping.h" diff --git a/lib/unicase/tocasefold.h b/lib/unicase/tocasefold.h new file mode 100644 index 00000000..59f26814 --- /dev/null +++ b/lib/unicase/tocasefold.h @@ -0,0 +1,567 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Simple character mapping of Unicode characters. */ +/* Generated automatically by gen-case.c for Unicode 5.1.0. */ +#define mapping_header_0 16 +#define mapping_header_1 2 +#define mapping_header_2 7 +#define mapping_header_3 511 +#define mapping_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + int level3[26 << 7]; + } +u_mapping = +{ + { 0, 512 }, + { + 0, 128, 256, 384, 512, -1, 640, 768, + 896, 1024, 1152, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1280, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1408, 1536, 1664, 1792, + -1, -1, 1920, 2048, -1, -1, -1, -1, + -1, 2176, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2304, 2432, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2560, 2688, 2816, 2944, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3072, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3200, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 775, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 0, + 32, 32, 32, 32, 32, 32, 32, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -121, 1, 0, 1, 0, 1, 0, -268, + 0, 210, 1, 0, 1, 0, 206, 1, + 0, 205, 205, 1, 0, 0, 79, 202, + 203, 1, 0, 205, 207, 0, 211, 209, + 1, 0, 0, 0, 211, 213, 0, 214, + 1, 0, 1, 0, 1, 0, 218, 1, + 0, 218, 0, 0, 1, 0, 218, 1, + 0, 217, 217, 1, 0, 1, 0, 219, + 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 2, 1, 0, 2, + 1, 0, 2, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 2, 1, 0, 1, 0, -97, -56, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -130, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 10795, 1, 0, -163, 10792, 0, + 0, 1, 0, -195, 69, 71, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 116, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 0, + 37, 37, 37, 0, 64, 0, 63, 63, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 0, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, + -30, -25, 0, 0, 0, -15, -22, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -54, -48, 0, 0, -60, -64, 0, 1, + 0, -7, 1, 0, 0, -130, -130, -130, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 15, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, -58, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, -8, 0, -8, 0, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -74, -74, 0, 0, -7173, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -86, -86, -86, -86, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -100, -100, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -112, -112, -7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -128, -128, -126, -126, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -7517, 0, + 0, 0, -8383, -8262, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, -10743, -3814, -10727, 0, 0, 1, + 0, 1, 0, 1, 0, -10780, -10749, -10783, + 0, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 1, 0, -35332, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + } +}; diff --git a/lib/unicase/tolower.c b/lib/unicase/tolower.c new file mode 100644 index 00000000..5ed0c6d2 --- /dev/null +++ b/lib/unicase/tolower.c @@ -0,0 +1,27 @@ +/* Lowercase mapping for Unicode characters (locale and context independent). + Copyright (C) 2002, 2006, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +/* Define u_mapping table. */ +#include "tolower.h" + +#define FUNC uc_tolower +#include "simple-mapping.h" diff --git a/lib/unicase/tolower.h b/lib/unicase/tolower.h new file mode 100644 index 00000000..e7b4b293 --- /dev/null +++ b/lib/unicase/tolower.h @@ -0,0 +1,567 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Simple character mapping of Unicode characters. */ +/* Generated automatically by gen-case.c for Unicode 5.1.0. */ +#define mapping_header_0 16 +#define mapping_header_1 2 +#define mapping_header_2 7 +#define mapping_header_3 511 +#define mapping_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + int level3[26 << 7]; + } +u_mapping = +{ + { 0, 512 }, + { + 0, 128, 256, 384, 512, -1, 640, 768, + 896, 1024, 1152, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1280, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1408, 1536, 1664, 1792, + -1, -1, 1920, 2048, -1, -1, -1, -1, + -1, 2176, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2304, 2432, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2560, 2688, 2816, 2944, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3072, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3200, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 0, + 32, 32, 32, 32, 32, 32, 32, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -199, 0, 1, 0, 1, 0, 1, 0, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -121, 1, 0, 1, 0, 1, 0, 0, + 0, 210, 1, 0, 1, 0, 206, 1, + 0, 205, 205, 1, 0, 0, 79, 202, + 203, 1, 0, 205, 207, 0, 211, 209, + 1, 0, 0, 0, 211, 213, 0, 214, + 1, 0, 1, 0, 1, 0, 218, 1, + 0, 218, 0, 0, 1, 0, 218, 1, + 0, 217, 217, 1, 0, 1, 0, 219, + 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 2, 1, 0, 2, + 1, 0, 2, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 2, 1, 0, 1, 0, -97, -56, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + -130, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 10795, 1, 0, -163, 10792, 0, + 0, 1, 0, -195, 69, 71, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 0, + 37, 37, 37, 0, 64, 0, 63, 63, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 0, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, -60, 0, 0, 1, + 0, -7, 1, 0, 0, -130, -130, -130, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 15, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 7264, 7264, + 7264, 7264, 7264, 7264, 7264, 7264, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -7615, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -8, 0, -8, 0, -8, 0, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -8, -8, -8, -8, -8, -8, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -74, -74, -9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -86, -86, -86, -86, -9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -100, -100, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -8, -8, -112, -112, -7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -128, -128, -126, -126, -9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -7517, 0, + 0, 0, -8383, -8262, 0, 0, 0, 0, + 0, 0, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, -10743, -3814, -10727, 0, 0, 1, + 0, 1, 0, 1, 0, -10780, -10749, -10783, + 0, 0, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 1, 0, -35332, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, + 0, 0, 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + } +}; diff --git a/lib/unicase/totitle.c b/lib/unicase/totitle.c new file mode 100644 index 00000000..0ca5a45b --- /dev/null +++ b/lib/unicase/totitle.c @@ -0,0 +1,27 @@ +/* Titlecase mapping for Unicode characters (locale and context independent). + Copyright (C) 2002, 2006, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +/* Define u_mapping table. */ +#include "totitle.h" + +#define FUNC uc_totitle +#include "simple-mapping.h" diff --git a/lib/unicase/totitle.h b/lib/unicase/totitle.h new file mode 100644 index 00000000..66104371 --- /dev/null +++ b/lib/unicase/totitle.h @@ -0,0 +1,615 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Simple character mapping of Unicode characters. */ +/* Generated automatically by gen-case.c for Unicode 5.1.0. */ +#define mapping_header_0 16 +#define mapping_header_1 2 +#define mapping_header_2 7 +#define mapping_header_3 511 +#define mapping_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + int level3[29 << 7]; + } +u_mapping = +{ + { 0, 512 }, + { + 0, 128, 256, 384, 512, 640, 768, 896, + 1024, 1152, 1280, 1408, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1536, -1, 1664, 1792, 1920, 2048, + -1, -1, 2176, 2304, -1, -1, -1, -1, + -1, 2432, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2560, 2688, 2816, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2944, 3072, 3200, 3328, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3456, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3584, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 743, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, 0, + -32, -32, -32, -32, -32, -32, -32, 121, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -232, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, 0, + -1, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, -300, + 195, 0, 0, -1, 0, -1, 0, 0, + -1, 0, 0, 0, -1, 0, 0, 0, + 0, 0, -1, 0, 0, 97, 0, 0, + 0, -1, 163, 0, 0, 0, 130, 0, + 0, -1, 0, -1, 0, -1, 0, 0, + -1, 0, 0, 0, 0, -1, 0, 0, + -1, 0, 0, 0, -1, 0, -1, 0, + 0, -1, 0, 0, 0, -1, 0, 56, + 0, 0, 0, 0, 1, 0, -1, 1, + 0, -1, 1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, -79, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 1, 0, -1, 0, -1, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 0, -1, 0, 0, 0, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 10783, 10780, 0, -210, -206, 0, -205, -205, + 0, -202, 0, -203, 0, 0, 0, 0, + -205, 0, 0, -207, 0, 0, 0, 0, + -209, -211, 0, 10743, 0, 0, 0, -211, + 0, 10749, -213, 0, 0, -214, 0, 0, + 0, 0, 0, 0, 0, 10727, 0, 0, + -218, 0, 0, -218, 0, 0, 0, 0, + -218, -69, -217, -217, -71, 0, 0, 0, + 0, 0, -219, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, 0, 0, -1, + 0, 0, 0, 130, 130, 130, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -38, -37, -37, -37, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -31, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -64, -63, -63, 0, + -62, -57, 0, 0, 0, -47, -54, -8, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + -86, -80, 7, 0, 0, -96, 0, 0, + -1, 0, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, -15, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35332, 0, 0, 0, 3814, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, 0, + 0, 0, 0, -59, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 0, 8, 0, 8, 0, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 74, 74, 86, 86, 86, 86, 100, 100, + 128, 128, 112, 112, 126, 126, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -7205, 0, + 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, 0, + 0, -1, 0, 0, 0, -10795, -10792, 0, + -1, 0, -1, 0, -1, 0, 0, 0, + 0, 0, 0, -1, 0, 0, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -1, 0, -1, 0, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + } +}; diff --git a/lib/unicase/toupper.c b/lib/unicase/toupper.c new file mode 100644 index 00000000..d74e45c7 --- /dev/null +++ b/lib/unicase/toupper.c @@ -0,0 +1,27 @@ +/* Uppercase mapping for Unicode characters (locale and context independent). + Copyright (C) 2002, 2006, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +/* Define u_mapping table. */ +#include "toupper.h" + +#define FUNC uc_toupper +#include "simple-mapping.h" diff --git a/lib/unicase/toupper.h b/lib/unicase/toupper.h new file mode 100644 index 00000000..e5194f40 --- /dev/null +++ b/lib/unicase/toupper.h @@ -0,0 +1,615 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Simple character mapping of Unicode characters. */ +/* Generated automatically by gen-case.c for Unicode 5.1.0. */ +#define mapping_header_0 16 +#define mapping_header_1 2 +#define mapping_header_2 7 +#define mapping_header_3 511 +#define mapping_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + int level3[29 << 7]; + } +u_mapping = +{ + { 0, 512 }, + { + 0, 128, 256, 384, 512, 640, 768, 896, + 1024, 1152, 1280, 1408, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 1536, -1, 1664, 1792, 1920, 2048, + -1, -1, 2176, 2304, -1, -1, -1, -1, + -1, 2432, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2560, 2688, 2816, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2944, 3072, 3200, 3328, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 3456, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3584, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 743, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, 0, + -32, -32, -32, -32, -32, -32, -32, 121, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -232, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, 0, + -1, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, -300, + 195, 0, 0, -1, 0, -1, 0, 0, + -1, 0, 0, 0, -1, 0, 0, 0, + 0, 0, -1, 0, 0, 97, 0, 0, + 0, -1, 163, 0, 0, 0, 130, 0, + 0, -1, 0, -1, 0, -1, 0, 0, + -1, 0, 0, 0, 0, -1, 0, 0, + -1, 0, 0, 0, -1, 0, -1, 0, + 0, -1, 0, 0, 0, -1, 0, 56, + 0, 0, 0, 0, 0, -1, -2, 0, + -1, -2, 0, -1, -2, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, -79, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, -1, -2, 0, -1, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 0, -1, 0, 0, 0, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 10783, 10780, 0, -210, -206, 0, -205, -205, + 0, -202, 0, -203, 0, 0, 0, 0, + -205, 0, 0, -207, 0, 0, 0, 0, + -209, -211, 0, 10743, 0, 0, 0, -211, + 0, 10749, -213, 0, 0, -214, 0, 0, + 0, 0, 0, 0, 0, 10727, 0, 0, + -218, 0, 0, -218, 0, 0, 0, 0, + -218, -69, -217, -217, -71, 0, 0, 0, + 0, 0, -219, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, 0, 0, -1, + 0, 0, 0, 130, 130, 130, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -38, -37, -37, -37, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -31, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -64, -63, -63, 0, + -62, -57, 0, 0, 0, -47, -54, -8, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + -86, -80, 7, 0, 0, -96, 0, 0, + -1, 0, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, -1, 0, -1, 0, -1, 0, + -1, 0, -1, 0, -1, 0, -1, -15, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35332, 0, 0, 0, 3814, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, 0, + 0, 0, 0, -59, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 0, 8, 0, 8, 0, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 74, 74, 86, 86, 86, 86, 100, 100, + 128, 128, 112, 112, 126, 126, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -7205, 0, + 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 0, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, -28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, 0, + 0, -1, 0, 0, 0, -10795, -10792, 0, + -1, 0, -1, 0, -1, 0, 0, 0, + 0, 0, 0, -1, 0, 0, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, -7264, -7264, + -7264, -7264, -7264, -7264, -7264, -7264, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -1, 0, -1, 0, 0, -1, + 0, -1, 0, -1, 0, -1, 0, -1, + 0, 0, 0, 0, -1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + } +}; diff --git a/lib/unicase/u-casecmp.h b/lib/unicase/u-casecmp.h new file mode 100644 index 00000000..e1cf99c4 --- /dev/null +++ b/lib/unicase/u-casecmp.h @@ -0,0 +1,69 @@ +/* Case and normalization insensitive comparison of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +FUNC (const SRC_UNIT *s1, size_t n1, const SRC_UNIT *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp) +{ + UNIT buf1[2048 / sizeof (UNIT)]; + UNIT buf2[2048 / sizeof (UNIT)]; + UNIT *norms1; + size_t norms1_length; + UNIT *norms2; + size_t norms2_length; + int cmp; + + /* Optimization: There is no need to do canonical composition of each string. + Decomposition is enough. */ + if (nf != NULL) + nf = uninorm_decomposing_form (nf); + + /* Case-fold and normalize S1. */ + norms1_length = sizeof (buf1) / sizeof (UNIT); + norms1 = U_CASEFOLD (s1, n1, iso639_language, nf, buf1, &norms1_length); + if (norms1 == NULL) + /* errno is set here. */ + return -1; + + /* Case-fold and normalize S2. */ + norms2_length = sizeof (buf2) / sizeof (UNIT); + norms2 = U_CASEFOLD (s2, n2, iso639_language, nf, buf2, &norms2_length); + if (norms2 == NULL) + { + if (norms1 != buf1) + { + int saved_errno = errno; + free (norms1); + errno = saved_errno; + } + return -1; + } + + /* Compare the normalized strings. */ + cmp = U_CMP2 (norms1, norms1_length, norms2, norms2_length); + if (cmp > 0) + cmp = 1; + else if (cmp < 0) + cmp = -1; + + if (norms2 != buf2) + free (norms2); + if (norms1 != buf1) + free (norms1); + *resultp = cmp; + return 0; +} diff --git a/lib/unicase/u-casecoll.h b/lib/unicase/u-casecoll.h new file mode 100644 index 00000000..73094abe --- /dev/null +++ b/lib/unicase/u-casecoll.h @@ -0,0 +1,68 @@ +/* Locale dependent, case and normalization insensitive comparison of Unicode + strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2, + const char *iso639_language, uninorm_t nf, int *resultp) +{ + char buf1[2048]; + char buf2[2048]; + char *transformed1; + size_t transformed1_length; + char *transformed2; + size_t transformed2_length; + int cmp; + + /* Normalize and transform S1. */ + transformed1_length = sizeof (buf1); + transformed1 = + U_CASEXFRM (s1, n1, iso639_language, nf, buf1, &transformed1_length); + if (transformed1 == NULL) + /* errno is set here. */ + return -1; + + /* Normalize and transform S2. */ + transformed2_length = sizeof (buf2); + transformed2 = + U_CASEXFRM (s2, n2, iso639_language, nf, buf2, &transformed2_length); + if (transformed2 == NULL) + { + if (transformed1 != buf1) + { + int saved_errno = errno; + free (transformed1); + errno = saved_errno; + } + return -1; + } + + /* Compare the transformed strings. */ + cmp = memcmp2 (transformed1, transformed1_length, + transformed2, transformed2_length); + if (cmp < 0) + cmp = -1; + else if (cmp > 0) + cmp = 1; + + if (transformed2 != buf2) + free (transformed2); + if (transformed1 != buf1) + free (transformed1); + *resultp = cmp; + return 0; +} diff --git a/lib/unicase/u-casefold.h b/lib/unicase/u-casefold.h new file mode 100644 index 00000000..c41f4e18 --- /dev/null +++ b/lib/unicase/u-casefold.h @@ -0,0 +1,28 @@ +/* Casefolding mapping for Unicode strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (const UNIT *s, size_t n, const char *iso639_language, + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp) +{ + return U_CT_CASEFOLD (s, n, + unicase_empty_prefix_context, unicase_empty_suffix_context, + iso639_language, + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u-casemap.h b/lib/unicase/u-casemap.h new file mode 100644 index 00000000..ea41444a --- /dev/null +++ b/lib/unicase/u-casemap.h @@ -0,0 +1,416 @@ +/* Case mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (const UNIT *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + ucs4_t (*single_character_map) (ucs4_t), + size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp) +{ + /* The result being accumulated. */ + UNIT *result; + size_t length; + size_t allocated; + + /* Initialize the accumulator. */ + if (nf != NULL || resultbuf == NULL) + { + result = NULL; + allocated = 0; + } + else + { + result = resultbuf; + allocated = *lengthp; + } + length = 0; + + { + const UNIT *s_end = s + n; + + /* Helper for evaluating the FINAL_SIGMA condition: + Last character that was not case-ignorable. */ + ucs4_t last_char_except_ignorable = + prefix_context.last_char_except_ignorable; + + /* Helper for evaluating the AFTER_SOFT_DOTTED and AFTER_I conditions: + Last character that was of combining class 230 ("Above") or 0. */ + ucs4_t last_char_normal_or_above = + prefix_context.last_char_normal_or_above; + + while (s < s_end) + { + ucs4_t uc; + int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); + + ucs4_t mapped_uc[3]; + unsigned int mapped_count; + + if (uc < 0x10000) + { + /* Look first in the special-casing table. */ + char code[3]; + + code[0] = (uc >> 8) & 0xff; + code[1] = uc & 0xff; + + for (code[2] = 0; ; code[2]++) + { + const struct special_casing_rule *rule = + gl_unicase_special_lookup (code, 3); + + if (rule == NULL) + break; + + /* Test if the condition applies. */ + /* Does the language apply? */ + if (rule->language[0] == '\0' + || (iso639_language != NULL + && iso639_language[0] == rule->language[0] + && iso639_language[1] == rule->language[1])) + { + /* Does the context apply? */ + int context = rule->context; + bool applies; + + if (context < 0) + context = - context; + switch (context) + { + case SCC_ALWAYS: + applies = true; + break; + + case SCC_FINAL_SIGMA: + /* "Before" condition: preceded by a sequence + consisting of a cased letter and a case-ignorable + sequence. + "After" condition: not followed by a sequence + consisting of a case-ignorable sequence and then a + cased letter. */ + /* Test the "before" condition. */ + applies = uc_is_cased (last_char_except_ignorable); + /* Test the "after" condition. */ + if (applies) + { + const UNIT *s2 = s + count; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + /* Our uc_is_case_ignorable function is + known to return false for all cased + characters. So we can call + uc_is_case_ignorable first. */ + if (!uc_is_case_ignorable (uc2)) + { + applies = ! uc_is_cased (uc2); + break; + } + s2 += count2; + } + else + { + applies = ! uc_is_cased (suffix_context.first_char_except_ignorable); + break; + } + } + } + break; + + case SCC_AFTER_SOFT_DOTTED: + /* "Before" condition: There is a Soft_Dotted character + before it, with no intervening character of + combining class 0 or 230 (Above). */ + /* Test the "before" condition. */ + applies = uc_is_property_soft_dotted (last_char_normal_or_above); + break; + + case SCC_MORE_ABOVE: + /* "After" condition: followed by a character of + combining class 230 (Above) with no intervening + character of combining class 0 or 230 (Above). */ + /* Test the "after" condition. */ + { + const UNIT *s2 = s + count; + applies = false; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + int ccc = uc_combining_class (uc2); + if (ccc == UC_CCC_A) + { + applies = true; + break; + } + if (ccc == UC_CCC_NR) + break; + s2 += count2; + } + else + { + applies = ((suffix_context.bits & SCC_MORE_ABOVE_MASK) != 0); + break; + } + } + } + break; + + case SCC_BEFORE_DOT: + /* "After" condition: followed by COMBINING DOT ABOVE + (U+0307). Any sequence of characters with a + combining class that is neither 0 nor 230 may + intervene between the current character and the + combining dot above. */ + /* Test the "after" condition. */ + { + const UNIT *s2 = s + count; + applies = false; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + if (uc2 == 0x0307) /* COMBINING DOT ABOVE */ + { + applies = true; + break; + } + { + int ccc = uc_combining_class (uc2); + if (ccc == UC_CCC_A || ccc == UC_CCC_NR) + break; + } + s2 += count2; + } + else + { + applies = ((suffix_context.bits & SCC_BEFORE_DOT_MASK) != 0); + break; + } + } + } + break; + + case SCC_AFTER_I: + /* "Before" condition: There is an uppercase I before + it, and there is no intervening character of + combining class 0 or 230 (Above). */ + /* Test the "before" condition. */ + applies = (last_char_normal_or_above == 'I'); + break; + + default: + abort (); + } + if (rule->context < 0) + applies = !applies; + + if (applies) + { + /* The rule applies. + Look up the mapping (0 to 3 characters). */ + const unsigned short *mapped_in_rule = + (const unsigned short *)((const char *)rule + offset_in_rule); + + if (mapped_in_rule[0] == 0) + mapped_count = 0; + else + { + mapped_uc[0] = mapped_in_rule[0]; + if (mapped_in_rule[1] == 0) + mapped_count = 1; + else + { + mapped_uc[1] = mapped_in_rule[1]; + if (mapped_in_rule[2] == 0) + mapped_count = 2; + else + { + mapped_uc[2] = mapped_in_rule[2]; + mapped_count = 3; + } + } + } + goto found_mapping; + } + } + + /* Optimization: Save a hash table lookup in the next round. */ + if (!rule->has_next) + break; + } + } + + /* No special-cased mapping. So use the locale and context independent + mapping. */ + mapped_uc[0] = single_character_map (uc); + mapped_count = 1; + + found_mapping: + /* Found the mapping: uc maps to mapped_uc[0..mapped_count-1]. */ + { + unsigned int i; + + for (i = 0; i < mapped_count; i++) + { + ucs4_t muc = mapped_uc[i]; + + /* Append muc to the result accumulator. */ + if (length < allocated) + { + int ret = U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail; + } + if (ret >= 0) + { + length += ret; + goto done_appending; + } + } + { + size_t old_allocated = allocated; + size_t new_allocated = 2 * old_allocated; + if (new_allocated < 64) + new_allocated = 64; + if (new_allocated < old_allocated) /* integer overflow? */ + abort (); + { + UNIT *larger_result; + if (result == NULL) + { + larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + else if (result == resultbuf) + { + larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + U_CPY (larger_result, resultbuf, length); + } + else + { + larger_result = + (UNIT *) realloc (result, new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + result = larger_result; + allocated = new_allocated; + { + int ret = U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail; + } + if (ret < 0) + abort (); + length += ret; + goto done_appending; + } + } + } + done_appending: ; + } + } + + if (!uc_is_case_ignorable (uc)) + last_char_except_ignorable = uc; + + { + int ccc = uc_combining_class (uc); + if (ccc == UC_CCC_A || ccc == UC_CCC_NR) + last_char_normal_or_above = uc; + } + + s += count; + } + } + + if (nf != NULL) + { + /* Finally, normalize the result. */ + UNIT *normalized_result; + + normalized_result = U_NORMALIZE (nf, result, length, resultbuf, lengthp); + if (normalized_result == NULL) + goto fail; + + free (result); + return normalized_result; + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + UNIT *memory; + + memory = (UNIT *) realloc (result, length * sizeof (UNIT)); + if (memory != NULL) + result = memory; + } + + *lengthp = length; + return result; + + fail: + if (result != resultbuf) + { + int saved_errno = errno; + free (result); + errno = saved_errno; + } + return NULL; +} diff --git a/lib/unicase/u-casexfrm.h b/lib/unicase/u-casexfrm.h new file mode 100644 index 00000000..e36aff3b --- /dev/null +++ b/lib/unicase/u-casexfrm.h @@ -0,0 +1,88 @@ +/* Locale dependent transformation for case insensitive comparison of Unicode + strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +char * +FUNC (const UNIT *s, size_t n, const char *iso639_language, uninorm_t nf, + char *resultbuf, size_t *lengthp) +{ + UNIT foldedsbuf[2048 / sizeof (UNIT)]; + UNIT *foldeds; + size_t foldeds_length; + char convsbuf[2048]; + char *convs; + size_t convs_length; + char *result; + + /* Casefold and normalize the Unicode string. */ + foldeds_length = sizeof (foldedsbuf) / sizeof (UNIT); + foldeds = U_CASEFOLD (s, n, iso639_language, nf, foldedsbuf, &foldeds_length); + if (foldeds == NULL) + /* errno is set here. */ + return NULL; + + /* Convert it to locale encoding. */ + convs_length = sizeof (convsbuf) - 1; + convs = U_CONV_TO_ENCODING (locale_charset (), + iconveh_error, + foldeds, foldeds_length, + NULL, + convsbuf, &convs_length); + if (convs == NULL) + { + if (foldeds != foldedsbuf) + { + int saved_errno = errno; + free (foldeds); + errno = saved_errno; + } + return NULL; + } + + if (foldeds != foldedsbuf) + free (foldeds); + + /* Ensure one more byte is available. */ + if (convs != convsbuf) + { + char *memory = (char *) realloc (convs, convs_length + 1); + if (memory == NULL) + { + free (convs); + errno = ENOMEM; + return NULL; + } + convs = memory; + } + + /* Apply locale dependent transformations for comparison. */ + result = memxfrm (convs, convs_length, resultbuf, lengthp); + if (result == NULL) + { + if (convs != convsbuf) + { + int saved_errno = errno; + free (convs); + errno = saved_errno; + } + return NULL; + } + + if (convs != convsbuf) + free (convs); + return result; +} diff --git a/lib/unicase/u-ct-casefold.h b/lib/unicase/u-ct-casefold.h new file mode 100644 index 00000000..d97be264 --- /dev/null +++ b/lib/unicase/u-ct-casefold.h @@ -0,0 +1,107 @@ +/* Casefolding mapping for Unicode substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (const UNIT *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp) +{ + /* Implement the three definitions of caseless matching, as described in + Unicode 5.0, section "Default caseless matching": + - If no normalization is requested, simply apply the casefolding. + X -> toCasefold(X). + - If canonical normalization is requested, apply it, and apply an NFD + before. + X -> NFD(toCasefold(NFD(X))). + - If compatibility normalization is requested, apply it twice, apply + the normalization after each, and apply an NFD before: + X -> NFKD(toCasefold(NFKD(toCasefold(NFD(X))))). */ + if (nf == NULL) + /* X -> toCasefold(X) */ + return U_CASEMAP (s, n, prefix_context, suffix_context, iso639_language, + uc_tocasefold, offsetof (struct special_casing_rule, casefold[0]), + NULL, + resultbuf, lengthp); + else + { + uninorm_t nfd = uninorm_decomposing_form (nf); + /* X -> nf(toCasefold(NFD(X))) or + X -> nf(toCasefold(nfd(toCasefold(NFD(X))))) */ + int repeat = (uninorm_is_compat_decomposing (nf) ? 2 : 1); + UNIT tmpbuf1[2048 / sizeof (UNIT)]; + UNIT tmpbuf2[2048 / sizeof (UNIT)]; + UNIT *tmp1; + size_t tmp1_length; + UNIT *tmp2; + size_t tmp2_length; + + tmp1_length = sizeof (tmpbuf1) / sizeof (UNIT); + tmp1 = U_NORMALIZE (UNINORM_NFD, s, n, tmpbuf1, &tmp1_length); + if (tmp1 == NULL) + /* errno is set here. */ + return NULL; + + do + { + tmp2_length = sizeof (tmpbuf2) / sizeof (UNIT); + tmp2 = U_CASEMAP (tmp1, tmp1_length, + prefix_context, suffix_context, iso639_language, + uc_tocasefold, offsetof (struct special_casing_rule, casefold[0]), + NULL, + tmpbuf2, &tmp2_length); + if (tmp2 == NULL) + { + int saved_errno = errno; + if (tmp1 != tmpbuf1) + free (tmp1); + errno = saved_errno; + return NULL; + } + + if (tmp1 != tmpbuf1) + free (tmp1); + + if (repeat > 1) + { + tmp1_length = sizeof (tmpbuf1) / sizeof (UNIT); + tmp1 = U_NORMALIZE (nfd, tmp2, tmp2_length, + tmpbuf1, &tmp1_length); + } + else + /* Last run through this loop. */ + tmp1 = U_NORMALIZE (nf, tmp2, tmp2_length, + resultbuf, lengthp); + if (tmp1 == NULL) + { + int saved_errno = errno; + if (tmp2 != tmpbuf2) + free (tmp2); + errno = saved_errno; + return NULL; + } + + if (tmp2 != tmpbuf2) + free (tmp2); + } + while (--repeat > 0); + + return tmp1; + } +} diff --git a/lib/unicase/u-ct-totitle.h b/lib/unicase/u-ct-totitle.h new file mode 100644 index 00000000..f0d4fd77 --- /dev/null +++ b/lib/unicase/u-ct-totitle.h @@ -0,0 +1,501 @@ +/* Titlecase mapping for UTF-8/UTF-16/UTF-32 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Quoting the Unicode standard, section "Default Case Algorithms": + Find the word boundaries in X according to Unicode Standard Annex #29, + “Text Boundaries.” For each word boundary, find the first cased character + F following the word boundary. If F exists, map F to Titlecase_Mapping(F); + then map all characters C between F and the following word boundary to + Lowercase_Mapping(C). */ + +UNIT * +FUNC (const UNIT *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp) +{ + /* The result being accumulated. */ + UNIT *result; + size_t length; + size_t allocated; + /* An array containing the word break positions. */ + char *wordbreaks; + + /* Initialize the accumulator. */ + if (nf != NULL || resultbuf == NULL) + { + result = NULL; + allocated = 0; + } + else + { + result = resultbuf; + allocated = *lengthp; + } + length = 0; + + /* Initialize the word breaks array. */ + if (n > 0) + { + wordbreaks = (char *) malloc (n); + if (wordbreaks == NULL) + { + errno = ENOMEM; + goto fail2; + } + U_WORDBREAKS (s, n, wordbreaks); + } + else + wordbreaks = NULL; + + { + const UNIT *s_end = s + n; + const char *wp = wordbreaks; + + /* When considering the string as segmented by word boundaries: For each + such segment: + - In the first part, we are searching for the first cased character. + In this state, in_word_first_part = true, and no conversion takes + place. + - In the second part, we are converting every character: the first + among these characters to title case, the other ones to lower case. + In this state, in_word_first_part = false. */ + bool in_word_first_part = true; + + /* Helper for evaluating the FINAL_SIGMA condition: + Last character that was not case-ignorable. */ + ucs4_t last_char_except_ignorable = + prefix_context.last_char_except_ignorable; + + /* Helper for evaluating the AFTER_SOFT_DOTTED and AFTER_I conditions: + Last character that was of combining class 230 ("Above") or 0. */ + ucs4_t last_char_normal_or_above = + prefix_context.last_char_normal_or_above; + + while (s < s_end) + { + /* Fetch the next character. */ + ucs4_t uc; + int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); + + ucs4_t (*single_character_map) (ucs4_t); + size_t offset_in_rule; /* offset in 'struct special_casing_rule' */ + + ucs4_t mapped_uc[3]; + unsigned int mapped_count; + + if (*wp) + /* Crossing a word boundary. */ + in_word_first_part = true; + + /* Determine single_character_map, offset_in_rule. + There are three possibilities: + - uc should not be converted. + - uc should be titlecased. + - uc should be lowercased. */ + if (in_word_first_part) + { + if (uc_is_cased (uc)) + { + /* uc is to be titlecased. */ + single_character_map = uc_totitle; + offset_in_rule = offsetof (struct special_casing_rule, title[0]); + in_word_first_part = false; + } + else + { + /* uc is not converted. */ + single_character_map = NULL; + offset_in_rule = 0; + } + } + else + { + /* uc is to be lowercased. */ + single_character_map = uc_tolower; + offset_in_rule = offsetof (struct special_casing_rule, lower[0]); + } + + /* Actually map uc. */ + if (single_character_map == NULL) + { + mapped_uc[0] = uc; + mapped_count = 1; + goto found_mapping; + } + + if (uc < 0x10000) + { + /* Look first in the special-casing table. */ + char code[3]; + + code[0] = (uc >> 8) & 0xff; + code[1] = uc & 0xff; + + for (code[2] = 0; ; code[2]++) + { + const struct special_casing_rule *rule = + gl_unicase_special_lookup (code, 3); + + if (rule == NULL) + break; + + /* Test if the condition applies. */ + /* Does the language apply? */ + if (rule->language[0] == '\0' + || (iso639_language != NULL + && iso639_language[0] == rule->language[0] + && iso639_language[1] == rule->language[1])) + { + /* Does the context apply? */ + int context = rule->context; + bool applies; + + if (context < 0) + context = - context; + switch (context) + { + case SCC_ALWAYS: + applies = true; + break; + + case SCC_FINAL_SIGMA: + /* "Before" condition: preceded by a sequence + consisting of a cased letter and a case-ignorable + sequence. + "After" condition: not followed by a sequence + consisting of a case-ignorable sequence and then a + cased letter. */ + /* Test the "before" condition. */ + applies = uc_is_cased (last_char_except_ignorable); + /* Test the "after" condition. */ + if (applies) + { + const UNIT *s2 = s + count; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + /* Our uc_is_case_ignorable function is + known to return false for all cased + characters. So we can call + uc_is_case_ignorable first. */ + if (!uc_is_case_ignorable (uc2)) + { + applies = ! uc_is_cased (uc2); + break; + } + s2 += count2; + } + else + { + applies = ! uc_is_cased (suffix_context.first_char_except_ignorable); + break; + } + } + } + break; + + case SCC_AFTER_SOFT_DOTTED: + /* "Before" condition: There is a Soft_Dotted character + before it, with no intervening character of + combining class 0 or 230 (Above). */ + /* Test the "before" condition. */ + applies = uc_is_property_soft_dotted (last_char_normal_or_above); + break; + + case SCC_MORE_ABOVE: + /* "After" condition: followed by a character of + combining class 230 (Above) with no intervening + character of combining class 0 or 230 (Above). */ + /* Test the "after" condition. */ + { + const UNIT *s2 = s + count; + applies = false; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + int ccc = uc_combining_class (uc2); + if (ccc == UC_CCC_A) + { + applies = true; + break; + } + if (ccc == UC_CCC_NR) + break; + s2 += count2; + } + else + { + applies = ((suffix_context.bits & SCC_MORE_ABOVE_MASK) != 0); + break; + } + } + } + break; + + case SCC_BEFORE_DOT: + /* "After" condition: followed by COMBINING DOT ABOVE + (U+0307). Any sequence of characters with a + combining class that is neither 0 nor 230 may + intervene between the current character and the + combining dot above. */ + /* Test the "after" condition. */ + { + const UNIT *s2 = s + count; + applies = false; + for (;;) + { + if (s2 < s_end) + { + ucs4_t uc2; + int count2 = U_MBTOUC_UNSAFE (&uc2, s2, s_end - s2); + if (uc2 == 0x0307) /* COMBINING DOT ABOVE */ + { + applies = true; + break; + } + { + int ccc = uc_combining_class (uc2); + if (ccc == UC_CCC_A || ccc == UC_CCC_NR) + break; + } + s2 += count2; + } + else + { + applies = ((suffix_context.bits & SCC_BEFORE_DOT_MASK) != 0); + break; + } + } + } + break; + + case SCC_AFTER_I: + /* "Before" condition: There is an uppercase I before + it, and there is no intervening character of + combining class 0 or 230 (Above). */ + /* Test the "before" condition. */ + applies = (last_char_normal_or_above == 'I'); + break; + + default: + abort (); + } + if (rule->context < 0) + applies = !applies; + + if (applies) + { + /* The rule applies. + Look up the mapping (0 to 3 characters). */ + const unsigned short *mapped_in_rule = + (const unsigned short *)((const char *)rule + offset_in_rule); + + if (mapped_in_rule[0] == 0) + mapped_count = 0; + else + { + mapped_uc[0] = mapped_in_rule[0]; + if (mapped_in_rule[1] == 0) + mapped_count = 1; + else + { + mapped_uc[1] = mapped_in_rule[1]; + if (mapped_in_rule[2] == 0) + mapped_count = 2; + else + { + mapped_uc[2] = mapped_in_rule[2]; + mapped_count = 3; + } + } + } + goto found_mapping; + } + } + + /* Optimization: Save a hash table lookup in the next round. */ + if (!rule->has_next) + break; + } + } + + /* No special-cased mapping. So use the locale and context independent + mapping. */ + mapped_uc[0] = single_character_map (uc); + mapped_count = 1; + + found_mapping: + /* Found the mapping: uc maps to mapped_uc[0..mapped_count-1]. */ + { + unsigned int i; + + for (i = 0; i < mapped_count; i++) + { + ucs4_t muc = mapped_uc[i]; + + /* Append muc to the result accumulator. */ + if (length < allocated) + { + int ret = U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail1; + } + if (ret >= 0) + { + length += ret; + goto done_appending; + } + } + { + size_t old_allocated = allocated; + size_t new_allocated = 2 * old_allocated; + if (new_allocated < 64) + new_allocated = 64; + if (new_allocated < old_allocated) /* integer overflow? */ + abort (); + { + UNIT *larger_result; + if (result == NULL) + { + larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail1; + } + } + else if (result == resultbuf) + { + larger_result = (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail1; + } + U_CPY (larger_result, resultbuf, length); + } + else + { + larger_result = + (UNIT *) realloc (result, new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail1; + } + } + result = larger_result; + allocated = new_allocated; + { + int ret = U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail1; + } + if (ret < 0) + abort (); + length += ret; + goto done_appending; + } + } + } + done_appending: ; + } + } + + if (!uc_is_case_ignorable (uc)) + last_char_except_ignorable = uc; + + { + int ccc = uc_combining_class (uc); + if (ccc == UC_CCC_A || ccc == UC_CCC_NR) + last_char_normal_or_above = uc; + } + + s += count; + wp += count; + } + } + + free (wordbreaks); + + if (nf != NULL) + { + /* Finally, normalize the result. */ + UNIT *normalized_result; + + normalized_result = U_NORMALIZE (nf, result, length, resultbuf, lengthp); + if (normalized_result == NULL) + goto fail2; + + free (result); + return normalized_result; + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + goto fail2; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + UNIT *memory; + + memory = (UNIT *) realloc (result, length * sizeof (UNIT)); + if (memory != NULL) + result = memory; + } + + *lengthp = length; + return result; + + fail1: + { + int saved_errno = errno; + free (wordbreaks); + errno = saved_errno; + } + fail2: + if (result != resultbuf) + { + int saved_errno = errno; + free (result); + errno = saved_errno; + } + return NULL; +} diff --git a/lib/unicase/u-is-cased.h b/lib/unicase/u-is-cased.h new file mode 100644 index 00000000..b96a60f0 --- /dev/null +++ b/lib/unicase/u-is-cased.h @@ -0,0 +1,128 @@ +/* Test whether case matters for a Unicode string. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +FUNC (const UNIT *s, size_t n, const char *iso639_language, + bool *resultp) +{ + UNIT normsbuf[2048 / sizeof (UNIT)]; + UNIT *norms; + size_t norms_length; + UNIT mappedbuf[2048 / sizeof (UNIT)]; + UNIT *mapped_toupper; + UNIT *mapped_tolower; + UNIT *mapped_totitle; + size_t mapped_length; + + /* Apply canonical decomposition to S. */ + norms_length = sizeof (normsbuf) / sizeof (UNIT); + norms = U_NORMALIZE (UNINORM_NFD, s, n, normsbuf, &norms_length); + if (norms == NULL) + /* errno is set here. */ + return -1; + + mapped_length = sizeof (mappedbuf) / sizeof (UNIT); + + /* Apply toupper mapping. */ + mapped_toupper = U_TOUPPER (norms, norms_length, iso639_language, NULL, + mappedbuf, &mapped_length); + if (mapped_toupper == NULL) + goto fail; + + /* Compare. */ + if (!(mapped_length == norms_length + && U_CMP (mapped_toupper, norms, norms_length) == 0)) + { + if (mapped_toupper != mappedbuf) + free (mapped_toupper); + goto yes; + } + + /* Apply tolower mapping. */ + mapped_tolower = U_TOLOWER (norms, norms_length, iso639_language, NULL, + mapped_toupper, &mapped_length); + if (mapped_tolower == NULL) + { + if (mapped_toupper != mappedbuf) + { + int saved_errno = errno; + free (mapped_toupper); + errno = saved_errno; + } + goto fail; + } + + if (mapped_toupper != mapped_tolower && mapped_toupper != mappedbuf) + free (mapped_toupper); + + /* Compare. */ + if (!(mapped_length == norms_length + && U_CMP (mapped_tolower, norms, norms_length) == 0)) + { + if (mapped_tolower != mappedbuf) + free (mapped_tolower); + goto yes; + } + + /* Apply totitle mapping. */ + mapped_totitle = U_TOTITLE (norms, norms_length, iso639_language, NULL, + mapped_tolower, &mapped_length); + if (mapped_totitle == NULL) + { + if (mapped_tolower != mappedbuf) + { + int saved_errno = errno; + free (mapped_tolower); + errno = saved_errno; + } + goto fail; + } + + if (mapped_tolower != mapped_totitle && mapped_tolower != mappedbuf) + free (mapped_tolower); + + /* Compare. */ + if (!(mapped_length == norms_length + && U_CMP (mapped_totitle, norms, norms_length) == 0)) + { + if (mapped_totitle != mappedbuf) + free (mapped_totitle); + goto yes; + } + + if (mapped_totitle != mappedbuf) + free (mapped_totitle); + if (norms != normsbuf) + free (norms); + *resultp = false; + return 0; + + yes: + if (norms != normsbuf) + free (norms); + *resultp = true; + return 0; + + fail: + if (norms != normsbuf) + { + int saved_errno = errno; + free (norms); + errno = saved_errno; + } + return -1; +} diff --git a/lib/unicase/u-is-invariant.h b/lib/unicase/u-is-invariant.h new file mode 100644 index 00000000..e6b7fbb4 --- /dev/null +++ b/lib/unicase/u-is-invariant.h @@ -0,0 +1,64 @@ +/* Test whether a Unicode string is invariant under a given case mapping. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +FUNC (const UNIT *s, size_t n, + UNIT * (*mapping) (const UNIT *s, size_t n, const char *iso639_language, + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp), + const char *iso639_language, + bool *resultp) +{ + UNIT normsbuf[2048 / sizeof (UNIT)]; + UNIT *norms; + size_t norms_length; + UNIT mappedbuf[2048 / sizeof (UNIT)]; + UNIT *mapped; + size_t mapped_length; + + /* Apply canonical decomposition to S. */ + norms_length = sizeof (normsbuf) / sizeof (UNIT); + norms = U_NORMALIZE (UNINORM_NFD, s, n, normsbuf, &norms_length); + if (norms == NULL) + /* errno is set here. */ + return -1; + + /* Apply mapping. */ + mapped_length = sizeof (mappedbuf) / sizeof (UNIT); + mapped = mapping (norms, norms_length, iso639_language, NULL, + mappedbuf, &mapped_length); + if (mapped == NULL) + { + if (norms != normsbuf) + { + int saved_errno = errno; + free (norms); + errno = saved_errno; + } + return -1; + } + + /* Compare. */ + *resultp = (mapped_length == norms_length + && U_CMP (mapped, norms, norms_length) == 0); + + if (mapped != mappedbuf) + free (mapped); + if (norms != normsbuf) + free (norms); + return 0; +} diff --git a/lib/unicase/u-totitle.h b/lib/unicase/u-totitle.h new file mode 100644 index 00000000..431f000a --- /dev/null +++ b/lib/unicase/u-totitle.h @@ -0,0 +1,28 @@ +/* Titlecase mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (const UNIT *s, size_t n, const char *iso639_language, + uninorm_t nf, + UNIT *resultbuf, size_t *lengthp) +{ + return U_CT_TOTITLE (s, n, + unicase_empty_prefix_context, unicase_empty_suffix_context, + iso639_language, + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u16-casecmp.c b/lib/unicase/u16-casecmp.c new file mode 100644 index 00000000..1110874e --- /dev/null +++ b/lib/unicase/u16-casecmp.c @@ -0,0 +1,35 @@ +/* Case and normalization insensitive comparison of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "minmax.h" +#include "uninorm.h" +#include "unistr.h" + +#define FUNC u16_casecmp +#define UNIT uint16_t +#define SRC_UNIT uint16_t +#define U_CASEFOLD u16_casefold +#define U_CMP2 u16_cmp2 +#include "u-casecmp.h" diff --git a/lib/unicase/u16-casecoll.c b/lib/unicase/u16-casecoll.c new file mode 100644 index 00000000..882039cf --- /dev/null +++ b/lib/unicase/u16-casecoll.c @@ -0,0 +1,32 @@ +/* Locale dependent, case and normalization insensitive comparison of UTF-16 + strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "memcmp2.h" + +#define FUNC u16_casecoll +#define UNIT uint16_t +#define U_CASEXFRM u16_casexfrm +#include "u-casecoll.h" diff --git a/lib/unicase/u16-casefold.c b/lib/unicase/u16-casefold.c new file mode 100644 index 00000000..55522753 --- /dev/null +++ b/lib/unicase/u16-casefold.c @@ -0,0 +1,26 @@ +/* Casefolding mapping for UTF-16 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#define FUNC u16_casefold +#define UNIT uint16_t +#define U_CT_CASEFOLD u16_ct_casefold +#include "u-casefold.h" diff --git a/lib/unicase/u16-casemap.c b/lib/unicase/u16-casemap.c new file mode 100644 index 00000000..0766de92 --- /dev/null +++ b/lib/unicase/u16-casemap.c @@ -0,0 +1,40 @@ +/* Case mapping for UTF-16 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicasemap.h" + +#include +#include +#include + +#include "unistr.h" +#include "unictype.h" +#include "uninorm.h" +#include "caseprop.h" +#include "context.h" +#include "special-casing.h" + +#define FUNC u16_casemap +#define UNIT uint16_t +#define U_MBTOUC_UNSAFE u16_mbtouc_unsafe +#define U_UCTOMB u16_uctomb +#define U_CPY u16_cpy +#define U_NORMALIZE u16_normalize +#include "u-casemap.h" diff --git a/lib/unicase/u16-casexfrm.c b/lib/unicase/u16-casexfrm.c new file mode 100644 index 00000000..09d08ce1 --- /dev/null +++ b/lib/unicase/u16-casexfrm.c @@ -0,0 +1,35 @@ +/* Locale dependent transformation for case insensitive comparison of UTF-16 + strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "localcharset.h" +#include "uniconv.h" +#include "memxfrm.h" + +#define FUNC u16_casexfrm +#define UNIT uint16_t +#define U_CASEFOLD u16_casefold +#define U_CONV_TO_ENCODING u16_conv_to_encoding +#include "u-casexfrm.h" diff --git a/lib/unicase/u16-ct-casefold.c b/lib/unicase/u16-ct-casefold.c new file mode 100644 index 00000000..6dff77d7 --- /dev/null +++ b/lib/unicase/u16-ct-casefold.c @@ -0,0 +1,35 @@ +/* Casefolding mapping for UTF-16 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include +#include + +#include "unicasemap.h" +#include "special-casing.h" +#include "casefold.h" + +#define FUNC u16_ct_casefold +#define UNIT uint16_t +#define U_CASEMAP u16_casemap +#define U_NORMALIZE u16_normalize +#include "u-ct-casefold.h" diff --git a/lib/unicase/u16-ct-tolower.c b/lib/unicase/u16-ct-tolower.c new file mode 100644 index 00000000..36b34e04 --- /dev/null +++ b/lib/unicase/u16-ct-tolower.c @@ -0,0 +1,40 @@ +/* Lowercase mapping for UTF-16 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint16_t * +u16_ct_tolower (const uint16_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp) +{ + return u16_casemap (s, n, prefix_context, suffix_context, iso639_language, + uc_tolower, offsetof (struct special_casing_rule, lower[0]), + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u16-ct-totitle.c b/lib/unicase/u16-ct-totitle.c new file mode 100644 index 00000000..c01021b8 --- /dev/null +++ b/lib/unicase/u16-ct-totitle.c @@ -0,0 +1,43 @@ +/* Titlecase mapping for UTF-16 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include +#include +#include + +#include "unistr.h" +#include "unictype.h" +#include "uniwbrk.h" +#include "uninorm.h" +#include "caseprop.h" +#include "context.h" +#include "special-casing.h" + +#define FUNC u16_ct_totitle +#define UNIT uint16_t +#define U_WORDBREAKS u16_wordbreaks +#define U_MBTOUC_UNSAFE u16_mbtouc_unsafe +#define U_UCTOMB u16_uctomb +#define U_CPY u16_cpy +#define U_NORMALIZE u16_normalize +#include "u-ct-totitle.h" diff --git a/lib/unicase/u16-ct-toupper.c b/lib/unicase/u16-ct-toupper.c new file mode 100644 index 00000000..029c74b4 --- /dev/null +++ b/lib/unicase/u16-ct-toupper.c @@ -0,0 +1,40 @@ +/* Uppercase mapping for UTF-16 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint16_t * +u16_ct_toupper (const uint16_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp) +{ + return u16_casemap (s, n, prefix_context, suffix_context, iso639_language, + uc_toupper, offsetof (struct special_casing_rule, upper[0]), + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u16-is-cased.c b/lib/unicase/u16-is-cased.c new file mode 100644 index 00000000..c2196cef --- /dev/null +++ b/lib/unicase/u16-is-cased.c @@ -0,0 +1,36 @@ +/* Test whether case matters for an UTF-16 string. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "uninorm.h" +#include "unistr.h" + +#define FUNC u16_is_cased +#define UNIT uint16_t +#define U_NORMALIZE u16_normalize +#define U_TOUPPER u16_toupper +#define U_TOLOWER u16_tolower +#define U_TOTITLE u16_totitle +#define U_CMP u16_cmp +#include "u-is-cased.h" diff --git a/lib/unicase/u16-is-casefolded.c b/lib/unicase/u16-is-casefolded.c new file mode 100644 index 00000000..64a4ec18 --- /dev/null +++ b/lib/unicase/u16-is-casefolded.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-16 string is already case-folded. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u16_is_casefolded (const uint16_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u16_is_invariant (s, n, u16_casefold, iso639_language, resultp); +} diff --git a/lib/unicase/u16-is-invariant.c b/lib/unicase/u16-is-invariant.c new file mode 100644 index 00000000..cace25a7 --- /dev/null +++ b/lib/unicase/u16-is-invariant.c @@ -0,0 +1,33 @@ +/* Test whether an UTF-16 string is invariant under a given case mapping. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase/invariant.h" + +#include +#include + +#include "uninorm.h" +#include "unistr.h" + +#define FUNC u16_is_invariant +#define UNIT uint16_t +#define U_NORMALIZE u16_normalize +#define U_CMP u16_cmp +#include "u-is-invariant.h" diff --git a/lib/unicase/u16-is-lowercase.c b/lib/unicase/u16-is-lowercase.c new file mode 100644 index 00000000..36a01512 --- /dev/null +++ b/lib/unicase/u16-is-lowercase.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-16 string is entirely lower case. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u16_is_lowercase (const uint16_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u16_is_invariant (s, n, u16_tolower, iso639_language, resultp); +} diff --git a/lib/unicase/u16-is-titlecase.c b/lib/unicase/u16-is-titlecase.c new file mode 100644 index 00000000..19aacea1 --- /dev/null +++ b/lib/unicase/u16-is-titlecase.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-16 string is entirely title case. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u16_is_titlecase (const uint16_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u16_is_invariant (s, n, u16_totitle, iso639_language, resultp); +} diff --git a/lib/unicase/u16-is-uppercase.c b/lib/unicase/u16-is-uppercase.c new file mode 100644 index 00000000..53e697fd --- /dev/null +++ b/lib/unicase/u16-is-uppercase.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-16 string is entirely upper case. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u16_is_uppercase (const uint16_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u16_is_invariant (s, n, u16_toupper, iso639_language, resultp); +} diff --git a/lib/unicase/u16-tolower.c b/lib/unicase/u16-tolower.c new file mode 100644 index 00000000..0629cb4d --- /dev/null +++ b/lib/unicase/u16-tolower.c @@ -0,0 +1,39 @@ +/* Lowercase mapping for UTF-16 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint16_t * +u16_tolower (const uint16_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp) +{ + return u16_casemap (s, n, + unicase_empty_prefix_context, unicase_empty_suffix_context, + iso639_language, + uc_tolower, offsetof (struct special_casing_rule, lower[0]), + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u16-totitle.c b/lib/unicase/u16-totitle.c new file mode 100644 index 00000000..e0d14e83 --- /dev/null +++ b/lib/unicase/u16-totitle.c @@ -0,0 +1,27 @@ +/* Titlecase mapping for UTF-16 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#define FUNC u16_totitle +#define UNIT uint16_t +#define U_CT_TOTITLE u16_ct_totitle +#include "u-totitle.h" + diff --git a/lib/unicase/u16-toupper.c b/lib/unicase/u16-toupper.c new file mode 100644 index 00000000..f92989aa --- /dev/null +++ b/lib/unicase/u16-toupper.c @@ -0,0 +1,39 @@ +/* Uppercase mapping for UTF-16 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint16_t * +u16_toupper (const uint16_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp) +{ + return u16_casemap (s, n, + unicase_empty_prefix_context, unicase_empty_suffix_context, + iso639_language, + uc_toupper, offsetof (struct special_casing_rule, upper[0]), + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u32-casecmp.c b/lib/unicase/u32-casecmp.c new file mode 100644 index 00000000..e964915f --- /dev/null +++ b/lib/unicase/u32-casecmp.c @@ -0,0 +1,35 @@ +/* Case and normalization insensitive comparison of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "minmax.h" +#include "uninorm.h" +#include "unistr.h" + +#define FUNC u32_casecmp +#define UNIT uint32_t +#define SRC_UNIT uint32_t +#define U_CASEFOLD u32_casefold +#define U_CMP2 u32_cmp2 +#include "u-casecmp.h" diff --git a/lib/unicase/u32-casecoll.c b/lib/unicase/u32-casecoll.c new file mode 100644 index 00000000..88d994a0 --- /dev/null +++ b/lib/unicase/u32-casecoll.c @@ -0,0 +1,32 @@ +/* Locale dependent, case and normalization insensitive comparison of UTF-32 + strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "memcmp2.h" + +#define FUNC u32_casecoll +#define UNIT uint32_t +#define U_CASEXFRM u32_casexfrm +#include "u-casecoll.h" diff --git a/lib/unicase/u32-casefold.c b/lib/unicase/u32-casefold.c new file mode 100644 index 00000000..aff44f82 --- /dev/null +++ b/lib/unicase/u32-casefold.c @@ -0,0 +1,26 @@ +/* Casefolding mapping for UTF-32 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#define FUNC u32_casefold +#define UNIT uint32_t +#define U_CT_CASEFOLD u32_ct_casefold +#include "u-casefold.h" diff --git a/lib/unicase/u32-casemap.c b/lib/unicase/u32-casemap.c new file mode 100644 index 00000000..43e2641c --- /dev/null +++ b/lib/unicase/u32-casemap.c @@ -0,0 +1,40 @@ +/* Case mapping for UTF-32 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicasemap.h" + +#include +#include +#include + +#include "unistr.h" +#include "unictype.h" +#include "uninorm.h" +#include "caseprop.h" +#include "context.h" +#include "special-casing.h" + +#define FUNC u32_casemap +#define UNIT uint32_t +#define U_MBTOUC_UNSAFE u32_mbtouc_unsafe +#define U_UCTOMB u32_uctomb +#define U_CPY u32_cpy +#define U_NORMALIZE u32_normalize +#include "u-casemap.h" diff --git a/lib/unicase/u32-casexfrm.c b/lib/unicase/u32-casexfrm.c new file mode 100644 index 00000000..cf8fee67 --- /dev/null +++ b/lib/unicase/u32-casexfrm.c @@ -0,0 +1,35 @@ +/* Locale dependent transformation for case insensitive comparison of UTF-32 + strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "localcharset.h" +#include "uniconv.h" +#include "memxfrm.h" + +#define FUNC u32_casexfrm +#define UNIT uint32_t +#define U_CASEFOLD u32_casefold +#define U_CONV_TO_ENCODING u32_conv_to_encoding +#include "u-casexfrm.h" diff --git a/lib/unicase/u32-ct-casefold.c b/lib/unicase/u32-ct-casefold.c new file mode 100644 index 00000000..e206b677 --- /dev/null +++ b/lib/unicase/u32-ct-casefold.c @@ -0,0 +1,35 @@ +/* Casefolding mapping for UTF-32 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include +#include + +#include "unicasemap.h" +#include "special-casing.h" +#include "casefold.h" + +#define FUNC u32_ct_casefold +#define UNIT uint32_t +#define U_CASEMAP u32_casemap +#define U_NORMALIZE u32_normalize +#include "u-ct-casefold.h" diff --git a/lib/unicase/u32-ct-tolower.c b/lib/unicase/u32-ct-tolower.c new file mode 100644 index 00000000..83e9fa84 --- /dev/null +++ b/lib/unicase/u32-ct-tolower.c @@ -0,0 +1,40 @@ +/* Lowercase mapping for UTF-32 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint32_t * +u32_ct_tolower (const uint32_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp) +{ + return u32_casemap (s, n, prefix_context, suffix_context, iso639_language, + uc_tolower, offsetof (struct special_casing_rule, lower[0]), + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u32-ct-totitle.c b/lib/unicase/u32-ct-totitle.c new file mode 100644 index 00000000..f2a38782 --- /dev/null +++ b/lib/unicase/u32-ct-totitle.c @@ -0,0 +1,43 @@ +/* Titlecase mapping for UTF-32 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include +#include +#include + +#include "unistr.h" +#include "unictype.h" +#include "uniwbrk.h" +#include "uninorm.h" +#include "caseprop.h" +#include "context.h" +#include "special-casing.h" + +#define FUNC u32_ct_totitle +#define UNIT uint32_t +#define U_WORDBREAKS u32_wordbreaks +#define U_MBTOUC_UNSAFE u32_mbtouc_unsafe +#define U_UCTOMB u32_uctomb +#define U_CPY u32_cpy +#define U_NORMALIZE u32_normalize +#include "u-ct-totitle.h" diff --git a/lib/unicase/u32-ct-toupper.c b/lib/unicase/u32-ct-toupper.c new file mode 100644 index 00000000..9043ddeb --- /dev/null +++ b/lib/unicase/u32-ct-toupper.c @@ -0,0 +1,40 @@ +/* Uppercase mapping for UTF-32 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint32_t * +u32_ct_toupper (const uint32_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp) +{ + return u32_casemap (s, n, prefix_context, suffix_context, iso639_language, + uc_toupper, offsetof (struct special_casing_rule, upper[0]), + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u32-is-cased.c b/lib/unicase/u32-is-cased.c new file mode 100644 index 00000000..783e57e9 --- /dev/null +++ b/lib/unicase/u32-is-cased.c @@ -0,0 +1,36 @@ +/* Test whether case matters for an UTF-32 string. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "uninorm.h" +#include "unistr.h" + +#define FUNC u32_is_cased +#define UNIT uint32_t +#define U_NORMALIZE u32_normalize +#define U_TOUPPER u32_toupper +#define U_TOLOWER u32_tolower +#define U_TOTITLE u32_totitle +#define U_CMP u32_cmp +#include "u-is-cased.h" diff --git a/lib/unicase/u32-is-casefolded.c b/lib/unicase/u32-is-casefolded.c new file mode 100644 index 00000000..a71c767d --- /dev/null +++ b/lib/unicase/u32-is-casefolded.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-32 string is already case-folded. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u32_is_casefolded (const uint32_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u32_is_invariant (s, n, u32_casefold, iso639_language, resultp); +} diff --git a/lib/unicase/u32-is-invariant.c b/lib/unicase/u32-is-invariant.c new file mode 100644 index 00000000..190a30fe --- /dev/null +++ b/lib/unicase/u32-is-invariant.c @@ -0,0 +1,33 @@ +/* Test whether an UTF-32 string is invariant under a given case mapping. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase/invariant.h" + +#include +#include + +#include "uninorm.h" +#include "unistr.h" + +#define FUNC u32_is_invariant +#define UNIT uint32_t +#define U_NORMALIZE u32_normalize +#define U_CMP u32_cmp +#include "u-is-invariant.h" diff --git a/lib/unicase/u32-is-lowercase.c b/lib/unicase/u32-is-lowercase.c new file mode 100644 index 00000000..104afaae --- /dev/null +++ b/lib/unicase/u32-is-lowercase.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-32 string is entirely lower case. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u32_is_lowercase (const uint32_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u32_is_invariant (s, n, u32_tolower, iso639_language, resultp); +} diff --git a/lib/unicase/u32-is-titlecase.c b/lib/unicase/u32-is-titlecase.c new file mode 100644 index 00000000..5b07c8dd --- /dev/null +++ b/lib/unicase/u32-is-titlecase.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-32 string is entirely title case. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u32_is_titlecase (const uint32_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u32_is_invariant (s, n, u32_totitle, iso639_language, resultp); +} diff --git a/lib/unicase/u32-is-uppercase.c b/lib/unicase/u32-is-uppercase.c new file mode 100644 index 00000000..bb38fc69 --- /dev/null +++ b/lib/unicase/u32-is-uppercase.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-32 string is entirely upper case. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u32_is_uppercase (const uint32_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u32_is_invariant (s, n, u32_toupper, iso639_language, resultp); +} diff --git a/lib/unicase/u32-tolower.c b/lib/unicase/u32-tolower.c new file mode 100644 index 00000000..daa5c4d3 --- /dev/null +++ b/lib/unicase/u32-tolower.c @@ -0,0 +1,39 @@ +/* Lowercase mapping for UTF-32 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint32_t * +u32_tolower (const uint32_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp) +{ + return u32_casemap (s, n, + unicase_empty_prefix_context, unicase_empty_suffix_context, + iso639_language, + uc_tolower, offsetof (struct special_casing_rule, lower[0]), + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u32-totitle.c b/lib/unicase/u32-totitle.c new file mode 100644 index 00000000..21e1b0d1 --- /dev/null +++ b/lib/unicase/u32-totitle.c @@ -0,0 +1,26 @@ +/* Titlecase mapping for UTF-32 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#define FUNC u32_totitle +#define UNIT uint32_t +#define U_CT_TOTITLE u32_ct_totitle +#include "u-totitle.h" diff --git a/lib/unicase/u32-toupper.c b/lib/unicase/u32-toupper.c new file mode 100644 index 00000000..3430ad95 --- /dev/null +++ b/lib/unicase/u32-toupper.c @@ -0,0 +1,39 @@ +/* Uppercase mapping for UTF-32 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint32_t * +u32_toupper (const uint32_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp) +{ + return u32_casemap (s, n, + unicase_empty_prefix_context, unicase_empty_suffix_context, + iso639_language, + uc_toupper, offsetof (struct special_casing_rule, upper[0]), + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u8-casecmp.c b/lib/unicase/u8-casecmp.c new file mode 100644 index 00000000..4a55de91 --- /dev/null +++ b/lib/unicase/u8-casecmp.c @@ -0,0 +1,35 @@ +/* Case and normalization insensitive comparison of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "minmax.h" +#include "uninorm.h" +#include "unistr.h" + +#define FUNC u8_casecmp +#define UNIT uint8_t +#define SRC_UNIT uint8_t +#define U_CASEFOLD u8_casefold +#define U_CMP2 u8_cmp2 +#include "u-casecmp.h" diff --git a/lib/unicase/u8-casecoll.c b/lib/unicase/u8-casecoll.c new file mode 100644 index 00000000..28170e54 --- /dev/null +++ b/lib/unicase/u8-casecoll.c @@ -0,0 +1,32 @@ +/* Locale dependent, case and normalization insensitive comparison of UTF-8 + strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "memcmp2.h" + +#define FUNC u8_casecoll +#define UNIT uint8_t +#define U_CASEXFRM u8_casexfrm +#include "u-casecoll.h" diff --git a/lib/unicase/u8-casefold.c b/lib/unicase/u8-casefold.c new file mode 100644 index 00000000..32108137 --- /dev/null +++ b/lib/unicase/u8-casefold.c @@ -0,0 +1,107 @@ +/* Casefolding mapping for UTF-8 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#define FUNC u8_casefold +#define UNIT uint8_t +#define U_CT_CASEFOLD u8_ct_casefold +#include "u-casefold.h" + + +#ifdef TEST + +#include +#include +#include +#include + +/* Read the contents of an input stream, and return it, terminated with a NUL + byte. */ +char * +read_file (FILE *stream) +{ +#define BUFSIZE 4096 + char *buf = NULL; + int alloc = 0; + int size = 0; + int count; + + while (! feof (stream)) + { + if (size + BUFSIZE > alloc) + { + alloc = alloc + alloc / 2; + if (alloc < size + BUFSIZE) + alloc = size + BUFSIZE; + buf = realloc (buf, alloc); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + } + count = fread (buf + size, 1, BUFSIZE, stream); + if (count == 0) + { + if (ferror (stream)) + { + perror ("fread"); + exit (1); + } + } + else + size += count; + } + buf = realloc (buf, size + 1); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + buf[size] = '\0'; + return buf; +#undef BUFSIZE +} + +int +main (int argc, char * argv[]) +{ + setlocale (LC_ALL, ""); + if (argc == 1) + { + /* Display the case folded input string. */ + char *input = read_file (stdin); + int length = strlen (input); + size_t output_length; + uint8_t *output = + u8_casefold ((uint8_t *) input, length, uc_locale_language (), + NULL, + NULL, &output_length); + + fwrite (output, 1, output_length, stdout); + + return 0; + } + else + return 1; +} + +#endif /* TEST */ diff --git a/lib/unicase/u8-casemap.c b/lib/unicase/u8-casemap.c new file mode 100644 index 00000000..6f329155 --- /dev/null +++ b/lib/unicase/u8-casemap.c @@ -0,0 +1,40 @@ +/* Case mapping for UTF-8 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicasemap.h" + +#include +#include +#include + +#include "unistr.h" +#include "unictype.h" +#include "uninorm.h" +#include "caseprop.h" +#include "context.h" +#include "special-casing.h" + +#define FUNC u8_casemap +#define UNIT uint8_t +#define U_MBTOUC_UNSAFE u8_mbtouc_unsafe +#define U_UCTOMB u8_uctomb +#define U_CPY u8_cpy +#define U_NORMALIZE u8_normalize +#include "u-casemap.h" diff --git a/lib/unicase/u8-casexfrm.c b/lib/unicase/u8-casexfrm.c new file mode 100644 index 00000000..7e1d767c --- /dev/null +++ b/lib/unicase/u8-casexfrm.c @@ -0,0 +1,35 @@ +/* Locale dependent transformation for case insensitive comparison of UTF-8 + strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "localcharset.h" +#include "uniconv.h" +#include "memxfrm.h" + +#define FUNC u8_casexfrm +#define UNIT uint8_t +#define U_CASEFOLD u8_casefold +#define U_CONV_TO_ENCODING u8_conv_to_encoding +#include "u-casexfrm.h" diff --git a/lib/unicase/u8-ct-casefold.c b/lib/unicase/u8-ct-casefold.c new file mode 100644 index 00000000..4cc149c3 --- /dev/null +++ b/lib/unicase/u8-ct-casefold.c @@ -0,0 +1,35 @@ +/* Casefolding mapping for UTF-8 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include +#include + +#include "unicasemap.h" +#include "special-casing.h" +#include "casefold.h" + +#define FUNC u8_ct_casefold +#define UNIT uint8_t +#define U_CASEMAP u8_casemap +#define U_NORMALIZE u8_normalize +#include "u-ct-casefold.h" diff --git a/lib/unicase/u8-ct-tolower.c b/lib/unicase/u8-ct-tolower.c new file mode 100644 index 00000000..3755821e --- /dev/null +++ b/lib/unicase/u8-ct-tolower.c @@ -0,0 +1,40 @@ +/* Lowercase mapping for UTF-8 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint8_t * +u8_ct_tolower (const uint8_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp) +{ + return u8_casemap (s, n, prefix_context, suffix_context, iso639_language, + uc_tolower, offsetof (struct special_casing_rule, lower[0]), + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u8-ct-totitle.c b/lib/unicase/u8-ct-totitle.c new file mode 100644 index 00000000..64891afd --- /dev/null +++ b/lib/unicase/u8-ct-totitle.c @@ -0,0 +1,43 @@ +/* Titlecase mapping for UTF-8 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include +#include +#include + +#include "unistr.h" +#include "unictype.h" +#include "uniwbrk.h" +#include "uninorm.h" +#include "caseprop.h" +#include "context.h" +#include "special-casing.h" + +#define FUNC u8_ct_totitle +#define UNIT uint8_t +#define U_WORDBREAKS u8_wordbreaks +#define U_MBTOUC_UNSAFE u8_mbtouc_unsafe +#define U_UCTOMB u8_uctomb +#define U_CPY u8_cpy +#define U_NORMALIZE u8_normalize +#include "u-ct-totitle.h" diff --git a/lib/unicase/u8-ct-toupper.c b/lib/unicase/u8-ct-toupper.c new file mode 100644 index 00000000..9dca2fca --- /dev/null +++ b/lib/unicase/u8-ct-toupper.c @@ -0,0 +1,40 @@ +/* Uppercase mapping for UTF-8 substrings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint8_t * +u8_ct_toupper (const uint8_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp) +{ + return u8_casemap (s, n, prefix_context, suffix_context, iso639_language, + uc_toupper, offsetof (struct special_casing_rule, upper[0]), + nf, + resultbuf, lengthp); +} diff --git a/lib/unicase/u8-is-cased.c b/lib/unicase/u8-is-cased.c new file mode 100644 index 00000000..5cdcc33b --- /dev/null +++ b/lib/unicase/u8-is-cased.c @@ -0,0 +1,36 @@ +/* Test whether case matters for an UTF-8 string. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "uninorm.h" +#include "unistr.h" + +#define FUNC u8_is_cased +#define UNIT uint8_t +#define U_NORMALIZE u8_normalize +#define U_TOUPPER u8_toupper +#define U_TOLOWER u8_tolower +#define U_TOTITLE u8_totitle +#define U_CMP u8_cmp +#include "u-is-cased.h" diff --git a/lib/unicase/u8-is-casefolded.c b/lib/unicase/u8-is-casefolded.c new file mode 100644 index 00000000..30122b78 --- /dev/null +++ b/lib/unicase/u8-is-casefolded.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-8 string is already case-folded. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u8_is_casefolded (const uint8_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u8_is_invariant (s, n, u8_casefold, iso639_language, resultp); +} diff --git a/lib/unicase/u8-is-invariant.c b/lib/unicase/u8-is-invariant.c new file mode 100644 index 00000000..2c4913bf --- /dev/null +++ b/lib/unicase/u8-is-invariant.c @@ -0,0 +1,33 @@ +/* Test whether an UTF-8 string is invariant under a given case mapping. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase/invariant.h" + +#include +#include + +#include "uninorm.h" +#include "unistr.h" + +#define FUNC u8_is_invariant +#define UNIT uint8_t +#define U_NORMALIZE u8_normalize +#define U_CMP u8_cmp +#include "u-is-invariant.h" diff --git a/lib/unicase/u8-is-lowercase.c b/lib/unicase/u8-is-lowercase.c new file mode 100644 index 00000000..5b0df8be --- /dev/null +++ b/lib/unicase/u8-is-lowercase.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-8 string is entirely lower case. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u8_is_lowercase (const uint8_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u8_is_invariant (s, n, u8_tolower, iso639_language, resultp); +} diff --git a/lib/unicase/u8-is-titlecase.c b/lib/unicase/u8-is-titlecase.c new file mode 100644 index 00000000..474502a7 --- /dev/null +++ b/lib/unicase/u8-is-titlecase.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-8 string is entirely title case. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u8_is_titlecase (const uint8_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u8_is_invariant (s, n, u8_totitle, iso639_language, resultp); +} diff --git a/lib/unicase/u8-is-uppercase.c b/lib/unicase/u8-is-uppercase.c new file mode 100644 index 00000000..7f14f924 --- /dev/null +++ b/lib/unicase/u8-is-uppercase.c @@ -0,0 +1,30 @@ +/* Test whether an UTF-8 string is entirely upper case. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include "unicase/invariant.h" + +int +u8_is_uppercase (const uint8_t *s, size_t n, const char *iso639_language, + bool *resultp) +{ + return u8_is_invariant (s, n, u8_toupper, iso639_language, resultp); +} diff --git a/lib/unicase/u8-tolower.c b/lib/unicase/u8-tolower.c new file mode 100644 index 00000000..1cd7cfa4 --- /dev/null +++ b/lib/unicase/u8-tolower.c @@ -0,0 +1,120 @@ +/* Lowercase mapping for UTF-8 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint8_t * +u8_tolower (const uint8_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp) +{ + return u8_casemap (s, n, + unicase_empty_prefix_context, unicase_empty_suffix_context, + iso639_language, + uc_tolower, offsetof (struct special_casing_rule, lower[0]), + nf, + resultbuf, lengthp); +} + + +#ifdef TEST + +#include +#include +#include +#include + +/* Read the contents of an input stream, and return it, terminated with a NUL + byte. */ +char * +read_file (FILE *stream) +{ +#define BUFSIZE 4096 + char *buf = NULL; + int alloc = 0; + int size = 0; + int count; + + while (! feof (stream)) + { + if (size + BUFSIZE > alloc) + { + alloc = alloc + alloc / 2; + if (alloc < size + BUFSIZE) + alloc = size + BUFSIZE; + buf = realloc (buf, alloc); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + } + count = fread (buf + size, 1, BUFSIZE, stream); + if (count == 0) + { + if (ferror (stream)) + { + perror ("fread"); + exit (1); + } + } + else + size += count; + } + buf = realloc (buf, size + 1); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + buf[size] = '\0'; + return buf; +#undef BUFSIZE +} + +int +main (int argc, char * argv[]) +{ + setlocale (LC_ALL, ""); + if (argc == 1) + { + /* Display the lower case of the input string. */ + char *input = read_file (stdin); + int length = strlen (input); + size_t output_length; + uint8_t *output = + u8_tolower ((uint8_t *) input, length, uc_locale_language (), + NULL, + NULL, &output_length); + + fwrite (output, 1, output_length, stdout); + + return 0; + } + else + return 1; +} + +#endif /* TEST */ diff --git a/lib/unicase/u8-totitle.c b/lib/unicase/u8-totitle.c new file mode 100644 index 00000000..cf29c1ba --- /dev/null +++ b/lib/unicase/u8-totitle.c @@ -0,0 +1,107 @@ +/* Titlecase mapping for UTF-8 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#define FUNC u8_totitle +#define UNIT uint8_t +#define U_CT_TOTITLE u8_ct_totitle +#include "u-totitle.h" + + +#ifdef TEST + +#include +#include +#include +#include + +/* Read the contents of an input stream, and return it, terminated with a NUL + byte. */ +char * +read_file (FILE *stream) +{ +#define BUFSIZE 4096 + char *buf = NULL; + int alloc = 0; + int size = 0; + int count; + + while (! feof (stream)) + { + if (size + BUFSIZE > alloc) + { + alloc = alloc + alloc / 2; + if (alloc < size + BUFSIZE) + alloc = size + BUFSIZE; + buf = realloc (buf, alloc); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + } + count = fread (buf + size, 1, BUFSIZE, stream); + if (count == 0) + { + if (ferror (stream)) + { + perror ("fread"); + exit (1); + } + } + else + size += count; + } + buf = realloc (buf, size + 1); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + buf[size] = '\0'; + return buf; +#undef BUFSIZE +} + +int +main (int argc, char * argv[]) +{ + setlocale (LC_ALL, ""); + if (argc == 1) + { + /* Display the upper case of the input string. */ + char *input = read_file (stdin); + int length = strlen (input); + size_t output_length; + uint8_t *output = + u8_toupper ((uint8_t *) input, length, uc_locale_language (), + NULL, + NULL, &output_length); + + fwrite (output, 1, output_length, stdout); + + return 0; + } + else + return 1; +} + +#endif /* TEST */ diff --git a/lib/unicase/u8-toupper.c b/lib/unicase/u8-toupper.c new file mode 100644 index 00000000..a97d98ce --- /dev/null +++ b/lib/unicase/u8-toupper.c @@ -0,0 +1,120 @@ +/* Uppercase mapping for UTF-8 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include + +#include "unicasemap.h" +#include "special-casing.h" + +uint8_t * +u8_toupper (const uint8_t *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp) +{ + return u8_casemap (s, n, + unicase_empty_prefix_context, unicase_empty_suffix_context, + iso639_language, + uc_toupper, offsetof (struct special_casing_rule, upper[0]), + nf, + resultbuf, lengthp); +} + + +#ifdef TEST + +#include +#include +#include +#include + +/* Read the contents of an input stream, and return it, terminated with a NUL + byte. */ +char * +read_file (FILE *stream) +{ +#define BUFSIZE 4096 + char *buf = NULL; + int alloc = 0; + int size = 0; + int count; + + while (! feof (stream)) + { + if (size + BUFSIZE > alloc) + { + alloc = alloc + alloc / 2; + if (alloc < size + BUFSIZE) + alloc = size + BUFSIZE; + buf = realloc (buf, alloc); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + } + count = fread (buf + size, 1, BUFSIZE, stream); + if (count == 0) + { + if (ferror (stream)) + { + perror ("fread"); + exit (1); + } + } + else + size += count; + } + buf = realloc (buf, size + 1); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + buf[size] = '\0'; + return buf; +#undef BUFSIZE +} + +int +main (int argc, char * argv[]) +{ + setlocale (LC_ALL, ""); + if (argc == 1) + { + /* Display the upper case of the input string. */ + char *input = read_file (stdin); + int length = strlen (input); + size_t output_length; + uint8_t *output = + u8_toupper ((uint8_t *) input, length, uc_locale_language (), + NULL, + NULL, &output_length); + + fwrite (output, 1, output_length, stdout); + + return 0; + } + else + return 1; +} + +#endif /* TEST */ diff --git a/lib/unicase/ulc-casecmp.c b/lib/unicase/ulc-casecmp.c new file mode 100644 index 00000000..e0710219 --- /dev/null +++ b/lib/unicase/ulc-casecmp.c @@ -0,0 +1,74 @@ +/* Case and normalization insensitive comparison of strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "minmax.h" +#include "uninorm.h" +#include "uniconv.h" +#include "unistr.h" + +static uint8_t * +ulc_u8_casefold (const char *s, size_t n, const char *iso639_language, + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp) +{ + uint8_t convbuf[2048 / sizeof (uint8_t)]; + uint8_t *conv; + size_t conv_length; + uint8_t *result; + + /* Convert the string to UTF-8. */ + conv_length = sizeof (convbuf) / sizeof (uint8_t); + conv = + u8_conv_from_encoding (locale_charset (), iconveh_error, s, n, NULL, + convbuf, &conv_length); + if (conv == NULL) + /* errno is set here. */ + return NULL; + + /* Case-fold and normalize. */ + result = u8_casefold (conv, conv_length, iso639_language, nf, + resultbuf, lengthp); + if (result == NULL) + { + if (conv != convbuf) + { + int saved_errno = errno; + free (conv); + errno = saved_errno; + } + return NULL; + } + + if (conv != convbuf) + free (conv); + return result; +} + +#define FUNC ulc_casecmp +#define UNIT uint8_t +#define SRC_UNIT char +#define U_CASEFOLD ulc_u8_casefold +#define U_CMP2 u8_cmp2 +#include "u-casecmp.h" diff --git a/lib/unicase/ulc-casecoll.c b/lib/unicase/ulc-casecoll.c new file mode 100644 index 00000000..9730b6dc --- /dev/null +++ b/lib/unicase/ulc-casecoll.c @@ -0,0 +1,31 @@ +/* Locale dependent, case and normalization insensitive comparison of strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "memcmp2.h" + +#define FUNC ulc_casecoll +#define UNIT char +#define U_CASEXFRM ulc_casexfrm +#include "u-casecoll.h" diff --git a/lib/unicase/ulc-casexfrm.c b/lib/unicase/ulc-casexfrm.c new file mode 100644 index 00000000..aded556f --- /dev/null +++ b/lib/unicase/ulc-casexfrm.c @@ -0,0 +1,64 @@ +/* Locale dependent transformation for case insensitive comparison of strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unicase.h" + +#include +#include + +#include "uniconv.h" + +char * +ulc_casexfrm (const char *s, size_t n, const char *iso639_language, + uninorm_t nf, + char *resultbuf, size_t *lengthp) +{ + uint8_t convbuf[2048 / sizeof (uint8_t)]; + uint8_t *conv; + size_t conv_length; + char *result; + + /* Convert the string to UTF-8. */ + conv_length = sizeof (convbuf) / sizeof (uint8_t); + conv = + u8_conv_from_encoding (locale_charset (), iconveh_error, s, n, NULL, + convbuf, &conv_length); + if (conv == NULL) + /* errno is set here. */ + return NULL; + + /* Case-fold and normalize. */ + result = u8_casexfrm (conv, conv_length, iso639_language, nf, + resultbuf, lengthp); + if (result == NULL) + { + if (conv != convbuf) + { + int saved_errno = errno; + free (conv); + errno = saved_errno; + } + return NULL; + } + + if (conv != convbuf) + free (conv); + return result; +} diff --git a/lib/unicase/unicasemap.h b/lib/unicase/unicasemap.h new file mode 100644 index 00000000..8da8c51d --- /dev/null +++ b/lib/unicase/unicasemap.h @@ -0,0 +1,52 @@ +/* Case mapping for UTF-8/UTF-16/UTF-32 strings (locale dependent). + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#include "unitypes.h" +#include "unicase.h" +#include "uninorm.h" + +extern uint8_t * + u8_casemap (const uint8_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + ucs4_t (*single_character_map) (ucs4_t), + size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ + uninorm_t nf, + uint8_t *resultbuf, size_t *lengthp); + +extern uint16_t * + u16_casemap (const uint16_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + ucs4_t (*single_character_map) (ucs4_t), + size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ + uninorm_t nf, + uint16_t *resultbuf, size_t *lengthp); + +extern uint32_t * + u32_casemap (const uint32_t *s, size_t n, + casing_prefix_context_t prefix_context, + casing_suffix_context_t suffix_context, + const char *iso639_language, + ucs4_t (*single_character_map) (ucs4_t), + size_t offset_in_rule, /* offset in 'struct special_casing_rule' */ + uninorm_t nf, + uint32_t *resultbuf, size_t *lengthp); diff --git a/lib/uniconv.h b/lib/uniconv.h new file mode 100644 index 00000000..223386fc --- /dev/null +++ b/lib/uniconv.h @@ -0,0 +1,169 @@ +/* Conversions between Unicode and legacy encodings. + Copyright (C) 2002, 2005, 2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNICONV_H +#define _UNICONV_H + +/* Get size_t. */ +#include + +#include "unitypes.h" + +/* Get enum iconv_ilseq_handler. */ +#include + +/* Get locale_charset() declaration. */ +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Converts an entire string, possibly including NUL bytes, from one encoding + to a Unicode encoding. + Converts a memory region given in encoding FROMCODE. FROMCODE is as for + iconv_open(3). + The input is in the memory region between SRC (inclusive) and SRC + SRCLEN + (exclusive). + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + RESULTBUF and *LENGTHP should initially be a scratch buffer and its size, + or *RESULTBUF can be NULL. + May erase the contents of the memory at RESULTBUF. + If successful: The resulting Unicode string (non-NULL) is returned and its + length stored in *LENGTHP. The resulting string is RESULTBUF if no dynamic + memory allocation was necessary, or a freshly allocated memory block + otherwise. + In case of error: NULL is returned and errno is set. Particular errno + values: EINVAL, EILSEQ, ENOMEM. */ +extern uint8_t * + u8_conv_from_encoding (const char *fromcode, + enum iconv_ilseq_handler handler, + const char *src, size_t srclen, + size_t *offsets, + uint8_t *resultbuf, size_t *lengthp); +extern uint16_t * + u16_conv_from_encoding (const char *fromcode, + enum iconv_ilseq_handler handler, + const char *src, size_t srclen, + size_t *offsets, + uint16_t *resultbuf, size_t *lengthp); +extern uint32_t * + u32_conv_from_encoding (const char *fromcode, + enum iconv_ilseq_handler handler, + const char *src, size_t srclen, + size_t *offsets, + uint32_t *resultbuf, size_t *lengthp); + +/* Converts an entire Unicode string, possibly including NUL units, from a + Unicode encoding to a given encoding. + Converts a memory region to encoding TOCODE. TOCODE is as for + iconv_open(3). + The input is in the memory region between SRC (inclusive) and SRC + SRCLEN + (exclusive). + If OFFSETS is not NULL, it should point to an array of SRCLEN integers; this + array is filled with offsets into the result, i.e. the character starting + at SRC[i] corresponds to the character starting at (*RESULTP)[OFFSETS[i]], + and other offsets are set to (size_t)(-1). + RESULTBUF and *LENGTHP should initially be a scratch buffer and its size, + or RESULTBUF can be NULL. + May erase the contents of the memory at RESULTBUF. + If successful: The resulting string (non-NULL) is returned and its length + stored in *LENGTHP. The resulting string is RESULTBUF if no dynamic memory + allocation was necessary, or a freshly allocated memory block otherwise. + In case of error: NULL is returned and errno is set. Particular errno + values: EINVAL, EILSEQ, ENOMEM. */ +extern char * + u8_conv_to_encoding (const char *tocode, + enum iconv_ilseq_handler handler, + const uint8_t *src, size_t srclen, + size_t *offsets, + char *resultbuf, size_t *lengthp); +extern char * + u16_conv_to_encoding (const char *tocode, + enum iconv_ilseq_handler handler, + const uint16_t *src, size_t srclen, + size_t *offsets, + char *resultbuf, size_t *lengthp); +extern char * + u32_conv_to_encoding (const char *tocode, + enum iconv_ilseq_handler handler, + const uint32_t *src, size_t srclen, + size_t *offsets, + char *resultbuf, size_t *lengthp); + +/* Converts a NUL terminated string from a given encoding. + The result is malloc allocated, or NULL (with errno set) in case of error. + Particular errno values: EILSEQ, ENOMEM. */ +extern uint8_t * + u8_strconv_from_encoding (const char *string, + const char *fromcode, + enum iconv_ilseq_handler handler); +extern uint16_t * + u16_strconv_from_encoding (const char *string, + const char *fromcode, + enum iconv_ilseq_handler handler); +extern uint32_t * + u32_strconv_from_encoding (const char *string, + const char *fromcode, + enum iconv_ilseq_handler handler); + +/* Converts a NUL terminated string to a given encoding. + The result is malloc allocated, or NULL (with errno set) in case of error. + Particular errno values: EILSEQ, ENOMEM. */ +extern char * + u8_strconv_to_encoding (const uint8_t *string, + const char *tocode, + enum iconv_ilseq_handler handler); +extern char * + u16_strconv_to_encoding (const uint16_t *string, + const char *tocode, + enum iconv_ilseq_handler handler); +extern char * + u32_strconv_to_encoding (const uint32_t *string, + const char *tocode, + enum iconv_ilseq_handler handler); + +/* Converts a NUL terminated string from the locale encoding. + The result is malloc allocated, or NULL (with errno set) in case of error. + Particular errno values: ENOMEM. */ +extern uint8_t * + u8_strconv_from_locale (const char *string); +extern uint16_t * + u16_strconv_from_locale (const char *string); +extern uint32_t * + u32_strconv_from_locale (const char *string); + +/* Converts a NUL terminated string to the locale encoding. + The result is malloc allocated, or NULL (with errno set) in case of error. + Particular errno values: ENOMEM. */ +extern char * + u8_strconv_to_locale (const uint8_t *string); +extern char * + u16_strconv_to_locale (const uint16_t *string); +extern char * + u32_strconv_to_locale (const uint32_t *string); + + +#ifdef __cplusplus +} +#endif + +#endif /* _UNICONV_H */ diff --git a/lib/uniconv/u-conv-from-enc.h b/lib/uniconv/u-conv-from-enc.h new file mode 100644 index 00000000..fa0f0d3d --- /dev/null +++ b/lib/uniconv/u-conv-from-enc.h @@ -0,0 +1,91 @@ +/* Conversion to UTF-16/UTF-32 from legacy encodings. + Copyright (C) 2002, 2006-2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (const char *fromcode, + enum iconv_ilseq_handler handler, + const char *src, size_t srclen, + size_t *offsets, + UNIT *resultbuf, size_t *lengthp) +{ +#if HAVE_UTF_NAME + char *result = (char *) resultbuf; + size_t length = *lengthp * sizeof (UNIT); + + if (mem_iconveha (src, srclen, fromcode, UTF_NAME, true, handler, + offsets, &result, &length) < 0) + return NULL; + if (offsets != NULL) + { + /* Convert 'char *' offsets to 'UNIT *' offsets. */ + size_t *offsets_end = offsets + srclen; + size_t *o; + + for (o = offsets; o < offsets_end; o++) + if (*o != (size_t)(-1)) + *o = *o / sizeof (UNIT); + } + if ((length % sizeof (UNIT)) != 0) + abort (); + *lengthp = length / sizeof (UNIT); + return (UNIT *) result; +#else + uint8_t *utf8_string; + size_t utf8_length; + UNIT *result; + + utf8_string = + u8_conv_from_encoding (fromcode, handler, src, srclen, offsets, + NULL, &utf8_length); + if (utf8_string == NULL) + return NULL; + result = U8_TO_U (utf8_string, utf8_length, resultbuf, lengthp); + if (result == NULL) + { + int saved_errno = errno; + free (utf8_string); + errno = saved_errno; + return NULL; + } + if (offsets != NULL) + { + size_t length = *lengthp; + size_t *offsets_end = offsets + srclen; + size_t *o; + size_t off8 = 0; /* offset into utf8_string */ + size_t offunit = 0; /* offset into result */ + + for (o = offsets; o < offsets_end; o++) + if (*o != (size_t)(-1)) + { + while (off8 < *o) + { + int count8 = u8_mblen (utf8_string + off8, utf8_length - off8); + int countunit = U_MBLEN (result + offunit, length - offunit); + if (count8 < 0 || countunit < 0) + abort (); + off8 += count8; + offunit += countunit; + } + if (*o != off8) + abort (); + *o = offunit; + } + } + free (utf8_string); + return result; +#endif +} diff --git a/lib/uniconv/u-conv-to-enc.h b/lib/uniconv/u-conv-to-enc.h new file mode 100644 index 00000000..ed715482 --- /dev/null +++ b/lib/uniconv/u-conv-to-enc.h @@ -0,0 +1,156 @@ +/* Conversion from UTF-16/UTF-32 to legacy encodings. + Copyright (C) 2002, 2006-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +char * +FUNC (const char *tocode, + enum iconv_ilseq_handler handler, + const UNIT *src, size_t srclen, + size_t *offsets, + char *resultbuf, size_t *lengthp) +{ +#if HAVE_UTF_NAME + size_t *scaled_offsets; + char *result; + size_t length; + + if (offsets != NULL && srclen > 0) + { + scaled_offsets = + (size_t *) malloc (srclen * sizeof (UNIT) * sizeof (size_t)); + if (scaled_offsets == NULL) + { + errno = ENOMEM; + return NULL; + } + } + else + scaled_offsets = NULL; + + result = resultbuf; + length = *lengthp; + if (mem_iconveha ((const char *) src, srclen * sizeof (UNIT), + UTF_NAME, tocode, + handler == iconveh_question_mark, handler, + scaled_offsets, &result, &length) < 0) + { + int saved_errno = errno; + free (scaled_offsets); + errno = saved_errno; + return NULL; + } + + if (offsets != NULL) + { + /* Convert scaled_offsets[srclen * sizeof (UNIT)] to + offsets[srclen]. */ + size_t i; + + for (i = 0; i < srclen; i++) + offsets[i] = scaled_offsets[i * sizeof (UNIT)]; + free (scaled_offsets); + } + + if (result == NULL) /* when (resultbuf == NULL && length == 0) */ + { + result = (char *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + *lengthp = length; + return result; +#else + uint8_t tmpbuf[4096]; + size_t tmpbufsize = SIZEOF (tmpbuf); + uint8_t *utf8_src; + size_t utf8_srclen; + size_t *scaled_offsets; + char *result; + + utf8_src = U_TO_U8 (src, srclen, tmpbuf, &tmpbufsize); + if (utf8_src == NULL) + return NULL; + utf8_srclen = tmpbufsize; + + if (offsets != NULL && utf8_srclen > 0) + { + scaled_offsets = (size_t *) malloc (utf8_srclen * sizeof (size_t)); + if (scaled_offsets == NULL) + { + if (utf8_src != tmpbuf) + free (utf8_src); + errno = ENOMEM; + return NULL; + } + } + else + scaled_offsets = NULL; + + result = u8_conv_to_encoding (tocode, handler, utf8_src, utf8_srclen, + scaled_offsets, resultbuf, lengthp); + if (result == NULL) + { + int saved_errno = errno; + free (scaled_offsets); + if (utf8_src != tmpbuf) + free (utf8_src); + errno = saved_errno; + return NULL; + } + if (offsets != NULL) + { + size_t iunit; /* offset into src */ + size_t i8; /* offset into utf8_src */ + + for (iunit = 0; iunit < srclen; iunit++) + offsets[iunit] = (size_t)(-1); + + iunit = 0; + i8 = 0; + while (iunit < srclen && i8 < utf8_srclen) + { + int countunit; + int count8; + + offsets[iunit] = scaled_offsets[i8]; + + countunit = U_MBLEN (src + iunit, srclen - iunit); + count8 = u8_mblen (utf8_src + i8, utf8_srclen - i8); + if (countunit < 0 || count8 < 0) + abort (); + iunit += countunit; + i8 += count8; + } + /* Check that utf8_src has been traversed entirely. */ + if (i8 < utf8_srclen) + abort (); + /* Check that src has been traversed entirely, except possibly for an + incomplete sequence of units at the end. */ + if (iunit < srclen) + { + offsets[iunit] = *lengthp; + if (!(U_MBLEN (src + iunit, srclen - iunit) < 0)) + abort (); + } + free (scaled_offsets); + } + if (utf8_src != tmpbuf) + free (utf8_src); + return result; +#endif +} diff --git a/lib/uniconv/u-strconv-from-enc.h b/lib/uniconv/u-strconv-from-enc.h new file mode 100644 index 00000000..25813c76 --- /dev/null +++ b/lib/uniconv/u-strconv-from-enc.h @@ -0,0 +1,40 @@ +/* Conversion to UTF-8/UTF-16/UTF-32 from legacy encodings. + Copyright (C) 2002, 2006-2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (const char *string, + const char *fromcode, + enum iconv_ilseq_handler handler) +{ + UNIT *result; + size_t length; + + result = + U_CONV_FROM_ENCODING (fromcode, handler, + string, strlen (string) + 1, NULL, + NULL, &length); + if (result == NULL) + return NULL; + /* Verify the result has exactly one NUL unit, at the end. */ + if (!(length > 0 && result[length-1] == 0 + && U_STRLEN (result) == length-1)) + { + free (result); + errno = EILSEQ; + return NULL; + } + return result; +} diff --git a/lib/uniconv/u-strconv-to-enc.h b/lib/uniconv/u-strconv-to-enc.h new file mode 100644 index 00000000..b6e6ebb5 --- /dev/null +++ b/lib/uniconv/u-strconv-to-enc.h @@ -0,0 +1,63 @@ +/* Conversion from UTF-16/UTF-32 to legacy encodings. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +char * +FUNC (const UNIT *string, + const char *tocode, + enum iconv_ilseq_handler handler) +{ +#if HAVE_UTF_NAME + char *result = NULL; + size_t length = 0; + + if (mem_iconveha ((const char *) string, (U_STRLEN (string) + 1) * sizeof (UNIT), + UTF_NAME, tocode, + handler == iconveh_question_mark, handler, + NULL, &result, &length) < 0) + return NULL; + /* Verify the result has exactly one NUL byte, at the end. */ + if (!(length > 0 && result[length-1] == '\0' && strlen (result) == length-1)) + { + free (result); + errno = EILSEQ; + return NULL; + } + return result; +#else + uint8_t tmpbuf[4096]; + size_t tmpbufsize = SIZEOF (tmpbuf); + uint8_t *utf8_string; + char *result; + + utf8_string = U_TO_U8 (string, U_STRLEN (string) + 1, tmpbuf, &tmpbufsize); + if (utf8_string == NULL) + return NULL; + result = u8_strconv_to_encoding (utf8_string, tocode, handler); + if (result == NULL) + { + if (utf8_string != tmpbuf) + { + int saved_errno = errno; + free (utf8_string); + errno = saved_errno; + } + return NULL; + } + if (utf8_string != tmpbuf) + free (utf8_string); + return result; +#endif +} diff --git a/lib/uniconv/u16-conv-from-enc.c b/lib/uniconv/u16-conv-from-enc.c new file mode 100644 index 00000000..f38add30 --- /dev/null +++ b/lib/uniconv/u16-conv-from-enc.c @@ -0,0 +1,47 @@ +/* Conversion to UTF-16 from legacy encodings. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include + +#include "striconveha.h" +#include "unistr.h" + +/* Name of UTF-16 encoding with machine dependent endianness and alignment. */ +#if defined _LIBICONV_VERSION || (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) +# ifdef WORDS_BIGENDIAN +# define UTF16_NAME "UTF-16BE" +# else +# define UTF16_NAME "UTF-16LE" +# endif +#endif + +#define FUNC u16_conv_from_encoding +#define UNIT uint16_t +#define U8_TO_U u8_to_u16 +#define U_MBLEN u16_mblen +#if defined UTF16_NAME +# define UTF_NAME UTF16_NAME +# define HAVE_UTF_NAME 1 +#endif +#include "u-conv-from-enc.h" diff --git a/lib/uniconv/u16-conv-to-enc.c b/lib/uniconv/u16-conv-to-enc.c new file mode 100644 index 00000000..ba70736c --- /dev/null +++ b/lib/uniconv/u16-conv-to-enc.c @@ -0,0 +1,177 @@ +/* Conversion from UTF-16 to legacy encodings. + Copyright (C) 2002, 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include +#include + +#include "striconveha.h" +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) + +/* Name of UTF-16 encoding with machine dependent endianness and alignment. */ +#if defined _LIBICONV_VERSION || (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) +# ifdef WORDS_BIGENDIAN +# define UTF16_NAME "UTF-16BE" +# else +# define UTF16_NAME "UTF-16LE" +# endif +#endif + + +#if !defined UTF16_NAME + +/* A variant of u16_to_u8 that treats an incomplete sequence of units at the + end as a harmless no-op, rather than reporting it as an EILSEQ error. */ + +#define FUNC u16_to_u8_lenient +#define SRC_UNIT uint16_t +#define DST_UNIT uint8_t + +static DST_UNIT * +FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) +{ + const SRC_UNIT *s_end = s + n; + /* Output string accumulator. */ + DST_UNIT *result; + size_t allocated; + size_t length; + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + while (s < s_end) + { + ucs4_t uc; + int count; + + /* Fetch a Unicode character from the input string. */ + count = u16_mbtoucr (&uc, s, s_end - s); + if (count < 0) + { + if (count == -2) + /* Incomplete sequence of units. */ + break; + if (!(result == resultbuf || result == NULL)) + free (result); + errno = EILSEQ; + return NULL; + } + s += count; + + /* Store it in the output string. */ + count = u8_uctomb (result + length, uc, allocated - length); + if (count == -1) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = EILSEQ; + return NULL; + } + if (count == -2) + { + DST_UNIT *memory; + + allocated = (allocated > 0 ? 2 * allocated : 12); + if (length + 6 > allocated) + allocated = length + 6; + if (result == resultbuf || result == NULL) + memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); + else + memory = + (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); + + if (memory == NULL) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = ENOMEM; + return NULL; + } + if (result == resultbuf && length > 0) + memcpy ((char *) memory, (char *) result, + length * sizeof (DST_UNIT)); + result = memory; + count = u8_uctomb (result + length, uc, allocated - length); + if (count < 0) + abort (); + } + length += count; + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (DST_UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + DST_UNIT *memory; + + memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); + if (memory != NULL) + result = memory; + } + + *lengthp = length; + return result; +} + +#undef DST_UNIT +#undef SRC_UNIT +#undef FUNC + +#endif + + +#define FUNC u16_conv_to_encoding +#define UNIT uint16_t +#define U_TO_U8 u16_to_u8_lenient +#define U_MBLEN u16_mblen +#if defined UTF16_NAME +# define UTF_NAME UTF16_NAME +# define HAVE_UTF_NAME 1 +#endif +#include "u-conv-to-enc.h" diff --git a/lib/uniconv/u16-strconv-from-enc.c b/lib/uniconv/u16-strconv-from-enc.c new file mode 100644 index 00000000..736d0c4a --- /dev/null +++ b/lib/uniconv/u16-strconv-from-enc.c @@ -0,0 +1,34 @@ +/* Conversion to UTF-16 from legacy encodings. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include +#include + +#include "unistr.h" + +#define FUNC u16_strconv_from_encoding +#define UNIT uint16_t +#define U_CONV_FROM_ENCODING u16_conv_from_encoding +#define U_STRLEN u16_strlen +#include "u-strconv-from-enc.h" diff --git a/lib/uniconv/u16-strconv-from-locale.c b/lib/uniconv/u16-strconv-from-locale.c new file mode 100644 index 00000000..63ddeb04 --- /dev/null +++ b/lib/uniconv/u16-strconv-from-locale.c @@ -0,0 +1,29 @@ +/* Conversion to UTF-16 from the locale encoding. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +uint16_t * +u16_strconv_from_locale (const char *string) +{ + const char *encoding = locale_charset (); + return u16_strconv_from_encoding (string, encoding, iconveh_question_mark); +} diff --git a/lib/uniconv/u16-strconv-to-enc.c b/lib/uniconv/u16-strconv-to-enc.c new file mode 100644 index 00000000..10e895e9 --- /dev/null +++ b/lib/uniconv/u16-strconv-to-enc.c @@ -0,0 +1,50 @@ +/* Conversion from UTF-16 to legacy encodings. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include +#include + +#include "striconveha.h" +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) + +/* Name of UTF-16 encoding with machine dependent endianness and alignment. */ +#if defined _LIBICONV_VERSION || (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) +# ifdef WORDS_BIGENDIAN +# define UTF16_NAME "UTF-16BE" +# else +# define UTF16_NAME "UTF-16LE" +# endif +#endif + +#define FUNC u16_strconv_to_encoding +#define UNIT uint16_t +#define U_TO_U8 u16_to_u8 +#define U_STRLEN u16_strlen +#if defined UTF16_NAME +# define UTF_NAME UTF16_NAME +# define HAVE_UTF_NAME 1 +#endif +#include "u-strconv-to-enc.h" diff --git a/lib/uniconv/u16-strconv-to-locale.c b/lib/uniconv/u16-strconv-to-locale.c new file mode 100644 index 00000000..14fd7b3b --- /dev/null +++ b/lib/uniconv/u16-strconv-to-locale.c @@ -0,0 +1,29 @@ +/* Conversion from UTF-16 to the locale encoding. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +char * +u16_strconv_to_locale (const uint16_t *string) +{ + const char *encoding = locale_charset (); + return u16_strconv_to_encoding (string, encoding, iconveh_question_mark); +} diff --git a/lib/uniconv/u32-conv-from-enc.c b/lib/uniconv/u32-conv-from-enc.c new file mode 100644 index 00000000..bac6301b --- /dev/null +++ b/lib/uniconv/u32-conv-from-enc.c @@ -0,0 +1,46 @@ +/* Conversion to UTF-32 from legacy encodings. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include + +#include "striconveha.h" +#include "unistr.h" + +/* Name of UTF-32 or UCS-4 encoding with machine dependent endianness and + alignment. */ +#if defined _LIBICONV_VERSION +# define UTF32_NAME "UCS-4-INTERNAL" +#elif (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) +# define UTF32_NAME "WCHAR_T" +#endif + +#define FUNC u32_conv_from_encoding +#define UNIT uint32_t +#define U8_TO_U u8_to_u32 +#define U_MBLEN u32_mblen +#if defined UTF32_NAME +# define UTF_NAME UTF32_NAME +# define HAVE_UTF_NAME 1 +#endif +#include "u-conv-from-enc.h" diff --git a/lib/uniconv/u32-conv-to-enc.c b/lib/uniconv/u32-conv-to-enc.c new file mode 100644 index 00000000..9155abaa --- /dev/null +++ b/lib/uniconv/u32-conv-to-enc.c @@ -0,0 +1,49 @@ +/* Conversion from UTF-32 to legacy encodings. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include +#include + +#include "striconveha.h" +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) + +/* Name of UTF-32 or UCS-4 encoding with machine dependent endianness and + alignment. */ +#if defined _LIBICONV_VERSION +# define UTF32_NAME "UCS-4-INTERNAL" +#elif (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) +# define UTF32_NAME "WCHAR_T" +#endif + +#define FUNC u32_conv_to_encoding +#define UNIT uint32_t +#define U_TO_U8 u32_to_u8 +#define U_MBLEN u32_mblen +#if defined UTF32_NAME +# define UTF_NAME UTF32_NAME +# define HAVE_UTF_NAME 1 +#endif +#include "u-conv-to-enc.h" diff --git a/lib/uniconv/u32-strconv-from-enc.c b/lib/uniconv/u32-strconv-from-enc.c new file mode 100644 index 00000000..aaac74f1 --- /dev/null +++ b/lib/uniconv/u32-strconv-from-enc.c @@ -0,0 +1,34 @@ +/* Conversion to UTF-32 from legacy encodings. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include +#include + +#include "unistr.h" + +#define FUNC u32_strconv_from_encoding +#define UNIT uint32_t +#define U_CONV_FROM_ENCODING u32_conv_from_encoding +#define U_STRLEN u32_strlen +#include "u-strconv-from-enc.h" diff --git a/lib/uniconv/u32-strconv-from-locale.c b/lib/uniconv/u32-strconv-from-locale.c new file mode 100644 index 00000000..2cddcb63 --- /dev/null +++ b/lib/uniconv/u32-strconv-from-locale.c @@ -0,0 +1,29 @@ +/* Conversion to UTF-32 from the locale encoding. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +uint32_t * +u32_strconv_from_locale (const char *string) +{ + const char *encoding = locale_charset (); + return u32_strconv_from_encoding (string, encoding, iconveh_question_mark); +} diff --git a/lib/uniconv/u32-strconv-to-enc.c b/lib/uniconv/u32-strconv-to-enc.c new file mode 100644 index 00000000..c77e0b6e --- /dev/null +++ b/lib/uniconv/u32-strconv-to-enc.c @@ -0,0 +1,49 @@ +/* Conversion from UTF-32 to legacy encodings. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include +#include + +#include "striconveha.h" +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) + +/* Name of UTF-32 or UCS-4 encoding with machine dependent endianness and + alignment. */ +#if defined _LIBICONV_VERSION +# define UTF32_NAME "UCS-4-INTERNAL" +#elif (__GLIBC__ > 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) +# define UTF32_NAME "WCHAR_T" +#endif + +#define FUNC u32_strconv_to_encoding +#define UNIT uint32_t +#define U_TO_U8 u32_to_u8 +#define U_STRLEN u32_strlen +#if defined UTF32_NAME +# define UTF_NAME UTF32_NAME +# define HAVE_UTF_NAME 1 +#endif +#include "u-strconv-to-enc.h" diff --git a/lib/uniconv/u32-strconv-to-locale.c b/lib/uniconv/u32-strconv-to-locale.c new file mode 100644 index 00000000..64ab59fa --- /dev/null +++ b/lib/uniconv/u32-strconv-to-locale.c @@ -0,0 +1,29 @@ +/* Conversion from UTF-32 to the locale encoding. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +char * +u32_strconv_to_locale (const uint32_t *string) +{ + const char *encoding = locale_charset (); + return u32_strconv_to_encoding (string, encoding, iconveh_question_mark); +} diff --git a/lib/uniconv/u8-conv-from-enc.c b/lib/uniconv/u8-conv-from-enc.c new file mode 100644 index 00000000..7605e63e --- /dev/null +++ b/lib/uniconv/u8-conv-from-enc.c @@ -0,0 +1,105 @@ +/* Conversion to UTF-8 from legacy encodings. + Copyright (C) 2002, 2006-2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include +#include + +#include "c-strcaseeq.h" +#include "striconveha.h" +#include "unistr.h" + +uint8_t * +u8_conv_from_encoding (const char *fromcode, + enum iconv_ilseq_handler handler, + const char *src, size_t srclen, + size_t *offsets, + uint8_t *resultbuf, size_t *lengthp) +{ + if (STRCASEEQ (fromcode, "UTF-8", 'U','T','F','-','8',0,0,0,0)) + { + /* Conversion from UTF-8 to UTF-8. No need to go through iconv(). */ + uint8_t *result; + + if (u8_check ((const uint8_t *) src, srclen)) + { + errno = EILSEQ; + return NULL; + } + + if (offsets != NULL) + { + size_t i; + + for (i = 0; i < srclen; ) + { + int count = u8_mblen ((const uint8_t *) src + i, srclen - i); + /* We can rely on count > 0 because of the previous u8_check. */ + if (count <= 0) + abort (); + offsets[i] = i; + i++; + while (--count > 0) + offsets[i++] = (size_t)(-1); + } + } + + /* Memory allocation. */ + if (resultbuf != NULL && *lengthp >= srclen) + result = resultbuf; + else + { + result = (uint8_t *) malloc (srclen > 0 ? srclen : 1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + + memcpy ((char *) result, src, srclen); + *lengthp = srclen; + return result; + } + else + { + char *result = (char *) resultbuf; + size_t length = *lengthp; + + if (mem_iconveha (src, srclen, fromcode, "UTF-8", true, handler, + offsets, &result, &length) < 0) + return NULL; + + if (result == NULL) /* when (resultbuf == NULL && length == 0) */ + { + result = (char *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + *lengthp = length; + return (uint8_t *) result; + } +} diff --git a/lib/uniconv/u8-conv-to-enc.c b/lib/uniconv/u8-conv-to-enc.c new file mode 100644 index 00000000..90acccec --- /dev/null +++ b/lib/uniconv/u8-conv-to-enc.c @@ -0,0 +1,92 @@ +/* Conversion from UTF-8 to legacy encodings. + Copyright (C) 2002, 2006-2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include +#include + +#include "c-strcaseeq.h" +#include "striconveha.h" +#include "unistr.h" + +char * +u8_conv_to_encoding (const char *tocode, + enum iconv_ilseq_handler handler, + const uint8_t *src, size_t srclen, + size_t *offsets, + char *resultbuf, size_t *lengthp) +{ + if (STRCASEEQ (tocode, "UTF-8", 'U','T','F','-','8',0,0,0,0)) + { + char *result; + + /* Conversion from UTF-8 to UTF-8. No need to go through iconv(). */ +#if CONFIG_UNICODE_SAFETY + if (u8_check (src, srclen)) + { + errno = EILSEQ; + return NULL; + } +#endif + + /* Memory allocation. */ + if (resultbuf != NULL && *lengthp >= srclen) + result = resultbuf; + else + { + result = (char *) malloc (srclen > 0 ? srclen : 1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + + memcpy (result, (const char *) src, srclen); + *lengthp = srclen; + return result; + } + else + { + char *result = resultbuf; + size_t length = *lengthp; + + if (mem_iconveha ((const char *) src, srclen, + "UTF-8", tocode, + handler == iconveh_question_mark, handler, + offsets, &result, &length) < 0) + return NULL; + + if (result == NULL) /* when (resultbuf == NULL && length == 0) */ + { + result = (char *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + *lengthp = length; + return result; + } +} diff --git a/lib/uniconv/u8-strconv-from-enc.c b/lib/uniconv/u8-strconv-from-enc.c new file mode 100644 index 00000000..0f5736fc --- /dev/null +++ b/lib/uniconv/u8-strconv-from-enc.c @@ -0,0 +1,34 @@ +/* Conversion to UTF-8 from legacy encodings. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include +#include + +#include "unistr.h" + +#define FUNC u8_strconv_from_encoding +#define UNIT uint8_t +#define U_CONV_FROM_ENCODING u8_conv_from_encoding +#define U_STRLEN u8_strlen +#include "u-strconv-from-enc.h" diff --git a/lib/uniconv/u8-strconv-from-locale.c b/lib/uniconv/u8-strconv-from-locale.c new file mode 100644 index 00000000..a901a3d6 --- /dev/null +++ b/lib/uniconv/u8-strconv-from-locale.c @@ -0,0 +1,29 @@ +/* Conversion to UTF-8 from the locale encoding. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +uint8_t * +u8_strconv_from_locale (const char *string) +{ + const char *encoding = locale_charset (); + return u8_strconv_from_encoding (string, encoding, iconveh_question_mark); +} diff --git a/lib/uniconv/u8-strconv-to-enc.c b/lib/uniconv/u8-strconv-to-enc.c new file mode 100644 index 00000000..a3f12b6b --- /dev/null +++ b/lib/uniconv/u8-strconv-to-enc.c @@ -0,0 +1,79 @@ +/* Conversion from UTF-8 to legacy encodings. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +#include +#include +#include + +#include "c-strcaseeq.h" +#include "striconveha.h" +#include "unistr.h" + +char * +u8_strconv_to_encoding (const uint8_t *string, + const char *tocode, + enum iconv_ilseq_handler handler) +{ + char *result; + size_t length; + + if (STRCASEEQ (tocode, "UTF-8", 'U','T','F','-','8',0,0,0,0)) + { + /* Conversion from UTF-8 to UTF-8. No need to go through iconv(). */ + length = u8_strlen (string) + 1; +#if CONFIG_UNICODE_SAFETY + if (u8_check (string, length)) + { + errno = EILSEQ; + return NULL; + } +#endif + result = (char *) malloc (length); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + memcpy (result, (const char *) string, length); + return result; + } + else + { + result = NULL; + length = 0; + if (mem_iconveha ((const char *) string, u8_strlen (string) + 1, + "UTF-8", tocode, + handler == iconveh_question_mark, handler, + NULL, &result, &length) < 0) + return NULL; + /* Verify the result has exactly one NUL byte, at the end. */ + if (!(length > 0 && result[length-1] == '\0' + && strlen (result) == length-1)) + { + free (result); + errno = EILSEQ; + return NULL; + } + return result; + } +} diff --git a/lib/uniconv/u8-strconv-to-locale.c b/lib/uniconv/u8-strconv-to-locale.c new file mode 100644 index 00000000..27c45fbf --- /dev/null +++ b/lib/uniconv/u8-strconv-to-locale.c @@ -0,0 +1,29 @@ +/* Conversion from UTF-8 to the locale encoding. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "uniconv.h" + +char * +u8_strconv_to_locale (const uint8_t *string) +{ + const char *encoding = locale_charset (); + return u8_strconv_to_encoding (string, encoding, iconveh_question_mark); +} diff --git a/lib/unictype.h b/lib/unictype.h new file mode 100644 index 00000000..1fc04403 --- /dev/null +++ b/lib/unictype.h @@ -0,0 +1,720 @@ +/* Unicode character classification and properties. + Copyright (C) 2002, 2005-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNICTYPE_H +#define _UNICTYPE_H + +#include "unitypes.h" + +/* Get LIBUNISTRING_DLL_VARIABLE. */ +#include + +/* Get bool. */ +#include + +/* Get size_t. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* ========================================================================= */ + +/* Field 1 of Unicode Character Database: Character name. + See "uniname.h". */ + +/* ========================================================================= */ + +/* Field 2 of Unicode Character Database: General category. */ + +/* Data type denoting a General category value. This is not just a bitmask, + but rather a bitmask and a pointer to the lookup table, so that programs + that use only the predefined bitmasks (i.e. don't combine bitmasks with & + and |) don't have a link-time dependency towards the big general table. */ +typedef struct +{ + uint32_t bitmask : 31; + /*bool*/ unsigned int generic : 1; + union + { + const void *table; /* when generic is 0 */ + bool (*lookup_fn) (ucs4_t uc, uint32_t bitmask); /* when generic is 1 */ + } lookup; +} +uc_general_category_t; + +/* Bits and bit masks denoting General category values. UnicodeData-3.2.0.html + says a 32-bit integer will always suffice to represent them. + These bit masks can only be used with the uc_is_general_category_withtable + function. */ +enum +{ + UC_CATEGORY_MASK_L = 0x0000001f, + UC_CATEGORY_MASK_Lu = 0x00000001, + UC_CATEGORY_MASK_Ll = 0x00000002, + UC_CATEGORY_MASK_Lt = 0x00000004, + UC_CATEGORY_MASK_Lm = 0x00000008, + UC_CATEGORY_MASK_Lo = 0x00000010, + UC_CATEGORY_MASK_M = 0x000000e0, + UC_CATEGORY_MASK_Mn = 0x00000020, + UC_CATEGORY_MASK_Mc = 0x00000040, + UC_CATEGORY_MASK_Me = 0x00000080, + UC_CATEGORY_MASK_N = 0x00000700, + UC_CATEGORY_MASK_Nd = 0x00000100, + UC_CATEGORY_MASK_Nl = 0x00000200, + UC_CATEGORY_MASK_No = 0x00000400, + UC_CATEGORY_MASK_P = 0x0003f800, + UC_CATEGORY_MASK_Pc = 0x00000800, + UC_CATEGORY_MASK_Pd = 0x00001000, + UC_CATEGORY_MASK_Ps = 0x00002000, + UC_CATEGORY_MASK_Pe = 0x00004000, + UC_CATEGORY_MASK_Pi = 0x00008000, + UC_CATEGORY_MASK_Pf = 0x00010000, + UC_CATEGORY_MASK_Po = 0x00020000, + UC_CATEGORY_MASK_S = 0x003c0000, + UC_CATEGORY_MASK_Sm = 0x00040000, + UC_CATEGORY_MASK_Sc = 0x00080000, + UC_CATEGORY_MASK_Sk = 0x00100000, + UC_CATEGORY_MASK_So = 0x00200000, + UC_CATEGORY_MASK_Z = 0x01c00000, + UC_CATEGORY_MASK_Zs = 0x00400000, + UC_CATEGORY_MASK_Zl = 0x00800000, + UC_CATEGORY_MASK_Zp = 0x01000000, + UC_CATEGORY_MASK_C = 0x3e000000, + UC_CATEGORY_MASK_Cc = 0x02000000, + UC_CATEGORY_MASK_Cf = 0x04000000, + UC_CATEGORY_MASK_Cs = 0x08000000, + UC_CATEGORY_MASK_Co = 0x10000000, + UC_CATEGORY_MASK_Cn = 0x20000000 +}; + +/* Predefined General category values. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_L; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Lu; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Ll; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Lt; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Lm; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Lo; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_M; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Mn; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Mc; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Me; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_N; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Nd; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Nl; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_No; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_P; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Pc; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Pd; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Ps; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Pe; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Pi; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Pf; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Po; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_S; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Sm; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Sc; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Sk; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_So; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Z; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Zs; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Zl; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Zp; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_C; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Cc; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Cf; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Cs; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Co; +extern LIBUNISTRING_DLL_VARIABLE const uc_general_category_t UC_CATEGORY_Cn; +/* Non-public. */ +extern const uc_general_category_t _UC_CATEGORY_NONE; + +/* Alias names for predefined General category values. */ +#define UC_LETTER UC_CATEGORY_L +#define UC_UPPERCASE_LETTER UC_CATEGORY_Lu +#define UC_LOWERCASE_LETTER UC_CATEGORY_Ll +#define UC_TITLECASE_LETTER UC_CATEGORY_Lt +#define UC_MODIFIER_LETTER UC_CATEGORY_Lm +#define UC_OTHER_LETTER UC_CATEGORY_Lo +#define UC_MARK UC_CATEGORY_M +#define UC_NON_SPACING_MARK UC_CATEGORY_Mn +#define UC_COMBINING_SPACING_MARK UC_CATEGORY_Mc +#define UC_ENCLOSING_MARK UC_CATEGORY_Me +#define UC_NUMBER UC_CATEGORY_N +#define UC_DECIMAL_DIGIT_NUMBER UC_CATEGORY_Nd +#define UC_LETTER_NUMBER UC_CATEGORY_Nl +#define UC_OTHER_NUMBER UC_CATEGORY_No +#define UC_PUNCTUATION UC_CATEGORY_P +#define UC_CONNECTOR_PUNCTUATION UC_CATEGORY_Pc +#define UC_DASH_PUNCTUATION UC_CATEGORY_Pd +#define UC_OPEN_PUNCTUATION UC_CATEGORY_Ps /* a.k.a. UC_START_PUNCTUATION */ +#define UC_CLOSE_PUNCTUATION UC_CATEGORY_Pe /* a.k.a. UC_END_PUNCTUATION */ +#define UC_INITIAL_QUOTE_PUNCTUATION UC_CATEGORY_Pi +#define UC_FINAL_QUOTE_PUNCTUATION UC_CATEGORY_Pf +#define UC_OTHER_PUNCTUATION UC_CATEGORY_Po +#define UC_SYMBOL UC_CATEGORY_S +#define UC_MATH_SYMBOL UC_CATEGORY_Sm +#define UC_CURRENCY_SYMBOL UC_CATEGORY_Sc +#define UC_MODIFIER_SYMBOL UC_CATEGORY_Sk +#define UC_OTHER_SYMBOL UC_CATEGORY_So +#define UC_SEPARATOR UC_CATEGORY_Z +#define UC_SPACE_SEPARATOR UC_CATEGORY_Zs +#define UC_LINE_SEPARATOR UC_CATEGORY_Zl +#define UC_PARAGRAPH_SEPARATOR UC_CATEGORY_Zp +#define UC_OTHER UC_CATEGORY_C +#define UC_CONTROL UC_CATEGORY_Cc +#define UC_FORMAT UC_CATEGORY_Cf +#define UC_SURROGATE UC_CATEGORY_Cs /* all of them are invalid characters */ +#define UC_PRIVATE_USE UC_CATEGORY_Co +#define UC_UNASSIGNED UC_CATEGORY_Cn /* some of them are invalid characters */ + +/* Return the union of two general categories. + This corresponds to the unions of the two sets of characters. */ +extern uc_general_category_t + uc_general_category_or (uc_general_category_t category1, + uc_general_category_t category2); + +/* Return the intersection of two general categories as bit masks. + This *does*not* correspond to the intersection of the two sets of + characters. */ +extern uc_general_category_t + uc_general_category_and (uc_general_category_t category1, + uc_general_category_t category2); + +/* Return the intersection of a general category with the complement of a + second general category, as bit masks. + This *does*not* correspond to the intersection with complement, when + viewing the categories as sets of characters. */ +extern uc_general_category_t + uc_general_category_and_not (uc_general_category_t category1, + uc_general_category_t category2); + +/* Return the name of a general category. */ +extern const char * + uc_general_category_name (uc_general_category_t category); + +/* Return the general category given by name, e.g. "Lu". */ +extern uc_general_category_t + uc_general_category_byname (const char *category_name); + +/* Return the general category of a Unicode character. */ +extern uc_general_category_t + uc_general_category (ucs4_t uc); + +/* Test whether a Unicode character belongs to a given category. + The CATEGORY argument can be the combination of several predefined + general categories. */ +extern bool + uc_is_general_category (ucs4_t uc, uc_general_category_t category); +/* Likewise. This function uses a big table comprising all categories. */ +extern bool + uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask); + +/* ========================================================================= */ + +/* Field 3 of Unicode Character Database: Canonical combining class. */ + +/* The possible results of uc_combining_class (0..255) are described in + UCD.html. The list here is not definitive; more values can be added + in future versions. */ +enum +{ + UC_CCC_NR = 0, /* Not Reordered */ + UC_CCC_OV = 1, /* Overlay */ + UC_CCC_NK = 7, /* Nukta */ + UC_CCC_KV = 8, /* Kana Voicing */ + UC_CCC_VR = 9, /* Virama */ + UC_CCC_ATBL = 200, /* Attached Below Left */ + UC_CCC_ATB = 202, /* Attached Below */ + UC_CCC_ATAR = 216, /* Attached Above Right */ + UC_CCC_BL = 218, /* Below Left */ + UC_CCC_B = 220, /* Below */ + UC_CCC_BR = 222, /* Below Right */ + UC_CCC_L = 224, /* Left */ + UC_CCC_R = 226, /* Right */ + UC_CCC_AL = 228, /* Above Left */ + UC_CCC_A = 230, /* Above */ + UC_CCC_AR = 232, /* Above Right */ + UC_CCC_DB = 233, /* Double Below */ + UC_CCC_DA = 234, /* Double Above */ + UC_CCC_IS = 240 /* Iota Subscript */ +}; + +/* Return the canonical combining class of a Unicode character. */ +extern int + uc_combining_class (ucs4_t uc); + +/* ========================================================================= */ + +/* Field 4 of Unicode Character Database: Bidirectional category. */ + +enum +{ + UC_BIDI_L, /* Left-to-Right */ + UC_BIDI_LRE, /* Left-to-Right Embedding */ + UC_BIDI_LRO, /* Left-to-Right Override */ + UC_BIDI_R, /* Right-to-Left */ + UC_BIDI_AL, /* Right-to-Left Arabic */ + UC_BIDI_RLE, /* Right-to-Left Embedding */ + UC_BIDI_RLO, /* Right-to-Left Override */ + UC_BIDI_PDF, /* Pop Directional Format */ + UC_BIDI_EN, /* European Number */ + UC_BIDI_ES, /* European Number Separator */ + UC_BIDI_ET, /* European Number Terminator */ + UC_BIDI_AN, /* Arabic Number */ + UC_BIDI_CS, /* Common Number Separator */ + UC_BIDI_NSM, /* Non-Spacing Mark */ + UC_BIDI_BN, /* Boundary Neutral */ + UC_BIDI_B, /* Paragraph Separator */ + UC_BIDI_S, /* Segment Separator */ + UC_BIDI_WS, /* Whitespace */ + UC_BIDI_ON /* Other Neutral */ +}; + +/* Return the name of a bidirectional category. */ +extern const char * + uc_bidi_category_name (int category); + +/* Return the bidirectional category given by name, e.g. "LRE". */ +extern int + uc_bidi_category_byname (const char *category_name); + +/* Return the bidirectional category of a Unicode character. */ +extern int + uc_bidi_category (ucs4_t uc); + +/* Test whether a Unicode character belongs to a given bidirectional + category. */ +extern bool + uc_is_bidi_category (ucs4_t uc, int category); + +/* ========================================================================= */ + +/* Field 5 of Unicode Character Database: Character decomposition mapping. + See "uninorm.h". */ + +/* ========================================================================= */ + +/* Field 6 of Unicode Character Database: Decimal digit value. */ + +/* Return the decimal digit value of a Unicode character. */ +extern int + uc_decimal_value (ucs4_t uc); + +/* ========================================================================= */ + +/* Field 7 of Unicode Character Database: Digit value. */ + +/* Return the digit value of a Unicode character. */ +extern int + uc_digit_value (ucs4_t uc); + +/* ========================================================================= */ + +/* Field 8 of Unicode Character Database: Numeric value. */ + +/* Return the numeric value of a Unicode character. */ +typedef struct +{ + int numerator; + int denominator; +} +uc_fraction_t; +extern uc_fraction_t + uc_numeric_value (ucs4_t uc); + +/* ========================================================================= */ + +/* Field 9 of Unicode Character Database: Mirrored. */ + +/* Return the mirrored character of a Unicode character UC in *PUC. */ +extern bool + uc_mirror_char (ucs4_t uc, ucs4_t *puc); + +/* ========================================================================= */ + +/* Field 10 of Unicode Character Database: Unicode 1.0 Name. + Not available in this library. */ + +/* ========================================================================= */ + +/* Field 11 of Unicode Character Database: ISO 10646 comment. + Not available in this library. */ + +/* ========================================================================= */ + +/* Field 12, 13, 14 of Unicode Character Database: Uppercase mapping, + lowercase mapping, titlecase mapping. See "unicase.h". */ + +/* ========================================================================= */ + +/* Common API for properties. */ + +/* Data type denoting a property. This is not just a number, but rather a + pointer to the test functions, so that programs that use only few of the + properties don't have a link-time dependency towards all the tables. */ +typedef struct +{ + bool (*test_fn) (ucs4_t uc); +} +uc_property_t; + +/* Predefined properties. */ +/* General. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_WHITE_SPACE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ALPHABETIC; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_ALPHABETIC; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_NOT_A_CHARACTER; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_DEPRECATED; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_LOGICAL_ORDER_EXCEPTION; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_VARIATION_SELECTOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PRIVATE_USE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_UNASSIGNED_CODE_VALUE; +/* Case. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_UPPERCASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_UPPERCASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_LOWERCASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_LOWERCASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_TITLECASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_SOFT_DOTTED; +/* Identifiers. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ID_START; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_ID_START; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ID_CONTINUE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_ID_CONTINUE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_XID_START; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_XID_CONTINUE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PATTERN_WHITE_SPACE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PATTERN_SYNTAX; +/* Shaping and rendering. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_JOIN_CONTROL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_GRAPHEME_BASE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_GRAPHEME_EXTEND; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_GRAPHEME_EXTEND; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_GRAPHEME_LINK; +/* Bidi. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_CONTROL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_LEFT_TO_RIGHT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_EUROPEAN_DIGIT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_ARABIC_DIGIT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_COMMON_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_BLOCK_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_SEGMENT_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_WHITESPACE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_NON_SPACING_MARK; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_PDF; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_BIDI_OTHER_NEUTRAL; +/* Numeric. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_HEX_DIGIT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ASCII_HEX_DIGIT; +/* CJK. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_IDEOGRAPHIC; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_UNIFIED_IDEOGRAPH; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_RADICAL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_IDS_BINARY_OPERATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_IDS_TRINARY_OPERATOR; +/* Misc. */ +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ZERO_WIDTH; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_SPACE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_NON_BREAK; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_ISO_CONTROL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_FORMAT_CONTROL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_DASH; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_HYPHEN; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PUNCTUATION; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_LINE_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PARAGRAPH_SEPARATOR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_QUOTATION_MARK; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_SENTENCE_TERMINAL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_TERMINAL_PUNCTUATION; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_CURRENCY_SYMBOL; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_MATH; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_OTHER_MATH; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_PAIRED_PUNCTUATION; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_LEFT_OF_PAIR; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_COMBINING; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_COMPOSITE; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_DECIMAL_DIGIT; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_NUMERIC; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_DIACRITIC; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_EXTENDER; +extern LIBUNISTRING_DLL_VARIABLE const uc_property_t UC_PROPERTY_IGNORABLE_CONTROL; + +/* Return the property given by name, e.g. "White space". */ +extern uc_property_t + uc_property_byname (const char *property_name); + +/* Test whether a property is valid. */ +#define uc_property_is_valid(property) ((property).test_fn != NULL) + +/* Test whether a Unicode character has a given property. */ +extern bool + uc_is_property (ucs4_t uc, uc_property_t property); +extern bool uc_is_property_white_space (ucs4_t uc); +extern bool uc_is_property_alphabetic (ucs4_t uc); +extern bool uc_is_property_other_alphabetic (ucs4_t uc); +extern bool uc_is_property_not_a_character (ucs4_t uc); +extern bool uc_is_property_default_ignorable_code_point (ucs4_t uc); +extern bool uc_is_property_other_default_ignorable_code_point (ucs4_t uc); +extern bool uc_is_property_deprecated (ucs4_t uc); +extern bool uc_is_property_logical_order_exception (ucs4_t uc); +extern bool uc_is_property_variation_selector (ucs4_t uc); +extern bool uc_is_property_private_use (ucs4_t uc); +extern bool uc_is_property_unassigned_code_value (ucs4_t uc); +extern bool uc_is_property_uppercase (ucs4_t uc); +extern bool uc_is_property_other_uppercase (ucs4_t uc); +extern bool uc_is_property_lowercase (ucs4_t uc); +extern bool uc_is_property_other_lowercase (ucs4_t uc); +extern bool uc_is_property_titlecase (ucs4_t uc); +extern bool uc_is_property_soft_dotted (ucs4_t uc); +extern bool uc_is_property_id_start (ucs4_t uc); +extern bool uc_is_property_other_id_start (ucs4_t uc); +extern bool uc_is_property_id_continue (ucs4_t uc); +extern bool uc_is_property_other_id_continue (ucs4_t uc); +extern bool uc_is_property_xid_start (ucs4_t uc); +extern bool uc_is_property_xid_continue (ucs4_t uc); +extern bool uc_is_property_pattern_white_space (ucs4_t uc); +extern bool uc_is_property_pattern_syntax (ucs4_t uc); +extern bool uc_is_property_join_control (ucs4_t uc); +extern bool uc_is_property_grapheme_base (ucs4_t uc); +extern bool uc_is_property_grapheme_extend (ucs4_t uc); +extern bool uc_is_property_other_grapheme_extend (ucs4_t uc); +extern bool uc_is_property_grapheme_link (ucs4_t uc); +extern bool uc_is_property_bidi_control (ucs4_t uc); +extern bool uc_is_property_bidi_left_to_right (ucs4_t uc); +extern bool uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc); +extern bool uc_is_property_bidi_arabic_right_to_left (ucs4_t uc); +extern bool uc_is_property_bidi_european_digit (ucs4_t uc); +extern bool uc_is_property_bidi_eur_num_separator (ucs4_t uc); +extern bool uc_is_property_bidi_eur_num_terminator (ucs4_t uc); +extern bool uc_is_property_bidi_arabic_digit (ucs4_t uc); +extern bool uc_is_property_bidi_common_separator (ucs4_t uc); +extern bool uc_is_property_bidi_block_separator (ucs4_t uc); +extern bool uc_is_property_bidi_segment_separator (ucs4_t uc); +extern bool uc_is_property_bidi_whitespace (ucs4_t uc); +extern bool uc_is_property_bidi_non_spacing_mark (ucs4_t uc); +extern bool uc_is_property_bidi_boundary_neutral (ucs4_t uc); +extern bool uc_is_property_bidi_pdf (ucs4_t uc); +extern bool uc_is_property_bidi_embedding_or_override (ucs4_t uc); +extern bool uc_is_property_bidi_other_neutral (ucs4_t uc); +extern bool uc_is_property_hex_digit (ucs4_t uc); +extern bool uc_is_property_ascii_hex_digit (ucs4_t uc); +extern bool uc_is_property_ideographic (ucs4_t uc); +extern bool uc_is_property_unified_ideograph (ucs4_t uc); +extern bool uc_is_property_radical (ucs4_t uc); +extern bool uc_is_property_ids_binary_operator (ucs4_t uc); +extern bool uc_is_property_ids_trinary_operator (ucs4_t uc); +extern bool uc_is_property_zero_width (ucs4_t uc); +extern bool uc_is_property_space (ucs4_t uc); +extern bool uc_is_property_non_break (ucs4_t uc); +extern bool uc_is_property_iso_control (ucs4_t uc); +extern bool uc_is_property_format_control (ucs4_t uc); +extern bool uc_is_property_dash (ucs4_t uc); +extern bool uc_is_property_hyphen (ucs4_t uc); +extern bool uc_is_property_punctuation (ucs4_t uc); +extern bool uc_is_property_line_separator (ucs4_t uc); +extern bool uc_is_property_paragraph_separator (ucs4_t uc); +extern bool uc_is_property_quotation_mark (ucs4_t uc); +extern bool uc_is_property_sentence_terminal (ucs4_t uc); +extern bool uc_is_property_terminal_punctuation (ucs4_t uc); +extern bool uc_is_property_currency_symbol (ucs4_t uc); +extern bool uc_is_property_math (ucs4_t uc); +extern bool uc_is_property_other_math (ucs4_t uc); +extern bool uc_is_property_paired_punctuation (ucs4_t uc); +extern bool uc_is_property_left_of_pair (ucs4_t uc); +extern bool uc_is_property_combining (ucs4_t uc); +extern bool uc_is_property_composite (ucs4_t uc); +extern bool uc_is_property_decimal_digit (ucs4_t uc); +extern bool uc_is_property_numeric (ucs4_t uc); +extern bool uc_is_property_diacritic (ucs4_t uc); +extern bool uc_is_property_extender (ucs4_t uc); +extern bool uc_is_property_ignorable_control (ucs4_t uc); + +/* ========================================================================= */ + +/* Subdivision of the Unicode characters into scripts. */ + +typedef struct +{ + unsigned int code : 21; + unsigned int start : 1; + unsigned int end : 1; +} +uc_interval_t; +typedef struct +{ + unsigned int nintervals; + const uc_interval_t *intervals; + const char *name; +} +uc_script_t; + +/* Return the script of a Unicode character. */ +extern const uc_script_t * + uc_script (ucs4_t uc); + +/* Return the script given by name, e.g. "HAN". */ +extern const uc_script_t * + uc_script_byname (const char *script_name); + +/* Test whether a Unicode character belongs to a given script. */ +extern bool + uc_is_script (ucs4_t uc, const uc_script_t *script); + +/* Get the list of all scripts. */ +extern void + uc_all_scripts (const uc_script_t **scripts, size_t *count); + +/* ========================================================================= */ + +/* Subdivision of the Unicode character range into blocks. */ + +typedef struct +{ + ucs4_t start; + ucs4_t end; + const char *name; +} +uc_block_t; + +/* Return the block a character belongs to. */ +extern const uc_block_t * + uc_block (ucs4_t uc); + +/* Test whether a Unicode character belongs to a given block. */ +extern bool + uc_is_block (ucs4_t uc, const uc_block_t *block); + +/* Get the list of all blocks. */ +extern void + uc_all_blocks (const uc_block_t **blocks, size_t *count); + +/* ========================================================================= */ + +/* Properties taken from language standards. */ + +/* Test whether a Unicode character is considered whitespace in ISO C 99. */ +extern bool + uc_is_c_whitespace (ucs4_t uc); + +/* Test whether a Unicode character is considered whitespace in Java. */ +extern bool + uc_is_java_whitespace (ucs4_t uc); + +enum +{ + UC_IDENTIFIER_START, /* valid as first or subsequent character */ + UC_IDENTIFIER_VALID, /* valid as subsequent character only */ + UC_IDENTIFIER_INVALID, /* not valid */ + UC_IDENTIFIER_IGNORABLE /* ignorable (Java only) */ +}; + +/* Return the categorization of a Unicode character w.r.t. the ISO C 99 + identifier syntax. */ +extern int + uc_c_ident_category (ucs4_t uc); + +/* Return the categorization of a Unicode character w.r.t. the Java + identifier syntax. */ +extern int + uc_java_ident_category (ucs4_t uc); + +/* ========================================================================= */ + +/* Like ISO C and . These functions are deprecated, + because this set of functions was designed with ASCII in mind and cannot + reflect the more diverse reality of the Unicode character set. But they + can be a quick-and-dirty porting aid when migrating from wchar_t APIs + to Unicode strings. */ + +/* Test for any character for which 'uc_is_alpha' or 'uc_is_digit' is true. */ +extern bool + uc_is_alnum (ucs4_t uc); + +/* Test for any character for which 'uc_is_upper' or 'uc_is_lower' is true, + or any character that is one of a locale-specific set of characters for + which none of 'uc_is_cntrl', 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' + is true. */ +extern bool + uc_is_alpha (ucs4_t uc); + +/* Test for any control character. */ +extern bool + uc_is_cntrl (ucs4_t uc); + +/* Test for any character that corresponds to a decimal-digit character. */ +extern bool + uc_is_digit (ucs4_t uc); + +/* Test for any character for which 'uc_is_print' is true and 'uc_is_space' + is false. */ +extern bool + uc_is_graph (ucs4_t uc); + +/* Test for any character that corresponds to a lowercase letter or is one + of a locale-specific set of characters for which none of 'uc_is_cntrl', + 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ +extern bool + uc_is_lower (ucs4_t uc); + +/* Test for any printing character. */ +extern bool + uc_is_print (ucs4_t uc); + +/* Test for any printing character that is one of a locale-specific set of + characters for which neither 'uc_is_space' nor 'uc_is_alnum' is true. */ +extern bool + uc_is_punct (ucs4_t uc); + +/* Test for any character that corresponds to a locale-specific set of + characters for which none of 'uc_is_alnum', 'uc_is_graph', or 'uc_is_punct' + is true. */ +extern bool + uc_is_space (ucs4_t uc); + +/* Test for any character that corresponds to an uppercase letter or is one + of a locale-specific set of character for which none of 'uc_is_cntrl', + 'uc_is_digit', 'uc_is_punct', or 'uc_is_space' is true. */ +extern bool + uc_is_upper (ucs4_t uc); + +/* Test for any character that corresponds to a hexadecimal-digit + character. */ +extern bool + uc_is_xdigit (ucs4_t uc); + +/* GNU extension. */ +/* Test for any character that corresponds to a standard blank character or + a locale-specific set of characters for which 'uc_is_alnum' is false. */ +extern bool + uc_is_blank (ucs4_t uc); + +/* ========================================================================= */ + +#ifdef __cplusplus +} +#endif + +#endif /* _UNICTYPE_H */ diff --git a/lib/unictype/bidi_byname.c b/lib/unictype/bidi_byname.c new file mode 100644 index 00000000..8a6cb71a --- /dev/null +++ b/lib/unictype/bidi_byname.c @@ -0,0 +1,171 @@ +/* Bidi categories of Unicode characters. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +int +uc_bidi_category_byname (const char *category_name) +{ + switch (category_name[0]) + { + case 'A': + switch (category_name[1]) + { + case 'L': + if (category_name[2] == '\0') + return UC_BIDI_AL; + break; + case 'N': + if (category_name[2] == '\0') + return UC_BIDI_AN; + break; + } + break; + case 'B': + switch (category_name[1]) + { + case '\0': + return UC_BIDI_B; + case 'N': + if (category_name[2] == '\0') + return UC_BIDI_BN; + break; + } + break; + case 'C': + switch (category_name[1]) + { + case 'S': + if (category_name[2] == '\0') + return UC_BIDI_CS; + break; + } + break; + case 'E': + switch (category_name[1]) + { + case 'N': + if (category_name[2] == '\0') + return UC_BIDI_EN; + break; + case 'S': + if (category_name[2] == '\0') + return UC_BIDI_ES; + break; + case 'T': + if (category_name[2] == '\0') + return UC_BIDI_ET; + break; + } + break; + case 'L': + switch (category_name[1]) + { + case '\0': + return UC_BIDI_L; + case 'R': + switch (category_name[2]) + { + case 'E': + if (category_name[3] == '\0') + return UC_BIDI_LRE; + break; + case 'O': + if (category_name[3] == '\0') + return UC_BIDI_LRO; + break; + } + break; + } + break; + case 'N': + switch (category_name[1]) + { + case 'S': + switch (category_name[2]) + { + case 'M': + if (category_name[3] == '\0') + return UC_BIDI_NSM; + break; + } + break; + } + break; + case 'O': + switch (category_name[1]) + { + case 'N': + if (category_name[2] == '\0') + return UC_BIDI_ON; + break; + } + break; + case 'P': + switch (category_name[1]) + { + case 'D': + switch (category_name[2]) + { + case 'F': + if (category_name[3] == '\0') + return UC_BIDI_PDF; + break; + } + break; + } + break; + case 'R': + switch (category_name[1]) + { + case '\0': + return UC_BIDI_R; + case 'L': + switch (category_name[2]) + { + case 'E': + if (category_name[3] == '\0') + return UC_BIDI_RLE; + break; + case 'O': + if (category_name[3] == '\0') + return UC_BIDI_RLO; + break; + } + break; + } + break; + case 'S': + if (category_name[1] == '\0') + return UC_BIDI_S; + break; + case 'W': + switch (category_name[1]) + { + case 'S': + if (category_name[2] == '\0') + return UC_BIDI_WS; + break; + } + break; + } + /* Invalid category name. */ + return -1; +} diff --git a/lib/unictype/bidi_name.c b/lib/unictype/bidi_name.c new file mode 100644 index 00000000..76529768 --- /dev/null +++ b/lib/unictype/bidi_name.c @@ -0,0 +1,35 @@ +/* Bidi categories of Unicode characters. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +static const char u_bidi_category_name[19][4] = +{ + "L", "LRE", "LRO", "R", "AL", "RLE", "RLO", "PDF", "EN", "ES", + "ET", "AN", "CS", "NSM", "BN", "B", "S", "WS", "ON" +}; + +const char * +uc_bidi_category_name (int category) +{ + if (category >= 0 && category < sizeof (u_bidi_category_name) / sizeof (u_bidi_category_name[0])) + return u_bidi_category_name[category]; + return NULL; +} diff --git a/lib/unictype/bidi_of.c b/lib/unictype/bidi_of.c new file mode 100644 index 00000000..93fc7a8b --- /dev/null +++ b/lib/unictype/bidi_of.c @@ -0,0 +1,52 @@ +/* Bidi categories of Unicode characters. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_bidi_category table. */ +#include "bidi_of.h" + +int +uc_bidi_category (ucs4_t uc) +{ + unsigned int index1 = uc >> bidi_category_header_0; + if (index1 < bidi_category_header_1) + { + int lookup1 = u_bidi_category.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> bidi_category_header_2) & bidi_category_header_3; + int lookup2 = u_bidi_category.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = ((uc & bidi_category_header_4) + lookup2) * 5; + /* level3 contains 5-bit values, packed into 16-bit words. */ + unsigned int lookup3 = + ((u_bidi_category.level3[index3>>4] + | (u_bidi_category.level3[(index3>>4)+1] << 16)) + >> (index3 % 16)) + & 0x1f; + + return lookup3; + } + } + } + return UC_BIDI_L; +} diff --git a/lib/unictype/bidi_of.h b/lib/unictype/bidi_of.h new file mode 100644 index 00000000..9f6875be --- /dev/null +++ b/lib/unictype/bidi_of.h @@ -0,0 +1,789 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Bidi categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define bidi_category_header_0 16 +#define bidi_category_header_1 17 +#define bidi_category_header_2 7 +#define bidi_category_header_3 511 +#define bidi_category_header_4 127 +static const +struct + { + int level1[17]; + short level2[4 << 9]; + unsigned short level3[101 * 40 + 1]; + } +u_bidi_category = +{ + { + 0, 512, 1024, 1024, 1024, 1024, 1024, 1024, + 1024, 1024, 1024, 1024, 1024, 1024, 1536, 1024, + 1024 + }, + { + 0, 128, -1, -1, -1, 256, 384, 512, + -1, 640, -1, 768, 896, 1024, 1152, 1280, + 1408, 1408, 1536, 1664, 1792, 1920, 2048, 2176, + 2304, 2432, 2560, 2688, 2816, 2944, 3072, 3200, + 3328, 3456, -1, -1, -1, -1, 3584, 3712, + -1, -1, -1, -1, -1, 3840, 3968, 4096, + 4224, 4352, 4480, 4608, 4736, -1, 4864, 4992, + 5120, -1, -1, 5248, -1, -1, -1, 5376, + 5504, 5632, 5760, 5888, 6016, 6144, 6272, 6400, + 6528, 6656, 6144, 6144, 6144, 6784, 6912, 7040, + -1, -1, 6144, 6144, 6144, 6144, 7168, -1, + -1, 7296, -1, 7424, 7552, 7680, 6144, 7808, + 7936, 8064, -1, 8192, 8320, 8448, 8576, 8704, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 8832, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 8960, -1, -1, 9088, -1, 9216, 9344, + 9472, 9600, 9728, -1, 9856, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 9984, 10112, + 10112, 10112, 10240, 10368, 10496, 10624, 10752, 10880, + -1, -1, 11008, 11136, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 1408, 1408, 11264, 1408, 11392, 1408, 1408, 1408, + 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 11520, 11648, 11776, -1, 11904, -1, + -1, -1, -1, -1, -1, -1, -1, 12032, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 12160, 12288, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 12416, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 12416, + 12544, 12544, 12672, 12800, 12544, 12544, 12544, 12544, + 12544, 12544, 12544, 12544, 12544, 12544, 12544, 12544, + 12544, 12544, 12544, 12544, 12544, 12544, 12544, 12544, + 12544, 12544, 12544, 12544, 12544, 12544, 12544, 12544, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 12416 + }, + { + 0x39ce, 0x9ce7, 0x0e73, 0x183e, 0x739f, 0x39ce, 0x9ce7, 0xce73, + 0xf739, 0x83de, 0x4a51, 0x94a5, 0x5294, 0xc4ca, 0x6312, 0x2108, + 0x1084, 0x0842, 0x2931, 0x94a5, 0x0012, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x2900, 0x94a5, 0x0012, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2900, 0x74a5, + 0x39ce, 0x9ee7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, + 0xe739, 0x739c, 0x2a4c, 0x94a5, 0x5294, 0x2902, 0x949d, 0x214a, + 0x8124, 0x1294, 0x2901, 0x94a5, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0090, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x4000, 0x004a, 0x0000, 0x4800, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4800, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0000, 0xa400, + 0x5294, 0x294a, 0x9025, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0x0000, 0x2520, 0x0000, 0x0000, 0x0480, + 0x0000, 0x2520, 0x0090, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0004, 0x0000, 0x0000, + 0x8000, 0x5ad6, 0xad6b, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0048, 0x0000, 0xb5a3, 0x5ad6, 0xad6b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x68da, 0xb5a3, 0xdad1, 0x6368, 0x318c, + 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, + 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, + 0xad6b, 0x8845, 0x4494, 0xc229, 0x9488, 0xb5ad, 0x5ad6, 0xad6b, + 0x4235, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xd690, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x235a, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5a9, 0x2108, 0x108d, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x4842, 0xad6b, 0xd6b5, 0x6b56, 0xb5ad, 0x08d6, + 0x4d69, 0xd6b6, 0x211a, 0x2108, 0x1084, 0x0842, 0x4211, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x7108, 0x11a4, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x4235, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x4842, 0xad6b, 0xd6b5, 0x6b5a, 0x108d, + 0x0842, 0x8421, 0x4210, 0x2108, 0x8c63, 0xc631, 0x6318, 0x318c, + 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, + 0x6318, 0xd68c, 0x6b5a, 0xb5ad, 0x8636, 0x5294, 0x318e, 0x18c6, + 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, + 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, + 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, + 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, + 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, + 0x35a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xd000, 0x0000, 0xb5a0, 0x5ad6, 0x0d6b, 0x0000, + 0x001a, 0xb5a0, 0x00d6, 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x01a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xd000, 0x0000, 0xb5a0, 0x00d6, 0x0000, 0x0000, + 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, + 0x0000, 0x0000, 0x0000, 0x2800, 0x0005, 0x0000, 0x0000, 0x0000, + 0x35a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xd000, 0x0000, 0x35a0, 0x0000, 0x0d68, 0xd680, + 0x001a, 0x01a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01ad, 0x1a00, 0x0000, 0x0000, 0x0000, + 0x35a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xd000, 0x0000, 0xb5a0, 0x1ad6, 0x0d68, 0x0000, + 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0140, 0x0000, 0x0000, 0x0000, 0x0000, + 0x01a0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xd000, 0x6800, 0xb5a0, 0x00d6, 0x0000, 0x0000, + 0x001a, 0x0000, 0x4000, 0x0003, 0x0000, 0x0000, 0xb400, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x3400, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000d, 0x0000, 0x0000, 0x0000, + 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xa529, 0x5294, 0x0049, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x6b40, 0x000d, 0x4000, 0x0d6b, 0xd6b4, + 0x001a, 0x0000, 0x5a00, 0x0003, 0x0000, 0x0000, 0xb400, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5200, 0x294a, 0x04a5, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xd000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, + 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, + 0x0000, 0x0000, 0x0000, 0x4a40, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xb5a0, 0x00d6, 0x0000, 0x0000, + 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0034, + 0x0000, 0xb400, 0x40d6, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01a0, + 0x5ad0, 0xad6b, 0x0035, 0x5000, 0x0000, 0x0000, 0xad68, 0xd6b5, + 0x035a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01a0, + 0x5ad0, 0xad6b, 0xd681, 0x0000, 0x0000, 0x0000, 0xad00, 0xd6b5, + 0x001a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad00, + 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x1a00, 0xa068, 0x2949, 0x0025, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xb5a0, 0x5ad6, 0xad6b, 0xd6b5, 0x035a, + 0xb5ad, 0x40d6, 0x006b, 0x0000, 0x0000, 0xb5ad, 0x5ad6, 0xa06b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x0000, 0x0000, 0x4000, 0x0003, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6b5a, 0xb40d, + 0x5ad6, 0xa06b, 0x0035, 0x035a, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xad00, 0x0001, 0x6b40, 0x000d, 0x0000, + 0x0000, 0x0000, 0x0000, 0xb5a0, 0x00d6, 0x0000, 0x0000, 0x0000, + 0x3400, 0x5a00, 0x0003, 0x0000, 0x001a, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6800, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, + 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2900, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, 0x00d6, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb400, + 0x00d6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xb400, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xb400, 0x0006, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xad68, 0xd6b5, 0x001a, 0x0000, 0x4000, 0xa003, 0xd6b5, + 0x6b5a, 0xb5ad, 0x0006, 0x0000, 0x0500, 0x001a, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x0002, 0x0000, + 0x4a52, 0xa529, 0x5294, 0xd6ca, 0x045a, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x0001, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x35ad, 0x0000, 0x0d68, 0x0000, 0x0000, 0x3400, + 0x0000, 0xa000, 0x06b5, 0x0000, 0x0012, 0x2520, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9480, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0d68, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xb5ad, 0x0006, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x40d0, 0xad6b, 0xd035, 0x0000, 0x3400, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xd680, 0x6b5a, 0xb5ad, 0x0006, 0x0000, 0x0000, 0x0000, + 0x01ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xb400, 0x1ad6, 0xad00, 0x0001, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd000, 0x6b5a, 0xb5ad, + 0x4006, 0x006b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6b40, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x9024, 0x0252, 0x0000, 0x0000, 0x0000, + 0x94a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x94a4, 0x0000, 0x0000, + 0x0000, 0x0000, 0x94a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x04a4, + 0xc631, 0x6318, 0x318c, 0xe746, 0x181c, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0xf194, 0x7285, 0x6184, 0x294a, + 0xa4a5, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa4c9, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x8ca5, 0x39ce, 0x08e7, + 0x8421, 0xe738, 0x739c, 0x0008, 0x1080, 0x0842, 0x24a5, 0x04a5, + 0x2108, 0x1084, 0x0842, 0x24a5, 0x04a5, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x14a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0x000d, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0252, 0xa529, 0x5204, 0x0002, 0x0000, 0x0000, 0x8120, 0x1294, + 0x0000, 0x9480, 0x4a52, 0x2409, 0x4090, 0x0002, 0x0280, 0x0000, + 0x0000, 0x0000, 0x0948, 0x0000, 0x4a52, 0x0129, 0x0000, 0x2948, + 0x0025, 0x0000, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x2652, 0xa525, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0x2529, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2900, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x8129, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x0094, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x0004, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x004a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x0894, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x0421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x2948, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x0025, 0x4a52, 0xa529, 0x5294, 0x094a, 0x94a4, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x0001, 0x4a52, 0x0009, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x4a40, 0x8129, 0x5294, 0x2002, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x4094, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x094a, + 0x9024, 0x4a52, 0x8000, 0x5204, 0x294a, 0x04a5, 0x4a40, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0129, 0x5200, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a40, + 0xa529, 0x5294, 0x294a, 0x04a5, 0x4a52, 0xa529, 0x5294, 0x204a, + 0x0001, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x0001, 0x4a52, 0x0129, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa400, + 0x5294, 0x004a, 0x0000, 0x0000, 0x0000, 0x4000, 0x294a, 0x94a5, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0012, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x2902, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0009, 0x0000, 0x0000, 0x0000, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0x2529, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x094a, 0x0000, + 0x4a51, 0x0129, 0x5200, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x0012, 0x0000, 0x0000, 0xd6b4, 0x6b5a, 0x0012, + 0x8000, 0x0094, 0x0000, 0x94a4, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, + 0x2935, 0x0001, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0009, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x04a4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0x04a5, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a40, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x0000, 0x0000, 0x0000, 0x2000, + 0x94a5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5290, 0x004a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9480, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x0004, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x94a4, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x6800, 0x35ad, 0x0009, 0x0000, 0xd000, 0x949a, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x0252, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x3400, 0x4000, 0x0003, 0x0680, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x5a00, 0x5203, 0x094a, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xa520, 0x0094, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00d0, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x4000, 0xad6b, 0xd6b5, 0x001a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xad68, 0xd6b5, + 0x6b5a, 0x01ad, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xd6b5, 0x035a, 0x35a0, + 0x5a00, 0x0003, 0x0000, 0x0000, 0x8000, 0x0006, 0x0000, 0xd000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x1b46, 0x8c63, 0xc631, 0x2318, 0x318d, 0x18c6, 0x8c63, + 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, + 0x18c6, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x9488, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, + 0xce73, 0xe739, 0x739c, 0x1084, 0x0842, 0x8421, 0x4210, 0x2124, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x4a52, 0xa529, 0x5294, + 0x4212, 0x2108, 0xb5ad, 0x5ad6, 0x8423, 0x4210, 0x2108, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x324c, 0x9922, 0x5294, 0x294a, 0x54a5, 0xa652, 0xa524, + 0x5224, 0x4929, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x7108, + 0x4a40, 0x94a5, 0x5294, 0xc4ca, 0x6312, 0x2108, 0x1084, 0x0842, + 0x2931, 0x94a5, 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x2900, 0x94a5, 0x0012, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x2900, 0x94a5, 0x4a52, 0x2529, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x494a, 0x9529, + 0x5202, 0x294a, 0x04a5, 0x39ce, 0x9ce7, 0x4e73, 0x294a, 0x73a5, + 0x0240, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x004a, 0x0000, 0x4a52, 0xa529, 0x5294, + 0x094a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001a, + 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, + 0x318c, 0x90c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, + 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, + 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, + 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, + 0xb5a3, 0x5a36, 0x631b, 0xd18c, 0x6b5a, 0x8c63, 0xc631, 0x6318, + 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, + 0xc631, 0xad18, 0x31b5, 0x68c6, 0x8c63, 0xc631, 0x6318, 0x318c, + 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, + 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xad68, 0x0001, 0x0000, 0x0000, 0x9ce7, 0xce73, 0xd6b9, 0x6b5a, + 0x35ad, 0x5a00, 0xad6b, 0x06b5, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xd6b4, 0x001a, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0xb652, 0x24d6, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x0004, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x4200, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x094a, 0x0000, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x0009, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x7380, + 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, + 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, + 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, + 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, + 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, + 0x0000 + } +}; diff --git a/lib/unictype/bidi_test.c b/lib/unictype/bidi_test.c new file mode 100644 index 00000000..72887bbc --- /dev/null +++ b/lib/unictype/bidi_test.c @@ -0,0 +1,27 @@ +/* Bidi categories of Unicode characters. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +bool +uc_is_bidi_category (ucs4_t uc, int category) +{ + return (uc_bidi_category (uc) == category); +} diff --git a/lib/unictype/bitmap.h b/lib/unictype/bitmap.h new file mode 100644 index 00000000..280b2985 --- /dev/null +++ b/lib/unictype/bitmap.h @@ -0,0 +1,47 @@ +/* Three-level bitmap lookup. + Copyright (C) 2000-2002, 2005-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2000-2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +static inline int bitmap_lookup (const void *table, ucs4_t uc); + +/* These values are currently hardcoded into gen-ctype.c. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 + +static inline int +bitmap_lookup (const void *table, ucs4_t uc) +{ + unsigned int index1 = uc >> header_0; + if (index1 < ((const int *) table)[0]) + { + int lookup1 = ((const int *) table)[1 + index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> header_2) & header_3; + int lookup2 = ((const short *) table)[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc >> 5) & header_4; + unsigned int lookup3 = ((const int *) table)[lookup2 + index3]; + + return (lookup3 >> (uc & 0x1f)) & 1; + } + } + } + return 0; +} diff --git a/lib/unictype/block_test.c b/lib/unictype/block_test.c new file mode 100644 index 00000000..4005ad04 --- /dev/null +++ b/lib/unictype/block_test.c @@ -0,0 +1,31 @@ +/* Blocks of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +bool +uc_is_block (ucs4_t uc, const uc_block_t *block) +{ + if (block != NULL) + return ((ucs4_t) (uc - block->start) <= block->end - block->start); + else + return false; +} + diff --git a/lib/unictype/blocks.c b/lib/unictype/blocks.c new file mode 100644 index 00000000..a20bbcee --- /dev/null +++ b/lib/unictype/blocks.c @@ -0,0 +1,62 @@ +/* Blocks of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "blocks.h" + +const uc_block_t * +uc_block (ucs4_t uc) +{ + unsigned int first_index; + unsigned int last_index; + + if (uc < blocks_level1_threshold) + { + unsigned int index1 = uc >> blocks_level1_shift; + first_index = blocks_level1[2 * index1]; + last_index = blocks_level1[2 * index1 + 1]; + } + else + { + first_index = blocks_upper_first_index; + last_index = blocks_upper_last_index; + } + /* We know that the relevant blocks are blocks[i] with + first_index <= i < last_index. Now perform a binary search. */ + while (first_index < last_index) + { + unsigned int mid_index = (first_index + last_index) / 2; + if (blocks[mid_index].end < uc) + first_index = mid_index + 1; + else if (uc < blocks[mid_index].start) + last_index = mid_index; + else + return &blocks[mid_index]; + } + return NULL; +} + +void +uc_all_blocks (const uc_block_t **blocksp, size_t *countp) +{ + *blocksp = blocks; + *countp = sizeof (blocks) / sizeof (blocks[0]); +} diff --git a/lib/unictype/blocks.h b/lib/unictype/blocks.h new file mode 100644 index 00000000..2585b58c --- /dev/null +++ b/lib/unictype/blocks.h @@ -0,0 +1,952 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Unicode blocks. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +static const uc_block_t blocks[] = +{ + { 0x0000, 0x007F, "Basic Latin" }, + { 0x0080, 0x00FF, "Latin-1 Supplement" }, + { 0x0100, 0x017F, "Latin Extended-A" }, + { 0x0180, 0x024F, "Latin Extended-B" }, + { 0x0250, 0x02AF, "IPA Extensions" }, + { 0x02B0, 0x02FF, "Spacing Modifier Letters" }, + { 0x0300, 0x036F, "Combining Diacritical Marks" }, + { 0x0370, 0x03FF, "Greek and Coptic" }, + { 0x0400, 0x04FF, "Cyrillic" }, + { 0x0500, 0x052F, "Cyrillic Supplement" }, + { 0x0530, 0x058F, "Armenian" }, + { 0x0590, 0x05FF, "Hebrew" }, + { 0x0600, 0x06FF, "Arabic" }, + { 0x0700, 0x074F, "Syriac" }, + { 0x0750, 0x077F, "Arabic Supplement" }, + { 0x0780, 0x07BF, "Thaana" }, + { 0x07C0, 0x07FF, "NKo" }, + { 0x0900, 0x097F, "Devanagari" }, + { 0x0980, 0x09FF, "Bengali" }, + { 0x0A00, 0x0A7F, "Gurmukhi" }, + { 0x0A80, 0x0AFF, "Gujarati" }, + { 0x0B00, 0x0B7F, "Oriya" }, + { 0x0B80, 0x0BFF, "Tamil" }, + { 0x0C00, 0x0C7F, "Telugu" }, + { 0x0C80, 0x0CFF, "Kannada" }, + { 0x0D00, 0x0D7F, "Malayalam" }, + { 0x0D80, 0x0DFF, "Sinhala" }, + { 0x0E00, 0x0E7F, "Thai" }, + { 0x0E80, 0x0EFF, "Lao" }, + { 0x0F00, 0x0FFF, "Tibetan" }, + { 0x1000, 0x109F, "Myanmar" }, + { 0x10A0, 0x10FF, "Georgian" }, + { 0x1100, 0x11FF, "Hangul Jamo" }, + { 0x1200, 0x137F, "Ethiopic" }, + { 0x1380, 0x139F, "Ethiopic Supplement" }, + { 0x13A0, 0x13FF, "Cherokee" }, + { 0x1400, 0x167F, "Unified Canadian Aboriginal Syllabics" }, + { 0x1680, 0x169F, "Ogham" }, + { 0x16A0, 0x16FF, "Runic" }, + { 0x1700, 0x171F, "Tagalog" }, + { 0x1720, 0x173F, "Hanunoo" }, + { 0x1740, 0x175F, "Buhid" }, + { 0x1760, 0x177F, "Tagbanwa" }, + { 0x1780, 0x17FF, "Khmer" }, + { 0x1800, 0x18AF, "Mongolian" }, + { 0x1900, 0x194F, "Limbu" }, + { 0x1950, 0x197F, "Tai Le" }, + { 0x1980, 0x19DF, "New Tai Lue" }, + { 0x19E0, 0x19FF, "Khmer Symbols" }, + { 0x1A00, 0x1A1F, "Buginese" }, + { 0x1B00, 0x1B7F, "Balinese" }, + { 0x1B80, 0x1BBF, "Sundanese" }, + { 0x1C00, 0x1C4F, "Lepcha" }, + { 0x1C50, 0x1C7F, "Ol Chiki" }, + { 0x1D00, 0x1D7F, "Phonetic Extensions" }, + { 0x1D80, 0x1DBF, "Phonetic Extensions Supplement" }, + { 0x1DC0, 0x1DFF, "Combining Diacritical Marks Supplement" }, + { 0x1E00, 0x1EFF, "Latin Extended Additional" }, + { 0x1F00, 0x1FFF, "Greek Extended" }, + { 0x2000, 0x206F, "General Punctuation" }, + { 0x2070, 0x209F, "Superscripts and Subscripts" }, + { 0x20A0, 0x20CF, "Currency Symbols" }, + { 0x20D0, 0x20FF, "Combining Diacritical Marks for Symbols" }, + { 0x2100, 0x214F, "Letterlike Symbols" }, + { 0x2150, 0x218F, "Number Forms" }, + { 0x2190, 0x21FF, "Arrows" }, + { 0x2200, 0x22FF, "Mathematical Operators" }, + { 0x2300, 0x23FF, "Miscellaneous Technical" }, + { 0x2400, 0x243F, "Control Pictures" }, + { 0x2440, 0x245F, "Optical Character Recognition" }, + { 0x2460, 0x24FF, "Enclosed Alphanumerics" }, + { 0x2500, 0x257F, "Box Drawing" }, + { 0x2580, 0x259F, "Block Elements" }, + { 0x25A0, 0x25FF, "Geometric Shapes" }, + { 0x2600, 0x26FF, "Miscellaneous Symbols" }, + { 0x2700, 0x27BF, "Dingbats" }, + { 0x27C0, 0x27EF, "Miscellaneous Mathematical Symbols-A" }, + { 0x27F0, 0x27FF, "Supplemental Arrows-A" }, + { 0x2800, 0x28FF, "Braille Patterns" }, + { 0x2900, 0x297F, "Supplemental Arrows-B" }, + { 0x2980, 0x29FF, "Miscellaneous Mathematical Symbols-B" }, + { 0x2A00, 0x2AFF, "Supplemental Mathematical Operators" }, + { 0x2B00, 0x2BFF, "Miscellaneous Symbols and Arrows" }, + { 0x2C00, 0x2C5F, "Glagolitic" }, + { 0x2C60, 0x2C7F, "Latin Extended-C" }, + { 0x2C80, 0x2CFF, "Coptic" }, + { 0x2D00, 0x2D2F, "Georgian Supplement" }, + { 0x2D30, 0x2D7F, "Tifinagh" }, + { 0x2D80, 0x2DDF, "Ethiopic Extended" }, + { 0x2DE0, 0x2DFF, "Cyrillic Extended-A" }, + { 0x2E00, 0x2E7F, "Supplemental Punctuation" }, + { 0x2E80, 0x2EFF, "CJK Radicals Supplement" }, + { 0x2F00, 0x2FDF, "Kangxi Radicals" }, + { 0x2FF0, 0x2FFF, "Ideographic Description Characters" }, + { 0x3000, 0x303F, "CJK Symbols and Punctuation" }, + { 0x3040, 0x309F, "Hiragana" }, + { 0x30A0, 0x30FF, "Katakana" }, + { 0x3100, 0x312F, "Bopomofo" }, + { 0x3130, 0x318F, "Hangul Compatibility Jamo" }, + { 0x3190, 0x319F, "Kanbun" }, + { 0x31A0, 0x31BF, "Bopomofo Extended" }, + { 0x31C0, 0x31EF, "CJK Strokes" }, + { 0x31F0, 0x31FF, "Katakana Phonetic Extensions" }, + { 0x3200, 0x32FF, "Enclosed CJK Letters and Months" }, + { 0x3300, 0x33FF, "CJK Compatibility" }, + { 0x3400, 0x4DBF, "CJK Unified Ideographs Extension A" }, + { 0x4DC0, 0x4DFF, "Yijing Hexagram Symbols" }, + { 0x4E00, 0x9FFF, "CJK Unified Ideographs" }, + { 0xA000, 0xA48F, "Yi Syllables" }, + { 0xA490, 0xA4CF, "Yi Radicals" }, + { 0xA500, 0xA63F, "Vai" }, + { 0xA640, 0xA69F, "Cyrillic Extended-B" }, + { 0xA700, 0xA71F, "Modifier Tone Letters" }, + { 0xA720, 0xA7FF, "Latin Extended-D" }, + { 0xA800, 0xA82F, "Syloti Nagri" }, + { 0xA840, 0xA87F, "Phags-pa" }, + { 0xA880, 0xA8DF, "Saurashtra" }, + { 0xA900, 0xA92F, "Kayah Li" }, + { 0xA930, 0xA95F, "Rejang" }, + { 0xAA00, 0xAA5F, "Cham" }, + { 0xAC00, 0xD7AF, "Hangul Syllables" }, + { 0xD800, 0xDB7F, "High Surrogates" }, + { 0xDB80, 0xDBFF, "High Private Use Surrogates" }, + { 0xDC00, 0xDFFF, "Low Surrogates" }, + { 0xE000, 0xF8FF, "Private Use Area" }, + { 0xF900, 0xFAFF, "CJK Compatibility Ideographs" }, + { 0xFB00, 0xFB4F, "Alphabetic Presentation Forms" }, + { 0xFB50, 0xFDFF, "Arabic Presentation Forms-A" }, + { 0xFE00, 0xFE0F, "Variation Selectors" }, + { 0xFE10, 0xFE1F, "Vertical Forms" }, + { 0xFE20, 0xFE2F, "Combining Half Marks" }, + { 0xFE30, 0xFE4F, "CJK Compatibility Forms" }, + { 0xFE50, 0xFE6F, "Small Form Variants" }, + { 0xFE70, 0xFEFF, "Arabic Presentation Forms-B" }, + { 0xFF00, 0xFFEF, "Halfwidth and Fullwidth Forms" }, + { 0xFFF0, 0xFFFF, "Specials" }, + { 0x10000, 0x1007F, "Linear B Syllabary" }, + { 0x10080, 0x100FF, "Linear B Ideograms" }, + { 0x10100, 0x1013F, "Aegean Numbers" }, + { 0x10140, 0x1018F, "Ancient Greek Numbers" }, + { 0x10190, 0x101CF, "Ancient Symbols" }, + { 0x101D0, 0x101FF, "Phaistos Disc" }, + { 0x10280, 0x1029F, "Lycian" }, + { 0x102A0, 0x102DF, "Carian" }, + { 0x10300, 0x1032F, "Old Italic" }, + { 0x10330, 0x1034F, "Gothic" }, + { 0x10380, 0x1039F, "Ugaritic" }, + { 0x103A0, 0x103DF, "Old Persian" }, + { 0x10400, 0x1044F, "Deseret" }, + { 0x10450, 0x1047F, "Shavian" }, + { 0x10480, 0x104AF, "Osmanya" }, + { 0x10800, 0x1083F, "Cypriot Syllabary" }, + { 0x10900, 0x1091F, "Phoenician" }, + { 0x10920, 0x1093F, "Lydian" }, + { 0x10A00, 0x10A5F, "Kharoshthi" }, + { 0x12000, 0x123FF, "Cuneiform" }, + { 0x12400, 0x1247F, "Cuneiform Numbers and Punctuation" }, + { 0x1D000, 0x1D0FF, "Byzantine Musical Symbols" }, + { 0x1D100, 0x1D1FF, "Musical Symbols" }, + { 0x1D200, 0x1D24F, "Ancient Greek Musical Notation" }, + { 0x1D300, 0x1D35F, "Tai Xuan Jing Symbols" }, + { 0x1D360, 0x1D37F, "Counting Rod Numerals" }, + { 0x1D400, 0x1D7FF, "Mathematical Alphanumeric Symbols" }, + { 0x1F000, 0x1F02F, "Mahjong Tiles" }, + { 0x1F030, 0x1F09F, "Domino Tiles" }, + { 0x20000, 0x2A6DF, "CJK Unified Ideographs Extension B" }, + { 0x2F800, 0x2FA1F, "CJK Compatibility Ideographs Supplement" }, + { 0xE0000, 0xE007F, "Tags" }, + { 0xE0100, 0xE01EF, "Variation Selectors Supplement" }, + { 0xF0000, 0xFFFFF, "Supplementary Private Use Area-A" }, + { 0x100000, 0x10FFFF, "Supplementary Private Use Area-B" } +}; +#define blocks_level1_shift 8 +#define blocks_level1_threshold 0x30000 +static const uint8_t blocks_level1[768 * 2] = +{ + 0, 2, + 2, 4, + 3, 6, + 6, 8, + 8, 9, + 9, 12, + 12, 13, + 13, 17, + 17, 17, + 17, 19, + 19, 21, + 21, 23, + 23, 25, + 25, 27, + 27, 29, + 29, 30, + 30, 32, + 32, 33, + 33, 34, + 33, 36, + 36, 37, + 36, 37, + 36, 39, + 39, 44, + 44, 45, + 45, 49, + 49, 50, + 50, 52, + 52, 54, + 54, 57, + 57, 58, + 58, 59, + 59, 63, + 63, 66, + 66, 67, + 67, 68, + 68, 71, + 71, 74, + 74, 75, + 75, 78, + 78, 79, + 79, 81, + 81, 82, + 82, 83, + 83, 86, + 86, 90, + 90, 92, + 92, 94, + 94, 97, + 97, 103, + 103, 104, + 104, 105, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 106, + 105, 107, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 107, 108, + 108, 109, + 108, 109, + 108, 109, + 108, 109, + 108, 110, + 110, 111, + 110, 112, + 112, 114, + 114, 117, + 117, 119, + 119, 120, + 120, 120, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 120, 121, + 121, 122, + 121, 122, + 121, 122, + 121, 123, + 123, 124, + 123, 124, + 123, 124, + 123, 124, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 124, 125, + 125, 126, + 125, 126, + 126, 128, + 127, 128, + 127, 128, + 128, 134, + 134, 136, + 136, 138, + 138, 142, + 142, 144, + 144, 148, + 148, 151, + 151, 151, + 151, 151, + 151, 151, + 151, 152, + 152, 154, + 154, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 155, + 155, 156, + 155, 156, + 155, 156, + 155, 156, + 156, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 157, + 157, 158, + 158, 159, + 159, 160, + 160, 162, + 162, 163, + 162, 163, + 162, 163, + 162, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 163, + 163, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 165, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 165, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 166, + 166, 167, + 166, 167, + 166, 167, + 167, 167, + 167, 167, + 167, 167, + 167, 167, + 167, 167 +}; +#define blocks_upper_first_index 167 +#define blocks_upper_last_index 171 diff --git a/lib/unictype/categ_C.c b/lib/unictype/categ_C.c new file mode 100644 index 00000000..d14d8c09 --- /dev/null +++ b/lib/unictype/categ_C.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_C table. */ +#include "categ_C.h" + +const uc_general_category_t UC_CATEGORY_C = + { UC_CATEGORY_MASK_C, 0, { &u_categ_C } }; diff --git a/lib/unictype/categ_C.h b/lib/unictype/categ_C.h new file mode 100644 index 00000000..0209db2e --- /dev/null +++ b/lib/unictype/categ_C.h @@ -0,0 +1,890 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[17]; + short level2[5 << 7]; + /*unsigned*/ int level3[52 << 4]; + } +u_categ_C = +{ + { 17 }, + { + 18 * sizeof (int) / sizeof (short) + 0, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 512, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384 + }, + { + 18 + 640 * sizeof (short) / sizeof (int) + 0, + 18 + 640 * sizeof (short) / sizeof (int) + 16, + 18 + 640 * sizeof (short) / sizeof (int) + 32, + 18 + 640 * sizeof (short) / sizeof (int) + 48, + 18 + 640 * sizeof (short) / sizeof (int) + 64, + 18 + 640 * sizeof (short) / sizeof (int) + 80, + 18 + 640 * sizeof (short) / sizeof (int) + 96, + 18 + 640 * sizeof (short) / sizeof (int) + 112, + 18 + 640 * sizeof (short) / sizeof (int) + 128, + 18 + 640 * sizeof (short) / sizeof (int) + 144, + 18 + 640 * sizeof (short) / sizeof (int) + 160, + 18 + 640 * sizeof (short) / sizeof (int) + 176, + 18 + 640 * sizeof (short) / sizeof (int) + 192, + 18 + 640 * sizeof (short) / sizeof (int) + 208, + 18 + 640 * sizeof (short) / sizeof (int) + 224, + 18 + 640 * sizeof (short) / sizeof (int) + 240, + 18 + 640 * sizeof (short) / sizeof (int) + 256, + 18 + 640 * sizeof (short) / sizeof (int) + 272, + 18 + 640 * sizeof (short) / sizeof (int) + 288, + 18 + 640 * sizeof (short) / sizeof (int) + 304, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 336, + 18 + 640 * sizeof (short) / sizeof (int) + 352, + 18 + 640 * sizeof (short) / sizeof (int) + 368, + 18 + 640 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 400, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 416, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 432, + 18 + 640 * sizeof (short) / sizeof (int) + 448, + 18 + 640 * sizeof (short) / sizeof (int) + 464, + 18 + 640 * sizeof (short) / sizeof (int) + 480, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 496, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 528, + 18 + 640 * sizeof (short) / sizeof (int) + 544, + 18 + 640 * sizeof (short) / sizeof (int) + 560, + 18 + 640 * sizeof (short) / sizeof (int) + 576, + 18 + 640 * sizeof (short) / sizeof (int) + 592, + 18 + 640 * sizeof (short) / sizeof (int) + 608, + 18 + 640 * sizeof (short) / sizeof (int) + 624, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 640, + 18 + 640 * sizeof (short) / sizeof (int) + 656, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 672, + 18 + 640 * sizeof (short) / sizeof (int) + 688, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 704, + 18 + 640 * sizeof (short) / sizeof (int) + 720, + 18 + 640 * sizeof (short) / sizeof (int) + 736, + 18 + 640 * sizeof (short) / sizeof (int) + 752, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 768, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 784, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 800, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 816, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + 18 + 640 * sizeof (short) / sizeof (int) + 512 + }, + { + 0xFFFFFFFF, 0x00000000, 0x00000000, 0x80000000, + 0xFFFFFFFF, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x83000000, + 0x0000280F, 0x00000004, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0001FFF0, 0x01800000, 0x00000001, + 0x0001F900, 0x00000000, 0x0000FF00, 0xFFE0F800, + 0x3000003F, 0x00000001, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x20000000, 0x00000000, + 0x0000C000, 0x00000000, 0x00001800, 0x00000000, + 0x00000000, 0xFFFC0000, 0x00000000, 0xF8000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000001, 0x0C000000, 0x00E0C000, 0x07F80000, + 0x00066011, 0x0C3A0200, 0x4F7F8660, 0xF8000030, + 0x00067811, 0x2C920200, 0xA1FDC678, 0xFFC0003F, + 0x00044011, 0x0C120200, 0xFFFEC440, 0xFFFD0030, + 0x00066011, 0x0C120200, 0x4F3FC660, 0xFFFC0030, + 0x29C23813, 0x3C0038E7, 0xFF7EC238, 0xF800003F, + 0x00022011, 0x1C100200, 0xFC9FC220, 0x00FF0030, + 0x00022013, 0x0C100200, 0xBF9FC220, 0xFFF90030, + 0x00022013, 0x1C000200, 0xFF7FC220, 0x01C00030, + 0x03800013, 0xD0040000, 0x00A07B80, 0xFFE3FFFF, + 0x00000001, 0x78000000, 0xF0000000, 0xFFFFFFFF, + 0x010FDA69, 0xC4001351, 0xCC00C0A0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000100, 0x0001E000, + 0x0100F000, 0x20000000, 0xFFE02000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3C000000, 0x00000000, 0x0000FFC0, 0xE0000000, + 0x00000000, 0x00000000, 0x7C000000, 0x00000000, + 0x00000000, 0x000000F8, 0x00000000, 0xFC000000, + 0x00000000, 0x00000000, 0xC280C200, 0x00000000, + 0x0000C200, 0x80C20000, 0x008000C2, 0x00000000, + 0x00C20000, 0x00000000, 0x78000000, 0xE0000000, + 0xFC000000, 0x00000000, 0x00000000, 0xFFE00000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFF800000, + 0xE0000000, 0x00000000, 0x00000000, 0xFFFE0000, + 0xFFE02000, 0xFF800000, 0xFFF00000, 0xFFF22000, + 0x00000000, 0x00300000, 0xC0000000, 0xFC00FC00, + 0xFC008000, 0x00000000, 0x00000000, 0xFF000000, + 0x00000000, 0xFFFFF800, 0xFFFFFFFF, 0xFFFFFFFF, + 0xE0000000, 0xF000F000, 0x0000000E, 0xFFE0C000, + 0x00000000, 0x0000FC00, 0x3C00FC00, 0x00000000, + 0x30000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x0000F000, 0xE0000000, + 0x00000000, 0xFC003800, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x07000000, 0x00001C00, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x3FFFFF80, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0C00000, 0x00000000, 0x5500C0C0, 0xC0000000, + 0x00000000, 0x00200000, 0x10300020, 0x80230000, + 0x0000F800, 0x00007C00, 0x00000000, 0x000CFFFF, + 0xFFE08000, 0xFFC00000, 0x0000FFFF, 0xFFFE0000, + 0x00000000, 0x00000000, 0x00070000, 0x00000000, + 0x0000FE00, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF00, + 0x00000000, 0xFFFFFF80, 0xFFFFF800, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0000000, 0xE0000000, 0xFFFFFFF0, 0xFFFFFFFF, + 0x00000C21, 0x00000100, 0x80B85000, 0x00000001, + 0x00E00000, 0x80010000, 0x0000E800, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFE0E000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00008000, 0x80000000, 0xC0010000, + 0x00000000, 0x00000000, 0x00000000, 0x01FFF800, + 0x00000000, 0x0000FFC0, 0x00000000, 0xFFFF7FC0, + 0xFF800000, 0x80808080, 0x80808080, 0x00000000, + 0x00000000, 0xFFFE0000, 0xFFFFFFFF, 0xFFFFFFFF, + 0x04000000, 0x00000000, 0x00000000, 0xFFF00000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFC00000, 0xF000FFFF, + 0x00000000, 0x00000000, 0x00000001, 0x00000000, + 0x01800000, 0x00000000, 0x00000000, 0x00000000, + 0x0000001F, 0x0001C000, 0x00000000, 0x00000000, + 0x00008000, 0xFF000000, 0x00000000, 0x0000FFF0, + 0x80000000, 0x00000000, 0x0000FFF0, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFC00000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFF0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000E000, 0x00000000, 0xFFFFFF80, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFF000, 0x00000000, 0x0FF00003, + 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0xFFFFF000, 0x00000000, 0xFF000000, + 0x00000000, 0x00000000, 0xFC003FE0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x7FF00000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0xFF800000, 0x0C00C000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFFF0, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0000C000, 0x00000000, 0x0000F800, + 0x00000000, 0x00000000, 0xFC000000, 0xFFFFFFFF, + 0x1F07FF80, 0xA0800000, 0x00000024, 0x00000000, + 0x00000000, 0xFFFC0000, 0x0007FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000FFFF, 0x00000000, + 0x00030000, 0x00000000, 0xFFFFFF00, 0xC000FFFF, + 0xFC000000, 0x0000FF80, 0x00080000, 0x0020F080, + 0x00000000, 0x00000000, 0x00000000, 0xE0000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x80000000, 0xE3030303, 0xCFFF8080, + 0x00001000, 0x48000080, 0xC000C000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0xF8000000, + 0x00000078, 0x00700000, 0x00000000, 0x00000000, + 0xF000F800, 0xFFFFFFFF, 0x0000FFFF, 0xC0000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xE0000000, 0x00000000, 0xFFFE0000, 0xFFFFFFFF, + 0x80000000, 0x0000FFF0, 0xFFFFF800, 0xFFFFFFFF, + 0x40000000, 0x00000000, 0xFFC000F0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0000000, 0xFFFFFC00, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000002C0, 0x6E400000, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x7C000000, 0x7C000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x01100F90, 0x78F00000, 0xFE00FF00, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFF8000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0xFFF0FFF8, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, + 0x00000000, 0x00000180, 0x00000000, 0x07F80000, + 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0xFF800000, 0xFFFC0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00200000, 0x00000000, + 0x20000000, 0x1400219B, 0x00000010, 0x00000000, + 0x20201840, 0x84000000, 0x000203A0, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000000C0, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00003000, 0x00000000, + 0x00000000, 0x0000F000, 0x00000000, 0x00000000, + 0xFFF00000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFF800000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000 + } +}; diff --git a/lib/unictype/categ_Cc.c b/lib/unictype/categ_Cc.c new file mode 100644 index 00000000..572f88f7 --- /dev/null +++ b/lib/unictype/categ_Cc.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Cc table. */ +#include "categ_Cc.h" + +const uc_general_category_t UC_CATEGORY_Cc = + { UC_CATEGORY_MASK_Cc, 0, { &u_categ_Cc } }; diff --git a/lib/unictype/categ_Cc.h b/lib/unictype/categ_Cc.h new file mode 100644 index 00000000..17104cdd --- /dev/null +++ b/lib/unictype/categ_Cc.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_categ_Cc = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0xFFFFFFFF, 0x00000000, 0x00000000, 0x80000000, + 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Cf.c b/lib/unictype/categ_Cf.c new file mode 100644 index 00000000..19cd842e --- /dev/null +++ b/lib/unictype/categ_Cf.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Cf table. */ +#include "categ_Cf.h" + +const uc_general_category_t UC_CATEGORY_Cf = + { UC_CATEGORY_MASK_Cf, 0, { &u_categ_Cf } }; diff --git a/lib/unictype/categ_Cf.h b/lib/unictype/categ_Cf.h new file mode 100644 index 00000000..5b67fb45 --- /dev/null +++ b/lib/unictype/categ_Cf.h @@ -0,0 +1,452 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + /*unsigned*/ int level3[7 << 4]; + } +u_categ_Cf = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + 16 + 384 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000F, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x20000000, 0x00000000, + 0x00008000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00300000, 0x00000000, 0x00000000, + 0x0000F800, 0x00007C00, 0x00000000, 0x0000FC1F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0E000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x07F80000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Cn.c b/lib/unictype/categ_Cn.c new file mode 100644 index 00000000..131704ab --- /dev/null +++ b/lib/unictype/categ_Cn.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Cn table. */ +#include "categ_Cn.h" + +const uc_general_category_t UC_CATEGORY_Cn = + { UC_CATEGORY_MASK_Cn, 0, { &u_categ_Cn } }; diff --git a/lib/unictype/categ_Cn.h b/lib/unictype/categ_Cn.h new file mode 100644 index 00000000..d8288041 --- /dev/null +++ b/lib/unictype/categ_Cn.h @@ -0,0 +1,1014 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[17]; + short level2[6 << 7]; + /*unsigned*/ int level3[51 << 4]; + } +u_categ_Cn = +{ + { 17 }, + { + 18 * sizeof (int) / sizeof (short) + 0, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 512, + 18 * sizeof (int) / sizeof (short) + 640, + 18 * sizeof (int) / sizeof (short) + 640 + }, + { + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 0, + 18 + 768 * sizeof (short) / sizeof (int) + 16, + 18 + 768 * sizeof (short) / sizeof (int) + 32, + 18 + 768 * sizeof (short) / sizeof (int) + 48, + 18 + 768 * sizeof (short) / sizeof (int) + 64, + 18 + 768 * sizeof (short) / sizeof (int) + 80, + 18 + 768 * sizeof (short) / sizeof (int) + 96, + 18 + 768 * sizeof (short) / sizeof (int) + 112, + 18 + 768 * sizeof (short) / sizeof (int) + 128, + 18 + 768 * sizeof (short) / sizeof (int) + 144, + 18 + 768 * sizeof (short) / sizeof (int) + 160, + 18 + 768 * sizeof (short) / sizeof (int) + 176, + 18 + 768 * sizeof (short) / sizeof (int) + 192, + 18 + 768 * sizeof (short) / sizeof (int) + 208, + 18 + 768 * sizeof (short) / sizeof (int) + 224, + 18 + 768 * sizeof (short) / sizeof (int) + 240, + 18 + 768 * sizeof (short) / sizeof (int) + 256, + 18 + 768 * sizeof (short) / sizeof (int) + 272, + 18 + 768 * sizeof (short) / sizeof (int) + 288, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 304, + 18 + 768 * sizeof (short) / sizeof (int) + 320, + 18 + 768 * sizeof (short) / sizeof (int) + 336, + 18 + 768 * sizeof (short) / sizeof (int) + 352, + 18 + 768 * sizeof (short) / sizeof (int) + 368, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 400, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 416, + 18 + 768 * sizeof (short) / sizeof (int) + 432, + 18 + 768 * sizeof (short) / sizeof (int) + 448, + 18 + 768 * sizeof (short) / sizeof (int) + 464, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 480, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 496, + 18 + 768 * sizeof (short) / sizeof (int) + 512, + 18 + 768 * sizeof (short) / sizeof (int) + 528, + 18 + 768 * sizeof (short) / sizeof (int) + 544, + 18 + 768 * sizeof (short) / sizeof (int) + 560, + 18 + 768 * sizeof (short) / sizeof (int) + 576, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 608, + 18 + 768 * sizeof (short) / sizeof (int) + 624, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 640, + 18 + 768 * sizeof (short) / sizeof (int) + 656, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 672, + 18 + 768 * sizeof (short) / sizeof (int) + 688, + 18 + 768 * sizeof (short) / sizeof (int) + 704, + 18 + 768 * sizeof (short) / sizeof (int) + 720, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 736, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 752, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 768, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 784, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + 18 + 768 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 768 * sizeof (short) / sizeof (int) + 800 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x83000000, + 0x0000280F, 0x00000004, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0001FFF0, 0x01800000, 0x00000001, + 0x0001F900, 0x00000000, 0x0000FF00, 0xFFE0F800, + 0x30000030, 0x00000001, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00004000, 0x00000000, 0x00001800, 0x00000000, + 0x00000000, 0xFFFC0000, 0x00000000, 0xF8000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000001, 0x0C000000, 0x00E0C000, 0x07F80000, + 0x00066011, 0x0C3A0200, 0x4F7F8660, 0xF8000030, + 0x00067811, 0x2C920200, 0xA1FDC678, 0xFFC0003F, + 0x00044011, 0x0C120200, 0xFFFEC440, 0xFFFD0030, + 0x00066011, 0x0C120200, 0x4F3FC660, 0xFFFC0030, + 0x29C23813, 0x3C0038E7, 0xFF7EC238, 0xF800003F, + 0x00022011, 0x1C100200, 0xFC9FC220, 0x00FF0030, + 0x00022013, 0x0C100200, 0xBF9FC220, 0xFFF90030, + 0x00022013, 0x1C000200, 0xFF7FC220, 0x01C00030, + 0x03800013, 0xD0040000, 0x00A07B80, 0xFFE3FFFF, + 0x00000001, 0x78000000, 0xF0000000, 0xFFFFFFFF, + 0x010FDA69, 0xC4001351, 0xCC00C0A0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000100, 0x0001E000, + 0x0100F000, 0x20000000, 0xFFE02000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3C000000, 0x00000000, 0x0000FFC0, 0xE0000000, + 0x00000000, 0x00000000, 0x7C000000, 0x00000000, + 0x00000000, 0x000000F8, 0x00000000, 0xFC000000, + 0x00000000, 0x00000000, 0xC280C200, 0x00000000, + 0x0000C200, 0x80C20000, 0x008000C2, 0x00000000, + 0x00C20000, 0x00000000, 0x78000000, 0xE0000000, + 0xFC000000, 0x00000000, 0x00000000, 0xFFE00000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFF800000, + 0xE0000000, 0x00000000, 0x00000000, 0xFFFE0000, + 0xFFE02000, 0xFF800000, 0xFFF00000, 0xFFF22000, + 0x00000000, 0x00000000, 0xC0000000, 0xFC00FC00, + 0xFC008000, 0x00000000, 0x00000000, 0xFF000000, + 0x00000000, 0xFFFFF800, 0xFFFFFFFF, 0xFFFFFFFF, + 0xE0000000, 0xF000F000, 0x0000000E, 0xFFE0C000, + 0x00000000, 0x0000FC00, 0x3C00FC00, 0x00000000, + 0x30000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x0000F000, 0xE0000000, + 0x00000000, 0xFC003800, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x07000000, 0x00001C00, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x3FFFFF80, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0C00000, 0x00000000, 0x5500C0C0, 0xC0000000, + 0x00000000, 0x00200000, 0x10300020, 0x80230000, + 0x00000000, 0x00000000, 0x00000000, 0x000C03E0, + 0xFFE08000, 0xFFC00000, 0x0000FFFF, 0xFFFE0000, + 0x00000000, 0x00000000, 0x00070000, 0x00000000, + 0x0000FE00, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF00, + 0x00000000, 0xFFFFFF80, 0xFFFFF800, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0000000, 0xE0000000, 0xFFFFFFF0, 0xFFFFFFFF, + 0x00000C21, 0x00000100, 0x80B85000, 0x00000001, + 0x00E00000, 0x80010000, 0x0000E800, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFE0E000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00008000, 0x80000000, 0xC0010000, + 0x00000000, 0x00000000, 0x00000000, 0x01FFF800, + 0x00000000, 0x0000FFC0, 0x00000000, 0xFFFF7FC0, + 0xFF800000, 0x80808080, 0x80808080, 0x00000000, + 0x00000000, 0xFFFE0000, 0xFFFFFFFF, 0xFFFFFFFF, + 0x04000000, 0x00000000, 0x00000000, 0xFFF00000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFC00000, 0xF000FFFF, + 0x00000000, 0x00000000, 0x00000001, 0x00000000, + 0x01800000, 0x00000000, 0x00000000, 0x00000000, + 0x0000001F, 0x0001C000, 0x00000000, 0x00000000, + 0x00008000, 0xFF000000, 0x00000000, 0x0000FFF0, + 0x80000000, 0x00000000, 0x0000FFF0, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFC00000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFF0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000E000, 0x00000000, 0xFFFFFF80, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFF000, 0x00000000, 0x0FF00003, + 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0xFFFFF000, 0x00000000, 0xFF000000, + 0x00000000, 0x00000000, 0xFC003FE0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x7FF00000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0xFF800000, 0x0C00C000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFFF0, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x0000C000, 0x00000000, 0x0000F800, + 0x00000000, 0x00000000, 0xFC000000, 0xFFFFFFFF, + 0x1F07FF80, 0xA0800000, 0x00000024, 0x00000000, + 0x00000000, 0xFFFC0000, 0x0007FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000FFFF, 0x00000000, + 0x00030000, 0x00000000, 0xFFFFFF00, 0xC000FFFF, + 0xFC000000, 0x0000FF80, 0x00080000, 0x0020F080, + 0x00000000, 0x00000000, 0x00000000, 0x60000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x80000000, 0xE3030303, 0xC1FF8080, + 0x00001000, 0x48000080, 0xC000C000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0xF8000000, + 0x00000078, 0x00700000, 0x00000000, 0x00000000, + 0xF000F800, 0xFFFFFFFF, 0x0000FFFF, 0xC0000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xE0000000, 0x00000000, 0xFFFE0000, 0xFFFFFFFF, + 0x80000000, 0x0000FFF0, 0xFFFFF800, 0xFFFFFFFF, + 0x40000000, 0x00000000, 0xFFC000F0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0000000, 0xFFFFFC00, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000002C0, 0x6E400000, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x7C000000, 0x7C000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x01100F90, 0x78F00000, 0xFE00FF00, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFF8000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0xFFF0FFF8, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, + 0x00000000, 0x00000180, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0xFF800000, 0xFFFC0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00200000, 0x00000000, + 0x20000000, 0x1400219B, 0x00000010, 0x00000000, + 0x20201840, 0x84000000, 0x000203A0, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000000C0, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00003000, 0x00000000, + 0x00000000, 0x0000F000, 0x00000000, 0x00000000, + 0xFFF00000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFF800000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFD, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xC0000000 + } +}; diff --git a/lib/unictype/categ_Co.c b/lib/unictype/categ_Co.c new file mode 100644 index 00000000..70b5ac72 --- /dev/null +++ b/lib/unictype/categ_Co.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Co table. */ +#include "categ_Co.h" + +const uc_general_category_t UC_CATEGORY_Co = + { UC_CATEGORY_MASK_Co, 0, { &u_categ_Co } }; diff --git a/lib/unictype/categ_Co.h b/lib/unictype/categ_Co.h new file mode 100644 index 00000000..a5b8ce9b --- /dev/null +++ b/lib/unictype/categ_Co.h @@ -0,0 +1,310 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[17]; + short level2[2 << 7]; + /*unsigned*/ int level3[3 << 4]; + } +u_categ_Co = +{ + { 17 }, + { + 18 * sizeof (int) / sizeof (short) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 32 + }, + { + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF + } +}; diff --git a/lib/unictype/categ_Cs.c b/lib/unictype/categ_Cs.c new file mode 100644 index 00000000..a3f5ceab --- /dev/null +++ b/lib/unictype/categ_Cs.c @@ -0,0 +1,30 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +static bool +uc_is_category_Cs (ucs4_t uc) +{ + return (uc >= 0xd800 && uc < 0xe000); +} + +const uc_general_category_t UC_CATEGORY_Cs = + { UC_CATEGORY_MASK_Cs, 1, { &uc_is_category_Cs } }; diff --git a/lib/unictype/categ_Cs.h b/lib/unictype/categ_Cs.h new file mode 100644 index 00000000..99b37d15 --- /dev/null +++ b/lib/unictype/categ_Cs.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_categ_Cs = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF + } +}; diff --git a/lib/unictype/categ_L.c b/lib/unictype/categ_L.c new file mode 100644 index 00000000..b62b2a27 --- /dev/null +++ b/lib/unictype/categ_L.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_L table. */ +#include "categ_L.h" + +const uc_general_category_t UC_CATEGORY_L = + { UC_CATEGORY_MASK_L, 0, { &u_categ_L } }; diff --git a/lib/unictype/categ_L.h b/lib/unictype/categ_L.h new file mode 100644 index 00000000..558b5945 --- /dev/null +++ b/lib/unictype/categ_L.h @@ -0,0 +1,580 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[3]; + short level2[3 << 7]; + /*unsigned*/ int level3[42 << 4]; + } +u_categ_L = +{ + { 3 }, + { + 4 * sizeof (int) / sizeof (short) + 0, + 4 * sizeof (int) / sizeof (short) + 128, + 4 * sizeof (int) / sizeof (short) + 256 + }, + { + 4 + 384 * sizeof (short) / sizeof (int) + 0, + 4 + 384 * sizeof (short) / sizeof (int) + 16, + 4 + 384 * sizeof (short) / sizeof (int) + 32, + 4 + 384 * sizeof (short) / sizeof (int) + 48, + 4 + 384 * sizeof (short) / sizeof (int) + 64, + 4 + 384 * sizeof (short) / sizeof (int) + 80, + 4 + 384 * sizeof (short) / sizeof (int) + 96, + 4 + 384 * sizeof (short) / sizeof (int) + 112, + 4 + 384 * sizeof (short) / sizeof (int) + 128, + 4 + 384 * sizeof (short) / sizeof (int) + 144, + 4 + 384 * sizeof (short) / sizeof (int) + 160, + 4 + 384 * sizeof (short) / sizeof (int) + 176, + 4 + 384 * sizeof (short) / sizeof (int) + 192, + 4 + 384 * sizeof (short) / sizeof (int) + 208, + 4 + 384 * sizeof (short) / sizeof (int) + 224, + 4 + 384 * sizeof (short) / sizeof (int) + 240, + 4 + 384 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 272, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 352, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 368, + 4 + 384 * sizeof (short) / sizeof (int) + 384, + 4 + 384 * sizeof (short) / sizeof (int) + 400, + 4 + 384 * sizeof (short) / sizeof (int) + 416, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 432, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 448, + 4 + 384 * sizeof (short) / sizeof (int) + 464, + 4 + 384 * sizeof (short) / sizeof (int) + 480, + 4 + 384 * sizeof (short) / sizeof (int) + 496, + 4 + 384 * sizeof (short) / sizeof (int) + 512, + 4 + 384 * sizeof (short) / sizeof (int) + 528, + 4 + 384 * sizeof (short) / sizeof (int) + 544, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 560, + 4 + 384 * sizeof (short) / sizeof (int) + 576, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 608, + 4 + 384 * sizeof (short) / sizeof (int) + 624, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 640, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 656, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, + 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, + 0x00000000, 0x00000000, 0x00000000, 0x3CDF0000, + 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0x027FFFFF, 0xFFFFFFFE, + 0x000000FF, 0x00000000, 0xFFFF0000, 0x000707FF, + 0x00000000, 0xFFFFFFFE, 0x000007FF, 0xFFFEC000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9C00C060, + 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0002003F, 0xFFFFFC00, 0x043007FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xF8060003, + 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x00030003, + 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, + 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x00000003, + 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x00020003, + 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x00000000, + 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x00000003, + 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x00000003, + 0xFFFDDFE0, 0x23FFFDFF, 0x00000000, 0xFC000003, + 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, + 0xFFFFFFFE, 0x000DFFFF, 0x0000007F, 0x00000000, + 0xFEF02596, 0x200DECAE, 0x3000005F, 0x00000000, + 0x00000001, 0x00000000, 0xFFFFFEFF, 0x00001FFF, + 0x00000F00, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x800007FF, 0x3C3F0000, 0xFFE1C062, + 0x00004003, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, + 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007F9FFF, + 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x000007FF, + 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, + 0xFFFFFFFF, 0x000FFFFF, 0x10800000, 0x00000000, + 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0x000005FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x00000000, 0xFFFF0000, 0x001F3FFF, + 0xFFFFFFFF, 0x000003FF, 0x000000FE, 0x00000000, + 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFE0, 0x000FFFFF, 0x00000FE0, 0x00000000, + 0xFFFFFFF8, 0x0000C001, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x0000000F, 0xFC00E000, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, + 0x00000000, 0x00000000, 0x00000000, 0x80020000, + 0x001F0000, 0x00000000, 0x00000000, 0x00000000, + 0x3E2FFC84, 0xF3FFBD50, 0x000043E0, 0x00000000, + 0x00000018, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, + 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, + 0x00000000, 0x00008000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000060, 0x183E0000, 0xFFFFFFFE, 0xFFFFFFFF, + 0xE07FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00007FFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0x00000C00, 0xFFFFFFFF, 0x80007FFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000019FF, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFC, 0x000FFFFF, 0x00000000, 0x00000000, + 0xFFFFFC00, 0xFFFF003F, 0x0000007F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x000001FF, 0x00000FF7, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xA0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, + 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, + 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, + 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF0000, 0x000003FD, 0x00000000, + 0x3FFFFFFF, 0xFFFFFFFF, 0x0000FF0F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, + 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, + 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Ll.c b/lib/unictype/categ_Ll.c new file mode 100644 index 00000000..37da1a08 --- /dev/null +++ b/lib/unictype/categ_Ll.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Ll table. */ +#include "categ_Ll.h" + +const uc_general_category_t UC_CATEGORY_Ll = + { UC_CATEGORY_MASK_Ll, 0, { &u_categ_Ll } }; diff --git a/lib/unictype/categ_Ll.h b/lib/unictype/categ_Ll.h new file mode 100644 index 00000000..dd8194b0 --- /dev/null +++ b/lib/unictype/categ_Ll.h @@ -0,0 +1,335 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[13 << 4]; + } +u_categ_Ll = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, + 0x00000000, 0x04200400, 0x80000000, 0xFF7FFFFF, + 0xAAAAAAAA, 0x55AAAAAA, 0xAAAAAB55, 0xD4AAAAAA, + 0x4E243129, 0xE6512D2A, 0xB5555240, 0xAA29AAAA, + 0xAAAAAAAA, 0x93FAAAAA, 0xFFFFAA85, 0xFFFFFFFF, + 0xFFEFFFFF, 0x0000FFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x388A0000, + 0x00010000, 0xFFFFF000, 0xAAE37FFF, 0x192FAAAA, + 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xAAAAAAAA, + 0xAAAAA802, 0xAAAAAAAA, 0xAAAAD554, 0xAAAAAAAA, + 0xAAAAAAAA, 0x0000000A, 0x00000000, 0xFFFFFFFE, + 0x000000FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x00000FFF, 0x00000000, 0xFEFFFFFC, + 0x07FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, + 0xBFEAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, + 0x003F00FF, 0x00FF00FF, 0x00FF003F, 0x3FFF00FF, + 0x00FF00FF, 0x40DF00FF, 0x00CF00DC, 0x00DC00FF, + 0x00000000, 0x00000000, 0x00000000, 0x80020000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0008C400, 0x32108000, 0x000043C0, 0x00000000, + 0x00000010, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFF0000, 0x7FFFFFFF, 0x1FDA1562, + 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x0000001A, + 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xAAAAAAAA, 0x00002AA8, + 0x00AAAAAA, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xAAABAAA8, 0xAAAAAAAA, 0x95FEAAAA, + 0x000010AA, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFF00, 0x0000FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFC000000, 0x000FFFFF, 0xFFDFC000, 0x000000FF, + 0x0FFFFFFC, 0xEBC00000, 0x0000FFEF, 0xFFFFFC00, + 0xC000000F, 0x00FFFFFF, 0xFFFC0000, 0x00000FFF, + 0xFFFFFFC0, 0xFC000000, 0x000FFFFF, 0xFFFFC000, + 0x000000FF, 0x0FFFFFFC, 0xFFC00000, 0x0000FFFF, + 0xFFFFFC00, 0x0000003F, 0xF7FFFFFC, 0xF0000003, + 0x0FDFFFFF, 0xFFC00000, 0x003F7FFF, 0xFFFF0000, + 0x0000FDFF, 0xFFFFFC00, 0x00000BF7, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Lm.c b/lib/unictype/categ_Lm.c new file mode 100644 index 00000000..296e53db --- /dev/null +++ b/lib/unictype/categ_Lm.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Lm table. */ +#include "categ_Lm.h" + +const uc_general_category_t UC_CATEGORY_Lm = + { UC_CATEGORY_MASK_Lm, 0, { &u_categ_Lm } }; diff --git a/lib/unictype/categ_Lm.h b/lib/unictype/categ_Lm.h new file mode 100644 index 00000000..a781af61 --- /dev/null +++ b/lib/unictype/categ_Lm.h @@ -0,0 +1,216 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[16 << 4]; + } +u_categ_Lm = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + 2 + 128 * sizeof (short) / sizeof (int) + 112, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 128, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 160, + 2 + 128 * sizeof (short) / sizeof (int) + 176, + 2 + 128 * sizeof (short) / sizeof (int) + 192, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 224, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 240 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFF0000, 0x0003FFC3, 0x0000501F, + 0x00000000, 0x00000000, 0x00000000, 0x04100000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x02000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000001, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000060, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x04300000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00020000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000040, 0x00000000, + 0x00000000, 0x00000000, 0x00000040, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x10000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00800000, 0x00000000, + 0x00000000, 0x00000000, 0x00000008, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x3F000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFF000, 0xFFFFFFFF, 0x01000003, + 0xF8000000, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x001F0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00008000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00008000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000020, 0x083E0000, 0x00000000, 0x00000000, + 0x60000000, 0x00000000, 0x00000000, 0x70000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00200000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00001000, 0x00000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFF800000, 0x00000000, 0x00000000, 0x00010000, + 0x00000100, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00010000, + 0xC0000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Lo.c b/lib/unictype/categ_Lo.c new file mode 100644 index 00000000..5c7781e1 --- /dev/null +++ b/lib/unictype/categ_Lo.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Lo table. */ +#include "categ_Lo.h" + +const uc_general_category_t UC_CATEGORY_Lo = + { UC_CATEGORY_MASK_Lo, 0, { &u_categ_Lo } }; diff --git a/lib/unictype/categ_Lo.h b/lib/unictype/categ_Lo.h new file mode 100644 index 00000000..75bec147 --- /dev/null +++ b/lib/unictype/categ_Lo.h @@ -0,0 +1,568 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[3]; + short level2[3 << 7]; + /*unsigned*/ int level3[39 << 4]; + } +u_categ_Lo = +{ + { 3 }, + { + 4 * sizeof (int) / sizeof (short) + 0, + 4 * sizeof (int) / sizeof (short) + 128, + 4 * sizeof (int) / sizeof (short) + 256 + }, + { + 4 + 384 * sizeof (short) / sizeof (int) + 0, + 4 + 384 * sizeof (short) / sizeof (int) + 16, + 4 + 384 * sizeof (short) / sizeof (int) + 32, + 4 + 384 * sizeof (short) / sizeof (int) + 48, + 4 + 384 * sizeof (short) / sizeof (int) + 64, + 4 + 384 * sizeof (short) / sizeof (int) + 80, + 4 + 384 * sizeof (short) / sizeof (int) + 96, + 4 + 384 * sizeof (short) / sizeof (int) + 112, + 4 + 384 * sizeof (short) / sizeof (int) + 128, + 4 + 384 * sizeof (short) / sizeof (int) + 144, + 4 + 384 * sizeof (short) / sizeof (int) + 160, + 4 + 384 * sizeof (short) / sizeof (int) + 176, + 4 + 384 * sizeof (short) / sizeof (int) + 192, + 4 + 384 * sizeof (short) / sizeof (int) + 208, + 4 + 384 * sizeof (short) / sizeof (int) + 224, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 256, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 272, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 352, + 4 + 384 * sizeof (short) / sizeof (int) + 368, + 4 + 384 * sizeof (short) / sizeof (int) + 384, + 4 + 384 * sizeof (short) / sizeof (int) + 400, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 416, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 432, + 4 + 384 * sizeof (short) / sizeof (int) + 448, + 4 + 384 * sizeof (short) / sizeof (int) + 464, + 4 + 384 * sizeof (short) / sizeof (int) + 480, + 4 + 384 * sizeof (short) / sizeof (int) + 496, + 4 + 384 * sizeof (short) / sizeof (int) + 512, + 4 + 384 * sizeof (short) / sizeof (int) + 528, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 544, + 4 + 384 * sizeof (short) / sizeof (int) + 560, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 576, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 608, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x08000000, 0x0000000F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00100000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0x000707FF, + 0x00000000, 0xFFFFFFFE, 0x000007FE, 0xFFFEC000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9C00C000, + 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0002003F, 0xFFFFFC00, 0x000007FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xF8040003, + 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x00030003, + 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, + 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x00000003, + 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x00020003, + 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x00000000, + 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x00000003, + 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x00000003, + 0xFFFDDFE0, 0x23FFFDFF, 0x00000000, 0xFC000003, + 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, + 0xFFFFFFFE, 0x000DFFFF, 0x0000003F, 0x00000000, + 0xFEF02596, 0x200DECAE, 0x3000001F, 0x00000000, + 0x00000001, 0x00000000, 0xFFFFFEFF, 0x00001FFF, + 0x00000F00, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x800007FF, 0x3C3F0000, 0xFFE1C062, + 0x00004003, 0x00000000, 0xFFFF0000, 0x07FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, + 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007F9FFF, + 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x000007FF, + 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, + 0xFFFFFFFF, 0x000FFFFF, 0x10000000, 0x00000000, + 0x00000000, 0xFFFFFFFF, 0xFFFFFFF7, 0x00FFFFFF, + 0xFFFFFFFF, 0x000005FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x00000000, 0xFFFF0000, 0x001F3FFF, + 0xFFFFFFFF, 0x000003FF, 0x000000FE, 0x00000000, + 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFE0, 0x000FFFFF, 0x00000FE0, 0x00000000, + 0xFFFFFFF8, 0x0000C001, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x0000000F, 0xFC00E000, 0x00FFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x01E00000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0x0000003F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, + 0x00000040, 0x10000000, 0xFFFFFFFE, 0xFFFFFFFF, + 0x807FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0x87FFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00007FFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFDFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF0FFF, 0x00000C00, 0x00000000, 0x00004000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFC, 0x000FFFFF, 0x00000000, 0x00000000, + 0xFFFFFC00, 0xFFFF003F, 0x0000007F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x000001FF, 0x00000FF7, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xA0000000, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, + 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0xFFFEFFC0, + 0x3FFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF0000, 0x000003FD, 0x00000000, + 0x3FFFFFFF, 0xFFFFFFFF, 0x0000FF0F, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Lt.c b/lib/unictype/categ_Lt.c new file mode 100644 index 00000000..485acf66 --- /dev/null +++ b/lib/unictype/categ_Lt.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Lt table. */ +#include "categ_Lt.h" + +const uc_general_category_t UC_CATEGORY_Lt = + { UC_CATEGORY_MASK_Lt, 0, { &u_categ_Lt } }; diff --git a/lib/unictype/categ_Lt.h b/lib/unictype/categ_Lt.h new file mode 100644 index 00000000..227ff2af --- /dev/null +++ b/lib/unictype/categ_Lt.h @@ -0,0 +1,160 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[2 << 4]; + } +u_categ_Lt = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000920, 0x00040000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFF00FF00, 0x1000FF00, 0x00001000, 0x10000000 + } +}; diff --git a/lib/unictype/categ_Lu.c b/lib/unictype/categ_Lu.c new file mode 100644 index 00000000..26faae27 --- /dev/null +++ b/lib/unictype/categ_Lu.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Lu table. */ +#include "categ_Lu.h" + +const uc_general_category_t UC_CATEGORY_Lu = + { UC_CATEGORY_MASK_Lu, 0, { &u_categ_Lu } }; diff --git a/lib/unictype/categ_Lu.h b/lib/unictype/categ_Lu.h new file mode 100644 index 00000000..9674e161 --- /dev/null +++ b/lib/unictype/categ_Lu.h @@ -0,0 +1,331 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[12 << 4]; + } +u_categ_Lu = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, + 0x00000000, 0x00000000, 0x7F7FFFFF, 0x00000000, + 0x55555555, 0xAA555555, 0x555554AA, 0x2B555555, + 0xB1DBCED6, 0x11AED2D5, 0x4AAAA490, 0x55D25555, + 0x55555555, 0x6C055555, 0x0000557A, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00450000, + 0xFFFED740, 0x00000FFB, 0x551C8000, 0xE6905555, + 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x55555555, + 0x55555401, 0x55555555, 0x55552AAB, 0x55555555, + 0x55555555, 0xFFFE0005, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x55555555, 0x55555555, 0x55555555, 0x55555555, + 0x40155555, 0x55555555, 0x55555555, 0x55555555, + 0x3F00FF00, 0xFF00FF00, 0xAA003F00, 0x0000FF00, + 0x00000000, 0x0F000000, 0x0F000F00, 0x0F001F00, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3E273884, 0xC00F3D50, 0x00000020, 0x00000000, + 0x00000008, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x0024EA9D, + 0x55555555, 0x55555555, 0x55555555, 0x00000005, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x55555555, 0x00001554, + 0x00555555, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x55545554, 0x55555555, 0x6A005555, + 0x00000855, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x000000FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03FFFFFF, 0xFFF00000, 0x00003FFF, 0xFFFFFF00, + 0xD0000003, 0x003FDE64, 0xFFFF0000, 0x000003FF, + 0x1FDFE7B0, 0x7B000000, 0x0001FC5F, 0xFFFFF000, + 0x0000003F, 0x03FFFFFF, 0xFFF00000, 0x00003FFF, + 0xFFFFFF00, 0xF0000003, 0x003FFFFF, 0xFFFF0000, + 0x000003FF, 0xFFFFFF00, 0x00000001, 0x07FFFFFC, + 0xF0000000, 0x001FFFFF, 0xFFC00000, 0x00007FFF, + 0xFFFF0000, 0x000001FF, 0x00000400, 0x00000000 + } +}; diff --git a/lib/unictype/categ_M.c b/lib/unictype/categ_M.c new file mode 100644 index 00000000..ab7f149c --- /dev/null +++ b/lib/unictype/categ_M.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_M table. */ +#include "categ_M.h" + +const uc_general_category_t UC_CATEGORY_M = + { UC_CATEGORY_MASK_M, 0, { &u_categ_M } }; diff --git a/lib/unictype/categ_M.h b/lib/unictype/categ_M.h new file mode 100644 index 00000000..6e0b3772 --- /dev/null +++ b/lib/unictype/categ_M.h @@ -0,0 +1,528 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + /*unsigned*/ int level3[26 << 4]; + } +u_categ_M = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 0, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + 16 + 384 * sizeof (short) / sizeof (int) + 80, + 16 + 384 * sizeof (short) / sizeof (int) + 96, + 16 + 384 * sizeof (short) / sizeof (int) + 112, + 16 + 384 * sizeof (short) / sizeof (int) + 128, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 160, + 16 + 384 * sizeof (short) / sizeof (int) + 176, + 16 + 384 * sizeof (short) / sizeof (int) + 192, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 224, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 256, + 16 + 384 * sizeof (short) / sizeof (int) + 272, + 16 + 384 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 304, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 320, + 16 + 384 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 352, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 368, + 16 + 384 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 400, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000003F8, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, + 0x07FF0000, 0x00000000, 0x7FFFF800, 0x00010000, + 0x00000000, 0x00000000, 0xDFC00000, 0x00003D9F, + 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000E, 0xD0000000, 0x001E3FFF, 0x0000000C, + 0x0000000E, 0xD0000000, 0x0080399F, 0x0000000C, + 0x0000000E, 0xD0000000, 0x00023987, 0x00230000, + 0x0000000E, 0xD0000000, 0x00003BBF, 0x0000000C, + 0x0000000E, 0xD0000000, 0x00C0399F, 0x0000000C, + 0x00000004, 0xC0000000, 0x00803DC7, 0x00000000, + 0x0000000E, 0xC0000000, 0x00603DDF, 0x0000000C, + 0x0000000C, 0xD0000000, 0x00603DDF, 0x0000000C, + 0x0000000C, 0xC0000000, 0x00803DDF, 0x0000000C, + 0x0000000C, 0x00000000, 0xFF5F8400, 0x000C0000, + 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, + 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, + 0x03000000, 0xC2A00000, 0x00000000, 0xFFFE0000, + 0xFEFF00DF, 0x1FFFFFFF, 0x00000040, 0x00000000, + 0x00000000, 0x7FFFF800, 0xC3C00000, 0x001E3F9D, + 0x0000BFFC, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, + 0x00000000, 0xFFC00000, 0x200FFFFF, 0x00000000, + 0x00003800, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x0FFF0FFF, 0x00000000, 0x00000000, + 0x00000000, 0xFFFF0000, 0x00000301, 0x00000000, + 0x0F800000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000001F, 0xFFF00000, 0x0000001F, 0x000FF800, + 0x00000007, 0x000007FE, 0x00000000, 0x00000000, + 0x00000000, 0x00FFFFF0, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xC000007F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0x0001FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, + 0x06000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x30078000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000844, 0x000000F8, 0x00000000, 0x00000000, + 0x00000003, 0xFFF00000, 0x0000001F, 0x00000000, + 0x00000000, 0x00003FC0, 0x000FFF80, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x007FFE00, 0x00003008, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x40000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000FFFF, 0x0000007F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xF807E3E0, + 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000001C, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF + } +}; diff --git a/lib/unictype/categ_Mc.c b/lib/unictype/categ_Mc.c new file mode 100644 index 00000000..c54a565c --- /dev/null +++ b/lib/unictype/categ_Mc.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Mc table. */ +#include "categ_Mc.h" + +const uc_general_category_t UC_CATEGORY_Mc = + { UC_CATEGORY_MASK_Mc, 0, { &u_categ_Mc } }; diff --git a/lib/unictype/categ_Mc.h b/lib/unictype/categ_Mc.h new file mode 100644 index 00000000..dfddaa79 --- /dev/null +++ b/lib/unictype/categ_Mc.h @@ -0,0 +1,331 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[12 << 4]; + } +u_categ_Mc = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000008, 0xC0000000, 0x00001E01, 0x00000000, + 0x0000000C, 0xC0000000, 0x00801981, 0x00000000, + 0x00000008, 0xC0000000, 0x00000001, 0x00000000, + 0x00000008, 0xC0000000, 0x00001A01, 0x00000000, + 0x0000000C, 0x40000000, 0x00801981, 0x00000000, + 0x00000000, 0xC0000000, 0x00801DC6, 0x00000000, + 0x0000000E, 0x00000000, 0x0000001E, 0x00000000, + 0x0000000C, 0x40000000, 0x00600D9F, 0x00000000, + 0x0000000C, 0xC0000000, 0x00801DC1, 0x00000000, + 0x0000000C, 0x00000000, 0xFF038000, 0x000C0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xC0000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x19021800, 0x00C00000, 0x00003F9C, + 0x00009F98, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xC0400000, 0x000001BF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x01FB0E78, 0x00000000, 0x00000000, + 0x00000000, 0xFFFF0000, 0x00000301, 0x00000000, + 0x0E000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000010, 0xE8200000, 0x0000001B, 0x00000000, + 0x00000004, 0x000004C2, 0x00000000, 0x00000000, + 0x00000000, 0x00300FF0, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000098, 0x00000000, 0x00000000, + 0x00000003, 0xFFF00000, 0x0000000F, 0x00000000, + 0x00000000, 0x00000000, 0x000C0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00198000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0007E060, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Me.c b/lib/unictype/categ_Me.c new file mode 100644 index 00000000..00e2a012 --- /dev/null +++ b/lib/unictype/categ_Me.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Me table. */ +#include "categ_Me.h" + +const uc_general_category_t UC_CATEGORY_Me = + { UC_CATEGORY_MASK_Me, 0, { &u_categ_Me } }; diff --git a/lib/unictype/categ_Me.h b/lib/unictype/categ_Me.h new file mode 100644 index 00000000..7bf325ae --- /dev/null +++ b/lib/unictype/categ_Me.h @@ -0,0 +1,168 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[4 << 4]; + } +u_categ_Me = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000300, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x40000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xE0000000, 0x0000001D, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00070000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Mn.c b/lib/unictype/categ_Mn.c new file mode 100644 index 00000000..5990ee50 --- /dev/null +++ b/lib/unictype/categ_Mn.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Mn table. */ +#include "categ_Mn.h" + +const uc_general_category_t UC_CATEGORY_Mn = + { UC_CATEGORY_MASK_Mn, 0, { &u_categ_Mn } }; diff --git a/lib/unictype/categ_Mn.h b/lib/unictype/categ_Mn.h new file mode 100644 index 00000000..576279ac --- /dev/null +++ b/lib/unictype/categ_Mn.h @@ -0,0 +1,528 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + /*unsigned*/ int level3[26 << 4]; + } +u_categ_Mn = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 0, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + 16 + 384 * sizeof (short) / sizeof (int) + 80, + 16 + 384 * sizeof (short) / sizeof (int) + 96, + 16 + 384 * sizeof (short) / sizeof (int) + 112, + 16 + 384 * sizeof (short) / sizeof (int) + 128, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 160, + 16 + 384 * sizeof (short) / sizeof (int) + 176, + 16 + 384 * sizeof (short) / sizeof (int) + 192, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 224, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 256, + 16 + 384 * sizeof (short) / sizeof (int) + 272, + 16 + 384 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 304, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 320, + 16 + 384 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 352, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 368, + 16 + 384 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 400, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000000F8, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, + 0x07FF0000, 0x00000000, 0x7FFFF800, 0x00010000, + 0x00000000, 0x00000000, 0x9FC00000, 0x00003D9F, + 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000006, 0x10000000, 0x001E21FE, 0x0000000C, + 0x00000002, 0x10000000, 0x0000201E, 0x0000000C, + 0x00000006, 0x10000000, 0x00023986, 0x00230000, + 0x00000006, 0x10000000, 0x000021BE, 0x0000000C, + 0x00000002, 0x90000000, 0x0040201E, 0x0000000C, + 0x00000004, 0x00000000, 0x00002001, 0x00000000, + 0x00000000, 0xC0000000, 0x00603DC1, 0x0000000C, + 0x00000000, 0x90000000, 0x00003040, 0x0000000C, + 0x00000000, 0x00000000, 0x0000201E, 0x0000000C, + 0x00000000, 0x00000000, 0x005C0400, 0x00000000, + 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, + 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, + 0x03000000, 0x02A00000, 0x00000000, 0x7FFE0000, + 0xFEFF00DF, 0x1FFFFFFF, 0x00000040, 0x00000000, + 0x00000000, 0x66FDE000, 0xC3000000, 0x001E0001, + 0x00002064, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, + 0x00000000, 0x3F800000, 0x200FFE40, 0x00000000, + 0x00003800, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x0E040187, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x01800000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000F, 0x17D00000, 0x00000004, 0x000FF800, + 0x00000003, 0x0000033C, 0x00000000, 0x00000000, + 0x00000000, 0x00CFF000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xC000007F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x1FFF0000, 0x0001FFE2, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, + 0x06000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x30008000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000844, 0x00000060, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000010, 0x00000000, + 0x00000000, 0x00003FC0, 0x0003FF80, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00667E00, 0x00001008, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x40000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000FFFF, 0x0000007F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xF8000380, + 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000001C, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF + } +}; diff --git a/lib/unictype/categ_N.c b/lib/unictype/categ_N.c new file mode 100644 index 00000000..5aa92487 --- /dev/null +++ b/lib/unictype/categ_N.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_N table. */ +#include "categ_N.h" + +const uc_general_category_t UC_CATEGORY_N = + { UC_CATEGORY_MASK_N, 0, { &u_categ_N } }; diff --git a/lib/unictype/categ_N.h b/lib/unictype/categ_N.h new file mode 100644 index 00000000..9eb241d0 --- /dev/null +++ b/lib/unictype/categ_N.h @@ -0,0 +1,403 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[30 << 4]; + } +u_categ_N = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + 3 + 256 * sizeof (short) / sizeof (int) + 304, + 3 + 256 * sizeof (short) / sizeof (int) + 320, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 336, + 3 + 256 * sizeof (short) / sizeof (int) + 352, + 3 + 256 * sizeof (short) / sizeof (int) + 368, + 3 + 256 * sizeof (short) / sizeof (int) + 384, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 400, + 3 + 256 * sizeof (short) / sizeof (int) + 416, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 432, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 448, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 464, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, + 0x00000000, 0x720C0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x000003FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x03F0FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0007FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x7F00FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x003FFFC0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x000FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x000003FF, 0x00000000, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x1FFFFE00, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0001C000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03F10000, + 0x000003FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFF80000, 0xFFFFFFFF, + 0x000001E7, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x0FFFFFFF, 0x00000000, 0x00000000, 0xFFFFFC00, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, + 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000080, 0x070003FE, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003C0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000003FF, 0xFFFE0000, 0x00000000, + 0x000003FF, 0xFFFE0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x000003FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFF80, 0x000FFFFF, 0xFFFFFFFF, 0x01FFFFFF, + 0x00000400, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0000000F, 0x00000402, 0x00000000, + 0x00000000, 0x00000000, 0x003E0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03C00000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x000000FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0003FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF + } +}; diff --git a/lib/unictype/categ_Nd.c b/lib/unictype/categ_Nd.c new file mode 100644 index 00000000..f5ad3224 --- /dev/null +++ b/lib/unictype/categ_Nd.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Nd table. */ +#include "categ_Nd.h" + +const uc_general_category_t UC_CATEGORY_Nd = + { UC_CATEGORY_MASK_Nd, 0, { &u_categ_Nd } }; diff --git a/lib/unictype/categ_Nd.h b/lib/unictype/categ_Nd.h new file mode 100644 index 00000000..986cec7b --- /dev/null +++ b/lib/unictype/categ_Nd.h @@ -0,0 +1,351 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[17 << 4]; + } +u_categ_Nd = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x000003FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x000003FF, 0x00000000, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000003FF, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x000003FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF + } +}; diff --git a/lib/unictype/categ_Nl.c b/lib/unictype/categ_Nl.c new file mode 100644 index 00000000..6fe93707 --- /dev/null +++ b/lib/unictype/categ_Nl.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Nl table. */ +#include "categ_Nl.h" + +const uc_general_category_t UC_CATEGORY_Nl = + { UC_CATEGORY_MASK_Nl, 0, { &u_categ_Nl } }; diff --git a/lib/unictype/categ_Nl.h b/lib/unictype/categ_Nl.h new file mode 100644 index 00000000..9b4ce70c --- /dev/null +++ b/lib/unictype/categ_Nl.h @@ -0,0 +1,307 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[6 << 4]; + } +u_categ_Nl = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0001C000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x000001E7, 0x00000000, 0x00000000, 0x00000000, + 0x00000080, 0x070003FE, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000402, 0x00000000, + 0x00000000, 0x00000000, 0x003E0000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_No.c b/lib/unictype/categ_No.c new file mode 100644 index 00000000..055177f6 --- /dev/null +++ b/lib/unictype/categ_No.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_No table. */ +#include "categ_No.h" + +const uc_general_category_t UC_CATEGORY_No = + { UC_CATEGORY_MASK_No, 0, { &u_categ_No } }; diff --git a/lib/unictype/categ_No.h b/lib/unictype/categ_No.h new file mode 100644 index 00000000..b6ae929e --- /dev/null +++ b/lib/unictype/categ_No.h @@ -0,0 +1,355 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[18 << 4]; + } +u_categ_No = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x720C0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03F00000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00070000, + 0x00000000, 0x00000000, 0x00000000, 0x7F000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x003F0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000FFC00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x1FFFFE00, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, + 0x00000000, 0x00000000, 0x00000000, 0x03F10000, + 0x000003FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFF80000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x0FFFFFFF, 0x00000000, 0x00000000, 0xFFFFFC00, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, + 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003C0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000003FF, 0xFFFE0000, 0x00000000, + 0x000003FF, 0xFFFE0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFF80, 0x000FFFFF, 0x00000000, 0x01E00000, + 0x00000400, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0000000F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03C00000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x000000FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0003FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_P.c b/lib/unictype/categ_P.c new file mode 100644 index 00000000..e1dbbcdd --- /dev/null +++ b/lib/unictype/categ_P.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_P table. */ +#include "categ_P.h" + +const uc_general_category_t UC_CATEGORY_P = + { UC_CATEGORY_MASK_P, 0, { &u_categ_P } }; diff --git a/lib/unictype/categ_P.h b/lib/unictype/categ_P.h new file mode 100644 index 00000000..474eda9d --- /dev/null +++ b/lib/unictype/categ_P.h @@ -0,0 +1,403 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[30 << 4]; + } +u_categ_P = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + 3 + 256 * sizeof (short) / sizeof (int) + 304, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 320, + 3 + 256 * sizeof (short) / sizeof (int) + 336, + 3 + 256 * sizeof (short) / sizeof (int) + 352, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 368, + 3 + 256 * sizeof (short) / sizeof (int) + 384, + 3 + 256 * sizeof (short) / sizeof (int) + 400, + 3 + 256 * sizeof (short) / sizeof (int) + 416, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 432, + 3 + 256 * sizeof (short) / sizeof (int) + 448, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 464, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x8C00F7EE, 0xB8000001, 0x28000000, + 0x00000000, 0x88800802, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x40000000, + 0x00000080, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFC000000, 0x00000000, + 0x00000600, 0x40000000, 0x00000049, 0x00180000, + 0xC8003600, 0x00000000, 0x00000000, 0x00003C00, + 0x00000000, 0x00000000, 0x00100000, 0x00000000, + 0x00003FFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03800000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00010030, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00100000, + 0x00000000, 0x00000000, 0x0C008000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0007FFF0, 0x3C000000, 0x00000000, 0x00000000, + 0x00000020, 0x00000000, 0x001F0000, 0x00000000, + 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000001FE, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00006000, + 0x18000000, 0x00000000, 0x00000000, 0x00003800, + 0x00000000, 0x00600000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x07700000, 0x00000000, + 0x000007FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000030, 0x00000000, + 0x00000000, 0x00000000, 0xC0000000, 0x00000000, + 0xC0000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFC000000, 0x00000001, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xF8000000, 0x00000000, 0xC0000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFF0000, 0xFFFF00FF, 0x7FFBFFEF, 0x60000000, + 0x00006000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000600, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x003FFF00, + 0x00000000, 0x00000000, 0x00000060, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x01FFFFF8, 0x00000000, 0x0F000000, 0x30000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xDE000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x00017FFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFF3FF0E, 0x20010000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000E000, 0x00000000, 0x00000000, 0x40080000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00F00000, + 0x00000000, 0x00000000, 0x0000C000, 0x00000000, + 0x00000000, 0x0000C000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xF0000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xC0000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03FF0000, 0xFFFF0000, 0xFFF7FFFF, 0x00000D0B, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x8C00F7EE, 0xB8000001, 0xA8000000, 0x0000003F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000003, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x80000000, 0x00000000, 0x00010000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x80000000, 0x80000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x01FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000F0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Pc.c b/lib/unictype/categ_Pc.c new file mode 100644 index 00000000..06558ada --- /dev/null +++ b/lib/unictype/categ_Pc.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Pc table. */ +#include "categ_Pc.h" + +const uc_general_category_t UC_CATEGORY_Pc = + { UC_CATEGORY_MASK_Pc, 0, { &u_categ_Pc } }; diff --git a/lib/unictype/categ_Pc.h b/lib/unictype/categ_Pc.h new file mode 100644 index 00000000..e2e11363 --- /dev/null +++ b/lib/unictype/categ_Pc.h @@ -0,0 +1,164 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[3 << 4]; + } +u_categ_Pc = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32 + }, + { + 0x00000000, 0x00000000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x80000000, 0x00100001, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00180000, 0x0000E000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x80000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Pd.c b/lib/unictype/categ_Pd.c new file mode 100644 index 00000000..96516d59 --- /dev/null +++ b/lib/unictype/categ_Pd.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Pd table. */ +#include "categ_Pd.h" + +const uc_general_category_t UC_CATEGORY_Pd = + { UC_CATEGORY_MASK_Pd, 0, { &u_categ_Pd } }; diff --git a/lib/unictype/categ_Pd.h b/lib/unictype/categ_Pd.h new file mode 100644 index 00000000..91830943 --- /dev/null +++ b/lib/unictype/categ_Pd.h @@ -0,0 +1,180 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[7 << 4]; + } +u_categ_Pd = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 96 + }, + { + 0x00000000, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000400, 0x40000000, 0x00000000, 0x00000000, + 0x00000040, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003F0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x04800000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000000, 0x00010000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00060000, 0x01000000, 0x00000008, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00002000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Pe.c b/lib/unictype/categ_Pe.c new file mode 100644 index 00000000..53155325 --- /dev/null +++ b/lib/unictype/categ_Pe.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Pe table. */ +#include "categ_Pe.h" + +const uc_general_category_t UC_CATEGORY_Pe = + { UC_CATEGORY_MASK_Pe, 0, { &u_categ_Pe } }; diff --git a/lib/unictype/categ_Pe.h b/lib/unictype/categ_Pe.h new file mode 100644 index 00000000..a85dcae5 --- /dev/null +++ b/lib/unictype/categ_Pe.h @@ -0,0 +1,196 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[11 << 4]; + } +u_categ_Pe = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 112, + 2 + 128 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 144, + 2 + 128 * sizeof (short) / sizeof (int) + 160 + }, + { + 0x00000000, 0x00000200, 0x20000000, 0x20000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x28000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000040, 0x40000000, + 0x00004000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000400, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x002AAA00, + 0x00000000, 0x00000000, 0x00000040, 0x0000AA80, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x01555550, 0x00000000, 0x0A000000, 0x20000000, + 0x00000000, 0x000002A8, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xCAA2AA00, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x80000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x01000000, 0x55400000, 0x54000115, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000200, 0x20000000, 0x20000000, 0x00000009, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Pf.c b/lib/unictype/categ_Pf.c new file mode 100644 index 00000000..435e19f1 --- /dev/null +++ b/lib/unictype/categ_Pf.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Pf table. */ +#include "categ_Pf.h" + +const uc_general_category_t UC_CATEGORY_Pf = + { UC_CATEGORY_MASK_Pf, 0, { &u_categ_Pf } }; diff --git a/lib/unictype/categ_Pf.h b/lib/unictype/categ_Pf.h new file mode 100644 index 00000000..74aa60ad --- /dev/null +++ b/lib/unictype/categ_Pf.h @@ -0,0 +1,164 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[3 << 4]; + } +u_categ_Pf = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x08000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x22000000, 0x04000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x20002428, 0x00000002, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Pi.c b/lib/unictype/categ_Pi.c new file mode 100644 index 00000000..9ea1de1d --- /dev/null +++ b/lib/unictype/categ_Pi.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Pi table. */ +#include "categ_Pi.h" + +const uc_general_category_t UC_CATEGORY_Pi = + { UC_CATEGORY_MASK_Pi, 0, { &u_categ_Pi } }; diff --git a/lib/unictype/categ_Pi.h b/lib/unictype/categ_Pi.h new file mode 100644 index 00000000..7b8caf17 --- /dev/null +++ b/lib/unictype/categ_Pi.h @@ -0,0 +1,164 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[3 << 4]; + } +u_categ_Pi = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000800, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x99000000, 0x02000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10001214, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Po.c b/lib/unictype/categ_Po.c new file mode 100644 index 00000000..4c2e2cb1 --- /dev/null +++ b/lib/unictype/categ_Po.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Po table. */ +#include "categ_Po.h" + +const uc_general_category_t UC_CATEGORY_Po = + { UC_CATEGORY_MASK_Po, 0, { &u_categ_Po } }; diff --git a/lib/unictype/categ_Po.h b/lib/unictype/categ_Po.h new file mode 100644 index 00000000..37d7fb09 --- /dev/null +++ b/lib/unictype/categ_Po.h @@ -0,0 +1,387 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[26 << 4]; + } +u_categ_Po = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + 3 + 256 * sizeof (short) / sizeof (int) + 304, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 320, + 3 + 256 * sizeof (short) / sizeof (int) + 336, + 3 + 256 * sizeof (short) / sizeof (int) + 352, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 368, + 3 + 256 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 400, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x8C00D4EE, 0x10000001, 0x00000000, + 0x00000000, 0x80800002, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x40000000, + 0x00000080, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFC000000, 0x00000000, + 0x00000200, 0x00000000, 0x00000049, 0x00180000, + 0xC8003600, 0x00000000, 0x00000000, 0x00003C00, + 0x00000000, 0x00000000, 0x00100000, 0x00000000, + 0x00003FFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03800000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00010030, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00100000, + 0x00000000, 0x00000000, 0x0C008000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0007FFF0, 0x00000000, 0x00000000, 0x00000000, + 0x00000020, 0x00000000, 0x001F0000, 0x00000000, + 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000001FE, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00006000, + 0x00000000, 0x00000000, 0x00000000, 0x00003800, + 0x00000000, 0x00600000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x07700000, 0x00000000, + 0x000007BF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000030, 0x00000000, + 0x00000000, 0x00000000, 0xC0000000, 0x00000000, + 0xC0000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFC000000, 0x00000001, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xF8000000, 0x00000000, 0xC0000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00C00000, 0x79FF00FF, 0x7FEBFF8E, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xDE000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xCB7FC9C3, 0x00017C00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000E, 0x20000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000E000, 0x00000000, 0x00000000, 0x40080000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00F00000, + 0x00000000, 0x00000000, 0x0000C000, 0x00000000, + 0x00000000, 0x0000C000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xF0000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x027F0000, 0x00010000, 0x80F71E60, 0x00000D03, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x8C00D4EE, 0x10000001, 0x00000000, 0x00000032, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000003, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x80000000, 0x00000000, 0x00010000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x80000000, 0x80000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x01FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000F0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Ps.c b/lib/unictype/categ_Ps.c new file mode 100644 index 00000000..4e10039d --- /dev/null +++ b/lib/unictype/categ_Ps.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Ps table. */ +#include "categ_Ps.h" + +const uc_general_category_t UC_CATEGORY_Ps = + { UC_CATEGORY_MASK_Ps, 0, { &u_categ_Ps } }; diff --git a/lib/unictype/categ_Ps.h b/lib/unictype/categ_Ps.h new file mode 100644 index 00000000..25d10cf0 --- /dev/null +++ b/lib/unictype/categ_Ps.h @@ -0,0 +1,196 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[11 << 4]; + } +u_categ_Ps = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 112, + 2 + 128 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 144, + 2 + 128 * sizeof (short) / sizeof (int) + 160 + }, + { + 0x00000000, 0x00000100, 0x08000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x14000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x08000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x44000000, 0x00000000, 0x00000020, 0x20000000, + 0x00002000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00155500, + 0x00000000, 0x00000000, 0x00000020, 0x00005540, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00AAAAA8, 0x00000000, 0x05000000, 0x10000000, + 0x00000000, 0x00000154, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x25515500, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x40000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00800000, 0xAAA00000, 0x2A00008A, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000100, 0x08000000, 0x88000000, 0x00000004, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_S.c b/lib/unictype/categ_S.c new file mode 100644 index 00000000..4eb51f5f --- /dev/null +++ b/lib/unictype/categ_S.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_S table. */ +#include "categ_S.h" + +const uc_general_category_t UC_CATEGORY_S = + { UC_CATEGORY_MASK_S, 0, { &u_categ_S } }; diff --git a/lib/unictype/categ_S.h b/lib/unictype/categ_S.h new file mode 100644 index 00000000..e3638381 --- /dev/null +++ b/lib/unictype/categ_S.h @@ -0,0 +1,427 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[36 << 4]; + } +u_categ_S = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + 3 + 256 * sizeof (short) / sizeof (int) + 304, + 3 + 256 * sizeof (short) / sizeof (int) + 320, + 3 + 256 * sizeof (short) / sizeof (int) + 336, + 3 + 256 * sizeof (short) / sizeof (int) + 352, + 3 + 256 * sizeof (short) / sizeof (int) + 368, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 400, + 3 + 256 * sizeof (short) / sizeof (int) + 416, + 3 + 256 * sizeof (short) / sizeof (int) + 432, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 448, + 3 + 256 * sizeof (short) / sizeof (int) + 464, + 3 + 256 * sizeof (short) / sizeof (int) + 480, + 3 + 256 * sizeof (short) / sizeof (int) + 496, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 512, + 3 + 256 * sizeof (short) / sizeof (int) + 528, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 544, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 560, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x70000810, 0x40000000, 0x50000001, + 0x00000000, 0x0153D3FC, 0x00800000, 0x00800000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFC003C, 0xFFFFAFE0, + 0x00000000, 0x00000000, 0x00000000, 0x00200000, + 0x00000030, 0x00000000, 0x00000000, 0x00400000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000004, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000C9C0, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x60000200, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00400000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x040C0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00020000, + 0x00000000, 0x00000000, 0x00000000, 0x00010000, + 0x00000000, 0x00000000, 0x00000000, 0x07F80000, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00060000, + 0x00000000, 0x00000000, 0x00000000, 0x02000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x80000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFCF8000E, 0x01500000, 0x00000000, 0x00000000, + 0x00000000, 0xC0000000, 0x0000DFBF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000001, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x08000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000001, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x1FF007FE, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, + 0x00000000, 0x00000000, 0x00040010, 0x1C000000, + 0x00001C00, 0x003FFFFF, 0x00000000, 0x00000000, + 0xC1D0037B, 0x0C0042AF, 0x0000BC1F, 0x00000000, + 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFF9FF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF, + 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0x00000000, + 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x1FFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFF3DE, 0xFFFFFEFF, 0x7F47AFFF, 0x000000FE, + 0xFF100000, 0x7FFEFFFF, 0xFFFF179F, 0xFFFF003F, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFE000007, 0xFFFFFFFF, 0xF0FFFFFF, 0xCFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x001F1FFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000007E0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, + 0x000C0010, 0xC0C00001, 0x00000000, 0x00000000, + 0x18000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFC30000, 0x00000000, 0xFFFFFFFF, 0x0000000F, + 0x7FFFFFFF, 0xFFFFFC00, 0x0001000F, 0xFFFFFFFF, + 0xFFFFFC00, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFF0000, 0xFFFFFFFF, 0x0000007F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x007FFFFF, 0x00000003, 0x00000000, 0x00000000, + 0x00000600, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000F00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x30000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000274, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x70000810, 0x40000000, 0x50000001, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x30007F7F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000004, 0xFF800000, 0x00000000, 0xFE000000, + 0x0FFF03FF, 0x00000000, 0xFFFF0000, 0x1FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, + 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0x00001C1F, + 0xFFFFF018, 0xFFFFC3FF, 0x3FFFFFFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000023, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x08000002, 0x08000000, + 0x00200000, 0x00200000, 0x00008000, 0x00008000, + 0x00000200, 0x00000200, 0x00000008, 0x00000000, + 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Sc.c b/lib/unictype/categ_Sc.c new file mode 100644 index 00000000..171d5b81 --- /dev/null +++ b/lib/unictype/categ_Sc.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Sc table. */ +#include "categ_Sc.h" + +const uc_general_category_t UC_CATEGORY_Sc = + { UC_CATEGORY_MASK_Sc, 0, { &u_categ_Sc } }; diff --git a/lib/unictype/categ_Sc.h b/lib/unictype/categ_Sc.h new file mode 100644 index 00000000..c6690f11 --- /dev/null +++ b/lib/unictype/categ_Sc.h @@ -0,0 +1,188 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[9 << 4]; + } +u_categ_Sc = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 112, + 2 + 128 * sizeof (short) / sizeof (int) + 128 + }, + { + 0x00000000, 0x00000010, 0x00000000, 0x00000000, + 0x00000000, 0x0000003C, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000800, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000C0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00020000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x02000000, + 0x00000000, 0x80000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x08000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x003FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x10000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000200, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000010, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000063 + } +}; diff --git a/lib/unictype/categ_Sk.c b/lib/unictype/categ_Sk.c new file mode 100644 index 00000000..5f4d84e6 --- /dev/null +++ b/lib/unictype/categ_Sk.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Sk table. */ +#include "categ_Sk.h" + +const uc_general_category_t UC_CATEGORY_Sk = + { UC_CATEGORY_MASK_Sk, 0, { &u_categ_Sk } }; diff --git a/lib/unictype/categ_Sk.h b/lib/unictype/categ_Sk.h new file mode 100644 index 00000000..dc755970 --- /dev/null +++ b/lib/unictype/categ_Sk.h @@ -0,0 +1,176 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[6 << 4]; + } +u_categ_Sk = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80 + }, + { + 0x00000000, 0x00000000, 0x40000000, 0x00000001, + 0x00000000, 0x01108100, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFC003C, 0xFFFFAFE0, + 0x00000000, 0x00000000, 0x00000000, 0x00200000, + 0x00000030, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x18000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x007FFFFF, 0x00000003, 0x00000000, 0x00000000, + 0x00000600, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x40000000, 0x00000001, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000008 + } +}; diff --git a/lib/unictype/categ_Sm.c b/lib/unictype/categ_Sm.c new file mode 100644 index 00000000..158823fd --- /dev/null +++ b/lib/unictype/categ_Sm.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Sm table. */ +#include "categ_Sm.h" + +const uc_general_category_t UC_CATEGORY_Sm = + { UC_CATEGORY_MASK_Sm, 0, { &u_categ_Sm } }; diff --git a/lib/unictype/categ_Sm.h b/lib/unictype/categ_Sm.h new file mode 100644 index 00000000..ffb7cb3d --- /dev/null +++ b/lib/unictype/categ_Sm.h @@ -0,0 +1,331 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[12 << 4]; + } +u_categ_Sm = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x70000800, 0x00000000, 0x50000000, + 0x00000000, 0x00021000, 0x00800000, 0x00800000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00400000, + 0x000001C0, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00040010, 0x1C000000, + 0x00001C00, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000081F, 0x00000000, + 0x0C1F0000, 0x00004049, 0x0014C000, 0xFFF00000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000F00, 0x00000003, 0x00000000, 0x10000000, + 0xF8000000, 0x000FFFFF, 0xF0000000, 0x00000003, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00800000, 0x00000002, 0xFF000000, + 0x00000000, 0x00000000, 0x00000000, 0x00008000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF179F, 0xFFFF003F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFE000007, 0xFFFFFFFF, 0xF0FFFFFF, 0xCFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0xFFFF0000, 0x00001F9F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000074, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x70000800, 0x00000000, 0x50000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00001E04, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x08000002, 0x08000000, + 0x00200000, 0x00200000, 0x00008000, 0x00008000, + 0x00000200, 0x00000200, 0x00000008, 0x00000000 + } +}; diff --git a/lib/unictype/categ_So.c b/lib/unictype/categ_So.c new file mode 100644 index 00000000..a1f688b5 --- /dev/null +++ b/lib/unictype/categ_So.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_So table. */ +#include "categ_So.h" + +const uc_general_category_t UC_CATEGORY_So = + { UC_CATEGORY_MASK_So, 0, { &u_categ_So } }; diff --git a/lib/unictype/categ_So.h b/lib/unictype/categ_So.h new file mode 100644 index 00000000..f0fa49f0 --- /dev/null +++ b/lib/unictype/categ_So.h @@ -0,0 +1,403 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[30 << 4]; + } +u_categ_So = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + 3 + 256 * sizeof (short) / sizeof (int) + 304, + 3 + 256 * sizeof (short) / sizeof (int) + 320, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 352, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 368, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 384, + 3 + 256 * sizeof (short) / sizeof (int) + 400, + 3 + 256 * sizeof (short) / sizeof (int) + 416, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 432, + 3 + 256 * sizeof (short) / sizeof (int) + 448, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 464, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x004142C0, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000004, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000C000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x60000200, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00400000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x04000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00010000, + 0x00000000, 0x00000000, 0x00000000, 0x05F80000, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00060000, + 0x00000000, 0x00000000, 0x00000000, 0x02000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFCF8000E, 0x01500000, 0x00000000, 0x00000000, + 0x00000000, 0xC0000000, 0x0000DFBF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000001, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000001, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x1FF007FE, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC1D0037B, 0x0C0042AF, 0x0000B400, 0x00000000, + 0xF3E00000, 0xFFFFBFB6, 0xFFEB3FFF, 0x000FFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFF0FF, 0xFFFFF9FC, 0xFFFFFFFF, 0xEFFFFFFF, + 0x07FFFFFF, 0xFFF00000, 0x0FFFFFFF, 0x000000FC, + 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0x00000000, + 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFF7FFFFF, 0xFFFFFFFD, 0x00FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF7FFF, + 0x3FFFFFFF, 0x1FFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFF3DE, 0xFFFFFEFF, 0x7F47AFFF, 0x000000FE, + 0xFF100000, 0x7FFEFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x0000FFFF, 0x001F0060, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000007E0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, + 0x000C0010, 0xC0C00001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFC30000, 0x00000000, 0xFFFFFFFF, 0x0000000F, + 0x7FFFFFFF, 0xFFFFFC00, 0x0001000F, 0xFFFFFFFF, + 0xFFFFFC00, 0x0001FFFF, 0xFFFFFFFF, 0x7FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFF0000, 0xFFFFFFFF, 0x0000007F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000F00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x30006110, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000004, 0xFF800000, 0x00000000, 0xFE000000, + 0x0FFF03FF, 0x00000000, 0xFFFF0000, 0x1FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, + 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0x00001C1F, + 0xFFFFF018, 0xFFFFC3FF, 0x3FFFFFFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000023, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Z.c b/lib/unictype/categ_Z.c new file mode 100644 index 00000000..eb187d63 --- /dev/null +++ b/lib/unictype/categ_Z.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Z table. */ +#include "categ_Z.h" + +const uc_general_category_t UC_CATEGORY_Z = + { UC_CATEGORY_MASK_Z, 0, { &u_categ_Z } }; diff --git a/lib/unictype/categ_Z.h b/lib/unictype/categ_Z.h new file mode 100644 index 00000000..fa41dd60 --- /dev/null +++ b/lib/unictype/categ_Z.h @@ -0,0 +1,172 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_categ_Z = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00004000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000007FF, 0x00008300, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Zl.c b/lib/unictype/categ_Zl.c new file mode 100644 index 00000000..4a6e3df3 --- /dev/null +++ b/lib/unictype/categ_Zl.c @@ -0,0 +1,30 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +static bool +uc_is_category_Zl (ucs4_t uc) +{ + return (uc == 0x2028); +} + +const uc_general_category_t UC_CATEGORY_Zl = + { UC_CATEGORY_MASK_Zl, 1, { &uc_is_category_Zl } }; diff --git a/lib/unictype/categ_Zl.h b/lib/unictype/categ_Zl.h new file mode 100644 index 00000000..1ddb0077 --- /dev/null +++ b/lib/unictype/categ_Zl.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_categ_Zl = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000100, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Zp.c b/lib/unictype/categ_Zp.c new file mode 100644 index 00000000..23f682cd --- /dev/null +++ b/lib/unictype/categ_Zp.c @@ -0,0 +1,30 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +static bool +uc_is_category_Zp (ucs4_t uc) +{ + return (uc == 0x2029); +} + +const uc_general_category_t UC_CATEGORY_Zp = + { UC_CATEGORY_MASK_Zp, 1, { &uc_is_category_Zp } }; diff --git a/lib/unictype/categ_Zp.h b/lib/unictype/categ_Zp.h new file mode 100644 index 00000000..3ee4da9d --- /dev/null +++ b/lib/unictype/categ_Zp.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_categ_Zp = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_Zs.c b/lib/unictype/categ_Zs.c new file mode 100644 index 00000000..c9971577 --- /dev/null +++ b/lib/unictype/categ_Zs.c @@ -0,0 +1,27 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_categ_Zs table. */ +#include "categ_Zs.h" + +const uc_general_category_t UC_CATEGORY_Zs = + { UC_CATEGORY_MASK_Zs, 0, { &u_categ_Zs } }; diff --git a/lib/unictype/categ_Zs.h b/lib/unictype/categ_Zs.h new file mode 100644 index 00000000..7dbf3424 --- /dev/null +++ b/lib/unictype/categ_Zs.h @@ -0,0 +1,172 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_categ_Zs = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00004000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000007FF, 0x00008000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/categ_and.c b/lib/unictype/categ_and.c new file mode 100644 index 00000000..2101f94e --- /dev/null +++ b/lib/unictype/categ_and.c @@ -0,0 +1,45 @@ +/* Categories of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +uc_general_category_t +uc_general_category_and (uc_general_category_t category1, + uc_general_category_t category2) +{ + uint32_t bitmask; + uc_general_category_t result; + + bitmask = category1.bitmask & category2.bitmask; + + if (bitmask == category1.bitmask) + return category1; + + if (bitmask == category2.bitmask) + return category2; + + if (bitmask == 0) + return _UC_CATEGORY_NONE; + + result.bitmask = bitmask; + result.generic = 1; + result.lookup.lookup_fn = &uc_is_general_category_withtable; + return result; +} diff --git a/lib/unictype/categ_and_not.c b/lib/unictype/categ_and_not.c new file mode 100644 index 00000000..6cc27596 --- /dev/null +++ b/lib/unictype/categ_and_not.c @@ -0,0 +1,42 @@ +/* Categories of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +uc_general_category_t +uc_general_category_and_not (uc_general_category_t category1, + uc_general_category_t category2) +{ + uint32_t bitmask; + uc_general_category_t result; + + bitmask = category1.bitmask & ~category2.bitmask; + + if (bitmask == category1.bitmask) + return category1; + + if (bitmask == 0) + return _UC_CATEGORY_NONE; + + result.bitmask = bitmask; + result.generic = 1; + result.lookup.lookup_fn = &uc_is_general_category_withtable; + return result; +} diff --git a/lib/unictype/categ_byname.c b/lib/unictype/categ_byname.c new file mode 100644 index 00000000..a175dd15 --- /dev/null +++ b/lib/unictype/categ_byname.c @@ -0,0 +1,105 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +uc_general_category_t +uc_general_category_byname (const char *category_name) +{ + if (category_name[0] != '\0' + && (category_name[1] == '\0' || category_name[2] == '\0')) + switch (category_name[0]) + { + case 'L': + switch (category_name[1]) + { + case '\0': return UC_CATEGORY_L; + case 'u': return UC_CATEGORY_Lu; + case 'l': return UC_CATEGORY_Ll; + case 't': return UC_CATEGORY_Lt; + case 'm': return UC_CATEGORY_Lm; + case 'o': return UC_CATEGORY_Lo; + } + break; + case 'M': + switch (category_name[1]) + { + case '\0': return UC_CATEGORY_M; + case 'n': return UC_CATEGORY_Mn; + case 'c': return UC_CATEGORY_Mc; + case 'e': return UC_CATEGORY_Me; + } + break; + case 'N': + switch (category_name[1]) + { + case '\0': return UC_CATEGORY_N; + case 'd': return UC_CATEGORY_Nd; + case 'l': return UC_CATEGORY_Nl; + case 'o': return UC_CATEGORY_No; + } + break; + case 'P': + switch (category_name[1]) + { + case '\0': return UC_CATEGORY_P; + case 'c': return UC_CATEGORY_Pc; + case 'd': return UC_CATEGORY_Pd; + case 's': return UC_CATEGORY_Ps; + case 'e': return UC_CATEGORY_Pe; + case 'i': return UC_CATEGORY_Pi; + case 'f': return UC_CATEGORY_Pf; + case 'o': return UC_CATEGORY_Po; + } + break; + case 'S': + switch (category_name[1]) + { + case '\0': return UC_CATEGORY_S; + case 'm': return UC_CATEGORY_Sm; + case 'c': return UC_CATEGORY_Sc; + case 'k': return UC_CATEGORY_Sk; + case 'o': return UC_CATEGORY_So; + } + break; + case 'Z': + switch (category_name[1]) + { + case '\0': return UC_CATEGORY_Z; + case 's': return UC_CATEGORY_Zs; + case 'l': return UC_CATEGORY_Zl; + case 'p': return UC_CATEGORY_Zp; + } + break; + case 'C': + switch (category_name[1]) + { + case '\0': return UC_CATEGORY_C; + case 'c': return UC_CATEGORY_Cc; + case 'f': return UC_CATEGORY_Cf; + case 's': return UC_CATEGORY_Cs; + case 'o': return UC_CATEGORY_Co; + case 'n': return UC_CATEGORY_Cn; + } + break; + } + /* Invalid category name. */ + return _UC_CATEGORY_NONE; +} diff --git a/lib/unictype/categ_name.c b/lib/unictype/categ_name.c new file mode 100644 index 00000000..10421efc --- /dev/null +++ b/lib/unictype/categ_name.c @@ -0,0 +1,77 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +static const char u_category_name[30][3] = +{ + "Lu", "Ll", "Lt", "Lm", "Lo", "Mn", "Mc", "Me", "Nd", "Nl", + "No", "Pc", "Pd", "Ps", "Pe", "Pi", "Pf", "Po", "Sm", "Sc", + "Sk", "So", "Zs", "Zl", "Zp", "Cc", "Cf", "Cs", "Co", "Cn" +}; + +const char * +uc_general_category_name (uc_general_category_t category) +{ + uint32_t bitmask = category.bitmask; + /* bitmask should consist of a single bit. */ + if (bitmask != 0) + { + if ((bitmask & (bitmask - 1)) == 0) + { + int bit; + /* Take log2 using a variant of Robert Harley's method. + Found by Bruno Haible 1996. */ + uint32_t n = bitmask; + static const char ord2_tab[64] = + { + -1, 0, 1, 12, 2, 6, -1, 13, 3, -1, 7, -1, -1, -1, -1, 14, + 10, 4, -1, -1, 8, -1, -1, 25, -1, -1, -1, -1, -1, 21, 27, 15, + 31, 11, 5, -1, -1, -1, -1, -1, 9, -1, -1, 24, -1, -1, 20, 26, + 30, -1, -1, -1, -1, 23, -1, 19, 29, -1, 22, 18, 28, 17, 16, -1 + }; + n += n << 4; + n += n << 6; + n = (n << 16) - n; + bit = ord2_tab[n >> 26]; + + if (bit < sizeof (u_category_name) / sizeof (u_category_name[0])) + return u_category_name[bit]; + } + else + { + if (bitmask == UC_CATEGORY_MASK_L) + return "L"; + if (bitmask == UC_CATEGORY_MASK_M) + return "M"; + if (bitmask == UC_CATEGORY_MASK_N) + return "N"; + if (bitmask == UC_CATEGORY_MASK_P) + return "P"; + if (bitmask == UC_CATEGORY_MASK_S) + return "S"; + if (bitmask == UC_CATEGORY_MASK_Z) + return "Z"; + if (bitmask == UC_CATEGORY_MASK_C) + return "C"; + } + } + return NULL; +} diff --git a/lib/unictype/categ_none.c b/lib/unictype/categ_none.c new file mode 100644 index 00000000..9e33ab93 --- /dev/null +++ b/lib/unictype/categ_none.c @@ -0,0 +1,30 @@ +/* Categories of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +static bool +always_false (ucs4_t uc, uint32_t bitmask) +{ + return false; +} + +const uc_general_category_t _UC_CATEGORY_NONE = + { 0, 1, { &always_false } }; diff --git a/lib/unictype/categ_of.c b/lib/unictype/categ_of.c new file mode 100644 index 00000000..85b694f4 --- /dev/null +++ b/lib/unictype/categ_of.c @@ -0,0 +1,81 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_category table. */ +#include "categ_of.h" + +static inline int +lookup_withtable (ucs4_t uc) +{ + unsigned int index1 = uc >> category_header_0; + if (index1 < category_header_1) + { + int lookup1 = u_category.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> category_header_2) & category_header_3; + int lookup2 = u_category.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = ((uc & category_header_4) + lookup2) * 5; + /* level3 contains 5-bit values, packed into 16-bit words. */ + unsigned int lookup3 = + ((u_category.level3[index3>>4] + | (u_category.level3[(index3>>4)+1] << 16)) + >> (index3 % 16)) + & 0x1f; + + return lookup3; + } + } + return 29; /* = log2(UC_CATEGORY_MASK_Cn) */ + } + return -1; +} + +bool +uc_is_general_category_withtable (ucs4_t uc, uint32_t bitmask) +{ + int bit = lookup_withtable (uc); + + if (bit >= 0) + return ((bitmask >> bit) & 1); + else + return false; +} + +uc_general_category_t +uc_general_category (ucs4_t uc) +{ + int bit = lookup_withtable (uc); + uc_general_category_t result; + + if (bit >= 0) + { + result.bitmask = 1 << bit; + result.generic = 1; + result.lookup.lookup_fn = &uc_is_general_category_withtable; + return result; + } + else + return _UC_CATEGORY_NONE; +} diff --git a/lib/unictype/categ_of.h b/lib/unictype/categ_of.h new file mode 100644 index 00000000..3df7e0c9 --- /dev/null +++ b/lib/unictype/categ_of.h @@ -0,0 +1,1088 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Categories of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define category_header_0 16 +#define category_header_1 17 +#define category_header_2 7 +#define category_header_3 511 +#define category_header_4 127 +static const +struct + { + int level1[17]; + short level2[5 << 9]; + unsigned short level3[148 * 40 + 1]; + } +u_category = +{ + { + 0, 512, 1024, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1536, 2048, + 2048 + }, + { + 0, 128, 256, 384, 512, 640, 768, 896, + 1024, 1152, 1280, 1408, 1536, 1664, 1792, 1920, + -1, -1, 2048, 2176, 2304, 2432, 2560, 2688, + 2816, 2944, 3072, 3200, 3328, 3456, 3584, 3712, + 3840, 3968, 4096, 4224, 4352, 4480, 4608, 4736, + 4864, 4992, 4992, 4992, 5120, 5248, 5376, 5504, + 5632, 5760, 5888, 6016, 6144, -1, 6272, 6400, + 6528, -1, 6656, 6784, 6912, 7040, 7168, 7296, + 7424, 7552, 7680, 7808, 7936, 7936, 8064, 8192, + 8320, 8448, 8576, 8704, 8832, 8960, 9088, 9216, + 8576, 8576, 7936, 9344, 7936, 7936, 9472, -1, + 9600, 9728, 9856, 9984, 10112, 10240, 8576, 10368, + 10496, 10624, 10752, 10880, 11008, 11136, 8576, 8576, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 11264, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 11392, + 11520, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 11648, 4992, 4992, 11776, 11904, 12032, 12160, + 12288, 12416, 12544, -1, 12672, -1, -1, -1, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 12800, + 12928, 12928, 12928, 12928, 12928, 12928, 12928, 12928, + 12928, 12928, 12928, 12928, 12928, 12928, 12928, 12928, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 4992, 4992, 13184, 13312, 13440, 13568, + 4992, 4992, 13696, 13824, 13952, 14080, 14208, 14336, + 14464, 14592, 14720, 14848, -1, 14976, 15104, 15232, + 15360, 15488, -1, -1, -1, -1, -1, -1, + 15616, -1, 15744, -1, 15872, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 4992, 4992, 4992, 4992, 4992, 4992, 16000, -1, + 16128, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 8576, 16256, 16384, 16512, 16640, -1, 16768, -1, + 16896, 17024, 17152, 17280, 17408, 17536, 17664, 17792, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 17920, 18048, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 4992, 4992, 4992, + 4992, 4992, 4992, 4992, 4992, 18176, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 4992, 4992, 4992, 4992, 18304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 18432, -1, 18560, 18688, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 13056, + 13056, 13056, 13056, 13056, 13056, 13056, 13056, 18816 + }, + { + 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, + 0x9ce7, 0xce73, 0xc636, 0x6338, 0xcd8c, 0x1945, 0x8c59, 0x2108, + 0x1084, 0x0842, 0x28c5, 0x8ca5, 0x0011, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x1680, 0x5d1d, 0x8434, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x2684, 0xcc9d, + 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, + 0x9ce7, 0xce73, 0xce36, 0x6739, 0xb4ad, 0x2786, 0xa575, 0x2a55, + 0x4345, 0x548d, 0xa805, 0x8a94, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0090, 0x0000, 0x0800, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2190, 0x1084, 0x0842, + 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, + 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, + 0x0200, 0x0108, 0x1004, 0x0040, 0x0401, 0x4010, 0x2100, 0x0080, + 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, + 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x0008, 0x1004, 0x0840, + 0x8001, 0x0200, 0x0100, 0x1000, 0x0002, 0x0400, 0x0200, 0x2000, + 0x0084, 0x0040, 0x8020, 0x0200, 0x0100, 0x0084, 0x0002, 0x0001, + 0x4010, 0x2000, 0x0204, 0x0842, 0x1084, 0x4402, 0x2200, 0x1100, + 0x0040, 0x0401, 0x4010, 0x0100, 0x1004, 0x0802, 0x8020, 0x0200, + 0x2008, 0x0080, 0x0802, 0x8801, 0x0200, 0x2000, 0x0080, 0x0802, + 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, + 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, + 0x4210, 0x2108, 0x1000, 0x0800, 0x0401, 0x0000, 0x2008, 0x0080, + 0x0802, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4240, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8c63, + 0xc631, 0x6318, 0x318c, 0x18c6, 0x5063, 0xe94a, 0x6318, 0x318c, + 0x18c6, 0x5063, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x8c63, 0x2831, + 0x94a5, 0x3a52, 0xa0e8, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x8020, 0x2830, 0xbd08, 0x108f, 0xec42, + 0xf7bd, 0x294e, 0x0088, 0x0e80, 0x003a, 0x0001, 0x0000, 0x0000, + 0x0000, 0x0000, 0x7400, 0x0000, 0x0000, 0x1000, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0042, 0x0021, 0x4200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, + 0x2008, 0x0080, 0x0802, 0x8421, 0x8200, 0x0104, 0x1080, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8020, 0x0200, + 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, + 0xd420, 0x4a52, 0xe729, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, + 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, + 0x0200, 0x2008, 0x0080, 0x0802, 0x0400, 0x4010, 0x0100, 0x1004, + 0x0840, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, + 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, + 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, + 0x0080, 0x0802, 0x8020, 0x7bd0, 0xbdef, 0xdef7, 0xef7b, 0x001d, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x7de8, 0x18c4, 0x8c63, 0x843d, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x3d08, 0xdeb2, 0xef7b, 0x94bd, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x2b0a, 0x94b1, 0x4a58, 0xbd2c, 0xdef7, + 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0xde90, 0xef7b, 0x9084, 0x7b18, 0xbdef, 0xdef7, 0xef7b, + 0x6b5a, 0xbbdd, 0x3294, 0x19c6, 0xad63, 0x94a5, 0x4a52, 0xa529, + 0xd894, 0x8c7b, 0x109d, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1083, 0x0842, 0x8421, 0x5290, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xe94a, 0x2108, 0x1084, + 0x0842, 0x18c5, 0x2123, 0x1085, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x4912, 0xa529, 0x5294, 0x29f4, 0x94a5, 0xc652, + 0xa528, 0x5296, 0x210a, 0x2108, 0x1084, 0x0842, 0x4211, 0x256a, + 0xc631, 0x6318, 0x318c, 0x18c6, 0xd763, 0x10a4, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xde94, + 0x2109, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x4842, 0xa529, 0x5294, 0x294a, 0xf485, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x2108, 0x1084, 0x0842, 0x4211, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x5290, 0x294a, 0x94a5, 0x4632, 0x318d, 0xde8e, 0xef7b, + 0x14bd, 0x0843, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x5ef4, 0x3188, 0x94a6, 0x4a52, 0xc529, 0x6318, + 0xef4a, 0x94a4, 0x7a52, 0x84ef, 0x4210, 0x2108, 0x9484, 0x2312, + 0x0842, 0x8421, 0x4210, 0x9071, 0x7bde, 0xbdef, 0x4277, 0x2108, + 0x18bd, 0x09d3, 0x8421, 0x4210, 0x277a, 0x77a4, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x93a4, + 0x3bde, 0x8421, 0x5ef4, 0x3188, 0x94a6, 0x7a52, 0xa637, 0x6377, + 0xe90a, 0xf7bd, 0x7bde, 0xbd37, 0x4ef7, 0x2748, 0x9484, 0x3bd2, + 0x0842, 0x8421, 0x4210, 0xcc84, 0x94a9, 0x4a52, 0xded5, 0xef7b, + 0x14bd, 0x09d3, 0x8421, 0xde90, 0x277b, 0x77a4, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x13a4, + 0x09d2, 0x84e9, 0x5ef4, 0x31ba, 0x94a6, 0x7bde, 0xa52f, 0x52f7, + 0xef4a, 0xf4bd, 0x7bde, 0x9def, 0x4210, 0xe93a, 0xf7bd, 0x3bde, + 0x0842, 0x8421, 0x4210, 0x10a5, 0x4a42, 0xbdef, 0xdef7, 0xef7b, + 0x14bd, 0x09d3, 0x8421, 0x4210, 0x2748, 0x7484, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x13a4, + 0x09d2, 0x8421, 0x5ef4, 0x3188, 0x94a6, 0x4a52, 0xc52f, 0x6374, + 0xef4a, 0xf7a4, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x9484, 0x3bd2, + 0x0842, 0x8421, 0x4210, 0xf67d, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x18bd, 0x09d3, 0x8421, 0x4210, 0x277a, 0x77a4, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x13a4, + 0x09d2, 0x8421, 0x5ef4, 0x2988, 0x94a6, 0x7a52, 0xa637, 0x6377, + 0xef4a, 0xf7bd, 0x7bde, 0xbd31, 0x4ef7, 0x2748, 0x9484, 0x3bd2, + 0x0842, 0x8421, 0x4210, 0xf495, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x17bd, 0x09d2, 0x8421, 0xde90, 0x213b, 0x13a4, 0x4842, 0x9def, + 0x4e90, 0x213a, 0x77bd, 0x7a42, 0x84ef, 0xde90, 0x213b, 0x1084, + 0x0842, 0x8421, 0xdef4, 0x31bb, 0x98c5, 0xbbde, 0xa631, 0x631b, + 0xef4a, 0xf7a4, 0x7bde, 0xbd37, 0xdef7, 0xef7b, 0xf7bd, 0x3bde, + 0x0842, 0x8421, 0x4210, 0xa94a, 0x6b5a, 0x75ad, 0xded6, 0xef7b, + 0x18dd, 0x09d3, 0x8421, 0x4210, 0x213a, 0x13a4, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x1084, + 0x09d2, 0x8421, 0xdef4, 0x2949, 0x18c5, 0x7a63, 0xa529, 0x5297, + 0xef4a, 0xf7bd, 0x4bde, 0x84e9, 0xdef4, 0xef7b, 0x9484, 0x3bd2, + 0x0842, 0x8421, 0x4210, 0xf7bd, 0x7bde, 0x4aef, 0xa529, 0xaa94, + 0x1bbd, 0x09d3, 0x8421, 0x4210, 0x213a, 0x13a4, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x1084, + 0x09d2, 0x8421, 0x5ef4, 0x2988, 0x18c6, 0x7a63, 0xa631, 0x531b, + 0xef4a, 0xf7bd, 0x8dde, 0xbde9, 0xdef7, 0xe93b, 0x9484, 0x3bd2, + 0x0842, 0x8421, 0x4210, 0xd6bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1bbd, 0x09d3, 0x8421, 0x4210, 0x213a, 0x13a4, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, 0x2108, 0x1084, + 0x0842, 0x8421, 0xdef4, 0x3189, 0x94a6, 0xba52, 0xa631, 0x631b, + 0xef4a, 0xf7bd, 0x7bde, 0xbd37, 0xdef7, 0xef7b, 0x9484, 0x3bd2, + 0x0842, 0x8421, 0x4210, 0x294a, 0x54a5, 0xbdef, 0x4212, 0x2108, + 0x1bbd, 0x09d3, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, + 0x4213, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x7484, + 0x0842, 0x8421, 0xd210, 0xef49, 0x1084, 0x0842, 0xbde9, 0xde97, + 0x377b, 0x94c6, 0x7a52, 0xc6e9, 0x6318, 0x318c, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0x1bbd, 0x7b13, 0xbdef, 0xdef7, 0xef7b, + 0x109d, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x10a4, + 0x4a52, 0xa529, 0xde94, 0x9f7b, 0x1084, 0xc842, 0xa528, 0x5294, + 0x894a, 0x2108, 0x1084, 0x0842, 0xd8c5, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x909d, 0x7a4e, 0xa427, 0xde93, 0xef49, 0xf7bd, 0x084e, 0x9d21, + 0x4210, 0x2108, 0x109d, 0x49d2, 0xbd27, 0xd213, 0x2109, 0x10a4, + 0x4a52, 0xa529, 0x52f4, 0xef48, 0x1084, 0xfa42, 0xa5e8, 0x5294, + 0xef4a, 0x2108, 0x1084, 0x0842, 0x4ef5, 0xef48, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0xd6a4, 0x631a, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6b5a, 0xa5ad, + 0x5ad4, 0xad6b, 0x2108, 0x1084, 0x0842, 0xa529, 0x5294, 0x294a, + 0x4b55, 0xb52d, 0xd734, 0x319c, 0x1084, 0x0842, 0x9d21, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0xef7a, 0x94bd, 0x4a52, 0xa529, 0x5294, 0x314a, + 0x94a5, 0x6252, 0x8429, 0xd210, 0xef7b, 0x94a5, 0x4a52, 0xbd29, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0xad7a, 0xd6b5, 0x6b5a, 0xb5a9, 0x5ad6, + 0xad7b, 0xc631, 0x7b18, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x6310, 0x294a, 0x94c5, + 0x4a52, 0xa629, 0x6314, 0x214a, 0x2108, 0x1084, 0x0842, 0x18c5, + 0x8c63, 0x1084, 0x8842, 0xa531, 0x4210, 0x2948, 0x1885, 0x0863, + 0xc631, 0x6318, 0x210c, 0x94a4, 0x0852, 0x8421, 0x4210, 0x2108, + 0x1484, 0x4a63, 0xc631, 0x6318, 0x310a, 0x2108, 0x1084, 0x0842, + 0xdef5, 0xad7b, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0xbdef, 0xdef7, + 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x3890, 0xef7a, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, 0x277b, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x9084, 0x7bde, 0x84ef, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x4213, + 0xef48, 0x1084, 0x0842, 0xa4e9, 0x4213, 0xef48, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0xa421, 0x4213, 0xef48, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x13a4, + 0x4842, 0x84ef, 0x4210, 0xe908, 0x13a4, 0x4842, 0x84ef, 0x4210, + 0x2108, 0x1084, 0x0842, 0x84e9, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x13a4, 0x4842, 0x84ef, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0xde90, 0x2f7b, 0xc635, 0x6318, + 0x518c, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0xef7a, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xd6b5, 0x6b5a, 0xb5ad, + 0xdef6, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x7a42, 0xbdef, 0xdef7, 0xef7b, + 0x109d, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2462, 0x1084, 0x0842, 0xbde9, 0xdef7, 0xef7b, + 0x1096, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0xe690, 0xef7a, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x1890, 0x4a63, 0xf7a9, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x213a, 0x9484, 0x7a52, 0xbdef, + 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x9484, + 0x6252, 0xbdec, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x9484, 0x7bd2, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, + 0x8421, 0x4210, 0x213a, 0x97a4, 0x7bd2, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0xb5a2, 0xa529, 0x5294, 0x318a, 0x18c6, 0x4c63, 0xa631, 0x5294, + 0x294a, 0x94a5, 0x6312, 0x311c, 0x49c6, 0xef4a, 0x2108, 0x1084, + 0x0842, 0xdef5, 0xef7b, 0x294a, 0x94a5, 0x4a52, 0xdef5, 0xef7b, + 0xc631, 0x2318, 0x318b, 0x52c6, 0xed8a, 0x2108, 0x1084, 0x0842, + 0xdef5, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x9084, 0x0841, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0xde90, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0xef7a, 0x14a5, 0x8c63, 0xc529, 0xd318, 0xef7b, 0x14c6, + 0x8c63, 0xa631, 0xd294, 0xef7b, 0xf7b5, 0x231e, 0x0842, 0x8421, + 0x4210, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0xef48, 0x1084, 0x7a42, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, 0xef7b, 0x18c6, + 0x8c63, 0xc631, 0x6318, 0x318c, 0x1086, 0x0842, 0xc621, 0xdef4, + 0xef7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0x8c7b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xc529, + 0xd318, 0x8c7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x94a5, 0x0862, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x4c52, 0xa529, 0x5314, 0x318c, 0x14c6, 0x0863, 0x8421, 0xd210, + 0xef7b, 0x2108, 0x1084, 0x0842, 0x18c5, 0x8c63, 0xd6b1, 0x6b5a, + 0xb5ad, 0x52d6, 0x294a, 0x94a5, 0x6b52, 0xb5ad, 0x5ad6, 0xef7b, + 0x18a5, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x94c4, 0x8a52, 0xa531, 0xde98, 0x213b, 0x2108, + 0x1084, 0x0842, 0xdef5, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x8c62, 0xc631, 0x5318, 0x294a, 0x94a5, + 0x4c62, 0xbd29, 0x18f7, 0x8c63, 0x2108, 0x1084, 0x0842, 0xdef5, + 0x2109, 0x2108, 0x1084, 0x0842, 0x4211, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x6321, 0x318c, 0x8c46, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x3084, 0x18c6, 0x8c63, + 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, + 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8463, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2308, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x3184, 0x18c6, 0x8c63, 0xc631, 0x6318, 0x318c, 0x18c6, 0x8c63, + 0xc631, 0x6318, 0x318c, 0x18c6, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xbde9, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0x297b, + 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, + 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, + 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, + 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, + 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, + 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x4200, 0x2108, + 0x1084, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, + 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, + 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, + 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, + 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x8421, 0x4210, 0x00ef, + 0x0000, 0xef40, 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x8421, + 0x4210, 0x0008, 0x0000, 0x0000, 0x8421, 0x4210, 0x00ef, 0x0000, + 0xef40, 0x8421, 0x4210, 0x1d08, 0xd074, 0x0741, 0x8421, 0x4210, + 0x0008, 0x0000, 0x0000, 0x8421, 0x4210, 0x2108, 0x1084, 0xef42, + 0x8421, 0x4210, 0x4208, 0x2108, 0x1084, 0x8421, 0x4210, 0x4208, + 0x2108, 0x1084, 0x8421, 0x4210, 0x4208, 0x2108, 0x1084, 0x8421, + 0x7a10, 0x0008, 0x2000, 0xa068, 0x8694, 0x7a10, 0x0008, 0x2000, + 0xa528, 0x8421, 0x7bd0, 0x0008, 0xd000, 0xa529, 0x8421, 0x4210, + 0x0008, 0x0000, 0xa528, 0x87bd, 0x7a10, 0x0008, 0x2000, 0xed28, + 0x5ad6, 0xad6b, 0xd6b5, 0xad5a, 0xd6b5, 0x318c, 0x58c6, 0x0f8c, + 0xf7b6, 0x7b60, 0xc631, 0x6318, 0x178c, 0xad6b, 0xb6b5, 0xc631, + 0x6318, 0xf18c, 0x18c1, 0x5c63, 0xc62b, 0x9b28, 0x318b, 0x18c6, + 0x8c63, 0xca31, 0x62b8, 0x318c, 0x18c6, 0xb463, 0x6b5a, 0x7bad, + 0xbdef, 0xad6b, 0xd6b5, 0xf42a, 0x94ae, 0x4a52, 0x2949, 0x0b9b, + 0x294a, 0x94a5, 0x4a52, 0x2949, 0xeb9b, 0x8c63, 0x7a31, 0xbdef, + 0xdef7, 0xef7b, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, + 0x6739, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x39ce, 0x9ca7, 0x4a73, + 0xa529, 0x5294, 0x294a, 0xf7a5, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x82b5, 0x6b5a, 0xb505, 0x0006, 0x0840, 0x8000, 0x4150, 0x15ad, + 0x0000, 0xad40, 0xd6b5, 0x2a0a, 0xa0a8, 0x0002, 0x0d40, 0x0000, + 0x0810, 0x2421, 0x1ad4, 0x0002, 0x4a52, 0x4129, 0x2108, 0x5954, + 0xa86b, 0x77bd, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0x2529, 0x5210, 0xa94a, 0xdef7, 0xef7b, 0x4a52, 0x6b29, 0xb5ad, + 0x594a, 0xad6b, 0x56b2, 0xab59, 0xb5ac, 0x5ad6, 0xacab, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0x94ab, 0xcab5, 0x6b2a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0xa52a, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0xd6b5, 0x6b5a, 0x52ad, 0x594a, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd652, 0x6b5a, 0xb5ad, 0x5ab9, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x2ad6, 0xad6b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x2956, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0x6b59, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x2ad6, 0x94a5, 0xd652, 0x6b5a, + 0xbdad, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0xdef7, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xded6, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0x5529, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0xa52a, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb595, 0x5ad6, 0xad6b, 0xd655, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0x52ad, 0x294a, 0x94a5, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0x956b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xef6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xef7b, 0xd6b5, 0x7bda, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0xd6bd, 0x7b5a, 0xb5ad, 0x5ef6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbdad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, + 0xaf6b, 0xd6b5, 0x7bde, 0xb5ed, 0x5ad6, 0xed6b, 0xd6bd, 0x6b5a, + 0xcdad, 0xd735, 0x735c, 0x35cd, 0x9cd7, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x7b55, 0xb5ef, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6bd, + 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, 0x4a52, 0x9b29, 0x5293, 0x2eca, + 0xef7b, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x6529, + 0xcd73, 0xd735, 0x735c, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0xca52, 0x9ae6, 0xae6b, 0xe6b9, 0x6b9a, 0xb9ae, 0x9ae6, 0x4e6b, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0xcd94, 0x2735, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xd94a, 0x949c, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0x6b29, 0x5295, 0x294a, + 0xef7b, 0xd6b5, 0x7b5a, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe800, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0xe842, 0x0020, 0x4200, + 0x0100, 0x1004, 0x0000, 0x803d, 0x4010, 0x2108, 0x1084, 0xef46, + 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, + 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, + 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, + 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x6a10, + 0xb5ad, 0xded6, 0xef7b, 0xf7bd, 0x7bde, 0x3def, 0x18c6, 0x8c55, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0xbdef, 0xdef7, 0xef7b, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x4842, + 0xbdef, 0xdef7, 0x1f7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, + 0xdef7, 0xef7b, 0x1084, 0x0842, 0x84e9, 0x4210, 0xe908, 0x1084, + 0x0842, 0x84e9, 0x4210, 0xe908, 0x1084, 0x0842, 0x84e9, 0x4210, + 0xe908, 0x1084, 0x0842, 0x84e9, 0x4210, 0xe908, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x3e31, 0x60f8, 0xf18c, 0xf8c1, 0x8c60, 0xc631, 0x6318, 0x3164, + 0xf8b2, 0x8c60, 0x360f, 0x5cd7, 0xcd73, 0x18c5, 0x1c63, 0xf7b1, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5af6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xbdef, 0xdef7, 0xef7b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, + 0xc636, 0x0758, 0xcd49, 0xd735, 0x735c, 0xd5cd, 0x5cda, 0xcd73, + 0xc735, 0x739a, 0xa535, 0x5294, 0x294a, 0x5295, 0x294a, 0x8c6c, + 0x4631, 0x29ad, 0x41a5, 0xad62, 0x109d, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbde9, + 0x4a14, 0x20c7, 0x108c, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x3890, 0x20c6, + 0xf7bd, 0x09de, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0x109d, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0xe908, 0x2ab5, 0x54a5, 0xb5ad, + 0x5ad6, 0xad6b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0xbd21, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, + 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xed6b, 0x294a, 0x94a5, 0x4a52, 0x5ad5, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xbdef, 0xdef7, + 0xef7b, 0x2955, 0x94a5, 0x4a52, 0xa529, 0x5294, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, + 0x294a, 0x94a5, 0x4a52, 0x5ad5, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x2955, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xed6b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x4842, 0xbdef, 0xdef7, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7bd2, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0642, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0xef7a, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x3210, 0x8c62, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x2108, 0x1084, 0x0842, 0xd211, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x8020, 0x0200, 0x2008, 0x0080, + 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x83bd, 0x0200, + 0x2008, 0x0080, 0x2902, 0x9ce7, 0x7bd8, 0xbdef, 0x5ef7, 0x1c4a, + 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0xbd08, + 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x631d, + 0x318c, 0x18c6, 0x8294, 0x0200, 0x2008, 0x0080, 0x0802, 0x8021, + 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, + 0x0802, 0x8020, 0x0200, 0x2008, 0x0080, 0x0802, 0x8020, 0x0200, + 0x2008, 0x0080, 0x0802, 0x8423, 0x4210, 0x0108, 0x1004, 0x0800, + 0x8020, 0x0200, 0x8308, 0x1052, 0xef7a, 0xf7bd, 0x7bde, 0xbdef, + 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0x4277, 0x2108, + 0x1484, 0x4842, 0x8421, 0x4290, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x4a63, 0xb531, 0xdad6, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x6312, 0xbd8c, 0xdef7, 0xef7b, + 0x10c6, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x8c62, 0xc631, 0x6318, 0x318c, 0x18c6, 0x7a53, 0xbdef, 0xdef7, + 0x8c7b, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x2108, 0x1084, 0x0842, 0x4211, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x4842, 0xa529, 0x5294, 0x8c4a, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xa529, 0x5294, + 0x294a, 0x18a5, 0x7bd3, 0xbdef, 0xdef7, 0x8f7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0xa421, 0x5294, 0x314a, 0x14a6, + 0x4a63, 0xbde9, 0xdef7, 0xef7b, 0x9084, 0x0842, 0x8421, 0x5210, + 0xef4c, 0x2108, 0x1084, 0x0842, 0x1ef5, 0x8c63, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x7bd2, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, + 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, + 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, + 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, + 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, + 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0xde90, 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0xdef4, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x8421, 0x4210, 0xbde8, 0xdef7, 0xef7b, 0xf7bd, 0x4210, 0xbd08, + 0xdef7, 0x2149, 0x1084, 0x0842, 0x4421, 0x4212, 0x2108, 0x1084, + 0x0842, 0x84e9, 0x4210, 0xe93a, 0x7484, 0x3a42, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0xf484, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0x77bd, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x7348, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x13bd, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0xbd21, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0x1084, 0x0842, 0x8421, 0x3210, 0xef6b, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0xc631, 0x6318, 0x2e6c, + 0xdef6, 0xef7b, 0x94a5, 0x4a52, 0xbde9, 0xdef7, 0xef7b, 0xb191, + 0x9ab5, 0xae6b, 0xe6b9, 0x6b9a, 0xb9ae, 0x62e6, 0x2e6c, 0x18c6, + 0x5ad7, 0xc631, 0x631e, 0xac8c, 0xe6b9, 0x8b9a, 0x4a31, 0xa526, + 0x71ec, 0xd8c6, 0xef7b, 0x1084, 0x3a42, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0xd77a, + 0xc63d, 0x6338, 0xcd8c, 0x1945, 0x8c59, 0x2108, 0x1084, 0x0842, + 0x28c5, 0x8ca5, 0x0011, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1680, 0x5d1d, 0x8434, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x2684, 0x6c9d, 0x362e, 0x2317, + 0x8421, 0x4210, 0x2108, 0x1083, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x18c8, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0xe908, 0x13bd, 0x0842, 0xbd21, 0x4213, + 0x2108, 0x13bd, 0x0842, 0xbd21, 0x4213, 0xef7a, 0x4a73, 0xe75a, + 0x55ec, 0x294a, 0xed6b, 0xf7bd, 0x7bde, 0x5def, 0x5d6b, 0xef6b, + 0x1084, 0x0842, 0x8421, 0xd210, 0x2109, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x84e9, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4e90, 0x2748, 0x1084, 0x0842, 0x8421, 0x4210, + 0xef48, 0x1084, 0x0842, 0x8421, 0x4210, 0xef48, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0xde90, 0xef7b, + 0xd631, 0x7bde, 0x4a57, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x7bd5, 0xb5af, 0x5ad6, 0xad6b, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x9494, 0xaa52, 0x5ad6, 0xad6b, + 0xd6b5, 0x6b5a, 0xb5ad, 0xdeaa, 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, + 0xdad6, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xef4b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0xef7a, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0xf7a4, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0xe908, 0x294a, 0x7bd5, 0xbdef, 0xdef7, 0xef7b, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1124, 0x0842, 0x8421, 0xdea4, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x8f48, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x7bd2, 0x84ef, 0x4210, + 0x2108, 0xa531, 0x5294, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x2100, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0xef48, 0x2108, 0x1084, 0x0842, 0xdef5, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x4842, 0xa4ef, 0x4213, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x4842, 0xa427, 0x4ef7, 0x277a, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x8842, 0x4a52, + 0xdef5, 0x8f7b, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0xdef4, 0x8f7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x94a4, 0x4bd2, 0xbde9, 0x5ef7, 0x294a, 0x1084, 0x09d2, 0x9d21, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x7bd2, 0xa5ef, 0xde94, 0x2f7b, 0x294a, 0x94a5, 0xbd52, 0xdef7, + 0xef7b, 0xc631, 0x6318, 0xb18c, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0xe908, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xc631, 0x7bd8, 0xbdef, 0xdef7, 0xef7b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbdef, 0xdef7, 0xef7b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x8d5a, + 0xa529, 0x5ad4, 0x318d, 0x18c6, 0xb5ad, 0x5ad6, 0x52eb, 0x294a, + 0x94a5, 0x4b5a, 0xa529, 0x5294, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5296, 0xad4a, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xef6b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0x96b5, 0x6a52, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xbded, 0xdef7, 0xef7b, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0xf54a, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0840, 0x8421, 0x7a10, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x8400, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x0084, 0x003a, 0x83bd, 0x01de, 0x1de8, 0x0000, 0x003a, 0x0000, + 0x4000, 0x2108, 0xd0f4, 0x0843, 0x8421, 0x43d0, 0x2108, 0x1084, + 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4000, 0x0007, 0xde80, 0x0001, 0x0000, 0x3a00, 0x0000, + 0x0000, 0x087a, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x0008, 0x0074, 0xe800, 0x0000, 0x3a00, 0xbde8, 0x0003, + 0x0000, 0x87a0, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x0084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x4000, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0840, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x8400, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x0084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x4000, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, + 0x1084, 0x0842, 0x8421, 0x4210, 0x00ef, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x8640, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1904, 0x0842, 0x0021, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1900, 0x0842, + 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x6410, 0x2108, + 0x0084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x6400, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x9042, 0x8421, 0x0210, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x9000, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, + 0x8421, 0x4210, 0x4108, 0x1086, 0x0842, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x1086, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x0421, 0x4219, 0x2108, 0xd080, + 0x423b, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0xdad6, 0xef7b, 0xd6b5, + 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, + 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x7bda, 0xbdef, + 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, + 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, 0x4210, + 0x2108, 0x1084, 0x0842, 0xbde9, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x1084, 0x0842, 0x8421, 0x4210, 0x2108, 0x1084, 0x0842, 0x8421, + 0x4210, 0xef48, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, + 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, + 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, + 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0xf75d, 0x7bde, 0xbdef, 0xdef7, 0xef7b, 0xf7bd, 0x7bde, 0xbdef, + 0xdef7, 0xef7b, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, + 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, + 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, + 0x5ad6, 0xad6b, 0xd6b5, 0x6b5a, 0xb5ad, 0x5ad6, 0xad6b, 0xd6b5, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, + 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, + 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, + 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, + 0x294a, 0x94a5, 0x4a52, 0xa529, 0x5294, 0x294a, 0x94a5, 0x4a52, + 0xa529, 0x5294, 0x294a, 0xf7bd, 0x7bde, 0xbdef, 0xdef7, 0xef7b, + 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, + 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, + 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, + 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, + 0x9ce7, 0xce73, 0xe739, 0x739c, 0x39ce, 0x9ce7, 0xce73, 0xef79, + 0x0000 + } +}; diff --git a/lib/unictype/categ_or.c b/lib/unictype/categ_or.c new file mode 100644 index 00000000..9864210c --- /dev/null +++ b/lib/unictype/categ_or.c @@ -0,0 +1,42 @@ +/* Categories of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +uc_general_category_t +uc_general_category_or (uc_general_category_t category1, + uc_general_category_t category2) +{ + uint32_t bitmask; + uc_general_category_t result; + + bitmask = category1.bitmask | category2.bitmask; + + if (bitmask == category1.bitmask) + return category1; + + if (bitmask == category2.bitmask) + return category2; + + result.bitmask = bitmask; + result.generic = 1; + result.lookup.lookup_fn = &uc_is_general_category_withtable; + return result; +} diff --git a/lib/unictype/categ_test.c b/lib/unictype/categ_test.c new file mode 100644 index 00000000..e46f0f65 --- /dev/null +++ b/lib/unictype/categ_test.c @@ -0,0 +1,32 @@ +/* Categories of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +bool +uc_is_general_category (ucs4_t uc, uc_general_category_t category) +{ + if (category.generic) + return category.lookup.lookup_fn (uc, category.bitmask); + else + return bitmap_lookup (category.lookup.table, uc); +} diff --git a/lib/unictype/combining.c b/lib/unictype/combining.c new file mode 100644 index 00000000..d2e33e63 --- /dev/null +++ b/lib/unictype/combining.c @@ -0,0 +1,47 @@ +/* Combining classes of Unicode characters. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_combclass table. */ +#include "combining.h" + +int +uc_combining_class (ucs4_t uc) +{ + unsigned int index1 = uc >> combclass_header_0; + if (index1 < combclass_header_1) + { + int lookup1 = u_combclass.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> combclass_header_2) & combclass_header_3; + int lookup2 = u_combclass.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc & combclass_header_4); + unsigned int lookup3 = u_combclass.level3[lookup2 + index3]; + + return lookup3; + } + } + } + return 0; +} diff --git a/lib/unictype/combining.h b/lib/unictype/combining.h new file mode 100644 index 00000000..5f1c8be5 --- /dev/null +++ b/lib/unictype/combining.h @@ -0,0 +1,839 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Combining class of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define combclass_header_0 16 +#define combclass_header_1 2 +#define combclass_header_2 7 +#define combclass_header_3 511 +#define combclass_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + unsigned char level3[43 << 7]; + } +u_combclass = +{ + { 0, 512 }, + { + -1, -1, -1, -1, -1, -1, 0, -1, + -1, 128, -1, 256, 384, 512, 640, 768, + -1, -1, 896, 1024, 1024, 1024, 1024, 1152, + 1280, 1024, 1152, 1408, 1536, 1664, 1792, 1920, + 2048, 2176, -1, -1, -1, -1, 2304, -1, + -1, -1, -1, -1, -1, -1, 2432, 2560, + -1, 2688, 2816, -1, 2944, -1, 3072, 3200, + 3328, -1, -1, 3456, -1, -1, -1, -1, + -1, 3584, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3712, -1, -1, -1, -1, + 3840, 3968, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4096, -1, -1, -1, + 4224, 4352, 4480, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 4608, -1, + -1, -1, -1, -1, 4736, -1, -1, -1, + -1, -1, -1, 4864, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 4992, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 5120, 5248, 5376, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 232, 220, 220, + 220, 220, 232, 216, 220, 220, 220, 220, + 220, 202, 202, 220, 220, 220, 220, 202, + 202, 220, 220, 220, 220, 220, 220, 220, + 220, 220, 220, 220, 1, 1, 1, 1, + 1, 220, 220, 220, 220, 230, 230, 230, + 230, 230, 230, 230, 230, 240, 230, 220, + 220, 220, 230, 230, 230, 220, 220, 0, + 230, 230, 230, 220, 220, 220, 220, 230, + 232, 220, 220, 230, 233, 234, 234, 233, + 234, 234, 233, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 230, 230, 230, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 220, 230, 230, 230, 230, 220, 230, + 230, 230, 222, 220, 230, 230, 230, 230, + 230, 230, 220, 220, 220, 220, 220, 220, + 230, 230, 220, 230, 230, 222, 228, 230, + 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 19, 20, 21, 22, 0, 23, + 0, 24, 25, 0, 230, 220, 0, 18, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 230, 230, 230, 230, 230, 230, + 30, 31, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 27, 28, 29, 30, 31, + 32, 33, 34, 230, 230, 220, 220, 230, + 230, 230, 230, 230, 220, 230, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 230, 230, + 230, 230, 230, 230, 230, 0, 0, 230, + 230, 230, 230, 220, 230, 0, 0, 230, + 230, 0, 220, 230, 230, 220, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 36, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 220, 230, 230, 220, 230, 230, 220, + 220, 220, 230, 220, 220, 230, 220, 230, + 230, 230, 220, 230, 220, 230, 220, 230, + 220, 230, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 230, 230, 230, 230, 230, + 230, 230, 220, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 230, 220, 230, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 84, 91, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 103, 103, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 107, 107, 107, 107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 118, 118, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 122, 122, 122, 122, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 220, 220, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 0, 220, + 0, 216, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 129, 130, 0, 132, 0, 0, 0, + 0, 0, 130, 130, 130, 130, 0, 0, + 130, 0, 230, 230, 9, 0, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 220, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, + 0, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 228, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 222, 230, 220, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 230, + 220, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 230, 220, 230, 230, 230, + 230, 230, 230, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 220, 230, 230, 230, 230, 230, + 230, 230, 220, 230, 230, 234, 214, 220, + 202, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 230, 220, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 1, 1, 230, 230, 230, 230, + 1, 1, 1, 230, 230, 0, 0, 0, + 0, 230, 0, 0, 0, 1, 1, 230, + 220, 230, 1, 1, 220, 220, 220, 220, + 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 218, 228, 232, 222, 224, 224, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 8, 8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 230, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 220, 220, 220, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 230, 230, 230, 230, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 220, 0, 230, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 230, 1, 220, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 216, 216, 1, + 1, 1, 0, 0, 0, 226, 216, 216, + 216, 216, 216, 0, 0, 0, 0, 0, + 0, 0, 0, 220, 220, 220, 220, 220, + 220, 220, 220, 0, 0, 230, 230, 230, + 230, 230, 220, 220, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 230, 230, 230, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 230, 230, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + } +}; diff --git a/lib/unictype/ctype_alnum.c b/lib/unictype/ctype_alnum.c new file mode 100644 index 00000000..464fbb0d --- /dev/null +++ b/lib/unictype/ctype_alnum.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_alnum table. */ +#include "ctype_alnum.h" + +bool +uc_is_alnum (ucs4_t uc) +{ + return bitmap_lookup (&u_is_alnum, uc); +} diff --git a/lib/unictype/ctype_alnum.h b/lib/unictype/ctype_alnum.h new file mode 100644 index 00000000..c27ae78b --- /dev/null +++ b/lib/unictype/ctype_alnum.h @@ -0,0 +1,588 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[3]; + short level2[3 << 7]; + /*unsigned*/ int level3[44 << 4]; + } +u_is_alnum = +{ + { 3 }, + { + 4 * sizeof (int) / sizeof (short) + 0, + 4 * sizeof (int) / sizeof (short) + 128, + 4 * sizeof (int) / sizeof (short) + 256 + }, + { + 4 + 384 * sizeof (short) / sizeof (int) + 0, + 4 + 384 * sizeof (short) / sizeof (int) + 16, + 4 + 384 * sizeof (short) / sizeof (int) + 32, + 4 + 384 * sizeof (short) / sizeof (int) + 48, + 4 + 384 * sizeof (short) / sizeof (int) + 64, + 4 + 384 * sizeof (short) / sizeof (int) + 80, + 4 + 384 * sizeof (short) / sizeof (int) + 96, + 4 + 384 * sizeof (short) / sizeof (int) + 112, + 4 + 384 * sizeof (short) / sizeof (int) + 128, + 4 + 384 * sizeof (short) / sizeof (int) + 144, + 4 + 384 * sizeof (short) / sizeof (int) + 160, + 4 + 384 * sizeof (short) / sizeof (int) + 176, + 4 + 384 * sizeof (short) / sizeof (int) + 192, + 4 + 384 * sizeof (short) / sizeof (int) + 208, + 4 + 384 * sizeof (short) / sizeof (int) + 224, + 4 + 384 * sizeof (short) / sizeof (int) + 240, + 4 + 384 * sizeof (short) / sizeof (int) + 256, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 272, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 352, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 368, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 384, + 4 + 384 * sizeof (short) / sizeof (int) + 400, + 4 + 384 * sizeof (short) / sizeof (int) + 416, + 4 + 384 * sizeof (short) / sizeof (int) + 432, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 448, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 464, + 4 + 384 * sizeof (short) / sizeof (int) + 480, + 4 + 384 * sizeof (short) / sizeof (int) + 496, + 4 + 384 * sizeof (short) / sizeof (int) + 512, + 4 + 384 * sizeof (short) / sizeof (int) + 528, + 4 + 384 * sizeof (short) / sizeof (int) + 544, + 4 + 384 * sizeof (short) / sizeof (int) + 560, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 576, + 4 + 384 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 608, + 4 + 384 * sizeof (short) / sizeof (int) + 624, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 640, + 4 + 384 * sizeof (short) / sizeof (int) + 656, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 672, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 688, + -1, + -1 + }, + { + 0x00000000, 0x03FF0000, 0x07FFFFFE, 0x07FFFFFE, + 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, + 0x00000000, 0x00000000, 0x00000020, 0x3CDF0000, + 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0x027FFFFF, 0xFFFFFFFE, + 0x000000FF, 0x00000000, 0xFFFF0000, 0x000707FF, + 0x00000000, 0xFFFFFFFE, 0x000007FF, 0xFFFEC3FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9FFFC060, + 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0002003F, 0xFFFFFFFF, 0x043007FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xF806FFC3, + 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x0003FFC3, + 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001CFFC0, + 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x0000FFC3, + 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x0002FFC3, + 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x0000FFC0, + 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x0000FFC3, + 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x0000FFC3, + 0xFFFDDFE0, 0x23FFFDFF, 0x00000000, 0xFC00FFC3, + 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, + 0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FBF, 0x00000000, + 0xFEF02596, 0x200DECAE, 0x33FF005F, 0x00000000, + 0x00000001, 0x000003FF, 0xFFFFFEFF, 0x00001FFF, + 0x00000F00, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x800007FF, 0x3C3F03FF, 0xFFE1C062, + 0x03FF4003, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, + 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007F9FFF, + 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, + 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, + 0xFFFFFFFF, 0x000FFFFF, 0x10800000, 0x000003FF, + 0x03FF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0x000005FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x00000000, 0xFFFFFFC0, 0x001F3FFF, + 0xFFFFFFFF, 0x000003FF, 0x03FF00FE, 0x00000000, + 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFE0, 0x000FFFFF, 0x03FF0FE0, 0x00000000, + 0xFFFFFFF8, 0x03FFC001, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x0000000F, 0xFFFFE3FF, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, + 0x00000000, 0x00000000, 0x00000000, 0x80020000, + 0x001F0000, 0x00000000, 0x00000000, 0x00000000, + 0x3E2FFC84, 0xF3FFBF50, 0x000043E0, 0xFFFFFFFF, + 0x000001FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, + 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, + 0x00000000, 0x00008000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000000E0, 0x1F3E03FE, 0xFFFFFFFE, 0xFFFFFFFF, + 0xE07FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00007FFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0x00000FFF, 0xFFFFFFFF, 0x80007FFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000019FF, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFC, 0x000FFFFF, 0x03FF0000, 0x00000000, + 0xFFFFFFFF, 0xFFFF003F, 0x0000007F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x000001FF, 0x03FF0FF7, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xA0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, + 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, + 0x03FF0000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, + 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, + 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, + 0xFFFFFDFF, 0xFFFFFDFF, 0xFFFFCFF7, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/ctype_alpha.c b/lib/unictype/ctype_alpha.c new file mode 100644 index 00000000..4ca6e996 --- /dev/null +++ b/lib/unictype/ctype_alpha.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_alpha table. */ +#include "ctype_alpha.h" + +bool +uc_is_alpha (ucs4_t uc) +{ + return bitmap_lookup (&u_is_alpha, uc); +} diff --git a/lib/unictype/ctype_alpha.h b/lib/unictype/ctype_alpha.h new file mode 100644 index 00000000..087c7d5b --- /dev/null +++ b/lib/unictype/ctype_alpha.h @@ -0,0 +1,588 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[3]; + short level2[3 << 7]; + /*unsigned*/ int level3[44 << 4]; + } +u_is_alpha = +{ + { 3 }, + { + 4 * sizeof (int) / sizeof (short) + 0, + 4 * sizeof (int) / sizeof (short) + 128, + 4 * sizeof (int) / sizeof (short) + 256 + }, + { + 4 + 384 * sizeof (short) / sizeof (int) + 0, + 4 + 384 * sizeof (short) / sizeof (int) + 16, + 4 + 384 * sizeof (short) / sizeof (int) + 32, + 4 + 384 * sizeof (short) / sizeof (int) + 48, + 4 + 384 * sizeof (short) / sizeof (int) + 64, + 4 + 384 * sizeof (short) / sizeof (int) + 80, + 4 + 384 * sizeof (short) / sizeof (int) + 96, + 4 + 384 * sizeof (short) / sizeof (int) + 112, + 4 + 384 * sizeof (short) / sizeof (int) + 128, + 4 + 384 * sizeof (short) / sizeof (int) + 144, + 4 + 384 * sizeof (short) / sizeof (int) + 160, + 4 + 384 * sizeof (short) / sizeof (int) + 176, + 4 + 384 * sizeof (short) / sizeof (int) + 192, + 4 + 384 * sizeof (short) / sizeof (int) + 208, + 4 + 384 * sizeof (short) / sizeof (int) + 224, + 4 + 384 * sizeof (short) / sizeof (int) + 240, + 4 + 384 * sizeof (short) / sizeof (int) + 256, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 272, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 352, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 368, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 384, + 4 + 384 * sizeof (short) / sizeof (int) + 400, + 4 + 384 * sizeof (short) / sizeof (int) + 416, + 4 + 384 * sizeof (short) / sizeof (int) + 432, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 448, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 464, + 4 + 384 * sizeof (short) / sizeof (int) + 480, + 4 + 384 * sizeof (short) / sizeof (int) + 496, + 4 + 384 * sizeof (short) / sizeof (int) + 512, + 4 + 384 * sizeof (short) / sizeof (int) + 528, + 4 + 384 * sizeof (short) / sizeof (int) + 544, + 4 + 384 * sizeof (short) / sizeof (int) + 560, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 576, + 4 + 384 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 608, + 4 + 384 * sizeof (short) / sizeof (int) + 624, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 640, + 4 + 384 * sizeof (short) / sizeof (int) + 656, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 672, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 688, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, + 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, + 0x00000000, 0x00000000, 0x00000020, 0x3CDF0000, + 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0x027FFFFF, 0xFFFFFFFE, + 0x000000FF, 0x00000000, 0xFFFF0000, 0x000707FF, + 0x00000000, 0xFFFFFFFE, 0x000007FF, 0xFFFEC3FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9FFFC060, + 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0002003F, 0xFFFFFFFF, 0x043007FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xF806FFC3, + 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x0003FFC3, + 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001CFFC0, + 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x0000FFC3, + 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x0002FFC3, + 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x0000FFC0, + 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x0000FFC3, + 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x0000FFC3, + 0xFFFDDFE0, 0x23FFFDFF, 0x00000000, 0xFC00FFC3, + 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, + 0xFFFFFFFE, 0x07FF7FFF, 0x03FF7FBF, 0x00000000, + 0xFEF02596, 0x200DECAE, 0x33FF005F, 0x00000000, + 0x00000001, 0x000003FF, 0xFFFFFEFF, 0x00001FFF, + 0x00000F00, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x800007FF, 0x3C3F03FF, 0xFFE1C062, + 0x03FF4003, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, + 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007F9FFF, + 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, + 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, + 0xFFFFFFFF, 0x000FFFFF, 0x10800000, 0x000003FF, + 0x03FF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0x000005FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x00000000, 0xFFFFFFC0, 0x001F3FFF, + 0xFFFFFFFF, 0x000003FF, 0x03FF00FE, 0x00000000, + 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFE0, 0x000FFFFF, 0x03FF0FE0, 0x00000000, + 0xFFFFFFF8, 0x03FFC001, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x0000000F, 0xFFFFE3FF, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, + 0x00000000, 0x00000000, 0x00000000, 0x80020000, + 0x001F0000, 0x00000000, 0x00000000, 0x00000000, + 0x3E2FFC84, 0xF3FFBF50, 0x000043E0, 0xFFFFFFFF, + 0x000001FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, + 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, + 0x00000000, 0x00008000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000000E0, 0x1F3E03FE, 0xFFFFFFFE, 0xFFFFFFFF, + 0xE07FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00007FFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0x00000FFF, 0xFFFFFFFF, 0x80007FFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000019FF, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFC, 0x000FFFFF, 0x03FF0000, 0x00000000, + 0xFFFFFFFF, 0xFFFF003F, 0x0000007F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x000001FF, 0x03FF0FF7, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xA0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, + 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, + 0x03FF0000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, + 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, + 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, + 0xFFFFFDFF, 0xFFFFFDFF, 0xFFFFCFF7, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/ctype_blank.c b/lib/unictype/ctype_blank.c new file mode 100644 index 00000000..7e5e44f7 --- /dev/null +++ b/lib/unictype/ctype_blank.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_blank table. */ +#include "ctype_blank.h" + +bool +uc_is_blank (ucs4_t uc) +{ + return bitmap_lookup (&u_is_blank, uc); +} diff --git a/lib/unictype/ctype_blank.h b/lib/unictype/ctype_blank.h new file mode 100644 index 00000000..0506e469 --- /dev/null +++ b/lib/unictype/ctype_blank.h @@ -0,0 +1,172 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_is_blank = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000200, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00004000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000077F, 0x00000000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/ctype_cntrl.c b/lib/unictype/ctype_cntrl.c new file mode 100644 index 00000000..8d9b148c --- /dev/null +++ b/lib/unictype/ctype_cntrl.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_cntrl table. */ +#include "ctype_cntrl.h" + +bool +uc_is_cntrl (ucs4_t uc) +{ + return bitmap_lookup (&u_is_cntrl, uc); +} diff --git a/lib/unictype/ctype_cntrl.h b/lib/unictype/ctype_cntrl.h new file mode 100644 index 00000000..e911b0d4 --- /dev/null +++ b/lib/unictype/ctype_cntrl.h @@ -0,0 +1,160 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[2 << 4]; + } +u_is_cntrl = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0xFFFFFFFF, 0x00000000, 0x00000000, 0x80000000, + 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000300, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/ctype_digit.c b/lib/unictype/ctype_digit.c new file mode 100644 index 00000000..b18d9204 --- /dev/null +++ b/lib/unictype/ctype_digit.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_digit table. */ +#include "ctype_digit.h" + +bool +uc_is_digit (ucs4_t uc) +{ + return bitmap_lookup (&u_is_digit, uc); +} diff --git a/lib/unictype/ctype_digit.h b/lib/unictype/ctype_digit.h new file mode 100644 index 00000000..82d7d2c4 --- /dev/null +++ b/lib/unictype/ctype_digit.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_is_digit = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/ctype_graph.c b/lib/unictype/ctype_graph.c new file mode 100644 index 00000000..3c0ae118 --- /dev/null +++ b/lib/unictype/ctype_graph.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_graph table. */ +#include "ctype_graph.h" + +bool +uc_is_graph (ucs4_t uc) +{ + return bitmap_lookup (&u_is_graph, uc); +} diff --git a/lib/unictype/ctype_graph.h b/lib/unictype/ctype_graph.h new file mode 100644 index 00000000..0a00010f --- /dev/null +++ b/lib/unictype/ctype_graph.h @@ -0,0 +1,890 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[17]; + short level2[5 << 7]; + /*unsigned*/ int level3[52 << 4]; + } +u_is_graph = +{ + { 17 }, + { + 18 * sizeof (int) / sizeof (short) + 0, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 256, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 512, + 18 * sizeof (int) / sizeof (short) + 512 + }, + { + 18 + 640 * sizeof (short) / sizeof (int) + 0, + 18 + 640 * sizeof (short) / sizeof (int) + 16, + 18 + 640 * sizeof (short) / sizeof (int) + 32, + 18 + 640 * sizeof (short) / sizeof (int) + 48, + 18 + 640 * sizeof (short) / sizeof (int) + 64, + 18 + 640 * sizeof (short) / sizeof (int) + 80, + 18 + 640 * sizeof (short) / sizeof (int) + 96, + 18 + 640 * sizeof (short) / sizeof (int) + 112, + 18 + 640 * sizeof (short) / sizeof (int) + 128, + 18 + 640 * sizeof (short) / sizeof (int) + 144, + 18 + 640 * sizeof (short) / sizeof (int) + 160, + 18 + 640 * sizeof (short) / sizeof (int) + 176, + 18 + 640 * sizeof (short) / sizeof (int) + 192, + 18 + 640 * sizeof (short) / sizeof (int) + 208, + 18 + 640 * sizeof (short) / sizeof (int) + 224, + 18 + 640 * sizeof (short) / sizeof (int) + 240, + 18 + 640 * sizeof (short) / sizeof (int) + 256, + 18 + 640 * sizeof (short) / sizeof (int) + 272, + 18 + 640 * sizeof (short) / sizeof (int) + 288, + 18 + 640 * sizeof (short) / sizeof (int) + 304, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 336, + 18 + 640 * sizeof (short) / sizeof (int) + 352, + 18 + 640 * sizeof (short) / sizeof (int) + 368, + 18 + 640 * sizeof (short) / sizeof (int) + 384, + 18 + 640 * sizeof (short) / sizeof (int) + 400, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 416, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 432, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 448, + 18 + 640 * sizeof (short) / sizeof (int) + 464, + 18 + 640 * sizeof (short) / sizeof (int) + 480, + 18 + 640 * sizeof (short) / sizeof (int) + 496, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 528, + 18 + 640 * sizeof (short) / sizeof (int) + 544, + 18 + 640 * sizeof (short) / sizeof (int) + 560, + 18 + 640 * sizeof (short) / sizeof (int) + 576, + 18 + 640 * sizeof (short) / sizeof (int) + 592, + 18 + 640 * sizeof (short) / sizeof (int) + 608, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 624, + 18 + 640 * sizeof (short) / sizeof (int) + 640, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 656, + 18 + 640 * sizeof (short) / sizeof (int) + 672, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 688, + 18 + 640 * sizeof (short) / sizeof (int) + 704, + 18 + 640 * sizeof (short) / sizeof (int) + 720, + 18 + 640 * sizeof (short) / sizeof (int) + 736, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 752, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 768, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 784, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 800, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 816 + }, + { + 0x00000000, 0xFFFFFFFE, 0xFFFFFFFF, 0x7FFFFFFF, + 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7CFFFFFF, + 0xFFFFD7F0, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0xFE7FFFFF, 0xFFFFFFFE, + 0xFFFE06FF, 0xFFFFFFFF, 0xFFFF00FF, 0x001F07FF, + 0xCFFFFFCF, 0xFFFFFFFE, 0x7FFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFBFFF, 0xFFFFFFFF, 0xFFFFE7FF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFE, 0xF3FFFFFF, 0xFF1F3FFF, 0xF807FFFF, + 0xFFF99FEE, 0xF3C5FDFF, 0xB080799F, 0x07FFFFCF, + 0xFFF987EE, 0xD36DFDFF, 0x5E023987, 0x003FFFC0, + 0xFFFBBFEE, 0xF3EDFDFF, 0x00013BBF, 0x0002FFCF, + 0xFFF99FEE, 0xF3EDFDFF, 0xB0C0399F, 0x0003FFCF, + 0xD63DC7EC, 0xC3FFC718, 0x00813DC7, 0x07FFFFC0, + 0xFFFDDFEE, 0xE3EFFDFF, 0x03603DDF, 0xFF00FFCF, + 0xFFFDDFEC, 0xF3EFFDFF, 0x40603DDF, 0x0006FFCF, + 0xFFFDDFEC, 0xE3FFFDFF, 0x00803DDF, 0xFE3FFFCF, + 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F847F, 0x001C0000, + 0xFFFFFFFE, 0x87FFFFFF, 0x0FFFFFFF, 0x00000000, + 0xFEF02596, 0x3BFFECAE, 0x33FF3F5F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFEFF, 0xFFFE1FFF, + 0xFEFF0FFF, 0xDFFFFFFF, 0x001FDFFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xC3FFFFFF, 0xFFFFFFFF, 0xFFFF003F, 0x1FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x87FFFFFF, 0x1FFFFFFF, + 0x03FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, + 0x1FFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001FFFF, + 0x001FDFFF, 0x007FFFFF, 0x000FFFFF, 0x000DDFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x03FF03FF, + 0x03FF3FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0x000007FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x0FFF0FFF, 0xFFFFFFF1, 0x001F3FFF, + 0xFFFFFFFF, 0xFFFF03FF, 0xC3FF03FF, 0xFFFFFFFF, + 0xCFFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0FFF, 0x1FFFFFFF, + 0xFFFFFFFF, 0x03FFC7FF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xF8FFFFFF, 0xFFFFE3FF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xC000007F, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0xFFDFFFFF, 0xEFCFFFDF, 0x7FDCFFFF, + 0xFFFFF880, 0xFFFFFCFF, 0x7FFFFFFF, 0xFFF3FC1F, + 0x001F7FFF, 0x003FFFFF, 0xFFFF0000, 0x0001FFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF8FFFF, 0xFFFFFFFF, + 0xFFFF01FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF, + 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x1FFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFF3DE, 0xFFFFFEFF, 0x7F47AFFF, 0xFFFFFFFE, + 0xFF1FFFFF, 0x7FFEFFFF, 0xFFFF17FF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x001F1FFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE0007FF, + 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x00000000, + 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, + 0xFE7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF7FFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF000F, + 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0xFFFFFFFF, 0x0000007F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x00000FFF, 0xFFFFFFFF, 0xF00FFFFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFFFFF, 0x00000FFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFC01F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x800FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x007FFFFF, 0xF3FF3FFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xE0F8007F, 0x5F7FFFFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x3FFF0000, + 0x03FFFFFF, 0xFFFF007F, 0xFFF7FFFF, 0xFFDF0F7F, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x9FFFFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x3E007F7F, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0xFFFFFF87, 0xFF8FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x0FFF07FF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF000F, 0x000007FF, 0x00000000, + 0xBFFFFFFF, 0xFFFFFFFF, 0x003FFF0F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x83FFFFFF, 0x83FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEFF06F, 0x870FFFFF, 0x01FF00FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000F0007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, + 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x0003FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFCFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF + } +}; diff --git a/lib/unictype/ctype_lower.c b/lib/unictype/ctype_lower.c new file mode 100644 index 00000000..1bc84344 --- /dev/null +++ b/lib/unictype/ctype_lower.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_lower table. */ +#include "ctype_lower.h" + +bool +uc_is_lower (ucs4_t uc) +{ + return bitmap_lookup (&u_is_lower, uc); +} diff --git a/lib/unictype/ctype_lower.h b/lib/unictype/ctype_lower.h new file mode 100644 index 00000000..32f602c9 --- /dev/null +++ b/lib/unictype/ctype_lower.h @@ -0,0 +1,327 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[11 << 4]; + } +u_is_lower = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, + 0x00000000, 0x00200000, 0x80000000, 0xFF7FFFFF, + 0xAAAAAAAA, 0x54AAAAAA, 0xAAAAA955, 0xD4AAAAAA, + 0x46241129, 0xA251212A, 0xB5555B60, 0xAA2CAAAA, + 0xAAAAAAAA, 0x100AAAA8, 0x0ADBAA84, 0x20268B09, + 0x00041F09, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000020, 0x388A0000, + 0x00000000, 0xFFFEF000, 0xAAE37FFF, 0x0927AAAA, + 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xAAAAAAAA, + 0xAAAAA802, 0xAAAAAAAA, 0xAAAAD554, 0xAAAAAAAA, + 0xAAAAAAAA, 0x0000000A, 0x00000000, 0xFFFFFFFE, + 0x0000007F, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x22000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, + 0x082AAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, + 0x003F00FF, 0x00FF00FF, 0x00AA003F, 0x3FFF00FF, + 0x00FF00FF, 0x400B00FF, 0x00030008, 0x00080023, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00004000, 0xFFFF0000, + 0x00000010, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFF0000, 0x7FFFFFFF, 0x00481562, + 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x0000000A, + 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xAAAAAAAA, 0x00002AA8, + 0x00AAAAAA, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xAAA8AAA8, 0xAAAAAAAA, 0x9400AAAA, + 0x000010AA, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFF00, 0x0000FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/ctype_print.c b/lib/unictype/ctype_print.c new file mode 100644 index 00000000..14238015 --- /dev/null +++ b/lib/unictype/ctype_print.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_print table. */ +#include "ctype_print.h" + +bool +uc_is_print (ucs4_t uc) +{ + return bitmap_lookup (&u_is_print, uc); +} diff --git a/lib/unictype/ctype_print.h b/lib/unictype/ctype_print.h new file mode 100644 index 00000000..73df0b9d --- /dev/null +++ b/lib/unictype/ctype_print.h @@ -0,0 +1,890 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[17]; + short level2[5 << 7]; + /*unsigned*/ int level3[52 << 4]; + } +u_is_print = +{ + { 17 }, + { + 18 * sizeof (int) / sizeof (short) + 0, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 256, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 512, + 18 * sizeof (int) / sizeof (short) + 512 + }, + { + 18 + 640 * sizeof (short) / sizeof (int) + 0, + 18 + 640 * sizeof (short) / sizeof (int) + 16, + 18 + 640 * sizeof (short) / sizeof (int) + 32, + 18 + 640 * sizeof (short) / sizeof (int) + 48, + 18 + 640 * sizeof (short) / sizeof (int) + 64, + 18 + 640 * sizeof (short) / sizeof (int) + 80, + 18 + 640 * sizeof (short) / sizeof (int) + 96, + 18 + 640 * sizeof (short) / sizeof (int) + 112, + 18 + 640 * sizeof (short) / sizeof (int) + 128, + 18 + 640 * sizeof (short) / sizeof (int) + 144, + 18 + 640 * sizeof (short) / sizeof (int) + 160, + 18 + 640 * sizeof (short) / sizeof (int) + 176, + 18 + 640 * sizeof (short) / sizeof (int) + 192, + 18 + 640 * sizeof (short) / sizeof (int) + 208, + 18 + 640 * sizeof (short) / sizeof (int) + 224, + 18 + 640 * sizeof (short) / sizeof (int) + 240, + 18 + 640 * sizeof (short) / sizeof (int) + 256, + 18 + 640 * sizeof (short) / sizeof (int) + 272, + 18 + 640 * sizeof (short) / sizeof (int) + 288, + 18 + 640 * sizeof (short) / sizeof (int) + 304, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 336, + 18 + 640 * sizeof (short) / sizeof (int) + 352, + 18 + 640 * sizeof (short) / sizeof (int) + 368, + 18 + 640 * sizeof (short) / sizeof (int) + 384, + 18 + 640 * sizeof (short) / sizeof (int) + 400, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 416, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 432, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 448, + 18 + 640 * sizeof (short) / sizeof (int) + 464, + 18 + 640 * sizeof (short) / sizeof (int) + 480, + 18 + 640 * sizeof (short) / sizeof (int) + 496, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 512, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 528, + 18 + 640 * sizeof (short) / sizeof (int) + 544, + 18 + 640 * sizeof (short) / sizeof (int) + 560, + 18 + 640 * sizeof (short) / sizeof (int) + 576, + 18 + 640 * sizeof (short) / sizeof (int) + 592, + 18 + 640 * sizeof (short) / sizeof (int) + 608, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 624, + 18 + 640 * sizeof (short) / sizeof (int) + 640, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 656, + 18 + 640 * sizeof (short) / sizeof (int) + 672, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 688, + 18 + 640 * sizeof (short) / sizeof (int) + 704, + 18 + 640 * sizeof (short) / sizeof (int) + 720, + 18 + 640 * sizeof (short) / sizeof (int) + 736, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 752, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 768, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 784, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 800, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 320, + 18 + 640 * sizeof (short) / sizeof (int) + 816 + }, + { + 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, + 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7CFFFFFF, + 0xFFFFD7F0, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0xFE7FFFFF, 0xFFFFFFFE, + 0xFFFE06FF, 0xFFFFFFFF, 0xFFFF00FF, 0x001F07FF, + 0xCFFFFFCF, 0xFFFFFFFE, 0x7FFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFBFFF, 0xFFFFFFFF, 0xFFFFE7FF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFE, 0xF3FFFFFF, 0xFF1F3FFF, 0xF807FFFF, + 0xFFF99FEE, 0xF3C5FDFF, 0xB080799F, 0x07FFFFCF, + 0xFFF987EE, 0xD36DFDFF, 0x5E023987, 0x003FFFC0, + 0xFFFBBFEE, 0xF3EDFDFF, 0x00013BBF, 0x0002FFCF, + 0xFFF99FEE, 0xF3EDFDFF, 0xB0C0399F, 0x0003FFCF, + 0xD63DC7EC, 0xC3FFC718, 0x00813DC7, 0x07FFFFC0, + 0xFFFDDFEE, 0xE3EFFDFF, 0x03603DDF, 0xFF00FFCF, + 0xFFFDDFEC, 0xF3EFFDFF, 0x40603DDF, 0x0006FFCF, + 0xFFFDDFEC, 0xE3FFFDFF, 0x00803DDF, 0xFE3FFFCF, + 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F847F, 0x001C0000, + 0xFFFFFFFE, 0x87FFFFFF, 0x0FFFFFFF, 0x00000000, + 0xFEF02596, 0x3BFFECAE, 0x33FF3F5F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFEFF, 0xFFFE1FFF, + 0xFEFF0FFF, 0xDFFFFFFF, 0x001FDFFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xC3FFFFFF, 0xFFFFFFFF, 0xFFFF003F, 0x1FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x87FFFFFF, 0x1FFFFFFF, + 0x03FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, + 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001FFFF, + 0x001FDFFF, 0x007FFFFF, 0x000FFFFF, 0x000DDFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x03FF03FF, + 0x03FF7FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0x000007FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x0FFF0FFF, 0xFFFFFFF1, 0x001F3FFF, + 0xFFFFFFFF, 0xFFFF03FF, 0xC3FF03FF, 0xFFFFFFFF, + 0xCFFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0FFF, 0x1FFFFFFF, + 0xFFFFFFFF, 0x03FFC7FF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xF8FFFFFF, 0xFFFFE3FF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xC000007F, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0xFFDFFFFF, 0xEFCFFFDF, 0x7FDCFFFF, + 0xFFFFFFFF, 0xFFFFFCFF, 0xFFFFFFFF, 0xFFF3FC1F, + 0x001F7FFF, 0x003FFFFF, 0xFFFF0000, 0x0001FFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF8FFFF, 0xFFFFFFFF, + 0xFFFF01FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF, + 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x1FFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFF3DE, 0xFFFFFEFF, 0x7F47AFFF, 0xFFFFFFFE, + 0xFF1FFFFF, 0x7FFEFFFF, 0xFFFF17FF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x001F1FFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE0007FF, + 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x00000000, + 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, + 0xFE7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF7FFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF000F, + 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0xFFFFFFFF, 0x0000007F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x00000FFF, 0xFFFFFFFF, 0xF00FFFFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFFFFF, 0x00000FFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFC01F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x800FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x007FFFFF, 0xF3FF3FFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xE0F8007F, 0x5F7FFFFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x3FFF0000, + 0x03FFFFFF, 0xFFFF007F, 0xFFF7FFFF, 0xFFDF0F7F, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x9FFFFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x3E007F7F, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0xFFFFFF87, 0xFF8FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x0FFF07FF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF000F, 0x000007FF, 0x00000000, + 0xBFFFFFFF, 0xFFFFFFFF, 0x003FFF0F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x83FFFFFF, 0x83FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEFF06F, 0x870FFFFF, 0x01FF00FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000F0007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, + 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x0003FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFCFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF + } +}; diff --git a/lib/unictype/ctype_punct.c b/lib/unictype/ctype_punct.c new file mode 100644 index 00000000..e6b79469 --- /dev/null +++ b/lib/unictype/ctype_punct.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_punct table. */ +#include "ctype_punct.h" + +bool +uc_is_punct (ucs4_t uc) +{ + return bitmap_lookup (&u_is_punct, uc); +} diff --git a/lib/unictype/ctype_punct.h b/lib/unictype/ctype_punct.h new file mode 100644 index 00000000..ce4a0107 --- /dev/null +++ b/lib/unictype/ctype_punct.h @@ -0,0 +1,734 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[17]; + short level2[4 << 7]; + /*unsigned*/ int level3[45 << 4]; + } +u_is_punct = +{ + { 17 }, + { + 18 * sizeof (int) / sizeof (short) + 0, + 18 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 384 + }, + { + 18 + 512 * sizeof (short) / sizeof (int) + 0, + 18 + 512 * sizeof (short) / sizeof (int) + 16, + 18 + 512 * sizeof (short) / sizeof (int) + 32, + 18 + 512 * sizeof (short) / sizeof (int) + 48, + 18 + 512 * sizeof (short) / sizeof (int) + 64, + 18 + 512 * sizeof (short) / sizeof (int) + 80, + 18 + 512 * sizeof (short) / sizeof (int) + 96, + 18 + 512 * sizeof (short) / sizeof (int) + 112, + 18 + 512 * sizeof (short) / sizeof (int) + 128, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 160, + 18 + 512 * sizeof (short) / sizeof (int) + 176, + 18 + 512 * sizeof (short) / sizeof (int) + 192, + 18 + 512 * sizeof (short) / sizeof (int) + 208, + 18 + 512 * sizeof (short) / sizeof (int) + 224, + 18 + 512 * sizeof (short) / sizeof (int) + 240, + 18 + 512 * sizeof (short) / sizeof (int) + 256, + 18 + 512 * sizeof (short) / sizeof (int) + 272, + 18 + 512 * sizeof (short) / sizeof (int) + 288, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 320, + 18 + 512 * sizeof (short) / sizeof (int) + 336, + 18 + 512 * sizeof (short) / sizeof (int) + 352, + 18 + 512 * sizeof (short) / sizeof (int) + 368, + 18 + 512 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 400, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 416, + 18 + 512 * sizeof (short) / sizeof (int) + 432, + 18 + 512 * sizeof (short) / sizeof (int) + 448, + 18 + 512 * sizeof (short) / sizeof (int) + 464, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 480, + 18 + 512 * sizeof (short) / sizeof (int) + 496, + 18 + 512 * sizeof (short) / sizeof (int) + 512, + 18 + 512 * sizeof (short) / sizeof (int) + 528, + 18 + 512 * sizeof (short) / sizeof (int) + 544, + 18 + 512 * sizeof (short) / sizeof (int) + 560, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 576, + 18 + 512 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 608, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 624, + 18 + 512 * sizeof (short) / sizeof (int) + 640, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 656, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 672, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 688, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 704 + }, + { + 0x00000000, 0xFC00FFFE, 0xF8000001, 0x78000001, + 0x00000000, 0xFBDFFBFF, 0x00800000, 0x00800000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFC003C, 0xFFFFAFE0, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFDF, 0x4020FFFF, + 0x000000B0, 0x00000000, 0x00000000, 0x00400000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000003FC, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFC000000, 0x00000000, + 0xFFFE0600, 0xFFFFFFFF, 0x000000FF, 0x00180000, + 0xCFFFFFCF, 0x00000000, 0x7FFFF800, 0x00013C00, + 0x00000000, 0x00000000, 0xFFD00000, 0x60003F9F, + 0x0002BFFF, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x00000000, 0x0001FFC0, 0x00000000, 0x03CFF800, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000E, 0xD0000000, 0x001E3FFF, 0x0001003C, + 0x0000000E, 0xD0000000, 0x0080399F, 0x07FC000C, + 0x0000000E, 0xD0000000, 0x00023987, 0x00230000, + 0x0000000E, 0xD0000000, 0x00003BBF, 0x0002000C, + 0x0000000E, 0xD0000000, 0x00C0399F, 0x0001000C, + 0x00000004, 0xC0000000, 0x00803DC7, 0x07FF0000, + 0x0000000E, 0xC0000000, 0x00603DDF, 0xFF00000C, + 0x0000000C, 0xD0000000, 0x00603DDF, 0x0006000C, + 0x0000000C, 0xC0000000, 0x00803DDF, 0x023F000C, + 0x0000000C, 0x00000000, 0xFF5F8400, 0x001C0000, + 0x00000000, 0x80008000, 0x0C008040, 0x00000000, + 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, + 0xFFFFFFFE, 0xFFFFFC00, 0x00000000, 0xFFFE0000, + 0xFEFF00FF, 0xDFFFFFFF, 0x001FDFFF, 0x00000000, + 0x00000000, 0x7FFFF800, 0xC3C0FC00, 0x001E3F9D, + 0xC000BFFC, 0x00000000, 0x00000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x1FFFFFFF, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00006000, + 0x18000000, 0x00000000, 0x00000000, 0x00003800, + 0x001C0000, 0x007C0000, 0x000C0000, 0x000C0000, + 0x00000000, 0xFFF00000, 0x2F7FFFFF, 0x03FF0000, + 0x00003FFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x0FFF0FFF, 0x00000031, 0x00000000, + 0x00000000, 0xFFFF0000, 0xC0000301, 0xFFFFFFFF, + 0xCF800000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000001F, 0xFFF00000, 0xFC00001F, 0x1FFFFFFF, + 0x00000007, 0x000007FE, 0x00000000, 0x00000000, + 0x00000000, 0xF8FFFFF0, 0x00000000, 0xC0000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xC000007F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, + 0xFFFFF880, 0xFFFFFCFF, 0x7FFFFFFF, 0x7FF1FC1F, + 0x00007FFF, 0x003FFFFF, 0xFFFF0000, 0x0001FFFF, + 0xC1D0037B, 0x0C0040AF, 0xFFF8BC1F, 0x00000000, + 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF, + 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0xFFFFFFFF, + 0x0FFFFFFF, 0x00000000, 0x00000000, 0xFFFFFC00, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x1FFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFF3DE, 0xFFFFFEFF, 0x7F47AFFF, 0xFFFFFFFE, + 0xFF1FFFFF, 0x7FFEFFFF, 0xFFFF17FF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x001F1FFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFE0007E0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0xFFFFFFFF, 0x00017FFF, 0x00000000, 0x00000000, + 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, + 0xFFFFFF1E, 0xE0C1FC01, 0x00000000, 0x00000000, + 0x1E000000, 0x00000001, 0x00000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFF0000, 0x00000000, 0xFFFFFFFF, 0x0000000F, + 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFF0000, 0xFFFFFFFF, 0x0000007F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000E000, 0x00000000, 0x00000000, 0x700F8000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x007FFFFF, 0x00000003, 0x00000000, 0x00000000, + 0x00000600, 0x00000000, 0x00000000, 0x00000000, + 0x00000844, 0x00000FF8, 0x00000000, 0x00F00000, + 0x00000003, 0xFFF00000, 0x0000C01F, 0x00000000, + 0x00000000, 0x0000FFC0, 0x800FFF80, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x007FFE00, 0xF0003008, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x40000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xC0000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x30000000, + 0x03FFFFFF, 0xFFFF007F, 0xFFF7FFFF, 0x00000F7F, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0xFC00FFFE, 0xF8000001, 0xF8000001, 0x0000003F, + 0x00000000, 0x00000000, 0x00000000, 0x3E007F7F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFF87, 0xFF8FFFFF, 0x00000000, 0xFFE00000, + 0x0FFF07FF, 0x00000000, 0xFFFF0000, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0000000F, 0x00000000, 0x00000000, + 0x80000000, 0x00000000, 0x00010000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x83C00000, 0x80000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000F06E, 0x87000000, 0x01FF00FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000F0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, + 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000003F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x0003FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x08000002, 0x08000000, + 0x00200000, 0x00200000, 0x00008000, 0x00008000, + 0x00000200, 0x00000200, 0x00000008, 0x00000000, + 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF + } +}; diff --git a/lib/unictype/ctype_space.c b/lib/unictype/ctype_space.c new file mode 100644 index 00000000..09d2c112 --- /dev/null +++ b/lib/unictype/ctype_space.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_space table. */ +#include "ctype_space.h" + +bool +uc_is_space (ucs4_t uc) +{ + return bitmap_lookup (&u_is_space, uc); +} diff --git a/lib/unictype/ctype_space.h b/lib/unictype/ctype_space.h new file mode 100644 index 00000000..90108b99 --- /dev/null +++ b/lib/unictype/ctype_space.h @@ -0,0 +1,172 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_is_space = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00003E00, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00004000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000077F, 0x00000300, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/ctype_upper.c b/lib/unictype/ctype_upper.c new file mode 100644 index 00000000..7724a048 --- /dev/null +++ b/lib/unictype/ctype_upper.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_upper table. */ +#include "ctype_upper.h" + +bool +uc_is_upper (ucs4_t uc) +{ + return bitmap_lookup (&u_is_upper, uc); +} diff --git a/lib/unictype/ctype_upper.h b/lib/unictype/ctype_upper.h new file mode 100644 index 00000000..4f3a7806 --- /dev/null +++ b/lib/unictype/ctype_upper.h @@ -0,0 +1,327 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[11 << 4]; + } +u_is_upper = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, + 0x00000000, 0x00000000, 0x7F7FFFFF, 0x00000000, + 0x55555555, 0xAA555555, 0x555554AA, 0x2B555555, + 0xB1DBCED6, 0x11AED2D5, 0x4AAAADB0, 0x55D65555, + 0x55555555, 0x6C055555, 0x0000557A, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00450000, + 0xFFFED740, 0x00000FFB, 0x55008000, 0xE6905555, + 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x55555555, + 0x55555401, 0x55555555, 0x55552AAB, 0x55555555, + 0x55555555, 0xFFFE0005, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x55555555, 0x55555555, 0x55555555, 0x55555555, + 0x40155555, 0x55555555, 0x55555555, 0x55555555, + 0x3F00FF00, 0xFF00FF00, 0xAA003F00, 0x0000FF00, + 0xFF00FF00, 0x1F00FF00, 0x0F001F00, 0x1F001F00, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00040C40, 0x00000000, 0x0000FFFF, + 0x00000008, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFC00000, 0x0000FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x0024EA9D, + 0x55555555, 0x55555555, 0x55555555, 0x00000005, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x55555555, 0x00001554, + 0x00555555, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x55545554, 0x55555555, 0x6A005555, + 0x00000855, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x000000FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/ctype_xdigit.c b/lib/unictype/ctype_xdigit.c new file mode 100644 index 00000000..60c44c4f --- /dev/null +++ b/lib/unictype/ctype_xdigit.c @@ -0,0 +1,32 @@ +/* ISO C like properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_is_xdigit table. */ +#include "ctype_xdigit.h" + +bool +uc_is_xdigit (ucs4_t uc) +{ + return bitmap_lookup (&u_is_xdigit, uc); +} diff --git a/lib/unictype/ctype_xdigit.h b/lib/unictype/ctype_xdigit.h new file mode 100644 index 00000000..320f806b --- /dev/null +++ b/lib/unictype/ctype_xdigit.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* ISO C like properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_is_xdigit = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x03FF0000, 0x0000007E, 0x0000007E, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/decdigit.c b/lib/unictype/decdigit.c new file mode 100644 index 00000000..48b05925 --- /dev/null +++ b/lib/unictype/decdigit.c @@ -0,0 +1,49 @@ +/* Values of decimal digit Unicode characters. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_decdigit table. */ +#include "decdigit.h" + +int +uc_decimal_value (ucs4_t uc) +{ + unsigned int index1 = uc >> decdigit_header_0; + if (index1 < decdigit_header_1) + { + int lookup1 = u_decdigit.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> decdigit_header_2) & decdigit_header_3; + int lookup2 = u_decdigit.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc & decdigit_header_4) + lookup2; + /* level3 contains 4-bit values. */ + unsigned int lookup3 = + (u_decdigit.level3[index3>>1] >> ((index3 % 2) * 4)) & 0x0f; + + return (int) lookup3 - 1; + } + } + } + return -1; +} diff --git a/lib/unictype/decdigit.h b/lib/unictype/decdigit.h new file mode 100644 index 00000000..08dcc401 --- /dev/null +++ b/lib/unictype/decdigit.h @@ -0,0 +1,247 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Decimal digit values of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define decdigit_header_0 16 +#define decdigit_header_1 2 +#define decdigit_header_2 7 +#define decdigit_header_3 511 +#define decdigit_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + unsigned char level3[12 << 6]; + } +u_decdigit = +{ + { 0, 512 }, + { + 0, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 128, 256, -1, 384, + -1, -1, 512, 512, 512, 512, 512, 512, + 512, 512, 512, -1, 640, 640, 768, -1, + 384, 896, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 128, + 896, -1, 1024, 640, -1, -1, 640, 0, + 1152, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 768, -1, -1, -1, + -1, 640, 1280, -1, 640, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 896, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 768, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 1408, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, + 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, + 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, + 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9 + } +}; diff --git a/lib/unictype/digit.c b/lib/unictype/digit.c new file mode 100644 index 00000000..21545c7b --- /dev/null +++ b/lib/unictype/digit.c @@ -0,0 +1,49 @@ +/* Values of digit Unicode characters. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_digit table. */ +#include "digit.h" + +int +uc_digit_value (ucs4_t uc) +{ + unsigned int index1 = uc >> digit_header_0; + if (index1 < digit_header_1) + { + int lookup1 = u_digit.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> digit_header_2) & digit_header_3; + int lookup2 = u_digit.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc & digit_header_4) + lookup2; + /* level3 contains 4-bit values. */ + unsigned int lookup3 = + (u_digit.level3[index3>>1] >> ((index3 % 2) * 4)) & 0x0f; + + return (int) lookup3 - 1; + } + } + } + return -1; +} diff --git a/lib/unictype/digit.h b/lib/unictype/digit.h new file mode 100644 index 00000000..d3f29617 --- /dev/null +++ b/lib/unictype/digit.h @@ -0,0 +1,311 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Digit values of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define digit_header_0 16 +#define digit_header_1 2 +#define digit_header_2 7 +#define digit_header_3 511 +#define digit_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + unsigned char level3[20 << 6]; + } +u_digit = +{ + { 0, 512 }, + { + 0, 128, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 256, 384, -1, 512, + -1, -1, 640, 640, 640, 640, 640, 640, + 640, 640, 640, -1, 768, 768, 896, -1, + 512, 1024, -1, -1, -1, -1, 1152, -1, + -1, -1, -1, -1, -1, -1, -1, 256, + 1024, -1, 1280, 768, -1, -1, 768, 0, + 1408, -1, -1, -1, -1, -1, -1, -1, + 1536, 1664, -1, -1, -1, -1, -1, -1, + 1792, 1920, -1, -1, -1, -1, 2048, 2176, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 896, -1, -1, -1, + -1, 768, 1664, -1, 768, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1024, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 896, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2304, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 2432, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x43, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x20, 0x43, 0x65, 0x87, + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x21, 0x43, 0x65, 0x87, 0xa9, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x21, 0x43, 0x65, 0x87, 0xa9, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x32, 0x54, 0x76, 0x98, 0x0a, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x32, 0x54, 0x76, 0x98, 0x0a, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x32, 0x54, 0x76, 0x98, + 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x43, 0x65, 0x87, 0xa9, 0x10, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x32, 0x54, 0x76, 0x98, 0x0a, + 0x32, 0x54, 0x76, 0x98, 0x0a, 0x32, 0x54, 0x76, + 0x98, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x32, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, + 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, + 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9, 0x21, 0x43, + 0x65, 0x87, 0xa9, 0x21, 0x43, 0x65, 0x87, 0xa9 + } +}; diff --git a/lib/unictype/identsyntaxmap.h b/lib/unictype/identsyntaxmap.h new file mode 100644 index 00000000..5d9db395 --- /dev/null +++ b/lib/unictype/identsyntaxmap.h @@ -0,0 +1,42 @@ +/* Three-level bitmap lookup. + Copyright (C) 2000-2002, 2005-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2000-2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +static inline int identsyntax_lookup (ucs4_t uc); + +static inline int +identsyntax_lookup (ucs4_t uc) +{ + unsigned int index1 = uc >> identsyntax_header_0; + if (index1 < identsyntax_header_1) + { + int lookup1 = TABLE.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> identsyntax_header_2) & identsyntax_header_3; + int lookup2 = TABLE.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc & identsyntax_header_4) + lookup2; + /* level3 contains 2-bit values. */ + unsigned int lookup3 = TABLE.level3[index3 >> 3]; + + return (lookup3 >> (2 * (index3 & 7))) & 3; + } + } + } + return UC_IDENTIFIER_INVALID; +} diff --git a/lib/unictype/mirror.c b/lib/unictype/mirror.c new file mode 100644 index 00000000..75775447 --- /dev/null +++ b/lib/unictype/mirror.c @@ -0,0 +1,49 @@ +/* Mirrored Unicode characters. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_mirror table. */ +#include "mirror.h" + +bool +uc_mirror_char (ucs4_t uc, ucs4_t *puc) +{ + unsigned int index1 = uc >> mirror_header_0; + if (index1 < mirror_header_1) + { + int lookup1 = u_mirror.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> mirror_header_2) & mirror_header_3; + int lookup2 = u_mirror.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc & mirror_header_4); + int lookup3 = u_mirror.level3[lookup2 + index3]; + + *puc = uc + lookup3; + return (lookup3 != 0); + } + } + } + *puc = uc; + return false; +} diff --git a/lib/unictype/mirror.h b/lib/unictype/mirror.h new file mode 100644 index 00000000..d55f153a --- /dev/null +++ b/lib/unictype/mirror.h @@ -0,0 +1,503 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Mirrored Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define mirror_header_0 16 +#define mirror_header_1 2 +#define mirror_header_2 7 +#define mirror_header_3 511 +#define mirror_header_4 127 +static const +struct + { + int level1[2]; + short level2[2 << 9]; + int level3[22 << 7]; + } +u_mirror = +{ + { 0, 512 }, + { + 0, 128, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 256, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 384, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 512, 640, 768, -1, 896, 1024, 1152, -1, + -1, -1, -1, -1, -1, -1, 1280, 1408, + -1, -1, -1, 1536, 1664, 1792, -1, -1, + -1, -1, -1, -1, 1920, -1, -1, -1, + 2048, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2176, -1, 2304, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2432, 2560, 2688, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, -1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, -2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, -2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, -2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 61635, 61634, 61633, 61632, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 59746, 59745, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, -1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, -1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 57021, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 56828, 56827, 56826, 56825, 0, 0, 0, + 3, 56820, 3, -3, 56817, -3, 0, 0, + 0, 56812, 0, 0, 0, 56808, 56807, 0, + 0, 0, 56803, 56802, 56801, 56800, 0, 56798, + 56797, 56796, 56795, 0, 56793, 0, 56791, 0, + 0, 0, 0, 56786, 56785, 56784, 56783, 56782, + 56781, 56780, 56779, 56778, 0, 0, 0, 0, + 0, 56772, 0, 56770, 1, -1, 56767, 56766, + 56765, 56764, 56763, 138, 56761, 56760, 56759, 56758, + 56757, 56756, 56755, 56754, 56753, 0, 0, 0, + 0, 0, 1, -1, 1, -1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 56734, + 56733, 0, 56731, 0, 1, -1, 1, -1, + 56725, 56724, 1, -1, 0, 0, 56719, 56718, + 56717, 56716, 56715, 56714, 56713, 56712, 1, -1, + 1, -1, 1, -1, 1, -1, 56703, 56702, + 56701, 56700, 1, -1, 56697, 56696, 1, -1, + 56693, 56692, 56691, 56690, 56689, 0, 0, 1, + -1, 1, -1, 0, 0, 0, 0, 0, + 56677, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, -1, 0, 0, 56663, 56662, + 56661, 56660, 56659, 56658, 56657, 56656, 56655, 56654, + 1, -1, 1, -1, 1, -1, 1, -1, + 56645, 0, 0, 0, 0, 0, 56639, 56638, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, -1, 1, -1, -138, 0, 0, + 1, -1, 0, 0, 0, 0, 1, -1, + 1, -1, 1, -1, 1, -1, 1, -1, + 56605, 56604, 56603, 56602, 56601, 56600, 56599, 56598, + 56597, 56596, 56595, 56594, 56593, 56592, 0, 0, + 1, -1, 56587, 56586, 56585, 56584, 56583, 56582, + 56581, 56580, 56579, 56578, 56577, 56576, 56575, 56574, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, -1, 1, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 56541, 56540, 0, 0, 0, 0, 0, 0, + 0, 1, -1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 55445, 55444, 55443, 55442, 55441, 55440, 55439, 55438, + 55437, 55436, 55435, 55434, 55433, 55432, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 55357, 0, 0, 55354, 55353, 55352, 55351, 0, + 55349, 55348, 0, 0, 55345, 0, 0, 0, + 0, 0, 0, 55338, 55337, 55336, 55335, 0, + 0, 0, 0, 0, 55329, 55328, 55327, 0, + 0, 0, 55323, 55322, 55321, 55320, 55319, 55318, + 55317, 55316, 55315, 55314, 55313, 55312, 55311, 55310, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54906, 54905, 54904, 54903, 54902, + 54901, 54900, 54899, 54898, 54897, 54896, 54895, 54894, + 54893, 54892, 54891, 54890, 54889, 54888, 54887, 54886, + 54885, 0, 0, 54882, 54881, 54880, 54879, 54878, + 54877, 54876, 54875, 54874, 54873, 54872, 54871, 54870, + 54869, 54868, 54867, 54866, 54865, 54864, 54863, 54862, + 0, 0, 0, 0, 0, 0, 0, 0, + 54853, 0, 0, 0, 0, 0, 0, 0, + 54845, 54844, 54843, 54842, 54841, 54840, 0, 0, + 0, 54836, 0, 0, 0, 0, 54831, 54830, + 54829, 54828, 54827, 0, 54825, 54824, 0, 0, + 54821, 54820, 54819, 54818, 54817, 0, 0, 0, + 0, 54812, 0, 54810, 54809, 54808, 0, 0, + 54805, 54804, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54793, 54792, 54791, 54790, + 54789, 54788, 0, 0, 54785, 54784, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 54771, 54770, 54769, 54768, 54767, 54766, + 54765, 54764, 54763, 54762, 54761, 54760, 54759, 54758, + 54757, 54756, 54755, 54754, 54753, 0, 54751, 54750, + 54749, 54748, 0, 0, 54745, 0, 54743, 0, + 0, 54740, 0, 54738, 54737, 54736, 54735, 0, + 0, 0, 0, 0, 54729, 54728, 0, 0, + 0, 0, 0, 0, 54721, 54720, 54719, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 54694, + 54693, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54681, 54680, 0, 0, + 0, 0, 54675, 54674, 54673, 54672, 0, 54670, + 54669, 0, 0, 54666, 54665, 0, 0, 0, + 0, 54660, 54659, 54658, 54657, 54656, 54655, 54654, + 54653, 54652, 54651, 54650, 54649, 54648, 54647, 54646, + 54645, 54644, 54643, 54642, 54641, 54640, 54639, 54638, + 54637, 54636, 54635, 54634, 54633, 54632, 54631, 54630, + 54629, 54628, 54627, 54626, 54625, 54624, 54623, 54622, + 54621, 54620, 54619, 54618, 0, 0, 54615, 54614, + 54613, 54612, 54611, 54610, 54609, 54608, 0, 54606, + 54605, 54604, 54603, 54602, 54601, 54600, 54599, 54598, + 54597, 54596, 54595, 54594, 54593, 54592, 54591, 54590, + 54589, 54588, 54587, 54586, 54585, 54584, 54583, 54582, + 54581, 54580, 54579, 54578, 54577, 54576, 54575, 54574, + 54573, 54572, 54571, 54570, 54569, 54568, 54567, 0, + 0, 0, 0, 0, 54561, 0, 54559, 0, + 0, 0, 54555, 54554, 54553, 54552, 54551, 0, + 0, 0, 0, 0, 54545, 54544, 54543, 0, + 0, 0, 0, 54538, 0, 0, 0, 54534, + 54533, 54532, 54531, 54530, 0, 54528, 0, 0, + 0, 0, 53755, 53754, 53753, 53752, 0, 0, + 0, 53748, 53747, 0, 53745, 53744, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 53729, 53728, 0, 0, + 53725, 53724, 53723, 53722, 53721, 53720, 53719, 53718, + 53717, 53716, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, -1, 1, -1, 1, -1, 1, -1, + 1, -1, 0, 0, 1, -1, 1, -1, + 1, -1, 1, -1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 420, 419, 418, 417, 416, 415, 0, + 0, 0, 0, 0, 409, 408, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 245, 244, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 225, 0, 223, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 194, 0, 192, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 162, 0, 160, 0, 158, + 157, 0, 155, 154, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -55006, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, -55064, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -55122, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, -55180, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, -55238, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0 + } +}; diff --git a/lib/unictype/numeric.c b/lib/unictype/numeric.c new file mode 100644 index 00000000..fb1512eb --- /dev/null +++ b/lib/unictype/numeric.c @@ -0,0 +1,55 @@ +/* Values of numeric Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +/* Define u_numeric_values and u_numeric tables. */ +#include "numeric.h" + +uc_fraction_t +uc_numeric_value (ucs4_t uc) +{ + unsigned int index1 = uc >> numeric_header_0; + if (index1 < numeric_header_1) + { + int lookup1 = u_numeric.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> numeric_header_2) & numeric_header_3; + int lookup2 = u_numeric.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = ((uc & numeric_header_4) + lookup2) * 7; + /* level3 contains 7-bit values, packed into 16-bit words. */ + unsigned int lookup3 = + ((u_numeric.level3[index3>>4] + | (u_numeric.level3[(index3>>4)+1] << 16)) + >> (index3 % 16)) + & 0x7f; + + return u_numeric_values[lookup3]; + } + } + } + { + const uc_fraction_t default_value = { 0, 0 }; + return default_value; + } +} diff --git a/lib/unictype/numeric.h b/lib/unictype/numeric.h new file mode 100644 index 00000000..382a093c --- /dev/null +++ b/lib/unictype/numeric.h @@ -0,0 +1,635 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Numeric values of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +static const uc_fraction_t u_numeric_values[108] = +{ + { 0, 0 }, + { 0, 1 }, + { 1, 1 }, + { 2, 1 }, + { 3, 1 }, + { 4, 1 }, + { 5, 1 }, + { 6, 1 }, + { 7, 1 }, + { 8, 1 }, + { 9, 1 }, + { 10, 1 }, + { 11, 1 }, + { 12, 1 }, + { 13, 1 }, + { 14, 1 }, + { 15, 1 }, + { 16, 1 }, + { 17, 1 }, + { 18, 1 }, + { 19, 1 }, + { 20, 1 }, + { 21, 1 }, + { 22, 1 }, + { 23, 1 }, + { 24, 1 }, + { 25, 1 }, + { 26, 1 }, + { 27, 1 }, + { 28, 1 }, + { 29, 1 }, + { 30, 1 }, + { 31, 1 }, + { 32, 1 }, + { 33, 1 }, + { 34, 1 }, + { 35, 1 }, + { 36, 1 }, + { 37, 1 }, + { 38, 1 }, + { 39, 1 }, + { 40, 1 }, + { 41, 1 }, + { 42, 1 }, + { 43, 1 }, + { 44, 1 }, + { 45, 1 }, + { 46, 1 }, + { 47, 1 }, + { 48, 1 }, + { 49, 1 }, + { 50, 1 }, + { 60, 1 }, + { 70, 1 }, + { 80, 1 }, + { 90, 1 }, + { 100, 1 }, + { 200, 1 }, + { 300, 1 }, + { 400, 1 }, + { 500, 1 }, + { 600, 1 }, + { 700, 1 }, + { 800, 1 }, + { 900, 1 }, + { 1000, 1 }, + { 2000, 1 }, + { 3000, 1 }, + { 4000, 1 }, + { 5000, 1 }, + { 6000, 1 }, + { 7000, 1 }, + { 8000, 1 }, + { 9000, 1 }, + { 10000, 1 }, + { 20000, 1 }, + { 30000, 1 }, + { 40000, 1 }, + { 50000, 1 }, + { 60000, 1 }, + { 70000, 1 }, + { 80000, 1 }, + { 90000, 1 }, + { 100000, 1 }, + { -1, 2 }, + { 1, 2 }, + { 3, 2 }, + { 5, 2 }, + { 7, 2 }, + { 9, 2 }, + { 11, 2 }, + { 13, 2 }, + { 15, 2 }, + { 17, 2 }, + { 1, 3 }, + { 2, 3 }, + { 1, 4 }, + { 3, 4 }, + { 1, 5 }, + { 2, 5 }, + { 3, 5 }, + { 4, 5 }, + { 1, 6 }, + { 5, 6 }, + { 1, 8 }, + { 3, 8 }, + { 5, 8 }, + { 7, 8 } +}; +#define numeric_header_0 16 +#define numeric_header_1 3 +#define numeric_header_2 7 +#define numeric_header_3 511 +#define numeric_header_4 127 +static const +struct + { + int level1[3]; + short level2[3 << 9]; + unsigned short level3[44 * 56 + 1]; + } +u_numeric = +{ + { 0, 512, 1024 }, + { + 0, 128, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 256, 384, -1, 512, + -1, -1, 640, 768, 640, 640, 640, 896, + 1024, 640, 1152, -1, 1280, 1280, 1408, -1, + 512, 1536, -1, -1, -1, -1, 1664, -1, + -1, -1, -1, -1, -1, 1792, -1, 1920, + 1536, -1, 2048, 1280, -1, -1, 1280, 0, + 2176, -1, -1, -1, -1, -1, -1, -1, + 2304, 2432, 2560, 2688, -1, -1, -1, -1, + 2816, 2944, -1, -1, -1, -1, 3072, 3200, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 3328, -1, -1, -1, -1, -1, -1, + 3456, -1, -1, 3584, 3712, 3840, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 3968, -1, -1, -1, + -1, 1280, 2432, -1, 1280, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 4096, 4224, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1536, -1, + -1, -1, 4352, 4480, -1, -1, 4608, 4736, + -1, 3968, -1, -1, -1, -1, -1, -1, + -1, -1, 4864, -1, 4992, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 5120, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 5248, -1, + -1, -1, -1, -1, -1, -1, -1, 5376, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 5504, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, + 0x0910, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc000, 0x0080, 0x0000, + 0x0000, 0x0001, 0xae00, 0x0186, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 0x0005, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, 0xc142, 0x4070, + 0x1424, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, 0xc142, 0x4070, + 0x1424, 0x0000, 0x2000, 0x1018, 0x800a, 0x0008, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, 0xc142, 0x4070, + 0x1424, 0x5c0b, 0x0010, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, 0xc142, 0x4070, + 0x1424, 0x0000, 0x0000, 0x0000, 0x0100, 0x80c1, 0x1820, 0x0010, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, 0xc142, 0x4070, + 0x1424, 0x5c0b, 0x5c10, 0x030d, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, + 0x1c30, 0x0910, 0xd545, 0xc57a, 0xb566, 0x6e5b, 0x0a97, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, + 0x5080, 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x80c1, 0x3050, + 0x101c, 0xc509, 0xf2a2, 0xcd49, 0x3568, 0x0ddb, 0x04a7, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2648, 0x0014, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 0x0005, 0x0000, + 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0400, 0x0304, + 0xc142, 0x4070, 0x1424, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, + 0x0005, 0x0000, 0x0000, 0xc101, 0x5080, 0x1c30, 0x0910, 0x0005, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0001, 0x5000, 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, + 0xc101, 0x5080, 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xfbc0, 0x8f15, 0x65c9, 0x19f3, + 0x569d, 0x05af, 0x0182, 0x60a1, 0x2038, 0x8a12, 0xa305, 0xc331, + 0x82f1, 0x0182, 0x60a1, 0x2038, 0x8a12, 0xa305, 0xc331, 0x82f1, + 0xa2c1, 0x0012, 0xcc38, 0x539c, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0182, 0x60a1, 0x2038, 0x8a12, 0xa305, 0x78e1, + 0x2240, 0x0992, 0x22a5, 0x1018, 0x860a, 0x2203, 0x58a1, 0x1a30, + 0x078e, 0x2224, 0x5099, 0x822a, 0xa101, 0x3860, 0x1220, 0x058a, + 0xe1a3, 0x4078, 0x9222, 0xa509, 0x0002, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8040, 0x70d1, + 0x203c, 0xc911, 0x5284, 0x0c11, 0x0508, 0x01c3, 0x5091, 0x022c, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0800, 0x8406, 0xe182, 0x4880, 0x1628, + 0x0182, 0x60a1, 0x2038, 0x8a12, 0x6085, 0x2840, 0x0e18, 0x8488, + 0x0162, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0x0002, + 0x0000, 0x0000, 0x0000, 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc100, 0x5080, + 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x8b00, 0x07ca, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, + 0x4060, 0x0028, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0182, 0x60a1, + 0x2038, 0x8a12, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xcb00, 0x9305, 0x6cd1, 0x1d38, 0x07cf, + 0x1214, 0x488d, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0182, 0x60a1, 0x2038, 0x8a12, 0x0005, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9280, 0x84e9, 0xa94a, + 0xac56, 0xeb96, 0x8b05, 0x66c9, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc101, 0x5080, + 0x1c30, 0x0910, 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, + 0x0000, 0x0000, 0x0160, 0x0000, 0x0300, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0380, 0x00e0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5800, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0304, 0xc142, 0x4070, 0x1424, 0xca8b, + 0x3527, 0xd5a3, 0x376c, 0x4e5c, 0xe3b7, 0x7cf5, 0x603f, 0x3850, + 0x1624, 0x478d, 0x5264, 0x64b9, 0x9d36, 0x684f, 0x0a54, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xaae0, 0x30c0, 0x15e3, 0x869d, + 0x0cc5, 0x0bc7, 0x0d16, 0x198b, 0x178e, 0x3a54, 0x0217, 0x6081, + 0x1830, 0x0c0c, 0xc58b, 0xb162, 0xccf8, 0xb366, 0x4e19, 0xe3c7, + 0x78f1, 0x60bc, 0x30d1, 0x56ab, 0x61bf, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0040, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xc302, 0x0662, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x1b80, 0x0000, 0x0000, 0x0000, + 0x1000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xc100, 0x5160, 0x01c1, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0800, 0x1516, 0x001c, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0182, 0xb0a1, 0xe0a8, 0x0082, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x4203, 0x70c1, 0x2440, 0x8414, 0xe182, 0x4880, 0x0a28, 0x0386, + 0xa122, 0x0c10, 0x0508, 0x01c3, 0x5091, 0x0608, 0x8284, 0x4061, + 0x1420, 0x070c, 0x4244, 0x1821, 0x0810, 0x0305, 0x2000, 0x1018, + 0x0508, 0x8103, 0x2850, 0x0a14, 0x0407, 0x9102, 0x2848, 0x0a14, + 0x80c5, 0x3050, 0x041c, 0x4203, 0x60a1, 0x0030, 0x8200, 0xf781, + 0xf67b, 0xd17e, 0x3360, 0x0018, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0182, 0x60a1, 0x2038, 0x8a12, 0xe545, 0x9a93, + 0x6ad1, 0x1bb6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0404, 0x4203, 0x70c1, 0x2440, 0x0114, 0x80c1, + 0x3050, 0x101c, 0x4509, 0x3040, 0x1420, 0x070c, 0x4244, 0x1011, + 0x080c, 0xc305, 0x9101, 0x0450, 0x0304, 0xc142, 0x4070, 0x1424, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000 + } +}; diff --git a/lib/unictype/pr_alphabetic.c b/lib/unictype/pr_alphabetic.c new file mode 100644 index 00000000..99920916 --- /dev/null +++ b/lib/unictype/pr_alphabetic.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_alphabetic table. */ +#include "pr_alphabetic.h" + +bool +uc_is_property_alphabetic (ucs4_t uc) +{ + return bitmap_lookup (&u_property_alphabetic, uc); +} + +const uc_property_t UC_PROPERTY_ALPHABETIC = + { &uc_is_property_alphabetic }; diff --git a/lib/unictype/pr_alphabetic.h b/lib/unictype/pr_alphabetic.h new file mode 100644 index 00000000..09ea6c84 --- /dev/null +++ b/lib/unictype/pr_alphabetic.h @@ -0,0 +1,588 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[3]; + short level2[3 << 7]; + /*unsigned*/ int level3[44 << 4]; + } +u_property_alphabetic = +{ + { 3 }, + { + 4 * sizeof (int) / sizeof (short) + 0, + 4 * sizeof (int) / sizeof (short) + 128, + 4 * sizeof (int) / sizeof (short) + 256 + }, + { + 4 + 384 * sizeof (short) / sizeof (int) + 0, + 4 + 384 * sizeof (short) / sizeof (int) + 16, + 4 + 384 * sizeof (short) / sizeof (int) + 32, + 4 + 384 * sizeof (short) / sizeof (int) + 48, + 4 + 384 * sizeof (short) / sizeof (int) + 64, + 4 + 384 * sizeof (short) / sizeof (int) + 80, + 4 + 384 * sizeof (short) / sizeof (int) + 96, + 4 + 384 * sizeof (short) / sizeof (int) + 112, + 4 + 384 * sizeof (short) / sizeof (int) + 128, + 4 + 384 * sizeof (short) / sizeof (int) + 144, + 4 + 384 * sizeof (short) / sizeof (int) + 160, + 4 + 384 * sizeof (short) / sizeof (int) + 176, + 4 + 384 * sizeof (short) / sizeof (int) + 192, + 4 + 384 * sizeof (short) / sizeof (int) + 208, + 4 + 384 * sizeof (short) / sizeof (int) + 224, + 4 + 384 * sizeof (short) / sizeof (int) + 240, + 4 + 384 * sizeof (short) / sizeof (int) + 256, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 272, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 352, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 368, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 384, + 4 + 384 * sizeof (short) / sizeof (int) + 400, + 4 + 384 * sizeof (short) / sizeof (int) + 416, + 4 + 384 * sizeof (short) / sizeof (int) + 432, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 448, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 464, + 4 + 384 * sizeof (short) / sizeof (int) + 480, + 4 + 384 * sizeof (short) / sizeof (int) + 496, + 4 + 384 * sizeof (short) / sizeof (int) + 512, + 4 + 384 * sizeof (short) / sizeof (int) + 528, + 4 + 384 * sizeof (short) / sizeof (int) + 544, + 4 + 384 * sizeof (short) / sizeof (int) + 560, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 576, + 4 + 384 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 608, + 4 + 384 * sizeof (short) / sizeof (int) + 624, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 640, + 4 + 384 * sizeof (short) / sizeof (int) + 656, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 672, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 688, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, + 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, + 0x00000000, 0x00000000, 0x00000020, 0x3CDF0000, + 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0x027FFFFF, 0xFFFFFFFE, + 0x000000FF, 0xBFFF0000, 0xFFFF00B6, 0x000707FF, + 0x07FF0000, 0xFFFFFFFE, 0x7EFFFFFF, 0xFFFFC000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x1FEFFFFF, 0x9C00E1FE, + 0xFFFF0000, 0xFFFFFFFF, 0xFFFFE000, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFFFFC00, 0x043007FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFE, 0xE3FFFFFF, 0xFF011FFF, 0xF806000F, + 0xFFF99FEE, 0xE3C5FDFF, 0xB080599F, 0x0003000F, + 0xFFF987EE, 0xC36DFDFF, 0x5E021987, 0x003F0000, + 0xFFFBBFEE, 0xE3EDFDFF, 0x00011BBF, 0x0000000F, + 0xFFF99FEE, 0xE3EDFDFF, 0xB0C0199F, 0x0002000F, + 0xD63DC7EC, 0xC3FFC718, 0x00811DC7, 0x00000000, + 0xFFFDDFEE, 0xE3EFFDFF, 0x03601DDF, 0x0000000F, + 0xFFFDDFEC, 0xE3EFFDFF, 0x40601DDF, 0x0000000F, + 0xFFFDDFEC, 0xE3FFFDFF, 0x00801DDF, 0xFC00000F, + 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F807F, 0x000C0000, + 0xFFFFFFFE, 0x07FFFFFF, 0x0000207F, 0x00000000, + 0xFEF02596, 0x3BFFECAE, 0x3000205F, 0x00000000, + 0x00000001, 0x00000000, 0xFFFFFEFF, 0xFFFE1FFF, + 0xFEFF0F03, 0x1FFFFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xF97FFFFF, 0xFFFF0000, 0xFFFFC1E7, + 0x0000407F, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x87FFFFFF, 0x00000000, + 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007F9FFF, + 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, + 0x000FDFFF, 0x000FFFFF, 0x000FFFFF, 0x000DDFFF, + 0xFFFFFFFF, 0xFFCFFFFF, 0x108001FF, 0x00000000, + 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0x000007FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x01FF0FFF, 0xFFFF0000, 0x001F3FFF, + 0xFFFFFFFF, 0xFFFF03FF, 0x000003FF, 0x00000000, + 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFEFFFFF, 0x00000FEF, 0x00000000, + 0xFFFFFFFF, 0x0000C3FF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x003FFFFF, 0xFC00E000, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, + 0x00000000, 0x00000000, 0x00000000, 0x80020000, + 0x001F0000, 0x00000000, 0x00000000, 0x00000000, + 0x3E2FFC84, 0xF3FFBD50, 0x000043E0, 0xFFFFFFFF, + 0x000001FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFC00000, 0xFFFFFFFF, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, + 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0xFFFFFFFF, + 0x00000000, 0x00008000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000000E0, 0x1F3E03FE, 0xFFFFFFFE, 0xFFFFFFFF, + 0xE07FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00007FFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0x00000C00, 0xFFFFFFFF, 0x80007FFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000019FF, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFF7BB, 0x000000FF, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFC00, 0xFFFF07FF, 0x0007FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x007FFFFF, 0x00003FFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xE0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, + 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, + 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, + 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEFF06F, 0x000FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, + 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, + 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_ascii_hex_digit.c b/lib/unictype/pr_ascii_hex_digit.c new file mode 100644 index 00000000..90d3d3ad --- /dev/null +++ b/lib/unictype/pr_ascii_hex_digit.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_ascii_hex_digit table. */ +#include "pr_ascii_hex_digit.h" + +bool +uc_is_property_ascii_hex_digit (ucs4_t uc) +{ + return bitmap_lookup (&u_property_ascii_hex_digit, uc); +} + +const uc_property_t UC_PROPERTY_ASCII_HEX_DIGIT = + { &uc_is_property_ascii_hex_digit }; diff --git a/lib/unictype/pr_ascii_hex_digit.h b/lib/unictype/pr_ascii_hex_digit.h new file mode 100644 index 00000000..d7884ca1 --- /dev/null +++ b/lib/unictype/pr_ascii_hex_digit.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_ascii_hex_digit = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x03FF0000, 0x0000007E, 0x0000007E, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_bidi_arabic_digit.c b/lib/unictype/pr_bidi_arabic_digit.c new file mode 100644 index 00000000..15f5f6be --- /dev/null +++ b/lib/unictype/pr_bidi_arabic_digit.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_arabic_digit table. */ +#include "pr_bidi_arabic_digit.h" + +bool +uc_is_property_bidi_arabic_digit (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_arabic_digit, uc); +} + +#else + +bool +uc_is_property_bidi_arabic_digit (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_AN); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_ARABIC_DIGIT = + { &uc_is_property_bidi_arabic_digit }; diff --git a/lib/unictype/pr_bidi_arabic_digit.h b/lib/unictype/pr_bidi_arabic_digit.h new file mode 100644 index 00000000..999dda38 --- /dev/null +++ b/lib/unictype/pr_bidi_arabic_digit.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_bidi_arabic_digit = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x0000000F, 0x00000000, 0x00000000, 0x00001BFF, + 0x00000000, 0x00000000, 0x20000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_bidi_arabic_right_to_left.c b/lib/unictype/pr_bidi_arabic_right_to_left.c new file mode 100644 index 00000000..81667675 --- /dev/null +++ b/lib/unictype/pr_bidi_arabic_right_to_left.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_arabic_right_to_left table. */ +#include "pr_bidi_arabic_right_to_left.h" + +bool +uc_is_property_bidi_arabic_right_to_left (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_arabic_right_to_left, uc); +} + +#else + +bool +uc_is_property_bidi_arabic_right_to_left (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_AL); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT = + { &uc_is_property_bidi_arabic_right_to_left }; diff --git a/lib/unictype/pr_bidi_arabic_right_to_left.h b/lib/unictype/pr_bidi_arabic_right_to_left.h new file mode 100644 index 00000000..4a566d6f --- /dev/null +++ b/lib/unictype/pr_bidi_arabic_right_to_left.h @@ -0,0 +1,172 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_property_bidi_arabic_right_to_left = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + 2 + 128 * sizeof (short) / sizeof (int) + 64 + }, + { + 0xF8002930, 0xFFFFFFFF, 0x800007FF, 0xFFFEE000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFC00C060, + 0xFFFD7FFF, 0x0000FFFF, 0xFFFFF800, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE003F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000003E0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0xDFFF0000, + 0xFC000000, 0x0000FF80, 0x00080000, 0xFFFFF080, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_bidi_block_separator.c b/lib/unictype/pr_bidi_block_separator.c new file mode 100644 index 00000000..1775d365 --- /dev/null +++ b/lib/unictype/pr_bidi_block_separator.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_block_separator table. */ +#include "pr_bidi_block_separator.h" + +bool +uc_is_property_bidi_block_separator (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_block_separator, uc); +} + +#else + +bool +uc_is_property_bidi_block_separator (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_B); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_BLOCK_SEPARATOR = + { &uc_is_property_bidi_block_separator }; diff --git a/lib/unictype/pr_bidi_block_separator.h b/lib/unictype/pr_bidi_block_separator.h new file mode 100644 index 00000000..e82d2d45 --- /dev/null +++ b/lib/unictype/pr_bidi_block_separator.h @@ -0,0 +1,160 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[2 << 4]; + } +u_property_bidi_block_separator = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x70002400, 0x00000000, 0x00000000, 0x00000000, + 0x00000020, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_bidi_boundary_neutral.c b/lib/unictype/pr_bidi_boundary_neutral.c new file mode 100644 index 00000000..923e89f7 --- /dev/null +++ b/lib/unictype/pr_bidi_boundary_neutral.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_boundary_neutral table. */ +#include "pr_bidi_boundary_neutral.h" + +bool +uc_is_property_bidi_boundary_neutral (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_boundary_neutral, uc); +} + +#else + +bool +uc_is_property_bidi_boundary_neutral (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_BN); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL = + { &uc_is_property_bidi_boundary_neutral }; diff --git a/lib/unictype/pr_bidi_boundary_neutral.h b/lib/unictype/pr_bidi_boundary_neutral.h new file mode 100644 index 00000000..8bc59e87 --- /dev/null +++ b/lib/unictype/pr_bidi_boundary_neutral.h @@ -0,0 +1,590 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[17]; + short level2[4 << 7]; + /*unsigned*/ int level3[9 << 4]; + } +u_property_bidi_boundary_neutral = +{ + { 17 }, + { + 18 * sizeof (int) / sizeof (short) + 0, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256 + }, + { + 18 + 512 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 48, + 18 + 512 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 96, + 18 + 512 * sizeof (short) / sizeof (int) + 112, + 18 + 512 * sizeof (short) / sizeof (int) + 128, + 18 + 512 * sizeof (short) / sizeof (int) + 128, + 18 + 512 * sizeof (short) / sizeof (int) + 128, + 18 + 512 * sizeof (short) / sizeof (int) + 128, + 18 + 512 * sizeof (short) / sizeof (int) + 128, + 18 + 512 * sizeof (short) / sizeof (int) + 128, + 18 + 512 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 96 + }, + { + 0x0FFFC1FF, 0x00000000, 0x00000000, 0x80000000, + 0xFFFFFFDF, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00008000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00003800, 0x00000000, 0x00000000, 0x0000FC1F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0x0000FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xC1FF0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x07F80000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xC0000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF + } +}; diff --git a/lib/unictype/pr_bidi_common_separator.c b/lib/unictype/pr_bidi_common_separator.c new file mode 100644 index 00000000..2cc1f140 --- /dev/null +++ b/lib/unictype/pr_bidi_common_separator.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_common_separator table. */ +#include "pr_bidi_common_separator.h" + +bool +uc_is_property_bidi_common_separator (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_common_separator, uc); +} + +#else + +bool +uc_is_property_bidi_common_separator (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_CS); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_COMMON_SEPARATOR = + { &uc_is_property_bidi_common_separator }; diff --git a/lib/unictype/pr_bidi_common_separator.h b/lib/unictype/pr_bidi_common_separator.h new file mode 100644 index 00000000..67dedbb2 --- /dev/null +++ b/lib/unictype/pr_bidi_common_separator.h @@ -0,0 +1,168 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[4 << 4]; + } +u_property_bidi_common_separator = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48 + }, + { + 0x00000000, 0x0400D000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00001000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00008000, 0x00000010, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00250000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0400D000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_bidi_control.c b/lib/unictype/pr_bidi_control.c new file mode 100644 index 00000000..9a4f209c --- /dev/null +++ b/lib/unictype/pr_bidi_control.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_bidi_control table. */ +#include "pr_bidi_control.h" + +bool +uc_is_property_bidi_control (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_control, uc); +} + +const uc_property_t UC_PROPERTY_BIDI_CONTROL = + { &uc_is_property_bidi_control }; diff --git a/lib/unictype/pr_bidi_control.h b/lib/unictype/pr_bidi_control.h new file mode 100644 index 00000000..b676a970 --- /dev/null +++ b/lib/unictype/pr_bidi_control.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_bidi_control = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x0000C000, 0x00007C00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_bidi_embedding_or_override.c b/lib/unictype/pr_bidi_embedding_or_override.c new file mode 100644 index 00000000..70265223 --- /dev/null +++ b/lib/unictype/pr_bidi_embedding_or_override.c @@ -0,0 +1,49 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_embedding_or_override table. */ +#include "pr_bidi_embedding_or_override.h" + +bool +uc_is_property_bidi_embedding_or_override (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_embedding_or_override, uc); +} + +#else + +bool +uc_is_property_bidi_embedding_or_override (ucs4_t uc) +{ + int category = uc_bidi_category (uc); + return (category == UC_BIDI_LRE || category == UC_BIDI_LRO + || category == UC_BIDI_RLE || category == UC_BIDI_RLO); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE = + { &uc_is_property_bidi_embedding_or_override }; diff --git a/lib/unictype/pr_bidi_embedding_or_override.h b/lib/unictype/pr_bidi_embedding_or_override.h new file mode 100644 index 00000000..d14a500f --- /dev/null +++ b/lib/unictype/pr_bidi_embedding_or_override.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_bidi_embedding_or_override = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00006C00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_bidi_eur_num_separator.c b/lib/unictype/pr_bidi_eur_num_separator.c new file mode 100644 index 00000000..53d3ea74 --- /dev/null +++ b/lib/unictype/pr_bidi_eur_num_separator.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_eur_num_separator table. */ +#include "pr_bidi_eur_num_separator.h" + +bool +uc_is_property_bidi_eur_num_separator (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_eur_num_separator, uc); +} + +#else + +bool +uc_is_property_bidi_eur_num_separator (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_ES); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR = + { &uc_is_property_bidi_eur_num_separator }; diff --git a/lib/unictype/pr_bidi_eur_num_separator.h b/lib/unictype/pr_bidi_eur_num_separator.h new file mode 100644 index 00000000..a18c2493 --- /dev/null +++ b/lib/unictype/pr_bidi_eur_num_separator.h @@ -0,0 +1,172 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_property_bidi_eur_num_separator = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64 + }, + { + 0x00000000, 0x00002800, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0C000000, + 0x00000C00, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00040000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0000000C, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00002800, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_bidi_eur_num_terminator.c b/lib/unictype/pr_bidi_eur_num_terminator.c new file mode 100644 index 00000000..de1f4ab9 --- /dev/null +++ b/lib/unictype/pr_bidi_eur_num_terminator.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_eur_num_terminator table. */ +#include "pr_bidi_eur_num_terminator.h" + +bool +uc_is_property_bidi_eur_num_terminator (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_eur_num_terminator, uc); +} + +#else + +bool +uc_is_property_bidi_eur_num_terminator (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_ET); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR = + { &uc_is_property_bidi_eur_num_terminator }; diff --git a/lib/unictype/pr_bidi_eur_num_terminator.h b/lib/unictype/pr_bidi_eur_num_terminator.h new file mode 100644 index 00000000..5228108b --- /dev/null +++ b/lib/unictype/pr_bidi_eur_num_terminator.h @@ -0,0 +1,188 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[9 << 4]; + } +u_property_bidi_eur_num_terminator = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + 2 + 128 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 128 + }, + { + 0x00000000, 0x00000038, 0x00000000, 0x00000000, + 0x00000000, 0x0003003C, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000600, 0x00000000, 0x00000000, 0x00000400, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000C0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00020000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x02000000, + 0x00000000, 0x80000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x08000000, 0x00000000, + 0x00000000, 0x001F0000, 0x00000000, 0x00000000, + 0x00000000, 0x003FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00004000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00080000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x00000600, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000038, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000063 + } +}; diff --git a/lib/unictype/pr_bidi_european_digit.c b/lib/unictype/pr_bidi_european_digit.c new file mode 100644 index 00000000..e27c5d3a --- /dev/null +++ b/lib/unictype/pr_bidi_european_digit.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_european_digit table. */ +#include "pr_bidi_european_digit.h" + +bool +uc_is_property_bidi_european_digit (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_european_digit, uc); +} + +#else + +bool +uc_is_property_bidi_european_digit (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_EN); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_EUROPEAN_DIGIT = + { &uc_is_property_bidi_european_digit }; diff --git a/lib/unictype/pr_bidi_european_digit.h b/lib/unictype/pr_bidi_european_digit.h new file mode 100644 index 00000000..27d81bd2 --- /dev/null +++ b/lib/unictype/pr_bidi_european_digit.h @@ -0,0 +1,307 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[6 << 4]; + } +u_property_bidi_european_digit = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, + 0x00000000, 0x020C0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03F10000, + 0x000003FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0FFFFF00, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF + } +}; diff --git a/lib/unictype/pr_bidi_hebrew_right_to_left.c b/lib/unictype/pr_bidi_hebrew_right_to_left.c new file mode 100644 index 00000000..9dced034 --- /dev/null +++ b/lib/unictype/pr_bidi_hebrew_right_to_left.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_hebrew_right_to_left table. */ +#include "pr_bidi_hebrew_right_to_left.h" + +bool +uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_hebrew_right_to_left, uc); +} + +#else + +bool +uc_is_property_bidi_hebrew_right_to_left (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_R); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT = + { &uc_is_property_bidi_hebrew_right_to_left }; diff --git a/lib/unictype/pr_bidi_hebrew_right_to_left.h b/lib/unictype/pr_bidi_hebrew_right_to_left.h new file mode 100644 index 00000000..652f5ba2 --- /dev/null +++ b/lib/unictype/pr_bidi_hebrew_right_to_left.h @@ -0,0 +1,315 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[8 << 4]; + } +u_property_bidi_hebrew_right_to_left = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00010000, 0x40000000, 0xFFFFFF49, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFC3007FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00008000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xA0000000, 0xFFFFFDFF, 0x0000FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF0F91, 0x78FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF + } +}; diff --git a/lib/unictype/pr_bidi_left_to_right.c b/lib/unictype/pr_bidi_left_to_right.c new file mode 100644 index 00000000..fee8443c --- /dev/null +++ b/lib/unictype/pr_bidi_left_to_right.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_left_to_right table. */ +#include "pr_bidi_left_to_right.h" + +bool +uc_is_property_bidi_left_to_right (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_left_to_right, uc); +} + +#else + +bool +uc_is_property_bidi_left_to_right (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_L); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_LEFT_TO_RIGHT = + { &uc_is_property_bidi_left_to_right }; diff --git a/lib/unictype/pr_bidi_left_to_right.h b/lib/unictype/pr_bidi_left_to_right.h new file mode 100644 index 00000000..73ee442a --- /dev/null +++ b/lib/unictype/pr_bidi_left_to_right.h @@ -0,0 +1,706 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[17]; + short level2[4 << 7]; + /*unsigned*/ int level3[38 << 4]; + } +u_property_bidi_left_to_right = +{ + { 17 }, + { + 18 * sizeof (int) / sizeof (short) + 0, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 384, + 18 * sizeof (int) / sizeof (short) + 256, + 18 * sizeof (int) / sizeof (short) + 256 + }, + { + 18 + 512 * sizeof (short) / sizeof (int) + 0, + 18 + 512 * sizeof (short) / sizeof (int) + 16, + 18 + 512 * sizeof (short) / sizeof (int) + 32, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 48, + 18 + 512 * sizeof (short) / sizeof (int) + 64, + 18 + 512 * sizeof (short) / sizeof (int) + 80, + 18 + 512 * sizeof (short) / sizeof (int) + 96, + 18 + 512 * sizeof (short) / sizeof (int) + 112, + 18 + 512 * sizeof (short) / sizeof (int) + 128, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 160, + 18 + 512 * sizeof (short) / sizeof (int) + 176, + 18 + 512 * sizeof (short) / sizeof (int) + 192, + 18 + 512 * sizeof (short) / sizeof (int) + 208, + 18 + 512 * sizeof (short) / sizeof (int) + 224, + 18 + 512 * sizeof (short) / sizeof (int) + 240, + 18 + 512 * sizeof (short) / sizeof (int) + 256, + 18 + 512 * sizeof (short) / sizeof (int) + 272, + 18 + 512 * sizeof (short) / sizeof (int) + 288, + 18 + 512 * sizeof (short) / sizeof (int) + 304, + 18 + 512 * sizeof (short) / sizeof (int) + 320, + 18 + 512 * sizeof (short) / sizeof (int) + 336, + 18 + 512 * sizeof (short) / sizeof (int) + 352, + 18 + 512 * sizeof (short) / sizeof (int) + 368, + 18 + 512 * sizeof (short) / sizeof (int) + 384, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 400, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 416, + 18 + 512 * sizeof (short) / sizeof (int) + 432, + 18 + 512 * sizeof (short) / sizeof (int) + 448, + 18 + 512 * sizeof (short) / sizeof (int) + 464, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 480, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 496, + 18 + 512 * sizeof (short) / sizeof (int) + 512, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 528, + 18 + 512 * sizeof (short) / sizeof (int) + 544, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 560, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 576, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 592, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 144, + 18 + 512 * sizeof (short) / sizeof (int) + 592 + }, + { + 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, + 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xF9FFFFFF, 0x00030003, 0x0000401F, + 0x00000000, 0x00000000, 0x00000000, 0xBFCF0000, + 0xFFFFFF4F, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFBFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFC07, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x0000FBFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFF9, 0xEFFFFFFF, 0xFFE1DE01, 0xFFFFFFF3, + 0xFFFFFFFD, 0xEFFFFFFF, 0xFFFFDFE1, 0xFFF3FFF3, + 0xFFFFFFF9, 0xEFFFFFFF, 0xFFFDC679, 0xFFDCFFFF, + 0xFFFFFFF9, 0xEFFFFFFF, 0xFFFFDE41, 0xFFFDFFF3, + 0xFFFFFFFD, 0x6FFFFFFF, 0xFFBFDFE1, 0xFFFFFFF3, + 0xFFFFFFFB, 0xFFFFFFFF, 0xFFFFDFFE, 0xF807FFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFF9FC23E, 0x80FFFFF3, + 0xFFFFFFFF, 0xEFFFFFFF, 0xFFFFCFFF, 0xFFF9FFF3, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFDFE1, 0xFFFFFFF3, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFA3FBFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x780DFFFF, 0xFFFF807F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xE40DFFFF, 0xFFFFC0FF, 0xFFFFFFFF, + 0xFCFFFFFF, 0xC15FFFFF, 0xFFFFFFFF, 0x8001FFFF, + 0x0100FF20, 0xE0000000, 0xFFFFFFBF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x99021FFF, 0x3CFFFFFF, 0xFFE1FFFE, + 0xFFFFDF9B, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF, + 0xFC00FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xE7FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFE3FFFF, 0xFFE3FFFF, 0xFFF3FFFF, 0xFFF3FFFF, + 0xFFFFFFFF, 0xC07FFFFF, 0xD7F001BF, 0xFC00FFFF, + 0xFFFF8000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFDFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xF1FBFE78, 0xFFFFFFCE, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x00000000, + 0xFE7FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFF0, 0xE82FFFFF, 0xFFFFFFFB, 0xFFF007FF, + 0xFFFFFFFC, 0xFFFFFCC3, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFF300FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x3FFFFF80, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x5FFFFFFF, 0x1FFF1FFC, 0x9FFF1FFF, + 0x00004000, 0x00000000, 0x00000000, 0x800E0000, + 0xFFFF8000, 0xFFC00000, 0x0000FFFF, 0xFFFE0000, + 0x3E2FFC84, 0xF3FFBD50, 0x0007C3E0, 0xFFFFFFFF, + 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFC00000, 0xFFFFFFFF, 0x07FFFFFF, + 0x00200000, 0x00000000, 0x00000000, 0xFFFFFF00, + 0x00000000, 0xFFFFFF80, 0xFFFFF800, 0x00000000, + 0xF0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0000000, 0xE0001000, 0xFFFFFFF0, 0xFFFFFFFF, + 0x00000C21, 0x00000100, 0x80B85000, 0x00000001, + 0x00E00000, 0x80010000, 0x0000E800, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFE0E000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x01FFF81F, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, + 0x00000000, 0xFFFE0000, 0xFFFFFFFF, 0xFFFFFFFF, + 0x04000000, 0x00000000, 0x00000000, 0xFFF00000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFC00000, 0xF000FFFF, + 0x000000E0, 0x1F3E03FE, 0xFFFFFFFF, 0xFFFFFFFF, + 0xE1FFFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFF0, + 0x9FFFFFFF, 0xFFFFFFFF, 0x0000FFFF, 0x8FFFFFFF, + 0xFFFFFFFF, 0x0001FFFF, 0xFFFF0FFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xF87FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x0000FFFF, 0x00000000, 0xFFFFFF80, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0FF07FFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFEFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFF7BB, 0xFFFFF09F, 0xFFFFFFFF, 0xFF0FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFEF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFC03F, 0xFFFC007F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFF9981FF, 0xFFFFEFF7, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x1FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00008080, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFD, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xF000F800, 0xFFFFFFFF, 0xFFFFFFFF, 0xDFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0007FC7F, + 0xFFFFF018, 0xFFFFC3FF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0xFF800000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00003FFF, 0x00000000, + 0x00000000, 0x0000F000, 0x00000000, 0x00000000, + 0xFFF00000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF + } +}; diff --git a/lib/unictype/pr_bidi_non_spacing_mark.c b/lib/unictype/pr_bidi_non_spacing_mark.c new file mode 100644 index 00000000..660d4c13 --- /dev/null +++ b/lib/unictype/pr_bidi_non_spacing_mark.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_non_spacing_mark table. */ +#include "pr_bidi_non_spacing_mark.h" + +bool +uc_is_property_bidi_non_spacing_mark (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_non_spacing_mark, uc); +} + +#else + +bool +uc_is_property_bidi_non_spacing_mark (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_NSM); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_NON_SPACING_MARK = + { &uc_is_property_bidi_non_spacing_mark }; diff --git a/lib/unictype/pr_bidi_non_spacing_mark.h b/lib/unictype/pr_bidi_non_spacing_mark.h new file mode 100644 index 00000000..6d3c6c23 --- /dev/null +++ b/lib/unictype/pr_bidi_non_spacing_mark.h @@ -0,0 +1,528 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + /*unsigned*/ int level3[26 << 4]; + } +u_property_bidi_non_spacing_mark = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 0, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + 16 + 384 * sizeof (short) / sizeof (int) + 80, + 16 + 384 * sizeof (short) / sizeof (int) + 96, + 16 + 384 * sizeof (short) / sizeof (int) + 112, + 16 + 384 * sizeof (short) / sizeof (int) + 128, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 160, + 16 + 384 * sizeof (short) / sizeof (int) + 176, + 16 + 384 * sizeof (short) / sizeof (int) + 192, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 224, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 256, + 16 + 384 * sizeof (short) / sizeof (int) + 272, + 16 + 384 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 304, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 320, + 16 + 384 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 352, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 368, + 16 + 384 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 400, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000003F8, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, + 0x07FF0000, 0x00000000, 0x7FFFF800, 0x00010000, + 0x00000000, 0x00000000, 0xDFC00000, 0x00003D9F, + 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000006, 0x10000000, 0x001E21FE, 0x0000000C, + 0x00000002, 0x10000000, 0x0000201E, 0x0000000C, + 0x00000006, 0x10000000, 0x00023986, 0x00230000, + 0x00000006, 0x10000000, 0x000021BE, 0x0000000C, + 0x00000002, 0x90000000, 0x0040201E, 0x0000000C, + 0x00000004, 0x00000000, 0x00002001, 0x00000000, + 0x00000000, 0xC0000000, 0x00603DC1, 0x0000000C, + 0x00000000, 0x10000000, 0x00003000, 0x0000000C, + 0x00000000, 0x00000000, 0x0000201E, 0x0000000C, + 0x00000000, 0x00000000, 0x005C0400, 0x00000000, + 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, + 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, + 0x03000000, 0x02A00000, 0x00000000, 0x7FFE0000, + 0xFEFF00DF, 0x1FFFFFFF, 0x00000040, 0x00000000, + 0x00000000, 0x66FDE000, 0xC3000000, 0x001E0001, + 0x00002064, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, + 0x00000000, 0x3F800000, 0x200FFE40, 0x00000000, + 0x00003800, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x0E040187, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x01800000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000F, 0x17D00000, 0x00000004, 0x000FF800, + 0x00000003, 0x0000033C, 0x00000000, 0x00000000, + 0x00000000, 0x00CFF000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xC000007F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0x0001FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, + 0x06000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x30078000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000844, 0x00000060, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000010, 0x00000000, + 0x00000000, 0x00003FC0, 0x0003FF80, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00667E00, 0x00001008, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x40000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000FFFF, 0x0000007F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xF8000380, + 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000001C, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF + } +}; diff --git a/lib/unictype/pr_bidi_other_neutral.c b/lib/unictype/pr_bidi_other_neutral.c new file mode 100644 index 00000000..f87b5fbd --- /dev/null +++ b/lib/unictype/pr_bidi_other_neutral.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_other_neutral table. */ +#include "pr_bidi_other_neutral.h" + +bool +uc_is_property_bidi_other_neutral (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_other_neutral, uc); +} + +#else + +bool +uc_is_property_bidi_other_neutral (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_ON); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_OTHER_NEUTRAL = + { &uc_is_property_bidi_other_neutral }; diff --git a/lib/unictype/pr_bidi_other_neutral.h b/lib/unictype/pr_bidi_other_neutral.h new file mode 100644 index 00000000..2df9ce52 --- /dev/null +++ b/lib/unictype/pr_bidi_other_neutral.h @@ -0,0 +1,407 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[31 << 4]; + } +u_property_bidi_other_neutral = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + 3 + 256 * sizeof (short) / sizeof (int) + 304, + 3 + 256 * sizeof (short) / sizeof (int) + 320, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 352, + 3 + 256 * sizeof (short) / sizeof (int) + 368, + 3 + 256 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 400, + 3 + 256 * sizeof (short) / sizeof (int) + 416, + 3 + 256 * sizeof (short) / sizeof (int) + 432, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 448, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 464, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 480, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0xF80007C6, 0xF8000001, 0x78000001, + 0x00000000, 0xF9D0DBC2, 0x00800000, 0x00800000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x06000000, 0xFFFCFFFC, 0xFFFFBFE0, + 0x00000000, 0x00000000, 0x00000000, 0x40300000, + 0x000000B0, 0x00000000, 0x00000000, 0x00400000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000400, 0x00000000, 0x00000000, 0x00000000, + 0x0000C0C0, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000200, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03C00000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x05F80000, + 0x00000000, 0x00000000, 0x00000000, 0x7F000000, + 0x00000000, 0x00000000, 0x00000000, 0x00060000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x3C000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x18000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, + 0x000007FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000031, 0x00000000, + 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, + 0xFFFF0000, 0xFFE000FF, 0x7FFFFFEF, 0x70000000, + 0x00007000, 0x00000000, 0x00000000, 0x00000000, + 0xC1D0037B, 0x0C0002AF, 0xFFF83C1F, 0x00000000, + 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFF3FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0xF8000000, + 0xFFDFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF, + 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0xFFFFFFFF, + 0x000000FF, 0x00000000, 0x00000000, 0xFFFFFC00, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x1FFFEFFF, 0x0000000F, 0x00000000, + 0xFFFFF3DE, 0xFFFFFEFF, 0x7F47AFFF, 0xFFFFFFFE, + 0xFF1FFFFF, 0x7FFEFFFF, 0xFFFF17FF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x001F1FFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFE0007E0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x00000000, + 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, + 0xFFFFFF1E, 0xE0C10001, 0x00000000, 0x00000000, + 0x18000000, 0x00000001, 0x00000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0x0000000F, + 0x60000000, 0x00000000, 0xFFFF0000, 0x70000000, + 0x00000000, 0xFFFE0000, 0x0000F000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x07800000, + 0x00000000, 0x00000000, 0xC0000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFF0000, 0xFFFFFFFF, 0x0000007F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000E000, 0x00000000, 0x00000000, 0xC0080000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x00000003, 0x00000000, 0x00000000, + 0x00000100, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000F00, 0x00000000, 0x00F00000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xC0000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x03FF0000, 0xFFFF0000, 0x7FD2FFFF, 0x00000973, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xF80007C6, 0xF8000001, 0xF8000001, 0x0000003F, + 0x00000000, 0x00000000, 0x00000000, 0x3E007F1C, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0x0FFF07FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x80000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000023, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_bidi_pdf.c b/lib/unictype/pr_bidi_pdf.c new file mode 100644 index 00000000..808a1efa --- /dev/null +++ b/lib/unictype/pr_bidi_pdf.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_pdf table. */ +#include "pr_bidi_pdf.h" + +bool +uc_is_property_bidi_pdf (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_pdf, uc); +} + +#else + +bool +uc_is_property_bidi_pdf (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_PDF); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_PDF = + { &uc_is_property_bidi_pdf }; diff --git a/lib/unictype/pr_bidi_pdf.h b/lib/unictype/pr_bidi_pdf.h new file mode 100644 index 00000000..cef93250 --- /dev/null +++ b/lib/unictype/pr_bidi_pdf.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_bidi_pdf = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00001000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_bidi_segment_separator.c b/lib/unictype/pr_bidi_segment_separator.c new file mode 100644 index 00000000..0b3b08af --- /dev/null +++ b/lib/unictype/pr_bidi_segment_separator.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_segment_separator table. */ +#include "pr_bidi_segment_separator.h" + +bool +uc_is_property_bidi_segment_separator (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_segment_separator, uc); +} + +#else + +bool +uc_is_property_bidi_segment_separator (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_S); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_SEGMENT_SEPARATOR = + { &uc_is_property_bidi_segment_separator }; diff --git a/lib/unictype/pr_bidi_segment_separator.h b/lib/unictype/pr_bidi_segment_separator.h new file mode 100644 index 00000000..09b018e3 --- /dev/null +++ b/lib/unictype/pr_bidi_segment_separator.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_bidi_segment_separator = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x80000A00, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_bidi_whitespace.c b/lib/unictype/pr_bidi_whitespace.c new file mode 100644 index 00000000..d16928a1 --- /dev/null +++ b/lib/unictype/pr_bidi_whitespace.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_bidi_whitespace table. */ +#include "pr_bidi_whitespace.h" + +bool +uc_is_property_bidi_whitespace (ucs4_t uc) +{ + return bitmap_lookup (&u_property_bidi_whitespace, uc); +} + +#else + +bool +uc_is_property_bidi_whitespace (ucs4_t uc) +{ + return (uc_bidi_category (uc) == UC_BIDI_WS); +} + +#endif + +const uc_property_t UC_PROPERTY_BIDI_WHITESPACE = + { &uc_is_property_bidi_whitespace }; diff --git a/lib/unictype/pr_bidi_whitespace.h b/lib/unictype/pr_bidi_whitespace.h new file mode 100644 index 00000000..2053057c --- /dev/null +++ b/lib/unictype/pr_bidi_whitespace.h @@ -0,0 +1,172 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_property_bidi_whitespace = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00001000, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00004000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000007FF, 0x00000100, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_byname.c b/lib/unictype/pr_byname.c new file mode 100644 index 00000000..cb6e553d --- /dev/null +++ b/lib/unictype/pr_byname.c @@ -0,0 +1,59 @@ +/* Properties of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include + +/* Get gperf generated lookup function. */ +#include "unictype/pr_byname.h" + +static const uc_property_t UC_PROPERTY_NONE = { NULL }; + +uc_property_t +uc_property_byname (const char *property_name) +{ + char buf[MAX_WORD_LENGTH + 1]; + const char *cp; + char *bp; + unsigned int count; + const struct named_property *found; + + for (cp = property_name, bp = buf, count = MAX_WORD_LENGTH + 1; ; cp++, bp++) + { + unsigned char c = (unsigned char) *cp; + if (c >= 0x80) + goto invalid; + if (c >= 'A' && c <= 'Z') + c += 'a' - 'A'; + else if (c == ' ' || c == '-') + c = '_'; + *bp = c; + if (c == '\0') + break; + if (--count == 0) + goto invalid; + } + found = uc_property_lookup (buf, bp - buf); + if (found != NULL) + return found->property; + invalid: + return UC_PROPERTY_NONE; +} diff --git a/lib/unictype/pr_byname.gperf b/lib/unictype/pr_byname.gperf new file mode 100644 index 00000000..5d3daa0d --- /dev/null +++ b/lib/unictype/pr_byname.gperf @@ -0,0 +1,89 @@ +struct named_property { const char *name; uc_property_t property; }; +%struct-type +%language=ANSI-C +%define hash-function-name properties_hash +%define lookup-function-name uc_property_lookup +%7bit +%readonly-tables +%global-table +%define word-array-name properties +%% +white_space, { &uc_is_property_white_space } +alphabetic, { &uc_is_property_alphabetic } +other_alphabetic, { &uc_is_property_other_alphabetic } +not_a_character, { &uc_is_property_not_a_character } +default_ignorable_code_point, { &uc_is_property_default_ignorable_code_point } +other_default_ignorable_code_point, { &uc_is_property_other_default_ignorable_code_point } +deprecated, { &uc_is_property_deprecated } +logical_order_exception, { &uc_is_property_logical_order_exception } +variation_selector, { &uc_is_property_variation_selector } +private_use, { &uc_is_property_private_use } +unassigned_code_value, { &uc_is_property_unassigned_code_value } +uppercase, { &uc_is_property_uppercase } +other_uppercase, { &uc_is_property_other_uppercase } +lowercase, { &uc_is_property_lowercase } +other_lowercase, { &uc_is_property_other_lowercase } +titlecase, { &uc_is_property_titlecase } +soft_dotted, { &uc_is_property_soft_dotted } +id_start, { &uc_is_property_id_start } +other_id_start, { &uc_is_property_other_id_start } +id_continue, { &uc_is_property_id_continue } +other_id_continue, { &uc_is_property_other_id_continue } +xid_start, { &uc_is_property_xid_start } +xid_continue, { &uc_is_property_xid_continue } +pattern_white_space, { &uc_is_property_pattern_white_space } +pattern_syntax, { &uc_is_property_pattern_syntax } +join_control, { &uc_is_property_join_control } +grapheme_base, { &uc_is_property_grapheme_base } +grapheme_extend, { &uc_is_property_grapheme_extend } +other_grapheme_extend, { &uc_is_property_other_grapheme_extend } +grapheme_link, { &uc_is_property_grapheme_link } +bidi_control, { &uc_is_property_bidi_control } +bidi_left_to_right, { &uc_is_property_bidi_left_to_right } +bidi_hebrew_right_to_left, { &uc_is_property_bidi_hebrew_right_to_left } +bidi_arabic_right_to_left, { &uc_is_property_bidi_arabic_right_to_left } +bidi_european_digit, { &uc_is_property_bidi_european_digit } +bidi_eur_num_separator, { &uc_is_property_bidi_eur_num_separator } +bidi_eur_num_terminator, { &uc_is_property_bidi_eur_num_terminator } +bidi_arabic_digit, { &uc_is_property_bidi_arabic_digit } +bidi_common_separator, { &uc_is_property_bidi_common_separator } +bidi_block_separator, { &uc_is_property_bidi_block_separator } +bidi_segment_separator, { &uc_is_property_bidi_segment_separator } +bidi_whitespace, { &uc_is_property_bidi_whitespace } +bidi_non_spacing_mark, { &uc_is_property_bidi_non_spacing_mark } +bidi_boundary_neutral, { &uc_is_property_bidi_boundary_neutral } +bidi_pdf, { &uc_is_property_bidi_pdf } +bidi_embedding_or_override, { &uc_is_property_bidi_embedding_or_override } +bidi_other_neutral, { &uc_is_property_bidi_other_neutral } +hex_digit, { &uc_is_property_hex_digit } +ascii_hex_digit, { &uc_is_property_ascii_hex_digit } +ideographic, { &uc_is_property_ideographic } +unified_ideograph, { &uc_is_property_unified_ideograph } +radical, { &uc_is_property_radical } +ids_binary_operator, { &uc_is_property_ids_binary_operator } +ids_trinary_operator, { &uc_is_property_ids_trinary_operator } +zero_width, { &uc_is_property_zero_width } +space, { &uc_is_property_space } +non_break, { &uc_is_property_non_break } +iso_control, { &uc_is_property_iso_control } +format_control, { &uc_is_property_format_control } +dash, { &uc_is_property_dash } +hyphen, { &uc_is_property_hyphen } +punctuation, { &uc_is_property_punctuation } +line_separator, { &uc_is_property_line_separator } +paragraph_separator, { &uc_is_property_paragraph_separator } +quotation_mark, { &uc_is_property_quotation_mark } +sentence_terminal, { &uc_is_property_sentence_terminal } +terminal_punctuation, { &uc_is_property_terminal_punctuation } +currency_symbol, { &uc_is_property_currency_symbol } +math, { &uc_is_property_math } +other_math, { &uc_is_property_other_math } +paired_punctuation, { &uc_is_property_paired_punctuation } +left_of_pair, { &uc_is_property_left_of_pair } +combining, { &uc_is_property_combining } +composite, { &uc_is_property_composite } +decimal_digit, { &uc_is_property_decimal_digit } +numeric, { &uc_is_property_numeric } +diacritic, { &uc_is_property_diacritic } +extender, { &uc_is_property_extender } +ignorable_control, { &uc_is_property_ignorable_control } diff --git a/lib/unictype/pr_byname.h b/lib/unictype/pr_byname.h new file mode 100644 index 00000000..d5290015 --- /dev/null +++ b/lib/unictype/pr_byname.h @@ -0,0 +1,289 @@ +/* ANSI-C code produced by gperf version 3.0.4 */ +/* Command-line: gperf -m 10 ./unictype/pr_byname.gperf */ +/* Computed positions: -k'1,8,10' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 1 "./unictype/pr_byname.gperf" +struct named_property { const char *name; uc_property_t property; }; + +#define TOTAL_KEYWORDS 79 +#define MIN_WORD_LENGTH 4 +#define MAX_WORD_LENGTH 34 +#define MIN_HASH_VALUE 7 +#define MAX_HASH_VALUE 120 +/* maximum key range = 114, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +properties_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 12, 121, 30, 0, 51, + 37, 1, 42, 43, 36, 0, 4, 50, 14, 47, + 1, 9, 3, 43, 0, 13, 7, 37, 30, 0, + 44, 27, 0, 121, 121, 121, 121, 121 + }; + register int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[9]]; + /*FALLTHROUGH*/ + case 9: + case 8: + hval += asso_values[(unsigned char)str[7]]; + /*FALLTHROUGH*/ + case 7: + case 6: + case 5: + case 4: + case 3: + case 2: + case 1: + hval += asso_values[(unsigned char)str[0]]; + break; + } + return hval; +} + +static const struct named_property properties[] = + { + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 62 "./unictype/pr_byname.gperf" + {"radical", { &uc_is_property_radical }}, +#line 86 "./unictype/pr_byname.gperf" + {"numeric", { &uc_is_property_numeric }}, +#line 88 "./unictype/pr_byname.gperf" + {"extender", { &uc_is_property_extender }}, + {""}, {""}, {""}, +#line 41 "./unictype/pr_byname.gperf" + {"bidi_control", { &uc_is_property_bidi_control }}, +#line 60 "./unictype/pr_byname.gperf" + {"ideographic", { &uc_is_property_ideographic }}, +#line 28 "./unictype/pr_byname.gperf" + {"id_start", { &uc_is_property_id_start }}, +#line 52 "./unictype/pr_byname.gperf" + {"bidi_whitespace", { &uc_is_property_bidi_whitespace }}, +#line 36 "./unictype/pr_byname.gperf" + {"join_control", { &uc_is_property_join_control }}, +#line 66 "./unictype/pr_byname.gperf" + {"space", { &uc_is_property_space }}, + {""}, {""}, +#line 64 "./unictype/pr_byname.gperf" + {"ids_trinary_operator", { &uc_is_property_ids_trinary_operator }}, +#line 45 "./unictype/pr_byname.gperf" + {"bidi_european_digit", { &uc_is_property_bidi_european_digit }}, +#line 46 "./unictype/pr_byname.gperf" + {"bidi_eur_num_separator", { &uc_is_property_bidi_eur_num_separator }}, +#line 47 "./unictype/pr_byname.gperf" + {"bidi_eur_num_terminator", { &uc_is_property_bidi_eur_num_terminator }}, +#line 81 "./unictype/pr_byname.gperf" + {"paired_punctuation", { &uc_is_property_paired_punctuation }}, +#line 43 "./unictype/pr_byname.gperf" + {"bidi_hebrew_right_to_left", { &uc_is_property_bidi_hebrew_right_to_left }}, +#line 68 "./unictype/pr_byname.gperf" + {"iso_control", { &uc_is_property_iso_control }}, +#line 23 "./unictype/pr_byname.gperf" + {"other_uppercase", { &uc_is_property_other_uppercase }}, +#line 26 "./unictype/pr_byname.gperf" + {"titlecase", { &uc_is_property_titlecase }}, +#line 72 "./unictype/pr_byname.gperf" + {"punctuation", { &uc_is_property_punctuation }}, +#line 73 "./unictype/pr_byname.gperf" + {"line_separator", { &uc_is_property_line_separator }}, +#line 27 "./unictype/pr_byname.gperf" + {"soft_dotted", { &uc_is_property_soft_dotted }}, +#line 39 "./unictype/pr_byname.gperf" + {"other_grapheme_extend", { &uc_is_property_other_grapheme_extend }}, +#line 25 "./unictype/pr_byname.gperf" + {"other_lowercase", { &uc_is_property_other_lowercase }}, +#line 53 "./unictype/pr_byname.gperf" + {"bidi_non_spacing_mark", { &uc_is_property_bidi_non_spacing_mark }}, +#line 24 "./unictype/pr_byname.gperf" + {"lowercase", { &uc_is_property_lowercase }}, +#line 74 "./unictype/pr_byname.gperf" + {"paragraph_separator", { &uc_is_property_paragraph_separator }}, +#line 76 "./unictype/pr_byname.gperf" + {"sentence_terminal", { &uc_is_property_sentence_terminal }}, +#line 20 "./unictype/pr_byname.gperf" + {"private_use", { &uc_is_property_private_use }}, +#line 67 "./unictype/pr_byname.gperf" + {"non_break", { &uc_is_property_non_break }}, +#line 70 "./unictype/pr_byname.gperf" + {"dash", { &uc_is_property_dash }}, +#line 71 "./unictype/pr_byname.gperf" + {"hyphen", { &uc_is_property_hyphen }}, +#line 89 "./unictype/pr_byname.gperf" + {"ignorable_control", { &uc_is_property_ignorable_control }}, +#line 77 "./unictype/pr_byname.gperf" + {"terminal_punctuation", { &uc_is_property_terminal_punctuation }}, +#line 58 "./unictype/pr_byname.gperf" + {"hex_digit", { &uc_is_property_hex_digit }}, +#line 87 "./unictype/pr_byname.gperf" + {"diacritic", { &uc_is_property_diacritic }}, +#line 48 "./unictype/pr_byname.gperf" + {"bidi_arabic_digit", { &uc_is_property_bidi_arabic_digit }}, +#line 30 "./unictype/pr_byname.gperf" + {"id_continue", { &uc_is_property_id_continue }}, +#line 18 "./unictype/pr_byname.gperf" + {"logical_order_exception", { &uc_is_property_logical_order_exception }}, +#line 55 "./unictype/pr_byname.gperf" + {"bidi_pdf", { &uc_is_property_bidi_pdf }}, +#line 79 "./unictype/pr_byname.gperf" + {"math", { &uc_is_property_math }}, +#line 14 "./unictype/pr_byname.gperf" + {"not_a_character", { &uc_is_property_not_a_character }}, +#line 32 "./unictype/pr_byname.gperf" + {"xid_start", { &uc_is_property_xid_start }}, +#line 57 "./unictype/pr_byname.gperf" + {"bidi_other_neutral", { &uc_is_property_bidi_other_neutral }}, +#line 44 "./unictype/pr_byname.gperf" + {"bidi_arabic_right_to_left", { &uc_is_property_bidi_arabic_right_to_left }}, +#line 35 "./unictype/pr_byname.gperf" + {"pattern_syntax", { &uc_is_property_pattern_syntax }}, +#line 37 "./unictype/pr_byname.gperf" + {"grapheme_base", { &uc_is_property_grapheme_base }}, +#line 59 "./unictype/pr_byname.gperf" + {"ascii_hex_digit", { &uc_is_property_ascii_hex_digit }}, +#line 22 "./unictype/pr_byname.gperf" + {"uppercase", { &uc_is_property_uppercase }}, +#line 38 "./unictype/pr_byname.gperf" + {"grapheme_extend", { &uc_is_property_grapheme_extend }}, +#line 83 "./unictype/pr_byname.gperf" + {"combining", { &uc_is_property_combining }}, +#line 85 "./unictype/pr_byname.gperf" + {"decimal_digit", { &uc_is_property_decimal_digit }}, +#line 56 "./unictype/pr_byname.gperf" + {"bidi_embedding_or_override", { &uc_is_property_bidi_embedding_or_override }}, +#line 33 "./unictype/pr_byname.gperf" + {"xid_continue", { &uc_is_property_xid_continue }}, +#line 11 "./unictype/pr_byname.gperf" + {"white_space", { &uc_is_property_white_space }}, +#line 51 "./unictype/pr_byname.gperf" + {"bidi_segment_separator", { &uc_is_property_bidi_segment_separator }}, +#line 84 "./unictype/pr_byname.gperf" + {"composite", { &uc_is_property_composite }}, +#line 82 "./unictype/pr_byname.gperf" + {"left_of_pair", { &uc_is_property_left_of_pair }}, +#line 19 "./unictype/pr_byname.gperf" + {"variation_selector", { &uc_is_property_variation_selector }}, +#line 34 "./unictype/pr_byname.gperf" + {"pattern_white_space", { &uc_is_property_pattern_white_space }}, +#line 40 "./unictype/pr_byname.gperf" + {"grapheme_link", { &uc_is_property_grapheme_link }}, +#line 42 "./unictype/pr_byname.gperf" + {"bidi_left_to_right", { &uc_is_property_bidi_left_to_right }}, +#line 29 "./unictype/pr_byname.gperf" + {"other_id_start", { &uc_is_property_other_id_start }}, +#line 16 "./unictype/pr_byname.gperf" + {"other_default_ignorable_code_point", { &uc_is_property_other_default_ignorable_code_point }}, +#line 13 "./unictype/pr_byname.gperf" + {"other_alphabetic", { &uc_is_property_other_alphabetic }}, +#line 63 "./unictype/pr_byname.gperf" + {"ids_binary_operator", { &uc_is_property_ids_binary_operator }}, +#line 49 "./unictype/pr_byname.gperf" + {"bidi_common_separator", { &uc_is_property_bidi_common_separator }}, +#line 75 "./unictype/pr_byname.gperf" + {"quotation_mark", { &uc_is_property_quotation_mark }}, +#line 50 "./unictype/pr_byname.gperf" + {"bidi_block_separator", { &uc_is_property_bidi_block_separator }}, + {""}, {""}, {""}, +#line 65 "./unictype/pr_byname.gperf" + {"zero_width", { &uc_is_property_zero_width }}, + {""}, +#line 80 "./unictype/pr_byname.gperf" + {"other_math", { &uc_is_property_other_math }}, + {""}, {""}, {""}, {""}, {""}, +#line 17 "./unictype/pr_byname.gperf" + {"deprecated", { &uc_is_property_deprecated }}, + {""}, {""}, {""}, +#line 54 "./unictype/pr_byname.gperf" + {"bidi_boundary_neutral", { &uc_is_property_bidi_boundary_neutral }}, +#line 21 "./unictype/pr_byname.gperf" + {"unassigned_code_value", { &uc_is_property_unassigned_code_value }}, + {""}, +#line 12 "./unictype/pr_byname.gperf" + {"alphabetic", { &uc_is_property_alphabetic }}, + {""}, {""}, {""}, {""}, +#line 61 "./unictype/pr_byname.gperf" + {"unified_ideograph", { &uc_is_property_unified_ideograph }}, + {""}, {""}, +#line 78 "./unictype/pr_byname.gperf" + {"currency_symbol", { &uc_is_property_currency_symbol }}, + {""}, +#line 69 "./unictype/pr_byname.gperf" + {"format_control", { &uc_is_property_format_control }}, + {""}, {""}, {""}, {""}, {""}, +#line 31 "./unictype/pr_byname.gperf" + {"other_id_continue", { &uc_is_property_other_id_continue }}, + {""}, {""}, {""}, {""}, {""}, +#line 15 "./unictype/pr_byname.gperf" + {"default_ignorable_code_point", { &uc_is_property_default_ignorable_code_point }} + }; + +#ifdef __GNUC__ +__inline +#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct named_property * +uc_property_lookup (register const char *str, register unsigned int len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = properties_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register const char *s = properties[key].name; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &properties[key]; + } + } + return 0; +} diff --git a/lib/unictype/pr_combining.c b/lib/unictype/pr_combining.c new file mode 100644 index 00000000..5332b361 --- /dev/null +++ b/lib/unictype/pr_combining.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_combining table. */ +#include "pr_combining.h" + +bool +uc_is_property_combining (ucs4_t uc) +{ + return bitmap_lookup (&u_property_combining, uc); +} + +const uc_property_t UC_PROPERTY_COMBINING = + { &uc_is_property_combining }; diff --git a/lib/unictype/pr_combining.h b/lib/unictype/pr_combining.h new file mode 100644 index 00000000..f17c6a50 --- /dev/null +++ b/lib/unictype/pr_combining.h @@ -0,0 +1,528 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + /*unsigned*/ int level3[26 << 4]; + } +u_property_combining = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 0, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + 16 + 384 * sizeof (short) / sizeof (int) + 80, + 16 + 384 * sizeof (short) / sizeof (int) + 96, + 16 + 384 * sizeof (short) / sizeof (int) + 112, + 16 + 384 * sizeof (short) / sizeof (int) + 128, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 160, + 16 + 384 * sizeof (short) / sizeof (int) + 176, + 16 + 384 * sizeof (short) / sizeof (int) + 192, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 224, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 256, + 16 + 384 * sizeof (short) / sizeof (int) + 272, + 16 + 384 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 304, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 320, + 16 + 384 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 352, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 368, + 16 + 384 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 400, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000003F8, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, + 0x07FF0000, 0x00000000, 0x7FFFF800, 0x00010000, + 0x00000000, 0x00000000, 0xDFC00000, 0x00003D9F, + 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000E, 0xD0000000, 0x001E3FFF, 0x0000000C, + 0x0000000E, 0xD0000000, 0x0080399F, 0x0000000C, + 0x0000000E, 0xD0000000, 0x00023987, 0x00230000, + 0x0000000E, 0xD0000000, 0x00003BBF, 0x0000000C, + 0x0000000E, 0xD0000000, 0x00C0399F, 0x0000000C, + 0x00000004, 0xC0000000, 0x00803DC7, 0x00000000, + 0x0000000E, 0xC0000000, 0x00603DDF, 0x0000000C, + 0x0000000C, 0xD0000000, 0x00603DDF, 0x0000000C, + 0x0000000C, 0xC0000000, 0x00803DDF, 0x0000000C, + 0x0000000C, 0x00000000, 0xFF5F8400, 0x000C0000, + 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, + 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, + 0x03000000, 0xC2A00000, 0x00000000, 0xFFFE0000, + 0xFEFF00DF, 0x1FFFFFFF, 0x00000040, 0x00000000, + 0x00000000, 0x7FFFF800, 0xC3C00000, 0x001E3F9D, + 0x0000BFFC, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, + 0x00000000, 0xFFC00000, 0x200FFFFF, 0x00000000, + 0x00003800, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x0FFF0FFF, 0x00000000, 0x00000000, + 0x00000000, 0xFFFF0000, 0x00000301, 0x00000000, + 0x0F800000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000001F, 0xFFF00000, 0x0000001F, 0x000FF800, + 0x00000007, 0x000007FE, 0x00000000, 0x00000000, + 0x00000000, 0x00FFFFF0, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xC000007F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0x0001FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, + 0x06000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x30078000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000844, 0x000000F8, 0x00000000, 0x00000000, + 0x00000003, 0xFFF00000, 0x0000001F, 0x00000000, + 0x00000000, 0x00003FC0, 0x000FFF80, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x007FFE00, 0x00003008, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x40000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000FFFF, 0x0000007F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xF807E3E0, + 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000001C, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF + } +}; diff --git a/lib/unictype/pr_composite.c b/lib/unictype/pr_composite.c new file mode 100644 index 00000000..4f01ea86 --- /dev/null +++ b/lib/unictype/pr_composite.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_composite table. */ +#include "pr_composite.h" + +bool +uc_is_property_composite (ucs4_t uc) +{ + return bitmap_lookup (&u_property_composite, uc); +} + +const uc_property_t UC_PROPERTY_COMPOSITE = + { &uc_is_property_composite }; diff --git a/lib/unictype/pr_composite.h b/lib/unictype/pr_composite.h new file mode 100644 index 00000000..43639b56 --- /dev/null +++ b/lib/unictype/pr_composite.h @@ -0,0 +1,375 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[23 << 4]; + } +u_property_composite = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 304, + 3 + 256 * sizeof (short) / sizeof (int) + 320, + 3 + 256 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 352, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x70000000, 0x3E7EFFBF, 0xBE7EFFBF, + 0xFFFCFFFF, 0xFEFDFF3F, 0xFFF3F3F9, 0x7FFFFF3F, + 0x00000000, 0x00018003, 0xDFFFFFF0, 0xFF3FFFCF, + 0xCFFFFFFF, 0x000FFFC0, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000010, 0x00000000, + 0x0001D760, 0x0001FC00, 0x00187C00, 0x00000000, + 0x0200708B, 0x02000000, 0x708B0000, 0x00C00000, + 0x00000000, 0x00000000, 0xFCCF0006, 0x033FFCFC, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000080, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0000007C, 0x00000000, 0x01E00000, + 0x00000000, 0x00000000, 0x00080005, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00120200, 0xFF000000, 0x00000000, + 0x00000000, 0x00000000, 0xB0001800, 0x00000000, + 0x00000000, 0x00480000, 0x4E000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x30001900, 0x00000000, + 0x00100000, 0x00000000, 0x00001C00, 0x00000000, + 0x00000000, 0x00000000, 0x00000100, 0x00000000, + 0x00000000, 0x00000000, 0x00000D81, 0x00000000, + 0x00000000, 0x00000000, 0x00001C00, 0x00000000, + 0x00000000, 0x00000000, 0x74000000, 0x00000000, + 0x00000000, 0x00080000, 0x00000000, 0x00000000, + 0x00000000, 0x00080000, 0x30000000, 0x00000000, + 0x00000000, 0x00000000, 0x10842008, 0x03E80200, + 0x20080002, 0x02001084, 0x00000000, 0x00000000, + 0x00000000, 0x00000040, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00045540, 0x28000000, 0x0000000B, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x0FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x1555FFFF, + 0xFFFFFFFF, 0x17DFFFFF, 0xE7C7F5DE, 0x15DC37F7, + 0x00000000, 0x10D80060, 0x00800380, 0x00000000, + 0x00000000, 0x00000100, 0x00000000, 0x00000000, + 0x0040026B, 0x08000007, 0xFFF80000, 0x0DEE0DEE, + 0x0C000000, 0x00004000, 0x0000E000, 0x00000000, + 0x00001210, 0x0001B050, 0x00000292, 0x0333E005, + 0x00000333, 0x0000F000, 0x00000000, 0x00003C0F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFE00, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00001000, 0x00000000, 0x00000000, 0x00700000, + 0x00000000, 0x00000000, 0x10000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x55555000, 0x36DB02A5, + 0xC0100000, 0x55555000, 0x36DB02A5, 0xC7900000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0x7FFFC000, + 0x00000000, 0xFFFE0000, 0x0000FFFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000001F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xA0F8007F, 0x5F7FFC00, 0x0000FFDB, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0FFFFC00, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFFFFF0, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x1FFF0000, + 0x00000000, 0x00000000, 0x00000000, 0xAA820000, + 0x00000000, 0x00000000, 0x00000000, 0x1FE00000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xC0000000, 0x0000001F, + 0x00000000, 0xF8000000, 0x00000001, 0x00000000 + } +}; diff --git a/lib/unictype/pr_currency_symbol.c b/lib/unictype/pr_currency_symbol.c new file mode 100644 index 00000000..8a8723b3 --- /dev/null +++ b/lib/unictype/pr_currency_symbol.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_currency_symbol table. */ +#include "pr_currency_symbol.h" + +bool +uc_is_property_currency_symbol (ucs4_t uc) +{ + return bitmap_lookup (&u_property_currency_symbol, uc); +} + +#else + +bool +uc_is_property_currency_symbol (ucs4_t uc) +{ + return uc_is_general_category (uc, UC_CATEGORY_Sc); +} + +#endif + +const uc_property_t UC_PROPERTY_CURRENCY_SYMBOL = + { &uc_is_property_currency_symbol }; diff --git a/lib/unictype/pr_currency_symbol.h b/lib/unictype/pr_currency_symbol.h new file mode 100644 index 00000000..8815876d --- /dev/null +++ b/lib/unictype/pr_currency_symbol.h @@ -0,0 +1,188 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[9 << 4]; + } +u_property_currency_symbol = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 112, + 2 + 128 * sizeof (short) / sizeof (int) + 128 + }, + { + 0x00000000, 0x00000010, 0x00000000, 0x00000000, + 0x00000000, 0x0000003C, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000800, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000C0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00020000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x02000000, + 0x00000000, 0x80000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x08000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x003FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x10000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000200, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000010, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000063 + } +}; diff --git a/lib/unictype/pr_dash.c b/lib/unictype/pr_dash.c new file mode 100644 index 00000000..16bccad1 --- /dev/null +++ b/lib/unictype/pr_dash.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_dash table. */ +#include "pr_dash.h" + +bool +uc_is_property_dash (ucs4_t uc) +{ + return bitmap_lookup (&u_property_dash, uc); +} + +const uc_property_t UC_PROPERTY_DASH = + { &uc_is_property_dash }; diff --git a/lib/unictype/pr_dash.h b/lib/unictype/pr_dash.h new file mode 100644 index 00000000..70e67e02 --- /dev/null +++ b/lib/unictype/pr_dash.h @@ -0,0 +1,184 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[8 << 4]; + } +u_property_dash = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 112 + }, + { + 0x00000000, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000400, 0x40000000, 0x00000000, 0x00000000, + 0x00000040, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003F0000, 0x00000000, 0x00080000, 0x08000000, + 0x00000800, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00040000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x04800000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x10000000, 0x00010000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00060000, 0x01000000, 0x00000008, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00002000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_decimal_digit.c b/lib/unictype/pr_decimal_digit.c new file mode 100644 index 00000000..e344158a --- /dev/null +++ b/lib/unictype/pr_decimal_digit.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_decimal_digit table. */ +#include "pr_decimal_digit.h" + +bool +uc_is_property_decimal_digit (ucs4_t uc) +{ + return bitmap_lookup (&u_property_decimal_digit, uc); +} + +#else + +bool +uc_is_property_decimal_digit (ucs4_t uc) +{ + return uc_is_general_category (uc, UC_CATEGORY_Nd); +} + +#endif + +const uc_property_t UC_PROPERTY_DECIMAL_DIGIT = + { &uc_is_property_decimal_digit }; diff --git a/lib/unictype/pr_decimal_digit.h b/lib/unictype/pr_decimal_digit.h new file mode 100644 index 00000000..d73e8bc5 --- /dev/null +++ b/lib/unictype/pr_decimal_digit.h @@ -0,0 +1,351 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[17 << 4]; + } +u_property_decimal_digit = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x000003FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x000003FF, 0x00000000, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000003FF, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x000003FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF + } +}; diff --git a/lib/unictype/pr_default_ignorable_code_point.c b/lib/unictype/pr_default_ignorable_code_point.c new file mode 100644 index 00000000..f4b7f19e --- /dev/null +++ b/lib/unictype/pr_default_ignorable_code_point.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_default_ignorable_code_point table. */ +#include "pr_default_ignorable_code_point.h" + +bool +uc_is_property_default_ignorable_code_point (ucs4_t uc) +{ + return bitmap_lookup (&u_property_default_ignorable_code_point, uc); +} + +const uc_property_t UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT = + { &uc_is_property_default_ignorable_code_point }; diff --git a/lib/unictype/pr_default_ignorable_code_point.h b/lib/unictype/pr_default_ignorable_code_point.h new file mode 100644 index 00000000..df57db55 --- /dev/null +++ b/lib/unictype/pr_default_ignorable_code_point.h @@ -0,0 +1,464 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + /*unsigned*/ int level3[10 << 4]; + } +u_property_default_ignorable_code_point = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + 16 + 384 * sizeof (short) / sizeof (int) + 0, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00008000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x00000001, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00300000, 0x00000000, 0x00000000, + 0x00003800, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000F800, 0x00007C00, 0x00000000, 0x0000FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000010, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x01FF0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x07F80000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF + } +}; diff --git a/lib/unictype/pr_deprecated.c b/lib/unictype/pr_deprecated.c new file mode 100644 index 00000000..2b3903b4 --- /dev/null +++ b/lib/unictype/pr_deprecated.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_deprecated table. */ +#include "pr_deprecated.h" + +bool +uc_is_property_deprecated (ucs4_t uc) +{ + return bitmap_lookup (&u_property_deprecated, uc); +} + +const uc_property_t UC_PROPERTY_DEPRECATED = + { &uc_is_property_deprecated }; diff --git a/lib/unictype/pr_deprecated.h b/lib/unictype/pr_deprecated.h new file mode 100644 index 00000000..ee69bbf5 --- /dev/null +++ b/lib/unictype/pr_deprecated.h @@ -0,0 +1,312 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[2 << 7]; + /*unsigned*/ int level3[4 << 4]; + } +u_property_deprecated = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + 16 + 256 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 256 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + 16 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000003, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000008, 0x00080000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0000FC00, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_diacritic.c b/lib/unictype/pr_diacritic.c new file mode 100644 index 00000000..f541cd12 --- /dev/null +++ b/lib/unictype/pr_diacritic.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_diacritic table. */ +#include "pr_diacritic.h" + +bool +uc_is_property_diacritic (ucs4_t uc) +{ + return bitmap_lookup (&u_property_diacritic, uc); +} + +const uc_property_t UC_PROPERTY_DIACRITIC = + { &uc_is_property_diacritic }; diff --git a/lib/unictype/pr_diacritic.h b/lib/unictype/pr_diacritic.h new file mode 100644 index 00000000..4a8390be --- /dev/null +++ b/lib/unictype/pr_diacritic.h @@ -0,0 +1,367 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[21 << 4]; + } +u_property_diacritic = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 304, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 320, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x40000000, 0x00000001, + 0x00000000, 0x01908100, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xE0FF7FFF, 0x04300007, + 0x00000030, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000000F8, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x02000000, 0x00000000, + 0xFFFE0000, 0xBFFFFFFB, 0x00000016, 0x00000000, + 0x00000000, 0x00000000, 0x0187F800, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x00001C61, + 0x00000000, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x00000000, 0x0001FFC0, 0x00000000, 0x003FF800, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x10000000, 0x001E2000, 0x00020000, + 0x00000000, 0x10000000, 0x00002000, 0x00000000, + 0x00000000, 0x10000000, 0x00002000, 0x00000000, + 0x00000000, 0x10000000, 0x00002000, 0x00000000, + 0x00000000, 0x10000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x10000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00000400, 0x00000000, + 0x00000000, 0x00000000, 0x00005F80, 0x00000000, + 0x00000000, 0x00000000, 0x00001F00, 0x00000000, + 0x03000000, 0xC2A00000, 0x00000000, 0x00000000, + 0x000000DC, 0x00000000, 0x00000040, 0x00000000, + 0x00000000, 0x06800000, 0x00000000, 0x00000000, + 0x0000BF80, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x200FFE00, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0E000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00100000, 0x00000010, 0x000FF800, + 0x00000000, 0x00000400, 0x00000000, 0x00000000, + 0x00000000, 0x00C00000, 0x00000000, 0x3F000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFF000, 0xFFFFFFFF, 0x000007FF, + 0x00000000, 0x00000000, 0x0000FFF0, 0xC0000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xA0000000, 0xE000E003, 0x6000E000, + 0x00000000, 0x00008000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, + 0x1E000000, 0x00000000, 0x00000000, 0x10000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xB0008000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFF800000, 0x00000003, 0x00000000, 0x00000000, + 0x00000100, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000010, 0x00000000, + 0x00000000, 0x00007800, 0x00080000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x40000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0000007F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x40000000, 0x00000001, 0x00010000, + 0xC0000000, 0x00000000, 0x00000000, 0x00000008, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xF807E380, + 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_extender.c b/lib/unictype/pr_extender.c new file mode 100644 index 00000000..25f11f67 --- /dev/null +++ b/lib/unictype/pr_extender.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_extender table. */ +#include "pr_extender.h" + +bool +uc_is_property_extender (ucs4_t uc) +{ + return bitmap_lookup (&u_property_extender, uc); +} + +const uc_property_t UC_PROPERTY_EXTENDER = + { &uc_is_property_extender }; diff --git a/lib/unictype/pr_extender.h b/lib/unictype/pr_extender.h new file mode 100644 index 00000000..70d9582b --- /dev/null +++ b/lib/unictype/pr_extender.h @@ -0,0 +1,192 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[10 << 4]; + } +u_property_extender = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 144 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00800000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00030000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000001, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x04000000, + 0x00000000, 0x00000000, 0x00000040, 0x00000000, + 0x00000000, 0x00000000, 0x00000040, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000008, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00400000, 0x00000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000020, 0x003E0000, 0x00000000, 0x00000000, + 0x60000000, 0x00000000, 0x00000000, 0x70000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00200000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00001000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00010000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_format_control.c b/lib/unictype/pr_format_control.c new file mode 100644 index 00000000..f63bb299 --- /dev/null +++ b/lib/unictype/pr_format_control.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_format_control table. */ +#include "pr_format_control.h" + +bool +uc_is_property_format_control (ucs4_t uc) +{ + return bitmap_lookup (&u_property_format_control, uc); +} + +const uc_property_t UC_PROPERTY_FORMAT_CONTROL = + { &uc_is_property_format_control }; diff --git a/lib/unictype/pr_format_control.h b/lib/unictype/pr_format_control.h new file mode 100644 index 00000000..fde6b409 --- /dev/null +++ b/lib/unictype/pr_format_control.h @@ -0,0 +1,444 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_property_format_control = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + 16 + 384 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00008000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000800, 0x00000000, 0x00000000, 0x0000FC1F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x07F80000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_grapheme_base.c b/lib/unictype/pr_grapheme_base.c new file mode 100644 index 00000000..6b090bc2 --- /dev/null +++ b/lib/unictype/pr_grapheme_base.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_grapheme_base table. */ +#include "pr_grapheme_base.h" + +bool +uc_is_property_grapheme_base (ucs4_t uc) +{ + return bitmap_lookup (&u_property_grapheme_base, uc); +} + +const uc_property_t UC_PROPERTY_GRAPHEME_BASE = + { &uc_is_property_grapheme_base }; diff --git a/lib/unictype/pr_grapheme_base.h b/lib/unictype/pr_grapheme_base.h new file mode 100644 index 00000000..6926dfd4 --- /dev/null +++ b/lib/unictype/pr_grapheme_base.h @@ -0,0 +1,616 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[3]; + short level2[3 << 7]; + /*unsigned*/ int level3[51 << 4]; + } +u_property_grapheme_base = +{ + { 3 }, + { + 4 * sizeof (int) / sizeof (short) + 0, + 4 * sizeof (int) / sizeof (short) + 128, + 4 * sizeof (int) / sizeof (short) + 256 + }, + { + 4 + 384 * sizeof (short) / sizeof (int) + 0, + 4 + 384 * sizeof (short) / sizeof (int) + 16, + 4 + 384 * sizeof (short) / sizeof (int) + 32, + 4 + 384 * sizeof (short) / sizeof (int) + 48, + 4 + 384 * sizeof (short) / sizeof (int) + 64, + 4 + 384 * sizeof (short) / sizeof (int) + 80, + 4 + 384 * sizeof (short) / sizeof (int) + 96, + 4 + 384 * sizeof (short) / sizeof (int) + 112, + 4 + 384 * sizeof (short) / sizeof (int) + 128, + 4 + 384 * sizeof (short) / sizeof (int) + 144, + 4 + 384 * sizeof (short) / sizeof (int) + 160, + 4 + 384 * sizeof (short) / sizeof (int) + 176, + 4 + 384 * sizeof (short) / sizeof (int) + 192, + 4 + 384 * sizeof (short) / sizeof (int) + 208, + 4 + 384 * sizeof (short) / sizeof (int) + 224, + 4 + 384 * sizeof (short) / sizeof (int) + 240, + 4 + 384 * sizeof (short) / sizeof (int) + 256, + 4 + 384 * sizeof (short) / sizeof (int) + 272, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 352, + 4 + 384 * sizeof (short) / sizeof (int) + 368, + 4 + 384 * sizeof (short) / sizeof (int) + 384, + 4 + 384 * sizeof (short) / sizeof (int) + 400, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 416, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 432, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 448, + 4 + 384 * sizeof (short) / sizeof (int) + 464, + 4 + 384 * sizeof (short) / sizeof (int) + 480, + 4 + 384 * sizeof (short) / sizeof (int) + 496, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 512, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 528, + 4 + 384 * sizeof (short) / sizeof (int) + 544, + 4 + 384 * sizeof (short) / sizeof (int) + 560, + 4 + 384 * sizeof (short) / sizeof (int) + 576, + 4 + 384 * sizeof (short) / sizeof (int) + 592, + 4 + 384 * sizeof (short) / sizeof (int) + 608, + 4 + 384 * sizeof (short) / sizeof (int) + 624, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 640, + 4 + 384 * sizeof (short) / sizeof (int) + 656, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 672, + 4 + 384 * sizeof (short) / sizeof (int) + 688, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 704, + 4 + 384 * sizeof (short) / sizeof (int) + 720, + 4 + 384 * sizeof (short) / sizeof (int) + 736, + 4 + 384 * sizeof (short) / sizeof (int) + 752, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 768, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 784, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 800, + -1, + -1 + }, + { + 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, + 0x00000000, 0xFFFFDFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x7CFF0000, + 0xFFFFD7F0, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFC07, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0xFE7FFFFF, 0xFFFFFFFE, + 0x000006FF, 0x40000000, 0xFFFF0049, 0x001F07FF, + 0xC800FFC0, 0xFFFFFFFE, 0x000007FF, 0xFFFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0xFFFFC260, + 0xFFFD3FFF, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0002003F, 0xFFFFFFFF, 0x07F007FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFF8, 0xE3FFFFFF, 0xFF011E01, 0xF807FFF3, + 0xFFF99FEC, 0xA3C5FDFF, 0xB0005981, 0x07FFFFC3, + 0xFFF987E8, 0xC36DFDFF, 0x5E000001, 0x001CFFC0, + 0xFFFBBFE8, 0xE3EDFDFF, 0x00011A01, 0x0002FFC3, + 0xFFF99FEC, 0x23EDFDFF, 0xB0001981, 0x0003FFC3, + 0xD63DC7E8, 0x83FFC718, 0x00011DC6, 0x07FFFFC0, + 0xFFFDDFEE, 0x23EFFDFF, 0x0300001E, 0xFF00FFC3, + 0xFFFDDFEC, 0x63EFFDFF, 0x40000D9B, 0x0006FFC3, + 0xFFFDDFEC, 0xA3FFFDFF, 0x00001DC1, 0xFE3FFFC3, + 0xFC7FFFEC, 0x2FFBFFFF, 0x7F03007F, 0x001C0000, + 0xFFFFFFFE, 0x800DFFFF, 0x0FFF807F, 0x00000000, + 0xFEF02596, 0x200DECAE, 0x33FF005F, 0x00000000, + 0xFCFFFFFF, 0xFD5FFFFF, 0xFFFFFEFF, 0x80001FFF, + 0x00000F20, 0xC0000000, 0x001FDFBF, 0x00000000, + 0xFFFFFFFF, 0x99021FFF, 0x3CFFFFFF, 0xFFE1FFFE, + 0xC3FFDF9B, 0xFFFFFFFF, 0xFFFF003F, 0x1FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x1FFFFFFF, + 0x03FFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, + 0x1FFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001FFFF, + 0x0003DFFF, 0x0063FFFF, 0x0003FFFF, 0x0001DFFF, + 0xFFFFFFFF, 0xC04FFFFF, 0x1FF001BF, 0x03FF03FF, + 0x03FF47FF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0x000005FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x01FB0E78, 0xFFFFFFF1, 0x001F3FFF, + 0xFFFFFFFF, 0xFFFF03FF, 0xC3FF03FF, 0xFFFFFFFF, + 0xCE7FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFF0, 0xE82FFFFF, 0xFFFF0FFB, 0x1FF007FF, + 0xFFFFFFFC, 0x03FFC4C3, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xF8300FFF, 0xFFFFE3FF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0xFFDFFFFF, 0xEFCFFFDF, 0x7FDCFFFF, + 0xFFFF07FF, 0xFFFF80FF, 0xFFFFFFFF, 0xFFF30000, + 0x001F7FFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFF8FFFF, 0xFFFFFFFF, + 0xFFFF01FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000000FF, + 0xFFFFFFFF, 0x0000007F, 0x000007FF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x1FFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFF3DE, 0xFFFFFEFF, 0x7F47AFFF, 0xFFFFFFFE, + 0xFF1FFFFF, 0x7FFEFFFF, 0xFFFF17FF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x001F1FFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFE0007FF, + 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, + 0xFFFFFFFF, 0x0001FFFF, 0x00000000, 0x00000000, + 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x0FFF0000, + 0xFFFFFFFF, 0xFFFF03FF, 0xFFFFFFFE, 0xFFFFFFFF, + 0xF87FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF7FFF, 0x00FFFFFF, 0xFFFFFFFF, 0xFFFF000F, + 0x7FFFFFFF, 0xFFFFFFFF, 0xFFFF000F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x7FFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0xFFFFFFFF, 0x0000007F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x00000FFF, 0xFFFFFFFF, 0xC0087FFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFF7BB, 0x00000F9F, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFC00F, 0x00000000, + 0xFFFFFFFF, 0xFFFFC03F, 0x800C007F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x001981FF, 0xF3FF2FF7, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xA0F8007F, 0x5F7FFFFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x3FFF0000, + 0x03FF0000, 0xFFFF0000, 0xFFF7FFFF, 0xFFDF0F7F, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x30007F7F, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0xFFFFFF87, 0xFF8FFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x0FFF07FF, 0x00000000, 0xFFFF0000, 0x1FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF000F, 0x000007FF, 0x00000000, + 0xBFFFFFFF, 0xFFFFFFFF, 0x003FFF0F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x83FFFFFF, 0x83FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEF0001, 0x000FFFFF, 0x01FF00FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000F0007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, + 0xFFFFFFFF, 0xFFFFFE7F, 0xFFFFFFFF, 0x00003C5F, + 0xFFFFF018, 0xFFFFC3FF, 0x3FFFFFFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000023, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x0003FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFCFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF0FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_grapheme_extend.c b/lib/unictype/pr_grapheme_extend.c new file mode 100644 index 00000000..c51e82eb --- /dev/null +++ b/lib/unictype/pr_grapheme_extend.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_grapheme_extend table. */ +#include "pr_grapheme_extend.h" + +bool +uc_is_property_grapheme_extend (ucs4_t uc) +{ + return bitmap_lookup (&u_property_grapheme_extend, uc); +} + +const uc_property_t UC_PROPERTY_GRAPHEME_EXTEND = + { &uc_is_property_grapheme_extend }; diff --git a/lib/unictype/pr_grapheme_extend.h b/lib/unictype/pr_grapheme_extend.h new file mode 100644 index 00000000..2cd1ca6a --- /dev/null +++ b/lib/unictype/pr_grapheme_extend.h @@ -0,0 +1,528 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + /*unsigned*/ int level3[26 << 4]; + } +u_property_grapheme_extend = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 0, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + 16 + 384 * sizeof (short) / sizeof (int) + 80, + 16 + 384 * sizeof (short) / sizeof (int) + 96, + 16 + 384 * sizeof (short) / sizeof (int) + 112, + 16 + 384 * sizeof (short) / sizeof (int) + 128, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 144, + 16 + 384 * sizeof (short) / sizeof (int) + 160, + 16 + 384 * sizeof (short) / sizeof (int) + 176, + 16 + 384 * sizeof (short) / sizeof (int) + 192, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 224, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 256, + 16 + 384 * sizeof (short) / sizeof (int) + 272, + 16 + 384 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 304, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 320, + 16 + 384 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 352, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 368, + 16 + 384 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 400, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000003F8, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFE0000, 0xBFFFFFFF, 0x000000B6, 0x00000000, + 0x07FF0000, 0x00000000, 0x7FFFF800, 0x00010000, + 0x00000000, 0x00000000, 0xDFC00000, 0x00003D9F, + 0x00020000, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x00000000, 0x0001FFC0, 0x00000000, 0x000FF800, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000006, 0x10000000, 0x001E21FE, 0x0000000C, + 0x00000002, 0x50000000, 0x0080201E, 0x0000000C, + 0x00000006, 0x10000000, 0x00023986, 0x00230000, + 0x00000006, 0x10000000, 0x000021BE, 0x0000000C, + 0x00000002, 0xD0000000, 0x00C0201E, 0x0000000C, + 0x00000004, 0x40000000, 0x00802001, 0x00000000, + 0x00000000, 0xC0000000, 0x00603DC1, 0x0000000C, + 0x00000000, 0x90000000, 0x00603044, 0x0000000C, + 0x00000000, 0x40000000, 0x0080201E, 0x0000000C, + 0x00000000, 0x00000000, 0x805C8400, 0x00000000, + 0x00000000, 0x07F20000, 0x00007F80, 0x00000000, + 0x00000000, 0x1BF20000, 0x00003F00, 0x00000000, + 0x03000000, 0x02A00000, 0x00000000, 0x7FFE0000, + 0xFEFF00DF, 0x1FFFFFFF, 0x00000040, 0x00000000, + 0x00000000, 0x66FDE000, 0xC3000000, 0x001E0001, + 0x00002064, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x001C0000, 0x001C0000, 0x000C0000, 0x000C0000, + 0x00000000, 0x3F800000, 0x200FFE40, 0x00000000, + 0x00003800, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x0E040187, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x01800000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000F, 0x17D00000, 0x00000004, 0x000FF800, + 0x00000003, 0x0000033C, 0x00000000, 0x00000000, + 0x00000000, 0x00CFF000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xC000007F, + 0x00003000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0x0001FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x00000000, 0x0000FC00, 0x00000000, 0x00000000, + 0x06000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x30078000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000844, 0x00000060, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000010, 0x00000000, + 0x00000000, 0x00003FC0, 0x0003FF80, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00667E00, 0x00001008, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x40000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000FFFF, 0x0000007F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x0000F06E, 0x87000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xF807C3A0, + 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000001C, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF + } +}; diff --git a/lib/unictype/pr_grapheme_link.c b/lib/unictype/pr_grapheme_link.c new file mode 100644 index 00000000..e7aa1335 --- /dev/null +++ b/lib/unictype/pr_grapheme_link.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_grapheme_link table. */ +#include "pr_grapheme_link.h" + +bool +uc_is_property_grapheme_link (ucs4_t uc) +{ + return bitmap_lookup (&u_property_grapheme_link, uc); +} + +const uc_property_t UC_PROPERTY_GRAPHEME_LINK = + { &uc_is_property_grapheme_link }; diff --git a/lib/unictype/pr_grapheme_link.h b/lib/unictype/pr_grapheme_link.h new file mode 100644 index 00000000..14379753 --- /dev/null +++ b/lib/unictype/pr_grapheme_link.h @@ -0,0 +1,319 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[9 << 4]; + } +u_property_grapheme_link = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00000400, 0x00000000, + 0x00000000, 0x04000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000010, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x06000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00100000, 0x00100000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00040000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000010, 0x00000000, + 0x00000000, 0x00000400, 0x00000000, 0x00000000, + 0x00000040, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000010, 0x00000000, + 0x00000000, 0x00000000, 0x00080000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x80000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_hex_digit.c b/lib/unictype/pr_hex_digit.c new file mode 100644 index 00000000..09357b98 --- /dev/null +++ b/lib/unictype/pr_hex_digit.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_hex_digit table. */ +#include "pr_hex_digit.h" + +bool +uc_is_property_hex_digit (ucs4_t uc) +{ + return bitmap_lookup (&u_property_hex_digit, uc); +} + +const uc_property_t UC_PROPERTY_HEX_DIGIT = + { &uc_is_property_hex_digit }; diff --git a/lib/unictype/pr_hex_digit.h b/lib/unictype/pr_hex_digit.h new file mode 100644 index 00000000..8bbe5f1d --- /dev/null +++ b/lib/unictype/pr_hex_digit.h @@ -0,0 +1,160 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[2 << 4]; + } +u_property_hex_digit = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16 + }, + { + 0x00000000, 0x03FF0000, 0x0000007E, 0x0000007E, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03FF0000, 0x0000007E, 0x0000007E, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_hyphen.c b/lib/unictype/pr_hyphen.c new file mode 100644 index 00000000..22a55b69 --- /dev/null +++ b/lib/unictype/pr_hyphen.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_hyphen table. */ +#include "pr_hyphen.h" + +bool +uc_is_property_hyphen (ucs4_t uc) +{ + return bitmap_lookup (&u_property_hyphen, uc); +} + +const uc_property_t UC_PROPERTY_HYPHEN = + { &uc_is_property_hyphen }; diff --git a/lib/unictype/pr_hyphen.h b/lib/unictype/pr_hyphen.h new file mode 100644 index 00000000..f52c26fc --- /dev/null +++ b/lib/unictype/pr_hyphen.h @@ -0,0 +1,180 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[7 << 4]; + } +u_property_hyphen = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 96 + }, + { + 0x00000000, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000400, 0x00000000, 0x00000000, 0x00000000, + 0x00000040, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00030000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00800000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000008, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00002000, 0x00000000, 0x00000000, 0x00000020, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_id_continue.c b/lib/unictype/pr_id_continue.c new file mode 100644 index 00000000..5903dc65 --- /dev/null +++ b/lib/unictype/pr_id_continue.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_id_continue table. */ +#include "pr_id_continue.h" + +bool +uc_is_property_id_continue (ucs4_t uc) +{ + return bitmap_lookup (&u_property_id_continue, uc); +} + +const uc_property_t UC_PROPERTY_ID_CONTINUE = + { &uc_is_property_id_continue }; diff --git a/lib/unictype/pr_id_continue.h b/lib/unictype/pr_id_continue.h new file mode 100644 index 00000000..9c55e7f3 --- /dev/null +++ b/lib/unictype/pr_id_continue.h @@ -0,0 +1,732 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[4 << 7]; + /*unsigned*/ int level3[45 << 4]; + } +u_property_id_continue = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + 16 * sizeof (int) / sizeof (short) + 256, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 384 + }, + { + 16 + 512 * sizeof (short) / sizeof (int) + 0, + 16 + 512 * sizeof (short) / sizeof (int) + 16, + 16 + 512 * sizeof (short) / sizeof (int) + 32, + 16 + 512 * sizeof (short) / sizeof (int) + 48, + 16 + 512 * sizeof (short) / sizeof (int) + 64, + 16 + 512 * sizeof (short) / sizeof (int) + 80, + 16 + 512 * sizeof (short) / sizeof (int) + 96, + 16 + 512 * sizeof (short) / sizeof (int) + 112, + 16 + 512 * sizeof (short) / sizeof (int) + 128, + 16 + 512 * sizeof (short) / sizeof (int) + 144, + 16 + 512 * sizeof (short) / sizeof (int) + 160, + 16 + 512 * sizeof (short) / sizeof (int) + 176, + 16 + 512 * sizeof (short) / sizeof (int) + 192, + 16 + 512 * sizeof (short) / sizeof (int) + 208, + 16 + 512 * sizeof (short) / sizeof (int) + 224, + 16 + 512 * sizeof (short) / sizeof (int) + 240, + 16 + 512 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 272, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 288, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 320, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 336, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 352, + 16 + 512 * sizeof (short) / sizeof (int) + 368, + 16 + 512 * sizeof (short) / sizeof (int) + 384, + 16 + 512 * sizeof (short) / sizeof (int) + 400, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 416, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 432, + 16 + 512 * sizeof (short) / sizeof (int) + 448, + 16 + 512 * sizeof (short) / sizeof (int) + 464, + 16 + 512 * sizeof (short) / sizeof (int) + 480, + 16 + 512 * sizeof (short) / sizeof (int) + 496, + 16 + 512 * sizeof (short) / sizeof (int) + 512, + 16 + 512 * sizeof (short) / sizeof (int) + 528, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 544, + 16 + 512 * sizeof (short) / sizeof (int) + 560, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 576, + 16 + 512 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 608, + 16 + 512 * sizeof (short) / sizeof (int) + 624, + 16 + 512 * sizeof (short) / sizeof (int) + 640, + 16 + 512 * sizeof (short) / sizeof (int) + 656, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 672, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 688, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 704, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x03FF0000, 0x87FFFFFE, 0x07FFFFFE, + 0x00000000, 0x04A00400, 0xFF7FFFFF, 0xFF7FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3CDFFFFF, + 0xFFFFD7C0, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFCFB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0x027FFFFF, 0xFFFFFFFE, + 0xFFFE00FF, 0xBFFFFFFF, 0xFFFF00B6, 0x000707FF, + 0x07FF0000, 0xFFFFFFFE, 0x7FFFFFFF, 0xFFFFC3FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x9FEFFFFF, 0x9FFFFDFF, + 0xFFFF0000, 0xFFFFFFFF, 0xFFFFE7FF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFFFFFFF, 0x043FFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFE, 0xF3FFFFFF, 0xFF1F3FFF, 0xF806FFCF, + 0xFFF99FEE, 0xF3C5FDFF, 0xB080799F, 0x0003FFCF, + 0xFFF987EE, 0xD36DFDFF, 0x5E023987, 0x003FFFC0, + 0xFFFBBFEE, 0xF3EDFDFF, 0x00013BBF, 0x0000FFCF, + 0xFFF99FEE, 0xF3EDFDFF, 0xB0C0399F, 0x0002FFCF, + 0xD63DC7EC, 0xC3FFC718, 0x00813DC7, 0x0000FFC0, + 0xFFFDDFEE, 0xE3EFFDFF, 0x03603DDF, 0x0000FFCF, + 0xFFFDDFEC, 0xF3EFFDFF, 0x40603DDF, 0x0000FFCF, + 0xFFFDDFEC, 0xE3FFFDFF, 0x00803DDF, 0xFC00FFCF, + 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F847F, 0x000C0000, + 0xFFFFFFFE, 0x07FFFFFF, 0x03FF7FFF, 0x00000000, + 0xFEF02596, 0x3BFFECAE, 0x33FF3F5F, 0x00000000, + 0x03000001, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE1FFF, + 0xFEFF0FDF, 0x1FFFFFFF, 0x00000040, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF03FF, 0xFFFFFFFF, + 0x03FFFFFF, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x87FFFFFF, 0x0003FE00, + 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007F9FFF, + 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, + 0x001FDFFF, 0x001FFFFF, 0x000FFFFF, 0x000DDFFF, + 0xFFFFFFFF, 0xFFCFFFFF, 0x308FFFFF, 0x000003FF, + 0x03FF3800, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0x000007FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x0FFF0FFF, 0xFFFFFFC0, 0x001F3FFF, + 0xFFFFFFFF, 0xFFFF03FF, 0x03FF03FF, 0x00000000, + 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF0FFF, 0x000FF800, + 0xFFFFFFFF, 0x03FFC7FF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFE3FF, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xC000007F, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, + 0x00000000, 0x80000000, 0x00100001, 0x80020000, + 0x001F0000, 0x00000000, 0x1FFF0000, 0x0001FFE2, + 0x3F2FFC84, 0xF3FFFD50, 0x000043E0, 0xFFFFFFFF, + 0x000001FF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, + 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0xFFFFFFFF, + 0x000000E0, 0x1F3EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, + 0xFE7FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00007FFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0x00000FFF, 0xFFFFFFFF, 0xB000FFFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000019FF, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFFFFF, 0x000000FF, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF001F, 0x00000000, + 0xFFFFFFFF, 0xFFFF3FFF, 0x000FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x007FFFFF, 0x03FF3FFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xE0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, + 0x0000FFFF, 0x0018007F, 0x0000E000, 0xFFDF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, + 0x03FF0000, 0x87FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, + 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEFF06F, 0x870FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xF807E3E0, + 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000001C, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, + 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, + 0xFFFFFDFF, 0xFFFFFDFF, 0xFFFFCFF7, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF + } +}; diff --git a/lib/unictype/pr_id_start.c b/lib/unictype/pr_id_start.c new file mode 100644 index 00000000..7d5f35fc --- /dev/null +++ b/lib/unictype/pr_id_start.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_id_start table. */ +#include "pr_id_start.h" + +bool +uc_is_property_id_start (ucs4_t uc) +{ + return bitmap_lookup (&u_property_id_start, uc); +} + +const uc_property_t UC_PROPERTY_ID_START = + { &uc_is_property_id_start }; diff --git a/lib/unictype/pr_id_start.h b/lib/unictype/pr_id_start.h new file mode 100644 index 00000000..178d718c --- /dev/null +++ b/lib/unictype/pr_id_start.h @@ -0,0 +1,580 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[3]; + short level2[3 << 7]; + /*unsigned*/ int level3[42 << 4]; + } +u_property_id_start = +{ + { 3 }, + { + 4 * sizeof (int) / sizeof (short) + 0, + 4 * sizeof (int) / sizeof (short) + 128, + 4 * sizeof (int) / sizeof (short) + 256 + }, + { + 4 + 384 * sizeof (short) / sizeof (int) + 0, + 4 + 384 * sizeof (short) / sizeof (int) + 16, + 4 + 384 * sizeof (short) / sizeof (int) + 32, + 4 + 384 * sizeof (short) / sizeof (int) + 48, + 4 + 384 * sizeof (short) / sizeof (int) + 64, + 4 + 384 * sizeof (short) / sizeof (int) + 80, + 4 + 384 * sizeof (short) / sizeof (int) + 96, + 4 + 384 * sizeof (short) / sizeof (int) + 112, + 4 + 384 * sizeof (short) / sizeof (int) + 128, + 4 + 384 * sizeof (short) / sizeof (int) + 144, + 4 + 384 * sizeof (short) / sizeof (int) + 160, + 4 + 384 * sizeof (short) / sizeof (int) + 176, + 4 + 384 * sizeof (short) / sizeof (int) + 192, + 4 + 384 * sizeof (short) / sizeof (int) + 208, + 4 + 384 * sizeof (short) / sizeof (int) + 224, + 4 + 384 * sizeof (short) / sizeof (int) + 240, + 4 + 384 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 272, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 352, + 4 + 384 * sizeof (short) / sizeof (int) + 368, + 4 + 384 * sizeof (short) / sizeof (int) + 384, + 4 + 384 * sizeof (short) / sizeof (int) + 400, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 416, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 432, + 4 + 384 * sizeof (short) / sizeof (int) + 448, + 4 + 384 * sizeof (short) / sizeof (int) + 464, + 4 + 384 * sizeof (short) / sizeof (int) + 480, + 4 + 384 * sizeof (short) / sizeof (int) + 496, + 4 + 384 * sizeof (short) / sizeof (int) + 512, + 4 + 384 * sizeof (short) / sizeof (int) + 528, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 544, + 4 + 384 * sizeof (short) / sizeof (int) + 560, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 576, + 4 + 384 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 608, + 4 + 384 * sizeof (short) / sizeof (int) + 624, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 640, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 656, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, + 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, + 0x00000000, 0x00000000, 0x00000000, 0x3CDF0000, + 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0x027FFFFF, 0xFFFFFFFE, + 0x000000FF, 0x00000000, 0xFFFF0000, 0x000707FF, + 0x00000000, 0xFFFFFFFE, 0x000007FF, 0xFFFEC000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9C00C060, + 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0002003F, 0xFFFFFC00, 0x043007FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xF8060003, + 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x00030003, + 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, + 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x00000003, + 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x00020003, + 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x00000000, + 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x00000003, + 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x00000003, + 0xFFFDDFE0, 0x23FFFDFF, 0x00000000, 0xFC000003, + 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, + 0xFFFFFFFE, 0x000DFFFF, 0x0000007F, 0x00000000, + 0xFEF02596, 0x200DECAE, 0x3000005F, 0x00000000, + 0x00000001, 0x00000000, 0xFFFFFEFF, 0x00001FFF, + 0x00000F00, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x800007FF, 0x3C3F0000, 0xFFE1C062, + 0x00004003, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, + 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007F9FFF, + 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, + 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, + 0xFFFFFFFF, 0x000FFFFF, 0x10800000, 0x00000000, + 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0x000005FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x00000000, 0xFFFF0000, 0x001F3FFF, + 0xFFFFFFFF, 0x000003FF, 0x000000FE, 0x00000000, + 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFE0, 0x000FFFFF, 0x00000FE0, 0x00000000, + 0xFFFFFFF8, 0x0000C001, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x0000000F, 0xFC00E000, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, + 0x00000000, 0x00000000, 0x00000000, 0x80020000, + 0x001F0000, 0x00000000, 0x00000000, 0x00000000, + 0x3F2FFC84, 0xF3FFFD50, 0x000043E0, 0xFFFFFFFF, + 0x000001FF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, + 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, + 0x000000E0, 0x1F3E03FE, 0xFFFFFFFE, 0xFFFFFFFF, + 0xF87FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00007FFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0x00000C00, 0xFFFFFFFF, 0x80007FFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000019FF, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFC, 0x000FFFFF, 0x00000000, 0x00000000, + 0xFFFFFC00, 0xFFFF003F, 0x0000007F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x000001FF, 0x00000FF7, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xA0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x0FFF0000, + 0x00000000, 0x00000000, 0x00000000, 0xFFDF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, + 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, + 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, + 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, + 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_ideographic.c b/lib/unictype/pr_ideographic.c new file mode 100644 index 00000000..18f7d02a --- /dev/null +++ b/lib/unictype/pr_ideographic.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_ideographic table. */ +#include "pr_ideographic.h" + +bool +uc_is_property_ideographic (ucs4_t uc) +{ + return bitmap_lookup (&u_property_ideographic, uc); +} + +const uc_property_t UC_PROPERTY_IDEOGRAPHIC = + { &uc_is_property_ideographic }; diff --git a/lib/unictype/pr_ideographic.h b/lib/unictype/pr_ideographic.h new file mode 100644 index 00000000..b0b2db2f --- /dev/null +++ b/lib/unictype/pr_ideographic.h @@ -0,0 +1,316 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[3]; + short level2[2 << 7]; + /*unsigned*/ int level3[8 << 4]; + } +u_property_ideographic = +{ + { 3 }, + { + 4 * sizeof (int) / sizeof (short) + 0, + -1, + 4 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + -1, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 32, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 256 * sizeof (short) / sizeof (int) + 64, + 4 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + -1 + }, + { + 0x000000C0, 0x070003FE, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_ids_binary_operator.c b/lib/unictype/pr_ids_binary_operator.c new file mode 100644 index 00000000..74e50c1b --- /dev/null +++ b/lib/unictype/pr_ids_binary_operator.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_ids_binary_operator table. */ +#include "pr_ids_binary_operator.h" + +bool +uc_is_property_ids_binary_operator (ucs4_t uc) +{ + return bitmap_lookup (&u_property_ids_binary_operator, uc); +} + +const uc_property_t UC_PROPERTY_IDS_BINARY_OPERATOR = + { &uc_is_property_ids_binary_operator }; diff --git a/lib/unictype/pr_ids_binary_operator.h b/lib/unictype/pr_ids_binary_operator.h new file mode 100644 index 00000000..2d7f4011 --- /dev/null +++ b/lib/unictype/pr_ids_binary_operator.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_ids_binary_operator = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0FF30000 + } +}; diff --git a/lib/unictype/pr_ids_trinary_operator.c b/lib/unictype/pr_ids_trinary_operator.c new file mode 100644 index 00000000..422c219e --- /dev/null +++ b/lib/unictype/pr_ids_trinary_operator.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_ids_trinary_operator table. */ +#include "pr_ids_trinary_operator.h" + +bool +uc_is_property_ids_trinary_operator (ucs4_t uc) +{ + return bitmap_lookup (&u_property_ids_trinary_operator, uc); +} + +const uc_property_t UC_PROPERTY_IDS_TRINARY_OPERATOR = + { &uc_is_property_ids_trinary_operator }; diff --git a/lib/unictype/pr_ids_trinary_operator.h b/lib/unictype/pr_ids_trinary_operator.h new file mode 100644 index 00000000..f4e57d87 --- /dev/null +++ b/lib/unictype/pr_ids_trinary_operator.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_ids_trinary_operator = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000C0000 + } +}; diff --git a/lib/unictype/pr_ignorable_control.c b/lib/unictype/pr_ignorable_control.c new file mode 100644 index 00000000..00a7223c --- /dev/null +++ b/lib/unictype/pr_ignorable_control.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_ignorable_control table. */ +#include "pr_ignorable_control.h" + +bool +uc_is_property_ignorable_control (ucs4_t uc) +{ + return bitmap_lookup (&u_property_ignorable_control, uc); +} + +const uc_property_t UC_PROPERTY_IGNORABLE_CONTROL = + { &uc_is_property_ignorable_control }; diff --git a/lib/unictype/pr_ignorable_control.h b/lib/unictype/pr_ignorable_control.h new file mode 100644 index 00000000..426c5f71 --- /dev/null +++ b/lib/unictype/pr_ignorable_control.h @@ -0,0 +1,452 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + /*unsigned*/ int level3[7 << 4]; + } +u_property_ignorable_control = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + 16 + 384 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x0FFFC1FE, 0x00000000, 0x00000000, 0x80000000, + 0xFFFFFFDF, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000F, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x20000000, 0x00000000, + 0x00008000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00300000, 0x00000000, 0x00000000, + 0x0000F800, 0x00007C00, 0x00000000, 0x0000FC1F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0E000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x07F80000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_iso_control.c b/lib/unictype/pr_iso_control.c new file mode 100644 index 00000000..9d2f392e --- /dev/null +++ b/lib/unictype/pr_iso_control.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_iso_control table. */ +#include "pr_iso_control.h" + +bool +uc_is_property_iso_control (ucs4_t uc) +{ + return bitmap_lookup (&u_property_iso_control, uc); +} + +#else + +bool +uc_is_property_iso_control (ucs4_t uc) +{ + return uc_is_general_category (uc, UC_CATEGORY_Cc); +} + +#endif + +const uc_property_t UC_PROPERTY_ISO_CONTROL = + { &uc_is_property_iso_control }; diff --git a/lib/unictype/pr_iso_control.h b/lib/unictype/pr_iso_control.h new file mode 100644 index 00000000..09537917 --- /dev/null +++ b/lib/unictype/pr_iso_control.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_iso_control = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0xFFFFFFFF, 0x00000000, 0x00000000, 0x80000000, + 0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_join_control.c b/lib/unictype/pr_join_control.c new file mode 100644 index 00000000..ad22cea9 --- /dev/null +++ b/lib/unictype/pr_join_control.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_join_control table. */ +#include "pr_join_control.h" + +bool +uc_is_property_join_control (ucs4_t uc) +{ + return bitmap_lookup (&u_property_join_control, uc); +} + +#else + +bool +uc_is_property_join_control (ucs4_t uc) +{ + return (uc >= 0x200C && uc <= 0x200D); +} + +#endif + +const uc_property_t UC_PROPERTY_JOIN_CONTROL = + { &uc_is_property_join_control }; diff --git a/lib/unictype/pr_join_control.h b/lib/unictype/pr_join_control.h new file mode 100644 index 00000000..649a1689 --- /dev/null +++ b/lib/unictype/pr_join_control.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_join_control = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00003000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_left_of_pair.c b/lib/unictype/pr_left_of_pair.c new file mode 100644 index 00000000..62b45f48 --- /dev/null +++ b/lib/unictype/pr_left_of_pair.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_left_of_pair table. */ +#include "pr_left_of_pair.h" + +bool +uc_is_property_left_of_pair (ucs4_t uc) +{ + return bitmap_lookup (&u_property_left_of_pair, uc); +} + +const uc_property_t UC_PROPERTY_LEFT_OF_PAIR = + { &uc_is_property_left_of_pair }; diff --git a/lib/unictype/pr_left_of_pair.h b/lib/unictype/pr_left_of_pair.h new file mode 100644 index 00000000..af7ee2cb --- /dev/null +++ b/lib/unictype/pr_left_of_pair.h @@ -0,0 +1,184 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[8 << 4]; + } +u_property_left_of_pair = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + 2 + 128 * sizeof (short) / sizeof (int) + 112 + }, + { + 0x00000000, 0x00000100, 0x08000000, 0x08000000, + 0x00000000, 0x00000800, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x14000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x08000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xDD000000, 0x02000000, 0x00000020, 0x20000000, + 0x00002000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x25515500, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x40000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xAAA00000, 0x2A00000A, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000100, 0x08000000, 0x08000000, 0x00000004, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_line_separator.c b/lib/unictype/pr_line_separator.c new file mode 100644 index 00000000..0c0b320a --- /dev/null +++ b/lib/unictype/pr_line_separator.c @@ -0,0 +1,55 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_line_separator table. */ +#include "pr_line_separator.h" + +bool +uc_is_property_line_separator (ucs4_t uc) +{ + return bitmap_lookup (&u_property_line_separator, uc); +} + +#elif 0 + +bool +uc_is_property_line_separator (ucs4_t uc) +{ + return uc_is_category_Zl (uc); +} + +#else + +bool +uc_is_property_line_separator (ucs4_t uc) +{ + return (uc == 0x2028); +} + +#endif + +const uc_property_t UC_PROPERTY_LINE_SEPARATOR = + { &uc_is_property_line_separator }; diff --git a/lib/unictype/pr_line_separator.h b/lib/unictype/pr_line_separator.h new file mode 100644 index 00000000..56dd92b2 --- /dev/null +++ b/lib/unictype/pr_line_separator.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_line_separator = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000100, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_logical_order_exception.c b/lib/unictype/pr_logical_order_exception.c new file mode 100644 index 00000000..e06f2719 --- /dev/null +++ b/lib/unictype/pr_logical_order_exception.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_logical_order_exception table. */ +#include "pr_logical_order_exception.h" + +bool +uc_is_property_logical_order_exception (ucs4_t uc) +{ + return bitmap_lookup (&u_property_logical_order_exception, uc); +} + +const uc_property_t UC_PROPERTY_LOGICAL_ORDER_EXCEPTION = + { &uc_is_property_logical_order_exception }; diff --git a/lib/unictype/pr_logical_order_exception.h b/lib/unictype/pr_logical_order_exception.h new file mode 100644 index 00000000..c8894ad0 --- /dev/null +++ b/lib/unictype/pr_logical_order_exception.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_logical_order_exception = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x0000001F, 0x00000000, + 0x00000000, 0x00000000, 0x0000001F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_lowercase.c b/lib/unictype/pr_lowercase.c new file mode 100644 index 00000000..ed719da9 --- /dev/null +++ b/lib/unictype/pr_lowercase.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_lowercase table. */ +#include "pr_lowercase.h" + +bool +uc_is_property_lowercase (ucs4_t uc) +{ + return bitmap_lookup (&u_property_lowercase, uc); +} + +const uc_property_t UC_PROPERTY_LOWERCASE = + { &uc_is_property_lowercase }; diff --git a/lib/unictype/pr_lowercase.h b/lib/unictype/pr_lowercase.h new file mode 100644 index 00000000..3443aeca --- /dev/null +++ b/lib/unictype/pr_lowercase.h @@ -0,0 +1,339 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[14 << 4]; + } +u_property_lowercase = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x07FFFFFE, + 0x00000000, 0x04200400, 0x80000000, 0xFF7FFFFF, + 0xAAAAAAAA, 0x55AAAAAA, 0xAAAAAB55, 0xD4AAAAAA, + 0x4E243129, 0xE6512D2A, 0xB5555240, 0xAA29AAAA, + 0xAAAAAAAA, 0x93FAAAAA, 0xFFFFAA85, 0xFFFFFFFF, + 0xFFEFFFFF, 0x01FFFFFF, 0x00000003, 0x0000001F, + 0x00000000, 0x00000000, 0x00000020, 0x3C8A0000, + 0x00010000, 0xFFFFF000, 0xAAE37FFF, 0x192FAAAA, + 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xAAAAAAAA, + 0xAAAAA802, 0xAAAAAAAA, 0xAAAAD554, 0xAAAAAAAA, + 0xAAAAAAAA, 0x0000000A, 0x00000000, 0xFFFFFFFE, + 0x000000FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, + 0xBFEAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, + 0x003F00FF, 0x00FF00FF, 0x00FF003F, 0x3FFF00FF, + 0x00FF00FF, 0x40DF00FF, 0x00CF00DC, 0x00DC00FF, + 0x00000000, 0x00000000, 0x00000000, 0x80020000, + 0x001F0000, 0x00000000, 0x00000000, 0x00000000, + 0x0008C400, 0x32108000, 0x000043C0, 0xFFFF0000, + 0x00000010, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFF0000, 0x7FFFFFFF, 0x3FDA1562, + 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0x0000001A, + 0xFFFFFFFF, 0x0000003F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xAAAAAAAA, 0x00002AA8, + 0x00AAAAAA, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xAAABAAA8, 0xAAAAAAAA, 0x95FFAAAA, + 0x000010AA, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00F8007F, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFF00, 0x0000FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFC000000, 0x000FFFFF, 0xFFDFC000, 0x000000FF, + 0x0FFFFFFC, 0xEBC00000, 0x0000FFEF, 0xFFFFFC00, + 0xC000000F, 0x00FFFFFF, 0xFFFC0000, 0x00000FFF, + 0xFFFFFFC0, 0xFC000000, 0x000FFFFF, 0xFFFFC000, + 0x000000FF, 0x0FFFFFFC, 0xFFC00000, 0x0000FFFF, + 0xFFFFFC00, 0x0000003F, 0xF7FFFFFC, 0xF0000003, + 0x0FDFFFFF, 0xFFC00000, 0x003F7FFF, 0xFFFF0000, + 0x0000FDFF, 0xFFFFFC00, 0x00000BF7, 0x00000000 + } +}; diff --git a/lib/unictype/pr_math.c b/lib/unictype/pr_math.c new file mode 100644 index 00000000..a4971d25 --- /dev/null +++ b/lib/unictype/pr_math.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_math table. */ +#include "pr_math.h" + +bool +uc_is_property_math (ucs4_t uc) +{ + return bitmap_lookup (&u_property_math, uc); +} + +const uc_property_t UC_PROPERTY_MATH = + { &uc_is_property_math }; diff --git a/lib/unictype/pr_math.h b/lib/unictype/pr_math.h new file mode 100644 index 00000000..dd3ae7e5 --- /dev/null +++ b/lib/unictype/pr_math.h @@ -0,0 +1,335 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[13 << 4]; + } +u_property_math = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x70000800, 0x40000000, 0x50000000, + 0x00000000, 0x00021000, 0x00800000, 0x00800000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00270000, 0x00730000, + 0x000001C0, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00400000, 0x001C0000, 0x00040011, 0x7C00001E, + 0x00007C00, 0x00000000, 0x1FFF0000, 0x0000F862, + 0x3E2FFC04, 0xF1FBB310, 0x00000BFF, 0x00000000, + 0xFFFF0000, 0xF0C37EFF, 0x2FFFFFFF, 0xFFF00030, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000F00, 0x00000003, 0x00000000, 0x10000000, + 0xF8000000, 0x00BFFFFF, 0xF0010000, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xF0FFC003, 0x000F8CC3, 0xFF001F94, + 0x00000060, 0x00000000, 0x00000005, 0x0000E00F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF17FF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0xFFFF0000, 0x00001F9F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0000017E, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x70000800, 0x50000000, 0x50000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00001E04, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFCFFF, 0xFFFFFFFF + } +}; diff --git a/lib/unictype/pr_non_break.c b/lib/unictype/pr_non_break.c new file mode 100644 index 00000000..d1855d4f --- /dev/null +++ b/lib/unictype/pr_non_break.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_non_break table. */ +#include "pr_non_break.h" + +bool +uc_is_property_non_break (ucs4_t uc) +{ + return bitmap_lookup (&u_property_non_break, uc); +} + +const uc_property_t UC_PROPERTY_NON_BREAK = + { &uc_is_property_non_break }; diff --git a/lib/unictype/pr_non_break.h b/lib/unictype/pr_non_break.h new file mode 100644 index 00000000..0525fb97 --- /dev/null +++ b/lib/unictype/pr_non_break.h @@ -0,0 +1,172 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_property_non_break = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xF0008000, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00041100, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00004000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00020080, 0x00008000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_not_a_character.c b/lib/unictype/pr_not_a_character.c new file mode 100644 index 00000000..05910fe6 --- /dev/null +++ b/lib/unictype/pr_not_a_character.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_not_a_character table. */ +#include "pr_not_a_character.h" + +bool +uc_is_property_not_a_character (ucs4_t uc) +{ + return bitmap_lookup (&u_property_not_a_character, uc); +} + +const uc_property_t UC_PROPERTY_NOT_A_CHARACTER = + { &uc_is_property_not_a_character }; diff --git a/lib/unictype/pr_not_a_character.h b/lib/unictype/pr_not_a_character.h new file mode 100644 index 00000000..267df707 --- /dev/null +++ b/lib/unictype/pr_not_a_character.h @@ -0,0 +1,306 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[17]; + short level2[2 << 7]; + /*unsigned*/ int level3[2 << 4]; + } +u_property_not_a_character = +{ + { 17 }, + { + 18 * sizeof (int) / sizeof (short) + 0, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 256 * sizeof (short) / sizeof (int) + 16 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0x0000FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xC0000000 + } +}; diff --git a/lib/unictype/pr_numeric.c b/lib/unictype/pr_numeric.c new file mode 100644 index 00000000..dfa2250a --- /dev/null +++ b/lib/unictype/pr_numeric.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_numeric table. */ +#include "pr_numeric.h" + +bool +uc_is_property_numeric (ucs4_t uc) +{ + return bitmap_lookup (&u_property_numeric, uc); +} + +const uc_property_t UC_PROPERTY_NUMERIC = + { &uc_is_property_numeric }; diff --git a/lib/unictype/pr_numeric.h b/lib/unictype/pr_numeric.h new file mode 100644 index 00000000..14aaa03b --- /dev/null +++ b/lib/unictype/pr_numeric.h @@ -0,0 +1,540 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[3]; + short level2[3 << 7]; + /*unsigned*/ int level3[32 << 4]; + } +u_property_numeric = +{ + { 3 }, + { + 4 * sizeof (int) / sizeof (short) + 0, + 4 * sizeof (int) / sizeof (short) + 128, + 4 * sizeof (int) / sizeof (short) + 256 + }, + { + 4 + 384 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 16, + 4 + 384 * sizeof (short) / sizeof (int) + 32, + 4 + 384 * sizeof (short) / sizeof (int) + 48, + 4 + 384 * sizeof (short) / sizeof (int) + 64, + 4 + 384 * sizeof (short) / sizeof (int) + 80, + 4 + 384 * sizeof (short) / sizeof (int) + 96, + 4 + 384 * sizeof (short) / sizeof (int) + 112, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 128, + 4 + 384 * sizeof (short) / sizeof (int) + 144, + 4 + 384 * sizeof (short) / sizeof (int) + 160, + 4 + 384 * sizeof (short) / sizeof (int) + 176, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 192, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 208, + 4 + 384 * sizeof (short) / sizeof (int) + 224, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 240, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 256, + 4 + 384 * sizeof (short) / sizeof (int) + 272, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 352, + 4 + 384 * sizeof (short) / sizeof (int) + 368, + 4 + 384 * sizeof (short) / sizeof (int) + 384, + 4 + 384 * sizeof (short) / sizeof (int) + 400, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 416, + 4 + 384 * sizeof (short) / sizeof (int) + 432, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 448, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 464, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 480, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 496, + -1, + -1, + -1 + }, + { + 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, + 0x00000000, 0x720C0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x03FF0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x000003FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x03F0FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0007FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x7F00FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x003FFFC0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x000FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x000003FF, 0x00000000, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x1FFFFE00, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0001C000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03FF03FF, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000FFC0, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x03FF0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF03FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03F10000, + 0x000003FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFF80000, 0xFFFFFFFF, + 0x000001EF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x0FFFFFFF, 0x00000000, 0x00000000, 0xFFFFFC00, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, + 0x000FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000080, 0x070003FE, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003C0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000003FF, 0xFFFE0000, 0x00000000, + 0x000003FF, 0xFFFE0000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x000003FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x03FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x01080800, + 0x00000000, 0x00040000, 0x000A0000, 0x20000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03FF0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFF80, 0x000FFFFF, 0xFFFFFFFF, 0x01FFFFFF, + 0x00000400, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0000000F, 0x00000402, 0x00000000, + 0x00000000, 0x00000000, 0x003E0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03C00000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x000000FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFF3FFFF, 0xFF3FFFFF, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0003FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFC000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00010000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_other_alphabetic.c b/lib/unictype/pr_other_alphabetic.c new file mode 100644 index 00000000..1a880f5b --- /dev/null +++ b/lib/unictype/pr_other_alphabetic.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_other_alphabetic table. */ +#include "pr_other_alphabetic.h" + +bool +uc_is_property_other_alphabetic (ucs4_t uc) +{ + return bitmap_lookup (&u_property_other_alphabetic, uc); +} + +const uc_property_t UC_PROPERTY_OTHER_ALPHABETIC = + { &uc_is_property_other_alphabetic }; diff --git a/lib/unictype/pr_other_alphabetic.h b/lib/unictype/pr_other_alphabetic.h new file mode 100644 index 00000000..c0c42717 --- /dev/null +++ b/lib/unictype/pr_other_alphabetic.h @@ -0,0 +1,359 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[19 << 4]; + } +u_property_other_alphabetic = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000020, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xBFFF0000, 0x000000B6, 0x00000000, + 0x07FF0000, 0x00000000, 0x7EFFF800, 0x00010000, + 0x00000000, 0x00000000, 0x1FC00000, 0x0000219E, + 0x00020000, 0xFFFF0000, 0x00000000, 0x00000000, + 0x00000000, 0x0001FFC0, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000E, 0xC0000000, 0x00001FFF, 0x0000000C, + 0x0000000E, 0xC0000000, 0x0080199F, 0x0000000C, + 0x0000000E, 0xC0000000, 0x00021987, 0x00230000, + 0x0000000E, 0xC0000000, 0x00001BBF, 0x0000000C, + 0x0000000E, 0xC0000000, 0x00C0199F, 0x0000000C, + 0x00000004, 0xC0000000, 0x00801DC7, 0x00000000, + 0x0000000E, 0xC0000000, 0x00601DDF, 0x0000000C, + 0x0000000C, 0xC0000000, 0x00601DDF, 0x0000000C, + 0x0000000C, 0xC0000000, 0x00801DDF, 0x0000000C, + 0x0000000C, 0x00000000, 0xFF5F8000, 0x000C0000, + 0x00000000, 0x07F20000, 0x00002000, 0x00000000, + 0x00000000, 0x1BF20000, 0x00002000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFE0000, + 0xFEFF0003, 0x1FFFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x797FF800, 0xC3C00000, 0x001E0185, + 0x0000007C, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000C0000, 0x000C0000, 0x000C0000, 0x000C0000, + 0x00000000, 0xFFC00000, 0x000001FF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x01FF0FFF, 0x00000000, 0x00000000, + 0x00000000, 0xFFFF0000, 0x00000301, 0x00000000, + 0x0F800000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000001F, 0xFFE00000, 0x0000000F, 0x00000000, + 0x00000007, 0x000003FE, 0x00000000, 0x00000000, + 0x00000000, 0x003FFFF0, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFC00000, 0xFFFFFFFF, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF, + 0x00000000, 0x000000F8, 0x00000000, 0x00000000, + 0x00000003, 0xFFF00000, 0x0000000F, 0x00000000, + 0x00000000, 0x000007C0, 0x0007FF80, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x007FFE00, 0x00003008, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x40000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000F06E, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_other_default_ignorable_code_point.c b/lib/unictype/pr_other_default_ignorable_code_point.c new file mode 100644 index 00000000..434977d1 --- /dev/null +++ b/lib/unictype/pr_other_default_ignorable_code_point.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_other_default_ignorable_code_point table. */ +#include "pr_other_default_ignorable_code_point.h" + +bool +uc_is_property_other_default_ignorable_code_point (ucs4_t uc) +{ + return bitmap_lookup (&u_property_other_default_ignorable_code_point, uc); +} + +const uc_property_t UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT = + { &uc_is_property_other_default_ignorable_code_point }; diff --git a/lib/unictype/pr_other_default_ignorable_code_point.h b/lib/unictype/pr_other_default_ignorable_code_point.h new file mode 100644 index 00000000..621cf4ce --- /dev/null +++ b/lib/unictype/pr_other_default_ignorable_code_point.h @@ -0,0 +1,324 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[2 << 7]; + /*unsigned*/ int level3[7 << 4]; + } +u_property_other_default_ignorable_code_point = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + 16 + 256 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 256 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 256 * sizeof (short) / sizeof (int) + 64, + 16 + 256 * sizeof (short) / sizeof (int) + 80, + 16 + 256 * sizeof (short) / sizeof (int) + 96, + 16 + 256 * sizeof (short) / sizeof (int) + 96, + 16 + 256 * sizeof (short) / sizeof (int) + 96, + 16 + 256 * sizeof (short) / sizeof (int) + 96, + 16 + 256 * sizeof (short) / sizeof (int) + 96, + 16 + 256 * sizeof (short) / sizeof (int) + 96, + 16 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00008000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x80000000, 0x00000001, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000003E0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000010, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x01FF0000, + 0xFFFFFFFD, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF + } +}; diff --git a/lib/unictype/pr_other_grapheme_extend.c b/lib/unictype/pr_other_grapheme_extend.c new file mode 100644 index 00000000..fb7af9c2 --- /dev/null +++ b/lib/unictype/pr_other_grapheme_extend.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_other_grapheme_extend table. */ +#include "pr_other_grapheme_extend.h" + +bool +uc_is_property_other_grapheme_extend (ucs4_t uc) +{ + return bitmap_lookup (&u_property_other_grapheme_extend, uc); +} + +const uc_property_t UC_PROPERTY_OTHER_GRAPHEME_EXTEND = + { &uc_is_property_other_grapheme_extend }; diff --git a/lib/unictype/pr_other_grapheme_extend.h b/lib/unictype/pr_other_grapheme_extend.h new file mode 100644 index 00000000..cbf3b98a --- /dev/null +++ b/lib/unictype/pr_other_grapheme_extend.h @@ -0,0 +1,307 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[6 << 4]; + } +u_property_other_grapheme_extend = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x40000000, 0x00800000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x40000000, 0x00800000, 0x00000000, + 0x00000000, 0x40000000, 0x00800000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00600004, 0x00000000, + 0x00000000, 0x40000000, 0x00800000, 0x00000000, + 0x00000000, 0x00000000, 0x80008000, 0x00000000, + 0x00003000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0007C020, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_other_id_continue.c b/lib/unictype/pr_other_id_continue.c new file mode 100644 index 00000000..75e71c3c --- /dev/null +++ b/lib/unictype/pr_other_id_continue.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_other_id_continue table. */ +#include "pr_other_id_continue.h" + +bool +uc_is_property_other_id_continue (ucs4_t uc) +{ + return bitmap_lookup (&u_property_other_id_continue, uc); +} + +const uc_property_t UC_PROPERTY_OTHER_ID_CONTINUE = + { &uc_is_property_other_id_continue }; diff --git a/lib/unictype/pr_other_id_continue.h b/lib/unictype/pr_other_id_continue.h new file mode 100644 index 00000000..78e2b638 --- /dev/null +++ b/lib/unictype/pr_other_id_continue.h @@ -0,0 +1,164 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[3 << 4]; + } +u_property_other_id_continue = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00800000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000080, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0003FE00, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_other_id_start.c b/lib/unictype/pr_other_id_start.c new file mode 100644 index 00000000..1858e47f --- /dev/null +++ b/lib/unictype/pr_other_id_start.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_other_id_start table. */ +#include "pr_other_id_start.h" + +bool +uc_is_property_other_id_start (ucs4_t uc) +{ + return bitmap_lookup (&u_property_other_id_start, uc); +} + +const uc_property_t UC_PROPERTY_OTHER_ID_START = + { &uc_is_property_other_id_start }; diff --git a/lib/unictype/pr_other_id_start.h b/lib/unictype/pr_other_id_start.h new file mode 100644 index 00000000..233f80f3 --- /dev/null +++ b/lib/unictype/pr_other_id_start.h @@ -0,0 +1,160 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[2 << 4]; + } +u_property_other_id_start = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x01000000, 0x00004000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x18000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_other_lowercase.c b/lib/unictype/pr_other_lowercase.c new file mode 100644 index 00000000..c199b174 --- /dev/null +++ b/lib/unictype/pr_other_lowercase.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_other_lowercase table. */ +#include "pr_other_lowercase.h" + +bool +uc_is_property_other_lowercase (ucs4_t uc) +{ + return bitmap_lookup (&u_property_other_lowercase, uc); +} + +const uc_property_t UC_PROPERTY_OTHER_LOWERCASE = + { &uc_is_property_other_lowercase }; diff --git a/lib/unictype/pr_other_lowercase.h b/lib/unictype/pr_other_lowercase.h new file mode 100644 index 00000000..78119089 --- /dev/null +++ b/lib/unictype/pr_other_lowercase.h @@ -0,0 +1,176 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[6 << 4]; + } +u_property_other_lowercase = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x01FF0000, 0x00000003, 0x0000001F, + 0x00000000, 0x00000000, 0x00000020, 0x04000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFF000, 0xFFFFFFFF, 0x01000003, + 0xF8000000, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x001F0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFF0000, 0x000003FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00010000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_other_math.c b/lib/unictype/pr_other_math.c new file mode 100644 index 00000000..7e130e7f --- /dev/null +++ b/lib/unictype/pr_other_math.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_other_math table. */ +#include "pr_other_math.h" + +bool +uc_is_property_other_math (ucs4_t uc) +{ + return bitmap_lookup (&u_property_other_math, uc); +} + +const uc_property_t UC_PROPERTY_OTHER_MATH = + { &uc_is_property_other_math }; diff --git a/lib/unictype/pr_other_math.h b/lib/unictype/pr_other_math.h new file mode 100644 index 00000000..116311d9 --- /dev/null +++ b/lib/unictype/pr_other_math.h @@ -0,0 +1,323 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[10 << 4]; + } +u_property_other_math = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x40000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00270000, 0x00330000, + 0x00400000, 0x001C0000, 0x00000001, 0x6000001E, + 0x00006000, 0x00000000, 0x1FFF0000, 0x0000F862, + 0x3E2FFC04, 0xF1FBB310, 0x000003E0, 0x00000000, + 0xF3E00000, 0xF0C33EB6, 0x2FEB3FFF, 0x00000030, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00B00000, 0x00010000, 0x00000004, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xF07FC003, 0x000F8CC1, 0x00001F94, + 0x00000060, 0x00000000, 0x00000005, 0x0000600F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000060, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x01FFFFF8, 0x00000000, 0x0F000000, 0x30000000, + 0x00000000, 0x00000000, 0x00000000, 0x0000010A, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x50000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, + 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, + 0xFFFFFDFF, 0xFFFFFDFF, 0xFFFFCFF7, 0xFFFFFFFF + } +}; diff --git a/lib/unictype/pr_other_uppercase.c b/lib/unictype/pr_other_uppercase.c new file mode 100644 index 00000000..278ce514 --- /dev/null +++ b/lib/unictype/pr_other_uppercase.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_other_uppercase table. */ +#include "pr_other_uppercase.h" + +bool +uc_is_property_other_uppercase (ucs4_t uc) +{ + return bitmap_lookup (&u_property_other_uppercase, uc); +} + +const uc_property_t UC_PROPERTY_OTHER_UPPERCASE = + { &uc_is_property_other_uppercase }; diff --git a/lib/unictype/pr_other_uppercase.h b/lib/unictype/pr_other_uppercase.h new file mode 100644 index 00000000..be01f4d7 --- /dev/null +++ b/lib/unictype/pr_other_uppercase.h @@ -0,0 +1,160 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[2 << 4]; + } +u_property_other_uppercase = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0000FFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFC00000, 0x0000FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_paired_punctuation.c b/lib/unictype/pr_paired_punctuation.c new file mode 100644 index 00000000..52b0dbb4 --- /dev/null +++ b/lib/unictype/pr_paired_punctuation.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_paired_punctuation table. */ +#include "pr_paired_punctuation.h" + +bool +uc_is_property_paired_punctuation (ucs4_t uc) +{ + return bitmap_lookup (&u_property_paired_punctuation, uc); +} + +const uc_property_t UC_PROPERTY_PAIRED_PUNCTUATION = + { &uc_is_property_paired_punctuation }; diff --git a/lib/unictype/pr_paired_punctuation.h b/lib/unictype/pr_paired_punctuation.h new file mode 100644 index 00000000..7723d322 --- /dev/null +++ b/lib/unictype/pr_paired_punctuation.h @@ -0,0 +1,184 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[8 << 4]; + } +u_property_paired_punctuation = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + 2 + 128 * sizeof (short) / sizeof (int) + 112 + }, + { + 0x00000000, 0x00000300, 0x28000000, 0x28000000, + 0x00000000, 0x08000800, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x3C000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x18000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFF000000, 0x06000000, 0x00000060, 0x60000000, + 0x00006000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000600, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xEFF3FF00, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xC0000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFE00000, 0x7E00001F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000300, 0x28000000, 0x28000000, 0x0000000C, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_paragraph_separator.c b/lib/unictype/pr_paragraph_separator.c new file mode 100644 index 00000000..c1aeff31 --- /dev/null +++ b/lib/unictype/pr_paragraph_separator.c @@ -0,0 +1,55 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_paragraph_separator table. */ +#include "pr_paragraph_separator.h" + +bool +uc_is_property_paragraph_separator (ucs4_t uc) +{ + return bitmap_lookup (&u_property_paragraph_separator, uc); +} + +#elif 0 + +bool +uc_is_property_paragraph_separator (ucs4_t uc) +{ + return uc_is_category_Zp (uc); +} + +#else + +bool +uc_is_property_paragraph_separator (ucs4_t uc) +{ + return (uc == 0x2029); +} + +#endif + +const uc_property_t UC_PROPERTY_PARAGRAPH_SEPARATOR = + { &uc_is_property_paragraph_separator }; diff --git a/lib/unictype/pr_paragraph_separator.h b/lib/unictype/pr_paragraph_separator.h new file mode 100644 index 00000000..72c2a85e --- /dev/null +++ b/lib/unictype/pr_paragraph_separator.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_paragraph_separator = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000200, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_pattern_syntax.c b/lib/unictype/pr_pattern_syntax.c new file mode 100644 index 00000000..5f5366f6 --- /dev/null +++ b/lib/unictype/pr_pattern_syntax.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_pattern_syntax table. */ +#include "pr_pattern_syntax.h" + +bool +uc_is_property_pattern_syntax (ucs4_t uc) +{ + return bitmap_lookup (&u_property_pattern_syntax, uc); +} + +const uc_property_t UC_PROPERTY_PATTERN_SYNTAX = + { &uc_is_property_pattern_syntax }; diff --git a/lib/unictype/pr_pattern_syntax.h b/lib/unictype/pr_pattern_syntax.h new file mode 100644 index 00000000..f3990657 --- /dev/null +++ b/lib/unictype/pr_pattern_syntax.h @@ -0,0 +1,188 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[9 << 4]; + } +u_property_pattern_syntax = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 112, + 2 + 128 * sizeof (short) / sizeof (int) + 128 + }, + { + 0x00000000, 0xFC00FFFE, 0x78000001, 0x78000001, + 0x00000000, 0x88435AFE, 0x00800000, 0x00800000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFF0000, 0x7FFF00FF, 0x7FEFFFFE, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFF0000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, + 0xFFF00000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFF0E, 0x00010001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xC0000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000060, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_pattern_white_space.c b/lib/unictype/pr_pattern_white_space.c new file mode 100644 index 00000000..407cc7e5 --- /dev/null +++ b/lib/unictype/pr_pattern_white_space.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_pattern_white_space table. */ +#include "pr_pattern_white_space.h" + +bool +uc_is_property_pattern_white_space (ucs4_t uc) +{ + return bitmap_lookup (&u_property_pattern_white_space, uc); +} + +const uc_property_t UC_PROPERTY_PATTERN_WHITE_SPACE = + { &uc_is_property_pattern_white_space }; diff --git a/lib/unictype/pr_pattern_white_space.h b/lib/unictype/pr_pattern_white_space.h new file mode 100644 index 00000000..559d08f6 --- /dev/null +++ b/lib/unictype/pr_pattern_white_space.h @@ -0,0 +1,160 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[2 << 4]; + } +u_property_pattern_white_space = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00003E00, 0x00000001, 0x00000000, 0x00000000, + 0x00000020, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000C000, 0x00000300, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_private_use.c b/lib/unictype/pr_private_use.c new file mode 100644 index 00000000..64a28c78 --- /dev/null +++ b/lib/unictype/pr_private_use.c @@ -0,0 +1,49 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_private_use table. */ +#include "pr_private_use.h" + +bool +uc_is_property_private_use (ucs4_t uc) +{ + return bitmap_lookup (&u_property_private_use, uc); +} + +#else + +bool +uc_is_property_private_use (ucs4_t uc) +{ + return (uc >= 0xE000 && uc <= 0xF8FF) + || (uc >= 0xF0000 && uc <= 0xFFFFD) + || (uc >= 0x100000 && uc <= 0x10FFFD); +} + +#endif + +const uc_property_t UC_PROPERTY_PRIVATE_USE = + { &uc_is_property_private_use }; diff --git a/lib/unictype/pr_private_use.h b/lib/unictype/pr_private_use.h new file mode 100644 index 00000000..e18b60e2 --- /dev/null +++ b/lib/unictype/pr_private_use.h @@ -0,0 +1,310 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[17]; + short level2[2 << 7]; + /*unsigned*/ int level3[3 << 4]; + } +u_property_private_use = +{ + { 17 }, + { + 18 * sizeof (int) / sizeof (short) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 * sizeof (int) / sizeof (short) + 128, + 18 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 0, + 18 + 256 * sizeof (short) / sizeof (int) + 32 + }, + { + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF + } +}; diff --git a/lib/unictype/pr_punctuation.c b/lib/unictype/pr_punctuation.c new file mode 100644 index 00000000..00efeee3 --- /dev/null +++ b/lib/unictype/pr_punctuation.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_punctuation table. */ +#include "pr_punctuation.h" + +bool +uc_is_property_punctuation (ucs4_t uc) +{ + return bitmap_lookup (&u_property_punctuation, uc); +} + +#else + +bool +uc_is_property_punctuation (ucs4_t uc) +{ + return uc_is_general_category (uc, UC_CATEGORY_P); +} + +#endif + +const uc_property_t UC_PROPERTY_PUNCTUATION = + { &uc_is_property_punctuation }; diff --git a/lib/unictype/pr_punctuation.h b/lib/unictype/pr_punctuation.h new file mode 100644 index 00000000..cfa6649b --- /dev/null +++ b/lib/unictype/pr_punctuation.h @@ -0,0 +1,403 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[30 << 4]; + } +u_property_punctuation = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + 3 + 256 * sizeof (short) / sizeof (int) + 304, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 320, + 3 + 256 * sizeof (short) / sizeof (int) + 336, + 3 + 256 * sizeof (short) / sizeof (int) + 352, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 368, + 3 + 256 * sizeof (short) / sizeof (int) + 384, + 3 + 256 * sizeof (short) / sizeof (int) + 400, + 3 + 256 * sizeof (short) / sizeof (int) + 416, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 432, + 3 + 256 * sizeof (short) / sizeof (int) + 448, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 464, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x8C00F7EE, 0xB8000001, 0x28000000, + 0x00000000, 0x88800802, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x40000000, + 0x00000080, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFC000000, 0x00000000, + 0x00000600, 0x40000000, 0x00000049, 0x00180000, + 0xC8003600, 0x00000000, 0x00000000, 0x00003C00, + 0x00000000, 0x00000000, 0x00100000, 0x00000000, + 0x00003FFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03800000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00010030, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00100000, + 0x00000000, 0x00000000, 0x0C008000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0007FFF0, 0x3C000000, 0x00000000, 0x00000000, + 0x00000020, 0x00000000, 0x001F0000, 0x00000000, + 0x00000000, 0x00000000, 0x0000FC00, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000001FE, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00006000, + 0x18000000, 0x00000000, 0x00000000, 0x00003800, + 0x00000000, 0x00600000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x07700000, 0x00000000, + 0x000007FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000030, 0x00000000, + 0x00000000, 0x00000000, 0xC0000000, 0x00000000, + 0xC0000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFC000000, 0x00000001, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xF8000000, 0x00000000, 0xC0000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFF0000, 0xFFFF00FF, 0x7FFBFFEF, 0x60000000, + 0x00006000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000600, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x003FFF00, + 0x00000000, 0x00000000, 0x00000060, 0x0000FFC0, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x01FFFFF8, 0x00000000, 0x0F000000, 0x30000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xDE000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x00017FFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFF3FF0E, 0x20010000, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x08000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000E000, 0x00000000, 0x00000000, 0x40080000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00F00000, + 0x00000000, 0x00000000, 0x0000C000, 0x00000000, + 0x00000000, 0x0000C000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xF0000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xC0000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03FF0000, 0xFFFF0000, 0xFFF7FFFF, 0x00000D0B, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x8C00F7EE, 0xB8000001, 0xA8000000, 0x0000003F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000003, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x80000000, 0x00000000, 0x00010000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x80000000, 0x80000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x01FF0000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000F0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_quotation_mark.c b/lib/unictype/pr_quotation_mark.c new file mode 100644 index 00000000..e07fef2e --- /dev/null +++ b/lib/unictype/pr_quotation_mark.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_quotation_mark table. */ +#include "pr_quotation_mark.h" + +bool +uc_is_property_quotation_mark (ucs4_t uc) +{ + return bitmap_lookup (&u_property_quotation_mark, uc); +} + +const uc_property_t UC_PROPERTY_QUOTATION_MARK = + { &uc_is_property_quotation_mark }; diff --git a/lib/unictype/pr_quotation_mark.h b/lib/unictype/pr_quotation_mark.h new file mode 100644 index 00000000..e334761b --- /dev/null +++ b/lib/unictype/pr_quotation_mark.h @@ -0,0 +1,168 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[4 << 4]; + } +u_property_quotation_mark = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48 + }, + { + 0x00000000, 0x00000084, 0x00000000, 0x00000000, + 0x00000000, 0x08000800, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFF000000, 0x06000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xE000F000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000001E, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000084, 0x00000000, 0x00000000, 0x0000000C, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_radical.c b/lib/unictype/pr_radical.c new file mode 100644 index 00000000..13431628 --- /dev/null +++ b/lib/unictype/pr_radical.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_radical table. */ +#include "pr_radical.h" + +bool +uc_is_property_radical (ucs4_t uc) +{ + return bitmap_lookup (&u_property_radical, uc); +} + +const uc_property_t UC_PROPERTY_RADICAL = + { &uc_is_property_radical }; diff --git a/lib/unictype/pr_radical.h b/lib/unictype/pr_radical.h new file mode 100644 index 00000000..e4b54c1d --- /dev/null +++ b/lib/unictype/pr_radical.h @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[1 << 4]; + } +u_property_radical = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFBFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x003FFFFF, 0x00000000 + } +}; diff --git a/lib/unictype/pr_sentence_terminal.c b/lib/unictype/pr_sentence_terminal.c new file mode 100644 index 00000000..85d5e68e --- /dev/null +++ b/lib/unictype/pr_sentence_terminal.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_sentence_terminal table. */ +#include "pr_sentence_terminal.h" + +bool +uc_is_property_sentence_terminal (ucs4_t uc) +{ + return bitmap_lookup (&u_property_sentence_terminal, uc); +} + +const uc_property_t UC_PROPERTY_SENTENCE_TERMINAL = + { &uc_is_property_sentence_terminal }; diff --git a/lib/unictype/pr_sentence_terminal.h b/lib/unictype/pr_sentence_terminal.h new file mode 100644 index 00000000..fd5bfbfa --- /dev/null +++ b/lib/unictype/pr_sentence_terminal.h @@ -0,0 +1,220 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[17 << 4]; + } +u_property_sentence_terminal = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + 2 + 128 * sizeof (short) / sizeof (int) + 80, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 96, + 2 + 128 * sizeof (short) / sizeof (int) + 112, + 2 + 128 * sizeof (short) / sizeof (int) + 128, + 2 + 128 * sizeof (short) / sizeof (int) + 144, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 176, + 2 + 128 * sizeof (short) / sizeof (int) + 192, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 208, + 2 + 128 * sizeof (short) / sizeof (int) + 224, + 2 + 128 * sizeof (short) / sizeof (int) + 240, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 256 + }, + { + 0x00000000, 0x80004002, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x50000000, 0x00000000, + 0x00000200, 0x00000000, 0x00000000, 0x00000000, + 0x80000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00100000, 0x00000000, + 0x00000007, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x02000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000030, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000C00, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000184, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00004000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000208, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000030, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xCC000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x18000000, 0x00000000, 0xC0000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x30000000, 0x00000380, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00004000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000004, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000C000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00C00000, + 0x00000000, 0x00000000, 0x0000C000, 0x00000000, + 0x00000000, 0x00008000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xE0000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00C40000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x80004002, 0x00000000, 0x00000000, 0x00000002, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_soft_dotted.c b/lib/unictype/pr_soft_dotted.c new file mode 100644 index 00000000..b261d3c1 --- /dev/null +++ b/lib/unictype/pr_soft_dotted.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_soft_dotted table. */ +#include "pr_soft_dotted.h" + +bool +uc_is_property_soft_dotted (ucs4_t uc) +{ + return bitmap_lookup (&u_property_soft_dotted, uc); +} + +const uc_property_t UC_PROPERTY_SOFT_DOTTED = + { &uc_is_property_soft_dotted }; diff --git a/lib/unictype/pr_soft_dotted.h b/lib/unictype/pr_soft_dotted.h new file mode 100644 index 00000000..63423710 --- /dev/null +++ b/lib/unictype/pr_soft_dotted.h @@ -0,0 +1,319 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[9 << 4]; + } +u_property_soft_dotted = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000600, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00008000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000200, 0x00000100, + 0x20000000, 0x00040000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00080000, + 0x00000000, 0x00000000, 0x01400000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000004, + 0x00400000, 0x00000110, 0x00000000, 0x00000000, + 0x00000000, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000800, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00020000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000300, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x10000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0000000C, 0x00C00000, 0x00000000, + 0x00000C00, 0xC0000000, 0x00000000, 0x000C0000, + 0x00000000, 0x000000C0, 0x0C000000, 0x00000000, + 0x0000C000, 0x00000000, 0x0000000C, 0x00C00000, + 0x00000000, 0x00000C00, 0xC0000000, 0x00000000, + 0x000C0000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_space.c b/lib/unictype/pr_space.c new file mode 100644 index 00000000..5bc3881e --- /dev/null +++ b/lib/unictype/pr_space.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_space table. */ +#include "pr_space.h" + +bool +uc_is_property_space (ucs4_t uc) +{ + return bitmap_lookup (&u_property_space, uc); +} + +#else + +bool +uc_is_property_space (ucs4_t uc) +{ + return uc_is_general_category (uc, UC_CATEGORY_Zs); +} + +#endif + +const uc_property_t UC_PROPERTY_SPACE = + { &uc_is_property_space }; diff --git a/lib/unictype/pr_space.h b/lib/unictype/pr_space.h new file mode 100644 index 00000000..b86a6a49 --- /dev/null +++ b/lib/unictype/pr_space.h @@ -0,0 +1,172 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_property_space = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00004000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000007FF, 0x00008000, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_terminal_punctuation.c b/lib/unictype/pr_terminal_punctuation.c new file mode 100644 index 00000000..30a79f92 --- /dev/null +++ b/lib/unictype/pr_terminal_punctuation.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_terminal_punctuation table. */ +#include "pr_terminal_punctuation.h" + +bool +uc_is_property_terminal_punctuation (ucs4_t uc) +{ + return bitmap_lookup (&u_property_terminal_punctuation, uc); +} + +const uc_property_t UC_PROPERTY_TERMINAL_PUNCTUATION = + { &uc_is_property_terminal_punctuation }; diff --git a/lib/unictype/pr_terminal_punctuation.h b/lib/unictype/pr_terminal_punctuation.h new file mode 100644 index 00000000..d6cd379e --- /dev/null +++ b/lib/unictype/pr_terminal_punctuation.h @@ -0,0 +1,371 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[22 << 4]; + } +u_property_terminal_punctuation = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 208, + 3 + 256 * sizeof (short) / sizeof (int) + 224, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 240, + 3 + 256 * sizeof (short) / sizeof (int) + 256, + 3 + 256 * sizeof (short) / sizeof (int) + 272, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 288, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 304, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 320, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 336, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x8C005002, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x40000000, + 0x00000080, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000200, 0x00000000, 0x00000008, 0x00000000, + 0x88001000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00100000, 0x00000000, + 0x000017FF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x03000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000030, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0C000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0007E100, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000C00, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000001FE, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00006000, + 0x00000000, 0x00000000, 0x00000000, 0x00003800, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x04700000, 0x00000000, + 0x0000033C, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000030, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xEC000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xF8000000, 0x00000000, 0xC0000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x30000000, 0x00000380, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00004000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000006, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000E000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00C00000, + 0x00000000, 0x00000000, 0x0000C000, 0x00000000, + 0x00000000, 0x00008000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xE0000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00F70000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x8C005002, 0x00000000, 0x00000000, 0x00000012, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x80000000, 0x00000000, 0x00010000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x80000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x000F0000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_test.c b/lib/unictype/pr_test.c new file mode 100644 index 00000000..6d997b4c --- /dev/null +++ b/lib/unictype/pr_test.c @@ -0,0 +1,27 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2005-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +bool +uc_is_property (ucs4_t uc, uc_property_t property) +{ + return property.test_fn (uc); +} diff --git a/lib/unictype/pr_titlecase.c b/lib/unictype/pr_titlecase.c new file mode 100644 index 00000000..eeb7dcc5 --- /dev/null +++ b/lib/unictype/pr_titlecase.c @@ -0,0 +1,47 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#if 0 + +#include "bitmap.h" + +/* Define u_property_titlecase table. */ +#include "pr_titlecase.h" + +bool +uc_is_property_titlecase (ucs4_t uc) +{ + return bitmap_lookup (&u_property_titlecase, uc); +} + +#else + +bool +uc_is_property_titlecase (ucs4_t uc) +{ + return uc_is_general_category (uc, UC_CATEGORY_Lt); +} + +#endif + +const uc_property_t UC_PROPERTY_TITLECASE = + { &uc_is_property_titlecase }; diff --git a/lib/unictype/pr_titlecase.h b/lib/unictype/pr_titlecase.h new file mode 100644 index 00000000..35dc74ef --- /dev/null +++ b/lib/unictype/pr_titlecase.h @@ -0,0 +1,160 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[2 << 4]; + } +u_property_titlecase = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000920, 0x00040000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFF00FF00, 0x1000FF00, 0x00001000, 0x10000000 + } +}; diff --git a/lib/unictype/pr_unassigned_code_value.c b/lib/unictype/pr_unassigned_code_value.c new file mode 100644 index 00000000..328b5e7c --- /dev/null +++ b/lib/unictype/pr_unassigned_code_value.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_unassigned_code_value table. */ +#include "pr_unassigned_code_value.h" + +bool +uc_is_property_unassigned_code_value (ucs4_t uc) +{ + return bitmap_lookup (&u_property_unassigned_code_value, uc); +} + +const uc_property_t UC_PROPERTY_UNASSIGNED_CODE_VALUE = + { &uc_is_property_unassigned_code_value }; diff --git a/lib/unictype/pr_unassigned_code_value.h b/lib/unictype/pr_unassigned_code_value.h new file mode 100644 index 00000000..5b12cf6d --- /dev/null +++ b/lib/unictype/pr_unassigned_code_value.h @@ -0,0 +1,884 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[5 << 7]; + /*unsigned*/ int level3[51 << 4]; + } +u_property_unassigned_code_value = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + 16 * sizeof (int) / sizeof (short) + 256, + 16 * sizeof (int) / sizeof (short) + 384, + 16 * sizeof (int) / sizeof (short) + 384, + 16 * sizeof (int) / sizeof (short) + 384, + 16 * sizeof (int) / sizeof (short) + 384, + 16 * sizeof (int) / sizeof (short) + 384, + 16 * sizeof (int) / sizeof (short) + 384, + 16 * sizeof (int) / sizeof (short) + 384, + 16 * sizeof (int) / sizeof (short) + 384, + 16 * sizeof (int) / sizeof (short) + 384, + 16 * sizeof (int) / sizeof (short) + 384, + 16 * sizeof (int) / sizeof (short) + 384, + 16 * sizeof (int) / sizeof (short) + 512 + }, + { + -1, + 16 + 640 * sizeof (short) / sizeof (int) + 0, + 16 + 640 * sizeof (short) / sizeof (int) + 16, + 16 + 640 * sizeof (short) / sizeof (int) + 32, + 16 + 640 * sizeof (short) / sizeof (int) + 48, + 16 + 640 * sizeof (short) / sizeof (int) + 64, + 16 + 640 * sizeof (short) / sizeof (int) + 80, + 16 + 640 * sizeof (short) / sizeof (int) + 96, + 16 + 640 * sizeof (short) / sizeof (int) + 112, + 16 + 640 * sizeof (short) / sizeof (int) + 128, + 16 + 640 * sizeof (short) / sizeof (int) + 144, + 16 + 640 * sizeof (short) / sizeof (int) + 160, + 16 + 640 * sizeof (short) / sizeof (int) + 176, + 16 + 640 * sizeof (short) / sizeof (int) + 192, + 16 + 640 * sizeof (short) / sizeof (int) + 208, + 16 + 640 * sizeof (short) / sizeof (int) + 224, + 16 + 640 * sizeof (short) / sizeof (int) + 240, + 16 + 640 * sizeof (short) / sizeof (int) + 256, + 16 + 640 * sizeof (short) / sizeof (int) + 272, + 16 + 640 * sizeof (short) / sizeof (int) + 288, + -1, + 16 + 640 * sizeof (short) / sizeof (int) + 304, + 16 + 640 * sizeof (short) / sizeof (int) + 320, + 16 + 640 * sizeof (short) / sizeof (int) + 336, + 16 + 640 * sizeof (short) / sizeof (int) + 352, + 16 + 640 * sizeof (short) / sizeof (int) + 368, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 640 * sizeof (short) / sizeof (int) + 384, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 640 * sizeof (short) / sizeof (int) + 400, + -1, + -1, + 16 + 640 * sizeof (short) / sizeof (int) + 416, + 16 + 640 * sizeof (short) / sizeof (int) + 432, + 16 + 640 * sizeof (short) / sizeof (int) + 448, + 16 + 640 * sizeof (short) / sizeof (int) + 464, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 640 * sizeof (short) / sizeof (int) + 480, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 640 * sizeof (short) / sizeof (int) + 496, + 16 + 640 * sizeof (short) / sizeof (int) + 512, + 16 + 640 * sizeof (short) / sizeof (int) + 528, + 16 + 640 * sizeof (short) / sizeof (int) + 544, + 16 + 640 * sizeof (short) / sizeof (int) + 560, + 16 + 640 * sizeof (short) / sizeof (int) + 576, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 608, + 16 + 640 * sizeof (short) / sizeof (int) + 624, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + -1, + 16 + 640 * sizeof (short) / sizeof (int) + 640, + 16 + 640 * sizeof (short) / sizeof (int) + 656, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 672, + 16 + 640 * sizeof (short) / sizeof (int) + 688, + 16 + 640 * sizeof (short) / sizeof (int) + 704, + 16 + 640 * sizeof (short) / sizeof (int) + 720, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 736, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 752, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 640 * sizeof (short) / sizeof (int) + 768, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + -1, + 16 + 640 * sizeof (short) / sizeof (int) + 784, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 752, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 752, + 16 + 640 * sizeof (short) / sizeof (int) + 800, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 592, + 16 + 640 * sizeof (short) / sizeof (int) + 752 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x83000000, + 0x0000280F, 0x00000004, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x0001FFF0, 0x01800000, 0x00000001, + 0x0001F900, 0x00000000, 0x0000FF00, 0xFFE0F800, + 0x30000030, 0x00000001, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00004000, 0x00000000, 0x00001800, 0x00000000, + 0x00000000, 0xFFFC0000, 0x00000000, 0xF8000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000001, 0x0C000000, 0x00E0C000, 0x07F80000, + 0x00066011, 0x0C3A0200, 0x4F7F8660, 0xF8000030, + 0x00067811, 0x2C920200, 0xA1FDC678, 0xFFC0003F, + 0x00044011, 0x0C120200, 0xFFFEC440, 0xFFFD0030, + 0x00066011, 0x0C120200, 0x4F3FC660, 0xFFFC0030, + 0x29C23813, 0x3C0038E7, 0xFF7EC238, 0xF800003F, + 0x00022011, 0x1C100200, 0xFC9FC220, 0x00FF0030, + 0x00022013, 0x0C100200, 0xBF9FC220, 0xFFF90030, + 0x00022013, 0x1C000200, 0xFF7FC220, 0x01C00030, + 0x03800013, 0xD0040000, 0x00A07B80, 0xFFE3FFFF, + 0x00000001, 0x78000000, 0xF0000000, 0xFFFFFFFF, + 0x010FDA69, 0xC4001351, 0xCC00C0A0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000100, 0x0001E000, + 0x0100F000, 0x20000000, 0xFFE02000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3C000000, 0x00000000, 0x0000FFC0, 0xE0000000, + 0x00000000, 0x00000000, 0x7C000000, 0x00000000, + 0x00000000, 0x000000F8, 0x00000000, 0xFC000000, + 0x00000000, 0x00000000, 0xC280C200, 0x00000000, + 0x0000C200, 0x80C20000, 0x008000C2, 0x00000000, + 0x00C20000, 0x00000000, 0x78000000, 0xE0000000, + 0xFC000000, 0x00000000, 0x00000000, 0xFFE00000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFF800000, + 0xE0000000, 0x00000000, 0x00000000, 0xFFFE0000, + 0xFFE02000, 0xFF800000, 0xFFF00000, 0xFFF22000, + 0x00000000, 0x00000000, 0xC0000000, 0xFC00FC00, + 0xFC008000, 0x00000000, 0x00000000, 0xFF000000, + 0x00000000, 0xFFFFF800, 0xFFFFFFFF, 0xFFFFFFFF, + 0xE0000000, 0xF000F000, 0x0000000E, 0xFFE0C000, + 0x00000000, 0x0000FC00, 0x3C00FC00, 0x00000000, + 0x30000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x0000F000, 0xE0000000, + 0x00000000, 0xFC003800, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x07000000, 0x00001C00, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x3FFFFF80, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0C00000, 0x00000000, 0x5500C0C0, 0xC0000000, + 0x00000000, 0x00200000, 0x10300020, 0x80230000, + 0x00000000, 0x00000000, 0x00000000, 0x000C03E0, + 0xFFE08000, 0xFFC00000, 0x0000FFFF, 0xFFFE0000, + 0x00000000, 0x00000000, 0x00070000, 0x00000000, + 0x0000FE00, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFFFF00, + 0x00000000, 0xFFFFFF80, 0xFFFFF800, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0000000, 0xE0000000, 0xFFFFFFF0, 0xFFFFFFFF, + 0x00000C21, 0x00000100, 0x80B85000, 0x00000001, + 0x00E00000, 0x80010000, 0x0000E800, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFE0E000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00008000, 0x80000000, 0xC0010000, + 0x00000000, 0x00000000, 0x00000000, 0x01FFF800, + 0x00000000, 0x0000FFC0, 0x00000000, 0xFFFF7FC0, + 0xFF800000, 0x80808080, 0x80808080, 0x00000000, + 0x00000000, 0xFFFE0000, 0xFFFFFFFF, 0xFFFFFFFF, + 0x04000000, 0x00000000, 0x00000000, 0xFFF00000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFC00000, 0xF000FFFF, + 0x00000000, 0x00000000, 0x00000001, 0x00000000, + 0x01800000, 0x00000000, 0x00000000, 0x00000000, + 0x0000001F, 0x0001C000, 0x00000000, 0x00000000, + 0x00008000, 0xFF000000, 0x00000000, 0x0000FFF0, + 0x80000000, 0x00000000, 0x0000FFF0, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFC00000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFFFFFFF0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000E000, 0x00000000, 0xFFFFFF80, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFF000, 0x00000000, 0x0FF00003, + 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFE000, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0xFFFFF000, 0x00000000, 0xFF000000, + 0x00000000, 0x00000000, 0xFC003FE0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x7FF00000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0xFF800000, 0x0C00C000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFFF0, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x0000C000, 0x00000000, 0x0000F800, + 0x00000000, 0x00000000, 0xFC000000, 0xFFFFFFFF, + 0x1F07FF80, 0xA0800000, 0x00000024, 0x00000000, + 0x00000000, 0xFFFC0000, 0x0007FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000FFFF, 0x00000000, + 0x00030000, 0x00000000, 0x0000FF00, 0xC0000000, + 0xFC000000, 0x0000FF80, 0x00080000, 0x0020F080, + 0x00000000, 0x00000000, 0x00000000, 0x60000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x80000000, 0xE3030303, 0x01FF8080, + 0x00001000, 0x48000080, 0xC000C000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0xF8000000, + 0x00000078, 0x00700000, 0x00000000, 0x00000000, + 0xF000F800, 0xFFFFFFFF, 0x0000FFFF, 0xC0000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xE0000000, 0x00000000, 0xFFFE0000, 0xFFFFFFFF, + 0x80000000, 0x0000FFF0, 0xFFFFF800, 0xFFFFFFFF, + 0x40000000, 0x00000000, 0xFFC000F0, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xC0000000, 0xFFFFFC00, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000002C0, 0x6E400000, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x7C000000, 0x7C000000, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x01100F90, 0x78F00000, 0xFE00FF00, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFF8000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0xFFF0FFF8, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFC00000, + 0x00000000, 0x00000180, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xC0000000, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFC0, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0xFF800000, 0xFFFC0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00200000, 0x00000000, + 0x20000000, 0x1400219B, 0x00000010, 0x00000000, + 0x20201840, 0x84000000, 0x000203A0, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x000000C0, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00003000, 0x00000000, + 0x00000000, 0x0000F000, 0x00000000, 0x00000000, + 0xFFF00000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFF800000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xC0000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFD, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xFFFF0000 + } +}; diff --git a/lib/unictype/pr_unified_ideograph.c b/lib/unictype/pr_unified_ideograph.c new file mode 100644 index 00000000..99096a82 --- /dev/null +++ b/lib/unictype/pr_unified_ideograph.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_unified_ideograph table. */ +#include "pr_unified_ideograph.h" + +bool +uc_is_property_unified_ideograph (ucs4_t uc) +{ + return bitmap_lookup (&u_property_unified_ideograph, uc); +} + +const uc_property_t UC_PROPERTY_UNIFIED_IDEOGRAPH = + { &uc_is_property_unified_ideograph }; diff --git a/lib/unictype/pr_unified_ideograph.h b/lib/unictype/pr_unified_ideograph.h new file mode 100644 index 00000000..353ee4f0 --- /dev/null +++ b/lib/unictype/pr_unified_ideograph.h @@ -0,0 +1,304 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[3]; + short level2[2 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_property_unified_ideograph = +{ + { 3 }, + { + 4 * sizeof (int) / sizeof (short) + 0, + -1, + 4 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 16, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 0, + 4 + 256 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0x801AC000, 0x0000039A, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_uppercase.c b/lib/unictype/pr_uppercase.c new file mode 100644 index 00000000..38c122a9 --- /dev/null +++ b/lib/unictype/pr_uppercase.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_uppercase table. */ +#include "pr_uppercase.h" + +bool +uc_is_property_uppercase (ucs4_t uc) +{ + return bitmap_lookup (&u_property_uppercase, uc); +} + +const uc_property_t UC_PROPERTY_UPPERCASE = + { &uc_is_property_uppercase }; diff --git a/lib/unictype/pr_uppercase.h b/lib/unictype/pr_uppercase.h new file mode 100644 index 00000000..14b2bde3 --- /dev/null +++ b/lib/unictype/pr_uppercase.h @@ -0,0 +1,335 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[2]; + short level2[2 << 7]; + /*unsigned*/ int level3[13 << 4]; + } +u_property_uppercase = +{ + { 2 }, + { + 3 * sizeof (int) / sizeof (short) + 0, + 3 * sizeof (int) / sizeof (short) + 128 + }, + { + 3 + 256 * sizeof (short) / sizeof (int) + 0, + 3 + 256 * sizeof (short) / sizeof (int) + 16, + 3 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 64, + 3 + 256 * sizeof (short) / sizeof (int) + 80, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 112, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 144, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 160, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3 + 256 * sizeof (short) / sizeof (int) + 176, + 3 + 256 * sizeof (short) / sizeof (int) + 192, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x07FFFFFE, 0x00000000, + 0x00000000, 0x00000000, 0x7F7FFFFF, 0x00000000, + 0x55555555, 0xAA555555, 0x555554AA, 0x2B555555, + 0xB1DBCED6, 0x11AED2D5, 0x4AAAA490, 0x55D25555, + 0x55555555, 0x6C055555, 0x0000557A, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00450000, + 0xFFFED740, 0x00000FFB, 0x551C8000, 0xE6905555, + 0xFFFFFFFF, 0x0000FFFF, 0x00000000, 0x55555555, + 0x55555401, 0x55555555, 0x55552AAB, 0x55555555, + 0x55555555, 0xFFFE0005, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFFFFFFF, 0x0000003F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x55555555, 0x55555555, 0x55555555, 0x55555555, + 0x40155555, 0x55555555, 0x55555555, 0x55555555, + 0x3F00FF00, 0xFF00FF00, 0xAA003F00, 0x0000FF00, + 0x00000000, 0x0F000000, 0x0F000F00, 0x0F001F00, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3E273884, 0xC00F3D50, 0x00000020, 0x0000FFFF, + 0x00000008, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0xFFC00000, 0x0000FFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x00007FFF, 0x00000000, 0x0024EA9D, + 0x55555555, 0x55555555, 0x55555555, 0x00000005, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x55555555, 0x00001554, + 0x00555555, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x55545554, 0x55555555, 0x6A005555, + 0x00000855, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x07FFFFFE, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x000000FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x03FFFFFF, 0xFFF00000, 0x00003FFF, 0xFFFFFF00, + 0xD0000003, 0x003FDE64, 0xFFFF0000, 0x000003FF, + 0x1FDFE7B0, 0x7B000000, 0x0001FC5F, 0xFFFFF000, + 0x0000003F, 0x03FFFFFF, 0xFFF00000, 0x00003FFF, + 0xFFFFFF00, 0xF0000003, 0x003FFFFF, 0xFFFF0000, + 0x000003FF, 0xFFFFFF00, 0x00000001, 0x07FFFFFC, + 0xF0000000, 0x001FFFFF, 0xFFC00000, 0x00007FFF, + 0xFFFF0000, 0x000001FF, 0x00000400, 0x00000000 + } +}; diff --git a/lib/unictype/pr_variation_selector.c b/lib/unictype/pr_variation_selector.c new file mode 100644 index 00000000..2f1d3888 --- /dev/null +++ b/lib/unictype/pr_variation_selector.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_variation_selector table. */ +#include "pr_variation_selector.h" + +bool +uc_is_property_variation_selector (ucs4_t uc) +{ + return bitmap_lookup (&u_property_variation_selector, uc); +} + +const uc_property_t UC_PROPERTY_VARIATION_SELECTOR = + { &uc_is_property_variation_selector }; diff --git a/lib/unictype/pr_variation_selector.h b/lib/unictype/pr_variation_selector.h new file mode 100644 index 00000000..ba644eb6 --- /dev/null +++ b/lib/unictype/pr_variation_selector.h @@ -0,0 +1,308 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[2 << 7]; + /*unsigned*/ int level3[3 << 4]; + } +u_property_variation_selector = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 128 + }, + { + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 256 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 256 * sizeof (short) / sizeof (int) + 16, + 16 + 256 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00003800, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000FFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF + } +}; diff --git a/lib/unictype/pr_white_space.c b/lib/unictype/pr_white_space.c new file mode 100644 index 00000000..1cd9c5f4 --- /dev/null +++ b/lib/unictype/pr_white_space.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_white_space table. */ +#include "pr_white_space.h" + +bool +uc_is_property_white_space (ucs4_t uc) +{ + return bitmap_lookup (&u_property_white_space, uc); +} + +const uc_property_t UC_PROPERTY_WHITE_SPACE = + { &uc_is_property_white_space }; diff --git a/lib/unictype/pr_white_space.h b/lib/unictype/pr_white_space.h new file mode 100644 index 00000000..519b35a3 --- /dev/null +++ b/lib/unictype/pr_white_space.h @@ -0,0 +1,172 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[1]; + short level2[1 << 7]; + /*unsigned*/ int level3[5 << 4]; + } +u_property_white_space = +{ + { 1 }, + { 2 * sizeof (int) / sizeof (short) + 0 }, + { + 2 + 128 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 16, + 2 + 128 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2 + 128 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00003E00, 0x00000001, 0x00000000, 0x00000000, + 0x00000020, 0x00000001, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00004000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x000007FF, 0x00008300, 0x80000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000001, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_xid_continue.c b/lib/unictype/pr_xid_continue.c new file mode 100644 index 00000000..d7d92c3c --- /dev/null +++ b/lib/unictype/pr_xid_continue.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_xid_continue table. */ +#include "pr_xid_continue.h" + +bool +uc_is_property_xid_continue (ucs4_t uc) +{ + return bitmap_lookup (&u_property_xid_continue, uc); +} + +const uc_property_t UC_PROPERTY_XID_CONTINUE = + { &uc_is_property_xid_continue }; diff --git a/lib/unictype/pr_xid_continue.h b/lib/unictype/pr_xid_continue.h new file mode 100644 index 00000000..79913a78 --- /dev/null +++ b/lib/unictype/pr_xid_continue.h @@ -0,0 +1,732 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[4 << 7]; + /*unsigned*/ int level3[45 << 4]; + } +u_property_xid_continue = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + 16 * sizeof (int) / sizeof (short) + 256, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 384 + }, + { + 16 + 512 * sizeof (short) / sizeof (int) + 0, + 16 + 512 * sizeof (short) / sizeof (int) + 16, + 16 + 512 * sizeof (short) / sizeof (int) + 32, + 16 + 512 * sizeof (short) / sizeof (int) + 48, + 16 + 512 * sizeof (short) / sizeof (int) + 64, + 16 + 512 * sizeof (short) / sizeof (int) + 80, + 16 + 512 * sizeof (short) / sizeof (int) + 96, + 16 + 512 * sizeof (short) / sizeof (int) + 112, + 16 + 512 * sizeof (short) / sizeof (int) + 128, + 16 + 512 * sizeof (short) / sizeof (int) + 144, + 16 + 512 * sizeof (short) / sizeof (int) + 160, + 16 + 512 * sizeof (short) / sizeof (int) + 176, + 16 + 512 * sizeof (short) / sizeof (int) + 192, + 16 + 512 * sizeof (short) / sizeof (int) + 208, + 16 + 512 * sizeof (short) / sizeof (int) + 224, + 16 + 512 * sizeof (short) / sizeof (int) + 240, + 16 + 512 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 272, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 288, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 320, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 336, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 352, + 16 + 512 * sizeof (short) / sizeof (int) + 368, + 16 + 512 * sizeof (short) / sizeof (int) + 384, + 16 + 512 * sizeof (short) / sizeof (int) + 400, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 416, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 432, + 16 + 512 * sizeof (short) / sizeof (int) + 448, + 16 + 512 * sizeof (short) / sizeof (int) + 464, + 16 + 512 * sizeof (short) / sizeof (int) + 480, + 16 + 512 * sizeof (short) / sizeof (int) + 496, + 16 + 512 * sizeof (short) / sizeof (int) + 512, + 16 + 512 * sizeof (short) / sizeof (int) + 528, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 544, + 16 + 512 * sizeof (short) / sizeof (int) + 560, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 576, + 16 + 512 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 608, + 16 + 512 * sizeof (short) / sizeof (int) + 624, + 16 + 512 * sizeof (short) / sizeof (int) + 640, + 16 + 512 * sizeof (short) / sizeof (int) + 656, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 672, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 304, + 16 + 512 * sizeof (short) / sizeof (int) + 688, + -1, + -1, + 16 + 512 * sizeof (short) / sizeof (int) + 704, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x03FF0000, 0x87FFFFFE, 0x07FFFFFE, + 0x00000000, 0x04A00400, 0xFF7FFFFF, 0xFF7FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x38DFFFFF, + 0xFFFFD7C0, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFCFB, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0x027FFFFF, 0xFFFFFFFE, + 0xFFFE00FF, 0xBFFFFFFF, 0xFFFF00B6, 0x000707FF, + 0x07FF0000, 0xFFFFFFFE, 0x7FFFFFFF, 0xFFFFC3FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x9FEFFFFF, 0x9FFFFDFF, + 0xFFFF0000, 0xFFFFFFFF, 0xFFFFE7FF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFFFFFFF, 0x043FFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFE, 0xF3FFFFFF, 0xFF1F3FFF, 0xF806FFCF, + 0xFFF99FEE, 0xF3C5FDFF, 0xB080799F, 0x0003FFCF, + 0xFFF987EE, 0xD36DFDFF, 0x5E023987, 0x003FFFC0, + 0xFFFBBFEE, 0xF3EDFDFF, 0x00013BBF, 0x0000FFCF, + 0xFFF99FEE, 0xF3EDFDFF, 0xB0C0399F, 0x0002FFCF, + 0xD63DC7EC, 0xC3FFC718, 0x00813DC7, 0x0000FFC0, + 0xFFFDDFEE, 0xE3EFFDFF, 0x03603DDF, 0x0000FFCF, + 0xFFFDDFEC, 0xF3EFFDFF, 0x40603DDF, 0x0000FFCF, + 0xFFFDDFEC, 0xE3FFFDFF, 0x00803DDF, 0xFC00FFCF, + 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F847F, 0x000C0000, + 0xFFFFFFFE, 0x07FFFFFF, 0x03FF7FFF, 0x00000000, + 0xFEF02596, 0x3BFFECAE, 0x33FF3F5F, 0x00000000, + 0x03000001, 0xC2A003FF, 0xFFFFFEFF, 0xFFFE1FFF, + 0xFEFF0FDF, 0x1FFFFFFF, 0x00000040, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF03FF, 0xFFFFFFFF, + 0x03FFFFFF, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x87FFFFFF, 0x0003FE00, + 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007F9FFF, + 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, + 0x001FDFFF, 0x001FFFFF, 0x000FFFFF, 0x000DDFFF, + 0xFFFFFFFF, 0xFFCFFFFF, 0x308FFFFF, 0x000003FF, + 0x03FF3800, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0x000007FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x0FFF0FFF, 0xFFFFFFC0, 0x001F3FFF, + 0xFFFFFFFF, 0xFFFF03FF, 0x03FF03FF, 0x00000000, + 0x0FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF0FFF, 0x000FF800, + 0xFFFFFFFF, 0x03FFC7FF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x00FFFFFF, 0xFFFFE3FF, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xC000007F, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, + 0x00000000, 0x80000000, 0x00100001, 0x80020000, + 0x001F0000, 0x00000000, 0x1FFF0000, 0x0001FFE2, + 0x3F2FFC84, 0xF3FFFD50, 0x000043E0, 0xFFFFFFFF, + 0x000001FF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, + 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0xFFFFFFFF, + 0x000000E0, 0x1F3EFFFE, 0xFFFFFFFE, 0xFFFFFFFF, + 0xE67FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00007FFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0x00000FFF, 0xFFFFFFFF, 0xB000FFFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000019FF, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFFFFF, 0x000000FF, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FF001F, 0x00000000, + 0xFFFFFFFF, 0xFFFF3FFF, 0x000FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x007FFFFF, 0x03FF3FFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xE0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFFFFF0, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x03FF0000, + 0x0000FFFF, 0x0018007F, 0x0000E000, 0xAA8A0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, + 0x03FF0000, 0x87FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, + 0xFFFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x20000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x000003FF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEFF06F, 0x870FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0xF807E3E0, + 0x00000FE7, 0x00003C00, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x0000001C, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, + 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, + 0xFFFFFDFF, 0xFFFFFDFF, 0xFFFFCFF7, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000FFFF + } +}; diff --git a/lib/unictype/pr_xid_start.c b/lib/unictype/pr_xid_start.c new file mode 100644 index 00000000..13aab1b5 --- /dev/null +++ b/lib/unictype/pr_xid_start.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_xid_start table. */ +#include "pr_xid_start.h" + +bool +uc_is_property_xid_start (ucs4_t uc) +{ + return bitmap_lookup (&u_property_xid_start, uc); +} + +const uc_property_t UC_PROPERTY_XID_START = + { &uc_is_property_xid_start }; diff --git a/lib/unictype/pr_xid_start.h b/lib/unictype/pr_xid_start.h new file mode 100644 index 00000000..97fc7107 --- /dev/null +++ b/lib/unictype/pr_xid_start.h @@ -0,0 +1,580 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[3]; + short level2[3 << 7]; + /*unsigned*/ int level3[42 << 4]; + } +u_property_xid_start = +{ + { 3 }, + { + 4 * sizeof (int) / sizeof (short) + 0, + 4 * sizeof (int) / sizeof (short) + 128, + 4 * sizeof (int) / sizeof (short) + 256 + }, + { + 4 + 384 * sizeof (short) / sizeof (int) + 0, + 4 + 384 * sizeof (short) / sizeof (int) + 16, + 4 + 384 * sizeof (short) / sizeof (int) + 32, + 4 + 384 * sizeof (short) / sizeof (int) + 48, + 4 + 384 * sizeof (short) / sizeof (int) + 64, + 4 + 384 * sizeof (short) / sizeof (int) + 80, + 4 + 384 * sizeof (short) / sizeof (int) + 96, + 4 + 384 * sizeof (short) / sizeof (int) + 112, + 4 + 384 * sizeof (short) / sizeof (int) + 128, + 4 + 384 * sizeof (short) / sizeof (int) + 144, + 4 + 384 * sizeof (short) / sizeof (int) + 160, + 4 + 384 * sizeof (short) / sizeof (int) + 176, + 4 + 384 * sizeof (short) / sizeof (int) + 192, + 4 + 384 * sizeof (short) / sizeof (int) + 208, + 4 + 384 * sizeof (short) / sizeof (int) + 224, + 4 + 384 * sizeof (short) / sizeof (int) + 240, + 4 + 384 * sizeof (short) / sizeof (int) + 256, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 272, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 288, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 320, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 336, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 352, + 4 + 384 * sizeof (short) / sizeof (int) + 368, + 4 + 384 * sizeof (short) / sizeof (int) + 384, + 4 + 384 * sizeof (short) / sizeof (int) + 400, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 416, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 432, + 4 + 384 * sizeof (short) / sizeof (int) + 448, + 4 + 384 * sizeof (short) / sizeof (int) + 464, + 4 + 384 * sizeof (short) / sizeof (int) + 480, + 4 + 384 * sizeof (short) / sizeof (int) + 496, + 4 + 384 * sizeof (short) / sizeof (int) + 512, + 4 + 384 * sizeof (short) / sizeof (int) + 528, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 544, + 4 + 384 * sizeof (short) / sizeof (int) + 560, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 576, + 4 + 384 * sizeof (short) / sizeof (int) + 592, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 608, + 4 + 384 * sizeof (short) / sizeof (int) + 624, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 640, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4 + 384 * sizeof (short) / sizeof (int) + 304, + 4 + 384 * sizeof (short) / sizeof (int) + 656, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x07FFFFFE, 0x07FFFFFE, + 0x00000000, 0x04200400, 0xFF7FFFFF, 0xFF7FFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0003FFC3, 0x0000501F, + 0x00000000, 0x00000000, 0x00000000, 0x38DF0000, + 0xFFFFD740, 0xFFFFFFFB, 0xFFFFFFFF, 0xFFBFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFC03, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFE000F, 0x027FFFFF, 0xFFFFFFFE, + 0x000000FF, 0x00000000, 0xFFFF0000, 0x000707FF, + 0x00000000, 0xFFFFFFFE, 0x000007FF, 0xFFFEC000, + 0xFFFFFFFF, 0xFFFFFFFF, 0x002FFFFF, 0x9C00C060, + 0xFFFD0000, 0x0000FFFF, 0xFFFFE000, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0002003F, 0xFFFFFC00, 0x043007FF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFF0, 0x23FFFFFF, 0xFF010000, 0xF8060003, + 0xFFF99FE0, 0x23C5FDFF, 0xB0004000, 0x00030003, + 0xFFF987E0, 0x036DFDFF, 0x5E000000, 0x001C0000, + 0xFFFBBFE0, 0x23EDFDFF, 0x00010000, 0x00000003, + 0xFFF99FE0, 0x23EDFDFF, 0xB0000000, 0x00020003, + 0xD63DC7E8, 0x03FFC718, 0x00010000, 0x00000000, + 0xFFFDDFE0, 0x23EFFDFF, 0x03000000, 0x00000003, + 0xFFFDDFE0, 0x23EFFDFF, 0x40000000, 0x00000003, + 0xFFFDDFE0, 0x23FFFDFF, 0x00000000, 0xFC000003, + 0xFC7FFFE0, 0x2FFBFFFF, 0x0000007F, 0x00000000, + 0xFFFFFFFE, 0x0005FFFF, 0x0000007F, 0x00000000, + 0xFEF02596, 0x2005ECAE, 0x3000005F, 0x00000000, + 0x00000001, 0x00000000, 0xFFFFFEFF, 0x00001FFF, + 0x00000F00, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x800007FF, 0x3C3F0000, 0xFFE1C062, + 0x00004003, 0xFFFFFFFF, 0xFFFF003F, 0x17FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x83FFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF07, 0xFFFFFFFF, 0x03FFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3D7F3DFF, 0xFFFFFFFF, + 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, 0xFFFFFFFF, + 0xFF3DFFFF, 0xFFFFFFFF, 0x07FFFFFF, 0x00000000, + 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x001FFFFF, + 0xFFFFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x007F9FFF, + 0x07FFFFFE, 0xFFFFFFFF, 0xFFFFFFFF, 0x0001C7FF, + 0x0003DFFF, 0x0003FFFF, 0x0003FFFF, 0x0001DFFF, + 0xFFFFFFFF, 0x000FFFFF, 0x10800000, 0x00000000, + 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00FFFFFF, + 0xFFFFFFFF, 0x000005FF, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0x00000000, 0xFFFF0000, 0x001F3FFF, + 0xFFFFFFFF, 0x000003FF, 0x000000FE, 0x00000000, + 0x007FFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFE0, 0x000FFFFF, 0x00000FE0, 0x00000000, + 0xFFFFFFF8, 0x0000C001, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x0000000F, 0xFC00E000, 0x3FFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3F3FFFFF, 0xFFFFFFFF, 0xAAFF3F3F, 0x3FFFFFFF, + 0xFFFFFFFF, 0x5FDFFFFF, 0x0FCF1FDC, 0x1FDC1FFF, + 0x00000000, 0x00000000, 0x00000000, 0x80020000, + 0x001F0000, 0x00000000, 0x00000000, 0x00000000, + 0x3F2FFC84, 0xF3FFFD50, 0x000043E0, 0xFFFFFFFF, + 0x000001FF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFF7FFF, 0x7FFFFFFF, 0x3FFEFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0000001F, + 0xFFFFFFFF, 0xFFFF003F, 0xFFFFFFFF, 0x0000803F, + 0x007FFFFF, 0x7F7F7F7F, 0x7F7F7F7F, 0x00000000, + 0x000000E0, 0x1F3E03FE, 0xFFFFFFFE, 0xFFFFFFFF, + 0xE07FFFFF, 0xFFFFFFFE, 0xFFFFFFFF, 0xF7FFFFFF, + 0xFFFFFFE0, 0xFFFE3FFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00007FFF, 0x00FFFFFF, 0x00000000, 0xFFFF0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x003FFFFF, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x0000000F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00001FFF, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFF1FFF, 0x00000C00, 0xFFFFFFFF, 0x80007FFC, + 0x00FFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0xFF800000, 0xFFFFFFFC, 0xFFFFFFFF, 0xFFFFFFFF, + 0x000019FF, 0x00000000, 0x00000000, 0xF8000000, + 0xFFFFF7BB, 0x00000007, 0xFFFFFFFF, 0x000FFFFF, + 0xFFFFFFFC, 0x000FFFFF, 0x00000000, 0x00000000, + 0xFFFFFC00, 0xFFFF003F, 0x0000007F, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0x000001FF, 0x00000FF7, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0000000F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFF3FFF, 0xFFFFFFFF, 0xFFFF07FF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x03FFFFFF, 0x00000000, + 0xA0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, 0xFFFFFFFF, + 0xFFFFFFFF, 0x0003FFFF, 0xFFF80000, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFFFFF0, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0x3FFFFFFF, 0xFFFF0000, 0xFFFFFFFF, + 0xFFFCFFFF, 0xFFFFFFFF, 0x000000FF, 0x03FF0000, + 0x00000000, 0x00000000, 0x00000000, 0xAA8A0000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x1FFFFFFF, + 0x00000000, 0x07FFFFFE, 0x07FFFFFE, 0xFFFFFFC0, + 0x3FFFFFFF, 0x7FFFFFFF, 0x1CFCFCFC, 0x00000000, + 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x07FFFFFF, + 0x00000000, 0x00000000, 0xFFFFFFFF, 0x001FFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x1FFFFFFF, 0xFFFFFFFF, 0x0001FFFF, 0x00000000, + 0x7FFFFFFF, 0xFFFF0000, 0x000007FF, 0x00000000, + 0x3FFFFFFF, 0xFFFFFFFF, 0x003EFF0F, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFD3F, 0x91BFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x003FFFFF, 0x03FFFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFEEF0001, 0x000FFFFF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00007FFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000007, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFDFFFFF, 0xFFFFFFFF, + 0xDFFFFFFF, 0xEBFFDE64, 0xFFFFFFEF, 0xFFFFFFFF, + 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFF3F, 0xF7FFFFFD, 0xF7FFFFFF, + 0xFFDFFFFF, 0xFFDFFFFF, 0xFFFF7FFF, 0xFFFF7FFF, + 0xFFFFFDFF, 0xFFFFFDFF, 0x00000FF7, 0x00000000, + 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0xFFFFFFFF, 0xFFFFFFFF, 0x007FFFFF, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x3FFFFFFF, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/pr_zero_width.c b/lib/unictype/pr_zero_width.c new file mode 100644 index 00000000..7decbdae --- /dev/null +++ b/lib/unictype/pr_zero_width.c @@ -0,0 +1,35 @@ +/* Properties of Unicode characters. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "bitmap.h" + +/* Define u_property_zero_width table. */ +#include "pr_zero_width.h" + +bool +uc_is_property_zero_width (ucs4_t uc) +{ + return bitmap_lookup (&u_property_zero_width, uc); +} + +const uc_property_t UC_PROPERTY_ZERO_WIDTH = + { &uc_is_property_zero_width }; diff --git a/lib/unictype/pr_zero_width.h b/lib/unictype/pr_zero_width.h new file mode 100644 index 00000000..96047b53 --- /dev/null +++ b/lib/unictype/pr_zero_width.h @@ -0,0 +1,452 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define header_0 16 +#define header_2 9 +#define header_3 127 +#define header_4 15 +static const +struct + { + int header[1]; + int level1[15]; + short level2[3 << 7]; + /*unsigned*/ int level3[7 << 4]; + } +u_property_zero_width = +{ + { 15 }, + { + 16 * sizeof (int) / sizeof (short) + 0, + 16 * sizeof (int) / sizeof (short) + 128, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 * sizeof (int) / sizeof (short) + 256 + }, + { + 16 + 384 * sizeof (short) / sizeof (int) + 0, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 16, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 32, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 48, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 64, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 80, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 16 + 384 * sizeof (short) / sizeof (int) + 96, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1 + }, + { + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00002000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x0000000F, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x20000000, 0x00000000, + 0x00008000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00300000, 0x00000000, 0x00000000, + 0x0000F800, 0x00007C00, 0x00000000, 0x0000FC1F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x80000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x0E000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x07F80000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000002, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; diff --git a/lib/unictype/scripts.c b/lib/unictype/scripts.c new file mode 100644 index 00000000..092009db --- /dev/null +++ b/lib/unictype/scripts.c @@ -0,0 +1,75 @@ +/* Scripts of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include + +#include "scripts.h" +#include "unictype/scripts_byname.h" + +const uc_script_t * +uc_script (ucs4_t uc) +{ + unsigned int index1 = uc >> script_header_0; + if (index1 < script_header_1) + { + int lookup1 = u_script.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> script_header_2) & script_header_3; + int lookup2 = u_script.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc & script_header_4); + unsigned char lookup3 = u_script.level3[lookup2 + index3]; + + if (lookup3 != 0xff) + return &scripts[lookup3]; + } + } + } + return NULL; +} + +const uc_script_t * +uc_script_byname (const char *script_name) +{ + const struct named_script *found; + + found = uc_script_lookup (script_name, strlen (script_name)); + if (found != NULL) + return &scripts[found->index]; + else + return NULL; +} + +bool +uc_is_script (ucs4_t uc, const uc_script_t *script) +{ + return uc_script (uc) == script; +} + +void +uc_all_scripts (const uc_script_t **scriptsp, size_t *countp) +{ + *scriptsp = scripts; + *countp = sizeof (scripts) / sizeof (scripts[0]); +} diff --git a/lib/unictype/scripts.h b/lib/unictype/scripts.h new file mode 100644 index 00000000..1d465aee --- /dev/null +++ b/lib/unictype/scripts.h @@ -0,0 +1,3704 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Unicode scripts. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +static const uc_interval_t script_common_intervals[] = +{ + { 0x0000, 1, 0 }, { 0x0040, 0, 1 }, + { 0x005B, 1, 0 }, { 0x0060, 0, 1 }, + { 0x007B, 1, 0 }, { 0x00A9, 0, 1 }, + { 0x00AB, 1, 0 }, { 0x00B9, 0, 1 }, + { 0x00BB, 1, 0 }, { 0x00BF, 0, 1 }, + { 0x00D7, 1, 1 }, + { 0x00F7, 1, 1 }, + { 0x02B9, 1, 0 }, { 0x02DF, 0, 1 }, + { 0x02E5, 1, 0 }, { 0x02FF, 0, 1 }, + { 0x0374, 1, 1 }, + { 0x037E, 1, 1 }, + { 0x0385, 1, 1 }, + { 0x0387, 1, 1 }, + { 0x0589, 1, 1 }, + { 0x0600, 1, 0 }, { 0x0603, 0, 1 }, + { 0x060C, 1, 1 }, + { 0x061B, 1, 1 }, + { 0x061F, 1, 1 }, + { 0x0640, 1, 1 }, + { 0x0660, 1, 0 }, { 0x0669, 0, 1 }, + { 0x06DD, 1, 1 }, + { 0x0964, 1, 0 }, { 0x0965, 0, 1 }, + { 0x0970, 1, 1 }, + { 0x0CF1, 1, 0 }, { 0x0CF2, 0, 1 }, + { 0x0E3F, 1, 1 }, + { 0x10FB, 1, 1 }, + { 0x16EB, 1, 0 }, { 0x16ED, 0, 1 }, + { 0x1735, 1, 0 }, { 0x1736, 0, 1 }, + { 0x1802, 1, 0 }, { 0x1803, 0, 1 }, + { 0x1805, 1, 1 }, + { 0x2000, 1, 0 }, { 0x200B, 0, 1 }, + { 0x200E, 1, 0 }, { 0x2064, 0, 1 }, + { 0x206A, 1, 0 }, { 0x2070, 0, 1 }, + { 0x2074, 1, 0 }, { 0x207E, 0, 1 }, + { 0x2080, 1, 0 }, { 0x208E, 0, 1 }, + { 0x20A0, 1, 0 }, { 0x20B5, 0, 1 }, + { 0x2100, 1, 0 }, { 0x2125, 0, 1 }, + { 0x2127, 1, 0 }, { 0x2129, 0, 1 }, + { 0x212C, 1, 0 }, { 0x2131, 0, 1 }, + { 0x2133, 1, 0 }, { 0x214D, 0, 1 }, + { 0x214F, 1, 1 }, + { 0x2153, 1, 0 }, { 0x215F, 0, 1 }, + { 0x2190, 1, 0 }, { 0x23E7, 0, 1 }, + { 0x2400, 1, 0 }, { 0x2426, 0, 1 }, + { 0x2440, 1, 0 }, { 0x244A, 0, 1 }, + { 0x2460, 1, 0 }, { 0x269D, 0, 1 }, + { 0x26A0, 1, 0 }, { 0x26BC, 0, 1 }, + { 0x26C0, 1, 0 }, { 0x26C3, 0, 1 }, + { 0x2701, 1, 0 }, { 0x2704, 0, 1 }, + { 0x2706, 1, 0 }, { 0x2709, 0, 1 }, + { 0x270C, 1, 0 }, { 0x2727, 0, 1 }, + { 0x2729, 1, 0 }, { 0x274B, 0, 1 }, + { 0x274D, 1, 1 }, + { 0x274F, 1, 0 }, { 0x2752, 0, 1 }, + { 0x2756, 1, 1 }, + { 0x2758, 1, 0 }, { 0x275E, 0, 1 }, + { 0x2761, 1, 0 }, { 0x2794, 0, 1 }, + { 0x2798, 1, 0 }, { 0x27AF, 0, 1 }, + { 0x27B1, 1, 0 }, { 0x27BE, 0, 1 }, + { 0x27C0, 1, 0 }, { 0x27CA, 0, 1 }, + { 0x27CC, 1, 1 }, + { 0x27D0, 1, 0 }, { 0x27FF, 0, 1 }, + { 0x2900, 1, 0 }, { 0x2B4C, 0, 1 }, + { 0x2B50, 1, 0 }, { 0x2B54, 0, 1 }, + { 0x2E00, 1, 0 }, { 0x2E30, 0, 1 }, + { 0x2FF0, 1, 0 }, { 0x2FFB, 0, 1 }, + { 0x3000, 1, 0 }, { 0x3004, 0, 1 }, + { 0x3006, 1, 1 }, + { 0x3008, 1, 0 }, { 0x3020, 0, 1 }, + { 0x3030, 1, 0 }, { 0x3037, 0, 1 }, + { 0x303C, 1, 0 }, { 0x303F, 0, 1 }, + { 0x309B, 1, 0 }, { 0x309C, 0, 1 }, + { 0x30A0, 1, 1 }, + { 0x30FB, 1, 0 }, { 0x30FC, 0, 1 }, + { 0x3190, 1, 0 }, { 0x319F, 0, 1 }, + { 0x31C0, 1, 0 }, { 0x31E3, 0, 1 }, + { 0x3220, 1, 0 }, { 0x3243, 0, 1 }, + { 0x3250, 1, 0 }, { 0x325F, 0, 1 }, + { 0x327F, 1, 0 }, { 0x32CF, 0, 1 }, + { 0x3358, 1, 0 }, { 0x33FF, 0, 1 }, + { 0x4DC0, 1, 0 }, { 0x4DFF, 0, 1 }, + { 0xA700, 1, 0 }, { 0xA721, 0, 1 }, + { 0xA788, 1, 0 }, { 0xA78A, 0, 1 }, + { 0xFD3E, 1, 0 }, { 0xFD3F, 0, 1 }, + { 0xFDFD, 1, 1 }, + { 0xFE10, 1, 0 }, { 0xFE19, 0, 1 }, + { 0xFE30, 1, 0 }, { 0xFE52, 0, 1 }, + { 0xFE54, 1, 0 }, { 0xFE66, 0, 1 }, + { 0xFE68, 1, 0 }, { 0xFE6B, 0, 1 }, + { 0xFEFF, 1, 1 }, + { 0xFF01, 1, 0 }, { 0xFF20, 0, 1 }, + { 0xFF3B, 1, 0 }, { 0xFF40, 0, 1 }, + { 0xFF5B, 1, 0 }, { 0xFF65, 0, 1 }, + { 0xFF70, 1, 1 }, + { 0xFF9E, 1, 0 }, { 0xFF9F, 0, 1 }, + { 0xFFE0, 1, 0 }, { 0xFFE6, 0, 1 }, + { 0xFFE8, 1, 0 }, { 0xFFEE, 0, 1 }, + { 0xFFF9, 1, 0 }, { 0xFFFD, 0, 1 }, + { 0x10100, 1, 0 }, { 0x10102, 0, 1 }, + { 0x10107, 1, 0 }, { 0x10133, 0, 1 }, + { 0x10137, 1, 0 }, { 0x1013F, 0, 1 }, + { 0x10190, 1, 0 }, { 0x1019B, 0, 1 }, + { 0x101D0, 1, 0 }, { 0x101FC, 0, 1 }, + { 0x1D000, 1, 0 }, { 0x1D0F5, 0, 1 }, + { 0x1D100, 1, 0 }, { 0x1D126, 0, 1 }, + { 0x1D129, 1, 0 }, { 0x1D166, 0, 1 }, + { 0x1D16A, 1, 0 }, { 0x1D17A, 0, 1 }, + { 0x1D183, 1, 0 }, { 0x1D184, 0, 1 }, + { 0x1D18C, 1, 0 }, { 0x1D1A9, 0, 1 }, + { 0x1D1AE, 1, 0 }, { 0x1D1DD, 0, 1 }, + { 0x1D300, 1, 0 }, { 0x1D356, 0, 1 }, + { 0x1D360, 1, 0 }, { 0x1D371, 0, 1 }, + { 0x1D400, 1, 0 }, { 0x1D454, 0, 1 }, + { 0x1D456, 1, 0 }, { 0x1D49C, 0, 1 }, + { 0x1D49E, 1, 0 }, { 0x1D49F, 0, 1 }, + { 0x1D4A2, 1, 1 }, + { 0x1D4A5, 1, 0 }, { 0x1D4A6, 0, 1 }, + { 0x1D4A9, 1, 0 }, { 0x1D4AC, 0, 1 }, + { 0x1D4AE, 1, 0 }, { 0x1D4B9, 0, 1 }, + { 0x1D4BB, 1, 1 }, + { 0x1D4BD, 1, 0 }, { 0x1D4C3, 0, 1 }, + { 0x1D4C5, 1, 0 }, { 0x1D505, 0, 1 }, + { 0x1D507, 1, 0 }, { 0x1D50A, 0, 1 }, + { 0x1D50D, 1, 0 }, { 0x1D514, 0, 1 }, + { 0x1D516, 1, 0 }, { 0x1D51C, 0, 1 }, + { 0x1D51E, 1, 0 }, { 0x1D539, 0, 1 }, + { 0x1D53B, 1, 0 }, { 0x1D53E, 0, 1 }, + { 0x1D540, 1, 0 }, { 0x1D544, 0, 1 }, + { 0x1D546, 1, 1 }, + { 0x1D54A, 1, 0 }, { 0x1D550, 0, 1 }, + { 0x1D552, 1, 0 }, { 0x1D6A5, 0, 1 }, + { 0x1D6A8, 1, 0 }, { 0x1D7CB, 0, 1 }, + { 0x1D7CE, 1, 0 }, { 0x1D7FF, 0, 1 }, + { 0x1F000, 1, 0 }, { 0x1F02B, 0, 1 }, + { 0x1F030, 1, 0 }, { 0x1F093, 0, 1 }, + { 0xE0001, 1, 1 }, + { 0xE0020, 1, 0 }, { 0xE007F, 0, 1 } +}; +static const uc_interval_t script_latin_intervals[] = +{ + { 0x0041, 1, 0 }, { 0x005A, 0, 1 }, + { 0x0061, 1, 0 }, { 0x007A, 0, 1 }, + { 0x00AA, 1, 1 }, + { 0x00BA, 1, 1 }, + { 0x00C0, 1, 0 }, { 0x00D6, 0, 1 }, + { 0x00D8, 1, 0 }, { 0x00F6, 0, 1 }, + { 0x00F8, 1, 0 }, { 0x02B8, 0, 1 }, + { 0x02E0, 1, 0 }, { 0x02E4, 0, 1 }, + { 0x1D00, 1, 0 }, { 0x1D25, 0, 1 }, + { 0x1D2C, 1, 0 }, { 0x1D5C, 0, 1 }, + { 0x1D62, 1, 0 }, { 0x1D65, 0, 1 }, + { 0x1D6B, 1, 0 }, { 0x1D77, 0, 1 }, + { 0x1D79, 1, 0 }, { 0x1DBE, 0, 1 }, + { 0x1E00, 1, 0 }, { 0x1EFF, 0, 1 }, + { 0x2071, 1, 1 }, + { 0x207F, 1, 1 }, + { 0x2090, 1, 0 }, { 0x2094, 0, 1 }, + { 0x212A, 1, 0 }, { 0x212B, 0, 1 }, + { 0x2132, 1, 1 }, + { 0x214E, 1, 1 }, + { 0x2160, 1, 0 }, { 0x2188, 0, 1 }, + { 0x2C60, 1, 0 }, { 0x2C6F, 0, 1 }, + { 0x2C71, 1, 0 }, { 0x2C7D, 0, 1 }, + { 0xA722, 1, 0 }, { 0xA787, 0, 1 }, + { 0xA78B, 1, 0 }, { 0xA78C, 0, 1 }, + { 0xA7FB, 1, 0 }, { 0xA7FF, 0, 1 }, + { 0xFB00, 1, 0 }, { 0xFB06, 0, 1 }, + { 0xFF21, 1, 0 }, { 0xFF3A, 0, 1 }, + { 0xFF41, 1, 0 }, { 0xFF5A, 0, 1 } +}; +static const uc_interval_t script_greek_intervals[] = +{ + { 0x0370, 1, 0 }, { 0x0373, 0, 1 }, + { 0x0375, 1, 0 }, { 0x0377, 0, 1 }, + { 0x037A, 1, 0 }, { 0x037D, 0, 1 }, + { 0x0384, 1, 1 }, + { 0x0386, 1, 1 }, + { 0x0388, 1, 0 }, { 0x038A, 0, 1 }, + { 0x038C, 1, 1 }, + { 0x038E, 1, 0 }, { 0x03A1, 0, 1 }, + { 0x03A3, 1, 0 }, { 0x03E1, 0, 1 }, + { 0x03F0, 1, 0 }, { 0x03FF, 0, 1 }, + { 0x1D26, 1, 0 }, { 0x1D2A, 0, 1 }, + { 0x1D5D, 1, 0 }, { 0x1D61, 0, 1 }, + { 0x1D66, 1, 0 }, { 0x1D6A, 0, 1 }, + { 0x1DBF, 1, 1 }, + { 0x1F00, 1, 0 }, { 0x1F15, 0, 1 }, + { 0x1F18, 1, 0 }, { 0x1F1D, 0, 1 }, + { 0x1F20, 1, 0 }, { 0x1F45, 0, 1 }, + { 0x1F48, 1, 0 }, { 0x1F4D, 0, 1 }, + { 0x1F50, 1, 0 }, { 0x1F57, 0, 1 }, + { 0x1F59, 1, 1 }, + { 0x1F5B, 1, 1 }, + { 0x1F5D, 1, 1 }, + { 0x1F5F, 1, 0 }, { 0x1F7D, 0, 1 }, + { 0x1F80, 1, 0 }, { 0x1FB4, 0, 1 }, + { 0x1FB6, 1, 0 }, { 0x1FC4, 0, 1 }, + { 0x1FC6, 1, 0 }, { 0x1FD3, 0, 1 }, + { 0x1FD6, 1, 0 }, { 0x1FDB, 0, 1 }, + { 0x1FDD, 1, 0 }, { 0x1FEF, 0, 1 }, + { 0x1FF2, 1, 0 }, { 0x1FF4, 0, 1 }, + { 0x1FF6, 1, 0 }, { 0x1FFE, 0, 1 }, + { 0x2126, 1, 1 }, + { 0x10140, 1, 0 }, { 0x1018A, 0, 1 }, + { 0x1D200, 1, 0 }, { 0x1D245, 0, 1 } +}; +static const uc_interval_t script_cyrillic_intervals[] = +{ + { 0x0400, 1, 0 }, { 0x0523, 0, 1 }, + { 0x1D2B, 1, 1 }, + { 0x1D78, 1, 1 }, + { 0x2DE0, 1, 0 }, { 0x2DFF, 0, 1 }, + { 0xA640, 1, 0 }, { 0xA65F, 0, 1 }, + { 0xA662, 1, 0 }, { 0xA673, 0, 1 }, + { 0xA67C, 1, 0 }, { 0xA697, 0, 1 } +}; +static const uc_interval_t script_armenian_intervals[] = +{ + { 0x0531, 1, 0 }, { 0x0556, 0, 1 }, + { 0x0559, 1, 0 }, { 0x055F, 0, 1 }, + { 0x0561, 1, 0 }, { 0x0587, 0, 1 }, + { 0x058A, 1, 1 }, + { 0xFB13, 1, 0 }, { 0xFB17, 0, 1 } +}; +static const uc_interval_t script_hebrew_intervals[] = +{ + { 0x0591, 1, 0 }, { 0x05C7, 0, 1 }, + { 0x05D0, 1, 0 }, { 0x05EA, 0, 1 }, + { 0x05F0, 1, 0 }, { 0x05F4, 0, 1 }, + { 0xFB1D, 1, 0 }, { 0xFB36, 0, 1 }, + { 0xFB38, 1, 0 }, { 0xFB3C, 0, 1 }, + { 0xFB3E, 1, 1 }, + { 0xFB40, 1, 0 }, { 0xFB41, 0, 1 }, + { 0xFB43, 1, 0 }, { 0xFB44, 0, 1 }, + { 0xFB46, 1, 0 }, { 0xFB4F, 0, 1 } +}; +static const uc_interval_t script_arabic_intervals[] = +{ + { 0x0606, 1, 0 }, { 0x060B, 0, 1 }, + { 0x060D, 1, 0 }, { 0x061A, 0, 1 }, + { 0x061E, 1, 1 }, + { 0x0621, 1, 0 }, { 0x063F, 0, 1 }, + { 0x0641, 1, 0 }, { 0x064A, 0, 1 }, + { 0x0656, 1, 0 }, { 0x065E, 0, 1 }, + { 0x066A, 1, 0 }, { 0x066F, 0, 1 }, + { 0x0671, 1, 0 }, { 0x06DC, 0, 1 }, + { 0x06DE, 1, 0 }, { 0x06FF, 0, 1 }, + { 0x0750, 1, 0 }, { 0x077F, 0, 1 }, + { 0xFB50, 1, 0 }, { 0xFBB1, 0, 1 }, + { 0xFBD3, 1, 0 }, { 0xFD3D, 0, 1 }, + { 0xFD50, 1, 0 }, { 0xFD8F, 0, 1 }, + { 0xFD92, 1, 0 }, { 0xFDC7, 0, 1 }, + { 0xFDF0, 1, 0 }, { 0xFDFC, 0, 1 }, + { 0xFE70, 1, 0 }, { 0xFE74, 0, 1 }, + { 0xFE76, 1, 0 }, { 0xFEFC, 0, 1 } +}; +static const uc_interval_t script_syriac_intervals[] = +{ + { 0x0700, 1, 0 }, { 0x070D, 0, 1 }, + { 0x070F, 1, 0 }, { 0x074A, 0, 1 }, + { 0x074D, 1, 0 }, { 0x074F, 0, 1 } +}; +static const uc_interval_t script_thaana_intervals[] = +{ + { 0x0780, 1, 0 }, { 0x07B1, 0, 1 } +}; +static const uc_interval_t script_devanagari_intervals[] = +{ + { 0x0901, 1, 0 }, { 0x0939, 0, 1 }, + { 0x093C, 1, 0 }, { 0x094D, 0, 1 }, + { 0x0950, 1, 1 }, + { 0x0953, 1, 0 }, { 0x0954, 0, 1 }, + { 0x0958, 1, 0 }, { 0x0963, 0, 1 }, + { 0x0966, 1, 0 }, { 0x096F, 0, 1 }, + { 0x0971, 1, 0 }, { 0x0972, 0, 1 }, + { 0x097B, 1, 0 }, { 0x097F, 0, 1 } +}; +static const uc_interval_t script_bengali_intervals[] = +{ + { 0x0981, 1, 0 }, { 0x0983, 0, 1 }, + { 0x0985, 1, 0 }, { 0x098C, 0, 1 }, + { 0x098F, 1, 0 }, { 0x0990, 0, 1 }, + { 0x0993, 1, 0 }, { 0x09A8, 0, 1 }, + { 0x09AA, 1, 0 }, { 0x09B0, 0, 1 }, + { 0x09B2, 1, 1 }, + { 0x09B6, 1, 0 }, { 0x09B9, 0, 1 }, + { 0x09BC, 1, 0 }, { 0x09C4, 0, 1 }, + { 0x09C7, 1, 0 }, { 0x09C8, 0, 1 }, + { 0x09CB, 1, 0 }, { 0x09CE, 0, 1 }, + { 0x09D7, 1, 1 }, + { 0x09DC, 1, 0 }, { 0x09DD, 0, 1 }, + { 0x09DF, 1, 0 }, { 0x09E3, 0, 1 }, + { 0x09E6, 1, 0 }, { 0x09FA, 0, 1 } +}; +static const uc_interval_t script_gurmukhi_intervals[] = +{ + { 0x0A01, 1, 0 }, { 0x0A03, 0, 1 }, + { 0x0A05, 1, 0 }, { 0x0A0A, 0, 1 }, + { 0x0A0F, 1, 0 }, { 0x0A10, 0, 1 }, + { 0x0A13, 1, 0 }, { 0x0A28, 0, 1 }, + { 0x0A2A, 1, 0 }, { 0x0A30, 0, 1 }, + { 0x0A32, 1, 0 }, { 0x0A33, 0, 1 }, + { 0x0A35, 1, 0 }, { 0x0A36, 0, 1 }, + { 0x0A38, 1, 0 }, { 0x0A39, 0, 1 }, + { 0x0A3C, 1, 1 }, + { 0x0A3E, 1, 0 }, { 0x0A42, 0, 1 }, + { 0x0A47, 1, 0 }, { 0x0A48, 0, 1 }, + { 0x0A4B, 1, 0 }, { 0x0A4D, 0, 1 }, + { 0x0A51, 1, 1 }, + { 0x0A59, 1, 0 }, { 0x0A5C, 0, 1 }, + { 0x0A5E, 1, 1 }, + { 0x0A66, 1, 0 }, { 0x0A75, 0, 1 } +}; +static const uc_interval_t script_gujarati_intervals[] = +{ + { 0x0A81, 1, 0 }, { 0x0A83, 0, 1 }, + { 0x0A85, 1, 0 }, { 0x0A8D, 0, 1 }, + { 0x0A8F, 1, 0 }, { 0x0A91, 0, 1 }, + { 0x0A93, 1, 0 }, { 0x0AA8, 0, 1 }, + { 0x0AAA, 1, 0 }, { 0x0AB0, 0, 1 }, + { 0x0AB2, 1, 0 }, { 0x0AB3, 0, 1 }, + { 0x0AB5, 1, 0 }, { 0x0AB9, 0, 1 }, + { 0x0ABC, 1, 0 }, { 0x0AC5, 0, 1 }, + { 0x0AC7, 1, 0 }, { 0x0AC9, 0, 1 }, + { 0x0ACB, 1, 0 }, { 0x0ACD, 0, 1 }, + { 0x0AD0, 1, 1 }, + { 0x0AE0, 1, 0 }, { 0x0AE3, 0, 1 }, + { 0x0AE6, 1, 0 }, { 0x0AEF, 0, 1 }, + { 0x0AF1, 1, 1 } +}; +static const uc_interval_t script_oriya_intervals[] = +{ + { 0x0B01, 1, 0 }, { 0x0B03, 0, 1 }, + { 0x0B05, 1, 0 }, { 0x0B0C, 0, 1 }, + { 0x0B0F, 1, 0 }, { 0x0B10, 0, 1 }, + { 0x0B13, 1, 0 }, { 0x0B28, 0, 1 }, + { 0x0B2A, 1, 0 }, { 0x0B30, 0, 1 }, + { 0x0B32, 1, 0 }, { 0x0B33, 0, 1 }, + { 0x0B35, 1, 0 }, { 0x0B39, 0, 1 }, + { 0x0B3C, 1, 0 }, { 0x0B44, 0, 1 }, + { 0x0B47, 1, 0 }, { 0x0B48, 0, 1 }, + { 0x0B4B, 1, 0 }, { 0x0B4D, 0, 1 }, + { 0x0B56, 1, 0 }, { 0x0B57, 0, 1 }, + { 0x0B5C, 1, 0 }, { 0x0B5D, 0, 1 }, + { 0x0B5F, 1, 0 }, { 0x0B63, 0, 1 }, + { 0x0B66, 1, 0 }, { 0x0B71, 0, 1 } +}; +static const uc_interval_t script_tamil_intervals[] = +{ + { 0x0B82, 1, 0 }, { 0x0B83, 0, 1 }, + { 0x0B85, 1, 0 }, { 0x0B8A, 0, 1 }, + { 0x0B8E, 1, 0 }, { 0x0B90, 0, 1 }, + { 0x0B92, 1, 0 }, { 0x0B95, 0, 1 }, + { 0x0B99, 1, 0 }, { 0x0B9A, 0, 1 }, + { 0x0B9C, 1, 1 }, + { 0x0B9E, 1, 0 }, { 0x0B9F, 0, 1 }, + { 0x0BA3, 1, 0 }, { 0x0BA4, 0, 1 }, + { 0x0BA8, 1, 0 }, { 0x0BAA, 0, 1 }, + { 0x0BAE, 1, 0 }, { 0x0BB9, 0, 1 }, + { 0x0BBE, 1, 0 }, { 0x0BC2, 0, 1 }, + { 0x0BC6, 1, 0 }, { 0x0BC8, 0, 1 }, + { 0x0BCA, 1, 0 }, { 0x0BCD, 0, 1 }, + { 0x0BD0, 1, 1 }, + { 0x0BD7, 1, 1 }, + { 0x0BE6, 1, 0 }, { 0x0BFA, 0, 1 } +}; +static const uc_interval_t script_telugu_intervals[] = +{ + { 0x0C01, 1, 0 }, { 0x0C03, 0, 1 }, + { 0x0C05, 1, 0 }, { 0x0C0C, 0, 1 }, + { 0x0C0E, 1, 0 }, { 0x0C10, 0, 1 }, + { 0x0C12, 1, 0 }, { 0x0C28, 0, 1 }, + { 0x0C2A, 1, 0 }, { 0x0C33, 0, 1 }, + { 0x0C35, 1, 0 }, { 0x0C39, 0, 1 }, + { 0x0C3D, 1, 0 }, { 0x0C44, 0, 1 }, + { 0x0C46, 1, 0 }, { 0x0C48, 0, 1 }, + { 0x0C4A, 1, 0 }, { 0x0C4D, 0, 1 }, + { 0x0C55, 1, 0 }, { 0x0C56, 0, 1 }, + { 0x0C58, 1, 0 }, { 0x0C59, 0, 1 }, + { 0x0C60, 1, 0 }, { 0x0C63, 0, 1 }, + { 0x0C66, 1, 0 }, { 0x0C6F, 0, 1 }, + { 0x0C78, 1, 0 }, { 0x0C7F, 0, 1 } +}; +static const uc_interval_t script_kannada_intervals[] = +{ + { 0x0C82, 1, 0 }, { 0x0C83, 0, 1 }, + { 0x0C85, 1, 0 }, { 0x0C8C, 0, 1 }, + { 0x0C8E, 1, 0 }, { 0x0C90, 0, 1 }, + { 0x0C92, 1, 0 }, { 0x0CA8, 0, 1 }, + { 0x0CAA, 1, 0 }, { 0x0CB3, 0, 1 }, + { 0x0CB5, 1, 0 }, { 0x0CB9, 0, 1 }, + { 0x0CBC, 1, 0 }, { 0x0CC4, 0, 1 }, + { 0x0CC6, 1, 0 }, { 0x0CC8, 0, 1 }, + { 0x0CCA, 1, 0 }, { 0x0CCD, 0, 1 }, + { 0x0CD5, 1, 0 }, { 0x0CD6, 0, 1 }, + { 0x0CDE, 1, 1 }, + { 0x0CE0, 1, 0 }, { 0x0CE3, 0, 1 }, + { 0x0CE6, 1, 0 }, { 0x0CEF, 0, 1 } +}; +static const uc_interval_t script_malayalam_intervals[] = +{ + { 0x0D02, 1, 0 }, { 0x0D03, 0, 1 }, + { 0x0D05, 1, 0 }, { 0x0D0C, 0, 1 }, + { 0x0D0E, 1, 0 }, { 0x0D10, 0, 1 }, + { 0x0D12, 1, 0 }, { 0x0D28, 0, 1 }, + { 0x0D2A, 1, 0 }, { 0x0D39, 0, 1 }, + { 0x0D3D, 1, 0 }, { 0x0D44, 0, 1 }, + { 0x0D46, 1, 0 }, { 0x0D48, 0, 1 }, + { 0x0D4A, 1, 0 }, { 0x0D4D, 0, 1 }, + { 0x0D57, 1, 1 }, + { 0x0D60, 1, 0 }, { 0x0D63, 0, 1 }, + { 0x0D66, 1, 0 }, { 0x0D75, 0, 1 }, + { 0x0D79, 1, 0 }, { 0x0D7F, 0, 1 } +}; +static const uc_interval_t script_sinhala_intervals[] = +{ + { 0x0D82, 1, 0 }, { 0x0D83, 0, 1 }, + { 0x0D85, 1, 0 }, { 0x0D96, 0, 1 }, + { 0x0D9A, 1, 0 }, { 0x0DB1, 0, 1 }, + { 0x0DB3, 1, 0 }, { 0x0DBB, 0, 1 }, + { 0x0DBD, 1, 1 }, + { 0x0DC0, 1, 0 }, { 0x0DC6, 0, 1 }, + { 0x0DCA, 1, 1 }, + { 0x0DCF, 1, 0 }, { 0x0DD4, 0, 1 }, + { 0x0DD6, 1, 1 }, + { 0x0DD8, 1, 0 }, { 0x0DDF, 0, 1 }, + { 0x0DF2, 1, 0 }, { 0x0DF4, 0, 1 } +}; +static const uc_interval_t script_thai_intervals[] = +{ + { 0x0E01, 1, 0 }, { 0x0E3A, 0, 1 }, + { 0x0E40, 1, 0 }, { 0x0E5B, 0, 1 } +}; +static const uc_interval_t script_lao_intervals[] = +{ + { 0x0E81, 1, 0 }, { 0x0E82, 0, 1 }, + { 0x0E84, 1, 1 }, + { 0x0E87, 1, 0 }, { 0x0E88, 0, 1 }, + { 0x0E8A, 1, 1 }, + { 0x0E8D, 1, 1 }, + { 0x0E94, 1, 0 }, { 0x0E97, 0, 1 }, + { 0x0E99, 1, 0 }, { 0x0E9F, 0, 1 }, + { 0x0EA1, 1, 0 }, { 0x0EA3, 0, 1 }, + { 0x0EA5, 1, 1 }, + { 0x0EA7, 1, 1 }, + { 0x0EAA, 1, 0 }, { 0x0EAB, 0, 1 }, + { 0x0EAD, 1, 0 }, { 0x0EB9, 0, 1 }, + { 0x0EBB, 1, 0 }, { 0x0EBD, 0, 1 }, + { 0x0EC0, 1, 0 }, { 0x0EC4, 0, 1 }, + { 0x0EC6, 1, 1 }, + { 0x0EC8, 1, 0 }, { 0x0ECD, 0, 1 }, + { 0x0ED0, 1, 0 }, { 0x0ED9, 0, 1 }, + { 0x0EDC, 1, 0 }, { 0x0EDD, 0, 1 } +}; +static const uc_interval_t script_tibetan_intervals[] = +{ + { 0x0F00, 1, 0 }, { 0x0F47, 0, 1 }, + { 0x0F49, 1, 0 }, { 0x0F6C, 0, 1 }, + { 0x0F71, 1, 0 }, { 0x0F8B, 0, 1 }, + { 0x0F90, 1, 0 }, { 0x0F97, 0, 1 }, + { 0x0F99, 1, 0 }, { 0x0FBC, 0, 1 }, + { 0x0FBE, 1, 0 }, { 0x0FCC, 0, 1 }, + { 0x0FCE, 1, 0 }, { 0x0FD4, 0, 1 } +}; +static const uc_interval_t script_myanmar_intervals[] = +{ + { 0x1000, 1, 0 }, { 0x1099, 0, 1 }, + { 0x109E, 1, 0 }, { 0x109F, 0, 1 } +}; +static const uc_interval_t script_georgian_intervals[] = +{ + { 0x10A0, 1, 0 }, { 0x10C5, 0, 1 }, + { 0x10D0, 1, 0 }, { 0x10FA, 0, 1 }, + { 0x10FC, 1, 1 }, + { 0x2D00, 1, 0 }, { 0x2D25, 0, 1 } +}; +static const uc_interval_t script_hangul_intervals[] = +{ + { 0x1100, 1, 0 }, { 0x1159, 0, 1 }, + { 0x115F, 1, 0 }, { 0x11A2, 0, 1 }, + { 0x11A8, 1, 0 }, { 0x11F9, 0, 1 }, + { 0x3131, 1, 0 }, { 0x318E, 0, 1 }, + { 0x3200, 1, 0 }, { 0x321E, 0, 1 }, + { 0x3260, 1, 0 }, { 0x327E, 0, 1 }, + { 0xAC00, 1, 0 }, { 0xD7A3, 0, 1 }, + { 0xFFA0, 1, 0 }, { 0xFFBE, 0, 1 }, + { 0xFFC2, 1, 0 }, { 0xFFC7, 0, 1 }, + { 0xFFCA, 1, 0 }, { 0xFFCF, 0, 1 }, + { 0xFFD2, 1, 0 }, { 0xFFD7, 0, 1 }, + { 0xFFDA, 1, 0 }, { 0xFFDC, 0, 1 } +}; +static const uc_interval_t script_ethiopic_intervals[] = +{ + { 0x1200, 1, 0 }, { 0x1248, 0, 1 }, + { 0x124A, 1, 0 }, { 0x124D, 0, 1 }, + { 0x1250, 1, 0 }, { 0x1256, 0, 1 }, + { 0x1258, 1, 1 }, + { 0x125A, 1, 0 }, { 0x125D, 0, 1 }, + { 0x1260, 1, 0 }, { 0x1288, 0, 1 }, + { 0x128A, 1, 0 }, { 0x128D, 0, 1 }, + { 0x1290, 1, 0 }, { 0x12B0, 0, 1 }, + { 0x12B2, 1, 0 }, { 0x12B5, 0, 1 }, + { 0x12B8, 1, 0 }, { 0x12BE, 0, 1 }, + { 0x12C0, 1, 1 }, + { 0x12C2, 1, 0 }, { 0x12C5, 0, 1 }, + { 0x12C8, 1, 0 }, { 0x12D6, 0, 1 }, + { 0x12D8, 1, 0 }, { 0x1310, 0, 1 }, + { 0x1312, 1, 0 }, { 0x1315, 0, 1 }, + { 0x1318, 1, 0 }, { 0x135A, 0, 1 }, + { 0x135F, 1, 0 }, { 0x137C, 0, 1 }, + { 0x1380, 1, 0 }, { 0x1399, 0, 1 }, + { 0x2D80, 1, 0 }, { 0x2D96, 0, 1 }, + { 0x2DA0, 1, 0 }, { 0x2DA6, 0, 1 }, + { 0x2DA8, 1, 0 }, { 0x2DAE, 0, 1 }, + { 0x2DB0, 1, 0 }, { 0x2DB6, 0, 1 }, + { 0x2DB8, 1, 0 }, { 0x2DBE, 0, 1 }, + { 0x2DC0, 1, 0 }, { 0x2DC6, 0, 1 }, + { 0x2DC8, 1, 0 }, { 0x2DCE, 0, 1 }, + { 0x2DD0, 1, 0 }, { 0x2DD6, 0, 1 }, + { 0x2DD8, 1, 0 }, { 0x2DDE, 0, 1 } +}; +static const uc_interval_t script_cherokee_intervals[] = +{ + { 0x13A0, 1, 0 }, { 0x13F4, 0, 1 } +}; +static const uc_interval_t script_canadian_aboriginal_intervals[] = +{ + { 0x1401, 1, 0 }, { 0x1676, 0, 1 } +}; +static const uc_interval_t script_ogham_intervals[] = +{ + { 0x1680, 1, 0 }, { 0x169C, 0, 1 } +}; +static const uc_interval_t script_runic_intervals[] = +{ + { 0x16A0, 1, 0 }, { 0x16EA, 0, 1 }, + { 0x16EE, 1, 0 }, { 0x16F0, 0, 1 } +}; +static const uc_interval_t script_khmer_intervals[] = +{ + { 0x1780, 1, 0 }, { 0x17DD, 0, 1 }, + { 0x17E0, 1, 0 }, { 0x17E9, 0, 1 }, + { 0x17F0, 1, 0 }, { 0x17F9, 0, 1 }, + { 0x19E0, 1, 0 }, { 0x19FF, 0, 1 } +}; +static const uc_interval_t script_mongolian_intervals[] = +{ + { 0x1800, 1, 0 }, { 0x1801, 0, 1 }, + { 0x1804, 1, 1 }, + { 0x1806, 1, 0 }, { 0x180E, 0, 1 }, + { 0x1810, 1, 0 }, { 0x1819, 0, 1 }, + { 0x1820, 1, 0 }, { 0x1877, 0, 1 }, + { 0x1880, 1, 0 }, { 0x18AA, 0, 1 } +}; +static const uc_interval_t script_hiragana_intervals[] = +{ + { 0x3041, 1, 0 }, { 0x3096, 0, 1 }, + { 0x309D, 1, 0 }, { 0x309F, 0, 1 } +}; +static const uc_interval_t script_katakana_intervals[] = +{ + { 0x30A1, 1, 0 }, { 0x30FA, 0, 1 }, + { 0x30FD, 1, 0 }, { 0x30FF, 0, 1 }, + { 0x31F0, 1, 0 }, { 0x31FF, 0, 1 }, + { 0x32D0, 1, 0 }, { 0x32FE, 0, 1 }, + { 0x3300, 1, 0 }, { 0x3357, 0, 1 }, + { 0xFF66, 1, 0 }, { 0xFF6F, 0, 1 }, + { 0xFF71, 1, 0 }, { 0xFF9D, 0, 1 } +}; +static const uc_interval_t script_bopomofo_intervals[] = +{ + { 0x3105, 1, 0 }, { 0x312D, 0, 1 }, + { 0x31A0, 1, 0 }, { 0x31B7, 0, 1 } +}; +static const uc_interval_t script_han_intervals[] = +{ + { 0x2E80, 1, 0 }, { 0x2E99, 0, 1 }, + { 0x2E9B, 1, 0 }, { 0x2EF3, 0, 1 }, + { 0x2F00, 1, 0 }, { 0x2FD5, 0, 1 }, + { 0x3005, 1, 1 }, + { 0x3007, 1, 1 }, + { 0x3021, 1, 0 }, { 0x3029, 0, 1 }, + { 0x3038, 1, 0 }, { 0x303B, 0, 1 }, + { 0x3400, 1, 0 }, { 0x4DB5, 0, 1 }, + { 0x4E00, 1, 0 }, { 0x9FC3, 0, 1 }, + { 0xF900, 1, 0 }, { 0xFA2D, 0, 1 }, + { 0xFA30, 1, 0 }, { 0xFA6A, 0, 1 }, + { 0xFA70, 1, 0 }, { 0xFAD9, 0, 1 }, + { 0x20000, 1, 0 }, { 0x2A6D6, 0, 1 }, + { 0x2F800, 1, 0 }, { 0x2FA1D, 0, 1 } +}; +static const uc_interval_t script_yi_intervals[] = +{ + { 0xA000, 1, 0 }, { 0xA48C, 0, 1 }, + { 0xA490, 1, 0 }, { 0xA4C6, 0, 1 } +}; +static const uc_interval_t script_old_italic_intervals[] = +{ + { 0x10300, 1, 0 }, { 0x1031E, 0, 1 }, + { 0x10320, 1, 0 }, { 0x10323, 0, 1 } +}; +static const uc_interval_t script_gothic_intervals[] = +{ + { 0x10330, 1, 0 }, { 0x1034A, 0, 1 } +}; +static const uc_interval_t script_deseret_intervals[] = +{ + { 0x10400, 1, 0 }, { 0x1044F, 0, 1 } +}; +static const uc_interval_t script_inherited_intervals[] = +{ + { 0x0300, 1, 0 }, { 0x036F, 0, 1 }, + { 0x064B, 1, 0 }, { 0x0655, 0, 1 }, + { 0x0670, 1, 1 }, + { 0x0951, 1, 0 }, { 0x0952, 0, 1 }, + { 0x1DC0, 1, 0 }, { 0x1DE6, 0, 1 }, + { 0x1DFE, 1, 0 }, { 0x1DFF, 0, 1 }, + { 0x200C, 1, 0 }, { 0x200D, 0, 1 }, + { 0x20D0, 1, 0 }, { 0x20F0, 0, 1 }, + { 0x302A, 1, 0 }, { 0x302F, 0, 1 }, + { 0x3099, 1, 0 }, { 0x309A, 0, 1 }, + { 0xFE00, 1, 0 }, { 0xFE0F, 0, 1 }, + { 0xFE20, 1, 0 }, { 0xFE26, 0, 1 }, + { 0x101FD, 1, 1 }, + { 0x1D167, 1, 0 }, { 0x1D169, 0, 1 }, + { 0x1D17B, 1, 0 }, { 0x1D182, 0, 1 }, + { 0x1D185, 1, 0 }, { 0x1D18B, 0, 1 }, + { 0x1D1AA, 1, 0 }, { 0x1D1AD, 0, 1 }, + { 0xE0100, 1, 0 }, { 0xE01EF, 0, 1 } +}; +static const uc_interval_t script_tagalog_intervals[] = +{ + { 0x1700, 1, 0 }, { 0x170C, 0, 1 }, + { 0x170E, 1, 0 }, { 0x1714, 0, 1 } +}; +static const uc_interval_t script_hanunoo_intervals[] = +{ + { 0x1720, 1, 0 }, { 0x1734, 0, 1 } +}; +static const uc_interval_t script_buhid_intervals[] = +{ + { 0x1740, 1, 0 }, { 0x1753, 0, 1 } +}; +static const uc_interval_t script_tagbanwa_intervals[] = +{ + { 0x1760, 1, 0 }, { 0x176C, 0, 1 }, + { 0x176E, 1, 0 }, { 0x1770, 0, 1 }, + { 0x1772, 1, 0 }, { 0x1773, 0, 1 } +}; +static const uc_interval_t script_limbu_intervals[] = +{ + { 0x1900, 1, 0 }, { 0x191C, 0, 1 }, + { 0x1920, 1, 0 }, { 0x192B, 0, 1 }, + { 0x1930, 1, 0 }, { 0x193B, 0, 1 }, + { 0x1940, 1, 1 }, + { 0x1944, 1, 0 }, { 0x194F, 0, 1 } +}; +static const uc_interval_t script_tai_le_intervals[] = +{ + { 0x1950, 1, 0 }, { 0x196D, 0, 1 }, + { 0x1970, 1, 0 }, { 0x1974, 0, 1 } +}; +static const uc_interval_t script_linear_b_intervals[] = +{ + { 0x10000, 1, 0 }, { 0x1000B, 0, 1 }, + { 0x1000D, 1, 0 }, { 0x10026, 0, 1 }, + { 0x10028, 1, 0 }, { 0x1003A, 0, 1 }, + { 0x1003C, 1, 0 }, { 0x1003D, 0, 1 }, + { 0x1003F, 1, 0 }, { 0x1004D, 0, 1 }, + { 0x10050, 1, 0 }, { 0x1005D, 0, 1 }, + { 0x10080, 1, 0 }, { 0x100FA, 0, 1 } +}; +static const uc_interval_t script_ugaritic_intervals[] = +{ + { 0x10380, 1, 0 }, { 0x1039D, 0, 1 }, + { 0x1039F, 1, 1 } +}; +static const uc_interval_t script_shavian_intervals[] = +{ + { 0x10450, 1, 0 }, { 0x1047F, 0, 1 } +}; +static const uc_interval_t script_osmanya_intervals[] = +{ + { 0x10480, 1, 0 }, { 0x1049D, 0, 1 }, + { 0x104A0, 1, 0 }, { 0x104A9, 0, 1 } +}; +static const uc_interval_t script_cypriot_intervals[] = +{ + { 0x10800, 1, 0 }, { 0x10805, 0, 1 }, + { 0x10808, 1, 1 }, + { 0x1080A, 1, 0 }, { 0x10835, 0, 1 }, + { 0x10837, 1, 0 }, { 0x10838, 0, 1 }, + { 0x1083C, 1, 1 }, + { 0x1083F, 1, 1 } +}; +static const uc_interval_t script_braille_intervals[] = +{ + { 0x2800, 1, 0 }, { 0x28FF, 0, 1 } +}; +static const uc_interval_t script_buginese_intervals[] = +{ + { 0x1A00, 1, 0 }, { 0x1A1B, 0, 1 }, + { 0x1A1E, 1, 0 }, { 0x1A1F, 0, 1 } +}; +static const uc_interval_t script_coptic_intervals[] = +{ + { 0x03E2, 1, 0 }, { 0x03EF, 0, 1 }, + { 0x2C80, 1, 0 }, { 0x2CEA, 0, 1 }, + { 0x2CF9, 1, 0 }, { 0x2CFF, 0, 1 } +}; +static const uc_interval_t script_new_tai_lue_intervals[] = +{ + { 0x1980, 1, 0 }, { 0x19A9, 0, 1 }, + { 0x19B0, 1, 0 }, { 0x19C9, 0, 1 }, + { 0x19D0, 1, 0 }, { 0x19D9, 0, 1 }, + { 0x19DE, 1, 0 }, { 0x19DF, 0, 1 } +}; +static const uc_interval_t script_glagolitic_intervals[] = +{ + { 0x2C00, 1, 0 }, { 0x2C2E, 0, 1 }, + { 0x2C30, 1, 0 }, { 0x2C5E, 0, 1 } +}; +static const uc_interval_t script_tifinagh_intervals[] = +{ + { 0x2D30, 1, 0 }, { 0x2D65, 0, 1 }, + { 0x2D6F, 1, 1 } +}; +static const uc_interval_t script_syloti_nagri_intervals[] = +{ + { 0xA800, 1, 0 }, { 0xA82B, 0, 1 } +}; +static const uc_interval_t script_old_persian_intervals[] = +{ + { 0x103A0, 1, 0 }, { 0x103C3, 0, 1 }, + { 0x103C8, 1, 0 }, { 0x103D5, 0, 1 } +}; +static const uc_interval_t script_kharoshthi_intervals[] = +{ + { 0x10A00, 1, 0 }, { 0x10A03, 0, 1 }, + { 0x10A05, 1, 0 }, { 0x10A06, 0, 1 }, + { 0x10A0C, 1, 0 }, { 0x10A13, 0, 1 }, + { 0x10A15, 1, 0 }, { 0x10A17, 0, 1 }, + { 0x10A19, 1, 0 }, { 0x10A33, 0, 1 }, + { 0x10A38, 1, 0 }, { 0x10A3A, 0, 1 }, + { 0x10A3F, 1, 0 }, { 0x10A47, 0, 1 }, + { 0x10A50, 1, 0 }, { 0x10A58, 0, 1 } +}; +static const uc_interval_t script_balinese_intervals[] = +{ + { 0x1B00, 1, 0 }, { 0x1B4B, 0, 1 }, + { 0x1B50, 1, 0 }, { 0x1B7C, 0, 1 } +}; +static const uc_interval_t script_cuneiform_intervals[] = +{ + { 0x12000, 1, 0 }, { 0x1236E, 0, 1 }, + { 0x12400, 1, 0 }, { 0x12462, 0, 1 }, + { 0x12470, 1, 0 }, { 0x12473, 0, 1 } +}; +static const uc_interval_t script_phoenician_intervals[] = +{ + { 0x10900, 1, 0 }, { 0x10919, 0, 1 }, + { 0x1091F, 1, 1 } +}; +static const uc_interval_t script_phags_pa_intervals[] = +{ + { 0xA840, 1, 0 }, { 0xA877, 0, 1 } +}; +static const uc_interval_t script_nko_intervals[] = +{ + { 0x07C0, 1, 0 }, { 0x07FA, 0, 1 } +}; +static const uc_interval_t script_sundanese_intervals[] = +{ + { 0x1B80, 1, 0 }, { 0x1BAA, 0, 1 }, + { 0x1BAE, 1, 0 }, { 0x1BB9, 0, 1 } +}; +static const uc_interval_t script_lepcha_intervals[] = +{ + { 0x1C00, 1, 0 }, { 0x1C37, 0, 1 }, + { 0x1C3B, 1, 0 }, { 0x1C49, 0, 1 }, + { 0x1C4D, 1, 0 }, { 0x1C4F, 0, 1 } +}; +static const uc_interval_t script_ol_chiki_intervals[] = +{ + { 0x1C50, 1, 0 }, { 0x1C7F, 0, 1 } +}; +static const uc_interval_t script_vai_intervals[] = +{ + { 0xA500, 1, 0 }, { 0xA62B, 0, 1 } +}; +static const uc_interval_t script_saurashtra_intervals[] = +{ + { 0xA880, 1, 0 }, { 0xA8C4, 0, 1 }, + { 0xA8CE, 1, 0 }, { 0xA8D9, 0, 1 } +}; +static const uc_interval_t script_kayah_li_intervals[] = +{ + { 0xA900, 1, 0 }, { 0xA92F, 0, 1 } +}; +static const uc_interval_t script_rejang_intervals[] = +{ + { 0xA930, 1, 0 }, { 0xA953, 0, 1 }, + { 0xA95F, 1, 1 } +}; +static const uc_interval_t script_lycian_intervals[] = +{ + { 0x10280, 1, 0 }, { 0x1029C, 0, 1 } +}; +static const uc_interval_t script_carian_intervals[] = +{ + { 0x102A0, 1, 0 }, { 0x102D0, 0, 1 } +}; +static const uc_interval_t script_lydian_intervals[] = +{ + { 0x10920, 1, 0 }, { 0x10939, 0, 1 }, + { 0x1093F, 1, 1 } +}; +static const uc_interval_t script_cham_intervals[] = +{ + { 0xAA00, 1, 0 }, { 0xAA36, 0, 1 }, + { 0xAA40, 1, 0 }, { 0xAA4D, 0, 1 }, + { 0xAA50, 1, 0 }, { 0xAA59, 0, 1 }, + { 0xAA5C, 1, 0 }, { 0xAA5F, 0, 1 } +}; +static const uc_script_t scripts[77] = +{ + { + sizeof (script_common_intervals) / sizeof (uc_interval_t), + script_common_intervals, + "Common" + }, + { + sizeof (script_latin_intervals) / sizeof (uc_interval_t), + script_latin_intervals, + "Latin" + }, + { + sizeof (script_greek_intervals) / sizeof (uc_interval_t), + script_greek_intervals, + "Greek" + }, + { + sizeof (script_cyrillic_intervals) / sizeof (uc_interval_t), + script_cyrillic_intervals, + "Cyrillic" + }, + { + sizeof (script_armenian_intervals) / sizeof (uc_interval_t), + script_armenian_intervals, + "Armenian" + }, + { + sizeof (script_hebrew_intervals) / sizeof (uc_interval_t), + script_hebrew_intervals, + "Hebrew" + }, + { + sizeof (script_arabic_intervals) / sizeof (uc_interval_t), + script_arabic_intervals, + "Arabic" + }, + { + sizeof (script_syriac_intervals) / sizeof (uc_interval_t), + script_syriac_intervals, + "Syriac" + }, + { + sizeof (script_thaana_intervals) / sizeof (uc_interval_t), + script_thaana_intervals, + "Thaana" + }, + { + sizeof (script_devanagari_intervals) / sizeof (uc_interval_t), + script_devanagari_intervals, + "Devanagari" + }, + { + sizeof (script_bengali_intervals) / sizeof (uc_interval_t), + script_bengali_intervals, + "Bengali" + }, + { + sizeof (script_gurmukhi_intervals) / sizeof (uc_interval_t), + script_gurmukhi_intervals, + "Gurmukhi" + }, + { + sizeof (script_gujarati_intervals) / sizeof (uc_interval_t), + script_gujarati_intervals, + "Gujarati" + }, + { + sizeof (script_oriya_intervals) / sizeof (uc_interval_t), + script_oriya_intervals, + "Oriya" + }, + { + sizeof (script_tamil_intervals) / sizeof (uc_interval_t), + script_tamil_intervals, + "Tamil" + }, + { + sizeof (script_telugu_intervals) / sizeof (uc_interval_t), + script_telugu_intervals, + "Telugu" + }, + { + sizeof (script_kannada_intervals) / sizeof (uc_interval_t), + script_kannada_intervals, + "Kannada" + }, + { + sizeof (script_malayalam_intervals) / sizeof (uc_interval_t), + script_malayalam_intervals, + "Malayalam" + }, + { + sizeof (script_sinhala_intervals) / sizeof (uc_interval_t), + script_sinhala_intervals, + "Sinhala" + }, + { + sizeof (script_thai_intervals) / sizeof (uc_interval_t), + script_thai_intervals, + "Thai" + }, + { + sizeof (script_lao_intervals) / sizeof (uc_interval_t), + script_lao_intervals, + "Lao" + }, + { + sizeof (script_tibetan_intervals) / sizeof (uc_interval_t), + script_tibetan_intervals, + "Tibetan" + }, + { + sizeof (script_myanmar_intervals) / sizeof (uc_interval_t), + script_myanmar_intervals, + "Myanmar" + }, + { + sizeof (script_georgian_intervals) / sizeof (uc_interval_t), + script_georgian_intervals, + "Georgian" + }, + { + sizeof (script_hangul_intervals) / sizeof (uc_interval_t), + script_hangul_intervals, + "Hangul" + }, + { + sizeof (script_ethiopic_intervals) / sizeof (uc_interval_t), + script_ethiopic_intervals, + "Ethiopic" + }, + { + sizeof (script_cherokee_intervals) / sizeof (uc_interval_t), + script_cherokee_intervals, + "Cherokee" + }, + { + sizeof (script_canadian_aboriginal_intervals) / sizeof (uc_interval_t), + script_canadian_aboriginal_intervals, + "Canadian_Aboriginal" + }, + { + sizeof (script_ogham_intervals) / sizeof (uc_interval_t), + script_ogham_intervals, + "Ogham" + }, + { + sizeof (script_runic_intervals) / sizeof (uc_interval_t), + script_runic_intervals, + "Runic" + }, + { + sizeof (script_khmer_intervals) / sizeof (uc_interval_t), + script_khmer_intervals, + "Khmer" + }, + { + sizeof (script_mongolian_intervals) / sizeof (uc_interval_t), + script_mongolian_intervals, + "Mongolian" + }, + { + sizeof (script_hiragana_intervals) / sizeof (uc_interval_t), + script_hiragana_intervals, + "Hiragana" + }, + { + sizeof (script_katakana_intervals) / sizeof (uc_interval_t), + script_katakana_intervals, + "Katakana" + }, + { + sizeof (script_bopomofo_intervals) / sizeof (uc_interval_t), + script_bopomofo_intervals, + "Bopomofo" + }, + { + sizeof (script_han_intervals) / sizeof (uc_interval_t), + script_han_intervals, + "Han" + }, + { + sizeof (script_yi_intervals) / sizeof (uc_interval_t), + script_yi_intervals, + "Yi" + }, + { + sizeof (script_old_italic_intervals) / sizeof (uc_interval_t), + script_old_italic_intervals, + "Old_Italic" + }, + { + sizeof (script_gothic_intervals) / sizeof (uc_interval_t), + script_gothic_intervals, + "Gothic" + }, + { + sizeof (script_deseret_intervals) / sizeof (uc_interval_t), + script_deseret_intervals, + "Deseret" + }, + { + sizeof (script_inherited_intervals) / sizeof (uc_interval_t), + script_inherited_intervals, + "Inherited" + }, + { + sizeof (script_tagalog_intervals) / sizeof (uc_interval_t), + script_tagalog_intervals, + "Tagalog" + }, + { + sizeof (script_hanunoo_intervals) / sizeof (uc_interval_t), + script_hanunoo_intervals, + "Hanunoo" + }, + { + sizeof (script_buhid_intervals) / sizeof (uc_interval_t), + script_buhid_intervals, + "Buhid" + }, + { + sizeof (script_tagbanwa_intervals) / sizeof (uc_interval_t), + script_tagbanwa_intervals, + "Tagbanwa" + }, + { + sizeof (script_limbu_intervals) / sizeof (uc_interval_t), + script_limbu_intervals, + "Limbu" + }, + { + sizeof (script_tai_le_intervals) / sizeof (uc_interval_t), + script_tai_le_intervals, + "Tai_Le" + }, + { + sizeof (script_linear_b_intervals) / sizeof (uc_interval_t), + script_linear_b_intervals, + "Linear_B" + }, + { + sizeof (script_ugaritic_intervals) / sizeof (uc_interval_t), + script_ugaritic_intervals, + "Ugaritic" + }, + { + sizeof (script_shavian_intervals) / sizeof (uc_interval_t), + script_shavian_intervals, + "Shavian" + }, + { + sizeof (script_osmanya_intervals) / sizeof (uc_interval_t), + script_osmanya_intervals, + "Osmanya" + }, + { + sizeof (script_cypriot_intervals) / sizeof (uc_interval_t), + script_cypriot_intervals, + "Cypriot" + }, + { + sizeof (script_braille_intervals) / sizeof (uc_interval_t), + script_braille_intervals, + "Braille" + }, + { + sizeof (script_buginese_intervals) / sizeof (uc_interval_t), + script_buginese_intervals, + "Buginese" + }, + { + sizeof (script_coptic_intervals) / sizeof (uc_interval_t), + script_coptic_intervals, + "Coptic" + }, + { + sizeof (script_new_tai_lue_intervals) / sizeof (uc_interval_t), + script_new_tai_lue_intervals, + "New_Tai_Lue" + }, + { + sizeof (script_glagolitic_intervals) / sizeof (uc_interval_t), + script_glagolitic_intervals, + "Glagolitic" + }, + { + sizeof (script_tifinagh_intervals) / sizeof (uc_interval_t), + script_tifinagh_intervals, + "Tifinagh" + }, + { + sizeof (script_syloti_nagri_intervals) / sizeof (uc_interval_t), + script_syloti_nagri_intervals, + "Syloti_Nagri" + }, + { + sizeof (script_old_persian_intervals) / sizeof (uc_interval_t), + script_old_persian_intervals, + "Old_Persian" + }, + { + sizeof (script_kharoshthi_intervals) / sizeof (uc_interval_t), + script_kharoshthi_intervals, + "Kharoshthi" + }, + { + sizeof (script_balinese_intervals) / sizeof (uc_interval_t), + script_balinese_intervals, + "Balinese" + }, + { + sizeof (script_cuneiform_intervals) / sizeof (uc_interval_t), + script_cuneiform_intervals, + "Cuneiform" + }, + { + sizeof (script_phoenician_intervals) / sizeof (uc_interval_t), + script_phoenician_intervals, + "Phoenician" + }, + { + sizeof (script_phags_pa_intervals) / sizeof (uc_interval_t), + script_phags_pa_intervals, + "Phags_Pa" + }, + { + sizeof (script_nko_intervals) / sizeof (uc_interval_t), + script_nko_intervals, + "Nko" + }, + { + sizeof (script_sundanese_intervals) / sizeof (uc_interval_t), + script_sundanese_intervals, + "Sundanese" + }, + { + sizeof (script_lepcha_intervals) / sizeof (uc_interval_t), + script_lepcha_intervals, + "Lepcha" + }, + { + sizeof (script_ol_chiki_intervals) / sizeof (uc_interval_t), + script_ol_chiki_intervals, + "Ol_Chiki" + }, + { + sizeof (script_vai_intervals) / sizeof (uc_interval_t), + script_vai_intervals, + "Vai" + }, + { + sizeof (script_saurashtra_intervals) / sizeof (uc_interval_t), + script_saurashtra_intervals, + "Saurashtra" + }, + { + sizeof (script_kayah_li_intervals) / sizeof (uc_interval_t), + script_kayah_li_intervals, + "Kayah_Li" + }, + { + sizeof (script_rejang_intervals) / sizeof (uc_interval_t), + script_rejang_intervals, + "Rejang" + }, + { + sizeof (script_lycian_intervals) / sizeof (uc_interval_t), + script_lycian_intervals, + "Lycian" + }, + { + sizeof (script_carian_intervals) / sizeof (uc_interval_t), + script_carian_intervals, + "Carian" + }, + { + sizeof (script_lydian_intervals) / sizeof (uc_interval_t), + script_lydian_intervals, + "Lydian" + }, + { + sizeof (script_cham_intervals) / sizeof (uc_interval_t), + script_cham_intervals, + "Cham" + } +}; +#define script_header_0 16 +#define script_header_1 15 +#define script_header_2 7 +#define script_header_3 511 +#define script_header_4 127 +static const +struct + { + int level1[15]; + short level2[4 << 9]; + unsigned char level3[138 << 7]; + } +u_script = +{ + { + 0, 512, 1024, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1536 + }, + { + 0, 128, 256, 256, 256, 384, 512, 640, + 768, 768, 896, 1024, 1152, 1280, 1408, 1536, + -1, -1, 1664, 1792, 1920, 2048, 2176, 2304, + 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, + 3456, 3584, 3712, 3840, 3968, 4096, 4224, 4352, + 4480, 4608, 4608, 4608, 4736, 4864, 4992, 5120, + 5248, 5376, 5504, 5632, 5760, -1, 5888, 6016, + 6144, -1, 6272, 6400, 256, 256, 6528, 6656, + 6784, 6912, 7040, 7168, 7296, 7296, 7296, 7424, + 7552, 7296, 7296, 7296, 7296, 7680, 7808, 7936, + 8064, 8064, 7296, 7296, 7296, 7296, 8192, -1, + 8320, 8448, 8576, 8704, 8832, 8960, 9088, 9216, + 9344, 9472, 9600, 9728, 9856, 9984, 10112, 7296, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 10240, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 10368, + 10496, 10496, 10496, 10496, 10496, 10496, 10496, 10496, + 10496, 10624, 10752, 10752, 10880, 11008, 11136, 11264, + 11392, 11520, 11648, -1, 11776, -1, -1, -1, + 11904, 11904, 11904, 11904, 11904, 11904, 11904, 11904, + 11904, 11904, 11904, 11904, 11904, 11904, 11904, 11904, + 11904, 11904, 11904, 11904, 11904, 11904, 11904, 11904, + 11904, 11904, 11904, 11904, 11904, 11904, 11904, 11904, + 11904, 11904, 11904, 11904, 11904, 11904, 11904, 11904, + 11904, 11904, 11904, 11904, 11904, 11904, 11904, 11904, + 11904, 11904, 11904, 11904, 11904, 11904, 11904, 11904, + 11904, 11904, 11904, 11904, 11904, 11904, 11904, 11904, + 11904, 11904, 11904, 11904, 11904, 11904, 11904, 11904, + 11904, 11904, 11904, 11904, 11904, 11904, 11904, 11904, + 11904, 11904, 11904, 11904, 11904, 11904, 11904, 12032, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 9088, 9088, 12160, 12288, 12416, 12544, + 12672, 12672, 12800, 12928, 13056, 13184, 13312, 13440, + 13568, 13696, 13824, 13952, -1, 14080, 14208, 14336, + 14464, 14592, -1, -1, -1, -1, -1, -1, + 14720, -1, 14848, -1, 14976, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 15104, 15104, 15104, 15104, 15104, 15104, 15232, -1, + 15360, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 7296, 15488, 15616, 15744, 15872, -1, 16000, -1, + 16128, 16256, 16384, 7296, 7296, 16512, 7296, 16640, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 16768, 16896, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 9088, 9088, 9088, + 9088, 9088, 9088, 9088, 9088, 17024, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 9088, 9088, 9088, 9088, 17152, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 17280, -1, 17408, 17536, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 2, 2, 2, 2, 0, 2, 2, 2, + 255, 255, 2, 2, 2, 2, 0, 255, + 255, 255, 255, 255, 2, 0, 2, 0, + 2, 2, 2, 255, 2, 255, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 255, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 255, + 255, 4, 4, 4, 4, 4, 4, 4, + 255, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, + 255, 0, 4, 255, 255, 255, 255, 255, + 255, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 255, 255, 255, 255, 255, 255, 255, 255, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 255, 255, 255, 255, 255, + 5, 5, 5, 5, 5, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 255, 255, 6, 6, + 6, 6, 6, 6, 0, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 0, 255, 255, 6, 0, + 255, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 0, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 6, 6, 6, 6, 6, + 40, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 0, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 255, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 255, 255, 7, 7, 7, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 255, 255, 255, 255, 255, + 255, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 255, 255, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 255, 255, + 9, 40, 40, 9, 9, 255, 255, 255, + 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 0, 0, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, + 0, 9, 9, 255, 255, 255, 255, 255, + 255, 255, 255, 9, 9, 9, 9, 9, + 255, 10, 10, 10, 255, 10, 10, 10, + 10, 10, 10, 10, 10, 255, 255, 10, + 10, 255, 255, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, + 10, 255, 10, 10, 10, 10, 10, 10, + 10, 255, 10, 255, 255, 255, 10, 10, + 10, 10, 255, 255, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 255, 255, 10, + 10, 255, 255, 10, 10, 10, 10, 255, + 255, 255, 255, 255, 255, 255, 255, 10, + 255, 255, 255, 255, 10, 10, 255, 10, + 10, 10, 10, 10, 255, 255, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 255, 255, 255, 255, 255, + 255, 11, 11, 11, 255, 11, 11, 11, + 11, 11, 11, 255, 255, 255, 255, 11, + 11, 255, 255, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 255, 11, 11, 11, 11, 11, 11, + 11, 255, 11, 11, 255, 11, 11, 255, + 11, 11, 255, 255, 11, 255, 11, 11, + 11, 11, 11, 255, 255, 255, 255, 11, + 11, 255, 255, 11, 11, 11, 255, 255, + 255, 11, 255, 255, 255, 255, 255, 255, + 255, 11, 11, 11, 11, 255, 11, 255, + 255, 255, 255, 255, 255, 255, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 12, 12, 12, 255, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 255, 12, + 12, 12, 255, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 12, 255, 12, 12, 12, 12, 12, 12, + 12, 255, 12, 12, 255, 12, 12, 12, + 12, 12, 255, 255, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 255, 12, + 12, 12, 255, 12, 12, 12, 255, 255, + 12, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 12, 12, 12, 12, 255, 255, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 255, 12, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 13, 13, 13, 255, 13, 13, 13, + 13, 13, 13, 13, 13, 255, 255, 13, + 13, 255, 255, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 255, 13, 13, 13, 13, 13, 13, + 13, 255, 13, 13, 255, 13, 13, 13, + 13, 13, 255, 255, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 255, 255, 13, + 13, 255, 255, 13, 13, 13, 255, 255, + 255, 255, 255, 255, 255, 255, 13, 13, + 255, 255, 255, 255, 13, 13, 255, 13, + 13, 13, 13, 13, 255, 255, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 14, 14, 255, 14, 14, 14, + 14, 14, 14, 255, 255, 255, 14, 14, + 14, 255, 14, 14, 14, 14, 255, 255, + 255, 14, 14, 255, 14, 255, 14, 14, + 255, 255, 255, 14, 14, 255, 255, 255, + 14, 14, 14, 255, 255, 255, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 255, 255, 255, 255, 14, 14, + 14, 14, 14, 255, 255, 255, 14, 14, + 14, 255, 14, 14, 14, 14, 255, 255, + 14, 255, 255, 255, 255, 255, 255, 14, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 255, 255, 255, 255, 255, + 255, 15, 15, 15, 255, 15, 15, 15, + 15, 15, 15, 15, 15, 255, 15, 15, + 15, 255, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 15, 255, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 255, 15, 15, 15, + 15, 15, 255, 255, 255, 15, 15, 15, + 15, 15, 15, 15, 15, 255, 15, 15, + 15, 255, 15, 15, 15, 15, 255, 255, + 255, 255, 255, 255, 255, 15, 15, 255, + 15, 15, 255, 255, 255, 255, 255, 255, + 15, 15, 15, 15, 255, 255, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, + 255, 255, 255, 255, 255, 255, 255, 255, + 15, 15, 15, 15, 15, 15, 15, 15, + 255, 255, 16, 16, 255, 16, 16, 16, + 16, 16, 16, 16, 16, 255, 16, 16, + 16, 255, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 255, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 255, 16, 16, 16, + 16, 16, 255, 255, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 255, 16, 16, + 16, 255, 16, 16, 16, 16, 255, 255, + 255, 255, 255, 255, 255, 16, 16, 255, + 255, 255, 255, 255, 255, 255, 16, 255, + 16, 16, 16, 16, 255, 255, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 255, 0, 0, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 17, 17, 255, 17, 17, 17, + 17, 17, 17, 17, 17, 255, 17, 17, + 17, 255, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 255, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 255, 255, 255, 17, 17, 17, + 17, 17, 17, 17, 17, 255, 17, 17, + 17, 255, 17, 17, 17, 17, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 17, + 255, 255, 255, 255, 255, 255, 255, 255, + 17, 17, 17, 17, 255, 255, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 255, 255, + 255, 17, 17, 17, 17, 17, 17, 17, + 255, 255, 18, 18, 255, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 255, + 255, 255, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 255, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 255, 18, 255, 255, + 18, 18, 18, 18, 18, 18, 18, 255, + 255, 255, 18, 255, 255, 255, 255, 18, + 18, 18, 18, 18, 18, 255, 18, 255, + 18, 18, 18, 18, 18, 18, 18, 18, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 18, 18, 18, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 255, 255, 255, 255, 0, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 20, 20, 255, 20, 255, 255, 20, + 20, 255, 20, 255, 255, 20, 255, 255, + 255, 255, 255, 255, 20, 20, 20, 20, + 255, 20, 20, 20, 20, 20, 20, 20, + 255, 20, 20, 20, 255, 20, 255, 20, + 255, 255, 20, 20, 255, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 255, 20, 20, 20, 255, 255, + 20, 20, 20, 20, 20, 255, 20, 255, + 20, 20, 20, 20, 20, 20, 255, 255, + 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 255, 255, 20, 20, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 255, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 255, 255, 255, + 255, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 255, 255, 255, 255, + 21, 21, 21, 21, 21, 21, 21, 21, + 255, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 255, 21, 21, + 21, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 21, 21, 255, 21, 21, + 21, 21, 21, 21, 21, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 22, 22, 22, 22, 22, 22, + 22, 22, 255, 255, 255, 255, 22, 22, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 0, 23, 255, 255, 255, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 255, 255, 255, 255, 255, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 255, 255, 255, 255, 255, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 255, 255, 255, 255, 255, 255, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 255, 25, 25, 25, 25, 255, 255, + 25, 25, 25, 25, 25, 25, 25, 255, + 25, 255, 25, 25, 25, 25, 255, 255, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 255, 25, 25, 25, 25, 255, 255, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 255, 25, 25, 25, 25, 255, 255, + 25, 25, 25, 25, 25, 25, 25, 255, + 25, 255, 25, 25, 25, 25, 255, 255, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 255, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 255, 25, 25, 25, 25, 255, 255, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 255, 255, 255, 255, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 255, 255, 255, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 255, 255, 255, 255, 255, 255, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 255, 255, 255, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 0, 0, 0, 29, 29, + 29, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 255, 41, 41, + 41, 41, 41, 41, 41, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 42, 42, 0, 0, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 255, 44, 44, + 44, 255, 44, 44, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 255, 255, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 255, 255, 255, 255, 255, 255, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 255, 255, 255, 255, 255, 255, + 31, 31, 0, 0, 31, 0, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 255, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 255, 255, 255, 255, 255, 255, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 255, 255, 255, 255, 255, 255, 255, 255, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 255, 255, 255, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 255, 255, 255, 255, + 45, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 255, 255, 255, 255, + 45, 255, 255, 255, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 45, 45, 45, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 255, 255, + 46, 46, 46, 46, 46, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 255, 255, 255, 255, 255, 255, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 255, 255, 255, 255, 255, 255, + 55, 55, 55, 55, 55, 55, 55, 55, + 55, 55, 255, 255, 255, 255, 55, 55, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 30, 30, 30, 30, 30, 30, 30, 30, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 53, 53, 53, 53, + 53, 53, 53, 53, 255, 255, 53, 53, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 255, 255, 255, 255, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 255, 255, 255, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 66, 255, 255, 255, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, + 66, 66, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 255, 255, 255, 67, 67, 67, 67, 67, + 67, 67, 67, 67, 67, 67, 67, 67, + 67, 67, 255, 255, 255, 67, 67, 67, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 1, 1, 1, 1, 2, 2, + 2, 2, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 40, 40, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 255, 255, + 2, 2, 2, 2, 2, 2, 255, 255, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 255, 255, + 2, 2, 2, 2, 2, 2, 255, 255, + 2, 2, 2, 2, 2, 2, 2, 2, + 255, 2, 255, 2, 255, 2, 255, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 255, 255, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 255, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 255, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 255, 255, 2, 2, + 2, 2, 2, 2, 255, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 255, 255, 2, 2, 2, 255, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 40, 40, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 255, 255, 255, + 255, 255, 0, 0, 0, 0, 0, 0, + 0, 1, 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 255, + 1, 1, 1, 1, 1, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, + 255, 255, 255, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 255, 255, 255, + 0, 0, 0, 0, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 0, 0, 0, 0, 255, 0, 0, + 0, 0, 255, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 255, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 255, 0, + 0, 0, 0, 255, 255, 255, 0, 255, + 0, 0, 0, 0, 0, 0, 0, 255, + 255, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 255, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 255, 0, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 255, 255, 255, + 0, 0, 0, 0, 0, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 255, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 255, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 255, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 255, 255, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, + 54, 54, 54, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 54, 54, 54, 54, 54, 54, 54, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 57, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 25, 25, 25, 25, 25, 25, 25, 255, + 25, 25, 25, 25, 25, 25, 25, 255, + 25, 25, 25, 25, 25, 25, 25, 255, + 25, 25, 25, 25, 25, 25, 25, 255, + 25, 25, 25, 25, 25, 25, 25, 255, + 25, 25, 25, 25, 25, 25, 25, 255, + 25, 25, 25, 25, 25, 25, 25, 255, + 25, 25, 25, 25, 25, 25, 25, 255, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 255, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 35, 0, 35, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 40, 40, 40, 40, 40, 40, + 0, 0, 0, 0, 0, 0, 0, 0, + 35, 35, 35, 35, 0, 0, 0, 0, + 255, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 255, + 255, 40, 40, 0, 0, 32, 32, 32, + 0, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 0, 0, 33, 33, 33, + 255, 255, 255, 255, 255, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 255, 255, + 255, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 34, 34, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 255, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 255, 255, 255, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 36, + 36, 36, 36, 36, 36, 36, 36, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 255, 255, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 255, 255, 255, 255, + 255, 255, 255, 255, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 1, 1, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 1, 1, 1, 1, 1, + 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 255, 255, 255, 255, 255, 255, 255, 255, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 72, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 255, 255, + 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 255, 255, 76, 76, 76, 76, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 255, 255, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 255, 255, 255, 255, 255, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 1, 1, 1, 1, 1, 1, 1, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 4, 4, 4, 4, 4, + 255, 255, 255, 255, 255, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 255, + 5, 5, 5, 5, 5, 255, 5, 255, + 5, 5, 255, 5, 5, 255, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 0, 0, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 255, 255, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 0, 255, 255, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, 255, 255, + 40, 40, 40, 40, 40, 40, 40, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 255, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 0, 0, 255, 255, 255, 255, + 6, 6, 6, 6, 6, 255, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 255, 255, 0, + 255, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 0, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 0, 0, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 255, + 255, 255, 24, 24, 24, 24, 24, 24, + 255, 255, 24, 24, 24, 24, 24, 24, + 255, 255, 24, 24, 24, 24, 24, 24, + 255, 255, 24, 24, 24, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 0, 0, 0, 0, 0, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 0, 0, 0, 0, 0, 255, 255, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 255, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 255, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 255, 47, 47, 255, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 255, 255, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 255, 255, 255, 255, 255, + 0, 0, 0, 255, 255, 255, 255, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, 255, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 40, 255, 255, + 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 255, 255, 255, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, + 74, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 255, + 37, 37, 37, 37, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 255, 48, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 255, 255, 255, 255, + 59, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 255, 255, + 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 51, 51, 51, 51, 51, 51, 255, 255, + 51, 255, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 51, 51, + 51, 51, 51, 51, 51, 51, 255, 51, + 51, 255, 255, 255, 51, 255, 255, 51, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 255, 255, 255, 255, 255, 63, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 255, 255, 255, 255, 255, 75, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 60, 60, 60, 60, 255, 60, 60, 255, + 255, 255, 255, 255, 60, 60, 60, 60, + 60, 60, 60, 60, 255, 60, 60, 60, + 255, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 255, 255, 255, 255, + 60, 60, 60, 255, 255, 255, 255, 60, + 60, 60, 60, 60, 60, 60, 60, 60, + 255, 255, 255, 255, 255, 255, 255, 255, + 60, 60, 60, 60, 60, 60, 60, 60, + 60, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 62, 62, 62, 62, 62, + 62, 62, 62, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 62, 62, 62, 62, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 255, + 255, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 40, + 40, 40, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 40, 40, 40, 40, 40, + 40, 40, 40, 0, 0, 40, 40, 40, + 40, 40, 40, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 40, 40, 40, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 255, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 255, 0, 0, + 255, 255, 0, 255, 255, 0, 0, 255, + 255, 0, 0, 0, 0, 255, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 255, 0, 255, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 255, 0, + 0, 0, 0, 255, 255, 0, 0, 0, + 0, 0, 0, 0, 0, 255, 0, 0, + 0, 0, 0, 0, 0, 255, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 255, 0, 0, 0, 0, 255, + 0, 0, 0, 0, 0, 255, 0, 255, + 255, 255, 0, 0, 0, 0, 0, 0, + 0, 255, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 35, 35, + 35, 35, 35, 35, 35, 35, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 0, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255 + } +}; diff --git a/lib/unictype/scripts_byname.gperf b/lib/unictype/scripts_byname.gperf new file mode 100644 index 00000000..c3ebfaea --- /dev/null +++ b/lib/unictype/scripts_byname.gperf @@ -0,0 +1,89 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Unicode scripts. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +struct named_script { const char *name; unsigned int index; }; +%struct-type +%language=ANSI-C +%define hash-function-name scripts_hash +%define lookup-function-name uc_script_lookup +%readonly-tables +%global-table +%define word-array-name script_names +%% +Common, 0 +Latin, 1 +Greek, 2 +Cyrillic, 3 +Armenian, 4 +Hebrew, 5 +Arabic, 6 +Syriac, 7 +Thaana, 8 +Devanagari, 9 +Bengali, 10 +Gurmukhi, 11 +Gujarati, 12 +Oriya, 13 +Tamil, 14 +Telugu, 15 +Kannada, 16 +Malayalam, 17 +Sinhala, 18 +Thai, 19 +Lao, 20 +Tibetan, 21 +Myanmar, 22 +Georgian, 23 +Hangul, 24 +Ethiopic, 25 +Cherokee, 26 +Canadian_Aboriginal, 27 +Ogham, 28 +Runic, 29 +Khmer, 30 +Mongolian, 31 +Hiragana, 32 +Katakana, 33 +Bopomofo, 34 +Han, 35 +Yi, 36 +Old_Italic, 37 +Gothic, 38 +Deseret, 39 +Inherited, 40 +Tagalog, 41 +Hanunoo, 42 +Buhid, 43 +Tagbanwa, 44 +Limbu, 45 +Tai_Le, 46 +Linear_B, 47 +Ugaritic, 48 +Shavian, 49 +Osmanya, 50 +Cypriot, 51 +Braille, 52 +Buginese, 53 +Coptic, 54 +New_Tai_Lue, 55 +Glagolitic, 56 +Tifinagh, 57 +Syloti_Nagri, 58 +Old_Persian, 59 +Kharoshthi, 60 +Balinese, 61 +Cuneiform, 62 +Phoenician, 63 +Phags_Pa, 64 +Nko, 65 +Sundanese, 66 +Lepcha, 67 +Ol_Chiki, 68 +Vai, 69 +Saurashtra, 70 +Kayah_Li, 71 +Rejang, 72 +Lycian, 73 +Carian, 74 +Lydian, 75 +Cham, 76 diff --git a/lib/unictype/scripts_byname.h b/lib/unictype/scripts_byname.h new file mode 100644 index 00000000..e7a7667e --- /dev/null +++ b/lib/unictype/scripts_byname.h @@ -0,0 +1,281 @@ +/* ANSI-C code produced by gperf version 3.0.4 */ +/* Command-line: gperf -m 10 ./unictype/scripts_byname.gperf */ +/* Computed positions: -k'1,3' */ + +#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ + && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ + && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ + && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ + && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ + && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ + && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ + && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ + && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ + && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ + && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ + && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ + && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ + && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ + && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ + && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ + && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ + && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ + && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ + && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ + && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ + && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ + && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126)) +/* The character set is not based on ISO-646. */ +#error "gperf generated tables don't work with this execution character set. Please report a bug to ." +#endif + +#line 4 "./unictype/scripts_byname.gperf" +struct named_script { const char *name; unsigned int index; }; + +#define TOTAL_KEYWORDS 77 +#define MIN_WORD_LENGTH 2 +#define MAX_WORD_LENGTH 19 +#define MIN_HASH_VALUE 2 +#define MAX_HASH_VALUE 92 +/* maximum key range = 91, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static unsigned int +scripts_hash (register const char *str, register unsigned int len) +{ + static const unsigned char asso_values[] = + { + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 53, 14, 3, 29, 27, + 93, 25, 0, 25, 93, 24, 7, 36, 28, 8, + 49, 93, 54, 7, 11, 64, 32, 93, 93, 0, + 93, 93, 93, 93, 93, 57, 93, 3, 52, 59, + 29, 39, 52, 22, 42, 39, 24, 93, 6, 20, + 0, 33, 17, 93, 0, 32, 22, 2, 28, 26, + 93, 31, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93 + }; + register int hval = len; + + switch (hval) + { + default: + hval += asso_values[(unsigned char)str[2]]; + /*FALLTHROUGH*/ + case 2: + case 1: + hval += asso_values[(unsigned char)str[0]]; + break; + } + return hval; +} + +static const struct named_script script_names[] = + { + {""}, {""}, +#line 49 "./unictype/scripts_byname.gperf" + {"Yi", 36}, +#line 48 "./unictype/scripts_byname.gperf" + {"Han", 35}, + {""}, {""}, +#line 37 "./unictype/scripts_byname.gperf" + {"Hangul", 24}, +#line 55 "./unictype/scripts_byname.gperf" + {"Hanunoo", 42}, +#line 45 "./unictype/scripts_byname.gperf" + {"Hiragana", 32}, +#line 87 "./unictype/scripts_byname.gperf" + {"Carian", 74}, +#line 89 "./unictype/scripts_byname.gperf" + {"Cham", 76}, +#line 16 "./unictype/scripts_byname.gperf" + {"Cyrillic", 3}, +#line 75 "./unictype/scripts_byname.gperf" + {"Cuneiform", 62}, +#line 20 "./unictype/scripts_byname.gperf" + {"Syriac", 7}, +#line 31 "./unictype/scripts_byname.gperf" + {"Sinhala", 18}, +#line 60 "./unictype/scripts_byname.gperf" + {"Linear_B", 47}, +#line 79 "./unictype/scripts_byname.gperf" + {"Sundanese", 66}, +#line 62 "./unictype/scripts_byname.gperf" + {"Shavian", 49}, +#line 32 "./unictype/scripts_byname.gperf" + {"Thai", 19}, +#line 83 "./unictype/scripts_byname.gperf" + {"Saurashtra", 70}, +#line 21 "./unictype/scripts_byname.gperf" + {"Thaana", 8}, +#line 23 "./unictype/scripts_byname.gperf" + {"Bengali", 10}, +#line 40 "./unictype/scripts_byname.gperf" + {"Canadian_Aboriginal", 27}, +#line 28 "./unictype/scripts_byname.gperf" + {"Telugu", 15}, +#line 65 "./unictype/scripts_byname.gperf" + {"Braille", 52}, +#line 71 "./unictype/scripts_byname.gperf" + {"Syloti_Nagri", 58}, +#line 67 "./unictype/scripts_byname.gperf" + {"Coptic", 54}, +#line 64 "./unictype/scripts_byname.gperf" + {"Cypriot", 51}, +#line 74 "./unictype/scripts_byname.gperf" + {"Balinese", 61}, +#line 13 "./unictype/scripts_byname.gperf" + {"Common", 0}, +#line 80 "./unictype/scripts_byname.gperf" + {"Lepcha", 67}, +#line 29 "./unictype/scripts_byname.gperf" + {"Kannada", 16}, +#line 58 "./unictype/scripts_byname.gperf" + {"Limbu", 45}, +#line 24 "./unictype/scripts_byname.gperf" + {"Gurmukhi", 11}, +#line 14 "./unictype/scripts_byname.gperf" + {"Latin", 1}, +#line 63 "./unictype/scripts_byname.gperf" + {"Osmanya", 50}, +#line 27 "./unictype/scripts_byname.gperf" + {"Tamil", 14}, +#line 73 "./unictype/scripts_byname.gperf" + {"Kharoshthi", 60}, +#line 69 "./unictype/scripts_byname.gperf" + {"Glagolitic", 56}, +#line 47 "./unictype/scripts_byname.gperf" + {"Bopomofo", 34}, +#line 54 "./unictype/scripts_byname.gperf" + {"Tagalog", 41}, +#line 57 "./unictype/scripts_byname.gperf" + {"Tagbanwa", 44}, +#line 88 "./unictype/scripts_byname.gperf" + {"Lydian", 75}, +#line 33 "./unictype/scripts_byname.gperf" + {"Lao", 20}, +#line 66 "./unictype/scripts_byname.gperf" + {"Buginese", 53}, +#line 44 "./unictype/scripts_byname.gperf" + {"Mongolian", 31}, +#line 35 "./unictype/scripts_byname.gperf" + {"Myanmar", 22}, +#line 50 "./unictype/scripts_byname.gperf" + {"Old_Italic", 37}, +#line 72 "./unictype/scripts_byname.gperf" + {"Old_Persian", 59}, +#line 43 "./unictype/scripts_byname.gperf" + {"Khmer", 30}, +#line 39 "./unictype/scripts_byname.gperf" + {"Cherokee", 26}, +#line 30 "./unictype/scripts_byname.gperf" + {"Malayalam", 17}, +#line 26 "./unictype/scripts_byname.gperf" + {"Oriya", 13}, +#line 51 "./unictype/scripts_byname.gperf" + {"Gothic", 38}, +#line 46 "./unictype/scripts_byname.gperf" + {"Katakana", 33}, +#line 41 "./unictype/scripts_byname.gperf" + {"Ogham", 28}, +#line 59 "./unictype/scripts_byname.gperf" + {"Tai_Le", 46}, +#line 25 "./unictype/scripts_byname.gperf" + {"Gujarati", 12}, +#line 18 "./unictype/scripts_byname.gperf" + {"Hebrew", 5}, +#line 42 "./unictype/scripts_byname.gperf" + {"Runic", 29}, +#line 77 "./unictype/scripts_byname.gperf" + {"Phags_Pa", 64}, +#line 56 "./unictype/scripts_byname.gperf" + {"Buhid", 43}, +#line 19 "./unictype/scripts_byname.gperf" + {"Arabic", 6}, +#line 84 "./unictype/scripts_byname.gperf" + {"Kayah_Li", 71}, +#line 78 "./unictype/scripts_byname.gperf" + {"Nko", 65}, +#line 68 "./unictype/scripts_byname.gperf" + {"New_Tai_Lue", 55}, +#line 36 "./unictype/scripts_byname.gperf" + {"Georgian", 23}, +#line 22 "./unictype/scripts_byname.gperf" + {"Devanagari", 9}, +#line 52 "./unictype/scripts_byname.gperf" + {"Deseret", 39}, +#line 15 "./unictype/scripts_byname.gperf" + {"Greek", 2}, +#line 34 "./unictype/scripts_byname.gperf" + {"Tibetan", 21}, +#line 70 "./unictype/scripts_byname.gperf" + {"Tifinagh", 57}, +#line 86 "./unictype/scripts_byname.gperf" + {"Lycian", 73}, +#line 81 "./unictype/scripts_byname.gperf" + {"Ol_Chiki", 68}, +#line 82 "./unictype/scripts_byname.gperf" + {"Vai", 69}, +#line 61 "./unictype/scripts_byname.gperf" + {"Ugaritic", 48}, +#line 53 "./unictype/scripts_byname.gperf" + {"Inherited", 40}, +#line 38 "./unictype/scripts_byname.gperf" + {"Ethiopic", 25}, + {""}, {""}, {""}, +#line 17 "./unictype/scripts_byname.gperf" + {"Armenian", 4}, + {""}, {""}, +#line 85 "./unictype/scripts_byname.gperf" + {"Rejang", 72}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 76 "./unictype/scripts_byname.gperf" + {"Phoenician", 63} + }; + +#ifdef __GNUC__ +__inline +#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct named_script * +uc_script_lookup (register const char *str, register unsigned int len) +{ + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = scripts_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + { + register const char *s = script_names[key].name; + + if (*str == *s && !strcmp (str + 1, s + 1)) + return &script_names[key]; + } + } + return 0; +} diff --git a/lib/unictype/sy_c_ident.c b/lib/unictype/sy_c_ident.c new file mode 100644 index 00000000..c6033c86 --- /dev/null +++ b/lib/unictype/sy_c_ident.c @@ -0,0 +1,31 @@ +/* Syntax properties of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "sy_c_ident.h" +#define TABLE u_c_ident +#include "identsyntaxmap.h" + +int +uc_c_ident_category (ucs4_t uc) +{ + return identsyntax_lookup (uc); +} diff --git a/lib/unictype/sy_c_ident.h b/lib/unictype/sy_c_ident.h new file mode 100644 index 00000000..74d96edb --- /dev/null +++ b/lib/unictype/sy_c_ident.h @@ -0,0 +1,140 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Language syntax properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define identsyntax_header_0 12 +#define identsyntax_header_1 14 +#define identsyntax_header_2 7 +#define identsyntax_header_3 31 +#define identsyntax_header_4 127 +static const +struct + { + int level1[14]; + short level2[9 << 5]; + unsigned short level3[39 * 16]; + } +u_c_ident = +{ + { + 0, 32, 64, 96, 128, 160, 160, 160, + 160, 192, 224, 160, 160, 256 + }, + { + 0, 128, 256, 384, 512, 640, 768, 896, + 1024, 1152, 1280, 1408, 1536, 1664, -1, -1, + -1, -1, 1792, 1920, 2048, 2176, 2304, 2432, + 2560, 2688, 2816, -1, 2944, 3072, 3200, 3328, + -1, 3456, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 256, 3584, 3712, 3840, + 3968, -1, 4096, 4224, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 4352, 4480, 4608, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 4736, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 4864, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x5555, 0xaaa5, + 0x0002, 0x0000, 0x0000, 0x2a80, 0x0002, 0x0000, 0x0000, 0xaa80, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaa8a, 0x22aa, 0xaa8a, + 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x000a, + 0x0000, 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa8, 0x0000, 0x0228, + 0xaaa0, 0xaaaa, 0xaaa0, 0xaaaa, 0xa800, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaa8a, + 0x8aaa, 0x0880, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, + 0x0000, 0x8000, 0x8000, 0x888a, 0x0008, 0x0000, 0xaa00, 0xaaaa, + 0x0002, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0002, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, + 0xaaa0, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2800, 0xa828, 0x0000, 0x0000, 0x0000, 0x0a00, 0xa000, 0xaaa0, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0002, 0x0000, + 0x0000, 0x0000, 0x8000, 0xaaa2, 0x0002, 0x0000, 0x0000, 0x0000, + 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x2020, + 0xaa82, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaa80, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0002, 0x0000, 0x0000, 0xaa80, + 0x0000, 0x0000, 0xaa80, 0xaaaa, 0x0000, 0xaaa0, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x800a, + 0x0000, 0x8000, 0x0000, 0xa800, 0x02aa, 0xa008, 0x0000, 0xaaa0, + 0x0202, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02a0, + 0x0000, 0xa000, 0xaa80, 0x0000, 0x0a00, 0x0000, 0xaaaa, 0xaaaa, + 0x0202, 0x2800, 0x0028, 0x0000, 0x0000, 0x0008, 0x0a88, 0x0aa0, + 0x2800, 0xa028, 0xaaaa, 0x20aa, 0x0a00, 0x0000, 0xaaa0, 0xaaaa, + 0x028a, 0x2a80, 0x0028, 0x0000, 0x0000, 0x0008, 0x8208, 0x0aa0, + 0x2a80, 0xa028, 0xaaaa, 0x8802, 0x0aaa, 0x0000, 0xa8aa, 0xaaaa, + 0x0202, 0x2200, 0x0020, 0x0000, 0x0000, 0x0008, 0x0208, 0x02a0, + 0x2000, 0xa020, 0xaaa8, 0xaaaa, 0x0aa8, 0x0000, 0xaaaa, 0xaaaa, + 0x0202, 0x2800, 0x0028, 0x0000, 0x0000, 0x0008, 0x0a08, 0x02a0, + 0x2a00, 0xa028, 0xaaaa, 0x20aa, 0x0aa0, 0x0000, 0xaaaa, 0xaaaa, + 0x020a, 0x0a80, 0xa008, 0x0882, 0xa82a, 0x0a80, 0x2000, 0x0aa0, + 0x0a80, 0xa008, 0xaaaa, 0xaaaa, 0x2aaa, 0x0000, 0xaaaa, 0xaaaa, + 0x0202, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0200, 0x0aa0, + 0x0800, 0xa008, 0xaaaa, 0xaaaa, 0x0aa0, 0x0000, 0xaaaa, 0xaaaa, + 0x020a, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0200, 0x0aa0, + 0x0800, 0xa008, 0xaaaa, 0x8aaa, 0x0aa0, 0x0000, 0xaaaa, 0xaaaa, + 0x020a, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0000, 0x0aa0, + 0x0a00, 0xa008, 0xaaaa, 0xaaaa, 0x0aa0, 0x0000, 0xaaaa, 0xaaaa, + 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, + 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x2882, 0xa288, 0x00aa, 0x0002, 0x2202, 0x820a, 0x0000, 0xa020, + 0x8800, 0xa000, 0x0000, 0xa0a0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaa8, 0xaaaa, 0xaaaa, 0xaaa0, 0x0000, 0x0000, 0x2200, 0x0aa2, + 0x0000, 0x0002, 0x0000, 0x0000, 0x0000, 0xaaa0, 0x0002, 0x0000, + 0x0800, 0xaa00, 0x2000, 0x0002, 0x0000, 0xa000, 0x0002, 0xaaa2, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, + 0xa000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0xaa00, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa0, + 0x0000, 0x0000, 0xa000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xa000, 0xa000, 0x0000, 0x2222, 0x0000, 0x0000, 0x0000, 0xa000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x8800, + 0x080a, 0xa800, 0x0a00, 0xaa00, 0x0000, 0xa800, 0x080a, 0xa800, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x2aaa, + 0xaaa8, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x2aaa, + 0x2a8a, 0x000a, 0xa200, 0xa000, 0x88aa, 0x0008, 0x0020, 0xaaa8, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, + 0xaa80, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x02aa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0002, 0xaaa0, 0xaaaa, 0xaaaa, + 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xaa00, 0xa82a, 0x0002, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0xa82a, + 0x02aa, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa + } +}; diff --git a/lib/unictype/sy_c_whitespace.c b/lib/unictype/sy_c_whitespace.c new file mode 100644 index 00000000..6d996a6f --- /dev/null +++ b/lib/unictype/sy_c_whitespace.c @@ -0,0 +1,27 @@ +/* Syntax properties of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +bool +uc_is_c_whitespace (ucs4_t uc) +{ + return (uc == ' ' || (uc <= 0x000D && uc >= 0x0009)); +} diff --git a/lib/unictype/sy_java_ident.c b/lib/unictype/sy_java_ident.c new file mode 100644 index 00000000..b0770d6e --- /dev/null +++ b/lib/unictype/sy_java_ident.c @@ -0,0 +1,31 @@ +/* Syntax properties of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +#include "sy_java_ident.h" +#define TABLE u_java_ident +#include "identsyntaxmap.h" + +int +uc_java_ident_category (ucs4_t uc) +{ + return identsyntax_lookup (uc); +} diff --git a/lib/unictype/sy_java_ident.h b/lib/unictype/sy_java_ident.h new file mode 100644 index 00000000..bad2b036 --- /dev/null +++ b/lib/unictype/sy_java_ident.h @@ -0,0 +1,343 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Language syntax properties of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ +#define identsyntax_header_0 12 +#define identsyntax_header_1 225 +#define identsyntax_header_2 7 +#define identsyntax_header_3 31 +#define identsyntax_header_4 127 +static const +struct + { + int level1[225]; + short level2[16 << 5]; + unsigned short level3[113 * 16]; + } +u_java_ident = +{ + { + 0, 32, 64, 96, 128, 160, 160, 160, + 160, 192, 224, 160, 160, 256, -1, 288, + 320, -1, 352, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 384, -1, -1, + 160, 160, 160, 160, 160, 160, 160, 160, + 160, 160, 416, -1, -1, -1, -1, 448, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 480 + }, + { + 0, 128, 256, 256, 256, 384, 512, 640, + 256, 768, 896, 1024, 1152, 1280, 1408, 1536, + -1, -1, 1664, 1792, 1920, 2048, 2176, 2304, + 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, + 3456, 3584, 3712, 3840, 3968, 4096, 4224, 4352, + 4480, 256, 256, 256, 4608, 4736, 4864, 4992, + 5120, 5248, 5376, 5504, 5632, -1, 5760, 5888, + 6016, -1, 256, 6144, 256, 256, 6272, 6400, + 6528, 6656, 6784, 6912, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 7040, 7168, 7296, 7424, 7552, -1, -1, -1, + 7680, 7808, 7936, 8064, -1, -1, -1, -1, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 8192, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 8320, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 8448, 256, 256, 8576, 8704, 8832, 8960, + 9088, 9216, 9344, -1, 9472, -1, -1, -1, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 9600, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 256, 256, 9728, 9856, 9984, 10112, + 256, 256, 10240, 10368, 10496, 10624, 10752, 10880, + 11008, 11136, 11264, 11392, -1, 11520, 11648, 11776, + 256, 11904, -1, -1, -1, -1, -1, -1, + 12032, -1, 12160, -1, 12288, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 256, 256, 256, 256, 256, 12416, -1, + 12544, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 12672, 12800, 12928, -1, -1, -1, + 13056, 13184, 13312, 256, 256, 13440, 13568, 13696, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 13824, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 256, 256, 256, 13952, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 14080, -1, 14208, 14336, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 0xffff, 0xfaab, 0xffff, 0xaaff, 0xa8aa, 0xaaaa, 0x5555, 0xaaa5, + 0x0002, 0x0000, 0x0000, 0x2a80, 0x0002, 0x0000, 0x0000, 0xea80, + 0xffff, 0xffff, 0xffff, 0xffff, 0xa00a, 0xae8a, 0xa2aa, 0xaa8a, + 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0aa0, 0x0000, 0xaaa0, 0xaaaa, 0xa800, 0x88aa, 0xaaaa, 0xaaaa, + 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, + 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x0800, 0xa00a, + 0x8aaa, 0x0880, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0x0000, + 0x5560, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, 0x0002, 0x0000, + 0x0000, 0x0000, 0x8000, 0xaaa2, 0x0002, 0x0000, 0x0000, 0x0000, + 0x0000, 0xaaaa, 0x5556, 0x5555, 0x5555, 0x5555, 0x5555, 0x6555, + 0x6596, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaa80, 0xaaaa, + 0xaaff, 0xaa2a, 0x5555, 0xaa95, 0x0002, 0x0000, 0x0000, 0x0000, + 0x0000, 0x5540, 0x5555, 0x9555, 0x5555, 0x0aa5, 0x0001, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x5200, 0x6d55, 0x4155, 0x0559, 0x5555, 0x2805, + 0xaaaa, 0xeaaa, 0x0004, 0x0000, 0x0000, 0x0000, 0x5555, 0x5555, + 0x5555, 0x0295, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x5000, 0x5555, 0xaaa1, 0xaaaa, + 0x5555, 0x0005, 0x0000, 0x0000, 0x0000, 0x5540, 0xa055, 0xaa8a, + 0x0056, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x51a0, + 0x5555, 0xa555, 0xa954, 0x0000, 0x5a50, 0x5555, 0xaa82, 0x002a, + 0x0256, 0x2800, 0x0028, 0x0000, 0x0000, 0x0008, 0x0a88, 0x51a0, + 0x6955, 0x8569, 0x6aaa, 0x20aa, 0x5a50, 0x5555, 0xaa00, 0xaaaa, + 0x0256, 0x2a80, 0x0028, 0x0000, 0x0000, 0x0008, 0x8208, 0x59a0, + 0x6a95, 0xa569, 0xaaa6, 0x8802, 0x5aaa, 0x5555, 0xa405, 0xaaaa, + 0x0256, 0x2000, 0x0020, 0x0000, 0x0000, 0x0008, 0x0208, 0x51a0, + 0x6555, 0xa565, 0xaaa8, 0xaaaa, 0x5a50, 0x5555, 0xaaa2, 0xaaaa, + 0x0256, 0x2800, 0x0028, 0x0000, 0x0000, 0x0008, 0x0208, 0x51a0, + 0x6955, 0xa569, 0x5aaa, 0x20aa, 0x5a50, 0x5555, 0xaaa2, 0xaaaa, + 0x021a, 0x0a80, 0xa008, 0x0882, 0xa82a, 0x0a80, 0x0000, 0x5aa0, + 0x5a95, 0xa559, 0x6aa8, 0xaaaa, 0x5aaa, 0x5555, 0xaaaa, 0xaaa2, + 0x0256, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0200, 0x52a0, + 0x5955, 0xa559, 0x96aa, 0xaaa0, 0x5a50, 0x5555, 0xaaaa, 0xaaaa, + 0x025a, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0200, 0x51a0, + 0x5955, 0xa559, 0x96aa, 0x8aaa, 0x5a50, 0x5555, 0xaaaa, 0xaaaa, + 0x025a, 0x0800, 0x0008, 0x0000, 0x0000, 0x0008, 0x0000, 0x52a0, + 0x5955, 0xa559, 0x6aaa, 0xaaaa, 0x5a50, 0x5555, 0xaaaa, 0x000a, + 0x025a, 0x0000, 0x8000, 0x000a, 0x0000, 0x0000, 0x0020, 0xa200, + 0x8000, 0x6a9a, 0x9955, 0x5555, 0xaaaa, 0xaaaa, 0xaa5a, 0xaaaa, + 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5504, 0x2a95, + 0x4000, 0x9555, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x2882, 0xa288, 0x00aa, 0x0002, 0x2202, 0x020a, 0x5504, 0xa165, + 0x8800, 0xa555, 0x5555, 0xa0a5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaa8, 0xaaaa, 0xaaaa, 0xaaa5, 0x5555, 0xaaa5, 0x66aa, 0x5aa6, + 0x0000, 0x0002, 0x0000, 0x0000, 0x0000, 0xa800, 0x5556, 0x5555, + 0x5955, 0xaa00, 0x5555, 0x5556, 0x5555, 0x5555, 0x5555, 0xa955, + 0x9aaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5540, 0x5555, 0x1555, + 0x5555, 0xaaa5, 0x5000, 0x5005, 0x4151, 0x0555, 0x0154, 0x0000, + 0x5550, 0x4555, 0x5555, 0xaaa5, 0x0000, 0x0000, 0x0000, 0x0000, + 0xa000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa880, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x2aa0, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa0, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xa008, 0x8000, 0xa008, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xa008, 0x0000, 0x0000, 0x0000, 0x0000, 0xa008, 0x8000, + 0xa008, 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xa008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x6a80, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0xaaaa, + 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2800, 0x8000, 0xaaaa, + 0x0002, 0x0000, 0x0000, 0xaa80, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0a80, 0xaaa8, 0xaaaa, + 0x0000, 0x0800, 0xa950, 0xaaaa, 0x0000, 0x0000, 0xa950, 0xaaaa, + 0x0000, 0x0000, 0xaa50, 0xaaaa, 0x0000, 0x0800, 0xaa58, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5f00, 0x5555, + 0x5555, 0x5555, 0x2a55, 0xa42a, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, + 0xaaaa, 0xa56a, 0x5555, 0xaaa5, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa84, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0xa800, 0x5555, 0xaa55, 0x5555, 0xaa55, + 0x5aaa, 0x5555, 0x0000, 0x0000, 0x0000, 0xa000, 0xa800, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa0, 0x5555, 0x5555, + 0x0001, 0xaaa5, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x4000, 0xaa55, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0155, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5500, 0x5555, + 0x0155, 0xaa00, 0x5555, 0xaaa5, 0xaaaa, 0x556a, 0xaa55, 0xaaaa, + 0x0015, 0x0000, 0x0000, 0x0000, 0x5554, 0x0a95, 0x5555, 0xaaa5, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x5500, 0x5555, 0x5555, 0xaaaa, + 0x5555, 0x02a5, 0x5555, 0x0005, 0x0000, 0x0000, 0x0000, 0xa000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x5555, 0x5555, 0x5555, 0x5555, 0x9555, 0xaaaa, 0xaaaa, 0x5aaa, + 0x0000, 0x0000, 0xa000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xa000, 0xa000, 0x0000, 0x2222, 0x0000, 0x0000, 0x0000, 0xa000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x8800, + 0x080a, 0xa800, 0x0a00, 0xaa00, 0x0000, 0xa800, 0x080a, 0xa800, + 0xaaaa, 0xffea, 0xaaaa, 0xaaaa, 0xaaaa, 0xbffa, 0xaaaa, 0x2aaa, + 0xaaa8, 0xaaaa, 0xa8aa, 0xaaaa, 0xabff, 0xfffa, 0xaaa2, 0x2aaa, + 0xaaaa, 0xaaaa, 0xa800, 0xaaaa, 0x0000, 0x0000, 0xa000, 0xaaaa, + 0xaaaa, 0xaaaa, 0x5555, 0xa955, 0x56a6, 0x5555, 0xaaa9, 0xaaaa, + 0x2a8a, 0x000a, 0xa200, 0xa002, 0x88aa, 0x2008, 0x0000, 0x00a0, + 0x02aa, 0x8aa0, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x0002, 0xa000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x2aaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x8000, 0xaaaa, 0x8000, 0x8000, 0x8000, 0x8000, + 0x8000, 0x8000, 0x8000, 0x8000, 0x5555, 0x5555, 0x5555, 0x5555, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x2aaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x02aa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0002, 0x5550, 0xa002, 0xa800, + 0x0002, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x8000, 0x0296, 0x0002, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, + 0x02aa, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x0002, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x8000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xaa00, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0xa800, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0xa800, 0x0000, 0x0000, 0x5555, 0xaa05, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x4000, 0xaaaa, 0x25aa, + 0x0000, 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0x2aaa, 0x0000, 0x000a, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xa828, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x002a, + 0x1010, 0x0040, 0x0000, 0x0000, 0x5540, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, + 0x0005, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5500, 0x5555, + 0xa955, 0xaaaa, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x5555, 0x0005, 0x0000, 0x0000, 0x5000, 0xa555, 0x0000, 0x0000, + 0x4000, 0x5555, 0xaa55, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5554, 0x9555, 0xaaaa, + 0x0040, 0xa500, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0xaa00, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xaaa0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x8000, 0xaaaa, 0x002a, 0x12aa, 0x0000, 0x0008, 0x8000, 0x8800, + 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaaa0, 0xaaaa, + 0xaaaa, 0xaaaa, 0x002a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, + 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x000a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x0000, 0xa800, + 0x5555, 0x5555, 0xaaaa, 0xaaaa, 0x9555, 0xaaaa, 0xa82a, 0xaaaa, + 0xaaaa, 0x02aa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaa2, 0x0800, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xe800, + 0xa8aa, 0xaaaa, 0x5555, 0xaaa5, 0x0002, 0x0000, 0x0000, 0x2a80, + 0x0002, 0x0000, 0x0000, 0xaa80, 0x0aaa, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, + 0x000a, 0x000a, 0x000a, 0xa80a, 0x82a0, 0xaaaa, 0xaaaa, 0xaafe, + 0x0000, 0x0200, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, 0x2080, + 0x0000, 0xa000, 0x0000, 0xa000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xa800, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xa6aa, + 0x0000, 0x0000, 0x0000, 0xa800, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xaaa8, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, + 0x0000, 0xaa80, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xaa00, 0x0000, 0xa002, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0xa000, 0x5555, 0xaaa5, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xa000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x2000, 0x28a8, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0xa000, 0xaaaa, 0x0000, 0x0000, 0x0000, 0xaaa0, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x9654, 0x55aa, 0x0200, 0x0002, 0x0000, 0x0000, 0xaa00, 0x6a95, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8000, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xaa80, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0x56aa, 0x56a5, 0xffd5, 0x557f, + 0x5695, 0xaa55, 0xaaaa, 0xaaaa, 0xaaaa, 0xa55a, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xa95a, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0800, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0800, 0x828a, 0x0802, 0x0000, 0x0220, + 0x0200, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x2000, 0x0280, 0x0800, 0x0800, 0x0000, 0x0000, 0x0000, 0x8020, + 0x8800, 0x000a, 0x0008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xa000, 0x0000, 0x0000, 0x0000, + 0x0008, 0x0000, 0x0000, 0x0080, 0x0000, 0x0000, 0x0000, 0x0080, + 0x0000, 0x0000, 0x0800, 0x0000, 0x0000, 0x0000, 0x0800, 0x0000, + 0x0000, 0x8000, 0x0000, 0x0000, 0x0000, 0x8000, 0x0000, 0x0000, + 0x0000, 0x0008, 0x0000, 0x0000, 0x0000, 0x0008, 0x0000, 0x0000, + 0x0080, 0x5a00, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x8000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0x0000, 0xa000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, + 0xaaae, 0xaaaa, 0xaaaa, 0xaaaa, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, + 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, + 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, + 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0xaaaa, 0xaaaa + } +}; diff --git a/lib/unictype/sy_java_whitespace.c b/lib/unictype/sy_java_whitespace.c new file mode 100644 index 00000000..4b56f3e3 --- /dev/null +++ b/lib/unictype/sy_java_whitespace.c @@ -0,0 +1,27 @@ +/* Syntax properties of Unicode characters. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unictype.h" + +bool +uc_is_java_whitespace (ucs4_t uc) +{ + return (uc == ' ' || (uc <= 0x000D && uc >= 0x0009 && uc != 0x000B)); +} diff --git a/lib/unilbrk.h b/lib/unilbrk.h new file mode 100644 index 00000000..1f5e2623 --- /dev/null +++ b/lib/unilbrk.h @@ -0,0 +1,110 @@ +/* Line breaking of Unicode strings. + Copyright (C) 2001-2003, 2005-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNILBRK_H +#define _UNILBRK_H + +/* Get size_t. */ +#include + +#include "unitypes.h" + +/* Get locale_charset() declaration. */ +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* These functions are locale dependent. The encoding argument identifies + the encoding (e.g. "ISO-8859-2" for Polish). */ + + +/* Line breaking. */ + +enum +{ + UC_BREAK_UNDEFINED, + UC_BREAK_PROHIBITED, + UC_BREAK_POSSIBLE, + UC_BREAK_MANDATORY, + UC_BREAK_HYPHENATION +}; + +/* Determine the line break points in S, and store the result at p[0..n-1]. + p[i] = UC_BREAK_MANDATORY means that s[i] is a line break character. + p[i] = UC_BREAK_POSSIBLE means that a line break may be inserted between + s[i-1] and s[i]. + p[i] = UC_BREAK_HYPHENATION means that a hyphen and a line break may be + inserted between s[i-1] and s[i]. But beware of language dependent + hyphenation rules. + p[i] = UC_BREAK_PROHIBITED means that s[i-1] and s[i] must not be separated. + */ +extern void + u8_possible_linebreaks (const uint8_t *s, size_t n, + const char *encoding, char *p); +extern void + u16_possible_linebreaks (const uint16_t *s, size_t n, + const char *encoding, char *p); +extern void + u32_possible_linebreaks (const uint32_t *s, size_t n, + const char *encoding, char *p); +extern void + ulc_possible_linebreaks (const char *s, size_t n, + const char *encoding, char *p); + +/* Choose the best line breaks, assuming the uc_width function. + The string is s[0..n-1]. The maximum number of columns per line is given + as WIDTH. The starting column of the string is given as START_COLUMN. + If the algorithm shall keep room after the last piece, they can be given + as AT_END_COLUMNS. + o is an optional override; if o[i] != UC_BREAK_UNDEFINED, o[i] takes + precedence over p[i] as returned by the *_possible_linebreaks function. + The given ENCODING is used for disambiguating widths in uc_width. + Return the column after the end of the string, and store the result at + p[0..n-1]. + */ +extern int + u8_width_linebreaks (const uint8_t *s, size_t n, int width, + int start_column, int at_end_columns, + const char *o, const char *encoding, + char *p); +extern int + u16_width_linebreaks (const uint16_t *s, size_t n, int width, + int start_column, int at_end_columns, + const char *o, const char *encoding, + char *p); +extern int + u32_width_linebreaks (const uint32_t *s, size_t n, int width, + int start_column, int at_end_columns, + const char *o, const char *encoding, + char *p); +extern int + ulc_width_linebreaks (const char *s, size_t n, int width, + int start_column, int at_end_columns, + const char *o, const char *encoding, + char *p); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _UNILBRK_H */ diff --git a/lib/unilbrk/lbrkprop1.h b/lib/unilbrk/lbrkprop1.h new file mode 100644 index 00000000..66fd5849 --- /dev/null +++ b/lib/unilbrk/lbrkprop1.h @@ -0,0 +1,33 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Line breaking properties of Unicode characters. */ +/* Generated automatically by gen-lbrk for Unicode 5.1.0. */ + +/* Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#define lbrkprop_header_0 16 +#define lbrkprop_header_1 15 +#define lbrkprop_header_2 7 +#define lbrkprop_header_3 511 +#define lbrkprop_header_4 127 + +typedef struct + { + int level1[15]; + int level2[4 << 9]; + unsigned char level3[142 << 7]; + } +lbrkprop_t; +extern const lbrkprop_t unilbrkprop; diff --git a/lib/unilbrk/lbrkprop2.h b/lib/unilbrk/lbrkprop2.h new file mode 100644 index 00000000..a71b4d9e --- /dev/null +++ b/lib/unilbrk/lbrkprop2.h @@ -0,0 +1,2558 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Line breaking properties of Unicode characters. */ +/* Generated automatically by gen-lbrk for Unicode 5.1.0. */ + +/* Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +const lbrkprop_t unilbrkprop = +{ + { + 0, 512, 1024, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1536 + }, + { + 0, 128, 256, 256, 256, 384, 512, 640, + 256, 768, 896, 1024, 1152, 1280, 1408, 1536, + -1, -1, 1664, 1792, 1920, 2048, 2176, 2304, + 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, + 3456, 3584, 3712, 3840, 3968, 4096, 4224, 4352, + 4480, 256, 256, 256, 4608, 4736, 4864, 4992, + 5120, 5248, 5376, 5504, 5632, -1, 5760, 5888, + 6016, -1, 256, 6144, 256, 256, 6272, 6400, + 6528, 6656, 6784, 6912, 7040, 7168, 7296, 7424, + 7552, 7680, 7808, 7936, 8064, 8192, 8320, 8448, + 256, 256, 256, 8576, 256, 256, 8704, -1, + 8832, 8960, 9088, 9216, 9344, 9472, 9600, 9728, + 9856, 9984, 10112, 10240, 10368, 10496, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 10624, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 10752, + 10880, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 11008, 256, 256, 11136, 11264, 256, 11392, + 11520, 11648, 11776, -1, 11904, -1, -1, -1, + 12032, 12160, 12288, 12416, 12544, 12672, 12800, 12032, + 12160, 12288, 12416, 12544, 12672, 12800, 12032, 12160, + 12288, 12416, 12544, 12672, 12800, 12032, 12160, 12288, + 12416, 12544, 12672, 12800, 12032, 12160, 12288, 12416, + 12544, 12672, 12800, 12032, 12160, 12288, 12416, 12544, + 12672, 12800, 12032, 12160, 12288, 12416, 12544, 12672, + 12800, 12032, 12160, 12288, 12416, 12544, 12672, 12800, + 12032, 12160, 12288, 12416, 12544, 12672, 12800, 12032, + 12160, 12288, 12416, 12544, 12672, 12800, 12032, 12160, + 12288, 12416, 12544, 12672, 12800, 12032, 12160, 12288, + 12416, 12544, 12672, 12800, 12032, 12160, 12288, 12928, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 9600, 9600, 13056, 13184, 13312, 13440, + 256, 256, 13568, 13696, 13824, 13952, 14080, 14208, + 14336, 14464, 14592, 14720, -1, 14848, 14976, 15104, + 256, 15232, -1, -1, -1, -1, -1, -1, + 15360, -1, 15488, -1, 15616, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 256, 256, 256, 256, 256, 15744, -1, + 15872, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 16000, 16128, 16256, 16384, -1, 16512, -1, + 16640, 16768, 16896, 256, 256, 17024, 256, 17152, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 17280, 17408, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 9600, 9600, 9600, + 9600, 9600, 9600, 9600, 9600, 17536, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 9600, 9600, 9600, 9600, 17664, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 17792, -1, 17920, 18048, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_BA, LBP_BK, LBP_BK, LBP_BK, LBP_BK, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_SP, LBP_EX, LBP_QU, LBP_AL, LBP_PR, LBP_PO, LBP_AL, LBP_QU, + LBP_OP, LBP_CL, LBP_AL, LBP_PR, LBP_IS, LBP_HY, LBP_IS, LBP_SY, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_IS, LBP_IS, LBP_AL, LBP_AL, LBP_AL, LBP_EX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_PR, LBP_CL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_BA, LBP_CL, LBP_AL, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BK, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_GL, LBP_OP, LBP_PO, LBP_PR, LBP_PR, LBP_PR, LBP_AL, LBP_AI, + LBP_AI, LBP_AL, LBP_AI, LBP_QU, LBP_AL, LBP_BA, LBP_AL, LBP_AL, + LBP_PO, LBP_PR, LBP_AI, LBP_AI, LBP_BB, LBP_AL, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_QU, LBP_AI, LBP_AI, LBP_AI, LBP_OP, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, + LBP_BB, LBP_AI, LBP_AI, LBP_AI, LBP_BB, LBP_AI, LBP_AL, LBP_AL, + LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_BB, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_GL, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_GL, LBP_GL, LBP_GL, LBP_GL, + LBP_GL, LBP_GL, LBP_GL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_IS, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_IS, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_CM, + LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_EX, LBP_CM, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_PO, LBP_PO, LBP_PO, LBP_IS, LBP_IS, LBP_AL, LBP_AL, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_EX, LBP_XX, LBP_XX, LBP_EX, LBP_EX, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_PO, LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, + LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_EX, LBP_AL, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_CM, + LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, + LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_IS, LBP_EX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, + LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_BA, LBP_BA, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, + LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, + LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_AL, LBP_AL, LBP_PR, LBP_PR, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, + LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, + LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, + LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, + LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, + LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_XX, LBP_PR, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, + LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_CM, + LBP_CM, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, + LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, + LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_PR, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, + LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_CM, LBP_AL, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, + LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, + LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_XX, LBP_PO, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_PR, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_AL, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_XX, LBP_SA, + LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_XX, LBP_SA, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX, LBP_SA, + LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_SA, LBP_XX, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_SA, LBP_SA, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_BB, LBP_BB, LBP_BB, LBP_BB, LBP_AL, LBP_BB, LBP_BB, + LBP_GL, LBP_BB, LBP_BB, LBP_BA, LBP_GL, LBP_EX, LBP_EX, LBP_EX, + LBP_EX, LBP_EX, LBP_GL, LBP_AL, LBP_EX, LBP_AL, LBP_AL, LBP_AL, + LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_CM, LBP_AL, LBP_CM, + LBP_AL, LBP_CM, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_CM, LBP_CM, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_CM, LBP_CM, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_BA, LBP_BA, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_BB, LBP_BB, LBP_BA, LBP_BB, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_BA, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, + LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, + LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, + LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, + LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, + LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, + LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, + LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, + LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, + LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, + LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, LBP_JL, + LBP_JL, LBP_JL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_JL, + LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, + LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, + LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, + LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, + LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, + LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, + LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, + LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, LBP_JV, + LBP_JV, LBP_JV, LBP_JV, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, + LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, + LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, + LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, + LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, + LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, + LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, + LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, + LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, + LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, LBP_JT, + LBP_JT, LBP_JT, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, + LBP_AL, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_BA, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_BA, LBP_BA, LBP_NS, LBP_SA, + LBP_BA, LBP_AL, LBP_BA, LBP_PR, LBP_SA, LBP_SA, LBP_XX, LBP_XX, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_EX, LBP_EX, LBP_BA, LBP_BA, LBP_BB, LBP_AL, + LBP_EX, LBP_EX, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_GL, LBP_XX, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_EX, LBP_EX, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, + LBP_SA, LBP_SA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_SA, LBP_SA, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, + LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_XX, LBP_XX, LBP_XX, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_BA, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BB, LBP_AL, LBP_XX, + LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_GL, + LBP_BA, LBP_BA, LBP_BA, LBP_ZW, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_BA, LBP_GL, LBP_BA, LBP_BA, LBP_B2, LBP_AI, LBP_AI, LBP_AL, + LBP_QU, LBP_QU, LBP_OP, LBP_QU, LBP_QU, LBP_QU, LBP_OP, LBP_QU, + LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_IN, LBP_IN, LBP_IN, LBP_BA, + LBP_BK, LBP_BK, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_GL, + LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, + LBP_AL, LBP_QU, LBP_QU, LBP_AI, LBP_NS, LBP_NS, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_IS, LBP_OP, LBP_CL, LBP_NS, + LBP_NS, LBP_NS, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_AL, + LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_BA, LBP_BA, LBP_BA, + LBP_WJ, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AI, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AI, + LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PO, + LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, + LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL, LBP_AI, LBP_AL, LBP_AL, + LBP_AL, LBP_PO, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_PR, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI, + LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI, + LBP_AL, LBP_AI, LBP_PR, LBP_PR, LBP_AL, LBP_AI, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, + LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL, + LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, + LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AL, + LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AI, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AI, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AI, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_XX, + LBP_XX, LBP_AL, LBP_EX, LBP_EX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, + LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, + LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, + LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, + LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, + LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, + LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_EX, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_EX, LBP_BA, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, + LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_QU, LBP_BA, LBP_BA, + LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_AL, LBP_BA, + LBP_OP, LBP_BA, LBP_AL, LBP_AL, LBP_QU, LBP_QU, LBP_AL, LBP_AL, + LBP_QU, LBP_QU, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, + LBP_OP, LBP_CL, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_EX, LBP_AL, + LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_CL, LBP_CL, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, + LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, + LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_OP, LBP_CL, + LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_NS, LBP_OP, LBP_CL, LBP_CL, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID, LBP_ID, LBP_ID, + LBP_XX, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, + LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_XX, + LBP_XX, LBP_CM, LBP_CM, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_ID, + LBP_NS, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, + LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_NS, LBP_ID, LBP_NS, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_ID, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, + LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, + LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_NS, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_EX, LBP_BA, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BB, LBP_BB, LBP_EX, LBP_EX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_BA, LBP_BA, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_BA, LBP_BA, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_AL, LBP_BA, LBP_BA, LBP_BA, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H2, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H2, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_H3, + LBP_H3, LBP_H3, LBP_H3, LBP_H3, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_CM, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_PO, LBP_AL, LBP_XX, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_IS, LBP_CL, LBP_CL, LBP_IS, LBP_IS, LBP_EX, LBP_EX, LBP_OP, + LBP_CL, LBP_IN, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_OP, + LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, + LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_OP, + LBP_CL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_CL, LBP_ID, LBP_CL, LBP_XX, LBP_NS, LBP_NS, LBP_EX, LBP_EX, + LBP_ID, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, + LBP_ID, LBP_PR, LBP_PO, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_WJ, + LBP_XX, LBP_EX, LBP_ID, LBP_ID, LBP_PR, LBP_PO, LBP_ID, LBP_ID, + LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_CL, LBP_ID, LBP_CL, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_EX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_ID, LBP_CL, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_ID, LBP_CL, LBP_ID, LBP_OP, + LBP_CL, LBP_CL, LBP_OP, LBP_CL, LBP_CL, LBP_NS, LBP_AL, LBP_NS, + LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, + LBP_NS, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_NS, LBP_NS, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_PO, LBP_PR, LBP_ID, LBP_ID, LBP_ID, LBP_PR, LBP_PR, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CB, LBP_AI, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_BA, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_BA, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, + LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_BA, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, + LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, + LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, + LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, + LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, + LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, + LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX + } +}; diff --git a/lib/unilbrk/lbrktables.c b/lib/unilbrk/lbrktables.c new file mode 100644 index 00000000..ae3ebf4f --- /dev/null +++ b/lib/unilbrk/lbrktables.c @@ -0,0 +1,63 @@ +/* Line breaking auxiliary tables. + Copyright (C) 2001-2003, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unilbrk/lbrktables.h" + +/* Define unilbrkprop, table of line breaking properties. */ +#include "unilbrk/lbrkprop2.h" + +const unsigned char unilbrk_table[24][24] = +{ + /* after */ + /* WJ GL B2 BA BB HY CL EX IN NS OP QU IS NU PO PR SY AL H2 H3 ID JL JV JT */ +/* WJ */ { P, I, I, I, I, I, P, P, I, I, I, I, P, I, I, I, P, I, I, I, I, I, I, I, }, +/* GL */ { P, I, I, I, I, I, P, P, I, I, I, I, P, I, I, I, P, I, I, I, I, I, I, I, }, +/* B2 */ { P, I, P, I, D, I, P, P, D, I, D, I, P, D, D, D, P, D, D, D, D, D, D, D, }, +/* BA */ { P, D, D, I, D, I, P, P, D, I, D, I, P, D, D, D, P, D, D, D, D, D, D, D, }, +/* BB */ { P, I, I, I, I, I, P, P, I, I, I, I, P, I, I, I, P, I, I, I, I, I, I, I, }, +/* HY */ { P, D, D, I, D, I, P, P, D, I, D, I, P, I, D, D, P, D, D, D, D, D, D, D, }, +/* CL */ { P, I, D, I, D, I, P, P, D, P, D, I, P, D, I, I, P, D, D, D, D, D, D, D, }, +/* EX */ { P, I, D, I, D, I, P, P, D, I, D, I, P, D, D, D, P, D, D, D, D, D, D, D, }, +/* IN */ { P, I, D, I, D, I, P, P, I, I, D, I, P, D, D, D, P, D, D, D, D, D, D, D, }, +/* NS */ { P, I, D, I, D, I, P, P, D, I, D, I, P, D, D, D, P, D, D, D, D, D, D, D, }, +/* OP */ { P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, P, }, +/* QU */ { P, I, I, I, I, I, P, P, I, I, P, I, P, I, I, I, P, I, I, I, I, I, I, I, }, +/* IS */ { P, I, D, I, D, I, P, P, D, I, D, I, P, I, D, D, P, D, D, D, D, D, D, D, }, +/* NU */ { P, I, D, I, D, I, P, P, I, I, D, I, P, I, I, I, P, I, D, D, D, D, D, D, }, +/* PO */ { P, I, D, I, D, I, P, P, D, I, I, I, P, I, D, D, P, I, D, D, D, D, D, D, }, +/* PR */ { P, I, D, I, D, I, P, P, D, I, I, I, P, I, D, D, P, I, I, I, I, I, I, I, }, +/* SY */ { P, I, D, I, D, I, P, P, D, I, D, I, P, I, D, D, P, D, D, D, D, D, D, D, }, +/* AL */ { P, I, D, I, D, I, P, P, I, I, D, I, P, I, D, D, P, I, D, D, D, D, D, D, }, +/* H2 */ { P, I, D, I, D, I, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, I, I, }, +/* H3 */ { P, I, D, I, D, I, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, D, I, }, +/* ID */ { P, I, D, I, D, I, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, D, D, }, +/* JL */ { P, I, D, I, D, I, P, P, I, I, D, I, P, D, I, D, P, D, I, I, D, I, I, D, }, +/* JV */ { P, I, D, I, D, I, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, I, I, }, +/* JT */ { P, I, D, I, D, I, P, P, I, I, D, I, P, D, I, D, P, D, D, D, D, D, D, I, }, +/* "" */ +/* before */ +}; +/* Note: The (IS,AL) entry has been changed from I to D. In other words, the + rule "Do not break between numeric punctuation and alphabetics" is not + implemented here. We want to break before the HTML tag in strings like + "

    Some sentence.

    " */ +/* Note: The (B2,B2) entry should probably be D instead of P. */ +/* Note: The (PR,ID) entry should probably be D instead of I. */ +/* Note: The (WJ,*) and (GL,*) entries should probably be P instead of I. */ diff --git a/lib/unilbrk/lbrktables.h b/lib/unilbrk/lbrktables.h new file mode 100644 index 00000000..33b525be --- /dev/null +++ b/lib/unilbrk/lbrktables.h @@ -0,0 +1,94 @@ +/* Line breaking auxiliary tables. + Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include "unitypes.h" + +/* Line breaking classification. */ + +enum +{ + /* Values >= 24 are resolved at run time. */ + LBP_BK = 24, /* mandatory break */ +/*LBP_CR, carriage return - not used here because it's a DOSism */ +/*LBP_LF, line feed - not used here because it's a DOSism */ + LBP_CM = 25, /* attached characters and combining marks */ +/*LBP_NL, next line - not used here because it's equivalent to LBP_BK */ +/*LBP_SG, surrogates - not used here because they are not characters */ + LBP_WJ = 0, /* word joiner */ + LBP_ZW = 26, /* zero width space */ + LBP_GL = 1, /* non-breaking (glue) */ + LBP_SP = 27, /* space */ + LBP_B2 = 2, /* break opportunity before and after */ + LBP_BA = 3, /* break opportunity after */ + LBP_BB = 4, /* break opportunity before */ + LBP_HY = 5, /* hyphen */ + LBP_CB = 28, /* contingent break opportunity */ + LBP_CL = 6, /* closing punctuation */ + LBP_EX = 7, /* exclamation/interrogation */ + LBP_IN = 8, /* inseparable */ + LBP_NS = 9, /* non starter */ + LBP_OP = 10, /* opening punctuation */ + LBP_QU = 11, /* ambiguous quotation */ + LBP_IS = 12, /* infix separator (numeric) */ + LBP_NU = 13, /* numeric */ + LBP_PO = 14, /* postfix (numeric) */ + LBP_PR = 15, /* prefix (numeric) */ + LBP_SY = 16, /* symbols allowing breaks */ + LBP_AI = 29, /* ambiguous (alphabetic or ideograph) */ + LBP_AL = 17, /* ordinary alphabetic and symbol characters */ + LBP_H2 = 18, /* Hangul LV syllable */ + LBP_H3 = 19, /* Hangul LVT syllable */ + LBP_ID = 20, /* ideographic */ + LBP_JL = 21, /* Hangul L Jamo */ + LBP_JV = 22, /* Hangul V Jamo */ + LBP_JT = 23, /* Hangul T Jamo */ + LBP_SA = 30, /* complex context (South East Asian) */ + LBP_XX = 31 /* unknown */ +}; + +#include "lbrkprop1.h" + +static inline unsigned char +unilbrkprop_lookup (ucs4_t uc) +{ + unsigned int index1 = uc >> lbrkprop_header_0; + if (index1 < lbrkprop_header_1) + { + int lookup1 = unilbrkprop.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> lbrkprop_header_2) & lbrkprop_header_3; + int lookup2 = unilbrkprop.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = uc & lbrkprop_header_4; + return unilbrkprop.level3[lookup2 + index3]; + } + } + } + return LBP_XX; +} + +/* Table indexed by two line breaking classifications. */ +#define D 1 /* direct break opportunity, empty in table 7.3 of UTR #14 */ +#define I 2 /* indirect break opportunity, '%' in table 7.3 of UTR #14 */ +#define P 3 /* prohibited break, '^' in table 7.3 of UTR #14 */ + +extern const unsigned char unilbrk_table[24][24]; + +/* We don't support line breaking of complex-context dependent characters + (Thai, Lao, Myanmar, Khmer) yet, because it requires dictionary lookup. */ diff --git a/lib/unilbrk/u16-possible-linebreaks.c b/lib/unilbrk/u16-possible-linebreaks.c new file mode 100644 index 00000000..f5b69921 --- /dev/null +++ b/lib/unilbrk/u16-possible-linebreaks.c @@ -0,0 +1,164 @@ +/* Line breaking of UTF-16 strings. + Copyright (C) 2001-2003, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unilbrk.h" + +#include +#include + +#include "unilbrk/lbrktables.h" +#include "uniwidth/cjk.h" +#include "unistr.h" + +void +u16_possible_linebreaks (const uint16_t *s, size_t n, const char *encoding, char *p) +{ + int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL); + const uint16_t *s_end = s + n; + int last_prop = LBP_BK; /* line break property of last non-space character */ + char *seen_space = NULL; /* Was a space seen after the last non-space character? */ + char *seen_space2 = NULL; /* At least two spaces after the last non-space? */ + + /* Don't break inside multibyte characters. */ + memset (p, UC_BREAK_PROHIBITED, n); + + while (s < s_end) + { + ucs4_t uc; + int count = u16_mbtouc_unsafe (&uc, s, s_end - s); + int prop = unilbrkprop_lookup (uc); + + if (prop == LBP_BK) + { + /* Mandatory break. */ + *p = UC_BREAK_MANDATORY; + last_prop = LBP_BK; + seen_space = NULL; + seen_space2 = NULL; + } + else + { + char *q; + + /* Resolve property values whose behaviour is not fixed. */ + switch (prop) + { + case LBP_AI: + /* Resolve ambiguous. */ + prop = LBP_AI_REPLACEMENT; + break; + case LBP_CB: + /* This is arbitrary. */ + prop = LBP_ID; + break; + case LBP_SA: + /* We don't handle complex scripts yet. + Treat LBP_SA like LBP_XX. */ + case LBP_XX: + /* This is arbitrary. */ + prop = LBP_AL; + break; + } + + /* Deal with spaces and combining characters. */ + q = p; + if (prop == LBP_SP) + { + /* Don't break just before a space. */ + *p = UC_BREAK_PROHIBITED; + seen_space2 = seen_space; + seen_space = p; + } + else if (prop == LBP_ZW) + { + /* Don't break just before a zero-width space. */ + *p = UC_BREAK_PROHIBITED; + last_prop = LBP_ZW; + seen_space = NULL; + seen_space2 = NULL; + } + else if (prop == LBP_CM) + { + /* Don't break just before a combining character, except immediately after a + zero-width space. */ + if (last_prop == LBP_ZW) + { + /* Break after zero-width space. */ + *p = UC_BREAK_POSSIBLE; + /* A combining character turns a preceding space into LBP_ID. */ + last_prop = LBP_ID; + } + else + { + *p = UC_BREAK_PROHIBITED; + /* A combining character turns a preceding space into LBP_ID. */ + if (seen_space != NULL) + { + q = seen_space; + seen_space = seen_space2; + prop = LBP_ID; + goto lookup_via_table; + } + } + } + else + { + lookup_via_table: + /* prop must be usable as an index for table 7.3 of UTR #14. */ + if (!(prop >= 0 && prop < sizeof (unilbrk_table) / sizeof (unilbrk_table[0]))) + abort (); + + if (last_prop == LBP_BK) + { + /* Don't break at the beginning of a line. */ + *q = UC_BREAK_PROHIBITED; + } + else if (last_prop == LBP_ZW) + { + /* Break after zero-width space. */ + *q = UC_BREAK_POSSIBLE; + } + else + { + switch (unilbrk_table [last_prop] [prop]) + { + case D: + *q = UC_BREAK_POSSIBLE; + break; + case I: + *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED); + break; + case P: + *q = UC_BREAK_PROHIBITED; + break; + default: + abort (); + } + } + last_prop = prop; + seen_space = NULL; + seen_space2 = NULL; + } + } + + s += count; + p += count; + } +} diff --git a/lib/unilbrk/u16-width-linebreaks.c b/lib/unilbrk/u16-width-linebreaks.c new file mode 100644 index 00000000..64445590 --- /dev/null +++ b/lib/unilbrk/u16-width-linebreaks.c @@ -0,0 +1,108 @@ +/* Line breaking of UTF-16 strings. + Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unilbrk.h" + +#include "unistr.h" +#include "uniwidth.h" + +int +u16_width_linebreaks (const uint16_t *s, size_t n, + int width, int start_column, int at_end_columns, + const char *o, const char *encoding, + char *p) +{ + const uint16_t *s_end; + char *last_p; + int last_column; + int piece_width; + + u16_possible_linebreaks (s, n, encoding, p); + + s_end = s + n; + last_p = NULL; + last_column = start_column; + piece_width = 0; + while (s < s_end) + { + ucs4_t uc; + int count = u16_mbtouc_unsafe (&uc, s, s_end - s); + + /* Respect the override. */ + if (o != NULL && *o != UC_BREAK_UNDEFINED) + *p = *o; + + if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY) + { + /* An atomic piece of text ends here. */ + if (last_p != NULL && last_column + piece_width > width) + { + /* Insert a line break. */ + *last_p = UC_BREAK_POSSIBLE; + last_column = 0; + } + } + + if (*p == UC_BREAK_MANDATORY) + { + /* uc is a line break character. */ + /* Start a new piece at column 0. */ + last_p = NULL; + last_column = 0; + piece_width = 0; + } + else + { + /* uc is not a line break character. */ + int w; + + if (*p == UC_BREAK_POSSIBLE) + { + /* Start a new piece. */ + last_p = p; + last_column += piece_width; + piece_width = 0; + /* No line break for the moment, may be turned into + UC_BREAK_POSSIBLE later, via last_p. */ + } + + *p = UC_BREAK_PROHIBITED; + + w = uc_width (uc, encoding); + if (w >= 0) /* ignore control characters in the string */ + piece_width += w; + } + + s += count; + p += count; + if (o != NULL) + o += count; + } + + /* The last atomic piece of text ends here. */ + if (last_p != NULL && last_column + piece_width + at_end_columns > width) + { + /* Insert a line break. */ + *last_p = UC_BREAK_POSSIBLE; + last_column = 0; + } + + return last_column + piece_width; +} diff --git a/lib/unilbrk/u32-possible-linebreaks.c b/lib/unilbrk/u32-possible-linebreaks.c new file mode 100644 index 00000000..c843e12b --- /dev/null +++ b/lib/unilbrk/u32-possible-linebreaks.c @@ -0,0 +1,158 @@ +/* Line breaking of UTF-32 strings. + Copyright (C) 2001-2003, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unilbrk.h" + +#include + +#include "unilbrk/lbrktables.h" +#include "uniwidth/cjk.h" + +void +u32_possible_linebreaks (const uint32_t *s, size_t n, const char *encoding, char *p) +{ + int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL); + const uint32_t *s_end = s + n; + int last_prop = LBP_BK; /* line break property of last non-space character */ + char *seen_space = NULL; /* Was a space seen after the last non-space character? */ + char *seen_space2 = NULL; /* At least two spaces after the last non-space? */ + + while (s < s_end) + { + ucs4_t uc = *s; + int prop = unilbrkprop_lookup (uc); + + if (prop == LBP_BK) + { + /* Mandatory break. */ + *p = UC_BREAK_MANDATORY; + last_prop = LBP_BK; + seen_space = NULL; + seen_space2 = NULL; + } + else + { + char *q; + + /* Resolve property values whose behaviour is not fixed. */ + switch (prop) + { + case LBP_AI: + /* Resolve ambiguous. */ + prop = LBP_AI_REPLACEMENT; + break; + case LBP_CB: + /* This is arbitrary. */ + prop = LBP_ID; + break; + case LBP_SA: + /* We don't handle complex scripts yet. + Treat LBP_SA like LBP_XX. */ + case LBP_XX: + /* This is arbitrary. */ + prop = LBP_AL; + break; + } + + /* Deal with spaces and combining characters. */ + q = p; + if (prop == LBP_SP) + { + /* Don't break just before a space. */ + *p = UC_BREAK_PROHIBITED; + seen_space2 = seen_space; + seen_space = p; + } + else if (prop == LBP_ZW) + { + /* Don't break just before a zero-width space. */ + *p = UC_BREAK_PROHIBITED; + last_prop = LBP_ZW; + seen_space = NULL; + seen_space2 = NULL; + } + else if (prop == LBP_CM) + { + /* Don't break just before a combining character, except immediately after a + zero-width space. */ + if (last_prop == LBP_ZW) + { + /* Break after zero-width space. */ + *p = UC_BREAK_POSSIBLE; + /* A combining character turns a preceding space into LBP_ID. */ + last_prop = LBP_ID; + } + else + { + *p = UC_BREAK_PROHIBITED; + /* A combining character turns a preceding space into LBP_ID. */ + if (seen_space != NULL) + { + q = seen_space; + seen_space = seen_space2; + prop = LBP_ID; + goto lookup_via_table; + } + } + } + else + { + lookup_via_table: + /* prop must be usable as an index for table 7.3 of UTR #14. */ + if (!(prop >= 0 && prop < sizeof (unilbrk_table) / sizeof (unilbrk_table[0]))) + abort (); + + if (last_prop == LBP_BK) + { + /* Don't break at the beginning of a line. */ + *q = UC_BREAK_PROHIBITED; + } + else if (last_prop == LBP_ZW) + { + /* Break after zero-width space. */ + *q = UC_BREAK_POSSIBLE; + } + else + { + switch (unilbrk_table [last_prop] [prop]) + { + case D: + *q = UC_BREAK_POSSIBLE; + break; + case I: + *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED); + break; + case P: + *q = UC_BREAK_PROHIBITED; + break; + default: + abort (); + } + } + last_prop = prop; + seen_space = NULL; + seen_space2 = NULL; + } + } + + s++; + p++; + } +} diff --git a/lib/unilbrk/u32-width-linebreaks.c b/lib/unilbrk/u32-width-linebreaks.c new file mode 100644 index 00000000..2d362560 --- /dev/null +++ b/lib/unilbrk/u32-width-linebreaks.c @@ -0,0 +1,106 @@ +/* Line breaking of UTF-32 strings. + Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unilbrk.h" + +#include "uniwidth.h" + +int +u32_width_linebreaks (const uint32_t *s, size_t n, + int width, int start_column, int at_end_columns, + const char *o, const char *encoding, + char *p) +{ + const uint32_t *s_end; + char *last_p; + int last_column; + int piece_width; + + u32_possible_linebreaks (s, n, encoding, p); + + s_end = s + n; + last_p = NULL; + last_column = start_column; + piece_width = 0; + while (s < s_end) + { + ucs4_t uc = *s; + + /* Respect the override. */ + if (o != NULL && *o != UC_BREAK_UNDEFINED) + *p = *o; + + if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY) + { + /* An atomic piece of text ends here. */ + if (last_p != NULL && last_column + piece_width > width) + { + /* Insert a line break. */ + *last_p = UC_BREAK_POSSIBLE; + last_column = 0; + } + } + + if (*p == UC_BREAK_MANDATORY) + { + /* uc is a line break character. */ + /* Start a new piece at column 0. */ + last_p = NULL; + last_column = 0; + piece_width = 0; + } + else + { + /* uc is not a line break character. */ + int w; + + if (*p == UC_BREAK_POSSIBLE) + { + /* Start a new piece. */ + last_p = p; + last_column += piece_width; + piece_width = 0; + /* No line break for the moment, may be turned into + UC_BREAK_POSSIBLE later, via last_p. */ + } + + *p = UC_BREAK_PROHIBITED; + + w = uc_width (uc, encoding); + if (w >= 0) /* ignore control characters in the string */ + piece_width += w; + } + + s++; + p++; + if (o != NULL) + o++; + } + + /* The last atomic piece of text ends here. */ + if (last_p != NULL && last_column + piece_width + at_end_columns > width) + { + /* Insert a line break. */ + *last_p = UC_BREAK_POSSIBLE; + last_column = 0; + } + + return last_column + piece_width; +} diff --git a/lib/unilbrk/u8-possible-linebreaks.c b/lib/unilbrk/u8-possible-linebreaks.c new file mode 100644 index 00000000..94e14f40 --- /dev/null +++ b/lib/unilbrk/u8-possible-linebreaks.c @@ -0,0 +1,261 @@ +/* Line breaking of UTF-8 strings. + Copyright (C) 2001-2003, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unilbrk.h" + +#include +#include + +#include "unilbrk/lbrktables.h" +#include "uniwidth/cjk.h" +#include "unistr.h" + +void +u8_possible_linebreaks (const uint8_t *s, size_t n, const char *encoding, char *p) +{ + int LBP_AI_REPLACEMENT = (is_cjk_encoding (encoding) ? LBP_ID : LBP_AL); + const uint8_t *s_end = s + n; + int last_prop = LBP_BK; /* line break property of last non-space character */ + char *seen_space = NULL; /* Was a space seen after the last non-space character? */ + char *seen_space2 = NULL; /* At least two spaces after the last non-space? */ + + /* Don't break inside multibyte characters. */ + memset (p, UC_BREAK_PROHIBITED, n); + + while (s < s_end) + { + ucs4_t uc; + int count = u8_mbtouc_unsafe (&uc, s, s_end - s); + int prop = unilbrkprop_lookup (uc); + + if (prop == LBP_BK) + { + /* Mandatory break. */ + *p = UC_BREAK_MANDATORY; + last_prop = LBP_BK; + seen_space = NULL; + seen_space2 = NULL; + } + else + { + char *q; + + /* Resolve property values whose behaviour is not fixed. */ + switch (prop) + { + case LBP_AI: + /* Resolve ambiguous. */ + prop = LBP_AI_REPLACEMENT; + break; + case LBP_CB: + /* This is arbitrary. */ + prop = LBP_ID; + break; + case LBP_SA: + /* We don't handle complex scripts yet. + Treat LBP_SA like LBP_XX. */ + case LBP_XX: + /* This is arbitrary. */ + prop = LBP_AL; + break; + } + + /* Deal with spaces and combining characters. */ + q = p; + if (prop == LBP_SP) + { + /* Don't break just before a space. */ + *p = UC_BREAK_PROHIBITED; + seen_space2 = seen_space; + seen_space = p; + } + else if (prop == LBP_ZW) + { + /* Don't break just before a zero-width space. */ + *p = UC_BREAK_PROHIBITED; + last_prop = LBP_ZW; + seen_space = NULL; + seen_space2 = NULL; + } + else if (prop == LBP_CM) + { + /* Don't break just before a combining character, except immediately after a + zero-width space. */ + if (last_prop == LBP_ZW) + { + /* Break after zero-width space. */ + *p = UC_BREAK_POSSIBLE; + /* A combining character turns a preceding space into LBP_ID. */ + last_prop = LBP_ID; + } + else + { + *p = UC_BREAK_PROHIBITED; + /* A combining character turns a preceding space into LBP_ID. */ + if (seen_space != NULL) + { + q = seen_space; + seen_space = seen_space2; + prop = LBP_ID; + goto lookup_via_table; + } + } + } + else + { + lookup_via_table: + /* prop must be usable as an index for table 7.3 of UTR #14. */ + if (!(prop >= 0 && prop < sizeof (unilbrk_table) / sizeof (unilbrk_table[0]))) + abort (); + + if (last_prop == LBP_BK) + { + /* Don't break at the beginning of a line. */ + *q = UC_BREAK_PROHIBITED; + } + else if (last_prop == LBP_ZW) + { + /* Break after zero-width space. */ + *q = UC_BREAK_POSSIBLE; + } + else + { + switch (unilbrk_table [last_prop] [prop]) + { + case D: + *q = UC_BREAK_POSSIBLE; + break; + case I: + *q = (seen_space != NULL ? UC_BREAK_POSSIBLE : UC_BREAK_PROHIBITED); + break; + case P: + *q = UC_BREAK_PROHIBITED; + break; + default: + abort (); + } + } + last_prop = prop; + seen_space = NULL; + seen_space2 = NULL; + } + } + + s += count; + p += count; + } +} + + +#ifdef TEST + +#include +#include + +/* Read the contents of an input stream, and return it, terminated with a NUL + byte. */ +char * +read_file (FILE *stream) +{ +#define BUFSIZE 4096 + char *buf = NULL; + int alloc = 0; + int size = 0; + int count; + + while (! feof (stream)) + { + if (size + BUFSIZE > alloc) + { + alloc = alloc + alloc / 2; + if (alloc < size + BUFSIZE) + alloc = size + BUFSIZE; + buf = realloc (buf, alloc); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + } + count = fread (buf + size, 1, BUFSIZE, stream); + if (count == 0) + { + if (ferror (stream)) + { + perror ("fread"); + exit (1); + } + } + else + size += count; + } + buf = realloc (buf, size + 1); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + buf[size] = '\0'; + return buf; +#undef BUFSIZE +} + +int +main (int argc, char * argv[]) +{ + if (argc == 1) + { + /* Display all the break opportunities in the input string. */ + char *input = read_file (stdin); + int length = strlen (input); + char *breaks = malloc (length); + int i; + + u8_possible_linebreaks ((uint8_t *) input, length, "UTF-8", breaks); + + for (i = 0; i < length; i++) + { + switch (breaks[i]) + { + case UC_BREAK_POSSIBLE: + /* U+2027 in UTF-8 encoding */ + putc (0xe2, stdout); putc (0x80, stdout); putc (0xa7, stdout); + break; + case UC_BREAK_MANDATORY: + /* U+21B2 (or U+21B5) in UTF-8 encoding */ + putc (0xe2, stdout); putc (0x86, stdout); putc (0xb2, stdout); + break; + case UC_BREAK_PROHIBITED: + break; + default: + abort (); + } + putc (input[i], stdout); + } + + free (breaks); + + return 0; + } + else + return 1; +} + +#endif /* TEST */ diff --git a/lib/unilbrk/u8-width-linebreaks.c b/lib/unilbrk/u8-width-linebreaks.c new file mode 100644 index 00000000..7e7f2e97 --- /dev/null +++ b/lib/unilbrk/u8-width-linebreaks.c @@ -0,0 +1,204 @@ +/* Line breaking of UTF-8 strings. + Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unilbrk.h" + +#include "unistr.h" +#include "uniwidth.h" + +int +u8_width_linebreaks (const uint8_t *s, size_t n, + int width, int start_column, int at_end_columns, + const char *o, const char *encoding, + char *p) +{ + const uint8_t *s_end; + char *last_p; + int last_column; + int piece_width; + + u8_possible_linebreaks (s, n, encoding, p); + + s_end = s + n; + last_p = NULL; + last_column = start_column; + piece_width = 0; + while (s < s_end) + { + ucs4_t uc; + int count = u8_mbtouc_unsafe (&uc, s, s_end - s); + + /* Respect the override. */ + if (o != NULL && *o != UC_BREAK_UNDEFINED) + *p = *o; + + if (*p == UC_BREAK_POSSIBLE || *p == UC_BREAK_MANDATORY) + { + /* An atomic piece of text ends here. */ + if (last_p != NULL && last_column + piece_width > width) + { + /* Insert a line break. */ + *last_p = UC_BREAK_POSSIBLE; + last_column = 0; + } + } + + if (*p == UC_BREAK_MANDATORY) + { + /* uc is a line break character. */ + /* Start a new piece at column 0. */ + last_p = NULL; + last_column = 0; + piece_width = 0; + } + else + { + /* uc is not a line break character. */ + int w; + + if (*p == UC_BREAK_POSSIBLE) + { + /* Start a new piece. */ + last_p = p; + last_column += piece_width; + piece_width = 0; + /* No line break for the moment, may be turned into + UC_BREAK_POSSIBLE later, via last_p. */ + } + + *p = UC_BREAK_PROHIBITED; + + w = uc_width (uc, encoding); + if (w >= 0) /* ignore control characters in the string */ + piece_width += w; + } + + s += count; + p += count; + if (o != NULL) + o += count; + } + + /* The last atomic piece of text ends here. */ + if (last_p != NULL && last_column + piece_width + at_end_columns > width) + { + /* Insert a line break. */ + *last_p = UC_BREAK_POSSIBLE; + last_column = 0; + } + + return last_column + piece_width; +} + + +#ifdef TEST + +#include +#include +#include + +/* Read the contents of an input stream, and return it, terminated with a NUL + byte. */ +char * +read_file (FILE *stream) +{ +#define BUFSIZE 4096 + char *buf = NULL; + int alloc = 0; + int size = 0; + int count; + + while (! feof (stream)) + { + if (size + BUFSIZE > alloc) + { + alloc = alloc + alloc / 2; + if (alloc < size + BUFSIZE) + alloc = size + BUFSIZE; + buf = realloc (buf, alloc); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + } + count = fread (buf + size, 1, BUFSIZE, stream); + if (count == 0) + { + if (ferror (stream)) + { + perror ("fread"); + exit (1); + } + } + else + size += count; + } + buf = realloc (buf, size + 1); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + buf[size] = '\0'; + return buf; +#undef BUFSIZE +} + +int +main (int argc, char * argv[]) +{ + if (argc == 2) + { + /* Insert line breaks for a given width. */ + int width = atoi (argv[1]); + char *input = read_file (stdin); + int length = strlen (input); + char *breaks = malloc (length); + int i; + + u8_width_linebreaks ((uint8_t *) input, length, width, 0, 0, NULL, "UTF-8", breaks); + + for (i = 0; i < length; i++) + { + switch (breaks[i]) + { + case UC_BREAK_POSSIBLE: + putc ('\n', stdout); + break; + case UC_BREAK_MANDATORY: + break; + case UC_BREAK_PROHIBITED: + break; + default: + abort (); + } + putc (input[i], stdout); + } + + free (breaks); + + return 0; + } + else + return 1; +} + +#endif /* TEST */ diff --git a/lib/unilbrk/ulc-common.c b/lib/unilbrk/ulc-common.c new file mode 100644 index 00000000..d035ded7 --- /dev/null +++ b/lib/unilbrk/ulc-common.c @@ -0,0 +1,51 @@ +/* Line breaking auxiliary functions. + Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unilbrk/ulc-common.h" + +#include "c-ctype.h" +#include "c-strcaseeq.h" + +int +is_utf8_encoding (const char *encoding) +{ + if (STRCASEEQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) + return 1; + return 0; +} + +#if C_CTYPE_ASCII + +/* Tests whether a string is entirely ASCII. Returns 1 if yes. + Returns 0 if the string is in an 8-bit encoding or an ISO-2022 encoding. */ +int +is_all_ascii (const char *s, size_t n) +{ + for (; n > 0; s++, n--) + { + unsigned char c = (unsigned char) *s; + + if (!(c_isprint (c) || c_isspace (c))) + return 0; + } + return 1; +} + +#endif /* C_CTYPE_ASCII */ diff --git a/lib/unilbrk/ulc-common.h b/lib/unilbrk/ulc-common.h new file mode 100644 index 00000000..3b481887 --- /dev/null +++ b/lib/unilbrk/ulc-common.h @@ -0,0 +1,31 @@ +/* Line breaking auxiliary functions. + Copyright (C) 2001-2003, 2006-2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Get size_t. */ +#include + +#include "c-ctype.h" + +#define is_utf8_encoding unilbrk_is_utf8_encoding +extern int is_utf8_encoding (const char *encoding); + +#if C_CTYPE_ASCII + +# define is_all_ascii unilbrk_is_all_ascii +extern int is_all_ascii (const char *s, size_t n); + +#endif /* C_CTYPE_ASCII */ diff --git a/lib/unilbrk/ulc-possible-linebreaks.c b/lib/unilbrk/ulc-possible-linebreaks.c new file mode 100644 index 00000000..cb952419 --- /dev/null +++ b/lib/unilbrk/ulc-possible-linebreaks.c @@ -0,0 +1,212 @@ +/* Line breaking of strings. + Copyright (C) 2001-2003, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unilbrk.h" + +#include +#include + +#include "c-ctype.h" +#include "uniconv.h" +#include "unilbrk/ulc-common.h" + +/* Line breaking of a string in an arbitrary encoding. + + We convert the input string to Unicode. + + The standardized Unicode encodings are UTF-8, UCS-2, UCS-4, UTF-16, + UTF-16BE, UTF-16LE, UTF-7. UCS-2 supports only characters up to + \U0000FFFF. UTF-16 and variants support only characters up to + \U0010FFFF. UTF-7 is way too complex and not supported by glibc-2.1. + UCS-4 specification leaves doubts about endianness and byte order mark. + glibc currently interprets it as big endian without byte order mark, + but this is not backed by an RFC. So we use UTF-8. It supports + characters up to \U7FFFFFFF and is unambiguously defined. */ + +void +ulc_possible_linebreaks (const char *s, size_t n, const char *encoding, + char *p) +{ + if (n > 0) + { + if (is_utf8_encoding (encoding)) + u8_possible_linebreaks ((const uint8_t *) s, n, encoding, p); + else + { + /* Convert the string to UTF-8 and build a translation table + from offsets into s to offsets into the translated string. */ + size_t *offsets = (size_t *) malloc (n * sizeof (size_t)); + + if (offsets != NULL) + { + uint8_t *t; + size_t m; + + t = u8_conv_from_encoding (encoding, iconveh_question_mark, + s, n, offsets, NULL, &m); + if (t != NULL) + { + char *q = (char *) (m > 0 ? malloc (m) : NULL); + + if (m == 0 || q != NULL) + { + size_t i; + + /* Determine the possible line breaks of the UTF-8 + string. */ + u8_possible_linebreaks (t, m, encoding, q); + + /* Translate the result back to the original string. */ + memset (p, UC_BREAK_PROHIBITED, n); + for (i = 0; i < n; i++) + if (offsets[i] != (size_t)(-1)) + p[i] = q[offsets[i]]; + + free (q); + free (t); + free (offsets); + return; + } + free (t); + } + free (offsets); + } + + /* Impossible to convert. */ +#if C_CTYPE_ASCII + if (is_all_ascii (s, n)) + { + /* ASCII is a subset of UTF-8. */ + u8_possible_linebreaks ((const uint8_t *) s, n, encoding, p); + return; + } +#endif + /* We have a non-ASCII string and cannot convert it. + Don't produce line breaks except those already present in the + input string. All we assume here is that the encoding is + minimally ASCII compatible. */ + { + const char *s_end = s + n; + while (s < s_end) + { + *p = (*s == '\n' ? UC_BREAK_MANDATORY : UC_BREAK_PROHIBITED); + s++; + p++; + } + } + } + } +} + + +#ifdef TEST + +#include +#include +#include + +/* Read the contents of an input stream, and return it, terminated with a NUL + byte. */ +char * +read_file (FILE *stream) +{ +#define BUFSIZE 4096 + char *buf = NULL; + int alloc = 0; + int size = 0; + int count; + + while (! feof (stream)) + { + if (size + BUFSIZE > alloc) + { + alloc = alloc + alloc / 2; + if (alloc < size + BUFSIZE) + alloc = size + BUFSIZE; + buf = realloc (buf, alloc); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + } + count = fread (buf + size, 1, BUFSIZE, stream); + if (count == 0) + { + if (ferror (stream)) + { + perror ("fread"); + exit (1); + } + } + else + size += count; + } + buf = realloc (buf, size + 1); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + buf[size] = '\0'; + return buf; +#undef BUFSIZE +} + +int +main (int argc, char * argv[]) +{ + setlocale (LC_CTYPE, ""); + if (argc == 1) + { + /* Display all the break opportunities in the input string. */ + char *input = read_file (stdin); + int length = strlen (input); + char *breaks = malloc (length); + int i; + + ulc_possible_linebreaks (input, length, locale_charset (), breaks); + + for (i = 0; i < length; i++) + { + switch (breaks[i]) + { + case UC_BREAK_POSSIBLE: + putc ('|', stdout); + break; + case UC_BREAK_MANDATORY: + break; + case UC_BREAK_PROHIBITED: + break; + default: + abort (); + } + putc (input[i], stdout); + } + + free (breaks); + + return 0; + } + else + return 1; +} + +#endif /* TEST */ diff --git a/lib/unilbrk/ulc-width-linebreaks.c b/lib/unilbrk/ulc-width-linebreaks.c new file mode 100644 index 00000000..3b091bf2 --- /dev/null +++ b/lib/unilbrk/ulc-width-linebreaks.c @@ -0,0 +1,231 @@ +/* Line breaking of strings. + Copyright (C) 2001-2003, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unilbrk.h" + +#include +#include + +#include "c-ctype.h" +#include "uniconv.h" +#include "unilbrk/ulc-common.h" + +/* Line breaking of a string in an arbitrary encoding. + + We convert the input string to Unicode. + + The standardized Unicode encodings are UTF-8, UCS-2, UCS-4, UTF-16, + UTF-16BE, UTF-16LE, UTF-7. UCS-2 supports only characters up to + \U0000FFFF. UTF-16 and variants support only characters up to + \U0010FFFF. UTF-7 is way too complex and not supported by glibc-2.1. + UCS-4 specification leaves doubts about endianness and byte order mark. + glibc currently interprets it as big endian without byte order mark, + but this is not backed by an RFC. So we use UTF-8. It supports + characters up to \U7FFFFFFF and is unambiguously defined. */ + +int +ulc_width_linebreaks (const char *s, size_t n, + int width, int start_column, int at_end_columns, + const char *o, const char *encoding, + char *p) +{ + if (n > 0) + { + if (is_utf8_encoding (encoding)) + return u8_width_linebreaks ((const uint8_t *) s, n, width, start_column, at_end_columns, o, encoding, p); + else + { + /* Convert the string to UTF-8 and build a translation table + from offsets into s to offsets into the translated string. */ + size_t *offsets = (size_t *) malloc (n * sizeof (size_t)); + + if (offsets != NULL) + { + uint8_t *t; + size_t m; + + t = u8_conv_from_encoding (encoding, iconveh_question_mark, + s, n, offsets, NULL, &m); + if (t != NULL) + { + char *memory = + (char *) (m > 0 ? malloc (m + (o != NULL ? m : 0)) : NULL); + + if (m == 0 || memory != NULL) + { + char *q = (char *) memory; + char *o8 = (o != NULL ? (char *) (q + m) : NULL); + int res_column; + size_t i; + + /* Translate the overrides to the UTF-8 string. */ + if (o != NULL) + { + memset (o8, UC_BREAK_UNDEFINED, m); + for (i = 0; i < n; i++) + if (offsets[i] != (size_t)(-1)) + o8[offsets[i]] = o[i]; + } + + /* Determine the line breaks of the UTF-8 string. */ + res_column = + u8_width_linebreaks (t, m, width, start_column, at_end_columns, o8, encoding, q); + + /* Translate the result back to the original string. */ + memset (p, UC_BREAK_PROHIBITED, n); + for (i = 0; i < n; i++) + if (offsets[i] != (size_t)(-1)) + p[i] = q[offsets[i]]; + + free (memory); + free (t); + free (offsets); + return res_column; + } + free (t); + } + free (offsets); + } + /* Impossible to convert. */ +#if C_CTYPE_ASCII + if (is_all_ascii (s, n)) + { + /* ASCII is a subset of UTF-8. */ + return u8_width_linebreaks ((const uint8_t *) s, n, width, start_column, at_end_columns, o, encoding, p); + } +#endif + /* We have a non-ASCII string and cannot convert it. + Don't produce line breaks except those already present in the + input string. All we assume here is that the encoding is + minimally ASCII compatible. */ + { + const char *s_end = s + n; + while (s < s_end) + { + *p = ((o != NULL && *o == UC_BREAK_MANDATORY) || *s == '\n' + ? UC_BREAK_MANDATORY + : UC_BREAK_PROHIBITED); + s++; + p++; + if (o != NULL) + o++; + } + /* We cannot compute widths in this case. */ + } + } + } + return start_column; +} + + +#ifdef TEST + +#include +#include + +/* Read the contents of an input stream, and return it, terminated with a NUL + byte. */ +char * +read_file (FILE *stream) +{ +#define BUFSIZE 4096 + char *buf = NULL; + int alloc = 0; + int size = 0; + int count; + + while (! feof (stream)) + { + if (size + BUFSIZE > alloc) + { + alloc = alloc + alloc / 2; + if (alloc < size + BUFSIZE) + alloc = size + BUFSIZE; + buf = realloc (buf, alloc); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + } + count = fread (buf + size, 1, BUFSIZE, stream); + if (count == 0) + { + if (ferror (stream)) + { + perror ("fread"); + exit (1); + } + } + else + size += count; + } + buf = realloc (buf, size + 1); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + buf[size] = '\0'; + return buf; +#undef BUFSIZE +} + +int +main (int argc, char * argv[]) +{ + setlocale (LC_CTYPE, ""); + if (argc == 2) + { + /* Insert line breaks for a given width. */ + int width = atoi (argv[1]); + char *input = read_file (stdin); + int length = strlen (input); + char *breaks = malloc (length); + int i; + + ulc_width_linebreaks (input, length, width, 0, 0, NULL, locale_charset (), breaks); + + for (i = 0; i < length; i++) + { + switch (breaks[i]) + { + case UC_BREAK_POSSIBLE: + putc ('\n', stdout); + break; + case UC_BREAK_MANDATORY: + break; + case UC_BREAK_PROHIBITED: + break; + default: + abort (); + } + putc (input[i], stdout); + } + + free (breaks); + + return 0; + } + else + return 1; +} + +#endif /* TEST */ diff --git a/lib/uniname.h b/lib/uniname.h new file mode 100644 index 00000000..7b5a367d --- /dev/null +++ b/lib/uniname.h @@ -0,0 +1,44 @@ +/* Association between Unicode characters and their names. + Copyright (C) 2000-2002, 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNINAME_H +#define _UNINAME_H + +#include "unitypes.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* Required size of buffer for a Unicode character name. */ +#define UNINAME_MAX 256 + +/* Looks up the name of a Unicode character, in uppercase ASCII. + Returns the filled buf, or NULL if the character does not have a name. */ +extern char * + unicode_character_name (ucs4_t uc, char *buf); + +/* Looks up the Unicode character with a given name, in upper- or lowercase + ASCII. Returns the character if found, or UNINAME_INVALID if not found. */ +extern ucs4_t + unicode_name_character (const char *name); +#define UNINAME_INVALID ((ucs4_t) 0xFFFF) + +#ifdef __cplusplus +} +#endif + +#endif /* _UNINAME_H */ diff --git a/lib/uniname/gen-uninames.lisp b/lib/uniname/gen-uninames.lisp new file mode 100755 index 00000000..d08e93f0 --- /dev/null +++ b/lib/uniname/gen-uninames.lisp @@ -0,0 +1,301 @@ +#!/usr/local/bin/clisp -C + +;;; Creation of gnulib's uninames.h from the UnicodeData.txt table. +;;; Bruno Haible 2000-12-28 + +(defparameter add-comments nil) + +(defstruct unicode-char + (code nil :type integer) + (name nil :type string) + word-indices + word-indices-index +) + +(defstruct word-list + (hashed nil :type hash-table) + (sorted nil :type list) + size ; number of characters total + length ; number of words +) + +(defun main (inputfile outputfile) + (declare (type string inputfile outputfile)) + #+UNICODE (setq *default-file-encoding* charset:utf-8) + (let ((all-chars '())) + ;; Read all characters and names from the input file. + (with-open-file (istream inputfile :direction :input) + (loop + (let ((line (read-line istream nil nil))) + (unless line (return)) + (let* ((i1 (position #\; line)) + (i2 (position #\; line :start (1+ i1))) + (code-string (subseq line 0 i1)) + (code (parse-integer code-string :radix 16)) + (name-string (subseq line (1+ i1) i2))) + ; Ignore characters whose name starts with "<". + (unless (eql (char name-string 0) #\<) + ; Also ignore Hangul syllables; they are treated specially. + (unless (<= #xAC00 code #xD7A3) + ; Also ignore CJK compatibility ideographs; they are treated + ; specially as well. + (unless (or (<= #xF900 code #xFA2D) (<= #xFA30 code #xFA6A) + (<= #xFA70 code #xFAD9) (<= #x2F800 code #x2FA1D)) + ; Transform the code so that it fits in 16 bits. In + ; Unicode 5.1 the following ranges are used. + ; 0x00000..0x04DFF >>12= 0x00..0x04 -> 0x0..0x4 + ; 0x0A000..0x0AAFF >>12= 0x0A -> 0x5 + ; 0x0F900..0x0FFFF >>12= 0x0F -> 0x6 + ; 0x10000..0x10A58 >>12= 0x10 -> 0x7 + ; 0x12000..0x12473 >>12= 0x12 -> 0x8 + ; 0x1D000..0x1D7FF >>12= 0x1D -> 0x9 + ; 0x1F000..0x1F093 >>12= 0x1F -> 0xA + ; 0x2F800..0x2FAFF >>12= 0x2F -> 0xB + ; 0xE0000..0xE00FF >>12= 0xE0 -> 0xC + (flet ((transform (x) + (dpb + (case (ash x -12) + ((#x00 #x01 #x02 #x03 #x04) (ash x -12)) + (#x0A 5) + (#x0F 6) + (#x10 7) + (#x12 8) + (#x1D 9) + (#x1F #xA) + (#x2F #xB) + (#xE0 #xC) + (t (error "Update the transform function for 0x~5,'0X" x)) + ) + (byte 8 12) + x + )) ) + (push (make-unicode-char :code (transform code) + :name name-string) + all-chars + ) ) ) ) ) + ) ) ) ) + (setq all-chars (nreverse all-chars)) + ;; Split into words. + (let ((words-by-length (make-array 0 :adjustable t))) + (dolist (name (list* "HANGUL SYLLABLE" "CJK COMPATIBILITY" (mapcar #'unicode-char-name all-chars))) + (let ((i1 0)) + (loop + (when (>= i1 (length name)) (return)) + (let ((i2 (or (position #\Space name :start i1) (length name)))) + (let* ((word (subseq name i1 i2)) + (len (length word))) + (when (>= len (length words-by-length)) + (adjust-array words-by-length (1+ len)) + ) + (unless (aref words-by-length len) + (setf (aref words-by-length len) + (make-word-list + :hashed (make-hash-table :test #'equal) + :sorted '() + ) ) ) + (let ((word-list (aref words-by-length len))) + (unless (gethash word (word-list-hashed word-list)) + (setf (gethash word (word-list-hashed word-list)) t) + (push word (word-list-sorted word-list)) + ) ) + ) + (setq i1 (1+ i2)) + ) ) ) ) + ;; Sort the word lists. + (dotimes (len (length words-by-length)) + (unless (aref words-by-length len) + (setf (aref words-by-length len) + (make-word-list + :hashed (make-hash-table :test #'equal) + :sorted '() + ) ) ) + (let ((word-list (aref words-by-length len))) + (setf (word-list-sorted word-list) + (sort (word-list-sorted word-list) #'string<) + ) + (setf (word-list-size word-list) + (reduce #'+ (mapcar #'length (word-list-sorted word-list))) + ) + (setf (word-list-length word-list) + (length (word-list-sorted word-list)) + ) ) ) + ;; Output the tables. + (with-open-file (ostream outputfile :direction :output + #+UNICODE :external-format #+UNICODE charset:ascii) + (format ostream "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */~%") + (format ostream "/*~%") + (format ostream " * ~A~%" (file-namestring outputfile)) + (format ostream " *~%") + (format ostream " * Unicode character name table.~%") + (format ostream " * Generated automatically by the gen-uninames utility.~%") + (format ostream " */~%") + (format ostream "~%") + (format ostream "static const char unicode_name_words[~D] = {~%" + (let ((sum 0)) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (incf sum (word-list-size word-list)) + ) ) + sum + ) ) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (dolist (word (word-list-sorted word-list)) + (format ostream " ~{ '~C',~}~%" (coerce word 'list)) + ) ) ) + (format ostream "};~%") + (format ostream "#define UNICODE_CHARNAME_NUM_WORDS ~D~%" + (let ((sum 0)) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (incf sum (word-list-length word-list)) + ) ) + sum + ) ) + #| ; Redundant data + (format ostream "static const uint16_t unicode_name_word_offsets[~D] = {~%" + (let ((sum 0)) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (incf sum (word-list-length word-list)) + ) ) + sum + ) ) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (when (word-list-sorted word-list) + (format ostream " ") + (do ((l (word-list-sorted word-list) (cdr l)) + (offset 0 (+ offset (length (car l))))) + ((endp l)) + (format ostream "~<~% ~0,79:; ~D,~>" offset) + ) + (format ostream "~%") + ) ) ) + (format ostream "};~%") + |# + (format ostream "static const struct { uint16_t extra_offset; uint16_t ind_offset; } unicode_name_by_length[~D] = {~%" + (1+ (length words-by-length)) + ) + (let ((extra-offset 0) + (ind-offset 0)) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (format ostream " { ~D, ~D },~%" extra-offset ind-offset) + (incf extra-offset (word-list-size word-list)) + (incf ind-offset (word-list-length word-list)) + ) ) + (format ostream " { ~D, ~D }~%" extra-offset ind-offset) + ) + (format ostream "};~%") + (let ((ind-offset 0)) + (dotimes (len (length words-by-length)) + (let ((word-list (aref words-by-length len))) + (dolist (word (word-list-sorted word-list)) + (setf (gethash word (word-list-hashed word-list)) ind-offset) + (incf ind-offset) + ) ) ) ) + (dolist (word '("HANGUL" "SYLLABLE" "CJK" "COMPATIBILITY")) + (format ostream "#define UNICODE_CHARNAME_WORD_~A ~D~%" word + (gethash word (word-list-hashed (aref words-by-length (length word)))) + ) ) + ;; Compute the word-indices for every unicode-char. + (dolist (uc all-chars) + (let ((name (unicode-char-name uc)) + (indices '())) + (let ((i1 0)) + (loop + (when (>= i1 (length name)) (return)) + (let ((i2 (or (position #\Space name :start i1) (length name)))) + (let* ((word (subseq name i1 i2)) + (len (length word))) + (push (gethash word (word-list-hashed (aref words-by-length len))) + indices + ) + ) + (setq i1 (1+ i2)) + ) ) ) + (setf (unicode-char-word-indices uc) + (coerce (nreverse indices) 'vector) + ) + ) ) + ;; Sort the list of unicode-chars by word-indices. + (setq all-chars + (sort all-chars + (lambda (vec1 vec2) + (let ((len1 (length vec1)) + (len2 (length vec2))) + (do ((i 0 (1+ i))) + (nil) + (if (< i len2) + (if (< i len1) + (cond ((< (aref vec1 i) (aref vec2 i)) (return t)) + ((> (aref vec1 i) (aref vec2 i)) (return nil)) + ) + (return t) + ) + (return nil) + ) ) ) ) + :key #'unicode-char-word-indices + ) ) + ;; Output the word-indices. + (format ostream "static const uint16_t unicode_names[~D] = {~%" + (reduce #'+ (mapcar (lambda (uc) (length (unicode-char-word-indices uc))) all-chars)) + ) + (let ((i 0)) + (dolist (uc all-chars) + (format ostream " ~{ ~D,~}" + (maplist (lambda (r) (+ (* 2 (car r)) (if (cdr r) 1 0))) + (coerce (unicode-char-word-indices uc) 'list) + ) + ) + (when add-comments + (format ostream "~40T/* ~A */" (unicode-char-name uc)) + ) + (format ostream "~%") + (setf (unicode-char-word-indices-index uc) i) + (incf i (length (unicode-char-word-indices uc))) + ) ) + (format ostream "};~%") + (format ostream "static const struct { uint16_t code; uint32_t name:24; }~%") + (format ostream "#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)~%__attribute__((__packed__))~%#endif~%") + (format ostream "unicode_name_to_code[~D] = {~%" + (length all-chars) + ) + (dolist (uc all-chars) + (format ostream " { 0x~4,'0X, ~D }," + (unicode-char-code uc) + (unicode-char-word-indices-index uc) + ) + (when add-comments + (format ostream "~21T/* ~A */" (unicode-char-name uc)) + ) + (format ostream "~%") + ) + (format ostream "};~%") + (format ostream "static const struct { uint16_t code; uint32_t name:24; }~%") + (format ostream "#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)~%__attribute__((__packed__))~%#endif~%") + (format ostream "unicode_code_to_name[~D] = {~%" + (length all-chars) + ) + (dolist (uc (sort (copy-list all-chars) #'< :key #'unicode-char-code)) + (format ostream " { 0x~4,'0X, ~D }," + (unicode-char-code uc) + (unicode-char-word-indices-index uc) + ) + (when add-comments + (format ostream "~21T/* ~A */" (unicode-char-name uc)) + ) + (format ostream "~%") + ) + (format ostream "};~%") + (format ostream "#define UNICODE_CHARNAME_MAX_LENGTH ~D~%" + (reduce #'max (mapcar (lambda (uc) (length (unicode-char-name uc))) all-chars)) + ) + (format ostream "#define UNICODE_CHARNAME_MAX_WORDS ~D~%" + (reduce #'max (mapcar (lambda (uc) (length (unicode-char-word-indices uc))) all-chars)) + ) + ) +) ) ) + +(main (first *args*) (second *args*)) diff --git a/lib/uniname/uniname.c b/lib/uniname/uniname.c new file mode 100644 index 00000000..bef58af3 --- /dev/null +++ b/lib/uniname/uniname.c @@ -0,0 +1,516 @@ +/* Association between Unicode characters and their names. + Copyright (C) 2000-2002, 2005-2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniname.h" + +#include +#include +#include +#include +#include + +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + + +/* Table of Unicode character names, derived from UnicodeData.txt. + This table is generated in a way to minimize the memory footprint: + 1. its compiled size is small (less than 350 KB), + 2. it resides entirely in the text or read-only data segment of the + executable or shared library: the table contains only immediate + integers, no pointers, and the functions don't do heap allocation. + */ +#include "uninames.h" +/* It contains: + static const char unicode_name_words[36303] = ...; + #define UNICODE_CHARNAME_NUM_WORDS 6260 + static const struct { uint16_t extra_offset; uint16_t ind_offset; } unicode_name_by_length[26] = ...; + #define UNICODE_CHARNAME_WORD_HANGUL 3902 + #define UNICODE_CHARNAME_WORD_SYLLABLE 4978 + #define UNICODE_CHARNAME_WORD_CJK 417 + #define UNICODE_CHARNAME_WORD_COMPATIBILITY 6107 + static const uint16_t unicode_names[68940] = ...; + static const struct { uint16_t code; uint32_t name:24; } unicode_name_to_code[16626] = ...; + static const struct { uint16_t code; uint32_t name:24; } unicode_code_to_name[16626] = ...; + #define UNICODE_CHARNAME_MAX_LENGTH 83 + #define UNICODE_CHARNAME_MAX_WORDS 13 +*/ + +/* Returns the word with a given index. */ +static const char * +unicode_name_word (unsigned int index, unsigned int *lengthp) +{ + unsigned int i1; + unsigned int i2; + unsigned int i; + + assert (index < UNICODE_CHARNAME_NUM_WORDS); + + /* Binary search for i with + unicode_name_by_length[i].ind_offset <= index + and + index < unicode_name_by_length[i+1].ind_offset + */ + + i1 = 0; + i2 = SIZEOF (unicode_name_by_length) - 1; + while (i2 - i1 > 1) + { + unsigned int i = (i1 + i2) >> 1; + if (unicode_name_by_length[i].ind_offset <= index) + i1 = i; + else + i2 = i; + } + i = i1; + assert (unicode_name_by_length[i].ind_offset <= index + && index < unicode_name_by_length[i+1].ind_offset); + *lengthp = i; + return &unicode_name_words[unicode_name_by_length[i].extra_offset + + (index-unicode_name_by_length[i].ind_offset)*i]; +} + +/* Looks up the index of a word. */ +static int +unicode_name_word_lookup (const char *word, unsigned int length) +{ + if (length > 0 && length < SIZEOF (unicode_name_by_length) - 1) + { + /* Binary search among the words of given length. */ + unsigned int extra_offset = unicode_name_by_length[length].extra_offset; + unsigned int i0 = unicode_name_by_length[length].ind_offset; + unsigned int i1 = i0; + unsigned int i2 = unicode_name_by_length[length+1].ind_offset; + while (i2 - i1 > 0) + { + unsigned int i = (i1 + i2) >> 1; + const char *p = &unicode_name_words[extra_offset + (i-i0)*length]; + const char *w = word; + unsigned int n = length; + for (;;) + { + if (*p < *w) + { + if (i1 == i) + return -1; + /* Note here: i1 < i < i2. */ + i1 = i; + break; + } + if (*p > *w) + { + /* Note here: i1 <= i < i2. */ + i2 = i; + break; + } + p++; w++; n--; + if (n == 0) + return i; + } + } + } + return -1; +} + +/* Auxiliary tables for Hangul syllable names, see the Unicode 3.0 book, + sections 3.11 and 4.4. */ +static const char jamo_initial_short_name[19][3] = +{ + "G", "GG", "N", "D", "DD", "R", "M", "B", "BB", "S", "SS", "", "J", "JJ", + "C", "K", "T", "P", "H" +}; +static const char jamo_medial_short_name[21][4] = +{ + "A", "AE", "YA", "YAE", "EO", "E", "YEO", "YE", "O", "WA", "WAE", "OE", "YO", + "U", "WEO", "WE", "WI", "YU", "EU", "YI", "I" +}; +static const char jamo_final_short_name[28][3] = +{ + "", "G", "GG", "GS", "N", "NI", "NH", "D", "L", "LG", "LM", "LB", "LS", "LT", + "LP", "LH", "M", "B", "BS", "S", "SS", "NG", "J", "C", "K", "T", "P", "H" +}; + +/* Looks up the name of a Unicode character, in uppercase ASCII. + Returns the filled buf, or NULL if the character does not have a name. */ +char * +unicode_character_name (ucs4_t c, char *buf) +{ + if (c >= 0xAC00 && c <= 0xD7A3) + { + /* Special case for Hangul syllables. Keeps the tables small. */ + char *ptr; + unsigned int tmp; + unsigned int index1; + unsigned int index2; + unsigned int index3; + const char *q; + + /* buf needs to have at least 16 + 7 bytes here. */ + memcpy (buf, "HANGUL SYLLABLE ", 16); + ptr = buf + 16; + + tmp = c - 0xAC00; + index3 = tmp % 28; tmp = tmp / 28; + index2 = tmp % 21; tmp = tmp / 21; + index1 = tmp; + + q = jamo_initial_short_name[index1]; + while (*q != '\0') + *ptr++ = *q++; + q = jamo_medial_short_name[index2]; + while (*q != '\0') + *ptr++ = *q++; + q = jamo_final_short_name[index3]; + while (*q != '\0') + *ptr++ = *q++; + *ptr = '\0'; + return buf; + } + else if ((c >= 0xF900 && c <= 0xFA2D) || (c >= 0xFA30 && c <= 0xFA6A) + || (c >= 0xFA70 && c <= 0xFAD9) || (c >= 0x2F800 && c <= 0x2FA1D)) + { + /* Special case for CJK compatibility ideographs. Keeps the tables + small. */ + char *ptr; + int i; + + /* buf needs to have at least 28 + 5 bytes here. */ + memcpy (buf, "CJK COMPATIBILITY IDEOGRAPH-", 28); + ptr = buf + 28; + + for (i = (c < 0x10000 ? 12 : 16); i >= 0; i -= 4) + { + unsigned int x = (c >> i) & 0xf; + *ptr++ = (x < 10 ? '0' : 'A' - 10) + x; + } + *ptr = '\0'; + return buf; + } + else + { + const uint16_t *words; + + /* Transform the code so that it fits in 16 bits. */ + switch (c >> 12) + { + case 0x00: case 0x01: case 0x02: case 0x03: case 0x04: + break; + case 0x0A: + c -= 0x05000; + break; + case 0x0F: + c -= 0x09000; + break; + case 0x10: + c -= 0x09000; + break; + case 0x12: + c -= 0x0A000; + break; + case 0x1D: + c -= 0x14000; + break; + case 0x1F: + c -= 0x15000; + break; + case 0x2F: + c -= 0x24000; + break; + case 0xE0: + c -= 0xD4000; + break; + default: + return NULL; + } + + { + /* Binary search in unicode_code_to_name. */ + unsigned int i1 = 0; + unsigned int i2 = SIZEOF (unicode_code_to_name); + for (;;) + { + unsigned int i = (i1 + i2) >> 1; + if (unicode_code_to_name[i].code == c) + { + words = &unicode_names[unicode_code_to_name[i].name]; + break; + } + else if (unicode_code_to_name[i].code < c) + { + if (i1 == i) + { + words = NULL; + break; + } + /* Note here: i1 < i < i2. */ + i1 = i; + } + else if (unicode_code_to_name[i].code > c) + { + if (i2 == i) + { + words = NULL; + break; + } + /* Note here: i1 <= i < i2. */ + i2 = i; + } + } + } + if (words != NULL) + { + /* Found it in unicode_code_to_name. Now concatenate the words. */ + /* buf needs to have at least UNICODE_CHARNAME_MAX_LENGTH bytes. */ + char *ptr = buf; + for (;;) + { + unsigned int wordlen; + const char *word = unicode_name_word (*words>>1, &wordlen); + do + *ptr++ = *word++; + while (--wordlen > 0); + if ((*words & 1) == 0) + break; + *ptr++ = ' '; + words++; + } + *ptr = '\0'; + return buf; + } + return NULL; + } +} + +/* Looks up the Unicode character with a given name, in upper- or lowercase + ASCII. Returns the character if found, or UNINAME_INVALID if not found. */ +ucs4_t +unicode_name_character (const char *name) +{ + unsigned int len = strlen (name); + if (len > 1 && len <= UNICODE_CHARNAME_MAX_LENGTH) + { + /* Test for "word1 word2 ..." syntax. */ + char buf[UNICODE_CHARNAME_MAX_LENGTH]; + char *ptr = buf; + for (;;) + { + char c = *name++; + if (!(c >= ' ' && c <= '~')) + break; + *ptr++ = (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c); + if (--len == 0) + goto filled_buf; + } + if (false) + filled_buf: + { + /* Convert the constituents to uint16_t words. */ + uint16_t words[UNICODE_CHARNAME_MAX_WORDS]; + uint16_t *wordptr = words; + { + const char *p1 = buf; + for (;;) + { + { + int word; + const char *p2 = p1; + while (p2 < ptr && *p2 != ' ') + p2++; + word = unicode_name_word_lookup (p1, p2 - p1); + if (word < 0) + break; + if (wordptr == &words[UNICODE_CHARNAME_MAX_WORDS]) + break; + *wordptr++ = word; + if (p2 == ptr) + goto filled_words; + p1 = p2 + 1; + } + /* Special case for Hangul syllables. Keeps the tables small. */ + if (wordptr == &words[2] + && words[0] == UNICODE_CHARNAME_WORD_HANGUL + && words[1] == UNICODE_CHARNAME_WORD_SYLLABLE) + { + /* Split the last word [p1..ptr) into three parts: + 1) [BCDGHJKMNPRST] + 2) [AEIOUWY] + 3) [BCDGHIJKLMNPST] + */ + const char *p2; + const char *p3; + const char *p4; + + p2 = p1; + while (p2 < ptr + && (*p2 == 'B' || *p2 == 'C' || *p2 == 'D' + || *p2 == 'G' || *p2 == 'H' || *p2 == 'J' + || *p2 == 'K' || *p2 == 'M' || *p2 == 'N' + || *p2 == 'P' || *p2 == 'R' || *p2 == 'S' + || *p2 == 'T')) + p2++; + p3 = p2; + while (p3 < ptr + && (*p3 == 'A' || *p3 == 'E' || *p3 == 'I' + || *p3 == 'O' || *p3 == 'U' || *p3 == 'W' + || *p3 == 'Y')) + p3++; + p4 = p3; + while (p4 < ptr + && (*p4 == 'B' || *p4 == 'C' || *p4 == 'D' + || *p4 == 'G' || *p4 == 'H' || *p4 == 'I' + || *p4 == 'J' || *p4 == 'K' || *p4 == 'L' + || *p4 == 'M' || *p4 == 'N' || *p4 == 'P' + || *p4 == 'S' || *p4 == 'T')) + p4++; + if (p4 == ptr) + { + unsigned int n1 = p2 - p1; + unsigned int n2 = p3 - p2; + unsigned int n3 = p4 - p3; + + if (n1 <= 2 && (n2 >= 1 && n2 <= 3) && n3 <= 2) + { + unsigned int index1; + + for (index1 = 0; index1 < 19; index1++) + if (memcmp(jamo_initial_short_name[index1], p1, n1) == 0 + && jamo_initial_short_name[index1][n1] == '\0') + { + unsigned int index2; + + for (index2 = 0; index2 < 21; index2++) + if (memcmp(jamo_medial_short_name[index2], p2, n2) == 0 + && jamo_medial_short_name[index2][n2] == '\0') + { + unsigned int index3; + + for (index3 = 0; index3 < 28; index3++) + if (memcmp(jamo_final_short_name[index3], p3, n3) == 0 + && jamo_final_short_name[index3][n3] == '\0') + { + return 0xAC00 + (index1 * 21 + index2) * 28 + index3; + } + break; + } + break; + } + } + } + } + /* Special case for CJK compatibility ideographs. Keeps the + tables small. */ + if (wordptr == &words[2] + && words[0] == UNICODE_CHARNAME_WORD_CJK + && words[1] == UNICODE_CHARNAME_WORD_COMPATIBILITY + && p1 + 14 <= ptr + && p1 + 15 >= ptr + && memcmp (p1, "IDEOGRAPH-", 10) == 0) + { + const char *p2 = p1 + 10; + + if (*p2 != '0') + { + unsigned int c = 0; + + for (;;) + { + if (*p2 >= '0' && *p2 <= '9') + c += (*p2 - '0'); + else if (*p2 >= 'A' && *p2 <= 'F') + c += (*p2 - 'A' + 10); + else + break; + p2++; + if (p2 == ptr) + { + if ((c >= 0xF900 && c <= 0xFA2D) + || (c >= 0xFA30 && c <= 0xFA6A) + || (c >= 0xFA70 && c <= 0xFAD9) + || (c >= 0x2F800 && c <= 0x2FA1D)) + return c; + else + break; + } + c = c << 4; + } + } + } + } + } + if (false) + filled_words: + { + /* Multiply by 2, to simplify later comparisons. */ + unsigned int words_length = wordptr - words; + { + int i = words_length - 1; + words[i] = 2 * words[i]; + for (; --i >= 0; ) + words[i] = 2 * words[i] + 1; + } + /* Binary search in unicode_name_to_code. */ + { + unsigned int i1 = 0; + unsigned int i2 = SIZEOF (unicode_name_to_code); + for (;;) + { + unsigned int i = (i1 + i2) >> 1; + const uint16_t *w = words; + const uint16_t *p = &unicode_names[unicode_name_to_code[i].name]; + unsigned int n = words_length; + for (;;) + { + if (*p < *w) + { + if (i1 == i) + goto name_not_found; + /* Note here: i1 < i < i2. */ + i1 = i; + break; + } + else if (*p > *w) + { + if (i2 == i) + goto name_not_found; + /* Note here: i1 <= i < i2. */ + i2 = i; + break; + } + p++; w++; n--; + if (n == 0) + { + unsigned int c = unicode_name_to_code[i].code; + + /* Undo the transformation to 16-bit space. */ + static const unsigned int offset[13] = + { + 0x00000, 0x00000, 0x00000, 0x00000, 0x00000, + 0x05000, 0x09000, 0x09000, 0x0A000, 0x14000, + 0x15000, 0x24000, 0xD4000 + }; + return c + offset[c >> 12]; + } + } + } + } + name_not_found: ; + } + } + } + return UNINAME_INVALID; +} diff --git a/lib/uniname/uninames.h b/lib/uniname/uninames.h new file mode 100644 index 00000000..7b6db1f1 --- /dev/null +++ b/lib/uniname/uninames.h @@ -0,0 +1,61495 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* + * uninames.h + * + * Unicode character name table. + * Generated automatically by the gen-uninames utility. + */ + +static const char unicode_name_words[39544] = { + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z', + '-', 'A', + 'A', '2', + 'A', '3', + 'A', 'A', + 'A', 'B', + 'A', 'C', + 'A', 'D', + 'A', 'E', + 'A', 'G', + 'A', 'H', + 'A', 'I', + 'A', 'K', + 'A', 'L', + 'A', 'M', + 'A', 'N', + 'A', 'O', + 'A', 'P', + 'A', 'Q', + 'A', 'S', + 'A', 'T', + 'A', 'U', + 'A', 'V', + 'A', 'X', + 'A', 'Y', + 'B', 'A', + 'B', 'E', + 'B', 'H', + 'B', 'I', + 'B', 'O', + 'B', 'Q', + 'B', 'U', + 'B', 'Y', + 'C', 'A', + 'C', 'C', + 'C', 'D', + 'C', 'E', + 'C', 'H', + 'C', 'I', + 'C', 'M', + 'C', 'O', + 'C', 'U', + 'C', 'Y', + 'D', '2', + 'D', 'A', + 'D', 'B', + 'D', 'E', + 'D', 'I', + 'D', 'L', + 'D', 'M', + 'D', 'O', + 'D', 'U', + 'D', 'V', + 'D', 'Z', + 'E', '2', + 'E', 'A', + 'E', 'E', + 'E', 'F', + 'E', 'H', + 'E', 'I', + 'E', 'K', + 'E', 'L', + 'E', 'M', + 'E', 'N', + 'E', 'O', + 'E', 'P', + 'E', 'R', + 'E', 'S', + 'E', 'T', + 'E', 'U', + 'E', 'V', + 'E', 'W', + 'E', 'X', + 'F', 'A', + 'F', 'E', + 'F', 'F', + 'F', 'I', + 'F', 'L', + 'F', 'M', + 'F', 'O', + 'F', 'U', + 'F', 'Y', + 'G', '2', + 'G', 'A', + 'G', 'B', + 'G', 'E', + 'G', 'G', + 'G', 'I', + 'G', 'N', + 'G', 'O', + 'G', 'U', + 'G', 'V', + 'G', 'Y', + 'H', 'A', + 'H', 'E', + 'H', 'G', + 'H', 'I', + 'H', 'K', + 'H', 'O', + 'H', 'P', + 'H', 'U', + 'H', 'V', + 'H', 'Z', + 'I', 'B', + 'I', 'E', + 'I', 'F', + 'I', 'G', + 'I', 'H', + 'I', 'I', + 'I', 'J', + 'I', 'L', + 'I', 'M', + 'I', 'N', + 'I', 'O', + 'I', 'P', + 'I', 'R', + 'I', 'S', + 'I', 'T', + 'I', 'U', + 'I', 'X', + 'I', 'Y', + 'J', 'A', + 'J', 'E', + 'J', 'I', + 'J', 'O', + 'J', 'U', + 'J', 'Y', + 'K', '2', + 'K', 'A', + 'K', 'B', + 'K', 'E', + 'K', 'G', + 'K', 'I', + 'K', 'K', + 'K', 'L', + 'K', 'M', + 'K', 'O', + 'K', 'T', + 'K', 'U', + 'K', 'V', + 'K', 'W', + 'L', 'A', + 'L', 'D', + 'L', 'E', + 'L', 'H', + 'L', 'I', + 'L', 'J', + 'L', 'L', + 'L', 'M', + 'L', 'N', + 'L', 'O', + 'L', 'S', + 'L', 'U', + 'L', 'V', + 'L', 'X', + 'L', 'Y', + 'L', 'Z', + 'M', 'A', + 'M', 'B', + 'M', 'E', + 'M', 'G', + 'M', 'H', + 'M', 'I', + 'M', 'L', + 'M', 'M', + 'M', 'O', + 'M', 'S', + 'M', 'U', + 'M', 'V', + 'M', 'W', + 'M', 'Y', + 'N', 'A', + 'N', 'D', + 'N', 'E', + 'N', 'F', + 'N', 'G', + 'N', 'H', + 'N', 'I', + 'N', 'J', + 'N', 'M', + 'N', 'N', + 'N', 'O', + 'N', 'S', + 'N', 'U', + 'N', 'V', + 'N', 'W', + 'O', 'A', + 'O', 'B', + 'O', 'E', + 'O', 'F', + 'O', 'H', + 'O', 'I', + 'O', 'L', + 'O', 'M', + 'O', 'N', + 'O', 'O', + 'O', 'P', + 'O', 'R', + 'O', 'S', + 'O', 'T', + 'O', 'U', + 'O', 'V', + 'O', 'W', + 'O', 'X', + 'O', 'Y', + 'P', '2', + 'P', 'A', + 'P', 'C', + 'P', 'D', + 'P', 'E', + 'P', 'F', + 'P', 'G', + 'P', 'H', + 'P', 'I', + 'P', 'M', + 'P', 'O', + 'P', 'R', + 'P', 'S', + 'P', 'U', + 'P', 'V', + 'P', 'W', + 'P', 'Y', + 'P', 'Z', + 'Q', 'A', + 'Q', 'E', + 'Q', 'I', + 'Q', 'O', + 'Q', 'P', + 'Q', 'U', + 'Q', 'Y', + 'R', 'A', + 'R', 'E', + 'R', 'I', + 'R', 'O', + 'R', 'R', + 'R', 'U', + 'R', 'Y', + 'S', 'A', + 'S', 'E', + 'S', 'G', + 'S', 'H', + 'S', 'I', + 'S', 'K', + 'S', 'O', + 'S', 'P', + 'S', 'R', + 'S', 'S', + 'S', 'T', + 'S', 'U', + 'S', 'V', + 'S', 'W', + 'S', 'Y', + 'S', 'Z', + 'T', 'A', + 'T', 'C', + 'T', 'E', + 'T', 'H', + 'T', 'I', + 'T', 'N', + 'T', 'O', + 'T', 'R', + 'T', 'S', + 'T', 'T', + 'T', 'U', + 'T', 'Z', + 'U', '2', + 'U', 'A', + 'U', 'B', + 'U', 'C', + 'U', 'D', + 'U', 'E', + 'U', 'K', + 'U', 'M', + 'U', 'N', + 'U', 'O', + 'U', 'P', + 'U', 'R', + 'U', 'S', + 'U', 'U', + 'U', 'Y', + 'V', 'A', + 'V', 'E', + 'V', 'I', + 'V', 'O', + 'V', 'U', + 'V', 'Y', + 'W', 'A', + 'W', 'B', + 'W', 'E', + 'W', 'G', + 'W', 'I', + 'W', 'O', + 'W', 'U', + 'W', 'V', + 'X', 'A', + 'X', 'E', + 'X', 'G', + 'X', 'I', + 'X', 'O', + 'X', 'U', + 'X', 'Y', + 'Y', 'A', + 'Y', 'E', + 'Y', 'I', + 'Y', 'N', + 'Y', 'O', + 'Y', 'R', + 'Y', 'U', + 'Y', 'V', + 'Y', 'Y', + 'Z', 'A', + 'Z', 'E', + 'Z', 'H', + 'Z', 'I', + 'Z', 'O', + 'Z', 'U', + 'Z', 'Y', + '-', 'U', 'M', + 'A', '-', 'O', + 'A', '-', 'U', + 'A', 'A', 'I', + 'A', 'A', 'J', + 'A', 'A', 'K', + 'A', 'A', 'M', + 'A', 'A', 'W', + 'A', 'A', 'Y', + 'A', 'B', '2', + 'A', 'D', 'I', + 'A', 'D', 'O', + 'A', 'G', 'E', + 'A', 'I', 'N', + 'A', 'I', 'R', + 'A', 'L', 'F', + 'A', 'L', 'I', + 'A', 'L', 'L', + 'A', 'N', 'D', + 'A', 'N', 'G', + 'A', 'N', 'N', + 'A', 'N', 'O', + 'A', 'P', 'L', + 'A', 'R', 'C', + 'A', 'R', 'E', + 'A', 'R', 'M', + 'A', 'S', 'H', + 'A', 'U', 'E', + 'A', 'W', 'E', + 'A', 'X', 'E', + 'A', 'Y', 'B', + 'A', 'Z', 'U', + 'B', 'A', 'A', + 'B', 'A', 'D', + 'B', 'A', 'G', + 'B', 'A', 'L', + 'B', 'A', 'N', + 'B', 'A', 'P', + 'B', 'A', 'R', + 'B', 'A', 'T', + 'B', 'A', 'X', + 'B', 'B', 'A', + 'B', 'B', 'E', + 'B', 'B', 'I', + 'B', 'B', 'O', + 'B', 'B', 'U', + 'B', 'B', 'Y', + 'B', 'E', 'E', + 'B', 'E', 'H', + 'B', 'E', 'I', + 'B', 'E', 'N', + 'B', 'E', 'P', + 'B', 'E', 'T', + 'B', 'E', 'X', + 'B', 'H', 'A', + 'B', 'H', 'E', + 'B', 'H', 'I', + 'B', 'H', 'O', + 'B', 'H', 'U', + 'B', 'I', 'B', + 'B', 'I', 'E', + 'B', 'I', 'G', + 'B', 'I', 'P', + 'B', 'I', 'T', + 'B', 'I', 'X', + 'B', 'L', 'A', + 'B', 'O', 'A', + 'B', 'O', 'O', + 'B', 'O', 'P', + 'B', 'O', 'T', + 'B', 'O', 'W', + 'B', 'O', 'X', + 'B', 'U', 'O', + 'B', 'U', 'P', + 'B', 'U', 'R', + 'B', 'U', 'T', + 'B', 'U', 'X', + 'B', 'W', 'A', + 'B', 'W', 'E', + 'B', 'W', 'I', + 'B', 'X', 'G', + 'B', 'Y', 'P', + 'B', 'Y', 'R', + 'B', 'Y', 'T', + 'B', 'Y', 'X', + 'C', 'A', 'A', + 'C', 'A', 'L', + 'C', 'A', 'N', + 'C', 'A', 'P', + 'C', 'A', 'T', + 'C', 'A', 'X', + 'C', 'C', 'A', + 'C', 'C', 'E', + 'C', 'C', 'I', + 'C', 'C', 'O', + 'C', 'C', 'U', + 'C', 'E', 'E', + 'C', 'E', 'N', + 'C', 'E', 'P', + 'C', 'E', 'X', + 'C', 'H', 'A', + 'C', 'H', 'E', + 'C', 'H', 'I', + 'C', 'H', 'O', + 'C', 'H', 'U', + 'C', 'H', 'Y', + 'C', 'I', 'E', + 'C', 'I', 'I', + 'C', 'I', 'L', + 'C', 'I', 'P', + 'C', 'I', 'T', + 'C', 'I', 'X', + 'C', 'J', 'K', + 'C', 'O', 'A', + 'C', 'O', 'N', + 'C', 'O', 'O', + 'C', 'O', 'P', + 'C', 'O', 'T', + 'C', 'O', 'W', + 'C', 'O', 'X', + 'C', 'U', 'M', + 'C', 'U', 'O', + 'C', 'U', 'P', + 'C', 'U', 'R', + 'C', 'U', 'T', + 'C', 'U', 'X', + 'C', 'W', 'A', + 'C', 'W', 'E', + 'C', 'W', 'I', + 'C', 'W', 'O', + 'C', 'Y', 'A', + 'C', 'Y', 'P', + 'C', 'Y', 'R', + 'C', 'Y', 'T', + 'C', 'Y', 'X', + 'D', 'A', 'A', + 'D', 'A', 'D', + 'D', 'A', 'G', + 'D', 'A', 'L', + 'D', 'A', 'M', + 'D', 'A', 'P', + 'D', 'A', 'R', + 'D', 'A', 'T', + 'D', 'A', 'X', + 'D', 'A', 'Y', + 'D', 'D', 'A', + 'D', 'D', 'E', + 'D', 'D', 'I', + 'D', 'D', 'O', + 'D', 'D', 'U', + 'D', 'E', 'E', + 'D', 'E', 'I', + 'D', 'E', 'K', + 'D', 'E', 'L', + 'D', 'E', 'P', + 'D', 'E', 'X', + 'D', 'H', 'A', + 'D', 'H', 'E', + 'D', 'H', 'I', + 'D', 'H', 'O', + 'D', 'H', 'U', + 'D', 'I', 'B', + 'D', 'I', 'E', + 'D', 'I', 'M', + 'D', 'I', 'N', + 'D', 'I', 'P', + 'D', 'I', 'T', + 'D', 'I', 'X', + 'D', 'J', 'A', + 'D', 'J', 'E', + 'D', 'L', 'A', + 'D', 'L', 'E', + 'D', 'L', 'I', + 'D', 'L', 'O', + 'D', 'L', 'U', + 'D', 'O', 'A', + 'D', 'O', 'G', + 'D', 'O', 'N', + 'D', 'O', 'O', + 'D', 'O', 'P', + 'D', 'O', 'T', + 'D', 'O', 'X', + 'D', 'R', 'Y', + 'D', 'U', 'B', + 'D', 'U', 'G', + 'D', 'U', 'H', + 'D', 'U', 'L', + 'D', 'U', 'M', + 'D', 'U', 'N', + 'D', 'U', 'O', + 'D', 'U', 'P', + 'D', 'U', 'R', + 'D', 'U', 'T', + 'D', 'U', 'X', + 'D', 'W', 'A', + 'D', 'W', 'E', + 'D', 'W', 'O', + 'D', 'Y', 'O', + 'D', 'Z', 'A', + 'D', 'Z', 'E', + 'D', 'Z', 'I', + 'D', 'Z', 'O', + 'D', 'Z', 'U', + 'E', 'A', 'R', + 'E', 'A', 'T', + 'E', 'C', 'H', + 'E', 'D', 'D', + 'E', 'E', 'N', + 'E', 'G', 'G', + 'E', 'I', 'E', + 'E', 'I', 'S', + 'E', 'K', 'S', + 'E', 'N', 'D', + 'E', 'N', 'G', + 'E', 'N', 'N', + 'E', 'O', 'H', + 'E', 'R', 'A', + 'E', 'R', 'G', + 'E', 'R', 'R', + 'E', 'R', 'S', + 'E', 'S', 'H', + 'E', 'S', 'O', + 'E', 'T', 'A', + 'E', 'T', 'H', + 'E', 'W', 'E', + 'E', 'X', 'O', + 'E', 'Y', 'E', + 'E', 'Z', 'H', + 'F', 'A', 'A', + 'F', 'A', 'N', + 'F', 'A', 'P', + 'F', 'A', 'T', + 'F', 'A', 'X', + 'F', 'E', 'E', + 'F', 'E', 'H', + 'F', 'E', 'I', + 'F', 'F', 'I', + 'F', 'F', 'L', + 'F', 'I', 'I', + 'F', 'I', 'P', + 'F', 'I', 'T', + 'F', 'I', 'X', + 'F', 'L', 'A', + 'F', 'L', 'Y', + 'F', 'O', 'O', + 'F', 'O', 'P', + 'F', 'O', 'R', + 'F', 'O', 'X', + 'F', 'U', 'P', + 'F', 'U', 'R', + 'F', 'U', 'T', + 'F', 'U', 'X', + 'F', 'W', 'A', + 'F', 'W', 'E', + 'F', 'W', 'I', + 'F', 'Y', 'A', + 'F', 'Y', 'P', + 'F', 'Y', 'T', + 'F', 'Y', 'X', + 'G', 'A', '2', + 'G', 'A', 'A', + 'G', 'A', 'D', + 'G', 'A', 'F', + 'G', 'A', 'G', + 'G', 'A', 'L', + 'G', 'A', 'M', + 'G', 'A', 'N', + 'G', 'A', 'P', + 'G', 'A', 'R', + 'G', 'A', 'T', + 'G', 'A', 'X', + 'G', 'A', 'Y', + 'G', 'B', 'A', + 'G', 'B', 'E', + 'G', 'B', 'I', + 'G', 'B', 'O', + 'G', 'B', 'U', + 'G', 'E', 'E', + 'G', 'E', 'N', + 'G', 'E', 'P', + 'G', 'E', 'R', + 'G', 'E', 'T', + 'G', 'E', 'X', + 'G', 'G', 'A', + 'G', 'G', 'E', + 'G', 'G', 'I', + 'G', 'G', 'O', + 'G', 'G', 'U', + 'G', 'H', 'A', + 'G', 'H', 'E', + 'G', 'H', 'I', + 'G', 'H', 'O', + 'G', 'H', 'U', + 'G', 'H', 'Z', + 'G', 'I', '4', + 'G', 'I', 'E', + 'G', 'I', 'M', + 'G', 'I', 'P', + 'G', 'I', 'T', + 'G', 'I', 'X', + 'G', 'J', 'E', + 'G', 'L', 'A', + 'G', 'O', 'A', + 'G', 'O', 'O', + 'G', 'O', 'P', + 'G', 'O', 'T', + 'G', 'O', 'X', + 'G', 'P', 'A', + 'G', 'R', 'U', + 'G', 'U', '2', + 'G', 'U', 'D', + 'G', 'U', 'G', + 'G', 'U', 'L', + 'G', 'U', 'M', + 'G', 'U', 'O', + 'G', 'U', 'P', + 'G', 'U', 'R', + 'G', 'U', 'T', + 'G', 'U', 'X', + 'G', 'W', 'A', + 'G', 'W', 'E', + 'G', 'W', 'I', + 'G', 'Y', 'A', + 'G', 'Y', 'E', + 'G', 'Y', 'I', + 'G', 'Y', 'O', + 'G', 'Y', 'U', + 'H', 'A', 'A', + 'H', 'A', 'E', + 'H', 'A', 'H', + 'H', 'A', 'L', + 'H', 'A', 'N', + 'H', 'A', 'P', + 'H', 'A', 'R', + 'H', 'A', 'T', + 'H', 'A', 'X', + 'H', 'E', 'E', + 'H', 'E', 'H', + 'H', 'E', 'I', + 'H', 'E', 'N', + 'H', 'E', 'P', + 'H', 'E', 'T', + 'H', 'E', 'X', + 'H', 'H', 'A', + 'H', 'H', 'E', + 'H', 'H', 'I', + 'H', 'H', 'O', + 'H', 'H', 'U', + 'H', 'I', 'E', + 'H', 'I', 'I', + 'H', 'I', 'N', + 'H', 'I', 'P', + 'H', 'I', 'T', + 'H', 'L', 'A', + 'H', 'L', 'E', + 'H', 'L', 'I', + 'H', 'L', 'O', + 'H', 'L', 'U', + 'H', 'L', 'Y', + 'H', 'M', 'A', + 'H', 'M', 'I', + 'H', 'M', 'O', + 'H', 'M', 'U', + 'H', 'M', 'Y', + 'H', 'N', 'A', + 'H', 'N', 'E', + 'H', 'N', 'I', + 'H', 'O', 'A', + 'H', 'O', 'E', + 'H', 'O', 'N', + 'H', 'O', 'O', + 'H', 'O', 'P', + 'H', 'O', 'T', + 'H', 'O', 'X', + 'H', 'P', 'A', + 'H', 'T', 'A', + 'H', 'U', 'N', + 'H', 'U', 'O', + 'H', 'W', 'A', + 'H', 'W', 'E', + 'H', 'W', 'I', + 'H', 'W', 'O', + 'H', 'W', 'U', + 'H', 'X', 'A', + 'H', 'X', 'E', + 'H', 'X', 'I', + 'H', 'X', 'O', + 'H', 'Z', 'G', + 'H', 'Z', 'T', + 'H', 'Z', 'W', + 'H', 'Z', 'Z', + 'I', '-', 'A', + 'I', '-', 'O', + 'I', '-', 'U', + 'I', 'A', 'N', + 'I', 'C', 'E', + 'I', 'E', 'P', + 'I', 'E', 'T', + 'I', 'E', 'X', + 'I', 'G', 'I', + 'I', 'L', '2', + 'I', 'N', 'G', + 'I', 'N', 'I', + 'I', 'N', 'N', + 'I', 'N', 'Y', + 'I', 'O', 'R', + 'I', 'R', 'I', + 'I', 'S', 'H', + 'I', 'S', 'S', + 'J', 'A', 'A', + 'J', 'A', 'R', + 'J', 'E', 'E', + 'J', 'E', 'H', + 'J', 'E', 'R', + 'J', 'H', 'A', + 'J', 'H', 'O', + 'J', 'I', 'A', + 'J', 'I', 'E', + 'J', 'I', 'L', + 'J', 'I', 'P', + 'J', 'I', 'T', + 'J', 'I', 'X', + 'J', 'J', 'A', + 'J', 'J', 'E', + 'J', 'J', 'I', + 'J', 'J', 'O', + 'J', 'J', 'U', + 'J', 'J', 'Y', + 'J', 'O', 'A', + 'J', 'O', 'O', + 'J', 'O', 'P', + 'J', 'O', 'T', + 'J', 'O', 'X', + 'J', 'O', 'Y', + 'J', 'U', 'O', + 'J', 'U', 'P', + 'J', 'U', 'R', + 'J', 'U', 'T', + 'J', 'U', 'X', + 'J', 'W', 'A', + 'J', 'Y', 'P', + 'J', 'Y', 'R', + 'J', 'Y', 'T', + 'J', 'Y', 'X', + 'K', 'A', '2', + 'K', 'A', 'A', + 'K', 'A', 'B', + 'K', 'A', 'F', + 'K', 'A', 'H', + 'K', 'A', 'I', + 'K', 'A', 'K', + 'K', 'A', 'L', + 'K', 'A', 'N', + 'K', 'A', 'P', + 'K', 'A', 'T', + 'K', 'A', 'X', + 'K', 'A', 'Y', + 'K', 'E', 'E', + 'K', 'E', 'H', + 'K', 'E', 'N', + 'K', 'E', 'P', + 'K', 'E', 'T', + 'K', 'E', 'X', + 'K', 'E', 'Y', + 'K', 'H', 'A', + 'K', 'H', 'E', + 'K', 'H', 'I', + 'K', 'H', 'O', + 'K', 'H', 'U', + 'K', 'H', 'Z', + 'K', 'I', 'D', + 'K', 'I', 'E', + 'K', 'I', 'H', + 'K', 'I', 'I', + 'K', 'I', 'N', + 'K', 'I', 'P', + 'K', 'I', 'T', + 'K', 'I', 'X', + 'K', 'J', 'E', + 'K', 'K', 'A', + 'K', 'K', 'E', + 'K', 'K', 'I', + 'K', 'K', 'O', + 'K', 'K', 'U', + 'K', 'L', 'A', + 'K', 'O', 'A', + 'K', 'O', 'H', + 'K', 'O', 'N', + 'K', 'O', 'O', + 'K', 'O', 'P', + 'K', 'O', 'T', + 'K', 'O', 'X', + 'K', 'P', 'A', + 'K', 'P', 'E', + 'K', 'P', 'I', + 'K', 'P', 'O', + 'K', 'P', 'U', + 'K', 'R', 'A', + 'K', 'S', 'I', + 'K', 'U', '3', + 'K', 'U', '4', + 'K', 'U', '7', + 'K', 'U', 'L', + 'K', 'U', 'N', + 'K', 'U', 'O', + 'K', 'U', 'P', + 'K', 'U', 'R', + 'K', 'U', 'T', + 'K', 'U', 'X', + 'K', 'V', 'A', + 'K', 'W', 'A', + 'K', 'W', 'E', + 'K', 'W', 'I', + 'K', 'W', 'O', + 'K', 'X', 'A', + 'K', 'X', 'E', + 'K', 'X', 'I', + 'K', 'X', 'O', + 'K', 'X', 'U', + 'K', 'Y', 'A', + 'K', 'Y', 'E', + 'K', 'Y', 'I', + 'K', 'Y', 'O', + 'K', 'Y', 'U', + 'L', 'A', 'A', + 'L', 'A', 'E', + 'L', 'A', 'L', + 'L', 'A', 'M', + 'L', 'A', 'O', + 'L', 'A', 'P', + 'L', 'A', 'S', + 'L', 'A', 'T', + 'L', 'A', 'W', + 'L', 'A', 'X', + 'L', 'C', 'E', + 'L', 'C', 'I', + 'L', 'D', '2', + 'L', 'E', 'E', + 'L', 'E', 'G', + 'L', 'E', 'K', + 'L', 'E', 'O', + 'L', 'E', 'P', + 'L', 'E', 'X', + 'L', 'H', 'A', + 'L', 'H', 'E', + 'L', 'H', 'I', + 'L', 'H', 'O', + 'L', 'H', 'U', + 'L', 'I', 'D', + 'L', 'I', 'E', + 'L', 'I', 'I', + 'L', 'I', 'L', + 'L', 'I', 'P', + 'L', 'I', 'T', + 'L', 'I', 'X', + 'L', 'J', 'E', + 'L', 'L', 'A', + 'L', 'O', 'A', + 'L', 'O', 'G', + 'L', 'O', 'O', + 'L', 'O', 'P', + 'L', 'O', 'T', + 'L', 'O', 'W', + 'L', 'O', 'X', + 'L', 'U', '2', + 'L', 'U', '3', + 'L', 'U', 'E', + 'L', 'U', 'H', + 'L', 'U', 'L', + 'L', 'U', 'M', + 'L', 'U', 'O', + 'L', 'U', 'P', + 'L', 'U', 'R', + 'L', 'U', 'T', + 'L', 'U', 'X', + 'L', 'W', 'A', + 'L', 'W', 'E', + 'L', 'W', 'I', + 'L', 'W', 'O', + 'L', 'Y', 'P', + 'L', 'Y', 'R', + 'L', 'Y', 'T', + 'L', 'Y', 'X', + 'L', 'Y', 'Y', + 'M', 'A', '2', + 'M', 'A', 'A', + 'M', 'A', 'H', + 'M', 'A', 'I', + 'M', 'A', 'N', + 'M', 'A', 'P', + 'M', 'A', 'R', + 'M', 'A', 'T', + 'M', 'A', 'X', + 'M', 'A', 'Y', + 'M', 'B', '2', + 'M', 'B', '3', + 'M', 'B', '4', + 'M', 'B', 'A', + 'M', 'B', 'E', + 'M', 'B', 'I', + 'M', 'B', 'O', + 'M', 'B', 'U', + 'M', 'E', 'D', + 'M', 'E', 'E', + 'M', 'E', 'M', + 'M', 'E', 'N', + 'M', 'E', 'S', + 'M', 'E', 'X', + 'M', 'G', 'A', + 'M', 'G', 'E', + 'M', 'G', 'O', + 'M', 'G', 'U', + 'M', 'H', 'Z', + 'M', 'I', 'D', + 'M', 'I', 'E', + 'M', 'I', 'G', + 'M', 'I', 'I', + 'M', 'I', 'L', + 'M', 'I', 'M', + 'M', 'I', 'N', + 'M', 'I', 'P', + 'M', 'I', 'T', + 'M', 'I', 'X', + 'M', 'L', 'A', + 'M', 'O', 'A', + 'M', 'O', 'L', + 'M', 'O', 'N', + 'M', 'O', 'O', + 'M', 'O', 'P', + 'M', 'O', 'T', + 'M', 'O', 'X', + 'M', 'P', 'A', + 'M', 'U', 'E', + 'M', 'U', 'G', + 'M', 'U', 'M', + 'M', 'U', 'O', + 'M', 'U', 'P', + 'M', 'U', 'R', + 'M', 'U', 'T', + 'M', 'U', 'X', + 'M', 'W', 'A', + 'M', 'W', 'E', + 'M', 'W', 'I', + 'M', 'W', 'O', + 'M', 'Y', 'A', + 'M', 'Y', 'P', + 'M', 'Y', 'T', + 'M', 'Y', 'X', + 'N', 'A', '2', + 'N', 'A', 'A', + 'N', 'A', 'G', + 'N', 'A', 'H', + 'N', 'A', 'M', + 'N', 'A', 'P', + 'N', 'A', 'R', + 'N', 'A', 'X', + 'N', 'B', 'A', + 'N', 'B', 'I', + 'N', 'B', 'O', + 'N', 'B', 'U', + 'N', 'B', 'Y', + 'N', 'D', 'A', + 'N', 'D', 'E', + 'N', 'D', 'I', + 'N', 'D', 'O', + 'N', 'D', 'U', + 'N', 'E', 'E', + 'N', 'E', 'N', + 'N', 'E', 'O', + 'N', 'E', 'P', + 'N', 'E', 'T', + 'N', 'E', 'W', + 'N', 'E', 'X', + 'N', 'G', 'A', + 'N', 'G', 'E', + 'N', 'G', 'G', + 'N', 'G', 'I', + 'N', 'G', 'O', + 'N', 'G', 'U', + 'N', 'H', 'A', + 'N', 'I', '2', + 'N', 'I', 'A', + 'N', 'I', 'B', + 'N', 'I', 'E', + 'N', 'I', 'I', + 'N', 'I', 'M', + 'N', 'I', 'P', + 'N', 'I', 'T', + 'N', 'I', 'X', + 'N', 'J', 'A', + 'N', 'J', 'E', + 'N', 'J', 'I', + 'N', 'J', 'O', + 'N', 'J', 'U', + 'N', 'J', 'Y', + 'N', 'K', 'O', + 'N', 'N', 'A', + 'N', 'N', 'G', + 'N', 'N', 'O', + 'N', 'O', 'A', + 'N', 'O', 'O', + 'N', 'O', 'P', + 'N', 'O', 'R', + 'N', 'O', 'T', + 'N', 'O', 'W', + 'N', 'O', 'X', + 'N', 'R', 'A', + 'N', 'R', 'E', + 'N', 'R', 'O', + 'N', 'R', 'U', + 'N', 'R', 'Y', + 'N', 'U', 'E', + 'N', 'U', 'M', + 'N', 'U', 'N', + 'N', 'U', 'O', + 'N', 'U', 'P', + 'N', 'U', 'R', + 'N', 'U', 'T', + 'N', 'U', 'X', + 'N', 'W', 'A', + 'N', 'W', 'E', + 'N', 'Y', 'A', + 'N', 'Y', 'D', + 'N', 'Y', 'E', + 'N', 'Y', 'I', + 'N', 'Y', 'O', + 'N', 'Y', 'U', + 'N', 'Z', 'A', + 'N', 'Z', 'E', + 'N', 'Z', 'I', + 'N', 'Z', 'U', + 'N', 'Z', 'Y', + 'O', '-', 'E', + 'O', '-', 'O', + 'O', '-', 'U', + 'O', 'A', 'K', + 'O', 'A', 'Y', + 'O', 'C', 'R', + 'O', 'D', 'D', + 'O', 'H', 'M', + 'O', 'I', 'L', + 'O', 'L', 'D', + 'O', 'L', 'E', + 'O', 'N', 'E', + 'O', 'N', 'G', + 'O', 'N', 'N', + 'O', 'N', 'U', + 'O', 'O', 'N', + 'O', 'O', 'U', + 'O', 'T', 'T', + 'O', 'T', 'U', + 'O', 'U', 'T', + 'P', 'A', 'A', + 'P', 'A', 'D', + 'P', 'A', 'N', + 'P', 'A', 'P', + 'P', 'A', 'R', + 'P', 'A', 'T', + 'P', 'A', 'W', + 'P', 'A', 'X', + 'P', 'E', 'E', + 'P', 'E', 'H', + 'P', 'E', 'R', + 'P', 'E', 'S', + 'P', 'H', 'A', + 'P', 'H', 'E', + 'P', 'H', 'I', + 'P', 'H', 'O', + 'P', 'H', 'U', + 'P', 'I', 'E', + 'P', 'I', 'G', + 'P', 'I', 'I', + 'P', 'I', 'P', + 'P', 'I', 'T', + 'P', 'I', 'X', + 'P', 'L', 'A', + 'P', 'O', 'A', + 'P', 'O', 'O', + 'P', 'O', 'P', + 'P', 'O', 'T', + 'P', 'O', 'X', + 'P', 'P', 'A', + 'P', 'P', 'M', + 'P', 'S', 'I', + 'P', 'T', 'E', + 'P', 'U', '2', + 'P', 'U', 'O', + 'P', 'U', 'P', + 'P', 'U', 'R', + 'P', 'U', 'T', + 'P', 'U', 'X', + 'P', 'W', 'A', + 'P', 'W', 'E', + 'P', 'W', 'I', + 'P', 'W', 'O', + 'P', 'Y', 'P', + 'P', 'Y', 'R', + 'P', 'Y', 'T', + 'P', 'Y', 'X', + 'Q', 'A', 'A', + 'Q', 'A', 'F', + 'Q', 'A', 'I', + 'Q', 'A', 'Q', + 'Q', 'A', 'R', + 'Q', 'A', 'U', + 'Q', 'E', 'E', + 'Q', 'H', 'A', + 'Q', 'H', 'E', + 'Q', 'H', 'I', + 'Q', 'H', 'O', + 'Q', 'H', 'U', + 'Q', 'I', 'E', + 'Q', 'I', 'I', + 'Q', 'I', 'P', + 'Q', 'I', 'T', + 'Q', 'I', 'X', + 'Q', 'O', 'A', + 'Q', 'O', 'F', + 'Q', 'O', 'O', + 'Q', 'O', 'P', + 'Q', 'O', 'T', + 'Q', 'O', 'X', + 'Q', 'U', 'A', + 'Q', 'U', 'E', + 'Q', 'U', 'I', + 'Q', 'U', 'K', + 'Q', 'U', 'O', + 'Q', 'U', 'P', + 'Q', 'U', 'R', + 'Q', 'U', 'T', + 'Q', 'U', 'U', + 'Q', 'U', 'V', + 'Q', 'U', 'X', + 'Q', 'W', 'A', + 'Q', 'W', 'E', + 'Q', 'W', 'I', + 'Q', 'Y', 'A', + 'Q', 'Y', 'E', + 'Q', 'Y', 'I', + 'Q', 'Y', 'O', + 'Q', 'Y', 'P', + 'Q', 'Y', 'R', + 'Q', 'Y', 'T', + 'Q', 'Y', 'U', + 'Q', 'Y', 'X', + 'R', 'A', '2', + 'R', 'A', '3', + 'R', 'A', 'A', + 'R', 'A', 'B', + 'R', 'A', 'D', + 'R', 'A', 'E', + 'R', 'A', 'M', + 'R', 'A', 'N', + 'R', 'A', 'P', + 'R', 'A', 'T', + 'R', 'A', 'X', + 'R', 'A', 'Y', + 'R', 'D', 'O', + 'R', 'E', 'D', + 'R', 'E', 'E', + 'R', 'E', 'H', + 'R', 'E', 'P', + 'R', 'E', 'X', + 'R', 'H', 'A', + 'R', 'H', 'O', + 'R', 'I', 'I', + 'R', 'I', 'N', + 'R', 'I', 'P', + 'R', 'J', 'E', + 'R', 'O', '2', + 'R', 'O', 'A', + 'R', 'O', 'C', + 'R', 'O', 'D', + 'R', 'O', 'O', + 'R', 'O', 'P', + 'R', 'O', 'T', + 'R', 'O', 'X', + 'R', 'R', 'A', + 'R', 'R', 'E', + 'R', 'R', 'O', + 'R', 'R', 'U', + 'R', 'R', 'Y', + 'R', 'U', 'A', + 'R', 'U', 'B', + 'R', 'U', 'M', + 'R', 'U', 'N', + 'R', 'U', 'O', + 'R', 'U', 'P', + 'R', 'U', 'R', + 'R', 'U', 'T', + 'R', 'U', 'X', + 'R', 'W', 'A', + 'R', 'Y', 'A', + 'R', 'Y', 'P', + 'R', 'Y', 'R', + 'R', 'Y', 'T', + 'R', 'Y', 'X', + 'R', 'Y', 'Y', + 'S', '-', 'W', + 'S', 'A', 'A', + 'S', 'A', 'D', + 'S', 'A', 'G', + 'S', 'A', 'L', + 'S', 'A', 'N', + 'S', 'A', 'P', + 'S', 'A', 'R', + 'S', 'A', 'T', + 'S', 'A', 'W', + 'S', 'A', 'X', + 'S', 'A', 'Y', + 'S', 'E', 'E', + 'S', 'E', 'H', + 'S', 'E', 'P', + 'S', 'E', 'T', + 'S', 'E', 'X', + 'S', 'H', '2', + 'S', 'H', 'A', + 'S', 'H', 'E', + 'S', 'H', 'I', + 'S', 'H', 'O', + 'S', 'H', 'U', + 'S', 'H', 'Y', + 'S', 'I', 'E', + 'S', 'I', 'G', + 'S', 'I', 'I', + 'S', 'I', 'N', + 'S', 'I', 'P', + 'S', 'I', 'T', + 'S', 'I', 'X', + 'S', 'J', 'E', + 'S', 'K', 'W', + 'S', 'N', 'A', + 'S', 'O', 'A', + 'S', 'O', 'F', + 'S', 'O', 'N', + 'S', 'O', 'O', + 'S', 'O', 'P', + 'S', 'O', 'T', + 'S', 'O', 'U', + 'S', 'O', 'W', + 'S', 'O', 'X', + 'S', 'S', 'A', + 'S', 'S', 'E', + 'S', 'S', 'I', + 'S', 'S', 'O', + 'S', 'S', 'U', + 'S', 'S', 'Y', + 'S', 'T', '2', + 'S', 'U', 'A', + 'S', 'U', 'D', + 'S', 'U', 'M', + 'S', 'U', 'N', + 'S', 'U', 'O', + 'S', 'U', 'P', + 'S', 'U', 'R', + 'S', 'U', 'T', + 'S', 'U', 'X', + 'S', 'W', 'A', + 'S', 'W', 'E', + 'S', 'W', 'G', + 'S', 'W', 'I', + 'S', 'W', 'O', + 'S', 'W', 'Z', + 'S', 'Y', 'A', + 'S', 'Y', 'P', + 'S', 'Y', 'R', + 'S', 'Y', 'T', + 'S', 'Y', 'X', + 'S', 'Z', 'A', + 'S', 'Z', 'E', + 'S', 'Z', 'I', + 'S', 'Z', 'O', + 'S', 'Z', 'U', + 'S', 'Z', 'Z', + 'T', 'A', '2', + 'T', 'A', 'A', + 'T', 'A', 'B', + 'T', 'A', 'G', + 'T', 'A', 'H', + 'T', 'A', 'I', + 'T', 'A', 'K', + 'T', 'A', 'M', + 'T', 'A', 'N', + 'T', 'A', 'O', + 'T', 'A', 'P', + 'T', 'A', 'R', + 'T', 'A', 'T', + 'T', 'A', 'U', + 'T', 'A', 'V', + 'T', 'A', 'W', + 'T', 'A', 'X', + 'T', 'E', 'E', + 'T', 'E', 'H', + 'T', 'E', 'N', + 'T', 'E', 'P', + 'T', 'E', 'T', + 'T', 'E', 'X', + 'T', 'H', 'A', + 'T', 'H', 'E', + 'T', 'H', 'I', + 'T', 'H', 'O', + 'T', 'H', 'U', + 'T', 'H', 'Z', + 'T', 'I', 'E', + 'T', 'I', 'I', + 'T', 'I', 'L', + 'T', 'I', 'P', + 'T', 'I', 'R', + 'T', 'I', 'T', + 'T', 'I', 'X', + 'T', 'J', 'E', + 'T', 'L', 'A', + 'T', 'L', 'E', + 'T', 'L', 'I', + 'T', 'L', 'O', + 'T', 'L', 'U', + 'T', 'L', 'V', + 'T', 'O', 'A', + 'T', 'O', 'N', + 'T', 'O', 'O', + 'T', 'O', 'P', + 'T', 'O', 'T', + 'T', 'O', 'X', + 'T', 'R', 'I', + 'T', 'S', 'A', + 'T', 'S', 'E', + 'T', 'S', 'I', + 'T', 'S', 'O', + 'T', 'S', 'U', + 'T', 'S', 'V', + 'T', 'T', '2', + 'T', 'T', 'A', + 'T', 'T', 'E', + 'T', 'T', 'H', + 'T', 'T', 'I', + 'T', 'T', 'O', + 'T', 'T', 'U', + 'T', 'U', 'K', + 'T', 'U', 'M', + 'T', 'U', 'O', + 'T', 'U', 'P', + 'T', 'U', 'R', + 'T', 'U', 'T', + 'T', 'U', 'X', + 'T', 'W', 'A', + 'T', 'W', 'E', + 'T', 'W', 'I', + 'T', 'W', 'O', + 'T', 'Y', 'A', + 'T', 'Y', 'E', + 'T', 'Y', 'I', + 'T', 'Y', 'O', + 'T', 'Y', 'R', + 'T', 'Z', 'A', + 'T', 'Z', 'E', + 'T', 'Z', 'I', + 'T', 'Z', 'O', + 'T', 'Z', 'U', + 'U', '-', 'A', + 'U', '-', 'U', + 'U', 'E', 'E', + 'U', 'E', 'Y', + 'U', 'K', 'U', + 'U', 'L', 'U', + 'U', 'N', 'A', + 'U', 'N', 'N', + 'U', 'O', 'N', + 'U', 'O', 'P', + 'U', 'O', 'X', + 'U', 'R', '2', + 'U', 'R', '4', + 'U', 'R', 'A', + 'U', 'R', 'I', + 'U', 'R', 'N', + 'U', 'R', 'U', + 'U', 'S', 'E', + 'U', 'S', 'H', + 'U', 'U', 'U', + 'U', 'Z', '3', + 'U', 'Z', 'U', + 'V', 'A', 'A', + 'V', 'A', 'I', + 'V', 'A', 'P', + 'V', 'A', 'T', + 'V', 'A', 'V', + 'V', 'A', 'X', + 'V', 'E', 'E', + 'V', 'E', 'H', + 'V', 'E', 'P', + 'V', 'E', 'W', + 'V', 'E', 'X', + 'V', 'I', 'E', + 'V', 'I', 'N', + 'V', 'I', 'P', + 'V', 'I', 'T', + 'V', 'I', 'X', + 'V', 'O', 'O', + 'V', 'O', 'P', + 'V', 'O', 'T', + 'V', 'O', 'U', + 'V', 'O', 'W', + 'V', 'O', 'X', + 'V', 'U', 'P', + 'V', 'U', 'R', + 'V', 'U', 'T', + 'V', 'U', 'X', + 'V', 'W', 'A', + 'V', 'Y', 'P', + 'V', 'Y', 'R', + 'V', 'Y', 'T', + 'V', 'Y', 'X', + 'W', 'A', 'A', + 'W', 'A', 'E', + 'W', 'A', 'N', + 'W', 'A', 'P', + 'W', 'A', 'T', + 'W', 'A', 'U', + 'W', 'A', 'W', + 'W', 'A', 'X', + 'W', 'E', 'E', + 'W', 'E', 'N', + 'W', 'E', 'O', + 'W', 'E', 'P', + 'W', 'E', 'X', + 'W', 'I', 'I', + 'W', 'I', 'N', + 'W', 'O', 'A', + 'W', 'O', 'E', + 'W', 'O', 'N', + 'W', 'O', 'O', + 'W', 'O', 'P', + 'W', 'O', 'X', + 'W', 'U', 'N', + 'W', 'U', 'O', + 'X', 'A', 'A', + 'X', 'A', 'N', + 'X', 'E', 'E', + 'X', 'E', 'H', + 'X', 'I', 'E', + 'X', 'I', 'P', + 'X', 'I', 'T', + 'X', 'I', 'X', + 'X', 'O', 'A', + 'X', 'O', 'P', + 'X', 'O', 'R', + 'X', 'O', 'T', + 'X', 'O', 'X', + 'X', 'U', 'O', + 'X', 'V', 'A', + 'X', 'W', 'A', + 'X', 'W', 'E', + 'X', 'W', 'I', + 'X', 'Y', 'A', + 'X', 'Y', 'E', + 'X', 'Y', 'I', + 'X', 'Y', 'O', + 'X', 'Y', 'P', + 'X', 'Y', 'R', + 'X', 'Y', 'T', + 'X', 'Y', 'U', + 'X', 'Y', 'X', + 'Y', 'A', 'A', + 'Y', 'A', 'B', + 'Y', 'A', 'D', + 'Y', 'A', 'E', + 'Y', 'A', 'F', + 'Y', 'A', 'G', + 'Y', 'A', 'H', + 'Y', 'A', 'J', + 'Y', 'A', 'K', + 'Y', 'A', 'L', + 'Y', 'A', 'M', + 'Y', 'A', 'N', + 'Y', 'A', 'P', + 'Y', 'A', 'Q', + 'Y', 'A', 'R', + 'Y', 'A', 'S', + 'Y', 'A', 'T', + 'Y', 'A', 'V', + 'Y', 'A', 'W', + 'Y', 'A', 'Y', + 'Y', 'A', 'Z', + 'Y', 'E', 'A', + 'Y', 'E', 'E', + 'Y', 'E', 'H', + 'Y', 'E', 'N', + 'Y', 'E', 'O', + 'Y', 'E', 'R', + 'Y', 'E', 'W', + 'Y', 'E', 'Y', + 'Y', 'I', 'E', + 'Y', 'I', 'G', + 'Y', 'I', 'I', + 'Y', 'I', 'N', + 'Y', 'I', 'P', + 'Y', 'I', 'T', + 'Y', 'I', 'X', + 'Y', 'O', 'A', + 'Y', 'O', 'D', + 'Y', 'O', 'O', + 'Y', 'O', 'P', + 'Y', 'O', 'T', + 'Y', 'O', 'X', + 'Y', 'U', 'O', + 'Y', 'U', 'P', + 'Y', 'U', 'R', + 'Y', 'U', 'S', + 'Y', 'U', 'T', + 'Y', 'U', 'X', + 'Y', 'W', 'A', + 'Y', 'W', 'E', + 'Y', 'W', 'I', + 'Y', 'W', 'O', + 'Y', 'Y', 'A', + 'Y', 'Y', 'P', + 'Y', 'Y', 'R', + 'Y', 'Y', 'T', + 'Y', 'Y', 'X', + 'Z', 'A', 'A', + 'Z', 'A', 'G', + 'Z', 'A', 'H', + 'Z', 'A', 'I', + 'Z', 'A', 'L', + 'Z', 'A', 'P', + 'Z', 'A', 'T', + 'Z', 'A', 'X', + 'Z', 'E', '2', + 'Z', 'E', 'E', + 'Z', 'E', 'N', + 'Z', 'E', 'P', + 'Z', 'E', 'X', + 'Z', 'H', 'A', + 'Z', 'H', 'E', + 'Z', 'H', 'I', + 'Z', 'H', 'O', + 'Z', 'H', 'U', + 'Z', 'H', 'Y', + 'Z', 'I', '3', + 'Z', 'I', 'B', + 'Z', 'I', 'E', + 'Z', 'I', 'G', + 'Z', 'I', 'P', + 'Z', 'I', 'T', + 'Z', 'I', 'X', + 'Z', 'J', 'E', + 'Z', 'L', 'A', + 'Z', 'O', 'A', + 'Z', 'O', 'O', + 'Z', 'O', 'P', + 'Z', 'O', 'T', + 'Z', 'O', 'X', + 'Z', 'R', 'A', + 'Z', 'U', '5', + 'Z', 'U', 'M', + 'Z', 'U', 'O', + 'Z', 'U', 'P', + 'Z', 'U', 'R', + 'Z', 'U', 'T', + 'Z', 'U', 'X', + 'Z', 'W', 'A', + 'Z', 'Y', 'P', + 'Z', 'Y', 'R', + 'Z', 'Y', 'T', + 'Z', 'Y', 'X', + 'Z', 'Z', 'A', + 'Z', 'Z', 'E', + 'Z', 'Z', 'I', + 'Z', 'Z', 'O', + 'Z', 'Z', 'U', + 'Z', 'Z', 'Y', + 'A', 'A', 'R', 'U', + 'A', 'D', 'A', 'K', + 'A', 'D', 'E', 'G', + 'A', 'E', 'S', 'C', + 'A', 'H', 'A', 'D', + 'A', 'H', 'S', 'A', + 'A', 'I', 'L', 'M', + 'A', 'I', 'N', 'N', + 'A', 'I', 'N', 'U', + 'A', 'L', 'A', 'N', + 'A', 'L', 'E', 'F', + 'A', 'L', 'F', 'A', + 'A', 'L', 'L', 'I', + 'A', 'L', 'L', 'O', + 'A', 'L', 'P', 'A', + 'A', 'L', 'T', 'A', + 'A', 'M', 'A', 'R', + 'A', 'M', 'B', 'A', + 'A', 'M', 'P', 'S', + 'A', 'N', 'H', 'U', + 'A', 'N', 'K', 'H', + 'A', 'P', 'I', 'N', + 'A', 'P', 'L', 'I', + 'A', 'R', 'A', 'D', + 'A', 'R', 'C', 'H', + 'A', 'R', 'G', 'I', + 'A', 'R', 'M', 'Y', + 'A', 'S', 'A', 'T', + 'A', 'S', 'H', '2', + 'A', 'S', 'H', '9', + 'A', 'T', 'O', 'M', + 'A', 'U', 'N', 'N', + 'A', 'Y', 'A', 'H', + 'A', 'Y', 'E', 'R', + 'A', 'Y', 'I', 'N', + 'B', '0', '0', '1', + 'B', '0', '0', '2', + 'B', '0', '0', '3', + 'B', '0', '0', '4', + 'B', '0', '0', '5', + 'B', '0', '0', '6', + 'B', '0', '0', '7', + 'B', '0', '0', '8', + 'B', '0', '0', '9', + 'B', '0', '1', '0', + 'B', '0', '1', '1', + 'B', '0', '1', '2', + 'B', '0', '1', '3', + 'B', '0', '1', '4', + 'B', '0', '1', '5', + 'B', '0', '1', '6', + 'B', '0', '1', '7', + 'B', '0', '1', '8', + 'B', '0', '1', '9', + 'B', '0', '2', '0', + 'B', '0', '2', '1', + 'B', '0', '2', '2', + 'B', '0', '2', '3', + 'B', '0', '2', '4', + 'B', '0', '2', '5', + 'B', '0', '2', '6', + 'B', '0', '2', '7', + 'B', '0', '2', '8', + 'B', '0', '2', '9', + 'B', '0', '3', '0', + 'B', '0', '3', '1', + 'B', '0', '3', '2', + 'B', '0', '3', '3', + 'B', '0', '3', '4', + 'B', '0', '3', '6', + 'B', '0', '3', '7', + 'B', '0', '3', '8', + 'B', '0', '3', '9', + 'B', '0', '4', '0', + 'B', '0', '4', '1', + 'B', '0', '4', '2', + 'B', '0', '4', '3', + 'B', '0', '4', '4', + 'B', '0', '4', '5', + 'B', '0', '4', '6', + 'B', '0', '4', '7', + 'B', '0', '4', '8', + 'B', '0', '4', '9', + 'B', '0', '5', '0', + 'B', '0', '5', '1', + 'B', '0', '5', '2', + 'B', '0', '5', '3', + 'B', '0', '5', '4', + 'B', '0', '5', '5', + 'B', '0', '5', '6', + 'B', '0', '5', '7', + 'B', '0', '5', '8', + 'B', '0', '5', '9', + 'B', '0', '6', '0', + 'B', '0', '6', '1', + 'B', '0', '6', '2', + 'B', '0', '6', '3', + 'B', '0', '6', '4', + 'B', '0', '6', '5', + 'B', '0', '6', '6', + 'B', '0', '6', '7', + 'B', '0', '6', '8', + 'B', '0', '6', '9', + 'B', '0', '7', '0', + 'B', '0', '7', '1', + 'B', '0', '7', '2', + 'B', '0', '7', '3', + 'B', '0', '7', '4', + 'B', '0', '7', '5', + 'B', '0', '7', '6', + 'B', '0', '7', '7', + 'B', '0', '7', '8', + 'B', '0', '7', '9', + 'B', '0', '8', '0', + 'B', '0', '8', '1', + 'B', '0', '8', '2', + 'B', '0', '8', '3', + 'B', '0', '8', '5', + 'B', '0', '8', '6', + 'B', '0', '8', '7', + 'B', '0', '8', '9', + 'B', '0', '9', '0', + 'B', '0', '9', '1', + 'B', '1', '0', '0', + 'B', '1', '0', '2', + 'B', '1', '0', '4', + 'B', '1', '0', '5', + 'B', '1', '2', '0', + 'B', '1', '2', '1', + 'B', '1', '2', '2', + 'B', '1', '2', '3', + 'B', '1', '2', '5', + 'B', '1', '2', '7', + 'B', '1', '2', '8', + 'B', '1', '3', '0', + 'B', '1', '3', '1', + 'B', '1', '3', '2', + 'B', '1', '3', '3', + 'B', '1', '3', '5', + 'B', '1', '4', '0', + 'B', '1', '4', '1', + 'B', '1', '4', '2', + 'B', '1', '4', '5', + 'B', '1', '4', '6', + 'B', '1', '5', '0', + 'B', '1', '5', '1', + 'B', '1', '5', '2', + 'B', '1', '5', '3', + 'B', '1', '5', '4', + 'B', '1', '5', '5', + 'B', '1', '5', '6', + 'B', '1', '5', '7', + 'B', '1', '5', '8', + 'B', '1', '5', '9', + 'B', '1', '6', '0', + 'B', '1', '6', '1', + 'B', '1', '6', '2', + 'B', '1', '6', '3', + 'B', '1', '6', '4', + 'B', '1', '6', '5', + 'B', '1', '6', '6', + 'B', '1', '6', '7', + 'B', '1', '6', '8', + 'B', '1', '6', '9', + 'B', '1', '7', '0', + 'B', '1', '7', '1', + 'B', '1', '7', '2', + 'B', '1', '7', '3', + 'B', '1', '7', '4', + 'B', '1', '7', '6', + 'B', '1', '7', '7', + 'B', '1', '7', '8', + 'B', '1', '7', '9', + 'B', '1', '8', '0', + 'B', '1', '8', '1', + 'B', '1', '8', '2', + 'B', '1', '8', '3', + 'B', '1', '8', '4', + 'B', '1', '8', '5', + 'B', '1', '8', '9', + 'B', '1', '9', '0', + 'B', '1', '9', '1', + 'B', '2', '0', '0', + 'B', '2', '0', '1', + 'B', '2', '0', '2', + 'B', '2', '0', '3', + 'B', '2', '0', '4', + 'B', '2', '0', '5', + 'B', '2', '0', '6', + 'B', '2', '0', '7', + 'B', '2', '0', '8', + 'B', '2', '0', '9', + 'B', '2', '1', '0', + 'B', '2', '1', '1', + 'B', '2', '1', '2', + 'B', '2', '1', '3', + 'B', '2', '1', '4', + 'B', '2', '1', '5', + 'B', '2', '1', '6', + 'B', '2', '1', '7', + 'B', '2', '1', '8', + 'B', '2', '1', '9', + 'B', '2', '2', '0', + 'B', '2', '2', '1', + 'B', '2', '2', '2', + 'B', '2', '2', '5', + 'B', '2', '2', '6', + 'B', '2', '2', '7', + 'B', '2', '2', '8', + 'B', '2', '2', '9', + 'B', '2', '3', '0', + 'B', '2', '3', '1', + 'B', '2', '3', '2', + 'B', '2', '3', '3', + 'B', '2', '3', '4', + 'B', '2', '3', '6', + 'B', '2', '4', '0', + 'B', '2', '4', '1', + 'B', '2', '4', '2', + 'B', '2', '4', '3', + 'B', '2', '4', '5', + 'B', '2', '4', '6', + 'B', '2', '4', '7', + 'B', '2', '4', '8', + 'B', '2', '4', '9', + 'B', '2', '5', '0', + 'B', '2', '5', '1', + 'B', '2', '5', '2', + 'B', '2', '5', '3', + 'B', '2', '5', '4', + 'B', '2', '5', '5', + 'B', '2', '5', '6', + 'B', '2', '5', '7', + 'B', '2', '5', '8', + 'B', '2', '5', '9', + 'B', '3', '0', '5', + 'B', 'A', 'C', 'K', + 'B', 'A', 'G', '3', + 'B', 'A', 'G', 'A', + 'B', 'A', 'H', 'T', + 'B', 'A', 'N', '2', + 'B', 'A', 'N', 'D', + 'B', 'A', 'N', 'G', + 'B', 'A', 'N', 'K', + 'B', 'A', 'R', 'B', + 'B', 'A', 'R', 'S', + 'B', 'A', 'S', 'E', + 'B', 'B', 'A', 'P', + 'B', 'B', 'A', 'T', + 'B', 'B', 'A', 'X', + 'B', 'B', 'E', 'P', + 'B', 'B', 'E', 'X', + 'B', 'B', 'I', 'E', + 'B', 'B', 'I', 'P', + 'B', 'B', 'I', 'T', + 'B', 'B', 'I', 'X', + 'B', 'B', 'O', 'P', + 'B', 'B', 'O', 'T', + 'B', 'B', 'O', 'X', + 'B', 'B', 'U', 'O', + 'B', 'B', 'U', 'P', + 'B', 'B', 'U', 'R', + 'B', 'B', 'U', 'T', + 'B', 'B', 'U', 'X', + 'B', 'B', 'Y', 'P', + 'B', 'B', 'Y', 'T', + 'B', 'B', 'Y', 'X', + 'B', 'C', 'A', 'D', + 'B', 'E', 'A', 'M', + 'B', 'E', 'A', 'N', + 'B', 'E', 'A', 'T', + 'B', 'E', 'E', 'H', + 'B', 'E', 'L', 'L', + 'B', 'E', 'L', 'T', + 'B', 'E', 'N', 'D', + 'B', 'E', 'T', 'A', + 'B', 'E', 'T', 'H', + 'B', 'H', 'E', 'E', + 'B', 'H', 'O', 'O', + 'B', 'I', 'E', 'P', + 'B', 'I', 'E', 'T', + 'B', 'I', 'E', 'X', + 'B', 'I', 'R', 'D', + 'B', 'I', 'R', 'U', + 'B', 'K', 'A', '-', + 'B', 'L', 'U', 'E', + 'B', 'O', 'A', 'R', + 'B', 'O', 'A', 'T', + 'B', 'O', 'D', 'Y', + 'B', 'O', 'L', 'D', + 'B', 'O', 'L', 'T', + 'B', 'O', 'N', 'E', + 'B', 'R', 'D', 'A', + 'B', 'U', 'K', 'Y', + 'B', 'U', 'L', 'L', + 'B', 'U', 'O', 'N', + 'B', 'U', 'O', 'P', + 'B', 'U', 'O', 'X', + 'B', 'U', 'R', '2', + 'B', 'U', 'R', 'U', + 'B', 'U', 'R', 'X', + 'B', 'W', 'E', 'E', + 'B', 'Y', 'R', 'X', + 'B', 'Z', 'H', 'I', + 'C', '-', '1', '8', + 'C', '-', '3', '9', + 'C', 'A', 'A', 'I', + 'C', 'A', 'D', 'A', + 'C', 'A', 'L', 'C', + 'C', 'A', 'L', 'L', + 'C', 'A', 'N', 'G', + 'C', 'A', 'P', 'O', + 'C', 'A', 'R', 'E', + 'C', 'A', 'R', 'T', + 'C', 'A', 'V', 'E', + 'C', 'A', 'Y', 'N', + 'C', 'C', 'A', 'A', + 'C', 'C', 'E', 'E', + 'C', 'C', 'H', 'A', + 'C', 'C', 'H', 'E', + 'C', 'C', 'H', 'I', + 'C', 'C', 'H', 'O', + 'C', 'C', 'H', 'U', + 'C', 'E', 'D', 'I', + 'C', 'E', 'N', 'T', + 'C', 'H', 'A', 'A', + 'C', 'H', 'A', 'D', + 'C', 'H', 'A', 'M', + 'C', 'H', 'A', 'N', + 'C', 'H', 'A', 'P', + 'C', 'H', 'A', 'R', + 'C', 'H', 'A', 'T', + 'C', 'H', 'A', 'X', + 'C', 'H', 'E', 'E', + 'C', 'H', 'E', 'H', + 'C', 'H', 'E', 'N', + 'C', 'H', 'E', 'P', + 'C', 'H', 'E', 'T', + 'C', 'H', 'E', 'X', + 'C', 'H', 'H', 'A', + 'C', 'H', 'I', 'N', + 'C', 'H', 'O', 'A', + 'C', 'H', 'O', 'E', + 'C', 'H', 'O', 'P', + 'C', 'H', 'O', 'T', + 'C', 'H', 'O', 'X', + 'C', 'H', 'U', 'O', + 'C', 'H', 'U', 'P', + 'C', 'H', 'U', 'R', + 'C', 'H', 'U', 'X', + 'C', 'H', 'W', 'A', + 'C', 'H', 'Y', 'P', + 'C', 'H', 'Y', 'R', + 'C', 'H', 'Y', 'T', + 'C', 'H', 'Y', 'X', + 'C', 'I', 'E', 'P', + 'C', 'I', 'E', 'T', + 'C', 'I', 'E', 'X', + 'C', 'I', 'T', 'Y', + 'C', 'L', 'A', 'N', + 'C', 'L', 'A', 'W', + 'C', 'L', 'E', 'F', + 'C', 'L', 'U', 'B', + 'C', 'O', 'D', 'A', + 'C', 'O', 'L', 'L', + 'C', 'O', 'M', 'B', + 'C', 'O', 'P', 'Y', + 'C', 'R', 'O', 'P', + 'C', 'U', 'B', 'E', + 'C', 'U', 'O', 'P', + 'C', 'U', 'O', 'X', + 'C', 'U', 'R', 'L', + 'C', 'U', 'R', 'X', + 'C', 'W', 'A', 'A', + 'C', 'W', 'I', 'I', + 'C', 'W', 'O', 'O', + 'C', 'Y', 'R', 'X', + 'D', 'A', 'E', 'G', + 'D', 'A', 'G', 'S', + 'D', 'A', 'I', 'R', + 'D', 'A', 'M', 'P', + 'D', 'A', 'N', 'G', + 'D', 'A', 'R', 'K', + 'D', 'A', 'R', 'T', + 'D', 'A', 'S', 'H', + 'D', 'A', 'T', 'A', + 'D', 'A', 'T', 'E', + 'D', 'D', 'A', 'A', + 'D', 'D', 'A', 'L', + 'D', 'D', 'A', 'P', + 'D', 'D', 'A', 'T', + 'D', 'D', 'A', 'X', + 'D', 'D', 'D', 'A', + 'D', 'D', 'E', 'E', + 'D', 'D', 'E', 'P', + 'D', 'D', 'E', 'X', + 'D', 'D', 'H', 'A', + 'D', 'D', 'H', 'O', + 'D', 'D', 'I', 'E', + 'D', 'D', 'I', 'P', + 'D', 'D', 'I', 'T', + 'D', 'D', 'I', 'X', + 'D', 'D', 'O', 'A', + 'D', 'D', 'O', 'P', + 'D', 'D', 'O', 'T', + 'D', 'D', 'O', 'X', + 'D', 'D', 'U', 'O', + 'D', 'D', 'U', 'P', + 'D', 'D', 'U', 'R', + 'D', 'D', 'U', 'T', + 'D', 'D', 'U', 'X', + 'D', 'D', 'W', 'A', + 'D', 'E', 'A', 'D', + 'D', 'E', 'E', 'L', + 'D', 'E', 'E', 'R', + 'D', 'E', 'H', 'I', + 'D', 'E', 'K', 'A', + 'D', 'E', 'L', 'T', + 'D', 'E', 'N', 'G', + 'D', 'E', 'S', 'I', + 'D', 'E', 'Z', 'H', + 'D', 'H', 'A', 'L', + 'D', 'H', 'E', 'E', + 'D', 'H', 'H', 'A', + 'D', 'H', 'H', 'E', + 'D', 'H', 'H', 'I', + 'D', 'H', 'H', 'O', + 'D', 'H', 'H', 'U', + 'D', 'H', 'O', 'O', + 'D', 'I', 'E', 'P', + 'D', 'I', 'E', 'X', + 'D', 'I', 'G', 'A', + 'D', 'I', 'M', '2', + 'D', 'I', 'N', 'G', + 'D', 'I', 'S', 'C', + 'D', 'I', 'S', 'H', + 'D', 'K', 'A', 'R', + 'D', 'L', 'E', 'E', + 'D', 'O', '-', 'O', + 'D', 'O', 'E', 'S', + 'D', 'O', 'I', 'T', + 'D', 'O', 'N', 'G', + 'D', 'O', 'O', 'R', + 'D', 'O', 'R', 'U', + 'D', 'O', 'T', 'S', + 'D', 'O', 'V', 'E', + 'D', 'O', 'W', 'N', + 'D', 'R', 'I', 'L', + 'D', 'R', 'U', 'M', + 'D', 'U', 'B', '2', + 'D', 'U', 'N', '3', + 'D', 'U', 'N', '4', + 'D', 'U', 'N', 'G', + 'D', 'U', 'O', 'X', + 'D', 'U', 'R', '2', + 'D', 'U', 'R', 'X', + 'D', 'Y', 'E', 'H', + 'D', 'Z', 'E', 'E', + 'D', 'Z', 'H', 'A', + 'D', 'Z', 'H', 'E', + 'D', 'Z', 'J', 'E', + 'D', 'Z', 'W', 'E', + 'D', 'Z', 'Z', 'E', + 'E', 'A', 'S', 'E', + 'E', 'A', 'S', 'T', + 'E', 'D', 'I', 'N', + 'E', 'G', 'I', 'R', + 'E', 'N', 'O', 'S', + 'E', 'O', '-', 'O', + 'E', 'O', '-', 'U', + 'E', 'R', 'E', 'N', + 'E', 'S', 'H', '2', + 'E', 'U', '-', 'U', + 'E', 'U', 'R', 'O', + 'E', 'V', 'E', 'N', + 'E', 'Z', 'E', 'N', + 'F', 'A', 'A', 'I', + 'F', 'A', 'C', 'E', + 'F', 'A', 'N', 'G', + 'F', 'E', 'E', 'D', + 'F', 'E', 'H', 'U', + 'F', 'E', 'N', 'G', + 'F', 'E', 'O', 'H', + 'F', 'I', 'L', 'E', + 'F', 'I', 'L', 'L', + 'F', 'I', 'R', 'E', + 'F', 'I', 'S', 'H', + 'F', 'I', 'T', 'A', + 'F', 'I', 'V', 'E', + 'F', 'L', 'A', 'G', + 'F', 'L', 'A', 'T', + 'F', 'L', 'I', 'P', + 'F', 'O', 'O', 'T', + 'F', 'O', 'R', 'K', + 'F', 'O', 'R', 'M', + 'F', 'O', 'U', 'R', + 'F', 'R', 'E', 'E', + 'F', 'R', 'O', 'G', + 'F', 'R', 'O', 'M', + 'F', 'U', 'L', 'L', + 'F', 'U', 'R', 'X', + 'F', 'U', 'S', 'A', + 'F', 'U', 'S', 'E', + 'F', 'W', 'A', 'A', + 'F', 'W', 'E', 'E', + 'G', 'A', 'B', 'A', + 'G', 'A', 'L', 'I', + 'G', 'A', 'M', 'L', + 'G', 'A', 'N', '2', + 'G', 'A', 'R', '3', + 'G', 'A', 'T', 'E', + 'G', 'B', 'E', 'E', + 'G', 'B', 'E', 'N', + 'G', 'B', 'O', 'N', + 'G', 'B', 'O', 'O', + 'G', 'C', 'A', 'N', + 'G', 'C', 'I', 'G', + 'G', 'D', 'A', 'N', + 'G', 'E', 'A', 'R', + 'G', 'E', 'B', 'A', + 'G', 'E', 'B', 'O', + 'G', 'E', 'D', 'E', + 'G', 'E', 'T', 'A', + 'G', 'G', 'A', 'A', + 'G', 'G', 'A', 'P', + 'G', 'G', 'A', 'T', + 'G', 'G', 'A', 'X', + 'G', 'G', 'E', 'E', + 'G', 'G', 'E', 'P', + 'G', 'G', 'E', 'T', + 'G', 'G', 'E', 'X', + 'G', 'G', 'I', 'E', + 'G', 'G', 'I', 'T', + 'G', 'G', 'I', 'X', + 'G', 'G', 'O', 'P', + 'G', 'G', 'O', 'T', + 'G', 'G', 'O', 'X', + 'G', 'G', 'U', 'O', + 'G', 'G', 'U', 'P', + 'G', 'G', 'U', 'R', + 'G', 'G', 'U', 'T', + 'G', 'G', 'U', 'X', + 'G', 'G', 'W', 'A', + 'G', 'G', 'W', 'E', + 'G', 'G', 'W', 'I', + 'G', 'H', 'A', 'D', + 'G', 'H', 'A', 'N', + 'G', 'H', 'E', 'E', + 'G', 'H', 'H', 'A', + 'G', 'H', 'W', 'A', + 'G', 'I', 'B', 'A', + 'G', 'I', 'E', 'P', + 'G', 'I', 'E', 'T', + 'G', 'I', 'E', 'X', + 'G', 'I', 'G', 'A', + 'G', 'I', 'R', '2', + 'G', 'I', 'R', '3', + 'G', 'I', 'S', 'H', + 'G', 'O', 'A', 'L', + 'G', 'O', 'L', 'D', + 'G', 'O', 'N', 'G', + 'G', 'O', 'R', 'A', + 'G', 'O', 'R', 'T', + 'G', 'R', 'A', 'M', + 'G', 'S', 'U', 'M', + 'G', 'T', 'E', 'R', + 'G', 'U', 'E', 'H', + 'G', 'U', 'N', 'U', + 'G', 'U', 'O', 'P', + 'G', 'U', 'O', 'T', + 'G', 'U', 'O', 'X', + 'G', 'U', 'R', '7', + 'G', 'U', 'R', 'X', + 'G', 'W', 'A', 'A', + 'G', 'W', 'E', 'E', + 'G', 'Y', 'A', 'A', + 'G', 'Y', 'A', 'S', + 'G', 'Y', 'E', 'E', + 'G', 'Y', 'F', 'U', + 'G', 'Y', 'O', 'N', + 'H', 'A', 'G', 'L', + 'H', 'A', 'I', 'R', + 'H', 'A', 'L', 'F', + 'H', 'A', 'N', 'D', + 'H', 'A', 'R', 'D', + 'H', 'A', 'T', 'E', + 'H', 'A', 'V', 'E', + 'H', 'E', 'A', 'D', + 'H', 'E', 'L', 'M', + 'H', 'E', 'M', 'P', + 'H', 'E', 'N', 'G', + 'H', 'E', 'R', 'U', + 'H', 'E', 'T', 'A', + 'H', 'E', 'T', 'H', + 'H', 'H', 'A', 'A', + 'H', 'H', 'E', 'E', + 'H', 'H', 'W', 'A', + 'H', 'I', 'D', 'E', + 'H', 'I', 'E', 'X', + 'H', 'I', 'G', 'H', + 'H', 'I', 'Z', 'B', + 'H', 'L', 'A', 'P', + 'H', 'L', 'A', 'T', + 'H', 'L', 'A', 'X', + 'H', 'L', 'E', 'P', + 'H', 'L', 'E', 'X', + 'H', 'L', 'I', 'E', + 'H', 'L', 'I', 'P', + 'H', 'L', 'I', 'T', + 'H', 'L', 'I', 'X', + 'H', 'L', 'O', 'P', + 'H', 'L', 'O', 'X', + 'H', 'L', 'U', 'O', + 'H', 'L', 'U', 'P', + 'H', 'L', 'U', 'R', + 'H', 'L', 'U', 'T', + 'H', 'L', 'U', 'X', + 'H', 'L', 'Y', 'P', + 'H', 'L', 'Y', 'R', + 'H', 'L', 'Y', 'T', + 'H', 'L', 'Y', 'X', + 'H', 'M', 'A', 'P', + 'H', 'M', 'A', 'T', + 'H', 'M', 'A', 'X', + 'H', 'M', 'I', 'E', + 'H', 'M', 'I', 'P', + 'H', 'M', 'I', 'T', + 'H', 'M', 'I', 'X', + 'H', 'M', 'O', 'P', + 'H', 'M', 'O', 'T', + 'H', 'M', 'O', 'X', + 'H', 'M', 'U', 'O', + 'H', 'M', 'U', 'P', + 'H', 'M', 'U', 'R', + 'H', 'M', 'U', 'T', + 'H', 'M', 'U', 'X', + 'H', 'M', 'Y', 'P', + 'H', 'M', 'Y', 'R', + 'H', 'M', 'Y', 'X', + 'H', 'N', 'A', 'P', + 'H', 'N', 'A', 'T', + 'H', 'N', 'A', 'X', + 'H', 'N', 'E', 'P', + 'H', 'N', 'E', 'X', + 'H', 'N', 'I', 'E', + 'H', 'N', 'I', 'P', + 'H', 'N', 'I', 'T', + 'H', 'N', 'I', 'X', + 'H', 'N', 'O', 'P', + 'H', 'N', 'O', 'T', + 'H', 'N', 'O', 'X', + 'H', 'N', 'U', 'O', + 'H', 'N', 'U', 'T', + 'H', 'O', 'O', 'K', + 'H', 'O', 'O', 'N', + 'H', 'O', 'R', 'I', + 'H', 'O', 'R', 'N', + 'H', 'O', 'T', 'A', + 'H', 'O', 'U', 'R', + 'H', 'P', 'W', 'G', + 'H', 'U', 'B', '2', + 'H', 'U', 'L', '2', + 'H', 'U', 'N', 'G', + 'H', 'U', 'O', 'P', + 'H', 'U', 'O', 'T', + 'H', 'U', 'O', 'X', + 'H', 'W', 'E', 'E', + 'H', 'X', 'A', 'P', + 'H', 'X', 'A', 'T', + 'H', 'X', 'A', 'X', + 'H', 'X', 'E', 'P', + 'H', 'X', 'E', 'X', + 'H', 'X', 'I', 'E', + 'H', 'X', 'I', 'P', + 'H', 'X', 'I', 'T', + 'H', 'X', 'I', 'X', + 'H', 'X', 'O', 'P', + 'H', 'X', 'O', 'T', + 'H', 'X', 'O', 'X', + 'H', 'X', 'U', 'O', + 'H', 'X', 'W', 'G', + 'H', 'Z', 'W', 'G', + 'H', 'Z', 'Z', 'P', + 'H', 'Z', 'Z', 'Z', + 'I', '-', 'E', 'U', + 'I', '-', 'Y', 'A', + 'I', 'D', 'I', 'M', + 'I', 'D', 'L', 'E', + 'I', 'F', 'I', 'N', + 'I', 'L', 'U', 'T', + 'I', 'L', 'U', 'Y', + 'I', 'M', 'I', 'N', + 'I', 'N', 'C', 'H', + 'I', 'N', 'N', 'N', + 'I', 'N', 'T', 'I', + 'I', 'O', 'T', 'A', + 'I', 'S', 'A', 'Z', + 'I', 'S', 'O', 'N', + 'I', 'T', 'E', 'M', + 'I', 'U', 'J', 'A', + 'I', 'W', 'A', 'Z', + 'I', 'Z', 'H', 'E', + 'J', 'A', 'D', 'E', + 'J', 'E', 'E', 'M', + 'J', 'E', 'R', 'A', + 'J', 'H', 'A', 'N', + 'J', 'H', 'E', 'H', + 'J', 'I', 'E', 'P', + 'J', 'I', 'E', 'T', + 'J', 'I', 'E', 'X', + 'J', 'J', 'E', 'E', + 'J', 'J', 'I', 'E', + 'J', 'J', 'I', 'P', + 'J', 'J', 'I', 'T', + 'J', 'J', 'I', 'X', + 'J', 'J', 'O', 'P', + 'J', 'J', 'O', 'T', + 'J', 'J', 'O', 'X', + 'J', 'J', 'U', 'O', + 'J', 'J', 'U', 'P', + 'J', 'J', 'U', 'R', + 'J', 'J', 'U', 'T', + 'J', 'J', 'U', 'X', + 'J', 'J', 'Y', 'P', + 'J', 'J', 'Y', 'T', + 'J', 'J', 'Y', 'X', + 'J', 'O', 'I', 'N', + 'J', 'O', 'N', 'A', + 'J', 'O', 'N', 'G', + 'J', 'U', 'L', 'Y', + 'J', 'U', 'N', 'E', + 'J', 'U', 'N', 'O', + 'J', 'U', 'O', 'P', + 'J', 'U', 'O', 'T', + 'J', 'U', 'O', 'X', + 'J', 'U', 'R', 'X', + 'J', 'Y', 'R', 'X', + 'K', 'A', 'A', 'F', + 'K', 'A', 'A', 'I', + 'K', 'A', 'B', 'A', + 'K', 'A', 'D', '2', + 'K', 'A', 'D', '3', + 'K', 'A', 'D', '4', + 'K', 'A', 'D', '5', + 'K', 'A', 'K', 'O', + 'K', 'A', 'M', '2', + 'K', 'A', 'M', '4', + 'K', 'A', 'N', 'A', + 'K', 'A', 'N', 'G', + 'K', 'A', 'P', 'A', + 'K', 'A', 'P', 'H', + 'K', 'A', 'P', 'O', + 'K', 'A', 'T', 'O', + 'K', 'A', 'U', 'N', + 'K', 'C', 'A', 'L', + 'K', 'H', 'A', 'A', + 'K', 'H', 'A', 'H', + 'K', 'H', 'A', 'I', + 'K', 'H', 'A', 'N', + 'K', 'H', 'A', 'R', + 'K', 'H', 'E', 'E', + 'K', 'H', 'E', 'I', + 'K', 'H', 'H', 'A', + 'K', 'H', 'O', 'N', + 'K', 'H', 'O', 'T', + 'K', 'I', 'C', 'K', + 'K', 'I', 'E', 'P', + 'K', 'I', 'E', 'X', + 'K', 'I', 'N', 'G', + 'K', 'I', 'R', 'O', + 'K', 'I', 'S', 'H', + 'K', 'K', 'E', 'E', + 'K', 'O', 'E', 'T', + 'K', 'O', 'M', 'I', + 'K', 'O', 'T', 'O', + 'K', 'P', 'A', 'N', + 'K', 'P', 'E', 'E', + 'K', 'P', 'E', 'N', + 'K', 'P', 'O', 'O', + 'K', 'S', 'S', 'A', + 'K', 'U', 'N', 'G', + 'K', 'U', 'O', 'P', + 'K', 'U', 'O', 'X', + 'K', 'U', 'R', 'T', + 'K', 'U', 'R', 'X', + 'K', 'U', 'U', 'H', + 'K', 'W', 'A', 'A', + 'K', 'W', 'E', 'E', + 'K', 'W', 'I', 'I', + 'K', 'W', 'O', 'O', + 'K', 'X', 'A', 'A', + 'K', 'X', 'E', 'E', + 'K', 'X', 'W', 'A', + 'K', 'X', 'W', 'E', + 'K', 'X', 'W', 'I', + 'K', 'Y', 'A', 'A', + 'K', 'Y', 'E', 'E', + 'L', 'A', 'A', 'I', + 'L', 'A', 'A', 'N', + 'L', 'A', 'C', 'A', + 'L', 'A', 'C', 'K', + 'L', 'A', 'E', 'V', + 'L', 'A', 'G', 'U', + 'L', 'A', 'K', 'E', + 'L', 'A', 'M', 'D', + 'L', 'A', 'M', 'E', + 'L', 'A', 'S', 'T', + 'L', 'A', 'T', 'E', + 'L', 'A', 'Z', 'Y', + 'L', 'D', 'A', 'N', + 'L', 'E', 'A', 'F', + 'L', 'E', 'E', 'K', + 'L', 'E', 'F', 'T', + 'L', 'E', 'G', 'S', + 'L', 'E', 'S', 'S', + 'L', 'E', 'Z', 'H', + 'L', 'H', 'A', 'A', + 'L', 'H', 'A', 'G', + 'L', 'H', 'E', 'E', + 'L', 'H', 'I', 'I', + 'L', 'H', 'O', 'O', + 'L', 'I', 'E', 'P', + 'L', 'I', 'E', 'T', + 'L', 'I', 'E', 'X', + 'L', 'I', 'F', 'E', + 'L', 'I', 'L', 'Y', + 'L', 'I', 'N', 'E', + 'L', 'I', 'N', 'G', + 'L', 'I', 'N', 'K', + 'L', 'I', 'R', 'A', + 'L', 'I', 'S', 'H', + 'L', 'I', 'W', 'N', + 'L', 'L', 'L', 'A', + 'L', 'O', 'G', 'R', + 'L', 'O', 'L', 'L', + 'L', 'O', 'N', 'G', + 'L', 'O', 'O', 'P', + 'L', 'O', 'O', 'T', + 'L', 'U', 'I', 'S', + 'L', 'U', 'O', 'P', + 'L', 'U', 'O', 'T', + 'L', 'U', 'O', 'X', + 'L', 'U', 'R', 'X', + 'L', 'W', 'A', 'A', + 'L', 'W', 'I', 'I', + 'L', 'W', 'O', 'O', + 'L', 'Y', 'R', 'X', + 'M', 'A', 'A', 'I', + 'M', 'A', 'D', 'U', + 'M', 'A', 'L', 'E', + 'M', 'A', 'R', 'E', + 'M', 'A', 'R', 'K', + 'M', 'A', 'S', 'H', + 'M', 'A', 'S', 'U', + 'M', 'B', 'E', 'E', + 'M', 'B', 'O', 'O', + 'M', 'C', 'H', 'U', + 'M', 'D', 'U', 'N', + 'M', 'E', 'A', 'T', + 'M', 'E', 'E', 'M', + 'M', 'E', 'E', 'T', + 'M', 'E', 'G', 'A', + 'M', 'E', 'R', 'I', + 'M', 'E', 'S', 'H', + 'M', 'E', 'S', 'I', + 'M', 'E', 'S', 'O', + 'M', 'E', 'T', 'A', + 'M', 'G', 'A', 'P', + 'M', 'G', 'A', 'T', + 'M', 'G', 'A', 'X', + 'M', 'G', 'B', 'A', + 'M', 'G', 'B', 'E', + 'M', 'G', 'B', 'I', + 'M', 'G', 'B', 'O', + 'M', 'G', 'B', 'U', + 'M', 'G', 'E', 'P', + 'M', 'G', 'E', 'X', + 'M', 'G', 'I', 'E', + 'M', 'G', 'O', 'P', + 'M', 'G', 'O', 'T', + 'M', 'G', 'O', 'X', + 'M', 'G', 'U', 'O', + 'M', 'G', 'U', 'P', + 'M', 'G', 'U', 'R', + 'M', 'G', 'U', 'T', + 'M', 'G', 'U', 'X', + 'M', 'I', 'E', 'P', + 'M', 'I', 'E', 'X', + 'M', 'I', 'I', 'N', + 'M', 'I', 'L', 'L', + 'M', 'I', 'M', 'E', + 'M', 'I', 'N', 'Y', + 'M', 'I', 'R', 'I', + 'M', 'N', 'A', 'S', + 'M', 'O', 'O', 'N', + 'M', 'U', 'A', 'N', + 'M', 'U', 'C', 'H', + 'M', 'U', 'I', 'N', + 'M', 'U', 'O', 'P', + 'M', 'U', 'O', 'T', + 'M', 'U', 'O', 'X', + 'M', 'U', 'O', 'Y', + 'M', 'U', 'R', 'X', + 'M', 'U', 'S', 'H', + 'M', 'W', 'A', 'A', + 'M', 'W', 'E', 'E', + 'M', 'W', 'I', 'I', + 'M', 'W', 'O', 'O', + 'N', 'A', 'A', 'I', + 'N', 'A', 'G', 'A', + 'N', 'A', 'M', '2', + 'N', 'A', 'M', 'E', + 'N', 'A', 'N', 'A', + 'N', 'A', 'N', 'D', + 'N', 'A', 'N', 'O', + 'N', 'A', 'O', 'S', + 'N', 'A', 'U', 'D', + 'N', 'B', 'A', 'P', + 'N', 'B', 'A', 'T', + 'N', 'B', 'A', 'X', + 'N', 'B', 'I', 'E', + 'N', 'B', 'I', 'P', + 'N', 'B', 'I', 'T', + 'N', 'B', 'I', 'X', + 'N', 'B', 'O', 'P', + 'N', 'B', 'O', 'T', + 'N', 'B', 'O', 'X', + 'N', 'B', 'U', 'P', + 'N', 'B', 'U', 'R', + 'N', 'B', 'U', 'T', + 'N', 'B', 'U', 'X', + 'N', 'B', 'Y', 'P', + 'N', 'B', 'Y', 'R', + 'N', 'B', 'Y', 'T', + 'N', 'B', 'Y', 'X', + 'N', 'D', 'A', 'P', + 'N', 'D', 'A', 'T', + 'N', 'D', 'A', 'X', + 'N', 'D', 'E', 'E', + 'N', 'D', 'E', 'P', + 'N', 'D', 'E', 'X', + 'N', 'D', 'I', 'E', + 'N', 'D', 'I', 'P', + 'N', 'D', 'I', 'T', + 'N', 'D', 'I', 'X', + 'N', 'D', 'O', 'O', + 'N', 'D', 'O', 'P', + 'N', 'D', 'O', 'T', + 'N', 'D', 'O', 'X', + 'N', 'D', 'U', 'P', + 'N', 'D', 'U', 'R', + 'N', 'D', 'U', 'T', + 'N', 'D', 'U', 'X', + 'N', 'E', 'X', 'T', + 'N', 'G', 'A', 'A', + 'N', 'G', 'A', 'I', + 'N', 'G', 'A', 'N', + 'N', 'G', 'A', 'P', + 'N', 'G', 'A', 'S', + 'N', 'G', 'A', 'T', + 'N', 'G', 'A', 'X', + 'N', 'G', 'E', 'N', + 'N', 'G', 'E', 'P', + 'N', 'G', 'E', 'X', + 'N', 'G', 'G', 'A', + 'N', 'G', 'G', 'E', + 'N', 'G', 'G', 'I', + 'N', 'G', 'G', 'O', + 'N', 'G', 'G', 'U', + 'N', 'G', 'I', 'E', + 'N', 'G', 'I', 'I', + 'N', 'G', 'K', 'A', + 'N', 'G', 'O', 'N', + 'N', 'G', 'O', 'O', + 'N', 'G', 'O', 'P', + 'N', 'G', 'O', 'T', + 'N', 'G', 'O', 'X', + 'N', 'G', 'U', 'E', + 'N', 'G', 'U', 'O', + 'N', 'H', 'J', 'A', + 'N', 'H', 'U', 'E', + 'N', 'I', 'E', 'P', + 'N', 'I', 'E', 'X', + 'N', 'I', 'N', 'E', + 'N', 'I', 'O', 'N', + 'N', 'J', 'E', 'E', + 'N', 'J', 'I', 'E', + 'N', 'J', 'I', 'P', + 'N', 'J', 'I', 'T', + 'N', 'J', 'I', 'X', + 'N', 'J', 'O', 'O', + 'N', 'J', 'O', 'P', + 'N', 'J', 'O', 'T', + 'N', 'J', 'O', 'X', + 'N', 'J', 'U', 'O', + 'N', 'J', 'U', 'P', + 'N', 'J', 'U', 'R', + 'N', 'J', 'U', 'X', + 'N', 'J', 'Y', 'P', + 'N', 'J', 'Y', 'R', + 'N', 'J', 'Y', 'T', + 'N', 'J', 'Y', 'X', + 'N', 'N', 'G', 'A', + 'N', 'N', 'G', 'I', + 'N', 'N', 'G', 'O', + 'N', 'N', 'N', 'A', + 'N', 'N', 'Y', 'A', + 'N', 'O', 'D', 'E', + 'N', 'O', 'O', 'N', + 'N', 'O', 'S', 'E', + 'N', 'O', 'T', 'E', + 'N', 'R', 'A', 'P', + 'N', 'R', 'A', 'T', + 'N', 'R', 'A', 'X', + 'N', 'R', 'E', 'P', + 'N', 'R', 'E', 'T', + 'N', 'R', 'E', 'X', + 'N', 'R', 'O', 'P', + 'N', 'R', 'O', 'X', + 'N', 'R', 'U', 'P', + 'N', 'R', 'U', 'R', + 'N', 'R', 'U', 'T', + 'N', 'R', 'U', 'X', + 'N', 'R', 'Y', 'P', + 'N', 'R', 'Y', 'R', + 'N', 'R', 'Y', 'T', + 'N', 'R', 'Y', 'X', + 'N', 'U', '1', '1', + 'N', 'U', 'L', 'L', + 'N', 'U', 'O', 'P', + 'N', 'U', 'O', 'X', + 'N', 'U', 'R', 'X', + 'N', 'U', 'U', 'N', + 'N', 'W', 'A', 'A', + 'N', 'Y', 'A', 'A', + 'N', 'Y', 'C', 'A', + 'N', 'Y', 'E', 'E', + 'N', 'Y', 'E', 'H', + 'N', 'Y', 'E', 'T', + 'N', 'Y', 'I', 'E', + 'N', 'Y', 'I', 'P', + 'N', 'Y', 'I', 'S', + 'N', 'Y', 'I', 'T', + 'N', 'Y', 'I', 'X', + 'N', 'Y', 'J', 'A', + 'N', 'Y', 'O', 'A', + 'N', 'Y', 'O', 'O', + 'N', 'Y', 'O', 'P', + 'N', 'Y', 'O', 'T', + 'N', 'Y', 'O', 'X', + 'N', 'Y', 'U', 'O', + 'N', 'Y', 'U', 'P', + 'N', 'Y', 'U', 'T', + 'N', 'Y', 'U', 'X', + 'N', 'Y', 'W', 'A', + 'N', 'Z', 'A', 'P', + 'N', 'Z', 'A', 'T', + 'N', 'Z', 'A', 'X', + 'N', 'Z', 'E', 'X', + 'N', 'Z', 'I', 'E', + 'N', 'Z', 'I', 'P', + 'N', 'Z', 'I', 'T', + 'N', 'Z', 'I', 'X', + 'N', 'Z', 'O', 'P', + 'N', 'Z', 'O', 'X', + 'N', 'Z', 'U', 'O', + 'N', 'Z', 'U', 'P', + 'N', 'Z', 'U', 'R', + 'N', 'Z', 'U', 'X', + 'N', 'Z', 'Y', 'P', + 'N', 'Z', 'Y', 'R', + 'N', 'Z', 'Y', 'T', + 'N', 'Z', 'Y', 'X', + 'O', '-', 'E', 'O', + 'O', '-', 'Y', 'E', + 'O', 'B', 'O', 'L', + 'O', 'K', 'T', 'O', + 'O', 'N', 'S', 'U', + 'O', 'O', 'M', 'U', + 'O', 'O', 'Z', 'E', + 'O', 'P', 'E', 'N', + 'O', 'V', 'E', 'R', + 'O', 'X', 'I', 'A', + 'P', 'A', 'A', 'I', + 'P', 'A', 'G', 'E', + 'P', 'A', 'L', 'M', + 'P', 'A', 'N', 'G', + 'P', 'A', 'R', 'A', + 'P', 'A', 'R', 'T', + 'P', 'A', 'T', 'H', + 'P', 'A', 'W', 'N', + 'P', 'E', 'E', 'P', + 'P', 'E', 'S', 'O', + 'P', 'H', 'A', 'A', + 'P', 'H', 'A', 'N', + 'P', 'H', 'A', 'R', + 'P', 'H', 'E', 'E', + 'P', 'H', 'O', 'A', + 'P', 'H', 'U', 'R', + 'P', 'H', 'W', 'A', + 'P', 'I', 'C', 'K', + 'P', 'I', 'E', 'P', + 'P', 'I', 'E', 'X', + 'P', 'I', 'K', 'O', + 'P', 'I', 'N', 'G', + 'P', 'I', 'W', 'R', + 'P', 'L', 'A', 'K', + 'P', 'L', 'O', 'W', + 'P', 'L', 'U', 'K', + 'P', 'L', 'U', 'M', + 'P', 'L', 'U', 'S', + 'P', 'O', 'L', 'E', + 'P', 'O', 'L', 'I', + 'P', 'R', 'A', 'M', + 'P', 'U', 'N', 'G', + 'P', 'U', 'O', 'P', + 'P', 'U', 'O', 'X', + 'P', 'U', 'R', 'X', + 'P', 'W', 'A', 'A', + 'P', 'W', 'E', 'E', + 'P', 'W', 'I', 'I', + 'P', 'W', 'O', 'O', + 'P', 'Y', 'R', 'X', + 'Q', 'A', 'A', 'F', + 'Q', 'A', 'A', 'I', + 'Q', 'A', 'L', 'A', + 'Q', 'A', 'P', 'H', + 'Q', 'H', 'A', 'A', + 'Q', 'H', 'E', 'E', + 'Q', 'H', 'W', 'A', + 'Q', 'H', 'W', 'E', + 'Q', 'H', 'W', 'I', + 'Q', 'I', 'E', 'P', + 'Q', 'I', 'E', 'T', + 'Q', 'I', 'E', 'X', + 'Q', 'O', 'P', 'A', + 'Q', 'U', 'A', 'D', + 'Q', 'U', 'O', 'P', + 'Q', 'U', 'O', 'T', + 'Q', 'U', 'O', 'X', + 'Q', 'U', 'R', 'X', + 'Q', 'U', 'U', 'V', + 'Q', 'W', 'A', 'A', + 'Q', 'W', 'E', 'E', + 'Q', 'Y', 'A', 'A', + 'Q', 'Y', 'E', 'E', + 'Q', 'Y', 'R', 'X', + 'R', 'A', 'A', 'I', + 'R', 'A', 'D', 'I', + 'R', 'A', 'F', 'E', + 'R', 'A', 'I', 'N', + 'R', 'A', 'M', 'S', + 'R', 'A', 'Y', 'S', + 'R', 'D', 'E', 'L', + 'R', 'E', 'I', 'D', + 'R', 'E', 'M', 'U', + 'R', 'E', 'P', 'A', + 'R', 'E', 'S', 'H', + 'R', 'E', 'S', 'T', + 'R', 'G', 'Y', 'A', + 'R', 'I', 'A', 'L', + 'R', 'I', 'C', 'E', + 'R', 'I', 'E', 'L', + 'R', 'I', 'N', 'G', + 'R', 'I', 'R', 'A', + 'R', 'I', 'S', 'H', + 'R', 'J', 'E', 'S', + 'R', 'N', 'A', 'M', + 'R', 'O', 'A', 'R', + 'R', 'O', 'O', 'F', + 'R', 'O', 'O', 'K', + 'R', 'O', 'O', 'T', + 'R', 'O', 'S', 'H', + 'R', 'R', 'A', 'X', + 'R', 'R', 'E', 'H', + 'R', 'R', 'E', 'P', + 'R', 'R', 'E', 'T', + 'R', 'R', 'E', 'X', + 'R', 'R', 'O', 'P', + 'R', 'R', 'O', 'T', + 'R', 'R', 'O', 'X', + 'R', 'R', 'U', 'O', + 'R', 'R', 'U', 'P', + 'R', 'R', 'U', 'R', + 'R', 'R', 'U', 'T', + 'R', 'R', 'U', 'X', + 'R', 'R', 'Y', 'P', + 'R', 'R', 'Y', 'R', + 'R', 'R', 'Y', 'T', + 'R', 'R', 'Y', 'X', + 'R', 'U', 'I', 'S', + 'R', 'U', 'L', 'E', + 'R', 'U', 'O', 'P', + 'R', 'U', 'O', 'X', + 'R', 'U', 'R', 'X', + 'R', 'U', 'S', 'I', + 'R', 'W', 'A', 'A', + 'R', 'Y', 'R', 'X', + 'S', 'A', '-', 'I', + 'S', 'A', 'A', 'I', + 'S', 'A', 'D', 'E', + 'S', 'A', 'G', 'A', + 'S', 'A', 'I', 'L', + 'S', 'A', 'L', 'A', + 'S', 'A', 'L', 'T', + 'S', 'A', 'P', 'A', + 'S', 'A', 'R', 'A', + 'S', 'A', 'R', 'I', + 'S', 'B', 'U', 'B', + 'S', 'C', 'A', 'N', + 'S', 'C', 'W', 'A', + 'S', 'E', 'A', 'L', + 'S', 'E', 'E', 'N', + 'S', 'E', 'L', 'F', + 'S', 'E', 'M', 'K', + 'S', 'G', 'A', 'B', + 'S', 'G', 'A', 'W', + 'S', 'G', 'O', 'R', + 'S', 'G', 'R', 'A', + 'S', 'H', 'A', '3', + 'S', 'H', 'A', '6', + 'S', 'H', 'A', 'A', + 'S', 'H', 'A', 'D', + 'S', 'H', 'A', 'N', + 'S', 'H', 'A', 'P', + 'S', 'H', 'A', 'T', + 'S', 'H', 'A', 'X', + 'S', 'H', 'E', 'E', + 'S', 'H', 'E', 'I', + 'S', 'H', 'E', 'N', + 'S', 'H', 'E', 'P', + 'S', 'H', 'E', 'T', + 'S', 'H', 'E', 'X', + 'S', 'H', 'H', 'A', + 'S', 'H', 'I', 'D', + 'S', 'H', 'I', 'I', + 'S', 'H', 'I', 'M', + 'S', 'H', 'I', 'N', + 'S', 'H', 'I', 'P', + 'S', 'H', 'I', 'R', + 'S', 'H', 'O', 'A', + 'S', 'H', 'O', 'E', + 'S', 'H', 'O', 'G', + 'S', 'H', 'O', 'O', + 'S', 'H', 'O', 'P', + 'S', 'H', 'O', 'T', + 'S', 'H', 'O', 'X', + 'S', 'H', 'T', 'A', + 'S', 'H', 'U', '2', + 'S', 'H', 'U', 'O', + 'S', 'H', 'U', 'P', + 'S', 'H', 'U', 'R', + 'S', 'H', 'U', 'T', + 'S', 'H', 'U', 'X', + 'S', 'H', 'W', 'A', + 'S', 'H', 'W', 'E', + 'S', 'H', 'W', 'I', + 'S', 'H', 'W', 'O', + 'S', 'H', 'Y', 'A', + 'S', 'H', 'Y', 'P', + 'S', 'H', 'Y', 'R', + 'S', 'H', 'Y', 'T', + 'S', 'H', 'Y', 'X', + 'S', 'I', 'B', 'E', + 'S', 'I', 'E', 'P', + 'S', 'I', 'E', 'X', + 'S', 'I', 'G', '4', + 'S', 'I', 'G', 'N', + 'S', 'I', 'K', '2', + 'S', 'I', 'K', 'I', + 'S', 'I', 'L', 'K', + 'S', 'I', 'M', 'A', + 'S', 'I', 'N', 'E', + 'S', 'I', 'O', 'S', + 'S', 'K', 'I', 'N', + 'S', 'K', 'W', 'A', + 'S', 'L', 'U', 'R', + 'S', 'N', 'A', 'P', + 'S', 'O', 'F', 'T', + 'S', 'P', 'O', 'T', + 'S', 'P', 'W', 'A', + 'S', 'S', 'A', 'A', + 'S', 'S', 'A', 'P', + 'S', 'S', 'A', 'T', + 'S', 'S', 'A', 'X', + 'S', 'S', 'E', 'E', + 'S', 'S', 'E', 'P', + 'S', 'S', 'E', 'X', + 'S', 'S', 'I', 'E', + 'S', 'S', 'I', 'P', + 'S', 'S', 'I', 'T', + 'S', 'S', 'I', 'X', + 'S', 'S', 'O', 'P', + 'S', 'S', 'O', 'T', + 'S', 'S', 'O', 'X', + 'S', 'S', 'U', 'P', + 'S', 'S', 'U', 'T', + 'S', 'S', 'U', 'X', + 'S', 'S', 'Y', 'P', + 'S', 'S', 'Y', 'R', + 'S', 'S', 'Y', 'T', + 'S', 'S', 'Y', 'X', + 'S', 'T', 'A', 'N', + 'S', 'T', 'A', 'R', + 'S', 'T', 'E', 'M', + 'S', 'T', 'E', 'P', + 'S', 'T', 'O', 'P', + 'S', 'T', 'W', 'A', + 'S', 'U', 'D', '2', + 'S', 'U', 'I', 'T', + 'S', 'U', 'K', 'U', + 'S', 'U', 'N', 'G', + 'S', 'U', 'O', 'P', + 'S', 'U', 'O', 'X', + 'S', 'U', 'R', '9', + 'S', 'U', 'R', 'E', + 'S', 'U', 'R', 'X', + 'S', 'W', 'A', 'A', + 'S', 'W', 'I', 'I', + 'S', 'W', 'O', 'O', + 'S', 'Y', 'R', 'X', + 'S', 'Z', 'A', 'A', + 'S', 'Z', 'E', 'E', + 'S', 'Z', 'W', 'A', + 'S', 'Z', 'W', 'G', + 'T', 'A', 'A', 'I', + 'T', 'A', 'C', 'K', + 'T', 'A', 'I', 'L', + 'T', 'A', 'K', '4', + 'T', 'A', 'K', 'E', + 'T', 'A', 'L', 'L', + 'T', 'A', 'P', 'E', + 'T', 'A', 'W', 'A', + 'T', 'C', 'H', 'E', + 'T', 'E', '-', 'U', + 'T', 'E', 'N', 'S', + 'T', 'E', 'N', 'T', + 'T', 'E', 'N', 'U', + 'T', 'E', 'S', 'H', + 'T', 'E', 'T', 'H', + 'T', 'E', 'X', 'T', + 'T', 'H', 'A', 'A', + 'T', 'H', 'A', 'I', + 'T', 'H', 'A', 'L', + 'T', 'H', 'A', 'N', + 'T', 'H', 'E', 'E', + 'T', 'H', 'E', 'H', + 'T', 'H', 'E', 'N', + 'T', 'H', 'E', 'S', + 'T', 'H', 'E', 'Y', + 'T', 'H', 'I', 'I', + 'T', 'H', 'I', 'N', + 'T', 'H', 'O', 'A', + 'T', 'H', 'O', 'O', + 'T', 'H', 'W', 'A', + 'T', 'I', 'C', 'K', + 'T', 'I', 'E', 'P', + 'T', 'I', 'E', 'X', + 'T', 'I', 'L', 'E', + 'T', 'I', 'M', 'E', + 'T', 'I', 'N', 'G', + 'T', 'I', 'N', 'Y', + 'T', 'I', 'W', 'N', + 'T', 'L', 'E', 'E', + 'T', 'L', 'H', 'A', + 'T', 'L', 'H', 'E', + 'T', 'L', 'H', 'I', + 'T', 'L', 'H', 'O', + 'T', 'L', 'H', 'U', + 'T', 'O', 'D', 'O', + 'T', 'O', 'N', 'E', + 'T', 'O', 'N', 'G', + 'T', 'R', 'E', 'E', + 'T', 'R', 'I', 'A', + 'T', 'R', 'U', 'E', + 'T', 'S', 'A', 'A', + 'T', 'S', 'E', 'E', + 'T', 'S', 'H', 'A', + 'T', 'S', 'H', 'E', + 'T', 'S', 'S', 'E', + 'T', 'S', 'W', 'A', + 'T', 'S', 'W', 'E', + 'T', 'T', 'A', 'A', + 'T', 'T', 'E', 'E', + 'T', 'T', 'E', 'H', + 'T', 'T', 'H', 'A', + 'T', 'T', 'H', 'E', + 'T', 'T', 'H', 'I', + 'T', 'T', 'H', 'O', + 'T', 'T', 'S', 'A', + 'T', 'T', 'S', 'E', + 'T', 'T', 'S', 'I', + 'T', 'T', 'S', 'O', + 'T', 'T', 'S', 'U', + 'T', 'U', 'G', '2', + 'T', 'U', 'O', 'P', + 'T', 'U', 'O', 'T', + 'T', 'U', 'O', 'X', + 'T', 'U', 'R', 'N', + 'T', 'U', 'R', 'X', + 'T', 'W', 'A', 'A', + 'T', 'W', 'I', 'I', + 'T', 'W', 'O', 'O', + 'T', 'Y', 'P', 'E', + 'T', 'Z', 'A', 'A', + 'T', 'Z', 'E', 'E', + 'T', 'Z', 'I', 'R', + 'T', 'Z', 'O', 'A', + 'U', '-', 'A', 'E', + 'U', '-', 'Y', 'E', + 'U', 'A', 'T', 'H', + 'U', 'D', 'U', 'G', + 'U', 'M', 'U', 'M', + 'U', 'N', 'D', 'O', + 'U', 'N', 'I', 'T', + 'U', 'R', 'I', '3', + 'U', 'R', 'U', 'S', + 'U', 'R', 'U', 'Z', + 'U', 'S', 'E', 'D', + 'U', 'S', 'H', '2', + 'U', 'S', 'H', 'X', + 'U', 'S', 'S', 'U', + 'U', 'U', 'U', '2', + 'U', 'U', 'U', '3', + 'U', 'U', 'U', 'U', + 'V', 'A', 'N', 'E', + 'V', 'E', 'D', 'E', + 'V', 'E', 'N', 'D', + 'V', 'E', 'R', 'Y', + 'V', 'I', 'D', 'A', + 'V', 'I', 'E', 'P', + 'V', 'I', 'E', 'T', + 'V', 'I', 'E', 'X', + 'V', 'I', 'N', 'E', + 'V', 'O', 'I', 'D', + 'V', 'U', 'R', 'X', + 'V', 'Y', 'R', 'X', + 'W', 'A', 'E', 'N', + 'W', 'A', 'L', 'K', + 'W', 'A', 'L', 'L', + 'W', 'A', 'V', 'E', + 'W', 'A', 'V', 'Y', + 'W', 'E', 'E', 'N', + 'W', 'E', 'L', 'L', + 'W', 'E', 'S', 'T', + 'W', 'I', 'D', 'E', + 'W', 'I', 'N', 'D', + 'W', 'I', 'N', 'E', + 'W', 'I', 'T', 'H', + 'W', 'O', 'O', 'D', + 'W', 'O', 'O', 'L', + 'W', 'O', 'O', 'N', + 'W', 'O', 'R', 'D', + 'W', 'O', 'R', 'K', + 'W', 'R', 'A', 'P', + 'W', 'U', 'O', 'P', + 'W', 'U', 'O', 'X', + 'W', 'Y', 'N', 'N', + 'X', 'I', 'E', 'P', + 'X', 'I', 'E', 'T', + 'X', 'I', 'E', 'X', + 'X', 'U', 'O', 'X', + 'X', 'W', 'A', 'A', + 'X', 'W', 'E', 'E', + 'X', 'Y', 'A', 'A', + 'X', 'Y', 'E', 'E', + 'X', 'Y', 'R', 'X', + 'Y', 'A', '-', 'O', + 'Y', 'A', 'A', 'I', + 'Y', 'A', 'B', 'H', + 'Y', 'A', 'C', 'H', + 'Y', 'A', 'D', 'D', + 'Y', 'A', 'D', 'H', + 'Y', 'A', 'G', 'H', + 'Y', 'A', 'G', 'N', + 'Y', 'A', 'H', 'H', + 'Y', 'A', 'K', 'H', + 'Y', 'A', 'N', 'G', + 'Y', 'A', 'R', 'R', + 'Y', 'A', 'S', 'H', + 'Y', 'A', 'S', 'S', + 'Y', 'A', 'T', 'H', + 'Y', 'A', 'T', 'I', + 'Y', 'A', 'T', 'T', + 'Y', 'A', 'Z', 'H', + 'Y', 'A', 'Z', 'Z', + 'Y', 'E', 'A', 'R', + 'Y', 'E', 'R', 'I', + 'Y', 'E', 'R', 'U', + 'Y', 'F', 'E', 'N', + 'Y', 'I', '-', 'U', + 'Y', 'I', 'E', 'P', + 'Y', 'I', 'E', 'T', + 'Y', 'I', 'E', 'X', + 'Y', 'I', 'N', 'G', + 'Y', 'I', 'W', 'N', + 'Y', 'O', '-', 'I', + 'Y', 'O', '-', 'O', + 'Y', 'O', 'G', 'H', + 'Y', 'O', 'M', 'O', + 'Y', 'O', 'R', 'I', + 'Y', 'U', '-', 'A', + 'Y', 'U', '-', 'E', + 'Y', 'U', '-', 'I', + 'Y', 'U', '-', 'U', + 'Y', 'U', 'A', 'N', + 'Y', 'U', 'D', 'H', + 'Y', 'U', 'O', 'P', + 'Y', 'U', 'O', 'T', + 'Y', 'U', 'O', 'X', + 'Y', 'U', 'R', 'X', + 'Y', 'W', 'A', 'A', + 'Y', 'W', 'I', 'I', + 'Y', 'W', 'O', 'O', + 'Y', 'Y', 'R', 'X', + 'Z', 'A', 'I', 'N', + 'Z', 'A', 'M', 'X', + 'Z', 'A', 'T', 'A', + 'Z', 'E', 'R', 'O', + 'Z', 'E', 'T', 'A', + 'Z', 'H', 'A', 'A', + 'Z', 'H', 'A', 'P', + 'Z', 'H', 'A', 'R', + 'Z', 'H', 'A', 'T', + 'Z', 'H', 'A', 'X', + 'Z', 'H', 'E', 'E', + 'Z', 'H', 'E', 'P', + 'Z', 'H', 'E', 'T', + 'Z', 'H', 'E', 'X', + 'Z', 'H', 'O', 'O', + 'Z', 'H', 'O', 'P', + 'Z', 'H', 'O', 'T', + 'Z', 'H', 'O', 'X', + 'Z', 'H', 'U', 'O', + 'Z', 'H', 'U', 'P', + 'Z', 'H', 'U', 'R', + 'Z', 'H', 'U', 'T', + 'Z', 'H', 'U', 'X', + 'Z', 'H', 'W', 'A', + 'Z', 'H', 'W', 'E', + 'Z', 'H', 'Y', 'P', + 'Z', 'H', 'Y', 'R', + 'Z', 'H', 'Y', 'T', + 'Z', 'H', 'Y', 'X', + 'Z', 'I', 'D', 'A', + 'Z', 'I', 'E', 'P', + 'Z', 'I', 'E', 'X', + 'Z', 'I', 'Z', '2', + 'Z', 'U', 'O', 'P', + 'Z', 'U', 'O', 'X', + 'Z', 'U', 'R', 'X', + 'Z', 'Y', 'R', 'X', + 'Z', 'Z', 'A', 'A', + 'Z', 'Z', 'A', 'P', + 'Z', 'Z', 'A', 'T', + 'Z', 'Z', 'A', 'X', + 'Z', 'Z', 'E', 'E', + 'Z', 'Z', 'E', 'P', + 'Z', 'Z', 'E', 'X', + 'Z', 'Z', 'I', 'E', + 'Z', 'Z', 'I', 'P', + 'Z', 'Z', 'I', 'T', + 'Z', 'Z', 'I', 'X', + 'Z', 'Z', 'O', 'P', + 'Z', 'Z', 'O', 'X', + 'Z', 'Z', 'U', 'P', + 'Z', 'Z', 'U', 'R', + 'Z', 'Z', 'U', 'X', + 'Z', 'Z', 'Y', 'P', + 'Z', 'Z', 'Y', 'R', + 'Z', 'Z', 'Y', 'T', + 'Z', 'Z', 'Y', 'X', + '-', 'C', 'H', 'A', 'L', + '-', 'C', 'H', 'A', 'R', + '-', 'D', 'Z', 'U', 'D', + '-', 'P', 'H', 'R', 'U', + 'A', 'B', 'O', 'V', 'E', + 'A', 'C', 'U', 'T', 'E', + 'A', 'D', 'D', 'A', 'K', + 'A', 'F', 'T', 'E', 'R', + 'A', 'G', 'A', 'I', 'N', + 'A', 'G', 'O', 'G', 'I', + 'A', 'H', 'S', 'D', 'A', + 'A', 'K', 'A', 'R', 'A', + 'A', 'K', 'B', 'A', 'R', + 'A', 'L', 'A', 'P', 'H', + 'A', 'L', 'E', 'P', 'H', + 'A', 'L', 'E', 'U', 'T', + 'A', 'L', 'G', 'I', 'Z', + 'A', 'L', 'I', 'F', 'U', + 'A', 'L', 'L', 'A', 'H', + 'A', 'L', 'P', 'H', 'A', + 'A', 'N', 'G', 'L', 'E', + 'A', 'N', 'P', 'E', 'A', + 'A', 'N', 'S', 'H', 'E', + 'A', 'N', 'S', 'U', 'Z', + 'A', 'P', 'A', 'R', 'T', + 'A', 'P', 'E', 'S', 'O', + 'A', 'P', 'R', 'I', 'L', + 'A', 'R', 'A', 'E', 'A', + 'A', 'R', 'E', 'P', 'A', + 'A', 'R', 'G', 'O', 'N', + 'A', 'R', 'I', 'E', 'S', + 'A', 'R', 'K', 'A', 'B', + 'A', 'R', 'R', 'A', 'Y', + 'A', 'R', 'R', 'O', 'W', + 'A', 'S', 'A', 'L', '2', + 'A', 'T', 'N', 'A', 'H', + 'A', 'T', 'T', 'A', 'K', + 'A', 'T', 'T', 'I', 'C', + 'B', '1', '0', '5', 'F', + 'B', '1', '0', '5', 'M', + 'B', '1', '0', '6', 'F', + 'B', '1', '0', '6', 'M', + 'B', '1', '0', '7', 'F', + 'B', '1', '0', '7', 'M', + 'B', '1', '0', '8', 'F', + 'B', '1', '0', '8', 'M', + 'B', '1', '0', '9', 'F', + 'B', '1', '0', '9', 'M', + 'B', 'A', 'L', 'A', 'G', + 'B', 'A', 'R', 'A', '2', + 'B', 'A', 'S', 'S', 'A', + 'B', 'B', 'I', 'E', 'P', + 'B', 'B', 'I', 'E', 'T', + 'B', 'B', 'I', 'E', 'X', + 'B', 'B', 'U', 'O', 'P', + 'B', 'B', 'U', 'O', 'X', + 'B', 'B', 'U', 'R', 'X', + 'B', 'E', 'E', 'T', 'A', + 'B', 'E', 'G', 'I', 'N', + 'B', 'E', 'H', 'E', 'H', + 'B', 'E', 'I', 'T', 'H', + 'B', 'E', 'L', 'O', 'W', + 'B', 'E', 'N', 'D', 'E', + 'B', 'E', 'O', 'R', 'C', + 'B', 'H', 'E', 'T', 'H', + 'B', 'I', 'N', 'D', 'I', + 'B', 'I', 'R', 'G', 'A', + 'B', 'I', 'S', 'A', 'H', + 'B', 'L', 'A', 'C', 'K', + 'B', 'L', 'A', 'D', 'E', + 'B', 'L', 'A', 'N', 'K', + 'B', 'L', 'O', 'C', 'K', + 'B', 'L', 'O', 'O', 'D', + 'B', 'R', 'A', 'C', 'E', + 'B', 'R', 'E', 'V', 'E', + 'B', 'R', 'O', 'A', 'D', + 'B', 'R', 'U', 'S', 'H', + 'B', 'S', 'D', 'U', 'S', + 'B', 'S', 'K', 'A', '-', + 'B', 'S', 'K', 'U', 'R', + 'B', 'S', 'T', 'A', 'R', + 'B', 'U', 'H', 'I', 'D', + 'B', 'U', 'L', 'L', 'S', + 'B', 'U', 'L', 'U', 'G', + 'B', 'U', 'M', 'P', 'Y', + 'B', 'Z', 'U', 'N', 'G', + 'C', 'A', 'L', 'Y', 'A', + 'C', 'A', 'R', 'E', 'T', + 'C', 'A', 'R', 'I', 'K', + 'C', 'A', 'R', 'O', 'N', + 'C', 'A', 'U', 'D', 'A', + 'C', 'C', 'H', 'A', 'A', + 'C', 'C', 'H', 'E', 'E', + 'C', 'E', 'A', 'L', 'C', + 'C', 'E', 'C', 'E', 'K', + 'C', 'E', 'I', 'R', 'T', + 'C', 'E', 'R', 'E', 'S', + 'C', 'H', 'A', 'D', 'A', + 'C', 'H', 'A', 'I', 'R', + 'C', 'H', 'A', 'N', 'G', + 'C', 'H', 'E', 'C', 'K', + 'C', 'H', 'E', 'S', 'S', + 'C', 'H', 'I', 'K', 'I', + 'C', 'H', 'I', 'L', 'D', + 'C', 'H', 'I', 'N', 'G', + 'C', 'H', 'O', 'K', 'E', + 'C', 'H', 'R', 'O', 'A', + 'C', 'H', 'U', 'L', 'A', + 'C', 'H', 'U', 'O', 'P', + 'C', 'H', 'U', 'O', 'T', + 'C', 'H', 'U', 'O', 'X', + 'C', 'H', 'U', 'R', 'X', + 'C', 'H', 'Y', 'R', 'X', + 'C', 'I', 'E', 'U', 'C', + 'C', 'L', 'E', 'A', 'R', + 'C', 'L', 'I', 'C', 'K', + 'C', 'L', 'I', 'F', 'F', + 'C', 'L', 'O', 'S', 'E', + 'C', 'L', 'O', 'T', 'H', + 'C', 'L', 'O', 'U', 'D', + 'C', 'O', 'E', 'N', 'G', + 'C', 'O', 'L', 'O', 'N', + 'C', 'O', 'L', 'O', 'R', + 'C', 'O', 'M', 'E', 'T', + 'C', 'O', 'M', 'M', 'A', + 'C', 'O', 'V', 'E', 'R', + 'C', 'R', 'O', 'I', 'X', + 'C', 'R', 'O', 'S', 'S', + 'C', 'U', 'B', 'E', 'D', + 'C', 'U', 'R', 'L', 'Y', + 'C', 'U', 'R', 'V', 'E', + 'D', 'A', 'A', 'S', 'U', + 'D', 'A', 'E', 'N', 'G', + 'D', 'A', 'G', 'A', 'Z', + 'D', 'A', 'H', 'A', 'L', + 'D', 'A', 'I', 'N', 'G', + 'D', 'A', 'L', 'D', 'A', + 'D', 'A', 'L', 'E', 'T', + 'D', 'A', 'M', 'M', 'A', + 'D', 'A', 'N', 'D', 'A', + 'D', 'A', 'R', 'A', '3', + 'D', 'A', 'R', 'A', '4', + 'D', 'A', 'R', 'G', 'A', + 'D', 'A', 'S', 'I', 'A', + 'D', 'A', 'V', 'I', 'D', + 'D', 'D', 'D', 'H', 'A', + 'D', 'D', 'I', 'E', 'P', + 'D', 'D', 'I', 'E', 'X', + 'D', 'D', 'U', 'O', 'P', + 'D', 'D', 'U', 'O', 'X', + 'D', 'D', 'U', 'R', 'X', + 'D', 'E', 'A', 'T', 'H', + 'D', 'E', 'B', 'I', 'T', + 'D', 'E', 'L', 'T', 'A', + 'D', 'E', 'R', 'E', 'T', + 'D', 'E', 'U', 'N', 'G', + 'D', 'E', 'X', 'I', 'A', + 'D', 'H', 'H', 'E', 'E', + 'D', 'H', 'H', 'O', 'O', + 'D', 'I', 'F', 'A', 'T', + 'D', 'I', 'G', 'I', 'T', + 'D', 'I', 'P', 'L', 'I', + 'D', 'I', 'P', 'T', 'E', + 'D', 'I', 'T', 'T', 'O', + 'D', 'J', 'E', 'R', 'V', + 'D', 'O', 'B', 'R', 'O', + 'D', 'O', 'O', 'N', 'G', + 'D', 'O', 'U', 'B', 'T', + 'D', 'R', 'I', 'V', 'E', + 'D', 'R', 'O', 'P', 'S', + 'D', 'U', 'G', 'U', 'D', + 'D', 'Z', 'E', 'L', 'O', + 'E', 'A', 'G', 'L', 'E', + 'E', 'A', 'R', 'L', 'Y', + 'E', 'A', 'R', 'T', 'H', + 'E', 'E', 'K', 'A', 'A', + 'E', 'H', 'W', 'A', 'Z', + 'E', 'I', 'G', 'H', 'T', + 'E', 'J', 'E', 'C', 'T', + 'E', 'K', 'A', 'R', 'A', + 'E', 'L', 'I', 'F', 'I', + 'E', 'M', 'P', 'T', 'Y', + 'E', 'N', 'D', 'E', 'P', + 'E', 'N', 'T', 'E', 'R', + 'E', 'O', '-', 'E', 'U', + 'E', 'O', 'L', 'H', 'X', + 'E', 'Q', 'U', 'A', 'L', + 'E', 'Q', 'U', 'I', 'D', + 'E', 'R', 'A', 'S', 'E', + 'E', 'R', 'I', 'N', '2', + 'E', 'S', '-', 'T', 'E', + 'E', 'S', 'A', 'S', 'A', + 'E', 'S', 'H', '1', '6', + 'E', 'S', 'H', '2', '1', + 'E', 'S', 'H', 'E', '3', + 'E', 'T', 'H', 'E', 'L', + 'E', 'U', '-', 'E', 'U', + 'E', 'U', 'L', 'E', 'R', + 'E', 'X', 'I', 'S', 'T', + 'F', 'A', 'A', 'F', 'U', + 'F', 'A', 'I', 'H', 'U', + 'F', 'A', 'R', 'S', 'I', + 'F', 'A', 'T', 'H', 'A', + 'F', 'E', 'A', 'R', 'N', + 'F', 'E', 'E', 'N', 'G', + 'F', 'E', 'N', 'C', 'E', + 'F', 'I', 'E', 'L', 'D', + 'F', 'I', 'F', 'T', 'H', + 'F', 'I', 'F', 'T', 'Y', + 'F', 'I', 'G', 'H', 'T', + 'F', 'I', 'N', 'A', 'L', + 'F', 'I', 'R', 'S', 'T', + 'F', 'L', 'O', 'O', 'R', + 'F', 'L', 'U', 'T', 'E', + 'F', 'O', 'L', 'L', 'Y', + 'F', 'O', 'R', 'C', 'E', + 'F', 'O', 'R', 'M', 'S', + 'F', 'O', 'R', 'T', 'E', + 'F', 'O', 'R', 'T', 'Y', + 'F', 'R', 'A', 'M', 'E', + 'F', 'R', 'A', 'N', 'C', + 'F', 'R', 'I', 'T', 'U', + 'F', 'R', 'O', 'W', 'N', + 'G', 'A', 'A', 'F', 'U', + 'G', 'A', 'D', 'O', 'L', + 'G', 'A', 'L', 'A', 'M', + 'G', 'A', 'M', 'A', 'L', + 'G', 'A', 'M', 'L', 'A', + 'G', 'A', 'M', 'M', 'A', + 'G', 'A', 'N', 'M', 'A', + 'G', 'A', 'R', 'O', 'N', + 'G', 'E', 'S', 'H', '2', + 'G', 'E', 'S', 'H', 'U', + 'G', 'G', 'I', 'E', 'P', + 'G', 'G', 'I', 'E', 'X', + 'G', 'G', 'U', 'O', 'P', + 'G', 'G', 'U', 'O', 'T', + 'G', 'G', 'U', 'O', 'X', + 'G', 'G', 'U', 'R', 'X', + 'G', 'G', 'W', 'A', 'A', + 'G', 'G', 'W', 'E', 'E', + 'G', 'H', 'A', 'I', 'N', + 'G', 'H', 'O', 'S', 'T', + 'G', 'I', 'D', 'I', 'M', + 'G', 'I', 'M', 'E', 'L', + 'G', 'I', 'N', 'I', 'I', + 'G', 'I', 'S', 'A', 'L', + 'G', 'N', 'Y', 'I', 'S', + 'G', 'O', 'I', 'N', 'G', + 'G', 'O', 'R', 'G', 'I', + 'G', 'R', 'A', 'C', 'E', + 'G', 'R', 'A', 'I', 'N', + 'G', 'R', 'A', 'S', 'S', + 'G', 'R', 'A', 'V', 'E', + 'G', 'R', 'E', 'A', 'T', + 'G', 'R', 'E', 'E', 'K', + 'G', 'R', 'E', 'E', 'N', + 'G', 'R', 'O', 'U', 'P', + 'G', 'U', 'R', 'U', 'N', + 'H', 'A', '-', 'H', 'A', + 'H', 'A', 'A', 'R', 'U', + 'H', 'A', 'E', 'G', 'L', + 'H', 'A', 'I', 'T', 'U', + 'H', 'A', 'M', 'Z', 'A', + 'H', 'A', 'N', 'D', 'S', + 'H', 'A', 'S', 'E', 'R', + 'H', 'A', 'T', 'A', 'F', + 'H', 'A', 'T', 'H', 'I', + 'H', 'B', 'A', 'S', 'A', + 'H', 'E', 'A', 'R', 'T', + 'H', 'E', 'A', 'V', 'Y', + 'H', 'I', 'D', 'E', 'T', + 'H', 'I', 'E', 'U', 'H', + 'H', 'I', 'R', 'I', 'Q', + 'H', 'L', 'I', 'E', 'P', + 'H', 'L', 'I', 'E', 'X', + 'H', 'L', 'U', 'O', 'P', + 'H', 'L', 'U', 'O', 'X', + 'H', 'L', 'U', 'R', 'X', + 'H', 'L', 'Y', 'R', 'X', + 'H', 'M', 'I', 'E', 'P', + 'H', 'M', 'I', 'E', 'X', + 'H', 'M', 'U', 'O', 'P', + 'H', 'M', 'U', 'O', 'X', + 'H', 'M', 'U', 'R', 'X', + 'H', 'M', 'Y', 'R', 'X', + 'H', 'N', 'I', 'E', 'P', + 'H', 'N', 'I', 'E', 'T', + 'H', 'N', 'I', 'E', 'X', + 'H', 'N', 'U', 'O', 'X', + 'H', 'O', 'L', 'A', 'M', + 'H', 'O', 'O', 'R', 'U', + 'H', 'O', 'R', 'S', 'E', + 'H', 'O', 'U', 'S', 'E', + 'H', 'U', 'M', 'A', 'N', + 'H', 'U', 'R', 'A', 'N', + 'H', 'W', 'A', 'I', 'R', + 'H', 'X', 'I', 'E', 'P', + 'H', 'X', 'I', 'E', 'T', + 'H', 'X', 'I', 'E', 'X', + 'H', 'X', 'U', 'O', 'P', + 'H', 'X', 'U', 'O', 'T', + 'H', 'X', 'U', 'O', 'X', + 'H', 'Z', 'Z', 'Z', 'G', + 'I', 'A', 'U', 'D', 'A', + 'I', 'C', 'H', 'O', 'S', + 'I', 'C', 'H', 'O', 'U', + 'I', 'E', 'U', 'N', 'G', + 'I', 'G', 'G', 'W', 'S', + 'I', 'K', 'A', 'R', 'A', + 'I', 'M', 'A', 'G', 'E', + 'I', 'M', 'I', 'N', '3', + 'I', 'N', 'D', 'E', 'X', + 'I', 'N', 'N', 'E', 'R', + 'J', 'E', 'R', 'A', 'N', + 'J', 'J', 'I', 'E', 'P', + 'J', 'J', 'I', 'E', 'T', + 'J', 'J', 'I', 'E', 'X', + 'J', 'J', 'U', 'O', 'P', + 'J', 'J', 'U', 'O', 'X', + 'J', 'J', 'U', 'R', 'X', + 'J', 'O', 'K', 'E', 'R', + 'J', 'U', 'D', 'G', 'E', + 'J', 'U', 'E', 'U', 'I', + 'K', 'A', 'A', 'F', 'U', + 'K', 'A', 'I', 'R', 'I', + 'K', 'A', 'P', 'A', 'L', + 'K', 'A', 'P', 'P', 'A', + 'K', 'A', 'R', 'E', 'N', + 'K', 'A', 'S', 'R', 'A', + 'K', 'A', 'U', 'N', 'A', + 'K', 'A', 'Y', 'A', 'H', + 'K', 'E', 'E', 'N', 'G', + 'K', 'E', 'E', 'S', 'U', + 'K', 'E', 'H', 'E', 'H', + 'K', 'E', 'N', 'A', 'T', + 'K', 'E', 'S', 'H', '2', + 'K', 'E', 'T', 'T', 'I', + 'K', 'H', 'A', 'N', 'G', + 'K', 'H', 'A', 'P', 'H', + 'K', 'H', 'M', 'E', 'R', + 'K', 'H', 'U', 'A', 'T', + 'K', 'H', 'W', 'A', 'I', + 'K', 'I', 'S', 'A', 'L', + 'K', 'N', 'I', 'F', 'E', + 'K', 'O', 'M', 'B', 'U', + 'K', 'O', 'O', 'P', 'O', + 'K', 'O', 'P', 'P', 'A', + 'K', 'U', 'S', 'M', 'A', + 'K', 'X', 'W', 'A', 'A', + 'K', 'X', 'W', 'E', 'E', + 'L', 'A', 'A', 'M', 'U', + 'L', 'A', 'B', 'O', 'R', + 'L', 'A', 'G', 'A', 'B', + 'L', 'A', 'G', 'A', 'R', + 'L', 'A', 'G', 'U', 'S', + 'L', 'A', 'M', 'D', 'A', + 'L', 'A', 'M', 'E', 'D', + 'L', 'A', 'R', 'G', 'E', + 'L', 'A', 'T', 'I', 'K', + 'L', 'A', 'T', 'I', 'N', + 'L', 'A', 'U', 'L', 'A', + 'L', 'E', 'M', 'O', 'I', + 'L', 'E', 'N', 'G', 'A', + 'L', 'E', 'V', 'E', 'L', + 'L', 'I', 'B', 'R', 'A', + 'L', 'I', 'G', 'H', 'T', + 'L', 'I', 'M', 'B', 'U', + 'L', 'I', 'M', 'I', 'T', + 'L', 'I', 'M', 'M', 'U', + 'L', 'I', 'N', 'E', 'S', + 'L', 'I', 'T', 'R', 'A', + 'L', 'O', 'N', 'G', 'A', + 'L', 'O', 'T', 'U', 'S', + 'L', 'O', 'U', 'R', 'E', + 'L', 'O', 'W', '-', '9', + 'L', 'O', 'W', 'E', 'R', + 'L', 'U', 'G', 'A', 'L', + 'M', 'A', 'D', 'D', 'A', + 'M', 'A', 'H', 'H', 'A', + 'M', 'A', 'I', 'R', 'U', + 'M', 'A', 'N', 'N', 'A', + 'M', 'A', 'P', 'I', 'Q', + 'M', 'A', 'Q', 'A', 'F', + 'M', 'A', 'R', 'C', 'H', + 'M', 'A', 'S', 'H', '2', + 'M', 'E', 'E', 'M', 'U', + 'M', 'E', 'I', 'Z', 'I', + 'M', 'E', 'L', 'O', 'N', + 'M', 'E', 'T', 'A', 'L', + 'M', 'E', 'T', 'E', 'G', + 'M', 'E', 'Z', 'Z', 'O', + 'M', 'G', 'B', 'E', 'E', + 'M', 'G', 'B', 'O', 'O', + 'M', 'G', 'I', 'E', 'X', + 'M', 'G', 'U', 'O', 'P', + 'M', 'G', 'U', 'O', 'X', + 'M', 'G', 'U', 'R', 'X', + 'M', 'I', 'C', 'R', 'O', + 'M', 'I', 'E', 'U', 'M', + 'M', 'I', 'K', 'R', 'I', + 'M', 'I', 'L', 'L', 'E', + 'M', 'I', 'N', 'U', 'S', + 'M', 'I', 'R', 'E', 'D', + 'M', 'I', 'S', 'R', 'A', + 'M', 'N', 'Y', 'A', 'M', + 'M', 'O', 'D', 'E', 'L', + 'M', 'O', 'N', 'T', 'H', + 'M', 'O', 'U', 'N', 'D', + 'M', 'O', 'U', 'T', 'H', + 'M', 'O', 'V', 'E', 'D', + 'M', 'U', 'L', 'T', 'I', + 'M', 'U', 'N', 'A', 'H', + 'M', 'U', 'R', 'D', 'A', + 'M', 'U', 'S', 'H', '3', + 'M', 'U', 'S', 'I', 'C', + 'N', '-', 'A', 'R', 'Y', + 'N', 'A', 'B', 'L', 'A', + 'N', 'A', 'G', 'A', 'R', + 'N', 'A', 'G', 'R', 'I', + 'N', 'A', 'I', 'R', 'A', + 'N', 'A', 'S', 'H', 'I', + 'N', 'B', 'I', 'E', 'P', + 'N', 'B', 'I', 'E', 'X', + 'N', 'B', 'U', 'R', 'X', + 'N', 'B', 'Y', 'R', 'X', + 'N', 'D', 'I', 'E', 'X', + 'N', 'D', 'O', 'L', 'E', + 'N', 'D', 'U', 'R', 'X', + 'N', 'G', 'A', 'A', 'I', + 'N', 'G', 'G', 'E', 'E', + 'N', 'G', 'G', 'E', 'N', + 'N', 'G', 'G', 'O', 'O', + 'N', 'G', 'I', 'E', 'P', + 'N', 'G', 'I', 'E', 'X', + 'N', 'G', 'O', 'E', 'H', + 'N', 'G', 'U', 'O', 'T', + 'N', 'G', 'U', 'O', 'X', + 'N', 'I', 'E', 'U', 'N', + 'N', 'I', 'G', 'H', 'T', + 'N', 'I', 'S', 'A', 'G', + 'N', 'J', 'I', 'E', 'P', + 'N', 'J', 'I', 'E', 'T', + 'N', 'J', 'I', 'E', 'X', + 'N', 'J', 'U', 'O', 'X', + 'N', 'J', 'U', 'R', 'X', + 'N', 'J', 'Y', 'R', 'X', + 'N', 'N', 'G', 'A', 'A', + 'N', 'N', 'G', 'I', 'I', + 'N', 'N', 'G', 'O', 'O', + 'N', 'O', 'O', 'N', 'U', + 'N', 'O', 'R', 'T', 'H', + 'N', 'O', 'T', 'C', 'H', + 'N', 'O', 'T', 'E', 'S', + 'N', 'O', 'T', 'T', 'O', + 'N', 'R', 'U', 'R', 'X', + 'N', 'R', 'Y', 'R', 'X', + 'N', 'U', 'K', 'T', 'A', + 'N', 'U', 'N', 'U', 'Z', + 'N', 'Y', 'I', 'E', 'P', + 'N', 'Y', 'I', 'E', 'T', + 'N', 'Y', 'I', 'E', 'X', + 'N', 'Y', 'U', 'O', 'P', + 'N', 'Y', 'U', 'O', 'X', + 'N', 'Z', 'I', 'E', 'P', + 'N', 'Z', 'I', 'E', 'X', + 'N', 'Z', 'U', 'O', 'X', + 'N', 'Z', 'U', 'R', 'X', + 'N', 'Z', 'Y', 'R', 'X', + 'O', 'B', 'O', 'L', 'S', + 'O', 'G', 'H', 'A', 'M', + 'O', 'J', 'E', 'O', 'N', + 'O', 'K', 'A', 'R', 'A', + 'O', 'L', 'I', 'V', 'E', + 'O', 'M', 'E', 'G', 'A', + 'O', 'N', 'K', 'A', 'R', + 'O', 'R', 'I', 'Y', 'A', + 'O', 'T', 'H', 'A', 'L', + 'O', 'U', 'N', 'C', 'E', + 'O', 'U', 'T', 'E', 'R', + 'O', 'X', 'E', 'I', 'A', + 'P', 'A', 'A', 'T', 'U', + 'P', 'A', 'D', 'M', 'A', + 'P', 'A', 'N', 'T', 'I', + 'P', 'A', 'P', 'E', 'R', + 'P', 'A', 'S', 'E', 'Q', + 'P', 'A', 'S', 'U', 'Q', + 'P', 'A', 'T', 'A', 'H', + 'P', 'A', 'T', 'A', 'K', + 'P', 'A', 'Z', 'E', 'R', + 'P', 'E', 'A', 'C', 'E', + 'P', 'E', 'D', 'A', 'L', + 'P', 'E', 'E', 'Z', 'I', + 'P', 'E', 'H', 'E', 'H', + 'P', 'E', 'I', 'T', 'H', + 'P', 'E', 'N', 'N', 'Y', + 'P', 'E', 'N', 'S', 'U', + 'P', 'E', 'P', 'E', 'T', + 'P', 'E', 'S', 'H', '2', + 'P', 'H', 'U', 'N', 'G', + 'P', 'I', 'A', 'N', 'O', + 'P', 'I', 'E', 'C', 'E', + 'P', 'I', 'E', 'U', 'P', + 'P', 'I', 'R', 'I', 'G', + 'P', 'L', 'A', 'C', 'E', + 'P', 'L', 'A', 'N', 'E', + 'P', 'L', 'U', 'T', 'O', + 'P', 'O', 'I', 'N', 'T', + 'P', 'O', 'N', 'D', 'O', + 'P', 'O', 'U', 'N', 'D', + 'P', 'O', 'W', 'E', 'R', + 'P', 'R', 'I', 'M', 'E', + 'P', 'R', 'I', 'N', 'T', + 'P', 'R', 'O', 'O', 'F', + 'P', 'R', 'O', 'V', 'E', + 'P', 'S', 'I', 'L', 'I', + 'Q', 'A', 'A', 'F', 'U', + 'Q', 'A', 'D', 'M', 'A', + 'Q', 'A', 'T', 'A', 'N', + 'Q', 'H', 'W', 'A', 'A', + 'Q', 'H', 'W', 'E', 'E', + 'Q', 'U', 'E', 'E', 'N', + 'Q', 'U', 'I', 'L', 'L', + 'Q', 'U', 'O', 'T', 'E', + 'R', 'A', 'I', 'D', 'A', + 'R', 'A', 'I', 'D', 'O', + 'R', 'A', 'N', 'G', 'E', + 'R', 'A', 'S', 'H', 'A', + 'R', 'A', 'T', 'I', 'O', + 'R', 'B', 'A', 'S', 'A', + 'R', 'E', 'A', 'C', 'H', + 'R', 'E', 'L', 'A', 'A', + 'R', 'E', 'V', 'I', 'A', + 'R', 'E', 'V', 'M', 'A', + 'R', 'G', 'Y', 'A', 'N', + 'R', 'I', 'C', 'E', 'M', + 'R', 'I', 'E', 'U', 'L', + 'R', 'I', 'G', 'H', 'T', + 'R', 'I', 'T', 'S', 'I', + 'R', 'I', 'V', 'E', 'R', + 'R', 'N', 'O', 'O', 'N', + 'R', 'O', 'B', 'A', 'T', + 'R', 'O', 'M', 'A', 'N', + 'R', 'O', 'U', 'N', 'D', + 'R', 'R', 'U', 'O', 'X', + 'R', 'R', 'U', 'R', 'X', + 'R', 'R', 'Y', 'R', 'X', + 'R', 'T', 'A', 'G', 'S', + 'R', 'U', 'M', 'A', 'I', + 'R', 'U', 'N', 'I', 'C', + 'R', 'U', 'P', 'E', 'E', + 'R', 'U', 'P', 'I', 'I', + 'R', 'W', 'A', 'H', 'A', + 'S', 'A', 'D', 'H', 'E', + 'S', 'A', 'F', 'H', 'A', + 'S', 'A', 'L', 'A', 'M', + 'S', 'A', 'L', 'L', 'A', + 'S', 'A', 'M', 'K', 'A', + 'S', 'A', 'M', 'P', 'I', + 'S', 'A', 'N', 'A', 'H', + 'S', 'A', 'S', 'A', 'K', + 'S', 'A', 'U', 'I', 'L', + 'S', 'B', 'R', 'U', 'L', + 'S', 'C', 'H', 'W', 'A', + 'S', 'D', 'O', 'N', 'G', + 'S', 'E', 'E', 'N', 'U', + 'S', 'E', 'G', 'N', 'O', + 'S', 'E', 'G', 'O', 'L', + 'S', 'E', 'N', 'T', 'I', + 'S', 'E', 'N', 'T', 'O', + 'S', 'E', 'V', 'E', 'N', + 'S', 'H', 'A', 'B', '6', + 'S', 'H', 'A', 'D', 'E', + 'S', 'H', 'A', 'N', 'G', + 'S', 'H', 'A', 'R', '2', + 'S', 'H', 'A', 'R', 'P', + 'S', 'H', 'A', 'R', 'U', + 'S', 'H', 'C', 'H', 'A', + 'S', 'H', 'E', 'E', 'N', + 'S', 'H', 'E', 'E', 'P', + 'S', 'H', 'E', 'G', '9', + 'S', 'H', 'E', 'L', 'F', + 'S', 'H', 'E', 'L', 'L', + 'S', 'H', 'E', 'S', 'H', + 'S', 'H', 'E', 'V', 'A', + 'S', 'H', 'I', 'F', 'T', + 'S', 'H', 'I', 'I', 'N', + 'S', 'H', 'I', 'M', 'A', + 'S', 'H', 'I', 'T', 'A', + 'S', 'H', 'O', 'G', 'I', + 'S', 'H', 'O', 'O', 'T', + 'S', 'H', 'O', 'R', 'T', + 'S', 'H', 'U', 'O', 'P', + 'S', 'H', 'U', 'O', 'X', + 'S', 'H', 'U', 'R', 'X', + 'S', 'H', 'W', 'A', 'A', + 'S', 'H', 'W', 'I', 'I', + 'S', 'H', 'W', 'O', 'O', + 'S', 'H', 'Y', 'R', 'X', + 'S', 'I', 'G', 'E', 'L', + 'S', 'I', 'G', 'M', 'A', + 'S', 'I', 'G', 'N', 'S', + 'S', 'I', 'L', 'A', '3', + 'S', 'I', 'X', 'T', 'H', + 'S', 'I', 'X', 'T', 'Y', + 'S', 'K', 'U', 'L', 'L', + 'S', 'L', 'A', 'S', 'H', + 'S', 'L', 'A', 'V', 'E', + 'S', 'L', 'I', 'C', 'E', + 'S', 'L', 'I', 'N', 'G', + 'S', 'L', 'O', 'P', 'E', + 'S', 'L', 'O', 'V', 'O', + 'S', 'M', 'A', 'L', 'L', + 'S', 'M', 'A', 'S', 'H', + 'S', 'M', 'E', 'A', 'R', + 'S', 'M', 'I', 'L', 'E', + 'S', 'N', 'A', 'K', 'E', + 'S', 'N', 'O', 'U', 'T', + 'S', 'O', 'U', 'N', 'D', + 'S', 'O', 'U', 'T', 'H', + 'S', 'P', 'A', 'C', 'E', + 'S', 'P', 'A', 'D', 'E', + 'S', 'P', 'E', 'A', 'R', + 'S', 'P', 'I', 'C', 'E', + 'S', 'P', 'O', 'O', 'N', + 'S', 'Q', 'U', 'A', 'T', + 'S', 'S', 'I', 'E', 'P', + 'S', 'S', 'I', 'E', 'X', + 'S', 'S', 'Y', 'R', 'X', + 'S', 'T', 'A', 'F', 'F', + 'S', 'T', 'A', 'N', 'D', + 'S', 'T', 'A', 'R', 'K', + 'S', 'T', 'A', 'R', 'T', + 'S', 'T', 'E', 'A', 'M', + 'S', 'T', 'I', 'L', 'E', + 'S', 'T', 'I', 'L', 'L', + 'S', 'T', 'O', 'C', 'K', + 'S', 'T', 'O', 'N', 'E', + 'S', 'T', 'O', 'V', 'E', + 'S', 'T', 'U', 'D', 'Y', + 'S', 'U', 'H', 'U', 'R', + 'S', 'U', 'K', 'U', 'N', + 'S', 'W', 'A', 'S', 'H', + 'S', 'W', 'E', 'E', 'T', + 'S', 'W', 'O', 'R', 'D', + 'S', 'W', 'U', 'N', 'G', + 'S', 'Y', 'R', 'M', 'A', + 'T', 'A', 'B', 'L', 'E', + 'T', 'A', 'M', 'I', 'L', + 'T', 'A', 'P', 'E', 'R', + 'T', 'C', 'H', 'E', 'H', + 'T', 'E', 'G', 'E', 'H', + 'T', 'E', 'H', 'E', 'H', + 'T', 'E', 'I', 'W', 'S', + 'T', 'E', 'V', 'I', 'R', + 'T', 'H', 'E', 'M', 'A', + 'T', 'H', 'E', 'R', 'E', + 'T', 'H', 'E', 'T', 'A', + 'T', 'H', 'I', 'G', 'H', + 'T', 'H', 'I', 'R', 'D', + 'T', 'H', 'I', 'T', 'A', + 'T', 'H', 'O', 'N', 'G', + 'T', 'H', 'O', 'R', 'N', + 'T', 'H', 'R', 'E', 'E', + 'T', 'H', 'U', 'N', 'G', + 'T', 'H', 'U', 'R', 'S', + 'T', 'H', 'W', 'A', 'A', + 'T', 'I', 'A', 'R', 'A', + 'T', 'I', 'G', 'E', 'R', + 'T', 'I', 'G', 'H', 'T', + 'T', 'I', 'L', 'D', 'E', + 'T', 'I', 'M', 'E', 'S', + 'T', 'I', 'N', 'N', 'E', + 'T', 'I', 'P', 'P', 'I', + 'T', 'I', 'T', 'L', 'O', + 'T', 'I', 'W', 'A', 'Z', + 'T', 'L', 'H', 'E', 'E', + 'T', 'O', 'N', 'A', 'L', + 'T', 'O', 'N', 'O', 'S', + 'T', 'O', 'O', 'T', 'H', + 'T', 'O', 'T', 'A', 'L', + 'T', 'R', 'A', 'C', 'K', + 'T', 'R', 'A', 'D', 'E', + 'T', 'R', 'I', 'O', 'N', + 'T', 'R', 'U', 'N', 'K', + 'T', 'R', 'U', 'T', 'H', + 'T', 'S', 'A', 'D', 'I', + 'T', 'S', 'E', 'R', 'E', + 'T', 'S', 'H', 'E', 'G', + 'T', 'S', 'H', 'E', 'S', + 'T', 'T', 'S', 'E', 'E', + 'T', 'T', 'T', 'H', 'A', + 'T', 'U', 'N', 'N', 'Y', + 'T', 'U', 'R', 'O', '2', + 'T', 'U', 'U', 'M', 'U', + 'U', 'D', 'A', 'A', 'T', + 'U', 'K', 'A', 'R', 'A', + 'U', 'M', 'B', 'I', 'N', + 'U', 'N', 'C', 'I', 'A', + 'U', 'N', 'D', 'E', 'R', + 'U', 'N', 'I', 'O', 'N', + 'U', 'N', 'I', 'T', 'Y', + 'U', 'P', 'P', 'E', 'R', + 'U', 'R', 'U', 'D', 'A', + 'U', 'S', 'S', 'U', '3', + 'U', 'T', 'U', 'K', 'I', + 'V', 'A', 'A', 'V', 'U', + 'V', 'A', 'R', 'I', 'A', + 'V', 'A', 'R', 'Y', 'S', + 'V', 'A', 'S', 'I', 'S', + 'V', 'A', 'T', 'H', 'Y', + 'V', 'E', 'R', 'G', 'E', + 'V', 'E', 'R', 'S', 'E', + 'V', 'E', 'S', 'T', 'A', + 'V', 'I', 'R', 'G', 'A', + 'V', 'I', 'R', 'G', 'O', + 'V', 'O', 'C', 'A', 'L', + 'V', 'O', 'W', 'E', 'L', + 'V', 'Z', 'M', 'E', 'T', + 'W', 'A', 'A', 'V', 'U', + 'W', 'A', 'S', 'L', 'A', + 'W', 'A', 'T', 'C', 'H', + 'W', 'A', 'T', 'E', 'R', + 'W', 'A', 'T', 'T', 'O', + 'W', 'H', 'E', 'A', 'T', + 'W', 'H', 'E', 'E', 'L', + 'W', 'H', 'I', 'T', 'E', + 'W', 'H', 'O', 'L', 'E', + 'W', 'I', 'D', 'T', 'H', + 'W', 'I', 'N', 'D', 'U', + 'W', 'I', 'N', 'J', 'A', + 'W', 'O', 'M', 'A', 'N', + 'W', 'R', 'O', 'N', 'G', + 'W', 'U', 'N', 'J', 'O', + 'X', 'I', 'R', 'O', 'N', + 'Y', 'A', '-', 'Y', 'O', + 'Y', 'A', 'A', 'D', 'O', + 'Y', 'A', 'A', 'R', 'U', + 'Y', 'A', 'D', 'D', 'H', + 'Y', 'A', 'G', 'H', 'H', + 'Y', 'A', 'K', 'H', 'H', + 'Y', 'E', 'O', '-', 'O', + 'Y', 'E', 'O', '-', 'U', + 'Y', 'E', 'R', 'A', 'H', + 'Y', 'E', 'S', 'T', 'U', + 'Y', 'E', 'T', 'I', 'V', + 'Y', 'I', 'Z', 'E', 'T', + 'Y', 'O', '-', 'Y', 'A', + 'Y', 'U', '-', 'E', 'O', + 'Y', 'U', '-', 'Y', 'E', + 'Z', 'A', 'Q', 'E', 'F', + 'Z', 'A', 'R', 'Q', 'A', + 'Z', 'A', 'Y', 'I', 'N', + 'Z', 'H', 'A', 'I', 'N', + 'Z', 'H', 'U', 'O', 'P', + 'Z', 'H', 'U', 'O', 'X', + 'Z', 'H', 'U', 'R', 'X', + 'Z', 'H', 'Y', 'R', 'X', + 'Z', 'I', 'L', 'D', 'E', + 'Z', 'I', 'N', 'O', 'R', + 'Z', 'L', 'A', 'M', 'A', + 'Z', 'U', 'B', 'U', 'R', + 'Z', 'Y', 'G', 'O', 'S', + 'Z', 'Z', 'I', 'E', 'P', + 'Z', 'Z', 'I', 'E', 'T', + 'Z', 'Z', 'I', 'E', 'X', + 'Z', 'Z', 'U', 'R', 'X', + 'Z', 'Z', 'Y', 'R', 'X', + '-', 'K', 'H', 'Y', 'I', 'L', + '-', 'K', 'H', 'Y', 'U', 'D', + 'A', 'C', 'C', 'E', 'N', 'T', + 'A', 'E', 'G', 'E', 'A', 'N', + 'A', 'I', 'H', 'V', 'U', 'S', + 'A', 'I', 'K', 'A', 'R', 'A', + 'A', 'L', 'A', 'Y', 'H', 'E', + 'A', 'L', 'M', 'O', 'S', 'T', + 'A', 'M', 'O', 'U', 'N', 'T', + 'A', 'N', 'C', 'H', 'O', 'R', + 'A', 'N', 'C', 'O', 'R', 'A', + 'A', 'P', 'A', 'A', 'T', 'O', + 'A', 'P', 'L', 'O', 'U', 'N', + 'A', 'R', 'A', 'B', 'I', 'C', + 'A', 'R', 'A', 'E', 'A', 'E', + 'A', 'R', 'L', 'A', 'U', 'G', + 'A', 'R', 'M', 'O', 'U', 'R', + 'A', 'R', 'O', 'U', 'N', 'D', + 'A', 'R', 'O', 'U', 'R', 'A', + 'A', 'R', 'R', 'I', 'V', 'E', + 'A', 'R', 'R', 'O', 'W', 'S', + 'A', 'R', 'S', 'E', 'O', 'S', + 'A', 'R', 'T', 'A', 'B', 'E', + 'A', 'R', 'U', 'H', 'U', 'A', + 'A', 'S', 'C', 'E', 'N', 'T', + 'A', 'S', 'H', 'G', 'A', 'B', + 'A', 'S', 'Y', 'U', 'R', 'A', + 'A', 'U', 'G', 'U', 'S', 'T', + 'A', 'U', 'T', 'U', 'M', 'N', + 'A', 'Y', 'A', 'N', 'N', 'A', + 'B', 'A', 'D', 'G', 'E', 'R', + 'B', 'A', 'H', 'A', 'R', '2', + 'B', 'A', 'I', 'M', 'A', 'I', + 'B', 'A', 'L', 'L', 'O', 'T', + 'B', 'A', 'L', 'U', 'D', 'A', + 'B', 'A', 'M', 'B', 'O', 'O', + 'B', 'A', 'N', 'T', 'O', 'C', + 'B', 'A', 'R', 'L', 'E', 'Y', + 'B', 'A', 'R', 'R', 'E', 'D', + 'B', 'A', 'R', 'R', 'E', 'E', + 'B', 'E', 'A', 'M', 'E', 'D', + 'B', 'E', 'F', 'O', 'R', 'E', + 'B', 'E', 'R', 'B', 'E', 'R', + 'B', 'E', 'S', 'I', 'D', 'E', + 'B', 'E', 'Y', 'Y', 'A', 'L', + 'B', 'I', 'N', 'A', 'R', 'Y', + 'B', 'I', 'S', 'H', 'O', 'P', + 'B', 'I', 'T', 'I', 'N', 'G', + 'B', 'I', 'T', 'T', 'E', 'R', + 'B', 'O', 'R', 'U', 'T', 'O', + 'B', 'O', 'T', 'T', 'O', 'M', + 'B', 'O', 'W', 'T', 'I', 'E', + 'B', 'R', 'A', 'N', 'C', 'H', + 'B', 'R', 'E', 'A', 'T', 'H', + 'B', 'R', 'E', 'V', 'I', 'S', + 'B', 'R', 'I', 'D', 'G', 'E', + 'B', 'R', 'O', 'K', 'E', 'N', + 'B', 'R', 'O', 'N', 'Z', 'E', + 'B', 'U', 'C', 'K', 'L', 'E', + 'B', 'U', 'L', 'L', 'E', 'T', + 'C', 'A', 'M', 'N', 'U', 'C', + 'C', 'A', 'N', 'C', 'E', 'L', + 'C', 'A', 'N', 'C', 'E', 'R', + 'C', 'A', 'N', 'D', 'R', 'A', + 'C', 'A', 'R', 'I', 'A', 'N', + 'C', 'A', 'T', 'A', 'W', 'A', + 'C', 'E', 'N', 'T', 'R', 'E', + 'C', 'E', 'R', '-', 'W', 'A', + 'C', 'H', 'A', 'M', 'K', 'O', + 'C', 'H', 'A', 'N', 'G', 'E', + 'C', 'H', 'I', 'L', 'L', 'U', + 'C', 'H', 'I', 'R', 'E', 'T', + 'C', 'H', 'I', 'R', 'O', 'N', + 'C', 'H', 'R', 'I', 'V', 'I', + 'C', 'H', 'R', 'O', 'M', 'A', + 'C', 'H', 'U', 'R', 'C', 'H', + 'C', 'I', 'R', 'C', 'L', 'E', + 'C', 'L', 'E', 'F', '-', '1', + 'C', 'L', 'E', 'F', '-', '2', + 'C', 'L', 'I', 'V', 'I', 'S', + 'C', 'L', 'O', 'S', 'E', 'D', + 'C', 'O', 'F', 'F', 'I', 'N', + 'C', 'O', 'L', 'U', 'M', 'N', + 'C', 'O', 'M', 'I', 'N', 'G', + 'C', 'O', 'M', 'M', 'O', 'N', + 'C', 'O', 'P', 'T', 'I', 'C', + 'C', 'O', 'R', 'N', 'E', 'R', + 'C', 'O', 'R', 'P', 'S', 'E', + 'C', 'R', 'E', 'D', 'I', 'T', + 'C', 'U', 'R', 'V', 'E', 'D', + 'D', 'A', 'A', 'D', 'H', 'U', + 'D', 'A', 'G', 'E', 'S', 'H', + 'D', 'A', 'G', 'G', 'E', 'R', + 'D', 'A', 'L', 'A', 'T', 'H', + 'D', 'A', 'M', 'A', 'R', 'U', + 'D', 'A', 'S', 'E', 'I', 'A', + 'D', 'A', 'S', 'H', 'E', 'D', + 'D', 'D', 'A', 'H', 'A', 'L', + 'D', 'E', 'G', 'R', 'E', 'E', + 'D', 'E', 'L', 'E', 'T', 'E', + 'D', 'E', 'N', 'N', 'E', 'N', + 'D', 'E', 'N', 'T', 'A', 'L', + 'D', 'E', 'V', 'I', 'C', 'E', + 'D', 'H', 'A', 'A', 'L', 'U', + 'D', 'H', 'A', 'R', 'M', 'A', + 'D', 'I', 'E', 'S', 'I', 'S', + 'D', 'I', 'G', 'R', 'A', 'M', + 'D', 'I', 'P', 'P', 'E', 'R', + 'D', 'I', 'R', 'E', 'C', 'T', + 'D', 'I', 'V', 'I', 'D', 'E', + 'D', 'J', 'E', 'R', 'V', 'I', + 'D', 'O', 'L', 'I', 'U', 'M', + 'D', 'O', 'L', 'L', 'A', 'R', + 'D', 'O', 'M', 'A', 'I', 'N', + 'D', 'O', 'M', 'I', 'N', 'O', + 'D', 'O', 'T', 'S', '-', '1', + 'D', 'O', 'T', 'S', '-', '2', + 'D', 'O', 'T', 'S', '-', '3', + 'D', 'O', 'T', 'S', '-', '4', + 'D', 'O', 'T', 'S', '-', '5', + 'D', 'O', 'T', 'S', '-', '6', + 'D', 'O', 'T', 'S', '-', '7', + 'D', 'O', 'T', 'S', '-', '8', + 'D', 'O', 'T', 'T', 'E', 'D', + 'D', 'O', 'U', 'B', 'L', 'E', + 'D', 'R', 'A', 'G', 'O', 'N', + 'D', 'U', 'T', 'I', 'E', 'S', + 'E', 'I', 'G', 'H', 'T', 'H', + 'E', 'I', 'G', 'H', 'T', 'Y', + 'E', 'L', 'E', 'V', 'E', 'N', + 'E', 'N', 'D', 'I', 'N', 'G', + 'E', 'Q', 'U', 'A', 'L', 'S', + 'E', 'S', 'C', 'A', 'P', 'E', + 'E', 'T', 'E', 'R', 'O', 'N', + 'E', 'X', 'C', 'E', 'S', 'S', + 'E', 'X', 'I', 'S', 'T', 'S', + 'E', 'Y', 'A', 'N', 'N', 'A', + 'F', 'A', 'C', 'E', '-', '1', + 'F', 'A', 'C', 'E', '-', '2', + 'F', 'A', 'C', 'E', '-', '3', + 'F', 'A', 'C', 'E', '-', '4', + 'F', 'A', 'C', 'E', '-', '5', + 'F', 'A', 'C', 'E', '-', '6', + 'F', 'A', 'C', 'T', 'O', 'R', + 'F', 'A', 'M', 'I', 'L', 'Y', + 'F', 'A', 'T', 'H', 'E', 'R', + 'F', 'E', 'M', 'A', 'L', 'E', + 'F', 'H', 'T', 'O', 'R', 'A', + 'F', 'I', 'F', 'T', 'H', 'S', + 'F', 'I', 'G', 'U', 'R', 'E', + 'F', 'I', 'L', 'L', 'E', 'D', + 'F', 'I', 'L', 'L', 'E', 'R', + 'F', 'I', 'N', 'I', 'T', 'E', + 'F', 'L', 'A', 'G', '-', '1', + 'F', 'L', 'A', 'G', '-', '2', + 'F', 'L', 'A', 'G', '-', '3', + 'F', 'L', 'A', 'G', '-', '4', + 'F', 'L', 'A', 'G', '-', '5', + 'F', 'L', 'E', 'X', 'U', 'S', + 'F', 'L', 'I', 'G', 'H', 'T', + 'F', 'L', 'O', 'R', 'A', 'L', + 'F', 'L', 'O', 'W', 'E', 'R', + 'F', 'O', 'R', 'C', 'E', 'S', + 'F', 'O', 'R', 'K', 'E', 'D', + 'F', 'O', 'U', 'R', 'T', 'H', + 'F', 'R', 'E', 'N', 'C', 'H', + 'F', 'T', 'H', 'O', 'R', 'A', + 'G', 'A', 'N', 'G', 'I', 'A', + 'G', 'A', 'P', 'P', 'E', 'D', + 'G', 'A', 'S', 'H', 'A', 'N', + 'G', 'E', 'D', 'O', 'L', 'A', + 'G', 'E', 'M', 'I', 'N', 'I', + 'G', 'E', 'N', 'I', 'K', 'I', + 'G', 'E', 'N', 'T', 'L', 'E', + 'G', 'E', 'R', 'E', 'S', 'H', + 'G', 'E', 'R', 'M', 'A', 'N', + 'G', 'H', 'A', 'I', 'N', 'U', + 'G', 'H', 'A', 'M', 'A', 'L', + 'G', 'H', 'U', 'N', 'N', 'A', + 'G', 'L', 'E', 'I', 'C', 'H', + 'G', 'O', 'R', 'G', 'O', 'N', + 'G', 'O', 'T', 'H', 'I', 'C', + 'G', 'R', 'A', 'M', 'M', 'A', + 'G', 'R', 'A', 'T', 'E', 'R', + 'G', 'R', 'O', 'U', 'N', 'D', + 'G', 'U', 'R', 'A', 'M', 'U', + 'G', 'U', 'R', 'U', 'S', 'H', + 'H', '-', 'T', 'Y', 'P', 'E', + 'H', 'A', 'F', 'U', 'K', 'H', + 'H', 'A', 'G', 'L', 'A', 'Z', + 'H', 'A', 'M', 'M', 'E', 'R', + 'H', 'A', 'N', 'G', 'U', 'L', + 'H', 'E', 'A', 'D', 'E', 'D', + 'H', 'E', 'A', 'V', 'E', 'N', + 'H', 'E', 'B', 'R', 'E', 'W', + 'H', 'E', 'I', 'S', 'E', 'I', + 'H', 'E', 'L', 'M', 'E', 'T', + 'H', 'E', 'R', 'M', 'E', 'S', + 'H', 'E', 'R', 'U', 'T', 'U', + 'H', 'I', 'D', 'I', 'N', 'G', + 'H', 'U', 'I', 'I', 'T', 'O', + 'H', 'Y', 'P', 'H', 'E', 'N', + 'I', '-', 'B', 'E', 'A', 'M', + 'I', 'L', 'I', 'M', 'M', 'U', + 'I', 'N', 'G', 'W', 'A', 'Z', + 'I', 'N', 'I', 'N', 'G', 'U', + 'I', 'N', 'S', 'E', 'C', 'T', + 'I', 'N', 'S', 'I', 'D', 'E', + 'I', 'S', 'A', 'K', 'I', 'A', + 'I', 'S', 'S', 'H', 'A', 'R', + 'I', 'T', 'A', 'L', 'I', 'C', + 'I', 'Y', 'A', 'N', 'N', 'A', + 'J', 'O', 'I', 'N', 'E', 'D', + 'J', 'O', 'I', 'N', 'E', 'R', + 'J', 'O', 'Y', 'O', 'U', 'S', + 'K', 'A', 'N', 'A', 'K', 'O', + 'K', 'A', 'N', 'G', 'X', 'I', + 'K', 'A', 'S', 'K', 'A', 'L', + 'K', 'A', 'T', 'A', 'V', 'A', + 'K', 'A', 'V', 'Y', 'K', 'A', + 'K', 'A', 'Z', 'A', 'K', 'H', + 'K', 'E', 'F', 'U', 'L', 'A', + 'K', 'E', 'L', 'V', 'I', 'N', + 'K', 'E', 'M', 'P', 'L', 'I', + 'K', 'E', 'M', 'P', 'U', 'L', + 'K', 'E', 'Y', 'C', 'A', 'P', + 'K', 'H', 'A', 'N', 'D', 'A', + 'K', 'H', 'O', 'M', 'U', 'T', + 'K', 'I', 'S', 'I', 'M', '5', + 'K', 'I', 'Y', 'E', 'O', 'K', + 'K', 'L', 'A', 'S', 'M', 'A', + 'K', 'L', 'I', 'T', 'O', 'N', + 'K', 'N', 'I', 'G', 'H', 'T', + 'K', 'O', 'R', 'E', 'A', 'N', + 'K', 'O', 'R', 'U', 'N', 'A', + 'K', 'U', 'S', 'H', 'U', '2', + 'K', 'W', 'U', '3', '1', '8', + 'K', 'Y', 'U', 'R', 'I', 'I', + 'L', '-', 'T', 'Y', 'P', 'E', + 'L', 'A', 'H', 'S', 'H', 'U', + 'L', 'A', 'M', 'A', 'D', 'H', + 'L', 'A', 'M', 'B', 'D', 'A', + 'L', 'A', 'R', 'G', 'E', 'R', + 'L', 'A', 'U', 'K', 'A', 'Z', + 'L', 'E', 'A', 'D', 'E', 'R', + 'L', 'E', 'G', 'I', 'O', 'N', + 'L', 'E', 'I', 'M', 'M', 'A', + 'L', 'E', 'N', 'G', 'T', 'H', + 'L', 'E', 'P', 'C', 'H', 'A', + 'L', 'E', 'S', 'S', 'E', 'R', + 'L', 'E', 'T', 'T', 'E', 'R', + 'L', 'I', 'L', 'I', 'T', 'H', + 'L', 'I', 'M', 'M', 'U', '2', + 'L', 'I', 'M', 'M', 'U', '4', + 'L', 'I', 'N', 'E', '-', '1', + 'L', 'I', 'N', 'E', '-', '3', + 'L', 'I', 'N', 'E', '-', '7', + 'L', 'I', 'N', 'E', '-', '9', + 'L', 'I', 'N', 'E', 'A', 'R', + 'L', 'I', 'Q', 'U', 'I', 'D', + 'L', 'I', 'T', 'T', 'L', 'E', + 'L', 'U', 'N', 'A', 'T', 'E', + 'L', 'Y', 'C', 'I', 'A', 'N', + 'L', 'Y', 'D', 'I', 'A', 'N', + 'M', 'A', 'C', 'R', 'O', 'N', + 'M', 'A', 'D', 'D', 'A', 'H', + 'M', 'A', 'I', 'D', 'E', 'N', + 'M', 'A', 'N', 'C', 'H', 'U', + 'M', 'A', 'N', 'N', 'A', 'Z', + 'M', 'A', 'R', 'K', '-', '1', + 'M', 'A', 'R', 'K', '-', '2', + 'M', 'A', 'R', 'K', '-', '3', + 'M', 'A', 'R', 'K', '-', '4', + 'M', 'A', 'R', 'K', 'E', 'R', + 'M', 'A', 'R', 'U', 'K', 'U', + 'M', 'A', 'S', 'O', 'R', 'A', + 'M', 'A', 'T', 'R', 'I', 'X', + 'M', 'A', 'X', 'I', 'M', 'A', + 'M', 'E', 'D', 'I', 'A', 'L', + 'M', 'E', 'D', 'I', 'U', 'M', + 'M', 'E', 'G', 'A', 'L', 'I', + 'M', 'E', 'M', 'B', 'E', 'R', + 'M', 'E', 'R', 'K', 'H', 'A', + 'M', 'E', 'T', 'R', 'I', 'A', + 'M', 'I', 'D', 'D', 'L', 'E', + 'M', 'I', 'K', 'R', 'O', 'N', + 'M', 'I', 'L', 'L', 'E', 'T', + 'M', 'I', 'N', 'I', 'M', 'A', + 'M', 'O', 'D', 'E', 'L', 'S', + 'M', 'O', 'D', 'U', 'L', 'O', + 'M', 'O', 'R', 'T', 'A', 'R', + 'M', 'O', 'T', 'H', 'E', 'R', + 'M', 'U', 'C', 'A', 'A', 'D', + 'M', 'U', 'N', 'S', 'U', 'B', + 'M', 'U', 'Q', 'D', 'A', 'M', + 'M', 'U', 'R', 'G', 'U', '2', + 'N', '-', 'C', 'R', 'E', 'E', + 'N', 'A', 'R', 'R', 'O', 'W', + 'N', 'A', 'U', 'D', 'I', 'Z', + 'N', 'A', 'U', 'T', 'H', 'S', + 'N', 'A', 'X', 'I', 'A', 'N', + 'N', 'E', 'N', 'A', 'N', 'O', + 'N', 'E', 'S', 'T', 'E', 'D', + 'N', 'E', 'U', 'T', 'E', 'R', + 'N', 'I', 'N', 'D', 'A', '2', + 'N', 'I', 'N', 'E', 'T', 'Y', + 'N', 'I', 'R', 'U', 'G', 'U', + 'N', 'O', 'K', 'H', 'U', 'K', + 'N', 'O', 'R', 'M', 'A', 'L', + 'N', 'U', 'B', 'I', 'A', 'N', + 'N', 'U', 'M', 'B', 'E', 'R', + 'N', 'U', 'M', 'E', 'R', 'O', + 'O', 'B', 'E', 'L', 'O', 'S', + 'O', 'B', 'E', 'L', 'U', 'S', + 'O', 'B', 'J', 'E', 'C', 'T', + 'O', 'G', 'O', 'N', 'E', 'K', + 'O', 'L', 'I', 'G', 'O', 'N', + 'O', 'M', 'A', 'L', 'O', 'N', + 'O', 'P', 'E', 'N', '-', 'P', + 'O', 'P', 'P', 'O', 'S', 'E', + 'O', 'P', 'T', 'I', 'O', 'N', + 'O', 'R', 'C', 'H', 'I', 'D', + 'O', 'R', 'I', 'G', 'I', 'N', + 'O', 'R', 'N', 'A', 'T', 'E', + 'O', 'T', 'T', 'A', 'V', 'A', + 'O', 'U', 'N', 'K', 'I', 'A', + 'O', 'X', 'E', 'I', 'A', 'I', + 'O', 'Y', 'A', 'N', 'N', 'A', + 'P', 'A', 'I', 'R', 'E', 'D', + 'P', 'A', 'L', 'L', 'A', 'S', + 'P', 'A', 'L', 'U', 'T', 'A', + 'P', 'A', 'M', 'A', 'D', 'A', + 'P', 'A', 'S', 'H', 'T', 'A', + 'P', 'E', 'N', 'C', 'I', 'L', + 'P', 'E', 'N', 'I', 'H', 'I', + 'P', 'E', 'O', 'R', 'T', 'H', + 'P', 'E', 'R', 'S', 'O', 'N', + 'P', 'E', 'R', 'T', 'H', 'O', + 'P', 'E', 'S', 'E', 'T', 'A', + 'P', 'H', 'N', 'A', 'E', 'K', + 'P', 'H', 'R', 'A', 'S', 'E', + 'P', 'I', 'A', 'S', 'M', 'A', + 'P', 'I', 'K', 'U', 'R', 'U', + 'P', 'I', 'P', 'I', 'N', 'G', + 'P', 'I', 'S', 'C', 'E', 'S', + 'P', 'L', 'A', 'N', 'C', 'K', + 'P', 'L', 'O', 'P', 'H', 'U', + 'P', 'L', 'U', 'M', 'E', 'D', + 'P', 'O', 'E', 'T', 'I', 'C', + 'P', 'O', 'E', 'T', 'R', 'Y', + 'P', 'O', 'I', 'N', 'T', 'O', + 'P', 'O', 'K', 'O', 'J', 'I', + 'P', 'O', 'S', 'T', 'A', 'L', + 'P', 'O', 'W', 'E', 'R', 'S', + 'P', 'R', 'O', 'T', 'O', 'S', + 'P', 'S', 'I', 'L', 'O', 'N', + 'P', 'T', 'H', 'A', 'H', 'A', + 'P', 'U', 'R', 'I', 'T', 'Y', + 'Q', 'A', 'M', 'A', 'T', 'S', + 'Q', 'A', 'R', 'N', 'E', 'Y', + 'Q', 'E', 'T', 'A', 'N', 'A', + 'Q', 'U', 'B', 'U', 'T', 'S', + 'R', '-', 'C', 'R', 'E', 'E', + 'R', 'A', 'I', 'S', 'E', 'D', + 'R', 'A', 'M', 'B', 'A', 'T', + 'R', 'A', 'S', 'O', 'U', 'L', + 'R', 'E', 'C', 'O', 'R', 'D', + 'R', 'E', 'J', 'A', 'N', 'G', + 'R', 'E', 'P', 'E', 'A', 'T', + 'R', 'E', 'T', 'U', 'R', 'N', + 'R', 'H', 'O', 'T', 'I', 'C', + 'R', 'I', 'K', 'R', 'I', 'K', + 'R', 'I', 'S', 'I', 'N', 'G', + 'R', 'I', 'T', 'U', 'A', 'L', + 'R', 'N', 'Y', 'I', 'N', 'G', + 'R', 'U', 'N', 'O', 'U', 'T', + 'S', 'A', 'A', 'D', 'H', 'U', + 'S', 'A', 'J', 'D', 'A', 'H', + 'S', 'A', 'M', 'E', 'K', 'H', + 'S', 'A', 'M', 'Y', 'O', 'K', + 'S', 'A', 'N', 'G', 'A', '2', + 'S', 'A', 'N', 'N', 'Y', 'A', + 'S', 'A', 'T', 'U', 'R', 'N', + 'S', 'A', 'Y', 'I', 'S', 'I', + 'S', 'C', 'A', 'L', 'E', 'S', + 'S', 'C', 'H', 'E', 'M', 'A', + 'S', 'C', 'R', 'E', 'E', 'N', + 'S', 'C', 'R', 'I', 'P', 'T', + 'S', 'E', 'C', 'O', 'N', 'D', + 'S', 'E', 'C', 'R', 'E', 'T', + 'S', 'E', 'C', 'T', 'O', 'R', + 'S', 'E', 'I', 'S', 'M', 'A', + 'S', 'E', 'R', 'I', 'F', 'S', + 'S', 'E', 'S', 'A', 'M', 'E', + 'S', 'H', 'A', 'D', 'D', 'A', + 'S', 'H', 'A', 'K', 'T', 'I', + 'S', 'H', 'A', 'P', 'E', 'S', + 'S', 'H', 'E', 'E', 'N', 'U', + 'S', 'H', 'E', 'Q', 'E', 'L', + 'S', 'H', 'E', 'S', 'H', '2', + 'S', 'H', 'I', 'E', 'L', 'D', + 'S', 'H', 'I', 'N', 'I', 'G', + 'S', 'H', 'O', 'R', 'T', 'S', + 'S', 'H', 'U', 'B', 'U', 'R', + 'S', 'I', 'C', 'K', 'L', 'E', + 'S', 'I', 'N', 'D', 'H', 'I', + 'S', 'I', 'N', 'G', 'L', 'E', + 'S', 'I', 'X', 'T', 'H', 'S', + 'S', 'K', 'E', 'W', 'E', 'D', + 'S', 'L', 'O', 'W', 'L', 'Y', + 'S', 'O', 'U', 'R', 'C', 'E', + 'S', 'O', 'W', 'I', 'L', 'O', + 'S', 'P', 'A', 'T', 'H', 'I', + 'S', 'P', 'E', 'E', 'C', 'H', + 'S', 'P', 'I', 'R', 'A', 'L', + 'S', 'P', 'I', 'R', 'I', 'T', + 'S', 'P', 'O', 'K', 'E', 'D', + 'S', 'P', 'R', 'I', 'N', 'G', + 'S', 'P', 'R', 'O', 'U', 'T', + 'S', 'P', 'U', 'N', 'G', 'S', + 'S', 'Q', 'U', 'A', 'R', 'E', + 'S', 'Q', 'U', 'I', 'S', 'H', + 'S', 'T', 'I', 'G', 'M', 'A', + 'S', 'T', 'I', 'M', 'M', 'E', + 'S', 'T', 'R', 'A', 'I', 'F', + 'S', 'T', 'R', 'E', 'S', 'S', + 'S', 'T', 'R', 'I', 'D', 'E', + 'S', 'T', 'R', 'O', 'K', 'E', + 'S', 'U', 'B', 'I', 'T', 'O', + 'S', 'U', 'B', 'S', 'E', 'T', + 'S', 'U', 'M', 'A', 'S', 'H', + 'S', 'U', 'M', 'M', 'E', 'R', + 'S', 'U', 'R', 'A', 'N', 'G', + 'S', 'W', 'O', 'R', 'D', 'S', + 'S', 'Y', 'L', 'O', 'T', 'I', + 'S', 'Y', 'M', 'B', 'O', 'L', + 'S', 'Y', 'N', 'A', 'F', 'I', + 'S', 'Y', 'O', 'U', 'W', 'A', + 'S', 'Y', 'R', 'I', 'A', 'C', + 'T', 'A', '-', 'R', 'O', 'L', + 'T', 'A', 'I', 'L', 'E', 'D', + 'T', 'A', 'L', 'E', 'N', 'T', + 'T', 'A', 'L', 'I', 'N', 'G', + 'T', 'A', 'M', 'I', 'N', 'G', + 'T', 'A', 'N', 'N', 'E', 'D', + 'T', 'A', 'U', 'R', 'U', 'S', + 'T', 'E', 'D', 'U', 'N', 'G', + 'T', 'E', 'L', 'E', 'I', 'A', + 'T', 'E', 'L', 'O', 'U', 'S', + 'T', 'E', 'L', 'U', 'G', 'U', + 'T', 'E', 'M', 'P', 'U', 'S', + 'T', 'E', 'N', 'U', 'T', 'O', + 'T', 'H', 'A', 'A', 'L', 'U', + 'T', 'H', 'A', 'A', 'N', 'A', + 'T', 'H', 'A', 'H', 'A', 'N', + 'T', 'H', 'A', 'N', 'N', 'A', + 'T', 'H', 'E', 'T', 'H', 'E', + 'T', 'H', 'I', 'R', 'D', 'S', + 'T', 'H', 'I', 'R', 'T', 'Y', + 'T', 'H', 'I', 'U', 'T', 'H', + 'T', 'H', 'R', 'E', 'A', 'D', + 'T', 'H', 'Y', 'O', 'O', 'M', + 'T', 'I', 'K', 'E', 'U', 'T', + 'T', 'I', 'P', 'E', 'H', 'A', + 'T', 'O', 'N', 'E', '-', '1', + 'T', 'O', 'N', 'E', '-', '2', + 'T', 'O', 'N', 'E', '-', '3', + 'T', 'O', 'N', 'E', '-', '4', + 'T', 'O', 'N', 'E', '-', '5', + 'T', 'O', 'N', 'E', '-', '6', + 'T', 'O', 'N', 'G', 'U', 'E', + 'T', 'O', 'P', 'B', 'A', 'R', + 'T', 'R', 'I', 'P', 'L', 'E', + 'T', 'R', 'I', 'P', 'L', 'I', + 'T', 'R', 'I', 'P', 'O', 'D', + 'T', 'R', 'I', 'T', 'O', 'S', + 'T', 'S', 'H', 'O', 'O', 'K', + 'T', 'S', 'H', 'U', 'G', 'S', + 'T', 'T', 'E', 'H', 'E', 'H', + 'T', 'U', 'A', 'R', 'E', 'G', + 'T', 'U', 'G', 'R', 'I', 'K', + 'T', 'U', 'R', 'B', 'A', 'N', + 'T', 'U', 'R', 'N', 'E', 'D', + 'T', 'U', 'R', 'T', 'L', 'E', + 'T', 'V', 'R', 'I', 'D', 'O', + 'T', 'W', 'E', 'L', 'V', 'E', + 'T', 'W', 'E', 'N', 'T', 'Y', + 'T', 'Y', 'P', 'E', '-', '1', + 'T', 'Y', 'P', 'E', '-', '2', + 'T', 'Y', 'P', 'E', '-', '3', + 'T', 'Y', 'P', 'E', '-', '4', + 'T', 'Y', 'P', 'E', '-', '5', + 'T', 'Y', 'P', 'E', '-', '6', + 'T', 'Y', 'P', 'E', '-', '7', + 'U', 'D', 'A', 'T', 'T', 'A', + 'U', 'I', 'G', 'H', 'U', 'R', + 'U', 'P', 'T', 'U', 'R', 'N', + 'U', 'P', 'W', 'A', 'R', 'D', + 'U', 'R', 'A', 'N', 'U', 'S', + 'U', 'S', 'H', 'U', 'M', 'X', + 'U', 'Y', 'A', 'N', 'N', 'A', + 'V', 'A', 'L', 'L', 'E', 'Y', + 'V', 'A', 'R', 'E', 'I', 'A', + 'V', 'A', 'R', 'I', 'K', 'A', + 'V', 'E', 'C', 'T', 'O', 'R', + 'V', 'E', 'S', 'S', 'E', 'L', + 'V', 'I', 'R', 'A', 'M', 'A', + 'V', 'I', 'R', 'I', 'A', 'M', + 'V', 'O', 'I', 'C', 'E', 'D', + 'V', 'O', 'L', 'U', 'M', 'E', + 'V', 'R', 'A', 'C', 'H', 'Y', + 'V', 'U', 'L', 'G', 'A', 'R', + 'W', 'E', 'A', 'P', 'O', 'N', + 'W', 'E', 'I', 'G', 'H', 'T', + 'W', 'I', 'G', 'G', 'L', 'Y', + 'W', 'I', 'N', 'T', 'E', 'R', + 'W', 'O', 'L', 'O', 'S', 'O', + 'W', 'R', 'E', 'A', 'T', 'H', + 'X', 'E', 'S', 'T', 'E', 'S', + 'Y', '-', 'C', 'R', 'E', 'E', + 'Y', 'A', 'K', 'A', 'S', 'H', + 'Y', 'E', 'L', 'L', 'O', 'W', + 'Y', 'F', 'E', 'S', 'I', 'S', + 'Y', 'O', '-', 'Y', 'A', 'E', + 'Y', 'O', '-', 'Y', 'E', 'O', + 'Y', 'P', 'S', 'I', 'L', 'I', + 'Y', 'U', '-', 'Y', 'E', 'O', + 'Z', 'E', 'M', 'L', 'J', 'A', + 'Z', 'E', 'M', 'L', 'Y', 'A', + 'Z', 'I', 'G', 'Z', 'A', 'G', + 'Z', 'Q', 'A', 'P', 'H', 'A', + 'A', 'A', 'Y', 'A', 'N', 'N', 'A', + 'A', 'B', 'A', 'F', 'I', 'L', 'I', + 'A', 'B', 'Y', 'S', 'M', 'A', 'L', + 'A', 'C', 'A', 'D', 'E', 'M', 'Y', + 'A', 'C', 'C', 'O', 'U', 'N', 'T', + 'A', 'D', 'V', 'A', 'N', 'C', 'E', + 'A', 'E', 'Y', 'A', 'N', 'N', 'A', + 'A', 'F', 'G', 'H', 'A', 'N', 'I', + 'A', 'F', 'R', 'I', 'C', 'A', 'N', + 'A', 'H', 'A', 'G', 'G', 'A', 'R', + 'A', 'I', 'V', 'I', 'L', 'I', 'K', + 'A', 'I', 'Y', 'A', 'N', 'N', 'A', + 'A', 'L', 'E', 'M', 'B', 'I', 'C', + 'A', 'L', 'I', 'G', 'N', 'E', 'D', + 'A', 'L', 'L', 'A', 'H', 'O', 'U', + 'A', 'N', 'G', 'U', 'L', 'A', 'R', + 'A', 'N', 'N', 'U', 'I', 'T', 'Y', + 'A', 'P', 'O', 'T', 'H', 'E', 'S', + 'A', 'R', 'A', 'E', 'A', '-', 'I', + 'A', 'R', 'A', 'E', 'A', '-', 'U', + 'A', 'R', 'C', 'H', 'A', 'I', 'C', + 'A', 'R', 'K', 'T', 'I', 'K', 'O', + 'A', 'U', 'S', 'T', 'R', 'A', 'L', + 'A', 'U', 'Y', 'A', 'N', 'N', 'A', + 'A', 'V', 'E', 'R', 'A', 'G', 'E', + 'B', 'A', 'A', 'R', 'E', 'R', 'U', + 'B', 'A', 'I', 'R', 'K', 'A', 'N', + 'B', 'A', 'M', 'B', 'O', 'O', 'S', + 'B', 'A', 'R', 'L', 'I', 'N', 'E', + 'B', 'A', 'R', 'R', 'E', 'K', 'H', + 'B', 'A', 'R', 'R', 'I', 'E', 'R', + 'B', 'A', 'S', 'H', 'K', 'I', 'R', + 'B', 'A', 'T', 'H', 'T', 'U', 'B', + 'B', 'A', 'Y', 'A', 'N', 'N', 'A', + 'B', 'E', 'C', 'A', 'U', 'S', 'E', + 'B', 'E', 'E', 'H', 'I', 'V', 'E', + 'B', 'E', 'N', 'G', 'A', 'L', 'I', + 'B', 'E', 'N', 'Z', 'E', 'N', 'E', + 'B', 'E', 'T', 'W', 'E', 'E', 'N', + 'B', 'I', 'N', 'D', 'I', 'N', 'G', + 'B', 'J', 'A', 'R', 'K', 'A', 'N', + 'B', 'L', 'E', 'N', 'D', 'E', 'D', + 'B', 'R', 'A', 'C', 'K', 'E', 'T', + 'B', 'R', 'A', 'I', 'L', 'L', 'E', + 'B', 'R', 'A', 'K', 'C', 'E', 'T', + 'B', 'R', 'I', 'S', 'T', 'L', 'E', + 'B', 'U', 'U', 'M', 'I', 'S', 'H', + 'C', 'A', 'E', 'S', 'U', 'R', 'A', + 'C', 'A', 'P', 'I', 'T', 'A', 'L', + 'C', 'A', 'P', 'T', 'I', 'V', 'E', + 'C', 'A', 'R', 'R', 'I', 'E', 'R', + 'C', 'A', 'U', 'T', 'I', 'O', 'N', + 'C', 'A', 'Y', 'A', 'N', 'N', 'A', + 'C', 'E', 'D', 'I', 'L', 'L', 'A', + 'C', 'E', 'I', 'L', 'I', 'N', 'G', + 'C', 'E', 'L', 'S', 'I', 'U', 'S', + 'C', 'E', 'N', 'T', 'R', 'E', 'D', + 'C', 'H', 'A', 'M', 'I', 'L', 'I', + 'C', 'H', 'A', 'R', 'I', 'O', 'T', + 'C', 'H', 'E', 'V', 'R', 'O', 'N', + 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'C', 'H', 'I', 'N', 'E', 'S', 'E', + 'C', 'H', 'R', 'O', 'N', 'O', 'N', + 'C', 'H', 'R', 'O', 'N', 'O', 'U', + 'C', 'I', 'R', 'C', 'L', 'E', 'D', + 'C', 'I', 'R', 'C', 'L', 'E', 'S', + 'C', 'L', 'O', 'S', 'I', 'N', 'G', + 'C', 'L', 'O', 'S', 'U', 'R', 'E', + 'C', 'L', 'O', 'T', 'H', 'E', 'S', + 'C', 'L', 'U', 'S', 'T', 'E', 'R', + 'C', 'O', 'M', 'P', 'A', 'R', 'E', + 'C', 'O', 'N', 'I', 'C', 'A', 'L', + 'C', 'O', 'N', 'T', 'A', 'C', 'T', + 'C', 'O', 'N', 'T', 'A', 'I', 'N', + 'C', 'O', 'N', 'T', 'O', 'U', 'R', + 'C', 'O', 'N', 'T', 'R', 'O', 'L', + 'C', 'O', 'R', 'N', 'E', 'R', 'S', + 'C', 'O', 'R', 'O', 'N', 'I', 'S', + 'C', 'O', 'R', 'R', 'E', 'C', 'T', + 'C', 'O', 'U', 'N', 'C', 'I', 'L', + 'C', 'R', 'O', 'S', 'S', 'E', 'D', + 'C', 'U', 'R', 'R', 'E', 'N', 'T', + 'C', 'U', 'R', 'V', 'I', 'N', 'G', + 'C', 'W', 'E', 'O', 'R', 'T', 'H', + 'C', 'Y', 'P', 'E', 'R', 'U', 'S', + 'C', 'Y', 'P', 'R', 'I', 'O', 'T', + 'D', 'A', 'G', 'A', 'L', 'G', 'A', + 'D', 'A', 'N', 'T', 'A', 'J', 'A', + 'D', 'A', 'P', '-', 'B', 'E', 'I', + 'D', 'A', 'P', '-', 'P', 'I', 'I', + 'D', 'A', 'Y', 'A', 'N', 'N', 'A', + 'D', 'E', 'C', 'A', 'Y', 'E', 'D', + 'D', 'E', 'C', 'I', 'M', 'A', 'L', + 'D', 'E', 'L', 'P', 'H', 'I', 'C', + 'D', 'E', 'S', 'E', 'R', 'E', 'T', + 'D', 'H', 'A', 'L', 'A', 'T', 'H', + 'D', 'I', 'A', 'M', 'O', 'N', 'D', + 'D', 'I', 'A', 'R', 'G', 'O', 'N', + 'D', 'I', 'G', 'A', 'M', 'M', 'A', + 'D', 'I', 'G', 'R', 'A', 'P', 'H', + 'D', 'I', 'M', 'I', 'D', 'I', 'A', + 'D', 'I', 'M', 'M', 'I', 'N', 'G', + 'D', 'I', 'N', 'G', 'B', 'A', 'T', + 'D', 'I', 'P', 'L', 'O', 'U', 'N', + 'D', 'I', 'S', 'I', 'M', 'O', 'U', + 'D', 'I', 'V', 'I', 'D', 'E', 'D', + 'D', 'I', 'V', 'I', 'D', 'E', 'R', + 'D', 'I', 'V', 'I', 'D', 'E', 'S', + 'D', 'I', 'V', 'O', 'R', 'C', 'E', + 'D', 'O', 'T', 'L', 'E', 'S', 'S', + 'D', 'O', 'T', 'S', '-', '1', '2', + 'D', 'O', 'T', 'S', '-', '1', '3', + 'D', 'O', 'T', 'S', '-', '1', '4', + 'D', 'O', 'T', 'S', '-', '1', '5', + 'D', 'O', 'T', 'S', '-', '1', '6', + 'D', 'O', 'T', 'S', '-', '1', '7', + 'D', 'O', 'T', 'S', '-', '1', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', + 'D', 'O', 'T', 'S', '-', '2', '4', + 'D', 'O', 'T', 'S', '-', '2', '5', + 'D', 'O', 'T', 'S', '-', '2', '6', + 'D', 'O', 'T', 'S', '-', '2', '7', + 'D', 'O', 'T', 'S', '-', '2', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', + 'D', 'O', 'T', 'S', '-', '3', '5', + 'D', 'O', 'T', 'S', '-', '3', '6', + 'D', 'O', 'T', 'S', '-', '3', '7', + 'D', 'O', 'T', 'S', '-', '3', '8', + 'D', 'O', 'T', 'S', '-', '4', '5', + 'D', 'O', 'T', 'S', '-', '4', '6', + 'D', 'O', 'T', 'S', '-', '4', '7', + 'D', 'O', 'T', 'S', '-', '4', '8', + 'D', 'O', 'T', 'S', '-', '5', '6', + 'D', 'O', 'T', 'S', '-', '5', '7', + 'D', 'O', 'T', 'S', '-', '5', '8', + 'D', 'O', 'T', 'S', '-', '6', '7', + 'D', 'O', 'T', 'S', '-', '6', '8', + 'D', 'O', 'T', 'S', '-', '7', '8', + 'D', 'O', 'U', 'B', 'L', 'E', 'D', + 'D', 'R', 'A', 'C', 'H', 'M', 'A', + 'E', 'A', 'B', 'H', 'A', 'D', 'H', + 'E', 'A', 'D', 'H', 'A', 'D', 'H', + 'E', 'A', 'R', 'T', 'H', 'L', 'Y', + 'E', 'A', 'S', 'T', 'E', 'R', 'N', + 'E', 'B', 'E', 'F', 'I', 'L', 'I', + 'E', 'E', 'Y', 'A', 'N', 'N', 'A', + 'E', 'I', 'G', 'H', 'T', 'H', 'S', + 'E', 'L', 'A', 'F', 'R', 'O', 'N', + 'E', 'L', 'E', 'M', 'E', 'N', 'T', + 'E', 'L', 'L', 'I', 'P', 'S', 'E', + 'E', 'N', 'A', 'R', 'X', 'I', 'S', + 'E', 'N', 'Q', 'U', 'I', 'R', 'Y', + 'E', 'P', 'S', 'I', 'L', 'O', 'N', + 'E', 'T', 'N', 'A', 'H', 'T', 'A', + 'E', 'V', 'E', 'N', 'I', 'N', 'G', + 'F', 'A', 'I', 'L', 'U', 'R', 'E', + 'F', 'A', 'L', 'L', 'I', 'N', 'G', + 'F', 'A', 'Y', 'A', 'N', 'N', 'A', + 'F', 'E', 'A', 'T', 'H', 'E', 'R', + 'F', 'E', 'R', 'M', 'A', 'T', 'A', + 'F', 'I', 'F', 'T', 'E', 'E', 'N', + 'F', 'I', 'S', 'H', 'E', 'Y', 'E', + 'F', 'O', 'N', 'G', 'M', 'A', 'N', + 'F', 'O', 'R', 'K', 'I', 'N', 'G', + 'F', 'R', 'A', 'K', 'T', 'U', 'R', + 'F', 'U', 'N', 'E', 'R', 'A', 'L', + 'G', 'A', 'A', 'H', 'L', 'A', 'A', + 'G', 'A', 'R', 'M', 'E', 'N', 'T', + 'G', 'A', 'Y', 'A', 'N', 'N', 'A', + 'G', 'E', 'N', 'E', 'R', 'I', 'C', + 'G', 'E', 'S', 'H', 'T', 'I', 'N', + 'G', 'I', 'R', 'U', 'D', 'A', 'A', + 'G', 'L', 'A', 'G', 'O', 'L', 'I', + 'G', 'L', 'O', 'T', 'T', 'A', 'L', + 'G', 'R', 'E', 'A', 'T', 'E', 'R', + 'G', 'U', 'A', 'R', 'A', 'N', 'I', + 'H', 'A', 'F', 'U', 'K', 'H', 'A', + 'H', 'A', 'L', 'A', 'N', 'T', 'A', + 'H', 'A', 'L', 'B', 'E', 'R', 'D', + 'H', 'A', 'N', 'U', 'N', 'O', 'O', + 'H', 'A', 'R', 'P', 'O', 'O', 'N', + 'H', 'A', 'S', 'A', 'N', 'T', 'A', + 'H', 'A', 'Y', 'A', 'N', 'N', 'A', + 'H', 'E', '-', 'G', 'O', 'A', 'T', + 'H', 'E', 'A', 'D', 'I', 'N', 'G', + 'H', 'E', 'R', 'A', 'E', 'U', 'M', + 'H', 'E', 'X', 'A', 'G', 'O', 'N', + 'H', 'O', 'L', 'D', 'I', 'N', 'G', + 'H', 'R', 'Y', 'V', 'N', 'I', 'A', + 'H', 'U', 'N', 'D', 'R', 'E', 'D', + 'I', '-', 'A', 'R', 'A', 'E', 'A', + 'I', 'B', 'I', 'F', 'I', 'L', 'I', + 'I', 'C', 'H', 'A', 'D', 'I', 'N', + 'I', 'I', 'Y', 'A', 'N', 'N', 'A', + 'I', 'L', 'I', 'M', 'M', 'U', '3', + 'I', 'L', 'I', 'M', 'M', 'U', '4', + 'I', 'M', 'I', 'S', 'E', 'O', 'S', + 'I', 'N', 'H', 'I', 'B', 'I', 'T', + 'I', 'N', 'I', 'T', 'I', 'A', 'L', + 'I', 'N', 'S', 'U', 'L', 'A', 'R', + 'I', 'N', 'V', 'E', 'R', 'S', 'E', + 'I', 'O', 'D', 'H', 'A', 'D', 'H', + 'I', 'O', 'T', 'A', 'T', 'E', 'D', + 'I', 'Z', 'H', 'I', 'T', 'S', 'A', + 'J', 'A', 'N', 'U', 'A', 'R', 'Y', + 'J', 'A', 'Y', 'A', 'N', 'N', 'A', + 'J', 'E', 'G', 'O', 'G', 'A', 'N', + 'J', 'U', 'P', 'I', 'T', 'E', 'R', + 'K', 'A', 'K', 'A', 'B', 'A', 'T', + 'K', 'A', 'N', 'N', 'A', 'D', 'A', + 'K', 'A', 'N', 'T', 'A', 'J', 'A', + 'K', 'A', 'R', 'A', 'T', 'T', 'O', + 'K', 'A', 'R', 'O', 'R', 'I', 'I', + 'K', 'A', 'Y', 'A', 'N', 'N', 'A', + 'K', 'E', 'E', 'P', 'I', 'N', 'G', + 'K', 'E', 'M', 'B', 'A', 'N', 'G', + 'K', 'E', 'N', 'T', 'I', 'M', 'A', + 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'K', 'I', 'N', 'S', 'H', 'I', 'P', + 'K', 'I', 'R', 'G', 'H', 'I', 'Z', + 'K', 'O', 'M', 'B', 'U', 'V', 'A', + 'K', 'O', 'O', 'M', 'U', 'U', 'T', + 'K', 'O', 'R', 'A', 'N', 'I', 'C', + 'K', 'O', 'R', 'O', 'N', 'I', 'S', + 'K', 'R', 'A', 'T', 'I', 'M', 'A', + 'K', 'U', 'R', 'O', 'O', 'N', 'E', + 'K', 'Y', 'A', 'T', 'H', 'O', 'S', + 'K', 'Y', 'L', 'I', 'S', 'M', 'A', + 'L', 'A', 'T', 'E', 'R', 'A', 'L', + 'L', 'A', 'Y', 'A', 'N', 'N', 'A', + 'L', 'E', 'A', 'T', 'H', 'E', 'R', + 'L', 'E', 'G', 'E', 'T', 'O', 'S', + 'L', 'I', 'M', 'I', 'T', 'E', 'D', + 'L', 'I', 'N', 'K', 'I', 'N', 'G', + 'L', 'J', 'U', 'D', 'I', 'J', 'E', + 'L', 'O', 'G', 'I', 'C', 'A', 'L', + 'L', 'O', 'Z', 'E', 'N', 'G', 'E', + 'L', 'Y', 'G', 'I', 'S', 'M', 'A', + 'M', 'A', 'H', 'J', 'O', 'N', 'G', + 'M', 'A', 'I', 'K', 'U', 'R', 'O', + 'M', 'A', 'I', 'M', 'U', 'A', 'N', + 'M', 'A', 'K', 'S', 'U', 'R', 'A', + 'M', 'A', 'L', 'A', 'K', 'O', 'N', + 'M', 'A', 'L', 'T', 'E', 'S', 'E', + 'M', 'A', 'N', 'S', 'Y', 'O', 'N', + 'M', 'A', 'R', 'B', 'U', 'T', 'A', + 'M', 'A', 'R', 'C', 'A', 'T', 'O', + 'M', 'A', 'S', 'S', 'I', 'N', 'G', + 'M', 'A', 'T', 'T', 'O', 'C', 'K', + 'M', 'A', 'Y', 'A', 'N', 'N', 'A', + 'M', 'E', 'A', 'S', 'U', 'R', 'E', + 'M', 'E', 'E', 'T', 'O', 'R', 'U', + 'M', 'E', 'G', 'A', 'T', 'O', 'N', + 'M', 'E', 'R', 'C', 'U', 'R', 'Y', + 'M', 'I', 'D', 'L', 'I', 'N', 'E', + 'M', 'I', 'K', 'U', 'R', 'O', 'N', + 'M', 'O', 'D', 'E', 'S', 'T', 'Y', + 'M', 'O', 'R', 'N', 'I', 'N', 'G', + 'M', 'U', 'S', 'I', 'C', 'A', 'L', + 'M', 'Y', 'A', 'N', 'M', 'A', 'R', + 'M', 'Y', 'S', 'L', 'I', 'T', 'E', + 'N', 'A', 'S', 'K', 'A', 'P', 'I', + 'N', 'A', 'T', 'U', 'R', 'A', 'L', + 'N', 'A', 'Y', 'A', 'N', 'N', 'A', + 'N', 'E', 'G', 'A', 'T', 'E', 'D', + 'N', 'E', 'I', 'T', 'H', 'E', 'R', + 'N', 'E', 'P', 'T', 'U', 'N', 'E', + 'N', 'E', 'U', 'T', 'R', 'A', 'L', + 'N', 'E', 'W', 'L', 'I', 'N', 'E', + 'N', 'G', 'E', 'A', 'D', 'A', 'L', + 'N', 'I', 'K', 'A', 'H', 'I', 'T', + 'N', 'O', 'M', 'I', 'N', 'A', 'L', + 'N', 'O', 'T', 'C', 'H', 'E', 'D', + 'N', 'U', 'M', 'E', 'R', 'A', 'L', + 'N', 'U', 'M', 'E', 'R', 'I', 'C', + 'N', 'U', 'N', 'A', 'V', 'I', 'K', + 'N', 'U', 'N', 'A', 'V', 'U', 'T', + 'N', 'U', 'T', 'I', 'L', 'L', 'U', + 'N', 'Y', 'I', 'N', '-', 'D', 'O', + 'O', 'B', 'L', 'I', 'Q', 'U', 'E', + 'O', 'B', 'O', 'F', 'I', 'L', 'I', + 'O', 'C', 'T', 'O', 'B', 'E', 'R', + 'O', 'M', 'I', 'C', 'R', 'O', 'N', + 'O', 'N', 'E', 'S', 'E', 'L', 'F', + 'O', 'O', 'Y', 'A', 'N', 'N', 'A', + 'O', 'P', 'E', 'N', 'I', 'N', 'G', + 'O', 'R', 'D', 'I', 'N', 'A', 'L', + 'O', 'S', 'M', 'A', 'N', 'Y', 'A', + 'O', 'T', 'H', 'A', 'L', 'A', 'N', + 'O', 'U', 'T', 'L', 'I', 'N', 'E', + 'O', 'V', 'E', 'R', 'B', 'A', 'R', + 'O', 'V', 'E', 'R', 'L', 'A', 'Y', + 'P', 'A', 'C', 'K', 'I', 'N', 'G', + 'P', 'A', 'L', 'A', 'T', 'A', 'L', + 'P', 'A', 'L', 'A', 'U', 'N', 'G', + 'P', 'A', 'L', 'L', 'A', 'W', 'A', + 'P', 'A', 'M', 'A', 'A', 'E', 'H', + 'P', 'A', 'M', 'E', 'P', 'E', 'T', + 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'P', 'A', 'N', 'Y', 'I', 'K', 'U', + 'P', 'A', 'N', 'Y', 'U', 'K', 'U', + 'P', 'A', 'P', 'Y', 'R', 'U', 'S', + 'P', 'A', 'R', 'E', 'R', 'E', 'N', + 'P', 'A', 'R', 'T', 'I', 'A', 'L', + 'P', 'A', 'T', 'T', 'E', 'R', 'N', + 'P', 'A', 'Y', 'A', 'N', 'N', 'A', + 'P', 'A', 'Y', 'E', 'R', 'O', 'K', + 'P', 'E', 'R', 'C', 'E', 'N', 'T', + 'P', 'E', 'R', 'S', 'I', 'A', 'N', + 'P', 'E', 'T', 'A', 'S', 'M', 'A', + 'P', 'E', 'T', 'A', 'S', 'T', 'I', + 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'P', 'H', 'I', 'N', 'T', 'H', 'U', + 'P', 'H', 'U', 'T', 'H', 'A', 'O', + 'P', 'I', 'L', 'C', 'R', 'O', 'W', + 'P', 'L', 'A', 'G', 'I', 'O', 'S', + 'P', 'O', 'D', 'A', 'T', 'U', 'S', + 'P', 'O', 'I', 'N', 'T', 'E', 'D', + 'P', 'O', 'I', 'N', 'T', 'E', 'R', + 'P', 'R', 'E', 'C', 'E', 'D', 'E', + 'P', 'R', 'E', 'F', 'A', 'C', 'E', + 'P', 'R', 'I', 'V', 'A', 'T', 'E', + 'P', 'R', 'O', 'D', 'U', 'C', 'T', + 'P', 'U', 'S', 'H', 'I', 'N', 'G', + 'Q', 'U', 'A', 'R', 'T', 'E', 'R', + 'R', 'A', 'D', 'I', 'C', 'A', 'L', + 'R', 'A', 'K', 'H', 'A', 'N', 'G', + 'R', 'A', 'P', 'I', 'S', 'M', 'A', + 'R', 'A', 'Y', 'A', 'N', 'N', 'A', + 'R', 'E', 'A', 'H', 'M', 'U', 'K', + 'R', 'E', 'L', 'E', 'A', 'S', 'E', + 'R', 'E', 'R', 'E', 'K', 'A', 'N', + 'R', 'E', 'T', 'R', 'E', 'A', 'T', + 'R', 'E', 'V', 'E', 'R', 'S', 'E', + 'R', 'G', 'Y', 'I', 'N', 'G', 'S', + 'R', 'I', 'T', 'T', 'O', 'R', 'U', + 'R', 'O', 'S', 'E', 'T', 'T', 'E', + 'R', 'O', 'T', 'A', 'T', 'E', 'D', + 'R', 'O', 'T', 'U', 'N', 'D', 'A', + 'R', 'O', 'U', 'N', 'D', 'E', 'D', + 'R', 'U', 'U', 'B', 'U', 'R', 'U', + 'S', 'A', 'I', 'K', 'U', 'R', 'U', + 'S', 'A', 'L', 'T', 'I', 'R', 'E', + 'S', 'A', 'M', 'P', 'H', 'A', 'O', + 'S', 'A', 'N', 'Y', 'A', 'K', 'A', + 'S', 'A', 'Y', 'A', 'N', 'N', 'A', + 'S', 'C', 'H', 'O', 'L', 'A', 'R', + 'S', 'C', 'R', 'U', 'P', 'L', 'E', + 'S', 'E', 'A', 'G', 'U', 'L', 'L', + 'S', 'E', 'C', 'T', 'I', 'O', 'N', + 'S', 'E', 'G', 'M', 'E', 'N', 'T', + 'S', 'E', 'M', 'K', 'A', 'T', 'H', + 'S', 'E', 'R', 'V', 'I', 'C', 'E', + 'S', 'E', 'V', 'E', 'N', 'T', 'Y', + 'S', 'E', 'X', 'T', 'A', 'N', 'S', + 'S', 'E', 'X', 'T', 'I', 'L', 'E', + 'S', 'E', 'X', 'T', 'U', 'L', 'A', + 'S', 'H', 'A', 'P', 'I', 'N', 'G', + 'S', 'H', 'A', 'V', 'I', 'A', 'N', + 'S', 'H', 'E', 'S', 'H', 'I', 'G', + 'S', 'H', 'T', 'A', 'P', 'I', 'C', + 'S', 'H', 'U', 'F', 'F', 'L', 'E', + 'S', 'I', 'L', 'I', 'Q', 'U', 'A', + 'S', 'I', 'M', 'I', 'L', 'A', 'R', + 'S', 'I', 'N', 'H', 'A', 'L', 'A', + 'S', 'I', 'N', 'K', 'I', 'N', 'G', + 'S', 'I', 'R', 'I', 'N', 'G', 'U', + 'S', 'I', 'X', 'T', 'E', 'E', 'N', + 'S', 'K', 'L', 'I', 'R', 'O', 'N', + 'S', 'L', 'A', 'N', 'T', 'E', 'D', + 'S', 'L', 'O', 'P', 'I', 'N', 'G', + 'S', 'M', 'A', 'L', 'L', 'E', 'R', + 'S', 'M', 'I', 'L', 'I', 'N', 'G', + 'S', 'N', 'O', 'W', 'M', 'A', 'N', + 'S', 'O', 'C', 'I', 'E', 'T', 'Y', + 'S', 'O', 'G', 'D', 'I', 'A', 'N', + 'S', 'O', 'L', 'I', 'D', 'U', 'S', + 'S', 'P', 'A', 'C', 'I', 'N', 'G', + 'S', 'P', 'A', 'R', 'K', 'L', 'E', + 'S', 'P', 'E', 'C', 'I', 'A', 'L', + 'S', 'P', 'I', 'D', 'E', 'R', 'Y', + 'S', 'P', 'I', 'R', 'A', 'N', 'T', + 'S', 'P', 'R', 'I', 'N', 'G', 'S', + 'S', 'Q', 'U', 'A', 'R', 'E', 'D', + 'S', 'Q', 'U', 'A', 'R', 'E', 'S', + 'S', 'T', 'A', 'T', 'E', 'R', 'S', + 'S', 'T', 'A', 'U', 'R', 'O', 'S', + 'S', 'T', 'A', 'V', 'R', 'O', 'S', + 'S', 'T', 'A', 'V', 'R', 'O', 'U', + 'S', 'T', 'R', 'O', 'K', 'E', 'S', + 'S', 'U', 'B', 'J', 'E', 'C', 'T', + 'S', 'U', 'B', 'U', 'N', 'I', 'T', + 'S', 'U', 'C', 'C', 'E', 'E', 'D', + 'S', 'U', 'R', 'F', 'A', 'C', 'E', + 'S', 'Y', 'N', 'A', 'G', 'M', 'A', + 'S', 'Y', 'N', 'E', 'V', 'M', 'A', + 'T', 'A', 'A', 'L', 'U', 'J', 'A', + 'T', 'A', 'G', 'A', 'L', 'O', 'G', + 'T', 'A', 'I', 'S', 'Y', 'O', 'U', + 'T', 'A', 'L', 'E', 'N', 'T', 'S', + 'T', 'A', 'T', 'W', 'E', 'E', 'L', + 'T', 'A', 'Y', 'A', 'N', 'N', 'A', + 'T', 'C', 'H', 'E', 'H', 'E', 'H', + 'T', 'E', 'L', 'I', 'S', 'H', 'A', + 'T', 'E', 'S', 'S', 'E', 'R', 'A', + 'T', 'H', '-', 'C', 'R', 'E', 'E', + 'T', 'H', 'E', 'S', 'E', 'O', 'S', + 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'T', 'H', 'R', 'E', 'E', '-', 'D', + 'T', 'H', 'R', 'O', 'U', 'G', 'H', + 'T', 'H', 'U', 'N', 'D', 'E', 'R', + 'T', 'I', 'B', 'E', 'T', 'A', 'N', + 'T', 'I', 'N', 'A', 'G', 'M', 'A', + 'T', 'R', 'I', 'G', 'R', 'A', 'M', + 'T', 'R', 'I', 'I', 'S', 'A', 'P', + 'T', 'R', 'I', 'S', 'E', 'M', 'E', + 'T', 'T', 'U', 'D', 'D', 'A', 'G', + 'U', '-', 'E', 'O', '-', 'E', 'U', + 'U', 'B', 'A', 'D', 'A', 'M', 'A', + 'U', 'B', 'U', 'F', 'I', 'L', 'I', + 'U', 'P', 'R', 'I', 'G', 'H', 'T', + 'U', 'P', 'S', 'I', 'L', 'O', 'N', + 'U', 'P', 'W', 'A', 'R', 'D', 'S', + 'U', 'U', 'Y', 'A', 'N', 'N', 'A', + 'V', 'A', 'R', 'E', 'I', 'A', 'I', + 'V', 'A', 'R', 'I', 'A', 'N', 'T', + 'V', 'A', 'Y', 'A', 'N', 'N', 'A', + 'V', 'I', 'C', 'T', 'O', 'R', 'Y', + 'V', 'I', 'L', 'L', 'A', 'G', 'E', + 'V', 'I', 'S', 'A', 'R', 'G', 'A', + 'V', 'O', 'C', 'A', 'L', 'I', 'C', + 'V', 'O', 'I', 'C', 'I', 'N', 'G', + 'V', 'O', 'L', 'T', 'A', 'G', 'E', + 'W', 'A', 'I', 'T', 'I', 'N', 'G', + 'W', 'A', 'R', 'N', 'I', 'N', 'G', + 'W', 'A', 'S', 'T', 'I', 'N', 'G', + 'W', 'E', 'S', 'T', 'E', 'R', 'N', + 'W', 'H', 'E', 'E', 'L', 'E', 'D', + 'W', 'R', 'I', 'T', 'I', 'N', 'G', + 'Y', 'A', 'Y', 'A', 'N', 'N', 'A', + 'Y', 'I', 'D', 'D', 'I', 'S', 'H', + 'Y', 'P', 'O', 'R', 'R', 'O', 'I', + 'Z', 'H', 'I', 'V', 'E', 'T', 'E', + 'A', 'C', 'T', 'I', 'V', 'A', 'T', 'E', + 'A', 'C', 'T', 'U', 'A', 'L', 'L', 'Y', + 'A', 'E', 'E', 'Y', 'A', 'N', 'N', 'A', + 'A', 'I', 'R', 'P', 'L', 'A', 'N', 'E', + 'A', 'K', 'H', 'M', 'I', 'M', 'I', 'C', + 'A', 'L', 'L', 'I', 'A', 'N', 'C', 'E', + 'A', 'L', 'V', 'E', 'O', 'L', 'A', 'R', + 'A', 'N', 'G', 'S', 'T', 'R', 'O', 'M', + 'A', 'N', 'U', 'D', 'A', 'T', 'T', 'A', + 'A', 'N', 'U', 'S', 'V', 'A', 'R', 'A', + 'A', 'P', 'O', 'D', 'E', 'R', 'M', 'A', + 'A', 'P', 'O', 'D', 'E', 'X', 'I', 'A', + 'A', 'P', 'O', 'T', 'H', 'E', 'M', 'A', + 'A', 'P', 'P', 'R', 'O', 'A', 'C', 'H', + 'A', 'Q', 'U', 'A', 'R', 'I', 'U', 'S', + 'A', 'R', 'A', 'E', 'A', '-', 'E', 'O', + 'A', 'R', 'C', 'H', 'A', 'I', 'O', 'N', + 'A', 'R', 'G', 'O', 'T', 'E', 'R', 'I', + 'A', 'R', 'I', 'S', 'T', 'E', 'R', 'A', + 'A', 'R', 'M', 'E', 'N', 'I', 'A', 'N', + 'A', 'R', 'O', 'U', 'S', 'I', 'N', 'G', + 'A', 'S', 'S', 'A', 'L', 'L', 'A', 'M', + 'A', 'S', 'S', 'Y', 'R', 'I', 'A', 'N', + 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'K', + 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'M', + 'A', 'T', 'T', 'H', 'A', 'C', 'A', 'N', + 'A', 'V', 'A', 'G', 'R', 'A', 'H', 'A', + 'B', 'A', 'L', 'I', 'N', 'E', 'S', 'E', + 'B', 'E', 'L', 'G', 'T', 'H', 'O', 'R', + 'B', 'E', 'R', 'K', 'A', 'N', 'A', 'N', + 'B', 'E', 'V', 'E', 'R', 'A', 'G', 'E', + 'B', 'I', 'D', 'E', 'N', 'T', 'A', 'L', + 'B', 'I', 'L', 'A', 'B', 'I', 'A', 'L', + 'B', 'O', 'P', 'O', 'M', 'O', 'F', 'O', + 'B', 'O', 'U', 'N', 'D', 'A', 'R', 'Y', + 'B', 'U', 'G', 'I', 'N', 'E', 'S', 'E', + 'B', 'U', 'L', 'L', 'S', 'E', 'Y', 'E', + 'B', 'U', 'S', 'S', 'Y', 'E', 'R', 'U', + 'C', 'A', 'D', 'U', 'C', 'E', 'U', 'S', + 'C', 'A', 'N', 'A', 'D', 'I', 'A', 'N', + 'C', 'A', 'R', 'R', 'I', 'A', 'G', 'E', + 'C', 'A', 'U', 'L', 'D', 'R', 'O', 'N', + 'C', 'H', 'A', 'M', 'I', 'L', 'O', 'N', + 'C', 'H', 'A', 'T', 'T', 'A', 'W', 'A', + 'C', 'H', 'E', 'R', 'O', 'K', 'E', 'E', + 'C', 'H', 'O', 'R', 'E', 'V', 'M', 'A', + 'C', 'H', 'O', 'S', 'E', 'O', 'N', 'G', + 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'R', + 'C', 'I', 'V', 'I', 'L', 'I', 'A', 'N', + 'C', 'L', 'I', 'M', 'A', 'C', 'U', 'S', + 'C', 'L', 'I', 'N', 'G', 'I', 'N', 'G', + 'C', 'O', 'N', 'F', 'L', 'I', 'C', 'T', + 'C', 'O', 'N', 'S', 'T', 'A', 'N', 'T', + 'C', 'O', 'N', 'T', 'A', 'I', 'N', 'S', + 'C', 'O', 'U', 'N', 'T', 'I', 'N', 'G', + 'C', 'R', 'E', 'A', 'T', 'I', 'V', 'E', + 'C', 'R', 'E', 'S', 'C', 'E', 'N', 'T', + 'C', 'R', 'O', 'S', 'S', 'I', 'N', 'G', + 'C', 'R', 'U', 'Z', 'E', 'I', 'R', 'O', + 'C', 'U', 'R', 'R', 'E', 'N', 'C', 'Y', + 'C', 'U', 'S', 'T', 'O', 'M', 'E', 'R', + 'C', 'Y', 'R', 'E', 'N', 'A', 'I', 'C', + 'C', 'Y', 'R', 'I', 'L', 'L', 'I', 'C', + 'D', 'A', 'M', 'M', 'A', 'T', 'A', 'N', + 'D', 'A', 'P', '-', 'B', 'U', 'O', 'N', + 'D', 'A', 'P', '-', 'M', 'U', 'O', 'Y', + 'D', 'A', 'P', '-', 'P', 'R', 'A', 'M', + 'D', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'D', 'D', 'A', 'Y', 'A', 'N', 'N', 'A', + 'D', 'E', 'C', 'E', 'M', 'B', 'E', 'R', + 'D', 'E', 'C', 'R', 'E', 'A', 'S', 'E', + 'D', 'E', 'N', 'A', 'R', 'I', 'U', 'S', + 'D', 'E', 'Y', 'T', 'E', 'R', 'O', 'S', + 'D', 'E', 'Y', 'T', 'E', 'R', 'O', 'U', + 'D', 'I', 'A', 'G', 'O', 'N', 'A', 'L', + 'D', 'I', 'A', 'M', 'E', 'T', 'E', 'R', + 'D', 'I', 'A', 'S', 'T', 'O', 'L', 'I', + 'D', 'I', 'A', 'T', 'O', 'N', 'O', 'N', + 'D', 'I', 'F', 'O', 'N', 'I', 'A', 'S', + 'D', 'I', 'G', 'O', 'R', 'G', 'O', 'N', + 'D', 'I', 'G', 'R', 'A', 'M', 'M', 'A', + 'D', 'I', 'R', 'E', 'C', 'T', 'L', 'Y', + 'D', 'I', 'V', 'I', 'S', 'I', 'O', 'N', + 'D', 'O', 'D', 'E', 'K', 'A', 'T', 'A', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', + 'D', 'O', 'T', 'S', '-', '1', '2', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', + 'D', 'O', 'T', 'S', '-', '1', '3', '6', + 'D', 'O', 'T', 'S', '-', '1', '3', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', + 'D', 'O', 'T', 'S', '-', '1', '4', '6', + 'D', 'O', 'T', 'S', '-', '1', '4', '7', + 'D', 'O', 'T', 'S', '-', '1', '4', '8', + 'D', 'O', 'T', 'S', '-', '1', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', + 'D', 'O', 'T', 'S', '-', '2', '3', '6', + 'D', 'O', 'T', 'S', '-', '2', '3', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', + 'D', 'O', 'T', 'S', '-', '2', '4', '6', + 'D', 'O', 'T', 'S', '-', '2', '4', '7', + 'D', 'O', 'T', 'S', '-', '2', '4', '8', + 'D', 'O', 'T', 'S', '-', '2', '5', '6', + 'D', 'O', 'T', 'S', '-', '2', '5', '7', + 'D', 'O', 'T', 'S', '-', '2', '5', '8', + 'D', 'O', 'T', 'S', '-', '2', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', + 'D', 'O', 'T', 'S', '-', '3', '4', '6', + 'D', 'O', 'T', 'S', '-', '3', '4', '7', + 'D', 'O', 'T', 'S', '-', '3', '4', '8', + 'D', 'O', 'T', 'S', '-', '3', '5', '6', + 'D', 'O', 'T', 'S', '-', '3', '5', '7', + 'D', 'O', 'T', 'S', '-', '3', '5', '8', + 'D', 'O', 'T', 'S', '-', '3', '6', '7', + 'D', 'O', 'T', 'S', '-', '3', '6', '8', + 'D', 'O', 'T', 'S', '-', '3', '7', '8', + 'D', 'O', 'T', 'S', '-', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '6', '7', '8', + 'D', 'O', 'T', 'T', 'E', 'D', '-', 'L', + 'D', 'O', 'T', 'T', 'E', 'D', '-', 'N', + 'D', 'O', 'T', 'T', 'E', 'D', '-', 'P', + 'D', 'R', 'A', 'C', 'H', 'M', 'A', 'S', + 'D', 'R', 'A', 'F', 'T', 'I', 'N', 'G', + 'D', 'R', 'A', 'U', 'G', 'H', 'T', 'S', + 'D', 'R', 'A', 'W', 'I', 'N', 'G', 'S', + 'D', 'U', 'R', 'A', 'T', 'I', 'O', 'N', + 'D', 'V', 'I', 'S', 'V', 'A', 'R', 'A', + 'E', 'I', 'G', 'H', 'T', 'E', 'E', 'N', + 'E', 'L', 'E', 'C', 'T', 'R', 'I', 'C', + 'E', 'L', 'L', 'I', 'P', 'S', 'I', 'S', + 'E', 'M', 'P', 'H', 'A', 'S', 'I', 'S', + 'E', 'M', 'P', 'H', 'A', 'T', 'I', 'C', + 'E', 'N', 'T', 'E', 'R', 'I', 'N', 'G', + 'E', 'N', 'V', 'E', 'L', 'O', 'P', 'E', + 'E', 'P', 'E', 'G', 'E', 'R', 'M', 'A', + 'E', 'S', 'U', 'K', 'U', 'U', 'D', 'O', + 'E', 'T', 'E', 'R', 'N', 'I', 'T', 'Y', + 'E', 'T', 'H', 'I', 'O', 'P', 'I', 'C', + 'E', 'X', 'T', 'E', 'N', 'D', 'E', 'D', + 'F', 'A', 'T', 'H', 'A', 'T', 'A', 'N', + 'F', 'E', 'B', 'R', 'U', 'A', 'R', 'Y', + 'F', 'E', 'M', 'I', 'N', 'I', 'N', 'E', + 'F', 'E', 'S', 'T', 'I', 'V', 'A', 'L', + 'F', 'I', 'G', 'U', 'R', 'E', '-', '1', + 'F', 'I', 'G', 'U', 'R', 'E', '-', '2', + 'F', 'I', 'G', 'U', 'R', 'E', '-', '3', + 'F', 'I', 'N', 'G', 'E', 'R', 'E', 'D', + 'F', 'I', 'S', 'H', 'H', 'O', 'O', 'K', + 'F', 'L', 'A', 'T', 'N', 'E', 'S', 'S', + 'F', 'L', 'O', 'R', 'E', 'T', 'T', 'E', + 'F', 'L', 'O', 'U', 'R', 'I', 'S', 'H', + 'F', 'O', 'O', 'T', 'N', 'O', 'T', 'E', + 'F', 'O', 'U', 'R', 'T', 'E', 'E', 'N', + 'F', 'R', 'A', 'C', 'T', 'I', 'O', 'N', + 'F', 'R', 'A', 'G', 'M', 'E', 'N', 'T', + 'F', 'R', 'A', 'G', 'R', 'A', 'N', 'T', + 'F', 'R', 'O', 'W', 'N', 'I', 'N', 'G', + 'F', 'U', 'L', 'L', 'N', 'E', 'S', 'S', + 'F', 'U', 'N', 'C', 'T', 'I', 'O', 'N', + 'G', 'A', 'R', 'S', 'H', 'U', 'N', 'I', + 'G', 'A', 'U', 'N', 'T', 'L', 'E', 'T', + 'G', 'E', 'N', 'I', 'T', 'I', 'V', 'E', + 'G', 'E', 'O', 'R', 'G', 'I', 'A', 'N', + 'G', 'R', 'A', 'P', 'H', 'E', 'M', 'E', + 'G', 'U', 'J', 'A', 'R', 'A', 'T', 'I', + 'G', 'U', 'R', 'M', 'U', 'K', 'H', 'I', + 'H', 'A', 'N', '-', 'A', 'K', 'A', 'T', + 'H', 'A', 'N', 'G', 'Z', 'H', 'O', 'U', + 'H', 'A', 'R', 'D', 'N', 'E', 'S', 'S', + 'H', 'A', 'R', 'K', 'L', 'E', 'A', 'N', + 'H', 'A', 'R', 'M', 'O', 'N', 'I', 'C', + 'H', 'E', 'A', 'V', 'E', 'N', 'L', 'Y', + 'H', 'E', 'X', 'A', 'G', 'R', 'A', 'M', + 'H', 'I', 'R', 'A', 'G', 'A', 'N', 'A', + 'H', 'U', 'A', 'R', 'A', 'D', 'D', 'O', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'M', + 'I', 'L', 'U', 'Y', 'A', 'N', 'N', 'A', + 'I', 'M', 'I', 'F', 'O', 'N', 'O', 'N', + 'I', 'N', 'C', 'R', 'E', 'A', 'S', 'E', + 'I', 'N', 'D', 'I', 'R', 'E', 'C', 'T', + 'I', 'N', 'F', 'I', 'N', 'I', 'T', 'Y', + 'I', 'N', 'H', 'E', 'R', 'E', 'N', 'T', + 'I', 'N', 'T', 'E', 'G', 'R', 'A', 'L', + 'I', 'N', 'T', 'E', 'R', 'E', 'S', 'T', + 'I', 'N', 'T', 'E', 'R', 'I', 'O', 'R', + 'I', 'N', 'V', 'E', 'R', 'T', 'E', 'D', + 'I', 'O', 'T', 'I', 'F', 'I', 'E', 'D', + 'I', 'R', 'U', 'Y', 'A', 'N', 'N', 'A', + 'I', 'S', '-', 'P', 'I', 'L', 'L', 'A', + 'I', 'S', 'O', 'L', 'A', 'T', 'E', 'D', + 'J', 'A', 'P', 'A', 'N', 'E', 'S', 'E', + 'J', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'K', 'A', 'S', 'R', 'A', 'T', 'A', 'N', + 'K', 'A', 'T', 'A', 'K', 'A', 'N', 'A', + 'K', 'A', 'T', 'H', 'I', 'S', 'T', 'I', + 'K', 'E', 'Y', 'B', 'O', 'A', 'R', 'D', + 'K', 'O', 'N', 'T', 'E', 'V', 'M', 'A', + 'K', 'O', 'U', 'F', 'I', 'S', 'M', 'A', + 'K', 'R', 'E', 'M', 'A', 'S', 'T', 'I', + 'L', '-', 'S', 'H', 'A', 'P', 'E', 'D', + 'L', 'A', 'N', 'G', 'U', 'A', 'G', 'E', + 'L', 'A', 'T', 'I', 'N', 'A', 'T', 'E', + 'L', 'I', 'G', 'A', 'T', 'U', 'R', 'E', + 'L', 'O', 'C', 'A', 'T', 'I', 'O', 'N', + 'L', 'O', 'C', 'A', 'T', 'I', 'V', 'E', + 'L', 'O', 'G', 'O', 'T', 'Y', 'P', 'E', + 'L', 'O', 'R', 'R', 'A', 'I', 'N', 'E', + 'M', 'A', 'H', 'A', 'P', 'A', 'K', 'H', + 'M', 'A', 'I', 'M', 'A', 'L', 'A', 'I', + 'M', 'A', 'I', 'Y', 'A', 'M', 'O', 'K', + 'M', 'A', 'N', 'A', 'C', 'L', 'E', 'S', + 'M', 'A', 'N', 'G', 'A', 'L', 'A', 'M', + 'M', 'A', 'R', 'R', 'I', 'A', 'G', 'E', + 'M', 'A', 'R', 'R', 'Y', 'I', 'N', 'G', + 'M', 'A', 'R', 'T', 'Y', 'R', 'I', 'A', + 'M', 'E', 'A', 'S', 'U', 'R', 'E', 'D', + 'M', 'E', 'D', 'I', 'C', 'I', 'N', 'E', + 'M', 'E', 'T', 'R', 'E', 'T', 'E', 'S', + 'M', 'E', 'T', 'R', 'I', 'C', 'A', 'L', + 'M', 'I', 'L', 'L', 'I', 'O', 'N', 'S', + 'M', 'I', 'N', 'I', 'S', 'T', 'E', 'R', + 'M', 'O', 'D', 'I', 'F', 'I', 'E', 'R', + 'M', 'O', 'H', 'A', 'M', 'M', 'A', 'D', + 'M', 'O', 'N', 'O', 'G', 'R', 'A', 'M', + 'M', 'O', 'U', 'N', 'T', 'A', 'I', 'N', + 'M', 'U', 'L', 'T', 'I', 'M', 'A', 'P', + 'M', 'U', 'L', 'T', 'I', 'P', 'L', 'E', + 'M', 'U', 'L', 'T', 'I', 'S', 'E', 'T', + 'N', 'A', 'T', 'I', 'O', 'N', 'A', 'L', + 'N', 'E', 'G', 'A', 'T', 'I', 'O', 'N', + 'N', 'E', 'G', 'A', 'T', 'I', 'V', 'E', + 'N', 'I', 'K', 'H', 'A', 'H', 'I', 'T', + 'N', 'I', 'N', 'E', 'T', 'E', 'E', 'N', + 'N', 'O', '-', 'B', 'R', 'E', 'A', 'K', + 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N', + 'N', 'O', 'T', 'E', 'H', 'E', 'A', 'D', + 'N', 'O', 'V', 'E', 'M', 'B', 'E', 'R', + 'O', 'M', 'I', 'S', 'S', 'I', 'O', 'N', + 'O', 'N', 'E', '-', 'L', 'I', 'N', 'E', + 'O', 'P', 'E', 'R', 'A', 'T', 'O', 'R', + 'O', 'P', 'P', 'O', 'S', 'I', 'N', 'G', + 'O', 'R', 'I', 'G', 'I', 'N', 'A', 'L', + 'O', 'R', 'N', 'A', 'M', 'E', 'N', 'T', + 'O', 'R', 'T', 'H', 'O', 'D', 'O', 'X', + 'O', 'U', 'T', 'L', 'I', 'N', 'E', 'D', + 'O', 'V', 'E', 'R', 'L', 'A', 'I', 'D', + 'O', 'V', 'E', 'R', 'L', 'I', 'N', 'E', + 'O', 'V', 'E', 'R', 'R', 'I', 'D', 'E', + 'P', 'A', 'A', 'S', 'E', 'N', 'T', 'O', + 'P', 'A', 'I', 'R', 'T', 'H', 'R', 'A', + 'P', 'A', 'L', 'O', 'C', 'H', 'K', 'A', + 'P', 'A', 'M', 'E', 'N', 'E', 'N', 'G', + 'P', 'A', 'M', 'U', 'D', 'P', 'O', 'D', + 'P', 'A', 'N', 'G', 'H', 'U', 'L', 'U', + 'P', 'A', 'N', 'O', 'L', 'O', 'N', 'G', + 'P', 'A', 'N', 'Y', 'A', 'K', 'R', 'A', + 'P', 'A', 'N', 'Y', 'E', 'C', 'E', 'K', + 'P', 'A', 'R', 'A', 'L', 'L', 'E', 'L', + 'P', 'A', 'R', 'I', 'C', 'H', 'O', 'N', + 'P', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'P', 'E', 'D', 'E', 'S', 'T', 'A', 'L', + 'P', 'E', 'L', 'A', 'S', 'T', 'O', 'N', + 'P', 'E', 'N', 'T', 'A', 'G', 'O', 'N', + 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'A', + 'P', 'E', 'T', 'A', 'L', 'L', 'E', 'D', + 'P', 'H', 'A', 'A', 'R', 'K', 'A', 'A', + 'P', 'H', 'A', 'G', 'S', '-', 'P', 'A', + 'P', 'H', 'A', 'I', 'S', 'T', 'O', 'S', + 'P', 'I', 'N', 'W', 'H', 'E', 'E', 'L', + 'P', 'L', 'A', 'S', 'T', 'I', 'C', 'S', + 'P', 'L', 'E', 'T', 'H', 'R', 'O', 'N', + 'P', 'N', 'E', 'U', 'M', 'A', 'T', 'A', + 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', + 'P', 'O', 'K', 'R', 'Y', 'T', 'I', 'E', + 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', + 'P', 'R', 'A', 'M', '-', 'B', 'E', 'I', + 'P', 'R', 'A', 'M', '-', 'P', 'I', 'I', + 'P', 'R', 'E', 'C', 'E', 'D', 'E', 'D', + 'P', 'R', 'E', 'C', 'E', 'D', 'E', 'S', + 'P', 'R', 'E', 'V', 'I', 'O', 'U', 'S', + 'P', 'R', 'O', 'F', 'O', 'U', 'N', 'D', + 'P', 'R', 'O', 'G', 'R', 'E', 'S', 'S', + 'P', 'R', 'O', 'P', 'E', 'R', 'T', 'Y', + 'Q', 'A', 'I', 'R', 'T', 'H', 'R', 'A', + 'Q', 'U', 'A', 'D', 'R', 'A', 'N', 'T', + 'Q', 'U', 'A', 'R', 'T', 'E', 'R', 'S', + 'Q', 'U', 'E', 'S', 'T', 'I', 'O', 'N', + 'Q', 'U', 'I', 'N', 'C', 'U', 'N', 'X', + 'R', 'E', 'C', 'O', 'R', 'D', 'E', 'R', + 'R', 'E', 'C', 'Y', 'C', 'L', 'E', 'D', + 'R', 'E', 'L', 'A', 'T', 'I', 'O', 'N', + 'R', 'E', 'L', 'I', 'G', 'I', 'O', 'N', + 'R', 'E', 'N', 'T', 'O', 'G', 'E', 'N', + 'R', 'E', 'P', 'E', 'A', 'T', 'E', 'D', + 'R', 'E', 'S', 'O', 'U', 'R', 'C', 'E', + 'R', 'E', 'S', 'P', 'O', 'N', 'S', 'E', + 'R', 'E', 'V', 'E', 'R', 'S', 'E', 'D', + 'R', 'U', 'K', 'K', 'A', 'K', 'H', 'A', + 'S', '-', 'S', 'H', 'A', 'P', 'E', 'D', + 'S', 'A', 'L', 'T', 'I', 'L', 'L', 'O', + 'S', 'A', 'N', 'T', 'I', 'I', 'M', 'U', + 'S', 'A', 'N', 'Y', 'O', 'O', 'G', 'A', + 'S', 'A', 'X', 'I', 'M', 'A', 'T', 'A', + 'S', 'C', 'I', 'S', 'S', 'O', 'R', 'S', + 'S', 'C', 'O', 'R', 'P', 'I', 'U', 'S', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', + 'S', 'E', 'M', 'I', 'S', 'O', 'F', 'T', + 'S', 'E', 'M', 'U', 'N', 'C', 'I', 'A', + 'S', 'H', 'A', 'D', 'O', 'W', 'E', 'D', + 'S', 'H', 'A', 'M', 'R', 'O', 'C', 'K', + 'S', 'H', 'E', '-', 'G', 'O', 'A', 'T', + 'S', 'H', 'E', 'S', 'H', 'L', 'A', 'M', + 'S', 'I', 'C', 'K', 'N', 'E', 'S', 'S', + 'S', 'I', 'D', 'E', 'W', 'A', 'Y', 'S', + 'S', 'I', 'M', 'A', 'N', 'S', 'I', 'S', + 'S', 'I', 'X', '-', 'L', 'I', 'N', 'E', + 'S', 'L', 'A', 'V', 'O', 'N', 'I', 'C', + 'S', 'Q', 'U', 'I', 'G', 'G', 'L', 'E', + 'S', 'Q', 'U', 'I', 'R', 'R', 'E', 'L', + 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'O', + 'S', 'T', 'A', 'L', 'L', 'I', 'O', 'N', + 'S', 'T', 'A', 'N', 'D', 'A', 'R', 'D', + 'S', 'T', 'O', 'P', 'P', 'A', 'G', 'E', + 'S', 'T', 'O', 'P', 'P', 'I', 'N', 'G', + 'S', 'T', 'R', 'A', 'I', 'G', 'H', 'T', + 'S', 'T', 'R', 'A', 'I', 'N', 'E', 'R', + 'S', 'T', 'R', 'A', 'T', 'I', 'A', 'N', + 'S', 'T', 'R', 'E', 'N', 'G', 'T', 'H', + 'S', 'T', 'R', 'I', 'C', 'T', 'L', 'Y', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '1', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '2', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '3', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '4', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '5', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '6', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '7', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '8', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '9', + 'S', 'U', 'B', 'G', 'R', 'O', 'U', 'P', + 'S', 'U', 'C', 'C', 'E', 'E', 'D', 'S', + 'S', 'U', 'I', 'T', 'A', 'B', 'L', 'E', + 'S', 'U', 'P', 'E', 'R', 'S', 'E', 'T', + 'S', 'U', 'R', 'R', 'O', 'U', 'N', 'D', + 'S', 'W', 'A', 'P', 'P', 'I', 'N', 'G', + 'S', 'Y', 'L', 'L', 'A', 'B', 'L', 'E', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '6', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '7', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '8', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '9', + 'S', 'Y', 'M', 'M', 'E', 'T', 'R', 'Y', + 'T', 'A', 'G', 'B', 'A', 'N', 'W', 'A', + 'T', 'A', 'I', 'L', 'L', 'E', 'S', 'S', + 'T', 'A', 'T', 'T', 'O', 'O', 'E', 'D', + 'T', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'T', 'E', 'S', 'S', 'A', 'R', 'O', 'N', + 'T', 'E', 'T', 'A', 'R', 'T', 'O', 'S', + 'T', 'E', 'T', 'R', 'A', 'P', 'L', 'I', + 'T', 'H', 'E', 'S', 'P', 'I', 'A', 'N', + 'T', 'H', 'I', 'R', 'T', 'E', 'E', 'N', + 'T', 'H', 'O', 'U', 'S', 'A', 'N', 'D', + 'T', 'H', 'U', 'R', 'I', 'S', 'A', 'Z', + 'T', 'I', 'F', 'I', 'N', 'A', 'G', 'H', + 'T', 'I', 'R', 'O', 'N', 'I', 'A', 'N', + 'T', 'O', 'G', 'E', 'T', 'H', 'E', 'R', + 'T', 'O', 'R', 'C', 'U', 'L', 'U', 'S', + 'T', 'O', 'R', 'T', 'O', 'I', 'S', 'E', + 'T', 'R', 'E', 'A', 'D', 'I', 'N', 'G', + 'T', 'R', 'E', 'S', 'I', 'L', 'L', 'O', + 'T', 'R', 'I', 'A', 'N', 'G', 'L', 'E', + 'T', 'R', 'I', 'C', 'O', 'L', 'O', 'N', + 'T', 'R', 'I', 'S', 'I', 'M', 'O', 'U', + 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'N', + 'T', 'R', 'Y', 'B', 'L', 'I', 'O', 'N', + 'T', 'T', 'A', 'Y', 'A', 'N', 'N', 'A', + 'T', 'T', 'U', 'D', 'D', 'A', 'A', 'G', + 'T', 'V', 'I', 'M', 'A', 'D', 'U', 'R', + 'T', 'W', 'O', '-', 'L', 'I', 'N', 'E', + 'U', 'G', 'A', 'R', 'I', 'T', 'I', 'C', + 'U', 'I', 'L', 'L', 'E', 'A', 'N', 'N', + 'U', 'M', 'B', 'R', 'E', 'L', 'L', 'A', + 'U', 'N', 'D', 'E', 'R', 'B', 'A', 'R', + 'U', 'N', 'D', 'E', 'R', 'D', 'O', 'T', + 'U', 'N', 'D', 'E', 'R', 'T', 'I', 'E', + 'V', 'A', 'S', 'T', 'N', 'E', 'S', 'S', + 'V', 'E', 'R', 'S', 'I', 'C', 'L', 'E', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', + 'V', 'I', 'E', 'W', 'D', 'A', 'T', 'A', + 'W', 'A', 'N', 'D', 'E', 'R', 'E', 'R', + 'W', 'A', 'S', 'A', 'L', 'L', 'A', 'M', + 'Y', 'A', 'M', 'A', 'K', 'K', 'A', 'N', + 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', + 'Y', 'O', 'U', 'T', 'H', 'F', 'U', 'L', + 'Z', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'Z', 'W', 'A', 'R', 'A', 'K', 'A', 'Y', + 'A', 'A', 'B', 'A', 'A', 'F', 'I', 'L', 'I', + 'A', 'B', 'K', 'H', 'A', 'S', 'I', 'A', 'N', + 'A', 'B', 'U', 'N', 'D', 'A', 'N', 'C', 'E', + 'A', 'D', 'D', 'R', 'E', 'S', 'S', 'E', 'D', + 'A', 'L', '-', 'L', 'A', 'K', 'U', 'N', 'A', + 'A', 'L', 'P', 'A', 'P', 'R', 'A', 'N', 'A', + 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'E', + 'A', 'M', 'P', 'E', 'R', 'S', 'A', 'N', 'D', + 'A', 'N', 'T', 'I', 'F', 'O', 'N', 'I', 'A', + 'A', 'R', '-', 'R', 'A', 'H', 'E', 'E', 'M', + 'A', 'R', '-', 'R', 'A', 'H', 'M', 'A', 'N', + 'A', 'R', 'R', 'O', 'W', 'H', 'E', 'A', 'D', + 'A', 'S', 'C', 'E', 'N', 'D', 'I', 'N', 'G', + 'A', 'S', 'P', 'I', 'R', 'A', 'T', 'E', 'D', + 'A', 'S', 'S', 'E', 'R', 'T', 'I', 'O', 'N', + 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'K', 'S', + 'A', 'T', 'T', 'E', 'N', 'T', 'I', 'O', 'N', + 'B', 'A', 'C', 'K', 'S', 'L', 'A', 'S', 'H', + 'B', 'A', 'C', 'K', 'S', 'P', 'A', 'C', 'E', + 'B', 'E', 'G', 'I', 'N', 'N', 'I', 'N', 'G', + 'B', 'I', 'N', 'O', 'C', 'U', 'L', 'A', 'R', + 'B', 'I', 'O', 'H', 'A', 'Z', 'A', 'R', 'D', + 'B', 'I', 'S', 'E', 'C', 'T', 'I', 'N', 'G', + 'B', 'I', 'S', 'M', 'I', 'L', 'L', 'A', 'H', + 'B', 'L', 'A', 'C', 'K', 'F', 'O', 'O', 'T', + 'B', 'O', 'O', 'M', 'E', 'R', 'A', 'N', 'G', + 'B', 'R', 'A', 'N', 'C', 'H', 'I', 'N', 'G', + 'B', 'Y', 'Z', 'A', 'N', 'T', 'I', 'N', 'E', + 'C', 'A', 'P', 'R', 'I', 'C', 'O', 'R', 'N', + 'C', 'A', 'R', 'P', 'E', 'N', 'T', 'R', 'Y', + 'C', 'A', 'R', 'Y', 'S', 'T', 'I', 'A', 'N', + 'C', 'E', 'N', 'T', 'U', 'R', 'I', 'A', 'L', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', + 'C', 'H', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'C', 'L', 'O', 'C', 'K', 'W', 'I', 'S', 'E', + 'C', 'L', 'O', 'S', 'E', 'N', 'E', 'S', 'S', + 'C', 'O', 'M', 'B', 'I', 'N', 'I', 'N', 'G', + 'C', 'O', 'M', 'P', 'L', 'E', 'T', 'E', 'D', + 'C', 'O', 'N', 'G', 'R', 'U', 'E', 'N', 'T', + 'C', 'O', 'N', 'J', 'U', 'G', 'A', 'T', 'E', + 'C', 'O', 'N', 'S', 'O', 'N', 'A', 'N', 'T', + 'C', 'O', 'N', 'S', 'T', 'A', 'N', 'C', 'Y', + 'C', 'O', 'N', 'T', 'O', 'U', 'R', 'E', 'D', + 'C', 'O', 'P', 'R', 'O', 'D', 'U', 'C', 'T', + 'C', 'O', 'P', 'Y', 'R', 'I', 'G', 'H', 'T', + 'C', 'R', 'E', 'S', 'C', 'E', 'N', 'D', 'O', + 'C', 'U', 'A', 'T', 'R', 'I', 'L', 'L', 'O', + 'C', 'U', 'N', 'E', 'I', 'F', 'O', 'R', 'M', + 'D', 'A', 'H', 'Y', 'A', 'A', 'U', 'S', 'H', + 'D', 'A', 'R', 'K', 'E', 'N', 'I', 'N', 'G', + 'D', 'E', 'L', 'I', 'M', 'I', 'T', 'E', 'R', + 'D', 'E', 'N', 'T', 'I', 'S', 'T', 'R', 'Y', + 'D', 'E', 'P', 'A', 'R', 'T', 'I', 'N', 'G', + 'D', 'E', 'P', 'A', 'R', 'T', 'U', 'R', 'E', + 'D', 'E', 'S', 'C', 'E', 'N', 'D', 'E', 'R', + 'D', 'I', 'A', 'E', 'R', 'E', 'S', 'I', 'S', + 'D', 'I', 'A', 'L', 'E', 'C', 'T', '-', 'P', + 'D', 'I', 'A', 'L', 'Y', 'T', 'I', 'K', 'A', + 'D', 'I', 'A', 'T', 'O', 'N', 'I', 'K', 'I', + 'D', 'I', 'F', 'T', 'O', 'G', 'G', 'O', 'S', + 'D', 'I', 'G', 'R', 'A', 'M', 'M', 'O', 'S', + 'D', 'I', 'M', 'E', 'N', 'S', 'I', 'O', 'N', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '3', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '3', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '3', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '5', '6', '7', '8', + 'D', 'O', 'W', 'N', 'W', 'A', 'R', 'D', 'S', + 'D', 'U', 'P', 'O', 'N', 'D', 'I', 'U', 'S', + 'E', 'D', 'I', 'T', 'O', 'R', 'I', 'A', 'L', + 'E', 'E', 'B', 'E', 'E', 'F', 'I', 'L', 'I', + 'E', 'M', 'B', 'E', 'D', 'D', 'I', 'N', 'G', + 'E', 'N', 'C', 'L', 'O', 'S', 'I', 'N', 'G', + 'E', 'N', 'C', 'L', 'O', 'S', 'U', 'R', 'E', + 'E', 'N', 'D', 'E', 'A', 'V', 'O', 'U', 'R', + 'E', 'N', 'D', 'O', 'F', 'O', 'N', 'O', 'N', + 'E', 'S', 'T', 'I', 'M', 'A', 'T', 'E', 'D', + 'E', 'S', 'T', 'I', 'M', 'A', 'T', 'E', 'S', + 'E', 'X', 'C', 'E', 'L', 'L', 'E', 'N', 'T', + 'E', 'X', 'T', 'E', 'N', 'S', 'I', 'O', 'N', + 'E', 'X', 'T', 'R', 'A', '-', 'L', 'O', 'W', + 'E', 'Y', 'B', 'E', 'Y', 'F', 'I', 'L', 'I', + 'F', 'A', 'C', 'S', 'I', 'M', 'I', 'L', 'E', + 'F', 'A', 'N', 'E', 'R', 'O', 'S', 'I', 'S', + 'F', 'I', 'N', 'A', 'N', 'C', 'I', 'A', 'L', + 'F', 'I', 'V', 'E', '-', 'L', 'I', 'N', 'E', + 'F', 'L', 'A', 'T', 'T', 'E', 'N', 'E', 'D', + 'F', 'O', 'L', 'L', 'O', 'W', 'I', 'N', 'G', + 'F', 'O', 'O', 'T', 'S', 'T', 'O', 'O', 'L', + 'F', 'O', 'S', 'T', 'E', 'R', 'I', 'N', 'G', + 'F', 'O', 'U', 'R', '-', 'L', 'I', 'N', 'E', + 'F', 'R', 'E', 'T', 'B', 'O', 'A', 'R', 'D', + 'F', 'R', 'I', 'C', 'A', 'T', 'I', 'V', 'E', + 'F', 'U', 'L', 'L', 'W', 'I', 'D', 'T', 'H', + 'G', 'A', 'T', 'H', 'E', 'R', 'I', 'N', 'G', + 'G', 'E', 'O', 'M', 'E', 'T', 'R', 'I', 'C', + 'G', 'E', 'R', 'S', 'H', 'A', 'Y', 'I', 'M', + 'G', 'L', 'I', 'S', 'S', 'A', 'N', 'D', 'O', + 'G', 'N', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'G', 'O', 'R', 'G', 'O', 'T', 'E', 'R', 'I', + 'G', 'R', 'E', 'A', 'T', 'N', 'E', 'S', 'S', + 'G', 'R', 'E', 'G', 'O', 'R', 'I', 'A', 'N', + 'G', 'U', 'R', 'A', 'M', 'U', 'T', 'O', 'N', + 'H', 'A', 'L', 'F', 'W', 'I', 'D', 'T', 'H', + 'H', 'E', 'K', 'U', 'T', 'A', 'A', 'R', 'U', + 'H', 'E', 'R', 'M', 'I', 'T', 'I', 'A', 'N', + 'H', 'O', 'U', 'R', 'G', 'L', 'A', 'S', 'S', + 'I', 'C', 'H', 'I', 'M', 'A', 'T', 'O', 'S', + 'I', 'D', 'E', 'N', 'T', 'I', 'C', 'A', 'L', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', + 'I', 'L', 'U', 'U', 'Y', 'A', 'N', 'N', 'A', + 'I', 'M', 'I', 'F', 'T', 'H', 'O', 'R', 'A', + 'I', 'N', 'C', 'L', 'U', 'D', 'I', 'N', 'G', + 'I', 'N', 'C', 'R', 'E', 'A', 'S', 'E', 'S', + 'I', 'N', 'C', 'R', 'E', 'M', 'E', 'N', 'T', + 'I', 'N', 'D', 'I', 'C', 'A', 'T', 'O', 'R', + 'I', 'N', 'F', 'L', 'U', 'E', 'N', 'C', 'E', + 'I', 'N', 'N', 'O', 'C', 'E', 'N', 'C', 'E', + 'I', 'N', 'S', 'E', 'R', 'T', 'I', 'O', 'N', + 'I', 'N', 'V', 'I', 'S', 'I', 'B', 'L', 'E', + 'I', 'R', 'U', 'U', 'Y', 'A', 'N', 'N', 'A', + 'I', 'T', 'E', 'R', 'A', 'T', 'I', 'O', 'N', + 'J', 'E', 'R', 'U', 'S', 'A', 'L', 'E', 'M', + 'J', 'O', 'N', 'G', 'S', 'E', 'O', 'N', 'G', + 'J', 'U', 'N', 'G', 'S', 'E', 'O', 'N', 'G', + 'K', 'A', 'T', 'A', 'V', 'A', 'S', 'M', 'A', + 'K', 'E', 'M', 'P', 'H', 'R', 'E', 'N', 'G', + 'K', 'E', 'N', 'T', 'I', 'M', 'A', 'T', 'A', + 'K', 'I', 'R', 'O', 'W', 'A', 'T', 'T', 'O', + 'K', 'R', 'A', 'T', 'I', 'M', 'A', 'T', 'A', + 'K', 'U', 'R', 'U', 'Z', 'E', 'I', 'R', 'O', + 'L', 'A', 'B', 'O', 'U', 'R', 'I', 'N', 'G', + 'L', 'A', 'R', 'Y', 'N', 'G', 'E', 'A', 'L', + 'L', 'E', 'F', 'T', '-', 'H', 'A', 'N', 'D', + 'L', 'E', 'F', 'T', '-', 'S', 'I', 'D', 'E', + 'L', 'E', 'F', 'T', '-', 'S', 'T', 'E', 'M', + 'L', 'E', 'F', 'T', 'W', 'A', 'R', 'D', 'S', + 'L', 'E', 'S', 'S', '-', 'T', 'H', 'A', 'N', + 'L', 'H', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'L', 'I', 'A', 'B', 'I', 'L', 'I', 'T', 'Y', + 'L', 'I', 'G', 'H', 'T', 'N', 'I', 'N', 'G', + 'M', 'A', 'H', 'A', 'P', 'R', 'A', 'N', 'A', + 'M', 'A', 'I', 'T', 'A', 'I', 'K', 'H', 'U', + 'M', 'A', 'L', 'A', 'Y', 'A', 'L', 'A', 'M', + 'M', 'A', 'S', 'C', 'U', 'L', 'I', 'N', 'E', + 'M', 'A', 'T', 'E', 'R', 'I', 'A', 'L', 'S', + 'M', 'E', 'S', 'S', 'E', 'N', 'I', 'A', 'N', + 'M', 'E', 'T', 'O', 'B', 'E', 'L', 'U', 'S', + 'M', 'I', 'R', 'I', 'B', 'A', 'A', 'R', 'U', + 'M', 'O', 'N', 'G', 'O', 'L', 'I', 'A', 'N', + 'M', 'O', 'N', 'O', 'C', 'U', 'L', 'A', 'R', + 'M', 'O', 'N', 'O', 'G', 'R', 'A', 'P', 'H', + 'M', 'O', 'N', 'O', 'S', 'P', 'A', 'C', 'E', + 'M', 'U', 'K', 'P', 'H', 'R', 'E', 'N', 'G', + 'M', 'U', 'U', 'R', 'D', 'H', 'A', 'J', 'A', + 'N', 'I', 'G', 'G', 'A', 'H', 'I', 'T', 'A', + 'N', 'I', 'G', 'I', 'D', 'A', 'E', 'S', 'H', + 'N', 'I', 'G', 'I', 'D', 'A', 'M', 'I', 'N', + 'N', 'O', 'R', 'T', 'H', 'W', 'E', 'S', 'T', + 'N', 'U', 'M', 'E', 'R', 'A', 'T', 'O', 'R', + 'O', 'A', 'B', 'O', 'A', 'F', 'I', 'L', 'I', + 'O', 'O', 'B', 'O', 'O', 'F', 'I', 'L', 'I', + 'O', 'Y', 'R', 'A', 'N', 'I', 'S', 'M', 'A', + 'P', 'A', 'A', '-', 'P', 'I', 'L', 'L', 'A', + 'P', 'A', 'I', 'Y', 'A', 'N', 'N', 'O', 'I', + 'P', 'A', 'M', 'I', 'N', 'G', 'K', 'A', 'L', + 'P', 'A', 'M', 'U', 'N', 'G', 'K', 'A', 'H', + 'P', 'A', 'N', 'G', 'L', 'A', 'Y', 'A', 'R', + 'P', 'A', 'N', 'G', 'W', 'I', 'S', 'A', 'D', + 'P', 'A', 'R', 'A', 'G', 'R', 'A', 'P', 'H', + 'P', 'E', 'N', 'T', 'A', 'S', 'E', 'M', 'E', + 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'U', 'M', + 'P', 'E', 'R', 'M', 'A', 'N', 'E', 'N', 'T', + 'P', 'I', 'A', 'S', 'U', 'T', 'O', 'R', 'U', + 'P', 'I', 'T', 'C', 'H', 'F', 'O', 'R', 'K', + 'P', 'I', 'Z', 'Z', 'I', 'C', 'A', 'T', 'O', + 'P', 'O', 'R', 'R', 'E', 'C', 'T', 'U', 'S', + 'P', 'R', 'A', 'M', '-', 'B', 'U', 'O', 'N', + 'P', 'R', 'A', 'M', '-', 'M', 'U', 'O', 'Y', + 'P', 'R', 'E', 'C', 'E', 'D', 'I', 'N', 'G', + 'P', 'R', 'O', 'L', 'O', 'N', 'G', 'E', 'D', + 'P', 'R', 'O', 'P', 'E', 'L', 'L', 'E', 'R', + 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'N', + 'Q', 'U', 'A', 'D', 'R', 'U', 'P', 'L', 'E', + 'Q', 'U', 'I', 'N', 'A', 'R', 'I', 'U', 'S', + 'Q', 'U', 'O', 'T', 'A', 'T', 'I', 'O', 'N', + 'Q', 'U', 'S', 'H', 'S', 'H', 'A', 'Y', 'A', + 'R', 'E', 'C', 'E', 'P', 'T', 'I', 'V', 'E', + 'R', 'E', 'C', 'O', 'R', 'D', 'I', 'N', 'G', + 'R', 'E', 'C', 'T', 'A', 'N', 'G', 'L', 'E', + 'R', 'E', 'C', 'Y', 'C', 'L', 'I', 'N', 'G', + 'R', 'E', 'F', 'E', 'R', 'E', 'N', 'C', 'E', + 'R', 'E', 'P', 'R', 'E', 'S', 'E', 'N', 'T', + 'R', 'E', 'S', 'I', 'D', 'E', 'N', 'C', 'E', + 'R', 'E', 'S', 'U', 'P', 'I', 'N', 'U', 'S', + 'R', 'E', 'T', 'R', 'O', 'F', 'L', 'E', 'X', + 'R', 'I', 'G', 'H', 'T', 'H', 'A', 'N', 'D', + 'S', 'A', 'M', 'A', 'R', 'I', 'T', 'A', 'N', + 'S', 'C', 'A', 'N', 'D', 'I', 'C', 'U', 'S', + 'S', 'E', 'B', 'A', 'T', 'B', 'E', 'I', 'T', + 'S', 'E', 'M', 'I', 'C', 'O', 'L', 'O', 'N', + 'S', 'E', 'M', 'I', 'V', 'O', 'W', 'E', 'L', + 'S', 'E', 'P', 'A', 'R', 'A', 'T', 'O', 'R', + 'S', 'E', 'P', 'T', 'E', 'M', 'B', 'E', 'R', + 'S', 'E', 'V', 'E', 'N', 'T', 'E', 'E', 'N', + 'S', 'E', 'V', 'E', 'R', 'A', 'N', 'C', 'E', + 'S', 'H', 'A', 'V', 'I', 'Y', 'A', 'N', 'I', + 'S', 'H', 'O', 'R', 'T', 'E', 'N', 'E', 'R', + 'S', 'I', 'X', 'T', 'E', 'E', 'N', 'T', 'H', + 'S', 'N', 'O', 'W', 'F', 'L', 'A', 'K', 'E', + 'S', 'P', 'H', 'E', 'R', 'I', 'C', 'A', 'L', + 'S', 'P', 'L', 'I', 'T', 'T', 'I', 'N', 'G', + 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'S', 'T', 'R', 'E', 'T', 'C', 'H', 'E', 'D', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '1', '0', + 'S', 'T', 'R', 'O', 'K', 'E', '-', '1', '1', + 'S', 'U', 'B', 'J', 'O', 'I', 'N', 'E', 'D', + 'S', 'U', 'B', 'L', 'I', 'N', 'E', 'A', 'R', + 'S', 'U', 'B', 'S', 'C', 'R', 'I', 'P', 'T', + 'S', 'U', 'M', 'M', 'A', 'T', 'I', 'O', 'N', + 'S', 'U', 'N', 'D', 'A', 'N', 'E', 'S', 'E', + 'S', 'U', 'P', 'E', 'R', 'V', 'I', 'S', 'E', + 'S', 'Y', 'L', 'L', 'A', 'B', 'I', 'C', 'S', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '0', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '1', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '3', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '4', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '5', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '6', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '7', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '8', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '1', '9', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '0', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '1', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '3', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '4', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '5', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '6', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '7', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '2', '9', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '0', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '6', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '7', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '8', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '3', '9', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '0', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '3', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '5', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '7', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '8', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '4', '9', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '0', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '1', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '2', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '3', + 'S', 'Y', 'M', 'B', 'O', 'L', '-', '5', '4', + 'S', 'Y', 'M', 'M', 'E', 'T', 'R', 'I', 'C', + 'S', 'Y', 'N', 'D', 'E', 'S', 'M', 'O', 'S', + 'S', 'Y', 'R', 'M', 'A', 'T', 'I', 'K', 'I', + 'T', 'A', 'K', 'H', 'A', 'L', 'L', 'U', 'S', + 'T', 'E', 'L', 'E', 'G', 'R', 'A', 'P', 'H', + 'T', 'E', 'L', 'E', 'P', 'H', 'O', 'N', 'E', + 'T', 'E', 'T', 'R', 'A', 'G', 'R', 'A', 'M', + 'T', 'E', 'T', 'R', 'A', 'S', 'E', 'M', 'E', + 'T', 'H', 'E', 'R', 'E', 'F', 'O', 'R', 'E', + 'T', 'H', 'O', 'U', 'S', 'A', 'N', 'D', 'S', + 'T', 'R', 'A', 'P', 'E', 'Z', 'I', 'U', 'M', + 'T', 'R', 'E', 'M', 'O', 'L', 'O', '-', '1', + 'T', 'R', 'E', 'M', 'O', 'L', 'O', '-', '2', + 'T', 'R', 'E', 'M', 'O', 'L', 'O', '-', '3', + 'T', 'R', 'I', 'F', 'O', 'N', 'I', 'A', 'S', + 'T', 'R', 'I', 'G', 'O', 'R', 'G', 'O', 'N', + 'T', 'R', 'U', 'N', 'C', 'A', 'T', 'E', 'D', + 'T', 'U', 'R', 'N', 'S', 'T', 'I', 'L', 'E', + 'T', 'U', 'T', 'E', 'Y', 'A', 'S', 'A', 'T', + 'U', 'K', 'R', 'A', 'I', 'N', 'I', 'A', 'N', + 'U', 'N', 'D', 'E', 'R', 'L', 'I', 'N', 'E', + 'U', 'N', 'I', 'V', 'E', 'R', 'S', 'A', 'L', + 'U', 'N', 'M', 'A', 'R', 'R', 'I', 'E', 'D', + 'V', 'A', 'R', 'I', 'A', 'T', 'I', 'O', 'N', + 'V', 'I', 'S', 'A', 'R', 'G', 'A', 'Y', 'A', + 'V', 'O', 'I', 'C', 'E', 'L', 'E', 'S', 'S', + 'W', 'A', 'S', 'S', 'A', 'L', 'L', 'A', 'M', + 'W', 'E', 'S', 'T', '-', 'C', 'R', 'E', 'E', + 'W', 'O', 'R', 'D', 'S', 'P', 'A', 'C', 'E', + 'Y', 'P', 'O', 'K', 'R', 'I', 'S', 'I', 'S', + 'A', 'C', 'R', 'O', 'P', 'H', 'O', 'N', 'I', 'C', + 'A', 'E', 'D', 'A', '-', 'P', 'I', 'L', 'L', 'A', + 'A', 'E', 'L', 'A', '-', 'P', 'I', 'L', 'L', 'A', + 'A', 'L', 'P', 'A', 'P', 'R', 'A', 'A', 'N', 'A', + 'A', 'N', 'G', 'K', 'H', 'A', 'N', 'K', 'H', 'U', + 'A', 'N', 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N', + 'A', 'N', 'T', 'I', 'K', 'E', 'N', 'O', 'M', 'A', + 'A', 'N', 'U', 'S', 'V', 'A', 'R', 'A', 'Y', 'A', + 'A', 'P', 'O', 'S', 'T', 'R', 'O', 'F', 'O', 'I', + 'A', 'P', 'O', 'S', 'T', 'R', 'O', 'F', 'O', 'S', + 'A', 'P', 'O', 'S', 'T', 'R', 'O', 'P', 'H', 'E', + 'A', 'P', 'P', 'R', 'O', 'A', 'C', 'H', 'E', 'S', + 'A', 'R', 'P', 'E', 'G', 'G', 'I', 'A', 'T', 'O', + 'A', 'R', 'R', 'O', 'W', '-', 'T', 'A', 'I', 'L', + 'A', 'S', 'T', 'E', 'R', 'I', 'S', 'C', 'U', 'S', + 'A', 'T', 'H', 'A', 'P', 'A', 'S', 'C', 'A', 'N', + 'A', 'U', 'R', 'A', 'M', 'A', 'Z', 'D', 'A', 'A', + 'B', 'A', 'R', 'I', 'Y', 'O', 'O', 'S', 'A', 'N', + 'B', 'A', 'T', 'H', 'A', 'M', 'A', 'S', 'A', 'T', + 'B', 'I', 'B', 'L', 'E', '-', 'C', 'R', 'E', 'E', + 'C', 'E', 'N', 'T', 'R', 'E', 'L', 'I', 'N', 'E', + 'C', 'H', 'A', 'R', 'A', 'C', 'T', 'E', 'R', 'S', + 'C', 'I', 'R', 'C', 'U', 'M', 'F', 'L', 'E', 'X', + 'C', 'O', 'M', 'M', 'E', 'R', 'C', 'I', 'A', 'L', + 'C', 'O', 'M', 'P', 'L', 'E', 'M', 'E', 'N', 'T', + 'C', 'O', 'M', 'P', 'L', 'E', 'T', 'I', 'O', 'N', + 'C', 'O', 'M', 'P', 'L', 'I', 'A', 'N', 'C', 'E', + 'C', 'O', 'N', 'J', 'O', 'I', 'N', 'I', 'N', 'G', + 'C', 'O', 'N', 'T', 'A', 'I', 'N', 'I', 'N', 'G', + 'C', 'O', 'N', 'T', 'E', 'N', 'T', 'I', 'O', 'N', + 'C', 'O', 'N', 'T', 'I', 'N', 'U', 'O', 'U', 'S', + 'C', 'R', 'O', 'S', 'S', 'B', 'O', 'N', 'E', 'S', + 'C', 'R', 'O', 'S', 'S', 'H', 'A', 'T', 'C', 'H', + 'D', 'A', 'G', 'B', 'A', 'S', 'I', 'N', 'N', 'A', + 'D', 'E', 'F', 'I', 'N', 'I', 'T', 'I', 'O', 'N', + 'D', 'E', 'S', 'C', 'E', 'N', 'D', 'I', 'N', 'G', + 'D', 'E', 'V', 'A', 'N', 'A', 'G', 'A', 'R', 'I', + 'D', 'I', 'F', 'F', 'E', 'R', 'E', 'N', 'C', 'E', + 'D', 'I', 'F', 'F', 'I', 'C', 'U', 'L', 'T', 'Y', + 'D', 'I', 'S', 'P', 'E', 'R', 'S', 'I', 'O', 'N', + 'D', 'I', 'S', 'T', 'O', 'R', 'T', 'I', 'O', 'N', + 'D', 'I', 'V', 'E', 'R', 'G', 'E', 'N', 'C', 'E', + 'D', 'I', 'V', 'I', 'N', 'A', 'T', 'I', 'O', 'N', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '4', '5', '6', '7', '8', + 'E', 'K', 'S', 'T', 'R', 'E', 'P', 'T', 'O', 'N', + 'E', 'L', 'E', 'C', 'T', 'R', 'I', 'C', 'A', 'L', + 'E', 'M', 'B', 'R', 'O', 'I', 'D', 'E', 'R', 'Y', + 'E', 'N', 'A', 'R', 'M', 'O', 'N', 'I', 'O', 'S', + 'E', 'N', 'C', 'O', 'U', 'N', 'T', 'E', 'R', 'S', + 'E', 'N', 'T', 'E', 'R', 'P', 'R', 'I', 'S', 'E', + 'E', 'N', 'T', 'H', 'U', 'S', 'I', 'A', 'S', 'M', + 'E', 'P', 'I', 'D', 'A', 'U', 'R', 'E', 'A', 'N', + 'E', 'P', 'I', 'G', 'R', 'A', 'P', 'H', 'I', 'C', + 'E', 'Q', 'U', 'I', 'V', 'A', 'L', 'E', 'N', 'T', + 'E', 'X', 'H', 'A', 'U', 'S', 'T', 'I', 'O', 'N', + 'E', 'X', 'T', 'R', 'A', '-', 'H', 'I', 'G', 'H', + 'F', 'A', 'H', 'R', 'E', 'N', 'H', 'E', 'I', 'T', + 'F', 'E', 'L', 'L', 'O', 'W', 'S', 'H', 'I', 'P', + 'F', 'I', 'X', 'E', 'D', '-', 'F', 'O', 'R', 'M', + 'F', 'O', 'R', 'M', 'A', 'T', 'T', 'I', 'N', 'G', + 'F', 'U', 'N', 'C', 'T', 'I', 'O', 'N', 'A', 'L', + 'G', 'B', 'A', 'K', 'U', 'R', 'U', 'N', 'E', 'N', + 'G', 'E', 'M', 'I', 'N', 'A', 'T', 'I', 'O', 'N', + 'G', 'L', 'A', 'G', 'O', 'L', 'I', 'T', 'I', 'C', + 'G', 'O', 'R', 'T', 'H', 'M', 'I', 'K', 'O', 'N', + 'H', 'E', 'R', 'M', 'I', 'O', 'N', 'I', 'A', 'N', + 'H', 'O', 'M', 'O', 'T', 'H', 'E', 'T', 'I', 'C', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', + 'H', 'Y', 'S', 'T', 'E', 'R', 'E', 'S', 'I', 'S', + 'I', 'E', 'U', 'N', 'G', '-', 'S', 'I', 'O', 'S', + 'I', 'M', 'I', 'D', 'I', 'A', 'R', 'G', 'O', 'N', + 'I', 'M', 'I', 'F', 'T', 'H', 'O', 'R', 'O', 'N', + 'I', 'M', 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'A', + 'I', 'N', 'C', 'O', 'M', 'P', 'L', 'E', 'T', 'E', + 'I', 'N', 'D', 'U', 'S', 'T', 'R', 'I', 'A', 'L', + 'K', 'H', 'A', 'K', 'A', 'S', 'S', 'I', 'A', 'N', + 'K', 'H', 'A', 'R', 'O', 'S', 'H', 'T', 'H', 'I', + 'K', 'I', 'R', 'O', 'G', 'U', 'R', 'A', 'M', 'U', + 'K', 'U', 'N', 'D', 'D', 'A', 'L', 'I', 'Y', 'A', + 'L', 'A', 'J', 'A', 'N', 'Y', 'A', 'L', 'A', 'N', + 'L', 'E', 'N', 'G', 'T', 'H', 'E', 'N', 'E', 'R', + 'L', 'E', 'N', 'T', 'I', 'C', 'U', 'L', 'A', 'R', + 'L', 'I', 'M', 'I', 'T', 'A', 'T', 'I', 'O', 'N', + 'M', 'E', 'M', 'B', 'E', 'R', 'S', 'H', 'I', 'P', + 'M', 'I', 'E', 'U', 'M', '-', 'S', 'I', 'O', 'S', + 'M', 'O', 'N', 'O', 'F', 'O', 'N', 'I', 'A', 'S', + 'M', 'O', 'N', 'O', 'S', 'T', 'A', 'B', 'L', 'E', + 'M', 'O', 'O', 'S', 'E', '-', 'C', 'R', 'E', 'E', + 'M', 'U', '-', 'G', 'A', 'A', 'H', 'L', 'A', 'A', + 'N', 'A', 'A', 'S', 'I', 'K', 'Y', 'A', 'Y', 'A', + 'N', 'A', 'N', 'G', 'M', 'O', 'N', 'T', 'H', 'O', + 'N', 'I', 'E', 'U', 'N', '-', 'S', 'I', 'O', 'S', + 'N', 'O', 'N', '-', 'J', 'O', 'I', 'N', 'E', 'R', + 'N', 'O', 'N', 'F', 'O', 'R', 'K', 'I', 'N', 'G', + 'O', 'P', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', + 'O', 'P', 'P', 'R', 'E', 'S', 'S', 'I', 'O', 'N', + 'O', 'R', 'T', 'H', 'O', 'G', 'O', 'N', 'A', 'L', + 'P', 'A', 'M', 'P', 'H', 'Y', 'L', 'I', 'A', 'N', + 'P', 'A', 'N', 'A', 'E', 'L', 'A', 'E', 'N', 'G', + 'P', 'A', 'N', 'E', 'U', 'L', 'E', 'U', 'N', 'G', + 'P', 'A', 'R', 'A', 'P', 'H', 'R', 'A', 'S', 'E', + 'P', 'A', 'T', 'H', 'A', 'M', 'A', 'S', 'A', 'T', + 'P', 'E', 'D', 'E', 'S', 'T', 'R', 'I', 'A', 'N', + 'P', 'E', 'R', 'C', 'U', 'S', 'S', 'I', 'V', 'E', + 'P', 'H', 'A', 'R', 'Y', 'N', 'G', 'E', 'A', 'L', + 'P', 'H', 'I', 'L', 'I', 'P', 'P', 'I', 'N', 'E', + 'P', 'H', 'O', 'E', 'N', 'I', 'C', 'I', 'A', 'N', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', + 'P', 'L', 'U', 'S', '-', 'M', 'I', 'N', 'U', 'S', + 'P', 'O', 'S', 'S', 'E', 'S', 'S', 'I', 'O', 'N', + 'P', 'R', 'O', 'J', 'E', 'C', 'T', 'I', 'O', 'N', + 'P', 'R', 'O', 'J', 'E', 'C', 'T', 'I', 'V', 'E', + 'P', 'R', 'O', 'L', 'A', 'T', 'I', 'O', 'N', 'E', + 'P', 'R', 'O', 'P', 'O', 'R', 'T', 'I', 'O', 'N', + 'P', 'R', 'O', 'T', 'O', 'V', 'A', 'R', 'Y', 'S', + 'Q', 'U', 'A', 'T', 'E', 'R', 'N', 'I', 'O', 'N', + 'Q', 'U', 'E', 'S', 'T', 'I', 'O', 'N', 'E', 'D', + 'R', 'E', 'G', 'I', 'S', 'T', 'E', 'R', 'E', 'D', + 'R', 'E', 'L', 'A', 'T', 'I', 'O', 'N', 'A', 'L', + 'R', 'E', 'S', 'I', 'S', 'T', 'A', 'N', 'C', 'E', + 'R', 'E', 'S', 'O', 'L', 'U', 'T', 'I', 'O', 'N', + 'R', 'E', 'V', 'O', 'L', 'U', 'T', 'I', 'O', 'N', + 'R', 'I', 'E', 'U', 'L', '-', 'S', 'I', 'O', 'S', + 'R', 'I', 'G', 'H', 'T', '-', 'H', 'A', 'N', 'D', + 'R', 'I', 'G', 'H', 'T', '-', 'S', 'I', 'D', 'E', + 'R', 'I', 'G', 'H', 'T', 'W', 'A', 'R', 'D', 'S', + 'S', 'A', 'N', 'S', '-', 'S', 'E', 'R', 'I', 'F', + 'S', 'A', 'U', 'R', 'A', 'S', 'H', 'T', 'R', 'A', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', + 'S', 'E', 'M', 'I', 'B', 'R', 'E', 'V', 'I', 'S', + 'S', 'E', 'M', 'I', 'C', 'I', 'R', 'C', 'L', 'E', + 'S', 'E', 'M', 'I', 'D', 'I', 'R', 'E', 'C', 'T', + 'S', 'E', 'M', 'I', 'M', 'I', 'N', 'I', 'M', 'A', + 'S', 'E', 'S', 'T', 'E', 'R', 'T', 'I', 'U', 'S', + 'S', 'H', 'A', 'L', 'S', 'H', 'E', 'L', 'E', 'T', + 'S', 'H', 'O', 'U', 'L', 'D', 'E', 'R', 'E', 'D', + 'S', 'I', 'M', 'P', 'L', 'I', 'F', 'I', 'E', 'D', + 'S', 'I', 'O', 'S', '-', 'C', 'I', 'E', 'U', 'C', + 'S', 'I', 'O', 'S', '-', 'H', 'I', 'E', 'U', 'H', + 'S', 'I', 'O', 'S', '-', 'I', 'E', 'U', 'N', 'G', + 'S', 'I', 'O', 'S', '-', 'M', 'I', 'E', 'U', 'M', + 'S', 'I', 'O', 'S', '-', 'N', 'I', 'E', 'U', 'N', + 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', + 'S', 'I', 'O', 'S', '-', 'R', 'I', 'E', 'U', 'L', + 'S', 'I', 'X', '-', 'P', 'E', 'R', '-', 'E', 'M', + 'S', 'I', 'X', '-', 'S', 'T', 'R', 'I', 'N', 'G', + 'S', 'S', 'A', 'N', 'G', 'A', 'R', 'A', 'E', 'A', + 'S', 'S', 'A', 'N', 'G', 'C', 'I', 'E', 'U', 'C', + 'S', 'S', 'A', 'N', 'G', 'H', 'I', 'E', 'U', 'H', + 'S', 'S', 'A', 'N', 'G', 'I', 'E', 'U', 'N', 'G', + 'S', 'S', 'A', 'N', 'G', 'N', 'I', 'E', 'U', 'N', + 'S', 'S', 'A', 'N', 'G', 'P', 'I', 'E', 'U', 'P', + 'S', 'S', 'A', 'N', 'G', 'R', 'I', 'E', 'U', 'L', + 'S', 'T', 'A', 'N', 'D', 'S', 'T', 'I', 'L', 'L', + 'S', 'U', 'B', 'P', 'U', 'N', 'C', 'T', 'I', 'S', + 'S', 'U', 'B', 'S', 'T', 'I', 'T', 'U', 'T', 'E', + 'S', 'U', 'P', 'E', 'R', 'F', 'I', 'X', 'E', 'D', + 'S', 'U', 'S', 'P', 'E', 'N', 'S', 'I', 'O', 'N', + 'T', 'A', 'B', 'U', 'L', 'A', 'T', 'I', 'O', 'N', + 'T', 'A', 'W', 'E', 'L', 'L', 'E', 'M', 'E', 'T', + 'T', 'E', 'R', 'M', 'I', 'N', 'A', 'T', 'O', 'R', + 'T', 'E', 'T', 'R', 'A', 'S', 'I', 'M', 'O', 'U', + 'T', 'H', 'I', 'R', 'T', 'Y', '-', 'O', 'N', 'E', + 'T', 'H', 'R', 'E', 'E', '-', 'L', 'I', 'N', 'E', + 'T', 'R', 'I', 'A', 'N', 'G', 'U', 'L', 'A', 'R', + 'T', 'R', 'I', 'F', 'O', 'L', 'I', 'A', 'T', 'E', + 'T', 'R', 'I', 'G', 'R', 'A', 'M', 'M', 'O', 'S', + 'T', 'R', 'O', 'E', 'Z', 'E', 'N', 'I', 'A', 'N', + 'T', 'R', 'O', 'K', 'U', 'T', 'A', 'S', 'T', 'I', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'O', 'N', 'E', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'S', 'I', 'X', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'T', 'W', 'O', + 'T', 'W', 'O', '-', 'H', 'E', 'A', 'D', 'E', 'D', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', 'L', 'Y', + 'V', 'I', 'S', 'I', 'G', 'O', 'T', 'H', 'I', 'C', + 'W', 'H', 'E', 'E', 'L', 'C', 'H', 'A', 'I', 'R', + 'W', 'O', 'O', 'D', 'S', '-', 'C', 'R', 'E', 'E', + 'A', 'C', 'K', 'N', 'O', 'W', 'L', 'E', 'D', 'G', 'E', + 'A', 'E', 'S', 'C', 'U', 'L', 'A', 'P', 'I', 'U', 'S', + 'A', 'G', 'G', 'R', 'A', 'V', 'A', 'T', 'I', 'O', 'N', + 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'I', 'O', 'N', + 'A', 'L', 'T', 'E', 'R', 'N', 'A', 'T', 'I', 'V', 'E', + 'A', 'P', 'P', 'L', 'I', 'C', 'A', 'T', 'I', 'O', 'N', + 'A', 'P', 'P', 'R', 'O', 'X', 'I', 'M', 'A', 'T', 'E', + 'B', 'A', 'C', 'K', '-', 'T', 'I', 'L', 'T', 'E', 'D', + 'C', 'A', 'N', 'D', 'R', 'A', 'B', 'I', 'N', 'D', 'U', + 'C', 'I', 'E', 'U', 'C', '-', 'I', 'E', 'U', 'N', 'G', + 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'T', 'I', 'O', 'N', + 'C', 'L', 'U', 'B', '-', 'S', 'P', 'O', 'K', 'E', 'D', + 'C', 'O', 'M', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', + 'C', 'O', 'N', 'J', 'U', 'N', 'C', 'T', 'I', 'O', 'N', + 'C', 'O', 'N', 'S', 'E', 'C', 'U', 'T', 'I', 'V', 'E', + 'C', 'O', 'N', 'T', 'R', 'A', 'C', 'T', 'I', 'O', 'N', + 'C', 'O', 'N', 'T', 'R', 'A', 'R', 'I', 'E', 'T', 'Y', + 'C', 'O', 'R', 'P', 'O', 'R', 'A', 'T', 'I', 'O', 'N', + 'C', 'O', 'R', 'R', 'E', 'S', 'P', 'O', 'N', 'D', 'S', + 'C', 'O', 'U', 'N', 'T', 'E', 'R', 'B', 'O', 'R', 'E', + 'C', 'O', 'U', 'N', 'T', 'E', 'R', 'S', 'I', 'N', 'K', + 'D', 'A', 'H', 'Y', 'A', 'A', 'U', 'S', 'H', '-', '2', + 'D', 'E', 'C', 'R', 'E', 'S', 'C', 'E', 'N', 'D', 'O', + 'D', 'E', 'L', 'I', 'V', 'E', 'R', 'A', 'N', 'C', 'E', + 'D', 'E', 'N', 'O', 'M', 'I', 'N', 'A', 'T', 'O', 'R', + 'D', 'E', 'R', 'E', 'T', '-', 'H', 'I', 'D', 'E', 'T', + 'D', 'E', 'S', 'C', 'R', 'I', 'P', 'T', 'I', 'O', 'N', + 'D', 'E', 'V', 'E', 'L', 'O', 'P', 'M', 'E', 'N', 'T', + 'D', 'I', 'A', 'E', 'R', 'E', 'S', 'I', 'Z', 'E', 'D', + 'D', 'I', 'M', 'E', 'N', 'S', 'I', 'O', 'N', 'A', 'L', + 'D', 'I', 'R', 'E', 'C', 'T', 'I', 'O', 'N', 'A', 'L', + 'D', 'I', 'S', 'T', 'I', 'N', 'G', 'U', 'I', 'S', 'H', + 'D', 'O', 'A', 'C', 'H', 'A', 'S', 'H', 'M', 'E', 'E', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '4', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '4', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '3', '4', '5', '6', '7', '8', + 'D', 'O', 'U', 'B', 'L', 'E', '-', 'L', 'I', 'N', 'E', + 'E', 'A', 'M', 'H', 'A', 'N', 'C', 'H', 'O', 'L', 'L', + 'E', 'K', 'F', 'O', 'N', 'I', 'T', 'I', 'K', 'O', 'N', + 'E', 'N', 'L', 'A', 'R', 'G', 'E', 'M', 'E', 'N', 'T', + 'E', 'Q', 'U', 'I', 'A', 'N', 'G', 'U', 'L', 'A', 'R', + 'E', 'X', 'C', 'L', 'A', 'M', 'A', 'T', 'I', 'O', 'N', + 'F', 'I', 'N', 'G', 'E', 'R', 'N', 'A', 'I', 'L', 'S', + 'F', 'O', 'U', 'R', '-', 'P', 'E', 'R', '-', 'E', 'M', + 'F', 'O', 'U', 'R', '-', 'S', 'T', 'R', 'I', 'N', 'G', + 'G', 'A', 'Y', 'A', 'N', 'U', 'K', 'I', 'T', 'T', 'A', + 'G', 'U', 'A', 'R', 'D', 'E', 'D', 'N', 'E', 'S', 'S', + 'H', 'A', 'U', 'P', 'T', 'S', 'T', 'I', 'M', 'M', 'E', + 'H', 'B', 'A', 'S', 'A', '-', 'E', 'S', 'A', 'S', 'A', + 'H', 'I', 'E', 'U', 'H', '-', 'M', 'I', 'E', 'U', 'M', + 'H', 'I', 'E', 'U', 'H', '-', 'N', 'I', 'E', 'U', 'N', + 'H', 'I', 'E', 'U', 'H', '-', 'P', 'I', 'E', 'U', 'P', + 'H', 'I', 'E', 'U', 'H', '-', 'R', 'I', 'E', 'U', 'L', + 'H', 'Y', 'P', 'H', 'E', 'N', 'A', 'T', 'I', 'O', 'N', + 'I', 'D', 'E', 'O', 'G', 'R', 'A', 'P', 'H', 'I', 'C', + 'I', 'E', 'U', 'N', 'G', '-', 'C', 'I', 'E', 'U', 'C', + 'I', 'E', 'U', 'N', 'G', '-', 'M', 'I', 'E', 'U', 'M', + 'I', 'E', 'U', 'N', 'G', '-', 'P', 'I', 'E', 'U', 'P', + 'I', 'M', 'P', 'E', 'R', 'F', 'E', 'C', 'T', 'U', 'M', + 'I', 'N', 'D', 'E', 'P', 'E', 'N', 'D', 'E', 'N', 'T', + 'I', 'N', 'F', 'O', 'R', 'M', 'A', 'T', 'I', 'O', 'N', + 'I', 'N', 'T', 'E', 'G', 'R', 'A', 'T', 'I', 'O', 'N', + 'I', 'N', 'T', 'E', 'R', 'C', 'A', 'L', 'A', 'T', 'E', + 'I', 'N', 'T', 'E', 'R', 'L', 'I', 'N', 'E', 'A', 'R', + 'I', 'N', 'T', 'E', 'R', 'L', 'O', 'C', 'K', 'E', 'D', + 'I', 'N', 'T', 'E', 'R', 'R', 'O', 'B', 'A', 'N', 'G', + 'J', 'I', 'H', 'V', 'A', 'M', 'U', 'L', 'I', 'Y', 'A', + 'K', 'I', 'R', 'O', 'M', 'E', 'E', 'T', 'O', 'R', 'U', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'S', 'I', 'O', 'S', + 'L', 'A', 'K', 'K', 'H', 'A', 'N', 'G', 'Y', 'A', 'O', + 'L', 'E', 'F', 'T', '-', 'S', 'H', 'A', 'D', 'E', 'D', + 'M', 'A', 'H', 'A', 'A', 'P', 'R', 'A', 'A', 'N', 'A', + 'M', 'I', 'E', 'U', 'M', '-', 'H', 'I', 'E', 'U', 'H', + 'M', 'I', 'E', 'U', 'M', '-', 'P', 'I', 'E', 'U', 'P', + 'M', 'I', 'E', 'U', 'M', '-', 'R', 'I', 'E', 'U', 'L', + 'M', 'O', 'N', 'O', 'G', 'R', 'A', 'M', 'M', 'O', 'S', + 'M', 'U', 'L', 'T', 'I', 'O', 'C', 'U', 'L', 'A', 'R', + 'M', 'U', 'U', 'S', 'I', 'K', 'A', 'T', 'O', 'A', 'N', + 'N', 'A', 'A', 'K', 'S', 'I', 'K', 'Y', 'A', 'Y', 'A', + 'N', 'E', 'B', 'E', 'N', 'S', 'T', 'I', 'M', 'M', 'E', + 'N', 'I', 'E', 'U', 'N', '-', 'C', 'I', 'E', 'U', 'C', + 'N', 'I', 'E', 'U', 'N', '-', 'H', 'I', 'E', 'U', 'H', + 'N', 'I', 'E', 'U', 'N', '-', 'P', 'I', 'E', 'U', 'P', + 'O', 'B', 'S', 'T', 'R', 'U', 'C', 'T', 'I', 'O', 'N', + 'O', 'P', 'E', 'N', '-', 'H', 'E', 'A', 'D', 'E', 'D', + 'O', 'V', 'E', 'R', 'L', 'A', 'P', 'P', 'I', 'N', 'G', + 'P', 'A', 'L', 'A', 'T', 'A', 'L', 'I', 'Z', 'E', 'D', + 'P', 'A', 'R', 'A', 'G', 'R', 'A', 'P', 'H', 'O', 'S', + 'P', 'A', 'R', 'A', 'K', 'A', 'L', 'E', 'S', 'M', 'A', + 'P', 'A', 'R', 'A', 'K', 'L', 'I', 'T', 'I', 'K', 'I', + 'P', 'A', 'R', 'E', 'N', 'T', 'H', 'E', 'S', 'I', 'S', + 'P', 'A', 'R', 'T', 'N', 'E', 'R', 'S', 'H', 'I', 'P', + 'P', 'E', 'N', 'E', 'T', 'R', 'A', 'T', 'I', 'O', 'N', + 'P', 'E', 'R', 'I', 'S', 'P', 'O', 'M', 'E', 'N', 'I', + 'P', 'E', 'R', 'S', 'P', 'E', 'C', 'T', 'I', 'V', 'E', + 'P', 'I', 'E', 'U', 'P', '-', 'C', 'I', 'E', 'U', 'C', + 'P', 'I', 'E', 'U', 'P', '-', 'H', 'I', 'E', 'U', 'H', + 'P', 'I', 'E', 'U', 'P', '-', 'N', 'I', 'E', 'U', 'N', + 'P', 'I', 'E', 'U', 'P', '-', 'R', 'I', 'E', 'U', 'L', + 'P', 'U', 'N', 'C', 'T', 'U', 'A', 'T', 'I', 'O', 'N', + 'R', 'A', 'D', 'I', 'O', 'A', 'C', 'T', 'I', 'V', 'E', + 'R', 'A', 'H', 'M', 'A', 'T', 'U', 'L', 'L', 'A', 'H', + 'R', 'E', 'C', 'T', 'A', 'N', 'G', 'U', 'L', 'A', 'R', + 'R', 'E', 'C', 'T', 'I', 'L', 'I', 'N', 'E', 'A', 'R', + 'R', 'E', 'P', 'L', 'A', 'C', 'E', 'M', 'E', 'N', 'T', + 'R', 'I', 'E', 'U', 'L', '-', 'H', 'I', 'E', 'U', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', + 'R', 'I', 'E', 'U', 'L', '-', 'N', 'I', 'E', 'U', 'N', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', + 'R', 'I', 'N', 'F', 'O', 'R', 'Z', 'A', 'N', 'D', 'O', + 'S', 'A', 'C', 'R', 'I', 'F', 'I', 'C', 'I', 'A', 'L', + 'S', 'A', 'G', 'I', 'T', 'T', 'A', 'R', 'I', 'U', 'S', + 'S', 'A', 'L', 'L', 'A', 'L', 'L', 'A', 'H', 'O', 'U', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '3', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '4', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '5', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '6', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '7', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '8', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '9', '9', + 'S', 'E', 'M', 'I', '-', 'V', 'O', 'I', 'C', 'E', 'D', + 'S', 'E', 'M', 'I', 'S', 'E', 'X', 'T', 'I', 'L', 'E', + 'S', 'I', 'N', 'G', 'L', 'E', '-', 'L', 'I', 'N', 'E', + 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'S', 'I', 'O', 'S', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'S', 'S', 'A', 'N', 'G', 'K', 'I', 'Y', 'E', 'O', 'K', + 'S', 'S', 'A', 'N', 'G', 'T', 'I', 'K', 'E', 'U', 'T', + 'S', 'U', 'P', 'E', 'R', 'S', 'C', 'R', 'I', 'P', 'T', + 'S', 'U', 'P', 'R', 'A', 'L', 'I', 'N', 'E', 'A', 'R', + 'S', 'Y', 'N', 'C', 'H', 'R', 'O', 'N', 'O', 'U', 'S', + 'T', 'E', 'T', 'R', 'A', 'F', 'O', 'N', 'I', 'A', 'S', + 'T', 'H', 'A', 'N', 'T', 'H', 'A', 'K', 'H', 'A', 'T', + 'T', 'H', 'E', 'M', 'A', 'T', 'I', 'S', 'M', 'O', 'S', + 'T', 'O', 'A', 'N', 'D', 'A', 'K', 'H', 'I', 'A', 'T', + 'T', 'O', 'P', '-', 'L', 'I', 'G', 'H', 'T', 'E', 'D', + 'T', 'R', 'A', 'N', 'S', 'V', 'E', 'R', 'S', 'A', 'L', + 'T', 'R', 'I', 'T', 'I', 'M', 'O', 'R', 'I', 'O', 'N', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'F', 'I', 'V', 'E', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'F', 'O', 'U', 'R', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'N', 'I', 'N', 'E', + 'U', 'N', 'A', 'S', 'P', 'I', 'R', 'A', 'T', 'E', 'D', + 'U', 'P', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', + 'U', 'P', 'A', 'D', 'H', 'M', 'A', 'N', 'I', 'Y', 'A', + 'W', 'I', 'D', 'E', '-', 'H', 'E', 'A', 'D', 'E', 'D', + 'Y', 'E', 'O', 'R', 'I', 'N', 'H', 'I', 'E', 'U', 'H', + 'A', 'B', 'B', 'R', 'E', 'V', 'I', 'A', 'T', 'I', 'O', 'N', + 'A', 'C', 'C', 'U', 'M', 'U', 'L', 'A', 'T', 'I', 'O', 'N', + 'A', 'C', 'U', 'T', 'E', '-', 'M', 'A', 'C', 'R', 'O', 'N', + 'A', 'K', 'T', 'I', 'E', 'S', 'E', 'L', 'S', 'K', 'A', 'B', + 'A', 'M', 'A', 'L', 'G', 'A', 'M', 'A', 'T', 'I', 'O', 'N', + 'A', 'N', 'A', 'T', 'R', 'I', 'C', 'H', 'I', 'S', 'M', 'A', + 'A', 'R', 'A', 'B', 'I', 'C', '-', 'I', 'N', 'D', 'I', 'C', + 'A', 'S', 'T', 'R', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', + 'A', 'U', 'G', 'M', 'E', 'N', 'T', 'A', 'T', 'I', 'O', 'N', + 'A', 'U', 'R', 'A', 'M', 'A', 'Z', 'D', 'A', 'A', '-', '2', + 'A', 'U', 'R', 'A', 'M', 'A', 'Z', 'D', 'A', 'A', 'H', 'A', + 'B', 'L', 'A', 'C', 'K', '-', 'L', 'E', 'T', 'T', 'E', 'R', + 'B', 'R', 'E', 'A', 'K', 'T', 'H', 'R', 'O', 'U', 'G', 'H', + 'B', 'R', 'E', 'V', 'E', '-', 'M', 'A', 'C', 'R', 'O', 'N', + 'C', '-', 'S', 'I', 'M', 'P', 'L', 'I', 'F', 'I', 'E', 'D', + 'C', 'A', 'N', 'C', 'E', 'L', 'L', 'A', 'T', 'I', 'O', 'N', + 'C', 'A', 'N', 'T', 'I', 'L', 'L', 'A', 'T', 'I', 'O', 'N', + 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'S', 'I', 'O', 'S', + 'C', 'R', 'O', 'S', 'S', 'E', 'D', '-', 'T', 'A', 'I', 'L', + 'C', 'Y', 'L', 'I', 'N', 'D', 'R', 'I', 'C', 'I', 'T', 'Y', + 'D', 'E', 'C', 'I', 'S', 'I', 'V', 'E', 'N', 'E', 'S', 'S', + 'D', 'I', 'F', 'F', 'E', 'R', 'E', 'N', 'T', 'I', 'A', 'L', + 'D', 'I', 'F', 'F', 'I', 'C', 'U', 'L', 'T', 'I', 'E', 'S', + 'D', 'I', 'M', 'I', 'N', 'I', 'S', 'H', 'M', 'E', 'N', 'T', + 'D', 'I', 'M', 'I', 'N', 'U', 'T', 'I', 'O', 'N', '-', '1', + 'D', 'I', 'M', 'I', 'N', 'U', 'T', 'I', 'O', 'N', '-', '2', + 'D', 'I', 'M', 'I', 'N', 'U', 'T', 'I', 'O', 'N', '-', '3', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', '7', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '2', '4', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '1', '3', '4', '5', '6', '7', '8', + 'D', 'O', 'T', 'S', '-', '2', '3', '4', '5', '6', '7', '8', + 'D', 'O', 'U', 'B', 'L', 'E', '-', 'E', 'N', 'D', 'E', 'D', + 'E', 'R', 'R', 'O', 'R', '-', 'B', 'A', 'R', 'R', 'E', 'D', + 'F', 'L', 'E', 'U', 'R', '-', 'D', 'E', '-', 'L', 'I', 'S', + 'F', 'R', 'O', 'N', 'T', '-', 'T', 'I', 'L', 'T', 'E', 'D', + 'G', 'A', 'E', 'T', 'T', 'A', '-', 'P', 'I', 'L', 'L', 'A', + 'G', 'R', 'A', 'V', 'E', '-', 'M', 'A', 'C', 'R', 'O', 'N', + 'G', 'R', 'E', 'A', 'T', 'E', 'R', '-', 'T', 'H', 'A', 'N', + 'G', 'R', 'O', 'N', 'T', 'H', 'I', 'S', 'M', 'A', 'T', 'A', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', 'L', 'Y', + 'H', 'Y', 'P', 'H', 'E', 'N', '-', 'M', 'I', 'N', 'U', 'S', + 'H', 'Y', 'P', 'O', 'D', 'I', 'A', 'S', 'T', 'O', 'L', 'E', + 'I', 'C', 'E', 'L', 'A', 'N', 'D', 'I', 'C', '-', 'Y', 'R', + 'I', 'E', 'U', 'N', 'G', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'I', 'E', 'U', 'N', 'G', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'I', 'N', 'S', 'T', 'R', 'U', 'M', 'E', 'N', 'T', 'A', 'L', + 'I', 'N', 'T', 'E', 'R', 'S', 'E', 'C', 'T', 'I', 'N', 'G', + 'I', 'N', 'T', 'E', 'R', 'S', 'E', 'C', 'T', 'I', 'O', 'N', + 'J', '-', 'S', 'I', 'M', 'P', 'L', 'I', 'F', 'I', 'E', 'D', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'R', 'I', 'E', 'U', 'L', + 'M', 'A', 'C', 'R', 'O', 'N', '-', 'A', 'C', 'U', 'T', 'E', + 'M', 'A', 'C', 'R', 'O', 'N', '-', 'B', 'R', 'E', 'V', 'E', + 'M', 'A', 'C', 'R', 'O', 'N', '-', 'G', 'R', 'A', 'V', 'E', + 'M', 'A', 'T', 'H', 'E', 'M', 'A', 'T', 'I', 'C', 'A', 'L', + 'M', 'I', 'D', 'D', 'L', 'E', '-', 'W', 'E', 'L', 'S', 'H', + 'M', 'I', 'E', 'U', 'M', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'N', 'A', 'S', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', + 'N', 'I', 'E', 'U', 'N', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'N', 'I', 'E', 'U', 'N', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'N', 'O', 'N', '-', 'B', 'R', 'E', 'A', 'K', 'I', 'N', 'G', + 'P', 'I', 'E', 'U', 'P', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'P', 'I', 'E', 'U', 'P', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'P', 'O', 'S', 'T', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', + 'P', 'R', 'E', 'S', 'C', 'R', 'I', 'P', 'T', 'I', 'O', 'N', + 'P', 'R', 'E', 'S', 'E', 'N', 'T', 'A', 'T', 'I', 'O', 'N', + 'P', 'R', 'O', 'P', 'O', 'R', 'T', 'I', 'O', 'N', 'A', 'L', + 'Q', 'U', 'I', 'N', 'D', 'I', 'C', 'E', 'S', 'I', 'M', 'A', + 'R', 'I', 'E', 'U', 'L', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'R', 'I', 'E', 'U', 'L', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'R', 'I', 'G', 'H', 'T', '-', 'S', 'H', 'A', 'D', 'E', 'D', + 'R', 'O', 'U', 'N', 'D', '-', 'T', 'I', 'P', 'P', 'E', 'D', + 'R', 'U', 'L', 'E', '-', 'D', 'E', 'L', 'A', 'Y', 'E', 'D', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '0', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '1', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '2', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '3', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '4', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '5', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '6', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '7', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '8', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '1', '9', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '0', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '1', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '2', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '3', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '6', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '7', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '8', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '4', '9', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '0', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '1', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '2', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '3', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '4', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '5', + 'S', 'E', 'L', 'E', 'C', 'T', 'O', 'R', '-', '2', '5', '6', + 'S', 'E', 'M', 'I', 'C', 'I', 'R', 'C', 'U', 'L', 'A', 'R', + 'S', 'I', 'O', 'S', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'S', 'I', 'O', 'S', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'S', 'I', 'O', 'S', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'S', 'I', 'O', 'S', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'S', 'I', 'X', 'T', 'Y', '-', 'F', 'O', 'U', 'R', 'T', 'H', + 'S', 'O', 'U', 'T', 'H', '-', 'S', 'L', 'A', 'V', 'E', 'Y', + 'S', 'P', 'R', 'E', 'C', 'H', 'G', 'E', 'S', 'A', 'N', 'G', + 'S', 'T', 'R', 'A', 'G', 'G', 'I', 'S', 'M', 'A', 'T', 'A', + 'S', 'T', 'R', 'A', 'I', 'G', 'H', 'T', 'N', 'E', 'S', 'S', + 'S', 'U', 'B', 'S', 'T', 'I', 'T', 'U', 'T', 'I', 'O', 'N', + 'S', 'U', 'P', 'E', 'R', 'I', 'M', 'P', 'O', 'S', 'E', 'D', + 'T', 'H', 'R', 'E', 'E', '-', 'P', 'E', 'R', '-', 'E', 'M', + 'T', 'H', 'U', 'N', 'D', 'E', 'R', 'S', 'T', 'O', 'R', 'M', + 'T', 'I', 'K', 'E', 'U', 'T', '-', 'R', 'I', 'E', 'U', 'L', + 'T', 'R', 'A', 'N', 'S', 'M', 'I', 'S', 'S', 'I', 'O', 'N', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'E', 'I', 'G', 'H', 'T', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'S', 'E', 'V', 'E', 'N', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'T', 'H', 'R', 'E', 'E', + 'W', 'E', 'D', 'G', 'E', '-', 'T', 'A', 'I', 'L', 'E', 'D', + 'X', 'S', 'H', 'A', 'A', 'Y', 'A', 'T', 'H', 'I', 'Y', 'A', + 'Y', 'O', 'U', 'T', 'H', 'F', 'U', 'L', 'N', 'E', 'S', 'S', + 'A', 'N', 'T', 'I', 'C', 'L', 'O', 'C', 'K', 'W', 'I', 'S', 'E', + 'A', 'P', 'P', 'R', 'O', 'X', 'I', 'M', 'A', 'T', 'E', 'L', 'Y', + 'A', 'R', 'G', 'O', 'S', 'Y', 'N', 'T', 'H', 'E', 'T', 'O', 'N', + 'A', 'V', 'A', 'K', 'R', 'A', 'H', 'A', 'S', 'A', 'N', 'Y', 'A', + 'C', 'H', 'I', 'E', 'U', 'C', 'H', '-', 'H', 'I', 'E', 'U', 'H', + 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'C', 'I', 'E', 'U', 'C', + 'C', 'H', 'R', 'Y', 'S', 'A', 'N', 'T', 'H', 'E', 'M', 'U', 'M', + 'C', 'O', 'M', 'P', 'A', 'T', 'I', 'B', 'I', 'L', 'I', 'T', 'Y', + 'C', 'O', 'N', 'C', 'A', 'V', 'E', '-', 'S', 'I', 'D', 'E', 'D', + 'C', 'O', 'N', 'T', 'E', 'M', 'P', 'L', 'A', 'T', 'I', 'O', 'N', + 'C', 'R', 'Y', 'P', 'T', 'O', 'G', 'R', 'A', 'M', 'M', 'I', 'C', + 'D', 'E', 'F', 'E', 'C', 'T', 'I', 'V', 'E', 'N', 'E', 'S', 'S', + 'D', 'I', 'S', 'C', 'O', 'N', 'T', 'I', 'N', 'U', 'O', 'U', 'S', + 'D', 'O', 'T', 'S', '-', '1', '2', '3', '4', '5', '6', '7', '8', + 'D', 'O', 'U', 'B', 'L', 'E', '-', 'S', 'T', 'R', 'U', 'C', 'K', + 'D', 'O', 'W', 'N', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', + 'D', 'R', 'O', 'P', '-', 'S', 'H', 'A', 'D', 'O', 'W', 'E', 'D', + 'E', 'G', 'Y', 'P', 'T', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', + 'E', 'M', 'B', 'E', 'L', 'L', 'I', 'S', 'H', 'M', 'E', 'N', 'T', + 'E', 'U', 'R', 'O', '-', 'C', 'U', 'R', 'R', 'E', 'N', 'C', 'Y', + 'G', 'E', 'O', 'M', 'E', 'T', 'R', 'I', 'C', 'A', 'L', 'L', 'Y', + 'I', 'E', 'U', 'N', 'G', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'I', 'E', 'U', 'N', 'G', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'I', 'E', 'U', 'N', 'G', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'I', 'E', 'U', 'N', 'G', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'I', 'E', 'U', 'N', 'G', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'I', 'N', 'T', 'E', 'R', 'P', 'O', 'L', 'A', 'T', 'I', 'O', 'N', + 'I', 'N', 'T', 'E', 'R', 'S', 'Y', 'L', 'L', 'A', 'B', 'I', 'C', + 'J', 'U', 'D', 'E', 'O', '-', 'S', 'P', 'A', 'N', 'I', 'S', 'H', + 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'M', 'I', 'E', 'U', 'M', + 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'I', 'E', 'U', 'P', + 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'R', 'I', 'E', 'U', 'L', + 'L', 'A', 'B', 'I', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', + 'L', 'E', 'F', 'T', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', + 'L', 'E', 'F', 'T', '-', 'T', 'O', '-', 'R', 'I', 'G', 'H', 'T', + 'M', 'I', 'E', 'U', 'M', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'M', 'I', 'E', 'U', 'M', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'M', 'I', 'N', 'U', 'S', '-', 'O', 'R', '-', 'P', 'L', 'U', 'S', + 'M', 'O', 'R', 'P', 'H', 'O', 'L', 'O', 'G', 'I', 'C', 'A', 'L', + 'N', 'I', 'E', 'U', 'N', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'N', 'I', 'E', 'U', 'N', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'O', 'P', 'E', 'N', '-', 'O', 'U', 'T', 'L', 'I', 'N', 'E', 'D', + 'P', 'A', 'R', 'A', 'L', 'L', 'E', 'L', 'O', 'G', 'R', 'A', 'M', + 'P', 'A', 'R', 'E', 'N', 'T', 'H', 'E', 'S', 'I', 'Z', 'E', 'D', + 'P', 'A', 'R', 'E', 'S', 'T', 'I', 'G', 'M', 'E', 'N', 'O', 'N', + 'P', 'E', 'R', 'P', 'E', 'N', 'D', 'I', 'C', 'U', 'L', 'A', 'R', + 'P', 'H', 'I', 'E', 'U', 'P', 'H', '-', 'P', 'I', 'E', 'U', 'P', + 'P', 'I', 'E', 'U', 'P', '-', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'P', 'I', 'E', 'U', 'P', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'P', 'I', 'E', 'U', 'P', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'P', 'R', 'E', 'P', 'O', 'N', 'D', 'E', 'R', 'A', 'N', 'C', 'E', + 'R', 'I', 'E', 'U', 'L', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'T', 'H', 'I', 'E', 'U', 'T', 'H', + 'R', 'I', 'G', 'H', 'T', '-', 'T', 'O', '-', 'L', 'E', 'F', 'T', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'A', 'R', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'Y', 'R', + 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'I', 'S', 'S', 'I', 'M', 'O', + 'S', 'T', 'R', 'I', 'K', 'E', 'T', 'H', 'R', 'O', 'U', 'G', 'H', + 'T', 'E', 'T', 'A', 'R', 'T', 'I', 'M', 'O', 'R', 'I', 'O', 'N', + 'T', 'H', 'E', 'R', 'M', 'O', 'D', 'Y', 'N', 'A', 'M', 'I', 'C', + 'T', 'H', 'I', 'R', 'T', 'Y', '-', 'S', 'E', 'C', 'O', 'N', 'D', + 'T', 'I', 'K', 'E', 'U', 'T', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'T', 'R', 'A', 'N', 'S', 'P', 'O', 'S', 'I', 'T', 'I', 'O', 'N', + 'T', 'W', 'E', 'N', 'T', 'Y', '-', 'E', 'I', 'G', 'H', 'T', 'H', + 'V', 'O', 'W', 'E', 'L', '-', 'C', 'A', 'R', 'R', 'I', 'E', 'R', + 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'S', 'I', 'O', 'S', + 'Y', 'P', 'O', 'G', 'E', 'G', 'R', 'A', 'M', 'M', 'E', 'N', 'I', + 'Y', 'U', 'U', 'K', 'A', 'L', 'E', 'A', 'P', 'I', 'N', 'T', 'U', + 'A', 'F', 'O', 'R', 'E', 'M', 'E', 'N', 'T', 'I', 'O', 'N', 'E', 'D', + 'A', 'R', 'O', 'U', 'N', 'D', '-', 'P', 'R', 'O', 'F', 'I', 'L', 'E', + 'A', 'S', 'Y', 'M', 'P', 'T', 'O', 'T', 'I', 'C', 'A', 'L', 'L', 'Y', + 'B', 'A', 'L', 'L', 'O', 'O', 'N', '-', 'S', 'P', 'O', 'K', 'E', 'D', + 'B', 'O', 'T', 'T', 'O', 'M', '-', 'L', 'I', 'G', 'H', 'T', 'E', 'D', + 'C', 'O', 'N', 'G', 'R', 'A', 'T', 'U', 'L', 'A', 'T', 'I', 'O', 'N', + 'G', 'O', 'R', 'G', 'O', 'S', 'Y', 'N', 'T', 'H', 'E', 'T', 'O', 'N', + 'I', 'D', 'E', 'N', 'T', 'I', 'F', 'I', 'C', 'A', 'T', 'I', 'O', 'N', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'A', 'R', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'Y', 'R', + 'M', 'U', 'L', 'T', 'I', 'P', 'L', 'I', 'C', 'A', 'T', 'I', 'O', 'N', + 'P', 'A', 'L', 'A', 'T', 'A', 'L', 'I', 'Z', 'A', 'T', 'I', 'O', 'N', + 'P', 'R', 'O', 'S', 'G', 'E', 'G', 'R', 'A', 'M', 'M', 'E', 'N', 'I', + 'R', 'I', 'G', 'H', 'T', '-', 'P', 'O', 'I', 'N', 'T', 'I', 'N', 'G', + 'R', 'I', 'G', 'H', 'T', '-', 'S', 'H', 'A', 'D', 'O', 'W', 'E', 'D', + 'S', 'E', 'S', 'Q', 'U', 'I', 'Q', 'U', 'A', 'D', 'R', 'A', 'T', 'E', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'O', 'S', 'S', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'S', 'O', 'L', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'T', 'Y', 'R', + 'S', 'I', 'O', 'S', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'T', 'R', 'I', 'A', 'N', 'G', 'L', 'E', '-', 'R', 'O', 'U', 'N', 'D', + 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'L', 'Y', 'G', 'I', 'S', 'M', 'A', + 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'S', 'Y', 'N', 'A', 'G', 'M', 'A', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '0', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '1', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '2', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '3', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '4', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '5', '-', '0', '6', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '0', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '1', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '2', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '3', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '4', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '5', + 'V', 'E', 'R', 'T', 'I', 'C', 'A', 'L', '-', '0', '6', '-', '0', '6', + 'A', 'C', 'C', 'E', 'N', 'T', '-', 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'O', + 'A', 'N', 'T', 'I', 'K', 'E', 'N', 'O', 'K', 'Y', 'L', 'I', 'S', 'M', 'A', + 'A', 'N', 'T', 'I', 'R', 'E', 'S', 'T', 'R', 'I', 'C', 'T', 'I', 'O', 'N', + 'B', 'L', 'A', 'C', 'K', '-', 'F', 'E', 'A', 'T', 'H', 'E', 'R', 'E', 'D', + 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'S', 'I', 'O', 'S', + 'C', 'H', 'I', 'E', 'U', 'C', 'H', '-', 'K', 'H', 'I', 'E', 'U', 'K', 'H', + 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'C', 'O', 'N', 'C', 'A', 'V', 'E', '-', 'P', 'O', 'I', 'N', 'T', 'E', 'D', + 'H', 'I', 'G', 'H', '-', 'R', 'E', 'V', 'E', 'R', 'S', 'E', 'D', '-', '9', + 'J', 'A', 'L', 'L', 'A', 'J', 'A', 'L', 'A', 'L', 'O', 'U', 'H', 'O', 'U', + 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'H', 'I', 'E', 'U', 'P', 'H', + 'K', 'R', 'A', 'T', 'I', 'M', 'O', 'K', 'O', 'U', 'F', 'I', 'S', 'M', 'A', + 'K', 'R', 'A', 'T', 'I', 'M', 'O', 'Y', 'P', 'O', 'R', 'R', 'O', 'O', 'N', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'O', 'S', 'S', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'S', 'O', 'L', + 'M', 'I', 'E', 'U', 'M', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'P', 'E', 'T', 'A', 'S', 'T', 'O', 'K', 'O', 'U', 'F', 'I', 'S', 'M', 'A', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'L', 'Y', 'G', 'I', 'S', 'M', 'A', + 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'S', 'Y', 'N', 'A', 'G', 'M', 'A', + 'R', 'I', 'E', 'U', 'L', '-', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'M', 'A', 'D', 'R', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'N', 'A', 'U', 'D', + 'T', 'E', 'A', 'R', 'D', 'R', 'O', 'P', '-', 'B', 'A', 'R', 'B', 'E', 'D', + 'T', 'E', 'A', 'R', 'D', 'R', 'O', 'P', '-', 'S', 'P', 'O', 'K', 'E', 'D', + 'T', 'R', 'I', 'A', 'N', 'G', 'L', 'E', '-', 'H', 'E', 'A', 'D', 'E', 'D', + 'W', 'H', 'I', 'T', 'E', '-', 'F', 'E', 'A', 'T', 'H', 'E', 'R', 'E', 'D', + 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'C', 'I', 'E', 'U', 'C', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '0', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '1', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '2', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '3', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '4', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '5', '-', '0', '6', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '0', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '1', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '2', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '3', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '4', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '5', + 'H', 'O', 'R', 'I', 'Z', 'O', 'N', 'T', 'A', 'L', '-', '0', '6', '-', '0', '6', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'M', 'A', 'D', 'R', + 'M', 'A', 'R', 'C', 'A', 'T', 'O', '-', 'S', 'T', 'A', 'C', 'C', 'A', 'T', 'O', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'C', 'I', 'E', 'U', 'C', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', + 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', '-', 'S', 'I', 'O', 'S', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', + 'T', 'E', 'A', 'R', 'D', 'R', 'O', 'P', '-', 'S', 'H', 'A', 'N', 'K', 'E', 'D', + 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'N', + 'Y', 'E', 'S', 'I', 'E', 'U', 'N', 'G', '-', 'P', 'A', 'N', 'S', 'I', 'O', 'S', + 'A', 'C', 'U', 'T', 'E', '-', 'G', 'R', 'A', 'V', 'E', '-', 'A', 'C', 'U', 'T', 'E', + 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'G', 'R', 'A', 'V', 'E', '-', 'A', 'C', 'U', 'T', 'E', '-', 'G', 'R', 'A', 'V', 'E', + 'I', 'E', 'U', 'N', 'G', '-', 'S', 'S', 'A', 'N', 'G', 'K', 'I', 'Y', 'E', 'O', 'K', + 'K', 'A', 'T', 'A', 'K', 'A', 'N', 'A', '-', 'H', 'I', 'R', 'A', 'G', 'A', 'N', 'A', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'P', 'I', 'E', 'U', 'P', '-', 'S', 'I', 'O', 'S', '-', 'T', 'I', 'K', 'E', 'U', 'T', + 'R', 'I', 'E', 'U', 'L', '-', 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'S', 'I', 'O', 'S', + 'R', 'I', 'E', 'U', 'L', '-', 'P', 'I', 'E', 'U', 'P', '-', 'H', 'I', 'E', 'U', 'H', + 'R', 'I', 'E', 'U', 'L', '-', 'Y', 'E', 'O', 'R', 'I', 'N', 'H', 'I', 'E', 'U', 'H', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'H', 'A', 'G', 'A', 'L', 'L', + 'S', 'I', 'O', 'S', '-', 'P', 'I', 'E', 'U', 'P', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'S', 'O', 'F', 'T', 'W', 'A', 'R', 'E', '-', 'F', 'U', 'N', 'C', 'T', 'I', 'O', 'N', + 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'C', 'H', 'I', 'E', 'U', 'C', 'H', + 'C', 'H', 'I', 'T', 'U', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'C', 'I', 'E', 'U', 'C', + 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'S', 'S', 'A', 'N', 'G', 'P', 'I', 'E', 'U', 'P', + 'K', 'I', 'Y', 'E', 'O', 'K', '-', 'S', 'I', 'O', 'S', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'L', 'O', 'N', 'G', '-', 'B', 'R', 'A', 'N', 'C', 'H', '-', 'H', 'A', 'G', 'A', 'L', 'L', + 'P', 'A', 'R', 'T', 'I', 'A', 'L', 'L', 'Y', '-', 'R', 'E', 'C', 'Y', 'C', 'L', 'E', 'D', + 'R', 'I', 'E', 'U', 'L', '-', 'M', 'I', 'E', 'U', 'M', '-', 'K', 'I', 'Y', 'E', 'O', 'K', + 'R', 'I', 'E', 'U', 'L', '-', 'T', 'I', 'K', 'E', 'U', 'T', '-', 'H', 'I', 'E', 'U', 'H', + 'S', 'H', 'O', 'R', 'T', '-', 'T', 'W', 'I', 'G', '-', 'B', 'J', 'A', 'R', 'K', 'A', 'N', + 'T', 'R', 'O', 'M', 'I', 'K', 'O', 'P', 'A', 'R', 'A', 'K', 'A', 'L', 'E', 'S', 'M', 'A', + 'O', 'P', 'E', 'N', '-', 'C', 'I', 'R', 'C', 'U', 'I', 'T', '-', 'O', 'U', 'T', 'P', 'U', 'T', + 'P', 'S', 'I', 'F', 'I', 'S', 'T', 'O', 'P', 'A', 'R', 'A', 'K', 'A', 'L', 'E', 'S', 'M', 'A', + 'R', 'I', 'E', 'U', 'L', '-', 'K', 'A', 'P', 'Y', 'E', 'O', 'U', 'N', 'P', 'I', 'E', 'U', 'P', + 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'S', 'I', 'O', 'S', + 'A', 'N', 'T', 'I', 'C', 'L', 'O', 'C', 'K', 'W', 'I', 'S', 'E', '-', 'R', 'O', 'T', 'A', 'T', 'E', 'D', + 'C', 'E', 'O', 'N', 'G', 'C', 'H', 'I', 'E', 'U', 'M', 'S', 'S', 'A', 'N', 'G', 'C', 'I', 'E', 'U', 'C', + 'B', 'Y', 'E', 'L', 'O', 'R', 'U', 'S', 'S', 'I', 'A', 'N', '-', 'U', 'K', 'R', 'A', 'I', 'N', 'I', 'A', 'N', + 'P', 'A', 'S', 'S', 'I', 'V', 'E', '-', 'P', 'U', 'L', 'L', '-', 'U', 'P', '-', 'O', 'U', 'T', 'P', 'U', 'T', + 'P', 'A', 'S', 'S', 'I', 'V', 'E', '-', 'P', 'U', 'L', 'L', '-', 'D', 'O', 'W', 'N', '-', 'O', 'U', 'T', 'P', 'U', 'T', +}; +#define UNICODE_CHARNAME_NUM_WORDS 6710 +static const struct { uint16_t extra_offset; uint16_t ind_offset; } unicode_name_by_length[26] = { + { 0, 0 }, + { 0, 0 }, + { 26, 26 }, + { 658, 342 }, + { 4468, 1612 }, + { 10756, 3184 }, + { 14596, 3952 }, + { 17782, 4483 }, + { 20883, 4926 }, + { 24251, 5347 }, + { 27446, 5702 }, + { 29846, 5942 }, + { 32629, 6195 }, + { 35689, 6450 }, + { 36599, 6520 }, + { 37607, 6592 }, + { 38012, 6619 }, + { 38956, 6678 }, + { 39177, 6691 }, + { 39357, 6701 }, + { 39414, 6704 }, + { 39434, 6705 }, + { 39476, 6707 }, + { 39520, 6709 }, + { 39520, 6709 }, + { 39544, 6710 } +}; +#define UNICODE_CHARNAME_WORD_HANGUL 4143 +#define UNICODE_CHARNAME_WORD_SYLLABLE 5292 +#define UNICODE_CHARNAME_WORD_CJK 454 +#define UNICODE_CHARNAME_WORD_COMPATIBILITY 6457 +static const uint16_t unicode_names[75152] = { + 23, 3, 761, 8774, + 37, 275, 10642, + 47, 275, 1, 11203, 826, + 51, 10365, 753, 11680, + 51, 10365, 4849, 6989, 9050, + 51, 10365, 4849, 9045, 9050, + 51, 10365, 5782, + 51, 10365, 6031, 6610, + 51, 10365, 7421, 13188, + 51, 10365, 7443, 6989, 9050, + 51, 10365, 7443, 9045, 9050, + 51, 10365, 8131, 13188, + 51, 10365, 8675, 8590, + 51, 10365, 8675, 11734, + 51, 10365, 8675, 11908, + 51, 10365, 11751, 11908, + 63, 9128, + 175, 3992, + 175, 5496, + 175, 7608, + 177, 3992, + 177, 5496, + 177, 7608, + 435, 6573, 385, 9798, + 435, 6573, 3232, + 435, 6573, 6689, 2170, + 435, 6573, 6689, 2540, + 435, 6573, 6689, 2778, + 435, 6573, 6689, 4200, + 435, 6573, 6689, 4214, + 435, 6573, 6689, 5190, + 435, 6573, 6689, 6260, + 435, 6573, 6689, 6722, + 435, 6573, 6689, 7508, + 435, 6573, 6689, 7694, + 435, 6573, 7430, + 435, 6573, 8405, 68, + 435, 6573, 8405, 76, + 435, 6573, 8405, 90, + 435, 6573, 8405, 176, + 435, 6573, 8405, 180, + 435, 6573, 8405, 264, + 435, 6573, 8405, 280, + 435, 6573, 8405, 282, + 435, 6573, 8405, 332, + 435, 6573, 8405, 336, + 435, 6573, 8405, 340, + 435, 6573, 8405, 350, + 435, 6573, 8405, 354, + 435, 6573, 8405, 424, + 435, 6573, 8405, 430, + 435, 6573, 8405, 452, + 435, 6573, 8405, 586, + 435, 6573, 8405, 588, + 435, 6573, 8405, 608, + 435, 6573, 8405, 692, + 435, 6573, 8405, 694, + 435, 6573, 8405, 696, + 435, 6573, 8405, 698, + 435, 6573, 8405, 722, + 435, 6573, 8405, 1096, + 435, 6573, 8405, 1120, + 435, 6573, 8405, 1492, + 435, 6573, 8405, 1732, + 435, 6573, 8405, 2182, + 435, 6573, 8405, 2814, + 435, 6573, 9299, 10654, + 435, 6573, 10426, + 435, 6573, 11691, 10654, + 435, 6573, 12133, 8153, 8488, + 435, 6573, 12133, 8488, + 445, 6121, 1045, 8318, + 601, 3713, 4849, 4117, 3713, 4849, 9326, + 601, 3713, 4849, 4117, 3713, 7443, 9326, + 601, 3713, 7443, 4117, 3713, 4849, 9326, + 601, 3713, 7443, 4117, 3713, 7443, 9326, + 601, 4117, 6434, + 601, 4117, 6435, 6121, 3716, + 601, 4117, 6505, 6434, + 601, 4117, 7821, 6434, + 601, 4117, 8153, 6434, + 601, 4197, 5878, + 601, 5876, + 601, 5877, 6121, 8057, 6376, + 601, 6435, 9785, 8056, + 601, 7443, 10001, 10154, + 601, 10716, + 601, 10717, 9043, 2779, 11649, 3714, + 657, 9617, 134, + 657, 9617, 152, + 657, 9617, 216, + 657, 9617, 298, + 657, 9617, 310, + 657, 9617, 340, + 657, 9617, 374, + 657, 9617, 442, + 657, 9617, 576, + 657, 9617, 632, + 657, 9617, 660, + 657, 9617, 670, + 657, 9617, 832, + 657, 9617, 886, + 657, 9617, 902, + 657, 9617, 946, + 657, 9617, 950, + 657, 9617, 1242, + 657, 9617, 1294, + 657, 9617, 1406, + 657, 9617, 1538, + 657, 9617, 1636, + 657, 9617, 1782, + 657, 9617, 1844, + 657, 9617, 1940, + 657, 9617, 2262, + 657, 9617, 2278, + 657, 9617, 2324, + 657, 9617, 2526, + 657, 9617, 2570, + 657, 9617, 2656, + 657, 9617, 2860, + 657, 9617, 2890, + 657, 9617, 3074, + 657, 9617, 3182, + 657, 9617, 3194, + 657, 9617, 3196, + 657, 9617, 3748, + 657, 9617, 3962, + 657, 9617, 4040, + 657, 9617, 4292, + 657, 9617, 4298, + 657, 9617, 4572, + 657, 9617, 4576, + 657, 9617, 4582, + 657, 9617, 4646, + 657, 9617, 4666, + 657, 9617, 5064, + 657, 9617, 5304, + 657, 9617, 5318, + 657, 9617, 5356, + 657, 9617, 5674, + 657, 9617, 5712, + 657, 9617, 5726, + 657, 9617, 7896, + 657, 10585, 0, + 657, 10585, 8, + 657, 10585, 16, + 657, 10585, 28, + 657, 10585, 84, + 657, 10585, 90, + 657, 10585, 96, + 657, 10585, 100, + 657, 10585, 102, + 657, 10585, 106, + 657, 10585, 108, + 657, 10585, 112, + 657, 10585, 114, + 657, 10585, 116, + 657, 10585, 122, + 657, 10585, 126, + 657, 10585, 130, + 657, 10585, 132, + 657, 10585, 134, + 657, 10585, 138, + 657, 10585, 142, + 657, 10585, 144, + 657, 10585, 150, + 657, 10585, 152, + 657, 10585, 194, + 657, 10585, 196, + 657, 10585, 202, + 657, 10585, 208, + 657, 10585, 210, + 657, 10585, 212, + 657, 10585, 216, + 657, 10585, 220, + 657, 10585, 224, + 657, 10585, 228, + 657, 10585, 230, + 657, 10585, 236, + 657, 10585, 238, + 657, 10585, 246, + 657, 10585, 258, + 657, 10585, 278, + 657, 10585, 284, + 657, 10585, 288, + 657, 10585, 296, + 657, 10585, 298, + 657, 10585, 300, + 657, 10585, 302, + 657, 10585, 306, + 657, 10585, 310, + 657, 10585, 314, + 657, 10585, 322, + 657, 10585, 326, + 657, 10585, 332, + 657, 10585, 336, + 657, 10585, 340, + 657, 10585, 350, + 657, 10585, 354, + 657, 10585, 360, + 657, 10585, 364, + 657, 10585, 368, + 657, 10585, 374, + 657, 10585, 380, + 657, 10585, 384, + 657, 10585, 390, + 657, 10585, 392, + 657, 10585, 396, + 657, 10585, 404, + 657, 10585, 412, + 657, 10585, 416, + 657, 10585, 442, + 657, 10585, 448, + 657, 10585, 456, + 657, 10585, 462, + 657, 10585, 476, + 657, 10585, 480, + 657, 10585, 486, + 657, 10585, 492, + 657, 10585, 500, + 657, 10585, 502, + 657, 10585, 506, + 657, 10585, 508, + 657, 10585, 510, + 657, 10585, 512, + 657, 10585, 516, + 657, 10585, 520, + 657, 10585, 522, + 657, 10585, 524, + 657, 10585, 526, + 657, 10585, 532, + 657, 10585, 536, + 657, 10585, 546, + 657, 10585, 552, + 657, 10585, 556, + 657, 10585, 560, + 657, 10585, 564, + 657, 10585, 568, + 657, 10585, 576, + 657, 10585, 598, + 657, 10585, 610, + 657, 10585, 614, + 657, 10585, 616, + 657, 10585, 618, + 657, 10585, 620, + 657, 10585, 622, + 657, 10585, 626, + 657, 10585, 632, + 657, 10585, 634, + 657, 10585, 644, + 657, 10585, 646, + 657, 10585, 650, + 657, 10585, 656, + 657, 10585, 660, + 657, 10585, 664, + 657, 10585, 668, + 657, 10585, 670, + 657, 10585, 672, + 657, 10585, 676, + 657, 10585, 678, + 657, 10585, 680, + 657, 10585, 682, + 657, 10585, 758, + 657, 10585, 762, + 657, 10585, 764, + 657, 10585, 766, + 657, 10585, 768, + 657, 10585, 770, + 657, 10585, 772, + 657, 10585, 774, + 657, 10585, 776, + 657, 10585, 786, + 657, 10585, 790, + 657, 10585, 804, + 657, 10585, 808, + 657, 10585, 810, + 657, 10585, 812, + 657, 10585, 820, + 657, 10585, 822, + 657, 10585, 826, + 657, 10585, 828, + 657, 10585, 830, + 657, 10585, 832, + 657, 10585, 834, + 657, 10585, 836, + 657, 10585, 846, + 657, 10585, 848, + 657, 10585, 850, + 657, 10585, 852, + 657, 10585, 860, + 657, 10585, 862, + 657, 10585, 864, + 657, 10585, 880, + 657, 10585, 882, + 657, 10585, 884, + 657, 10585, 886, + 657, 10585, 890, + 657, 10585, 892, + 657, 10585, 894, + 657, 10585, 896, + 657, 10585, 902, + 657, 10585, 904, + 657, 10585, 906, + 657, 10585, 916, + 657, 10585, 918, + 657, 10585, 922, + 657, 10585, 926, + 657, 10585, 928, + 657, 10585, 930, + 657, 10585, 932, + 657, 10585, 934, + 657, 10585, 946, + 657, 10585, 948, + 657, 10585, 950, + 657, 10585, 952, + 657, 10585, 964, + 657, 10585, 968, + 657, 10585, 970, + 657, 10585, 974, + 657, 10585, 976, + 657, 10585, 978, + 657, 10585, 980, + 657, 10585, 982, + 657, 10585, 992, + 657, 10585, 994, + 657, 10585, 1008, + 657, 10585, 1014, + 657, 10585, 1016, + 657, 10585, 1018, + 657, 10585, 1042, + 657, 10585, 1044, + 657, 10585, 1046, + 657, 10585, 1062, + 657, 10585, 1064, + 657, 10585, 1066, + 657, 10585, 1068, + 657, 10585, 1070, + 657, 10585, 1144, + 657, 10585, 1146, + 657, 10585, 1148, + 657, 10585, 1162, + 657, 10585, 1164, + 657, 10585, 1166, + 657, 10585, 1174, + 657, 10585, 1178, + 657, 10585, 1180, + 657, 10585, 1182, + 657, 10585, 1184, + 657, 10585, 1186, + 657, 10585, 1196, + 657, 10585, 1198, + 657, 10585, 1200, + 657, 10585, 1218, + 657, 10585, 1222, + 657, 10585, 1224, + 657, 10585, 1242, + 657, 10585, 1246, + 657, 10585, 1248, + 657, 10585, 1250, + 657, 10585, 1252, + 657, 10585, 1254, + 657, 10585, 1256, + 657, 10585, 1258, + 657, 10585, 1274, + 657, 10585, 1278, + 657, 10585, 1280, + 657, 10585, 1282, + 657, 10585, 1292, + 657, 10585, 1294, + 657, 10585, 1296, + 657, 10585, 1312, + 657, 10585, 1314, + 657, 10585, 1316, + 657, 10585, 1318, + 657, 10585, 1320, + 657, 10585, 1348, + 657, 10585, 1352, + 657, 10585, 1354, + 657, 10585, 1364, + 657, 10585, 1368, + 657, 10585, 1380, + 657, 10585, 1388, + 657, 10585, 1390, + 657, 10585, 1392, + 657, 10585, 1394, + 657, 10585, 1396, + 657, 10585, 1398, + 657, 10585, 1400, + 657, 10585, 1402, + 657, 10585, 1404, + 657, 10585, 1406, + 657, 10585, 1408, + 657, 10585, 1410, + 657, 10585, 1412, + 657, 10585, 1414, + 657, 10585, 1416, + 657, 10585, 1426, + 657, 10585, 1428, + 657, 10585, 1430, + 657, 10585, 1438, + 657, 10585, 1450, + 657, 10585, 1452, + 657, 10585, 1454, + 657, 10585, 1456, + 657, 10585, 1476, + 657, 10585, 1478, + 657, 10585, 1480, + 657, 10585, 1518, + 657, 10585, 1522, + 657, 10585, 1524, + 657, 10585, 1526, + 657, 10585, 1532, + 657, 10585, 1534, + 657, 10585, 1536, + 657, 10585, 1538, + 657, 10585, 1544, + 657, 10585, 1546, + 657, 10585, 1548, + 657, 10585, 1552, + 657, 10585, 1554, + 657, 10585, 1556, + 657, 10585, 1558, + 657, 10585, 1560, + 657, 10585, 1564, + 657, 10585, 1566, + 657, 10585, 1568, + 657, 10585, 1570, + 657, 10585, 1590, + 657, 10585, 1592, + 657, 10585, 1594, + 657, 10585, 1604, + 657, 10585, 1606, + 657, 10585, 1608, + 657, 10585, 1626, + 657, 10585, 1634, + 657, 10585, 1636, + 657, 10585, 1638, + 657, 10585, 1662, + 657, 10585, 1664, + 657, 10585, 1666, + 657, 10585, 1692, + 657, 10585, 1694, + 657, 10585, 1696, + 657, 10585, 1698, + 657, 10585, 1700, + 657, 10585, 1742, + 657, 10585, 1746, + 657, 10585, 1750, + 657, 10585, 1766, + 657, 10585, 1768, + 657, 10585, 1782, + 657, 10585, 1788, + 657, 10585, 1790, + 657, 10585, 1792, + 657, 10585, 1804, + 657, 10585, 1806, + 657, 10585, 1810, + 657, 10585, 1824, + 657, 10585, 1826, + 657, 10585, 1828, + 657, 10585, 1830, + 657, 10585, 1832, + 657, 10585, 1842, + 657, 10585, 1844, + 657, 10585, 1846, + 657, 10585, 1848, + 657, 10585, 1862, + 657, 10585, 1866, + 657, 10585, 1868, + 657, 10585, 1898, + 657, 10585, 1900, + 657, 10585, 1902, + 657, 10585, 1904, + 657, 10585, 1906, + 657, 10585, 1912, + 657, 10585, 1924, + 657, 10585, 1926, + 657, 10585, 1928, + 657, 10585, 1940, + 657, 10585, 1942, + 657, 10585, 1944, + 657, 10585, 1954, + 657, 10585, 1956, + 657, 10585, 1958, + 657, 10585, 1960, + 657, 10585, 1962, + 657, 10585, 1974, + 657, 10585, 1976, + 657, 10585, 1978, + 657, 10585, 1990, + 657, 10585, 1994, + 657, 10585, 1996, + 657, 10585, 1998, + 657, 10585, 2000, + 657, 10585, 2002, + 657, 10585, 2004, + 657, 10585, 2006, + 657, 10585, 2008, + 657, 10585, 2010, + 657, 10585, 2012, + 657, 10585, 2014, + 657, 10585, 2022, + 657, 10585, 2028, + 657, 10585, 2030, + 657, 10585, 2032, + 657, 10585, 2038, + 657, 10585, 2050, + 657, 10585, 2056, + 657, 10585, 2058, + 657, 10585, 2060, + 657, 10585, 2066, + 657, 10585, 2068, + 657, 10585, 2070, + 657, 10585, 2072, + 657, 10585, 2086, + 657, 10585, 2090, + 657, 10585, 2094, + 657, 10585, 2096, + 657, 10585, 2098, + 657, 10585, 2100, + 657, 10585, 2102, + 657, 10585, 2104, + 657, 10585, 2112, + 657, 10585, 2114, + 657, 10585, 2116, + 657, 10585, 2118, + 657, 10585, 2120, + 657, 10585, 2132, + 657, 10585, 2134, + 657, 10585, 2136, + 657, 10585, 2138, + 657, 10585, 2140, + 657, 10585, 2142, + 657, 10585, 2144, + 657, 10585, 2146, + 657, 10585, 2194, + 657, 10585, 2198, + 657, 10585, 2202, + 657, 10585, 2222, + 657, 10585, 2228, + 657, 10585, 2230, + 657, 10585, 2232, + 657, 10585, 2240, + 657, 10585, 2242, + 657, 10585, 2244, + 657, 10585, 2256, + 657, 10585, 2258, + 657, 10585, 2260, + 657, 10585, 2262, + 657, 10585, 2264, + 657, 10585, 2274, + 657, 10585, 2276, + 657, 10585, 2278, + 657, 10585, 2280, + 657, 10585, 2306, + 657, 10585, 2310, + 657, 10585, 2312, + 657, 10585, 2314, + 657, 10585, 2322, + 657, 10585, 2324, + 657, 10585, 2326, + 657, 10585, 2336, + 657, 10585, 2338, + 657, 10585, 2340, + 657, 10585, 2342, + 657, 10585, 2348, + 657, 10585, 2364, + 657, 10585, 2366, + 657, 10585, 2368, + 657, 10585, 2372, + 657, 10585, 2390, + 657, 10585, 2392, + 657, 10585, 2394, + 657, 10585, 2406, + 657, 10585, 2408, + 657, 10585, 2432, + 657, 10585, 2434, + 657, 10585, 2436, + 657, 10585, 2438, + 657, 10585, 2440, + 657, 10585, 2442, + 657, 10585, 2444, + 657, 10585, 2446, + 657, 10585, 2456, + 657, 10585, 2458, + 657, 10585, 2460, + 657, 10585, 2462, + 657, 10585, 2464, + 657, 10585, 2470, + 657, 10585, 2472, + 657, 10585, 2474, + 657, 10585, 2476, + 657, 10585, 2492, + 657, 10585, 2496, + 657, 10585, 2500, + 657, 10585, 2508, + 657, 10585, 2512, + 657, 10585, 2516, + 657, 10585, 2518, + 657, 10585, 2522, + 657, 10585, 2524, + 657, 10585, 2526, + 657, 10585, 2528, + 657, 10585, 2536, + 657, 10585, 2538, + 657, 10585, 2540, + 657, 10585, 2556, + 657, 10585, 2558, + 657, 10585, 2564, + 657, 10585, 2566, + 657, 10585, 2568, + 657, 10585, 2570, + 657, 10585, 2572, + 657, 10585, 2574, + 657, 10585, 2576, + 657, 10585, 2588, + 657, 10585, 2590, + 657, 10585, 2592, + 657, 10585, 2594, + 657, 10585, 2596, + 657, 10585, 2612, + 657, 10585, 2614, + 657, 10585, 2616, + 657, 10585, 2618, + 657, 10585, 2652, + 657, 10585, 2656, + 657, 10585, 2664, + 657, 10585, 2672, + 657, 10585, 2676, + 657, 10585, 2690, + 657, 10585, 2696, + 657, 10585, 2700, + 657, 10585, 2702, + 657, 10585, 2724, + 657, 10585, 2726, + 657, 10585, 2728, + 657, 10585, 2762, + 657, 10585, 2764, + 657, 10585, 2766, + 657, 10585, 2768, + 657, 10585, 2770, + 657, 10585, 2818, + 657, 10585, 2820, + 657, 10585, 2848, + 657, 10585, 2850, + 657, 10585, 2854, + 657, 10585, 2860, + 657, 10585, 2864, + 657, 10585, 2866, + 657, 10585, 2870, + 657, 10585, 2872, + 657, 10585, 2874, + 657, 10585, 2878, + 657, 10585, 2880, + 657, 10585, 2886, + 657, 10585, 2888, + 657, 10585, 2890, + 657, 10585, 2892, + 657, 10585, 2894, + 657, 10585, 2898, + 657, 10585, 2900, + 657, 10585, 2902, + 657, 10585, 2904, + 657, 10585, 2912, + 657, 10585, 2914, + 657, 10585, 2920, + 657, 10585, 2928, + 657, 10585, 2930, + 657, 10585, 2944, + 657, 10585, 2946, + 657, 10585, 2950, + 657, 10585, 2960, + 657, 10585, 2962, + 657, 10585, 2964, + 657, 10585, 2966, + 657, 10585, 2970, + 657, 10585, 2974, + 657, 10585, 2976, + 657, 10585, 2978, + 657, 10585, 2996, + 657, 10585, 2998, + 657, 10585, 3000, + 657, 10585, 3004, + 657, 10585, 3064, + 657, 10585, 3072, + 657, 10585, 3074, + 657, 10585, 3076, + 657, 10585, 3084, + 657, 10585, 3086, + 657, 10585, 3088, + 657, 10585, 3090, + 657, 10585, 3092, + 657, 10585, 3094, + 657, 10585, 3098, + 657, 10585, 3100, + 657, 10585, 3112, + 657, 10585, 3114, + 657, 10585, 3116, + 657, 10585, 3118, + 657, 10585, 3130, + 657, 10585, 3132, + 657, 10585, 3134, + 657, 10585, 3142, + 657, 10585, 3144, + 657, 10585, 3146, + 657, 10585, 3148, + 657, 10585, 3152, + 657, 10585, 3154, + 657, 10585, 3156, + 657, 10585, 3162, + 657, 10585, 3166, + 657, 10585, 3168, + 657, 10585, 3170, + 657, 10585, 3180, + 657, 10585, 3182, + 657, 10585, 3184, + 657, 10585, 3192, + 657, 10585, 3194, + 657, 10585, 3196, + 657, 10585, 3198, + 657, 10585, 3200, + 657, 10585, 3204, + 657, 10585, 3206, + 657, 10585, 3208, + 657, 10585, 3210, + 657, 10585, 3212, + 657, 10585, 3214, + 657, 10585, 3216, + 657, 10585, 3218, + 657, 10585, 3220, + 657, 10585, 3222, + 657, 10585, 3718, + 657, 10585, 3720, + 657, 10585, 3722, + 657, 10585, 3724, + 657, 10585, 3726, + 657, 10585, 3728, + 657, 10585, 3730, + 657, 10585, 3732, + 657, 10585, 3734, + 657, 10585, 3736, + 657, 10585, 3738, + 657, 10585, 3740, + 657, 10585, 3742, + 657, 10585, 3744, + 657, 10585, 3746, + 657, 10585, 3748, + 657, 10585, 3750, + 657, 10585, 3752, + 657, 10585, 3754, + 657, 10585, 3756, + 657, 10585, 3782, + 657, 10585, 3784, + 657, 10585, 3786, + 657, 10585, 3816, + 657, 10585, 3818, + 657, 10585, 3824, + 657, 10585, 3828, + 657, 10585, 3882, + 657, 10585, 3886, + 657, 10585, 3888, + 657, 10585, 3896, + 657, 10585, 3898, + 657, 10585, 3900, + 657, 10585, 3910, + 657, 10585, 3912, + 657, 10585, 3914, + 657, 10585, 3916, + 657, 10585, 3918, + 657, 10585, 3920, + 657, 10585, 3922, + 657, 10585, 3926, + 657, 10585, 3928, + 657, 10585, 3930, + 657, 10585, 3932, + 657, 10585, 3934, + 657, 10585, 3936, + 657, 10585, 3938, + 657, 10585, 3962, + 657, 10585, 3964, + 657, 10585, 3968, + 657, 10585, 3976, + 657, 10585, 4002, + 657, 10585, 4004, + 657, 10585, 4006, + 657, 10585, 4012, + 657, 10585, 4014, + 657, 10585, 4020, + 657, 10585, 4022, + 657, 10585, 4024, + 657, 10585, 4026, + 657, 10585, 4030, + 657, 10585, 4032, + 657, 10585, 4034, + 657, 10585, 4036, + 657, 10585, 4038, + 657, 10585, 4040, + 657, 10585, 4042, + 657, 10585, 4044, + 657, 10585, 4082, + 657, 10585, 4084, + 657, 10585, 4130, + 657, 10585, 4134, + 657, 10585, 4224, + 657, 10585, 4272, + 657, 10585, 4274, + 657, 10585, 4276, + 657, 10585, 4280, + 657, 10585, 4282, + 657, 10585, 4284, + 657, 10585, 4286, + 657, 10585, 4288, + 657, 10585, 4290, + 657, 10585, 4292, + 657, 10585, 4294, + 657, 10585, 4296, + 657, 10585, 4298, + 657, 10585, 4300, + 657, 10585, 4302, + 657, 10585, 4304, + 657, 10585, 4306, + 657, 10585, 4326, + 657, 10585, 4328, + 657, 10585, 4330, + 657, 10585, 4360, + 657, 10585, 4362, + 657, 10585, 4364, + 657, 10585, 4368, + 657, 10585, 4420, + 657, 10585, 4426, + 657, 10585, 4428, + 657, 10585, 4430, + 657, 10585, 4432, + 657, 10585, 4434, + 657, 10585, 4436, + 657, 10585, 4438, + 657, 10585, 4440, + 657, 10585, 4442, + 657, 10585, 4444, + 657, 10585, 4446, + 657, 10585, 4448, + 657, 10585, 4450, + 657, 10585, 4452, + 657, 10585, 4454, + 657, 10585, 4456, + 657, 10585, 4458, + 657, 10585, 4460, + 657, 10585, 4462, + 657, 10585, 4464, + 657, 10585, 4466, + 657, 10585, 4468, + 657, 10585, 4470, + 657, 10585, 4472, + 657, 10585, 4474, + 657, 10585, 4476, + 657, 10585, 4478, + 657, 10585, 4480, + 657, 10585, 4482, + 657, 10585, 4484, + 657, 10585, 4486, + 657, 10585, 4488, + 657, 10585, 4490, + 657, 10585, 4492, + 657, 10585, 4494, + 657, 10585, 4496, + 657, 10585, 4498, + 657, 10585, 4500, + 657, 10585, 4502, + 657, 10585, 4504, + 657, 10585, 4506, + 657, 10585, 4508, + 657, 10585, 4510, + 657, 10585, 4512, + 657, 10585, 4514, + 657, 10585, 4516, + 657, 10585, 4518, + 657, 10585, 4520, + 657, 10585, 4522, + 657, 10585, 4524, + 657, 10585, 4526, + 657, 10585, 4528, + 657, 10585, 4550, + 657, 10585, 4552, + 657, 10585, 4554, + 657, 10585, 4558, + 657, 10585, 4560, + 657, 10585, 4562, + 657, 10585, 4564, + 657, 10585, 4566, + 657, 10585, 4568, + 657, 10585, 4570, + 657, 10585, 4572, + 657, 10585, 4574, + 657, 10585, 4576, + 657, 10585, 4578, + 657, 10585, 4580, + 657, 10585, 4582, + 657, 10585, 4638, + 657, 10585, 4640, + 657, 10585, 4642, + 657, 10585, 4646, + 657, 10585, 4648, + 657, 10585, 4650, + 657, 10585, 4652, + 657, 10585, 4654, + 657, 10585, 4656, + 657, 10585, 4658, + 657, 10585, 4660, + 657, 10585, 4662, + 657, 10585, 4664, + 657, 10585, 4666, + 657, 10585, 4668, + 657, 10585, 4670, + 657, 10585, 4672, + 657, 10585, 4674, + 657, 10585, 4688, + 657, 10585, 4690, + 657, 10585, 4692, + 657, 10585, 4694, + 657, 10585, 4696, + 657, 10585, 4756, + 657, 10585, 4758, + 657, 10585, 4786, + 657, 10585, 4788, + 657, 10585, 4792, + 657, 10585, 4866, + 657, 10585, 4868, + 657, 10585, 4870, + 657, 10585, 4902, + 657, 10585, 4904, + 657, 10585, 4906, + 657, 10585, 4908, + 657, 10585, 4916, + 657, 10585, 4958, + 657, 10585, 4960, + 657, 10585, 4962, + 657, 10585, 4974, + 657, 10585, 4976, + 657, 10585, 4978, + 657, 10585, 4980, + 657, 10585, 4982, + 657, 10585, 4984, + 657, 10585, 4986, + 657, 10585, 4988, + 657, 10585, 4990, + 657, 10585, 4992, + 657, 10585, 4994, + 657, 10585, 4996, + 657, 10585, 4998, + 657, 10585, 5020, + 657, 10585, 5022, + 657, 10585, 5024, + 657, 10585, 5028, + 657, 10585, 5058, + 657, 10585, 5060, + 657, 10585, 5062, + 657, 10585, 5064, + 657, 10585, 5066, + 657, 10585, 5068, + 657, 10585, 5070, + 657, 10585, 5072, + 657, 10585, 5074, + 657, 10585, 5076, + 657, 10585, 5078, + 657, 10585, 5080, + 657, 10585, 5082, + 657, 10585, 5084, + 657, 10585, 5086, + 657, 10585, 5088, + 657, 10585, 5090, + 657, 10585, 5092, + 657, 10585, 5094, + 657, 10585, 5096, + 657, 10585, 5098, + 657, 10585, 5102, + 657, 10585, 5104, + 657, 10585, 5106, + 657, 10585, 5108, + 657, 10585, 5110, + 657, 10585, 5112, + 657, 10585, 5116, + 657, 10585, 5118, + 657, 10585, 5120, + 657, 10585, 5122, + 657, 10585, 5124, + 657, 10585, 5126, + 657, 10585, 5128, + 657, 10585, 5138, + 657, 10585, 5142, + 657, 10585, 5144, + 657, 10585, 5148, + 657, 10585, 5150, + 657, 10585, 5162, + 657, 10585, 5172, + 657, 10585, 5174, + 657, 10585, 5176, + 657, 10585, 5180, + 657, 10585, 5186, + 657, 10585, 5188, + 657, 10585, 5196, + 657, 10585, 5198, + 657, 10585, 5200, + 657, 10585, 5202, + 657, 10585, 5206, + 657, 10585, 5208, + 657, 10585, 5210, + 657, 10585, 5212, + 657, 10585, 5214, + 657, 10585, 5216, + 657, 10585, 5218, + 657, 10585, 5220, + 657, 10585, 5222, + 657, 10585, 5224, + 657, 10585, 5226, + 657, 10585, 5246, + 657, 10585, 5248, + 657, 10585, 5250, + 657, 10585, 5252, + 657, 10585, 5254, + 657, 10585, 5256, + 657, 10585, 5258, + 657, 10585, 5260, + 657, 10585, 5262, + 657, 10585, 5264, + 657, 10585, 5266, + 657, 10585, 5268, + 657, 10585, 5270, + 657, 10585, 5272, + 657, 10585, 5274, + 657, 10585, 5276, + 657, 10585, 5282, + 657, 10585, 5284, + 657, 10585, 5286, + 657, 10585, 5302, + 657, 10585, 5304, + 657, 10585, 5308, + 657, 10585, 5310, + 657, 10585, 5318, + 657, 10585, 5320, + 657, 10585, 5322, + 657, 10585, 5324, + 657, 10585, 5326, + 657, 10585, 5328, + 657, 10585, 5330, + 657, 10585, 5334, + 657, 10585, 5336, + 657, 10585, 5338, + 657, 10585, 5340, + 657, 10585, 5342, + 657, 10585, 5344, + 657, 10585, 5346, + 657, 10585, 5348, + 657, 10585, 5350, + 657, 10585, 5352, + 657, 10585, 5354, + 657, 10585, 5356, + 657, 10585, 5358, + 657, 10585, 5360, + 657, 10585, 5362, + 657, 10585, 5364, + 657, 10585, 5366, + 657, 10585, 5368, + 657, 10585, 5426, + 657, 10585, 5428, + 657, 10585, 5454, + 657, 10585, 5456, + 657, 10585, 5458, + 657, 10585, 5468, + 657, 10585, 5488, + 657, 10585, 5490, + 657, 10585, 5492, + 657, 10585, 5498, + 657, 10585, 5500, + 657, 10585, 5502, + 657, 10585, 5504, + 657, 10585, 5516, + 657, 10585, 5570, + 657, 10585, 5574, + 657, 10585, 5576, + 657, 10585, 5578, + 657, 10585, 5580, + 657, 10585, 5582, + 657, 10585, 5584, + 657, 10585, 5586, + 657, 10585, 5588, + 657, 10585, 5590, + 657, 10585, 5592, + 657, 10585, 5594, + 657, 10585, 5596, + 657, 10585, 5598, + 657, 10585, 5600, + 657, 10585, 5602, + 657, 10585, 5608, + 657, 10585, 5610, + 657, 10585, 5612, + 657, 10585, 5618, + 657, 10585, 5672, + 657, 10585, 5674, + 657, 10585, 5676, + 657, 10585, 5684, + 657, 10585, 5686, + 657, 10585, 5688, + 657, 10585, 5712, + 657, 10585, 5714, + 657, 10585, 5716, + 657, 10585, 5722, + 657, 10585, 5724, + 657, 10585, 5726, + 657, 10585, 5728, + 657, 10585, 5730, + 657, 10585, 5742, + 657, 10585, 5744, + 657, 10585, 5746, + 657, 10585, 5748, + 657, 10585, 5752, + 657, 10585, 5754, + 657, 10585, 5788, + 657, 10585, 5790, + 657, 10585, 5792, + 657, 10585, 5796, + 657, 10585, 5798, + 657, 10585, 5800, + 657, 10585, 5802, + 657, 10585, 5804, + 657, 10585, 5806, + 657, 10585, 5808, + 657, 10585, 5810, + 657, 10585, 5812, + 657, 10585, 5814, + 657, 10585, 5816, + 657, 10585, 5818, + 657, 10585, 5820, + 657, 10585, 5822, + 657, 10585, 5824, + 657, 10585, 5826, + 657, 10585, 5848, + 657, 10585, 5850, + 657, 10585, 5856, + 657, 10585, 5864, + 657, 10585, 5936, + 657, 10585, 5938, + 657, 10585, 6014, + 657, 10585, 6016, + 657, 10585, 6018, + 657, 10585, 6022, + 657, 10585, 6084, + 657, 10585, 6086, + 657, 10585, 6088, + 657, 10585, 6094, + 657, 10585, 6096, + 657, 10585, 6134, + 657, 10585, 6136, + 657, 10585, 6140, + 657, 10585, 6142, + 657, 10585, 6144, + 657, 10585, 6146, + 657, 10585, 6156, + 657, 10585, 6206, + 657, 10585, 6208, + 657, 10585, 6210, + 657, 10585, 6238, + 657, 10585, 6240, + 657, 10585, 6242, + 657, 10585, 6244, + 657, 10585, 6252, + 657, 10585, 6266, + 657, 10585, 6270, + 657, 10585, 6272, + 657, 10585, 6276, + 657, 10585, 6278, + 657, 10585, 6280, + 657, 10585, 6284, + 657, 10585, 6286, + 657, 10585, 6288, + 657, 10585, 6290, + 657, 10585, 6292, + 657, 10585, 6294, + 657, 10585, 6296, + 657, 10585, 6298, + 657, 10585, 6304, + 657, 10585, 6306, + 657, 10585, 6308, + 657, 10585, 6310, + 657, 10585, 6314, + 657, 10585, 6316, + 657, 10585, 6320, + 657, 10585, 6322, + 657, 10585, 6324, + 657, 10585, 6326, + 657, 10585, 6330, + 657, 10585, 6332, + 657, 10585, 6334, + 657, 10585, 6338, + 657, 10585, 6340, + 657, 10585, 6342, + 657, 10585, 6344, + 657, 10585, 6346, + 657, 10585, 6348, + 657, 10585, 6350, + 657, 10585, 6352, + 657, 10585, 6354, + 657, 10585, 6356, + 657, 10585, 6358, + 657, 10585, 6360, + 657, 10585, 6362, + 657, 10585, 6364, + 657, 10585, 6366, + 657, 10585, 6470, + 657, 10585, 6472, + 657, 10585, 6474, + 657, 10585, 6476, + 657, 10585, 6478, + 657, 10585, 6480, + 657, 10585, 6584, + 657, 10585, 6586, + 657, 10585, 6588, + 657, 10585, 6590, + 657, 10585, 6592, + 657, 10585, 6660, + 657, 10585, 6662, + 657, 10585, 6664, + 657, 10585, 6666, + 657, 10585, 6668, + 657, 10585, 6834, + 657, 10585, 6836, + 657, 10585, 6838, + 657, 10585, 6840, + 657, 10585, 6842, + 657, 10585, 6844, + 657, 10585, 6916, + 657, 10585, 6918, + 657, 10585, 6920, + 657, 10585, 6922, + 657, 10585, 6924, + 657, 10585, 6926, + 657, 10585, 6928, + 657, 10585, 6930, + 657, 10585, 6932, + 657, 10585, 6934, + 657, 10585, 6936, + 657, 10585, 6938, + 657, 10585, 6940, + 657, 10585, 6942, + 657, 10585, 6944, + 657, 10585, 6946, + 657, 10585, 6962, + 657, 10585, 6964, + 657, 10585, 6966, + 657, 10585, 6968, + 657, 10585, 6970, + 657, 10585, 6972, + 657, 10585, 6998, + 657, 10585, 7000, + 657, 10585, 7002, + 657, 10585, 7004, + 657, 10585, 7006, + 657, 10585, 7008, + 657, 10585, 7156, + 657, 10585, 7158, + 657, 10585, 7160, + 657, 10585, 7162, + 657, 10585, 7212, + 657, 10585, 7214, + 657, 10585, 7216, + 657, 10585, 7218, + 657, 10585, 7220, + 657, 10585, 7224, + 657, 10585, 7234, + 657, 10585, 7236, + 657, 10585, 7240, + 657, 10585, 7242, + 657, 10585, 7250, + 657, 10585, 7252, + 657, 10585, 7254, + 657, 10585, 7256, + 657, 10585, 7258, + 657, 10585, 7260, + 657, 10585, 7278, + 657, 10585, 7280, + 657, 10585, 7286, + 657, 10585, 7288, + 657, 10585, 7290, + 657, 10585, 7292, + 657, 10585, 7294, + 657, 10585, 7296, + 657, 10585, 7298, + 657, 10585, 7300, + 657, 10585, 7302, + 657, 10585, 7304, + 657, 10585, 7456, + 657, 10585, 7458, + 657, 10585, 7460, + 657, 10585, 7552, + 657, 10585, 7554, + 657, 10585, 7556, + 657, 10585, 7564, + 657, 10585, 7620, + 657, 10585, 7622, + 657, 10585, 7624, + 657, 10585, 7876, + 657, 10585, 7878, + 657, 10585, 7880, + 657, 10585, 7882, + 657, 10585, 7894, + 657, 10585, 7896, + 657, 10585, 7898, + 657, 10585, 7900, + 657, 10585, 7902, + 705, 8694, + 719, 6741, 568, + 719, 13042, + 721, 6121, 1044, + 729, 11635, 8775, 601, 5707, 1546, + 729, 11635, 8775, 601, 5877, 1546, + 729, 11635, 8775, 601, 5877, 9546, + 729, 11635, 8775, 601, 5877, 10804, + 729, 11635, 8775, 601, 6543, 7708, + 729, 11635, 8775, 991, 7636, + 729, 11635, 8775, 991, 7708, + 729, 11635, 8775, 991, 10804, + 729, 11635, 8775, 1547, 10666, + 729, 11635, 8775, 1547, 10804, + 729, 11635, 8775, 2412, + 729, 11635, 8775, 4117, 5707, 7636, + 729, 11635, 8775, 4117, 5877, 1546, + 729, 11635, 8775, 4117, 5877, 10666, + 729, 11635, 8775, 4117, 6543, 7708, + 729, 11635, 8775, 4614, + 729, 11635, 8775, 4615, 10666, + 729, 11635, 8775, 4849, 5707, 7636, + 729, 11635, 8775, 5496, + 729, 11635, 8775, 5497, 601, 6542, + 729, 11635, 8775, 5497, 990, + 729, 11635, 8775, 5497, 1546, + 729, 11635, 8775, 5497, 2091, 6740, + 729, 11635, 8775, 5497, 4117, 6542, + 729, 11635, 8775, 5497, 6610, + 729, 11635, 8775, 5497, 6674, + 729, 11635, 8775, 5497, 6740, + 729, 11635, 8775, 5497, 7580, + 729, 11635, 8775, 5497, 8056, + 729, 11635, 8775, 5497, 8122, + 729, 11635, 8775, 5497, 9158, + 729, 11635, 8775, 5497, 9811, 6434, + 729, 11635, 8775, 5497, 10468, + 729, 11635, 8775, 5497, 10728, + 729, 11635, 8775, 5497, 10959, 6434, + 729, 11635, 8775, 5497, 11097, 6434, + 729, 11635, 8775, 5497, 11098, + 729, 11635, 8775, 5497, 11765, 6434, + 729, 11635, 8775, 5497, 12472, + 729, 11635, 8775, 5831, 10804, + 729, 11635, 8775, 6406, + 729, 11635, 8775, 6407, 10666, + 729, 11635, 8775, 6617, 760, + 729, 11635, 8775, 6675, 7636, + 729, 11635, 8775, 6675, 10666, + 729, 11635, 8775, 7316, + 729, 11635, 8775, 7317, 10666, + 729, 11635, 8775, 7415, 5496, + 729, 11635, 8775, 7415, 10666, + 729, 11635, 8775, 7581, 760, + 729, 11635, 8775, 7637, 7708, + 729, 11635, 8775, 7709, 10804, + 729, 11635, 8775, 7884, + 729, 11635, 8775, 8057, 1546, + 729, 11635, 8775, 8057, 5830, + 729, 11635, 8775, 8057, 7636, + 729, 11635, 8775, 8057, 10666, + 729, 11635, 8775, 8057, 10728, + 729, 11635, 8775, 8057, 10804, + 729, 11635, 8775, 8308, + 729, 11635, 8775, 8747, 5496, + 729, 11635, 8775, 9159, 10666, + 729, 11635, 8775, 9271, 10666, + 729, 11635, 8775, 9811, 6074, + 729, 11635, 8775, 10729, 760, + 729, 11635, 8775, 10959, 6074, + 729, 11635, 8775, 11097, 6074, + 729, 11635, 8775, 11225, 10666, + 729, 11635, 8775, 11765, 6074, + 729, 11635, 8775, 12473, 10804, + 730, + 789, 8774, + 807, 9633, 9718, + 807, 9718, + 827, 10145, 601, 6909, 721, 4117, 11649, 7100, + 827, 10145, 601, 6909, 721, 4849, 4117, 7100, + 827, 10145, 601, 6909, 721, 4849, 7100, + 827, 10145, 601, 6909, 721, 7443, 4117, 7100, + 827, 10145, 601, 6909, 721, 7443, 7100, + 827, 10145, 601, 6909, 721, 11649, 7100, + 827, 10145, 601, 7101, 721, 4117, 11649, 6908, + 827, 10145, 601, 7101, 721, 4849, 4117, 6908, + 827, 10145, 601, 7101, 721, 4849, 6908, + 827, 10145, 601, 7101, 721, 7443, 4117, 6908, + 827, 10145, 601, 7101, 721, 7443, 6908, + 827, 10145, 601, 7101, 721, 11649, 6908, + 827, 10145, 601, 8153, 721, 4849, 8716, + 827, 10145, 601, 8153, 721, 7443, 8716, + 827, 10145, 601, 8153, 721, 11649, 8716, + 827, 10145, 601, 8717, 721, 4849, 8152, + 827, 10145, 601, 8717, 721, 7443, 8152, + 827, 10145, 601, 8717, 721, 11649, 8152, + 827, 10145, 4117, 6909, 721, 601, 11649, 7100, + 827, 10145, 4117, 6909, 721, 4849, 601, 7100, + 827, 10145, 4117, 6909, 721, 4849, 7100, + 827, 10145, 4117, 6909, 721, 7443, 601, 7100, + 827, 10145, 4117, 6909, 721, 7443, 7100, + 827, 10145, 4117, 6909, 721, 11649, 7100, + 827, 10145, 4117, 7101, 721, 601, 11649, 6908, + 827, 10145, 4117, 7101, 721, 4849, 601, 6908, + 827, 10145, 4117, 7101, 721, 4849, 6908, + 827, 10145, 4117, 7101, 721, 7443, 601, 6908, + 827, 10145, 4117, 7101, 721, 7443, 6908, + 827, 10145, 4117, 7101, 721, 11649, 6908, + 827, 10145, 4117, 8153, 721, 4849, 8716, + 827, 10145, 4117, 8153, 721, 7443, 8716, + 827, 10145, 4117, 8153, 721, 11649, 8716, + 827, 10145, 4117, 8717, 721, 4849, 8152, + 827, 10145, 4117, 8717, 721, 7443, 8152, + 827, 10145, 4117, 8717, 721, 11649, 8152, + 827, 10145, 4849, 601, 6909, 721, 7443, 4117, 7100, + 827, 10145, 4849, 4117, 6909, 721, 7443, 601, 7100, + 827, 10145, 4849, 6909, 721, 7443, 601, 7100, + 827, 10145, 4849, 6909, 721, 7443, 4117, 7100, + 827, 10145, 4849, 6909, 721, 7443, 10677, 7100, + 827, 10145, 4849, 7101, 721, 7443, 601, 6908, + 827, 10145, 4849, 7101, 721, 7443, 4117, 6908, + 827, 10145, 4849, 7101, 721, 7443, 10677, 6908, + 827, 10145, 6909, 600, + 827, 10145, 6909, 601, 721, 4848, + 827, 10145, 6909, 601, 721, 7101, 4116, + 827, 10145, 6909, 601, 721, 7442, + 827, 10145, 6909, 601, 721, 11648, + 827, 10145, 6909, 4116, + 827, 10145, 6909, 4117, 721, 4848, + 827, 10145, 6909, 4117, 721, 7442, + 827, 10145, 6909, 4117, 721, 11648, + 827, 10145, 6909, 4848, + 827, 10145, 6909, 4849, 721, 7101, 7442, + 827, 10145, 6909, 7442, + 827, 10145, 6909, 8153, 3993, 10676, + 827, 10145, 6909, 8153, 3993, 11648, + 827, 10145, 6909, 8849, 3993, 10676, + 827, 10145, 6909, 8849, 3993, 11648, + 827, 10145, 6909, 10676, + 827, 10145, 6909, 10677, 721, 4848, + 827, 10145, 6909, 10677, 721, 7442, + 827, 10145, 6909, 10677, 721, 11648, + 827, 10145, 6909, 11191, 3993, 10676, + 827, 10145, 6909, 11191, 3993, 11648, + 827, 10145, 6909, 11648, + 827, 10145, 7101, 600, + 827, 10145, 7101, 601, 721, 4848, + 827, 10145, 7101, 601, 721, 6909, 4116, + 827, 10145, 7101, 601, 721, 7442, + 827, 10145, 7101, 601, 721, 11648, + 827, 10145, 7101, 731, 601, 721, 4848, + 827, 10145, 7101, 731, 601, 721, 7442, + 827, 10145, 7101, 731, 4117, 721, 4848, + 827, 10145, 7101, 731, 4117, 721, 7442, + 827, 10145, 7101, 4116, + 827, 10145, 7101, 4117, 721, 4848, + 827, 10145, 7101, 4117, 721, 7442, + 827, 10145, 7101, 4117, 721, 11648, + 827, 10145, 7101, 4848, + 827, 10145, 7101, 4849, 721, 6909, 7442, + 827, 10145, 7101, 7442, + 827, 10145, 7101, 8153, 3993, 10676, + 827, 10145, 7101, 8153, 3993, 11648, + 827, 10145, 7101, 8849, 3993, 10676, + 827, 10145, 7101, 8849, 3993, 11648, + 827, 10145, 7101, 10001, 6622, + 827, 10145, 7101, 10001, 7773, 4849, 569, 7121, 7442, + 827, 10145, 7101, 10001, 7773, 7443, 569, 7121, 4848, + 827, 10145, 7101, 10676, + 827, 10145, 7101, 10677, 721, 4848, + 827, 10145, 7101, 10677, 721, 7442, + 827, 10145, 7101, 10677, 721, 11648, + 827, 10145, 7101, 11191, 3993, 10676, + 827, 10145, 7101, 11191, 3993, 11648, + 827, 10145, 7101, 11648, + 827, 10145, 7443, 601, 6909, 721, 4849, 4117, 7100, + 827, 10145, 7443, 4117, 6909, 721, 4849, 601, 7100, + 827, 10145, 7443, 6909, 721, 4849, 601, 7100, + 827, 10145, 7443, 6909, 721, 4849, 4117, 7100, + 827, 10145, 7443, 6909, 721, 4849, 10677, 7100, + 827, 10145, 7443, 7101, 721, 4849, 601, 6908, + 827, 10145, 7443, 7101, 721, 4849, 4117, 6908, + 827, 10145, 7443, 7101, 721, 4849, 10677, 6908, + 827, 10145, 8153, 601, 721, 4848, + 827, 10145, 8153, 601, 721, 7442, + 827, 10145, 8153, 601, 721, 11648, + 827, 10145, 8153, 4117, 721, 4848, + 827, 10145, 8153, 4117, 721, 7442, + 827, 10145, 8153, 4117, 721, 11648, + 827, 10145, 8153, 10676, + 827, 10145, 8153, 10677, 721, 4848, + 827, 10145, 8153, 10677, 721, 7442, + 827, 10145, 8153, 10677, 721, 11648, + 827, 10145, 8153, 11648, + 827, 10145, 10677, 6909, 721, 4849, 7100, + 827, 10145, 10677, 6909, 721, 7443, 7100, + 827, 10145, 10677, 6909, 721, 11649, 7100, + 827, 10145, 10677, 7101, 721, 4849, 6908, + 827, 10145, 10677, 7101, 721, 7443, 6908, + 827, 10145, 10677, 7101, 721, 11649, 6908, + 827, 10145, 10677, 8153, 721, 4849, 8716, + 827, 10145, 10677, 8153, 721, 7443, 8716, + 827, 10145, 10677, 8153, 721, 11649, 8716, + 827, 10145, 10677, 8717, 721, 4849, 8152, + 827, 10145, 10677, 8717, 721, 7443, 8152, + 827, 10145, 10677, 8717, 721, 11649, 8152, + 889, 2412, + 909, 8759, 6, + 909, 8759, 14, + 909, 8759, 26, + 909, 8759, 30, + 909, 8759, 32, + 909, 8759, 36, + 909, 8759, 38, + 909, 8759, 240, + 909, 8759, 248, + 909, 8759, 254, + 909, 8759, 466, + 909, 8759, 472, + 909, 8759, 494, + 909, 8759, 528, + 909, 8759, 538, + 909, 8759, 544, + 909, 8759, 550, + 909, 8759, 554, + 909, 8759, 566, + 909, 8759, 628, + 909, 8759, 642, + 909, 8759, 844, + 909, 8759, 1458, + 909, 8759, 1460, + 909, 8759, 1462, + 909, 8759, 1464, + 909, 8759, 2602, + 909, 8759, 2608, + 909, 8759, 2630, + 909, 8759, 4542, + 909, 8759, 4584, + 909, 8759, 4586, + 909, 8759, 4588, + 909, 8759, 4590, + 909, 8759, 5872, + 909, 8759, 6974, + 909, 9617, 826, + 909, 9617, 920, + 909, 9617, 1036, + 909, 9617, 1093, 2170, + 909, 9617, 1093, 2778, + 909, 9617, 1093, 7694, + 909, 9617, 1132, + 909, 9617, 1136, + 909, 9617, 2025, 2170, + 909, 9617, 2025, 2778, + 909, 9617, 2025, 4214, + 909, 9617, 2025, 7694, + 909, 9617, 2166, + 909, 9617, 2201, 2170, + 909, 9617, 2201, 2778, + 909, 9617, 2386, + 909, 9617, 2390, + 909, 9617, 2586, + 909, 9617, 3794, + 909, 9617, 3805, 429, 6604, + 909, 9617, 3806, + 909, 9617, 3940, + 909, 9617, 4194, + 909, 9617, 4208, + 909, 9617, 4390, + 909, 9617, 4398, + 909, 9617, 4536, + 909, 9617, 4628, + 909, 9617, 4835, 2170, + 909, 9617, 4835, 2778, + 909, 9617, 4835, 4214, + 909, 9617, 4835, 7694, + 909, 9617, 4895, 2170, + 909, 9617, 4895, 2778, + 909, 9617, 4940, + 909, 9617, 4950, + 909, 9617, 5012, + 909, 9617, 5524, + 909, 9617, 5646, + 909, 9617, 5764, + 909, 9617, 6101, 2170, + 909, 9617, 6101, 2778, + 909, 9617, 6113, 2170, + 909, 9617, 6113, 2778, + 909, 9617, 6521, 2170, + 909, 9617, 6521, 2778, + 909, 9617, 6578, + 909, 9617, 6600, + 909, 9617, 6670, + 909, 9617, 6852, + 909, 9617, 6873, 2170, + 909, 9617, 6873, 2778, + 909, 9617, 6873, 7694, + 909, 9617, 6907, 2170, + 909, 9617, 6907, 2778, + 909, 9617, 7057, 2170, + 909, 9617, 7057, 2778, + 909, 9617, 7185, 2170, + 909, 9617, 7185, 2778, + 909, 9617, 7526, + 909, 9617, 7593, 2170, + 909, 9617, 7593, 2778, + 909, 9617, 7600, + 909, 9617, 7603, 2170, + 909, 9617, 7603, 2778, + 909, 9617, 7662, + 909, 9617, 7704, + 909, 9617, 7813, 2170, + 909, 9617, 7813, 2778, + 909, 9617, 7974, + 909, 9617, 8484, + 909, 9617, 8486, + 909, 9617, 8576, + 909, 9617, 8640, + 909, 9617, 8681, 2170, + 909, 9617, 8681, 2778, + 909, 9617, 8681, 7694, + 909, 9617, 8735, 2170, + 909, 9617, 8735, 2778, + 909, 9617, 8824, + 909, 9617, 8870, + 909, 9617, 9102, + 909, 9617, 9948, + 909, 9617, 11488, + 909, 9617, 11803, 4389, 5969, 7736, + 909, 9617, 11803, 4536, + 909, 9617, 11803, 6100, + 909, 9617, 11803, 7816, + 909, 9617, 11803, 8946, + 909, 9617, 12419, 1092, + 909, 9617, 12419, 1170, + 909, 9617, 12419, 2504, + 909, 9617, 12419, 3788, + 909, 9617, 12419, 3850, + 909, 9617, 12419, 4172, + 909, 9617, 12419, 4196, + 909, 9617, 12419, 4218, + 909, 9617, 12419, 4244, + 909, 9617, 12419, 4342, + 909, 9617, 12419, 4844, + 909, 9617, 12419, 4894, + 909, 9617, 12419, 5632, + 909, 9617, 12419, 5764, + 909, 9617, 12419, 6116, + 909, 9617, 12419, 6952, + 909, 9617, 12419, 7532, + 909, 9617, 12419, 7726, + 909, 9617, 12419, 8154, + 909, 9617, 12419, 8730, + 909, 9617, 12419, 8793, 9426, + 909, 9617, 12419, 8870, + 909, 9617, 12495, 4172, + 909, 9617, 12495, 7726, + 909, 9617, 12495, 8154, + 909, 9617, 12495, 8870, + 1009, 8178, + 1009, 8180, + 1009, 8182, + 1009, 8184, + 1009, 8186, + 1009, 8188, + 1045, 5444, + 1045, 6376, + 1045, 7172, + 1045, 10374, + 1109, 429, 7394, + 1177, 718, + 1429, 9730, + 1429, 9912, + 1635, 5758, + 1741, 247, 380, + 1741, 247, 412, + 1741, 323, 332, + 1741, 5965, 1859, 170, + 1741, 5965, 1859, 564, + 1741, 5965, 1859, 2684, + 1741, 5965, 1859, 8034, + 1741, 6689, 2170, + 1741, 6689, 2540, + 1741, 6689, 2778, + 1741, 6689, 4200, + 1741, 6689, 4214, + 1741, 6689, 5190, + 1741, 6689, 6260, + 1741, 6689, 6722, + 1741, 6689, 7508, + 1741, 6689, 7694, + 1741, 7803, 5759, 0, + 1741, 7803, 5759, 8, + 1741, 7803, 5759, 16, + 1741, 7803, 5759, 28, + 1741, 7803, 5759, 40, + 1741, 7803, 5759, 48, + 1741, 7803, 5759, 58, + 1741, 7803, 5759, 72, + 1741, 7803, 5759, 78, + 1741, 7803, 5759, 98, + 1741, 7803, 5759, 168, + 1741, 7803, 5759, 266, + 1741, 7803, 5759, 606, + 1741, 7803, 5759, 668, + 1741, 7803, 5759, 1859, 1588, + 1741, 7803, 5759, 1859, 1658, + 1741, 8405, 28, + 1741, 8405, 108, + 1741, 8405, 130, + 1741, 8405, 150, + 1741, 8405, 209, 2646, + 1741, 8405, 209, 5846, + 1741, 8405, 247, 2646, + 1741, 8405, 247, 5846, + 1741, 8405, 322, + 1741, 8405, 351, 4878, + 1741, 8405, 351, 4898, + 1741, 8405, 380, + 1741, 8405, 412, + 1741, 8405, 480, + 1741, 8405, 537, 2646, + 1741, 8405, 537, 5846, + 1741, 8405, 568, + 1741, 8405, 632, + 1741, 8405, 660, + 1741, 8405, 1619, 2646, + 1741, 8405, 1619, 5846, + 1741, 8405, 2038, + 1741, 8405, 2134, + 1741, 8405, 2219, 2646, + 1741, 8405, 2219, 5846, + 1741, 8405, 2685, 2646, + 1741, 8405, 2685, 5846, + 1741, 10154, + 1741, 11134, + 1741, 11227, 5759, 350, + 1741, 11227, 5759, 2134, + 1741, 12421, 4926, + 1764, + 1809, 4876, + 1809, 8153, 7391, 11195, 4926, + 1809, 9898, + 2027, 2643, 1817, 5759, 1734, + 2027, 2643, 1817, 5759, 4826, + 2027, 2643, 1817, 5965, 8442, + 2027, 2643, 1817, 5965, 8444, + 2027, 2643, 1817, 6689, 2170, + 2027, 2643, 1817, 6689, 2540, + 2027, 2643, 1817, 6689, 2778, + 2027, 2643, 1817, 6689, 4200, + 2027, 2643, 1817, 6689, 4214, + 2027, 2643, 1817, 6689, 5190, + 2027, 2643, 1817, 6689, 6260, + 2027, 2643, 1817, 6689, 6722, + 2027, 2643, 1817, 6689, 7508, + 2027, 2643, 1817, 6689, 7694, + 2027, 2643, 1817, 7803, 5759, 8, + 2027, 2643, 1817, 7803, 5759, 28, + 2027, 2643, 1817, 7803, 5759, 40, + 2027, 2643, 1817, 7803, 5759, 58, + 2027, 2643, 1817, 7803, 5759, 66, + 2027, 2643, 1817, 7803, 5759, 98, + 2027, 2643, 1817, 7803, 5759, 266, + 2027, 2643, 1817, 7803, 5759, 290, + 2027, 2643, 1817, 7803, 5759, 422, + 2027, 2643, 1817, 7803, 5759, 458, + 2027, 2643, 1817, 7803, 5759, 590, + 2027, 2643, 1817, 7803, 5759, 606, + 2027, 2643, 1817, 7803, 5759, 608, + 2027, 2643, 1817, 7803, 5759, 700, + 2027, 2643, 1817, 7803, 5759, 2156, + 2027, 2643, 1817, 7803, 5759, 2806, + 2027, 2643, 1817, 7803, 5759, 7803, 11238, + 2027, 2643, 1817, 8405, 1809, 100, + 2027, 2643, 1817, 8405, 1809, 138, + 2027, 2643, 1817, 8405, 1809, 196, + 2027, 2643, 1817, 8405, 1809, 236, + 2027, 2643, 1817, 8405, 1809, 306, + 2027, 2643, 1817, 8405, 1809, 332, + 2027, 2643, 1817, 8405, 1809, 364, + 2027, 2643, 1817, 8405, 1809, 392, + 2027, 2643, 1817, 8405, 1809, 462, + 2027, 2643, 1817, 8405, 1809, 496, + 2027, 2643, 1817, 8405, 1809, 524, + 2027, 2643, 1817, 8405, 1809, 556, + 2027, 2643, 1817, 8405, 1809, 610, + 2027, 2643, 1817, 8405, 1809, 638, + 2027, 2643, 1817, 8405, 1809, 652, + 2027, 2643, 1817, 8405, 1809, 1702, + 2027, 2643, 1817, 8405, 1809, 2030, + 2027, 2643, 1817, 8405, 1809, 2212, + 2027, 2643, 1817, 8405, 1809, 2678, + 2027, 2643, 1817, 8405, 1809, 2732, + 2027, 2643, 1817, 8405, 1809, 2980, + 2027, 2643, 1817, 8405, 4423, 100, + 2027, 2643, 1817, 8405, 4423, 138, + 2027, 2643, 1817, 8405, 4423, 196, + 2027, 2643, 1817, 8405, 4423, 236, + 2027, 2643, 1817, 8405, 4423, 306, + 2027, 2643, 1817, 8405, 4423, 332, + 2027, 2643, 1817, 8405, 4423, 364, + 2027, 2643, 1817, 8405, 4423, 392, + 2027, 2643, 1817, 8405, 4423, 462, + 2027, 2643, 1817, 8405, 4423, 496, + 2027, 2643, 1817, 8405, 4423, 524, + 2027, 2643, 1817, 8405, 4423, 556, + 2027, 2643, 1817, 8405, 4423, 610, + 2027, 2643, 1817, 8405, 4423, 638, + 2027, 2643, 1817, 8405, 4423, 652, + 2027, 2643, 1817, 8405, 4423, 1702, + 2027, 2643, 1817, 8405, 4423, 2030, + 2027, 2643, 1817, 8405, 4423, 2212, + 2027, 2643, 1817, 8405, 4423, 2678, + 2027, 2643, 1817, 8405, 4423, 2732, + 2027, 2643, 1817, 8405, 4423, 2980, + 2027, 2643, 1817, 8405, 6789, 2, + 2027, 2643, 1817, 8405, 6789, 6, + 2027, 2643, 1817, 8405, 6789, 20, + 2027, 2643, 1817, 8405, 6789, 24, + 2027, 2643, 1817, 8405, 6789, 26, + 2027, 2643, 1817, 8405, 6789, 42, + 2027, 2643, 1817, 8405, 6789, 400, + 2027, 8701, 5758, + 2075, 1809, 5965, 11424, + 2075, 4423, 5965, 11424, + 2075, 6616, + 2075, 6689, 2170, + 2075, 6689, 2540, + 2075, 6689, 2778, + 2075, 6689, 4200, + 2075, 6689, 4214, + 2075, 6689, 5190, + 2075, 6689, 6260, + 2075, 6689, 6722, + 2075, 6689, 7508, + 2075, 6689, 7694, + 2075, 8405, 0, + 2075, 8405, 8, + 2075, 8405, 16, + 2075, 8405, 26, + 2075, 8405, 28, + 2075, 8405, 40, + 2075, 8405, 100, + 2075, 8405, 138, + 2075, 8405, 162, + 2075, 8405, 196, + 2075, 8405, 236, + 2075, 8405, 292, + 2075, 8405, 306, + 2075, 8405, 332, + 2075, 8405, 364, + 2075, 8405, 392, + 2075, 8405, 393, 8936, + 2075, 8405, 440, + 2075, 8405, 462, + 2075, 8405, 510, + 2075, 8405, 524, + 2075, 8405, 556, + 2075, 8405, 622, + 2075, 8405, 652, + 2075, 8405, 884, + 2075, 8405, 1228, + 2075, 8405, 2126, + 2075, 8405, 2127, 8936, + 2075, 8405, 2438, + 2075, 8405, 4679, 292, + 2075, 8405, 4679, 510, + 2075, 8405, 4679, 884, + 2075, 8405, 11470, + 2075, 8775, 441, 8104, + 2075, 8775, 11636, + 2075, 10767, 4895, 1809, 5964, + 2075, 10767, 4895, 4423, 5964, + 2075, 10767, 4895, 8649, 5964, + 2075, 10767, 4895, 11475, 5964, + 2075, 10767, 7551, 1809, 5964, + 2075, 10767, 7551, 4423, 5964, + 2075, 10767, 7551, 8649, 5964, + 2075, 10767, 8153, 1045, 6376, + 2075, 10767, 12511, 4926, + 2075, 11672, + 2075, 12017, 4926, + 2088, + 2091, 1, 8763, 428, + 2091, 1, 10579, 428, + 2091, 81, 9263, 428, + 2091, 5758, + 2091, 5972, + 2091, 6569, 4926, + 2091, 6741, 568, + 2091, 7708, + 2091, 7919, 6741, 568, + 2091, 8521, 10573, 428, + 2091, 8521, 10573, 429, 445, 6741, 568, + 2091, 8745, 6989, 429, 445, 6741, 568, + 2091, 8745, 10379, 429, 445, 6741, 568, + 2091, 10411, 568, + 2091, 11041, 568, + 2091, 11098, + 2091, 11621, 568, + 2091, 12472, + 2091, 13045, 6741, 568, + 2159, 825, 2690, + 2159, 3771, 8020, + 2159, 3992, + 2159, 4210, + 2159, 4530, + 2159, 6564, + 2159, 7921, 429, 6568, + 2159, 8009, 3711, 13054, + 2159, 8153, 10728, + 2159, 9973, 8975, 8524, + 2159, 10267, 4210, + 2163, 5758, + 2167, 8325, 8405, 0, + 2167, 8325, 8405, 8, + 2167, 8325, 8405, 16, + 2167, 8325, 8405, 28, + 2167, 8325, 8405, 40, + 2167, 8325, 8405, 102, + 2167, 8325, 8405, 142, + 2167, 8325, 8405, 164, + 2167, 8325, 8405, 172, + 2167, 8325, 8405, 174, + 2167, 8325, 8405, 176, + 2167, 8325, 8405, 182, + 2167, 8325, 8405, 184, + 2167, 8325, 8405, 238, + 2167, 8325, 8405, 266, + 2167, 8325, 8405, 306, + 2167, 8325, 8405, 310, + 2167, 8325, 8405, 326, + 2167, 8325, 8405, 468, + 2167, 8325, 8405, 560, + 2167, 8325, 8405, 606, + 2167, 8325, 8405, 612, + 2167, 8325, 8405, 672, + 2167, 8325, 8405, 886, + 2167, 8325, 8405, 1106, + 2167, 8325, 8405, 1122, + 2167, 8325, 8405, 1124, + 2167, 8325, 8405, 1614, + 2167, 8325, 8405, 2214, + 2167, 8325, 8405, 2518, + 2167, 8325, 8405, 2680, + 2167, 8325, 9513, 2170, + 2167, 8325, 9513, 2670, + 2167, 8325, 9513, 4200, + 2167, 8325, 9513, 6784, + 2167, 9583, 5759, 0, + 2167, 9583, 5759, 16, + 2167, 9583, 5759, 40, + 2167, 9583, 5759, 100, + 2167, 9583, 5759, 116, + 2167, 9583, 5759, 138, + 2167, 9583, 5759, 144, + 2167, 9583, 5759, 152, + 2167, 9583, 5759, 196, + 2167, 9583, 5759, 216, + 2167, 9583, 5759, 230, + 2167, 9583, 5759, 236, + 2167, 9583, 5759, 292, + 2167, 9583, 5759, 296, + 2167, 9583, 5759, 306, + 2167, 9583, 5759, 326, + 2167, 9583, 5759, 332, + 2167, 9583, 5759, 364, + 2167, 9583, 5759, 374, + 2167, 9583, 5759, 384, + 2167, 9583, 5759, 392, + 2167, 9583, 5759, 416, + 2167, 9583, 5759, 462, + 2167, 9583, 5759, 510, + 2167, 9583, 5759, 520, + 2167, 9583, 5759, 524, + 2167, 9583, 5759, 556, + 2167, 9583, 5759, 576, + 2167, 9583, 5759, 610, + 2167, 9583, 5759, 614, + 2167, 9583, 5759, 638, + 2167, 9583, 5759, 652, + 2167, 9583, 5759, 670, + 2167, 9583, 5759, 2516, + 2167, 9583, 5759, 2566, + 2167, 9583, 5759, 2678, + 2167, 9583, 5759, 3700, + 2167, 9583, 5759, 9058, + 2167, 9583, 5759, 10790, + 2167, 9583, 5759, 11436, + 2167, 9583, 5759, 11926, + 2167, 9583, 5759, 12408, + 2167, 9583, 5759, 12410, + 2167, 9583, 5759, 12896, + 2167, 9583, 6129, 9178, + 2167, 9583, 8525, 2170, + 2167, 9583, 8525, 2670, + 2167, 9583, 8525, 2778, + 2167, 9583, 8525, 8876, + 2167, 9583, 8525, 9344, + 2171, 1045, 5387, 2779, 4113, 12132, + 2171, 1045, 8392, + 2209, 2671, 10625, 5758, + 2209, 5758, + 2209, 7171, 5758, + 2241, 11945, 11632, + 2511, 7172, + 2541, 9601, 6505, 5830, + 2541, 10425, 6505, 721, 7821, 10194, + 2586, + 2639, 1809, 4876, + 2639, 4223, 5836, + 2639, 4849, 6627, 9050, + 2639, 4849, 8745, 9050, + 2639, 4849, 12114, + 2639, 5445, 5758, + 2639, 6610, + 2639, 6616, + 2639, 6689, 2170, + 2639, 6689, 2540, + 2639, 6689, 2778, + 2639, 6689, 4200, + 2639, 6689, 4214, + 2639, 6689, 5190, + 2639, 6689, 6260, + 2639, 6689, 6722, + 2639, 6689, 7508, + 2639, 6689, 7694, + 2639, 6875, 7908, + 2639, 7089, 7593, 8405, 0, + 2639, 7089, 7593, 8405, 2, + 2639, 7089, 7593, 8405, 4, + 2639, 7089, 7593, 8405, 6, + 2639, 7089, 7593, 8405, 8, + 2639, 7089, 7593, 8405, 10, + 2639, 7089, 7593, 8405, 12, + 2639, 7089, 7593, 8405, 14, + 2639, 7089, 7593, 8405, 16, + 2639, 7089, 7593, 8405, 18, + 2639, 7089, 7593, 8405, 20, + 2639, 7089, 7593, 8405, 22, + 2639, 7089, 7593, 8405, 24, + 2639, 7089, 7593, 8405, 26, + 2639, 7089, 7593, 8405, 28, + 2639, 7089, 7593, 8405, 30, + 2639, 7089, 7593, 8405, 32, + 2639, 7089, 7593, 8405, 34, + 2639, 7089, 7593, 8405, 36, + 2639, 7089, 7593, 8405, 38, + 2639, 7089, 7593, 8405, 40, + 2639, 7089, 7593, 8405, 42, + 2639, 7089, 7593, 8405, 44, + 2639, 7089, 7593, 8405, 46, + 2639, 7089, 7593, 8405, 48, + 2639, 7089, 7593, 8405, 50, + 2639, 7089, 9063, 8405, 0, + 2639, 7089, 9063, 8405, 2, + 2639, 7089, 9063, 8405, 4, + 2639, 7089, 9063, 8405, 6, + 2639, 7089, 9063, 8405, 8, + 2639, 7089, 9063, 8405, 10, + 2639, 7089, 9063, 8405, 12, + 2639, 7089, 9063, 8405, 14, + 2639, 7089, 9063, 8405, 16, + 2639, 7089, 9063, 8405, 18, + 2639, 7089, 9063, 8405, 20, + 2639, 7089, 9063, 8405, 22, + 2639, 7089, 9063, 8405, 24, + 2639, 7089, 9063, 8405, 26, + 2639, 7089, 9063, 8405, 28, + 2639, 7089, 9063, 8405, 30, + 2639, 7089, 9063, 8405, 32, + 2639, 7089, 9063, 8405, 34, + 2639, 7089, 9063, 8405, 36, + 2639, 7089, 9063, 8405, 38, + 2639, 7089, 9063, 8405, 40, + 2639, 7089, 9063, 8405, 42, + 2639, 7089, 9063, 8405, 44, + 2639, 7089, 9063, 8405, 46, + 2639, 7089, 9063, 8405, 48, + 2639, 7089, 9063, 8405, 50, + 2639, 7443, 6627, 9050, + 2639, 7443, 8745, 9050, + 2639, 7443, 12114, + 2639, 7608, + 2639, 7708, + 2639, 8129, 5758, + 2639, 8167, 5758, + 2639, 8525, 5758, + 2639, 9581, 5758, + 2639, 9633, 9718, + 2639, 9718, + 2639, 9898, + 2639, 10469, 4926, + 2639, 10677, 4876, + 2639, 10708, + 2639, 11099, 5758, + 2639, 11195, 4926, + 2639, 11224, + 2639, 11424, + 2639, 11449, 7908, + 2639, 11451, 90, + 2639, 12017, 4926, + 2639, 12473, 5758, + 2639, 12478, + 2643, 337, 8405, 0, + 2643, 337, 8405, 8, + 2643, 337, 8405, 16, + 2643, 337, 8405, 28, + 2643, 337, 8405, 40, + 2643, 337, 8405, 72, + 2643, 337, 8405, 162, + 2643, 337, 8405, 166, + 2643, 337, 8405, 196, + 2643, 337, 8405, 236, + 2643, 337, 8405, 306, + 2643, 337, 8405, 332, + 2643, 337, 8405, 364, + 2643, 337, 8405, 392, + 2643, 337, 8405, 440, + 2643, 337, 8405, 462, + 2643, 337, 8405, 496, + 2643, 337, 8405, 524, + 2643, 337, 8405, 556, + 2643, 337, 8405, 590, + 2643, 337, 8405, 610, + 2643, 337, 8405, 638, + 2643, 337, 8405, 652, + 2643, 337, 8405, 738, + 2643, 337, 8405, 1612, + 2643, 337, 8405, 2030, + 2643, 337, 8405, 2212, + 2643, 337, 8405, 2678, + 2643, 337, 8405, 2732, + 2643, 337, 8405, 5978, + 2643, 337, 8405, 8834, + 2643, 337, 8405, 8836, + 2643, 337, 8405, 8838, + 2643, 337, 8405, 8840, + 2643, 337, 8405, 8842, + 2691, 5387, 10256, + 2725, 731, 10763, 6435, 6121, 7172, + 2725, 731, 12901, 6434, + 2725, 731, 12901, 6435, 6121, 5444, + 2725, 4389, 10260, + 2725, 4849, 3958, + 2725, 4849, 4389, 9050, + 2725, 4849, 8076, + 2725, 6627, 9050, + 2725, 7443, 3958, + 2725, 7443, 4389, 9050, + 2725, 7443, 8076, + 2725, 8745, 9050, + 2725, 10637, 7533, 9050, + 2725, 12114, + 2779, 1045, 8392, + 2779, 1045, 12132, + 2779, 4113, 5387, 2171, 1045, 12132, + 2779, 8329, 9734, + 2779, 9437, 445, 10374, + 2779, 9437, 721, 10374, + 2779, 10725, 8993, 11876, + 2779, 11913, 8167, 7570, + 2779, 12491, 9437, 444, + 2779, 12491, 9437, 720, + 2847, 4223, 5836, + 2847, 6616, + 2847, 6689, 2170, + 2847, 6689, 2540, + 2847, 6689, 2778, + 2847, 6689, 4200, + 2847, 6689, 4214, + 2847, 6689, 5190, + 2847, 6689, 6260, + 2847, 6689, 6722, + 2847, 6689, 7508, + 2847, 6689, 7694, + 2847, 8775, 1140, + 2847, 8775, 2052, + 2847, 8775, 2634, + 2847, 8775, 3708, + 2847, 8775, 3986, + 2847, 8775, 4100, + 2847, 8775, 4680, + 2847, 8775, 4784, + 2847, 8775, 5944, + 2847, 8775, 5966, + 2847, 8775, 6700, + 2847, 8775, 6776, + 2847, 8775, 7032, + 2847, 10469, 4926, + 2847, 10585, 0, + 2847, 10585, 8, + 2847, 10585, 16, + 2847, 10585, 28, + 2847, 10585, 40, + 2847, 10585, 80, + 2847, 10585, 100, + 2847, 10585, 102, + 2847, 10585, 106, + 2847, 10585, 108, + 2847, 10585, 112, + 2847, 10585, 116, + 2847, 10585, 122, + 2847, 10585, 126, + 2847, 10585, 130, + 2847, 10585, 132, + 2847, 10585, 138, + 2847, 10585, 142, + 2847, 10585, 144, + 2847, 10585, 150, + 2847, 10585, 152, + 2847, 10585, 162, + 2847, 10585, 176, + 2847, 10585, 196, + 2847, 10585, 198, + 2847, 10585, 202, + 2847, 10585, 208, + 2847, 10585, 210, + 2847, 10585, 216, + 2847, 10585, 220, + 2847, 10585, 224, + 2847, 10585, 228, + 2847, 10585, 230, + 2847, 10585, 236, + 2847, 10585, 238, + 2847, 10585, 242, + 2847, 10585, 246, + 2847, 10585, 250, + 2847, 10585, 274, + 2847, 10585, 292, + 2847, 10585, 294, + 2847, 10585, 296, + 2847, 10585, 298, + 2847, 10585, 300, + 2847, 10585, 306, + 2847, 10585, 310, + 2847, 10585, 314, + 2847, 10585, 322, + 2847, 10585, 326, + 2847, 10585, 332, + 2847, 10585, 336, + 2847, 10585, 340, + 2847, 10585, 350, + 2847, 10585, 354, + 2847, 10585, 364, + 2847, 10585, 368, + 2847, 10585, 374, + 2847, 10585, 380, + 2847, 10585, 384, + 2847, 10585, 392, + 2847, 10585, 396, + 2847, 10585, 400, + 2847, 10585, 404, + 2847, 10585, 412, + 2847, 10585, 416, + 2847, 10585, 438, + 2847, 10585, 440, + 2847, 10585, 462, + 2847, 10585, 468, + 2847, 10585, 476, + 2847, 10585, 480, + 2847, 10585, 486, + 2847, 10585, 510, + 2847, 10585, 512, + 2847, 10585, 514, + 2847, 10585, 516, + 2847, 10585, 520, + 2847, 10585, 524, + 2847, 10585, 526, + 2847, 10585, 532, + 2847, 10585, 536, + 2847, 10585, 546, + 2847, 10585, 556, + 2847, 10585, 560, + 2847, 10585, 564, + 2847, 10585, 568, + 2847, 10585, 576, + 2847, 10585, 596, + 2847, 10585, 610, + 2847, 10585, 612, + 2847, 10585, 614, + 2847, 10585, 616, + 2847, 10585, 618, + 2847, 10585, 622, + 2847, 10585, 626, + 2847, 10585, 630, + 2847, 10585, 632, + 2847, 10585, 634, + 2847, 10585, 652, + 2847, 10585, 654, + 2847, 10585, 656, + 2847, 10585, 660, + 2847, 10585, 664, + 2847, 10585, 670, + 2847, 10585, 672, + 2847, 10585, 676, + 2847, 10585, 678, + 2847, 10585, 680, + 2847, 10585, 778, + 2847, 10585, 792, + 2847, 10585, 794, + 2847, 10585, 796, + 2847, 10585, 798, + 2847, 10585, 800, + 2847, 10585, 818, + 2847, 10585, 876, + 2847, 10585, 914, + 2847, 10585, 984, + 2847, 10585, 996, + 2847, 10585, 998, + 2847, 10585, 1000, + 2847, 10585, 1002, + 2847, 10585, 1004, + 2847, 10585, 1040, + 2847, 10585, 1098, + 2847, 10585, 1150, + 2847, 10585, 1172, + 2847, 10585, 1228, + 2847, 10585, 1230, + 2847, 10585, 1232, + 2847, 10585, 1234, + 2847, 10585, 1236, + 2847, 10585, 1238, + 2847, 10585, 1240, + 2847, 10585, 1290, + 2847, 10585, 1346, + 2847, 10585, 1356, + 2847, 10585, 1362, + 2847, 10585, 1384, + 2847, 10585, 1422, + 2847, 10585, 1424, + 2847, 10585, 1436, + 2847, 10585, 1506, + 2847, 10585, 1542, + 2847, 10585, 1588, + 2847, 10585, 1598, + 2847, 10585, 1660, + 2847, 10585, 1668, + 2847, 10585, 1670, + 2847, 10585, 1672, + 2847, 10585, 1674, + 2847, 10585, 1676, + 2847, 10585, 1758, + 2847, 10585, 1802, + 2847, 10585, 1878, + 2847, 10585, 1880, + 2847, 10585, 1882, + 2847, 10585, 1884, + 2847, 10585, 1886, + 2847, 10585, 1890, + 2847, 10585, 1938, + 2847, 10585, 2006, + 2847, 10585, 2008, + 2847, 10585, 2010, + 2847, 10585, 2012, + 2847, 10585, 2014, + 2847, 10585, 2016, + 2847, 10585, 2062, + 2847, 10585, 2064, + 2847, 10585, 2066, + 2847, 10585, 2068, + 2847, 10585, 2070, + 2847, 10585, 2084, + 2847, 10585, 2126, + 2847, 10585, 2130, + 2847, 10585, 2132, + 2847, 10585, 2134, + 2847, 10585, 2136, + 2847, 10585, 2178, + 2847, 10585, 2204, + 2847, 10585, 2238, + 2847, 10585, 2402, + 2847, 10585, 2430, + 2847, 10585, 2504, + 2847, 10585, 2516, + 2847, 10585, 2518, + 2847, 10585, 2520, + 2847, 10585, 2522, + 2847, 10585, 2524, + 2847, 10585, 2554, + 2847, 10585, 2666, + 2847, 10585, 2678, + 2847, 10585, 2680, + 2847, 10585, 2682, + 2847, 10585, 2684, + 2847, 10585, 2686, + 2847, 10585, 2722, + 2847, 10585, 2856, + 2847, 10585, 2876, + 2847, 10585, 2910, + 2847, 10585, 2922, + 2847, 10585, 2924, + 2847, 10585, 2934, + 2847, 10585, 2940, + 2847, 10585, 2942, + 2847, 10585, 2948, + 2847, 10585, 3050, + 2847, 10585, 3082, + 2847, 10585, 3138, + 2847, 10585, 3146, + 2847, 10585, 3148, + 2847, 10585, 3150, + 2847, 10585, 3152, + 2847, 10585, 3154, + 2847, 10585, 3178, + 2847, 10585, 3778, + 2847, 10585, 3780, + 2847, 10585, 4068, + 2847, 10585, 4070, + 2847, 10585, 4072, + 2847, 10585, 4074, + 2847, 10585, 4076, + 2847, 10585, 4078, + 2847, 10585, 4080, + 2847, 10585, 4246, + 2847, 10585, 4248, + 2847, 10585, 4250, + 2847, 10585, 4252, + 2847, 10585, 4774, + 2847, 10585, 4776, + 2847, 10585, 4778, + 2847, 10585, 4780, + 2847, 10585, 4932, + 2847, 10585, 4934, + 2847, 10585, 4964, + 2847, 10585, 4966, + 2847, 10585, 4968, + 2847, 10585, 4970, + 2847, 10585, 4972, + 2847, 10585, 5100, + 2847, 10585, 5114, + 2847, 10585, 5136, + 2847, 10585, 5146, + 2847, 10585, 5152, + 2847, 10585, 5154, + 2847, 10585, 5156, + 2847, 10585, 5158, + 2847, 10585, 5160, + 2847, 10585, 5168, + 2847, 10585, 5194, + 2847, 10585, 5204, + 2847, 10585, 5296, + 2847, 10585, 5316, + 2847, 10585, 5678, + 2847, 10585, 5710, + 2847, 10585, 5914, + 2847, 10585, 5930, + 2847, 10585, 6108, + 2847, 10585, 6126, + 2847, 10585, 6274, + 2847, 10585, 6282, + 2847, 10585, 6682, + 2847, 10585, 6684, + 2847, 10585, 7152, + 2847, 10585, 7154, + 2847, 10585, 7223, 150, + 2847, 10585, 7223, 196, + 2847, 10585, 7223, 306, + 2847, 10585, 7223, 364, + 2847, 10585, 7223, 2554, + 2847, 10585, 7228, + 2847, 10585, 7230, + 2847, 10585, 7232, + 2847, 10585, 11674, + 2941, 5758, + 2972, + 3055, 5758, + 3071, 6178, + 3245, 8774, + 3264, + 3285, 8774, + 3769, 8774, + 3839, 2812, + 3849, 428, + 3871, 5758, + 3873, 5758, + 3879, 6689, 2170, + 3879, 6689, 2540, + 3879, 6689, 2778, + 3879, 6689, 4200, + 3879, 6689, 4214, + 3879, 6689, 5190, + 3879, 6689, 6260, + 3879, 6689, 6722, + 3879, 6689, 7508, + 3879, 6689, 7694, + 3879, 7803, 5759, 16, + 3879, 7803, 5759, 28, + 3879, 7803, 5759, 40, + 3879, 7803, 5759, 58, + 3879, 7803, 5759, 72, + 3879, 7803, 5759, 92, + 3879, 7803, 5759, 168, + 3879, 7803, 5759, 266, + 3879, 7803, 5759, 426, + 3879, 7803, 5759, 590, + 3879, 8405, 0, + 3879, 8405, 8, + 3879, 8405, 16, + 3879, 8405, 28, + 3879, 8405, 40, + 3879, 8405, 72, + 3879, 8405, 100, + 3879, 8405, 138, + 3879, 8405, 216, + 3879, 8405, 236, + 3879, 8405, 292, + 3879, 8405, 306, + 3879, 8405, 332, + 3879, 8405, 364, + 3879, 8405, 392, + 3879, 8405, 462, + 3879, 8405, 510, + 3879, 8405, 524, + 3879, 8405, 556, + 3879, 8405, 610, + 3879, 8405, 652, + 3879, 8405, 766, + 3879, 8405, 792, + 3879, 8405, 884, + 3879, 8405, 974, + 3879, 8405, 996, + 3879, 8405, 1260, + 3879, 8405, 1512, + 3879, 8405, 1612, + 3879, 8405, 1948, + 3879, 8405, 2030, + 3879, 8405, 2042, + 3879, 8405, 2106, + 3879, 8405, 2212, + 3879, 8405, 2246, + 3879, 8405, 2566, + 3879, 8405, 2678, + 3879, 8405, 3902, + 3879, 8405, 5178, + 3879, 8405, 5182, + 3879, 8405, 5184, + 3879, 8405, 6789, 12, + 3879, 8405, 6789, 20, + 3879, 8405, 6789, 22, + 3879, 8405, 6789, 26, + 3879, 8405, 6789, 30, + 3879, 8405, 6789, 34, + 3879, 8405, 6789, 38, + 3879, 8405, 6789, 48, + 3879, 8405, 6789, 124, + 3879, 8405, 6789, 400, + 3879, 8405, 6789, 542, + 3879, 10775, 5759, 332, + 3879, 10775, 5759, 510, + 3879, 10775, 5759, 622, + 3879, 10775, 5759, 652, + 3879, 10775, 5759, 6789, 14, + 3879, 10775, 5759, 6789, 24, + 3879, 10775, 5759, 6789, 400, + 3879, 12133, 6646, + 3879, 12133, 8153, 6646, + 3879, 12133, 8732, + 3879, 12133, 8849, 6646, + 3961, 5566, + 3989, 7512, + 4103, 2091, 6798, + 4103, 2091, 7396, + 4103, 2091, 8122, + 4103, 2091, 8123, 6121, 10489, 10355, 7580, + 4103, 2091, 9113, 89, 8466, + 4103, 2091, 9113, 89, 8521, 10572, + 4103, 2091, 9113, 89, 8521, 10573, 445, 6740, + 4103, 2091, 9604, + 4103, 2091, 9605, 445, 6740, + 4103, 2091, 9750, + 4103, 2091, 9751, 445, 6740, + 4107, 5758, + 4117, 4197, 5878, + 4117, 5876, + 4117, 5877, 6121, 8057, 6490, + 4117, 7443, 10001, 10154, + 4117, 10716, + 4153, 8781, 6622, + 4171, 5758, + 4201, 1045, 4926, + 4201, 1045, 12132, + 4215, 1045, 4926, + 4215, 1045, 12132, + 4215, 11907, 9898, + 4215, 13047, 9898, + 4215, 13233, 9898, + 4223, 5836, + 4223, 6510, + 4223, 7327, 4676, + 4228, + 4260, + 4269, 4926, + 4387, 7608, + 4401, 8774, + 4423, 9831, 5758, + 4676, + 4686, + 4837, 9615, 5012, + 4849, 721, 7443, 5876, + 4849, 721, 7443, 8153, 11378, + 4849, 731, 11099, 9050, + 4849, 1809, 11715, 9050, + 4849, 2171, 8159, 6510, + 4849, 2171, 9615, 6510, + 4849, 3713, 601, 7443, 3713, 601, 9326, + 4849, 3713, 601, 7443, 3713, 4117, 9326, + 4849, 3713, 4117, 7443, 3713, 601, 9326, + 4849, 3713, 4117, 7443, 3713, 4117, 9326, + 4849, 4197, 5878, + 4849, 4201, 9259, 6510, + 4849, 4389, 6505, 8056, + 4849, 4389, 6510, + 4849, 5876, + 4849, 6409, 9050, + 4849, 6409, 9051, 6121, 1044, + 4849, 6435, 6121, 7593, 8056, + 4849, 6435, 6121, 9095, 5444, + 4849, 6505, 10637, 7533, 9050, + 4849, 6505, 11677, 9050, + 4849, 6627, 9050, + 4849, 6627, 9051, 7121, 4530, + 4849, 6627, 9051, 7773, 4530, + 4849, 6627, 9051, 8473, 7370, + 4849, 6792, + 4849, 7327, 4676, + 4849, 7443, 6105, 6434, + 4849, 7443, 6434, + 4849, 7443, 6435, 6121, 8153, 10677, 8758, + 4849, 7443, 6435, 6121, 8758, + 4849, 7443, 6435, 6121, 10677, 8758, + 4849, 7443, 6435, 9785, 7593, 8056, + 4849, 7443, 6505, 6434, + 4849, 7443, 7821, 6434, + 4849, 7443, 8153, 6434, + 4849, 7443, 8153, 6435, 6121, 8758, + 4849, 7443, 8153, 6435, 6121, 10677, 8758, + 4849, 7443, 12103, 6434, + 4849, 7509, 9259, 6510, + 4849, 7695, 9259, 6510, + 4849, 7695, 10467, 6510, + 4849, 7821, 6627, 9050, + 4849, 7821, 8077, 9050, + 4849, 7821, 8745, 9050, + 4849, 7821, 10637, 7533, 9050, + 4849, 7821, 11677, 9050, + 4849, 7821, 12114, + 4849, 8077, 9050, + 4849, 8151, 12877, 9050, + 4849, 8153, 6409, 9050, + 4849, 8153, 8933, 6778, + 4849, 8153, 11195, 4926, + 4849, 8153, 12114, + 4849, 8521, 8191, 11793, 9610, + 4849, 8631, 10371, 9050, + 4849, 8717, 11195, 4926, + 4849, 8745, 9050, + 4849, 8745, 9051, 6121, 5935, 275, 2725, 8076, + 4849, 8745, 9051, 6121, 5935, 275, 8005, 8076, + 4849, 8745, 9051, 6121, 7412, + 4849, 8745, 9051, 6121, 10666, + 4849, 8745, 9051, 7121, 8076, + 4849, 8745, 9051, 7773, 8076, + 4849, 8745, 9051, 10982, + 4849, 8933, 6778, + 4849, 9074, + 4849, 10346, + 4849, 10493, 753, 10794, + 4849, 10523, 41, 9050, + 4849, 10637, 7533, 9050, + 4849, 10643, 7991, 10677, 760, + 4849, 10677, 761, 6121, 7412, + 4849, 10677, 827, 4876, + 4849, 11793, 9610, + 4849, 12114, + 4849, 12115, 7121, 4530, + 4849, 12115, 7773, 4530, + 4849, 12115, 10982, + 4849, 12877, 9050, + 4849, 13029, 9050, + 4877, 11228, + 4877, 12057, 2091, 11049, 2681, 5446, + 4877, 12057, 6121, 12139, 5403, 7939, 5446, + 4877, 12057, 6121, 12857, 5403, 7939, 5446, + 4883, 5758, + 4895, 3993, 4221, 4849, 8467, 429, 8153, 10676, + 4895, 4849, 5876, + 4895, 4849, 7443, 6434, + 4895, 4849, 7443, 8153, 6434, + 4895, 7443, 5876, + 4895, 10016, + 4895, 11097, 6434, + 4895, 11097, 6435, 4221, 760, + 4895, 11097, 8153, 6434, + 4895, 11097, 8153, 6435, 4221, 760, + 4895, 11097, 10531, 6434, + 4895, 11765, 6434, + 4895, 11765, 6435, 4221, 760, + 4895, 11765, 8153, 6434, + 4895, 11765, 8153, 6435, 4221, 760, + 4895, 11765, 10531, 6434, + 4923, 721, 8197, 5758, + 4923, 5758, + 4923, 6121, 8759, 721, 4923, 721, 8197, 5758, + 4923, 6121, 8759, 5758, + 4931, 4926, + 5003, 5758, + 5006, + 5017, 11098, + 5017, 12472, + 5050, + 5131, 5392, + 5385, 826, + 5385, 8037, 6505, 5830, + 5385, 8037, 6622, + 5385, 8037, 9898, + 5385, 8037, 13233, 9898, + 5385, 8762, + 5385, 10578, + 5395, 8008, + 5401, 11891, 4926, + 5409, 5758, + 5445, 5758, + 5445, 5759, 275, 4849, 4389, 8056, + 5445, 5759, 275, 7443, 4389, 8056, + 5445, 5759, 275, 10642, + 5445, 5759, 6121, 1045, 6490, + 5445, 5759, 6121, 6505, 10642, + 5445, 5759, 6121, 7593, 8057, 6376, + 5445, 5759, 6121, 7709, 6376, + 5445, 5759, 6121, 7709, 6490, + 5445, 5759, 6121, 11261, 2778, + 5445, 5759, 6121, 11449, 7909, 6376, + 5445, 5759, 6377, 8167, 5758, + 5545, 5758, + 5551, 275, 6741, 568, + 5551, 6376, + 5551, 6741, 568, + 5551, 7382, + 5551, 10374, + 5769, 6104, + 5781, 8306, + 5831, 429, 6656, + 5831, 721, 9964, + 5831, 8166, + 5831, 10374, + 5887, 6704, + 5909, 6689, 2170, + 5909, 6689, 2540, + 5909, 6689, 2778, + 5909, 6689, 4200, + 5909, 6689, 4214, + 5909, 6689, 5190, + 5909, 6689, 6260, + 5909, 6689, 6722, + 5909, 6689, 7508, + 5909, 6689, 7694, + 5909, 9971, 8775, 3702, + 5909, 10759, 29, 722, + 5909, 10759, 109, 7968, + 5909, 10759, 151, 988, + 5909, 10759, 151, 6562, + 5909, 10759, 209, 196, + 5909, 10759, 209, 1142, + 5909, 10759, 247, 1386, + 5909, 10759, 247, 8518, + 5909, 10759, 323, 1582, + 5909, 10759, 351, 4878, + 5909, 10759, 351, 6582, + 5909, 10759, 354, + 5909, 10759, 381, 364, + 5909, 10759, 413, 416, + 5909, 10759, 413, 2018, + 5909, 10759, 481, 2234, + 5909, 10759, 517, 2448, + 5909, 10759, 520, + 5909, 10759, 537, 536, + 5909, 10759, 537, 2580, + 5909, 10759, 537, 5614, + 5909, 10759, 537, 5630, + 5909, 10759, 569, 2650, + 5909, 10759, 569, 7344, + 5909, 10759, 633, 6098, + 5909, 10759, 661, 3022, + 5909, 10759, 661, 6212, + 5909, 10759, 891, 3880, + 5909, 10759, 891, 3908, + 5909, 10759, 891, 6566, + 5909, 10759, 891, 6576, + 5909, 10759, 1619, 4738, + 5909, 10759, 1619, 4750, + 5909, 10759, 1619, 7050, + 5909, 10759, 1619, 7052, + 5909, 10759, 1619, 9618, + 5909, 10759, 1859, 170, + 5909, 10759, 1859, 2684, + 5909, 10759, 1859, 2730, + 5909, 10759, 1859, 9938, + 5909, 10759, 1859, 10228, + 5909, 10759, 2039, 2040, + 5909, 10759, 2219, 5412, + 5909, 10759, 2219, 7366, + 5909, 10759, 2219, 9652, + 5909, 10759, 2685, 5912, + 5909, 10759, 2685, 7690, + 5909, 10759, 2685, 7696, + 5909, 10759, 2685, 8812, + 5909, 10759, 2685, 9592, + 5909, 10759, 2685, 11694, + 5909, 10759, 5637, 0, + 5909, 10759, 5637, 8, + 5909, 10759, 5637, 16, + 5909, 10759, 5637, 28, + 5909, 10759, 5637, 40, + 5909, 10759, 5637, 58, + 5909, 10759, 5637, 66, + 5909, 10759, 5637, 73, 9446, + 5909, 10759, 5637, 73, 10312, + 5909, 10759, 5637, 78, + 5909, 10759, 5637, 266, + 5909, 10759, 5637, 590, + 5909, 10759, 5637, 606, + 5909, 10759, 5637, 2804, + 5909, 10759, 8358, + 5909, 10759, 9290, + 5909, 10759, 9590, + 5909, 10759, 10314, + 5909, 10759, 10358, + 5909, 10759, 10684, + 5909, 10759, 11108, + 5909, 10759, 11152, + 5909, 10759, 11412, + 5909, 10759, 12072, + 5909, 10759, 12362, + 5927, 7608, + 5946, + 5972, + 6051, 8774, + 6081, 5017, 11098, + 6081, 5017, 12472, + 6105, 3992, + 6105, 6435, 10441, 10015, 4848, + 6105, 6435, 10441, 10015, 7442, + 6107, 1809, 4876, + 6107, 3992, + 6107, 4876, + 6107, 10388, + 6113, 8781, 6622, + 6129, 8330, + 6261, 7825, 7608, + 6261, 7825, 8330, + 6261, 7825, 10363, 7608, + 6261, 7825, 11698, + 6379, 6408, + 6379, 7908, + 6408, + 6409, 6121, 37, 8318, + 6409, 6121, 10666, + 6428, + 6435, 10441, 10959, 5919, 9131, 11096, + 6435, 10441, 10959, 5919, 9131, 11764, + 6435, 10441, 11765, 5919, 9131, 9810, + 6435, 10441, 11765, 5919, 9131, 10958, + 6505, 2048, + 6505, 2587, 6121, 5528, + 6505, 3949, 5842, + 6505, 4202, + 6505, 4215, 9601, 5830, + 6505, 4849, 10441, 6992, + 6505, 5013, 8406, + 6505, 5830, + 6505, 6081, 7593, 8744, + 6505, 6571, 4760, + 6505, 6571, 5404, + 6505, 6571, 5564, + 6505, 6571, 7410, + 6505, 6571, 7996, + 6505, 6571, 8368, + 6505, 6907, 5842, + 6505, 7085, 8056, + 6505, 7085, 8744, + 6505, 7121, 4849, 10642, + 6505, 7121, 7443, 10642, + 6505, 7443, 10441, 6992, + 6505, 7547, 7370, + 6505, 7593, 5830, + 6505, 7593, 8744, + 6505, 7593, 9158, + 6505, 7593, 9438, + 6505, 7611, 5842, + 6505, 7773, 4849, 10642, + 6505, 7773, 7443, 10642, + 6505, 8006, + 6505, 8037, 7821, 5830, + 6505, 8056, + 6505, 8057, 6121, 2779, 7821, 4112, + 6505, 8057, 6121, 4117, 6434, + 6505, 8057, 6121, 7821, 1045, 7442, + 6505, 8463, 7593, 8744, + 6505, 8463, 8744, + 6505, 8463, 9158, + 6505, 8463, 9438, + 6505, 8744, + 6505, 9158, + 6505, 9159, 5842, + 6505, 9159, 6121, 4117, 6434, + 6505, 9159, 7173, 7821, 46, + 6505, 9338, + 6505, 9438, + 6505, 9711, 4178, + 6505, 10143, 1860, + 6505, 10143, 4760, + 6505, 10194, + 6505, 10420, + 6505, 10502, + 6505, 10677, 9264, + 6505, 10677, 11202, + 6505, 11036, + 6505, 11097, 8022, + 6505, 11202, + 6505, 11354, + 6505, 11387, 11205, 8774, + 6505, 11649, 9264, + 6505, 11765, 6434, + 6505, 11765, 8022, + 6505, 11765, 10716, + 6505, 12383, 7593, 10642, + 6505, 12383, 10642, + 6505, 12931, 7593, 10642, + 6505, 12931, 10642, + 6505, 12967, 7593, 10642, + 6505, 12967, 9602, + 6505, 12967, 10642, + 6505, 12984, + 6505, 13067, 7593, 10642, + 6505, 13067, 9602, + 6505, 13067, 10420, + 6505, 13067, 10642, + 6509, 8774, + 6516, + 6531, 7803, 5759, 16, + 6531, 7803, 5759, 40, + 6531, 8405, 0, + 6531, 8405, 16, + 6531, 8405, 40, + 6531, 8405, 100, + 6531, 8405, 138, + 6531, 8405, 216, + 6531, 8405, 236, + 6531, 8405, 306, + 6531, 8405, 332, + 6531, 8405, 364, + 6531, 8405, 392, + 6531, 8405, 462, + 6531, 8405, 510, + 6531, 8405, 524, + 6531, 8405, 556, + 6531, 8405, 622, + 6531, 8405, 652, + 6531, 8405, 2030, + 6542, + 6543, 11061, 7382, + 6546, + 6560, + 6569, 4926, + 6597, 8677, 8774, + 6603, 600, + 6606, + 6610, + 6611, 5758, + 6611, 8166, + 6614, + 6616, + 6623, 429, 10308, + 6623, 429, 11068, + 6627, 9051, 10982, + 6627, 9437, 444, + 6627, 9437, 720, + 6643, 8774, + 6675, 6741, 568, + 6689, 2170, + 6689, 2171, 4223, 5836, + 6689, 2540, + 6689, 2541, 4223, 5836, + 6689, 2778, + 6689, 2779, 4223, 5836, + 6689, 4200, + 6689, 4201, 4223, 5836, + 6689, 4214, + 6689, 4215, 4223, 5836, + 6689, 5190, + 6689, 5191, 4223, 5836, + 6689, 6260, + 6689, 6722, + 6689, 6723, 4223, 5836, + 6689, 7508, + 6689, 7509, 4223, 5836, + 6689, 7694, + 6689, 7695, 4223, 5836, + 6695, 4926, + 6716, + 6717, 8272, + 6723, 8737, 9898, + 6723, 9601, 6505, 5830, + 6723, 9601, 10433, 5830, + 6723, 9601, 12141, 6505, 5830, + 6723, 10425, 10385, 6505, 10194, + 6723, 13233, 11187, 9898, + 6725, 8774, + 6731, 2510, + 6731, 2511, 6121, 4849, 6435, 6376, + 6731, 2511, 6121, 7443, 6435, 6376, + 6731, 2511, 6121, 7593, 8057, 6376, + 6731, 2511, 6121, 9546, + 6735, 8774, + 6741, 569, 115, 11472, + 6741, 569, 445, 10452, + 6741, 569, 445, 10574, + 6741, 569, 445, 11098, + 6741, 569, 445, 12472, + 6741, 721, 10411, 568, + 6745, 569, 2681, 4848, + 6745, 569, 2681, 7442, + 6763, 9956, + 6771, 8774, + 6791, 9615, 5012, + 6812, + 6857, 8774, + 6875, 7908, + 6879, 477, 8774, + 6879, 727, 8798, + 6879, 1583, 8774, + 6879, 2171, 4389, 5758, + 6879, 2171, 4389, 5759, 10707, 4212, + 6879, 2217, 8774, + 6879, 2413, 6121, 8759, 8774, + 6879, 2413, 8774, + 6879, 2779, 7307, 5758, + 6879, 2779, 8819, 5758, + 6879, 3775, 8774, + 6879, 4201, 7307, 5758, + 6879, 4215, 7307, 5758, + 6879, 5375, 5758, + 6879, 5388, + 6879, 6197, 5758, + 6879, 6261, 5758, + 6879, 6654, + 6879, 6655, 721, 5388, + 6879, 6655, 721, 7782, + 6879, 6655, 721, 12120, + 6879, 7023, 8774, + 6879, 7111, 5758, + 6879, 7121, 9513, 5758, + 6879, 7398, + 6879, 7399, 721, 5388, + 6879, 7399, 721, 7782, + 6879, 7399, 721, 12120, + 6879, 7593, 8151, 8427, 7569, 8774, + 6879, 7593, 8405, 384, + 6879, 7593, 8405, 416, + 6879, 7593, 8405, 476, + 6879, 7593, 8405, 644, + 6879, 7593, 8405, 888, + 6879, 7593, 8405, 1128, + 6879, 7593, 8405, 1129, 6121, 5388, + 6879, 7593, 8405, 1129, 6121, 5389, 721, 13036, + 6879, 7593, 8405, 1129, 6121, 6654, + 6879, 7593, 8405, 1129, 6121, 6655, 721, 5388, + 6879, 7593, 8405, 1129, 6121, 6655, 721, 5389, 721, 13036, + 6879, 7593, 8405, 1129, 6121, 6655, 721, 7782, + 6879, 7593, 8405, 1129, 6121, 6655, 721, 7783, 721, 13036, + 6879, 7593, 8405, 1129, 6121, 6655, 721, 12120, + 6879, 7593, 8405, 1129, 6121, 6655, 721, 12121, 721, 13036, + 6879, 7593, 8405, 1129, 6121, 6655, 721, 13036, + 6879, 7593, 8405, 1129, 6121, 7398, + 6879, 7593, 8405, 1129, 6121, 7399, 721, 5388, + 6879, 7593, 8405, 1129, 6121, 7399, 721, 5389, 721, 13036, + 6879, 7593, 8405, 1129, 6121, 7399, 721, 7782, + 6879, 7593, 8405, 1129, 6121, 7399, 721, 7783, 721, 13036, + 6879, 7593, 8405, 1129, 6121, 7399, 721, 12120, + 6879, 7593, 8405, 1129, 6121, 7399, 721, 12121, 721, 13036, + 6879, 7593, 8405, 1129, 6121, 7399, 721, 13036, + 6879, 7593, 8405, 1129, 6121, 7724, + 6879, 7593, 8405, 1129, 6121, 7782, + 6879, 7593, 8405, 1129, 6121, 7783, 721, 13036, + 6879, 7593, 8405, 1129, 6121, 12120, + 6879, 7593, 8405, 1129, 6121, 12121, 721, 13036, + 6879, 7593, 8405, 1129, 6121, 13036, + 6879, 7593, 8405, 2216, + 6879, 7593, 8405, 2250, + 6879, 7593, 8405, 2412, + 6879, 7593, 8405, 2413, 6121, 6654, + 6879, 7593, 8405, 2413, 6121, 7398, + 6879, 7593, 8405, 2490, + 6879, 7593, 8405, 2522, + 6879, 7593, 8405, 2658, + 6879, 7593, 8405, 3774, + 6879, 7593, 8405, 4408, + 6879, 7593, 8405, 4614, + 6879, 7593, 8405, 4615, 6121, 5388, + 6879, 7593, 8405, 4615, 6121, 6654, + 6879, 7593, 8405, 4615, 6121, 6655, 721, 5388, + 6879, 7593, 8405, 4615, 6121, 6655, 721, 7782, + 6879, 7593, 8405, 4615, 6121, 6655, 721, 12120, + 6879, 7593, 8405, 4615, 6121, 7398, + 6879, 7593, 8405, 4615, 6121, 7399, 721, 5388, + 6879, 7593, 8405, 4615, 6121, 7399, 721, 7782, + 6879, 7593, 8405, 4615, 6121, 7399, 721, 12120, + 6879, 7593, 8405, 4615, 6121, 7724, + 6879, 7593, 8405, 4615, 6121, 7782, + 6879, 7593, 8405, 4615, 6121, 8432, + 6879, 7593, 8405, 4615, 6121, 8924, + 6879, 7593, 8405, 4615, 6121, 10808, + 6879, 7593, 8405, 4615, 6121, 10809, 721, 5388, + 6879, 7593, 8405, 4615, 6121, 10809, 721, 7724, + 6879, 7593, 8405, 4615, 6121, 10809, 721, 7782, + 6879, 7593, 8405, 4615, 6121, 10809, 721, 12120, + 6879, 7593, 8405, 4615, 6121, 12120, + 6879, 7593, 8405, 6262, + 6879, 7593, 8405, 6406, + 6879, 7593, 8405, 6407, 6121, 5388, + 6879, 7593, 8405, 6407, 6121, 5389, 721, 13036, + 6879, 7593, 8405, 6407, 6121, 6654, + 6879, 7593, 8405, 6407, 6121, 6655, 721, 5388, + 6879, 7593, 8405, 6407, 6121, 6655, 721, 5389, 721, 13036, + 6879, 7593, 8405, 6407, 6121, 6655, 721, 7782, + 6879, 7593, 8405, 6407, 6121, 6655, 721, 7783, 721, 13036, + 6879, 7593, 8405, 6407, 6121, 6655, 721, 12120, + 6879, 7593, 8405, 6407, 6121, 6655, 721, 12121, 721, 13036, + 6879, 7593, 8405, 6407, 6121, 6655, 721, 13036, + 6879, 7593, 8405, 6407, 6121, 7398, + 6879, 7593, 8405, 6407, 6121, 7399, 721, 5388, + 6879, 7593, 8405, 6407, 6121, 7399, 721, 5389, 721, 13036, + 6879, 7593, 8405, 6407, 6121, 7399, 721, 7782, + 6879, 7593, 8405, 6407, 6121, 7399, 721, 7783, 721, 13036, + 6879, 7593, 8405, 6407, 6121, 7399, 721, 12120, + 6879, 7593, 8405, 6407, 6121, 7399, 721, 12121, 721, 13036, + 6879, 7593, 8405, 6407, 6121, 7399, 721, 13036, + 6879, 7593, 8405, 6407, 6121, 7724, + 6879, 7593, 8405, 6407, 6121, 7782, + 6879, 7593, 8405, 6407, 6121, 7783, 721, 13036, + 6879, 7593, 8405, 6407, 6121, 8432, + 6879, 7593, 8405, 6407, 6121, 8924, + 6879, 7593, 8405, 6407, 6121, 12120, + 6879, 7593, 8405, 6407, 6121, 12121, 721, 13036, + 6879, 7593, 8405, 6407, 6121, 13036, + 6879, 7593, 8405, 6674, + 6879, 7593, 8405, 6789, 7568, + 6879, 7593, 8405, 6824, + 6879, 7593, 8405, 7022, + 6879, 7593, 8405, 7062, + 6879, 7593, 8405, 7080, + 6879, 7593, 8405, 7316, + 6879, 7593, 8405, 7317, 6121, 5388, + 6879, 7593, 8405, 7317, 6121, 5389, 721, 13036, + 6879, 7593, 8405, 7317, 6121, 6654, + 6879, 7593, 8405, 7317, 6121, 6655, 721, 5388, + 6879, 7593, 8405, 7317, 6121, 6655, 721, 5389, 721, 13036, + 6879, 7593, 8405, 7317, 6121, 6655, 721, 7782, + 6879, 7593, 8405, 7317, 6121, 6655, 721, 7783, 721, 13036, + 6879, 7593, 8405, 7317, 6121, 6655, 721, 12120, + 6879, 7593, 8405, 7317, 6121, 6655, 721, 12121, 721, 13036, + 6879, 7593, 8405, 7317, 6121, 6655, 721, 13036, + 6879, 7593, 8405, 7317, 6121, 7398, + 6879, 7593, 8405, 7317, 6121, 7399, 721, 5388, + 6879, 7593, 8405, 7317, 6121, 7399, 721, 5389, 721, 13036, + 6879, 7593, 8405, 7317, 6121, 7399, 721, 7782, + 6879, 7593, 8405, 7317, 6121, 7399, 721, 7783, 721, 13036, + 6879, 7593, 8405, 7317, 6121, 7399, 721, 12120, + 6879, 7593, 8405, 7317, 6121, 7399, 721, 12121, 721, 13036, + 6879, 7593, 8405, 7317, 6121, 7399, 721, 13036, + 6879, 7593, 8405, 7317, 6121, 7724, + 6879, 7593, 8405, 7317, 6121, 7782, + 6879, 7593, 8405, 7317, 6121, 7783, 721, 13036, + 6879, 7593, 8405, 7317, 6121, 12120, + 6879, 7593, 8405, 7317, 6121, 12121, 721, 13036, + 6879, 7593, 8405, 7317, 6121, 13036, + 6879, 7593, 8405, 7484, + 6879, 7593, 8405, 7568, + 6879, 7593, 8405, 7682, + 6879, 7593, 8405, 8748, + 6879, 7593, 8405, 9007, 7062, + 6879, 7593, 8405, 9007, 7484, + 6879, 7593, 8405, 9162, + 6879, 7593, 8405, 9270, + 6879, 7593, 8405, 9271, 6121, 5388, + 6879, 7593, 8405, 9271, 6121, 6654, + 6879, 7593, 8405, 9271, 6121, 6655, 721, 5388, + 6879, 7593, 8405, 9271, 6121, 6655, 721, 7782, + 6879, 7593, 8405, 9271, 6121, 7398, + 6879, 7593, 8405, 9271, 6121, 7399, 721, 5388, + 6879, 7593, 8405, 9271, 6121, 7399, 721, 7782, + 6879, 7593, 8405, 9271, 6121, 7724, + 6879, 7593, 8405, 9271, 6121, 7782, + 6879, 7593, 8405, 9530, + 6879, 7593, 8405, 9531, 6121, 5388, + 6879, 7593, 8405, 9531, 6121, 6654, + 6879, 7593, 8405, 9531, 6121, 6655, 721, 5388, + 6879, 7593, 8405, 9531, 6121, 6655, 721, 7782, + 6879, 7593, 8405, 9531, 6121, 7398, + 6879, 7593, 8405, 9531, 6121, 7399, 721, 5388, + 6879, 7593, 8405, 9531, 6121, 7399, 721, 7782, + 6879, 7593, 8405, 9531, 6121, 7724, + 6879, 7593, 8405, 9531, 6121, 7782, + 6879, 7593, 8405, 9808, + 6879, 7593, 8405, 9809, 6121, 5388, + 6879, 7593, 8405, 9809, 6121, 6654, + 6879, 7593, 8405, 9809, 6121, 6655, 721, 5388, + 6879, 7593, 8405, 9809, 6121, 6655, 721, 7782, + 6879, 7593, 8405, 9809, 6121, 6655, 721, 12120, + 6879, 7593, 8405, 9809, 6121, 7398, + 6879, 7593, 8405, 9809, 6121, 7399, 721, 5388, + 6879, 7593, 8405, 9809, 6121, 7399, 721, 7782, + 6879, 7593, 8405, 9809, 6121, 7399, 721, 12120, + 6879, 7593, 8405, 9809, 6121, 7724, + 6879, 7593, 8405, 9809, 6121, 7782, + 6879, 7593, 8405, 9809, 6121, 8432, + 6879, 7593, 8405, 9809, 6121, 8924, + 6879, 7593, 8405, 9809, 6121, 10808, + 6879, 7593, 8405, 9809, 6121, 10809, 721, 5388, + 6879, 7593, 8405, 9809, 6121, 10809, 721, 7724, + 6879, 7593, 8405, 9809, 6121, 10809, 721, 7782, + 6879, 7593, 8405, 9809, 6121, 10809, 721, 12120, + 6879, 7593, 8405, 9809, 6121, 12120, + 6879, 7593, 8405, 11709, 9162, + 6879, 7593, 10489, 8151, 8427, 7569, 8774, + 6879, 7593, 10489, 8427, 7569, 8774, + 6879, 7683, 8774, + 6879, 7695, 7307, 5758, + 6879, 7695, 10467, 5758, + 6879, 7724, + 6879, 7782, + 6879, 7801, 10365, 10586, + 6879, 7801, 10365, 10588, + 6879, 7801, 10365, 10590, + 6879, 7801, 10365, 10592, + 6879, 7801, 10365, 10594, + 6879, 7801, 10365, 10596, + 6879, 7801, 10365, 10598, + 6879, 7801, 10365, 10600, + 6879, 7801, 10365, 10602, + 6879, 7801, 10365, 11270, + 6879, 7801, 10365, 11272, + 6879, 7801, 10365, 11274, + 6879, 7801, 10365, 11276, + 6879, 7801, 10365, 11278, + 6879, 7801, 10365, 11280, + 6879, 7801, 10365, 11282, + 6879, 7801, 10365, 11284, + 6879, 7801, 10365, 11286, + 6879, 7801, 10365, 11288, + 6879, 7801, 10365, 11290, + 6879, 7801, 10365, 11292, + 6879, 7801, 10365, 11294, + 6879, 7801, 10365, 11296, + 6879, 7801, 10365, 11298, + 6879, 7801, 10365, 11334, + 6879, 7801, 10365, 11336, + 6879, 7801, 10365, 11338, + 6879, 7801, 10365, 11340, + 6879, 7801, 10365, 11342, + 6879, 7941, 5758, + 6879, 7949, 5758, + 6879, 8269, 5758, + 6879, 8405, 3086, + 6879, 8405, 7062, + 6879, 8405, 7484, + 6879, 8405, 7593, 9063, 476, + 6879, 8405, 7593, 9063, 2250, + 6879, 8405, 7593, 9063, 2412, + 6879, 8405, 7593, 9063, 6824, + 6879, 8405, 7593, 9063, 7080, + 6879, 8405, 8748, + 6879, 8405, 9007, 7062, + 6879, 8405, 9162, + 6879, 8427, 7569, 8774, + 6879, 8427, 9271, 8774, + 6879, 8555, 5758, + 6879, 8787, 5758, + 6879, 8941, 5758, + 6879, 9063, 1583, 8774, + 6879, 9063, 7683, 8774, + 6879, 9063, 8151, 8427, 7569, 8774, + 6879, 9063, 8405, 384, + 6879, 9063, 8405, 416, + 6879, 9063, 8405, 476, + 6879, 9063, 8405, 644, + 6879, 9063, 8405, 888, + 6879, 9063, 8405, 1128, + 6879, 9063, 8405, 1129, 6121, 5388, + 6879, 9063, 8405, 1129, 6121, 6654, + 6879, 9063, 8405, 1129, 6121, 6655, 721, 5388, + 6879, 9063, 8405, 1129, 6121, 6655, 721, 5389, 721, 13064, + 6879, 9063, 8405, 1129, 6121, 6655, 721, 7782, + 6879, 9063, 8405, 1129, 6121, 6655, 721, 7783, 721, 13064, + 6879, 9063, 8405, 1129, 6121, 6655, 721, 12120, + 6879, 9063, 8405, 1129, 6121, 6655, 721, 12121, 721, 13064, + 6879, 9063, 8405, 1129, 6121, 6655, 721, 13064, + 6879, 9063, 8405, 1129, 6121, 7398, + 6879, 9063, 8405, 1129, 6121, 7399, 721, 5388, + 6879, 9063, 8405, 1129, 6121, 7399, 721, 5389, 721, 13064, + 6879, 9063, 8405, 1129, 6121, 7399, 721, 7782, + 6879, 9063, 8405, 1129, 6121, 7399, 721, 7783, 721, 13064, + 6879, 9063, 8405, 1129, 6121, 7399, 721, 12120, + 6879, 9063, 8405, 1129, 6121, 7399, 721, 12121, 721, 13064, + 6879, 9063, 8405, 1129, 6121, 7399, 721, 13064, + 6879, 9063, 8405, 1129, 6121, 7724, + 6879, 9063, 8405, 1129, 6121, 7782, + 6879, 9063, 8405, 1129, 6121, 13064, + 6879, 9063, 8405, 2216, + 6879, 9063, 8405, 2250, + 6879, 9063, 8405, 2412, + 6879, 9063, 8405, 2413, 6121, 6654, + 6879, 9063, 8405, 2490, + 6879, 9063, 8405, 2522, + 6879, 9063, 8405, 2658, + 6879, 9063, 8405, 3774, + 6879, 9063, 8405, 4408, + 6879, 9063, 8405, 4614, + 6879, 9063, 8405, 4615, 6121, 5388, + 6879, 9063, 8405, 4615, 6121, 6654, + 6879, 9063, 8405, 4615, 6121, 6655, 721, 5388, + 6879, 9063, 8405, 4615, 6121, 6655, 721, 7782, + 6879, 9063, 8405, 4615, 6121, 6655, 721, 12120, + 6879, 9063, 8405, 4615, 6121, 7398, + 6879, 9063, 8405, 4615, 6121, 7399, 721, 5388, + 6879, 9063, 8405, 4615, 6121, 7399, 721, 7782, + 6879, 9063, 8405, 4615, 6121, 7399, 721, 12120, + 6879, 9063, 8405, 4615, 6121, 7724, + 6879, 9063, 8405, 4615, 6121, 7782, + 6879, 9063, 8405, 4615, 6121, 8432, + 6879, 9063, 8405, 4615, 6121, 8924, + 6879, 9063, 8405, 4615, 6121, 10808, + 6879, 9063, 8405, 6262, + 6879, 9063, 8405, 6406, + 6879, 9063, 8405, 6407, 6121, 5388, + 6879, 9063, 8405, 6407, 6121, 6654, + 6879, 9063, 8405, 6407, 6121, 6655, 721, 5388, + 6879, 9063, 8405, 6407, 6121, 6655, 721, 5389, 721, 13064, + 6879, 9063, 8405, 6407, 6121, 6655, 721, 7782, + 6879, 9063, 8405, 6407, 6121, 6655, 721, 7783, 721, 13064, + 6879, 9063, 8405, 6407, 6121, 6655, 721, 12120, + 6879, 9063, 8405, 6407, 6121, 6655, 721, 12121, 721, 13064, + 6879, 9063, 8405, 6407, 6121, 6655, 721, 13064, + 6879, 9063, 8405, 6407, 6121, 7398, + 6879, 9063, 8405, 6407, 6121, 7399, 721, 5388, + 6879, 9063, 8405, 6407, 6121, 7399, 721, 5389, 721, 13064, + 6879, 9063, 8405, 6407, 6121, 7399, 721, 7782, + 6879, 9063, 8405, 6407, 6121, 7399, 721, 7783, 721, 13064, + 6879, 9063, 8405, 6407, 6121, 7399, 721, 12120, + 6879, 9063, 8405, 6407, 6121, 7399, 721, 12121, 721, 13064, + 6879, 9063, 8405, 6407, 6121, 7399, 721, 13064, + 6879, 9063, 8405, 6407, 6121, 7724, + 6879, 9063, 8405, 6407, 6121, 7782, + 6879, 9063, 8405, 6407, 6121, 8432, + 6879, 9063, 8405, 6407, 6121, 8924, + 6879, 9063, 8405, 6407, 6121, 13064, + 6879, 9063, 8405, 6674, + 6879, 9063, 8405, 6824, + 6879, 9063, 8405, 7022, + 6879, 9063, 8405, 7080, + 6879, 9063, 8405, 7316, + 6879, 9063, 8405, 7317, 6121, 5388, + 6879, 9063, 8405, 7317, 6121, 6654, + 6879, 9063, 8405, 7317, 6121, 6655, 721, 5388, + 6879, 9063, 8405, 7317, 6121, 6655, 721, 5389, 721, 13064, + 6879, 9063, 8405, 7317, 6121, 6655, 721, 7782, + 6879, 9063, 8405, 7317, 6121, 6655, 721, 7783, 721, 13064, + 6879, 9063, 8405, 7317, 6121, 6655, 721, 12120, + 6879, 9063, 8405, 7317, 6121, 6655, 721, 12121, 721, 13064, + 6879, 9063, 8405, 7317, 6121, 6655, 721, 13064, + 6879, 9063, 8405, 7317, 6121, 7398, + 6879, 9063, 8405, 7317, 6121, 7399, 721, 5388, + 6879, 9063, 8405, 7317, 6121, 7399, 721, 5389, 721, 13064, + 6879, 9063, 8405, 7317, 6121, 7399, 721, 7782, + 6879, 9063, 8405, 7317, 6121, 7399, 721, 7783, 721, 13064, + 6879, 9063, 8405, 7317, 6121, 7399, 721, 12120, + 6879, 9063, 8405, 7317, 6121, 7399, 721, 12121, 721, 13064, + 6879, 9063, 8405, 7317, 6121, 7399, 721, 13064, + 6879, 9063, 8405, 7317, 6121, 7724, + 6879, 9063, 8405, 7317, 6121, 7782, + 6879, 9063, 8405, 7317, 6121, 13064, + 6879, 9063, 8405, 7568, + 6879, 9063, 8405, 7682, + 6879, 9063, 8405, 9007, 7484, + 6879, 9063, 8405, 9270, + 6879, 9063, 8405, 9271, 6121, 5388, + 6879, 9063, 8405, 9271, 6121, 6654, + 6879, 9063, 8405, 9271, 6121, 6655, 721, 5388, + 6879, 9063, 8405, 9271, 6121, 6655, 721, 7782, + 6879, 9063, 8405, 9271, 6121, 7398, + 6879, 9063, 8405, 9271, 6121, 7399, 721, 5388, + 6879, 9063, 8405, 9271, 6121, 7399, 721, 7782, + 6879, 9063, 8405, 9271, 6121, 7724, + 6879, 9063, 8405, 9271, 6121, 7782, + 6879, 9063, 8405, 9530, + 6879, 9063, 8405, 9531, 6121, 5388, + 6879, 9063, 8405, 9531, 6121, 6654, + 6879, 9063, 8405, 9531, 6121, 6655, 721, 5388, + 6879, 9063, 8405, 9531, 6121, 6655, 721, 7782, + 6879, 9063, 8405, 9531, 6121, 7398, + 6879, 9063, 8405, 9531, 6121, 7399, 721, 5388, + 6879, 9063, 8405, 9531, 6121, 7399, 721, 7782, + 6879, 9063, 8405, 9531, 6121, 7724, + 6879, 9063, 8405, 9531, 6121, 7782, + 6879, 9063, 8405, 9808, + 6879, 9063, 8405, 9809, 6121, 5388, + 6879, 9063, 8405, 9809, 6121, 6654, + 6879, 9063, 8405, 9809, 6121, 6655, 721, 5388, + 6879, 9063, 8405, 9809, 6121, 6655, 721, 7782, + 6879, 9063, 8405, 9809, 6121, 6655, 721, 12120, + 6879, 9063, 8405, 9809, 6121, 7724, + 6879, 9063, 8405, 9809, 6121, 7782, + 6879, 9063, 8405, 9809, 6121, 8432, + 6879, 9063, 8405, 9809, 6121, 8924, + 6879, 9063, 8405, 9809, 6121, 10808, + 6879, 9063, 8405, 11709, 9162, + 6879, 9063, 8427, 7569, 8774, + 6879, 9063, 10489, 8151, 8427, 7569, 8774, + 6879, 9063, 10489, 8427, 7569, 8774, + 6879, 9245, 5758, + 6879, 9412, + 6879, 9419, 3717, 5758, + 6879, 9483, 8396, + 6879, 9513, 5758, + 6879, 9809, 6121, 4531, 8774, + 6879, 9809, 6121, 6379, 721, 4531, 8774, + 6879, 9809, 6121, 10805, 721, 4531, 8774, + 6879, 10331, 5758, + 6879, 10469, 4926, + 6879, 10489, 8427, 9271, 8774, + 6879, 10651, 3717, 5758, + 6879, 10809, 721, 5388, + 6879, 10809, 721, 7782, + 6879, 10809, 721, 12120, + 6879, 10809, 7724, + 6879, 11261, 7593, 8405, 888, + 6879, 11261, 7593, 8405, 2216, + 6879, 11261, 7593, 8405, 2412, + 6879, 11261, 7593, 8405, 3774, + 6879, 11261, 7593, 8405, 6824, + 6879, 11405, 6443, 2171, 4388, + 6879, 11405, 6443, 2171, 9244, + 6879, 11405, 6443, 2171, 9345, 9736, + 6879, 11405, 6443, 2171, 9345, 9764, + 6879, 11405, 6443, 2171, 9614, + 6879, 11405, 6443, 2171, 10625, 9736, + 6879, 11405, 6443, 2171, 10625, 9764, + 6879, 11405, 6443, 2671, 5010, + 6879, 11405, 6443, 2671, 9736, + 6879, 11405, 6443, 2671, 9764, + 6879, 11405, 6443, 2671, 10625, 9736, + 6879, 11405, 6443, 4200, + 6879, 11405, 6443, 4201, 9344, + 6879, 11405, 6443, 4201, 9345, 9736, + 6879, 11405, 6443, 4201, 9345, 9764, + 6879, 11405, 6443, 4201, 9736, + 6879, 11405, 6443, 4201, 9764, + 6879, 11405, 6443, 4201, 10624, + 6879, 11405, 6443, 4201, 10625, 9764, + 6879, 11405, 6443, 6784, + 6879, 11405, 6443, 6785, 9736, + 6879, 11405, 6443, 6785, 9764, + 6879, 11405, 6443, 6785, 10624, + 6879, 11405, 6443, 6785, 10625, 9736, + 6879, 11405, 8505, 4201, 9344, + 6879, 11405, 9153, 4201, 5010, + 6879, 11405, 9337, 2171, 10436, + 6879, 11405, 9975, 2779, 10138, + 6879, 11405, 10549, 6785, 5010, + 6879, 11405, 10621, 2170, + 6879, 11405, 10621, 2171, 9344, + 6879, 11405, 10621, 2171, 10624, + 6879, 11405, 10621, 2670, + 6879, 11405, 10621, 2778, + 6879, 11405, 10621, 4201, 9344, + 6879, 11405, 10621, 4201, 10624, + 6879, 11405, 10621, 6784, + 6879, 11405, 10621, 7695, 9344, + 6879, 11405, 10621, 8820, + 6879, 11405, 10755, 4201, 9344, + 6879, 11405, 11117, 2670, + 6879, 11405, 11617, 2778, + 6879, 11405, 11617, 2779, 10138, + 6879, 11405, 11617, 4201, 9344, + 6879, 11405, 11645, 2170, + 6879, 11405, 11645, 2670, + 6879, 11405, 11645, 6784, + 6879, 11405, 11865, 2670, + 6879, 11405, 11865, 2671, 10707, 4212, + 6879, 11405, 11865, 4200, + 6879, 11405, 11865, 4201, 9344, + 6879, 11405, 11865, 6784, + 6879, 11405, 11865, 6785, 10707, 4212, + 6879, 12120, + 6879, 12489, 10365, 10586, + 6879, 12489, 10365, 10588, + 6879, 12489, 10365, 10592, + 6879, 12489, 10365, 10594, + 6879, 12489, 10365, 10598, + 6879, 12489, 10365, 10600, + 6879, 12489, 10365, 11272, + 6879, 12489, 10365, 11274, + 6879, 12489, 10365, 11276, + 6879, 12489, 10365, 11278, + 6879, 12489, 10365, 11284, + 6879, 12489, 10365, 11286, + 6879, 12489, 10365, 11288, + 6879, 12489, 10365, 11296, + 6879, 12489, 10365, 11298, + 6879, 12489, 10365, 11300, + 6879, 12489, 10365, 11302, + 6879, 12489, 10365, 11304, + 6879, 12489, 10365, 11306, + 6879, 12489, 10365, 11308, + 6879, 12489, 10365, 11310, + 6879, 12489, 10365, 11312, + 6879, 12489, 10365, 11314, + 6879, 12489, 10365, 11316, + 6879, 12489, 10365, 11318, + 6879, 12489, 10365, 11320, + 6879, 12489, 10365, 11322, + 6879, 12489, 10365, 11324, + 6879, 12489, 10365, 11326, + 6879, 12489, 10365, 11328, + 6879, 12489, 10365, 11330, + 6879, 12489, 10365, 11332, + 6879, 12489, 10365, 11334, + 6879, 12489, 10365, 11336, + 6879, 12489, 10365, 11338, + 6879, 12489, 10365, 11340, + 6879, 12489, 10365, 11342, + 6879, 13036, + 6879, 13064, + 6909, 4215, 13047, 9898, + 6909, 5385, 8037, 6622, + 6909, 6505, 6906, + 6909, 6505, 8083, 9811, 721, 11765, 6434, + 6909, 6505, 8083, 10959, 721, 11765, 6434, + 6909, 6569, 4926, + 6909, 6723, 9601, 12141, 6505, 5830, + 6909, 6723, 13233, 11187, 9898, + 6909, 6879, 6622, + 6909, 6907, 12017, 4927, 10380, + 6909, 7121, 13069, 7821, 11765, 6434, + 6909, 7271, 4153, 6434, + 6909, 7607, 4153, 6434, + 6909, 7773, 13069, 7821, 11765, 6434, + 6909, 7971, 46, + 6909, 8097, 13235, 11765, 6434, + 6909, 8153, 6617, 11195, 4927, 10380, + 6909, 8153, 8869, 6617, 11195, 4927, 10380, + 6909, 8717, 6617, 11195, 4927, 10380, + 6909, 8717, 8869, 6617, 11195, 4927, 10380, + 6909, 9085, 11242, + 6909, 9722, + 6909, 9898, + 6909, 10385, 6505, 5830, + 6909, 10677, 760, + 6909, 11765, 6434, + 6909, 12017, 4927, 10380, + 6909, 12387, 11765, 6434, + 6909, 12539, 11765, 6434, + 6909, 12895, 11765, 6434, + 6909, 12967, 6409, 9051, 10380, + 6909, 12967, 6409, 11195, 4927, 10380, + 6909, 13061, 46, + 6909, 13067, 6409, 9051, 10380, + 6909, 13067, 6409, 11195, 4927, 10380, + 6909, 13191, 7271, 4153, 6434, + 6909, 13191, 7607, 4153, 6434, + 6909, 13191, 11765, 6434, + 6909, 13199, 6505, 11765, 6434, + 6909, 13233, 9898, + 6909, 13233, 10433, 9898, + 6909, 13235, 11765, 6434, + 6909, 13351, 11765, 6434, + 6954, + 6989, 428, + 6989, 429, 445, 12903, 6741, 568, + 7031, 341, 5759, 940, + 7031, 341, 5759, 5740, + 7031, 341, 5965, 6540, + 7031, 341, 5965, 6541, 8596, + 7031, 341, 5965, 8596, + 7031, 341, 6689, 2170, + 7031, 341, 6689, 2540, + 7031, 341, 6689, 2778, + 7031, 341, 6689, 4200, + 7031, 341, 6689, 4214, + 7031, 341, 6689, 5190, + 7031, 341, 6689, 6260, + 7031, 341, 6689, 6722, + 7031, 341, 6689, 7508, + 7031, 341, 6689, 7694, + 7031, 341, 7803, 8, + 7031, 341, 7803, 28, + 7031, 341, 7803, 40, + 7031, 341, 7803, 162, + 7031, 341, 7803, 590, + 7031, 341, 8405, 0, + 7031, 341, 8405, 16, + 7031, 341, 8405, 100, + 7031, 341, 8405, 116, + 7031, 341, 8405, 138, + 7031, 341, 8405, 216, + 7031, 341, 8405, 236, + 7031, 341, 8405, 306, + 7031, 341, 8405, 332, + 7031, 341, 8405, 364, + 7031, 341, 8405, 392, + 7031, 341, 8405, 426, + 7031, 341, 8405, 440, + 7031, 341, 8405, 462, + 7031, 341, 8405, 510, + 7031, 341, 8405, 524, + 7031, 341, 8405, 556, + 7031, 341, 8405, 610, + 7031, 341, 8405, 622, + 7031, 341, 8405, 652, + 7031, 341, 8405, 670, + 7031, 341, 8405, 1434, + 7031, 341, 8405, 1612, + 7031, 341, 8405, 2030, + 7031, 341, 8405, 2126, + 7031, 341, 8405, 2212, + 7031, 341, 8405, 2516, + 7031, 341, 8405, 2678, + 7049, 5759, 1763, 2722, + 7049, 5759, 4740, + 7049, 5759, 6388, + 7049, 5759, 6608, + 7049, 5759, 7450, + 7049, 5759, 7976, + 7049, 5759, 7992, + 7049, 5759, 8025, 2227, 4794, + 7049, 5759, 8583, 5014, + 7049, 5759, 8663, 8666, + 7049, 5759, 8918, + 7049, 5759, 9382, + 7049, 5759, 9408, + 7049, 5759, 9506, + 7049, 5759, 9624, + 7049, 5759, 9794, + 7049, 5759, 9902, + 7049, 5759, 11438, + 7049, 5759, 11440, + 7049, 5759, 12088, + 7049, 5759, 12366, + 7049, 5759, 12906, + 7049, 5759, 13038, + 7049, 6689, 2170, + 7049, 6689, 2540, + 7049, 6689, 2778, + 7049, 6689, 4200, + 7049, 6689, 4214, + 7049, 6689, 5190, + 7049, 6689, 6260, + 7049, 6689, 6722, + 7049, 6689, 7508, + 7049, 6689, 7694, + 7049, 7803, 5759, 8, + 7049, 7803, 5759, 16, + 7049, 7803, 5759, 40, + 7049, 7803, 5759, 48, + 7049, 7803, 5759, 58, + 7049, 7803, 5759, 66, + 7049, 7803, 5759, 72, + 7049, 7803, 5759, 92, + 7049, 7803, 5759, 258, + 7049, 7803, 5759, 266, + 7049, 7803, 5759, 426, + 7049, 7803, 5759, 440, + 7049, 7803, 5759, 582, + 7049, 7803, 5759, 606, + 7049, 7803, 5759, 652, + 7049, 7803, 5759, 668, + 7049, 7803, 10259, 58, + 7049, 7803, 10259, 86, + 7049, 8405, 100, + 7049, 8405, 116, + 7049, 8405, 130, + 7049, 8405, 138, + 7049, 8405, 150, + 7049, 8405, 236, + 7049, 8405, 306, + 7049, 8405, 322, + 7049, 8405, 332, + 7049, 8405, 350, + 7049, 8405, 380, + 7049, 8405, 412, + 7049, 8405, 480, + 7049, 8405, 496, + 7049, 8405, 516, + 7049, 8405, 524, + 7049, 8405, 556, + 7049, 8405, 568, + 7049, 8405, 616, + 7049, 8405, 660, + 7049, 8405, 884, + 7049, 8405, 890, + 7049, 8405, 1612, + 7049, 8405, 1618, + 7049, 8405, 2038, + 7049, 8405, 2080, + 7049, 8405, 2134, + 7049, 8405, 2212, + 7049, 8405, 2218, + 7049, 8405, 2516, + 7049, 8405, 2572, + 7049, 8405, 2678, + 7049, 8405, 2684, + 7049, 8405, 5994, + 7049, 8405, 6000, + 7049, 8775, 783, 2426, + 7049, 8775, 783, 4768, + 7049, 8775, 965, 2426, + 7049, 8775, 965, 4768, + 7049, 8775, 1763, 6441, 782, + 7049, 8775, 1763, 6441, 2226, + 7049, 8775, 1763, 6441, 2552, + 7049, 8775, 1763, 6441, 3814, + 7049, 8775, 1763, 6441, 5026, + 7049, 8775, 1763, 6441, 5450, + 7049, 8775, 1763, 6441, 10446, + 7049, 8775, 1763, 6441, 10448, + 7049, 8775, 1763, 6441, 11178, + 7049, 8775, 1763, 6441, 11180, + 7049, 8775, 2227, 2426, + 7049, 8775, 2227, 4768, + 7049, 8775, 3815, 2426, + 7049, 8775, 3815, 4768, + 7049, 8775, 5027, 2426, + 7049, 8775, 5027, 4768, + 7049, 8775, 5451, 2426, + 7049, 8775, 5451, 4768, + 7049, 8775, 9143, 2426, + 7049, 8775, 9143, 4768, + 7049, 8775, 9145, 2426, + 7049, 8775, 9145, 4768, + 7049, 8775, 9981, 2426, + 7049, 8775, 9981, 4768, + 7049, 8775, 9983, 2426, + 7049, 8775, 9983, 4768, + 7049, 8775, 9985, 2426, + 7049, 8775, 9985, 4768, + 7049, 8775, 10447, 2426, + 7049, 8775, 10447, 4768, + 7049, 8775, 10449, 2426, + 7049, 8775, 10449, 4768, + 7049, 8775, 11179, 2426, + 7049, 8775, 11179, 4768, + 7049, 8775, 11181, 2426, + 7049, 8775, 11181, 4768, + 7049, 8775, 11380, + 7049, 8775, 11716, + 7049, 9971, 8775, 5548, + 7049, 12053, 7803, 360, + 7049, 12053, 7803, 498, + 7049, 12053, 7803, 500, + 7049, 12053, 7803, 506, + 7049, 12053, 7803, 522, + 7049, 12053, 7803, 1850, + 7049, 12053, 7803, 2282, + 7049, 12053, 7803, 2286, + 7049, 12053, 7803, 2288, + 7049, 12053, 7803, 2292, + 7049, 12053, 7803, 2308, + 7049, 12053, 7803, 2321, 6031, 2170, + 7049, 12053, 7803, 2321, 6031, 2778, + 7049, 12053, 7803, 2334, + 7049, 12053, 7803, 2344, + 7049, 12053, 7803, 2478, + 7049, 12053, 7803, 5506, + 7085, 601, 5876, + 7085, 4117, 5876, + 7085, 4849, 10643, 10374, + 7085, 8056, + 7085, 8849, 10677, 761, 10374, + 7089, 6622, + 7089, 7593, 8405, 0, + 7089, 7593, 8405, 1, 6121, 1045, 6376, + 7089, 7593, 8405, 1, 6121, 1045, 6377, 721, 8432, + 7089, 7593, 8405, 1, 6121, 1045, 6490, + 7089, 7593, 8405, 1, 6121, 4531, 6376, + 7089, 7593, 8405, 1, 6121, 5551, 6376, + 7089, 7593, 8405, 1, 6121, 5551, 6377, 721, 6378, + 7089, 7593, 8405, 1, 6121, 5551, 6490, + 7089, 7593, 8405, 1, 6121, 6378, + 7089, 7593, 8405, 1, 6121, 6516, + 7089, 7593, 8405, 1, 6121, 6517, 721, 1045, 6490, + 7089, 7593, 8405, 1, 6121, 6517, 721, 4531, 6376, + 7089, 7593, 8405, 1, 6121, 6517, 721, 6378, + 7089, 7593, 8405, 1, 6121, 6517, 721, 6874, + 7089, 7593, 8405, 1, 6121, 6517, 721, 7708, + 7089, 7593, 8405, 1, 6121, 6546, + 7089, 7593, 8405, 1, 6121, 6874, + 7089, 7593, 8405, 1, 6121, 7443, 4389, 5550, + 7089, 7593, 8405, 1, 6121, 7708, + 7089, 7593, 8405, 1, 6121, 8153, 6874, + 7089, 7593, 8405, 1, 6121, 8432, + 7089, 7593, 8405, 1, 6121, 8534, + 7089, 7593, 8405, 1, 6121, 8758, + 7089, 7593, 8405, 1, 6121, 10267, 6516, + 7089, 7593, 8405, 1, 6121, 10804, + 7089, 7593, 8405, 1, 6121, 10805, 721, 8432, + 7089, 7593, 8405, 1, 6121, 11215, 4530, + 7089, 7593, 8405, 1, 6121, 11448, + 7089, 7593, 8405, 1, 6121, 11449, 721, 1045, 6490, + 7089, 7593, 8405, 1, 6121, 11449, 721, 4531, 6376, + 7089, 7593, 8405, 1, 6121, 11449, 721, 6378, + 7089, 7593, 8405, 1, 6121, 11449, 721, 6874, + 7089, 7593, 8405, 1, 6121, 11449, 721, 7708, + 7089, 7593, 8405, 2, + 7089, 7593, 8405, 3, 6121, 1045, 6376, + 7089, 7593, 8405, 3, 6121, 1045, 6490, + 7089, 7593, 8405, 3, 6121, 4530, + 7089, 7593, 8405, 3, 6121, 4877, 6490, + 7089, 7593, 8405, 3, 6121, 8473, 7708, + 7089, 7593, 8405, 3, 6121, 8758, + 7089, 7593, 8405, 3, 6121, 8846, + 7089, 7593, 8405, 3, 6121, 9553, 4530, + 7089, 7593, 8405, 4, + 7089, 7593, 8405, 5, 6121, 1045, 6376, + 7089, 7593, 8405, 5, 6121, 3966, + 7089, 7593, 8405, 5, 6121, 4530, + 7089, 7593, 8405, 5, 6121, 6378, + 7089, 7593, 8405, 5, 6121, 6546, + 7089, 7593, 8405, 5, 6121, 8758, + 7089, 7593, 8405, 5, 6121, 9072, + 7089, 7593, 8405, 5, 6121, 9073, 721, 6378, + 7089, 7593, 8405, 5, 6121, 11448, + 7089, 7593, 8405, 6, + 7089, 7593, 8405, 7, 6121, 1045, 6376, + 7089, 7593, 8405, 7, 6121, 1045, 6490, + 7089, 7593, 8405, 7, 6121, 3966, + 7089, 7593, 8405, 7, 6121, 4530, + 7089, 7593, 8405, 7, 6121, 4531, 721, 5878, + 7089, 7593, 8405, 7, 6121, 4877, 6490, + 7089, 7593, 8405, 7, 6121, 5878, + 7089, 7593, 8405, 7, 6121, 6546, + 7089, 7593, 8405, 7, 6121, 8473, 7708, + 7089, 7593, 8405, 7, 6121, 8758, + 7089, 7593, 8405, 7, 6121, 8846, + 7089, 7593, 8405, 7, 6121, 9072, + 7089, 7593, 8405, 7, 6121, 9553, 4530, + 7089, 7593, 8405, 7, 6121, 11449, 6490, + 7089, 7593, 8405, 8, + 7089, 7593, 8405, 9, 6121, 1045, 6376, + 7089, 7593, 8405, 9, 6121, 1045, 6490, + 7089, 7593, 8405, 9, 6121, 4531, 6376, + 7089, 7593, 8405, 9, 6121, 6378, + 7089, 7593, 8405, 9, 6121, 6516, + 7089, 7593, 8405, 9, 6121, 6546, + 7089, 7593, 8405, 9, 6121, 6874, + 7089, 7593, 8405, 9, 6121, 7272, + 7089, 7593, 8405, 9, 6121, 7708, + 7089, 7593, 8405, 9, 6121, 7709, 6490, + 7089, 7593, 8405, 9, 6121, 8153, 6874, + 7089, 7593, 8405, 9, 6121, 8432, + 7089, 7593, 8405, 9, 6121, 8433, 721, 6378, + 7089, 7593, 8405, 9, 6121, 8433, 721, 6874, + 7089, 7593, 8405, 9, 6121, 8534, + 7089, 7593, 8405, 9, 6121, 8758, + 7089, 7593, 8405, 9, 6121, 9072, + 7089, 7593, 8405, 9, 6121, 9073, 721, 6516, + 7089, 7593, 8405, 9, 6121, 10267, 6516, + 7089, 7593, 8405, 9, 6121, 10804, + 7089, 7593, 8405, 9, 6121, 11215, 4530, + 7089, 7593, 8405, 9, 6121, 11448, + 7089, 7593, 8405, 9, 6121, 11449, 721, 1045, 6490, + 7089, 7593, 8405, 9, 6121, 11449, 721, 4531, 6376, + 7089, 7593, 8405, 9, 6121, 11449, 721, 6378, + 7089, 7593, 8405, 9, 6121, 11449, 721, 6874, + 7089, 7593, 8405, 9, 6121, 11449, 721, 7708, + 7089, 7593, 8405, 9, 6121, 11449, 6490, + 7089, 7593, 8405, 10, + 7089, 7593, 8405, 11, 6121, 1045, 6376, + 7089, 7593, 8405, 11, 6121, 4530, + 7089, 7593, 8405, 11, 6121, 8473, 7708, + 7089, 7593, 8405, 11, 6121, 9553, 4530, + 7089, 7593, 8405, 12, + 7089, 7593, 8405, 13, 6121, 1045, 6376, + 7089, 7593, 8405, 13, 6121, 4530, + 7089, 7593, 8405, 13, 6121, 6378, + 7089, 7593, 8405, 13, 6121, 6516, + 7089, 7593, 8405, 13, 6121, 6546, + 7089, 7593, 8405, 13, 6121, 8432, + 7089, 7593, 8405, 13, 6121, 8758, + 7089, 7593, 8405, 13, 6121, 9072, + 7089, 7593, 8405, 13, 6121, 9553, 4530, + 7089, 7593, 8405, 13, 6121, 11448, + 7089, 7593, 8405, 14, + 7089, 7593, 8405, 15, 6121, 1045, 6376, + 7089, 7593, 8405, 15, 6121, 1045, 6490, + 7089, 7593, 8405, 15, 6121, 4530, + 7089, 7593, 8405, 15, 6121, 4877, 6490, + 7089, 7593, 8405, 15, 6121, 6517, 6490, + 7089, 7593, 8405, 15, 6121, 6546, + 7089, 7593, 8405, 15, 6121, 8758, + 7089, 7593, 8405, 15, 6121, 9072, + 7089, 7593, 8405, 15, 6121, 10802, + 7089, 7593, 8405, 15, 6121, 10804, + 7089, 7593, 8405, 15, 6121, 11448, + 7089, 7593, 8405, 16, + 7089, 7593, 8405, 17, 6121, 1045, 6490, + 7089, 7593, 8405, 17, 6121, 4531, 6376, + 7089, 7593, 8405, 17, 6121, 6378, + 7089, 7593, 8405, 17, 6121, 6516, + 7089, 7593, 8405, 17, 6121, 6546, + 7089, 7593, 8405, 17, 6121, 6874, + 7089, 7593, 8405, 17, 6121, 7708, + 7089, 7593, 8405, 17, 6121, 7709, 6490, + 7089, 7593, 8405, 17, 6121, 8153, 6874, + 7089, 7593, 8405, 17, 6121, 8432, + 7089, 7593, 8405, 17, 6121, 8534, + 7089, 7593, 8405, 17, 6121, 8758, + 7089, 7593, 8405, 17, 6121, 10267, 6516, + 7089, 7593, 8405, 17, 6121, 10804, + 7089, 7593, 8405, 17, 6121, 10805, 721, 6378, + 7089, 7593, 8405, 17, 6121, 11215, 4530, + 7089, 7593, 8405, 17, 6121, 11448, + 7089, 7593, 8405, 18, + 7089, 7593, 8405, 19, 6121, 6546, + 7089, 7593, 8405, 19, 6121, 8758, + 7089, 7593, 8405, 19, 6121, 11448, + 7089, 7593, 8405, 19, 6121, 12426, + 7089, 7593, 8405, 20, + 7089, 7593, 8405, 21, 6121, 1045, 6490, + 7089, 7593, 8405, 21, 6121, 4530, + 7089, 7593, 8405, 21, 6121, 4877, 6490, + 7089, 7593, 8405, 21, 6121, 6378, + 7089, 7593, 8405, 21, 6121, 6546, + 7089, 7593, 8405, 21, 6121, 8758, + 7089, 7593, 8405, 21, 6121, 8759, 721, 10001, 8758, + 7089, 7593, 8405, 21, 6121, 9072, + 7089, 7593, 8405, 21, 6121, 9553, 4530, + 7089, 7593, 8405, 21, 6121, 10001, 8758, + 7089, 7593, 8405, 21, 6121, 10802, + 7089, 7593, 8405, 22, + 7089, 7593, 8405, 23, 6121, 760, + 7089, 7593, 8405, 23, 6121, 1045, 6490, + 7089, 7593, 8405, 23, 6121, 1045, 6491, 721, 8432, + 7089, 7593, 8405, 23, 6121, 3770, + 7089, 7593, 8405, 23, 6121, 3966, + 7089, 7593, 8405, 23, 6121, 4423, 8758, + 7089, 7593, 8405, 23, 6121, 4877, 6490, + 7089, 7593, 8405, 23, 6121, 6378, + 7089, 7593, 8405, 23, 6121, 6546, + 7089, 7593, 8405, 23, 6121, 8153, 760, + 7089, 7593, 8405, 23, 6121, 8473, 1044, + 7089, 7593, 8405, 23, 6121, 8473, 7708, + 7089, 7593, 8405, 23, 6121, 8758, + 7089, 7593, 8405, 23, 6121, 9072, + 7089, 7593, 8405, 23, 6121, 9553, 4530, + 7089, 7593, 8405, 23, 6121, 11215, 4530, + 7089, 7593, 8405, 23, 6121, 11449, 6490, + 7089, 7593, 8405, 24, + 7089, 7593, 8405, 25, 6121, 1045, 6376, + 7089, 7593, 8405, 25, 6121, 1045, 6490, + 7089, 7593, 8405, 25, 6121, 4530, + 7089, 7593, 8405, 25, 6121, 6378, + 7089, 7593, 8405, 25, 6121, 8473, 7708, + 7089, 7593, 8405, 25, 6121, 9553, 4530, + 7089, 7593, 8405, 26, + 7089, 7593, 8405, 27, 6121, 1045, 6376, + 7089, 7593, 8405, 27, 6121, 1045, 6490, + 7089, 7593, 8405, 27, 6121, 3966, + 7089, 7593, 8405, 27, 6121, 4849, 4530, + 7089, 7593, 8405, 27, 6121, 4877, 6490, + 7089, 7593, 8405, 27, 6121, 4895, 7443, 1760, + 7089, 7593, 8405, 27, 6121, 6378, + 7089, 7593, 8405, 27, 6121, 6546, + 7089, 7593, 8405, 27, 6121, 6874, + 7089, 7593, 8405, 27, 6121, 7708, + 7089, 7593, 8405, 27, 6121, 8473, 7708, + 7089, 7593, 8405, 27, 6121, 9072, + 7089, 7593, 8405, 27, 6121, 9553, 4530, + 7089, 7593, 8405, 27, 6121, 11215, 4530, + 7089, 7593, 8405, 27, 6121, 11449, 6490, + 7089, 7593, 8405, 27, 10451, 115, 11424, + 7089, 7593, 8405, 28, + 7089, 7593, 8405, 29, 6121, 1045, 6376, + 7089, 7593, 8405, 29, 6121, 1045, 6377, 721, 8432, + 7089, 7593, 8405, 29, 6121, 1045, 6490, + 7089, 7593, 8405, 29, 6121, 1809, 5551, 8318, + 7089, 7593, 8405, 29, 6121, 4531, 6376, + 7089, 7593, 8405, 29, 6121, 4536, + 7089, 7593, 8405, 29, 6121, 4537, 721, 1045, 6490, + 7089, 7593, 8405, 29, 6121, 4537, 721, 4531, 6376, + 7089, 7593, 8405, 29, 6121, 4537, 721, 6378, + 7089, 7593, 8405, 29, 6121, 4537, 721, 6874, + 7089, 7593, 8405, 29, 6121, 4537, 721, 7708, + 7089, 7593, 8405, 29, 6121, 4895, 8759, 9548, + 7089, 7593, 8405, 29, 6121, 4896, + 7089, 7593, 8405, 29, 6121, 6378, + 7089, 7593, 8405, 29, 6121, 6516, + 7089, 7593, 8405, 29, 6121, 6546, + 7089, 7593, 8405, 29, 6121, 6874, + 7089, 7593, 8405, 29, 6121, 7708, + 7089, 7593, 8405, 29, 6121, 7709, 721, 6378, + 7089, 7593, 8405, 29, 6121, 7709, 721, 8432, + 7089, 7593, 8405, 29, 6121, 7709, 721, 10804, + 7089, 7593, 8405, 29, 6121, 8153, 6378, + 7089, 7593, 8405, 29, 6121, 8153, 6874, + 7089, 7593, 8405, 29, 6121, 8432, + 7089, 7593, 8405, 29, 6121, 8433, 721, 6378, + 7089, 7593, 8405, 29, 6121, 8433, 721, 6874, + 7089, 7593, 8405, 29, 6121, 8534, + 7089, 7593, 8405, 29, 6121, 8535, 721, 8432, + 7089, 7593, 8405, 29, 6121, 8758, + 7089, 7593, 8405, 29, 6121, 8759, 721, 6378, + 7089, 7593, 8405, 29, 6121, 10267, 6516, + 7089, 7593, 8405, 29, 6121, 10804, + 7089, 7593, 8405, 29, 6121, 10805, 721, 8432, + 7089, 7593, 8405, 29, 6121, 11448, + 7089, 7593, 8405, 29, 6121, 11449, 721, 1045, 6490, + 7089, 7593, 8405, 29, 6121, 11449, 721, 4531, 6376, + 7089, 7593, 8405, 29, 6121, 11449, 721, 6378, + 7089, 7593, 8405, 29, 6121, 11449, 721, 6874, + 7089, 7593, 8405, 29, 6121, 11449, 721, 7708, + 7089, 7593, 8405, 30, + 7089, 7593, 8405, 31, 6121, 1045, 6376, + 7089, 7593, 8405, 31, 6121, 4530, + 7089, 7593, 8405, 31, 6121, 6378, + 7089, 7593, 8405, 31, 6121, 8473, 7708, + 7089, 7593, 8405, 31, 6121, 8758, + 7089, 7593, 8405, 31, 6121, 8759, 9785, 10802, + 7089, 7593, 8405, 31, 6121, 9553, 4530, + 7089, 7593, 8405, 31, 6121, 10196, + 7089, 7593, 8405, 31, 6121, 10533, 5878, + 7089, 7593, 8405, 32, + 7089, 7593, 8405, 33, 6121, 4530, + 7089, 7593, 8405, 33, 6121, 4531, 5878, + 7089, 7593, 8405, 33, 6121, 8759, 9785, 10802, + 7089, 7593, 8405, 33, 6121, 10001, 8758, + 7089, 7593, 8405, 34, + 7089, 7593, 8405, 35, 6121, 1045, 6376, + 7089, 7593, 8405, 35, 6121, 1045, 6490, + 7089, 7593, 8405, 35, 6121, 1045, 6491, 721, 8432, + 7089, 7593, 8405, 35, 6121, 4877, 6490, + 7089, 7593, 8405, 35, 6121, 4895, 1760, + 7089, 7593, 8405, 35, 6121, 5878, + 7089, 7593, 8405, 35, 6121, 6378, + 7089, 7593, 8405, 35, 6121, 6546, + 7089, 7593, 8405, 35, 6121, 8153, 6874, + 7089, 7593, 8405, 35, 6121, 8473, 7708, + 7089, 7593, 8405, 35, 6121, 8758, + 7089, 7593, 8405, 35, 6121, 9072, + 7089, 7593, 8405, 35, 6121, 9553, 4530, + 7089, 7593, 8405, 35, 6121, 10190, + 7089, 7593, 8405, 35, 6121, 10191, 721, 8473, 7708, + 7089, 7593, 8405, 35, 6121, 10267, 6516, + 7089, 7593, 8405, 35, 9642, + 7089, 7593, 8405, 36, + 7089, 7593, 8405, 37, 6121, 1045, 6376, + 7089, 7593, 8405, 37, 6121, 1045, 6490, + 7089, 7593, 8405, 37, 6121, 1045, 6491, 721, 1045, 6376, + 7089, 7593, 8405, 37, 6121, 4530, + 7089, 7593, 8405, 37, 6121, 6378, + 7089, 7593, 8405, 37, 6121, 6379, 721, 1045, 6376, + 7089, 7593, 8405, 37, 6121, 6546, + 7089, 7593, 8405, 37, 6121, 6547, 721, 1045, 6376, + 7089, 7593, 8405, 37, 6121, 6617, 6490, + 7089, 7593, 8405, 37, 6121, 7653, 5878, + 7089, 7593, 8405, 37, 6121, 8473, 7708, + 7089, 7593, 8405, 37, 6121, 9072, + 7089, 7593, 8405, 37, 6121, 9553, 4530, + 7089, 7593, 8405, 37, 6121, 11448, + 7089, 7593, 8405, 38, + 7089, 7593, 8405, 39, 6121, 1045, 6376, + 7089, 7593, 8405, 39, 6121, 1045, 6490, + 7089, 7593, 8405, 39, 6121, 3966, + 7089, 7593, 8405, 39, 6121, 4530, + 7089, 7593, 8405, 39, 6121, 4877, 6490, + 7089, 7593, 8405, 39, 6121, 6546, + 7089, 7593, 8405, 39, 6121, 6617, 6490, + 7089, 7593, 8405, 39, 6121, 8473, 7708, + 7089, 7593, 8405, 39, 6121, 8758, + 7089, 7593, 8405, 39, 6121, 9072, + 7089, 7593, 8405, 39, 6121, 9553, 4530, + 7089, 7593, 8405, 39, 6121, 10001, 8758, + 7089, 7593, 8405, 39, 6121, 10804, + 7089, 7593, 8405, 39, 6121, 11215, 4530, + 7089, 7593, 8405, 39, 6121, 11449, 6490, + 7089, 7593, 8405, 40, + 7089, 7593, 8405, 41, 760, + 7089, 7593, 8405, 41, 6121, 1045, 6490, + 7089, 7593, 8405, 41, 6121, 4531, 6376, + 7089, 7593, 8405, 41, 6121, 4536, + 7089, 7593, 8405, 41, 6121, 4537, 721, 1045, 6490, + 7089, 7593, 8405, 41, 6121, 4537, 721, 4531, 6376, + 7089, 7593, 8405, 41, 6121, 4537, 721, 6378, + 7089, 7593, 8405, 41, 6121, 4537, 721, 6874, + 7089, 7593, 8405, 41, 6121, 4537, 721, 7708, + 7089, 7593, 8405, 41, 6121, 5551, 6376, + 7089, 7593, 8405, 41, 6121, 6378, + 7089, 7593, 8405, 41, 6121, 6516, + 7089, 7593, 8405, 41, 6121, 6546, + 7089, 7593, 8405, 41, 6121, 6874, + 7089, 7593, 8405, 41, 6121, 7708, + 7089, 7593, 8405, 41, 6121, 7709, 721, 6378, + 7089, 7593, 8405, 41, 6121, 7709, 6490, + 7089, 7593, 8405, 41, 6121, 8153, 6378, + 7089, 7593, 8405, 41, 6121, 8153, 6874, + 7089, 7593, 8405, 41, 6121, 8432, + 7089, 7593, 8405, 41, 6121, 8433, 721, 10804, + 7089, 7593, 8405, 41, 6121, 8534, + 7089, 7593, 8405, 41, 6121, 10267, 6516, + 7089, 7593, 8405, 41, 6121, 10804, + 7089, 7593, 8405, 41, 6121, 10805, 721, 6378, + 7089, 7593, 8405, 41, 6121, 10805, 721, 6546, + 7089, 7593, 8405, 41, 6121, 10805, 721, 6874, + 7089, 7593, 8405, 41, 6121, 10805, 721, 8432, + 7089, 7593, 8405, 41, 6121, 10805, 6490, + 7089, 7593, 8405, 41, 6121, 11215, 4530, + 7089, 7593, 8405, 41, 6121, 11448, + 7089, 7593, 8405, 41, 6121, 11449, 6490, + 7089, 7593, 8405, 42, + 7089, 7593, 8405, 43, 6121, 1045, 6490, + 7089, 7593, 8405, 43, 6121, 3966, + 7089, 7593, 8405, 43, 6121, 4530, + 7089, 7593, 8405, 43, 6121, 7443, 4530, + 7089, 7593, 8405, 43, 6121, 7708, + 7089, 7593, 8405, 43, 6121, 9553, 4530, + 7089, 7593, 8405, 43, 6121, 10001, 8758, + 7089, 7593, 8405, 44, + 7089, 7593, 8405, 45, 6121, 1045, 6376, + 7089, 7593, 8405, 45, 6121, 1045, 6490, + 7089, 7593, 8405, 45, 6121, 4530, + 7089, 7593, 8405, 45, 6121, 5551, 6376, + 7089, 7593, 8405, 45, 6121, 6378, + 7089, 7593, 8405, 45, 6121, 6874, + 7089, 7593, 8405, 45, 6121, 10804, + 7089, 7593, 8405, 45, 6121, 11448, + 7089, 7593, 8405, 46, + 7089, 7593, 8405, 47, 6121, 1045, 6376, + 7089, 7593, 8405, 47, 6121, 9553, 4530, + 7089, 7593, 8405, 47, 6121, 10804, + 7089, 7593, 8405, 48, + 7089, 7593, 8405, 49, 6121, 1045, 6376, + 7089, 7593, 8405, 49, 6121, 1045, 6490, + 7089, 7593, 8405, 49, 6121, 4530, + 7089, 7593, 8405, 49, 6121, 4531, 6376, + 7089, 7593, 8405, 49, 6121, 4896, + 7089, 7593, 8405, 49, 6121, 5551, 6376, + 7089, 7593, 8405, 49, 6121, 6378, + 7089, 7593, 8405, 49, 6121, 6874, + 7089, 7593, 8405, 49, 6121, 7708, + 7089, 7593, 8405, 49, 6121, 8432, + 7089, 7593, 8405, 49, 6121, 8758, + 7089, 7593, 8405, 49, 6121, 10804, + 7089, 7593, 8405, 49, 6121, 11448, + 7089, 7593, 8405, 50, + 7089, 7593, 8405, 51, 6121, 1045, 6376, + 7089, 7593, 8405, 51, 6121, 1045, 6490, + 7089, 7593, 8405, 51, 6121, 3966, + 7089, 7593, 8405, 51, 6121, 4530, + 7089, 7593, 8405, 51, 6121, 4877, 6490, + 7089, 7593, 8405, 51, 6121, 6378, + 7089, 7593, 8405, 51, 6121, 6546, + 7089, 7593, 8405, 51, 6121, 7653, 5878, + 7089, 7593, 8405, 51, 6121, 8473, 7708, + 7089, 7593, 8405, 51, 6121, 8758, + 7089, 7593, 8405, 51, 6121, 9553, 4530, + 7089, 7593, 8405, 51, 6121, 10802, + 7089, 7593, 8405, 51, 6121, 11215, 4530, + 7089, 7593, 8405, 51, 6121, 11448, + 7089, 7593, 8405, 58, + 7089, 7593, 8405, 66, + 7089, 7593, 8405, 67, 6121, 6378, + 7089, 7593, 8405, 67, 6121, 8432, + 7089, 7593, 8405, 82, + 7089, 7593, 8405, 92, + 7089, 7593, 8405, 94, + 7089, 7593, 8405, 95, 6121, 11649, 760, + 7089, 7593, 8405, 98, + 7089, 7593, 8405, 141, 9164, + 7089, 7593, 8405, 156, + 7089, 7593, 8405, 157, 6121, 6546, + 7089, 7593, 8405, 157, 9164, + 7089, 7593, 8405, 157, 9165, 6121, 3966, + 7089, 7593, 8405, 186, + 7089, 7593, 8405, 252, + 7089, 7593, 8405, 282, + 7089, 7593, 8405, 342, + 7089, 7593, 8405, 353, 9164, + 7089, 7593, 8405, 363, 9164, + 7089, 7593, 8405, 406, + 7089, 7593, 8405, 432, + 7089, 7593, 8405, 440, + 7089, 7593, 8405, 450, + 7089, 7593, 8405, 505, 9164, + 7089, 7593, 8405, 559, 9165, 6121, 3966, + 7089, 7593, 8405, 563, 6121, 13018, + 7089, 7593, 8405, 573, 9164, + 7089, 7593, 8405, 578, + 7089, 7593, 8405, 590, + 7089, 7593, 8405, 594, + 7089, 7593, 8405, 620, + 7089, 7593, 8405, 912, + 7089, 7593, 8405, 1058, + 7089, 7593, 8405, 1110, + 7089, 7593, 8405, 1124, + 7089, 7593, 8405, 1125, 6121, 3966, + 7089, 7593, 8405, 1125, 6121, 9553, 4530, + 7089, 7593, 8405, 1125, 6121, 11215, 4530, + 7089, 7593, 8405, 1130, + 7089, 7593, 8405, 1138, + 7089, 7593, 8405, 1139, 6121, 3966, + 7089, 7593, 8405, 1139, 6121, 5878, + 7089, 7593, 8405, 1139, 6121, 6546, + 7089, 7593, 8405, 1139, 6121, 11215, 4530, + 7089, 7593, 8405, 1139, 10488, + 7089, 7593, 8405, 1678, + 7089, 7593, 8405, 1822, + 7089, 7593, 8405, 1952, + 7089, 7593, 8405, 2108, + 7089, 7593, 8405, 2216, + 7089, 7593, 8405, 2452, + 7089, 7593, 8405, 2453, 9642, + 7089, 7593, 8405, 2725, 4389, 28, + 7089, 7593, 8405, 2760, + 7089, 7593, 8405, 4065, 9164, + 7089, 7593, 8405, 4187, 9164, + 7089, 7593, 8405, 4389, 14, + 7089, 7593, 8405, 4404, + 7089, 7593, 8405, 4405, 6121, 4530, + 7089, 7593, 8405, 4614, + 7089, 7593, 8405, 4615, 6121, 8758, + 7089, 7593, 8405, 4854, + 7089, 7593, 8405, 4895, 36, + 7089, 7593, 8405, 4895, 37, 6121, 1045, 6376, + 7089, 7593, 8405, 4895, 37, 6121, 4423, 8758, + 7089, 7593, 8405, 4895, 37, 6121, 10001, 8758, + 7089, 7593, 8405, 5385, 8, + 7089, 7593, 8405, 5385, 9, 6121, 11215, 4530, + 7089, 7593, 8405, 5385, 28, + 7089, 7593, 8405, 5385, 29, 6121, 11215, 4530, + 7089, 7593, 8405, 5527, 4536, + 7089, 7593, 8405, 5901, 9164, + 7089, 7593, 8405, 5965, 2540, + 7089, 7593, 8405, 5965, 2778, + 7089, 7593, 8405, 5965, 4200, + 7089, 7593, 8405, 6078, + 7089, 7593, 8405, 6220, + 7089, 7593, 8405, 6406, + 7089, 7593, 8405, 6407, 6121, 11215, 4530, + 7089, 7593, 8405, 6674, + 7089, 7593, 8405, 6824, + 7089, 7593, 8405, 7494, + 7089, 7593, 8405, 7495, 6121, 4530, + 7089, 7593, 8405, 7495, 6121, 11215, 4530, + 7089, 7593, 8405, 7519, 36, + 7089, 7593, 8405, 7619, 10489, 1124, + 7089, 7593, 8405, 7692, + 7089, 7593, 8405, 7693, 6121, 8758, + 7089, 7593, 8405, 7693, 6121, 8759, 9785, 10802, + 7089, 7593, 8405, 7981, 28, + 7089, 7593, 8405, 8005, 4389, 28, + 7089, 7593, 8405, 8017, 22, + 7089, 7593, 8405, 8065, 5385, 8, + 7089, 7593, 8405, 8065, 7316, + 7089, 7593, 8405, 8065, 10489, 5385, 8, + 7089, 7593, 8405, 8387, 6121, 8758, + 7089, 7593, 8405, 8679, 12, + 7089, 7593, 8405, 8869, 0, + 7089, 7593, 8405, 8869, 8, + 7089, 7593, 8405, 8869, 12, + 7089, 7593, 8405, 8869, 14, + 7089, 7593, 8405, 8869, 15, 6121, 10190, + 7089, 7593, 8405, 8869, 15, 6121, 10191, 721, 5878, + 7089, 7593, 8405, 8869, 16, + 7089, 7593, 8405, 8869, 20, + 7089, 7593, 8405, 8869, 22, + 7089, 7593, 8405, 8869, 24, + 7089, 7593, 8405, 8869, 25, 6121, 4895, 1760, + 7089, 7593, 8405, 8869, 34, + 7089, 7593, 8405, 8869, 35, 6121, 4530, + 7089, 7593, 8405, 8869, 35, 6121, 4895, 1760, + 7089, 7593, 8405, 8869, 35, 6121, 5878, + 7089, 7593, 8405, 8869, 38, + 7089, 7593, 8405, 8869, 42, + 7089, 7593, 8405, 8869, 44, + 7089, 7593, 8405, 8869, 48, + 7089, 7593, 8405, 8869, 66, + 7089, 7593, 8405, 8869, 426, + 7089, 7593, 8405, 8869, 5385, 8, + 7089, 7593, 8405, 8869, 6406, + 7089, 7593, 8405, 8869, 6674, + 7089, 7593, 8405, 8869, 9365, 12, + 7089, 7593, 8405, 9185, 16, + 7089, 7593, 8405, 9185, 18, + 7089, 7593, 8405, 9185, 19, 6121, 8758, + 7089, 7593, 8405, 9185, 19, 6121, 8759, 721, 4530, + 7089, 7593, 8405, 9313, 5836, + 7089, 7593, 8405, 9365, 6, + 7089, 7593, 8405, 9365, 10, + 7089, 7593, 8405, 9365, 12, + 7089, 7593, 8405, 9365, 34, + 7089, 7593, 8405, 9365, 36, + 7089, 7593, 8405, 9365, 38, + 7089, 7593, 8405, 9808, + 7089, 7593, 8405, 9809, 6121, 8758, + 7089, 7593, 8405, 10489, 4, + 7089, 7593, 8405, 10489, 5, 6121, 1044, + 7089, 7593, 8405, 10489, 8, + 7089, 7593, 8405, 10489, 35, 6121, 10190, + 7089, 7593, 8405, 10489, 5385, 8, + 7089, 7593, 8405, 10489, 5385, 9, 6121, 4530, + 7089, 7593, 8405, 10489, 5385, 9, 6121, 11215, 4530, + 7089, 7593, 8405, 10494, + 7089, 7593, 8405, 10523, 28, + 7089, 7593, 8405, 10523, 29, 6121, 8758, + 7089, 7593, 8405, 10523, 40, + 7089, 7593, 8405, 10523, 5385, 28, + 7089, 7593, 8405, 10523, 8869, 24, + 7089, 7593, 8405, 10523, 11941, 40, + 7089, 7593, 8405, 10609, 2216, + 7089, 7593, 8405, 10640, + 7089, 7593, 8405, 10786, + 7089, 7593, 8405, 10787, 6121, 6616, + 7089, 7593, 8405, 11879, 50, + 7089, 7593, 8405, 12507, 42, + 7089, 7593, 8405, 12507, 344, + 7089, 7593, 8405, 12935, 710, + 7089, 7593, 8405, 12935, 3244, + 7089, 7593, 9063, 8405, 17, 6121, 8758, + 7089, 7593, 9063, 8405, 41, 6121, 8758, + 7089, 7593, 10301, 200, + 7089, 7593, 10301, 202, + 7089, 7593, 10301, 204, + 7089, 7593, 10301, 268, + 7089, 7593, 10301, 426, + 7089, 7593, 10301, 544, + 7089, 7593, 10301, 1156, + 7089, 7593, 10301, 1158, + 7089, 7593, 10301, 4895, 37, 38, + 7089, 8405, 662, + 7089, 8405, 710, + 7089, 8405, 2779, 6121, 8758, + 7089, 8405, 6138, + 7089, 8405, 7593, 9063, 0, + 7089, 8405, 7593, 9063, 2, + 7089, 8405, 7593, 9063, 4, + 7089, 8405, 7593, 9063, 6, + 7089, 8405, 7593, 9063, 8, + 7089, 8405, 7593, 9063, 10, + 7089, 8405, 7593, 9063, 12, + 7089, 8405, 7593, 9063, 13, 6121, 4530, + 7089, 8405, 7593, 9063, 14, + 7089, 8405, 7593, 9063, 16, + 7089, 8405, 7593, 9063, 18, + 7089, 8405, 7593, 9063, 20, + 7089, 8405, 7593, 9063, 22, + 7089, 8405, 7593, 9063, 23, 6121, 8758, + 7089, 8405, 7593, 9063, 24, + 7089, 8405, 7593, 9063, 26, + 7089, 8405, 7593, 9063, 28, + 7089, 8405, 7593, 9063, 30, + 7089, 8405, 7593, 9063, 34, + 7089, 8405, 7593, 9063, 36, + 7089, 8405, 7593, 9063, 38, + 7089, 8405, 7593, 9063, 40, + 7089, 8405, 7593, 9063, 42, + 7089, 8405, 7593, 9063, 44, + 7089, 8405, 7593, 9063, 48, + 7089, 8405, 7593, 9063, 50, + 7089, 8405, 7593, 9063, 66, + 7089, 8405, 7593, 9063, 426, + 7089, 8405, 7593, 9063, 450, + 7089, 8405, 7593, 9063, 1130, + 7089, 8405, 7593, 9063, 1138, + 7089, 8405, 7593, 9063, 2452, + 7089, 8405, 7593, 9063, 5385, 28, + 7089, 8405, 7593, 9063, 7981, 2, + 7089, 8405, 7593, 9063, 8869, 8, + 7089, 8405, 7593, 9063, 8869, 34, + 7089, 8405, 7593, 9063, 10267, 34, + 7089, 8405, 7593, 9063, 10489, 26, + 7089, 8405, 7593, 9063, 10489, 34, + 7089, 8405, 8107, 6598, + 7089, 8405, 8921, 11089, 9728, + 7089, 8405, 9313, 5836, + 7089, 8405, 9313, 5837, 6121, 8758, + 7089, 8405, 9423, 6598, + 7089, 8405, 9865, 6598, + 7089, 8405, 9915, 11720, + 7089, 8405, 9917, 6598, + 7089, 8405, 9917, 11720, + 7089, 8405, 10267, 9313, 5836, + 7089, 8405, 10267, 9313, 5837, 6121, 8758, + 7089, 8405, 10489, 1125, 4896, + 7089, 8405, 10489, 9313, 5837, 6121, 8758, + 7089, 8405, 11215, 6598, + 7089, 8405, 11251, 4, + 7089, 8405, 11723, 8921, 11008, + 7089, 9063, 8405, 0, + 7089, 9063, 8405, 1, 6121, 1045, 6376, + 7089, 9063, 8405, 1, 6121, 1045, 6377, 721, 8432, + 7089, 9063, 8405, 1, 6121, 1045, 6490, + 7089, 9063, 8405, 1, 6121, 4531, 6376, + 7089, 9063, 8405, 1, 6121, 5551, 6376, + 7089, 9063, 8405, 1, 6121, 5551, 6377, 721, 6378, + 7089, 9063, 8405, 1, 6121, 5551, 6490, + 7089, 9063, 8405, 1, 6121, 6378, + 7089, 9063, 8405, 1, 6121, 6516, + 7089, 9063, 8405, 1, 6121, 6517, 721, 1045, 6490, + 7089, 9063, 8405, 1, 6121, 6517, 721, 4531, 6376, + 7089, 9063, 8405, 1, 6121, 6517, 721, 6378, + 7089, 9063, 8405, 1, 6121, 6517, 721, 6874, + 7089, 9063, 8405, 1, 6121, 6517, 721, 7708, + 7089, 9063, 8405, 1, 6121, 6546, + 7089, 9063, 8405, 1, 6121, 6874, + 7089, 9063, 8405, 1, 6121, 7708, + 7089, 9063, 8405, 1, 6121, 8153, 6874, + 7089, 9063, 8405, 1, 6121, 8432, + 7089, 9063, 8405, 1, 6121, 8534, + 7089, 9063, 8405, 1, 6121, 8758, + 7089, 9063, 8405, 1, 6121, 10267, 6516, + 7089, 9063, 8405, 1, 6121, 10804, + 7089, 9063, 8405, 1, 6121, 10805, 721, 8432, + 7089, 9063, 8405, 1, 6121, 11448, + 7089, 9063, 8405, 1, 6121, 11449, 721, 1045, 6490, + 7089, 9063, 8405, 1, 6121, 11449, 721, 4531, 6376, + 7089, 9063, 8405, 1, 6121, 11449, 721, 6378, + 7089, 9063, 8405, 1, 6121, 11449, 721, 6874, + 7089, 9063, 8405, 1, 6121, 11449, 721, 7708, + 7089, 9063, 8405, 2, + 7089, 9063, 8405, 3, 6121, 1045, 6376, + 7089, 9063, 8405, 3, 6121, 1045, 6490, + 7089, 9063, 8405, 3, 6121, 4530, + 7089, 9063, 8405, 3, 6121, 4877, 6490, + 7089, 9063, 8405, 3, 6121, 8758, + 7089, 9063, 8405, 3, 6121, 8846, + 7089, 9063, 8405, 4, + 7089, 9063, 8405, 5, 6121, 1045, 6376, + 7089, 9063, 8405, 5, 6121, 4530, + 7089, 9063, 8405, 5, 6121, 6378, + 7089, 9063, 8405, 5, 6121, 6546, + 7089, 9063, 8405, 5, 6121, 8758, + 7089, 9063, 8405, 5, 6121, 9072, + 7089, 9063, 8405, 5, 6121, 9073, 721, 6378, + 7089, 9063, 8405, 5, 6121, 11448, + 7089, 9063, 8405, 6, + 7089, 9063, 8405, 7, 6121, 1045, 6376, + 7089, 9063, 8405, 7, 6121, 1045, 6490, + 7089, 9063, 8405, 7, 6121, 4530, + 7089, 9063, 8405, 7, 6121, 4877, 6490, + 7089, 9063, 8405, 7, 6121, 6546, + 7089, 9063, 8405, 7, 6121, 7593, 8405, 50, + 7089, 9063, 8405, 7, 6121, 7593, 8405, 51, 6121, 6546, + 7089, 9063, 8405, 7, 6121, 8758, + 7089, 9063, 8405, 7, 6121, 8846, + 7089, 9063, 8405, 7, 6121, 9072, + 7089, 9063, 8405, 7, 6121, 11449, 6490, + 7089, 9063, 8405, 8, + 7089, 9063, 8405, 9, 6121, 1045, 6376, + 7089, 9063, 8405, 9, 6121, 1045, 6490, + 7089, 9063, 8405, 9, 6121, 4531, 6376, + 7089, 9063, 8405, 9, 6121, 6378, + 7089, 9063, 8405, 9, 6121, 6516, + 7089, 9063, 8405, 9, 6121, 6546, + 7089, 9063, 8405, 9, 6121, 6874, + 7089, 9063, 8405, 9, 6121, 7708, + 7089, 9063, 8405, 9, 6121, 7709, 6490, + 7089, 9063, 8405, 9, 6121, 8153, 6874, + 7089, 9063, 8405, 9, 6121, 8432, + 7089, 9063, 8405, 9, 6121, 8433, 721, 6378, + 7089, 9063, 8405, 9, 6121, 8433, 721, 6874, + 7089, 9063, 8405, 9, 6121, 8534, + 7089, 9063, 8405, 9, 6121, 8758, + 7089, 9063, 8405, 9, 6121, 9072, + 7089, 9063, 8405, 9, 6121, 9073, 721, 6516, + 7089, 9063, 8405, 9, 6121, 10267, 6516, + 7089, 9063, 8405, 9, 6121, 10804, + 7089, 9063, 8405, 9, 6121, 11448, + 7089, 9063, 8405, 9, 6121, 11449, 721, 1045, 6490, + 7089, 9063, 8405, 9, 6121, 11449, 721, 4531, 6376, + 7089, 9063, 8405, 9, 6121, 11449, 721, 6378, + 7089, 9063, 8405, 9, 6121, 11449, 721, 6874, + 7089, 9063, 8405, 9, 6121, 11449, 721, 7708, + 7089, 9063, 8405, 9, 6121, 11449, 6490, + 7089, 9063, 8405, 10, + 7089, 9063, 8405, 11, 6121, 1045, 6376, + 7089, 9063, 8405, 11, 6121, 4530, + 7089, 9063, 8405, 12, + 7089, 9063, 8405, 13, 6121, 1045, 6376, + 7089, 9063, 8405, 13, 6121, 4530, + 7089, 9063, 8405, 13, 6121, 6378, + 7089, 9063, 8405, 13, 6121, 6516, + 7089, 9063, 8405, 13, 6121, 6546, + 7089, 9063, 8405, 13, 6121, 8432, + 7089, 9063, 8405, 13, 6121, 8758, + 7089, 9063, 8405, 13, 6121, 9072, + 7089, 9063, 8405, 13, 6121, 11448, + 7089, 9063, 8405, 14, + 7089, 9063, 8405, 15, 6121, 1045, 6376, + 7089, 9063, 8405, 15, 6121, 1045, 6490, + 7089, 9063, 8405, 15, 6121, 6517, 6490, + 7089, 9063, 8405, 15, 6121, 6546, + 7089, 9063, 8405, 15, 6121, 8758, + 7089, 9063, 8405, 15, 6121, 9072, + 7089, 9063, 8405, 15, 6121, 10802, + 7089, 9063, 8405, 15, 6121, 10804, + 7089, 9063, 8405, 15, 6121, 11448, + 7089, 9063, 8405, 16, + 7089, 9063, 8405, 17, 6121, 1045, 6376, + 7089, 9063, 8405, 17, 6121, 1045, 6490, + 7089, 9063, 8405, 17, 6121, 4531, 6376, + 7089, 9063, 8405, 17, 6121, 6378, + 7089, 9063, 8405, 17, 6121, 6516, + 7089, 9063, 8405, 17, 6121, 6546, + 7089, 9063, 8405, 17, 6121, 6874, + 7089, 9063, 8405, 17, 6121, 7708, + 7089, 9063, 8405, 17, 6121, 7709, 6490, + 7089, 9063, 8405, 17, 6121, 8153, 6874, + 7089, 9063, 8405, 17, 6121, 8432, + 7089, 9063, 8405, 17, 6121, 8534, + 7089, 9063, 8405, 17, 6121, 8758, + 7089, 9063, 8405, 17, 6121, 10267, 6516, + 7089, 9063, 8405, 17, 6121, 10804, + 7089, 9063, 8405, 17, 6121, 10805, 721, 6378, + 7089, 9063, 8405, 17, 6121, 11448, + 7089, 9063, 8405, 18, + 7089, 9063, 8405, 19, 6121, 8758, + 7089, 9063, 8405, 19, 6121, 11448, + 7089, 9063, 8405, 20, + 7089, 9063, 8405, 21, 6121, 1045, 6490, + 7089, 9063, 8405, 21, 6121, 4530, + 7089, 9063, 8405, 21, 6121, 4877, 6490, + 7089, 9063, 8405, 21, 6121, 6378, + 7089, 9063, 8405, 21, 6121, 6546, + 7089, 9063, 8405, 21, 6121, 8758, + 7089, 9063, 8405, 21, 6121, 8759, 721, 10001, 8758, + 7089, 9063, 8405, 21, 6121, 9072, + 7089, 9063, 8405, 21, 6121, 10001, 8758, + 7089, 9063, 8405, 21, 6121, 10802, + 7089, 9063, 8405, 22, + 7089, 9063, 8405, 23, 6121, 760, + 7089, 9063, 8405, 23, 6121, 1045, 6490, + 7089, 9063, 8405, 23, 6121, 1045, 6491, 721, 8432, + 7089, 9063, 8405, 23, 6121, 4423, 8758, + 7089, 9063, 8405, 23, 6121, 4877, 6490, + 7089, 9063, 8405, 23, 6121, 6378, + 7089, 9063, 8405, 23, 6121, 6546, + 7089, 9063, 8405, 23, 6121, 7593, 8405, 18, + 7089, 9063, 8405, 23, 6121, 8153, 760, + 7089, 9063, 8405, 23, 6121, 8473, 1044, + 7089, 9063, 8405, 23, 6121, 8473, 7708, + 7089, 9063, 8405, 23, 6121, 8758, + 7089, 9063, 8405, 23, 6121, 9072, + 7089, 9063, 8405, 23, 6121, 11449, 6490, + 7089, 9063, 8405, 24, + 7089, 9063, 8405, 25, 6121, 1045, 6376, + 7089, 9063, 8405, 25, 6121, 1045, 6490, + 7089, 9063, 8405, 25, 6121, 4530, + 7089, 9063, 8405, 25, 6121, 6378, + 7089, 9063, 8405, 26, + 7089, 9063, 8405, 27, 6121, 1045, 6376, + 7089, 9063, 8405, 27, 6121, 1045, 6490, + 7089, 9063, 8405, 27, 6121, 4849, 4530, + 7089, 9063, 8405, 27, 6121, 4877, 6490, + 7089, 9063, 8405, 27, 6121, 4895, 7443, 1760, + 7089, 9063, 8405, 27, 6121, 6378, + 7089, 9063, 8405, 27, 6121, 6546, + 7089, 9063, 8405, 27, 6121, 6874, + 7089, 9063, 8405, 27, 6121, 7593, 8405, 18, + 7089, 9063, 8405, 27, 6121, 7708, + 7089, 9063, 8405, 27, 6121, 9072, + 7089, 9063, 8405, 27, 6121, 11449, 6490, + 7089, 9063, 8405, 28, + 7089, 9063, 8405, 29, 6121, 1045, 6376, + 7089, 9063, 8405, 29, 6121, 1045, 6377, 721, 8432, + 7089, 9063, 8405, 29, 6121, 1045, 6490, + 7089, 9063, 8405, 29, 6121, 4531, 6376, + 7089, 9063, 8405, 29, 6121, 4536, + 7089, 9063, 8405, 29, 6121, 4537, 721, 1045, 6490, + 7089, 9063, 8405, 29, 6121, 4537, 721, 4531, 6376, + 7089, 9063, 8405, 29, 6121, 4537, 721, 6378, + 7089, 9063, 8405, 29, 6121, 4537, 721, 6874, + 7089, 9063, 8405, 29, 6121, 4537, 721, 7708, + 7089, 9063, 8405, 29, 6121, 4895, 8759, 9548, + 7089, 9063, 8405, 29, 6121, 4896, + 7089, 9063, 8405, 29, 6121, 6378, + 7089, 9063, 8405, 29, 6121, 6516, + 7089, 9063, 8405, 29, 6121, 6546, + 7089, 9063, 8405, 29, 6121, 6874, + 7089, 9063, 8405, 29, 6121, 7708, + 7089, 9063, 8405, 29, 6121, 7709, 721, 6378, + 7089, 9063, 8405, 29, 6121, 7709, 721, 8432, + 7089, 9063, 8405, 29, 6121, 7709, 721, 10804, + 7089, 9063, 8405, 29, 6121, 8153, 6378, + 7089, 9063, 8405, 29, 6121, 8153, 6874, + 7089, 9063, 8405, 29, 6121, 8432, + 7089, 9063, 8405, 29, 6121, 8433, 721, 6378, + 7089, 9063, 8405, 29, 6121, 8433, 721, 6874, + 7089, 9063, 8405, 29, 6121, 8473, 7708, + 7089, 9063, 8405, 29, 6121, 8534, + 7089, 9063, 8405, 29, 6121, 8535, 721, 8432, + 7089, 9063, 8405, 29, 6121, 8758, + 7089, 9063, 8405, 29, 6121, 8759, 721, 6378, + 7089, 9063, 8405, 29, 6121, 10267, 6516, + 7089, 9063, 8405, 29, 6121, 10804, + 7089, 9063, 8405, 29, 6121, 10805, 721, 8432, + 7089, 9063, 8405, 29, 6121, 11448, + 7089, 9063, 8405, 29, 6121, 11449, 721, 1045, 6490, + 7089, 9063, 8405, 29, 6121, 11449, 721, 4531, 6376, + 7089, 9063, 8405, 29, 6121, 11449, 721, 6378, + 7089, 9063, 8405, 29, 6121, 11449, 721, 6874, + 7089, 9063, 8405, 29, 6121, 11449, 721, 7708, + 7089, 9063, 8405, 30, + 7089, 9063, 8405, 31, 6121, 1045, 6376, + 7089, 9063, 8405, 31, 6121, 4530, + 7089, 9063, 8405, 31, 6121, 6378, + 7089, 9063, 8405, 31, 6121, 8758, + 7089, 9063, 8405, 31, 6121, 8759, 9785, 10802, + 7089, 9063, 8405, 31, 6121, 10196, + 7089, 9063, 8405, 31, 6121, 10533, 5878, + 7089, 9063, 8405, 32, + 7089, 9063, 8405, 33, 6121, 8759, 9785, 10802, + 7089, 9063, 8405, 33, 6121, 10001, 8758, + 7089, 9063, 8405, 34, + 7089, 9063, 8405, 35, 6121, 1045, 6376, + 7089, 9063, 8405, 35, 6121, 1045, 6490, + 7089, 9063, 8405, 35, 6121, 1045, 6491, 721, 8432, + 7089, 9063, 8405, 35, 6121, 4877, 6490, + 7089, 9063, 8405, 35, 6121, 5878, + 7089, 9063, 8405, 35, 6121, 6378, + 7089, 9063, 8405, 35, 6121, 6546, + 7089, 9063, 8405, 35, 6121, 8153, 6874, + 7089, 9063, 8405, 35, 6121, 8758, + 7089, 9063, 8405, 35, 6121, 9072, + 7089, 9063, 8405, 35, 6121, 10267, 6516, + 7089, 9063, 8405, 35, 9642, + 7089, 9063, 8405, 36, + 7089, 9063, 8405, 37, 6121, 1045, 6376, + 7089, 9063, 8405, 37, 6121, 1045, 6490, + 7089, 9063, 8405, 37, 6121, 1045, 6491, 721, 1045, 6376, + 7089, 9063, 8405, 37, 6121, 6378, + 7089, 9063, 8405, 37, 6121, 6379, 721, 1045, 6376, + 7089, 9063, 8405, 37, 6121, 6546, + 7089, 9063, 8405, 37, 6121, 6547, 721, 1045, 6376, + 7089, 9063, 8405, 37, 6121, 6617, 6490, + 7089, 9063, 8405, 37, 6121, 9072, + 7089, 9063, 8405, 37, 6121, 11448, + 7089, 9063, 8405, 38, + 7089, 9063, 8405, 39, 6121, 1045, 6376, + 7089, 9063, 8405, 39, 6121, 1045, 6490, + 7089, 9063, 8405, 39, 6121, 4530, + 7089, 9063, 8405, 39, 6121, 4877, 6490, + 7089, 9063, 8405, 39, 6121, 6546, + 7089, 9063, 8405, 39, 6121, 6617, 6490, + 7089, 9063, 8405, 39, 6121, 8758, + 7089, 9063, 8405, 39, 6121, 9072, + 7089, 9063, 8405, 39, 6121, 10001, 8758, + 7089, 9063, 8405, 39, 6121, 11215, 4530, + 7089, 9063, 8405, 39, 6121, 11449, 6490, + 7089, 9063, 8405, 40, + 7089, 9063, 8405, 41, 760, + 7089, 9063, 8405, 41, 6121, 1045, 6490, + 7089, 9063, 8405, 41, 6121, 4531, 6376, + 7089, 9063, 8405, 41, 6121, 4536, + 7089, 9063, 8405, 41, 6121, 4537, 721, 1045, 6490, + 7089, 9063, 8405, 41, 6121, 4537, 721, 4531, 6376, + 7089, 9063, 8405, 41, 6121, 4537, 721, 6378, + 7089, 9063, 8405, 41, 6121, 4537, 721, 6874, + 7089, 9063, 8405, 41, 6121, 4537, 721, 7708, + 7089, 9063, 8405, 41, 6121, 5551, 6376, + 7089, 9063, 8405, 41, 6121, 6378, + 7089, 9063, 8405, 41, 6121, 6516, + 7089, 9063, 8405, 41, 6121, 6546, + 7089, 9063, 8405, 41, 6121, 6874, + 7089, 9063, 8405, 41, 6121, 7708, + 7089, 9063, 8405, 41, 6121, 7709, 721, 6378, + 7089, 9063, 8405, 41, 6121, 7709, 6490, + 7089, 9063, 8405, 41, 6121, 8153, 6378, + 7089, 9063, 8405, 41, 6121, 8153, 6874, + 7089, 9063, 8405, 41, 6121, 8432, + 7089, 9063, 8405, 41, 6121, 8433, 721, 10804, + 7089, 9063, 8405, 41, 6121, 8534, + 7089, 9063, 8405, 41, 6121, 10267, 6516, + 7089, 9063, 8405, 41, 6121, 10804, + 7089, 9063, 8405, 41, 6121, 10805, 721, 6378, + 7089, 9063, 8405, 41, 6121, 10805, 721, 6546, + 7089, 9063, 8405, 41, 6121, 10805, 721, 6874, + 7089, 9063, 8405, 41, 6121, 10805, 721, 8432, + 7089, 9063, 8405, 41, 6121, 10805, 6490, + 7089, 9063, 8405, 41, 6121, 11448, + 7089, 9063, 8405, 41, 6121, 11449, 6490, + 7089, 9063, 8405, 42, + 7089, 9063, 8405, 43, 6121, 1045, 6490, + 7089, 9063, 8405, 43, 6121, 4530, + 7089, 9063, 8405, 43, 6121, 7708, + 7089, 9063, 8405, 43, 6121, 10001, 8758, + 7089, 9063, 8405, 44, + 7089, 9063, 8405, 45, 6121, 1045, 6376, + 7089, 9063, 8405, 45, 6121, 1045, 6490, + 7089, 9063, 8405, 45, 6121, 4530, + 7089, 9063, 8405, 45, 6121, 6378, + 7089, 9063, 8405, 45, 6121, 6874, + 7089, 9063, 8405, 45, 6121, 10804, + 7089, 9063, 8405, 45, 6121, 11448, + 7089, 9063, 8405, 46, + 7089, 9063, 8405, 47, 6121, 1045, 6376, + 7089, 9063, 8405, 47, 6121, 10804, + 7089, 9063, 8405, 48, + 7089, 9063, 8405, 49, 6121, 1045, 6376, + 7089, 9063, 8405, 49, 6121, 1045, 6490, + 7089, 9063, 8405, 49, 6121, 4530, + 7089, 9063, 8405, 49, 6121, 4531, 6376, + 7089, 9063, 8405, 49, 6121, 4896, + 7089, 9063, 8405, 49, 6121, 6378, + 7089, 9063, 8405, 49, 6121, 6874, + 7089, 9063, 8405, 49, 6121, 7708, + 7089, 9063, 8405, 49, 6121, 8432, + 7089, 9063, 8405, 49, 6121, 8758, + 7089, 9063, 8405, 49, 6121, 10804, + 7089, 9063, 8405, 49, 6121, 11448, + 7089, 9063, 8405, 50, + 7089, 9063, 8405, 51, 6121, 1045, 6376, + 7089, 9063, 8405, 51, 6121, 1045, 6490, + 7089, 9063, 8405, 51, 6121, 4530, + 7089, 9063, 8405, 51, 6121, 4877, 6490, + 7089, 9063, 8405, 51, 6121, 6378, + 7089, 9063, 8405, 51, 6121, 6546, + 7089, 9063, 8405, 51, 6121, 8758, + 7089, 9063, 8405, 51, 6121, 10802, + 7089, 9063, 8405, 51, 6121, 11448, + 7089, 9063, 8405, 58, + 7089, 9063, 8405, 66, + 7089, 9063, 8405, 67, 6121, 6378, + 7089, 9063, 8405, 67, 6121, 8432, + 7089, 9063, 8405, 82, + 7089, 9063, 8405, 92, + 7089, 9063, 8405, 94, + 7089, 9063, 8405, 95, 6121, 11649, 760, + 7089, 9063, 8405, 98, + 7089, 9063, 8405, 156, + 7089, 9063, 8405, 157, 6121, 6546, + 7089, 9063, 8405, 186, + 7089, 9063, 8405, 282, + 7089, 9063, 8405, 342, + 7089, 9063, 8405, 406, + 7089, 9063, 8405, 432, + 7089, 9063, 8405, 440, + 7089, 9063, 8405, 450, + 7089, 9063, 8405, 578, + 7089, 9063, 8405, 620, + 7089, 9063, 8405, 912, + 7089, 9063, 8405, 1110, + 7089, 9063, 8405, 1124, + 7089, 9063, 8405, 1130, + 7089, 9063, 8405, 1138, + 7089, 9063, 8405, 1139, 6121, 6546, + 7089, 9063, 8405, 1139, 10488, + 7089, 9063, 8405, 2453, 9642, + 7089, 9063, 8405, 4389, 14, + 7089, 9063, 8405, 4404, + 7089, 9063, 8405, 4614, + 7089, 9063, 8405, 5385, 8, + 7089, 9063, 8405, 5385, 28, + 7089, 9063, 8405, 5965, 2540, + 7089, 9063, 8405, 5965, 2778, + 7089, 9063, 8405, 5965, 4200, + 7089, 9063, 8405, 6078, + 7089, 9063, 8405, 6138, + 7089, 9063, 8405, 6220, + 7089, 9063, 8405, 6406, + 7089, 9063, 8405, 6824, + 7089, 9063, 8405, 6960, + 7089, 9063, 8405, 7494, + 7089, 9063, 8405, 7519, 36, + 7089, 9063, 8405, 7593, 33, 6121, 4531, 5878, + 7089, 9063, 8405, 7692, + 7089, 9063, 8405, 7693, 6121, 8758, + 7089, 9063, 8405, 7693, 6121, 8759, 9785, 10802, + 7089, 9063, 8405, 8017, 22, + 7089, 9063, 8405, 8869, 0, + 7089, 9063, 8405, 8869, 22, + 7089, 9063, 8405, 8869, 24, + 7089, 9063, 8405, 8869, 42, + 7089, 9063, 8405, 8869, 9365, 12, + 7089, 9063, 8405, 8983, 6, + 7089, 9063, 8405, 9313, 5836, + 7089, 9063, 8405, 9365, 6, + 7089, 9063, 8405, 9365, 10, + 7089, 9063, 8405, 9365, 12, + 7089, 9063, 8405, 9365, 34, + 7089, 9063, 8405, 9365, 36, + 7089, 9063, 8405, 9365, 38, + 7089, 9063, 8405, 9808, + 7089, 9063, 8405, 10489, 5, 6121, 1044, + 7089, 9063, 8405, 10489, 8, + 7089, 9063, 8405, 10494, + 7089, 9063, 8405, 10640, + 7089, 9063, 8405, 10786, + 7089, 9063, 8405, 10787, 6121, 6616, + 7089, 9063, 8405, 11879, 50, + 7089, 9063, 8405, 12507, 42, + 7089, 9063, 8405, 12507, 344, + 7089, 9063, 8405, 12935, 710, + 7089, 9063, 8405, 12935, 3244, + 7089, 9063, 10301, 268, + 7089, 9063, 10301, 426, + 7089, 11261, 7593, 8405, 0, + 7089, 11261, 7593, 8405, 8, + 7089, 11261, 7593, 8405, 16, + 7089, 11261, 7593, 8405, 18, + 7089, 11261, 7593, 8405, 28, + 7089, 11261, 7593, 8405, 34, + 7089, 11261, 7593, 8405, 40, + 7089, 11261, 7593, 8405, 42, + 7089, 11261, 7593, 8405, 46, + 7089, 11261, 7593, 8405, 7494, + 7089, 11619, 8405, 17, 7112, + 7089, 11619, 8405, 9007, 24, + 7089, 11619, 8405, 10267, 24, + 7089, 11619, 8405, 10489, 10, + 7089, 11619, 8405, 10489, 30, + 7098, + 7101, 4849, 10637, 7533, 9051, 10380, + 7101, 7443, 10637, 7533, 9051, 10380, + 7101, 7512, + 7101, 10677, 760, + 7103, 5759, 1802, + 7103, 5759, 5620, + 7103, 5759, 11076, + 7103, 5759, 11130, + 7103, 6689, 2170, + 7103, 6689, 2540, + 7103, 6689, 2778, + 7103, 6689, 4200, + 7103, 6689, 4214, + 7103, 6689, 5190, + 7103, 6689, 6260, + 7103, 6689, 6722, + 7103, 6689, 7508, + 7103, 6689, 7694, + 7103, 7593, 8405, 306, + 7103, 7593, 8405, 332, + 7103, 7593, 8405, 364, + 7103, 7593, 8405, 392, + 7103, 7593, 8405, 462, + 7103, 7593, 8405, 510, + 7103, 7593, 8405, 556, + 7103, 7593, 8405, 2030, + 7103, 7593, 8405, 9870, + 7103, 7803, 5759, 0, + 7103, 7803, 5759, 8, + 7103, 7803, 5759, 16, + 7103, 7803, 5759, 28, + 7103, 7803, 5759, 40, + 7103, 7803, 5759, 72, + 7103, 7803, 5759, 92, + 7103, 7803, 5759, 162, + 7103, 7803, 5759, 440, + 7103, 8405, 100, + 7103, 8405, 116, + 7103, 8405, 138, + 7103, 8405, 216, + 7103, 8405, 236, + 7103, 8405, 292, + 7103, 8405, 306, + 7103, 8405, 332, + 7103, 8405, 364, + 7103, 8405, 392, + 7103, 8405, 462, + 7103, 8405, 510, + 7103, 8405, 524, + 7103, 8405, 556, + 7103, 8405, 622, + 7103, 8405, 652, + 7103, 8405, 792, + 7103, 8405, 884, + 7103, 8405, 996, + 7103, 8405, 1260, + 7103, 8405, 1512, + 7103, 8405, 1612, + 7103, 8405, 2030, + 7103, 8405, 2212, + 7103, 8405, 2516, + 7103, 8405, 2566, + 7103, 8405, 2678, + 7103, 8405, 3028, + 7103, 10469, 4926, + 7103, 11257, 8405, 510, + 7103, 11257, 8405, 622, + 7103, 11257, 8405, 652, + 7103, 12017, 4926, + 7103, 13033, 8404, + 7121, 2171, 8159, 6510, + 7121, 2171, 9615, 6510, + 7121, 4201, 9259, 6510, + 7121, 4389, 6510, + 7121, 4389, 8056, + 7121, 4389, 9367, 7821, 8056, + 7121, 4849, 10465, 9947, 730, + 7121, 4849, 10642, + 7121, 4849, 12857, 12901, 6434, + 7121, 6507, 10502, + 7121, 7443, 8077, 6121, 1044, + 7121, 7443, 8570, + 7121, 7443, 10465, 9947, 730, + 7121, 7443, 10513, 7821, 8744, + 7121, 7443, 10642, + 7121, 7443, 12857, 10763, 6434, + 7121, 7443, 12933, 7821, 8744, + 7121, 7509, 9259, 6510, + 7121, 7695, 9259, 6510, + 7121, 7695, 10467, 6510, + 7165, 5758, + 7173, 5758, + 7173, 5759, 275, 10642, + 7173, 5759, 6121, 1045, 6490, + 7173, 5759, 6121, 6617, 6376, + 7173, 5759, 6121, 8649, 4112, + 7173, 5759, 6121, 9279, 4112, + 7173, 7708, + 7199, 4205, 5758, + 7199, 7519, 5758, + 7199, 9491, 5758, + 7201, 7711, 10374, + 7201, 7768, + 7201, 7769, 10375, 6121, 1044, + 7201, 7769, 10375, 6121, 5444, + 7201, 7821, 10677, 760, + 7201, 8745, 7769, 10374, + 7201, 8745, 12493, 10374, + 7201, 9095, 1045, 10374, + 7201, 9095, 5445, 10374, + 7201, 9095, 7711, 10374, + 7201, 9437, 444, + 7201, 9437, 720, + 7201, 9610, + 7201, 10780, + 7201, 11262, + 7201, 12492, + 7202, + 7209, 5758, + 7271, 4153, 721, 7607, 6113, 6434, + 7271, 4153, 6434, + 7271, 4153, 6435, 721, 7607, 4153, 6434, + 7271, 4153, 6435, 6121, 4530, + 7271, 4153, 6435, 9967, 7271, 6113, 6434, + 7271, 4153, 6435, 9967, 7607, 4153, 6434, + 7271, 4153, 6505, 6434, + 7271, 4153, 7821, 6434, + 7271, 4153, 8153, 6434, + 7271, 6113, 721, 7607, 4153, 6434, + 7271, 6113, 6434, + 7271, 6113, 6435, 569, 4895, 760, + 7271, 6113, 6435, 569, 8076, + 7271, 6113, 6435, 721, 7271, 4153, 6434, + 7271, 6113, 6435, 6121, 4530, + 7271, 6113, 6435, 9967, 7271, 4153, 6434, + 7271, 6113, 6505, 6434, + 7271, 6113, 7821, 6434, + 7271, 6113, 8153, 6434, + 7309, 7609, 4926, + 7309, 8405, 444, + 7309, 8405, 602, + 7309, 8405, 2174, + 7309, 8405, 3236, + 7309, 8405, 3952, + 7309, 8405, 3982, + 7309, 8405, 4348, + 7309, 8405, 4600, + 7309, 8405, 4900, + 7309, 8405, 5018, + 7309, 8405, 5192, + 7309, 8405, 5604, + 7309, 8405, 5628, + 7309, 8405, 6044, + 7309, 8405, 6488, + 7309, 8405, 6558, + 7309, 8405, 6774, + 7309, 8405, 7356, + 7309, 8405, 7712, + 7309, 8405, 8752, + 7309, 8405, 9246, + 7309, 8405, 9248, + 7309, 8405, 9368, + 7309, 8405, 9504, + 7309, 8405, 10662, + 7309, 8405, 12008, + 7309, 9283, 4926, + 7309, 10489, 9283, 4926, + 7321, 73, 8399, 4926, + 7321, 93, 8399, 4926, + 7321, 5759, 7282, + 7321, 5759, 8916, + 7321, 5759, 9824, + 7321, 5759, 9870, + 7321, 5759, 9904, + 7321, 5759, 11900, + 7321, 6689, 2170, + 7321, 6689, 2540, + 7321, 6689, 2778, + 7321, 6689, 4200, + 7321, 6689, 4214, + 7321, 6689, 5190, + 7321, 6689, 6260, + 7321, 6689, 6722, + 7321, 6689, 7508, + 7321, 6689, 7694, + 7321, 7803, 5759, 8, + 7321, 7803, 5759, 16, + 7321, 7803, 5759, 28, + 7321, 7803, 5759, 40, + 7321, 7803, 5759, 58, + 7321, 7803, 5759, 72, + 7321, 7803, 5759, 92, + 7321, 7803, 5759, 266, + 7321, 7803, 5759, 606, + 7321, 7803, 5759, 9827, 22, + 7321, 7803, 5759, 9827, 34, + 7321, 7803, 5759, 9827, 344, + 7321, 7803, 5759, 9827, 518, + 7321, 8322, + 7321, 8405, 0, + 7321, 8405, 8, + 7321, 8405, 16, + 7321, 8405, 28, + 7321, 8405, 40, + 7321, 8405, 58, + 7321, 8405, 72, + 7321, 8405, 92, + 7321, 8405, 100, + 7321, 8405, 116, + 7321, 8405, 138, + 7321, 8405, 216, + 7321, 8405, 236, + 7321, 8405, 266, + 7321, 8405, 292, + 7321, 8405, 306, + 7321, 8405, 332, + 7321, 8405, 364, + 7321, 8405, 392, + 7321, 8405, 462, + 7321, 8405, 510, + 7321, 8405, 524, + 7321, 8405, 556, + 7321, 8405, 606, + 7321, 8405, 610, + 7321, 8405, 622, + 7321, 8405, 652, + 7321, 8405, 792, + 7321, 8405, 884, + 7321, 8405, 974, + 7321, 8405, 996, + 7321, 8405, 1260, + 7321, 8405, 1512, + 7321, 8405, 1612, + 7321, 8405, 1796, + 7321, 8405, 2030, + 7321, 8405, 2076, + 7321, 8405, 2126, + 7321, 8405, 2212, + 7321, 8405, 2410, + 7321, 8405, 2438, + 7321, 8405, 2516, + 7321, 8405, 2566, + 7321, 8405, 2678, + 7321, 8405, 2746, + 7321, 8405, 3110, + 7321, 8405, 4016, + 7321, 8405, 5994, + 7321, 8405, 9827, 22, + 7321, 8405, 9827, 34, + 7321, 8405, 9827, 344, + 7321, 8405, 9827, 518, + 7325, 5758, + 7349, 8774, + 7377, 429, 10263, 5758, + 7380, + 7387, 5758, + 7390, + 7393, 8677, 8774, + 7424, + 7443, 731, 12473, 9050, + 7443, 1809, 11715, 9050, + 7443, 2171, 8159, 6510, + 7443, 4197, 5878, + 7443, 4389, 6505, 8056, + 7443, 4389, 6510, + 7443, 5876, + 7443, 6408, + 7443, 6409, 6121, 730, + 7443, 6409, 6121, 10959, 8963, 6434, + 7443, 6409, 8151, 12877, 8450, + 7443, 6409, 9050, + 7443, 6409, 9051, 6121, 1044, + 7443, 6409, 9817, 6121, 8744, + 7443, 6409, 12877, 8450, + 7443, 6435, 6121, 7593, 8056, + 7443, 6435, 6121, 9095, 5444, + 7443, 6505, 10637, 7533, 9050, + 7443, 6505, 11677, 9050, + 7443, 6627, 9050, + 7443, 6627, 9051, 7121, 4530, + 7443, 6627, 9051, 7773, 4530, + 7443, 6627, 9051, 8473, 7370, + 7443, 6792, + 7443, 7327, 4676, + 7443, 7821, 6627, 9050, + 7443, 7821, 8077, 9050, + 7443, 7821, 8745, 9050, + 7443, 7821, 10637, 7533, 9050, + 7443, 7821, 11677, 9050, + 7443, 7821, 12114, + 7443, 8077, 9050, + 7443, 8151, 12877, 9050, + 7443, 8153, 6409, 9050, + 7443, 8153, 6435, 6121, 9645, 4398, + 7443, 8153, 8933, 6778, + 7443, 8153, 11195, 4926, + 7443, 8153, 12114, + 7443, 8521, 8191, 11793, 9610, + 7443, 8631, 10371, 9050, + 7443, 8717, 11195, 4926, + 7443, 8745, 9050, + 7443, 8745, 9051, 6121, 5935, 275, 2725, 8076, + 7443, 8745, 9051, 6121, 5935, 275, 8005, 8076, + 7443, 8745, 9051, 6121, 7412, + 7443, 8745, 9051, 6121, 10666, + 7443, 8745, 9051, 7121, 8076, + 7443, 8745, 9051, 7773, 8076, + 7443, 8745, 9051, 10982, + 7443, 8933, 6778, + 7443, 9074, + 7443, 10493, 753, 10794, + 7443, 10523, 41, 9050, + 7443, 10637, 7533, 9050, + 7443, 10642, + 7443, 10643, 6377, 4849, 10642, + 7443, 10677, 761, 6121, 7412, + 7443, 10677, 827, 4876, + 7443, 11793, 9610, + 7443, 12114, + 7443, 12115, 7121, 4530, + 7443, 12115, 7773, 4530, + 7443, 12115, 10982, + 7443, 12877, 9050, + 7443, 13029, 9050, + 7453, 89, 5758, + 7453, 7765, 5758, + 7453, 9167, 9679, 5758, + 7453, 9513, 2170, + 7453, 9513, 2171, 9344, + 7453, 9513, 2171, 9345, 10624, + 7453, 9513, 2171, 10624, + 7453, 9513, 2171, 10625, 5, 6, + 7453, 9513, 2540, + 7453, 9513, 2541, 4839, 4212, + 7453, 9513, 2670, + 7453, 9513, 2671, 10624, + 7453, 9513, 2778, + 7453, 9513, 4200, + 7453, 9513, 4201, 9344, + 7453, 9513, 4201, 10624, + 7453, 9513, 4214, + 7453, 9513, 5190, + 7453, 9513, 6722, + 7453, 9513, 6784, + 7453, 9513, 6785, 6715, 4212, + 7453, 9513, 6785, 10624, + 7453, 9513, 7508, + 7453, 9513, 7694, + 7453, 9513, 8162, + 7453, 9513, 8874, + 7453, 9513, 10489, 2171, 9344, + 7453, 9675, 5758, + 7453, 9679, 5758, + 7453, 9691, 5758, + 7453, 9995, 5758, + 7453, 10511, 5758, + 7453, 10757, 5758, + 7453, 10961, 5758, + 7453, 11193, 5758, + 7453, 11797, 5758, + 7467, 6623, 12132, + 7467, 7935, 8774, + 7467, 8405, 4, + 7467, 8405, 6, + 7467, 8405, 8, + 7467, 8405, 12, + 7467, 8405, 28, + 7467, 8405, 32, + 7467, 8405, 42, + 7467, 8405, 44, + 7467, 8405, 46, + 7467, 8405, 48, + 7467, 8405, 50, + 7467, 8405, 63, 0, + 7467, 8405, 426, + 7467, 8405, 438, + 7467, 8405, 447, 28, + 7467, 8405, 662, + 7467, 8405, 878, + 7467, 8405, 1090, + 7467, 8405, 1110, + 7467, 8405, 1130, + 7467, 8405, 1220, + 7467, 8405, 1244, + 7467, 8405, 1486, + 7467, 8405, 1494, + 7467, 8405, 3230, + 7467, 8405, 3840, + 7467, 8405, 4185, 4189, 199, 10, + 7467, 8405, 4265, 4381, 12, + 7467, 8405, 4617, 283, 1501, 16, + 7467, 8405, 4625, 1114, + 7467, 8405, 4731, 20, + 7467, 8405, 5828, + 7467, 8405, 6059, 603, 40, + 7467, 8405, 6401, 6738, + 7467, 8405, 6415, 0, + 7467, 8405, 6554, + 7467, 8405, 6635, 3979, 6, + 7467, 8405, 6721, 167, 8, + 7467, 8405, 6891, 14, + 7467, 8405, 6997, 18, + 7467, 8405, 7028, + 7467, 8405, 7419, 2383, 5533, 34, + 7467, 8405, 7567, 13213, 36, + 7467, 8405, 7719, 2699, 2789, 38, + 7467, 8405, 7835, 6139, 44, + 7467, 8405, 8283, 14, + 7467, 8405, 8312, + 7467, 8405, 8391, 4829, 4891, 22, + 7467, 8405, 8441, 1861, 24, + 7467, 8405, 8501, 2129, 5057, 26, + 7467, 8405, 8540, + 7467, 8405, 8579, 8575, 30, + 7467, 8405, 8727, 36, + 7467, 8405, 9132, + 7467, 8405, 9543, 6759, 28, + 7467, 8405, 9911, 6495, 9047, 2, + 7467, 8405, 10132, + 7467, 8405, 10134, + 7467, 8405, 10136, + 7467, 8405, 10627, 7699, 7692, + 7467, 8405, 12482, + 7467, 8405, 13013, 0, + 7467, 8405, 13014, + 7467, 8405, 13057, 66, + 7467, 8405, 13058, + 7467, 8405, 13073, 28, + 7467, 8405, 13075, 36, + 7467, 8405, 13077, 38, + 7467, 8405, 13211, 28, + 7467, 8405, 13227, 24, + 7467, 8405, 13229, 26, + 7467, 8405, 13339, 24, + 7467, 8405, 13377, 14, + 7467, 8405, 13391, 14, + 7467, 8405, 13399, 2, + 7467, 8717, 12132, + 7467, 9909, 8774, + 7467, 10349, 12132, + 7467, 10657, 8774, + 7469, 5758, + 7551, 601, 5876, + 7551, 601, 5877, 6121, 10666, + 7551, 601, 5877, 6377, 7551, 4117, 5876, + 7551, 4117, 5876, + 7551, 4117, 5877, 6121, 9546, + 7551, 4849, 5876, + 7551, 11765, 6435, 6377, 11097, 6434, + 7579, 721, 11466, + 7588, + 7593, 175, 3992, + 7593, 2857, 6121, 10666, + 7593, 4223, 5836, + 7593, 4849, 6627, 9050, + 7593, 4849, 10637, 7533, 9050, + 7593, 4849, 12114, + 7593, 5445, 5758, + 7593, 6610, + 7593, 6616, + 7593, 7443, 6627, 9050, + 7593, 7443, 10637, 7533, 9050, + 7593, 7443, 12114, + 7593, 7453, 9513, 2170, + 7593, 7453, 9513, 2171, 9344, + 7593, 7453, 9513, 2171, 10624, + 7593, 7453, 9513, 2540, + 7593, 7453, 9513, 2670, + 7593, 7453, 9513, 2778, + 7593, 7453, 9513, 4200, + 7593, 7453, 9513, 4201, 9344, + 7593, 7453, 9513, 4214, + 7593, 7453, 9513, 5190, + 7593, 7453, 9513, 6722, + 7593, 7453, 9513, 6784, + 7593, 7453, 9513, 7508, + 7593, 7453, 9513, 7694, + 7593, 7453, 9513, 8162, + 7593, 7453, 9513, 8874, + 7593, 7708, + 7593, 8129, 5758, + 7593, 8167, 5758, + 7593, 8525, 5758, + 7593, 9263, 428, + 7593, 9263, 429, 6121, 9546, + 7593, 9263, 429, 6121, 10677, 761, 91, 1109, 429, 11649, 8758, + 7593, 9581, 5758, + 7593, 9633, 9718, + 7593, 9898, + 7593, 9959, 89, 8466, + 7593, 9959, 6121, 9546, + 7593, 9959, 6121, 10677, 761, 91, 1109, 429, 11649, 8758, + 7593, 10469, 4926, + 7593, 10708, + 7593, 11099, 5758, + 7593, 11224, + 7593, 11451, 90, + 7593, 12017, 4926, + 7593, 12043, 6616, + 7593, 12473, 5758, + 7593, 12478, + 7595, 9610, + 7598, + 7605, 11201, 10782, + 7607, 4153, 6434, + 7607, 4153, 6435, 569, 8076, + 7607, 4153, 6435, 721, 7607, 6113, 6434, + 7607, 4153, 6435, 6121, 4530, + 7607, 4153, 6435, 9967, 7271, 4153, 6434, + 7607, 4153, 6505, 6434, + 7607, 4153, 7821, 6434, + 7607, 4153, 8153, 6434, + 7607, 6113, 6434, + 7607, 6113, 6435, 721, 7271, 6113, 6434, + 7607, 6113, 6435, 6121, 4530, + 7607, 6113, 6505, 6434, + 7607, 6113, 7821, 6434, + 7607, 6113, 8153, 6434, + 7608, + 7619, 6505, 11765, 6434, + 7627, 429, 8298, + 7627, 429, 11886, + 7659, 3992, + 7665, 89, 6377, 5758, + 7665, 93, 8399, 4926, + 7665, 436, + 7665, 973, 5758, + 7665, 5759, 8916, + 7665, 5759, 9824, + 7665, 5759, 9870, + 7665, 6197, 5758, + 7665, 6673, 5758, + 7665, 6689, 2170, + 7665, 6689, 2540, + 7665, 6689, 2778, + 7665, 6689, 4200, + 7665, 6689, 4214, + 7665, 6689, 5190, + 7665, 6689, 6260, + 7665, 6689, 6722, + 7665, 6689, 7508, + 7665, 6689, 7694, + 7665, 7183, 5758, + 7665, 7469, 5758, + 7665, 7803, 5759, 8, + 7665, 7803, 5759, 16, + 7665, 7803, 5759, 28, + 7665, 7803, 5759, 40, + 7665, 7803, 5759, 58, + 7665, 7803, 5759, 72, + 7665, 7803, 5759, 92, + 7665, 7803, 5759, 162, + 7665, 7803, 5759, 266, + 7665, 7803, 5759, 440, + 7665, 7803, 5759, 606, + 7665, 8081, 5758, + 7665, 8405, 0, + 7665, 8405, 8, + 7665, 8405, 16, + 7665, 8405, 28, + 7665, 8405, 40, + 7665, 8405, 58, + 7665, 8405, 72, + 7665, 8405, 92, + 7665, 8405, 116, + 7665, 8405, 162, + 7665, 8405, 236, + 7665, 8405, 266, + 7665, 8405, 292, + 7665, 8405, 306, + 7665, 8405, 332, + 7665, 8405, 364, + 7665, 8405, 392, + 7665, 8405, 440, + 7665, 8405, 462, + 7665, 8405, 510, + 7665, 8405, 524, + 7665, 8405, 556, + 7665, 8405, 606, + 7665, 8405, 610, + 7665, 8405, 652, + 7665, 8405, 1796, + 7665, 8405, 2030, + 7665, 8405, 2076, + 7665, 8405, 2126, + 7665, 8405, 2438, + 7665, 8405, 2516, + 7665, 8405, 2566, + 7665, 8405, 2746, + 7665, 8405, 4888, + 7665, 8405, 5234, + 7665, 8525, 2171, 9344, + 7665, 8525, 2171, 10624, + 7665, 8525, 2670, + 7665, 8525, 5758, + 7681, 4103, 2091, 6764, + 7681, 8174, + 7695, 1045, 12132, + 7695, 11097, 7944, + 7695, 11765, 7944, + 7695, 11913, 8167, 7570, + 7695, 11943, 6408, + 7707, 11861, 11242, + 7708, + 7709, 6121, 1045, 6376, + 7709, 6121, 1045, 6490, + 7709, 6121, 5551, 6376, + 7709, 10374, + 7709, 10375, 6121, 1045, 6376, + 7709, 10375, 6121, 8649, 4112, + 7709, 10375, 6377, 11097, 6434, + 7709, 10375, 6377, 11765, 6434, + 7711, 6121, 4849, 4389, 6504, + 7711, 6121, 7443, 4389, 6504, + 7729, 8654, + 7733, 4927, 5758, + 7768, + 7769, 6121, 7173, 5758, + 7769, 6121, 9437, 444, + 7769, 6121, 9546, + 7769, 6377, 761, 6377, 12492, + 7769, 6377, 12492, + 7769, 7991, 721, 8329, 6121, 7768, + 7773, 2171, 8159, 6510, + 7773, 4389, 6510, + 7773, 4389, 8056, + 7773, 4389, 9367, 7821, 8056, + 7773, 4849, 445, 7121, 7443, 6627, 9051, 9664, + 7773, 4849, 8077, 6121, 1044, + 7773, 4849, 10465, 9947, 730, + 7773, 4849, 10642, + 7773, 6507, 10502, + 7773, 7443, 445, 7121, 4849, 6627, 9051, 9664, + 7773, 7443, 8570, + 7773, 7443, 10465, 9947, 730, + 7773, 7443, 10513, 7821, 8744, + 7773, 7443, 10642, + 7773, 7443, 12933, 7821, 8744, + 7794, + 7798, + 7810, + 7819, 429, 8112, + 7821, 601, 10441, 6992, + 7821, 2048, + 7821, 2587, 6121, 5528, + 7821, 3949, 5842, + 7821, 4117, 10441, 6992, + 7821, 4202, + 7821, 4215, 9601, 5830, + 7821, 4849, 10441, 6992, + 7821, 5830, + 7821, 6081, 7593, 8744, + 7821, 6571, 4760, + 7821, 6571, 5404, + 7821, 6571, 5564, + 7821, 6571, 7410, + 7821, 6571, 7996, + 7821, 6571, 8368, + 7821, 6907, 5842, + 7821, 7085, 8744, + 7821, 7443, 10441, 6992, + 7821, 7547, 7370, + 7821, 7593, 5830, + 7821, 7593, 8744, + 7821, 7593, 9438, + 7821, 7611, 5842, + 7821, 8022, + 7821, 8056, + 7821, 8057, 6121, 1045, 7442, + 7821, 8057, 6121, 2779, 4112, + 7821, 8057, 6121, 4117, 6434, + 7821, 8057, 6121, 7121, 4849, 10464, + 7821, 8057, 6121, 7121, 7443, 10464, + 7821, 8057, 6121, 7773, 4849, 10464, + 7821, 8057, 6121, 7773, 7443, 10464, + 7821, 8463, 5830, + 7821, 8463, 7593, 8744, + 7821, 8463, 8744, + 7821, 8463, 9158, + 7821, 8463, 9438, + 7821, 8691, 1044, + 7821, 8744, + 7821, 8745, 6121, 7121, 4849, 10464, + 7821, 8745, 6121, 7121, 7443, 10464, + 7821, 8745, 6121, 7773, 4849, 10464, + 7821, 8745, 6121, 7773, 7443, 10464, + 7821, 8745, 6121, 8037, 10677, 4876, + 7821, 8745, 6121, 9645, 9118, + 7821, 8745, 6121, 10677, 10739, 4876, + 7821, 8745, 6121, 11097, 5934, + 7821, 8745, 6121, 11765, 5934, + 7821, 8745, 11461, 6505, 7593, 8744, + 7821, 9158, + 7821, 9159, 5842, + 7821, 9159, 6121, 9079, 1044, + 7821, 9159, 11461, 6505, 7593, 9158, + 7821, 9338, + 7821, 9711, 4178, + 7821, 10143, 1860, + 7821, 10143, 4760, + 7821, 10194, + 7821, 10209, 4178, + 7821, 10420, + 7821, 10502, + 7821, 10643, 11461, 7593, 7821, 10642, + 7821, 10677, 760, + 7821, 10677, 9264, + 7821, 10677, 11202, + 7821, 11036, + 7821, 11202, + 7821, 11354, + 7821, 11364, + 7821, 11649, 9264, + 7821, 12383, 7593, 10642, + 7821, 12383, 10642, + 7821, 12383, 10643, 6121, 1044, + 7821, 12917, 9158, + 7821, 12917, 9159, 6121, 11097, 5934, + 7821, 12917, 9159, 6121, 11765, 5934, + 7821, 12931, 7593, 10642, + 7821, 12931, 10642, + 7821, 12967, 7593, 10642, + 7821, 12967, 9602, + 7821, 12967, 10642, + 7821, 12984, + 7821, 13067, 7593, 10642, + 7821, 13067, 9602, + 7821, 13067, 10420, + 7821, 13067, 10642, + 7911, 1049, 9467, 6791, 9748, + 7911, 6129, 11229, 1044, + 7911, 6129, 11229, 4876, + 7911, 6569, 4926, + 7911, 8423, 9467, 6791, 9748, + 7911, 8525, 2170, + 7911, 8525, 2171, 9344, + 7911, 8525, 2171, 10624, + 7911, 8525, 2540, + 7911, 8525, 2541, 9344, + 7911, 8525, 2541, 10624, + 7911, 8525, 2670, + 7911, 8525, 2671, 10624, + 7911, 8525, 2778, + 7911, 8525, 2779, 9344, + 7911, 8525, 2779, 10624, + 7911, 8525, 4200, + 7911, 8525, 4201, 9344, + 7911, 8525, 4201, 10624, + 7911, 8525, 4214, + 7911, 8525, 4215, 9344, + 7911, 8525, 4215, 10624, + 7911, 8525, 5190, + 7911, 8525, 5191, 9344, + 7911, 8525, 5191, 10624, + 7911, 8525, 6722, + 7911, 8525, 6723, 9344, + 7911, 8525, 6723, 10624, + 7911, 8525, 6784, + 7911, 8525, 6785, 10624, + 7911, 8525, 6804, + 7911, 8525, 6805, 10624, + 7911, 8525, 7508, + 7911, 8525, 7509, 9344, + 7911, 8525, 7509, 10624, + 7911, 8525, 7576, + 7911, 8525, 7577, 10624, + 7911, 8525, 7694, + 7911, 8525, 7695, 9344, + 7911, 8525, 7695, 10624, + 7911, 8525, 8160, + 7911, 8525, 8161, 10624, + 7911, 8525, 8514, + 7911, 8525, 8515, 10624, + 7911, 8525, 8820, + 7911, 8525, 8821, 10624, + 7911, 8525, 8876, + 7911, 8525, 8877, 10624, + 7911, 8525, 9672, + 7911, 8525, 9673, 10624, + 7911, 8931, 3717, 6052, + 7911, 8931, 6791, 9748, + 7911, 8931, 7687, 9748, + 7911, 8931, 8233, 9748, + 7911, 8931, 8681, 9748, + 7911, 9467, 7687, 9748, + 7911, 9467, 8681, 9748, + 7919, 6741, 445, 6741, 568, + 7919, 6741, 568, + 7919, 6741, 569, 6121, 11449, 7908, + 7922, + 7931, 1109, 429, 3288, + 7931, 2396, + 7931, 3997, 11228, + 7931, 4201, 9601, 5830, + 7931, 4223, 5836, + 7931, 4927, 5241, 8260, + 7931, 5759, 5521, 8995, 3262, + 7931, 5759, 7176, + 7931, 5759, 7476, + 7931, 5759, 7486, + 7931, 5759, 7917, 9894, + 7931, 5759, 8715, 10708, + 7931, 5759, 8715, 12523, 1894, + 7931, 5759, 11350, + 7931, 5759, 12137, 7916, + 7931, 5759, 12159, 7917, 11396, + 7931, 5879, 10204, + 7931, 6616, + 7931, 6644, + 7931, 6645, 8461, 4212, + 7931, 6645, 10275, 4212, + 7931, 6731, 8037, 1809, 5836, + 7931, 6731, 8037, 4423, 5836, + 7931, 6772, + 7931, 6773, 6121, 2779, 4112, + 7931, 6773, 8461, 4212, + 7931, 6773, 10275, 4212, + 7931, 6895, 6376, + 7931, 6895, 6490, + 7931, 7026, + 7931, 7027, 8461, 4212, + 7931, 7027, 10275, 4212, + 7931, 7377, 429, 8658, + 7931, 7593, 1809, 4942, + 7931, 7593, 1809, 5648, + 7931, 7593, 2918, + 7931, 7593, 3052, + 7931, 7593, 4423, 1739, 3244, + 7931, 7593, 4423, 2640, + 7931, 7593, 4423, 3052, + 7931, 7593, 4423, 4630, + 7931, 7593, 4423, 4943, 9363, 4212, + 7931, 7593, 4423, 4943, 10275, 4212, + 7931, 7593, 4423, 5240, + 7931, 7593, 4423, 5648, + 7931, 7593, 4423, 6254, + 7931, 7593, 4423, 7124, + 7931, 7593, 4423, 7695, 4112, + 7931, 7593, 4423, 9185, 4399, 429, 4736, + 7931, 7593, 4423, 9645, 6260, + 7931, 7593, 4423, 9807, 12139, 6260, + 7931, 7593, 4423, 10301, 2285, 6121, 1739, 6121, 3245, 9448, + 7931, 7593, 4423, 10301, 2485, 6121, 1739, 6121, 3245, 9448, + 7931, 7593, 4423, 10301, 3245, 6121, 1739, 6121, 3052, + 7931, 7593, 6644, + 7931, 7593, 6772, + 7931, 7593, 7026, + 7931, 7633, 429, 2451, 173, 4424, + 7931, 7650, + 7931, 7651, 8461, 4212, + 7931, 7651, 10275, 4212, + 7931, 7803, 5759, 1045, 6490, + 7931, 7803, 5759, 7593, 43, 6376, + 7931, 7803, 5759, 10267, 7593, 43, 6376, + 7931, 8405, 8, + 7931, 8405, 9, 6789, 4212, + 7931, 8405, 9, 8461, 4212, + 7931, 8405, 9, 9363, 4212, + 7931, 8405, 9, 10275, 4212, + 7931, 8405, 40, + 7931, 8405, 41, 6121, 6895, 6376, + 7931, 8405, 41, 6121, 6895, 6377, 10275, 4212, + 7931, 8405, 41, 6789, 4212, + 7931, 8405, 41, 10275, 4212, + 7931, 8405, 66, + 7931, 8405, 400, + 7931, 8405, 401, 6789, 4212, + 7931, 8405, 401, 8461, 4212, + 7931, 8405, 401, 9363, 4212, + 7931, 8405, 401, 10275, 4212, + 7931, 8405, 426, + 7931, 8405, 427, 6789, 4212, + 7931, 8405, 427, 10275, 4212, + 7931, 8405, 612, + 7931, 8405, 613, 6789, 4212, + 7931, 8405, 613, 10275, 4212, + 7931, 8405, 664, + 7931, 8405, 665, 6789, 4212, + 7931, 8405, 665, 10275, 4212, + 7931, 8405, 710, + 7931, 8405, 711, 6121, 2779, 4113, 6376, + 7931, 8405, 711, 6121, 2779, 4113, 11877, 6376, + 7931, 8405, 711, 6121, 7695, 4113, 6376, + 7931, 8405, 711, 6121, 7695, 4113, 10441, 10959, 6376, + 7931, 8405, 711, 6789, 4212, + 7931, 8405, 711, 8461, 4212, + 7931, 8405, 711, 9363, 4212, + 7931, 8405, 711, 10275, 4212, + 7931, 8405, 780, + 7931, 8405, 781, 6121, 1045, 6491, 721, 7695, 4113, 6376, + 7931, 8405, 781, 6121, 2779, 4113, 6491, 721, 1045, 6376, + 7931, 8405, 781, 6121, 7593, 42, + 7931, 8405, 781, 6121, 7695, 4113, 10441, 9811, 6490, + 7931, 8405, 781, 6121, 7695, 4113, 10441, 9811, 6491, 721, 2779, 4113, 6376, + 7931, 8405, 781, 6121, 7695, 4113, 12477, 6490, + 7931, 8405, 781, 6121, 10267, 7593, 43, 6490, + 7931, 8405, 781, 6789, 4212, + 7931, 8405, 781, 8461, 4212, + 7931, 8405, 781, 9363, 4212, + 7931, 8405, 781, 10275, 4212, + 7931, 8405, 956, + 7931, 8405, 957, 6121, 1045, 6490, + 7931, 8405, 957, 6789, 4212, + 7931, 8405, 957, 8461, 4212, + 7931, 8405, 957, 9363, 4212, + 7931, 8405, 957, 10275, 4212, + 7931, 8405, 960, + 7931, 8405, 961, 6121, 1045, 6490, + 7931, 8405, 961, 6121, 1045, 6491, 721, 7593, 2640, + 7931, 8405, 961, 6121, 2779, 4113, 11877, 6491, 721, 7593, 2640, + 7931, 8405, 961, 6121, 4215, 4113, 6376, + 7931, 8405, 961, 6121, 5550, + 7931, 8405, 961, 6121, 7695, 4113, 6377, 10958, + 7931, 8405, 961, 6121, 10267, 42, + 7931, 8405, 961, 6121, 10267, 7593, 43, 6490, + 7931, 8405, 961, 6789, 4212, + 7931, 8405, 961, 10275, 4212, + 7931, 8405, 1056, + 7931, 8405, 1057, 6789, 4212, + 7931, 8405, 1057, 10275, 4212, + 7931, 8405, 1152, + 7931, 8405, 1153, 6121, 1045, 6490, + 7931, 8405, 1153, 6121, 1045, 7189, 6490, + 7931, 8405, 1153, 6121, 2779, 4113, 6490, + 7931, 8405, 1153, 6121, 7695, 4113, 6490, + 7931, 8405, 1153, 6121, 7695, 4113, 10441, 9811, 6490, + 7931, 8405, 1153, 6789, 4212, + 7931, 8405, 1153, 8461, 4212, + 7931, 8405, 1153, 9363, 4212, + 7931, 8405, 1153, 10275, 4212, + 7931, 8405, 1208, + 7931, 8405, 1209, 6121, 2779, 4113, 6490, + 7931, 8405, 1209, 6121, 5550, + 7931, 8405, 1209, 6121, 7695, 4113, 6376, + 7931, 8405, 1209, 6789, 4212, + 7931, 8405, 1209, 8461, 4212, + 7931, 8405, 1209, 9363, 4212, + 7931, 8405, 1209, 10275, 4212, + 7931, 8405, 1342, + 7931, 8405, 1343, 6121, 2779, 4113, 6376, + 7931, 8405, 1343, 6121, 2779, 4113, 10677, 6376, + 7931, 8405, 1343, 6121, 6895, 6376, + 7931, 8405, 1343, 6121, 7593, 7931, 8405, 2641, 721, 2779, 4112, + 7931, 8405, 1343, 6121, 7593, 7931, 8405, 2641, 6376, + 7931, 8405, 1343, 6121, 7593, 7931, 8405, 2641, 6490, + 7931, 8405, 1343, 6121, 7695, 4113, 6376, + 7931, 8405, 1343, 6121, 7695, 4113, 10441, 9811, 6490, + 7931, 8405, 1343, 6121, 10173, 12403, 6689, 4215, 6490, + 7931, 8405, 1343, 6789, 4212, + 7931, 8405, 1343, 8461, 4212, + 7931, 8405, 1343, 9363, 4212, + 7931, 8405, 1343, 10275, 4212, + 7931, 8405, 1358, + 7931, 8405, 1359, 4340, + 7931, 8405, 1359, 4341, 6121, 6895, 6376, + 7931, 8405, 1359, 4341, 6789, 4212, + 7931, 8405, 1359, 4341, 8461, 4212, + 7931, 8405, 1359, 4341, 9363, 4212, + 7931, 8405, 1359, 4341, 10275, 4212, + 7931, 8405, 1359, 6121, 3053, 6376, + 7931, 8405, 1359, 6121, 3053, 6377, 6789, 4212, + 7931, 8405, 1359, 6121, 3053, 6377, 10275, 4212, + 7931, 8405, 1359, 6121, 10267, 42, + 7931, 8405, 1359, 6789, 4212, + 7931, 8405, 1359, 8461, 4212, + 7931, 8405, 1359, 9363, 4212, + 7931, 8405, 1359, 10275, 4212, + 7931, 8405, 1359, 11948, + 7931, 8405, 1359, 11949, 6789, 4212, + 7931, 8405, 1359, 11949, 8461, 4212, + 7931, 8405, 1359, 11949, 9363, 4212, + 7931, 8405, 1359, 11949, 10275, 4212, + 7931, 8405, 1508, + 7931, 8405, 1509, 6789, 4212, + 7931, 8405, 1509, 10275, 4212, + 7931, 8405, 1578, + 7931, 8405, 1579, 6121, 1045, 6376, + 7931, 8405, 1579, 6121, 2779, 4113, 6376, + 7931, 8405, 1579, 6121, 5550, + 7931, 8405, 1579, 6121, 7695, 4113, 6490, + 7931, 8405, 1579, 6789, 4212, + 7931, 8405, 1579, 8461, 4212, + 7931, 8405, 1579, 9363, 4212, + 7931, 8405, 1579, 10275, 4212, + 7931, 8405, 1738, + 7931, 8405, 1739, 6121, 760, + 7931, 8405, 1739, 6121, 1045, 6376, + 7931, 8405, 1739, 6121, 7593, 42, + 7931, 8405, 1739, 6121, 7695, 4113, 6376, + 7931, 8405, 1739, 6121, 7695, 4113, 6490, + 7931, 8405, 1739, 6789, 4212, + 7931, 8405, 1739, 8461, 4212, + 7931, 8405, 1739, 9363, 4212, + 7931, 8405, 1739, 10275, 4212, + 7931, 8405, 2206, + 7931, 8405, 2207, 6789, 4212, + 7931, 8405, 2207, 8461, 4212, + 7931, 8405, 2207, 9363, 4212, + 7931, 8405, 2207, 10275, 4212, + 7931, 8405, 2284, + 7931, 8405, 2285, 6121, 1045, 6376, + 7931, 8405, 2285, 6121, 7695, 4113, 6376, + 7931, 8405, 2285, 6789, 4212, + 7931, 8405, 2285, 8461, 4212, + 7931, 8405, 2285, 9363, 4212, + 7931, 8405, 2285, 10275, 4212, + 7931, 8405, 2404, + 7931, 8405, 2405, 6121, 1045, 6490, + 7931, 8405, 2405, 6121, 1045, 6491, 721, 1045, 6376, + 7931, 8405, 2405, 6121, 2779, 4113, 6376, + 7931, 8405, 2405, 6121, 2779, 4113, 11877, 6376, + 7931, 8405, 2405, 6121, 4215, 4113, 6376, + 7931, 8405, 2405, 6121, 5550, + 7931, 8405, 2405, 6121, 6895, 6376, + 7931, 8405, 2405, 6121, 7593, 42, + 7931, 8405, 2405, 6121, 7593, 43, 6490, + 7931, 8405, 2405, 6121, 7593, 7931, 8405, 2641, 721, 2779, 4112, + 7931, 8405, 2405, 6121, 8758, + 7931, 8405, 2405, 6121, 10267, 42, + 7931, 8405, 2405, 6789, 4212, + 7931, 8405, 2405, 10275, 4212, + 7931, 8405, 2484, + 7931, 8405, 2485, 6121, 2779, 4113, 6490, + 7931, 8405, 2485, 6121, 7695, 4113, 6376, + 7931, 8405, 2485, 6789, 4212, + 7931, 8405, 2485, 8461, 4212, + 7931, 8405, 2485, 9363, 4212, + 7931, 8405, 2485, 10275, 4212, + 7931, 8405, 2640, + 7931, 8405, 2641, 6121, 7695, 4113, 6376, + 7931, 8405, 2641, 6789, 4212, + 7931, 8405, 2641, 8461, 4212, + 7931, 8405, 2641, 9363, 4212, + 7931, 8405, 2641, 10275, 4212, + 7931, 8405, 2668, + 7931, 8405, 2669, 6121, 5550, + 7931, 8405, 2669, 6121, 7695, 4113, 6377, 10958, + 7931, 8405, 2669, 6789, 4212, + 7931, 8405, 2669, 8461, 4212, + 7931, 8405, 2669, 9363, 4212, + 7931, 8405, 2669, 9456, + 7931, 8405, 2669, 9457, 4340, + 7931, 8405, 2669, 9457, 6789, 4212, + 7931, 8405, 2669, 9457, 10275, 4212, + 7931, 8405, 2669, 10275, 4212, + 7931, 8405, 2858, + 7931, 8405, 2859, 6789, 4212, + 7931, 8405, 2859, 8461, 4212, + 7931, 8405, 2859, 9363, 4212, + 7931, 8405, 2859, 10275, 4212, + 7931, 8405, 2918, + 7931, 8405, 2919, 6121, 1045, 6376, + 7931, 8405, 2919, 6121, 2779, 4113, 6376, + 7931, 8405, 2919, 6121, 5550, + 7931, 8405, 2919, 6121, 6895, 6376, + 7931, 8405, 2919, 6121, 6895, 6377, 6789, 4212, + 7931, 8405, 2919, 6121, 6895, 6377, 10275, 4212, + 7931, 8405, 2919, 6121, 10173, 12403, 6689, 2779, 6376, + 7931, 8405, 2919, 6121, 10173, 12403, 6689, 7695, 6376, + 7931, 8405, 2919, 6789, 4212, + 7931, 8405, 2919, 10275, 4212, + 7931, 8405, 3052, + 7931, 8405, 3053, 6121, 5878, + 7931, 8405, 3053, 6121, 6895, 6376, + 7931, 8405, 3053, 6121, 6895, 6377, 6789, 4212, + 7931, 8405, 3053, 6121, 6895, 6377, 8461, 4212, + 7931, 8405, 3053, 6121, 6895, 6377, 9363, 4212, + 7931, 8405, 3053, 6121, 6895, 6377, 10275, 4212, + 7931, 8405, 3053, 6121, 7593, 42, + 7931, 8405, 3053, 6121, 7695, 4113, 6490, + 7931, 8405, 3053, 6789, 4212, + 7931, 8405, 3053, 7982, + 7931, 8405, 3053, 7983, 6121, 6895, 6376, + 7931, 8405, 3053, 7983, 6121, 6895, 6377, 6789, 4212, + 7931, 8405, 3053, 7983, 6121, 6895, 6377, 10275, 4212, + 7931, 8405, 3053, 7983, 6121, 10173, 12403, 6689, 2779, 6376, + 7931, 8405, 3053, 7983, 6121, 10173, 12403, 6689, 7695, 6376, + 7931, 8405, 3053, 7983, 6789, 4212, + 7931, 8405, 3053, 7983, 10275, 4212, + 7931, 8405, 3053, 8461, 4212, + 7931, 8405, 3053, 9363, 4212, + 7931, 8405, 3053, 10275, 4212, + 7931, 8405, 3124, + 7931, 8405, 3125, 6789, 4212, + 7931, 8405, 3125, 8461, 4212, + 7931, 8405, 3125, 9363, 4212, + 7931, 8405, 3125, 10275, 4212, + 7931, 8405, 3244, + 7931, 8405, 3245, 6121, 6107, 6895, 6376, + 7931, 8405, 3245, 6121, 6107, 6895, 6490, + 7931, 8405, 3245, 6121, 6895, 6376, + 7931, 8405, 3245, 6121, 6895, 6377, 6789, 4212, + 7931, 8405, 3245, 6121, 6895, 6377, 10275, 4212, + 7931, 8405, 3245, 6121, 6895, 6490, + 7931, 8405, 3245, 6121, 6895, 6491, 6789, 4212, + 7931, 8405, 3245, 6121, 6895, 6491, 10275, 4212, + 7931, 8405, 3245, 6121, 7125, 6376, + 7931, 8405, 3245, 6121, 7125, 6377, 6789, 4212, + 7931, 8405, 3245, 6121, 7125, 6377, 10275, 4212, + 7931, 8405, 3245, 6121, 10173, 12403, 6689, 2779, 6376, + 7931, 8405, 3245, 6121, 10173, 12403, 6689, 7695, 6376, + 7931, 8405, 3245, 6789, 4212, + 7931, 8405, 3245, 7808, + 7931, 8405, 3245, 7809, 6789, 4212, + 7931, 8405, 3245, 7809, 10275, 4212, + 7931, 8405, 3245, 9448, + 7931, 8405, 3245, 9449, 6789, 4212, + 7931, 8405, 3245, 9449, 10275, 4212, + 7931, 8405, 3245, 10275, 4212, + 7931, 8405, 3766, + 7931, 8405, 3767, 6789, 4212, + 7931, 8405, 3767, 8461, 4212, + 7931, 8405, 3767, 9363, 4212, + 7931, 8405, 3767, 10275, 4212, + 7931, 8405, 4000, + 7931, 8405, 4001, 6789, 4212, + 7931, 8405, 4001, 10275, 4212, + 7931, 8405, 4136, + 7931, 8405, 4137, 6789, 4212, + 7931, 8405, 4137, 8461, 4212, + 7931, 8405, 4137, 9363, 4212, + 7931, 8405, 4137, 10275, 4212, + 7931, 8405, 4356, + 7931, 8405, 4357, 6789, 4212, + 7931, 8405, 4357, 8461, 4212, + 7931, 8405, 4357, 9363, 4212, + 7931, 8405, 4357, 10275, 4212, + 7931, 8405, 4423, 6894, + 7931, 8405, 4423, 6895, 2918, + 7931, 8405, 4423, 6895, 3052, + 7931, 8405, 4423, 6895, 3244, + 7931, 8405, 4630, + 7931, 8405, 4631, 6789, 4212, + 7931, 8405, 4631, 8461, 4212, + 7931, 8405, 4631, 9363, 4212, + 7931, 8405, 4631, 10275, 4212, + 7931, 8405, 4736, + 7931, 8405, 4737, 6789, 4212, + 7931, 8405, 4737, 8461, 4212, + 7931, 8405, 4737, 9363, 4212, + 7931, 8405, 4737, 10275, 4212, + 7931, 8405, 4942, + 7931, 8405, 4943, 6121, 1045, 6376, + 7931, 8405, 4943, 6121, 1045, 6490, + 7931, 8405, 4943, 6789, 4212, + 7931, 8405, 4943, 8461, 4212, + 7931, 8405, 4943, 9363, 4212, + 7931, 8405, 4943, 10275, 4212, + 7931, 8405, 5240, + 7931, 8405, 5241, 6121, 1045, 6490, + 7931, 8405, 5241, 6121, 2779, 4113, 6490, + 7931, 8405, 5241, 6121, 5550, + 7931, 8405, 5241, 6121, 7593, 42, + 7931, 8405, 5241, 6121, 7593, 2640, + 7931, 8405, 5241, 6121, 7695, 4113, 6376, + 7931, 8405, 5241, 6789, 4212, + 7931, 8405, 5241, 8260, + 7931, 8405, 5241, 8261, 6789, 4212, + 7931, 8405, 5241, 8261, 10275, 4212, + 7931, 8405, 5241, 8461, 4212, + 7931, 8405, 5241, 9363, 4212, + 7931, 8405, 5241, 10275, 4212, + 7931, 8405, 5298, + 7931, 8405, 5299, 6789, 4212, + 7931, 8405, 5299, 8461, 4212, + 7931, 8405, 5299, 9363, 4212, + 7931, 8405, 5299, 10275, 4212, + 7931, 8405, 5572, + 7931, 8405, 5573, 6789, 4212, + 7931, 8405, 5573, 10275, 4212, + 7931, 8405, 5648, + 7931, 8405, 5649, 6121, 1045, 6491, 721, 1045, 6376, + 7931, 8405, 5649, 6121, 2779, 4113, 11877, 6376, + 7931, 8405, 5649, 6121, 4215, 4113, 6376, + 7931, 8405, 5649, 6121, 7593, 7931, 8405, 2641, 721, 2779, 4112, + 7931, 8405, 5649, 6121, 7695, 4113, 6490, + 7931, 8405, 5649, 6121, 7695, 4113, 6491, 721, 7695, 4113, 6376, + 7931, 8405, 5649, 6121, 10173, 12403, 6689, 4215, 6376, + 7931, 8405, 5649, 6121, 10267, 42, + 7931, 8405, 5649, 6789, 4212, + 7931, 8405, 5649, 8461, 4212, + 7931, 8405, 5649, 9363, 4212, + 7931, 8405, 5649, 10275, 4212, + 7931, 8405, 5910, + 7931, 8405, 5911, 6789, 4212, + 7931, 8405, 5911, 10275, 4212, + 7931, 8405, 5916, + 7931, 8405, 5917, 6789, 4212, + 7931, 8405, 5917, 8461, 4212, + 7931, 8405, 5917, 9363, 4212, + 7931, 8405, 5917, 10275, 4212, + 7931, 8405, 5992, + 7931, 8405, 5993, 6789, 4212, + 7931, 8405, 5993, 8461, 4212, + 7931, 8405, 5993, 9363, 4212, + 7931, 8405, 5993, 10275, 4212, + 7931, 8405, 6254, + 7931, 8405, 6255, 6789, 4212, + 7931, 8405, 6255, 10275, 4212, + 7931, 8405, 6486, + 7931, 8405, 6487, 6789, 4212, + 7931, 8405, 6487, 8461, 4212, + 7931, 8405, 6487, 9363, 4212, + 7931, 8405, 6487, 10275, 4212, + 7931, 8405, 6636, + 7931, 8405, 6637, 6789, 4212, + 7931, 8405, 6637, 10275, 4212, + 7931, 8405, 6771, 3052, + 7931, 8405, 6771, 3053, 6121, 2779, 4113, 6376, + 7931, 8405, 6771, 3053, 6121, 7695, 4113, 6376, + 7931, 8405, 6771, 3053, 6121, 10173, 12403, 6689, 2779, 6376, + 7931, 8405, 6771, 3053, 6121, 10173, 12403, 6689, 4215, 6490, + 7931, 8405, 6771, 3053, 6121, 10173, 12403, 6689, 7695, 6376, + 7931, 8405, 6771, 3053, 6121, 10267, 42, + 7931, 8405, 6771, 3053, 6789, 4212, + 7931, 8405, 6771, 3053, 8461, 4212, + 7931, 8405, 6771, 3053, 9363, 4212, + 7931, 8405, 6771, 3053, 10275, 4212, + 7931, 8405, 6850, + 7931, 8405, 6851, 6121, 1045, 6490, + 7931, 8405, 6851, 6789, 4212, + 7931, 8405, 6851, 8461, 4212, + 7931, 8405, 6851, 9363, 4212, + 7931, 8405, 6851, 10275, 4212, + 7931, 8405, 6894, + 7931, 8405, 6895, 10275, 4212, + 7931, 8405, 7036, + 7931, 8405, 7037, 6121, 1045, 6376, + 7931, 8405, 7037, 6121, 2779, 4113, 6376, + 7931, 8405, 7037, 6121, 7695, 4113, 6376, + 7931, 8405, 7037, 6121, 7695, 4113, 6490, + 7931, 8405, 7037, 6121, 7695, 4113, 10441, 9811, 6490, + 7931, 8405, 7037, 6789, 4212, + 7931, 8405, 7037, 8461, 4212, + 7931, 8405, 7037, 9363, 4212, + 7931, 8405, 7037, 10275, 4212, + 7931, 8405, 7238, + 7931, 8405, 7239, 6789, 4212, + 7931, 8405, 7239, 8461, 4212, + 7931, 8405, 7239, 9363, 4212, + 7931, 8405, 7239, 10275, 4212, + 7931, 8405, 7354, + 7931, 8405, 7355, 6789, 4212, + 7931, 8405, 7355, 8461, 4212, + 7931, 8405, 7355, 9363, 4212, + 7931, 8405, 7355, 10275, 4212, + 7931, 8405, 7448, + 7931, 8405, 7449, 6789, 4212, + 7931, 8405, 7449, 8461, 4212, + 7931, 8405, 7449, 9363, 4212, + 7931, 8405, 7449, 10275, 4212, + 7931, 8405, 7524, + 7931, 8405, 7525, 6121, 1045, 6490, + 7931, 8405, 7525, 6789, 4212, + 7931, 8405, 7525, 8461, 4212, + 7931, 8405, 7525, 9363, 4212, + 7931, 8405, 7525, 10275, 4212, + 7931, 8405, 7653, 1578, + 7931, 8405, 7668, + 7931, 8405, 7669, 6121, 1045, 6376, + 7931, 8405, 7669, 6789, 4212, + 7931, 8405, 7669, 8461, 4212, + 7931, 8405, 7669, 9363, 4212, + 7931, 8405, 7669, 10275, 4212, + 7931, 8405, 7672, + 7931, 8405, 7673, 6789, 4212, + 7931, 8405, 7673, 8461, 4212, + 7931, 8405, 7673, 9363, 4212, + 7931, 8405, 7673, 10275, 4212, + 7931, 8405, 8098, + 7931, 8405, 8099, 6789, 4212, + 7931, 8405, 8099, 10275, 4212, + 7931, 8405, 8860, + 7931, 8405, 8861, 6789, 4212, + 7931, 8405, 8861, 8461, 4212, + 7931, 8405, 8861, 9363, 4212, + 7931, 8405, 8861, 10275, 4212, + 7931, 8405, 8895, 8345, 9405, 3245, 9449, 8461, 4212, + 7931, 8405, 8895, 8345, 9405, 3245, 9449, 9363, 4212, + 7931, 8405, 9185, 780, + 7931, 8405, 9185, 1152, + 7931, 8405, 9185, 2284, + 7931, 8405, 9405, 426, + 7931, 8405, 9405, 427, 6789, 4212, + 7931, 8405, 9405, 427, 10275, 4212, + 7931, 8405, 9405, 664, + 7931, 8405, 9405, 665, 6789, 4212, + 7931, 8405, 9405, 665, 10275, 4212, + 7931, 8405, 9770, + 7931, 8405, 9771, 6789, 4212, + 7931, 8405, 9771, 8461, 4212, + 7931, 8405, 9771, 9363, 4212, + 7931, 8405, 9771, 10275, 4212, + 7931, 8405, 12355, 3244, + 7931, 8435, 6376, + 7931, 8525, 5758, + 7931, 8601, 7793, 5758, + 7931, 8692, + 7931, 8693, 8461, 4212, + 7931, 8693, 10275, 4212, + 7931, 8849, 1045, 12133, 4926, + 7931, 9151, 11228, + 7931, 9581, 5758, + 7931, 9645, 4423, 5837, 6121, 8205, 8036, + 7931, 9766, + 7931, 9767, 6121, 10175, 6376, + 7931, 9978, + 7931, 9979, 10275, 4212, + 7931, 10174, + 7931, 10175, 10275, 4212, + 7931, 10199, 8450, + 7931, 10267, 6644, + 7931, 10280, + 7931, 10281, 10275, 4212, + 7931, 10301, 711, 6121, 3053, 6789, 4212, + 7931, 10301, 711, 6121, 3053, 10275, 4212, + 7931, 10301, 711, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 711, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 711, 6121, 4631, 6121, 4943, 6789, 4212, + 7931, 10301, 711, 6121, 4631, 6121, 4943, 9363, 4212, + 7931, 10301, 711, 6121, 4631, 9363, 4212, + 7931, 10301, 711, 6121, 4631, 10275, 4212, + 7931, 10301, 711, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 711, 6121, 4943, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 711, 6121, 4943, 6121, 4943, 6789, 4212, + 7931, 10301, 711, 6121, 4943, 6121, 4943, 9363, 4212, + 7931, 10301, 711, 6121, 4943, 9363, 4212, + 7931, 10301, 711, 6121, 4943, 10275, 4212, + 7931, 10301, 781, 6121, 1343, 6121, 3053, 6789, 4212, + 7931, 10301, 781, 6121, 1343, 9363, 4212, + 7931, 10301, 781, 6121, 1343, 10275, 4212, + 7931, 10301, 781, 6121, 1359, 8461, 4212, + 7931, 10301, 781, 6121, 1359, 9363, 4212, + 7931, 10301, 781, 6121, 2405, 6789, 4212, + 7931, 10301, 781, 6121, 3053, 6789, 4212, + 7931, 10301, 781, 6121, 3053, 10275, 4212, + 7931, 10301, 781, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 781, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 781, 6121, 4631, 9363, 4212, + 7931, 10301, 781, 6121, 4631, 10275, 4212, + 7931, 10301, 781, 6121, 4737, 6121, 3053, 6789, 4212, + 7931, 10301, 781, 6121, 4737, 9363, 4212, + 7931, 10301, 781, 6121, 4737, 10275, 4212, + 7931, 10301, 781, 6121, 4943, 6789, 4212, + 7931, 10301, 781, 6121, 4943, 8461, 4212, + 7931, 10301, 781, 6121, 4943, 9363, 4212, + 7931, 10301, 781, 6121, 4943, 10275, 4212, + 7931, 10301, 781, 6121, 5241, 6789, 4212, + 7931, 10301, 781, 6121, 6255, 6789, 4212, + 7931, 10301, 957, 6121, 1343, 6121, 3053, 6789, 4212, + 7931, 10301, 957, 6121, 1343, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 957, 6121, 1343, 9363, 4212, + 7931, 10301, 957, 6121, 1343, 10275, 4212, + 7931, 10301, 957, 6121, 2405, 6789, 4212, + 7931, 10301, 957, 6121, 2405, 10275, 4212, + 7931, 10301, 957, 6121, 3053, 6789, 4212, + 7931, 10301, 957, 6121, 3053, 10275, 4212, + 7931, 10301, 957, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 957, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 957, 6121, 4631, 9363, 4212, + 7931, 10301, 957, 6121, 4631, 10275, 4212, + 7931, 10301, 957, 6121, 4737, 6121, 4943, 6789, 4212, + 7931, 10301, 957, 6121, 4737, 6121, 4943, 9363, 4212, + 7931, 10301, 957, 6121, 4737, 9363, 4212, + 7931, 10301, 957, 6121, 4737, 10275, 4212, + 7931, 10301, 957, 6121, 4943, 9363, 4212, + 7931, 10301, 957, 6121, 4943, 10275, 4212, + 7931, 10301, 1153, 6121, 1343, 9363, 4212, + 7931, 10301, 1153, 6121, 1343, 10275, 4212, + 7931, 10301, 1153, 6121, 3053, 6789, 4212, + 7931, 10301, 1153, 6121, 3053, 10275, 4212, + 7931, 10301, 1153, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 1153, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 1153, 6121, 4631, 9363, 4212, + 7931, 10301, 1153, 6121, 4631, 10275, 4212, + 7931, 10301, 1153, 6121, 4737, 6121, 4943, 6789, 4212, + 7931, 10301, 1153, 6121, 4737, 6121, 4943, 9363, 4212, + 7931, 10301, 1153, 6121, 4737, 9363, 4212, + 7931, 10301, 1153, 6121, 4737, 10275, 4212, + 7931, 10301, 1153, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 1153, 6121, 4943, 9363, 4212, + 7931, 10301, 1153, 6121, 4943, 10275, 4212, + 7931, 10301, 1343, 6121, 3053, 6789, 4212, + 7931, 10301, 1343, 6121, 3053, 10275, 4212, + 7931, 10301, 1343, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 1343, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 1343, 6121, 4631, 6121, 3053, 6789, 4212, + 7931, 10301, 1343, 6121, 4631, 9363, 4212, + 7931, 10301, 1343, 6121, 4631, 10275, 4212, + 7931, 10301, 1343, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 1343, 6121, 4943, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 1343, 6121, 4943, 9363, 4212, + 7931, 10301, 1343, 6121, 4943, 10275, 4212, + 7931, 10301, 1359, 6121, 3053, 10275, 4212, + 7931, 10301, 1359, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 1359, 6121, 4631, 9363, 4212, + 7931, 10301, 1359, 6121, 4631, 10275, 4212, + 7931, 10301, 1359, 6121, 4943, 6121, 4631, 9363, 4212, + 7931, 10301, 1359, 6121, 4943, 6121, 4943, 9363, 4212, + 7931, 10301, 1359, 6121, 4943, 9363, 4212, + 7931, 10301, 1359, 6121, 4943, 10275, 4212, + 7931, 10301, 1359, 6121, 12355, 3245, 9363, 4212, + 7931, 10301, 1579, 6121, 1343, 9363, 4212, + 7931, 10301, 1579, 6121, 1343, 10275, 4212, + 7931, 10301, 1579, 6121, 1739, 6789, 4212, + 7931, 10301, 1579, 6121, 1739, 8461, 4212, + 7931, 10301, 1579, 6121, 1739, 9363, 4212, + 7931, 10301, 1579, 6121, 1739, 10275, 4212, + 7931, 10301, 1579, 6121, 3053, 6789, 4212, + 7931, 10301, 1579, 6121, 3053, 10275, 4212, + 7931, 10301, 1579, 6121, 3245, 6789, 4212, + 7931, 10301, 1579, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 1579, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 1579, 6121, 3245, 10275, 4212, + 7931, 10301, 1579, 6121, 4631, 9363, 4212, + 7931, 10301, 1579, 6121, 4631, 10275, 4212, + 7931, 10301, 1579, 6121, 4737, 9363, 4212, + 7931, 10301, 1579, 6121, 4737, 10275, 4212, + 7931, 10301, 1579, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 1579, 6121, 4943, 6121, 4943, 6789, 4212, + 7931, 10301, 1579, 6121, 4943, 6121, 4943, 9363, 4212, + 7931, 10301, 1579, 6121, 4943, 6789, 4212, + 7931, 10301, 1579, 6121, 4943, 8461, 4212, + 7931, 10301, 1579, 6121, 4943, 9363, 4212, + 7931, 10301, 1579, 6121, 4943, 10275, 4212, + 7931, 10301, 1739, 6121, 1343, 6121, 3053, 6789, 4212, + 7931, 10301, 1739, 6121, 1343, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 1739, 6121, 1343, 6121, 4943, 6789, 4212, + 7931, 10301, 1739, 6121, 1343, 6121, 4943, 9363, 4212, + 7931, 10301, 1739, 6121, 1343, 9363, 4212, + 7931, 10301, 1739, 6121, 1343, 10275, 4212, + 7931, 10301, 1739, 6121, 1359, 9363, 4212, + 7931, 10301, 1739, 6121, 3053, 6789, 4212, + 7931, 10301, 1739, 6121, 3053, 10275, 4212, + 7931, 10301, 1739, 6121, 3245, 6121, 6895, 6377, 6789, 4212, + 7931, 10301, 1739, 6121, 3245, 6121, 6895, 6377, 10275, 4212, + 7931, 10301, 1739, 6121, 3245, 6121, 6895, 6491, 6789, 4212, + 7931, 10301, 1739, 6121, 3245, 6121, 6895, 6491, 10275, 4212, + 7931, 10301, 1739, 6121, 3245, 6121, 7125, 6377, 6789, 4212, + 7931, 10301, 1739, 6121, 3245, 6121, 7125, 6377, 10275, 4212, + 7931, 10301, 1739, 6121, 3245, 6789, 4212, + 7931, 10301, 1739, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 1739, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 1739, 6121, 3245, 10275, 4212, + 7931, 10301, 1739, 6121, 4631, 6121, 3053, 6789, 4212, + 7931, 10301, 1739, 6121, 4631, 6121, 4631, 6789, 4212, + 7931, 10301, 1739, 6121, 4631, 6121, 4631, 9363, 4212, + 7931, 10301, 1739, 6121, 4631, 6121, 4943, 6789, 4212, + 7931, 10301, 1739, 6121, 4631, 6121, 4943, 9363, 4212, + 7931, 10301, 1739, 6121, 4631, 9363, 4212, + 7931, 10301, 1739, 6121, 4631, 10275, 4212, + 7931, 10301, 1739, 6121, 4737, 6121, 4943, 6789, 4212, + 7931, 10301, 1739, 6121, 4737, 6121, 4943, 9363, 4212, + 7931, 10301, 1739, 6121, 4737, 9363, 4212, + 7931, 10301, 1739, 6121, 4737, 10275, 4212, + 7931, 10301, 1739, 6121, 4943, 6121, 1343, 6789, 4212, + 7931, 10301, 1739, 6121, 4943, 6121, 1343, 9363, 4212, + 7931, 10301, 1739, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 1739, 6121, 4943, 6789, 4212, + 7931, 10301, 1739, 6121, 4943, 8461, 4212, + 7931, 10301, 1739, 6121, 4943, 9363, 4212, + 7931, 10301, 1739, 6121, 4943, 10275, 4212, + 7931, 10301, 2285, 6121, 1343, 9363, 4212, + 7931, 10301, 2285, 6121, 1343, 10275, 4212, + 7931, 10301, 2285, 6121, 3053, 6789, 4212, + 7931, 10301, 2285, 6121, 3053, 10275, 4212, + 7931, 10301, 2285, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 2285, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 2285, 6121, 4943, 6121, 1343, 6789, 4212, + 7931, 10301, 2285, 6121, 4943, 6121, 1343, 9363, 4212, + 7931, 10301, 2285, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 2285, 6121, 4943, 6121, 4943, 6789, 4212, + 7931, 10301, 2285, 6121, 4943, 9363, 4212, + 7931, 10301, 2285, 6121, 4943, 10275, 4212, + 7931, 10301, 2405, 6121, 12355, 3245, 10275, 4212, + 7931, 10301, 2485, 6121, 1343, 6121, 1343, 6789, 4212, + 7931, 10301, 2485, 6121, 1343, 6121, 1343, 9363, 4212, + 7931, 10301, 2485, 6121, 1343, 6121, 3053, 6789, 4212, + 7931, 10301, 2485, 6121, 1343, 9363, 4212, + 7931, 10301, 2485, 6121, 1343, 10275, 4212, + 7931, 10301, 2485, 6121, 2405, 6789, 4212, + 7931, 10301, 2485, 6121, 2405, 10275, 4212, + 7931, 10301, 2485, 6121, 3053, 6789, 4212, + 7931, 10301, 2485, 6121, 3053, 10275, 4212, + 7931, 10301, 2485, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 2485, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 2485, 6121, 4737, 9363, 4212, + 7931, 10301, 2485, 6121, 4943, 6121, 4943, 6789, 4212, + 7931, 10301, 2485, 6121, 4943, 6121, 4943, 9363, 4212, + 7931, 10301, 2485, 6121, 4943, 9363, 4212, + 7931, 10301, 2485, 6121, 4943, 10275, 4212, + 7931, 10301, 2641, 6121, 1343, 9363, 4212, + 7931, 10301, 2641, 6121, 1343, 10275, 4212, + 7931, 10301, 2641, 6121, 3053, 6789, 4212, + 7931, 10301, 2641, 6121, 3053, 10275, 4212, + 7931, 10301, 2641, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 2641, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 2641, 6121, 4943, 6121, 1343, 6789, 4212, + 7931, 10301, 2641, 6121, 4943, 6121, 1343, 9363, 4212, + 7931, 10301, 2641, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 2641, 6121, 4943, 6121, 4943, 9363, 4212, + 7931, 10301, 2641, 6121, 4943, 8461, 4212, + 7931, 10301, 2641, 6121, 4943, 9363, 4212, + 7931, 10301, 2641, 6121, 4943, 10275, 4212, + 7931, 10301, 2669, 6121, 1343, 6121, 4631, 6789, 4212, + 7931, 10301, 2669, 6121, 1343, 6121, 4631, 9363, 4212, + 7931, 10301, 2669, 6121, 1343, 6121, 4943, 9363, 4212, + 7931, 10301, 2669, 6121, 1343, 9363, 4212, + 7931, 10301, 2669, 6121, 1343, 10275, 4212, + 7931, 10301, 2669, 6121, 1359, 8461, 4212, + 7931, 10301, 2669, 6121, 1359, 9363, 4212, + 7931, 10301, 2669, 6121, 2405, 6789, 4212, + 7931, 10301, 2669, 6121, 3053, 6789, 4212, + 7931, 10301, 2669, 6121, 3053, 10275, 4212, + 7931, 10301, 2669, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 2669, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 2669, 6121, 4631, 6121, 3053, 6789, 4212, + 7931, 10301, 2669, 6121, 4631, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 2669, 6121, 4631, 6121, 4943, 9363, 4212, + 7931, 10301, 2669, 6121, 4631, 9363, 4212, + 7931, 10301, 2669, 6121, 4631, 10275, 4212, + 7931, 10301, 2669, 6121, 4737, 6121, 3053, 6789, 4212, + 7931, 10301, 2669, 6121, 4737, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 2669, 6121, 4737, 6121, 4943, 9363, 4212, + 7931, 10301, 2669, 6121, 4737, 9363, 4212, + 7931, 10301, 2669, 6121, 4737, 10275, 4212, + 7931, 10301, 2669, 6121, 4943, 6121, 1343, 9363, 4212, + 7931, 10301, 2669, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 2669, 6121, 4943, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 2669, 6121, 4943, 6121, 4631, 9363, 4212, + 7931, 10301, 2669, 6121, 4943, 6121, 4737, 9363, 4212, + 7931, 10301, 2669, 6121, 4943, 6789, 4212, + 7931, 10301, 2669, 6121, 4943, 8461, 4212, + 7931, 10301, 2669, 6121, 4943, 9363, 4212, + 7931, 10301, 2669, 6121, 4943, 10275, 4212, + 7931, 10301, 2669, 6121, 5241, 6789, 4212, + 7931, 10301, 2669, 6121, 6255, 6789, 4212, + 7931, 10301, 3053, 6121, 1343, 6121, 3053, 6789, 4212, + 7931, 10301, 3053, 6121, 1343, 9363, 4212, + 7931, 10301, 3053, 6121, 1343, 10275, 4212, + 7931, 10301, 3053, 6121, 1359, 8461, 4212, + 7931, 10301, 3053, 6121, 1359, 9363, 4212, + 7931, 10301, 3053, 6121, 2405, 6789, 4212, + 7931, 10301, 3053, 6121, 3053, 6789, 4212, + 7931, 10301, 3053, 6121, 3053, 10275, 4212, + 7931, 10301, 3053, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 3053, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 3053, 6121, 4631, 6121, 3053, 6789, 4212, + 7931, 10301, 3053, 6121, 4631, 9363, 4212, + 7931, 10301, 3053, 6121, 4631, 10275, 4212, + 7931, 10301, 3053, 6121, 4737, 9363, 4212, + 7931, 10301, 3053, 6121, 4737, 10275, 4212, + 7931, 10301, 3053, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 3053, 6121, 4943, 6121, 4943, 6789, 4212, + 7931, 10301, 3053, 6121, 4943, 6121, 4943, 9363, 4212, + 7931, 10301, 3053, 6121, 4943, 6789, 4212, + 7931, 10301, 3053, 6121, 4943, 8461, 4212, + 7931, 10301, 3053, 6121, 4943, 9363, 4212, + 7931, 10301, 3053, 6121, 4943, 10275, 4212, + 7931, 10301, 3053, 6121, 5241, 6789, 4212, + 7931, 10301, 3053, 6121, 6255, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 9, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 9, 9363, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 9, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 41, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 41, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 67, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 67, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 427, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 427, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 665, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 665, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 1343, 9363, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 1343, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 1359, 8461, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 1359, 9363, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 2405, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 2919, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 2919, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3053, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3053, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3245, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 3245, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4631, 9363, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4631, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4737, 9363, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4943, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4943, 8461, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4943, 9363, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 4943, 10275, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 5241, 6789, 4212, + 7931, 10301, 3053, 6121, 6895, 6377, 6121, 6255, 6789, 4212, + 7931, 10301, 3125, 6121, 4943, 8461, 4212, + 7931, 10301, 3125, 6121, 4943, 9363, 4212, + 7931, 10301, 3125, 6121, 4943, 10275, 4212, + 7931, 10301, 3245, 6121, 10175, 6789, 4212, + 7931, 10301, 3245, 6121, 10175, 10275, 4212, + 7931, 10301, 3245, 9449, 6121, 12355, 3245, 6789, 4212, + 7931, 10301, 3245, 9449, 6121, 12355, 3245, 10275, 4212, + 7931, 10301, 4631, 6121, 1343, 6121, 3053, 6789, 4212, + 7931, 10301, 4631, 6121, 1343, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 4631, 6121, 1343, 9363, 4212, + 7931, 10301, 4631, 6121, 1343, 10275, 4212, + 7931, 10301, 4631, 6121, 3053, 6789, 4212, + 7931, 10301, 4631, 6121, 3053, 10275, 4212, + 7931, 10301, 4631, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 4631, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 4631, 6121, 4943, 6121, 1343, 6789, 4212, + 7931, 10301, 4631, 6121, 4943, 6121, 1343, 9363, 4212, + 7931, 10301, 4631, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 4631, 6121, 4943, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 4631, 6121, 4943, 9363, 4212, + 7931, 10301, 4631, 6121, 4943, 10275, 4212, + 7931, 10301, 4737, 6121, 1343, 10275, 4212, + 7931, 10301, 4737, 6121, 3053, 6789, 4212, + 7931, 10301, 4737, 6121, 3053, 10275, 4212, + 7931, 10301, 4737, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 4737, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 4737, 6121, 4631, 9363, 4212, + 7931, 10301, 4737, 6121, 4631, 10275, 4212, + 7931, 10301, 4737, 6121, 4943, 9363, 4212, + 7931, 10301, 4737, 6121, 4943, 10275, 4212, + 7931, 10301, 4943, 6121, 1343, 6121, 3053, 6789, 4212, + 7931, 10301, 4943, 6121, 1343, 6121, 4631, 9363, 4212, + 7931, 10301, 4943, 6121, 1343, 6121, 4943, 9363, 4212, + 7931, 10301, 4943, 6121, 1343, 9363, 4212, + 7931, 10301, 4943, 6121, 1343, 10275, 4212, + 7931, 10301, 4943, 6121, 3053, 10275, 4212, + 7931, 10301, 4943, 6121, 3245, 6789, 4212, + 7931, 10301, 4943, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 4943, 6121, 4631, 6121, 1343, 9363, 4212, + 7931, 10301, 4943, 6121, 4631, 6121, 3053, 6789, 4212, + 7931, 10301, 4943, 6121, 4631, 6121, 4737, 9363, 4212, + 7931, 10301, 4943, 6121, 4631, 6121, 4943, 9363, 4212, + 7931, 10301, 4943, 6121, 4631, 9363, 4212, + 7931, 10301, 4943, 6121, 4631, 10275, 4212, + 7931, 10301, 4943, 6121, 4737, 6121, 3053, 6789, 4212, + 7931, 10301, 4943, 6121, 4737, 6121, 4631, 9363, 4212, + 7931, 10301, 4943, 6121, 4737, 6121, 4943, 9363, 4212, + 7931, 10301, 4943, 6121, 4737, 9363, 4212, + 7931, 10301, 4943, 6121, 4737, 10275, 4212, + 7931, 10301, 4943, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 4943, 6121, 4943, 6789, 4212, + 7931, 10301, 4943, 6121, 4943, 9363, 4212, + 7931, 10301, 4943, 6121, 4943, 10275, 4212, + 7931, 10301, 5241, 6121, 1343, 6121, 3053, 6789, 4212, + 7931, 10301, 5241, 6121, 1343, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 5241, 6121, 1343, 6121, 4943, 9363, 4212, + 7931, 10301, 5241, 6121, 1343, 9363, 4212, + 7931, 10301, 5241, 6121, 1343, 10275, 4212, + 7931, 10301, 5241, 6121, 1359, 8461, 4212, + 7931, 10301, 5241, 6121, 1359, 9363, 4212, + 7931, 10301, 5241, 6121, 2405, 6789, 4212, + 7931, 10301, 5241, 6121, 3053, 6789, 4212, + 7931, 10301, 5241, 6121, 3053, 10275, 4212, + 7931, 10301, 5241, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 5241, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 5241, 6121, 4631, 6121, 1343, 6789, 4212, + 7931, 10301, 5241, 6121, 4631, 6121, 1343, 9363, 4212, + 7931, 10301, 5241, 6121, 4631, 6121, 3053, 6789, 4212, + 7931, 10301, 5241, 6121, 4631, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 5241, 6121, 4631, 6121, 4943, 6789, 4212, + 7931, 10301, 5241, 6121, 4631, 6121, 4943, 9363, 4212, + 7931, 10301, 5241, 6121, 4631, 9363, 4212, + 7931, 10301, 5241, 6121, 4631, 10275, 4212, + 7931, 10301, 5241, 6121, 4737, 9363, 4212, + 7931, 10301, 5241, 6121, 4737, 10275, 4212, + 7931, 10301, 5241, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 5241, 6121, 4943, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 5241, 6121, 4943, 6789, 4212, + 7931, 10301, 5241, 6121, 4943, 8461, 4212, + 7931, 10301, 5241, 6121, 4943, 9363, 4212, + 7931, 10301, 5241, 6121, 4943, 10275, 4212, + 7931, 10301, 5241, 6121, 5241, 6789, 4212, + 7931, 10301, 5241, 6121, 6255, 6789, 4212, + 7931, 10301, 5475, 6061, 89, 9411, 5837, 5759, 10275, 4212, + 7931, 10301, 5649, 6121, 1343, 6121, 4631, 9363, 4212, + 7931, 10301, 5649, 6121, 1343, 8461, 4212, + 7931, 10301, 5649, 6121, 1343, 9363, 4212, + 7931, 10301, 5649, 6121, 1343, 10275, 4212, + 7931, 10301, 5649, 6121, 1359, 8461, 4212, + 7931, 10301, 5649, 6121, 1359, 9363, 4212, + 7931, 10301, 5649, 6121, 2405, 6789, 4212, + 7931, 10301, 5649, 6121, 2405, 10275, 4212, + 7931, 10301, 5649, 6121, 3053, 6789, 4212, + 7931, 10301, 5649, 6121, 3053, 10275, 4212, + 7931, 10301, 5649, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 5649, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 5649, 6121, 4631, 6121, 1343, 9363, 4212, + 7931, 10301, 5649, 6121, 4631, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 5649, 6121, 4631, 8461, 4212, + 7931, 10301, 5649, 6121, 4631, 9363, 4212, + 7931, 10301, 5649, 6121, 4631, 10275, 4212, + 7931, 10301, 5649, 6121, 4737, 6121, 3053, 6789, 4212, + 7931, 10301, 5649, 6121, 4737, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 5649, 6121, 4737, 8461, 4212, + 7931, 10301, 5649, 6121, 4737, 9363, 4212, + 7931, 10301, 5649, 6121, 4737, 10275, 4212, + 7931, 10301, 5649, 6121, 4943, 6121, 1343, 6789, 4212, + 7931, 10301, 5649, 6121, 4943, 6121, 1343, 9363, 4212, + 7931, 10301, 5649, 6121, 4943, 6121, 4631, 9363, 4212, + 7931, 10301, 5649, 6121, 4943, 6121, 4943, 6789, 4212, + 7931, 10301, 5649, 6121, 4943, 6121, 4943, 9363, 4212, + 7931, 10301, 5649, 6121, 4943, 8461, 4212, + 7931, 10301, 5649, 6121, 4943, 9363, 4212, + 7931, 10301, 5649, 6121, 4943, 10275, 4212, + 7931, 10301, 5911, 6121, 12355, 3245, 10275, 4212, + 7931, 10301, 5917, 6121, 1359, 8461, 4212, + 7931, 10301, 5917, 6121, 2405, 6789, 4212, + 7931, 10301, 5917, 6121, 3053, 6789, 4212, + 7931, 10301, 5917, 6121, 3053, 10275, 4212, + 7931, 10301, 5917, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 5917, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 5917, 6121, 4631, 10275, 4212, + 7931, 10301, 5917, 6121, 4943, 6789, 4212, + 7931, 10301, 5917, 6121, 4943, 8461, 4212, + 7931, 10301, 5917, 6121, 4943, 9363, 4212, + 7931, 10301, 5917, 6121, 4943, 10275, 4212, + 7931, 10301, 5917, 6121, 5241, 6789, 4212, + 7931, 10301, 5917, 6121, 6255, 6789, 4212, + 7931, 10301, 6393, 10275, 4212, + 7931, 10301, 6405, 10275, 4212, + 7931, 10301, 6851, 6121, 3053, 6789, 4212, + 7931, 10301, 6851, 6121, 3053, 10275, 4212, + 7931, 10301, 6851, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 6851, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 6851, 6121, 4631, 9363, 4212, + 7931, 10301, 6851, 6121, 4631, 10275, 4212, + 7931, 10301, 6851, 6121, 4943, 6121, 3053, 6789, 4212, + 7931, 10301, 6851, 6121, 4943, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 6851, 6121, 4943, 6121, 4943, 6789, 4212, + 7931, 10301, 6851, 6121, 4943, 9363, 4212, + 7931, 10301, 6851, 6121, 4943, 10275, 4212, + 7931, 10301, 7479, 10275, 4212, + 7931, 10301, 7481, 6061, 89, 9411, 5837, 5759, 10275, 4212, + 7931, 10301, 7481, 10275, 4212, + 7931, 10301, 7525, 6121, 1343, 6121, 3053, 6789, 4212, + 7931, 10301, 7525, 6121, 1343, 6121, 4943, 6789, 4212, + 7931, 10301, 7525, 6121, 1343, 6121, 4943, 9363, 4212, + 7931, 10301, 7525, 6121, 1343, 6789, 4212, + 7931, 10301, 7525, 6121, 1343, 8461, 4212, + 7931, 10301, 7525, 6121, 1343, 9363, 4212, + 7931, 10301, 7525, 6121, 1343, 10275, 4212, + 7931, 10301, 7525, 6121, 1359, 8461, 4212, + 7931, 10301, 7525, 6121, 1359, 9363, 4212, + 7931, 10301, 7525, 6121, 2405, 6789, 4212, + 7931, 10301, 7525, 6121, 2405, 10275, 4212, + 7931, 10301, 7525, 6121, 3053, 6789, 4212, + 7931, 10301, 7525, 6121, 3053, 10275, 4212, + 7931, 10301, 7525, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 7525, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 7525, 6121, 4631, 6121, 3053, 6789, 4212, + 7931, 10301, 7525, 6121, 4631, 6789, 4212, + 7931, 10301, 7525, 6121, 4631, 8461, 4212, + 7931, 10301, 7525, 6121, 4631, 9363, 4212, + 7931, 10301, 7525, 6121, 4631, 10275, 4212, + 7931, 10301, 7525, 6121, 4737, 6789, 4212, + 7931, 10301, 7525, 6121, 4737, 8461, 4212, + 7931, 10301, 7525, 6121, 4737, 9363, 4212, + 7931, 10301, 7525, 6121, 4737, 10275, 4212, + 7931, 10301, 7525, 6121, 4943, 6121, 4737, 6789, 4212, + 7931, 10301, 7525, 6121, 4943, 6121, 4737, 9363, 4212, + 7931, 10301, 7525, 6121, 4943, 6121, 4943, 6789, 4212, + 7931, 10301, 7525, 6121, 4943, 6121, 4943, 9363, 4212, + 7931, 10301, 7525, 6121, 4943, 6789, 4212, + 7931, 10301, 7525, 6121, 4943, 8461, 4212, + 7931, 10301, 7525, 6121, 4943, 9363, 4212, + 7931, 10301, 7525, 6121, 4943, 10275, 4212, + 7931, 10301, 7917, 10275, 4212, + 7931, 10301, 8635, 10275, 4212, + 7931, 10301, 8693, 6121, 6645, 8461, 4212, + 7931, 10301, 8693, 6121, 6645, 10275, 4212, + 7931, 10301, 8693, 6121, 6773, 8461, 4212, + 7931, 10301, 8693, 6121, 6773, 10275, 4212, + 7931, 10301, 8693, 6121, 7027, 8461, 4212, + 7931, 10301, 8693, 6121, 7027, 10275, 4212, + 7931, 10301, 8693, 6121, 9979, 10275, 4212, + 7931, 10301, 8693, 6121, 10281, 10275, 4212, + 7931, 10301, 8693, 6121, 12355, 3245, 10275, 4212, + 7931, 10301, 8895, 9405, 3053, 6121, 6895, 6377, 6121, 3245, 9449, 6789, 4212, + 7931, 10301, 8895, 9405, 3053, 6121, 6895, 6377, 6121, 3245, 9449, 9363, 4212, + 7931, 10301, 8895, 9405, 3053, 6121, 6895, 6377, 6121, 3245, 9449, 10275, 4212, + 7931, 10301, 10341, 10275, 4212, + 7931, 10301, 10683, 10275, 4212, + 7931, 10301, 10741, 10715, 10712, + 7931, 10301, 12159, 7917, 10682, + 7931, 10301, 13202, + 7931, 10469, 4926, + 7931, 10489, 6644, + 7931, 10692, + 7931, 11224, + 7931, 11261, 3244, + 7931, 11363, 11228, + 7971, 46, + 7971, 826, + 7971, 827, 6121, 46, + 7971, 827, 6121, 6568, + 7985, 8159, 7274, + 7985, 11241, 7274, + 8005, 731, 12901, 6434, + 8005, 4389, 10260, + 8005, 4849, 3958, + 8005, 4849, 4389, 9050, + 8005, 4849, 8076, + 8005, 6627, 9050, + 8005, 7443, 3958, + 8005, 7443, 4389, 9050, + 8005, 7443, 8076, + 8005, 8745, 9050, + 8005, 8745, 9051, 5387, 2725, 8745, 9050, + 8005, 10637, 7533, 9050, + 8005, 12114, + 8006, + 8007, 6121, 4849, 4389, 6504, + 8007, 6121, 7443, 4389, 6504, + 8017, 760, + 8017, 8057, 6121, 11141, 6434, + 8022, + 8023, 10374, + 8027, 2638, + 8028, + 8033, 8405, 0, + 8033, 8405, 2, + 8033, 8405, 6, + 8033, 8405, 8, + 8033, 8405, 12, + 8033, 8405, 16, + 8033, 8405, 20, + 8033, 8405, 22, + 8033, 8405, 24, + 8033, 8405, 26, + 8033, 8405, 28, + 8033, 8405, 30, + 8033, 8405, 32, + 8033, 8405, 34, + 8033, 8405, 36, + 8033, 8405, 38, + 8033, 8405, 40, + 8033, 8405, 46, + 8033, 8405, 54, + 8033, 8405, 136, + 8033, 8405, 158, + 8033, 8405, 214, + 8033, 8405, 266, + 8033, 8405, 304, + 8033, 8405, 334, + 8033, 8405, 366, + 8033, 8405, 394, + 8033, 8405, 400, + 8033, 8405, 410, + 8033, 8405, 460, + 8033, 8405, 518, + 8033, 8405, 530, + 8033, 8405, 542, + 8033, 8405, 544, + 8033, 8405, 574, + 8033, 8405, 606, + 8033, 8405, 1756, + 8033, 8405, 1872, + 8033, 8405, 1874, + 8033, 8405, 1876, + 8033, 8405, 2514, + 8033, 8405, 2578, + 8033, 8405, 2744, + 8033, 8405, 2838, + 8033, 8405, 3832, + 8033, 8405, 3834, + 8033, 8405, 6068, + 8033, 8405, 6070, + 8033, 8405, 6072, + 8037, 4877, 8774, + 8048, + 8057, 6121, 719, 835, 7773, 4849, 10465, 6504, + 8057, 6121, 2779, 11649, 9745, 569, 2681, 7442, + 8057, 6121, 4849, 4389, 6504, + 8057, 6121, 7121, 4389, 6504, + 8057, 6121, 7443, 4389, 6504, + 8057, 6121, 7593, 8057, 569, 2681, 7442, + 8057, 6121, 7773, 4389, 6504, + 8057, 6121, 7773, 7443, 10465, 6504, + 8057, 6121, 10677, 4192, + 8057, 6121, 11649, 760, + 8057, 6121, 12879, 46, + 8057, 9177, 115, 11649, 761, 721, 2725, 4389, 9177, 115, 10677, 760, + 8065, 7769, 6121, 8688, + 8065, 7769, 6121, 8689, 721, 7595, 9610, + 8065, 8762, + 8065, 8763, 445, 6741, 568, + 8065, 10578, + 8065, 10579, 445, 6741, 568, + 8065, 12493, 6121, 8688, + 8066, + 8075, 2167, 8523, 4223, 5836, + 8075, 2167, 8523, 7793, 9178, + 8075, 2167, 8523, 8121, 10469, 4926, + 8075, 2167, 8523, 10255, 10469, 4926, + 8075, 4223, 5836, + 8075, 7593, 8405, 28, + 8075, 7593, 8405, 202, + 8075, 7593, 8405, 374, + 8075, 7593, 8405, 404, + 8075, 7593, 8405, 476, + 8075, 7593, 8405, 516, + 8075, 7593, 8405, 582, + 8075, 7593, 8405, 986, + 8075, 7593, 8405, 1102, + 8075, 7593, 8405, 1154, + 8075, 7593, 8405, 1616, + 8075, 7593, 8405, 1680, + 8075, 7593, 8405, 2167, 8075, 236, + 8075, 7593, 8405, 2167, 8075, 710, + 8075, 7593, 8405, 2167, 8075, 1020, + 8075, 7593, 8405, 2167, 8075, 1124, + 8075, 7593, 8405, 2167, 8075, 1352, + 8075, 7593, 8405, 2167, 8075, 1360, + 8075, 7593, 8405, 2167, 8075, 2180, + 8075, 7593, 8405, 2167, 8075, 4534, + 8075, 7593, 8405, 2167, 8075, 5680, + 8075, 7593, 8405, 2167, 8075, 7542, + 8075, 7593, 8405, 2167, 8075, 8238, + 8075, 7593, 8405, 2167, 8523, 2036, + 8075, 7593, 8405, 2167, 8523, 2132, + 8075, 7593, 8405, 2167, 8523, 2916, + 8075, 7593, 8405, 2167, 8523, 7542, + 8075, 7593, 8405, 2180, + 8075, 7593, 8405, 2250, + 8075, 7593, 8405, 2560, + 8075, 7593, 8405, 2658, + 8075, 7593, 8405, 3246, + 8075, 7593, 8405, 4394, + 8075, 7593, 8405, 4534, + 8075, 7593, 8405, 4722, + 8075, 7593, 8405, 4746, + 8075, 7593, 8405, 5680, + 8075, 7593, 8405, 5766, + 8075, 7593, 8405, 6082, + 8075, 7593, 8405, 6258, + 8075, 7593, 8405, 6640, + 8075, 7593, 8405, 6824, + 8075, 7593, 8405, 6976, + 8075, 7593, 8405, 7090, + 8075, 7593, 8405, 7484, + 8075, 7593, 8405, 7542, + 8075, 7593, 8405, 8238, + 8075, 7593, 8405, 8816, + 8075, 7593, 8405, 9127, 5680, + 8075, 7593, 8405, 9861, 4746, + 8075, 7593, 8405, 10295, 236, + 8075, 7593, 8405, 10807, 404, + 8075, 7593, 8405, 10807, 3244, + 8075, 7593, 8405, 10807, 4534, + 8075, 7593, 8405, 10807, 4722, + 8075, 7593, 8405, 12921, 404, + 8075, 7593, 8405, 12921, 1102, + 8075, 8775, 375, 516, + 8075, 8775, 477, 516, + 8075, 8775, 1582, + 8075, 8775, 1617, 516, + 8075, 8775, 2659, 516, + 8075, 8775, 7543, 5766, + 8075, 8775, 9738, + 8075, 9063, 8405, 28, + 8075, 9063, 8405, 202, + 8075, 9063, 8405, 374, + 8075, 9063, 8405, 404, + 8075, 9063, 8405, 476, + 8075, 9063, 8405, 516, + 8075, 9063, 8405, 582, + 8075, 9063, 8405, 986, + 8075, 9063, 8405, 1102, + 8075, 9063, 8405, 1154, + 8075, 9063, 8405, 1616, + 8075, 9063, 8405, 1680, + 8075, 9063, 8405, 2167, 8075, 236, + 8075, 9063, 8405, 2167, 8075, 710, + 8075, 9063, 8405, 2167, 8075, 1020, + 8075, 9063, 8405, 2167, 8075, 1124, + 8075, 9063, 8405, 2167, 8075, 1352, + 8075, 9063, 8405, 2167, 8075, 1360, + 8075, 9063, 8405, 2167, 8075, 2180, + 8075, 9063, 8405, 2167, 8075, 4534, + 8075, 9063, 8405, 2167, 8075, 5680, + 8075, 9063, 8405, 2167, 8075, 7542, + 8075, 9063, 8405, 2167, 8075, 8238, + 8075, 9063, 8405, 2167, 8523, 2036, + 8075, 9063, 8405, 2167, 8523, 2132, + 8075, 9063, 8405, 2167, 8523, 2916, + 8075, 9063, 8405, 2167, 8523, 7542, + 8075, 9063, 8405, 2180, + 8075, 9063, 8405, 2250, + 8075, 9063, 8405, 2560, + 8075, 9063, 8405, 2658, + 8075, 9063, 8405, 3246, + 8075, 9063, 8405, 4394, + 8075, 9063, 8405, 4534, + 8075, 9063, 8405, 4722, + 8075, 9063, 8405, 4746, + 8075, 9063, 8405, 5680, + 8075, 9063, 8405, 5766, + 8075, 9063, 8405, 6082, + 8075, 9063, 8405, 6258, + 8075, 9063, 8405, 6640, + 8075, 9063, 8405, 6824, + 8075, 9063, 8405, 6976, + 8075, 9063, 8405, 7090, + 8075, 9063, 8405, 7484, + 8075, 9063, 8405, 7542, + 8075, 9063, 8405, 8238, + 8075, 9063, 8405, 8816, + 8075, 9063, 8405, 9127, 5680, + 8075, 9063, 8405, 9861, 4746, + 8075, 9063, 8405, 10295, 236, + 8075, 9063, 8405, 10807, 404, + 8075, 9063, 8405, 10807, 3244, + 8075, 9063, 8405, 10807, 4534, + 8075, 9063, 8405, 10807, 4722, + 8075, 9063, 8405, 12921, 404, + 8075, 9063, 8405, 12921, 1102, + 8075, 10203, 2171, 4388, + 8075, 12977, 9178, + 8083, 5833, 11163, 5759, 10380, + 8088, + 8097, 1809, 4876, + 8097, 10388, + 8097, 13235, 11765, 6434, + 8101, 5758, + 8101, 9076, + 8101, 11626, + 8117, 1177, 6716, + 8117, 1177, 6957, 6716, + 8117, 1177, 8403, 3070, + 8117, 1177, 8403, 6178, + 8117, 1177, 9251, 6956, + 8117, 1177, 9251, 8290, + 8117, 1177, 9315, 3070, + 8117, 1177, 9315, 6178, + 8117, 1177, 10239, 6716, + 8121, 9129, 8775, 4213, 2778, + 8129, 5758, + 8133, 5941, 10677, 3696, + 8133, 5941, 11649, 3696, + 8133, 5941, 13086, + 8133, 5941, 13088, + 8133, 5941, 13090, + 8133, 5941, 13092, + 8133, 5941, 13094, + 8133, 5941, 13096, + 8133, 5941, 13098, + 8133, 5941, 13100, + 8133, 5941, 13102, + 8133, 5941, 13104, + 8133, 5941, 13106, + 8133, 5941, 13108, + 8133, 5941, 13110, + 8133, 5941, 13112, + 8133, 5941, 13114, + 8133, 5941, 13116, + 8133, 5941, 13118, + 8133, 5941, 13120, + 8133, 5941, 13122, + 8133, 5941, 13124, + 8133, 5941, 13126, + 8133, 5941, 13128, + 8133, 5941, 13130, + 8133, 5941, 13132, + 8133, 5941, 13134, + 8133, 5941, 13136, + 8133, 5941, 13138, + 8133, 5941, 13140, + 8133, 5941, 13142, + 8133, 5941, 13144, + 8133, 5941, 13146, + 8133, 5941, 13148, + 8133, 5941, 13150, + 8133, 5941, 13152, + 8133, 5941, 13154, + 8133, 5941, 13156, + 8133, 5941, 13158, + 8133, 5941, 13160, + 8133, 5941, 13162, + 8133, 5941, 13164, + 8133, 5941, 13166, + 8133, 5941, 13168, + 8133, 5941, 13170, + 8133, 5941, 13172, + 8133, 5941, 13174, + 8133, 5941, 13176, + 8133, 5941, 13178, + 8133, 5941, 13180, + 8133, 5941, 13182, + 8133, 5941, 13240, + 8133, 5941, 13242, + 8133, 5941, 13244, + 8133, 5941, 13246, + 8133, 5941, 13248, + 8133, 5941, 13250, + 8133, 5941, 13252, + 8133, 5941, 13254, + 8133, 5941, 13256, + 8133, 5941, 13258, + 8133, 5941, 13260, + 8133, 5941, 13262, + 8133, 5941, 13264, + 8133, 5941, 13266, + 8133, 5941, 13268, + 8133, 5941, 13270, + 8133, 5941, 13272, + 8133, 5941, 13274, + 8133, 5941, 13276, + 8133, 5941, 13278, + 8133, 5941, 13280, + 8133, 5941, 13282, + 8133, 5941, 13284, + 8133, 5941, 13286, + 8133, 5941, 13288, + 8133, 5941, 13290, + 8133, 5941, 13292, + 8133, 5941, 13294, + 8133, 5941, 13296, + 8133, 5941, 13298, + 8133, 5941, 13300, + 8133, 5941, 13302, + 8133, 5941, 13304, + 8133, 5941, 13306, + 8133, 5941, 13308, + 8133, 5941, 13310, + 8133, 5941, 13312, + 8133, 5941, 13314, + 8133, 5941, 13316, + 8133, 5941, 13318, + 8133, 5941, 13320, + 8133, 5941, 13322, + 8133, 5941, 13324, + 8133, 5941, 13326, + 8133, 5941, 13328, + 8133, 5941, 13330, + 8133, 5941, 13332, + 8133, 5941, 13334, + 8133, 5941, 13336, + 8151, 6622, + 8151, 6778, + 8151, 8056, + 8151, 8528, + 8151, 8744, + 8151, 13029, 8450, + 8151, 13067, 6408, + 8153, 601, 5876, + 8153, 1809, 4876, + 8153, 4117, 5876, + 8153, 4849, 731, 12473, 9050, + 8153, 5444, + 8153, 6107, 10388, + 8153, 6379, 7908, + 8153, 6611, 6740, + 8153, 7119, 11195, 4926, + 8153, 7390, + 8153, 7391, 11195, 4926, + 8153, 7443, 731, 11099, 9050, + 8153, 7768, + 8153, 8088, + 8153, 8509, 11098, + 8153, 8509, 11099, 6121, 10666, + 8153, 8509, 12472, + 8153, 8745, 7768, + 8153, 8745, 12492, + 8153, 8759, 2091, 5758, + 8153, 8762, + 8153, 9095, 6689, 2170, + 8153, 9095, 6689, 2540, + 8153, 9095, 6689, 2778, + 8153, 9095, 6689, 4200, + 8153, 9095, 6689, 4214, + 8153, 9095, 6689, 5190, + 8153, 9095, 6689, 6722, + 8153, 9095, 6689, 7508, + 8153, 9095, 6689, 7694, + 8153, 9095, 8525, 2670, + 8153, 9437, 444, + 8153, 9437, 720, + 8153, 9525, 8306, + 8153, 9719, 10374, + 8153, 10260, + 8153, 10452, + 8153, 10469, 4926, + 8153, 10574, + 8153, 10578, + 8153, 10677, 761, 4849, 11378, + 8153, 10677, 761, 8153, 4849, 11378, + 8153, 10677, 761, 8153, 7443, 11378, + 8153, 10677, 4876, + 8153, 12017, 4926, + 8153, 12492, + 8153, 13201, 11195, 4926, + 8159, 5244, + 8167, 5758, + 8167, 5759, 721, 9705, 10410, + 8167, 5759, 721, 9705, 10411, 6121, 7709, 6376, + 8167, 5759, 6121, 1045, 6490, + 8167, 5759, 6121, 2779, 4113, 6377, 721, 2779, 4113, 6490, + 8167, 5759, 6121, 6537, 6376, + 8167, 5759, 6377, 5445, 5758, + 8167, 5759, 6377, 7709, 10374, + 8167, 5759, 6377, 11097, 6434, + 8167, 5759, 6377, 11765, 6434, + 8167, 6121, 9898, + 8167, 6610, + 8172, + 8197, 5758, + 8203, 3992, + 8203, 7608, + 8209, 5401, 10260, + 8225, 6906, + 8226, + 8227, 12133, 4926, + 8228, + 8231, 12108, + 8233, 5566, + 8235, 6809, 5758, + 8246, + 8255, 7359, 5758, + 8263, 7630, + 8267, 8405, 1104, + 8267, 8405, 1510, + 8267, 8405, 3234, + 8267, 8405, 3980, + 8267, 8405, 4324, + 8267, 8405, 4384, + 8267, 8405, 4622, + 8267, 8405, 5191, 9344, + 8267, 8405, 6056, + 8267, 8405, 6768, + 8267, 8405, 6960, + 8267, 8405, 6984, + 8267, 8405, 7064, + 8267, 8405, 7078, + 8267, 8405, 7130, + 8267, 8405, 7322, + 8267, 8405, 7416, + 8267, 8405, 7490, + 8267, 8405, 7674, + 8267, 8405, 7828, + 8267, 8405, 7912, + 8267, 8405, 8502, + 8267, 8405, 8514, + 8267, 8405, 8822, + 8267, 8405, 9018, + 8267, 8405, 10394, + 8267, 8405, 10462, + 8285, 721, 5424, + 8285, 721, 8712, + 8287, 8153, 1045, 5965, 4926, + 8287, 8206, + 8287, 8405, 0, + 8287, 8405, 8, + 8287, 8405, 16, + 8287, 8405, 28, + 8287, 8405, 40, + 8287, 8405, 66, + 8287, 8405, 178, + 8287, 8405, 188, + 8287, 8405, 426, + 8287, 8405, 622, + 8287, 8405, 626, + 8287, 8405, 630, + 8287, 8405, 652, + 8287, 8405, 654, + 8287, 8405, 656, + 8287, 8405, 660, + 8287, 8405, 664, + 8287, 8405, 2908, + 8287, 8405, 2926, + 8287, 8405, 3012, + 8287, 8405, 3056, + 8287, 8405, 5770, + 8287, 8405, 6216, + 8287, 8405, 6230, + 8287, 8405, 6422, + 8287, 8405, 6594, + 8287, 8405, 6912, + 8287, 8405, 6982, + 8287, 8405, 7166, + 8287, 8405, 7244, + 8287, 8405, 7372, + 8287, 8405, 7440, + 8287, 8405, 7862, + 8287, 8405, 7866, + 8287, 8405, 7932, + 8287, 8405, 8362, + 8287, 8405, 8828, + 8287, 8405, 8950, + 8287, 8405, 8956, + 8287, 8405, 9086, + 8287, 8405, 9400, + 8287, 8405, 9562, + 8287, 8405, 9588, + 8287, 8405, 9780, + 8287, 8405, 10686, + 8287, 8405, 11248, + 8287, 8405, 11682, + 8287, 8405, 11696, + 8287, 8405, 11728, + 8287, 8405, 11758, + 8287, 8405, 11804, + 8287, 8405, 11812, + 8287, 8405, 11814, + 8287, 8405, 11824, + 8287, 8405, 11826, + 8287, 8405, 11828, + 8287, 8405, 11830, + 8287, 8405, 11832, + 8287, 8405, 12070, + 8287, 8405, 12080, + 8287, 8405, 12094, + 8287, 8405, 12096, + 8287, 8405, 12124, + 8287, 8405, 12144, + 8287, 8405, 12146, + 8287, 8405, 12150, + 8287, 8405, 12346, + 8287, 8405, 12348, + 8287, 8405, 12350, + 8287, 8405, 12352, + 8287, 8405, 12388, + 8287, 8405, 12514, + 8287, 8405, 12518, + 8287, 8405, 12520, + 8287, 8405, 12532, + 8287, 8405, 12534, + 8287, 8405, 12958, + 8287, 8405, 12960, + 8287, 8405, 12972, + 8287, 8405, 12978, + 8287, 8405, 12998, + 8287, 8405, 13004, + 8287, 8405, 13006, + 8287, 8405, 13008, + 8287, 8405, 13034, + 8287, 8405, 13204, + 8287, 8405, 13348, + 8287, 8405, 13354, + 8287, 8405, 13366, + 8287, 8405, 13368, + 8287, 8405, 13370, + 8287, 8405, 13374, + 8287, 8405, 13386, + 8287, 8717, 1045, 5965, 4926, + 8287, 9945, 5770, + 8287, 9945, 6594, + 8287, 9945, 6912, + 8287, 9945, 6982, + 8287, 9945, 7166, + 8287, 9945, 7244, + 8287, 9945, 7372, + 8287, 9945, 7440, + 8287, 9945, 8206, + 8287, 9945, 8362, + 8287, 9945, 8828, + 8287, 9945, 9086, + 8287, 9945, 9400, + 8287, 9945, 9562, + 8287, 9945, 9588, + 8287, 9945, 9780, + 8287, 9945, 10686, + 8287, 9945, 11248, + 8287, 9945, 11652, + 8287, 9945, 11728, + 8287, 9945, 11804, + 8287, 9945, 11806, + 8287, 9945, 11808, + 8287, 9945, 11810, + 8287, 9945, 11812, + 8287, 9945, 11814, + 8287, 9945, 11816, + 8287, 9945, 11824, + 8287, 9945, 11826, + 8287, 9945, 11828, + 8287, 9945, 11830, + 8287, 9945, 11832, + 8287, 9945, 11834, + 8287, 9945, 11902, + 8287, 9945, 12044, + 8287, 9945, 12046, + 8287, 9945, 12048, + 8287, 9945, 12080, + 8287, 9945, 12098, + 8287, 9945, 12124, + 8287, 9945, 12128, + 8287, 9945, 12144, + 8287, 9945, 12148, + 8287, 9945, 12346, + 8287, 9945, 12348, + 8287, 9945, 12350, + 8287, 9945, 12352, + 8287, 9945, 12388, + 8287, 9945, 12424, + 8287, 9945, 12484, + 8287, 9945, 12486, + 8287, 9945, 12512, + 8287, 9945, 12514, + 8287, 9945, 12518, + 8287, 9945, 12520, + 8287, 9945, 12858, + 8287, 9945, 12860, + 8287, 9945, 12862, + 8287, 9945, 12864, + 8287, 9945, 12908, + 8287, 9945, 12910, + 8287, 9945, 12942, + 8287, 9945, 12946, + 8287, 9945, 12948, + 8287, 9945, 12950, + 8287, 9945, 12958, + 8287, 9945, 12960, + 8287, 9945, 12962, + 8287, 9945, 12992, + 8287, 9945, 12994, + 8287, 9945, 12996, + 8287, 9945, 12998, + 8287, 9945, 13026, + 8287, 9945, 13078, + 8287, 9945, 13192, + 8287, 9945, 13194, + 8287, 9945, 13196, + 8287, 9945, 13204, + 8287, 9945, 13218, + 8287, 9945, 13238, + 8287, 9945, 13342, + 8287, 9945, 13344, + 8287, 9945, 13358, + 8287, 9945, 13366, + 8287, 9945, 13368, + 8287, 9945, 13378, + 8287, 9945, 13382, + 8287, 9945, 13384, + 8287, 9945, 13386, + 8287, 9945, 13408, + 8287, 9945, 13412, + 8287, 11071, 5770, + 8287, 11071, 6594, + 8287, 11071, 6912, + 8287, 11071, 6982, + 8287, 11071, 7166, + 8287, 11071, 7244, + 8287, 11071, 7372, + 8287, 11071, 7440, + 8287, 11071, 8362, + 8287, 11071, 8828, + 8287, 11071, 9086, + 8287, 11071, 9400, + 8287, 11071, 9562, + 8287, 11071, 9588, + 8287, 11071, 9780, + 8287, 11071, 10686, + 8287, 11071, 11248, + 8287, 11071, 11682, + 8287, 11071, 11696, + 8287, 11071, 11728, + 8287, 11071, 11758, + 8287, 11071, 11814, + 8287, 11071, 11816, + 8287, 11071, 11828, + 8287, 11071, 11834, + 8287, 11071, 12032, + 8287, 11071, 12034, + 8287, 11071, 12036, + 8287, 11071, 12038, + 8287, 11071, 12070, + 8287, 11071, 12078, + 8287, 11071, 12080, + 8287, 11071, 12082, + 8287, 11071, 12094, + 8287, 11071, 12096, + 8287, 11071, 12126, + 8287, 11071, 12130, + 8287, 11071, 12144, + 8287, 11071, 12146, + 8287, 11071, 12148, + 8287, 11071, 12150, + 8287, 11071, 12346, + 8287, 11071, 12348, + 8287, 11071, 12350, + 8287, 11071, 12388, + 8287, 11071, 12484, + 8287, 11071, 12496, + 8287, 11071, 12508, + 8287, 11071, 12512, + 8287, 11071, 12514, + 8287, 11071, 12532, + 8287, 11071, 12534, + 8287, 11071, 12884, + 8287, 11071, 12944, + 8287, 11071, 12958, + 8287, 11071, 12960, + 8287, 11071, 12970, + 8287, 11071, 12972, + 8287, 11071, 12978, + 8287, 11071, 12980, + 8287, 11071, 12992, + 8287, 11071, 12996, + 8287, 11071, 13002, + 8287, 11071, 13004, + 8287, 11071, 13006, + 8287, 11071, 13008, + 8287, 11071, 13026, + 8287, 11071, 13034, + 8287, 11071, 13204, + 8287, 11071, 13214, + 8287, 11071, 13224, + 8287, 11071, 13346, + 8287, 11071, 13348, + 8287, 11071, 13354, + 8287, 11071, 13362, + 8287, 11071, 13370, + 8287, 11071, 13372, + 8287, 11071, 13374, + 8287, 11071, 13388, + 8287, 11071, 13394, + 8287, 11071, 13396, + 8287, 11071, 13406, + 8287, 11073, 0, + 8287, 11073, 8, + 8287, 11073, 16, + 8287, 11073, 28, + 8287, 11073, 40, + 8287, 11073, 66, + 8287, 11073, 178, + 8287, 11073, 188, + 8287, 11073, 426, + 8287, 11073, 622, + 8287, 11073, 626, + 8287, 11073, 630, + 8287, 11073, 652, + 8287, 11073, 654, + 8287, 11073, 656, + 8287, 11073, 660, + 8287, 11073, 664, + 8287, 11073, 686, + 8287, 11073, 688, + 8287, 11073, 1466, + 8287, 11073, 1468, + 8287, 11073, 1470, + 8287, 11073, 2148, + 8287, 11073, 2150, + 8287, 11073, 2152, + 8287, 11073, 2800, + 8287, 11073, 2802, + 8287, 11073, 2908, + 8287, 11073, 2926, + 8287, 11073, 3012, + 8287, 11073, 3056, + 8287, 11073, 4160, + 8287, 11073, 4162, + 8287, 11073, 4168, + 8287, 11073, 4592, + 8287, 11073, 4594, + 8287, 11073, 5370, + 8287, 11073, 5372, + 8287, 11073, 6040, + 8287, 11073, 6042, + 8287, 11073, 6158, + 8287, 11073, 6204, + 8287, 11073, 6216, + 8287, 11073, 6218, + 8287, 11073, 6226, + 8287, 11073, 6228, + 8287, 11073, 6230, + 8287, 11073, 6232, + 8287, 11073, 6422, + 8287, 11073, 6736, + 8287, 11073, 6760, + 8287, 11073, 7838, + 8287, 11073, 7850, + 8287, 11073, 7852, + 8287, 11073, 7862, + 8287, 11073, 7864, + 8287, 11073, 7866, + 8287, 11073, 8206, + 8287, 11073, 8950, + 8287, 11073, 8952, + 8287, 11073, 8956, + 8287, 11073, 9002, + 8287, 11073, 9004, + 8287, 11073, 9346, + 8287, 11073, 9800, + 8287, 11073, 9882, + 8287, 11073, 11822, + 8293, 4927, 7121, 1044, + 8293, 4927, 7773, 1044, + 8293, 4927, 8455, 8056, + 8293, 7383, 2535, 1044, + 8293, 7383, 5522, + 8293, 7383, 5699, 1044, + 8293, 7383, 6901, 7342, + 8293, 7383, 6901, 7502, + 8293, 7383, 6901, 8620, + 8293, 7383, 6914, + 8293, 7383, 6948, + 8293, 7383, 6949, 6899, 1177, 2852, + 8293, 7383, 7148, + 8293, 7383, 7342, + 8293, 7383, 7502, + 8293, 7383, 7536, + 8293, 7383, 7742, + 8293, 7383, 8087, 445, 7132, + 8293, 7383, 8620, + 8293, 7383, 8621, 7404, + 8293, 7383, 8626, + 8293, 7383, 12957, 8910, + 8293, 7909, 2168, + 8293, 7909, 4054, + 8293, 7909, 4604, + 8293, 7909, 6439, 8280, + 8293, 7909, 6652, + 8293, 7909, 7192, + 8293, 7909, 7346, + 8293, 7909, 7402, + 8293, 7909, 7432, + 8293, 7909, 7502, + 8293, 7909, 7676, + 8293, 7909, 7855, 785, 6222, + 8293, 7909, 7858, + 8293, 7909, 7869, 6816, + 8293, 7909, 7869, 7404, + 8293, 7909, 7870, + 8293, 7909, 7886, + 8293, 7909, 8252, + 8293, 7909, 8253, 8492, + 8293, 7909, 8468, + 8293, 7909, 8469, 8346, + 8293, 7909, 8568, + 8293, 7909, 8623, 5398, + 8293, 7909, 8830, + 8293, 7909, 9272, + 8293, 7909, 9773, 8244, + 8293, 7909, 9773, 8624, + 8293, 7909, 10310, + 8293, 7909, 11016, + 8293, 7909, 11798, + 8293, 8405, 238, + 8293, 8405, 239, 6121, 7132, + 8293, 8405, 468, + 8293, 8405, 469, 6121, 5522, + 8293, 8405, 469, 6121, 8086, + 8293, 8405, 788, + 8293, 8405, 789, 6121, 5522, + 8293, 8405, 789, 6121, 8086, + 8293, 8405, 1366, + 8293, 8405, 1578, + 8293, 8405, 1579, 6121, 5522, + 8293, 8405, 1579, 6121, 8086, + 8293, 8405, 1892, + 8293, 8405, 1893, 6121, 8086, + 8293, 8405, 2110, + 8293, 8405, 2111, 6121, 8086, + 8293, 8405, 2318, + 8293, 8405, 2319, 6121, 8086, + 8293, 8405, 2660, + 8293, 8405, 2661, 6121, 8086, + 8293, 8405, 2674, + 8293, 8405, 2675, 6121, 8086, + 8293, 8405, 2852, + 8293, 8405, 2853, 6121, 6948, + 8293, 8405, 2853, 6121, 8086, + 8293, 8405, 3080, + 8293, 8405, 3081, 6121, 6914, + 8293, 8405, 3081, 6121, 8086, + 8293, 8405, 3244, + 8293, 8405, 3245, 6121, 7132, + 8293, 8405, 3245, 6121, 7342, + 8293, 8405, 3245, 6121, 8620, + 8293, 8405, 3292, + 8293, 8405, 5538, + 8293, 8405, 5539, 6121, 8086, + 8293, 8405, 5698, + 8293, 8405, 5699, 6121, 2535, 1044, + 8293, 8405, 5699, 6121, 5699, 1044, + 8293, 8405, 5699, 6121, 8086, + 8293, 8405, 5699, 6121, 8087, 721, 2535, 1044, + 8293, 8405, 5699, 6121, 8087, 721, 5699, 1044, + 8293, 8405, 6115, 238, + 8293, 8405, 6115, 1578, + 8293, 8405, 6115, 2660, + 8293, 8405, 6115, 3244, + 8293, 8405, 6115, 5538, + 8293, 8405, 6115, 6642, + 8293, 8405, 6115, 6789, 1892, + 8293, 8405, 6115, 7082, + 8293, 8405, 6642, + 8293, 8405, 6643, 6121, 8086, + 8293, 8405, 6789, 468, + 8293, 8405, 6789, 469, 6121, 8086, + 8293, 8405, 6789, 1578, + 8293, 8405, 6789, 1579, 6121, 8086, + 8293, 8405, 6789, 1892, + 8293, 8405, 6789, 2110, + 8293, 8405, 6789, 7740, + 8293, 8405, 6856, + 8293, 8405, 6857, 6121, 8086, + 8293, 8405, 7082, + 8293, 8405, 7083, 6121, 8086, + 8293, 8405, 7740, + 8293, 8405, 7741, 6121, 8086, + 8293, 8405, 7872, + 8293, 8405, 7873, 6121, 8086, + 8293, 8405, 8660, + 8293, 8405, 8661, 6121, 8086, + 8293, 8405, 11893, 3292, + 8293, 8405, 11893, 5445, 5758, + 8293, 10301, 3245, 7082, + 8293, 10301, 9847, 2853, 3080, + 8293, 10301, 9847, 3081, 3081, 7342, + 8293, 10301, 9847, 8153, 2852, + 8293, 10301, 9847, 8153, 3080, + 8293, 12133, 2111, 9318, + 8293, 12133, 2551, 7340, + 8293, 12133, 7134, + 8293, 12133, 7338, + 8293, 12133, 8252, + 8293, 12133, 11016, + 8306, + 8307, 6121, 10804, + 8307, 8022, + 8337, 9617, 151, 2090, + 8337, 9617, 228, + 8337, 9617, 229, 8722, + 8337, 9617, 720, + 8337, 9617, 742, + 8337, 9617, 806, + 8337, 9617, 824, + 8337, 9617, 920, + 8337, 9617, 1036, + 8337, 9617, 1044, + 8337, 9617, 1048, + 8337, 9617, 1090, + 8337, 9617, 1092, + 8337, 9617, 1136, + 8337, 9617, 1170, + 8337, 9617, 1182, + 8337, 9617, 1474, + 8337, 9617, 1504, + 8337, 9617, 1780, + 8337, 9617, 1860, + 8337, 9617, 2024, + 8337, 9617, 2090, + 8337, 9617, 2166, + 8337, 9617, 2170, + 8337, 9617, 2224, + 8337, 9617, 2390, + 8337, 9617, 2392, + 8337, 9617, 2400, + 8337, 9617, 2454, + 8337, 9617, 2502, + 8337, 9617, 2504, + 8337, 9617, 2586, + 8337, 9617, 2670, + 8337, 9617, 2778, + 8337, 9617, 2779, 6896, + 8337, 9617, 2834, + 8337, 9617, 3762, + 8337, 9617, 3788, + 8337, 9617, 3794, + 8337, 9617, 3798, + 8337, 9617, 3800, + 8337, 9617, 3805, 429, 6604, + 8337, 9617, 3806, + 8337, 9617, 3850, + 8337, 9617, 3852, + 8337, 9617, 3940, + 8337, 9617, 3942, + 8337, 9617, 3944, + 8337, 9617, 4052, + 8337, 9617, 4094, + 8337, 9617, 4108, + 8337, 9617, 4117, 826, + 8337, 9617, 4120, + 8337, 9617, 4172, + 8337, 9617, 4178, + 8337, 9617, 4180, + 8337, 9617, 4194, + 8337, 9617, 4196, + 8337, 9617, 4208, + 8337, 9617, 4218, + 8337, 9617, 4244, + 8337, 9617, 4342, + 8337, 9617, 4386, + 8337, 9617, 4389, 5969, 7736, + 8337, 9617, 4390, + 8337, 9617, 4398, + 8337, 9617, 4402, + 8337, 9617, 4530, + 8337, 9617, 4536, + 8337, 9617, 4608, + 8337, 9617, 4628, + 8337, 9617, 4824, + 8337, 9617, 4834, + 8337, 9617, 4844, + 8337, 9617, 4846, + 8337, 9617, 4850, + 8337, 9617, 4872, + 8337, 9617, 4876, + 8337, 9617, 4894, + 8337, 9617, 4895, 8756, + 8337, 9617, 4940, + 8337, 9617, 5012, + 8337, 9617, 5242, + 8337, 9617, 5385, 826, + 8337, 9617, 5438, + 8337, 9617, 5524, + 8337, 9617, 5546, + 8337, 9617, 5562, + 8337, 9617, 5632, + 8337, 9617, 5646, + 8337, 9617, 5650, + 8337, 9617, 5764, + 8337, 9617, 5772, + 8337, 9617, 5834, + 8337, 9617, 5836, + 8337, 9617, 5884, + 8337, 9617, 5940, + 8337, 9617, 5968, + 8337, 9617, 6100, + 8337, 9617, 6101, 10970, + 8337, 9617, 6112, + 8337, 9617, 6116, + 8337, 9617, 6118, + 8337, 9617, 6130, + 8337, 9617, 6132, + 8337, 9617, 6384, + 8337, 9617, 6434, + 8337, 9617, 6504, + 8337, 9617, 6512, + 8337, 9617, 6520, + 8337, 9617, 6574, + 8337, 9617, 6600, + 8337, 9617, 6612, + 8337, 9617, 6618, + 8337, 9617, 6670, + 8337, 9617, 6716, + 8337, 9617, 6722, + 8337, 9617, 6734, + 8337, 9617, 6780, + 8337, 9617, 6786, + 8337, 9617, 6794, + 8337, 9617, 6852, + 8337, 9617, 6870, + 8337, 9617, 6872, + 8337, 9617, 6906, + 8337, 9617, 6952, + 8337, 9617, 7056, + 8337, 9617, 7144, + 8337, 9617, 7184, + 8337, 9617, 7186, + 8337, 9617, 7388, + 8337, 9617, 7443, 5385, 826, + 8337, 9617, 7446, + 8337, 9617, 7526, + 8337, 9617, 7532, + 8337, 9617, 7548, + 8337, 9617, 7551, 8785, 3788, + 8337, 9617, 7551, 8824, + 8337, 9617, 7580, + 8337, 9617, 7582, + 8337, 9617, 7584, + 8337, 9617, 7592, + 8337, 9617, 7602, + 8337, 9617, 7604, + 8337, 9617, 7612, + 8337, 9617, 7616, + 8337, 9617, 7628, + 8337, 9617, 7634, + 8337, 9617, 7642, + 8337, 9617, 7654, + 8337, 9617, 7662, + 8337, 9617, 7704, + 8337, 9617, 7726, + 8337, 9617, 7730, + 8337, 9617, 7812, + 8337, 9617, 7816, + 8337, 9617, 7820, + 8337, 9617, 7830, + 8337, 9617, 7832, + 8337, 9617, 7942, + 8337, 9617, 7964, + 8337, 9617, 7974, + 8337, 9617, 8000, + 8337, 9617, 8008, + 8337, 9617, 8078, + 8337, 9617, 8118, + 8337, 9617, 8151, 5896, + 8337, 9617, 8151, 6600, + 8337, 9617, 8153, 46, + 8337, 9617, 8154, + 8337, 9617, 8194, + 8337, 9617, 8303, 10970, + 8337, 9617, 8316, + 8337, 9617, 8476, + 8337, 9617, 8484, + 8337, 9617, 8542, + 8337, 9617, 8678, + 8337, 9617, 8680, + 8337, 9617, 8730, + 8337, 9617, 8734, + 8337, 9617, 8740, + 8337, 9617, 8744, + 8337, 9617, 8793, 9426, + 8337, 9617, 8844, + 8337, 9617, 8852, + 8337, 9617, 8866, + 8337, 9617, 8870, + 8337, 9617, 8906, + 8337, 9617, 8928, + 8337, 9617, 8946, + 8337, 9617, 9056, + 8337, 9617, 9102, + 8337, 9617, 9106, + 8337, 9617, 9274, + 8337, 9617, 9282, + 8337, 9617, 9322, + 8337, 9617, 9426, + 8337, 9617, 9480, + 8337, 9617, 9532, + 8337, 9617, 9608, + 8337, 9617, 9658, + 8337, 9617, 9822, + 8337, 9617, 9934, + 8337, 9617, 10206, + 8337, 9617, 10336, + 8337, 9617, 10344, + 8337, 9617, 10456, + 8337, 9617, 10520, + 8337, 9617, 10542, + 8337, 9617, 10970, + 8337, 9617, 11488, + 8337, 9617, 11606, + 8337, 9617, 11946, + 8337, 9617, 12155, 6118, + 8349, 5758, + 8371, 10539, 8774, + 8389, 5912, + 8389, 5913, 445, 6741, 568, + 8401, 5759, 2388, + 8401, 5759, 7282, + 8401, 6689, 2170, + 8401, 6689, 2540, + 8401, 6689, 2778, + 8401, 6689, 4200, + 8401, 6689, 4214, + 8401, 6689, 5190, + 8401, 6689, 6260, + 8401, 6689, 6722, + 8401, 6689, 7508, + 8401, 6689, 7694, + 8401, 7803, 5759, 8, + 8401, 7803, 5759, 16, + 8401, 7803, 5759, 28, + 8401, 7803, 5759, 40, + 8401, 7803, 5759, 58, + 8401, 7803, 5759, 440, + 8401, 7803, 5759, 606, + 8401, 8405, 0, + 8401, 8405, 100, + 8401, 8405, 116, + 8401, 8405, 138, + 8401, 8405, 196, + 8401, 8405, 216, + 8401, 8405, 236, + 8401, 8405, 292, + 8401, 8405, 306, + 8401, 8405, 332, + 8401, 8405, 364, + 8401, 8405, 392, + 8401, 8405, 462, + 8401, 8405, 510, + 8401, 8405, 524, + 8401, 8405, 556, + 8401, 8405, 610, + 8401, 8405, 622, + 8401, 8405, 652, + 8401, 8405, 814, + 8401, 8405, 884, + 8401, 8405, 974, + 8401, 8405, 1080, + 8401, 8405, 1168, + 8401, 8405, 1286, + 8401, 8405, 1390, + 8401, 8405, 1612, + 8401, 8405, 1652, + 8401, 8405, 1930, + 8401, 8405, 2030, + 8401, 8405, 2126, + 8401, 8405, 2212, + 8401, 8405, 2234, + 8401, 8405, 2516, + 8401, 8405, 2678, + 8401, 8405, 2732, + 8401, 8405, 2746, + 8401, 8405, 5978, + 8401, 8405, 5994, + 8401, 10775, 5759, 20, + 8401, 10775, 5759, 22, + 8401, 10775, 5759, 24, + 8401, 10775, 5759, 26, + 8401, 10775, 5759, 30, + 8401, 10775, 5759, 34, + 8401, 10775, 5759, 38, + 8401, 10775, 5759, 4720, + 8401, 10775, 5759, 9522, + 8401, 11257, 8405, 510, + 8401, 11257, 8405, 652, + 8401, 12133, 5301, 8827, 8782, + 8401, 12133, 8038, + 8401, 12133, 8782, + 8401, 12133, 8856, + 8401, 12133, 8857, 8038, + 8421, 3, 8775, 3328, + 8421, 3, 8775, 3330, + 8421, 3, 8775, 3336, + 8421, 3, 8775, 3360, + 8421, 3, 8775, 3384, + 8421, 3, 8775, 3388, + 8421, 3, 8775, 3402, + 8421, 3, 8775, 3416, + 8421, 3, 8775, 3418, + 8421, 3, 8775, 3448, + 8421, 3, 8775, 3454, + 8421, 3, 8775, 3456, + 8421, 3, 8775, 3460, + 8421, 3, 8775, 3464, + 8421, 3, 10247, 3471, 1860, + 8421, 3, 10247, 3473, 7830, + 8421, 3, 10247, 3475, 4052, + 8421, 3, 10247, 3477, 6742, + 8421, 3, 10247, 3479, 7816, + 8421, 3, 10247, 3481, 7978, + 8421, 3, 10247, 3483, 7314, + 8421, 3, 10247, 3485, 7614, + 8421, 3, 10247, 3487, 9134, + 8421, 3, 10247, 3493, 2164, + 8421, 3, 10247, 3495, 6118, + 8421, 3, 10247, 3496, + 8421, 3, 10247, 3503, 8018, + 8421, 3, 10247, 3505, 4342, + 8421, 3, 10247, 3506, + 8421, 3, 10247, 3509, 6124, + 8421, 3, 10247, 3510, + 8421, 3, 10247, 3512, + 8421, 3, 10247, 3515, 4536, + 8421, 3, 10247, 3516, + 8421, 3, 10247, 3518, + 8421, 3, 10247, 3520, + 8421, 3, 10247, 3526, + 8421, 3, 10247, 3528, + 8421, 3, 10247, 3531, 6604, + 8421, 3, 10247, 3532, + 8421, 3, 10247, 3534, + 8421, 3, 10247, 3537, 9300, + 8421, 3, 10247, 3539, 7936, + 8421, 3, 10247, 3540, + 8421, 3, 10247, 3542, + 8421, 3, 10247, 3544, + 8421, 3, 10247, 3546, + 8421, 3, 10247, 3548, + 8421, 3, 10247, 3550, + 8421, 3, 10247, 3552, + 8421, 3, 10247, 3554, + 8421, 3, 10247, 3556, + 8421, 3, 10247, 3559, 7182, + 8421, 3, 10247, 3560, + 8421, 3, 10247, 3563, 5968, + 8421, 3, 10247, 3564, + 8421, 3, 10247, 3566, + 8421, 3, 10247, 3568, + 8421, 3, 10247, 3570, + 8421, 3, 10247, 3572, + 8421, 3, 10247, 3574, + 8421, 3, 10247, 3576, + 8421, 3, 10247, 3578, + 8421, 3, 10247, 3580, + 8421, 3, 10247, 3582, + 8421, 3, 10247, 3584, + 8421, 3, 10247, 3587, 8296, + 8421, 3, 10247, 3629, 11000, + 8421, 3, 10247, 3635, 9030, + 8421, 3, 10247, 3645, 7612, + 8421, 3, 10247, 3647, 6434, + 8421, 3, 10247, 3648, + 8421, 3, 10247, 3651, 7656, + 8421, 3, 10247, 3652, + 8421, 3, 10247, 3654, + 8421, 3, 10247, 3657, 9841, 9082, + 8421, 3, 10247, 3659, 9082, + 8421, 3, 10247, 3661, 9083, 6806, + 8421, 3, 10247, 3663, 7818, + 8421, 3, 10247, 3664, + 8421, 3, 10247, 3666, + 8421, 3, 10247, 3670, + 8421, 3, 10247, 3672, + 8421, 3, 10247, 3676, + 8421, 3, 10247, 3678, + 8421, 3, 10247, 3680, + 8421, 3, 10247, 3683, 3990, + 8421, 3, 10247, 3684, + 8421, 3, 10247, 3686, + 8421, 3, 10247, 3688, + 8421, 3, 10247, 3690, + 8421, 3, 10247, 3692, + 8421, 3, 10247, 6445, 4924, + 8421, 3, 10247, 6447, 10536, + 8421, 3, 10247, 6449, 1132, + 8421, 3, 10247, 6451, 2386, + 8421, 3, 10247, 6453, 10516, + 8421, 3, 10247, 6455, 9332, + 8421, 3, 10247, 6457, 2562, + 8421, 3, 10247, 6459, 3796, + 8421, 3, 10247, 6461, 920, + 8421, 3, 10247, 6463, 3812, + 8421, 3, 10247, 8915, 3522, + 8421, 3, 10247, 8915, 3588, + 8421, 3, 10247, 8915, 3590, + 8421, 3, 10247, 8915, 3592, + 8421, 3, 10247, 8915, 3594, + 8421, 3, 10247, 8915, 3596, + 8421, 3, 10247, 8915, 3598, + 8421, 3, 10247, 8915, 3600, + 8421, 3, 10247, 8915, 3602, + 8421, 3, 10247, 8915, 3604, + 8421, 3, 10247, 8915, 3606, + 8421, 3, 10247, 8915, 3608, + 8421, 3, 10247, 8915, 3610, + 8421, 3, 10247, 8915, 3612, + 8421, 3, 10247, 8915, 3614, + 8421, 3, 10247, 8915, 3616, + 8421, 3, 10247, 8915, 3618, + 8421, 3, 10247, 8915, 3620, + 8421, 3, 10247, 8915, 3622, + 8421, 3, 10247, 8915, 3624, + 8421, 3, 10247, 8915, 3626, + 8421, 3, 10247, 8915, 3630, + 8421, 3, 10247, 8915, 3632, + 8421, 3, 10247, 8915, 3636, + 8421, 3, 10247, 8915, 3638, + 8421, 3, 10247, 8915, 3640, + 8421, 3, 10247, 8915, 3642, + 8421, 3, 10247, 8915, 3674, + 8421, 3, 10247, 8915, 3694, + 8421, 3, 10343, 3489, 4726, + 8421, 3, 10343, 3491, 8334, + 8421, 3, 10343, 3499, 6424, + 8421, 3, 10343, 3501, 4948, + 8421, 3, 10343, 3525, 7754, + 8421, 3, 10343, 3669, 6692, + 8421, 3, 10585, 3295, 138, + 8421, 3, 10585, 3297, 516, + 8421, 3, 10585, 3299, 462, + 8421, 3, 10585, 3301, 560, + 8421, 3, 10585, 3303, 568, + 8421, 3, 10585, 3305, 392, + 8421, 3, 10585, 3307, 144, + 8421, 3, 10585, 3309, 0, + 8421, 3, 10585, 3311, 526, + 8421, 3, 10585, 3313, 40, + 8421, 3, 10585, 3315, 480, + 8421, 3, 10585, 3317, 536, + 8421, 3, 10585, 3319, 368, + 8421, 3, 10585, 3321, 150, + 8421, 3, 10585, 3323, 380, + 8421, 3, 10585, 3325, 496, + 8421, 3, 10585, 3327, 670, + 8421, 3, 10585, 3333, 678, + 8421, 3, 10585, 3335, 500, + 8421, 3, 10585, 3339, 384, + 8421, 3, 10585, 3341, 396, + 8421, 3, 10585, 3343, 54, + 8421, 3, 10585, 3345, 520, + 8421, 3, 10585, 3347, 512, + 8421, 3, 10585, 3349, 16, + 8421, 3, 10585, 3351, 2254, + 8421, 3, 10585, 3353, 404, + 8421, 3, 10585, 3355, 524, + 8421, 3, 10585, 3357, 502, + 8421, 3, 10585, 3359, 2376, + 8421, 3, 10585, 3363, 298, + 8421, 3, 10585, 3365, 564, + 8421, 3, 10585, 3367, 8, + 8421, 3, 10585, 3369, 476, + 8421, 3, 10585, 3371, 630, + 8421, 3, 10585, 3373, 532, + 8421, 3, 10585, 3375, 632, + 8421, 3, 10585, 3377, 56, + 8421, 3, 10585, 3379, 310, + 8421, 3, 10585, 3381, 142, + 8421, 3, 10585, 3383, 294, + 8421, 3, 10585, 3387, 2122, + 8421, 3, 10585, 3391, 486, + 8421, 3, 10585, 3393, 152, + 8421, 3, 10585, 3395, 412, + 8421, 3, 10585, 3397, 514, + 8421, 3, 10585, 3399, 622, + 8421, 3, 10585, 3401, 416, + 8421, 3, 10585, 3405, 292, + 8421, 3, 10585, 3407, 546, + 8421, 3, 10585, 3409, 556, + 8421, 3, 10585, 3411, 510, + 8421, 3, 10585, 3413, 28, + 8421, 3, 10585, 3415, 2252, + 8421, 3, 10585, 3421, 300, + 8421, 3, 10585, 3423, 2632, + 8421, 3, 10585, 3425, 314, + 8421, 3, 10585, 3427, 2422, + 8421, 3, 10585, 3429, 576, + 8421, 3, 10585, 3431, 322, + 8421, 3, 10585, 3433, 1074, + 8421, 3, 10585, 3435, 468, + 8421, 3, 10585, 3437, 374, + 8421, 3, 10585, 3439, 672, + 8421, 3, 10585, 3441, 626, + 8421, 3, 10585, 3443, 2374, + 8421, 3, 10585, 3445, 306, + 8421, 3, 10585, 3447, 498, + 8421, 3, 10585, 3451, 364, + 8421, 3, 10585, 3453, 326, + 8421, 3, 10585, 3459, 92, + 8421, 3, 10585, 3463, 2774, + 8421, 3, 10585, 3467, 1076, + 8421, 3, 10585, 3469, 2778, + 8429, 8405, 0, + 8429, 8405, 2, + 8429, 8405, 6, + 8429, 8405, 8, + 8429, 8405, 12, + 8429, 8405, 14, + 8429, 8405, 16, + 8429, 8405, 18, + 8429, 8405, 20, + 8429, 8405, 22, + 8429, 8405, 24, + 8429, 8405, 26, + 8429, 8405, 30, + 8429, 8405, 32, + 8429, 8405, 34, + 8429, 8405, 36, + 8429, 8405, 38, + 8429, 8405, 40, + 8429, 8405, 44, + 8429, 8405, 46, + 8429, 8405, 50, + 8429, 8405, 80, + 8429, 8405, 104, + 8429, 8405, 176, + 8429, 8405, 316, + 8429, 8405, 378, + 8429, 8405, 410, + 8429, 8405, 562, + 8429, 8405, 574, + 8431, 8405, 0, + 8431, 8405, 2, + 8431, 8405, 4, + 8431, 8405, 6, + 8431, 8405, 8, + 8431, 8405, 10, + 8431, 8405, 12, + 8431, 8405, 16, + 8431, 8405, 20, + 8431, 8405, 22, + 8431, 8405, 24, + 8431, 8405, 26, + 8431, 8405, 28, + 8431, 8405, 32, + 8431, 8405, 34, + 8431, 8405, 36, + 8431, 8405, 38, + 8431, 8405, 40, + 8431, 8405, 42, + 8431, 8405, 48, + 8431, 8405, 80, + 8431, 8405, 176, + 8431, 8405, 360, + 8431, 8405, 410, + 8431, 8405, 542, + 8431, 8405, 574, + 8431, 11859, 4926, + 8432, + 8463, 4849, 6627, 9051, 10380, + 8463, 4849, 12115, 10380, + 8463, 6505, 8056, + 8463, 7443, 6627, 9051, 10380, + 8463, 7443, 12115, 10380, + 8463, 7512, + 8463, 7593, 7821, 8056, + 8463, 7821, 8056, + 8463, 10677, 760, + 8463, 10997, 4849, 12115, 10380, + 8463, 10997, 7443, 12115, 10380, + 8463, 12505, 7608, + 8463, 12967, 6409, 9051, 10380, + 8463, 13067, 6409, 9051, 10380, + 8473, 1044, + 8480, + 8483, 2779, 2584, + 8499, 10363, 7608, + 8510, + 8521, 10573, 428, + 8521, 10573, 429, 445, 6741, 568, + 8525, 2671, 4223, 5836, + 8525, 5758, + 8525, 8163, 4223, 5836, + 8525, 8875, 4223, 5836, + 8525, 8877, 4223, 5836, + 8525, 9287, 4223, 5836, + 8525, 9701, 4223, 5836, + 8525, 10151, 4223, 5836, + 8525, 10201, 4223, 5836, + 8525, 10361, 4223, 5836, + 8525, 10623, 4223, 5836, + 8525, 11233, 4223, 5836, + 8527, 5758, + 8533, 12143, 10758, + 8534, + 8545, 1610, + 8551, 4849, 12114, + 8551, 7443, 12114, + 8562, + 8570, + 8581, 5758, + 8592, + 8595, 9956, + 8595, 9957, 5387, 2779, 476, + 8609, 4926, + 8609, 4927, 4178, + 8631, 8151, 12953, 8450, + 8631, 8744, + 8631, 12953, 8450, + 8639, 7803, 5759, 8, + 8639, 7803, 5759, 16, + 8639, 7803, 5759, 28, + 8639, 7803, 5759, 40, + 8639, 7803, 5759, 72, + 8639, 7803, 5759, 92, + 8639, 7803, 5759, 160, + 8639, 7803, 5759, 188, + 8639, 8405, 0, + 8639, 8405, 100, + 8639, 8405, 116, + 8639, 8405, 138, + 8639, 8405, 216, + 8639, 8405, 236, + 8639, 8405, 292, + 8639, 8405, 306, + 8639, 8405, 332, + 8639, 8405, 364, + 8639, 8405, 392, + 8639, 8405, 462, + 8639, 8405, 510, + 8639, 8405, 524, + 8639, 8405, 556, + 8639, 8405, 622, + 8639, 8405, 652, + 8639, 8405, 1878, + 8639, 8405, 2006, + 8639, 8405, 2030, + 8639, 8405, 2126, + 8639, 8405, 5152, + 8639, 8405, 5312, + 8639, 8916, + 8639, 9665, 4926, + 8639, 10775, 5759, 14, + 8639, 10775, 5759, 26, + 8639, 10775, 5759, 34, + 8639, 10775, 5759, 400, + 8643, 8774, + 8649, 10001, 9967, 7607, 4153, 6434, + 8649, 10001, 9967, 9279, 10000, + 8668, + 8672, + 8679, 7593, 8, + 8679, 7593, 12, + 8679, 7593, 22, + 8679, 7593, 28, + 8679, 9063, 2, + 8679, 9063, 8, + 8679, 9063, 10, + 8679, 9063, 14, + 8679, 9063, 16, + 8679, 9063, 22, + 8679, 9063, 24, + 8679, 9063, 30, + 8679, 9063, 34, + 8684, + 8691, 1044, + 8717, 7119, 11195, 4926, + 8717, 12967, 6409, 11195, 4926, + 8717, 13067, 6409, 11195, 4926, + 8717, 13201, 11195, 4926, + 8745, 1, 5387, 24, + 8745, 5, 5387, 312, + 8745, 21, 2162, + 8745, 25, 2162, + 8745, 25, 5387, 36, + 8745, 25, 5387, 37, 9732, + 8745, 25, 6624, + 8745, 25, 9732, + 8745, 43, 5387, 24, + 8745, 78, + 8745, 92, + 8745, 110, + 8745, 118, + 8745, 120, + 8745, 128, + 8745, 129, 6624, + 8745, 129, 9732, + 8745, 130, + 8745, 138, + 8745, 140, + 8745, 146, + 8745, 148, + 8745, 149, 6624, + 8745, 149, 9732, + 8745, 190, + 8745, 206, + 8745, 218, + 8745, 234, + 8745, 236, + 8745, 240, + 8745, 248, + 8745, 254, + 8745, 274, + 8745, 286, + 8745, 306, + 8745, 308, + 8745, 312, + 8745, 316, + 8745, 318, + 8745, 320, + 8745, 321, 6624, + 8745, 321, 9062, + 8745, 321, 9732, + 8745, 324, + 8745, 328, + 8745, 330, + 8745, 346, + 8745, 348, + 8745, 358, + 8745, 364, + 8745, 366, + 8745, 367, 7592, + 8745, 370, + 8745, 376, + 8745, 378, + 8745, 379, 6624, + 8745, 379, 9732, + 8745, 382, + 8745, 385, 0, + 8745, 385, 10, + 8745, 385, 12, + 8745, 385, 22, + 8745, 385, 24, + 8745, 385, 36, + 8745, 385, 42, + 8745, 385, 44, + 8745, 386, + 8745, 387, 4946, + 8745, 388, + 8745, 389, 4946, + 8745, 392, + 8745, 398, + 8745, 408, + 8745, 414, + 8745, 418, + 8745, 420, + 8745, 452, + 8745, 462, + 8745, 463, 3260, + 8745, 464, + 8745, 470, + 8745, 474, + 8745, 478, + 8745, 482, + 8745, 484, + 8745, 488, + 8745, 490, + 8745, 540, + 8745, 548, + 8745, 624, + 8745, 760, + 8745, 856, + 8745, 860, + 8745, 928, + 8745, 1117, 5047, 7142, + 8745, 1117, 5047, 8294, + 8745, 1117, 5047, 8778, + 8745, 1117, 5047, 9762, + 8745, 1118, + 8745, 1212, + 8745, 1270, + 8745, 1298, + 8745, 1422, + 8745, 1432, + 8745, 1622, + 8745, 1668, + 8745, 1800, + 8745, 1908, + 8745, 1918, + 8745, 1934, + 8745, 1946, + 8745, 2248, + 8745, 2382, + 8745, 2383, 5387, 36, + 8745, 2383, 5387, 37, 9732, + 8745, 2688, + 8745, 2720, + 8745, 2816, + 8745, 3224, + 8745, 3790, + 8745, 4062, + 8745, 4110, + 8745, 4208, + 8745, 4332, + 8745, 4532, + 8745, 4612, + 8745, 4732, + 8745, 4762, + 8745, 4849, 5385, 827, 10374, + 8745, 4946, + 8745, 5008, + 8745, 5052, + 8745, 5378, + 8745, 5380, + 8745, 5408, + 8745, 5430, + 8745, 5534, + 8745, 5552, + 8745, 5566, + 8745, 6121, 2725, 4389, 6504, + 8745, 6121, 4849, 4389, 6504, + 8745, 6121, 7121, 4849, 10001, 4389, 6504, + 8745, 6121, 7121, 7443, 10001, 4389, 6504, + 8745, 6121, 7443, 4389, 6504, + 8745, 6121, 7773, 4849, 569, 7121, 7443, 4192, + 8745, 6121, 7773, 4849, 10001, 4389, 6504, + 8745, 6121, 7773, 7443, 569, 7121, 4849, 4192, + 8745, 6121, 7773, 7443, 10001, 4389, 6504, + 8745, 6121, 8005, 4389, 6504, + 8745, 6121, 10001, 11469, 4192, + 8745, 6121, 10677, 4192, + 8745, 6121, 10779, 9544, + 8745, 6121, 11649, 4192, + 8745, 6121, 11707, 11469, 4192, + 8745, 6234, + 8745, 6410, + 8745, 6482, + 8745, 6630, + 8745, 6718, + 8745, 6826, + 8745, 6828, + 8745, 6858, + 8745, 6892, + 8745, 6950, + 8745, 6958, + 8745, 6989, 428, + 8745, 6989, 429, 445, 2091, 6741, 568, + 8745, 6989, 429, 445, 6741, 568, + 8745, 7018, + 8745, 7034, + 8745, 7060, + 8745, 7126, + 8745, 7128, + 8745, 7276, + 8745, 7330, + 8745, 7352, + 8745, 7360, + 8745, 7384, + 8745, 7443, 5385, 827, 10374, + 8745, 7470, + 8745, 7504, + 8745, 7506, + 8745, 7814, + 8745, 7840, + 8745, 7842, + 8745, 7926, + 8745, 7950, + 8745, 8002, + 8745, 8274, + 8745, 8300, + 8745, 8304, + 8745, 8314, + 8745, 8372, + 8745, 8378, + 8745, 8452, + 8745, 8572, + 8745, 8588, + 8745, 8604, + 8745, 9016, + 8745, 9308, + 8745, 9388, + 8745, 9390, + 8745, 9416, + 8745, 9438, + 8745, 9444, + 8745, 9454, + 8745, 9468, + 8745, 9470, + 8745, 9476, + 8745, 9636, + 8745, 9646, + 8745, 9648, + 8745, 9698, + 8745, 9926, + 8745, 10166, + 8745, 10244, + 8745, 10379, 428, + 8745, 10379, 429, 445, 2091, 6741, 568, + 8745, 10379, 429, 445, 6741, 568, + 8745, 10392, + 8745, 10480, + 8745, 10496, + 8745, 11028, + 8745, 11032, + 8745, 11080, + 8745, 11084, + 8745, 11120, + 8745, 11170, + 8745, 11668, + 8745, 11918, + 8745, 12068, + 8755, 10385, 7821, 5830, + 8763, 428, + 8763, 429, 445, 6741, 568, + 8763, 429, 445, 6741, 569, 6121, 1045, 6376, + 8763, 429, 6121, 2091, 6741, 568, + 8763, 429, 6377, 2091, 6741, 568, + 8763, 429, 6377, 7709, 10374, + 8763, 429, 6377, 7919, 6741, 568, + 8763, 429, 6377, 8167, 5758, + 8763, 6121, 1044, + 8763, 6121, 5445, 5759, 6490, + 8763, 6121, 13061, 5759, 6490, + 8763, 6377, 8762, + 8763, 6377, 10578, + 8763, 6377, 11765, 6434, + 8773, 7207, 5759, 9328, + 8773, 7207, 5759, 9870, + 8773, 7207, 5759, 10148, + 8773, 7207, 7803, 5759, 0, + 8773, 7207, 7803, 5759, 8, + 8773, 7207, 7803, 5759, 16, + 8773, 7207, 7803, 5759, 40, + 8773, 7207, 7803, 5759, 440, + 8773, 7207, 8405, 0, + 8773, 7207, 8405, 8, + 8773, 7207, 8405, 16, + 8773, 7207, 8405, 28, + 8773, 7207, 8405, 40, + 8773, 7207, 8405, 108, + 8773, 7207, 8405, 130, + 8773, 7207, 8405, 150, + 8773, 7207, 8405, 228, + 8773, 7207, 8405, 246, + 8773, 7207, 8405, 298, + 8773, 7207, 8405, 322, + 8773, 7207, 8405, 350, + 8773, 7207, 8405, 380, + 8773, 7207, 8405, 412, + 8773, 7207, 8405, 480, + 8773, 7207, 8405, 516, + 8773, 7207, 8405, 536, + 8773, 7207, 8405, 568, + 8773, 7207, 8405, 798, + 8773, 7207, 8405, 890, + 8773, 7207, 8405, 980, + 8773, 7207, 8405, 1002, + 8773, 7207, 8405, 1266, + 8773, 7207, 8405, 1514, + 8773, 7207, 8405, 1618, + 8773, 7207, 8405, 2218, + 8773, 7207, 8405, 2442, + 8773, 7207, 8405, 2684, + 8773, 7207, 8405, 2754, + 8773, 7207, 8405, 4018, + 8773, 7207, 8405, 6000, + 8773, 7207, 8603, 8442, + 8773, 7207, 8603, 8444, + 8773, 7207, 8603, 8446, + 8773, 7207, 8603, 8448, + 8775, 1177, 1109, 429, 5904, + 8775, 1177, 1109, 429, 8462, + 8775, 1177, 1109, 429, 12886, + 8775, 1177, 1109, 429, 12887, 6510, + 8775, 1177, 3768, + 8775, 1177, 3995, 4881, 8168, + 8775, 1177, 4191, 11228, + 8775, 1177, 4213, 4182, + 8775, 1177, 4877, 4182, + 8775, 1177, 5280, + 8775, 1177, 6053, 11228, + 8775, 1177, 6883, 11228, + 8775, 1177, 7539, 274, + 8775, 1177, 7539, 2186, + 8775, 1177, 7608, + 8775, 1177, 7633, 429, 5904, + 8775, 1177, 7633, 429, 9334, + 8775, 1177, 8026, + 8775, 1177, 8102, + 8775, 1177, 8103, 4213, 2778, + 8775, 1177, 8109, 9117, 2170, + 8775, 1177, 8109, 9117, 2778, + 8775, 1177, 8109, 9117, 4214, + 8775, 1177, 8109, 9117, 7694, + 8775, 1177, 8168, + 8775, 1177, 8637, 11228, + 8775, 1177, 9268, + 8775, 1177, 9502, + 8775, 1177, 9933, 8642, + 8775, 1177, 10357, 11884, + 8775, 1177, 10677, 11846, + 8775, 1177, 10730, + 8775, 1177, 11219, 8724, + 8775, 1177, 11649, 11846, + 8775, 1177, 11840, + 8775, 1177, 11841, 4213, 2778, + 8775, 1177, 11884, + 8775, 1177, 12359, 4598, + 8781, 1109, 429, 11162, + 8781, 2779, 10677, 4113, 6376, + 8781, 2779, 10677, 4113, 6490, + 8781, 6611, 8721, 4848, + 8781, 6611, 8721, 7442, + 8781, 6751, 6376, + 8781, 6751, 6490, + 8781, 6905, 6376, + 8781, 6905, 6490, + 8781, 7198, + 8781, 7427, 6376, + 8781, 7427, 6490, + 8781, 7472, + 8781, 7695, 4113, 6376, + 8781, 7695, 4113, 6490, + 8781, 8151, 7889, 8996, + 8781, 8151, 7889, 11648, + 8781, 8405, 8, + 8781, 8405, 238, + 8781, 8405, 468, + 8781, 8405, 1920, + 8781, 8405, 2110, + 8781, 8405, 2662, + 8781, 8405, 2918, + 8781, 8405, 3776, + 8781, 8405, 4410, + 8781, 8405, 4724, + 8781, 8405, 5476, + 8781, 8405, 5554, + 8781, 8405, 5698, + 8781, 8405, 5902, + 8781, 8405, 5903, 10214, + 8781, 8405, 6236, + 8781, 8405, 6237, 238, + 8781, 8405, 6254, + 8781, 8405, 6394, + 8781, 8405, 6789, 9668, + 8781, 8405, 6820, + 8781, 8405, 6821, 10214, + 8781, 8405, 7474, + 8781, 8405, 8090, + 8781, 8405, 8384, + 8781, 8405, 9185, 8091, 5554, + 8781, 8405, 9583, 6496, + 8781, 8405, 9583, 8258, + 8781, 8405, 9583, 9156, + 8781, 8405, 9668, + 8781, 8405, 9717, 198, + 8781, 8405, 9717, 7046, + 8781, 8405, 9717, 7874, + 8781, 8405, 10489, 468, + 8781, 8405, 12355, 6394, + 8781, 8617, 6376, + 8781, 8617, 6490, + 8781, 8617, 8150, + 8781, 8965, 6376, + 8781, 8965, 6490, + 8781, 8965, 8150, + 8781, 9024, + 8781, 9525, 4877, 6376, + 8781, 9525, 4877, 6490, + 8781, 10179, 1044, + 8781, 10235, 8530, + 8781, 10235, 11118, + 8781, 10235, 11432, + 8781, 10490, + 8781, 11196, + 8781, 11259, 4223, 5836, + 8781, 11259, 6610, + 8781, 11259, 6611, 8721, 7442, + 8781, 11649, 6610, + 8781, 11914, + 8781, 12031, 8150, + 8781, 12357, 4223, 5836, + 8781, 12357, 6610, + 8781, 12357, 6611, 8721, 4848, + 8781, 12391, 4926, + 8794, + 8803, 73, 8399, 4926, + 8803, 5759, 7756, + 8803, 5759, 8916, + 8803, 5759, 9824, + 8803, 5759, 9870, + 8803, 5759, 9904, + 8803, 5759, 11900, + 8803, 6689, 2170, + 8803, 6689, 2540, + 8803, 6689, 2778, + 8803, 6689, 4200, + 8803, 6689, 4214, + 8803, 6689, 5190, + 8803, 6689, 6260, + 8803, 6689, 6722, + 8803, 6689, 7508, + 8803, 6689, 7694, + 8803, 7803, 5759, 8, + 8803, 7803, 5759, 16, + 8803, 7803, 5759, 28, + 8803, 7803, 5759, 40, + 8803, 7803, 5759, 58, + 8803, 7803, 5759, 72, + 8803, 7803, 5759, 92, + 8803, 7803, 5759, 162, + 8803, 7803, 5759, 266, + 8803, 7803, 5759, 440, + 8803, 7803, 5759, 606, + 8803, 7803, 5759, 9827, 22, + 8803, 7803, 5759, 9827, 34, + 8803, 7803, 5759, 9827, 344, + 8803, 7803, 5759, 9827, 518, + 8803, 8399, 4926, + 8803, 8405, 0, + 8803, 8405, 8, + 8803, 8405, 16, + 8803, 8405, 28, + 8803, 8405, 40, + 8803, 8405, 58, + 8803, 8405, 72, + 8803, 8405, 92, + 8803, 8405, 100, + 8803, 8405, 116, + 8803, 8405, 138, + 8803, 8405, 162, + 8803, 8405, 216, + 8803, 8405, 236, + 8803, 8405, 266, + 8803, 8405, 292, + 8803, 8405, 306, + 8803, 8405, 332, + 8803, 8405, 364, + 8803, 8405, 392, + 8803, 8405, 440, + 8803, 8405, 462, + 8803, 8405, 510, + 8803, 8405, 524, + 8803, 8405, 556, + 8803, 8405, 606, + 8803, 8405, 610, + 8803, 8405, 652, + 8803, 8405, 792, + 8803, 8405, 884, + 8803, 8405, 974, + 8803, 8405, 996, + 8803, 8405, 1080, + 8803, 8405, 1260, + 8803, 8405, 1512, + 8803, 8405, 1612, + 8803, 8405, 1796, + 8803, 8405, 2030, + 8803, 8405, 2076, + 8803, 8405, 2126, + 8803, 8405, 2212, + 8803, 8405, 2438, + 8803, 8405, 2516, + 8803, 8405, 2566, + 8803, 8405, 2678, + 8803, 8405, 2732, + 8803, 8405, 2746, + 8803, 8405, 4016, + 8803, 8405, 5994, + 8803, 8405, 9827, 22, + 8803, 8405, 9827, 34, + 8803, 8405, 9827, 344, + 8803, 8405, 9827, 518, + 8803, 10203, 6689, 2171, 1177, 2161, 8611, 429, 4214, + 8803, 10203, 6689, 2171, 1177, 4173, 8611, 429, 4214, + 8803, 10203, 6689, 2779, 1177, 2161, 8611, 429, 4214, + 8803, 10203, 6689, 2779, 1177, 4173, 8611, 429, 4214, + 8803, 10203, 6689, 6261, 1177, 2161, 8611, 429, 4214, + 8803, 10203, 6689, 7695, 1177, 2161, 8611, 429, 4214, + 8803, 10203, 6689, 7695, 1177, 4173, 8611, 429, 4214, + 8811, 7650, + 8811, 8405, 568, + 8811, 8405, 678, + 8811, 8405, 748, + 8811, 8405, 1338, + 8811, 8405, 1982, + 8811, 8405, 2378, + 8811, 8405, 3006, + 8811, 8405, 3120, + 8811, 8405, 3240, + 8811, 8405, 4412, + 8811, 8405, 4734, + 8811, 8405, 5906, + 8811, 8405, 5988, + 8811, 8405, 6402, + 8811, 8405, 6766, + 8811, 8405, 6814, + 8811, 8405, 7016, + 8811, 8405, 7070, + 8811, 8405, 7140, + 8811, 8405, 7268, + 8811, 8405, 7400, + 8811, 8405, 7498, + 8811, 8405, 7780, + 8811, 8405, 7806, + 8811, 8405, 8084, + 8811, 8405, 8110, + 8811, 8405, 8256, + 8811, 8405, 8656, + 8811, 8405, 8698, + 8811, 8405, 8808, + 8811, 8405, 9986, + 8811, 8405, 10278, + 8811, 8405, 10414, + 8811, 8405, 10612, + 8811, 8405, 10690, + 8811, 8405, 10760, + 8811, 8405, 11020, + 8811, 8405, 11100, + 8811, 8405, 11236, + 8811, 8968, + 8811, 9254, + 8811, 9348, + 8811, 9526, + 8811, 9804, + 8811, 10694, + 8811, 10964, + 8811, 10986, + 8811, 11144, + 8811, 11146, + 8849, 5444, + 8849, 6611, 10374, + 8849, 7390, + 8849, 7708, + 8849, 8509, 11098, + 8849, 8509, 12472, + 8849, 9719, 7995, 10476, + 8849, 10260, + 8849, 10677, 761, 6121, 11649, 8758, + 8849, 10677, 761, 7443, 11378, + 8849, 10677, 761, 7995, 10476, + 8849, 10677, 761, 10794, + 8849, 11649, 761, 6121, 8153, 10677, 8758, + 8849, 11649, 761, 6121, 8849, 10677, 8758, + 8865, 5758, + 8869, 2091, 5758, + 8869, 6408, + 8869, 6879, 7593, 8405, 4614, + 8869, 7593, 10, + 8869, 9063, 10, + 8869, 10708, + 8869, 11767, 9063, 12, + 8869, 11767, 9063, 22, + 8869, 11767, 9063, 48, + 8875, 9601, 6505, 5830, + 8900, + 8913, 445, 6623, 9610, + 8923, 10260, + 8927, 10203, 2171, 4388, + 8927, 10203, 2171, 6782, + 8927, 10203, 2171, 7574, + 8927, 10203, 2171, 7686, + 8927, 10203, 2171, 8158, + 8927, 10203, 2171, 9614, + 8927, 10203, 2779, 8200, + 8927, 10203, 2779, 8818, + 8927, 10203, 4201, 8718, + 8927, 10203, 4201, 9258, + 8927, 10203, 4215, 8200, + 8927, 10203, 7509, 9258, + 8927, 10203, 7695, 8200, + 8927, 10203, 7695, 9258, + 8927, 10203, 7695, 10466, + 8939, 9610, + 8975, 428, + 8981, 5758, + 8990, + 9011, 5758, + 9034, + 9039, 93, 8399, 4926, + 9039, 5759, 7282, + 9039, 5759, 8916, + 9039, 5759, 9824, + 9039, 5759, 9870, + 9039, 5759, 9904, + 9039, 5759, 11900, + 9039, 6689, 2170, + 9039, 6689, 2540, + 9039, 6689, 2778, + 9039, 6689, 4200, + 9039, 6689, 4214, + 9039, 6689, 5190, + 9039, 6689, 6260, + 9039, 6689, 6722, + 9039, 6689, 7508, + 9039, 6689, 7694, + 9039, 7469, 4926, + 9039, 7469, 5758, + 9039, 7803, 5759, 8, + 9039, 7803, 5759, 16, + 9039, 7803, 5759, 28, + 9039, 7803, 5759, 40, + 9039, 7803, 5759, 58, + 9039, 7803, 5759, 72, + 9039, 7803, 5759, 92, + 9039, 7803, 5759, 266, + 9039, 7803, 5759, 606, + 9039, 7803, 5759, 9827, 22, + 9039, 7803, 5759, 9827, 34, + 9039, 7803, 5759, 9827, 344, + 9039, 7803, 5759, 9827, 518, + 9039, 8322, + 9039, 8405, 0, + 9039, 8405, 8, + 9039, 8405, 16, + 9039, 8405, 28, + 9039, 8405, 40, + 9039, 8405, 58, + 9039, 8405, 72, + 9039, 8405, 92, + 9039, 8405, 100, + 9039, 8405, 116, + 9039, 8405, 138, + 9039, 8405, 216, + 9039, 8405, 236, + 9039, 8405, 266, + 9039, 8405, 292, + 9039, 8405, 306, + 9039, 8405, 332, + 9039, 8405, 364, + 9039, 8405, 392, + 9039, 8405, 462, + 9039, 8405, 510, + 9039, 8405, 511, 6121, 7121, 10000, + 9039, 8405, 511, 6121, 8473, 10000, + 9039, 8405, 524, + 9039, 8405, 556, + 9039, 8405, 606, + 9039, 8405, 652, + 9039, 8405, 792, + 9039, 8405, 884, + 9039, 8405, 974, + 9039, 8405, 996, + 9039, 8405, 1260, + 9039, 8405, 1512, + 9039, 8405, 1612, + 9039, 8405, 2030, + 9039, 8405, 2076, + 9039, 8405, 2126, + 9039, 8405, 2212, + 9039, 8405, 2410, + 9039, 8405, 2438, + 9039, 8405, 2516, + 9039, 8405, 2566, + 9039, 8405, 2678, + 9039, 8405, 2746, + 9039, 8405, 3110, + 9039, 8405, 4016, + 9039, 8405, 5994, + 9039, 8405, 8357, 556, + 9039, 8405, 9827, 22, + 9039, 8405, 9827, 34, + 9039, 8405, 9827, 344, + 9039, 8405, 9827, 518, + 9039, 9971, 11143, 2170, + 9039, 9971, 11143, 2171, 4853, 5913, 2681, 11932, + 9039, 9971, 11143, 2778, + 9039, 9971, 11143, 4214, + 9039, 9971, 11143, 7694, + 9039, 9971, 11933, 9700, + 9041, 5550, + 9041, 5551, 6121, 8056, + 9042, + 9053, 9575, 6508, + 9053, 9575, 8134, + 9053, 9575, 8136, + 9053, 9575, 8138, + 9053, 9575, 8140, + 9053, 9575, 8142, + 9053, 9575, 8144, + 9053, 9575, 8146, + 9053, 9575, 8148, + 9053, 9575, 9186, + 9053, 9575, 9188, + 9053, 9575, 9190, + 9053, 9575, 9192, + 9053, 9575, 9194, + 9053, 9575, 9196, + 9053, 9575, 9198, + 9053, 9575, 9200, + 9053, 9575, 9202, + 9053, 9575, 9204, + 9053, 9575, 9206, + 9053, 9575, 9208, + 9053, 9575, 9210, + 9053, 9575, 9212, + 9053, 9575, 9214, + 9053, 9575, 9216, + 9053, 9575, 9218, + 9053, 9575, 9220, + 9053, 9575, 9222, + 9053, 9575, 9224, + 9053, 9575, 9226, + 9053, 9575, 9228, + 9053, 9575, 9230, + 9053, 9575, 9232, + 9053, 9575, 9234, + 9053, 9575, 9236, + 9053, 9575, 9238, + 9053, 9575, 9240, + 9053, 9575, 10020, + 9053, 9575, 10022, + 9053, 9575, 10024, + 9053, 9575, 10026, + 9053, 9575, 10028, + 9053, 9575, 10030, + 9053, 9575, 10032, + 9053, 9575, 10034, + 9053, 9575, 10036, + 9053, 9575, 10038, + 9053, 9575, 10040, + 9053, 9575, 10042, + 9053, 9575, 10044, + 9053, 9575, 10046, + 9053, 9575, 10048, + 9053, 9575, 10050, + 9053, 9575, 10052, + 9053, 9575, 10054, + 9053, 9575, 10056, + 9053, 9575, 10058, + 9053, 9575, 10060, + 9053, 9575, 10062, + 9053, 9575, 10064, + 9053, 9575, 10066, + 9053, 9575, 10068, + 9053, 9575, 10070, + 9053, 9575, 10072, + 9053, 9575, 10074, + 9053, 9575, 10076, + 9053, 9575, 10078, + 9053, 9575, 10080, + 9053, 9575, 10082, + 9053, 9575, 10084, + 9053, 9575, 10086, + 9053, 9575, 10088, + 9053, 9575, 10090, + 9053, 9575, 10092, + 9053, 9575, 10094, + 9053, 9575, 10096, + 9053, 9575, 10098, + 9053, 9575, 10100, + 9053, 9575, 10102, + 9053, 9575, 10104, + 9053, 9575, 10106, + 9053, 9575, 10108, + 9053, 9575, 10110, + 9053, 9575, 10112, + 9053, 9575, 10114, + 9053, 9575, 10116, + 9053, 9575, 10118, + 9053, 9575, 10120, + 9053, 9575, 10122, + 9053, 9575, 10124, + 9053, 9575, 10126, + 9053, 9575, 10128, + 9053, 9575, 10130, + 9053, 9575, 10818, + 9053, 9575, 10820, + 9053, 9575, 10822, + 9053, 9575, 10824, + 9053, 9575, 10826, + 9053, 9575, 10828, + 9053, 9575, 10830, + 9053, 9575, 10832, + 9053, 9575, 10834, + 9053, 9575, 10836, + 9053, 9575, 10838, + 9053, 9575, 10840, + 9053, 9575, 10842, + 9053, 9575, 10844, + 9053, 9575, 10846, + 9053, 9575, 10848, + 9053, 9575, 10850, + 9053, 9575, 10852, + 9053, 9575, 10854, + 9053, 9575, 10856, + 9053, 9575, 10858, + 9053, 9575, 10860, + 9053, 9575, 10862, + 9053, 9575, 10864, + 9053, 9575, 10866, + 9053, 9575, 10868, + 9053, 9575, 10870, + 9053, 9575, 10872, + 9053, 9575, 10874, + 9053, 9575, 10876, + 9053, 9575, 10878, + 9053, 9575, 10880, + 9053, 9575, 10882, + 9053, 9575, 10884, + 9053, 9575, 10886, + 9053, 9575, 10888, + 9053, 9575, 10890, + 9053, 9575, 10892, + 9053, 9575, 10894, + 9053, 9575, 10896, + 9053, 9575, 10898, + 9053, 9575, 10900, + 9053, 9575, 10902, + 9053, 9575, 10904, + 9053, 9575, 10906, + 9053, 9575, 10908, + 9053, 9575, 10910, + 9053, 9575, 10912, + 9053, 9575, 10914, + 9053, 9575, 10916, + 9053, 9575, 10918, + 9053, 9575, 10920, + 9053, 9575, 10922, + 9053, 9575, 10924, + 9053, 9575, 10926, + 9053, 9575, 10928, + 9053, 9575, 10930, + 9053, 9575, 10932, + 9053, 9575, 10934, + 9053, 9575, 10936, + 9053, 9575, 10938, + 9053, 9575, 10940, + 9053, 9575, 10942, + 9053, 9575, 10944, + 9053, 9575, 10946, + 9053, 9575, 10948, + 9053, 9575, 10950, + 9053, 9575, 10952, + 9053, 9575, 10954, + 9053, 9575, 10956, + 9053, 9575, 11490, + 9053, 9575, 11492, + 9053, 9575, 11494, + 9053, 9575, 11496, + 9053, 9575, 11498, + 9053, 9575, 11500, + 9053, 9575, 11502, + 9053, 9575, 11504, + 9053, 9575, 11506, + 9053, 9575, 11508, + 9053, 9575, 11510, + 9053, 9575, 11512, + 9053, 9575, 11514, + 9053, 9575, 11516, + 9053, 9575, 11518, + 9053, 9575, 11520, + 9053, 9575, 11522, + 9053, 9575, 11524, + 9053, 9575, 11526, + 9053, 9575, 11528, + 9053, 9575, 11530, + 9053, 9575, 11532, + 9053, 9575, 11534, + 9053, 9575, 11536, + 9053, 9575, 11538, + 9053, 9575, 11540, + 9053, 9575, 11542, + 9053, 9575, 11544, + 9053, 9575, 11546, + 9053, 9575, 11548, + 9053, 9575, 11550, + 9053, 9575, 11552, + 9053, 9575, 11554, + 9053, 9575, 11556, + 9053, 9575, 11558, + 9053, 9575, 11560, + 9053, 9575, 11562, + 9053, 9575, 11564, + 9053, 9575, 11566, + 9053, 9575, 11568, + 9053, 9575, 11570, + 9053, 9575, 11572, + 9053, 9575, 11574, + 9053, 9575, 11576, + 9053, 9575, 11578, + 9053, 9575, 11580, + 9053, 9575, 11582, + 9053, 9575, 11584, + 9053, 9575, 11586, + 9053, 9575, 11588, + 9053, 9575, 11590, + 9053, 9575, 11592, + 9053, 9575, 11594, + 9053, 9575, 11596, + 9053, 9575, 11598, + 9053, 9575, 11600, + 9053, 9575, 11950, + 9053, 9575, 11952, + 9053, 9575, 11954, + 9053, 9575, 11956, + 9053, 9575, 11958, + 9053, 9575, 11960, + 9053, 9575, 11962, + 9053, 9575, 11964, + 9053, 9575, 11966, + 9053, 9575, 11968, + 9053, 9575, 11970, + 9053, 9575, 11972, + 9053, 9575, 11974, + 9053, 9575, 11976, + 9053, 9575, 11978, + 9053, 9575, 11980, + 9053, 9575, 11982, + 9053, 9575, 11984, + 9053, 9575, 11986, + 9053, 9575, 11988, + 9053, 9575, 11990, + 9053, 9575, 11992, + 9053, 9575, 11994, + 9053, 9575, 11996, + 9053, 9575, 11998, + 9053, 9575, 12000, + 9053, 9575, 12002, + 9053, 9575, 12004, + 9053, 9575, 12444, + 9053, 9575, 12446, + 9053, 9575, 12448, + 9053, 9575, 12450, + 9053, 9575, 12452, + 9053, 9575, 12454, + 9053, 9575, 12456, + 9053, 9575, 12458, + 9053, 9575, 12926, + 9069, 5758, + 9072, + 9095, 1045, 10374, + 9095, 3992, + 9095, 5385, 8037, 6723, 9601, 5830, + 9095, 5444, + 9095, 5551, 10374, + 9095, 6689, 2170, + 9095, 6689, 2540, + 9095, 6689, 2778, + 9095, 6689, 4200, + 9095, 6689, 4214, + 9095, 6689, 5190, + 9095, 6689, 6260, + 9095, 6689, 6722, + 9095, 6689, 7508, + 9095, 6689, 7694, + 9095, 6909, 7821, 11765, 6434, + 9095, 7089, 7593, 8405, 0, + 9095, 7089, 7593, 8405, 2, + 9095, 7089, 7593, 8405, 4, + 9095, 7089, 7593, 8405, 6, + 9095, 7089, 7593, 8405, 8, + 9095, 7089, 7593, 8405, 10, + 9095, 7089, 7593, 8405, 12, + 9095, 7089, 7593, 8405, 14, + 9095, 7089, 7593, 8405, 16, + 9095, 7089, 7593, 8405, 18, + 9095, 7089, 7593, 8405, 20, + 9095, 7089, 7593, 8405, 22, + 9095, 7089, 7593, 8405, 24, + 9095, 7089, 7593, 8405, 26, + 9095, 7089, 7593, 8405, 28, + 9095, 7089, 7593, 8405, 30, + 9095, 7089, 7593, 8405, 32, + 9095, 7089, 7593, 8405, 34, + 9095, 7089, 7593, 8405, 36, + 9095, 7089, 7593, 8405, 38, + 9095, 7089, 7593, 8405, 40, + 9095, 7089, 7593, 8405, 42, + 9095, 7089, 7593, 8405, 44, + 9095, 7089, 7593, 8405, 46, + 9095, 7089, 7593, 8405, 48, + 9095, 7089, 7593, 8405, 50, + 9095, 7089, 9063, 8405, 0, + 9095, 7089, 9063, 8405, 2, + 9095, 7089, 9063, 8405, 4, + 9095, 7089, 9063, 8405, 6, + 9095, 7089, 9063, 8405, 8, + 9095, 7089, 9063, 8405, 10, + 9095, 7089, 9063, 8405, 12, + 9095, 7089, 9063, 8405, 14, + 9095, 7089, 9063, 8405, 16, + 9095, 7089, 9063, 8405, 18, + 9095, 7089, 9063, 8405, 20, + 9095, 7089, 9063, 8405, 22, + 9095, 7089, 9063, 8405, 24, + 9095, 7089, 9063, 8405, 26, + 9095, 7089, 9063, 8405, 28, + 9095, 7089, 9063, 8405, 30, + 9095, 7089, 9063, 8405, 32, + 9095, 7089, 9063, 8405, 34, + 9095, 7089, 9063, 8405, 36, + 9095, 7089, 9063, 8405, 38, + 9095, 7089, 9063, 8405, 40, + 9095, 7089, 9063, 8405, 42, + 9095, 7089, 9063, 8405, 44, + 9095, 7089, 9063, 8405, 46, + 9095, 7089, 9063, 8405, 48, + 9095, 7089, 9063, 8405, 50, + 9095, 7172, + 9095, 7710, + 9095, 7821, 5830, + 9095, 7821, 8022, + 9095, 8022, + 9095, 8166, + 9095, 8287, 5770, + 9095, 8287, 5771, 0, + 9095, 8287, 6594, + 9095, 8287, 6595, 0, + 9095, 8287, 6912, + 9095, 8287, 6913, 0, + 9095, 8287, 6982, + 9095, 8287, 6983, 0, + 9095, 8287, 6983, 40, + 9095, 8287, 7166, + 9095, 8287, 7167, 0, + 9095, 8287, 7244, + 9095, 8287, 7245, 0, + 9095, 8287, 7372, + 9095, 8287, 7373, 0, + 9095, 8287, 7440, + 9095, 8287, 7441, 0, + 9095, 8287, 8362, + 9095, 8287, 8363, 0, + 9095, 8287, 8828, + 9095, 8287, 8829, 0, + 9095, 8287, 9086, + 9095, 8287, 9087, 0, + 9095, 8287, 9400, + 9095, 8287, 9401, 0, + 9095, 8287, 9588, + 9095, 8287, 9589, 0, + 9095, 8287, 9780, + 9095, 8287, 9781, 0, + 9095, 8371, 10759, 7014, + 9095, 8371, 10759, 8040, + 9095, 8525, 2670, + 9095, 8525, 6784, + 9095, 8525, 6804, + 9095, 8525, 6805, 2170, + 9095, 8525, 6805, 2540, + 9095, 8525, 6805, 2778, + 9095, 8525, 6805, 4200, + 9095, 8525, 6805, 4214, + 9095, 8525, 6805, 5190, + 9095, 8525, 6805, 6722, + 9095, 8525, 6805, 7508, + 9095, 8525, 6805, 7694, + 9095, 8525, 8162, + 9095, 8525, 8820, + 9095, 8525, 8821, 2170, + 9095, 8525, 8821, 2540, + 9095, 8525, 8821, 2778, + 9095, 8525, 8821, 4200, + 9095, 8525, 8821, 4214, + 9095, 8525, 8821, 5190, + 9095, 8525, 8821, 6722, + 9095, 8525, 8821, 7508, + 9095, 8525, 8821, 7694, + 9095, 8525, 8874, + 9095, 8525, 8876, + 9095, 8525, 8877, 2170, + 9095, 8525, 8877, 2540, + 9095, 8525, 8877, 2778, + 9095, 8525, 8877, 4200, + 9095, 8525, 8877, 4214, + 9095, 8525, 8877, 5190, + 9095, 8525, 8877, 6722, + 9095, 8525, 8877, 7508, + 9095, 8525, 8877, 7694, + 9095, 8525, 9286, + 9095, 8525, 9700, + 9095, 8525, 10150, + 9095, 8525, 10200, + 9095, 8525, 10360, + 9095, 8525, 10622, + 9095, 8525, 11232, + 9095, 8609, 4926, + 9095, 9633, 9718, + 9095, 9899, 10374, + 9095, 10017, 5758, + 9095, 10017, 7580, + 9095, 10283, 0, + 9095, 10283, 8, + 9095, 10283, 16, + 9095, 10283, 28, + 9095, 10283, 40, + 9095, 10283, 236, + 9095, 10283, 238, + 9095, 10283, 242, + 9095, 10283, 246, + 9095, 10283, 250, + 9095, 10283, 306, + 9095, 10283, 310, + 9095, 10283, 314, + 9095, 10283, 322, + 9095, 10283, 326, + 9095, 10283, 364, + 9095, 10283, 368, + 9095, 10283, 374, + 9095, 10283, 380, + 9095, 10283, 384, + 9095, 10283, 392, + 9095, 10283, 396, + 9095, 10283, 404, + 9095, 10283, 412, + 9095, 10283, 416, + 9095, 10283, 510, + 9095, 10283, 512, + 9095, 10283, 514, + 9095, 10283, 516, + 9095, 10283, 520, + 9095, 10283, 524, + 9095, 10283, 526, + 9095, 10283, 532, + 9095, 10283, 536, + 9095, 10283, 546, + 9095, 10283, 556, + 9095, 10283, 560, + 9095, 10283, 564, + 9095, 10283, 568, + 9095, 10283, 576, + 9095, 10283, 622, + 9095, 10283, 626, + 9095, 10283, 630, + 9095, 10283, 632, + 9095, 10283, 652, + 9095, 10283, 660, + 9095, 10283, 664, + 9095, 10410, + 9095, 10643, 4116, + 9095, 10677, 760, + 9095, 11043, 1808, + 9095, 11043, 2170, + 9095, 11043, 2540, + 9095, 11043, 2586, + 9095, 11043, 2670, + 9095, 11043, 2778, + 9095, 11043, 3956, + 9095, 11043, 4194, + 9095, 11043, 4200, + 9095, 11043, 4214, + 9095, 11043, 4396, + 9095, 11043, 4422, + 9095, 11043, 4620, + 9095, 11043, 4848, + 9095, 11043, 4922, + 9095, 11043, 5012, + 9095, 11043, 5046, + 9095, 11043, 5190, + 9095, 11043, 5540, + 9095, 11043, 6122, + 9095, 11043, 6716, + 9095, 11043, 6722, + 9095, 11043, 7072, + 9095, 11043, 7146, + 9095, 11043, 7246, + 9095, 11043, 7392, + 9095, 11043, 7442, + 9095, 11043, 7508, + 9095, 11043, 7640, + 9095, 11043, 7646, + 9095, 11043, 7694, + 9095, 11043, 7812, + 9095, 11043, 8036, + 9095, 11043, 8196, + 9095, 11043, 8682, + 9095, 11043, 9122, + 9095, 11043, 9714, + 9095, 11043, 9724, + 9095, 11043, 9862, + 9095, 11043, 10328, + 9095, 11043, 10478, + 9095, 11043, 10484, + 9095, 11043, 10576, + 9095, 11043, 10726, + 9095, 11043, 10980, + 9095, 11043, 10992, + 9095, 11043, 11266, + 9095, 11043, 11612, + 9095, 11043, 13050, + 9095, 11098, + 9095, 11649, 761, 6121, 7272, + 9095, 12472, + 9095, 12990, + 9095, 13061, 5759, 6121, 11449, 7908, + 9095, 13411, 10017, 5758, + 9109, 7666, + 9115, 10260, + 9127, 8770, + 9137, 10585, 0, + 9137, 10585, 8, + 9137, 10585, 16, + 9137, 10585, 28, + 9137, 10585, 40, + 9137, 10585, 292, + 9137, 10585, 298, + 9137, 10585, 306, + 9137, 10585, 310, + 9137, 10585, 314, + 9137, 10585, 322, + 9137, 10585, 326, + 9137, 10585, 332, + 9137, 10585, 336, + 9137, 10585, 340, + 9137, 10585, 350, + 9137, 10585, 354, + 9137, 10585, 364, + 9137, 10585, 368, + 9137, 10585, 374, + 9137, 10585, 380, + 9137, 10585, 384, + 9137, 10585, 392, + 9137, 10585, 396, + 9137, 10585, 404, + 9137, 10585, 412, + 9137, 10585, 416, + 9137, 10585, 462, + 9137, 10585, 468, + 9137, 10585, 476, + 9137, 10585, 480, + 9137, 10585, 486, + 9137, 10585, 510, + 9137, 10585, 512, + 9137, 10585, 514, + 9137, 10585, 516, + 9137, 10585, 520, + 9137, 10585, 524, + 9137, 10585, 526, + 9137, 10585, 532, + 9137, 10585, 536, + 9137, 10585, 546, + 9137, 10585, 556, + 9137, 10585, 560, + 9137, 10585, 564, + 9137, 10585, 568, + 9137, 10585, 576, + 9137, 10585, 622, + 9137, 10585, 626, + 9137, 10585, 630, + 9137, 10585, 632, + 9137, 10585, 638, + 9137, 10585, 640, + 9137, 10585, 670, + 9137, 10585, 678, + 9151, 11229, 1611, 8774, + 9155, 7593, 8405, 14, + 9155, 7593, 8405, 98, + 9155, 7593, 8405, 164, + 9155, 7593, 8405, 172, + 9155, 7593, 8405, 174, + 9155, 7593, 8405, 176, + 9155, 7593, 8405, 182, + 9155, 7593, 8405, 184, + 9155, 7593, 8405, 192, + 9155, 7593, 8405, 432, + 9155, 7593, 8405, 454, + 9155, 7593, 8405, 634, + 9155, 7593, 8405, 778, + 9155, 7593, 8405, 984, + 9155, 7593, 8405, 1110, + 9155, 7593, 8405, 1124, + 9155, 7593, 8405, 1130, + 9155, 7593, 8405, 1226, + 9155, 7593, 8405, 1506, + 9155, 7593, 8405, 1596, + 9155, 7593, 8405, 2204, + 9155, 7593, 8405, 2666, + 9155, 7593, 8405, 2856, + 9155, 7593, 8405, 3050, + 9155, 7593, 8405, 3138, + 9155, 7593, 8405, 3890, + 9155, 7593, 8405, 4895, 0, + 9155, 7593, 8405, 4895, 8, + 9155, 7593, 8405, 4895, 16, + 9155, 7593, 8405, 4895, 28, + 9155, 7593, 8405, 4895, 70, + 9155, 7593, 8405, 4895, 440, + 9155, 7593, 8405, 5914, + 9155, 7593, 8405, 6274, + 9155, 7593, 8405, 7551, 0, + 9155, 7593, 8405, 7551, 8, + 9155, 7593, 8405, 7551, 16, + 9155, 7593, 8405, 7551, 28, + 9155, 7593, 8405, 7551, 70, + 9155, 7593, 8405, 7551, 440, + 9155, 9063, 8405, 14, + 9155, 9063, 8405, 98, + 9155, 9063, 8405, 164, + 9155, 9063, 8405, 172, + 9155, 9063, 8405, 174, + 9155, 9063, 8405, 176, + 9155, 9063, 8405, 182, + 9155, 9063, 8405, 184, + 9155, 9063, 8405, 192, + 9155, 9063, 8405, 432, + 9155, 9063, 8405, 454, + 9155, 9063, 8405, 634, + 9155, 9063, 8405, 778, + 9155, 9063, 8405, 984, + 9155, 9063, 8405, 1110, + 9155, 9063, 8405, 1124, + 9155, 9063, 8405, 1130, + 9155, 9063, 8405, 1226, + 9155, 9063, 8405, 1506, + 9155, 9063, 8405, 1596, + 9155, 9063, 8405, 2204, + 9155, 9063, 8405, 2666, + 9155, 9063, 8405, 2856, + 9155, 9063, 8405, 3050, + 9155, 9063, 8405, 3138, + 9155, 9063, 8405, 3890, + 9155, 9063, 8405, 4895, 0, + 9155, 9063, 8405, 4895, 8, + 9155, 9063, 8405, 4895, 16, + 9155, 9063, 8405, 4895, 28, + 9155, 9063, 8405, 4895, 70, + 9155, 9063, 8405, 4895, 440, + 9155, 9063, 8405, 5914, + 9155, 9063, 8405, 6274, + 9155, 9063, 8405, 7551, 0, + 9155, 9063, 8405, 7551, 8, + 9155, 9063, 8405, 7551, 16, + 9155, 9063, 8405, 7551, 28, + 9155, 9063, 8405, 7551, 70, + 9155, 9063, 8405, 7551, 440, + 9159, 6121, 2725, 4389, 6504, + 9159, 6121, 4849, 4389, 6504, + 9159, 6121, 7443, 4389, 6504, + 9159, 6121, 8005, 4389, 6504, + 9159, 10374, + 9171, 9095, 11767, 6689, 2170, + 9171, 9095, 11767, 6689, 2540, + 9171, 9095, 11767, 6689, 2778, + 9171, 9095, 11767, 6689, 4200, + 9171, 9095, 11767, 6689, 4214, + 9171, 9095, 11767, 6689, 5190, + 9171, 9095, 11767, 6689, 6722, + 9171, 9095, 11767, 6689, 7508, + 9171, 9095, 11767, 6689, 7694, + 9171, 9095, 11767, 8525, 2670, + 9171, 10357, 9095, 6689, 2170, + 9171, 10357, 9095, 6689, 2540, + 9171, 10357, 9095, 6689, 2778, + 9171, 10357, 9095, 6689, 4200, + 9171, 10357, 9095, 6689, 4214, + 9171, 10357, 9095, 6689, 5190, + 9171, 10357, 9095, 6689, 6722, + 9171, 10357, 9095, 6689, 7508, + 9171, 10357, 9095, 6689, 7694, + 9171, 10357, 9095, 8525, 2670, + 9171, 10357, 9095, 11767, 6689, 2170, + 9171, 10357, 9095, 11767, 6689, 2540, + 9171, 10357, 9095, 11767, 6689, 2778, + 9171, 10357, 9095, 11767, 6689, 4200, + 9171, 10357, 9095, 11767, 6689, 4214, + 9171, 10357, 9095, 11767, 6689, 5190, + 9171, 10357, 9095, 11767, 6689, 6722, + 9171, 10357, 9095, 11767, 6689, 7508, + 9171, 10357, 9095, 11767, 6689, 7694, + 9171, 10357, 9095, 11767, 8525, 2670, + 9180, + 9183, 8774, + 9243, 4923, 5758, + 9243, 8197, 5758, + 9245, 5758, + 9263, 428, + 9263, 429, 6121, 1045, 6376, + 9263, 429, 6121, 2779, 11649, 9744, + 9263, 429, 6121, 4895, 11649, 8758, + 9263, 429, 6121, 9546, + 9263, 429, 6121, 10666, + 9263, 429, 6121, 10677, 761, 91, 1109, 429, 11649, 8758, + 9263, 429, 9537, 9810, + 9263, 429, 9537, 10958, + 9279, 10001, 9967, 7271, 4153, 6434, + 9279, 10001, 9967, 8649, 10000, + 9288, + 9292, + 9297, 2830, + 9317, 5758, + 9325, 5759, 10400, + 9325, 7803, 5759, 16, + 9325, 7803, 5759, 40, + 9325, 8405, 0, + 9325, 8405, 16, + 9325, 8405, 40, + 9325, 8405, 100, + 9325, 8405, 138, + 9325, 8405, 216, + 9325, 8405, 236, + 9325, 8405, 306, + 9325, 8405, 332, + 9325, 8405, 364, + 9325, 8405, 392, + 9325, 8405, 462, + 9325, 8405, 510, + 9325, 8405, 524, + 9325, 8405, 556, + 9325, 8405, 622, + 9325, 8405, 652, + 9325, 8405, 2030, + 9343, 5758, + 9361, 7931, 4213, 9680, + 9361, 11345, 10582, + 9367, 7821, 8056, + 9367, 8022, + 9380, + 9385, 73, 8399, 4926, + 9385, 5759, 7282, + 9385, 5759, 8916, + 9385, 5759, 9824, + 9385, 5759, 9870, + 9385, 5759, 9904, + 9385, 5759, 12066, + 9385, 5759, 12384, + 9385, 6689, 2170, + 9385, 6689, 2540, + 9385, 6689, 2778, + 9385, 6689, 4200, + 9385, 6689, 4214, + 9385, 6689, 5190, + 9385, 6689, 6260, + 9385, 6689, 6722, + 9385, 6689, 7508, + 9385, 6689, 7694, + 9385, 7803, 5759, 8, + 9385, 7803, 5759, 16, + 9385, 7803, 5759, 28, + 9385, 7803, 5759, 40, + 9385, 7803, 5759, 58, + 9385, 7803, 5759, 72, + 9385, 7803, 5759, 92, + 9385, 7803, 5759, 162, + 9385, 7803, 5759, 266, + 9385, 7803, 5759, 440, + 9385, 7803, 5759, 606, + 9385, 7803, 5759, 9827, 22, + 9385, 7803, 5759, 9827, 34, + 9385, 7803, 5759, 9827, 344, + 9385, 7803, 5759, 9827, 518, + 9385, 8399, 4926, + 9385, 8405, 0, + 9385, 8405, 8, + 9385, 8405, 16, + 9385, 8405, 28, + 9385, 8405, 40, + 9385, 8405, 58, + 9385, 8405, 72, + 9385, 8405, 92, + 9385, 8405, 100, + 9385, 8405, 116, + 9385, 8405, 138, + 9385, 8405, 162, + 9385, 8405, 196, + 9385, 8405, 216, + 9385, 8405, 236, + 9385, 8405, 266, + 9385, 8405, 292, + 9385, 8405, 306, + 9385, 8405, 332, + 9385, 8405, 364, + 9385, 8405, 392, + 9385, 8405, 440, + 9385, 8405, 462, + 9385, 8405, 510, + 9385, 8405, 524, + 9385, 8405, 556, + 9385, 8405, 606, + 9385, 8405, 610, + 9385, 8405, 652, + 9385, 8405, 792, + 9385, 8405, 884, + 9385, 8405, 974, + 9385, 8405, 996, + 9385, 8405, 1260, + 9385, 8405, 1512, + 9385, 8405, 1612, + 9385, 8405, 1796, + 9385, 8405, 2030, + 9385, 8405, 2076, + 9385, 8405, 2126, + 9385, 8405, 2212, + 9385, 8405, 2438, + 9385, 8405, 2516, + 9385, 8405, 2566, + 9385, 8405, 2678, + 9385, 8405, 2746, + 9385, 8405, 4016, + 9385, 8405, 5994, + 9385, 8405, 9827, 22, + 9385, 8405, 9827, 34, + 9385, 8405, 9827, 344, + 9385, 8405, 9827, 518, + 9431, 11103, 5758, + 9437, 444, + 9437, 445, 6121, 1045, 6376, + 9437, 445, 6121, 8153, 9546, + 9437, 445, 6121, 8153, 10666, + 9437, 445, 6121, 8473, 5832, + 9437, 445, 6121, 11649, 3992, + 9437, 445, 12105, 9437, 720, + 9437, 720, + 9437, 721, 6121, 1045, 6376, + 9437, 721, 6121, 8153, 9546, + 9437, 721, 6121, 8153, 10666, + 9437, 721, 6121, 8473, 5832, + 9437, 721, 6121, 10666, + 9437, 721, 6121, 11649, 3992, + 9438, + 9439, 9177, 115, 11649, 5606, + 9443, 5941, 2171, 429, 9020, + 9443, 5941, 2171, 429, 9096, + 9443, 5941, 2171, 429, 11446, + 9443, 5941, 2401, 8154, + 9443, 5941, 2541, 429, 9020, + 9443, 5941, 2541, 429, 9096, + 9443, 5941, 2541, 429, 11446, + 9443, 5941, 2779, 429, 9020, + 9443, 5941, 2779, 429, 9096, + 9443, 5941, 2779, 429, 11446, + 9443, 5941, 3696, + 9443, 5941, 4153, 6116, + 9443, 5941, 4201, 429, 9020, + 9443, 5941, 4201, 429, 9096, + 9443, 5941, 4201, 429, 11446, + 9443, 5941, 4215, 429, 9020, + 9443, 5941, 4215, 429, 9096, + 9443, 5941, 4215, 429, 11446, + 9443, 5941, 5191, 429, 9020, + 9443, 5941, 5191, 429, 9096, + 9443, 5941, 5191, 429, 11446, + 9443, 5941, 5442, + 9443, 5941, 6113, 6116, + 9443, 5941, 6723, 429, 9020, + 9443, 5941, 6723, 429, 9096, + 9443, 5941, 6723, 429, 11446, + 9443, 5941, 6881, 8154, + 9443, 5941, 7010, + 9443, 5941, 7271, 6116, + 9443, 5941, 7509, 429, 9020, + 9443, 5941, 7509, 429, 9096, + 9443, 5941, 7509, 429, 11446, + 9443, 5941, 7607, 6116, + 9443, 5941, 7695, 429, 9020, + 9443, 5941, 7695, 429, 9096, + 9443, 5941, 7695, 429, 11446, + 9443, 5941, 7821, 8154, + 9443, 5941, 7960, + 9443, 5941, 7974, + 9443, 5941, 8546, + 9443, 5941, 8738, + 9443, 5941, 8766, + 9443, 5941, 8934, + 9443, 5941, 12912, + 9453, 6622, + 9472, + 9475, 11649, 10154, + 9483, 8775, 5, 3946, + 9483, 8775, 11, 3946, + 9483, 8775, 11, 3947, 8553, 3254, + 9483, 8775, 11, 3947, 8553, 6468, + 9483, 8775, 13, 3946, + 9483, 8775, 13, 3947, 8553, 3254, + 9483, 8775, 13, 3947, 8553, 6468, + 9483, 8775, 47, 10366, + 9483, 8775, 50, + 9483, 8775, 139, 3846, + 9483, 8775, 570, + 9483, 8775, 933, 5942, + 9483, 8775, 961, 7500, + 9483, 8775, 1109, 429, 8750, + 9483, 8775, 1109, 2690, + 9483, 8775, 1109, 3760, + 9483, 8775, 1109, 5776, + 9483, 8775, 1109, 8584, + 9483, 8775, 2171, 9345, 13031, 5244, + 9483, 8775, 2171, 9345, 13031, 5540, + 9483, 8775, 2211, 11838, + 9483, 8775, 3950, + 9483, 8775, 3984, + 9483, 8775, 3985, 718, + 9483, 8775, 4121, 8058, + 9483, 8775, 4121, 8060, + 9483, 8775, 4205, 600, + 9483, 8775, 4205, 4116, + 9483, 8775, 4227, 6504, + 9483, 8775, 4227, 7820, + 9483, 8775, 4389, 5244, + 9483, 8775, 4389, 5540, + 9483, 8775, 4389, 7351, 4926, + 9483, 8775, 4849, 8641, 5758, + 9483, 8775, 5013, 10367, 6504, + 9483, 8775, 5013, 10367, 7820, + 9483, 8775, 5281, 10366, + 9483, 8775, 5445, 10366, + 9483, 8775, 6020, + 9483, 8775, 6021, 600, + 9483, 8775, 6021, 7580, + 9483, 8775, 6093, 10366, + 9483, 8775, 6121, 12018, + 9483, 8775, 6485, 2690, + 9483, 8775, 6485, 3760, + 9483, 8775, 6485, 5776, + 9483, 8775, 6485, 8584, + 9483, 8775, 6514, + 9483, 8775, 6516, + 9483, 8775, 6620, + 9483, 8775, 6789, 9022, + 9483, 8775, 6802, + 9483, 8775, 6869, 5245, 413, 7580, + 9483, 8775, 6869, 5245, 7580, + 9483, 8775, 7112, + 9483, 8775, 7113, 10423, 5540, + 9483, 8775, 7113, 11659, 5540, + 9483, 8775, 7150, + 9483, 8775, 7191, 5540, + 9483, 8775, 7351, 601, 4926, + 9483, 8775, 7351, 4926, + 9483, 8775, 7368, + 9483, 8775, 7443, 8641, 5758, + 9483, 8775, 7500, + 9483, 8775, 7519, 600, + 9483, 8775, 7519, 4116, + 9483, 8775, 7551, 9022, + 9483, 8775, 7796, + 9483, 8775, 7823, 5244, + 9483, 8775, 7823, 5540, + 9483, 8775, 8011, 4926, + 9483, 8775, 8012, + 9483, 8775, 8013, 5540, + 9483, 8775, 8057, 47, 10366, + 9483, 8775, 8062, + 9483, 8775, 8073, 5942, + 9483, 8775, 8097, 9022, + 9483, 8775, 8101, 7580, + 9483, 8775, 8153, 4204, + 9483, 8775, 8153, 7518, + 9483, 8775, 8153, 9022, + 9483, 8775, 8159, 5244, + 9483, 8775, 8159, 5540, + 9483, 8775, 8458, + 9483, 8775, 8478, + 9483, 8775, 8479, 5540, + 9483, 8775, 8479, 6504, + 9483, 8775, 8553, 3254, + 9483, 8775, 8553, 6468, + 9483, 8775, 8641, 4112, + 9483, 8775, 8717, 9022, + 9483, 8775, 8745, 2, + 9483, 8775, 8745, 10367, 6504, + 9483, 8775, 8745, 10367, 7820, + 9483, 8775, 8760, + 9483, 8775, 8805, 11167, 925, 11739, 10422, + 9483, 8775, 8805, 11167, 925, 11739, 10423, 12438, + 9483, 8775, 8805, 11167, 925, 11739, 11658, + 9483, 8775, 8805, 12051, 925, 11739, 10422, + 9483, 8775, 8805, 12051, 925, 11739, 11658, + 9483, 8775, 8805, 12051, 925, 11739, 11659, 12438, + 9483, 8775, 8805, 12051, 925, 11739, 11659, 12440, + 9483, 8775, 8805, 12051, 925, 11739, 11659, 12442, + 9483, 8775, 9050, + 9483, 8775, 9060, + 9483, 8775, 9105, 10367, 6504, + 9483, 8775, 9105, 10367, 7820, + 9483, 8775, 9284, + 9483, 8775, 9285, 6490, + 9483, 8775, 9491, 600, + 9483, 8775, 9491, 4116, + 9483, 8775, 9598, + 9483, 8775, 9615, 5244, + 9483, 8775, 9615, 5540, + 9483, 8775, 9615, 5965, 4204, + 9483, 8775, 9615, 5965, 7518, + 9483, 8775, 9633, 6789, 9022, + 9483, 8775, 9950, + 9483, 8775, 10189, 11366, + 9483, 8775, 10189, 11368, + 9483, 8775, 10189, 11370, + 9483, 8775, 10267, 6020, + 9483, 8775, 10349, 9467, 5540, + 9483, 8775, 10367, 6504, + 9483, 8775, 10373, 7626, + 9483, 8775, 10381, 10554, + 9483, 8775, 10381, 10556, + 9483, 8775, 10381, 10558, + 9483, 8775, 10381, 10560, + 9483, 8775, 10381, 10562, + 9483, 8775, 10381, 10564, + 9483, 8775, 10381, 10566, + 9483, 8775, 10381, 10568, + 9483, 8775, 10381, 10570, + 9483, 8775, 10381, 11252, + 9483, 8775, 10381, 11254, + 9483, 8775, 10483, 10182, + 9483, 8775, 10483, 10184, + 9483, 8775, 10483, 10186, + 9483, 8775, 10527, 7626, + 9483, 8775, 10634, + 9483, 8775, 10635, 11212, + 9483, 8775, 10643, 10367, 601, 6504, + 9483, 8775, 10643, 10367, 601, 7443, 6504, + 9483, 8775, 10643, 10367, 601, 7443, 7820, + 9483, 8775, 10643, 10367, 601, 7820, + 9483, 8775, 10643, 10367, 4117, 6504, + 9483, 8775, 10643, 10367, 4117, 7820, + 9483, 8775, 10643, 10367, 4849, 6504, + 9483, 8775, 10643, 10367, 4849, 7820, + 9483, 8775, 10643, 10367, 7443, 6504, + 9483, 8775, 10643, 10367, 7443, 7820, + 9483, 8775, 10659, 7626, + 9483, 8775, 10767, 601, 824, + 9483, 8775, 10767, 2418, + 9483, 8775, 10767, 3772, + 9483, 8775, 10767, 4104, + 9483, 8775, 10767, 4117, 824, + 9483, 8775, 10767, 4206, + 9483, 8775, 10767, 5779, 11174, + 9483, 8775, 10767, 5832, + 9483, 8775, 10767, 7116, + 9483, 8775, 10767, 7596, + 9483, 8775, 10767, 7908, + 9483, 8775, 10767, 8153, 8844, + 9483, 8775, 10767, 8210, + 9483, 8775, 10767, 8212, + 9483, 8775, 10767, 8214, + 9483, 8775, 10767, 8216, + 9483, 8775, 10767, 8218, + 9483, 8775, 10767, 8806, + 9483, 8775, 10767, 8849, 8844, + 9483, 8775, 10767, 9458, + 9483, 8775, 10767, 10236, + 9483, 8775, 10767, 10534, + 9483, 8775, 10767, 11366, + 9483, 8775, 10767, 11368, + 9483, 8775, 10767, 11370, + 9483, 8775, 10767, 12407, 1044, + 9483, 8775, 10767, 12871, 5832, + 9483, 8775, 10767, 13016, + 9483, 8775, 10767, 13184, + 9483, 8775, 10767, 13340, + 9483, 8775, 10784, + 9483, 8775, 10995, 7626, + 9483, 8775, 11005, 7626, + 9483, 8775, 11019, 600, + 9483, 8775, 11019, 4116, + 9483, 8775, 11027, 5, 3946, + 9483, 8775, 11027, 11, 3946, + 9483, 8775, 11176, + 9483, 8775, 11177, 8220, + 9483, 8775, 11220, + 9483, 8775, 11221, 8220, + 9483, 8775, 11241, 5244, + 9483, 8775, 11241, 5540, + 9483, 8775, 11429, 600, + 9483, 8775, 11429, 4116, + 9483, 8775, 11789, 5540, + 9483, 8775, 11789, 6504, + 9483, 8775, 11789, 7820, + 9483, 8775, 11795, 5540, + 9483, 8775, 11795, 6504, + 9483, 8775, 11795, 7820, + 9483, 8775, 11821, 11006, + 9483, 8775, 11857, 7626, + 9483, 8775, 11928, + 9483, 8775, 12023, 11006, + 9483, 8775, 12028, + 9483, 8775, 12092, + 9483, 8775, 12115, 10366, + 9483, 8775, 12152, + 9483, 8775, 12531, 3254, + 9483, 8775, 12531, 6468, + 9483, 8775, 12867, 5244, + 9483, 8775, 12867, 5540, + 9483, 8775, 13025, 5244, + 9483, 8775, 13025, 5540, + 9483, 8775, 13081, 10367, 4117, 6504, + 9483, 8775, 13081, 10367, 4117, 7820, + 9485, 5671, 6689, 2170, + 9485, 5671, 6689, 2540, + 9485, 5671, 6689, 2778, + 9485, 5671, 6689, 4200, + 9485, 5671, 6689, 4214, + 9485, 5671, 6689, 5190, + 9485, 5671, 6689, 6260, + 9485, 5671, 6689, 6722, + 9485, 5671, 6689, 7508, + 9485, 5671, 6689, 7694, + 9485, 5759, 1045, 6490, + 9485, 5759, 3278, + 9485, 5759, 5671, 8834, + 9485, 5759, 5671, 8836, + 9485, 5759, 5671, 8840, + 9485, 5759, 5671, 8842, + 9485, 5759, 5671, 9125, 8834, + 9485, 5759, 5671, 9125, 8836, + 9485, 5759, 5671, 9125, 10159, 5964, + 9485, 5759, 7465, 9555, 8840, + 9485, 5759, 8425, 9664, + 9485, 5759, 8916, + 9485, 5759, 9664, + 9485, 5759, 9824, + 9485, 5759, 9839, 2273, 7025, 8832, + 9485, 5759, 9839, 2273, 7025, 8834, + 9485, 5759, 9839, 2273, 7025, 8836, + 9485, 5759, 9839, 2273, 7025, 8838, + 9485, 5759, 9839, 2273, 7025, 8840, + 9485, 5759, 9870, + 9485, 5965, 4927, 5657, 7025, 311, 2218, + 9485, 5965, 4927, 5657, 7025, 6902, + 9485, 6689, 2170, + 9485, 6689, 2540, + 9485, 6689, 2778, + 9485, 6689, 4200, + 9485, 6689, 4214, + 9485, 6689, 5190, + 9485, 6689, 6260, + 9485, 6689, 6722, + 9485, 6689, 7508, + 9485, 6689, 7694, + 9485, 7803, 5759, 8, + 9485, 7803, 5759, 9, 6376, + 9485, 7803, 5759, 16, + 9485, 7803, 5759, 40, + 9485, 7803, 5759, 58, + 9485, 7803, 5759, 72, + 9485, 7803, 5759, 266, + 9485, 7803, 5759, 606, + 9485, 7803, 5759, 1937, 28, + 9485, 7803, 5759, 1937, 266, + 9485, 7803, 5759, 4263, 7025, 16, + 9485, 7803, 5759, 5657, 7025, 188, + 9485, 7803, 5759, 5671, 8, + 9485, 7803, 5759, 5671, 9, 6376, + 9485, 7803, 5759, 5671, 58, + 9485, 7803, 5759, 5671, 6789, 48, + 9485, 7803, 5759, 5885, 58, + 9485, 7803, 5759, 7031, 40, + 9485, 7803, 5759, 7031, 162, + 9485, 7803, 5759, 7031, 426, + 9485, 7803, 5759, 9827, 22, + 9485, 7803, 5759, 9827, 34, + 9485, 7803, 5759, 9827, 344, + 9485, 7803, 5759, 9827, 518, + 9485, 7803, 5759, 9839, 2273, 7025, 188, + 9485, 7803, 5759, 9839, 2273, 7025, 590, + 9485, 8405, 0, + 9485, 8405, 8, + 9485, 8405, 16, + 9485, 8405, 28, + 9485, 8405, 40, + 9485, 8405, 92, + 9485, 8405, 100, + 9485, 8405, 116, + 9485, 8405, 138, + 9485, 8405, 216, + 9485, 8405, 236, + 9485, 8405, 266, + 9485, 8405, 292, + 9485, 8405, 306, + 9485, 8405, 332, + 9485, 8405, 364, + 9485, 8405, 392, + 9485, 8405, 462, + 9485, 8405, 510, + 9485, 8405, 524, + 9485, 8405, 556, + 9485, 8405, 606, + 9485, 8405, 622, + 9485, 8405, 652, + 9485, 8405, 792, + 9485, 8405, 884, + 9485, 8405, 974, + 9485, 8405, 996, + 9485, 8405, 1260, + 9485, 8405, 1512, + 9485, 8405, 1612, + 9485, 8405, 1796, + 9485, 8405, 1937, 8, + 9485, 8405, 1937, 766, + 9485, 8405, 1937, 768, + 9485, 8405, 1937, 1512, + 9485, 8405, 1937, 2030, + 9485, 8405, 2030, + 9485, 8405, 2076, + 9485, 8405, 2126, + 9485, 8405, 2212, + 9485, 8405, 2516, + 9485, 8405, 2566, + 9485, 8405, 2678, + 9485, 8405, 2746, + 9485, 8405, 4016, + 9485, 8405, 5236, + 9485, 8405, 5657, 7025, 2516, + 9485, 8405, 5671, 0, + 9485, 8405, 5671, 100, + 9485, 8405, 5671, 116, + 9485, 8405, 5671, 138, + 9485, 8405, 5671, 196, + 9485, 8405, 5671, 216, + 9485, 8405, 5671, 236, + 9485, 8405, 5671, 306, + 9485, 8405, 5671, 392, + 9485, 8405, 5671, 670, + 9485, 8405, 5671, 1612, + 9485, 8405, 5671, 2126, + 9485, 8405, 5671, 2212, + 9485, 8405, 5671, 2678, + 9485, 8405, 5994, + 9485, 8405, 6877, 524, + 9485, 8405, 7465, 9555, 196, + 9485, 8405, 9253, 2273, 7025, 2076, + 9485, 8405, 9253, 2273, 7025, 3102, + 9485, 8405, 9253, 2273, 7025, 4322, + 9485, 8405, 9827, 22, + 9485, 8405, 9827, 34, + 9485, 8405, 9827, 344, + 9485, 8405, 9827, 518, + 9485, 8405, 9839, 2273, 7025, 2266, + 9485, 8405, 9839, 2273, 7025, 2678, + 9485, 8775, 5671, 2170, + 9485, 8775, 5671, 12016, + 9485, 8775, 10218, + 9485, 8775, 10304, + 9485, 8775, 10768, + 9485, 8775, 13040, + 9485, 10775, 5759, 1937, 8461, 332, + 9485, 10775, 5759, 1937, 8461, 364, + 9485, 10775, 5759, 1937, 8461, 392, + 9485, 10775, 5759, 5671, 8461, 622, + 9485, 10775, 5759, 8461, 236, + 9485, 10775, 5759, 8461, 510, + 9485, 10775, 5759, 8461, 622, + 9485, 10775, 5759, 8461, 652, + 9495, 8153, 10677, 761, 8153, 7443, 11378, + 9497, 1, 8763, 429, 2089, 6741, 568, + 9497, 1, 10579, 429, 2089, 6741, 568, + 9497, 11099, 2089, 6741, 568, + 9497, 11099, 2089, 11621, 568, + 9497, 11099, 2089, 12472, + 9497, 12473, 2089, 6741, 568, + 9497, 12473, 2089, 11098, + 9497, 12473, 2089, 11621, 568, + 9497, 12903, 2089, 9855, 6741, 568, + 9498, + 9509, 6689, 8696, + 9511, 7121, 13069, 7821, 11765, 6434, + 9511, 7773, 13069, 7821, 11765, 6434, + 9525, 6409, 9537, 600, + 9525, 6409, 9537, 4116, + 9541, 6689, 2170, + 9541, 6689, 2540, + 9541, 6689, 2778, + 9541, 6689, 4200, + 9541, 6689, 4214, + 9541, 6689, 5190, + 9541, 6689, 6260, + 9541, 6689, 6722, + 9541, 6689, 7508, + 9541, 6689, 7694, + 9541, 8405, 0, + 9541, 8405, 8, + 9541, 8405, 16, + 9541, 8405, 28, + 9541, 8405, 40, + 9541, 8405, 58, + 9541, 8405, 100, + 9541, 8405, 162, + 9541, 8405, 196, + 9541, 8405, 216, + 9541, 8405, 236, + 9541, 8405, 292, + 9541, 8405, 440, + 9541, 8405, 510, + 9541, 8405, 524, + 9541, 8405, 556, + 9541, 8405, 638, + 9541, 8405, 652, + 9541, 8405, 996, + 9541, 8405, 1612, + 9541, 8405, 2918, + 9541, 8405, 3244, + 9541, 8405, 3854, + 9541, 8405, 4050, + 9541, 8405, 4698, + 9541, 8405, 4820, + 9541, 8405, 5000, + 9541, 8405, 5288, + 9541, 8405, 5470, + 9541, 8405, 7540, + 9573, 12432, + 9581, 5758, + 9595, 5758, + 9615, 5244, + 9617, 8775, 8004, + 9633, 7709, 10375, 6377, 11097, 6434, + 9633, 7709, 10375, 6377, 11765, 6434, + 9633, 9718, + 9633, 9719, 6121, 11649, 8758, + 9633, 9719, 10374, + 9633, 9719, 11183, 8762, + 9641, 6909, 6505, 6907, 8022, + 9641, 8225, 6907, 8022, + 9641, 9063, 32, + 9650, + 9660, + 9665, 5758, + 9666, + 9671, 4926, + 9676, + 9683, 8405, 70, + 9683, 8405, 260, + 9683, 8405, 438, + 9683, 8405, 444, + 9683, 8405, 536, + 9683, 8405, 600, + 9683, 8405, 706, + 9683, 8405, 708, + 9683, 8405, 712, + 9683, 8405, 732, + 9683, 8405, 736, + 9683, 8405, 740, + 9683, 8405, 802, + 9683, 8405, 1090, + 9683, 8405, 1092, + 9683, 8405, 1100, + 9683, 8405, 1120, + 9683, 8405, 1150, + 9683, 8405, 1210, + 9683, 8405, 1472, + 9683, 8405, 1474, + 9683, 8405, 2110, + 9683, 8405, 2154, + 9683, 8405, 2164, + 9683, 8405, 2186, + 9683, 8405, 2726, + 9683, 8405, 2884, + 9683, 8405, 2938, + 9683, 8405, 3048, + 9683, 8405, 3060, + 9683, 8405, 3178, + 9683, 8405, 4048, + 9683, 8405, 4548, + 9683, 8405, 4754, + 9683, 8405, 4892, + 9683, 8405, 5004, + 9683, 8405, 5382, + 9683, 8405, 5406, + 9683, 8405, 5560, + 9683, 8405, 5854, + 9683, 8405, 5922, + 9683, 8405, 6124, + 9683, 8405, 6432, + 9683, 8405, 6886, + 9683, 8405, 7012, + 9683, 8405, 7684, + 9683, 8405, 8054, + 9683, 8405, 9466, + 9689, 9610, + 9693, 445, 11098, + 9693, 445, 12472, + 9693, 6377, 11099, 6377, 8167, 5758, + 9693, 6377, 12473, 6377, 8167, 5758, + 9693, 7173, 9692, + 9695, 5759, 10702, + 9695, 5759, 11392, + 9695, 5759, 11418, + 9695, 7803, 5759, 4087, 9406, + 9695, 7803, 5759, 4087, 10272, + 9695, 7803, 5759, 4087, 11150, + 9695, 7803, 5759, 4087, 11406, + 9695, 7803, 5759, 4087, 12024, + 9695, 7803, 5759, 4087, 12468, + 9695, 7803, 5759, 7043, 10272, + 9695, 7803, 5759, 7043, 11150, + 9695, 7803, 5759, 7043, 11406, + 9695, 7803, 5759, 7059, 4056, + 9695, 7803, 5759, 9406, + 9695, 7803, 5759, 9407, 1339, 4087, 11408, + 9695, 7803, 5759, 9407, 1339, 11408, + 9695, 7803, 5759, 9407, 1339, 12024, + 9695, 7803, 5759, 11408, + 9695, 7803, 5759, 12024, + 9695, 7803, 5759, 12468, + 9695, 8405, 3259, 9032, + 9695, 8405, 7962, + 9695, 8405, 8176, + 9695, 8405, 8326, + 9695, 8405, 8558, + 9695, 8405, 8904, + 9695, 8405, 8966, + 9695, 8405, 8978, + 9695, 8405, 8988, + 9695, 8405, 9012, + 9695, 8405, 9141, 9424, + 9695, 8405, 9141, 9492, + 9695, 8405, 9141, 9656, + 9695, 8405, 9256, + 9695, 8405, 9280, + 9695, 8405, 9330, + 9695, 8405, 9352, + 9695, 8405, 9387, 11692, + 9695, 8405, 9464, + 9695, 8405, 9534, + 9695, 8405, 9622, + 9695, 8405, 9655, 9146, + 9695, 8405, 9655, 9302, + 9695, 8405, 9655, 9376, + 9695, 8405, 9655, 9988, + 9695, 8405, 9759, 9656, + 9695, 8405, 9759, 10499, 12090, + 9695, 8405, 9759, 11692, + 9695, 8405, 9812, + 9695, 8405, 9818, + 9695, 8405, 9844, + 9695, 8405, 9856, + 9695, 8405, 10248, + 9695, 8405, 10270, + 9695, 8405, 11044, + 9695, 8405, 11064, + 9695, 8405, 11133, 9424, + 9695, 8405, 11133, 9492, + 9695, 8405, 11133, 9656, + 9695, 8405, 11411, 9032, + 9695, 8405, 11411, 9070, + 9695, 8405, 11411, 9146, + 9695, 8405, 11411, 9302, + 9695, 8405, 11411, 9376, + 9695, 8405, 11411, 9392, + 9695, 8405, 11411, 9576, + 9695, 8405, 11411, 9768, + 9695, 8405, 11411, 9988, + 9695, 8405, 11411, 10652, + 9695, 8405, 12077, 9032, + 9695, 8405, 12077, 9070, + 9695, 8405, 12077, 9146, + 9695, 8405, 12077, 9302, + 9695, 8405, 12077, 9376, + 9695, 8405, 12077, 9392, + 9695, 8405, 12077, 9576, + 9695, 8405, 12077, 9768, + 9695, 8405, 12077, 9988, + 9695, 8405, 12077, 10652, + 9695, 12133, 11670, + 9701, 9601, 9898, + 9705, 6741, 569, 445, 11098, + 9705, 6741, 569, 445, 11099, 6121, 1045, 8318, + 9705, 6741, 569, 445, 12472, + 9705, 6741, 569, 445, 12473, 6121, 1045, 8318, + 9707, 7085, 444, + 9707, 7085, 720, + 9709, 5912, + 9709, 5913, 445, 6741, 568, + 9712, + 9718, + 9719, 6121, 9546, + 9722, + 9733, 1045, 10374, + 9733, 4215, 1045, 12132, + 9733, 5444, + 9733, 7172, + 9733, 7593, 8056, + 9733, 7710, + 9733, 8649, 10001, 7580, + 9733, 8744, + 9733, 9279, 10001, 7580, + 9733, 9898, + 9753, 10260, + 9761, 5759, 8916, + 9761, 7803, 5759, 16, + 9761, 7803, 5759, 40, + 9761, 8405, 0, + 9761, 8405, 16, + 9761, 8405, 40, + 9761, 8405, 100, + 9761, 8405, 138, + 9761, 8405, 216, + 9761, 8405, 236, + 9761, 8405, 306, + 9761, 8405, 332, + 9761, 8405, 364, + 9761, 8405, 392, + 9761, 8405, 462, + 9761, 8405, 524, + 9761, 8405, 556, + 9761, 8405, 622, + 9761, 8405, 652, + 9761, 8405, 2030, + 9783, 12369, 11765, 10716, + 9783, 13049, 11765, 10716, + 9789, 327, 521, 1612, + 9789, 327, 521, 1613, 3831, 1915, 858, + 9789, 4927, 723, 7045, 4376, + 9789, 4927, 723, 7045, 4382, + 9789, 4927, 887, 1904, + 9789, 4927, 1307, 7463, 4376, + 9789, 4927, 1307, 7463, 4382, + 9789, 4927, 2417, 3895, 8743, 5668, + 9789, 4927, 2733, 6374, + 9789, 4927, 3067, 1905, 7745, 5669, 364, + 9789, 4927, 3793, 5709, 3067, 1904, + 9789, 4927, 4355, 3067, 1905, 685, 4355, 7745, 364, + 9789, 4927, 4355, 3067, 1905, 685, 5559, 3759, 364, + 9789, 4927, 4355, 3067, 1905, 11377, 0, + 9789, 4927, 4355, 7744, + 9789, 4927, 5141, 6539, 2133, 3174, + 9789, 4927, 5141, 6539, 5659, 7462, + 9789, 4927, 5307, 5668, + 9789, 4927, 5307, 7744, + 9789, 4927, 5307, 7745, 5668, + 9789, 4927, 5543, 4351, 5668, + 9789, 4927, 5668, + 9789, 4927, 6523, 7462, + 9789, 4927, 6525, 5709, 225, 1905, 7436, + 9789, 4927, 6527, 3067, 1904, + 9789, 4927, 6543, 3067, 1905, 5421, 5669, 364, + 9789, 4927, 6543, 6373, 7463, 369, 4895, 858, + 9789, 4927, 6543, 6373, 7463, 3831, 1915, 858, + 9789, 4927, 7179, 3067, 225, 1905, 7436, + 9789, 4927, 7493, 5668, + 9789, 4927, 7745, 5668, + 9789, 4927, 8564, + 9789, 4927, 9099, 3067, 1905, 5655, 364, + 9789, 4927, 9099, 3809, 8653, 3067, 1905, 5655, 364, + 9789, 4927, 9320, + 9789, 4927, 9363, 3067, 1905, 4939, 364, + 9789, 4927, 9363, 3809, 8653, 3067, 1905, 4939, 364, + 9789, 4927, 10795, 7745, 6528, + 9789, 4927, 12955, 7744, + 9789, 5759, 1301, 859, 9634, + 9789, 5759, 1301, 1889, 9634, + 9789, 5759, 1753, 2733, 858, + 9789, 5759, 1755, 7462, + 9789, 5759, 1865, 7746, + 9789, 5759, 2133, 3175, 1983, 138, + 9789, 5759, 2547, 4842, + 9789, 5759, 3035, 7746, + 9789, 5759, 4937, 858, + 9789, 5759, 5531, 1985, 4256, + 9789, 5759, 5531, 1985, 4352, + 9789, 5759, 5531, 1985, 5531, 4096, + 9789, 5759, 5531, 1985, 6862, + 9789, 5759, 5531, 4097, 4256, + 9789, 5759, 5531, 4097, 4352, + 9789, 5759, 5531, 4097, 5531, 1984, + 9789, 5759, 5531, 4097, 6862, + 9789, 5759, 5557, 547, 2031, 516, + 9789, 5759, 5559, 3758, + 9789, 5759, 6179, 7462, + 9789, 6689, 2170, + 9789, 6689, 2540, + 9789, 6689, 2778, + 9789, 6689, 4200, + 9789, 6689, 4214, + 9789, 6689, 4389, 2170, + 9789, 6689, 4389, 2540, + 9789, 6689, 4389, 2778, + 9789, 6689, 4389, 4200, + 9789, 6689, 4389, 4214, + 9789, 6689, 4389, 5190, + 9789, 6689, 4389, 6260, + 9789, 6689, 4389, 6722, + 9789, 6689, 4389, 7508, + 9789, 6689, 4389, 7694, + 9789, 6689, 5190, + 9789, 6689, 6260, + 9789, 6689, 6722, + 9789, 6689, 7508, + 9789, 6689, 7694, + 9789, 7803, 5759, 8, + 9789, 7803, 5759, 16, + 9789, 7803, 5759, 28, + 9789, 7803, 5759, 40, + 9789, 7803, 5759, 58, + 9789, 7803, 5759, 162, + 9789, 7803, 5759, 266, + 9789, 7803, 5759, 440, + 9789, 7803, 5759, 606, + 9789, 7803, 5759, 9827, 22, + 9789, 7803, 5759, 9827, 34, + 9789, 7803, 5759, 9827, 344, + 9789, 7803, 5759, 9827, 518, + 9789, 7803, 5759, 10489, 16, + 9789, 7803, 5759, 10489, 266, + 9789, 8405, 0, + 9789, 8405, 52, + 9789, 8405, 100, + 9789, 8405, 116, + 9789, 8405, 138, + 9789, 8405, 216, + 9789, 8405, 236, + 9789, 8405, 292, + 9789, 8405, 306, + 9789, 8405, 332, + 9789, 8405, 364, + 9789, 8405, 392, + 9789, 8405, 462, + 9789, 8405, 510, + 9789, 8405, 524, + 9789, 8405, 556, + 9789, 8405, 622, + 9789, 8405, 652, + 9789, 8405, 670, + 9789, 8405, 792, + 9789, 8405, 884, + 9789, 8405, 974, + 9789, 8405, 996, + 9789, 8405, 1080, + 9789, 8405, 1260, + 9789, 8405, 1612, + 9789, 8405, 1642, + 9789, 8405, 2030, + 9789, 8405, 2076, + 9789, 8405, 2126, + 9789, 8405, 2212, + 9789, 8405, 2438, + 9789, 8405, 2516, + 9789, 8405, 2566, + 9789, 8405, 2678, + 9789, 8405, 2732, + 9789, 8405, 2746, + 9789, 8405, 3146, + 9789, 8405, 4016, + 9789, 8405, 4140, + 9789, 8405, 4782, + 9789, 8405, 5978, + 9789, 8405, 5994, + 9789, 8405, 11631, 510, + 9789, 8775, 2089, 112, + 9789, 8775, 2089, 113, 3831, 7904, + 9789, 8775, 2089, 113, 4353, 7904, + 9789, 8775, 2089, 113, 5307, 7904, + 9789, 8775, 2399, 2420, + 9789, 8775, 2399, 2421, 5543, 4350, + 9789, 8775, 4119, 112, + 9789, 8775, 5421, 462, + 9789, 8775, 7333, 4258, + 9789, 10307, 5759, 3877, 7462, + 9789, 10307, 5759, 4859, 7462, + 9789, 10585, 436, + 9789, 11257, 8405, 0, + 9789, 11257, 8405, 52, + 9789, 11257, 8405, 100, + 9789, 11257, 8405, 116, + 9789, 11257, 8405, 138, + 9789, 11257, 8405, 216, + 9789, 11257, 8405, 236, + 9789, 11257, 8405, 292, + 9789, 11257, 8405, 306, + 9789, 11257, 8405, 332, + 9789, 11257, 8405, 364, + 9789, 11257, 8405, 392, + 9789, 11257, 8405, 462, + 9789, 11257, 8405, 510, + 9789, 11257, 8405, 524, + 9789, 11257, 8405, 556, + 9789, 11257, 8405, 622, + 9789, 11257, 8405, 652, + 9789, 11257, 8405, 670, + 9789, 11257, 8405, 792, + 9789, 11257, 8405, 884, + 9789, 11257, 8405, 974, + 9789, 11257, 8405, 996, + 9789, 11257, 8405, 1080, + 9789, 11257, 8405, 1260, + 9789, 11257, 8405, 1612, + 9789, 11257, 8405, 2030, + 9789, 11257, 8405, 2076, + 9789, 11257, 8405, 2126, + 9789, 11257, 8405, 2212, + 9789, 11257, 8405, 2516, + 9789, 11257, 8405, 2566, + 9789, 11257, 8405, 2678, + 9789, 11257, 8405, 2732, + 9789, 11257, 8405, 2746, + 9789, 11257, 8405, 3146, + 9789, 11257, 8405, 4016, + 9789, 11257, 8405, 4140, + 9789, 11257, 8405, 4782, + 9789, 11257, 8405, 5978, + 9789, 11257, 8405, 5994, + 9789, 11257, 8405, 11631, 510, + 9789, 11257, 8405, 11631, 622, + 9789, 11257, 8405, 11631, 652, + 9789, 12405, 5759, 5661, 4255, 6371, 7462, + 9789, 12405, 5759, 7497, 8858, + 9789, 12405, 5759, 7907, 462, + 9789, 12423, 5759, 3845, 5892, + 9789, 12423, 5759, 5641, 6368, + 9789, 12423, 5759, 6909, 3764, + 9789, 12423, 5759, 7101, 3764, + 9793, 1177, 4194, + 9793, 1177, 4830, + 9793, 1177, 6116, + 9793, 1177, 6716, + 9793, 1177, 7812, + 9793, 1177, 8290, + 9793, 1177, 9786, + 9793, 1177, 10344, + 9811, 2779, 8289, 6434, + 9811, 6434, + 9811, 6435, 569, 760, + 9811, 6435, 4221, 760, + 9811, 6435, 6121, 2697, 11096, + 9811, 6435, 6121, 2697, 11764, + 9811, 6435, 6121, 8153, 8758, + 9811, 6435, 6121, 11649, 8758, + 9811, 6435, 11097, 429, 10959, 6434, + 9811, 6505, 6434, + 9811, 7821, 6434, + 9811, 7821, 6435, 439, 10416, + 9811, 7821, 6435, 439, 10417, 6121, 10677, 760, + 9811, 7821, 6435, 439, 10417, 6121, 11649, 760, + 9811, 7821, 6435, 4221, 760, + 9811, 7821, 8153, 6434, + 9811, 7821, 8153, 6435, 439, 10416, + 9811, 7924, + 9811, 8097, 6434, + 9811, 8153, 6434, + 9811, 8561, 7944, + 9811, 8849, 6434, + 9811, 9327, 6121, 3713, 4849, 569, 760, + 9811, 9327, 6121, 3713, 4849, 4221, 760, + 9811, 9327, 6121, 3713, 4849, 7991, 9811, 9327, 6121, 3713, 7442, + 9811, 9327, 6121, 3713, 4849, 7991, 10959, 9327, 6121, 3713, 7442, + 9811, 9327, 6121, 3713, 7443, 569, 760, + 9811, 9327, 6121, 3713, 7443, 4221, 760, + 9811, 9327, 6121, 3713, 11096, + 9811, 9327, 6121, 3713, 11764, + 9811, 11191, 6434, + 9811, 11875, 6435, 4221, 7593, 8056, + 9821, 4390, + 9835, 5758, + 9843, 4390, + 9853, 7931, 4213, 9680, + 9853, 11345, 10582, + 9858, + 9867, 5758, + 9880, + 9891, 4223, 5836, + 9891, 6616, + 9891, 7593, 8405, 116, + 9891, 7593, 8405, 130, + 9891, 7593, 8405, 138, + 9891, 7593, 8405, 166, + 9891, 7593, 8405, 186, + 9891, 7593, 8405, 246, + 9891, 7593, 8405, 292, + 9891, 7593, 8405, 430, + 9891, 7593, 8405, 510, + 9891, 7593, 8405, 568, + 9891, 7593, 8405, 616, + 9891, 7593, 8405, 656, + 9891, 7593, 8405, 670, + 9891, 7593, 8405, 744, + 9891, 7593, 8405, 784, + 9891, 7593, 8405, 884, + 9891, 7593, 8405, 1094, + 9891, 7593, 8405, 1152, + 9891, 7593, 8405, 1276, + 9891, 7593, 8405, 1488, + 9891, 7593, 8405, 1600, + 9891, 7593, 8405, 1602, + 9891, 7593, 8405, 1894, + 9891, 7593, 8405, 2092, + 9891, 7593, 8405, 2206, + 9891, 7593, 8405, 2404, + 9891, 7593, 8405, 2506, + 9891, 7593, 8405, 2516, + 9891, 7593, 8405, 2862, + 9891, 7593, 8405, 2958, + 9891, 7593, 8405, 3148, + 9891, 7593, 8405, 3892, + 9891, 7593, 8405, 4314, + 9891, 7593, 8405, 4636, + 9891, 7593, 8405, 4886, + 9891, 7593, 8405, 5434, + 9891, 7593, 8405, 5948, + 9891, 7593, 8405, 6214, + 9891, 7593, 10301, 1095, 6214, + 9891, 7593, 10301, 1895, 1094, + 9891, 7593, 10301, 1895, 1488, + 9891, 7593, 10301, 1895, 2092, + 9891, 7593, 10301, 1895, 2958, + 9891, 7593, 10301, 2863, 2092, + 9891, 8306, + 9891, 9063, 8405, 116, + 9891, 9063, 8405, 130, + 9891, 9063, 8405, 138, + 9891, 9063, 8405, 166, + 9891, 9063, 8405, 186, + 9891, 9063, 8405, 246, + 9891, 9063, 8405, 292, + 9891, 9063, 8405, 430, + 9891, 9063, 8405, 510, + 9891, 9063, 8405, 568, + 9891, 9063, 8405, 616, + 9891, 9063, 8405, 656, + 9891, 9063, 8405, 670, + 9891, 9063, 8405, 744, + 9891, 9063, 8405, 784, + 9891, 9063, 8405, 884, + 9891, 9063, 8405, 1094, + 9891, 9063, 8405, 1152, + 9891, 9063, 8405, 1276, + 9891, 9063, 8405, 1488, + 9891, 9063, 8405, 1600, + 9891, 9063, 8405, 1602, + 9891, 9063, 8405, 1894, + 9891, 9063, 8405, 2092, + 9891, 9063, 8405, 2206, + 9891, 9063, 8405, 2404, + 9891, 9063, 8405, 2506, + 9891, 9063, 8405, 2516, + 9891, 9063, 8405, 2862, + 9891, 9063, 8405, 2958, + 9891, 9063, 8405, 3148, + 9891, 9063, 8405, 3892, + 9891, 9063, 8405, 4314, + 9891, 9063, 8405, 4636, + 9891, 9063, 8405, 4886, + 9891, 9063, 8405, 5434, + 9891, 9063, 8405, 5948, + 9891, 9063, 8405, 6214, + 9891, 10157, 4926, + 9891, 10339, 8405, 4849, 4389, 5550, + 9891, 10469, 4926, + 9891, 11424, + 9891, 12017, 4926, + 9891, 12391, 4926, + 9898, + 9899, 10374, + 9900, + 9907, 3229, 3228, + 9907, 5759, 2811, 7438, + 9907, 5759, 2811, 8030, + 9907, 5759, 6502, + 9907, 5759, 6556, + 9907, 5759, 8768, + 9907, 5759, 9628, + 9907, 6545, 5762, + 9907, 6545, 9570, + 9907, 6545, 11156, + 9907, 6689, 2170, + 9907, 6689, 2540, + 9907, 6689, 2778, + 9907, 6689, 4200, + 9907, 6689, 4214, + 9907, 6689, 5190, + 9907, 6689, 6260, + 9907, 6689, 6722, + 9907, 6689, 7508, + 9907, 6689, 7694, + 9907, 7334, + 9907, 7803, 5759, 333, 7094, + 9907, 7803, 5759, 333, 7095, 8796, + 9907, 7803, 5759, 511, 5536, + 9907, 7803, 5759, 511, 5537, 8796, + 9907, 7803, 5759, 2810, + 9907, 7803, 5759, 2811, 5638, + 9907, 7803, 5759, 5844, + 9907, 7803, 5759, 5845, 4602, + 9907, 7803, 5759, 7362, + 9907, 7803, 5759, 7363, 8796, + 9907, 7803, 5759, 8788, + 9907, 7803, 5759, 8789, 5536, + 9907, 7803, 5759, 8789, 5537, 8796, + 9907, 7803, 5759, 8789, 8796, + 9907, 7803, 5759, 8796, + 9907, 7826, + 9907, 8405, 100, + 9907, 8405, 101, 9396, + 9907, 8405, 116, + 9907, 8405, 117, 4822, + 9907, 8405, 138, + 9907, 8405, 139, 4920, + 9907, 8405, 139, 7195, 10704, + 9907, 8405, 139, 7195, 11106, + 9907, 8405, 165, 7488, + 9907, 8405, 216, + 9907, 8405, 217, 4346, + 9907, 8405, 236, + 9907, 8405, 292, + 9907, 8405, 293, 4632, + 9907, 8405, 306, + 9907, 8405, 307, 11106, + 9907, 8405, 332, + 9907, 8405, 333, 7094, + 9907, 8405, 333, 7095, 8796, + 9907, 8405, 364, + 9907, 8405, 392, + 9907, 8405, 393, 8632, + 9907, 8405, 462, + 9907, 8405, 463, 7020, + 9907, 8405, 510, + 9907, 8405, 511, 5536, + 9907, 8405, 511, 5537, 8796, + 9907, 8405, 524, + 9907, 8405, 525, 5626, + 9907, 8405, 525, 5634, + 9907, 8405, 556, + 9907, 8405, 557, 5888, + 9907, 8405, 557, 7086, + 9907, 8405, 557, 7195, 11106, + 9907, 8405, 613, 7488, + 9907, 8405, 622, + 9907, 8405, 652, + 9907, 8405, 1579, 7488, + 9907, 8405, 2030, + 9907, 8405, 2126, + 9907, 8405, 3129, 7488, + 9907, 8405, 4753, 7488, + 9907, 8405, 6037, 7488, + 9907, 8405, 6390, + 9907, 8405, 6391, 8796, + 9907, 8405, 6726, + 9907, 8405, 6986, + 9907, 8405, 6987, 8796, + 9907, 8405, 7312, + 9907, 8405, 7313, 8796, + 9907, 8405, 7760, + 9907, 8405, 7761, 8796, + 9907, 8405, 7914, + 9907, 8405, 7957, 7488, + 9907, 8566, + 9907, 9483, 8775, 3986, + 9907, 9483, 8775, 3987, 4266, + 9907, 9483, 8775, 3987, 8768, + 9907, 9483, 8775, 4060, + 9907, 9483, 8775, 4090, + 9907, 9483, 8775, 4106, + 9907, 9483, 8775, 4128, + 9907, 9483, 8775, 6632, + 9907, 9483, 8775, 6638, + 9907, 9483, 8775, 6678, + 9907, 9483, 8775, 10767, 4344, + 9907, 9483, 8775, 10767, 6492, + 9907, 9483, 8775, 10767, 6732, + 9907, 9483, 8775, 10767, 7670, + 9907, 9483, 8775, 10767, 8350, + 9907, 9483, 8775, 10767, 8351, 6121, 9378, + 9907, 9483, 8775, 10767, 8352, + 9907, 9483, 8775, 10767, 8353, 6121, 9378, + 9907, 9483, 8775, 10767, 9378, + 9907, 9483, 8775, 11091, 5385, 5396, + 9907, 9483, 8775, 11091, 5385, 5432, + 9907, 9483, 8775, 11091, 5385, 5452, + 9907, 9483, 8775, 11091, 8065, 5436, + 9907, 9483, 8775, 11091, 8065, 5440, + 9907, 9483, 8775, 11761, 5385, 958, + 9907, 9483, 8775, 11761, 5385, 1052, + 9907, 9483, 8775, 11761, 8065, 2644, + 9907, 9483, 8775, 11761, 8065, 2758, + 9907, 10398, + 9919, 6789, 8405, 14, + 9919, 6789, 8405, 20, + 9919, 6789, 8405, 30, + 9919, 6789, 8405, 38, + 9919, 8405, 0, + 9919, 8405, 2, + 9919, 8405, 4, + 9919, 8405, 6, + 9919, 8405, 8, + 9919, 8405, 10, + 9919, 8405, 12, + 9919, 8405, 14, + 9919, 8405, 16, + 9919, 8405, 18, + 9919, 8405, 20, + 9919, 8405, 22, + 9919, 8405, 24, + 9919, 8405, 26, + 9919, 8405, 28, + 9919, 8405, 30, + 9919, 8405, 32, + 9919, 8405, 34, + 9919, 8405, 36, + 9919, 8405, 38, + 9919, 8405, 40, + 9919, 8405, 42, + 9919, 8405, 46, + 9919, 8405, 50, + 9919, 8405, 72, + 9919, 8405, 78, + 9919, 8405, 80, + 9919, 8405, 92, + 9919, 8405, 112, + 9919, 8405, 124, + 9919, 8405, 162, + 9919, 8405, 166, + 9919, 8405, 168, + 9919, 8405, 176, + 9919, 8405, 182, + 9919, 8405, 226, + 9919, 8405, 230, + 9919, 8405, 264, + 9919, 8405, 272, + 9919, 8405, 280, + 9919, 8405, 286, + 9919, 8405, 296, + 9919, 8405, 400, + 9919, 8405, 436, + 9919, 8405, 440, + 9919, 8405, 450, + 9919, 8405, 530, + 9919, 8405, 674, + 9919, 8405, 676, + 9919, 8405, 722, + 9919, 8405, 724, + 9919, 8405, 1110, + 9919, 8405, 1112, + 9919, 8405, 1490, + 9919, 8405, 2034, + 9919, 8405, 2172, + 9919, 8405, 2174, + 9919, 8405, 2814, + 9919, 8405, 3238, + 9919, 8405, 3286, + 9919, 8405, 4610, + 9923, 1109, 429, 9664, + 9923, 7803, 5759, 8, + 9923, 7803, 5759, 16, + 9923, 7803, 5759, 28, + 9923, 7803, 5759, 40, + 9923, 7803, 5759, 66, + 9923, 8405, 0, + 9923, 8405, 100, + 9923, 8405, 116, + 9923, 8405, 138, + 9923, 8405, 216, + 9923, 8405, 236, + 9923, 8405, 292, + 9923, 8405, 306, + 9923, 8405, 332, + 9923, 8405, 364, + 9923, 8405, 392, + 9923, 8405, 462, + 9923, 8405, 510, + 9923, 8405, 524, + 9923, 8405, 556, + 9923, 8405, 610, + 9923, 8405, 652, + 9923, 8405, 1946, + 9923, 8405, 2030, + 9923, 8405, 2096, + 9923, 8405, 2126, + 9923, 8405, 5166, + 9923, 8405, 5294, + 9923, 9556, + 9924, + 9928, + 9931, 11269, 0, + 9931, 11269, 4, + 9931, 11269, 8, + 9931, 11269, 10, + 9931, 11269, 16, + 9931, 11269, 20, + 9931, 11269, 22, + 9931, 11269, 24, + 9931, 11269, 26, + 9931, 11269, 28, + 9931, 11269, 30, + 9931, 11269, 32, + 9931, 11269, 34, + 9931, 11269, 36, + 9931, 11269, 38, + 9931, 11269, 48, + 9931, 11269, 58, + 9931, 11269, 72, + 9931, 11269, 80, + 9931, 11269, 116, + 9931, 11269, 122, + 9931, 11269, 126, + 9931, 11269, 130, + 9931, 11269, 176, + 9931, 11269, 196, + 9931, 11269, 198, + 9931, 11269, 202, + 9931, 11269, 208, + 9931, 11269, 244, + 9931, 11269, 266, + 9931, 11269, 274, + 9931, 11269, 306, + 9931, 11269, 310, + 9931, 11269, 314, + 9931, 11269, 322, + 9931, 11269, 330, + 9931, 11269, 332, + 9931, 11269, 336, + 9931, 11269, 338, + 9931, 11269, 340, + 9931, 11269, 350, + 9931, 11269, 364, + 9931, 11269, 368, + 9931, 11269, 372, + 9931, 11269, 374, + 9931, 11269, 380, + 9931, 11269, 392, + 9931, 11269, 396, + 9931, 11269, 400, + 9931, 11269, 402, + 9931, 11269, 404, + 9931, 11269, 412, + 9931, 11269, 438, + 9931, 11269, 440, + 9931, 11269, 462, + 9931, 11269, 468, + 9931, 11269, 476, + 9931, 11269, 480, + 9931, 11269, 496, + 9931, 11269, 500, + 9931, 11269, 502, + 9931, 11269, 510, + 9931, 11269, 512, + 9931, 11269, 514, + 9931, 11269, 516, + 9931, 11269, 524, + 9931, 11269, 526, + 9931, 11269, 530, + 9931, 11269, 532, + 9931, 11269, 536, + 9931, 11269, 550, + 9931, 11269, 556, + 9931, 11269, 560, + 9931, 11269, 562, + 9931, 11269, 564, + 9931, 11269, 568, + 9931, 11269, 622, + 9931, 11269, 626, + 9931, 11269, 630, + 9931, 11269, 632, + 9931, 11269, 652, + 9931, 11269, 654, + 9931, 11269, 656, + 9931, 11269, 660, + 9931, 11269, 690, + 9931, 11269, 854, + 9931, 11269, 889, 5758, + 9931, 11269, 898, + 9931, 11269, 914, + 9931, 11269, 936, + 9931, 11269, 938, + 9931, 11269, 940, + 9931, 11269, 942, + 9931, 11269, 1140, + 9931, 11269, 1160, + 9931, 11269, 1172, + 9931, 11269, 1574, + 9931, 11269, 1630, + 9931, 11269, 1660, + 9931, 11269, 1704, + 9931, 11269, 1706, + 9931, 11269, 1708, + 9931, 11269, 1710, + 9931, 11269, 1732, + 9931, 11269, 1770, + 9931, 11269, 1774, + 9931, 11269, 1776, + 9931, 11269, 1784, + 9931, 11269, 1802, + 9931, 11269, 1834, + 9931, 11269, 1836, + 9931, 11269, 1838, + 9931, 11269, 1840, + 9931, 11269, 1854, + 9931, 11269, 1916, + 9931, 11269, 1938, + 9931, 11269, 1964, + 9931, 11269, 1966, + 9931, 11269, 1968, + 9931, 11269, 1970, + 9931, 11269, 1982, + 9931, 11269, 2030, + 9931, 11269, 2036, + 9931, 11269, 2038, + 9931, 11269, 2052, + 9931, 11269, 2078, + 9931, 11269, 2084, + 9931, 11269, 2122, + 9931, 11269, 2124, + 9931, 11269, 2188, + 9931, 11269, 2226, + 9931, 11269, 2238, + 9931, 11269, 2266, + 9931, 11269, 2268, + 9931, 11269, 2270, + 9931, 11269, 2272, + 9931, 11269, 2282, + 9931, 11269, 2286, + 9931, 11269, 2308, + 9931, 11269, 2320, + 9931, 11269, 2378, + 9931, 11269, 2414, + 9931, 11269, 2430, + 9931, 11269, 2482, + 9931, 11269, 2516, + 9931, 11269, 2518, + 9931, 11269, 2520, + 9931, 11269, 2522, + 9931, 11269, 2532, + 9931, 11269, 2554, + 9931, 11269, 2598, + 9931, 11269, 2600, + 9931, 11269, 2604, + 9931, 11269, 2606, + 9931, 11269, 2634, + 9931, 11269, 2678, + 9931, 11269, 2680, + 9931, 11269, 2682, + 9931, 11269, 2684, + 9931, 11269, 2692, + 9931, 11269, 2722, + 9931, 11269, 2746, + 9931, 11269, 2748, + 9931, 11269, 2750, + 9931, 11269, 2752, + 9931, 11269, 2754, + 9931, 11269, 2772, + 9931, 11269, 2774, + 9931, 11269, 2776, + 9931, 11269, 2778, + 9931, 11269, 2780, + 9931, 11269, 2782, + 9931, 11269, 2784, + 9931, 11269, 2786, + 9931, 11269, 2906, + 9931, 11269, 2932, + 9931, 11269, 2942, + 9931, 11269, 3006, + 9931, 11269, 3068, + 9931, 11269, 3082, + 9931, 11269, 3102, + 9931, 11269, 3104, + 9931, 11269, 3106, + 9931, 11269, 3108, + 9931, 11269, 3836, + 9931, 11269, 3970, + 9931, 11269, 3972, + 9931, 11269, 3974, + 9931, 11269, 4176, + 9931, 11269, 4223, 5836, + 9931, 11269, 4230, + 9931, 11269, 4700, + 9931, 11269, 4796, + 9931, 11269, 4800, + 9931, 11269, 4802, + 9931, 11269, 4818, + 9931, 11269, 4856, + 9931, 11269, 4862, + 9931, 11269, 4864, + 9931, 11269, 4910, + 9931, 11269, 4912, + 9931, 11269, 4914, + 9931, 11269, 4918, + 9931, 11269, 5032, + 9931, 11269, 5036, + 9931, 11269, 5038, + 9931, 11269, 5040, + 9931, 11269, 5132, + 9931, 11269, 5134, + 9931, 11269, 5164, + 9931, 11269, 5170, + 9931, 11269, 5228, + 9931, 11269, 5230, + 9931, 11269, 5232, + 9931, 11269, 5290, + 9931, 11269, 5390, + 9931, 11269, 5460, + 9931, 11269, 5464, + 9931, 11269, 5466, + 9931, 11269, 5472, + 9931, 11269, 5518, + 9931, 11269, 5616, + 9931, 11269, 5622, + 9931, 11269, 5666, + 9931, 11269, 5694, + 9931, 11269, 5710, + 9931, 11269, 5732, + 9931, 11269, 5734, + 9931, 11269, 5736, + 9931, 11269, 5738, + 9931, 11269, 5858, + 9931, 11269, 5860, + 9931, 11269, 5862, + 9931, 11269, 5874, + 9931, 11269, 5906, + 9931, 11269, 5924, + 9931, 11269, 5930, + 9931, 11269, 5952, + 9931, 11269, 5954, + 9931, 11269, 5956, + 9931, 11269, 5958, + 9931, 11269, 5994, + 9931, 11269, 5996, + 9931, 11269, 5998, + 9931, 11269, 6000, + 9931, 11269, 6024, + 9931, 11269, 6026, + 9931, 11269, 6028, + 9931, 11269, 6160, + 9931, 11269, 6246, + 9931, 11269, 6248, + 9931, 11269, 6250, + 9931, 11269, 6789, 2725, 4389, 5550, + 9931, 11269, 6789, 4117, 5876, + 9931, 11269, 6789, 5444, + 9931, 11269, 6789, 5550, + 9931, 11269, 6789, 6378, + 9931, 11269, 6789, 6874, + 9931, 11269, 6789, 7443, 4389, 5550, + 9931, 11269, 6789, 7551, 11649, 8758, + 9931, 11269, 6789, 8005, 4389, 5550, + 9931, 11269, 6789, 8153, 6378, + 9931, 11269, 6789, 8153, 7551, 10677, 9744, + 9931, 11269, 6789, 8473, 1044, + 9931, 11269, 7226, + 9931, 11269, 7262, + 9931, 11269, 7264, + 9931, 11269, 7266, + 9931, 11269, 7558, + 9931, 11269, 7560, + 9931, 11269, 7562, + 9931, 11269, 7700, + 9931, 11269, 8461, 22, + 9931, 11269, 8461, 34, + 9931, 11269, 8497, 2680, + 9931, 11269, 8497, 2682, + 9931, 11269, 8497, 5924, + 9931, 11269, 8629, 512, + 9931, 11269, 8671, 24, + 9931, 11269, 8671, 236, + 9931, 11269, 8671, 238, + 9931, 11269, 8671, 242, + 9931, 11269, 8671, 246, + 9931, 11269, 8671, 296, + 9931, 11269, 8671, 300, + 9931, 11269, 8671, 562, + 9931, 11269, 8671, 656, + 9931, 11269, 8671, 2516, + 9931, 11269, 8671, 2518, + 9931, 11269, 8671, 2520, + 9931, 11269, 8671, 2522, + 9931, 11269, 8943, 44, + 9931, 11269, 8943, 440, + 9931, 11269, 8943, 914, + 9931, 11269, 8943, 1660, + 9931, 11269, 8943, 1802, + 9931, 11269, 8943, 1938, + 9931, 11269, 8943, 2084, + 9931, 11269, 8943, 2238, + 9931, 11269, 8943, 2554, + 9931, 11269, 8943, 2722, + 9931, 11269, 8943, 3082, + 9931, 11269, 8943, 5460, + 9931, 11269, 8987, 2, + 9931, 11269, 9067, 14, + 9931, 11269, 9067, 16, + 9931, 11269, 9067, 30, + 9931, 11269, 9067, 50, + 9931, 11269, 9067, 144, + 9931, 11269, 9067, 162, + 9931, 11269, 9067, 216, + 9931, 11269, 9067, 220, + 9931, 11269, 9067, 224, + 9931, 11269, 9067, 228, + 9931, 11269, 9067, 230, + 9931, 11269, 9067, 242, + 9931, 11269, 9067, 292, + 9931, 11269, 9067, 294, + 9931, 11269, 9067, 296, + 9931, 11269, 9067, 298, + 9931, 11269, 9067, 300, + 9931, 11269, 9067, 316, + 9931, 11269, 9067, 332, + 9931, 11269, 9067, 336, + 9931, 11269, 9067, 340, + 9931, 11269, 9067, 350, + 9931, 11269, 9067, 354, + 9931, 11269, 9067, 364, + 9931, 11269, 9067, 368, + 9931, 11269, 9067, 374, + 9931, 11269, 9067, 380, + 9931, 11269, 9067, 384, + 9931, 11269, 9067, 392, + 9931, 11269, 9067, 396, + 9931, 11269, 9067, 400, + 9931, 11269, 9067, 404, + 9931, 11269, 9067, 412, + 9931, 11269, 9067, 416, + 9931, 11269, 9067, 462, + 9931, 11269, 9067, 468, + 9931, 11269, 9067, 476, + 9931, 11269, 9067, 480, + 9931, 11269, 9067, 486, + 9931, 11269, 9067, 510, + 9931, 11269, 9067, 512, + 9931, 11269, 9067, 514, + 9931, 11269, 9067, 516, + 9931, 11269, 9067, 520, + 9931, 11269, 9067, 524, + 9931, 11269, 9067, 526, + 9931, 11269, 9067, 530, + 9931, 11269, 9067, 532, + 9931, 11269, 9067, 536, + 9931, 11269, 9067, 546, + 9931, 11269, 9067, 622, + 9931, 11269, 9067, 626, + 9931, 11269, 9067, 630, + 9931, 11269, 9067, 632, + 9931, 11269, 9067, 634, + 9931, 11269, 9067, 652, + 9931, 11269, 9067, 654, + 9931, 11269, 9067, 656, + 9931, 11269, 9067, 660, + 9931, 11269, 9067, 664, + 9931, 11269, 9067, 670, + 9931, 11269, 9067, 672, + 9931, 11269, 9067, 676, + 9931, 11269, 9067, 678, + 9931, 11269, 9067, 680, + 9931, 11269, 9067, 884, + 9931, 11269, 9067, 886, + 9931, 11269, 9067, 888, + 9931, 11269, 9067, 890, + 9931, 11269, 9067, 892, + 9931, 11269, 9067, 984, + 9931, 11269, 9067, 1024, + 9931, 11269, 9067, 1026, + 9931, 11269, 9067, 1028, + 9931, 11269, 9067, 1030, + 9931, 11269, 9067, 1032, + 9931, 11269, 9067, 1080, + 9931, 11269, 9067, 1082, + 9931, 11269, 9067, 1084, + 9931, 11269, 9067, 1086, + 9931, 11269, 9067, 1088, + 9931, 11269, 9067, 1238, + 9931, 11269, 9067, 1260, + 9931, 11269, 9067, 1262, + 9931, 11269, 9067, 1264, + 9931, 11269, 9067, 1266, + 9931, 11269, 9067, 1268, + 9931, 11269, 9067, 1356, + 9931, 11269, 9067, 1440, + 9931, 11269, 9067, 1442, + 9931, 11269, 9067, 1444, + 9931, 11269, 9067, 1446, + 9931, 11269, 9067, 1448, + 9931, 11269, 9067, 1506, + 9931, 11269, 9067, 1528, + 9931, 11269, 9067, 1530, + 9931, 11269, 9067, 1532, + 9931, 11269, 9067, 1534, + 9931, 11269, 9067, 1536, + 9931, 11269, 9067, 1612, + 9931, 11269, 9067, 1614, + 9931, 11269, 9067, 1616, + 9931, 11269, 9067, 1618, + 9931, 11269, 9067, 1620, + 9931, 11269, 9067, 1642, + 9931, 11269, 9067, 1644, + 9931, 11269, 9067, 1646, + 9931, 11269, 9067, 1648, + 9931, 11269, 9067, 1650, + 9931, 11269, 9067, 1758, + 9931, 11269, 9067, 1770, + 9931, 11269, 9067, 1772, + 9931, 11269, 9067, 1774, + 9931, 11269, 9067, 1776, + 9931, 11269, 9067, 1778, + 9931, 11269, 9067, 1890, + 9931, 11269, 9067, 2016, + 9931, 11269, 9067, 2204, + 9931, 11269, 9067, 2402, + 9931, 11269, 9067, 2504, + 9931, 11269, 9067, 2516, + 9931, 11269, 9067, 2518, + 9931, 11269, 9067, 2520, + 9931, 11269, 9067, 2522, + 9931, 11269, 9067, 2524, + 9931, 11269, 9067, 2678, + 9931, 11269, 9067, 2680, + 9931, 11269, 9067, 2682, + 9931, 11269, 9067, 2684, + 9931, 11269, 9067, 2686, + 9931, 11269, 9067, 2706, + 9931, 11269, 9067, 2708, + 9931, 11269, 9067, 2710, + 9931, 11269, 9067, 2712, + 9931, 11269, 9067, 2714, + 9931, 11269, 9067, 2732, + 9931, 11269, 9067, 2734, + 9931, 11269, 9067, 2736, + 9931, 11269, 9067, 2738, + 9931, 11269, 9067, 2740, + 9931, 11269, 9067, 2746, + 9931, 11269, 9067, 2748, + 9931, 11269, 9067, 2752, + 9931, 11269, 9067, 2754, + 9931, 11269, 9067, 2756, + 9931, 11269, 9067, 2922, + 9931, 11269, 9067, 3050, + 9931, 11269, 9067, 3138, + 9931, 11269, 9067, 3890, + 9931, 11269, 9067, 4098, + 9931, 11269, 9067, 4138, + 9931, 11269, 9067, 4318, + 9931, 11269, 9067, 4556, + 9931, 11269, 9067, 4644, + 9931, 11269, 9067, 4744, + 9931, 11269, 9067, 4766, + 9931, 11269, 9067, 4860, + 9931, 11269, 9067, 5678, + 9931, 11269, 9067, 5914, + 9931, 11269, 9067, 5950, + 9931, 11269, 9067, 5952, + 9931, 11269, 9067, 5954, + 9931, 11269, 9067, 5956, + 9931, 11269, 9067, 5958, + 9931, 11269, 9067, 5960, + 9931, 11269, 9067, 5976, + 9931, 11269, 9067, 5990, + 9931, 11269, 9067, 6002, + 9931, 11269, 9067, 6004, + 9931, 11269, 9067, 6006, + 9931, 11269, 9067, 6008, + 9931, 11269, 9067, 6010, + 9931, 11269, 9067, 7720, + 9931, 11269, 9067, 7748, + 9931, 11269, 9067, 9363, 50, + 9931, 11269, 9313, 5836, + 9931, 11269, 9489, 2480, + 9931, 11269, 9489, 2544, + 9931, 11269, 9489, 2906, + 9931, 11269, 9489, 2942, + 9931, 11269, 9489, 3970, + 9931, 11269, 9489, 4796, + 9931, 11269, 9489, 5032, + 9931, 11269, 9489, 5290, + 9931, 11269, 9489, 5644, + 9931, 11269, 9489, 5774, + 9931, 11269, 9489, 5784, + 9931, 11269, 9489, 5838, + 9931, 11269, 9489, 5858, + 9931, 11269, 9489, 6024, + 9931, 11269, 9489, 6246, + 9931, 11269, 9517, 14, + 9931, 11269, 9517, 236, + 9931, 11269, 9517, 238, + 9931, 11269, 9517, 242, + 9931, 11269, 9517, 246, + 9931, 11269, 9517, 1338, + 9931, 11269, 9517, 1382, + 9931, 11269, 9517, 1424, + 9931, 11269, 9519, 14, + 9931, 11269, 9777, 562, + 9931, 11269, 9777, 2678, + 9931, 11269, 9777, 2680, + 9931, 11269, 9777, 2682, + 9931, 11269, 9777, 2684, + 9931, 11269, 9777, 5906, + 9931, 11269, 9777, 5924, + 9931, 11269, 9777, 5930, + 9931, 11269, 10743, 0, + 9931, 11269, 10743, 8, + 9931, 11269, 10743, 16, + 9931, 11269, 10743, 28, + 9931, 11269, 10743, 36, + 9931, 11269, 10743, 306, + 9931, 11269, 10743, 310, + 9931, 11269, 10743, 314, + 9931, 11269, 10743, 322, + 9931, 11269, 10743, 392, + 9931, 11269, 10743, 396, + 9931, 11269, 10743, 404, + 9931, 11269, 10743, 412, + 9931, 11269, 10743, 622, + 9931, 11269, 10743, 626, + 9931, 11269, 10743, 630, + 9931, 11269, 10743, 632, + 9931, 11269, 11399, 22, + 9931, 11269, 11399, 24, + 9931, 11269, 11399, 30, + 9931, 11269, 11399, 34, + 9931, 11269, 11399, 48, + 9931, 11269, 11399, 332, + 9931, 11269, 11399, 336, + 9931, 11269, 11399, 350, + 9931, 11269, 11399, 510, + 9931, 11269, 11399, 512, + 9931, 11269, 11399, 514, + 9931, 11269, 11399, 516, + 9931, 11269, 11399, 622, + 9931, 11269, 11399, 626, + 9931, 11269, 11399, 630, + 9931, 11269, 11399, 632, + 9931, 11269, 11399, 936, + 9931, 11269, 11399, 938, + 9931, 11269, 11399, 940, + 9931, 11269, 11399, 942, + 9931, 11269, 11399, 1704, + 9931, 11269, 11399, 1706, + 9931, 11269, 11399, 1708, + 9931, 11269, 11399, 1710, + 9931, 11269, 11399, 1834, + 9931, 11269, 11399, 1836, + 9931, 11269, 11399, 1838, + 9931, 11269, 11399, 1840, + 9931, 11269, 11399, 1964, + 9931, 11269, 11399, 1966, + 9931, 11269, 11399, 1968, + 9931, 11269, 11399, 1970, + 9931, 11269, 11399, 2122, + 9931, 11269, 11399, 2124, + 9931, 11269, 11399, 2266, + 9931, 11269, 11399, 2268, + 9931, 11269, 11399, 2270, + 9931, 11269, 11399, 2272, + 9931, 11269, 11399, 2598, + 9931, 11269, 11399, 2600, + 9931, 11269, 11399, 2604, + 9931, 11269, 11399, 2606, + 9931, 11269, 11399, 2772, + 9931, 11269, 11399, 2774, + 9931, 11269, 11399, 2776, + 9931, 11269, 11399, 2778, + 9931, 11269, 11399, 2906, + 9931, 11269, 11399, 2932, + 9931, 11269, 11399, 2942, + 9931, 11269, 11399, 3102, + 9931, 11269, 11399, 3104, + 9931, 11269, 11399, 3106, + 9931, 11269, 11399, 3108, + 9931, 11269, 11399, 3970, + 9931, 11269, 11399, 3972, + 9931, 11269, 11399, 3974, + 9931, 11269, 11399, 4230, + 9931, 11269, 11399, 4796, + 9931, 11269, 11399, 4800, + 9931, 11269, 11399, 4802, + 9931, 11269, 11399, 4910, + 9931, 11269, 11399, 4912, + 9931, 11269, 11399, 4914, + 9931, 11269, 11399, 5032, + 9931, 11269, 11399, 5036, + 9931, 11269, 11399, 5038, + 9931, 11269, 11399, 5290, + 9931, 11269, 11399, 5460, + 9931, 11269, 11399, 5464, + 9931, 11269, 11399, 5466, + 9931, 11269, 11399, 5616, + 9931, 11269, 11399, 5732, + 9931, 11269, 11399, 5734, + 9931, 11269, 11399, 5736, + 9931, 11269, 11399, 5738, + 9931, 11269, 11399, 5858, + 9931, 11269, 11399, 5860, + 9931, 11269, 11399, 5862, + 9931, 11269, 11399, 6024, + 9931, 11269, 11399, 6026, + 9931, 11269, 11399, 6028, + 9931, 11269, 11399, 6246, + 9931, 11269, 11399, 6248, + 9931, 11269, 11399, 6250, + 9931, 11269, 11399, 7558, + 9931, 11269, 11399, 7560, + 9931, 11269, 11399, 7562, + 9931, 11269, 11399, 7700, + 9931, 11269, 11435, 24, + 9931, 11269, 11435, 36, + 9931, 11269, 11443, 48, + 9931, 11269, 11689, 534, + 9931, 11269, 11883, 562, + 9931, 11269, 11883, 2678, + 9931, 11269, 11883, 2680, + 9931, 11269, 11883, 2682, + 9931, 11269, 11883, 2684, + 9931, 11269, 12869, 1580, + 9931, 11269, 12869, 1600, + 9931, 11269, 12869, 1628, + 9931, 11269, 12869, 1656, + 9941, 8405, 0, + 9941, 8405, 8, + 9941, 8405, 16, + 9941, 8405, 28, + 9941, 8405, 36, + 9941, 8405, 40, + 9941, 8405, 42, + 9941, 8405, 138, + 9941, 8405, 142, + 9941, 8405, 144, + 9941, 8405, 150, + 9941, 8405, 152, + 9941, 8405, 154, + 9941, 8405, 216, + 9941, 8405, 220, + 9941, 8405, 224, + 9941, 8405, 228, + 9941, 8405, 230, + 9941, 8405, 232, + 9941, 8405, 236, + 9941, 8405, 238, + 9941, 8405, 242, + 9941, 8405, 246, + 9941, 8405, 250, + 9941, 8405, 252, + 9941, 8405, 306, + 9941, 8405, 332, + 9941, 8405, 336, + 9941, 8405, 340, + 9941, 8405, 350, + 9941, 8405, 354, + 9941, 8405, 356, + 9941, 8405, 364, + 9941, 8405, 368, + 9941, 8405, 374, + 9941, 8405, 380, + 9941, 8405, 384, + 9941, 8405, 392, + 9941, 8405, 396, + 9941, 8405, 404, + 9941, 8405, 412, + 9941, 8405, 416, + 9941, 8405, 418, + 9941, 8405, 524, + 9941, 8405, 526, + 9941, 8405, 532, + 9941, 8405, 536, + 9941, 8405, 546, + 9941, 8405, 548, + 9941, 8405, 556, + 9941, 8405, 560, + 9941, 8405, 564, + 9941, 8405, 622, + 9941, 8405, 626, + 9941, 8405, 630, + 9941, 8405, 632, + 9941, 8405, 634, + 9941, 8405, 636, + 9941, 8405, 652, + 9941, 8405, 654, + 9941, 8405, 656, + 9941, 8405, 660, + 9941, 8405, 664, + 9941, 8405, 666, + 9941, 8405, 1024, + 9941, 8405, 1412, + 9941, 8405, 1986, + 9941, 8405, 2328, + 9941, 8405, 2330, + 9941, 8405, 2332, + 9941, 8405, 2336, + 9941, 8405, 2344, + 9941, 8405, 2346, + 9941, 8405, 2706, + 9941, 8405, 2708, + 9941, 8405, 2710, + 9941, 8405, 2712, + 9941, 8405, 2714, + 9941, 8405, 2716, + 9941, 8405, 2732, + 9941, 8405, 2734, + 9941, 8405, 2736, + 9941, 8405, 2738, + 9941, 8405, 2740, + 9941, 8405, 2742, + 9959, 89, 8466, + 9959, 89, 8521, 10572, + 9959, 89, 8521, 10573, 445, 6741, 568, + 9959, 6121, 4895, 11649, 8758, + 9959, 6121, 9546, + 9959, 6121, 10677, 761, 91, 1109, 429, 11649, 8758, + 9961, 2429, 5895, 6689, 2170, + 9961, 2429, 5895, 6689, 2540, + 9961, 2429, 5895, 6689, 2778, + 9961, 2429, 5895, 6689, 4200, + 9961, 2429, 5895, 6689, 4214, + 9961, 2429, 5895, 6689, 5190, + 9961, 2429, 5895, 6689, 6722, + 9961, 2429, 5895, 6689, 7508, + 9961, 2429, 5895, 6689, 7694, + 9961, 2429, 6053, 6689, 2170, + 9961, 2429, 6053, 6689, 2540, + 9961, 2429, 6053, 6689, 2778, + 9961, 2429, 6053, 6689, 4200, + 9961, 2429, 6053, 6689, 4214, + 9961, 2429, 6053, 6689, 5190, + 9961, 2429, 6053, 6689, 6722, + 9961, 2429, 6053, 6689, 7508, + 9961, 2429, 6053, 6689, 7694, + 9969, 5758, + 9971, 5758, + 9977, 7593, 8405, 0, + 9977, 7593, 8405, 1, 6121, 6516, + 9977, 7593, 8405, 1, 6121, 10804, + 9977, 7593, 8405, 8, + 9977, 7593, 8405, 9, 6121, 10804, + 9977, 7593, 8405, 16, + 9977, 7593, 8405, 17, 6121, 6874, + 9977, 7593, 8405, 17, 6121, 8432, + 9977, 7593, 8405, 17, 6121, 10804, + 9977, 7593, 8405, 28, + 9977, 7593, 8405, 29, 6121, 10804, + 9977, 7593, 8405, 40, + 9977, 7593, 8405, 41, 6121, 8153, 6378, + 9977, 7593, 8405, 41, 6121, 8432, + 9977, 7593, 8405, 41, 6121, 10804, + 9977, 7593, 8405, 102, + 9977, 7593, 8405, 142, + 9977, 7593, 8405, 164, + 9977, 7593, 8405, 172, + 9977, 7593, 8405, 173, 6121, 4530, + 9977, 7593, 8405, 173, 6121, 5878, + 9977, 7593, 8405, 173, 6121, 8473, 4530, + 9977, 7593, 8405, 174, + 9977, 7593, 8405, 175, 6121, 5878, + 9977, 7593, 8405, 176, + 9977, 7593, 8405, 177, 6121, 4530, + 9977, 7593, 8405, 177, 6121, 5878, + 9977, 7593, 8405, 177, 6121, 8473, 4530, + 9977, 7593, 8405, 177, 6121, 10802, + 9977, 7593, 8405, 182, + 9977, 7593, 8405, 183, 6121, 5934, + 9977, 7593, 8405, 184, + 9977, 7593, 8405, 185, 6121, 10802, + 9977, 7593, 8405, 236, + 9977, 7593, 8405, 237, 6121, 4530, + 9977, 7593, 8405, 237, 6121, 8758, + 9977, 7593, 8405, 237, 6121, 10802, + 9977, 7593, 8405, 258, + 9977, 7593, 8405, 259, 6121, 6516, + 9977, 7593, 8405, 259, 6121, 6874, + 9977, 7593, 8405, 276, + 9977, 7593, 8405, 294, + 9977, 7593, 8405, 306, + 9977, 7593, 8405, 307, 6121, 4530, + 9977, 7593, 8405, 307, 6121, 8758, + 9977, 7593, 8405, 307, 6121, 10677, 8758, + 9977, 7593, 8405, 307, 6121, 10802, + 9977, 7593, 8405, 448, + 9977, 7593, 8405, 468, + 9977, 7593, 8405, 469, 6121, 8473, 4530, + 9977, 7593, 8405, 496, + 9977, 7593, 8405, 560, + 9977, 7593, 8405, 561, 6121, 8473, 4530, + 9977, 7593, 8405, 561, 6121, 10802, + 9977, 7593, 8405, 592, + 9977, 7593, 8405, 612, + 9977, 7593, 8405, 626, + 9977, 7593, 8405, 652, + 9977, 7593, 8405, 656, + 9977, 7593, 8405, 658, + 9977, 7593, 8405, 664, + 9977, 7593, 8405, 672, + 9977, 7593, 8405, 673, 6121, 10802, + 9977, 7593, 8405, 673, 6121, 10804, + 9977, 7593, 8405, 807, 3096, + 9977, 7593, 8405, 886, + 9977, 7593, 8405, 887, 6121, 10677, 8758, + 9977, 7593, 8405, 887, 6121, 10802, + 9977, 7593, 8405, 887, 6121, 10804, + 9977, 7593, 8405, 1022, + 9977, 7593, 8405, 1074, + 9977, 7593, 8405, 1082, + 9977, 7593, 8405, 1262, + 9977, 7593, 8405, 1263, 6121, 8473, 4530, + 9977, 7593, 8405, 1263, 6121, 8758, + 9977, 7593, 8405, 1263, 6121, 8759, 721, 4530, + 9977, 7593, 8405, 1263, 6121, 8896, + 9977, 7593, 8405, 1263, 6121, 10802, + 9977, 7593, 8405, 1284, + 9977, 7593, 8405, 1442, + 9977, 7593, 8405, 1640, + 9977, 7593, 8405, 1680, + 9977, 7593, 8405, 1770, + 9977, 7593, 8405, 1794, + 9977, 7593, 8405, 2064, + 9977, 7593, 8405, 2250, + 9977, 7593, 8405, 2410, + 9977, 7593, 8405, 2516, + 9977, 7593, 8405, 2734, + 9977, 7593, 8405, 2774, + 9977, 7593, 8405, 3012, + 9977, 7593, 8405, 3038, + 9977, 7593, 8405, 3148, + 9977, 7593, 8405, 3149, 6121, 6516, + 9977, 7593, 8405, 3149, 6121, 10802, + 9977, 7593, 8405, 3149, 6121, 10804, + 9977, 7593, 8405, 3862, + 9977, 7593, 8405, 4142, + 9977, 7593, 8405, 4146, + 9977, 7593, 8405, 4148, + 9977, 7593, 8405, 4198, + 9977, 7593, 8405, 4393, 5758, + 9977, 7593, 8405, 4614, + 9977, 7593, 8405, 4771, 142, + 9977, 7593, 8405, 4771, 1022, + 9977, 7593, 8405, 4771, 1794, + 9977, 7593, 8405, 4771, 2064, + 9977, 7593, 8405, 4771, 2542, + 9977, 7593, 8405, 4771, 2704, + 9977, 7593, 8405, 4771, 3172, + 9977, 7593, 8405, 4771, 4144, + 9977, 7593, 8405, 5690, + 9977, 7593, 8405, 5734, + 9977, 7593, 8405, 5781, 142, + 9977, 7593, 8405, 5781, 172, + 9977, 7593, 8405, 5781, 174, + 9977, 7593, 8405, 5781, 5758, + 9977, 7593, 8405, 5890, + 9977, 7593, 8405, 5980, + 9977, 7593, 8405, 5982, + 9977, 7593, 8405, 5986, + 9977, 7593, 8405, 6200, + 9977, 7593, 8405, 6201, 6121, 3697, 3058, + 9977, 7593, 8405, 6201, 6121, 10804, + 9977, 7593, 8405, 6302, + 9977, 7593, 8405, 6399, 306, + 9977, 7593, 8405, 6519, 7316, + 9977, 7593, 8405, 6696, + 9977, 7593, 8405, 6710, + 9977, 7593, 8405, 7062, + 9977, 7593, 8405, 7316, + 9977, 7593, 8405, 7317, 6121, 7716, + 9977, 7593, 8405, 7455, 7316, + 9977, 7593, 8405, 7494, + 9977, 7593, 8405, 7495, 6121, 10804, + 9977, 7593, 8405, 7522, + 9977, 7593, 8405, 7551, 16, + 9977, 7593, 8405, 7551, 17, 6121, 5878, + 9977, 7593, 8405, 7551, 40, + 9977, 7593, 8405, 7981, 28, + 9977, 7593, 8405, 7981, 29, 6121, 10804, + 9977, 7593, 8405, 8065, 8425, 3096, + 9977, 7593, 8405, 8153, 11125, 28, + 9977, 7593, 8405, 8425, 3096, + 9977, 7593, 8405, 8960, + 9977, 7593, 8405, 9029, 306, + 9977, 7593, 8405, 9049, 3096, + 9977, 7593, 8405, 9372, + 9977, 7593, 8405, 9373, 6121, 8153, 6875, 7908, + 9977, 7593, 8405, 9501, 3058, + 9977, 7593, 8405, 10269, 0, + 9977, 7593, 8405, 10269, 8, + 9977, 7593, 8405, 10269, 807, 3096, + 9977, 7593, 8405, 10269, 3038, + 9977, 7593, 8405, 10269, 8065, 8425, 3096, + 9977, 7593, 8405, 10269, 8425, 3096, + 9977, 7593, 8405, 10396, + 9977, 7593, 8405, 10489, 664, + 9977, 7593, 8405, 10489, 672, + 9977, 7593, 8405, 10489, 1082, + 9977, 7593, 8405, 10509, 5758, + 9977, 7593, 8405, 10545, 40, + 9977, 7593, 8405, 10545, 41, 6121, 8758, + 9977, 7593, 8405, 10697, 236, + 9977, 7593, 8405, 10697, 886, + 9977, 7593, 8405, 10697, 887, 6121, 10802, + 9977, 7593, 8405, 10697, 1082, + 9977, 7593, 8405, 10735, 28, + 9977, 7593, 8405, 11125, 28, + 9977, 7593, 8405, 11127, 592, + 9977, 7593, 8405, 11383, 258, + 9977, 7593, 8405, 11665, 886, + 9977, 7593, 8405, 13415, 16, + 9977, 7593, 10301, 1, 258, + 9977, 7593, 10301, 177, 1262, + 9977, 7593, 10301, 561, 2734, + 9977, 8342, + 9977, 8405, 7593, 9063, 172, + 9977, 8405, 10396, + 9977, 8405, 12087, 28, + 9977, 9063, 8405, 0, + 9977, 9063, 8405, 1, 6121, 6516, + 9977, 9063, 8405, 1, 6121, 10804, + 9977, 9063, 8405, 8, + 9977, 9063, 8405, 9, 6121, 10804, + 9977, 9063, 8405, 16, + 9977, 9063, 8405, 17, 6121, 6874, + 9977, 9063, 8405, 17, 6121, 8432, + 9977, 9063, 8405, 17, 6121, 10804, + 9977, 9063, 8405, 28, + 9977, 9063, 8405, 29, 6121, 10804, + 9977, 9063, 8405, 40, + 9977, 9063, 8405, 41, 6121, 8153, 6378, + 9977, 9063, 8405, 41, 6121, 8432, + 9977, 9063, 8405, 41, 6121, 10804, + 9977, 9063, 8405, 102, + 9977, 9063, 8405, 142, + 9977, 9063, 8405, 164, + 9977, 9063, 8405, 172, + 9977, 9063, 8405, 173, 6121, 4530, + 9977, 9063, 8405, 173, 6121, 5878, + 9977, 9063, 8405, 173, 6121, 8473, 4530, + 9977, 9063, 8405, 174, + 9977, 9063, 8405, 175, 6121, 5878, + 9977, 9063, 8405, 176, + 9977, 9063, 8405, 177, 6121, 4530, + 9977, 9063, 8405, 177, 6121, 5878, + 9977, 9063, 8405, 177, 6121, 8473, 4530, + 9977, 9063, 8405, 177, 6121, 10802, + 9977, 9063, 8405, 182, + 9977, 9063, 8405, 183, 6121, 5934, + 9977, 9063, 8405, 184, + 9977, 9063, 8405, 185, 6121, 10802, + 9977, 9063, 8405, 236, + 9977, 9063, 8405, 237, 6121, 4530, + 9977, 9063, 8405, 237, 6121, 8758, + 9977, 9063, 8405, 237, 6121, 10802, + 9977, 9063, 8405, 258, + 9977, 9063, 8405, 259, 6121, 6516, + 9977, 9063, 8405, 259, 6121, 6874, + 9977, 9063, 8405, 276, + 9977, 9063, 8405, 294, + 9977, 9063, 8405, 306, + 9977, 9063, 8405, 307, 6121, 4530, + 9977, 9063, 8405, 307, 6121, 8758, + 9977, 9063, 8405, 307, 6121, 10677, 8758, + 9977, 9063, 8405, 307, 6121, 10802, + 9977, 9063, 8405, 448, + 9977, 9063, 8405, 468, + 9977, 9063, 8405, 469, 6121, 8473, 4530, + 9977, 9063, 8405, 496, + 9977, 9063, 8405, 560, + 9977, 9063, 8405, 561, 6121, 8473, 4530, + 9977, 9063, 8405, 561, 6121, 10802, + 9977, 9063, 8405, 592, + 9977, 9063, 8405, 612, + 9977, 9063, 8405, 626, + 9977, 9063, 8405, 652, + 9977, 9063, 8405, 656, + 9977, 9063, 8405, 658, + 9977, 9063, 8405, 664, + 9977, 9063, 8405, 672, + 9977, 9063, 8405, 673, 6121, 10802, + 9977, 9063, 8405, 673, 6121, 10804, + 9977, 9063, 8405, 807, 3096, + 9977, 9063, 8405, 886, + 9977, 9063, 8405, 887, 6121, 10677, 8758, + 9977, 9063, 8405, 887, 6121, 10802, + 9977, 9063, 8405, 887, 6121, 10804, + 9977, 9063, 8405, 1022, + 9977, 9063, 8405, 1074, + 9977, 9063, 8405, 1082, + 9977, 9063, 8405, 1262, + 9977, 9063, 8405, 1263, 6121, 8473, 4530, + 9977, 9063, 8405, 1263, 6121, 8758, + 9977, 9063, 8405, 1263, 6121, 8759, 721, 4530, + 9977, 9063, 8405, 1263, 6121, 8896, + 9977, 9063, 8405, 1263, 6121, 10802, + 9977, 9063, 8405, 1284, + 9977, 9063, 8405, 1442, + 9977, 9063, 8405, 1640, + 9977, 9063, 8405, 1680, + 9977, 9063, 8405, 1770, + 9977, 9063, 8405, 1794, + 9977, 9063, 8405, 2064, + 9977, 9063, 8405, 2250, + 9977, 9063, 8405, 2410, + 9977, 9063, 8405, 2516, + 9977, 9063, 8405, 2734, + 9977, 9063, 8405, 2774, + 9977, 9063, 8405, 3012, + 9977, 9063, 8405, 3038, + 9977, 9063, 8405, 3148, + 9977, 9063, 8405, 3149, 6121, 6516, + 9977, 9063, 8405, 3149, 6121, 10802, + 9977, 9063, 8405, 3149, 6121, 10804, + 9977, 9063, 8405, 3862, + 9977, 9063, 8405, 4142, + 9977, 9063, 8405, 4146, + 9977, 9063, 8405, 4148, + 9977, 9063, 8405, 4198, + 9977, 9063, 8405, 4393, 5758, + 9977, 9063, 8405, 4614, + 9977, 9063, 8405, 4771, 142, + 9977, 9063, 8405, 4771, 1022, + 9977, 9063, 8405, 4771, 1794, + 9977, 9063, 8405, 4771, 2064, + 9977, 9063, 8405, 4771, 2542, + 9977, 9063, 8405, 4771, 2704, + 9977, 9063, 8405, 4771, 3172, + 9977, 9063, 8405, 4771, 4144, + 9977, 9063, 8405, 5690, + 9977, 9063, 8405, 5734, + 9977, 9063, 8405, 5781, 142, + 9977, 9063, 8405, 5781, 172, + 9977, 9063, 8405, 5781, 174, + 9977, 9063, 8405, 5781, 5758, + 9977, 9063, 8405, 5890, + 9977, 9063, 8405, 5980, + 9977, 9063, 8405, 5982, + 9977, 9063, 8405, 5986, + 9977, 9063, 8405, 6200, + 9977, 9063, 8405, 6201, 6121, 3697, 3058, + 9977, 9063, 8405, 6201, 6121, 10804, + 9977, 9063, 8405, 6302, + 9977, 9063, 8405, 6399, 306, + 9977, 9063, 8405, 6519, 7316, + 9977, 9063, 8405, 6696, + 9977, 9063, 8405, 6710, + 9977, 9063, 8405, 7062, + 9977, 9063, 8405, 7316, + 9977, 9063, 8405, 7317, 6121, 7716, + 9977, 9063, 8405, 7455, 7316, + 9977, 9063, 8405, 7494, + 9977, 9063, 8405, 7495, 6121, 10804, + 9977, 9063, 8405, 7522, + 9977, 9063, 8405, 7551, 16, + 9977, 9063, 8405, 7551, 17, 6121, 5878, + 9977, 9063, 8405, 7551, 40, + 9977, 9063, 8405, 7981, 28, + 9977, 9063, 8405, 7981, 29, 6121, 10804, + 9977, 9063, 8405, 8065, 8425, 3096, + 9977, 9063, 8405, 8153, 11125, 28, + 9977, 9063, 8405, 8425, 3096, + 9977, 9063, 8405, 8960, + 9977, 9063, 8405, 9029, 306, + 9977, 9063, 8405, 9049, 3096, + 9977, 9063, 8405, 9372, + 9977, 9063, 8405, 9373, 6121, 8153, 6875, 7908, + 9977, 9063, 8405, 9501, 3058, + 9977, 9063, 8405, 10269, 0, + 9977, 9063, 8405, 10269, 8, + 9977, 9063, 8405, 10269, 807, 3096, + 9977, 9063, 8405, 10269, 3038, + 9977, 9063, 8405, 10269, 8065, 8425, 3096, + 9977, 9063, 8405, 10269, 8425, 3096, + 9977, 9063, 8405, 10489, 664, + 9977, 9063, 8405, 10489, 672, + 9977, 9063, 8405, 10489, 1082, + 9977, 9063, 8405, 10509, 5758, + 9977, 9063, 8405, 10545, 40, + 9977, 9063, 8405, 10545, 41, 6121, 8758, + 9977, 9063, 8405, 10697, 236, + 9977, 9063, 8405, 10697, 886, + 9977, 9063, 8405, 10697, 887, 6121, 10802, + 9977, 9063, 8405, 10697, 1082, + 9977, 9063, 8405, 10735, 28, + 9977, 9063, 8405, 11125, 28, + 9977, 9063, 8405, 11127, 592, + 9977, 9063, 8405, 11383, 258, + 9977, 9063, 8405, 11665, 886, + 9977, 9063, 8405, 13415, 16, + 9977, 9063, 10301, 1, 258, + 9977, 9063, 10301, 177, 1262, + 9977, 9063, 10301, 561, 2734, + 9977, 9578, + 9977, 11363, 5758, + 10003, 5758, + 10017, 5758, + 10017, 7580, + 10017, 7710, + 10141, 7383, 11765, 6434, + 10153, 6434, + 10157, 8774, + 10162, + 10171, 4223, 5836, + 10171, 6610, + 10171, 6616, + 10171, 6689, 2170, + 10171, 6689, 2540, + 10171, 6689, 2778, + 10171, 6689, 4200, + 10171, 6689, 4214, + 10171, 6689, 5190, + 10171, 6689, 6722, + 10171, 6689, 7508, + 10171, 6689, 7694, + 10171, 7723, 4927, 4790, + 10171, 7723, 4927, 6676, + 10171, 7723, 4927, 6686, + 10171, 7723, 4927, 6910, + 10171, 7723, 4927, 7038, + 10171, 7723, 4927, 7551, 8646, + 10171, 7723, 4927, 7860, + 10171, 7723, 4927, 8046, + 10171, 7723, 4927, 8646, + 10171, 7723, 4927, 11934, + 10171, 8525, 2670, + 10171, 8525, 2671, 10624, + 10171, 8525, 6784, + 10171, 8525, 6804, + 10171, 8525, 7576, + 10171, 8525, 8160, + 10171, 8525, 8514, + 10171, 8525, 8820, + 10171, 8525, 8876, + 10171, 8525, 9344, + 10171, 8525, 9672, + 10171, 9607, 6610, + 10171, 9665, 4926, + 10171, 10469, 4926, + 10171, 10585, 100, + 10171, 10585, 102, + 10171, 10585, 106, + 10171, 10585, 108, + 10171, 10585, 112, + 10171, 10585, 116, + 10171, 10585, 122, + 10171, 10585, 126, + 10171, 10585, 130, + 10171, 10585, 132, + 10171, 10585, 138, + 10171, 10585, 142, + 10171, 10585, 144, + 10171, 10585, 150, + 10171, 10585, 152, + 10171, 10585, 196, + 10171, 10585, 198, + 10171, 10585, 202, + 10171, 10585, 208, + 10171, 10585, 210, + 10171, 10585, 216, + 10171, 10585, 220, + 10171, 10585, 224, + 10171, 10585, 228, + 10171, 10585, 230, + 10171, 10585, 236, + 10171, 10585, 238, + 10171, 10585, 242, + 10171, 10585, 246, + 10171, 10585, 250, + 10171, 10585, 292, + 10171, 10585, 294, + 10171, 10585, 296, + 10171, 10585, 298, + 10171, 10585, 300, + 10171, 10585, 306, + 10171, 10585, 310, + 10171, 10585, 314, + 10171, 10585, 322, + 10171, 10585, 326, + 10171, 10585, 332, + 10171, 10585, 336, + 10171, 10585, 340, + 10171, 10585, 350, + 10171, 10585, 354, + 10171, 10585, 364, + 10171, 10585, 368, + 10171, 10585, 374, + 10171, 10585, 380, + 10171, 10585, 384, + 10171, 10585, 392, + 10171, 10585, 396, + 10171, 10585, 404, + 10171, 10585, 412, + 10171, 10585, 416, + 10171, 10585, 462, + 10171, 10585, 468, + 10171, 10585, 476, + 10171, 10585, 480, + 10171, 10585, 486, + 10171, 10585, 496, + 10171, 10585, 498, + 10171, 10585, 500, + 10171, 10585, 502, + 10171, 10585, 506, + 10171, 10585, 510, + 10171, 10585, 512, + 10171, 10585, 514, + 10171, 10585, 516, + 10171, 10585, 520, + 10171, 10585, 524, + 10171, 10585, 526, + 10171, 10585, 532, + 10171, 10585, 536, + 10171, 10585, 546, + 10171, 10585, 556, + 10171, 10585, 560, + 10171, 10585, 564, + 10171, 10585, 568, + 10171, 10585, 576, + 10171, 10585, 610, + 10171, 10585, 612, + 10171, 10585, 614, + 10171, 10585, 616, + 10171, 10585, 618, + 10171, 10585, 622, + 10171, 10585, 626, + 10171, 10585, 630, + 10171, 10585, 632, + 10171, 10585, 634, + 10171, 10585, 638, + 10171, 10585, 640, + 10171, 10585, 644, + 10171, 10585, 646, + 10171, 10585, 648, + 10171, 10585, 652, + 10171, 10585, 654, + 10171, 10585, 656, + 10171, 10585, 660, + 10171, 10585, 664, + 10171, 10585, 670, + 10171, 10585, 672, + 10171, 10585, 676, + 10171, 10585, 678, + 10171, 10585, 680, + 10171, 10585, 748, + 10171, 10585, 778, + 10171, 10585, 816, + 10171, 10585, 838, + 10171, 10585, 840, + 10171, 10585, 842, + 10171, 10585, 854, + 10171, 10585, 866, + 10171, 10585, 868, + 10171, 10585, 870, + 10171, 10585, 872, + 10171, 10585, 874, + 10171, 10585, 876, + 10171, 10585, 884, + 10171, 10585, 886, + 10171, 10585, 888, + 10171, 10585, 890, + 10171, 10585, 892, + 10171, 10585, 910, + 10171, 10585, 936, + 10171, 10585, 954, + 10171, 10585, 974, + 10171, 10585, 976, + 10171, 10585, 978, + 10171, 10585, 980, + 10171, 10585, 982, + 10171, 10585, 984, + 10171, 10585, 1034, + 10171, 10585, 1072, + 10171, 10585, 1140, + 10171, 10585, 1150, + 10171, 10585, 1188, + 10171, 10585, 1190, + 10171, 10585, 1192, + 10171, 10585, 1194, + 10171, 10585, 1204, + 10171, 10585, 1238, + 10171, 10585, 1250, + 10171, 10585, 1252, + 10171, 10585, 1254, + 10171, 10585, 1256, + 10171, 10585, 1258, + 10171, 10585, 1288, + 10171, 10585, 1322, + 10171, 10585, 1324, + 10171, 10585, 1326, + 10171, 10585, 1328, + 10171, 10585, 1330, + 10171, 10585, 1332, + 10171, 10585, 1334, + 10171, 10585, 1336, + 10171, 10585, 1338, + 10171, 10585, 1356, + 10171, 10585, 1370, + 10171, 10585, 1372, + 10171, 10585, 1374, + 10171, 10585, 1376, + 10171, 10585, 1378, + 10171, 10585, 1418, + 10171, 10585, 1502, + 10171, 10585, 1506, + 10171, 10585, 1540, + 10171, 10585, 1562, + 10171, 10585, 1574, + 10171, 10585, 1598, + 10171, 10585, 1654, + 10171, 10585, 1704, + 10171, 10585, 1706, + 10171, 10585, 1708, + 10171, 10585, 1712, + 10171, 10585, 1714, + 10171, 10585, 1716, + 10171, 10585, 1718, + 10171, 10585, 1720, + 10171, 10585, 1722, + 10171, 10585, 1724, + 10171, 10585, 1726, + 10171, 10585, 1728, + 10171, 10585, 1730, + 10171, 10585, 1732, + 10171, 10585, 1758, + 10171, 10585, 1798, + 10171, 10585, 1834, + 10171, 10585, 1854, + 10171, 10585, 1890, + 10171, 10585, 1932, + 10171, 10585, 1964, + 10171, 10585, 1966, + 10171, 10585, 1968, + 10171, 10585, 1972, + 10171, 10585, 1982, + 10171, 10585, 2016, + 10171, 10585, 2082, + 10171, 10585, 2122, + 10171, 10585, 2126, + 10171, 10585, 2130, + 10171, 10585, 2132, + 10171, 10585, 2134, + 10171, 10585, 2136, + 10171, 10585, 2188, + 10171, 10585, 2204, + 10171, 10585, 2212, + 10171, 10585, 2214, + 10171, 10585, 2216, + 10171, 10585, 2218, + 10171, 10585, 2220, + 10171, 10585, 2236, + 10171, 10585, 2266, + 10171, 10585, 2268, + 10171, 10585, 2270, + 10171, 10585, 2282, + 10171, 10585, 2294, + 10171, 10585, 2296, + 10171, 10585, 2298, + 10171, 10585, 2300, + 10171, 10585, 2302, + 10171, 10585, 2304, + 10171, 10585, 2316, + 10171, 10585, 2350, + 10171, 10585, 2352, + 10171, 10585, 2354, + 10171, 10585, 2356, + 10171, 10585, 2358, + 10171, 10585, 2360, + 10171, 10585, 2362, + 10171, 10585, 2370, + 10171, 10585, 2378, + 10171, 10585, 2402, + 10171, 10585, 2424, + 10171, 10585, 2466, + 10171, 10585, 2468, + 10171, 10585, 2482, + 10171, 10585, 2504, + 10171, 10585, 2516, + 10171, 10585, 2518, + 10171, 10585, 2520, + 10171, 10585, 2522, + 10171, 10585, 2524, + 10171, 10585, 2548, + 10171, 10585, 2566, + 10171, 10585, 2568, + 10171, 10585, 2570, + 10171, 10585, 2572, + 10171, 10585, 2574, + 10171, 10585, 2598, + 10171, 10585, 2620, + 10171, 10585, 2622, + 10171, 10585, 2624, + 10171, 10585, 2626, + 10171, 10585, 2628, + 10171, 10585, 2634, + 10171, 10585, 2666, + 10171, 10585, 2678, + 10171, 10585, 2680, + 10171, 10585, 2682, + 10171, 10585, 2684, + 10171, 10585, 2686, + 10171, 10585, 2718, + 10171, 10585, 2732, + 10171, 10585, 2734, + 10171, 10585, 2736, + 10171, 10585, 2738, + 10171, 10585, 2740, + 10171, 10585, 2772, + 10171, 10585, 2790, + 10171, 10585, 2792, + 10171, 10585, 2794, + 10171, 10585, 2796, + 10171, 10585, 2798, + 10171, 10585, 2844, + 10171, 10585, 2856, + 10171, 10585, 2896, + 10171, 10585, 2906, + 10171, 10585, 2922, + 10171, 10585, 2936, + 10171, 10585, 2952, + 10171, 10585, 2956, + 10171, 10585, 2968, + 10171, 10585, 2982, + 10171, 10585, 2984, + 10171, 10585, 2986, + 10171, 10585, 2988, + 10171, 10585, 2990, + 10171, 10585, 2992, + 10171, 10585, 2994, + 10171, 10585, 3002, + 10171, 10585, 3006, + 10171, 10585, 3050, + 10171, 10585, 3078, + 10171, 10585, 3120, + 10171, 10585, 3138, + 10171, 10585, 3146, + 10171, 10585, 3148, + 10171, 10585, 3150, + 10171, 10585, 3152, + 10171, 10585, 3154, + 10171, 10585, 3176, + 10171, 10585, 3202, + 10171, 10585, 3212, + 10171, 10585, 3214, + 10171, 10585, 3216, + 10171, 10585, 3218, + 10171, 10585, 3220, + 10171, 10585, 3826, + 10171, 10585, 3856, + 10171, 10585, 3858, + 10171, 10585, 3860, + 10171, 10585, 3862, + 10171, 10585, 3864, + 10171, 10585, 3866, + 10171, 10585, 3868, + 10171, 10585, 3874, + 10171, 10585, 3890, + 10171, 10585, 3906, + 10171, 10585, 3924, + 10171, 10585, 3998, + 10171, 10585, 4010, + 10171, 10585, 4028, + 10171, 10585, 4046, + 10171, 10585, 4232, + 10171, 10585, 4270, + 10171, 10585, 4278, + 10171, 10585, 4308, + 10171, 10585, 4310, + 10171, 10585, 4312, + 10171, 10585, 4370, + 10171, 10585, 4372, + 10171, 10585, 4374, + 10171, 10585, 4378, + 10171, 10585, 4412, + 10171, 10585, 4414, + 10171, 10585, 4416, + 10171, 10585, 4796, + 10171, 10585, 4798, + 10171, 10585, 4804, + 10171, 10585, 4806, + 10171, 10585, 4808, + 10171, 10585, 4810, + 10171, 10585, 4812, + 10171, 10585, 4814, + 10171, 10585, 4816, + 10171, 10585, 5034, + 10171, 10585, 5292, + 10171, 10585, 5296, + 10171, 10585, 5314, + 10171, 10585, 5332, + 10171, 10585, 5410, + 10171, 10585, 5416, + 10171, 10585, 5418, + 10171, 10585, 5422, + 10171, 10585, 5462, + 10171, 10585, 5478, + 10171, 10585, 5480, + 10171, 10585, 5482, + 10171, 10585, 5484, + 10171, 10585, 5486, + 10171, 10585, 5508, + 10171, 10585, 5510, + 10171, 10585, 5512, + 10171, 10585, 5514, + 10171, 10585, 5666, + 10171, 10585, 5678, + 10171, 10585, 5704, + 10171, 10585, 5732, + 10171, 10585, 5786, + 10171, 10585, 5794, + 10171, 10585, 5866, + 10171, 10585, 5868, + 10171, 10585, 5870, + 10171, 10585, 5906, + 10171, 10585, 5914, + 10171, 10585, 5928, + 10171, 10585, 5932, + 10171, 10585, 5974, + 10171, 10585, 5976, + 10171, 10585, 5984, + 10171, 10585, 6032, + 10171, 10585, 6034, + 10171, 10585, 6038, + 10171, 10585, 6148, + 10171, 10585, 6150, + 10171, 10585, 6152, + 10171, 10585, 6154, + 10171, 10585, 6264, + 10171, 10585, 6274, + 10171, 10585, 6300, + 10171, 10585, 6328, + 10171, 10585, 6336, + 10171, 10585, 6550, + 10171, 10585, 6552, + 10171, 10585, 6846, + 10171, 10585, 6848, + 10171, 10585, 7066, + 10171, 10585, 7068, + 10171, 10585, 7406, + 10171, 10585, 7408, + 10171, 10585, 9313, 0, + 10171, 10585, 9313, 8, + 10171, 10585, 9313, 16, + 10171, 10585, 9313, 28, + 10171, 10585, 9313, 40, + 10171, 10585, 9313, 58, + 10171, 10585, 9313, 162, + 10171, 10585, 9313, 422, + 10171, 10585, 9313, 622, + 10171, 10585, 11223, 838, + 10171, 10585, 11223, 1188, + 10171, 10585, 11223, 1964, + 10171, 10585, 11223, 2266, + 10171, 10585, 11723, 0, + 10171, 10585, 11723, 8, + 10171, 10585, 11723, 16, + 10171, 10585, 11723, 28, + 10171, 10585, 11723, 40, + 10171, 10585, 11723, 58, + 10171, 10585, 11723, 162, + 10171, 10767, 11639, 4926, + 10171, 11163, 11228, + 10171, 11224, + 10171, 11400, + 10173, 12403, 6689, 2170, + 10173, 12403, 6689, 2540, + 10173, 12403, 6689, 2778, + 10173, 12403, 6689, 4200, + 10173, 12403, 6689, 4214, + 10173, 12403, 6689, 5190, + 10173, 12403, 6689, 6260, + 10173, 12403, 6689, 6722, + 10173, 12403, 6689, 7508, + 10173, 12403, 6689, 7694, + 10179, 9539, 11054, + 10192, + 10203, 7580, + 10203, 11143, 2170, + 10213, 11894, + 10221, 7593, 8405, 80, + 10221, 7593, 8405, 176, + 10221, 7593, 8405, 238, + 10221, 7593, 8405, 274, + 10221, 7593, 8405, 438, + 10221, 7593, 8405, 596, + 10221, 7593, 8405, 626, + 10221, 7593, 8405, 756, + 10221, 7593, 8405, 858, + 10221, 7593, 8405, 900, + 10221, 7593, 8405, 1038, + 10221, 7593, 8405, 1216, + 10221, 7593, 8405, 1340, + 10221, 7593, 8405, 1350, + 10221, 7593, 8405, 1380, + 10221, 7593, 8405, 1420, + 10221, 7593, 8405, 1520, + 10221, 7593, 8405, 1588, + 10221, 7593, 8405, 1744, + 10221, 7593, 8405, 1860, + 10221, 7593, 8405, 1992, + 10221, 7593, 8405, 2196, + 10221, 7593, 8405, 2290, + 10221, 7593, 8405, 2384, + 10221, 7593, 8405, 2490, + 10221, 7593, 8405, 2648, + 10221, 7593, 8405, 2654, + 10221, 7593, 8405, 2868, + 10221, 7593, 8405, 2954, + 10221, 7593, 8405, 3140, + 10221, 7593, 8405, 3884, + 10221, 7593, 8405, 3904, + 10221, 7593, 8405, 4316, + 10221, 7593, 8405, 4634, + 10221, 7593, 8405, 4742, + 10221, 7593, 8405, 5414, + 10221, 7593, 8405, 5698, + 10221, 7593, 8405, 6268, + 10221, 8405, 80, + 10221, 8405, 176, + 10221, 8405, 202, + 10221, 8405, 238, + 10221, 8405, 274, + 10221, 8405, 438, + 10221, 8405, 596, + 10221, 8405, 626, + 10221, 8405, 658, + 10221, 8405, 710, + 10221, 8405, 756, + 10221, 8405, 858, + 10221, 8405, 900, + 10221, 8405, 1038, + 10221, 8405, 1216, + 10221, 8405, 1340, + 10221, 8405, 1350, + 10221, 8405, 1380, + 10221, 8405, 1420, + 10221, 8405, 1520, + 10221, 8405, 1588, + 10221, 8405, 1744, + 10221, 8405, 1860, + 10221, 8405, 1992, + 10221, 8405, 2196, + 10221, 8405, 2290, + 10221, 8405, 2384, + 10221, 8405, 2490, + 10221, 8405, 2648, + 10221, 8405, 2654, + 10221, 8405, 2868, + 10221, 8405, 2954, + 10221, 8405, 3140, + 10221, 8405, 3884, + 10221, 8405, 3904, + 10221, 8405, 4316, + 10221, 8405, 4634, + 10221, 8405, 4742, + 10221, 8405, 5414, + 10221, 8405, 5698, + 10221, 8405, 6268, + 10221, 8405, 6728, + 10221, 8405, 8869, 1216, + 10221, 9063, 8405, 80, + 10221, 9063, 8405, 176, + 10221, 9063, 8405, 238, + 10221, 9063, 8405, 274, + 10221, 9063, 8405, 438, + 10221, 9063, 8405, 596, + 10221, 9063, 8405, 626, + 10221, 9063, 8405, 756, + 10221, 9063, 8405, 858, + 10221, 9063, 8405, 900, + 10221, 9063, 8405, 1038, + 10221, 9063, 8405, 1216, + 10221, 9063, 8405, 1340, + 10221, 9063, 8405, 1350, + 10221, 9063, 8405, 1380, + 10221, 9063, 8405, 1420, + 10221, 9063, 8405, 1520, + 10221, 9063, 8405, 1588, + 10221, 9063, 8405, 1744, + 10221, 9063, 8405, 1860, + 10221, 9063, 8405, 1992, + 10221, 9063, 8405, 2196, + 10221, 9063, 8405, 2290, + 10221, 9063, 8405, 2384, + 10221, 9063, 8405, 2490, + 10221, 9063, 8405, 2648, + 10221, 9063, 8405, 2654, + 10221, 9063, 8405, 2868, + 10221, 9063, 8405, 2954, + 10221, 9063, 8405, 3140, + 10221, 9063, 8405, 3884, + 10221, 9063, 8405, 3904, + 10221, 9063, 8405, 4316, + 10221, 9063, 8405, 4634, + 10221, 9063, 8405, 4742, + 10221, 9063, 8405, 5414, + 10221, 9063, 8405, 5698, + 10221, 9063, 8405, 6268, + 10221, 11163, 11228, + 10225, 436, + 10225, 5759, 7282, + 10225, 5759, 8916, + 10225, 5759, 9824, + 10225, 5759, 9870, + 10225, 5759, 9904, + 10225, 5759, 11900, + 10225, 6689, 2170, + 10225, 6689, 2540, + 10225, 6689, 2778, + 10225, 6689, 4200, + 10225, 6689, 4214, + 10225, 6689, 5190, + 10225, 6689, 6260, + 10225, 6689, 6722, + 10225, 6689, 7508, + 10225, 6689, 7694, + 10225, 7469, 5758, + 10225, 7803, 5759, 8, + 10225, 7803, 5759, 16, + 10225, 7803, 5759, 28, + 10225, 7803, 5759, 40, + 10225, 7803, 5759, 58, + 10225, 7803, 5759, 72, + 10225, 7803, 5759, 92, + 10225, 7803, 5759, 266, + 10225, 7803, 5759, 606, + 10225, 7803, 5759, 8031, 8, + 10225, 7803, 5759, 8031, 28, + 10225, 7803, 5759, 9827, 22, + 10225, 7803, 5759, 9827, 34, + 10225, 7803, 5759, 9827, 344, + 10225, 7803, 5759, 9827, 518, + 10225, 7803, 8031, 8, + 10225, 7803, 8031, 28, + 10225, 8405, 0, + 10225, 8405, 8, + 10225, 8405, 16, + 10225, 8405, 28, + 10225, 8405, 40, + 10225, 8405, 58, + 10225, 8405, 72, + 10225, 8405, 92, + 10225, 8405, 100, + 10225, 8405, 116, + 10225, 8405, 138, + 10225, 8405, 216, + 10225, 8405, 236, + 10225, 8405, 266, + 10225, 8405, 292, + 10225, 8405, 306, + 10225, 8405, 332, + 10225, 8405, 364, + 10225, 8405, 392, + 10225, 8405, 462, + 10225, 8405, 510, + 10225, 8405, 524, + 10225, 8405, 556, + 10225, 8405, 606, + 10225, 8405, 610, + 10225, 8405, 652, + 10225, 8405, 792, + 10225, 8405, 884, + 10225, 8405, 974, + 10225, 8405, 996, + 10225, 8405, 1260, + 10225, 8405, 1512, + 10225, 8405, 1612, + 10225, 8405, 1796, + 10225, 8405, 2030, + 10225, 8405, 2076, + 10225, 8405, 2126, + 10225, 8405, 2212, + 10225, 8405, 2516, + 10225, 8405, 2566, + 10225, 8405, 2678, + 10225, 8405, 2746, + 10225, 8405, 4016, + 10225, 8405, 5994, + 10225, 8405, 9827, 22, + 10225, 8405, 9827, 34, + 10225, 8405, 9827, 344, + 10225, 8405, 9827, 518, + 10227, 171, 7318, + 10227, 1496, + 10227, 2826, + 10227, 5759, 3227, 6498, + 10227, 5759, 6498, + 10227, 5759, 7282, + 10227, 5759, 7758, + 10227, 5759, 8916, + 10227, 5759, 8944, + 10227, 5759, 9824, + 10227, 6380, + 10227, 6689, 2170, + 10227, 6689, 2540, + 10227, 6689, 2778, + 10227, 6689, 4200, + 10227, 6689, 4214, + 10227, 6689, 5190, + 10227, 6689, 6260, + 10227, 6689, 6722, + 10227, 6689, 7508, + 10227, 6689, 7694, + 10227, 7714, + 10227, 7803, 5759, 16, + 10227, 7803, 5759, 40, + 10227, 7803, 5759, 58, + 10227, 7803, 5759, 72, + 10227, 7803, 5759, 92, + 10227, 7803, 5759, 162, + 10227, 7803, 5759, 266, + 10227, 7803, 5759, 440, + 10227, 7803, 5759, 606, + 10227, 8405, 0, + 10227, 8405, 16, + 10227, 8405, 40, + 10227, 8405, 58, + 10227, 8405, 72, + 10227, 8405, 92, + 10227, 8405, 100, + 10227, 8405, 116, + 10227, 8405, 138, + 10227, 8405, 162, + 10227, 8405, 196, + 10227, 8405, 216, + 10227, 8405, 236, + 10227, 8405, 266, + 10227, 8405, 292, + 10227, 8405, 306, + 10227, 8405, 332, + 10227, 8405, 364, + 10227, 8405, 392, + 10227, 8405, 440, + 10227, 8405, 462, + 10227, 8405, 510, + 10227, 8405, 524, + 10227, 8405, 556, + 10227, 8405, 606, + 10227, 8405, 610, + 10227, 8405, 652, + 10227, 8405, 670, + 10227, 8405, 792, + 10227, 8405, 884, + 10227, 8405, 974, + 10227, 8405, 996, + 10227, 8405, 1260, + 10227, 8405, 1512, + 10227, 8405, 1612, + 10227, 8405, 1796, + 10227, 8405, 2030, + 10227, 8405, 2076, + 10227, 8405, 2126, + 10227, 8405, 2212, + 10227, 8405, 2438, + 10227, 8405, 2516, + 10227, 8405, 2678, + 10227, 8405, 2746, + 10227, 8405, 4016, + 10227, 8405, 4320, + 10227, 8405, 4748, + 10227, 8405, 5994, + 10231, 9513, 2170, + 10231, 9513, 2540, + 10231, 9513, 2670, + 10231, 9513, 2778, + 10231, 9513, 4200, + 10231, 9513, 4214, + 10231, 9513, 5190, + 10231, 9513, 6722, + 10231, 9513, 7508, + 10231, 9513, 7694, + 10231, 9513, 8820, + 10231, 9513, 8876, + 10241, 1177, 2681, 3276, + 10241, 1177, 2681, 6110, + 10241, 1177, 2681, 8192, + 10241, 1177, 2681, 8251, 6116, + 10241, 1177, 2681, 8333, 4830, + 10241, 1177, 2681, 8971, 7812, + 10241, 1177, 2681, 9395, 7639, 10344, + 10241, 1177, 2681, 9893, 9786, + 10241, 1177, 2681, 9934, + 10241, 1177, 2681, 9953, 4194, + 10241, 1177, 2681, 9963, 8290, + 10241, 1177, 2681, 10323, 8436, + 10241, 1177, 2681, 10680, + 10241, 1177, 2681, 11199, 6716, + 10241, 1177, 6131, 439, 2681, 9148, + 10241, 1177, 6383, 11454, + 10241, 1177, 6868, + 10241, 1177, 6877, 7388, + 10241, 1177, 6877, 8790, + 10241, 1177, 6877, 11732, + 10241, 1177, 6877, 13000, + 10241, 1177, 6995, 7738, + 10241, 1177, 7187, 9118, + 10241, 1177, 7348, + 10241, 1177, 7593, 8790, + 10241, 1177, 7593, 13000, + 10241, 1177, 7987, 11454, + 10241, 1177, 7999, 9784, + 10241, 1177, 8071, 569, 4944, + 10241, 1177, 8642, + 10241, 1177, 9341, 10632, + 10241, 1177, 9478, + 10241, 1177, 9613, 8898, + 10241, 1177, 9630, + 10241, 1177, 9832, + 10241, 1177, 9878, + 10241, 1177, 9954, + 10241, 1177, 9992, + 10241, 1177, 10146, + 10241, 1177, 10252, + 10241, 1177, 10458, + 10241, 1177, 10638, + 10241, 1177, 10689, 6796, + 10241, 1177, 10698, + 10241, 1177, 10793, 429, 2681, 7100, + 10241, 1177, 10998, + 10241, 1177, 11013, 10632, + 10241, 1177, 11056, + 10241, 1177, 11058, + 10241, 1177, 11247, 6416, + 10241, 1177, 11481, 91, 2681, 10732, + 10241, 1177, 11482, + 10241, 1177, 11614, + 10241, 1177, 11628, + 10241, 1177, 11678, + 10241, 1177, 11702, + 10241, 1177, 11704, + 10241, 1177, 11756, + 10241, 1177, 11836, + 10241, 1177, 11930, + 10241, 1177, 11938, + 10241, 1177, 12100, + 10241, 1177, 12414, + 10241, 1177, 12918, + 10243, 8405, 0, + 10243, 8405, 8, + 10243, 8405, 16, + 10243, 8405, 26, + 10243, 8405, 28, + 10243, 8405, 40, + 10243, 8405, 100, + 10243, 8405, 102, + 10243, 8405, 106, + 10243, 8405, 108, + 10243, 8405, 112, + 10243, 8405, 138, + 10243, 8405, 142, + 10243, 8405, 144, + 10243, 8405, 150, + 10243, 8405, 152, + 10243, 8405, 216, + 10243, 8405, 220, + 10243, 8405, 224, + 10243, 8405, 228, + 10243, 8405, 230, + 10243, 8405, 236, + 10243, 8405, 238, + 10243, 8405, 242, + 10243, 8405, 246, + 10243, 8405, 250, + 10243, 8405, 306, + 10243, 8405, 310, + 10243, 8405, 314, + 10243, 8405, 322, + 10243, 8405, 326, + 10243, 8405, 364, + 10243, 8405, 368, + 10243, 8405, 374, + 10243, 8405, 380, + 10243, 8405, 384, + 10243, 8405, 392, + 10243, 8405, 396, + 10243, 8405, 404, + 10243, 8405, 412, + 10243, 8405, 416, + 10243, 8405, 462, + 10243, 8405, 468, + 10243, 8405, 476, + 10243, 8405, 480, + 10243, 8405, 486, + 10243, 8405, 510, + 10243, 8405, 512, + 10243, 8405, 514, + 10243, 8405, 516, + 10243, 8405, 520, + 10243, 8405, 524, + 10243, 8405, 526, + 10243, 8405, 532, + 10243, 8405, 536, + 10243, 8405, 546, + 10243, 8405, 556, + 10243, 8405, 560, + 10243, 8405, 564, + 10243, 8405, 568, + 10243, 8405, 576, + 10243, 8405, 618, + 10243, 8405, 622, + 10243, 8405, 626, + 10243, 8405, 630, + 10243, 8405, 632, + 10243, 8405, 652, + 10243, 8405, 660, + 10243, 8405, 664, + 10243, 8405, 670, + 10243, 8405, 672, + 10243, 8405, 676, + 10243, 8405, 678, + 10243, 8405, 680, + 10243, 8405, 7593, 0, + 10243, 8405, 7593, 8, + 10243, 8405, 7593, 16, + 10243, 8405, 7593, 28, + 10243, 8405, 7593, 40, + 10243, 8405, 7593, 306, + 10243, 8405, 7593, 310, + 10243, 8405, 7593, 576, + 10243, 8405, 7593, 622, + 10243, 8405, 7593, 652, + 10243, 8405, 7593, 660, + 10243, 8405, 7593, 664, + 10243, 8921, 11067, 4926, + 10243, 9165, 6224, + 10243, 11067, 4926, + 10256, + 10257, 9495, 6121, 10677, 760, + 10260, + 10261, 6121, 7711, 5758, + 10261, 6121, 7768, + 10261, 6121, 8153, 8758, + 10261, 6121, 9546, + 10261, 6121, 10666, + 10261, 6121, 11097, 6435, 6121, 4530, + 10261, 6121, 12492, + 10261, 7939, 1, 7383, 10374, + 10261, 9015, 6121, 7580, + 10261, 10982, + 10265, 9610, + 10267, 2163, 5758, + 10267, 4841, 36, + 10267, 10469, 4926, + 10267, 10670, + 10267, 12017, 4926, + 10267, 12064, + 10277, 11663, 10539, 8774, + 10283, 8405, 0, + 10283, 8405, 8, + 10283, 8405, 16, + 10283, 8405, 26, + 10283, 8405, 28, + 10283, 8405, 40, + 10283, 8405, 100, + 10283, 8405, 102, + 10283, 8405, 106, + 10283, 8405, 108, + 10283, 8405, 112, + 10283, 8405, 138, + 10283, 8405, 142, + 10283, 8405, 144, + 10283, 8405, 150, + 10283, 8405, 152, + 10283, 8405, 216, + 10283, 8405, 220, + 10283, 8405, 224, + 10283, 8405, 228, + 10283, 8405, 230, + 10283, 8405, 236, + 10283, 8405, 238, + 10283, 8405, 242, + 10283, 8405, 246, + 10283, 8405, 250, + 10283, 8405, 306, + 10283, 8405, 310, + 10283, 8405, 314, + 10283, 8405, 322, + 10283, 8405, 326, + 10283, 8405, 364, + 10283, 8405, 368, + 10283, 8405, 374, + 10283, 8405, 380, + 10283, 8405, 384, + 10283, 8405, 392, + 10283, 8405, 396, + 10283, 8405, 404, + 10283, 8405, 412, + 10283, 8405, 416, + 10283, 8405, 462, + 10283, 8405, 468, + 10283, 8405, 476, + 10283, 8405, 480, + 10283, 8405, 486, + 10283, 8405, 510, + 10283, 8405, 512, + 10283, 8405, 514, + 10283, 8405, 516, + 10283, 8405, 520, + 10283, 8405, 524, + 10283, 8405, 526, + 10283, 8405, 532, + 10283, 8405, 536, + 10283, 8405, 546, + 10283, 8405, 556, + 10283, 8405, 560, + 10283, 8405, 564, + 10283, 8405, 568, + 10283, 8405, 576, + 10283, 8405, 610, + 10283, 8405, 612, + 10283, 8405, 614, + 10283, 8405, 616, + 10283, 8405, 618, + 10283, 8405, 622, + 10283, 8405, 626, + 10283, 8405, 630, + 10283, 8405, 632, + 10283, 8405, 652, + 10283, 8405, 660, + 10283, 8405, 664, + 10283, 8405, 670, + 10283, 8405, 672, + 10283, 8405, 676, + 10283, 8405, 678, + 10283, 8405, 680, + 10283, 8405, 7593, 0, + 10283, 8405, 7593, 8, + 10283, 8405, 7593, 16, + 10283, 8405, 7593, 28, + 10283, 8405, 7593, 40, + 10283, 8405, 7593, 236, + 10283, 8405, 7593, 238, + 10283, 8405, 7593, 242, + 10283, 8405, 7593, 246, + 10283, 8405, 7593, 250, + 10283, 8405, 7593, 306, + 10283, 8405, 7593, 310, + 10283, 8405, 7593, 326, + 10283, 8405, 7593, 384, + 10283, 8405, 7593, 416, + 10283, 8405, 7593, 510, + 10283, 8405, 7593, 512, + 10283, 8405, 7593, 514, + 10283, 8405, 7593, 516, + 10283, 8405, 7593, 520, + 10283, 8405, 7593, 532, + 10283, 8405, 7593, 546, + 10283, 8405, 7593, 568, + 10283, 8405, 7593, 576, + 10283, 8405, 7593, 622, + 10283, 8405, 7593, 652, + 10283, 8405, 7593, 660, + 10283, 8405, 7593, 664, + 10283, 8473, 1044, + 10283, 8921, 11067, 4926, + 10283, 9165, 4772, + 10283, 11067, 4926, + 10286, + 10297, 2638, + 10321, 8774, + 10327, 114, + 10327, 6408, + 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 601, 721, 4848, + 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 601, 721, 7442, + 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 4117, 721, 4848, + 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 4117, 721, 7442, + 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 4849, 721, 600, + 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 4849, 721, 4116, + 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 7443, 721, 600, + 10327, 6409, 6121, 5385, 735, 8165, 275, 6435, 10441, 7443, 721, 4116, + 10327, 6409, 9537, 4848, + 10327, 7443, 6409, 6121, 1044, + 10333, 2779, 8709, 5387, 4894, + 10333, 2779, 8709, 8328, + 10333, 4895, 5387, 2779, 8708, + 10333, 4895, 5387, 7550, + 10333, 6516, + 10333, 7551, 5387, 4894, + 10333, 9796, + 10333, 11164, + 10333, 11358, + 10339, 8405, 601, 5876, + 10339, 8405, 601, 10716, + 10339, 8405, 604, + 10339, 8405, 1045, 7580, + 10339, 8405, 1045, 10677, 760, + 10339, 8405, 1045, 11649, 760, + 10339, 8405, 1109, 1809, 5964, + 10339, 8405, 1109, 4423, 5964, + 10339, 8405, 1809, 601, 10716, + 10339, 8405, 1809, 4117, 10716, + 10339, 8405, 1809, 4849, 6434, + 10339, 8405, 1809, 4849, 10716, + 10339, 8405, 1809, 5550, + 10339, 8405, 1809, 5965, 760, + 10339, 8405, 1809, 6379, 7908, + 10339, 8405, 1809, 6875, 7908, + 10339, 8405, 1809, 7443, 10716, + 10339, 8405, 1809, 7708, + 10339, 8405, 1809, 8151, 5965, 760, + 10339, 8405, 1809, 8151, 11095, 5965, 760, + 10339, 8405, 1809, 8432, + 10339, 8405, 1809, 10267, 12017, 4926, + 10339, 8405, 1809, 10677, 4876, + 10339, 8405, 1809, 11095, 5965, 760, + 10339, 8405, 1809, 11449, 7908, + 10339, 8405, 1911, 5965, 760, + 10339, 8405, 1911, 8151, 5965, 760, + 10339, 8405, 1911, 8151, 11095, 5965, 760, + 10339, 8405, 1911, 11095, 5965, 760, + 10339, 8405, 3071, 10799, 5965, 4926, + 10339, 8405, 4117, 5876, + 10339, 8405, 4117, 10716, + 10339, 8405, 4389, 11859, 6610, + 10339, 8405, 4423, 5965, 760, + 10339, 8405, 4423, 8151, 5965, 760, + 10339, 8405, 4423, 8151, 11095, 5965, 760, + 10339, 8405, 4423, 11095, 5965, 760, + 10339, 8405, 4849, 4389, 5550, + 10339, 8405, 4849, 10716, + 10339, 8405, 5385, 7530, + 10339, 8405, 5445, 5758, + 10339, 8405, 6179, 10799, 5965, 4926, + 10339, 8405, 6379, 7908, + 10339, 8405, 6485, 1809, 5964, + 10339, 8405, 6485, 4423, 5964, + 10339, 8405, 6610, + 10339, 8405, 6623, 7908, + 10339, 8405, 6875, 7908, + 10339, 8405, 7121, 7443, 8077, 6408, + 10339, 8405, 7173, 5758, + 10339, 8405, 7390, + 10339, 8405, 7443, 4389, 5550, + 10339, 8405, 7443, 10716, + 10339, 8405, 7530, + 10339, 8405, 7551, 8167, 5758, + 10339, 8405, 7593, 0, + 10339, 8405, 7593, 2, + 10339, 8405, 7593, 4, + 10339, 8405, 7593, 5, 6121, 3966, + 10339, 8405, 7593, 6, + 10339, 8405, 7593, 8, + 10339, 8405, 7593, 10, + 10339, 8405, 7593, 12, + 10339, 8405, 7593, 14, + 10339, 8405, 7593, 15, 6121, 4530, + 10339, 8405, 7593, 17, 6121, 8758, + 10339, 8405, 7593, 18, + 10339, 8405, 7593, 19, 6121, 12426, + 10339, 8405, 7593, 20, + 10339, 8405, 7593, 22, + 10339, 8405, 7593, 23, 6121, 9553, 4530, + 10339, 8405, 7593, 23, 6121, 11215, 4530, + 10339, 8405, 7593, 24, + 10339, 8405, 7593, 25, 6121, 4530, + 10339, 8405, 7593, 27, 6121, 4849, 4530, + 10339, 8405, 7593, 27, 6121, 11215, 4530, + 10339, 8405, 7593, 28, + 10339, 8405, 7593, 30, + 10339, 8405, 7593, 34, + 10339, 8405, 7593, 36, + 10339, 8405, 7593, 37, 6121, 4530, + 10339, 8405, 7593, 38, + 10339, 8405, 7593, 39, 6121, 9553, 4530, + 10339, 8405, 7593, 40, + 10339, 8405, 7593, 41, 760, + 10339, 8405, 7593, 42, + 10339, 8405, 7593, 43, 6121, 4530, + 10339, 8405, 7593, 44, + 10339, 8405, 7593, 46, + 10339, 8405, 7593, 48, + 10339, 8405, 7593, 50, + 10339, 8405, 7593, 51, 6121, 3966, + 10339, 8405, 7593, 51, 6121, 11215, 4530, + 10339, 8405, 7593, 710, + 10339, 8405, 7593, 888, + 10339, 8405, 7593, 1110, + 10339, 8405, 7593, 1124, + 10339, 8405, 7593, 1130, + 10339, 8405, 7593, 1138, + 10339, 8405, 7593, 2216, + 10339, 8405, 7593, 2725, 4389, 28, + 10339, 8405, 7593, 3774, + 10339, 8405, 7593, 4614, + 10339, 8405, 7593, 5385, 8, + 10339, 8405, 7593, 5385, 28, + 10339, 8405, 7593, 6406, + 10339, 8405, 7593, 6674, + 10339, 8405, 7593, 6824, + 10339, 8405, 7593, 6879, 2216, + 10339, 8405, 7593, 6879, 6824, + 10339, 8405, 7593, 7494, + 10339, 8405, 7593, 7682, + 10339, 8405, 7593, 7981, 28, + 10339, 8405, 7593, 8005, 4389, 28, + 10339, 8405, 7593, 8679, 12, + 10339, 8405, 7593, 8869, 0, + 10339, 8405, 7593, 8869, 14, + 10339, 8405, 7593, 8869, 16, + 10339, 8405, 7593, 8869, 24, + 10339, 8405, 7593, 8869, 25, 6121, 4895, 1760, + 10339, 8405, 7593, 8869, 34, + 10339, 8405, 7593, 8869, 35, 6121, 4530, + 10339, 8405, 7593, 8869, 42, + 10339, 8405, 7593, 8869, 66, + 10339, 8405, 7593, 8869, 5385, 8, + 10339, 8405, 7593, 8869, 6406, + 10339, 8405, 7593, 9063, 16, + 10339, 8405, 7593, 9063, 17, 6121, 8758, + 10339, 8405, 7593, 9063, 22, + 10339, 8405, 7593, 9063, 26, + 10339, 8405, 7593, 9063, 40, + 10339, 8405, 7593, 9063, 10267, 34, + 10339, 8405, 7593, 9185, 19, 6121, 8758, + 10339, 8405, 7593, 9808, + 10339, 8405, 7593, 10489, 5385, 8, + 10339, 8405, 7593, 10489, 9313, 5836, + 10339, 8405, 7593, 10523, 40, + 10339, 8405, 8153, 7390, + 10339, 8405, 8153, 11424, + 10339, 8405, 8432, + 10339, 8405, 8473, 6875, 7908, + 10339, 8405, 8473, 8153, 6379, 7908, + 10339, 8405, 8473, 8153, 6875, 7908, + 10339, 8405, 8631, 601, 6434, + 10339, 8405, 8631, 4117, 6434, + 10339, 8405, 8631, 6610, + 10339, 8405, 8631, 10267, 12017, 4926, + 10339, 8405, 8631, 12017, 4926, + 10339, 8405, 8645, 4530, + 10339, 8405, 8755, 721, 1809, 5964, + 10339, 8405, 8755, 721, 4423, 5964, + 10339, 8405, 8869, 6616, + 10339, 8405, 9063, 0, + 10339, 8405, 9063, 2, + 10339, 8405, 9063, 6, + 10339, 8405, 9063, 8, + 10339, 8405, 9063, 12, + 10339, 8405, 9063, 14, + 10339, 8405, 9063, 16, + 10339, 8405, 9063, 18, + 10339, 8405, 9063, 20, + 10339, 8405, 9063, 22, + 10339, 8405, 9063, 24, + 10339, 8405, 9063, 26, + 10339, 8405, 9063, 28, + 10339, 8405, 9063, 30, + 10339, 8405, 9063, 34, + 10339, 8405, 9063, 38, + 10339, 8405, 9063, 40, + 10339, 8405, 9063, 42, + 10339, 8405, 9063, 44, + 10339, 8405, 9063, 66, + 10339, 8405, 9063, 450, + 10339, 8405, 9063, 7981, 2, + 10339, 8405, 9063, 10489, 8, + 10339, 8405, 9063, 10489, 26, + 10339, 8405, 9079, 4849, 4389, 5550, + 10339, 8405, 9079, 7443, 4389, 5550, + 10339, 8405, 9089, 5965, 3071, 506, + 10339, 8405, 9089, 5965, 3071, 520, + 10339, 8405, 9089, 5965, 3071, 5432, + 10339, 8405, 9089, 5965, 3071, 7514, + 10339, 8405, 9089, 5965, 6179, 506, + 10339, 8405, 9089, 5965, 6179, 520, + 10339, 8405, 9089, 5965, 6179, 5432, + 10339, 8405, 9089, 5965, 6179, 7514, + 10339, 8405, 9313, 5836, + 10339, 8405, 9828, + 10339, 8405, 9977, 176, + 10339, 8405, 10221, 1992, + 10339, 8405, 10489, 6616, + 10339, 8405, 10489, 9313, 5836, + 10339, 8405, 10677, 4876, + 10339, 8405, 10985, 5965, 760, + 10339, 8405, 10985, 8151, 5965, 760, + 10339, 8405, 10985, 8151, 11095, 5965, 760, + 10339, 8405, 10985, 11095, 5965, 760, + 10339, 8405, 11424, + 10339, 8405, 11449, 7908, + 10339, 8405, 11625, 5965, 760, + 10339, 8405, 11625, 8151, 5965, 760, + 10339, 8405, 11625, 8151, 11095, 5965, 760, + 10339, 8405, 11625, 11095, 5965, 760, + 10339, 8405, 11859, 6610, + 10339, 8405, 12380, + 10343, 1177, 3070, + 10343, 1177, 6178, + 10343, 1177, 6716, + 10346, + 10350, + 10351, 7768, + 10351, 13060, + 10353, 6689, 8696, + 10357, 9095, 6689, 6260, + 10357, 9095, 8525, 8162, + 10357, 9095, 8525, 8874, + 10357, 9095, 8525, 8876, + 10357, 9095, 8525, 9286, + 10357, 9095, 8525, 9700, + 10357, 9095, 8525, 10150, + 10357, 9095, 8525, 10200, + 10357, 9095, 8525, 10360, + 10357, 9095, 8525, 10622, + 10357, 9095, 8525, 11232, + 10363, 7608, + 10379, 428, + 10383, 6622, + 10385, 6505, 5830, + 10385, 6879, 6622, + 10385, 7089, 6622, + 10385, 7821, 5830, + 10388, + 10411, 568, + 10411, 6121, 7709, 10374, + 10411, 6121, 11649, 8758, + 10429, 4927, 5668, + 10429, 4927, 8153, 5668, + 10429, 8153, 4399, 4926, + 10429, 8405, 0, + 10429, 8405, 8, + 10429, 8405, 16, + 10429, 8405, 28, + 10429, 8405, 40, + 10429, 8405, 100, + 10429, 8405, 116, + 10429, 8405, 138, + 10429, 8405, 162, + 10429, 8405, 196, + 10429, 8405, 216, + 10429, 8405, 236, + 10429, 8405, 292, + 10429, 8405, 306, + 10429, 8405, 332, + 10429, 8405, 364, + 10429, 8405, 392, + 10429, 8405, 462, + 10429, 8405, 496, + 10429, 8405, 510, + 10429, 8405, 524, + 10429, 8405, 556, + 10429, 8405, 622, + 10429, 8405, 638, + 10429, 8405, 652, + 10429, 8405, 670, + 10429, 8405, 884, + 10429, 8405, 974, + 10429, 8405, 1080, + 10429, 8405, 1250, + 10429, 8405, 1612, + 10429, 8405, 2030, + 10429, 8405, 2076, + 10429, 8405, 2126, + 10429, 8405, 2212, + 10429, 8405, 2516, + 10429, 8405, 2678, + 10429, 8405, 2732, + 10429, 8405, 2746, + 10429, 8405, 3146, + 10429, 8405, 5978, + 10429, 8405, 5994, + 10429, 8405, 7593, 0, + 10429, 8405, 8921, 236, + 10429, 8405, 10707, 652, + 10429, 8405, 10721, 196, + 10429, 8405, 11395, 2516, + 10429, 8405, 11900, + 10429, 8717, 4399, 4926, + 10429, 11257, 8405, 510, + 10429, 11257, 8405, 622, + 10429, 11257, 8405, 652, + 10429, 11843, 8405, 510, + 10431, 4093, 5759, 457, 3696, + 10431, 4093, 5759, 778, + 10431, 4093, 5759, 824, + 10431, 4093, 5759, 862, + 10431, 4093, 5759, 1780, + 10431, 4093, 5759, 2386, + 10431, 4093, 5759, 2498, + 10431, 4093, 5759, 3948, + 10431, 4093, 5759, 3954, + 10431, 4093, 5759, 4114, + 10431, 4093, 5759, 4418, + 10431, 4093, 5759, 4536, + 10431, 4093, 5759, 4874, + 10431, 4093, 5759, 5700, + 10431, 4093, 5759, 6090, + 10431, 4093, 5759, 6107, 3706, + 10431, 4093, 5759, 6434, + 10431, 4093, 5759, 6533, 1760, + 10431, 4093, 5759, 6574, + 10431, 4093, 5759, 6712, + 10431, 4093, 5759, 6794, + 10431, 4093, 5759, 7379, 5968, + 10431, 4093, 5759, 7586, + 10431, 4093, 5759, 7593, 742, + 10431, 4093, 5759, 7702, + 10431, 4093, 5759, 7752, + 10431, 4093, 5759, 7830, + 10431, 4093, 5759, 8068, + 10431, 4093, 5759, 8126, + 10431, 4093, 5759, 8270, + 10431, 4093, 5759, 8296, + 10431, 4093, 5759, 8599, 4398, + 10431, 4093, 5759, 8704, + 10431, 4093, 5759, 9036, + 10431, 4093, 5759, 9064, + 10431, 4093, 5759, 9462, + 10431, 4093, 5759, 9568, + 10431, 4093, 5759, 9638, + 10431, 4093, 5759, 10216, + 10431, 4093, 5759, 10316, + 10431, 4093, 5759, 10546, + 10431, 4093, 5759, 10611, 4398, + 10431, 4093, 5759, 10744, + 10431, 4093, 5759, 10753, 7378, + 10431, 4093, 5759, 10767, 9525, 8758, + 10431, 4093, 5759, 11718, + 10433, 5830, + 10445, 11054, + 10452, + 10453, 445, 6741, 568, + 10453, 445, 11621, 568, + 10453, 835, 2091, 11621, 568, + 10453, 6377, 2091, 6741, 568, + 10453, 6377, 2091, 7919, 6741, 568, + 10453, 6377, 7919, 6741, 568, + 10453, 6377, 8167, 5758, + 10453, 6377, 12345, 2091, 6741, 568, + 10453, 6377, 12345, 8167, 5758, + 10453, 7767, 10476, + 10455, 5392, + 10461, 4876, + 10465, 7121, 4848, + 10465, 7121, 7442, + 10465, 7773, 4848, + 10465, 7773, 4849, 721, 7121, 4849, 721, 7121, 7442, + 10465, 7773, 4849, 721, 7121, 7442, + 10465, 7773, 4849, 721, 7773, 7443, 721, 7121, 4848, + 10465, 7773, 4849, 721, 7773, 7443, 721, 7121, 7442, + 10465, 7773, 7442, + 10465, 7773, 7443, 721, 7121, 4848, + 10465, 7773, 7443, 721, 7121, 4849, 721, 7121, 7442, + 10469, 4926, + 10469, 12017, 4926, + 10470, + 10475, 7337, 8774, + 10486, + 10489, 2091, 5758, + 10489, 6408, + 10489, 6409, 6121, 10666, + 10489, 6731, 2510, + 10489, 7390, + 10489, 7708, + 10489, 7709, 8166, + 10489, 8153, 7390, + 10489, 8153, 7391, 11195, 4926, + 10489, 8153, 8759, 2091, 5758, + 10489, 8231, 12108, + 10489, 8849, 7390, + 10489, 9595, 5758, + 10489, 9641, 8225, 6907, 8022, + 10489, 10469, 4926, + 10489, 11224, + 10489, 11767, 9063, 22, + 10504, + 10513, 7821, 5830, + 10513, 7821, 7089, 6622, + 10513, 7821, 8056, + 10514, + 10529, 9898, + 10553, 11621, 568, + 10574, + 10575, 445, 6741, 568, + 10575, 445, 11621, 568, + 10575, 835, 2091, 11621, 568, + 10575, 6377, 2091, 6741, 568, + 10575, 6377, 2091, 7919, 6741, 568, + 10575, 6377, 7919, 6741, 568, + 10575, 6377, 8167, 5758, + 10575, 6377, 12345, 2091, 6741, 568, + 10575, 6377, 12345, 8167, 5758, + 10575, 7767, 10476, + 10579, 428, + 10579, 429, 445, 6741, 568, + 10579, 429, 445, 6741, 569, 6121, 1045, 6376, + 10579, 429, 6121, 2091, 6741, 568, + 10579, 429, 6377, 2091, 6741, 568, + 10579, 429, 6377, 7709, 10374, + 10579, 429, 6377, 7919, 6741, 568, + 10579, 429, 6377, 8167, 5758, + 10579, 6121, 1044, + 10579, 6121, 5445, 5759, 6490, + 10579, 6121, 13061, 5759, 6490, + 10579, 6377, 8762, + 10579, 6377, 10578, + 10579, 6377, 11097, 6434, + 10579, 7991, 721, 8329, 115, 3993, 6121, 8762, + 10579, 7991, 8762, + 10579, 11183, 9718, + 10604, + 10607, 7803, 5759, 16, + 10607, 7803, 5759, 40, + 10607, 8405, 0, + 10607, 8405, 16, + 10607, 8405, 40, + 10607, 8405, 100, + 10607, 8405, 138, + 10607, 8405, 216, + 10607, 8405, 306, + 10607, 8405, 332, + 10607, 8405, 364, + 10607, 8405, 392, + 10607, 8405, 462, + 10607, 8405, 524, + 10607, 8405, 556, + 10607, 8405, 622, + 10607, 8405, 652, + 10607, 8405, 2030, + 10629, 8405, 652, + 10629, 8405, 656, + 10629, 8405, 664, + 10629, 8405, 3006, + 10629, 8405, 3008, + 10629, 8405, 3010, + 10629, 8405, 3014, + 10629, 8405, 3016, + 10629, 8405, 3018, + 10629, 8405, 3020, + 10629, 8405, 3022, + 10629, 8405, 3024, + 10629, 8405, 3026, + 10629, 8405, 3028, + 10629, 8405, 3030, + 10629, 8405, 3032, + 10629, 8405, 3034, + 10629, 8405, 3036, + 10629, 8405, 3038, + 10629, 8405, 3040, + 10629, 8405, 3042, + 10629, 8405, 3044, + 10629, 8405, 3046, + 10629, 8405, 3062, + 10629, 8405, 3291, 6170, + 10629, 8405, 6162, + 10629, 8405, 6164, + 10629, 8405, 6166, + 10629, 8405, 6168, + 10629, 8405, 6170, + 10629, 8405, 6174, + 10629, 8405, 6176, + 10629, 8405, 6180, + 10629, 8405, 6182, + 10629, 8405, 6184, + 10629, 8405, 6186, + 10629, 8405, 6190, + 10629, 8405, 6192, + 10629, 8405, 6194, + 10629, 8405, 7844, + 10629, 8405, 7846, + 10629, 8405, 7848, + 10629, 8405, 7989, 8973, 3018, + 10629, 8405, 7989, 8973, 3020, + 10629, 8405, 8863, 3018, + 10629, 8405, 8863, 3022, + 10629, 8405, 8863, 3032, + 10629, 8405, 8863, 6170, + 10629, 8405, 8863, 6172, + 10629, 8405, 8863, 6176, + 10629, 8405, 8863, 6178, + 10629, 8405, 8863, 6192, + 10629, 8405, 8985, 6192, + 10629, 8405, 11849, 3046, + 10629, 10339, 8405, 12965, 4926, + 10631, 5759, 186, + 10643, 6121, 1045, 6376, + 10643, 6121, 8689, 91, 8004, + 10643, 6121, 10666, + 10644, + 10661, 6129, 9178, + 10661, 8405, 16, + 10661, 8405, 40, + 10661, 8405, 246, + 10661, 8405, 486, + 10661, 8405, 568, + 10661, 8405, 632, + 10661, 8405, 680, + 10661, 8405, 710, + 10661, 8405, 1578, + 10661, 8405, 1612, + 10661, 8405, 1892, + 10661, 8405, 2110, + 10661, 8405, 2574, + 10661, 8405, 2674, + 10661, 8405, 3080, + 10661, 8405, 3252, + 10661, 8405, 3774, + 10661, 8405, 4066, + 10661, 8405, 4538, + 10661, 8405, 5494, + 10661, 8405, 5624, + 10661, 8405, 5698, + 10661, 8405, 6262, + 10661, 8405, 6674, + 10661, 8405, 6822, + 10661, 8405, 6850, + 10661, 8405, 7080, + 10661, 8405, 7422, + 10661, 8405, 7482, + 10661, 8405, 8814, + 10664, + 10665, 6121, 5525, 6706, + 10670, + 10674, + 10677, 761, 6121, 11649, 8758, + 10677, 761, 7991, 7443, 10642, + 10677, 761, 8153, 4849, 11378, + 10677, 761, 8849, 7443, 11378, + 10677, 4215, 4112, + 10677, 4719, 8641, 4926, + 10677, 4719, 8641, 4927, 7121, 4388, + 10677, 4719, 8641, 4927, 7773, 4388, + 10677, 4719, 8641, 6121, 8921, 7605, 4926, + 10677, 4719, 8641, 6121, 8921, 7605, 4927, 7773, 4388, + 10677, 4876, + 10677, 4877, 6121, 8057, 6376, + 10677, 4877, 6121, 8057, 6490, + 10677, 4877, 6121, 8473, 1044, + 10677, 4877, 10982, + 10677, 4923, 6121, 8759, 5758, + 10677, 7708, + 10677, 8963, 4876, + 10677, 10154, + 10677, 12043, 11067, 4926, + 10679, 8744, + 10701, 569, 2681, 9746, + 10708, + 10719, 5238, + 10722, + 10737, 5758, + 10749, 9483, 8775, 1078, + 10749, 9483, 8775, 1135, 12010, + 10749, 9483, 8775, 3268, + 10749, 9483, 8775, 4619, 2020, + 10749, 9483, 8775, 4619, 9884, + 10749, 9483, 8775, 5048, + 10749, 9483, 8775, 5921, 1583, 9000, + 10749, 9483, 8775, 5970, + 10749, 9483, 8775, 6203, 726, + 10749, 9483, 8775, 6203, 4728, + 10749, 9483, 8775, 6387, 3274, + 10749, 9483, 8775, 6387, 4952, + 10749, 9483, 8775, 6387, 5449, 3274, + 10749, 9483, 8775, 6387, 5449, 6866, + 10749, 9483, 8775, 6387, 6866, + 10749, 9483, 8775, 6387, 8470, + 10749, 9483, 8775, 6387, 9886, + 10749, 9483, 8775, 6387, 11022, + 10749, 9483, 8775, 6419, 1135, 2020, + 10749, 9483, 8775, 6419, 12010, + 10749, 9483, 8775, 6426, + 10749, 9483, 8775, 6581, 7892, + 10749, 9483, 8775, 6581, 8366, + 10749, 9483, 8775, 6581, 8728, + 10749, 9483, 8775, 6690, + 10749, 9483, 8775, 6691, 9884, + 10749, 9483, 8775, 7092, + 10749, 9483, 8775, 7329, 2020, + 10749, 9483, 8775, 7329, 6690, + 10749, 9483, 8775, 7329, 12010, + 10749, 9483, 8775, 7398, + 10749, 9483, 8775, 7434, + 10749, 9483, 8775, 7660, + 10749, 9483, 8775, 7678, + 10749, 9483, 8775, 7679, 7928, + 10749, 9483, 8775, 7688, + 10749, 9483, 8775, 7788, + 10749, 9483, 8775, 7837, 8364, + 10749, 9483, 8775, 8094, + 10749, 9483, 8775, 8115, 3269, 1079, 10018, + 10749, 9483, 8775, 8115, 10815, 195, 10018, + 10749, 9483, 8775, 8115, 11863, 5377, 10018, + 10749, 9483, 8775, 8115, 12085, 9775, 10018, + 10749, 9483, 8775, 8115, 12372, + 10749, 9483, 8775, 8115, 13020, + 10749, 9483, 8775, 8171, 12110, + 10749, 9483, 8775, 8171, 12904, + 10749, 9483, 8775, 8199, 9703, 8053, 7786, + 10749, 9483, 8775, 8237, 17, 8949, 13020, + 10749, 9483, 8775, 8237, 5055, 6978, + 10749, 9483, 8775, 8237, 8506, + 10749, 9483, 8775, 8237, 9451, 8053, 10008, + 10749, 9483, 8775, 8237, 9451, 8053, 11684, + 10749, 9483, 8775, 8237, 9703, 8053, 8776, + 10749, 9483, 8775, 8237, 9703, 10007, 144, + 10749, 9483, 8775, 8237, 9884, + 10749, 9483, 8775, 8237, 9885, 9999, 6980, + 10749, 9483, 8775, 8237, 10811, 144, + 10749, 9483, 8775, 8237, 10811, 310, + 10749, 9483, 8775, 8237, 10811, 405, 726, + 10749, 9483, 8775, 8237, 10811, 405, 4728, + 10749, 9483, 8775, 8237, 10811, 462, + 10749, 9483, 8775, 8237, 10811, 678, + 10749, 9483, 8775, 8237, 10811, 5048, + 10749, 9483, 8775, 8237, 11609, 10710, + 10749, 9483, 8775, 8249, 8114, + 10749, 9483, 8775, 8249, 8948, + 10749, 9483, 8775, 8265, 2021, 726, + 10749, 9483, 8775, 8265, 2021, 4728, + 10749, 9483, 8775, 8265, 9884, + 10749, 9483, 8775, 8265, 12989, 6680, + 10749, 9483, 8775, 8265, 12989, 9888, + 10749, 9483, 8775, 8321, 8801, 11038, + 10749, 9483, 8775, 8341, 10648, + 10749, 9483, 8775, 8364, + 10749, 9483, 8775, 8365, 726, + 10749, 9483, 8775, 8365, 4728, + 10749, 9483, 8775, 8397, 1079, 9090, + 10749, 9483, 8775, 8397, 4159, 9092, + 10749, 9483, 8775, 8397, 7735, 9090, + 10749, 9483, 8775, 8397, 9359, 9092, + 10749, 9483, 8775, 8397, 10615, 9090, + 10749, 9483, 8775, 8475, 4618, + 10749, 9483, 8775, 8537, 2020, + 10749, 9483, 8775, 8537, 9884, + 10749, 9483, 8775, 8538, + 10749, 9483, 8775, 8557, 9884, + 10749, 9483, 8775, 8587, 2020, + 10749, 9483, 8775, 8587, 9884, + 10749, 9483, 8775, 8614, + 10749, 9483, 8775, 8686, + 10749, 9483, 8775, 8687, 2020, + 10749, 9483, 8775, 8748, + 10749, 9483, 8775, 8798, + 10749, 9483, 8775, 8850, + 10749, 9483, 8775, 8909, 2020, + 10749, 9483, 8775, 8909, 6690, + 10749, 9483, 8775, 8909, 12010, + 10749, 9483, 8775, 8949, 3269, 1079, 10018, + 10749, 9483, 8775, 8949, 10815, 195, 10018, + 10749, 9483, 8775, 8949, 11863, 5377, 10018, + 10749, 9483, 8775, 8949, 12085, 9775, 10018, + 10749, 9483, 8775, 8949, 12372, + 10749, 9483, 8775, 8954, + 10749, 9483, 8775, 9009, 144, + 10749, 9483, 8775, 9009, 216, + 10749, 9483, 8775, 9009, 310, + 10749, 9483, 8775, 9009, 404, + 10749, 9483, 8775, 9009, 462, + 10749, 9483, 8775, 9009, 678, + 10749, 9483, 8775, 9009, 2882, + 10749, 9483, 8775, 9080, + 10749, 9483, 8775, 9160, + 10749, 9483, 8775, 9260, + 10749, 9483, 8775, 9267, 1583, 8237, 2882, + 10749, 9483, 8775, 9350, + 10749, 9483, 8775, 9399, 2021, 726, + 10749, 9483, 8775, 9399, 2021, 4728, + 10749, 9483, 8775, 9399, 2021, 4954, + 10749, 9483, 8775, 9399, 9884, + 10749, 9483, 8775, 9412, + 10749, 9483, 8775, 9415, 2020, + 10749, 9483, 8775, 9415, 3250, + 10749, 9483, 8775, 9415, 9884, + 10749, 9483, 8775, 9420, + 10749, 9483, 8775, 9440, + 10749, 9483, 8775, 9584, + 10749, 9483, 8775, 9586, + 10749, 9483, 8775, 9620, + 10749, 9483, 8775, 9740, + 10749, 9483, 8775, 9741, 9874, + 10749, 9483, 8775, 9755, 2020, + 10749, 9483, 8775, 9755, 4957, 9742, + 10749, 9483, 8775, 9755, 9884, + 10749, 9483, 8775, 9756, + 10749, 9483, 8775, 9774, + 10749, 9483, 8775, 9790, + 10749, 9483, 8775, 9815, 9884, + 10749, 9483, 8775, 9848, + 10749, 9483, 8775, 9873, 2020, + 10749, 9483, 8775, 9873, 9884, + 10749, 9483, 8775, 9876, + 10749, 9483, 8775, 9936, + 10749, 9483, 8775, 9943, 2020, + 10749, 9483, 8775, 9943, 9884, + 10749, 9483, 8775, 10005, 3269, 7168, + 10749, 9483, 8775, 10005, 3269, 8464, + 10749, 9483, 8775, 10005, 6690, + 10749, 9483, 8775, 10005, 9778, + 10749, 9483, 8775, 10010, + 10749, 9483, 8775, 10011, 12989, 6680, + 10749, 9483, 8775, 10011, 12989, 9889, 726, + 10749, 9483, 8775, 10011, 12989, 9889, 4728, + 10749, 9483, 8775, 10013, 222, + 10749, 9483, 8775, 10164, + 10749, 9483, 8775, 10250, + 10749, 9483, 8775, 10284, + 10749, 9483, 8775, 10288, + 10749, 9483, 8775, 10289, 3250, + 10749, 9483, 8775, 10290, + 10749, 9483, 8775, 10292, + 10749, 9483, 8775, 10325, 3249, 8613, 6978, + 10749, 9483, 8775, 10325, 3249, 9997, 6978, + 10749, 9483, 8775, 10325, 7785, 6978, + 10749, 9483, 8775, 10325, 8613, 6978, + 10749, 9483, 8775, 10325, 8855, 6978, + 10749, 9483, 8775, 10325, 9429, 6978, + 10749, 9483, 8775, 10325, 9597, 6978, + 10749, 9483, 8775, 10325, 9597, 10617, 6978, + 10749, 9483, 8775, 10325, 9997, 6978, + 10749, 9483, 8775, 10325, 10617, 6978, + 10749, 9483, 8775, 10325, 10617, 9429, 6978, + 10749, 9483, 8775, 10325, 11372, + 10749, 9483, 8775, 10325, 11743, 6978, + 10749, 9483, 8775, 10412, + 10749, 9483, 8775, 10418, + 10749, 9483, 8775, 10419, 2020, + 10749, 9483, 8775, 10500, + 10749, 9483, 8775, 10525, 7946, + 10749, 9483, 8775, 10525, 7947, 9174, + 10749, 9483, 8775, 10525, 7947, 10646, + 10749, 9483, 8775, 10525, 7947, 11852, + 10749, 9483, 8775, 10525, 9778, + 10749, 9483, 8775, 10525, 9779, 9174, + 10749, 9483, 8775, 10525, 9779, 10646, + 10749, 9483, 8775, 10525, 9779, 11852, + 10749, 9483, 8775, 10618, + 10749, 9483, 8775, 10649, 2020, + 10749, 9483, 8775, 10649, 3250, + 10749, 9483, 8775, 10649, 9884, + 10749, 9483, 8775, 10813, 450, + 10749, 9483, 8775, 10974, + 10749, 9483, 8775, 10991, 10008, + 10749, 9483, 8775, 10991, 11684, + 10749, 9483, 8775, 10991, 12360, + 10749, 9483, 8775, 11046, + 10749, 9483, 8775, 11074, + 10749, 9483, 8775, 11078, + 10749, 9483, 8775, 11079, 2021, 726, + 10749, 9483, 8775, 11079, 2021, 4728, + 10749, 9483, 8775, 11079, 2021, 4954, + 10749, 9483, 8775, 11079, 9884, + 10749, 9483, 8775, 11082, + 10749, 9483, 8775, 11149, 2020, + 10749, 9483, 8775, 11149, 9884, + 10749, 9483, 8775, 11188, + 10749, 9483, 8775, 11189, 2020, + 10749, 9483, 8775, 11348, + 10749, 9483, 8775, 11374, + 10749, 9483, 8775, 11402, + 10749, 9483, 8775, 11403, 6690, + 10749, 9483, 8775, 11416, + 10749, 9483, 8775, 11421, 8801, 11038, + 10749, 9483, 8775, 11421, 11347, 2020, + 10749, 9483, 8775, 11422, + 10749, 9483, 8775, 11423, 2020, + 10749, 9483, 8775, 11423, 6690, + 10749, 9483, 8775, 11602, + 10749, 9483, 8775, 11643, 27, 7928, + 10749, 9483, 8775, 11643, 27, 9172, + 10749, 9483, 8775, 11654, + 10749, 9483, 8775, 11656, + 10749, 9483, 8775, 12111, 2020, + 10749, 9483, 8775, 12111, 9884, + 10749, 9483, 8775, 12112, + 10749, 9483, 8775, 12113, 2020, + 10749, 9483, 8775, 12113, 9884, + 10749, 9483, 8775, 12120, + 10749, 9483, 8775, 12365, 1126, + 10749, 9483, 8775, 12365, 1134, + 10749, 9483, 8775, 12400, + 10749, 9483, 8775, 12474, + 10749, 9483, 8775, 12872, + 10749, 9483, 8775, 12904, + 10749, 9483, 8775, 13052, + 10749, 9483, 8775, 13082, + 10749, 9483, 8775, 13084, + 10749, 9483, 8775, 13186, + 10749, 9483, 8775, 13206, + 10749, 9483, 8775, 13208, + 10749, 9483, 8775, 13216, + 10749, 9483, 8775, 13220, + 10749, 9483, 8775, 13222, + 10749, 9483, 8775, 13352, + 10749, 9483, 8775, 13400, + 10749, 9483, 8775, 13404, + 10750, + 10759, 2690, + 10763, 2725, 11791, 6434, + 10763, 5385, 8057, 6434, + 10763, 8065, 8057, 6434, + 10763, 8241, 8057, 6434, + 10763, 9115, 10260, + 10763, 10260, + 10767, 47, 6376, + 10767, 47, 6490, + 10767, 283, 6490, + 10767, 601, 5877, 6490, + 10767, 603, 6376, + 10767, 605, 6376, + 10767, 1045, 6376, + 10767, 1045, 6377, 7442, + 10767, 1045, 6490, + 10767, 1809, 4876, + 10767, 2091, 7709, 6376, + 10767, 4117, 5877, 6490, + 10767, 4215, 4113, 6376, + 10767, 4531, 6376, + 10767, 4536, + 10767, 4849, 4389, 5551, 6376, + 10767, 4849, 4389, 5551, 6490, + 10767, 4849, 5877, 6490, + 10767, 4849, 6409, 6376, + 10767, 4849, 6409, 6490, + 10767, 4849, 6435, 6376, + 10767, 4849, 6435, 6490, + 10767, 4849, 7443, 6435, 6376, + 10767, 4849, 7443, 6435, 6490, + 10767, 4849, 9327, 6376, + 10767, 4849, 10717, 6376, + 10767, 4849, 10717, 6490, + 10767, 4895, 8153, 9719, 9548, + 10767, 4895, 8759, 9548, + 10767, 4895, 9719, 9548, + 10767, 4895, 10677, 4877, 9548, + 10767, 5445, 5759, 6490, + 10767, 5551, 6376, + 10767, 5551, 6490, + 10767, 5551, 9548, + 10767, 6115, 8015, 6376, + 10767, 6379, 5965, 4926, + 10767, 6379, 7908, + 10767, 6379, 7909, 6490, + 10767, 6516, + 10767, 6517, 6490, + 10767, 6546, + 10767, 6547, 6490, + 10767, 6617, 6376, + 10767, 6617, 6377, 7442, + 10767, 6617, 6490, + 10767, 6875, 5965, 4926, + 10767, 6875, 7908, + 10767, 6875, 7909, 6490, + 10767, 6879, 9412, + 10767, 6879, 9483, 9796, + 10767, 6879, 9483, 11164, + 10767, 6879, 9483, 11358, + 10767, 6879, 10809, 7724, + 10767, 6879, 12120, + 10767, 6879, 13036, + 10767, 7089, 7593, 8405, 0, + 10767, 7089, 7593, 8405, 4, + 10767, 7089, 7593, 8405, 5, 9072, + 10767, 7089, 7593, 8405, 6, + 10767, 7089, 7593, 8405, 8, + 10767, 7089, 7593, 8405, 12, + 10767, 7089, 7593, 8405, 14, + 10767, 7089, 7593, 8405, 16, + 10767, 7089, 7593, 8405, 20, + 10767, 7089, 7593, 8405, 22, + 10767, 7089, 7593, 8405, 24, + 10767, 7089, 7593, 8405, 26, + 10767, 7089, 7593, 8405, 28, + 10767, 7089, 7593, 8405, 34, + 10767, 7089, 7593, 8405, 35, 6490, + 10767, 7089, 7593, 8405, 35, 9642, + 10767, 7089, 7593, 8405, 36, + 10767, 7089, 7593, 8405, 38, + 10767, 7089, 7593, 8405, 40, + 10767, 7089, 7593, 8405, 42, + 10767, 7089, 7593, 8405, 46, + 10767, 7089, 7593, 8405, 50, + 10767, 7089, 7593, 8405, 66, + 10767, 7089, 7593, 8405, 82, + 10767, 7089, 7593, 8405, 94, + 10767, 7089, 7593, 8405, 1130, + 10767, 7089, 7593, 8405, 4895, 36, + 10767, 7089, 7593, 8405, 9365, 6, + 10767, 7089, 7593, 8405, 10997, 5385, 1, 6376, + 10767, 7089, 8405, 7593, 9063, 12, + 10767, 7089, 8405, 7593, 9063, 22, + 10767, 7089, 8405, 7593, 9063, 24, + 10767, 7089, 8405, 7593, 9063, 26, + 10767, 7089, 8405, 7593, 9063, 34, + 10767, 7173, 5759, 6490, + 10767, 7443, 4389, 5551, 6376, + 10767, 7443, 4389, 5551, 6490, + 10767, 7443, 5877, 6490, + 10767, 7443, 6435, 6376, + 10767, 7443, 6435, 6490, + 10767, 7443, 9327, 6376, + 10767, 7443, 10717, 721, 601, 10717, 6490, + 10767, 7443, 10717, 721, 4117, 10717, 6490, + 10767, 7443, 10717, 6376, + 10767, 7443, 10717, 6490, + 10767, 7551, 8759, 9548, + 10767, 7551, 9719, 9548, + 10767, 7551, 10677, 4877, 9548, + 10767, 7601, 6490, + 10767, 7695, 4113, 6376, + 10767, 7708, + 10767, 7709, 6490, + 10767, 7709, 9548, + 10767, 7919, 6741, 569, 6376, + 10767, 8015, 6376, + 10767, 8015, 6490, + 10767, 8151, 6379, 7908, + 10767, 8151, 6875, 7908, + 10767, 8153, 1809, 4876, + 10767, 8153, 5551, 6490, + 10767, 8153, 6379, 7908, + 10767, 8153, 6516, + 10767, 8153, 6517, 6490, + 10767, 8153, 6875, 7908, + 10767, 8153, 7708, + 10767, 8153, 7709, 4849, 4388, + 10767, 8153, 7709, 7443, 4388, + 10767, 8153, 8432, + 10767, 8153, 8433, 6490, + 10767, 8153, 10267, 6516, + 10767, 8153, 10388, + 10767, 8153, 10677, 4877, 6376, + 10767, 8153, 10677, 4877, 6490, + 10767, 8153, 10677, 8759, 9548, + 10767, 8153, 11449, 6376, + 10767, 8153, 11765, 6435, 6490, + 10767, 8167, 5759, 6490, + 10767, 8432, + 10767, 8433, 4849, 4388, + 10767, 8433, 6490, + 10767, 8433, 7443, 4388, + 10767, 8534, + 10767, 8535, 6376, + 10767, 8745, 6490, + 10767, 8849, 10668, + 10767, 8869, 6617, 6376, + 10767, 8963, 6376, + 10767, 8963, 6490, + 10767, 8999, 8774, + 10767, 9072, + 10767, 9284, + 10767, 9633, 9719, 9548, + 10767, 9663, 6490, + 10767, 9811, 6435, 6490, + 10767, 9899, 6376, + 10767, 9899, 6490, + 10767, 9977, 2671, 10335, 5758, + 10767, 9977, 6655, 10438, + 10767, 9977, 7399, 10438, + 10767, 9977, 7716, + 10767, 9977, 7804, + 10767, 9977, 8342, + 10767, 9977, 8405, 0, + 10767, 9977, 8405, 28, + 10767, 9977, 8405, 102, + 10767, 9977, 8405, 142, + 10767, 9977, 8405, 172, + 10767, 9977, 8405, 174, + 10767, 9977, 8405, 176, + 10767, 9977, 8405, 182, + 10767, 9977, 8405, 184, + 10767, 9977, 8405, 236, + 10767, 9977, 8405, 258, + 10767, 9977, 8405, 306, + 10767, 9977, 8405, 468, + 10767, 9977, 8405, 560, + 10767, 9977, 8405, 612, + 10767, 9977, 8405, 664, + 10767, 9977, 8405, 672, + 10767, 9977, 8405, 807, 3096, + 10767, 9977, 8405, 886, + 10767, 9977, 8405, 1262, + 10767, 9977, 8405, 2516, + 10767, 9977, 8405, 2734, + 10767, 9977, 8405, 3038, + 10767, 9977, 8405, 3148, + 10767, 9977, 8405, 4198, + 10767, 9977, 8405, 6696, + 10767, 9977, 8405, 6748, + 10767, 9977, 8405, 7522, + 10767, 9977, 8405, 8425, 3096, + 10767, 9977, 8405, 10269, 0, + 10767, 9977, 8405, 10269, 807, 3096, + 10767, 9977, 8405, 11127, 592, + 10767, 9977, 9345, 10335, 5758, + 10767, 9977, 9345, 11363, 5758, + 10767, 9977, 9578, + 10767, 9977, 10335, 5758, + 10767, 9977, 10442, + 10767, 9977, 10625, 10335, 5758, + 10767, 9977, 13062, + 10767, 10223, 8330, + 10767, 10267, 6516, + 10767, 10267, 6517, 6490, + 10767, 10267, 8015, 6490, + 10767, 10267, 8153, 3273, 6490, + 10767, 10301, 4849, 4388, + 10767, 10301, 7443, 4388, + 10767, 10388, + 10767, 10489, 6617, 6376, + 10767, 10677, 4877, 6376, + 10767, 10677, 4877, 6490, + 10767, 10677, 7708, + 10767, 10763, 5551, 9548, + 10767, 10763, 6435, 6376, + 10767, 10804, + 10767, 10805, 6490, + 10767, 10969, 8056, + 10767, 10969, 8057, 10728, + 10767, 10969, 8354, + 10767, 10969, 8676, + 10767, 10969, 8744, + 10767, 10969, 8899, 10441, 10642, + 10767, 10969, 9158, + 10767, 11097, 6435, 9548, + 10767, 11097, 9327, 6121, 3713, 10958, + 10767, 11215, 4531, 6490, + 10767, 11449, 7908, + 10767, 11449, 7909, 6490, + 10767, 11459, 8432, + 10767, 11647, 6376, + 10767, 11765, 9327, 6121, 3713, 10958, + 10767, 11845, 4926, + 10767, 11900, + 10767, 12107, 4531, 6490, + 10767, 12394, + 10767, 12416, + 10767, 12470, + 10767, 12498, + 10767, 12500, + 10767, 12502, + 10767, 12901, 5551, 9548, + 10767, 12901, 6435, 6376, + 10767, 13356, + 10767, 13360, + 10767, 13365, 8921, 7605, 4926, + 10767, 13365, 12341, 7605, 4926, + 10771, 6121, 1045, 6376, + 10783, 5758, + 10789, 5759, 0, + 10789, 5759, 1, 7711, 0, + 10789, 5759, 1, 7711, 236, + 10789, 5759, 1, 7711, 750, + 10789, 5759, 1, 7711, 1482, + 10789, 5759, 1, 7711, 2486, + 10789, 5759, 1, 7711, 4241, 5898, + 10789, 5759, 1, 7711, 5030, + 10789, 5759, 1, 7711, 7077, 4358, + 10789, 5759, 8, + 10789, 5759, 9, 5387, 9, 2111, 5387, 2110, + 10789, 5759, 9, 7711, 2194, + 10789, 5759, 16, + 10789, 5759, 17, 0, + 10789, 5759, 40, + 10789, 5759, 41, 41, 40, + 10789, 5759, 41, 1304, + 10789, 5759, 41, 5387, 41, 41, 10489, 5387, 41, 10488, + 10789, 5759, 41, 5387, 41, 463, 5387, 463, 1221, 5387, 1220, + 10789, 5759, 41, 5387, 41, 2593, 5387, 2592, + 10789, 5759, 54, + 10789, 5759, 60, + 10789, 5759, 61, 4358, + 10789, 5759, 61, 7711, 41, 5445, 41, 5445, 40, + 10789, 5759, 61, 7711, 236, + 10789, 5759, 61, 7711, 1212, + 10789, 5759, 61, 7711, 1483, 4358, + 10789, 5759, 61, 7711, 3280, + 10789, 5759, 61, 7711, 4125, 4358, + 10789, 5759, 61, 7711, 4241, 5898, + 10789, 5759, 61, 7711, 4606, + 10789, 5759, 61, 7711, 7074, + 10789, 5759, 61, 7711, 7534, + 10789, 5759, 64, + 10789, 5759, 74, + 10789, 5759, 75, 7711, 6746, + 10789, 5759, 75, 7711, 7545, 5445, 4338, + 10789, 5759, 76, + 10789, 5759, 77, 7711, 76, + 10789, 5759, 77, 7711, 236, + 10789, 5759, 77, 7711, 314, + 10789, 5759, 77, 7711, 2518, + 10789, 5759, 77, 7711, 2836, + 10789, 5759, 77, 7711, 4088, + 10789, 5759, 77, 7711, 4338, + 10789, 5759, 77, 7711, 4706, + 10789, 5759, 80, + 10789, 5759, 81, 5387, 80, + 10789, 5759, 81, 5445, 5043, 9732, + 10789, 5759, 81, 5445, 5043, 10377, 81, 5445, 5042, + 10789, 5759, 81, 7695, 7710, + 10789, 5759, 100, + 10789, 5759, 106, + 10789, 5759, 107, 7711, 0, + 10789, 5759, 107, 7711, 1220, + 10789, 5759, 107, 7711, 1483, 4358, + 10789, 5759, 112, + 10789, 5759, 113, 5387, 113, 60, + 10789, 5759, 113, 5387, 113, 596, + 10789, 5759, 113, 9967, 112, + 10789, 5759, 138, + 10789, 5759, 144, + 10789, 5759, 152, + 10789, 5759, 153, 4358, + 10789, 5759, 153, 5387, 152, + 10789, 5759, 153, 9684, + 10789, 5759, 158, + 10789, 5759, 159, 7711, 1, 5445, 237, 5445, 138, + 10789, 5759, 159, 7711, 40, + 10789, 5759, 159, 7711, 374, + 10789, 5759, 159, 7711, 1220, + 10789, 5759, 159, 7711, 2488, + 10789, 5759, 159, 7711, 2518, + 10789, 5759, 172, + 10789, 5759, 176, + 10789, 5759, 177, 7711, 368, + 10789, 5759, 177, 7711, 4240, + 10789, 5759, 177, 7711, 4241, 5898, + 10789, 5759, 177, 9732, + 10789, 5759, 177, 9967, 176, + 10789, 5759, 177, 10377, 176, + 10789, 5759, 216, + 10789, 5759, 217, 4358, + 10789, 5759, 224, + 10789, 5759, 225, 7711, 8, + 10789, 5759, 225, 7711, 40, + 10789, 5759, 225, 9967, 224, + 10789, 5759, 230, + 10789, 5759, 231, 9967, 230, + 10789, 5759, 236, + 10789, 5759, 237, 4358, + 10789, 5759, 237, 5898, + 10789, 5759, 242, + 10789, 5759, 243, 7711, 40, + 10789, 5759, 243, 7711, 736, + 10789, 5759, 243, 7711, 750, + 10789, 5759, 243, 7711, 1206, + 10789, 5759, 243, 7711, 1632, + 10789, 5759, 243, 7711, 2110, + 10789, 5759, 243, 7711, 2518, + 10789, 5759, 243, 7711, 3280, + 10789, 5759, 243, 7711, 4094, + 10789, 5759, 250, + 10789, 5759, 256, + 10789, 5759, 262, + 10789, 5759, 270, + 10789, 5759, 271, 7711, 4241, 5898, + 10789, 5759, 272, + 10789, 5759, 273, 7711, 5880, + 10789, 5759, 273, 9732, + 10789, 5759, 273, 9967, 272, + 10789, 5759, 273, 10377, 272, + 10789, 5759, 274, + 10789, 5759, 280, + 10789, 5759, 306, + 10789, 5759, 307, 7711, 0, + 10789, 5759, 307, 7711, 40, + 10789, 5759, 307, 7711, 64, + 10789, 5759, 307, 7711, 65, 5445, 1682, + 10789, 5759, 307, 7711, 106, + 10789, 5759, 307, 7711, 216, + 10789, 5759, 307, 7711, 224, + 10789, 5759, 307, 7711, 230, + 10789, 5759, 307, 7711, 272, + 10789, 5759, 307, 7711, 314, + 10789, 5759, 307, 7711, 340, + 10789, 5759, 307, 7711, 354, + 10789, 5759, 307, 7711, 368, + 10789, 5759, 307, 7711, 369, 5445, 152, + 10789, 5759, 307, 7711, 369, 5445, 224, + 10789, 5759, 307, 7711, 369, 5445, 560, + 10789, 5759, 307, 7711, 374, + 10789, 5759, 307, 7711, 375, 5445, 7284, + 10789, 5759, 307, 7711, 396, + 10789, 5759, 307, 7711, 476, + 10789, 5759, 307, 7711, 520, + 10789, 5759, 307, 7711, 524, + 10789, 5759, 307, 7711, 580, + 10789, 5759, 307, 7711, 588, + 10789, 5759, 307, 7711, 676, + 10789, 5759, 307, 7711, 750, + 10789, 5759, 307, 7711, 760, + 10789, 5759, 307, 7711, 1212, + 10789, 5759, 307, 7711, 1220, + 10789, 5759, 307, 7711, 1221, 5445, 5663, 5445, 0, + 10789, 5759, 307, 7711, 1482, + 10789, 5759, 307, 7711, 1584, + 10789, 5759, 307, 7711, 1624, + 10789, 5759, 307, 7711, 2110, + 10789, 5759, 307, 7711, 2494, + 10789, 5759, 307, 7711, 2516, + 10789, 5759, 307, 7711, 2518, + 10789, 5759, 307, 7711, 2524, + 10789, 5759, 307, 7711, 2530, + 10789, 5759, 307, 7711, 2654, + 10789, 5759, 307, 7711, 2836, + 10789, 5759, 307, 7711, 3280, + 10789, 5759, 307, 7711, 4166, + 10789, 5759, 307, 7711, 4241, 5898, + 10789, 5759, 307, 7711, 4334, + 10789, 5759, 307, 7711, 4339, 5445, 2494, + 10789, 5759, 307, 7711, 4339, 9967, 4338, + 10789, 5759, 307, 7711, 4366, + 10789, 5759, 307, 7711, 5692, + 10789, 5759, 307, 7711, 6049, 7711, 462, + 10789, 5759, 307, 7711, 6464, + 10789, 5759, 307, 7711, 6746, + 10789, 5759, 307, 7711, 7648, + 10789, 5759, 314, + 10789, 5759, 315, 7711, 40, + 10789, 5759, 315, 7711, 588, + 10789, 5759, 315, 7711, 750, + 10789, 5759, 326, + 10789, 5759, 327, 5387, 243, 7711, 3281, 327, 5387, 243, 7711, 3280, + 10789, 5759, 332, + 10789, 5759, 340, + 10789, 5759, 354, + 10789, 5759, 355, 7711, 750, + 10789, 5759, 364, + 10789, 5759, 365, 4358, + 10789, 5759, 365, 7711, 5880, + 10789, 5759, 368, + 10789, 5759, 374, + 10789, 5759, 384, + 10789, 5759, 385, 5387, 384, + 10789, 5759, 392, + 10789, 5759, 396, + 10789, 5759, 397, 7711, 0, + 10789, 5759, 397, 7711, 588, + 10789, 5759, 397, 9684, + 10789, 5759, 404, + 10789, 5759, 405, 7711, 8, + 10789, 5759, 416, + 10789, 5759, 462, + 10789, 5759, 476, + 10789, 5759, 477, 7711, 0, + 10789, 5759, 477, 7711, 8, + 10789, 5759, 477, 7711, 16, + 10789, 5759, 477, 7711, 40, + 10789, 5759, 477, 7711, 60, + 10789, 5759, 477, 7711, 106, + 10789, 5759, 477, 7711, 112, + 10789, 5759, 477, 7711, 256, + 10789, 5759, 477, 7711, 580, + 10789, 5759, 477, 9967, 476, + 10789, 5759, 510, + 10789, 5759, 514, + 10789, 5759, 520, + 10789, 5759, 524, + 10789, 5759, 532, + 10789, 5759, 533, 4358, + 10789, 5759, 546, + 10789, 5759, 547, 5387, 546, + 10789, 5759, 556, + 10789, 5759, 557, 4358, + 10789, 5759, 557, 7711, 242, + 10789, 5759, 557, 7711, 374, + 10789, 5759, 557, 9898, + 10789, 5759, 560, + 10789, 5759, 561, 4358, + 10789, 5759, 564, + 10789, 5759, 565, 5898, + 10789, 5759, 576, + 10789, 5759, 580, + 10789, 5759, 584, + 10789, 5759, 588, + 10789, 5759, 589, 4358, + 10789, 5759, 589, 7711, 41, 5445, 41, 5445, 40, + 10789, 5759, 589, 7711, 41, 5445, 41, 5445, 41, 4358, + 10789, 5759, 589, 7711, 374, + 10789, 5759, 589, 7711, 750, + 10789, 5759, 589, 8374, + 10789, 5759, 589, 9684, + 10789, 5759, 589, 9685, 7711, 750, + 10789, 5759, 594, + 10789, 5759, 595, 7711, 40, + 10789, 5759, 595, 7711, 369, 5445, 138, + 10789, 5759, 595, 7711, 5662, + 10789, 5759, 595, 7711, 7074, + 10789, 5759, 596, + 10789, 5759, 597, 4358, + 10789, 5759, 602, + 10789, 5759, 603, 9684, + 10789, 5759, 603, 9967, 602, + 10789, 5759, 670, + 10789, 5759, 671, 5898, + 10789, 5759, 671, 9733, 7711, 1696, + 10789, 5759, 676, + 10789, 5759, 677, 5387, 676, + 10789, 5759, 680, + 10789, 5759, 702, + 10789, 5759, 703, 7711, 369, 5445, 176, + 10789, 5759, 703, 7711, 4241, 5898, + 10789, 5759, 703, 7711, 5662, + 10789, 5759, 703, 7711, 5880, + 10789, 5759, 703, 7711, 6464, + 10789, 5759, 736, + 10789, 5759, 737, 4703, 5898, + 10789, 5759, 737, 5387, 737, 5387, 736, + 10789, 5759, 737, 5387, 737, 5387, 737, 9967, 737, 5387, 737, 5387, 736, + 10789, 5759, 737, 5387, 737, 6013, 5387, 6013, 6013, 5387, 6013, 2194, + 10789, 5759, 737, 6313, 5898, + 10789, 5759, 750, + 10789, 5759, 754, + 10789, 5759, 755, 5387, 754, + 10789, 5759, 760, + 10789, 5759, 832, + 10789, 5759, 958, + 10789, 5759, 959, 8361, 7711, 1, 5445, 4928, + 10789, 5759, 959, 8361, 7711, 106, + 10789, 5759, 959, 8361, 7711, 216, + 10789, 5759, 959, 8361, 7711, 217, 5445, 4928, + 10789, 5759, 959, 8361, 7711, 224, + 10789, 5759, 959, 8361, 7711, 236, + 10789, 5759, 959, 8361, 7711, 280, + 10789, 5759, 959, 8361, 7711, 281, 5445, 354, + 10789, 5759, 959, 8361, 7711, 332, + 10789, 5759, 959, 8361, 7711, 354, + 10789, 5759, 959, 8361, 7711, 355, 5445, 7138, + 10789, 5759, 959, 8361, 7711, 396, + 10789, 5759, 959, 8361, 7711, 532, + 10789, 5759, 959, 8361, 7711, 581, 5445, 4334, + 10789, 5759, 959, 8361, 7711, 1304, + 10789, 5759, 959, 8361, 7711, 1584, + 10789, 5759, 959, 8361, 7711, 1822, + 10789, 5759, 959, 8361, 7711, 2195, 5445, 2194, + 10789, 5759, 959, 8361, 7711, 2836, + 10789, 5759, 959, 8361, 7711, 3256, + 10789, 5759, 959, 8361, 7711, 4334, + 10789, 5759, 959, 8361, 7711, 5880, + 10789, 5759, 959, 8361, 7711, 6464, + 10789, 5759, 962, + 10789, 5759, 966, + 10789, 5759, 1006, + 10789, 5759, 1010, + 10789, 5759, 1011, 7711, 2518, + 10789, 5759, 1012, + 10789, 5759, 1013, 8339, 41, 4359, 4094, + 10789, 5759, 1050, + 10789, 5759, 1051, 7711, 4166, + 10789, 5759, 1052, + 10789, 5759, 1054, + 10789, 5759, 1060, + 10789, 5759, 1202, + 10789, 5759, 1203, 5387, 1202, + 10789, 5759, 1203, 7711, 1, 5445, 139, 5445, 236, + 10789, 5759, 1203, 7711, 1, 5445, 236, + 10789, 5759, 1203, 7711, 1, 5445, 1482, + 10789, 5759, 1203, 7711, 40, + 10789, 5759, 1203, 7711, 80, + 10789, 5759, 1203, 7711, 138, + 10789, 5759, 1203, 7711, 144, + 10789, 5759, 1203, 7711, 172, + 10789, 5759, 1203, 7711, 173, 5445, 332, + 10789, 5759, 1203, 7711, 176, + 10789, 5759, 1203, 7711, 177, 7711, 4241, 5898, + 10789, 5759, 1203, 7711, 224, + 10789, 5759, 1203, 7711, 237, 5445, 355, 5445, 4166, + 10789, 5759, 1203, 7711, 243, 5445, 340, + 10789, 5759, 1203, 7711, 332, + 10789, 5759, 1203, 7711, 369, 5445, 176, + 10789, 5759, 1203, 7711, 374, + 10789, 5759, 1203, 7711, 462, + 10789, 5759, 1203, 7711, 588, + 10789, 5759, 1203, 7711, 589, 5445, 152, + 10789, 5759, 1203, 7711, 703, 5899, 5445, 2636, + 10789, 5759, 1203, 7711, 736, + 10789, 5759, 1203, 7711, 750, + 10789, 5759, 1203, 7711, 761, 5445, 510, + 10789, 5759, 1203, 7711, 832, + 10789, 5759, 1203, 7711, 833, 5445, 510, + 10789, 5759, 1203, 7711, 1011, 7711, 2518, + 10789, 5759, 1203, 7711, 1050, + 10789, 5759, 1203, 7711, 1220, + 10789, 5759, 1203, 7711, 1272, + 10789, 5759, 1203, 7711, 1273, 5445, 0, + 10789, 5759, 1203, 7711, 1344, + 10789, 5759, 1203, 7711, 1345, 5445, 332, + 10789, 5759, 1203, 7711, 1483, 4358, + 10789, 5759, 1203, 7711, 1499, 5445, 251, 5445, 736, + 10789, 5759, 1203, 7711, 1584, + 10789, 5759, 1203, 7711, 1624, + 10789, 5759, 1203, 7711, 1625, 5445, 1736, + 10789, 5759, 1203, 7711, 1683, 5445, 80, + 10789, 5759, 1203, 7711, 2110, + 10789, 5759, 1203, 7711, 2111, 5387, 2110, + 10789, 5759, 1203, 7711, 2488, + 10789, 5759, 1203, 7711, 2494, + 10789, 5759, 1203, 7711, 2518, + 10789, 5759, 1203, 7711, 2519, 5445, 2766, + 10789, 5759, 1203, 7711, 2584, + 10789, 5759, 1203, 7711, 3281, 5445, 1212, + 10789, 5759, 1203, 7711, 4241, 5898, + 10789, 5759, 1203, 7711, 4335, 5445, 546, + 10789, 5759, 1203, 7711, 4544, + 10789, 5759, 1203, 7711, 5692, + 10789, 5759, 1203, 7711, 5880, + 10789, 5759, 1203, 7711, 8338, + 10789, 5759, 1206, + 10789, 5759, 1207, 5387, 1207, 1221, 5387, 1220, + 10789, 5759, 1212, + 10789, 5759, 1213, 1207, 5387, 1207, 1221, 5387, 1220, + 10789, 5759, 1214, + 10789, 5759, 1216, + 10789, 5759, 1220, + 10789, 5759, 1272, + 10789, 5759, 1273, 5387, 1272, + 10789, 5759, 1273, 9967, 1272, + 10789, 5759, 1302, + 10789, 5759, 1303, 4358, + 10789, 5759, 1303, 7711, 1584, + 10789, 5759, 1303, 7711, 1585, 7711, 1483, 4358, + 10789, 5759, 1303, 7711, 2110, + 10789, 5759, 1303, 7711, 2489, 5445, 6012, + 10789, 5759, 1304, + 10789, 5759, 1305, 5387, 1305, 7122, + 10789, 5759, 1305, 7711, 1, 5445, 1696, + 10789, 5759, 1305, 7711, 1696, + 10789, 5759, 1308, + 10789, 5759, 1310, + 10789, 5759, 1311, 7711, 2518, + 10789, 5759, 1316, + 10789, 5759, 1344, + 10789, 5759, 1482, + 10789, 5759, 1483, 514, + 10789, 5759, 1483, 1006, + 10789, 5759, 1483, 4358, + 10789, 5759, 1483, 5387, 1483, 5703, 5387, 5703, 589, 5387, 588, + 10789, 5759, 1484, + 10789, 5759, 1498, + 10789, 5759, 1572, + 10789, 5759, 1573, 9967, 1572, + 10789, 5759, 1576, + 10789, 5759, 1584, + 10789, 5759, 1585, 7711, 1483, 4358, + 10789, 5759, 1586, + 10789, 5759, 1587, 7711, 750, + 10789, 5759, 1587, 9967, 1586, + 10789, 5759, 1624, + 10789, 5759, 1632, + 10789, 5759, 1682, + 10789, 5759, 1684, + 10789, 5759, 1685, 9817, 4212, + 10789, 5759, 1686, + 10789, 5759, 1688, + 10789, 5759, 1689, 4358, + 10789, 5759, 1690, + 10789, 5759, 1696, + 10789, 5759, 1697, 10377, 1696, + 10789, 5759, 1736, + 10789, 5759, 1737, 7711, 1736, + 10789, 5759, 1738, + 10789, 5759, 1739, 7711, 1696, + 10789, 5759, 1739, 7711, 1697, 5445, 520, + 10789, 5759, 1786, + 10789, 5759, 1812, + 10789, 5759, 1813, 5898, + 10789, 5759, 1813, 7711, 76, + 10789, 5759, 1813, 7711, 243, 7711, 750, + 10789, 5759, 1813, 7711, 272, + 10789, 5759, 1813, 7711, 314, + 10789, 5759, 1813, 7711, 333, 5445, 736, + 10789, 5759, 1813, 7711, 369, 5445, 176, + 10789, 5759, 1813, 7711, 396, + 10789, 5759, 1813, 7711, 416, + 10789, 5759, 1813, 7711, 533, 5445, 736, + 10789, 5759, 1813, 7711, 750, + 10789, 5759, 1813, 7711, 4166, + 10789, 5759, 1813, 7711, 4167, 5898, + 10789, 5759, 1813, 7711, 4241, 5898, + 10789, 5759, 1813, 7711, 4704, + 10789, 5759, 1813, 7711, 4706, + 10789, 5759, 1813, 7711, 4707, 5445, 736, + 10789, 5759, 1813, 7711, 5761, 5445, 112, + 10789, 5759, 1813, 7711, 6012, + 10789, 5759, 1813, 7711, 7074, + 10789, 5759, 1813, 9684, + 10789, 5759, 1813, 9732, + 10789, 5759, 1813, 9967, 1812, + 10789, 5759, 1813, 10377, 1812, + 10789, 5759, 1814, + 10789, 5759, 1818, + 10789, 5759, 1820, + 10789, 5759, 1822, + 10789, 5759, 1823, 5387, 1822, + 10789, 5759, 1823, 5387, 1823, 1221, 5387, 1220, + 10789, 5759, 1852, + 10789, 5759, 1856, + 10789, 5759, 1864, + 10789, 5759, 1896, + 10789, 5759, 1922, + 10789, 5759, 1950, + 10789, 5759, 1951, 4358, + 10789, 5759, 1980, + 10789, 5759, 1988, + 10789, 5759, 1989, 9520, + 10789, 5759, 2044, + 10789, 5759, 2054, + 10789, 5759, 2055, 7711, 1221, 5445, 4241, 5898, + 10789, 5759, 2055, 7711, 4241, 5898, + 10789, 5759, 2110, + 10789, 5759, 2111, 5387, 2110, + 10789, 5759, 2111, 5898, + 10789, 5759, 2111, 7077, 7711, 1220, + 10789, 5759, 2111, 7077, 7711, 2488, + 10789, 5759, 2111, 7077, 7711, 2489, 5387, 2111, 7077, 7711, 2488, + 10789, 5759, 2111, 7077, 7711, 2836, + 10789, 5759, 2111, 7077, 7711, 4928, + 10789, 5759, 2111, 9967, 2110, + 10789, 5759, 2111, 9967, 2111, 7077, 5387, 7076, + 10789, 5759, 2190, + 10789, 5759, 2192, + 10789, 5759, 2194, + 10789, 5759, 2380, + 10789, 5759, 2486, + 10789, 5759, 2487, 4358, + 10789, 5759, 2487, 5387, 2486, + 10789, 5759, 2487, 7711, 0, + 10789, 5759, 2487, 7711, 152, + 10789, 5759, 2487, 7711, 236, + 10789, 5759, 2487, 7711, 374, + 10789, 5759, 2487, 7711, 580, + 10789, 5759, 2487, 7711, 584, + 10789, 5759, 2487, 7711, 594, + 10789, 5759, 2487, 7711, 602, + 10789, 5759, 2487, 7711, 1050, + 10789, 5759, 2487, 7711, 1584, + 10789, 5759, 2487, 7711, 1696, + 10789, 5759, 2487, 7711, 1822, + 10789, 5759, 2487, 7711, 2110, + 10789, 5759, 2487, 7711, 2488, + 10789, 5759, 2487, 7711, 2636, + 10789, 5759, 2487, 7711, 2836, + 10789, 5759, 2487, 7711, 5692, + 10789, 5759, 2487, 9520, + 10789, 5759, 2488, + 10789, 5759, 2489, 7075, 7711, 3280, + 10789, 5759, 2494, + 10789, 5759, 2516, + 10789, 5759, 2518, + 10789, 5759, 2519, 250, + 10789, 5759, 2519, 5387, 2519, 1207, 5387, 1207, 1221, 5387, 1220, + 10789, 5759, 2519, 5387, 2519, 2637, 5387, 2637, 1221, 5387, 1220, + 10789, 5759, 2524, + 10789, 5759, 2525, 5387, 10267, 2524, + 10789, 5759, 2530, + 10789, 5759, 2582, + 10789, 5759, 2584, + 10789, 5759, 2592, + 10789, 5759, 2636, + 10789, 5759, 2637, 5387, 2637, 405, 5387, 405, 4095, 5387, 4094, + 10789, 5759, 2637, 9732, + 10789, 5759, 2638, + 10789, 5759, 2639, 7711, 106, + 10789, 5759, 2639, 7711, 588, + 10789, 5759, 2639, 7711, 1304, + 10789, 5759, 2639, 7711, 2518, + 10789, 5759, 2639, 7711, 2524, + 10789, 5759, 2639, 7711, 6012, + 10789, 5759, 2654, + 10789, 5759, 2694, + 10789, 5759, 2698, + 10789, 5759, 2699, 5387, 2698, + 10789, 5759, 2699, 5387, 2699, 1207, 5387, 1207, 1221, 5387, 1220, + 10789, 5759, 2699, 7711, 5880, + 10789, 5759, 2758, + 10789, 5759, 2760, + 10789, 5759, 2766, + 10789, 5759, 2767, 5387, 2767, 671, 5387, 670, + 10789, 5759, 2822, + 10789, 5759, 2823, 7711, 1, 5445, 236, + 10789, 5759, 2823, 7711, 1, 5445, 392, + 10789, 5759, 2823, 7711, 76, + 10789, 5759, 2823, 7711, 236, + 10789, 5759, 2823, 7711, 580, + 10789, 5759, 2823, 7711, 581, 5445, 106, + 10789, 5759, 2823, 7711, 581, 5445, 736, + 10789, 5759, 2823, 7711, 2110, + 10789, 5759, 2824, + 10789, 5759, 2828, + 10789, 5759, 2832, + 10789, 5759, 2833, 7711, 0, + 10789, 5759, 2833, 7711, 41, 5445, 1304, + 10789, 5759, 2833, 7711, 216, + 10789, 5759, 2833, 7711, 230, + 10789, 5759, 2833, 7711, 236, + 10789, 5759, 2833, 7711, 272, + 10789, 5759, 2833, 7711, 314, + 10789, 5759, 2833, 7711, 462, + 10789, 5759, 2833, 7711, 576, + 10789, 5759, 2833, 7711, 588, + 10789, 5759, 2833, 7711, 760, + 10789, 5759, 2833, 7711, 1060, + 10789, 5759, 2833, 7711, 1212, + 10789, 5759, 2833, 7711, 1220, + 10789, 5759, 2833, 7711, 1482, + 10789, 5759, 2833, 7711, 1498, + 10789, 5759, 2833, 7711, 1822, + 10789, 5759, 2833, 7711, 1922, + 10789, 5759, 2833, 7711, 2518, + 10789, 5759, 2833, 7711, 4241, 5898, + 10789, 5759, 2833, 7711, 5756, + 10789, 5759, 2833, 7711, 7774, + 10789, 5759, 2833, 7711, 7954, + 10789, 5759, 2836, + 10789, 5759, 2837, 7711, 0, + 10789, 5759, 2837, 7711, 326, + 10789, 5759, 2837, 7711, 1696, + 10789, 5759, 2837, 7711, 5880, + 10789, 5759, 2840, + 10789, 5759, 2841, 7711, 8338, + 10789, 5759, 2842, + 10789, 5759, 3122, + 10789, 5759, 3136, + 10789, 5759, 3158, + 10789, 5759, 3160, + 10789, 5759, 3161, 4703, 5898, + 10789, 5759, 3164, + 10789, 5759, 3188, + 10789, 5759, 3189, 7711, 0, + 10789, 5759, 3190, + 10789, 5759, 3242, + 10789, 5759, 3256, + 10789, 5759, 3257, 7711, 2518, + 10789, 5759, 3266, + 10789, 5759, 3270, + 10789, 5759, 3271, 7711, 1696, + 10789, 5759, 3280, + 10789, 5759, 3698, + 10789, 5759, 3820, + 10789, 5759, 4088, + 10789, 5759, 4094, + 10789, 5759, 4122, + 10789, 5759, 4124, + 10789, 5759, 4125, 4358, + 10789, 5759, 4125, 4359, 4358, + 10789, 5759, 4126, + 10789, 5759, 4132, + 10789, 5759, 4154, + 10789, 5759, 4156, + 10789, 5759, 4164, + 10789, 5759, 4166, + 10789, 5759, 4174, + 10789, 5759, 4175, 7711, 0, + 10789, 5759, 4175, 7711, 1, 5445, 1736, + 10789, 5759, 4175, 7711, 1, 5445, 1737, 7711, 1736, + 10789, 5759, 4175, 7711, 80, + 10789, 5759, 4175, 7711, 236, + 10789, 5759, 4175, 7711, 237, 4358, + 10789, 5759, 4175, 7711, 332, + 10789, 5759, 4175, 7711, 340, + 10789, 5759, 4175, 7711, 354, + 10789, 5759, 4175, 7711, 580, + 10789, 5759, 4175, 7711, 588, + 10789, 5759, 4175, 7711, 750, + 10789, 5759, 4175, 7711, 1483, 4358, + 10789, 5759, 4175, 7711, 1682, + 10789, 5759, 4175, 7711, 1737, 7711, 1736, + 10789, 5759, 4175, 7711, 4125, 4358, + 10789, 5759, 4175, 7711, 4125, 4359, 4358, + 10789, 5759, 4175, 7711, 8338, + 10789, 5759, 4175, 7711, 8339, 9732, + 10789, 5759, 4234, + 10789, 5759, 4235, 9967, 4234, + 10789, 5759, 4240, + 10789, 5759, 4241, 5387, 4240, + 10789, 5759, 4241, 5898, + 10789, 5759, 4241, 9967, 4240, + 10789, 5759, 4242, + 10789, 5759, 4334, + 10789, 5759, 4335, 4358, + 10789, 5759, 4336, + 10789, 5759, 4337, 7711, 1, 5445, 1482, + 10789, 5759, 4337, 7711, 355, 5445, 1482, + 10789, 5759, 4337, 7711, 462, + 10789, 5759, 4337, 7711, 1482, + 10789, 5759, 4337, 7711, 4241, 5898, + 10789, 5759, 4338, + 10789, 5759, 4339, 5898, + 10789, 5759, 4339, 7711, 750, + 10789, 5759, 4339, 7711, 5880, + 10789, 5759, 4339, 9967, 4338, + 10789, 5759, 4366, + 10789, 5759, 4544, + 10789, 5759, 4545, 7711, 80, + 10789, 5759, 4545, 7711, 588, + 10789, 5759, 4545, 7711, 1344, + 10789, 5759, 4545, 7711, 4884, + 10789, 5759, 4545, 7711, 8338, + 10789, 5759, 4546, + 10789, 5759, 4596, + 10789, 5759, 4597, 5387, 4597, 832, + 10789, 5759, 4597, 5387, 4597, 9732, + 10789, 5759, 4606, + 10789, 5759, 4704, + 10789, 5759, 4706, + 10789, 5759, 4708, + 10789, 5759, 4710, + 10789, 5759, 4711, 5387, 4710, + 10789, 5759, 4714, + 10789, 5759, 4716, + 10789, 5759, 4764, + 10789, 5759, 4884, + 10789, 5759, 4928, + 10789, 5759, 5030, + 10789, 5759, 5031, 5387, 5030, + 10789, 5759, 5031, 5387, 5031, 7711, 1, 5445, 392, + 10789, 5759, 5031, 7711, 0, + 10789, 5759, 5031, 7711, 670, + 10789, 5759, 5031, 7711, 1696, + 10789, 5759, 5031, 9967, 5030, + 10789, 5759, 5042, + 10789, 5759, 5043, 7711, 2525, 5898, + 10789, 5759, 5043, 10266, + 10789, 5759, 5043, 10377, 5042, + 10789, 5759, 5044, + 10789, 5759, 5278, + 10789, 5759, 5662, + 10789, 5759, 5663, 7711, 0, + 10789, 5759, 5663, 7711, 40, + 10789, 5759, 5663, 7711, 41, 5445, 0, + 10789, 5759, 5663, 7711, 396, + 10789, 5759, 5663, 7711, 750, + 10789, 5759, 5663, 7711, 2766, + 10789, 5759, 5663, 7711, 4338, + 10789, 5759, 5663, 7711, 5720, + 10789, 5759, 5664, + 10789, 5759, 5682, + 10789, 5759, 5692, + 10789, 5759, 5693, 7711, 0, + 10789, 5759, 5693, 7711, 272, + 10789, 5759, 5696, + 10789, 5759, 5697, 7711, 0, + 10789, 5759, 5697, 7711, 754, + 10789, 5759, 5697, 7711, 1012, + 10789, 5759, 5697, 7711, 1220, + 10789, 5759, 5697, 7711, 1482, + 10789, 5759, 5697, 7711, 1483, 4358, + 10789, 5759, 5697, 7711, 1820, + 10789, 5759, 5697, 7711, 1950, + 10789, 5759, 5697, 7711, 2488, + 10789, 5759, 5697, 7711, 6534, + 10789, 5759, 5697, 7711, 8374, + 10789, 5759, 5702, + 10789, 5759, 5703, 5387, 5703, 833, 5387, 832, + 10789, 5759, 5703, 5898, + 10789, 5759, 5720, + 10789, 5759, 5756, + 10789, 5759, 5757, 5387, 5757, 5720, + 10789, 5759, 5760, + 10789, 5759, 5840, + 10789, 5759, 5852, + 10789, 5759, 5880, + 10789, 5759, 6012, + 10789, 5759, 6046, + 10789, 5759, 6048, + 10789, 5759, 6049, 7711, 462, + 10789, 5759, 6049, 7711, 8338, + 10789, 5759, 6054, + 10789, 5759, 6062, + 10789, 5759, 6064, + 10789, 5759, 6256, + 10789, 5759, 6318, + 10789, 5759, 6396, + 10789, 5759, 6412, + 10789, 5759, 6430, + 10789, 5759, 6436, + 10789, 5759, 6464, + 10789, 5759, 6466, + 10789, 5759, 6534, + 10789, 5759, 6535, 5387, 6534, + 10789, 5759, 6648, + 10789, 5759, 6650, + 10789, 5759, 6708, + 10789, 5759, 6746, + 10789, 5759, 6818, + 10789, 5759, 6854, + 10789, 5759, 6860, + 10789, 5759, 6884, + 10789, 5759, 7040, + 10789, 5759, 7054, + 10789, 5759, 7074, + 10789, 5759, 7075, 7711, 0, + 10789, 5759, 7075, 7711, 1, 5445, 139, 5445, 236, + 10789, 5759, 7075, 7711, 1, 5445, 1220, + 10789, 5759, 7075, 7711, 1, 5445, 1736, + 10789, 5759, 7075, 7711, 40, + 10789, 5759, 7075, 7711, 41, 5445, 0, + 10789, 5759, 7075, 7711, 41, 5445, 41, 5445, 40, + 10789, 5759, 7075, 7711, 76, + 10789, 5759, 7075, 7711, 80, + 10789, 5759, 7075, 7711, 106, + 10789, 5759, 7075, 7711, 176, + 10789, 5759, 7075, 7711, 216, + 10789, 5759, 7075, 7711, 236, + 10789, 5759, 7075, 7711, 243, 7711, 2110, + 10789, 5759, 7075, 7711, 272, + 10789, 5759, 7075, 7711, 273, 5445, 236, + 10789, 5759, 7075, 7711, 273, 5445, 354, + 10789, 5759, 7075, 7711, 314, + 10789, 5759, 7075, 7711, 354, + 10789, 5759, 7075, 7711, 368, + 10789, 5759, 7075, 7711, 369, 5445, 176, + 10789, 5759, 7075, 7711, 396, + 10789, 5759, 7075, 7711, 561, 5445, 1, 5445, 547, 5445, 392, + 10789, 5759, 7075, 7711, 581, 5445, 736, + 10789, 5759, 7075, 7711, 588, + 10789, 5759, 7075, 7711, 737, 6313, 5898, + 10789, 5759, 7075, 7711, 750, + 10789, 5759, 7075, 7711, 966, + 10789, 5759, 7075, 7711, 1220, + 10789, 5759, 7075, 7711, 1304, + 10789, 5759, 7075, 7711, 1305, 5445, 1304, + 10789, 5759, 7075, 7711, 1344, + 10789, 5759, 7075, 7711, 1483, 4358, + 10789, 5759, 7075, 7711, 1632, + 10789, 5759, 7075, 7711, 1682, + 10789, 5759, 7075, 7711, 1688, + 10789, 5759, 7075, 7711, 1689, 5445, 243, 5445, 0, + 10789, 5759, 7075, 7711, 1820, + 10789, 5759, 7075, 7711, 2519, 5445, 2584, + 10789, 5759, 7075, 7711, 2584, + 10789, 5759, 7075, 7711, 2638, + 10789, 5759, 7075, 7711, 2836, + 10789, 5759, 7075, 7711, 4884, + 10789, 5759, 7075, 7711, 5030, + 10789, 5759, 7075, 7711, 5720, + 10789, 5759, 7075, 7711, 5721, 5445, 5720, + 10789, 5759, 7075, 7711, 5880, + 10789, 5759, 7075, 7711, 7074, + 10789, 5759, 7075, 7711, 7545, 5445, 4339, 5445, 6746, + 10789, 5759, 7075, 7711, 7545, 5445, 4339, 5898, + 10789, 5759, 7075, 9732, + 10789, 5759, 7076, + 10789, 5759, 7077, 4358, + 10789, 5759, 7077, 4359, 5387, 7077, 4359, 2518, + 10789, 5759, 7077, 7711, 2518, + 10789, 5759, 7077, 7711, 2519, 5445, 2584, + 10789, 5759, 7122, + 10789, 5759, 7123, 5387, 7122, + 10789, 5759, 7123, 9684, + 10789, 5759, 7123, 10377, 7122, + 10789, 5759, 7138, + 10789, 5759, 7196, + 10789, 5759, 7197, 4358, + 10789, 5759, 7197, 7711, 0, + 10789, 5759, 7197, 7711, 1, 5445, 144, + 10789, 5759, 7197, 7711, 144, + 10789, 5759, 7204, + 10789, 5759, 7248, + 10789, 5759, 7284, + 10789, 5759, 7285, 703, 7711, 106, + 10789, 5759, 7285, 703, 7711, 332, + 10789, 5759, 7285, 703, 7711, 396, + 10789, 5759, 7285, 703, 7711, 580, + 10789, 5759, 7285, 703, 7711, 1052, + 10789, 5759, 7285, 703, 7711, 1304, + 10789, 5759, 7285, 703, 7711, 1483, 4358, + 10789, 5759, 7285, 703, 7711, 4706, + 10789, 5759, 7285, 703, 7711, 7572, + 10789, 5759, 7285, 703, 7711, 7954, + 10789, 5759, 7285, 8361, 7711, 106, + 10789, 5759, 7285, 8361, 7711, 107, 40, + 10789, 5759, 7364, + 10789, 5759, 7374, + 10789, 5759, 7375, 7711, 588, + 10789, 5759, 7375, 7711, 670, + 10789, 5759, 7375, 7711, 1586, + 10789, 5759, 7375, 10377, 7374, + 10789, 5759, 7510, + 10789, 5759, 7516, + 10789, 5759, 7528, + 10789, 5759, 7534, + 10789, 5759, 7544, + 10789, 5759, 7572, + 10789, 5759, 7648, + 10789, 5759, 7762, + 10789, 5759, 7774, + 10789, 5759, 7775, 7711, 40, + 10789, 5759, 7778, + 10789, 5759, 7890, + 10789, 5759, 7954, + 10789, 5759, 7966, + 10789, 5759, 8242, + 10789, 5759, 8276, + 10789, 5759, 8338, + 10789, 5759, 8339, 5387, 8339, 7075, 7711, 41, 5387, 7075, 7711, 40, + 10789, 5759, 8339, 7075, 7711, 41, 5387, 7075, 7711, 40, + 10789, 5759, 8360, + 10789, 5759, 8361, 5387, 8360, + 10789, 5759, 8374, + 10789, 5759, 8376, + 10789, 5759, 8382, + 10789, 5759, 8408, + 10789, 5759, 8490, + 10789, 5759, 8494, + 10789, 5759, 8512, + 10789, 5759, 8513, 7711, 80, + 10789, 5759, 8513, 7711, 369, 5445, 4241, 5898, + 10789, 5759, 8513, 7711, 396, + 10789, 5759, 8513, 7711, 581, 5445, 736, + 10789, 5759, 8513, 7711, 736, + 10789, 5759, 8513, 7711, 737, 5445, 736, + 10789, 5759, 8513, 7711, 1304, + 10789, 5759, 8513, 7711, 2110, + 10789, 5759, 8513, 7711, 2518, + 10789, 5759, 8513, 7711, 2519, 5445, 1, 80, + 10789, 5759, 8513, 7711, 2519, 5445, 736, + 10789, 5759, 8513, 7711, 2519, 5445, 737, 5445, 736, + 10789, 5759, 8513, 7711, 2836, + 10789, 5759, 8664, + 10789, 5759, 8702, + 10789, 5759, 8706, + 10789, 5759, 8710, + 10789, 5759, 8764, + 10789, 5759, 8902, + 10789, 5759, 9306, + 10789, 5759, 9307, 7711, 1696, + 10789, 5759, 10518, + 10789, 9515, 5759, 2167, 9897, 2171, 7574, + 10789, 9515, 5759, 2167, 9897, 2171, 9614, + 10789, 9515, 5759, 2171, 3704, + 10789, 9515, 5759, 2171, 3822, + 10789, 9515, 5759, 2171, 6756, + 10789, 9515, 5759, 2171, 6830, + 10789, 9515, 5759, 2171, 6832, + 10789, 9515, 5759, 2171, 7520, + 10789, 9515, 5759, 2171, 7687, 4094, + 10789, 9515, 5759, 2171, 7687, 9817, 4213, 0, + 10789, 9515, 5759, 2171, 8159, 736, + 10789, 9515, 5759, 2171, 9615, 736, + 10789, 9515, 5759, 2541, 40, + 10789, 9515, 5759, 2541, 736, + 10789, 9515, 5759, 2541, 737, 5898, + 10789, 9515, 5759, 2541, 4094, + 10789, 9515, 5759, 2541, 6830, + 10789, 9515, 5759, 2541, 7516, + 10789, 9515, 5759, 2541, 9817, 4213, 3282, + 10789, 9515, 5759, 2779, 736, + 10789, 9515, 5759, 2779, 737, 5898, + 10789, 9515, 5759, 2779, 3704, + 10789, 9515, 5759, 2779, 3822, + 10789, 9515, 5759, 2779, 6756, + 10789, 9515, 5759, 2779, 6830, + 10789, 9515, 5759, 2779, 6832, + 10789, 9515, 5759, 2779, 7516, + 10789, 9515, 5759, 2779, 7520, + 10789, 9515, 5759, 2779, 8819, 4094, + 10789, 9515, 5759, 2779, 8819, 9817, 4213, 0, + 10789, 9515, 5759, 4201, 40, + 10789, 9515, 5759, 4201, 736, + 10789, 9515, 5759, 4201, 737, 5898, + 10789, 9515, 5759, 4201, 3704, + 10789, 9515, 5759, 4201, 3705, 9817, 4212, + 10789, 9515, 5759, 4201, 3822, + 10789, 9515, 5759, 4201, 4094, + 10789, 9515, 5759, 4201, 6830, + 10789, 9515, 5759, 4201, 6832, + 10789, 9515, 5759, 4201, 7516, + 10789, 9515, 5759, 4201, 7520, + 10789, 9515, 5759, 4201, 8719, 4094, + 10789, 9515, 5759, 4215, 40, + 10789, 9515, 5759, 4215, 736, + 10789, 9515, 5759, 4215, 737, 5898, + 10789, 9515, 5759, 4215, 3704, + 10789, 9515, 5759, 4215, 3705, 9817, 4212, + 10789, 9515, 5759, 4215, 3822, + 10789, 9515, 5759, 4215, 4094, + 10789, 9515, 5759, 4215, 6830, + 10789, 9515, 5759, 4215, 6832, + 10789, 9515, 5759, 4215, 7516, + 10789, 9515, 5759, 4215, 7520, + 10789, 9515, 5759, 4215, 9817, 4213, 7106, + 10789, 9515, 5759, 4215, 9817, 4213, 7107, 0, + 10789, 9515, 5759, 4215, 9817, 4213, 7107, 2, + 10789, 9515, 5759, 4215, 9817, 4213, 8410, + 10789, 9515, 5759, 5191, 40, + 10789, 9515, 5759, 5191, 736, + 10789, 9515, 5759, 5191, 4094, + 10789, 9515, 5759, 5191, 6830, + 10789, 9515, 5759, 5191, 7516, + 10789, 9515, 5759, 5191, 9817, 4213, 8310, + 10789, 9515, 5759, 5191, 9817, 4213, 8311, 0, + 10789, 9515, 5759, 5191, 9817, 4213, 9354, + 10789, 9515, 5759, 5191, 9817, 4213, 9356, + 10789, 9515, 5759, 6723, 40, + 10789, 9515, 5759, 6723, 736, + 10789, 9515, 5759, 6723, 4094, + 10789, 9515, 5759, 6723, 6830, + 10789, 9515, 5759, 6723, 7516, + 10789, 9515, 5759, 6723, 9817, 4213, 6066, + 10789, 9515, 5759, 6723, 9817, 4213, 7776, + 10789, 9515, 5759, 7509, 40, + 10789, 9515, 5759, 7509, 736, + 10789, 9515, 5759, 7509, 4094, + 10789, 9515, 5759, 7509, 6830, + 10789, 9515, 5759, 7509, 7516, + 10789, 9515, 5759, 7509, 9817, 4213, 4607, 0, + 10789, 9515, 5759, 7509, 9817, 4213, 4607, 2, + 10789, 9515, 5759, 7509, 9817, 4213, 6990, + 10789, 9515, 5759, 7517, 7711, 1213, 5445, 1922, + 10789, 9515, 5759, 7517, 7711, 1213, 5445, 4094, + 10789, 9515, 5759, 7695, 736, + 10789, 9515, 5759, 7695, 737, 5898, + 10789, 9515, 5759, 7695, 3704, + 10789, 9515, 5759, 7695, 3822, + 10789, 9515, 5759, 7695, 3823, 9817, 4212, + 10789, 9515, 5759, 7695, 4094, + 10789, 9515, 5759, 7695, 6830, + 10789, 9515, 5759, 7695, 6832, + 10789, 9515, 5759, 7695, 7516, + 10789, 9515, 5759, 7695, 7517, 9817, 4212, + 10789, 9515, 5759, 7695, 7520, + 10789, 9515, 5759, 7695, 7521, 9817, 4212, + 10789, 9515, 5759, 7695, 9817, 4213, 6752, + 10789, 9515, 5759, 7695, 9817, 4213, 6754, + 10789, 9515, 5759, 11136, + 10789, 9515, 5759, 11138, + 10789, 12133, 5759, 2167, 9897, 6129, 9178, + 10789, 12133, 5759, 10001, 6610, + 10789, 12133, 5759, 10001, 10644, + 10789, 12133, 5759, 10677, 6610, + 10797, 8775, 7101, 601, 721, 11648, + 10797, 8775, 7101, 601, 721, 11649, 6121, 6104, + 10797, 8775, 7101, 601, 721, 11649, 6121, 8056, + 10797, 8775, 7101, 601, 721, 11649, 6121, 10642, + 10797, 8775, 7101, 4117, 721, 11648, + 10797, 8775, 7101, 4117, 721, 11649, 6121, 6104, + 10797, 8775, 7101, 4117, 721, 11649, 6121, 8056, + 10797, 8775, 7101, 4117, 721, 11649, 6121, 10642, + 10797, 8775, 7101, 10677, 721, 2725, 4848, + 10797, 8775, 7101, 10677, 721, 2725, 7442, + 10797, 8775, 7101, 10677, 721, 6104, + 10797, 8775, 7101, 10677, 721, 8005, 4848, + 10797, 8775, 7101, 10677, 721, 8005, 7442, + 10797, 8775, 7101, 10677, 6121, 8056, + 10797, 8775, 7101, 10677, 6121, 10642, + 10804, + 10817, 8548, + 10959, 2779, 8289, 6434, + 10959, 6434, + 10959, 6435, 569, 760, + 10959, 6435, 4221, 760, + 10959, 6435, 6121, 2697, 11096, + 10959, 6435, 6121, 2697, 11764, + 10959, 6435, 6121, 8077, 11096, + 10959, 6435, 6121, 8153, 8758, + 10959, 6435, 6121, 11649, 8758, + 10959, 6435, 11097, 429, 9811, 6434, + 10959, 6505, 6434, + 10959, 7821, 6434, + 10959, 7924, + 10959, 8097, 6434, + 10959, 8153, 6434, + 10959, 8561, 7944, + 10959, 8849, 6434, + 10959, 8963, 6434, + 10959, 9327, 6121, 3713, 4849, 569, 760, + 10959, 9327, 6121, 3713, 4849, 4221, 760, + 10959, 9327, 6121, 3713, 4849, 7991, 9811, 9327, 6121, 3713, 7442, + 10959, 9327, 6121, 3713, 4849, 7991, 10959, 9327, 6121, 3713, 7442, + 10959, 9327, 6121, 3713, 7443, 569, 760, + 10959, 9327, 6121, 3713, 7443, 4221, 760, + 10959, 9327, 6121, 3713, 11096, + 10959, 9327, 6121, 3713, 11764, + 10959, 11191, 6434, + 10963, 9120, + 10977, 8774, + 10978, + 10989, 5758, + 11011, 1809, 4876, + 11011, 2091, 5758, + 11011, 2941, 5758, + 11011, 3055, 5758, + 11011, 3873, 5758, + 11011, 4223, 5836, + 11011, 4849, 6627, 9050, + 11011, 4849, 7821, 12114, + 11011, 4849, 8745, 9050, + 11011, 4849, 12114, + 11011, 5445, 5758, + 11011, 6610, + 11011, 6616, + 11011, 6689, 2170, + 11011, 6689, 2540, + 11011, 6689, 2778, + 11011, 6689, 4200, + 11011, 6689, 4214, + 11011, 6689, 5190, + 11011, 6689, 6260, + 11011, 6689, 6722, + 11011, 6689, 7508, + 11011, 6689, 7694, + 11011, 6875, 7908, + 11011, 7089, 7593, 8405, 0, + 11011, 7089, 7593, 8405, 2, + 11011, 7089, 7593, 8405, 4, + 11011, 7089, 7593, 8405, 6, + 11011, 7089, 7593, 8405, 8, + 11011, 7089, 7593, 8405, 10, + 11011, 7089, 7593, 8405, 12, + 11011, 7089, 7593, 8405, 14, + 11011, 7089, 7593, 8405, 16, + 11011, 7089, 7593, 8405, 18, + 11011, 7089, 7593, 8405, 20, + 11011, 7089, 7593, 8405, 22, + 11011, 7089, 7593, 8405, 24, + 11011, 7089, 7593, 8405, 26, + 11011, 7089, 7593, 8405, 28, + 11011, 7089, 7593, 8405, 30, + 11011, 7089, 7593, 8405, 32, + 11011, 7089, 7593, 8405, 34, + 11011, 7089, 7593, 8405, 36, + 11011, 7089, 7593, 8405, 38, + 11011, 7089, 7593, 8405, 40, + 11011, 7089, 7593, 8405, 42, + 11011, 7089, 7593, 8405, 44, + 11011, 7089, 7593, 8405, 46, + 11011, 7089, 7593, 8405, 48, + 11011, 7089, 7593, 8405, 50, + 11011, 7089, 9063, 8405, 0, + 11011, 7089, 9063, 8405, 2, + 11011, 7089, 9063, 8405, 4, + 11011, 7089, 9063, 8405, 6, + 11011, 7089, 9063, 8405, 8, + 11011, 7089, 9063, 8405, 10, + 11011, 7089, 9063, 8405, 12, + 11011, 7089, 9063, 8405, 14, + 11011, 7089, 9063, 8405, 16, + 11011, 7089, 9063, 8405, 18, + 11011, 7089, 9063, 8405, 20, + 11011, 7089, 9063, 8405, 22, + 11011, 7089, 9063, 8405, 24, + 11011, 7089, 9063, 8405, 26, + 11011, 7089, 9063, 8405, 28, + 11011, 7089, 9063, 8405, 30, + 11011, 7089, 9063, 8405, 32, + 11011, 7089, 9063, 8405, 34, + 11011, 7089, 9063, 8405, 36, + 11011, 7089, 9063, 8405, 38, + 11011, 7089, 9063, 8405, 40, + 11011, 7089, 9063, 8405, 42, + 11011, 7089, 9063, 8405, 44, + 11011, 7089, 9063, 8405, 46, + 11011, 7089, 9063, 8405, 48, + 11011, 7089, 9063, 8405, 50, + 11011, 7387, 5758, + 11011, 7443, 6627, 9050, + 11011, 7443, 7821, 12114, + 11011, 7443, 8745, 9050, + 11011, 7443, 12114, + 11011, 7708, + 11011, 8017, 760, + 11011, 8129, 5758, + 11011, 8167, 5758, + 11011, 8432, + 11011, 8525, 5758, + 11011, 9581, 5758, + 11011, 9633, 9718, + 11011, 9718, + 11011, 9898, + 11011, 10469, 4926, + 11011, 10677, 4876, + 11011, 10708, + 11011, 11099, 5758, + 11011, 11195, 4926, + 11011, 11224, + 11011, 11424, + 11011, 11449, 7908, + 11011, 11451, 90, + 11011, 12017, 4926, + 11011, 12473, 5758, + 11011, 12478, + 11015, 11740, + 11031, 4849, 8077, 9050, + 11031, 6505, 8744, + 11031, 6801, 7101, 10676, + 11031, 7443, 8077, 9050, + 11031, 7821, 8056, + 11031, 8287, 8206, + 11031, 8287, 8405, 0, + 11031, 8287, 8405, 8, + 11031, 8287, 8405, 16, + 11031, 8287, 8405, 28, + 11031, 8287, 8405, 40, + 11031, 8287, 8405, 66, + 11031, 8287, 8405, 178, + 11031, 8287, 8405, 188, + 11031, 8287, 8405, 426, + 11031, 8287, 8405, 622, + 11031, 8287, 8405, 626, + 11031, 8287, 8405, 630, + 11031, 8287, 8405, 652, + 11031, 8287, 8405, 654, + 11031, 8287, 8405, 656, + 11031, 8287, 8405, 660, + 11031, 8287, 8405, 664, + 11031, 8287, 8405, 2908, + 11031, 8287, 8405, 2926, + 11031, 8287, 8405, 3012, + 11031, 8287, 8405, 3056, + 11031, 8287, 8405, 5770, + 11031, 8287, 8405, 6594, + 11031, 8287, 8405, 6912, + 11031, 8287, 8405, 6982, + 11031, 8287, 8405, 7166, + 11031, 8287, 8405, 7244, + 11031, 8287, 8405, 7372, + 11031, 8287, 8405, 7440, + 11031, 8287, 8405, 8362, + 11031, 8287, 8405, 8828, + 11031, 8287, 8405, 9086, + 11031, 8287, 8405, 9400, + 11031, 8287, 8405, 9588, + 11031, 8287, 8405, 9780, + 11031, 8287, 8405, 11248, + 11031, 8287, 8405, 11728, + 11031, 8287, 8405, 11758, + 11031, 8287, 8405, 11824, + 11031, 8287, 8405, 11832, + 11031, 8287, 8405, 12070, + 11031, 8287, 8405, 12094, + 11031, 8287, 8405, 12096, + 11031, 8287, 8405, 12144, + 11031, 8287, 8405, 12146, + 11031, 8287, 8405, 12150, + 11031, 8287, 8405, 12350, + 11031, 8287, 8405, 12352, + 11031, 8287, 8405, 12532, + 11031, 8287, 8405, 13006, + 11031, 8287, 8405, 13008, + 11031, 9811, 6434, + 11031, 10283, 8405, 0, + 11031, 10283, 8405, 8, + 11031, 10283, 8405, 16, + 11031, 10283, 8405, 26, + 11031, 10283, 8405, 28, + 11031, 10283, 8405, 40, + 11031, 10283, 8405, 236, + 11031, 10283, 8405, 238, + 11031, 10283, 8405, 242, + 11031, 10283, 8405, 246, + 11031, 10283, 8405, 250, + 11031, 10283, 8405, 306, + 11031, 10283, 8405, 310, + 11031, 10283, 8405, 314, + 11031, 10283, 8405, 322, + 11031, 10283, 8405, 326, + 11031, 10283, 8405, 364, + 11031, 10283, 8405, 368, + 11031, 10283, 8405, 374, + 11031, 10283, 8405, 380, + 11031, 10283, 8405, 384, + 11031, 10283, 8405, 392, + 11031, 10283, 8405, 396, + 11031, 10283, 8405, 404, + 11031, 10283, 8405, 412, + 11031, 10283, 8405, 416, + 11031, 10283, 8405, 510, + 11031, 10283, 8405, 512, + 11031, 10283, 8405, 514, + 11031, 10283, 8405, 516, + 11031, 10283, 8405, 520, + 11031, 10283, 8405, 524, + 11031, 10283, 8405, 526, + 11031, 10283, 8405, 532, + 11031, 10283, 8405, 536, + 11031, 10283, 8405, 546, + 11031, 10283, 8405, 556, + 11031, 10283, 8405, 560, + 11031, 10283, 8405, 564, + 11031, 10283, 8405, 568, + 11031, 10283, 8405, 576, + 11031, 10283, 8405, 622, + 11031, 10283, 8405, 632, + 11031, 10283, 8405, 652, + 11031, 10283, 8405, 660, + 11031, 10283, 8405, 664, + 11031, 10283, 8405, 7593, 0, + 11031, 10283, 8405, 7593, 8, + 11031, 10283, 8405, 7593, 16, + 11031, 10283, 8405, 7593, 28, + 11031, 10283, 8405, 7593, 40, + 11031, 10283, 8405, 7593, 576, + 11031, 10283, 8405, 7593, 652, + 11031, 10283, 8405, 7593, 660, + 11031, 10283, 8405, 7593, 664, + 11031, 10283, 8473, 1044, + 11031, 10283, 8921, 7605, 4926, + 11031, 10283, 12341, 7605, 4926, + 11031, 10959, 6434, + 11031, 11097, 6434, + 11031, 11765, 6434, + 11031, 12043, 4223, 5836, + 11031, 12043, 6616, + 11031, 13365, 11185, 7605, 4926, + 11035, 10773, 8456, + 11036, + 11041, 568, + 11041, 569, 721, 9705, 10410, + 11041, 6121, 1045, 6376, + 11051, 88, + 11052, + 11061, 8774, + 11063, 5444, + 11063, 7710, + 11063, 11228, + 11093, 731, 12901, 6434, + 11097, 2779, 8289, 6434, + 11097, 6105, 6434, + 11097, 6434, + 11097, 6435, 569, 760, + 11097, 6435, 569, 761, 5387, 11765, 6435, 569, 760, + 11097, 6435, 569, 6505, 9158, + 11097, 6435, 4221, 760, + 11097, 6435, 4221, 761, 569, 6505, 9158, + 11097, 6435, 5387, 11765, 6434, + 11097, 6435, 6121, 2697, 9810, + 11097, 6435, 6121, 2697, 10958, + 11097, 6435, 6121, 4530, + 11097, 6435, 6121, 4896, + 11097, 6435, 6121, 5445, 6490, + 11097, 6435, 6121, 5878, + 11097, 6435, 6121, 5879, 6121, 8153, 10677, 8758, + 11097, 6435, 6121, 5879, 6121, 10677, 8758, + 11097, 6435, 6121, 8151, 5832, + 11097, 6435, 6121, 8153, 10677, 8758, + 11097, 6435, 6121, 8758, + 11097, 6435, 6121, 10677, 8758, + 11097, 6435, 6377, 7551, 11765, 6434, + 11097, 6435, 6377, 7709, 10374, + 11097, 6435, 6377, 7919, 6741, 568, + 11097, 6435, 6377, 9633, 7709, 10374, + 11097, 6435, 6377, 9633, 7919, 6741, 568, + 11097, 6435, 9785, 46, + 11097, 6435, 9785, 8762, + 11097, 6435, 9785, 11098, + 11097, 6505, 6434, + 11097, 7821, 6434, + 11097, 8097, 6434, + 11097, 8153, 3993, 6434, + 11097, 8153, 6434, + 11097, 8153, 6435, 4221, 760, + 11097, 8153, 6435, 6121, 8758, + 11097, 8153, 6435, 6121, 10677, 8758, + 11097, 8153, 11430, + 11097, 8561, 7944, + 11097, 8849, 3993, 6434, + 11097, 8849, 6434, + 11097, 9327, 5387, 11765, 9326, + 11097, 9327, 6121, 3713, 601, 569, 760, + 11097, 9327, 6121, 3713, 601, 4221, 760, + 11097, 9327, 6121, 3713, 601, 6377, 4895, 3992, + 11097, 9327, 6121, 3713, 601, 6377, 11097, 9327, 6121, 3713, 4116, + 11097, 9327, 6121, 3713, 601, 6377, 11765, 9327, 6121, 3713, 600, + 11097, 9327, 6121, 3713, 4117, 569, 760, + 11097, 9327, 6121, 3713, 4117, 4221, 760, + 11097, 9327, 6121, 3713, 4117, 6377, 11765, 9327, 6121, 3713, 4116, + 11097, 9327, 6121, 3713, 4117, 6491, 4895, 3992, + 11097, 9327, 6121, 3713, 9810, + 11097, 9327, 6121, 3713, 10958, + 11097, 10531, 6434, + 11097, 11191, 6434, + 11097, 11430, + 11097, 11875, 6435, 4221, 760, + 11097, 11875, 6435, 6121, 5878, + 11097, 11875, 6435, 6121, 5879, 6121, 8153, 10677, 8758, + 11097, 11875, 6435, 6121, 5879, 6121, 10677, 8758, + 11097, 11875, 6435, 6121, 8153, 10677, 8758, + 11097, 11875, 6435, 6121, 10677, 8758, + 11097, 11875, 8849, 3993, 6434, + 11097, 12103, 6434, + 11099, 445, 6741, 568, + 11099, 445, 9705, 6741, 568, + 11099, 445, 9705, 6741, 569, 6121, 1045, 6376, + 11099, 445, 9705, 6741, 569, 6121, 1045, 6377, 7442, + 11099, 445, 9705, 6741, 569, 6121, 1045, 8318, + 11099, 445, 11621, 568, + 11099, 445, 11896, + 11099, 445, 12472, + 11099, 721, 2091, 11896, + 11099, 721, 12345, 2091, 6741, 568, + 11099, 835, 2091, 6741, 568, + 11099, 835, 2091, 11621, 568, + 11099, 5387, 6741, 568, + 11099, 5758, + 11099, 6121, 1044, + 11099, 6121, 8057, 8318, + 11099, 6121, 10469, 4927, 6376, + 11099, 6377, 9693, 445, 6740, + 11099, 6377, 9693, 6377, 12472, + 11099, 6377, 9705, 6741, 6377, 12473, 6377, 9705, 6740, + 11099, 6377, 11097, 6434, + 11099, 6377, 12007, 6741, 6377, 12472, + 11099, 6377, 12473, 6377, 12007, 6740, + 11099, 6741, 569, 445, 12472, + 11099, 8065, 115, 6628, + 11099, 8065, 115, 6629, 6377, 9705, 6740, + 11104, + 11111, 93, 8399, 4926, + 11111, 3997, 4926, + 11111, 5759, 8916, + 11111, 5759, 9824, + 11111, 5759, 9870, + 11111, 5759, 9904, + 11111, 6689, 2170, + 11111, 6689, 2540, + 11111, 6689, 2778, + 11111, 6689, 4200, + 11111, 6689, 4214, + 11111, 6689, 5190, + 11111, 6689, 6260, + 11111, 6689, 6722, + 11111, 6689, 7508, + 11111, 6689, 7694, + 11111, 7803, 5759, 8, + 11111, 7803, 5759, 16, + 11111, 7803, 5759, 28, + 11111, 7803, 5759, 40, + 11111, 7803, 5759, 58, + 11111, 7803, 5759, 72, + 11111, 7803, 5759, 92, + 11111, 7803, 5759, 162, + 11111, 7803, 5759, 266, + 11111, 7803, 5759, 440, + 11111, 7803, 5759, 606, + 11111, 7803, 5759, 9827, 22, + 11111, 7803, 5759, 9827, 34, + 11111, 7803, 5759, 9827, 344, + 11111, 7803, 5759, 9827, 518, + 11111, 8405, 0, + 11111, 8405, 8, + 11111, 8405, 16, + 11111, 8405, 28, + 11111, 8405, 40, + 11111, 8405, 58, + 11111, 8405, 72, + 11111, 8405, 92, + 11111, 8405, 100, + 11111, 8405, 116, + 11111, 8405, 138, + 11111, 8405, 162, + 11111, 8405, 216, + 11111, 8405, 236, + 11111, 8405, 266, + 11111, 8405, 292, + 11111, 8405, 306, + 11111, 8405, 332, + 11111, 8405, 364, + 11111, 8405, 392, + 11111, 8405, 440, + 11111, 8405, 462, + 11111, 8405, 510, + 11111, 8405, 524, + 11111, 8405, 556, + 11111, 8405, 606, + 11111, 8405, 610, + 11111, 8405, 652, + 11111, 8405, 792, + 11111, 8405, 884, + 11111, 8405, 974, + 11111, 8405, 996, + 11111, 8405, 1260, + 11111, 8405, 1512, + 11111, 8405, 1612, + 11111, 8405, 1796, + 11111, 8405, 2030, + 11111, 8405, 2076, + 11111, 8405, 2126, + 11111, 8405, 2212, + 11111, 8405, 2438, + 11111, 8405, 2516, + 11111, 8405, 2566, + 11111, 8405, 2678, + 11111, 8405, 2746, + 11111, 8405, 4016, + 11111, 8405, 4888, + 11111, 8405, 5994, + 11111, 8405, 8045, 20, + 11111, 8405, 8045, 22, + 11111, 8405, 8045, 26, + 11111, 8405, 8045, 344, + 11111, 8405, 8045, 410, + 11111, 8405, 8045, 518, + 11111, 8405, 9827, 22, + 11111, 8405, 9827, 34, + 11111, 8405, 9827, 344, + 11111, 8405, 9827, 518, + 11111, 8525, 2171, 9344, + 11111, 8525, 2171, 10624, + 11111, 8525, 2670, + 11111, 10203, 2171, 4388, + 11111, 10203, 2171, 9614, + 11111, 10203, 7695, 10466, + 11113, 9539, 11054, + 11123, 4215, 4112, + 11123, 4217, 11391, 10507, 2170, + 11123, 4217, 11391, 10507, 2778, + 11123, 4217, 11391, 10507, 7694, + 11123, 4223, 5836, + 11123, 5751, 10585, 9921, 8450, + 11123, 5963, 5781, 8306, + 11123, 6500, + 11123, 6610, + 11123, 6616, + 11123, 6689, 2170, + 11123, 6689, 2540, + 11123, 6689, 2778, + 11123, 6689, 4200, + 11123, 6689, 4214, + 11123, 6689, 5190, + 11123, 6689, 6260, + 11123, 6689, 6722, + 11123, 6689, 7508, + 11123, 6689, 7694, + 11123, 7803, 11228, + 11123, 8405, 0, + 11123, 8405, 8, + 11123, 8405, 16, + 11123, 8405, 28, + 11123, 8405, 40, + 11123, 8405, 100, + 11123, 8405, 138, + 11123, 8405, 162, + 11123, 8405, 196, + 11123, 8405, 216, + 11123, 8405, 292, + 11123, 8405, 306, + 11123, 8405, 332, + 11123, 8405, 364, + 11123, 8405, 392, + 11123, 8405, 426, + 11123, 8405, 462, + 11123, 8405, 496, + 11123, 8405, 510, + 11123, 8405, 524, + 11123, 8405, 556, + 11123, 8405, 590, + 11123, 8405, 622, + 11123, 8405, 652, + 11123, 8405, 670, + 11123, 8405, 717, 4237, 0, + 11123, 8405, 717, 4237, 16, + 11123, 8405, 717, 4237, 70, + 11123, 8405, 717, 4237, 116, + 11123, 8405, 717, 4237, 138, + 11123, 8405, 717, 4237, 306, + 11123, 8405, 717, 4237, 462, + 11123, 8405, 717, 4237, 556, + 11123, 8405, 717, 4237, 670, + 11123, 8405, 717, 4237, 974, + 11123, 8405, 717, 4237, 2030, + 11123, 8405, 717, 4237, 2076, + 11123, 8405, 717, 4237, 2212, + 11123, 8405, 717, 4237, 2566, + 11123, 8405, 717, 4237, 2746, + 11123, 8405, 717, 4237, 3146, + 11123, 8405, 717, 4237, 4389, 40, + 11123, 8405, 717, 4237, 4389, 652, + 11123, 8405, 717, 4237, 5994, + 11123, 8405, 717, 4237, 7695, 7972, + 11123, 8405, 717, 4237, 7972, + 11123, 8405, 717, 4237, 8092, + 11123, 8405, 717, 4237, 9138, + 11123, 8405, 717, 4237, 9802, + 11123, 8405, 717, 4237, 9825, 2170, + 11123, 8405, 717, 4237, 9871, 2170, + 11123, 8405, 717, 4237, 10267, 9802, + 11123, 8405, 722, + 11123, 8405, 884, + 11123, 8405, 888, + 11123, 8405, 1338, + 11123, 8405, 1612, + 11123, 8405, 1770, + 11123, 8405, 2516, + 11123, 8405, 2732, + 11123, 8405, 3150, + 11123, 8405, 3186, + 11123, 8405, 5751, 8, + 11123, 8405, 5751, 16, + 11123, 8405, 5751, 40, + 11123, 8405, 5751, 138, + 11123, 8405, 5751, 196, + 11123, 8405, 5751, 216, + 11123, 8405, 5751, 236, + 11123, 8405, 5751, 290, + 11123, 8405, 5751, 292, + 11123, 8405, 5751, 306, + 11123, 8405, 5751, 462, + 11123, 8405, 5751, 556, + 11123, 8405, 5751, 590, + 11123, 8405, 5751, 670, + 11123, 8405, 5751, 722, + 11123, 8405, 5751, 884, + 11123, 8405, 5751, 1204, + 11123, 8405, 5751, 1338, + 11123, 8405, 5751, 2378, + 11123, 8405, 5751, 2516, + 11123, 8405, 5751, 2732, + 11123, 8405, 5751, 3146, + 11123, 8405, 5963, 8, + 11123, 8405, 5963, 16, + 11123, 8405, 5963, 28, + 11123, 8405, 5963, 40, + 11123, 8405, 5963, 100, + 11123, 8405, 5963, 138, + 11123, 8405, 5963, 216, + 11123, 8405, 5963, 292, + 11123, 8405, 5963, 306, + 11123, 8405, 5963, 364, + 11123, 8405, 5963, 426, + 11123, 8405, 5963, 462, + 11123, 8405, 5963, 496, + 11123, 8405, 5963, 556, + 11123, 8405, 5963, 590, + 11123, 8405, 5963, 622, + 11123, 8405, 5963, 652, + 11123, 8405, 5963, 717, 4237, 556, + 11123, 8405, 5963, 717, 4237, 3146, + 11123, 8405, 5963, 722, + 11123, 8405, 5963, 884, + 11123, 8405, 5963, 1080, + 11123, 8405, 5963, 1204, + 11123, 8405, 5963, 1338, + 11123, 8405, 5963, 1516, + 11123, 8405, 5963, 2046, + 11123, 8405, 5963, 2732, + 11123, 8405, 5963, 4895, 7803, 5758, + 11123, 8405, 8439, 16, + 11123, 8405, 8439, 196, + 11123, 8405, 8439, 306, + 11123, 8405, 8439, 510, + 11123, 8405, 8439, 717, 4237, 116, + 11123, 8405, 8439, 717, 4237, 556, + 11123, 8405, 8439, 717, 4237, 670, + 11123, 8405, 8439, 717, 4237, 792, + 11123, 8405, 8439, 717, 4237, 944, + 11123, 8405, 8439, 717, 4237, 996, + 11123, 8405, 8439, 717, 4237, 1260, + 11123, 8405, 8439, 717, 4237, 1512, + 11123, 8405, 8439, 717, 4237, 1770, + 11123, 8405, 8439, 717, 4237, 2030, + 11123, 8405, 8439, 717, 4237, 2566, + 11123, 8405, 8439, 717, 4237, 2746, + 11123, 8405, 8439, 717, 4237, 3146, + 11123, 8405, 8439, 717, 4237, 4016, + 11123, 8405, 8439, 3146, + 11123, 8439, 4223, 5836, + 11123, 8439, 6616, + 11123, 8516, + 11123, 10154, + 11163, 11228, + 11169, 7337, 5758, + 11172, + 11173, 6121, 2667, 2724, + 11191, 7390, + 11191, 10261, 10374, + 11195, 4926, + 11205, 8775, 1177, 8879, 10434, + 11205, 8775, 1177, 8881, 10434, + 11205, 8775, 1177, 8883, 10434, + 11205, 8775, 1177, 8885, 10434, + 11205, 8775, 1177, 8887, 10434, + 11205, 8775, 1177, 8889, 10434, + 11205, 8775, 1177, 8891, 10434, + 11205, 8775, 1177, 9305, 11114, + 11207, 4926, + 11217, 10265, 9610, + 11224, + 11242, + 11245, 6408, + 11245, 6409, 9537, 600, + 11245, 6409, 9537, 4848, + 11261, 2170, + 11261, 2540, + 11261, 2778, + 11261, 4200, + 11261, 4214, + 11261, 4849, 12114, + 11261, 5190, + 11261, 5445, 5758, + 11261, 6260, + 11261, 6722, + 11261, 7172, + 11261, 7443, 12114, + 11261, 7508, + 11261, 7694, + 11261, 8167, 5758, + 11263, 2724, + 11263, 6121, 10260, + 11263, 8004, + 11265, 5759, 9558, + 11265, 5759, 10408, + 11265, 5759, 11158, + 11265, 5759, 11160, + 11265, 6689, 2170, + 11265, 6689, 2540, + 11265, 6689, 2778, + 11265, 6689, 4200, + 11265, 6689, 4214, + 11265, 6689, 5190, + 11265, 6689, 6260, + 11265, 6689, 6722, + 11265, 6689, 7508, + 11265, 6689, 7694, + 11265, 7803, 5759, 9560, + 11265, 7803, 5759, 9566, + 11265, 7803, 5759, 10402, + 11265, 7803, 5759, 10404, + 11265, 7803, 5759, 11710, + 11265, 7803, 5759, 11712, + 11265, 8405, 0, + 11265, 8405, 8, + 11265, 8405, 16, + 11265, 8405, 28, + 11265, 8405, 40, + 11265, 8405, 66, + 11265, 8405, 100, + 11265, 8405, 116, + 11265, 8405, 138, + 11265, 8405, 188, + 11265, 8405, 196, + 11265, 8405, 216, + 11265, 8405, 236, + 11265, 8405, 292, + 11265, 8405, 306, + 11265, 8405, 332, + 11265, 8405, 364, + 11265, 8405, 392, + 11265, 8405, 462, + 11265, 8405, 496, + 11265, 8405, 510, + 11265, 8405, 524, + 11265, 8405, 556, + 11265, 8405, 610, + 11265, 8405, 622, + 11265, 8405, 638, + 11265, 8405, 652, + 11265, 8405, 670, + 11265, 8405, 1612, + 11265, 8405, 2030, + 11265, 8405, 2126, + 11265, 8405, 2610, + 11265, 10775, 5759, 9564, + 11265, 10775, 5759, 10406, + 11265, 10775, 5759, 11154, + 11355, 5758, + 11355, 10303, 5758, + 11355, 10472, + 11357, 1177, 439, 2681, 7790, + 11357, 1177, 1550, + 11357, 1177, 1749, 445, 7180, + 11357, 1177, 3803, 11754, + 11357, 1177, 4150, + 11357, 1177, 4223, 8056, + 11357, 1177, 6702, + 11357, 1177, 6865, 569, 4944, + 11357, 1177, 6994, + 11357, 1177, 7174, + 11357, 1177, 7428, + 11357, 1177, 7644, + 11357, 1177, 7770, + 11357, 1177, 7810, + 11357, 1177, 7952, + 11357, 1177, 8036, + 11357, 1177, 8042, + 11357, 1177, 8065, 7186, + 11357, 1177, 8156, + 11357, 1177, 8222, + 11357, 1177, 8394, + 11357, 1177, 8618, + 11357, 1177, 8650, + 11357, 1177, 8976, + 11357, 1177, 9026, + 11357, 1177, 9100, + 11357, 1177, 9110, + 11357, 1177, 9168, + 11357, 1177, 9276, + 11357, 1177, 9341, 3696, + 11357, 1177, 9395, 7592, + 11357, 1177, 9402, + 11357, 1177, 9460, + 11357, 1177, 9466, + 11357, 1177, 9550, + 11357, 1177, 9574, + 11357, 1177, 9626, + 11357, 1177, 9696, + 11357, 1177, 9832, + 11357, 1177, 10168, + 11357, 1177, 10210, + 11357, 1177, 10232, + 11357, 1177, 10252, + 11357, 1177, 10486, + 11357, 1177, 10540, + 11357, 1177, 10550, + 11357, 1177, 10673, 445, 9836, + 11357, 1177, 10747, 2186, + 11357, 1177, 10764, + 11357, 1177, 10776, + 11357, 1177, 10792, + 11357, 1177, 10800, + 11357, 1177, 10972, + 11357, 1177, 10998, + 11357, 1177, 11002, + 11357, 1177, 11012, + 11357, 1177, 11013, 274, + 11357, 1177, 11024, + 11357, 1177, 11086, + 11357, 1177, 11210, + 11357, 1177, 11234, + 11357, 1177, 11454, + 11357, 1177, 11456, + 11357, 1177, 11462, + 11357, 1177, 11486, + 11357, 1177, 11610, + 11357, 1177, 11622, + 11357, 1177, 11702, + 11357, 1177, 11752, + 11357, 1177, 11888, + 11357, 1177, 11916, + 11357, 1177, 12012, + 11357, 1177, 12026, + 11357, 1177, 12118, + 11357, 1177, 12392, + 11357, 1177, 12430, + 11357, 1177, 12434, + 11357, 1177, 12436, + 11357, 1177, 12898, + 11357, 1177, 12923, 445, 11484, + 11357, 1177, 12936, + 11360, + 11387, 11205, 8774, + 11389, 12117, 8774, + 11391, 11770, + 11391, 11772, + 11391, 11774, + 11391, 11776, + 11391, 11778, + 11391, 11780, + 11391, 11782, + 11391, 11784, + 11391, 11786, + 11391, 12160, + 11391, 12162, + 11391, 12164, + 11391, 12166, + 11391, 12168, + 11391, 12170, + 11391, 12172, + 11391, 12174, + 11391, 12176, + 11391, 12178, + 11391, 12180, + 11391, 12182, + 11391, 12184, + 11391, 12186, + 11391, 12188, + 11391, 12190, + 11391, 12192, + 11391, 12194, + 11391, 12196, + 11391, 12198, + 11391, 12200, + 11391, 12202, + 11391, 12204, + 11391, 12206, + 11391, 12208, + 11391, 12210, + 11391, 12212, + 11391, 12214, + 11391, 12216, + 11391, 12218, + 11391, 12220, + 11391, 12222, + 11391, 12224, + 11391, 12226, + 11391, 12228, + 11391, 12230, + 11391, 12232, + 11391, 12234, + 11391, 12236, + 11391, 12238, + 11391, 12240, + 11391, 12242, + 11391, 12244, + 11391, 12246, + 11391, 12248, + 11391, 12250, + 11391, 12252, + 11391, 12254, + 11391, 12256, + 11391, 12258, + 11391, 12260, + 11391, 12262, + 11391, 12264, + 11391, 12266, + 11391, 12268, + 11391, 12270, + 11391, 12272, + 11391, 12274, + 11391, 12276, + 11391, 12278, + 11391, 12280, + 11391, 12282, + 11391, 12284, + 11391, 12286, + 11391, 12288, + 11391, 12290, + 11391, 12292, + 11391, 12294, + 11391, 12296, + 11391, 12298, + 11391, 12300, + 11391, 12302, + 11391, 12304, + 11391, 12306, + 11391, 12308, + 11391, 12310, + 11391, 12312, + 11391, 12314, + 11391, 12316, + 11391, 12318, + 11391, 12320, + 11391, 12322, + 11391, 12324, + 11391, 12326, + 11391, 12328, + 11391, 12330, + 11391, 12332, + 11391, 12334, + 11391, 12336, + 11391, 12338, + 11391, 12542, + 11391, 12544, + 11391, 12546, + 11391, 12548, + 11391, 12550, + 11391, 12552, + 11391, 12554, + 11391, 12556, + 11391, 12558, + 11391, 12560, + 11391, 12562, + 11391, 12564, + 11391, 12566, + 11391, 12568, + 11391, 12570, + 11391, 12572, + 11391, 12574, + 11391, 12576, + 11391, 12578, + 11391, 12580, + 11391, 12582, + 11391, 12584, + 11391, 12586, + 11391, 12588, + 11391, 12590, + 11391, 12592, + 11391, 12594, + 11391, 12596, + 11391, 12598, + 11391, 12600, + 11391, 12602, + 11391, 12604, + 11391, 12606, + 11391, 12608, + 11391, 12610, + 11391, 12612, + 11391, 12614, + 11391, 12616, + 11391, 12618, + 11391, 12620, + 11391, 12622, + 11391, 12624, + 11391, 12626, + 11391, 12628, + 11391, 12630, + 11391, 12632, + 11391, 12634, + 11391, 12636, + 11391, 12638, + 11391, 12640, + 11391, 12642, + 11391, 12644, + 11391, 12646, + 11391, 12648, + 11391, 12650, + 11391, 12652, + 11391, 12654, + 11391, 12656, + 11391, 12658, + 11391, 12660, + 11391, 12662, + 11391, 12664, + 11391, 12666, + 11391, 12668, + 11391, 12670, + 11391, 12672, + 11391, 12674, + 11391, 12676, + 11391, 12678, + 11391, 12680, + 11391, 12682, + 11391, 12684, + 11391, 12686, + 11391, 12688, + 11391, 12690, + 11391, 12692, + 11391, 12694, + 11391, 12696, + 11391, 12698, + 11391, 12700, + 11391, 12702, + 11391, 12704, + 11391, 12706, + 11391, 12708, + 11391, 12710, + 11391, 12712, + 11391, 12714, + 11391, 12716, + 11391, 12718, + 11391, 12720, + 11391, 12722, + 11391, 12724, + 11391, 12726, + 11391, 12728, + 11391, 12730, + 11391, 12732, + 11391, 12734, + 11391, 12736, + 11391, 12738, + 11391, 12740, + 11391, 12742, + 11391, 12744, + 11391, 12746, + 11391, 12748, + 11391, 12750, + 11391, 12752, + 11391, 12754, + 11391, 12756, + 11391, 12758, + 11391, 12760, + 11391, 12762, + 11391, 12764, + 11391, 12766, + 11391, 12768, + 11391, 12770, + 11391, 12772, + 11391, 12774, + 11391, 12776, + 11391, 12778, + 11391, 12780, + 11391, 12782, + 11391, 12784, + 11391, 12786, + 11391, 12788, + 11391, 12790, + 11391, 12792, + 11391, 12794, + 11391, 12796, + 11391, 12798, + 11391, 12800, + 11391, 12802, + 11391, 12804, + 11391, 12806, + 11391, 12808, + 11391, 12810, + 11391, 12812, + 11391, 12814, + 11391, 12816, + 11391, 12818, + 11391, 12820, + 11391, 12822, + 11391, 12824, + 11391, 12826, + 11391, 12828, + 11391, 12830, + 11391, 12832, + 11391, 12834, + 11391, 12836, + 11391, 12838, + 11391, 12840, + 11391, 12842, + 11391, 12844, + 11391, 12846, + 11391, 12848, + 11391, 12850, + 11391, 12852, + 11391, 12854, + 11424, + 11427, 2681, 7104, + 11445, 1809, 4876, + 11445, 10388, + 11449, 7908, + 11451, 90, + 11451, 7173, 5758, + 11452, + 11465, 11385, 8774, + 11475, 5238, + 11477, 436, + 11477, 5759, 4423, 9721, 1044, + 11477, 5759, 7282, + 11477, 5759, 8916, + 11477, 5759, 9824, + 11477, 5759, 9870, + 11477, 5759, 9904, + 11477, 5759, 11900, + 11477, 6379, 7908, + 11477, 6646, + 11477, 6689, 2170, + 11477, 6689, 2540, + 11477, 6689, 2778, + 11477, 6689, 4200, + 11477, 6689, 4214, + 11477, 6689, 5190, + 11477, 6689, 6260, + 11477, 6689, 6722, + 11477, 6689, 7508, + 11477, 6689, 7694, + 11477, 6875, 7908, + 11477, 7803, 5759, 8, + 11477, 7803, 5759, 16, + 11477, 7803, 5759, 28, + 11477, 7803, 5759, 40, + 11477, 7803, 5759, 58, + 11477, 7803, 5759, 72, + 11477, 7803, 5759, 92, + 11477, 7803, 5759, 266, + 11477, 7803, 5759, 606, + 11477, 7803, 5759, 7551, 8, + 11477, 7803, 5759, 7551, 28, + 11477, 7803, 5759, 8031, 8, + 11477, 7803, 5759, 8031, 28, + 11477, 7803, 5759, 9827, 22, + 11477, 7803, 5759, 9827, 34, + 11477, 7803, 5759, 9827, 344, + 11477, 7803, 5759, 9827, 518, + 11477, 8153, 6646, + 11477, 8405, 0, + 11477, 8405, 8, + 11477, 8405, 16, + 11477, 8405, 28, + 11477, 8405, 40, + 11477, 8405, 58, + 11477, 8405, 72, + 11477, 8405, 92, + 11477, 8405, 100, + 11477, 8405, 116, + 11477, 8405, 138, + 11477, 8405, 196, + 11477, 8405, 216, + 11477, 8405, 236, + 11477, 8405, 266, + 11477, 8405, 292, + 11477, 8405, 306, + 11477, 8405, 332, + 11477, 8405, 364, + 11477, 8405, 392, + 11477, 8405, 462, + 11477, 8405, 496, + 11477, 8405, 510, + 11477, 8405, 524, + 11477, 8405, 556, + 11477, 8405, 606, + 11477, 8405, 610, + 11477, 8405, 652, + 11477, 8405, 670, + 11477, 8405, 766, + 11477, 8405, 792, + 11477, 8405, 884, + 11477, 8405, 974, + 11477, 8405, 996, + 11477, 8405, 1250, + 11477, 8405, 1260, + 11477, 8405, 1512, + 11477, 8405, 1528, + 11477, 8405, 1612, + 11477, 8405, 1796, + 11477, 8405, 2030, + 11477, 8405, 2076, + 11477, 8405, 2126, + 11477, 8405, 2212, + 11477, 8405, 2410, + 11477, 8405, 2438, + 11477, 8405, 2516, + 11477, 8405, 2566, + 11477, 8405, 2678, + 11477, 8405, 2746, + 11477, 8405, 3110, + 11477, 8405, 4008, + 11477, 8405, 4016, + 11477, 8405, 4320, + 11477, 8405, 4748, + 11477, 8405, 4888, + 11477, 8405, 5234, + 11477, 8405, 5994, + 11477, 8405, 6658, + 11477, 8405, 7551, 0, + 11477, 8405, 7551, 8, + 11477, 8405, 7551, 28, + 11477, 8405, 8031, 0, + 11477, 8405, 8031, 8, + 11477, 8405, 8031, 28, + 11477, 8405, 9313, 5836, + 11477, 8405, 9827, 22, + 11477, 8405, 9827, 34, + 11477, 8405, 9827, 344, + 11477, 8405, 9827, 518, + 11477, 8755, 5759, 8892, + 11477, 8755, 5759, 9868, + 11477, 12391, 5758, + 11479, 9042, + 11605, 12492, + 11621, 568, + 11621, 6121, 4215, 4113, 6376, + 11641, 7593, 8405, 16, + 11641, 7593, 8405, 468, + 11641, 7593, 8405, 660, + 11641, 7593, 8405, 664, + 11641, 7593, 8405, 746, + 11641, 7593, 8405, 807, 3096, + 11641, 7593, 8405, 2176, + 11641, 7593, 8405, 2184, + 11641, 7593, 8405, 2516, + 11641, 7593, 8405, 2736, + 11641, 7593, 8405, 2808, + 11641, 7593, 8405, 3810, + 11641, 7593, 8405, 4198, + 11641, 7593, 8405, 4406, + 11641, 7593, 8405, 4626, + 11641, 7593, 8405, 4712, + 11641, 7593, 8405, 5718, + 11641, 7593, 8405, 6076, + 11641, 7593, 8405, 6188, + 11641, 7593, 8405, 6198, + 11641, 7593, 8405, 6200, + 11641, 7593, 8405, 6698, + 11641, 7593, 8405, 6710, + 11641, 7593, 8405, 6810, + 11641, 7593, 8405, 7210, + 11641, 7593, 8405, 7444, + 11641, 7593, 8405, 7590, + 11641, 7593, 8405, 7593, 3096, + 11641, 7593, 8405, 7593, 3097, 6121, 5878, + 11641, 7593, 8405, 7856, + 11641, 7593, 8405, 8050, + 11641, 7593, 8405, 8124, + 11641, 7593, 8405, 8606, + 11641, 7593, 8405, 8872, + 11641, 7593, 8405, 8958, + 11641, 7593, 8405, 9310, + 11641, 7593, 8405, 9363, 4626, + 11641, 7593, 8405, 9371, 807, 3096, + 11641, 7593, 8405, 9371, 7593, 3096, + 11641, 7593, 8405, 9372, + 11641, 7593, 8405, 9434, + 11641, 7593, 8405, 9486, + 11641, 7593, 8405, 9686, + 11641, 7593, 8405, 9727, 236, + 11641, 7593, 8405, 9850, + 11641, 7593, 8405, 10299, 9486, + 11641, 7593, 8405, 11867, 0, + 11641, 9063, 8405, 16, + 11641, 9063, 8405, 468, + 11641, 9063, 8405, 660, + 11641, 9063, 8405, 664, + 11641, 9063, 8405, 746, + 11641, 9063, 8405, 807, 3096, + 11641, 9063, 8405, 2176, + 11641, 9063, 8405, 2184, + 11641, 9063, 8405, 2516, + 11641, 9063, 8405, 2736, + 11641, 9063, 8405, 2808, + 11641, 9063, 8405, 3810, + 11641, 9063, 8405, 4198, + 11641, 9063, 8405, 4406, + 11641, 9063, 8405, 4626, + 11641, 9063, 8405, 4712, + 11641, 9063, 8405, 5718, + 11641, 9063, 8405, 6076, + 11641, 9063, 8405, 6188, + 11641, 9063, 8405, 6198, + 11641, 9063, 8405, 6200, + 11641, 9063, 8405, 6698, + 11641, 9063, 8405, 6710, + 11641, 9063, 8405, 6810, + 11641, 9063, 8405, 7210, + 11641, 9063, 8405, 7444, + 11641, 9063, 8405, 7590, + 11641, 9063, 8405, 7593, 3096, + 11641, 9063, 8405, 7593, 3097, 6121, 5878, + 11641, 9063, 8405, 7856, + 11641, 9063, 8405, 8050, + 11641, 9063, 8405, 8124, + 11641, 9063, 8405, 8606, + 11641, 9063, 8405, 8872, + 11641, 9063, 8405, 8958, + 11641, 9063, 8405, 9310, + 11641, 9063, 8405, 9363, 4626, + 11641, 9063, 8405, 9371, 807, 3096, + 11641, 9063, 8405, 9371, 7593, 3096, + 11641, 9063, 8405, 9372, + 11641, 9063, 8405, 9434, + 11641, 9063, 8405, 9486, + 11641, 9063, 8405, 9686, + 11641, 9063, 8405, 9727, 236, + 11641, 9063, 8405, 9850, + 11641, 9063, 8405, 10299, 9486, + 11641, 9063, 8405, 11867, 0, + 11646, + 11649, 760, + 11649, 4877, 10982, + 11649, 4923, 6121, 8759, 5758, + 11649, 5643, 8412, + 11649, 5643, 8414, + 11649, 5643, 8416, + 11649, 5643, 8418, + 11649, 6505, 9338, + 11649, 10154, + 11651, 8774, + 11661, 10256, + 11667, 5759, 761, 6376, + 11667, 5759, 1045, 6490, + 11667, 5759, 6548, + 11667, 5759, 8153, 5551, 6490, + 11667, 5759, 9824, + 11667, 5759, 9870, + 11667, 6689, 2170, + 11667, 6689, 2778, + 11667, 6689, 4214, + 11667, 6689, 7694, + 11667, 7803, 5759, 8, + 11667, 7803, 5759, 16, + 11667, 7803, 5759, 28, + 11667, 7803, 5759, 40, + 11667, 7803, 5759, 9827, 34, + 11667, 7803, 8399, 4926, + 11667, 8405, 0, + 11667, 8405, 100, + 11667, 8405, 116, + 11667, 8405, 138, + 11667, 8405, 216, + 11667, 8405, 236, + 11667, 8405, 292, + 11667, 8405, 306, + 11667, 8405, 332, + 11667, 8405, 364, + 11667, 8405, 392, + 11667, 8405, 462, + 11667, 8405, 510, + 11667, 8405, 524, + 11667, 8405, 556, + 11667, 8405, 610, + 11667, 8405, 652, + 11667, 8405, 670, + 11667, 8405, 792, + 11667, 8405, 884, + 11667, 8405, 974, + 11667, 8405, 996, + 11667, 8405, 1260, + 11667, 8405, 1612, + 11667, 8405, 1642, + 11667, 8405, 2076, + 11667, 8405, 2126, + 11667, 8405, 2212, + 11667, 8405, 2516, + 11667, 8405, 2566, + 11667, 8405, 2678, + 11667, 8405, 2746, + 11667, 8405, 4016, + 11667, 8405, 5994, + 11667, 8405, 7750, + 11667, 8525, 2171, 9344, + 11667, 8525, 2171, 10624, + 11667, 8525, 2670, + 11667, 8525, 8876, + 11667, 8916, + 11667, 12133, 1044, + 11667, 12133, 6646, + 11667, 12133, 7108, + 11667, 12133, 7114, + 11667, 12133, 7593, 8056, + 11667, 12133, 8056, + 11667, 12133, 8153, 6646, + 11667, 12133, 9965, 760, + 11667, 12133, 10318, + 11687, 8774, + 11700, + 11702, + 11725, 8153, 12132, + 11725, 8717, 12132, + 11727, 6129, 11228, + 11727, 8405, 238, + 11727, 8405, 468, + 11727, 8405, 710, + 11727, 8405, 714, + 11727, 8405, 788, + 11727, 8405, 1366, + 11727, 8405, 1578, + 11727, 8405, 1892, + 11727, 8405, 2110, + 11727, 8405, 2318, + 11727, 8405, 2658, + 11727, 8405, 2674, + 11727, 8405, 2916, + 11727, 8405, 3080, + 11727, 8405, 3126, + 11727, 8405, 4058, + 11727, 8405, 4238, + 11727, 8405, 4832, + 11727, 8405, 5568, + 11727, 8405, 5624, + 11727, 8405, 5652, + 11727, 8405, 5698, + 11727, 8525, 2170, + 11727, 8525, 2171, 9344, + 11727, 8525, 2670, + 11727, 8525, 8876, + 11731, 5758, + 11736, + 11740, + 11745, 10261, 10374, + 11747, 6741, 568, + 11749, 5758, + 11763, 731, 10763, 6434, + 11765, 2779, 8289, 6434, + 11765, 6105, 6434, + 11765, 6434, + 11765, 6435, 569, 760, + 11765, 6435, 569, 6505, 9158, + 11765, 6435, 4221, 760, + 11765, 6435, 4221, 761, 569, 6505, 9158, + 11765, 6435, 5387, 11097, 6434, + 11765, 6435, 6121, 2697, 9810, + 11765, 6435, 6121, 2697, 10958, + 11765, 6435, 6121, 4530, + 11765, 6435, 6121, 4896, + 11765, 6435, 6121, 5445, 6490, + 11765, 6435, 6121, 5878, + 11765, 6435, 6121, 5879, 6121, 8153, 10677, 8758, + 11765, 6435, 6121, 5879, 6121, 10677, 8758, + 11765, 6435, 6121, 8077, 10958, + 11765, 6435, 6121, 8151, 5832, + 11765, 6435, 6121, 8153, 10677, 8758, + 11765, 6435, 6121, 8758, + 11765, 6435, 6121, 10677, 8758, + 11765, 6435, 6377, 7551, 11097, 6434, + 11765, 6435, 6377, 7709, 10374, + 11765, 6435, 6377, 7919, 6741, 568, + 11765, 6435, 6377, 9633, 7709, 10374, + 11765, 6435, 6377, 9633, 7919, 6741, 568, + 11765, 6435, 9785, 46, + 11765, 6435, 9785, 10578, + 11765, 6435, 9785, 12472, + 11765, 7821, 6434, + 11765, 7821, 6435, 4221, 6102, + 11765, 8097, 6434, + 11765, 8153, 3993, 6434, + 11765, 8153, 6434, + 11765, 8153, 6435, 4221, 760, + 11765, 8153, 6435, 6121, 8758, + 11765, 8153, 6435, 6121, 10677, 8758, + 11765, 8153, 11430, + 11765, 8561, 7944, + 11765, 8849, 3993, 6434, + 11765, 8849, 6434, + 11765, 9327, 5387, 11097, 9326, + 11765, 9327, 6121, 3713, 601, 569, 760, + 11765, 9327, 6121, 3713, 601, 4221, 760, + 11765, 9327, 6121, 3713, 601, 6377, 4895, 3992, + 11765, 9327, 6121, 3713, 601, 6377, 11097, 9327, 6121, 3713, 600, + 11765, 9327, 6121, 3713, 601, 6377, 11765, 9327, 6121, 3713, 4116, + 11765, 9327, 6121, 3713, 4117, 569, 760, + 11765, 9327, 6121, 3713, 4117, 4221, 760, + 11765, 9327, 6121, 3713, 4117, 6377, 11097, 9327, 6121, 3713, 4116, + 11765, 9327, 6121, 3713, 4117, 6491, 4895, 3992, + 11765, 9327, 6121, 3713, 9810, + 11765, 9327, 6121, 3713, 10958, + 11765, 10531, 6434, + 11765, 11191, 6434, + 11765, 11430, + 11765, 11875, 6435, 4221, 760, + 11765, 11875, 6435, 6121, 5878, + 11765, 11875, 6435, 6121, 5879, 6121, 8153, 10677, 8758, + 11765, 11875, 6435, 6121, 5879, 6121, 10677, 8758, + 11765, 11875, 6435, 6121, 8153, 10677, 8758, + 11765, 11875, 6435, 6121, 10677, 8758, + 11765, 11875, 8849, 3993, 6434, + 11765, 12103, 6434, + 11769, 5759, 8916, + 11769, 5759, 9824, + 11769, 5759, 9870, + 11769, 6646, + 11769, 6689, 2170, + 11769, 6689, 2540, + 11769, 6689, 2778, + 11769, 6689, 4200, + 11769, 6689, 4214, + 11769, 6689, 5190, + 11769, 6689, 6260, + 11769, 6689, 6722, + 11769, 6689, 7508, + 11769, 6689, 7694, + 11769, 7803, 5759, 8, + 11769, 7803, 5759, 16, + 11769, 7803, 5759, 28, + 11769, 7803, 5759, 40, + 11769, 7803, 5759, 58, + 11769, 7803, 5759, 72, + 11769, 7803, 5759, 92, + 11769, 7803, 5759, 162, + 11769, 7803, 5759, 266, + 11769, 7803, 5759, 440, + 11769, 7803, 5759, 606, + 11769, 7803, 5759, 9827, 22, + 11769, 7803, 5759, 9827, 34, + 11769, 7803, 5759, 9827, 344, + 11769, 7803, 5759, 9827, 518, + 11769, 8153, 6646, + 11769, 8405, 0, + 11769, 8405, 8, + 11769, 8405, 16, + 11769, 8405, 28, + 11769, 8405, 40, + 11769, 8405, 58, + 11769, 8405, 72, + 11769, 8405, 92, + 11769, 8405, 100, + 11769, 8405, 116, + 11769, 8405, 138, + 11769, 8405, 162, + 11769, 8405, 216, + 11769, 8405, 236, + 11769, 8405, 266, + 11769, 8405, 292, + 11769, 8405, 306, + 11769, 8405, 332, + 11769, 8405, 364, + 11769, 8405, 392, + 11769, 8405, 440, + 11769, 8405, 462, + 11769, 8405, 510, + 11769, 8405, 524, + 11769, 8405, 556, + 11769, 8405, 606, + 11769, 8405, 610, + 11769, 8405, 652, + 11769, 8405, 792, + 11769, 8405, 884, + 11769, 8405, 974, + 11769, 8405, 996, + 11769, 8405, 1260, + 11769, 8405, 1512, + 11769, 8405, 1612, + 11769, 8405, 1796, + 11769, 8405, 2030, + 11769, 8405, 2076, + 11769, 8405, 2126, + 11769, 8405, 2212, + 11769, 8405, 2516, + 11769, 8405, 2566, + 11769, 8405, 2678, + 11769, 8405, 2746, + 11769, 8405, 4016, + 11769, 8405, 5994, + 11769, 8405, 9827, 22, + 11769, 8405, 9827, 34, + 11769, 8405, 9827, 344, + 11769, 8405, 9827, 518, + 11769, 10775, 5759, 6888, + 11793, 9611, 6121, 8005, 8064, + 11801, 5385, 826, + 11819, 7608, + 11859, 8022, + 11881, 8774, + 11893, 1611, 8774, + 11899, 10513, 7821, 11765, 6434, + 11905, 10212, + 11909, 8774, + 11910, + 11921, 568, + 11922, + 11924, + 12007, 6741, 569, 445, 11098, + 12007, 6741, 569, 445, 12472, + 12007, 9705, 6741, 569, 445, 11098, + 12007, 9705, 6741, 569, 445, 12472, + 12007, 9705, 11099, 445, 6741, 568, + 12007, 9705, 12473, 445, 6741, 568, + 12015, 568, + 12017, 4926, + 12017, 10469, 4926, + 12021, 7608, + 12041, 7382, + 12043, 4223, 5836, + 12043, 4389, 4193, 7608, + 12043, 6616, + 12043, 7097, 5965, 4926, + 12043, 7608, + 12043, 8525, 6260, + 12043, 8649, 5965, 4926, + 12043, 9099, 4926, + 12043, 10161, 5965, 4926, + 12043, 10799, 5965, 4926, + 12043, 11067, 4926, + 12043, 11353, 4877, 4183, 11229, 8774, + 12043, 11353, 8775, 1177, 973, 2170, + 12043, 11353, 8775, 1177, 973, 2540, + 12043, 11353, 8775, 1177, 973, 2670, + 12043, 11353, 8775, 1177, 973, 2778, + 12043, 11353, 8775, 1177, 973, 4200, + 12043, 11353, 8775, 1177, 973, 4214, + 12043, 11353, 8775, 1177, 973, 5190, + 12043, 11353, 8775, 1177, 973, 6722, + 12043, 11353, 8775, 1177, 973, 7508, + 12043, 11353, 8775, 1177, 973, 7694, + 12043, 11353, 8775, 1177, 973, 8162, + 12043, 11353, 8775, 1177, 973, 8820, + 12043, 11353, 8775, 1177, 973, 8874, + 12043, 11353, 8775, 1177, 973, 8876, + 12043, 11353, 8775, 1177, 973, 9286, + 12043, 11353, 8775, 1177, 973, 9700, + 12043, 11353, 8775, 1177, 973, 10150, + 12043, 11353, 8775, 1177, 973, 10200, + 12043, 11353, 8775, 1177, 973, 10360, + 12043, 11353, 8775, 1177, 973, 10622, + 12043, 11353, 8775, 1177, 973, 11232, + 12043, 11353, 8775, 1177, 973, 11854, + 12043, 11353, 8775, 1177, 973, 11868, + 12043, 11353, 8775, 1177, 973, 11870, + 12043, 11353, 8775, 1177, 973, 11872, + 12043, 11353, 8775, 1177, 973, 12374, + 12043, 11353, 8775, 1177, 973, 12376, + 12043, 11353, 8775, 1177, 973, 12378, + 12043, 11353, 8775, 1177, 973, 12888, + 12043, 11353, 8775, 1177, 973, 12890, + 12043, 11353, 8775, 1177, 973, 12892, + 12043, 11353, 8775, 1177, 1870, + 12043, 11353, 8775, 1177, 4541, 2170, + 12043, 11353, 8775, 1177, 4541, 2540, + 12043, 11353, 8775, 1177, 4541, 2670, + 12043, 11353, 8775, 1177, 4541, 2778, + 12043, 11353, 8775, 1177, 4541, 4200, + 12043, 11353, 8775, 1177, 4541, 4214, + 12043, 11353, 8775, 1177, 4541, 5190, + 12043, 11353, 8775, 1177, 4541, 6260, + 12043, 11353, 8775, 1177, 4541, 6722, + 12043, 11353, 8775, 1177, 4541, 7508, + 12043, 11353, 8775, 1177, 4541, 7694, + 12043, 11353, 8775, 1177, 4541, 8162, + 12043, 11353, 8775, 1177, 4541, 8874, + 12043, 11353, 8775, 1177, 4541, 8876, + 12043, 11353, 8775, 1177, 4541, 9286, + 12043, 11353, 8775, 1177, 4541, 9700, + 12043, 11353, 8775, 1177, 4541, 10150, + 12043, 11353, 8775, 1177, 4541, 10200, + 12043, 11353, 8775, 1177, 4541, 10360, + 12043, 11353, 8775, 1177, 4541, 10622, + 12043, 11353, 8775, 1177, 4541, 11232, + 12043, 11353, 8775, 1177, 4541, 11868, + 12043, 11353, 8775, 1177, 4541, 11872, + 12043, 11353, 8775, 1177, 4541, 12376, + 12043, 11353, 8775, 1177, 4541, 12892, + 12043, 11353, 8775, 1177, 4682, + 12043, 11353, 8775, 1177, 4684, + 12043, 11353, 8775, 1177, 6420, + 12043, 11353, 8775, 1177, 7136, + 12043, 11353, 8775, 1177, 7958, + 12043, 11353, 8775, 1177, 9374, + 12043, 11353, 8775, 1177, 9528, + 12043, 11353, 8775, 1177, 9990, + 12043, 11353, 8775, 1177, 10176, + 12043, 11353, 8775, 1177, 10368, + 12043, 11353, 8775, 1177, 11230, + 12043, 11391, 11054, + 12043, 11415, 1861, 4926, + 12043, 11415, 2171, 4926, + 12043, 11415, 2725, 4926, + 12043, 11415, 2779, 4926, + 12043, 11415, 4215, 4926, + 12043, 11415, 6717, 4926, + 12043, 11415, 6791, 4926, + 12043, 11415, 7687, 4926, + 12043, 11415, 7695, 4926, + 12043, 11415, 8005, 4926, + 12043, 11415, 8233, 4926, + 12043, 11415, 8291, 4926, + 12043, 11415, 8473, 4926, + 12043, 11415, 8681, 4926, + 12043, 11415, 9433, 4926, + 12043, 11415, 9633, 4926, + 12043, 11937, 10759, 4223, 10580, + 12043, 11937, 10759, 4849, 569, 7442, + 12043, 11937, 10759, 4849, 569, 8473, 721, 7442, + 12043, 11937, 10759, 6377, 569, 6490, + 12043, 11937, 10759, 6377, 569, 8473, 721, 6490, + 12043, 11937, 10759, 10386, + 12043, 11937, 10759, 10581, 4221, 4848, + 12043, 11937, 10759, 10581, 4221, 6376, + 12043, 11937, 10759, 10581, 4221, 6490, + 12043, 11937, 10759, 10581, 4221, 7121, 4848, + 12043, 11937, 10759, 10581, 4221, 7773, 4848, + 12043, 11937, 10759, 10581, 4221, 7773, 7442, + 12055, 8724, + 12058, + 12061, 11415, 7922, + 12061, 11415, 11228, + 12061, 11415, 11850, + 12063, 8197, 721, 4923, 5758, + 12064, + 12075, 7821, 11765, 6434, + 12108, + 12117, 5758, + 12122, + 12133, 7608, + 12135, 5758, + 12143, 10758, + 12156, + 12342, + 12355, 2170, + 12355, 2540, + 12355, 2778, + 12355, 4200, + 12355, 4214, + 12355, 4849, 12114, + 12355, 5190, + 12355, 5445, 5758, + 12355, 6260, + 12355, 6722, + 12355, 7089, 7593, 8405, 16, + 12355, 7089, 7593, 8405, 26, + 12355, 7172, + 12355, 7443, 12114, + 12355, 7508, + 12355, 7694, + 12355, 8167, 5758, + 12371, 12492, + 12383, 10643, 6121, 4849, 4389, 6504, + 12383, 10643, 6121, 7443, 4389, 6504, + 12396, + 12399, 445, 10780, + 12403, 2209, 2671, 10625, 5758, + 12403, 2209, 7171, 5758, + 12403, 3961, 5566, + 12403, 6689, 2170, + 12403, 6689, 2540, + 12403, 6689, 2778, + 12403, 6689, 4200, + 12403, 6689, 4214, + 12403, 6689, 5190, + 12403, 6689, 6260, + 12403, 6689, 6722, + 12403, 6689, 7508, + 12403, 6689, 7694, + 12403, 8233, 5566, + 12413, 9063, 4, + 12413, 9063, 14, + 12413, 9063, 16, + 12413, 9063, 34, + 12413, 9063, 50, + 12428, + 12461, 10346, + 12463, 6505, 8056, + 12463, 6505, 8744, + 12463, 6505, 9158, + 12463, 7821, 8056, + 12463, 7821, 8744, + 12463, 7821, 9158, + 12464, + 12467, 10513, 7821, 11765, 6434, + 12473, 445, 6741, 568, + 12473, 445, 9705, 6741, 568, + 12473, 445, 9705, 6741, 569, 6121, 1045, 6376, + 12473, 445, 9705, 6741, 569, 6121, 1045, 6377, 4848, + 12473, 445, 9705, 6741, 569, 6121, 1045, 8318, + 12473, 445, 11098, + 12473, 445, 11621, 568, + 12473, 445, 11896, + 12473, 721, 2091, 11896, + 12473, 721, 12345, 2091, 6741, 568, + 12473, 835, 2091, 6741, 568, + 12473, 835, 2091, 11621, 568, + 12473, 5387, 6741, 568, + 12473, 5758, + 12473, 6121, 1044, + 12473, 6121, 8057, 8318, + 12473, 6121, 10469, 4927, 6376, + 12473, 6377, 9693, 445, 6740, + 12473, 6377, 9693, 6377, 11098, + 12473, 6377, 9705, 6741, 6377, 11099, 6377, 9705, 6740, + 12473, 6377, 11099, 6377, 12007, 6740, + 12473, 6377, 11765, 6434, + 12473, 6377, 12007, 6741, 6377, 11098, + 12473, 6741, 569, 445, 11098, + 12473, 7991, 11098, + 12473, 8065, 115, 6628, + 12473, 8065, 115, 6629, 6377, 9705, 6740, + 12473, 12105, 11098, + 12478, + 12480, + 12492, + 12493, 6121, 1044, + 12493, 6121, 9437, 720, + 12493, 6121, 9546, + 12493, 6377, 761, 6377, 7768, + 12493, 6377, 7768, + 12493, 7991, 721, 8329, 6121, 12492, + 12505, 3803, 477, 8774, + 12505, 3803, 2217, 8774, + 12505, 3803, 2413, 8774, + 12505, 3803, 6689, 2170, + 12505, 3803, 6689, 2540, + 12505, 3803, 6689, 2778, + 12505, 3803, 6689, 4200, + 12505, 3803, 6689, 4214, + 12505, 3803, 6689, 5190, + 12505, 3803, 6689, 6260, + 12505, 3803, 6689, 6722, + 12505, 3803, 6689, 7508, + 12505, 3803, 6689, 7694, + 12505, 3803, 7023, 8774, + 12505, 3803, 7202, + 12505, 3803, 7593, 0, + 12505, 3803, 7593, 2, + 12505, 3803, 7593, 4, + 12505, 3803, 7593, 6, + 12505, 3803, 7593, 8, + 12505, 3803, 7593, 10, + 12505, 3803, 7593, 12, + 12505, 3803, 7593, 14, + 12505, 3803, 7593, 16, + 12505, 3803, 7593, 18, + 12505, 3803, 7593, 20, + 12505, 3803, 7593, 22, + 12505, 3803, 7593, 24, + 12505, 3803, 7593, 26, + 12505, 3803, 7593, 28, + 12505, 3803, 7593, 30, + 12505, 3803, 7593, 32, + 12505, 3803, 7593, 34, + 12505, 3803, 7593, 36, + 12505, 3803, 7593, 38, + 12505, 3803, 7593, 40, + 12505, 3803, 7593, 42, + 12505, 3803, 7593, 44, + 12505, 3803, 7593, 46, + 12505, 3803, 7593, 48, + 12505, 3803, 7593, 50, + 12505, 3803, 7593, 384, + 12505, 3803, 7593, 416, + 12505, 3803, 7593, 476, + 12505, 3803, 7593, 644, + 12505, 3803, 7593, 888, + 12505, 3803, 7593, 1128, + 12505, 3803, 7593, 2216, + 12505, 3803, 7593, 2250, + 12505, 3803, 7593, 2412, + 12505, 3803, 7593, 2658, + 12505, 3803, 7593, 3774, + 12505, 3803, 7593, 4614, + 12505, 3803, 7593, 6262, + 12505, 3803, 7593, 6406, + 12505, 3803, 7593, 6674, + 12505, 3803, 7593, 6789, 7568, + 12505, 3803, 7593, 6824, + 12505, 3803, 7593, 7022, + 12505, 3803, 7593, 7080, + 12505, 3803, 7593, 7316, + 12505, 3803, 7593, 7568, + 12505, 3803, 7593, 7682, + 12505, 3803, 7593, 9162, + 12505, 3803, 7593, 9270, + 12505, 3803, 7593, 9530, + 12505, 3803, 7593, 9808, + 12505, 3803, 7683, 8774, + 12505, 3803, 8325, 477, 8774, + 12505, 3803, 8325, 2217, 8774, + 12505, 3803, 8325, 2413, 8774, + 12505, 3803, 8325, 7023, 8774, + 12505, 3803, 8325, 7202, + 12505, 3803, 8325, 7593, 0, + 12505, 3803, 8325, 7593, 2, + 12505, 3803, 8325, 7593, 4, + 12505, 3803, 8325, 7593, 6, + 12505, 3803, 8325, 7593, 8, + 12505, 3803, 8325, 7593, 10, + 12505, 3803, 8325, 7593, 12, + 12505, 3803, 8325, 7593, 14, + 12505, 3803, 8325, 7593, 16, + 12505, 3803, 8325, 7593, 18, + 12505, 3803, 8325, 7593, 20, + 12505, 3803, 8325, 7593, 22, + 12505, 3803, 8325, 7593, 24, + 12505, 3803, 8325, 7593, 26, + 12505, 3803, 8325, 7593, 28, + 12505, 3803, 8325, 7593, 30, + 12505, 3803, 8325, 7593, 32, + 12505, 3803, 8325, 7593, 34, + 12505, 3803, 8325, 7593, 36, + 12505, 3803, 8325, 7593, 38, + 12505, 3803, 8325, 7593, 40, + 12505, 3803, 8325, 7593, 42, + 12505, 3803, 8325, 7593, 44, + 12505, 3803, 8325, 7593, 46, + 12505, 3803, 8325, 7593, 48, + 12505, 3803, 8325, 7593, 50, + 12505, 3803, 8325, 7593, 384, + 12505, 3803, 8325, 7593, 416, + 12505, 3803, 8325, 7593, 476, + 12505, 3803, 8325, 7593, 644, + 12505, 3803, 8325, 7593, 888, + 12505, 3803, 8325, 7593, 1128, + 12505, 3803, 8325, 7593, 2216, + 12505, 3803, 8325, 7593, 2250, + 12505, 3803, 8325, 7593, 2412, + 12505, 3803, 8325, 7593, 2658, + 12505, 3803, 8325, 7593, 3774, + 12505, 3803, 8325, 7593, 4614, + 12505, 3803, 8325, 7593, 6262, + 12505, 3803, 8325, 7593, 6406, + 12505, 3803, 8325, 7593, 6674, + 12505, 3803, 8325, 7593, 6789, 7568, + 12505, 3803, 8325, 7593, 6824, + 12505, 3803, 8325, 7593, 7022, + 12505, 3803, 8325, 7593, 7080, + 12505, 3803, 8325, 7593, 7316, + 12505, 3803, 8325, 7593, 7568, + 12505, 3803, 8325, 7593, 7682, + 12505, 3803, 8325, 7593, 9270, + 12505, 3803, 8325, 7593, 9530, + 12505, 3803, 8325, 7593, 9808, + 12505, 3803, 8325, 7683, 8774, + 12505, 3803, 8325, 9063, 0, + 12505, 3803, 8325, 9063, 2, + 12505, 3803, 8325, 9063, 4, + 12505, 3803, 8325, 9063, 6, + 12505, 3803, 8325, 9063, 8, + 12505, 3803, 8325, 9063, 10, + 12505, 3803, 8325, 9063, 12, + 12505, 3803, 8325, 9063, 14, + 12505, 3803, 8325, 9063, 16, + 12505, 3803, 8325, 9063, 18, + 12505, 3803, 8325, 9063, 20, + 12505, 3803, 8325, 9063, 22, + 12505, 3803, 8325, 9063, 24, + 12505, 3803, 8325, 9063, 26, + 12505, 3803, 8325, 9063, 28, + 12505, 3803, 8325, 9063, 30, + 12505, 3803, 8325, 9063, 32, + 12505, 3803, 8325, 9063, 34, + 12505, 3803, 8325, 9063, 36, + 12505, 3803, 8325, 9063, 38, + 12505, 3803, 8325, 9063, 40, + 12505, 3803, 8325, 9063, 42, + 12505, 3803, 8325, 9063, 44, + 12505, 3803, 8325, 9063, 46, + 12505, 3803, 8325, 9063, 48, + 12505, 3803, 8325, 9063, 50, + 12505, 3803, 8325, 9063, 384, + 12505, 3803, 8325, 9063, 416, + 12505, 3803, 8325, 9063, 476, + 12505, 3803, 8325, 9063, 644, + 12505, 3803, 8325, 9063, 888, + 12505, 3803, 8325, 9063, 1128, + 12505, 3803, 8325, 9063, 2216, + 12505, 3803, 8325, 9063, 2250, + 12505, 3803, 8325, 9063, 2412, + 12505, 3803, 8325, 9063, 2658, + 12505, 3803, 8325, 9063, 3774, + 12505, 3803, 8325, 9063, 4614, + 12505, 3803, 8325, 9063, 6262, + 12505, 3803, 8325, 9063, 6406, + 12505, 3803, 8325, 9063, 6674, + 12505, 3803, 8325, 9063, 6824, + 12505, 3803, 8325, 9063, 7022, + 12505, 3803, 8325, 9063, 7080, + 12505, 3803, 8325, 9063, 7316, + 12505, 3803, 8325, 9063, 7568, + 12505, 3803, 8325, 9063, 7682, + 12505, 3803, 8325, 9063, 7683, 8774, + 12505, 3803, 8325, 9063, 9270, + 12505, 3803, 8325, 9063, 9530, + 12505, 3803, 8325, 9063, 9808, + 12505, 3803, 8325, 9271, 8774, + 12505, 3803, 8325, 9573, 12432, + 12505, 3803, 8679, 7593, 0, + 12505, 3803, 8679, 7593, 2, + 12505, 3803, 8679, 7593, 4, + 12505, 3803, 8679, 7593, 6, + 12505, 3803, 8679, 7593, 8, + 12505, 3803, 8679, 7593, 10, + 12505, 3803, 8679, 7593, 12, + 12505, 3803, 8679, 7593, 14, + 12505, 3803, 8679, 7593, 16, + 12505, 3803, 8679, 7593, 18, + 12505, 3803, 8679, 7593, 20, + 12505, 3803, 8679, 7593, 22, + 12505, 3803, 8679, 7593, 24, + 12505, 3803, 8679, 7593, 26, + 12505, 3803, 8679, 7593, 28, + 12505, 3803, 8679, 7593, 30, + 12505, 3803, 8679, 7593, 32, + 12505, 3803, 8679, 7593, 34, + 12505, 3803, 8679, 7593, 36, + 12505, 3803, 8679, 7593, 38, + 12505, 3803, 8679, 7593, 40, + 12505, 3803, 8679, 7593, 42, + 12505, 3803, 8679, 7593, 44, + 12505, 3803, 8679, 7593, 46, + 12505, 3803, 8679, 7593, 48, + 12505, 3803, 8679, 7593, 50, + 12505, 3803, 8679, 9063, 0, + 12505, 3803, 8679, 9063, 2, + 12505, 3803, 8679, 9063, 4, + 12505, 3803, 8679, 9063, 6, + 12505, 3803, 8679, 9063, 8, + 12505, 3803, 8679, 9063, 10, + 12505, 3803, 8679, 9063, 12, + 12505, 3803, 8679, 9063, 14, + 12505, 3803, 8679, 9063, 16, + 12505, 3803, 8679, 9063, 18, + 12505, 3803, 8679, 9063, 20, + 12505, 3803, 8679, 9063, 22, + 12505, 3803, 8679, 9063, 24, + 12505, 3803, 8679, 9063, 26, + 12505, 3803, 8679, 9063, 28, + 12505, 3803, 8679, 9063, 30, + 12505, 3803, 8679, 9063, 32, + 12505, 3803, 8679, 9063, 34, + 12505, 3803, 8679, 9063, 36, + 12505, 3803, 8679, 9063, 38, + 12505, 3803, 8679, 9063, 40, + 12505, 3803, 8679, 9063, 42, + 12505, 3803, 8679, 9063, 44, + 12505, 3803, 8679, 9063, 46, + 12505, 3803, 8679, 9063, 48, + 12505, 3803, 8679, 9063, 50, + 12505, 3803, 9063, 0, + 12505, 3803, 9063, 2, + 12505, 3803, 9063, 4, + 12505, 3803, 9063, 6, + 12505, 3803, 9063, 8, + 12505, 3803, 9063, 10, + 12505, 3803, 9063, 12, + 12505, 3803, 9063, 14, + 12505, 3803, 9063, 16, + 12505, 3803, 9063, 18, + 12505, 3803, 9063, 20, + 12505, 3803, 9063, 22, + 12505, 3803, 9063, 24, + 12505, 3803, 9063, 26, + 12505, 3803, 9063, 28, + 12505, 3803, 9063, 30, + 12505, 3803, 9063, 32, + 12505, 3803, 9063, 34, + 12505, 3803, 9063, 36, + 12505, 3803, 9063, 38, + 12505, 3803, 9063, 40, + 12505, 3803, 9063, 42, + 12505, 3803, 9063, 44, + 12505, 3803, 9063, 46, + 12505, 3803, 9063, 48, + 12505, 3803, 9063, 50, + 12505, 3803, 9063, 384, + 12505, 3803, 9063, 416, + 12505, 3803, 9063, 476, + 12505, 3803, 9063, 644, + 12505, 3803, 9063, 888, + 12505, 3803, 9063, 1128, + 12505, 3803, 9063, 2216, + 12505, 3803, 9063, 2250, + 12505, 3803, 9063, 2412, + 12505, 3803, 9063, 2658, + 12505, 3803, 9063, 3774, + 12505, 3803, 9063, 4614, + 12505, 3803, 9063, 6262, + 12505, 3803, 9063, 6406, + 12505, 3803, 9063, 6674, + 12505, 3803, 9063, 6824, + 12505, 3803, 9063, 7022, + 12505, 3803, 9063, 7080, + 12505, 3803, 9063, 7316, + 12505, 3803, 9063, 7568, + 12505, 3803, 9063, 7682, + 12505, 3803, 9063, 7683, 8774, + 12505, 3803, 9063, 9162, + 12505, 3803, 9063, 9270, + 12505, 3803, 9063, 9530, + 12505, 3803, 9063, 9808, + 12505, 3803, 9271, 8774, + 12505, 3803, 9295, 7593, 0, + 12505, 3803, 9295, 7593, 2, + 12505, 3803, 9295, 7593, 4, + 12505, 3803, 9295, 7593, 6, + 12505, 3803, 9295, 7593, 8, + 12505, 3803, 9295, 7593, 10, + 12505, 3803, 9295, 7593, 12, + 12505, 3803, 9295, 7593, 14, + 12505, 3803, 9295, 7593, 16, + 12505, 3803, 9295, 7593, 18, + 12505, 3803, 9295, 7593, 20, + 12505, 3803, 9295, 7593, 22, + 12505, 3803, 9295, 7593, 24, + 12505, 3803, 9295, 7593, 26, + 12505, 3803, 9295, 7593, 28, + 12505, 3803, 9295, 7593, 30, + 12505, 3803, 9295, 7593, 32, + 12505, 3803, 9295, 7593, 34, + 12505, 3803, 9295, 7593, 36, + 12505, 3803, 9295, 7593, 38, + 12505, 3803, 9295, 7593, 40, + 12505, 3803, 9295, 7593, 42, + 12505, 3803, 9295, 7593, 44, + 12505, 3803, 9295, 7593, 46, + 12505, 3803, 9295, 7593, 48, + 12505, 3803, 9295, 7593, 50, + 12505, 3803, 9295, 9063, 0, + 12505, 3803, 9295, 9063, 2, + 12505, 3803, 9295, 9063, 4, + 12505, 3803, 9295, 9063, 6, + 12505, 3803, 9295, 9063, 8, + 12505, 3803, 9295, 9063, 10, + 12505, 3803, 9295, 9063, 12, + 12505, 3803, 9295, 9063, 14, + 12505, 3803, 9295, 9063, 16, + 12505, 3803, 9295, 9063, 18, + 12505, 3803, 9295, 9063, 20, + 12505, 3803, 9295, 9063, 22, + 12505, 3803, 9295, 9063, 24, + 12505, 3803, 9295, 9063, 26, + 12505, 3803, 9295, 9063, 28, + 12505, 3803, 9295, 9063, 30, + 12505, 3803, 9295, 9063, 32, + 12505, 3803, 9295, 9063, 34, + 12505, 3803, 9295, 9063, 36, + 12505, 3803, 9295, 9063, 38, + 12505, 3803, 9295, 9063, 40, + 12505, 3803, 9295, 9063, 42, + 12505, 3803, 9295, 9063, 44, + 12505, 3803, 9295, 9063, 46, + 12505, 3803, 9295, 9063, 48, + 12505, 3803, 9295, 9063, 50, + 12505, 3803, 9573, 12432, + 12505, 4849, 6409, 9050, + 12505, 4849, 7821, 8745, 9050, + 12505, 4849, 7821, 10637, 7533, 9050, + 12505, 4849, 8153, 6409, 9050, + 12505, 4849, 10997, 12114, + 12505, 7443, 6409, 9050, + 12505, 7443, 7821, 8745, 9050, + 12505, 7443, 7821, 10637, 7533, 9050, + 12505, 7443, 8153, 6409, 9050, + 12505, 7443, 10997, 12114, + 12505, 8325, 477, 8774, + 12505, 8325, 2217, 8774, + 12505, 8325, 2413, 8774, + 12505, 8325, 7023, 8774, + 12505, 8325, 7202, + 12505, 8325, 7593, 0, + 12505, 8325, 7593, 2, + 12505, 8325, 7593, 4, + 12505, 8325, 7593, 6, + 12505, 8325, 7593, 8, + 12505, 8325, 7593, 10, + 12505, 8325, 7593, 12, + 12505, 8325, 7593, 16, + 12505, 8325, 7593, 18, + 12505, 8325, 7593, 20, + 12505, 8325, 7593, 22, + 12505, 8325, 7593, 24, + 12505, 8325, 7593, 26, + 12505, 8325, 7593, 28, + 12505, 8325, 7593, 30, + 12505, 8325, 7593, 32, + 12505, 8325, 7593, 34, + 12505, 8325, 7593, 36, + 12505, 8325, 7593, 38, + 12505, 8325, 7593, 40, + 12505, 8325, 7593, 42, + 12505, 8325, 7593, 44, + 12505, 8325, 7593, 46, + 12505, 8325, 7593, 48, + 12505, 8325, 7593, 50, + 12505, 8325, 7593, 384, + 12505, 8325, 7593, 416, + 12505, 8325, 7593, 476, + 12505, 8325, 7593, 644, + 12505, 8325, 7593, 888, + 12505, 8325, 7593, 1128, + 12505, 8325, 7593, 2216, + 12505, 8325, 7593, 2250, + 12505, 8325, 7593, 2412, + 12505, 8325, 7593, 2658, + 12505, 8325, 7593, 3774, + 12505, 8325, 7593, 4614, + 12505, 8325, 7593, 6262, + 12505, 8325, 7593, 6406, + 12505, 8325, 7593, 6674, + 12505, 8325, 7593, 6789, 7568, + 12505, 8325, 7593, 6824, + 12505, 8325, 7593, 7022, + 12505, 8325, 7593, 7080, + 12505, 8325, 7593, 7316, + 12505, 8325, 7593, 7568, + 12505, 8325, 7593, 7682, + 12505, 8325, 7593, 9185, 16, + 12505, 8325, 7593, 9185, 18, + 12505, 8325, 7593, 9270, + 12505, 8325, 7593, 9530, + 12505, 8325, 7593, 9808, + 12505, 8325, 7683, 8774, + 12505, 8325, 9063, 0, + 12505, 8325, 9063, 2, + 12505, 8325, 9063, 4, + 12505, 8325, 9063, 6, + 12505, 8325, 9063, 8, + 12505, 8325, 9063, 10, + 12505, 8325, 9063, 12, + 12505, 8325, 9063, 14, + 12505, 8325, 9063, 16, + 12505, 8325, 9063, 18, + 12505, 8325, 9063, 20, + 12505, 8325, 9063, 22, + 12505, 8325, 9063, 24, + 12505, 8325, 9063, 26, + 12505, 8325, 9063, 28, + 12505, 8325, 9063, 30, + 12505, 8325, 9063, 32, + 12505, 8325, 9063, 34, + 12505, 8325, 9063, 36, + 12505, 8325, 9063, 38, + 12505, 8325, 9063, 40, + 12505, 8325, 9063, 42, + 12505, 8325, 9063, 44, + 12505, 8325, 9063, 46, + 12505, 8325, 9063, 48, + 12505, 8325, 9063, 50, + 12505, 8325, 9063, 384, + 12505, 8325, 9063, 416, + 12505, 8325, 9063, 476, + 12505, 8325, 9063, 644, + 12505, 8325, 9063, 888, + 12505, 8325, 9063, 1128, + 12505, 8325, 9063, 2216, + 12505, 8325, 9063, 2250, + 12505, 8325, 9063, 2412, + 12505, 8325, 9063, 2658, + 12505, 8325, 9063, 3774, + 12505, 8325, 9063, 4614, + 12505, 8325, 9063, 6262, + 12505, 8325, 9063, 6406, + 12505, 8325, 9063, 6674, + 12505, 8325, 9063, 6824, + 12505, 8325, 9063, 7022, + 12505, 8325, 9063, 7080, + 12505, 8325, 9063, 7316, + 12505, 8325, 9063, 7568, + 12505, 8325, 9063, 7682, + 12505, 8325, 9063, 7683, 8774, + 12505, 8325, 9063, 9270, + 12505, 8325, 9063, 9530, + 12505, 8325, 9063, 9808, + 12505, 8325, 9271, 8774, + 12505, 8325, 9573, 12432, + 12505, 8679, 7593, 0, + 12505, 8679, 7593, 2, + 12505, 8679, 7593, 4, + 12505, 8679, 7593, 6, + 12505, 8679, 7593, 10, + 12505, 8679, 7593, 14, + 12505, 8679, 7593, 16, + 12505, 8679, 7593, 18, + 12505, 8679, 7593, 20, + 12505, 8679, 7593, 22, + 12505, 8679, 7593, 24, + 12505, 8679, 7593, 26, + 12505, 8679, 7593, 30, + 12505, 8679, 7593, 32, + 12505, 8679, 7593, 34, + 12505, 8679, 7593, 36, + 12505, 8679, 7593, 38, + 12505, 8679, 7593, 40, + 12505, 8679, 7593, 42, + 12505, 8679, 7593, 44, + 12505, 8679, 7593, 46, + 12505, 8679, 7593, 48, + 12505, 8679, 7593, 50, + 12505, 8679, 9063, 0, + 12505, 8679, 9063, 4, + 12505, 8679, 9063, 6, + 12505, 8679, 9063, 12, + 12505, 8679, 9063, 18, + 12505, 8679, 9063, 20, + 12505, 8679, 9063, 26, + 12505, 8679, 9063, 28, + 12505, 8679, 9063, 30, + 12505, 8679, 9063, 32, + 12505, 8679, 9063, 36, + 12505, 8679, 9063, 38, + 12505, 8679, 9063, 40, + 12505, 8679, 9063, 42, + 12505, 8679, 9063, 44, + 12505, 8679, 9063, 46, + 12505, 8679, 9063, 48, + 12505, 8679, 9063, 50, + 12505, 9295, 7593, 0, + 12505, 9295, 7593, 2, + 12505, 9295, 7593, 4, + 12505, 9295, 7593, 6, + 12505, 9295, 7593, 8, + 12505, 9295, 7593, 10, + 12505, 9295, 7593, 12, + 12505, 9295, 7593, 14, + 12505, 9295, 7593, 16, + 12505, 9295, 7593, 18, + 12505, 9295, 7593, 20, + 12505, 9295, 7593, 22, + 12505, 9295, 7593, 24, + 12505, 9295, 7593, 26, + 12505, 9295, 7593, 28, + 12505, 9295, 7593, 30, + 12505, 9295, 7593, 32, + 12505, 9295, 7593, 34, + 12505, 9295, 7593, 36, + 12505, 9295, 7593, 38, + 12505, 9295, 7593, 40, + 12505, 9295, 7593, 42, + 12505, 9295, 7593, 44, + 12505, 9295, 7593, 46, + 12505, 9295, 7593, 48, + 12505, 9295, 7593, 50, + 12505, 9295, 9063, 0, + 12505, 9295, 9063, 2, + 12505, 9295, 9063, 6, + 12505, 9295, 9063, 8, + 12505, 9295, 9063, 10, + 12505, 9295, 9063, 12, + 12505, 9295, 9063, 18, + 12505, 9295, 9063, 20, + 12505, 9295, 9063, 22, + 12505, 9295, 9063, 24, + 12505, 9295, 9063, 26, + 12505, 9295, 9063, 28, + 12505, 9295, 9063, 30, + 12505, 9295, 9063, 32, + 12505, 9295, 9063, 36, + 12505, 9295, 9063, 38, + 12505, 9295, 9063, 40, + 12505, 9295, 9063, 42, + 12505, 9295, 9063, 44, + 12505, 9295, 9063, 46, + 12505, 9295, 9063, 48, + 12505, 11129, 6689, 2170, + 12505, 11129, 6689, 2540, + 12505, 11129, 6689, 2778, + 12505, 11129, 6689, 4200, + 12505, 11129, 6689, 4214, + 12505, 11129, 6689, 5190, + 12505, 11129, 6689, 6260, + 12505, 11129, 6689, 6722, + 12505, 11129, 6689, 7508, + 12505, 11129, 6689, 7694, + 12505, 11129, 7593, 0, + 12505, 11129, 7593, 2, + 12505, 11129, 7593, 4, + 12505, 11129, 7593, 6, + 12505, 11129, 7593, 8, + 12505, 11129, 7593, 10, + 12505, 11129, 7593, 12, + 12505, 11129, 7593, 14, + 12505, 11129, 7593, 16, + 12505, 11129, 7593, 18, + 12505, 11129, 7593, 20, + 12505, 11129, 7593, 22, + 12505, 11129, 7593, 24, + 12505, 11129, 7593, 26, + 12505, 11129, 7593, 28, + 12505, 11129, 7593, 30, + 12505, 11129, 7593, 32, + 12505, 11129, 7593, 34, + 12505, 11129, 7593, 36, + 12505, 11129, 7593, 38, + 12505, 11129, 7593, 40, + 12505, 11129, 7593, 42, + 12505, 11129, 7593, 44, + 12505, 11129, 7593, 46, + 12505, 11129, 7593, 48, + 12505, 11129, 7593, 50, + 12505, 11129, 9063, 0, + 12505, 11129, 9063, 2, + 12505, 11129, 9063, 4, + 12505, 11129, 9063, 6, + 12505, 11129, 9063, 8, + 12505, 11129, 9063, 10, + 12505, 11129, 9063, 12, + 12505, 11129, 9063, 14, + 12505, 11129, 9063, 16, + 12505, 11129, 9063, 18, + 12505, 11129, 9063, 20, + 12505, 11129, 9063, 22, + 12505, 11129, 9063, 24, + 12505, 11129, 9063, 26, + 12505, 11129, 9063, 28, + 12505, 11129, 9063, 30, + 12505, 11129, 9063, 32, + 12505, 11129, 9063, 34, + 12505, 11129, 9063, 36, + 12505, 11129, 9063, 38, + 12505, 11129, 9063, 40, + 12505, 11129, 9063, 42, + 12505, 11129, 9063, 44, + 12505, 11129, 9063, 46, + 12505, 11129, 9063, 48, + 12505, 11129, 9063, 50, + 12505, 11767, 3803, 477, 8774, + 12505, 11767, 3803, 2217, 8774, + 12505, 11767, 3803, 2413, 8774, + 12505, 11767, 3803, 6689, 2170, + 12505, 11767, 3803, 6689, 2540, + 12505, 11767, 3803, 6689, 2778, + 12505, 11767, 3803, 6689, 4200, + 12505, 11767, 3803, 6689, 4214, + 12505, 11767, 3803, 6689, 5190, + 12505, 11767, 3803, 6689, 6260, + 12505, 11767, 3803, 6689, 6722, + 12505, 11767, 3803, 6689, 7508, + 12505, 11767, 3803, 6689, 7694, + 12505, 11767, 3803, 7023, 8774, + 12505, 11767, 3803, 7202, + 12505, 11767, 3803, 7593, 0, + 12505, 11767, 3803, 7593, 2, + 12505, 11767, 3803, 7593, 4, + 12505, 11767, 3803, 7593, 6, + 12505, 11767, 3803, 7593, 8, + 12505, 11767, 3803, 7593, 10, + 12505, 11767, 3803, 7593, 12, + 12505, 11767, 3803, 7593, 14, + 12505, 11767, 3803, 7593, 16, + 12505, 11767, 3803, 7593, 18, + 12505, 11767, 3803, 7593, 20, + 12505, 11767, 3803, 7593, 22, + 12505, 11767, 3803, 7593, 24, + 12505, 11767, 3803, 7593, 26, + 12505, 11767, 3803, 7593, 28, + 12505, 11767, 3803, 7593, 30, + 12505, 11767, 3803, 7593, 32, + 12505, 11767, 3803, 7593, 34, + 12505, 11767, 3803, 7593, 36, + 12505, 11767, 3803, 7593, 38, + 12505, 11767, 3803, 7593, 40, + 12505, 11767, 3803, 7593, 42, + 12505, 11767, 3803, 7593, 44, + 12505, 11767, 3803, 7593, 46, + 12505, 11767, 3803, 7593, 48, + 12505, 11767, 3803, 7593, 50, + 12505, 11767, 3803, 7593, 384, + 12505, 11767, 3803, 7593, 416, + 12505, 11767, 3803, 7593, 476, + 12505, 11767, 3803, 7593, 644, + 12505, 11767, 3803, 7593, 888, + 12505, 11767, 3803, 7593, 1128, + 12505, 11767, 3803, 7593, 2216, + 12505, 11767, 3803, 7593, 2250, + 12505, 11767, 3803, 7593, 2412, + 12505, 11767, 3803, 7593, 2658, + 12505, 11767, 3803, 7593, 3774, + 12505, 11767, 3803, 7593, 4614, + 12505, 11767, 3803, 7593, 6262, + 12505, 11767, 3803, 7593, 6406, + 12505, 11767, 3803, 7593, 6674, + 12505, 11767, 3803, 7593, 6789, 7568, + 12505, 11767, 3803, 7593, 6824, + 12505, 11767, 3803, 7593, 7022, + 12505, 11767, 3803, 7593, 7080, + 12505, 11767, 3803, 7593, 7316, + 12505, 11767, 3803, 7593, 7568, + 12505, 11767, 3803, 7593, 7682, + 12505, 11767, 3803, 7593, 9270, + 12505, 11767, 3803, 7593, 9530, + 12505, 11767, 3803, 7593, 9808, + 12505, 11767, 3803, 7683, 8774, + 12505, 11767, 3803, 8325, 477, 8774, + 12505, 11767, 3803, 8325, 2217, 8774, + 12505, 11767, 3803, 8325, 2413, 8774, + 12505, 11767, 3803, 8325, 7023, 8774, + 12505, 11767, 3803, 8325, 7202, + 12505, 11767, 3803, 8325, 7593, 0, + 12505, 11767, 3803, 8325, 7593, 2, + 12505, 11767, 3803, 8325, 7593, 4, + 12505, 11767, 3803, 8325, 7593, 6, + 12505, 11767, 3803, 8325, 7593, 8, + 12505, 11767, 3803, 8325, 7593, 10, + 12505, 11767, 3803, 8325, 7593, 12, + 12505, 11767, 3803, 8325, 7593, 14, + 12505, 11767, 3803, 8325, 7593, 16, + 12505, 11767, 3803, 8325, 7593, 18, + 12505, 11767, 3803, 8325, 7593, 20, + 12505, 11767, 3803, 8325, 7593, 22, + 12505, 11767, 3803, 8325, 7593, 24, + 12505, 11767, 3803, 8325, 7593, 26, + 12505, 11767, 3803, 8325, 7593, 28, + 12505, 11767, 3803, 8325, 7593, 30, + 12505, 11767, 3803, 8325, 7593, 32, + 12505, 11767, 3803, 8325, 7593, 34, + 12505, 11767, 3803, 8325, 7593, 36, + 12505, 11767, 3803, 8325, 7593, 38, + 12505, 11767, 3803, 8325, 7593, 40, + 12505, 11767, 3803, 8325, 7593, 42, + 12505, 11767, 3803, 8325, 7593, 44, + 12505, 11767, 3803, 8325, 7593, 46, + 12505, 11767, 3803, 8325, 7593, 48, + 12505, 11767, 3803, 8325, 7593, 50, + 12505, 11767, 3803, 8325, 7593, 384, + 12505, 11767, 3803, 8325, 7593, 416, + 12505, 11767, 3803, 8325, 7593, 476, + 12505, 11767, 3803, 8325, 7593, 644, + 12505, 11767, 3803, 8325, 7593, 888, + 12505, 11767, 3803, 8325, 7593, 1128, + 12505, 11767, 3803, 8325, 7593, 2216, + 12505, 11767, 3803, 8325, 7593, 2250, + 12505, 11767, 3803, 8325, 7593, 2412, + 12505, 11767, 3803, 8325, 7593, 2658, + 12505, 11767, 3803, 8325, 7593, 3774, + 12505, 11767, 3803, 8325, 7593, 4614, + 12505, 11767, 3803, 8325, 7593, 6262, + 12505, 11767, 3803, 8325, 7593, 6406, + 12505, 11767, 3803, 8325, 7593, 6674, + 12505, 11767, 3803, 8325, 7593, 6789, 7568, + 12505, 11767, 3803, 8325, 7593, 6824, + 12505, 11767, 3803, 8325, 7593, 7022, + 12505, 11767, 3803, 8325, 7593, 7080, + 12505, 11767, 3803, 8325, 7593, 7316, + 12505, 11767, 3803, 8325, 7593, 7568, + 12505, 11767, 3803, 8325, 7593, 7682, + 12505, 11767, 3803, 8325, 7593, 9270, + 12505, 11767, 3803, 8325, 7593, 9530, + 12505, 11767, 3803, 8325, 7593, 9808, + 12505, 11767, 3803, 8325, 7683, 8774, + 12505, 11767, 3803, 8325, 9063, 0, + 12505, 11767, 3803, 8325, 9063, 2, + 12505, 11767, 3803, 8325, 9063, 4, + 12505, 11767, 3803, 8325, 9063, 6, + 12505, 11767, 3803, 8325, 9063, 8, + 12505, 11767, 3803, 8325, 9063, 10, + 12505, 11767, 3803, 8325, 9063, 12, + 12505, 11767, 3803, 8325, 9063, 14, + 12505, 11767, 3803, 8325, 9063, 16, + 12505, 11767, 3803, 8325, 9063, 18, + 12505, 11767, 3803, 8325, 9063, 20, + 12505, 11767, 3803, 8325, 9063, 22, + 12505, 11767, 3803, 8325, 9063, 24, + 12505, 11767, 3803, 8325, 9063, 26, + 12505, 11767, 3803, 8325, 9063, 28, + 12505, 11767, 3803, 8325, 9063, 30, + 12505, 11767, 3803, 8325, 9063, 32, + 12505, 11767, 3803, 8325, 9063, 34, + 12505, 11767, 3803, 8325, 9063, 36, + 12505, 11767, 3803, 8325, 9063, 38, + 12505, 11767, 3803, 8325, 9063, 40, + 12505, 11767, 3803, 8325, 9063, 42, + 12505, 11767, 3803, 8325, 9063, 44, + 12505, 11767, 3803, 8325, 9063, 46, + 12505, 11767, 3803, 8325, 9063, 48, + 12505, 11767, 3803, 8325, 9063, 50, + 12505, 11767, 3803, 8325, 9063, 384, + 12505, 11767, 3803, 8325, 9063, 416, + 12505, 11767, 3803, 8325, 9063, 476, + 12505, 11767, 3803, 8325, 9063, 644, + 12505, 11767, 3803, 8325, 9063, 888, + 12505, 11767, 3803, 8325, 9063, 1128, + 12505, 11767, 3803, 8325, 9063, 2216, + 12505, 11767, 3803, 8325, 9063, 2250, + 12505, 11767, 3803, 8325, 9063, 2412, + 12505, 11767, 3803, 8325, 9063, 2658, + 12505, 11767, 3803, 8325, 9063, 3774, + 12505, 11767, 3803, 8325, 9063, 4614, + 12505, 11767, 3803, 8325, 9063, 6262, + 12505, 11767, 3803, 8325, 9063, 6406, + 12505, 11767, 3803, 8325, 9063, 6674, + 12505, 11767, 3803, 8325, 9063, 6824, + 12505, 11767, 3803, 8325, 9063, 7022, + 12505, 11767, 3803, 8325, 9063, 7080, + 12505, 11767, 3803, 8325, 9063, 7316, + 12505, 11767, 3803, 8325, 9063, 7568, + 12505, 11767, 3803, 8325, 9063, 7682, + 12505, 11767, 3803, 8325, 9063, 7683, 8774, + 12505, 11767, 3803, 8325, 9063, 9270, + 12505, 11767, 3803, 8325, 9063, 9530, + 12505, 11767, 3803, 8325, 9063, 9808, + 12505, 11767, 3803, 8325, 9271, 8774, + 12505, 11767, 3803, 8325, 9573, 12432, + 12505, 11767, 3803, 9063, 0, + 12505, 11767, 3803, 9063, 2, + 12505, 11767, 3803, 9063, 4, + 12505, 11767, 3803, 9063, 6, + 12505, 11767, 3803, 9063, 8, + 12505, 11767, 3803, 9063, 10, + 12505, 11767, 3803, 9063, 12, + 12505, 11767, 3803, 9063, 14, + 12505, 11767, 3803, 9063, 16, + 12505, 11767, 3803, 9063, 18, + 12505, 11767, 3803, 9063, 20, + 12505, 11767, 3803, 9063, 22, + 12505, 11767, 3803, 9063, 24, + 12505, 11767, 3803, 9063, 26, + 12505, 11767, 3803, 9063, 28, + 12505, 11767, 3803, 9063, 30, + 12505, 11767, 3803, 9063, 32, + 12505, 11767, 3803, 9063, 34, + 12505, 11767, 3803, 9063, 36, + 12505, 11767, 3803, 9063, 38, + 12505, 11767, 3803, 9063, 40, + 12505, 11767, 3803, 9063, 42, + 12505, 11767, 3803, 9063, 44, + 12505, 11767, 3803, 9063, 46, + 12505, 11767, 3803, 9063, 48, + 12505, 11767, 3803, 9063, 50, + 12505, 11767, 3803, 9063, 384, + 12505, 11767, 3803, 9063, 416, + 12505, 11767, 3803, 9063, 476, + 12505, 11767, 3803, 9063, 644, + 12505, 11767, 3803, 9063, 888, + 12505, 11767, 3803, 9063, 1128, + 12505, 11767, 3803, 9063, 2216, + 12505, 11767, 3803, 9063, 2250, + 12505, 11767, 3803, 9063, 2412, + 12505, 11767, 3803, 9063, 2658, + 12505, 11767, 3803, 9063, 3774, + 12505, 11767, 3803, 9063, 4614, + 12505, 11767, 3803, 9063, 6262, + 12505, 11767, 3803, 9063, 6406, + 12505, 11767, 3803, 9063, 6674, + 12505, 11767, 3803, 9063, 6824, + 12505, 11767, 3803, 9063, 7022, + 12505, 11767, 3803, 9063, 7080, + 12505, 11767, 3803, 9063, 7316, + 12505, 11767, 3803, 9063, 7568, + 12505, 11767, 3803, 9063, 7682, + 12505, 11767, 3803, 9063, 7683, 8774, + 12505, 11767, 3803, 9063, 9270, + 12505, 11767, 3803, 9063, 9530, + 12505, 11767, 3803, 9063, 9808, + 12505, 11767, 3803, 9271, 8774, + 12505, 11767, 3803, 9573, 12432, + 12505, 11767, 6689, 2170, + 12505, 11767, 6689, 2540, + 12505, 11767, 6689, 2778, + 12505, 11767, 6689, 4200, + 12505, 11767, 6689, 4214, + 12505, 11767, 6689, 5190, + 12505, 11767, 6689, 6260, + 12505, 11767, 6689, 6722, + 12505, 11767, 6689, 7508, + 12505, 11767, 6689, 7694, + 12505, 11767, 7593, 0, + 12505, 11767, 7593, 2, + 12505, 11767, 7593, 4, + 12505, 11767, 7593, 6, + 12505, 11767, 7593, 8, + 12505, 11767, 7593, 10, + 12505, 11767, 7593, 12, + 12505, 11767, 7593, 14, + 12505, 11767, 7593, 16, + 12505, 11767, 7593, 18, + 12505, 11767, 7593, 20, + 12505, 11767, 7593, 22, + 12505, 11767, 7593, 24, + 12505, 11767, 7593, 26, + 12505, 11767, 7593, 28, + 12505, 11767, 7593, 30, + 12505, 11767, 7593, 32, + 12505, 11767, 7593, 34, + 12505, 11767, 7593, 36, + 12505, 11767, 7593, 38, + 12505, 11767, 7593, 40, + 12505, 11767, 7593, 42, + 12505, 11767, 7593, 44, + 12505, 11767, 7593, 46, + 12505, 11767, 7593, 48, + 12505, 11767, 7593, 50, + 12505, 11767, 8325, 7593, 0, + 12505, 11767, 8325, 7593, 2, + 12505, 11767, 8325, 7593, 4, + 12505, 11767, 8325, 7593, 6, + 12505, 11767, 8325, 7593, 8, + 12505, 11767, 8325, 7593, 10, + 12505, 11767, 8325, 7593, 12, + 12505, 11767, 8325, 7593, 14, + 12505, 11767, 8325, 7593, 16, + 12505, 11767, 8325, 7593, 18, + 12505, 11767, 8325, 7593, 20, + 12505, 11767, 8325, 7593, 22, + 12505, 11767, 8325, 7593, 24, + 12505, 11767, 8325, 7593, 26, + 12505, 11767, 8325, 7593, 28, + 12505, 11767, 8325, 7593, 30, + 12505, 11767, 8325, 7593, 32, + 12505, 11767, 8325, 7593, 34, + 12505, 11767, 8325, 7593, 36, + 12505, 11767, 8325, 7593, 38, + 12505, 11767, 8325, 7593, 40, + 12505, 11767, 8325, 7593, 42, + 12505, 11767, 8325, 7593, 44, + 12505, 11767, 8325, 7593, 46, + 12505, 11767, 8325, 7593, 48, + 12505, 11767, 8325, 7593, 50, + 12505, 11767, 8325, 9063, 0, + 12505, 11767, 8325, 9063, 2, + 12505, 11767, 8325, 9063, 4, + 12505, 11767, 8325, 9063, 6, + 12505, 11767, 8325, 9063, 8, + 12505, 11767, 8325, 9063, 10, + 12505, 11767, 8325, 9063, 12, + 12505, 11767, 8325, 9063, 14, + 12505, 11767, 8325, 9063, 16, + 12505, 11767, 8325, 9063, 18, + 12505, 11767, 8325, 9063, 20, + 12505, 11767, 8325, 9063, 22, + 12505, 11767, 8325, 9063, 24, + 12505, 11767, 8325, 9063, 26, + 12505, 11767, 8325, 9063, 28, + 12505, 11767, 8325, 9063, 30, + 12505, 11767, 8325, 9063, 32, + 12505, 11767, 8325, 9063, 34, + 12505, 11767, 8325, 9063, 36, + 12505, 11767, 8325, 9063, 38, + 12505, 11767, 8325, 9063, 40, + 12505, 11767, 8325, 9063, 42, + 12505, 11767, 8325, 9063, 44, + 12505, 11767, 8325, 9063, 46, + 12505, 11767, 8325, 9063, 48, + 12505, 11767, 8325, 9063, 50, + 12505, 11767, 9063, 0, + 12505, 11767, 9063, 2, + 12505, 11767, 9063, 4, + 12505, 11767, 9063, 6, + 12505, 11767, 9063, 8, + 12505, 11767, 9063, 10, + 12505, 11767, 9063, 12, + 12505, 11767, 9063, 14, + 12505, 11767, 9063, 16, + 12505, 11767, 9063, 18, + 12505, 11767, 9063, 20, + 12505, 11767, 9063, 22, + 12505, 11767, 9063, 24, + 12505, 11767, 9063, 26, + 12505, 11767, 9063, 28, + 12505, 11767, 9063, 30, + 12505, 11767, 9063, 32, + 12505, 11767, 9063, 34, + 12505, 11767, 9063, 36, + 12505, 11767, 9063, 38, + 12505, 11767, 9063, 40, + 12505, 11767, 9063, 42, + 12505, 11767, 9063, 44, + 12505, 11767, 9063, 46, + 12505, 11767, 9063, 48, + 12505, 11767, 9063, 50, + 12505, 12929, 6689, 2170, + 12505, 12929, 6689, 2540, + 12505, 12929, 6689, 2778, + 12505, 12929, 6689, 4200, + 12505, 12929, 6689, 4214, + 12505, 12929, 6689, 5190, + 12505, 12929, 6689, 6260, + 12505, 12929, 6689, 6722, + 12505, 12929, 6689, 7508, + 12505, 12929, 6689, 7694, + 12505, 12929, 7593, 0, + 12505, 12929, 7593, 2, + 12505, 12929, 7593, 4, + 12505, 12929, 7593, 6, + 12505, 12929, 7593, 8, + 12505, 12929, 7593, 10, + 12505, 12929, 7593, 12, + 12505, 12929, 7593, 14, + 12505, 12929, 7593, 16, + 12505, 12929, 7593, 18, + 12505, 12929, 7593, 20, + 12505, 12929, 7593, 22, + 12505, 12929, 7593, 24, + 12505, 12929, 7593, 26, + 12505, 12929, 7593, 28, + 12505, 12929, 7593, 30, + 12505, 12929, 7593, 32, + 12505, 12929, 7593, 34, + 12505, 12929, 7593, 36, + 12505, 12929, 7593, 38, + 12505, 12929, 7593, 40, + 12505, 12929, 7593, 42, + 12505, 12929, 7593, 44, + 12505, 12929, 7593, 46, + 12505, 12929, 7593, 48, + 12505, 12929, 7593, 50, + 12505, 12929, 9063, 0, + 12505, 12929, 9063, 2, + 12505, 12929, 9063, 6, + 12505, 12929, 9063, 8, + 12505, 12929, 9063, 10, + 12505, 12929, 9063, 12, + 12505, 12929, 9063, 16, + 12505, 12929, 9063, 18, + 12505, 12929, 9063, 20, + 12505, 12929, 9063, 22, + 12505, 12929, 9063, 24, + 12505, 12929, 9063, 28, + 12505, 12929, 9063, 36, + 12505, 12929, 9063, 38, + 12505, 12929, 9063, 40, + 12505, 12929, 9063, 42, + 12505, 12929, 9063, 44, + 12505, 12929, 9063, 46, + 12505, 12929, 9063, 48, + 12517, 8306, + 12525, 5882, + 12527, 4213, 1177, 10677, 175, 3992, + 12527, 4213, 1177, 10677, 177, 3992, + 12527, 4213, 1177, 10677, 1809, 4876, + 12527, 4213, 1177, 10677, 2779, 1045, 8392, + 12527, 4213, 1177, 10677, 4849, 6409, 9050, + 12527, 4213, 1177, 10677, 4849, 6505, 11677, 9050, + 12527, 4213, 1177, 10677, 4849, 6627, 9050, + 12527, 4213, 1177, 10677, 4849, 7821, 8077, 9050, + 12527, 4213, 1177, 10677, 4849, 7821, 11677, 9050, + 12527, 4213, 1177, 10677, 4849, 8077, 9050, + 12527, 4213, 1177, 10677, 4849, 8153, 6409, 9050, + 12527, 4213, 1177, 10677, 4849, 8745, 9050, + 12527, 4213, 1177, 10677, 4849, 10637, 7533, 9050, + 12527, 4213, 1177, 10677, 4849, 12114, + 12527, 4213, 1177, 10677, 6107, 1809, 4876, + 12527, 4213, 1177, 10677, 6610, + 12527, 4213, 1177, 10677, 6616, + 12527, 4213, 1177, 10677, 7443, 6409, 9050, + 12527, 4213, 1177, 10677, 7443, 6505, 11677, 9050, + 12527, 4213, 1177, 10677, 7443, 6627, 9050, + 12527, 4213, 1177, 10677, 7443, 7821, 8077, 9050, + 12527, 4213, 1177, 10677, 7443, 7821, 11677, 9054, + 12527, 4213, 1177, 10677, 7443, 8077, 9050, + 12527, 4213, 1177, 10677, 7443, 8153, 6409, 9050, + 12527, 4213, 1177, 10677, 7443, 8745, 9050, + 12527, 4213, 1177, 10677, 7443, 10637, 7533, 9050, + 12527, 4213, 1177, 10677, 7443, 12114, + 12527, 4213, 1177, 10677, 10469, 4926, + 12527, 4213, 1177, 10677, 11224, + 12527, 4213, 1177, 10677, 11649, 10154, + 12527, 4213, 1177, 10677, 12017, 4926, + 12527, 4213, 1177, 10677, 12043, 4223, 5836, + 12527, 4213, 1177, 10677, 12043, 6616, + 12529, 568, + 12537, 7821, 11765, 6434, + 12540, + 12874, + 12881, 7608, + 12882, + 12895, 11765, 6434, + 12901, 2725, 11791, 6434, + 12901, 5385, 8057, 6434, + 12901, 8065, 8057, 6434, + 12901, 8241, 8057, 6434, + 12901, 9115, 10260, + 12901, 12056, + 12903, 835, 2091, 9855, 6741, 568, + 12903, 6741, 445, 6741, 568, + 12903, 6741, 568, + 12903, 6741, 569, 445, 2681, 6989, 428, + 12925, 11385, 8774, + 12929, 7201, 11262, + 12929, 7593, 476, + 12929, 7593, 6824, + 12929, 8325, 7593, 6, + 12929, 8325, 7593, 8, + 12929, 8325, 7593, 16, + 12929, 8325, 7593, 18, + 12929, 8325, 9063, 6, + 12929, 9063, 4, + 12929, 9063, 14, + 12929, 9063, 26, + 12929, 9063, 30, + 12929, 9063, 32, + 12929, 9063, 34, + 12929, 9063, 50, + 12929, 9063, 476, + 12929, 9063, 6824, + 12931, 10643, 6121, 4849, 4389, 6504, + 12931, 10643, 6121, 7443, 4389, 6504, + 12939, 5758, + 12941, 6741, 568, + 12941, 11621, 568, + 12967, 6409, 9050, + 12967, 8083, 6409, 9050, + 12967, 8153, 6409, 11195, 4926, + 12969, 4926, + 12969, 10390, + 12969, 10966, + 12975, 5758, + 12983, 11765, 6434, + 12987, 6689, 2170, + 12987, 6689, 2540, + 12987, 6689, 2778, + 12987, 6689, 4200, + 12987, 6689, 4214, + 12987, 6689, 5190, + 12987, 6689, 6722, + 12987, 6689, 7508, + 12987, 6689, 7694, + 12987, 7089, 7593, 8405, 0, + 12987, 7089, 7593, 8405, 2, + 12987, 7089, 7593, 8405, 4, + 12987, 7089, 7593, 8405, 6, + 12987, 7089, 7593, 8405, 8, + 12987, 7089, 7593, 8405, 10, + 12987, 7089, 7593, 8405, 12, + 12987, 7089, 7593, 8405, 14, + 12987, 7089, 7593, 8405, 16, + 12987, 7089, 7593, 8405, 18, + 12987, 7089, 7593, 8405, 20, + 12987, 7089, 7593, 8405, 22, + 12987, 7089, 7593, 8405, 24, + 12987, 7089, 7593, 8405, 26, + 12987, 7089, 7593, 8405, 28, + 12987, 7089, 7593, 8405, 30, + 12987, 7089, 7593, 8405, 32, + 12987, 7089, 7593, 8405, 34, + 12987, 7089, 7593, 8405, 36, + 12987, 7089, 7593, 8405, 38, + 12987, 7089, 7593, 8405, 40, + 12987, 7089, 7593, 8405, 42, + 12987, 7089, 7593, 8405, 44, + 12987, 7089, 7593, 8405, 46, + 12987, 7089, 7593, 8405, 48, + 12987, 7089, 7593, 8405, 50, + 12987, 8287, 5770, + 12987, 8287, 5771, 0, + 12987, 8287, 6594, + 12987, 8287, 6595, 0, + 12987, 8287, 6595, 40, + 12987, 8287, 6912, + 12987, 8287, 6913, 0, + 12987, 8287, 6982, + 12987, 8287, 6983, 0, + 12987, 8287, 7166, + 12987, 8287, 7167, 0, + 12987, 8287, 7244, + 12987, 8287, 7245, 0, + 12987, 8287, 7372, + 12987, 8287, 7373, 0, + 12987, 8287, 7440, + 12987, 8287, 7441, 0, + 12987, 8287, 8362, + 12987, 8287, 8363, 0, + 12987, 8287, 8828, + 12987, 8287, 8829, 0, + 12987, 8287, 9086, + 12987, 8287, 9087, 0, + 12987, 8287, 9400, + 12987, 8287, 9401, 0, + 12987, 8287, 9588, + 12987, 8287, 9589, 0, + 12987, 8287, 9780, + 12987, 8287, 9781, 0, + 12987, 8371, 10759, 29, 250, + 12987, 8371, 10759, 7310, + 12987, 8525, 2670, + 12987, 8525, 8162, + 12987, 8525, 8874, + 12987, 8525, 8876, + 12987, 8525, 9286, + 12987, 8525, 9700, + 12987, 8525, 10150, + 12987, 8525, 10200, + 12987, 8525, 10360, + 12987, 8525, 10622, + 12987, 8525, 11232, + 12987, 11043, 2170, + 12987, 11043, 2540, + 12987, 11043, 2586, + 12987, 11043, 2670, + 12987, 11043, 2778, + 12987, 11043, 3842, + 12987, 11043, 4194, + 12987, 11043, 4200, + 12987, 11043, 4214, + 12987, 11043, 4396, + 12987, 11043, 5012, + 12987, 11043, 5046, + 12987, 11043, 5190, + 12987, 11043, 5540, + 12987, 11043, 5650, + 12987, 11043, 6122, + 12987, 11043, 6716, + 12987, 11043, 6722, + 12987, 11043, 7072, + 12987, 11043, 7146, + 12987, 11043, 7428, + 12987, 11043, 7508, + 12987, 11043, 7640, + 12987, 11043, 7646, + 12987, 11043, 7694, + 12987, 11043, 7812, + 12987, 11043, 9714, + 12987, 11043, 9724, + 12987, 11043, 9862, + 12987, 11043, 10180, + 12987, 11043, 10484, + 12987, 11043, 10992, + 12987, 11043, 11208, + 12987, 11043, 11266, + 12987, 11043, 11612, + 12987, 11043, 13050, + 12990, + 12991, 6121, 36, + 13011, 4926, + 13011, 10390, + 13011, 10966, + 13022, + 13045, 6741, 568, + 13047, 9898, + 13061, 46, + 13061, 5758, + 13061, 5759, 275, 4849, 4389, 8056, + 13061, 5759, 275, 7443, 4389, 8056, + 13061, 5759, 275, 8153, 8056, + 13061, 5759, 275, 10642, + 13061, 5759, 6121, 1045, 6376, + 13061, 5759, 6121, 10666, + 13067, 6409, 9050, + 13067, 8083, 6409, 9050, + 13067, 8153, 6409, 11195, 4926, + 13070, + 13191, 7271, 4153, 6434, + 13191, 7607, 4153, 6434, + 13191, 11765, 6434, + 13231, 11765, 6434, + 13233, 9898, + 13235, 11765, 6434, + 13237, 11765, 6434, + 13365, 8153, 8306, + 13365, 8921, 7605, 4926, + 13365, 11185, 7605, 4926, + 13365, 12341, 7605, 4926, + 13381, 8774, + 13393, 7337, 8774, + 13403, 8279, 8774, + 13403, 8381, 8774, + 13417, 8774, + 13419, 8774, +}; +static const struct { uint16_t code; uint32_t name:24; } +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +__attribute__((__packed__)) +#endif +unicode_name_to_code[18242] = { + { 0x2114, 0 }, + { 0x29CC, 4 }, + { 0x2327, 7 }, + { 0x22FF, 12 }, + { 0x2987, 16 }, + { 0x2989, 21 }, + { 0x2981, 26 }, + { 0x2982, 29 }, + { 0x2A65, 33 }, + { 0x2988, 37 }, + { 0x298A, 42 }, + { 0x2A64, 47 }, + { 0x2A20, 51 }, + { 0x2A21, 55 }, + { 0x2A1F, 59 }, + { 0x2A3E, 63 }, + { 0x23E6, 67 }, + { 0x2014, 69 }, + { 0x2001, 71 }, + { 0x2003, 73 }, + { 0x2013, 75 }, + { 0x2000, 77 }, + { 0x2002, 79 }, + { 0x1C78, 81 }, + { 0x1C7D, 85 }, + { 0x1C51, 88 }, + { 0x1C56, 92 }, + { 0x1C52, 96 }, + { 0x1C55, 100 }, + { 0x1C54, 104 }, + { 0x1C59, 108 }, + { 0x1C50, 112 }, + { 0x1C58, 116 }, + { 0x1C57, 120 }, + { 0x1C53, 124 }, + { 0x1C7B, 128 }, + { 0x1C5C, 131 }, + { 0x1C5E, 135 }, + { 0x1C5B, 139 }, + { 0x1C71, 143 }, + { 0x1C6F, 147 }, + { 0x1C66, 151 }, + { 0x1C68, 155 }, + { 0x1C65, 159 }, + { 0x1C5A, 163 }, + { 0x1C6E, 167 }, + { 0x1C64, 171 }, + { 0x1C73, 175 }, + { 0x1C69, 179 }, + { 0x1C75, 183 }, + { 0x1C77, 187 }, + { 0x1C76, 191 }, + { 0x1C6A, 195 }, + { 0x1C6B, 199 }, + { 0x1C6D, 203 }, + { 0x1C61, 207 }, + { 0x1C60, 211 }, + { 0x1C62, 215 }, + { 0x1C63, 219 }, + { 0x1C5D, 223 }, + { 0x1C70, 227 }, + { 0x1C72, 231 }, + { 0x1C67, 235 }, + { 0x1C5F, 239 }, + { 0x1C74, 243 }, + { 0x1C6C, 247 }, + { 0x1C79, 251 }, + { 0x1C7C, 255 }, + { 0x1C7A, 258 }, + { 0x1C7F, 262 }, + { 0x1C7E, 267 }, + { 0x27C7, 271 }, + { 0x2951, 275 }, + { 0x294D, 282 }, + { 0x294C, 289 }, + { 0x294F, 296 }, + { 0x2195, 303 }, + { 0x21A8, 306 }, + { 0x2B0D, 311 }, + { 0x21F3, 315 }, + { 0x21D5, 319 }, + { 0x297E, 323 }, + { 0x22A5, 326 }, + { 0x27DF, 328 }, + { 0x29BD, 333 }, + { 0x22F0, 337 }, + { 0x2303, 341 }, + { 0x2324, 343 }, + { 0x54BC, 349 }, + { 0x54B9, 352 }, + { 0x54A1, 355 }, + { 0x54B3, 358 }, + { 0x54C6, 361 }, + { 0x5491, 364 }, + { 0x5498, 367 }, + { 0x54A9, 370 }, + { 0x54A8, 373 }, + { 0x54B8, 376 }, + { 0x549D, 379 }, + { 0x54B2, 382 }, + { 0x54A5, 385 }, + { 0x54C3, 388 }, + { 0x54BE, 391 }, + { 0x5494, 394 }, + { 0x54A3, 397 }, + { 0x5497, 400 }, + { 0x54B6, 403 }, + { 0x54AD, 406 }, + { 0x54B5, 409 }, + { 0x5492, 412 }, + { 0x54BB, 415 }, + { 0x549A, 418 }, + { 0x549C, 421 }, + { 0x549E, 424 }, + { 0x54AC, 427 }, + { 0x5490, 430 }, + { 0x54B0, 433 }, + { 0x5495, 436 }, + { 0x54A0, 439 }, + { 0x54B1, 442 }, + { 0x54AF, 445 }, + { 0x54AE, 448 }, + { 0x54AB, 451 }, + { 0x54A2, 454 }, + { 0x54C1, 457 }, + { 0x549B, 460 }, + { 0x54BD, 463 }, + { 0x54A4, 466 }, + { 0x5496, 469 }, + { 0x54A6, 472 }, + { 0x5499, 475 }, + { 0x54BF, 478 }, + { 0x549F, 481 }, + { 0x54B7, 484 }, + { 0x54AA, 487 }, + { 0x54C5, 490 }, + { 0x5493, 493 }, + { 0x54A7, 496 }, + { 0x54B4, 499 }, + { 0x54C0, 502 }, + { 0x54C2, 505 }, + { 0x54BA, 508 }, + { 0x54C4, 511 }, + { 0x500A, 514 }, + { 0x5014, 517 }, + { 0x5002, 520 }, + { 0x5011, 523 }, + { 0x500B, 526 }, + { 0x5008, 529 }, + { 0x5009, 532 }, + { 0x5020, 535 }, + { 0x502A, 538 }, + { 0x5018, 541 }, + { 0x5027, 544 }, + { 0x502E, 547 }, + { 0x5034, 550 }, + { 0x52B8, 553 }, + { 0x52C2, 556 }, + { 0x52B0, 559 }, + { 0x52BF, 562 }, + { 0x52C6, 565 }, + { 0x52CC, 568 }, + { 0x5109, 571 }, + { 0x5112, 574 }, + { 0x5102, 577 }, + { 0x510F, 580 }, + { 0x5116, 583 }, + { 0x5013, 586 }, + { 0x50D3, 589 }, + { 0x50CF, 592 }, + { 0x50D6, 595 }, + { 0x50DA, 598 }, + { 0x50E0, 601 }, + { 0x51E4, 604 }, + { 0x51F0, 607 }, + { 0x51DC, 610 }, + { 0x51EC, 613 }, + { 0x51F4, 616 }, + { 0x5273, 619 }, + { 0x527E, 622 }, + { 0x527B, 625 }, + { 0x5006, 628 }, + { 0x5003, 631 }, + { 0x5000, 634 }, + { 0x5001, 637 }, + { 0x53E2, 640 }, + { 0x53EE, 643 }, + { 0x53F2, 646 }, + { 0x53F8, 649 }, + { 0x5201, 652 }, + { 0x520C, 655 }, + { 0x51FA, 658 }, + { 0x5208, 661 }, + { 0x5210, 664 }, + { 0x51C1, 667 }, + { 0x51CC, 670 }, + { 0x51B9, 673 }, + { 0x51C9, 676 }, + { 0x51D0, 679 }, + { 0x51D6, 682 }, + { 0x50B7, 685 }, + { 0x50C2, 688 }, + { 0x50B0, 691 }, + { 0x50BF, 694 }, + { 0x50C5, 697 }, + { 0x50CB, 700 }, + { 0x5185, 703 }, + { 0x518F, 706 }, + { 0x517F, 709 }, + { 0x518C, 712 }, + { 0x5193, 715 }, + { 0x5012, 718 }, + { 0x500F, 721 }, + { 0x5010, 724 }, + { 0x5041, 727 }, + { 0x503A, 730 }, + { 0x5048, 733 }, + { 0x504C, 736 }, + { 0x5052, 739 }, + { 0x53FE, 742 }, + { 0x540A, 745 }, + { 0x540E, 748 }, + { 0x5414, 751 }, + { 0x53C8, 754 }, + { 0x53D2, 757 }, + { 0x53CF, 760 }, + { 0x53D6, 763 }, + { 0x53DC, 766 }, + { 0x5312, 769 }, + { 0x531C, 772 }, + { 0x530B, 775 }, + { 0x5319, 778 }, + { 0x5320, 781 }, + { 0x5326, 784 }, + { 0x5123, 787 }, + { 0x512E, 790 }, + { 0x511C, 793 }, + { 0x512B, 796 }, + { 0x5132, 799 }, + { 0x500D, 802 }, + { 0x50EC, 805 }, + { 0x50E4, 808 }, + { 0x50F0, 811 }, + { 0x50F6, 814 }, + { 0x50FC, 817 }, + { 0x5282, 820 }, + { 0x528B, 823 }, + { 0x5288, 826 }, + { 0x5015, 829 }, + { 0x545F, 832 }, + { 0x5469, 835 }, + { 0x546D, 838 }, + { 0x5473, 841 }, + { 0x547F, 844 }, + { 0x5483, 847 }, + { 0x5489, 850 }, + { 0x5296, 853 }, + { 0x52A0, 856 }, + { 0x528F, 859 }, + { 0x529D, 862 }, + { 0x52A4, 865 }, + { 0x52AA, 868 }, + { 0x5021, 871 }, + { 0x501E, 874 }, + { 0x501F, 877 }, + { 0x5060, 880 }, + { 0x506A, 883 }, + { 0x5058, 886 }, + { 0x5067, 889 }, + { 0x506E, 892 }, + { 0x5074, 895 }, + { 0x502B, 898 }, + { 0x5029, 901 }, + { 0x501C, 904 }, + { 0x5019, 907 }, + { 0x5016, 910 }, + { 0x5017, 913 }, + { 0x5028, 916 }, + { 0x5025, 919 }, + { 0x5026, 922 }, + { 0x5023, 925 }, + { 0x502F, 928 }, + { 0x5031, 931 }, + { 0x502C, 934 }, + { 0x502D, 937 }, + { 0x5035, 940 }, + { 0x5037, 943 }, + { 0x5032, 946 }, + { 0x5033, 949 }, + { 0x52B9, 952 }, + { 0x52B6, 955 }, + { 0x52B7, 958 }, + { 0x52C3, 961 }, + { 0x52C1, 964 }, + { 0x5363, 967 }, + { 0x536F, 970 }, + { 0x536B, 973 }, + { 0x5372, 976 }, + { 0x5378, 979 }, + { 0x52B4, 982 }, + { 0x52B1, 985 }, + { 0x52AE, 988 }, + { 0x52AF, 991 }, + { 0x52C0, 994 }, + { 0x52BD, 997 }, + { 0x52BE, 1000 }, + { 0x52BB, 1003 }, + { 0x52C7, 1006 }, + { 0x52C9, 1009 }, + { 0x52C4, 1012 }, + { 0x52C5, 1015 }, + { 0x52CD, 1018 }, + { 0x52CF, 1021 }, + { 0x52CA, 1024 }, + { 0x52CB, 1027 }, + { 0x510A, 1030 }, + { 0x5107, 1033 }, + { 0x5108, 1036 }, + { 0x513F, 1039 }, + { 0x5149, 1042 }, + { 0x5138, 1045 }, + { 0x5146, 1048 }, + { 0x514D, 1051 }, + { 0x5113, 1054 }, + { 0x5111, 1057 }, + { 0x5105, 1060 }, + { 0x5103, 1063 }, + { 0x5100, 1066 }, + { 0x5101, 1069 }, + { 0x5110, 1072 }, + { 0x510D, 1075 }, + { 0x510E, 1078 }, + { 0x510C, 1081 }, + { 0x5117, 1084 }, + { 0x5119, 1087 }, + { 0x5114, 1090 }, + { 0x5115, 1093 }, + { 0x50D4, 1096 }, + { 0x50D1, 1099 }, + { 0x50D2, 1102 }, + { 0x50D0, 1105 }, + { 0x50CD, 1108 }, + { 0x50CE, 1111 }, + { 0x50D7, 1114 }, + { 0x50D5, 1117 }, + { 0x50DB, 1120 }, + { 0x50DD, 1123 }, + { 0x50D8, 1126 }, + { 0x50D9, 1129 }, + { 0x50E1, 1132 }, + { 0x50DE, 1135 }, + { 0x50DF, 1138 }, + { 0x51E5, 1141 }, + { 0x51E2, 1144 }, + { 0x51E3, 1147 }, + { 0x51F1, 1150 }, + { 0x51EE, 1153 }, + { 0x51EF, 1156 }, + { 0x521C, 1159 }, + { 0x5228, 1162 }, + { 0x5216, 1165 }, + { 0x5224, 1168 }, + { 0x522C, 1171 }, + { 0x51E0, 1174 }, + { 0x51DD, 1177 }, + { 0x51DA, 1180 }, + { 0x51DB, 1183 }, + { 0x51ED, 1186 }, + { 0x51EA, 1189 }, + { 0x51EB, 1192 }, + { 0x51E8, 1195 }, + { 0x51F5, 1198 }, + { 0x51F7, 1201 }, + { 0x51F2, 1204 }, + { 0x51F3, 1207 }, + { 0x5274, 1210 }, + { 0x5271, 1213 }, + { 0x5272, 1216 }, + { 0x527F, 1219 }, + { 0x527D, 1222 }, + { 0x5270, 1225 }, + { 0x526E, 1228 }, + { 0x51A0, 1231 }, + { 0x51A9, 1234 }, + { 0x5199, 1237 }, + { 0x51A6, 1240 }, + { 0x51AD, 1243 }, + { 0x51B3, 1246 }, + { 0x509A, 1249 }, + { 0x5093, 1252 }, + { 0x50A1, 1255 }, + { 0x50A5, 1258 }, + { 0x50AA, 1261 }, + { 0x5172, 1264 }, + { 0x517A, 1267 }, + { 0x516A, 1270 }, + { 0x527C, 1273 }, + { 0x5279, 1276 }, + { 0x527A, 1279 }, + { 0x5277, 1282 }, + { 0x5250, 1285 }, + { 0x525B, 1288 }, + { 0x5248, 1291 }, + { 0x5258, 1294 }, + { 0x5007, 1297 }, + { 0x5004, 1300 }, + { 0x5005, 1303 }, + { 0x53E6, 1306 }, + { 0x53E3, 1309 }, + { 0x53E0, 1312 }, + { 0x53E1, 1315 }, + { 0x541A, 1318 }, + { 0x5425, 1321 }, + { 0x5429, 1324 }, + { 0x542F, 1327 }, + { 0x53EF, 1330 }, + { 0x53EC, 1333 }, + { 0x53ED, 1336 }, + { 0x53EA, 1339 }, + { 0x53F3, 1342 }, + { 0x53F5, 1345 }, + { 0x53F0, 1348 }, + { 0x53F1, 1351 }, + { 0x53F9, 1354 }, + { 0x53FB, 1357 }, + { 0x53F6, 1360 }, + { 0x53F7, 1363 }, + { 0x5202, 1366 }, + { 0x51FF, 1369 }, + { 0x5200, 1372 }, + { 0x520D, 1375 }, + { 0x520A, 1378 }, + { 0x520B, 1381 }, + { 0x51FD, 1384 }, + { 0x51FB, 1387 }, + { 0x51F8, 1390 }, + { 0x51F9, 1393 }, + { 0x5209, 1396 }, + { 0x5206, 1399 }, + { 0x5207, 1402 }, + { 0x5204, 1405 }, + { 0x5211, 1408 }, + { 0x5213, 1411 }, + { 0x520E, 1414 }, + { 0x520F, 1417 }, + { 0x51C2, 1420 }, + { 0x51BF, 1423 }, + { 0x51C0, 1426 }, + { 0x51CD, 1429 }, + { 0x51CB, 1432 }, + { 0x51BD, 1435 }, + { 0x51BA, 1438 }, + { 0x51B7, 1441 }, + { 0x51B8, 1444 }, + { 0x51CA, 1447 }, + { 0x51C7, 1450 }, + { 0x51C8, 1453 }, + { 0x51C5, 1456 }, + { 0x51D1, 1459 }, + { 0x51D3, 1462 }, + { 0x51CE, 1465 }, + { 0x51CF, 1468 }, + { 0x51D7, 1471 }, + { 0x51D9, 1474 }, + { 0x51D4, 1477 }, + { 0x51D5, 1480 }, + { 0x50B8, 1483 }, + { 0x50B5, 1486 }, + { 0x50B6, 1489 }, + { 0x50C1, 1492 }, + { 0x5234, 1495 }, + { 0x523E, 1498 }, + { 0x523B, 1501 }, + { 0x5242, 1504 }, + { 0x50B3, 1507 }, + { 0x50B1, 1510 }, + { 0x50AE, 1513 }, + { 0x50AF, 1516 }, + { 0x50C0, 1519 }, + { 0x50BD, 1522 }, + { 0x50BE, 1525 }, + { 0x50BB, 1528 }, + { 0x50C6, 1531 }, + { 0x50C8, 1534 }, + { 0x50C3, 1537 }, + { 0x50C4, 1540 }, + { 0x50CC, 1543 }, + { 0x50C9, 1546 }, + { 0x50CA, 1549 }, + { 0x5186, 1552 }, + { 0x5184, 1555 }, + { 0x507F, 1558 }, + { 0x5078, 1561 }, + { 0x5083, 1564 }, + { 0x5087, 1567 }, + { 0x508D, 1570 }, + { 0x5159, 1573 }, + { 0x5160, 1576 }, + { 0x5153, 1579 }, + { 0x515D, 1582 }, + { 0x5164, 1585 }, + { 0x5190, 1588 }, + { 0x518E, 1591 }, + { 0x5262, 1594 }, + { 0x526C, 1597 }, + { 0x5269, 1600 }, + { 0x5182, 1603 }, + { 0x5180, 1606 }, + { 0x517D, 1609 }, + { 0x517E, 1612 }, + { 0x5433, 1615 }, + { 0x543D, 1618 }, + { 0x5440, 1621 }, + { 0x5446, 1624 }, + { 0x518D, 1627 }, + { 0x518A, 1630 }, + { 0x518B, 1633 }, + { 0x5396, 1636 }, + { 0x539D, 1639 }, + { 0x5399, 1642 }, + { 0x53A1, 1645 }, + { 0x53A7, 1648 }, + { 0x5188, 1651 }, + { 0x5194, 1654 }, + { 0x5196, 1657 }, + { 0x5191, 1660 }, + { 0x5192, 1663 }, + { 0x544C, 1666 }, + { 0x5457, 1669 }, + { 0x545B, 1672 }, + { 0x52F6, 1675 }, + { 0x52FD, 1678 }, + { 0x52EF, 1681 }, + { 0x52FF, 1684 }, + { 0x5305, 1687 }, + { 0x5042, 1690 }, + { 0x503F, 1693 }, + { 0x5040, 1696 }, + { 0x503D, 1699 }, + { 0x503B, 1702 }, + { 0x5038, 1705 }, + { 0x5039, 1708 }, + { 0x5049, 1711 }, + { 0x5046, 1714 }, + { 0x5047, 1717 }, + { 0x5044, 1720 }, + { 0x504D, 1723 }, + { 0x504F, 1726 }, + { 0x504A, 1729 }, + { 0x504B, 1732 }, + { 0x5053, 1735 }, + { 0x5055, 1738 }, + { 0x5050, 1741 }, + { 0x5051, 1744 }, + { 0x5402, 1747 }, + { 0x53FF, 1750 }, + { 0x53FC, 1753 }, + { 0x53FD, 1756 }, + { 0x540B, 1759 }, + { 0x5408, 1762 }, + { 0x5409, 1765 }, + { 0x5406, 1768 }, + { 0x540F, 1771 }, + { 0x5411, 1774 }, + { 0x540C, 1777 }, + { 0x540D, 1780 }, + { 0x5415, 1783 }, + { 0x5417, 1786 }, + { 0x5412, 1789 }, + { 0x5413, 1792 }, + { 0x53C9, 1795 }, + { 0x53C6, 1798 }, + { 0x53C7, 1801 }, + { 0x53D3, 1804 }, + { 0x53D1, 1807 }, + { 0x53D0, 1810 }, + { 0x53CD, 1813 }, + { 0x53CE, 1816 }, + { 0x537D, 1819 }, + { 0x5386, 1822 }, + { 0x5382, 1825 }, + { 0x538A, 1828 }, + { 0x5390, 1831 }, + { 0x53CB, 1834 }, + { 0x53D7, 1837 }, + { 0x53D9, 1840 }, + { 0x53D4, 1843 }, + { 0x53D5, 1846 }, + { 0x53DD, 1849 }, + { 0x53DF, 1852 }, + { 0x53DA, 1855 }, + { 0x53DB, 1858 }, + { 0x5313, 1861 }, + { 0x5310, 1864 }, + { 0x5311, 1867 }, + { 0x531D, 1870 }, + { 0x531B, 1873 }, + { 0x53AD, 1876 }, + { 0x53B8, 1879 }, + { 0x53B4, 1882 }, + { 0x53BC, 1885 }, + { 0x53C2, 1888 }, + { 0x530E, 1891 }, + { 0x530C, 1894 }, + { 0x5309, 1897 }, + { 0x530A, 1900 }, + { 0x531A, 1903 }, + { 0x5317, 1906 }, + { 0x5318, 1909 }, + { 0x5333, 1912 }, + { 0x533A, 1915 }, + { 0x532C, 1918 }, + { 0x5337, 1921 }, + { 0x533E, 1924 }, + { 0x5342, 1927 }, + { 0x5315, 1930 }, + { 0x5321, 1933 }, + { 0x5323, 1936 }, + { 0x531E, 1939 }, + { 0x531F, 1942 }, + { 0x5327, 1945 }, + { 0x5329, 1948 }, + { 0x5324, 1951 }, + { 0x5325, 1954 }, + { 0x5124, 1957 }, + { 0x5121, 1960 }, + { 0x5122, 1963 }, + { 0x512F, 1966 }, + { 0x512D, 1969 }, + { 0x511F, 1972 }, + { 0x511D, 1975 }, + { 0x511A, 1978 }, + { 0x511B, 1981 }, + { 0x512C, 1984 }, + { 0x5129, 1987 }, + { 0x512A, 1990 }, + { 0x5127, 1993 }, + { 0x5133, 1996 }, + { 0x5135, 1999 }, + { 0x5130, 2002 }, + { 0x5131, 2005 }, + { 0x500E, 2008 }, + { 0x500C, 2011 }, + { 0x50ED, 2014 }, + { 0x50EA, 2017 }, + { 0x50EB, 2020 }, + { 0x50F3, 2023 }, + { 0x50F2, 2026 }, + { 0x50E8, 2029 }, + { 0x50E5, 2032 }, + { 0x50E2, 2035 }, + { 0x50E3, 2038 }, + { 0x50F1, 2041 }, + { 0x50EE, 2044 }, + { 0x50EF, 2047 }, + { 0x50F7, 2050 }, + { 0x50F9, 2053 }, + { 0x50F4, 2056 }, + { 0x50F5, 2059 }, + { 0x50FD, 2062 }, + { 0x50FF, 2065 }, + { 0x50FA, 2068 }, + { 0x50FB, 2071 }, + { 0x5283, 2074 }, + { 0x5280, 2077 }, + { 0x5281, 2080 }, + { 0x528C, 2083 }, + { 0x528A, 2086 }, + { 0x5289, 2089 }, + { 0x5287, 2092 }, + { 0x5285, 2095 }, + { 0x5463, 2098 }, + { 0x5460, 2101 }, + { 0x545D, 2104 }, + { 0x545E, 2107 }, + { 0x546A, 2110 }, + { 0x5467, 2113 }, + { 0x5468, 2116 }, + { 0x5466, 2119 }, + { 0x546E, 2122 }, + { 0x5470, 2125 }, + { 0x546B, 2128 }, + { 0x546C, 2131 }, + { 0x5477, 2134 }, + { 0x5474, 2137 }, + { 0x5471, 2140 }, + { 0x5472, 2143 }, + { 0x5480, 2146 }, + { 0x547D, 2149 }, + { 0x547E, 2152 }, + { 0x547B, 2155 }, + { 0x5484, 2158 }, + { 0x5486, 2161 }, + { 0x5481, 2164 }, + { 0x5482, 2167 }, + { 0x548A, 2170 }, + { 0x548C, 2173 }, + { 0x5487, 2176 }, + { 0x5488, 2179 }, + { 0x5297, 2182 }, + { 0x5294, 2185 }, + { 0x5295, 2188 }, + { 0x52A1, 2191 }, + { 0x529F, 2194 }, + { 0x5348, 2197 }, + { 0x5353, 2200 }, + { 0x534F, 2203 }, + { 0x5357, 2206 }, + { 0x535D, 2209 }, + { 0x5292, 2212 }, + { 0x5290, 2215 }, + { 0x528D, 2218 }, + { 0x528E, 2221 }, + { 0x529E, 2224 }, + { 0x529B, 2227 }, + { 0x529C, 2230 }, + { 0x5299, 2233 }, + { 0x52A5, 2236 }, + { 0x52A7, 2239 }, + { 0x52A2, 2242 }, + { 0x52A3, 2245 }, + { 0x52AB, 2248 }, + { 0x52AD, 2251 }, + { 0x52A8, 2254 }, + { 0x52A9, 2257 }, + { 0x52DA, 2260 }, + { 0x52E0, 2263 }, + { 0x52D2, 2266 }, + { 0x52DD, 2269 }, + { 0x52E3, 2272 }, + { 0x52E9, 2275 }, + { 0x5061, 2278 }, + { 0x505E, 2281 }, + { 0x505F, 2284 }, + { 0x506B, 2287 }, + { 0x5069, 2290 }, + { 0x505C, 2293 }, + { 0x5059, 2296 }, + { 0x5056, 2299 }, + { 0x5057, 2302 }, + { 0x5068, 2305 }, + { 0x5065, 2308 }, + { 0x5066, 2311 }, + { 0x5063, 2314 }, + { 0x506F, 2317 }, + { 0x5071, 2320 }, + { 0x506C, 2323 }, + { 0x506D, 2326 }, + { 0x5075, 2329 }, + { 0x5072, 2332 }, + { 0x5073, 2335 }, + { 0x501D, 2338 }, + { 0x501A, 2341 }, + { 0x501B, 2344 }, + { 0x5024, 2347 }, + { 0x5022, 2350 }, + { 0x5030, 2353 }, + { 0x5036, 2356 }, + { 0x5364, 2359 }, + { 0x5361, 2362 }, + { 0x5362, 2365 }, + { 0x5370, 2368 }, + { 0x536D, 2371 }, + { 0x536E, 2374 }, + { 0x536C, 2377 }, + { 0x5369, 2380 }, + { 0x536A, 2383 }, + { 0x5367, 2386 }, + { 0x5373, 2389 }, + { 0x5375, 2392 }, + { 0x5371, 2395 }, + { 0x5379, 2398 }, + { 0x537B, 2401 }, + { 0x5376, 2404 }, + { 0x5377, 2407 }, + { 0x52B5, 2410 }, + { 0x52B2, 2413 }, + { 0x52B3, 2416 }, + { 0x52BC, 2419 }, + { 0x52BA, 2422 }, + { 0x52C8, 2425 }, + { 0x52CE, 2428 }, + { 0x5140, 2431 }, + { 0x513D, 2434 }, + { 0x513E, 2437 }, + { 0x514A, 2440 }, + { 0x5148, 2443 }, + { 0x513B, 2446 }, + { 0x5139, 2449 }, + { 0x5136, 2452 }, + { 0x5137, 2455 }, + { 0x5147, 2458 }, + { 0x5144, 2461 }, + { 0x5145, 2464 }, + { 0x5142, 2467 }, + { 0x514E, 2470 }, + { 0x5150, 2473 }, + { 0x514B, 2476 }, + { 0x514C, 2479 }, + { 0x5106, 2482 }, + { 0x5104, 2485 }, + { 0x510B, 2488 }, + { 0x5118, 2491 }, + { 0x50DC, 2494 }, + { 0x521D, 2497 }, + { 0x521A, 2500 }, + { 0x521B, 2503 }, + { 0x5229, 2506 }, + { 0x5226, 2509 }, + { 0x5227, 2512 }, + { 0x5218, 2515 }, + { 0x5214, 2518 }, + { 0x5215, 2521 }, + { 0x5225, 2524 }, + { 0x5222, 2527 }, + { 0x5223, 2530 }, + { 0x5220, 2533 }, + { 0x522D, 2536 }, + { 0x522F, 2539 }, + { 0x522A, 2542 }, + { 0x522B, 2545 }, + { 0x51E1, 2548 }, + { 0x51DE, 2551 }, + { 0x51DF, 2554 }, + { 0x51E9, 2557 }, + { 0x51E6, 2560 }, + { 0x51E7, 2563 }, + { 0x51F6, 2566 }, + { 0x526F, 2569 }, + { 0x51A1, 2572 }, + { 0x519E, 2575 }, + { 0x519F, 2578 }, + { 0x51AA, 2581 }, + { 0x51A8, 2584 }, + { 0x519C, 2587 }, + { 0x519A, 2590 }, + { 0x5197, 2593 }, + { 0x5198, 2596 }, + { 0x51A7, 2599 }, + { 0x51A5, 2602 }, + { 0x51A3, 2605 }, + { 0x51AE, 2608 }, + { 0x51B0, 2611 }, + { 0x51AB, 2614 }, + { 0x51AC, 2617 }, + { 0x51B4, 2620 }, + { 0x51B6, 2623 }, + { 0x51B1, 2626 }, + { 0x51B2, 2629 }, + { 0x509B, 2632 }, + { 0x5098, 2635 }, + { 0x5099, 2638 }, + { 0x5096, 2641 }, + { 0x5094, 2644 }, + { 0x5091, 2647 }, + { 0x5092, 2650 }, + { 0x50A2, 2653 }, + { 0x509F, 2656 }, + { 0x50A0, 2659 }, + { 0x509D, 2662 }, + { 0x50A6, 2665 }, + { 0x50A8, 2668 }, + { 0x50A3, 2671 }, + { 0x50A4, 2674 }, + { 0x50AB, 2677 }, + { 0x50AD, 2680 }, + { 0x50A9, 2683 }, + { 0x5173, 2686 }, + { 0x5170, 2689 }, + { 0x5171, 2692 }, + { 0x517B, 2695 }, + { 0x5179, 2698 }, + { 0x516E, 2701 }, + { 0x516B, 2704 }, + { 0x5168, 2707 }, + { 0x5169, 2710 }, + { 0x5178, 2713 }, + { 0x5176, 2716 }, + { 0x5177, 2719 }, + { 0x5175, 2722 }, + { 0x517C, 2725 }, + { 0x5278, 2728 }, + { 0x5275, 2731 }, + { 0x5276, 2734 }, + { 0x5251, 2737 }, + { 0x524E, 2740 }, + { 0x524F, 2743 }, + { 0x525C, 2746 }, + { 0x525A, 2749 }, + { 0x524C, 2752 }, + { 0x5249, 2755 }, + { 0x5246, 2758 }, + { 0x5247, 2761 }, + { 0x5259, 2764 }, + { 0x5256, 2767 }, + { 0x5257, 2770 }, + { 0x5254, 2773 }, + { 0x53E7, 2776 }, + { 0x53E4, 2779 }, + { 0x53E5, 2782 }, + { 0x541E, 2785 }, + { 0x541B, 2788 }, + { 0x5418, 2791 }, + { 0x5419, 2794 }, + { 0x5426, 2797 }, + { 0x5423, 2800 }, + { 0x5424, 2803 }, + { 0x5421, 2806 }, + { 0x542A, 2809 }, + { 0x542C, 2812 }, + { 0x5427, 2815 }, + { 0x5428, 2818 }, + { 0x5430, 2821 }, + { 0x542D, 2824 }, + { 0x542E, 2827 }, + { 0x53EB, 2830 }, + { 0x53E8, 2833 }, + { 0x53E9, 2836 }, + { 0x53F4, 2839 }, + { 0x53FA, 2842 }, + { 0x51FE, 2845 }, + { 0x51FC, 2848 }, + { 0x5205, 2851 }, + { 0x5203, 2854 }, + { 0x5212, 2857 }, + { 0x51BE, 2860 }, + { 0x51BB, 2863 }, + { 0x51BC, 2866 }, + { 0x51C6, 2869 }, + { 0x51C3, 2872 }, + { 0x51C4, 2875 }, + { 0x51D2, 2878 }, + { 0x51D8, 2881 }, + { 0x5235, 2884 }, + { 0x5232, 2887 }, + { 0x5233, 2890 }, + { 0x523F, 2893 }, + { 0x523D, 2896 }, + { 0x5231, 2899 }, + { 0x523C, 2902 }, + { 0x5239, 2905 }, + { 0x523A, 2908 }, + { 0x5237, 2911 }, + { 0x5243, 2914 }, + { 0x5245, 2917 }, + { 0x5240, 2920 }, + { 0x5241, 2923 }, + { 0x50B4, 2926 }, + { 0x50B2, 2929 }, + { 0x50BC, 2932 }, + { 0x50B9, 2935 }, + { 0x50BA, 2938 }, + { 0x50C7, 2941 }, + { 0x5080, 2944 }, + { 0x507D, 2947 }, + { 0x507E, 2950 }, + { 0x507B, 2953 }, + { 0x5079, 2956 }, + { 0x5076, 2959 }, + { 0x5077, 2962 }, + { 0x5084, 2965 }, + { 0x5081, 2968 }, + { 0x5082, 2971 }, + { 0x5088, 2974 }, + { 0x508A, 2977 }, + { 0x5085, 2980 }, + { 0x5086, 2983 }, + { 0x508E, 2986 }, + { 0x5090, 2989 }, + { 0x508B, 2992 }, + { 0x508C, 2995 }, + { 0x515A, 2998 }, + { 0x5157, 3001 }, + { 0x5158, 3004 }, + { 0x5161, 3007 }, + { 0x515F, 3010 }, + { 0x5156, 3013 }, + { 0x5154, 3016 }, + { 0x5151, 3019 }, + { 0x5152, 3022 }, + { 0x515E, 3025 }, + { 0x515B, 3028 }, + { 0x515C, 3031 }, + { 0x5165, 3034 }, + { 0x5167, 3037 }, + { 0x5162, 3040 }, + { 0x5163, 3043 }, + { 0x5263, 3046 }, + { 0x5260, 3049 }, + { 0x5261, 3052 }, + { 0x526D, 3055 }, + { 0x526B, 3058 }, + { 0x525E, 3061 }, + { 0x526A, 3064 }, + { 0x5267, 3067 }, + { 0x5268, 3070 }, + { 0x5266, 3073 }, + { 0x5183, 3076 }, + { 0x5181, 3079 }, + { 0x5437, 3082 }, + { 0x5434, 3085 }, + { 0x5431, 3088 }, + { 0x5432, 3091 }, + { 0x543E, 3094 }, + { 0x543B, 3097 }, + { 0x543C, 3100 }, + { 0x543A, 3103 }, + { 0x5441, 3106 }, + { 0x5443, 3109 }, + { 0x543F, 3112 }, + { 0x5447, 3115 }, + { 0x5449, 3118 }, + { 0x5444, 3121 }, + { 0x5445, 3124 }, + { 0x5397, 3127 }, + { 0x5394, 3130 }, + { 0x5395, 3133 }, + { 0x539E, 3136 }, + { 0x539B, 3139 }, + { 0x539C, 3142 }, + { 0x539A, 3145 }, + { 0x5398, 3148 }, + { 0x53A2, 3151 }, + { 0x53A4, 3154 }, + { 0x539F, 3157 }, + { 0x53A0, 3160 }, + { 0x53A8, 3163 }, + { 0x53AA, 3166 }, + { 0x53A5, 3169 }, + { 0x53A6, 3172 }, + { 0x5189, 3175 }, + { 0x5187, 3178 }, + { 0x5195, 3181 }, + { 0x5450, 3184 }, + { 0x544D, 3187 }, + { 0x544A, 3190 }, + { 0x544B, 3193 }, + { 0x5458, 3196 }, + { 0x5455, 3199 }, + { 0x5456, 3202 }, + { 0x5453, 3205 }, + { 0x545C, 3208 }, + { 0x5459, 3211 }, + { 0x545A, 3214 }, + { 0x52F7, 3217 }, + { 0x52F4, 3220 }, + { 0x52F5, 3223 }, + { 0x52FC, 3226 }, + { 0x52F2, 3229 }, + { 0x52F0, 3232 }, + { 0x52ED, 3235 }, + { 0x52EE, 3238 }, + { 0x52FB, 3241 }, + { 0x52FA, 3244 }, + { 0x52F9, 3247 }, + { 0x5300, 3250 }, + { 0x5302, 3253 }, + { 0x52FE, 3256 }, + { 0x5306, 3259 }, + { 0x5308, 3262 }, + { 0x5303, 3265 }, + { 0x5304, 3268 }, + { 0x503E, 3271 }, + { 0x503C, 3274 }, + { 0x5045, 3277 }, + { 0x5043, 3280 }, + { 0x504E, 3283 }, + { 0x5054, 3286 }, + { 0x5403, 3289 }, + { 0x5400, 3292 }, + { 0x5401, 3295 }, + { 0x5407, 3298 }, + { 0x5404, 3301 }, + { 0x5405, 3304 }, + { 0x5410, 3307 }, + { 0x5416, 3310 }, + { 0x537C, 3313 }, + { 0x5387, 3316 }, + { 0x5384, 3319 }, + { 0x5385, 3322 }, + { 0x5383, 3325 }, + { 0x5380, 3328 }, + { 0x5381, 3331 }, + { 0x537F, 3334 }, + { 0x538B, 3337 }, + { 0x538D, 3340 }, + { 0x5388, 3343 }, + { 0x5389, 3346 }, + { 0x5391, 3349 }, + { 0x5393, 3352 }, + { 0x538E, 3355 }, + { 0x538F, 3358 }, + { 0x53CC, 3361 }, + { 0x53CA, 3364 }, + { 0x53D8, 3367 }, + { 0x53DE, 3370 }, + { 0x53AE, 3373 }, + { 0x53AB, 3376 }, + { 0x53AC, 3379 }, + { 0x53B9, 3382 }, + { 0x53B6, 3385 }, + { 0x53B7, 3388 }, + { 0x53B5, 3391 }, + { 0x53B2, 3394 }, + { 0x53B3, 3397 }, + { 0x53B0, 3400 }, + { 0x53BD, 3403 }, + { 0x53BF, 3406 }, + { 0x53BA, 3409 }, + { 0x53BB, 3412 }, + { 0x53C3, 3415 }, + { 0x53C5, 3418 }, + { 0x53C0, 3421 }, + { 0x53C1, 3424 }, + { 0x530F, 3427 }, + { 0x530D, 3430 }, + { 0x5334, 3433 }, + { 0x5331, 3436 }, + { 0x5332, 3439 }, + { 0x533B, 3442 }, + { 0x5339, 3445 }, + { 0x532F, 3448 }, + { 0x532D, 3451 }, + { 0x532A, 3454 }, + { 0x532B, 3457 }, + { 0x5338, 3460 }, + { 0x5335, 3463 }, + { 0x5336, 3466 }, + { 0x533F, 3469 }, + { 0x533C, 3472 }, + { 0x533D, 3475 }, + { 0x5343, 3478 }, + { 0x5345, 3481 }, + { 0x5340, 3484 }, + { 0x5341, 3487 }, + { 0x5316, 3490 }, + { 0x5314, 3493 }, + { 0x5322, 3496 }, + { 0x5328, 3499 }, + { 0x5120, 3502 }, + { 0x511E, 3505 }, + { 0x5128, 3508 }, + { 0x5125, 3511 }, + { 0x5126, 3514 }, + { 0x5134, 3517 }, + { 0x50E9, 3520 }, + { 0x50E6, 3523 }, + { 0x50E7, 3526 }, + { 0x50F8, 3529 }, + { 0x50FE, 3532 }, + { 0x5286, 3535 }, + { 0x5284, 3538 }, + { 0x5464, 3541 }, + { 0x5461, 3544 }, + { 0x5462, 3547 }, + { 0x5465, 3550 }, + { 0x546F, 3553 }, + { 0x5478, 3556 }, + { 0x5475, 3559 }, + { 0x5476, 3562 }, + { 0x547C, 3565 }, + { 0x5479, 3568 }, + { 0x547A, 3571 }, + { 0x5485, 3574 }, + { 0x548B, 3577 }, + { 0x5349, 3580 }, + { 0x5346, 3583 }, + { 0x5347, 3586 }, + { 0x5354, 3589 }, + { 0x5351, 3592 }, + { 0x5352, 3595 }, + { 0x5350, 3598 }, + { 0x534D, 3601 }, + { 0x534E, 3604 }, + { 0x534B, 3607 }, + { 0x5358, 3610 }, + { 0x535A, 3613 }, + { 0x5355, 3616 }, + { 0x5356, 3619 }, + { 0x535E, 3622 }, + { 0x5360, 3625 }, + { 0x535B, 3628 }, + { 0x535C, 3631 }, + { 0x5293, 3634 }, + { 0x5291, 3637 }, + { 0x529A, 3640 }, + { 0x5298, 3643 }, + { 0x52A6, 3646 }, + { 0x52AC, 3649 }, + { 0x52DB, 3652 }, + { 0x52D8, 3655 }, + { 0x52D9, 3658 }, + { 0x52E1, 3661 }, + { 0x52DF, 3664 }, + { 0x52D6, 3667 }, + { 0x52D3, 3670 }, + { 0x52D0, 3673 }, + { 0x52D1, 3676 }, + { 0x52DE, 3679 }, + { 0x52DC, 3682 }, + { 0x52E4, 3685 }, + { 0x52E6, 3688 }, + { 0x52E2, 3691 }, + { 0x52EA, 3694 }, + { 0x52EC, 3697 }, + { 0x52E7, 3700 }, + { 0x52E8, 3703 }, + { 0x505D, 3706 }, + { 0x505A, 3709 }, + { 0x505B, 3712 }, + { 0x5064, 3715 }, + { 0x5062, 3718 }, + { 0x5070, 3721 }, + { 0x5368, 3724 }, + { 0x5365, 3727 }, + { 0x5366, 3730 }, + { 0x5374, 3733 }, + { 0x537A, 3736 }, + { 0x513C, 3739 }, + { 0x513A, 3742 }, + { 0x5143, 3745 }, + { 0x5141, 3748 }, + { 0x514F, 3751 }, + { 0x5219, 3754 }, + { 0x5217, 3757 }, + { 0x5221, 3760 }, + { 0x521E, 3763 }, + { 0x521F, 3766 }, + { 0x522E, 3769 }, + { 0x519D, 3772 }, + { 0x519B, 3775 }, + { 0x51A4, 3778 }, + { 0x51A2, 3781 }, + { 0x51AF, 3784 }, + { 0x51B5, 3787 }, + { 0x5097, 3790 }, + { 0x5095, 3793 }, + { 0x509E, 3796 }, + { 0x509C, 3799 }, + { 0x50A7, 3802 }, + { 0x50AC, 3805 }, + { 0x516F, 3808 }, + { 0x516C, 3811 }, + { 0x516D, 3814 }, + { 0x5174, 3817 }, + { 0x524D, 3820 }, + { 0x524A, 3823 }, + { 0x524B, 3826 }, + { 0x5255, 3829 }, + { 0x5252, 3832 }, + { 0x5253, 3835 }, + { 0x541F, 3838 }, + { 0x541C, 3841 }, + { 0x541D, 3844 }, + { 0x5422, 3847 }, + { 0x5420, 3850 }, + { 0x542B, 3853 }, + { 0x5230, 3856 }, + { 0x5238, 3859 }, + { 0x5236, 3862 }, + { 0x5244, 3865 }, + { 0x507C, 3868 }, + { 0x507A, 3871 }, + { 0x5089, 3874 }, + { 0x508F, 3877 }, + { 0x5155, 3880 }, + { 0x5166, 3883 }, + { 0x525F, 3886 }, + { 0x525D, 3889 }, + { 0x5264, 3892 }, + { 0x5265, 3895 }, + { 0x5438, 3898 }, + { 0x5435, 3901 }, + { 0x5436, 3904 }, + { 0x5439, 3907 }, + { 0x5442, 3910 }, + { 0x5448, 3913 }, + { 0x53A3, 3916 }, + { 0x53A9, 3919 }, + { 0x5451, 3922 }, + { 0x544E, 3925 }, + { 0x544F, 3928 }, + { 0x5454, 3931 }, + { 0x5452, 3934 }, + { 0x52F3, 3937 }, + { 0x52F1, 3940 }, + { 0x52F8, 3943 }, + { 0x5301, 3946 }, + { 0x5307, 3949 }, + { 0x537E, 3952 }, + { 0x538C, 3955 }, + { 0x5392, 3958 }, + { 0x53B1, 3961 }, + { 0x53AF, 3964 }, + { 0x53BE, 3967 }, + { 0x53C4, 3970 }, + { 0x5330, 3973 }, + { 0x532E, 3976 }, + { 0x5344, 3979 }, + { 0x534C, 3982 }, + { 0x534A, 3985 }, + { 0x5359, 3988 }, + { 0x535F, 3991 }, + { 0x52D7, 3994 }, + { 0x52D4, 3997 }, + { 0x52D5, 4000 }, + { 0x52E5, 4003 }, + { 0x52EB, 4006 }, + { 0x262C, 4009 }, + { 0x224C, 4011 }, + { 0x232E, 4014 }, + { 0x27D1, 4016 }, + { 0x235D, 4019 }, + { 0x2355, 4025 }, + { 0x2351, 4031 }, + { 0x2361, 4037 }, + { 0x2372, 4043 }, + { 0x2352, 4049 }, + { 0x236B, 4054 }, + { 0x2362, 4059 }, + { 0x235B, 4064 }, + { 0x2364, 4069 }, + { 0x2374, 4074 }, + { 0x2366, 4078 }, + { 0x234E, 4084 }, + { 0x234A, 4090 }, + { 0x2371, 4096 }, + { 0x2373, 4102 }, + { 0x2378, 4106 }, + { 0x2367, 4111 }, + { 0x2395, 4117 }, + { 0x2353, 4121 }, + { 0x2354, 4127 }, + { 0x233B, 4132 }, + { 0x236F, 4137 }, + { 0x234C, 4143 }, + { 0x2360, 4149 }, + { 0x234D, 4154 }, + { 0x2338, 4159 }, + { 0x2341, 4164 }, + { 0x233C, 4169 }, + { 0x2339, 4174 }, + { 0x233A, 4179 }, + { 0x2350, 4184 }, + { 0x2370, 4190 }, + { 0x2342, 4195 }, + { 0x2357, 4200 }, + { 0x2347, 4206 }, + { 0x2343, 4212 }, + { 0x2348, 4217 }, + { 0x2344, 4223 }, + { 0x2363, 4228 }, + { 0x237A, 4233 }, + { 0x2376, 4237 }, + { 0x236A, 4242 }, + { 0x234B, 4247 }, + { 0x2359, 4252 }, + { 0x2375, 4257 }, + { 0x2379, 4261 }, + { 0x235E, 4266 }, + { 0x2358, 4271 }, + { 0x233F, 4276 }, + { 0x236D, 4281 }, + { 0x2368, 4286 }, + { 0x236C, 4291 }, + { 0x233E, 4295 }, + { 0x235F, 4300 }, + { 0x233D, 4305 }, + { 0x235C, 4310 }, + { 0x2349, 4315 }, + { 0x2365, 4320 }, + { 0x2336, 4325 }, + { 0x2337, 4329 }, + { 0x235A, 4334 }, + { 0x2377, 4339 }, + { 0x234F, 4344 }, + { 0x2340, 4349 }, + { 0x2356, 4354 }, + { 0x2345, 4359 }, + { 0x236E, 4364 }, + { 0x2346, 4369 }, + { 0x2369, 4374 }, + { 0x2312, 4379 }, + { 0x2136, 4380 }, + { 0x29F9, 4382 }, + { 0x29F8, 4385 }, + { 0x2540, 4387 }, + { 0x2526, 4395 }, + { 0x251A, 4403 }, + { 0x251E, 4410 }, + { 0x2516, 4418 }, + { 0x2538, 4425 }, + { 0x2548, 4432 }, + { 0x252A, 4440 }, + { 0x2519, 4448 }, + { 0x2522, 4455 }, + { 0x2515, 4463 }, + { 0x2537, 4470 }, + { 0x255C, 4477 }, + { 0x2559, 4484 }, + { 0x2568, 4491 }, + { 0x255B, 4498 }, + { 0x2558, 4505 }, + { 0x2567, 4512 }, + { 0x2541, 4519 }, + { 0x2527, 4527 }, + { 0x2512, 4535 }, + { 0x251F, 4542 }, + { 0x250E, 4550 }, + { 0x2530, 4557 }, + { 0x2547, 4564 }, + { 0x2529, 4572 }, + { 0x2511, 4580 }, + { 0x2521, 4587 }, + { 0x250D, 4595 }, + { 0x252F, 4602 }, + { 0x2556, 4609 }, + { 0x2553, 4616 }, + { 0x2565, 4623 }, + { 0x2555, 4630 }, + { 0x2552, 4637 }, + { 0x2564, 4644 }, + { 0x2543, 4651 }, + { 0x2545, 4660 }, + { 0x2535, 4669 }, + { 0x252D, 4677 }, + { 0x253D, 4685 }, + { 0x253A, 4693 }, + { 0x2532, 4701 }, + { 0x254A, 4709 }, + { 0x2579, 4717 }, + { 0x251B, 4721 }, + { 0x257F, 4727 }, + { 0x2517, 4734 }, + { 0x253B, 4740 }, + { 0x257B, 4746 }, + { 0x2513, 4750 }, + { 0x250F, 4756 }, + { 0x2533, 4762 }, + { 0x2578, 4768 }, + { 0x257E, 4772 }, + { 0x257A, 4779 }, + { 0x254F, 4783 }, + { 0x254D, 4789 }, + { 0x2507, 4795 }, + { 0x2505, 4801 }, + { 0x2503, 4807 }, + { 0x252B, 4811 }, + { 0x2523, 4817 }, + { 0x254B, 4823 }, + { 0x250B, 4829 }, + { 0x2509, 4835 }, + { 0x2501, 4841 }, + { 0x2575, 4845 }, + { 0x2518, 4849 }, + { 0x257D, 4855 }, + { 0x2514, 4862 }, + { 0x2534, 4868 }, + { 0x256F, 4874 }, + { 0x2570, 4881 }, + { 0x256E, 4888 }, + { 0x256D, 4895 }, + { 0x2577, 4902 }, + { 0x2510, 4906 }, + { 0x250C, 4912 }, + { 0x252C, 4918 }, + { 0x2574, 4924 }, + { 0x257C, 4928 }, + { 0x2576, 4935 }, + { 0x254E, 4939 }, + { 0x254C, 4945 }, + { 0x2506, 4951 }, + { 0x2504, 4957 }, + { 0x2573, 4963 }, + { 0x2572, 4968 }, + { 0x2571, 4977 }, + { 0x2502, 4986 }, + { 0x2524, 4990 }, + { 0x251C, 4996 }, + { 0x253C, 5002 }, + { 0x250A, 5008 }, + { 0x2508, 5014 }, + { 0x2500, 5020 }, + { 0x2544, 5024 }, + { 0x2546, 5033 }, + { 0x2536, 5042 }, + { 0x252E, 5050 }, + { 0x253E, 5058 }, + { 0x2539, 5066 }, + { 0x2531, 5074 }, + { 0x2549, 5082 }, + { 0x255D, 5090 }, + { 0x255A, 5096 }, + { 0x2569, 5102 }, + { 0x2557, 5108 }, + { 0x2554, 5114 }, + { 0x2566, 5120 }, + { 0x2551, 5126 }, + { 0x2563, 5130 }, + { 0x2560, 5136 }, + { 0x256C, 5142 }, + { 0x2550, 5148 }, + { 0x2528, 5152 }, + { 0x2520, 5159 }, + { 0x2542, 5166 }, + { 0x2525, 5173 }, + { 0x251D, 5180 }, + { 0x253F, 5187 }, + { 0x2562, 5194 }, + { 0x255F, 5201 }, + { 0x256B, 5208 }, + { 0x2561, 5215 }, + { 0x255E, 5222 }, + { 0x256A, 5229 }, + { 0x2627, 5236 }, + { 0x31D4, 5238 }, + { 0x31D0, 5241 }, + { 0x31CF, 5244 }, + { 0x31D2, 5247 }, + { 0x31E3, 5250 }, + { 0x31D1, 5253 }, + { 0x31C0, 5256 }, + { 0x31D6, 5259 }, + { 0x31C7, 5262 }, + { 0x31D5, 5265 }, + { 0x31DB, 5268 }, + { 0x31E2, 5271 }, + { 0x31DC, 5274 }, + { 0x31DA, 5277 }, + { 0x31D3, 5280 }, + { 0x31D9, 5283 }, + { 0x31C4, 5286 }, + { 0x31D7, 5289 }, + { 0x31DD, 5292 }, + { 0x31C1, 5295 }, + { 0x31C2, 5298 }, + { 0x31C3, 5301 }, + { 0x31C6, 5304 }, + { 0x31CA, 5307 }, + { 0x31CD, 5310 }, + { 0x31C5, 5313 }, + { 0x31DF, 5316 }, + { 0x31D8, 5319 }, + { 0x31DE, 5322 }, + { 0x31CC, 5325 }, + { 0x31E0, 5328 }, + { 0x31C8, 5331 }, + { 0x31CB, 5334 }, + { 0x31CE, 5337 }, + { 0x31C9, 5340 }, + { 0x31E1, 5343 }, + { 0x2E86, 5346 }, + { 0x2EA7, 5349 }, + { 0x2EA8, 5352 }, + { 0x2EDD, 5355 }, + { 0x2EDE, 5359 }, + { 0x2EDF, 5363 }, + { 0x2EB8, 5367 }, + { 0x2EAB, 5370 }, + { 0x2EB1, 5373 }, + { 0x2EB2, 5377 }, + { 0x2EB4, 5381 }, + { 0x2EB3, 5385 }, + { 0x2EB9, 5389 }, + { 0x2EA4, 5392 }, + { 0x2EA5, 5396 }, + { 0x2EB7, 5400 }, + { 0x2E99, 5403 }, + { 0x2E9C, 5406 }, + { 0x2ED8, 5409 }, + { 0x2EAA, 5412 }, + { 0x2EE3, 5417 }, + { 0x2ECF, 5420 }, + { 0x2EA3, 5423 }, + { 0x2ECA, 5426 }, + { 0x2E98, 5429 }, + { 0x2EE1, 5432 }, + { 0x2EC7, 5435 }, + { 0x2EA9, 5438 }, + { 0x2E8E, 5441 }, + { 0x2E8F, 5445 }, + { 0x2E91, 5449 }, + { 0x2E90, 5453 }, + { 0x2ED1, 5457 }, + { 0x2ED2, 5461 }, + { 0x2EBC, 5465 }, + { 0x2EB5, 5468 }, + { 0x2E9D, 5471 }, + { 0x2ED7, 5474 }, + { 0x2E8B, 5477 }, + { 0x2EAF, 5480 }, + { 0x2ECD, 5483 }, + { 0x2ECE, 5487 }, + { 0x2EC3, 5491 }, + { 0x2EC4, 5495 }, + { 0x2EBA, 5499 }, + { 0x2EBB, 5503 }, + { 0x2E9B, 5507 }, + { 0x2E81, 5510 }, + { 0x2E9E, 5513 }, + { 0x2EE4, 5516 }, + { 0x2EBE, 5519 }, + { 0x2EBF, 5523 }, + { 0x2EC0, 5527 }, + { 0x2E96, 5531 }, + { 0x2E97, 5535 }, + { 0x2E88, 5539 }, + { 0x2E89, 5543 }, + { 0x2ED5, 5547 }, + { 0x2ED6, 5551 }, + { 0x2EB6, 5555 }, + { 0x2E8C, 5558 }, + { 0x2E8D, 5562 }, + { 0x2E92, 5566 }, + { 0x2E94, 5569 }, + { 0x2E95, 5573 }, + { 0x2E87, 5577 }, + { 0x2EC1, 5580 }, + { 0x2EA1, 5583 }, + { 0x2EA2, 5587 }, + { 0x2EAE, 5591 }, + { 0x2EBD, 5594 }, + { 0x2E9F, 5597 }, + { 0x2E85, 5600 }, + { 0x2E80, 5603 }, + { 0x2E82, 5606 }, + { 0x2E83, 5610 }, + { 0x2E84, 5614 }, + { 0x2EAC, 5618 }, + { 0x2EAD, 5622 }, + { 0x2E93, 5626 }, + { 0x2EF1, 5629 }, + { 0x2EC2, 5632 }, + { 0x2EA0, 5635 }, + { 0x2E8A, 5638 }, + { 0x2EA6, 5641 }, + { 0x2EC6, 5647 }, + { 0x2ECC, 5651 }, + { 0x2EE8, 5655 }, + { 0x2EE9, 5659 }, + { 0x2EE0, 5663 }, + { 0x2EDC, 5667 }, + { 0x2EC5, 5671 }, + { 0x2EE6, 5675 }, + { 0x2ECB, 5679 }, + { 0x2EEC, 5683 }, + { 0x2EE5, 5687 }, + { 0x2EEA, 5691 }, + { 0x2ED4, 5695 }, + { 0x2ED0, 5699 }, + { 0x2EDA, 5703 }, + { 0x2ED3, 5707 }, + { 0x2EE7, 5711 }, + { 0x2EB0, 5715 }, + { 0x2EDB, 5719 }, + { 0x2EE2, 5723 }, + { 0x2EC9, 5727 }, + { 0x2EEE, 5731 }, + { 0x2EF0, 5735 }, + { 0x2EC8, 5739 }, + { 0x2ED9, 5743 }, + { 0x2EF3, 5748 }, + { 0x2EEB, 5752 }, + { 0x2EED, 5756 }, + { 0x2EEF, 5760 }, + { 0x2EF2, 5764 }, + { 0x2680, 5768 }, + { 0x2681, 5770 }, + { 0x2682, 5772 }, + { 0x2683, 5774 }, + { 0x2684, 5776 }, + { 0x2685, 5778 }, + { 0x2214, 5780 }, + { 0x02D9, 5782 }, + { 0x2238, 5784 }, + { 0x22C5, 5786 }, + { 0x220E, 5788 }, + { 0x2200, 5791 }, + { 0x2668, 5793 }, + { 0x2615, 5795 }, + { 0x20AD, 5797 }, + { 0x0EDD, 5799 }, + { 0x0EDC, 5802 }, + { 0x0EC6, 5805 }, + { 0x0EC8, 5808 }, + { 0x0ECA, 5812 }, + { 0x0EC9, 5816 }, + { 0x0ECB, 5820 }, + { 0x0ED1, 5824 }, + { 0x0ED6, 5827 }, + { 0x0ED2, 5830 }, + { 0x0ED5, 5833 }, + { 0x0ED4, 5836 }, + { 0x0ED9, 5839 }, + { 0x0ED0, 5842 }, + { 0x0ED8, 5845 }, + { 0x0ED7, 5848 }, + { 0x0ED3, 5851 }, + { 0x0EB0, 5854 }, + { 0x0EC0, 5858 }, + { 0x0EB4, 5862 }, + { 0x0EC2, 5866 }, + { 0x0EB8, 5870 }, + { 0x0EB6, 5874 }, + { 0x0EB2, 5878 }, + { 0x0EC4, 5882 }, + { 0x0EB3, 5886 }, + { 0x0EC3, 5890 }, + { 0x0EC1, 5894 }, + { 0x0EB5, 5898 }, + { 0x0EB9, 5902 }, + { 0x0EB7, 5906 }, + { 0x0EB1, 5910 }, + { 0x0EBB, 5915 }, + { 0x0EAD, 5920 }, + { 0x0E9A, 5923 }, + { 0x0E88, 5926 }, + { 0x0E94, 5929 }, + { 0x0E9D, 5932 }, + { 0x0E9F, 5936 }, + { 0x0EAE, 5940 }, + { 0x0EAB, 5944 }, + { 0x0E81, 5948 }, + { 0x0EA3, 5951 }, + { 0x0EA5, 5955 }, + { 0x0EA1, 5959 }, + { 0x0E99, 5962 }, + { 0x0E9B, 5965 }, + { 0x0E8A, 5968 }, + { 0x0EAA, 5972 }, + { 0x0E95, 5976 }, + { 0x0EA7, 5979 }, + { 0x0EA2, 5982 }, + { 0x0E84, 5985 }, + { 0x0E82, 5989 }, + { 0x0E87, 5993 }, + { 0x0E8D, 5996 }, + { 0x0E9E, 5999 }, + { 0x0E9C, 6003 }, + { 0x0E97, 6007 }, + { 0x0E96, 6011 }, + { 0x0EAF, 6015 }, + { 0x0ECD, 6017 }, + { 0x0EBC, 6019 }, + { 0x0EBD, 6023 }, + { 0x0ECC, 6027 }, + { 0x264C, 6030 }, + { 0x005F, 6031 }, + { 0x301F, 6033 }, + { 0x204E, 6038 }, + { 0x19DE, 6040 }, + { 0x19DF, 6045 }, + { 0x19C8, 6050 }, + { 0x19C9, 6055 }, + { 0x19D1, 6060 }, + { 0x19D6, 6065 }, + { 0x19D2, 6070 }, + { 0x19D5, 6075 }, + { 0x19D4, 6080 }, + { 0x19D9, 6085 }, + { 0x19D0, 6090 }, + { 0x19D8, 6095 }, + { 0x19D7, 6100 }, + { 0x19D3, 6105 }, + { 0x19B5, 6110 }, + { 0x19B7, 6116 }, + { 0x19B3, 6122 }, + { 0x19B1, 6128 }, + { 0x19B6, 6134 }, + { 0x19BA, 6140 }, + { 0x19B2, 6146 }, + { 0x19C0, 6152 }, + { 0x19B8, 6158 }, + { 0x19BD, 6164 }, + { 0x19B9, 6170 }, + { 0x19B4, 6176 }, + { 0x19BC, 6182 }, + { 0x19BB, 6188 }, + { 0x19BE, 6194 }, + { 0x19BF, 6200 }, + { 0x19B0, 6206 }, + { 0x19A5, 6213 }, + { 0x19A4, 6219 }, + { 0x199D, 6225 }, + { 0x19A3, 6231 }, + { 0x1985, 6237 }, + { 0x199F, 6243 }, + { 0x1999, 6249 }, + { 0x1993, 6255 }, + { 0x1997, 6261 }, + { 0x1981, 6267 }, + { 0x198C, 6273 }, + { 0x1991, 6279 }, + { 0x199E, 6285 }, + { 0x1986, 6291 }, + { 0x198D, 6297 }, + { 0x19A8, 6303 }, + { 0x1987, 6309 }, + { 0x1998, 6315 }, + { 0x1992, 6321 }, + { 0x198B, 6327 }, + { 0x19A9, 6333 }, + { 0x19A2, 6339 }, + { 0x19A1, 6345 }, + { 0x199A, 6351 }, + { 0x19A0, 6357 }, + { 0x1982, 6363 }, + { 0x199C, 6369 }, + { 0x1996, 6375 }, + { 0x1990, 6381 }, + { 0x1994, 6387 }, + { 0x1980, 6393 }, + { 0x1989, 6399 }, + { 0x198E, 6405 }, + { 0x199B, 6411 }, + { 0x1983, 6417 }, + { 0x198A, 6423 }, + { 0x19A6, 6429 }, + { 0x1984, 6435 }, + { 0x1995, 6441 }, + { 0x198F, 6447 }, + { 0x1988, 6453 }, + { 0x19A7, 6459 }, + { 0x19C7, 6465 }, + { 0x19C6, 6471 }, + { 0x19C5, 6477 }, + { 0x19C4, 6483 }, + { 0x19C3, 6489 }, + { 0x19C1, 6495 }, + { 0x19C2, 6501 }, + { 0x20AA, 6507 }, + { 0x07F5, 6510 }, + { 0x07F4, 6514 }, + { 0x07F8, 6518 }, + { 0x07C1, 6520 }, + { 0x07C6, 6523 }, + { 0x07C2, 6526 }, + { 0x07C5, 6529 }, + { 0x07C4, 6532 }, + { 0x07C9, 6535 }, + { 0x07C0, 6538 }, + { 0x07C8, 6541 }, + { 0x07C7, 6544 }, + { 0x07C3, 6547 }, + { 0x07CA, 6550 }, + { 0x07CD, 6553 }, + { 0x07CC, 6556 }, + { 0x07D2, 6559 }, + { 0x07D0, 6562 }, + { 0x07CE, 6565 }, + { 0x07D3, 6568 }, + { 0x07D8, 6571 }, + { 0x07CB, 6574 }, + { 0x07DD, 6577 }, + { 0x07E4, 6580 }, + { 0x07D6, 6583 }, + { 0x07DE, 6586 }, + { 0x07DF, 6589 }, + { 0x07E1, 6592 }, + { 0x07E3, 6595 }, + { 0x07E0, 6598 }, + { 0x07CF, 6602 }, + { 0x07D4, 6605 }, + { 0x07D9, 6608 }, + { 0x07DB, 6611 }, + { 0x07D5, 6614 }, + { 0x07E5, 6617 }, + { 0x07E6, 6620 }, + { 0x07D7, 6623 }, + { 0x07DC, 6626 }, + { 0x07E2, 6629 }, + { 0x07E7, 6632 }, + { 0x07DA, 6636 }, + { 0x07E8, 6639 }, + { 0x07EA, 6643 }, + { 0x07E9, 6647 }, + { 0x07D1, 6651 }, + { 0x07F6, 6654 }, + { 0x07F7, 6658 }, + { 0x07F0, 6661 }, + { 0x07EF, 6666 }, + { 0x07F1, 6671 }, + { 0x07EE, 6676 }, + { 0x07EC, 6681 }, + { 0x07EB, 6686 }, + { 0x07ED, 6691 }, + { 0x07F3, 6696 }, + { 0x07F2, 6701 }, + { 0x07FA, 6705 }, + { 0x07F9, 6707 }, + { 0x22BD, 6710 }, + { 0x2284, 6711 }, + { 0x2285, 6715 }, + { 0x2209, 6719 }, + { 0x00AC, 6723 }, + { 0x22AD, 6725 }, + { 0x237B, 6727 }, + { 0x2260, 6730 }, + { 0x2241, 6733 }, + { 0x2249, 6735 }, + { 0x22EA, 6739 }, + { 0x22EC, 6743 }, + { 0x22E2, 6750 }, + { 0x22E3, 6757 }, + { 0x2226, 6764 }, + { 0x2262, 6767 }, + { 0x226E, 6770 }, + { 0x226D, 6772 }, + { 0x226F, 6775 }, + { 0x2244, 6777 }, + { 0x2445, 6781 }, + { 0x2444, 6784 }, + { 0x2448, 6787 }, + { 0x2442, 6789 }, + { 0x2440, 6791 }, + { 0x2441, 6793 }, + { 0x2447, 6795 }, + { 0x2446, 6799 }, + { 0x244A, 6803 }, + { 0x2449, 6806 }, + { 0x2443, 6810 }, + { 0x2126, 6813 }, + { 0x7300, 6815 }, + { 0x7304, 6819 }, + { 0x7309, 6823 }, + { 0x730F, 6827 }, + { 0x7316, 6831 }, + { 0x7301, 6835 }, + { 0x7303, 6839 }, + { 0x731A, 6843 }, + { 0x730B, 6847 }, + { 0x730C, 6851 }, + { 0x730D, 6855 }, + { 0x7313, 6859 }, + { 0x7314, 6863 }, + { 0x7307, 6867 }, + { 0x731D, 6871 }, + { 0x730A, 6875 }, + { 0x7302, 6879 }, + { 0x7312, 6883 }, + { 0x7310, 6887 }, + { 0x7315, 6891 }, + { 0x731E, 6895 }, + { 0x7305, 6899 }, + { 0x7306, 6903 }, + { 0x731C, 6907 }, + { 0x7317, 6911 }, + { 0x731B, 6915 }, + { 0x730E, 6919 }, + { 0x7319, 6923 }, + { 0x7318, 6927 }, + { 0x7311, 6931 }, + { 0x7308, 6935 }, + { 0x7320, 6939 }, + { 0x7322, 6943 }, + { 0x7321, 6947 }, + { 0x7323, 6951 }, + { 0x73A0, 6955 }, + { 0x73A1, 6959 }, + { 0x73A2, 6963 }, + { 0x73B2, 6967 }, + { 0x73A8, 6971 }, + { 0x73AD, 6975 }, + { 0x73AE, 6979 }, + { 0x73AF, 6983 }, + { 0x73B3, 6987 }, + { 0x73A5, 6991 }, + { 0x73A6, 6995 }, + { 0x73C3, 6999 }, + { 0x73A9, 7003 }, + { 0x73AA, 7007 }, + { 0x73A3, 7011 }, + { 0x73A4, 7015 }, + { 0x73BE, 7019 }, + { 0x73B6, 7023 }, + { 0x73B7, 7027 }, + { 0x73B8, 7031 }, + { 0x73B4, 7035 }, + { 0x73B5, 7039 }, + { 0x73B1, 7043 }, + { 0x73BC, 7047 }, + { 0x73BD, 7051 }, + { 0x73BF, 7055 }, + { 0x73AB, 7059 }, + { 0x73AC, 7063 }, + { 0x73BA, 7067 }, + { 0x73BB, 7071 }, + { 0x73A7, 7075 }, + { 0x73B9, 7079 }, + { 0x73C0, 7083 }, + { 0x73C1, 7087 }, + { 0x73C2, 7091 }, + { 0x73B0, 7095 }, + { 0x73CE, 7099 }, + { 0x73CF, 7103 }, + { 0x73CC, 7107 }, + { 0x73C8, 7111 }, + { 0x73CD, 7115 }, + { 0x73C9, 7119 }, + { 0x73CA, 7123 }, + { 0x73CB, 7127 }, + { 0x73D0, 7131 }, + { 0x73D1, 7135 }, + { 0x73D3, 7139 }, + { 0x73D2, 7143 }, + { 0x73D4, 7147 }, + { 0x73D5, 7151 }, + { 0x2E2B, 7155 }, + { 0x2024, 7161 }, + { 0x2031, 7164 }, + { 0x214C, 7168 }, + { 0x2030, 7170 }, + { 0x202C, 7173 }, + { 0x2216, 7176 }, + { 0x2736, 7178 }, + { 0x273E, 7182 }, + { 0x2609, 7188 }, + { 0xC05F, 7189 }, + { 0xC02E, 7192 }, + { 0xC07B, 7195 }, + { 0xC05B, 7199 }, + { 0xC028, 7203 }, + { 0xC02B, 7206 }, + { 0xC03A, 7209 }, + { 0xC02C, 7211 }, + { 0xC031, 7213 }, + { 0xC036, 7216 }, + { 0xC032, 7219 }, + { 0xC035, 7222 }, + { 0xC034, 7225 }, + { 0xC039, 7228 }, + { 0xC030, 7231 }, + { 0xC038, 7234 }, + { 0xC037, 7237 }, + { 0xC033, 7240 }, + { 0xC060, 7243 }, + { 0xC061, 7246 }, + { 0xC062, 7251 }, + { 0xC063, 7256 }, + { 0xC064, 7261 }, + { 0xC065, 7266 }, + { 0xC066, 7271 }, + { 0xC067, 7276 }, + { 0xC068, 7281 }, + { 0xC069, 7286 }, + { 0xC06A, 7291 }, + { 0xC06B, 7296 }, + { 0xC06C, 7301 }, + { 0xC06D, 7306 }, + { 0xC06E, 7311 }, + { 0xC06F, 7316 }, + { 0xC070, 7321 }, + { 0xC071, 7326 }, + { 0xC072, 7331 }, + { 0xC073, 7336 }, + { 0xC074, 7341 }, + { 0xC075, 7346 }, + { 0xC076, 7351 }, + { 0xC077, 7356 }, + { 0xC078, 7361 }, + { 0xC079, 7366 }, + { 0xC07A, 7371 }, + { 0xC041, 7376 }, + { 0xC042, 7381 }, + { 0xC043, 7386 }, + { 0xC044, 7391 }, + { 0xC045, 7396 }, + { 0xC046, 7401 }, + { 0xC047, 7406 }, + { 0xC048, 7411 }, + { 0xC049, 7416 }, + { 0xC04A, 7421 }, + { 0xC04B, 7426 }, + { 0xC04C, 7431 }, + { 0xC04D, 7436 }, + { 0xC04E, 7441 }, + { 0xC04F, 7446 }, + { 0xC050, 7451 }, + { 0xC051, 7456 }, + { 0xC052, 7461 }, + { 0xC053, 7466 }, + { 0xC054, 7471 }, + { 0xC055, 7476 }, + { 0xC056, 7481 }, + { 0xC057, 7486 }, + { 0xC058, 7491 }, + { 0xC059, 7496 }, + { 0xC05A, 7501 }, + { 0xC07D, 7506 }, + { 0xC05D, 7510 }, + { 0xC029, 7514 }, + { 0xC020, 7517 }, + { 0xC07E, 7519 }, + { 0xC024, 7521 }, + { 0xC03D, 7524 }, + { 0xC023, 7527 }, + { 0xC025, 7530 }, + { 0xC05C, 7533 }, + { 0xC02F, 7536 }, + { 0xC02A, 7538 }, + { 0xC03F, 7540 }, + { 0xC07C, 7543 }, + { 0xC026, 7546 }, + { 0xC03C, 7548 }, + { 0xC022, 7551 }, + { 0xC03B, 7554 }, + { 0xC027, 7556 }, + { 0xC05E, 7558 }, + { 0xC040, 7561 }, + { 0xC021, 7564 }, + { 0xC03E, 7567 }, + { 0xC02D, 7570 }, + { 0x1963, 7572 }, + { 0x196B, 7576 }, + { 0x1964, 7580 }, + { 0x1969, 7584 }, + { 0x1967, 7588 }, + { 0x196D, 7592 }, + { 0x1965, 7596 }, + { 0x1966, 7600 }, + { 0x195C, 7604 }, + { 0x195E, 7608 }, + { 0x1950, 7612 }, + { 0x1958, 7616 }, + { 0x195B, 7620 }, + { 0x1962, 7624 }, + { 0x1968, 7628 }, + { 0x1959, 7632 }, + { 0x195F, 7636 }, + { 0x1954, 7640 }, + { 0x1956, 7644 }, + { 0x196A, 7648 }, + { 0x195D, 7652 }, + { 0x1951, 7656 }, + { 0x1955, 7660 }, + { 0x196C, 7664 }, + { 0x1960, 7668 }, + { 0x1952, 7672 }, + { 0x195A, 7676 }, + { 0x1957, 7680 }, + { 0x1953, 7684 }, + { 0x1961, 7688 }, + { 0x1970, 7692 }, + { 0x1971, 7696 }, + { 0x1972, 7700 }, + { 0x1973, 7704 }, + { 0x1974, 7708 }, + { 0x29DD, 7712 }, + { 0x293C, 7715 }, + { 0x293A, 7721 }, + { 0x293D, 7725 }, + { 0x2320, 7731 }, + { 0x230F, 7734 }, + { 0x2E22, 7737 }, + { 0x231C, 7741 }, + { 0x23DE, 7744 }, + { 0x230E, 7747 }, + { 0x2E23, 7750 }, + { 0x231D, 7754 }, + { 0x23B4, 7757 }, + { 0x23E0, 7760 }, + { 0x23DC, 7764 }, + { 0x2025, 7766 }, + { 0x205A, 7769 }, + { 0x2E2A, 7772 }, + { 0x29C9, 7778 }, + { 0x2A08, 7781 }, + { 0x2A07, 7785 }, + { 0x2051, 7789 }, + { 0x2A75, 7793 }, + { 0x2A56, 7797 }, + { 0x2A55, 7801 }, + { 0x560E, 7805 }, + { 0x560D, 7808 }, + { 0x5621, 7810 }, + { 0x5626, 7813 }, + { 0x5622, 7816 }, + { 0x5625, 7819 }, + { 0x5624, 7822 }, + { 0x5629, 7825 }, + { 0x5620, 7828 }, + { 0x5628, 7831 }, + { 0x5627, 7834 }, + { 0x5623, 7837 }, + { 0x5618, 7840 }, + { 0x5616, 7843 }, + { 0x5619, 7846 }, + { 0x5617, 7849 }, + { 0x561A, 7852 }, + { 0x561E, 7855 }, + { 0x561F, 7858 }, + { 0x561C, 7861 }, + { 0x5615, 7864 }, + { 0x561D, 7867 }, + { 0x561B, 7870 }, + { 0x5613, 7873 }, + { 0x5614, 7876 }, + { 0x560F, 7879 }, + { 0x5549, 7882 }, + { 0x55E1, 7885 }, + { 0x5524, 7888 }, + { 0x55BA, 7891 }, + { 0x5595, 7894 }, + { 0x554A, 7897 }, + { 0x5552, 7900 }, + { 0x55EA, 7903 }, + { 0x552C, 7906 }, + { 0x55C3, 7909 }, + { 0x559D, 7912 }, + { 0x5566, 7915 }, + { 0x55FF, 7918 }, + { 0x553F, 7921 }, + { 0x55D7, 7924 }, + { 0x55B0, 7927 }, + { 0x5560, 7930 }, + { 0x55F9, 7933 }, + { 0x5539, 7936 }, + { 0x55D1, 7939 }, + { 0x55AA, 7942 }, + { 0x5500, 7945 }, + { 0x55E2, 7948 }, + { 0x5558, 7951 }, + { 0x55F1, 7954 }, + { 0x5531, 7957 }, + { 0x55C9, 7960 }, + { 0x55A2, 7963 }, + { 0x556D, 7966 }, + { 0x5606, 7969 }, + { 0x5545, 7972 }, + { 0x55DD, 7975 }, + { 0x55B6, 7978 }, + { 0x554C, 7981 }, + { 0x55E4, 7984 }, + { 0x5526, 7987 }, + { 0x55BD, 7990 }, + { 0x5597, 7993 }, + { 0x5525, 7996 }, + { 0x5567, 7999 }, + { 0x5600, 8002 }, + { 0x5540, 8005 }, + { 0x55D8, 8008 }, + { 0x55B1, 8011 }, + { 0x556A, 8014 }, + { 0x5603, 8017 }, + { 0x5543, 8020 }, + { 0x55DB, 8023 }, + { 0x55B4, 8026 }, + { 0x555E, 8029 }, + { 0x55F7, 8032 }, + { 0x5537, 8035 }, + { 0x55CF, 8038 }, + { 0x55A8, 8041 }, + { 0x556E, 8044 }, + { 0x5608, 8047 }, + { 0x5546, 8050 }, + { 0x55DE, 8053 }, + { 0x55B7, 8056 }, + { 0x556F, 8059 }, + { 0x5609, 8062 }, + { 0x560B, 8065 }, + { 0x5547, 8068 }, + { 0x55DF, 8071 }, + { 0x55B8, 8074 }, + { 0x55BB, 8077 }, + { 0x5571, 8080 }, + { 0x5550, 8083 }, + { 0x55E8, 8086 }, + { 0x552A, 8089 }, + { 0x55C1, 8092 }, + { 0x559B, 8095 }, + { 0x555F, 8098 }, + { 0x55F8, 8101 }, + { 0x5538, 8104 }, + { 0x55D0, 8107 }, + { 0x55A9, 8110 }, + { 0x5562, 8113 }, + { 0x55FB, 8116 }, + { 0x553B, 8119 }, + { 0x55D3, 8122 }, + { 0x55AC, 8125 }, + { 0x555A, 8128 }, + { 0x55F3, 8131 }, + { 0x5533, 8134 }, + { 0x55CB, 8137 }, + { 0x55A4, 8140 }, + { 0x5596, 8143 }, + { 0x5559, 8146 }, + { 0x55F2, 8149 }, + { 0x5532, 8152 }, + { 0x55CA, 8155 }, + { 0x55A3, 8158 }, + { 0x554E, 8161 }, + { 0x55E6, 8164 }, + { 0x5528, 8167 }, + { 0x55BF, 8170 }, + { 0x5599, 8173 }, + { 0x5569, 8176 }, + { 0x5602, 8179 }, + { 0x5542, 8182 }, + { 0x55DA, 8185 }, + { 0x55B3, 8188 }, + { 0x5564, 8191 }, + { 0x55FD, 8194 }, + { 0x553D, 8197 }, + { 0x55D5, 8200 }, + { 0x55AE, 8203 }, + { 0x5507, 8206 }, + { 0x5551, 8209 }, + { 0x55E9, 8212 }, + { 0x552B, 8215 }, + { 0x55C2, 8218 }, + { 0x559C, 8221 }, + { 0x5578, 8224 }, + { 0x551A, 8227 }, + { 0x558B, 8230 }, + { 0x5514, 8233 }, + { 0x555C, 8236 }, + { 0x55F5, 8239 }, + { 0x5535, 8242 }, + { 0x55CD, 8245 }, + { 0x55A6, 8248 }, + { 0x5585, 8251 }, + { 0x5501, 8254 }, + { 0x550C, 8257 }, + { 0x557D, 8260 }, + { 0x5557, 8263 }, + { 0x55EF, 8266 }, + { 0x5530, 8269 }, + { 0x55C7, 8272 }, + { 0x55A1, 8275 }, + { 0x5520, 8278 }, + { 0x5607, 8281 }, + { 0x5591, 8284 }, + { 0x554D, 8287 }, + { 0x5502, 8290 }, + { 0x55E5, 8293 }, + { 0x5527, 8296 }, + { 0x55BE, 8299 }, + { 0x5573, 8302 }, + { 0x5598, 8305 }, + { 0x551B, 8308 }, + { 0x558C, 8311 }, + { 0x556B, 8314 }, + { 0x551E, 8317 }, + { 0x558F, 8320 }, + { 0x5554, 8323 }, + { 0x55EC, 8326 }, + { 0x552E, 8329 }, + { 0x55C5, 8332 }, + { 0x559F, 8335 }, + { 0x5512, 8338 }, + { 0x5583, 8341 }, + { 0x5553, 8344 }, + { 0x55EB, 8347 }, + { 0x552D, 8350 }, + { 0x55C4, 8353 }, + { 0x559E, 8356 }, + { 0x5521, 8359 }, + { 0x5592, 8362 }, + { 0x5561, 8365 }, + { 0x55FA, 8368 }, + { 0x553A, 8371 }, + { 0x55D2, 8374 }, + { 0x55AB, 8377 }, + { 0x5522, 8380 }, + { 0x5568, 8383 }, + { 0x5601, 8386 }, + { 0x5541, 8389 }, + { 0x55D9, 8392 }, + { 0x55B2, 8395 }, + { 0x5593, 8398 }, + { 0x5570, 8401 }, + { 0x560A, 8404 }, + { 0x5548, 8407 }, + { 0x55E0, 8410 }, + { 0x55B9, 8413 }, + { 0x5572, 8416 }, + { 0x5505, 8419 }, + { 0x5576, 8422 }, + { 0x5513, 8425 }, + { 0x5584, 8428 }, + { 0x5516, 8431 }, + { 0x5563, 8434 }, + { 0x55FC, 8437 }, + { 0x553C, 8440 }, + { 0x55D4, 8443 }, + { 0x55AD, 8446 }, + { 0x5587, 8449 }, + { 0x550E, 8452 }, + { 0x555B, 8455 }, + { 0x55F4, 8458 }, + { 0x5534, 8461 }, + { 0x55CC, 8464 }, + { 0x55A5, 8467 }, + { 0x557F, 8470 }, + { 0x550D, 8473 }, + { 0x557E, 8476 }, + { 0x554F, 8479 }, + { 0x5503, 8482 }, + { 0x55E7, 8485 }, + { 0x5529, 8488 }, + { 0x55C0, 8491 }, + { 0x5574, 8494 }, + { 0x559A, 8497 }, + { 0x551D, 8500 }, + { 0x558E, 8503 }, + { 0x5518, 8506 }, + { 0x5565, 8509 }, + { 0x55FE, 8512 }, + { 0x553E, 8515 }, + { 0x55D6, 8518 }, + { 0x55AF, 8521 }, + { 0x5589, 8524 }, + { 0x5506, 8527 }, + { 0x5577, 8530 }, + { 0x5510, 8533 }, + { 0x555D, 8536 }, + { 0x55F6, 8539 }, + { 0x5536, 8542 }, + { 0x55CE, 8545 }, + { 0x55A7, 8548 }, + { 0x5581, 8551 }, + { 0x550B, 8554 }, + { 0x55F0, 8557 }, + { 0x55C8, 8560 }, + { 0x557C, 8563 }, + { 0x5555, 8566 }, + { 0x5509, 8569 }, + { 0x55ED, 8572 }, + { 0x557A, 8575 }, + { 0x5508, 8578 }, + { 0x5579, 8581 }, + { 0x5556, 8584 }, + { 0x55EE, 8587 }, + { 0x552F, 8590 }, + { 0x55C6, 8593 }, + { 0x55A0, 8596 }, + { 0x5515, 8599 }, + { 0x5586, 8602 }, + { 0x554B, 8605 }, + { 0x55E3, 8608 }, + { 0x556C, 8611 }, + { 0x5604, 8614 }, + { 0x5544, 8617 }, + { 0x55DC, 8620 }, + { 0x55B5, 8623 }, + { 0x55BC, 8626 }, + { 0x551C, 8629 }, + { 0x558D, 8632 }, + { 0x5523, 8635 }, + { 0x5594, 8638 }, + { 0x5517, 8641 }, + { 0x5588, 8644 }, + { 0x550F, 8647 }, + { 0x5580, 8650 }, + { 0x5504, 8653 }, + { 0x5575, 8656 }, + { 0x5519, 8659 }, + { 0x558A, 8662 }, + { 0x5511, 8665 }, + { 0x5582, 8668 }, + { 0x550A, 8671 }, + { 0x557B, 8674 }, + { 0x562B, 8677 }, + { 0x5610, 8681 }, + { 0x5611, 8685 }, + { 0x562A, 8689 }, + { 0x5612, 8693 }, + { 0x551F, 8697 }, + { 0x5605, 8700 }, + { 0x5590, 8703 }, + { 0x560C, 8706 }, + { 0x20A9, 8709 }, + { 0x22BB, 8711 }, + { 0x00A5, 8712 }, + { 0x262F, 8714 }, + { 0x2135, 8716 }, + { 0x2625, 8718 }, + { 0x269B, 8719 }, + { 0x237E, 8721 }, + { 0x2106, 8723 }, + { 0x2105, 8725 }, + { 0x20B5, 8727 }, + { 0x00A2, 8729 }, + { 0x5A51, 8731 }, + { 0x5A56, 8734 }, + { 0x5A52, 8737 }, + { 0x5A55, 8740 }, + { 0x5A54, 8743 }, + { 0x5A59, 8746 }, + { 0x5A50, 8749 }, + { 0x5A58, 8752 }, + { 0x5A57, 8755 }, + { 0x5A53, 8758 }, + { 0x5A2A, 8761 }, + { 0x5A2F, 8765 }, + { 0x5A2D, 8769 }, + { 0x5A29, 8773 }, + { 0x5A30, 8777 }, + { 0x5A31, 8781 }, + { 0x5A2C, 8785 }, + { 0x5A2B, 8789 }, + { 0x5A2E, 8793 }, + { 0x5A32, 8797 }, + { 0x5A00, 8801 }, + { 0x5A03, 8804 }, + { 0x5A01, 8807 }, + { 0x5A05, 8810 }, + { 0x5A02, 8813 }, + { 0x5A04, 8816 }, + { 0x5A1D, 8819 }, + { 0x5A15, 8822 }, + { 0x5A08, 8825 }, + { 0x5A28, 8828 }, + { 0x5A0E, 8831 }, + { 0x5A06, 8834 }, + { 0x5A24, 8837 }, + { 0x5A20, 8840 }, + { 0x5A18, 8843 }, + { 0x5A1A, 8846 }, + { 0x5A23, 8849 }, + { 0x5A27, 8852 }, + { 0x5A13, 8855 }, + { 0x5A25, 8858 }, + { 0x5A22, 8861 }, + { 0x5A21, 8864 }, + { 0x5A1E, 8867 }, + { 0x5A0C, 8870 }, + { 0x5A19, 8873 }, + { 0x5A16, 8876 }, + { 0x5A09, 8879 }, + { 0x5A0F, 8882 }, + { 0x5A07, 8885 }, + { 0x5A1F, 8888 }, + { 0x5A0B, 8891 }, + { 0x5A11, 8894 }, + { 0x5A17, 8897 }, + { 0x5A1C, 8900 }, + { 0x5A1B, 8903 }, + { 0x5A26, 8906 }, + { 0x5A14, 8909 }, + { 0x5A0D, 8912 }, + { 0x5A0A, 8915 }, + { 0x5A12, 8918 }, + { 0x5A10, 8921 }, + { 0x5A41, 8924 }, + { 0x5A40, 8928 }, + { 0x5A4A, 8932 }, + { 0x5A46, 8936 }, + { 0x5A47, 8940 }, + { 0x5A49, 8944 }, + { 0x5A45, 8948 }, + { 0x5A48, 8952 }, + { 0x5A44, 8956 }, + { 0x5A42, 8960 }, + { 0x5A4B, 8964 }, + { 0x5A35, 8968 }, + { 0x5A34, 8972 }, + { 0x5A36, 8976 }, + { 0x5A33, 8980 }, + { 0x5A4D, 8984 }, + { 0x5A4C, 8989 }, + { 0x5A43, 8994 }, + { 0x5A5D, 8999 }, + { 0x5A5E, 9002 }, + { 0x5A5C, 9006 }, + { 0x5A5F, 9009 }, + { 0x221B, 9013 }, + { 0x2593, 9015 }, + { 0x22AE, 9017 }, + { 0x22AC, 9020 }, + { 0x2224, 9023 }, + { 0x2AEE, 9026 }, + { 0x220C, 9033 }, + { 0x22EB, 9038 }, + { 0x22ED, 9044 }, + { 0x2280, 9052 }, + { 0x22E0, 9055 }, + { 0x2281, 9060 }, + { 0x22E1, 9063 }, + { 0x20AB, 9068 }, + { 0x297F, 9070 }, + { 0x22A4, 9073 }, + { 0x2AF1, 9075 }, + { 0x22F1, 9080 }, + { 0x2304, 9084 }, + { 0x2671, 9086 }, + { 0x20AC, 9089 }, + { 0x2E2D, 9091 }, + { 0x2059, 9094 }, + { 0x205B, 9097 }, + { 0x2058, 9100 }, + { 0x2725, 9103 }, + { 0x2723, 9106 }, + { 0x2722, 9109 }, + { 0x002E, 9112 }, + { 0x2588, 9114 }, + { 0x27D7, 9116 }, + { 0x23DB, 9119 }, + { 0x2699, 9120 }, + { 0x3013, 9121 }, + { 0x200A, 9123 }, + { 0x2388, 9125 }, + { 0x26A1, 9127 }, + { 0x2A1D, 9130 }, + { 0x26B5, 9131 }, + { 0x263E, 9132 }, + { 0x27DB, 9135 }, + { 0x27DA, 9139 }, + { 0x2993, 9144 }, + { 0x2E1C, 9148 }, + { 0x258F, 9152 }, + { 0x258E, 9156 }, + { 0x294E, 9160 }, + { 0x294A, 9167 }, + { 0x294B, 9174 }, + { 0x2950, 9181 }, + { 0x297C, 9188 }, + { 0x258B, 9191 }, + { 0x25D6, 9195 }, + { 0x258C, 9199 }, + { 0x22A3, 9202 }, + { 0x3008, 9204 }, + { 0x2991, 9207 }, + { 0x2B30, 9212 }, + { 0x2B32, 9217 }, + { 0x2997, 9222 }, + { 0x3010, 9227 }, + { 0x007B, 9231 }, + { 0x23A9, 9234 }, + { 0x23A7, 9239 }, + { 0x23A8, 9244 }, + { 0x230A, 9249 }, + { 0x27D5, 9251 }, + { 0x21AD, 9254 }, + { 0x2194, 9258 }, + { 0x21FC, 9261 }, + { 0x21AE, 9268 }, + { 0x21F9, 9273 }, + { 0x2948, 9279 }, + { 0x2B0C, 9285 }, + { 0x2B04, 9289 }, + { 0x21D4, 9293 }, + { 0x21CE, 9297 }, + { 0x2904, 9303 }, + { 0x21FF, 9310 }, + { 0x2589, 9314 }, + { 0x258D, 9318 }, + { 0x258A, 9322 }, + { 0x2983, 9326 }, + { 0x300E, 9330 }, + { 0x301A, 9334 }, + { 0x3018, 9338 }, + { 0x3016, 9343 }, + { 0x2985, 9347 }, + { 0x300C, 9350 }, + { 0x2E04, 9353 }, + { 0x300A, 9357 }, + { 0x29DA, 9361 }, + { 0x201C, 9365 }, + { 0x2E28, 9369 }, + { 0x22C9, 9372 }, + { 0x2E0C, 9377 }, + { 0x2018, 9381 }, + { 0x005B, 9385 }, + { 0x298D, 9388 }, + { 0x298F, 9396 }, + { 0x2045, 9404 }, + { 0x298B, 9409 }, + { 0x23A3, 9414 }, + { 0x23A1, 9419 }, + { 0x23A2, 9424 }, + { 0x29D8, 9428 }, + { 0x2308, 9431 }, + { 0x27DC, 9433 }, + { 0x27C5, 9435 }, + { 0x2E26, 9439 }, + { 0x3014, 9443 }, + { 0x29CF, 9447 }, + { 0x2E20, 9452 }, + { 0x23B8, 9457 }, + { 0x22CB, 9461 }, + { 0x0028, 9464 }, + { 0x239D, 9466 }, + { 0x239B, 9470 }, + { 0x239C, 9474 }, + { 0x2E02, 9477 }, + { 0x2E09, 9480 }, + { 0x2028, 9483 }, + { 0x2A14, 9485 }, + { 0x2A12, 9491 }, + { 0x2A13, 9498 }, + { 0x20A4, 9505 }, + { 0x2AE6, 9507 }, + { 0x27DE, 9515 }, + { 0x27F7, 9518 }, + { 0x27FA, 9522 }, + { 0x27DD, 9527 }, + { 0x27CC, 9530 }, + { 0x27F5, 9532 }, + { 0x27FB, 9535 }, + { 0x27F8, 9540 }, + { 0x27FD, 9544 }, + { 0x2B33, 9550 }, + { 0x27F6, 9554 }, + { 0x27FC, 9557 }, + { 0x27F9, 9562 }, + { 0x27FE, 9566 }, + { 0x27FF, 9572 }, + { 0x26A5, 9576 }, + { 0x2642, 9580 }, + { 0x26A7, 9582 }, + { 0x26A6, 9590 }, + { 0x303C, 9594 }, + { 0x20A5, 9596 }, + { 0x29FF, 9598 }, + { 0x226A, 9599 }, + { 0x226B, 9601 }, + { 0x22BC, 9603 }, + { 0x2398, 9604 }, + { 0x2423, 9606 }, + { 0x272B, 9608 }, + { 0x271B, 9612 }, + { 0x2732, 9615 }, + { 0x273C, 9618 }, + { 0x27C3, 9622 }, + { 0x27C4, 9624 }, + { 0x2E19, 9626 }, + { 0x303D, 9628 }, + { 0x20B1, 9631 }, + { 0x002B, 9633 }, + { 0x2A2D, 9635 }, + { 0x2A2E, 9641 }, + { 0x2A39, 9647 }, + { 0x2A25, 9651 }, + { 0x2A28, 9656 }, + { 0x2A22, 9661 }, + { 0x2A24, 9667 }, + { 0x2A26, 9672 }, + { 0x2A27, 9677 }, + { 0x2A23, 9682 }, + { 0x2A72, 9688 }, + { 0x6DFC, 9693 }, + { 0x2256, 9695 }, + { 0x02DA, 9699 }, + { 0x2257, 9701 }, + { 0x2E30, 9704 }, + { 0x2218, 9706 }, + { 0x223F, 9708 }, + { 0x00AD, 9710 }, + { 0x2721, 9712 }, + { 0x262A, 9715 }, + { 0x225B, 9718 }, + { 0x22C6, 9720 }, + { 0x2707, 9722 }, + { 0x0E51, 9724 }, + { 0x0E56, 9727 }, + { 0x0E52, 9730 }, + { 0x0E55, 9733 }, + { 0x0E54, 9736 }, + { 0x0E59, 9739 }, + { 0x0E50, 9742 }, + { 0x0E58, 9745 }, + { 0x0E57, 9748 }, + { 0x0E53, 9751 }, + { 0x0E3F, 9754 }, + { 0x0E2D, 9758 }, + { 0x0E1A, 9762 }, + { 0x0E14, 9766 }, + { 0x0E0E, 9770 }, + { 0x0E1D, 9774 }, + { 0x0E1F, 9778 }, + { 0x0E2B, 9782 }, + { 0x0E2E, 9786 }, + { 0x0E01, 9790 }, + { 0x0E25, 9794 }, + { 0x0E2C, 9798 }, + { 0x0E26, 9802 }, + { 0x0E21, 9805 }, + { 0x0E19, 9809 }, + { 0x0E13, 9813 }, + { 0x0E1B, 9817 }, + { 0x0E23, 9821 }, + { 0x0E24, 9825 }, + { 0x0E0B, 9828 }, + { 0x0E2A, 9832 }, + { 0x0E29, 9836 }, + { 0x0E28, 9840 }, + { 0x0E15, 9844 }, + { 0x0E0F, 9848 }, + { 0x0E27, 9852 }, + { 0x0E22, 9856 }, + { 0x0E0D, 9860 }, + { 0x0E08, 9864 }, + { 0x0E0C, 9868 }, + { 0x0E0A, 9872 }, + { 0x0E09, 9876 }, + { 0x0E02, 9880 }, + { 0x0E05, 9884 }, + { 0x0E03, 9888 }, + { 0x0E04, 9892 }, + { 0x0E06, 9896 }, + { 0x0E48, 9900 }, + { 0x0E49, 9904 }, + { 0x0E4A, 9908 }, + { 0x0E4B, 9912 }, + { 0x0E31, 9916 }, + { 0x0E07, 9920 }, + { 0x0E1E, 9924 }, + { 0x0E1C, 9928 }, + { 0x0E20, 9932 }, + { 0x0E10, 9936 }, + { 0x0E18, 9940 }, + { 0x0E16, 9944 }, + { 0x0E17, 9948 }, + { 0x0E12, 9952 }, + { 0x0E11, 9956 }, + { 0x0E30, 9960 }, + { 0x0E40, 9964 }, + { 0x0E34, 9968 }, + { 0x0E42, 9972 }, + { 0x0E38, 9976 }, + { 0x0E32, 9980 }, + { 0x0E41, 9984 }, + { 0x0E43, 9988 }, + { 0x0E44, 9993 }, + { 0x0E33, 9998 }, + { 0x0E35, 10002 }, + { 0x0E36, 10006 }, + { 0x0E39, 10010 }, + { 0x0E37, 10014 }, + { 0x0E5B, 10018 }, + { 0x0E4F, 10021 }, + { 0x0E3A, 10024 }, + { 0x0E46, 10027 }, + { 0x0E4D, 10030 }, + { 0x0E4E, 10033 }, + { 0x0E47, 10036 }, + { 0x0E2F, 10039 }, + { 0x0E5A, 10042 }, + { 0x0E45, 10045 }, + { 0x0E4C, 10048 }, + { 0x2009, 10051 }, + { 0x29FE, 10053 }, + { 0x22A8, 10054 }, + { 0x238C, 10055 }, + { 0x22D8, 10057 }, + { 0x22D9, 10060 }, + { 0x301C, 10063 }, + { 0x2B3F, 10065 }, + { 0x2933, 10070 }, + { 0x6E4F, 10075 }, + { 0x3030, 10078 }, + { 0x2307, 10080 }, + { 0x6E4B, 10082 }, + { 0x2670, 10084 }, + { 0x2060, 10087 }, + { 0x200B, 10089 }, + { 0x200D, 10092 }, + { 0x6EFF, 10095 }, + { 0x200C, 10099 }, + { 0x299F, 10102 }, + { 0x00B4, 10104 }, + { 0x2220, 10106 }, + { 0x299E, 10107 }, + { 0x29A4, 10111 }, + { 0x2648, 10114 }, + { 0x2936, 10115 }, + { 0x2937, 10121 }, + { 0x2934, 10127 }, + { 0x2935, 10133 }, + { 0x2712, 10139 }, + { 0x2600, 10141 }, + { 0x2663, 10145 }, + { 0x2691, 10148 }, + { 0x2726, 10150 }, + { 0x261A, 10154 }, + { 0x26B8, 10158 }, + { 0x2605, 10161 }, + { 0x2B1D, 10163 }, + { 0x265A, 10167 }, + { 0x265F, 10170 }, + { 0x265C, 10173 }, + { 0x265B, 10176 }, + { 0x265D, 10179 }, + { 0x265E, 10182 }, + { 0x2665, 10185 }, + { 0x2B24, 10188 }, + { 0x2B1B, 10191 }, + { 0x25E3, 10194 }, + { 0x25E2, 10198 }, + { 0x261B, 10202 }, + { 0x2617, 10206 }, + { 0x2B51, 10209 }, + { 0x25AA, 10212 }, + { 0x2B29, 10215 }, + { 0x2B2A, 10218 }, + { 0x2660, 10221 }, + { 0x25E4, 10224 }, + { 0x25E5, 10228 }, + { 0x29D3, 10232 }, + { 0x272C, 10234 }, + { 0x25CF, 10238 }, + { 0x2689, 10240 }, + { 0x29ED, 10246 }, + { 0x2688, 10251 }, + { 0x25FE, 10257 }, + { 0x25FC, 10261 }, + { 0x2B25, 10264 }, + { 0x2B27, 10267 }, + { 0x25A0, 10270 }, + { 0x25C6, 10272 }, + { 0x2666, 10274 }, + { 0x29EA, 10277 }, + { 0x2756, 10282 }, + { 0x2B22, 10287 }, + { 0x29EB, 10289 }, + { 0x263B, 10291 }, + { 0x26C2, 10294 }, + { 0x26C3, 10297 }, + { 0x273F, 10300 }, + { 0x2B1F, 10302 }, + { 0x2702, 10304 }, + { 0x2B2E, 10306 }, + { 0x25AE, 10309 }, + { 0x29D7, 10312 }, + { 0x204C, 10314 }, + { 0x25AC, 10317 }, + { 0x260E, 10319 }, + { 0x267B, 10321 }, + { 0x2B2C, 10325 }, + { 0x27A1, 10328 }, + { 0x204D, 10331 }, + { 0x27A4, 10334 }, + { 0x25B4, 10337 }, + { 0x25B2, 10341 }, + { 0x25BE, 10344 }, + { 0x25BC, 10348 }, + { 0x25C2, 10351 }, + { 0x25C4, 10355 }, + { 0x25C0, 10358 }, + { 0x25B0, 10361 }, + { 0x25B8, 10363 }, + { 0x25BA, 10367 }, + { 0x2B53, 10370 }, + { 0x25B6, 10373 }, + { 0x2422, 10376 }, + { 0x02D8, 10378 }, + { 0x1752, 10379 }, + { 0x1753, 10383 }, + { 0x1740, 10387 }, + { 0x1741, 10390 }, + { 0x1742, 10393 }, + { 0x174A, 10396 }, + { 0x1747, 10399 }, + { 0x1744, 10402 }, + { 0x1751, 10405 }, + { 0x1743, 10408 }, + { 0x174E, 10411 }, + { 0x174B, 10414 }, + { 0x1748, 10417 }, + { 0x1749, 10420 }, + { 0x174D, 10423 }, + { 0x1750, 10426 }, + { 0x1746, 10429 }, + { 0x174F, 10432 }, + { 0x174C, 10435 }, + { 0x1745, 10438 }, + { 0x2038, 10441 }, + { 0x2041, 10442 }, + { 0x02C7, 10445 }, + { 0x26B3, 10446 }, + { 0x2713, 10447 }, + { 0x239A, 10449 }, + { 0x2050, 10452 }, + { 0x2601, 10454 }, + { 0x003A, 10455 }, + { 0x20A1, 10456 }, + { 0x2254, 10458 }, + { 0x2604, 10460 }, + { 0x002C, 10461 }, + { 0x2628, 10462 }, + { 0x2629, 10465 }, + { 0x23AA, 10468 }, + { 0x22CE, 10471 }, + { 0x22CF, 10474 }, + { 0x2138, 10477 }, + { 0x225C, 10479 }, + { 0x0031, 10482 }, + { 0x2488, 10484 }, + { 0x0036, 10488 }, + { 0x248D, 10490 }, + { 0x0032, 10494 }, + { 0x2489, 10496 }, + { 0x0035, 10500 }, + { 0x248C, 10502 }, + { 0x0034, 10506 }, + { 0x248B, 10508 }, + { 0x0039, 10512 }, + { 0x2490, 10514 }, + { 0x0030, 10518 }, + { 0x0038, 10520 }, + { 0x248F, 10522 }, + { 0x0037, 10526 }, + { 0x248E, 10528 }, + { 0x0033, 10532 }, + { 0x248A, 10534 }, + { 0x3003, 10538 }, + { 0x2641, 10540 }, + { 0x23DA, 10541 }, + { 0x2733, 10543 }, + { 0x2734, 10546 }, + { 0x2735, 10550 }, + { 0x2737, 10554 }, + { 0x2741, 10559 }, + { 0x274A, 10564 }, + { 0x23CF, 10568 }, + { 0x2205, 10570 }, + { 0x29B4, 10572 }, + { 0x29B3, 10578 }, + { 0x29B2, 10584 }, + { 0x29B1, 10590 }, + { 0x2386, 10594 }, + { 0x225D, 10596 }, + { 0x22DE, 10600 }, + { 0x22DF, 10604 }, + { 0x22DC, 10608 }, + { 0x22DD, 10612 }, + { 0x22D5, 10616 }, + { 0x232B, 10620 }, + { 0x2326, 10624 }, + { 0x2107, 10628 }, + { 0x262B, 10630 }, + { 0x263D, 10632 }, + { 0x2322, 10635 }, + { 0x2137, 10636 }, + { 0x0060, 10638 }, + { 0x03D6, 10640 }, + { 0x0387, 10643 }, + { 0x03D7, 10646 }, + { 0x7175, 10649 }, + { 0x7176, 10653 }, + { 0x03D5, 10659 }, + { 0x03FC, 10662 }, + { 0x03F1, 10667 }, + { 0x717D, 10670 }, + { 0x7177, 10674 }, + { 0x03D0, 10678 }, + { 0x7180, 10681 }, + { 0x717F, 10685 }, + { 0x717C, 10689 }, + { 0x1FFD, 10692 }, + { 0x7179, 10694 }, + { 0x718A, 10697 }, + { 0x1FFE, 10700 }, + { 0x1FDE, 10702 }, + { 0x1FDD, 10706 }, + { 0x1FDF, 10710 }, + { 0x03F0, 10714 }, + { 0x7183, 10717 }, + { 0x0375, 10720 }, + { 0x1FBF, 10724 }, + { 0x1FCE, 10726 }, + { 0x1FCD, 10730 }, + { 0x1FCF, 10734 }, + { 0x037C, 10738 }, + { 0x03BC, 10744 }, + { 0x03BD, 10748 }, + { 0x03C0, 10752 }, + { 0x03BE, 10756 }, + { 0x03C7, 10760 }, + { 0x03B7, 10764 }, + { 0x1F75, 10768 }, + { 0x1FC4, 10774 }, + { 0x1F21, 10782 }, + { 0x1F25, 10788 }, + { 0x1F95, 10796 }, + { 0x1F23, 10806 }, + { 0x1F93, 10814 }, + { 0x1F27, 10824 }, + { 0x1F97, 10832 }, + { 0x1F91, 10842 }, + { 0x1F20, 10850 }, + { 0x1F24, 10856 }, + { 0x1F94, 10864 }, + { 0x1F22, 10874 }, + { 0x1F92, 10882 }, + { 0x1F26, 10892 }, + { 0x1F96, 10900 }, + { 0x1F90, 10910 }, + { 0x03AE, 10918 }, + { 0x1F74, 10924 }, + { 0x1FC2, 10930 }, + { 0x1FC6, 10938 }, + { 0x1FC7, 10944 }, + { 0x1FC3, 10952 }, + { 0x03C6, 10958 }, + { 0x03C8, 10962 }, + { 0x03C1, 10966 }, + { 0x1FE5, 10970 }, + { 0x1FE4, 10976 }, + { 0x03FB, 10982 }, + { 0x03F8, 10986 }, + { 0x03C4, 10990 }, + { 0x03B2, 10994 }, + { 0x0371, 10998 }, + { 0x03B9, 11002 }, + { 0x1F77, 11006 }, + { 0x1F31, 11012 }, + { 0x1F35, 11018 }, + { 0x1F33, 11026 }, + { 0x1F37, 11034 }, + { 0x1F30, 11042 }, + { 0x1F34, 11048 }, + { 0x1F32, 11056 }, + { 0x1F36, 11064 }, + { 0x03AF, 11072 }, + { 0x1F76, 11078 }, + { 0x1FD1, 11084 }, + { 0x1FD0, 11090 }, + { 0x03CA, 11096 }, + { 0x1FD3, 11102 }, + { 0x0390, 11110 }, + { 0x1FD2, 11118 }, + { 0x1FD7, 11126 }, + { 0x1FD6, 11134 }, + { 0x03B6, 11140 }, + { 0x03B1, 11144 }, + { 0x1F71, 11148 }, + { 0x1FB4, 11154 }, + { 0x1F01, 11162 }, + { 0x1F05, 11168 }, + { 0x1F85, 11176 }, + { 0x1F03, 11186 }, + { 0x1F83, 11194 }, + { 0x1F07, 11204 }, + { 0x1F87, 11212 }, + { 0x1F81, 11222 }, + { 0x1F00, 11230 }, + { 0x1F04, 11236 }, + { 0x1F84, 11244 }, + { 0x1F02, 11254 }, + { 0x1F82, 11262 }, + { 0x1F06, 11272 }, + { 0x1F86, 11280 }, + { 0x1F80, 11290 }, + { 0x03AC, 11298 }, + { 0x1F70, 11304 }, + { 0x1FB2, 11310 }, + { 0x1FB1, 11318 }, + { 0x1FB0, 11324 }, + { 0x1FB6, 11330 }, + { 0x1FB7, 11336 }, + { 0x1FB3, 11344 }, + { 0x03B4, 11350 }, + { 0x03C2, 11354 }, + { 0x03B3, 11359 }, + { 0x03BA, 11363 }, + { 0x03DF, 11367 }, + { 0x03BB, 11371 }, + { 0x03C9, 11375 }, + { 0x1F7D, 11379 }, + { 0x1FF4, 11385 }, + { 0x1F61, 11393 }, + { 0x1F65, 11399 }, + { 0x1FA5, 11407 }, + { 0x1F63, 11417 }, + { 0x1FA3, 11425 }, + { 0x1F67, 11435 }, + { 0x1FA7, 11443 }, + { 0x1FA1, 11453 }, + { 0x1F60, 11461 }, + { 0x1F64, 11467 }, + { 0x1FA4, 11475 }, + { 0x1F62, 11485 }, + { 0x1FA2, 11493 }, + { 0x1F66, 11503 }, + { 0x1FA6, 11511 }, + { 0x1FA0, 11521 }, + { 0x03CE, 11529 }, + { 0x1F7C, 11535 }, + { 0x1FF2, 11541 }, + { 0x1FF6, 11549 }, + { 0x1FF7, 11555 }, + { 0x1FF3, 11563 }, + { 0x03E1, 11569 }, + { 0x03C3, 11573 }, + { 0x03B8, 11577 }, + { 0x03DB, 11581 }, + { 0x03D9, 11585 }, + { 0x0373, 11590 }, + { 0x03DD, 11595 }, + { 0x03B5, 11599 }, + { 0x1F73, 11603 }, + { 0x1F11, 11609 }, + { 0x1F15, 11615 }, + { 0x1F13, 11623 }, + { 0x1F10, 11631 }, + { 0x1F14, 11637 }, + { 0x1F12, 11645 }, + { 0x03AD, 11653 }, + { 0x1F72, 11659 }, + { 0x03BF, 11665 }, + { 0x1F79, 11669 }, + { 0x1F41, 11675 }, + { 0x1F45, 11681 }, + { 0x1F43, 11689 }, + { 0x1F40, 11697 }, + { 0x1F44, 11703 }, + { 0x1F42, 11711 }, + { 0x03CC, 11719 }, + { 0x1F78, 11725 }, + { 0x03C5, 11731 }, + { 0x1F7B, 11735 }, + { 0x1F51, 11741 }, + { 0x1F55, 11747 }, + { 0x1F53, 11755 }, + { 0x1F57, 11763 }, + { 0x1F50, 11771 }, + { 0x1F54, 11777 }, + { 0x1F52, 11785 }, + { 0x1F56, 11793 }, + { 0x03CD, 11801 }, + { 0x1F7A, 11807 }, + { 0x1FE1, 11813 }, + { 0x1FE0, 11819 }, + { 0x03CB, 11825 }, + { 0x1FE3, 11831 }, + { 0x03B0, 11839 }, + { 0x1FE2, 11847 }, + { 0x1FE7, 11855 }, + { 0x1FE6, 11863 }, + { 0x0377, 11869 }, + { 0x037D, 11874 }, + { 0x037B, 11881 }, + { 0x03D1, 11887 }, + { 0x717E, 11890 }, + { 0x7178, 11894 }, + { 0x0384, 11898 }, + { 0x1FEF, 11900 }, + { 0x9200, 11902 }, + { 0x9201, 11906 }, + { 0x9202, 11910 }, + { 0x9203, 11914 }, + { 0x9204, 11918 }, + { 0x9205, 11922 }, + { 0x9206, 11926 }, + { 0x9207, 11930 }, + { 0x9208, 11934 }, + { 0x9209, 11938 }, + { 0x920A, 11942 }, + { 0x920B, 11946 }, + { 0x920C, 11950 }, + { 0x920D, 11954 }, + { 0x920E, 11958 }, + { 0x920F, 11962 }, + { 0x9210, 11966 }, + { 0x9211, 11970 }, + { 0x9212, 11974 }, + { 0x9213, 11978 }, + { 0x9214, 11982 }, + { 0x9215, 11986 }, + { 0x9216, 11990 }, + { 0x9217, 11994 }, + { 0x9218, 11998 }, + { 0x9219, 12002 }, + { 0x921A, 12006 }, + { 0x921B, 12010 }, + { 0x921C, 12014 }, + { 0x7187, 12018 }, + { 0x7186, 12021 }, + { 0x7188, 12024 }, + { 0x03F3, 12027 }, + { 0x03DE, 12030 }, + { 0x03E0, 12033 }, + { 0x1D28, 12036 }, + { 0x1D2A, 12041 }, + { 0x1D29, 12046 }, + { 0x1D26, 12051 }, + { 0x1D27, 12056 }, + { 0x03DA, 12061 }, + { 0x03D8, 12064 }, + { 0x03DC, 12068 }, + { 0x03F2, 12071 }, + { 0x03F5, 12075 }, + { 0x7184, 12079 }, + { 0x717A, 12082 }, + { 0x7185, 12085 }, + { 0x03CF, 12088 }, + { 0x03F4, 12092 }, + { 0x03FE, 12096 }, + { 0x039C, 12102 }, + { 0x039D, 12106 }, + { 0x03A0, 12110 }, + { 0x039E, 12114 }, + { 0x03A7, 12118 }, + { 0x0397, 12122 }, + { 0x1FCB, 12126 }, + { 0x1F29, 12132 }, + { 0x1F2D, 12138 }, + { 0x1F9D, 12146 }, + { 0x1F2B, 12156 }, + { 0x1F9B, 12164 }, + { 0x1F2F, 12174 }, + { 0x1F9F, 12182 }, + { 0x1F99, 12192 }, + { 0x1F28, 12200 }, + { 0x1F2C, 12206 }, + { 0x1F9C, 12214 }, + { 0x1F2A, 12224 }, + { 0x1F9A, 12232 }, + { 0x1F2E, 12242 }, + { 0x1F9E, 12250 }, + { 0x1F98, 12260 }, + { 0x0389, 12268 }, + { 0x1FCA, 12274 }, + { 0x1FCC, 12280 }, + { 0x03A6, 12286 }, + { 0x03A8, 12290 }, + { 0x03A1, 12294 }, + { 0x1FEC, 12298 }, + { 0x03FA, 12304 }, + { 0x03F7, 12308 }, + { 0x03A4, 12312 }, + { 0x0392, 12316 }, + { 0x0370, 12320 }, + { 0x0399, 12324 }, + { 0x1FDB, 12328 }, + { 0x1F39, 12334 }, + { 0x1F3D, 12340 }, + { 0x1F3B, 12348 }, + { 0x1F3F, 12356 }, + { 0x1F38, 12364 }, + { 0x1F3C, 12370 }, + { 0x1F3A, 12378 }, + { 0x1F3E, 12386 }, + { 0x038A, 12394 }, + { 0x1FDA, 12400 }, + { 0x1FD9, 12406 }, + { 0x1FD8, 12412 }, + { 0x03AA, 12418 }, + { 0x0396, 12424 }, + { 0x0391, 12428 }, + { 0x1FBB, 12432 }, + { 0x1F09, 12438 }, + { 0x1F0D, 12444 }, + { 0x1F8D, 12452 }, + { 0x1F0B, 12462 }, + { 0x1F8B, 12470 }, + { 0x1F0F, 12480 }, + { 0x1F8F, 12488 }, + { 0x1F89, 12498 }, + { 0x1F08, 12506 }, + { 0x1F0C, 12512 }, + { 0x1F8C, 12520 }, + { 0x1F0A, 12530 }, + { 0x1F8A, 12538 }, + { 0x1F0E, 12548 }, + { 0x1F8E, 12556 }, + { 0x1F88, 12566 }, + { 0x0386, 12574 }, + { 0x1FBA, 12580 }, + { 0x1FB9, 12586 }, + { 0x1FB8, 12592 }, + { 0x1FBC, 12598 }, + { 0x0394, 12604 }, + { 0x0393, 12608 }, + { 0x039A, 12612 }, + { 0x039B, 12616 }, + { 0x03A9, 12620 }, + { 0x1FFB, 12624 }, + { 0x1F69, 12630 }, + { 0x1F6D, 12636 }, + { 0x1FAD, 12644 }, + { 0x1F6B, 12654 }, + { 0x1FAB, 12662 }, + { 0x1F6F, 12672 }, + { 0x1FAF, 12680 }, + { 0x1FA9, 12690 }, + { 0x1F68, 12698 }, + { 0x1F6C, 12704 }, + { 0x1FAC, 12712 }, + { 0x1F6A, 12722 }, + { 0x1FAA, 12730 }, + { 0x1F6E, 12740 }, + { 0x1FAE, 12748 }, + { 0x1FA8, 12758 }, + { 0x038F, 12766 }, + { 0x1FFA, 12772 }, + { 0x1FFC, 12778 }, + { 0x03A3, 12784 }, + { 0x0398, 12788 }, + { 0x0372, 12792 }, + { 0x0395, 12797 }, + { 0x1FC9, 12801 }, + { 0x1F19, 12807 }, + { 0x1F1D, 12813 }, + { 0x1F1B, 12821 }, + { 0x1F18, 12829 }, + { 0x1F1C, 12835 }, + { 0x1F1A, 12843 }, + { 0x0388, 12851 }, + { 0x1FC8, 12857 }, + { 0x039F, 12863 }, + { 0x1FF9, 12867 }, + { 0x1F49, 12873 }, + { 0x1F4D, 12879 }, + { 0x1F4B, 12887 }, + { 0x1F48, 12895 }, + { 0x1F4C, 12901 }, + { 0x1F4A, 12909 }, + { 0x038C, 12917 }, + { 0x1FF8, 12923 }, + { 0x03A5, 12929 }, + { 0x1FEB, 12933 }, + { 0x1F59, 12939 }, + { 0x1F5D, 12945 }, + { 0x1F5B, 12953 }, + { 0x1F5F, 12961 }, + { 0x038E, 12969 }, + { 0x1FEA, 12975 }, + { 0x1FE9, 12981 }, + { 0x1FE8, 12987 }, + { 0x03AB, 12993 }, + { 0x0376, 12999 }, + { 0x03F9, 13004 }, + { 0x03FF, 13009 }, + { 0x03FD, 13016 }, + { 0x717B, 13022 }, + { 0x1FBD, 13025 }, + { 0x7182, 13027 }, + { 0x9245, 13031 }, + { 0x0374, 13034 }, + { 0x03D2, 13037 }, + { 0x03D3, 13042 }, + { 0x03D4, 13049 }, + { 0x7181, 13056 }, + { 0x037E, 13059 }, + { 0x03F6, 13062 }, + { 0x7189, 13067 }, + { 0x1FEE, 13071 }, + { 0x1FED, 13075 }, + { 0x1FC1, 13079 }, + { 0x0385, 13083 }, + { 0x1D6A, 13086 }, + { 0x1D69, 13091 }, + { 0x1D68, 13096 }, + { 0x1D66, 13101 }, + { 0x1D67, 13106 }, + { 0x7141, 13111 }, + { 0x7142, 13116 }, + { 0x7152, 13121 }, + { 0x714B, 13127 }, + { 0x7140, 13133 }, + { 0x7154, 13138 }, + { 0x714D, 13144 }, + { 0x7157, 13150 }, + { 0x7150, 13155 }, + { 0x7149, 13160 }, + { 0x7155, 13165 }, + { 0x7143, 13171 }, + { 0x7145, 13175 }, + { 0x7153, 13180 }, + { 0x714C, 13186 }, + { 0x714F, 13192 }, + { 0x7148, 13197 }, + { 0x7146, 13202 }, + { 0x714E, 13207 }, + { 0x7144, 13213 }, + { 0x7151, 13217 }, + { 0x714A, 13222 }, + { 0x7147, 13227 }, + { 0x7156, 13232 }, + { 0x7170, 13238 }, + { 0x7173, 13243 }, + { 0x7158, 13248 }, + { 0x715D, 13253 }, + { 0x7174, 13258 }, + { 0x7159, 13263 }, + { 0x716A, 13267 }, + { 0x7171, 13272 }, + { 0x7164, 13277 }, + { 0x715C, 13281 }, + { 0x716E, 13285 }, + { 0x7172, 13290 }, + { 0x7169, 13295 }, + { 0x716B, 13299 }, + { 0x7165, 13304 }, + { 0x716F, 13308 }, + { 0x7163, 13313 }, + { 0x715B, 13317 }, + { 0x715E, 13321 }, + { 0x716C, 13326 }, + { 0x715A, 13331 }, + { 0x7162, 13335 }, + { 0x7168, 13339 }, + { 0x7160, 13343 }, + { 0x7161, 13347 }, + { 0x715F, 13353 }, + { 0x716D, 13357 }, + { 0x7166, 13362 }, + { 0x7167, 13366 }, + { 0x1FC0, 13372 }, + { 0x921D, 13374 }, + { 0x921E, 13378 }, + { 0x921F, 13382 }, + { 0x9220, 13386 }, + { 0x9221, 13390 }, + { 0x9222, 13394 }, + { 0x9223, 13398 }, + { 0x9224, 13402 }, + { 0x9225, 13406 }, + { 0x9226, 13410 }, + { 0x9227, 13414 }, + { 0x9228, 13418 }, + { 0x9229, 13422 }, + { 0x922A, 13426 }, + { 0x922B, 13430 }, + { 0x922C, 13434 }, + { 0x922D, 13438 }, + { 0x922E, 13442 }, + { 0x922F, 13446 }, + { 0x9230, 13450 }, + { 0x9231, 13454 }, + { 0x9232, 13458 }, + { 0x9233, 13462 }, + { 0x9234, 13466 }, + { 0x9235, 13470 }, + { 0x9236, 13474 }, + { 0x9237, 13478 }, + { 0x9238, 13482 }, + { 0x9239, 13486 }, + { 0x923A, 13490 }, + { 0x923B, 13494 }, + { 0x923C, 13498 }, + { 0x923D, 13502 }, + { 0x923E, 13506 }, + { 0x923F, 13510 }, + { 0x9240, 13514 }, + { 0x9241, 13518 }, + { 0x037A, 13522 }, + { 0x1FBE, 13524 }, + { 0x2724, 13526 }, + { 0x271C, 13530 }, + { 0x2764, 13534 }, + { 0x27A6, 13537 }, + { 0x27A5, 13544 }, + { 0x2714, 13551 }, + { 0x2738, 13554 }, + { 0x274B, 13560 }, + { 0x271A, 13565 }, + { 0x2763, 13568 }, + { 0x27AD, 13573 }, + { 0x279A, 13579 }, + { 0x2798, 13583 }, + { 0x27AE, 13587 }, + { 0x2718, 13593 }, + { 0x27A0, 13596 }, + { 0x275E, 13601 }, + { 0x275D, 13607 }, + { 0x275C, 13614 }, + { 0x275B, 13620 }, + { 0x2746, 13627 }, + { 0x2748, 13630 }, + { 0x2731, 13632 }, + { 0x272E, 13634 }, + { 0x275A, 13638 }, + { 0x2799, 13641 }, + { 0x2762, 13644 }, + { 0x2794, 13648 }, + { 0x279C, 13652 }, + { 0x27BD, 13656 }, + { 0x2770, 13660 }, + { 0x276E, 13665 }, + { 0x2716, 13671 }, + { 0x2771, 13674 }, + { 0x276F, 13679 }, + { 0x27B9, 13685 }, + { 0x27B7, 13690 }, + { 0x27B8, 13695 }, + { 0x27A8, 13699 }, + { 0x273D, 13704 }, + { 0x2743, 13707 }, + { 0x279E, 13711 }, + { 0x27BB, 13715 }, + { 0x2302, 13719 }, + { 0x22B7, 13720 }, + { 0x2253, 13722 }, + { 0x592E, 13728 }, + { 0x592F, 13732 }, + { 0x592C, 13736 }, + { 0x592D, 13740 }, + { 0x592B, 13745 }, + { 0x5901, 13749 }, + { 0x5906, 13753 }, + { 0x5902, 13757 }, + { 0x5905, 13761 }, + { 0x5904, 13765 }, + { 0x5909, 13769 }, + { 0x5900, 13773 }, + { 0x5908, 13777 }, + { 0x5907, 13781 }, + { 0x5903, 13785 }, + { 0x5927, 13789 }, + { 0x592A, 13793 }, + { 0x5928, 13797 }, + { 0x5929, 13801 }, + { 0x5926, 13805 }, + { 0x5922, 13809 }, + { 0x5924, 13813 }, + { 0x5919, 13817 }, + { 0x5921, 13821 }, + { 0x5918, 13825 }, + { 0x590C, 13829 }, + { 0x591F, 13833 }, + { 0x590A, 13837 }, + { 0x591C, 13841 }, + { 0x5917, 13845 }, + { 0x5914, 13849 }, + { 0x5923, 13853 }, + { 0x5925, 13857 }, + { 0x5915, 13861 }, + { 0x591A, 13865 }, + { 0x590E, 13869 }, + { 0x5912, 13873 }, + { 0x5920, 13877 }, + { 0x591D, 13881 }, + { 0x591B, 13885 }, + { 0x5910, 13889 }, + { 0x5913, 13893 }, + { 0x590B, 13897 }, + { 0x590D, 13901 }, + { 0x5911, 13905 }, + { 0x5916, 13909 }, + { 0x590F, 13913 }, + { 0x591E, 13917 }, + { 0x17D7, 13921 }, + { 0x17D4, 13925 }, + { 0x17CF, 13928 }, + { 0x17D2, 13931 }, + { 0x17CC, 13934 }, + { 0x17CB, 13937 }, + { 0x17D8, 13940 }, + { 0x17D6, 13943 }, + { 0x17D9, 13948 }, + { 0x17D0, 13952 }, + { 0x17D1, 13956 }, + { 0x17CE, 13959 }, + { 0x17DA, 13962 }, + { 0x17C6, 13965 }, + { 0x17C7, 13968 }, + { 0x17CA, 13971 }, + { 0x17DD, 13974 }, + { 0x17D5, 13977 }, + { 0x17D3, 13980 }, + { 0x17C9, 13983 }, + { 0x17CD, 13986 }, + { 0x17DC, 13989 }, + { 0x17C8, 13992 }, + { 0x17E1, 13995 }, + { 0x17E6, 13998 }, + { 0x17E2, 14001 }, + { 0x17E5, 14004 }, + { 0x17E4, 14007 }, + { 0x17E9, 14010 }, + { 0x17E0, 14013 }, + { 0x17E8, 14016 }, + { 0x17E7, 14019 }, + { 0x17E3, 14022 }, + { 0x17C1, 14025 }, + { 0x17B7, 14029 }, + { 0x17BB, 14033 }, + { 0x17B9, 14037 }, + { 0x17B6, 14041 }, + { 0x17C2, 14045 }, + { 0x17C3, 14049 }, + { 0x17C5, 14053 }, + { 0x17C0, 14057 }, + { 0x17B8, 14061 }, + { 0x17BE, 14065 }, + { 0x17C4, 14069 }, + { 0x17BD, 14073 }, + { 0x17BC, 14077 }, + { 0x17BF, 14081 }, + { 0x17BA, 14085 }, + { 0x17B5, 14089 }, + { 0x17B4, 14093 }, + { 0x1794, 14097 }, + { 0x1785, 14100 }, + { 0x1787, 14103 }, + { 0x178A, 14106 }, + { 0x178C, 14109 }, + { 0x17A0, 14112 }, + { 0x1780, 14115 }, + { 0x1782, 14118 }, + { 0x17A1, 14121 }, + { 0x179B, 14124 }, + { 0x1798, 14127 }, + { 0x1793, 14130 }, + { 0x1796, 14133 }, + { 0x17A2, 14136 }, + { 0x179A, 14139 }, + { 0x179F, 14142 }, + { 0x178F, 14145 }, + { 0x1791, 14148 }, + { 0x179C, 14151 }, + { 0x1799, 14154 }, + { 0x1786, 14157 }, + { 0x1788, 14160 }, + { 0x1781, 14163 }, + { 0x1783, 14166 }, + { 0x1784, 14169 }, + { 0x178E, 14172 }, + { 0x1789, 14175 }, + { 0x1795, 14178 }, + { 0x1797, 14181 }, + { 0x179D, 14184 }, + { 0x179E, 14187 }, + { 0x1790, 14190 }, + { 0x1792, 14193 }, + { 0x178B, 14196 }, + { 0x178D, 14199 }, + { 0x19F3, 14202 }, + { 0x19E3, 14206 }, + { 0x19FA, 14210 }, + { 0x19EA, 14214 }, + { 0x17F3, 14218 }, + { 0x17F2, 14223 }, + { 0x17F0, 14228 }, + { 0x17F4, 14233 }, + { 0x17F1, 14238 }, + { 0x17F5, 14243 }, + { 0x17F8, 14248 }, + { 0x17F7, 14253 }, + { 0x17F9, 14258 }, + { 0x17F6, 14263 }, + { 0x19F2, 14268 }, + { 0x19E2, 14272 }, + { 0x19F4, 14276 }, + { 0x19E4, 14280 }, + { 0x19F1, 14284 }, + { 0x19E1, 14288 }, + { 0x19F5, 14292 }, + { 0x19E5, 14296 }, + { 0x19FD, 14300 }, + { 0x19ED, 14304 }, + { 0x19FC, 14308 }, + { 0x19EC, 14312 }, + { 0x19FE, 14316 }, + { 0x19EE, 14320 }, + { 0x19FB, 14324 }, + { 0x19EB, 14328 }, + { 0x19FF, 14332 }, + { 0x19EF, 14336 }, + { 0x19F8, 14340 }, + { 0x19E8, 14344 }, + { 0x19F7, 14348 }, + { 0x19E7, 14352 }, + { 0x19F9, 14356 }, + { 0x19E9, 14360 }, + { 0x19F6, 14364 }, + { 0x19E6, 14368 }, + { 0x19F0, 14372 }, + { 0x19E0, 14375 }, + { 0x17DB, 14378 }, + { 0x17AD, 14382 }, + { 0x17AF, 14386 }, + { 0x17A5, 14390 }, + { 0x17A7, 14394 }, + { 0x17AB, 14398 }, + { 0x17AE, 14402 }, + { 0x17A4, 14406 }, + { 0x17B0, 14410 }, + { 0x17A3, 14414 }, + { 0x17B3, 14418 }, + { 0x17A6, 14422 }, + { 0x17B1, 14426 }, + { 0x17B2, 14432 }, + { 0x17A8, 14438 }, + { 0x17A9, 14442 }, + { 0x17AC, 14446 }, + { 0x17AA, 14450 }, + { 0x27D8, 14454 }, + { 0x27D9, 14457 }, + { 0x2A1E, 14460 }, + { 0x25EF, 14464 }, + { 0x2AFC, 14466 }, + { 0x271D, 14471 }, + { 0x0061, 14473 }, + { 0x0227, 14477 }, + { 0x01E1, 14484 }, + { 0x1EA1, 14493 }, + { 0x1EA3, 14500 }, + { 0x00E5, 14507 }, + { 0x01FB, 14514 }, + { 0x1E01, 14523 }, + { 0x00E1, 14530 }, + { 0x0103, 14536 }, + { 0x1EB7, 14542 }, + { 0x1EB3, 14551 }, + { 0x1EAF, 14560 }, + { 0x1EB1, 14568 }, + { 0x1EB5, 14576 }, + { 0x01CE, 14584 }, + { 0x00E0, 14590 }, + { 0x1E9A, 14596 }, + { 0x00E3, 14604 }, + { 0x0201, 14610 }, + { 0x0101, 14617 }, + { 0x0105, 14623 }, + { 0x2C65, 14629 }, + { 0x0203, 14635 }, + { 0x00E4, 14642 }, + { 0x01DF, 14648 }, + { 0x1D8F, 14656 }, + { 0x00E2, 14663 }, + { 0x1EAD, 14669 }, + { 0x1EA9, 14678 }, + { 0x1EA5, 14687 }, + { 0x1EA7, 14695 }, + { 0x1EAB, 14703 }, + { 0x0062, 14711 }, + { 0x1E03, 14715 }, + { 0x1E05, 14722 }, + { 0x0253, 14729 }, + { 0x1E07, 14735 }, + { 0x1D6C, 14742 }, + { 0x0180, 14749 }, + { 0x0183, 14755 }, + { 0x1D80, 14761 }, + { 0x0063, 14768 }, + { 0x010B, 14772 }, + { 0x0255, 14779 }, + { 0x0188, 14785 }, + { 0x0107, 14791 }, + { 0x010D, 14797 }, + { 0x023C, 14803 }, + { 0x00E7, 14809 }, + { 0x1E09, 14815 }, + { 0x0109, 14823 }, + { 0x0064, 14829 }, + { 0x1E0B, 14833 }, + { 0x1E0D, 14840 }, + { 0x0221, 14847 }, + { 0x0257, 14853 }, + { 0x1D91, 14859 }, + { 0x1E0F, 14867 }, + { 0x0256, 14874 }, + { 0x010F, 14880 }, + { 0x1D6D, 14886 }, + { 0x0111, 14893 }, + { 0x018C, 14899 }, + { 0x1E11, 14905 }, + { 0x1D81, 14911 }, + { 0x1E13, 14918 }, + { 0x0065, 14925 }, + { 0x0117, 14929 }, + { 0x1EB9, 14936 }, + { 0x1EBB, 14943 }, + { 0x00E9, 14950 }, + { 0x0115, 14956 }, + { 0x011B, 14962 }, + { 0x00E8, 14968 }, + { 0x2C78, 14974 }, + { 0x1EBD, 14980 }, + { 0x1E1B, 14986 }, + { 0x0205, 14993 }, + { 0x0113, 15000 }, + { 0x1E17, 15006 }, + { 0x1E15, 15014 }, + { 0x0119, 15022 }, + { 0x0247, 15028 }, + { 0x0229, 15034 }, + { 0x1E1D, 15040 }, + { 0x0207, 15048 }, + { 0x00EB, 15055 }, + { 0x1D92, 15061 }, + { 0x00EA, 15068 }, + { 0x1EC7, 15074 }, + { 0x1EC3, 15083 }, + { 0x1EBF, 15092 }, + { 0x1EC1, 15100 }, + { 0x1EC5, 15108 }, + { 0x1E19, 15116 }, + { 0x0066, 15123 }, + { 0x1E1F, 15127 }, + { 0x0192, 15134 }, + { 0x1D6E, 15140 }, + { 0x1D82, 15147 }, + { 0x0067, 15154 }, + { 0x0121, 15158 }, + { 0x0260, 15165 }, + { 0x01F5, 15171 }, + { 0x011F, 15177 }, + { 0x01E7, 15183 }, + { 0x1E21, 15189 }, + { 0x01E5, 15195 }, + { 0x0123, 15201 }, + { 0x1D83, 15207 }, + { 0x011D, 15214 }, + { 0x0068, 15220 }, + { 0x1E23, 15224 }, + { 0x1E25, 15231 }, + { 0x0266, 15238 }, + { 0x1E96, 15244 }, + { 0x1E2B, 15251 }, + { 0x021F, 15258 }, + { 0x0127, 15264 }, + { 0x1E29, 15270 }, + { 0x2C68, 15276 }, + { 0x1E27, 15282 }, + { 0x0125, 15288 }, + { 0x0069, 15294 }, + { 0x1ECB, 15298 }, + { 0x1EC9, 15305 }, + { 0x00ED, 15312 }, + { 0x012D, 15318 }, + { 0x01D0, 15324 }, + { 0x00EC, 15330 }, + { 0x0129, 15336 }, + { 0x1E2D, 15342 }, + { 0x0209, 15349 }, + { 0x012B, 15356 }, + { 0x012F, 15362 }, + { 0x0268, 15368 }, + { 0x020B, 15374 }, + { 0x00EF, 15381 }, + { 0x1E2F, 15387 }, + { 0x1D96, 15395 }, + { 0x00EE, 15402 }, + { 0x006A, 15408 }, + { 0x01F0, 15412 }, + { 0x0249, 15418 }, + { 0x0135, 15424 }, + { 0x029D, 15430 }, + { 0x006B, 15436 }, + { 0x1E33, 15440 }, + { 0x0199, 15447 }, + { 0x1E35, 15453 }, + { 0x1E31, 15460 }, + { 0x01E9, 15466 }, + { 0x5741, 15472 }, + { 0x5745, 15478 }, + { 0x0137, 15487 }, + { 0x1D84, 15493 }, + { 0x5743, 15500 }, + { 0x2C6A, 15507 }, + { 0x006C, 15513 }, + { 0x019A, 15517 }, + { 0x1E37, 15523 }, + { 0x1E39, 15530 }, + { 0x026C, 15539 }, + { 0x0234, 15545 }, + { 0x5749, 15551 }, + { 0x1E3B, 15558 }, + { 0x013A, 15565 }, + { 0x013E, 15571 }, + { 0x2C61, 15577 }, + { 0x0140, 15584 }, + { 0x026B, 15591 }, + { 0x0142, 15598 }, + { 0x013C, 15604 }, + { 0x1D85, 15610 }, + { 0x026D, 15617 }, + { 0x1E3D, 15624 }, + { 0x006D, 15631 }, + { 0x1E41, 15635 }, + { 0x1E43, 15642 }, + { 0x0271, 15649 }, + { 0x1E3F, 15655 }, + { 0x1D6F, 15661 }, + { 0x1D86, 15668 }, + { 0x006E, 15675 }, + { 0x1E45, 15679 }, + { 0x1E47, 15686 }, + { 0x0235, 15693 }, + { 0x0272, 15699 }, + { 0x1E49, 15706 }, + { 0x019E, 15713 }, + { 0x0144, 15721 }, + { 0x0148, 15727 }, + { 0x01F9, 15733 }, + { 0x00F1, 15739 }, + { 0x1D70, 15745 }, + { 0x0146, 15752 }, + { 0x1D87, 15758 }, + { 0x0273, 15765 }, + { 0x1E4B, 15772 }, + { 0x0149, 15779 }, + { 0x006F, 15786 }, + { 0x022F, 15790 }, + { 0x0231, 15797 }, + { 0x1ECD, 15806 }, + { 0x2C7A, 15813 }, + { 0x1ECF, 15821 }, + { 0x01A1, 15828 }, + { 0x1EE3, 15834 }, + { 0x1EDF, 15843 }, + { 0x1EDB, 15852 }, + { 0x1EDD, 15860 }, + { 0x1EE1, 15868 }, + { 0x574B, 15876 }, + { 0x574D, 15884 }, + { 0x00F3, 15890 }, + { 0x014F, 15896 }, + { 0x01D2, 15902 }, + { 0x00F2, 15908 }, + { 0x00F5, 15914 }, + { 0x1E4D, 15920 }, + { 0x022D, 15928 }, + { 0x1E4F, 15936 }, + { 0x0151, 15944 }, + { 0x020D, 15951 }, + { 0x014D, 15958 }, + { 0x1E53, 15964 }, + { 0x1E51, 15972 }, + { 0x01EB, 15980 }, + { 0x01ED, 15986 }, + { 0x00F8, 15994 }, + { 0x01FF, 16000 }, + { 0x020F, 16008 }, + { 0x00F6, 16015 }, + { 0x022B, 16021 }, + { 0x00F4, 16029 }, + { 0x1ED9, 16035 }, + { 0x1ED5, 16044 }, + { 0x1ED1, 16053 }, + { 0x1ED3, 16061 }, + { 0x1ED7, 16069 }, + { 0x0070, 16077 }, + { 0x1E57, 16081 }, + { 0x01A5, 16088 }, + { 0x1E55, 16094 }, + { 0x1D71, 16100 }, + { 0x1D7D, 16107 }, + { 0x5751, 16113 }, + { 0x1D88, 16121 }, + { 0x5753, 16128 }, + { 0x5755, 16134 }, + { 0x0071, 16141 }, + { 0x02A0, 16145 }, + { 0x024B, 16151 }, + { 0x5757, 16158 }, + { 0x5759, 16166 }, + { 0x0072, 16173 }, + { 0x1E59, 16177 }, + { 0x1E5B, 16184 }, + { 0x1E5D, 16191 }, + { 0x1E5F, 16200 }, + { 0x027C, 16207 }, + { 0x027D, 16214 }, + { 0x0155, 16220 }, + { 0x0159, 16226 }, + { 0x0211, 16232 }, + { 0x1D72, 16239 }, + { 0x024D, 16246 }, + { 0x0157, 16252 }, + { 0x1D89, 16258 }, + { 0x027E, 16265 }, + { 0x1D73, 16271 }, + { 0x0213, 16280 }, + { 0x575B, 16287 }, + { 0x0073, 16292 }, + { 0x1E61, 16296 }, + { 0x1E63, 16303 }, + { 0x1E69, 16310 }, + { 0x0282, 16320 }, + { 0x015B, 16326 }, + { 0x1E65, 16332 }, + { 0x0161, 16341 }, + { 0x1E67, 16347 }, + { 0x0219, 16356 }, + { 0x023F, 16363 }, + { 0x1D74, 16370 }, + { 0x015F, 16377 }, + { 0x1D8A, 16383 }, + { 0x015D, 16390 }, + { 0x0074, 16396 }, + { 0x1E6B, 16400 }, + { 0x1E6D, 16407 }, + { 0x0236, 16414 }, + { 0x01AD, 16420 }, + { 0x1E6F, 16426 }, + { 0x0165, 16433 }, + { 0x021B, 16439 }, + { 0x1D75, 16446 }, + { 0x0167, 16453 }, + { 0x0163, 16459 }, + { 0x01AB, 16465 }, + { 0x2C66, 16472 }, + { 0x1E97, 16479 }, + { 0x0288, 16485 }, + { 0x1E71, 16492 }, + { 0x0075, 16499 }, + { 0x0289, 16503 }, + { 0x1EE5, 16508 }, + { 0x1EE7, 16515 }, + { 0x01B0, 16522 }, + { 0x1EF1, 16528 }, + { 0x1EED, 16537 }, + { 0x1EE9, 16546 }, + { 0x1EEB, 16554 }, + { 0x1EEF, 16562 }, + { 0x016F, 16570 }, + { 0x00FA, 16577 }, + { 0x016D, 16583 }, + { 0x01D4, 16589 }, + { 0x00F9, 16595 }, + { 0x0169, 16601 }, + { 0x1E79, 16607 }, + { 0x1E75, 16615 }, + { 0x0171, 16622 }, + { 0x0215, 16629 }, + { 0x016B, 16636 }, + { 0x1E7B, 16642 }, + { 0x0173, 16650 }, + { 0x0217, 16656 }, + { 0x00FC, 16663 }, + { 0x01D8, 16669 }, + { 0x01DA, 16677 }, + { 0x01DC, 16685 }, + { 0x01D6, 16693 }, + { 0x1E73, 16701 }, + { 0x1D99, 16708 }, + { 0x00FB, 16715 }, + { 0x1E77, 16721 }, + { 0x0076, 16728 }, + { 0x1E7F, 16732 }, + { 0x2C74, 16739 }, + { 0x028B, 16745 }, + { 0x2C71, 16751 }, + { 0x1E7D, 16758 }, + { 0x1D8C, 16764 }, + { 0x575F, 16771 }, + { 0x0077, 16778 }, + { 0x1E87, 16782 }, + { 0x1E89, 16789 }, + { 0x2C73, 16796 }, + { 0x1E98, 16802 }, + { 0x1E83, 16809 }, + { 0x1E81, 16815 }, + { 0x1E85, 16821 }, + { 0x0175, 16827 }, + { 0x0078, 16833 }, + { 0x1E8B, 16837 }, + { 0x1D8D, 16844 }, + { 0x1E8D, 16851 }, + { 0x0079, 16857 }, + { 0x1E8F, 16861 }, + { 0x1EF5, 16868 }, + { 0x01B4, 16875 }, + { 0x1EF7, 16881 }, + { 0x1EFF, 16888 }, + { 0x1E99, 16894 }, + { 0x00FD, 16901 }, + { 0x1EF3, 16907 }, + { 0x1EF9, 16913 }, + { 0x0233, 16919 }, + { 0x024F, 16925 }, + { 0x00FF, 16931 }, + { 0x0177, 16937 }, + { 0x007A, 16943 }, + { 0x017C, 16947 }, + { 0x1E93, 16954 }, + { 0x0291, 16961 }, + { 0x0225, 16967 }, + { 0x1E95, 16973 }, + { 0x017A, 16980 }, + { 0x017E, 16986 }, + { 0x0240, 16992 }, + { 0x1D76, 16999 }, + { 0x01B6, 17006 }, + { 0x1D8E, 17012 }, + { 0x2C6C, 17019 }, + { 0x0290, 17025 }, + { 0x1E91, 17032 }, + { 0x5733, 17038 }, + { 0x00E6, 17042 }, + { 0x01FD, 17046 }, + { 0x01E3, 17052 }, + { 0x5735, 17058 }, + { 0x5737, 17062 }, + { 0x5739, 17066 }, + { 0x573B, 17070 }, + { 0x573D, 17077 }, + { 0x0238, 17081 }, + { 0x01F3, 17086 }, + { 0x01C6, 17090 }, + { 0x02A3, 17096 }, + { 0x02A5, 17101 }, + { 0x576B, 17108 }, + { 0x0195, 17112 }, + { 0x576D, 17116 }, + { 0x01C9, 17120 }, + { 0x02AA, 17124 }, + { 0x02AB, 17129 }, + { 0x01CC, 17134 }, + { 0x01A3, 17138 }, + { 0x574F, 17142 }, + { 0x0223, 17146 }, + { 0x0239, 17150 }, + { 0x02A8, 17155 }, + { 0x1D7A, 17162 }, + { 0x02A6, 17168 }, + { 0x5729, 17173 }, + { 0x1D6B, 17177 }, + { 0x5778, 17181 }, + { 0x5761, 17185 }, + { 0x576F, 17189 }, + { 0x5771, 17193 }, + { 0x014B, 17197 }, + { 0x0283, 17201 }, + { 0x0286, 17205 }, + { 0x1D8B, 17211 }, + { 0x1D98, 17218 }, + { 0x00F0, 17225 }, + { 0x0292, 17229 }, + { 0x0293, 17233 }, + { 0x01BA, 17239 }, + { 0x01EF, 17245 }, + { 0x1D9A, 17251 }, + { 0x01B9, 17258 }, + { 0x0138, 17263 }, + { 0x5772, 17267 }, + { 0x5773, 17271 }, + { 0x5774, 17275 }, + { 0x0278, 17279 }, + { 0x5775, 17283 }, + { 0x575D, 17287 }, + { 0x1D16, 17292 }, + { 0x5777, 17298 }, + { 0x02A4, 17302 }, + { 0x02A9, 17307 }, + { 0x2C76, 17312 }, + { 0x5727, 17317 }, + { 0x0267, 17321 }, + { 0x0269, 17327 }, + { 0x1D7C, 17331 }, + { 0x026E, 17337 }, + { 0x017F, 17341 }, + { 0x1E9B, 17346 }, + { 0x1E9D, 17354 }, + { 0x1E9C, 17362 }, + { 0x025B, 17370 }, + { 0x1D93, 17375 }, + { 0x0254, 17383 }, + { 0x1D97, 17388 }, + { 0x0264, 17396 }, + { 0x02A7, 17401 }, + { 0x0185, 17406 }, + { 0x01A8, 17411 }, + { 0x01BD, 17416 }, + { 0x5769, 17421 }, + { 0x021D, 17425 }, + { 0x0251, 17429 }, + { 0x1D90, 17433 }, + { 0x1E9F, 17440 }, + { 0x0263, 17444 }, + { 0x0259, 17448 }, + { 0x025A, 17452 }, + { 0x1D95, 17458 }, + { 0x00DF, 17465 }, + { 0x0285, 17470 }, + { 0x00FE, 17476 }, + { 0x5765, 17480 }, + { 0x5767, 17486 }, + { 0x0275, 17494 }, + { 0x1D17, 17499 }, + { 0x5747, 17505 }, + { 0x029A, 17510 }, + { 0x0277, 17516 }, + { 0x025E, 17521 }, + { 0x019B, 17528 }, + { 0x0261, 17534 }, + { 0x0250, 17539 }, + { 0x01DD, 17544 }, + { 0x1D77, 17549 }, + { 0x0265, 17554 }, + { 0x02AE, 17559 }, + { 0x02AF, 17566 }, + { 0x1D09, 17575 }, + { 0x029E, 17580 }, + { 0x5781, 17585 }, + { 0x026F, 17590 }, + { 0x0270, 17595 }, + { 0x0279, 17603 }, + { 0x027B, 17608 }, + { 0x027A, 17615 }, + { 0x2C79, 17623 }, + { 0x0287, 17630 }, + { 0x028C, 17635 }, + { 0x028D, 17640 }, + { 0x028E, 17645 }, + { 0x1D02, 17650 }, + { 0x1D14, 17655 }, + { 0x1D08, 17660 }, + { 0x0252, 17666 }, + { 0x018D, 17671 }, + { 0x577F, 17676 }, + { 0x0131, 17682 }, + { 0x0237, 17687 }, + { 0x025F, 17692 }, + { 0x0284, 17699 }, + { 0x0242, 17708 }, + { 0x577A, 17713 }, + { 0x577C, 17718 }, + { 0x1D79, 17723 }, + { 0x5783, 17728 }, + { 0x5785, 17733 }, + { 0x5787, 17738 }, + { 0x028A, 17743 }, + { 0x1D7F, 17747 }, + { 0x2184, 17753 }, + { 0x573F, 17758 }, + { 0x0258, 17765 }, + { 0x027F, 17770 }, + { 0x025C, 17777 }, + { 0x025D, 17783 }, + { 0x1D94, 17791 }, + { 0x578C, 17800 }, + { 0x1D11, 17804 }, + { 0x1D13, 17809 }, + { 0x1D1D, 17816 }, + { 0x1D12, 17821 }, + { 0x1D1F, 17827 }, + { 0x1D1E, 17833 }, + { 0x2C77, 17839 }, + { 0x572B, 17844 }, + { 0x572D, 17848 }, + { 0x572F, 17852 }, + { 0x5763, 17858 }, + { 0x1EFD, 17863 }, + { 0x1EFB, 17868 }, + { 0x5725, 17873 }, + { 0x5723, 17878 }, + { 0x1D7B, 17883 }, + { 0x1D7E, 17890 }, + { 0x6B00, 17897 }, + { 0x6B01, 17901 }, + { 0x6B02, 17905 }, + { 0x0133, 17909 }, + { 0x0153, 17913 }, + { 0x6B06, 17917 }, + { 0x6B03, 17921 }, + { 0x6B04, 17925 }, + { 0x6B05, 17929 }, + { 0x01A6, 17935 }, + { 0x1D25, 17938 }, + { 0x01BB, 17941 }, + { 0x01BF, 17946 }, + { 0x1D00, 17949 }, + { 0x0299, 17954 }, + { 0x1D04, 17959 }, + { 0x1D05, 17964 }, + { 0x1D07, 17969 }, + { 0x5730, 17974 }, + { 0x0262, 17979 }, + { 0x029B, 17984 }, + { 0x029C, 17991 }, + { 0x026A, 17996 }, + { 0x1D0A, 18001 }, + { 0x1D0B, 18006 }, + { 0x029F, 18011 }, + { 0x1D0C, 18016 }, + { 0x1D0D, 18023 }, + { 0x0274, 18028 }, + { 0x1D0F, 18033 }, + { 0x1D18, 18038 }, + { 0x0280, 18043 }, + { 0x5731, 18048 }, + { 0x1D1B, 18053 }, + { 0x1D1C, 18058 }, + { 0x1D20, 18063 }, + { 0x1D21, 18068 }, + { 0x028F, 18073 }, + { 0x1D22, 18078 }, + { 0x1D01, 18083 }, + { 0x0276, 18088 }, + { 0x1D15, 18093 }, + { 0x1D06, 18098 }, + { 0x1D23, 18103 }, + { 0x5776, 18108 }, + { 0x1D10, 18113 }, + { 0x1D03, 18119 }, + { 0x2C7B, 18125 }, + { 0x1D1A, 18131 }, + { 0x0281, 18137 }, + { 0x1D0E, 18143 }, + { 0x1D19, 18149 }, + { 0x01C0, 18155 }, + { 0x1D24, 18159 }, + { 0x0294, 18164 }, + { 0x02A1, 18168 }, + { 0x01C1, 18174 }, + { 0x01C2, 18178 }, + { 0x02AD, 18182 }, + { 0x0298, 18186 }, + { 0x02AC, 18190 }, + { 0x0296, 18194 }, + { 0x01BE, 18199 }, + { 0x01AA, 18206 }, + { 0x02A2, 18211 }, + { 0x01C3, 18218 }, + { 0x0297, 18222 }, + { 0x0295, 18226 }, + { 0x0041, 18231 }, + { 0x0226, 18235 }, + { 0x01E0, 18242 }, + { 0x1EA0, 18251 }, + { 0x1EA2, 18258 }, + { 0x00C5, 18265 }, + { 0x01FA, 18272 }, + { 0x1E00, 18281 }, + { 0x00C1, 18288 }, + { 0x0102, 18294 }, + { 0x1EB6, 18300 }, + { 0x1EB2, 18309 }, + { 0x1EAE, 18318 }, + { 0x1EB0, 18326 }, + { 0x1EB4, 18334 }, + { 0x01CD, 18342 }, + { 0x00C0, 18348 }, + { 0x00C3, 18354 }, + { 0x0200, 18360 }, + { 0x0100, 18367 }, + { 0x0104, 18373 }, + { 0x023A, 18379 }, + { 0x0202, 18385 }, + { 0x00C4, 18392 }, + { 0x01DE, 18398 }, + { 0x00C2, 18406 }, + { 0x1EAC, 18412 }, + { 0x1EA8, 18421 }, + { 0x1EA4, 18430 }, + { 0x1EA6, 18438 }, + { 0x1EAA, 18446 }, + { 0x0042, 18454 }, + { 0x1E02, 18458 }, + { 0x1E04, 18465 }, + { 0x0181, 18472 }, + { 0x1E06, 18478 }, + { 0x0243, 18485 }, + { 0x0182, 18491 }, + { 0x0043, 18497 }, + { 0x010A, 18501 }, + { 0x0187, 18508 }, + { 0x0106, 18514 }, + { 0x010C, 18520 }, + { 0x023B, 18526 }, + { 0x00C7, 18532 }, + { 0x1E08, 18538 }, + { 0x0108, 18546 }, + { 0x0044, 18552 }, + { 0x1E0A, 18556 }, + { 0x1E0C, 18563 }, + { 0x018A, 18570 }, + { 0x1E0E, 18576 }, + { 0x010E, 18583 }, + { 0x01F2, 18589 }, + { 0x01C5, 18597 }, + { 0x0110, 18607 }, + { 0x018B, 18613 }, + { 0x1E10, 18619 }, + { 0x1E12, 18625 }, + { 0x0045, 18632 }, + { 0x0116, 18636 }, + { 0x1EB8, 18643 }, + { 0x1EBA, 18650 }, + { 0x00C9, 18657 }, + { 0x0114, 18663 }, + { 0x011A, 18669 }, + { 0x00C8, 18675 }, + { 0x1EBC, 18681 }, + { 0x1E1A, 18687 }, + { 0x0204, 18694 }, + { 0x0112, 18701 }, + { 0x1E16, 18707 }, + { 0x1E14, 18715 }, + { 0x0118, 18723 }, + { 0x0246, 18729 }, + { 0x0228, 18735 }, + { 0x1E1C, 18741 }, + { 0x0206, 18749 }, + { 0x00CB, 18756 }, + { 0x00CA, 18762 }, + { 0x1EC6, 18768 }, + { 0x1EC2, 18777 }, + { 0x1EBE, 18786 }, + { 0x1EC0, 18794 }, + { 0x1EC4, 18802 }, + { 0x1E18, 18810 }, + { 0x0046, 18817 }, + { 0x1E1E, 18821 }, + { 0x0191, 18828 }, + { 0x0047, 18834 }, + { 0x0120, 18838 }, + { 0x0193, 18845 }, + { 0x01F4, 18851 }, + { 0x011E, 18857 }, + { 0x01E6, 18863 }, + { 0x1E20, 18869 }, + { 0x01E4, 18875 }, + { 0x0122, 18881 }, + { 0x011C, 18887 }, + { 0x0048, 18893 }, + { 0x1E22, 18897 }, + { 0x1E24, 18904 }, + { 0x1E2A, 18911 }, + { 0x021E, 18918 }, + { 0x0126, 18924 }, + { 0x1E28, 18930 }, + { 0x2C67, 18936 }, + { 0x1E26, 18942 }, + { 0x0124, 18948 }, + { 0x0049, 18954 }, + { 0x0130, 18958 }, + { 0x1ECA, 18965 }, + { 0x1EC8, 18972 }, + { 0x00CD, 18979 }, + { 0x012C, 18985 }, + { 0x01CF, 18991 }, + { 0x00CC, 18997 }, + { 0x0128, 19003 }, + { 0x1E2C, 19009 }, + { 0x0208, 19016 }, + { 0x012A, 19023 }, + { 0x012E, 19029 }, + { 0x0197, 19035 }, + { 0x020A, 19041 }, + { 0x00CF, 19048 }, + { 0x1E2E, 19054 }, + { 0x00CE, 19062 }, + { 0x004A, 19068 }, + { 0x0248, 19072 }, + { 0x0134, 19078 }, + { 0x004B, 19084 }, + { 0x1E32, 19088 }, + { 0x0198, 19095 }, + { 0x1E34, 19101 }, + { 0x1E30, 19108 }, + { 0x01E8, 19114 }, + { 0x5740, 19120 }, + { 0x5744, 19126 }, + { 0x0136, 19135 }, + { 0x5742, 19141 }, + { 0x2C69, 19148 }, + { 0x004C, 19154 }, + { 0x023D, 19158 }, + { 0x1E36, 19164 }, + { 0x1E38, 19171 }, + { 0x5748, 19180 }, + { 0x1E3A, 19187 }, + { 0x0139, 19194 }, + { 0x013D, 19200 }, + { 0x01C8, 19206 }, + { 0x2C60, 19214 }, + { 0x013F, 19221 }, + { 0x2C62, 19228 }, + { 0x0141, 19235 }, + { 0x013B, 19241 }, + { 0x1E3C, 19247 }, + { 0x004D, 19254 }, + { 0x1E40, 19258 }, + { 0x1E42, 19265 }, + { 0x2C6E, 19272 }, + { 0x1E3E, 19278 }, + { 0x004E, 19284 }, + { 0x1E44, 19288 }, + { 0x1E46, 19295 }, + { 0x019D, 19302 }, + { 0x1E48, 19309 }, + { 0x0220, 19316 }, + { 0x0143, 19324 }, + { 0x0147, 19330 }, + { 0x01F8, 19336 }, + { 0x01CB, 19342 }, + { 0x00D1, 19350 }, + { 0x0145, 19356 }, + { 0x1E4A, 19362 }, + { 0x004F, 19369 }, + { 0x022E, 19373 }, + { 0x0230, 19380 }, + { 0x1ECC, 19389 }, + { 0x1ECE, 19396 }, + { 0x01A0, 19403 }, + { 0x1EE2, 19409 }, + { 0x1EDE, 19418 }, + { 0x1EDA, 19427 }, + { 0x1EDC, 19435 }, + { 0x1EE0, 19443 }, + { 0x574A, 19451 }, + { 0x574C, 19459 }, + { 0x00D3, 19465 }, + { 0x014E, 19471 }, + { 0x01D1, 19477 }, + { 0x00D2, 19483 }, + { 0x00D5, 19489 }, + { 0x1E4C, 19495 }, + { 0x022C, 19503 }, + { 0x1E4E, 19511 }, + { 0x0150, 19519 }, + { 0x020C, 19526 }, + { 0x014C, 19533 }, + { 0x1E52, 19539 }, + { 0x1E50, 19547 }, + { 0x019F, 19555 }, + { 0x01EA, 19562 }, + { 0x01EC, 19568 }, + { 0x00D8, 19576 }, + { 0x01FE, 19582 }, + { 0x020E, 19590 }, + { 0x00D6, 19597 }, + { 0x022A, 19603 }, + { 0x00D4, 19611 }, + { 0x1ED8, 19617 }, + { 0x1ED4, 19626 }, + { 0x1ED0, 19635 }, + { 0x1ED2, 19643 }, + { 0x1ED6, 19651 }, + { 0x0050, 19659 }, + { 0x1E56, 19663 }, + { 0x01A4, 19670 }, + { 0x1E54, 19676 }, + { 0x2C63, 19682 }, + { 0x5750, 19688 }, + { 0x5752, 19696 }, + { 0x5754, 19702 }, + { 0x0051, 19709 }, + { 0x5756, 19713 }, + { 0x5758, 19721 }, + { 0x0052, 19728 }, + { 0x1E58, 19732 }, + { 0x1E5A, 19739 }, + { 0x1E5C, 19746 }, + { 0x1E5E, 19755 }, + { 0x2C64, 19762 }, + { 0x0154, 19768 }, + { 0x0158, 19774 }, + { 0x0210, 19780 }, + { 0x024C, 19787 }, + { 0x0156, 19793 }, + { 0x0212, 19799 }, + { 0x575A, 19806 }, + { 0x0053, 19811 }, + { 0x1E60, 19815 }, + { 0x1E62, 19822 }, + { 0x1E68, 19829 }, + { 0x015A, 19839 }, + { 0x1E64, 19845 }, + { 0x0160, 19854 }, + { 0x1E66, 19860 }, + { 0x0218, 19869 }, + { 0x015E, 19876 }, + { 0x015C, 19882 }, + { 0x0054, 19888 }, + { 0x1E6A, 19892 }, + { 0x1E6C, 19899 }, + { 0x01AC, 19906 }, + { 0x1E6E, 19912 }, + { 0x0164, 19919 }, + { 0x021A, 19925 }, + { 0x0166, 19932 }, + { 0x0162, 19938 }, + { 0x023E, 19944 }, + { 0x01AE, 19951 }, + { 0x1E70, 19958 }, + { 0x0055, 19965 }, + { 0x0244, 19969 }, + { 0x1EE4, 19974 }, + { 0x1EE6, 19981 }, + { 0x01AF, 19988 }, + { 0x1EF0, 19994 }, + { 0x1EEC, 20003 }, + { 0x1EE8, 20012 }, + { 0x1EEA, 20020 }, + { 0x1EEE, 20028 }, + { 0x016E, 20036 }, + { 0x00DA, 20043 }, + { 0x016C, 20049 }, + { 0x01D3, 20055 }, + { 0x00D9, 20061 }, + { 0x0168, 20067 }, + { 0x1E78, 20073 }, + { 0x1E74, 20081 }, + { 0x0170, 20088 }, + { 0x0214, 20095 }, + { 0x016A, 20102 }, + { 0x1E7A, 20108 }, + { 0x0172, 20116 }, + { 0x0216, 20122 }, + { 0x00DC, 20129 }, + { 0x01D7, 20135 }, + { 0x01D9, 20143 }, + { 0x01DB, 20151 }, + { 0x01D5, 20159 }, + { 0x1E72, 20167 }, + { 0x00DB, 20174 }, + { 0x1E76, 20180 }, + { 0x0056, 20187 }, + { 0x1E7E, 20191 }, + { 0x01B2, 20198 }, + { 0x1E7C, 20204 }, + { 0x575E, 20210 }, + { 0x0057, 20217 }, + { 0x1E86, 20221 }, + { 0x1E88, 20228 }, + { 0x2C72, 20235 }, + { 0x1E82, 20241 }, + { 0x1E80, 20247 }, + { 0x1E84, 20253 }, + { 0x0174, 20259 }, + { 0x0058, 20265 }, + { 0x1E8A, 20269 }, + { 0x1E8C, 20276 }, + { 0x0059, 20282 }, + { 0x1E8E, 20286 }, + { 0x1EF4, 20293 }, + { 0x01B3, 20300 }, + { 0x1EF6, 20306 }, + { 0x1EFE, 20313 }, + { 0x00DD, 20319 }, + { 0x1EF2, 20325 }, + { 0x1EF8, 20331 }, + { 0x0232, 20337 }, + { 0x024E, 20343 }, + { 0x0178, 20349 }, + { 0x0176, 20355 }, + { 0x005A, 20361 }, + { 0x017B, 20365 }, + { 0x1E92, 20372 }, + { 0x0224, 20379 }, + { 0x1E94, 20385 }, + { 0x0179, 20392 }, + { 0x017D, 20398 }, + { 0x01B5, 20404 }, + { 0x2C6B, 20410 }, + { 0x1E90, 20416 }, + { 0x5732, 20422 }, + { 0x00C6, 20426 }, + { 0x01FC, 20430 }, + { 0x01E2, 20436 }, + { 0x5734, 20442 }, + { 0x5736, 20446 }, + { 0x5738, 20450 }, + { 0x573A, 20454 }, + { 0x573C, 20461 }, + { 0x01F1, 20465 }, + { 0x01C4, 20469 }, + { 0x576A, 20475 }, + { 0x576C, 20479 }, + { 0x01C7, 20483 }, + { 0x01CA, 20487 }, + { 0x01A2, 20491 }, + { 0x574E, 20495 }, + { 0x0222, 20499 }, + { 0x5728, 20503 }, + { 0x5760, 20507 }, + { 0x576E, 20511 }, + { 0x014A, 20515 }, + { 0x01A9, 20519 }, + { 0x00D0, 20523 }, + { 0x01B7, 20527 }, + { 0x01EE, 20531 }, + { 0x01B8, 20537 }, + { 0x575C, 20542 }, + { 0x2C75, 20547 }, + { 0x5726, 20552 }, + { 0x0196, 20556 }, + { 0x0190, 20560 }, + { 0x0186, 20565 }, + { 0x0184, 20570 }, + { 0x01A7, 20575 }, + { 0x01BC, 20580 }, + { 0x5768, 20585 }, + { 0x01F7, 20589 }, + { 0x021C, 20593 }, + { 0x2C6D, 20597 }, + { 0x0194, 20601 }, + { 0x01F6, 20605 }, + { 0x018F, 20609 }, + { 0x1E9E, 20613 }, + { 0x024A, 20618 }, + { 0x00DE, 20626 }, + { 0x5764, 20630 }, + { 0x5766, 20636 }, + { 0x5746, 20644 }, + { 0x2C6F, 20649 }, + { 0x5780, 20654 }, + { 0x019C, 20659 }, + { 0x0245, 20664 }, + { 0x577E, 20669 }, + { 0x0189, 20675 }, + { 0x0241, 20680 }, + { 0x5779, 20685 }, + { 0x577B, 20690 }, + { 0x577D, 20695 }, + { 0x5782, 20700 }, + { 0x5784, 20705 }, + { 0x5786, 20710 }, + { 0x01B1, 20715 }, + { 0x573E, 20719 }, + { 0x018E, 20726 }, + { 0x578B, 20731 }, + { 0x572A, 20735 }, + { 0x572C, 20739 }, + { 0x572E, 20743 }, + { 0x5762, 20749 }, + { 0x1EFC, 20754 }, + { 0x1EFA, 20759 }, + { 0x5724, 20764 }, + { 0x5722, 20769 }, + { 0x0132, 20774 }, + { 0x0152, 20778 }, + { 0x2090, 20782 }, + { 0x2091, 20787 }, + { 0x1D62, 20792 }, + { 0x2C7C, 20797 }, + { 0x2092, 20802 }, + { 0x1D63, 20807 }, + { 0x1D64, 20812 }, + { 0x1D65, 20817 }, + { 0x2093, 20822 }, + { 0x2094, 20827 }, + { 0x57FE, 20832 }, + { 0x57FF, 20837 }, + { 0x57FD, 20842 }, + { 0x57FB, 20847 }, + { 0x57FC, 20852 }, + { 0x264E, 20857 }, + { 0x2772, 20858 }, + { 0x2773, 20864 }, + { 0x2591, 20870 }, + { 0x2758, 20872 }, + { 0x1940, 20875 }, + { 0x193B, 20878 }, + { 0x193A, 20881 }, + { 0x1939, 20884 }, + { 0x1947, 20887 }, + { 0x194C, 20890 }, + { 0x1948, 20893 }, + { 0x194B, 20896 }, + { 0x194A, 20899 }, + { 0x194F, 20902 }, + { 0x1946, 20905 }, + { 0x194E, 20908 }, + { 0x194D, 20911 }, + { 0x1949, 20914 }, + { 0x1930, 20917 }, + { 0x1938, 20921 }, + { 0x1936, 20925 }, + { 0x1934, 20929 }, + { 0x1935, 20933 }, + { 0x1937, 20937 }, + { 0x1933, 20941 }, + { 0x1931, 20945 }, + { 0x1932, 20949 }, + { 0x1920, 20953 }, + { 0x1927, 20957 }, + { 0x1921, 20961 }, + { 0x1928, 20965 }, + { 0x1922, 20969 }, + { 0x1924, 20973 }, + { 0x1926, 20977 }, + { 0x1923, 20981 }, + { 0x1925, 20985 }, + { 0x1912, 20989 }, + { 0x1906, 20992 }, + { 0x190D, 20995 }, + { 0x1903, 20998 }, + { 0x191C, 21001 }, + { 0x1908, 21004 }, + { 0x1901, 21007 }, + { 0x1917, 21010 }, + { 0x1914, 21013 }, + { 0x190F, 21016 }, + { 0x1910, 21019 }, + { 0x1916, 21022 }, + { 0x191B, 21025 }, + { 0x190B, 21028 }, + { 0x1918, 21031 }, + { 0x1915, 21034 }, + { 0x1913, 21037 }, + { 0x1907, 21040 }, + { 0x190E, 21043 }, + { 0x1904, 21046 }, + { 0x1909, 21049 }, + { 0x1902, 21052 }, + { 0x1905, 21055 }, + { 0x1911, 21058 }, + { 0x1919, 21061 }, + { 0x191A, 21064 }, + { 0x190C, 21067 }, + { 0x190A, 21070 }, + { 0x1945, 21073 }, + { 0x192A, 21076 }, + { 0x192B, 21080 }, + { 0x1929, 21084 }, + { 0x1944, 21088 }, + { 0x1900, 21091 }, + { 0x2581, 21094 }, + { 0x2582, 21098 }, + { 0x2585, 21102 }, + { 0x2584, 21106 }, + { 0x25E1, 21109 }, + { 0x25DB, 21112 }, + { 0x25DF, 21117 }, + { 0x25FA, 21122 }, + { 0x293F, 21125 }, + { 0x2703, 21130 }, + { 0x27D3, 21133 }, + { 0x270E, 21138 }, + { 0x25DE, 21141 }, + { 0x2751, 21146 }, + { 0x25FF, 21151 }, + { 0x293E, 21154 }, + { 0x274F, 21159 }, + { 0x2587, 21164 }, + { 0x2583, 21168 }, + { 0x2586, 21172 }, + { 0x00B5, 21176 }, + { 0x2212, 21178 }, + { 0x2A3A, 21180 }, + { 0x2A2A, 21184 }, + { 0x2A29, 21189 }, + { 0x2A2C, 21194 }, + { 0x2A2B, 21199 }, + { 0x2242, 21204 }, + { 0x266D, 21206 }, + { 0x266F, 21209 }, + { 0x266E, 21212 }, + { 0x2A09, 21215 }, + { 0x22C3, 21218 }, + { 0x2A03, 21220 }, + { 0x2A04, 21225 }, + { 0x2AFF, 21230 }, + { 0x2A06, 21234 }, + { 0x2A05, 21238 }, + { 0x2A00, 21242 }, + { 0x2A01, 21246 }, + { 0x2A02, 21250 }, + { 0x22C1, 21254 }, + { 0x22C0, 21257 }, + { 0x220F, 21260 }, + { 0x2210, 21262 }, + { 0x2211, 21264 }, + { 0x22C2, 21266 }, + { 0x2207, 21268 }, + { 0x20A6, 21269 }, + { 0x2922, 21271 }, + { 0x2197, 21277 }, + { 0x2928, 21280 }, + { 0x2924, 21287 }, + { 0x2931, 21292 }, + { 0x292E, 21299 }, + { 0x2B08, 21306 }, + { 0x2B00, 21310 }, + { 0x21D7, 21314 }, + { 0x2921, 21318 }, + { 0x2196, 21324 }, + { 0x21B8, 21327 }, + { 0x21F1, 21333 }, + { 0x2927, 21338 }, + { 0x2923, 21345 }, + { 0x2932, 21350 }, + { 0x2B09, 21357 }, + { 0x2B01, 21361 }, + { 0x21D6, 21365 }, + { 0x1680, 21369 }, + { 0x1696, 21372 }, + { 0x1692, 21375 }, + { 0x1691, 21378 }, + { 0x1690, 21381 }, + { 0x1689, 21384 }, + { 0x1687, 21387 }, + { 0x168C, 21390 }, + { 0x1698, 21393 }, + { 0x1682, 21396 }, + { 0x168B, 21399 }, + { 0x1685, 21402 }, + { 0x168F, 21405 }, + { 0x1684, 21408 }, + { 0x1686, 21411 }, + { 0x1681, 21414 }, + { 0x168A, 21417 }, + { 0x1683, 21420 }, + { 0x169A, 21423 }, + { 0x1688, 21426 }, + { 0x168E, 21429 }, + { 0x1695, 21432 }, + { 0x1693, 21435 }, + { 0x1694, 21438 }, + { 0x168D, 21441 }, + { 0x1697, 21444 }, + { 0x1699, 21447 }, + { 0x169B, 21450 }, + { 0x169C, 21453 }, + { 0x0B56, 21457 }, + { 0x0B57, 21461 }, + { 0x0B3C, 21465 }, + { 0x0B4D, 21468 }, + { 0x0B03, 21471 }, + { 0x0B02, 21474 }, + { 0x0B3D, 21477 }, + { 0x0B01, 21480 }, + { 0x0B67, 21483 }, + { 0x0B6C, 21486 }, + { 0x0B68, 21489 }, + { 0x0B6B, 21492 }, + { 0x0B6A, 21495 }, + { 0x0B6F, 21498 }, + { 0x0B66, 21501 }, + { 0x0B6E, 21504 }, + { 0x0B6D, 21507 }, + { 0x0B69, 21510 }, + { 0x0B47, 21513 }, + { 0x0B3F, 21517 }, + { 0x0B4B, 21521 }, + { 0x0B41, 21525 }, + { 0x0B3E, 21529 }, + { 0x0B48, 21533 }, + { 0x0B4C, 21537 }, + { 0x0B40, 21541 }, + { 0x0B42, 21545 }, + { 0x0B62, 21549 }, + { 0x0B43, 21554 }, + { 0x0B63, 21559 }, + { 0x0B44, 21564 }, + { 0x0B70, 21569 }, + { 0x0B05, 21571 }, + { 0x0B0F, 21574 }, + { 0x0B07, 21577 }, + { 0x0B13, 21580 }, + { 0x0B09, 21583 }, + { 0x0B06, 21586 }, + { 0x0B10, 21589 }, + { 0x0B14, 21592 }, + { 0x0B2C, 21595 }, + { 0x0B1A, 21598 }, + { 0x0B26, 21601 }, + { 0x0B17, 21604 }, + { 0x0B39, 21607 }, + { 0x0B08, 21610 }, + { 0x0B1C, 21613 }, + { 0x0B15, 21616 }, + { 0x0B32, 21619 }, + { 0x0B2E, 21622 }, + { 0x0B28, 21625 }, + { 0x0B2A, 21628 }, + { 0x0B30, 21631 }, + { 0x0B38, 21634 }, + { 0x0B24, 21637 }, + { 0x0B0A, 21640 }, + { 0x0B35, 21643 }, + { 0x0B71, 21646 }, + { 0x0B2F, 21649 }, + { 0x0B2D, 21652 }, + { 0x0B1B, 21655 }, + { 0x0B21, 21658 }, + { 0x0B27, 21661 }, + { 0x0B18, 21664 }, + { 0x0B1D, 21667 }, + { 0x0B16, 21670 }, + { 0x0B33, 21673 }, + { 0x0B19, 21676 }, + { 0x0B23, 21679 }, + { 0x0B1E, 21682 }, + { 0x0B2B, 21685 }, + { 0x0B5D, 21688 }, + { 0x0B5C, 21691 }, + { 0x0B36, 21694 }, + { 0x0B37, 21697 }, + { 0x0B25, 21700 }, + { 0x0B1F, 21703 }, + { 0x0B5F, 21706 }, + { 0x0B22, 21709 }, + { 0x0B20, 21712 }, + { 0x0B0C, 21715 }, + { 0x0B0B, 21719 }, + { 0x0B61, 21723 }, + { 0x0B60, 21727 }, + { 0x2125, 21731 }, + { 0x262E, 21733 }, + { 0x2318, 21735 }, + { 0x2647, 21739 }, + { 0x00A3, 21740 }, + { 0x2032, 21742 }, + { 0x2399, 21743 }, + { 0x2236, 21746 }, + { 0x2994, 21747 }, + { 0x2E1D, 21751 }, + { 0x2595, 21755 }, + { 0x297D, 21759 }, + { 0x25D7, 21762 }, + { 0x2590, 21766 }, + { 0x22A2, 21769 }, + { 0x221F, 21771 }, + { 0x22BE, 21773 }, + { 0x237C, 21777 }, + { 0x2E01, 21783 }, + { 0x3009, 21788 }, + { 0x2992, 21791 }, + { 0x299C, 21796 }, + { 0x2E00, 21801 }, + { 0x21F4, 21805 }, + { 0x27F4, 21810 }, + { 0x2998, 21815 }, + { 0x3011, 21820 }, + { 0x007D, 21824 }, + { 0x23AD, 21827 }, + { 0x23AB, 21832 }, + { 0x23AC, 21837 }, + { 0x230B, 21842 }, + { 0x27D6, 21844 }, + { 0x2984, 21847 }, + { 0x300F, 21851 }, + { 0x301B, 21855 }, + { 0x3019, 21859 }, + { 0x3017, 21864 }, + { 0x2986, 21868 }, + { 0x300D, 21871 }, + { 0x2E05, 21874 }, + { 0x300B, 21878 }, + { 0x2970, 21882 }, + { 0x29DB, 21888 }, + { 0x201D, 21892 }, + { 0x2E29, 21896 }, + { 0x22CA, 21899 }, + { 0x2E0D, 21904 }, + { 0x2019, 21908 }, + { 0x005D, 21912 }, + { 0x2990, 21915 }, + { 0x298E, 21923 }, + { 0x2046, 21931 }, + { 0x298C, 21936 }, + { 0x23A6, 21941 }, + { 0x23A4, 21946 }, + { 0x23A5, 21951 }, + { 0x29D9, 21955 }, + { 0x2309, 21958 }, + { 0x27C6, 21960 }, + { 0x2E27, 21964 }, + { 0x3015, 21968 }, + { 0x22BF, 21972 }, + { 0x29CE, 21974 }, + { 0x2E21, 21979 }, + { 0x23B9, 21984 }, + { 0x22CC, 21988 }, + { 0x0029, 21991 }, + { 0x23A0, 21993 }, + { 0x239E, 21997 }, + { 0x239F, 22001 }, + { 0x2E03, 22004 }, + { 0x2E0A, 22007 }, + { 0x719A, 22010 }, + { 0x7191, 22013 }, + { 0x7194, 22016 }, + { 0x2160, 22020 }, + { 0x216D, 22023 }, + { 0x2188, 22027 }, + { 0x216F, 22032 }, + { 0x2180, 22036 }, + { 0x2165, 22042 }, + { 0x2185, 22045 }, + { 0x2169, 22050 }, + { 0x2182, 22053 }, + { 0x2161, 22057 }, + { 0x2164, 22060 }, + { 0x216E, 22063 }, + { 0x2181, 22067 }, + { 0x2163, 22071 }, + { 0x2168, 22074 }, + { 0x2167, 22077 }, + { 0x216C, 22080 }, + { 0x2186, 22083 }, + { 0x2187, 22088 }, + { 0x2166, 22092 }, + { 0x2162, 22095 }, + { 0x216A, 22098 }, + { 0x216B, 22101 }, + { 0x2183, 22104 }, + { 0x7190, 22109 }, + { 0x7193, 22112 }, + { 0x7195, 22115 }, + { 0x7196, 22118 }, + { 0x7192, 22121 }, + { 0x719B, 22124 }, + { 0x7199, 22127 }, + { 0x7197, 22130 }, + { 0x7198, 22133 }, + { 0x16ED, 22136 }, + { 0x16EE, 22139 }, + { 0x16CD, 22142 }, + { 0x16D1, 22145 }, + { 0x16C2, 22148 }, + { 0x16B5, 22151 }, + { 0x16AE, 22154 }, + { 0x16E9, 22157 }, + { 0x16A1, 22160 }, + { 0x16A5, 22163 }, + { 0x16EA, 22166 }, + { 0x16A4, 22169 }, + { 0x16CE, 22172 }, + { 0x16AA, 22175 }, + { 0x16AF, 22179 }, + { 0x16B0, 22182 }, + { 0x16A9, 22185 }, + { 0x16A3, 22189 }, + { 0x16B3, 22192 }, + { 0x16E0, 22195 }, + { 0x16B6, 22198 }, + { 0x16A7, 22201 }, + { 0x16B8, 22204 }, + { 0x16C4, 22207 }, + { 0x16DD, 22210 }, + { 0x16E1, 22213 }, + { 0x16AB, 22216 }, + { 0x16E3, 22219 }, + { 0x16A0, 22222 }, + { 0x16B7, 22228 }, + { 0x16C1, 22233 }, + { 0x16C7, 22239 }, + { 0x16B4, 22243 }, + { 0x16E5, 22247 }, + { 0x16A2, 22250 }, + { 0x16C9, 22255 }, + { 0x16A8, 22259 }, + { 0x16E4, 22263 }, + { 0x16DE, 22266 }, + { 0x16D6, 22271 }, + { 0x16BB, 22276 }, + { 0x16C3, 22280 }, + { 0x16B2, 22284 }, + { 0x16B1, 22287 }, + { 0x16CB, 22293 }, + { 0x16CF, 22298 }, + { 0x16B9, 22304 }, + { 0x16BA, 22309 }, + { 0x16DC, 22313 }, + { 0x16DA, 22316 }, + { 0x16D7, 22322 }, + { 0x16BE, 22327 }, + { 0x16D5, 22333 }, + { 0x16C8, 22336 }, + { 0x16CA, 22341 }, + { 0x16E2, 22345 }, + { 0x16DF, 22348 }, + { 0x16D2, 22353 }, + { 0x16DB, 22359 }, + { 0x16C0, 22362 }, + { 0x16D4, 22365 }, + { 0x16A6, 22368 }, + { 0x16E8, 22373 }, + { 0x16C6, 22376 }, + { 0x16E7, 22380 }, + { 0x16C5, 22383 }, + { 0x16E6, 22387 }, + { 0x16AD, 22390 }, + { 0x16CC, 22394 }, + { 0x16D0, 22398 }, + { 0x16AC, 22402 }, + { 0x16D9, 22406 }, + { 0x16BF, 22410 }, + { 0x16D8, 22414 }, + { 0x16BD, 22418 }, + { 0x16BC, 22422 }, + { 0x16D3, 22426 }, + { 0x16EB, 22430 }, + { 0x16F0, 22433 }, + { 0x16EC, 22436 }, + { 0x16EF, 22439 }, + { 0x20A8, 22442 }, + { 0x2AE0, 22444 }, + { 0x2AE8, 22447 }, + { 0x2AE9, 22452 }, + { 0x2ADF, 22459 }, + { 0x2AE7, 22462 }, + { 0x2ADE, 22467 }, + { 0x2944, 22470 }, + { 0x2620, 22476 }, + { 0x2333, 22479 }, + { 0x6E58, 22480 }, + { 0x2A61, 22483 }, + { 0x6E52, 22487 }, + { 0x6E5B, 22490 }, + { 0x6E5D, 22494 }, + { 0x6E59, 22499 }, + { 0x6E62, 22502 }, + { 0x6E55, 22505 }, + { 0x6E50, 22507 }, + { 0x6E5C, 22509 }, + { 0x6E5E, 22513 }, + { 0x6E5A, 22518 }, + { 0x2170, 22521 }, + { 0x217D, 22525 }, + { 0x217F, 22530 }, + { 0x2175, 22535 }, + { 0x2179, 22539 }, + { 0x2171, 22543 }, + { 0x2174, 22547 }, + { 0x217E, 22551 }, + { 0x2173, 22556 }, + { 0x2178, 22560 }, + { 0x2177, 22564 }, + { 0x217C, 22568 }, + { 0x2176, 22572 }, + { 0x2172, 22576 }, + { 0x217A, 22580 }, + { 0x217B, 22584 }, + { 0x02DC, 22588 }, + { 0x6E69, 22590 }, + { 0x6E66, 22593 }, + { 0x6E5F, 22596 }, + { 0x220A, 22599 }, + { 0x22F7, 22602 }, + { 0x22F4, 22607 }, + { 0x6E6A, 22618 }, + { 0x6E68, 22621 }, + { 0x6E61, 22624 }, + { 0x220D, 22626 }, + { 0x22FE, 22630 }, + { 0x22FC, 22634 }, + { 0x6E56, 22644 }, + { 0x6E60, 22647 }, + { 0x6E64, 22649 }, + { 0x6E54, 22652 }, + { 0x6E6B, 22654 }, + { 0x6E57, 22657 }, + { 0x6E51, 22660 }, + { 0x6E65, 22663 }, + { 0x6E63, 22666 }, + { 0x2A33, 22668 }, + { 0x2323, 22670 }, + { 0x2117, 22671 }, + { 0x2198, 22674 }, + { 0x21F2, 22677 }, + { 0x2929, 22682 }, + { 0x2925, 22689 }, + { 0x292D, 22694 }, + { 0x2B0A, 22701 }, + { 0x2B02, 22705 }, + { 0x21D8, 22709 }, + { 0x2199, 22713 }, + { 0x292A, 22716 }, + { 0x2926, 22723 }, + { 0x2B0B, 22728 }, + { 0x2B03, 22732 }, + { 0x21D9, 22736 }, + { 0x0020, 22740 }, + { 0x27A7, 22741 }, + { 0x269A, 22745 }, + { 0x2695, 22748 }, + { 0x2053, 22751 }, + { 0x0BF8, 22753 }, + { 0x0BD7, 22757 }, + { 0x0BD0, 22761 }, + { 0x0BF3, 22763 }, + { 0x0BCD, 22766 }, + { 0x0B83, 22769 }, + { 0x0B82, 22772 }, + { 0x0BF5, 22775 }, + { 0x0BF6, 22778 }, + { 0x0BE7, 22781 }, + { 0x0BEC, 22784 }, + { 0x0BE8, 22787 }, + { 0x0BEB, 22790 }, + { 0x0BEA, 22793 }, + { 0x0BEF, 22796 }, + { 0x0BE6, 22799 }, + { 0x0BEE, 22802 }, + { 0x0BED, 22805 }, + { 0x0BE9, 22808 }, + { 0x0BF4, 22811 }, + { 0x0BF9, 22814 }, + { 0x0BC6, 22817 }, + { 0x0BBF, 22821 }, + { 0x0BCA, 22825 }, + { 0x0BC1, 22829 }, + { 0x0BBE, 22833 }, + { 0x0BC8, 22837 }, + { 0x0BCC, 22841 }, + { 0x0BC7, 22845 }, + { 0x0BC0, 22849 }, + { 0x0BCB, 22853 }, + { 0x0BC2, 22857 }, + { 0x0BF7, 22861 }, + { 0x0B85, 22864 }, + { 0x0B8E, 22867 }, + { 0x0B87, 22870 }, + { 0x0B92, 22873 }, + { 0x0B89, 22876 }, + { 0x0B86, 22879 }, + { 0x0B90, 22882 }, + { 0x0B94, 22885 }, + { 0x0B9A, 22888 }, + { 0x0B8F, 22891 }, + { 0x0BB9, 22894 }, + { 0x0B88, 22897 }, + { 0x0B9C, 22900 }, + { 0x0B95, 22903 }, + { 0x0BB2, 22906 }, + { 0x0BAE, 22909 }, + { 0x0BA8, 22912 }, + { 0x0B93, 22915 }, + { 0x0BAA, 22918 }, + { 0x0BB0, 22921 }, + { 0x0BB8, 22924 }, + { 0x0BA4, 22927 }, + { 0x0B8A, 22930 }, + { 0x0BB5, 22933 }, + { 0x0BAF, 22936 }, + { 0x0BB3, 22939 }, + { 0x0B99, 22942 }, + { 0x0BA3, 22945 }, + { 0x0B9E, 22948 }, + { 0x0BB1, 22951 }, + { 0x0BB6, 22954 }, + { 0x0BB7, 22957 }, + { 0x0B9F, 22960 }, + { 0x0BB4, 22963 }, + { 0x0BA9, 22966 }, + { 0x0BF1, 22969 }, + { 0x0BF2, 22973 }, + { 0x0BF0, 22977 }, + { 0x0BFA, 22980 }, + { 0x2204, 22983 }, + { 0x2203, 22987 }, + { 0x2056, 22989 }, + { 0x2B31, 22992 }, + { 0x21F6, 22995 }, + { 0x2A76, 22998 }, + { 0x27C0, 23002 }, + { 0x2745, 23005 }, + { 0x007E, 23008 }, + { 0x2E1E, 23009 }, + { 0x2E1F, 23013 }, + { 0x2E1B, 23017 }, + { 0x223C, 23021 }, + { 0x2A6A, 23023 }, + { 0x2A6B, 23028 }, + { 0x2B49, 23033 }, + { 0x2972, 23038 }, + { 0x29D4, 23043 }, + { 0x29D5, 23048 }, + { 0x2330, 23053 }, + { 0x2122, 23055 }, + { 0x222A, 23058 }, + { 0x2A41, 23059 }, + { 0x2A45, 23063 }, + { 0x2A42, 23067 }, + { 0x2A48, 23070 }, + { 0x2A46, 23075 }, + { 0x2A4A, 23078 }, + { 0x2594, 23084 }, + { 0x2580, 23088 }, + { 0x25E0, 23091 }, + { 0x25DA, 23094 }, + { 0x23B0, 23099 }, + { 0x27D4, 23107 }, + { 0x25DC, 23112 }, + { 0x25F8, 23117 }, + { 0x2701, 23120 }, + { 0x23B1, 23123 }, + { 0x2710, 23131 }, + { 0x25DD, 23134 }, + { 0x2752, 23139 }, + { 0x25F9, 23144 }, + { 0x2750, 23147 }, + { 0x26B6, 23152 }, + { 0x264D, 23153 }, + { 0x231A, 23154 }, + { 0x2638, 23155 }, + { 0x261D, 23158 }, + { 0x2711, 23162 }, + { 0x263C, 23164 }, + { 0x2667, 23168 }, + { 0x261F, 23171 }, + { 0x2690, 23175 }, + { 0x2727, 23177 }, + { 0x261C, 23181 }, + { 0x2606, 23185 }, + { 0x2B1E, 23187 }, + { 0x2654, 23191 }, + { 0x2659, 23194 }, + { 0x2656, 23197 }, + { 0x2655, 23200 }, + { 0x2657, 23203 }, + { 0x2658, 23206 }, + { 0x2661, 23209 }, + { 0x2B1C, 23212 }, + { 0x261E, 23215 }, + { 0x2616, 23219 }, + { 0x2B52, 23222 }, + { 0x25AB, 23225 }, + { 0x2B2B, 23228 }, + { 0x2664, 23231 }, + { 0x25E6, 23234 }, + { 0x25CB, 23236 }, + { 0x2686, 23238 }, + { 0x2687, 23243 }, + { 0x29EC, 23248 }, + { 0x25F5, 23253 }, + { 0x25F6, 23259 }, + { 0x25F4, 23265 }, + { 0x25F7, 23271 }, + { 0x2B50, 23277 }, + { 0x25FD, 23280 }, + { 0x25FB, 23284 }, + { 0x2B26, 23287 }, + { 0x2B28, 23290 }, + { 0x6E46, 23293 }, + { 0x25A1, 23296 }, + { 0x25F1, 23298 }, + { 0x25F2, 23304 }, + { 0x25F0, 23310 }, + { 0x25F3, 23316 }, + { 0x2385, 23322 }, + { 0x25A2, 23328 }, + { 0x25EB, 23333 }, + { 0x27E4, 23339 }, + { 0x27E5, 23344 }, + { 0x25A3, 23349 }, + { 0x25C7, 23355 }, + { 0x2662, 23357 }, + { 0x27D0, 23360 }, + { 0x25C8, 23365 }, + { 0x2B21, 23371 }, + { 0x263A, 23373 }, + { 0x26C0, 23376 }, + { 0x26C1, 23379 }, + { 0x2740, 23382 }, + { 0x2639, 23384 }, + { 0x2B20, 23387 }, + { 0x2704, 23389 }, + { 0x27C1, 23391 }, + { 0x2AFE, 23397 }, + { 0x2B2F, 23400 }, + { 0x25AF, 23403 }, + { 0x29D6, 23406 }, + { 0x25AD, 23408 }, + { 0x260F, 23410 }, + { 0x23E2, 23412 }, + { 0x2B2D, 23414 }, + { 0x25B5, 23417 }, + { 0x25B3, 23421 }, + { 0x25EC, 23424 }, + { 0x27E1, 23429 }, + { 0x27E2, 23432 }, + { 0x27E3, 23438 }, + { 0x25BF, 23444 }, + { 0x25BD, 23448 }, + { 0x25C3, 23451 }, + { 0x25C5, 23455 }, + { 0x25C1, 23458 }, + { 0x25B1, 23461 }, + { 0x25B9, 23463 }, + { 0x25BB, 23467 }, + { 0x2B54, 23470 }, + { 0x25B7, 23473 }, + { 0x713C, 23476 }, + { 0x7101, 23481 }, + { 0x7100, 23485 }, + { 0x7102, 23489 }, + { 0x713D, 23492 }, + { 0x7107, 23497 }, + { 0x7119, 23500 }, + { 0x7122, 23504 }, + { 0x710C, 23508 }, + { 0x711E, 23511 }, + { 0x7127, 23515 }, + { 0x7110, 23519 }, + { 0x712B, 23522 }, + { 0x7108, 23526 }, + { 0x711A, 23529 }, + { 0x7123, 23533 }, + { 0x710B, 23537 }, + { 0x711D, 23540 }, + { 0x7126, 23544 }, + { 0x710A, 23548 }, + { 0x711C, 23551 }, + { 0x7125, 23555 }, + { 0x710F, 23559 }, + { 0x7121, 23562 }, + { 0x712A, 23566 }, + { 0x710E, 23570 }, + { 0x7120, 23573 }, + { 0x7129, 23577 }, + { 0x7114, 23581 }, + { 0x712F, 23584 }, + { 0x7113, 23588 }, + { 0x712E, 23591 }, + { 0x710D, 23595 }, + { 0x711F, 23598 }, + { 0x7128, 23602 }, + { 0x7115, 23606 }, + { 0x7130, 23609 }, + { 0x7109, 23613 }, + { 0x711B, 23616 }, + { 0x7124, 23620 }, + { 0x7117, 23624 }, + { 0x7132, 23627 }, + { 0x7118, 23631 }, + { 0x7133, 23634 }, + { 0x7112, 23638 }, + { 0x712D, 23641 }, + { 0x7111, 23645 }, + { 0x712C, 23648 }, + { 0x7116, 23652 }, + { 0x7131, 23655 }, + { 0x7137, 23659 }, + { 0x7138, 23663 }, + { 0x713A, 23667 }, + { 0x713B, 23671 }, + { 0x7139, 23675 }, + { 0x713F, 23679 }, + { 0x713E, 23683 }, + { 0x224A, 23687 }, + { 0x2248, 23692 }, + { 0x2A6F, 23695 }, + { 0x2693, 23701 }, + { 0x06DD, 23702 }, + { 0x0608, 23706 }, + { 0x060D, 23708 }, + { 0x066D, 23711 }, + { 0x06D4, 23715 }, + { 0x0658, 23718 }, + { 0x0613, 23722 }, + { 0x060F, 23727 }, + { 0x0603, 23730 }, + { 0x0601, 23733 }, + { 0x0611, 23736 }, + { 0x06FD, 23740 }, + { 0x06FE, 23744 }, + { 0x0614, 23749 }, + { 0x0612, 23752 }, + { 0x0610, 23756 }, + { 0x6E73, 23761 }, + { 0x060C, 23764 }, + { 0x064F, 23766 }, + { 0x6E79, 23768 }, + { 0x6E78, 23772 }, + { 0x06EA, 23776 }, + { 0x06EB, 23781 }, + { 0x064E, 23786 }, + { 0x065E, 23788 }, + { 0x6E77, 23793 }, + { 0x6E76, 23797 }, + { 0x0654, 23801 }, + { 0x0655, 23804 }, + { 0x0650, 23807 }, + { 0x6E7B, 23809 }, + { 0x6E7A, 23813 }, + { 0x06E9, 23817 }, + { 0x06ED, 23821 }, + { 0x06E3, 23825 }, + { 0x06E5, 23829 }, + { 0x06E6, 23832 }, + { 0x06D9, 23835 }, + { 0x0615, 23840 }, + { 0x06E7, 23844 }, + { 0x06DA, 23848 }, + { 0x06D8, 23852 }, + { 0x06E2, 23858 }, + { 0x06E8, 23864 }, + { 0x06DC, 23868 }, + { 0x0617, 23872 }, + { 0x06E4, 23876 }, + { 0x06DB, 23880 }, + { 0x06E1, 23885 }, + { 0x06DF, 23892 }, + { 0x06E0, 23897 }, + { 0x06D7, 23903 }, + { 0x06D6, 23913 }, + { 0x0616, 23923 }, + { 0x0619, 23932 }, + { 0x0618, 23935 }, + { 0x061A, 23938 }, + { 0x06DE, 23941 }, + { 0x0652, 23947 }, + { 0x6E7F, 23949 }, + { 0x6E7E, 23953 }, + { 0x065C, 23957 }, + { 0x065A, 23962 }, + { 0x065B, 23968 }, + { 0x06D0, 23975 }, + { 0x6BE5, 23978 }, + { 0x6BE7, 23983 }, + { 0x6BE6, 23988 }, + { 0x6BE4, 23993 }, + { 0x06C7, 23998 }, + { 0x0677, 24001 }, + { 0x6BDD, 24007 }, + { 0x6BD8, 24015 }, + { 0x6BD7, 24020 }, + { 0x06D5, 24025 }, + { 0x06AD, 24028 }, + { 0x6BD4, 24031 }, + { 0x6BD6, 24036 }, + { 0x6BD5, 24041 }, + { 0x6BD3, 24046 }, + { 0x06C6, 24051 }, + { 0x6BDA, 24054 }, + { 0x6BD9, 24059 }, + { 0x06CB, 24064 }, + { 0x6BDF, 24067 }, + { 0x6BDE, 24072 }, + { 0x06C8, 24077 }, + { 0x6BDC, 24080 }, + { 0x6BDB, 24085 }, + { 0x0639, 24090 }, + { 0x075D, 24093 }, + { 0x075F, 24100 }, + { 0x06A0, 24108 }, + { 0x075E, 24115 }, + { 0x6ECA, 24124 }, + { 0x6ECC, 24129 }, + { 0x6ECB, 24134 }, + { 0x6EC9, 24139 }, + { 0x0628, 24144 }, + { 0x0751, 24147 }, + { 0x0754, 24157 }, + { 0x0756, 24167 }, + { 0x0752, 24173 }, + { 0x0753, 24182 }, + { 0x0750, 24195 }, + { 0x0755, 24203 }, + { 0x6E90, 24211 }, + { 0x6E92, 24216 }, + { 0x6E91, 24221 }, + { 0x6E8F, 24226 }, + { 0x0636, 24231 }, + { 0x06FB, 24234 }, + { 0x6EBE, 24240 }, + { 0x6EC0, 24245 }, + { 0x6EBF, 24250 }, + { 0x6EBD, 24255 }, + { 0x062F, 24260 }, + { 0x068A, 24263 }, + { 0x068B, 24269 }, + { 0x0759, 24278 }, + { 0x0690, 24289 }, + { 0x0689, 24296 }, + { 0x068F, 24301 }, + { 0x06EE, 24309 }, + { 0x075A, 24315 }, + { 0x6EAA, 24323 }, + { 0x6EA9, 24328 }, + { 0x068E, 24333 }, + { 0x6B87, 24336 }, + { 0x6B86, 24341 }, + { 0x0641, 24346 }, + { 0x06A3, 24349 }, + { 0x06A2, 24355 }, + { 0x0760, 24362 }, + { 0x06A5, 24369 }, + { 0x0761, 24376 }, + { 0x6ED2, 24385 }, + { 0x6ED4, 24390 }, + { 0x6ED3, 24395 }, + { 0x6ED1, 24400 }, + { 0x06AF, 24405 }, + { 0x06B2, 24408 }, + { 0x06B0, 24415 }, + { 0x06B4, 24420 }, + { 0x6B93, 24427 }, + { 0x6B95, 24432 }, + { 0x6B94, 24437 }, + { 0x6B92, 24442 }, + { 0x062D, 24447 }, + { 0x0757, 24450 }, + { 0x0682, 24457 }, + { 0x0681, 24465 }, + { 0x076F, 24471 }, + { 0x0772, 24482 }, + { 0x076E, 24491 }, + { 0x0685, 24500 }, + { 0x0758, 24507 }, + { 0x077C, 24516 }, + { 0x6EA2, 24525 }, + { 0x6EA4, 24530 }, + { 0x6EA3, 24535 }, + { 0x6EA1, 24540 }, + { 0x0647, 24545 }, + { 0x06C1, 24548 }, + { 0x06C2, 24552 }, + { 0x6BA7, 24559 }, + { 0x6BA9, 24565 }, + { 0x6BA8, 24571 }, + { 0x6BA6, 24577 }, + { 0x06C0, 24583 }, + { 0x6BA5, 24589 }, + { 0x6BA4, 24597 }, + { 0x06FF, 24605 }, + { 0x6EEA, 24611 }, + { 0x6EEC, 24616 }, + { 0x6EEB, 24621 }, + { 0x6EE9, 24626 }, + { 0x06BE, 24631 }, + { 0x6BAB, 24635 }, + { 0x6BAD, 24641 }, + { 0x6BAC, 24647 }, + { 0x6BAA, 24653 }, + { 0x0698, 24659 }, + { 0x6B8B, 24662 }, + { 0x6B8A, 24667 }, + { 0x0643, 24672 }, + { 0x06AC, 24675 }, + { 0x077F, 24681 }, + { 0x06AB, 24688 }, + { 0x06AE, 24693 }, + { 0x6EDA, 24700 }, + { 0x6EDC, 24705 }, + { 0x6EDB, 24710 }, + { 0x6ED9, 24715 }, + { 0x0644, 24720 }, + { 0x076A, 24723 }, + { 0x06B6, 24728 }, + { 0x06B5, 24734 }, + { 0x06B7, 24740 }, + { 0x06B8, 24747 }, + { 0x6EDE, 24754 }, + { 0x6EE0, 24759 }, + { 0x6EDF, 24764 }, + { 0x6EDD, 24769 }, + { 0x067E, 24774 }, + { 0x6B57, 24777 }, + { 0x6B59, 24782 }, + { 0x6B58, 24787 }, + { 0x6B56, 24792 }, + { 0x0642, 24797 }, + { 0x06A7, 24800 }, + { 0x06A8, 24806 }, + { 0x6ED6, 24813 }, + { 0x6ED8, 24818 }, + { 0x6ED7, 24823 }, + { 0x6ED5, 24828 }, + { 0x0631, 24833 }, + { 0x0694, 24836 }, + { 0x0696, 24842 }, + { 0x0697, 24851 }, + { 0x076B, 24858 }, + { 0x0699, 24866 }, + { 0x0693, 24873 }, + { 0x076C, 24878 }, + { 0x0692, 24884 }, + { 0x0695, 24890 }, + { 0x0771, 24897 }, + { 0x075B, 24908 }, + { 0x06EF, 24913 }, + { 0x6EAE, 24919 }, + { 0x6EAD, 24924 }, + { 0x0635, 24929 }, + { 0x069D, 24932 }, + { 0x069E, 24939 }, + { 0x6EBA, 24946 }, + { 0x6EBC, 24951 }, + { 0x6EBB, 24956 }, + { 0x6EB9, 24961 }, + { 0x0637, 24966 }, + { 0x069F, 24969 }, + { 0x6EC2, 24976 }, + { 0x6EC4, 24981 }, + { 0x6EC3, 24986 }, + { 0x6EC1, 24991 }, + { 0x062A, 24996 }, + { 0x067C, 24999 }, + { 0x067D, 25004 }, + { 0x6E96, 25012 }, + { 0x6E98, 25017 }, + { 0x6E97, 25022 }, + { 0x0629, 25027 }, + { 0x06C3, 25031 }, + { 0x6E94, 25036 }, + { 0x6E93, 25042 }, + { 0x6E95, 25048 }, + { 0x06A4, 25053 }, + { 0x6B6B, 25056 }, + { 0x6B6D, 25061 }, + { 0x6B6C, 25066 }, + { 0x6B6A, 25071 }, + { 0x0648, 25076 }, + { 0x06CF, 25079 }, + { 0x06CA, 25085 }, + { 0x06C4, 25092 }, + { 0x0624, 25097 }, + { 0x6E86, 25103 }, + { 0x6E85, 25111 }, + { 0x0778, 25119 }, + { 0x0779, 25128 }, + { 0x6EEE, 25137 }, + { 0x6EED, 25142 }, + { 0x064A, 25147 }, + { 0x06CD, 25150 }, + { 0x0626, 25155 }, + { 0x6E8A, 25161 }, + { 0x6E8C, 25169 }, + { 0x6E8B, 25177 }, + { 0x6E89, 25185 }, + { 0x06CE, 25193 }, + { 0x06D1, 25199 }, + { 0x6EF2, 25206 }, + { 0x06D2, 25211 }, + { 0x06D3, 25215 }, + { 0x6BB1, 25222 }, + { 0x6BB0, 25231 }, + { 0x077A, 25240 }, + { 0x077B, 25250 }, + { 0x6BAF, 25260 }, + { 0x6BAE, 25266 }, + { 0x6EF4, 25272 }, + { 0x6EF3, 25277 }, + { 0x6EF1, 25282 }, + { 0x0638, 25287 }, + { 0x6EC6, 25290 }, + { 0x6EC8, 25295 }, + { 0x6EC7, 25300 }, + { 0x6EC5, 25305 }, + { 0x0627, 25310 }, + { 0x0672, 25313 }, + { 0x0673, 25320 }, + { 0x0623, 25327 }, + { 0x6E84, 25333 }, + { 0x6E83, 25341 }, + { 0x0625, 25349 }, + { 0x6E88, 25355 }, + { 0x6E87, 25363 }, + { 0x0622, 25371 }, + { 0x6E82, 25377 }, + { 0x6E81, 25385 }, + { 0x0773, 25393 }, + { 0x0774, 25402 }, + { 0x6E8E, 25411 }, + { 0x0671, 25416 }, + { 0x6B51, 25420 }, + { 0x6B50, 25426 }, + { 0x0649, 25432 }, + { 0x6EF0, 25436 }, + { 0x6EEF, 25442 }, + { 0x6E8D, 25448 }, + { 0x067B, 25453 }, + { 0x6B53, 25456 }, + { 0x6B55, 25461 }, + { 0x6B54, 25466 }, + { 0x6B52, 25471 }, + { 0x0688, 25476 }, + { 0x6B89, 25479 }, + { 0x6B88, 25484 }, + { 0x0684, 25489 }, + { 0x6B73, 25492 }, + { 0x6B75, 25497 }, + { 0x6B74, 25502 }, + { 0x6B72, 25507 }, + { 0x06B3, 25512 }, + { 0x6B97, 25515 }, + { 0x6B99, 25520 }, + { 0x6B98, 25525 }, + { 0x6B96, 25530 }, + { 0x0674, 25535 }, + { 0x0676, 25539 }, + { 0x0678, 25544 }, + { 0x0675, 25549 }, + { 0x062C, 25554 }, + { 0x6E9E, 25557 }, + { 0x6EA0, 25562 }, + { 0x6E9F, 25567 }, + { 0x6E9D, 25572 }, + { 0x062E, 25577 }, + { 0x6EA6, 25580 }, + { 0x6EA8, 25585 }, + { 0x6EA7, 25590 }, + { 0x6EA5, 25595 }, + { 0x0645, 25600 }, + { 0x0765, 25603 }, + { 0x0766, 25609 }, + { 0x6EE2, 25615 }, + { 0x6EE4, 25620 }, + { 0x6EE3, 25625 }, + { 0x6EE1, 25630 }, + { 0x0646, 25635 }, + { 0x06B9, 25638 }, + { 0x0767, 25644 }, + { 0x06BC, 25651 }, + { 0x0769, 25656 }, + { 0x0768, 25662 }, + { 0x06BD, 25668 }, + { 0x6EE6, 25675 }, + { 0x06BA, 25680 }, + { 0x6B9F, 25684 }, + { 0x6B9E, 25690 }, + { 0x6EE8, 25696 }, + { 0x6EE7, 25701 }, + { 0x6EE5, 25706 }, + { 0x0683, 25711 }, + { 0x6B77, 25714 }, + { 0x6B79, 25719 }, + { 0x6B78, 25724 }, + { 0x6B76, 25729 }, + { 0x0691, 25734 }, + { 0x6B8D, 25737 }, + { 0x6B8C, 25742 }, + { 0x0633, 25747 }, + { 0x069A, 25750 }, + { 0x076D, 25759 }, + { 0x075C, 25767 }, + { 0x0770, 25774 }, + { 0x069B, 25785 }, + { 0x069C, 25792 }, + { 0x077D, 25803 }, + { 0x077E, 25812 }, + { 0x6EB2, 25818 }, + { 0x6EB4, 25823 }, + { 0x6EB3, 25828 }, + { 0x6EB1, 25833 }, + { 0x0630, 25838 }, + { 0x6EAC, 25841 }, + { 0x6EAB, 25846 }, + { 0x062B, 25851 }, + { 0x6E9A, 25854 }, + { 0x6E9C, 25859 }, + { 0x6E9B, 25864 }, + { 0x6E99, 25869 }, + { 0x0679, 25874 }, + { 0x6B67, 25877 }, + { 0x6B69, 25882 }, + { 0x6B68, 25887 }, + { 0x6B66, 25892 }, + { 0x0632, 25897 }, + { 0x6EB0, 25900 }, + { 0x6EAF, 25905 }, + { 0x0680, 25910 }, + { 0x6B5B, 25913 }, + { 0x6B5D, 25918 }, + { 0x6B5C, 25923 }, + { 0x6B5A, 25928 }, + { 0x068C, 25933 }, + { 0x6B85, 25936 }, + { 0x6B84, 25941 }, + { 0x06CC, 25946 }, + { 0x063E, 25950 }, + { 0x063F, 25958 }, + { 0x0775, 25966 }, + { 0x0777, 25976 }, + { 0x0776, 25986 }, + { 0x063D, 25996 }, + { 0x6BFD, 26003 }, + { 0x6BFF, 26009 }, + { 0x6BFE, 26015 }, + { 0x6BFC, 26021 }, + { 0x063A, 26027 }, + { 0x06FC, 26030 }, + { 0x6ECE, 26036 }, + { 0x6ED0, 26041 }, + { 0x6ECF, 26046 }, + { 0x6ECD, 26051 }, + { 0x0621, 26056 }, + { 0x6E80, 26059 }, + { 0x06A9, 26064 }, + { 0x0762, 26067 }, + { 0x063B, 26073 }, + { 0x0763, 26080 }, + { 0x063C, 26087 }, + { 0x0764, 26094 }, + { 0x6B8F, 26103 }, + { 0x6B91, 26108 }, + { 0x6B90, 26113 }, + { 0x6B8E, 26118 }, + { 0x06B1, 26123 }, + { 0x6B9B, 26126 }, + { 0x6B9D, 26131 }, + { 0x6B9C, 26136 }, + { 0x6B9A, 26141 }, + { 0x06A6, 26146 }, + { 0x6B6F, 26149 }, + { 0x6B71, 26154 }, + { 0x6B70, 26159 }, + { 0x6B6E, 26164 }, + { 0x06BB, 26169 }, + { 0x6BA1, 26172 }, + { 0x6BA3, 26177 }, + { 0x6BA2, 26182 }, + { 0x6BA0, 26187 }, + { 0x0634, 26192 }, + { 0x06FA, 26195 }, + { 0x6EB6, 26201 }, + { 0x6EB8, 26206 }, + { 0x6EB7, 26211 }, + { 0x6EB5, 26216 }, + { 0x06AA, 26221 }, + { 0x0686, 26225 }, + { 0x06BF, 26228 }, + { 0x6B7B, 26234 }, + { 0x6B7D, 26239 }, + { 0x6B7C, 26244 }, + { 0x6B7A, 26249 }, + { 0x067F, 26254 }, + { 0x6B63, 26257 }, + { 0x6B65, 26262 }, + { 0x6B64, 26267 }, + { 0x6B62, 26272 }, + { 0x068D, 26277 }, + { 0x6B83, 26280 }, + { 0x6B82, 26285 }, + { 0x067A, 26290 }, + { 0x6B5F, 26293 }, + { 0x6B61, 26298 }, + { 0x6B60, 26303 }, + { 0x6B5E, 26308 }, + { 0x6BE9, 26313 }, + { 0x6BE8, 26322 }, + { 0x066E, 26331 }, + { 0x06A1, 26335 }, + { 0x066F, 26339 }, + { 0x06C5, 26343 }, + { 0x6BE1, 26347 }, + { 0x6BE0, 26353 }, + { 0x06C9, 26359 }, + { 0x6BE3, 26363 }, + { 0x6BE2, 26369 }, + { 0x0687, 26375 }, + { 0x6B7F, 26378 }, + { 0x6B81, 26383 }, + { 0x6B80, 26388 }, + { 0x6B7E, 26393 }, + { 0x0670, 26398 }, + { 0x0653, 26402 }, + { 0x0600, 26405 }, + { 0x060E, 26408 }, + { 0x0651, 26412 }, + { 0x6E7D, 26414 }, + { 0x6E7C, 26418 }, + { 0x061E, 26422 }, + { 0x066B, 26427 }, + { 0x066A, 26430 }, + { 0x06EC, 26433 }, + { 0x0640, 26440 }, + { 0x6E71, 26442 }, + { 0x064C, 26447 }, + { 0x6E72, 26449 }, + { 0x064B, 26453 }, + { 0x6E70, 26455 }, + { 0x0602, 26459 }, + { 0x0657, 26462 }, + { 0x064D, 26465 }, + { 0x6E74, 26467 }, + { 0x6D14, 26471 }, + { 0x6CF8, 26478 }, + { 0x6D13, 26485 }, + { 0x6CF7, 26493 }, + { 0x6D75, 26501 }, + { 0x6DC4, 26510 }, + { 0x6CBA, 26519 }, + { 0x6C29, 26526 }, + { 0x6DB6, 26533 }, + { 0x6D78, 26542 }, + { 0x6D76, 26552 }, + { 0x6D77, 26561 }, + { 0x6CBB, 26570 }, + { 0x6C2A, 26577 }, + { 0x6DC2, 26584 }, + { 0x6C9D, 26593 }, + { 0x6C06, 26600 }, + { 0x6CE2, 26607 }, + { 0x6CA0, 26614 }, + { 0x6C6A, 26621 }, + { 0x6C6F, 26628 }, + { 0x6C0A, 26635 }, + { 0x6C6E, 26642 }, + { 0x6C09, 26650 }, + { 0x6C9C, 26658 }, + { 0x6C05, 26665 }, + { 0x6D9E, 26672 }, + { 0x6C9E, 26681 }, + { 0x6C07, 26688 }, + { 0x6C6C, 26695 }, + { 0x6CE1, 26702 }, + { 0x6C9F, 26709 }, + { 0x6C08, 26716 }, + { 0x6C6D, 26723 }, + { 0x6C6B, 26730 }, + { 0x6DAB, 26737 }, + { 0x6D6E, 26746 }, + { 0x6CB5, 26756 }, + { 0x6C23, 26763 }, + { 0x6D2C, 26770 }, + { 0x6D10, 26777 }, + { 0x6D24, 26784 }, + { 0x6D08, 26791 }, + { 0x6D23, 26798 }, + { 0x6D07, 26806 }, + { 0x6CB4, 26814 }, + { 0x6C22, 26821 }, + { 0x6D6F, 26828 }, + { 0x6D70, 26837 }, + { 0x6CB6, 26846 }, + { 0x6C24, 26853 }, + { 0x6CB7, 26860 }, + { 0x6C25, 26867 }, + { 0x6CBF, 26874 }, + { 0x6C2E, 26881 }, + { 0x6C7D, 26888 }, + { 0x6C32, 26895 }, + { 0x6C7C, 26902 }, + { 0x6C31, 26910 }, + { 0x6CBE, 26918 }, + { 0x6C2D, 26925 }, + { 0x6D7C, 26932 }, + { 0x6D7D, 26941 }, + { 0x6CC0, 26950 }, + { 0x6C2F, 26957 }, + { 0x6DC1, 26964 }, + { 0x6CC1, 26973 }, + { 0x6C30, 26980 }, + { 0x6D1C, 26987 }, + { 0x6D00, 26994 }, + { 0x6D1B, 27001 }, + { 0x6CFF, 27009 }, + { 0x6DBF, 27017 }, + { 0x6CA9, 27026 }, + { 0x6C17, 27033 }, + { 0x6D5A, 27040 }, + { 0x6D5B, 27049 }, + { 0x6CAA, 27059 }, + { 0x6C18, 27066 }, + { 0x6C54, 27073 }, + { 0x6C53, 27080 }, + { 0x6CD7, 27088 }, + { 0x6C51, 27095 }, + { 0x6D93, 27102 }, + { 0x6D94, 27111 }, + { 0x6CD8, 27120 }, + { 0x6C52, 27127 }, + { 0x6CD9, 27134 }, + { 0x6CC5, 27142 }, + { 0x6C39, 27149 }, + { 0x6C81, 27156 }, + { 0x6CEB, 27163 }, + { 0x6CC7, 27170 }, + { 0x6C3B, 27177 }, + { 0x6C84, 27184 }, + { 0x6C3E, 27191 }, + { 0x6C80, 27198 }, + { 0x6C83, 27205 }, + { 0x6C3D, 27213 }, + { 0x6C37, 27221 }, + { 0x6CC4, 27228 }, + { 0x6C38, 27235 }, + { 0x6CC6, 27242 }, + { 0x6C3A, 27249 }, + { 0x6DB7, 27256 }, + { 0x6DBB, 27265 }, + { 0x6DC3, 27274 }, + { 0x6C82, 27283 }, + { 0x6CEC, 27290 }, + { 0x6CC8, 27297 }, + { 0x6C3C, 27304 }, + { 0x6D81, 27311 }, + { 0x6D82, 27320 }, + { 0x6D80, 27330 }, + { 0x6DB5, 27339 }, + { 0x6CCA, 27348 }, + { 0x6C40, 27355 }, + { 0x6CCD, 27362 }, + { 0x6C87, 27369 }, + { 0x6C44, 27376 }, + { 0x6EF8, 27383 }, + { 0x6EF7, 27393 }, + { 0x6EFA, 27403 }, + { 0x6EF9, 27413 }, + { 0x6EF6, 27423 }, + { 0x6EF5, 27433 }, + { 0x6EFC, 27443 }, + { 0x6C86, 27450 }, + { 0x6C43, 27458 }, + { 0x6EFB, 27466 }, + { 0x6DAC, 27473 }, + { 0x6D84, 27482 }, + { 0x6D83, 27491 }, + { 0x6DBC, 27500 }, + { 0x6DBA, 27509 }, + { 0x6CC9, 27518 }, + { 0x6C3F, 27525 }, + { 0x6D85, 27532 }, + { 0x6D86, 27541 }, + { 0x6CCB, 27550 }, + { 0x6C41, 27557 }, + { 0x6D87, 27564 }, + { 0x6D88, 27573 }, + { 0x6DAD, 27582 }, + { 0x6C85, 27591 }, + { 0x6CED, 27598 }, + { 0x6CCC, 27605 }, + { 0x6C42, 27612 }, + { 0x6CC2, 27619 }, + { 0x6C33, 27626 }, + { 0x6C7F, 27633 }, + { 0x6C36, 27640 }, + { 0x6C7E, 27647 }, + { 0x6C35, 27655 }, + { 0x6D7E, 27663 }, + { 0x6DB4, 27672 }, + { 0x6DB2, 27681 }, + { 0x6D7F, 27690 }, + { 0x6CC3, 27699 }, + { 0x6C34, 27706 }, + { 0x6C5C, 27713 }, + { 0x6D64, 27721 }, + { 0x6D65, 27730 }, + { 0x6DA9, 27739 }, + { 0x6CB1, 27748 }, + { 0x6C20, 27755 }, + { 0x6D2B, 27762 }, + { 0x6D0F, 27769 }, + { 0x6D22, 27776 }, + { 0x6D06, 27783 }, + { 0x6D21, 27790 }, + { 0x6D05, 27798 }, + { 0x6CB2, 27806 }, + { 0x6D66, 27813 }, + { 0x6DC5, 27822 }, + { 0x6CB3, 27831 }, + { 0x6C21, 27838 }, + { 0x6CB8, 27845 }, + { 0x6C26, 27852 }, + { 0x6D12, 27859 }, + { 0x6CF6, 27866 }, + { 0x6D11, 27873 }, + { 0x6CF5, 27881 }, + { 0x6D71, 27889 }, + { 0x6D72, 27898 }, + { 0x6D74, 27907 }, + { 0x6D73, 27916 }, + { 0x6D3A, 27925 }, + { 0x6D33, 27932 }, + { 0x6C27, 27939 }, + { 0x6D51, 27946 }, + { 0x6D52, 27955 }, + { 0x6D53, 27964 }, + { 0x6CA2, 27973 }, + { 0x6C0C, 27980 }, + { 0x6CE4, 27987 }, + { 0x6CA5, 27994 }, + { 0x6C70, 28001 }, + { 0x6C75, 28008 }, + { 0x6C10, 28015 }, + { 0x6C74, 28022 }, + { 0x6C0F, 28030 }, + { 0x6D9F, 28038 }, + { 0x6DA0, 28047 }, + { 0x6D50, 28057 }, + { 0x6CA1, 28066 }, + { 0x6C0B, 28073 }, + { 0x6DA1, 28080 }, + { 0x6DA2, 28089 }, + { 0x6D54, 28099 }, + { 0x6CA3, 28108 }, + { 0x6C0D, 28115 }, + { 0x6D56, 28122 }, + { 0x6DA3, 28131 }, + { 0x6DA4, 28140 }, + { 0x6D55, 28150 }, + { 0x6D57, 28159 }, + { 0x6C72, 28168 }, + { 0x6CE3, 28175 }, + { 0x6CA4, 28182 }, + { 0x6C0E, 28189 }, + { 0x6C73, 28196 }, + { 0x6C71, 28203 }, + { 0x6DAE, 28210 }, + { 0x6CDB, 28219 }, + { 0x6C56, 28226 }, + { 0x6CF1, 28233 }, + { 0x6CDE, 28240 }, + { 0x6C91, 28247 }, + { 0x6C96, 28254 }, + { 0x6C5A, 28261 }, + { 0x6C95, 28268 }, + { 0x6C59, 28276 }, + { 0x6DAF, 28284 }, + { 0x6CDA, 28293 }, + { 0x6C55, 28300 }, + { 0x6CDC, 28307 }, + { 0x6C57, 28314 }, + { 0x6DB0, 28321 }, + { 0x6D9C, 28330 }, + { 0x6D9D, 28339 }, + { 0x6C93, 28348 }, + { 0x6CF0, 28355 }, + { 0x6CDD, 28362 }, + { 0x6C58, 28369 }, + { 0x6C94, 28376 }, + { 0x6C92, 28383 }, + { 0x6BF7, 28390 }, + { 0x6BF8, 28400 }, + { 0x6BF6, 28410 }, + { 0x6BF1, 28420 }, + { 0x6BF0, 28430 }, + { 0x6BED, 28440 }, + { 0x6BEC, 28450 }, + { 0x6BF3, 28460 }, + { 0x6BF2, 28470 }, + { 0x6BF5, 28480 }, + { 0x6BF4, 28490 }, + { 0x6C98, 28500 }, + { 0x6C01, 28510 }, + { 0x6CE0, 28520 }, + { 0x6C9B, 28530 }, + { 0x6C64, 28540 }, + { 0x6BEF, 28550 }, + { 0x6BEE, 28560 }, + { 0x6C69, 28570 }, + { 0x6C04, 28580 }, + { 0x6BEB, 28590 }, + { 0x6C68, 28600 }, + { 0x6C03, 28611 }, + { 0x6BEA, 28622 }, + { 0x6C97, 28632 }, + { 0x6C00, 28642 }, + { 0x6C99, 28652 }, + { 0x6C66, 28662 }, + { 0x6CDF, 28672 }, + { 0x6C9A, 28682 }, + { 0x6C02, 28692 }, + { 0x6C67, 28702 }, + { 0x6C65, 28712 }, + { 0x6D3B, 28722 }, + { 0x6CB9, 28729 }, + { 0x6C28, 28736 }, + { 0x6D3C, 28743 }, + { 0x6D3D, 28750 }, + { 0x6C90, 28757 }, + { 0x6C5D, 28766 }, + { 0x6DBE, 28775 }, + { 0x6DA6, 28784 }, + { 0x6CA7, 28794 }, + { 0x6C15, 28801 }, + { 0x6D1E, 28808 }, + { 0x6D02, 28815 }, + { 0x6D1D, 28822 }, + { 0x6D01, 28830 }, + { 0x6D58, 28838 }, + { 0x6D59, 28847 }, + { 0x6DA5, 28856 }, + { 0x6DA7, 28865 }, + { 0x6CA8, 28875 }, + { 0x6C16, 28882 }, + { 0x6C1A, 28889 }, + { 0x6D20, 28896 }, + { 0x6D04, 28903 }, + { 0x6D1F, 28910 }, + { 0x6D03, 28918 }, + { 0x6CAB, 28926 }, + { 0x6C19, 28933 }, + { 0x6CAC, 28940 }, + { 0x6C1B, 28947 }, + { 0x6D8B, 28954 }, + { 0x6D89, 28963 }, + { 0x6D8A, 28972 }, + { 0x6CCF, 28981 }, + { 0x6C46, 28988 }, + { 0x6C4A, 28995 }, + { 0x6C88, 29002 }, + { 0x6C49, 29009 }, + { 0x6D8C, 29017 }, + { 0x6DC0, 29026 }, + { 0x6D92, 29035 }, + { 0x6D8D, 29044 }, + { 0x6CCE, 29053 }, + { 0x6C45, 29060 }, + { 0x6DB9, 29067 }, + { 0x6D8E, 29076 }, + { 0x6D8F, 29085 }, + { 0x6CD0, 29094 }, + { 0x6C47, 29101 }, + { 0x6DB1, 29108 }, + { 0x6C89, 29117 }, + { 0x6CD1, 29124 }, + { 0x6C48, 29131 }, + { 0x6DB3, 29138 }, + { 0x6D96, 29147 }, + { 0x6D95, 29157 }, + { 0x6CD3, 29166 }, + { 0x6C4C, 29173 }, + { 0x6CEF, 29180 }, + { 0x6CD6, 29187 }, + { 0x6C8A, 29194 }, + { 0x6C8F, 29201 }, + { 0x6C50, 29208 }, + { 0x6C8E, 29215 }, + { 0x6C4F, 29223 }, + { 0x6DBD, 29231 }, + { 0x6DB8, 29240 }, + { 0x6DC7, 29249 }, + { 0x6D99, 29258 }, + { 0x6D97, 29268 }, + { 0x6D98, 29277 }, + { 0x6CD2, 29286 }, + { 0x6C4B, 29293 }, + { 0x6CD4, 29300 }, + { 0x6C4D, 29307 }, + { 0x6D9A, 29314 }, + { 0x6D9B, 29323 }, + { 0x6C8C, 29333 }, + { 0x6CEE, 29340 }, + { 0x6CD5, 29347 }, + { 0x6C4E, 29354 }, + { 0x6C8D, 29361 }, + { 0x6C8B, 29368 }, + { 0x6DF1, 29375 }, + { 0x6D5C, 29385 }, + { 0x6D35, 29394 }, + { 0x6CAE, 29401 }, + { 0x6C1D, 29408 }, + { 0x6CE8, 29415 }, + { 0x6D31, 29422 }, + { 0x6D2A, 29429 }, + { 0x6D0E, 29436 }, + { 0x6D18, 29443 }, + { 0x6CFC, 29450 }, + { 0x6D17, 29457 }, + { 0x6CFB, 29465 }, + { 0x6D5D, 29473 }, + { 0x6D5E, 29482 }, + { 0x6D34, 29492 }, + { 0x6CAD, 29499 }, + { 0x6C1C, 29506 }, + { 0x6DC6, 29513 }, + { 0x6DA8, 29522 }, + { 0x6D36, 29532 }, + { 0x6CAF, 29539 }, + { 0x6C1E, 29546 }, + { 0x6D5F, 29553 }, + { 0x6D60, 29562 }, + { 0x6D61, 29571 }, + { 0x6D62, 29580 }, + { 0x6D63, 29589 }, + { 0x6CE7, 29598 }, + { 0x6CB0, 29605 }, + { 0x6C1F, 29612 }, + { 0x6C5B, 29619 }, + { 0x6CE6, 29627 }, + { 0x6C76, 29634 }, + { 0x6C7B, 29641 }, + { 0x6C14, 29648 }, + { 0x6C7A, 29655 }, + { 0x6C13, 29663 }, + { 0x6C11, 29671 }, + { 0x6C78, 29678 }, + { 0x6CE5, 29685 }, + { 0x6CA6, 29692 }, + { 0x6C12, 29699 }, + { 0x6C79, 29706 }, + { 0x6C77, 29713 }, + { 0x6DF3, 29720 }, + { 0x6DF2, 29725 }, + { 0x6D16, 29730 }, + { 0x6CFA, 29737 }, + { 0x6D15, 29744 }, + { 0x6CF9, 29752 }, + { 0x6CBC, 29760 }, + { 0x6C2B, 29767 }, + { 0x6D7A, 29774 }, + { 0x6D7B, 29783 }, + { 0x6D79, 29793 }, + { 0x6CBD, 29802 }, + { 0x6C2C, 29809 }, + { 0x6DF5, 29816 }, + { 0x6DF0, 29821 }, + { 0x6DF9, 29831 }, + { 0x6DAA, 29836 }, + { 0x6D67, 29845 }, + { 0x6D68, 29854 }, + { 0x6D26, 29863 }, + { 0x6D38, 29870 }, + { 0x6D2E, 29877 }, + { 0x6D0A, 29884 }, + { 0x6CEA, 29891 }, + { 0x6D32, 29898 }, + { 0x6D29, 29905 }, + { 0x6D0D, 29912 }, + { 0x6D1A, 29919 }, + { 0x6CFE, 29926 }, + { 0x6D19, 29933 }, + { 0x6CFD, 29941 }, + { 0x6D69, 29949 }, + { 0x6D25, 29958 }, + { 0x6D37, 29965 }, + { 0x6D2D, 29972 }, + { 0x6D09, 29979 }, + { 0x6D27, 29986 }, + { 0x6D39, 29993 }, + { 0x6D2F, 30000 }, + { 0x6D0B, 30007 }, + { 0x6D6A, 30014 }, + { 0x6D6B, 30023 }, + { 0x6D6C, 30032 }, + { 0x6D6D, 30041 }, + { 0x6D28, 30050 }, + { 0x6CE9, 30057 }, + { 0x6D30, 30064 }, + { 0x6D0C, 30071 }, + { 0x6DF7, 30078 }, + { 0x6DF6, 30083 }, + { 0x6CF3, 30088 }, + { 0x6C61, 30095 }, + { 0x6CF2, 30102 }, + { 0x6C60, 30109 }, + { 0x6CF4, 30116 }, + { 0x6C62, 30123 }, + { 0x6C5E, 30130 }, + { 0x6C5F, 30137 }, + { 0x6C63, 30144 }, + { 0x6BFA, 30152 }, + { 0x6BFB, 30165 }, + { 0x6BF9, 30178 }, + { 0x6DF4, 30191 }, + { 0x6DF8, 30196 }, + { 0x6DFD, 30201 }, + { 0x6DFA, 30206 }, + { 0x6DFB, 30211 }, + { 0x061F, 30214 }, + { 0x065D, 30217 }, + { 0x0659, 30220 }, + { 0x061B, 30222 }, + { 0x0656, 30224 }, + { 0x066C, 30227 }, + { 0x2717, 30230 }, + { 0x2610, 30232 }, + { 0x2612, 30234 }, + { 0x2611, 30238 }, + { 0x266B, 30242 }, + { 0x266C, 30245 }, + { 0x293B, 30248 }, + { 0x2321, 30252 }, + { 0x230D, 30255 }, + { 0x2E24, 30258 }, + { 0x231E, 30262 }, + { 0x23DF, 30265 }, + { 0x230C, 30268 }, + { 0x2E25, 30271 }, + { 0x231F, 30275 }, + { 0x23B5, 30278 }, + { 0x23B6, 30281 }, + { 0x23E1, 30288 }, + { 0x23DD, 30292 }, + { 0x22C8, 30294 }, + { 0x29D1, 30295 }, + { 0x29D2, 30300 }, + { 0x00A6, 30305 }, + { 0x238B, 30307 }, + { 0x2022, 30312 }, + { 0x2219, 30313 }, + { 0xC07F, 30315 }, + { 0x264B, 30317 }, + { 0x72A0, 30318 }, + { 0x72A9, 30321 }, + { 0x72A2, 30324 }, + { 0x72BA, 30327 }, + { 0x72C0, 30330 }, + { 0x72B9, 30333 }, + { 0x72BC, 30336 }, + { 0x72A3, 30339 }, + { 0x72AA, 30342 }, + { 0x72B5, 30345 }, + { 0x72AB, 30348 }, + { 0x72B7, 30351 }, + { 0x72A8, 30354 }, + { 0x72A5, 30357 }, + { 0x72B0, 30360 }, + { 0x72AD, 30363 }, + { 0x72B2, 30366 }, + { 0x72B4, 30369 }, + { 0x72A7, 30372 }, + { 0x72AC, 30375 }, + { 0x72CF, 30378 }, + { 0x72C1, 30381 }, + { 0x72C5, 30384 }, + { 0x72BD, 30387 }, + { 0x72A6, 30390 }, + { 0x72CA, 30393 }, + { 0x72BE, 30396 }, + { 0x72C4, 30399 }, + { 0x72B3, 30402 }, + { 0x72A1, 30405 }, + { 0x72C9, 30408 }, + { 0x72AE, 30411 }, + { 0x72B8, 30414 }, + { 0x72C2, 30417 }, + { 0x72C7, 30420 }, + { 0x72BF, 30423 }, + { 0x72CE, 30426 }, + { 0x72CB, 30429 }, + { 0x72CC, 30432 }, + { 0x72CD, 30435 }, + { 0x72AF, 30438 }, + { 0x72C3, 30441 }, + { 0x72B6, 30444 }, + { 0x72A4, 30447 }, + { 0x72B1, 30450 }, + { 0x72C6, 30453 }, + { 0x72C8, 30456 }, + { 0x72D0, 30459 }, + { 0x72BB, 30462 }, + { 0x2104, 30465 }, + { 0x26B7, 30468 }, + { 0x25D5, 30469 }, + { 0x29C3, 30477 }, + { 0x25D0, 30485 }, + { 0x25D2, 30490 }, + { 0x25D1, 30495 }, + { 0x29C2, 30500 }, + { 0x25D3, 30507 }, + { 0x25D4, 30512 }, + { 0x25CD, 30518 }, + { 0x29B5, 30522 }, + { 0x29BB, 30526 }, + { 0x29BA, 30530 }, + { 0x2A4C, 30542 }, + { 0x2A50, 30546 }, + { 0x2ACF, 30553 }, + { 0x2AD1, 30555 }, + { 0x2AD0, 30560 }, + { 0x2AD2, 30562 }, + { 0x2A4D, 30567 }, + { 0x26B0, 30571 }, + { 0x2CF9, 30572 }, + { 0x2CFC, 30577 }, + { 0x2CFA, 30582 }, + { 0x2CFB, 30588 }, + { 0x2CFE, 30594 }, + { 0x2C9F, 30597 }, + { 0x2CAB, 30601 }, + { 0x2C99, 30605 }, + { 0x2C9B, 30609 }, + { 0x2CA1, 30613 }, + { 0x2CA3, 30617 }, + { 0x2CA9, 30621 }, + { 0x03EF, 30625 }, + { 0x2C89, 30629 }, + { 0x03E5, 30633 }, + { 0x2CAD, 30637 }, + { 0x2C9D, 30641 }, + { 0x2CCF, 30645 }, + { 0x2CB5, 30651 }, + { 0x2CD9, 30657 }, + { 0x2CC7, 30663 }, + { 0x2CD5, 30669 }, + { 0x2CD3, 30675 }, + { 0x2CBF, 30681 }, + { 0x2CCD, 30687 }, + { 0x2CC5, 30693 }, + { 0x2CDB, 30699 }, + { 0x2CD7, 30705 }, + { 0x2CDF, 30711 }, + { 0x2CE1, 30717 }, + { 0x2CE3, 30723 }, + { 0x2CDD, 30729 }, + { 0x2CB1, 30735 }, + { 0x2CAF, 30739 }, + { 0x2C8B, 30743 }, + { 0x2CA7, 30747 }, + { 0x2C81, 30751 }, + { 0x2C8F, 30755 }, + { 0x03E9, 30759 }, + { 0x2C95, 30763 }, + { 0x03E7, 30767 }, + { 0x03E3, 30771 }, + { 0x2CA5, 30775 }, + { 0x2C83, 30779 }, + { 0x2C8D, 30783 }, + { 0x2C87, 30787 }, + { 0x2C85, 30791 }, + { 0x2C93, 30795 }, + { 0x2C97, 30799 }, + { 0x2CC1, 30803 }, + { 0x03ED, 30807 }, + { 0x03EB, 30811 }, + { 0x2C91, 30815 }, + { 0x2CC3, 30819 }, + { 0x2CC9, 30824 }, + { 0x2CD1, 30829 }, + { 0x2CBB, 30834 }, + { 0x2CB3, 30839 }, + { 0x2CCB, 30844 }, + { 0x2CB9, 30849 }, + { 0x2CBD, 30854 }, + { 0x2CB7, 30859 }, + { 0x2CE5, 30864 }, + { 0x2CE6, 30868 }, + { 0x2CE4, 30872 }, + { 0x2CE9, 30875 }, + { 0x2CE8, 30879 }, + { 0x2CEA, 30883 }, + { 0x2CE7, 30887 }, + { 0x2C9E, 30890 }, + { 0x2CAA, 30894 }, + { 0x2C98, 30898 }, + { 0x2C9A, 30902 }, + { 0x2CA0, 30906 }, + { 0x2CA2, 30910 }, + { 0x2CA8, 30914 }, + { 0x03EE, 30918 }, + { 0x2C88, 30922 }, + { 0x03E4, 30926 }, + { 0x2CAC, 30930 }, + { 0x2C9C, 30934 }, + { 0x2CCE, 30938 }, + { 0x2CB4, 30944 }, + { 0x2CD8, 30950 }, + { 0x2CC6, 30956 }, + { 0x2CD4, 30962 }, + { 0x2CD2, 30968 }, + { 0x2CBE, 30974 }, + { 0x2CCC, 30980 }, + { 0x2CC4, 30986 }, + { 0x2CDA, 30992 }, + { 0x2CD6, 30998 }, + { 0x2CDE, 31004 }, + { 0x2CE0, 31010 }, + { 0x2CE2, 31016 }, + { 0x2CDC, 31022 }, + { 0x2CB0, 31028 }, + { 0x2CAE, 31032 }, + { 0x2C8A, 31036 }, + { 0x2CA6, 31040 }, + { 0x2C80, 31044 }, + { 0x2C8E, 31048 }, + { 0x03E8, 31052 }, + { 0x2C94, 31056 }, + { 0x03E6, 31060 }, + { 0x03E2, 31064 }, + { 0x2CA4, 31068 }, + { 0x2C82, 31072 }, + { 0x2C8C, 31076 }, + { 0x2C86, 31080 }, + { 0x2C84, 31084 }, + { 0x2C92, 31088 }, + { 0x2C96, 31092 }, + { 0x2CC0, 31096 }, + { 0x03EC, 31100 }, + { 0x03EA, 31104 }, + { 0x2C90, 31108 }, + { 0x2CC2, 31112 }, + { 0x2CC8, 31117 }, + { 0x2CD0, 31122 }, + { 0x2CBA, 31127 }, + { 0x2CB2, 31132 }, + { 0x2CCA, 31137 }, + { 0x2CB8, 31142 }, + { 0x2CBC, 31147 }, + { 0x2CB6, 31152 }, + { 0x2CFD, 31157 }, + { 0x2CFF, 31161 }, + { 0x2761, 31164 }, + { 0x2020, 31169 }, + { 0x6E4D, 31170 }, + { 0x6E49, 31173 }, + { 0x279F, 31175 }, + { 0x00B0, 31179 }, + { 0x2103, 31181 }, + { 0x2109, 31183 }, + { 0x9305, 31185 }, + { 0x9302, 31188 }, + { 0x268D, 31192 }, + { 0x268E, 31196 }, + { 0x9304, 31200 }, + { 0x9303, 31204 }, + { 0x268F, 31208 }, + { 0x268C, 31212 }, + { 0x9301, 31216 }, + { 0x2393, 31220 }, + { 0x0024, 31225 }, + { 0xA062, 31227 }, + { 0xA030, 31231 }, + { 0xA063, 31235 }, + { 0xA064, 31238 }, + { 0xA065, 31241 }, + { 0xA066, 31244 }, + { 0xA067, 31247 }, + { 0xA068, 31250 }, + { 0xA069, 31253 }, + { 0xA06A, 31256 }, + { 0xA06B, 31259 }, + { 0xA06C, 31262 }, + { 0xA06D, 31265 }, + { 0xA06E, 31268 }, + { 0xA06F, 31271 }, + { 0xA070, 31274 }, + { 0xA071, 31277 }, + { 0xA072, 31280 }, + { 0xA073, 31283 }, + { 0xA074, 31286 }, + { 0xA075, 31289 }, + { 0xA076, 31292 }, + { 0xA077, 31295 }, + { 0xA078, 31298 }, + { 0xA079, 31301 }, + { 0xA07A, 31304 }, + { 0xA07B, 31307 }, + { 0xA07C, 31310 }, + { 0xA07D, 31313 }, + { 0xA07E, 31316 }, + { 0xA07F, 31319 }, + { 0xA080, 31322 }, + { 0xA081, 31325 }, + { 0xA082, 31328 }, + { 0xA083, 31331 }, + { 0xA084, 31334 }, + { 0xA085, 31337 }, + { 0xA086, 31340 }, + { 0xA087, 31343 }, + { 0xA088, 31346 }, + { 0xA089, 31349 }, + { 0xA08A, 31352 }, + { 0xA08B, 31355 }, + { 0xA08C, 31358 }, + { 0xA08D, 31361 }, + { 0xA08E, 31364 }, + { 0xA08F, 31367 }, + { 0xA090, 31370 }, + { 0xA091, 31373 }, + { 0xA092, 31376 }, + { 0xA093, 31379 }, + { 0xA031, 31382 }, + { 0xA032, 31385 }, + { 0xA033, 31388 }, + { 0xA034, 31391 }, + { 0xA035, 31394 }, + { 0xA036, 31397 }, + { 0xA037, 31400 }, + { 0xA038, 31403 }, + { 0xA039, 31406 }, + { 0xA03A, 31409 }, + { 0xA03B, 31412 }, + { 0xA03C, 31415 }, + { 0xA03D, 31418 }, + { 0xA03E, 31421 }, + { 0xA03F, 31424 }, + { 0xA040, 31427 }, + { 0xA041, 31430 }, + { 0xA042, 31433 }, + { 0xA043, 31436 }, + { 0xA044, 31439 }, + { 0xA045, 31442 }, + { 0xA046, 31445 }, + { 0xA047, 31448 }, + { 0xA048, 31451 }, + { 0xA049, 31454 }, + { 0xA04A, 31457 }, + { 0xA04B, 31460 }, + { 0xA04C, 31463 }, + { 0xA04D, 31466 }, + { 0xA04E, 31469 }, + { 0xA04F, 31472 }, + { 0xA050, 31475 }, + { 0xA051, 31478 }, + { 0xA052, 31481 }, + { 0xA053, 31484 }, + { 0xA054, 31487 }, + { 0xA055, 31490 }, + { 0xA056, 31493 }, + { 0xA057, 31496 }, + { 0xA058, 31499 }, + { 0xA059, 31502 }, + { 0xA05A, 31505 }, + { 0xA05B, 31508 }, + { 0xA05C, 31511 }, + { 0xA05D, 31514 }, + { 0xA05E, 31517 }, + { 0xA05F, 31520 }, + { 0xA060, 31523 }, + { 0xA061, 31526 }, + { 0x205C, 31529 }, + { 0x2999, 31531 }, + { 0x25CC, 31533 }, + { 0x2E13, 31535 }, + { 0x2B1A, 31537 }, + { 0x2E08, 31539 }, + { 0x2E16, 31542 }, + { 0x2AEB, 31545 }, + { 0x2017, 31548 }, + { 0x2AEA, 31551 }, + { 0x2995, 31554 }, + { 0x29FA, 31559 }, + { 0x6E4C, 31561 }, + { 0x02DD, 31564 }, + { 0x2A74, 31567 }, + { 0x201E, 31570 }, + { 0x2033, 31574 }, + { 0x301E, 31576 }, + { 0x2996, 31580 }, + { 0x22D3, 31585 }, + { 0x2021, 31587 }, + { 0x2AA1, 31589 }, + { 0x2AA3, 31592 }, + { 0x2AA2, 31597 }, + { 0x2A4F, 31600 }, + { 0x2A4E, 31603 }, + { 0x2AEC, 31606 }, + { 0x22D0, 31610 }, + { 0x24F5, 31612 }, + { 0x24FA, 31616 }, + { 0x24F6, 31620 }, + { 0x24F9, 31624 }, + { 0x24F8, 31628 }, + { 0x24FD, 31632 }, + { 0x24FC, 31636 }, + { 0x24FB, 31640 }, + { 0x24F7, 31644 }, + { 0x24FE, 31648 }, + { 0x2A54, 31652 }, + { 0x2A53, 31655 }, + { 0x2E17, 31658 }, + { 0x2AFD, 31661 }, + { 0x222C, 31664 }, + { 0x2ABB, 31666 }, + { 0x2047, 31668 }, + { 0x2ABC, 31671 }, + { 0x22D1, 31673 }, + { 0x2AE3, 31675 }, + { 0x2AE5, 31680 }, + { 0x22AB, 31686 }, + { 0x2016, 31692 }, + { 0x203C, 31695 }, + { 0x22D2, 31698 }, + { 0x201F, 31700 }, + { 0x266A, 31704 }, + { 0x003D, 31706 }, + { 0x29E3, 31708 }, + { 0x29E4, 31713 }, + { 0x2A66, 31721 }, + { 0x2A77, 31726 }, + { 0x2AAE, 31736 }, + { 0x2A71, 31741 }, + { 0x2A73, 31746 }, + { 0x2B40, 31751 }, + { 0x2971, 31756 }, + { 0x2A6E, 31761 }, + { 0x2255, 31764 }, + { 0x2239, 31766 }, + { 0x2640, 31767 }, + { 0x2012, 31769 }, + { 0x2007, 31771 }, + { 0x2A0D, 31773 }, + { 0x2766, 31776 }, + { 0x2698, 31778 }, + { 0x2055, 31779 }, + { 0x22A9, 31782 }, + { 0x2E10, 31783 }, + { 0x221C, 31785 }, + { 0x20A3, 31787 }, + { 0x264A, 31790 }, + { 0x20B0, 31791 }, + { 0x29E6, 31794 }, + { 0x7339, 31796 }, + { 0x733E, 31799 }, + { 0x7330, 31802 }, + { 0x7333, 31805 }, + { 0x7332, 31808 }, + { 0x7337, 31811 }, + { 0x7336, 31814 }, + { 0x734A, 31817 }, + { 0x733F, 31821 }, + { 0x7346, 31824 }, + { 0x7348, 31827 }, + { 0x7347, 31830 }, + { 0x733A, 31833 }, + { 0x733B, 31836 }, + { 0x733C, 31839 }, + { 0x7349, 31842 }, + { 0x7342, 31845 }, + { 0x7343, 31848 }, + { 0x7344, 31851 }, + { 0x7345, 31854 }, + { 0x7334, 31857 }, + { 0x733D, 31860 }, + { 0x7341, 31863 }, + { 0x7338, 31866 }, + { 0x7331, 31869 }, + { 0x7340, 31872 }, + { 0x7335, 31875 }, + { 0x2692, 31878 }, + { 0x262D, 31881 }, + { 0x302F, 31884 }, + { 0x3164, 31889 }, + { 0x314F, 31891 }, + { 0x3154, 31894 }, + { 0x3163, 31897 }, + { 0x3157, 31900 }, + { 0x315C, 31903 }, + { 0x3150, 31906 }, + { 0x3153, 31909 }, + { 0x3161, 31912 }, + { 0x315A, 31915 }, + { 0x3158, 31918 }, + { 0x315E, 31921 }, + { 0x315F, 31924 }, + { 0x3151, 31927 }, + { 0x3156, 31930 }, + { 0x3162, 31933 }, + { 0x315B, 31936 }, + { 0x3160, 31939 }, + { 0x3159, 31942 }, + { 0x315D, 31945 }, + { 0x3152, 31948 }, + { 0x3155, 31951 }, + { 0x3145, 31954 }, + { 0x3189, 31957 }, + { 0x318C, 31960 }, + { 0x318D, 31963 }, + { 0x3148, 31966 }, + { 0x314E, 31969 }, + { 0x3147, 31972 }, + { 0x3141, 31975 }, + { 0x3134, 31978 }, + { 0x3142, 31981 }, + { 0x3139, 31984 }, + { 0x3187, 31987 }, + { 0x318B, 31990 }, + { 0x318E, 31993 }, + { 0x3131, 31996 }, + { 0x3137, 31999 }, + { 0x3188, 32002 }, + { 0x318A, 32005 }, + { 0x314A, 32008 }, + { 0x314B, 32011 }, + { 0x317F, 32014 }, + { 0x314D, 32017 }, + { 0x314C, 32020 }, + { 0x3181, 32023 }, + { 0x3146, 32026 }, + { 0x316F, 32029 }, + { 0x3167, 32032 }, + { 0x3144, 32035 }, + { 0x313D, 32038 }, + { 0x317E, 32041 }, + { 0x317B, 32044 }, + { 0x317D, 32047 }, + { 0x3149, 32050 }, + { 0x3185, 32053 }, + { 0x3180, 32056 }, + { 0x3165, 32059 }, + { 0x3143, 32062 }, + { 0x3133, 32065 }, + { 0x316E, 32068 }, + { 0x3135, 32071 }, + { 0x3136, 32074 }, + { 0x3176, 32077 }, + { 0x3140, 32080 }, + { 0x313B, 32083 }, + { 0x313C, 32086 }, + { 0x317A, 32089 }, + { 0x317C, 32092 }, + { 0x3132, 32095 }, + { 0x3138, 32098 }, + { 0x3186, 32101 }, + { 0x3166, 32104 }, + { 0x3172, 32107 }, + { 0x3173, 32110 }, + { 0x313A, 32113 }, + { 0x316A, 32116 }, + { 0x3171, 32119 }, + { 0x3178, 32122 }, + { 0x3170, 32125 }, + { 0x3168, 32128 }, + { 0x3177, 32131 }, + { 0x316C, 32134 }, + { 0x313F, 32137 }, + { 0x313E, 32140 }, + { 0x3182, 32143 }, + { 0x3184, 32146 }, + { 0x316B, 32149 }, + { 0x3183, 32152 }, + { 0x3174, 32155 }, + { 0x3175, 32158 }, + { 0x3169, 32161 }, + { 0x316D, 32164 }, + { 0x3179, 32167 }, + { 0x302E, 32170 }, + { 0x1109, 32175 }, + { 0x110C, 32178 }, + { 0x1112, 32181 }, + { 0x110B, 32184 }, + { 0x1106, 32187 }, + { 0x1102, 32190 }, + { 0x1107, 32193 }, + { 0x1105, 32196 }, + { 0x115F, 32199 }, + { 0x1100, 32202 }, + { 0x1103, 32205 }, + { 0x110E, 32208 }, + { 0x110F, 32211 }, + { 0x1140, 32214 }, + { 0x1111, 32217 }, + { 0x1110, 32220 }, + { 0x114C, 32223 }, + { 0x110A, 32226 }, + { 0x1145, 32229 }, + { 0x1121, 32232 }, + { 0x1136, 32235 }, + { 0x113B, 32238 }, + { 0x1135, 32241 }, + { 0x1131, 32244 }, + { 0x112E, 32247 }, + { 0x1132, 32250 }, + { 0x1130, 32253 }, + { 0x110D, 32256 }, + { 0x1158, 32259 }, + { 0x1147, 32262 }, + { 0x1114, 32265 }, + { 0x1108, 32268 }, + { 0x1119, 32271 }, + { 0x114D, 32274 }, + { 0x1148, 32277 }, + { 0x1143, 32280 }, + { 0x1144, 32283 }, + { 0x111C, 32286 }, + { 0x1116, 32289 }, + { 0x1127, 32292 }, + { 0x111F, 32295 }, + { 0x111A, 32298 }, + { 0x1118, 32301 }, + { 0x112D, 32304 }, + { 0x112F, 32307 }, + { 0x1101, 32310 }, + { 0x1104, 32313 }, + { 0x1159, 32316 }, + { 0x113C, 32319 }, + { 0x1141, 32322 }, + { 0x1142, 32325 }, + { 0x1113, 32328 }, + { 0x1115, 32331 }, + { 0x111E, 32334 }, + { 0x1120, 32337 }, + { 0x1137, 32340 }, + { 0x1138, 32343 }, + { 0x113A, 32346 }, + { 0x1139, 32349 }, + { 0x1153, 32352 }, + { 0x114E, 32355 }, + { 0x1149, 32358 }, + { 0x1146, 32361 }, + { 0x114B, 32364 }, + { 0x114A, 32367 }, + { 0x111D, 32370 }, + { 0x112B, 32373 }, + { 0x111B, 32376 }, + { 0x1156, 32379 }, + { 0x1128, 32382 }, + { 0x112A, 32385 }, + { 0x1129, 32388 }, + { 0x1117, 32391 }, + { 0x1134, 32394 }, + { 0x113E, 32397 }, + { 0x1152, 32400 }, + { 0x1154, 32403 }, + { 0x1157, 32406 }, + { 0x1125, 32409 }, + { 0x1150, 32412 }, + { 0x1126, 32415 }, + { 0x1124, 32418 }, + { 0x113D, 32421 }, + { 0x1122, 32424 }, + { 0x1123, 32427 }, + { 0x1133, 32430 }, + { 0x1155, 32433 }, + { 0x114F, 32436 }, + { 0x112C, 32439 }, + { 0x113F, 32442 }, + { 0x1151, 32445 }, + { 0x11BA, 32448 }, + { 0x11BD, 32451 }, + { 0x11C2, 32454 }, + { 0x11BC, 32457 }, + { 0x11B7, 32460 }, + { 0x11AB, 32463 }, + { 0x11B8, 32466 }, + { 0x11AF, 32469 }, + { 0x11A8, 32472 }, + { 0x11AE, 32475 }, + { 0x11BE, 32478 }, + { 0x11BF, 32481 }, + { 0x11EB, 32484 }, + { 0x11C1, 32487 }, + { 0x11C0, 32490 }, + { 0x11F0, 32493 }, + { 0x11BB, 32496 }, + { 0x11DD, 32499 }, + { 0x11C7, 32502 }, + { 0x11B9, 32505 }, + { 0x11B3, 32508 }, + { 0x11EA, 32511 }, + { 0x11E9, 32514 }, + { 0x11EE, 32517 }, + { 0x11D0, 32520 }, + { 0x11F7, 32523 }, + { 0x11F5, 32526 }, + { 0x11F8, 32529 }, + { 0x11F6, 32532 }, + { 0x11AA, 32535 }, + { 0x11E1, 32538 }, + { 0x11DC, 32541 }, + { 0x11DB, 32544 }, + { 0x11AC, 32547 }, + { 0x11AD, 32550 }, + { 0x11E5, 32553 }, + { 0x11E3, 32556 }, + { 0x11B6, 32559 }, + { 0x11B1, 32562 }, + { 0x11CD, 32565 }, + { 0x11B2, 32568 }, + { 0x11E7, 32571 }, + { 0x11E8, 32574 }, + { 0x11A9, 32577 }, + { 0x11F9, 32580 }, + { 0x11EC, 32583 }, + { 0x11C3, 32586 }, + { 0x11DA, 32589 }, + { 0x11C5, 32592 }, + { 0x11C6, 32595 }, + { 0x11B0, 32598 }, + { 0x11CE, 32601 }, + { 0x11CB, 32604 }, + { 0x11EF, 32607 }, + { 0x11E2, 32610 }, + { 0x11E6, 32613 }, + { 0x11E0, 32616 }, + { 0x11DF, 32619 }, + { 0x11C8, 32622 }, + { 0x11C9, 32625 }, + { 0x11F3, 32628 }, + { 0x11E4, 32631 }, + { 0x11D8, 32634 }, + { 0x11D7, 32637 }, + { 0x11B5, 32640 }, + { 0x11B4, 32643 }, + { 0x11CA, 32646 }, + { 0x11F1, 32649 }, + { 0x11F4, 32652 }, + { 0x11DE, 32655 }, + { 0x11D6, 32658 }, + { 0x11D2, 32661 }, + { 0x11D3, 32664 }, + { 0x11F2, 32667 }, + { 0x11ED, 32670 }, + { 0x11CC, 32673 }, + { 0x11D4, 32676 }, + { 0x11D9, 32679 }, + { 0x11C4, 32682 }, + { 0x11D1, 32685 }, + { 0x11CF, 32688 }, + { 0x11D5, 32691 }, + { 0x1161, 32694 }, + { 0x1166, 32697 }, + { 0x1175, 32700 }, + { 0x1169, 32703 }, + { 0x116E, 32706 }, + { 0x1162, 32709 }, + { 0x1165, 32712 }, + { 0x1173, 32715 }, + { 0x116C, 32718 }, + { 0x116A, 32721 }, + { 0x1170, 32724 }, + { 0x1171, 32727 }, + { 0x1163, 32730 }, + { 0x1168, 32733 }, + { 0x1174, 32736 }, + { 0x116D, 32739 }, + { 0x1172, 32742 }, + { 0x1176, 32745 }, + { 0x1177, 32748 }, + { 0x1198, 32751 }, + { 0x119A, 32754 }, + { 0x119B, 32757 }, + { 0x1180, 32760 }, + { 0x1182, 32763 }, + { 0x1183, 32766 }, + { 0x1189, 32769 }, + { 0x118D, 32772 }, + { 0x116B, 32775 }, + { 0x116F, 32778 }, + { 0x1164, 32781 }, + { 0x1167, 32784 }, + { 0x117A, 32787 }, + { 0x117B, 32790 }, + { 0x1195, 32793 }, + { 0x119C, 32796 }, + { 0x1199, 32799 }, + { 0x117F, 32802 }, + { 0x1181, 32805 }, + { 0x118A, 32808 }, + { 0x118C, 32811 }, + { 0x1178, 32814 }, + { 0x1197, 32817 }, + { 0x1188, 32820 }, + { 0x1187, 32823 }, + { 0x118E, 32826 }, + { 0x1190, 32829 }, + { 0x1194, 32832 }, + { 0x1193, 32835 }, + { 0x119E, 32838 }, + { 0x117C, 32841 }, + { 0x1196, 32844 }, + { 0x1179, 32847 }, + { 0x117D, 32850 }, + { 0x117E, 32853 }, + { 0x1184, 32856 }, + { 0x118F, 32859 }, + { 0x1192, 32862 }, + { 0x1160, 32865 }, + { 0x1185, 32868 }, + { 0x1186, 32871 }, + { 0x1191, 32874 }, + { 0x11A1, 32877 }, + { 0x11A0, 32880 }, + { 0x119D, 32883 }, + { 0x118B, 32886 }, + { 0x119F, 32889 }, + { 0x11A2, 32892 }, + { 0x05C5, 32895 }, + { 0x05C4, 32899 }, + { 0x05AF, 32903 }, + { 0x05C2, 32907 }, + { 0x05BF, 32911 }, + { 0x05C1, 32914 }, + { 0x05B2, 32918 }, + { 0x05B1, 32922 }, + { 0x05B3, 32926 }, + { 0x05B4, 32930 }, + { 0x05B9, 32933 }, + { 0x05BA, 32936 }, + { 0x05BD, 32942 }, + { 0x05B7, 32945 }, + { 0x05B6, 32948 }, + { 0x05B0, 32951 }, + { 0x05B5, 32954 }, + { 0x05BC, 32957 }, + { 0x05B8, 32962 }, + { 0x05C7, 32965 }, + { 0x05BB, 32969 }, + { 0x6B1E, 32972 }, + { 0x05AB, 32976 }, + { 0x05AD, 32979 }, + { 0x05AC, 32982 }, + { 0x05A2, 32985 }, + { 0x05A7, 32989 }, + { 0x05A3, 32992 }, + { 0x05A1, 32995 }, + { 0x05A8, 32998 }, + { 0x0597, 33001 }, + { 0x0592, 33004 }, + { 0x059B, 33007 }, + { 0x05AA, 33010 }, + { 0x059A, 33015 }, + { 0x0595, 33018 }, + { 0x0594, 33022 }, + { 0x0598, 33026 }, + { 0x05AE, 33029 }, + { 0x059C, 33032 }, + { 0x059D, 33035 }, + { 0x05A5, 33039 }, + { 0x05A6, 33042 }, + { 0x0599, 33046 }, + { 0x059F, 33049 }, + { 0x0596, 33053 }, + { 0x0591, 33056 }, + { 0x05A0, 33059 }, + { 0x05A9, 33063 }, + { 0x05A4, 33067 }, + { 0x059E, 33070 }, + { 0x0593, 33073 }, + { 0x05D4, 33076 }, + { 0x6B34, 33079 }, + { 0x05E4, 33084 }, + { 0x6B4E, 33087 }, + { 0x6B44, 33092 }, + { 0x05D1, 33097 }, + { 0x6B4C, 33100 }, + { 0x6B31, 33105 }, + { 0x05D7, 33110 }, + { 0x05DB, 33113 }, + { 0x6B4D, 33116 }, + { 0x6B3B, 33121 }, + { 0x05DE, 33126 }, + { 0x6B3E, 33129 }, + { 0x05E0, 33134 }, + { 0x6B40, 33137 }, + { 0x05E7, 33142 }, + { 0x6B47, 33145 }, + { 0x05EA, 33150 }, + { 0x6B4A, 33153 }, + { 0x05D8, 33158 }, + { 0x6B38, 33161 }, + { 0x05D5, 33166 }, + { 0x6B4B, 33169 }, + { 0x6B35, 33174 }, + { 0x05D9, 33179 }, + { 0x6B1D, 33182 }, + { 0x6B39, 33187 }, + { 0x05D0, 33192 }, + { 0x6B30, 33195 }, + { 0x6B2E, 33200 }, + { 0x6B2F, 33205 }, + { 0x05E2, 33210 }, + { 0x05E8, 33213 }, + { 0x6B48, 33216 }, + { 0x05E9, 33221 }, + { 0x6B2B, 33224 }, + { 0x6B2A, 33230 }, + { 0x6B49, 33236 }, + { 0x6B2D, 33241 }, + { 0x6B2C, 33249 }, + { 0x6B23, 33257 }, + { 0x6B24, 33261 }, + { 0x6B28, 33265 }, + { 0x6B21, 33269 }, + { 0x6B27, 33273 }, + { 0x6B22, 33277 }, + { 0x6B26, 33281 }, + { 0x6B25, 33286 }, + { 0x05D3, 33290 }, + { 0x6B33, 33293 }, + { 0x05E3, 33298 }, + { 0x6B43, 33302 }, + { 0x05DA, 33308 }, + { 0x6B3A, 33312 }, + { 0x05DD, 33318 }, + { 0x05DF, 33322 }, + { 0x05E5, 33326 }, + { 0x05D2, 33330 }, + { 0x6B32, 33333 }, + { 0x05DC, 33338 }, + { 0x6B3C, 33341 }, + { 0x05E6, 33346 }, + { 0x6B46, 33349 }, + { 0x05D6, 33354 }, + { 0x6B36, 33357 }, + { 0x05E1, 33362 }, + { 0x6B41, 33365 }, + { 0x6B20, 33370 }, + { 0x6B29, 33374 }, + { 0x6B4F, 33379 }, + { 0x05F1, 33383 }, + { 0x6B1F, 33388 }, + { 0x05F0, 33394 }, + { 0x05F2, 33399 }, + { 0x05C6, 33404 }, + { 0x05C3, 33408 }, + { 0x05BE, 33412 }, + { 0x05C0, 33415 }, + { 0x05F3, 33418 }, + { 0x05F4, 33421 }, + { 0x2010, 33424 }, + { 0x2E1A, 33425 }, + { 0x2043, 33428 }, + { 0x2F4F, 33430 }, + { 0x2F21, 33434 }, + { 0x2F22, 33437 }, + { 0x2F7D, 33441 }, + { 0x2F44, 33444 }, + { 0x2F24, 33447 }, + { 0x2F38, 33450 }, + { 0x2F5C, 33453 }, + { 0x2F5D, 33456 }, + { 0x2F02, 33459 }, + { 0x2F32, 33462 }, + { 0x2F7F, 33465 }, + { 0x2FB7, 33468 }, + { 0x2F6C, 33471 }, + { 0x2FB6, 33474 }, + { 0x2F51, 33477 }, + { 0x2F0E, 33480 }, + { 0x2F78, 33483 }, + { 0x2F07, 33486 }, + { 0x2F08, 33489 }, + { 0x2F79, 33492 }, + { 0x2F46, 33495 }, + { 0x2F7C, 33498 }, + { 0x2F00, 33501 }, + { 0x2F97, 33504 }, + { 0x2F41, 33507 }, + { 0x2FCF, 33510 }, + { 0x2F9A, 33513 }, + { 0x2F9B, 33516 }, + { 0x2F48, 33519 }, + { 0x2F92, 33522 }, + { 0x2F47, 33525 }, + { 0x2F17, 33528 }, + { 0x2F06, 33531 }, + { 0x2F36, 33534 }, + { 0x2F64, 33538 }, + { 0x2F96, 33541 }, + { 0x2FC3, 33544 }, + { 0x2FAD, 33547 }, + { 0x2F88, 33550 }, + { 0x2F9D, 33553 }, + { 0x2F66, 33556 }, + { 0x2FBB, 33561 }, + { 0x2F9E, 33564 }, + { 0x2F73, 33567 }, + { 0x2FA2, 33570 }, + { 0x2F52, 33573 }, + { 0x2F56, 33576 }, + { 0x2FC5, 33579 }, + { 0x2F6B, 33582 }, + { 0x2F3E, 33585 }, + { 0x2F0C, 33588 }, + { 0x2FCE, 33592 }, + { 0x2FD1, 33595 }, + { 0x2FAF, 33598 }, + { 0x2F5B, 33601 }, + { 0x2F55, 33604 }, + { 0x2FC2, 33607 }, + { 0x2F9C, 33610 }, + { 0x2FCC, 33613 }, + { 0x2FA8, 33616 }, + { 0x2FA6, 33619 }, + { 0x2FBD, 33622 }, + { 0x2F59, 33625 }, + { 0x2F3F, 33630 }, + { 0x2FB8, 33633 }, + { 0x2FC7, 33636 }, + { 0x2F05, 33639 }, + { 0x2F93, 33642 }, + { 0x2F28, 33645 }, + { 0x2F5F, 33648 }, + { 0x2F4B, 33651 }, + { 0x2F2A, 33654 }, + { 0x2FB4, 33657 }, + { 0x2FB2, 33660 }, + { 0x2F09, 33663 }, + { 0x2F63, 33666 }, + { 0x2F01, 33669 }, + { 0x2FA7, 33672 }, + { 0x2F35, 33675 }, + { 0x2F81, 33679 }, + { 0x2F49, 33682 }, + { 0x2FD0, 33685 }, + { 0x2F10, 33688 }, + { 0x2F7E, 33692 }, + { 0x2FAC, 33695 }, + { 0x2F76, 33698 }, + { 0x2F27, 33701 }, + { 0x2FC4, 33704 }, + { 0x2F19, 33707 }, + { 0x2F83, 33710 }, + { 0x2F77, 33713 }, + { 0x2F6A, 33716 }, + { 0x2F3B, 33719 }, + { 0x2F4C, 33722 }, + { 0x2FBC, 33725 }, + { 0x2F61, 33728 }, + { 0x2F4A, 33731 }, + { 0x2FA1, 33734 }, + { 0x2F8F, 33737 }, + { 0x2F91, 33741 }, + { 0x2FB5, 33744 }, + { 0x2FA3, 33747 }, + { 0x2F2F, 33750 }, + { 0x2F13, 33753 }, + { 0x2F1C, 33756 }, + { 0x2F6E, 33759 }, + { 0x2FCA, 33762 }, + { 0x2F8E, 33765 }, + { 0x2F80, 33768 }, + { 0x2F26, 33771 }, + { 0x2F1A, 33774 }, + { 0x2F8A, 33777 }, + { 0x2F0D, 33780 }, + { 0x2F4D, 33783 }, + { 0x2F1F, 33786 }, + { 0x2F0B, 33789 }, + { 0x2F0A, 33792 }, + { 0x2F65, 33795 }, + { 0x2FBE, 33798 }, + { 0x2FD5, 33801 }, + { 0x2FC1, 33804 }, + { 0x2F72, 33807 }, + { 0x2F8B, 33810 }, + { 0x2F3C, 33813 }, + { 0x2FBA, 33816 }, + { 0x2F11, 33819 }, + { 0x2F60, 33822 }, + { 0x2FA9, 33825 }, + { 0x2F1D, 33828 }, + { 0x2F12, 33831 }, + { 0x2F15, 33834 }, + { 0x2F2E, 33839 }, + { 0x2F7A, 33842 }, + { 0x2F99, 33845 }, + { 0x2F37, 33848 }, + { 0x2FAB, 33851 }, + { 0x2F33, 33856 }, + { 0x2F03, 33860 }, + { 0x2FAA, 33863 }, + { 0x2F5A, 33866 }, + { 0x2F29, 33869 }, + { 0x2F39, 33872 }, + { 0x2FB3, 33875 }, + { 0x2F6D, 33878 }, + { 0x2F14, 33881 }, + { 0x2F74, 33884 }, + { 0x2F53, 33887 }, + { 0x2F6F, 33890 }, + { 0x2F62, 33893 }, + { 0x2F0F, 33896 }, + { 0x2F8C, 33899 }, + { 0x2FD2, 33902 }, + { 0x2F71, 33905 }, + { 0x2F54, 33908 }, + { 0x2FC6, 33911 }, + { 0x2F69, 33914 }, + { 0x2F25, 33917 }, + { 0x2FAE, 33920 }, + { 0x2F84, 33923 }, + { 0x2F98, 33926 }, + { 0x2F75, 33929 }, + { 0x2F9F, 33932 }, + { 0x2F40, 33935 }, + { 0x2F2B, 33938 }, + { 0x2F43, 33941 }, + { 0x2F68, 33944 }, + { 0x2F34, 33948 }, + { 0x2F58, 33952 }, + { 0x2FD3, 33956 }, + { 0x2F57, 33959 }, + { 0x2F16, 33962 }, + { 0x2F8D, 33966 }, + { 0x2FC9, 33969 }, + { 0x2F85, 33972 }, + { 0x2F87, 33975 }, + { 0x2F42, 33978 }, + { 0x2F04, 33981 }, + { 0x2F94, 33984 }, + { 0x2F70, 33987 }, + { 0x2F2C, 33990 }, + { 0x2F45, 33993 }, + { 0x2FB1, 33996 }, + { 0x2F86, 34000 }, + { 0x2FCD, 34003 }, + { 0x2F31, 34006 }, + { 0x2FD4, 34009 }, + { 0x2F95, 34012 }, + { 0x2F4E, 34015 }, + { 0x2FC8, 34018 }, + { 0x2F3A, 34021 }, + { 0x2F90, 34024 }, + { 0x2F50, 34027 }, + { 0x2F23, 34030 }, + { 0x2F7B, 34033 }, + { 0x2F3D, 34036 }, + { 0x2FB0, 34039 }, + { 0x2FA0, 34042 }, + { 0x2F30, 34045 }, + { 0x2F1B, 34048 }, + { 0x2F20, 34051 }, + { 0x2FA5, 34054 }, + { 0x2FC0, 34057 }, + { 0x2FB9, 34060 }, + { 0x2F82, 34063 }, + { 0x2F2D, 34066 }, + { 0x2F5E, 34069 }, + { 0x2F67, 34072 }, + { 0x2F89, 34075 }, + { 0x2F1E, 34078 }, + { 0x2F18, 34081 }, + { 0x2FCB, 34084 }, + { 0x2FA4, 34087 }, + { 0x2FBF, 34090 }, + { 0x212A, 34094 }, + { 0x327F, 34096 }, + { 0x2AAB, 34099 }, + { 0x2AAD, 34101 }, + { 0x1C36, 34106 }, + { 0x1C37, 34109 }, + { 0x1C41, 34112 }, + { 0x1C46, 34115 }, + { 0x1C42, 34118 }, + { 0x1C45, 34121 }, + { 0x1C44, 34124 }, + { 0x1C49, 34127 }, + { 0x1C40, 34130 }, + { 0x1C48, 34133 }, + { 0x1C47, 34136 }, + { 0x1C43, 34139 }, + { 0x1C2C, 34142 }, + { 0x1C27, 34146 }, + { 0x1C28, 34150 }, + { 0x1C2A, 34154 }, + { 0x1C26, 34158 }, + { 0x1C29, 34162 }, + { 0x1C2B, 34166 }, + { 0x1C23, 34170 }, + { 0x1C13, 34173 }, + { 0x1C06, 34176 }, + { 0x1C0C, 34179 }, + { 0x1C11, 34182 }, + { 0x1C03, 34185 }, + { 0x1C1D, 34188 }, + { 0x1C08, 34191 }, + { 0x1C00, 34194 }, + { 0x1C1C, 34197 }, + { 0x1C15, 34200 }, + { 0x1C0D, 34203 }, + { 0x1C0E, 34206 }, + { 0x1C1B, 34209 }, + { 0x1C20, 34212 }, + { 0x1C0A, 34215 }, + { 0x1C1F, 34218 }, + { 0x1C22, 34221 }, + { 0x1C1A, 34224 }, + { 0x1C14, 34227 }, + { 0x1C07, 34230 }, + { 0x1C4F, 34233 }, + { 0x1C19, 34236 }, + { 0x1C12, 34239 }, + { 0x1C04, 34242 }, + { 0x1C1E, 34245 }, + { 0x1C02, 34248 }, + { 0x1C01, 34251 }, + { 0x1C16, 34254 }, + { 0x1C05, 34257 }, + { 0x1C09, 34260 }, + { 0x1C10, 34263 }, + { 0x1C0F, 34266 }, + { 0x1C21, 34269 }, + { 0x1C0B, 34272 }, + { 0x1C17, 34275 }, + { 0x1C4D, 34278 }, + { 0x1C18, 34281 }, + { 0x1C4E, 34284 }, + { 0x1C2D, 34287 }, + { 0x1C2F, 34291 }, + { 0x1C2E, 34295 }, + { 0x1C30, 34299 }, + { 0x1C31, 34303 }, + { 0x1C32, 34307 }, + { 0x1C33, 34311 }, + { 0x1C35, 34315 }, + { 0x1C34, 34319 }, + { 0x1C25, 34323 }, + { 0x1C24, 34327 }, + { 0x1C3C, 34331 }, + { 0x1C3D, 34336 }, + { 0x1C3B, 34339 }, + { 0x1C3F, 34342 }, + { 0x1C3E, 34345 }, + { 0x7050, 34349 }, + { 0x7051, 34353 }, + { 0x7052, 34357 }, + { 0x7053, 34361 }, + { 0x7054, 34365 }, + { 0x7055, 34369 }, + { 0x7056, 34373 }, + { 0x7057, 34377 }, + { 0x7058, 34381 }, + { 0x7059, 34385 }, + { 0x705A, 34389 }, + { 0x705B, 34393 }, + { 0x705C, 34397 }, + { 0x705D, 34401 }, + { 0x7080, 34405 }, + { 0x7081, 34410 }, + { 0x7082, 34415 }, + { 0x7083, 34420 }, + { 0x708E, 34425 }, + { 0x708F, 34430 }, + { 0x7090, 34435 }, + { 0x7091, 34440 }, + { 0x7092, 34445 }, + { 0x7095, 34450 }, + { 0x7096, 34455 }, + { 0x7097, 34460 }, + { 0x709A, 34464 }, + { 0x709B, 34469 }, + { 0x709C, 34474 }, + { 0x709D, 34478 }, + { 0x709E, 34483 }, + { 0x709F, 34487 }, + { 0x70A0, 34491 }, + { 0x70A1, 34496 }, + { 0x70A2, 34500 }, + { 0x70A3, 34504 }, + { 0x70A5, 34508 }, + { 0x70A6, 34512 }, + { 0x70A7, 34516 }, + { 0x70A8, 34521 }, + { 0x70A9, 34525 }, + { 0x70AA, 34529 }, + { 0x70AB, 34534 }, + { 0x70AC, 34539 }, + { 0x70AD, 34543 }, + { 0x70AE, 34547 }, + { 0x70AF, 34551 }, + { 0x70B0, 34555 }, + { 0x70B1, 34559 }, + { 0x70B2, 34563 }, + { 0x70B3, 34567 }, + { 0x70B4, 34571 }, + { 0x70B5, 34575 }, + { 0x70B6, 34580 }, + { 0x70B7, 34584 }, + { 0x70B8, 34589 }, + { 0x70B9, 34593 }, + { 0x70BA, 34597 }, + { 0x70BB, 34601 }, + { 0x70BC, 34605 }, + { 0x70BD, 34609 }, + { 0x70BE, 34613 }, + { 0x70BF, 34617 }, + { 0x70C0, 34621 }, + { 0x70C1, 34625 }, + { 0x70C2, 34629 }, + { 0x70C3, 34633 }, + { 0x70C4, 34638 }, + { 0x70C5, 34643 }, + { 0x70C6, 34648 }, + { 0x70C7, 34653 }, + { 0x70C8, 34658 }, + { 0x70C9, 34662 }, + { 0x70CA, 34667 }, + { 0x70CB, 34671 }, + { 0x70CC, 34675 }, + { 0x70CD, 34681 }, + { 0x70CE, 34686 }, + { 0x70CF, 34692 }, + { 0x70D0, 34697 }, + { 0x70D1, 34701 }, + { 0x70D3, 34705 }, + { 0x70D4, 34709 }, + { 0x70D5, 34713 }, + { 0x70D6, 34717 }, + { 0x70D7, 34721 }, + { 0x70D8, 34725 }, + { 0x70D9, 34730 }, + { 0x70DA, 34734 }, + { 0x70DB, 34738 }, + { 0x70DC, 34742 }, + { 0x70DD, 34746 }, + { 0x7084, 34750 }, + { 0x7085, 34755 }, + { 0x7086, 34760 }, + { 0x7087, 34765 }, + { 0x7088, 34770 }, + { 0x7089, 34775 }, + { 0x708A, 34780 }, + { 0x708B, 34785 }, + { 0x708C, 34790 }, + { 0x708D, 34795 }, + { 0x70DE, 34800 }, + { 0x70DF, 34805 }, + { 0x70E0, 34810 }, + { 0x70E1, 34815 }, + { 0x70E2, 34820 }, + { 0x70E3, 34825 }, + { 0x70E4, 34830 }, + { 0x70E5, 34835 }, + { 0x70E6, 34840 }, + { 0x70E7, 34845 }, + { 0x70E8, 34850 }, + { 0x70E9, 34855 }, + { 0x70EA, 34860 }, + { 0x70EB, 34865 }, + { 0x70EC, 34870 }, + { 0x70ED, 34875 }, + { 0x70EE, 34880 }, + { 0x70EF, 34885 }, + { 0x70F0, 34890 }, + { 0x70F1, 34895 }, + { 0x70F2, 34900 }, + { 0x70F3, 34905 }, + { 0x70F4, 34910 }, + { 0x70F5, 34915 }, + { 0x70F6, 34920 }, + { 0x70F7, 34925 }, + { 0x70F8, 34930 }, + { 0x70F9, 34935 }, + { 0x70FA, 34940 }, + { 0x7093, 34945 }, + { 0x7094, 34950 }, + { 0x7098, 34955 }, + { 0x7099, 34960 }, + { 0x70A4, 34965 }, + { 0x70D2, 34970 }, + { 0x7005, 34975 }, + { 0x702B, 34980 }, + { 0x701E, 34985 }, + { 0x7033, 34990 }, + { 0x7035, 34995 }, + { 0x7019, 35000 }, + { 0x7007, 35005 }, + { 0x7000, 35010 }, + { 0x702E, 35015 }, + { 0x7004, 35020 }, + { 0x7021, 35025 }, + { 0x7030, 35030 }, + { 0x7015, 35035 }, + { 0x7008, 35040 }, + { 0x7017, 35045 }, + { 0x7023, 35050 }, + { 0x703C, 35055 }, + { 0x703F, 35060 }, + { 0x7025, 35065 }, + { 0x7018, 35070 }, + { 0x701A, 35075 }, + { 0x7040, 35080 }, + { 0x702C, 35085 }, + { 0x7029, 35090 }, + { 0x7002, 35095 }, + { 0x7046, 35100 }, + { 0x701B, 35105 }, + { 0x702D, 35110 }, + { 0x7026, 35115 }, + { 0x7049, 35120 }, + { 0x700D, 35125 }, + { 0x7034, 35130 }, + { 0x7001, 35135 }, + { 0x7020, 35140 }, + { 0x7039, 35145 }, + { 0x702F, 35150 }, + { 0x703A, 35155 }, + { 0x7041, 35160 }, + { 0x7010, 35165 }, + { 0x7006, 35170 }, + { 0x700B, 35175 }, + { 0x7045, 35180 }, + { 0x7022, 35185 }, + { 0x7009, 35190 }, + { 0x701C, 35195 }, + { 0x702A, 35200 }, + { 0x7037, 35205 }, + { 0x701D, 35210 }, + { 0x700A, 35215 }, + { 0x7031, 35220 }, + { 0x7032, 35225 }, + { 0x7028, 35230 }, + { 0x7003, 35235 }, + { 0x7047, 35240 }, + { 0x700E, 35245 }, + { 0x704B, 35250 }, + { 0x7011, 35255 }, + { 0x704A, 35260 }, + { 0x7036, 35265 }, + { 0x7012, 35270 }, + { 0x7043, 35275 }, + { 0x701F, 35280 }, + { 0x7016, 35285 }, + { 0x703D, 35290 }, + { 0x7038, 35295 }, + { 0x7048, 35300 }, + { 0x700F, 35305 }, + { 0x7024, 35310 }, + { 0x7014, 35315 }, + { 0x7013, 35320 }, + { 0x7042, 35325 }, + { 0x704C, 35330 }, + { 0x7044, 35335 }, + { 0x704D, 35340 }, + { 0x7280, 35345 }, + { 0x7282, 35348 }, + { 0x7285, 35351 }, + { 0x7281, 35354 }, + { 0x7284, 35357 }, + { 0x729B, 35360 }, + { 0x7286, 35363 }, + { 0x728A, 35366 }, + { 0x728B, 35369 }, + { 0x728D, 35372 }, + { 0x728E, 35375 }, + { 0x728F, 35378 }, + { 0x7293, 35381 }, + { 0x728C, 35384 }, + { 0x7295, 35387 }, + { 0x7296, 35390 }, + { 0x7297, 35393 }, + { 0x7292, 35396 }, + { 0x7287, 35399 }, + { 0x729C, 35402 }, + { 0x7288, 35405 }, + { 0x7299, 35408 }, + { 0x7283, 35411 }, + { 0x729A, 35414 }, + { 0x7294, 35417 }, + { 0x7290, 35420 }, + { 0x7291, 35423 }, + { 0x7289, 35426 }, + { 0x7298, 35429 }, + { 0x7920, 35432 }, + { 0x7921, 35435 }, + { 0x7939, 35438 }, + { 0x7923, 35441 }, + { 0x7924, 35444 }, + { 0x7931, 35447 }, + { 0x7922, 35450 }, + { 0x7926, 35453 }, + { 0x7928, 35456 }, + { 0x7929, 35459 }, + { 0x792A, 35462 }, + { 0x792B, 35465 }, + { 0x792C, 35468 }, + { 0x7932, 35471 }, + { 0x792D, 35474 }, + { 0x7933, 35477 }, + { 0x792F, 35480 }, + { 0x7930, 35483 }, + { 0x7925, 35486 }, + { 0x7927, 35489 }, + { 0x7935, 35492 }, + { 0x7936, 35495 }, + { 0x7937, 35498 }, + { 0x7938, 35501 }, + { 0x792E, 35504 }, + { 0x7934, 35507 }, + { 0x793F, 35510 }, + { 0x00AF, 35513 }, + { 0x2774, 35514 }, + { 0x2768, 35519 }, + { 0x26AB, 35523 }, + { 0x2775, 35526 }, + { 0x2769, 35531 }, + { 0x2592, 35535 }, + { 0x26AC, 35537 }, + { 0x26AA, 35541 }, + { 0x2759, 35544 }, + { 0x276A, 35547 }, + { 0x276B, 35552 }, + { 0x205F, 35557 }, + { 0x276C, 35560 }, + { 0x276D, 35565 }, + { 0x00B7, 35570 }, + { 0x22A7, 35572 }, + { 0x2A0A, 35573 }, + { 0x202F, 35576 }, + { 0x26B2, 35579 }, + { 0x22B2, 35580 }, + { 0x22B4, 35583 }, + { 0x2491, 35589 }, + { 0x0023, 35593 }, + { 0x2492, 35595 }, + { 0x2493, 35599 }, + { 0x249B, 35603 }, + { 0x2496, 35607 }, + { 0x2497, 35611 }, + { 0x2499, 35615 }, + { 0x2495, 35619 }, + { 0x249A, 35623 }, + { 0x2494, 35627 }, + { 0x2498, 35631 }, + { 0x2116, 35635 }, + { 0x6FFC, 35637 }, + { 0x02DB, 35640 }, + { 0x2325, 35641 }, + { 0x6D3E, 35643 }, + { 0x6D3F, 35646 }, + { 0x26B4, 35649 }, + { 0x270F, 35650 }, + { 0x20A7, 35651 }, + { 0x2653, 35653 }, + { 0x210E, 35654 }, + { 0x210F, 35656 }, + { 0x3012, 35661 }, + { 0x3020, 35663 }, + { 0x2E07, 35666 }, + { 0x2E0B, 35670 }, + { 0x2E06, 35672 }, + { 0x5949, 35675 }, + { 0x5947, 35679 }, + { 0x594B, 35683 }, + { 0x5948, 35687 }, + { 0x594A, 35691 }, + { 0x594C, 35695 }, + { 0x594E, 35699 }, + { 0x594D, 35703 }, + { 0x5946, 35707 }, + { 0x5937, 35710 }, + { 0x5939, 35713 }, + { 0x5934, 35716 }, + { 0x5931, 35719 }, + { 0x5941, 35722 }, + { 0x593A, 35725 }, + { 0x5930, 35728 }, + { 0x593E, 35731 }, + { 0x5938, 35734 }, + { 0x5935, 35737 }, + { 0x5936, 35740 }, + { 0x593D, 35743 }, + { 0x593C, 35746 }, + { 0x5933, 35749 }, + { 0x5940, 35752 }, + { 0x593F, 35755 }, + { 0x5942, 35758 }, + { 0x5944, 35761 }, + { 0x5932, 35764 }, + { 0x593B, 35767 }, + { 0x5943, 35770 }, + { 0x5945, 35773 }, + { 0x5953, 35776 }, + { 0x595F, 35778 }, + { 0x5952, 35781 }, + { 0x5950, 35785 }, + { 0x5951, 35789 }, + { 0x594F, 35793 }, + { 0x23CE, 35797 }, + { 0x2930, 35799 }, + { 0x292B, 35805 }, + { 0x2644, 35810 }, + { 0x2696, 35811 }, + { 0x212F, 35812 }, + { 0x210A, 35815 }, + { 0x2113, 35818 }, + { 0x2134, 35821 }, + { 0x212C, 35824 }, + { 0x2130, 35827 }, + { 0x2131, 35830 }, + { 0x210B, 35833 }, + { 0x2110, 35836 }, + { 0x2112, 35839 }, + { 0x2133, 35842 }, + { 0x2118, 35845 }, + { 0x211B, 35848 }, + { 0x2314, 35851 }, + { 0x6E45, 35852 }, + { 0x201A, 35854 }, + { 0x2039, 35858 }, + { 0x203A, 35863 }, + { 0x201B, 35868 }, + { 0x33DF, 35872 }, + { 0x33C6, 35876 }, + { 0x33C0, 35880 }, + { 0x33C1, 35883 }, + { 0x33A7, 35886 }, + { 0x33A8, 35890 }, + { 0x33A5, 35895 }, + { 0x33A1, 35898 }, + { 0x33DE, 35901 }, + { 0x33C2, 35905 }, + { 0x3373, 35907 }, + { 0x33C3, 35909 }, + { 0x33C4, 35911 }, + { 0x33C5, 35913 }, + { 0x339D, 35915 }, + { 0x33A4, 35917 }, + { 0x33A0, 35920 }, + { 0x33C7, 35923 }, + { 0x3372, 35925 }, + { 0x33C8, 35927 }, + { 0x3397, 35929 }, + { 0x3377, 35931 }, + { 0x3379, 35933 }, + { 0x3378, 35936 }, + { 0x32CE, 35939 }, + { 0x3399, 35941 }, + { 0x3387, 35943 }, + { 0x33C9, 35945 }, + { 0x33CA, 35947 }, + { 0x32CC, 35949 }, + { 0x33CB, 35951 }, + { 0x3390, 35953 }, + { 0x33CC, 35955 }, + { 0x337A, 35957 }, + { 0x3384, 35959 }, + { 0x3385, 35961 }, + { 0x338F, 35963 }, + { 0x33CD, 35965 }, + { 0x3398, 35967 }, + { 0x339E, 35969 }, + { 0x33A6, 35971 }, + { 0x33CE, 35974 }, + { 0x33A2, 35977 }, + { 0x33CF, 35980 }, + { 0x33B8, 35982 }, + { 0x33BE, 35984 }, + { 0x33D0, 35986 }, + { 0x33D1, 35988 }, + { 0x33D3, 35990 }, + { 0x3383, 35992 }, + { 0x3386, 35994 }, + { 0x33D4, 35996 }, + { 0x338E, 35999 }, + { 0x3396, 36001 }, + { 0x339C, 36003 }, + { 0x33A3, 36005 }, + { 0x339F, 36008 }, + { 0x33B3, 36011 }, + { 0x3382, 36013 }, + { 0x338C, 36016 }, + { 0x338D, 36019 }, + { 0x3395, 36022 }, + { 0x339B, 36025 }, + { 0x33B2, 36028 }, + { 0x33B6, 36031 }, + { 0x33BC, 36034 }, + { 0x33B7, 36037 }, + { 0x33B9, 36039 }, + { 0x33BD, 36042 }, + { 0x33BF, 36044 }, + { 0x3381, 36047 }, + { 0x338B, 36049 }, + { 0x339A, 36051 }, + { 0x33B1, 36053 }, + { 0x33B5, 36055 }, + { 0x33BB, 36057 }, + { 0x3375, 36059 }, + { 0x33A9, 36061 }, + { 0x3380, 36063 }, + { 0x3376, 36066 }, + { 0x338A, 36068 }, + { 0x33D7, 36070 }, + { 0x33D8, 36072 }, + { 0x33DA, 36074 }, + { 0x33B0, 36076 }, + { 0x33B4, 36078 }, + { 0x33BA, 36080 }, + { 0x33DB, 36082 }, + { 0x33DC, 36084 }, + { 0x33DD, 36086 }, + { 0x3374, 36088 }, + { 0x3388, 36090 }, + { 0x2293, 36092 }, + { 0x2294, 36094 }, + { 0x337E, 36096 }, + { 0x337B, 36100 }, + { 0x337C, 36104 }, + { 0x337D, 36108 }, + { 0x32CD, 36112 }, + { 0x33FF, 36114 }, + { 0x3393, 36116 }, + { 0x33AC, 36118 }, + { 0x333F, 36120 }, + { 0x3371, 36122 }, + { 0x3391, 36124 }, + { 0x33AA, 36126 }, + { 0x33D2, 36128 }, + { 0x3392, 36130 }, + { 0x33D5, 36132 }, + { 0x33D6, 36134 }, + { 0x33AB, 36136 }, + { 0x33D9, 36138 }, + { 0x33AD, 36140 }, + { 0x33AE, 36142 }, + { 0x33AF, 36146 }, + { 0x3394, 36151 }, + { 0x3327, 36153 }, + { 0x3306, 36155 }, + { 0x3303, 36157 }, + { 0x3331, 36159 }, + { 0x3325, 36161 }, + { 0x3326, 36163 }, + { 0x23CD, 36165 }, + { 0x3310, 36167 }, + { 0x3342, 36169 }, + { 0x3305, 36171 }, + { 0x3389, 36173 }, + { 0x3314, 36175 }, + { 0x2ACD, 36177 }, + { 0x334B, 36182 }, + { 0x3349, 36184 }, + { 0x3328, 36186 }, + { 0x3309, 36188 }, + { 0x330A, 36190 }, + { 0x3337, 36192 }, + { 0x3330, 36194 }, + { 0x3355, 36196 }, + { 0x3352, 36198 }, + { 0x221A, 36200 }, + { 0x2B12, 36202 }, + { 0x25E7, 36207 }, + { 0x2B15, 36212 }, + { 0x25EA, 36219 }, + { 0x25E8, 36226 }, + { 0x25A7, 36231 }, + { 0x25E9, 36239 }, + { 0x25A8, 36246 }, + { 0x2B14, 36254 }, + { 0x2B13, 36261 }, + { 0x25A9, 36266 }, + { 0x25A5, 36271 }, + { 0x29E0, 36275 }, + { 0x25A4, 36279 }, + { 0x25A6, 36283 }, + { 0x3350, 36288 }, + { 0x3302, 36290 }, + { 0x333C, 36292 }, + { 0x3324, 36294 }, + { 0x3308, 36296 }, + { 0x330F, 36298 }, + { 0x330E, 36300 }, + { 0x3311, 36302 }, + { 0x332A, 36304 }, + { 0x3341, 36306 }, + { 0x3335, 36308 }, + { 0x228F, 36310 }, + { 0x22E4, 36313 }, + { 0x2291, 36320 }, + { 0x330B, 36326 }, + { 0x331C, 36328 }, + { 0x331E, 36330 }, + { 0x3345, 36332 }, + { 0x3344, 36334 }, + { 0x3329, 36336 }, + { 0x332C, 36338 }, + { 0x333B, 36340 }, + { 0x333A, 36342 }, + { 0x3340, 36344 }, + { 0x2ACE, 36346 }, + { 0x3353, 36351 }, + { 0x3322, 36353 }, + { 0x3323, 36355 }, + { 0x3357, 36357 }, + { 0x334E, 36359 }, + { 0x334F, 36361 }, + { 0x3300, 36363 }, + { 0x3301, 36365 }, + { 0x333E, 36367 }, + { 0x3318, 36369 }, + { 0x3339, 36371 }, + { 0x3333, 36373 }, + { 0x3304, 36375 }, + { 0x331D, 36377 }, + { 0x3312, 36379 }, + { 0x3346, 36381 }, + { 0x3338, 36383 }, + { 0x332F, 36385 }, + { 0x333D, 36387 }, + { 0x332D, 36389 }, + { 0x3313, 36391 }, + { 0x330C, 36393 }, + { 0x330D, 36395 }, + { 0x331B, 36397 }, + { 0x2311, 36399 }, + { 0x3343, 36401 }, + { 0x3347, 36403 }, + { 0x334D, 36405 }, + { 0x334C, 36407 }, + { 0x3348, 36409 }, + { 0x3351, 36411 }, + { 0x3354, 36413 }, + { 0x331F, 36415 }, + { 0x3321, 36417 }, + { 0x3334, 36419 }, + { 0x3307, 36421 }, + { 0x3332, 36423 }, + { 0x2290, 36425 }, + { 0x22E5, 36428 }, + { 0x2292, 36435 }, + { 0x332B, 36441 }, + { 0x3356, 36443 }, + { 0x3320, 36445 }, + { 0x3319, 36447 }, + { 0x3336, 36449 }, + { 0x3317, 36451 }, + { 0x331A, 36453 }, + { 0x334A, 36455 }, + { 0x332E, 36457 }, + { 0x3315, 36459 }, + { 0x337F, 36461 }, + { 0x3316, 36463 }, + { 0x2729, 36465 }, + { 0x2282, 36469 }, + { 0x2286, 36471 }, + { 0x2AC3, 36476 }, + { 0x228A, 36484 }, + { 0x2ACB, 36490 }, + { 0x2AC7, 36496 }, + { 0x2AC9, 36501 }, + { 0x2AC5, 36507 }, + { 0x2ABD, 36512 }, + { 0x2ABF, 36515 }, + { 0x2AC1, 36520 }, + { 0x2AD5, 36525 }, + { 0x2AD3, 36528 }, + { 0x2979, 36531 }, + { 0x5806, 36535 }, + { 0x580B, 36539 }, + { 0x5802, 36543 }, + { 0x5823, 36547 }, + { 0x5826, 36552 }, + { 0x5824, 36557 }, + { 0x5825, 36562 }, + { 0x5827, 36567 }, + { 0x5800, 36572 }, + { 0x5804, 36576 }, + { 0x5801, 36580 }, + { 0x5805, 36584 }, + { 0x5803, 36588 }, + { 0x581B, 36592 }, + { 0x580C, 36596 }, + { 0x5816, 36600 }, + { 0x5809, 36604 }, + { 0x5822, 36608 }, + { 0x580E, 36612 }, + { 0x5807, 36616 }, + { 0x581F, 36620 }, + { 0x581D, 36624 }, + { 0x5818, 36628 }, + { 0x5819, 36632 }, + { 0x581E, 36636 }, + { 0x5821, 36640 }, + { 0x5814, 36644 }, + { 0x581C, 36648 }, + { 0x580D, 36652 }, + { 0x5812, 36656 }, + { 0x5817, 36660 }, + { 0x580A, 36664 }, + { 0x580F, 36668 }, + { 0x5808, 36672 }, + { 0x581A, 36676 }, + { 0x5820, 36680 }, + { 0x5815, 36684 }, + { 0x5810, 36688 }, + { 0x5813, 36692 }, + { 0x5811, 36696 }, + { 0x5828, 36700 }, + { 0x5829, 36704 }, + { 0x582A, 36708 }, + { 0x582B, 36712 }, + { 0x2403, 36716 }, + { 0x2419, 36721 }, + { 0x2404, 36726 }, + { 0x2417, 36731 }, + { 0x2407, 36737 }, + { 0x2410, 36740 }, + { 0x241C, 36745 }, + { 0x240C, 36749 }, + { 0x240A, 36753 }, + { 0x2400, 36757 }, + { 0x241F, 36760 }, + { 0x241D, 36764 }, + { 0x240F, 36768 }, + { 0x240E, 36772 }, + { 0x2420, 36776 }, + { 0x2402, 36779 }, + { 0x2401, 36784 }, + { 0x2418, 36789 }, + { 0x2421, 36792 }, + { 0x2425, 36795 }, + { 0x2411, 36800 }, + { 0x2412, 36805 }, + { 0x2414, 36810 }, + { 0x2413, 36815 }, + { 0x241B, 36820 }, + { 0x241E, 36823 }, + { 0x2405, 36827 }, + { 0x2424, 36830 }, + { 0x240D, 36833 }, + { 0x2415, 36837 }, + { 0x240B, 36841 }, + { 0x2408, 36845 }, + { 0x214F, 36848 }, + { 0x2409, 36852 }, + { 0x241A, 36856 }, + { 0x2426, 36859 }, + { 0x2406, 36864 }, + { 0x2416, 36867 }, + { 0x0700, 36871 }, + { 0x0743, 36875 }, + { 0x0744, 36880 }, + { 0x0706, 36885 }, + { 0x0707, 36889 }, + { 0x073D, 36893 }, + { 0x073E, 36896 }, + { 0x073A, 36899 }, + { 0x073B, 36902 }, + { 0x0749, 36905 }, + { 0x0736, 36907 }, + { 0x0737, 36910 }, + { 0x073F, 36913 }, + { 0x0745, 36915 }, + { 0x0746, 36919 }, + { 0x0739, 36923 }, + { 0x0738, 36927 }, + { 0x0725, 36931 }, + { 0x0717, 36934 }, + { 0x0726, 36937 }, + { 0x0721, 36940 }, + { 0x0722, 36943 }, + { 0x072C, 36946 }, + { 0x0718, 36949 }, + { 0x0712, 36952 }, + { 0x071A, 36955 }, + { 0x071F, 36958 }, + { 0x0729, 36961 }, + { 0x072A, 36964 }, + { 0x072B, 36967 }, + { 0x071B, 36970 }, + { 0x071C, 36973 }, + { 0x071D, 36977 }, + { 0x071E, 36980 }, + { 0x0719, 36984 }, + { 0x0710, 36987 }, + { 0x0724, 36990 }, + { 0x0713, 36994 }, + { 0x0714, 36997 }, + { 0x0728, 37001 }, + { 0x0715, 37004 }, + { 0x0720, 37007 }, + { 0x0716, 37010 }, + { 0x072D, 37015 }, + { 0x072E, 37019 }, + { 0x072F, 37023 }, + { 0x0723, 37027 }, + { 0x074F, 37030 }, + { 0x074E, 37034 }, + { 0x074D, 37038 }, + { 0x0727, 37042 }, + { 0x0711, 37046 }, + { 0x0730, 37050 }, + { 0x0731, 37053 }, + { 0x0732, 37056 }, + { 0x0733, 37059 }, + { 0x0734, 37062 }, + { 0x0735, 37065 }, + { 0x074A, 37068 }, + { 0x0747, 37070 }, + { 0x0748, 37074 }, + { 0x0740, 37078 }, + { 0x070B, 37081 }, + { 0x070C, 37084 }, + { 0x070D, 37087 }, + { 0x0742, 37090 }, + { 0x0741, 37092 }, + { 0x0702, 37094 }, + { 0x0704, 37098 }, + { 0x0709, 37101 }, + { 0x0705, 37106 }, + { 0x070A, 37109 }, + { 0x073C, 37111 }, + { 0x0701, 37114 }, + { 0x0703, 37118 }, + { 0x0708, 37121 }, + { 0x070F, 37126 }, + { 0x2649, 37129 }, + { 0x0C56, 37130 }, + { 0x0C7F, 37134 }, + { 0x0C4D, 37137 }, + { 0x0C03, 37140 }, + { 0x0C02, 37143 }, + { 0x0C3D, 37146 }, + { 0x0C01, 37149 }, + { 0x0C67, 37152 }, + { 0x0C6C, 37155 }, + { 0x0C68, 37158 }, + { 0x0C6B, 37161 }, + { 0x0C6A, 37164 }, + { 0x0C6F, 37167 }, + { 0x0C66, 37170 }, + { 0x0C6E, 37173 }, + { 0x0C6D, 37176 }, + { 0x0C69, 37179 }, + { 0x0C46, 37182 }, + { 0x0C3F, 37186 }, + { 0x0C4A, 37190 }, + { 0x0C41, 37194 }, + { 0x0C3E, 37198 }, + { 0x0C48, 37202 }, + { 0x0C4C, 37206 }, + { 0x0C47, 37210 }, + { 0x0C40, 37214 }, + { 0x0C4B, 37218 }, + { 0x0C42, 37222 }, + { 0x0C62, 37226 }, + { 0x0C43, 37231 }, + { 0x0C63, 37236 }, + { 0x0C44, 37241 }, + { 0x0C55, 37246 }, + { 0x0C05, 37249 }, + { 0x0C0E, 37252 }, + { 0x0C07, 37255 }, + { 0x0C12, 37258 }, + { 0x0C09, 37261 }, + { 0x0C06, 37264 }, + { 0x0C10, 37267 }, + { 0x0C14, 37270 }, + { 0x0C2C, 37273 }, + { 0x0C1A, 37276 }, + { 0x0C26, 37279 }, + { 0x0C0F, 37282 }, + { 0x0C17, 37285 }, + { 0x0C39, 37288 }, + { 0x0C08, 37291 }, + { 0x0C1C, 37294 }, + { 0x0C15, 37297 }, + { 0x0C32, 37300 }, + { 0x0C2E, 37303 }, + { 0x0C28, 37306 }, + { 0x0C13, 37309 }, + { 0x0C2A, 37312 }, + { 0x0C30, 37315 }, + { 0x0C38, 37318 }, + { 0x0C24, 37321 }, + { 0x0C0A, 37324 }, + { 0x0C35, 37327 }, + { 0x0C2F, 37330 }, + { 0x0C2D, 37333 }, + { 0x0C1B, 37336 }, + { 0x0C21, 37339 }, + { 0x0C27, 37342 }, + { 0x0C59, 37345 }, + { 0x0C18, 37348 }, + { 0x0C1D, 37351 }, + { 0x0C16, 37354 }, + { 0x0C33, 37357 }, + { 0x0C19, 37360 }, + { 0x0C23, 37363 }, + { 0x0C1E, 37366 }, + { 0x0C2B, 37369 }, + { 0x0C31, 37372 }, + { 0x0C36, 37375 }, + { 0x0C37, 37378 }, + { 0x0C25, 37381 }, + { 0x0C58, 37384 }, + { 0x0C1F, 37387 }, + { 0x0C22, 37390 }, + { 0x0C20, 37393 }, + { 0x0C0C, 37396 }, + { 0x0C0B, 37400 }, + { 0x0C61, 37404 }, + { 0x0C60, 37408 }, + { 0x0C79, 37412 }, + { 0x0C7C, 37421 }, + { 0x0C7A, 37430 }, + { 0x0C7D, 37439 }, + { 0x0C78, 37448 }, + { 0x0C7B, 37457 }, + { 0x0C7E, 37466 }, + { 0x07B0, 37475 }, + { 0x07A0, 37477 }, + { 0x07A1, 37480 }, + { 0x0784, 37483 }, + { 0x0780, 37486 }, + { 0x07B1, 37489 }, + { 0x0783, 37492 }, + { 0x0794, 37495 }, + { 0x079C, 37498 }, + { 0x07A2, 37501 }, + { 0x0799, 37504 }, + { 0x079A, 37507 }, + { 0x078C, 37510 }, + { 0x0798, 37513 }, + { 0x0787, 37516 }, + { 0x078A, 37519 }, + { 0x078E, 37522 }, + { 0x0786, 37525 }, + { 0x078D, 37528 }, + { 0x0789, 37531 }, + { 0x0782, 37534 }, + { 0x07A4, 37537 }, + { 0x0790, 37540 }, + { 0x0788, 37543 }, + { 0x07A5, 37546 }, + { 0x079F, 37549 }, + { 0x078B, 37552 }, + { 0x07A3, 37555 }, + { 0x079E, 37558 }, + { 0x079D, 37561 }, + { 0x079B, 37564 }, + { 0x0791, 37567 }, + { 0x0796, 37570 }, + { 0x0795, 37573 }, + { 0x0793, 37576 }, + { 0x0792, 37579 }, + { 0x0797, 37582 }, + { 0x078F, 37585 }, + { 0x0785, 37588 }, + { 0x0781, 37591 }, + { 0x07A6, 37594 }, + { 0x07AC, 37596 }, + { 0x07A8, 37598 }, + { 0x07AE, 37600 }, + { 0x07AA, 37602 }, + { 0x07A7, 37604 }, + { 0x07A9, 37606 }, + { 0x07AD, 37608 }, + { 0x07AF, 37610 }, + { 0x07AB, 37612 }, + { 0x29FB, 37614 }, + { 0x2AF6, 37616 }, + { 0x2034, 37619 }, + { 0x224B, 37621 }, + { 0x2AF7, 37623 }, + { 0x2AF8, 37626 }, + { 0x2AFB, 37629 }, + { 0x222D, 37633 }, + { 0x2AF5, 37635 }, + { 0x22AA, 37641 }, + { 0x2AF4, 37646 }, + { 0x2980, 37651 }, + { 0x2A68, 37655 }, + { 0x2A69, 37662 }, + { 0x20AE, 37669 }, + { 0x2319, 37671 }, + { 0x29A2, 37674 }, + { 0x2129, 37676 }, + { 0x214E, 37681 }, + { 0x2132, 37684 }, + { 0x214B, 37687 }, + { 0x2141, 37689 }, + { 0x2142, 37693 }, + { 0x2144, 37697 }, + { 0x2739, 37701 }, + { 0x2645, 37705 }, + { 0x2A2F, 37706 }, + { 0x2230, 37710 }, + { 0x00BD, 37712 }, + { 0x2155, 37716 }, + { 0x2159, 37720 }, + { 0x2153, 37724 }, + { 0x215B, 37728 }, + { 0x00BC, 37732 }, + { 0x2156, 37736 }, + { 0x2154, 37740 }, + { 0x215A, 37744 }, + { 0x215D, 37748 }, + { 0x2158, 37752 }, + { 0x215E, 37756 }, + { 0x2157, 37760 }, + { 0x215C, 37764 }, + { 0x00BE, 37768 }, + { 0x2240, 37772 }, + { 0x2100, 37774 }, + { 0x060B, 37776 }, + { 0x2697, 37778 }, + { 0x20B3, 37779 }, + { 0x2235, 37781 }, + { 0x09D7, 37782 }, + { 0x09BC, 37786 }, + { 0x09CD, 37789 }, + { 0x0983, 37792 }, + { 0x0982, 37795 }, + { 0x09BD, 37798 }, + { 0x0981, 37801 }, + { 0x09E7, 37804 }, + { 0x09EC, 37807 }, + { 0x09E8, 37810 }, + { 0x09EB, 37813 }, + { 0x09EA, 37816 }, + { 0x09EF, 37819 }, + { 0x09E6, 37822 }, + { 0x09EE, 37825 }, + { 0x09ED, 37828 }, + { 0x09E9, 37831 }, + { 0x09F2, 37834 }, + { 0x09F3, 37837 }, + { 0x09C7, 37840 }, + { 0x09BF, 37844 }, + { 0x09CB, 37848 }, + { 0x09C1, 37852 }, + { 0x09BE, 37856 }, + { 0x09C8, 37860 }, + { 0x09CC, 37864 }, + { 0x09C0, 37868 }, + { 0x09C2, 37872 }, + { 0x09E2, 37876 }, + { 0x09C3, 37881 }, + { 0x09E3, 37886 }, + { 0x09C4, 37891 }, + { 0x09FA, 37896 }, + { 0x0985, 37898 }, + { 0x098F, 37901 }, + { 0x0987, 37904 }, + { 0x0993, 37907 }, + { 0x0989, 37910 }, + { 0x0986, 37913 }, + { 0x0990, 37916 }, + { 0x0994, 37919 }, + { 0x09AC, 37922 }, + { 0x099A, 37925 }, + { 0x09A6, 37928 }, + { 0x0997, 37931 }, + { 0x09B9, 37934 }, + { 0x0988, 37937 }, + { 0x099C, 37940 }, + { 0x0995, 37943 }, + { 0x09B2, 37946 }, + { 0x09AE, 37949 }, + { 0x09A8, 37952 }, + { 0x09AA, 37955 }, + { 0x09B0, 37958 }, + { 0x09F1, 37961 }, + { 0x09F0, 37967 }, + { 0x09B8, 37973 }, + { 0x09A4, 37976 }, + { 0x098A, 37979 }, + { 0x09AF, 37982 }, + { 0x09AD, 37985 }, + { 0x099B, 37988 }, + { 0x09A1, 37991 }, + { 0x09A7, 37994 }, + { 0x0998, 37997 }, + { 0x099D, 38000 }, + { 0x0996, 38003 }, + { 0x0999, 38006 }, + { 0x09A3, 38009 }, + { 0x099E, 38012 }, + { 0x09AB, 38015 }, + { 0x09DD, 38018 }, + { 0x09DC, 38021 }, + { 0x09B6, 38024 }, + { 0x09B7, 38027 }, + { 0x09A5, 38030 }, + { 0x099F, 38033 }, + { 0x09DF, 38036 }, + { 0x09A2, 38039 }, + { 0x09A0, 38042 }, + { 0x09CE, 38045 }, + { 0x098C, 38049 }, + { 0x098B, 38053 }, + { 0x09E1, 38057 }, + { 0x09E0, 38061 }, + { 0x09F4, 38065 }, + { 0x09F8, 38069 }, + { 0x09F5, 38077 }, + { 0x09F7, 38081 }, + { 0x09F6, 38085 }, + { 0x09F9, 38089 }, + { 0x232C, 38093 }, + { 0x23E3, 38095 }, + { 0x226C, 38099 }, + { 0x2800, 38100 }, + { 0x2801, 38103 }, + { 0x2802, 38106 }, + { 0x2804, 38109 }, + { 0x2808, 38112 }, + { 0x2810, 38115 }, + { 0x2820, 38118 }, + { 0x2840, 38121 }, + { 0x2880, 38124 }, + { 0x2803, 38127 }, + { 0x2805, 38130 }, + { 0x2809, 38133 }, + { 0x2811, 38136 }, + { 0x2821, 38139 }, + { 0x2841, 38142 }, + { 0x2881, 38145 }, + { 0x2806, 38148 }, + { 0x280A, 38151 }, + { 0x2812, 38154 }, + { 0x2822, 38157 }, + { 0x2842, 38160 }, + { 0x2882, 38163 }, + { 0x280C, 38166 }, + { 0x2814, 38169 }, + { 0x2824, 38172 }, + { 0x2844, 38175 }, + { 0x2884, 38178 }, + { 0x2818, 38181 }, + { 0x2828, 38184 }, + { 0x2848, 38187 }, + { 0x2888, 38190 }, + { 0x2830, 38193 }, + { 0x2850, 38196 }, + { 0x2890, 38199 }, + { 0x2860, 38202 }, + { 0x28A0, 38205 }, + { 0x28C0, 38208 }, + { 0x2807, 38211 }, + { 0x280B, 38214 }, + { 0x2813, 38217 }, + { 0x2823, 38220 }, + { 0x2843, 38223 }, + { 0x2883, 38226 }, + { 0x280D, 38229 }, + { 0x2815, 38232 }, + { 0x2825, 38235 }, + { 0x2845, 38238 }, + { 0x2885, 38241 }, + { 0x2819, 38244 }, + { 0x2829, 38247 }, + { 0x2849, 38250 }, + { 0x2889, 38253 }, + { 0x2831, 38256 }, + { 0x2851, 38259 }, + { 0x2891, 38262 }, + { 0x2861, 38265 }, + { 0x28A1, 38268 }, + { 0x28C1, 38271 }, + { 0x280E, 38274 }, + { 0x2816, 38277 }, + { 0x2826, 38280 }, + { 0x2846, 38283 }, + { 0x2886, 38286 }, + { 0x281A, 38289 }, + { 0x282A, 38292 }, + { 0x284A, 38295 }, + { 0x288A, 38298 }, + { 0x2832, 38301 }, + { 0x2852, 38304 }, + { 0x2892, 38307 }, + { 0x2862, 38310 }, + { 0x28A2, 38313 }, + { 0x28C2, 38316 }, + { 0x281C, 38319 }, + { 0x282C, 38322 }, + { 0x284C, 38325 }, + { 0x288C, 38328 }, + { 0x2834, 38331 }, + { 0x2854, 38334 }, + { 0x2894, 38337 }, + { 0x2864, 38340 }, + { 0x28A4, 38343 }, + { 0x28C4, 38346 }, + { 0x2838, 38349 }, + { 0x2858, 38352 }, + { 0x2898, 38355 }, + { 0x2868, 38358 }, + { 0x28A8, 38361 }, + { 0x28C8, 38364 }, + { 0x2870, 38367 }, + { 0x28B0, 38370 }, + { 0x28D0, 38373 }, + { 0x28E0, 38376 }, + { 0x280F, 38379 }, + { 0x2817, 38382 }, + { 0x2827, 38385 }, + { 0x2847, 38388 }, + { 0x2887, 38391 }, + { 0x281B, 38394 }, + { 0x282B, 38397 }, + { 0x284B, 38400 }, + { 0x288B, 38403 }, + { 0x2833, 38406 }, + { 0x2853, 38409 }, + { 0x2893, 38412 }, + { 0x2863, 38415 }, + { 0x28A3, 38418 }, + { 0x28C3, 38421 }, + { 0x281D, 38424 }, + { 0x282D, 38427 }, + { 0x284D, 38430 }, + { 0x288D, 38433 }, + { 0x2835, 38436 }, + { 0x2855, 38439 }, + { 0x2895, 38442 }, + { 0x2865, 38445 }, + { 0x28A5, 38448 }, + { 0x28C5, 38451 }, + { 0x2839, 38454 }, + { 0x2859, 38457 }, + { 0x2899, 38460 }, + { 0x2869, 38463 }, + { 0x28A9, 38466 }, + { 0x28C9, 38469 }, + { 0x2871, 38472 }, + { 0x28B1, 38475 }, + { 0x28D1, 38478 }, + { 0x28E1, 38481 }, + { 0x281E, 38484 }, + { 0x282E, 38487 }, + { 0x284E, 38490 }, + { 0x288E, 38493 }, + { 0x2836, 38496 }, + { 0x2856, 38499 }, + { 0x2896, 38502 }, + { 0x2866, 38505 }, + { 0x28A6, 38508 }, + { 0x28C6, 38511 }, + { 0x283A, 38514 }, + { 0x285A, 38517 }, + { 0x289A, 38520 }, + { 0x286A, 38523 }, + { 0x28AA, 38526 }, + { 0x28CA, 38529 }, + { 0x2872, 38532 }, + { 0x28B2, 38535 }, + { 0x28D2, 38538 }, + { 0x28E2, 38541 }, + { 0x283C, 38544 }, + { 0x285C, 38547 }, + { 0x289C, 38550 }, + { 0x286C, 38553 }, + { 0x28AC, 38556 }, + { 0x28CC, 38559 }, + { 0x2874, 38562 }, + { 0x28B4, 38565 }, + { 0x28D4, 38568 }, + { 0x28E4, 38571 }, + { 0x2878, 38574 }, + { 0x28B8, 38577 }, + { 0x28D8, 38580 }, + { 0x28E8, 38583 }, + { 0x28F0, 38586 }, + { 0x281F, 38589 }, + { 0x282F, 38592 }, + { 0x284F, 38595 }, + { 0x288F, 38598 }, + { 0x2837, 38601 }, + { 0x2857, 38604 }, + { 0x2897, 38607 }, + { 0x2867, 38610 }, + { 0x28A7, 38613 }, + { 0x28C7, 38616 }, + { 0x283B, 38619 }, + { 0x285B, 38622 }, + { 0x289B, 38625 }, + { 0x286B, 38628 }, + { 0x28AB, 38631 }, + { 0x28CB, 38634 }, + { 0x2873, 38637 }, + { 0x28B3, 38640 }, + { 0x28D3, 38643 }, + { 0x28E3, 38646 }, + { 0x283D, 38649 }, + { 0x285D, 38652 }, + { 0x289D, 38655 }, + { 0x286D, 38658 }, + { 0x28AD, 38661 }, + { 0x28CD, 38664 }, + { 0x2875, 38667 }, + { 0x28B5, 38670 }, + { 0x28D5, 38673 }, + { 0x28E5, 38676 }, + { 0x2879, 38679 }, + { 0x28B9, 38682 }, + { 0x28D9, 38685 }, + { 0x28E9, 38688 }, + { 0x28F1, 38691 }, + { 0x283E, 38694 }, + { 0x285E, 38697 }, + { 0x289E, 38700 }, + { 0x286E, 38703 }, + { 0x28AE, 38706 }, + { 0x28CE, 38709 }, + { 0x2876, 38712 }, + { 0x28B6, 38715 }, + { 0x28D6, 38718 }, + { 0x28E6, 38721 }, + { 0x287A, 38724 }, + { 0x28BA, 38727 }, + { 0x28DA, 38730 }, + { 0x28EA, 38733 }, + { 0x28F2, 38736 }, + { 0x287C, 38739 }, + { 0x28BC, 38742 }, + { 0x28DC, 38745 }, + { 0x28EC, 38748 }, + { 0x28F4, 38751 }, + { 0x28F8, 38754 }, + { 0x283F, 38757 }, + { 0x285F, 38760 }, + { 0x289F, 38763 }, + { 0x286F, 38766 }, + { 0x28AF, 38769 }, + { 0x28CF, 38772 }, + { 0x2877, 38775 }, + { 0x28B7, 38778 }, + { 0x28D7, 38781 }, + { 0x28E7, 38784 }, + { 0x287B, 38787 }, + { 0x28BB, 38790 }, + { 0x28DB, 38793 }, + { 0x28EB, 38796 }, + { 0x28F3, 38799 }, + { 0x287D, 38802 }, + { 0x28BD, 38805 }, + { 0x28DD, 38808 }, + { 0x28ED, 38811 }, + { 0x28F5, 38814 }, + { 0x28F9, 38817 }, + { 0x287E, 38820 }, + { 0x28BE, 38823 }, + { 0x28DE, 38826 }, + { 0x28EE, 38829 }, + { 0x28F6, 38832 }, + { 0x28FA, 38835 }, + { 0x28FC, 38838 }, + { 0x287F, 38841 }, + { 0x28BF, 38844 }, + { 0x28DF, 38847 }, + { 0x28EF, 38850 }, + { 0x28F7, 38853 }, + { 0x28FB, 38856 }, + { 0x28FD, 38859 }, + { 0x28FE, 38862 }, + { 0x28FF, 38865 }, + { 0x2621, 38868 }, + { 0x00B8, 38870 }, + { 0x2299, 38871 }, + { 0x229D, 38874 }, + { 0x2742, 38876 }, + { 0x2295, 38882 }, + { 0x229A, 38884 }, + { 0x2460, 38887 }, + { 0x2465, 38890 }, + { 0x2461, 38893 }, + { 0x2464, 38896 }, + { 0x2463, 38899 }, + { 0x2468, 38902 }, + { 0x24EA, 38905 }, + { 0x2467, 38908 }, + { 0x2466, 38911 }, + { 0x2462, 38914 }, + { 0x27B2, 38917 }, + { 0x24D0, 38922 }, + { 0x24D1, 38927 }, + { 0x24D2, 38932 }, + { 0x24D3, 38937 }, + { 0x24D4, 38942 }, + { 0x24D5, 38947 }, + { 0x24D6, 38952 }, + { 0x24D7, 38957 }, + { 0x24D8, 38962 }, + { 0x24D9, 38967 }, + { 0x24DA, 38972 }, + { 0x24DB, 38977 }, + { 0x24DC, 38982 }, + { 0x24DD, 38987 }, + { 0x24DE, 38992 }, + { 0x24DF, 38997 }, + { 0x24E0, 39002 }, + { 0x24E1, 39007 }, + { 0x24E2, 39012 }, + { 0x24E3, 39017 }, + { 0x24E4, 39022 }, + { 0x24E5, 39027 }, + { 0x24E6, 39032 }, + { 0x24E7, 39037 }, + { 0x24E8, 39042 }, + { 0x24E9, 39047 }, + { 0x24B6, 39052 }, + { 0x24B7, 39057 }, + { 0x24B8, 39062 }, + { 0x24B9, 39067 }, + { 0x24BA, 39072 }, + { 0x24BB, 39077 }, + { 0x24BC, 39082 }, + { 0x24BD, 39087 }, + { 0x24BE, 39092 }, + { 0x24BF, 39097 }, + { 0x24C0, 39102 }, + { 0x24C1, 39107 }, + { 0x24C2, 39112 }, + { 0x24C3, 39117 }, + { 0x24C4, 39122 }, + { 0x24C5, 39127 }, + { 0x24C6, 39132 }, + { 0x24C7, 39137 }, + { 0x24C8, 39142 }, + { 0x24C9, 39147 }, + { 0x24CA, 39152 }, + { 0x24CB, 39157 }, + { 0x24CC, 39162 }, + { 0x24CD, 39167 }, + { 0x24CE, 39172 }, + { 0x24CF, 39177 }, + { 0x2296, 39182 }, + { 0x2297, 39184 }, + { 0x272A, 39186 }, + { 0x29BE, 39189 }, + { 0x29BF, 39192 }, + { 0x229C, 39194 }, + { 0x3266, 39196 }, + { 0x3274, 39199 }, + { 0x3268, 39203 }, + { 0x3276, 39206 }, + { 0x326D, 39210 }, + { 0x327B, 39213 }, + { 0x3267, 39217 }, + { 0x3275, 39220 }, + { 0x327E, 39224 }, + { 0x3264, 39228 }, + { 0x3272, 39231 }, + { 0x3261, 39235 }, + { 0x326F, 39238 }, + { 0x3265, 39242 }, + { 0x3273, 39245 }, + { 0x3263, 39249 }, + { 0x3271, 39252 }, + { 0x3260, 39256 }, + { 0x326E, 39259 }, + { 0x3262, 39263 }, + { 0x3270, 39266 }, + { 0x3269, 39270 }, + { 0x3277, 39273 }, + { 0x326A, 39277 }, + { 0x3278, 39280 }, + { 0x326C, 39284 }, + { 0x327A, 39287 }, + { 0x326B, 39291 }, + { 0x3279, 39294 }, + { 0x327D, 39298 }, + { 0x327C, 39302 }, + { 0x2469, 39306 }, + { 0x32BF, 39309 }, + { 0x32B5, 39312 }, + { 0x32B6, 39315 }, + { 0x32BB, 39319 }, + { 0x32B7, 39323 }, + { 0x32BA, 39327 }, + { 0x32B9, 39331 }, + { 0x32BE, 39335 }, + { 0x32BD, 39339 }, + { 0x32BC, 39343 }, + { 0x32B8, 39347 }, + { 0x246A, 39351 }, + { 0x325A, 39354 }, + { 0x325B, 39357 }, + { 0x32B1, 39361 }, + { 0x325C, 39365 }, + { 0x325F, 39369 }, + { 0x325E, 39373 }, + { 0x32B4, 39377 }, + { 0x32B3, 39381 }, + { 0x32B2, 39385 }, + { 0x325D, 39389 }, + { 0x246B, 39393 }, + { 0x2473, 39396 }, + { 0x3251, 39399 }, + { 0x3256, 39403 }, + { 0x3252, 39407 }, + { 0x3255, 39411 }, + { 0x3254, 39415 }, + { 0x3259, 39419 }, + { 0x3258, 39423 }, + { 0x3257, 39427 }, + { 0x3253, 39431 }, + { 0x246E, 39435 }, + { 0x246F, 39438 }, + { 0x2471, 39441 }, + { 0x246D, 39444 }, + { 0x2472, 39447 }, + { 0x246C, 39450 }, + { 0x2470, 39453 }, + { 0x3036, 39456 }, + { 0x29B8, 39459 }, + { 0x229B, 39462 }, + { 0x2A38, 39465 }, + { 0x2298, 39468 }, + { 0x32D0, 39471 }, + { 0x32D3, 39474 }, + { 0x32D1, 39477 }, + { 0x32D4, 39480 }, + { 0x32D2, 39483 }, + { 0x32E9, 39486 }, + { 0x32EC, 39489 }, + { 0x32EA, 39492 }, + { 0x32ED, 39495 }, + { 0x32EB, 39498 }, + { 0x32D5, 39501 }, + { 0x32D8, 39504 }, + { 0x32D6, 39507 }, + { 0x32D9, 39510 }, + { 0x32D7, 39513 }, + { 0x32EE, 39516 }, + { 0x32F1, 39519 }, + { 0x32EF, 39522 }, + { 0x32F2, 39525 }, + { 0x32F0, 39528 }, + { 0x32E4, 39531 }, + { 0x32E7, 39534 }, + { 0x32E5, 39537 }, + { 0x32E8, 39540 }, + { 0x32E6, 39543 }, + { 0x32F6, 39546 }, + { 0x32F9, 39549 }, + { 0x32F7, 39552 }, + { 0x32FA, 39555 }, + { 0x32F8, 39558 }, + { 0x32DA, 39561 }, + { 0x32DD, 39564 }, + { 0x32DB, 39567 }, + { 0x32DE, 39570 }, + { 0x32DC, 39573 }, + { 0x32DF, 39576 }, + { 0x32E2, 39579 }, + { 0x32E0, 39582 }, + { 0x32E3, 39585 }, + { 0x32E1, 39588 }, + { 0x32FB, 39591 }, + { 0x32FD, 39594 }, + { 0x32FC, 39597 }, + { 0x32FE, 39600 }, + { 0x32F3, 39603 }, + { 0x32F5, 39606 }, + { 0x32F4, 39609 }, + { 0x29B7, 39612 }, + { 0x238A, 39614 }, + { 0x29B6, 39617 }, + { 0x32A6, 39620 }, + { 0x3280, 39623 }, + { 0x3285, 39626 }, + { 0x3290, 39629 }, + { 0x3289, 39632 }, + { 0x3281, 39635 }, + { 0x32A2, 39638 }, + { 0x328B, 39641 }, + { 0x3284, 39644 }, + { 0x3283, 39647 }, + { 0x3292, 39650 }, + { 0x32A4, 39653 }, + { 0x32A0, 39656 }, + { 0x32A7, 39659 }, + { 0x329A, 39662 }, + { 0x328A, 39665 }, + { 0x3294, 39668 }, + { 0x3288, 39671 }, + { 0x32A1, 39674 }, + { 0x328D, 39677 }, + { 0x328F, 39680 }, + { 0x3287, 39683 }, + { 0x3298, 39686 }, + { 0x328E, 39689 }, + { 0x32B0, 39692 }, + { 0x329E, 39695 }, + { 0x32A8, 39698 }, + { 0x3286, 39701 }, + { 0x3291, 39704 }, + { 0x32AB, 39707 }, + { 0x3282, 39710 }, + { 0x328C, 39713 }, + { 0x32A5, 39716 }, + { 0x329B, 39719 }, + { 0x3299, 39722 }, + { 0x32A3, 39725 }, + { 0x3293, 39728 }, + { 0x3295, 39731 }, + { 0x32AF, 39734 }, + { 0x32A9, 39737 }, + { 0x32AA, 39740 }, + { 0x32AE, 39743 }, + { 0x329C, 39746 }, + { 0x329F, 39749 }, + { 0x329D, 39752 }, + { 0x3296, 39755 }, + { 0x32AC, 39758 }, + { 0x32AD, 39761 }, + { 0x3297, 39764 }, + { 0x29C0, 39767 }, + { 0x2389, 39769 }, + { 0x29C1, 39774 }, + { 0x29B9, 39776 }, + { 0x2A36, 39778 }, + { 0x29BC, 39784 }, + { 0x2332, 39788 }, + { 0x222E, 39790 }, + { 0x2694, 39792 }, + { 0x7800, 39794 }, + { 0x7801, 39797 }, + { 0x7802, 39800 }, + { 0x7803, 39803 }, + { 0x7804, 39806 }, + { 0x7805, 39809 }, + { 0x7808, 39812 }, + { 0x780A, 39815 }, + { 0x780B, 39818 }, + { 0x780C, 39821 }, + { 0x780D, 39824 }, + { 0x780E, 39827 }, + { 0x780F, 39830 }, + { 0x7810, 39833 }, + { 0x7811, 39836 }, + { 0x7812, 39839 }, + { 0x7813, 39842 }, + { 0x7814, 39845 }, + { 0x7815, 39848 }, + { 0x7816, 39851 }, + { 0x7817, 39854 }, + { 0x7818, 39857 }, + { 0x7819, 39860 }, + { 0x781A, 39863 }, + { 0x781B, 39866 }, + { 0x781C, 39869 }, + { 0x781D, 39872 }, + { 0x781E, 39875 }, + { 0x781F, 39878 }, + { 0x7820, 39881 }, + { 0x7821, 39884 }, + { 0x7822, 39887 }, + { 0x7823, 39890 }, + { 0x7824, 39893 }, + { 0x7825, 39896 }, + { 0x7826, 39899 }, + { 0x7827, 39902 }, + { 0x7828, 39905 }, + { 0x7829, 39908 }, + { 0x782A, 39911 }, + { 0x782B, 39914 }, + { 0x782C, 39917 }, + { 0x782D, 39920 }, + { 0x782E, 39923 }, + { 0x782F, 39926 }, + { 0x7830, 39929 }, + { 0x7831, 39932 }, + { 0x7832, 39935 }, + { 0x7833, 39938 }, + { 0x7834, 39941 }, + { 0x7835, 39944 }, + { 0x7837, 39947 }, + { 0x7838, 39950 }, + { 0x783C, 39953 }, + { 0x783F, 39956 }, + { 0x2396, 39959 }, + { 0x7438, 39963 }, + { 0x7434, 39967 }, + { 0x7441, 39971 }, + { 0x744A, 39975 }, + { 0x744B, 39979 }, + { 0x744C, 39983 }, + { 0x7449, 39987 }, + { 0x7445, 39991 }, + { 0x744F, 39995 }, + { 0x744E, 39999 }, + { 0x7435, 40003 }, + { 0x7436, 40007 }, + { 0x743A, 40011 }, + { 0x743C, 40015 }, + { 0x744D, 40019 }, + { 0x7447, 40023 }, + { 0x7443, 40027 }, + { 0x7440, 40031 }, + { 0x743E, 40035 }, + { 0x743F, 40039 }, + { 0x7439, 40043 }, + { 0x743B, 40047 }, + { 0x7442, 40051 }, + { 0x7437, 40055 }, + { 0x7446, 40059 }, + { 0x743D, 40063 }, + { 0x742A, 40067 }, + { 0x7429, 40072 }, + { 0x7428, 40077 }, + { 0x742C, 40082 }, + { 0x742B, 40087 }, + { 0x742D, 40092 }, + { 0x7444, 40097 }, + { 0x7448, 40101 }, + { 0x7430, 40105 }, + { 0x742F, 40110 }, + { 0x742E, 40115 }, + { 0x7432, 40120 }, + { 0x7431, 40125 }, + { 0x7433, 40130 }, + { 0x7410, 40135 }, + { 0x740C, 40139 }, + { 0x7419, 40143 }, + { 0x7422, 40147 }, + { 0x7423, 40151 }, + { 0x7424, 40155 }, + { 0x7421, 40159 }, + { 0x741D, 40163 }, + { 0x7427, 40167 }, + { 0x7426, 40171 }, + { 0x740D, 40175 }, + { 0x740E, 40179 }, + { 0x7412, 40183 }, + { 0x7414, 40187 }, + { 0x7425, 40191 }, + { 0x741F, 40195 }, + { 0x741B, 40199 }, + { 0x7418, 40203 }, + { 0x7416, 40207 }, + { 0x7417, 40211 }, + { 0x7411, 40215 }, + { 0x7413, 40219 }, + { 0x741A, 40223 }, + { 0x740F, 40227 }, + { 0x741E, 40231 }, + { 0x7415, 40235 }, + { 0x7402, 40239 }, + { 0x7401, 40244 }, + { 0x7400, 40249 }, + { 0x7404, 40254 }, + { 0x7403, 40259 }, + { 0x7405, 40264 }, + { 0x741C, 40269 }, + { 0x7420, 40273 }, + { 0x7408, 40277 }, + { 0x7407, 40282 }, + { 0x7406, 40287 }, + { 0x740A, 40292 }, + { 0x7409, 40297 }, + { 0x740B, 40302 }, + { 0x2B18, 40307 }, + { 0x2B16, 40312 }, + { 0x2B17, 40317 }, + { 0x2B19, 40322 }, + { 0x22C4, 40327 }, + { 0x2780, 40329 }, + { 0x2785, 40334 }, + { 0x2781, 40339 }, + { 0x2784, 40344 }, + { 0x2783, 40349 }, + { 0x2788, 40354 }, + { 0x2787, 40359 }, + { 0x2786, 40364 }, + { 0x2782, 40369 }, + { 0x2789, 40374 }, + { 0x2776, 40379 }, + { 0x277B, 40384 }, + { 0x2777, 40389 }, + { 0x277A, 40394 }, + { 0x2779, 40399 }, + { 0x277E, 40404 }, + { 0x277D, 40409 }, + { 0x277C, 40414 }, + { 0x2778, 40419 }, + { 0x277F, 40424 }, + { 0x278A, 40429 }, + { 0x278F, 40435 }, + { 0x278B, 40441 }, + { 0x278E, 40447 }, + { 0x278D, 40453 }, + { 0x2792, 40459 }, + { 0x2791, 40465 }, + { 0x2790, 40471 }, + { 0x278C, 40477 }, + { 0x2793, 40483 }, + { 0x2223, 40489 }, + { 0x26AE, 40490 }, + { 0x26A3, 40492 }, + { 0x26A2, 40495 }, + { 0x20AF, 40498 }, + { 0x2208, 40500 }, + { 0x22F5, 40502 }, + { 0x22F9, 40507 }, + { 0x22F2, 40513 }, + { 0x22F6, 40519 }, + { 0x22F8, 40523 }, + { 0x22F3, 40527 }, + { 0x27D2, 40537 }, + { 0x2AD9, 40541 }, + { 0x292F, 40545 }, + { 0x292C, 40551 }, + { 0x25C9, 40556 }, + { 0x2ADC, 40557 }, + { 0x26B1, 40558 }, + { 0x20B2, 40560 }, + { 0x1734, 40562 }, + { 0x1732, 40565 }, + { 0x1733, 40569 }, + { 0x1720, 40573 }, + { 0x1721, 40576 }, + { 0x1722, 40579 }, + { 0x172A, 40582 }, + { 0x1727, 40585 }, + { 0x1724, 40588 }, + { 0x1731, 40591 }, + { 0x1723, 40594 }, + { 0x172E, 40597 }, + { 0x172B, 40600 }, + { 0x1728, 40603 }, + { 0x1729, 40606 }, + { 0x172D, 40609 }, + { 0x1730, 40612 }, + { 0x1726, 40615 }, + { 0x172F, 40618 }, + { 0x172C, 40621 }, + { 0x1725, 40624 }, + { 0x20B4, 40627 }, + { 0x206C, 40629 }, + { 0x206A, 40633 }, + { 0x25D9, 40636 }, + { 0x25D8, 40639 }, + { 0x2643, 40641 }, + { 0x0CD6, 40642 }, + { 0x0CBC, 40646 }, + { 0x0CCD, 40649 }, + { 0x0C83, 40652 }, + { 0x0C82, 40655 }, + { 0x0CBD, 40658 }, + { 0x0CF1, 40661 }, + { 0x0CF2, 40664 }, + { 0x0CE7, 40667 }, + { 0x0CEC, 40670 }, + { 0x0CE8, 40673 }, + { 0x0CEB, 40676 }, + { 0x0CEA, 40679 }, + { 0x0CEF, 40682 }, + { 0x0CE6, 40685 }, + { 0x0CEE, 40688 }, + { 0x0CED, 40691 }, + { 0x0CE9, 40694 }, + { 0x0CC6, 40697 }, + { 0x0CBF, 40701 }, + { 0x0CCA, 40705 }, + { 0x0CC1, 40709 }, + { 0x0CBE, 40713 }, + { 0x0CC8, 40717 }, + { 0x0CCC, 40721 }, + { 0x0CC7, 40725 }, + { 0x0CC0, 40729 }, + { 0x0CCB, 40733 }, + { 0x0CC2, 40737 }, + { 0x0CE2, 40741 }, + { 0x0CC3, 40746 }, + { 0x0CE3, 40751 }, + { 0x0CC4, 40756 }, + { 0x0CD5, 40761 }, + { 0x0C85, 40764 }, + { 0x0C8E, 40767 }, + { 0x0C87, 40770 }, + { 0x0C92, 40773 }, + { 0x0C89, 40776 }, + { 0x0C86, 40779 }, + { 0x0C90, 40782 }, + { 0x0C94, 40785 }, + { 0x0CAC, 40788 }, + { 0x0C9A, 40791 }, + { 0x0CA6, 40794 }, + { 0x0C8F, 40797 }, + { 0x0CDE, 40800 }, + { 0x0C97, 40803 }, + { 0x0CB9, 40806 }, + { 0x0C88, 40809 }, + { 0x0C9C, 40812 }, + { 0x0C95, 40815 }, + { 0x0CB2, 40818 }, + { 0x0CAE, 40821 }, + { 0x0CA8, 40824 }, + { 0x0C93, 40827 }, + { 0x0CAA, 40830 }, + { 0x0CB0, 40833 }, + { 0x0CB8, 40836 }, + { 0x0CA4, 40839 }, + { 0x0C8A, 40842 }, + { 0x0CB5, 40845 }, + { 0x0CAF, 40848 }, + { 0x0CAD, 40851 }, + { 0x0C9B, 40854 }, + { 0x0CA1, 40857 }, + { 0x0CA7, 40860 }, + { 0x0C98, 40863 }, + { 0x0C9D, 40866 }, + { 0x0C96, 40869 }, + { 0x0CB3, 40872 }, + { 0x0C99, 40875 }, + { 0x0CA3, 40878 }, + { 0x0C9E, 40881 }, + { 0x0CAB, 40884 }, + { 0x0CB1, 40887 }, + { 0x0CB6, 40890 }, + { 0x0CB7, 40893 }, + { 0x0CA5, 40896 }, + { 0x0C9F, 40899 }, + { 0x0CA2, 40902 }, + { 0x0CA0, 40905 }, + { 0x0C8C, 40908 }, + { 0x0C8B, 40912 }, + { 0x0CE1, 40916 }, + { 0x0CE0, 40920 }, + { 0x32CF, 40924 }, + { 0x2228, 40927 }, + { 0x2A52, 40929 }, + { 0x2A62, 40934 }, + { 0x2A63, 40939 }, + { 0x2A5B, 40944 }, + { 0x2A5D, 40949 }, + { 0x2A59, 40954 }, + { 0x2227, 40959 }, + { 0x2A51, 40961 }, + { 0x2A5E, 40966 }, + { 0x2A60, 40971 }, + { 0x2A5A, 40976 }, + { 0x2A5F, 40981 }, + { 0x2A5C, 40985 }, + { 0x25CA, 40990 }, + { 0x27E0, 40991 }, + { 0xA010, 40996 }, + { 0xA019, 41001 }, + { 0xA007, 41006 }, + { 0xA004, 41011 }, + { 0xA015, 41015 }, + { 0xA01E, 41020 }, + { 0xA00C, 41025 }, + { 0xA011, 41030 }, + { 0xA01A, 41035 }, + { 0xA008, 41040 }, + { 0xA02B, 41045 }, + { 0xA000, 41048 }, + { 0xA014, 41052 }, + { 0xA01D, 41057 }, + { 0xA00B, 41062 }, + { 0xA013, 41067 }, + { 0xA01C, 41072 }, + { 0xA00A, 41077 }, + { 0xA018, 41082 }, + { 0xA021, 41087 }, + { 0xA00F, 41092 }, + { 0xA022, 41097 }, + { 0xA002, 41100 }, + { 0xA017, 41104 }, + { 0xA020, 41109 }, + { 0xA00E, 41114 }, + { 0xA005, 41119 }, + { 0xA02A, 41123 }, + { 0xA003, 41126 }, + { 0xA016, 41130 }, + { 0xA01F, 41135 }, + { 0xA00D, 41140 }, + { 0xA001, 41145 }, + { 0xA012, 41149 }, + { 0xA01B, 41154 }, + { 0xA009, 41159 }, + { 0xA006, 41164 }, + { 0xA028, 41168 }, + { 0xA024, 41171 }, + { 0xA023, 41174 }, + { 0xA026, 41177 }, + { 0xA027, 41180 }, + { 0xA029, 41183 }, + { 0xA025, 41186 }, + { 0x2720, 41189 }, + { 0x263F, 41191 }, + { 0x22EF, 41192 }, + { 0x9121, 41195 }, + { 0x9122, 41199 }, + { 0x9123, 41203 }, + { 0x9124, 41209 }, + { 0x911E, 41215 }, + { 0x911F, 41219 }, + { 0x9120, 41225 }, + { 0x9143, 41231 }, + { 0x918E, 41235 }, + { 0x910A, 41238 }, + { 0x9196, 41242 }, + { 0x9135, 41245 }, + { 0x9109, 41249 }, + { 0x91A8, 41253 }, + { 0x9176, 41258 }, + { 0x9174, 41262 }, + { 0x9178, 41266 }, + { 0x917A, 41270 }, + { 0x9164, 41274 }, + { 0x9142, 41280 }, + { 0x91DD, 41286 }, + { 0x910C, 41290 }, + { 0x91B4, 41293 }, + { 0x91B5, 41296 }, + { 0x9125, 41300 }, + { 0x9126, 41304 }, + { 0x912C, 41308 }, + { 0x912D, 41312 }, + { 0x91C0, 41316 }, + { 0x91BF, 41320 }, + { 0x915E, 41324 }, + { 0x913C, 41328 }, + { 0x91B0, 41332 }, + { 0x9106, 41337 }, + { 0x9153, 41342 }, + { 0x9152, 41347 }, + { 0x9159, 41352 }, + { 0x9144, 41356 }, + { 0x9197, 41360 }, + { 0x919A, 41363 }, + { 0x9199, 41367 }, + { 0x9157, 41371 }, + { 0x91B3, 41375 }, + { 0x9175, 41379 }, + { 0x9173, 41383 }, + { 0x9177, 41387 }, + { 0x9179, 41391 }, + { 0x9114, 41395 }, + { 0x915C, 41398 }, + { 0x91CF, 41401 }, + { 0x9102, 41404 }, + { 0x9191, 41408 }, + { 0x9195, 41411 }, + { 0x9194, 41417 }, + { 0x91B7, 41422 }, + { 0x91C1, 41425 }, + { 0x91C2, 41430 }, + { 0x9190, 41435 }, + { 0x913A, 41438 }, + { 0x91AF, 41442 }, + { 0x91AE, 41447 }, + { 0x918F, 41451 }, + { 0x9107, 41454 }, + { 0x910B, 41459 }, + { 0x9130, 41462 }, + { 0x9131, 41466 }, + { 0x9105, 41470 }, + { 0x91D3, 41474 }, + { 0x915D, 41477 }, + { 0x913B, 41481 }, + { 0x9112, 41485 }, + { 0x91B8, 41489 }, + { 0x91C3, 41492 }, + { 0x9145, 41496 }, + { 0x91D5, 41501 }, + { 0x9134, 41504 }, + { 0x9104, 41508 }, + { 0x91A9, 41512 }, + { 0x912B, 41516 }, + { 0x912A, 41520 }, + { 0x9101, 41524 }, + { 0x9160, 41528 }, + { 0x913E, 41532 }, + { 0x91B6, 41536 }, + { 0x91BB, 41539 }, + { 0x91C5, 41542 }, + { 0x91BC, 41546 }, + { 0x9136, 41550 }, + { 0x9137, 41554 }, + { 0x9108, 41558 }, + { 0x9100, 41562 }, + { 0x91D2, 41566 }, + { 0x9147, 41570 }, + { 0x9146, 41575 }, + { 0x918D, 41580 }, + { 0x91C7, 41583 }, + { 0x91C9, 41590 }, + { 0x91C8, 41598 }, + { 0x91CA, 41605 }, + { 0x91CB, 41612 }, + { 0x91CC, 41619 }, + { 0x91CD, 41627 }, + { 0x91CE, 41635 }, + { 0x9115, 41643 }, + { 0x9113, 41646 }, + { 0x915B, 41649 }, + { 0x915A, 41654 }, + { 0x9110, 41659 }, + { 0x9111, 41662 }, + { 0x912E, 41666 }, + { 0x912F, 41670 }, + { 0x91D4, 41674 }, + { 0x915F, 41677 }, + { 0x913D, 41681 }, + { 0x9133, 41685 }, + { 0x9132, 41690 }, + { 0x9103, 41695 }, + { 0x91D7, 41700 }, + { 0x916A, 41703 }, + { 0x916B, 41707 }, + { 0x916C, 41711 }, + { 0x9198, 41715 }, + { 0x9129, 41719 }, + { 0x9158, 41724 }, + { 0x9116, 41728 }, + { 0x919B, 41732 }, + { 0x919C, 41736 }, + { 0x919D, 41740 }, + { 0x919E, 41744 }, + { 0x919F, 41748 }, + { 0x91A0, 41752 }, + { 0x91A1, 41756 }, + { 0x91A2, 41760 }, + { 0x91A3, 41764 }, + { 0x91A4, 41768 }, + { 0x91A5, 41772 }, + { 0x910D, 41776 }, + { 0x910E, 41780 }, + { 0x910F, 41784 }, + { 0x911B, 41788 }, + { 0x91D8, 41792 }, + { 0x91DC, 41795 }, + { 0x9149, 41799 }, + { 0x9151, 41805 }, + { 0x9150, 41812 }, + { 0x9148, 41819 }, + { 0x914F, 41825 }, + { 0x914E, 41831 }, + { 0x914B, 41837 }, + { 0x914A, 41843 }, + { 0x914D, 41849 }, + { 0x914C, 41855 }, + { 0x9117, 41861 }, + { 0x91AB, 41865 }, + { 0x9186, 41870 }, + { 0x9189, 41874 }, + { 0x9185, 41878 }, + { 0x91AA, 41882 }, + { 0x9187, 41887 }, + { 0x91AD, 41891 }, + { 0x9165, 41896 }, + { 0x9182, 41900 }, + { 0x9188, 41904 }, + { 0x917B, 41908 }, + { 0x918A, 41912 }, + { 0x916E, 41917 }, + { 0x916F, 41921 }, + { 0x9170, 41925 }, + { 0x9171, 41929 }, + { 0x9172, 41933 }, + { 0x917D, 41937 }, + { 0x918B, 41941 }, + { 0x917F, 41946 }, + { 0x91AC, 41950 }, + { 0x917C, 41954 }, + { 0x9167, 41958 }, + { 0x9168, 41962 }, + { 0x9169, 41966 }, + { 0x916D, 41970 }, + { 0x9166, 41975 }, + { 0x917E, 41980 }, + { 0x9181, 41984 }, + { 0x9180, 41988 }, + { 0x9192, 41992 }, + { 0x911A, 41995 }, + { 0x9119, 41999 }, + { 0x91B1, 42003 }, + { 0x91B2, 42007 }, + { 0x91D0, 42011 }, + { 0x91D1, 42016 }, + { 0x91D9, 42021 }, + { 0x91DA, 42024 }, + { 0x91D6, 42028 }, + { 0x91DB, 42031 }, + { 0x9161, 42035 }, + { 0x913F, 42039 }, + { 0x9183, 42043 }, + { 0x9184, 42047 }, + { 0x91C4, 42051 }, + { 0x91BA, 42055 }, + { 0x91B9, 42059 }, + { 0x91C6, 42063 }, + { 0x91BE, 42067 }, + { 0x91BD, 42071 }, + { 0x911C, 42075 }, + { 0x9118, 42079 }, + { 0x9193, 42083 }, + { 0x911D, 42086 }, + { 0x91A6, 42090 }, + { 0x91A7, 42093 }, + { 0x9156, 42096 }, + { 0x918C, 42100 }, + { 0x9138, 42103 }, + { 0x9139, 42107 }, + { 0x9163, 42111 }, + { 0x9141, 42115 }, + { 0x9162, 42119 }, + { 0x9140, 42123 }, + { 0x9155, 42127 }, + { 0x9154, 42133 }, + { 0x1091, 42139 }, + { 0x1096, 42143 }, + { 0x1092, 42147 }, + { 0x1095, 42151 }, + { 0x1094, 42155 }, + { 0x1099, 42159 }, + { 0x1090, 42163 }, + { 0x1098, 42167 }, + { 0x1097, 42171 }, + { 0x1093, 42175 }, + { 0x1037, 42179 }, + { 0x103A, 42183 }, + { 0x1087, 42186 }, + { 0x1088, 42190 }, + { 0x1089, 42194 }, + { 0x108A, 42198 }, + { 0x108B, 42202 }, + { 0x108C, 42207 }, + { 0x108D, 42212 }, + { 0x108F, 42218 }, + { 0x104A, 42223 }, + { 0x1039, 42227 }, + { 0x104B, 42230 }, + { 0x1038, 42233 }, + { 0x1069, 42236 }, + { 0x106A, 42242 }, + { 0x106B, 42248 }, + { 0x106C, 42254 }, + { 0x106D, 42260 }, + { 0x1036, 42266 }, + { 0x1064, 42269 }, + { 0x1063, 42276 }, + { 0x1041, 42282 }, + { 0x1046, 42285 }, + { 0x1042, 42288 }, + { 0x1045, 42291 }, + { 0x1044, 42294 }, + { 0x1049, 42297 }, + { 0x1040, 42300 }, + { 0x1048, 42303 }, + { 0x1047, 42306 }, + { 0x1043, 42309 }, + { 0x1031, 42312 }, + { 0x1035, 42316 }, + { 0x102D, 42321 }, + { 0x102F, 42325 }, + { 0x102C, 42329 }, + { 0x1032, 42333 }, + { 0x102E, 42337 }, + { 0x1030, 42341 }, + { 0x1034, 42345 }, + { 0x1033, 42350 }, + { 0x1071, 42355 }, + { 0x1062, 42361 }, + { 0x1084, 42367 }, + { 0x1085, 42372 }, + { 0x1083, 42378 }, + { 0x1086, 42383 }, + { 0x102B, 42389 }, + { 0x1073, 42394 }, + { 0x1074, 42399 }, + { 0x1072, 42404 }, + { 0x1058, 42409 }, + { 0x1056, 42414 }, + { 0x1059, 42419 }, + { 0x1057, 42424 }, + { 0x1067, 42429 }, + { 0x1068, 42436 }, + { 0x1021, 42443 }, + { 0x1027, 42446 }, + { 0x1023, 42449 }, + { 0x1029, 42452 }, + { 0x1025, 42455 }, + { 0x102A, 42458 }, + { 0x1017, 42461 }, + { 0x1005, 42464 }, + { 0x1012, 42467 }, + { 0x1002, 42470 }, + { 0x101F, 42473 }, + { 0x1024, 42476 }, + { 0x1007, 42479 }, + { 0x1000, 42482 }, + { 0x101C, 42485 }, + { 0x1019, 42488 }, + { 0x1014, 42491 }, + { 0x1015, 42494 }, + { 0x101B, 42497 }, + { 0x101E, 42500 }, + { 0x1010, 42503 }, + { 0x1026, 42506 }, + { 0x101D, 42509 }, + { 0x101A, 42512 }, + { 0x1018, 42515 }, + { 0x1006, 42518 }, + { 0x100D, 42521 }, + { 0x1013, 42524 }, + { 0x1003, 42527 }, + { 0x1008, 42530 }, + { 0x1001, 42533 }, + { 0x1020, 42536 }, + { 0x1028, 42539 }, + { 0x105C, 42543 }, + { 0x105D, 42547 }, + { 0x105B, 42551 }, + { 0x105A, 42555 }, + { 0x1004, 42559 }, + { 0x100F, 42562 }, + { 0x1009, 42565 }, + { 0x1016, 42568 }, + { 0x1050, 42571 }, + { 0x1051, 42574 }, + { 0x1011, 42577 }, + { 0x100B, 42580 }, + { 0x100E, 42583 }, + { 0x100A, 42586 }, + { 0x1061, 42589 }, + { 0x1022, 42594 }, + { 0x107F, 42598 }, + { 0x1078, 42602 }, + { 0x107B, 42606 }, + { 0x107E, 42610 }, + { 0x1077, 42614 }, + { 0x1081, 42618 }, + { 0x1075, 42622 }, + { 0x107C, 42626 }, + { 0x1079, 42630 }, + { 0x1076, 42634 }, + { 0x107A, 42638 }, + { 0x107D, 42642 }, + { 0x1080, 42646 }, + { 0x100C, 42650 }, + { 0x103F, 42653 }, + { 0x108E, 42657 }, + { 0x106E, 42662 }, + { 0x106F, 42668 }, + { 0x1070, 42674 }, + { 0x1054, 42680 }, + { 0x1052, 42684 }, + { 0x1055, 42688 }, + { 0x1053, 42692 }, + { 0x1066, 42696 }, + { 0x1065, 42702 }, + { 0x109E, 42708 }, + { 0x109F, 42712 }, + { 0x104F, 42716 }, + { 0x104C, 42719 }, + { 0x104D, 42722 }, + { 0x104E, 42725 }, + { 0x1060, 42728 }, + { 0x105F, 42734 }, + { 0x105E, 42740 }, + { 0x1082, 42746 }, + { 0x103E, 42752 }, + { 0x103C, 42757 }, + { 0x103D, 42762 }, + { 0x103B, 42767 }, + { 0x22AF, 42772 }, + { 0x2288, 42779 }, + { 0x2289, 42786 }, + { 0x2270, 42793 }, + { 0x2274, 42798 }, + { 0x2278, 42803 }, + { 0x2271, 42807 }, + { 0x2279, 42812 }, + { 0x2275, 42816 }, + { 0x2247, 42821 }, + { 0x2646, 42827 }, + { 0x206F, 42828 }, + { 0x27AF, 42831 }, + { 0x27B1, 42837 }, + { 0x29A6, 42843 }, + { 0x29A7, 42847 }, + { 0x74A1, 42851 }, + { 0x74A6, 42854 }, + { 0x74A2, 42857 }, + { 0x74A5, 42860 }, + { 0x74A4, 42863 }, + { 0x74A9, 42866 }, + { 0x74A0, 42869 }, + { 0x74A8, 42872 }, + { 0x74A7, 42875 }, + { 0x74A3, 42878 }, + { 0x7496, 42881 }, + { 0x7497, 42884 }, + { 0x7498, 42887 }, + { 0x7499, 42890 }, + { 0x749A, 42893 }, + { 0x749B, 42896 }, + { 0x7481, 42899 }, + { 0x749C, 42902 }, + { 0x748D, 42905 }, + { 0x748C, 42908 }, + { 0x7494, 42911 }, + { 0x7483, 42914 }, + { 0x749D, 42917 }, + { 0x7487, 42920 }, + { 0x7488, 42923 }, + { 0x7482, 42926 }, + { 0x7484, 42929 }, + { 0x7495, 42932 }, + { 0x748A, 42935 }, + { 0x7485, 42938 }, + { 0x7493, 42941 }, + { 0x7480, 42944 }, + { 0x748B, 42947 }, + { 0x7486, 42950 }, + { 0x748F, 42953 }, + { 0x7490, 42956 }, + { 0x7491, 42959 }, + { 0x7492, 42962 }, + { 0x748E, 42965 }, + { 0x7489, 42968 }, + { 0x2202, 42971 }, + { 0x0025, 42973 }, + { 0x00B6, 42975 }, + { 0x2669, 42977 }, + { 0x23B7, 42979 }, + { 0x2B41, 42982 }, + { 0x2B47, 42988 }, + { 0x005C, 42994 }, + { 0x29F7, 42996 }, + { 0x29F5, 43001 }, + { 0x27C8, 43004 }, + { 0x2765, 43008 }, + { 0x2767, 43013 }, + { 0x213A, 43017 }, + { 0x2613, 43020 }, + { 0x2108, 43021 }, + { 0x00A7, 43022 }, + { 0x2313, 43024 }, + { 0x2120, 43025 }, + { 0x26B9, 43027 }, + { 0x746D, 43028 }, + { 0x7466, 43031 }, + { 0x746A, 43034 }, + { 0x7479, 43037 }, + { 0x7455, 43040 }, + { 0x7473, 43043 }, + { 0x7469, 43046 }, + { 0x7471, 43049 }, + { 0x747A, 43052 }, + { 0x7478, 43055 }, + { 0x7468, 43058 }, + { 0x7477, 43061 }, + { 0x745A, 43064 }, + { 0x747D, 43067 }, + { 0x7470, 43070 }, + { 0x7467, 43073 }, + { 0x747B, 43076 }, + { 0x7453, 43079 }, + { 0x745C, 43082 }, + { 0x747E, 43085 }, + { 0x7472, 43088 }, + { 0x746F, 43091 }, + { 0x7474, 43094 }, + { 0x7476, 43097 }, + { 0x746C, 43100 }, + { 0x7451, 43103 }, + { 0x745D, 43106 }, + { 0x7462, 43109 }, + { 0x7458, 43112 }, + { 0x747F, 43115 }, + { 0x745F, 43118 }, + { 0x745B, 43121 }, + { 0x7459, 43124 }, + { 0x7452, 43127 }, + { 0x7464, 43130 }, + { 0x7465, 43133 }, + { 0x7475, 43136 }, + { 0x7450, 43139 }, + { 0x746E, 43142 }, + { 0x7456, 43145 }, + { 0x745E, 43148 }, + { 0x746B, 43151 }, + { 0x747C, 43154 }, + { 0x7463, 43157 }, + { 0x7461, 43160 }, + { 0x7454, 43163 }, + { 0x7457, 43166 }, + { 0x7460, 43169 }, + { 0x29E2, 43172 }, + { 0x2A9D, 43174 }, + { 0x2A9E, 43177 }, + { 0x2A9F, 43180 }, + { 0x2AA0, 43186 }, + { 0x2A6C, 43192 }, + { 0x0DCA, 43195 }, + { 0x0D83, 43198 }, + { 0x0D82, 43201 }, + { 0x0DDA, 43204 }, + { 0x0DD3, 43209 }, + { 0x0DD6, 43214 }, + { 0x0DD1, 43219 }, + { 0x0DF3, 43224 }, + { 0x0DF2, 43229 }, + { 0x0DD2, 43234 }, + { 0x0DD4, 43239 }, + { 0x0DD0, 43244 }, + { 0x0DDB, 43249 }, + { 0x0DD9, 43254 }, + { 0x0DDD, 43258 }, + { 0x0DDC, 43265 }, + { 0x0DDE, 43271 }, + { 0x0DCF, 43277 }, + { 0x0DDF, 43281 }, + { 0x0DD8, 43285 }, + { 0x0DB9, 43289 }, + { 0x0D85, 43293 }, + { 0x0D91, 43296 }, + { 0x0D89, 43299 }, + { 0x0D94, 43302 }, + { 0x0D8B, 43305 }, + { 0x0D86, 43308 }, + { 0x0D87, 43311 }, + { 0x0D93, 43314 }, + { 0x0D96, 43317 }, + { 0x0DBD, 43320 }, + { 0x0DB1, 43324 }, + { 0x0DC3, 43328 }, + { 0x0D92, 43332 }, + { 0x0DC6, 43335 }, + { 0x0DC4, 43338 }, + { 0x0D8A, 43341 }, + { 0x0D9E, 43344 }, + { 0x0DB8, 43348 }, + { 0x0D95, 43351 }, + { 0x0DBB, 43354 }, + { 0x0DB3, 43357 }, + { 0x0D9F, 43361 }, + { 0x0DA6, 43365 }, + { 0x0DAC, 43369 }, + { 0x0DC1, 43373 }, + { 0x0DA5, 43377 }, + { 0x0DA4, 43382 }, + { 0x0D8C, 43386 }, + { 0x0DC0, 43389 }, + { 0x0DBA, 43392 }, + { 0x0D88, 43395 }, + { 0x0D8F, 43398 }, + { 0x0D8D, 43401 }, + { 0x0D90, 43404 }, + { 0x0D8E, 43407 }, + { 0x0DC5, 43410 }, + { 0x0DAB, 43414 }, + { 0x0DC2, 43418 }, + { 0x0DB6, 43422 }, + { 0x0DA0, 43426 }, + { 0x0DAF, 43430 }, + { 0x0D9C, 43434 }, + { 0x0DA2, 43438 }, + { 0x0D9A, 43442 }, + { 0x0DB4, 43446 }, + { 0x0DAD, 43450 }, + { 0x0DA9, 43454 }, + { 0x0DA7, 43458 }, + { 0x0DB7, 43462 }, + { 0x0DA1, 43466 }, + { 0x0DB0, 43470 }, + { 0x0D9D, 43474 }, + { 0x0DA3, 43478 }, + { 0x0D9B, 43482 }, + { 0x0DB5, 43486 }, + { 0x0DAE, 43490 }, + { 0x0DAA, 43494 }, + { 0x0DA8, 43498 }, + { 0x0DF4, 43502 }, + { 0x273A, 43505 }, + { 0x2A95, 43508 }, + { 0x2A97, 43513 }, + { 0x2A96, 43521 }, + { 0x2A98, 43526 }, + { 0x2A57, 43534 }, + { 0x2A58, 43537 }, + { 0x2AAA, 43540 }, + { 0x2AAC, 43542 }, + { 0x2603, 43547 }, + { 0x002F, 43548 }, + { 0x29F6, 43549 }, + { 0x2747, 43552 }, + { 0x22A1, 43553 }, + { 0x2E2C, 43556 }, + { 0x229E, 43560 }, + { 0x229F, 43562 }, + { 0x29C7, 43564 }, + { 0x22A0, 43567 }, + { 0x29C4, 43569 }, + { 0x29C8, 43573 }, + { 0x29C5, 43575 }, + { 0x29C6, 43579 }, + { 0x222F, 43581 }, + { 0x1714, 43583 }, + { 0x1712, 43586 }, + { 0x1713, 43590 }, + { 0x1700, 43594 }, + { 0x1701, 43597 }, + { 0x1702, 43600 }, + { 0x170A, 43603 }, + { 0x1707, 43606 }, + { 0x1704, 43609 }, + { 0x1711, 43612 }, + { 0x1703, 43615 }, + { 0x170E, 43618 }, + { 0x170B, 43621 }, + { 0x1708, 43624 }, + { 0x1709, 43627 }, + { 0x1710, 43630 }, + { 0x1706, 43633 }, + { 0x170F, 43636 }, + { 0x170C, 43639 }, + { 0x1705, 43642 }, + { 0x27A2, 43645 }, + { 0x27A3, 43649 }, + { 0x0FBE, 43653 }, + { 0x0FBF, 43657 }, + { 0x0F3D, 43664 }, + { 0x0F3C, 43669 }, + { 0x0F38, 43674 }, + { 0x0F3B, 43678 }, + { 0x0F3A, 43683 }, + { 0x0F11, 43688 }, + { 0x0F39, 43694 }, + { 0x0F07, 43698 }, + { 0x0F0A, 43705 }, + { 0x0F03, 43711 }, + { 0x0F02, 43720 }, + { 0x0F01, 43729 }, + { 0x0F14, 43736 }, + { 0x0F35, 43740 }, + { 0x0F37, 43746 }, + { 0x0F0E, 43752 }, + { 0x0FD2, 43756 }, + { 0x0F10, 43760 }, + { 0x0F12, 43765 }, + { 0x0F0D, 43770 }, + { 0x0F34, 43773 }, + { 0x0FD0, 43777 }, + { 0x0F09, 43784 }, + { 0x0F06, 43789 }, + { 0x0F13, 43797 }, + { 0x0F36, 43805 }, + { 0x0FD1, 43813 }, + { 0x0F08, 43820 }, + { 0x0F0F, 43824 }, + { 0x0F85, 43828 }, + { 0x0F05, 43831 }, + { 0x0FD4, 43838 }, + { 0x0F84, 43847 }, + { 0x0F04, 43850 }, + { 0x0FD3, 43857 }, + { 0x0F0C, 43866 }, + { 0x0F0B, 43871 }, + { 0x0F8A, 43875 }, + { 0x0F8B, 43880 }, + { 0x0F88, 43885 }, + { 0x0F86, 43890 }, + { 0x0F3F, 43894 }, + { 0x0F82, 43898 }, + { 0x0F83, 43904 }, + { 0x0F3E, 43908 }, + { 0x0F89, 43912 }, + { 0x0F1D, 43916 }, + { 0x0FCF, 43921 }, + { 0x0FCE, 43926 }, + { 0x0F1E, 43932 }, + { 0x0F1A, 43937 }, + { 0x0F1C, 43942 }, + { 0x0F1F, 43947 }, + { 0x0F1B, 43953 }, + { 0x0F7E, 43958 }, + { 0x0F7F, 43964 }, + { 0x0F87, 43968 }, + { 0x0F21, 43972 }, + { 0x0F26, 43975 }, + { 0x0F22, 43978 }, + { 0x0F25, 43981 }, + { 0x0F24, 43984 }, + { 0x0F2A, 43987 }, + { 0x0F2F, 43991 }, + { 0x0F2B, 43995 }, + { 0x0F2E, 43999 }, + { 0x0F2D, 44003 }, + { 0x0F32, 44007 }, + { 0x0F33, 44011 }, + { 0x0F31, 44015 }, + { 0x0F30, 44019 }, + { 0x0F2C, 44023 }, + { 0x0F29, 44027 }, + { 0x0F20, 44030 }, + { 0x0F28, 44033 }, + { 0x0F27, 44036 }, + { 0x0F23, 44039 }, + { 0x0F7A, 44042 }, + { 0x0F72, 44046 }, + { 0x0F7C, 44050 }, + { 0x0F74, 44054 }, + { 0x0F71, 44058 }, + { 0x0F7B, 44062 }, + { 0x0F73, 44066 }, + { 0x0F7D, 44070 }, + { 0x0F75, 44074 }, + { 0x0F78, 44078 }, + { 0x0F76, 44083 }, + { 0x0F79, 44088 }, + { 0x0F77, 44093 }, + { 0x0F80, 44098 }, + { 0x0F81, 44103 }, + { 0x0F68, 44108 }, + { 0x0F60, 44111 }, + { 0x0F56, 44114 }, + { 0x0F45, 44117 }, + { 0x0F51, 44120 }, + { 0x0F42, 44123 }, + { 0x0F67, 44126 }, + { 0x0F47, 44129 }, + { 0x0F40, 44132 }, + { 0x0F63, 44135 }, + { 0x0F58, 44138 }, + { 0x0F53, 44141 }, + { 0x0F54, 44144 }, + { 0x0F62, 44147 }, + { 0x0F66, 44150 }, + { 0x0F4F, 44153 }, + { 0x0F5D, 44156 }, + { 0x0F61, 44159 }, + { 0x0F5F, 44162 }, + { 0x0F57, 44165 }, + { 0x0F46, 44168 }, + { 0x0F4C, 44171 }, + { 0x0F52, 44174 }, + { 0x0F5B, 44177 }, + { 0x0F43, 44180 }, + { 0x0F41, 44183 }, + { 0x0F6B, 44186 }, + { 0x0F44, 44189 }, + { 0x0F4E, 44192 }, + { 0x0F49, 44195 }, + { 0x0F55, 44198 }, + { 0x0F6C, 44201 }, + { 0x0F64, 44204 }, + { 0x0F65, 44207 }, + { 0x0F50, 44210 }, + { 0x0F59, 44213 }, + { 0x0F4A, 44216 }, + { 0x0F5E, 44219 }, + { 0x0F4D, 44222 }, + { 0x0F5C, 44225 }, + { 0x0F69, 44228 }, + { 0x0F5A, 44231 }, + { 0x0F4B, 44234 }, + { 0x0F6A, 44237 }, + { 0x0FC9, 44241 }, + { 0x0FCC, 44245 }, + { 0x0FCB, 44251 }, + { 0x0FCA, 44257 }, + { 0x0FC5, 44263 }, + { 0x0FC7, 44267 }, + { 0x0FC4, 44273 }, + { 0x0FC8, 44277 }, + { 0x0FC6, 44281 }, + { 0x0F15, 44285 }, + { 0x0F16, 44290 }, + { 0x0F00, 44295 }, + { 0x0FB8, 44298 }, + { 0x0FB0, 44302 }, + { 0x0FA6, 44306 }, + { 0x0F95, 44310 }, + { 0x0FA1, 44314 }, + { 0x0F92, 44318 }, + { 0x0FB7, 44322 }, + { 0x0F97, 44326 }, + { 0x0F90, 44330 }, + { 0x0FB3, 44334 }, + { 0x0FA8, 44338 }, + { 0x0FA3, 44342 }, + { 0x0FA4, 44346 }, + { 0x0FB2, 44350 }, + { 0x0FB6, 44354 }, + { 0x0F9F, 44358 }, + { 0x0FAD, 44362 }, + { 0x0FB1, 44366 }, + { 0x0FAF, 44370 }, + { 0x0FA7, 44374 }, + { 0x0F96, 44378 }, + { 0x0F9C, 44382 }, + { 0x0FA2, 44386 }, + { 0x0FAB, 44390 }, + { 0x0F93, 44394 }, + { 0x0F91, 44398 }, + { 0x0F94, 44402 }, + { 0x0F9E, 44406 }, + { 0x0F99, 44410 }, + { 0x0FA5, 44414 }, + { 0x0FB4, 44418 }, + { 0x0FB5, 44422 }, + { 0x0FA0, 44426 }, + { 0x0FA9, 44430 }, + { 0x0F9A, 44434 }, + { 0x0FAE, 44438 }, + { 0x0F9D, 44442 }, + { 0x0FAC, 44446 }, + { 0x0FB9, 44450 }, + { 0x0FAA, 44454 }, + { 0x0F9B, 44458 }, + { 0x0FBC, 44462 }, + { 0x0FBA, 44467 }, + { 0x0FBB, 44472 }, + { 0x0F17, 44477 }, + { 0x0F19, 44484 }, + { 0x0F18, 44489 }, + { 0x0FC2, 44494 }, + { 0x0FC3, 44499 }, + { 0x0FC0, 44504 }, + { 0x0FC1, 44509 }, + { 0x2632, 44514 }, + { 0x2631, 44517 }, + { 0x2634, 44520 }, + { 0x2637, 44523 }, + { 0x2635, 44526 }, + { 0x2630, 44529 }, + { 0x2633, 44532 }, + { 0x2636, 44535 }, + { 0x219F, 44538 }, + { 0x2191, 44542 }, + { 0x2912, 44544 }, + { 0x21A5, 44548 }, + { 0x21B0, 44552 }, + { 0x21B1, 44557 }, + { 0x21DE, 44562 }, + { 0x2909, 44567 }, + { 0x21C5, 44572 }, + { 0x2B06, 44578 }, + { 0x21E7, 44581 }, + { 0x21EB, 44584 }, + { 0x21ED, 44589 }, + { 0x21EC, 44597 }, + { 0x21EA, 44605 }, + { 0x21EE, 44610 }, + { 0x21EF, 44614 }, + { 0x2E15, 44620 }, + { 0x21E1, 44622 }, + { 0x21D1, 44625 }, + { 0x21C8, 44628 }, + { 0x290A, 44631 }, + { 0x2958, 44634 }, + { 0x2960, 44641 }, + { 0x2963, 44648 }, + { 0x296E, 44659 }, + { 0x2954, 44670 }, + { 0x295C, 44677 }, + { 0x21BF, 44684 }, + { 0x21BE, 44689 }, + { 0x27F0, 44694 }, + { 0x2949, 44697 }, + { 0x270C, 44703 }, + { 0x26A0, 44705 }, + { 0x270D, 44707 }, + { 0x206D, 44709 }, + { 0x206B, 44713 }, + { 0x2708, 44716 }, + { 0x212B, 44717 }, + { 0x2652, 44719 }, + { 0x0589, 44720 }, + { 0x055D, 44723 }, + { 0x056E, 44725 }, + { 0x0581, 44729 }, + { 0x0564, 44733 }, + { 0x0567, 44737 }, + { 0x0568, 44741 }, + { 0x0570, 44745 }, + { 0x0571, 44749 }, + { 0x0585, 44753 }, + { 0x057C, 44757 }, + { 0x0569, 44761 }, + { 0x0578, 44765 }, + { 0x0575, 44769 }, + { 0x0566, 44773 }, + { 0x0561, 44777 }, + { 0x0562, 44781 }, + { 0x0579, 44785 }, + { 0x0565, 44789 }, + { 0x0586, 44793 }, + { 0x0563, 44797 }, + { 0x056B, 44801 }, + { 0x0584, 44805 }, + { 0x056F, 44809 }, + { 0x0574, 44813 }, + { 0x0576, 44817 }, + { 0x057A, 44821 }, + { 0x0580, 44825 }, + { 0x057D, 44829 }, + { 0x0577, 44833 }, + { 0x057E, 44837 }, + { 0x056D, 44841 }, + { 0x056A, 44845 }, + { 0x0573, 44849 }, + { 0x0572, 44853 }, + { 0x057B, 44857 }, + { 0x056C, 44861 }, + { 0x0583, 44865 }, + { 0x057F, 44869 }, + { 0x0582, 44873 }, + { 0x0587, 44877 }, + { 0x6B14, 44882 }, + { 0x6B15, 44887 }, + { 0x6B13, 44892 }, + { 0x6B17, 44897 }, + { 0x6B16, 44902 }, + { 0x058A, 44907 }, + { 0x053E, 44909 }, + { 0x0551, 44913 }, + { 0x0534, 44917 }, + { 0x0537, 44921 }, + { 0x0538, 44925 }, + { 0x0540, 44929 }, + { 0x0541, 44933 }, + { 0x0555, 44937 }, + { 0x054C, 44941 }, + { 0x0539, 44945 }, + { 0x0548, 44949 }, + { 0x0545, 44953 }, + { 0x0536, 44957 }, + { 0x0531, 44961 }, + { 0x0532, 44965 }, + { 0x0549, 44969 }, + { 0x0535, 44973 }, + { 0x0556, 44977 }, + { 0x0533, 44981 }, + { 0x053B, 44985 }, + { 0x0554, 44989 }, + { 0x053F, 44993 }, + { 0x0544, 44997 }, + { 0x0546, 45001 }, + { 0x054A, 45005 }, + { 0x0550, 45009 }, + { 0x054D, 45013 }, + { 0x0547, 45017 }, + { 0x054E, 45021 }, + { 0x053D, 45025 }, + { 0x053A, 45029 }, + { 0x0543, 45033 }, + { 0x0542, 45037 }, + { 0x054B, 45041 }, + { 0x053C, 45045 }, + { 0x0553, 45049 }, + { 0x054F, 45053 }, + { 0x0552, 45057 }, + { 0x055B, 45061 }, + { 0x0559, 45064 }, + { 0x055E, 45070 }, + { 0x055A, 45073 }, + { 0x055C, 45075 }, + { 0x055F, 45078 }, + { 0x002A, 45081 }, + { 0x2217, 45082 }, + { 0x2042, 45084 }, + { 0x1B44, 45085 }, + { 0x1B00, 45088 }, + { 0x1B01, 45092 }, + { 0x1B04, 45096 }, + { 0x1B02, 45099 }, + { 0x1B03, 45102 }, + { 0x1B34, 45105 }, + { 0x1B5E, 45108 }, + { 0x1B5F, 45111 }, + { 0x1B5D, 45114 }, + { 0x1B51, 45117 }, + { 0x1B56, 45120 }, + { 0x1B52, 45123 }, + { 0x1B55, 45126 }, + { 0x1B54, 45129 }, + { 0x1B59, 45132 }, + { 0x1B50, 45135 }, + { 0x1B58, 45138 }, + { 0x1B57, 45141 }, + { 0x1B53, 45144 }, + { 0x1B5A, 45147 }, + { 0x1B3C, 45149 }, + { 0x1B3D, 45154 }, + { 0x1B3A, 45160 }, + { 0x1B3B, 45165 }, + { 0x1B36, 45171 }, + { 0x1B37, 45175 }, + { 0x1B38, 45180 }, + { 0x1B39, 45184 }, + { 0x1B42, 45189 }, + { 0x1B43, 45193 }, + { 0x1B3E, 45198 }, + { 0x1B3F, 45202 }, + { 0x1B41, 45207 }, + { 0x1B40, 45213 }, + { 0x1B35, 45218 }, + { 0x1B5C, 45222 }, + { 0x1B29, 45224 }, + { 0x1B2A, 45227 }, + { 0x1B18, 45231 }, + { 0x1B19, 45234 }, + { 0x1B24, 45238 }, + { 0x1B25, 45241 }, + { 0x1B1F, 45245 }, + { 0x1B20, 45250 }, + { 0x1B48, 45255 }, + { 0x1B15, 45259 }, + { 0x1B16, 45262 }, + { 0x1B33, 45266 }, + { 0x1B1A, 45269 }, + { 0x1B1B, 45272 }, + { 0x1B13, 45276 }, + { 0x1B14, 45279 }, + { 0x1B2E, 45283 }, + { 0x1B0D, 45286 }, + { 0x1B0E, 45290 }, + { 0x1B2B, 45295 }, + { 0x1B26, 45298 }, + { 0x1B21, 45301 }, + { 0x1B27, 45305 }, + { 0x1B28, 45308 }, + { 0x1B2D, 45312 }, + { 0x1B0B, 45315 }, + { 0x1B0C, 45319 }, + { 0x1B32, 45324 }, + { 0x1B30, 45327 }, + { 0x1B31, 45331 }, + { 0x1B22, 45335 }, + { 0x1B23, 45338 }, + { 0x1B1D, 45342 }, + { 0x1B1E, 45346 }, + { 0x1B49, 45351 }, + { 0x1B2F, 45355 }, + { 0x1B2C, 45358 }, + { 0x1B45, 45361 }, + { 0x1B17, 45365 }, + { 0x1B1C, 45368 }, + { 0x1B4A, 45371 }, + { 0x1B46, 45375 }, + { 0x1B47, 45379 }, + { 0x1B05, 45383 }, + { 0x1B06, 45386 }, + { 0x1B0F, 45390 }, + { 0x1B07, 45393 }, + { 0x1B08, 45396 }, + { 0x1B11, 45400 }, + { 0x1B12, 45403 }, + { 0x1B09, 45407 }, + { 0x1B0A, 45410 }, + { 0x1B10, 45414 }, + { 0x1B4B, 45417 }, + { 0x1B5B, 45421 }, + { 0x1B64, 45423 }, + { 0x1B6A, 45427 }, + { 0x1B65, 45432 }, + { 0x1B62, 45437 }, + { 0x1B66, 45441 }, + { 0x1B61, 45445 }, + { 0x1B63, 45449 }, + { 0x1B67, 45453 }, + { 0x1B69, 45457 }, + { 0x1B68, 45461 }, + { 0x1B73, 45465 }, + { 0x1B72, 45470 }, + { 0x1B6C, 45475 }, + { 0x1B6B, 45480 }, + { 0x1B6E, 45485 }, + { 0x1B71, 45490 }, + { 0x1B6D, 45497 }, + { 0x1B70, 45502 }, + { 0x1B6F, 45509 }, + { 0x1B78, 45514 }, + { 0x1B7C, 45520 }, + { 0x1B79, 45526 }, + { 0x1B7A, 45532 }, + { 0x1B7B, 45538 }, + { 0x1B75, 45544 }, + { 0x1B74, 45550 }, + { 0x1B77, 45556 }, + { 0x1B76, 45562 }, + { 0x1B60, 45568 }, + { 0x31B7, 45570 }, + { 0x31B6, 45574 }, + { 0x31B4, 45578 }, + { 0x31B5, 45582 }, + { 0x311A, 45586 }, + { 0x3105, 45589 }, + { 0x3118, 45592 }, + { 0x3109, 45595 }, + { 0x311C, 45598 }, + { 0x3108, 45601 }, + { 0x310D, 45604 }, + { 0x310F, 45607 }, + { 0x3127, 45610 }, + { 0x3110, 45613 }, + { 0x310E, 45616 }, + { 0x310C, 45619 }, + { 0x3107, 45622 }, + { 0x310B, 45625 }, + { 0x311B, 45628 }, + { 0x3106, 45631 }, + { 0x3111, 45634 }, + { 0x3116, 45637 }, + { 0x3119, 45640 }, + { 0x310A, 45643 }, + { 0x3128, 45646 }, + { 0x312A, 45649 }, + { 0x3112, 45652 }, + { 0x3117, 45655 }, + { 0x311E, 45658 }, + { 0x31B0, 45661 }, + { 0x3122, 45664 }, + { 0x3120, 45667 }, + { 0x31A0, 45670 }, + { 0x3114, 45673 }, + { 0x31A4, 45676 }, + { 0x311D, 45679 }, + { 0x311F, 45682 }, + { 0x3123, 45685 }, + { 0x3126, 45688 }, + { 0x312C, 45691 }, + { 0x31A3, 45694 }, + { 0x312D, 45697 }, + { 0x31AC, 45700 }, + { 0x31A8, 45703 }, + { 0x3129, 45706 }, + { 0x31A2, 45709 }, + { 0x312B, 45712 }, + { 0x31B1, 45715 }, + { 0x31A6, 45718 }, + { 0x3121, 45721 }, + { 0x3115, 45724 }, + { 0x3113, 45727 }, + { 0x31A1, 45730 }, + { 0x3124, 45733 }, + { 0x31A9, 45736 }, + { 0x3125, 45739 }, + { 0x31A5, 45742 }, + { 0x31AA, 45745 }, + { 0x31AD, 45748 }, + { 0x31B2, 45751 }, + { 0x31A7, 45754 }, + { 0x31AB, 45757 }, + { 0x31AE, 45760 }, + { 0x31AF, 45763 }, + { 0x31B3, 45766 }, + { 0x1A1F, 45769 }, + { 0x1A19, 45773 }, + { 0x1A17, 45777 }, + { 0x1A1A, 45781 }, + { 0x1A18, 45785 }, + { 0x1A1B, 45789 }, + { 0x1A15, 45793 }, + { 0x1A05, 45796 }, + { 0x1A0C, 45799 }, + { 0x1A09, 45802 }, + { 0x1A01, 45805 }, + { 0x1A16, 45808 }, + { 0x1A0D, 45811 }, + { 0x1A00, 45814 }, + { 0x1A12, 45817 }, + { 0x1A06, 45820 }, + { 0x1A0A, 45823 }, + { 0x1A04, 45826 }, + { 0x1A11, 45829 }, + { 0x1A14, 45832 }, + { 0x1A08, 45835 }, + { 0x1A13, 45838 }, + { 0x1A10, 45841 }, + { 0x1A07, 45844 }, + { 0x1A02, 45847 }, + { 0x1A0B, 45850 }, + { 0x1A0E, 45853 }, + { 0x1A03, 45856 }, + { 0x1A0F, 45859 }, + { 0x1A1E, 45862 }, + { 0x25CE, 45864 }, + { 0x2624, 45865 }, + { 0x140A, 45866 }, + { 0x14A1, 45869 }, + { 0x1401, 45872 }, + { 0x155D, 45875 }, + { 0x1403, 45878 }, + { 0x1483, 45881 }, + { 0x14EA, 45884 }, + { 0x14BB, 45887 }, + { 0x14D0, 45890 }, + { 0x1405, 45893 }, + { 0x1449, 45896 }, + { 0x1585, 45899 }, + { 0x1550, 45902 }, + { 0x1505, 45905 }, + { 0x1466, 45908 }, + { 0x153E, 45911 }, + { 0x140B, 45914 }, + { 0x141C, 45917 }, + { 0x142E, 45920 }, + { 0x1490, 45923 }, + { 0x1489, 45926 }, + { 0x148B, 45929 }, + { 0x148D, 45932 }, + { 0x142B, 45935 }, + { 0x1559, 45938 }, + { 0x1553, 45941 }, + { 0x1555, 45944 }, + { 0x1557, 45947 }, + { 0x157D, 45950 }, + { 0x1404, 45953 }, + { 0x142C, 45956 }, + { 0x1472, 45959 }, + { 0x146B, 45962 }, + { 0x146D, 45965 }, + { 0x146F, 45968 }, + { 0x1484, 45971 }, + { 0x14DA, 45974 }, + { 0x14D3, 45977 }, + { 0x15A6, 45980 }, + { 0x14D5, 45983 }, + { 0x14D7, 45986 }, + { 0x14AA, 45989 }, + { 0x14A3, 45992 }, + { 0x14BD, 45995 }, + { 0x14A5, 45998 }, + { 0x14A7, 46001 }, + { 0x14C7, 46004 }, + { 0x14C0, 46007 }, + { 0x1595, 46010 }, + { 0x14D2, 46013 }, + { 0x14C2, 46016 }, + { 0x14C4, 46019 }, + { 0x142D, 46022 }, + { 0x1406, 46025 }, + { 0x1438, 46028 }, + { 0x142F, 46031 }, + { 0x1431, 46034 }, + { 0x1433, 46037 }, + { 0x1583, 46040 }, + { 0x157F, 46043 }, + { 0x1581, 46046 }, + { 0x154B, 46049 }, + { 0x1542, 46052 }, + { 0x1546, 46055 }, + { 0x1548, 46058 }, + { 0x14F4, 46061 }, + { 0x14ED, 46064 }, + { 0x1525, 46067 }, + { 0x14EF, 46070 }, + { 0x14F1, 46073 }, + { 0x1507, 46076 }, + { 0x1455, 46079 }, + { 0x144C, 46082 }, + { 0x156A, 46085 }, + { 0x144E, 46088 }, + { 0x1450, 46091 }, + { 0x1417, 46094 }, + { 0x140C, 46097 }, + { 0x140E, 46100 }, + { 0x1412, 46103 }, + { 0x152D, 46106 }, + { 0x1526, 46109 }, + { 0x1528, 46112 }, + { 0x152A, 46115 }, + { 0x1402, 46118 }, + { 0x1491, 46121 }, + { 0x166D, 46124 }, + { 0x148C, 46128 }, + { 0x148E, 46131 }, + { 0x149C, 46134 }, + { 0x1492, 46137 }, + { 0x1494, 46140 }, + { 0x1498, 46143 }, + { 0x155A, 46146 }, + { 0x1556, 46149 }, + { 0x1558, 46152 }, + { 0x1473, 46155 }, + { 0x146E, 46158 }, + { 0x1470, 46161 }, + { 0x147E, 46164 }, + { 0x1474, 46167 }, + { 0x1476, 46170 }, + { 0x147A, 46173 }, + { 0x14DB, 46176 }, + { 0x15A4, 46179 }, + { 0x15A0, 46182 }, + { 0x15A2, 46185 }, + { 0x14D6, 46188 }, + { 0x14D8, 46191 }, + { 0x14E6, 46194 }, + { 0x14DC, 46197 }, + { 0x14DE, 46200 }, + { 0x14E2, 46203 }, + { 0x14AB, 46206 }, + { 0x14A6, 46209 }, + { 0x14A8, 46212 }, + { 0x14B6, 46215 }, + { 0x14AC, 46218 }, + { 0x14AE, 46221 }, + { 0x14B2, 46224 }, + { 0x14C8, 46227 }, + { 0x1593, 46230 }, + { 0x158F, 46233 }, + { 0x1591, 46236 }, + { 0x14C3, 46239 }, + { 0x1596, 46242 }, + { 0x14C5, 46245 }, + { 0x14CB, 46248 }, + { 0x14C9, 46251 }, + { 0x1439, 46254 }, + { 0x1432, 46257 }, + { 0x1434, 46260 }, + { 0x1444, 46263 }, + { 0x143A, 46266 }, + { 0x143C, 46269 }, + { 0x1440, 46272 }, + { 0x1584, 46275 }, + { 0x166F, 46278 }, + { 0x1580, 46281 }, + { 0x1582, 46284 }, + { 0x154C, 46287 }, + { 0x1547, 46290 }, + { 0x1549, 46293 }, + { 0x14F5, 46296 }, + { 0x1515, 46299 }, + { 0x1510, 46302 }, + { 0x1511, 46305 }, + { 0x1513, 46308 }, + { 0x14F0, 46311 }, + { 0x14F2, 46314 }, + { 0x1500, 46317 }, + { 0x14F6, 46320 }, + { 0x14F8, 46323 }, + { 0x14FC, 46326 }, + { 0x1456, 46329 }, + { 0x1566, 46332 }, + { 0x155E, 46335 }, + { 0x1560, 46338 }, + { 0x1564, 46341 }, + { 0x144F, 46344 }, + { 0x1451, 46347 }, + { 0x146A, 46350 }, + { 0x1467, 46353 }, + { 0x156F, 46356 }, + { 0x1468, 46359 }, + { 0x1469, 46362 }, + { 0x1461, 46365 }, + { 0x1457, 46368 }, + { 0x1459, 46371 }, + { 0x145D, 46374 }, + { 0x1573, 46377 }, + { 0x1570, 46380 }, + { 0x1571, 46383 }, + { 0x1572, 46386 }, + { 0x1419, 46389 }, + { 0x1410, 46392 }, + { 0x1414, 46395 }, + { 0x152E, 46398 }, + { 0x1529, 46401 }, + { 0x152B, 46404 }, + { 0x1539, 46407 }, + { 0x152F, 46410 }, + { 0x1531, 46413 }, + { 0x1535, 46416 }, + { 0x148A, 46419 }, + { 0x149E, 46422 }, + { 0x1496, 46425 }, + { 0x149A, 46428 }, + { 0x1554, 46431 }, + { 0x166E, 46434 }, + { 0x155B, 46438 }, + { 0x146C, 46441 }, + { 0x1480, 46444 }, + { 0x1478, 46447 }, + { 0x147C, 46450 }, + { 0x14D4, 46453 }, + { 0x15A5, 46456 }, + { 0x15A1, 46459 }, + { 0x15A3, 46462 }, + { 0x14E8, 46465 }, + { 0x14E0, 46468 }, + { 0x14E4, 46471 }, + { 0x14A4, 46474 }, + { 0x14B8, 46477 }, + { 0x14B0, 46480 }, + { 0x14B4, 46483 }, + { 0x14C1, 46486 }, + { 0x1594, 46489 }, + { 0x1670, 46492 }, + { 0x1590, 46495 }, + { 0x1592, 46498 }, + { 0x1675, 46501 }, + { 0x1671, 46504 }, + { 0x1673, 46507 }, + { 0x14CD, 46510 }, + { 0x1430, 46513 }, + { 0x1446, 46516 }, + { 0x143E, 46519 }, + { 0x1442, 46522 }, + { 0x157E, 46525 }, + { 0x1545, 46528 }, + { 0x154E, 46531 }, + { 0x14EE, 46534 }, + { 0x1516, 46537 }, + { 0x1512, 46540 }, + { 0x1514, 46543 }, + { 0x1521, 46546 }, + { 0x1517, 46549 }, + { 0x1519, 46552 }, + { 0x151D, 46555 }, + { 0x1502, 46558 }, + { 0x14FA, 46561 }, + { 0x14FE, 46564 }, + { 0x144D, 46567 }, + { 0x1567, 46570 }, + { 0x1562, 46573 }, + { 0x1565, 46576 }, + { 0x1589, 46579 }, + { 0x1586, 46582 }, + { 0x1587, 46585 }, + { 0x1588, 46588 }, + { 0x156E, 46591 }, + { 0x156B, 46594 }, + { 0x156C, 46597 }, + { 0x156D, 46600 }, + { 0x1463, 46603 }, + { 0x145B, 46606 }, + { 0x145F, 46609 }, + { 0x1527, 46612 }, + { 0x153B, 46615 }, + { 0x1533, 46618 }, + { 0x1537, 46621 }, + { 0x1422, 46624 }, + { 0x142A, 46630 }, + { 0x1429, 46635 }, + { 0x1424, 46639 }, + { 0x141F, 46643 }, + { 0x1420, 46647 }, + { 0x1423, 46651 }, + { 0x1428, 46657 }, + { 0x1421, 46663 }, + { 0x1425, 46669 }, + { 0x1426, 46674 }, + { 0x1427, 46681 }, + { 0x158E, 46686 }, + { 0x1676, 46689 }, + { 0x1672, 46692 }, + { 0x1674, 46695 }, + { 0x1523, 46698 }, + { 0x151B, 46701 }, + { 0x151F, 46704 }, + { 0x1568, 46707 }, + { 0x14EC, 46710 }, + { 0x1552, 46714 }, + { 0x155F, 46718 }, + { 0x1561, 46722 }, + { 0x1563, 46726 }, + { 0x1543, 46730 }, + { 0x14BF, 46734 }, + { 0x15C3, 46738 }, + { 0x15C0, 46742 }, + { 0x15C1, 46746 }, + { 0x15C2, 46750 }, + { 0x161A, 46754 }, + { 0x1615, 46758 }, + { 0x14A2, 46762 }, + { 0x1541, 46766 }, + { 0x159A, 46770 }, + { 0x1597, 46774 }, + { 0x1598, 46778 }, + { 0x1599, 46782 }, + { 0x141D, 46786 }, + { 0x1407, 46790 }, + { 0x148F, 46794 }, + { 0x1471, 46798 }, + { 0x14D9, 46802 }, + { 0x14A9, 46806 }, + { 0x14C6, 46810 }, + { 0x1435, 46814 }, + { 0x14F3, 46818 }, + { 0x1452, 46822 }, + { 0x152C, 46826 }, + { 0x1448, 46830 }, + { 0x15AF, 46834 }, + { 0x144B, 46838 }, + { 0x1409, 46842 }, + { 0x15EE, 46846 }, + { 0x1646, 46850 }, + { 0x1454, 46854 }, + { 0x1408, 46858 }, + { 0x15F4, 46862 }, + { 0x15F1, 46866 }, + { 0x15F3, 46870 }, + { 0x15F0, 46874 }, + { 0x15EF, 46878 }, + { 0x1437, 46882 }, + { 0x161B, 46886 }, + { 0x1617, 46890 }, + { 0x1619, 46894 }, + { 0x1616, 46898 }, + { 0x1614, 46902 }, + { 0x1601, 46906 }, + { 0x1627, 46910 }, + { 0x1624, 46914 }, + { 0x1626, 46918 }, + { 0x1623, 46922 }, + { 0x1622, 46926 }, + { 0x160D, 46930 }, + { 0x160A, 46934 }, + { 0x160C, 46938 }, + { 0x1609, 46942 }, + { 0x1608, 46946 }, + { 0x1607, 46950 }, + { 0x1604, 46954 }, + { 0x14D1, 46958 }, + { 0x1606, 46962 }, + { 0x1603, 46966 }, + { 0x1602, 46970 }, + { 0x15ED, 46974 }, + { 0x15EA, 46978 }, + { 0x15EC, 46982 }, + { 0x15E9, 46986 }, + { 0x15E8, 46990 }, + { 0x15CF, 46994 }, + { 0x15CC, 46998 }, + { 0x15CE, 47002 }, + { 0x15CB, 47006 }, + { 0x15CA, 47010 }, + { 0x1653, 47014 }, + { 0x1650, 47018 }, + { 0x165A, 47022 }, + { 0x1652, 47026 }, + { 0x164F, 47030 }, + { 0x164E, 47034 }, + { 0x15D5, 47038 }, + { 0x15D2, 47042 }, + { 0x15D4, 47046 }, + { 0x15D1, 47050 }, + { 0x15D0, 47054 }, + { 0x1613, 47058 }, + { 0x1610, 47062 }, + { 0x1612, 47066 }, + { 0x160F, 47070 }, + { 0x160E, 47074 }, + { 0x1645, 47078 }, + { 0x1642, 47082 }, + { 0x1644, 47086 }, + { 0x1641, 47090 }, + { 0x1640, 47094 }, + { 0x1666, 47098 }, + { 0x1663, 47102 }, + { 0x1665, 47106 }, + { 0x1662, 47110 }, + { 0x1661, 47114 }, + { 0x1453, 47118 }, + { 0x162D, 47122 }, + { 0x162A, 47126 }, + { 0x162C, 47130 }, + { 0x1629, 47134 }, + { 0x1628, 47138 }, + { 0x164D, 47142 }, + { 0x164A, 47146 }, + { 0x164C, 47150 }, + { 0x1649, 47154 }, + { 0x1648, 47158 }, + { 0x15F2, 47162 }, + { 0x15C9, 47166 }, + { 0x15C6, 47170 }, + { 0x15C8, 47174 }, + { 0x15C5, 47178 }, + { 0x15C4, 47182 }, + { 0x1436, 47186 }, + { 0x15DB, 47190 }, + { 0x15D8, 47194 }, + { 0x15DA, 47198 }, + { 0x15D7, 47202 }, + { 0x15D6, 47206 }, + { 0x1618, 47210 }, + { 0x1621, 47214 }, + { 0x161E, 47218 }, + { 0x1620, 47222 }, + { 0x161D, 47226 }, + { 0x161C, 47230 }, + { 0x15FA, 47234 }, + { 0x15F7, 47238 }, + { 0x15F9, 47242 }, + { 0x15F6, 47246 }, + { 0x15F5, 47250 }, + { 0x1600, 47254 }, + { 0x15FD, 47258 }, + { 0x15FF, 47262 }, + { 0x15FC, 47266 }, + { 0x15FB, 47270 }, + { 0x1625, 47274 }, + { 0x1633, 47278 }, + { 0x1630, 47282 }, + { 0x1632, 47286 }, + { 0x162F, 47290 }, + { 0x162E, 47294 }, + { 0x160B, 47298 }, + { 0x1605, 47302 }, + { 0x15EB, 47306 }, + { 0x15CD, 47310 }, + { 0x1651, 47314 }, + { 0x1659, 47318 }, + { 0x1656, 47322 }, + { 0x1658, 47326 }, + { 0x1655, 47330 }, + { 0x1654, 47334 }, + { 0x15E1, 47338 }, + { 0x15DE, 47342 }, + { 0x15E0, 47346 }, + { 0x15DD, 47350 }, + { 0x15DC, 47354 }, + { 0x163F, 47358 }, + { 0x163C, 47362 }, + { 0x163E, 47366 }, + { 0x163B, 47370 }, + { 0x163A, 47374 }, + { 0x1660, 47378 }, + { 0x165D, 47382 }, + { 0x165F, 47386 }, + { 0x165C, 47390 }, + { 0x165B, 47394 }, + { 0x15E7, 47398 }, + { 0x15E4, 47402 }, + { 0x15E6, 47406 }, + { 0x15E3, 47410 }, + { 0x15E2, 47414 }, + { 0x15D3, 47418 }, + { 0x1611, 47422 }, + { 0x1643, 47426 }, + { 0x1664, 47430 }, + { 0x162B, 47434 }, + { 0x164B, 47438 }, + { 0x15C7, 47442 }, + { 0x15D9, 47446 }, + { 0x161F, 47450 }, + { 0x15F8, 47454 }, + { 0x15FE, 47458 }, + { 0x1631, 47462 }, + { 0x1657, 47466 }, + { 0x15DF, 47470 }, + { 0x163D, 47474 }, + { 0x1639, 47478 }, + { 0x1636, 47482 }, + { 0x1638, 47486 }, + { 0x1635, 47490 }, + { 0x1634, 47494 }, + { 0x165E, 47498 }, + { 0x15E5, 47502 }, + { 0x166C, 47506 }, + { 0x1669, 47510 }, + { 0x166B, 47514 }, + { 0x1668, 47518 }, + { 0x1667, 47522 }, + { 0x1637, 47526 }, + { 0x166A, 47530 }, + { 0x1647, 47534 }, + { 0x141E, 47539 }, + { 0x150B, 47543 }, + { 0x150A, 47547 }, + { 0x141B, 47551 }, + { 0x1416, 47555 }, + { 0x14A0, 47559 }, + { 0x1482, 47563 }, + { 0x14BA, 47567 }, + { 0x14CF, 47571 }, + { 0x150F, 47575 }, + { 0x150E, 47579 }, + { 0x150C, 47583 }, + { 0x150D, 47587 }, + { 0x1504, 47591 }, + { 0x1465, 47595 }, + { 0x153D, 47599 }, + { 0x157B, 47603 }, + { 0x1579, 47607 }, + { 0x1574, 47611 }, + { 0x1575, 47615 }, + { 0x1577, 47619 }, + { 0x157A, 47623 }, + { 0x1576, 47627 }, + { 0x1578, 47631 }, + { 0x157C, 47635 }, + { 0x15AE, 47639 }, + { 0x15AC, 47643 }, + { 0x15A7, 47647 }, + { 0x15A8, 47651 }, + { 0x15AA, 47655 }, + { 0x15AD, 47659 }, + { 0x15A9, 47663 }, + { 0x15AB, 47667 }, + { 0x15B3, 47671 }, + { 0x15B0, 47675 }, + { 0x15B1, 47679 }, + { 0x15B2, 47683 }, + { 0x1508, 47687 }, + { 0x15BF, 47691 }, + { 0x15BC, 47695 }, + { 0x15BD, 47699 }, + { 0x15BE, 47703 }, + { 0x15BB, 47707 }, + { 0x15B8, 47711 }, + { 0x15B9, 47715 }, + { 0x15BA, 47719 }, + { 0x15B7, 47723 }, + { 0x15B4, 47727 }, + { 0x15B5, 47731 }, + { 0x15B6, 47735 }, + { 0x14EB, 47739 }, + { 0x14BC, 47743 }, + { 0x144A, 47747 }, + { 0x1551, 47751 }, + { 0x1540, 47755 }, + { 0x154D, 47759 }, + { 0x1544, 47763 }, + { 0x154A, 47767 }, + { 0x158D, 47771 }, + { 0x158A, 47775 }, + { 0x158B, 47779 }, + { 0x158C, 47783 }, + { 0x1418, 47787 }, + { 0x140D, 47791 }, + { 0x140F, 47795 }, + { 0x1413, 47799 }, + { 0x149D, 47803 }, + { 0x1493, 47807 }, + { 0x1495, 47811 }, + { 0x1499, 47815 }, + { 0x147F, 47819 }, + { 0x1475, 47823 }, + { 0x1477, 47827 }, + { 0x147B, 47831 }, + { 0x14E7, 47835 }, + { 0x14DD, 47839 }, + { 0x14DF, 47843 }, + { 0x14E3, 47847 }, + { 0x14B7, 47851 }, + { 0x14AD, 47855 }, + { 0x14AF, 47859 }, + { 0x14B3, 47863 }, + { 0x14CC, 47867 }, + { 0x14CA, 47871 }, + { 0x1445, 47875 }, + { 0x143B, 47879 }, + { 0x143D, 47883 }, + { 0x1441, 47887 }, + { 0x1501, 47891 }, + { 0x14F7, 47895 }, + { 0x14F9, 47899 }, + { 0x14FD, 47903 }, + { 0x1462, 47907 }, + { 0x1458, 47911 }, + { 0x145A, 47915 }, + { 0x145E, 47919 }, + { 0x141A, 47923 }, + { 0x1411, 47927 }, + { 0x1415, 47931 }, + { 0x153A, 47935 }, + { 0x1530, 47939 }, + { 0x1532, 47943 }, + { 0x1536, 47947 }, + { 0x149F, 47951 }, + { 0x1497, 47955 }, + { 0x149B, 47959 }, + { 0x155C, 47963 }, + { 0x1481, 47967 }, + { 0x1479, 47971 }, + { 0x147D, 47975 }, + { 0x14E9, 47979 }, + { 0x14E1, 47983 }, + { 0x14E5, 47987 }, + { 0x14B9, 47991 }, + { 0x14B1, 47995 }, + { 0x14B5, 47999 }, + { 0x14CE, 48003 }, + { 0x1447, 48007 }, + { 0x143F, 48011 }, + { 0x1443, 48015 }, + { 0x154F, 48019 }, + { 0x1522, 48023 }, + { 0x1518, 48027 }, + { 0x151A, 48031 }, + { 0x151E, 48035 }, + { 0x1503, 48039 }, + { 0x14FB, 48043 }, + { 0x14FF, 48047 }, + { 0x1464, 48051 }, + { 0x145C, 48055 }, + { 0x1460, 48059 }, + { 0x153C, 48063 }, + { 0x1534, 48067 }, + { 0x1538, 48071 }, + { 0x1524, 48075 }, + { 0x151C, 48079 }, + { 0x1520, 48083 }, + { 0x1569, 48087 }, + { 0x14BE, 48091 }, + { 0x1506, 48095 }, + { 0x153F, 48099 }, + { 0x1509, 48103 }, + { 0x159F, 48107 }, + { 0x159E, 48111 }, + { 0x159B, 48115 }, + { 0x159C, 48119 }, + { 0x159D, 48123 }, + { 0x1488, 48127 }, + { 0x1485, 48131 }, + { 0x1486, 48135 }, + { 0x1487, 48139 }, + { 0x13A0, 48143 }, + { 0x13A1, 48146 }, + { 0x13A2, 48149 }, + { 0x13A3, 48152 }, + { 0x13CD, 48155 }, + { 0x13A4, 48158 }, + { 0x13A5, 48161 }, + { 0x13D3, 48164 }, + { 0x13D5, 48167 }, + { 0x13D7, 48170 }, + { 0x13D9, 48173 }, + { 0x13DA, 48176 }, + { 0x13DB, 48179 }, + { 0x13A6, 48182 }, + { 0x13A8, 48185 }, + { 0x13A9, 48188 }, + { 0x13AA, 48191 }, + { 0x13AB, 48194 }, + { 0x13AC, 48197 }, + { 0x13AD, 48200 }, + { 0x13AE, 48203 }, + { 0x13AF, 48206 }, + { 0x13B0, 48209 }, + { 0x13B1, 48212 }, + { 0x13B2, 48215 }, + { 0x13A7, 48218 }, + { 0x13B3, 48221 }, + { 0x13B4, 48224 }, + { 0x13B5, 48227 }, + { 0x13B6, 48230 }, + { 0x13B7, 48233 }, + { 0x13B8, 48236 }, + { 0x13B9, 48239 }, + { 0x13BA, 48242 }, + { 0x13BB, 48245 }, + { 0x13BC, 48248 }, + { 0x13BD, 48251 }, + { 0x13BE, 48254 }, + { 0x13C1, 48257 }, + { 0x13C2, 48260 }, + { 0x13C3, 48263 }, + { 0x13C4, 48266 }, + { 0x13C5, 48269 }, + { 0x13CC, 48272 }, + { 0x13CE, 48275 }, + { 0x13CF, 48278 }, + { 0x13D0, 48281 }, + { 0x13D1, 48284 }, + { 0x13D2, 48287 }, + { 0x13D4, 48290 }, + { 0x13D6, 48293 }, + { 0x13D8, 48296 }, + { 0x13E9, 48299 }, + { 0x13EA, 48302 }, + { 0x13EB, 48305 }, + { 0x13EC, 48308 }, + { 0x13ED, 48311 }, + { 0x13EE, 48314 }, + { 0x13EF, 48317 }, + { 0x13F0, 48320 }, + { 0x13F1, 48323 }, + { 0x13F2, 48326 }, + { 0x13F3, 48329 }, + { 0x13F4, 48332 }, + { 0x13DC, 48335 }, + { 0x13BF, 48338 }, + { 0x13C0, 48341 }, + { 0x13C6, 48344 }, + { 0x13C7, 48347 }, + { 0x13C8, 48350 }, + { 0x13C9, 48353 }, + { 0x13CA, 48356 }, + { 0x13CB, 48359 }, + { 0x13DD, 48362 }, + { 0x13DE, 48365 }, + { 0x13DF, 48368 }, + { 0x13E0, 48371 }, + { 0x13E1, 48374 }, + { 0x13E2, 48377 }, + { 0x13E3, 48380 }, + { 0x13E4, 48383 }, + { 0x13E5, 48386 }, + { 0x13E6, 48389 }, + { 0x13E7, 48392 }, + { 0x13E8, 48395 }, + { 0x220B, 48398 }, + { 0x22B3, 48401 }, + { 0x22B5, 48405 }, + { 0x22FA, 48412 }, + { 0x22FD, 48417 }, + { 0x22FB, 48420 }, + { 0x9369, 48429 }, + { 0x936E, 48434 }, + { 0x936A, 48439 }, + { 0x936D, 48444 }, + { 0x936C, 48449 }, + { 0x9371, 48454 }, + { 0x9370, 48459 }, + { 0x936F, 48464 }, + { 0x936B, 48469 }, + { 0x9360, 48474 }, + { 0x9365, 48479 }, + { 0x9361, 48484 }, + { 0x9364, 48489 }, + { 0x9363, 48494 }, + { 0x9368, 48499 }, + { 0x9367, 48504 }, + { 0x9366, 48509 }, + { 0x9362, 48514 }, + { 0x20A2, 48519 }, + { 0x00A4, 48521 }, + { 0x0430, 48523 }, + { 0x04D1, 48527 }, + { 0x04D3, 48533 }, + { 0x044D, 48539 }, + { 0x04ED, 48543 }, + { 0x0438, 48549 }, + { 0x045D, 48553 }, + { 0x04E3, 48559 }, + { 0x04E5, 48565 }, + { 0x043E, 48571 }, + { 0x04E7, 48575 }, + { 0x0443, 48581 }, + { 0x04F3, 48585 }, + { 0x04EF, 48592 }, + { 0x04F1, 48598 }, + { 0x0431, 48604 }, + { 0x0434, 48608 }, + { 0x0444, 48612 }, + { 0x043B, 48616 }, + { 0x0513, 48620 }, + { 0x04C6, 48626 }, + { 0x0521, 48632 }, + { 0x043C, 48639 }, + { 0x04CE, 48643 }, + { 0x043D, 48649 }, + { 0x04C8, 48653 }, + { 0x04CA, 48659 }, + { 0x0523, 48665 }, + { 0x04A3, 48672 }, + { 0x0440, 48678 }, + { 0x048F, 48682 }, + { 0x0441, 48688 }, + { 0x04AB, 48692 }, + { 0x0445, 48698 }, + { 0x04FD, 48702 }, + { 0x04FF, 48708 }, + { 0x04B3, 48714 }, + { 0x0435, 48720 }, + { 0x04D7, 48724 }, + { 0x0450, 48730 }, + { 0x0451, 48736 }, + { 0x0458, 48740 }, + { 0x043A, 48744 }, + { 0x04C4, 48748 }, + { 0x049F, 48754 }, + { 0x049D, 48760 }, + { 0x049B, 48767 }, + { 0x047F, 48773 }, + { 0x043F, 48777 }, + { 0x04A7, 48781 }, + { 0x051B, 48788 }, + { 0x0442, 48792 }, + { 0x568B, 48796 }, + { 0x04AD, 48803 }, + { 0x0479, 48809 }, + { 0x0432, 48813 }, + { 0x051D, 48817 }, + { 0x044F, 48821 }, + { 0x0457, 48825 }, + { 0x565F, 48829 }, + { 0x044E, 48833 }, + { 0x0437, 48837 }, + { 0x0499, 48841 }, + { 0x04DF, 48847 }, + { 0x046B, 48853 }, + { 0x0447, 48858 }, + { 0x04B9, 48862 }, + { 0x04B7, 48869 }, + { 0x04F5, 48875 }, + { 0x0452, 48881 }, + { 0x5681, 48885 }, + { 0x0455, 48889 }, + { 0x0433, 48893 }, + { 0x0495, 48897 }, + { 0x0493, 48904 }, + { 0x04FB, 48910 }, + { 0x0491, 48918 }, + { 0x04F7, 48924 }, + { 0x0453, 48930 }, + { 0x5695, 48934 }, + { 0x045C, 48938 }, + { 0x046F, 48942 }, + { 0x0515, 48946 }, + { 0x0459, 48950 }, + { 0x045A, 48954 }, + { 0x0471, 48958 }, + { 0x0517, 48962 }, + { 0x0448, 48966 }, + { 0x0446, 48970 }, + { 0x568D, 48974 }, + { 0x0519, 48978 }, + { 0x0463, 48982 }, + { 0x0436, 48986 }, + { 0x04C2, 48990 }, + { 0x0497, 48996 }, + { 0x04DD, 49002 }, + { 0x5687, 49008 }, + { 0x045F, 49012 }, + { 0x5683, 49016 }, + { 0x5689, 49020 }, + { 0x0473, 49024 }, + { 0x044A, 49028 }, + { 0x5647, 49033 }, + { 0x0501, 49037 }, + { 0x0503, 49042 }, + { 0x0509, 49047 }, + { 0x050B, 49052 }, + { 0x050D, 49057 }, + { 0x050F, 49062 }, + { 0x0505, 49067 }, + { 0x0507, 49072 }, + { 0x04BB, 49077 }, + { 0x5697, 49081 }, + { 0x5663, 49085 }, + { 0x5665, 49090 }, + { 0x5667, 49095 }, + { 0x044C, 49100 }, + { 0x5693, 49105 }, + { 0x045B, 49109 }, + { 0x5691, 49113 }, + { 0x568F, 49117 }, + { 0x044B, 49121 }, + { 0x5651, 49125 }, + { 0x04F9, 49132 }, + { 0x5685, 49138 }, + { 0x051F, 49142 }, + { 0x564D, 49147 }, + { 0x5649, 49152 }, + { 0x5643, 49156 }, + { 0x0481, 49160 }, + { 0x0461, 49164 }, + { 0x047D, 49168 }, + { 0x047B, 49174 }, + { 0x04D9, 49179 }, + { 0x04DB, 49183 }, + { 0x0449, 49189 }, + { 0x0439, 49193 }, + { 0x048B, 49198 }, + { 0x045E, 49205 }, + { 0x04E9, 49210 }, + { 0x04EB, 49215 }, + { 0x5659, 49222 }, + { 0x566D, 49228 }, + { 0x0467, 49234 }, + { 0x5641, 49239 }, + { 0x04A1, 49243 }, + { 0x565B, 49248 }, + { 0x0475, 49253 }, + { 0x0477, 49257 }, + { 0x564F, 49265 }, + { 0x5657, 49270 }, + { 0x0465, 49275 }, + { 0x046D, 49280 }, + { 0x5653, 49286 }, + { 0x565D, 49291 }, + { 0x0469, 49298 }, + { 0x04CF, 49304 }, + { 0x5655, 49308 }, + { 0x0511, 49313 }, + { 0x5645, 49318 }, + { 0x048D, 49323 }, + { 0x04AF, 49328 }, + { 0x04B1, 49333 }, + { 0x04A9, 49340 }, + { 0x04BD, 49345 }, + { 0x04BF, 49350 }, + { 0x04E1, 49357 }, + { 0x566B, 49362 }, + { 0x5669, 49367 }, + { 0x564B, 49372 }, + { 0x0454, 49377 }, + { 0x04CC, 49382 }, + { 0x0456, 49387 }, + { 0x04D5, 49392 }, + { 0x04A5, 49397 }, + { 0x04B5, 49402 }, + { 0x567E, 49407 }, + { 0x1D2B, 49409 }, + { 0x04C0, 49414 }, + { 0x566E, 49417 }, + { 0x0410, 49421 }, + { 0x04D0, 49425 }, + { 0x04D2, 49431 }, + { 0x042D, 49437 }, + { 0x04EC, 49441 }, + { 0x0418, 49447 }, + { 0x040D, 49451 }, + { 0x04E2, 49457 }, + { 0x04E4, 49463 }, + { 0x041E, 49469 }, + { 0x04E6, 49473 }, + { 0x0423, 49479 }, + { 0x04F2, 49483 }, + { 0x04EE, 49490 }, + { 0x04F0, 49496 }, + { 0x0411, 49502 }, + { 0x0414, 49506 }, + { 0x0424, 49510 }, + { 0x041B, 49514 }, + { 0x0512, 49518 }, + { 0x04C5, 49524 }, + { 0x0520, 49530 }, + { 0x041C, 49537 }, + { 0x04CD, 49541 }, + { 0x041D, 49547 }, + { 0x04C7, 49551 }, + { 0x04C9, 49557 }, + { 0x0522, 49563 }, + { 0x04A2, 49570 }, + { 0x0420, 49576 }, + { 0x048E, 49580 }, + { 0x0421, 49586 }, + { 0x04AA, 49590 }, + { 0x0425, 49596 }, + { 0x04FC, 49600 }, + { 0x04FE, 49606 }, + { 0x04B2, 49612 }, + { 0x0415, 49618 }, + { 0x04D6, 49622 }, + { 0x0400, 49628 }, + { 0x0401, 49634 }, + { 0x0408, 49638 }, + { 0x041A, 49642 }, + { 0x04C3, 49646 }, + { 0x049E, 49652 }, + { 0x049C, 49658 }, + { 0x049A, 49665 }, + { 0x047E, 49671 }, + { 0x041F, 49675 }, + { 0x04A6, 49679 }, + { 0x051A, 49686 }, + { 0x0422, 49690 }, + { 0x568A, 49694 }, + { 0x04AC, 49701 }, + { 0x0478, 49707 }, + { 0x0412, 49711 }, + { 0x051C, 49715 }, + { 0x042F, 49719 }, + { 0x0407, 49723 }, + { 0x565E, 49727 }, + { 0x042E, 49731 }, + { 0x0417, 49735 }, + { 0x0498, 49739 }, + { 0x04DE, 49745 }, + { 0x046A, 49751 }, + { 0x0427, 49756 }, + { 0x04B8, 49760 }, + { 0x04B6, 49767 }, + { 0x04F4, 49773 }, + { 0x0402, 49779 }, + { 0x5680, 49783 }, + { 0x0405, 49787 }, + { 0x0413, 49791 }, + { 0x0494, 49795 }, + { 0x0492, 49802 }, + { 0x04FA, 49808 }, + { 0x0490, 49816 }, + { 0x04F6, 49822 }, + { 0x0403, 49828 }, + { 0x5694, 49832 }, + { 0x040C, 49836 }, + { 0x046E, 49840 }, + { 0x0514, 49844 }, + { 0x0409, 49848 }, + { 0x040A, 49852 }, + { 0x0470, 49856 }, + { 0x0516, 49860 }, + { 0x0428, 49864 }, + { 0x0426, 49868 }, + { 0x568C, 49872 }, + { 0x0518, 49876 }, + { 0x0462, 49880 }, + { 0x0416, 49884 }, + { 0x04C1, 49888 }, + { 0x0496, 49894 }, + { 0x04DC, 49900 }, + { 0x5686, 49906 }, + { 0x040F, 49910 }, + { 0x5682, 49914 }, + { 0x5688, 49918 }, + { 0x0472, 49922 }, + { 0x042A, 49926 }, + { 0x5646, 49931 }, + { 0x0500, 49935 }, + { 0x0502, 49940 }, + { 0x0508, 49945 }, + { 0x050A, 49950 }, + { 0x050C, 49955 }, + { 0x050E, 49960 }, + { 0x0504, 49965 }, + { 0x0506, 49970 }, + { 0x04BA, 49975 }, + { 0x5696, 49979 }, + { 0x5662, 49983 }, + { 0x5664, 49988 }, + { 0x5666, 49993 }, + { 0x042C, 49998 }, + { 0x5692, 50003 }, + { 0x040B, 50007 }, + { 0x5690, 50011 }, + { 0x568E, 50015 }, + { 0x042B, 50019 }, + { 0x5650, 50023 }, + { 0x04F8, 50030 }, + { 0x5684, 50036 }, + { 0x051E, 50040 }, + { 0x564C, 50045 }, + { 0x5648, 50050 }, + { 0x5642, 50054 }, + { 0x0480, 50058 }, + { 0x0460, 50062 }, + { 0x047C, 50066 }, + { 0x047A, 50072 }, + { 0x04D8, 50077 }, + { 0x04DA, 50081 }, + { 0x0429, 50087 }, + { 0x0419, 50091 }, + { 0x048A, 50096 }, + { 0x040E, 50103 }, + { 0x04E8, 50108 }, + { 0x04EA, 50113 }, + { 0x5658, 50120 }, + { 0x566C, 50126 }, + { 0x0466, 50132 }, + { 0x5640, 50137 }, + { 0x04A0, 50141 }, + { 0x565A, 50146 }, + { 0x0474, 50151 }, + { 0x0476, 50155 }, + { 0x564E, 50163 }, + { 0x5656, 50168 }, + { 0x0464, 50173 }, + { 0x046C, 50178 }, + { 0x5652, 50184 }, + { 0x565C, 50189 }, + { 0x0468, 50196 }, + { 0x5654, 50202 }, + { 0x0510, 50207 }, + { 0x5644, 50212 }, + { 0x048C, 50217 }, + { 0x04AE, 50222 }, + { 0x04B0, 50227 }, + { 0x04A8, 50234 }, + { 0x04BC, 50239 }, + { 0x04BE, 50244 }, + { 0x04E0, 50251 }, + { 0x566A, 50256 }, + { 0x5668, 50261 }, + { 0x564A, 50266 }, + { 0x0404, 50271 }, + { 0x04CB, 50276 }, + { 0x0406, 50281 }, + { 0x04D4, 50286 }, + { 0x04A4, 50291 }, + { 0x04B4, 50296 }, + { 0x567F, 50301 }, + { 0x0482, 50303 }, + { 0x2300, 50306 }, + { 0x00F7, 50308 }, + { 0x2215, 50310 }, + { 0x22C7, 50312 }, + { 0x279B, 50314 }, + { 0x2301, 50318 }, + { 0x2383, 50320 }, + { 0x2709, 50322 }, + { 0x1362, 50323 }, + { 0x1365, 50326 }, + { 0x1363, 50328 }, + { 0x1369, 50330 }, + { 0x136E, 50333 }, + { 0x136A, 50336 }, + { 0x136D, 50339 }, + { 0x136C, 50342 }, + { 0x1371, 50345 }, + { 0x1370, 50348 }, + { 0x136F, 50351 }, + { 0x136B, 50354 }, + { 0x1399, 50357 }, + { 0x1391, 50361 }, + { 0x1394, 50365 }, + { 0x1397, 50369 }, + { 0x1395, 50373 }, + { 0x1393, 50377 }, + { 0x1390, 50382 }, + { 0x1396, 50386 }, + { 0x1392, 50390 }, + { 0x1398, 50394 }, + { 0x1372, 50398 }, + { 0x137C, 50401 }, + { 0x1376, 50405 }, + { 0x1375, 50408 }, + { 0x1377, 50411 }, + { 0x1379, 50414 }, + { 0x137A, 50417 }, + { 0x1374, 50420 }, + { 0x1373, 50423 }, + { 0x137B, 50426 }, + { 0x1378, 50429 }, + { 0x1366, 50432 }, + { 0x1360, 50435 }, + { 0x1367, 50438 }, + { 0x1260, 50441 }, + { 0x1265, 50444 }, + { 0x1262, 50447 }, + { 0x1266, 50450 }, + { 0x1261, 50453 }, + { 0x1278, 50456 }, + { 0x127D, 50459 }, + { 0x127A, 50462 }, + { 0x127E, 50465 }, + { 0x1279, 50468 }, + { 0x12F0, 50471 }, + { 0x12F5, 50474 }, + { 0x12F2, 50477 }, + { 0x12F6, 50480 }, + { 0x12F1, 50483 }, + { 0x1348, 50486 }, + { 0x134D, 50489 }, + { 0x134A, 50492 }, + { 0x134E, 50495 }, + { 0x1349, 50498 }, + { 0x1308, 50501 }, + { 0x130D, 50504 }, + { 0x130A, 50507 }, + { 0x130E, 50510 }, + { 0x1309, 50513 }, + { 0x1200, 50516 }, + { 0x1205, 50519 }, + { 0x1202, 50522 }, + { 0x1206, 50525 }, + { 0x1201, 50528 }, + { 0x1300, 50531 }, + { 0x1305, 50534 }, + { 0x1302, 50537 }, + { 0x1306, 50540 }, + { 0x1301, 50543 }, + { 0x12A8, 50546 }, + { 0x12AD, 50549 }, + { 0x12AA, 50552 }, + { 0x12AE, 50555 }, + { 0x12A9, 50558 }, + { 0x1208, 50561 }, + { 0x120D, 50564 }, + { 0x120A, 50567 }, + { 0x120E, 50570 }, + { 0x1209, 50573 }, + { 0x1218, 50576 }, + { 0x121D, 50579 }, + { 0x121A, 50582 }, + { 0x121E, 50585 }, + { 0x1219, 50588 }, + { 0x1290, 50591 }, + { 0x1295, 50594 }, + { 0x1292, 50597 }, + { 0x1296, 50600 }, + { 0x1291, 50603 }, + { 0x1350, 50606 }, + { 0x1355, 50609 }, + { 0x1352, 50612 }, + { 0x1356, 50615 }, + { 0x1351, 50618 }, + { 0x1240, 50621 }, + { 0x1245, 50624 }, + { 0x1242, 50627 }, + { 0x1246, 50630 }, + { 0x1241, 50633 }, + { 0x1228, 50636 }, + { 0x122D, 50639 }, + { 0x122A, 50642 }, + { 0x122E, 50645 }, + { 0x1229, 50648 }, + { 0x1230, 50651 }, + { 0x1235, 50654 }, + { 0x1232, 50657 }, + { 0x1236, 50660 }, + { 0x1231, 50663 }, + { 0x1270, 50666 }, + { 0x1275, 50669 }, + { 0x1272, 50672 }, + { 0x1276, 50675 }, + { 0x1271, 50678 }, + { 0x1268, 50681 }, + { 0x126D, 50684 }, + { 0x126A, 50687 }, + { 0x126E, 50690 }, + { 0x1269, 50693 }, + { 0x12C8, 50696 }, + { 0x12CD, 50699 }, + { 0x12CA, 50702 }, + { 0x12CE, 50705 }, + { 0x12C9, 50708 }, + { 0x1280, 50711 }, + { 0x1285, 50714 }, + { 0x1282, 50717 }, + { 0x1286, 50720 }, + { 0x1281, 50723 }, + { 0x12E8, 50726 }, + { 0x12ED, 50729 }, + { 0x12EA, 50732 }, + { 0x12EE, 50735 }, + { 0x12E9, 50738 }, + { 0x12D8, 50741 }, + { 0x12DD, 50744 }, + { 0x12DA, 50747 }, + { 0x12DE, 50750 }, + { 0x12D9, 50753 }, + { 0x1263, 50756 }, + { 0x1264, 50759 }, + { 0x2D85, 50762 }, + { 0x1267, 50765 }, + { 0x1387, 50768 }, + { 0x1385, 50771 }, + { 0x127B, 50774 }, + { 0x2DA8, 50777 }, + { 0x2DAD, 50780 }, + { 0x2DAA, 50783 }, + { 0x2DAE, 50786 }, + { 0x2DA9, 50789 }, + { 0x127C, 50792 }, + { 0x1328, 50795 }, + { 0x132D, 50798 }, + { 0x132A, 50801 }, + { 0x132E, 50804 }, + { 0x1329, 50807 }, + { 0x2D87, 50810 }, + { 0x127F, 50813 }, + { 0x12F3, 50816 }, + { 0x12F8, 50819 }, + { 0x12FD, 50822 }, + { 0x12FA, 50825 }, + { 0x12FE, 50828 }, + { 0x12F9, 50831 }, + { 0x12F4, 50834 }, + { 0x2D8C, 50837 }, + { 0x12F7, 50840 }, + { 0x134B, 50843 }, + { 0x134C, 50846 }, + { 0x134F, 50849 }, + { 0x138B, 50852 }, + { 0x1389, 50855 }, + { 0x135A, 50858 }, + { 0x130B, 50861 }, + { 0x130C, 50864 }, + { 0x1318, 50867 }, + { 0x131D, 50870 }, + { 0x131A, 50873 }, + { 0x131E, 50876 }, + { 0x1319, 50879 }, + { 0x130F, 50882 }, + { 0x1310, 50885 }, + { 0x1315, 50888 }, + { 0x1312, 50891 }, + { 0x2DD8, 50894 }, + { 0x2DDD, 50897 }, + { 0x2DDA, 50900 }, + { 0x2DDE, 50903 }, + { 0x2DD9, 50906 }, + { 0x1203, 50909 }, + { 0x1204, 50912 }, + { 0x1210, 50915 }, + { 0x1215, 50918 }, + { 0x1212, 50921 }, + { 0x1216, 50924 }, + { 0x1211, 50927 }, + { 0x1207, 50930 }, + { 0x1303, 50933 }, + { 0x1304, 50936 }, + { 0x2D8E, 50939 }, + { 0x1307, 50942 }, + { 0x12AB, 50945 }, + { 0x12AC, 50948 }, + { 0x12AF, 50951 }, + { 0x12B0, 50954 }, + { 0x12B5, 50957 }, + { 0x12B2, 50960 }, + { 0x12B8, 50963 }, + { 0x12BD, 50966 }, + { 0x12BA, 50969 }, + { 0x12BE, 50972 }, + { 0x12B9, 50975 }, + { 0x2DC8, 50978 }, + { 0x2DCD, 50981 }, + { 0x2DCA, 50984 }, + { 0x2DCE, 50987 }, + { 0x2DC9, 50990 }, + { 0x120B, 50993 }, + { 0x120C, 50996 }, + { 0x2D80, 50999 }, + { 0x120F, 51002 }, + { 0x121B, 51005 }, + { 0x121C, 51008 }, + { 0x2D81, 51011 }, + { 0x121F, 51014 }, + { 0x1383, 51017 }, + { 0x1381, 51020 }, + { 0x1359, 51023 }, + { 0x1293, 51026 }, + { 0x1294, 51029 }, + { 0x2D88, 51032 }, + { 0x1297, 51035 }, + { 0x1298, 51038 }, + { 0x129D, 51041 }, + { 0x129A, 51044 }, + { 0x129E, 51047 }, + { 0x1299, 51050 }, + { 0x1353, 51053 }, + { 0x1354, 51056 }, + { 0x1330, 51059 }, + { 0x1335, 51062 }, + { 0x1332, 51065 }, + { 0x1336, 51068 }, + { 0x1331, 51071 }, + { 0x2D92, 51074 }, + { 0x1357, 51077 }, + { 0x138F, 51080 }, + { 0x138D, 51083 }, + { 0x1243, 51086 }, + { 0x1244, 51089 }, + { 0x1250, 51092 }, + { 0x1255, 51095 }, + { 0x1252, 51098 }, + { 0x1256, 51101 }, + { 0x1251, 51104 }, + { 0x1247, 51107 }, + { 0x1248, 51110 }, + { 0x124D, 51113 }, + { 0x124A, 51116 }, + { 0x2DC0, 51119 }, + { 0x2DC5, 51122 }, + { 0x2DC2, 51125 }, + { 0x2DC6, 51128 }, + { 0x2DC1, 51131 }, + { 0x122B, 51134 }, + { 0x122C, 51137 }, + { 0x2D82, 51140 }, + { 0x122F, 51143 }, + { 0x1358, 51146 }, + { 0x1233, 51149 }, + { 0x1234, 51152 }, + { 0x1238, 51155 }, + { 0x123D, 51158 }, + { 0x123A, 51161 }, + { 0x123E, 51164 }, + { 0x1239, 51167 }, + { 0x2D83, 51170 }, + { 0x2DA0, 51173 }, + { 0x2DA5, 51176 }, + { 0x2DA2, 51179 }, + { 0x2DA6, 51182 }, + { 0x2DA1, 51185 }, + { 0x1237, 51188 }, + { 0x1220, 51191 }, + { 0x1225, 51194 }, + { 0x1222, 51197 }, + { 0x1226, 51200 }, + { 0x1221, 51203 }, + { 0x1273, 51206 }, + { 0x1274, 51209 }, + { 0x1320, 51212 }, + { 0x1325, 51215 }, + { 0x1322, 51218 }, + { 0x1326, 51221 }, + { 0x1321, 51224 }, + { 0x2D86, 51227 }, + { 0x1338, 51230 }, + { 0x133D, 51233 }, + { 0x133A, 51236 }, + { 0x133E, 51239 }, + { 0x1339, 51242 }, + { 0x1277, 51245 }, + { 0x1340, 51248 }, + { 0x1345, 51251 }, + { 0x1342, 51254 }, + { 0x1346, 51257 }, + { 0x1341, 51260 }, + { 0x126B, 51263 }, + { 0x126C, 51266 }, + { 0x126F, 51269 }, + { 0x12CB, 51272 }, + { 0x12CC, 51275 }, + { 0x12CF, 51278 }, + { 0x1283, 51281 }, + { 0x1284, 51284 }, + { 0x1287, 51287 }, + { 0x1288, 51290 }, + { 0x128D, 51293 }, + { 0x128A, 51296 }, + { 0x2DD0, 51299 }, + { 0x2DD5, 51302 }, + { 0x2DD2, 51305 }, + { 0x2DD6, 51308 }, + { 0x2DD1, 51311 }, + { 0x12EB, 51314 }, + { 0x12EC, 51317 }, + { 0x12EF, 51320 }, + { 0x12DB, 51323 }, + { 0x12DC, 51326 }, + { 0x12E0, 51329 }, + { 0x12E5, 51332 }, + { 0x12E2, 51335 }, + { 0x12E6, 51338 }, + { 0x12E1, 51341 }, + { 0x2D8B, 51344 }, + { 0x12DF, 51347 }, + { 0x2DB0, 51350 }, + { 0x2DB5, 51353 }, + { 0x2DB2, 51356 }, + { 0x2DB6, 51359 }, + { 0x2DB1, 51362 }, + { 0x1386, 51365 }, + { 0x2DAB, 51368 }, + { 0x2DAC, 51371 }, + { 0x2DB8, 51374 }, + { 0x2DBD, 51377 }, + { 0x2DBA, 51380 }, + { 0x2DBE, 51383 }, + { 0x2DB9, 51386 }, + { 0x132B, 51389 }, + { 0x132C, 51392 }, + { 0x2D90, 51395 }, + { 0x132F, 51398 }, + { 0x12FB, 51401 }, + { 0x12FC, 51404 }, + { 0x2D8D, 51407 }, + { 0x12FF, 51410 }, + { 0x138A, 51413 }, + { 0x131B, 51416 }, + { 0x131C, 51419 }, + { 0x2D93, 51422 }, + { 0x2D96, 51425 }, + { 0x2D94, 51428 }, + { 0x1313, 51431 }, + { 0x1314, 51434 }, + { 0x2DDB, 51437 }, + { 0x2DDC, 51440 }, + { 0x1213, 51443 }, + { 0x1214, 51446 }, + { 0x1217, 51449 }, + { 0x12B3, 51452 }, + { 0x12B4, 51455 }, + { 0x12BB, 51458 }, + { 0x12BC, 51461 }, + { 0x12C0, 51464 }, + { 0x12C5, 51467 }, + { 0x12C2, 51470 }, + { 0x2DCB, 51473 }, + { 0x2DCC, 51476 }, + { 0x1382, 51479 }, + { 0x129B, 51482 }, + { 0x129C, 51485 }, + { 0x2D89, 51488 }, + { 0x129F, 51491 }, + { 0x1333, 51494 }, + { 0x1334, 51497 }, + { 0x2D91, 51500 }, + { 0x1337, 51503 }, + { 0x138E, 51506 }, + { 0x1253, 51509 }, + { 0x1254, 51512 }, + { 0x1258, 51515 }, + { 0x125D, 51518 }, + { 0x125A, 51521 }, + { 0x124B, 51524 }, + { 0x124C, 51527 }, + { 0x2DC3, 51530 }, + { 0x2DC4, 51533 }, + { 0x123B, 51536 }, + { 0x123C, 51539 }, + { 0x2D84, 51542 }, + { 0x123F, 51545 }, + { 0x2DA3, 51548 }, + { 0x2DA4, 51551 }, + { 0x1223, 51554 }, + { 0x1224, 51557 }, + { 0x1227, 51560 }, + { 0x1323, 51563 }, + { 0x1324, 51566 }, + { 0x2D8F, 51569 }, + { 0x1327, 51572 }, + { 0x133B, 51575 }, + { 0x133C, 51578 }, + { 0x133F, 51581 }, + { 0x1343, 51584 }, + { 0x1344, 51587 }, + { 0x1347, 51590 }, + { 0x128B, 51593 }, + { 0x128C, 51596 }, + { 0x2DD3, 51599 }, + { 0x2DD4, 51602 }, + { 0x12E3, 51605 }, + { 0x12E4, 51608 }, + { 0x12E7, 51611 }, + { 0x2DB3, 51614 }, + { 0x2DB4, 51617 }, + { 0x2DBB, 51620 }, + { 0x2DBC, 51623 }, + { 0x131F, 51626 }, + { 0x2D95, 51629 }, + { 0x12C3, 51632 }, + { 0x12C4, 51635 }, + { 0x125B, 51638 }, + { 0x125C, 51641 }, + { 0x12A0, 51644 }, + { 0x12A5, 51648 }, + { 0x12A2, 51652 }, + { 0x12A6, 51656 }, + { 0x12A1, 51660 }, + { 0x12A3, 51664 }, + { 0x12A4, 51668 }, + { 0x2D8A, 51672 }, + { 0x12A7, 51676 }, + { 0x1384, 51680 }, + { 0x1388, 51684 }, + { 0x1380, 51688 }, + { 0x138C, 51692 }, + { 0x12D0, 51696 }, + { 0x12D5, 51700 }, + { 0x12D2, 51704 }, + { 0x12D6, 51708 }, + { 0x12D1, 51712 }, + { 0x12D3, 51716 }, + { 0x12D4, 51720 }, + { 0x135F, 51724 }, + { 0x1368, 51728 }, + { 0x1364, 51731 }, + { 0x1361, 51733 }, + { 0x06F1, 51735 }, + { 0x06F6, 51739 }, + { 0x06F2, 51743 }, + { 0x06F5, 51747 }, + { 0x06F4, 51751 }, + { 0x06F9, 51755 }, + { 0x06F0, 51759 }, + { 0x06F8, 51763 }, + { 0x06F7, 51767 }, + { 0x06F3, 51771 }, + { 0x00AA, 51775 }, + { 0x23E5, 51778 }, + { 0x2044, 51779 }, + { 0x215F, 51781 }, + { 0x2061, 51784 }, + { 0x2D00, 51786 }, + { 0x2D04, 51790 }, + { 0x2D21, 51794 }, + { 0x2D08, 51798 }, + { 0x2D0D, 51802 }, + { 0x2D13, 51806 }, + { 0x2D23, 51810 }, + { 0x2D01, 51814 }, + { 0x2D1A, 51818 }, + { 0x2D1C, 51822 }, + { 0x2D03, 51826 }, + { 0x2D02, 51830 }, + { 0x2D20, 51834 }, + { 0x2D24, 51838 }, + { 0x2D22, 51842 }, + { 0x2D25, 51846 }, + { 0x2D1B, 51850 }, + { 0x2D09, 51854 }, + { 0x2D0A, 51858 }, + { 0x2D0B, 51862 }, + { 0x2D0C, 51866 }, + { 0x2D0E, 51870 }, + { 0x2D17, 51874 }, + { 0x2D10, 51878 }, + { 0x2D11, 51882 }, + { 0x2D07, 51886 }, + { 0x2D12, 51890 }, + { 0x2D05, 51894 }, + { 0x2D1E, 51898 }, + { 0x2D06, 51902 }, + { 0x2D1D, 51906 }, + { 0x2D19, 51910 }, + { 0x2D16, 51914 }, + { 0x2D1F, 51918 }, + { 0x2D15, 51922 }, + { 0x2D14, 51926 }, + { 0x2D18, 51930 }, + { 0x2D0F, 51934 }, + { 0x10D0, 51938 }, + { 0x10D4, 51941 }, + { 0x10F6, 51944 }, + { 0x10F1, 51947 }, + { 0x10D8, 51950 }, + { 0x10DD, 51953 }, + { 0x10E3, 51956 }, + { 0x10F3, 51959 }, + { 0x10F7, 51962 }, + { 0x10FA, 51965 }, + { 0x10D1, 51968 }, + { 0x10EA, 51971 }, + { 0x10EC, 51974 }, + { 0x10D3, 51977 }, + { 0x10D2, 51980 }, + { 0x10F0, 51983 }, + { 0x10F4, 51986 }, + { 0x10F2, 51989 }, + { 0x10F5, 51992 }, + { 0x10EB, 51995 }, + { 0x10D9, 51998 }, + { 0x10DA, 52001 }, + { 0x10DB, 52004 }, + { 0x10DC, 52007 }, + { 0x10DE, 52010 }, + { 0x10E7, 52013 }, + { 0x10E0, 52016 }, + { 0x10E1, 52019 }, + { 0x10D7, 52022 }, + { 0x10E2, 52025 }, + { 0x10D5, 52028 }, + { 0x10EE, 52031 }, + { 0x10D6, 52034 }, + { 0x10ED, 52037 }, + { 0x10E9, 52040 }, + { 0x10E6, 52043 }, + { 0x10EF, 52046 }, + { 0x10E5, 52049 }, + { 0x10E4, 52052 }, + { 0x10E8, 52055 }, + { 0x10DF, 52058 }, + { 0x10F8, 52061 }, + { 0x10F9, 52064 }, + { 0x10A0, 52068 }, + { 0x10A4, 52072 }, + { 0x10C1, 52076 }, + { 0x10A8, 52080 }, + { 0x10AD, 52084 }, + { 0x10B3, 52088 }, + { 0x10C3, 52092 }, + { 0x10A1, 52096 }, + { 0x10BA, 52100 }, + { 0x10BC, 52104 }, + { 0x10A3, 52108 }, + { 0x10A2, 52112 }, + { 0x10C0, 52116 }, + { 0x10C4, 52120 }, + { 0x10C2, 52124 }, + { 0x10C5, 52128 }, + { 0x10BB, 52132 }, + { 0x10A9, 52136 }, + { 0x10AA, 52140 }, + { 0x10AB, 52144 }, + { 0x10AC, 52148 }, + { 0x10AE, 52152 }, + { 0x10B7, 52156 }, + { 0x10B0, 52160 }, + { 0x10B1, 52164 }, + { 0x10A7, 52168 }, + { 0x10B2, 52172 }, + { 0x10A5, 52176 }, + { 0x10BE, 52180 }, + { 0x10A6, 52184 }, + { 0x10BD, 52188 }, + { 0x10B9, 52192 }, + { 0x10B6, 52196 }, + { 0x10BF, 52200 }, + { 0x10B5, 52204 }, + { 0x10B4, 52208 }, + { 0x10B8, 52212 }, + { 0x10AF, 52216 }, + { 0x10FB, 52220 }, + { 0x0AD0, 52223 }, + { 0x0ABC, 52225 }, + { 0x0ACD, 52228 }, + { 0x0A83, 52231 }, + { 0x0A82, 52234 }, + { 0x0ABD, 52237 }, + { 0x0A81, 52240 }, + { 0x0AE7, 52243 }, + { 0x0AEC, 52246 }, + { 0x0AE8, 52249 }, + { 0x0AEB, 52252 }, + { 0x0AEA, 52255 }, + { 0x0AEF, 52258 }, + { 0x0AE6, 52261 }, + { 0x0AEE, 52264 }, + { 0x0AED, 52267 }, + { 0x0AE9, 52270 }, + { 0x0AF1, 52273 }, + { 0x0AC7, 52276 }, + { 0x0ABF, 52280 }, + { 0x0ACB, 52284 }, + { 0x0AC1, 52288 }, + { 0x0ABE, 52292 }, + { 0x0AC8, 52296 }, + { 0x0ACC, 52300 }, + { 0x0AC0, 52304 }, + { 0x0AC2, 52308 }, + { 0x0AC5, 52312 }, + { 0x0AC9, 52317 }, + { 0x0AE2, 52322 }, + { 0x0AC3, 52327 }, + { 0x0AE3, 52332 }, + { 0x0AC4, 52337 }, + { 0x0A8D, 52342 }, + { 0x0A91, 52346 }, + { 0x0A85, 52350 }, + { 0x0A8F, 52353 }, + { 0x0A87, 52356 }, + { 0x0A93, 52359 }, + { 0x0A89, 52362 }, + { 0x0A86, 52365 }, + { 0x0A90, 52368 }, + { 0x0A94, 52371 }, + { 0x0AAC, 52374 }, + { 0x0A9A, 52377 }, + { 0x0AA6, 52380 }, + { 0x0A97, 52383 }, + { 0x0AB9, 52386 }, + { 0x0A88, 52389 }, + { 0x0A9C, 52392 }, + { 0x0A95, 52395 }, + { 0x0AB2, 52398 }, + { 0x0AAE, 52401 }, + { 0x0AA8, 52404 }, + { 0x0AAA, 52407 }, + { 0x0AB0, 52410 }, + { 0x0AB8, 52413 }, + { 0x0AA4, 52416 }, + { 0x0A8A, 52419 }, + { 0x0AB5, 52422 }, + { 0x0AAF, 52425 }, + { 0x0AAD, 52428 }, + { 0x0A9B, 52431 }, + { 0x0AA1, 52434 }, + { 0x0AA7, 52437 }, + { 0x0A98, 52440 }, + { 0x0A9D, 52443 }, + { 0x0A96, 52446 }, + { 0x0AB3, 52449 }, + { 0x0A99, 52452 }, + { 0x0AA3, 52455 }, + { 0x0A9E, 52458 }, + { 0x0AAB, 52461 }, + { 0x0AB6, 52464 }, + { 0x0AB7, 52467 }, + { 0x0AA5, 52470 }, + { 0x0A9F, 52473 }, + { 0x0AA2, 52476 }, + { 0x0AA0, 52479 }, + { 0x0A8C, 52482 }, + { 0x0A8B, 52486 }, + { 0x0AE1, 52490 }, + { 0x0AE0, 52494 }, + { 0x0A74, 52498 }, + { 0x0A72, 52501 }, + { 0x0A73, 52503 }, + { 0x0A01, 52505 }, + { 0x0A02, 52509 }, + { 0x0A3C, 52512 }, + { 0x0A51, 52515 }, + { 0x0A4D, 52518 }, + { 0x0A75, 52521 }, + { 0x0A03, 52524 }, + { 0x0A71, 52527 }, + { 0x0A67, 52529 }, + { 0x0A6C, 52532 }, + { 0x0A68, 52535 }, + { 0x0A6B, 52538 }, + { 0x0A6A, 52541 }, + { 0x0A6F, 52544 }, + { 0x0A66, 52547 }, + { 0x0A6E, 52550 }, + { 0x0A6D, 52553 }, + { 0x0A69, 52556 }, + { 0x0A70, 52559 }, + { 0x0A3F, 52561 }, + { 0x0A41, 52565 }, + { 0x0A3E, 52569 }, + { 0x0A48, 52573 }, + { 0x0A4C, 52577 }, + { 0x0A47, 52581 }, + { 0x0A40, 52585 }, + { 0x0A4B, 52589 }, + { 0x0A42, 52593 }, + { 0x0A05, 52597 }, + { 0x0A07, 52600 }, + { 0x0A09, 52603 }, + { 0x0A06, 52606 }, + { 0x0A10, 52609 }, + { 0x0A14, 52612 }, + { 0x0A2C, 52615 }, + { 0x0A1A, 52618 }, + { 0x0A26, 52621 }, + { 0x0A0F, 52624 }, + { 0x0A5E, 52627 }, + { 0x0A17, 52630 }, + { 0x0A39, 52633 }, + { 0x0A08, 52636 }, + { 0x0A1C, 52639 }, + { 0x0A15, 52642 }, + { 0x0A32, 52645 }, + { 0x0A2E, 52648 }, + { 0x0A28, 52651 }, + { 0x0A13, 52654 }, + { 0x0A2A, 52657 }, + { 0x0A30, 52660 }, + { 0x0A38, 52663 }, + { 0x0A24, 52666 }, + { 0x0A0A, 52669 }, + { 0x0A35, 52672 }, + { 0x0A2F, 52675 }, + { 0x0A5B, 52678 }, + { 0x0A2D, 52681 }, + { 0x0A1B, 52684 }, + { 0x0A21, 52687 }, + { 0x0A27, 52690 }, + { 0x0A18, 52693 }, + { 0x0A1D, 52696 }, + { 0x0A16, 52699 }, + { 0x0A33, 52702 }, + { 0x0A19, 52705 }, + { 0x0A23, 52708 }, + { 0x0A1E, 52711 }, + { 0x0A2B, 52714 }, + { 0x0A5C, 52717 }, + { 0x0A36, 52720 }, + { 0x0A25, 52723 }, + { 0x0A1F, 52726 }, + { 0x0A22, 52729 }, + { 0x0A5A, 52732 }, + { 0x0A59, 52735 }, + { 0x0A20, 52738 }, + { 0x3021, 52741 }, + { 0x3026, 52744 }, + { 0x3038, 52747 }, + { 0x3022, 52750 }, + { 0x3025, 52753 }, + { 0x3024, 52756 }, + { 0x3029, 52759 }, + { 0x3028, 52762 }, + { 0x3027, 52765 }, + { 0x3023, 52768 }, + { 0x303A, 52771 }, + { 0x3039, 52774 }, + { 0x4DC6, 52777 }, + { 0x4DEF, 52781 }, + { 0x4DE4, 52785 }, + { 0x4DF8, 52789 }, + { 0x4DF9, 52794 }, + { 0x4DDC, 52799 }, + { 0x4DF3, 52804 }, + { 0x4DF2, 52810 }, + { 0x4DF1, 52815 }, + { 0x4DDD, 52819 }, + { 0x4DC0, 52824 }, + { 0x4DF5, 52829 }, + { 0x4DF7, 52834 }, + { 0x4DC1, 52838 }, + { 0x4DD1, 52843 }, + { 0x4DFE, 52849 }, + { 0x4DD5, 52853 }, + { 0x4DE1, 52856 }, + { 0x4DD9, 52860 }, + { 0x4DCD, 52864 }, + { 0x4DDB, 52868 }, + { 0x4DFC, 52872 }, + { 0x4DDA, 52876 }, + { 0x4DCA, 52880 }, + { 0x4DC8, 52883 }, + { 0x4DFD, 52887 }, + { 0x4DFF, 52891 }, + { 0x4DD4, 52895 }, + { 0x4DEB, 52899 }, + { 0x4DD7, 52904 }, + { 0x4DC7, 52907 }, + { 0x4DCE, 52911 }, + { 0x4DED, 52914 }, + { 0x4DE0, 52918 }, + { 0x4DC4, 52921 }, + { 0x4DD2, 52924 }, + { 0x4DC5, 52927 }, + { 0x4DE8, 52930 }, + { 0x4DDF, 52933 }, + { 0x4DE9, 52936 }, + { 0x4DE2, 52939 }, + { 0x4DC9, 52942 }, + { 0x4DC3, 52945 }, + { 0x4DF6, 52949 }, + { 0x4DE3, 52952 }, + { 0x4DD0, 52958 }, + { 0x4DEC, 52961 }, + { 0x4DDE, 52965 }, + { 0x4DD8, 52968 }, + { 0x4DD6, 52971 }, + { 0x4DC2, 52975 }, + { 0x4DFA, 52981 }, + { 0x4DCF, 52984 }, + { 0x4DCC, 52987 }, + { 0x4DFB, 52990 }, + { 0x4DE5, 52993 }, + { 0x4DEE, 52996 }, + { 0x4DF0, 52999 }, + { 0x4DCB, 53002 }, + { 0x4DE7, 53005 }, + { 0x4DF4, 53008 }, + { 0x4DE6, 53011 }, + { 0x4DEA, 53014 }, + { 0x4DD3, 53017 }, + { 0x3042, 53020 }, + { 0x3048, 53023 }, + { 0x3044, 53026 }, + { 0x3093, 53029 }, + { 0x304A, 53032 }, + { 0x3046, 53035 }, + { 0x3070, 53038 }, + { 0x3079, 53041 }, + { 0x3073, 53044 }, + { 0x307C, 53047 }, + { 0x3076, 53050 }, + { 0x3060, 53053 }, + { 0x3067, 53056 }, + { 0x3062, 53059 }, + { 0x3069, 53062 }, + { 0x3065, 53065 }, + { 0x304C, 53068 }, + { 0x3052, 53071 }, + { 0x304E, 53074 }, + { 0x3054, 53077 }, + { 0x3050, 53080 }, + { 0x306F, 53083 }, + { 0x3078, 53086 }, + { 0x3072, 53089 }, + { 0x307B, 53092 }, + { 0x3075, 53095 }, + { 0x304B, 53098 }, + { 0x3051, 53101 }, + { 0x304D, 53104 }, + { 0x3053, 53107 }, + { 0x304F, 53110 }, + { 0x307E, 53113 }, + { 0x3081, 53116 }, + { 0x307F, 53119 }, + { 0x3082, 53122 }, + { 0x3080, 53125 }, + { 0x306A, 53128 }, + { 0x306D, 53131 }, + { 0x306B, 53134 }, + { 0x306E, 53137 }, + { 0x306C, 53140 }, + { 0x3071, 53143 }, + { 0x307A, 53146 }, + { 0x3074, 53149 }, + { 0x307D, 53152 }, + { 0x3077, 53155 }, + { 0x3089, 53158 }, + { 0x308C, 53161 }, + { 0x308A, 53164 }, + { 0x308D, 53167 }, + { 0x308B, 53170 }, + { 0x3055, 53173 }, + { 0x305B, 53176 }, + { 0x3057, 53179 }, + { 0x305D, 53182 }, + { 0x3059, 53185 }, + { 0x305F, 53188 }, + { 0x3066, 53191 }, + { 0x3061, 53194 }, + { 0x3068, 53197 }, + { 0x3064, 53200 }, + { 0x3094, 53203 }, + { 0x308F, 53206 }, + { 0x3091, 53209 }, + { 0x3090, 53212 }, + { 0x3092, 53215 }, + { 0x3084, 53218 }, + { 0x3088, 53221 }, + { 0x3086, 53224 }, + { 0x3056, 53227 }, + { 0x305C, 53230 }, + { 0x3058, 53233 }, + { 0x305E, 53236 }, + { 0x305A, 53239 }, + { 0x3041, 53242 }, + { 0x3047, 53246 }, + { 0x3043, 53250 }, + { 0x3049, 53254 }, + { 0x3045, 53258 }, + { 0x3095, 53262 }, + { 0x3096, 53266 }, + { 0x3063, 53270 }, + { 0x308E, 53274 }, + { 0x3083, 53278 }, + { 0x3087, 53282 }, + { 0x3085, 53286 }, + { 0x309E, 53290 }, + { 0x309F, 53294 }, + { 0x309D, 53297 }, + { 0x221E, 53300 }, + { 0x29DE, 53301 }, + { 0x222B, 53306 }, + { 0x2A18, 53307 }, + { 0x2A1A, 53311 }, + { 0x2A0E, 53314 }, + { 0x2A1B, 53318 }, + { 0x2A1C, 53321 }, + { 0x2A17, 53324 }, + { 0x2A19, 53330 }, + { 0x2A15, 53333 }, + { 0x2A0F, 53338 }, + { 0x23AE, 53342 }, + { 0x2A3C, 53344 }, + { 0x2127, 53346 }, + { 0x223E, 53349 }, + { 0x00BF, 53352 }, + { 0x2054, 53355 }, + { 0x00A1, 53357 }, + { 0x2E18, 53360 }, + { 0x3004, 53362 }, + { 0x30A2, 53366 }, + { 0x30A8, 53369 }, + { 0x30A4, 53372 }, + { 0x30F3, 53375 }, + { 0x30AA, 53378 }, + { 0x30A6, 53381 }, + { 0x30D0, 53384 }, + { 0x30D9, 53387 }, + { 0x30D3, 53390 }, + { 0x30DC, 53393 }, + { 0x30D6, 53396 }, + { 0x30C0, 53399 }, + { 0x30C7, 53402 }, + { 0x30C2, 53405 }, + { 0x30C9, 53408 }, + { 0x30C5, 53411 }, + { 0x30AC, 53414 }, + { 0x30B2, 53417 }, + { 0x30AE, 53420 }, + { 0x30B4, 53423 }, + { 0x30B0, 53426 }, + { 0x30CF, 53429 }, + { 0x30D8, 53432 }, + { 0x30D2, 53435 }, + { 0x30DB, 53438 }, + { 0x30D5, 53441 }, + { 0x30AB, 53444 }, + { 0x30B1, 53447 }, + { 0x30AD, 53450 }, + { 0x30B3, 53453 }, + { 0x30AF, 53456 }, + { 0x30DE, 53459 }, + { 0x30E1, 53462 }, + { 0x30DF, 53465 }, + { 0x30E2, 53468 }, + { 0x30E0, 53471 }, + { 0x30CA, 53474 }, + { 0x30CD, 53477 }, + { 0x30CB, 53480 }, + { 0x30CE, 53483 }, + { 0x30CC, 53486 }, + { 0x30D1, 53489 }, + { 0x30DA, 53492 }, + { 0x30D4, 53495 }, + { 0x30DD, 53498 }, + { 0x30D7, 53501 }, + { 0x30E9, 53504 }, + { 0x30EC, 53507 }, + { 0x30EA, 53510 }, + { 0x30ED, 53513 }, + { 0x30EB, 53516 }, + { 0x30B5, 53519 }, + { 0x30BB, 53522 }, + { 0x30B7, 53525 }, + { 0x30BD, 53528 }, + { 0x30B9, 53531 }, + { 0x30BF, 53534 }, + { 0x30C6, 53537 }, + { 0x30C1, 53540 }, + { 0x30C8, 53543 }, + { 0x30C4, 53546 }, + { 0x30F7, 53549 }, + { 0x30F9, 53552 }, + { 0x30F8, 53555 }, + { 0x30FA, 53558 }, + { 0x30F4, 53561 }, + { 0x30EF, 53564 }, + { 0x30F1, 53567 }, + { 0x30F0, 53570 }, + { 0x30F2, 53573 }, + { 0x30E4, 53576 }, + { 0x30E8, 53579 }, + { 0x30E6, 53582 }, + { 0x30B6, 53585 }, + { 0x30BC, 53588 }, + { 0x30B8, 53591 }, + { 0x30BE, 53594 }, + { 0x30BA, 53597 }, + { 0x30A1, 53600 }, + { 0x30A7, 53604 }, + { 0x30A3, 53608 }, + { 0x30A9, 53612 }, + { 0x30A5, 53616 }, + { 0x31F5, 53620 }, + { 0x31F8, 53624 }, + { 0x31F6, 53628 }, + { 0x31F9, 53632 }, + { 0x31F7, 53636 }, + { 0x30F5, 53640 }, + { 0x30F6, 53644 }, + { 0x31F0, 53648 }, + { 0x31FA, 53652 }, + { 0x31F4, 53656 }, + { 0x31FB, 53660 }, + { 0x31FE, 53664 }, + { 0x31FC, 53668 }, + { 0x31FF, 53672 }, + { 0x31FD, 53676 }, + { 0x31F1, 53680 }, + { 0x31F2, 53684 }, + { 0x31F3, 53688 }, + { 0x30C3, 53692 }, + { 0x30EE, 53696 }, + { 0x30E3, 53700 }, + { 0x30E7, 53704 }, + { 0x30E5, 53708 }, + { 0x30FB, 53712 }, + { 0x30FE, 53715 }, + { 0x30FF, 53719 }, + { 0x30FD, 53722 }, + { 0x2328, 53725 }, + { 0xC001, 53726 }, + { 0x26AD, 53728 }, + { 0x225E, 53730 }, + { 0x2221, 53732 }, + { 0x29A9, 53734 }, + { 0x29A8, 53746 }, + { 0x29AB, 53758 }, + { 0x29AA, 53770 }, + { 0x29AD, 53782 }, + { 0x29AF, 53794 }, + { 0x29AC, 53806 }, + { 0x29AE, 53818 }, + { 0x299B, 53830 }, + { 0x299D, 53834 }, + { 0x23D5, 53839 }, + { 0x23D6, 53844 }, + { 0x23D4, 53848 }, + { 0x23D2, 53853 }, + { 0x23D1, 53857 }, + { 0x23D3, 53859 }, + { 0x23D7, 53863 }, + { 0x23D9, 53865 }, + { 0x23D8, 53867 }, + { 0x02D4, 53869 }, + { 0x02C4, 53873 }, + { 0x5770, 53877 }, + { 0x5718, 53880 }, + { 0x5717, 53884 }, + { 0x5719, 53889 }, + { 0x02FC, 53894 }, + { 0x02FA, 53899 }, + { 0x02F0, 53904 }, + { 0x02EF, 53909 }, + { 0x02FF, 53914 }, + { 0x02F1, 53919 }, + { 0x02F3, 53924 }, + { 0x02E8, 53928 }, + { 0x02CF, 53933 }, + { 0x02CE, 53938 }, + { 0x02F2, 53943 }, + { 0x02F7, 53948 }, + { 0x570B, 53952 }, + { 0x5710, 53958 }, + { 0x02CD, 53965 }, + { 0x571F, 53969 }, + { 0x02CC, 53975 }, + { 0x5715, 53980 }, + { 0x5788, 53986 }, + { 0x02E7, 53991 }, + { 0x570A, 53996 }, + { 0x570F, 54002 }, + { 0x5714, 54009 }, + { 0x02EA, 54015 }, + { 0x02D5, 54021 }, + { 0x02C5, 54025 }, + { 0x02D1, 54029 }, + { 0x02E6, 54034 }, + { 0x5709, 54039 }, + { 0x570E, 54045 }, + { 0x5713, 54052 }, + { 0x02BF, 54058 }, + { 0x02C2, 54063 }, + { 0x02FE, 54067 }, + { 0x02D6, 54071 }, + { 0x02EB, 54075 }, + { 0x02CA, 54081 }, + { 0x02FB, 54085 }, + { 0x02F9, 54090 }, + { 0x5789, 54095 }, + { 0x02DF, 54098 }, + { 0x02CB, 54102 }, + { 0x571A, 54106 }, + { 0x02D7, 54112 }, + { 0x02B9, 54116 }, + { 0x02BE, 54119 }, + { 0x02C3, 54124 }, + { 0x02FD, 54128 }, + { 0x578A, 54131 }, + { 0x1D43, 54136 }, + { 0x1D47, 54140 }, + { 0x1D9C, 54144 }, + { 0x1D9D, 54148 }, + { 0x1D48, 54154 }, + { 0x1D49, 54158 }, + { 0x1DA0, 54162 }, + { 0x1D4D, 54166 }, + { 0x02B0, 54170 }, + { 0x02B1, 54174 }, + { 0x1DA4, 54180 }, + { 0x02B2, 54186 }, + { 0x1DA8, 54190 }, + { 0x1D4F, 54196 }, + { 0x02E1, 54200 }, + { 0x1DAA, 54204 }, + { 0x1DA9, 54211 }, + { 0x1D50, 54218 }, + { 0x1DAC, 54222 }, + { 0x1DAE, 54228 }, + { 0x1DAF, 54235 }, + { 0x1D52, 54242 }, + { 0x1D56, 54246 }, + { 0x02B3, 54250 }, + { 0x02E2, 54254 }, + { 0x1DB3, 54258 }, + { 0x1D57, 54264 }, + { 0x1DB5, 54268 }, + { 0x1D58, 54275 }, + { 0x1DB6, 54279 }, + { 0x1D5B, 54284 }, + { 0x1DB9, 54288 }, + { 0x02B7, 54294 }, + { 0x02E3, 54298 }, + { 0x02B8, 54302 }, + { 0x1DBB, 54306 }, + { 0x1DBD, 54310 }, + { 0x1DBC, 54316 }, + { 0x1D5C, 54323 }, + { 0x1D61, 54327 }, + { 0x1D51, 54331 }, + { 0x1DB4, 54335 }, + { 0x1D9E, 54339 }, + { 0x1DBE, 54343 }, + { 0x1DB2, 54347 }, + { 0x1D54, 54351 }, + { 0x1D5D, 54357 }, + { 0x1DA5, 54361 }, + { 0x1D4B, 54365 }, + { 0x1D53, 54370 }, + { 0x1D45, 54375 }, + { 0x1D5F, 54379 }, + { 0x02E0, 54383 }, + { 0x1D60, 54387 }, + { 0x1D5E, 54392 }, + { 0x1D4A, 54397 }, + { 0x1DBF, 54401 }, + { 0x1DB1, 54405 }, + { 0x1D55, 54410 }, + { 0x1DA2, 54416 }, + { 0x1D44, 54421 }, + { 0x1DA3, 54426 }, + { 0x1D4E, 54431 }, + { 0x1D5A, 54436 }, + { 0x1DAD, 54441 }, + { 0x02B4, 54449 }, + { 0x02B5, 54454 }, + { 0x1DBA, 54461 }, + { 0x1D46, 54466 }, + { 0x1D4C, 54471 }, + { 0x1D9B, 54477 }, + { 0x1DA6, 54482 }, + { 0x1DA7, 54487 }, + { 0x1DAB, 54494 }, + { 0x1DB0, 54499 }, + { 0x1DB8, 54504 }, + { 0x02B6, 54509 }, + { 0x1DA1, 54515 }, + { 0x1DB7, 54522 }, + { 0x1D9F, 54526 }, + { 0x02E4, 54532 }, + { 0x1D59, 54538 }, + { 0x02BA, 54543 }, + { 0x02EE, 54547 }, + { 0x02C9, 54551 }, + { 0x02F4, 54554 }, + { 0x02F6, 54559 }, + { 0x02F5, 54565 }, + { 0x571B, 54571 }, + { 0x571C, 54576 }, + { 0x02F8, 54581 }, + { 0x571E, 54585 }, + { 0x571D, 54591 }, + { 0x02DE, 54596 }, + { 0x5721, 54600 }, + { 0x5720, 54606 }, + { 0x02BB, 54612 }, + { 0x1D2C, 54616 }, + { 0x1D2E, 54620 }, + { 0x1D30, 54624 }, + { 0x1D31, 54628 }, + { 0x1D33, 54632 }, + { 0x1D34, 54636 }, + { 0x1D35, 54640 }, + { 0x1D36, 54644 }, + { 0x1D37, 54648 }, + { 0x1D38, 54652 }, + { 0x1D39, 54656 }, + { 0x1D3A, 54660 }, + { 0x1D3C, 54664 }, + { 0x1D3E, 54668 }, + { 0x1D3F, 54672 }, + { 0x1D40, 54676 }, + { 0x1D41, 54680 }, + { 0x2C7D, 54684 }, + { 0x1D42, 54688 }, + { 0x1D2D, 54692 }, + { 0x1D3D, 54696 }, + { 0x1D2F, 54700 }, + { 0x1D32, 54705 }, + { 0x1D3B, 54710 }, + { 0x02D3, 54715 }, + { 0x02D2, 54721 }, + { 0x5704, 54727 }, + { 0x5706, 54733 }, + { 0x5700, 54739 }, + { 0x5702, 54745 }, + { 0x5705, 54751 }, + { 0x5707, 54757 }, + { 0x5701, 54763 }, + { 0x5703, 54769 }, + { 0x02C0, 54775 }, + { 0x02EC, 54779 }, + { 0x1D78, 54782 }, + { 0x10FC, 54786 }, + { 0x02BD, 54790 }, + { 0x02C1, 54794 }, + { 0x02C8, 54799 }, + { 0x02E9, 54803 }, + { 0x570C, 54808 }, + { 0x5711, 54814 }, + { 0x5716, 54821 }, + { 0x02BC, 54827 }, + { 0x02C6, 54830 }, + { 0x02E5, 54834 }, + { 0x5708, 54839 }, + { 0x570D, 54845 }, + { 0x5712, 54852 }, + { 0x02D0, 54858 }, + { 0x02ED, 54862 }, + { 0x268B, 54865 }, + { 0x268A, 54868 }, + { 0x9300, 54871 }, + { 0x22B8, 54874 }, + { 0x228C, 54875 }, + { 0x228E, 54876 }, + { 0x228D, 54878 }, + { 0x206E, 54880 }, + { 0x24FF, 54883 }, + { 0x24EB, 54887 }, + { 0x24EC, 54891 }, + { 0x24F4, 54895 }, + { 0x24EF, 54899 }, + { 0x24F0, 54903 }, + { 0x24F2, 54907 }, + { 0x24EE, 54911 }, + { 0x24F3, 54915 }, + { 0x24ED, 54919 }, + { 0x24F1, 54923 }, + { 0x00A0, 54927 }, + { 0x22B6, 54929 }, + { 0x2626, 54931 }, + { 0x272D, 54933 }, + { 0x2719, 54936 }, + { 0x271F, 54939 }, + { 0x269D, 54942 }, + { 0x203E, 54945 }, + { 0x2225, 54946 }, + { 0x2AF3, 54948 }, + { 0x2AF2, 54952 }, + { 0x5876, 54956 }, + { 0x5877, 54959 }, + { 0x5875, 54963 }, + { 0x585D, 54967 }, + { 0x5860, 54970 }, + { 0x585E, 54973 }, + { 0x5861, 54976 }, + { 0x585F, 54979 }, + { 0x584E, 54982 }, + { 0x5844, 54985 }, + { 0x584A, 54988 }, + { 0x5866, 54991 }, + { 0x5864, 54994 }, + { 0x5842, 54997 }, + { 0x585C, 55000 }, + { 0x5846, 55003 }, + { 0x5840, 55006 }, + { 0x5859, 55009 }, + { 0x584F, 55012 }, + { 0x584B, 55015 }, + { 0x584C, 55018 }, + { 0x5862, 55021 }, + { 0x5858, 55024 }, + { 0x585B, 55027 }, + { 0x5848, 55030 }, + { 0x5853, 55033 }, + { 0x5863, 55036 }, + { 0x5857, 55039 }, + { 0x5855, 55042 }, + { 0x5845, 55045 }, + { 0x586B, 55048 }, + { 0x5852, 55051 }, + { 0x5865, 55054 }, + { 0x5841, 55057 }, + { 0x5843, 55060 }, + { 0x586C, 55063 }, + { 0x5847, 55066 }, + { 0x584D, 55069 }, + { 0x585A, 55072 }, + { 0x5849, 55075 }, + { 0x5850, 55078 }, + { 0x5869, 55081 }, + { 0x5854, 55084 }, + { 0x5851, 55087 }, + { 0x586A, 55090 }, + { 0x5856, 55093 }, + { 0x586F, 55097 }, + { 0x586D, 55101 }, + { 0x5870, 55105 }, + { 0x586E, 55109 }, + { 0x5873, 55113 }, + { 0x5874, 55116 }, + { 0x5871, 55120 }, + { 0x5867, 55124 }, + { 0x5868, 55128 }, + { 0x5872, 55132 }, + { 0x71F7, 55136 }, + { 0x71F1, 55141 }, + { 0x71DA, 55145 }, + { 0x71EC, 55149 }, + { 0x71E0, 55153 }, + { 0x71ED, 55157 }, + { 0x71DF, 55161 }, + { 0x71DC, 55165 }, + { 0x71E4, 55169 }, + { 0x71EF, 55173 }, + { 0x71EA, 55177 }, + { 0x71E9, 55181 }, + { 0x71F6, 55185 }, + { 0x71E8, 55189 }, + { 0x71F3, 55193 }, + { 0x71FC, 55197 }, + { 0x71D9, 55202 }, + { 0x71EB, 55206 }, + { 0x71D4, 55211 }, + { 0x71EE, 55215 }, + { 0x71F8, 55219 }, + { 0x71F2, 55223 }, + { 0x71E5, 55228 }, + { 0x71FB, 55232 }, + { 0x71D8, 55237 }, + { 0x71F0, 55241 }, + { 0x71D5, 55245 }, + { 0x71E6, 55249 }, + { 0x71E3, 55253 }, + { 0x71F9, 55257 }, + { 0x71D6, 55261 }, + { 0x71D1, 55265 }, + { 0x71DB, 55270 }, + { 0x71E7, 55274 }, + { 0x71D3, 55278 }, + { 0x71DE, 55282 }, + { 0x71F4, 55286 }, + { 0x71F5, 55290 }, + { 0x71D7, 55294 }, + { 0x71DD, 55298 }, + { 0x71FA, 55302 }, + { 0x71D2, 55306 }, + { 0x71E1, 55311 }, + { 0x71E2, 55315 }, + { 0x71FD, 55320 }, + { 0x71D0, 55326 }, + { 0x272F, 55330 }, + { 0x2316, 55332 }, + { 0x227A, 55334 }, + { 0x227C, 55335 }, + { 0x227E, 55339 }, + { 0x22E8, 55343 }, + { 0x2AB5, 55348 }, + { 0x2AB9, 55353 }, + { 0x2AB7, 55359 }, + { 0x2AB3, 55364 }, + { 0x2AB1, 55368 }, + { 0x2AAF, 55374 }, + { 0x22B0, 55379 }, + { 0x2397, 55382 }, + { 0x214A, 55384 }, + { 0x2596, 55386 }, + { 0x2597, 55389 }, + { 0x2598, 55392 }, + { 0x2599, 55395 }, + { 0x259A, 55404 }, + { 0x259B, 55410 }, + { 0x259C, 55419 }, + { 0x259D, 55428 }, + { 0x259E, 55431 }, + { 0x259F, 55437 }, + { 0x003F, 55446 }, + { 0x2048, 55448 }, + { 0x26BB, 55451 }, + { 0x267C, 55452 }, + { 0x211F, 55455 }, + { 0x2310, 55456 }, + { 0x29A3, 55459 }, + { 0x29A5, 55461 }, + { 0x29B0, 55465 }, + { 0x2035, 55468 }, + { 0x223D, 55470 }, + { 0x22CD, 55472 }, + { 0x2036, 55475 }, + { 0x301D, 55478 }, + { 0x2AED, 55483 }, + { 0x2E11, 55488 }, + { 0x2037, 55491 }, + { 0x204B, 55494 }, + { 0x2619, 55497 }, + { 0x2E2E, 55502 }, + { 0x204F, 55505 }, + { 0x2143, 55507 }, + { 0x264F, 55511 }, + { 0x2730, 55512 }, + { 0x271E, 55515 }, + { 0x274D, 55519 }, + { 0x2618, 55522 }, + { 0x5673, 55523 }, + { 0x2263, 55525 }, + { 0x227B, 55528 }, + { 0x227D, 55529 }, + { 0x227F, 55533 }, + { 0x22E9, 55537 }, + { 0x2AB6, 55542 }, + { 0x2ABA, 55547 }, + { 0x2AB8, 55553 }, + { 0x2AB4, 55558 }, + { 0x2AB2, 55562 }, + { 0x2AB0, 55568 }, + { 0x22B1, 55573 }, + { 0x2283, 55576 }, + { 0x2287, 55578 }, + { 0x2AC4, 55583 }, + { 0x228B, 55591 }, + { 0x2ACC, 55597 }, + { 0x2AC8, 55603 }, + { 0x2ACA, 55608 }, + { 0x2AC6, 55614 }, + { 0x2ABE, 55619 }, + { 0x2AC0, 55622 }, + { 0x2AC2, 55627 }, + { 0x2AD4, 55632 }, + { 0x2AD6, 55635 }, + { 0x297B, 55638 }, + { 0x2AD8, 55642 }, + { 0x2AD7, 55650 }, + { 0x27C9, 55653 }, + { 0x232F, 55656 }, + { 0x1772, 55657 }, + { 0x1773, 55661 }, + { 0x1760, 55665 }, + { 0x1761, 55668 }, + { 0x1762, 55671 }, + { 0x176A, 55674 }, + { 0x1767, 55677 }, + { 0x1764, 55680 }, + { 0x1763, 55683 }, + { 0x176E, 55686 }, + { 0x176B, 55689 }, + { 0x1768, 55692 }, + { 0x1769, 55695 }, + { 0x1770, 55698 }, + { 0x1766, 55701 }, + { 0x176F, 55704 }, + { 0x176C, 55707 }, + { 0x1765, 55710 }, + { 0x2D30, 55713 }, + { 0x2D49, 55716 }, + { 0x2D53, 55719 }, + { 0x2D44, 55722 }, + { 0x2D31, 55725 }, + { 0x2D37, 55728 }, + { 0x2D3C, 55731 }, + { 0x2D33, 55734 }, + { 0x2D40, 55737 }, + { 0x2D36, 55740 }, + { 0x2D3D, 55743 }, + { 0x2D4D, 55746 }, + { 0x2D4E, 55749 }, + { 0x2D4F, 55752 }, + { 0x2D52, 55755 }, + { 0x2D47, 55758 }, + { 0x2D54, 55761 }, + { 0x2D59, 55764 }, + { 0x2D5C, 55767 }, + { 0x2D60, 55770 }, + { 0x2D61, 55773 }, + { 0x2D62, 55776 }, + { 0x2D63, 55779 }, + { 0x2D3B, 55782 }, + { 0x2D58, 55785 }, + { 0x2D32, 55789 }, + { 0x2D5E, 55792 }, + { 0x2D39, 55795 }, + { 0x2D38, 55798 }, + { 0x2D56, 55801 }, + { 0x2D43, 55804 }, + { 0x2D45, 55807 }, + { 0x2D55, 55810 }, + { 0x2D5B, 55813 }, + { 0x2D5A, 55816 }, + { 0x2D5D, 55819 }, + { 0x2D5F, 55822 }, + { 0x2D4A, 55825 }, + { 0x2D65, 55828 }, + { 0x2D3A, 55831 }, + { 0x2D34, 55834 }, + { 0x2D3F, 55837 }, + { 0x2D41, 55840 }, + { 0x2D35, 55845 }, + { 0x2D42, 55850 }, + { 0x2D3E, 55854 }, + { 0x2D48, 55858 }, + { 0x2D57, 55862 }, + { 0x2D50, 55866 }, + { 0x2D46, 55870 }, + { 0x2D51, 55874 }, + { 0x2D4C, 55878 }, + { 0x2D4B, 55882 }, + { 0x2D64, 55886 }, + { 0x2D6F, 55890 }, + { 0x204A, 55895 }, + { 0x29CA, 55898 }, + { 0x29CD, 55902 }, + { 0x29CB, 55907 }, + { 0x205D, 55910 }, + { 0x739F, 55911 }, + { 0x739B, 55914 }, + { 0x739C, 55917 }, + { 0x7385, 55920 }, + { 0x7394, 55923 }, + { 0x739A, 55926 }, + { 0x7386, 55929 }, + { 0x7391, 55932 }, + { 0x7393, 55935 }, + { 0x738B, 55938 }, + { 0x7383, 55941 }, + { 0x738E, 55944 }, + { 0x7390, 55947 }, + { 0x739D, 55950 }, + { 0x7389, 55953 }, + { 0x738A, 55956 }, + { 0x7380, 55959 }, + { 0x7381, 55962 }, + { 0x738F, 55965 }, + { 0x7388, 55968 }, + { 0x7396, 55971 }, + { 0x7395, 55974 }, + { 0x738C, 55977 }, + { 0x7387, 55980 }, + { 0x7384, 55983 }, + { 0x7382, 55986 }, + { 0x7399, 55989 }, + { 0x738D, 55992 }, + { 0x7397, 55995 }, + { 0x7392, 55998 }, + { 0x7398, 56001 }, + { 0x2602, 56004 }, + { 0x2614, 56005 }, + { 0x203F, 56009 }, + { 0x2123, 56010 }, + { 0x27CA, 56011 }, + { 0x29D0, 56016 }, + { 0x2AE4, 56021 }, + { 0x2AE2, 56026 }, + { 0x205E, 56031 }, + { 0x3031, 56034 }, + { 0x3035, 56038 }, + { 0x3033, 56044 }, + { 0x3032, 56050 }, + { 0x3034, 56057 }, + { 0x007C, 56066 }, + { 0x2AEF, 56068 }, + { 0x2AF0, 56073 }, + { 0x237F, 56078 }, + { 0x23D0, 56083 }, + { 0x26A8, 56086 }, + { 0x2E2F, 56091 }, + { 0x299A, 56093 }, + { 0x22EE, 56096 }, + { 0x303B, 56098 }, + { 0x2317, 56102 }, + { 0x2101, 56104 }, + { 0x0026, 56108 }, + { 0x260A, 56109 }, + { 0x22A6, 56111 }, + { 0x2623, 56112 }, + { 0x902F, 56114 }, + { 0x900E, 56118 }, + { 0x9085, 56123 }, + { 0x9046, 56127 }, + { 0x901A, 56132 }, + { 0x9040, 56137 }, + { 0x9079, 56141 }, + { 0x9030, 56147 }, + { 0x907D, 56151 }, + { 0x907C, 56156 }, + { 0x909C, 56161 }, + { 0x909E, 56166 }, + { 0x909A, 56171 }, + { 0x90A1, 56177 }, + { 0x909F, 56183 }, + { 0x909D, 56188 }, + { 0x909B, 56193 }, + { 0x90A0, 56198 }, + { 0x9033, 56203 }, + { 0x900D, 56209 }, + { 0x9097, 56214 }, + { 0x90C8, 56218 }, + { 0x90C9, 56223 }, + { 0x90CA, 56228 }, + { 0x9086, 56233 }, + { 0x9080, 56237 }, + { 0x902E, 56242 }, + { 0x9048, 56246 }, + { 0x9004, 56251 }, + { 0x9003, 56256 }, + { 0x9000, 56261 }, + { 0x9025, 56265 }, + { 0x9066, 56269 }, + { 0x902D, 56273 }, + { 0x9078, 56277 }, + { 0x9014, 56282 }, + { 0x9019, 56286 }, + { 0x906A, 56290 }, + { 0x9001, 56295 }, + { 0x90D0, 56299 }, + { 0x90D2, 56306 }, + { 0x90D3, 56313 }, + { 0x90D1, 56320 }, + { 0x90CE, 56327 }, + { 0x90CF, 56332 }, + { 0x9060, 56337 }, + { 0x9074, 56342 }, + { 0x90C5, 56347 }, + { 0x90CB, 56354 }, + { 0x90BC, 56361 }, + { 0x90C7, 56367 }, + { 0x90C3, 56372 }, + { 0x90C4, 56379 }, + { 0x90C6, 56386 }, + { 0x90BE, 56393 }, + { 0x9034, 56400 }, + { 0x90B9, 56405 }, + { 0x90BD, 56412 }, + { 0x90BF, 56418 }, + { 0x90C2, 56424 }, + { 0x90C1, 56431 }, + { 0x90BA, 56438 }, + { 0x90C0, 56444 }, + { 0x90BB, 56450 }, + { 0x90CC, 56456 }, + { 0x90D8, 56462 }, + { 0x90D9, 56467 }, + { 0x908F, 56472 }, + { 0x90F5, 56478 }, + { 0x9016, 56484 }, + { 0x9091, 56489 }, + { 0x9090, 56495 }, + { 0x90AC, 56501 }, + { 0x9037, 56507 }, + { 0x9024, 56512 }, + { 0x907F, 56516 }, + { 0x90F4, 56521 }, + { 0x908B, 56526 }, + { 0x908A, 56532 }, + { 0x908C, 56538 }, + { 0x908E, 56544 }, + { 0x908D, 56550 }, + { 0x9057, 56556 }, + { 0x9047, 56561 }, + { 0x9015, 56566 }, + { 0x905B, 56571 }, + { 0x9020, 56575 }, + { 0x9059, 56580 }, + { 0x9026, 56585 }, + { 0x9017, 56590 }, + { 0x9029, 56594 }, + { 0x9069, 56598 }, + { 0x90E8, 56603 }, + { 0x900F, 56607 }, + { 0x9087, 56611 }, + { 0x9058, 56615 }, + { 0x9006, 56620 }, + { 0x9005, 56625 }, + { 0x90D4, 56630 }, + { 0x90D6, 56637 }, + { 0x90D7, 56644 }, + { 0x90D5, 56651 }, + { 0x90CD, 56658 }, + { 0x9050, 56663 }, + { 0x90EC, 56667 }, + { 0x90EB, 56672 }, + { 0x90ED, 56677 }, + { 0x90EF, 56682 }, + { 0x90E9, 56687 }, + { 0x90EE, 56692 }, + { 0x90EA, 56697 }, + { 0x9056, 56702 }, + { 0x9099, 56706 }, + { 0x9055, 56710 }, + { 0x90B6, 56714 }, + { 0x903F, 56721 }, + { 0x904F, 56725 }, + { 0x90F3, 56731 }, + { 0x90F1, 56737 }, + { 0x901B, 56743 }, + { 0x9089, 56748 }, + { 0x9083, 56752 }, + { 0x9082, 56757 }, + { 0x9081, 56762 }, + { 0x9061, 56767 }, + { 0x905D, 56771 }, + { 0x9041, 56775 }, + { 0x9049, 56779 }, + { 0x903C, 56783 }, + { 0x907E, 56787 }, + { 0x901F, 56791 }, + { 0x9065, 56796 }, + { 0x902B, 56801 }, + { 0x902A, 56807 }, + { 0x9013, 56812 }, + { 0x9031, 56816 }, + { 0x9027, 56820 }, + { 0x9021, 56824 }, + { 0x9053, 56829 }, + { 0x9084, 56833 }, + { 0x9022, 56838 }, + { 0x9023, 56843 }, + { 0x9018, 56847 }, + { 0x9067, 56851 }, + { 0x903B, 56856 }, + { 0x90DA, 56861 }, + { 0x90DB, 56867 }, + { 0x90DC, 56873 }, + { 0x90DD, 56878 }, + { 0x9092, 56883 }, + { 0x9095, 56887 }, + { 0x9094, 56893 }, + { 0x9093, 56900 }, + { 0x90E6, 56907 }, + { 0x9068, 56912 }, + { 0x90B7, 56916 }, + { 0x9007, 56920 }, + { 0x903A, 56924 }, + { 0x9042, 56928 }, + { 0x904A, 56933 }, + { 0x900C, 56937 }, + { 0x90A3, 56941 }, + { 0x90A5, 56948 }, + { 0x90B1, 56955 }, + { 0x90A2, 56961 }, + { 0x90A6, 56967 }, + { 0x90AA, 56973 }, + { 0x90AB, 56979 }, + { 0x90B3, 56985 }, + { 0x90A4, 56992 }, + { 0x90A8, 56998 }, + { 0x90A9, 57004 }, + { 0x90A7, 57011 }, + { 0x90B2, 57016 }, + { 0x901E, 57022 }, + { 0x9038, 57026 }, + { 0x904D, 57030 }, + { 0x901D, 57035 }, + { 0x90E2, 57039 }, + { 0x90E3, 57044 }, + { 0x90E4, 57050 }, + { 0x90E5, 57056 }, + { 0x90DE, 57062 }, + { 0x90DF, 57067 }, + { 0x90E0, 57073 }, + { 0x90E1, 57079 }, + { 0x9088, 57085 }, + { 0x9063, 57089 }, + { 0x9043, 57094 }, + { 0x9036, 57099 }, + { 0x90E7, 57104 }, + { 0x907B, 57109 }, + { 0x90B0, 57113 }, + { 0x90AF, 57118 }, + { 0x90AE, 57123 }, + { 0x9035, 57128 }, + { 0x907A, 57132 }, + { 0x9010, 57136 }, + { 0x904E, 57140 }, + { 0x90F2, 57146 }, + { 0x90F0, 57152 }, + { 0x901C, 57158 }, + { 0x9032, 57163 }, + { 0x9075, 57167 }, + { 0x902C, 57172 }, + { 0x9039, 57177 }, + { 0x905A, 57181 }, + { 0x9008, 57186 }, + { 0x9096, 57190 }, + { 0x900A, 57194 }, + { 0x900B, 57198 }, + { 0x905C, 57203 }, + { 0x90AD, 57207 }, + { 0x9052, 57213 }, + { 0x9011, 57219 }, + { 0x9051, 57223 }, + { 0x9012, 57228 }, + { 0x9064, 57233 }, + { 0x90B4, 57237 }, + { 0x90B5, 57243 }, + { 0x9098, 57249 }, + { 0x90B8, 57253 }, + { 0x905F, 57257 }, + { 0x903D, 57262 }, + { 0x9009, 57267 }, + { 0x905E, 57271 }, + { 0x903E, 57276 }, + { 0x9002, 57281 }, + { 0x9076, 57285 }, + { 0x9077, 57290 }, + { 0x9028, 57295 }, + { 0x9045, 57299 }, + { 0x9044, 57303 }, + { 0x9073, 57307 }, + { 0x9072, 57311 }, + { 0x906D, 57315 }, + { 0x9070, 57319 }, + { 0x9062, 57323 }, + { 0x904C, 57327 }, + { 0x9054, 57331 }, + { 0x904B, 57335 }, + { 0x906C, 57339 }, + { 0x9071, 57343 }, + { 0x906B, 57347 }, + { 0x906E, 57351 }, + { 0x906F, 57355 }, + { 0x2651, 57359 }, + { 0x2040, 57360 }, + { 0x21B7, 57362 }, + { 0x21BB, 57366 }, + { 0x2941, 57370 }, + { 0x27F3, 57374 }, + { 0x2232, 57378 }, + { 0x2231, 57381 }, + { 0x033D, 57383 }, + { 0x0353, 57386 }, + { 0x1DD0, 57389 }, + { 0x031D, 57392 }, + { 0x1DD1, 57396 }, + { 0x1DD2, 57399 }, + { 0x0307, 57402 }, + { 0x0358, 57405 }, + { 0x0323, 57409 }, + { 0x0332, 57412 }, + { 0x034A, 57415 }, + { 0x031E, 57419 }, + { 0x20DC, 57423 }, + { 0x0309, 57427 }, + { 0x031B, 57430 }, + { 0x0351, 57432 }, + { 0x031C, 57437 }, + { 0x0318, 57442 }, + { 0x031A, 57446 }, + { 0x0349, 57450 }, + { 0x20D6, 57454 }, + { 0x20EE, 57458 }, + { 0x20E1, 57462 }, + { 0x034D, 57467 }, + { 0x20D0, 57472 }, + { 0x1DFE, 57476 }, + { 0x0354, 57480 }, + { 0x20EB, 57484 }, + { 0x0336, 57489 }, + { 0x0338, 57493 }, + { 0x20D2, 57497 }, + { 0x031F, 57502 }, + { 0x030A, 57506 }, + { 0x0325, 57509 }, + { 0x20D8, 57512 }, + { 0x20E9, 57515 }, + { 0x0341, 57519 }, + { 0x0301, 57523 }, + { 0x0317, 57526 }, + { 0x0306, 57530 }, + { 0x032E, 57532 }, + { 0x030C, 57535 }, + { 0x032C, 57537 }, + { 0x0313, 57540 }, + { 0x0315, 57543 }, + { 0x0326, 57547 }, + { 0x0340, 57550 }, + { 0x0300, 57554 }, + { 0x0316, 57557 }, + { 0x0343, 57561 }, + { 0x9242, 57564 }, + { 0x9244, 57568 }, + { 0x9243, 57572 }, + { 0x0344, 57576 }, + { 0x0342, 57580 }, + { 0x0345, 57583 }, + { 0x0363, 57586 }, + { 0x0368, 57591 }, + { 0x1DD7, 57596 }, + { 0x0369, 57602 }, + { 0x0364, 57607 }, + { 0x1DDA, 57612 }, + { 0x036A, 57617 }, + { 0x0365, 57622 }, + { 0x1DDC, 57627 }, + { 0x1DDD, 57632 }, + { 0x036B, 57637 }, + { 0x1DE0, 57642 }, + { 0x0366, 57647 }, + { 0x036C, 57652 }, + { 0x1DCA, 57657 }, + { 0x1DE3, 57663 }, + { 0x1DE4, 57669 }, + { 0x036D, 57674 }, + { 0x0367, 57679 }, + { 0x036E, 57684 }, + { 0x036F, 57689 }, + { 0x1DE6, 57694 }, + { 0x1DD4, 57699 }, + { 0x1DD5, 57704 }, + { 0x1DD6, 57709 }, + { 0x1DD9, 57714 }, + { 0x1DE5, 57719 }, + { 0x1DD8, 57725 }, + { 0x1DD3, 57731 }, + { 0x1DDB, 57739 }, + { 0x1DDE, 57745 }, + { 0x1DDF, 57751 }, + { 0x1DE1, 57757 }, + { 0x1DE2, 57763 }, + { 0x0320, 57769 }, + { 0x0357, 57773 }, + { 0x0339, 57778 }, + { 0x0319, 57783 }, + { 0x20D7, 57787 }, + { 0x20EF, 57791 }, + { 0x20D1, 57795 }, + { 0x0356, 57799 }, + { 0x1DFF, 57806 }, + { 0x0350, 57813 }, + { 0x0355, 57817 }, + { 0x0335, 57821 }, + { 0x0337, 57825 }, + { 0x20D3, 57829 }, + { 0x1DC2, 57834 }, + { 0x20DB, 57837 }, + { 0x0303, 57841 }, + { 0x0330, 57843 }, + { 0x0334, 57846 }, + { 0x034C, 57849 }, + { 0x0346, 57854 }, + { 0x032A, 57857 }, + { 0x1DC1, 57860 }, + { 0x1DC0, 57864 }, + { 0x0333, 57868 }, + { 0x035A, 57872 }, + { 0x030B, 57876 }, + { 0x035D, 57880 }, + { 0x035C, 57883 }, + { 0x030F, 57887 }, + { 0x0360, 57891 }, + { 0x6E22, 57894 }, + { 0x6E23, 57899 }, + { 0x035E, 57904 }, + { 0x035F, 57907 }, + { 0x0361, 57911 }, + { 0x033F, 57915 }, + { 0x030E, 57918 }, + { 0x0348, 57923 }, + { 0x20E6, 57928 }, + { 0x1DCD, 57933 }, + { 0x0362, 57937 }, + { 0x0347, 57942 }, + { 0x0304, 57946 }, + { 0x6E24, 57948 }, + { 0x0331, 57952 }, + { 0x6E25, 57955 }, + { 0x0328, 57959 }, + { 0x1DCE, 57961 }, + { 0x033B, 57964 }, + { 0x20E8, 57967 }, + { 0x0312, 57970 }, + { 0x035B, 57974 }, + { 0x1DCF, 57977 }, + { 0x20E7, 57980 }, + { 0x0327, 57983 }, + { 0x0352, 57985 }, + { 0x20E5, 57987 }, + { 0x033C, 57991 }, + { 0x034E, 57994 }, + { 0x20F0, 57998 }, + { 0x0359, 58001 }, + { 0x5670, 58004 }, + { 0x0485, 58009 }, + { 0x0486, 58013 }, + { 0x0483, 58017 }, + { 0x566F, 58020 }, + { 0x567C, 58023 }, + { 0x2DF6, 58026 }, + { 0x2DEA, 58030 }, + { 0x2DE0, 58034 }, + { 0x2DE3, 58038 }, + { 0x2DE7, 58042 }, + { 0x2DE8, 58046 }, + { 0x2DE9, 58050 }, + { 0x2DEC, 58054 }, + { 0x2DED, 58058 }, + { 0x2DEF, 58062 }, + { 0x2DF7, 58066 }, + { 0x2DE6, 58070 }, + { 0x2DEB, 58074 }, + { 0x2DEE, 58078 }, + { 0x2DE1, 58082 }, + { 0x2DFB, 58086 }, + { 0x2DE5, 58090 }, + { 0x2DFE, 58094 }, + { 0x2DF1, 58099 }, + { 0x2DE2, 58103 }, + { 0x2DF2, 58107 }, + { 0x2DF0, 58111 }, + { 0x2DFA, 58115 }, + { 0x2DE4, 58119 }, + { 0x2DF4, 58123 }, + { 0x2DF8, 58127 }, + { 0x2DF5, 58131 }, + { 0x2DF3, 58135 }, + { 0x2DFD, 58139 }, + { 0x2DFC, 58144 }, + { 0x2DFF, 58149 }, + { 0x2DF9, 58155 }, + { 0x5671, 58160 }, + { 0x0488, 58165 }, + { 0x567D, 58170 }, + { 0x0489, 58173 }, + { 0x0487, 58177 }, + { 0x5672, 58180 }, + { 0x0484, 58185 }, + { 0x034F, 58188 }, + { 0x0311, 58191 }, + { 0x032F, 58194 }, + { 0x033A, 58198 }, + { 0x032B, 58202 }, + { 0x6E20, 58207 }, + { 0x6E21, 58211 }, + { 0x0305, 58215 }, + { 0x0314, 58217 }, + { 0x030D, 58221 }, + { 0x0329, 58225 }, + { 0x033E, 58229 }, + { 0x20D9, 58232 }, + { 0x20D5, 58236 }, + { 0x0308, 58240 }, + { 0x0324, 58242 }, + { 0x20DD, 58245 }, + { 0x20E0, 58248 }, + { 0x20E3, 58252 }, + { 0x20E2, 58255 }, + { 0x20DE, 58258 }, + { 0x20E4, 58261 }, + { 0x20DF, 58266 }, + { 0x20EA, 58269 }, + { 0x20ED, 58273 }, + { 0x0322, 58279 }, + { 0x0302, 58283 }, + { 0x032D, 58286 }, + { 0x6E26, 58290 }, + { 0x034B, 58293 }, + { 0x20EC, 58296 }, + { 0x1DC3, 58302 }, + { 0x0310, 58305 }, + { 0x0321, 58307 }, + { 0x1DC7, 58311 }, + { 0x1DCB, 58313 }, + { 0x1DC5, 58315 }, + { 0x1DC4, 58317 }, + { 0x1DCC, 58319 }, + { 0x1DC6, 58321 }, + { 0x20DA, 58323 }, + { 0x20D4, 58327 }, + { 0x1DC9, 58331 }, + { 0x1DC8, 58333 }, + { 0x3099, 58335 }, + { 0x309A, 58340 }, + { 0x2A6D, 58345 }, + { 0x00A9, 58349 }, + { 0x8000, 58351 }, + { 0x8001, 58354 }, + { 0x8004, 58359 }, + { 0x8002, 58364 }, + { 0x8005, 58369 }, + { 0x8008, 58374 }, + { 0x8003, 58379 }, + { 0x8007, 58385 }, + { 0x8006, 58390 }, + { 0x808A, 58396 }, + { 0x808C, 58399 }, + { 0x808B, 58407 }, + { 0x813F, 58412 }, + { 0x8140, 58415 }, + { 0x830B, 58419 }, + { 0x830D, 58422 }, + { 0x830C, 58427 }, + { 0x8310, 58431 }, + { 0x830E, 58441 }, + { 0x830F, 58452 }, + { 0x8009, 58460 }, + { 0x800A, 58463 }, + { 0x8015, 58466 }, + { 0x8014, 58470 }, + { 0x800F, 58479 }, + { 0x800D, 58484 }, + { 0x8010, 58489 }, + { 0x800B, 58495 }, + { 0x800C, 58500 }, + { 0x800E, 58506 }, + { 0x8011, 58512 }, + { 0x8012, 58517 }, + { 0x8013, 58522 }, + { 0x801C, 58527 }, + { 0x801D, 58530 }, + { 0x801E, 58533 }, + { 0x801F, 58538 }, + { 0x8020, 58545 }, + { 0x8021, 58548 }, + { 0x8024, 58553 }, + { 0x8026, 58558 }, + { 0x8027, 58563 }, + { 0x8028, 58568 }, + { 0x8022, 58573 }, + { 0x8023, 58578 }, + { 0x8025, 58583 }, + { 0x802D, 58588 }, + { 0x802E, 58591 }, + { 0x8031, 58596 }, + { 0x8030, 58602 }, + { 0x802F, 58611 }, + { 0x8040, 58616 }, + { 0x8049, 58619 }, + { 0x804A, 58622 }, + { 0x804B, 58627 }, + { 0x804C, 58632 }, + { 0x804D, 58638 }, + { 0x804E, 58641 }, + { 0x804F, 58647 }, + { 0x8050, 58653 }, + { 0x8055, 58658 }, + { 0x8072, 58661 }, + { 0x807A, 58664 }, + { 0x807C, 58667 }, + { 0x807B, 58671 }, + { 0x807D, 58676 }, + { 0x808D, 58680 }, + { 0x808E, 58683 }, + { 0x8093, 58692 }, + { 0x8090, 58697 }, + { 0x808F, 58702 }, + { 0x8091, 58707 }, + { 0x8092, 58712 }, + { 0x8096, 58717 }, + { 0x8097, 58720 }, + { 0x809A, 58723 }, + { 0x8098, 58728 }, + { 0x8099, 58733 }, + { 0x809D, 58739 }, + { 0x809B, 58743 }, + { 0x809C, 58748 }, + { 0x80B5, 58753 }, + { 0x80B6, 58756 }, + { 0x8100, 58760 }, + { 0x8101, 58763 }, + { 0x8102, 58768 }, + { 0x8103, 58773 }, + { 0x8116, 58778 }, + { 0x8117, 58781 }, + { 0x8129, 58786 }, + { 0x812B, 58789 }, + { 0x812A, 58793 }, + { 0x812D, 58797 }, + { 0x8136, 58800 }, + { 0x812E, 58805 }, + { 0x8130, 58810 }, + { 0x8132, 58815 }, + { 0x8133, 58820 }, + { 0x8134, 58825 }, + { 0x8135, 58830 }, + { 0x812F, 58835 }, + { 0x8131, 58840 }, + { 0x8137, 58845 }, + { 0x8141, 58848 }, + { 0x8145, 58851 }, + { 0x814B, 58854 }, + { 0x814C, 58857 }, + { 0x814E, 58863 }, + { 0x814F, 58866 }, + { 0x8152, 58871 }, + { 0x8150, 58875 }, + { 0x8151, 58880 }, + { 0x8154, 58885 }, + { 0x8155, 58888 }, + { 0x8157, 58891 }, + { 0x8158, 58894 }, + { 0x8187, 58899 }, + { 0x8159, 58904 }, + { 0x815A, 58909 }, + { 0x815F, 58916 }, + { 0x8162, 58921 }, + { 0x8167, 58926 }, + { 0x816B, 58931 }, + { 0x816E, 58936 }, + { 0x8170, 58941 }, + { 0x8172, 58946 }, + { 0x8173, 58951 }, + { 0x8174, 58956 }, + { 0x8175, 58961 }, + { 0x8176, 58968 }, + { 0x8177, 58975 }, + { 0x8178, 58982 }, + { 0x8179, 58987 }, + { 0x817A, 58994 }, + { 0x817C, 58999 }, + { 0x817D, 59004 }, + { 0x817E, 59009 }, + { 0x8188, 59014 }, + { 0x8189, 59019 }, + { 0x818C, 59024 }, + { 0x815C, 59029 }, + { 0x815E, 59034 }, + { 0x8163, 59039 }, + { 0x8165, 59044 }, + { 0x8166, 59049 }, + { 0x816D, 59058 }, + { 0x816F, 59063 }, + { 0x8171, 59068 }, + { 0x817B, 59073 }, + { 0x817F, 59078 }, + { 0x8180, 59083 }, + { 0x8181, 59088 }, + { 0x8183, 59093 }, + { 0x8184, 59098 }, + { 0x8186, 59103 }, + { 0x818B, 59108 }, + { 0x815B, 59113 }, + { 0x8161, 59118 }, + { 0x8164, 59123 }, + { 0x8168, 59129 }, + { 0x8169, 59134 }, + { 0x816A, 59141 }, + { 0x816C, 59148 }, + { 0x8182, 59153 }, + { 0x818A, 59158 }, + { 0x815D, 59165 }, + { 0x8160, 59170 }, + { 0x8185, 59175 }, + { 0x81A0, 59180 }, + { 0x81A2, 59183 }, + { 0x81A3, 59188 }, + { 0x81A1, 59193 }, + { 0x81AA, 59198 }, + { 0x81AB, 59201 }, + { 0x81B7, 59213 }, + { 0x81F7, 59216 }, + { 0x81FB, 59219 }, + { 0x81FC, 59222 }, + { 0x8220, 59227 }, + { 0x8222, 59230 }, + { 0x8221, 59234 }, + { 0x8228, 59239 }, + { 0x822A, 59242 }, + { 0x822C, 59245 }, + { 0x822D, 59248 }, + { 0x823E, 59253 }, + { 0x8248, 59256 }, + { 0x8249, 59259 }, + { 0x824A, 59264 }, + { 0x824B, 59269 }, + { 0x824C, 59273 }, + { 0x824D, 59276 }, + { 0x8261, 59281 }, + { 0x827A, 59284 }, + { 0x827F, 59287 }, + { 0x8280, 59290 }, + { 0x8284, 59295 }, + { 0x8285, 59300 }, + { 0x8287, 59305 }, + { 0x8281, 59310 }, + { 0x8282, 59315 }, + { 0x8283, 59320 }, + { 0x8286, 59325 }, + { 0x8288, 59330 }, + { 0x8289, 59335 }, + { 0x828F, 59340 }, + { 0x8291, 59343 }, + { 0x8292, 59346 }, + { 0x8293, 59349 }, + { 0x82DB, 59352 }, + { 0x82DC, 59355 }, + { 0x82E2, 59359 }, + { 0x82E3, 59362 }, + { 0x82EB, 59367 }, + { 0x82EF, 59370 }, + { 0x82ED, 59374 }, + { 0x82EE, 59379 }, + { 0x82EC, 59384 }, + { 0x82FC, 59388 }, + { 0x82FD, 59391 }, + { 0x82FE, 59395 }, + { 0x82FF, 59398 }, + { 0x8305, 59402 }, + { 0x8311, 59405 }, + { 0x8312, 59408 }, + { 0x8313, 59411 }, + { 0x8319, 59414 }, + { 0x8317, 59418 }, + { 0x8318, 59427 }, + { 0x8316, 59437 }, + { 0x8315, 59442 }, + { 0x8314, 59447 }, + { 0x831A, 59451 }, + { 0x831B, 59455 }, + { 0x831D, 59461 }, + { 0x8321, 59464 }, + { 0x831F, 59469 }, + { 0x8320, 59476 }, + { 0x831E, 59481 }, + { 0x8326, 59486 }, + { 0x8327, 59489 }, + { 0x8328, 59493 }, + { 0x832A, 59496 }, + { 0x8329, 59500 }, + { 0x835D, 59505 }, + { 0x835E, 59508 }, + { 0x835F, 59512 }, + { 0x8363, 59518 }, + { 0x8364, 59521 }, + { 0x836A, 59526 }, + { 0x8016, 59529 }, + { 0x8019, 59532 }, + { 0x8018, 59539 }, + { 0x801A, 59545 }, + { 0x801B, 59550 }, + { 0x8017, 59555 }, + { 0x8038, 59560 }, + { 0x803A, 59563 }, + { 0x803C, 59568 }, + { 0x803D, 59575 }, + { 0x803B, 59588 }, + { 0x8039, 59600 }, + { 0x8041, 59605 }, + { 0x8044, 59608 }, + { 0x8045, 59611 }, + { 0x8047, 59616 }, + { 0x8053, 59619 }, + { 0x8056, 59622 }, + { 0x8057, 59625 }, + { 0x805A, 59633 }, + { 0x805B, 59639 }, + { 0x805C, 59645 }, + { 0x805D, 59653 }, + { 0x8060, 59659 }, + { 0x8061, 59665 }, + { 0x8062, 59671 }, + { 0x8064, 59679 }, + { 0x8065, 59685 }, + { 0x8066, 59691 }, + { 0x8068, 59699 }, + { 0x806A, 59705 }, + { 0x806C, 59711 }, + { 0x805F, 59719 }, + { 0x8063, 59725 }, + { 0x8067, 59731 }, + { 0x8069, 59737 }, + { 0x806D, 59745 }, + { 0x8058, 59751 }, + { 0x805E, 59757 }, + { 0x806B, 59763 }, + { 0x8059, 59769 }, + { 0x806E, 59775 }, + { 0x806F, 59778 }, + { 0x8073, 59781 }, + { 0x8074, 59784 }, + { 0x8075, 59787 }, + { 0x8077, 59792 }, + { 0x8078, 59795 }, + { 0x807E, 59802 }, + { 0x807F, 59805 }, + { 0x8081, 59810 }, + { 0x8083, 59813 }, + { 0x8084, 59816 }, + { 0x80B7, 59819 }, + { 0x80ED, 59822 }, + { 0x80B8, 59827 }, + { 0x80B9, 59836 }, + { 0x80BA, 59843 }, + { 0x80EA, 59850 }, + { 0x80BC, 59855 }, + { 0x80C3, 59860 }, + { 0x80C4, 59865 }, + { 0x80C7, 59870 }, + { 0x80C8, 59875 }, + { 0x80C9, 59882 }, + { 0x80CA, 59887 }, + { 0x80CD, 59895 }, + { 0x80D1, 59900 }, + { 0x80D4, 59909 }, + { 0x80DD, 59916 }, + { 0x80DE, 59921 }, + { 0x80DF, 59928 }, + { 0x80E2, 59933 }, + { 0x80EB, 59938 }, + { 0x80EC, 59943 }, + { 0x80BB, 59950 }, + { 0x80BD, 59958 }, + { 0x80BF, 59963 }, + { 0x80C0, 59968 }, + { 0x80C1, 59975 }, + { 0x80C2, 59980 }, + { 0x80C5, 59987 }, + { 0x80C6, 59994 }, + { 0x80CC, 59999 }, + { 0x80CE, 60004 }, + { 0x80CF, 60009 }, + { 0x80D2, 60016 }, + { 0x80D3, 60021 }, + { 0x80D6, 60028 }, + { 0x80D7, 60034 }, + { 0x80D8, 60043 }, + { 0x80DA, 60048 }, + { 0x80DB, 60053 }, + { 0x80DC, 60060 }, + { 0x80E0, 60067 }, + { 0x80E1, 60072 }, + { 0x80E3, 60079 }, + { 0x80E4, 60084 }, + { 0x80E5, 60089 }, + { 0x80E6, 60094 }, + { 0x80E8, 60101 }, + { 0x80BE, 60106 }, + { 0x80CB, 60113 }, + { 0x80D0, 60119 }, + { 0x80D5, 60126 }, + { 0x80E7, 60131 }, + { 0x80E9, 60136 }, + { 0x80D9, 60141 }, + { 0x80F0, 60146 }, + { 0x80F1, 60149 }, + { 0x80F2, 60157 }, + { 0x80F3, 60160 }, + { 0x80F5, 60169 }, + { 0x80F6, 60172 }, + { 0x80FB, 60175 }, + { 0x8104, 60178 }, + { 0x8105, 60181 }, + { 0x8106, 60186 }, + { 0x8118, 60191 }, + { 0x811D, 60194 }, + { 0x8119, 60198 }, + { 0x811A, 60203 }, + { 0x811B, 60211 }, + { 0x811C, 60216 }, + { 0x811E, 60223 }, + { 0x8121, 60226 }, + { 0x811F, 60232 }, + { 0x8120, 60239 }, + { 0x8122, 60244 }, + { 0x8123, 60247 }, + { 0x8124, 60250 }, + { 0x8125, 60255 }, + { 0x812C, 60258 }, + { 0x8146, 60261 }, + { 0x8148, 60264 }, + { 0x8147, 60268 }, + { 0x814A, 60272 }, + { 0x8149, 60276 }, + { 0x814D, 60287 }, + { 0x8156, 60290 }, + { 0x818D, 60293 }, + { 0x818E, 60296 }, + { 0x818F, 60301 }, + { 0x8195, 60304 }, + { 0x8196, 60307 }, + { 0x8197, 60313 }, + { 0x8198, 60316 }, + { 0x8199, 60321 }, + { 0x81A4, 60326 }, + { 0x81A5, 60329 }, + { 0x81AC, 60332 }, + { 0x81AD, 60335 }, + { 0x81AE, 60338 }, + { 0x81AF, 60343 }, + { 0x81B0, 60346 }, + { 0x81B1, 60349 }, + { 0x81B2, 60353 }, + { 0x81B3, 60356 }, + { 0x81B4, 60359 }, + { 0x81F2, 60364 }, + { 0x81F3, 60367 }, + { 0x81F4, 60372 }, + { 0x81F5, 60375 }, + { 0x81F6, 60380 }, + { 0x81F8, 60387 }, + { 0x81FD, 60390 }, + { 0x8211, 60393 }, + { 0x81FE, 60397 }, + { 0x8203, 60402 }, + { 0x8204, 60409 }, + { 0x8208, 60414 }, + { 0x8209, 60419 }, + { 0x820B, 60426 }, + { 0x820C, 60433 }, + { 0x820D, 60438 }, + { 0x820E, 60443 }, + { 0x81FF, 60450 }, + { 0x8200, 60455 }, + { 0x8201, 60460 }, + { 0x8202, 60466 }, + { 0x8205, 60472 }, + { 0x8206, 60477 }, + { 0x8207, 60482 }, + { 0x820F, 60489 }, + { 0x8210, 60496 }, + { 0x820A, 60501 }, + { 0x8215, 60506 }, + { 0x8214, 60510 }, + { 0x8212, 60514 }, + { 0x8213, 60519 }, + { 0x8216, 60524 }, + { 0x821B, 60527 }, + { 0x821C, 60530 }, + { 0x821D, 60533 }, + { 0x821E, 60536 }, + { 0x821F, 60541 }, + { 0x8223, 60549 }, + { 0x8224, 60552 }, + { 0x8225, 60555 }, + { 0x8229, 60558 }, + { 0x822B, 60561 }, + { 0x822E, 60564 }, + { 0x822F, 60567 }, + { 0x823F, 60571 }, + { 0x8246, 60574 }, + { 0x8245, 60577 }, + { 0x824E, 60581 }, + { 0x824F, 60584 }, + { 0x8251, 60587 }, + { 0x8250, 60595 }, + { 0x8263, 60601 }, + { 0x826A, 60604 }, + { 0x8269, 60609 }, + { 0x8264, 60613 }, + { 0x8266, 60619 }, + { 0x8267, 60625 }, + { 0x8268, 60636 }, + { 0x8265, 60642 }, + { 0x826B, 60648 }, + { 0x826C, 60653 }, + { 0x827B, 60661 }, + { 0x827C, 60664 }, + { 0x827D, 60667 }, + { 0x8290, 60670 }, + { 0x8295, 60673 }, + { 0x82A8, 60676 }, + { 0x82A7, 60680 }, + { 0x8296, 60685 }, + { 0x8297, 60690 }, + { 0x8299, 60695 }, + { 0x829D, 60700 }, + { 0x82A2, 60705 }, + { 0x82A3, 60710 }, + { 0x82A4, 60715 }, + { 0x82A5, 60720 }, + { 0x8298, 60725 }, + { 0x829A, 60730 }, + { 0x829B, 60735 }, + { 0x829C, 60740 }, + { 0x829E, 60745 }, + { 0x829F, 60750 }, + { 0x82A1, 60755 }, + { 0x82A6, 60760 }, + { 0x82A0, 60765 }, + { 0x8294, 60770 }, + { 0x82A9, 60774 }, + { 0x82AA, 60777 }, + { 0x82AC, 60783 }, + { 0x82AD, 60786 }, + { 0x82BA, 60789 }, + { 0x82BB, 60792 }, + { 0x82BC, 60796 }, + { 0x82BD, 60807 }, + { 0x82D7, 60818 }, + { 0x82D8, 60821 }, + { 0x82DD, 60827 }, + { 0x82E4, 60830 }, + { 0x82E7, 60833 }, + { 0x82E9, 60836 }, + { 0x82F0, 60839 }, + { 0x82F1, 60842 }, + { 0x82F2, 60853 }, + { 0x82F3, 60857 }, + { 0x82F4, 60860 }, + { 0x82F9, 60865 }, + { 0x82F5, 60870 }, + { 0x82F6, 60875 }, + { 0x82F7, 60880 }, + { 0x82F8, 60885 }, + { 0x82FB, 60890 }, + { 0x8300, 60893 }, + { 0x8301, 60896 }, + { 0x8303, 60899 }, + { 0x8304, 60904 }, + { 0x8302, 60915 }, + { 0x8307, 60920 }, + { 0x8308, 60923 }, + { 0x8309, 60926 }, + { 0x830A, 60929 }, + { 0x832B, 60937 }, + { 0x832C, 60940 }, + { 0x832D, 60947 }, + { 0x832E, 60954 }, + { 0x832F, 60959 }, + { 0x8331, 60964 }, + { 0x8333, 60969 }, + { 0x8332, 60976 }, + { 0x8330, 60983 }, + { 0x8334, 60988 }, + { 0x8335, 60991 }, + { 0x8337, 60994 }, + { 0x8338, 60997 }, + { 0x834C, 61002 }, + { 0x833C, 61009 }, + { 0x8340, 61014 }, + { 0x8341, 61019 }, + { 0x8343, 61024 }, + { 0x8345, 61029 }, + { 0x8348, 61034 }, + { 0x834B, 61039 }, + { 0x834D, 61044 }, + { 0x833A, 61049 }, + { 0x833B, 61054 }, + { 0x833D, 61059 }, + { 0x833F, 61064 }, + { 0x8342, 61069 }, + { 0x8344, 61074 }, + { 0x8346, 61079 }, + { 0x8347, 61084 }, + { 0x8349, 61089 }, + { 0x833E, 61094 }, + { 0x834A, 61100 }, + { 0x834E, 61105 }, + { 0x8339, 61110 }, + { 0x8351, 61115 }, + { 0x8352, 61118 }, + { 0x8353, 61123 }, + { 0x8354, 61128 }, + { 0x8355, 61133 }, + { 0x835A, 61138 }, + { 0x835B, 61141 }, + { 0x835C, 61146 }, + { 0x8360, 61149 }, + { 0x8362, 61152 }, + { 0x8365, 61155 }, + { 0x8366, 61158 }, + { 0x8367, 61161 }, + { 0x8368, 61166 }, + { 0x836B, 61169 }, + { 0x836C, 61172 }, + { 0x836E, 61177 }, + { 0x8029, 61180 }, + { 0x802B, 61183 }, + { 0x802C, 61186 }, + { 0x8033, 61191 }, + { 0x8034, 61194 }, + { 0x8035, 61197 }, + { 0x803E, 61202 }, + { 0x8042, 61205 }, + { 0x8054, 61208 }, + { 0x8076, 61211 }, + { 0x8079, 61214 }, + { 0x8080, 61217 }, + { 0x8085, 61220 }, + { 0x8086, 61223 }, + { 0x8087, 61227 }, + { 0x8088, 61232 }, + { 0x8089, 61235 }, + { 0x8094, 61238 }, + { 0x8095, 61241 }, + { 0x809E, 61244 }, + { 0x80A0, 61247 }, + { 0x80A1, 61250 }, + { 0x80A2, 61253 }, + { 0x80A3, 61258 }, + { 0x80A4, 61265 }, + { 0x80A5, 61274 }, + { 0x80A9, 61279 }, + { 0x80AA, 61284 }, + { 0x80AF, 61290 }, + { 0x80B1, 61295 }, + { 0x80B2, 61300 }, + { 0x80B3, 61305 }, + { 0x80B4, 61310 }, + { 0x80A6, 61315 }, + { 0x80AB, 61320 }, + { 0x80AE, 61326 }, + { 0x80B0, 61331 }, + { 0x80A7, 61338 }, + { 0x80A8, 61344 }, + { 0x80AC, 61351 }, + { 0x80AD, 61356 }, + { 0x80EE, 61362 }, + { 0x80EF, 61365 }, + { 0x80F7, 61370 }, + { 0x80F9, 61373 }, + { 0x80F8, 61378 }, + { 0x80FA, 61382 }, + { 0x80FC, 61387 }, + { 0x8108, 61390 }, + { 0x8109, 61393 }, + { 0x810A, 61397 }, + { 0x810B, 61400 }, + { 0x810E, 61407 }, + { 0x810F, 61414 }, + { 0x810D, 61419 }, + { 0x810C, 61424 }, + { 0x8111, 61430 }, + { 0x8115, 61433 }, + { 0x8113, 61437 }, + { 0x8114, 61442 }, + { 0x8112, 61447 }, + { 0x8126, 61452 }, + { 0x8138, 61455 }, + { 0x8139, 61458 }, + { 0x813D, 61463 }, + { 0x813A, 61468 }, + { 0x813C, 61473 }, + { 0x813B, 61478 }, + { 0x813E, 61483 }, + { 0x8142, 61486 }, + { 0x8143, 61489 }, + { 0x8144, 61495 }, + { 0x8153, 61501 }, + { 0x8190, 61504 }, + { 0x8191, 61507 }, + { 0x8192, 61510 }, + { 0x8193, 61513 }, + { 0x8194, 61516 }, + { 0x819A, 61521 }, + { 0x819B, 61524 }, + { 0x81A7, 61527 }, + { 0x81FA, 61530 }, + { 0x8226, 61533 }, + { 0x8232, 61536 }, + { 0x8236, 61539 }, + { 0x8237, 61544 }, + { 0x8233, 61553 }, + { 0x8235, 61558 }, + { 0x8234, 61563 }, + { 0x8238, 61568 }, + { 0x8240, 61573 }, + { 0x8242, 61576 }, + { 0x8241, 61582 }, + { 0x8243, 61586 }, + { 0x8247, 61591 }, + { 0x8262, 61594 }, + { 0x82AE, 61597 }, + { 0x82AF, 61600 }, + { 0x82B5, 61605 }, + { 0x82B6, 61610 }, + { 0x82B2, 61617 }, + { 0x82B0, 61622 }, + { 0x82B4, 61627 }, + { 0x82B1, 61632 }, + { 0x82B3, 61637 }, + { 0x82B7, 61642 }, + { 0x82BF, 61645 }, + { 0x82C3, 61648 }, + { 0x82C4, 61651 }, + { 0x82C5, 61656 }, + { 0x82C6, 61661 }, + { 0x82C7, 61664 }, + { 0x82C8, 61669 }, + { 0x82CA, 61674 }, + { 0x82CB, 61679 }, + { 0x82CC, 61684 }, + { 0x82CD, 61689 }, + { 0x82CF, 61695 }, + { 0x82D0, 61700 }, + { 0x82D1, 61705 }, + { 0x82C9, 61710 }, + { 0x82CE, 61715 }, + { 0x82D3, 61720 }, + { 0x82D5, 61723 }, + { 0x82D4, 61731 }, + { 0x82D9, 61735 }, + { 0x82DE, 61738 }, + { 0x82DF, 61741 }, + { 0x82E0, 61747 }, + { 0x82E5, 61750 }, + { 0x82EA, 61753 }, + { 0x82FA, 61756 }, + { 0x8306, 61759 }, + { 0x831C, 61762 }, + { 0x8323, 61765 }, + { 0x8325, 61768 }, + { 0x8324, 61773 }, + { 0x8336, 61778 }, + { 0x8357, 61781 }, + { 0x8356, 61784 }, + { 0x8361, 61787 }, + { 0x8369, 61790 }, + { 0x802A, 61793 }, + { 0x8032, 61796 }, + { 0x8036, 61799 }, + { 0x8037, 61802 }, + { 0x8046, 61805 }, + { 0x8048, 61808 }, + { 0x8051, 61811 }, + { 0x8052, 61814 }, + { 0x8070, 61819 }, + { 0x8071, 61822 }, + { 0x8082, 61825 }, + { 0x809F, 61828 }, + { 0x80F4, 61831 }, + { 0x8107, 61834 }, + { 0x8110, 61837 }, + { 0x8127, 61840 }, + { 0x819F, 61843 }, + { 0x81A6, 61846 }, + { 0x81B8, 61849 }, + { 0x81B9, 61852 }, + { 0x81BA, 61857 }, + { 0x81BB, 61866 }, + { 0x81BC, 61873 }, + { 0x81E5, 61880 }, + { 0x81E6, 61885 }, + { 0x81E7, 61892 }, + { 0x81BD, 61901 }, + { 0x81BE, 61906 }, + { 0x81C1, 61911 }, + { 0x81C3, 61916 }, + { 0x81C4, 61921 }, + { 0x81C8, 61926 }, + { 0x81CA, 61931 }, + { 0x81CC, 61938 }, + { 0x81CD, 61943 }, + { 0x81CE, 61950 }, + { 0x81CF, 61957 }, + { 0x81D6, 61962 }, + { 0x81D8, 61967 }, + { 0x81D9, 61972 }, + { 0x81DB, 61979 }, + { 0x81E4, 61984 }, + { 0x81E8, 61995 }, + { 0x81E9, 62002 }, + { 0x81BF, 62007 }, + { 0x81C0, 62014 }, + { 0x81C2, 62019 }, + { 0x81C5, 62024 }, + { 0x81C6, 62029 }, + { 0x81C7, 62034 }, + { 0x81C9, 62041 }, + { 0x81CB, 62046 }, + { 0x81D0, 62052 }, + { 0x81D1, 62057 }, + { 0x81D2, 62062 }, + { 0x81D3, 62067 }, + { 0x81D7, 62076 }, + { 0x81DC, 62081 }, + { 0x81E1, 62088 }, + { 0x81E2, 62093 }, + { 0x81EA, 62098 }, + { 0x81D5, 62103 }, + { 0x81DA, 62108 }, + { 0x81DF, 62113 }, + { 0x81E0, 62118 }, + { 0x81E3, 62125 }, + { 0x81D4, 62130 }, + { 0x81DD, 62135 }, + { 0x81DE, 62144 }, + { 0x81EB, 62152 }, + { 0x81EC, 62156 }, + { 0x81EF, 62159 }, + { 0x81F0, 62163 }, + { 0x81ED, 62171 }, + { 0x81EE, 62176 }, + { 0x8217, 62183 }, + { 0x8218, 62186 }, + { 0x821A, 62191 }, + { 0x8219, 62195 }, + { 0x8227, 62200 }, + { 0x8239, 62203 }, + { 0x823D, 62206 }, + { 0x823A, 62210 }, + { 0x823B, 62215 }, + { 0x823C, 62222 }, + { 0x8244, 62227 }, + { 0x8260, 62230 }, + { 0x826D, 62233 }, + { 0x826F, 62236 }, + { 0x8274, 62242 }, + { 0x8275, 62248 }, + { 0x8277, 62254 }, + { 0x8270, 62260 }, + { 0x8271, 62266 }, + { 0x8272, 62272 }, + { 0x8273, 62279 }, + { 0x8276, 62285 }, + { 0x826E, 62291 }, + { 0x8278, 62297 }, + { 0x8279, 62303 }, + { 0x827E, 62310 }, + { 0x828A, 62313 }, + { 0x828C, 62316 }, + { 0x828D, 62321 }, + { 0x828B, 62326 }, + { 0x828E, 62331 }, + { 0x82B8, 62336 }, + { 0x82B9, 62339 }, + { 0x82BE, 62342 }, + { 0x82C0, 62345 }, + { 0x82D6, 62348 }, + { 0x82E1, 62351 }, + { 0x82E6, 62354 }, + { 0x8322, 62357 }, + { 0x834F, 62360 }, + { 0x8350, 62363 }, + { 0x8359, 62368 }, + { 0x836D, 62371 }, + { 0x803F, 62374 }, + { 0x8043, 62377 }, + { 0x80FD, 62380 }, + { 0x8128, 62383 }, + { 0x819C, 62386 }, + { 0x819E, 62389 }, + { 0x819D, 62401 }, + { 0x81A8, 62411 }, + { 0x81A9, 62414 }, + { 0x81B5, 62419 }, + { 0x81B6, 62422 }, + { 0x81F1, 62425 }, + { 0x81F9, 62428 }, + { 0x8230, 62431 }, + { 0x8231, 62434 }, + { 0x8252, 62437 }, + { 0x8253, 62440 }, + { 0x8257, 62445 }, + { 0x8258, 62453 }, + { 0x825E, 62458 }, + { 0x8254, 62465 }, + { 0x8255, 62470 }, + { 0x8256, 62477 }, + { 0x8259, 62482 }, + { 0x825A, 62487 }, + { 0x825B, 62492 }, + { 0x825C, 62500 }, + { 0x825D, 62507 }, + { 0x825F, 62516 }, + { 0x82AB, 62521 }, + { 0x82C1, 62524 }, + { 0x82D2, 62527 }, + { 0x82DA, 62530 }, + { 0x82E8, 62533 }, + { 0x8358, 62536 }, + { 0x80FE, 62539 }, + { 0x80FF, 62542 }, + { 0x82C2, 62547 }, + { 0x8461, 62550 }, + { 0x8462, 62557 }, + { 0x844F, 62564 }, + { 0x8434, 62569 }, + { 0x8458, 62574 }, + { 0x8415, 62579 }, + { 0x841E, 62584 }, + { 0x842C, 62589 }, + { 0x845A, 62594 }, + { 0x845D, 62600 }, + { 0x845F, 62608 }, + { 0x8460, 62614 }, + { 0x8411, 62620 }, + { 0x8404, 62625 }, + { 0x844E, 62630 }, + { 0x840B, 62636 }, + { 0x841A, 62641 }, + { 0x8428, 62646 }, + { 0x8440, 62651 }, + { 0x8400, 62658 }, + { 0x844A, 62663 }, + { 0x8450, 62669 }, + { 0x8435, 62674 }, + { 0x8459, 62679 }, + { 0x8416, 62684 }, + { 0x841F, 62689 }, + { 0x8423, 62694 }, + { 0x842D, 62699 }, + { 0x845B, 62704 }, + { 0x845E, 62710 }, + { 0x8410, 62718 }, + { 0x8403, 62723 }, + { 0x844D, 62728 }, + { 0x8454, 62734 }, + { 0x8455, 62739 }, + { 0x8439, 62746 }, + { 0x840A, 62751 }, + { 0x8419, 62756 }, + { 0x8422, 62761 }, + { 0x8427, 62766 }, + { 0x8431, 62771 }, + { 0x845C, 62776 }, + { 0x840F, 62782 }, + { 0x8402, 62787 }, + { 0x844C, 62792 }, + { 0x8452, 62798 }, + { 0x8453, 62803 }, + { 0x8438, 62810 }, + { 0x8409, 62815 }, + { 0x8418, 62820 }, + { 0x8421, 62825 }, + { 0x8426, 62830 }, + { 0x8430, 62835 }, + { 0x843C, 62840 }, + { 0x843E, 62847 }, + { 0x843F, 62855 }, + { 0x843D, 62863 }, + { 0x8414, 62870 }, + { 0x8407, 62875 }, + { 0x840E, 62880 }, + { 0x841D, 62885 }, + { 0x842B, 62890 }, + { 0x8446, 62895 }, + { 0x8449, 62902 }, + { 0x8447, 62910 }, + { 0x8448, 62917 }, + { 0x8413, 62924 }, + { 0x8406, 62929 }, + { 0x840D, 62934 }, + { 0x841C, 62939 }, + { 0x842A, 62944 }, + { 0x8444, 62949 }, + { 0x8445, 62956 }, + { 0x8412, 62963 }, + { 0x8405, 62968 }, + { 0x840C, 62973 }, + { 0x841B, 62978 }, + { 0x8429, 62983 }, + { 0x8442, 62988 }, + { 0x8443, 62996 }, + { 0x8441, 63004 }, + { 0x8433, 63011 }, + { 0x8432, 63019 }, + { 0x8401, 63027 }, + { 0x844B, 63032 }, + { 0x8451, 63038 }, + { 0x8436, 63043 }, + { 0x8437, 63048 }, + { 0x8408, 63055 }, + { 0x8417, 63060 }, + { 0x8420, 63065 }, + { 0x8424, 63070 }, + { 0x8425, 63075 }, + { 0x842E, 63082 }, + { 0x842F, 63087 }, + { 0x843A, 63094 }, + { 0x843B, 63101 }, + { 0x8457, 63108 }, + { 0x8456, 63112 }, + { 0x8470, 63116 }, + { 0x8472, 63123 }, + { 0x8473, 63128 }, + { 0x8471, 63133 }, + { 0x23CA, 63138 }, + { 0x23C8, 63144 }, + { 0x23C2, 63152 }, + { 0x23C5, 63160 }, + { 0x23C9, 63168 }, + { 0x23C7, 63174 }, + { 0x23C1, 63182 }, + { 0x23C4, 63190 }, + { 0x23CB, 63198 }, + { 0x23BE, 63205 }, + { 0x23C6, 63212 }, + { 0x23CC, 63218 }, + { 0x23BF, 63225 }, + { 0x23C0, 63232 }, + { 0x23C3, 63238 }, + { 0x00A8, 63244 }, + { 0x2331, 63245 }, + { 0x21A1, 63247 }, + { 0x2193, 63251 }, + { 0x2913, 63253 }, + { 0x21A7, 63257 }, + { 0x21B2, 63261 }, + { 0x21B3, 63266 }, + { 0x21B5, 63271 }, + { 0x21DF, 63276 }, + { 0x2908, 63281 }, + { 0x21F5, 63286 }, + { 0x2B07, 63292 }, + { 0x21E9, 63295 }, + { 0x2E14, 63298 }, + { 0x21E3, 63300 }, + { 0x21D3, 63303 }, + { 0x21CA, 63306 }, + { 0x290B, 63309 }, + { 0x21AF, 63312 }, + { 0x2959, 63315 }, + { 0x2961, 63322 }, + { 0x296F, 63329 }, + { 0x2965, 63340 }, + { 0x2955, 63351 }, + { 0x295D, 63358 }, + { 0x21C3, 63365 }, + { 0x21C2, 63370 }, + { 0x27F1, 63375 }, + { 0x2E0E, 63378 }, + { 0x212E, 63380 }, + { 0x2259, 63382 }, + { 0x213B, 63383 }, + { 0x6F3F, 63385 }, + { 0x6FE2, 63388 }, + { 0x6FE6, 63391 }, + { 0x6FE5, 63394 }, + { 0x6FE0, 63397 }, + { 0x6F0E, 63400 }, + { 0x6F5B, 63403 }, + { 0x6F5F, 63407 }, + { 0x6F3B, 63411 }, + { 0x6F08, 63415 }, + { 0x6F0B, 63418 }, + { 0x6F1A, 63421 }, + { 0x6F0C, 63423 }, + { 0x6F11, 63425 }, + { 0x6F16, 63428 }, + { 0x6F12, 63431 }, + { 0x6F15, 63434 }, + { 0x6F14, 63437 }, + { 0x6F19, 63440 }, + { 0x6F10, 63443 }, + { 0x6F18, 63446 }, + { 0x6F17, 63449 }, + { 0x6F13, 63452 }, + { 0x6F40, 63455 }, + { 0x6F41, 63458 }, + { 0x6F42, 63463 }, + { 0x6F43, 63468 }, + { 0x6F44, 63473 }, + { 0x6F45, 63478 }, + { 0x6F46, 63483 }, + { 0x6F47, 63488 }, + { 0x6F48, 63493 }, + { 0x6F49, 63498 }, + { 0x6F4A, 63503 }, + { 0x6F4B, 63508 }, + { 0x6F4C, 63513 }, + { 0x6F4D, 63518 }, + { 0x6F4E, 63523 }, + { 0x6F4F, 63528 }, + { 0x6F50, 63533 }, + { 0x6F51, 63538 }, + { 0x6F52, 63543 }, + { 0x6F53, 63548 }, + { 0x6F54, 63553 }, + { 0x6F55, 63558 }, + { 0x6F56, 63563 }, + { 0x6F57, 63568 }, + { 0x6F58, 63573 }, + { 0x6F59, 63578 }, + { 0x6F5A, 63583 }, + { 0x6F21, 63588 }, + { 0x6F22, 63593 }, + { 0x6F23, 63598 }, + { 0x6F24, 63603 }, + { 0x6F25, 63608 }, + { 0x6F26, 63613 }, + { 0x6F27, 63618 }, + { 0x6F28, 63623 }, + { 0x6F29, 63628 }, + { 0x6F2A, 63633 }, + { 0x6F2B, 63638 }, + { 0x6F2C, 63643 }, + { 0x6F2D, 63648 }, + { 0x6F2E, 63653 }, + { 0x6F2F, 63658 }, + { 0x6F30, 63663 }, + { 0x6F31, 63668 }, + { 0x6F32, 63673 }, + { 0x6F33, 63678 }, + { 0x6F34, 63683 }, + { 0x6F35, 63688 }, + { 0x6F36, 63693 }, + { 0x6F37, 63698 }, + { 0x6F38, 63703 }, + { 0x6F39, 63708 }, + { 0x6F3A, 63713 }, + { 0x6FE1, 63718 }, + { 0x6F5D, 63721 }, + { 0x6F60, 63725 }, + { 0x6F3D, 63729 }, + { 0x6F09, 63733 }, + { 0x6F5E, 63736 }, + { 0x6FE4, 63738 }, + { 0x6F04, 63741 }, + { 0x6F1D, 63744 }, + { 0x6FE3, 63747 }, + { 0x6F03, 63749 }, + { 0x6F05, 63752 }, + { 0x6F3C, 63755 }, + { 0x6F0F, 63758 }, + { 0x6F0A, 63760 }, + { 0x6F1F, 63762 }, + { 0x6F5C, 63765 }, + { 0x6F06, 63768 }, + { 0x6F1C, 63770 }, + { 0x6F02, 63773 }, + { 0x6F1B, 63776 }, + { 0x6F07, 63778 }, + { 0x6F3E, 63780 }, + { 0x6F20, 63783 }, + { 0x6F01, 63786 }, + { 0x6F1E, 63789 }, + { 0x6F0D, 63792 }, + { 0x223A, 63794 }, + { 0x6F62, 63796 }, + { 0x6FED, 63800 }, + { 0x6FE8, 63803 }, + { 0x6F63, 63807 }, + { 0x6FEE, 63811 }, + { 0x6FA0, 63814 }, + { 0x6FC2, 63817 }, + { 0x6FC7, 63821 }, + { 0x6FDC, 63825 }, + { 0x6FCC, 63829 }, + { 0x6FD3, 63833 }, + { 0x6FC3, 63837 }, + { 0x6FC6, 63841 }, + { 0x6FDA, 63845 }, + { 0x6FCF, 63849 }, + { 0x6FCD, 63853 }, + { 0x6FD5, 63857 }, + { 0x6FD6, 63861 }, + { 0x6FC4, 63865 }, + { 0x6FCB, 63869 }, + { 0x6FDB, 63873 }, + { 0x6FD2, 63877 }, + { 0x6FD7, 63881 }, + { 0x6FCE, 63885 }, + { 0x6FD4, 63889 }, + { 0x6FC5, 63893 }, + { 0x6FCA, 63897 }, + { 0x6FB5, 63901 }, + { 0x6FB8, 63905 }, + { 0x6FBE, 63909 }, + { 0x6FB7, 63913 }, + { 0x6FB1, 63917 }, + { 0x6FA4, 63921 }, + { 0x6FB2, 63925 }, + { 0x6FA9, 63929 }, + { 0x6FA1, 63933 }, + { 0x6FA7, 63937 }, + { 0x6FBA, 63941 }, + { 0x6FBB, 63945 }, + { 0x6FBD, 63949 }, + { 0x6FBC, 63953 }, + { 0x6FB6, 63957 }, + { 0x6FB4, 63961 }, + { 0x6FAD, 63965 }, + { 0x6FB9, 63969 }, + { 0x6FB3, 63973 }, + { 0x6FA3, 63977 }, + { 0x6FA5, 63981 }, + { 0x6FA6, 63985 }, + { 0x6FB0, 63989 }, + { 0x6FAB, 63993 }, + { 0x6FAC, 63997 }, + { 0x6FA2, 64001 }, + { 0x6FA8, 64005 }, + { 0x6FAA, 64009 }, + { 0x6FAF, 64013 }, + { 0x6FAE, 64017 }, + { 0x6FEA, 64021 }, + { 0x6F71, 64024 }, + { 0x6F74, 64028 }, + { 0x6F72, 64032 }, + { 0x6F9D, 64036 }, + { 0x6F75, 64040 }, + { 0x6F73, 64044 }, + { 0x6F8A, 64048 }, + { 0x6F8D, 64052 }, + { 0x6F8B, 64056 }, + { 0x6F8E, 64060 }, + { 0x6F8C, 64064 }, + { 0x6F76, 64068 }, + { 0x6F79, 64072 }, + { 0x6F77, 64076 }, + { 0x6F7A, 64080 }, + { 0x6F78, 64084 }, + { 0x6F8F, 64088 }, + { 0x6F92, 64092 }, + { 0x6F90, 64096 }, + { 0x6F93, 64100 }, + { 0x6F91, 64104 }, + { 0x6F85, 64108 }, + { 0x6F88, 64112 }, + { 0x6F86, 64116 }, + { 0x6F89, 64120 }, + { 0x6F87, 64124 }, + { 0x6F97, 64128 }, + { 0x6F9A, 64132 }, + { 0x6F98, 64136 }, + { 0x6F9B, 64140 }, + { 0x6F99, 64144 }, + { 0x6F7B, 64148 }, + { 0x6F7E, 64152 }, + { 0x6F7C, 64156 }, + { 0x6F7F, 64160 }, + { 0x6F7D, 64164 }, + { 0x6F80, 64168 }, + { 0x6F83, 64172 }, + { 0x6F81, 64176 }, + { 0x6F84, 64180 }, + { 0x6F82, 64184 }, + { 0x6F9C, 64188 }, + { 0x6F66, 64192 }, + { 0x6F94, 64196 }, + { 0x6F96, 64200 }, + { 0x6F95, 64204 }, + { 0x6F67, 64208 }, + { 0x6F6A, 64213 }, + { 0x6F68, 64218 }, + { 0x6F6B, 64223 }, + { 0x6F69, 64228 }, + { 0x6F6F, 64233 }, + { 0x6F6C, 64238 }, + { 0x6F6E, 64243 }, + { 0x6F6D, 64248 }, + { 0x6F65, 64253 }, + { 0x6F9E, 64257 }, + { 0x6F9F, 64262 }, + { 0x6FEC, 64267 }, + { 0x6FE9, 64270 }, + { 0x6FEB, 64273 }, + { 0x6F61, 64276 }, + { 0x6F64, 64280 }, + { 0x6F70, 64283 }, + { 0x22B9, 64288 }, + { 0x231B, 64291 }, + { 0x2261, 64292 }, + { 0x29E5, 64294 }, + { 0x2A67, 64299 }, + { 0x29E1, 64303 }, + { 0x2206, 64305 }, + { 0x2380, 64306 }, + { 0x2064, 64308 }, + { 0x2062, 64310 }, + { 0x2063, 64312 }, + { 0x2939, 64314 }, + { 0x219E, 64318 }, + { 0x219C, 64322 }, + { 0x2190, 64325 }, + { 0x21E4, 64327 }, + { 0x21B9, 64331 }, + { 0x291D, 64340 }, + { 0x21A4, 64345 }, + { 0x291F, 64349 }, + { 0x21C6, 64356 }, + { 0x2B11, 64361 }, + { 0x2B10, 64366 }, + { 0x21A9, 64371 }, + { 0x21AB, 64375 }, + { 0x2946, 64379 }, + { 0x21A2, 64384 }, + { 0x2B3A, 64388 }, + { 0x2B39, 64396 }, + { 0x2B38, 64403 }, + { 0x21FA, 64408 }, + { 0x219A, 64414 }, + { 0x21F7, 64418 }, + { 0x2943, 64423 }, + { 0x2973, 64429 }, + { 0x2B4A, 64434 }, + { 0x2B4B, 64440 }, + { 0x2B42, 64446 }, + { 0x2B3E, 64453 }, + { 0x297A, 64457 }, + { 0x2977, 64461 }, + { 0x2B05, 64465 }, + { 0x21E6, 64468 }, + { 0x21E0, 64471 }, + { 0x290C, 64474 }, + { 0x21D0, 64478 }, + { 0x2906, 64481 }, + { 0x21CD, 64486 }, + { 0x2902, 64491 }, + { 0x291B, 64497 }, + { 0x21C7, 64500 }, + { 0x290E, 64503 }, + { 0x21DA, 64507 }, + { 0x21CB, 64510 }, + { 0x2952, 64515 }, + { 0x295A, 64522 }, + { 0x296A, 64529 }, + { 0x2962, 64537 }, + { 0x2966, 64548 }, + { 0x2956, 64559 }, + { 0x295E, 64566 }, + { 0x2967, 64573 }, + { 0x296B, 64584 }, + { 0x21BC, 64592 }, + { 0x21BD, 64597 }, + { 0x21DC, 64602 }, + { 0x2B45, 64605 }, + { 0x2919, 64608 }, + { 0x2B36, 64610 }, + { 0x2B3B, 64615 }, + { 0x2B3D, 64620 }, + { 0x2B3C, 64629 }, + { 0x2B35, 64637 }, + { 0x2B34, 64644 }, + { 0x2B37, 64650 }, + { 0x21FD, 64655 }, + { 0x2264, 64658 }, + { 0x2A7D, 64662 }, + { 0x2A81, 64667 }, + { 0x2A83, 64675 }, + { 0x2A7F, 64684 }, + { 0x2272, 64692 }, + { 0x2A85, 64696 }, + { 0x2276, 64699 }, + { 0x2A89, 64702 }, + { 0x2A87, 64706 }, + { 0x2268, 64712 }, + { 0x22E6, 64717 }, + { 0x2266, 64722 }, + { 0x003C, 64726 }, + { 0x22D6, 64728 }, + { 0x2A79, 64731 }, + { 0x2A7B, 64735 }, + { 0x2A8D, 64740 }, + { 0x2A8F, 64745 }, + { 0x2A93, 64750 }, + { 0x2976, 64759 }, + { 0x2A8B, 64763 }, + { 0x2A91, 64769 }, + { 0x22DA, 64775 }, + { 0x2AA6, 64780 }, + { 0x2AA8, 64784 }, + { 0x2607, 64791 }, + { 0x0D57, 64792 }, + { 0x0D79, 64796 }, + { 0x0D4D, 64799 }, + { 0x0D03, 64802 }, + { 0x0D02, 64805 }, + { 0x0D3D, 64808 }, + { 0x0D67, 64811 }, + { 0x0D6C, 64814 }, + { 0x0D68, 64817 }, + { 0x0D6B, 64820 }, + { 0x0D6A, 64823 }, + { 0x0D6F, 64826 }, + { 0x0D66, 64829 }, + { 0x0D6E, 64832 }, + { 0x0D6D, 64835 }, + { 0x0D69, 64838 }, + { 0x0D46, 64841 }, + { 0x0D3F, 64845 }, + { 0x0D4A, 64849 }, + { 0x0D41, 64853 }, + { 0x0D3E, 64857 }, + { 0x0D48, 64861 }, + { 0x0D4C, 64865 }, + { 0x0D47, 64869 }, + { 0x0D40, 64873 }, + { 0x0D4B, 64877 }, + { 0x0D42, 64881 }, + { 0x0D62, 64885 }, + { 0x0D43, 64890 }, + { 0x0D63, 64895 }, + { 0x0D44, 64900 }, + { 0x0D05, 64905 }, + { 0x0D0E, 64908 }, + { 0x0D07, 64911 }, + { 0x0D12, 64914 }, + { 0x0D09, 64917 }, + { 0x0D06, 64920 }, + { 0x0D10, 64923 }, + { 0x0D14, 64926 }, + { 0x0D2C, 64929 }, + { 0x0D1A, 64932 }, + { 0x0D26, 64935 }, + { 0x0D0F, 64938 }, + { 0x0D17, 64941 }, + { 0x0D39, 64944 }, + { 0x0D08, 64947 }, + { 0x0D1C, 64950 }, + { 0x0D15, 64953 }, + { 0x0D32, 64956 }, + { 0x0D2E, 64959 }, + { 0x0D28, 64962 }, + { 0x0D13, 64965 }, + { 0x0D2A, 64968 }, + { 0x0D30, 64971 }, + { 0x0D38, 64974 }, + { 0x0D24, 64977 }, + { 0x0D0A, 64980 }, + { 0x0D35, 64983 }, + { 0x0D2F, 64986 }, + { 0x0D2D, 64989 }, + { 0x0D1B, 64992 }, + { 0x0D21, 64995 }, + { 0x0D27, 64998 }, + { 0x0D18, 65001 }, + { 0x0D1D, 65004 }, + { 0x0D16, 65007 }, + { 0x0D33, 65010 }, + { 0x0D19, 65013 }, + { 0x0D23, 65016 }, + { 0x0D1E, 65019 }, + { 0x0D2B, 65022 }, + { 0x0D31, 65025 }, + { 0x0D36, 65028 }, + { 0x0D37, 65031 }, + { 0x0D25, 65034 }, + { 0x0D1F, 65037 }, + { 0x0D22, 65040 }, + { 0x0D34, 65043 }, + { 0x0D20, 65046 }, + { 0x0D7F, 65049 }, + { 0x0D7D, 65053 }, + { 0x0D7B, 65057 }, + { 0x0D7E, 65061 }, + { 0x0D7A, 65065 }, + { 0x0D7C, 65069 }, + { 0x0D0C, 65073 }, + { 0x0D0B, 65077 }, + { 0x0D61, 65081 }, + { 0x0D60, 65085 }, + { 0x0D71, 65089 }, + { 0x0D72, 65093 }, + { 0x0D70, 65097 }, + { 0x0D74, 65100 }, + { 0x0D73, 65104 }, + { 0x0D75, 65108 }, + { 0x00BA, 65112 }, + { 0x1805, 65115 }, + { 0x180B, 65118 }, + { 0x180C, 65123 }, + { 0x180D, 65128 }, + { 0x1803, 65133 }, + { 0x1807, 65136 }, + { 0x1806, 65141 }, + { 0x1800, 65145 }, + { 0x1804, 65147 }, + { 0x1802, 65149 }, + { 0x1811, 65151 }, + { 0x1816, 65154 }, + { 0x1812, 65157 }, + { 0x1815, 65160 }, + { 0x1814, 65163 }, + { 0x1819, 65166 }, + { 0x1810, 65169 }, + { 0x1818, 65172 }, + { 0x1817, 65175 }, + { 0x1813, 65178 }, + { 0x180E, 65181 }, + { 0x1820, 65184 }, + { 0x1821, 65187 }, + { 0x1822, 65190 }, + { 0x1823, 65193 }, + { 0x1824, 65196 }, + { 0x182A, 65199 }, + { 0x1833, 65202 }, + { 0x1827, 65205 }, + { 0x1839, 65208 }, + { 0x182D, 65211 }, + { 0x1835, 65214 }, + { 0x183A, 65217 }, + { 0x182F, 65220 }, + { 0x182E, 65223 }, + { 0x1828, 65226 }, + { 0x1825, 65229 }, + { 0x182B, 65232 }, + { 0x182C, 65235 }, + { 0x1837, 65238 }, + { 0x1830, 65241 }, + { 0x1832, 65244 }, + { 0x1826, 65247 }, + { 0x1838, 65250 }, + { 0x1836, 65253 }, + { 0x183D, 65256 }, + { 0x1887, 65259 }, + { 0x1888, 65264 }, + { 0x1897, 65269 }, + { 0x188B, 65274 }, + { 0x1891, 65279 }, + { 0x1889, 65284 }, + { 0x1892, 65289 }, + { 0x1890, 65294 }, + { 0x1896, 65299 }, + { 0x188E, 65304 }, + { 0x188A, 65309 }, + { 0x188F, 65314 }, + { 0x1893, 65319 }, + { 0x1894, 65324 }, + { 0x188C, 65329 }, + { 0x1895, 65334 }, + { 0x18A6, 65339 }, + { 0x18A7, 65345 }, + { 0x188D, 65351 }, + { 0x1886, 65356 }, + { 0x1885, 65362 }, + { 0x1882, 65367 }, + { 0x18A9, 65372 }, + { 0x1883, 65377 }, + { 0x1881, 65382 }, + { 0x1880, 65388 }, + { 0x1884, 65394 }, + { 0x1829, 65400 }, + { 0x1834, 65403 }, + { 0x1842, 65406 }, + { 0x183E, 65409 }, + { 0x183B, 65412 }, + { 0x1840, 65415 }, + { 0x1831, 65418 }, + { 0x183C, 65421 }, + { 0x1841, 65424 }, + { 0x183F, 65427 }, + { 0x185D, 65430 }, + { 0x185E, 65434 }, + { 0x1861, 65438 }, + { 0x1869, 65442 }, + { 0x186B, 65446 }, + { 0x1864, 65450 }, + { 0x1865, 65454 }, + { 0x185F, 65458 }, + { 0x186A, 65462 }, + { 0x1863, 65466 }, + { 0x1866, 65470 }, + { 0x1868, 65474 }, + { 0x1860, 65478 }, + { 0x186F, 65482 }, + { 0x1862, 65486 }, + { 0x1871, 65490 }, + { 0x186C, 65494 }, + { 0x186D, 65498 }, + { 0x1870, 65502 }, + { 0x1867, 65506 }, + { 0x186E, 65510 }, + { 0x1872, 65514 }, + { 0x1844, 65518 }, + { 0x1845, 65522 }, + { 0x1846, 65526 }, + { 0x1847, 65530 }, + { 0x184B, 65534 }, + { 0x1851, 65538 }, + { 0x184E, 65542 }, + { 0x1853, 65546 }, + { 0x1857, 65550 }, + { 0x184F, 65554 }, + { 0x1848, 65558 }, + { 0x184C, 65562 }, + { 0x184D, 65566 }, + { 0x1850, 65570 }, + { 0x1849, 65574 }, + { 0x1856, 65578 }, + { 0x1855, 65582 }, + { 0x1898, 65586 }, + { 0x1899, 65592 }, + { 0x184A, 65598 }, + { 0x1852, 65602 }, + { 0x185C, 65606 }, + { 0x1858, 65610 }, + { 0x1859, 65614 }, + { 0x185A, 65618 }, + { 0x185B, 65622 }, + { 0x1854, 65626 }, + { 0x1843, 65630 }, + { 0x1873, 65636 }, + { 0x1876, 65640 }, + { 0x1874, 65644 }, + { 0x1875, 65648 }, + { 0x189C, 65652 }, + { 0x18A0, 65658 }, + { 0x18A5, 65664 }, + { 0x18A8, 65670 }, + { 0x18A3, 65676 }, + { 0x18A1, 65682 }, + { 0x189A, 65688 }, + { 0x189D, 65694 }, + { 0x18AA, 65700 }, + { 0x189B, 65706 }, + { 0x18A2, 65712 }, + { 0x189E, 65718 }, + { 0x18A4, 65724 }, + { 0x189F, 65730 }, + { 0x1877, 65736 }, + { 0x1809, 65740 }, + { 0x1808, 65744 }, + { 0x180A, 65747 }, + { 0x1801, 65749 }, + { 0x2029, 65751 }, + { 0x267E, 65753 }, + { 0x22D4, 65756 }, + { 0x2ADA, 65757 }, + { 0x2057, 65761 }, + { 0x2A0C, 65763 }, + { 0x0022, 65766 }, + { 0x2673, 65768 }, + { 0x2674, 65773 }, + { 0x2675, 65778 }, + { 0x2676, 65783 }, + { 0x2677, 65788 }, + { 0x2678, 65793 }, + { 0x2679, 65798 }, + { 0x267A, 65803 }, + { 0x203B, 65808 }, + { 0x2A3D, 65810 }, + { 0x003B, 65813 }, + { 0x2744, 65814 }, + { 0x2222, 65815 }, + { 0x29A1, 65817 }, + { 0x29A0, 65821 }, + { 0x2081, 65825 }, + { 0x2086, 65827 }, + { 0x2082, 65829 }, + { 0x2085, 65831 }, + { 0x2084, 65833 }, + { 0x208D, 65835 }, + { 0x2089, 65838 }, + { 0x208A, 65840 }, + { 0x2080, 65843 }, + { 0x2088, 65845 }, + { 0x208B, 65847 }, + { 0x208E, 65849 }, + { 0x2087, 65852 }, + { 0x2083, 65854 }, + { 0x208C, 65856 }, + { 0x23B2, 65859 }, + { 0x2A0B, 65861 }, + { 0x23B3, 65864 }, + { 0x1BAA, 65866 }, + { 0x1B80, 65869 }, + { 0x1B81, 65872 }, + { 0x1B82, 65875 }, + { 0x1BB1, 65878 }, + { 0x1BB6, 65881 }, + { 0x1BB2, 65884 }, + { 0x1BB5, 65887 }, + { 0x1BB4, 65890 }, + { 0x1BB9, 65893 }, + { 0x1BB0, 65896 }, + { 0x1BB8, 65899 }, + { 0x1BB7, 65902 }, + { 0x1BB3, 65905 }, + { 0x1BA8, 65908 }, + { 0x1BA5, 65912 }, + { 0x1BA4, 65916 }, + { 0x1BA7, 65920 }, + { 0x1BA6, 65924 }, + { 0x1BA9, 65928 }, + { 0x1B83, 65932 }, + { 0x1B88, 65935 }, + { 0x1B84, 65938 }, + { 0x1B87, 65941 }, + { 0x1B85, 65944 }, + { 0x1B86, 65947 }, + { 0x1B98, 65950 }, + { 0x1B8E, 65953 }, + { 0x1B93, 65956 }, + { 0x1B89, 65959 }, + { 0x1B96, 65962 }, + { 0x1B8C, 65965 }, + { 0x1BA0, 65968 }, + { 0x1B8F, 65971 }, + { 0x1B8A, 65974 }, + { 0x1B9C, 65977 }, + { 0x1B99, 65980 }, + { 0x1B94, 65983 }, + { 0x1B95, 65986 }, + { 0x1B8B, 65989 }, + { 0x1B9B, 65992 }, + { 0x1B9E, 65995 }, + { 0x1B92, 65998 }, + { 0x1B97, 66001 }, + { 0x1B9D, 66004 }, + { 0x1B9F, 66007 }, + { 0x1B9A, 66010 }, + { 0x1B90, 66013 }, + { 0x1BAE, 66016 }, + { 0x1B8D, 66019 }, + { 0x1B91, 66022 }, + { 0x1BAF, 66025 }, + { 0x1BA3, 66028 }, + { 0x1BA2, 66032 }, + { 0x1BA1, 66036 }, + { 0x2121, 66040 }, + { 0x2706, 66042 }, + { 0x2315, 66045 }, + { 0x9353, 66047 }, + { 0x931D, 66052 }, + { 0x932D, 66055 }, + { 0x9323, 66060 }, + { 0x931C, 66064 }, + { 0x9307, 66067 }, + { 0x9343, 66071 }, + { 0x932F, 66074 }, + { 0x9346, 66079 }, + { 0x9308, 66082 }, + { 0x9314, 66085 }, + { 0x9331, 66088 }, + { 0x933B, 66091 }, + { 0x9344, 66094 }, + { 0x930C, 66097 }, + { 0x9306, 66100 }, + { 0x9321, 66103 }, + { 0x933D, 66106 }, + { 0x9320, 66110 }, + { 0x9336, 66113 }, + { 0x9325, 66116 }, + { 0x932A, 66119 }, + { 0x9335, 66122 }, + { 0x9319, 66125 }, + { 0x9309, 66128 }, + { 0x934F, 66131 }, + { 0x9315, 66134 }, + { 0x9349, 66137 }, + { 0x9350, 66140 }, + { 0x9316, 66143 }, + { 0x930A, 66147 }, + { 0x9327, 66151 }, + { 0x9340, 66154 }, + { 0x9339, 66157 }, + { 0x9324, 66160 }, + { 0x9334, 66163 }, + { 0x931A, 66166 }, + { 0x9345, 66169 }, + { 0x9317, 66172 }, + { 0x933A, 66175 }, + { 0x932B, 66178 }, + { 0x934D, 66181 }, + { 0x9312, 66184 }, + { 0x932E, 66187 }, + { 0x934C, 66190 }, + { 0x9329, 66193 }, + { 0x9337, 66196 }, + { 0x930E, 66201 }, + { 0x9326, 66205 }, + { 0x9338, 66208 }, + { 0x9348, 66211 }, + { 0x9347, 66214 }, + { 0x931F, 66217 }, + { 0x9318, 66220 }, + { 0x9356, 66223 }, + { 0x9328, 66226 }, + { 0x933F, 66229 }, + { 0x9332, 66233 }, + { 0x9355, 66236 }, + { 0x932C, 66239 }, + { 0x934B, 66242 }, + { 0x934E, 66245 }, + { 0x9352, 66248 }, + { 0x931E, 66251 }, + { 0x9310, 66254 }, + { 0x9330, 66257 }, + { 0x934A, 66260 }, + { 0x930D, 66263 }, + { 0x931B, 66266 }, + { 0x9351, 66269 }, + { 0x930B, 66272 }, + { 0x9333, 66275 }, + { 0x933E, 66278 }, + { 0x9313, 66281 }, + { 0x9341, 66284 }, + { 0x9322, 66287 }, + { 0x9354, 66290 }, + { 0x933C, 66293 }, + { 0x9311, 66296 }, + { 0x930F, 66299 }, + { 0x9342, 66304 }, + { 0x2234, 66307 }, + { 0x2672, 66308 }, + { 0x26AF, 66311 }, + { 0x6E00, 66314 }, + { 0x6E01, 66316 }, + { 0x6E02, 66318 }, + { 0x6E03, 66320 }, + { 0x6E04, 66322 }, + { 0x6E05, 66324 }, + { 0x6E06, 66326 }, + { 0x6E07, 66328 }, + { 0x6E08, 66330 }, + { 0x6E09, 66332 }, + { 0x6E0A, 66334 }, + { 0x6E0B, 66336 }, + { 0x6E0C, 66338 }, + { 0x6E0D, 66340 }, + { 0x6E0E, 66342 }, + { 0x6E0F, 66344 }, + { 0xC100, 66346 }, + { 0xC101, 66348 }, + { 0xC102, 66350 }, + { 0xC103, 66352 }, + { 0xC104, 66354 }, + { 0xC105, 66356 }, + { 0xC106, 66358 }, + { 0xC107, 66360 }, + { 0xC108, 66362 }, + { 0xC109, 66364 }, + { 0xC10A, 66366 }, + { 0xC10B, 66368 }, + { 0xC10C, 66370 }, + { 0xC10D, 66372 }, + { 0xC10E, 66374 }, + { 0xC10F, 66376 }, + { 0xC110, 66378 }, + { 0xC111, 66380 }, + { 0xC112, 66382 }, + { 0xC113, 66384 }, + { 0xC114, 66386 }, + { 0xC115, 66388 }, + { 0xC116, 66390 }, + { 0xC117, 66392 }, + { 0xC118, 66394 }, + { 0xC119, 66396 }, + { 0xC11A, 66398 }, + { 0xC11B, 66400 }, + { 0xC11C, 66402 }, + { 0xC11D, 66404 }, + { 0xC11E, 66406 }, + { 0xC11F, 66408 }, + { 0xC120, 66410 }, + { 0xC121, 66412 }, + { 0xC122, 66414 }, + { 0xC123, 66416 }, + { 0xC124, 66418 }, + { 0xC125, 66420 }, + { 0xC126, 66422 }, + { 0xC127, 66424 }, + { 0xC128, 66426 }, + { 0xC129, 66428 }, + { 0xC12A, 66430 }, + { 0xC12B, 66432 }, + { 0xC12C, 66434 }, + { 0xC12D, 66436 }, + { 0xC12E, 66438 }, + { 0xC12F, 66440 }, + { 0xC130, 66442 }, + { 0xC131, 66444 }, + { 0xC132, 66446 }, + { 0xC133, 66448 }, + { 0xC134, 66450 }, + { 0xC135, 66452 }, + { 0xC136, 66454 }, + { 0xC137, 66456 }, + { 0xC138, 66458 }, + { 0xC139, 66460 }, + { 0xC13A, 66462 }, + { 0xC13B, 66464 }, + { 0xC13C, 66466 }, + { 0xC13D, 66468 }, + { 0xC13E, 66470 }, + { 0xC13F, 66472 }, + { 0xC140, 66474 }, + { 0xC141, 66476 }, + { 0xC142, 66478 }, + { 0xC143, 66480 }, + { 0xC144, 66482 }, + { 0xC145, 66484 }, + { 0xC146, 66486 }, + { 0xC147, 66488 }, + { 0xC148, 66490 }, + { 0xC149, 66492 }, + { 0xC14A, 66494 }, + { 0xC14B, 66496 }, + { 0xC14C, 66498 }, + { 0xC14D, 66500 }, + { 0xC14E, 66502 }, + { 0xC14F, 66504 }, + { 0xC150, 66506 }, + { 0xC151, 66508 }, + { 0xC152, 66510 }, + { 0xC153, 66512 }, + { 0xC154, 66514 }, + { 0xC155, 66516 }, + { 0xC156, 66518 }, + { 0xC157, 66520 }, + { 0xC158, 66522 }, + { 0xC159, 66524 }, + { 0xC15A, 66526 }, + { 0xC15B, 66528 }, + { 0xC15C, 66530 }, + { 0xC15D, 66532 }, + { 0xC15E, 66534 }, + { 0xC15F, 66536 }, + { 0xC160, 66538 }, + { 0xC161, 66540 }, + { 0xC162, 66542 }, + { 0xC163, 66544 }, + { 0xC164, 66546 }, + { 0xC165, 66548 }, + { 0xC166, 66550 }, + { 0xC167, 66552 }, + { 0xC168, 66554 }, + { 0xC169, 66556 }, + { 0xC16A, 66558 }, + { 0xC16B, 66560 }, + { 0xC16C, 66562 }, + { 0xC16D, 66564 }, + { 0xC16E, 66566 }, + { 0xC16F, 66568 }, + { 0xC170, 66570 }, + { 0xC171, 66572 }, + { 0xC172, 66574 }, + { 0xC173, 66576 }, + { 0xC174, 66578 }, + { 0xC175, 66580 }, + { 0xC176, 66582 }, + { 0xC177, 66584 }, + { 0xC178, 66586 }, + { 0xC179, 66588 }, + { 0xC17A, 66590 }, + { 0xC17B, 66592 }, + { 0xC17C, 66594 }, + { 0xC17D, 66596 }, + { 0xC17E, 66598 }, + { 0xC17F, 66600 }, + { 0xC180, 66602 }, + { 0xC181, 66604 }, + { 0xC182, 66606 }, + { 0xC183, 66608 }, + { 0xC184, 66610 }, + { 0xC185, 66612 }, + { 0xC186, 66614 }, + { 0xC187, 66616 }, + { 0xC188, 66618 }, + { 0xC189, 66620 }, + { 0xC18A, 66622 }, + { 0xC18B, 66624 }, + { 0xC18C, 66626 }, + { 0xC18D, 66628 }, + { 0xC18E, 66630 }, + { 0xC18F, 66632 }, + { 0xC190, 66634 }, + { 0xC191, 66636 }, + { 0xC192, 66638 }, + { 0xC193, 66640 }, + { 0xC194, 66642 }, + { 0xC195, 66644 }, + { 0xC196, 66646 }, + { 0xC197, 66648 }, + { 0xC198, 66650 }, + { 0xC199, 66652 }, + { 0xC19A, 66654 }, + { 0xC19B, 66656 }, + { 0xC19C, 66658 }, + { 0xC19D, 66660 }, + { 0xC19E, 66662 }, + { 0xC19F, 66664 }, + { 0xC1A0, 66666 }, + { 0xC1A1, 66668 }, + { 0xC1A2, 66670 }, + { 0xC1A3, 66672 }, + { 0xC1A4, 66674 }, + { 0xC1A5, 66676 }, + { 0xC1A6, 66678 }, + { 0xC1A7, 66680 }, + { 0xC1A8, 66682 }, + { 0xC1A9, 66684 }, + { 0xC1AA, 66686 }, + { 0xC1AB, 66688 }, + { 0xC1AC, 66690 }, + { 0xC1AD, 66692 }, + { 0xC1AE, 66694 }, + { 0xC1AF, 66696 }, + { 0xC1B0, 66698 }, + { 0xC1B1, 66700 }, + { 0xC1B2, 66702 }, + { 0xC1B3, 66704 }, + { 0xC1B4, 66706 }, + { 0xC1B5, 66708 }, + { 0xC1B6, 66710 }, + { 0xC1B7, 66712 }, + { 0xC1B8, 66714 }, + { 0xC1B9, 66716 }, + { 0xC1BA, 66718 }, + { 0xC1BB, 66720 }, + { 0xC1BC, 66722 }, + { 0xC1BD, 66724 }, + { 0xC1BE, 66726 }, + { 0xC1BF, 66728 }, + { 0xC1C0, 66730 }, + { 0xC1C1, 66732 }, + { 0xC1C2, 66734 }, + { 0xC1C3, 66736 }, + { 0xC1C4, 66738 }, + { 0xC1C5, 66740 }, + { 0xC1C6, 66742 }, + { 0xC1C7, 66744 }, + { 0xC1C8, 66746 }, + { 0xC1C9, 66748 }, + { 0xC1CA, 66750 }, + { 0xC1CB, 66752 }, + { 0xC1CC, 66754 }, + { 0xC1CD, 66756 }, + { 0xC1CE, 66758 }, + { 0xC1CF, 66760 }, + { 0xC1D0, 66762 }, + { 0xC1D1, 66764 }, + { 0xC1D2, 66766 }, + { 0xC1D3, 66768 }, + { 0xC1D4, 66770 }, + { 0xC1D5, 66772 }, + { 0xC1D6, 66774 }, + { 0xC1D7, 66776 }, + { 0xC1D8, 66778 }, + { 0xC1D9, 66780 }, + { 0xC1DA, 66782 }, + { 0xC1DB, 66784 }, + { 0xC1DC, 66786 }, + { 0xC1DD, 66788 }, + { 0xC1DE, 66790 }, + { 0xC1DF, 66792 }, + { 0xC1E0, 66794 }, + { 0xC1E1, 66796 }, + { 0xC1E2, 66798 }, + { 0xC1E3, 66800 }, + { 0xC1E4, 66802 }, + { 0xC1E5, 66804 }, + { 0xC1E6, 66806 }, + { 0xC1E7, 66808 }, + { 0xC1E8, 66810 }, + { 0xC1E9, 66812 }, + { 0xC1EA, 66814 }, + { 0xC1EB, 66816 }, + { 0xC1EC, 66818 }, + { 0xC1ED, 66820 }, + { 0xC1EE, 66822 }, + { 0xC1EF, 66824 }, + { 0x0027, 66826 }, + { 0x2250, 66827 }, + { 0x6E4E, 66830 }, + { 0x6E4A, 66833 }, + { 0x005E, 66835 }, + { 0x0040, 66837 }, + { 0x2052, 66839 }, + { 0x2201, 66842 }, + { 0x2381, 66843 }, + { 0x260B, 66846 }, + { 0x0950, 66848 }, + { 0x0971, 66850 }, + { 0x093C, 66855 }, + { 0x094D, 66858 }, + { 0x0903, 66861 }, + { 0x0902, 66864 }, + { 0x093D, 66867 }, + { 0x0901, 66870 }, + { 0x0954, 66873 }, + { 0x0964, 66876 }, + { 0x0967, 66878 }, + { 0x096C, 66881 }, + { 0x0968, 66884 }, + { 0x096B, 66887 }, + { 0x096A, 66890 }, + { 0x096F, 66893 }, + { 0x0966, 66896 }, + { 0x096E, 66899 }, + { 0x096D, 66902 }, + { 0x0969, 66905 }, + { 0x0953, 66908 }, + { 0x0947, 66911 }, + { 0x093F, 66915 }, + { 0x094B, 66919 }, + { 0x0941, 66923 }, + { 0x093E, 66927 }, + { 0x0948, 66931 }, + { 0x094C, 66935 }, + { 0x0940, 66939 }, + { 0x0942, 66943 }, + { 0x0946, 66947 }, + { 0x094A, 66952 }, + { 0x0945, 66957 }, + { 0x0949, 66962 }, + { 0x0962, 66967 }, + { 0x0943, 66972 }, + { 0x0963, 66977 }, + { 0x0944, 66982 }, + { 0x0965, 66987 }, + { 0x0905, 66990 }, + { 0x090F, 66993 }, + { 0x0907, 66996 }, + { 0x0913, 66999 }, + { 0x0909, 67002 }, + { 0x0906, 67005 }, + { 0x0910, 67008 }, + { 0x0914, 67011 }, + { 0x092C, 67014 }, + { 0x091A, 67017 }, + { 0x0926, 67020 }, + { 0x095E, 67023 }, + { 0x0917, 67026 }, + { 0x0939, 67029 }, + { 0x0908, 67032 }, + { 0x091C, 67035 }, + { 0x0915, 67038 }, + { 0x0932, 67041 }, + { 0x092E, 67044 }, + { 0x0928, 67047 }, + { 0x092A, 67050 }, + { 0x0958, 67053 }, + { 0x0930, 67056 }, + { 0x0938, 67059 }, + { 0x0924, 67062 }, + { 0x090A, 67065 }, + { 0x0935, 67068 }, + { 0x092F, 67071 }, + { 0x095B, 67074 }, + { 0x097F, 67077 }, + { 0x092D, 67080 }, + { 0x091B, 67083 }, + { 0x0921, 67086 }, + { 0x0927, 67089 }, + { 0x097B, 67092 }, + { 0x0918, 67095 }, + { 0x091D, 67098 }, + { 0x097C, 67101 }, + { 0x0916, 67104 }, + { 0x0933, 67107 }, + { 0x0919, 67110 }, + { 0x0923, 67113 }, + { 0x091E, 67116 }, + { 0x092B, 67119 }, + { 0x095D, 67122 }, + { 0x0931, 67125 }, + { 0x0936, 67128 }, + { 0x0937, 67131 }, + { 0x0925, 67134 }, + { 0x091F, 67137 }, + { 0x095F, 67140 }, + { 0x097E, 67143 }, + { 0x0922, 67146 }, + { 0x095A, 67149 }, + { 0x0959, 67152 }, + { 0x0934, 67155 }, + { 0x0929, 67158 }, + { 0x0920, 67161 }, + { 0x095C, 67164 }, + { 0x0904, 67167 }, + { 0x090E, 67171 }, + { 0x0912, 67175 }, + { 0x0972, 67179 }, + { 0x090D, 67183 }, + { 0x0911, 67187 }, + { 0x097D, 67191 }, + { 0x090C, 67195 }, + { 0x090B, 67199 }, + { 0x0961, 67203 }, + { 0x0960, 67207 }, + { 0x0951, 67211 }, + { 0x0952, 67215 }, + { 0x0970, 67219 }, + { 0x224F, 67222 }, + { 0x23E7, 67224 }, + { 0x224D, 67226 }, + { 0x2A78, 67228 }, + { 0x2C3B, 67233 }, + { 0x2C4A, 67237 }, + { 0x2C56, 67241 }, + { 0x2C53, 67245 }, + { 0x2C30, 67249 }, + { 0x2C58, 67253 }, + { 0x2C41, 67258 }, + { 0x2C49, 67262 }, + { 0x2C4E, 67266 }, + { 0x2C4C, 67270 }, + { 0x2C46, 67274 }, + { 0x2C31, 67278 }, + { 0x2C5A, 67282 }, + { 0x2C48, 67286 }, + { 0x2C39, 67290 }, + { 0x2C3D, 67294 }, + { 0x2C4B, 67298 }, + { 0x2C32, 67302 }, + { 0x2C51, 67306 }, + { 0x2C50, 67310 }, + { 0x2C4F, 67314 }, + { 0x2C34, 67318 }, + { 0x2C37, 67322 }, + { 0x2C47, 67326 }, + { 0x2C40, 67330 }, + { 0x2C43, 67334 }, + { 0x2C44, 67338 }, + { 0x2C54, 67342 }, + { 0x2C55, 67347 }, + { 0x2C35, 67354 }, + { 0x2C4D, 67358 }, + { 0x2C3C, 67362 }, + { 0x2C42, 67366 }, + { 0x2C45, 67370 }, + { 0x2C38, 67374 }, + { 0x2C33, 67378 }, + { 0x2C3A, 67382 }, + { 0x2C59, 67387 }, + { 0x2C57, 67393 }, + { 0x2C5B, 67399 }, + { 0x2C3E, 67403 }, + { 0x2C3F, 67407 }, + { 0x2C5C, 67411 }, + { 0x2C52, 67415 }, + { 0x2C36, 67420 }, + { 0x2C5E, 67424 }, + { 0x2C5D, 67429 }, + { 0x2C0B, 67434 }, + { 0x2C1A, 67438 }, + { 0x2C26, 67442 }, + { 0x2C23, 67446 }, + { 0x2C00, 67450 }, + { 0x2C28, 67454 }, + { 0x2C11, 67459 }, + { 0x2C19, 67463 }, + { 0x2C1E, 67467 }, + { 0x2C1C, 67471 }, + { 0x2C16, 67475 }, + { 0x2C01, 67479 }, + { 0x2C2A, 67483 }, + { 0x2C18, 67487 }, + { 0x2C09, 67491 }, + { 0x2C0D, 67495 }, + { 0x2C1B, 67499 }, + { 0x2C02, 67503 }, + { 0x2C21, 67507 }, + { 0x2C20, 67511 }, + { 0x2C1F, 67515 }, + { 0x2C04, 67519 }, + { 0x2C07, 67523 }, + { 0x2C17, 67527 }, + { 0x2C10, 67531 }, + { 0x2C13, 67535 }, + { 0x2C14, 67539 }, + { 0x2C24, 67543 }, + { 0x2C25, 67548 }, + { 0x2C05, 67555 }, + { 0x2C1D, 67559 }, + { 0x2C0C, 67563 }, + { 0x2C12, 67567 }, + { 0x2C15, 67571 }, + { 0x2C08, 67575 }, + { 0x2C03, 67579 }, + { 0x2C0A, 67583 }, + { 0x2C29, 67588 }, + { 0x2C27, 67594 }, + { 0x2C2B, 67600 }, + { 0x2C0E, 67604 }, + { 0x2C0F, 67608 }, + { 0x2C2C, 67612 }, + { 0x2C22, 67616 }, + { 0x2C06, 67621 }, + { 0x2C2E, 67625 }, + { 0x2C2D, 67630 }, + { 0x223B, 67635 }, + { 0x2015, 67636 }, + { 0x23AF, 67638 }, + { 0x26A9, 67641 }, + { 0x23BA, 67646 }, + { 0x23BB, 67649 }, + { 0x23BC, 67652 }, + { 0x23BD, 67655 }, + { 0x2B23, 67658 }, + { 0x2026, 67661 }, + { 0x238E, 67663 }, + { 0x29DC, 67665 }, + { 0x7A38, 67667 }, + { 0x7A3A, 67671 }, + { 0x7A39, 67675 }, + { 0x7A0D, 67678 }, + { 0x7A0F, 67683 }, + { 0x7A0E, 67686 }, + { 0x7A40, 67689 }, + { 0x7A41, 67692 }, + { 0x7A43, 67695 }, + { 0x7A42, 67698 }, + { 0x7A05, 67701 }, + { 0x7A01, 67705 }, + { 0x7A06, 67709 }, + { 0x7A02, 67713 }, + { 0x7A03, 67717 }, + { 0x7A0C, 67722 }, + { 0x7A00, 67726 }, + { 0x7A26, 67729 }, + { 0x7A15, 67732 }, + { 0x7A21, 67735 }, + { 0x7A12, 67738 }, + { 0x7A31, 67741 }, + { 0x7A17, 67744 }, + { 0x7A10, 67747 }, + { 0x7A2B, 67750 }, + { 0x7A28, 67753 }, + { 0x7A23, 67756 }, + { 0x7A24, 67759 }, + { 0x7A2A, 67762 }, + { 0x7A2F, 67765 }, + { 0x7A1F, 67768 }, + { 0x7A2C, 67771 }, + { 0x7A29, 67774 }, + { 0x7A30, 67777 }, + { 0x7A27, 67780 }, + { 0x7A16, 67783 }, + { 0x7A1C, 67786 }, + { 0x7A22, 67789 }, + { 0x7A13, 67792 }, + { 0x7A11, 67795 }, + { 0x7A32, 67798 }, + { 0x7A1E, 67801 }, + { 0x7A19, 67804 }, + { 0x7A25, 67807 }, + { 0x7A2D, 67810 }, + { 0x7A2E, 67813 }, + { 0x7A20, 67816 }, + { 0x7A1A, 67819 }, + { 0x7A1D, 67822 }, + { 0x7A1B, 67825 }, + { 0x7A33, 67828 }, + { 0x7A46, 67831 }, + { 0x7A47, 67835 }, + { 0x7A44, 67839 }, + { 0x7A45, 67842 }, + { 0x7A3F, 67845 }, + { 0x7A50, 67847 }, + { 0x7A56, 67850 }, + { 0x7A58, 67853 }, + { 0x7A55, 67856 }, + { 0x7A51, 67859 }, + { 0x7A52, 67863 }, + { 0x7A57, 67866 }, + { 0x7A53, 67870 }, + { 0x7A54, 67874 }, + { 0x238D, 67877 }, + { 0x2ADD, 67879 }, + { 0x260D, 67880 }, + { 0x1736, 67881 }, + { 0x1735, 67884 }, + { 0x791F, 67887 }, + { 0x7904, 67890 }, + { 0x7910, 67893 }, + { 0x790F, 67896 }, + { 0x7900, 67899 }, + { 0x7901, 67902 }, + { 0x7907, 67905 }, + { 0x790A, 67908 }, + { 0x790C, 67911 }, + { 0x790D, 67914 }, + { 0x7912, 67917 }, + { 0x7915, 67920 }, + { 0x7908, 67923 }, + { 0x7905, 67926 }, + { 0x7909, 67929 }, + { 0x7906, 67932 }, + { 0x7903, 67935 }, + { 0x7902, 67938 }, + { 0x790B, 67941 }, + { 0x7913, 67944 }, + { 0x7911, 67947 }, + { 0x790E, 67950 }, + { 0x7914, 67953 }, + { 0x7916, 67956 }, + { 0x7919, 67959 }, + { 0x7917, 67963 }, + { 0x7918, 67966 }, + { 0x00B1, 67969 }, + { 0x2305, 67971 }, + { 0x2237, 67972 }, + { 0x2A16, 67973 }, + { 0x225F, 67976 }, + { 0x00AE, 67979 }, + { 0x2938, 67981 }, + { 0x21A0, 67985 }, + { 0x219D, 67989 }, + { 0x2192, 67992 }, + { 0x21E5, 67994 }, + { 0x291E, 67998 }, + { 0x21A6, 68003 }, + { 0x2920, 68007 }, + { 0x21C4, 68014 }, + { 0x2B0F, 68019 }, + { 0x2B0E, 68024 }, + { 0x21AA, 68029 }, + { 0x21AC, 68033 }, + { 0x2945, 68037 }, + { 0x21A3, 68042 }, + { 0x2915, 68046 }, + { 0x2914, 68054 }, + { 0x21B4, 68061 }, + { 0x2911, 68066 }, + { 0x21FB, 68071 }, + { 0x219B, 68077 }, + { 0x21F8, 68081 }, + { 0x2942, 68086 }, + { 0x2974, 68092 }, + { 0x2975, 68097 }, + { 0x2B4C, 68103 }, + { 0x2B48, 68109 }, + { 0x2947, 68116 }, + { 0x2B44, 68120 }, + { 0x2B43, 68124 }, + { 0x21E8, 68128 }, + { 0x21F0, 68131 }, + { 0x21E2, 68136 }, + { 0x290D, 68139 }, + { 0x21D2, 68143 }, + { 0x2907, 68146 }, + { 0x21CF, 68151 }, + { 0x2903, 68156 }, + { 0x291C, 68162 }, + { 0x21C9, 68165 }, + { 0x290F, 68168 }, + { 0x21DB, 68172 }, + { 0x21CC, 68175 }, + { 0x2953, 68180 }, + { 0x295B, 68187 }, + { 0x296C, 68194 }, + { 0x2968, 68202 }, + { 0x2964, 68213 }, + { 0x2957, 68224 }, + { 0x295F, 68231 }, + { 0x2969, 68238 }, + { 0x296D, 68249 }, + { 0x21C0, 68257 }, + { 0x21C1, 68262 }, + { 0x21DD, 68267 }, + { 0x2B46, 68270 }, + { 0x291A, 68273 }, + { 0x2905, 68275 }, + { 0x2916, 68280 }, + { 0x2918, 68285 }, + { 0x2917, 68294 }, + { 0x2901, 68302 }, + { 0x2900, 68309 }, + { 0x2910, 68315 }, + { 0x21FE, 68320 }, + { 0x58C4, 68323 }, + { 0x5881, 68326 }, + { 0x5880, 68329 }, + { 0x58CE, 68332 }, + { 0x58D1, 68334 }, + { 0x58D6, 68337 }, + { 0x58D2, 68340 }, + { 0x58D5, 68343 }, + { 0x58D4, 68346 }, + { 0x58D9, 68349 }, + { 0x58D0, 68352 }, + { 0x58D8, 68355 }, + { 0x58D7, 68358 }, + { 0x58D3, 68361 }, + { 0x58BE, 68364 }, + { 0x58B6, 68368 }, + { 0x58C1, 68372 }, + { 0x58B8, 68376 }, + { 0x58B5, 68380 }, + { 0x58C0, 68384 }, + { 0x58C3, 68388 }, + { 0x58BF, 68392 }, + { 0x58B7, 68396 }, + { 0x58C2, 68400 }, + { 0x58B9, 68404 }, + { 0x58BC, 68408 }, + { 0x58BA, 68413 }, + { 0x58BD, 68418 }, + { 0x58BB, 68423 }, + { 0x58CF, 68428 }, + { 0x5882, 68431 }, + { 0x588C, 68434 }, + { 0x5884, 68437 }, + { 0x588F, 68440 }, + { 0x5886, 68443 }, + { 0x5883, 68446 }, + { 0x588E, 68449 }, + { 0x5891, 68452 }, + { 0x58A8, 68455 }, + { 0x5897, 68458 }, + { 0x58A3, 68461 }, + { 0x588D, 68464 }, + { 0x5894, 68467 }, + { 0x58B2, 68470 }, + { 0x5885, 68473 }, + { 0x5899, 68476 }, + { 0x5892, 68479 }, + { 0x58AD, 68482 }, + { 0x58AA, 68485 }, + { 0x58A5, 68488 }, + { 0x5890, 68491 }, + { 0x58A6, 68494 }, + { 0x58AC, 68497 }, + { 0x58B1, 68500 }, + { 0x58A1, 68503 }, + { 0x5887, 68506 }, + { 0x58AE, 68509 }, + { 0x58AB, 68512 }, + { 0x58A9, 68515 }, + { 0x5898, 68518 }, + { 0x589E, 68521 }, + { 0x58A4, 68524 }, + { 0x5895, 68527 }, + { 0x589A, 68530 }, + { 0x5893, 68533 }, + { 0x58B3, 68536 }, + { 0x5896, 68539 }, + { 0x58A0, 68542 }, + { 0x589B, 68545 }, + { 0x58A7, 68548 }, + { 0x58AF, 68551 }, + { 0x58B0, 68554 }, + { 0x58A2, 68557 }, + { 0x589C, 68560 }, + { 0x589F, 68563 }, + { 0x589D, 68566 }, + { 0x588A, 68569 }, + { 0x5888, 68573 }, + { 0x588B, 68577 }, + { 0x5889, 68581 }, + { 0x58B4, 68585 }, + { 0x2A32, 68589 }, + { 0x237D, 68594 }, + { 0x2006, 68597 }, + { 0x2023, 68599 }, + { 0x267F, 68601 }, + { 0x2387, 68603 }, + { 0x27AB, 68606 }, + { 0x2A10, 68611 }, + { 0x2384, 68613 }, + { 0x260C, 68615 }, + { 0x2258, 68616 }, + { 0x2334, 68618 }, + { 0x2335, 68619 }, + { 0x2A99, 68620 }, + { 0x2A9A, 68625 }, + { 0x2A9B, 68630 }, + { 0x2A9C, 68636 }, + { 0x2AF9, 68642 }, + { 0x2AFA, 68648 }, + { 0x225A, 68654 }, + { 0x0021, 68656 }, + { 0x2049, 68658 }, + { 0x2005, 68661 }, + { 0x2027, 68663 }, + { 0x3002, 68665 }, + { 0x303F, 68668 }, + { 0x3001, 68672 }, + { 0x302A, 68674 }, + { 0x3000, 68678 }, + { 0x3007, 68680 }, + { 0x302B, 68683 }, + { 0x3006, 68687 }, + { 0x302D, 68690 }, + { 0x302C, 68694 }, + { 0x3005, 68698 }, + { 0x3037, 68701 }, + { 0x33E0, 68707 }, + { 0x33E5, 68713 }, + { 0x33E9, 68719 }, + { 0x33E1, 68725 }, + { 0x33E4, 68731 }, + { 0x33E3, 68737 }, + { 0x33E8, 68743 }, + { 0x33E7, 68749 }, + { 0x33E6, 68755 }, + { 0x33E2, 68761 }, + { 0x33EA, 68767 }, + { 0x33FD, 68773 }, + { 0x33EB, 68779 }, + { 0x33F3, 68785 }, + { 0x33EE, 68791 }, + { 0x33EF, 68797 }, + { 0x33F1, 68803 }, + { 0x33ED, 68809 }, + { 0x33F2, 68815 }, + { 0x33EC, 68821 }, + { 0x33F0, 68827 }, + { 0x33FE, 68833 }, + { 0x33F4, 68839 }, + { 0x33F9, 68845 }, + { 0x33F5, 68851 }, + { 0x33F8, 68857 }, + { 0x33F7, 68863 }, + { 0x33FC, 68869 }, + { 0x33FB, 68875 }, + { 0x33FA, 68881 }, + { 0x33F6, 68887 }, + { 0x32C4, 68893 }, + { 0x3359, 68898 }, + { 0x335E, 68904 }, + { 0x3362, 68910 }, + { 0x335A, 68916 }, + { 0x335D, 68922 }, + { 0x335C, 68928 }, + { 0x3361, 68934 }, + { 0x3358, 68940 }, + { 0x3360, 68946 }, + { 0x335F, 68952 }, + { 0x335B, 68958 }, + { 0x3363, 68964 }, + { 0x3364, 68970 }, + { 0x336C, 68976 }, + { 0x3367, 68982 }, + { 0x3368, 68988 }, + { 0x336A, 68994 }, + { 0x3366, 69000 }, + { 0x336B, 69006 }, + { 0x3365, 69012 }, + { 0x3369, 69018 }, + { 0x336D, 69024 }, + { 0x336E, 69030 }, + { 0x3370, 69036 }, + { 0x336F, 69042 }, + { 0x32C6, 69048 }, + { 0x32C5, 69053 }, + { 0x32C3, 69058 }, + { 0x32C2, 69063 }, + { 0x32C7, 69068 }, + { 0x32C0, 69073 }, + { 0x32C9, 69078 }, + { 0x32CB, 69083 }, + { 0x32C1, 69088 }, + { 0x32CA, 69093 }, + { 0x32C8, 69098 }, + { 0x303E, 69103 }, + { 0x319F, 69106 }, + { 0x3192, 69110 }, + { 0x3196, 69114 }, + { 0x3193, 69118 }, + { 0x3195, 69122 }, + { 0x319E, 69126 }, + { 0x3199, 69130 }, + { 0x319B, 69134 }, + { 0x3194, 69138 }, + { 0x3198, 69142 }, + { 0x319C, 69146 }, + { 0x319D, 69150 }, + { 0x3197, 69154 }, + { 0x319A, 69158 }, + { 0x3190, 69162 }, + { 0x3191, 69166 }, + { 0x2FF4, 69170 }, + { 0x2FF0, 69175 }, + { 0x2FF2, 69181 }, + { 0x2FF1, 69189 }, + { 0x2FF3, 69195 }, + { 0x2FFB, 69203 }, + { 0x2FF7, 69207 }, + { 0x2FF5, 69213 }, + { 0x2FF6, 69219 }, + { 0x2FFA, 69225 }, + { 0x2FF8, 69232 }, + { 0x2FF9, 69239 }, + { 0x2139, 69246 }, + { 0x22BA, 69248 }, + { 0x6FF9, 69249 }, + { 0x6FFA, 69252 }, + { 0x6FFB, 69255 }, + { 0x26A4, 69258 }, + { 0x203D, 69263 }, + { 0x27AA, 69264 }, + { 0x2E0F, 69268 }, + { 0x3250, 69269 }, + { 0x2306, 69271 }, + { 0x2008, 69272 }, + { 0x2622, 69274 }, + { 0x6FFD, 69276 }, + { 0x2650, 69278 }, + { 0x26BA, 69279 }, + { 0x00B9, 69280 }, + { 0x2076, 69282 }, + { 0x00B2, 69284 }, + { 0x2075, 69286 }, + { 0x2074, 69288 }, + { 0x207D, 69290 }, + { 0x2079, 69293 }, + { 0x207A, 69295 }, + { 0x2070, 69298 }, + { 0x2078, 69300 }, + { 0x2071, 69302 }, + { 0x207F, 69307 }, + { 0x207B, 69312 }, + { 0x207E, 69314 }, + { 0x2077, 69317 }, + { 0x00B3, 69319 }, + { 0x207C, 69321 }, + { 0x2ADB, 69324 }, + { 0x25ED, 69326 }, + { 0x25EE, 69332 }, + { 0x214D, 69338 }, + { 0x2A3F, 69339 }, + { 0x060A, 69342 }, + { 0x0609, 69347 }, + { 0x0606, 69351 }, + { 0x0661, 69354 }, + { 0x0666, 69357 }, + { 0x0662, 69360 }, + { 0x0665, 69363 }, + { 0x0664, 69366 }, + { 0x0669, 69369 }, + { 0x0660, 69372 }, + { 0x0668, 69375 }, + { 0x0667, 69378 }, + { 0x0663, 69381 }, + { 0x0607, 69384 }, + { 0x212D, 69387 }, + { 0x210C, 69390 }, + { 0x2111, 69393 }, + { 0x211C, 69396 }, + { 0x2128, 69399 }, + { 0x232D, 69402 }, + { 0x29DF, 69403 }, + { 0x29F3, 69405 }, + { 0x29EF, 69408 }, + { 0x29F1, 69411 }, + { 0x29F2, 69414 }, + { 0x29EE, 69417 }, + { 0x29F0, 69420 }, + { 0x269C, 69423 }, + { 0x27AC, 69424 }, + { 0x2265, 69429 }, + { 0x2A7E, 69433 }, + { 0x2A82, 69438 }, + { 0x2A84, 69446 }, + { 0x2A80, 69455 }, + { 0x2277, 69463 }, + { 0x2273, 69466 }, + { 0x2A86, 69470 }, + { 0x2A8A, 69473 }, + { 0x2A88, 69477 }, + { 0x2269, 69483 }, + { 0x22E7, 69488 }, + { 0x2267, 69493 }, + { 0x003E, 69497 }, + { 0x22D7, 69499 }, + { 0x2A7A, 69502 }, + { 0x2A7C, 69506 }, + { 0x2A8E, 69511 }, + { 0x2A90, 69516 }, + { 0x2A94, 69521 }, + { 0x2A92, 69530 }, + { 0x2978, 69536 }, + { 0x2A8C, 69540 }, + { 0x22DB, 69546 }, + { 0x2AA5, 69551 }, + { 0x2AA7, 69554 }, + { 0x2AA9, 69558 }, + { 0x2AA4, 69565 }, + { 0x002D, 69568 }, + { 0x2E12, 69569 }, + { 0x2229, 69570 }, + { 0x2A40, 69571 }, + { 0x2A44, 69574 }, + { 0x2A43, 69578 }, + { 0x2A49, 69581 }, + { 0x2A47, 69586 }, + { 0x2A4B, 69589 }, + { 0x96E1, 69595 }, + { 0x96DF, 69599 }, + { 0x96E0, 69603 }, + { 0x97CF, 69607 }, + { 0x97D4, 69611 }, + { 0x97D0, 69615 }, + { 0x97D3, 69619 }, + { 0x97D2, 69623 }, + { 0x97D7, 69627 }, + { 0x97CE, 69631 }, + { 0x97D6, 69635 }, + { 0x97D5, 69639 }, + { 0x97D1, 69643 }, + { 0x96DE, 69647 }, + { 0x96C1, 69651 }, + { 0x941A, 69654 }, + { 0x941B, 69658 }, + { 0x941C, 69662 }, + { 0x941D, 69666 }, + { 0x941E, 69670 }, + { 0x941F, 69674 }, + { 0x9420, 69678 }, + { 0x9421, 69682 }, + { 0x9422, 69686 }, + { 0x9423, 69690 }, + { 0x9424, 69694 }, + { 0x9425, 69698 }, + { 0x9426, 69702 }, + { 0x9427, 69706 }, + { 0x9428, 69710 }, + { 0x9429, 69714 }, + { 0x942A, 69718 }, + { 0x942B, 69722 }, + { 0x942C, 69726 }, + { 0x942D, 69730 }, + { 0x942E, 69734 }, + { 0x942F, 69738 }, + { 0x9430, 69742 }, + { 0x9431, 69746 }, + { 0x9432, 69750 }, + { 0x9433, 69754 }, + { 0x96CD, 69758 }, + { 0x96CE, 69762 }, + { 0x96D1, 69766 }, + { 0x96CF, 69770 }, + { 0x96D8, 69774 }, + { 0x96C8, 69778 }, + { 0x96D7, 69782 }, + { 0x96D9, 69786 }, + { 0x96D2, 69790 }, + { 0x96D5, 69794 }, + { 0x96C3, 69798 }, + { 0x96CA, 69802 }, + { 0x96C7, 69806 }, + { 0x96C2, 69810 }, + { 0x96C5, 69814 }, + { 0x96D3, 69818 }, + { 0x96C4, 69823 }, + { 0x96CB, 69827 }, + { 0x96CC, 69831 }, + { 0x96DA, 69835 }, + { 0x96D4, 69839 }, + { 0x96C9, 69843 }, + { 0x97CB, 69847 }, + { 0x96C6, 69851 }, + { 0x96D0, 69855 }, + { 0x96D6, 69859 }, + { 0x96DD, 69863 }, + { 0x9755, 69867 }, + { 0x9753, 69872 }, + { 0x9754, 69877 }, + { 0x9752, 69882 }, + { 0x9735, 69887 }, + { 0x9482, 69891 }, + { 0x9483, 69896 }, + { 0x9484, 69901 }, + { 0x9485, 69906 }, + { 0x9486, 69911 }, + { 0x9487, 69916 }, + { 0x9488, 69921 }, + { 0x9489, 69926 }, + { 0x948A, 69931 }, + { 0x948B, 69936 }, + { 0x948C, 69941 }, + { 0x948D, 69946 }, + { 0x948E, 69951 }, + { 0x948F, 69956 }, + { 0x9490, 69961 }, + { 0x9491, 69966 }, + { 0x9492, 69971 }, + { 0x9493, 69976 }, + { 0x9494, 69981 }, + { 0x9495, 69986 }, + { 0x9496, 69991 }, + { 0x9497, 69996 }, + { 0x9498, 70001 }, + { 0x9499, 70006 }, + { 0x949A, 70011 }, + { 0x949B, 70016 }, + { 0x9741, 70021 }, + { 0x9742, 70026 }, + { 0x9745, 70031 }, + { 0x9743, 70036 }, + { 0x974C, 70041 }, + { 0x973C, 70046 }, + { 0x974B, 70051 }, + { 0x974D, 70056 }, + { 0x9746, 70061 }, + { 0x9749, 70066 }, + { 0x9737, 70071 }, + { 0x973E, 70076 }, + { 0x973B, 70081 }, + { 0x9736, 70086 }, + { 0x9739, 70091 }, + { 0x9747, 70096 }, + { 0x9738, 70102 }, + { 0x973F, 70107 }, + { 0x9740, 70112 }, + { 0x974E, 70117 }, + { 0x9748, 70122 }, + { 0x973D, 70127 }, + { 0x973A, 70132 }, + { 0x9744, 70137 }, + { 0x974A, 70142 }, + { 0x9751, 70147 }, + { 0x9468, 70152 }, + { 0x9469, 70157 }, + { 0x946A, 70162 }, + { 0x946B, 70167 }, + { 0x946C, 70172 }, + { 0x946D, 70177 }, + { 0x946E, 70182 }, + { 0x946F, 70187 }, + { 0x9470, 70192 }, + { 0x9471, 70197 }, + { 0x9472, 70202 }, + { 0x9473, 70207 }, + { 0x9474, 70212 }, + { 0x9475, 70217 }, + { 0x9476, 70222 }, + { 0x9477, 70227 }, + { 0x9478, 70232 }, + { 0x9479, 70237 }, + { 0x947A, 70242 }, + { 0x947B, 70247 }, + { 0x947C, 70252 }, + { 0x947D, 70257 }, + { 0x947E, 70262 }, + { 0x947F, 70267 }, + { 0x9480, 70272 }, + { 0x9481, 70277 }, + { 0x9727, 70282 }, + { 0x9728, 70287 }, + { 0x972B, 70292 }, + { 0x9729, 70297 }, + { 0x9732, 70302 }, + { 0x9722, 70307 }, + { 0x9731, 70312 }, + { 0x9733, 70317 }, + { 0x972C, 70322 }, + { 0x972F, 70327 }, + { 0x971D, 70332 }, + { 0x9724, 70337 }, + { 0x9721, 70342 }, + { 0x971C, 70347 }, + { 0x971F, 70352 }, + { 0x971E, 70357 }, + { 0x9725, 70362 }, + { 0x9726, 70367 }, + { 0x9734, 70372 }, + { 0x972E, 70377 }, + { 0x9723, 70382 }, + { 0x972D, 70387 }, + { 0x9720, 70393 }, + { 0x972A, 70398 }, + { 0x9730, 70403 }, + { 0x9750, 70408 }, + { 0x974F, 70413 }, + { 0x94EA, 70418 }, + { 0x94EB, 70423 }, + { 0x94EC, 70428 }, + { 0x94ED, 70433 }, + { 0x94EE, 70438 }, + { 0x94EF, 70443 }, + { 0x94F0, 70448 }, + { 0x94F1, 70453 }, + { 0x94F2, 70458 }, + { 0x94F3, 70463 }, + { 0x94F4, 70468 }, + { 0x94F5, 70473 }, + { 0x94F6, 70478 }, + { 0x94F7, 70483 }, + { 0x94F8, 70488 }, + { 0x94F9, 70493 }, + { 0x94FA, 70498 }, + { 0x94FB, 70503 }, + { 0x94FC, 70508 }, + { 0x94FD, 70513 }, + { 0x94FE, 70518 }, + { 0x94FF, 70523 }, + { 0x9500, 70528 }, + { 0x9501, 70533 }, + { 0x9502, 70538 }, + { 0x9503, 70543 }, + { 0x94D0, 70548 }, + { 0x94D1, 70553 }, + { 0x94D2, 70558 }, + { 0x94D3, 70563 }, + { 0x94D4, 70568 }, + { 0x94D5, 70573 }, + { 0x94D6, 70578 }, + { 0x94D7, 70583 }, + { 0x94D8, 70588 }, + { 0x94D9, 70593 }, + { 0x94DA, 70598 }, + { 0x94DB, 70603 }, + { 0x94DC, 70608 }, + { 0x94DD, 70613 }, + { 0x94DE, 70618 }, + { 0x94DF, 70623 }, + { 0x94E0, 70628 }, + { 0x94E1, 70633 }, + { 0x94E2, 70638 }, + { 0x94E3, 70643 }, + { 0x94E4, 70648 }, + { 0x94E5, 70653 }, + { 0x94E6, 70658 }, + { 0x94E7, 70663 }, + { 0x94E8, 70668 }, + { 0x94E9, 70673 }, + { 0x9400, 70678 }, + { 0x9401, 70682 }, + { 0x9402, 70686 }, + { 0x9403, 70690 }, + { 0x9404, 70694 }, + { 0x9405, 70698 }, + { 0x9406, 70702 }, + { 0x9407, 70706 }, + { 0x9408, 70710 }, + { 0x9409, 70714 }, + { 0x940A, 70718 }, + { 0x940B, 70722 }, + { 0x940C, 70726 }, + { 0x940D, 70730 }, + { 0x940E, 70734 }, + { 0x940F, 70738 }, + { 0x9410, 70742 }, + { 0x9411, 70746 }, + { 0x9412, 70750 }, + { 0x9413, 70754 }, + { 0x9414, 70758 }, + { 0x9415, 70762 }, + { 0x9416, 70766 }, + { 0x9417, 70770 }, + { 0x9418, 70774 }, + { 0x9419, 70778 }, + { 0x96B3, 70782 }, + { 0x96B4, 70786 }, + { 0x96B7, 70790 }, + { 0x96B5, 70794 }, + { 0x96BE, 70798 }, + { 0x96AE, 70802 }, + { 0x96BD, 70806 }, + { 0x96BF, 70810 }, + { 0x96B8, 70814 }, + { 0x96BB, 70818 }, + { 0x96A9, 70822 }, + { 0x96B0, 70826 }, + { 0x96AD, 70830 }, + { 0x96A8, 70834 }, + { 0x96AB, 70838 }, + { 0x96AA, 70842 }, + { 0x96B1, 70846 }, + { 0x96B2, 70850 }, + { 0x96C0, 70854 }, + { 0x96BA, 70858 }, + { 0x96AF, 70862 }, + { 0x96B9, 70866 }, + { 0x97CA, 70871 }, + { 0x96AC, 70875 }, + { 0x96B6, 70879 }, + { 0x96BC, 70883 }, + { 0x96DC, 70887 }, + { 0x9586, 70891 }, + { 0x9587, 70896 }, + { 0x9588, 70901 }, + { 0x9589, 70906 }, + { 0x958A, 70911 }, + { 0x958B, 70916 }, + { 0x958C, 70921 }, + { 0x958D, 70926 }, + { 0x958E, 70931 }, + { 0x958F, 70936 }, + { 0x9590, 70941 }, + { 0x9591, 70946 }, + { 0x9592, 70951 }, + { 0x9593, 70956 }, + { 0x9594, 70961 }, + { 0x9595, 70966 }, + { 0x9596, 70971 }, + { 0x9597, 70976 }, + { 0x9598, 70981 }, + { 0x9599, 70986 }, + { 0x959A, 70991 }, + { 0x959B, 70996 }, + { 0x959C, 71001 }, + { 0x959D, 71006 }, + { 0x959E, 71011 }, + { 0x959F, 71016 }, + { 0x956C, 71021 }, + { 0x956D, 71026 }, + { 0x956E, 71031 }, + { 0x956F, 71036 }, + { 0x9570, 71041 }, + { 0x9571, 71046 }, + { 0x9572, 71051 }, + { 0x9573, 71056 }, + { 0x9574, 71061 }, + { 0x9575, 71066 }, + { 0x9576, 71071 }, + { 0x9577, 71076 }, + { 0x9578, 71081 }, + { 0x9579, 71086 }, + { 0x957A, 71091 }, + { 0x957B, 71096 }, + { 0x957C, 71101 }, + { 0x957D, 71106 }, + { 0x957E, 71111 }, + { 0x957F, 71116 }, + { 0x9580, 71121 }, + { 0x9581, 71126 }, + { 0x9582, 71131 }, + { 0x9583, 71136 }, + { 0x9584, 71141 }, + { 0x9585, 71146 }, + { 0x96DB, 71151 }, + { 0x27E8, 71155 }, + { 0x27E6, 71159 }, + { 0x27EC, 71164 }, + { 0x27EA, 71170 }, + { 0x27EE, 71175 }, + { 0x27E9, 71179 }, + { 0x27E7, 71183 }, + { 0x27ED, 71188 }, + { 0x27EB, 71194 }, + { 0x27EF, 71199 }, + { 0x971B, 71203 }, + { 0x9719, 71207 }, + { 0x971A, 71211 }, + { 0x9718, 71215 }, + { 0x96FB, 71219 }, + { 0x944E, 71222 }, + { 0x944F, 71226 }, + { 0x9450, 71230 }, + { 0x9451, 71234 }, + { 0x9452, 71238 }, + { 0x9453, 71242 }, + { 0x9454, 71246 }, + { 0x9456, 71250 }, + { 0x9457, 71254 }, + { 0x9458, 71258 }, + { 0x9459, 71262 }, + { 0x945A, 71266 }, + { 0x945B, 71270 }, + { 0x945C, 71274 }, + { 0x945D, 71278 }, + { 0x945E, 71282 }, + { 0x945F, 71286 }, + { 0x9460, 71290 }, + { 0x9461, 71294 }, + { 0x9462, 71298 }, + { 0x9463, 71302 }, + { 0x9464, 71306 }, + { 0x9465, 71310 }, + { 0x9466, 71314 }, + { 0x9467, 71318 }, + { 0x9707, 71322 }, + { 0x9708, 71326 }, + { 0x970B, 71330 }, + { 0x9709, 71334 }, + { 0x9712, 71338 }, + { 0x9702, 71342 }, + { 0x9711, 71346 }, + { 0x9713, 71350 }, + { 0x970C, 71354 }, + { 0x970F, 71358 }, + { 0x96FD, 71362 }, + { 0x9704, 71366 }, + { 0x9701, 71370 }, + { 0x96FC, 71374 }, + { 0x96FF, 71378 }, + { 0x970D, 71382 }, + { 0x96FE, 71387 }, + { 0x9705, 71391 }, + { 0x9706, 71395 }, + { 0x9714, 71399 }, + { 0x970E, 71403 }, + { 0x9703, 71407 }, + { 0x96A4, 71411 }, + { 0x96A5, 71416 }, + { 0x9700, 71421 }, + { 0x970A, 71425 }, + { 0x9710, 71429 }, + { 0x9717, 71433 }, + { 0x9434, 71437 }, + { 0x9435, 71441 }, + { 0x9436, 71445 }, + { 0x9437, 71449 }, + { 0x9438, 71453 }, + { 0x9439, 71457 }, + { 0x943A, 71461 }, + { 0x943B, 71465 }, + { 0x943C, 71469 }, + { 0x943D, 71473 }, + { 0x943E, 71477 }, + { 0x943F, 71481 }, + { 0x9440, 71485 }, + { 0x9441, 71489 }, + { 0x9442, 71493 }, + { 0x9443, 71497 }, + { 0x9444, 71501 }, + { 0x9445, 71505 }, + { 0x9446, 71509 }, + { 0x9447, 71513 }, + { 0x9448, 71517 }, + { 0x9449, 71521 }, + { 0x944A, 71525 }, + { 0x944B, 71529 }, + { 0x944C, 71533 }, + { 0x944D, 71537 }, + { 0x96ED, 71541 }, + { 0x96EE, 71545 }, + { 0x96F1, 71549 }, + { 0x96EF, 71553 }, + { 0x96F8, 71557 }, + { 0x96E8, 71561 }, + { 0x96F7, 71565 }, + { 0x96F9, 71569 }, + { 0x96F2, 71573 }, + { 0x96F5, 71577 }, + { 0x96E3, 71581 }, + { 0x96EA, 71585 }, + { 0x96E7, 71589 }, + { 0x96E2, 71593 }, + { 0x96E5, 71597 }, + { 0x96E4, 71601 }, + { 0x96EB, 71605 }, + { 0x96EC, 71609 }, + { 0x96FA, 71613 }, + { 0x96F4, 71617 }, + { 0x96E9, 71621 }, + { 0x96F3, 71625 }, + { 0x96E6, 71630 }, + { 0x96F0, 71634 }, + { 0x96F6, 71638 }, + { 0x9716, 71642 }, + { 0x9715, 71646 }, + { 0x94B6, 71650 }, + { 0x94B7, 71654 }, + { 0x94B8, 71658 }, + { 0x94B9, 71662 }, + { 0x94BB, 71666 }, + { 0x94BD, 71670 }, + { 0x94BE, 71674 }, + { 0x94BF, 71678 }, + { 0x94C0, 71682 }, + { 0x94C1, 71686 }, + { 0x94C2, 71690 }, + { 0x94C3, 71694 }, + { 0x94C5, 71698 }, + { 0x94C6, 71702 }, + { 0x94C7, 71706 }, + { 0x94C8, 71710 }, + { 0x94C9, 71714 }, + { 0x94CA, 71718 }, + { 0x94CB, 71722 }, + { 0x94CC, 71726 }, + { 0x94CD, 71730 }, + { 0x94CE, 71734 }, + { 0x94CF, 71738 }, + { 0x949C, 71742 }, + { 0x949E, 71746 }, + { 0x949F, 71750 }, + { 0x94A2, 71754 }, + { 0x94A5, 71758 }, + { 0x94A6, 71762 }, + { 0x94A9, 71766 }, + { 0x94AA, 71770 }, + { 0x94AB, 71774 }, + { 0x94AC, 71778 }, + { 0x94AE, 71782 }, + { 0x94AF, 71786 }, + { 0x94B0, 71790 }, + { 0x94B1, 71794 }, + { 0x94B2, 71798 }, + { 0x94B3, 71802 }, + { 0x94B4, 71806 }, + { 0x94B5, 71810 }, + { 0x951E, 71814 }, + { 0x951F, 71818 }, + { 0x9520, 71822 }, + { 0x9521, 71826 }, + { 0x9522, 71830 }, + { 0x9523, 71834 }, + { 0x9524, 71838 }, + { 0x9525, 71842 }, + { 0x9526, 71846 }, + { 0x9527, 71850 }, + { 0x9528, 71854 }, + { 0x9529, 71858 }, + { 0x952A, 71862 }, + { 0x952B, 71866 }, + { 0x952C, 71870 }, + { 0x952D, 71874 }, + { 0x952E, 71878 }, + { 0x952F, 71882 }, + { 0x9530, 71886 }, + { 0x9531, 71890 }, + { 0x9532, 71894 }, + { 0x9533, 71898 }, + { 0x9534, 71902 }, + { 0x9535, 71906 }, + { 0x9536, 71910 }, + { 0x9537, 71914 }, + { 0x9504, 71918 }, + { 0x9505, 71922 }, + { 0x9507, 71926 }, + { 0x9508, 71930 }, + { 0x9509, 71934 }, + { 0x950A, 71938 }, + { 0x950D, 71942 }, + { 0x950E, 71946 }, + { 0x950F, 71950 }, + { 0x9510, 71954 }, + { 0x9511, 71958 }, + { 0x9512, 71962 }, + { 0x9513, 71966 }, + { 0x9514, 71970 }, + { 0x9516, 71974 }, + { 0x9517, 71978 }, + { 0x9518, 71982 }, + { 0x9519, 71986 }, + { 0x951A, 71990 }, + { 0x951B, 71994 }, + { 0x951C, 71998 }, + { 0x97F7, 72002 }, + { 0x97FC, 72006 }, + { 0x97F8, 72010 }, + { 0x97FB, 72014 }, + { 0x97FA, 72018 }, + { 0x97FF, 72022 }, + { 0x97F6, 72026 }, + { 0x97FE, 72030 }, + { 0x97FD, 72034 }, + { 0x97F9, 72038 }, + { 0x968A, 72042 }, + { 0x968B, 72046 }, + { 0x968C, 72050 }, + { 0x968D, 72054 }, + { 0x968E, 72058 }, + { 0x968F, 72062 }, + { 0x9690, 72066 }, + { 0x9691, 72070 }, + { 0x9692, 72074 }, + { 0x9693, 72078 }, + { 0x9694, 72082 }, + { 0x9695, 72086 }, + { 0x9696, 72090 }, + { 0x9697, 72094 }, + { 0x9698, 72098 }, + { 0x9699, 72102 }, + { 0x969A, 72106 }, + { 0x969B, 72110 }, + { 0x969C, 72114 }, + { 0x969D, 72118 }, + { 0x969E, 72122 }, + { 0x969F, 72126 }, + { 0x96A0, 72130 }, + { 0x96A1, 72134 }, + { 0x96A2, 72138 }, + { 0x96A3, 72142 }, + { 0x9670, 72146 }, + { 0x9671, 72150 }, + { 0x9672, 72154 }, + { 0x9673, 72158 }, + { 0x9674, 72162 }, + { 0x9675, 72166 }, + { 0x9676, 72170 }, + { 0x9677, 72174 }, + { 0x9678, 72178 }, + { 0x9679, 72182 }, + { 0x967A, 72186 }, + { 0x967B, 72190 }, + { 0x967C, 72194 }, + { 0x967D, 72198 }, + { 0x967E, 72202 }, + { 0x967F, 72206 }, + { 0x9680, 72210 }, + { 0x9681, 72214 }, + { 0x9682, 72218 }, + { 0x9683, 72222 }, + { 0x9684, 72226 }, + { 0x9685, 72230 }, + { 0x9686, 72234 }, + { 0x9687, 72238 }, + { 0x9688, 72242 }, + { 0x9689, 72246 }, + { 0x978F, 72250 }, + { 0x978D, 72255 }, + { 0x978E, 72260 }, + { 0x97ED, 72265 }, + { 0x97F2, 72270 }, + { 0x97EE, 72275 }, + { 0x97F1, 72280 }, + { 0x97F0, 72285 }, + { 0x97F5, 72290 }, + { 0x97EC, 72295 }, + { 0x97F4, 72300 }, + { 0x97F3, 72305 }, + { 0x97EF, 72310 }, + { 0x978C, 72315 }, + { 0x976F, 72320 }, + { 0x95EE, 72324 }, + { 0x95EF, 72329 }, + { 0x95F0, 72334 }, + { 0x95F1, 72339 }, + { 0x95F2, 72344 }, + { 0x95F3, 72349 }, + { 0x95F4, 72354 }, + { 0x95F5, 72359 }, + { 0x95F6, 72364 }, + { 0x95F7, 72369 }, + { 0x95F8, 72374 }, + { 0x95F9, 72379 }, + { 0x95FA, 72384 }, + { 0x95FB, 72389 }, + { 0x95FC, 72394 }, + { 0x95FD, 72399 }, + { 0x95FE, 72404 }, + { 0x95FF, 72409 }, + { 0x9600, 72414 }, + { 0x9601, 72419 }, + { 0x9602, 72424 }, + { 0x9603, 72429 }, + { 0x9604, 72434 }, + { 0x9605, 72439 }, + { 0x9606, 72444 }, + { 0x9607, 72449 }, + { 0x977B, 72454 }, + { 0x977C, 72459 }, + { 0x977F, 72464 }, + { 0x977D, 72469 }, + { 0x9786, 72474 }, + { 0x9776, 72479 }, + { 0x9785, 72484 }, + { 0x9787, 72489 }, + { 0x9780, 72494 }, + { 0x9783, 72499 }, + { 0x9771, 72504 }, + { 0x9778, 72509 }, + { 0x9775, 72514 }, + { 0x9770, 72519 }, + { 0x9773, 72524 }, + { 0x9781, 72529 }, + { 0x9772, 72535 }, + { 0x9779, 72540 }, + { 0x977A, 72545 }, + { 0x9788, 72550 }, + { 0x9782, 72555 }, + { 0x9777, 72560 }, + { 0x9774, 72565 }, + { 0x977E, 72570 }, + { 0x9784, 72575 }, + { 0x978B, 72580 }, + { 0x97C9, 72585 }, + { 0x97C7, 72591 }, + { 0x97C8, 72597 }, + { 0x97C6, 72603 }, + { 0x97A9, 72609 }, + { 0x9656, 72614 }, + { 0x9657, 72620 }, + { 0x9658, 72626 }, + { 0x9659, 72632 }, + { 0x965A, 72638 }, + { 0x965B, 72644 }, + { 0x965C, 72650 }, + { 0x965D, 72656 }, + { 0x965E, 72662 }, + { 0x965F, 72668 }, + { 0x9660, 72674 }, + { 0x9661, 72680 }, + { 0x9662, 72686 }, + { 0x9663, 72692 }, + { 0x9664, 72698 }, + { 0x9665, 72704 }, + { 0x9666, 72710 }, + { 0x9667, 72716 }, + { 0x9668, 72722 }, + { 0x9669, 72728 }, + { 0x966A, 72734 }, + { 0x966B, 72740 }, + { 0x966C, 72746 }, + { 0x966D, 72752 }, + { 0x966E, 72758 }, + { 0x966F, 72764 }, + { 0x97B5, 72770 }, + { 0x97B6, 72776 }, + { 0x97B9, 72782 }, + { 0x97B7, 72788 }, + { 0x97C0, 72794 }, + { 0x97B0, 72800 }, + { 0x97BF, 72806 }, + { 0x97C1, 72812 }, + { 0x97BA, 72818 }, + { 0x97BD, 72824 }, + { 0x97AB, 72830 }, + { 0x97B2, 72836 }, + { 0x97AF, 72842 }, + { 0x97AA, 72848 }, + { 0x97AD, 72854 }, + { 0x97BB, 72860 }, + { 0x97AC, 72867 }, + { 0x97B3, 72873 }, + { 0x97B4, 72879 }, + { 0x97C2, 72885 }, + { 0x97BC, 72891 }, + { 0x97B1, 72897 }, + { 0x97AE, 72903 }, + { 0x97B8, 72909 }, + { 0x97BE, 72915 }, + { 0x97C5, 72921 }, + { 0x963C, 72927 }, + { 0x963D, 72933 }, + { 0x963E, 72939 }, + { 0x963F, 72945 }, + { 0x9640, 72951 }, + { 0x9641, 72957 }, + { 0x9642, 72963 }, + { 0x9643, 72969 }, + { 0x9644, 72975 }, + { 0x9645, 72981 }, + { 0x9646, 72987 }, + { 0x9647, 72993 }, + { 0x9648, 72999 }, + { 0x9649, 73005 }, + { 0x964A, 73011 }, + { 0x964B, 73017 }, + { 0x964C, 73023 }, + { 0x964D, 73029 }, + { 0x964E, 73035 }, + { 0x964F, 73041 }, + { 0x9650, 73047 }, + { 0x9651, 73053 }, + { 0x9652, 73059 }, + { 0x9653, 73065 }, + { 0x9654, 73071 }, + { 0x9655, 73077 }, + { 0x979B, 73083 }, + { 0x979C, 73089 }, + { 0x979F, 73095 }, + { 0x979D, 73101 }, + { 0x97A6, 73107 }, + { 0x9796, 73113 }, + { 0x97A5, 73119 }, + { 0x97A7, 73125 }, + { 0x97A0, 73131 }, + { 0x97A3, 73137 }, + { 0x9791, 73143 }, + { 0x9798, 73149 }, + { 0x9795, 73155 }, + { 0x9790, 73161 }, + { 0x9793, 73167 }, + { 0x9792, 73173 }, + { 0x9799, 73179 }, + { 0x979A, 73185 }, + { 0x97A8, 73191 }, + { 0x97A2, 73197 }, + { 0x9797, 73203 }, + { 0x97A1, 73209 }, + { 0x9794, 73216 }, + { 0x979E, 73222 }, + { 0x97A4, 73228 }, + { 0x97C4, 73234 }, + { 0x97C3, 73240 }, + { 0x95D4, 73246 }, + { 0x95D5, 73251 }, + { 0x95D6, 73256 }, + { 0x95D7, 73261 }, + { 0x95D8, 73266 }, + { 0x95D9, 73271 }, + { 0x95DA, 73276 }, + { 0x95DB, 73281 }, + { 0x95DC, 73286 }, + { 0x95DD, 73291 }, + { 0x95DE, 73296 }, + { 0x95DF, 73301 }, + { 0x95E0, 73306 }, + { 0x95E1, 73311 }, + { 0x95E2, 73316 }, + { 0x95E3, 73321 }, + { 0x95E4, 73326 }, + { 0x95E5, 73331 }, + { 0x95E6, 73336 }, + { 0x95E7, 73341 }, + { 0x95E8, 73346 }, + { 0x95E9, 73351 }, + { 0x95EA, 73356 }, + { 0x95EB, 73361 }, + { 0x95EC, 73366 }, + { 0x95ED, 73371 }, + { 0x9761, 73376 }, + { 0x9762, 73381 }, + { 0x9765, 73386 }, + { 0x9763, 73391 }, + { 0x976C, 73396 }, + { 0x975C, 73401 }, + { 0x976B, 73406 }, + { 0x976D, 73411 }, + { 0x9766, 73416 }, + { 0x9769, 73421 }, + { 0x9757, 73426 }, + { 0x975E, 73431 }, + { 0x975B, 73436 }, + { 0x9756, 73441 }, + { 0x9759, 73446 }, + { 0x9758, 73451 }, + { 0x975F, 73456 }, + { 0x9760, 73461 }, + { 0x976E, 73466 }, + { 0x9768, 73471 }, + { 0x975D, 73476 }, + { 0x9767, 73481 }, + { 0x975A, 73487 }, + { 0x9764, 73492 }, + { 0x976A, 73497 }, + { 0x978A, 73502 }, + { 0x9789, 73507 }, + { 0x97E3, 73512 }, + { 0x97E8, 73516 }, + { 0x97E4, 73520 }, + { 0x97E7, 73524 }, + { 0x97E6, 73528 }, + { 0x97EB, 73532 }, + { 0x97E2, 73536 }, + { 0x97EA, 73540 }, + { 0x97E9, 73544 }, + { 0x97E5, 73548 }, + { 0x95BA, 73552 }, + { 0x95BB, 73556 }, + { 0x95BC, 73560 }, + { 0x95BD, 73564 }, + { 0x95BE, 73568 }, + { 0x95BF, 73572 }, + { 0x95C0, 73576 }, + { 0x95C1, 73580 }, + { 0x95C2, 73584 }, + { 0x95C3, 73588 }, + { 0x95C4, 73592 }, + { 0x95C5, 73596 }, + { 0x95C6, 73600 }, + { 0x95C7, 73604 }, + { 0x95C8, 73608 }, + { 0x95C9, 73612 }, + { 0x95CA, 73616 }, + { 0x95CB, 73620 }, + { 0x95CC, 73624 }, + { 0x95CD, 73628 }, + { 0x95CE, 73632 }, + { 0x95CF, 73636 }, + { 0x95D0, 73640 }, + { 0x95D1, 73644 }, + { 0x95D2, 73648 }, + { 0x95D3, 73652 }, + { 0x9622, 73656 }, + { 0x9623, 73661 }, + { 0x9624, 73666 }, + { 0x9625, 73671 }, + { 0x9626, 73676 }, + { 0x9627, 73681 }, + { 0x9628, 73686 }, + { 0x9629, 73691 }, + { 0x962A, 73696 }, + { 0x962B, 73701 }, + { 0x962C, 73706 }, + { 0x962D, 73711 }, + { 0x962E, 73716 }, + { 0x962F, 73721 }, + { 0x9630, 73726 }, + { 0x9631, 73731 }, + { 0x9632, 73736 }, + { 0x9633, 73741 }, + { 0x9634, 73746 }, + { 0x9635, 73751 }, + { 0x9636, 73756 }, + { 0x9637, 73761 }, + { 0x9638, 73766 }, + { 0x9639, 73771 }, + { 0x963A, 73776 }, + { 0x963B, 73781 }, + { 0x9608, 73786 }, + { 0x9609, 73791 }, + { 0x960A, 73796 }, + { 0x960B, 73801 }, + { 0x960C, 73806 }, + { 0x960D, 73811 }, + { 0x960E, 73816 }, + { 0x960F, 73821 }, + { 0x9610, 73826 }, + { 0x9611, 73831 }, + { 0x9612, 73836 }, + { 0x9613, 73841 }, + { 0x9614, 73846 }, + { 0x9615, 73851 }, + { 0x9616, 73856 }, + { 0x9617, 73861 }, + { 0x9618, 73866 }, + { 0x9619, 73871 }, + { 0x961A, 73876 }, + { 0x961B, 73881 }, + { 0x961C, 73886 }, + { 0x961D, 73891 }, + { 0x961E, 73896 }, + { 0x961F, 73901 }, + { 0x9620, 73906 }, + { 0x9621, 73911 }, + { 0x95A0, 73916 }, + { 0x95A1, 73920 }, + { 0x95A2, 73924 }, + { 0x95A3, 73928 }, + { 0x95A4, 73932 }, + { 0x95A5, 73936 }, + { 0x95A6, 73940 }, + { 0x95A7, 73944 }, + { 0x95A8, 73948 }, + { 0x95A9, 73952 }, + { 0x95AA, 73956 }, + { 0x95AB, 73960 }, + { 0x95AC, 73964 }, + { 0x95AD, 73968 }, + { 0x95AE, 73972 }, + { 0x95AF, 73976 }, + { 0x95B0, 73980 }, + { 0x95B1, 73984 }, + { 0x95B2, 73988 }, + { 0x95B3, 73992 }, + { 0x95B4, 73996 }, + { 0x95B5, 74000 }, + { 0x95B6, 74004 }, + { 0x95B7, 74008 }, + { 0x95B8, 74012 }, + { 0x95B9, 74016 }, + { 0x97D9, 74020 }, + { 0x97DE, 74024 }, + { 0x97DA, 74028 }, + { 0x97DD, 74032 }, + { 0x97DC, 74036 }, + { 0x97E1, 74040 }, + { 0x97D8, 74044 }, + { 0x97E0, 74048 }, + { 0x97DF, 74052 }, + { 0x97DB, 74056 }, + { 0x9552, 74060 }, + { 0x9553, 74064 }, + { 0x9554, 74068 }, + { 0x9555, 74072 }, + { 0x9556, 74076 }, + { 0x9557, 74080 }, + { 0x9558, 74084 }, + { 0x9559, 74088 }, + { 0x955A, 74092 }, + { 0x955B, 74096 }, + { 0x955C, 74100 }, + { 0x955D, 74104 }, + { 0x955E, 74108 }, + { 0x955F, 74112 }, + { 0x9560, 74116 }, + { 0x9561, 74120 }, + { 0x9562, 74124 }, + { 0x9563, 74128 }, + { 0x9564, 74132 }, + { 0x9565, 74136 }, + { 0x9566, 74140 }, + { 0x9567, 74144 }, + { 0x9568, 74148 }, + { 0x9569, 74152 }, + { 0x956A, 74156 }, + { 0x956B, 74160 }, + { 0x9538, 74164 }, + { 0x9539, 74168 }, + { 0x953B, 74172 }, + { 0x953C, 74176 }, + { 0x953D, 74180 }, + { 0x953E, 74184 }, + { 0x9540, 74188 }, + { 0x9541, 74192 }, + { 0x9542, 74196 }, + { 0x9543, 74200 }, + { 0x9544, 74204 }, + { 0x9546, 74208 }, + { 0x954A, 74212 }, + { 0x954B, 74216 }, + { 0x954C, 74220 }, + { 0x954D, 74224 }, + { 0x954E, 74228 }, + { 0x954F, 74232 }, + { 0x9550, 74236 }, + { 0x2011, 74240 }, + { 0x211E, 74242 }, + { 0x6E31, 74244 }, + { 0x6E32, 74250 }, + { 0x6E33, 74256 }, + { 0x6E30, 74262 }, + { 0x6E3F, 74269 }, + { 0x6E3B, 74276 }, + { 0x6E37, 74284 }, + { 0x6E43, 74291 }, + { 0x6E17, 74299 }, + { 0x6E41, 74307 }, + { 0x6E3D, 74314 }, + { 0x6E47, 74322 }, + { 0x6E39, 74329 }, + { 0x6E35, 74337 }, + { 0x6E34, 74343 }, + { 0x6E13, 74350 }, + { 0x6E10, 74355 }, + { 0x6E40, 74360 }, + { 0x6E3C, 74367 }, + { 0x6E38, 74375 }, + { 0x6E44, 74382 }, + { 0x6E18, 74390 }, + { 0x6E42, 74398 }, + { 0x6E3E, 74405 }, + { 0x6E48, 74413 }, + { 0x6E3A, 74420 }, + { 0x6E36, 74428 }, + { 0x6E16, 74434 }, + { 0x6E14, 74440 }, + { 0x6E19, 74445 }, + { 0x6E15, 74451 }, + { 0x6E12, 74457 }, + { 0x6E11, 74464 }, + { 0x221D, 74470 }, + { 0x27A9, 74472 }, + { 0x29F4, 74476 }, + { 0x23E4, 74477 }, + { 0x2004, 74478 }, + { 0x2608, 74480 }, + { 0x27BC, 74481 }, + { 0x21B6, 74484 }, + { 0x21BA, 74488 }, + { 0x2940, 74492 }, + { 0x27F2, 74496 }, + { 0x2233, 74500 }, + { 0x2A11, 74503 }, + { 0x2246, 74505 }, + { 0x2A70, 74511 }, + { 0x2245, 74516 }, + { 0x2252, 74519 }, + { 0x2382, 74526 }, + { 0x2140, 74529 }, + { 0x213C, 74532 }, + { 0x213D, 74535 }, + { 0x2146, 74538 }, + { 0x2147, 74542 }, + { 0x2148, 74546 }, + { 0x2149, 74550 }, + { 0x2145, 74554 }, + { 0x2102, 74558 }, + { 0x210D, 74561 }, + { 0x2115, 74564 }, + { 0x2119, 74567 }, + { 0x211A, 74570 }, + { 0x211D, 74573 }, + { 0x2124, 74576 }, + { 0x213F, 74579 }, + { 0x213E, 74582 }, + { 0x29E8, 74585 }, + { 0x29E9, 74591 }, + { 0x20A0, 74597 }, + { 0x2251, 74599 }, + { 0x224E, 74602 }, + { 0x2329, 74605 }, + { 0x29FC, 74608 }, + { 0x00AB, 74612 }, + { 0x200E, 74617 }, + { 0x202D, 74619 }, + { 0x202A, 74621 }, + { 0x2213, 74623 }, + { 0x27BE, 74625 }, + { 0x2474, 74628 }, + { 0x2479, 74631 }, + { 0x2475, 74634 }, + { 0x2478, 74637 }, + { 0x2477, 74640 }, + { 0x247C, 74643 }, + { 0x247B, 74646 }, + { 0x247A, 74649 }, + { 0x2476, 74652 }, + { 0x249C, 74655 }, + { 0x249D, 74660 }, + { 0x249E, 74665 }, + { 0x249F, 74670 }, + { 0x24A0, 74675 }, + { 0x24A1, 74680 }, + { 0x24A2, 74685 }, + { 0x24A3, 74690 }, + { 0x24A4, 74695 }, + { 0x24A5, 74700 }, + { 0x24A6, 74705 }, + { 0x24A7, 74710 }, + { 0x24A8, 74715 }, + { 0x24A9, 74720 }, + { 0x24AA, 74725 }, + { 0x24AB, 74730 }, + { 0x24AC, 74735 }, + { 0x24AD, 74740 }, + { 0x24AE, 74745 }, + { 0x24AF, 74750 }, + { 0x24B0, 74755 }, + { 0x24B1, 74760 }, + { 0x24B2, 74765 }, + { 0x24B3, 74770 }, + { 0x24B4, 74775 }, + { 0x24B5, 74780 }, + { 0x3206, 74785 }, + { 0x3214, 74788 }, + { 0x3208, 74792 }, + { 0x3216, 74795 }, + { 0x321C, 74799 }, + { 0x320D, 74803 }, + { 0x321B, 74806 }, + { 0x3207, 74810 }, + { 0x3215, 74813 }, + { 0x3204, 74817 }, + { 0x3212, 74820 }, + { 0x3201, 74824 }, + { 0x320F, 74827 }, + { 0x3205, 74831 }, + { 0x3213, 74834 }, + { 0x3203, 74838 }, + { 0x3211, 74841 }, + { 0x3200, 74845 }, + { 0x320E, 74848 }, + { 0x3202, 74852 }, + { 0x3210, 74855 }, + { 0x3209, 74859 }, + { 0x3217, 74862 }, + { 0x320A, 74866 }, + { 0x3218, 74869 }, + { 0x320C, 74873 }, + { 0x321A, 74876 }, + { 0x320B, 74880 }, + { 0x3219, 74883 }, + { 0x321E, 74887 }, + { 0x321D, 74892 }, + { 0x247D, 74896 }, + { 0x247E, 74899 }, + { 0x247F, 74902 }, + { 0x2487, 74905 }, + { 0x2482, 74908 }, + { 0x2483, 74911 }, + { 0x2485, 74914 }, + { 0x2481, 74917 }, + { 0x2486, 74920 }, + { 0x2480, 74923 }, + { 0x2484, 74926 }, + { 0x3220, 74929 }, + { 0x3225, 74932 }, + { 0x3230, 74935 }, + { 0x3229, 74938 }, + { 0x3221, 74941 }, + { 0x323A, 74944 }, + { 0x322B, 74947 }, + { 0x3224, 74950 }, + { 0x3223, 74953 }, + { 0x3232, 74956 }, + { 0x322A, 74959 }, + { 0x3234, 74962 }, + { 0x3228, 74965 }, + { 0x3241, 74968 }, + { 0x3242, 74971 }, + { 0x322D, 74974 }, + { 0x322F, 74977 }, + { 0x3227, 74980 }, + { 0x3238, 74983 }, + { 0x322E, 74986 }, + { 0x3243, 74989 }, + { 0x3226, 74992 }, + { 0x3231, 74995 }, + { 0x323B, 74998 }, + { 0x3222, 75001 }, + { 0x322C, 75004 }, + { 0x3233, 75007 }, + { 0x3235, 75010 }, + { 0x323F, 75013 }, + { 0x3240, 75016 }, + { 0x323E, 75019 }, + { 0x3236, 75022 }, + { 0x3239, 75025 }, + { 0x323C, 75028 }, + { 0x323D, 75031 }, + { 0x3237, 75034 }, + { 0x27C2, 75037 }, + { 0x2AE1, 75038 }, + { 0x200F, 75041 }, + { 0x202E, 75043 }, + { 0x202B, 75045 }, + { 0x29E7, 75047 }, + { 0x2243, 75048 }, + { 0x2749, 75051 }, + { 0x2715, 75053 }, + { 0x00D7, 75055 }, + { 0x2A34, 75057 }, + { 0x2A35, 75063 }, + { 0x2A37, 75069 }, + { 0x2A3B, 75074 }, + { 0x2A30, 75078 }, + { 0x2A31, 75083 }, + { 0x232A, 75087 }, + { 0x29FD, 75090 }, + { 0x00BB, 75094 }, + { 0x26BC, 75099 }, + { 0x27B6, 75100 }, + { 0x27B4, 75104 }, + { 0x27B5, 75108 }, + { 0x27BA, 75111 }, + { 0x273B, 75114 }, + { 0x279D, 75116 }, + { 0x27B3, 75119 }, + { 0x30A0, 75122 }, + { 0x309B, 75125 }, + { 0x30FC, 75129 }, + { 0x309C, 75133 }, + { 0x2394, 75137 }, + { 0x267D, 75139 }, + { 0x238F, 75142 }, + { 0x2390, 75145 }, + { 0x2392, 75148 }, + { 0x2391, 75150 }, +}; +static const struct { uint16_t code; uint32_t name:24; } +#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) +__attribute__((__packed__)) +#endif +unicode_code_to_name[18242] = { + { 0x0020, 22740 }, + { 0x0021, 68656 }, + { 0x0022, 65766 }, + { 0x0023, 35593 }, + { 0x0024, 31225 }, + { 0x0025, 42973 }, + { 0x0026, 56108 }, + { 0x0027, 66826 }, + { 0x0028, 9464 }, + { 0x0029, 21991 }, + { 0x002A, 45081 }, + { 0x002B, 9633 }, + { 0x002C, 10461 }, + { 0x002D, 69568 }, + { 0x002E, 9112 }, + { 0x002F, 43548 }, + { 0x0030, 10518 }, + { 0x0031, 10482 }, + { 0x0032, 10494 }, + { 0x0033, 10532 }, + { 0x0034, 10506 }, + { 0x0035, 10500 }, + { 0x0036, 10488 }, + { 0x0037, 10526 }, + { 0x0038, 10520 }, + { 0x0039, 10512 }, + { 0x003A, 10455 }, + { 0x003B, 65813 }, + { 0x003C, 64726 }, + { 0x003D, 31706 }, + { 0x003E, 69497 }, + { 0x003F, 55446 }, + { 0x0040, 66837 }, + { 0x0041, 18231 }, + { 0x0042, 18454 }, + { 0x0043, 18497 }, + { 0x0044, 18552 }, + { 0x0045, 18632 }, + { 0x0046, 18817 }, + { 0x0047, 18834 }, + { 0x0048, 18893 }, + { 0x0049, 18954 }, + { 0x004A, 19068 }, + { 0x004B, 19084 }, + { 0x004C, 19154 }, + { 0x004D, 19254 }, + { 0x004E, 19284 }, + { 0x004F, 19369 }, + { 0x0050, 19659 }, + { 0x0051, 19709 }, + { 0x0052, 19728 }, + { 0x0053, 19811 }, + { 0x0054, 19888 }, + { 0x0055, 19965 }, + { 0x0056, 20187 }, + { 0x0057, 20217 }, + { 0x0058, 20265 }, + { 0x0059, 20282 }, + { 0x005A, 20361 }, + { 0x005B, 9385 }, + { 0x005C, 42994 }, + { 0x005D, 21912 }, + { 0x005E, 66835 }, + { 0x005F, 6031 }, + { 0x0060, 10638 }, + { 0x0061, 14473 }, + { 0x0062, 14711 }, + { 0x0063, 14768 }, + { 0x0064, 14829 }, + { 0x0065, 14925 }, + { 0x0066, 15123 }, + { 0x0067, 15154 }, + { 0x0068, 15220 }, + { 0x0069, 15294 }, + { 0x006A, 15408 }, + { 0x006B, 15436 }, + { 0x006C, 15513 }, + { 0x006D, 15631 }, + { 0x006E, 15675 }, + { 0x006F, 15786 }, + { 0x0070, 16077 }, + { 0x0071, 16141 }, + { 0x0072, 16173 }, + { 0x0073, 16292 }, + { 0x0074, 16396 }, + { 0x0075, 16499 }, + { 0x0076, 16728 }, + { 0x0077, 16778 }, + { 0x0078, 16833 }, + { 0x0079, 16857 }, + { 0x007A, 16943 }, + { 0x007B, 9231 }, + { 0x007C, 56066 }, + { 0x007D, 21824 }, + { 0x007E, 23008 }, + { 0x00A0, 54927 }, + { 0x00A1, 53357 }, + { 0x00A2, 8729 }, + { 0x00A3, 21740 }, + { 0x00A4, 48521 }, + { 0x00A5, 8712 }, + { 0x00A6, 30305 }, + { 0x00A7, 43022 }, + { 0x00A8, 63244 }, + { 0x00A9, 58349 }, + { 0x00AA, 51775 }, + { 0x00AB, 74612 }, + { 0x00AC, 6723 }, + { 0x00AD, 9710 }, + { 0x00AE, 67979 }, + { 0x00AF, 35513 }, + { 0x00B0, 31179 }, + { 0x00B1, 67969 }, + { 0x00B2, 69284 }, + { 0x00B3, 69319 }, + { 0x00B4, 10104 }, + { 0x00B5, 21176 }, + { 0x00B6, 42975 }, + { 0x00B7, 35570 }, + { 0x00B8, 38870 }, + { 0x00B9, 69280 }, + { 0x00BA, 65112 }, + { 0x00BB, 75094 }, + { 0x00BC, 37732 }, + { 0x00BD, 37712 }, + { 0x00BE, 37768 }, + { 0x00BF, 53352 }, + { 0x00C0, 18348 }, + { 0x00C1, 18288 }, + { 0x00C2, 18406 }, + { 0x00C3, 18354 }, + { 0x00C4, 18392 }, + { 0x00C5, 18265 }, + { 0x00C6, 20426 }, + { 0x00C7, 18532 }, + { 0x00C8, 18675 }, + { 0x00C9, 18657 }, + { 0x00CA, 18762 }, + { 0x00CB, 18756 }, + { 0x00CC, 18997 }, + { 0x00CD, 18979 }, + { 0x00CE, 19062 }, + { 0x00CF, 19048 }, + { 0x00D0, 20523 }, + { 0x00D1, 19350 }, + { 0x00D2, 19483 }, + { 0x00D3, 19465 }, + { 0x00D4, 19611 }, + { 0x00D5, 19489 }, + { 0x00D6, 19597 }, + { 0x00D7, 75055 }, + { 0x00D8, 19576 }, + { 0x00D9, 20061 }, + { 0x00DA, 20043 }, + { 0x00DB, 20174 }, + { 0x00DC, 20129 }, + { 0x00DD, 20319 }, + { 0x00DE, 20626 }, + { 0x00DF, 17465 }, + { 0x00E0, 14590 }, + { 0x00E1, 14530 }, + { 0x00E2, 14663 }, + { 0x00E3, 14604 }, + { 0x00E4, 14642 }, + { 0x00E5, 14507 }, + { 0x00E6, 17042 }, + { 0x00E7, 14809 }, + { 0x00E8, 14968 }, + { 0x00E9, 14950 }, + { 0x00EA, 15068 }, + { 0x00EB, 15055 }, + { 0x00EC, 15330 }, + { 0x00ED, 15312 }, + { 0x00EE, 15402 }, + { 0x00EF, 15381 }, + { 0x00F0, 17225 }, + { 0x00F1, 15739 }, + { 0x00F2, 15908 }, + { 0x00F3, 15890 }, + { 0x00F4, 16029 }, + { 0x00F5, 15914 }, + { 0x00F6, 16015 }, + { 0x00F7, 50308 }, + { 0x00F8, 15994 }, + { 0x00F9, 16595 }, + { 0x00FA, 16577 }, + { 0x00FB, 16715 }, + { 0x00FC, 16663 }, + { 0x00FD, 16901 }, + { 0x00FE, 17476 }, + { 0x00FF, 16931 }, + { 0x0100, 18367 }, + { 0x0101, 14617 }, + { 0x0102, 18294 }, + { 0x0103, 14536 }, + { 0x0104, 18373 }, + { 0x0105, 14623 }, + { 0x0106, 18514 }, + { 0x0107, 14791 }, + { 0x0108, 18546 }, + { 0x0109, 14823 }, + { 0x010A, 18501 }, + { 0x010B, 14772 }, + { 0x010C, 18520 }, + { 0x010D, 14797 }, + { 0x010E, 18583 }, + { 0x010F, 14880 }, + { 0x0110, 18607 }, + { 0x0111, 14893 }, + { 0x0112, 18701 }, + { 0x0113, 15000 }, + { 0x0114, 18663 }, + { 0x0115, 14956 }, + { 0x0116, 18636 }, + { 0x0117, 14929 }, + { 0x0118, 18723 }, + { 0x0119, 15022 }, + { 0x011A, 18669 }, + { 0x011B, 14962 }, + { 0x011C, 18887 }, + { 0x011D, 15214 }, + { 0x011E, 18857 }, + { 0x011F, 15177 }, + { 0x0120, 18838 }, + { 0x0121, 15158 }, + { 0x0122, 18881 }, + { 0x0123, 15201 }, + { 0x0124, 18948 }, + { 0x0125, 15288 }, + { 0x0126, 18924 }, + { 0x0127, 15264 }, + { 0x0128, 19003 }, + { 0x0129, 15336 }, + { 0x012A, 19023 }, + { 0x012B, 15356 }, + { 0x012C, 18985 }, + { 0x012D, 15318 }, + { 0x012E, 19029 }, + { 0x012F, 15362 }, + { 0x0130, 18958 }, + { 0x0131, 17682 }, + { 0x0132, 20774 }, + { 0x0133, 17909 }, + { 0x0134, 19078 }, + { 0x0135, 15424 }, + { 0x0136, 19135 }, + { 0x0137, 15487 }, + { 0x0138, 17263 }, + { 0x0139, 19194 }, + { 0x013A, 15565 }, + { 0x013B, 19241 }, + { 0x013C, 15604 }, + { 0x013D, 19200 }, + { 0x013E, 15571 }, + { 0x013F, 19221 }, + { 0x0140, 15584 }, + { 0x0141, 19235 }, + { 0x0142, 15598 }, + { 0x0143, 19324 }, + { 0x0144, 15721 }, + { 0x0145, 19356 }, + { 0x0146, 15752 }, + { 0x0147, 19330 }, + { 0x0148, 15727 }, + { 0x0149, 15779 }, + { 0x014A, 20515 }, + { 0x014B, 17197 }, + { 0x014C, 19533 }, + { 0x014D, 15958 }, + { 0x014E, 19471 }, + { 0x014F, 15896 }, + { 0x0150, 19519 }, + { 0x0151, 15944 }, + { 0x0152, 20778 }, + { 0x0153, 17913 }, + { 0x0154, 19768 }, + { 0x0155, 16220 }, + { 0x0156, 19793 }, + { 0x0157, 16252 }, + { 0x0158, 19774 }, + { 0x0159, 16226 }, + { 0x015A, 19839 }, + { 0x015B, 16326 }, + { 0x015C, 19882 }, + { 0x015D, 16390 }, + { 0x015E, 19876 }, + { 0x015F, 16377 }, + { 0x0160, 19854 }, + { 0x0161, 16341 }, + { 0x0162, 19938 }, + { 0x0163, 16459 }, + { 0x0164, 19919 }, + { 0x0165, 16433 }, + { 0x0166, 19932 }, + { 0x0167, 16453 }, + { 0x0168, 20067 }, + { 0x0169, 16601 }, + { 0x016A, 20102 }, + { 0x016B, 16636 }, + { 0x016C, 20049 }, + { 0x016D, 16583 }, + { 0x016E, 20036 }, + { 0x016F, 16570 }, + { 0x0170, 20088 }, + { 0x0171, 16622 }, + { 0x0172, 20116 }, + { 0x0173, 16650 }, + { 0x0174, 20259 }, + { 0x0175, 16827 }, + { 0x0176, 20355 }, + { 0x0177, 16937 }, + { 0x0178, 20349 }, + { 0x0179, 20392 }, + { 0x017A, 16980 }, + { 0x017B, 20365 }, + { 0x017C, 16947 }, + { 0x017D, 20398 }, + { 0x017E, 16986 }, + { 0x017F, 17341 }, + { 0x0180, 14749 }, + { 0x0181, 18472 }, + { 0x0182, 18491 }, + { 0x0183, 14755 }, + { 0x0184, 20570 }, + { 0x0185, 17406 }, + { 0x0186, 20565 }, + { 0x0187, 18508 }, + { 0x0188, 14785 }, + { 0x0189, 20675 }, + { 0x018A, 18570 }, + { 0x018B, 18613 }, + { 0x018C, 14899 }, + { 0x018D, 17671 }, + { 0x018E, 20726 }, + { 0x018F, 20609 }, + { 0x0190, 20560 }, + { 0x0191, 18828 }, + { 0x0192, 15134 }, + { 0x0193, 18845 }, + { 0x0194, 20601 }, + { 0x0195, 17112 }, + { 0x0196, 20556 }, + { 0x0197, 19035 }, + { 0x0198, 19095 }, + { 0x0199, 15447 }, + { 0x019A, 15517 }, + { 0x019B, 17528 }, + { 0x019C, 20659 }, + { 0x019D, 19302 }, + { 0x019E, 15713 }, + { 0x019F, 19555 }, + { 0x01A0, 19403 }, + { 0x01A1, 15828 }, + { 0x01A2, 20491 }, + { 0x01A3, 17138 }, + { 0x01A4, 19670 }, + { 0x01A5, 16088 }, + { 0x01A6, 17935 }, + { 0x01A7, 20575 }, + { 0x01A8, 17411 }, + { 0x01A9, 20519 }, + { 0x01AA, 18206 }, + { 0x01AB, 16465 }, + { 0x01AC, 19906 }, + { 0x01AD, 16420 }, + { 0x01AE, 19951 }, + { 0x01AF, 19988 }, + { 0x01B0, 16522 }, + { 0x01B1, 20715 }, + { 0x01B2, 20198 }, + { 0x01B3, 20300 }, + { 0x01B4, 16875 }, + { 0x01B5, 20404 }, + { 0x01B6, 17006 }, + { 0x01B7, 20527 }, + { 0x01B8, 20537 }, + { 0x01B9, 17258 }, + { 0x01BA, 17239 }, + { 0x01BB, 17941 }, + { 0x01BC, 20580 }, + { 0x01BD, 17416 }, + { 0x01BE, 18199 }, + { 0x01BF, 17946 }, + { 0x01C0, 18155 }, + { 0x01C1, 18174 }, + { 0x01C2, 18178 }, + { 0x01C3, 18218 }, + { 0x01C4, 20469 }, + { 0x01C5, 18597 }, + { 0x01C6, 17090 }, + { 0x01C7, 20483 }, + { 0x01C8, 19206 }, + { 0x01C9, 17120 }, + { 0x01CA, 20487 }, + { 0x01CB, 19342 }, + { 0x01CC, 17134 }, + { 0x01CD, 18342 }, + { 0x01CE, 14584 }, + { 0x01CF, 18991 }, + { 0x01D0, 15324 }, + { 0x01D1, 19477 }, + { 0x01D2, 15902 }, + { 0x01D3, 20055 }, + { 0x01D4, 16589 }, + { 0x01D5, 20159 }, + { 0x01D6, 16693 }, + { 0x01D7, 20135 }, + { 0x01D8, 16669 }, + { 0x01D9, 20143 }, + { 0x01DA, 16677 }, + { 0x01DB, 20151 }, + { 0x01DC, 16685 }, + { 0x01DD, 17544 }, + { 0x01DE, 18398 }, + { 0x01DF, 14648 }, + { 0x01E0, 18242 }, + { 0x01E1, 14484 }, + { 0x01E2, 20436 }, + { 0x01E3, 17052 }, + { 0x01E4, 18875 }, + { 0x01E5, 15195 }, + { 0x01E6, 18863 }, + { 0x01E7, 15183 }, + { 0x01E8, 19114 }, + { 0x01E9, 15466 }, + { 0x01EA, 19562 }, + { 0x01EB, 15980 }, + { 0x01EC, 19568 }, + { 0x01ED, 15986 }, + { 0x01EE, 20531 }, + { 0x01EF, 17245 }, + { 0x01F0, 15412 }, + { 0x01F1, 20465 }, + { 0x01F2, 18589 }, + { 0x01F3, 17086 }, + { 0x01F4, 18851 }, + { 0x01F5, 15171 }, + { 0x01F6, 20605 }, + { 0x01F7, 20589 }, + { 0x01F8, 19336 }, + { 0x01F9, 15733 }, + { 0x01FA, 18272 }, + { 0x01FB, 14514 }, + { 0x01FC, 20430 }, + { 0x01FD, 17046 }, + { 0x01FE, 19582 }, + { 0x01FF, 16000 }, + { 0x0200, 18360 }, + { 0x0201, 14610 }, + { 0x0202, 18385 }, + { 0x0203, 14635 }, + { 0x0204, 18694 }, + { 0x0205, 14993 }, + { 0x0206, 18749 }, + { 0x0207, 15048 }, + { 0x0208, 19016 }, + { 0x0209, 15349 }, + { 0x020A, 19041 }, + { 0x020B, 15374 }, + { 0x020C, 19526 }, + { 0x020D, 15951 }, + { 0x020E, 19590 }, + { 0x020F, 16008 }, + { 0x0210, 19780 }, + { 0x0211, 16232 }, + { 0x0212, 19799 }, + { 0x0213, 16280 }, + { 0x0214, 20095 }, + { 0x0215, 16629 }, + { 0x0216, 20122 }, + { 0x0217, 16656 }, + { 0x0218, 19869 }, + { 0x0219, 16356 }, + { 0x021A, 19925 }, + { 0x021B, 16439 }, + { 0x021C, 20593 }, + { 0x021D, 17425 }, + { 0x021E, 18918 }, + { 0x021F, 15258 }, + { 0x0220, 19316 }, + { 0x0221, 14847 }, + { 0x0222, 20499 }, + { 0x0223, 17146 }, + { 0x0224, 20379 }, + { 0x0225, 16967 }, + { 0x0226, 18235 }, + { 0x0227, 14477 }, + { 0x0228, 18735 }, + { 0x0229, 15034 }, + { 0x022A, 19603 }, + { 0x022B, 16021 }, + { 0x022C, 19503 }, + { 0x022D, 15928 }, + { 0x022E, 19373 }, + { 0x022F, 15790 }, + { 0x0230, 19380 }, + { 0x0231, 15797 }, + { 0x0232, 20337 }, + { 0x0233, 16919 }, + { 0x0234, 15545 }, + { 0x0235, 15693 }, + { 0x0236, 16414 }, + { 0x0237, 17687 }, + { 0x0238, 17081 }, + { 0x0239, 17150 }, + { 0x023A, 18379 }, + { 0x023B, 18526 }, + { 0x023C, 14803 }, + { 0x023D, 19158 }, + { 0x023E, 19944 }, + { 0x023F, 16363 }, + { 0x0240, 16992 }, + { 0x0241, 20680 }, + { 0x0242, 17708 }, + { 0x0243, 18485 }, + { 0x0244, 19969 }, + { 0x0245, 20664 }, + { 0x0246, 18729 }, + { 0x0247, 15028 }, + { 0x0248, 19072 }, + { 0x0249, 15418 }, + { 0x024A, 20618 }, + { 0x024B, 16151 }, + { 0x024C, 19787 }, + { 0x024D, 16246 }, + { 0x024E, 20343 }, + { 0x024F, 16925 }, + { 0x0250, 17539 }, + { 0x0251, 17429 }, + { 0x0252, 17666 }, + { 0x0253, 14729 }, + { 0x0254, 17383 }, + { 0x0255, 14779 }, + { 0x0256, 14874 }, + { 0x0257, 14853 }, + { 0x0258, 17765 }, + { 0x0259, 17448 }, + { 0x025A, 17452 }, + { 0x025B, 17370 }, + { 0x025C, 17777 }, + { 0x025D, 17783 }, + { 0x025E, 17521 }, + { 0x025F, 17692 }, + { 0x0260, 15165 }, + { 0x0261, 17534 }, + { 0x0262, 17979 }, + { 0x0263, 17444 }, + { 0x0264, 17396 }, + { 0x0265, 17554 }, + { 0x0266, 15238 }, + { 0x0267, 17321 }, + { 0x0268, 15368 }, + { 0x0269, 17327 }, + { 0x026A, 17996 }, + { 0x026B, 15591 }, + { 0x026C, 15539 }, + { 0x026D, 15617 }, + { 0x026E, 17337 }, + { 0x026F, 17590 }, + { 0x0270, 17595 }, + { 0x0271, 15649 }, + { 0x0272, 15699 }, + { 0x0273, 15765 }, + { 0x0274, 18028 }, + { 0x0275, 17494 }, + { 0x0276, 18088 }, + { 0x0277, 17516 }, + { 0x0278, 17279 }, + { 0x0279, 17603 }, + { 0x027A, 17615 }, + { 0x027B, 17608 }, + { 0x027C, 16207 }, + { 0x027D, 16214 }, + { 0x027E, 16265 }, + { 0x027F, 17770 }, + { 0x0280, 18043 }, + { 0x0281, 18137 }, + { 0x0282, 16320 }, + { 0x0283, 17201 }, + { 0x0284, 17699 }, + { 0x0285, 17470 }, + { 0x0286, 17205 }, + { 0x0287, 17630 }, + { 0x0288, 16485 }, + { 0x0289, 16503 }, + { 0x028A, 17743 }, + { 0x028B, 16745 }, + { 0x028C, 17635 }, + { 0x028D, 17640 }, + { 0x028E, 17645 }, + { 0x028F, 18073 }, + { 0x0290, 17025 }, + { 0x0291, 16961 }, + { 0x0292, 17229 }, + { 0x0293, 17233 }, + { 0x0294, 18164 }, + { 0x0295, 18226 }, + { 0x0296, 18194 }, + { 0x0297, 18222 }, + { 0x0298, 18186 }, + { 0x0299, 17954 }, + { 0x029A, 17510 }, + { 0x029B, 17984 }, + { 0x029C, 17991 }, + { 0x029D, 15430 }, + { 0x029E, 17580 }, + { 0x029F, 18011 }, + { 0x02A0, 16145 }, + { 0x02A1, 18168 }, + { 0x02A2, 18211 }, + { 0x02A3, 17096 }, + { 0x02A4, 17302 }, + { 0x02A5, 17101 }, + { 0x02A6, 17168 }, + { 0x02A7, 17401 }, + { 0x02A8, 17155 }, + { 0x02A9, 17307 }, + { 0x02AA, 17124 }, + { 0x02AB, 17129 }, + { 0x02AC, 18190 }, + { 0x02AD, 18182 }, + { 0x02AE, 17559 }, + { 0x02AF, 17566 }, + { 0x02B0, 54170 }, + { 0x02B1, 54174 }, + { 0x02B2, 54186 }, + { 0x02B3, 54250 }, + { 0x02B4, 54449 }, + { 0x02B5, 54454 }, + { 0x02B6, 54509 }, + { 0x02B7, 54294 }, + { 0x02B8, 54302 }, + { 0x02B9, 54116 }, + { 0x02BA, 54543 }, + { 0x02BB, 54612 }, + { 0x02BC, 54827 }, + { 0x02BD, 54790 }, + { 0x02BE, 54119 }, + { 0x02BF, 54058 }, + { 0x02C0, 54775 }, + { 0x02C1, 54794 }, + { 0x02C2, 54063 }, + { 0x02C3, 54124 }, + { 0x02C4, 53873 }, + { 0x02C5, 54025 }, + { 0x02C6, 54830 }, + { 0x02C7, 10445 }, + { 0x02C8, 54799 }, + { 0x02C9, 54551 }, + { 0x02CA, 54081 }, + { 0x02CB, 54102 }, + { 0x02CC, 53975 }, + { 0x02CD, 53965 }, + { 0x02CE, 53938 }, + { 0x02CF, 53933 }, + { 0x02D0, 54858 }, + { 0x02D1, 54029 }, + { 0x02D2, 54721 }, + { 0x02D3, 54715 }, + { 0x02D4, 53869 }, + { 0x02D5, 54021 }, + { 0x02D6, 54071 }, + { 0x02D7, 54112 }, + { 0x02D8, 10378 }, + { 0x02D9, 5782 }, + { 0x02DA, 9699 }, + { 0x02DB, 35640 }, + { 0x02DC, 22588 }, + { 0x02DD, 31564 }, + { 0x02DE, 54596 }, + { 0x02DF, 54098 }, + { 0x02E0, 54383 }, + { 0x02E1, 54200 }, + { 0x02E2, 54254 }, + { 0x02E3, 54298 }, + { 0x02E4, 54532 }, + { 0x02E5, 54834 }, + { 0x02E6, 54034 }, + { 0x02E7, 53991 }, + { 0x02E8, 53928 }, + { 0x02E9, 54803 }, + { 0x02EA, 54015 }, + { 0x02EB, 54075 }, + { 0x02EC, 54779 }, + { 0x02ED, 54862 }, + { 0x02EE, 54547 }, + { 0x02EF, 53909 }, + { 0x02F0, 53904 }, + { 0x02F1, 53919 }, + { 0x02F2, 53943 }, + { 0x02F3, 53924 }, + { 0x02F4, 54554 }, + { 0x02F5, 54565 }, + { 0x02F6, 54559 }, + { 0x02F7, 53948 }, + { 0x02F8, 54581 }, + { 0x02F9, 54090 }, + { 0x02FA, 53899 }, + { 0x02FB, 54085 }, + { 0x02FC, 53894 }, + { 0x02FD, 54128 }, + { 0x02FE, 54067 }, + { 0x02FF, 53914 }, + { 0x0300, 57554 }, + { 0x0301, 57523 }, + { 0x0302, 58283 }, + { 0x0303, 57841 }, + { 0x0304, 57946 }, + { 0x0305, 58215 }, + { 0x0306, 57530 }, + { 0x0307, 57402 }, + { 0x0308, 58240 }, + { 0x0309, 57427 }, + { 0x030A, 57506 }, + { 0x030B, 57876 }, + { 0x030C, 57535 }, + { 0x030D, 58221 }, + { 0x030E, 57918 }, + { 0x030F, 57887 }, + { 0x0310, 58305 }, + { 0x0311, 58191 }, + { 0x0312, 57970 }, + { 0x0313, 57540 }, + { 0x0314, 58217 }, + { 0x0315, 57543 }, + { 0x0316, 57557 }, + { 0x0317, 57526 }, + { 0x0318, 57442 }, + { 0x0319, 57783 }, + { 0x031A, 57446 }, + { 0x031B, 57430 }, + { 0x031C, 57437 }, + { 0x031D, 57392 }, + { 0x031E, 57419 }, + { 0x031F, 57502 }, + { 0x0320, 57769 }, + { 0x0321, 58307 }, + { 0x0322, 58279 }, + { 0x0323, 57409 }, + { 0x0324, 58242 }, + { 0x0325, 57509 }, + { 0x0326, 57547 }, + { 0x0327, 57983 }, + { 0x0328, 57959 }, + { 0x0329, 58225 }, + { 0x032A, 57857 }, + { 0x032B, 58202 }, + { 0x032C, 57537 }, + { 0x032D, 58286 }, + { 0x032E, 57532 }, + { 0x032F, 58194 }, + { 0x0330, 57843 }, + { 0x0331, 57952 }, + { 0x0332, 57412 }, + { 0x0333, 57868 }, + { 0x0334, 57846 }, + { 0x0335, 57821 }, + { 0x0336, 57489 }, + { 0x0337, 57825 }, + { 0x0338, 57493 }, + { 0x0339, 57778 }, + { 0x033A, 58198 }, + { 0x033B, 57964 }, + { 0x033C, 57991 }, + { 0x033D, 57383 }, + { 0x033E, 58229 }, + { 0x033F, 57915 }, + { 0x0340, 57550 }, + { 0x0341, 57519 }, + { 0x0342, 57580 }, + { 0x0343, 57561 }, + { 0x0344, 57576 }, + { 0x0345, 57583 }, + { 0x0346, 57854 }, + { 0x0347, 57942 }, + { 0x0348, 57923 }, + { 0x0349, 57450 }, + { 0x034A, 57415 }, + { 0x034B, 58293 }, + { 0x034C, 57849 }, + { 0x034D, 57467 }, + { 0x034E, 57994 }, + { 0x034F, 58188 }, + { 0x0350, 57813 }, + { 0x0351, 57432 }, + { 0x0352, 57985 }, + { 0x0353, 57386 }, + { 0x0354, 57480 }, + { 0x0355, 57817 }, + { 0x0356, 57799 }, + { 0x0357, 57773 }, + { 0x0358, 57405 }, + { 0x0359, 58001 }, + { 0x035A, 57872 }, + { 0x035B, 57974 }, + { 0x035C, 57883 }, + { 0x035D, 57880 }, + { 0x035E, 57904 }, + { 0x035F, 57907 }, + { 0x0360, 57891 }, + { 0x0361, 57911 }, + { 0x0362, 57937 }, + { 0x0363, 57586 }, + { 0x0364, 57607 }, + { 0x0365, 57622 }, + { 0x0366, 57647 }, + { 0x0367, 57679 }, + { 0x0368, 57591 }, + { 0x0369, 57602 }, + { 0x036A, 57617 }, + { 0x036B, 57637 }, + { 0x036C, 57652 }, + { 0x036D, 57674 }, + { 0x036E, 57684 }, + { 0x036F, 57689 }, + { 0x0370, 12320 }, + { 0x0371, 10998 }, + { 0x0372, 12792 }, + { 0x0373, 11590 }, + { 0x0374, 13034 }, + { 0x0375, 10720 }, + { 0x0376, 12999 }, + { 0x0377, 11869 }, + { 0x037A, 13522 }, + { 0x037B, 11881 }, + { 0x037C, 10738 }, + { 0x037D, 11874 }, + { 0x037E, 13059 }, + { 0x0384, 11898 }, + { 0x0385, 13083 }, + { 0x0386, 12574 }, + { 0x0387, 10643 }, + { 0x0388, 12851 }, + { 0x0389, 12268 }, + { 0x038A, 12394 }, + { 0x038C, 12917 }, + { 0x038E, 12969 }, + { 0x038F, 12766 }, + { 0x0390, 11110 }, + { 0x0391, 12428 }, + { 0x0392, 12316 }, + { 0x0393, 12608 }, + { 0x0394, 12604 }, + { 0x0395, 12797 }, + { 0x0396, 12424 }, + { 0x0397, 12122 }, + { 0x0398, 12788 }, + { 0x0399, 12324 }, + { 0x039A, 12612 }, + { 0x039B, 12616 }, + { 0x039C, 12102 }, + { 0x039D, 12106 }, + { 0x039E, 12114 }, + { 0x039F, 12863 }, + { 0x03A0, 12110 }, + { 0x03A1, 12294 }, + { 0x03A3, 12784 }, + { 0x03A4, 12312 }, + { 0x03A5, 12929 }, + { 0x03A6, 12286 }, + { 0x03A7, 12118 }, + { 0x03A8, 12290 }, + { 0x03A9, 12620 }, + { 0x03AA, 12418 }, + { 0x03AB, 12993 }, + { 0x03AC, 11298 }, + { 0x03AD, 11653 }, + { 0x03AE, 10918 }, + { 0x03AF, 11072 }, + { 0x03B0, 11839 }, + { 0x03B1, 11144 }, + { 0x03B2, 10994 }, + { 0x03B3, 11359 }, + { 0x03B4, 11350 }, + { 0x03B5, 11599 }, + { 0x03B6, 11140 }, + { 0x03B7, 10764 }, + { 0x03B8, 11577 }, + { 0x03B9, 11002 }, + { 0x03BA, 11363 }, + { 0x03BB, 11371 }, + { 0x03BC, 10744 }, + { 0x03BD, 10748 }, + { 0x03BE, 10756 }, + { 0x03BF, 11665 }, + { 0x03C0, 10752 }, + { 0x03C1, 10966 }, + { 0x03C2, 11354 }, + { 0x03C3, 11573 }, + { 0x03C4, 10990 }, + { 0x03C5, 11731 }, + { 0x03C6, 10958 }, + { 0x03C7, 10760 }, + { 0x03C8, 10962 }, + { 0x03C9, 11375 }, + { 0x03CA, 11096 }, + { 0x03CB, 11825 }, + { 0x03CC, 11719 }, + { 0x03CD, 11801 }, + { 0x03CE, 11529 }, + { 0x03CF, 12088 }, + { 0x03D0, 10678 }, + { 0x03D1, 11887 }, + { 0x03D2, 13037 }, + { 0x03D3, 13042 }, + { 0x03D4, 13049 }, + { 0x03D5, 10659 }, + { 0x03D6, 10640 }, + { 0x03D7, 10646 }, + { 0x03D8, 12064 }, + { 0x03D9, 11585 }, + { 0x03DA, 12061 }, + { 0x03DB, 11581 }, + { 0x03DC, 12068 }, + { 0x03DD, 11595 }, + { 0x03DE, 12030 }, + { 0x03DF, 11367 }, + { 0x03E0, 12033 }, + { 0x03E1, 11569 }, + { 0x03E2, 31064 }, + { 0x03E3, 30771 }, + { 0x03E4, 30926 }, + { 0x03E5, 30633 }, + { 0x03E6, 31060 }, + { 0x03E7, 30767 }, + { 0x03E8, 31052 }, + { 0x03E9, 30759 }, + { 0x03EA, 31104 }, + { 0x03EB, 30811 }, + { 0x03EC, 31100 }, + { 0x03ED, 30807 }, + { 0x03EE, 30918 }, + { 0x03EF, 30625 }, + { 0x03F0, 10714 }, + { 0x03F1, 10667 }, + { 0x03F2, 12071 }, + { 0x03F3, 12027 }, + { 0x03F4, 12092 }, + { 0x03F5, 12075 }, + { 0x03F6, 13062 }, + { 0x03F7, 12308 }, + { 0x03F8, 10986 }, + { 0x03F9, 13004 }, + { 0x03FA, 12304 }, + { 0x03FB, 10982 }, + { 0x03FC, 10662 }, + { 0x03FD, 13016 }, + { 0x03FE, 12096 }, + { 0x03FF, 13009 }, + { 0x0400, 49628 }, + { 0x0401, 49634 }, + { 0x0402, 49779 }, + { 0x0403, 49828 }, + { 0x0404, 50271 }, + { 0x0405, 49787 }, + { 0x0406, 50281 }, + { 0x0407, 49723 }, + { 0x0408, 49638 }, + { 0x0409, 49848 }, + { 0x040A, 49852 }, + { 0x040B, 50007 }, + { 0x040C, 49836 }, + { 0x040D, 49451 }, + { 0x040E, 50103 }, + { 0x040F, 49910 }, + { 0x0410, 49421 }, + { 0x0411, 49502 }, + { 0x0412, 49711 }, + { 0x0413, 49791 }, + { 0x0414, 49506 }, + { 0x0415, 49618 }, + { 0x0416, 49884 }, + { 0x0417, 49735 }, + { 0x0418, 49447 }, + { 0x0419, 50091 }, + { 0x041A, 49642 }, + { 0x041B, 49514 }, + { 0x041C, 49537 }, + { 0x041D, 49547 }, + { 0x041E, 49469 }, + { 0x041F, 49675 }, + { 0x0420, 49576 }, + { 0x0421, 49586 }, + { 0x0422, 49690 }, + { 0x0423, 49479 }, + { 0x0424, 49510 }, + { 0x0425, 49596 }, + { 0x0426, 49868 }, + { 0x0427, 49756 }, + { 0x0428, 49864 }, + { 0x0429, 50087 }, + { 0x042A, 49926 }, + { 0x042B, 50019 }, + { 0x042C, 49998 }, + { 0x042D, 49437 }, + { 0x042E, 49731 }, + { 0x042F, 49719 }, + { 0x0430, 48523 }, + { 0x0431, 48604 }, + { 0x0432, 48813 }, + { 0x0433, 48893 }, + { 0x0434, 48608 }, + { 0x0435, 48720 }, + { 0x0436, 48986 }, + { 0x0437, 48837 }, + { 0x0438, 48549 }, + { 0x0439, 49193 }, + { 0x043A, 48744 }, + { 0x043B, 48616 }, + { 0x043C, 48639 }, + { 0x043D, 48649 }, + { 0x043E, 48571 }, + { 0x043F, 48777 }, + { 0x0440, 48678 }, + { 0x0441, 48688 }, + { 0x0442, 48792 }, + { 0x0443, 48581 }, + { 0x0444, 48612 }, + { 0x0445, 48698 }, + { 0x0446, 48970 }, + { 0x0447, 48858 }, + { 0x0448, 48966 }, + { 0x0449, 49189 }, + { 0x044A, 49028 }, + { 0x044B, 49121 }, + { 0x044C, 49100 }, + { 0x044D, 48539 }, + { 0x044E, 48833 }, + { 0x044F, 48821 }, + { 0x0450, 48730 }, + { 0x0451, 48736 }, + { 0x0452, 48881 }, + { 0x0453, 48930 }, + { 0x0454, 49377 }, + { 0x0455, 48889 }, + { 0x0456, 49387 }, + { 0x0457, 48825 }, + { 0x0458, 48740 }, + { 0x0459, 48950 }, + { 0x045A, 48954 }, + { 0x045B, 49109 }, + { 0x045C, 48938 }, + { 0x045D, 48553 }, + { 0x045E, 49205 }, + { 0x045F, 49012 }, + { 0x0460, 50062 }, + { 0x0461, 49164 }, + { 0x0462, 49880 }, + { 0x0463, 48982 }, + { 0x0464, 50173 }, + { 0x0465, 49275 }, + { 0x0466, 50132 }, + { 0x0467, 49234 }, + { 0x0468, 50196 }, + { 0x0469, 49298 }, + { 0x046A, 49751 }, + { 0x046B, 48853 }, + { 0x046C, 50178 }, + { 0x046D, 49280 }, + { 0x046E, 49840 }, + { 0x046F, 48942 }, + { 0x0470, 49856 }, + { 0x0471, 48958 }, + { 0x0472, 49922 }, + { 0x0473, 49024 }, + { 0x0474, 50151 }, + { 0x0475, 49253 }, + { 0x0476, 50155 }, + { 0x0477, 49257 }, + { 0x0478, 49707 }, + { 0x0479, 48809 }, + { 0x047A, 50072 }, + { 0x047B, 49174 }, + { 0x047C, 50066 }, + { 0x047D, 49168 }, + { 0x047E, 49671 }, + { 0x047F, 48773 }, + { 0x0480, 50058 }, + { 0x0481, 49160 }, + { 0x0482, 50303 }, + { 0x0483, 58017 }, + { 0x0484, 58185 }, + { 0x0485, 58009 }, + { 0x0486, 58013 }, + { 0x0487, 58177 }, + { 0x0488, 58165 }, + { 0x0489, 58173 }, + { 0x048A, 50096 }, + { 0x048B, 49198 }, + { 0x048C, 50217 }, + { 0x048D, 49323 }, + { 0x048E, 49580 }, + { 0x048F, 48682 }, + { 0x0490, 49816 }, + { 0x0491, 48918 }, + { 0x0492, 49802 }, + { 0x0493, 48904 }, + { 0x0494, 49795 }, + { 0x0495, 48897 }, + { 0x0496, 49894 }, + { 0x0497, 48996 }, + { 0x0498, 49739 }, + { 0x0499, 48841 }, + { 0x049A, 49665 }, + { 0x049B, 48767 }, + { 0x049C, 49658 }, + { 0x049D, 48760 }, + { 0x049E, 49652 }, + { 0x049F, 48754 }, + { 0x04A0, 50141 }, + { 0x04A1, 49243 }, + { 0x04A2, 49570 }, + { 0x04A3, 48672 }, + { 0x04A4, 50291 }, + { 0x04A5, 49397 }, + { 0x04A6, 49679 }, + { 0x04A7, 48781 }, + { 0x04A8, 50234 }, + { 0x04A9, 49340 }, + { 0x04AA, 49590 }, + { 0x04AB, 48692 }, + { 0x04AC, 49701 }, + { 0x04AD, 48803 }, + { 0x04AE, 50222 }, + { 0x04AF, 49328 }, + { 0x04B0, 50227 }, + { 0x04B1, 49333 }, + { 0x04B2, 49612 }, + { 0x04B3, 48714 }, + { 0x04B4, 50296 }, + { 0x04B5, 49402 }, + { 0x04B6, 49767 }, + { 0x04B7, 48869 }, + { 0x04B8, 49760 }, + { 0x04B9, 48862 }, + { 0x04BA, 49975 }, + { 0x04BB, 49077 }, + { 0x04BC, 50239 }, + { 0x04BD, 49345 }, + { 0x04BE, 50244 }, + { 0x04BF, 49350 }, + { 0x04C0, 49414 }, + { 0x04C1, 49888 }, + { 0x04C2, 48990 }, + { 0x04C3, 49646 }, + { 0x04C4, 48748 }, + { 0x04C5, 49524 }, + { 0x04C6, 48626 }, + { 0x04C7, 49551 }, + { 0x04C8, 48653 }, + { 0x04C9, 49557 }, + { 0x04CA, 48659 }, + { 0x04CB, 50276 }, + { 0x04CC, 49382 }, + { 0x04CD, 49541 }, + { 0x04CE, 48643 }, + { 0x04CF, 49304 }, + { 0x04D0, 49425 }, + { 0x04D1, 48527 }, + { 0x04D2, 49431 }, + { 0x04D3, 48533 }, + { 0x04D4, 50286 }, + { 0x04D5, 49392 }, + { 0x04D6, 49622 }, + { 0x04D7, 48724 }, + { 0x04D8, 50077 }, + { 0x04D9, 49179 }, + { 0x04DA, 50081 }, + { 0x04DB, 49183 }, + { 0x04DC, 49900 }, + { 0x04DD, 49002 }, + { 0x04DE, 49745 }, + { 0x04DF, 48847 }, + { 0x04E0, 50251 }, + { 0x04E1, 49357 }, + { 0x04E2, 49457 }, + { 0x04E3, 48559 }, + { 0x04E4, 49463 }, + { 0x04E5, 48565 }, + { 0x04E6, 49473 }, + { 0x04E7, 48575 }, + { 0x04E8, 50108 }, + { 0x04E9, 49210 }, + { 0x04EA, 50113 }, + { 0x04EB, 49215 }, + { 0x04EC, 49441 }, + { 0x04ED, 48543 }, + { 0x04EE, 49490 }, + { 0x04EF, 48592 }, + { 0x04F0, 49496 }, + { 0x04F1, 48598 }, + { 0x04F2, 49483 }, + { 0x04F3, 48585 }, + { 0x04F4, 49773 }, + { 0x04F5, 48875 }, + { 0x04F6, 49822 }, + { 0x04F7, 48924 }, + { 0x04F8, 50030 }, + { 0x04F9, 49132 }, + { 0x04FA, 49808 }, + { 0x04FB, 48910 }, + { 0x04FC, 49600 }, + { 0x04FD, 48702 }, + { 0x04FE, 49606 }, + { 0x04FF, 48708 }, + { 0x0500, 49935 }, + { 0x0501, 49037 }, + { 0x0502, 49940 }, + { 0x0503, 49042 }, + { 0x0504, 49965 }, + { 0x0505, 49067 }, + { 0x0506, 49970 }, + { 0x0507, 49072 }, + { 0x0508, 49945 }, + { 0x0509, 49047 }, + { 0x050A, 49950 }, + { 0x050B, 49052 }, + { 0x050C, 49955 }, + { 0x050D, 49057 }, + { 0x050E, 49960 }, + { 0x050F, 49062 }, + { 0x0510, 50207 }, + { 0x0511, 49313 }, + { 0x0512, 49518 }, + { 0x0513, 48620 }, + { 0x0514, 49844 }, + { 0x0515, 48946 }, + { 0x0516, 49860 }, + { 0x0517, 48962 }, + { 0x0518, 49876 }, + { 0x0519, 48978 }, + { 0x051A, 49686 }, + { 0x051B, 48788 }, + { 0x051C, 49715 }, + { 0x051D, 48817 }, + { 0x051E, 50040 }, + { 0x051F, 49142 }, + { 0x0520, 49530 }, + { 0x0521, 48632 }, + { 0x0522, 49563 }, + { 0x0523, 48665 }, + { 0x0531, 44961 }, + { 0x0532, 44965 }, + { 0x0533, 44981 }, + { 0x0534, 44917 }, + { 0x0535, 44973 }, + { 0x0536, 44957 }, + { 0x0537, 44921 }, + { 0x0538, 44925 }, + { 0x0539, 44945 }, + { 0x053A, 45029 }, + { 0x053B, 44985 }, + { 0x053C, 45045 }, + { 0x053D, 45025 }, + { 0x053E, 44909 }, + { 0x053F, 44993 }, + { 0x0540, 44929 }, + { 0x0541, 44933 }, + { 0x0542, 45037 }, + { 0x0543, 45033 }, + { 0x0544, 44997 }, + { 0x0545, 44953 }, + { 0x0546, 45001 }, + { 0x0547, 45017 }, + { 0x0548, 44949 }, + { 0x0549, 44969 }, + { 0x054A, 45005 }, + { 0x054B, 45041 }, + { 0x054C, 44941 }, + { 0x054D, 45013 }, + { 0x054E, 45021 }, + { 0x054F, 45053 }, + { 0x0550, 45009 }, + { 0x0551, 44913 }, + { 0x0552, 45057 }, + { 0x0553, 45049 }, + { 0x0554, 44989 }, + { 0x0555, 44937 }, + { 0x0556, 44977 }, + { 0x0559, 45064 }, + { 0x055A, 45073 }, + { 0x055B, 45061 }, + { 0x055C, 45075 }, + { 0x055D, 44723 }, + { 0x055E, 45070 }, + { 0x055F, 45078 }, + { 0x0561, 44777 }, + { 0x0562, 44781 }, + { 0x0563, 44797 }, + { 0x0564, 44733 }, + { 0x0565, 44789 }, + { 0x0566, 44773 }, + { 0x0567, 44737 }, + { 0x0568, 44741 }, + { 0x0569, 44761 }, + { 0x056A, 44845 }, + { 0x056B, 44801 }, + { 0x056C, 44861 }, + { 0x056D, 44841 }, + { 0x056E, 44725 }, + { 0x056F, 44809 }, + { 0x0570, 44745 }, + { 0x0571, 44749 }, + { 0x0572, 44853 }, + { 0x0573, 44849 }, + { 0x0574, 44813 }, + { 0x0575, 44769 }, + { 0x0576, 44817 }, + { 0x0577, 44833 }, + { 0x0578, 44765 }, + { 0x0579, 44785 }, + { 0x057A, 44821 }, + { 0x057B, 44857 }, + { 0x057C, 44757 }, + { 0x057D, 44829 }, + { 0x057E, 44837 }, + { 0x057F, 44869 }, + { 0x0580, 44825 }, + { 0x0581, 44729 }, + { 0x0582, 44873 }, + { 0x0583, 44865 }, + { 0x0584, 44805 }, + { 0x0585, 44753 }, + { 0x0586, 44793 }, + { 0x0587, 44877 }, + { 0x0589, 44720 }, + { 0x058A, 44907 }, + { 0x0591, 33056 }, + { 0x0592, 33004 }, + { 0x0593, 33073 }, + { 0x0594, 33022 }, + { 0x0595, 33018 }, + { 0x0596, 33053 }, + { 0x0597, 33001 }, + { 0x0598, 33026 }, + { 0x0599, 33046 }, + { 0x059A, 33015 }, + { 0x059B, 33007 }, + { 0x059C, 33032 }, + { 0x059D, 33035 }, + { 0x059E, 33070 }, + { 0x059F, 33049 }, + { 0x05A0, 33059 }, + { 0x05A1, 32995 }, + { 0x05A2, 32985 }, + { 0x05A3, 32992 }, + { 0x05A4, 33067 }, + { 0x05A5, 33039 }, + { 0x05A6, 33042 }, + { 0x05A7, 32989 }, + { 0x05A8, 32998 }, + { 0x05A9, 33063 }, + { 0x05AA, 33010 }, + { 0x05AB, 32976 }, + { 0x05AC, 32982 }, + { 0x05AD, 32979 }, + { 0x05AE, 33029 }, + { 0x05AF, 32903 }, + { 0x05B0, 32951 }, + { 0x05B1, 32922 }, + { 0x05B2, 32918 }, + { 0x05B3, 32926 }, + { 0x05B4, 32930 }, + { 0x05B5, 32954 }, + { 0x05B6, 32948 }, + { 0x05B7, 32945 }, + { 0x05B8, 32962 }, + { 0x05B9, 32933 }, + { 0x05BA, 32936 }, + { 0x05BB, 32969 }, + { 0x05BC, 32957 }, + { 0x05BD, 32942 }, + { 0x05BE, 33412 }, + { 0x05BF, 32911 }, + { 0x05C0, 33415 }, + { 0x05C1, 32914 }, + { 0x05C2, 32907 }, + { 0x05C3, 33408 }, + { 0x05C4, 32899 }, + { 0x05C5, 32895 }, + { 0x05C6, 33404 }, + { 0x05C7, 32965 }, + { 0x05D0, 33192 }, + { 0x05D1, 33097 }, + { 0x05D2, 33330 }, + { 0x05D3, 33290 }, + { 0x05D4, 33076 }, + { 0x05D5, 33166 }, + { 0x05D6, 33354 }, + { 0x05D7, 33110 }, + { 0x05D8, 33158 }, + { 0x05D9, 33179 }, + { 0x05DA, 33308 }, + { 0x05DB, 33113 }, + { 0x05DC, 33338 }, + { 0x05DD, 33318 }, + { 0x05DE, 33126 }, + { 0x05DF, 33322 }, + { 0x05E0, 33134 }, + { 0x05E1, 33362 }, + { 0x05E2, 33210 }, + { 0x05E3, 33298 }, + { 0x05E4, 33084 }, + { 0x05E5, 33326 }, + { 0x05E6, 33346 }, + { 0x05E7, 33142 }, + { 0x05E8, 33213 }, + { 0x05E9, 33221 }, + { 0x05EA, 33150 }, + { 0x05F0, 33394 }, + { 0x05F1, 33383 }, + { 0x05F2, 33399 }, + { 0x05F3, 33418 }, + { 0x05F4, 33421 }, + { 0x0600, 26405 }, + { 0x0601, 23733 }, + { 0x0602, 26459 }, + { 0x0603, 23730 }, + { 0x0606, 69351 }, + { 0x0607, 69384 }, + { 0x0608, 23706 }, + { 0x0609, 69347 }, + { 0x060A, 69342 }, + { 0x060B, 37776 }, + { 0x060C, 23764 }, + { 0x060D, 23708 }, + { 0x060E, 26408 }, + { 0x060F, 23727 }, + { 0x0610, 23756 }, + { 0x0611, 23736 }, + { 0x0612, 23752 }, + { 0x0613, 23722 }, + { 0x0614, 23749 }, + { 0x0615, 23840 }, + { 0x0616, 23923 }, + { 0x0617, 23872 }, + { 0x0618, 23935 }, + { 0x0619, 23932 }, + { 0x061A, 23938 }, + { 0x061B, 30222 }, + { 0x061E, 26422 }, + { 0x061F, 30214 }, + { 0x0621, 26056 }, + { 0x0622, 25371 }, + { 0x0623, 25327 }, + { 0x0624, 25097 }, + { 0x0625, 25349 }, + { 0x0626, 25155 }, + { 0x0627, 25310 }, + { 0x0628, 24144 }, + { 0x0629, 25027 }, + { 0x062A, 24996 }, + { 0x062B, 25851 }, + { 0x062C, 25554 }, + { 0x062D, 24447 }, + { 0x062E, 25577 }, + { 0x062F, 24260 }, + { 0x0630, 25838 }, + { 0x0631, 24833 }, + { 0x0632, 25897 }, + { 0x0633, 25747 }, + { 0x0634, 26192 }, + { 0x0635, 24929 }, + { 0x0636, 24231 }, + { 0x0637, 24966 }, + { 0x0638, 25287 }, + { 0x0639, 24090 }, + { 0x063A, 26027 }, + { 0x063B, 26073 }, + { 0x063C, 26087 }, + { 0x063D, 25996 }, + { 0x063E, 25950 }, + { 0x063F, 25958 }, + { 0x0640, 26440 }, + { 0x0641, 24346 }, + { 0x0642, 24797 }, + { 0x0643, 24672 }, + { 0x0644, 24720 }, + { 0x0645, 25600 }, + { 0x0646, 25635 }, + { 0x0647, 24545 }, + { 0x0648, 25076 }, + { 0x0649, 25432 }, + { 0x064A, 25147 }, + { 0x064B, 26453 }, + { 0x064C, 26447 }, + { 0x064D, 26465 }, + { 0x064E, 23786 }, + { 0x064F, 23766 }, + { 0x0650, 23807 }, + { 0x0651, 26412 }, + { 0x0652, 23947 }, + { 0x0653, 26402 }, + { 0x0654, 23801 }, + { 0x0655, 23804 }, + { 0x0656, 30224 }, + { 0x0657, 26462 }, + { 0x0658, 23718 }, + { 0x0659, 30220 }, + { 0x065A, 23962 }, + { 0x065B, 23968 }, + { 0x065C, 23957 }, + { 0x065D, 30217 }, + { 0x065E, 23788 }, + { 0x0660, 69372 }, + { 0x0661, 69354 }, + { 0x0662, 69360 }, + { 0x0663, 69381 }, + { 0x0664, 69366 }, + { 0x0665, 69363 }, + { 0x0666, 69357 }, + { 0x0667, 69378 }, + { 0x0668, 69375 }, + { 0x0669, 69369 }, + { 0x066A, 26430 }, + { 0x066B, 26427 }, + { 0x066C, 30227 }, + { 0x066D, 23711 }, + { 0x066E, 26331 }, + { 0x066F, 26339 }, + { 0x0670, 26398 }, + { 0x0671, 25416 }, + { 0x0672, 25313 }, + { 0x0673, 25320 }, + { 0x0674, 25535 }, + { 0x0675, 25549 }, + { 0x0676, 25539 }, + { 0x0677, 24001 }, + { 0x0678, 25544 }, + { 0x0679, 25874 }, + { 0x067A, 26290 }, + { 0x067B, 25453 }, + { 0x067C, 24999 }, + { 0x067D, 25004 }, + { 0x067E, 24774 }, + { 0x067F, 26254 }, + { 0x0680, 25910 }, + { 0x0681, 24465 }, + { 0x0682, 24457 }, + { 0x0683, 25711 }, + { 0x0684, 25489 }, + { 0x0685, 24500 }, + { 0x0686, 26225 }, + { 0x0687, 26375 }, + { 0x0688, 25476 }, + { 0x0689, 24296 }, + { 0x068A, 24263 }, + { 0x068B, 24269 }, + { 0x068C, 25933 }, + { 0x068D, 26277 }, + { 0x068E, 24333 }, + { 0x068F, 24301 }, + { 0x0690, 24289 }, + { 0x0691, 25734 }, + { 0x0692, 24884 }, + { 0x0693, 24873 }, + { 0x0694, 24836 }, + { 0x0695, 24890 }, + { 0x0696, 24842 }, + { 0x0697, 24851 }, + { 0x0698, 24659 }, + { 0x0699, 24866 }, + { 0x069A, 25750 }, + { 0x069B, 25785 }, + { 0x069C, 25792 }, + { 0x069D, 24932 }, + { 0x069E, 24939 }, + { 0x069F, 24969 }, + { 0x06A0, 24108 }, + { 0x06A1, 26335 }, + { 0x06A2, 24355 }, + { 0x06A3, 24349 }, + { 0x06A4, 25053 }, + { 0x06A5, 24369 }, + { 0x06A6, 26146 }, + { 0x06A7, 24800 }, + { 0x06A8, 24806 }, + { 0x06A9, 26064 }, + { 0x06AA, 26221 }, + { 0x06AB, 24688 }, + { 0x06AC, 24675 }, + { 0x06AD, 24028 }, + { 0x06AE, 24693 }, + { 0x06AF, 24405 }, + { 0x06B0, 24415 }, + { 0x06B1, 26123 }, + { 0x06B2, 24408 }, + { 0x06B3, 25512 }, + { 0x06B4, 24420 }, + { 0x06B5, 24734 }, + { 0x06B6, 24728 }, + { 0x06B7, 24740 }, + { 0x06B8, 24747 }, + { 0x06B9, 25638 }, + { 0x06BA, 25680 }, + { 0x06BB, 26169 }, + { 0x06BC, 25651 }, + { 0x06BD, 25668 }, + { 0x06BE, 24631 }, + { 0x06BF, 26228 }, + { 0x06C0, 24583 }, + { 0x06C1, 24548 }, + { 0x06C2, 24552 }, + { 0x06C3, 25031 }, + { 0x06C4, 25092 }, + { 0x06C5, 26343 }, + { 0x06C6, 24051 }, + { 0x06C7, 23998 }, + { 0x06C8, 24077 }, + { 0x06C9, 26359 }, + { 0x06CA, 25085 }, + { 0x06CB, 24064 }, + { 0x06CC, 25946 }, + { 0x06CD, 25150 }, + { 0x06CE, 25193 }, + { 0x06CF, 25079 }, + { 0x06D0, 23975 }, + { 0x06D1, 25199 }, + { 0x06D2, 25211 }, + { 0x06D3, 25215 }, + { 0x06D4, 23715 }, + { 0x06D5, 24025 }, + { 0x06D6, 23913 }, + { 0x06D7, 23903 }, + { 0x06D8, 23852 }, + { 0x06D9, 23835 }, + { 0x06DA, 23848 }, + { 0x06DB, 23880 }, + { 0x06DC, 23868 }, + { 0x06DD, 23702 }, + { 0x06DE, 23941 }, + { 0x06DF, 23892 }, + { 0x06E0, 23897 }, + { 0x06E1, 23885 }, + { 0x06E2, 23858 }, + { 0x06E3, 23825 }, + { 0x06E4, 23876 }, + { 0x06E5, 23829 }, + { 0x06E6, 23832 }, + { 0x06E7, 23844 }, + { 0x06E8, 23864 }, + { 0x06E9, 23817 }, + { 0x06EA, 23776 }, + { 0x06EB, 23781 }, + { 0x06EC, 26433 }, + { 0x06ED, 23821 }, + { 0x06EE, 24309 }, + { 0x06EF, 24913 }, + { 0x06F0, 51759 }, + { 0x06F1, 51735 }, + { 0x06F2, 51743 }, + { 0x06F3, 51771 }, + { 0x06F4, 51751 }, + { 0x06F5, 51747 }, + { 0x06F6, 51739 }, + { 0x06F7, 51767 }, + { 0x06F8, 51763 }, + { 0x06F9, 51755 }, + { 0x06FA, 26195 }, + { 0x06FB, 24234 }, + { 0x06FC, 26030 }, + { 0x06FD, 23740 }, + { 0x06FE, 23744 }, + { 0x06FF, 24605 }, + { 0x0700, 36871 }, + { 0x0701, 37114 }, + { 0x0702, 37094 }, + { 0x0703, 37118 }, + { 0x0704, 37098 }, + { 0x0705, 37106 }, + { 0x0706, 36885 }, + { 0x0707, 36889 }, + { 0x0708, 37121 }, + { 0x0709, 37101 }, + { 0x070A, 37109 }, + { 0x070B, 37081 }, + { 0x070C, 37084 }, + { 0x070D, 37087 }, + { 0x070F, 37126 }, + { 0x0710, 36987 }, + { 0x0711, 37046 }, + { 0x0712, 36952 }, + { 0x0713, 36994 }, + { 0x0714, 36997 }, + { 0x0715, 37004 }, + { 0x0716, 37010 }, + { 0x0717, 36934 }, + { 0x0718, 36949 }, + { 0x0719, 36984 }, + { 0x071A, 36955 }, + { 0x071B, 36970 }, + { 0x071C, 36973 }, + { 0x071D, 36977 }, + { 0x071E, 36980 }, + { 0x071F, 36958 }, + { 0x0720, 37007 }, + { 0x0721, 36940 }, + { 0x0722, 36943 }, + { 0x0723, 37027 }, + { 0x0724, 36990 }, + { 0x0725, 36931 }, + { 0x0726, 36937 }, + { 0x0727, 37042 }, + { 0x0728, 37001 }, + { 0x0729, 36961 }, + { 0x072A, 36964 }, + { 0x072B, 36967 }, + { 0x072C, 36946 }, + { 0x072D, 37015 }, + { 0x072E, 37019 }, + { 0x072F, 37023 }, + { 0x0730, 37050 }, + { 0x0731, 37053 }, + { 0x0732, 37056 }, + { 0x0733, 37059 }, + { 0x0734, 37062 }, + { 0x0735, 37065 }, + { 0x0736, 36907 }, + { 0x0737, 36910 }, + { 0x0738, 36927 }, + { 0x0739, 36923 }, + { 0x073A, 36899 }, + { 0x073B, 36902 }, + { 0x073C, 37111 }, + { 0x073D, 36893 }, + { 0x073E, 36896 }, + { 0x073F, 36913 }, + { 0x0740, 37078 }, + { 0x0741, 37092 }, + { 0x0742, 37090 }, + { 0x0743, 36875 }, + { 0x0744, 36880 }, + { 0x0745, 36915 }, + { 0x0746, 36919 }, + { 0x0747, 37070 }, + { 0x0748, 37074 }, + { 0x0749, 36905 }, + { 0x074A, 37068 }, + { 0x074D, 37038 }, + { 0x074E, 37034 }, + { 0x074F, 37030 }, + { 0x0750, 24195 }, + { 0x0751, 24147 }, + { 0x0752, 24173 }, + { 0x0753, 24182 }, + { 0x0754, 24157 }, + { 0x0755, 24203 }, + { 0x0756, 24167 }, + { 0x0757, 24450 }, + { 0x0758, 24507 }, + { 0x0759, 24278 }, + { 0x075A, 24315 }, + { 0x075B, 24908 }, + { 0x075C, 25767 }, + { 0x075D, 24093 }, + { 0x075E, 24115 }, + { 0x075F, 24100 }, + { 0x0760, 24362 }, + { 0x0761, 24376 }, + { 0x0762, 26067 }, + { 0x0763, 26080 }, + { 0x0764, 26094 }, + { 0x0765, 25603 }, + { 0x0766, 25609 }, + { 0x0767, 25644 }, + { 0x0768, 25662 }, + { 0x0769, 25656 }, + { 0x076A, 24723 }, + { 0x076B, 24858 }, + { 0x076C, 24878 }, + { 0x076D, 25759 }, + { 0x076E, 24491 }, + { 0x076F, 24471 }, + { 0x0770, 25774 }, + { 0x0771, 24897 }, + { 0x0772, 24482 }, + { 0x0773, 25393 }, + { 0x0774, 25402 }, + { 0x0775, 25966 }, + { 0x0776, 25986 }, + { 0x0777, 25976 }, + { 0x0778, 25119 }, + { 0x0779, 25128 }, + { 0x077A, 25240 }, + { 0x077B, 25250 }, + { 0x077C, 24516 }, + { 0x077D, 25803 }, + { 0x077E, 25812 }, + { 0x077F, 24681 }, + { 0x0780, 37486 }, + { 0x0781, 37591 }, + { 0x0782, 37534 }, + { 0x0783, 37492 }, + { 0x0784, 37483 }, + { 0x0785, 37588 }, + { 0x0786, 37525 }, + { 0x0787, 37516 }, + { 0x0788, 37543 }, + { 0x0789, 37531 }, + { 0x078A, 37519 }, + { 0x078B, 37552 }, + { 0x078C, 37510 }, + { 0x078D, 37528 }, + { 0x078E, 37522 }, + { 0x078F, 37585 }, + { 0x0790, 37540 }, + { 0x0791, 37567 }, + { 0x0792, 37579 }, + { 0x0793, 37576 }, + { 0x0794, 37495 }, + { 0x0795, 37573 }, + { 0x0796, 37570 }, + { 0x0797, 37582 }, + { 0x0798, 37513 }, + { 0x0799, 37504 }, + { 0x079A, 37507 }, + { 0x079B, 37564 }, + { 0x079C, 37498 }, + { 0x079D, 37561 }, + { 0x079E, 37558 }, + { 0x079F, 37549 }, + { 0x07A0, 37477 }, + { 0x07A1, 37480 }, + { 0x07A2, 37501 }, + { 0x07A3, 37555 }, + { 0x07A4, 37537 }, + { 0x07A5, 37546 }, + { 0x07A6, 37594 }, + { 0x07A7, 37604 }, + { 0x07A8, 37598 }, + { 0x07A9, 37606 }, + { 0x07AA, 37602 }, + { 0x07AB, 37612 }, + { 0x07AC, 37596 }, + { 0x07AD, 37608 }, + { 0x07AE, 37600 }, + { 0x07AF, 37610 }, + { 0x07B0, 37475 }, + { 0x07B1, 37489 }, + { 0x07C0, 6538 }, + { 0x07C1, 6520 }, + { 0x07C2, 6526 }, + { 0x07C3, 6547 }, + { 0x07C4, 6532 }, + { 0x07C5, 6529 }, + { 0x07C6, 6523 }, + { 0x07C7, 6544 }, + { 0x07C8, 6541 }, + { 0x07C9, 6535 }, + { 0x07CA, 6550 }, + { 0x07CB, 6574 }, + { 0x07CC, 6556 }, + { 0x07CD, 6553 }, + { 0x07CE, 6565 }, + { 0x07CF, 6602 }, + { 0x07D0, 6562 }, + { 0x07D1, 6651 }, + { 0x07D2, 6559 }, + { 0x07D3, 6568 }, + { 0x07D4, 6605 }, + { 0x07D5, 6614 }, + { 0x07D6, 6583 }, + { 0x07D7, 6623 }, + { 0x07D8, 6571 }, + { 0x07D9, 6608 }, + { 0x07DA, 6636 }, + { 0x07DB, 6611 }, + { 0x07DC, 6626 }, + { 0x07DD, 6577 }, + { 0x07DE, 6586 }, + { 0x07DF, 6589 }, + { 0x07E0, 6598 }, + { 0x07E1, 6592 }, + { 0x07E2, 6629 }, + { 0x07E3, 6595 }, + { 0x07E4, 6580 }, + { 0x07E5, 6617 }, + { 0x07E6, 6620 }, + { 0x07E7, 6632 }, + { 0x07E8, 6639 }, + { 0x07E9, 6647 }, + { 0x07EA, 6643 }, + { 0x07EB, 6686 }, + { 0x07EC, 6681 }, + { 0x07ED, 6691 }, + { 0x07EE, 6676 }, + { 0x07EF, 6666 }, + { 0x07F0, 6661 }, + { 0x07F1, 6671 }, + { 0x07F2, 6701 }, + { 0x07F3, 6696 }, + { 0x07F4, 6514 }, + { 0x07F5, 6510 }, + { 0x07F6, 6654 }, + { 0x07F7, 6658 }, + { 0x07F8, 6518 }, + { 0x07F9, 6707 }, + { 0x07FA, 6705 }, + { 0x0901, 66870 }, + { 0x0902, 66864 }, + { 0x0903, 66861 }, + { 0x0904, 67167 }, + { 0x0905, 66990 }, + { 0x0906, 67005 }, + { 0x0907, 66996 }, + { 0x0908, 67032 }, + { 0x0909, 67002 }, + { 0x090A, 67065 }, + { 0x090B, 67199 }, + { 0x090C, 67195 }, + { 0x090D, 67183 }, + { 0x090E, 67171 }, + { 0x090F, 66993 }, + { 0x0910, 67008 }, + { 0x0911, 67187 }, + { 0x0912, 67175 }, + { 0x0913, 66999 }, + { 0x0914, 67011 }, + { 0x0915, 67038 }, + { 0x0916, 67104 }, + { 0x0917, 67026 }, + { 0x0918, 67095 }, + { 0x0919, 67110 }, + { 0x091A, 67017 }, + { 0x091B, 67083 }, + { 0x091C, 67035 }, + { 0x091D, 67098 }, + { 0x091E, 67116 }, + { 0x091F, 67137 }, + { 0x0920, 67161 }, + { 0x0921, 67086 }, + { 0x0922, 67146 }, + { 0x0923, 67113 }, + { 0x0924, 67062 }, + { 0x0925, 67134 }, + { 0x0926, 67020 }, + { 0x0927, 67089 }, + { 0x0928, 67047 }, + { 0x0929, 67158 }, + { 0x092A, 67050 }, + { 0x092B, 67119 }, + { 0x092C, 67014 }, + { 0x092D, 67080 }, + { 0x092E, 67044 }, + { 0x092F, 67071 }, + { 0x0930, 67056 }, + { 0x0931, 67125 }, + { 0x0932, 67041 }, + { 0x0933, 67107 }, + { 0x0934, 67155 }, + { 0x0935, 67068 }, + { 0x0936, 67128 }, + { 0x0937, 67131 }, + { 0x0938, 67059 }, + { 0x0939, 67029 }, + { 0x093C, 66855 }, + { 0x093D, 66867 }, + { 0x093E, 66927 }, + { 0x093F, 66915 }, + { 0x0940, 66939 }, + { 0x0941, 66923 }, + { 0x0942, 66943 }, + { 0x0943, 66972 }, + { 0x0944, 66982 }, + { 0x0945, 66957 }, + { 0x0946, 66947 }, + { 0x0947, 66911 }, + { 0x0948, 66931 }, + { 0x0949, 66962 }, + { 0x094A, 66952 }, + { 0x094B, 66919 }, + { 0x094C, 66935 }, + { 0x094D, 66858 }, + { 0x0950, 66848 }, + { 0x0951, 67211 }, + { 0x0952, 67215 }, + { 0x0953, 66908 }, + { 0x0954, 66873 }, + { 0x0958, 67053 }, + { 0x0959, 67152 }, + { 0x095A, 67149 }, + { 0x095B, 67074 }, + { 0x095C, 67164 }, + { 0x095D, 67122 }, + { 0x095E, 67023 }, + { 0x095F, 67140 }, + { 0x0960, 67207 }, + { 0x0961, 67203 }, + { 0x0962, 66967 }, + { 0x0963, 66977 }, + { 0x0964, 66876 }, + { 0x0965, 66987 }, + { 0x0966, 66896 }, + { 0x0967, 66878 }, + { 0x0968, 66884 }, + { 0x0969, 66905 }, + { 0x096A, 66890 }, + { 0x096B, 66887 }, + { 0x096C, 66881 }, + { 0x096D, 66902 }, + { 0x096E, 66899 }, + { 0x096F, 66893 }, + { 0x0970, 67219 }, + { 0x0971, 66850 }, + { 0x0972, 67179 }, + { 0x097B, 67092 }, + { 0x097C, 67101 }, + { 0x097D, 67191 }, + { 0x097E, 67143 }, + { 0x097F, 67077 }, + { 0x0981, 37801 }, + { 0x0982, 37795 }, + { 0x0983, 37792 }, + { 0x0985, 37898 }, + { 0x0986, 37913 }, + { 0x0987, 37904 }, + { 0x0988, 37937 }, + { 0x0989, 37910 }, + { 0x098A, 37979 }, + { 0x098B, 38053 }, + { 0x098C, 38049 }, + { 0x098F, 37901 }, + { 0x0990, 37916 }, + { 0x0993, 37907 }, + { 0x0994, 37919 }, + { 0x0995, 37943 }, + { 0x0996, 38003 }, + { 0x0997, 37931 }, + { 0x0998, 37997 }, + { 0x0999, 38006 }, + { 0x099A, 37925 }, + { 0x099B, 37988 }, + { 0x099C, 37940 }, + { 0x099D, 38000 }, + { 0x099E, 38012 }, + { 0x099F, 38033 }, + { 0x09A0, 38042 }, + { 0x09A1, 37991 }, + { 0x09A2, 38039 }, + { 0x09A3, 38009 }, + { 0x09A4, 37976 }, + { 0x09A5, 38030 }, + { 0x09A6, 37928 }, + { 0x09A7, 37994 }, + { 0x09A8, 37952 }, + { 0x09AA, 37955 }, + { 0x09AB, 38015 }, + { 0x09AC, 37922 }, + { 0x09AD, 37985 }, + { 0x09AE, 37949 }, + { 0x09AF, 37982 }, + { 0x09B0, 37958 }, + { 0x09B2, 37946 }, + { 0x09B6, 38024 }, + { 0x09B7, 38027 }, + { 0x09B8, 37973 }, + { 0x09B9, 37934 }, + { 0x09BC, 37786 }, + { 0x09BD, 37798 }, + { 0x09BE, 37856 }, + { 0x09BF, 37844 }, + { 0x09C0, 37868 }, + { 0x09C1, 37852 }, + { 0x09C2, 37872 }, + { 0x09C3, 37881 }, + { 0x09C4, 37891 }, + { 0x09C7, 37840 }, + { 0x09C8, 37860 }, + { 0x09CB, 37848 }, + { 0x09CC, 37864 }, + { 0x09CD, 37789 }, + { 0x09CE, 38045 }, + { 0x09D7, 37782 }, + { 0x09DC, 38021 }, + { 0x09DD, 38018 }, + { 0x09DF, 38036 }, + { 0x09E0, 38061 }, + { 0x09E1, 38057 }, + { 0x09E2, 37876 }, + { 0x09E3, 37886 }, + { 0x09E6, 37822 }, + { 0x09E7, 37804 }, + { 0x09E8, 37810 }, + { 0x09E9, 37831 }, + { 0x09EA, 37816 }, + { 0x09EB, 37813 }, + { 0x09EC, 37807 }, + { 0x09ED, 37828 }, + { 0x09EE, 37825 }, + { 0x09EF, 37819 }, + { 0x09F0, 37967 }, + { 0x09F1, 37961 }, + { 0x09F2, 37834 }, + { 0x09F3, 37837 }, + { 0x09F4, 38065 }, + { 0x09F5, 38077 }, + { 0x09F6, 38085 }, + { 0x09F7, 38081 }, + { 0x09F8, 38069 }, + { 0x09F9, 38089 }, + { 0x09FA, 37896 }, + { 0x0A01, 52505 }, + { 0x0A02, 52509 }, + { 0x0A03, 52524 }, + { 0x0A05, 52597 }, + { 0x0A06, 52606 }, + { 0x0A07, 52600 }, + { 0x0A08, 52636 }, + { 0x0A09, 52603 }, + { 0x0A0A, 52669 }, + { 0x0A0F, 52624 }, + { 0x0A10, 52609 }, + { 0x0A13, 52654 }, + { 0x0A14, 52612 }, + { 0x0A15, 52642 }, + { 0x0A16, 52699 }, + { 0x0A17, 52630 }, + { 0x0A18, 52693 }, + { 0x0A19, 52705 }, + { 0x0A1A, 52618 }, + { 0x0A1B, 52684 }, + { 0x0A1C, 52639 }, + { 0x0A1D, 52696 }, + { 0x0A1E, 52711 }, + { 0x0A1F, 52726 }, + { 0x0A20, 52738 }, + { 0x0A21, 52687 }, + { 0x0A22, 52729 }, + { 0x0A23, 52708 }, + { 0x0A24, 52666 }, + { 0x0A25, 52723 }, + { 0x0A26, 52621 }, + { 0x0A27, 52690 }, + { 0x0A28, 52651 }, + { 0x0A2A, 52657 }, + { 0x0A2B, 52714 }, + { 0x0A2C, 52615 }, + { 0x0A2D, 52681 }, + { 0x0A2E, 52648 }, + { 0x0A2F, 52675 }, + { 0x0A30, 52660 }, + { 0x0A32, 52645 }, + { 0x0A33, 52702 }, + { 0x0A35, 52672 }, + { 0x0A36, 52720 }, + { 0x0A38, 52663 }, + { 0x0A39, 52633 }, + { 0x0A3C, 52512 }, + { 0x0A3E, 52569 }, + { 0x0A3F, 52561 }, + { 0x0A40, 52585 }, + { 0x0A41, 52565 }, + { 0x0A42, 52593 }, + { 0x0A47, 52581 }, + { 0x0A48, 52573 }, + { 0x0A4B, 52589 }, + { 0x0A4C, 52577 }, + { 0x0A4D, 52518 }, + { 0x0A51, 52515 }, + { 0x0A59, 52735 }, + { 0x0A5A, 52732 }, + { 0x0A5B, 52678 }, + { 0x0A5C, 52717 }, + { 0x0A5E, 52627 }, + { 0x0A66, 52547 }, + { 0x0A67, 52529 }, + { 0x0A68, 52535 }, + { 0x0A69, 52556 }, + { 0x0A6A, 52541 }, + { 0x0A6B, 52538 }, + { 0x0A6C, 52532 }, + { 0x0A6D, 52553 }, + { 0x0A6E, 52550 }, + { 0x0A6F, 52544 }, + { 0x0A70, 52559 }, + { 0x0A71, 52527 }, + { 0x0A72, 52501 }, + { 0x0A73, 52503 }, + { 0x0A74, 52498 }, + { 0x0A75, 52521 }, + { 0x0A81, 52240 }, + { 0x0A82, 52234 }, + { 0x0A83, 52231 }, + { 0x0A85, 52350 }, + { 0x0A86, 52365 }, + { 0x0A87, 52356 }, + { 0x0A88, 52389 }, + { 0x0A89, 52362 }, + { 0x0A8A, 52419 }, + { 0x0A8B, 52486 }, + { 0x0A8C, 52482 }, + { 0x0A8D, 52342 }, + { 0x0A8F, 52353 }, + { 0x0A90, 52368 }, + { 0x0A91, 52346 }, + { 0x0A93, 52359 }, + { 0x0A94, 52371 }, + { 0x0A95, 52395 }, + { 0x0A96, 52446 }, + { 0x0A97, 52383 }, + { 0x0A98, 52440 }, + { 0x0A99, 52452 }, + { 0x0A9A, 52377 }, + { 0x0A9B, 52431 }, + { 0x0A9C, 52392 }, + { 0x0A9D, 52443 }, + { 0x0A9E, 52458 }, + { 0x0A9F, 52473 }, + { 0x0AA0, 52479 }, + { 0x0AA1, 52434 }, + { 0x0AA2, 52476 }, + { 0x0AA3, 52455 }, + { 0x0AA4, 52416 }, + { 0x0AA5, 52470 }, + { 0x0AA6, 52380 }, + { 0x0AA7, 52437 }, + { 0x0AA8, 52404 }, + { 0x0AAA, 52407 }, + { 0x0AAB, 52461 }, + { 0x0AAC, 52374 }, + { 0x0AAD, 52428 }, + { 0x0AAE, 52401 }, + { 0x0AAF, 52425 }, + { 0x0AB0, 52410 }, + { 0x0AB2, 52398 }, + { 0x0AB3, 52449 }, + { 0x0AB5, 52422 }, + { 0x0AB6, 52464 }, + { 0x0AB7, 52467 }, + { 0x0AB8, 52413 }, + { 0x0AB9, 52386 }, + { 0x0ABC, 52225 }, + { 0x0ABD, 52237 }, + { 0x0ABE, 52292 }, + { 0x0ABF, 52280 }, + { 0x0AC0, 52304 }, + { 0x0AC1, 52288 }, + { 0x0AC2, 52308 }, + { 0x0AC3, 52327 }, + { 0x0AC4, 52337 }, + { 0x0AC5, 52312 }, + { 0x0AC7, 52276 }, + { 0x0AC8, 52296 }, + { 0x0AC9, 52317 }, + { 0x0ACB, 52284 }, + { 0x0ACC, 52300 }, + { 0x0ACD, 52228 }, + { 0x0AD0, 52223 }, + { 0x0AE0, 52494 }, + { 0x0AE1, 52490 }, + { 0x0AE2, 52322 }, + { 0x0AE3, 52332 }, + { 0x0AE6, 52261 }, + { 0x0AE7, 52243 }, + { 0x0AE8, 52249 }, + { 0x0AE9, 52270 }, + { 0x0AEA, 52255 }, + { 0x0AEB, 52252 }, + { 0x0AEC, 52246 }, + { 0x0AED, 52267 }, + { 0x0AEE, 52264 }, + { 0x0AEF, 52258 }, + { 0x0AF1, 52273 }, + { 0x0B01, 21480 }, + { 0x0B02, 21474 }, + { 0x0B03, 21471 }, + { 0x0B05, 21571 }, + { 0x0B06, 21586 }, + { 0x0B07, 21577 }, + { 0x0B08, 21610 }, + { 0x0B09, 21583 }, + { 0x0B0A, 21640 }, + { 0x0B0B, 21719 }, + { 0x0B0C, 21715 }, + { 0x0B0F, 21574 }, + { 0x0B10, 21589 }, + { 0x0B13, 21580 }, + { 0x0B14, 21592 }, + { 0x0B15, 21616 }, + { 0x0B16, 21670 }, + { 0x0B17, 21604 }, + { 0x0B18, 21664 }, + { 0x0B19, 21676 }, + { 0x0B1A, 21598 }, + { 0x0B1B, 21655 }, + { 0x0B1C, 21613 }, + { 0x0B1D, 21667 }, + { 0x0B1E, 21682 }, + { 0x0B1F, 21703 }, + { 0x0B20, 21712 }, + { 0x0B21, 21658 }, + { 0x0B22, 21709 }, + { 0x0B23, 21679 }, + { 0x0B24, 21637 }, + { 0x0B25, 21700 }, + { 0x0B26, 21601 }, + { 0x0B27, 21661 }, + { 0x0B28, 21625 }, + { 0x0B2A, 21628 }, + { 0x0B2B, 21685 }, + { 0x0B2C, 21595 }, + { 0x0B2D, 21652 }, + { 0x0B2E, 21622 }, + { 0x0B2F, 21649 }, + { 0x0B30, 21631 }, + { 0x0B32, 21619 }, + { 0x0B33, 21673 }, + { 0x0B35, 21643 }, + { 0x0B36, 21694 }, + { 0x0B37, 21697 }, + { 0x0B38, 21634 }, + { 0x0B39, 21607 }, + { 0x0B3C, 21465 }, + { 0x0B3D, 21477 }, + { 0x0B3E, 21529 }, + { 0x0B3F, 21517 }, + { 0x0B40, 21541 }, + { 0x0B41, 21525 }, + { 0x0B42, 21545 }, + { 0x0B43, 21554 }, + { 0x0B44, 21564 }, + { 0x0B47, 21513 }, + { 0x0B48, 21533 }, + { 0x0B4B, 21521 }, + { 0x0B4C, 21537 }, + { 0x0B4D, 21468 }, + { 0x0B56, 21457 }, + { 0x0B57, 21461 }, + { 0x0B5C, 21691 }, + { 0x0B5D, 21688 }, + { 0x0B5F, 21706 }, + { 0x0B60, 21727 }, + { 0x0B61, 21723 }, + { 0x0B62, 21549 }, + { 0x0B63, 21559 }, + { 0x0B66, 21501 }, + { 0x0B67, 21483 }, + { 0x0B68, 21489 }, + { 0x0B69, 21510 }, + { 0x0B6A, 21495 }, + { 0x0B6B, 21492 }, + { 0x0B6C, 21486 }, + { 0x0B6D, 21507 }, + { 0x0B6E, 21504 }, + { 0x0B6F, 21498 }, + { 0x0B70, 21569 }, + { 0x0B71, 21646 }, + { 0x0B82, 22772 }, + { 0x0B83, 22769 }, + { 0x0B85, 22864 }, + { 0x0B86, 22879 }, + { 0x0B87, 22870 }, + { 0x0B88, 22897 }, + { 0x0B89, 22876 }, + { 0x0B8A, 22930 }, + { 0x0B8E, 22867 }, + { 0x0B8F, 22891 }, + { 0x0B90, 22882 }, + { 0x0B92, 22873 }, + { 0x0B93, 22915 }, + { 0x0B94, 22885 }, + { 0x0B95, 22903 }, + { 0x0B99, 22942 }, + { 0x0B9A, 22888 }, + { 0x0B9C, 22900 }, + { 0x0B9E, 22948 }, + { 0x0B9F, 22960 }, + { 0x0BA3, 22945 }, + { 0x0BA4, 22927 }, + { 0x0BA8, 22912 }, + { 0x0BA9, 22966 }, + { 0x0BAA, 22918 }, + { 0x0BAE, 22909 }, + { 0x0BAF, 22936 }, + { 0x0BB0, 22921 }, + { 0x0BB1, 22951 }, + { 0x0BB2, 22906 }, + { 0x0BB3, 22939 }, + { 0x0BB4, 22963 }, + { 0x0BB5, 22933 }, + { 0x0BB6, 22954 }, + { 0x0BB7, 22957 }, + { 0x0BB8, 22924 }, + { 0x0BB9, 22894 }, + { 0x0BBE, 22833 }, + { 0x0BBF, 22821 }, + { 0x0BC0, 22849 }, + { 0x0BC1, 22829 }, + { 0x0BC2, 22857 }, + { 0x0BC6, 22817 }, + { 0x0BC7, 22845 }, + { 0x0BC8, 22837 }, + { 0x0BCA, 22825 }, + { 0x0BCB, 22853 }, + { 0x0BCC, 22841 }, + { 0x0BCD, 22766 }, + { 0x0BD0, 22761 }, + { 0x0BD7, 22757 }, + { 0x0BE6, 22799 }, + { 0x0BE7, 22781 }, + { 0x0BE8, 22787 }, + { 0x0BE9, 22808 }, + { 0x0BEA, 22793 }, + { 0x0BEB, 22790 }, + { 0x0BEC, 22784 }, + { 0x0BED, 22805 }, + { 0x0BEE, 22802 }, + { 0x0BEF, 22796 }, + { 0x0BF0, 22977 }, + { 0x0BF1, 22969 }, + { 0x0BF2, 22973 }, + { 0x0BF3, 22763 }, + { 0x0BF4, 22811 }, + { 0x0BF5, 22775 }, + { 0x0BF6, 22778 }, + { 0x0BF7, 22861 }, + { 0x0BF8, 22753 }, + { 0x0BF9, 22814 }, + { 0x0BFA, 22980 }, + { 0x0C01, 37149 }, + { 0x0C02, 37143 }, + { 0x0C03, 37140 }, + { 0x0C05, 37249 }, + { 0x0C06, 37264 }, + { 0x0C07, 37255 }, + { 0x0C08, 37291 }, + { 0x0C09, 37261 }, + { 0x0C0A, 37324 }, + { 0x0C0B, 37400 }, + { 0x0C0C, 37396 }, + { 0x0C0E, 37252 }, + { 0x0C0F, 37282 }, + { 0x0C10, 37267 }, + { 0x0C12, 37258 }, + { 0x0C13, 37309 }, + { 0x0C14, 37270 }, + { 0x0C15, 37297 }, + { 0x0C16, 37354 }, + { 0x0C17, 37285 }, + { 0x0C18, 37348 }, + { 0x0C19, 37360 }, + { 0x0C1A, 37276 }, + { 0x0C1B, 37336 }, + { 0x0C1C, 37294 }, + { 0x0C1D, 37351 }, + { 0x0C1E, 37366 }, + { 0x0C1F, 37387 }, + { 0x0C20, 37393 }, + { 0x0C21, 37339 }, + { 0x0C22, 37390 }, + { 0x0C23, 37363 }, + { 0x0C24, 37321 }, + { 0x0C25, 37381 }, + { 0x0C26, 37279 }, + { 0x0C27, 37342 }, + { 0x0C28, 37306 }, + { 0x0C2A, 37312 }, + { 0x0C2B, 37369 }, + { 0x0C2C, 37273 }, + { 0x0C2D, 37333 }, + { 0x0C2E, 37303 }, + { 0x0C2F, 37330 }, + { 0x0C30, 37315 }, + { 0x0C31, 37372 }, + { 0x0C32, 37300 }, + { 0x0C33, 37357 }, + { 0x0C35, 37327 }, + { 0x0C36, 37375 }, + { 0x0C37, 37378 }, + { 0x0C38, 37318 }, + { 0x0C39, 37288 }, + { 0x0C3D, 37146 }, + { 0x0C3E, 37198 }, + { 0x0C3F, 37186 }, + { 0x0C40, 37214 }, + { 0x0C41, 37194 }, + { 0x0C42, 37222 }, + { 0x0C43, 37231 }, + { 0x0C44, 37241 }, + { 0x0C46, 37182 }, + { 0x0C47, 37210 }, + { 0x0C48, 37202 }, + { 0x0C4A, 37190 }, + { 0x0C4B, 37218 }, + { 0x0C4C, 37206 }, + { 0x0C4D, 37137 }, + { 0x0C55, 37246 }, + { 0x0C56, 37130 }, + { 0x0C58, 37384 }, + { 0x0C59, 37345 }, + { 0x0C60, 37408 }, + { 0x0C61, 37404 }, + { 0x0C62, 37226 }, + { 0x0C63, 37236 }, + { 0x0C66, 37170 }, + { 0x0C67, 37152 }, + { 0x0C68, 37158 }, + { 0x0C69, 37179 }, + { 0x0C6A, 37164 }, + { 0x0C6B, 37161 }, + { 0x0C6C, 37155 }, + { 0x0C6D, 37176 }, + { 0x0C6E, 37173 }, + { 0x0C6F, 37167 }, + { 0x0C78, 37448 }, + { 0x0C79, 37412 }, + { 0x0C7A, 37430 }, + { 0x0C7B, 37457 }, + { 0x0C7C, 37421 }, + { 0x0C7D, 37439 }, + { 0x0C7E, 37466 }, + { 0x0C7F, 37134 }, + { 0x0C82, 40655 }, + { 0x0C83, 40652 }, + { 0x0C85, 40764 }, + { 0x0C86, 40779 }, + { 0x0C87, 40770 }, + { 0x0C88, 40809 }, + { 0x0C89, 40776 }, + { 0x0C8A, 40842 }, + { 0x0C8B, 40912 }, + { 0x0C8C, 40908 }, + { 0x0C8E, 40767 }, + { 0x0C8F, 40797 }, + { 0x0C90, 40782 }, + { 0x0C92, 40773 }, + { 0x0C93, 40827 }, + { 0x0C94, 40785 }, + { 0x0C95, 40815 }, + { 0x0C96, 40869 }, + { 0x0C97, 40803 }, + { 0x0C98, 40863 }, + { 0x0C99, 40875 }, + { 0x0C9A, 40791 }, + { 0x0C9B, 40854 }, + { 0x0C9C, 40812 }, + { 0x0C9D, 40866 }, + { 0x0C9E, 40881 }, + { 0x0C9F, 40899 }, + { 0x0CA0, 40905 }, + { 0x0CA1, 40857 }, + { 0x0CA2, 40902 }, + { 0x0CA3, 40878 }, + { 0x0CA4, 40839 }, + { 0x0CA5, 40896 }, + { 0x0CA6, 40794 }, + { 0x0CA7, 40860 }, + { 0x0CA8, 40824 }, + { 0x0CAA, 40830 }, + { 0x0CAB, 40884 }, + { 0x0CAC, 40788 }, + { 0x0CAD, 40851 }, + { 0x0CAE, 40821 }, + { 0x0CAF, 40848 }, + { 0x0CB0, 40833 }, + { 0x0CB1, 40887 }, + { 0x0CB2, 40818 }, + { 0x0CB3, 40872 }, + { 0x0CB5, 40845 }, + { 0x0CB6, 40890 }, + { 0x0CB7, 40893 }, + { 0x0CB8, 40836 }, + { 0x0CB9, 40806 }, + { 0x0CBC, 40646 }, + { 0x0CBD, 40658 }, + { 0x0CBE, 40713 }, + { 0x0CBF, 40701 }, + { 0x0CC0, 40729 }, + { 0x0CC1, 40709 }, + { 0x0CC2, 40737 }, + { 0x0CC3, 40746 }, + { 0x0CC4, 40756 }, + { 0x0CC6, 40697 }, + { 0x0CC7, 40725 }, + { 0x0CC8, 40717 }, + { 0x0CCA, 40705 }, + { 0x0CCB, 40733 }, + { 0x0CCC, 40721 }, + { 0x0CCD, 40649 }, + { 0x0CD5, 40761 }, + { 0x0CD6, 40642 }, + { 0x0CDE, 40800 }, + { 0x0CE0, 40920 }, + { 0x0CE1, 40916 }, + { 0x0CE2, 40741 }, + { 0x0CE3, 40751 }, + { 0x0CE6, 40685 }, + { 0x0CE7, 40667 }, + { 0x0CE8, 40673 }, + { 0x0CE9, 40694 }, + { 0x0CEA, 40679 }, + { 0x0CEB, 40676 }, + { 0x0CEC, 40670 }, + { 0x0CED, 40691 }, + { 0x0CEE, 40688 }, + { 0x0CEF, 40682 }, + { 0x0CF1, 40661 }, + { 0x0CF2, 40664 }, + { 0x0D02, 64805 }, + { 0x0D03, 64802 }, + { 0x0D05, 64905 }, + { 0x0D06, 64920 }, + { 0x0D07, 64911 }, + { 0x0D08, 64947 }, + { 0x0D09, 64917 }, + { 0x0D0A, 64980 }, + { 0x0D0B, 65077 }, + { 0x0D0C, 65073 }, + { 0x0D0E, 64908 }, + { 0x0D0F, 64938 }, + { 0x0D10, 64923 }, + { 0x0D12, 64914 }, + { 0x0D13, 64965 }, + { 0x0D14, 64926 }, + { 0x0D15, 64953 }, + { 0x0D16, 65007 }, + { 0x0D17, 64941 }, + { 0x0D18, 65001 }, + { 0x0D19, 65013 }, + { 0x0D1A, 64932 }, + { 0x0D1B, 64992 }, + { 0x0D1C, 64950 }, + { 0x0D1D, 65004 }, + { 0x0D1E, 65019 }, + { 0x0D1F, 65037 }, + { 0x0D20, 65046 }, + { 0x0D21, 64995 }, + { 0x0D22, 65040 }, + { 0x0D23, 65016 }, + { 0x0D24, 64977 }, + { 0x0D25, 65034 }, + { 0x0D26, 64935 }, + { 0x0D27, 64998 }, + { 0x0D28, 64962 }, + { 0x0D2A, 64968 }, + { 0x0D2B, 65022 }, + { 0x0D2C, 64929 }, + { 0x0D2D, 64989 }, + { 0x0D2E, 64959 }, + { 0x0D2F, 64986 }, + { 0x0D30, 64971 }, + { 0x0D31, 65025 }, + { 0x0D32, 64956 }, + { 0x0D33, 65010 }, + { 0x0D34, 65043 }, + { 0x0D35, 64983 }, + { 0x0D36, 65028 }, + { 0x0D37, 65031 }, + { 0x0D38, 64974 }, + { 0x0D39, 64944 }, + { 0x0D3D, 64808 }, + { 0x0D3E, 64857 }, + { 0x0D3F, 64845 }, + { 0x0D40, 64873 }, + { 0x0D41, 64853 }, + { 0x0D42, 64881 }, + { 0x0D43, 64890 }, + { 0x0D44, 64900 }, + { 0x0D46, 64841 }, + { 0x0D47, 64869 }, + { 0x0D48, 64861 }, + { 0x0D4A, 64849 }, + { 0x0D4B, 64877 }, + { 0x0D4C, 64865 }, + { 0x0D4D, 64799 }, + { 0x0D57, 64792 }, + { 0x0D60, 65085 }, + { 0x0D61, 65081 }, + { 0x0D62, 64885 }, + { 0x0D63, 64895 }, + { 0x0D66, 64829 }, + { 0x0D67, 64811 }, + { 0x0D68, 64817 }, + { 0x0D69, 64838 }, + { 0x0D6A, 64823 }, + { 0x0D6B, 64820 }, + { 0x0D6C, 64814 }, + { 0x0D6D, 64835 }, + { 0x0D6E, 64832 }, + { 0x0D6F, 64826 }, + { 0x0D70, 65097 }, + { 0x0D71, 65089 }, + { 0x0D72, 65093 }, + { 0x0D73, 65104 }, + { 0x0D74, 65100 }, + { 0x0D75, 65108 }, + { 0x0D79, 64796 }, + { 0x0D7A, 65065 }, + { 0x0D7B, 65057 }, + { 0x0D7C, 65069 }, + { 0x0D7D, 65053 }, + { 0x0D7E, 65061 }, + { 0x0D7F, 65049 }, + { 0x0D82, 43201 }, + { 0x0D83, 43198 }, + { 0x0D85, 43293 }, + { 0x0D86, 43308 }, + { 0x0D87, 43311 }, + { 0x0D88, 43395 }, + { 0x0D89, 43299 }, + { 0x0D8A, 43341 }, + { 0x0D8B, 43305 }, + { 0x0D8C, 43386 }, + { 0x0D8D, 43401 }, + { 0x0D8E, 43407 }, + { 0x0D8F, 43398 }, + { 0x0D90, 43404 }, + { 0x0D91, 43296 }, + { 0x0D92, 43332 }, + { 0x0D93, 43314 }, + { 0x0D94, 43302 }, + { 0x0D95, 43351 }, + { 0x0D96, 43317 }, + { 0x0D9A, 43442 }, + { 0x0D9B, 43482 }, + { 0x0D9C, 43434 }, + { 0x0D9D, 43474 }, + { 0x0D9E, 43344 }, + { 0x0D9F, 43361 }, + { 0x0DA0, 43426 }, + { 0x0DA1, 43466 }, + { 0x0DA2, 43438 }, + { 0x0DA3, 43478 }, + { 0x0DA4, 43382 }, + { 0x0DA5, 43377 }, + { 0x0DA6, 43365 }, + { 0x0DA7, 43458 }, + { 0x0DA8, 43498 }, + { 0x0DA9, 43454 }, + { 0x0DAA, 43494 }, + { 0x0DAB, 43414 }, + { 0x0DAC, 43369 }, + { 0x0DAD, 43450 }, + { 0x0DAE, 43490 }, + { 0x0DAF, 43430 }, + { 0x0DB0, 43470 }, + { 0x0DB1, 43324 }, + { 0x0DB3, 43357 }, + { 0x0DB4, 43446 }, + { 0x0DB5, 43486 }, + { 0x0DB6, 43422 }, + { 0x0DB7, 43462 }, + { 0x0DB8, 43348 }, + { 0x0DB9, 43289 }, + { 0x0DBA, 43392 }, + { 0x0DBB, 43354 }, + { 0x0DBD, 43320 }, + { 0x0DC0, 43389 }, + { 0x0DC1, 43373 }, + { 0x0DC2, 43418 }, + { 0x0DC3, 43328 }, + { 0x0DC4, 43338 }, + { 0x0DC5, 43410 }, + { 0x0DC6, 43335 }, + { 0x0DCA, 43195 }, + { 0x0DCF, 43277 }, + { 0x0DD0, 43244 }, + { 0x0DD1, 43219 }, + { 0x0DD2, 43234 }, + { 0x0DD3, 43209 }, + { 0x0DD4, 43239 }, + { 0x0DD6, 43214 }, + { 0x0DD8, 43285 }, + { 0x0DD9, 43254 }, + { 0x0DDA, 43204 }, + { 0x0DDB, 43249 }, + { 0x0DDC, 43265 }, + { 0x0DDD, 43258 }, + { 0x0DDE, 43271 }, + { 0x0DDF, 43281 }, + { 0x0DF2, 43229 }, + { 0x0DF3, 43224 }, + { 0x0DF4, 43502 }, + { 0x0E01, 9790 }, + { 0x0E02, 9880 }, + { 0x0E03, 9888 }, + { 0x0E04, 9892 }, + { 0x0E05, 9884 }, + { 0x0E06, 9896 }, + { 0x0E07, 9920 }, + { 0x0E08, 9864 }, + { 0x0E09, 9876 }, + { 0x0E0A, 9872 }, + { 0x0E0B, 9828 }, + { 0x0E0C, 9868 }, + { 0x0E0D, 9860 }, + { 0x0E0E, 9770 }, + { 0x0E0F, 9848 }, + { 0x0E10, 9936 }, + { 0x0E11, 9956 }, + { 0x0E12, 9952 }, + { 0x0E13, 9813 }, + { 0x0E14, 9766 }, + { 0x0E15, 9844 }, + { 0x0E16, 9944 }, + { 0x0E17, 9948 }, + { 0x0E18, 9940 }, + { 0x0E19, 9809 }, + { 0x0E1A, 9762 }, + { 0x0E1B, 9817 }, + { 0x0E1C, 9928 }, + { 0x0E1D, 9774 }, + { 0x0E1E, 9924 }, + { 0x0E1F, 9778 }, + { 0x0E20, 9932 }, + { 0x0E21, 9805 }, + { 0x0E22, 9856 }, + { 0x0E23, 9821 }, + { 0x0E24, 9825 }, + { 0x0E25, 9794 }, + { 0x0E26, 9802 }, + { 0x0E27, 9852 }, + { 0x0E28, 9840 }, + { 0x0E29, 9836 }, + { 0x0E2A, 9832 }, + { 0x0E2B, 9782 }, + { 0x0E2C, 9798 }, + { 0x0E2D, 9758 }, + { 0x0E2E, 9786 }, + { 0x0E2F, 10039 }, + { 0x0E30, 9960 }, + { 0x0E31, 9916 }, + { 0x0E32, 9980 }, + { 0x0E33, 9998 }, + { 0x0E34, 9968 }, + { 0x0E35, 10002 }, + { 0x0E36, 10006 }, + { 0x0E37, 10014 }, + { 0x0E38, 9976 }, + { 0x0E39, 10010 }, + { 0x0E3A, 10024 }, + { 0x0E3F, 9754 }, + { 0x0E40, 9964 }, + { 0x0E41, 9984 }, + { 0x0E42, 9972 }, + { 0x0E43, 9988 }, + { 0x0E44, 9993 }, + { 0x0E45, 10045 }, + { 0x0E46, 10027 }, + { 0x0E47, 10036 }, + { 0x0E48, 9900 }, + { 0x0E49, 9904 }, + { 0x0E4A, 9908 }, + { 0x0E4B, 9912 }, + { 0x0E4C, 10048 }, + { 0x0E4D, 10030 }, + { 0x0E4E, 10033 }, + { 0x0E4F, 10021 }, + { 0x0E50, 9742 }, + { 0x0E51, 9724 }, + { 0x0E52, 9730 }, + { 0x0E53, 9751 }, + { 0x0E54, 9736 }, + { 0x0E55, 9733 }, + { 0x0E56, 9727 }, + { 0x0E57, 9748 }, + { 0x0E58, 9745 }, + { 0x0E59, 9739 }, + { 0x0E5A, 10042 }, + { 0x0E5B, 10018 }, + { 0x0E81, 5948 }, + { 0x0E82, 5989 }, + { 0x0E84, 5985 }, + { 0x0E87, 5993 }, + { 0x0E88, 5926 }, + { 0x0E8A, 5968 }, + { 0x0E8D, 5996 }, + { 0x0E94, 5929 }, + { 0x0E95, 5976 }, + { 0x0E96, 6011 }, + { 0x0E97, 6007 }, + { 0x0E99, 5962 }, + { 0x0E9A, 5923 }, + { 0x0E9B, 5965 }, + { 0x0E9C, 6003 }, + { 0x0E9D, 5932 }, + { 0x0E9E, 5999 }, + { 0x0E9F, 5936 }, + { 0x0EA1, 5959 }, + { 0x0EA2, 5982 }, + { 0x0EA3, 5951 }, + { 0x0EA5, 5955 }, + { 0x0EA7, 5979 }, + { 0x0EAA, 5972 }, + { 0x0EAB, 5944 }, + { 0x0EAD, 5920 }, + { 0x0EAE, 5940 }, + { 0x0EAF, 6015 }, + { 0x0EB0, 5854 }, + { 0x0EB1, 5910 }, + { 0x0EB2, 5878 }, + { 0x0EB3, 5886 }, + { 0x0EB4, 5862 }, + { 0x0EB5, 5898 }, + { 0x0EB6, 5874 }, + { 0x0EB7, 5906 }, + { 0x0EB8, 5870 }, + { 0x0EB9, 5902 }, + { 0x0EBB, 5915 }, + { 0x0EBC, 6019 }, + { 0x0EBD, 6023 }, + { 0x0EC0, 5858 }, + { 0x0EC1, 5894 }, + { 0x0EC2, 5866 }, + { 0x0EC3, 5890 }, + { 0x0EC4, 5882 }, + { 0x0EC6, 5805 }, + { 0x0EC8, 5808 }, + { 0x0EC9, 5816 }, + { 0x0ECA, 5812 }, + { 0x0ECB, 5820 }, + { 0x0ECC, 6027 }, + { 0x0ECD, 6017 }, + { 0x0ED0, 5842 }, + { 0x0ED1, 5824 }, + { 0x0ED2, 5830 }, + { 0x0ED3, 5851 }, + { 0x0ED4, 5836 }, + { 0x0ED5, 5833 }, + { 0x0ED6, 5827 }, + { 0x0ED7, 5848 }, + { 0x0ED8, 5845 }, + { 0x0ED9, 5839 }, + { 0x0EDC, 5802 }, + { 0x0EDD, 5799 }, + { 0x0F00, 44295 }, + { 0x0F01, 43729 }, + { 0x0F02, 43720 }, + { 0x0F03, 43711 }, + { 0x0F04, 43850 }, + { 0x0F05, 43831 }, + { 0x0F06, 43789 }, + { 0x0F07, 43698 }, + { 0x0F08, 43820 }, + { 0x0F09, 43784 }, + { 0x0F0A, 43705 }, + { 0x0F0B, 43871 }, + { 0x0F0C, 43866 }, + { 0x0F0D, 43770 }, + { 0x0F0E, 43752 }, + { 0x0F0F, 43824 }, + { 0x0F10, 43760 }, + { 0x0F11, 43688 }, + { 0x0F12, 43765 }, + { 0x0F13, 43797 }, + { 0x0F14, 43736 }, + { 0x0F15, 44285 }, + { 0x0F16, 44290 }, + { 0x0F17, 44477 }, + { 0x0F18, 44489 }, + { 0x0F19, 44484 }, + { 0x0F1A, 43937 }, + { 0x0F1B, 43953 }, + { 0x0F1C, 43942 }, + { 0x0F1D, 43916 }, + { 0x0F1E, 43932 }, + { 0x0F1F, 43947 }, + { 0x0F20, 44030 }, + { 0x0F21, 43972 }, + { 0x0F22, 43978 }, + { 0x0F23, 44039 }, + { 0x0F24, 43984 }, + { 0x0F25, 43981 }, + { 0x0F26, 43975 }, + { 0x0F27, 44036 }, + { 0x0F28, 44033 }, + { 0x0F29, 44027 }, + { 0x0F2A, 43987 }, + { 0x0F2B, 43995 }, + { 0x0F2C, 44023 }, + { 0x0F2D, 44003 }, + { 0x0F2E, 43999 }, + { 0x0F2F, 43991 }, + { 0x0F30, 44019 }, + { 0x0F31, 44015 }, + { 0x0F32, 44007 }, + { 0x0F33, 44011 }, + { 0x0F34, 43773 }, + { 0x0F35, 43740 }, + { 0x0F36, 43805 }, + { 0x0F37, 43746 }, + { 0x0F38, 43674 }, + { 0x0F39, 43694 }, + { 0x0F3A, 43683 }, + { 0x0F3B, 43678 }, + { 0x0F3C, 43669 }, + { 0x0F3D, 43664 }, + { 0x0F3E, 43908 }, + { 0x0F3F, 43894 }, + { 0x0F40, 44132 }, + { 0x0F41, 44183 }, + { 0x0F42, 44123 }, + { 0x0F43, 44180 }, + { 0x0F44, 44189 }, + { 0x0F45, 44117 }, + { 0x0F46, 44168 }, + { 0x0F47, 44129 }, + { 0x0F49, 44195 }, + { 0x0F4A, 44216 }, + { 0x0F4B, 44234 }, + { 0x0F4C, 44171 }, + { 0x0F4D, 44222 }, + { 0x0F4E, 44192 }, + { 0x0F4F, 44153 }, + { 0x0F50, 44210 }, + { 0x0F51, 44120 }, + { 0x0F52, 44174 }, + { 0x0F53, 44141 }, + { 0x0F54, 44144 }, + { 0x0F55, 44198 }, + { 0x0F56, 44114 }, + { 0x0F57, 44165 }, + { 0x0F58, 44138 }, + { 0x0F59, 44213 }, + { 0x0F5A, 44231 }, + { 0x0F5B, 44177 }, + { 0x0F5C, 44225 }, + { 0x0F5D, 44156 }, + { 0x0F5E, 44219 }, + { 0x0F5F, 44162 }, + { 0x0F60, 44111 }, + { 0x0F61, 44159 }, + { 0x0F62, 44147 }, + { 0x0F63, 44135 }, + { 0x0F64, 44204 }, + { 0x0F65, 44207 }, + { 0x0F66, 44150 }, + { 0x0F67, 44126 }, + { 0x0F68, 44108 }, + { 0x0F69, 44228 }, + { 0x0F6A, 44237 }, + { 0x0F6B, 44186 }, + { 0x0F6C, 44201 }, + { 0x0F71, 44058 }, + { 0x0F72, 44046 }, + { 0x0F73, 44066 }, + { 0x0F74, 44054 }, + { 0x0F75, 44074 }, + { 0x0F76, 44083 }, + { 0x0F77, 44093 }, + { 0x0F78, 44078 }, + { 0x0F79, 44088 }, + { 0x0F7A, 44042 }, + { 0x0F7B, 44062 }, + { 0x0F7C, 44050 }, + { 0x0F7D, 44070 }, + { 0x0F7E, 43958 }, + { 0x0F7F, 43964 }, + { 0x0F80, 44098 }, + { 0x0F81, 44103 }, + { 0x0F82, 43898 }, + { 0x0F83, 43904 }, + { 0x0F84, 43847 }, + { 0x0F85, 43828 }, + { 0x0F86, 43890 }, + { 0x0F87, 43968 }, + { 0x0F88, 43885 }, + { 0x0F89, 43912 }, + { 0x0F8A, 43875 }, + { 0x0F8B, 43880 }, + { 0x0F90, 44330 }, + { 0x0F91, 44398 }, + { 0x0F92, 44318 }, + { 0x0F93, 44394 }, + { 0x0F94, 44402 }, + { 0x0F95, 44310 }, + { 0x0F96, 44378 }, + { 0x0F97, 44326 }, + { 0x0F99, 44410 }, + { 0x0F9A, 44434 }, + { 0x0F9B, 44458 }, + { 0x0F9C, 44382 }, + { 0x0F9D, 44442 }, + { 0x0F9E, 44406 }, + { 0x0F9F, 44358 }, + { 0x0FA0, 44426 }, + { 0x0FA1, 44314 }, + { 0x0FA2, 44386 }, + { 0x0FA3, 44342 }, + { 0x0FA4, 44346 }, + { 0x0FA5, 44414 }, + { 0x0FA6, 44306 }, + { 0x0FA7, 44374 }, + { 0x0FA8, 44338 }, + { 0x0FA9, 44430 }, + { 0x0FAA, 44454 }, + { 0x0FAB, 44390 }, + { 0x0FAC, 44446 }, + { 0x0FAD, 44362 }, + { 0x0FAE, 44438 }, + { 0x0FAF, 44370 }, + { 0x0FB0, 44302 }, + { 0x0FB1, 44366 }, + { 0x0FB2, 44350 }, + { 0x0FB3, 44334 }, + { 0x0FB4, 44418 }, + { 0x0FB5, 44422 }, + { 0x0FB6, 44354 }, + { 0x0FB7, 44322 }, + { 0x0FB8, 44298 }, + { 0x0FB9, 44450 }, + { 0x0FBA, 44467 }, + { 0x0FBB, 44472 }, + { 0x0FBC, 44462 }, + { 0x0FBE, 43653 }, + { 0x0FBF, 43657 }, + { 0x0FC0, 44504 }, + { 0x0FC1, 44509 }, + { 0x0FC2, 44494 }, + { 0x0FC3, 44499 }, + { 0x0FC4, 44273 }, + { 0x0FC5, 44263 }, + { 0x0FC6, 44281 }, + { 0x0FC7, 44267 }, + { 0x0FC8, 44277 }, + { 0x0FC9, 44241 }, + { 0x0FCA, 44257 }, + { 0x0FCB, 44251 }, + { 0x0FCC, 44245 }, + { 0x0FCE, 43926 }, + { 0x0FCF, 43921 }, + { 0x0FD0, 43777 }, + { 0x0FD1, 43813 }, + { 0x0FD2, 43756 }, + { 0x0FD3, 43857 }, + { 0x0FD4, 43838 }, + { 0x1000, 42482 }, + { 0x1001, 42533 }, + { 0x1002, 42470 }, + { 0x1003, 42527 }, + { 0x1004, 42559 }, + { 0x1005, 42464 }, + { 0x1006, 42518 }, + { 0x1007, 42479 }, + { 0x1008, 42530 }, + { 0x1009, 42565 }, + { 0x100A, 42586 }, + { 0x100B, 42580 }, + { 0x100C, 42650 }, + { 0x100D, 42521 }, + { 0x100E, 42583 }, + { 0x100F, 42562 }, + { 0x1010, 42503 }, + { 0x1011, 42577 }, + { 0x1012, 42467 }, + { 0x1013, 42524 }, + { 0x1014, 42491 }, + { 0x1015, 42494 }, + { 0x1016, 42568 }, + { 0x1017, 42461 }, + { 0x1018, 42515 }, + { 0x1019, 42488 }, + { 0x101A, 42512 }, + { 0x101B, 42497 }, + { 0x101C, 42485 }, + { 0x101D, 42509 }, + { 0x101E, 42500 }, + { 0x101F, 42473 }, + { 0x1020, 42536 }, + { 0x1021, 42443 }, + { 0x1022, 42594 }, + { 0x1023, 42449 }, + { 0x1024, 42476 }, + { 0x1025, 42455 }, + { 0x1026, 42506 }, + { 0x1027, 42446 }, + { 0x1028, 42539 }, + { 0x1029, 42452 }, + { 0x102A, 42458 }, + { 0x102B, 42389 }, + { 0x102C, 42329 }, + { 0x102D, 42321 }, + { 0x102E, 42337 }, + { 0x102F, 42325 }, + { 0x1030, 42341 }, + { 0x1031, 42312 }, + { 0x1032, 42333 }, + { 0x1033, 42350 }, + { 0x1034, 42345 }, + { 0x1035, 42316 }, + { 0x1036, 42266 }, + { 0x1037, 42179 }, + { 0x1038, 42233 }, + { 0x1039, 42227 }, + { 0x103A, 42183 }, + { 0x103B, 42767 }, + { 0x103C, 42757 }, + { 0x103D, 42762 }, + { 0x103E, 42752 }, + { 0x103F, 42653 }, + { 0x1040, 42300 }, + { 0x1041, 42282 }, + { 0x1042, 42288 }, + { 0x1043, 42309 }, + { 0x1044, 42294 }, + { 0x1045, 42291 }, + { 0x1046, 42285 }, + { 0x1047, 42306 }, + { 0x1048, 42303 }, + { 0x1049, 42297 }, + { 0x104A, 42223 }, + { 0x104B, 42230 }, + { 0x104C, 42719 }, + { 0x104D, 42722 }, + { 0x104E, 42725 }, + { 0x104F, 42716 }, + { 0x1050, 42571 }, + { 0x1051, 42574 }, + { 0x1052, 42684 }, + { 0x1053, 42692 }, + { 0x1054, 42680 }, + { 0x1055, 42688 }, + { 0x1056, 42414 }, + { 0x1057, 42424 }, + { 0x1058, 42409 }, + { 0x1059, 42419 }, + { 0x105A, 42555 }, + { 0x105B, 42551 }, + { 0x105C, 42543 }, + { 0x105D, 42547 }, + { 0x105E, 42740 }, + { 0x105F, 42734 }, + { 0x1060, 42728 }, + { 0x1061, 42589 }, + { 0x1062, 42361 }, + { 0x1063, 42276 }, + { 0x1064, 42269 }, + { 0x1065, 42702 }, + { 0x1066, 42696 }, + { 0x1067, 42429 }, + { 0x1068, 42436 }, + { 0x1069, 42236 }, + { 0x106A, 42242 }, + { 0x106B, 42248 }, + { 0x106C, 42254 }, + { 0x106D, 42260 }, + { 0x106E, 42662 }, + { 0x106F, 42668 }, + { 0x1070, 42674 }, + { 0x1071, 42355 }, + { 0x1072, 42404 }, + { 0x1073, 42394 }, + { 0x1074, 42399 }, + { 0x1075, 42622 }, + { 0x1076, 42634 }, + { 0x1077, 42614 }, + { 0x1078, 42602 }, + { 0x1079, 42630 }, + { 0x107A, 42638 }, + { 0x107B, 42606 }, + { 0x107C, 42626 }, + { 0x107D, 42642 }, + { 0x107E, 42610 }, + { 0x107F, 42598 }, + { 0x1080, 42646 }, + { 0x1081, 42618 }, + { 0x1082, 42746 }, + { 0x1083, 42378 }, + { 0x1084, 42367 }, + { 0x1085, 42372 }, + { 0x1086, 42383 }, + { 0x1087, 42186 }, + { 0x1088, 42190 }, + { 0x1089, 42194 }, + { 0x108A, 42198 }, + { 0x108B, 42202 }, + { 0x108C, 42207 }, + { 0x108D, 42212 }, + { 0x108E, 42657 }, + { 0x108F, 42218 }, + { 0x1090, 42163 }, + { 0x1091, 42139 }, + { 0x1092, 42147 }, + { 0x1093, 42175 }, + { 0x1094, 42155 }, + { 0x1095, 42151 }, + { 0x1096, 42143 }, + { 0x1097, 42171 }, + { 0x1098, 42167 }, + { 0x1099, 42159 }, + { 0x109E, 42708 }, + { 0x109F, 42712 }, + { 0x10A0, 52068 }, + { 0x10A1, 52096 }, + { 0x10A2, 52112 }, + { 0x10A3, 52108 }, + { 0x10A4, 52072 }, + { 0x10A5, 52176 }, + { 0x10A6, 52184 }, + { 0x10A7, 52168 }, + { 0x10A8, 52080 }, + { 0x10A9, 52136 }, + { 0x10AA, 52140 }, + { 0x10AB, 52144 }, + { 0x10AC, 52148 }, + { 0x10AD, 52084 }, + { 0x10AE, 52152 }, + { 0x10AF, 52216 }, + { 0x10B0, 52160 }, + { 0x10B1, 52164 }, + { 0x10B2, 52172 }, + { 0x10B3, 52088 }, + { 0x10B4, 52208 }, + { 0x10B5, 52204 }, + { 0x10B6, 52196 }, + { 0x10B7, 52156 }, + { 0x10B8, 52212 }, + { 0x10B9, 52192 }, + { 0x10BA, 52100 }, + { 0x10BB, 52132 }, + { 0x10BC, 52104 }, + { 0x10BD, 52188 }, + { 0x10BE, 52180 }, + { 0x10BF, 52200 }, + { 0x10C0, 52116 }, + { 0x10C1, 52076 }, + { 0x10C2, 52124 }, + { 0x10C3, 52092 }, + { 0x10C4, 52120 }, + { 0x10C5, 52128 }, + { 0x10D0, 51938 }, + { 0x10D1, 51968 }, + { 0x10D2, 51980 }, + { 0x10D3, 51977 }, + { 0x10D4, 51941 }, + { 0x10D5, 52028 }, + { 0x10D6, 52034 }, + { 0x10D7, 52022 }, + { 0x10D8, 51950 }, + { 0x10D9, 51998 }, + { 0x10DA, 52001 }, + { 0x10DB, 52004 }, + { 0x10DC, 52007 }, + { 0x10DD, 51953 }, + { 0x10DE, 52010 }, + { 0x10DF, 52058 }, + { 0x10E0, 52016 }, + { 0x10E1, 52019 }, + { 0x10E2, 52025 }, + { 0x10E3, 51956 }, + { 0x10E4, 52052 }, + { 0x10E5, 52049 }, + { 0x10E6, 52043 }, + { 0x10E7, 52013 }, + { 0x10E8, 52055 }, + { 0x10E9, 52040 }, + { 0x10EA, 51971 }, + { 0x10EB, 51995 }, + { 0x10EC, 51974 }, + { 0x10ED, 52037 }, + { 0x10EE, 52031 }, + { 0x10EF, 52046 }, + { 0x10F0, 51983 }, + { 0x10F1, 51947 }, + { 0x10F2, 51989 }, + { 0x10F3, 51959 }, + { 0x10F4, 51986 }, + { 0x10F5, 51992 }, + { 0x10F6, 51944 }, + { 0x10F7, 51962 }, + { 0x10F8, 52061 }, + { 0x10F9, 52064 }, + { 0x10FA, 51965 }, + { 0x10FB, 52220 }, + { 0x10FC, 54786 }, + { 0x1100, 32202 }, + { 0x1101, 32310 }, + { 0x1102, 32190 }, + { 0x1103, 32205 }, + { 0x1104, 32313 }, + { 0x1105, 32196 }, + { 0x1106, 32187 }, + { 0x1107, 32193 }, + { 0x1108, 32268 }, + { 0x1109, 32175 }, + { 0x110A, 32226 }, + { 0x110B, 32184 }, + { 0x110C, 32178 }, + { 0x110D, 32256 }, + { 0x110E, 32208 }, + { 0x110F, 32211 }, + { 0x1110, 32220 }, + { 0x1111, 32217 }, + { 0x1112, 32181 }, + { 0x1113, 32328 }, + { 0x1114, 32265 }, + { 0x1115, 32331 }, + { 0x1116, 32289 }, + { 0x1117, 32391 }, + { 0x1118, 32301 }, + { 0x1119, 32271 }, + { 0x111A, 32298 }, + { 0x111B, 32376 }, + { 0x111C, 32286 }, + { 0x111D, 32370 }, + { 0x111E, 32334 }, + { 0x111F, 32295 }, + { 0x1120, 32337 }, + { 0x1121, 32232 }, + { 0x1122, 32424 }, + { 0x1123, 32427 }, + { 0x1124, 32418 }, + { 0x1125, 32409 }, + { 0x1126, 32415 }, + { 0x1127, 32292 }, + { 0x1128, 32382 }, + { 0x1129, 32388 }, + { 0x112A, 32385 }, + { 0x112B, 32373 }, + { 0x112C, 32439 }, + { 0x112D, 32304 }, + { 0x112E, 32247 }, + { 0x112F, 32307 }, + { 0x1130, 32253 }, + { 0x1131, 32244 }, + { 0x1132, 32250 }, + { 0x1133, 32430 }, + { 0x1134, 32394 }, + { 0x1135, 32241 }, + { 0x1136, 32235 }, + { 0x1137, 32340 }, + { 0x1138, 32343 }, + { 0x1139, 32349 }, + { 0x113A, 32346 }, + { 0x113B, 32238 }, + { 0x113C, 32319 }, + { 0x113D, 32421 }, + { 0x113E, 32397 }, + { 0x113F, 32442 }, + { 0x1140, 32214 }, + { 0x1141, 32322 }, + { 0x1142, 32325 }, + { 0x1143, 32280 }, + { 0x1144, 32283 }, + { 0x1145, 32229 }, + { 0x1146, 32361 }, + { 0x1147, 32262 }, + { 0x1148, 32277 }, + { 0x1149, 32358 }, + { 0x114A, 32367 }, + { 0x114B, 32364 }, + { 0x114C, 32223 }, + { 0x114D, 32274 }, + { 0x114E, 32355 }, + { 0x114F, 32436 }, + { 0x1150, 32412 }, + { 0x1151, 32445 }, + { 0x1152, 32400 }, + { 0x1153, 32352 }, + { 0x1154, 32403 }, + { 0x1155, 32433 }, + { 0x1156, 32379 }, + { 0x1157, 32406 }, + { 0x1158, 32259 }, + { 0x1159, 32316 }, + { 0x115F, 32199 }, + { 0x1160, 32865 }, + { 0x1161, 32694 }, + { 0x1162, 32709 }, + { 0x1163, 32730 }, + { 0x1164, 32781 }, + { 0x1165, 32712 }, + { 0x1166, 32697 }, + { 0x1167, 32784 }, + { 0x1168, 32733 }, + { 0x1169, 32703 }, + { 0x116A, 32721 }, + { 0x116B, 32775 }, + { 0x116C, 32718 }, + { 0x116D, 32739 }, + { 0x116E, 32706 }, + { 0x116F, 32778 }, + { 0x1170, 32724 }, + { 0x1171, 32727 }, + { 0x1172, 32742 }, + { 0x1173, 32715 }, + { 0x1174, 32736 }, + { 0x1175, 32700 }, + { 0x1176, 32745 }, + { 0x1177, 32748 }, + { 0x1178, 32814 }, + { 0x1179, 32847 }, + { 0x117A, 32787 }, + { 0x117B, 32790 }, + { 0x117C, 32841 }, + { 0x117D, 32850 }, + { 0x117E, 32853 }, + { 0x117F, 32802 }, + { 0x1180, 32760 }, + { 0x1181, 32805 }, + { 0x1182, 32763 }, + { 0x1183, 32766 }, + { 0x1184, 32856 }, + { 0x1185, 32868 }, + { 0x1186, 32871 }, + { 0x1187, 32823 }, + { 0x1188, 32820 }, + { 0x1189, 32769 }, + { 0x118A, 32808 }, + { 0x118B, 32886 }, + { 0x118C, 32811 }, + { 0x118D, 32772 }, + { 0x118E, 32826 }, + { 0x118F, 32859 }, + { 0x1190, 32829 }, + { 0x1191, 32874 }, + { 0x1192, 32862 }, + { 0x1193, 32835 }, + { 0x1194, 32832 }, + { 0x1195, 32793 }, + { 0x1196, 32844 }, + { 0x1197, 32817 }, + { 0x1198, 32751 }, + { 0x1199, 32799 }, + { 0x119A, 32754 }, + { 0x119B, 32757 }, + { 0x119C, 32796 }, + { 0x119D, 32883 }, + { 0x119E, 32838 }, + { 0x119F, 32889 }, + { 0x11A0, 32880 }, + { 0x11A1, 32877 }, + { 0x11A2, 32892 }, + { 0x11A8, 32472 }, + { 0x11A9, 32577 }, + { 0x11AA, 32535 }, + { 0x11AB, 32463 }, + { 0x11AC, 32547 }, + { 0x11AD, 32550 }, + { 0x11AE, 32475 }, + { 0x11AF, 32469 }, + { 0x11B0, 32598 }, + { 0x11B1, 32562 }, + { 0x11B2, 32568 }, + { 0x11B3, 32508 }, + { 0x11B4, 32643 }, + { 0x11B5, 32640 }, + { 0x11B6, 32559 }, + { 0x11B7, 32460 }, + { 0x11B8, 32466 }, + { 0x11B9, 32505 }, + { 0x11BA, 32448 }, + { 0x11BB, 32496 }, + { 0x11BC, 32457 }, + { 0x11BD, 32451 }, + { 0x11BE, 32478 }, + { 0x11BF, 32481 }, + { 0x11C0, 32490 }, + { 0x11C1, 32487 }, + { 0x11C2, 32454 }, + { 0x11C3, 32586 }, + { 0x11C4, 32682 }, + { 0x11C5, 32592 }, + { 0x11C6, 32595 }, + { 0x11C7, 32502 }, + { 0x11C8, 32622 }, + { 0x11C9, 32625 }, + { 0x11CA, 32646 }, + { 0x11CB, 32604 }, + { 0x11CC, 32673 }, + { 0x11CD, 32565 }, + { 0x11CE, 32601 }, + { 0x11CF, 32688 }, + { 0x11D0, 32520 }, + { 0x11D1, 32685 }, + { 0x11D2, 32661 }, + { 0x11D3, 32664 }, + { 0x11D4, 32676 }, + { 0x11D5, 32691 }, + { 0x11D6, 32658 }, + { 0x11D7, 32637 }, + { 0x11D8, 32634 }, + { 0x11D9, 32679 }, + { 0x11DA, 32589 }, + { 0x11DB, 32544 }, + { 0x11DC, 32541 }, + { 0x11DD, 32499 }, + { 0x11DE, 32655 }, + { 0x11DF, 32619 }, + { 0x11E0, 32616 }, + { 0x11E1, 32538 }, + { 0x11E2, 32610 }, + { 0x11E3, 32556 }, + { 0x11E4, 32631 }, + { 0x11E5, 32553 }, + { 0x11E6, 32613 }, + { 0x11E7, 32571 }, + { 0x11E8, 32574 }, + { 0x11E9, 32514 }, + { 0x11EA, 32511 }, + { 0x11EB, 32484 }, + { 0x11EC, 32583 }, + { 0x11ED, 32670 }, + { 0x11EE, 32517 }, + { 0x11EF, 32607 }, + { 0x11F0, 32493 }, + { 0x11F1, 32649 }, + { 0x11F2, 32667 }, + { 0x11F3, 32628 }, + { 0x11F4, 32652 }, + { 0x11F5, 32526 }, + { 0x11F6, 32532 }, + { 0x11F7, 32523 }, + { 0x11F8, 32529 }, + { 0x11F9, 32580 }, + { 0x1200, 50516 }, + { 0x1201, 50528 }, + { 0x1202, 50522 }, + { 0x1203, 50909 }, + { 0x1204, 50912 }, + { 0x1205, 50519 }, + { 0x1206, 50525 }, + { 0x1207, 50930 }, + { 0x1208, 50561 }, + { 0x1209, 50573 }, + { 0x120A, 50567 }, + { 0x120B, 50993 }, + { 0x120C, 50996 }, + { 0x120D, 50564 }, + { 0x120E, 50570 }, + { 0x120F, 51002 }, + { 0x1210, 50915 }, + { 0x1211, 50927 }, + { 0x1212, 50921 }, + { 0x1213, 51443 }, + { 0x1214, 51446 }, + { 0x1215, 50918 }, + { 0x1216, 50924 }, + { 0x1217, 51449 }, + { 0x1218, 50576 }, + { 0x1219, 50588 }, + { 0x121A, 50582 }, + { 0x121B, 51005 }, + { 0x121C, 51008 }, + { 0x121D, 50579 }, + { 0x121E, 50585 }, + { 0x121F, 51014 }, + { 0x1220, 51191 }, + { 0x1221, 51203 }, + { 0x1222, 51197 }, + { 0x1223, 51554 }, + { 0x1224, 51557 }, + { 0x1225, 51194 }, + { 0x1226, 51200 }, + { 0x1227, 51560 }, + { 0x1228, 50636 }, + { 0x1229, 50648 }, + { 0x122A, 50642 }, + { 0x122B, 51134 }, + { 0x122C, 51137 }, + { 0x122D, 50639 }, + { 0x122E, 50645 }, + { 0x122F, 51143 }, + { 0x1230, 50651 }, + { 0x1231, 50663 }, + { 0x1232, 50657 }, + { 0x1233, 51149 }, + { 0x1234, 51152 }, + { 0x1235, 50654 }, + { 0x1236, 50660 }, + { 0x1237, 51188 }, + { 0x1238, 51155 }, + { 0x1239, 51167 }, + { 0x123A, 51161 }, + { 0x123B, 51536 }, + { 0x123C, 51539 }, + { 0x123D, 51158 }, + { 0x123E, 51164 }, + { 0x123F, 51545 }, + { 0x1240, 50621 }, + { 0x1241, 50633 }, + { 0x1242, 50627 }, + { 0x1243, 51086 }, + { 0x1244, 51089 }, + { 0x1245, 50624 }, + { 0x1246, 50630 }, + { 0x1247, 51107 }, + { 0x1248, 51110 }, + { 0x124A, 51116 }, + { 0x124B, 51524 }, + { 0x124C, 51527 }, + { 0x124D, 51113 }, + { 0x1250, 51092 }, + { 0x1251, 51104 }, + { 0x1252, 51098 }, + { 0x1253, 51509 }, + { 0x1254, 51512 }, + { 0x1255, 51095 }, + { 0x1256, 51101 }, + { 0x1258, 51515 }, + { 0x125A, 51521 }, + { 0x125B, 51638 }, + { 0x125C, 51641 }, + { 0x125D, 51518 }, + { 0x1260, 50441 }, + { 0x1261, 50453 }, + { 0x1262, 50447 }, + { 0x1263, 50756 }, + { 0x1264, 50759 }, + { 0x1265, 50444 }, + { 0x1266, 50450 }, + { 0x1267, 50765 }, + { 0x1268, 50681 }, + { 0x1269, 50693 }, + { 0x126A, 50687 }, + { 0x126B, 51263 }, + { 0x126C, 51266 }, + { 0x126D, 50684 }, + { 0x126E, 50690 }, + { 0x126F, 51269 }, + { 0x1270, 50666 }, + { 0x1271, 50678 }, + { 0x1272, 50672 }, + { 0x1273, 51206 }, + { 0x1274, 51209 }, + { 0x1275, 50669 }, + { 0x1276, 50675 }, + { 0x1277, 51245 }, + { 0x1278, 50456 }, + { 0x1279, 50468 }, + { 0x127A, 50462 }, + { 0x127B, 50774 }, + { 0x127C, 50792 }, + { 0x127D, 50459 }, + { 0x127E, 50465 }, + { 0x127F, 50813 }, + { 0x1280, 50711 }, + { 0x1281, 50723 }, + { 0x1282, 50717 }, + { 0x1283, 51281 }, + { 0x1284, 51284 }, + { 0x1285, 50714 }, + { 0x1286, 50720 }, + { 0x1287, 51287 }, + { 0x1288, 51290 }, + { 0x128A, 51296 }, + { 0x128B, 51593 }, + { 0x128C, 51596 }, + { 0x128D, 51293 }, + { 0x1290, 50591 }, + { 0x1291, 50603 }, + { 0x1292, 50597 }, + { 0x1293, 51026 }, + { 0x1294, 51029 }, + { 0x1295, 50594 }, + { 0x1296, 50600 }, + { 0x1297, 51035 }, + { 0x1298, 51038 }, + { 0x1299, 51050 }, + { 0x129A, 51044 }, + { 0x129B, 51482 }, + { 0x129C, 51485 }, + { 0x129D, 51041 }, + { 0x129E, 51047 }, + { 0x129F, 51491 }, + { 0x12A0, 51644 }, + { 0x12A1, 51660 }, + { 0x12A2, 51652 }, + { 0x12A3, 51664 }, + { 0x12A4, 51668 }, + { 0x12A5, 51648 }, + { 0x12A6, 51656 }, + { 0x12A7, 51676 }, + { 0x12A8, 50546 }, + { 0x12A9, 50558 }, + { 0x12AA, 50552 }, + { 0x12AB, 50945 }, + { 0x12AC, 50948 }, + { 0x12AD, 50549 }, + { 0x12AE, 50555 }, + { 0x12AF, 50951 }, + { 0x12B0, 50954 }, + { 0x12B2, 50960 }, + { 0x12B3, 51452 }, + { 0x12B4, 51455 }, + { 0x12B5, 50957 }, + { 0x12B8, 50963 }, + { 0x12B9, 50975 }, + { 0x12BA, 50969 }, + { 0x12BB, 51458 }, + { 0x12BC, 51461 }, + { 0x12BD, 50966 }, + { 0x12BE, 50972 }, + { 0x12C0, 51464 }, + { 0x12C2, 51470 }, + { 0x12C3, 51632 }, + { 0x12C4, 51635 }, + { 0x12C5, 51467 }, + { 0x12C8, 50696 }, + { 0x12C9, 50708 }, + { 0x12CA, 50702 }, + { 0x12CB, 51272 }, + { 0x12CC, 51275 }, + { 0x12CD, 50699 }, + { 0x12CE, 50705 }, + { 0x12CF, 51278 }, + { 0x12D0, 51696 }, + { 0x12D1, 51712 }, + { 0x12D2, 51704 }, + { 0x12D3, 51716 }, + { 0x12D4, 51720 }, + { 0x12D5, 51700 }, + { 0x12D6, 51708 }, + { 0x12D8, 50741 }, + { 0x12D9, 50753 }, + { 0x12DA, 50747 }, + { 0x12DB, 51323 }, + { 0x12DC, 51326 }, + { 0x12DD, 50744 }, + { 0x12DE, 50750 }, + { 0x12DF, 51347 }, + { 0x12E0, 51329 }, + { 0x12E1, 51341 }, + { 0x12E2, 51335 }, + { 0x12E3, 51605 }, + { 0x12E4, 51608 }, + { 0x12E5, 51332 }, + { 0x12E6, 51338 }, + { 0x12E7, 51611 }, + { 0x12E8, 50726 }, + { 0x12E9, 50738 }, + { 0x12EA, 50732 }, + { 0x12EB, 51314 }, + { 0x12EC, 51317 }, + { 0x12ED, 50729 }, + { 0x12EE, 50735 }, + { 0x12EF, 51320 }, + { 0x12F0, 50471 }, + { 0x12F1, 50483 }, + { 0x12F2, 50477 }, + { 0x12F3, 50816 }, + { 0x12F4, 50834 }, + { 0x12F5, 50474 }, + { 0x12F6, 50480 }, + { 0x12F7, 50840 }, + { 0x12F8, 50819 }, + { 0x12F9, 50831 }, + { 0x12FA, 50825 }, + { 0x12FB, 51401 }, + { 0x12FC, 51404 }, + { 0x12FD, 50822 }, + { 0x12FE, 50828 }, + { 0x12FF, 51410 }, + { 0x1300, 50531 }, + { 0x1301, 50543 }, + { 0x1302, 50537 }, + { 0x1303, 50933 }, + { 0x1304, 50936 }, + { 0x1305, 50534 }, + { 0x1306, 50540 }, + { 0x1307, 50942 }, + { 0x1308, 50501 }, + { 0x1309, 50513 }, + { 0x130A, 50507 }, + { 0x130B, 50861 }, + { 0x130C, 50864 }, + { 0x130D, 50504 }, + { 0x130E, 50510 }, + { 0x130F, 50882 }, + { 0x1310, 50885 }, + { 0x1312, 50891 }, + { 0x1313, 51431 }, + { 0x1314, 51434 }, + { 0x1315, 50888 }, + { 0x1318, 50867 }, + { 0x1319, 50879 }, + { 0x131A, 50873 }, + { 0x131B, 51416 }, + { 0x131C, 51419 }, + { 0x131D, 50870 }, + { 0x131E, 50876 }, + { 0x131F, 51626 }, + { 0x1320, 51212 }, + { 0x1321, 51224 }, + { 0x1322, 51218 }, + { 0x1323, 51563 }, + { 0x1324, 51566 }, + { 0x1325, 51215 }, + { 0x1326, 51221 }, + { 0x1327, 51572 }, + { 0x1328, 50795 }, + { 0x1329, 50807 }, + { 0x132A, 50801 }, + { 0x132B, 51389 }, + { 0x132C, 51392 }, + { 0x132D, 50798 }, + { 0x132E, 50804 }, + { 0x132F, 51398 }, + { 0x1330, 51059 }, + { 0x1331, 51071 }, + { 0x1332, 51065 }, + { 0x1333, 51494 }, + { 0x1334, 51497 }, + { 0x1335, 51062 }, + { 0x1336, 51068 }, + { 0x1337, 51503 }, + { 0x1338, 51230 }, + { 0x1339, 51242 }, + { 0x133A, 51236 }, + { 0x133B, 51575 }, + { 0x133C, 51578 }, + { 0x133D, 51233 }, + { 0x133E, 51239 }, + { 0x133F, 51581 }, + { 0x1340, 51248 }, + { 0x1341, 51260 }, + { 0x1342, 51254 }, + { 0x1343, 51584 }, + { 0x1344, 51587 }, + { 0x1345, 51251 }, + { 0x1346, 51257 }, + { 0x1347, 51590 }, + { 0x1348, 50486 }, + { 0x1349, 50498 }, + { 0x134A, 50492 }, + { 0x134B, 50843 }, + { 0x134C, 50846 }, + { 0x134D, 50489 }, + { 0x134E, 50495 }, + { 0x134F, 50849 }, + { 0x1350, 50606 }, + { 0x1351, 50618 }, + { 0x1352, 50612 }, + { 0x1353, 51053 }, + { 0x1354, 51056 }, + { 0x1355, 50609 }, + { 0x1356, 50615 }, + { 0x1357, 51077 }, + { 0x1358, 51146 }, + { 0x1359, 51023 }, + { 0x135A, 50858 }, + { 0x135F, 51724 }, + { 0x1360, 50435 }, + { 0x1361, 51733 }, + { 0x1362, 50323 }, + { 0x1363, 50328 }, + { 0x1364, 51731 }, + { 0x1365, 50326 }, + { 0x1366, 50432 }, + { 0x1367, 50438 }, + { 0x1368, 51728 }, + { 0x1369, 50330 }, + { 0x136A, 50336 }, + { 0x136B, 50354 }, + { 0x136C, 50342 }, + { 0x136D, 50339 }, + { 0x136E, 50333 }, + { 0x136F, 50351 }, + { 0x1370, 50348 }, + { 0x1371, 50345 }, + { 0x1372, 50398 }, + { 0x1373, 50423 }, + { 0x1374, 50420 }, + { 0x1375, 50408 }, + { 0x1376, 50405 }, + { 0x1377, 50411 }, + { 0x1378, 50429 }, + { 0x1379, 50414 }, + { 0x137A, 50417 }, + { 0x137B, 50426 }, + { 0x137C, 50401 }, + { 0x1380, 51688 }, + { 0x1381, 51020 }, + { 0x1382, 51479 }, + { 0x1383, 51017 }, + { 0x1384, 51680 }, + { 0x1385, 50771 }, + { 0x1386, 51365 }, + { 0x1387, 50768 }, + { 0x1388, 51684 }, + { 0x1389, 50855 }, + { 0x138A, 51413 }, + { 0x138B, 50852 }, + { 0x138C, 51692 }, + { 0x138D, 51083 }, + { 0x138E, 51506 }, + { 0x138F, 51080 }, + { 0x1390, 50382 }, + { 0x1391, 50361 }, + { 0x1392, 50390 }, + { 0x1393, 50377 }, + { 0x1394, 50365 }, + { 0x1395, 50373 }, + { 0x1396, 50386 }, + { 0x1397, 50369 }, + { 0x1398, 50394 }, + { 0x1399, 50357 }, + { 0x13A0, 48143 }, + { 0x13A1, 48146 }, + { 0x13A2, 48149 }, + { 0x13A3, 48152 }, + { 0x13A4, 48158 }, + { 0x13A5, 48161 }, + { 0x13A6, 48182 }, + { 0x13A7, 48218 }, + { 0x13A8, 48185 }, + { 0x13A9, 48188 }, + { 0x13AA, 48191 }, + { 0x13AB, 48194 }, + { 0x13AC, 48197 }, + { 0x13AD, 48200 }, + { 0x13AE, 48203 }, + { 0x13AF, 48206 }, + { 0x13B0, 48209 }, + { 0x13B1, 48212 }, + { 0x13B2, 48215 }, + { 0x13B3, 48221 }, + { 0x13B4, 48224 }, + { 0x13B5, 48227 }, + { 0x13B6, 48230 }, + { 0x13B7, 48233 }, + { 0x13B8, 48236 }, + { 0x13B9, 48239 }, + { 0x13BA, 48242 }, + { 0x13BB, 48245 }, + { 0x13BC, 48248 }, + { 0x13BD, 48251 }, + { 0x13BE, 48254 }, + { 0x13BF, 48338 }, + { 0x13C0, 48341 }, + { 0x13C1, 48257 }, + { 0x13C2, 48260 }, + { 0x13C3, 48263 }, + { 0x13C4, 48266 }, + { 0x13C5, 48269 }, + { 0x13C6, 48344 }, + { 0x13C7, 48347 }, + { 0x13C8, 48350 }, + { 0x13C9, 48353 }, + { 0x13CA, 48356 }, + { 0x13CB, 48359 }, + { 0x13CC, 48272 }, + { 0x13CD, 48155 }, + { 0x13CE, 48275 }, + { 0x13CF, 48278 }, + { 0x13D0, 48281 }, + { 0x13D1, 48284 }, + { 0x13D2, 48287 }, + { 0x13D3, 48164 }, + { 0x13D4, 48290 }, + { 0x13D5, 48167 }, + { 0x13D6, 48293 }, + { 0x13D7, 48170 }, + { 0x13D8, 48296 }, + { 0x13D9, 48173 }, + { 0x13DA, 48176 }, + { 0x13DB, 48179 }, + { 0x13DC, 48335 }, + { 0x13DD, 48362 }, + { 0x13DE, 48365 }, + { 0x13DF, 48368 }, + { 0x13E0, 48371 }, + { 0x13E1, 48374 }, + { 0x13E2, 48377 }, + { 0x13E3, 48380 }, + { 0x13E4, 48383 }, + { 0x13E5, 48386 }, + { 0x13E6, 48389 }, + { 0x13E7, 48392 }, + { 0x13E8, 48395 }, + { 0x13E9, 48299 }, + { 0x13EA, 48302 }, + { 0x13EB, 48305 }, + { 0x13EC, 48308 }, + { 0x13ED, 48311 }, + { 0x13EE, 48314 }, + { 0x13EF, 48317 }, + { 0x13F0, 48320 }, + { 0x13F1, 48323 }, + { 0x13F2, 48326 }, + { 0x13F3, 48329 }, + { 0x13F4, 48332 }, + { 0x1401, 45872 }, + { 0x1402, 46118 }, + { 0x1403, 45878 }, + { 0x1404, 45953 }, + { 0x1405, 45893 }, + { 0x1406, 46025 }, + { 0x1407, 46790 }, + { 0x1408, 46858 }, + { 0x1409, 46842 }, + { 0x140A, 45866 }, + { 0x140B, 45914 }, + { 0x140C, 46097 }, + { 0x140D, 47791 }, + { 0x140E, 46100 }, + { 0x140F, 47795 }, + { 0x1410, 46392 }, + { 0x1411, 47927 }, + { 0x1412, 46103 }, + { 0x1413, 47799 }, + { 0x1414, 46395 }, + { 0x1415, 47931 }, + { 0x1416, 47555 }, + { 0x1417, 46094 }, + { 0x1418, 47787 }, + { 0x1419, 46389 }, + { 0x141A, 47923 }, + { 0x141B, 47551 }, + { 0x141C, 45917 }, + { 0x141D, 46786 }, + { 0x141E, 47539 }, + { 0x141F, 46643 }, + { 0x1420, 46647 }, + { 0x1421, 46663 }, + { 0x1422, 46624 }, + { 0x1423, 46651 }, + { 0x1424, 46639 }, + { 0x1425, 46669 }, + { 0x1426, 46674 }, + { 0x1427, 46681 }, + { 0x1428, 46657 }, + { 0x1429, 46635 }, + { 0x142A, 46630 }, + { 0x142B, 45935 }, + { 0x142C, 45956 }, + { 0x142D, 46022 }, + { 0x142E, 45920 }, + { 0x142F, 46031 }, + { 0x1430, 46513 }, + { 0x1431, 46034 }, + { 0x1432, 46257 }, + { 0x1433, 46037 }, + { 0x1434, 46260 }, + { 0x1435, 46814 }, + { 0x1436, 47186 }, + { 0x1437, 46882 }, + { 0x1438, 46028 }, + { 0x1439, 46254 }, + { 0x143A, 46266 }, + { 0x143B, 47879 }, + { 0x143C, 46269 }, + { 0x143D, 47883 }, + { 0x143E, 46519 }, + { 0x143F, 48011 }, + { 0x1440, 46272 }, + { 0x1441, 47887 }, + { 0x1442, 46522 }, + { 0x1443, 48015 }, + { 0x1444, 46263 }, + { 0x1445, 47875 }, + { 0x1446, 46516 }, + { 0x1447, 48007 }, + { 0x1448, 46830 }, + { 0x1449, 45896 }, + { 0x144A, 47747 }, + { 0x144B, 46838 }, + { 0x144C, 46082 }, + { 0x144D, 46567 }, + { 0x144E, 46088 }, + { 0x144F, 46344 }, + { 0x1450, 46091 }, + { 0x1451, 46347 }, + { 0x1452, 46822 }, + { 0x1453, 47118 }, + { 0x1454, 46854 }, + { 0x1455, 46079 }, + { 0x1456, 46329 }, + { 0x1457, 46368 }, + { 0x1458, 47911 }, + { 0x1459, 46371 }, + { 0x145A, 47915 }, + { 0x145B, 46606 }, + { 0x145C, 48055 }, + { 0x145D, 46374 }, + { 0x145E, 47919 }, + { 0x145F, 46609 }, + { 0x1460, 48059 }, + { 0x1461, 46365 }, + { 0x1462, 47907 }, + { 0x1463, 46603 }, + { 0x1464, 48051 }, + { 0x1465, 47595 }, + { 0x1466, 45908 }, + { 0x1467, 46353 }, + { 0x1468, 46359 }, + { 0x1469, 46362 }, + { 0x146A, 46350 }, + { 0x146B, 45962 }, + { 0x146C, 46441 }, + { 0x146D, 45965 }, + { 0x146E, 46158 }, + { 0x146F, 45968 }, + { 0x1470, 46161 }, + { 0x1471, 46798 }, + { 0x1472, 45959 }, + { 0x1473, 46155 }, + { 0x1474, 46167 }, + { 0x1475, 47823 }, + { 0x1476, 46170 }, + { 0x1477, 47827 }, + { 0x1478, 46447 }, + { 0x1479, 47971 }, + { 0x147A, 46173 }, + { 0x147B, 47831 }, + { 0x147C, 46450 }, + { 0x147D, 47975 }, + { 0x147E, 46164 }, + { 0x147F, 47819 }, + { 0x1480, 46444 }, + { 0x1481, 47967 }, + { 0x1482, 47563 }, + { 0x1483, 45881 }, + { 0x1484, 45971 }, + { 0x1485, 48131 }, + { 0x1486, 48135 }, + { 0x1487, 48139 }, + { 0x1488, 48127 }, + { 0x1489, 45926 }, + { 0x148A, 46419 }, + { 0x148B, 45929 }, + { 0x148C, 46128 }, + { 0x148D, 45932 }, + { 0x148E, 46131 }, + { 0x148F, 46794 }, + { 0x1490, 45923 }, + { 0x1491, 46121 }, + { 0x1492, 46137 }, + { 0x1493, 47807 }, + { 0x1494, 46140 }, + { 0x1495, 47811 }, + { 0x1496, 46425 }, + { 0x1497, 47955 }, + { 0x1498, 46143 }, + { 0x1499, 47815 }, + { 0x149A, 46428 }, + { 0x149B, 47959 }, + { 0x149C, 46134 }, + { 0x149D, 47803 }, + { 0x149E, 46422 }, + { 0x149F, 47951 }, + { 0x14A0, 47559 }, + { 0x14A1, 45869 }, + { 0x14A2, 46762 }, + { 0x14A3, 45992 }, + { 0x14A4, 46474 }, + { 0x14A5, 45998 }, + { 0x14A6, 46209 }, + { 0x14A7, 46001 }, + { 0x14A8, 46212 }, + { 0x14A9, 46806 }, + { 0x14AA, 45989 }, + { 0x14AB, 46206 }, + { 0x14AC, 46218 }, + { 0x14AD, 47855 }, + { 0x14AE, 46221 }, + { 0x14AF, 47859 }, + { 0x14B0, 46480 }, + { 0x14B1, 47995 }, + { 0x14B2, 46224 }, + { 0x14B3, 47863 }, + { 0x14B4, 46483 }, + { 0x14B5, 47999 }, + { 0x14B6, 46215 }, + { 0x14B7, 47851 }, + { 0x14B8, 46477 }, + { 0x14B9, 47991 }, + { 0x14BA, 47567 }, + { 0x14BB, 45887 }, + { 0x14BC, 47743 }, + { 0x14BD, 45995 }, + { 0x14BE, 48091 }, + { 0x14BF, 46734 }, + { 0x14C0, 46007 }, + { 0x14C1, 46486 }, + { 0x14C2, 46016 }, + { 0x14C3, 46239 }, + { 0x14C4, 46019 }, + { 0x14C5, 46245 }, + { 0x14C6, 46810 }, + { 0x14C7, 46004 }, + { 0x14C8, 46227 }, + { 0x14C9, 46251 }, + { 0x14CA, 47871 }, + { 0x14CB, 46248 }, + { 0x14CC, 47867 }, + { 0x14CD, 46510 }, + { 0x14CE, 48003 }, + { 0x14CF, 47571 }, + { 0x14D0, 45890 }, + { 0x14D1, 46958 }, + { 0x14D2, 46013 }, + { 0x14D3, 45977 }, + { 0x14D4, 46453 }, + { 0x14D5, 45983 }, + { 0x14D6, 46188 }, + { 0x14D7, 45986 }, + { 0x14D8, 46191 }, + { 0x14D9, 46802 }, + { 0x14DA, 45974 }, + { 0x14DB, 46176 }, + { 0x14DC, 46197 }, + { 0x14DD, 47839 }, + { 0x14DE, 46200 }, + { 0x14DF, 47843 }, + { 0x14E0, 46468 }, + { 0x14E1, 47983 }, + { 0x14E2, 46203 }, + { 0x14E3, 47847 }, + { 0x14E4, 46471 }, + { 0x14E5, 47987 }, + { 0x14E6, 46194 }, + { 0x14E7, 47835 }, + { 0x14E8, 46465 }, + { 0x14E9, 47979 }, + { 0x14EA, 45884 }, + { 0x14EB, 47739 }, + { 0x14EC, 46710 }, + { 0x14ED, 46064 }, + { 0x14EE, 46534 }, + { 0x14EF, 46070 }, + { 0x14F0, 46311 }, + { 0x14F1, 46073 }, + { 0x14F2, 46314 }, + { 0x14F3, 46818 }, + { 0x14F4, 46061 }, + { 0x14F5, 46296 }, + { 0x14F6, 46320 }, + { 0x14F7, 47895 }, + { 0x14F8, 46323 }, + { 0x14F9, 47899 }, + { 0x14FA, 46561 }, + { 0x14FB, 48043 }, + { 0x14FC, 46326 }, + { 0x14FD, 47903 }, + { 0x14FE, 46564 }, + { 0x14FF, 48047 }, + { 0x1500, 46317 }, + { 0x1501, 47891 }, + { 0x1502, 46558 }, + { 0x1503, 48039 }, + { 0x1504, 47591 }, + { 0x1505, 45905 }, + { 0x1506, 48095 }, + { 0x1507, 46076 }, + { 0x1508, 47687 }, + { 0x1509, 48103 }, + { 0x150A, 47547 }, + { 0x150B, 47543 }, + { 0x150C, 47583 }, + { 0x150D, 47587 }, + { 0x150E, 47579 }, + { 0x150F, 47575 }, + { 0x1510, 46302 }, + { 0x1511, 46305 }, + { 0x1512, 46540 }, + { 0x1513, 46308 }, + { 0x1514, 46543 }, + { 0x1515, 46299 }, + { 0x1516, 46537 }, + { 0x1517, 46549 }, + { 0x1518, 48027 }, + { 0x1519, 46552 }, + { 0x151A, 48031 }, + { 0x151B, 46701 }, + { 0x151C, 48079 }, + { 0x151D, 46555 }, + { 0x151E, 48035 }, + { 0x151F, 46704 }, + { 0x1520, 48083 }, + { 0x1521, 46546 }, + { 0x1522, 48023 }, + { 0x1523, 46698 }, + { 0x1524, 48075 }, + { 0x1525, 46067 }, + { 0x1526, 46109 }, + { 0x1527, 46612 }, + { 0x1528, 46112 }, + { 0x1529, 46401 }, + { 0x152A, 46115 }, + { 0x152B, 46404 }, + { 0x152C, 46826 }, + { 0x152D, 46106 }, + { 0x152E, 46398 }, + { 0x152F, 46410 }, + { 0x1530, 47939 }, + { 0x1531, 46413 }, + { 0x1532, 47943 }, + { 0x1533, 46618 }, + { 0x1534, 48067 }, + { 0x1535, 46416 }, + { 0x1536, 47947 }, + { 0x1537, 46621 }, + { 0x1538, 48071 }, + { 0x1539, 46407 }, + { 0x153A, 47935 }, + { 0x153B, 46615 }, + { 0x153C, 48063 }, + { 0x153D, 47599 }, + { 0x153E, 45911 }, + { 0x153F, 48099 }, + { 0x1540, 47755 }, + { 0x1541, 46766 }, + { 0x1542, 46052 }, + { 0x1543, 46730 }, + { 0x1544, 47763 }, + { 0x1545, 46528 }, + { 0x1546, 46055 }, + { 0x1547, 46290 }, + { 0x1548, 46058 }, + { 0x1549, 46293 }, + { 0x154A, 47767 }, + { 0x154B, 46049 }, + { 0x154C, 46287 }, + { 0x154D, 47759 }, + { 0x154E, 46531 }, + { 0x154F, 48019 }, + { 0x1550, 45902 }, + { 0x1551, 47751 }, + { 0x1552, 46714 }, + { 0x1553, 45941 }, + { 0x1554, 46431 }, + { 0x1555, 45944 }, + { 0x1556, 46149 }, + { 0x1557, 45947 }, + { 0x1558, 46152 }, + { 0x1559, 45938 }, + { 0x155A, 46146 }, + { 0x155B, 46438 }, + { 0x155C, 47963 }, + { 0x155D, 45875 }, + { 0x155E, 46335 }, + { 0x155F, 46718 }, + { 0x1560, 46338 }, + { 0x1561, 46722 }, + { 0x1562, 46573 }, + { 0x1563, 46726 }, + { 0x1564, 46341 }, + { 0x1565, 46576 }, + { 0x1566, 46332 }, + { 0x1567, 46570 }, + { 0x1568, 46707 }, + { 0x1569, 48087 }, + { 0x156A, 46085 }, + { 0x156B, 46594 }, + { 0x156C, 46597 }, + { 0x156D, 46600 }, + { 0x156E, 46591 }, + { 0x156F, 46356 }, + { 0x1570, 46380 }, + { 0x1571, 46383 }, + { 0x1572, 46386 }, + { 0x1573, 46377 }, + { 0x1574, 47611 }, + { 0x1575, 47615 }, + { 0x1576, 47627 }, + { 0x1577, 47619 }, + { 0x1578, 47631 }, + { 0x1579, 47607 }, + { 0x157A, 47623 }, + { 0x157B, 47603 }, + { 0x157C, 47635 }, + { 0x157D, 45950 }, + { 0x157E, 46525 }, + { 0x157F, 46043 }, + { 0x1580, 46281 }, + { 0x1581, 46046 }, + { 0x1582, 46284 }, + { 0x1583, 46040 }, + { 0x1584, 46275 }, + { 0x1585, 45899 }, + { 0x1586, 46582 }, + { 0x1587, 46585 }, + { 0x1588, 46588 }, + { 0x1589, 46579 }, + { 0x158A, 47775 }, + { 0x158B, 47779 }, + { 0x158C, 47783 }, + { 0x158D, 47771 }, + { 0x158E, 46686 }, + { 0x158F, 46233 }, + { 0x1590, 46495 }, + { 0x1591, 46236 }, + { 0x1592, 46498 }, + { 0x1593, 46230 }, + { 0x1594, 46489 }, + { 0x1595, 46010 }, + { 0x1596, 46242 }, + { 0x1597, 46774 }, + { 0x1598, 46778 }, + { 0x1599, 46782 }, + { 0x159A, 46770 }, + { 0x159B, 48115 }, + { 0x159C, 48119 }, + { 0x159D, 48123 }, + { 0x159E, 48111 }, + { 0x159F, 48107 }, + { 0x15A0, 46182 }, + { 0x15A1, 46459 }, + { 0x15A2, 46185 }, + { 0x15A3, 46462 }, + { 0x15A4, 46179 }, + { 0x15A5, 46456 }, + { 0x15A6, 45980 }, + { 0x15A7, 47647 }, + { 0x15A8, 47651 }, + { 0x15A9, 47663 }, + { 0x15AA, 47655 }, + { 0x15AB, 47667 }, + { 0x15AC, 47643 }, + { 0x15AD, 47659 }, + { 0x15AE, 47639 }, + { 0x15AF, 46834 }, + { 0x15B0, 47675 }, + { 0x15B1, 47679 }, + { 0x15B2, 47683 }, + { 0x15B3, 47671 }, + { 0x15B4, 47727 }, + { 0x15B5, 47731 }, + { 0x15B6, 47735 }, + { 0x15B7, 47723 }, + { 0x15B8, 47711 }, + { 0x15B9, 47715 }, + { 0x15BA, 47719 }, + { 0x15BB, 47707 }, + { 0x15BC, 47695 }, + { 0x15BD, 47699 }, + { 0x15BE, 47703 }, + { 0x15BF, 47691 }, + { 0x15C0, 46742 }, + { 0x15C1, 46746 }, + { 0x15C2, 46750 }, + { 0x15C3, 46738 }, + { 0x15C4, 47182 }, + { 0x15C5, 47178 }, + { 0x15C6, 47170 }, + { 0x15C7, 47442 }, + { 0x15C8, 47174 }, + { 0x15C9, 47166 }, + { 0x15CA, 47010 }, + { 0x15CB, 47006 }, + { 0x15CC, 46998 }, + { 0x15CD, 47310 }, + { 0x15CE, 47002 }, + { 0x15CF, 46994 }, + { 0x15D0, 47054 }, + { 0x15D1, 47050 }, + { 0x15D2, 47042 }, + { 0x15D3, 47418 }, + { 0x15D4, 47046 }, + { 0x15D5, 47038 }, + { 0x15D6, 47206 }, + { 0x15D7, 47202 }, + { 0x15D8, 47194 }, + { 0x15D9, 47446 }, + { 0x15DA, 47198 }, + { 0x15DB, 47190 }, + { 0x15DC, 47354 }, + { 0x15DD, 47350 }, + { 0x15DE, 47342 }, + { 0x15DF, 47470 }, + { 0x15E0, 47346 }, + { 0x15E1, 47338 }, + { 0x15E2, 47414 }, + { 0x15E3, 47410 }, + { 0x15E4, 47402 }, + { 0x15E5, 47502 }, + { 0x15E6, 47406 }, + { 0x15E7, 47398 }, + { 0x15E8, 46990 }, + { 0x15E9, 46986 }, + { 0x15EA, 46978 }, + { 0x15EB, 47306 }, + { 0x15EC, 46982 }, + { 0x15ED, 46974 }, + { 0x15EE, 46846 }, + { 0x15EF, 46878 }, + { 0x15F0, 46874 }, + { 0x15F1, 46866 }, + { 0x15F2, 47162 }, + { 0x15F3, 46870 }, + { 0x15F4, 46862 }, + { 0x15F5, 47250 }, + { 0x15F6, 47246 }, + { 0x15F7, 47238 }, + { 0x15F8, 47454 }, + { 0x15F9, 47242 }, + { 0x15FA, 47234 }, + { 0x15FB, 47270 }, + { 0x15FC, 47266 }, + { 0x15FD, 47258 }, + { 0x15FE, 47458 }, + { 0x15FF, 47262 }, + { 0x1600, 47254 }, + { 0x1601, 46906 }, + { 0x1602, 46970 }, + { 0x1603, 46966 }, + { 0x1604, 46954 }, + { 0x1605, 47302 }, + { 0x1606, 46962 }, + { 0x1607, 46950 }, + { 0x1608, 46946 }, + { 0x1609, 46942 }, + { 0x160A, 46934 }, + { 0x160B, 47298 }, + { 0x160C, 46938 }, + { 0x160D, 46930 }, + { 0x160E, 47074 }, + { 0x160F, 47070 }, + { 0x1610, 47062 }, + { 0x1611, 47422 }, + { 0x1612, 47066 }, + { 0x1613, 47058 }, + { 0x1614, 46902 }, + { 0x1615, 46758 }, + { 0x1616, 46898 }, + { 0x1617, 46890 }, + { 0x1618, 47210 }, + { 0x1619, 46894 }, + { 0x161A, 46754 }, + { 0x161B, 46886 }, + { 0x161C, 47230 }, + { 0x161D, 47226 }, + { 0x161E, 47218 }, + { 0x161F, 47450 }, + { 0x1620, 47222 }, + { 0x1621, 47214 }, + { 0x1622, 46926 }, + { 0x1623, 46922 }, + { 0x1624, 46914 }, + { 0x1625, 47274 }, + { 0x1626, 46918 }, + { 0x1627, 46910 }, + { 0x1628, 47138 }, + { 0x1629, 47134 }, + { 0x162A, 47126 }, + { 0x162B, 47434 }, + { 0x162C, 47130 }, + { 0x162D, 47122 }, + { 0x162E, 47294 }, + { 0x162F, 47290 }, + { 0x1630, 47282 }, + { 0x1631, 47462 }, + { 0x1632, 47286 }, + { 0x1633, 47278 }, + { 0x1634, 47494 }, + { 0x1635, 47490 }, + { 0x1636, 47482 }, + { 0x1637, 47526 }, + { 0x1638, 47486 }, + { 0x1639, 47478 }, + { 0x163A, 47374 }, + { 0x163B, 47370 }, + { 0x163C, 47362 }, + { 0x163D, 47474 }, + { 0x163E, 47366 }, + { 0x163F, 47358 }, + { 0x1640, 47094 }, + { 0x1641, 47090 }, + { 0x1642, 47082 }, + { 0x1643, 47426 }, + { 0x1644, 47086 }, + { 0x1645, 47078 }, + { 0x1646, 46850 }, + { 0x1647, 47534 }, + { 0x1648, 47158 }, + { 0x1649, 47154 }, + { 0x164A, 47146 }, + { 0x164B, 47438 }, + { 0x164C, 47150 }, + { 0x164D, 47142 }, + { 0x164E, 47034 }, + { 0x164F, 47030 }, + { 0x1650, 47018 }, + { 0x1651, 47314 }, + { 0x1652, 47026 }, + { 0x1653, 47014 }, + { 0x1654, 47334 }, + { 0x1655, 47330 }, + { 0x1656, 47322 }, + { 0x1657, 47466 }, + { 0x1658, 47326 }, + { 0x1659, 47318 }, + { 0x165A, 47022 }, + { 0x165B, 47394 }, + { 0x165C, 47390 }, + { 0x165D, 47382 }, + { 0x165E, 47498 }, + { 0x165F, 47386 }, + { 0x1660, 47378 }, + { 0x1661, 47114 }, + { 0x1662, 47110 }, + { 0x1663, 47102 }, + { 0x1664, 47430 }, + { 0x1665, 47106 }, + { 0x1666, 47098 }, + { 0x1667, 47522 }, + { 0x1668, 47518 }, + { 0x1669, 47510 }, + { 0x166A, 47530 }, + { 0x166B, 47514 }, + { 0x166C, 47506 }, + { 0x166D, 46124 }, + { 0x166E, 46434 }, + { 0x166F, 46278 }, + { 0x1670, 46492 }, + { 0x1671, 46504 }, + { 0x1672, 46692 }, + { 0x1673, 46507 }, + { 0x1674, 46695 }, + { 0x1675, 46501 }, + { 0x1676, 46689 }, + { 0x1680, 21369 }, + { 0x1681, 21414 }, + { 0x1682, 21396 }, + { 0x1683, 21420 }, + { 0x1684, 21408 }, + { 0x1685, 21402 }, + { 0x1686, 21411 }, + { 0x1687, 21387 }, + { 0x1688, 21426 }, + { 0x1689, 21384 }, + { 0x168A, 21417 }, + { 0x168B, 21399 }, + { 0x168C, 21390 }, + { 0x168D, 21441 }, + { 0x168E, 21429 }, + { 0x168F, 21405 }, + { 0x1690, 21381 }, + { 0x1691, 21378 }, + { 0x1692, 21375 }, + { 0x1693, 21435 }, + { 0x1694, 21438 }, + { 0x1695, 21432 }, + { 0x1696, 21372 }, + { 0x1697, 21444 }, + { 0x1698, 21393 }, + { 0x1699, 21447 }, + { 0x169A, 21423 }, + { 0x169B, 21450 }, + { 0x169C, 21453 }, + { 0x16A0, 22222 }, + { 0x16A1, 22160 }, + { 0x16A2, 22250 }, + { 0x16A3, 22189 }, + { 0x16A4, 22169 }, + { 0x16A5, 22163 }, + { 0x16A6, 22368 }, + { 0x16A7, 22201 }, + { 0x16A8, 22259 }, + { 0x16A9, 22185 }, + { 0x16AA, 22175 }, + { 0x16AB, 22216 }, + { 0x16AC, 22402 }, + { 0x16AD, 22390 }, + { 0x16AE, 22154 }, + { 0x16AF, 22179 }, + { 0x16B0, 22182 }, + { 0x16B1, 22287 }, + { 0x16B2, 22284 }, + { 0x16B3, 22192 }, + { 0x16B4, 22243 }, + { 0x16B5, 22151 }, + { 0x16B6, 22198 }, + { 0x16B7, 22228 }, + { 0x16B8, 22204 }, + { 0x16B9, 22304 }, + { 0x16BA, 22309 }, + { 0x16BB, 22276 }, + { 0x16BC, 22422 }, + { 0x16BD, 22418 }, + { 0x16BE, 22327 }, + { 0x16BF, 22410 }, + { 0x16C0, 22362 }, + { 0x16C1, 22233 }, + { 0x16C2, 22148 }, + { 0x16C3, 22280 }, + { 0x16C4, 22207 }, + { 0x16C5, 22383 }, + { 0x16C6, 22376 }, + { 0x16C7, 22239 }, + { 0x16C8, 22336 }, + { 0x16C9, 22255 }, + { 0x16CA, 22341 }, + { 0x16CB, 22293 }, + { 0x16CC, 22394 }, + { 0x16CD, 22142 }, + { 0x16CE, 22172 }, + { 0x16CF, 22298 }, + { 0x16D0, 22398 }, + { 0x16D1, 22145 }, + { 0x16D2, 22353 }, + { 0x16D3, 22426 }, + { 0x16D4, 22365 }, + { 0x16D5, 22333 }, + { 0x16D6, 22271 }, + { 0x16D7, 22322 }, + { 0x16D8, 22414 }, + { 0x16D9, 22406 }, + { 0x16DA, 22316 }, + { 0x16DB, 22359 }, + { 0x16DC, 22313 }, + { 0x16DD, 22210 }, + { 0x16DE, 22266 }, + { 0x16DF, 22348 }, + { 0x16E0, 22195 }, + { 0x16E1, 22213 }, + { 0x16E2, 22345 }, + { 0x16E3, 22219 }, + { 0x16E4, 22263 }, + { 0x16E5, 22247 }, + { 0x16E6, 22387 }, + { 0x16E7, 22380 }, + { 0x16E8, 22373 }, + { 0x16E9, 22157 }, + { 0x16EA, 22166 }, + { 0x16EB, 22430 }, + { 0x16EC, 22436 }, + { 0x16ED, 22136 }, + { 0x16EE, 22139 }, + { 0x16EF, 22439 }, + { 0x16F0, 22433 }, + { 0x1700, 43594 }, + { 0x1701, 43597 }, + { 0x1702, 43600 }, + { 0x1703, 43615 }, + { 0x1704, 43609 }, + { 0x1705, 43642 }, + { 0x1706, 43633 }, + { 0x1707, 43606 }, + { 0x1708, 43624 }, + { 0x1709, 43627 }, + { 0x170A, 43603 }, + { 0x170B, 43621 }, + { 0x170C, 43639 }, + { 0x170E, 43618 }, + { 0x170F, 43636 }, + { 0x1710, 43630 }, + { 0x1711, 43612 }, + { 0x1712, 43586 }, + { 0x1713, 43590 }, + { 0x1714, 43583 }, + { 0x1720, 40573 }, + { 0x1721, 40576 }, + { 0x1722, 40579 }, + { 0x1723, 40594 }, + { 0x1724, 40588 }, + { 0x1725, 40624 }, + { 0x1726, 40615 }, + { 0x1727, 40585 }, + { 0x1728, 40603 }, + { 0x1729, 40606 }, + { 0x172A, 40582 }, + { 0x172B, 40600 }, + { 0x172C, 40621 }, + { 0x172D, 40609 }, + { 0x172E, 40597 }, + { 0x172F, 40618 }, + { 0x1730, 40612 }, + { 0x1731, 40591 }, + { 0x1732, 40565 }, + { 0x1733, 40569 }, + { 0x1734, 40562 }, + { 0x1735, 67884 }, + { 0x1736, 67881 }, + { 0x1740, 10387 }, + { 0x1741, 10390 }, + { 0x1742, 10393 }, + { 0x1743, 10408 }, + { 0x1744, 10402 }, + { 0x1745, 10438 }, + { 0x1746, 10429 }, + { 0x1747, 10399 }, + { 0x1748, 10417 }, + { 0x1749, 10420 }, + { 0x174A, 10396 }, + { 0x174B, 10414 }, + { 0x174C, 10435 }, + { 0x174D, 10423 }, + { 0x174E, 10411 }, + { 0x174F, 10432 }, + { 0x1750, 10426 }, + { 0x1751, 10405 }, + { 0x1752, 10379 }, + { 0x1753, 10383 }, + { 0x1760, 55665 }, + { 0x1761, 55668 }, + { 0x1762, 55671 }, + { 0x1763, 55683 }, + { 0x1764, 55680 }, + { 0x1765, 55710 }, + { 0x1766, 55701 }, + { 0x1767, 55677 }, + { 0x1768, 55692 }, + { 0x1769, 55695 }, + { 0x176A, 55674 }, + { 0x176B, 55689 }, + { 0x176C, 55707 }, + { 0x176E, 55686 }, + { 0x176F, 55704 }, + { 0x1770, 55698 }, + { 0x1772, 55657 }, + { 0x1773, 55661 }, + { 0x1780, 14115 }, + { 0x1781, 14163 }, + { 0x1782, 14118 }, + { 0x1783, 14166 }, + { 0x1784, 14169 }, + { 0x1785, 14100 }, + { 0x1786, 14157 }, + { 0x1787, 14103 }, + { 0x1788, 14160 }, + { 0x1789, 14175 }, + { 0x178A, 14106 }, + { 0x178B, 14196 }, + { 0x178C, 14109 }, + { 0x178D, 14199 }, + { 0x178E, 14172 }, + { 0x178F, 14145 }, + { 0x1790, 14190 }, + { 0x1791, 14148 }, + { 0x1792, 14193 }, + { 0x1793, 14130 }, + { 0x1794, 14097 }, + { 0x1795, 14178 }, + { 0x1796, 14133 }, + { 0x1797, 14181 }, + { 0x1798, 14127 }, + { 0x1799, 14154 }, + { 0x179A, 14139 }, + { 0x179B, 14124 }, + { 0x179C, 14151 }, + { 0x179D, 14184 }, + { 0x179E, 14187 }, + { 0x179F, 14142 }, + { 0x17A0, 14112 }, + { 0x17A1, 14121 }, + { 0x17A2, 14136 }, + { 0x17A3, 14414 }, + { 0x17A4, 14406 }, + { 0x17A5, 14390 }, + { 0x17A6, 14422 }, + { 0x17A7, 14394 }, + { 0x17A8, 14438 }, + { 0x17A9, 14442 }, + { 0x17AA, 14450 }, + { 0x17AB, 14398 }, + { 0x17AC, 14446 }, + { 0x17AD, 14382 }, + { 0x17AE, 14402 }, + { 0x17AF, 14386 }, + { 0x17B0, 14410 }, + { 0x17B1, 14426 }, + { 0x17B2, 14432 }, + { 0x17B3, 14418 }, + { 0x17B4, 14093 }, + { 0x17B5, 14089 }, + { 0x17B6, 14041 }, + { 0x17B7, 14029 }, + { 0x17B8, 14061 }, + { 0x17B9, 14037 }, + { 0x17BA, 14085 }, + { 0x17BB, 14033 }, + { 0x17BC, 14077 }, + { 0x17BD, 14073 }, + { 0x17BE, 14065 }, + { 0x17BF, 14081 }, + { 0x17C0, 14057 }, + { 0x17C1, 14025 }, + { 0x17C2, 14045 }, + { 0x17C3, 14049 }, + { 0x17C4, 14069 }, + { 0x17C5, 14053 }, + { 0x17C6, 13965 }, + { 0x17C7, 13968 }, + { 0x17C8, 13992 }, + { 0x17C9, 13983 }, + { 0x17CA, 13971 }, + { 0x17CB, 13937 }, + { 0x17CC, 13934 }, + { 0x17CD, 13986 }, + { 0x17CE, 13959 }, + { 0x17CF, 13928 }, + { 0x17D0, 13952 }, + { 0x17D1, 13956 }, + { 0x17D2, 13931 }, + { 0x17D3, 13980 }, + { 0x17D4, 13925 }, + { 0x17D5, 13977 }, + { 0x17D6, 13943 }, + { 0x17D7, 13921 }, + { 0x17D8, 13940 }, + { 0x17D9, 13948 }, + { 0x17DA, 13962 }, + { 0x17DB, 14378 }, + { 0x17DC, 13989 }, + { 0x17DD, 13974 }, + { 0x17E0, 14013 }, + { 0x17E1, 13995 }, + { 0x17E2, 14001 }, + { 0x17E3, 14022 }, + { 0x17E4, 14007 }, + { 0x17E5, 14004 }, + { 0x17E6, 13998 }, + { 0x17E7, 14019 }, + { 0x17E8, 14016 }, + { 0x17E9, 14010 }, + { 0x17F0, 14228 }, + { 0x17F1, 14238 }, + { 0x17F2, 14223 }, + { 0x17F3, 14218 }, + { 0x17F4, 14233 }, + { 0x17F5, 14243 }, + { 0x17F6, 14263 }, + { 0x17F7, 14253 }, + { 0x17F8, 14248 }, + { 0x17F9, 14258 }, + { 0x1800, 65145 }, + { 0x1801, 65749 }, + { 0x1802, 65149 }, + { 0x1803, 65133 }, + { 0x1804, 65147 }, + { 0x1805, 65115 }, + { 0x1806, 65141 }, + { 0x1807, 65136 }, + { 0x1808, 65744 }, + { 0x1809, 65740 }, + { 0x180A, 65747 }, + { 0x180B, 65118 }, + { 0x180C, 65123 }, + { 0x180D, 65128 }, + { 0x180E, 65181 }, + { 0x1810, 65169 }, + { 0x1811, 65151 }, + { 0x1812, 65157 }, + { 0x1813, 65178 }, + { 0x1814, 65163 }, + { 0x1815, 65160 }, + { 0x1816, 65154 }, + { 0x1817, 65175 }, + { 0x1818, 65172 }, + { 0x1819, 65166 }, + { 0x1820, 65184 }, + { 0x1821, 65187 }, + { 0x1822, 65190 }, + { 0x1823, 65193 }, + { 0x1824, 65196 }, + { 0x1825, 65229 }, + { 0x1826, 65247 }, + { 0x1827, 65205 }, + { 0x1828, 65226 }, + { 0x1829, 65400 }, + { 0x182A, 65199 }, + { 0x182B, 65232 }, + { 0x182C, 65235 }, + { 0x182D, 65211 }, + { 0x182E, 65223 }, + { 0x182F, 65220 }, + { 0x1830, 65241 }, + { 0x1831, 65418 }, + { 0x1832, 65244 }, + { 0x1833, 65202 }, + { 0x1834, 65403 }, + { 0x1835, 65214 }, + { 0x1836, 65253 }, + { 0x1837, 65238 }, + { 0x1838, 65250 }, + { 0x1839, 65208 }, + { 0x183A, 65217 }, + { 0x183B, 65412 }, + { 0x183C, 65421 }, + { 0x183D, 65256 }, + { 0x183E, 65409 }, + { 0x183F, 65427 }, + { 0x1840, 65415 }, + { 0x1841, 65424 }, + { 0x1842, 65406 }, + { 0x1843, 65630 }, + { 0x1844, 65518 }, + { 0x1845, 65522 }, + { 0x1846, 65526 }, + { 0x1847, 65530 }, + { 0x1848, 65558 }, + { 0x1849, 65574 }, + { 0x184A, 65598 }, + { 0x184B, 65534 }, + { 0x184C, 65562 }, + { 0x184D, 65566 }, + { 0x184E, 65542 }, + { 0x184F, 65554 }, + { 0x1850, 65570 }, + { 0x1851, 65538 }, + { 0x1852, 65602 }, + { 0x1853, 65546 }, + { 0x1854, 65626 }, + { 0x1855, 65582 }, + { 0x1856, 65578 }, + { 0x1857, 65550 }, + { 0x1858, 65610 }, + { 0x1859, 65614 }, + { 0x185A, 65618 }, + { 0x185B, 65622 }, + { 0x185C, 65606 }, + { 0x185D, 65430 }, + { 0x185E, 65434 }, + { 0x185F, 65458 }, + { 0x1860, 65478 }, + { 0x1861, 65438 }, + { 0x1862, 65486 }, + { 0x1863, 65466 }, + { 0x1864, 65450 }, + { 0x1865, 65454 }, + { 0x1866, 65470 }, + { 0x1867, 65506 }, + { 0x1868, 65474 }, + { 0x1869, 65442 }, + { 0x186A, 65462 }, + { 0x186B, 65446 }, + { 0x186C, 65494 }, + { 0x186D, 65498 }, + { 0x186E, 65510 }, + { 0x186F, 65482 }, + { 0x1870, 65502 }, + { 0x1871, 65490 }, + { 0x1872, 65514 }, + { 0x1873, 65636 }, + { 0x1874, 65644 }, + { 0x1875, 65648 }, + { 0x1876, 65640 }, + { 0x1877, 65736 }, + { 0x1880, 65388 }, + { 0x1881, 65382 }, + { 0x1882, 65367 }, + { 0x1883, 65377 }, + { 0x1884, 65394 }, + { 0x1885, 65362 }, + { 0x1886, 65356 }, + { 0x1887, 65259 }, + { 0x1888, 65264 }, + { 0x1889, 65284 }, + { 0x188A, 65309 }, + { 0x188B, 65274 }, + { 0x188C, 65329 }, + { 0x188D, 65351 }, + { 0x188E, 65304 }, + { 0x188F, 65314 }, + { 0x1890, 65294 }, + { 0x1891, 65279 }, + { 0x1892, 65289 }, + { 0x1893, 65319 }, + { 0x1894, 65324 }, + { 0x1895, 65334 }, + { 0x1896, 65299 }, + { 0x1897, 65269 }, + { 0x1898, 65586 }, + { 0x1899, 65592 }, + { 0x189A, 65688 }, + { 0x189B, 65706 }, + { 0x189C, 65652 }, + { 0x189D, 65694 }, + { 0x189E, 65718 }, + { 0x189F, 65730 }, + { 0x18A0, 65658 }, + { 0x18A1, 65682 }, + { 0x18A2, 65712 }, + { 0x18A3, 65676 }, + { 0x18A4, 65724 }, + { 0x18A5, 65664 }, + { 0x18A6, 65339 }, + { 0x18A7, 65345 }, + { 0x18A8, 65670 }, + { 0x18A9, 65372 }, + { 0x18AA, 65700 }, + { 0x1900, 21091 }, + { 0x1901, 21007 }, + { 0x1902, 21052 }, + { 0x1903, 20998 }, + { 0x1904, 21046 }, + { 0x1905, 21055 }, + { 0x1906, 20992 }, + { 0x1907, 21040 }, + { 0x1908, 21004 }, + { 0x1909, 21049 }, + { 0x190A, 21070 }, + { 0x190B, 21028 }, + { 0x190C, 21067 }, + { 0x190D, 20995 }, + { 0x190E, 21043 }, + { 0x190F, 21016 }, + { 0x1910, 21019 }, + { 0x1911, 21058 }, + { 0x1912, 20989 }, + { 0x1913, 21037 }, + { 0x1914, 21013 }, + { 0x1915, 21034 }, + { 0x1916, 21022 }, + { 0x1917, 21010 }, + { 0x1918, 21031 }, + { 0x1919, 21061 }, + { 0x191A, 21064 }, + { 0x191B, 21025 }, + { 0x191C, 21001 }, + { 0x1920, 20953 }, + { 0x1921, 20961 }, + { 0x1922, 20969 }, + { 0x1923, 20981 }, + { 0x1924, 20973 }, + { 0x1925, 20985 }, + { 0x1926, 20977 }, + { 0x1927, 20957 }, + { 0x1928, 20965 }, + { 0x1929, 21084 }, + { 0x192A, 21076 }, + { 0x192B, 21080 }, + { 0x1930, 20917 }, + { 0x1931, 20945 }, + { 0x1932, 20949 }, + { 0x1933, 20941 }, + { 0x1934, 20929 }, + { 0x1935, 20933 }, + { 0x1936, 20925 }, + { 0x1937, 20937 }, + { 0x1938, 20921 }, + { 0x1939, 20884 }, + { 0x193A, 20881 }, + { 0x193B, 20878 }, + { 0x1940, 20875 }, + { 0x1944, 21088 }, + { 0x1945, 21073 }, + { 0x1946, 20905 }, + { 0x1947, 20887 }, + { 0x1948, 20893 }, + { 0x1949, 20914 }, + { 0x194A, 20899 }, + { 0x194B, 20896 }, + { 0x194C, 20890 }, + { 0x194D, 20911 }, + { 0x194E, 20908 }, + { 0x194F, 20902 }, + { 0x1950, 7612 }, + { 0x1951, 7656 }, + { 0x1952, 7672 }, + { 0x1953, 7684 }, + { 0x1954, 7640 }, + { 0x1955, 7660 }, + { 0x1956, 7644 }, + { 0x1957, 7680 }, + { 0x1958, 7616 }, + { 0x1959, 7632 }, + { 0x195A, 7676 }, + { 0x195B, 7620 }, + { 0x195C, 7604 }, + { 0x195D, 7652 }, + { 0x195E, 7608 }, + { 0x195F, 7636 }, + { 0x1960, 7668 }, + { 0x1961, 7688 }, + { 0x1962, 7624 }, + { 0x1963, 7572 }, + { 0x1964, 7580 }, + { 0x1965, 7596 }, + { 0x1966, 7600 }, + { 0x1967, 7588 }, + { 0x1968, 7628 }, + { 0x1969, 7584 }, + { 0x196A, 7648 }, + { 0x196B, 7576 }, + { 0x196C, 7664 }, + { 0x196D, 7592 }, + { 0x1970, 7692 }, + { 0x1971, 7696 }, + { 0x1972, 7700 }, + { 0x1973, 7704 }, + { 0x1974, 7708 }, + { 0x1980, 6393 }, + { 0x1981, 6267 }, + { 0x1982, 6363 }, + { 0x1983, 6417 }, + { 0x1984, 6435 }, + { 0x1985, 6237 }, + { 0x1986, 6291 }, + { 0x1987, 6309 }, + { 0x1988, 6453 }, + { 0x1989, 6399 }, + { 0x198A, 6423 }, + { 0x198B, 6327 }, + { 0x198C, 6273 }, + { 0x198D, 6297 }, + { 0x198E, 6405 }, + { 0x198F, 6447 }, + { 0x1990, 6381 }, + { 0x1991, 6279 }, + { 0x1992, 6321 }, + { 0x1993, 6255 }, + { 0x1994, 6387 }, + { 0x1995, 6441 }, + { 0x1996, 6375 }, + { 0x1997, 6261 }, + { 0x1998, 6315 }, + { 0x1999, 6249 }, + { 0x199A, 6351 }, + { 0x199B, 6411 }, + { 0x199C, 6369 }, + { 0x199D, 6225 }, + { 0x199E, 6285 }, + { 0x199F, 6243 }, + { 0x19A0, 6357 }, + { 0x19A1, 6345 }, + { 0x19A2, 6339 }, + { 0x19A3, 6231 }, + { 0x19A4, 6219 }, + { 0x19A5, 6213 }, + { 0x19A6, 6429 }, + { 0x19A7, 6459 }, + { 0x19A8, 6303 }, + { 0x19A9, 6333 }, + { 0x19B0, 6206 }, + { 0x19B1, 6128 }, + { 0x19B2, 6146 }, + { 0x19B3, 6122 }, + { 0x19B4, 6176 }, + { 0x19B5, 6110 }, + { 0x19B6, 6134 }, + { 0x19B7, 6116 }, + { 0x19B8, 6158 }, + { 0x19B9, 6170 }, + { 0x19BA, 6140 }, + { 0x19BB, 6188 }, + { 0x19BC, 6182 }, + { 0x19BD, 6164 }, + { 0x19BE, 6194 }, + { 0x19BF, 6200 }, + { 0x19C0, 6152 }, + { 0x19C1, 6495 }, + { 0x19C2, 6501 }, + { 0x19C3, 6489 }, + { 0x19C4, 6483 }, + { 0x19C5, 6477 }, + { 0x19C6, 6471 }, + { 0x19C7, 6465 }, + { 0x19C8, 6050 }, + { 0x19C9, 6055 }, + { 0x19D0, 6090 }, + { 0x19D1, 6060 }, + { 0x19D2, 6070 }, + { 0x19D3, 6105 }, + { 0x19D4, 6080 }, + { 0x19D5, 6075 }, + { 0x19D6, 6065 }, + { 0x19D7, 6100 }, + { 0x19D8, 6095 }, + { 0x19D9, 6085 }, + { 0x19DE, 6040 }, + { 0x19DF, 6045 }, + { 0x19E0, 14375 }, + { 0x19E1, 14288 }, + { 0x19E2, 14272 }, + { 0x19E3, 14206 }, + { 0x19E4, 14280 }, + { 0x19E5, 14296 }, + { 0x19E6, 14368 }, + { 0x19E7, 14352 }, + { 0x19E8, 14344 }, + { 0x19E9, 14360 }, + { 0x19EA, 14214 }, + { 0x19EB, 14328 }, + { 0x19EC, 14312 }, + { 0x19ED, 14304 }, + { 0x19EE, 14320 }, + { 0x19EF, 14336 }, + { 0x19F0, 14372 }, + { 0x19F1, 14284 }, + { 0x19F2, 14268 }, + { 0x19F3, 14202 }, + { 0x19F4, 14276 }, + { 0x19F5, 14292 }, + { 0x19F6, 14364 }, + { 0x19F7, 14348 }, + { 0x19F8, 14340 }, + { 0x19F9, 14356 }, + { 0x19FA, 14210 }, + { 0x19FB, 14324 }, + { 0x19FC, 14308 }, + { 0x19FD, 14300 }, + { 0x19FE, 14316 }, + { 0x19FF, 14332 }, + { 0x1A00, 45814 }, + { 0x1A01, 45805 }, + { 0x1A02, 45847 }, + { 0x1A03, 45856 }, + { 0x1A04, 45826 }, + { 0x1A05, 45796 }, + { 0x1A06, 45820 }, + { 0x1A07, 45844 }, + { 0x1A08, 45835 }, + { 0x1A09, 45802 }, + { 0x1A0A, 45823 }, + { 0x1A0B, 45850 }, + { 0x1A0C, 45799 }, + { 0x1A0D, 45811 }, + { 0x1A0E, 45853 }, + { 0x1A0F, 45859 }, + { 0x1A10, 45841 }, + { 0x1A11, 45829 }, + { 0x1A12, 45817 }, + { 0x1A13, 45838 }, + { 0x1A14, 45832 }, + { 0x1A15, 45793 }, + { 0x1A16, 45808 }, + { 0x1A17, 45777 }, + { 0x1A18, 45785 }, + { 0x1A19, 45773 }, + { 0x1A1A, 45781 }, + { 0x1A1B, 45789 }, + { 0x1A1E, 45862 }, + { 0x1A1F, 45769 }, + { 0x1B00, 45088 }, + { 0x1B01, 45092 }, + { 0x1B02, 45099 }, + { 0x1B03, 45102 }, + { 0x1B04, 45096 }, + { 0x1B05, 45383 }, + { 0x1B06, 45386 }, + { 0x1B07, 45393 }, + { 0x1B08, 45396 }, + { 0x1B09, 45407 }, + { 0x1B0A, 45410 }, + { 0x1B0B, 45315 }, + { 0x1B0C, 45319 }, + { 0x1B0D, 45286 }, + { 0x1B0E, 45290 }, + { 0x1B0F, 45390 }, + { 0x1B10, 45414 }, + { 0x1B11, 45400 }, + { 0x1B12, 45403 }, + { 0x1B13, 45276 }, + { 0x1B14, 45279 }, + { 0x1B15, 45259 }, + { 0x1B16, 45262 }, + { 0x1B17, 45365 }, + { 0x1B18, 45231 }, + { 0x1B19, 45234 }, + { 0x1B1A, 45269 }, + { 0x1B1B, 45272 }, + { 0x1B1C, 45368 }, + { 0x1B1D, 45342 }, + { 0x1B1E, 45346 }, + { 0x1B1F, 45245 }, + { 0x1B20, 45250 }, + { 0x1B21, 45301 }, + { 0x1B22, 45335 }, + { 0x1B23, 45338 }, + { 0x1B24, 45238 }, + { 0x1B25, 45241 }, + { 0x1B26, 45298 }, + { 0x1B27, 45305 }, + { 0x1B28, 45308 }, + { 0x1B29, 45224 }, + { 0x1B2A, 45227 }, + { 0x1B2B, 45295 }, + { 0x1B2C, 45358 }, + { 0x1B2D, 45312 }, + { 0x1B2E, 45283 }, + { 0x1B2F, 45355 }, + { 0x1B30, 45327 }, + { 0x1B31, 45331 }, + { 0x1B32, 45324 }, + { 0x1B33, 45266 }, + { 0x1B34, 45105 }, + { 0x1B35, 45218 }, + { 0x1B36, 45171 }, + { 0x1B37, 45175 }, + { 0x1B38, 45180 }, + { 0x1B39, 45184 }, + { 0x1B3A, 45160 }, + { 0x1B3B, 45165 }, + { 0x1B3C, 45149 }, + { 0x1B3D, 45154 }, + { 0x1B3E, 45198 }, + { 0x1B3F, 45202 }, + { 0x1B40, 45213 }, + { 0x1B41, 45207 }, + { 0x1B42, 45189 }, + { 0x1B43, 45193 }, + { 0x1B44, 45085 }, + { 0x1B45, 45361 }, + { 0x1B46, 45375 }, + { 0x1B47, 45379 }, + { 0x1B48, 45255 }, + { 0x1B49, 45351 }, + { 0x1B4A, 45371 }, + { 0x1B4B, 45417 }, + { 0x1B50, 45135 }, + { 0x1B51, 45117 }, + { 0x1B52, 45123 }, + { 0x1B53, 45144 }, + { 0x1B54, 45129 }, + { 0x1B55, 45126 }, + { 0x1B56, 45120 }, + { 0x1B57, 45141 }, + { 0x1B58, 45138 }, + { 0x1B59, 45132 }, + { 0x1B5A, 45147 }, + { 0x1B5B, 45421 }, + { 0x1B5C, 45222 }, + { 0x1B5D, 45114 }, + { 0x1B5E, 45108 }, + { 0x1B5F, 45111 }, + { 0x1B60, 45568 }, + { 0x1B61, 45445 }, + { 0x1B62, 45437 }, + { 0x1B63, 45449 }, + { 0x1B64, 45423 }, + { 0x1B65, 45432 }, + { 0x1B66, 45441 }, + { 0x1B67, 45453 }, + { 0x1B68, 45461 }, + { 0x1B69, 45457 }, + { 0x1B6A, 45427 }, + { 0x1B6B, 45480 }, + { 0x1B6C, 45475 }, + { 0x1B6D, 45497 }, + { 0x1B6E, 45485 }, + { 0x1B6F, 45509 }, + { 0x1B70, 45502 }, + { 0x1B71, 45490 }, + { 0x1B72, 45470 }, + { 0x1B73, 45465 }, + { 0x1B74, 45550 }, + { 0x1B75, 45544 }, + { 0x1B76, 45562 }, + { 0x1B77, 45556 }, + { 0x1B78, 45514 }, + { 0x1B79, 45526 }, + { 0x1B7A, 45532 }, + { 0x1B7B, 45538 }, + { 0x1B7C, 45520 }, + { 0x1B80, 65869 }, + { 0x1B81, 65872 }, + { 0x1B82, 65875 }, + { 0x1B83, 65932 }, + { 0x1B84, 65938 }, + { 0x1B85, 65944 }, + { 0x1B86, 65947 }, + { 0x1B87, 65941 }, + { 0x1B88, 65935 }, + { 0x1B89, 65959 }, + { 0x1B8A, 65974 }, + { 0x1B8B, 65989 }, + { 0x1B8C, 65965 }, + { 0x1B8D, 66019 }, + { 0x1B8E, 65953 }, + { 0x1B8F, 65971 }, + { 0x1B90, 66013 }, + { 0x1B91, 66022 }, + { 0x1B92, 65998 }, + { 0x1B93, 65956 }, + { 0x1B94, 65983 }, + { 0x1B95, 65986 }, + { 0x1B96, 65962 }, + { 0x1B97, 66001 }, + { 0x1B98, 65950 }, + { 0x1B99, 65980 }, + { 0x1B9A, 66010 }, + { 0x1B9B, 65992 }, + { 0x1B9C, 65977 }, + { 0x1B9D, 66004 }, + { 0x1B9E, 65995 }, + { 0x1B9F, 66007 }, + { 0x1BA0, 65968 }, + { 0x1BA1, 66036 }, + { 0x1BA2, 66032 }, + { 0x1BA3, 66028 }, + { 0x1BA4, 65916 }, + { 0x1BA5, 65912 }, + { 0x1BA6, 65924 }, + { 0x1BA7, 65920 }, + { 0x1BA8, 65908 }, + { 0x1BA9, 65928 }, + { 0x1BAA, 65866 }, + { 0x1BAE, 66016 }, + { 0x1BAF, 66025 }, + { 0x1BB0, 65896 }, + { 0x1BB1, 65878 }, + { 0x1BB2, 65884 }, + { 0x1BB3, 65905 }, + { 0x1BB4, 65890 }, + { 0x1BB5, 65887 }, + { 0x1BB6, 65881 }, + { 0x1BB7, 65902 }, + { 0x1BB8, 65899 }, + { 0x1BB9, 65893 }, + { 0x1C00, 34194 }, + { 0x1C01, 34251 }, + { 0x1C02, 34248 }, + { 0x1C03, 34185 }, + { 0x1C04, 34242 }, + { 0x1C05, 34257 }, + { 0x1C06, 34176 }, + { 0x1C07, 34230 }, + { 0x1C08, 34191 }, + { 0x1C09, 34260 }, + { 0x1C0A, 34215 }, + { 0x1C0B, 34272 }, + { 0x1C0C, 34179 }, + { 0x1C0D, 34203 }, + { 0x1C0E, 34206 }, + { 0x1C0F, 34266 }, + { 0x1C10, 34263 }, + { 0x1C11, 34182 }, + { 0x1C12, 34239 }, + { 0x1C13, 34173 }, + { 0x1C14, 34227 }, + { 0x1C15, 34200 }, + { 0x1C16, 34254 }, + { 0x1C17, 34275 }, + { 0x1C18, 34281 }, + { 0x1C19, 34236 }, + { 0x1C1A, 34224 }, + { 0x1C1B, 34209 }, + { 0x1C1C, 34197 }, + { 0x1C1D, 34188 }, + { 0x1C1E, 34245 }, + { 0x1C1F, 34218 }, + { 0x1C20, 34212 }, + { 0x1C21, 34269 }, + { 0x1C22, 34221 }, + { 0x1C23, 34170 }, + { 0x1C24, 34327 }, + { 0x1C25, 34323 }, + { 0x1C26, 34158 }, + { 0x1C27, 34146 }, + { 0x1C28, 34150 }, + { 0x1C29, 34162 }, + { 0x1C2A, 34154 }, + { 0x1C2B, 34166 }, + { 0x1C2C, 34142 }, + { 0x1C2D, 34287 }, + { 0x1C2E, 34295 }, + { 0x1C2F, 34291 }, + { 0x1C30, 34299 }, + { 0x1C31, 34303 }, + { 0x1C32, 34307 }, + { 0x1C33, 34311 }, + { 0x1C34, 34319 }, + { 0x1C35, 34315 }, + { 0x1C36, 34106 }, + { 0x1C37, 34109 }, + { 0x1C3B, 34339 }, + { 0x1C3C, 34331 }, + { 0x1C3D, 34336 }, + { 0x1C3E, 34345 }, + { 0x1C3F, 34342 }, + { 0x1C40, 34130 }, + { 0x1C41, 34112 }, + { 0x1C42, 34118 }, + { 0x1C43, 34139 }, + { 0x1C44, 34124 }, + { 0x1C45, 34121 }, + { 0x1C46, 34115 }, + { 0x1C47, 34136 }, + { 0x1C48, 34133 }, + { 0x1C49, 34127 }, + { 0x1C4D, 34278 }, + { 0x1C4E, 34284 }, + { 0x1C4F, 34233 }, + { 0x1C50, 112 }, + { 0x1C51, 88 }, + { 0x1C52, 96 }, + { 0x1C53, 124 }, + { 0x1C54, 104 }, + { 0x1C55, 100 }, + { 0x1C56, 92 }, + { 0x1C57, 120 }, + { 0x1C58, 116 }, + { 0x1C59, 108 }, + { 0x1C5A, 163 }, + { 0x1C5B, 139 }, + { 0x1C5C, 131 }, + { 0x1C5D, 223 }, + { 0x1C5E, 135 }, + { 0x1C5F, 239 }, + { 0x1C60, 211 }, + { 0x1C61, 207 }, + { 0x1C62, 215 }, + { 0x1C63, 219 }, + { 0x1C64, 171 }, + { 0x1C65, 159 }, + { 0x1C66, 151 }, + { 0x1C67, 235 }, + { 0x1C68, 155 }, + { 0x1C69, 179 }, + { 0x1C6A, 195 }, + { 0x1C6B, 199 }, + { 0x1C6C, 247 }, + { 0x1C6D, 203 }, + { 0x1C6E, 167 }, + { 0x1C6F, 147 }, + { 0x1C70, 227 }, + { 0x1C71, 143 }, + { 0x1C72, 231 }, + { 0x1C73, 175 }, + { 0x1C74, 243 }, + { 0x1C75, 183 }, + { 0x1C76, 191 }, + { 0x1C77, 187 }, + { 0x1C78, 81 }, + { 0x1C79, 251 }, + { 0x1C7A, 258 }, + { 0x1C7B, 128 }, + { 0x1C7C, 255 }, + { 0x1C7D, 85 }, + { 0x1C7E, 267 }, + { 0x1C7F, 262 }, + { 0x1D00, 17949 }, + { 0x1D01, 18083 }, + { 0x1D02, 17650 }, + { 0x1D03, 18119 }, + { 0x1D04, 17959 }, + { 0x1D05, 17964 }, + { 0x1D06, 18098 }, + { 0x1D07, 17969 }, + { 0x1D08, 17660 }, + { 0x1D09, 17575 }, + { 0x1D0A, 18001 }, + { 0x1D0B, 18006 }, + { 0x1D0C, 18016 }, + { 0x1D0D, 18023 }, + { 0x1D0E, 18143 }, + { 0x1D0F, 18033 }, + { 0x1D10, 18113 }, + { 0x1D11, 17804 }, + { 0x1D12, 17821 }, + { 0x1D13, 17809 }, + { 0x1D14, 17655 }, + { 0x1D15, 18093 }, + { 0x1D16, 17292 }, + { 0x1D17, 17499 }, + { 0x1D18, 18038 }, + { 0x1D19, 18149 }, + { 0x1D1A, 18131 }, + { 0x1D1B, 18053 }, + { 0x1D1C, 18058 }, + { 0x1D1D, 17816 }, + { 0x1D1E, 17833 }, + { 0x1D1F, 17827 }, + { 0x1D20, 18063 }, + { 0x1D21, 18068 }, + { 0x1D22, 18078 }, + { 0x1D23, 18103 }, + { 0x1D24, 18159 }, + { 0x1D25, 17938 }, + { 0x1D26, 12051 }, + { 0x1D27, 12056 }, + { 0x1D28, 12036 }, + { 0x1D29, 12046 }, + { 0x1D2A, 12041 }, + { 0x1D2B, 49409 }, + { 0x1D2C, 54616 }, + { 0x1D2D, 54692 }, + { 0x1D2E, 54620 }, + { 0x1D2F, 54700 }, + { 0x1D30, 54624 }, + { 0x1D31, 54628 }, + { 0x1D32, 54705 }, + { 0x1D33, 54632 }, + { 0x1D34, 54636 }, + { 0x1D35, 54640 }, + { 0x1D36, 54644 }, + { 0x1D37, 54648 }, + { 0x1D38, 54652 }, + { 0x1D39, 54656 }, + { 0x1D3A, 54660 }, + { 0x1D3B, 54710 }, + { 0x1D3C, 54664 }, + { 0x1D3D, 54696 }, + { 0x1D3E, 54668 }, + { 0x1D3F, 54672 }, + { 0x1D40, 54676 }, + { 0x1D41, 54680 }, + { 0x1D42, 54688 }, + { 0x1D43, 54136 }, + { 0x1D44, 54421 }, + { 0x1D45, 54375 }, + { 0x1D46, 54466 }, + { 0x1D47, 54140 }, + { 0x1D48, 54154 }, + { 0x1D49, 54158 }, + { 0x1D4A, 54397 }, + { 0x1D4B, 54365 }, + { 0x1D4C, 54471 }, + { 0x1D4D, 54166 }, + { 0x1D4E, 54431 }, + { 0x1D4F, 54196 }, + { 0x1D50, 54218 }, + { 0x1D51, 54331 }, + { 0x1D52, 54242 }, + { 0x1D53, 54370 }, + { 0x1D54, 54351 }, + { 0x1D55, 54410 }, + { 0x1D56, 54246 }, + { 0x1D57, 54264 }, + { 0x1D58, 54275 }, + { 0x1D59, 54538 }, + { 0x1D5A, 54436 }, + { 0x1D5B, 54284 }, + { 0x1D5C, 54323 }, + { 0x1D5D, 54357 }, + { 0x1D5E, 54392 }, + { 0x1D5F, 54379 }, + { 0x1D60, 54387 }, + { 0x1D61, 54327 }, + { 0x1D62, 20792 }, + { 0x1D63, 20807 }, + { 0x1D64, 20812 }, + { 0x1D65, 20817 }, + { 0x1D66, 13101 }, + { 0x1D67, 13106 }, + { 0x1D68, 13096 }, + { 0x1D69, 13091 }, + { 0x1D6A, 13086 }, + { 0x1D6B, 17177 }, + { 0x1D6C, 14742 }, + { 0x1D6D, 14886 }, + { 0x1D6E, 15140 }, + { 0x1D6F, 15661 }, + { 0x1D70, 15745 }, + { 0x1D71, 16100 }, + { 0x1D72, 16239 }, + { 0x1D73, 16271 }, + { 0x1D74, 16370 }, + { 0x1D75, 16446 }, + { 0x1D76, 16999 }, + { 0x1D77, 17549 }, + { 0x1D78, 54782 }, + { 0x1D79, 17723 }, + { 0x1D7A, 17162 }, + { 0x1D7B, 17883 }, + { 0x1D7C, 17331 }, + { 0x1D7D, 16107 }, + { 0x1D7E, 17890 }, + { 0x1D7F, 17747 }, + { 0x1D80, 14761 }, + { 0x1D81, 14911 }, + { 0x1D82, 15147 }, + { 0x1D83, 15207 }, + { 0x1D84, 15493 }, + { 0x1D85, 15610 }, + { 0x1D86, 15668 }, + { 0x1D87, 15758 }, + { 0x1D88, 16121 }, + { 0x1D89, 16258 }, + { 0x1D8A, 16383 }, + { 0x1D8B, 17211 }, + { 0x1D8C, 16764 }, + { 0x1D8D, 16844 }, + { 0x1D8E, 17012 }, + { 0x1D8F, 14656 }, + { 0x1D90, 17433 }, + { 0x1D91, 14859 }, + { 0x1D92, 15061 }, + { 0x1D93, 17375 }, + { 0x1D94, 17791 }, + { 0x1D95, 17458 }, + { 0x1D96, 15395 }, + { 0x1D97, 17388 }, + { 0x1D98, 17218 }, + { 0x1D99, 16708 }, + { 0x1D9A, 17251 }, + { 0x1D9B, 54477 }, + { 0x1D9C, 54144 }, + { 0x1D9D, 54148 }, + { 0x1D9E, 54339 }, + { 0x1D9F, 54526 }, + { 0x1DA0, 54162 }, + { 0x1DA1, 54515 }, + { 0x1DA2, 54416 }, + { 0x1DA3, 54426 }, + { 0x1DA4, 54180 }, + { 0x1DA5, 54361 }, + { 0x1DA6, 54482 }, + { 0x1DA7, 54487 }, + { 0x1DA8, 54190 }, + { 0x1DA9, 54211 }, + { 0x1DAA, 54204 }, + { 0x1DAB, 54494 }, + { 0x1DAC, 54222 }, + { 0x1DAD, 54441 }, + { 0x1DAE, 54228 }, + { 0x1DAF, 54235 }, + { 0x1DB0, 54499 }, + { 0x1DB1, 54405 }, + { 0x1DB2, 54347 }, + { 0x1DB3, 54258 }, + { 0x1DB4, 54335 }, + { 0x1DB5, 54268 }, + { 0x1DB6, 54279 }, + { 0x1DB7, 54522 }, + { 0x1DB8, 54504 }, + { 0x1DB9, 54288 }, + { 0x1DBA, 54461 }, + { 0x1DBB, 54306 }, + { 0x1DBC, 54316 }, + { 0x1DBD, 54310 }, + { 0x1DBE, 54343 }, + { 0x1DBF, 54401 }, + { 0x1DC0, 57864 }, + { 0x1DC1, 57860 }, + { 0x1DC2, 57834 }, + { 0x1DC3, 58302 }, + { 0x1DC4, 58317 }, + { 0x1DC5, 58315 }, + { 0x1DC6, 58321 }, + { 0x1DC7, 58311 }, + { 0x1DC8, 58333 }, + { 0x1DC9, 58331 }, + { 0x1DCA, 57657 }, + { 0x1DCB, 58313 }, + { 0x1DCC, 58319 }, + { 0x1DCD, 57933 }, + { 0x1DCE, 57961 }, + { 0x1DCF, 57977 }, + { 0x1DD0, 57389 }, + { 0x1DD1, 57396 }, + { 0x1DD2, 57399 }, + { 0x1DD3, 57731 }, + { 0x1DD4, 57699 }, + { 0x1DD5, 57704 }, + { 0x1DD6, 57709 }, + { 0x1DD7, 57596 }, + { 0x1DD8, 57725 }, + { 0x1DD9, 57714 }, + { 0x1DDA, 57612 }, + { 0x1DDB, 57739 }, + { 0x1DDC, 57627 }, + { 0x1DDD, 57632 }, + { 0x1DDE, 57745 }, + { 0x1DDF, 57751 }, + { 0x1DE0, 57642 }, + { 0x1DE1, 57757 }, + { 0x1DE2, 57763 }, + { 0x1DE3, 57663 }, + { 0x1DE4, 57669 }, + { 0x1DE5, 57719 }, + { 0x1DE6, 57694 }, + { 0x1DFE, 57476 }, + { 0x1DFF, 57806 }, + { 0x1E00, 18281 }, + { 0x1E01, 14523 }, + { 0x1E02, 18458 }, + { 0x1E03, 14715 }, + { 0x1E04, 18465 }, + { 0x1E05, 14722 }, + { 0x1E06, 18478 }, + { 0x1E07, 14735 }, + { 0x1E08, 18538 }, + { 0x1E09, 14815 }, + { 0x1E0A, 18556 }, + { 0x1E0B, 14833 }, + { 0x1E0C, 18563 }, + { 0x1E0D, 14840 }, + { 0x1E0E, 18576 }, + { 0x1E0F, 14867 }, + { 0x1E10, 18619 }, + { 0x1E11, 14905 }, + { 0x1E12, 18625 }, + { 0x1E13, 14918 }, + { 0x1E14, 18715 }, + { 0x1E15, 15014 }, + { 0x1E16, 18707 }, + { 0x1E17, 15006 }, + { 0x1E18, 18810 }, + { 0x1E19, 15116 }, + { 0x1E1A, 18687 }, + { 0x1E1B, 14986 }, + { 0x1E1C, 18741 }, + { 0x1E1D, 15040 }, + { 0x1E1E, 18821 }, + { 0x1E1F, 15127 }, + { 0x1E20, 18869 }, + { 0x1E21, 15189 }, + { 0x1E22, 18897 }, + { 0x1E23, 15224 }, + { 0x1E24, 18904 }, + { 0x1E25, 15231 }, + { 0x1E26, 18942 }, + { 0x1E27, 15282 }, + { 0x1E28, 18930 }, + { 0x1E29, 15270 }, + { 0x1E2A, 18911 }, + { 0x1E2B, 15251 }, + { 0x1E2C, 19009 }, + { 0x1E2D, 15342 }, + { 0x1E2E, 19054 }, + { 0x1E2F, 15387 }, + { 0x1E30, 19108 }, + { 0x1E31, 15460 }, + { 0x1E32, 19088 }, + { 0x1E33, 15440 }, + { 0x1E34, 19101 }, + { 0x1E35, 15453 }, + { 0x1E36, 19164 }, + { 0x1E37, 15523 }, + { 0x1E38, 19171 }, + { 0x1E39, 15530 }, + { 0x1E3A, 19187 }, + { 0x1E3B, 15558 }, + { 0x1E3C, 19247 }, + { 0x1E3D, 15624 }, + { 0x1E3E, 19278 }, + { 0x1E3F, 15655 }, + { 0x1E40, 19258 }, + { 0x1E41, 15635 }, + { 0x1E42, 19265 }, + { 0x1E43, 15642 }, + { 0x1E44, 19288 }, + { 0x1E45, 15679 }, + { 0x1E46, 19295 }, + { 0x1E47, 15686 }, + { 0x1E48, 19309 }, + { 0x1E49, 15706 }, + { 0x1E4A, 19362 }, + { 0x1E4B, 15772 }, + { 0x1E4C, 19495 }, + { 0x1E4D, 15920 }, + { 0x1E4E, 19511 }, + { 0x1E4F, 15936 }, + { 0x1E50, 19547 }, + { 0x1E51, 15972 }, + { 0x1E52, 19539 }, + { 0x1E53, 15964 }, + { 0x1E54, 19676 }, + { 0x1E55, 16094 }, + { 0x1E56, 19663 }, + { 0x1E57, 16081 }, + { 0x1E58, 19732 }, + { 0x1E59, 16177 }, + { 0x1E5A, 19739 }, + { 0x1E5B, 16184 }, + { 0x1E5C, 19746 }, + { 0x1E5D, 16191 }, + { 0x1E5E, 19755 }, + { 0x1E5F, 16200 }, + { 0x1E60, 19815 }, + { 0x1E61, 16296 }, + { 0x1E62, 19822 }, + { 0x1E63, 16303 }, + { 0x1E64, 19845 }, + { 0x1E65, 16332 }, + { 0x1E66, 19860 }, + { 0x1E67, 16347 }, + { 0x1E68, 19829 }, + { 0x1E69, 16310 }, + { 0x1E6A, 19892 }, + { 0x1E6B, 16400 }, + { 0x1E6C, 19899 }, + { 0x1E6D, 16407 }, + { 0x1E6E, 19912 }, + { 0x1E6F, 16426 }, + { 0x1E70, 19958 }, + { 0x1E71, 16492 }, + { 0x1E72, 20167 }, + { 0x1E73, 16701 }, + { 0x1E74, 20081 }, + { 0x1E75, 16615 }, + { 0x1E76, 20180 }, + { 0x1E77, 16721 }, + { 0x1E78, 20073 }, + { 0x1E79, 16607 }, + { 0x1E7A, 20108 }, + { 0x1E7B, 16642 }, + { 0x1E7C, 20204 }, + { 0x1E7D, 16758 }, + { 0x1E7E, 20191 }, + { 0x1E7F, 16732 }, + { 0x1E80, 20247 }, + { 0x1E81, 16815 }, + { 0x1E82, 20241 }, + { 0x1E83, 16809 }, + { 0x1E84, 20253 }, + { 0x1E85, 16821 }, + { 0x1E86, 20221 }, + { 0x1E87, 16782 }, + { 0x1E88, 20228 }, + { 0x1E89, 16789 }, + { 0x1E8A, 20269 }, + { 0x1E8B, 16837 }, + { 0x1E8C, 20276 }, + { 0x1E8D, 16851 }, + { 0x1E8E, 20286 }, + { 0x1E8F, 16861 }, + { 0x1E90, 20416 }, + { 0x1E91, 17032 }, + { 0x1E92, 20372 }, + { 0x1E93, 16954 }, + { 0x1E94, 20385 }, + { 0x1E95, 16973 }, + { 0x1E96, 15244 }, + { 0x1E97, 16479 }, + { 0x1E98, 16802 }, + { 0x1E99, 16894 }, + { 0x1E9A, 14596 }, + { 0x1E9B, 17346 }, + { 0x1E9C, 17362 }, + { 0x1E9D, 17354 }, + { 0x1E9E, 20613 }, + { 0x1E9F, 17440 }, + { 0x1EA0, 18251 }, + { 0x1EA1, 14493 }, + { 0x1EA2, 18258 }, + { 0x1EA3, 14500 }, + { 0x1EA4, 18430 }, + { 0x1EA5, 14687 }, + { 0x1EA6, 18438 }, + { 0x1EA7, 14695 }, + { 0x1EA8, 18421 }, + { 0x1EA9, 14678 }, + { 0x1EAA, 18446 }, + { 0x1EAB, 14703 }, + { 0x1EAC, 18412 }, + { 0x1EAD, 14669 }, + { 0x1EAE, 18318 }, + { 0x1EAF, 14560 }, + { 0x1EB0, 18326 }, + { 0x1EB1, 14568 }, + { 0x1EB2, 18309 }, + { 0x1EB3, 14551 }, + { 0x1EB4, 18334 }, + { 0x1EB5, 14576 }, + { 0x1EB6, 18300 }, + { 0x1EB7, 14542 }, + { 0x1EB8, 18643 }, + { 0x1EB9, 14936 }, + { 0x1EBA, 18650 }, + { 0x1EBB, 14943 }, + { 0x1EBC, 18681 }, + { 0x1EBD, 14980 }, + { 0x1EBE, 18786 }, + { 0x1EBF, 15092 }, + { 0x1EC0, 18794 }, + { 0x1EC1, 15100 }, + { 0x1EC2, 18777 }, + { 0x1EC3, 15083 }, + { 0x1EC4, 18802 }, + { 0x1EC5, 15108 }, + { 0x1EC6, 18768 }, + { 0x1EC7, 15074 }, + { 0x1EC8, 18972 }, + { 0x1EC9, 15305 }, + { 0x1ECA, 18965 }, + { 0x1ECB, 15298 }, + { 0x1ECC, 19389 }, + { 0x1ECD, 15806 }, + { 0x1ECE, 19396 }, + { 0x1ECF, 15821 }, + { 0x1ED0, 19635 }, + { 0x1ED1, 16053 }, + { 0x1ED2, 19643 }, + { 0x1ED3, 16061 }, + { 0x1ED4, 19626 }, + { 0x1ED5, 16044 }, + { 0x1ED6, 19651 }, + { 0x1ED7, 16069 }, + { 0x1ED8, 19617 }, + { 0x1ED9, 16035 }, + { 0x1EDA, 19427 }, + { 0x1EDB, 15852 }, + { 0x1EDC, 19435 }, + { 0x1EDD, 15860 }, + { 0x1EDE, 19418 }, + { 0x1EDF, 15843 }, + { 0x1EE0, 19443 }, + { 0x1EE1, 15868 }, + { 0x1EE2, 19409 }, + { 0x1EE3, 15834 }, + { 0x1EE4, 19974 }, + { 0x1EE5, 16508 }, + { 0x1EE6, 19981 }, + { 0x1EE7, 16515 }, + { 0x1EE8, 20012 }, + { 0x1EE9, 16546 }, + { 0x1EEA, 20020 }, + { 0x1EEB, 16554 }, + { 0x1EEC, 20003 }, + { 0x1EED, 16537 }, + { 0x1EEE, 20028 }, + { 0x1EEF, 16562 }, + { 0x1EF0, 19994 }, + { 0x1EF1, 16528 }, + { 0x1EF2, 20325 }, + { 0x1EF3, 16907 }, + { 0x1EF4, 20293 }, + { 0x1EF5, 16868 }, + { 0x1EF6, 20306 }, + { 0x1EF7, 16881 }, + { 0x1EF8, 20331 }, + { 0x1EF9, 16913 }, + { 0x1EFA, 20759 }, + { 0x1EFB, 17868 }, + { 0x1EFC, 20754 }, + { 0x1EFD, 17863 }, + { 0x1EFE, 20313 }, + { 0x1EFF, 16888 }, + { 0x1F00, 11230 }, + { 0x1F01, 11162 }, + { 0x1F02, 11254 }, + { 0x1F03, 11186 }, + { 0x1F04, 11236 }, + { 0x1F05, 11168 }, + { 0x1F06, 11272 }, + { 0x1F07, 11204 }, + { 0x1F08, 12506 }, + { 0x1F09, 12438 }, + { 0x1F0A, 12530 }, + { 0x1F0B, 12462 }, + { 0x1F0C, 12512 }, + { 0x1F0D, 12444 }, + { 0x1F0E, 12548 }, + { 0x1F0F, 12480 }, + { 0x1F10, 11631 }, + { 0x1F11, 11609 }, + { 0x1F12, 11645 }, + { 0x1F13, 11623 }, + { 0x1F14, 11637 }, + { 0x1F15, 11615 }, + { 0x1F18, 12829 }, + { 0x1F19, 12807 }, + { 0x1F1A, 12843 }, + { 0x1F1B, 12821 }, + { 0x1F1C, 12835 }, + { 0x1F1D, 12813 }, + { 0x1F20, 10850 }, + { 0x1F21, 10782 }, + { 0x1F22, 10874 }, + { 0x1F23, 10806 }, + { 0x1F24, 10856 }, + { 0x1F25, 10788 }, + { 0x1F26, 10892 }, + { 0x1F27, 10824 }, + { 0x1F28, 12200 }, + { 0x1F29, 12132 }, + { 0x1F2A, 12224 }, + { 0x1F2B, 12156 }, + { 0x1F2C, 12206 }, + { 0x1F2D, 12138 }, + { 0x1F2E, 12242 }, + { 0x1F2F, 12174 }, + { 0x1F30, 11042 }, + { 0x1F31, 11012 }, + { 0x1F32, 11056 }, + { 0x1F33, 11026 }, + { 0x1F34, 11048 }, + { 0x1F35, 11018 }, + { 0x1F36, 11064 }, + { 0x1F37, 11034 }, + { 0x1F38, 12364 }, + { 0x1F39, 12334 }, + { 0x1F3A, 12378 }, + { 0x1F3B, 12348 }, + { 0x1F3C, 12370 }, + { 0x1F3D, 12340 }, + { 0x1F3E, 12386 }, + { 0x1F3F, 12356 }, + { 0x1F40, 11697 }, + { 0x1F41, 11675 }, + { 0x1F42, 11711 }, + { 0x1F43, 11689 }, + { 0x1F44, 11703 }, + { 0x1F45, 11681 }, + { 0x1F48, 12895 }, + { 0x1F49, 12873 }, + { 0x1F4A, 12909 }, + { 0x1F4B, 12887 }, + { 0x1F4C, 12901 }, + { 0x1F4D, 12879 }, + { 0x1F50, 11771 }, + { 0x1F51, 11741 }, + { 0x1F52, 11785 }, + { 0x1F53, 11755 }, + { 0x1F54, 11777 }, + { 0x1F55, 11747 }, + { 0x1F56, 11793 }, + { 0x1F57, 11763 }, + { 0x1F59, 12939 }, + { 0x1F5B, 12953 }, + { 0x1F5D, 12945 }, + { 0x1F5F, 12961 }, + { 0x1F60, 11461 }, + { 0x1F61, 11393 }, + { 0x1F62, 11485 }, + { 0x1F63, 11417 }, + { 0x1F64, 11467 }, + { 0x1F65, 11399 }, + { 0x1F66, 11503 }, + { 0x1F67, 11435 }, + { 0x1F68, 12698 }, + { 0x1F69, 12630 }, + { 0x1F6A, 12722 }, + { 0x1F6B, 12654 }, + { 0x1F6C, 12704 }, + { 0x1F6D, 12636 }, + { 0x1F6E, 12740 }, + { 0x1F6F, 12672 }, + { 0x1F70, 11304 }, + { 0x1F71, 11148 }, + { 0x1F72, 11659 }, + { 0x1F73, 11603 }, + { 0x1F74, 10924 }, + { 0x1F75, 10768 }, + { 0x1F76, 11078 }, + { 0x1F77, 11006 }, + { 0x1F78, 11725 }, + { 0x1F79, 11669 }, + { 0x1F7A, 11807 }, + { 0x1F7B, 11735 }, + { 0x1F7C, 11535 }, + { 0x1F7D, 11379 }, + { 0x1F80, 11290 }, + { 0x1F81, 11222 }, + { 0x1F82, 11262 }, + { 0x1F83, 11194 }, + { 0x1F84, 11244 }, + { 0x1F85, 11176 }, + { 0x1F86, 11280 }, + { 0x1F87, 11212 }, + { 0x1F88, 12566 }, + { 0x1F89, 12498 }, + { 0x1F8A, 12538 }, + { 0x1F8B, 12470 }, + { 0x1F8C, 12520 }, + { 0x1F8D, 12452 }, + { 0x1F8E, 12556 }, + { 0x1F8F, 12488 }, + { 0x1F90, 10910 }, + { 0x1F91, 10842 }, + { 0x1F92, 10882 }, + { 0x1F93, 10814 }, + { 0x1F94, 10864 }, + { 0x1F95, 10796 }, + { 0x1F96, 10900 }, + { 0x1F97, 10832 }, + { 0x1F98, 12260 }, + { 0x1F99, 12192 }, + { 0x1F9A, 12232 }, + { 0x1F9B, 12164 }, + { 0x1F9C, 12214 }, + { 0x1F9D, 12146 }, + { 0x1F9E, 12250 }, + { 0x1F9F, 12182 }, + { 0x1FA0, 11521 }, + { 0x1FA1, 11453 }, + { 0x1FA2, 11493 }, + { 0x1FA3, 11425 }, + { 0x1FA4, 11475 }, + { 0x1FA5, 11407 }, + { 0x1FA6, 11511 }, + { 0x1FA7, 11443 }, + { 0x1FA8, 12758 }, + { 0x1FA9, 12690 }, + { 0x1FAA, 12730 }, + { 0x1FAB, 12662 }, + { 0x1FAC, 12712 }, + { 0x1FAD, 12644 }, + { 0x1FAE, 12748 }, + { 0x1FAF, 12680 }, + { 0x1FB0, 11324 }, + { 0x1FB1, 11318 }, + { 0x1FB2, 11310 }, + { 0x1FB3, 11344 }, + { 0x1FB4, 11154 }, + { 0x1FB6, 11330 }, + { 0x1FB7, 11336 }, + { 0x1FB8, 12592 }, + { 0x1FB9, 12586 }, + { 0x1FBA, 12580 }, + { 0x1FBB, 12432 }, + { 0x1FBC, 12598 }, + { 0x1FBD, 13025 }, + { 0x1FBE, 13524 }, + { 0x1FBF, 10724 }, + { 0x1FC0, 13372 }, + { 0x1FC1, 13079 }, + { 0x1FC2, 10930 }, + { 0x1FC3, 10952 }, + { 0x1FC4, 10774 }, + { 0x1FC6, 10938 }, + { 0x1FC7, 10944 }, + { 0x1FC8, 12857 }, + { 0x1FC9, 12801 }, + { 0x1FCA, 12274 }, + { 0x1FCB, 12126 }, + { 0x1FCC, 12280 }, + { 0x1FCD, 10730 }, + { 0x1FCE, 10726 }, + { 0x1FCF, 10734 }, + { 0x1FD0, 11090 }, + { 0x1FD1, 11084 }, + { 0x1FD2, 11118 }, + { 0x1FD3, 11102 }, + { 0x1FD6, 11134 }, + { 0x1FD7, 11126 }, + { 0x1FD8, 12412 }, + { 0x1FD9, 12406 }, + { 0x1FDA, 12400 }, + { 0x1FDB, 12328 }, + { 0x1FDD, 10706 }, + { 0x1FDE, 10702 }, + { 0x1FDF, 10710 }, + { 0x1FE0, 11819 }, + { 0x1FE1, 11813 }, + { 0x1FE2, 11847 }, + { 0x1FE3, 11831 }, + { 0x1FE4, 10976 }, + { 0x1FE5, 10970 }, + { 0x1FE6, 11863 }, + { 0x1FE7, 11855 }, + { 0x1FE8, 12987 }, + { 0x1FE9, 12981 }, + { 0x1FEA, 12975 }, + { 0x1FEB, 12933 }, + { 0x1FEC, 12298 }, + { 0x1FED, 13075 }, + { 0x1FEE, 13071 }, + { 0x1FEF, 11900 }, + { 0x1FF2, 11541 }, + { 0x1FF3, 11563 }, + { 0x1FF4, 11385 }, + { 0x1FF6, 11549 }, + { 0x1FF7, 11555 }, + { 0x1FF8, 12923 }, + { 0x1FF9, 12867 }, + { 0x1FFA, 12772 }, + { 0x1FFB, 12624 }, + { 0x1FFC, 12778 }, + { 0x1FFD, 10692 }, + { 0x1FFE, 10700 }, + { 0x2000, 77 }, + { 0x2001, 71 }, + { 0x2002, 79 }, + { 0x2003, 73 }, + { 0x2004, 74478 }, + { 0x2005, 68661 }, + { 0x2006, 68597 }, + { 0x2007, 31771 }, + { 0x2008, 69272 }, + { 0x2009, 10051 }, + { 0x200A, 9123 }, + { 0x200B, 10089 }, + { 0x200C, 10099 }, + { 0x200D, 10092 }, + { 0x200E, 74617 }, + { 0x200F, 75041 }, + { 0x2010, 33424 }, + { 0x2011, 74240 }, + { 0x2012, 31769 }, + { 0x2013, 75 }, + { 0x2014, 69 }, + { 0x2015, 67636 }, + { 0x2016, 31692 }, + { 0x2017, 31548 }, + { 0x2018, 9381 }, + { 0x2019, 21908 }, + { 0x201A, 35854 }, + { 0x201B, 35868 }, + { 0x201C, 9365 }, + { 0x201D, 21892 }, + { 0x201E, 31570 }, + { 0x201F, 31700 }, + { 0x2020, 31169 }, + { 0x2021, 31587 }, + { 0x2022, 30312 }, + { 0x2023, 68599 }, + { 0x2024, 7161 }, + { 0x2025, 7766 }, + { 0x2026, 67661 }, + { 0x2027, 68663 }, + { 0x2028, 9483 }, + { 0x2029, 65751 }, + { 0x202A, 74621 }, + { 0x202B, 75045 }, + { 0x202C, 7173 }, + { 0x202D, 74619 }, + { 0x202E, 75043 }, + { 0x202F, 35576 }, + { 0x2030, 7170 }, + { 0x2031, 7164 }, + { 0x2032, 21742 }, + { 0x2033, 31574 }, + { 0x2034, 37619 }, + { 0x2035, 55468 }, + { 0x2036, 55475 }, + { 0x2037, 55491 }, + { 0x2038, 10441 }, + { 0x2039, 35858 }, + { 0x203A, 35863 }, + { 0x203B, 65808 }, + { 0x203C, 31695 }, + { 0x203D, 69263 }, + { 0x203E, 54945 }, + { 0x203F, 56009 }, + { 0x2040, 57360 }, + { 0x2041, 10442 }, + { 0x2042, 45084 }, + { 0x2043, 33428 }, + { 0x2044, 51779 }, + { 0x2045, 9404 }, + { 0x2046, 21931 }, + { 0x2047, 31668 }, + { 0x2048, 55448 }, + { 0x2049, 68658 }, + { 0x204A, 55895 }, + { 0x204B, 55494 }, + { 0x204C, 10314 }, + { 0x204D, 10331 }, + { 0x204E, 6038 }, + { 0x204F, 55505 }, + { 0x2050, 10452 }, + { 0x2051, 7789 }, + { 0x2052, 66839 }, + { 0x2053, 22751 }, + { 0x2054, 53355 }, + { 0x2055, 31779 }, + { 0x2056, 22989 }, + { 0x2057, 65761 }, + { 0x2058, 9100 }, + { 0x2059, 9094 }, + { 0x205A, 7769 }, + { 0x205B, 9097 }, + { 0x205C, 31529 }, + { 0x205D, 55910 }, + { 0x205E, 56031 }, + { 0x205F, 35557 }, + { 0x2060, 10087 }, + { 0x2061, 51784 }, + { 0x2062, 64310 }, + { 0x2063, 64312 }, + { 0x2064, 64308 }, + { 0x206A, 40633 }, + { 0x206B, 44713 }, + { 0x206C, 40629 }, + { 0x206D, 44709 }, + { 0x206E, 54880 }, + { 0x206F, 42828 }, + { 0x2070, 69298 }, + { 0x2071, 69302 }, + { 0x2074, 69288 }, + { 0x2075, 69286 }, + { 0x2076, 69282 }, + { 0x2077, 69317 }, + { 0x2078, 69300 }, + { 0x2079, 69293 }, + { 0x207A, 69295 }, + { 0x207B, 69312 }, + { 0x207C, 69321 }, + { 0x207D, 69290 }, + { 0x207E, 69314 }, + { 0x207F, 69307 }, + { 0x2080, 65843 }, + { 0x2081, 65825 }, + { 0x2082, 65829 }, + { 0x2083, 65854 }, + { 0x2084, 65833 }, + { 0x2085, 65831 }, + { 0x2086, 65827 }, + { 0x2087, 65852 }, + { 0x2088, 65845 }, + { 0x2089, 65838 }, + { 0x208A, 65840 }, + { 0x208B, 65847 }, + { 0x208C, 65856 }, + { 0x208D, 65835 }, + { 0x208E, 65849 }, + { 0x2090, 20782 }, + { 0x2091, 20787 }, + { 0x2092, 20802 }, + { 0x2093, 20822 }, + { 0x2094, 20827 }, + { 0x20A0, 74597 }, + { 0x20A1, 10456 }, + { 0x20A2, 48519 }, + { 0x20A3, 31787 }, + { 0x20A4, 9505 }, + { 0x20A5, 9596 }, + { 0x20A6, 21269 }, + { 0x20A7, 35651 }, + { 0x20A8, 22442 }, + { 0x20A9, 8709 }, + { 0x20AA, 6507 }, + { 0x20AB, 9068 }, + { 0x20AC, 9089 }, + { 0x20AD, 5797 }, + { 0x20AE, 37669 }, + { 0x20AF, 40498 }, + { 0x20B0, 31791 }, + { 0x20B1, 9631 }, + { 0x20B2, 40560 }, + { 0x20B3, 37779 }, + { 0x20B4, 40627 }, + { 0x20B5, 8727 }, + { 0x20D0, 57472 }, + { 0x20D1, 57795 }, + { 0x20D2, 57497 }, + { 0x20D3, 57829 }, + { 0x20D4, 58327 }, + { 0x20D5, 58236 }, + { 0x20D6, 57454 }, + { 0x20D7, 57787 }, + { 0x20D8, 57512 }, + { 0x20D9, 58232 }, + { 0x20DA, 58323 }, + { 0x20DB, 57837 }, + { 0x20DC, 57423 }, + { 0x20DD, 58245 }, + { 0x20DE, 58258 }, + { 0x20DF, 58266 }, + { 0x20E0, 58248 }, + { 0x20E1, 57462 }, + { 0x20E2, 58255 }, + { 0x20E3, 58252 }, + { 0x20E4, 58261 }, + { 0x20E5, 57987 }, + { 0x20E6, 57928 }, + { 0x20E7, 57980 }, + { 0x20E8, 57967 }, + { 0x20E9, 57515 }, + { 0x20EA, 58269 }, + { 0x20EB, 57484 }, + { 0x20EC, 58296 }, + { 0x20ED, 58273 }, + { 0x20EE, 57458 }, + { 0x20EF, 57791 }, + { 0x20F0, 57998 }, + { 0x2100, 37774 }, + { 0x2101, 56104 }, + { 0x2102, 74558 }, + { 0x2103, 31181 }, + { 0x2104, 30465 }, + { 0x2105, 8725 }, + { 0x2106, 8723 }, + { 0x2107, 10628 }, + { 0x2108, 43021 }, + { 0x2109, 31183 }, + { 0x210A, 35815 }, + { 0x210B, 35833 }, + { 0x210C, 69390 }, + { 0x210D, 74561 }, + { 0x210E, 35654 }, + { 0x210F, 35656 }, + { 0x2110, 35836 }, + { 0x2111, 69393 }, + { 0x2112, 35839 }, + { 0x2113, 35818 }, + { 0x2114, 0 }, + { 0x2115, 74564 }, + { 0x2116, 35635 }, + { 0x2117, 22671 }, + { 0x2118, 35845 }, + { 0x2119, 74567 }, + { 0x211A, 74570 }, + { 0x211B, 35848 }, + { 0x211C, 69396 }, + { 0x211D, 74573 }, + { 0x211E, 74242 }, + { 0x211F, 55455 }, + { 0x2120, 43025 }, + { 0x2121, 66040 }, + { 0x2122, 23055 }, + { 0x2123, 56010 }, + { 0x2124, 74576 }, + { 0x2125, 21731 }, + { 0x2126, 6813 }, + { 0x2127, 53346 }, + { 0x2128, 69399 }, + { 0x2129, 37676 }, + { 0x212A, 34094 }, + { 0x212B, 44717 }, + { 0x212C, 35824 }, + { 0x212D, 69387 }, + { 0x212E, 63380 }, + { 0x212F, 35812 }, + { 0x2130, 35827 }, + { 0x2131, 35830 }, + { 0x2132, 37684 }, + { 0x2133, 35842 }, + { 0x2134, 35821 }, + { 0x2135, 8716 }, + { 0x2136, 4380 }, + { 0x2137, 10636 }, + { 0x2138, 10477 }, + { 0x2139, 69246 }, + { 0x213A, 43017 }, + { 0x213B, 63383 }, + { 0x213C, 74532 }, + { 0x213D, 74535 }, + { 0x213E, 74582 }, + { 0x213F, 74579 }, + { 0x2140, 74529 }, + { 0x2141, 37689 }, + { 0x2142, 37693 }, + { 0x2143, 55507 }, + { 0x2144, 37697 }, + { 0x2145, 74554 }, + { 0x2146, 74538 }, + { 0x2147, 74542 }, + { 0x2148, 74546 }, + { 0x2149, 74550 }, + { 0x214A, 55384 }, + { 0x214B, 37687 }, + { 0x214C, 7168 }, + { 0x214D, 69338 }, + { 0x214E, 37681 }, + { 0x214F, 36848 }, + { 0x2153, 37724 }, + { 0x2154, 37740 }, + { 0x2155, 37716 }, + { 0x2156, 37736 }, + { 0x2157, 37760 }, + { 0x2158, 37752 }, + { 0x2159, 37720 }, + { 0x215A, 37744 }, + { 0x215B, 37728 }, + { 0x215C, 37764 }, + { 0x215D, 37748 }, + { 0x215E, 37756 }, + { 0x215F, 51781 }, + { 0x2160, 22020 }, + { 0x2161, 22057 }, + { 0x2162, 22095 }, + { 0x2163, 22071 }, + { 0x2164, 22060 }, + { 0x2165, 22042 }, + { 0x2166, 22092 }, + { 0x2167, 22077 }, + { 0x2168, 22074 }, + { 0x2169, 22050 }, + { 0x216A, 22098 }, + { 0x216B, 22101 }, + { 0x216C, 22080 }, + { 0x216D, 22023 }, + { 0x216E, 22063 }, + { 0x216F, 22032 }, + { 0x2170, 22521 }, + { 0x2171, 22543 }, + { 0x2172, 22576 }, + { 0x2173, 22556 }, + { 0x2174, 22547 }, + { 0x2175, 22535 }, + { 0x2176, 22572 }, + { 0x2177, 22564 }, + { 0x2178, 22560 }, + { 0x2179, 22539 }, + { 0x217A, 22580 }, + { 0x217B, 22584 }, + { 0x217C, 22568 }, + { 0x217D, 22525 }, + { 0x217E, 22551 }, + { 0x217F, 22530 }, + { 0x2180, 22036 }, + { 0x2181, 22067 }, + { 0x2182, 22053 }, + { 0x2183, 22104 }, + { 0x2184, 17753 }, + { 0x2185, 22045 }, + { 0x2186, 22083 }, + { 0x2187, 22088 }, + { 0x2188, 22027 }, + { 0x2190, 64325 }, + { 0x2191, 44542 }, + { 0x2192, 67992 }, + { 0x2193, 63251 }, + { 0x2194, 9258 }, + { 0x2195, 303 }, + { 0x2196, 21324 }, + { 0x2197, 21277 }, + { 0x2198, 22674 }, + { 0x2199, 22713 }, + { 0x219A, 64414 }, + { 0x219B, 68077 }, + { 0x219C, 64322 }, + { 0x219D, 67989 }, + { 0x219E, 64318 }, + { 0x219F, 44538 }, + { 0x21A0, 67985 }, + { 0x21A1, 63247 }, + { 0x21A2, 64384 }, + { 0x21A3, 68042 }, + { 0x21A4, 64345 }, + { 0x21A5, 44548 }, + { 0x21A6, 68003 }, + { 0x21A7, 63257 }, + { 0x21A8, 306 }, + { 0x21A9, 64371 }, + { 0x21AA, 68029 }, + { 0x21AB, 64375 }, + { 0x21AC, 68033 }, + { 0x21AD, 9254 }, + { 0x21AE, 9268 }, + { 0x21AF, 63312 }, + { 0x21B0, 44552 }, + { 0x21B1, 44557 }, + { 0x21B2, 63261 }, + { 0x21B3, 63266 }, + { 0x21B4, 68061 }, + { 0x21B5, 63271 }, + { 0x21B6, 74484 }, + { 0x21B7, 57362 }, + { 0x21B8, 21327 }, + { 0x21B9, 64331 }, + { 0x21BA, 74488 }, + { 0x21BB, 57366 }, + { 0x21BC, 64592 }, + { 0x21BD, 64597 }, + { 0x21BE, 44689 }, + { 0x21BF, 44684 }, + { 0x21C0, 68257 }, + { 0x21C1, 68262 }, + { 0x21C2, 63370 }, + { 0x21C3, 63365 }, + { 0x21C4, 68014 }, + { 0x21C5, 44572 }, + { 0x21C6, 64356 }, + { 0x21C7, 64500 }, + { 0x21C8, 44628 }, + { 0x21C9, 68165 }, + { 0x21CA, 63306 }, + { 0x21CB, 64510 }, + { 0x21CC, 68175 }, + { 0x21CD, 64486 }, + { 0x21CE, 9297 }, + { 0x21CF, 68151 }, + { 0x21D0, 64478 }, + { 0x21D1, 44625 }, + { 0x21D2, 68143 }, + { 0x21D3, 63303 }, + { 0x21D4, 9293 }, + { 0x21D5, 319 }, + { 0x21D6, 21365 }, + { 0x21D7, 21314 }, + { 0x21D8, 22709 }, + { 0x21D9, 22736 }, + { 0x21DA, 64507 }, + { 0x21DB, 68172 }, + { 0x21DC, 64602 }, + { 0x21DD, 68267 }, + { 0x21DE, 44562 }, + { 0x21DF, 63276 }, + { 0x21E0, 64471 }, + { 0x21E1, 44622 }, + { 0x21E2, 68136 }, + { 0x21E3, 63300 }, + { 0x21E4, 64327 }, + { 0x21E5, 67994 }, + { 0x21E6, 64468 }, + { 0x21E7, 44581 }, + { 0x21E8, 68128 }, + { 0x21E9, 63295 }, + { 0x21EA, 44605 }, + { 0x21EB, 44584 }, + { 0x21EC, 44597 }, + { 0x21ED, 44589 }, + { 0x21EE, 44610 }, + { 0x21EF, 44614 }, + { 0x21F0, 68131 }, + { 0x21F1, 21333 }, + { 0x21F2, 22677 }, + { 0x21F3, 315 }, + { 0x21F4, 21805 }, + { 0x21F5, 63286 }, + { 0x21F6, 22995 }, + { 0x21F7, 64418 }, + { 0x21F8, 68081 }, + { 0x21F9, 9273 }, + { 0x21FA, 64408 }, + { 0x21FB, 68071 }, + { 0x21FC, 9261 }, + { 0x21FD, 64655 }, + { 0x21FE, 68320 }, + { 0x21FF, 9310 }, + { 0x2200, 5791 }, + { 0x2201, 66842 }, + { 0x2202, 42971 }, + { 0x2203, 22987 }, + { 0x2204, 22983 }, + { 0x2205, 10570 }, + { 0x2206, 64305 }, + { 0x2207, 21268 }, + { 0x2208, 40500 }, + { 0x2209, 6719 }, + { 0x220A, 22599 }, + { 0x220B, 48398 }, + { 0x220C, 9033 }, + { 0x220D, 22626 }, + { 0x220E, 5788 }, + { 0x220F, 21260 }, + { 0x2210, 21262 }, + { 0x2211, 21264 }, + { 0x2212, 21178 }, + { 0x2213, 74623 }, + { 0x2214, 5780 }, + { 0x2215, 50310 }, + { 0x2216, 7176 }, + { 0x2217, 45082 }, + { 0x2218, 9706 }, + { 0x2219, 30313 }, + { 0x221A, 36200 }, + { 0x221B, 9013 }, + { 0x221C, 31785 }, + { 0x221D, 74470 }, + { 0x221E, 53300 }, + { 0x221F, 21771 }, + { 0x2220, 10106 }, + { 0x2221, 53732 }, + { 0x2222, 65815 }, + { 0x2223, 40489 }, + { 0x2224, 9023 }, + { 0x2225, 54946 }, + { 0x2226, 6764 }, + { 0x2227, 40959 }, + { 0x2228, 40927 }, + { 0x2229, 69570 }, + { 0x222A, 23058 }, + { 0x222B, 53306 }, + { 0x222C, 31664 }, + { 0x222D, 37633 }, + { 0x222E, 39790 }, + { 0x222F, 43581 }, + { 0x2230, 37710 }, + { 0x2231, 57381 }, + { 0x2232, 57378 }, + { 0x2233, 74500 }, + { 0x2234, 66307 }, + { 0x2235, 37781 }, + { 0x2236, 21746 }, + { 0x2237, 67972 }, + { 0x2238, 5784 }, + { 0x2239, 31766 }, + { 0x223A, 63794 }, + { 0x223B, 67635 }, + { 0x223C, 23021 }, + { 0x223D, 55470 }, + { 0x223E, 53349 }, + { 0x223F, 9708 }, + { 0x2240, 37772 }, + { 0x2241, 6733 }, + { 0x2242, 21204 }, + { 0x2243, 75048 }, + { 0x2244, 6777 }, + { 0x2245, 74516 }, + { 0x2246, 74505 }, + { 0x2247, 42821 }, + { 0x2248, 23692 }, + { 0x2249, 6735 }, + { 0x224A, 23687 }, + { 0x224B, 37621 }, + { 0x224C, 4011 }, + { 0x224D, 67226 }, + { 0x224E, 74602 }, + { 0x224F, 67222 }, + { 0x2250, 66827 }, + { 0x2251, 74599 }, + { 0x2252, 74519 }, + { 0x2253, 13722 }, + { 0x2254, 10458 }, + { 0x2255, 31764 }, + { 0x2256, 9695 }, + { 0x2257, 9701 }, + { 0x2258, 68616 }, + { 0x2259, 63382 }, + { 0x225A, 68654 }, + { 0x225B, 9718 }, + { 0x225C, 10479 }, + { 0x225D, 10596 }, + { 0x225E, 53730 }, + { 0x225F, 67976 }, + { 0x2260, 6730 }, + { 0x2261, 64292 }, + { 0x2262, 6767 }, + { 0x2263, 55525 }, + { 0x2264, 64658 }, + { 0x2265, 69429 }, + { 0x2266, 64722 }, + { 0x2267, 69493 }, + { 0x2268, 64712 }, + { 0x2269, 69483 }, + { 0x226A, 9599 }, + { 0x226B, 9601 }, + { 0x226C, 38099 }, + { 0x226D, 6772 }, + { 0x226E, 6770 }, + { 0x226F, 6775 }, + { 0x2270, 42793 }, + { 0x2271, 42807 }, + { 0x2272, 64692 }, + { 0x2273, 69466 }, + { 0x2274, 42798 }, + { 0x2275, 42816 }, + { 0x2276, 64699 }, + { 0x2277, 69463 }, + { 0x2278, 42803 }, + { 0x2279, 42812 }, + { 0x227A, 55334 }, + { 0x227B, 55528 }, + { 0x227C, 55335 }, + { 0x227D, 55529 }, + { 0x227E, 55339 }, + { 0x227F, 55533 }, + { 0x2280, 9052 }, + { 0x2281, 9060 }, + { 0x2282, 36469 }, + { 0x2283, 55576 }, + { 0x2284, 6711 }, + { 0x2285, 6715 }, + { 0x2286, 36471 }, + { 0x2287, 55578 }, + { 0x2288, 42779 }, + { 0x2289, 42786 }, + { 0x228A, 36484 }, + { 0x228B, 55591 }, + { 0x228C, 54875 }, + { 0x228D, 54878 }, + { 0x228E, 54876 }, + { 0x228F, 36310 }, + { 0x2290, 36425 }, + { 0x2291, 36320 }, + { 0x2292, 36435 }, + { 0x2293, 36092 }, + { 0x2294, 36094 }, + { 0x2295, 38882 }, + { 0x2296, 39182 }, + { 0x2297, 39184 }, + { 0x2298, 39468 }, + { 0x2299, 38871 }, + { 0x229A, 38884 }, + { 0x229B, 39462 }, + { 0x229C, 39194 }, + { 0x229D, 38874 }, + { 0x229E, 43560 }, + { 0x229F, 43562 }, + { 0x22A0, 43567 }, + { 0x22A1, 43553 }, + { 0x22A2, 21769 }, + { 0x22A3, 9202 }, + { 0x22A4, 9073 }, + { 0x22A5, 326 }, + { 0x22A6, 56111 }, + { 0x22A7, 35572 }, + { 0x22A8, 10054 }, + { 0x22A9, 31782 }, + { 0x22AA, 37641 }, + { 0x22AB, 31686 }, + { 0x22AC, 9020 }, + { 0x22AD, 6725 }, + { 0x22AE, 9017 }, + { 0x22AF, 42772 }, + { 0x22B0, 55379 }, + { 0x22B1, 55573 }, + { 0x22B2, 35580 }, + { 0x22B3, 48401 }, + { 0x22B4, 35583 }, + { 0x22B5, 48405 }, + { 0x22B6, 54929 }, + { 0x22B7, 13720 }, + { 0x22B8, 54874 }, + { 0x22B9, 64288 }, + { 0x22BA, 69248 }, + { 0x22BB, 8711 }, + { 0x22BC, 9603 }, + { 0x22BD, 6710 }, + { 0x22BE, 21773 }, + { 0x22BF, 21972 }, + { 0x22C0, 21257 }, + { 0x22C1, 21254 }, + { 0x22C2, 21266 }, + { 0x22C3, 21218 }, + { 0x22C4, 40327 }, + { 0x22C5, 5786 }, + { 0x22C6, 9720 }, + { 0x22C7, 50312 }, + { 0x22C8, 30294 }, + { 0x22C9, 9372 }, + { 0x22CA, 21899 }, + { 0x22CB, 9461 }, + { 0x22CC, 21988 }, + { 0x22CD, 55472 }, + { 0x22CE, 10471 }, + { 0x22CF, 10474 }, + { 0x22D0, 31610 }, + { 0x22D1, 31673 }, + { 0x22D2, 31698 }, + { 0x22D3, 31585 }, + { 0x22D4, 65756 }, + { 0x22D5, 10616 }, + { 0x22D6, 64728 }, + { 0x22D7, 69499 }, + { 0x22D8, 10057 }, + { 0x22D9, 10060 }, + { 0x22DA, 64775 }, + { 0x22DB, 69546 }, + { 0x22DC, 10608 }, + { 0x22DD, 10612 }, + { 0x22DE, 10600 }, + { 0x22DF, 10604 }, + { 0x22E0, 9055 }, + { 0x22E1, 9063 }, + { 0x22E2, 6750 }, + { 0x22E3, 6757 }, + { 0x22E4, 36313 }, + { 0x22E5, 36428 }, + { 0x22E6, 64717 }, + { 0x22E7, 69488 }, + { 0x22E8, 55343 }, + { 0x22E9, 55537 }, + { 0x22EA, 6739 }, + { 0x22EB, 9038 }, + { 0x22EC, 6743 }, + { 0x22ED, 9044 }, + { 0x22EE, 56096 }, + { 0x22EF, 41192 }, + { 0x22F0, 337 }, + { 0x22F1, 9080 }, + { 0x22F2, 40513 }, + { 0x22F3, 40527 }, + { 0x22F4, 22607 }, + { 0x22F5, 40502 }, + { 0x22F6, 40519 }, + { 0x22F7, 22602 }, + { 0x22F8, 40523 }, + { 0x22F9, 40507 }, + { 0x22FA, 48412 }, + { 0x22FB, 48420 }, + { 0x22FC, 22634 }, + { 0x22FD, 48417 }, + { 0x22FE, 22630 }, + { 0x22FF, 12 }, + { 0x2300, 50306 }, + { 0x2301, 50318 }, + { 0x2302, 13719 }, + { 0x2303, 341 }, + { 0x2304, 9084 }, + { 0x2305, 67971 }, + { 0x2306, 69271 }, + { 0x2307, 10080 }, + { 0x2308, 9431 }, + { 0x2309, 21958 }, + { 0x230A, 9249 }, + { 0x230B, 21842 }, + { 0x230C, 30268 }, + { 0x230D, 30255 }, + { 0x230E, 7747 }, + { 0x230F, 7734 }, + { 0x2310, 55456 }, + { 0x2311, 36399 }, + { 0x2312, 4379 }, + { 0x2313, 43024 }, + { 0x2314, 35851 }, + { 0x2315, 66045 }, + { 0x2316, 55332 }, + { 0x2317, 56102 }, + { 0x2318, 21735 }, + { 0x2319, 37671 }, + { 0x231A, 23154 }, + { 0x231B, 64291 }, + { 0x231C, 7741 }, + { 0x231D, 7754 }, + { 0x231E, 30262 }, + { 0x231F, 30275 }, + { 0x2320, 7731 }, + { 0x2321, 30252 }, + { 0x2322, 10635 }, + { 0x2323, 22670 }, + { 0x2324, 343 }, + { 0x2325, 35641 }, + { 0x2326, 10624 }, + { 0x2327, 7 }, + { 0x2328, 53725 }, + { 0x2329, 74605 }, + { 0x232A, 75087 }, + { 0x232B, 10620 }, + { 0x232C, 38093 }, + { 0x232D, 69402 }, + { 0x232E, 4014 }, + { 0x232F, 55656 }, + { 0x2330, 23053 }, + { 0x2331, 63245 }, + { 0x2332, 39788 }, + { 0x2333, 22479 }, + { 0x2334, 68618 }, + { 0x2335, 68619 }, + { 0x2336, 4325 }, + { 0x2337, 4329 }, + { 0x2338, 4159 }, + { 0x2339, 4174 }, + { 0x233A, 4179 }, + { 0x233B, 4132 }, + { 0x233C, 4169 }, + { 0x233D, 4305 }, + { 0x233E, 4295 }, + { 0x233F, 4276 }, + { 0x2340, 4349 }, + { 0x2341, 4164 }, + { 0x2342, 4195 }, + { 0x2343, 4212 }, + { 0x2344, 4223 }, + { 0x2345, 4359 }, + { 0x2346, 4369 }, + { 0x2347, 4206 }, + { 0x2348, 4217 }, + { 0x2349, 4315 }, + { 0x234A, 4090 }, + { 0x234B, 4247 }, + { 0x234C, 4143 }, + { 0x234D, 4154 }, + { 0x234E, 4084 }, + { 0x234F, 4344 }, + { 0x2350, 4184 }, + { 0x2351, 4031 }, + { 0x2352, 4049 }, + { 0x2353, 4121 }, + { 0x2354, 4127 }, + { 0x2355, 4025 }, + { 0x2356, 4354 }, + { 0x2357, 4200 }, + { 0x2358, 4271 }, + { 0x2359, 4252 }, + { 0x235A, 4334 }, + { 0x235B, 4064 }, + { 0x235C, 4310 }, + { 0x235D, 4019 }, + { 0x235E, 4266 }, + { 0x235F, 4300 }, + { 0x2360, 4149 }, + { 0x2361, 4037 }, + { 0x2362, 4059 }, + { 0x2363, 4228 }, + { 0x2364, 4069 }, + { 0x2365, 4320 }, + { 0x2366, 4078 }, + { 0x2367, 4111 }, + { 0x2368, 4286 }, + { 0x2369, 4374 }, + { 0x236A, 4242 }, + { 0x236B, 4054 }, + { 0x236C, 4291 }, + { 0x236D, 4281 }, + { 0x236E, 4364 }, + { 0x236F, 4137 }, + { 0x2370, 4190 }, + { 0x2371, 4096 }, + { 0x2372, 4043 }, + { 0x2373, 4102 }, + { 0x2374, 4074 }, + { 0x2375, 4257 }, + { 0x2376, 4237 }, + { 0x2377, 4339 }, + { 0x2378, 4106 }, + { 0x2379, 4261 }, + { 0x237A, 4233 }, + { 0x237B, 6727 }, + { 0x237C, 21777 }, + { 0x237D, 68594 }, + { 0x237E, 8721 }, + { 0x237F, 56078 }, + { 0x2380, 64306 }, + { 0x2381, 66843 }, + { 0x2382, 74526 }, + { 0x2383, 50320 }, + { 0x2384, 68613 }, + { 0x2385, 23322 }, + { 0x2386, 10594 }, + { 0x2387, 68603 }, + { 0x2388, 9125 }, + { 0x2389, 39769 }, + { 0x238A, 39614 }, + { 0x238B, 30307 }, + { 0x238C, 10055 }, + { 0x238D, 67877 }, + { 0x238E, 67663 }, + { 0x238F, 75142 }, + { 0x2390, 75145 }, + { 0x2391, 75150 }, + { 0x2392, 75148 }, + { 0x2393, 31220 }, + { 0x2394, 75137 }, + { 0x2395, 4117 }, + { 0x2396, 39959 }, + { 0x2397, 55382 }, + { 0x2398, 9604 }, + { 0x2399, 21743 }, + { 0x239A, 10449 }, + { 0x239B, 9470 }, + { 0x239C, 9474 }, + { 0x239D, 9466 }, + { 0x239E, 21997 }, + { 0x239F, 22001 }, + { 0x23A0, 21993 }, + { 0x23A1, 9419 }, + { 0x23A2, 9424 }, + { 0x23A3, 9414 }, + { 0x23A4, 21946 }, + { 0x23A5, 21951 }, + { 0x23A6, 21941 }, + { 0x23A7, 9239 }, + { 0x23A8, 9244 }, + { 0x23A9, 9234 }, + { 0x23AA, 10468 }, + { 0x23AB, 21832 }, + { 0x23AC, 21837 }, + { 0x23AD, 21827 }, + { 0x23AE, 53342 }, + { 0x23AF, 67638 }, + { 0x23B0, 23099 }, + { 0x23B1, 23123 }, + { 0x23B2, 65859 }, + { 0x23B3, 65864 }, + { 0x23B4, 7757 }, + { 0x23B5, 30278 }, + { 0x23B6, 30281 }, + { 0x23B7, 42979 }, + { 0x23B8, 9457 }, + { 0x23B9, 21984 }, + { 0x23BA, 67646 }, + { 0x23BB, 67649 }, + { 0x23BC, 67652 }, + { 0x23BD, 67655 }, + { 0x23BE, 63205 }, + { 0x23BF, 63225 }, + { 0x23C0, 63232 }, + { 0x23C1, 63182 }, + { 0x23C2, 63152 }, + { 0x23C3, 63238 }, + { 0x23C4, 63190 }, + { 0x23C5, 63160 }, + { 0x23C6, 63212 }, + { 0x23C7, 63174 }, + { 0x23C8, 63144 }, + { 0x23C9, 63168 }, + { 0x23CA, 63138 }, + { 0x23CB, 63198 }, + { 0x23CC, 63218 }, + { 0x23CD, 36165 }, + { 0x23CE, 35797 }, + { 0x23CF, 10568 }, + { 0x23D0, 56083 }, + { 0x23D1, 53857 }, + { 0x23D2, 53853 }, + { 0x23D3, 53859 }, + { 0x23D4, 53848 }, + { 0x23D5, 53839 }, + { 0x23D6, 53844 }, + { 0x23D7, 53863 }, + { 0x23D8, 53867 }, + { 0x23D9, 53865 }, + { 0x23DA, 10541 }, + { 0x23DB, 9119 }, + { 0x23DC, 7764 }, + { 0x23DD, 30292 }, + { 0x23DE, 7744 }, + { 0x23DF, 30265 }, + { 0x23E0, 7760 }, + { 0x23E1, 30288 }, + { 0x23E2, 23412 }, + { 0x23E3, 38095 }, + { 0x23E4, 74477 }, + { 0x23E5, 51778 }, + { 0x23E6, 67 }, + { 0x23E7, 67224 }, + { 0x2400, 36757 }, + { 0x2401, 36784 }, + { 0x2402, 36779 }, + { 0x2403, 36716 }, + { 0x2404, 36726 }, + { 0x2405, 36827 }, + { 0x2406, 36864 }, + { 0x2407, 36737 }, + { 0x2408, 36845 }, + { 0x2409, 36852 }, + { 0x240A, 36753 }, + { 0x240B, 36841 }, + { 0x240C, 36749 }, + { 0x240D, 36833 }, + { 0x240E, 36772 }, + { 0x240F, 36768 }, + { 0x2410, 36740 }, + { 0x2411, 36800 }, + { 0x2412, 36805 }, + { 0x2413, 36815 }, + { 0x2414, 36810 }, + { 0x2415, 36837 }, + { 0x2416, 36867 }, + { 0x2417, 36731 }, + { 0x2418, 36789 }, + { 0x2419, 36721 }, + { 0x241A, 36856 }, + { 0x241B, 36820 }, + { 0x241C, 36745 }, + { 0x241D, 36764 }, + { 0x241E, 36823 }, + { 0x241F, 36760 }, + { 0x2420, 36776 }, + { 0x2421, 36792 }, + { 0x2422, 10376 }, + { 0x2423, 9606 }, + { 0x2424, 36830 }, + { 0x2425, 36795 }, + { 0x2426, 36859 }, + { 0x2440, 6791 }, + { 0x2441, 6793 }, + { 0x2442, 6789 }, + { 0x2443, 6810 }, + { 0x2444, 6784 }, + { 0x2445, 6781 }, + { 0x2446, 6799 }, + { 0x2447, 6795 }, + { 0x2448, 6787 }, + { 0x2449, 6806 }, + { 0x244A, 6803 }, + { 0x2460, 38887 }, + { 0x2461, 38893 }, + { 0x2462, 38914 }, + { 0x2463, 38899 }, + { 0x2464, 38896 }, + { 0x2465, 38890 }, + { 0x2466, 38911 }, + { 0x2467, 38908 }, + { 0x2468, 38902 }, + { 0x2469, 39306 }, + { 0x246A, 39351 }, + { 0x246B, 39393 }, + { 0x246C, 39450 }, + { 0x246D, 39444 }, + { 0x246E, 39435 }, + { 0x246F, 39438 }, + { 0x2470, 39453 }, + { 0x2471, 39441 }, + { 0x2472, 39447 }, + { 0x2473, 39396 }, + { 0x2474, 74628 }, + { 0x2475, 74634 }, + { 0x2476, 74652 }, + { 0x2477, 74640 }, + { 0x2478, 74637 }, + { 0x2479, 74631 }, + { 0x247A, 74649 }, + { 0x247B, 74646 }, + { 0x247C, 74643 }, + { 0x247D, 74896 }, + { 0x247E, 74899 }, + { 0x247F, 74902 }, + { 0x2480, 74923 }, + { 0x2481, 74917 }, + { 0x2482, 74908 }, + { 0x2483, 74911 }, + { 0x2484, 74926 }, + { 0x2485, 74914 }, + { 0x2486, 74920 }, + { 0x2487, 74905 }, + { 0x2488, 10484 }, + { 0x2489, 10496 }, + { 0x248A, 10534 }, + { 0x248B, 10508 }, + { 0x248C, 10502 }, + { 0x248D, 10490 }, + { 0x248E, 10528 }, + { 0x248F, 10522 }, + { 0x2490, 10514 }, + { 0x2491, 35589 }, + { 0x2492, 35595 }, + { 0x2493, 35599 }, + { 0x2494, 35627 }, + { 0x2495, 35619 }, + { 0x2496, 35607 }, + { 0x2497, 35611 }, + { 0x2498, 35631 }, + { 0x2499, 35615 }, + { 0x249A, 35623 }, + { 0x249B, 35603 }, + { 0x249C, 74655 }, + { 0x249D, 74660 }, + { 0x249E, 74665 }, + { 0x249F, 74670 }, + { 0x24A0, 74675 }, + { 0x24A1, 74680 }, + { 0x24A2, 74685 }, + { 0x24A3, 74690 }, + { 0x24A4, 74695 }, + { 0x24A5, 74700 }, + { 0x24A6, 74705 }, + { 0x24A7, 74710 }, + { 0x24A8, 74715 }, + { 0x24A9, 74720 }, + { 0x24AA, 74725 }, + { 0x24AB, 74730 }, + { 0x24AC, 74735 }, + { 0x24AD, 74740 }, + { 0x24AE, 74745 }, + { 0x24AF, 74750 }, + { 0x24B0, 74755 }, + { 0x24B1, 74760 }, + { 0x24B2, 74765 }, + { 0x24B3, 74770 }, + { 0x24B4, 74775 }, + { 0x24B5, 74780 }, + { 0x24B6, 39052 }, + { 0x24B7, 39057 }, + { 0x24B8, 39062 }, + { 0x24B9, 39067 }, + { 0x24BA, 39072 }, + { 0x24BB, 39077 }, + { 0x24BC, 39082 }, + { 0x24BD, 39087 }, + { 0x24BE, 39092 }, + { 0x24BF, 39097 }, + { 0x24C0, 39102 }, + { 0x24C1, 39107 }, + { 0x24C2, 39112 }, + { 0x24C3, 39117 }, + { 0x24C4, 39122 }, + { 0x24C5, 39127 }, + { 0x24C6, 39132 }, + { 0x24C7, 39137 }, + { 0x24C8, 39142 }, + { 0x24C9, 39147 }, + { 0x24CA, 39152 }, + { 0x24CB, 39157 }, + { 0x24CC, 39162 }, + { 0x24CD, 39167 }, + { 0x24CE, 39172 }, + { 0x24CF, 39177 }, + { 0x24D0, 38922 }, + { 0x24D1, 38927 }, + { 0x24D2, 38932 }, + { 0x24D3, 38937 }, + { 0x24D4, 38942 }, + { 0x24D5, 38947 }, + { 0x24D6, 38952 }, + { 0x24D7, 38957 }, + { 0x24D8, 38962 }, + { 0x24D9, 38967 }, + { 0x24DA, 38972 }, + { 0x24DB, 38977 }, + { 0x24DC, 38982 }, + { 0x24DD, 38987 }, + { 0x24DE, 38992 }, + { 0x24DF, 38997 }, + { 0x24E0, 39002 }, + { 0x24E1, 39007 }, + { 0x24E2, 39012 }, + { 0x24E3, 39017 }, + { 0x24E4, 39022 }, + { 0x24E5, 39027 }, + { 0x24E6, 39032 }, + { 0x24E7, 39037 }, + { 0x24E8, 39042 }, + { 0x24E9, 39047 }, + { 0x24EA, 38905 }, + { 0x24EB, 54887 }, + { 0x24EC, 54891 }, + { 0x24ED, 54919 }, + { 0x24EE, 54911 }, + { 0x24EF, 54899 }, + { 0x24F0, 54903 }, + { 0x24F1, 54923 }, + { 0x24F2, 54907 }, + { 0x24F3, 54915 }, + { 0x24F4, 54895 }, + { 0x24F5, 31612 }, + { 0x24F6, 31620 }, + { 0x24F7, 31644 }, + { 0x24F8, 31628 }, + { 0x24F9, 31624 }, + { 0x24FA, 31616 }, + { 0x24FB, 31640 }, + { 0x24FC, 31636 }, + { 0x24FD, 31632 }, + { 0x24FE, 31648 }, + { 0x24FF, 54883 }, + { 0x2500, 5020 }, + { 0x2501, 4841 }, + { 0x2502, 4986 }, + { 0x2503, 4807 }, + { 0x2504, 4957 }, + { 0x2505, 4801 }, + { 0x2506, 4951 }, + { 0x2507, 4795 }, + { 0x2508, 5014 }, + { 0x2509, 4835 }, + { 0x250A, 5008 }, + { 0x250B, 4829 }, + { 0x250C, 4912 }, + { 0x250D, 4595 }, + { 0x250E, 4550 }, + { 0x250F, 4756 }, + { 0x2510, 4906 }, + { 0x2511, 4580 }, + { 0x2512, 4535 }, + { 0x2513, 4750 }, + { 0x2514, 4862 }, + { 0x2515, 4463 }, + { 0x2516, 4418 }, + { 0x2517, 4734 }, + { 0x2518, 4849 }, + { 0x2519, 4448 }, + { 0x251A, 4403 }, + { 0x251B, 4721 }, + { 0x251C, 4996 }, + { 0x251D, 5180 }, + { 0x251E, 4410 }, + { 0x251F, 4542 }, + { 0x2520, 5159 }, + { 0x2521, 4587 }, + { 0x2522, 4455 }, + { 0x2523, 4817 }, + { 0x2524, 4990 }, + { 0x2525, 5173 }, + { 0x2526, 4395 }, + { 0x2527, 4527 }, + { 0x2528, 5152 }, + { 0x2529, 4572 }, + { 0x252A, 4440 }, + { 0x252B, 4811 }, + { 0x252C, 4918 }, + { 0x252D, 4677 }, + { 0x252E, 5050 }, + { 0x252F, 4602 }, + { 0x2530, 4557 }, + { 0x2531, 5074 }, + { 0x2532, 4701 }, + { 0x2533, 4762 }, + { 0x2534, 4868 }, + { 0x2535, 4669 }, + { 0x2536, 5042 }, + { 0x2537, 4470 }, + { 0x2538, 4425 }, + { 0x2539, 5066 }, + { 0x253A, 4693 }, + { 0x253B, 4740 }, + { 0x253C, 5002 }, + { 0x253D, 4685 }, + { 0x253E, 5058 }, + { 0x253F, 5187 }, + { 0x2540, 4387 }, + { 0x2541, 4519 }, + { 0x2542, 5166 }, + { 0x2543, 4651 }, + { 0x2544, 5024 }, + { 0x2545, 4660 }, + { 0x2546, 5033 }, + { 0x2547, 4564 }, + { 0x2548, 4432 }, + { 0x2549, 5082 }, + { 0x254A, 4709 }, + { 0x254B, 4823 }, + { 0x254C, 4945 }, + { 0x254D, 4789 }, + { 0x254E, 4939 }, + { 0x254F, 4783 }, + { 0x2550, 5148 }, + { 0x2551, 5126 }, + { 0x2552, 4637 }, + { 0x2553, 4616 }, + { 0x2554, 5114 }, + { 0x2555, 4630 }, + { 0x2556, 4609 }, + { 0x2557, 5108 }, + { 0x2558, 4505 }, + { 0x2559, 4484 }, + { 0x255A, 5096 }, + { 0x255B, 4498 }, + { 0x255C, 4477 }, + { 0x255D, 5090 }, + { 0x255E, 5222 }, + { 0x255F, 5201 }, + { 0x2560, 5136 }, + { 0x2561, 5215 }, + { 0x2562, 5194 }, + { 0x2563, 5130 }, + { 0x2564, 4644 }, + { 0x2565, 4623 }, + { 0x2566, 5120 }, + { 0x2567, 4512 }, + { 0x2568, 4491 }, + { 0x2569, 5102 }, + { 0x256A, 5229 }, + { 0x256B, 5208 }, + { 0x256C, 5142 }, + { 0x256D, 4895 }, + { 0x256E, 4888 }, + { 0x256F, 4874 }, + { 0x2570, 4881 }, + { 0x2571, 4977 }, + { 0x2572, 4968 }, + { 0x2573, 4963 }, + { 0x2574, 4924 }, + { 0x2575, 4845 }, + { 0x2576, 4935 }, + { 0x2577, 4902 }, + { 0x2578, 4768 }, + { 0x2579, 4717 }, + { 0x257A, 4779 }, + { 0x257B, 4746 }, + { 0x257C, 4928 }, + { 0x257D, 4855 }, + { 0x257E, 4772 }, + { 0x257F, 4727 }, + { 0x2580, 23088 }, + { 0x2581, 21094 }, + { 0x2582, 21098 }, + { 0x2583, 21168 }, + { 0x2584, 21106 }, + { 0x2585, 21102 }, + { 0x2586, 21172 }, + { 0x2587, 21164 }, + { 0x2588, 9114 }, + { 0x2589, 9314 }, + { 0x258A, 9322 }, + { 0x258B, 9191 }, + { 0x258C, 9199 }, + { 0x258D, 9318 }, + { 0x258E, 9156 }, + { 0x258F, 9152 }, + { 0x2590, 21766 }, + { 0x2591, 20870 }, + { 0x2592, 35535 }, + { 0x2593, 9015 }, + { 0x2594, 23084 }, + { 0x2595, 21755 }, + { 0x2596, 55386 }, + { 0x2597, 55389 }, + { 0x2598, 55392 }, + { 0x2599, 55395 }, + { 0x259A, 55404 }, + { 0x259B, 55410 }, + { 0x259C, 55419 }, + { 0x259D, 55428 }, + { 0x259E, 55431 }, + { 0x259F, 55437 }, + { 0x25A0, 10270 }, + { 0x25A1, 23296 }, + { 0x25A2, 23328 }, + { 0x25A3, 23349 }, + { 0x25A4, 36279 }, + { 0x25A5, 36271 }, + { 0x25A6, 36283 }, + { 0x25A7, 36231 }, + { 0x25A8, 36246 }, + { 0x25A9, 36266 }, + { 0x25AA, 10212 }, + { 0x25AB, 23225 }, + { 0x25AC, 10317 }, + { 0x25AD, 23408 }, + { 0x25AE, 10309 }, + { 0x25AF, 23403 }, + { 0x25B0, 10361 }, + { 0x25B1, 23461 }, + { 0x25B2, 10341 }, + { 0x25B3, 23421 }, + { 0x25B4, 10337 }, + { 0x25B5, 23417 }, + { 0x25B6, 10373 }, + { 0x25B7, 23473 }, + { 0x25B8, 10363 }, + { 0x25B9, 23463 }, + { 0x25BA, 10367 }, + { 0x25BB, 23467 }, + { 0x25BC, 10348 }, + { 0x25BD, 23448 }, + { 0x25BE, 10344 }, + { 0x25BF, 23444 }, + { 0x25C0, 10358 }, + { 0x25C1, 23458 }, + { 0x25C2, 10351 }, + { 0x25C3, 23451 }, + { 0x25C4, 10355 }, + { 0x25C5, 23455 }, + { 0x25C6, 10272 }, + { 0x25C7, 23355 }, + { 0x25C8, 23365 }, + { 0x25C9, 40556 }, + { 0x25CA, 40990 }, + { 0x25CB, 23236 }, + { 0x25CC, 31533 }, + { 0x25CD, 30518 }, + { 0x25CE, 45864 }, + { 0x25CF, 10238 }, + { 0x25D0, 30485 }, + { 0x25D1, 30495 }, + { 0x25D2, 30490 }, + { 0x25D3, 30507 }, + { 0x25D4, 30512 }, + { 0x25D5, 30469 }, + { 0x25D6, 9195 }, + { 0x25D7, 21762 }, + { 0x25D8, 40639 }, + { 0x25D9, 40636 }, + { 0x25DA, 23094 }, + { 0x25DB, 21112 }, + { 0x25DC, 23112 }, + { 0x25DD, 23134 }, + { 0x25DE, 21141 }, + { 0x25DF, 21117 }, + { 0x25E0, 23091 }, + { 0x25E1, 21109 }, + { 0x25E2, 10198 }, + { 0x25E3, 10194 }, + { 0x25E4, 10224 }, + { 0x25E5, 10228 }, + { 0x25E6, 23234 }, + { 0x25E7, 36207 }, + { 0x25E8, 36226 }, + { 0x25E9, 36239 }, + { 0x25EA, 36219 }, + { 0x25EB, 23333 }, + { 0x25EC, 23424 }, + { 0x25ED, 69326 }, + { 0x25EE, 69332 }, + { 0x25EF, 14464 }, + { 0x25F0, 23310 }, + { 0x25F1, 23298 }, + { 0x25F2, 23304 }, + { 0x25F3, 23316 }, + { 0x25F4, 23265 }, + { 0x25F5, 23253 }, + { 0x25F6, 23259 }, + { 0x25F7, 23271 }, + { 0x25F8, 23117 }, + { 0x25F9, 23144 }, + { 0x25FA, 21122 }, + { 0x25FB, 23284 }, + { 0x25FC, 10261 }, + { 0x25FD, 23280 }, + { 0x25FE, 10257 }, + { 0x25FF, 21151 }, + { 0x2600, 10141 }, + { 0x2601, 10454 }, + { 0x2602, 56004 }, + { 0x2603, 43547 }, + { 0x2604, 10460 }, + { 0x2605, 10161 }, + { 0x2606, 23185 }, + { 0x2607, 64791 }, + { 0x2608, 74480 }, + { 0x2609, 7188 }, + { 0x260A, 56109 }, + { 0x260B, 66846 }, + { 0x260C, 68615 }, + { 0x260D, 67880 }, + { 0x260E, 10319 }, + { 0x260F, 23410 }, + { 0x2610, 30232 }, + { 0x2611, 30238 }, + { 0x2612, 30234 }, + { 0x2613, 43020 }, + { 0x2614, 56005 }, + { 0x2615, 5795 }, + { 0x2616, 23219 }, + { 0x2617, 10206 }, + { 0x2618, 55522 }, + { 0x2619, 55497 }, + { 0x261A, 10154 }, + { 0x261B, 10202 }, + { 0x261C, 23181 }, + { 0x261D, 23158 }, + { 0x261E, 23215 }, + { 0x261F, 23171 }, + { 0x2620, 22476 }, + { 0x2621, 38868 }, + { 0x2622, 69274 }, + { 0x2623, 56112 }, + { 0x2624, 45865 }, + { 0x2625, 8718 }, + { 0x2626, 54931 }, + { 0x2627, 5236 }, + { 0x2628, 10462 }, + { 0x2629, 10465 }, + { 0x262A, 9715 }, + { 0x262B, 10630 }, + { 0x262C, 4009 }, + { 0x262D, 31881 }, + { 0x262E, 21733 }, + { 0x262F, 8714 }, + { 0x2630, 44529 }, + { 0x2631, 44517 }, + { 0x2632, 44514 }, + { 0x2633, 44532 }, + { 0x2634, 44520 }, + { 0x2635, 44526 }, + { 0x2636, 44535 }, + { 0x2637, 44523 }, + { 0x2638, 23155 }, + { 0x2639, 23384 }, + { 0x263A, 23373 }, + { 0x263B, 10291 }, + { 0x263C, 23164 }, + { 0x263D, 10632 }, + { 0x263E, 9132 }, + { 0x263F, 41191 }, + { 0x2640, 31767 }, + { 0x2641, 10540 }, + { 0x2642, 9580 }, + { 0x2643, 40641 }, + { 0x2644, 35810 }, + { 0x2645, 37705 }, + { 0x2646, 42827 }, + { 0x2647, 21739 }, + { 0x2648, 10114 }, + { 0x2649, 37129 }, + { 0x264A, 31790 }, + { 0x264B, 30317 }, + { 0x264C, 6030 }, + { 0x264D, 23153 }, + { 0x264E, 20857 }, + { 0x264F, 55511 }, + { 0x2650, 69278 }, + { 0x2651, 57359 }, + { 0x2652, 44719 }, + { 0x2653, 35653 }, + { 0x2654, 23191 }, + { 0x2655, 23200 }, + { 0x2656, 23197 }, + { 0x2657, 23203 }, + { 0x2658, 23206 }, + { 0x2659, 23194 }, + { 0x265A, 10167 }, + { 0x265B, 10176 }, + { 0x265C, 10173 }, + { 0x265D, 10179 }, + { 0x265E, 10182 }, + { 0x265F, 10170 }, + { 0x2660, 10221 }, + { 0x2661, 23209 }, + { 0x2662, 23357 }, + { 0x2663, 10145 }, + { 0x2664, 23231 }, + { 0x2665, 10185 }, + { 0x2666, 10274 }, + { 0x2667, 23168 }, + { 0x2668, 5793 }, + { 0x2669, 42977 }, + { 0x266A, 31704 }, + { 0x266B, 30242 }, + { 0x266C, 30245 }, + { 0x266D, 21206 }, + { 0x266E, 21212 }, + { 0x266F, 21209 }, + { 0x2670, 10084 }, + { 0x2671, 9086 }, + { 0x2672, 66308 }, + { 0x2673, 65768 }, + { 0x2674, 65773 }, + { 0x2675, 65778 }, + { 0x2676, 65783 }, + { 0x2677, 65788 }, + { 0x2678, 65793 }, + { 0x2679, 65798 }, + { 0x267A, 65803 }, + { 0x267B, 10321 }, + { 0x267C, 55452 }, + { 0x267D, 75139 }, + { 0x267E, 65753 }, + { 0x267F, 68601 }, + { 0x2680, 5768 }, + { 0x2681, 5770 }, + { 0x2682, 5772 }, + { 0x2683, 5774 }, + { 0x2684, 5776 }, + { 0x2685, 5778 }, + { 0x2686, 23238 }, + { 0x2687, 23243 }, + { 0x2688, 10251 }, + { 0x2689, 10240 }, + { 0x268A, 54868 }, + { 0x268B, 54865 }, + { 0x268C, 31212 }, + { 0x268D, 31192 }, + { 0x268E, 31196 }, + { 0x268F, 31208 }, + { 0x2690, 23175 }, + { 0x2691, 10148 }, + { 0x2692, 31878 }, + { 0x2693, 23701 }, + { 0x2694, 39792 }, + { 0x2695, 22748 }, + { 0x2696, 35811 }, + { 0x2697, 37778 }, + { 0x2698, 31778 }, + { 0x2699, 9120 }, + { 0x269A, 22745 }, + { 0x269B, 8719 }, + { 0x269C, 69423 }, + { 0x269D, 54942 }, + { 0x26A0, 44705 }, + { 0x26A1, 9127 }, + { 0x26A2, 40495 }, + { 0x26A3, 40492 }, + { 0x26A4, 69258 }, + { 0x26A5, 9576 }, + { 0x26A6, 9590 }, + { 0x26A7, 9582 }, + { 0x26A8, 56086 }, + { 0x26A9, 67641 }, + { 0x26AA, 35541 }, + { 0x26AB, 35523 }, + { 0x26AC, 35537 }, + { 0x26AD, 53728 }, + { 0x26AE, 40490 }, + { 0x26AF, 66311 }, + { 0x26B0, 30571 }, + { 0x26B1, 40558 }, + { 0x26B2, 35579 }, + { 0x26B3, 10446 }, + { 0x26B4, 35649 }, + { 0x26B5, 9131 }, + { 0x26B6, 23152 }, + { 0x26B7, 30468 }, + { 0x26B8, 10158 }, + { 0x26B9, 43027 }, + { 0x26BA, 69279 }, + { 0x26BB, 55451 }, + { 0x26BC, 75099 }, + { 0x26C0, 23376 }, + { 0x26C1, 23379 }, + { 0x26C2, 10294 }, + { 0x26C3, 10297 }, + { 0x2701, 23120 }, + { 0x2702, 10304 }, + { 0x2703, 21130 }, + { 0x2704, 23389 }, + { 0x2706, 66042 }, + { 0x2707, 9722 }, + { 0x2708, 44716 }, + { 0x2709, 50322 }, + { 0x270C, 44703 }, + { 0x270D, 44707 }, + { 0x270E, 21138 }, + { 0x270F, 35650 }, + { 0x2710, 23131 }, + { 0x2711, 23162 }, + { 0x2712, 10139 }, + { 0x2713, 10447 }, + { 0x2714, 13551 }, + { 0x2715, 75053 }, + { 0x2716, 13671 }, + { 0x2717, 30230 }, + { 0x2718, 13593 }, + { 0x2719, 54936 }, + { 0x271A, 13565 }, + { 0x271B, 9612 }, + { 0x271C, 13530 }, + { 0x271D, 14471 }, + { 0x271E, 55515 }, + { 0x271F, 54939 }, + { 0x2720, 41189 }, + { 0x2721, 9712 }, + { 0x2722, 9109 }, + { 0x2723, 9106 }, + { 0x2724, 13526 }, + { 0x2725, 9103 }, + { 0x2726, 10150 }, + { 0x2727, 23177 }, + { 0x2729, 36465 }, + { 0x272A, 39186 }, + { 0x272B, 9608 }, + { 0x272C, 10234 }, + { 0x272D, 54933 }, + { 0x272E, 13634 }, + { 0x272F, 55330 }, + { 0x2730, 55512 }, + { 0x2731, 13632 }, + { 0x2732, 9615 }, + { 0x2733, 10543 }, + { 0x2734, 10546 }, + { 0x2735, 10550 }, + { 0x2736, 7178 }, + { 0x2737, 10554 }, + { 0x2738, 13554 }, + { 0x2739, 37701 }, + { 0x273A, 43505 }, + { 0x273B, 75114 }, + { 0x273C, 9618 }, + { 0x273D, 13704 }, + { 0x273E, 7182 }, + { 0x273F, 10300 }, + { 0x2740, 23382 }, + { 0x2741, 10559 }, + { 0x2742, 38876 }, + { 0x2743, 13707 }, + { 0x2744, 65814 }, + { 0x2745, 23005 }, + { 0x2746, 13627 }, + { 0x2747, 43552 }, + { 0x2748, 13630 }, + { 0x2749, 75051 }, + { 0x274A, 10564 }, + { 0x274B, 13560 }, + { 0x274D, 55519 }, + { 0x274F, 21159 }, + { 0x2750, 23147 }, + { 0x2751, 21146 }, + { 0x2752, 23139 }, + { 0x2756, 10282 }, + { 0x2758, 20872 }, + { 0x2759, 35544 }, + { 0x275A, 13638 }, + { 0x275B, 13620 }, + { 0x275C, 13614 }, + { 0x275D, 13607 }, + { 0x275E, 13601 }, + { 0x2761, 31164 }, + { 0x2762, 13644 }, + { 0x2763, 13568 }, + { 0x2764, 13534 }, + { 0x2765, 43008 }, + { 0x2766, 31776 }, + { 0x2767, 43013 }, + { 0x2768, 35519 }, + { 0x2769, 35531 }, + { 0x276A, 35547 }, + { 0x276B, 35552 }, + { 0x276C, 35560 }, + { 0x276D, 35565 }, + { 0x276E, 13665 }, + { 0x276F, 13679 }, + { 0x2770, 13660 }, + { 0x2771, 13674 }, + { 0x2772, 20858 }, + { 0x2773, 20864 }, + { 0x2774, 35514 }, + { 0x2775, 35526 }, + { 0x2776, 40379 }, + { 0x2777, 40389 }, + { 0x2778, 40419 }, + { 0x2779, 40399 }, + { 0x277A, 40394 }, + { 0x277B, 40384 }, + { 0x277C, 40414 }, + { 0x277D, 40409 }, + { 0x277E, 40404 }, + { 0x277F, 40424 }, + { 0x2780, 40329 }, + { 0x2781, 40339 }, + { 0x2782, 40369 }, + { 0x2783, 40349 }, + { 0x2784, 40344 }, + { 0x2785, 40334 }, + { 0x2786, 40364 }, + { 0x2787, 40359 }, + { 0x2788, 40354 }, + { 0x2789, 40374 }, + { 0x278A, 40429 }, + { 0x278B, 40441 }, + { 0x278C, 40477 }, + { 0x278D, 40453 }, + { 0x278E, 40447 }, + { 0x278F, 40435 }, + { 0x2790, 40471 }, + { 0x2791, 40465 }, + { 0x2792, 40459 }, + { 0x2793, 40483 }, + { 0x2794, 13648 }, + { 0x2798, 13583 }, + { 0x2799, 13641 }, + { 0x279A, 13579 }, + { 0x279B, 50314 }, + { 0x279C, 13652 }, + { 0x279D, 75116 }, + { 0x279E, 13711 }, + { 0x279F, 31175 }, + { 0x27A0, 13596 }, + { 0x27A1, 10328 }, + { 0x27A2, 43645 }, + { 0x27A3, 43649 }, + { 0x27A4, 10334 }, + { 0x27A5, 13544 }, + { 0x27A6, 13537 }, + { 0x27A7, 22741 }, + { 0x27A8, 13699 }, + { 0x27A9, 74472 }, + { 0x27AA, 69264 }, + { 0x27AB, 68606 }, + { 0x27AC, 69424 }, + { 0x27AD, 13573 }, + { 0x27AE, 13587 }, + { 0x27AF, 42831 }, + { 0x27B1, 42837 }, + { 0x27B2, 38917 }, + { 0x27B3, 75119 }, + { 0x27B4, 75104 }, + { 0x27B5, 75108 }, + { 0x27B6, 75100 }, + { 0x27B7, 13690 }, + { 0x27B8, 13695 }, + { 0x27B9, 13685 }, + { 0x27BA, 75111 }, + { 0x27BB, 13715 }, + { 0x27BC, 74481 }, + { 0x27BD, 13656 }, + { 0x27BE, 74625 }, + { 0x27C0, 23002 }, + { 0x27C1, 23391 }, + { 0x27C2, 75037 }, + { 0x27C3, 9622 }, + { 0x27C4, 9624 }, + { 0x27C5, 9435 }, + { 0x27C6, 21960 }, + { 0x27C7, 271 }, + { 0x27C8, 43004 }, + { 0x27C9, 55653 }, + { 0x27CA, 56011 }, + { 0x27CC, 9530 }, + { 0x27D0, 23360 }, + { 0x27D1, 4016 }, + { 0x27D2, 40537 }, + { 0x27D3, 21133 }, + { 0x27D4, 23107 }, + { 0x27D5, 9251 }, + { 0x27D6, 21844 }, + { 0x27D7, 9116 }, + { 0x27D8, 14454 }, + { 0x27D9, 14457 }, + { 0x27DA, 9139 }, + { 0x27DB, 9135 }, + { 0x27DC, 9433 }, + { 0x27DD, 9527 }, + { 0x27DE, 9515 }, + { 0x27DF, 328 }, + { 0x27E0, 40991 }, + { 0x27E1, 23429 }, + { 0x27E2, 23432 }, + { 0x27E3, 23438 }, + { 0x27E4, 23339 }, + { 0x27E5, 23344 }, + { 0x27E6, 71159 }, + { 0x27E7, 71183 }, + { 0x27E8, 71155 }, + { 0x27E9, 71179 }, + { 0x27EA, 71170 }, + { 0x27EB, 71194 }, + { 0x27EC, 71164 }, + { 0x27ED, 71188 }, + { 0x27EE, 71175 }, + { 0x27EF, 71199 }, + { 0x27F0, 44694 }, + { 0x27F1, 63375 }, + { 0x27F2, 74496 }, + { 0x27F3, 57374 }, + { 0x27F4, 21810 }, + { 0x27F5, 9532 }, + { 0x27F6, 9554 }, + { 0x27F7, 9518 }, + { 0x27F8, 9540 }, + { 0x27F9, 9562 }, + { 0x27FA, 9522 }, + { 0x27FB, 9535 }, + { 0x27FC, 9557 }, + { 0x27FD, 9544 }, + { 0x27FE, 9566 }, + { 0x27FF, 9572 }, + { 0x2800, 38100 }, + { 0x2801, 38103 }, + { 0x2802, 38106 }, + { 0x2803, 38127 }, + { 0x2804, 38109 }, + { 0x2805, 38130 }, + { 0x2806, 38148 }, + { 0x2807, 38211 }, + { 0x2808, 38112 }, + { 0x2809, 38133 }, + { 0x280A, 38151 }, + { 0x280B, 38214 }, + { 0x280C, 38166 }, + { 0x280D, 38229 }, + { 0x280E, 38274 }, + { 0x280F, 38379 }, + { 0x2810, 38115 }, + { 0x2811, 38136 }, + { 0x2812, 38154 }, + { 0x2813, 38217 }, + { 0x2814, 38169 }, + { 0x2815, 38232 }, + { 0x2816, 38277 }, + { 0x2817, 38382 }, + { 0x2818, 38181 }, + { 0x2819, 38244 }, + { 0x281A, 38289 }, + { 0x281B, 38394 }, + { 0x281C, 38319 }, + { 0x281D, 38424 }, + { 0x281E, 38484 }, + { 0x281F, 38589 }, + { 0x2820, 38118 }, + { 0x2821, 38139 }, + { 0x2822, 38157 }, + { 0x2823, 38220 }, + { 0x2824, 38172 }, + { 0x2825, 38235 }, + { 0x2826, 38280 }, + { 0x2827, 38385 }, + { 0x2828, 38184 }, + { 0x2829, 38247 }, + { 0x282A, 38292 }, + { 0x282B, 38397 }, + { 0x282C, 38322 }, + { 0x282D, 38427 }, + { 0x282E, 38487 }, + { 0x282F, 38592 }, + { 0x2830, 38193 }, + { 0x2831, 38256 }, + { 0x2832, 38301 }, + { 0x2833, 38406 }, + { 0x2834, 38331 }, + { 0x2835, 38436 }, + { 0x2836, 38496 }, + { 0x2837, 38601 }, + { 0x2838, 38349 }, + { 0x2839, 38454 }, + { 0x283A, 38514 }, + { 0x283B, 38619 }, + { 0x283C, 38544 }, + { 0x283D, 38649 }, + { 0x283E, 38694 }, + { 0x283F, 38757 }, + { 0x2840, 38121 }, + { 0x2841, 38142 }, + { 0x2842, 38160 }, + { 0x2843, 38223 }, + { 0x2844, 38175 }, + { 0x2845, 38238 }, + { 0x2846, 38283 }, + { 0x2847, 38388 }, + { 0x2848, 38187 }, + { 0x2849, 38250 }, + { 0x284A, 38295 }, + { 0x284B, 38400 }, + { 0x284C, 38325 }, + { 0x284D, 38430 }, + { 0x284E, 38490 }, + { 0x284F, 38595 }, + { 0x2850, 38196 }, + { 0x2851, 38259 }, + { 0x2852, 38304 }, + { 0x2853, 38409 }, + { 0x2854, 38334 }, + { 0x2855, 38439 }, + { 0x2856, 38499 }, + { 0x2857, 38604 }, + { 0x2858, 38352 }, + { 0x2859, 38457 }, + { 0x285A, 38517 }, + { 0x285B, 38622 }, + { 0x285C, 38547 }, + { 0x285D, 38652 }, + { 0x285E, 38697 }, + { 0x285F, 38760 }, + { 0x2860, 38202 }, + { 0x2861, 38265 }, + { 0x2862, 38310 }, + { 0x2863, 38415 }, + { 0x2864, 38340 }, + { 0x2865, 38445 }, + { 0x2866, 38505 }, + { 0x2867, 38610 }, + { 0x2868, 38358 }, + { 0x2869, 38463 }, + { 0x286A, 38523 }, + { 0x286B, 38628 }, + { 0x286C, 38553 }, + { 0x286D, 38658 }, + { 0x286E, 38703 }, + { 0x286F, 38766 }, + { 0x2870, 38367 }, + { 0x2871, 38472 }, + { 0x2872, 38532 }, + { 0x2873, 38637 }, + { 0x2874, 38562 }, + { 0x2875, 38667 }, + { 0x2876, 38712 }, + { 0x2877, 38775 }, + { 0x2878, 38574 }, + { 0x2879, 38679 }, + { 0x287A, 38724 }, + { 0x287B, 38787 }, + { 0x287C, 38739 }, + { 0x287D, 38802 }, + { 0x287E, 38820 }, + { 0x287F, 38841 }, + { 0x2880, 38124 }, + { 0x2881, 38145 }, + { 0x2882, 38163 }, + { 0x2883, 38226 }, + { 0x2884, 38178 }, + { 0x2885, 38241 }, + { 0x2886, 38286 }, + { 0x2887, 38391 }, + { 0x2888, 38190 }, + { 0x2889, 38253 }, + { 0x288A, 38298 }, + { 0x288B, 38403 }, + { 0x288C, 38328 }, + { 0x288D, 38433 }, + { 0x288E, 38493 }, + { 0x288F, 38598 }, + { 0x2890, 38199 }, + { 0x2891, 38262 }, + { 0x2892, 38307 }, + { 0x2893, 38412 }, + { 0x2894, 38337 }, + { 0x2895, 38442 }, + { 0x2896, 38502 }, + { 0x2897, 38607 }, + { 0x2898, 38355 }, + { 0x2899, 38460 }, + { 0x289A, 38520 }, + { 0x289B, 38625 }, + { 0x289C, 38550 }, + { 0x289D, 38655 }, + { 0x289E, 38700 }, + { 0x289F, 38763 }, + { 0x28A0, 38205 }, + { 0x28A1, 38268 }, + { 0x28A2, 38313 }, + { 0x28A3, 38418 }, + { 0x28A4, 38343 }, + { 0x28A5, 38448 }, + { 0x28A6, 38508 }, + { 0x28A7, 38613 }, + { 0x28A8, 38361 }, + { 0x28A9, 38466 }, + { 0x28AA, 38526 }, + { 0x28AB, 38631 }, + { 0x28AC, 38556 }, + { 0x28AD, 38661 }, + { 0x28AE, 38706 }, + { 0x28AF, 38769 }, + { 0x28B0, 38370 }, + { 0x28B1, 38475 }, + { 0x28B2, 38535 }, + { 0x28B3, 38640 }, + { 0x28B4, 38565 }, + { 0x28B5, 38670 }, + { 0x28B6, 38715 }, + { 0x28B7, 38778 }, + { 0x28B8, 38577 }, + { 0x28B9, 38682 }, + { 0x28BA, 38727 }, + { 0x28BB, 38790 }, + { 0x28BC, 38742 }, + { 0x28BD, 38805 }, + { 0x28BE, 38823 }, + { 0x28BF, 38844 }, + { 0x28C0, 38208 }, + { 0x28C1, 38271 }, + { 0x28C2, 38316 }, + { 0x28C3, 38421 }, + { 0x28C4, 38346 }, + { 0x28C5, 38451 }, + { 0x28C6, 38511 }, + { 0x28C7, 38616 }, + { 0x28C8, 38364 }, + { 0x28C9, 38469 }, + { 0x28CA, 38529 }, + { 0x28CB, 38634 }, + { 0x28CC, 38559 }, + { 0x28CD, 38664 }, + { 0x28CE, 38709 }, + { 0x28CF, 38772 }, + { 0x28D0, 38373 }, + { 0x28D1, 38478 }, + { 0x28D2, 38538 }, + { 0x28D3, 38643 }, + { 0x28D4, 38568 }, + { 0x28D5, 38673 }, + { 0x28D6, 38718 }, + { 0x28D7, 38781 }, + { 0x28D8, 38580 }, + { 0x28D9, 38685 }, + { 0x28DA, 38730 }, + { 0x28DB, 38793 }, + { 0x28DC, 38745 }, + { 0x28DD, 38808 }, + { 0x28DE, 38826 }, + { 0x28DF, 38847 }, + { 0x28E0, 38376 }, + { 0x28E1, 38481 }, + { 0x28E2, 38541 }, + { 0x28E3, 38646 }, + { 0x28E4, 38571 }, + { 0x28E5, 38676 }, + { 0x28E6, 38721 }, + { 0x28E7, 38784 }, + { 0x28E8, 38583 }, + { 0x28E9, 38688 }, + { 0x28EA, 38733 }, + { 0x28EB, 38796 }, + { 0x28EC, 38748 }, + { 0x28ED, 38811 }, + { 0x28EE, 38829 }, + { 0x28EF, 38850 }, + { 0x28F0, 38586 }, + { 0x28F1, 38691 }, + { 0x28F2, 38736 }, + { 0x28F3, 38799 }, + { 0x28F4, 38751 }, + { 0x28F5, 38814 }, + { 0x28F6, 38832 }, + { 0x28F7, 38853 }, + { 0x28F8, 38754 }, + { 0x28F9, 38817 }, + { 0x28FA, 38835 }, + { 0x28FB, 38856 }, + { 0x28FC, 38838 }, + { 0x28FD, 38859 }, + { 0x28FE, 38862 }, + { 0x28FF, 38865 }, + { 0x2900, 68309 }, + { 0x2901, 68302 }, + { 0x2902, 64491 }, + { 0x2903, 68156 }, + { 0x2904, 9303 }, + { 0x2905, 68275 }, + { 0x2906, 64481 }, + { 0x2907, 68146 }, + { 0x2908, 63281 }, + { 0x2909, 44567 }, + { 0x290A, 44631 }, + { 0x290B, 63309 }, + { 0x290C, 64474 }, + { 0x290D, 68139 }, + { 0x290E, 64503 }, + { 0x290F, 68168 }, + { 0x2910, 68315 }, + { 0x2911, 68066 }, + { 0x2912, 44544 }, + { 0x2913, 63253 }, + { 0x2914, 68054 }, + { 0x2915, 68046 }, + { 0x2916, 68280 }, + { 0x2917, 68294 }, + { 0x2918, 68285 }, + { 0x2919, 64608 }, + { 0x291A, 68273 }, + { 0x291B, 64497 }, + { 0x291C, 68162 }, + { 0x291D, 64340 }, + { 0x291E, 67998 }, + { 0x291F, 64349 }, + { 0x2920, 68007 }, + { 0x2921, 21318 }, + { 0x2922, 21271 }, + { 0x2923, 21345 }, + { 0x2924, 21287 }, + { 0x2925, 22689 }, + { 0x2926, 22723 }, + { 0x2927, 21338 }, + { 0x2928, 21280 }, + { 0x2929, 22682 }, + { 0x292A, 22716 }, + { 0x292B, 35805 }, + { 0x292C, 40551 }, + { 0x292D, 22694 }, + { 0x292E, 21299 }, + { 0x292F, 40545 }, + { 0x2930, 35799 }, + { 0x2931, 21292 }, + { 0x2932, 21350 }, + { 0x2933, 10070 }, + { 0x2934, 10127 }, + { 0x2935, 10133 }, + { 0x2936, 10115 }, + { 0x2937, 10121 }, + { 0x2938, 67981 }, + { 0x2939, 64314 }, + { 0x293A, 7721 }, + { 0x293B, 30248 }, + { 0x293C, 7715 }, + { 0x293D, 7725 }, + { 0x293E, 21154 }, + { 0x293F, 21125 }, + { 0x2940, 74492 }, + { 0x2941, 57370 }, + { 0x2942, 68086 }, + { 0x2943, 64423 }, + { 0x2944, 22470 }, + { 0x2945, 68037 }, + { 0x2946, 64379 }, + { 0x2947, 68116 }, + { 0x2948, 9279 }, + { 0x2949, 44697 }, + { 0x294A, 9167 }, + { 0x294B, 9174 }, + { 0x294C, 289 }, + { 0x294D, 282 }, + { 0x294E, 9160 }, + { 0x294F, 296 }, + { 0x2950, 9181 }, + { 0x2951, 275 }, + { 0x2952, 64515 }, + { 0x2953, 68180 }, + { 0x2954, 44670 }, + { 0x2955, 63351 }, + { 0x2956, 64559 }, + { 0x2957, 68224 }, + { 0x2958, 44634 }, + { 0x2959, 63315 }, + { 0x295A, 64522 }, + { 0x295B, 68187 }, + { 0x295C, 44677 }, + { 0x295D, 63358 }, + { 0x295E, 64566 }, + { 0x295F, 68231 }, + { 0x2960, 44641 }, + { 0x2961, 63322 }, + { 0x2962, 64537 }, + { 0x2963, 44648 }, + { 0x2964, 68213 }, + { 0x2965, 63340 }, + { 0x2966, 64548 }, + { 0x2967, 64573 }, + { 0x2968, 68202 }, + { 0x2969, 68238 }, + { 0x296A, 64529 }, + { 0x296B, 64584 }, + { 0x296C, 68194 }, + { 0x296D, 68249 }, + { 0x296E, 44659 }, + { 0x296F, 63329 }, + { 0x2970, 21882 }, + { 0x2971, 31756 }, + { 0x2972, 23038 }, + { 0x2973, 64429 }, + { 0x2974, 68092 }, + { 0x2975, 68097 }, + { 0x2976, 64759 }, + { 0x2977, 64461 }, + { 0x2978, 69536 }, + { 0x2979, 36531 }, + { 0x297A, 64457 }, + { 0x297B, 55638 }, + { 0x297C, 9188 }, + { 0x297D, 21759 }, + { 0x297E, 323 }, + { 0x297F, 9070 }, + { 0x2980, 37651 }, + { 0x2981, 26 }, + { 0x2982, 29 }, + { 0x2983, 9326 }, + { 0x2984, 21847 }, + { 0x2985, 9347 }, + { 0x2986, 21868 }, + { 0x2987, 16 }, + { 0x2988, 37 }, + { 0x2989, 21 }, + { 0x298A, 42 }, + { 0x298B, 9409 }, + { 0x298C, 21936 }, + { 0x298D, 9388 }, + { 0x298E, 21923 }, + { 0x298F, 9396 }, + { 0x2990, 21915 }, + { 0x2991, 9207 }, + { 0x2992, 21791 }, + { 0x2993, 9144 }, + { 0x2994, 21747 }, + { 0x2995, 31554 }, + { 0x2996, 31580 }, + { 0x2997, 9222 }, + { 0x2998, 21815 }, + { 0x2999, 31531 }, + { 0x299A, 56093 }, + { 0x299B, 53830 }, + { 0x299C, 21796 }, + { 0x299D, 53834 }, + { 0x299E, 10107 }, + { 0x299F, 10102 }, + { 0x29A0, 65821 }, + { 0x29A1, 65817 }, + { 0x29A2, 37674 }, + { 0x29A3, 55459 }, + { 0x29A4, 10111 }, + { 0x29A5, 55461 }, + { 0x29A6, 42843 }, + { 0x29A7, 42847 }, + { 0x29A8, 53746 }, + { 0x29A9, 53734 }, + { 0x29AA, 53770 }, + { 0x29AB, 53758 }, + { 0x29AC, 53806 }, + { 0x29AD, 53782 }, + { 0x29AE, 53818 }, + { 0x29AF, 53794 }, + { 0x29B0, 55465 }, + { 0x29B1, 10590 }, + { 0x29B2, 10584 }, + { 0x29B3, 10578 }, + { 0x29B4, 10572 }, + { 0x29B5, 30522 }, + { 0x29B6, 39617 }, + { 0x29B7, 39612 }, + { 0x29B8, 39459 }, + { 0x29B9, 39776 }, + { 0x29BA, 30530 }, + { 0x29BB, 30526 }, + { 0x29BC, 39784 }, + { 0x29BD, 333 }, + { 0x29BE, 39189 }, + { 0x29BF, 39192 }, + { 0x29C0, 39767 }, + { 0x29C1, 39774 }, + { 0x29C2, 30500 }, + { 0x29C3, 30477 }, + { 0x29C4, 43569 }, + { 0x29C5, 43575 }, + { 0x29C6, 43579 }, + { 0x29C7, 43564 }, + { 0x29C8, 43573 }, + { 0x29C9, 7778 }, + { 0x29CA, 55898 }, + { 0x29CB, 55907 }, + { 0x29CC, 4 }, + { 0x29CD, 55902 }, + { 0x29CE, 21974 }, + { 0x29CF, 9447 }, + { 0x29D0, 56016 }, + { 0x29D1, 30295 }, + { 0x29D2, 30300 }, + { 0x29D3, 10232 }, + { 0x29D4, 23043 }, + { 0x29D5, 23048 }, + { 0x29D6, 23406 }, + { 0x29D7, 10312 }, + { 0x29D8, 9428 }, + { 0x29D9, 21955 }, + { 0x29DA, 9361 }, + { 0x29DB, 21888 }, + { 0x29DC, 67665 }, + { 0x29DD, 7712 }, + { 0x29DE, 53301 }, + { 0x29DF, 69403 }, + { 0x29E0, 36275 }, + { 0x29E1, 64303 }, + { 0x29E2, 43172 }, + { 0x29E3, 31708 }, + { 0x29E4, 31713 }, + { 0x29E5, 64294 }, + { 0x29E6, 31794 }, + { 0x29E7, 75047 }, + { 0x29E8, 74585 }, + { 0x29E9, 74591 }, + { 0x29EA, 10277 }, + { 0x29EB, 10289 }, + { 0x29EC, 23248 }, + { 0x29ED, 10246 }, + { 0x29EE, 69417 }, + { 0x29EF, 69408 }, + { 0x29F0, 69420 }, + { 0x29F1, 69411 }, + { 0x29F2, 69414 }, + { 0x29F3, 69405 }, + { 0x29F4, 74476 }, + { 0x29F5, 43001 }, + { 0x29F6, 43549 }, + { 0x29F7, 42996 }, + { 0x29F8, 4385 }, + { 0x29F9, 4382 }, + { 0x29FA, 31559 }, + { 0x29FB, 37614 }, + { 0x29FC, 74608 }, + { 0x29FD, 75090 }, + { 0x29FE, 10053 }, + { 0x29FF, 9598 }, + { 0x2A00, 21242 }, + { 0x2A01, 21246 }, + { 0x2A02, 21250 }, + { 0x2A03, 21220 }, + { 0x2A04, 21225 }, + { 0x2A05, 21238 }, + { 0x2A06, 21234 }, + { 0x2A07, 7785 }, + { 0x2A08, 7781 }, + { 0x2A09, 21215 }, + { 0x2A0A, 35573 }, + { 0x2A0B, 65861 }, + { 0x2A0C, 65763 }, + { 0x2A0D, 31773 }, + { 0x2A0E, 53314 }, + { 0x2A0F, 53338 }, + { 0x2A10, 68611 }, + { 0x2A11, 74503 }, + { 0x2A12, 9491 }, + { 0x2A13, 9498 }, + { 0x2A14, 9485 }, + { 0x2A15, 53333 }, + { 0x2A16, 67973 }, + { 0x2A17, 53324 }, + { 0x2A18, 53307 }, + { 0x2A19, 53330 }, + { 0x2A1A, 53311 }, + { 0x2A1B, 53318 }, + { 0x2A1C, 53321 }, + { 0x2A1D, 9130 }, + { 0x2A1E, 14460 }, + { 0x2A1F, 59 }, + { 0x2A20, 51 }, + { 0x2A21, 55 }, + { 0x2A22, 9661 }, + { 0x2A23, 9682 }, + { 0x2A24, 9667 }, + { 0x2A25, 9651 }, + { 0x2A26, 9672 }, + { 0x2A27, 9677 }, + { 0x2A28, 9656 }, + { 0x2A29, 21189 }, + { 0x2A2A, 21184 }, + { 0x2A2B, 21199 }, + { 0x2A2C, 21194 }, + { 0x2A2D, 9635 }, + { 0x2A2E, 9641 }, + { 0x2A2F, 37706 }, + { 0x2A30, 75078 }, + { 0x2A31, 75083 }, + { 0x2A32, 68589 }, + { 0x2A33, 22668 }, + { 0x2A34, 75057 }, + { 0x2A35, 75063 }, + { 0x2A36, 39778 }, + { 0x2A37, 75069 }, + { 0x2A38, 39465 }, + { 0x2A39, 9647 }, + { 0x2A3A, 21180 }, + { 0x2A3B, 75074 }, + { 0x2A3C, 53344 }, + { 0x2A3D, 65810 }, + { 0x2A3E, 63 }, + { 0x2A3F, 69339 }, + { 0x2A40, 69571 }, + { 0x2A41, 23059 }, + { 0x2A42, 23067 }, + { 0x2A43, 69578 }, + { 0x2A44, 69574 }, + { 0x2A45, 23063 }, + { 0x2A46, 23075 }, + { 0x2A47, 69586 }, + { 0x2A48, 23070 }, + { 0x2A49, 69581 }, + { 0x2A4A, 23078 }, + { 0x2A4B, 69589 }, + { 0x2A4C, 30542 }, + { 0x2A4D, 30567 }, + { 0x2A4E, 31603 }, + { 0x2A4F, 31600 }, + { 0x2A50, 30546 }, + { 0x2A51, 40961 }, + { 0x2A52, 40929 }, + { 0x2A53, 31655 }, + { 0x2A54, 31652 }, + { 0x2A55, 7801 }, + { 0x2A56, 7797 }, + { 0x2A57, 43534 }, + { 0x2A58, 43537 }, + { 0x2A59, 40954 }, + { 0x2A5A, 40976 }, + { 0x2A5B, 40944 }, + { 0x2A5C, 40985 }, + { 0x2A5D, 40949 }, + { 0x2A5E, 40966 }, + { 0x2A5F, 40981 }, + { 0x2A60, 40971 }, + { 0x2A61, 22483 }, + { 0x2A62, 40934 }, + { 0x2A63, 40939 }, + { 0x2A64, 47 }, + { 0x2A65, 33 }, + { 0x2A66, 31721 }, + { 0x2A67, 64299 }, + { 0x2A68, 37655 }, + { 0x2A69, 37662 }, + { 0x2A6A, 23023 }, + { 0x2A6B, 23028 }, + { 0x2A6C, 43192 }, + { 0x2A6D, 58345 }, + { 0x2A6E, 31761 }, + { 0x2A6F, 23695 }, + { 0x2A70, 74511 }, + { 0x2A71, 31741 }, + { 0x2A72, 9688 }, + { 0x2A73, 31746 }, + { 0x2A74, 31567 }, + { 0x2A75, 7793 }, + { 0x2A76, 22998 }, + { 0x2A77, 31726 }, + { 0x2A78, 67228 }, + { 0x2A79, 64731 }, + { 0x2A7A, 69502 }, + { 0x2A7B, 64735 }, + { 0x2A7C, 69506 }, + { 0x2A7D, 64662 }, + { 0x2A7E, 69433 }, + { 0x2A7F, 64684 }, + { 0x2A80, 69455 }, + { 0x2A81, 64667 }, + { 0x2A82, 69438 }, + { 0x2A83, 64675 }, + { 0x2A84, 69446 }, + { 0x2A85, 64696 }, + { 0x2A86, 69470 }, + { 0x2A87, 64706 }, + { 0x2A88, 69477 }, + { 0x2A89, 64702 }, + { 0x2A8A, 69473 }, + { 0x2A8B, 64763 }, + { 0x2A8C, 69540 }, + { 0x2A8D, 64740 }, + { 0x2A8E, 69511 }, + { 0x2A8F, 64745 }, + { 0x2A90, 69516 }, + { 0x2A91, 64769 }, + { 0x2A92, 69530 }, + { 0x2A93, 64750 }, + { 0x2A94, 69521 }, + { 0x2A95, 43508 }, + { 0x2A96, 43521 }, + { 0x2A97, 43513 }, + { 0x2A98, 43526 }, + { 0x2A99, 68620 }, + { 0x2A9A, 68625 }, + { 0x2A9B, 68630 }, + { 0x2A9C, 68636 }, + { 0x2A9D, 43174 }, + { 0x2A9E, 43177 }, + { 0x2A9F, 43180 }, + { 0x2AA0, 43186 }, + { 0x2AA1, 31589 }, + { 0x2AA2, 31597 }, + { 0x2AA3, 31592 }, + { 0x2AA4, 69565 }, + { 0x2AA5, 69551 }, + { 0x2AA6, 64780 }, + { 0x2AA7, 69554 }, + { 0x2AA8, 64784 }, + { 0x2AA9, 69558 }, + { 0x2AAA, 43540 }, + { 0x2AAB, 34099 }, + { 0x2AAC, 43542 }, + { 0x2AAD, 34101 }, + { 0x2AAE, 31736 }, + { 0x2AAF, 55374 }, + { 0x2AB0, 55568 }, + { 0x2AB1, 55368 }, + { 0x2AB2, 55562 }, + { 0x2AB3, 55364 }, + { 0x2AB4, 55558 }, + { 0x2AB5, 55348 }, + { 0x2AB6, 55542 }, + { 0x2AB7, 55359 }, + { 0x2AB8, 55553 }, + { 0x2AB9, 55353 }, + { 0x2ABA, 55547 }, + { 0x2ABB, 31666 }, + { 0x2ABC, 31671 }, + { 0x2ABD, 36512 }, + { 0x2ABE, 55619 }, + { 0x2ABF, 36515 }, + { 0x2AC0, 55622 }, + { 0x2AC1, 36520 }, + { 0x2AC2, 55627 }, + { 0x2AC3, 36476 }, + { 0x2AC4, 55583 }, + { 0x2AC5, 36507 }, + { 0x2AC6, 55614 }, + { 0x2AC7, 36496 }, + { 0x2AC8, 55603 }, + { 0x2AC9, 36501 }, + { 0x2ACA, 55608 }, + { 0x2ACB, 36490 }, + { 0x2ACC, 55597 }, + { 0x2ACD, 36177 }, + { 0x2ACE, 36346 }, + { 0x2ACF, 30553 }, + { 0x2AD0, 30560 }, + { 0x2AD1, 30555 }, + { 0x2AD2, 30562 }, + { 0x2AD3, 36528 }, + { 0x2AD4, 55632 }, + { 0x2AD5, 36525 }, + { 0x2AD6, 55635 }, + { 0x2AD7, 55650 }, + { 0x2AD8, 55642 }, + { 0x2AD9, 40541 }, + { 0x2ADA, 65757 }, + { 0x2ADB, 69324 }, + { 0x2ADC, 40557 }, + { 0x2ADD, 67879 }, + { 0x2ADE, 22467 }, + { 0x2ADF, 22459 }, + { 0x2AE0, 22444 }, + { 0x2AE1, 75038 }, + { 0x2AE2, 56026 }, + { 0x2AE3, 31675 }, + { 0x2AE4, 56021 }, + { 0x2AE5, 31680 }, + { 0x2AE6, 9507 }, + { 0x2AE7, 22462 }, + { 0x2AE8, 22447 }, + { 0x2AE9, 22452 }, + { 0x2AEA, 31551 }, + { 0x2AEB, 31545 }, + { 0x2AEC, 31606 }, + { 0x2AED, 55483 }, + { 0x2AEE, 9026 }, + { 0x2AEF, 56068 }, + { 0x2AF0, 56073 }, + { 0x2AF1, 9075 }, + { 0x2AF2, 54952 }, + { 0x2AF3, 54948 }, + { 0x2AF4, 37646 }, + { 0x2AF5, 37635 }, + { 0x2AF6, 37616 }, + { 0x2AF7, 37623 }, + { 0x2AF8, 37626 }, + { 0x2AF9, 68642 }, + { 0x2AFA, 68648 }, + { 0x2AFB, 37629 }, + { 0x2AFC, 14466 }, + { 0x2AFD, 31661 }, + { 0x2AFE, 23397 }, + { 0x2AFF, 21230 }, + { 0x2B00, 21310 }, + { 0x2B01, 21361 }, + { 0x2B02, 22705 }, + { 0x2B03, 22732 }, + { 0x2B04, 9289 }, + { 0x2B05, 64465 }, + { 0x2B06, 44578 }, + { 0x2B07, 63292 }, + { 0x2B08, 21306 }, + { 0x2B09, 21357 }, + { 0x2B0A, 22701 }, + { 0x2B0B, 22728 }, + { 0x2B0C, 9285 }, + { 0x2B0D, 311 }, + { 0x2B0E, 68024 }, + { 0x2B0F, 68019 }, + { 0x2B10, 64366 }, + { 0x2B11, 64361 }, + { 0x2B12, 36202 }, + { 0x2B13, 36261 }, + { 0x2B14, 36254 }, + { 0x2B15, 36212 }, + { 0x2B16, 40312 }, + { 0x2B17, 40317 }, + { 0x2B18, 40307 }, + { 0x2B19, 40322 }, + { 0x2B1A, 31537 }, + { 0x2B1B, 10191 }, + { 0x2B1C, 23212 }, + { 0x2B1D, 10163 }, + { 0x2B1E, 23187 }, + { 0x2B1F, 10302 }, + { 0x2B20, 23387 }, + { 0x2B21, 23371 }, + { 0x2B22, 10287 }, + { 0x2B23, 67658 }, + { 0x2B24, 10188 }, + { 0x2B25, 10264 }, + { 0x2B26, 23287 }, + { 0x2B27, 10267 }, + { 0x2B28, 23290 }, + { 0x2B29, 10215 }, + { 0x2B2A, 10218 }, + { 0x2B2B, 23228 }, + { 0x2B2C, 10325 }, + { 0x2B2D, 23414 }, + { 0x2B2E, 10306 }, + { 0x2B2F, 23400 }, + { 0x2B30, 9212 }, + { 0x2B31, 22992 }, + { 0x2B32, 9217 }, + { 0x2B33, 9550 }, + { 0x2B34, 64644 }, + { 0x2B35, 64637 }, + { 0x2B36, 64610 }, + { 0x2B37, 64650 }, + { 0x2B38, 64403 }, + { 0x2B39, 64396 }, + { 0x2B3A, 64388 }, + { 0x2B3B, 64615 }, + { 0x2B3C, 64629 }, + { 0x2B3D, 64620 }, + { 0x2B3E, 64453 }, + { 0x2B3F, 10065 }, + { 0x2B40, 31751 }, + { 0x2B41, 42982 }, + { 0x2B42, 64446 }, + { 0x2B43, 68124 }, + { 0x2B44, 68120 }, + { 0x2B45, 64605 }, + { 0x2B46, 68270 }, + { 0x2B47, 42988 }, + { 0x2B48, 68109 }, + { 0x2B49, 23033 }, + { 0x2B4A, 64434 }, + { 0x2B4B, 64440 }, + { 0x2B4C, 68103 }, + { 0x2B50, 23277 }, + { 0x2B51, 10209 }, + { 0x2B52, 23222 }, + { 0x2B53, 10370 }, + { 0x2B54, 23470 }, + { 0x2C00, 67450 }, + { 0x2C01, 67479 }, + { 0x2C02, 67503 }, + { 0x2C03, 67579 }, + { 0x2C04, 67519 }, + { 0x2C05, 67555 }, + { 0x2C06, 67621 }, + { 0x2C07, 67523 }, + { 0x2C08, 67575 }, + { 0x2C09, 67491 }, + { 0x2C0A, 67583 }, + { 0x2C0B, 67434 }, + { 0x2C0C, 67563 }, + { 0x2C0D, 67495 }, + { 0x2C0E, 67604 }, + { 0x2C0F, 67608 }, + { 0x2C10, 67531 }, + { 0x2C11, 67459 }, + { 0x2C12, 67567 }, + { 0x2C13, 67535 }, + { 0x2C14, 67539 }, + { 0x2C15, 67571 }, + { 0x2C16, 67475 }, + { 0x2C17, 67527 }, + { 0x2C18, 67487 }, + { 0x2C19, 67463 }, + { 0x2C1A, 67438 }, + { 0x2C1B, 67499 }, + { 0x2C1C, 67471 }, + { 0x2C1D, 67559 }, + { 0x2C1E, 67467 }, + { 0x2C1F, 67515 }, + { 0x2C20, 67511 }, + { 0x2C21, 67507 }, + { 0x2C22, 67616 }, + { 0x2C23, 67446 }, + { 0x2C24, 67543 }, + { 0x2C25, 67548 }, + { 0x2C26, 67442 }, + { 0x2C27, 67594 }, + { 0x2C28, 67454 }, + { 0x2C29, 67588 }, + { 0x2C2A, 67483 }, + { 0x2C2B, 67600 }, + { 0x2C2C, 67612 }, + { 0x2C2D, 67630 }, + { 0x2C2E, 67625 }, + { 0x2C30, 67249 }, + { 0x2C31, 67278 }, + { 0x2C32, 67302 }, + { 0x2C33, 67378 }, + { 0x2C34, 67318 }, + { 0x2C35, 67354 }, + { 0x2C36, 67420 }, + { 0x2C37, 67322 }, + { 0x2C38, 67374 }, + { 0x2C39, 67290 }, + { 0x2C3A, 67382 }, + { 0x2C3B, 67233 }, + { 0x2C3C, 67362 }, + { 0x2C3D, 67294 }, + { 0x2C3E, 67403 }, + { 0x2C3F, 67407 }, + { 0x2C40, 67330 }, + { 0x2C41, 67258 }, + { 0x2C42, 67366 }, + { 0x2C43, 67334 }, + { 0x2C44, 67338 }, + { 0x2C45, 67370 }, + { 0x2C46, 67274 }, + { 0x2C47, 67326 }, + { 0x2C48, 67286 }, + { 0x2C49, 67262 }, + { 0x2C4A, 67237 }, + { 0x2C4B, 67298 }, + { 0x2C4C, 67270 }, + { 0x2C4D, 67358 }, + { 0x2C4E, 67266 }, + { 0x2C4F, 67314 }, + { 0x2C50, 67310 }, + { 0x2C51, 67306 }, + { 0x2C52, 67415 }, + { 0x2C53, 67245 }, + { 0x2C54, 67342 }, + { 0x2C55, 67347 }, + { 0x2C56, 67241 }, + { 0x2C57, 67393 }, + { 0x2C58, 67253 }, + { 0x2C59, 67387 }, + { 0x2C5A, 67282 }, + { 0x2C5B, 67399 }, + { 0x2C5C, 67411 }, + { 0x2C5D, 67429 }, + { 0x2C5E, 67424 }, + { 0x2C60, 19214 }, + { 0x2C61, 15577 }, + { 0x2C62, 19228 }, + { 0x2C63, 19682 }, + { 0x2C64, 19762 }, + { 0x2C65, 14629 }, + { 0x2C66, 16472 }, + { 0x2C67, 18936 }, + { 0x2C68, 15276 }, + { 0x2C69, 19148 }, + { 0x2C6A, 15507 }, + { 0x2C6B, 20410 }, + { 0x2C6C, 17019 }, + { 0x2C6D, 20597 }, + { 0x2C6E, 19272 }, + { 0x2C6F, 20649 }, + { 0x2C71, 16751 }, + { 0x2C72, 20235 }, + { 0x2C73, 16796 }, + { 0x2C74, 16739 }, + { 0x2C75, 20547 }, + { 0x2C76, 17312 }, + { 0x2C77, 17839 }, + { 0x2C78, 14974 }, + { 0x2C79, 17623 }, + { 0x2C7A, 15813 }, + { 0x2C7B, 18125 }, + { 0x2C7C, 20797 }, + { 0x2C7D, 54684 }, + { 0x2C80, 31044 }, + { 0x2C81, 30751 }, + { 0x2C82, 31072 }, + { 0x2C83, 30779 }, + { 0x2C84, 31084 }, + { 0x2C85, 30791 }, + { 0x2C86, 31080 }, + { 0x2C87, 30787 }, + { 0x2C88, 30922 }, + { 0x2C89, 30629 }, + { 0x2C8A, 31036 }, + { 0x2C8B, 30743 }, + { 0x2C8C, 31076 }, + { 0x2C8D, 30783 }, + { 0x2C8E, 31048 }, + { 0x2C8F, 30755 }, + { 0x2C90, 31108 }, + { 0x2C91, 30815 }, + { 0x2C92, 31088 }, + { 0x2C93, 30795 }, + { 0x2C94, 31056 }, + { 0x2C95, 30763 }, + { 0x2C96, 31092 }, + { 0x2C97, 30799 }, + { 0x2C98, 30898 }, + { 0x2C99, 30605 }, + { 0x2C9A, 30902 }, + { 0x2C9B, 30609 }, + { 0x2C9C, 30934 }, + { 0x2C9D, 30641 }, + { 0x2C9E, 30890 }, + { 0x2C9F, 30597 }, + { 0x2CA0, 30906 }, + { 0x2CA1, 30613 }, + { 0x2CA2, 30910 }, + { 0x2CA3, 30617 }, + { 0x2CA4, 31068 }, + { 0x2CA5, 30775 }, + { 0x2CA6, 31040 }, + { 0x2CA7, 30747 }, + { 0x2CA8, 30914 }, + { 0x2CA9, 30621 }, + { 0x2CAA, 30894 }, + { 0x2CAB, 30601 }, + { 0x2CAC, 30930 }, + { 0x2CAD, 30637 }, + { 0x2CAE, 31032 }, + { 0x2CAF, 30739 }, + { 0x2CB0, 31028 }, + { 0x2CB1, 30735 }, + { 0x2CB2, 31132 }, + { 0x2CB3, 30839 }, + { 0x2CB4, 30944 }, + { 0x2CB5, 30651 }, + { 0x2CB6, 31152 }, + { 0x2CB7, 30859 }, + { 0x2CB8, 31142 }, + { 0x2CB9, 30849 }, + { 0x2CBA, 31127 }, + { 0x2CBB, 30834 }, + { 0x2CBC, 31147 }, + { 0x2CBD, 30854 }, + { 0x2CBE, 30974 }, + { 0x2CBF, 30681 }, + { 0x2CC0, 31096 }, + { 0x2CC1, 30803 }, + { 0x2CC2, 31112 }, + { 0x2CC3, 30819 }, + { 0x2CC4, 30986 }, + { 0x2CC5, 30693 }, + { 0x2CC6, 30956 }, + { 0x2CC7, 30663 }, + { 0x2CC8, 31117 }, + { 0x2CC9, 30824 }, + { 0x2CCA, 31137 }, + { 0x2CCB, 30844 }, + { 0x2CCC, 30980 }, + { 0x2CCD, 30687 }, + { 0x2CCE, 30938 }, + { 0x2CCF, 30645 }, + { 0x2CD0, 31122 }, + { 0x2CD1, 30829 }, + { 0x2CD2, 30968 }, + { 0x2CD3, 30675 }, + { 0x2CD4, 30962 }, + { 0x2CD5, 30669 }, + { 0x2CD6, 30998 }, + { 0x2CD7, 30705 }, + { 0x2CD8, 30950 }, + { 0x2CD9, 30657 }, + { 0x2CDA, 30992 }, + { 0x2CDB, 30699 }, + { 0x2CDC, 31022 }, + { 0x2CDD, 30729 }, + { 0x2CDE, 31004 }, + { 0x2CDF, 30711 }, + { 0x2CE0, 31010 }, + { 0x2CE1, 30717 }, + { 0x2CE2, 31016 }, + { 0x2CE3, 30723 }, + { 0x2CE4, 30872 }, + { 0x2CE5, 30864 }, + { 0x2CE6, 30868 }, + { 0x2CE7, 30887 }, + { 0x2CE8, 30879 }, + { 0x2CE9, 30875 }, + { 0x2CEA, 30883 }, + { 0x2CF9, 30572 }, + { 0x2CFA, 30582 }, + { 0x2CFB, 30588 }, + { 0x2CFC, 30577 }, + { 0x2CFD, 31157 }, + { 0x2CFE, 30594 }, + { 0x2CFF, 31161 }, + { 0x2D00, 51786 }, + { 0x2D01, 51814 }, + { 0x2D02, 51830 }, + { 0x2D03, 51826 }, + { 0x2D04, 51790 }, + { 0x2D05, 51894 }, + { 0x2D06, 51902 }, + { 0x2D07, 51886 }, + { 0x2D08, 51798 }, + { 0x2D09, 51854 }, + { 0x2D0A, 51858 }, + { 0x2D0B, 51862 }, + { 0x2D0C, 51866 }, + { 0x2D0D, 51802 }, + { 0x2D0E, 51870 }, + { 0x2D0F, 51934 }, + { 0x2D10, 51878 }, + { 0x2D11, 51882 }, + { 0x2D12, 51890 }, + { 0x2D13, 51806 }, + { 0x2D14, 51926 }, + { 0x2D15, 51922 }, + { 0x2D16, 51914 }, + { 0x2D17, 51874 }, + { 0x2D18, 51930 }, + { 0x2D19, 51910 }, + { 0x2D1A, 51818 }, + { 0x2D1B, 51850 }, + { 0x2D1C, 51822 }, + { 0x2D1D, 51906 }, + { 0x2D1E, 51898 }, + { 0x2D1F, 51918 }, + { 0x2D20, 51834 }, + { 0x2D21, 51794 }, + { 0x2D22, 51842 }, + { 0x2D23, 51810 }, + { 0x2D24, 51838 }, + { 0x2D25, 51846 }, + { 0x2D30, 55713 }, + { 0x2D31, 55725 }, + { 0x2D32, 55789 }, + { 0x2D33, 55734 }, + { 0x2D34, 55834 }, + { 0x2D35, 55845 }, + { 0x2D36, 55740 }, + { 0x2D37, 55728 }, + { 0x2D38, 55798 }, + { 0x2D39, 55795 }, + { 0x2D3A, 55831 }, + { 0x2D3B, 55782 }, + { 0x2D3C, 55731 }, + { 0x2D3D, 55743 }, + { 0x2D3E, 55854 }, + { 0x2D3F, 55837 }, + { 0x2D40, 55737 }, + { 0x2D41, 55840 }, + { 0x2D42, 55850 }, + { 0x2D43, 55804 }, + { 0x2D44, 55722 }, + { 0x2D45, 55807 }, + { 0x2D46, 55870 }, + { 0x2D47, 55758 }, + { 0x2D48, 55858 }, + { 0x2D49, 55716 }, + { 0x2D4A, 55825 }, + { 0x2D4B, 55882 }, + { 0x2D4C, 55878 }, + { 0x2D4D, 55746 }, + { 0x2D4E, 55749 }, + { 0x2D4F, 55752 }, + { 0x2D50, 55866 }, + { 0x2D51, 55874 }, + { 0x2D52, 55755 }, + { 0x2D53, 55719 }, + { 0x2D54, 55761 }, + { 0x2D55, 55810 }, + { 0x2D56, 55801 }, + { 0x2D57, 55862 }, + { 0x2D58, 55785 }, + { 0x2D59, 55764 }, + { 0x2D5A, 55816 }, + { 0x2D5B, 55813 }, + { 0x2D5C, 55767 }, + { 0x2D5D, 55819 }, + { 0x2D5E, 55792 }, + { 0x2D5F, 55822 }, + { 0x2D60, 55770 }, + { 0x2D61, 55773 }, + { 0x2D62, 55776 }, + { 0x2D63, 55779 }, + { 0x2D64, 55886 }, + { 0x2D65, 55828 }, + { 0x2D6F, 55890 }, + { 0x2D80, 50999 }, + { 0x2D81, 51011 }, + { 0x2D82, 51140 }, + { 0x2D83, 51170 }, + { 0x2D84, 51542 }, + { 0x2D85, 50762 }, + { 0x2D86, 51227 }, + { 0x2D87, 50810 }, + { 0x2D88, 51032 }, + { 0x2D89, 51488 }, + { 0x2D8A, 51672 }, + { 0x2D8B, 51344 }, + { 0x2D8C, 50837 }, + { 0x2D8D, 51407 }, + { 0x2D8E, 50939 }, + { 0x2D8F, 51569 }, + { 0x2D90, 51395 }, + { 0x2D91, 51500 }, + { 0x2D92, 51074 }, + { 0x2D93, 51422 }, + { 0x2D94, 51428 }, + { 0x2D95, 51629 }, + { 0x2D96, 51425 }, + { 0x2DA0, 51173 }, + { 0x2DA1, 51185 }, + { 0x2DA2, 51179 }, + { 0x2DA3, 51548 }, + { 0x2DA4, 51551 }, + { 0x2DA5, 51176 }, + { 0x2DA6, 51182 }, + { 0x2DA8, 50777 }, + { 0x2DA9, 50789 }, + { 0x2DAA, 50783 }, + { 0x2DAB, 51368 }, + { 0x2DAC, 51371 }, + { 0x2DAD, 50780 }, + { 0x2DAE, 50786 }, + { 0x2DB0, 51350 }, + { 0x2DB1, 51362 }, + { 0x2DB2, 51356 }, + { 0x2DB3, 51614 }, + { 0x2DB4, 51617 }, + { 0x2DB5, 51353 }, + { 0x2DB6, 51359 }, + { 0x2DB8, 51374 }, + { 0x2DB9, 51386 }, + { 0x2DBA, 51380 }, + { 0x2DBB, 51620 }, + { 0x2DBC, 51623 }, + { 0x2DBD, 51377 }, + { 0x2DBE, 51383 }, + { 0x2DC0, 51119 }, + { 0x2DC1, 51131 }, + { 0x2DC2, 51125 }, + { 0x2DC3, 51530 }, + { 0x2DC4, 51533 }, + { 0x2DC5, 51122 }, + { 0x2DC6, 51128 }, + { 0x2DC8, 50978 }, + { 0x2DC9, 50990 }, + { 0x2DCA, 50984 }, + { 0x2DCB, 51473 }, + { 0x2DCC, 51476 }, + { 0x2DCD, 50981 }, + { 0x2DCE, 50987 }, + { 0x2DD0, 51299 }, + { 0x2DD1, 51311 }, + { 0x2DD2, 51305 }, + { 0x2DD3, 51599 }, + { 0x2DD4, 51602 }, + { 0x2DD5, 51302 }, + { 0x2DD6, 51308 }, + { 0x2DD8, 50894 }, + { 0x2DD9, 50906 }, + { 0x2DDA, 50900 }, + { 0x2DDB, 51437 }, + { 0x2DDC, 51440 }, + { 0x2DDD, 50897 }, + { 0x2DDE, 50903 }, + { 0x2DE0, 58034 }, + { 0x2DE1, 58082 }, + { 0x2DE2, 58103 }, + { 0x2DE3, 58038 }, + { 0x2DE4, 58119 }, + { 0x2DE5, 58090 }, + { 0x2DE6, 58070 }, + { 0x2DE7, 58042 }, + { 0x2DE8, 58046 }, + { 0x2DE9, 58050 }, + { 0x2DEA, 58030 }, + { 0x2DEB, 58074 }, + { 0x2DEC, 58054 }, + { 0x2DED, 58058 }, + { 0x2DEE, 58078 }, + { 0x2DEF, 58062 }, + { 0x2DF0, 58111 }, + { 0x2DF1, 58099 }, + { 0x2DF2, 58107 }, + { 0x2DF3, 58135 }, + { 0x2DF4, 58123 }, + { 0x2DF5, 58131 }, + { 0x2DF6, 58026 }, + { 0x2DF7, 58066 }, + { 0x2DF8, 58127 }, + { 0x2DF9, 58155 }, + { 0x2DFA, 58115 }, + { 0x2DFB, 58086 }, + { 0x2DFC, 58144 }, + { 0x2DFD, 58139 }, + { 0x2DFE, 58094 }, + { 0x2DFF, 58149 }, + { 0x2E00, 21801 }, + { 0x2E01, 21783 }, + { 0x2E02, 9477 }, + { 0x2E03, 22004 }, + { 0x2E04, 9353 }, + { 0x2E05, 21874 }, + { 0x2E06, 35672 }, + { 0x2E07, 35666 }, + { 0x2E08, 31539 }, + { 0x2E09, 9480 }, + { 0x2E0A, 22007 }, + { 0x2E0B, 35670 }, + { 0x2E0C, 9377 }, + { 0x2E0D, 21904 }, + { 0x2E0E, 63378 }, + { 0x2E0F, 69268 }, + { 0x2E10, 31783 }, + { 0x2E11, 55488 }, + { 0x2E12, 69569 }, + { 0x2E13, 31535 }, + { 0x2E14, 63298 }, + { 0x2E15, 44620 }, + { 0x2E16, 31542 }, + { 0x2E17, 31658 }, + { 0x2E18, 53360 }, + { 0x2E19, 9626 }, + { 0x2E1A, 33425 }, + { 0x2E1B, 23017 }, + { 0x2E1C, 9148 }, + { 0x2E1D, 21751 }, + { 0x2E1E, 23009 }, + { 0x2E1F, 23013 }, + { 0x2E20, 9452 }, + { 0x2E21, 21979 }, + { 0x2E22, 7737 }, + { 0x2E23, 7750 }, + { 0x2E24, 30258 }, + { 0x2E25, 30271 }, + { 0x2E26, 9439 }, + { 0x2E27, 21964 }, + { 0x2E28, 9369 }, + { 0x2E29, 21896 }, + { 0x2E2A, 7772 }, + { 0x2E2B, 7155 }, + { 0x2E2C, 43556 }, + { 0x2E2D, 9091 }, + { 0x2E2E, 55502 }, + { 0x2E2F, 56091 }, + { 0x2E30, 9704 }, + { 0x2E80, 5603 }, + { 0x2E81, 5510 }, + { 0x2E82, 5606 }, + { 0x2E83, 5610 }, + { 0x2E84, 5614 }, + { 0x2E85, 5600 }, + { 0x2E86, 5346 }, + { 0x2E87, 5577 }, + { 0x2E88, 5539 }, + { 0x2E89, 5543 }, + { 0x2E8A, 5638 }, + { 0x2E8B, 5477 }, + { 0x2E8C, 5558 }, + { 0x2E8D, 5562 }, + { 0x2E8E, 5441 }, + { 0x2E8F, 5445 }, + { 0x2E90, 5453 }, + { 0x2E91, 5449 }, + { 0x2E92, 5566 }, + { 0x2E93, 5626 }, + { 0x2E94, 5569 }, + { 0x2E95, 5573 }, + { 0x2E96, 5531 }, + { 0x2E97, 5535 }, + { 0x2E98, 5429 }, + { 0x2E99, 5403 }, + { 0x2E9B, 5507 }, + { 0x2E9C, 5406 }, + { 0x2E9D, 5471 }, + { 0x2E9E, 5513 }, + { 0x2E9F, 5597 }, + { 0x2EA0, 5635 }, + { 0x2EA1, 5583 }, + { 0x2EA2, 5587 }, + { 0x2EA3, 5423 }, + { 0x2EA4, 5392 }, + { 0x2EA5, 5396 }, + { 0x2EA6, 5641 }, + { 0x2EA7, 5349 }, + { 0x2EA8, 5352 }, + { 0x2EA9, 5438 }, + { 0x2EAA, 5412 }, + { 0x2EAB, 5370 }, + { 0x2EAC, 5618 }, + { 0x2EAD, 5622 }, + { 0x2EAE, 5591 }, + { 0x2EAF, 5480 }, + { 0x2EB0, 5715 }, + { 0x2EB1, 5373 }, + { 0x2EB2, 5377 }, + { 0x2EB3, 5385 }, + { 0x2EB4, 5381 }, + { 0x2EB5, 5468 }, + { 0x2EB6, 5555 }, + { 0x2EB7, 5400 }, + { 0x2EB8, 5367 }, + { 0x2EB9, 5389 }, + { 0x2EBA, 5499 }, + { 0x2EBB, 5503 }, + { 0x2EBC, 5465 }, + { 0x2EBD, 5594 }, + { 0x2EBE, 5519 }, + { 0x2EBF, 5523 }, + { 0x2EC0, 5527 }, + { 0x2EC1, 5580 }, + { 0x2EC2, 5632 }, + { 0x2EC3, 5491 }, + { 0x2EC4, 5495 }, + { 0x2EC5, 5671 }, + { 0x2EC6, 5647 }, + { 0x2EC7, 5435 }, + { 0x2EC8, 5739 }, + { 0x2EC9, 5727 }, + { 0x2ECA, 5426 }, + { 0x2ECB, 5679 }, + { 0x2ECC, 5651 }, + { 0x2ECD, 5483 }, + { 0x2ECE, 5487 }, + { 0x2ECF, 5420 }, + { 0x2ED0, 5699 }, + { 0x2ED1, 5457 }, + { 0x2ED2, 5461 }, + { 0x2ED3, 5707 }, + { 0x2ED4, 5695 }, + { 0x2ED5, 5547 }, + { 0x2ED6, 5551 }, + { 0x2ED7, 5474 }, + { 0x2ED8, 5409 }, + { 0x2ED9, 5743 }, + { 0x2EDA, 5703 }, + { 0x2EDB, 5719 }, + { 0x2EDC, 5667 }, + { 0x2EDD, 5355 }, + { 0x2EDE, 5359 }, + { 0x2EDF, 5363 }, + { 0x2EE0, 5663 }, + { 0x2EE1, 5432 }, + { 0x2EE2, 5723 }, + { 0x2EE3, 5417 }, + { 0x2EE4, 5516 }, + { 0x2EE5, 5687 }, + { 0x2EE6, 5675 }, + { 0x2EE7, 5711 }, + { 0x2EE8, 5655 }, + { 0x2EE9, 5659 }, + { 0x2EEA, 5691 }, + { 0x2EEB, 5752 }, + { 0x2EEC, 5683 }, + { 0x2EED, 5756 }, + { 0x2EEE, 5731 }, + { 0x2EEF, 5760 }, + { 0x2EF0, 5735 }, + { 0x2EF1, 5629 }, + { 0x2EF2, 5764 }, + { 0x2EF3, 5748 }, + { 0x2F00, 33501 }, + { 0x2F01, 33669 }, + { 0x2F02, 33459 }, + { 0x2F03, 33860 }, + { 0x2F04, 33981 }, + { 0x2F05, 33639 }, + { 0x2F06, 33531 }, + { 0x2F07, 33486 }, + { 0x2F08, 33489 }, + { 0x2F09, 33663 }, + { 0x2F0A, 33792 }, + { 0x2F0B, 33789 }, + { 0x2F0C, 33588 }, + { 0x2F0D, 33780 }, + { 0x2F0E, 33480 }, + { 0x2F0F, 33896 }, + { 0x2F10, 33688 }, + { 0x2F11, 33819 }, + { 0x2F12, 33831 }, + { 0x2F13, 33753 }, + { 0x2F14, 33881 }, + { 0x2F15, 33834 }, + { 0x2F16, 33962 }, + { 0x2F17, 33528 }, + { 0x2F18, 34081 }, + { 0x2F19, 33707 }, + { 0x2F1A, 33774 }, + { 0x2F1B, 34048 }, + { 0x2F1C, 33756 }, + { 0x2F1D, 33828 }, + { 0x2F1E, 34078 }, + { 0x2F1F, 33786 }, + { 0x2F20, 34051 }, + { 0x2F21, 33434 }, + { 0x2F22, 33437 }, + { 0x2F23, 34030 }, + { 0x2F24, 33447 }, + { 0x2F25, 33917 }, + { 0x2F26, 33771 }, + { 0x2F27, 33701 }, + { 0x2F28, 33645 }, + { 0x2F29, 33869 }, + { 0x2F2A, 33654 }, + { 0x2F2B, 33938 }, + { 0x2F2C, 33990 }, + { 0x2F2D, 34066 }, + { 0x2F2E, 33839 }, + { 0x2F2F, 33750 }, + { 0x2F30, 34045 }, + { 0x2F31, 34006 }, + { 0x2F32, 33462 }, + { 0x2F33, 33856 }, + { 0x2F34, 33948 }, + { 0x2F35, 33675 }, + { 0x2F36, 33534 }, + { 0x2F37, 33848 }, + { 0x2F38, 33450 }, + { 0x2F39, 33872 }, + { 0x2F3A, 34021 }, + { 0x2F3B, 33719 }, + { 0x2F3C, 33813 }, + { 0x2F3D, 34036 }, + { 0x2F3E, 33585 }, + { 0x2F3F, 33630 }, + { 0x2F40, 33935 }, + { 0x2F41, 33507 }, + { 0x2F42, 33978 }, + { 0x2F43, 33941 }, + { 0x2F44, 33444 }, + { 0x2F45, 33993 }, + { 0x2F46, 33495 }, + { 0x2F47, 33525 }, + { 0x2F48, 33519 }, + { 0x2F49, 33682 }, + { 0x2F4A, 33731 }, + { 0x2F4B, 33651 }, + { 0x2F4C, 33722 }, + { 0x2F4D, 33783 }, + { 0x2F4E, 34015 }, + { 0x2F4F, 33430 }, + { 0x2F50, 34027 }, + { 0x2F51, 33477 }, + { 0x2F52, 33573 }, + { 0x2F53, 33887 }, + { 0x2F54, 33908 }, + { 0x2F55, 33604 }, + { 0x2F56, 33576 }, + { 0x2F57, 33959 }, + { 0x2F58, 33952 }, + { 0x2F59, 33625 }, + { 0x2F5A, 33866 }, + { 0x2F5B, 33601 }, + { 0x2F5C, 33453 }, + { 0x2F5D, 33456 }, + { 0x2F5E, 34069 }, + { 0x2F5F, 33648 }, + { 0x2F60, 33822 }, + { 0x2F61, 33728 }, + { 0x2F62, 33893 }, + { 0x2F63, 33666 }, + { 0x2F64, 33538 }, + { 0x2F65, 33795 }, + { 0x2F66, 33556 }, + { 0x2F67, 34072 }, + { 0x2F68, 33944 }, + { 0x2F69, 33914 }, + { 0x2F6A, 33716 }, + { 0x2F6B, 33582 }, + { 0x2F6C, 33471 }, + { 0x2F6D, 33878 }, + { 0x2F6E, 33759 }, + { 0x2F6F, 33890 }, + { 0x2F70, 33987 }, + { 0x2F71, 33905 }, + { 0x2F72, 33807 }, + { 0x2F73, 33567 }, + { 0x2F74, 33884 }, + { 0x2F75, 33929 }, + { 0x2F76, 33698 }, + { 0x2F77, 33713 }, + { 0x2F78, 33483 }, + { 0x2F79, 33492 }, + { 0x2F7A, 33842 }, + { 0x2F7B, 34033 }, + { 0x2F7C, 33498 }, + { 0x2F7D, 33441 }, + { 0x2F7E, 33692 }, + { 0x2F7F, 33465 }, + { 0x2F80, 33768 }, + { 0x2F81, 33679 }, + { 0x2F82, 34063 }, + { 0x2F83, 33710 }, + { 0x2F84, 33923 }, + { 0x2F85, 33972 }, + { 0x2F86, 34000 }, + { 0x2F87, 33975 }, + { 0x2F88, 33550 }, + { 0x2F89, 34075 }, + { 0x2F8A, 33777 }, + { 0x2F8B, 33810 }, + { 0x2F8C, 33899 }, + { 0x2F8D, 33966 }, + { 0x2F8E, 33765 }, + { 0x2F8F, 33737 }, + { 0x2F90, 34024 }, + { 0x2F91, 33741 }, + { 0x2F92, 33522 }, + { 0x2F93, 33642 }, + { 0x2F94, 33984 }, + { 0x2F95, 34012 }, + { 0x2F96, 33541 }, + { 0x2F97, 33504 }, + { 0x2F98, 33926 }, + { 0x2F99, 33845 }, + { 0x2F9A, 33513 }, + { 0x2F9B, 33516 }, + { 0x2F9C, 33610 }, + { 0x2F9D, 33553 }, + { 0x2F9E, 33564 }, + { 0x2F9F, 33932 }, + { 0x2FA0, 34042 }, + { 0x2FA1, 33734 }, + { 0x2FA2, 33570 }, + { 0x2FA3, 33747 }, + { 0x2FA4, 34087 }, + { 0x2FA5, 34054 }, + { 0x2FA6, 33619 }, + { 0x2FA7, 33672 }, + { 0x2FA8, 33616 }, + { 0x2FA9, 33825 }, + { 0x2FAA, 33863 }, + { 0x2FAB, 33851 }, + { 0x2FAC, 33695 }, + { 0x2FAD, 33547 }, + { 0x2FAE, 33920 }, + { 0x2FAF, 33598 }, + { 0x2FB0, 34039 }, + { 0x2FB1, 33996 }, + { 0x2FB2, 33660 }, + { 0x2FB3, 33875 }, + { 0x2FB4, 33657 }, + { 0x2FB5, 33744 }, + { 0x2FB6, 33474 }, + { 0x2FB7, 33468 }, + { 0x2FB8, 33633 }, + { 0x2FB9, 34060 }, + { 0x2FBA, 33816 }, + { 0x2FBB, 33561 }, + { 0x2FBC, 33725 }, + { 0x2FBD, 33622 }, + { 0x2FBE, 33798 }, + { 0x2FBF, 34090 }, + { 0x2FC0, 34057 }, + { 0x2FC1, 33804 }, + { 0x2FC2, 33607 }, + { 0x2FC3, 33544 }, + { 0x2FC4, 33704 }, + { 0x2FC5, 33579 }, + { 0x2FC6, 33911 }, + { 0x2FC7, 33636 }, + { 0x2FC8, 34018 }, + { 0x2FC9, 33969 }, + { 0x2FCA, 33762 }, + { 0x2FCB, 34084 }, + { 0x2FCC, 33613 }, + { 0x2FCD, 34003 }, + { 0x2FCE, 33592 }, + { 0x2FCF, 33510 }, + { 0x2FD0, 33685 }, + { 0x2FD1, 33595 }, + { 0x2FD2, 33902 }, + { 0x2FD3, 33956 }, + { 0x2FD4, 34009 }, + { 0x2FD5, 33801 }, + { 0x2FF0, 69175 }, + { 0x2FF1, 69189 }, + { 0x2FF2, 69181 }, + { 0x2FF3, 69195 }, + { 0x2FF4, 69170 }, + { 0x2FF5, 69213 }, + { 0x2FF6, 69219 }, + { 0x2FF7, 69207 }, + { 0x2FF8, 69232 }, + { 0x2FF9, 69239 }, + { 0x2FFA, 69225 }, + { 0x2FFB, 69203 }, + { 0x3000, 68678 }, + { 0x3001, 68672 }, + { 0x3002, 68665 }, + { 0x3003, 10538 }, + { 0x3004, 53362 }, + { 0x3005, 68698 }, + { 0x3006, 68687 }, + { 0x3007, 68680 }, + { 0x3008, 9204 }, + { 0x3009, 21788 }, + { 0x300A, 9357 }, + { 0x300B, 21878 }, + { 0x300C, 9350 }, + { 0x300D, 21871 }, + { 0x300E, 9330 }, + { 0x300F, 21851 }, + { 0x3010, 9227 }, + { 0x3011, 21820 }, + { 0x3012, 35661 }, + { 0x3013, 9121 }, + { 0x3014, 9443 }, + { 0x3015, 21968 }, + { 0x3016, 9343 }, + { 0x3017, 21864 }, + { 0x3018, 9338 }, + { 0x3019, 21859 }, + { 0x301A, 9334 }, + { 0x301B, 21855 }, + { 0x301C, 10063 }, + { 0x301D, 55478 }, + { 0x301E, 31576 }, + { 0x301F, 6033 }, + { 0x3020, 35663 }, + { 0x3021, 52741 }, + { 0x3022, 52750 }, + { 0x3023, 52768 }, + { 0x3024, 52756 }, + { 0x3025, 52753 }, + { 0x3026, 52744 }, + { 0x3027, 52765 }, + { 0x3028, 52762 }, + { 0x3029, 52759 }, + { 0x302A, 68674 }, + { 0x302B, 68683 }, + { 0x302C, 68694 }, + { 0x302D, 68690 }, + { 0x302E, 32170 }, + { 0x302F, 31884 }, + { 0x3030, 10078 }, + { 0x3031, 56034 }, + { 0x3032, 56050 }, + { 0x3033, 56044 }, + { 0x3034, 56057 }, + { 0x3035, 56038 }, + { 0x3036, 39456 }, + { 0x3037, 68701 }, + { 0x3038, 52747 }, + { 0x3039, 52774 }, + { 0x303A, 52771 }, + { 0x303B, 56098 }, + { 0x303C, 9594 }, + { 0x303D, 9628 }, + { 0x303E, 69103 }, + { 0x303F, 68668 }, + { 0x3041, 53242 }, + { 0x3042, 53020 }, + { 0x3043, 53250 }, + { 0x3044, 53026 }, + { 0x3045, 53258 }, + { 0x3046, 53035 }, + { 0x3047, 53246 }, + { 0x3048, 53023 }, + { 0x3049, 53254 }, + { 0x304A, 53032 }, + { 0x304B, 53098 }, + { 0x304C, 53068 }, + { 0x304D, 53104 }, + { 0x304E, 53074 }, + { 0x304F, 53110 }, + { 0x3050, 53080 }, + { 0x3051, 53101 }, + { 0x3052, 53071 }, + { 0x3053, 53107 }, + { 0x3054, 53077 }, + { 0x3055, 53173 }, + { 0x3056, 53227 }, + { 0x3057, 53179 }, + { 0x3058, 53233 }, + { 0x3059, 53185 }, + { 0x305A, 53239 }, + { 0x305B, 53176 }, + { 0x305C, 53230 }, + { 0x305D, 53182 }, + { 0x305E, 53236 }, + { 0x305F, 53188 }, + { 0x3060, 53053 }, + { 0x3061, 53194 }, + { 0x3062, 53059 }, + { 0x3063, 53270 }, + { 0x3064, 53200 }, + { 0x3065, 53065 }, + { 0x3066, 53191 }, + { 0x3067, 53056 }, + { 0x3068, 53197 }, + { 0x3069, 53062 }, + { 0x306A, 53128 }, + { 0x306B, 53134 }, + { 0x306C, 53140 }, + { 0x306D, 53131 }, + { 0x306E, 53137 }, + { 0x306F, 53083 }, + { 0x3070, 53038 }, + { 0x3071, 53143 }, + { 0x3072, 53089 }, + { 0x3073, 53044 }, + { 0x3074, 53149 }, + { 0x3075, 53095 }, + { 0x3076, 53050 }, + { 0x3077, 53155 }, + { 0x3078, 53086 }, + { 0x3079, 53041 }, + { 0x307A, 53146 }, + { 0x307B, 53092 }, + { 0x307C, 53047 }, + { 0x307D, 53152 }, + { 0x307E, 53113 }, + { 0x307F, 53119 }, + { 0x3080, 53125 }, + { 0x3081, 53116 }, + { 0x3082, 53122 }, + { 0x3083, 53278 }, + { 0x3084, 53218 }, + { 0x3085, 53286 }, + { 0x3086, 53224 }, + { 0x3087, 53282 }, + { 0x3088, 53221 }, + { 0x3089, 53158 }, + { 0x308A, 53164 }, + { 0x308B, 53170 }, + { 0x308C, 53161 }, + { 0x308D, 53167 }, + { 0x308E, 53274 }, + { 0x308F, 53206 }, + { 0x3090, 53212 }, + { 0x3091, 53209 }, + { 0x3092, 53215 }, + { 0x3093, 53029 }, + { 0x3094, 53203 }, + { 0x3095, 53262 }, + { 0x3096, 53266 }, + { 0x3099, 58335 }, + { 0x309A, 58340 }, + { 0x309B, 75125 }, + { 0x309C, 75133 }, + { 0x309D, 53297 }, + { 0x309E, 53290 }, + { 0x309F, 53294 }, + { 0x30A0, 75122 }, + { 0x30A1, 53600 }, + { 0x30A2, 53366 }, + { 0x30A3, 53608 }, + { 0x30A4, 53372 }, + { 0x30A5, 53616 }, + { 0x30A6, 53381 }, + { 0x30A7, 53604 }, + { 0x30A8, 53369 }, + { 0x30A9, 53612 }, + { 0x30AA, 53378 }, + { 0x30AB, 53444 }, + { 0x30AC, 53414 }, + { 0x30AD, 53450 }, + { 0x30AE, 53420 }, + { 0x30AF, 53456 }, + { 0x30B0, 53426 }, + { 0x30B1, 53447 }, + { 0x30B2, 53417 }, + { 0x30B3, 53453 }, + { 0x30B4, 53423 }, + { 0x30B5, 53519 }, + { 0x30B6, 53585 }, + { 0x30B7, 53525 }, + { 0x30B8, 53591 }, + { 0x30B9, 53531 }, + { 0x30BA, 53597 }, + { 0x30BB, 53522 }, + { 0x30BC, 53588 }, + { 0x30BD, 53528 }, + { 0x30BE, 53594 }, + { 0x30BF, 53534 }, + { 0x30C0, 53399 }, + { 0x30C1, 53540 }, + { 0x30C2, 53405 }, + { 0x30C3, 53692 }, + { 0x30C4, 53546 }, + { 0x30C5, 53411 }, + { 0x30C6, 53537 }, + { 0x30C7, 53402 }, + { 0x30C8, 53543 }, + { 0x30C9, 53408 }, + { 0x30CA, 53474 }, + { 0x30CB, 53480 }, + { 0x30CC, 53486 }, + { 0x30CD, 53477 }, + { 0x30CE, 53483 }, + { 0x30CF, 53429 }, + { 0x30D0, 53384 }, + { 0x30D1, 53489 }, + { 0x30D2, 53435 }, + { 0x30D3, 53390 }, + { 0x30D4, 53495 }, + { 0x30D5, 53441 }, + { 0x30D6, 53396 }, + { 0x30D7, 53501 }, + { 0x30D8, 53432 }, + { 0x30D9, 53387 }, + { 0x30DA, 53492 }, + { 0x30DB, 53438 }, + { 0x30DC, 53393 }, + { 0x30DD, 53498 }, + { 0x30DE, 53459 }, + { 0x30DF, 53465 }, + { 0x30E0, 53471 }, + { 0x30E1, 53462 }, + { 0x30E2, 53468 }, + { 0x30E3, 53700 }, + { 0x30E4, 53576 }, + { 0x30E5, 53708 }, + { 0x30E6, 53582 }, + { 0x30E7, 53704 }, + { 0x30E8, 53579 }, + { 0x30E9, 53504 }, + { 0x30EA, 53510 }, + { 0x30EB, 53516 }, + { 0x30EC, 53507 }, + { 0x30ED, 53513 }, + { 0x30EE, 53696 }, + { 0x30EF, 53564 }, + { 0x30F0, 53570 }, + { 0x30F1, 53567 }, + { 0x30F2, 53573 }, + { 0x30F3, 53375 }, + { 0x30F4, 53561 }, + { 0x30F5, 53640 }, + { 0x30F6, 53644 }, + { 0x30F7, 53549 }, + { 0x30F8, 53555 }, + { 0x30F9, 53552 }, + { 0x30FA, 53558 }, + { 0x30FB, 53712 }, + { 0x30FC, 75129 }, + { 0x30FD, 53722 }, + { 0x30FE, 53715 }, + { 0x30FF, 53719 }, + { 0x3105, 45589 }, + { 0x3106, 45631 }, + { 0x3107, 45622 }, + { 0x3108, 45601 }, + { 0x3109, 45595 }, + { 0x310A, 45643 }, + { 0x310B, 45625 }, + { 0x310C, 45619 }, + { 0x310D, 45604 }, + { 0x310E, 45616 }, + { 0x310F, 45607 }, + { 0x3110, 45613 }, + { 0x3111, 45634 }, + { 0x3112, 45652 }, + { 0x3113, 45727 }, + { 0x3114, 45673 }, + { 0x3115, 45724 }, + { 0x3116, 45637 }, + { 0x3117, 45655 }, + { 0x3118, 45592 }, + { 0x3119, 45640 }, + { 0x311A, 45586 }, + { 0x311B, 45628 }, + { 0x311C, 45598 }, + { 0x311D, 45679 }, + { 0x311E, 45658 }, + { 0x311F, 45682 }, + { 0x3120, 45667 }, + { 0x3121, 45721 }, + { 0x3122, 45664 }, + { 0x3123, 45685 }, + { 0x3124, 45733 }, + { 0x3125, 45739 }, + { 0x3126, 45688 }, + { 0x3127, 45610 }, + { 0x3128, 45646 }, + { 0x3129, 45706 }, + { 0x312A, 45649 }, + { 0x312B, 45712 }, + { 0x312C, 45691 }, + { 0x312D, 45697 }, + { 0x3131, 31996 }, + { 0x3132, 32095 }, + { 0x3133, 32065 }, + { 0x3134, 31978 }, + { 0x3135, 32071 }, + { 0x3136, 32074 }, + { 0x3137, 31999 }, + { 0x3138, 32098 }, + { 0x3139, 31984 }, + { 0x313A, 32113 }, + { 0x313B, 32083 }, + { 0x313C, 32086 }, + { 0x313D, 32038 }, + { 0x313E, 32140 }, + { 0x313F, 32137 }, + { 0x3140, 32080 }, + { 0x3141, 31975 }, + { 0x3142, 31981 }, + { 0x3143, 32062 }, + { 0x3144, 32035 }, + { 0x3145, 31954 }, + { 0x3146, 32026 }, + { 0x3147, 31972 }, + { 0x3148, 31966 }, + { 0x3149, 32050 }, + { 0x314A, 32008 }, + { 0x314B, 32011 }, + { 0x314C, 32020 }, + { 0x314D, 32017 }, + { 0x314E, 31969 }, + { 0x314F, 31891 }, + { 0x3150, 31906 }, + { 0x3151, 31927 }, + { 0x3152, 31948 }, + { 0x3153, 31909 }, + { 0x3154, 31894 }, + { 0x3155, 31951 }, + { 0x3156, 31930 }, + { 0x3157, 31900 }, + { 0x3158, 31918 }, + { 0x3159, 31942 }, + { 0x315A, 31915 }, + { 0x315B, 31936 }, + { 0x315C, 31903 }, + { 0x315D, 31945 }, + { 0x315E, 31921 }, + { 0x315F, 31924 }, + { 0x3160, 31939 }, + { 0x3161, 31912 }, + { 0x3162, 31933 }, + { 0x3163, 31897 }, + { 0x3164, 31889 }, + { 0x3165, 32059 }, + { 0x3166, 32104 }, + { 0x3167, 32032 }, + { 0x3168, 32128 }, + { 0x3169, 32161 }, + { 0x316A, 32116 }, + { 0x316B, 32149 }, + { 0x316C, 32134 }, + { 0x316D, 32164 }, + { 0x316E, 32068 }, + { 0x316F, 32029 }, + { 0x3170, 32125 }, + { 0x3171, 32119 }, + { 0x3172, 32107 }, + { 0x3173, 32110 }, + { 0x3174, 32155 }, + { 0x3175, 32158 }, + { 0x3176, 32077 }, + { 0x3177, 32131 }, + { 0x3178, 32122 }, + { 0x3179, 32167 }, + { 0x317A, 32089 }, + { 0x317B, 32044 }, + { 0x317C, 32092 }, + { 0x317D, 32047 }, + { 0x317E, 32041 }, + { 0x317F, 32014 }, + { 0x3180, 32056 }, + { 0x3181, 32023 }, + { 0x3182, 32143 }, + { 0x3183, 32152 }, + { 0x3184, 32146 }, + { 0x3185, 32053 }, + { 0x3186, 32101 }, + { 0x3187, 31987 }, + { 0x3188, 32002 }, + { 0x3189, 31957 }, + { 0x318A, 32005 }, + { 0x318B, 31990 }, + { 0x318C, 31960 }, + { 0x318D, 31963 }, + { 0x318E, 31993 }, + { 0x3190, 69162 }, + { 0x3191, 69166 }, + { 0x3192, 69110 }, + { 0x3193, 69118 }, + { 0x3194, 69138 }, + { 0x3195, 69122 }, + { 0x3196, 69114 }, + { 0x3197, 69154 }, + { 0x3198, 69142 }, + { 0x3199, 69130 }, + { 0x319A, 69158 }, + { 0x319B, 69134 }, + { 0x319C, 69146 }, + { 0x319D, 69150 }, + { 0x319E, 69126 }, + { 0x319F, 69106 }, + { 0x31A0, 45670 }, + { 0x31A1, 45730 }, + { 0x31A2, 45709 }, + { 0x31A3, 45694 }, + { 0x31A4, 45676 }, + { 0x31A5, 45742 }, + { 0x31A6, 45718 }, + { 0x31A7, 45754 }, + { 0x31A8, 45703 }, + { 0x31A9, 45736 }, + { 0x31AA, 45745 }, + { 0x31AB, 45757 }, + { 0x31AC, 45700 }, + { 0x31AD, 45748 }, + { 0x31AE, 45760 }, + { 0x31AF, 45763 }, + { 0x31B0, 45661 }, + { 0x31B1, 45715 }, + { 0x31B2, 45751 }, + { 0x31B3, 45766 }, + { 0x31B4, 45578 }, + { 0x31B5, 45582 }, + { 0x31B6, 45574 }, + { 0x31B7, 45570 }, + { 0x31C0, 5256 }, + { 0x31C1, 5295 }, + { 0x31C2, 5298 }, + { 0x31C3, 5301 }, + { 0x31C4, 5286 }, + { 0x31C5, 5313 }, + { 0x31C6, 5304 }, + { 0x31C7, 5262 }, + { 0x31C8, 5331 }, + { 0x31C9, 5340 }, + { 0x31CA, 5307 }, + { 0x31CB, 5334 }, + { 0x31CC, 5325 }, + { 0x31CD, 5310 }, + { 0x31CE, 5337 }, + { 0x31CF, 5244 }, + { 0x31D0, 5241 }, + { 0x31D1, 5253 }, + { 0x31D2, 5247 }, + { 0x31D3, 5280 }, + { 0x31D4, 5238 }, + { 0x31D5, 5265 }, + { 0x31D6, 5259 }, + { 0x31D7, 5289 }, + { 0x31D8, 5319 }, + { 0x31D9, 5283 }, + { 0x31DA, 5277 }, + { 0x31DB, 5268 }, + { 0x31DC, 5274 }, + { 0x31DD, 5292 }, + { 0x31DE, 5322 }, + { 0x31DF, 5316 }, + { 0x31E0, 5328 }, + { 0x31E1, 5343 }, + { 0x31E2, 5271 }, + { 0x31E3, 5250 }, + { 0x31F0, 53648 }, + { 0x31F1, 53680 }, + { 0x31F2, 53684 }, + { 0x31F3, 53688 }, + { 0x31F4, 53656 }, + { 0x31F5, 53620 }, + { 0x31F6, 53628 }, + { 0x31F7, 53636 }, + { 0x31F8, 53624 }, + { 0x31F9, 53632 }, + { 0x31FA, 53652 }, + { 0x31FB, 53660 }, + { 0x31FC, 53668 }, + { 0x31FD, 53676 }, + { 0x31FE, 53664 }, + { 0x31FF, 53672 }, + { 0x3200, 74845 }, + { 0x3201, 74824 }, + { 0x3202, 74852 }, + { 0x3203, 74838 }, + { 0x3204, 74817 }, + { 0x3205, 74831 }, + { 0x3206, 74785 }, + { 0x3207, 74810 }, + { 0x3208, 74792 }, + { 0x3209, 74859 }, + { 0x320A, 74866 }, + { 0x320B, 74880 }, + { 0x320C, 74873 }, + { 0x320D, 74803 }, + { 0x320E, 74848 }, + { 0x320F, 74827 }, + { 0x3210, 74855 }, + { 0x3211, 74841 }, + { 0x3212, 74820 }, + { 0x3213, 74834 }, + { 0x3214, 74788 }, + { 0x3215, 74813 }, + { 0x3216, 74795 }, + { 0x3217, 74862 }, + { 0x3218, 74869 }, + { 0x3219, 74883 }, + { 0x321A, 74876 }, + { 0x321B, 74806 }, + { 0x321C, 74799 }, + { 0x321D, 74892 }, + { 0x321E, 74887 }, + { 0x3220, 74929 }, + { 0x3221, 74941 }, + { 0x3222, 75001 }, + { 0x3223, 74953 }, + { 0x3224, 74950 }, + { 0x3225, 74932 }, + { 0x3226, 74992 }, + { 0x3227, 74980 }, + { 0x3228, 74965 }, + { 0x3229, 74938 }, + { 0x322A, 74959 }, + { 0x322B, 74947 }, + { 0x322C, 75004 }, + { 0x322D, 74974 }, + { 0x322E, 74986 }, + { 0x322F, 74977 }, + { 0x3230, 74935 }, + { 0x3231, 74995 }, + { 0x3232, 74956 }, + { 0x3233, 75007 }, + { 0x3234, 74962 }, + { 0x3235, 75010 }, + { 0x3236, 75022 }, + { 0x3237, 75034 }, + { 0x3238, 74983 }, + { 0x3239, 75025 }, + { 0x323A, 74944 }, + { 0x323B, 74998 }, + { 0x323C, 75028 }, + { 0x323D, 75031 }, + { 0x323E, 75019 }, + { 0x323F, 75013 }, + { 0x3240, 75016 }, + { 0x3241, 74968 }, + { 0x3242, 74971 }, + { 0x3243, 74989 }, + { 0x3250, 69269 }, + { 0x3251, 39399 }, + { 0x3252, 39407 }, + { 0x3253, 39431 }, + { 0x3254, 39415 }, + { 0x3255, 39411 }, + { 0x3256, 39403 }, + { 0x3257, 39427 }, + { 0x3258, 39423 }, + { 0x3259, 39419 }, + { 0x325A, 39354 }, + { 0x325B, 39357 }, + { 0x325C, 39365 }, + { 0x325D, 39389 }, + { 0x325E, 39373 }, + { 0x325F, 39369 }, + { 0x3260, 39256 }, + { 0x3261, 39235 }, + { 0x3262, 39263 }, + { 0x3263, 39249 }, + { 0x3264, 39228 }, + { 0x3265, 39242 }, + { 0x3266, 39196 }, + { 0x3267, 39217 }, + { 0x3268, 39203 }, + { 0x3269, 39270 }, + { 0x326A, 39277 }, + { 0x326B, 39291 }, + { 0x326C, 39284 }, + { 0x326D, 39210 }, + { 0x326E, 39259 }, + { 0x326F, 39238 }, + { 0x3270, 39266 }, + { 0x3271, 39252 }, + { 0x3272, 39231 }, + { 0x3273, 39245 }, + { 0x3274, 39199 }, + { 0x3275, 39220 }, + { 0x3276, 39206 }, + { 0x3277, 39273 }, + { 0x3278, 39280 }, + { 0x3279, 39294 }, + { 0x327A, 39287 }, + { 0x327B, 39213 }, + { 0x327C, 39302 }, + { 0x327D, 39298 }, + { 0x327E, 39224 }, + { 0x327F, 34096 }, + { 0x3280, 39623 }, + { 0x3281, 39635 }, + { 0x3282, 39710 }, + { 0x3283, 39647 }, + { 0x3284, 39644 }, + { 0x3285, 39626 }, + { 0x3286, 39701 }, + { 0x3287, 39683 }, + { 0x3288, 39671 }, + { 0x3289, 39632 }, + { 0x328A, 39665 }, + { 0x328B, 39641 }, + { 0x328C, 39713 }, + { 0x328D, 39677 }, + { 0x328E, 39689 }, + { 0x328F, 39680 }, + { 0x3290, 39629 }, + { 0x3291, 39704 }, + { 0x3292, 39650 }, + { 0x3293, 39728 }, + { 0x3294, 39668 }, + { 0x3295, 39731 }, + { 0x3296, 39755 }, + { 0x3297, 39764 }, + { 0x3298, 39686 }, + { 0x3299, 39722 }, + { 0x329A, 39662 }, + { 0x329B, 39719 }, + { 0x329C, 39746 }, + { 0x329D, 39752 }, + { 0x329E, 39695 }, + { 0x329F, 39749 }, + { 0x32A0, 39656 }, + { 0x32A1, 39674 }, + { 0x32A2, 39638 }, + { 0x32A3, 39725 }, + { 0x32A4, 39653 }, + { 0x32A5, 39716 }, + { 0x32A6, 39620 }, + { 0x32A7, 39659 }, + { 0x32A8, 39698 }, + { 0x32A9, 39737 }, + { 0x32AA, 39740 }, + { 0x32AB, 39707 }, + { 0x32AC, 39758 }, + { 0x32AD, 39761 }, + { 0x32AE, 39743 }, + { 0x32AF, 39734 }, + { 0x32B0, 39692 }, + { 0x32B1, 39361 }, + { 0x32B2, 39385 }, + { 0x32B3, 39381 }, + { 0x32B4, 39377 }, + { 0x32B5, 39312 }, + { 0x32B6, 39315 }, + { 0x32B7, 39323 }, + { 0x32B8, 39347 }, + { 0x32B9, 39331 }, + { 0x32BA, 39327 }, + { 0x32BB, 39319 }, + { 0x32BC, 39343 }, + { 0x32BD, 39339 }, + { 0x32BE, 39335 }, + { 0x32BF, 39309 }, + { 0x32C0, 69073 }, + { 0x32C1, 69088 }, + { 0x32C2, 69063 }, + { 0x32C3, 69058 }, + { 0x32C4, 68893 }, + { 0x32C5, 69053 }, + { 0x32C6, 69048 }, + { 0x32C7, 69068 }, + { 0x32C8, 69098 }, + { 0x32C9, 69078 }, + { 0x32CA, 69093 }, + { 0x32CB, 69083 }, + { 0x32CC, 35949 }, + { 0x32CD, 36112 }, + { 0x32CE, 35939 }, + { 0x32CF, 40924 }, + { 0x32D0, 39471 }, + { 0x32D1, 39477 }, + { 0x32D2, 39483 }, + { 0x32D3, 39474 }, + { 0x32D4, 39480 }, + { 0x32D5, 39501 }, + { 0x32D6, 39507 }, + { 0x32D7, 39513 }, + { 0x32D8, 39504 }, + { 0x32D9, 39510 }, + { 0x32DA, 39561 }, + { 0x32DB, 39567 }, + { 0x32DC, 39573 }, + { 0x32DD, 39564 }, + { 0x32DE, 39570 }, + { 0x32DF, 39576 }, + { 0x32E0, 39582 }, + { 0x32E1, 39588 }, + { 0x32E2, 39579 }, + { 0x32E3, 39585 }, + { 0x32E4, 39531 }, + { 0x32E5, 39537 }, + { 0x32E6, 39543 }, + { 0x32E7, 39534 }, + { 0x32E8, 39540 }, + { 0x32E9, 39486 }, + { 0x32EA, 39492 }, + { 0x32EB, 39498 }, + { 0x32EC, 39489 }, + { 0x32ED, 39495 }, + { 0x32EE, 39516 }, + { 0x32EF, 39522 }, + { 0x32F0, 39528 }, + { 0x32F1, 39519 }, + { 0x32F2, 39525 }, + { 0x32F3, 39603 }, + { 0x32F4, 39609 }, + { 0x32F5, 39606 }, + { 0x32F6, 39546 }, + { 0x32F7, 39552 }, + { 0x32F8, 39558 }, + { 0x32F9, 39549 }, + { 0x32FA, 39555 }, + { 0x32FB, 39591 }, + { 0x32FC, 39597 }, + { 0x32FD, 39594 }, + { 0x32FE, 39600 }, + { 0x3300, 36363 }, + { 0x3301, 36365 }, + { 0x3302, 36290 }, + { 0x3303, 36157 }, + { 0x3304, 36375 }, + { 0x3305, 36171 }, + { 0x3306, 36155 }, + { 0x3307, 36421 }, + { 0x3308, 36296 }, + { 0x3309, 36188 }, + { 0x330A, 36190 }, + { 0x330B, 36326 }, + { 0x330C, 36393 }, + { 0x330D, 36395 }, + { 0x330E, 36300 }, + { 0x330F, 36298 }, + { 0x3310, 36167 }, + { 0x3311, 36302 }, + { 0x3312, 36379 }, + { 0x3313, 36391 }, + { 0x3314, 36175 }, + { 0x3315, 36459 }, + { 0x3316, 36463 }, + { 0x3317, 36451 }, + { 0x3318, 36369 }, + { 0x3319, 36447 }, + { 0x331A, 36453 }, + { 0x331B, 36397 }, + { 0x331C, 36328 }, + { 0x331D, 36377 }, + { 0x331E, 36330 }, + { 0x331F, 36415 }, + { 0x3320, 36445 }, + { 0x3321, 36417 }, + { 0x3322, 36353 }, + { 0x3323, 36355 }, + { 0x3324, 36294 }, + { 0x3325, 36161 }, + { 0x3326, 36163 }, + { 0x3327, 36153 }, + { 0x3328, 36186 }, + { 0x3329, 36336 }, + { 0x332A, 36304 }, + { 0x332B, 36441 }, + { 0x332C, 36338 }, + { 0x332D, 36389 }, + { 0x332E, 36457 }, + { 0x332F, 36385 }, + { 0x3330, 36194 }, + { 0x3331, 36159 }, + { 0x3332, 36423 }, + { 0x3333, 36373 }, + { 0x3334, 36419 }, + { 0x3335, 36308 }, + { 0x3336, 36449 }, + { 0x3337, 36192 }, + { 0x3338, 36383 }, + { 0x3339, 36371 }, + { 0x333A, 36342 }, + { 0x333B, 36340 }, + { 0x333C, 36292 }, + { 0x333D, 36387 }, + { 0x333E, 36367 }, + { 0x333F, 36120 }, + { 0x3340, 36344 }, + { 0x3341, 36306 }, + { 0x3342, 36169 }, + { 0x3343, 36401 }, + { 0x3344, 36334 }, + { 0x3345, 36332 }, + { 0x3346, 36381 }, + { 0x3347, 36403 }, + { 0x3348, 36409 }, + { 0x3349, 36184 }, + { 0x334A, 36455 }, + { 0x334B, 36182 }, + { 0x334C, 36407 }, + { 0x334D, 36405 }, + { 0x334E, 36359 }, + { 0x334F, 36361 }, + { 0x3350, 36288 }, + { 0x3351, 36411 }, + { 0x3352, 36198 }, + { 0x3353, 36351 }, + { 0x3354, 36413 }, + { 0x3355, 36196 }, + { 0x3356, 36443 }, + { 0x3357, 36357 }, + { 0x3358, 68940 }, + { 0x3359, 68898 }, + { 0x335A, 68916 }, + { 0x335B, 68958 }, + { 0x335C, 68928 }, + { 0x335D, 68922 }, + { 0x335E, 68904 }, + { 0x335F, 68952 }, + { 0x3360, 68946 }, + { 0x3361, 68934 }, + { 0x3362, 68910 }, + { 0x3363, 68964 }, + { 0x3364, 68970 }, + { 0x3365, 69012 }, + { 0x3366, 69000 }, + { 0x3367, 68982 }, + { 0x3368, 68988 }, + { 0x3369, 69018 }, + { 0x336A, 68994 }, + { 0x336B, 69006 }, + { 0x336C, 68976 }, + { 0x336D, 69024 }, + { 0x336E, 69030 }, + { 0x336F, 69042 }, + { 0x3370, 69036 }, + { 0x3371, 36122 }, + { 0x3372, 35925 }, + { 0x3373, 35907 }, + { 0x3374, 36088 }, + { 0x3375, 36059 }, + { 0x3376, 36066 }, + { 0x3377, 35931 }, + { 0x3378, 35936 }, + { 0x3379, 35933 }, + { 0x337A, 35957 }, + { 0x337B, 36100 }, + { 0x337C, 36104 }, + { 0x337D, 36108 }, + { 0x337E, 36096 }, + { 0x337F, 36461 }, + { 0x3380, 36063 }, + { 0x3381, 36047 }, + { 0x3382, 36013 }, + { 0x3383, 35992 }, + { 0x3384, 35959 }, + { 0x3385, 35961 }, + { 0x3386, 35994 }, + { 0x3387, 35943 }, + { 0x3388, 36090 }, + { 0x3389, 36173 }, + { 0x338A, 36068 }, + { 0x338B, 36049 }, + { 0x338C, 36016 }, + { 0x338D, 36019 }, + { 0x338E, 35999 }, + { 0x338F, 35963 }, + { 0x3390, 35953 }, + { 0x3391, 36124 }, + { 0x3392, 36130 }, + { 0x3393, 36116 }, + { 0x3394, 36151 }, + { 0x3395, 36022 }, + { 0x3396, 36001 }, + { 0x3397, 35929 }, + { 0x3398, 35967 }, + { 0x3399, 35941 }, + { 0x339A, 36051 }, + { 0x339B, 36025 }, + { 0x339C, 36003 }, + { 0x339D, 35915 }, + { 0x339E, 35969 }, + { 0x339F, 36008 }, + { 0x33A0, 35920 }, + { 0x33A1, 35898 }, + { 0x33A2, 35977 }, + { 0x33A3, 36005 }, + { 0x33A4, 35917 }, + { 0x33A5, 35895 }, + { 0x33A6, 35971 }, + { 0x33A7, 35886 }, + { 0x33A8, 35890 }, + { 0x33A9, 36061 }, + { 0x33AA, 36126 }, + { 0x33AB, 36136 }, + { 0x33AC, 36118 }, + { 0x33AD, 36140 }, + { 0x33AE, 36142 }, + { 0x33AF, 36146 }, + { 0x33B0, 36076 }, + { 0x33B1, 36053 }, + { 0x33B2, 36028 }, + { 0x33B3, 36011 }, + { 0x33B4, 36078 }, + { 0x33B5, 36055 }, + { 0x33B6, 36031 }, + { 0x33B7, 36037 }, + { 0x33B8, 35982 }, + { 0x33B9, 36039 }, + { 0x33BA, 36080 }, + { 0x33BB, 36057 }, + { 0x33BC, 36034 }, + { 0x33BD, 36042 }, + { 0x33BE, 35984 }, + { 0x33BF, 36044 }, + { 0x33C0, 35880 }, + { 0x33C1, 35883 }, + { 0x33C2, 35905 }, + { 0x33C3, 35909 }, + { 0x33C4, 35911 }, + { 0x33C5, 35913 }, + { 0x33C6, 35876 }, + { 0x33C7, 35923 }, + { 0x33C8, 35927 }, + { 0x33C9, 35945 }, + { 0x33CA, 35947 }, + { 0x33CB, 35951 }, + { 0x33CC, 35955 }, + { 0x33CD, 35965 }, + { 0x33CE, 35974 }, + { 0x33CF, 35980 }, + { 0x33D0, 35986 }, + { 0x33D1, 35988 }, + { 0x33D2, 36128 }, + { 0x33D3, 35990 }, + { 0x33D4, 35996 }, + { 0x33D5, 36132 }, + { 0x33D6, 36134 }, + { 0x33D7, 36070 }, + { 0x33D8, 36072 }, + { 0x33D9, 36138 }, + { 0x33DA, 36074 }, + { 0x33DB, 36082 }, + { 0x33DC, 36084 }, + { 0x33DD, 36086 }, + { 0x33DE, 35901 }, + { 0x33DF, 35872 }, + { 0x33E0, 68707 }, + { 0x33E1, 68725 }, + { 0x33E2, 68761 }, + { 0x33E3, 68737 }, + { 0x33E4, 68731 }, + { 0x33E5, 68713 }, + { 0x33E6, 68755 }, + { 0x33E7, 68749 }, + { 0x33E8, 68743 }, + { 0x33E9, 68719 }, + { 0x33EA, 68767 }, + { 0x33EB, 68779 }, + { 0x33EC, 68821 }, + { 0x33ED, 68809 }, + { 0x33EE, 68791 }, + { 0x33EF, 68797 }, + { 0x33F0, 68827 }, + { 0x33F1, 68803 }, + { 0x33F2, 68815 }, + { 0x33F3, 68785 }, + { 0x33F4, 68839 }, + { 0x33F5, 68851 }, + { 0x33F6, 68887 }, + { 0x33F7, 68863 }, + { 0x33F8, 68857 }, + { 0x33F9, 68845 }, + { 0x33FA, 68881 }, + { 0x33FB, 68875 }, + { 0x33FC, 68869 }, + { 0x33FD, 68773 }, + { 0x33FE, 68833 }, + { 0x33FF, 36114 }, + { 0x4DC0, 52824 }, + { 0x4DC1, 52838 }, + { 0x4DC2, 52975 }, + { 0x4DC3, 52945 }, + { 0x4DC4, 52921 }, + { 0x4DC5, 52927 }, + { 0x4DC6, 52777 }, + { 0x4DC7, 52907 }, + { 0x4DC8, 52883 }, + { 0x4DC9, 52942 }, + { 0x4DCA, 52880 }, + { 0x4DCB, 53002 }, + { 0x4DCC, 52987 }, + { 0x4DCD, 52864 }, + { 0x4DCE, 52911 }, + { 0x4DCF, 52984 }, + { 0x4DD0, 52958 }, + { 0x4DD1, 52843 }, + { 0x4DD2, 52924 }, + { 0x4DD3, 53017 }, + { 0x4DD4, 52895 }, + { 0x4DD5, 52853 }, + { 0x4DD6, 52971 }, + { 0x4DD7, 52904 }, + { 0x4DD8, 52968 }, + { 0x4DD9, 52860 }, + { 0x4DDA, 52876 }, + { 0x4DDB, 52868 }, + { 0x4DDC, 52799 }, + { 0x4DDD, 52819 }, + { 0x4DDE, 52965 }, + { 0x4DDF, 52933 }, + { 0x4DE0, 52918 }, + { 0x4DE1, 52856 }, + { 0x4DE2, 52939 }, + { 0x4DE3, 52952 }, + { 0x4DE4, 52785 }, + { 0x4DE5, 52993 }, + { 0x4DE6, 53011 }, + { 0x4DE7, 53005 }, + { 0x4DE8, 52930 }, + { 0x4DE9, 52936 }, + { 0x4DEA, 53014 }, + { 0x4DEB, 52899 }, + { 0x4DEC, 52961 }, + { 0x4DED, 52914 }, + { 0x4DEE, 52996 }, + { 0x4DEF, 52781 }, + { 0x4DF0, 52999 }, + { 0x4DF1, 52815 }, + { 0x4DF2, 52810 }, + { 0x4DF3, 52804 }, + { 0x4DF4, 53008 }, + { 0x4DF5, 52829 }, + { 0x4DF6, 52949 }, + { 0x4DF7, 52834 }, + { 0x4DF8, 52789 }, + { 0x4DF9, 52794 }, + { 0x4DFA, 52981 }, + { 0x4DFB, 52990 }, + { 0x4DFC, 52872 }, + { 0x4DFD, 52887 }, + { 0x4DFE, 52849 }, + { 0x4DFF, 52891 }, + { 0x5000, 634 }, + { 0x5001, 637 }, + { 0x5002, 520 }, + { 0x5003, 631 }, + { 0x5004, 1300 }, + { 0x5005, 1303 }, + { 0x5006, 628 }, + { 0x5007, 1297 }, + { 0x5008, 529 }, + { 0x5009, 532 }, + { 0x500A, 514 }, + { 0x500B, 526 }, + { 0x500C, 2011 }, + { 0x500D, 802 }, + { 0x500E, 2008 }, + { 0x500F, 721 }, + { 0x5010, 724 }, + { 0x5011, 523 }, + { 0x5012, 718 }, + { 0x5013, 586 }, + { 0x5014, 517 }, + { 0x5015, 829 }, + { 0x5016, 910 }, + { 0x5017, 913 }, + { 0x5018, 541 }, + { 0x5019, 907 }, + { 0x501A, 2341 }, + { 0x501B, 2344 }, + { 0x501C, 904 }, + { 0x501D, 2338 }, + { 0x501E, 874 }, + { 0x501F, 877 }, + { 0x5020, 535 }, + { 0x5021, 871 }, + { 0x5022, 2350 }, + { 0x5023, 925 }, + { 0x5024, 2347 }, + { 0x5025, 919 }, + { 0x5026, 922 }, + { 0x5027, 544 }, + { 0x5028, 916 }, + { 0x5029, 901 }, + { 0x502A, 538 }, + { 0x502B, 898 }, + { 0x502C, 934 }, + { 0x502D, 937 }, + { 0x502E, 547 }, + { 0x502F, 928 }, + { 0x5030, 2353 }, + { 0x5031, 931 }, + { 0x5032, 946 }, + { 0x5033, 949 }, + { 0x5034, 550 }, + { 0x5035, 940 }, + { 0x5036, 2356 }, + { 0x5037, 943 }, + { 0x5038, 1705 }, + { 0x5039, 1708 }, + { 0x503A, 730 }, + { 0x503B, 1702 }, + { 0x503C, 3274 }, + { 0x503D, 1699 }, + { 0x503E, 3271 }, + { 0x503F, 1693 }, + { 0x5040, 1696 }, + { 0x5041, 727 }, + { 0x5042, 1690 }, + { 0x5043, 3280 }, + { 0x5044, 1720 }, + { 0x5045, 3277 }, + { 0x5046, 1714 }, + { 0x5047, 1717 }, + { 0x5048, 733 }, + { 0x5049, 1711 }, + { 0x504A, 1729 }, + { 0x504B, 1732 }, + { 0x504C, 736 }, + { 0x504D, 1723 }, + { 0x504E, 3283 }, + { 0x504F, 1726 }, + { 0x5050, 1741 }, + { 0x5051, 1744 }, + { 0x5052, 739 }, + { 0x5053, 1735 }, + { 0x5054, 3286 }, + { 0x5055, 1738 }, + { 0x5056, 2299 }, + { 0x5057, 2302 }, + { 0x5058, 886 }, + { 0x5059, 2296 }, + { 0x505A, 3709 }, + { 0x505B, 3712 }, + { 0x505C, 2293 }, + { 0x505D, 3706 }, + { 0x505E, 2281 }, + { 0x505F, 2284 }, + { 0x5060, 880 }, + { 0x5061, 2278 }, + { 0x5062, 3718 }, + { 0x5063, 2314 }, + { 0x5064, 3715 }, + { 0x5065, 2308 }, + { 0x5066, 2311 }, + { 0x5067, 889 }, + { 0x5068, 2305 }, + { 0x5069, 2290 }, + { 0x506A, 883 }, + { 0x506B, 2287 }, + { 0x506C, 2323 }, + { 0x506D, 2326 }, + { 0x506E, 892 }, + { 0x506F, 2317 }, + { 0x5070, 3721 }, + { 0x5071, 2320 }, + { 0x5072, 2332 }, + { 0x5073, 2335 }, + { 0x5074, 895 }, + { 0x5075, 2329 }, + { 0x5076, 2959 }, + { 0x5077, 2962 }, + { 0x5078, 1561 }, + { 0x5079, 2956 }, + { 0x507A, 3871 }, + { 0x507B, 2953 }, + { 0x507C, 3868 }, + { 0x507D, 2947 }, + { 0x507E, 2950 }, + { 0x507F, 1558 }, + { 0x5080, 2944 }, + { 0x5081, 2968 }, + { 0x5082, 2971 }, + { 0x5083, 1564 }, + { 0x5084, 2965 }, + { 0x5085, 2980 }, + { 0x5086, 2983 }, + { 0x5087, 1567 }, + { 0x5088, 2974 }, + { 0x5089, 3874 }, + { 0x508A, 2977 }, + { 0x508B, 2992 }, + { 0x508C, 2995 }, + { 0x508D, 1570 }, + { 0x508E, 2986 }, + { 0x508F, 3877 }, + { 0x5090, 2989 }, + { 0x5091, 2647 }, + { 0x5092, 2650 }, + { 0x5093, 1252 }, + { 0x5094, 2644 }, + { 0x5095, 3793 }, + { 0x5096, 2641 }, + { 0x5097, 3790 }, + { 0x5098, 2635 }, + { 0x5099, 2638 }, + { 0x509A, 1249 }, + { 0x509B, 2632 }, + { 0x509C, 3799 }, + { 0x509D, 2662 }, + { 0x509E, 3796 }, + { 0x509F, 2656 }, + { 0x50A0, 2659 }, + { 0x50A1, 1255 }, + { 0x50A2, 2653 }, + { 0x50A3, 2671 }, + { 0x50A4, 2674 }, + { 0x50A5, 1258 }, + { 0x50A6, 2665 }, + { 0x50A7, 3802 }, + { 0x50A8, 2668 }, + { 0x50A9, 2683 }, + { 0x50AA, 1261 }, + { 0x50AB, 2677 }, + { 0x50AC, 3805 }, + { 0x50AD, 2680 }, + { 0x50AE, 1513 }, + { 0x50AF, 1516 }, + { 0x50B0, 691 }, + { 0x50B1, 1510 }, + { 0x50B2, 2929 }, + { 0x50B3, 1507 }, + { 0x50B4, 2926 }, + { 0x50B5, 1486 }, + { 0x50B6, 1489 }, + { 0x50B7, 685 }, + { 0x50B8, 1483 }, + { 0x50B9, 2935 }, + { 0x50BA, 2938 }, + { 0x50BB, 1528 }, + { 0x50BC, 2932 }, + { 0x50BD, 1522 }, + { 0x50BE, 1525 }, + { 0x50BF, 694 }, + { 0x50C0, 1519 }, + { 0x50C1, 1492 }, + { 0x50C2, 688 }, + { 0x50C3, 1537 }, + { 0x50C4, 1540 }, + { 0x50C5, 697 }, + { 0x50C6, 1531 }, + { 0x50C7, 2941 }, + { 0x50C8, 1534 }, + { 0x50C9, 1546 }, + { 0x50CA, 1549 }, + { 0x50CB, 700 }, + { 0x50CC, 1543 }, + { 0x50CD, 1108 }, + { 0x50CE, 1111 }, + { 0x50CF, 592 }, + { 0x50D0, 1105 }, + { 0x50D1, 1099 }, + { 0x50D2, 1102 }, + { 0x50D3, 589 }, + { 0x50D4, 1096 }, + { 0x50D5, 1117 }, + { 0x50D6, 595 }, + { 0x50D7, 1114 }, + { 0x50D8, 1126 }, + { 0x50D9, 1129 }, + { 0x50DA, 598 }, + { 0x50DB, 1120 }, + { 0x50DC, 2494 }, + { 0x50DD, 1123 }, + { 0x50DE, 1135 }, + { 0x50DF, 1138 }, + { 0x50E0, 601 }, + { 0x50E1, 1132 }, + { 0x50E2, 2035 }, + { 0x50E3, 2038 }, + { 0x50E4, 808 }, + { 0x50E5, 2032 }, + { 0x50E6, 3523 }, + { 0x50E7, 3526 }, + { 0x50E8, 2029 }, + { 0x50E9, 3520 }, + { 0x50EA, 2017 }, + { 0x50EB, 2020 }, + { 0x50EC, 805 }, + { 0x50ED, 2014 }, + { 0x50EE, 2044 }, + { 0x50EF, 2047 }, + { 0x50F0, 811 }, + { 0x50F1, 2041 }, + { 0x50F2, 2026 }, + { 0x50F3, 2023 }, + { 0x50F4, 2056 }, + { 0x50F5, 2059 }, + { 0x50F6, 814 }, + { 0x50F7, 2050 }, + { 0x50F8, 3529 }, + { 0x50F9, 2053 }, + { 0x50FA, 2068 }, + { 0x50FB, 2071 }, + { 0x50FC, 817 }, + { 0x50FD, 2062 }, + { 0x50FE, 3532 }, + { 0x50FF, 2065 }, + { 0x5100, 1066 }, + { 0x5101, 1069 }, + { 0x5102, 577 }, + { 0x5103, 1063 }, + { 0x5104, 2485 }, + { 0x5105, 1060 }, + { 0x5106, 2482 }, + { 0x5107, 1033 }, + { 0x5108, 1036 }, + { 0x5109, 571 }, + { 0x510A, 1030 }, + { 0x510B, 2488 }, + { 0x510C, 1081 }, + { 0x510D, 1075 }, + { 0x510E, 1078 }, + { 0x510F, 580 }, + { 0x5110, 1072 }, + { 0x5111, 1057 }, + { 0x5112, 574 }, + { 0x5113, 1054 }, + { 0x5114, 1090 }, + { 0x5115, 1093 }, + { 0x5116, 583 }, + { 0x5117, 1084 }, + { 0x5118, 2491 }, + { 0x5119, 1087 }, + { 0x511A, 1978 }, + { 0x511B, 1981 }, + { 0x511C, 793 }, + { 0x511D, 1975 }, + { 0x511E, 3505 }, + { 0x511F, 1972 }, + { 0x5120, 3502 }, + { 0x5121, 1960 }, + { 0x5122, 1963 }, + { 0x5123, 787 }, + { 0x5124, 1957 }, + { 0x5125, 3511 }, + { 0x5126, 3514 }, + { 0x5127, 1993 }, + { 0x5128, 3508 }, + { 0x5129, 1987 }, + { 0x512A, 1990 }, + { 0x512B, 796 }, + { 0x512C, 1984 }, + { 0x512D, 1969 }, + { 0x512E, 790 }, + { 0x512F, 1966 }, + { 0x5130, 2002 }, + { 0x5131, 2005 }, + { 0x5132, 799 }, + { 0x5133, 1996 }, + { 0x5134, 3517 }, + { 0x5135, 1999 }, + { 0x5136, 2452 }, + { 0x5137, 2455 }, + { 0x5138, 1045 }, + { 0x5139, 2449 }, + { 0x513A, 3742 }, + { 0x513B, 2446 }, + { 0x513C, 3739 }, + { 0x513D, 2434 }, + { 0x513E, 2437 }, + { 0x513F, 1039 }, + { 0x5140, 2431 }, + { 0x5141, 3748 }, + { 0x5142, 2467 }, + { 0x5143, 3745 }, + { 0x5144, 2461 }, + { 0x5145, 2464 }, + { 0x5146, 1048 }, + { 0x5147, 2458 }, + { 0x5148, 2443 }, + { 0x5149, 1042 }, + { 0x514A, 2440 }, + { 0x514B, 2476 }, + { 0x514C, 2479 }, + { 0x514D, 1051 }, + { 0x514E, 2470 }, + { 0x514F, 3751 }, + { 0x5150, 2473 }, + { 0x5151, 3019 }, + { 0x5152, 3022 }, + { 0x5153, 1579 }, + { 0x5154, 3016 }, + { 0x5155, 3880 }, + { 0x5156, 3013 }, + { 0x5157, 3001 }, + { 0x5158, 3004 }, + { 0x5159, 1573 }, + { 0x515A, 2998 }, + { 0x515B, 3028 }, + { 0x515C, 3031 }, + { 0x515D, 1582 }, + { 0x515E, 3025 }, + { 0x515F, 3010 }, + { 0x5160, 1576 }, + { 0x5161, 3007 }, + { 0x5162, 3040 }, + { 0x5163, 3043 }, + { 0x5164, 1585 }, + { 0x5165, 3034 }, + { 0x5166, 3883 }, + { 0x5167, 3037 }, + { 0x5168, 2707 }, + { 0x5169, 2710 }, + { 0x516A, 1270 }, + { 0x516B, 2704 }, + { 0x516C, 3811 }, + { 0x516D, 3814 }, + { 0x516E, 2701 }, + { 0x516F, 3808 }, + { 0x5170, 2689 }, + { 0x5171, 2692 }, + { 0x5172, 1264 }, + { 0x5173, 2686 }, + { 0x5174, 3817 }, + { 0x5175, 2722 }, + { 0x5176, 2716 }, + { 0x5177, 2719 }, + { 0x5178, 2713 }, + { 0x5179, 2698 }, + { 0x517A, 1267 }, + { 0x517B, 2695 }, + { 0x517C, 2725 }, + { 0x517D, 1609 }, + { 0x517E, 1612 }, + { 0x517F, 709 }, + { 0x5180, 1606 }, + { 0x5181, 3079 }, + { 0x5182, 1603 }, + { 0x5183, 3076 }, + { 0x5184, 1555 }, + { 0x5185, 703 }, + { 0x5186, 1552 }, + { 0x5187, 3178 }, + { 0x5188, 1651 }, + { 0x5189, 3175 }, + { 0x518A, 1630 }, + { 0x518B, 1633 }, + { 0x518C, 712 }, + { 0x518D, 1627 }, + { 0x518E, 1591 }, + { 0x518F, 706 }, + { 0x5190, 1588 }, + { 0x5191, 1660 }, + { 0x5192, 1663 }, + { 0x5193, 715 }, + { 0x5194, 1654 }, + { 0x5195, 3181 }, + { 0x5196, 1657 }, + { 0x5197, 2593 }, + { 0x5198, 2596 }, + { 0x5199, 1237 }, + { 0x519A, 2590 }, + { 0x519B, 3775 }, + { 0x519C, 2587 }, + { 0x519D, 3772 }, + { 0x519E, 2575 }, + { 0x519F, 2578 }, + { 0x51A0, 1231 }, + { 0x51A1, 2572 }, + { 0x51A2, 3781 }, + { 0x51A3, 2605 }, + { 0x51A4, 3778 }, + { 0x51A5, 2602 }, + { 0x51A6, 1240 }, + { 0x51A7, 2599 }, + { 0x51A8, 2584 }, + { 0x51A9, 1234 }, + { 0x51AA, 2581 }, + { 0x51AB, 2614 }, + { 0x51AC, 2617 }, + { 0x51AD, 1243 }, + { 0x51AE, 2608 }, + { 0x51AF, 3784 }, + { 0x51B0, 2611 }, + { 0x51B1, 2626 }, + { 0x51B2, 2629 }, + { 0x51B3, 1246 }, + { 0x51B4, 2620 }, + { 0x51B5, 3787 }, + { 0x51B6, 2623 }, + { 0x51B7, 1441 }, + { 0x51B8, 1444 }, + { 0x51B9, 673 }, + { 0x51BA, 1438 }, + { 0x51BB, 2863 }, + { 0x51BC, 2866 }, + { 0x51BD, 1435 }, + { 0x51BE, 2860 }, + { 0x51BF, 1423 }, + { 0x51C0, 1426 }, + { 0x51C1, 667 }, + { 0x51C2, 1420 }, + { 0x51C3, 2872 }, + { 0x51C4, 2875 }, + { 0x51C5, 1456 }, + { 0x51C6, 2869 }, + { 0x51C7, 1450 }, + { 0x51C8, 1453 }, + { 0x51C9, 676 }, + { 0x51CA, 1447 }, + { 0x51CB, 1432 }, + { 0x51CC, 670 }, + { 0x51CD, 1429 }, + { 0x51CE, 1465 }, + { 0x51CF, 1468 }, + { 0x51D0, 679 }, + { 0x51D1, 1459 }, + { 0x51D2, 2878 }, + { 0x51D3, 1462 }, + { 0x51D4, 1477 }, + { 0x51D5, 1480 }, + { 0x51D6, 682 }, + { 0x51D7, 1471 }, + { 0x51D8, 2881 }, + { 0x51D9, 1474 }, + { 0x51DA, 1180 }, + { 0x51DB, 1183 }, + { 0x51DC, 610 }, + { 0x51DD, 1177 }, + { 0x51DE, 2551 }, + { 0x51DF, 2554 }, + { 0x51E0, 1174 }, + { 0x51E1, 2548 }, + { 0x51E2, 1144 }, + { 0x51E3, 1147 }, + { 0x51E4, 604 }, + { 0x51E5, 1141 }, + { 0x51E6, 2560 }, + { 0x51E7, 2563 }, + { 0x51E8, 1195 }, + { 0x51E9, 2557 }, + { 0x51EA, 1189 }, + { 0x51EB, 1192 }, + { 0x51EC, 613 }, + { 0x51ED, 1186 }, + { 0x51EE, 1153 }, + { 0x51EF, 1156 }, + { 0x51F0, 607 }, + { 0x51F1, 1150 }, + { 0x51F2, 1204 }, + { 0x51F3, 1207 }, + { 0x51F4, 616 }, + { 0x51F5, 1198 }, + { 0x51F6, 2566 }, + { 0x51F7, 1201 }, + { 0x51F8, 1390 }, + { 0x51F9, 1393 }, + { 0x51FA, 658 }, + { 0x51FB, 1387 }, + { 0x51FC, 2848 }, + { 0x51FD, 1384 }, + { 0x51FE, 2845 }, + { 0x51FF, 1369 }, + { 0x5200, 1372 }, + { 0x5201, 652 }, + { 0x5202, 1366 }, + { 0x5203, 2854 }, + { 0x5204, 1405 }, + { 0x5205, 2851 }, + { 0x5206, 1399 }, + { 0x5207, 1402 }, + { 0x5208, 661 }, + { 0x5209, 1396 }, + { 0x520A, 1378 }, + { 0x520B, 1381 }, + { 0x520C, 655 }, + { 0x520D, 1375 }, + { 0x520E, 1414 }, + { 0x520F, 1417 }, + { 0x5210, 664 }, + { 0x5211, 1408 }, + { 0x5212, 2857 }, + { 0x5213, 1411 }, + { 0x5214, 2518 }, + { 0x5215, 2521 }, + { 0x5216, 1165 }, + { 0x5217, 3757 }, + { 0x5218, 2515 }, + { 0x5219, 3754 }, + { 0x521A, 2500 }, + { 0x521B, 2503 }, + { 0x521C, 1159 }, + { 0x521D, 2497 }, + { 0x521E, 3763 }, + { 0x521F, 3766 }, + { 0x5220, 2533 }, + { 0x5221, 3760 }, + { 0x5222, 2527 }, + { 0x5223, 2530 }, + { 0x5224, 1168 }, + { 0x5225, 2524 }, + { 0x5226, 2509 }, + { 0x5227, 2512 }, + { 0x5228, 1162 }, + { 0x5229, 2506 }, + { 0x522A, 2542 }, + { 0x522B, 2545 }, + { 0x522C, 1171 }, + { 0x522D, 2536 }, + { 0x522E, 3769 }, + { 0x522F, 2539 }, + { 0x5230, 3856 }, + { 0x5231, 2899 }, + { 0x5232, 2887 }, + { 0x5233, 2890 }, + { 0x5234, 1495 }, + { 0x5235, 2884 }, + { 0x5236, 3862 }, + { 0x5237, 2911 }, + { 0x5238, 3859 }, + { 0x5239, 2905 }, + { 0x523A, 2908 }, + { 0x523B, 1501 }, + { 0x523C, 2902 }, + { 0x523D, 2896 }, + { 0x523E, 1498 }, + { 0x523F, 2893 }, + { 0x5240, 2920 }, + { 0x5241, 2923 }, + { 0x5242, 1504 }, + { 0x5243, 2914 }, + { 0x5244, 3865 }, + { 0x5245, 2917 }, + { 0x5246, 2758 }, + { 0x5247, 2761 }, + { 0x5248, 1291 }, + { 0x5249, 2755 }, + { 0x524A, 3823 }, + { 0x524B, 3826 }, + { 0x524C, 2752 }, + { 0x524D, 3820 }, + { 0x524E, 2740 }, + { 0x524F, 2743 }, + { 0x5250, 1285 }, + { 0x5251, 2737 }, + { 0x5252, 3832 }, + { 0x5253, 3835 }, + { 0x5254, 2773 }, + { 0x5255, 3829 }, + { 0x5256, 2767 }, + { 0x5257, 2770 }, + { 0x5258, 1294 }, + { 0x5259, 2764 }, + { 0x525A, 2749 }, + { 0x525B, 1288 }, + { 0x525C, 2746 }, + { 0x525D, 3889 }, + { 0x525E, 3061 }, + { 0x525F, 3886 }, + { 0x5260, 3049 }, + { 0x5261, 3052 }, + { 0x5262, 1594 }, + { 0x5263, 3046 }, + { 0x5264, 3892 }, + { 0x5265, 3895 }, + { 0x5266, 3073 }, + { 0x5267, 3067 }, + { 0x5268, 3070 }, + { 0x5269, 1600 }, + { 0x526A, 3064 }, + { 0x526B, 3058 }, + { 0x526C, 1597 }, + { 0x526D, 3055 }, + { 0x526E, 1228 }, + { 0x526F, 2569 }, + { 0x5270, 1225 }, + { 0x5271, 1213 }, + { 0x5272, 1216 }, + { 0x5273, 619 }, + { 0x5274, 1210 }, + { 0x5275, 2731 }, + { 0x5276, 2734 }, + { 0x5277, 1282 }, + { 0x5278, 2728 }, + { 0x5279, 1276 }, + { 0x527A, 1279 }, + { 0x527B, 625 }, + { 0x527C, 1273 }, + { 0x527D, 1222 }, + { 0x527E, 622 }, + { 0x527F, 1219 }, + { 0x5280, 2077 }, + { 0x5281, 2080 }, + { 0x5282, 820 }, + { 0x5283, 2074 }, + { 0x5284, 3538 }, + { 0x5285, 2095 }, + { 0x5286, 3535 }, + { 0x5287, 2092 }, + { 0x5288, 826 }, + { 0x5289, 2089 }, + { 0x528A, 2086 }, + { 0x528B, 823 }, + { 0x528C, 2083 }, + { 0x528D, 2218 }, + { 0x528E, 2221 }, + { 0x528F, 859 }, + { 0x5290, 2215 }, + { 0x5291, 3637 }, + { 0x5292, 2212 }, + { 0x5293, 3634 }, + { 0x5294, 2185 }, + { 0x5295, 2188 }, + { 0x5296, 853 }, + { 0x5297, 2182 }, + { 0x5298, 3643 }, + { 0x5299, 2233 }, + { 0x529A, 3640 }, + { 0x529B, 2227 }, + { 0x529C, 2230 }, + { 0x529D, 862 }, + { 0x529E, 2224 }, + { 0x529F, 2194 }, + { 0x52A0, 856 }, + { 0x52A1, 2191 }, + { 0x52A2, 2242 }, + { 0x52A3, 2245 }, + { 0x52A4, 865 }, + { 0x52A5, 2236 }, + { 0x52A6, 3646 }, + { 0x52A7, 2239 }, + { 0x52A8, 2254 }, + { 0x52A9, 2257 }, + { 0x52AA, 868 }, + { 0x52AB, 2248 }, + { 0x52AC, 3649 }, + { 0x52AD, 2251 }, + { 0x52AE, 988 }, + { 0x52AF, 991 }, + { 0x52B0, 559 }, + { 0x52B1, 985 }, + { 0x52B2, 2413 }, + { 0x52B3, 2416 }, + { 0x52B4, 982 }, + { 0x52B5, 2410 }, + { 0x52B6, 955 }, + { 0x52B7, 958 }, + { 0x52B8, 553 }, + { 0x52B9, 952 }, + { 0x52BA, 2422 }, + { 0x52BB, 1003 }, + { 0x52BC, 2419 }, + { 0x52BD, 997 }, + { 0x52BE, 1000 }, + { 0x52BF, 562 }, + { 0x52C0, 994 }, + { 0x52C1, 964 }, + { 0x52C2, 556 }, + { 0x52C3, 961 }, + { 0x52C4, 1012 }, + { 0x52C5, 1015 }, + { 0x52C6, 565 }, + { 0x52C7, 1006 }, + { 0x52C8, 2425 }, + { 0x52C9, 1009 }, + { 0x52CA, 1024 }, + { 0x52CB, 1027 }, + { 0x52CC, 568 }, + { 0x52CD, 1018 }, + { 0x52CE, 2428 }, + { 0x52CF, 1021 }, + { 0x52D0, 3673 }, + { 0x52D1, 3676 }, + { 0x52D2, 2266 }, + { 0x52D3, 3670 }, + { 0x52D4, 3997 }, + { 0x52D5, 4000 }, + { 0x52D6, 3667 }, + { 0x52D7, 3994 }, + { 0x52D8, 3655 }, + { 0x52D9, 3658 }, + { 0x52DA, 2260 }, + { 0x52DB, 3652 }, + { 0x52DC, 3682 }, + { 0x52DD, 2269 }, + { 0x52DE, 3679 }, + { 0x52DF, 3664 }, + { 0x52E0, 2263 }, + { 0x52E1, 3661 }, + { 0x52E2, 3691 }, + { 0x52E3, 2272 }, + { 0x52E4, 3685 }, + { 0x52E5, 4003 }, + { 0x52E6, 3688 }, + { 0x52E7, 3700 }, + { 0x52E8, 3703 }, + { 0x52E9, 2275 }, + { 0x52EA, 3694 }, + { 0x52EB, 4006 }, + { 0x52EC, 3697 }, + { 0x52ED, 3235 }, + { 0x52EE, 3238 }, + { 0x52EF, 1681 }, + { 0x52F0, 3232 }, + { 0x52F1, 3940 }, + { 0x52F2, 3229 }, + { 0x52F3, 3937 }, + { 0x52F4, 3220 }, + { 0x52F5, 3223 }, + { 0x52F6, 1675 }, + { 0x52F7, 3217 }, + { 0x52F8, 3943 }, + { 0x52F9, 3247 }, + { 0x52FA, 3244 }, + { 0x52FB, 3241 }, + { 0x52FC, 3226 }, + { 0x52FD, 1678 }, + { 0x52FE, 3256 }, + { 0x52FF, 1684 }, + { 0x5300, 3250 }, + { 0x5301, 3946 }, + { 0x5302, 3253 }, + { 0x5303, 3265 }, + { 0x5304, 3268 }, + { 0x5305, 1687 }, + { 0x5306, 3259 }, + { 0x5307, 3949 }, + { 0x5308, 3262 }, + { 0x5309, 1897 }, + { 0x530A, 1900 }, + { 0x530B, 775 }, + { 0x530C, 1894 }, + { 0x530D, 3430 }, + { 0x530E, 1891 }, + { 0x530F, 3427 }, + { 0x5310, 1864 }, + { 0x5311, 1867 }, + { 0x5312, 769 }, + { 0x5313, 1861 }, + { 0x5314, 3493 }, + { 0x5315, 1930 }, + { 0x5316, 3490 }, + { 0x5317, 1906 }, + { 0x5318, 1909 }, + { 0x5319, 778 }, + { 0x531A, 1903 }, + { 0x531B, 1873 }, + { 0x531C, 772 }, + { 0x531D, 1870 }, + { 0x531E, 1939 }, + { 0x531F, 1942 }, + { 0x5320, 781 }, + { 0x5321, 1933 }, + { 0x5322, 3496 }, + { 0x5323, 1936 }, + { 0x5324, 1951 }, + { 0x5325, 1954 }, + { 0x5326, 784 }, + { 0x5327, 1945 }, + { 0x5328, 3499 }, + { 0x5329, 1948 }, + { 0x532A, 3454 }, + { 0x532B, 3457 }, + { 0x532C, 1918 }, + { 0x532D, 3451 }, + { 0x532E, 3976 }, + { 0x532F, 3448 }, + { 0x5330, 3973 }, + { 0x5331, 3436 }, + { 0x5332, 3439 }, + { 0x5333, 1912 }, + { 0x5334, 3433 }, + { 0x5335, 3463 }, + { 0x5336, 3466 }, + { 0x5337, 1921 }, + { 0x5338, 3460 }, + { 0x5339, 3445 }, + { 0x533A, 1915 }, + { 0x533B, 3442 }, + { 0x533C, 3472 }, + { 0x533D, 3475 }, + { 0x533E, 1924 }, + { 0x533F, 3469 }, + { 0x5340, 3484 }, + { 0x5341, 3487 }, + { 0x5342, 1927 }, + { 0x5343, 3478 }, + { 0x5344, 3979 }, + { 0x5345, 3481 }, + { 0x5346, 3583 }, + { 0x5347, 3586 }, + { 0x5348, 2197 }, + { 0x5349, 3580 }, + { 0x534A, 3985 }, + { 0x534B, 3607 }, + { 0x534C, 3982 }, + { 0x534D, 3601 }, + { 0x534E, 3604 }, + { 0x534F, 2203 }, + { 0x5350, 3598 }, + { 0x5351, 3592 }, + { 0x5352, 3595 }, + { 0x5353, 2200 }, + { 0x5354, 3589 }, + { 0x5355, 3616 }, + { 0x5356, 3619 }, + { 0x5357, 2206 }, + { 0x5358, 3610 }, + { 0x5359, 3988 }, + { 0x535A, 3613 }, + { 0x535B, 3628 }, + { 0x535C, 3631 }, + { 0x535D, 2209 }, + { 0x535E, 3622 }, + { 0x535F, 3991 }, + { 0x5360, 3625 }, + { 0x5361, 2362 }, + { 0x5362, 2365 }, + { 0x5363, 967 }, + { 0x5364, 2359 }, + { 0x5365, 3727 }, + { 0x5366, 3730 }, + { 0x5367, 2386 }, + { 0x5368, 3724 }, + { 0x5369, 2380 }, + { 0x536A, 2383 }, + { 0x536B, 973 }, + { 0x536C, 2377 }, + { 0x536D, 2371 }, + { 0x536E, 2374 }, + { 0x536F, 970 }, + { 0x5370, 2368 }, + { 0x5371, 2395 }, + { 0x5372, 976 }, + { 0x5373, 2389 }, + { 0x5374, 3733 }, + { 0x5375, 2392 }, + { 0x5376, 2404 }, + { 0x5377, 2407 }, + { 0x5378, 979 }, + { 0x5379, 2398 }, + { 0x537A, 3736 }, + { 0x537B, 2401 }, + { 0x537C, 3313 }, + { 0x537D, 1819 }, + { 0x537E, 3952 }, + { 0x537F, 3334 }, + { 0x5380, 3328 }, + { 0x5381, 3331 }, + { 0x5382, 1825 }, + { 0x5383, 3325 }, + { 0x5384, 3319 }, + { 0x5385, 3322 }, + { 0x5386, 1822 }, + { 0x5387, 3316 }, + { 0x5388, 3343 }, + { 0x5389, 3346 }, + { 0x538A, 1828 }, + { 0x538B, 3337 }, + { 0x538C, 3955 }, + { 0x538D, 3340 }, + { 0x538E, 3355 }, + { 0x538F, 3358 }, + { 0x5390, 1831 }, + { 0x5391, 3349 }, + { 0x5392, 3958 }, + { 0x5393, 3352 }, + { 0x5394, 3130 }, + { 0x5395, 3133 }, + { 0x5396, 1636 }, + { 0x5397, 3127 }, + { 0x5398, 3148 }, + { 0x5399, 1642 }, + { 0x539A, 3145 }, + { 0x539B, 3139 }, + { 0x539C, 3142 }, + { 0x539D, 1639 }, + { 0x539E, 3136 }, + { 0x539F, 3157 }, + { 0x53A0, 3160 }, + { 0x53A1, 1645 }, + { 0x53A2, 3151 }, + { 0x53A3, 3916 }, + { 0x53A4, 3154 }, + { 0x53A5, 3169 }, + { 0x53A6, 3172 }, + { 0x53A7, 1648 }, + { 0x53A8, 3163 }, + { 0x53A9, 3919 }, + { 0x53AA, 3166 }, + { 0x53AB, 3376 }, + { 0x53AC, 3379 }, + { 0x53AD, 1876 }, + { 0x53AE, 3373 }, + { 0x53AF, 3964 }, + { 0x53B0, 3400 }, + { 0x53B1, 3961 }, + { 0x53B2, 3394 }, + { 0x53B3, 3397 }, + { 0x53B4, 1882 }, + { 0x53B5, 3391 }, + { 0x53B6, 3385 }, + { 0x53B7, 3388 }, + { 0x53B8, 1879 }, + { 0x53B9, 3382 }, + { 0x53BA, 3409 }, + { 0x53BB, 3412 }, + { 0x53BC, 1885 }, + { 0x53BD, 3403 }, + { 0x53BE, 3967 }, + { 0x53BF, 3406 }, + { 0x53C0, 3421 }, + { 0x53C1, 3424 }, + { 0x53C2, 1888 }, + { 0x53C3, 3415 }, + { 0x53C4, 3970 }, + { 0x53C5, 3418 }, + { 0x53C6, 1798 }, + { 0x53C7, 1801 }, + { 0x53C8, 754 }, + { 0x53C9, 1795 }, + { 0x53CA, 3364 }, + { 0x53CB, 1834 }, + { 0x53CC, 3361 }, + { 0x53CD, 1813 }, + { 0x53CE, 1816 }, + { 0x53CF, 760 }, + { 0x53D0, 1810 }, + { 0x53D1, 1807 }, + { 0x53D2, 757 }, + { 0x53D3, 1804 }, + { 0x53D4, 1843 }, + { 0x53D5, 1846 }, + { 0x53D6, 763 }, + { 0x53D7, 1837 }, + { 0x53D8, 3367 }, + { 0x53D9, 1840 }, + { 0x53DA, 1855 }, + { 0x53DB, 1858 }, + { 0x53DC, 766 }, + { 0x53DD, 1849 }, + { 0x53DE, 3370 }, + { 0x53DF, 1852 }, + { 0x53E0, 1312 }, + { 0x53E1, 1315 }, + { 0x53E2, 640 }, + { 0x53E3, 1309 }, + { 0x53E4, 2779 }, + { 0x53E5, 2782 }, + { 0x53E6, 1306 }, + { 0x53E7, 2776 }, + { 0x53E8, 2833 }, + { 0x53E9, 2836 }, + { 0x53EA, 1339 }, + { 0x53EB, 2830 }, + { 0x53EC, 1333 }, + { 0x53ED, 1336 }, + { 0x53EE, 643 }, + { 0x53EF, 1330 }, + { 0x53F0, 1348 }, + { 0x53F1, 1351 }, + { 0x53F2, 646 }, + { 0x53F3, 1342 }, + { 0x53F4, 2839 }, + { 0x53F5, 1345 }, + { 0x53F6, 1360 }, + { 0x53F7, 1363 }, + { 0x53F8, 649 }, + { 0x53F9, 1354 }, + { 0x53FA, 2842 }, + { 0x53FB, 1357 }, + { 0x53FC, 1753 }, + { 0x53FD, 1756 }, + { 0x53FE, 742 }, + { 0x53FF, 1750 }, + { 0x5400, 3292 }, + { 0x5401, 3295 }, + { 0x5402, 1747 }, + { 0x5403, 3289 }, + { 0x5404, 3301 }, + { 0x5405, 3304 }, + { 0x5406, 1768 }, + { 0x5407, 3298 }, + { 0x5408, 1762 }, + { 0x5409, 1765 }, + { 0x540A, 745 }, + { 0x540B, 1759 }, + { 0x540C, 1777 }, + { 0x540D, 1780 }, + { 0x540E, 748 }, + { 0x540F, 1771 }, + { 0x5410, 3307 }, + { 0x5411, 1774 }, + { 0x5412, 1789 }, + { 0x5413, 1792 }, + { 0x5414, 751 }, + { 0x5415, 1783 }, + { 0x5416, 3310 }, + { 0x5417, 1786 }, + { 0x5418, 2791 }, + { 0x5419, 2794 }, + { 0x541A, 1318 }, + { 0x541B, 2788 }, + { 0x541C, 3841 }, + { 0x541D, 3844 }, + { 0x541E, 2785 }, + { 0x541F, 3838 }, + { 0x5420, 3850 }, + { 0x5421, 2806 }, + { 0x5422, 3847 }, + { 0x5423, 2800 }, + { 0x5424, 2803 }, + { 0x5425, 1321 }, + { 0x5426, 2797 }, + { 0x5427, 2815 }, + { 0x5428, 2818 }, + { 0x5429, 1324 }, + { 0x542A, 2809 }, + { 0x542B, 3853 }, + { 0x542C, 2812 }, + { 0x542D, 2824 }, + { 0x542E, 2827 }, + { 0x542F, 1327 }, + { 0x5430, 2821 }, + { 0x5431, 3088 }, + { 0x5432, 3091 }, + { 0x5433, 1615 }, + { 0x5434, 3085 }, + { 0x5435, 3901 }, + { 0x5436, 3904 }, + { 0x5437, 3082 }, + { 0x5438, 3898 }, + { 0x5439, 3907 }, + { 0x543A, 3103 }, + { 0x543B, 3097 }, + { 0x543C, 3100 }, + { 0x543D, 1618 }, + { 0x543E, 3094 }, + { 0x543F, 3112 }, + { 0x5440, 1621 }, + { 0x5441, 3106 }, + { 0x5442, 3910 }, + { 0x5443, 3109 }, + { 0x5444, 3121 }, + { 0x5445, 3124 }, + { 0x5446, 1624 }, + { 0x5447, 3115 }, + { 0x5448, 3913 }, + { 0x5449, 3118 }, + { 0x544A, 3190 }, + { 0x544B, 3193 }, + { 0x544C, 1666 }, + { 0x544D, 3187 }, + { 0x544E, 3925 }, + { 0x544F, 3928 }, + { 0x5450, 3184 }, + { 0x5451, 3922 }, + { 0x5452, 3934 }, + { 0x5453, 3205 }, + { 0x5454, 3931 }, + { 0x5455, 3199 }, + { 0x5456, 3202 }, + { 0x5457, 1669 }, + { 0x5458, 3196 }, + { 0x5459, 3211 }, + { 0x545A, 3214 }, + { 0x545B, 1672 }, + { 0x545C, 3208 }, + { 0x545D, 2104 }, + { 0x545E, 2107 }, + { 0x545F, 832 }, + { 0x5460, 2101 }, + { 0x5461, 3544 }, + { 0x5462, 3547 }, + { 0x5463, 2098 }, + { 0x5464, 3541 }, + { 0x5465, 3550 }, + { 0x5466, 2119 }, + { 0x5467, 2113 }, + { 0x5468, 2116 }, + { 0x5469, 835 }, + { 0x546A, 2110 }, + { 0x546B, 2128 }, + { 0x546C, 2131 }, + { 0x546D, 838 }, + { 0x546E, 2122 }, + { 0x546F, 3553 }, + { 0x5470, 2125 }, + { 0x5471, 2140 }, + { 0x5472, 2143 }, + { 0x5473, 841 }, + { 0x5474, 2137 }, + { 0x5475, 3559 }, + { 0x5476, 3562 }, + { 0x5477, 2134 }, + { 0x5478, 3556 }, + { 0x5479, 3568 }, + { 0x547A, 3571 }, + { 0x547B, 2155 }, + { 0x547C, 3565 }, + { 0x547D, 2149 }, + { 0x547E, 2152 }, + { 0x547F, 844 }, + { 0x5480, 2146 }, + { 0x5481, 2164 }, + { 0x5482, 2167 }, + { 0x5483, 847 }, + { 0x5484, 2158 }, + { 0x5485, 3574 }, + { 0x5486, 2161 }, + { 0x5487, 2176 }, + { 0x5488, 2179 }, + { 0x5489, 850 }, + { 0x548A, 2170 }, + { 0x548B, 3577 }, + { 0x548C, 2173 }, + { 0x5490, 430 }, + { 0x5491, 364 }, + { 0x5492, 412 }, + { 0x5493, 493 }, + { 0x5494, 394 }, + { 0x5495, 436 }, + { 0x5496, 469 }, + { 0x5497, 400 }, + { 0x5498, 367 }, + { 0x5499, 475 }, + { 0x549A, 418 }, + { 0x549B, 460 }, + { 0x549C, 421 }, + { 0x549D, 379 }, + { 0x549E, 424 }, + { 0x549F, 481 }, + { 0x54A0, 439 }, + { 0x54A1, 355 }, + { 0x54A2, 454 }, + { 0x54A3, 397 }, + { 0x54A4, 466 }, + { 0x54A5, 385 }, + { 0x54A6, 472 }, + { 0x54A7, 496 }, + { 0x54A8, 373 }, + { 0x54A9, 370 }, + { 0x54AA, 487 }, + { 0x54AB, 451 }, + { 0x54AC, 427 }, + { 0x54AD, 406 }, + { 0x54AE, 448 }, + { 0x54AF, 445 }, + { 0x54B0, 433 }, + { 0x54B1, 442 }, + { 0x54B2, 382 }, + { 0x54B3, 358 }, + { 0x54B4, 499 }, + { 0x54B5, 409 }, + { 0x54B6, 403 }, + { 0x54B7, 484 }, + { 0x54B8, 376 }, + { 0x54B9, 352 }, + { 0x54BA, 508 }, + { 0x54BB, 415 }, + { 0x54BC, 349 }, + { 0x54BD, 463 }, + { 0x54BE, 391 }, + { 0x54BF, 478 }, + { 0x54C0, 502 }, + { 0x54C1, 457 }, + { 0x54C2, 505 }, + { 0x54C3, 388 }, + { 0x54C4, 511 }, + { 0x54C5, 490 }, + { 0x54C6, 361 }, + { 0x5500, 7945 }, + { 0x5501, 8254 }, + { 0x5502, 8290 }, + { 0x5503, 8482 }, + { 0x5504, 8653 }, + { 0x5505, 8419 }, + { 0x5506, 8527 }, + { 0x5507, 8206 }, + { 0x5508, 8578 }, + { 0x5509, 8569 }, + { 0x550A, 8671 }, + { 0x550B, 8554 }, + { 0x550C, 8257 }, + { 0x550D, 8473 }, + { 0x550E, 8452 }, + { 0x550F, 8647 }, + { 0x5510, 8533 }, + { 0x5511, 8665 }, + { 0x5512, 8338 }, + { 0x5513, 8425 }, + { 0x5514, 8233 }, + { 0x5515, 8599 }, + { 0x5516, 8431 }, + { 0x5517, 8641 }, + { 0x5518, 8506 }, + { 0x5519, 8659 }, + { 0x551A, 8227 }, + { 0x551B, 8308 }, + { 0x551C, 8629 }, + { 0x551D, 8500 }, + { 0x551E, 8317 }, + { 0x551F, 8697 }, + { 0x5520, 8278 }, + { 0x5521, 8359 }, + { 0x5522, 8380 }, + { 0x5523, 8635 }, + { 0x5524, 7888 }, + { 0x5525, 7996 }, + { 0x5526, 7987 }, + { 0x5527, 8296 }, + { 0x5528, 8167 }, + { 0x5529, 8488 }, + { 0x552A, 8089 }, + { 0x552B, 8215 }, + { 0x552C, 7906 }, + { 0x552D, 8350 }, + { 0x552E, 8329 }, + { 0x552F, 8590 }, + { 0x5530, 8269 }, + { 0x5531, 7957 }, + { 0x5532, 8152 }, + { 0x5533, 8134 }, + { 0x5534, 8461 }, + { 0x5535, 8242 }, + { 0x5536, 8542 }, + { 0x5537, 8035 }, + { 0x5538, 8104 }, + { 0x5539, 7936 }, + { 0x553A, 8371 }, + { 0x553B, 8119 }, + { 0x553C, 8440 }, + { 0x553D, 8197 }, + { 0x553E, 8515 }, + { 0x553F, 7921 }, + { 0x5540, 8005 }, + { 0x5541, 8389 }, + { 0x5542, 8182 }, + { 0x5543, 8020 }, + { 0x5544, 8617 }, + { 0x5545, 7972 }, + { 0x5546, 8050 }, + { 0x5547, 8068 }, + { 0x5548, 8407 }, + { 0x5549, 7882 }, + { 0x554A, 7897 }, + { 0x554B, 8605 }, + { 0x554C, 7981 }, + { 0x554D, 8287 }, + { 0x554E, 8161 }, + { 0x554F, 8479 }, + { 0x5550, 8083 }, + { 0x5551, 8209 }, + { 0x5552, 7900 }, + { 0x5553, 8344 }, + { 0x5554, 8323 }, + { 0x5555, 8566 }, + { 0x5556, 8584 }, + { 0x5557, 8263 }, + { 0x5558, 7951 }, + { 0x5559, 8146 }, + { 0x555A, 8128 }, + { 0x555B, 8455 }, + { 0x555C, 8236 }, + { 0x555D, 8536 }, + { 0x555E, 8029 }, + { 0x555F, 8098 }, + { 0x5560, 7930 }, + { 0x5561, 8365 }, + { 0x5562, 8113 }, + { 0x5563, 8434 }, + { 0x5564, 8191 }, + { 0x5565, 8509 }, + { 0x5566, 7915 }, + { 0x5567, 7999 }, + { 0x5568, 8383 }, + { 0x5569, 8176 }, + { 0x556A, 8014 }, + { 0x556B, 8314 }, + { 0x556C, 8611 }, + { 0x556D, 7966 }, + { 0x556E, 8044 }, + { 0x556F, 8059 }, + { 0x5570, 8401 }, + { 0x5571, 8080 }, + { 0x5572, 8416 }, + { 0x5573, 8302 }, + { 0x5574, 8494 }, + { 0x5575, 8656 }, + { 0x5576, 8422 }, + { 0x5577, 8530 }, + { 0x5578, 8224 }, + { 0x5579, 8581 }, + { 0x557A, 8575 }, + { 0x557B, 8674 }, + { 0x557C, 8563 }, + { 0x557D, 8260 }, + { 0x557E, 8476 }, + { 0x557F, 8470 }, + { 0x5580, 8650 }, + { 0x5581, 8551 }, + { 0x5582, 8668 }, + { 0x5583, 8341 }, + { 0x5584, 8428 }, + { 0x5585, 8251 }, + { 0x5586, 8602 }, + { 0x5587, 8449 }, + { 0x5588, 8644 }, + { 0x5589, 8524 }, + { 0x558A, 8662 }, + { 0x558B, 8230 }, + { 0x558C, 8311 }, + { 0x558D, 8632 }, + { 0x558E, 8503 }, + { 0x558F, 8320 }, + { 0x5590, 8703 }, + { 0x5591, 8284 }, + { 0x5592, 8362 }, + { 0x5593, 8398 }, + { 0x5594, 8638 }, + { 0x5595, 7894 }, + { 0x5596, 8143 }, + { 0x5597, 7993 }, + { 0x5598, 8305 }, + { 0x5599, 8173 }, + { 0x559A, 8497 }, + { 0x559B, 8095 }, + { 0x559C, 8221 }, + { 0x559D, 7912 }, + { 0x559E, 8356 }, + { 0x559F, 8335 }, + { 0x55A0, 8596 }, + { 0x55A1, 8275 }, + { 0x55A2, 7963 }, + { 0x55A3, 8158 }, + { 0x55A4, 8140 }, + { 0x55A5, 8467 }, + { 0x55A6, 8248 }, + { 0x55A7, 8548 }, + { 0x55A8, 8041 }, + { 0x55A9, 8110 }, + { 0x55AA, 7942 }, + { 0x55AB, 8377 }, + { 0x55AC, 8125 }, + { 0x55AD, 8446 }, + { 0x55AE, 8203 }, + { 0x55AF, 8521 }, + { 0x55B0, 7927 }, + { 0x55B1, 8011 }, + { 0x55B2, 8395 }, + { 0x55B3, 8188 }, + { 0x55B4, 8026 }, + { 0x55B5, 8623 }, + { 0x55B6, 7978 }, + { 0x55B7, 8056 }, + { 0x55B8, 8074 }, + { 0x55B9, 8413 }, + { 0x55BA, 7891 }, + { 0x55BB, 8077 }, + { 0x55BC, 8626 }, + { 0x55BD, 7990 }, + { 0x55BE, 8299 }, + { 0x55BF, 8170 }, + { 0x55C0, 8491 }, + { 0x55C1, 8092 }, + { 0x55C2, 8218 }, + { 0x55C3, 7909 }, + { 0x55C4, 8353 }, + { 0x55C5, 8332 }, + { 0x55C6, 8593 }, + { 0x55C7, 8272 }, + { 0x55C8, 8560 }, + { 0x55C9, 7960 }, + { 0x55CA, 8155 }, + { 0x55CB, 8137 }, + { 0x55CC, 8464 }, + { 0x55CD, 8245 }, + { 0x55CE, 8545 }, + { 0x55CF, 8038 }, + { 0x55D0, 8107 }, + { 0x55D1, 7939 }, + { 0x55D2, 8374 }, + { 0x55D3, 8122 }, + { 0x55D4, 8443 }, + { 0x55D5, 8200 }, + { 0x55D6, 8518 }, + { 0x55D7, 7924 }, + { 0x55D8, 8008 }, + { 0x55D9, 8392 }, + { 0x55DA, 8185 }, + { 0x55DB, 8023 }, + { 0x55DC, 8620 }, + { 0x55DD, 7975 }, + { 0x55DE, 8053 }, + { 0x55DF, 8071 }, + { 0x55E0, 8410 }, + { 0x55E1, 7885 }, + { 0x55E2, 7948 }, + { 0x55E3, 8608 }, + { 0x55E4, 7984 }, + { 0x55E5, 8293 }, + { 0x55E6, 8164 }, + { 0x55E7, 8485 }, + { 0x55E8, 8086 }, + { 0x55E9, 8212 }, + { 0x55EA, 7903 }, + { 0x55EB, 8347 }, + { 0x55EC, 8326 }, + { 0x55ED, 8572 }, + { 0x55EE, 8587 }, + { 0x55EF, 8266 }, + { 0x55F0, 8557 }, + { 0x55F1, 7954 }, + { 0x55F2, 8149 }, + { 0x55F3, 8131 }, + { 0x55F4, 8458 }, + { 0x55F5, 8239 }, + { 0x55F6, 8539 }, + { 0x55F7, 8032 }, + { 0x55F8, 8101 }, + { 0x55F9, 7933 }, + { 0x55FA, 8368 }, + { 0x55FB, 8116 }, + { 0x55FC, 8437 }, + { 0x55FD, 8194 }, + { 0x55FE, 8512 }, + { 0x55FF, 7918 }, + { 0x5600, 8002 }, + { 0x5601, 8386 }, + { 0x5602, 8179 }, + { 0x5603, 8017 }, + { 0x5604, 8614 }, + { 0x5605, 8700 }, + { 0x5606, 7969 }, + { 0x5607, 8281 }, + { 0x5608, 8047 }, + { 0x5609, 8062 }, + { 0x560A, 8404 }, + { 0x560B, 8065 }, + { 0x560C, 8706 }, + { 0x560D, 7808 }, + { 0x560E, 7805 }, + { 0x560F, 7879 }, + { 0x5610, 8681 }, + { 0x5611, 8685 }, + { 0x5612, 8693 }, + { 0x5613, 7873 }, + { 0x5614, 7876 }, + { 0x5615, 7864 }, + { 0x5616, 7843 }, + { 0x5617, 7849 }, + { 0x5618, 7840 }, + { 0x5619, 7846 }, + { 0x561A, 7852 }, + { 0x561B, 7870 }, + { 0x561C, 7861 }, + { 0x561D, 7867 }, + { 0x561E, 7855 }, + { 0x561F, 7858 }, + { 0x5620, 7828 }, + { 0x5621, 7810 }, + { 0x5622, 7816 }, + { 0x5623, 7837 }, + { 0x5624, 7822 }, + { 0x5625, 7819 }, + { 0x5626, 7813 }, + { 0x5627, 7834 }, + { 0x5628, 7831 }, + { 0x5629, 7825 }, + { 0x562A, 8689 }, + { 0x562B, 8677 }, + { 0x5640, 50137 }, + { 0x5641, 49239 }, + { 0x5642, 50054 }, + { 0x5643, 49156 }, + { 0x5644, 50212 }, + { 0x5645, 49318 }, + { 0x5646, 49931 }, + { 0x5647, 49033 }, + { 0x5648, 50050 }, + { 0x5649, 49152 }, + { 0x564A, 50266 }, + { 0x564B, 49372 }, + { 0x564C, 50045 }, + { 0x564D, 49147 }, + { 0x564E, 50163 }, + { 0x564F, 49265 }, + { 0x5650, 50023 }, + { 0x5651, 49125 }, + { 0x5652, 50184 }, + { 0x5653, 49286 }, + { 0x5654, 50202 }, + { 0x5655, 49308 }, + { 0x5656, 50168 }, + { 0x5657, 49270 }, + { 0x5658, 50120 }, + { 0x5659, 49222 }, + { 0x565A, 50146 }, + { 0x565B, 49248 }, + { 0x565C, 50189 }, + { 0x565D, 49291 }, + { 0x565E, 49727 }, + { 0x565F, 48829 }, + { 0x5662, 49983 }, + { 0x5663, 49085 }, + { 0x5664, 49988 }, + { 0x5665, 49090 }, + { 0x5666, 49993 }, + { 0x5667, 49095 }, + { 0x5668, 50261 }, + { 0x5669, 49367 }, + { 0x566A, 50256 }, + { 0x566B, 49362 }, + { 0x566C, 50126 }, + { 0x566D, 49228 }, + { 0x566E, 49417 }, + { 0x566F, 58020 }, + { 0x5670, 58004 }, + { 0x5671, 58160 }, + { 0x5672, 58180 }, + { 0x5673, 55523 }, + { 0x567C, 58023 }, + { 0x567D, 58170 }, + { 0x567E, 49407 }, + { 0x567F, 50301 }, + { 0x5680, 49783 }, + { 0x5681, 48885 }, + { 0x5682, 49914 }, + { 0x5683, 49016 }, + { 0x5684, 50036 }, + { 0x5685, 49138 }, + { 0x5686, 49906 }, + { 0x5687, 49008 }, + { 0x5688, 49918 }, + { 0x5689, 49020 }, + { 0x568A, 49694 }, + { 0x568B, 48796 }, + { 0x568C, 49872 }, + { 0x568D, 48974 }, + { 0x568E, 50015 }, + { 0x568F, 49117 }, + { 0x5690, 50011 }, + { 0x5691, 49113 }, + { 0x5692, 50003 }, + { 0x5693, 49105 }, + { 0x5694, 49832 }, + { 0x5695, 48934 }, + { 0x5696, 49979 }, + { 0x5697, 49081 }, + { 0x5700, 54739 }, + { 0x5701, 54763 }, + { 0x5702, 54745 }, + { 0x5703, 54769 }, + { 0x5704, 54727 }, + { 0x5705, 54751 }, + { 0x5706, 54733 }, + { 0x5707, 54757 }, + { 0x5708, 54839 }, + { 0x5709, 54039 }, + { 0x570A, 53996 }, + { 0x570B, 53952 }, + { 0x570C, 54808 }, + { 0x570D, 54845 }, + { 0x570E, 54045 }, + { 0x570F, 54002 }, + { 0x5710, 53958 }, + { 0x5711, 54814 }, + { 0x5712, 54852 }, + { 0x5713, 54052 }, + { 0x5714, 54009 }, + { 0x5715, 53980 }, + { 0x5716, 54821 }, + { 0x5717, 53884 }, + { 0x5718, 53880 }, + { 0x5719, 53889 }, + { 0x571A, 54106 }, + { 0x571B, 54571 }, + { 0x571C, 54576 }, + { 0x571D, 54591 }, + { 0x571E, 54585 }, + { 0x571F, 53969 }, + { 0x5720, 54606 }, + { 0x5721, 54600 }, + { 0x5722, 20769 }, + { 0x5723, 17878 }, + { 0x5724, 20764 }, + { 0x5725, 17873 }, + { 0x5726, 20552 }, + { 0x5727, 17317 }, + { 0x5728, 20503 }, + { 0x5729, 17173 }, + { 0x572A, 20735 }, + { 0x572B, 17844 }, + { 0x572C, 20739 }, + { 0x572D, 17848 }, + { 0x572E, 20743 }, + { 0x572F, 17852 }, + { 0x5730, 17974 }, + { 0x5731, 18048 }, + { 0x5732, 20422 }, + { 0x5733, 17038 }, + { 0x5734, 20442 }, + { 0x5735, 17058 }, + { 0x5736, 20446 }, + { 0x5737, 17062 }, + { 0x5738, 20450 }, + { 0x5739, 17066 }, + { 0x573A, 20454 }, + { 0x573B, 17070 }, + { 0x573C, 20461 }, + { 0x573D, 17077 }, + { 0x573E, 20719 }, + { 0x573F, 17758 }, + { 0x5740, 19120 }, + { 0x5741, 15472 }, + { 0x5742, 19141 }, + { 0x5743, 15500 }, + { 0x5744, 19126 }, + { 0x5745, 15478 }, + { 0x5746, 20644 }, + { 0x5747, 17505 }, + { 0x5748, 19180 }, + { 0x5749, 15551 }, + { 0x574A, 19451 }, + { 0x574B, 15876 }, + { 0x574C, 19459 }, + { 0x574D, 15884 }, + { 0x574E, 20495 }, + { 0x574F, 17142 }, + { 0x5750, 19688 }, + { 0x5751, 16113 }, + { 0x5752, 19696 }, + { 0x5753, 16128 }, + { 0x5754, 19702 }, + { 0x5755, 16134 }, + { 0x5756, 19713 }, + { 0x5757, 16158 }, + { 0x5758, 19721 }, + { 0x5759, 16166 }, + { 0x575A, 19806 }, + { 0x575B, 16287 }, + { 0x575C, 20542 }, + { 0x575D, 17287 }, + { 0x575E, 20210 }, + { 0x575F, 16771 }, + { 0x5760, 20507 }, + { 0x5761, 17185 }, + { 0x5762, 20749 }, + { 0x5763, 17858 }, + { 0x5764, 20630 }, + { 0x5765, 17480 }, + { 0x5766, 20636 }, + { 0x5767, 17486 }, + { 0x5768, 20585 }, + { 0x5769, 17421 }, + { 0x576A, 20475 }, + { 0x576B, 17108 }, + { 0x576C, 20479 }, + { 0x576D, 17116 }, + { 0x576E, 20511 }, + { 0x576F, 17189 }, + { 0x5770, 53877 }, + { 0x5771, 17193 }, + { 0x5772, 17267 }, + { 0x5773, 17271 }, + { 0x5774, 17275 }, + { 0x5775, 17283 }, + { 0x5776, 18108 }, + { 0x5777, 17298 }, + { 0x5778, 17181 }, + { 0x5779, 20685 }, + { 0x577A, 17713 }, + { 0x577B, 20690 }, + { 0x577C, 17718 }, + { 0x577D, 20695 }, + { 0x577E, 20669 }, + { 0x577F, 17676 }, + { 0x5780, 20654 }, + { 0x5781, 17585 }, + { 0x5782, 20700 }, + { 0x5783, 17728 }, + { 0x5784, 20705 }, + { 0x5785, 17733 }, + { 0x5786, 20710 }, + { 0x5787, 17738 }, + { 0x5788, 53986 }, + { 0x5789, 54095 }, + { 0x578A, 54131 }, + { 0x578B, 20731 }, + { 0x578C, 17800 }, + { 0x57FB, 20847 }, + { 0x57FC, 20852 }, + { 0x57FD, 20842 }, + { 0x57FE, 20832 }, + { 0x57FF, 20837 }, + { 0x5800, 36572 }, + { 0x5801, 36580 }, + { 0x5802, 36543 }, + { 0x5803, 36588 }, + { 0x5804, 36576 }, + { 0x5805, 36584 }, + { 0x5806, 36535 }, + { 0x5807, 36616 }, + { 0x5808, 36672 }, + { 0x5809, 36604 }, + { 0x580A, 36664 }, + { 0x580B, 36539 }, + { 0x580C, 36596 }, + { 0x580D, 36652 }, + { 0x580E, 36612 }, + { 0x580F, 36668 }, + { 0x5810, 36688 }, + { 0x5811, 36696 }, + { 0x5812, 36656 }, + { 0x5813, 36692 }, + { 0x5814, 36644 }, + { 0x5815, 36684 }, + { 0x5816, 36600 }, + { 0x5817, 36660 }, + { 0x5818, 36628 }, + { 0x5819, 36632 }, + { 0x581A, 36676 }, + { 0x581B, 36592 }, + { 0x581C, 36648 }, + { 0x581D, 36624 }, + { 0x581E, 36636 }, + { 0x581F, 36620 }, + { 0x5820, 36680 }, + { 0x5821, 36640 }, + { 0x5822, 36608 }, + { 0x5823, 36547 }, + { 0x5824, 36557 }, + { 0x5825, 36562 }, + { 0x5826, 36552 }, + { 0x5827, 36567 }, + { 0x5828, 36700 }, + { 0x5829, 36704 }, + { 0x582A, 36708 }, + { 0x582B, 36712 }, + { 0x5840, 55006 }, + { 0x5841, 55057 }, + { 0x5842, 54997 }, + { 0x5843, 55060 }, + { 0x5844, 54985 }, + { 0x5845, 55045 }, + { 0x5846, 55003 }, + { 0x5847, 55066 }, + { 0x5848, 55030 }, + { 0x5849, 55075 }, + { 0x584A, 54988 }, + { 0x584B, 55015 }, + { 0x584C, 55018 }, + { 0x584D, 55069 }, + { 0x584E, 54982 }, + { 0x584F, 55012 }, + { 0x5850, 55078 }, + { 0x5851, 55087 }, + { 0x5852, 55051 }, + { 0x5853, 55033 }, + { 0x5854, 55084 }, + { 0x5855, 55042 }, + { 0x5856, 55093 }, + { 0x5857, 55039 }, + { 0x5858, 55024 }, + { 0x5859, 55009 }, + { 0x585A, 55072 }, + { 0x585B, 55027 }, + { 0x585C, 55000 }, + { 0x585D, 54967 }, + { 0x585E, 54973 }, + { 0x585F, 54979 }, + { 0x5860, 54970 }, + { 0x5861, 54976 }, + { 0x5862, 55021 }, + { 0x5863, 55036 }, + { 0x5864, 54994 }, + { 0x5865, 55054 }, + { 0x5866, 54991 }, + { 0x5867, 55124 }, + { 0x5868, 55128 }, + { 0x5869, 55081 }, + { 0x586A, 55090 }, + { 0x586B, 55048 }, + { 0x586C, 55063 }, + { 0x586D, 55101 }, + { 0x586E, 55109 }, + { 0x586F, 55097 }, + { 0x5870, 55105 }, + { 0x5871, 55120 }, + { 0x5872, 55132 }, + { 0x5873, 55113 }, + { 0x5874, 55116 }, + { 0x5875, 54963 }, + { 0x5876, 54956 }, + { 0x5877, 54959 }, + { 0x5880, 68329 }, + { 0x5881, 68326 }, + { 0x5882, 68431 }, + { 0x5883, 68446 }, + { 0x5884, 68437 }, + { 0x5885, 68473 }, + { 0x5886, 68443 }, + { 0x5887, 68506 }, + { 0x5888, 68573 }, + { 0x5889, 68581 }, + { 0x588A, 68569 }, + { 0x588B, 68577 }, + { 0x588C, 68434 }, + { 0x588D, 68464 }, + { 0x588E, 68449 }, + { 0x588F, 68440 }, + { 0x5890, 68491 }, + { 0x5891, 68452 }, + { 0x5892, 68479 }, + { 0x5893, 68533 }, + { 0x5894, 68467 }, + { 0x5895, 68527 }, + { 0x5896, 68539 }, + { 0x5897, 68458 }, + { 0x5898, 68518 }, + { 0x5899, 68476 }, + { 0x589A, 68530 }, + { 0x589B, 68545 }, + { 0x589C, 68560 }, + { 0x589D, 68566 }, + { 0x589E, 68521 }, + { 0x589F, 68563 }, + { 0x58A0, 68542 }, + { 0x58A1, 68503 }, + { 0x58A2, 68557 }, + { 0x58A3, 68461 }, + { 0x58A4, 68524 }, + { 0x58A5, 68488 }, + { 0x58A6, 68494 }, + { 0x58A7, 68548 }, + { 0x58A8, 68455 }, + { 0x58A9, 68515 }, + { 0x58AA, 68485 }, + { 0x58AB, 68512 }, + { 0x58AC, 68497 }, + { 0x58AD, 68482 }, + { 0x58AE, 68509 }, + { 0x58AF, 68551 }, + { 0x58B0, 68554 }, + { 0x58B1, 68500 }, + { 0x58B2, 68470 }, + { 0x58B3, 68536 }, + { 0x58B4, 68585 }, + { 0x58B5, 68380 }, + { 0x58B6, 68368 }, + { 0x58B7, 68396 }, + { 0x58B8, 68376 }, + { 0x58B9, 68404 }, + { 0x58BA, 68413 }, + { 0x58BB, 68423 }, + { 0x58BC, 68408 }, + { 0x58BD, 68418 }, + { 0x58BE, 68364 }, + { 0x58BF, 68392 }, + { 0x58C0, 68384 }, + { 0x58C1, 68372 }, + { 0x58C2, 68400 }, + { 0x58C3, 68388 }, + { 0x58C4, 68323 }, + { 0x58CE, 68332 }, + { 0x58CF, 68428 }, + { 0x58D0, 68352 }, + { 0x58D1, 68334 }, + { 0x58D2, 68340 }, + { 0x58D3, 68361 }, + { 0x58D4, 68346 }, + { 0x58D5, 68343 }, + { 0x58D6, 68337 }, + { 0x58D7, 68358 }, + { 0x58D8, 68355 }, + { 0x58D9, 68349 }, + { 0x5900, 13773 }, + { 0x5901, 13749 }, + { 0x5902, 13757 }, + { 0x5903, 13785 }, + { 0x5904, 13765 }, + { 0x5905, 13761 }, + { 0x5906, 13753 }, + { 0x5907, 13781 }, + { 0x5908, 13777 }, + { 0x5909, 13769 }, + { 0x590A, 13837 }, + { 0x590B, 13897 }, + { 0x590C, 13829 }, + { 0x590D, 13901 }, + { 0x590E, 13869 }, + { 0x590F, 13913 }, + { 0x5910, 13889 }, + { 0x5911, 13905 }, + { 0x5912, 13873 }, + { 0x5913, 13893 }, + { 0x5914, 13849 }, + { 0x5915, 13861 }, + { 0x5916, 13909 }, + { 0x5917, 13845 }, + { 0x5918, 13825 }, + { 0x5919, 13817 }, + { 0x591A, 13865 }, + { 0x591B, 13885 }, + { 0x591C, 13841 }, + { 0x591D, 13881 }, + { 0x591E, 13917 }, + { 0x591F, 13833 }, + { 0x5920, 13877 }, + { 0x5921, 13821 }, + { 0x5922, 13809 }, + { 0x5923, 13853 }, + { 0x5924, 13813 }, + { 0x5925, 13857 }, + { 0x5926, 13805 }, + { 0x5927, 13789 }, + { 0x5928, 13797 }, + { 0x5929, 13801 }, + { 0x592A, 13793 }, + { 0x592B, 13745 }, + { 0x592C, 13736 }, + { 0x592D, 13740 }, + { 0x592E, 13728 }, + { 0x592F, 13732 }, + { 0x5930, 35728 }, + { 0x5931, 35719 }, + { 0x5932, 35764 }, + { 0x5933, 35749 }, + { 0x5934, 35716 }, + { 0x5935, 35737 }, + { 0x5936, 35740 }, + { 0x5937, 35710 }, + { 0x5938, 35734 }, + { 0x5939, 35713 }, + { 0x593A, 35725 }, + { 0x593B, 35767 }, + { 0x593C, 35746 }, + { 0x593D, 35743 }, + { 0x593E, 35731 }, + { 0x593F, 35755 }, + { 0x5940, 35752 }, + { 0x5941, 35722 }, + { 0x5942, 35758 }, + { 0x5943, 35770 }, + { 0x5944, 35761 }, + { 0x5945, 35773 }, + { 0x5946, 35707 }, + { 0x5947, 35679 }, + { 0x5948, 35687 }, + { 0x5949, 35675 }, + { 0x594A, 35691 }, + { 0x594B, 35683 }, + { 0x594C, 35695 }, + { 0x594D, 35703 }, + { 0x594E, 35699 }, + { 0x594F, 35793 }, + { 0x5950, 35785 }, + { 0x5951, 35789 }, + { 0x5952, 35781 }, + { 0x5953, 35776 }, + { 0x595F, 35778 }, + { 0x5A00, 8801 }, + { 0x5A01, 8807 }, + { 0x5A02, 8813 }, + { 0x5A03, 8804 }, + { 0x5A04, 8816 }, + { 0x5A05, 8810 }, + { 0x5A06, 8834 }, + { 0x5A07, 8885 }, + { 0x5A08, 8825 }, + { 0x5A09, 8879 }, + { 0x5A0A, 8915 }, + { 0x5A0B, 8891 }, + { 0x5A0C, 8870 }, + { 0x5A0D, 8912 }, + { 0x5A0E, 8831 }, + { 0x5A0F, 8882 }, + { 0x5A10, 8921 }, + { 0x5A11, 8894 }, + { 0x5A12, 8918 }, + { 0x5A13, 8855 }, + { 0x5A14, 8909 }, + { 0x5A15, 8822 }, + { 0x5A16, 8876 }, + { 0x5A17, 8897 }, + { 0x5A18, 8843 }, + { 0x5A19, 8873 }, + { 0x5A1A, 8846 }, + { 0x5A1B, 8903 }, + { 0x5A1C, 8900 }, + { 0x5A1D, 8819 }, + { 0x5A1E, 8867 }, + { 0x5A1F, 8888 }, + { 0x5A20, 8840 }, + { 0x5A21, 8864 }, + { 0x5A22, 8861 }, + { 0x5A23, 8849 }, + { 0x5A24, 8837 }, + { 0x5A25, 8858 }, + { 0x5A26, 8906 }, + { 0x5A27, 8852 }, + { 0x5A28, 8828 }, + { 0x5A29, 8773 }, + { 0x5A2A, 8761 }, + { 0x5A2B, 8789 }, + { 0x5A2C, 8785 }, + { 0x5A2D, 8769 }, + { 0x5A2E, 8793 }, + { 0x5A2F, 8765 }, + { 0x5A30, 8777 }, + { 0x5A31, 8781 }, + { 0x5A32, 8797 }, + { 0x5A33, 8980 }, + { 0x5A34, 8972 }, + { 0x5A35, 8968 }, + { 0x5A36, 8976 }, + { 0x5A40, 8928 }, + { 0x5A41, 8924 }, + { 0x5A42, 8960 }, + { 0x5A43, 8994 }, + { 0x5A44, 8956 }, + { 0x5A45, 8948 }, + { 0x5A46, 8936 }, + { 0x5A47, 8940 }, + { 0x5A48, 8952 }, + { 0x5A49, 8944 }, + { 0x5A4A, 8932 }, + { 0x5A4B, 8964 }, + { 0x5A4C, 8989 }, + { 0x5A4D, 8984 }, + { 0x5A50, 8749 }, + { 0x5A51, 8731 }, + { 0x5A52, 8737 }, + { 0x5A53, 8758 }, + { 0x5A54, 8743 }, + { 0x5A55, 8740 }, + { 0x5A56, 8734 }, + { 0x5A57, 8755 }, + { 0x5A58, 8752 }, + { 0x5A59, 8746 }, + { 0x5A5C, 9006 }, + { 0x5A5D, 8999 }, + { 0x5A5E, 9002 }, + { 0x5A5F, 9009 }, + { 0x6B00, 17897 }, + { 0x6B01, 17901 }, + { 0x6B02, 17905 }, + { 0x6B03, 17921 }, + { 0x6B04, 17925 }, + { 0x6B05, 17929 }, + { 0x6B06, 17917 }, + { 0x6B13, 44892 }, + { 0x6B14, 44882 }, + { 0x6B15, 44887 }, + { 0x6B16, 44902 }, + { 0x6B17, 44897 }, + { 0x6B1D, 33182 }, + { 0x6B1E, 32972 }, + { 0x6B1F, 33388 }, + { 0x6B20, 33370 }, + { 0x6B21, 33269 }, + { 0x6B22, 33277 }, + { 0x6B23, 33257 }, + { 0x6B24, 33261 }, + { 0x6B25, 33286 }, + { 0x6B26, 33281 }, + { 0x6B27, 33273 }, + { 0x6B28, 33265 }, + { 0x6B29, 33374 }, + { 0x6B2A, 33230 }, + { 0x6B2B, 33224 }, + { 0x6B2C, 33249 }, + { 0x6B2D, 33241 }, + { 0x6B2E, 33200 }, + { 0x6B2F, 33205 }, + { 0x6B30, 33195 }, + { 0x6B31, 33105 }, + { 0x6B32, 33333 }, + { 0x6B33, 33293 }, + { 0x6B34, 33079 }, + { 0x6B35, 33174 }, + { 0x6B36, 33357 }, + { 0x6B38, 33161 }, + { 0x6B39, 33187 }, + { 0x6B3A, 33312 }, + { 0x6B3B, 33121 }, + { 0x6B3C, 33341 }, + { 0x6B3E, 33129 }, + { 0x6B40, 33137 }, + { 0x6B41, 33365 }, + { 0x6B43, 33302 }, + { 0x6B44, 33092 }, + { 0x6B46, 33349 }, + { 0x6B47, 33145 }, + { 0x6B48, 33216 }, + { 0x6B49, 33236 }, + { 0x6B4A, 33153 }, + { 0x6B4B, 33169 }, + { 0x6B4C, 33100 }, + { 0x6B4D, 33116 }, + { 0x6B4E, 33087 }, + { 0x6B4F, 33379 }, + { 0x6B50, 25426 }, + { 0x6B51, 25420 }, + { 0x6B52, 25471 }, + { 0x6B53, 25456 }, + { 0x6B54, 25466 }, + { 0x6B55, 25461 }, + { 0x6B56, 24792 }, + { 0x6B57, 24777 }, + { 0x6B58, 24787 }, + { 0x6B59, 24782 }, + { 0x6B5A, 25928 }, + { 0x6B5B, 25913 }, + { 0x6B5C, 25923 }, + { 0x6B5D, 25918 }, + { 0x6B5E, 26308 }, + { 0x6B5F, 26293 }, + { 0x6B60, 26303 }, + { 0x6B61, 26298 }, + { 0x6B62, 26272 }, + { 0x6B63, 26257 }, + { 0x6B64, 26267 }, + { 0x6B65, 26262 }, + { 0x6B66, 25892 }, + { 0x6B67, 25877 }, + { 0x6B68, 25887 }, + { 0x6B69, 25882 }, + { 0x6B6A, 25071 }, + { 0x6B6B, 25056 }, + { 0x6B6C, 25066 }, + { 0x6B6D, 25061 }, + { 0x6B6E, 26164 }, + { 0x6B6F, 26149 }, + { 0x6B70, 26159 }, + { 0x6B71, 26154 }, + { 0x6B72, 25507 }, + { 0x6B73, 25492 }, + { 0x6B74, 25502 }, + { 0x6B75, 25497 }, + { 0x6B76, 25729 }, + { 0x6B77, 25714 }, + { 0x6B78, 25724 }, + { 0x6B79, 25719 }, + { 0x6B7A, 26249 }, + { 0x6B7B, 26234 }, + { 0x6B7C, 26244 }, + { 0x6B7D, 26239 }, + { 0x6B7E, 26393 }, + { 0x6B7F, 26378 }, + { 0x6B80, 26388 }, + { 0x6B81, 26383 }, + { 0x6B82, 26285 }, + { 0x6B83, 26280 }, + { 0x6B84, 25941 }, + { 0x6B85, 25936 }, + { 0x6B86, 24341 }, + { 0x6B87, 24336 }, + { 0x6B88, 25484 }, + { 0x6B89, 25479 }, + { 0x6B8A, 24667 }, + { 0x6B8B, 24662 }, + { 0x6B8C, 25742 }, + { 0x6B8D, 25737 }, + { 0x6B8E, 26118 }, + { 0x6B8F, 26103 }, + { 0x6B90, 26113 }, + { 0x6B91, 26108 }, + { 0x6B92, 24442 }, + { 0x6B93, 24427 }, + { 0x6B94, 24437 }, + { 0x6B95, 24432 }, + { 0x6B96, 25530 }, + { 0x6B97, 25515 }, + { 0x6B98, 25525 }, + { 0x6B99, 25520 }, + { 0x6B9A, 26141 }, + { 0x6B9B, 26126 }, + { 0x6B9C, 26136 }, + { 0x6B9D, 26131 }, + { 0x6B9E, 25690 }, + { 0x6B9F, 25684 }, + { 0x6BA0, 26187 }, + { 0x6BA1, 26172 }, + { 0x6BA2, 26182 }, + { 0x6BA3, 26177 }, + { 0x6BA4, 24597 }, + { 0x6BA5, 24589 }, + { 0x6BA6, 24577 }, + { 0x6BA7, 24559 }, + { 0x6BA8, 24571 }, + { 0x6BA9, 24565 }, + { 0x6BAA, 24653 }, + { 0x6BAB, 24635 }, + { 0x6BAC, 24647 }, + { 0x6BAD, 24641 }, + { 0x6BAE, 25266 }, + { 0x6BAF, 25260 }, + { 0x6BB0, 25231 }, + { 0x6BB1, 25222 }, + { 0x6BD3, 24046 }, + { 0x6BD4, 24031 }, + { 0x6BD5, 24041 }, + { 0x6BD6, 24036 }, + { 0x6BD7, 24020 }, + { 0x6BD8, 24015 }, + { 0x6BD9, 24059 }, + { 0x6BDA, 24054 }, + { 0x6BDB, 24085 }, + { 0x6BDC, 24080 }, + { 0x6BDD, 24007 }, + { 0x6BDE, 24072 }, + { 0x6BDF, 24067 }, + { 0x6BE0, 26353 }, + { 0x6BE1, 26347 }, + { 0x6BE2, 26369 }, + { 0x6BE3, 26363 }, + { 0x6BE4, 23993 }, + { 0x6BE5, 23978 }, + { 0x6BE6, 23988 }, + { 0x6BE7, 23983 }, + { 0x6BE8, 26322 }, + { 0x6BE9, 26313 }, + { 0x6BEA, 28622 }, + { 0x6BEB, 28590 }, + { 0x6BEC, 28450 }, + { 0x6BED, 28440 }, + { 0x6BEE, 28560 }, + { 0x6BEF, 28550 }, + { 0x6BF0, 28430 }, + { 0x6BF1, 28420 }, + { 0x6BF2, 28470 }, + { 0x6BF3, 28460 }, + { 0x6BF4, 28490 }, + { 0x6BF5, 28480 }, + { 0x6BF6, 28410 }, + { 0x6BF7, 28390 }, + { 0x6BF8, 28400 }, + { 0x6BF9, 30178 }, + { 0x6BFA, 30152 }, + { 0x6BFB, 30165 }, + { 0x6BFC, 26021 }, + { 0x6BFD, 26003 }, + { 0x6BFE, 26015 }, + { 0x6BFF, 26009 }, + { 0x6C00, 28642 }, + { 0x6C01, 28510 }, + { 0x6C02, 28692 }, + { 0x6C03, 28611 }, + { 0x6C04, 28580 }, + { 0x6C05, 26665 }, + { 0x6C06, 26600 }, + { 0x6C07, 26688 }, + { 0x6C08, 26716 }, + { 0x6C09, 26650 }, + { 0x6C0A, 26635 }, + { 0x6C0B, 28073 }, + { 0x6C0C, 27980 }, + { 0x6C0D, 28115 }, + { 0x6C0E, 28189 }, + { 0x6C0F, 28030 }, + { 0x6C10, 28015 }, + { 0x6C11, 29671 }, + { 0x6C12, 29699 }, + { 0x6C13, 29663 }, + { 0x6C14, 29648 }, + { 0x6C15, 28801 }, + { 0x6C16, 28882 }, + { 0x6C17, 27033 }, + { 0x6C18, 27066 }, + { 0x6C19, 28933 }, + { 0x6C1A, 28889 }, + { 0x6C1B, 28947 }, + { 0x6C1C, 29506 }, + { 0x6C1D, 29408 }, + { 0x6C1E, 29546 }, + { 0x6C1F, 29612 }, + { 0x6C20, 27755 }, + { 0x6C21, 27838 }, + { 0x6C22, 26821 }, + { 0x6C23, 26763 }, + { 0x6C24, 26853 }, + { 0x6C25, 26867 }, + { 0x6C26, 27852 }, + { 0x6C27, 27939 }, + { 0x6C28, 28736 }, + { 0x6C29, 26526 }, + { 0x6C2A, 26577 }, + { 0x6C2B, 29767 }, + { 0x6C2C, 29809 }, + { 0x6C2D, 26925 }, + { 0x6C2E, 26881 }, + { 0x6C2F, 26957 }, + { 0x6C30, 26980 }, + { 0x6C31, 26910 }, + { 0x6C32, 26895 }, + { 0x6C33, 27626 }, + { 0x6C34, 27706 }, + { 0x6C35, 27655 }, + { 0x6C36, 27640 }, + { 0x6C37, 27221 }, + { 0x6C38, 27235 }, + { 0x6C39, 27149 }, + { 0x6C3A, 27249 }, + { 0x6C3B, 27177 }, + { 0x6C3C, 27304 }, + { 0x6C3D, 27213 }, + { 0x6C3E, 27191 }, + { 0x6C3F, 27525 }, + { 0x6C40, 27355 }, + { 0x6C41, 27557 }, + { 0x6C42, 27612 }, + { 0x6C43, 27458 }, + { 0x6C44, 27376 }, + { 0x6C45, 29060 }, + { 0x6C46, 28988 }, + { 0x6C47, 29101 }, + { 0x6C48, 29131 }, + { 0x6C49, 29009 }, + { 0x6C4A, 28995 }, + { 0x6C4B, 29293 }, + { 0x6C4C, 29173 }, + { 0x6C4D, 29307 }, + { 0x6C4E, 29354 }, + { 0x6C4F, 29223 }, + { 0x6C50, 29208 }, + { 0x6C51, 27095 }, + { 0x6C52, 27127 }, + { 0x6C53, 27080 }, + { 0x6C54, 27073 }, + { 0x6C55, 28300 }, + { 0x6C56, 28226 }, + { 0x6C57, 28314 }, + { 0x6C58, 28369 }, + { 0x6C59, 28276 }, + { 0x6C5A, 28261 }, + { 0x6C5B, 29619 }, + { 0x6C5C, 27713 }, + { 0x6C5D, 28766 }, + { 0x6C5E, 30130 }, + { 0x6C5F, 30137 }, + { 0x6C60, 30109 }, + { 0x6C61, 30095 }, + { 0x6C62, 30123 }, + { 0x6C63, 30144 }, + { 0x6C64, 28540 }, + { 0x6C65, 28712 }, + { 0x6C66, 28662 }, + { 0x6C67, 28702 }, + { 0x6C68, 28600 }, + { 0x6C69, 28570 }, + { 0x6C6A, 26621 }, + { 0x6C6B, 26730 }, + { 0x6C6C, 26695 }, + { 0x6C6D, 26723 }, + { 0x6C6E, 26642 }, + { 0x6C6F, 26628 }, + { 0x6C70, 28001 }, + { 0x6C71, 28203 }, + { 0x6C72, 28168 }, + { 0x6C73, 28196 }, + { 0x6C74, 28022 }, + { 0x6C75, 28008 }, + { 0x6C76, 29634 }, + { 0x6C77, 29713 }, + { 0x6C78, 29678 }, + { 0x6C79, 29706 }, + { 0x6C7A, 29655 }, + { 0x6C7B, 29641 }, + { 0x6C7C, 26902 }, + { 0x6C7D, 26888 }, + { 0x6C7E, 27647 }, + { 0x6C7F, 27633 }, + { 0x6C80, 27198 }, + { 0x6C81, 27156 }, + { 0x6C82, 27283 }, + { 0x6C83, 27205 }, + { 0x6C84, 27184 }, + { 0x6C85, 27591 }, + { 0x6C86, 27450 }, + { 0x6C87, 27369 }, + { 0x6C88, 29002 }, + { 0x6C89, 29117 }, + { 0x6C8A, 29194 }, + { 0x6C8B, 29368 }, + { 0x6C8C, 29333 }, + { 0x6C8D, 29361 }, + { 0x6C8E, 29215 }, + { 0x6C8F, 29201 }, + { 0x6C90, 28757 }, + { 0x6C91, 28247 }, + { 0x6C92, 28383 }, + { 0x6C93, 28348 }, + { 0x6C94, 28376 }, + { 0x6C95, 28268 }, + { 0x6C96, 28254 }, + { 0x6C97, 28632 }, + { 0x6C98, 28500 }, + { 0x6C99, 28652 }, + { 0x6C9A, 28682 }, + { 0x6C9B, 28530 }, + { 0x6C9C, 26658 }, + { 0x6C9D, 26593 }, + { 0x6C9E, 26681 }, + { 0x6C9F, 26709 }, + { 0x6CA0, 26614 }, + { 0x6CA1, 28066 }, + { 0x6CA2, 27973 }, + { 0x6CA3, 28108 }, + { 0x6CA4, 28182 }, + { 0x6CA5, 27994 }, + { 0x6CA6, 29692 }, + { 0x6CA7, 28794 }, + { 0x6CA8, 28875 }, + { 0x6CA9, 27026 }, + { 0x6CAA, 27059 }, + { 0x6CAB, 28926 }, + { 0x6CAC, 28940 }, + { 0x6CAD, 29499 }, + { 0x6CAE, 29401 }, + { 0x6CAF, 29539 }, + { 0x6CB0, 29605 }, + { 0x6CB1, 27748 }, + { 0x6CB2, 27806 }, + { 0x6CB3, 27831 }, + { 0x6CB4, 26814 }, + { 0x6CB5, 26756 }, + { 0x6CB6, 26846 }, + { 0x6CB7, 26860 }, + { 0x6CB8, 27845 }, + { 0x6CB9, 28729 }, + { 0x6CBA, 26519 }, + { 0x6CBB, 26570 }, + { 0x6CBC, 29760 }, + { 0x6CBD, 29802 }, + { 0x6CBE, 26918 }, + { 0x6CBF, 26874 }, + { 0x6CC0, 26950 }, + { 0x6CC1, 26973 }, + { 0x6CC2, 27619 }, + { 0x6CC3, 27699 }, + { 0x6CC4, 27228 }, + { 0x6CC5, 27142 }, + { 0x6CC6, 27242 }, + { 0x6CC7, 27170 }, + { 0x6CC8, 27297 }, + { 0x6CC9, 27518 }, + { 0x6CCA, 27348 }, + { 0x6CCB, 27550 }, + { 0x6CCC, 27605 }, + { 0x6CCD, 27362 }, + { 0x6CCE, 29053 }, + { 0x6CCF, 28981 }, + { 0x6CD0, 29094 }, + { 0x6CD1, 29124 }, + { 0x6CD2, 29286 }, + { 0x6CD3, 29166 }, + { 0x6CD4, 29300 }, + { 0x6CD5, 29347 }, + { 0x6CD6, 29187 }, + { 0x6CD7, 27088 }, + { 0x6CD8, 27120 }, + { 0x6CD9, 27134 }, + { 0x6CDA, 28293 }, + { 0x6CDB, 28219 }, + { 0x6CDC, 28307 }, + { 0x6CDD, 28362 }, + { 0x6CDE, 28240 }, + { 0x6CDF, 28672 }, + { 0x6CE0, 28520 }, + { 0x6CE1, 26702 }, + { 0x6CE2, 26607 }, + { 0x6CE3, 28175 }, + { 0x6CE4, 27987 }, + { 0x6CE5, 29685 }, + { 0x6CE6, 29627 }, + { 0x6CE7, 29598 }, + { 0x6CE8, 29415 }, + { 0x6CE9, 30057 }, + { 0x6CEA, 29891 }, + { 0x6CEB, 27163 }, + { 0x6CEC, 27290 }, + { 0x6CED, 27598 }, + { 0x6CEE, 29340 }, + { 0x6CEF, 29180 }, + { 0x6CF0, 28355 }, + { 0x6CF1, 28233 }, + { 0x6CF2, 30102 }, + { 0x6CF3, 30088 }, + { 0x6CF4, 30116 }, + { 0x6CF5, 27881 }, + { 0x6CF6, 27866 }, + { 0x6CF7, 26493 }, + { 0x6CF8, 26478 }, + { 0x6CF9, 29752 }, + { 0x6CFA, 29737 }, + { 0x6CFB, 29465 }, + { 0x6CFC, 29450 }, + { 0x6CFD, 29941 }, + { 0x6CFE, 29926 }, + { 0x6CFF, 27009 }, + { 0x6D00, 26994 }, + { 0x6D01, 28830 }, + { 0x6D02, 28815 }, + { 0x6D03, 28918 }, + { 0x6D04, 28903 }, + { 0x6D05, 27798 }, + { 0x6D06, 27783 }, + { 0x6D07, 26806 }, + { 0x6D08, 26791 }, + { 0x6D09, 29979 }, + { 0x6D0A, 29884 }, + { 0x6D0B, 30007 }, + { 0x6D0C, 30071 }, + { 0x6D0D, 29912 }, + { 0x6D0E, 29436 }, + { 0x6D0F, 27769 }, + { 0x6D10, 26777 }, + { 0x6D11, 27873 }, + { 0x6D12, 27859 }, + { 0x6D13, 26485 }, + { 0x6D14, 26471 }, + { 0x6D15, 29744 }, + { 0x6D16, 29730 }, + { 0x6D17, 29457 }, + { 0x6D18, 29443 }, + { 0x6D19, 29933 }, + { 0x6D1A, 29919 }, + { 0x6D1B, 27001 }, + { 0x6D1C, 26987 }, + { 0x6D1D, 28822 }, + { 0x6D1E, 28808 }, + { 0x6D1F, 28910 }, + { 0x6D20, 28896 }, + { 0x6D21, 27790 }, + { 0x6D22, 27776 }, + { 0x6D23, 26798 }, + { 0x6D24, 26784 }, + { 0x6D25, 29958 }, + { 0x6D26, 29863 }, + { 0x6D27, 29986 }, + { 0x6D28, 30050 }, + { 0x6D29, 29905 }, + { 0x6D2A, 29429 }, + { 0x6D2B, 27762 }, + { 0x6D2C, 26770 }, + { 0x6D2D, 29972 }, + { 0x6D2E, 29877 }, + { 0x6D2F, 30000 }, + { 0x6D30, 30064 }, + { 0x6D31, 29422 }, + { 0x6D32, 29898 }, + { 0x6D33, 27932 }, + { 0x6D34, 29492 }, + { 0x6D35, 29394 }, + { 0x6D36, 29532 }, + { 0x6D37, 29965 }, + { 0x6D38, 29870 }, + { 0x6D39, 29993 }, + { 0x6D3A, 27925 }, + { 0x6D3B, 28722 }, + { 0x6D3C, 28743 }, + { 0x6D3D, 28750 }, + { 0x6D3E, 35643 }, + { 0x6D3F, 35646 }, + { 0x6D50, 28057 }, + { 0x6D51, 27946 }, + { 0x6D52, 27955 }, + { 0x6D53, 27964 }, + { 0x6D54, 28099 }, + { 0x6D55, 28150 }, + { 0x6D56, 28122 }, + { 0x6D57, 28159 }, + { 0x6D58, 28838 }, + { 0x6D59, 28847 }, + { 0x6D5A, 27040 }, + { 0x6D5B, 27049 }, + { 0x6D5C, 29385 }, + { 0x6D5D, 29473 }, + { 0x6D5E, 29482 }, + { 0x6D5F, 29553 }, + { 0x6D60, 29562 }, + { 0x6D61, 29571 }, + { 0x6D62, 29580 }, + { 0x6D63, 29589 }, + { 0x6D64, 27721 }, + { 0x6D65, 27730 }, + { 0x6D66, 27813 }, + { 0x6D67, 29845 }, + { 0x6D68, 29854 }, + { 0x6D69, 29949 }, + { 0x6D6A, 30014 }, + { 0x6D6B, 30023 }, + { 0x6D6C, 30032 }, + { 0x6D6D, 30041 }, + { 0x6D6E, 26746 }, + { 0x6D6F, 26828 }, + { 0x6D70, 26837 }, + { 0x6D71, 27889 }, + { 0x6D72, 27898 }, + { 0x6D73, 27916 }, + { 0x6D74, 27907 }, + { 0x6D75, 26501 }, + { 0x6D76, 26552 }, + { 0x6D77, 26561 }, + { 0x6D78, 26542 }, + { 0x6D79, 29793 }, + { 0x6D7A, 29774 }, + { 0x6D7B, 29783 }, + { 0x6D7C, 26932 }, + { 0x6D7D, 26941 }, + { 0x6D7E, 27663 }, + { 0x6D7F, 27690 }, + { 0x6D80, 27330 }, + { 0x6D81, 27311 }, + { 0x6D82, 27320 }, + { 0x6D83, 27491 }, + { 0x6D84, 27482 }, + { 0x6D85, 27532 }, + { 0x6D86, 27541 }, + { 0x6D87, 27564 }, + { 0x6D88, 27573 }, + { 0x6D89, 28963 }, + { 0x6D8A, 28972 }, + { 0x6D8B, 28954 }, + { 0x6D8C, 29017 }, + { 0x6D8D, 29044 }, + { 0x6D8E, 29076 }, + { 0x6D8F, 29085 }, + { 0x6D92, 29035 }, + { 0x6D93, 27102 }, + { 0x6D94, 27111 }, + { 0x6D95, 29157 }, + { 0x6D96, 29147 }, + { 0x6D97, 29268 }, + { 0x6D98, 29277 }, + { 0x6D99, 29258 }, + { 0x6D9A, 29314 }, + { 0x6D9B, 29323 }, + { 0x6D9C, 28330 }, + { 0x6D9D, 28339 }, + { 0x6D9E, 26672 }, + { 0x6D9F, 28038 }, + { 0x6DA0, 28047 }, + { 0x6DA1, 28080 }, + { 0x6DA2, 28089 }, + { 0x6DA3, 28131 }, + { 0x6DA4, 28140 }, + { 0x6DA5, 28856 }, + { 0x6DA6, 28784 }, + { 0x6DA7, 28865 }, + { 0x6DA8, 29522 }, + { 0x6DA9, 27739 }, + { 0x6DAA, 29836 }, + { 0x6DAB, 26737 }, + { 0x6DAC, 27473 }, + { 0x6DAD, 27582 }, + { 0x6DAE, 28210 }, + { 0x6DAF, 28284 }, + { 0x6DB0, 28321 }, + { 0x6DB1, 29108 }, + { 0x6DB2, 27681 }, + { 0x6DB3, 29138 }, + { 0x6DB4, 27672 }, + { 0x6DB5, 27339 }, + { 0x6DB6, 26533 }, + { 0x6DB7, 27256 }, + { 0x6DB8, 29240 }, + { 0x6DB9, 29067 }, + { 0x6DBA, 27509 }, + { 0x6DBB, 27265 }, + { 0x6DBC, 27500 }, + { 0x6DBD, 29231 }, + { 0x6DBE, 28775 }, + { 0x6DBF, 27017 }, + { 0x6DC0, 29026 }, + { 0x6DC1, 26964 }, + { 0x6DC2, 26584 }, + { 0x6DC3, 27274 }, + { 0x6DC4, 26510 }, + { 0x6DC5, 27822 }, + { 0x6DC6, 29513 }, + { 0x6DC7, 29249 }, + { 0x6DF0, 29821 }, + { 0x6DF1, 29375 }, + { 0x6DF2, 29725 }, + { 0x6DF3, 29720 }, + { 0x6DF4, 30191 }, + { 0x6DF5, 29816 }, + { 0x6DF6, 30083 }, + { 0x6DF7, 30078 }, + { 0x6DF8, 30196 }, + { 0x6DF9, 29831 }, + { 0x6DFA, 30206 }, + { 0x6DFB, 30211 }, + { 0x6DFC, 9693 }, + { 0x6DFD, 30201 }, + { 0x6E00, 66314 }, + { 0x6E01, 66316 }, + { 0x6E02, 66318 }, + { 0x6E03, 66320 }, + { 0x6E04, 66322 }, + { 0x6E05, 66324 }, + { 0x6E06, 66326 }, + { 0x6E07, 66328 }, + { 0x6E08, 66330 }, + { 0x6E09, 66332 }, + { 0x6E0A, 66334 }, + { 0x6E0B, 66336 }, + { 0x6E0C, 66338 }, + { 0x6E0D, 66340 }, + { 0x6E0E, 66342 }, + { 0x6E0F, 66344 }, + { 0x6E10, 74355 }, + { 0x6E11, 74464 }, + { 0x6E12, 74457 }, + { 0x6E13, 74350 }, + { 0x6E14, 74440 }, + { 0x6E15, 74451 }, + { 0x6E16, 74434 }, + { 0x6E17, 74299 }, + { 0x6E18, 74390 }, + { 0x6E19, 74445 }, + { 0x6E20, 58207 }, + { 0x6E21, 58211 }, + { 0x6E22, 57894 }, + { 0x6E23, 57899 }, + { 0x6E24, 57948 }, + { 0x6E25, 57955 }, + { 0x6E26, 58290 }, + { 0x6E30, 74262 }, + { 0x6E31, 74244 }, + { 0x6E32, 74250 }, + { 0x6E33, 74256 }, + { 0x6E34, 74343 }, + { 0x6E35, 74337 }, + { 0x6E36, 74428 }, + { 0x6E37, 74284 }, + { 0x6E38, 74375 }, + { 0x6E39, 74329 }, + { 0x6E3A, 74420 }, + { 0x6E3B, 74276 }, + { 0x6E3C, 74367 }, + { 0x6E3D, 74314 }, + { 0x6E3E, 74405 }, + { 0x6E3F, 74269 }, + { 0x6E40, 74360 }, + { 0x6E41, 74307 }, + { 0x6E42, 74398 }, + { 0x6E43, 74291 }, + { 0x6E44, 74382 }, + { 0x6E45, 35852 }, + { 0x6E46, 23293 }, + { 0x6E47, 74322 }, + { 0x6E48, 74413 }, + { 0x6E49, 31173 }, + { 0x6E4A, 66833 }, + { 0x6E4B, 10082 }, + { 0x6E4C, 31561 }, + { 0x6E4D, 31170 }, + { 0x6E4E, 66830 }, + { 0x6E4F, 10075 }, + { 0x6E50, 22507 }, + { 0x6E51, 22660 }, + { 0x6E52, 22487 }, + { 0x6E54, 22652 }, + { 0x6E55, 22505 }, + { 0x6E56, 22644 }, + { 0x6E57, 22657 }, + { 0x6E58, 22480 }, + { 0x6E59, 22499 }, + { 0x6E5A, 22518 }, + { 0x6E5B, 22490 }, + { 0x6E5C, 22509 }, + { 0x6E5D, 22494 }, + { 0x6E5E, 22513 }, + { 0x6E5F, 22596 }, + { 0x6E60, 22647 }, + { 0x6E61, 22624 }, + { 0x6E62, 22502 }, + { 0x6E63, 22666 }, + { 0x6E64, 22649 }, + { 0x6E65, 22663 }, + { 0x6E66, 22593 }, + { 0x6E68, 22621 }, + { 0x6E69, 22590 }, + { 0x6E6A, 22618 }, + { 0x6E6B, 22654 }, + { 0x6E70, 26455 }, + { 0x6E71, 26442 }, + { 0x6E72, 26449 }, + { 0x6E73, 23761 }, + { 0x6E74, 26467 }, + { 0x6E76, 23797 }, + { 0x6E77, 23793 }, + { 0x6E78, 23772 }, + { 0x6E79, 23768 }, + { 0x6E7A, 23813 }, + { 0x6E7B, 23809 }, + { 0x6E7C, 26418 }, + { 0x6E7D, 26414 }, + { 0x6E7E, 23953 }, + { 0x6E7F, 23949 }, + { 0x6E80, 26059 }, + { 0x6E81, 25385 }, + { 0x6E82, 25377 }, + { 0x6E83, 25341 }, + { 0x6E84, 25333 }, + { 0x6E85, 25111 }, + { 0x6E86, 25103 }, + { 0x6E87, 25363 }, + { 0x6E88, 25355 }, + { 0x6E89, 25185 }, + { 0x6E8A, 25161 }, + { 0x6E8B, 25177 }, + { 0x6E8C, 25169 }, + { 0x6E8D, 25448 }, + { 0x6E8E, 25411 }, + { 0x6E8F, 24226 }, + { 0x6E90, 24211 }, + { 0x6E91, 24221 }, + { 0x6E92, 24216 }, + { 0x6E93, 25042 }, + { 0x6E94, 25036 }, + { 0x6E95, 25048 }, + { 0x6E96, 25012 }, + { 0x6E97, 25022 }, + { 0x6E98, 25017 }, + { 0x6E99, 25869 }, + { 0x6E9A, 25854 }, + { 0x6E9B, 25864 }, + { 0x6E9C, 25859 }, + { 0x6E9D, 25572 }, + { 0x6E9E, 25557 }, + { 0x6E9F, 25567 }, + { 0x6EA0, 25562 }, + { 0x6EA1, 24540 }, + { 0x6EA2, 24525 }, + { 0x6EA3, 24535 }, + { 0x6EA4, 24530 }, + { 0x6EA5, 25595 }, + { 0x6EA6, 25580 }, + { 0x6EA7, 25590 }, + { 0x6EA8, 25585 }, + { 0x6EA9, 24328 }, + { 0x6EAA, 24323 }, + { 0x6EAB, 25846 }, + { 0x6EAC, 25841 }, + { 0x6EAD, 24924 }, + { 0x6EAE, 24919 }, + { 0x6EAF, 25905 }, + { 0x6EB0, 25900 }, + { 0x6EB1, 25833 }, + { 0x6EB2, 25818 }, + { 0x6EB3, 25828 }, + { 0x6EB4, 25823 }, + { 0x6EB5, 26216 }, + { 0x6EB6, 26201 }, + { 0x6EB7, 26211 }, + { 0x6EB8, 26206 }, + { 0x6EB9, 24961 }, + { 0x6EBA, 24946 }, + { 0x6EBB, 24956 }, + { 0x6EBC, 24951 }, + { 0x6EBD, 24255 }, + { 0x6EBE, 24240 }, + { 0x6EBF, 24250 }, + { 0x6EC0, 24245 }, + { 0x6EC1, 24991 }, + { 0x6EC2, 24976 }, + { 0x6EC3, 24986 }, + { 0x6EC4, 24981 }, + { 0x6EC5, 25305 }, + { 0x6EC6, 25290 }, + { 0x6EC7, 25300 }, + { 0x6EC8, 25295 }, + { 0x6EC9, 24139 }, + { 0x6ECA, 24124 }, + { 0x6ECB, 24134 }, + { 0x6ECC, 24129 }, + { 0x6ECD, 26051 }, + { 0x6ECE, 26036 }, + { 0x6ECF, 26046 }, + { 0x6ED0, 26041 }, + { 0x6ED1, 24400 }, + { 0x6ED2, 24385 }, + { 0x6ED3, 24395 }, + { 0x6ED4, 24390 }, + { 0x6ED5, 24828 }, + { 0x6ED6, 24813 }, + { 0x6ED7, 24823 }, + { 0x6ED8, 24818 }, + { 0x6ED9, 24715 }, + { 0x6EDA, 24700 }, + { 0x6EDB, 24710 }, + { 0x6EDC, 24705 }, + { 0x6EDD, 24769 }, + { 0x6EDE, 24754 }, + { 0x6EDF, 24764 }, + { 0x6EE0, 24759 }, + { 0x6EE1, 25630 }, + { 0x6EE2, 25615 }, + { 0x6EE3, 25625 }, + { 0x6EE4, 25620 }, + { 0x6EE5, 25706 }, + { 0x6EE6, 25675 }, + { 0x6EE7, 25701 }, + { 0x6EE8, 25696 }, + { 0x6EE9, 24626 }, + { 0x6EEA, 24611 }, + { 0x6EEB, 24621 }, + { 0x6EEC, 24616 }, + { 0x6EED, 25142 }, + { 0x6EEE, 25137 }, + { 0x6EEF, 25442 }, + { 0x6EF0, 25436 }, + { 0x6EF1, 25282 }, + { 0x6EF2, 25206 }, + { 0x6EF3, 25277 }, + { 0x6EF4, 25272 }, + { 0x6EF5, 27433 }, + { 0x6EF6, 27423 }, + { 0x6EF7, 27393 }, + { 0x6EF8, 27383 }, + { 0x6EF9, 27413 }, + { 0x6EFA, 27403 }, + { 0x6EFB, 27466 }, + { 0x6EFC, 27443 }, + { 0x6EFF, 10095 }, + { 0x6F01, 63786 }, + { 0x6F02, 63773 }, + { 0x6F03, 63749 }, + { 0x6F04, 63741 }, + { 0x6F05, 63752 }, + { 0x6F06, 63768 }, + { 0x6F07, 63778 }, + { 0x6F08, 63415 }, + { 0x6F09, 63733 }, + { 0x6F0A, 63760 }, + { 0x6F0B, 63418 }, + { 0x6F0C, 63423 }, + { 0x6F0D, 63792 }, + { 0x6F0E, 63400 }, + { 0x6F0F, 63758 }, + { 0x6F10, 63443 }, + { 0x6F11, 63425 }, + { 0x6F12, 63431 }, + { 0x6F13, 63452 }, + { 0x6F14, 63437 }, + { 0x6F15, 63434 }, + { 0x6F16, 63428 }, + { 0x6F17, 63449 }, + { 0x6F18, 63446 }, + { 0x6F19, 63440 }, + { 0x6F1A, 63421 }, + { 0x6F1B, 63776 }, + { 0x6F1C, 63770 }, + { 0x6F1D, 63744 }, + { 0x6F1E, 63789 }, + { 0x6F1F, 63762 }, + { 0x6F20, 63783 }, + { 0x6F21, 63588 }, + { 0x6F22, 63593 }, + { 0x6F23, 63598 }, + { 0x6F24, 63603 }, + { 0x6F25, 63608 }, + { 0x6F26, 63613 }, + { 0x6F27, 63618 }, + { 0x6F28, 63623 }, + { 0x6F29, 63628 }, + { 0x6F2A, 63633 }, + { 0x6F2B, 63638 }, + { 0x6F2C, 63643 }, + { 0x6F2D, 63648 }, + { 0x6F2E, 63653 }, + { 0x6F2F, 63658 }, + { 0x6F30, 63663 }, + { 0x6F31, 63668 }, + { 0x6F32, 63673 }, + { 0x6F33, 63678 }, + { 0x6F34, 63683 }, + { 0x6F35, 63688 }, + { 0x6F36, 63693 }, + { 0x6F37, 63698 }, + { 0x6F38, 63703 }, + { 0x6F39, 63708 }, + { 0x6F3A, 63713 }, + { 0x6F3B, 63411 }, + { 0x6F3C, 63755 }, + { 0x6F3D, 63729 }, + { 0x6F3E, 63780 }, + { 0x6F3F, 63385 }, + { 0x6F40, 63455 }, + { 0x6F41, 63458 }, + { 0x6F42, 63463 }, + { 0x6F43, 63468 }, + { 0x6F44, 63473 }, + { 0x6F45, 63478 }, + { 0x6F46, 63483 }, + { 0x6F47, 63488 }, + { 0x6F48, 63493 }, + { 0x6F49, 63498 }, + { 0x6F4A, 63503 }, + { 0x6F4B, 63508 }, + { 0x6F4C, 63513 }, + { 0x6F4D, 63518 }, + { 0x6F4E, 63523 }, + { 0x6F4F, 63528 }, + { 0x6F50, 63533 }, + { 0x6F51, 63538 }, + { 0x6F52, 63543 }, + { 0x6F53, 63548 }, + { 0x6F54, 63553 }, + { 0x6F55, 63558 }, + { 0x6F56, 63563 }, + { 0x6F57, 63568 }, + { 0x6F58, 63573 }, + { 0x6F59, 63578 }, + { 0x6F5A, 63583 }, + { 0x6F5B, 63403 }, + { 0x6F5C, 63765 }, + { 0x6F5D, 63721 }, + { 0x6F5E, 63736 }, + { 0x6F5F, 63407 }, + { 0x6F60, 63725 }, + { 0x6F61, 64276 }, + { 0x6F62, 63796 }, + { 0x6F63, 63807 }, + { 0x6F64, 64280 }, + { 0x6F65, 64253 }, + { 0x6F66, 64192 }, + { 0x6F67, 64208 }, + { 0x6F68, 64218 }, + { 0x6F69, 64228 }, + { 0x6F6A, 64213 }, + { 0x6F6B, 64223 }, + { 0x6F6C, 64238 }, + { 0x6F6D, 64248 }, + { 0x6F6E, 64243 }, + { 0x6F6F, 64233 }, + { 0x6F70, 64283 }, + { 0x6F71, 64024 }, + { 0x6F72, 64032 }, + { 0x6F73, 64044 }, + { 0x6F74, 64028 }, + { 0x6F75, 64040 }, + { 0x6F76, 64068 }, + { 0x6F77, 64076 }, + { 0x6F78, 64084 }, + { 0x6F79, 64072 }, + { 0x6F7A, 64080 }, + { 0x6F7B, 64148 }, + { 0x6F7C, 64156 }, + { 0x6F7D, 64164 }, + { 0x6F7E, 64152 }, + { 0x6F7F, 64160 }, + { 0x6F80, 64168 }, + { 0x6F81, 64176 }, + { 0x6F82, 64184 }, + { 0x6F83, 64172 }, + { 0x6F84, 64180 }, + { 0x6F85, 64108 }, + { 0x6F86, 64116 }, + { 0x6F87, 64124 }, + { 0x6F88, 64112 }, + { 0x6F89, 64120 }, + { 0x6F8A, 64048 }, + { 0x6F8B, 64056 }, + { 0x6F8C, 64064 }, + { 0x6F8D, 64052 }, + { 0x6F8E, 64060 }, + { 0x6F8F, 64088 }, + { 0x6F90, 64096 }, + { 0x6F91, 64104 }, + { 0x6F92, 64092 }, + { 0x6F93, 64100 }, + { 0x6F94, 64196 }, + { 0x6F95, 64204 }, + { 0x6F96, 64200 }, + { 0x6F97, 64128 }, + { 0x6F98, 64136 }, + { 0x6F99, 64144 }, + { 0x6F9A, 64132 }, + { 0x6F9B, 64140 }, + { 0x6F9C, 64188 }, + { 0x6F9D, 64036 }, + { 0x6F9E, 64257 }, + { 0x6F9F, 64262 }, + { 0x6FA0, 63814 }, + { 0x6FA1, 63933 }, + { 0x6FA2, 64001 }, + { 0x6FA3, 63977 }, + { 0x6FA4, 63921 }, + { 0x6FA5, 63981 }, + { 0x6FA6, 63985 }, + { 0x6FA7, 63937 }, + { 0x6FA8, 64005 }, + { 0x6FA9, 63929 }, + { 0x6FAA, 64009 }, + { 0x6FAB, 63993 }, + { 0x6FAC, 63997 }, + { 0x6FAD, 63965 }, + { 0x6FAE, 64017 }, + { 0x6FAF, 64013 }, + { 0x6FB0, 63989 }, + { 0x6FB1, 63917 }, + { 0x6FB2, 63925 }, + { 0x6FB3, 63973 }, + { 0x6FB4, 63961 }, + { 0x6FB5, 63901 }, + { 0x6FB6, 63957 }, + { 0x6FB7, 63913 }, + { 0x6FB8, 63905 }, + { 0x6FB9, 63969 }, + { 0x6FBA, 63941 }, + { 0x6FBB, 63945 }, + { 0x6FBC, 63953 }, + { 0x6FBD, 63949 }, + { 0x6FBE, 63909 }, + { 0x6FC2, 63817 }, + { 0x6FC3, 63837 }, + { 0x6FC4, 63865 }, + { 0x6FC5, 63893 }, + { 0x6FC6, 63841 }, + { 0x6FC7, 63821 }, + { 0x6FCA, 63897 }, + { 0x6FCB, 63869 }, + { 0x6FCC, 63829 }, + { 0x6FCD, 63853 }, + { 0x6FCE, 63885 }, + { 0x6FCF, 63849 }, + { 0x6FD2, 63877 }, + { 0x6FD3, 63833 }, + { 0x6FD4, 63889 }, + { 0x6FD5, 63857 }, + { 0x6FD6, 63861 }, + { 0x6FD7, 63881 }, + { 0x6FDA, 63845 }, + { 0x6FDB, 63873 }, + { 0x6FDC, 63825 }, + { 0x6FE0, 63397 }, + { 0x6FE1, 63718 }, + { 0x6FE2, 63388 }, + { 0x6FE3, 63747 }, + { 0x6FE4, 63738 }, + { 0x6FE5, 63394 }, + { 0x6FE6, 63391 }, + { 0x6FE8, 63803 }, + { 0x6FE9, 64270 }, + { 0x6FEA, 64021 }, + { 0x6FEB, 64273 }, + { 0x6FEC, 64267 }, + { 0x6FED, 63800 }, + { 0x6FEE, 63811 }, + { 0x6FF9, 69249 }, + { 0x6FFA, 69252 }, + { 0x6FFB, 69255 }, + { 0x6FFC, 35637 }, + { 0x6FFD, 69276 }, + { 0x7000, 35010 }, + { 0x7001, 35135 }, + { 0x7002, 35095 }, + { 0x7003, 35235 }, + { 0x7004, 35020 }, + { 0x7005, 34975 }, + { 0x7006, 35170 }, + { 0x7007, 35005 }, + { 0x7008, 35040 }, + { 0x7009, 35190 }, + { 0x700A, 35215 }, + { 0x700B, 35175 }, + { 0x700D, 35125 }, + { 0x700E, 35245 }, + { 0x700F, 35305 }, + { 0x7010, 35165 }, + { 0x7011, 35255 }, + { 0x7012, 35270 }, + { 0x7013, 35320 }, + { 0x7014, 35315 }, + { 0x7015, 35035 }, + { 0x7016, 35285 }, + { 0x7017, 35045 }, + { 0x7018, 35070 }, + { 0x7019, 35000 }, + { 0x701A, 35075 }, + { 0x701B, 35105 }, + { 0x701C, 35195 }, + { 0x701D, 35210 }, + { 0x701E, 34985 }, + { 0x701F, 35280 }, + { 0x7020, 35140 }, + { 0x7021, 35025 }, + { 0x7022, 35185 }, + { 0x7023, 35050 }, + { 0x7024, 35310 }, + { 0x7025, 35065 }, + { 0x7026, 35115 }, + { 0x7028, 35230 }, + { 0x7029, 35090 }, + { 0x702A, 35200 }, + { 0x702B, 34980 }, + { 0x702C, 35085 }, + { 0x702D, 35110 }, + { 0x702E, 35015 }, + { 0x702F, 35150 }, + { 0x7030, 35030 }, + { 0x7031, 35220 }, + { 0x7032, 35225 }, + { 0x7033, 34990 }, + { 0x7034, 35130 }, + { 0x7035, 34995 }, + { 0x7036, 35265 }, + { 0x7037, 35205 }, + { 0x7038, 35295 }, + { 0x7039, 35145 }, + { 0x703A, 35155 }, + { 0x703C, 35055 }, + { 0x703D, 35290 }, + { 0x703F, 35060 }, + { 0x7040, 35080 }, + { 0x7041, 35160 }, + { 0x7042, 35325 }, + { 0x7043, 35275 }, + { 0x7044, 35335 }, + { 0x7045, 35180 }, + { 0x7046, 35100 }, + { 0x7047, 35240 }, + { 0x7048, 35300 }, + { 0x7049, 35120 }, + { 0x704A, 35260 }, + { 0x704B, 35250 }, + { 0x704C, 35330 }, + { 0x704D, 35340 }, + { 0x7050, 34349 }, + { 0x7051, 34353 }, + { 0x7052, 34357 }, + { 0x7053, 34361 }, + { 0x7054, 34365 }, + { 0x7055, 34369 }, + { 0x7056, 34373 }, + { 0x7057, 34377 }, + { 0x7058, 34381 }, + { 0x7059, 34385 }, + { 0x705A, 34389 }, + { 0x705B, 34393 }, + { 0x705C, 34397 }, + { 0x705D, 34401 }, + { 0x7080, 34405 }, + { 0x7081, 34410 }, + { 0x7082, 34415 }, + { 0x7083, 34420 }, + { 0x7084, 34750 }, + { 0x7085, 34755 }, + { 0x7086, 34760 }, + { 0x7087, 34765 }, + { 0x7088, 34770 }, + { 0x7089, 34775 }, + { 0x708A, 34780 }, + { 0x708B, 34785 }, + { 0x708C, 34790 }, + { 0x708D, 34795 }, + { 0x708E, 34425 }, + { 0x708F, 34430 }, + { 0x7090, 34435 }, + { 0x7091, 34440 }, + { 0x7092, 34445 }, + { 0x7093, 34945 }, + { 0x7094, 34950 }, + { 0x7095, 34450 }, + { 0x7096, 34455 }, + { 0x7097, 34460 }, + { 0x7098, 34955 }, + { 0x7099, 34960 }, + { 0x709A, 34464 }, + { 0x709B, 34469 }, + { 0x709C, 34474 }, + { 0x709D, 34478 }, + { 0x709E, 34483 }, + { 0x709F, 34487 }, + { 0x70A0, 34491 }, + { 0x70A1, 34496 }, + { 0x70A2, 34500 }, + { 0x70A3, 34504 }, + { 0x70A4, 34965 }, + { 0x70A5, 34508 }, + { 0x70A6, 34512 }, + { 0x70A7, 34516 }, + { 0x70A8, 34521 }, + { 0x70A9, 34525 }, + { 0x70AA, 34529 }, + { 0x70AB, 34534 }, + { 0x70AC, 34539 }, + { 0x70AD, 34543 }, + { 0x70AE, 34547 }, + { 0x70AF, 34551 }, + { 0x70B0, 34555 }, + { 0x70B1, 34559 }, + { 0x70B2, 34563 }, + { 0x70B3, 34567 }, + { 0x70B4, 34571 }, + { 0x70B5, 34575 }, + { 0x70B6, 34580 }, + { 0x70B7, 34584 }, + { 0x70B8, 34589 }, + { 0x70B9, 34593 }, + { 0x70BA, 34597 }, + { 0x70BB, 34601 }, + { 0x70BC, 34605 }, + { 0x70BD, 34609 }, + { 0x70BE, 34613 }, + { 0x70BF, 34617 }, + { 0x70C0, 34621 }, + { 0x70C1, 34625 }, + { 0x70C2, 34629 }, + { 0x70C3, 34633 }, + { 0x70C4, 34638 }, + { 0x70C5, 34643 }, + { 0x70C6, 34648 }, + { 0x70C7, 34653 }, + { 0x70C8, 34658 }, + { 0x70C9, 34662 }, + { 0x70CA, 34667 }, + { 0x70CB, 34671 }, + { 0x70CC, 34675 }, + { 0x70CD, 34681 }, + { 0x70CE, 34686 }, + { 0x70CF, 34692 }, + { 0x70D0, 34697 }, + { 0x70D1, 34701 }, + { 0x70D2, 34970 }, + { 0x70D3, 34705 }, + { 0x70D4, 34709 }, + { 0x70D5, 34713 }, + { 0x70D6, 34717 }, + { 0x70D7, 34721 }, + { 0x70D8, 34725 }, + { 0x70D9, 34730 }, + { 0x70DA, 34734 }, + { 0x70DB, 34738 }, + { 0x70DC, 34742 }, + { 0x70DD, 34746 }, + { 0x70DE, 34800 }, + { 0x70DF, 34805 }, + { 0x70E0, 34810 }, + { 0x70E1, 34815 }, + { 0x70E2, 34820 }, + { 0x70E3, 34825 }, + { 0x70E4, 34830 }, + { 0x70E5, 34835 }, + { 0x70E6, 34840 }, + { 0x70E7, 34845 }, + { 0x70E8, 34850 }, + { 0x70E9, 34855 }, + { 0x70EA, 34860 }, + { 0x70EB, 34865 }, + { 0x70EC, 34870 }, + { 0x70ED, 34875 }, + { 0x70EE, 34880 }, + { 0x70EF, 34885 }, + { 0x70F0, 34890 }, + { 0x70F1, 34895 }, + { 0x70F2, 34900 }, + { 0x70F3, 34905 }, + { 0x70F4, 34910 }, + { 0x70F5, 34915 }, + { 0x70F6, 34920 }, + { 0x70F7, 34925 }, + { 0x70F8, 34930 }, + { 0x70F9, 34935 }, + { 0x70FA, 34940 }, + { 0x7100, 23485 }, + { 0x7101, 23481 }, + { 0x7102, 23489 }, + { 0x7107, 23497 }, + { 0x7108, 23526 }, + { 0x7109, 23613 }, + { 0x710A, 23548 }, + { 0x710B, 23537 }, + { 0x710C, 23508 }, + { 0x710D, 23595 }, + { 0x710E, 23570 }, + { 0x710F, 23559 }, + { 0x7110, 23519 }, + { 0x7111, 23645 }, + { 0x7112, 23638 }, + { 0x7113, 23588 }, + { 0x7114, 23581 }, + { 0x7115, 23606 }, + { 0x7116, 23652 }, + { 0x7117, 23624 }, + { 0x7118, 23631 }, + { 0x7119, 23500 }, + { 0x711A, 23529 }, + { 0x711B, 23616 }, + { 0x711C, 23551 }, + { 0x711D, 23540 }, + { 0x711E, 23511 }, + { 0x711F, 23598 }, + { 0x7120, 23573 }, + { 0x7121, 23562 }, + { 0x7122, 23504 }, + { 0x7123, 23533 }, + { 0x7124, 23620 }, + { 0x7125, 23555 }, + { 0x7126, 23544 }, + { 0x7127, 23515 }, + { 0x7128, 23602 }, + { 0x7129, 23577 }, + { 0x712A, 23566 }, + { 0x712B, 23522 }, + { 0x712C, 23648 }, + { 0x712D, 23641 }, + { 0x712E, 23591 }, + { 0x712F, 23584 }, + { 0x7130, 23609 }, + { 0x7131, 23655 }, + { 0x7132, 23627 }, + { 0x7133, 23634 }, + { 0x7137, 23659 }, + { 0x7138, 23663 }, + { 0x7139, 23675 }, + { 0x713A, 23667 }, + { 0x713B, 23671 }, + { 0x713C, 23476 }, + { 0x713D, 23492 }, + { 0x713E, 23683 }, + { 0x713F, 23679 }, + { 0x7140, 13133 }, + { 0x7141, 13111 }, + { 0x7142, 13116 }, + { 0x7143, 13171 }, + { 0x7144, 13213 }, + { 0x7145, 13175 }, + { 0x7146, 13202 }, + { 0x7147, 13227 }, + { 0x7148, 13197 }, + { 0x7149, 13160 }, + { 0x714A, 13222 }, + { 0x714B, 13127 }, + { 0x714C, 13186 }, + { 0x714D, 13144 }, + { 0x714E, 13207 }, + { 0x714F, 13192 }, + { 0x7150, 13155 }, + { 0x7151, 13217 }, + { 0x7152, 13121 }, + { 0x7153, 13180 }, + { 0x7154, 13138 }, + { 0x7155, 13165 }, + { 0x7156, 13232 }, + { 0x7157, 13150 }, + { 0x7158, 13248 }, + { 0x7159, 13263 }, + { 0x715A, 13331 }, + { 0x715B, 13317 }, + { 0x715C, 13281 }, + { 0x715D, 13253 }, + { 0x715E, 13321 }, + { 0x715F, 13353 }, + { 0x7160, 13343 }, + { 0x7161, 13347 }, + { 0x7162, 13335 }, + { 0x7163, 13313 }, + { 0x7164, 13277 }, + { 0x7165, 13304 }, + { 0x7166, 13362 }, + { 0x7167, 13366 }, + { 0x7168, 13339 }, + { 0x7169, 13295 }, + { 0x716A, 13267 }, + { 0x716B, 13299 }, + { 0x716C, 13326 }, + { 0x716D, 13357 }, + { 0x716E, 13285 }, + { 0x716F, 13308 }, + { 0x7170, 13238 }, + { 0x7171, 13272 }, + { 0x7172, 13290 }, + { 0x7173, 13243 }, + { 0x7174, 13258 }, + { 0x7175, 10649 }, + { 0x7176, 10653 }, + { 0x7177, 10674 }, + { 0x7178, 11894 }, + { 0x7179, 10694 }, + { 0x717A, 12082 }, + { 0x717B, 13022 }, + { 0x717C, 10689 }, + { 0x717D, 10670 }, + { 0x717E, 11890 }, + { 0x717F, 10685 }, + { 0x7180, 10681 }, + { 0x7181, 13056 }, + { 0x7182, 13027 }, + { 0x7183, 10717 }, + { 0x7184, 12079 }, + { 0x7185, 12085 }, + { 0x7186, 12021 }, + { 0x7187, 12018 }, + { 0x7188, 12024 }, + { 0x7189, 13067 }, + { 0x718A, 10697 }, + { 0x7190, 22109 }, + { 0x7191, 22013 }, + { 0x7192, 22121 }, + { 0x7193, 22112 }, + { 0x7194, 22016 }, + { 0x7195, 22115 }, + { 0x7196, 22118 }, + { 0x7197, 22130 }, + { 0x7198, 22133 }, + { 0x7199, 22127 }, + { 0x719A, 22010 }, + { 0x719B, 22124 }, + { 0x71D0, 55326 }, + { 0x71D1, 55265 }, + { 0x71D2, 55306 }, + { 0x71D3, 55278 }, + { 0x71D4, 55211 }, + { 0x71D5, 55245 }, + { 0x71D6, 55261 }, + { 0x71D7, 55294 }, + { 0x71D8, 55237 }, + { 0x71D9, 55202 }, + { 0x71DA, 55145 }, + { 0x71DB, 55270 }, + { 0x71DC, 55165 }, + { 0x71DD, 55298 }, + { 0x71DE, 55282 }, + { 0x71DF, 55161 }, + { 0x71E0, 55153 }, + { 0x71E1, 55311 }, + { 0x71E2, 55315 }, + { 0x71E3, 55253 }, + { 0x71E4, 55169 }, + { 0x71E5, 55228 }, + { 0x71E6, 55249 }, + { 0x71E7, 55274 }, + { 0x71E8, 55189 }, + { 0x71E9, 55181 }, + { 0x71EA, 55177 }, + { 0x71EB, 55206 }, + { 0x71EC, 55149 }, + { 0x71ED, 55157 }, + { 0x71EE, 55215 }, + { 0x71EF, 55173 }, + { 0x71F0, 55241 }, + { 0x71F1, 55141 }, + { 0x71F2, 55223 }, + { 0x71F3, 55193 }, + { 0x71F4, 55286 }, + { 0x71F5, 55290 }, + { 0x71F6, 55185 }, + { 0x71F7, 55136 }, + { 0x71F8, 55219 }, + { 0x71F9, 55257 }, + { 0x71FA, 55302 }, + { 0x71FB, 55232 }, + { 0x71FC, 55197 }, + { 0x71FD, 55320 }, + { 0x7280, 35345 }, + { 0x7281, 35354 }, + { 0x7282, 35348 }, + { 0x7283, 35411 }, + { 0x7284, 35357 }, + { 0x7285, 35351 }, + { 0x7286, 35363 }, + { 0x7287, 35399 }, + { 0x7288, 35405 }, + { 0x7289, 35426 }, + { 0x728A, 35366 }, + { 0x728B, 35369 }, + { 0x728C, 35384 }, + { 0x728D, 35372 }, + { 0x728E, 35375 }, + { 0x728F, 35378 }, + { 0x7290, 35420 }, + { 0x7291, 35423 }, + { 0x7292, 35396 }, + { 0x7293, 35381 }, + { 0x7294, 35417 }, + { 0x7295, 35387 }, + { 0x7296, 35390 }, + { 0x7297, 35393 }, + { 0x7298, 35429 }, + { 0x7299, 35408 }, + { 0x729A, 35414 }, + { 0x729B, 35360 }, + { 0x729C, 35402 }, + { 0x72A0, 30318 }, + { 0x72A1, 30405 }, + { 0x72A2, 30324 }, + { 0x72A3, 30339 }, + { 0x72A4, 30447 }, + { 0x72A5, 30357 }, + { 0x72A6, 30390 }, + { 0x72A7, 30372 }, + { 0x72A8, 30354 }, + { 0x72A9, 30321 }, + { 0x72AA, 30342 }, + { 0x72AB, 30348 }, + { 0x72AC, 30375 }, + { 0x72AD, 30363 }, + { 0x72AE, 30411 }, + { 0x72AF, 30438 }, + { 0x72B0, 30360 }, + { 0x72B1, 30450 }, + { 0x72B2, 30366 }, + { 0x72B3, 30402 }, + { 0x72B4, 30369 }, + { 0x72B5, 30345 }, + { 0x72B6, 30444 }, + { 0x72B7, 30351 }, + { 0x72B8, 30414 }, + { 0x72B9, 30333 }, + { 0x72BA, 30327 }, + { 0x72BB, 30462 }, + { 0x72BC, 30336 }, + { 0x72BD, 30387 }, + { 0x72BE, 30396 }, + { 0x72BF, 30423 }, + { 0x72C0, 30330 }, + { 0x72C1, 30381 }, + { 0x72C2, 30417 }, + { 0x72C3, 30441 }, + { 0x72C4, 30399 }, + { 0x72C5, 30384 }, + { 0x72C6, 30453 }, + { 0x72C7, 30420 }, + { 0x72C8, 30456 }, + { 0x72C9, 30408 }, + { 0x72CA, 30393 }, + { 0x72CB, 30429 }, + { 0x72CC, 30432 }, + { 0x72CD, 30435 }, + { 0x72CE, 30426 }, + { 0x72CF, 30378 }, + { 0x72D0, 30459 }, + { 0x7300, 6815 }, + { 0x7301, 6835 }, + { 0x7302, 6879 }, + { 0x7303, 6839 }, + { 0x7304, 6819 }, + { 0x7305, 6899 }, + { 0x7306, 6903 }, + { 0x7307, 6867 }, + { 0x7308, 6935 }, + { 0x7309, 6823 }, + { 0x730A, 6875 }, + { 0x730B, 6847 }, + { 0x730C, 6851 }, + { 0x730D, 6855 }, + { 0x730E, 6919 }, + { 0x730F, 6827 }, + { 0x7310, 6887 }, + { 0x7311, 6931 }, + { 0x7312, 6883 }, + { 0x7313, 6859 }, + { 0x7314, 6863 }, + { 0x7315, 6891 }, + { 0x7316, 6831 }, + { 0x7317, 6911 }, + { 0x7318, 6927 }, + { 0x7319, 6923 }, + { 0x731A, 6843 }, + { 0x731B, 6915 }, + { 0x731C, 6907 }, + { 0x731D, 6871 }, + { 0x731E, 6895 }, + { 0x7320, 6939 }, + { 0x7321, 6947 }, + { 0x7322, 6943 }, + { 0x7323, 6951 }, + { 0x7330, 31802 }, + { 0x7331, 31869 }, + { 0x7332, 31808 }, + { 0x7333, 31805 }, + { 0x7334, 31857 }, + { 0x7335, 31875 }, + { 0x7336, 31814 }, + { 0x7337, 31811 }, + { 0x7338, 31866 }, + { 0x7339, 31796 }, + { 0x733A, 31833 }, + { 0x733B, 31836 }, + { 0x733C, 31839 }, + { 0x733D, 31860 }, + { 0x733E, 31799 }, + { 0x733F, 31821 }, + { 0x7340, 31872 }, + { 0x7341, 31863 }, + { 0x7342, 31845 }, + { 0x7343, 31848 }, + { 0x7344, 31851 }, + { 0x7345, 31854 }, + { 0x7346, 31824 }, + { 0x7347, 31830 }, + { 0x7348, 31827 }, + { 0x7349, 31842 }, + { 0x734A, 31817 }, + { 0x7380, 55959 }, + { 0x7381, 55962 }, + { 0x7382, 55986 }, + { 0x7383, 55941 }, + { 0x7384, 55983 }, + { 0x7385, 55920 }, + { 0x7386, 55929 }, + { 0x7387, 55980 }, + { 0x7388, 55968 }, + { 0x7389, 55953 }, + { 0x738A, 55956 }, + { 0x738B, 55938 }, + { 0x738C, 55977 }, + { 0x738D, 55992 }, + { 0x738E, 55944 }, + { 0x738F, 55965 }, + { 0x7390, 55947 }, + { 0x7391, 55932 }, + { 0x7392, 55998 }, + { 0x7393, 55935 }, + { 0x7394, 55923 }, + { 0x7395, 55974 }, + { 0x7396, 55971 }, + { 0x7397, 55995 }, + { 0x7398, 56001 }, + { 0x7399, 55989 }, + { 0x739A, 55926 }, + { 0x739B, 55914 }, + { 0x739C, 55917 }, + { 0x739D, 55950 }, + { 0x739F, 55911 }, + { 0x73A0, 6955 }, + { 0x73A1, 6959 }, + { 0x73A2, 6963 }, + { 0x73A3, 7011 }, + { 0x73A4, 7015 }, + { 0x73A5, 6991 }, + { 0x73A6, 6995 }, + { 0x73A7, 7075 }, + { 0x73A8, 6971 }, + { 0x73A9, 7003 }, + { 0x73AA, 7007 }, + { 0x73AB, 7059 }, + { 0x73AC, 7063 }, + { 0x73AD, 6975 }, + { 0x73AE, 6979 }, + { 0x73AF, 6983 }, + { 0x73B0, 7095 }, + { 0x73B1, 7043 }, + { 0x73B2, 6967 }, + { 0x73B3, 6987 }, + { 0x73B4, 7035 }, + { 0x73B5, 7039 }, + { 0x73B6, 7023 }, + { 0x73B7, 7027 }, + { 0x73B8, 7031 }, + { 0x73B9, 7079 }, + { 0x73BA, 7067 }, + { 0x73BB, 7071 }, + { 0x73BC, 7047 }, + { 0x73BD, 7051 }, + { 0x73BE, 7019 }, + { 0x73BF, 7055 }, + { 0x73C0, 7083 }, + { 0x73C1, 7087 }, + { 0x73C2, 7091 }, + { 0x73C3, 6999 }, + { 0x73C8, 7111 }, + { 0x73C9, 7119 }, + { 0x73CA, 7123 }, + { 0x73CB, 7127 }, + { 0x73CC, 7107 }, + { 0x73CD, 7115 }, + { 0x73CE, 7099 }, + { 0x73CF, 7103 }, + { 0x73D0, 7131 }, + { 0x73D1, 7135 }, + { 0x73D2, 7143 }, + { 0x73D3, 7139 }, + { 0x73D4, 7147 }, + { 0x73D5, 7151 }, + { 0x7400, 40249 }, + { 0x7401, 40244 }, + { 0x7402, 40239 }, + { 0x7403, 40259 }, + { 0x7404, 40254 }, + { 0x7405, 40264 }, + { 0x7406, 40287 }, + { 0x7407, 40282 }, + { 0x7408, 40277 }, + { 0x7409, 40297 }, + { 0x740A, 40292 }, + { 0x740B, 40302 }, + { 0x740C, 40139 }, + { 0x740D, 40175 }, + { 0x740E, 40179 }, + { 0x740F, 40227 }, + { 0x7410, 40135 }, + { 0x7411, 40215 }, + { 0x7412, 40183 }, + { 0x7413, 40219 }, + { 0x7414, 40187 }, + { 0x7415, 40235 }, + { 0x7416, 40207 }, + { 0x7417, 40211 }, + { 0x7418, 40203 }, + { 0x7419, 40143 }, + { 0x741A, 40223 }, + { 0x741B, 40199 }, + { 0x741C, 40269 }, + { 0x741D, 40163 }, + { 0x741E, 40231 }, + { 0x741F, 40195 }, + { 0x7420, 40273 }, + { 0x7421, 40159 }, + { 0x7422, 40147 }, + { 0x7423, 40151 }, + { 0x7424, 40155 }, + { 0x7425, 40191 }, + { 0x7426, 40171 }, + { 0x7427, 40167 }, + { 0x7428, 40077 }, + { 0x7429, 40072 }, + { 0x742A, 40067 }, + { 0x742B, 40087 }, + { 0x742C, 40082 }, + { 0x742D, 40092 }, + { 0x742E, 40115 }, + { 0x742F, 40110 }, + { 0x7430, 40105 }, + { 0x7431, 40125 }, + { 0x7432, 40120 }, + { 0x7433, 40130 }, + { 0x7434, 39967 }, + { 0x7435, 40003 }, + { 0x7436, 40007 }, + { 0x7437, 40055 }, + { 0x7438, 39963 }, + { 0x7439, 40043 }, + { 0x743A, 40011 }, + { 0x743B, 40047 }, + { 0x743C, 40015 }, + { 0x743D, 40063 }, + { 0x743E, 40035 }, + { 0x743F, 40039 }, + { 0x7440, 40031 }, + { 0x7441, 39971 }, + { 0x7442, 40051 }, + { 0x7443, 40027 }, + { 0x7444, 40097 }, + { 0x7445, 39991 }, + { 0x7446, 40059 }, + { 0x7447, 40023 }, + { 0x7448, 40101 }, + { 0x7449, 39987 }, + { 0x744A, 39975 }, + { 0x744B, 39979 }, + { 0x744C, 39983 }, + { 0x744D, 40019 }, + { 0x744E, 39999 }, + { 0x744F, 39995 }, + { 0x7450, 43139 }, + { 0x7451, 43103 }, + { 0x7452, 43127 }, + { 0x7453, 43079 }, + { 0x7454, 43163 }, + { 0x7455, 43040 }, + { 0x7456, 43145 }, + { 0x7457, 43166 }, + { 0x7458, 43112 }, + { 0x7459, 43124 }, + { 0x745A, 43064 }, + { 0x745B, 43121 }, + { 0x745C, 43082 }, + { 0x745D, 43106 }, + { 0x745E, 43148 }, + { 0x745F, 43118 }, + { 0x7460, 43169 }, + { 0x7461, 43160 }, + { 0x7462, 43109 }, + { 0x7463, 43157 }, + { 0x7464, 43130 }, + { 0x7465, 43133 }, + { 0x7466, 43031 }, + { 0x7467, 43073 }, + { 0x7468, 43058 }, + { 0x7469, 43046 }, + { 0x746A, 43034 }, + { 0x746B, 43151 }, + { 0x746C, 43100 }, + { 0x746D, 43028 }, + { 0x746E, 43142 }, + { 0x746F, 43091 }, + { 0x7470, 43070 }, + { 0x7471, 43049 }, + { 0x7472, 43088 }, + { 0x7473, 43043 }, + { 0x7474, 43094 }, + { 0x7475, 43136 }, + { 0x7476, 43097 }, + { 0x7477, 43061 }, + { 0x7478, 43055 }, + { 0x7479, 43037 }, + { 0x747A, 43052 }, + { 0x747B, 43076 }, + { 0x747C, 43154 }, + { 0x747D, 43067 }, + { 0x747E, 43085 }, + { 0x747F, 43115 }, + { 0x7480, 42944 }, + { 0x7481, 42899 }, + { 0x7482, 42926 }, + { 0x7483, 42914 }, + { 0x7484, 42929 }, + { 0x7485, 42938 }, + { 0x7486, 42950 }, + { 0x7487, 42920 }, + { 0x7488, 42923 }, + { 0x7489, 42968 }, + { 0x748A, 42935 }, + { 0x748B, 42947 }, + { 0x748C, 42908 }, + { 0x748D, 42905 }, + { 0x748E, 42965 }, + { 0x748F, 42953 }, + { 0x7490, 42956 }, + { 0x7491, 42959 }, + { 0x7492, 42962 }, + { 0x7493, 42941 }, + { 0x7494, 42911 }, + { 0x7495, 42932 }, + { 0x7496, 42881 }, + { 0x7497, 42884 }, + { 0x7498, 42887 }, + { 0x7499, 42890 }, + { 0x749A, 42893 }, + { 0x749B, 42896 }, + { 0x749C, 42902 }, + { 0x749D, 42917 }, + { 0x74A0, 42869 }, + { 0x74A1, 42851 }, + { 0x74A2, 42857 }, + { 0x74A3, 42878 }, + { 0x74A4, 42863 }, + { 0x74A5, 42860 }, + { 0x74A6, 42854 }, + { 0x74A7, 42875 }, + { 0x74A8, 42872 }, + { 0x74A9, 42866 }, + { 0x7800, 39794 }, + { 0x7801, 39797 }, + { 0x7802, 39800 }, + { 0x7803, 39803 }, + { 0x7804, 39806 }, + { 0x7805, 39809 }, + { 0x7808, 39812 }, + { 0x780A, 39815 }, + { 0x780B, 39818 }, + { 0x780C, 39821 }, + { 0x780D, 39824 }, + { 0x780E, 39827 }, + { 0x780F, 39830 }, + { 0x7810, 39833 }, + { 0x7811, 39836 }, + { 0x7812, 39839 }, + { 0x7813, 39842 }, + { 0x7814, 39845 }, + { 0x7815, 39848 }, + { 0x7816, 39851 }, + { 0x7817, 39854 }, + { 0x7818, 39857 }, + { 0x7819, 39860 }, + { 0x781A, 39863 }, + { 0x781B, 39866 }, + { 0x781C, 39869 }, + { 0x781D, 39872 }, + { 0x781E, 39875 }, + { 0x781F, 39878 }, + { 0x7820, 39881 }, + { 0x7821, 39884 }, + { 0x7822, 39887 }, + { 0x7823, 39890 }, + { 0x7824, 39893 }, + { 0x7825, 39896 }, + { 0x7826, 39899 }, + { 0x7827, 39902 }, + { 0x7828, 39905 }, + { 0x7829, 39908 }, + { 0x782A, 39911 }, + { 0x782B, 39914 }, + { 0x782C, 39917 }, + { 0x782D, 39920 }, + { 0x782E, 39923 }, + { 0x782F, 39926 }, + { 0x7830, 39929 }, + { 0x7831, 39932 }, + { 0x7832, 39935 }, + { 0x7833, 39938 }, + { 0x7834, 39941 }, + { 0x7835, 39944 }, + { 0x7837, 39947 }, + { 0x7838, 39950 }, + { 0x783C, 39953 }, + { 0x783F, 39956 }, + { 0x7900, 67899 }, + { 0x7901, 67902 }, + { 0x7902, 67938 }, + { 0x7903, 67935 }, + { 0x7904, 67890 }, + { 0x7905, 67926 }, + { 0x7906, 67932 }, + { 0x7907, 67905 }, + { 0x7908, 67923 }, + { 0x7909, 67929 }, + { 0x790A, 67908 }, + { 0x790B, 67941 }, + { 0x790C, 67911 }, + { 0x790D, 67914 }, + { 0x790E, 67950 }, + { 0x790F, 67896 }, + { 0x7910, 67893 }, + { 0x7911, 67947 }, + { 0x7912, 67917 }, + { 0x7913, 67944 }, + { 0x7914, 67953 }, + { 0x7915, 67920 }, + { 0x7916, 67956 }, + { 0x7917, 67963 }, + { 0x7918, 67966 }, + { 0x7919, 67959 }, + { 0x791F, 67887 }, + { 0x7920, 35432 }, + { 0x7921, 35435 }, + { 0x7922, 35450 }, + { 0x7923, 35441 }, + { 0x7924, 35444 }, + { 0x7925, 35486 }, + { 0x7926, 35453 }, + { 0x7927, 35489 }, + { 0x7928, 35456 }, + { 0x7929, 35459 }, + { 0x792A, 35462 }, + { 0x792B, 35465 }, + { 0x792C, 35468 }, + { 0x792D, 35474 }, + { 0x792E, 35504 }, + { 0x792F, 35480 }, + { 0x7930, 35483 }, + { 0x7931, 35447 }, + { 0x7932, 35471 }, + { 0x7933, 35477 }, + { 0x7934, 35507 }, + { 0x7935, 35492 }, + { 0x7936, 35495 }, + { 0x7937, 35498 }, + { 0x7938, 35501 }, + { 0x7939, 35438 }, + { 0x793F, 35510 }, + { 0x7A00, 67726 }, + { 0x7A01, 67705 }, + { 0x7A02, 67713 }, + { 0x7A03, 67717 }, + { 0x7A05, 67701 }, + { 0x7A06, 67709 }, + { 0x7A0C, 67722 }, + { 0x7A0D, 67678 }, + { 0x7A0E, 67686 }, + { 0x7A0F, 67683 }, + { 0x7A10, 67747 }, + { 0x7A11, 67795 }, + { 0x7A12, 67738 }, + { 0x7A13, 67792 }, + { 0x7A15, 67732 }, + { 0x7A16, 67783 }, + { 0x7A17, 67744 }, + { 0x7A19, 67804 }, + { 0x7A1A, 67819 }, + { 0x7A1B, 67825 }, + { 0x7A1C, 67786 }, + { 0x7A1D, 67822 }, + { 0x7A1E, 67801 }, + { 0x7A1F, 67768 }, + { 0x7A20, 67816 }, + { 0x7A21, 67735 }, + { 0x7A22, 67789 }, + { 0x7A23, 67756 }, + { 0x7A24, 67759 }, + { 0x7A25, 67807 }, + { 0x7A26, 67729 }, + { 0x7A27, 67780 }, + { 0x7A28, 67753 }, + { 0x7A29, 67774 }, + { 0x7A2A, 67762 }, + { 0x7A2B, 67750 }, + { 0x7A2C, 67771 }, + { 0x7A2D, 67810 }, + { 0x7A2E, 67813 }, + { 0x7A2F, 67765 }, + { 0x7A30, 67777 }, + { 0x7A31, 67741 }, + { 0x7A32, 67798 }, + { 0x7A33, 67828 }, + { 0x7A38, 67667 }, + { 0x7A39, 67675 }, + { 0x7A3A, 67671 }, + { 0x7A3F, 67845 }, + { 0x7A40, 67689 }, + { 0x7A41, 67692 }, + { 0x7A42, 67698 }, + { 0x7A43, 67695 }, + { 0x7A44, 67839 }, + { 0x7A45, 67842 }, + { 0x7A46, 67831 }, + { 0x7A47, 67835 }, + { 0x7A50, 67847 }, + { 0x7A51, 67859 }, + { 0x7A52, 67863 }, + { 0x7A53, 67870 }, + { 0x7A54, 67874 }, + { 0x7A55, 67856 }, + { 0x7A56, 67850 }, + { 0x7A57, 67866 }, + { 0x7A58, 67853 }, + { 0x8000, 58351 }, + { 0x8001, 58354 }, + { 0x8002, 58364 }, + { 0x8003, 58379 }, + { 0x8004, 58359 }, + { 0x8005, 58369 }, + { 0x8006, 58390 }, + { 0x8007, 58385 }, + { 0x8008, 58374 }, + { 0x8009, 58460 }, + { 0x800A, 58463 }, + { 0x800B, 58495 }, + { 0x800C, 58500 }, + { 0x800D, 58484 }, + { 0x800E, 58506 }, + { 0x800F, 58479 }, + { 0x8010, 58489 }, + { 0x8011, 58512 }, + { 0x8012, 58517 }, + { 0x8013, 58522 }, + { 0x8014, 58470 }, + { 0x8015, 58466 }, + { 0x8016, 59529 }, + { 0x8017, 59555 }, + { 0x8018, 59539 }, + { 0x8019, 59532 }, + { 0x801A, 59545 }, + { 0x801B, 59550 }, + { 0x801C, 58527 }, + { 0x801D, 58530 }, + { 0x801E, 58533 }, + { 0x801F, 58538 }, + { 0x8020, 58545 }, + { 0x8021, 58548 }, + { 0x8022, 58573 }, + { 0x8023, 58578 }, + { 0x8024, 58553 }, + { 0x8025, 58583 }, + { 0x8026, 58558 }, + { 0x8027, 58563 }, + { 0x8028, 58568 }, + { 0x8029, 61180 }, + { 0x802A, 61793 }, + { 0x802B, 61183 }, + { 0x802C, 61186 }, + { 0x802D, 58588 }, + { 0x802E, 58591 }, + { 0x802F, 58611 }, + { 0x8030, 58602 }, + { 0x8031, 58596 }, + { 0x8032, 61796 }, + { 0x8033, 61191 }, + { 0x8034, 61194 }, + { 0x8035, 61197 }, + { 0x8036, 61799 }, + { 0x8037, 61802 }, + { 0x8038, 59560 }, + { 0x8039, 59600 }, + { 0x803A, 59563 }, + { 0x803B, 59588 }, + { 0x803C, 59568 }, + { 0x803D, 59575 }, + { 0x803E, 61202 }, + { 0x803F, 62374 }, + { 0x8040, 58616 }, + { 0x8041, 59605 }, + { 0x8042, 61205 }, + { 0x8043, 62377 }, + { 0x8044, 59608 }, + { 0x8045, 59611 }, + { 0x8046, 61805 }, + { 0x8047, 59616 }, + { 0x8048, 61808 }, + { 0x8049, 58619 }, + { 0x804A, 58622 }, + { 0x804B, 58627 }, + { 0x804C, 58632 }, + { 0x804D, 58638 }, + { 0x804E, 58641 }, + { 0x804F, 58647 }, + { 0x8050, 58653 }, + { 0x8051, 61811 }, + { 0x8052, 61814 }, + { 0x8053, 59619 }, + { 0x8054, 61208 }, + { 0x8055, 58658 }, + { 0x8056, 59622 }, + { 0x8057, 59625 }, + { 0x8058, 59751 }, + { 0x8059, 59769 }, + { 0x805A, 59633 }, + { 0x805B, 59639 }, + { 0x805C, 59645 }, + { 0x805D, 59653 }, + { 0x805E, 59757 }, + { 0x805F, 59719 }, + { 0x8060, 59659 }, + { 0x8061, 59665 }, + { 0x8062, 59671 }, + { 0x8063, 59725 }, + { 0x8064, 59679 }, + { 0x8065, 59685 }, + { 0x8066, 59691 }, + { 0x8067, 59731 }, + { 0x8068, 59699 }, + { 0x8069, 59737 }, + { 0x806A, 59705 }, + { 0x806B, 59763 }, + { 0x806C, 59711 }, + { 0x806D, 59745 }, + { 0x806E, 59775 }, + { 0x806F, 59778 }, + { 0x8070, 61819 }, + { 0x8071, 61822 }, + { 0x8072, 58661 }, + { 0x8073, 59781 }, + { 0x8074, 59784 }, + { 0x8075, 59787 }, + { 0x8076, 61211 }, + { 0x8077, 59792 }, + { 0x8078, 59795 }, + { 0x8079, 61214 }, + { 0x807A, 58664 }, + { 0x807B, 58671 }, + { 0x807C, 58667 }, + { 0x807D, 58676 }, + { 0x807E, 59802 }, + { 0x807F, 59805 }, + { 0x8080, 61217 }, + { 0x8081, 59810 }, + { 0x8082, 61825 }, + { 0x8083, 59813 }, + { 0x8084, 59816 }, + { 0x8085, 61220 }, + { 0x8086, 61223 }, + { 0x8087, 61227 }, + { 0x8088, 61232 }, + { 0x8089, 61235 }, + { 0x808A, 58396 }, + { 0x808B, 58407 }, + { 0x808C, 58399 }, + { 0x808D, 58680 }, + { 0x808E, 58683 }, + { 0x808F, 58702 }, + { 0x8090, 58697 }, + { 0x8091, 58707 }, + { 0x8092, 58712 }, + { 0x8093, 58692 }, + { 0x8094, 61238 }, + { 0x8095, 61241 }, + { 0x8096, 58717 }, + { 0x8097, 58720 }, + { 0x8098, 58728 }, + { 0x8099, 58733 }, + { 0x809A, 58723 }, + { 0x809B, 58743 }, + { 0x809C, 58748 }, + { 0x809D, 58739 }, + { 0x809E, 61244 }, + { 0x809F, 61828 }, + { 0x80A0, 61247 }, + { 0x80A1, 61250 }, + { 0x80A2, 61253 }, + { 0x80A3, 61258 }, + { 0x80A4, 61265 }, + { 0x80A5, 61274 }, + { 0x80A6, 61315 }, + { 0x80A7, 61338 }, + { 0x80A8, 61344 }, + { 0x80A9, 61279 }, + { 0x80AA, 61284 }, + { 0x80AB, 61320 }, + { 0x80AC, 61351 }, + { 0x80AD, 61356 }, + { 0x80AE, 61326 }, + { 0x80AF, 61290 }, + { 0x80B0, 61331 }, + { 0x80B1, 61295 }, + { 0x80B2, 61300 }, + { 0x80B3, 61305 }, + { 0x80B4, 61310 }, + { 0x80B5, 58753 }, + { 0x80B6, 58756 }, + { 0x80B7, 59819 }, + { 0x80B8, 59827 }, + { 0x80B9, 59836 }, + { 0x80BA, 59843 }, + { 0x80BB, 59950 }, + { 0x80BC, 59855 }, + { 0x80BD, 59958 }, + { 0x80BE, 60106 }, + { 0x80BF, 59963 }, + { 0x80C0, 59968 }, + { 0x80C1, 59975 }, + { 0x80C2, 59980 }, + { 0x80C3, 59860 }, + { 0x80C4, 59865 }, + { 0x80C5, 59987 }, + { 0x80C6, 59994 }, + { 0x80C7, 59870 }, + { 0x80C8, 59875 }, + { 0x80C9, 59882 }, + { 0x80CA, 59887 }, + { 0x80CB, 60113 }, + { 0x80CC, 59999 }, + { 0x80CD, 59895 }, + { 0x80CE, 60004 }, + { 0x80CF, 60009 }, + { 0x80D0, 60119 }, + { 0x80D1, 59900 }, + { 0x80D2, 60016 }, + { 0x80D3, 60021 }, + { 0x80D4, 59909 }, + { 0x80D5, 60126 }, + { 0x80D6, 60028 }, + { 0x80D7, 60034 }, + { 0x80D8, 60043 }, + { 0x80D9, 60141 }, + { 0x80DA, 60048 }, + { 0x80DB, 60053 }, + { 0x80DC, 60060 }, + { 0x80DD, 59916 }, + { 0x80DE, 59921 }, + { 0x80DF, 59928 }, + { 0x80E0, 60067 }, + { 0x80E1, 60072 }, + { 0x80E2, 59933 }, + { 0x80E3, 60079 }, + { 0x80E4, 60084 }, + { 0x80E5, 60089 }, + { 0x80E6, 60094 }, + { 0x80E7, 60131 }, + { 0x80E8, 60101 }, + { 0x80E9, 60136 }, + { 0x80EA, 59850 }, + { 0x80EB, 59938 }, + { 0x80EC, 59943 }, + { 0x80ED, 59822 }, + { 0x80EE, 61362 }, + { 0x80EF, 61365 }, + { 0x80F0, 60146 }, + { 0x80F1, 60149 }, + { 0x80F2, 60157 }, + { 0x80F3, 60160 }, + { 0x80F4, 61831 }, + { 0x80F5, 60169 }, + { 0x80F6, 60172 }, + { 0x80F7, 61370 }, + { 0x80F8, 61378 }, + { 0x80F9, 61373 }, + { 0x80FA, 61382 }, + { 0x80FB, 60175 }, + { 0x80FC, 61387 }, + { 0x80FD, 62380 }, + { 0x80FE, 62539 }, + { 0x80FF, 62542 }, + { 0x8100, 58760 }, + { 0x8101, 58763 }, + { 0x8102, 58768 }, + { 0x8103, 58773 }, + { 0x8104, 60178 }, + { 0x8105, 60181 }, + { 0x8106, 60186 }, + { 0x8107, 61834 }, + { 0x8108, 61390 }, + { 0x8109, 61393 }, + { 0x810A, 61397 }, + { 0x810B, 61400 }, + { 0x810C, 61424 }, + { 0x810D, 61419 }, + { 0x810E, 61407 }, + { 0x810F, 61414 }, + { 0x8110, 61837 }, + { 0x8111, 61430 }, + { 0x8112, 61447 }, + { 0x8113, 61437 }, + { 0x8114, 61442 }, + { 0x8115, 61433 }, + { 0x8116, 58778 }, + { 0x8117, 58781 }, + { 0x8118, 60191 }, + { 0x8119, 60198 }, + { 0x811A, 60203 }, + { 0x811B, 60211 }, + { 0x811C, 60216 }, + { 0x811D, 60194 }, + { 0x811E, 60223 }, + { 0x811F, 60232 }, + { 0x8120, 60239 }, + { 0x8121, 60226 }, + { 0x8122, 60244 }, + { 0x8123, 60247 }, + { 0x8124, 60250 }, + { 0x8125, 60255 }, + { 0x8126, 61452 }, + { 0x8127, 61840 }, + { 0x8128, 62383 }, + { 0x8129, 58786 }, + { 0x812A, 58793 }, + { 0x812B, 58789 }, + { 0x812C, 60258 }, + { 0x812D, 58797 }, + { 0x812E, 58805 }, + { 0x812F, 58835 }, + { 0x8130, 58810 }, + { 0x8131, 58840 }, + { 0x8132, 58815 }, + { 0x8133, 58820 }, + { 0x8134, 58825 }, + { 0x8135, 58830 }, + { 0x8136, 58800 }, + { 0x8137, 58845 }, + { 0x8138, 61455 }, + { 0x8139, 61458 }, + { 0x813A, 61468 }, + { 0x813B, 61478 }, + { 0x813C, 61473 }, + { 0x813D, 61463 }, + { 0x813E, 61483 }, + { 0x813F, 58412 }, + { 0x8140, 58415 }, + { 0x8141, 58848 }, + { 0x8142, 61486 }, + { 0x8143, 61489 }, + { 0x8144, 61495 }, + { 0x8145, 58851 }, + { 0x8146, 60261 }, + { 0x8147, 60268 }, + { 0x8148, 60264 }, + { 0x8149, 60276 }, + { 0x814A, 60272 }, + { 0x814B, 58854 }, + { 0x814C, 58857 }, + { 0x814D, 60287 }, + { 0x814E, 58863 }, + { 0x814F, 58866 }, + { 0x8150, 58875 }, + { 0x8151, 58880 }, + { 0x8152, 58871 }, + { 0x8153, 61501 }, + { 0x8154, 58885 }, + { 0x8155, 58888 }, + { 0x8156, 60290 }, + { 0x8157, 58891 }, + { 0x8158, 58894 }, + { 0x8159, 58904 }, + { 0x815A, 58909 }, + { 0x815B, 59113 }, + { 0x815C, 59029 }, + { 0x815D, 59165 }, + { 0x815E, 59034 }, + { 0x815F, 58916 }, + { 0x8160, 59170 }, + { 0x8161, 59118 }, + { 0x8162, 58921 }, + { 0x8163, 59039 }, + { 0x8164, 59123 }, + { 0x8165, 59044 }, + { 0x8166, 59049 }, + { 0x8167, 58926 }, + { 0x8168, 59129 }, + { 0x8169, 59134 }, + { 0x816A, 59141 }, + { 0x816B, 58931 }, + { 0x816C, 59148 }, + { 0x816D, 59058 }, + { 0x816E, 58936 }, + { 0x816F, 59063 }, + { 0x8170, 58941 }, + { 0x8171, 59068 }, + { 0x8172, 58946 }, + { 0x8173, 58951 }, + { 0x8174, 58956 }, + { 0x8175, 58961 }, + { 0x8176, 58968 }, + { 0x8177, 58975 }, + { 0x8178, 58982 }, + { 0x8179, 58987 }, + { 0x817A, 58994 }, + { 0x817B, 59073 }, + { 0x817C, 58999 }, + { 0x817D, 59004 }, + { 0x817E, 59009 }, + { 0x817F, 59078 }, + { 0x8180, 59083 }, + { 0x8181, 59088 }, + { 0x8182, 59153 }, + { 0x8183, 59093 }, + { 0x8184, 59098 }, + { 0x8185, 59175 }, + { 0x8186, 59103 }, + { 0x8187, 58899 }, + { 0x8188, 59014 }, + { 0x8189, 59019 }, + { 0x818A, 59158 }, + { 0x818B, 59108 }, + { 0x818C, 59024 }, + { 0x818D, 60293 }, + { 0x818E, 60296 }, + { 0x818F, 60301 }, + { 0x8190, 61504 }, + { 0x8191, 61507 }, + { 0x8192, 61510 }, + { 0x8193, 61513 }, + { 0x8194, 61516 }, + { 0x8195, 60304 }, + { 0x8196, 60307 }, + { 0x8197, 60313 }, + { 0x8198, 60316 }, + { 0x8199, 60321 }, + { 0x819A, 61521 }, + { 0x819B, 61524 }, + { 0x819C, 62386 }, + { 0x819D, 62401 }, + { 0x819E, 62389 }, + { 0x819F, 61843 }, + { 0x81A0, 59180 }, + { 0x81A1, 59193 }, + { 0x81A2, 59183 }, + { 0x81A3, 59188 }, + { 0x81A4, 60326 }, + { 0x81A5, 60329 }, + { 0x81A6, 61846 }, + { 0x81A7, 61527 }, + { 0x81A8, 62411 }, + { 0x81A9, 62414 }, + { 0x81AA, 59198 }, + { 0x81AB, 59201 }, + { 0x81AC, 60332 }, + { 0x81AD, 60335 }, + { 0x81AE, 60338 }, + { 0x81AF, 60343 }, + { 0x81B0, 60346 }, + { 0x81B1, 60349 }, + { 0x81B2, 60353 }, + { 0x81B3, 60356 }, + { 0x81B4, 60359 }, + { 0x81B5, 62419 }, + { 0x81B6, 62422 }, + { 0x81B7, 59213 }, + { 0x81B8, 61849 }, + { 0x81B9, 61852 }, + { 0x81BA, 61857 }, + { 0x81BB, 61866 }, + { 0x81BC, 61873 }, + { 0x81BD, 61901 }, + { 0x81BE, 61906 }, + { 0x81BF, 62007 }, + { 0x81C0, 62014 }, + { 0x81C1, 61911 }, + { 0x81C2, 62019 }, + { 0x81C3, 61916 }, + { 0x81C4, 61921 }, + { 0x81C5, 62024 }, + { 0x81C6, 62029 }, + { 0x81C7, 62034 }, + { 0x81C8, 61926 }, + { 0x81C9, 62041 }, + { 0x81CA, 61931 }, + { 0x81CB, 62046 }, + { 0x81CC, 61938 }, + { 0x81CD, 61943 }, + { 0x81CE, 61950 }, + { 0x81CF, 61957 }, + { 0x81D0, 62052 }, + { 0x81D1, 62057 }, + { 0x81D2, 62062 }, + { 0x81D3, 62067 }, + { 0x81D4, 62130 }, + { 0x81D5, 62103 }, + { 0x81D6, 61962 }, + { 0x81D7, 62076 }, + { 0x81D8, 61967 }, + { 0x81D9, 61972 }, + { 0x81DA, 62108 }, + { 0x81DB, 61979 }, + { 0x81DC, 62081 }, + { 0x81DD, 62135 }, + { 0x81DE, 62144 }, + { 0x81DF, 62113 }, + { 0x81E0, 62118 }, + { 0x81E1, 62088 }, + { 0x81E2, 62093 }, + { 0x81E3, 62125 }, + { 0x81E4, 61984 }, + { 0x81E5, 61880 }, + { 0x81E6, 61885 }, + { 0x81E7, 61892 }, + { 0x81E8, 61995 }, + { 0x81E9, 62002 }, + { 0x81EA, 62098 }, + { 0x81EB, 62152 }, + { 0x81EC, 62156 }, + { 0x81ED, 62171 }, + { 0x81EE, 62176 }, + { 0x81EF, 62159 }, + { 0x81F0, 62163 }, + { 0x81F1, 62425 }, + { 0x81F2, 60364 }, + { 0x81F3, 60367 }, + { 0x81F4, 60372 }, + { 0x81F5, 60375 }, + { 0x81F6, 60380 }, + { 0x81F7, 59216 }, + { 0x81F8, 60387 }, + { 0x81F9, 62428 }, + { 0x81FA, 61530 }, + { 0x81FB, 59219 }, + { 0x81FC, 59222 }, + { 0x81FD, 60390 }, + { 0x81FE, 60397 }, + { 0x81FF, 60450 }, + { 0x8200, 60455 }, + { 0x8201, 60460 }, + { 0x8202, 60466 }, + { 0x8203, 60402 }, + { 0x8204, 60409 }, + { 0x8205, 60472 }, + { 0x8206, 60477 }, + { 0x8207, 60482 }, + { 0x8208, 60414 }, + { 0x8209, 60419 }, + { 0x820A, 60501 }, + { 0x820B, 60426 }, + { 0x820C, 60433 }, + { 0x820D, 60438 }, + { 0x820E, 60443 }, + { 0x820F, 60489 }, + { 0x8210, 60496 }, + { 0x8211, 60393 }, + { 0x8212, 60514 }, + { 0x8213, 60519 }, + { 0x8214, 60510 }, + { 0x8215, 60506 }, + { 0x8216, 60524 }, + { 0x8217, 62183 }, + { 0x8218, 62186 }, + { 0x8219, 62195 }, + { 0x821A, 62191 }, + { 0x821B, 60527 }, + { 0x821C, 60530 }, + { 0x821D, 60533 }, + { 0x821E, 60536 }, + { 0x821F, 60541 }, + { 0x8220, 59227 }, + { 0x8221, 59234 }, + { 0x8222, 59230 }, + { 0x8223, 60549 }, + { 0x8224, 60552 }, + { 0x8225, 60555 }, + { 0x8226, 61533 }, + { 0x8227, 62200 }, + { 0x8228, 59239 }, + { 0x8229, 60558 }, + { 0x822A, 59242 }, + { 0x822B, 60561 }, + { 0x822C, 59245 }, + { 0x822D, 59248 }, + { 0x822E, 60564 }, + { 0x822F, 60567 }, + { 0x8230, 62431 }, + { 0x8231, 62434 }, + { 0x8232, 61536 }, + { 0x8233, 61553 }, + { 0x8234, 61563 }, + { 0x8235, 61558 }, + { 0x8236, 61539 }, + { 0x8237, 61544 }, + { 0x8238, 61568 }, + { 0x8239, 62203 }, + { 0x823A, 62210 }, + { 0x823B, 62215 }, + { 0x823C, 62222 }, + { 0x823D, 62206 }, + { 0x823E, 59253 }, + { 0x823F, 60571 }, + { 0x8240, 61573 }, + { 0x8241, 61582 }, + { 0x8242, 61576 }, + { 0x8243, 61586 }, + { 0x8244, 62227 }, + { 0x8245, 60577 }, + { 0x8246, 60574 }, + { 0x8247, 61591 }, + { 0x8248, 59256 }, + { 0x8249, 59259 }, + { 0x824A, 59264 }, + { 0x824B, 59269 }, + { 0x824C, 59273 }, + { 0x824D, 59276 }, + { 0x824E, 60581 }, + { 0x824F, 60584 }, + { 0x8250, 60595 }, + { 0x8251, 60587 }, + { 0x8252, 62437 }, + { 0x8253, 62440 }, + { 0x8254, 62465 }, + { 0x8255, 62470 }, + { 0x8256, 62477 }, + { 0x8257, 62445 }, + { 0x8258, 62453 }, + { 0x8259, 62482 }, + { 0x825A, 62487 }, + { 0x825B, 62492 }, + { 0x825C, 62500 }, + { 0x825D, 62507 }, + { 0x825E, 62458 }, + { 0x825F, 62516 }, + { 0x8260, 62230 }, + { 0x8261, 59281 }, + { 0x8262, 61594 }, + { 0x8263, 60601 }, + { 0x8264, 60613 }, + { 0x8265, 60642 }, + { 0x8266, 60619 }, + { 0x8267, 60625 }, + { 0x8268, 60636 }, + { 0x8269, 60609 }, + { 0x826A, 60604 }, + { 0x826B, 60648 }, + { 0x826C, 60653 }, + { 0x826D, 62233 }, + { 0x826E, 62291 }, + { 0x826F, 62236 }, + { 0x8270, 62260 }, + { 0x8271, 62266 }, + { 0x8272, 62272 }, + { 0x8273, 62279 }, + { 0x8274, 62242 }, + { 0x8275, 62248 }, + { 0x8276, 62285 }, + { 0x8277, 62254 }, + { 0x8278, 62297 }, + { 0x8279, 62303 }, + { 0x827A, 59284 }, + { 0x827B, 60661 }, + { 0x827C, 60664 }, + { 0x827D, 60667 }, + { 0x827E, 62310 }, + { 0x827F, 59287 }, + { 0x8280, 59290 }, + { 0x8281, 59310 }, + { 0x8282, 59315 }, + { 0x8283, 59320 }, + { 0x8284, 59295 }, + { 0x8285, 59300 }, + { 0x8286, 59325 }, + { 0x8287, 59305 }, + { 0x8288, 59330 }, + { 0x8289, 59335 }, + { 0x828A, 62313 }, + { 0x828B, 62326 }, + { 0x828C, 62316 }, + { 0x828D, 62321 }, + { 0x828E, 62331 }, + { 0x828F, 59340 }, + { 0x8290, 60670 }, + { 0x8291, 59343 }, + { 0x8292, 59346 }, + { 0x8293, 59349 }, + { 0x8294, 60770 }, + { 0x8295, 60673 }, + { 0x8296, 60685 }, + { 0x8297, 60690 }, + { 0x8298, 60725 }, + { 0x8299, 60695 }, + { 0x829A, 60730 }, + { 0x829B, 60735 }, + { 0x829C, 60740 }, + { 0x829D, 60700 }, + { 0x829E, 60745 }, + { 0x829F, 60750 }, + { 0x82A0, 60765 }, + { 0x82A1, 60755 }, + { 0x82A2, 60705 }, + { 0x82A3, 60710 }, + { 0x82A4, 60715 }, + { 0x82A5, 60720 }, + { 0x82A6, 60760 }, + { 0x82A7, 60680 }, + { 0x82A8, 60676 }, + { 0x82A9, 60774 }, + { 0x82AA, 60777 }, + { 0x82AB, 62521 }, + { 0x82AC, 60783 }, + { 0x82AD, 60786 }, + { 0x82AE, 61597 }, + { 0x82AF, 61600 }, + { 0x82B0, 61622 }, + { 0x82B1, 61632 }, + { 0x82B2, 61617 }, + { 0x82B3, 61637 }, + { 0x82B4, 61627 }, + { 0x82B5, 61605 }, + { 0x82B6, 61610 }, + { 0x82B7, 61642 }, + { 0x82B8, 62336 }, + { 0x82B9, 62339 }, + { 0x82BA, 60789 }, + { 0x82BB, 60792 }, + { 0x82BC, 60796 }, + { 0x82BD, 60807 }, + { 0x82BE, 62342 }, + { 0x82BF, 61645 }, + { 0x82C0, 62345 }, + { 0x82C1, 62524 }, + { 0x82C2, 62547 }, + { 0x82C3, 61648 }, + { 0x82C4, 61651 }, + { 0x82C5, 61656 }, + { 0x82C6, 61661 }, + { 0x82C7, 61664 }, + { 0x82C8, 61669 }, + { 0x82C9, 61710 }, + { 0x82CA, 61674 }, + { 0x82CB, 61679 }, + { 0x82CC, 61684 }, + { 0x82CD, 61689 }, + { 0x82CE, 61715 }, + { 0x82CF, 61695 }, + { 0x82D0, 61700 }, + { 0x82D1, 61705 }, + { 0x82D2, 62527 }, + { 0x82D3, 61720 }, + { 0x82D4, 61731 }, + { 0x82D5, 61723 }, + { 0x82D6, 62348 }, + { 0x82D7, 60818 }, + { 0x82D8, 60821 }, + { 0x82D9, 61735 }, + { 0x82DA, 62530 }, + { 0x82DB, 59352 }, + { 0x82DC, 59355 }, + { 0x82DD, 60827 }, + { 0x82DE, 61738 }, + { 0x82DF, 61741 }, + { 0x82E0, 61747 }, + { 0x82E1, 62351 }, + { 0x82E2, 59359 }, + { 0x82E3, 59362 }, + { 0x82E4, 60830 }, + { 0x82E5, 61750 }, + { 0x82E6, 62354 }, + { 0x82E7, 60833 }, + { 0x82E8, 62533 }, + { 0x82E9, 60836 }, + { 0x82EA, 61753 }, + { 0x82EB, 59367 }, + { 0x82EC, 59384 }, + { 0x82ED, 59374 }, + { 0x82EE, 59379 }, + { 0x82EF, 59370 }, + { 0x82F0, 60839 }, + { 0x82F1, 60842 }, + { 0x82F2, 60853 }, + { 0x82F3, 60857 }, + { 0x82F4, 60860 }, + { 0x82F5, 60870 }, + { 0x82F6, 60875 }, + { 0x82F7, 60880 }, + { 0x82F8, 60885 }, + { 0x82F9, 60865 }, + { 0x82FA, 61756 }, + { 0x82FB, 60890 }, + { 0x82FC, 59388 }, + { 0x82FD, 59391 }, + { 0x82FE, 59395 }, + { 0x82FF, 59398 }, + { 0x8300, 60893 }, + { 0x8301, 60896 }, + { 0x8302, 60915 }, + { 0x8303, 60899 }, + { 0x8304, 60904 }, + { 0x8305, 59402 }, + { 0x8306, 61759 }, + { 0x8307, 60920 }, + { 0x8308, 60923 }, + { 0x8309, 60926 }, + { 0x830A, 60929 }, + { 0x830B, 58419 }, + { 0x830C, 58427 }, + { 0x830D, 58422 }, + { 0x830E, 58441 }, + { 0x830F, 58452 }, + { 0x8310, 58431 }, + { 0x8311, 59405 }, + { 0x8312, 59408 }, + { 0x8313, 59411 }, + { 0x8314, 59447 }, + { 0x8315, 59442 }, + { 0x8316, 59437 }, + { 0x8317, 59418 }, + { 0x8318, 59427 }, + { 0x8319, 59414 }, + { 0x831A, 59451 }, + { 0x831B, 59455 }, + { 0x831C, 61762 }, + { 0x831D, 59461 }, + { 0x831E, 59481 }, + { 0x831F, 59469 }, + { 0x8320, 59476 }, + { 0x8321, 59464 }, + { 0x8322, 62357 }, + { 0x8323, 61765 }, + { 0x8324, 61773 }, + { 0x8325, 61768 }, + { 0x8326, 59486 }, + { 0x8327, 59489 }, + { 0x8328, 59493 }, + { 0x8329, 59500 }, + { 0x832A, 59496 }, + { 0x832B, 60937 }, + { 0x832C, 60940 }, + { 0x832D, 60947 }, + { 0x832E, 60954 }, + { 0x832F, 60959 }, + { 0x8330, 60983 }, + { 0x8331, 60964 }, + { 0x8332, 60976 }, + { 0x8333, 60969 }, + { 0x8334, 60988 }, + { 0x8335, 60991 }, + { 0x8336, 61778 }, + { 0x8337, 60994 }, + { 0x8338, 60997 }, + { 0x8339, 61110 }, + { 0x833A, 61049 }, + { 0x833B, 61054 }, + { 0x833C, 61009 }, + { 0x833D, 61059 }, + { 0x833E, 61094 }, + { 0x833F, 61064 }, + { 0x8340, 61014 }, + { 0x8341, 61019 }, + { 0x8342, 61069 }, + { 0x8343, 61024 }, + { 0x8344, 61074 }, + { 0x8345, 61029 }, + { 0x8346, 61079 }, + { 0x8347, 61084 }, + { 0x8348, 61034 }, + { 0x8349, 61089 }, + { 0x834A, 61100 }, + { 0x834B, 61039 }, + { 0x834C, 61002 }, + { 0x834D, 61044 }, + { 0x834E, 61105 }, + { 0x834F, 62360 }, + { 0x8350, 62363 }, + { 0x8351, 61115 }, + { 0x8352, 61118 }, + { 0x8353, 61123 }, + { 0x8354, 61128 }, + { 0x8355, 61133 }, + { 0x8356, 61784 }, + { 0x8357, 61781 }, + { 0x8358, 62536 }, + { 0x8359, 62368 }, + { 0x835A, 61138 }, + { 0x835B, 61141 }, + { 0x835C, 61146 }, + { 0x835D, 59505 }, + { 0x835E, 59508 }, + { 0x835F, 59512 }, + { 0x8360, 61149 }, + { 0x8361, 61787 }, + { 0x8362, 61152 }, + { 0x8363, 59518 }, + { 0x8364, 59521 }, + { 0x8365, 61155 }, + { 0x8366, 61158 }, + { 0x8367, 61161 }, + { 0x8368, 61166 }, + { 0x8369, 61790 }, + { 0x836A, 59526 }, + { 0x836B, 61169 }, + { 0x836C, 61172 }, + { 0x836D, 62371 }, + { 0x836E, 61177 }, + { 0x8400, 62658 }, + { 0x8401, 63027 }, + { 0x8402, 62787 }, + { 0x8403, 62723 }, + { 0x8404, 62625 }, + { 0x8405, 62968 }, + { 0x8406, 62929 }, + { 0x8407, 62875 }, + { 0x8408, 63055 }, + { 0x8409, 62815 }, + { 0x840A, 62751 }, + { 0x840B, 62636 }, + { 0x840C, 62973 }, + { 0x840D, 62934 }, + { 0x840E, 62880 }, + { 0x840F, 62782 }, + { 0x8410, 62718 }, + { 0x8411, 62620 }, + { 0x8412, 62963 }, + { 0x8413, 62924 }, + { 0x8414, 62870 }, + { 0x8415, 62579 }, + { 0x8416, 62684 }, + { 0x8417, 63060 }, + { 0x8418, 62820 }, + { 0x8419, 62756 }, + { 0x841A, 62641 }, + { 0x841B, 62978 }, + { 0x841C, 62939 }, + { 0x841D, 62885 }, + { 0x841E, 62584 }, + { 0x841F, 62689 }, + { 0x8420, 63065 }, + { 0x8421, 62825 }, + { 0x8422, 62761 }, + { 0x8423, 62694 }, + { 0x8424, 63070 }, + { 0x8425, 63075 }, + { 0x8426, 62830 }, + { 0x8427, 62766 }, + { 0x8428, 62646 }, + { 0x8429, 62983 }, + { 0x842A, 62944 }, + { 0x842B, 62890 }, + { 0x842C, 62589 }, + { 0x842D, 62699 }, + { 0x842E, 63082 }, + { 0x842F, 63087 }, + { 0x8430, 62835 }, + { 0x8431, 62771 }, + { 0x8432, 63019 }, + { 0x8433, 63011 }, + { 0x8434, 62569 }, + { 0x8435, 62674 }, + { 0x8436, 63043 }, + { 0x8437, 63048 }, + { 0x8438, 62810 }, + { 0x8439, 62746 }, + { 0x843A, 63094 }, + { 0x843B, 63101 }, + { 0x843C, 62840 }, + { 0x843D, 62863 }, + { 0x843E, 62847 }, + { 0x843F, 62855 }, + { 0x8440, 62651 }, + { 0x8441, 63004 }, + { 0x8442, 62988 }, + { 0x8443, 62996 }, + { 0x8444, 62949 }, + { 0x8445, 62956 }, + { 0x8446, 62895 }, + { 0x8447, 62910 }, + { 0x8448, 62917 }, + { 0x8449, 62902 }, + { 0x844A, 62663 }, + { 0x844B, 63032 }, + { 0x844C, 62792 }, + { 0x844D, 62728 }, + { 0x844E, 62630 }, + { 0x844F, 62564 }, + { 0x8450, 62669 }, + { 0x8451, 63038 }, + { 0x8452, 62798 }, + { 0x8453, 62803 }, + { 0x8454, 62734 }, + { 0x8455, 62739 }, + { 0x8456, 63112 }, + { 0x8457, 63108 }, + { 0x8458, 62574 }, + { 0x8459, 62679 }, + { 0x845A, 62594 }, + { 0x845B, 62704 }, + { 0x845C, 62776 }, + { 0x845D, 62600 }, + { 0x845E, 62710 }, + { 0x845F, 62608 }, + { 0x8460, 62614 }, + { 0x8461, 62550 }, + { 0x8462, 62557 }, + { 0x8470, 63116 }, + { 0x8471, 63133 }, + { 0x8472, 63123 }, + { 0x8473, 63128 }, + { 0x9000, 56261 }, + { 0x9001, 56295 }, + { 0x9002, 57281 }, + { 0x9003, 56256 }, + { 0x9004, 56251 }, + { 0x9005, 56625 }, + { 0x9006, 56620 }, + { 0x9007, 56920 }, + { 0x9008, 57186 }, + { 0x9009, 57267 }, + { 0x900A, 57194 }, + { 0x900B, 57198 }, + { 0x900C, 56937 }, + { 0x900D, 56209 }, + { 0x900E, 56118 }, + { 0x900F, 56607 }, + { 0x9010, 57136 }, + { 0x9011, 57219 }, + { 0x9012, 57228 }, + { 0x9013, 56812 }, + { 0x9014, 56282 }, + { 0x9015, 56566 }, + { 0x9016, 56484 }, + { 0x9017, 56590 }, + { 0x9018, 56847 }, + { 0x9019, 56286 }, + { 0x901A, 56132 }, + { 0x901B, 56743 }, + { 0x901C, 57158 }, + { 0x901D, 57035 }, + { 0x901E, 57022 }, + { 0x901F, 56791 }, + { 0x9020, 56575 }, + { 0x9021, 56824 }, + { 0x9022, 56838 }, + { 0x9023, 56843 }, + { 0x9024, 56512 }, + { 0x9025, 56265 }, + { 0x9026, 56585 }, + { 0x9027, 56820 }, + { 0x9028, 57295 }, + { 0x9029, 56594 }, + { 0x902A, 56807 }, + { 0x902B, 56801 }, + { 0x902C, 57172 }, + { 0x902D, 56273 }, + { 0x902E, 56242 }, + { 0x902F, 56114 }, + { 0x9030, 56147 }, + { 0x9031, 56816 }, + { 0x9032, 57163 }, + { 0x9033, 56203 }, + { 0x9034, 56400 }, + { 0x9035, 57128 }, + { 0x9036, 57099 }, + { 0x9037, 56507 }, + { 0x9038, 57026 }, + { 0x9039, 57177 }, + { 0x903A, 56924 }, + { 0x903B, 56856 }, + { 0x903C, 56783 }, + { 0x903D, 57262 }, + { 0x903E, 57276 }, + { 0x903F, 56721 }, + { 0x9040, 56137 }, + { 0x9041, 56775 }, + { 0x9042, 56928 }, + { 0x9043, 57094 }, + { 0x9044, 57303 }, + { 0x9045, 57299 }, + { 0x9046, 56127 }, + { 0x9047, 56561 }, + { 0x9048, 56246 }, + { 0x9049, 56779 }, + { 0x904A, 56933 }, + { 0x904B, 57335 }, + { 0x904C, 57327 }, + { 0x904D, 57030 }, + { 0x904E, 57140 }, + { 0x904F, 56725 }, + { 0x9050, 56663 }, + { 0x9051, 57223 }, + { 0x9052, 57213 }, + { 0x9053, 56829 }, + { 0x9054, 57331 }, + { 0x9055, 56710 }, + { 0x9056, 56702 }, + { 0x9057, 56556 }, + { 0x9058, 56615 }, + { 0x9059, 56580 }, + { 0x905A, 57181 }, + { 0x905B, 56571 }, + { 0x905C, 57203 }, + { 0x905D, 56771 }, + { 0x905E, 57271 }, + { 0x905F, 57257 }, + { 0x9060, 56337 }, + { 0x9061, 56767 }, + { 0x9062, 57323 }, + { 0x9063, 57089 }, + { 0x9064, 57233 }, + { 0x9065, 56796 }, + { 0x9066, 56269 }, + { 0x9067, 56851 }, + { 0x9068, 56912 }, + { 0x9069, 56598 }, + { 0x906A, 56290 }, + { 0x906B, 57347 }, + { 0x906C, 57339 }, + { 0x906D, 57315 }, + { 0x906E, 57351 }, + { 0x906F, 57355 }, + { 0x9070, 57319 }, + { 0x9071, 57343 }, + { 0x9072, 57311 }, + { 0x9073, 57307 }, + { 0x9074, 56342 }, + { 0x9075, 57167 }, + { 0x9076, 57285 }, + { 0x9077, 57290 }, + { 0x9078, 56277 }, + { 0x9079, 56141 }, + { 0x907A, 57132 }, + { 0x907B, 57109 }, + { 0x907C, 56156 }, + { 0x907D, 56151 }, + { 0x907E, 56787 }, + { 0x907F, 56516 }, + { 0x9080, 56237 }, + { 0x9081, 56762 }, + { 0x9082, 56757 }, + { 0x9083, 56752 }, + { 0x9084, 56833 }, + { 0x9085, 56123 }, + { 0x9086, 56233 }, + { 0x9087, 56611 }, + { 0x9088, 57085 }, + { 0x9089, 56748 }, + { 0x908A, 56532 }, + { 0x908B, 56526 }, + { 0x908C, 56538 }, + { 0x908D, 56550 }, + { 0x908E, 56544 }, + { 0x908F, 56472 }, + { 0x9090, 56495 }, + { 0x9091, 56489 }, + { 0x9092, 56883 }, + { 0x9093, 56900 }, + { 0x9094, 56893 }, + { 0x9095, 56887 }, + { 0x9096, 57190 }, + { 0x9097, 56214 }, + { 0x9098, 57249 }, + { 0x9099, 56706 }, + { 0x909A, 56171 }, + { 0x909B, 56193 }, + { 0x909C, 56161 }, + { 0x909D, 56188 }, + { 0x909E, 56166 }, + { 0x909F, 56183 }, + { 0x90A0, 56198 }, + { 0x90A1, 56177 }, + { 0x90A2, 56961 }, + { 0x90A3, 56941 }, + { 0x90A4, 56992 }, + { 0x90A5, 56948 }, + { 0x90A6, 56967 }, + { 0x90A7, 57011 }, + { 0x90A8, 56998 }, + { 0x90A9, 57004 }, + { 0x90AA, 56973 }, + { 0x90AB, 56979 }, + { 0x90AC, 56501 }, + { 0x90AD, 57207 }, + { 0x90AE, 57123 }, + { 0x90AF, 57118 }, + { 0x90B0, 57113 }, + { 0x90B1, 56955 }, + { 0x90B2, 57016 }, + { 0x90B3, 56985 }, + { 0x90B4, 57237 }, + { 0x90B5, 57243 }, + { 0x90B6, 56714 }, + { 0x90B7, 56916 }, + { 0x90B8, 57253 }, + { 0x90B9, 56405 }, + { 0x90BA, 56438 }, + { 0x90BB, 56450 }, + { 0x90BC, 56361 }, + { 0x90BD, 56412 }, + { 0x90BE, 56393 }, + { 0x90BF, 56418 }, + { 0x90C0, 56444 }, + { 0x90C1, 56431 }, + { 0x90C2, 56424 }, + { 0x90C3, 56372 }, + { 0x90C4, 56379 }, + { 0x90C5, 56347 }, + { 0x90C6, 56386 }, + { 0x90C7, 56367 }, + { 0x90C8, 56218 }, + { 0x90C9, 56223 }, + { 0x90CA, 56228 }, + { 0x90CB, 56354 }, + { 0x90CC, 56456 }, + { 0x90CD, 56658 }, + { 0x90CE, 56327 }, + { 0x90CF, 56332 }, + { 0x90D0, 56299 }, + { 0x90D1, 56320 }, + { 0x90D2, 56306 }, + { 0x90D3, 56313 }, + { 0x90D4, 56630 }, + { 0x90D5, 56651 }, + { 0x90D6, 56637 }, + { 0x90D7, 56644 }, + { 0x90D8, 56462 }, + { 0x90D9, 56467 }, + { 0x90DA, 56861 }, + { 0x90DB, 56867 }, + { 0x90DC, 56873 }, + { 0x90DD, 56878 }, + { 0x90DE, 57062 }, + { 0x90DF, 57067 }, + { 0x90E0, 57073 }, + { 0x90E1, 57079 }, + { 0x90E2, 57039 }, + { 0x90E3, 57044 }, + { 0x90E4, 57050 }, + { 0x90E5, 57056 }, + { 0x90E6, 56907 }, + { 0x90E7, 57104 }, + { 0x90E8, 56603 }, + { 0x90E9, 56687 }, + { 0x90EA, 56697 }, + { 0x90EB, 56672 }, + { 0x90EC, 56667 }, + { 0x90ED, 56677 }, + { 0x90EE, 56692 }, + { 0x90EF, 56682 }, + { 0x90F0, 57152 }, + { 0x90F1, 56737 }, + { 0x90F2, 57146 }, + { 0x90F3, 56731 }, + { 0x90F4, 56521 }, + { 0x90F5, 56478 }, + { 0x9100, 41562 }, + { 0x9101, 41524 }, + { 0x9102, 41404 }, + { 0x9103, 41695 }, + { 0x9104, 41508 }, + { 0x9105, 41470 }, + { 0x9106, 41337 }, + { 0x9107, 41454 }, + { 0x9108, 41558 }, + { 0x9109, 41249 }, + { 0x910A, 41238 }, + { 0x910B, 41459 }, + { 0x910C, 41290 }, + { 0x910D, 41776 }, + { 0x910E, 41780 }, + { 0x910F, 41784 }, + { 0x9110, 41659 }, + { 0x9111, 41662 }, + { 0x9112, 41485 }, + { 0x9113, 41646 }, + { 0x9114, 41395 }, + { 0x9115, 41643 }, + { 0x9116, 41728 }, + { 0x9117, 41861 }, + { 0x9118, 42079 }, + { 0x9119, 41999 }, + { 0x911A, 41995 }, + { 0x911B, 41788 }, + { 0x911C, 42075 }, + { 0x911D, 42086 }, + { 0x911E, 41215 }, + { 0x911F, 41219 }, + { 0x9120, 41225 }, + { 0x9121, 41195 }, + { 0x9122, 41199 }, + { 0x9123, 41203 }, + { 0x9124, 41209 }, + { 0x9125, 41300 }, + { 0x9126, 41304 }, + { 0x9129, 41719 }, + { 0x912A, 41520 }, + { 0x912B, 41516 }, + { 0x912C, 41308 }, + { 0x912D, 41312 }, + { 0x912E, 41666 }, + { 0x912F, 41670 }, + { 0x9130, 41462 }, + { 0x9131, 41466 }, + { 0x9132, 41690 }, + { 0x9133, 41685 }, + { 0x9134, 41504 }, + { 0x9135, 41245 }, + { 0x9136, 41550 }, + { 0x9137, 41554 }, + { 0x9138, 42103 }, + { 0x9139, 42107 }, + { 0x913A, 41438 }, + { 0x913B, 41481 }, + { 0x913C, 41328 }, + { 0x913D, 41681 }, + { 0x913E, 41532 }, + { 0x913F, 42039 }, + { 0x9140, 42123 }, + { 0x9141, 42115 }, + { 0x9142, 41280 }, + { 0x9143, 41231 }, + { 0x9144, 41356 }, + { 0x9145, 41496 }, + { 0x9146, 41575 }, + { 0x9147, 41570 }, + { 0x9148, 41819 }, + { 0x9149, 41799 }, + { 0x914A, 41843 }, + { 0x914B, 41837 }, + { 0x914C, 41855 }, + { 0x914D, 41849 }, + { 0x914E, 41831 }, + { 0x914F, 41825 }, + { 0x9150, 41812 }, + { 0x9151, 41805 }, + { 0x9152, 41347 }, + { 0x9153, 41342 }, + { 0x9154, 42133 }, + { 0x9155, 42127 }, + { 0x9156, 42096 }, + { 0x9157, 41371 }, + { 0x9158, 41724 }, + { 0x9159, 41352 }, + { 0x915A, 41654 }, + { 0x915B, 41649 }, + { 0x915C, 41398 }, + { 0x915D, 41477 }, + { 0x915E, 41324 }, + { 0x915F, 41677 }, + { 0x9160, 41528 }, + { 0x9161, 42035 }, + { 0x9162, 42119 }, + { 0x9163, 42111 }, + { 0x9164, 41274 }, + { 0x9165, 41896 }, + { 0x9166, 41975 }, + { 0x9167, 41958 }, + { 0x9168, 41962 }, + { 0x9169, 41966 }, + { 0x916A, 41703 }, + { 0x916B, 41707 }, + { 0x916C, 41711 }, + { 0x916D, 41970 }, + { 0x916E, 41917 }, + { 0x916F, 41921 }, + { 0x9170, 41925 }, + { 0x9171, 41929 }, + { 0x9172, 41933 }, + { 0x9173, 41383 }, + { 0x9174, 41262 }, + { 0x9175, 41379 }, + { 0x9176, 41258 }, + { 0x9177, 41387 }, + { 0x9178, 41266 }, + { 0x9179, 41391 }, + { 0x917A, 41270 }, + { 0x917B, 41908 }, + { 0x917C, 41954 }, + { 0x917D, 41937 }, + { 0x917E, 41980 }, + { 0x917F, 41946 }, + { 0x9180, 41988 }, + { 0x9181, 41984 }, + { 0x9182, 41900 }, + { 0x9183, 42043 }, + { 0x9184, 42047 }, + { 0x9185, 41878 }, + { 0x9186, 41870 }, + { 0x9187, 41887 }, + { 0x9188, 41904 }, + { 0x9189, 41874 }, + { 0x918A, 41912 }, + { 0x918B, 41941 }, + { 0x918C, 42100 }, + { 0x918D, 41580 }, + { 0x918E, 41235 }, + { 0x918F, 41451 }, + { 0x9190, 41435 }, + { 0x9191, 41408 }, + { 0x9192, 41992 }, + { 0x9193, 42083 }, + { 0x9194, 41417 }, + { 0x9195, 41411 }, + { 0x9196, 41242 }, + { 0x9197, 41360 }, + { 0x9198, 41715 }, + { 0x9199, 41367 }, + { 0x919A, 41363 }, + { 0x919B, 41732 }, + { 0x919C, 41736 }, + { 0x919D, 41740 }, + { 0x919E, 41744 }, + { 0x919F, 41748 }, + { 0x91A0, 41752 }, + { 0x91A1, 41756 }, + { 0x91A2, 41760 }, + { 0x91A3, 41764 }, + { 0x91A4, 41768 }, + { 0x91A5, 41772 }, + { 0x91A6, 42090 }, + { 0x91A7, 42093 }, + { 0x91A8, 41253 }, + { 0x91A9, 41512 }, + { 0x91AA, 41882 }, + { 0x91AB, 41865 }, + { 0x91AC, 41950 }, + { 0x91AD, 41891 }, + { 0x91AE, 41447 }, + { 0x91AF, 41442 }, + { 0x91B0, 41332 }, + { 0x91B1, 42003 }, + { 0x91B2, 42007 }, + { 0x91B3, 41375 }, + { 0x91B4, 41293 }, + { 0x91B5, 41296 }, + { 0x91B6, 41536 }, + { 0x91B7, 41422 }, + { 0x91B8, 41489 }, + { 0x91B9, 42059 }, + { 0x91BA, 42055 }, + { 0x91BB, 41539 }, + { 0x91BC, 41546 }, + { 0x91BD, 42071 }, + { 0x91BE, 42067 }, + { 0x91BF, 41320 }, + { 0x91C0, 41316 }, + { 0x91C1, 41425 }, + { 0x91C2, 41430 }, + { 0x91C3, 41492 }, + { 0x91C4, 42051 }, + { 0x91C5, 41542 }, + { 0x91C6, 42063 }, + { 0x91C7, 41583 }, + { 0x91C8, 41598 }, + { 0x91C9, 41590 }, + { 0x91CA, 41605 }, + { 0x91CB, 41612 }, + { 0x91CC, 41619 }, + { 0x91CD, 41627 }, + { 0x91CE, 41635 }, + { 0x91CF, 41401 }, + { 0x91D0, 42011 }, + { 0x91D1, 42016 }, + { 0x91D2, 41566 }, + { 0x91D3, 41474 }, + { 0x91D4, 41674 }, + { 0x91D5, 41501 }, + { 0x91D6, 42028 }, + { 0x91D7, 41700 }, + { 0x91D8, 41792 }, + { 0x91D9, 42021 }, + { 0x91DA, 42024 }, + { 0x91DB, 42031 }, + { 0x91DC, 41795 }, + { 0x91DD, 41286 }, + { 0x9200, 11902 }, + { 0x9201, 11906 }, + { 0x9202, 11910 }, + { 0x9203, 11914 }, + { 0x9204, 11918 }, + { 0x9205, 11922 }, + { 0x9206, 11926 }, + { 0x9207, 11930 }, + { 0x9208, 11934 }, + { 0x9209, 11938 }, + { 0x920A, 11942 }, + { 0x920B, 11946 }, + { 0x920C, 11950 }, + { 0x920D, 11954 }, + { 0x920E, 11958 }, + { 0x920F, 11962 }, + { 0x9210, 11966 }, + { 0x9211, 11970 }, + { 0x9212, 11974 }, + { 0x9213, 11978 }, + { 0x9214, 11982 }, + { 0x9215, 11986 }, + { 0x9216, 11990 }, + { 0x9217, 11994 }, + { 0x9218, 11998 }, + { 0x9219, 12002 }, + { 0x921A, 12006 }, + { 0x921B, 12010 }, + { 0x921C, 12014 }, + { 0x921D, 13374 }, + { 0x921E, 13378 }, + { 0x921F, 13382 }, + { 0x9220, 13386 }, + { 0x9221, 13390 }, + { 0x9222, 13394 }, + { 0x9223, 13398 }, + { 0x9224, 13402 }, + { 0x9225, 13406 }, + { 0x9226, 13410 }, + { 0x9227, 13414 }, + { 0x9228, 13418 }, + { 0x9229, 13422 }, + { 0x922A, 13426 }, + { 0x922B, 13430 }, + { 0x922C, 13434 }, + { 0x922D, 13438 }, + { 0x922E, 13442 }, + { 0x922F, 13446 }, + { 0x9230, 13450 }, + { 0x9231, 13454 }, + { 0x9232, 13458 }, + { 0x9233, 13462 }, + { 0x9234, 13466 }, + { 0x9235, 13470 }, + { 0x9236, 13474 }, + { 0x9237, 13478 }, + { 0x9238, 13482 }, + { 0x9239, 13486 }, + { 0x923A, 13490 }, + { 0x923B, 13494 }, + { 0x923C, 13498 }, + { 0x923D, 13502 }, + { 0x923E, 13506 }, + { 0x923F, 13510 }, + { 0x9240, 13514 }, + { 0x9241, 13518 }, + { 0x9242, 57564 }, + { 0x9243, 57572 }, + { 0x9244, 57568 }, + { 0x9245, 13031 }, + { 0x9300, 54871 }, + { 0x9301, 31216 }, + { 0x9302, 31188 }, + { 0x9303, 31204 }, + { 0x9304, 31200 }, + { 0x9305, 31185 }, + { 0x9306, 66100 }, + { 0x9307, 66067 }, + { 0x9308, 66082 }, + { 0x9309, 66128 }, + { 0x930A, 66147 }, + { 0x930B, 66272 }, + { 0x930C, 66097 }, + { 0x930D, 66263 }, + { 0x930E, 66201 }, + { 0x930F, 66299 }, + { 0x9310, 66254 }, + { 0x9311, 66296 }, + { 0x9312, 66184 }, + { 0x9313, 66281 }, + { 0x9314, 66085 }, + { 0x9315, 66134 }, + { 0x9316, 66143 }, + { 0x9317, 66172 }, + { 0x9318, 66220 }, + { 0x9319, 66125 }, + { 0x931A, 66166 }, + { 0x931B, 66266 }, + { 0x931C, 66064 }, + { 0x931D, 66052 }, + { 0x931E, 66251 }, + { 0x931F, 66217 }, + { 0x9320, 66110 }, + { 0x9321, 66103 }, + { 0x9322, 66287 }, + { 0x9323, 66060 }, + { 0x9324, 66160 }, + { 0x9325, 66116 }, + { 0x9326, 66205 }, + { 0x9327, 66151 }, + { 0x9328, 66226 }, + { 0x9329, 66193 }, + { 0x932A, 66119 }, + { 0x932B, 66178 }, + { 0x932C, 66239 }, + { 0x932D, 66055 }, + { 0x932E, 66187 }, + { 0x932F, 66074 }, + { 0x9330, 66257 }, + { 0x9331, 66088 }, + { 0x9332, 66233 }, + { 0x9333, 66275 }, + { 0x9334, 66163 }, + { 0x9335, 66122 }, + { 0x9336, 66113 }, + { 0x9337, 66196 }, + { 0x9338, 66208 }, + { 0x9339, 66157 }, + { 0x933A, 66175 }, + { 0x933B, 66091 }, + { 0x933C, 66293 }, + { 0x933D, 66106 }, + { 0x933E, 66278 }, + { 0x933F, 66229 }, + { 0x9340, 66154 }, + { 0x9341, 66284 }, + { 0x9342, 66304 }, + { 0x9343, 66071 }, + { 0x9344, 66094 }, + { 0x9345, 66169 }, + { 0x9346, 66079 }, + { 0x9347, 66214 }, + { 0x9348, 66211 }, + { 0x9349, 66137 }, + { 0x934A, 66260 }, + { 0x934B, 66242 }, + { 0x934C, 66190 }, + { 0x934D, 66181 }, + { 0x934E, 66245 }, + { 0x934F, 66131 }, + { 0x9350, 66140 }, + { 0x9351, 66269 }, + { 0x9352, 66248 }, + { 0x9353, 66047 }, + { 0x9354, 66290 }, + { 0x9355, 66236 }, + { 0x9356, 66223 }, + { 0x9360, 48474 }, + { 0x9361, 48484 }, + { 0x9362, 48514 }, + { 0x9363, 48494 }, + { 0x9364, 48489 }, + { 0x9365, 48479 }, + { 0x9366, 48509 }, + { 0x9367, 48504 }, + { 0x9368, 48499 }, + { 0x9369, 48429 }, + { 0x936A, 48439 }, + { 0x936B, 48469 }, + { 0x936C, 48449 }, + { 0x936D, 48444 }, + { 0x936E, 48434 }, + { 0x936F, 48464 }, + { 0x9370, 48459 }, + { 0x9371, 48454 }, + { 0x9400, 70678 }, + { 0x9401, 70682 }, + { 0x9402, 70686 }, + { 0x9403, 70690 }, + { 0x9404, 70694 }, + { 0x9405, 70698 }, + { 0x9406, 70702 }, + { 0x9407, 70706 }, + { 0x9408, 70710 }, + { 0x9409, 70714 }, + { 0x940A, 70718 }, + { 0x940B, 70722 }, + { 0x940C, 70726 }, + { 0x940D, 70730 }, + { 0x940E, 70734 }, + { 0x940F, 70738 }, + { 0x9410, 70742 }, + { 0x9411, 70746 }, + { 0x9412, 70750 }, + { 0x9413, 70754 }, + { 0x9414, 70758 }, + { 0x9415, 70762 }, + { 0x9416, 70766 }, + { 0x9417, 70770 }, + { 0x9418, 70774 }, + { 0x9419, 70778 }, + { 0x941A, 69654 }, + { 0x941B, 69658 }, + { 0x941C, 69662 }, + { 0x941D, 69666 }, + { 0x941E, 69670 }, + { 0x941F, 69674 }, + { 0x9420, 69678 }, + { 0x9421, 69682 }, + { 0x9422, 69686 }, + { 0x9423, 69690 }, + { 0x9424, 69694 }, + { 0x9425, 69698 }, + { 0x9426, 69702 }, + { 0x9427, 69706 }, + { 0x9428, 69710 }, + { 0x9429, 69714 }, + { 0x942A, 69718 }, + { 0x942B, 69722 }, + { 0x942C, 69726 }, + { 0x942D, 69730 }, + { 0x942E, 69734 }, + { 0x942F, 69738 }, + { 0x9430, 69742 }, + { 0x9431, 69746 }, + { 0x9432, 69750 }, + { 0x9433, 69754 }, + { 0x9434, 71437 }, + { 0x9435, 71441 }, + { 0x9436, 71445 }, + { 0x9437, 71449 }, + { 0x9438, 71453 }, + { 0x9439, 71457 }, + { 0x943A, 71461 }, + { 0x943B, 71465 }, + { 0x943C, 71469 }, + { 0x943D, 71473 }, + { 0x943E, 71477 }, + { 0x943F, 71481 }, + { 0x9440, 71485 }, + { 0x9441, 71489 }, + { 0x9442, 71493 }, + { 0x9443, 71497 }, + { 0x9444, 71501 }, + { 0x9445, 71505 }, + { 0x9446, 71509 }, + { 0x9447, 71513 }, + { 0x9448, 71517 }, + { 0x9449, 71521 }, + { 0x944A, 71525 }, + { 0x944B, 71529 }, + { 0x944C, 71533 }, + { 0x944D, 71537 }, + { 0x944E, 71222 }, + { 0x944F, 71226 }, + { 0x9450, 71230 }, + { 0x9451, 71234 }, + { 0x9452, 71238 }, + { 0x9453, 71242 }, + { 0x9454, 71246 }, + { 0x9456, 71250 }, + { 0x9457, 71254 }, + { 0x9458, 71258 }, + { 0x9459, 71262 }, + { 0x945A, 71266 }, + { 0x945B, 71270 }, + { 0x945C, 71274 }, + { 0x945D, 71278 }, + { 0x945E, 71282 }, + { 0x945F, 71286 }, + { 0x9460, 71290 }, + { 0x9461, 71294 }, + { 0x9462, 71298 }, + { 0x9463, 71302 }, + { 0x9464, 71306 }, + { 0x9465, 71310 }, + { 0x9466, 71314 }, + { 0x9467, 71318 }, + { 0x9468, 70152 }, + { 0x9469, 70157 }, + { 0x946A, 70162 }, + { 0x946B, 70167 }, + { 0x946C, 70172 }, + { 0x946D, 70177 }, + { 0x946E, 70182 }, + { 0x946F, 70187 }, + { 0x9470, 70192 }, + { 0x9471, 70197 }, + { 0x9472, 70202 }, + { 0x9473, 70207 }, + { 0x9474, 70212 }, + { 0x9475, 70217 }, + { 0x9476, 70222 }, + { 0x9477, 70227 }, + { 0x9478, 70232 }, + { 0x9479, 70237 }, + { 0x947A, 70242 }, + { 0x947B, 70247 }, + { 0x947C, 70252 }, + { 0x947D, 70257 }, + { 0x947E, 70262 }, + { 0x947F, 70267 }, + { 0x9480, 70272 }, + { 0x9481, 70277 }, + { 0x9482, 69891 }, + { 0x9483, 69896 }, + { 0x9484, 69901 }, + { 0x9485, 69906 }, + { 0x9486, 69911 }, + { 0x9487, 69916 }, + { 0x9488, 69921 }, + { 0x9489, 69926 }, + { 0x948A, 69931 }, + { 0x948B, 69936 }, + { 0x948C, 69941 }, + { 0x948D, 69946 }, + { 0x948E, 69951 }, + { 0x948F, 69956 }, + { 0x9490, 69961 }, + { 0x9491, 69966 }, + { 0x9492, 69971 }, + { 0x9493, 69976 }, + { 0x9494, 69981 }, + { 0x9495, 69986 }, + { 0x9496, 69991 }, + { 0x9497, 69996 }, + { 0x9498, 70001 }, + { 0x9499, 70006 }, + { 0x949A, 70011 }, + { 0x949B, 70016 }, + { 0x949C, 71742 }, + { 0x949E, 71746 }, + { 0x949F, 71750 }, + { 0x94A2, 71754 }, + { 0x94A5, 71758 }, + { 0x94A6, 71762 }, + { 0x94A9, 71766 }, + { 0x94AA, 71770 }, + { 0x94AB, 71774 }, + { 0x94AC, 71778 }, + { 0x94AE, 71782 }, + { 0x94AF, 71786 }, + { 0x94B0, 71790 }, + { 0x94B1, 71794 }, + { 0x94B2, 71798 }, + { 0x94B3, 71802 }, + { 0x94B4, 71806 }, + { 0x94B5, 71810 }, + { 0x94B6, 71650 }, + { 0x94B7, 71654 }, + { 0x94B8, 71658 }, + { 0x94B9, 71662 }, + { 0x94BB, 71666 }, + { 0x94BD, 71670 }, + { 0x94BE, 71674 }, + { 0x94BF, 71678 }, + { 0x94C0, 71682 }, + { 0x94C1, 71686 }, + { 0x94C2, 71690 }, + { 0x94C3, 71694 }, + { 0x94C5, 71698 }, + { 0x94C6, 71702 }, + { 0x94C7, 71706 }, + { 0x94C8, 71710 }, + { 0x94C9, 71714 }, + { 0x94CA, 71718 }, + { 0x94CB, 71722 }, + { 0x94CC, 71726 }, + { 0x94CD, 71730 }, + { 0x94CE, 71734 }, + { 0x94CF, 71738 }, + { 0x94D0, 70548 }, + { 0x94D1, 70553 }, + { 0x94D2, 70558 }, + { 0x94D3, 70563 }, + { 0x94D4, 70568 }, + { 0x94D5, 70573 }, + { 0x94D6, 70578 }, + { 0x94D7, 70583 }, + { 0x94D8, 70588 }, + { 0x94D9, 70593 }, + { 0x94DA, 70598 }, + { 0x94DB, 70603 }, + { 0x94DC, 70608 }, + { 0x94DD, 70613 }, + { 0x94DE, 70618 }, + { 0x94DF, 70623 }, + { 0x94E0, 70628 }, + { 0x94E1, 70633 }, + { 0x94E2, 70638 }, + { 0x94E3, 70643 }, + { 0x94E4, 70648 }, + { 0x94E5, 70653 }, + { 0x94E6, 70658 }, + { 0x94E7, 70663 }, + { 0x94E8, 70668 }, + { 0x94E9, 70673 }, + { 0x94EA, 70418 }, + { 0x94EB, 70423 }, + { 0x94EC, 70428 }, + { 0x94ED, 70433 }, + { 0x94EE, 70438 }, + { 0x94EF, 70443 }, + { 0x94F0, 70448 }, + { 0x94F1, 70453 }, + { 0x94F2, 70458 }, + { 0x94F3, 70463 }, + { 0x94F4, 70468 }, + { 0x94F5, 70473 }, + { 0x94F6, 70478 }, + { 0x94F7, 70483 }, + { 0x94F8, 70488 }, + { 0x94F9, 70493 }, + { 0x94FA, 70498 }, + { 0x94FB, 70503 }, + { 0x94FC, 70508 }, + { 0x94FD, 70513 }, + { 0x94FE, 70518 }, + { 0x94FF, 70523 }, + { 0x9500, 70528 }, + { 0x9501, 70533 }, + { 0x9502, 70538 }, + { 0x9503, 70543 }, + { 0x9504, 71918 }, + { 0x9505, 71922 }, + { 0x9507, 71926 }, + { 0x9508, 71930 }, + { 0x9509, 71934 }, + { 0x950A, 71938 }, + { 0x950D, 71942 }, + { 0x950E, 71946 }, + { 0x950F, 71950 }, + { 0x9510, 71954 }, + { 0x9511, 71958 }, + { 0x9512, 71962 }, + { 0x9513, 71966 }, + { 0x9514, 71970 }, + { 0x9516, 71974 }, + { 0x9517, 71978 }, + { 0x9518, 71982 }, + { 0x9519, 71986 }, + { 0x951A, 71990 }, + { 0x951B, 71994 }, + { 0x951C, 71998 }, + { 0x951E, 71814 }, + { 0x951F, 71818 }, + { 0x9520, 71822 }, + { 0x9521, 71826 }, + { 0x9522, 71830 }, + { 0x9523, 71834 }, + { 0x9524, 71838 }, + { 0x9525, 71842 }, + { 0x9526, 71846 }, + { 0x9527, 71850 }, + { 0x9528, 71854 }, + { 0x9529, 71858 }, + { 0x952A, 71862 }, + { 0x952B, 71866 }, + { 0x952C, 71870 }, + { 0x952D, 71874 }, + { 0x952E, 71878 }, + { 0x952F, 71882 }, + { 0x9530, 71886 }, + { 0x9531, 71890 }, + { 0x9532, 71894 }, + { 0x9533, 71898 }, + { 0x9534, 71902 }, + { 0x9535, 71906 }, + { 0x9536, 71910 }, + { 0x9537, 71914 }, + { 0x9538, 74164 }, + { 0x9539, 74168 }, + { 0x953B, 74172 }, + { 0x953C, 74176 }, + { 0x953D, 74180 }, + { 0x953E, 74184 }, + { 0x9540, 74188 }, + { 0x9541, 74192 }, + { 0x9542, 74196 }, + { 0x9543, 74200 }, + { 0x9544, 74204 }, + { 0x9546, 74208 }, + { 0x954A, 74212 }, + { 0x954B, 74216 }, + { 0x954C, 74220 }, + { 0x954D, 74224 }, + { 0x954E, 74228 }, + { 0x954F, 74232 }, + { 0x9550, 74236 }, + { 0x9552, 74060 }, + { 0x9553, 74064 }, + { 0x9554, 74068 }, + { 0x9555, 74072 }, + { 0x9556, 74076 }, + { 0x9557, 74080 }, + { 0x9558, 74084 }, + { 0x9559, 74088 }, + { 0x955A, 74092 }, + { 0x955B, 74096 }, + { 0x955C, 74100 }, + { 0x955D, 74104 }, + { 0x955E, 74108 }, + { 0x955F, 74112 }, + { 0x9560, 74116 }, + { 0x9561, 74120 }, + { 0x9562, 74124 }, + { 0x9563, 74128 }, + { 0x9564, 74132 }, + { 0x9565, 74136 }, + { 0x9566, 74140 }, + { 0x9567, 74144 }, + { 0x9568, 74148 }, + { 0x9569, 74152 }, + { 0x956A, 74156 }, + { 0x956B, 74160 }, + { 0x956C, 71021 }, + { 0x956D, 71026 }, + { 0x956E, 71031 }, + { 0x956F, 71036 }, + { 0x9570, 71041 }, + { 0x9571, 71046 }, + { 0x9572, 71051 }, + { 0x9573, 71056 }, + { 0x9574, 71061 }, + { 0x9575, 71066 }, + { 0x9576, 71071 }, + { 0x9577, 71076 }, + { 0x9578, 71081 }, + { 0x9579, 71086 }, + { 0x957A, 71091 }, + { 0x957B, 71096 }, + { 0x957C, 71101 }, + { 0x957D, 71106 }, + { 0x957E, 71111 }, + { 0x957F, 71116 }, + { 0x9580, 71121 }, + { 0x9581, 71126 }, + { 0x9582, 71131 }, + { 0x9583, 71136 }, + { 0x9584, 71141 }, + { 0x9585, 71146 }, + { 0x9586, 70891 }, + { 0x9587, 70896 }, + { 0x9588, 70901 }, + { 0x9589, 70906 }, + { 0x958A, 70911 }, + { 0x958B, 70916 }, + { 0x958C, 70921 }, + { 0x958D, 70926 }, + { 0x958E, 70931 }, + { 0x958F, 70936 }, + { 0x9590, 70941 }, + { 0x9591, 70946 }, + { 0x9592, 70951 }, + { 0x9593, 70956 }, + { 0x9594, 70961 }, + { 0x9595, 70966 }, + { 0x9596, 70971 }, + { 0x9597, 70976 }, + { 0x9598, 70981 }, + { 0x9599, 70986 }, + { 0x959A, 70991 }, + { 0x959B, 70996 }, + { 0x959C, 71001 }, + { 0x959D, 71006 }, + { 0x959E, 71011 }, + { 0x959F, 71016 }, + { 0x95A0, 73916 }, + { 0x95A1, 73920 }, + { 0x95A2, 73924 }, + { 0x95A3, 73928 }, + { 0x95A4, 73932 }, + { 0x95A5, 73936 }, + { 0x95A6, 73940 }, + { 0x95A7, 73944 }, + { 0x95A8, 73948 }, + { 0x95A9, 73952 }, + { 0x95AA, 73956 }, + { 0x95AB, 73960 }, + { 0x95AC, 73964 }, + { 0x95AD, 73968 }, + { 0x95AE, 73972 }, + { 0x95AF, 73976 }, + { 0x95B0, 73980 }, + { 0x95B1, 73984 }, + { 0x95B2, 73988 }, + { 0x95B3, 73992 }, + { 0x95B4, 73996 }, + { 0x95B5, 74000 }, + { 0x95B6, 74004 }, + { 0x95B7, 74008 }, + { 0x95B8, 74012 }, + { 0x95B9, 74016 }, + { 0x95BA, 73552 }, + { 0x95BB, 73556 }, + { 0x95BC, 73560 }, + { 0x95BD, 73564 }, + { 0x95BE, 73568 }, + { 0x95BF, 73572 }, + { 0x95C0, 73576 }, + { 0x95C1, 73580 }, + { 0x95C2, 73584 }, + { 0x95C3, 73588 }, + { 0x95C4, 73592 }, + { 0x95C5, 73596 }, + { 0x95C6, 73600 }, + { 0x95C7, 73604 }, + { 0x95C8, 73608 }, + { 0x95C9, 73612 }, + { 0x95CA, 73616 }, + { 0x95CB, 73620 }, + { 0x95CC, 73624 }, + { 0x95CD, 73628 }, + { 0x95CE, 73632 }, + { 0x95CF, 73636 }, + { 0x95D0, 73640 }, + { 0x95D1, 73644 }, + { 0x95D2, 73648 }, + { 0x95D3, 73652 }, + { 0x95D4, 73246 }, + { 0x95D5, 73251 }, + { 0x95D6, 73256 }, + { 0x95D7, 73261 }, + { 0x95D8, 73266 }, + { 0x95D9, 73271 }, + { 0x95DA, 73276 }, + { 0x95DB, 73281 }, + { 0x95DC, 73286 }, + { 0x95DD, 73291 }, + { 0x95DE, 73296 }, + { 0x95DF, 73301 }, + { 0x95E0, 73306 }, + { 0x95E1, 73311 }, + { 0x95E2, 73316 }, + { 0x95E3, 73321 }, + { 0x95E4, 73326 }, + { 0x95E5, 73331 }, + { 0x95E6, 73336 }, + { 0x95E7, 73341 }, + { 0x95E8, 73346 }, + { 0x95E9, 73351 }, + { 0x95EA, 73356 }, + { 0x95EB, 73361 }, + { 0x95EC, 73366 }, + { 0x95ED, 73371 }, + { 0x95EE, 72324 }, + { 0x95EF, 72329 }, + { 0x95F0, 72334 }, + { 0x95F1, 72339 }, + { 0x95F2, 72344 }, + { 0x95F3, 72349 }, + { 0x95F4, 72354 }, + { 0x95F5, 72359 }, + { 0x95F6, 72364 }, + { 0x95F7, 72369 }, + { 0x95F8, 72374 }, + { 0x95F9, 72379 }, + { 0x95FA, 72384 }, + { 0x95FB, 72389 }, + { 0x95FC, 72394 }, + { 0x95FD, 72399 }, + { 0x95FE, 72404 }, + { 0x95FF, 72409 }, + { 0x9600, 72414 }, + { 0x9601, 72419 }, + { 0x9602, 72424 }, + { 0x9603, 72429 }, + { 0x9604, 72434 }, + { 0x9605, 72439 }, + { 0x9606, 72444 }, + { 0x9607, 72449 }, + { 0x9608, 73786 }, + { 0x9609, 73791 }, + { 0x960A, 73796 }, + { 0x960B, 73801 }, + { 0x960C, 73806 }, + { 0x960D, 73811 }, + { 0x960E, 73816 }, + { 0x960F, 73821 }, + { 0x9610, 73826 }, + { 0x9611, 73831 }, + { 0x9612, 73836 }, + { 0x9613, 73841 }, + { 0x9614, 73846 }, + { 0x9615, 73851 }, + { 0x9616, 73856 }, + { 0x9617, 73861 }, + { 0x9618, 73866 }, + { 0x9619, 73871 }, + { 0x961A, 73876 }, + { 0x961B, 73881 }, + { 0x961C, 73886 }, + { 0x961D, 73891 }, + { 0x961E, 73896 }, + { 0x961F, 73901 }, + { 0x9620, 73906 }, + { 0x9621, 73911 }, + { 0x9622, 73656 }, + { 0x9623, 73661 }, + { 0x9624, 73666 }, + { 0x9625, 73671 }, + { 0x9626, 73676 }, + { 0x9627, 73681 }, + { 0x9628, 73686 }, + { 0x9629, 73691 }, + { 0x962A, 73696 }, + { 0x962B, 73701 }, + { 0x962C, 73706 }, + { 0x962D, 73711 }, + { 0x962E, 73716 }, + { 0x962F, 73721 }, + { 0x9630, 73726 }, + { 0x9631, 73731 }, + { 0x9632, 73736 }, + { 0x9633, 73741 }, + { 0x9634, 73746 }, + { 0x9635, 73751 }, + { 0x9636, 73756 }, + { 0x9637, 73761 }, + { 0x9638, 73766 }, + { 0x9639, 73771 }, + { 0x963A, 73776 }, + { 0x963B, 73781 }, + { 0x963C, 72927 }, + { 0x963D, 72933 }, + { 0x963E, 72939 }, + { 0x963F, 72945 }, + { 0x9640, 72951 }, + { 0x9641, 72957 }, + { 0x9642, 72963 }, + { 0x9643, 72969 }, + { 0x9644, 72975 }, + { 0x9645, 72981 }, + { 0x9646, 72987 }, + { 0x9647, 72993 }, + { 0x9648, 72999 }, + { 0x9649, 73005 }, + { 0x964A, 73011 }, + { 0x964B, 73017 }, + { 0x964C, 73023 }, + { 0x964D, 73029 }, + { 0x964E, 73035 }, + { 0x964F, 73041 }, + { 0x9650, 73047 }, + { 0x9651, 73053 }, + { 0x9652, 73059 }, + { 0x9653, 73065 }, + { 0x9654, 73071 }, + { 0x9655, 73077 }, + { 0x9656, 72614 }, + { 0x9657, 72620 }, + { 0x9658, 72626 }, + { 0x9659, 72632 }, + { 0x965A, 72638 }, + { 0x965B, 72644 }, + { 0x965C, 72650 }, + { 0x965D, 72656 }, + { 0x965E, 72662 }, + { 0x965F, 72668 }, + { 0x9660, 72674 }, + { 0x9661, 72680 }, + { 0x9662, 72686 }, + { 0x9663, 72692 }, + { 0x9664, 72698 }, + { 0x9665, 72704 }, + { 0x9666, 72710 }, + { 0x9667, 72716 }, + { 0x9668, 72722 }, + { 0x9669, 72728 }, + { 0x966A, 72734 }, + { 0x966B, 72740 }, + { 0x966C, 72746 }, + { 0x966D, 72752 }, + { 0x966E, 72758 }, + { 0x966F, 72764 }, + { 0x9670, 72146 }, + { 0x9671, 72150 }, + { 0x9672, 72154 }, + { 0x9673, 72158 }, + { 0x9674, 72162 }, + { 0x9675, 72166 }, + { 0x9676, 72170 }, + { 0x9677, 72174 }, + { 0x9678, 72178 }, + { 0x9679, 72182 }, + { 0x967A, 72186 }, + { 0x967B, 72190 }, + { 0x967C, 72194 }, + { 0x967D, 72198 }, + { 0x967E, 72202 }, + { 0x967F, 72206 }, + { 0x9680, 72210 }, + { 0x9681, 72214 }, + { 0x9682, 72218 }, + { 0x9683, 72222 }, + { 0x9684, 72226 }, + { 0x9685, 72230 }, + { 0x9686, 72234 }, + { 0x9687, 72238 }, + { 0x9688, 72242 }, + { 0x9689, 72246 }, + { 0x968A, 72042 }, + { 0x968B, 72046 }, + { 0x968C, 72050 }, + { 0x968D, 72054 }, + { 0x968E, 72058 }, + { 0x968F, 72062 }, + { 0x9690, 72066 }, + { 0x9691, 72070 }, + { 0x9692, 72074 }, + { 0x9693, 72078 }, + { 0x9694, 72082 }, + { 0x9695, 72086 }, + { 0x9696, 72090 }, + { 0x9697, 72094 }, + { 0x9698, 72098 }, + { 0x9699, 72102 }, + { 0x969A, 72106 }, + { 0x969B, 72110 }, + { 0x969C, 72114 }, + { 0x969D, 72118 }, + { 0x969E, 72122 }, + { 0x969F, 72126 }, + { 0x96A0, 72130 }, + { 0x96A1, 72134 }, + { 0x96A2, 72138 }, + { 0x96A3, 72142 }, + { 0x96A4, 71411 }, + { 0x96A5, 71416 }, + { 0x96A8, 70834 }, + { 0x96A9, 70822 }, + { 0x96AA, 70842 }, + { 0x96AB, 70838 }, + { 0x96AC, 70875 }, + { 0x96AD, 70830 }, + { 0x96AE, 70802 }, + { 0x96AF, 70862 }, + { 0x96B0, 70826 }, + { 0x96B1, 70846 }, + { 0x96B2, 70850 }, + { 0x96B3, 70782 }, + { 0x96B4, 70786 }, + { 0x96B5, 70794 }, + { 0x96B6, 70879 }, + { 0x96B7, 70790 }, + { 0x96B8, 70814 }, + { 0x96B9, 70866 }, + { 0x96BA, 70858 }, + { 0x96BB, 70818 }, + { 0x96BC, 70883 }, + { 0x96BD, 70806 }, + { 0x96BE, 70798 }, + { 0x96BF, 70810 }, + { 0x96C0, 70854 }, + { 0x96C1, 69651 }, + { 0x96C2, 69810 }, + { 0x96C3, 69798 }, + { 0x96C4, 69823 }, + { 0x96C5, 69814 }, + { 0x96C6, 69851 }, + { 0x96C7, 69806 }, + { 0x96C8, 69778 }, + { 0x96C9, 69843 }, + { 0x96CA, 69802 }, + { 0x96CB, 69827 }, + { 0x96CC, 69831 }, + { 0x96CD, 69758 }, + { 0x96CE, 69762 }, + { 0x96CF, 69770 }, + { 0x96D0, 69855 }, + { 0x96D1, 69766 }, + { 0x96D2, 69790 }, + { 0x96D3, 69818 }, + { 0x96D4, 69839 }, + { 0x96D5, 69794 }, + { 0x96D6, 69859 }, + { 0x96D7, 69782 }, + { 0x96D8, 69774 }, + { 0x96D9, 69786 }, + { 0x96DA, 69835 }, + { 0x96DB, 71151 }, + { 0x96DC, 70887 }, + { 0x96DD, 69863 }, + { 0x96DE, 69647 }, + { 0x96DF, 69599 }, + { 0x96E0, 69603 }, + { 0x96E1, 69595 }, + { 0x96E2, 71593 }, + { 0x96E3, 71581 }, + { 0x96E4, 71601 }, + { 0x96E5, 71597 }, + { 0x96E6, 71630 }, + { 0x96E7, 71589 }, + { 0x96E8, 71561 }, + { 0x96E9, 71621 }, + { 0x96EA, 71585 }, + { 0x96EB, 71605 }, + { 0x96EC, 71609 }, + { 0x96ED, 71541 }, + { 0x96EE, 71545 }, + { 0x96EF, 71553 }, + { 0x96F0, 71634 }, + { 0x96F1, 71549 }, + { 0x96F2, 71573 }, + { 0x96F3, 71625 }, + { 0x96F4, 71617 }, + { 0x96F5, 71577 }, + { 0x96F6, 71638 }, + { 0x96F7, 71565 }, + { 0x96F8, 71557 }, + { 0x96F9, 71569 }, + { 0x96FA, 71613 }, + { 0x96FB, 71219 }, + { 0x96FC, 71374 }, + { 0x96FD, 71362 }, + { 0x96FE, 71387 }, + { 0x96FF, 71378 }, + { 0x9700, 71421 }, + { 0x9701, 71370 }, + { 0x9702, 71342 }, + { 0x9703, 71407 }, + { 0x9704, 71366 }, + { 0x9705, 71391 }, + { 0x9706, 71395 }, + { 0x9707, 71322 }, + { 0x9708, 71326 }, + { 0x9709, 71334 }, + { 0x970A, 71425 }, + { 0x970B, 71330 }, + { 0x970C, 71354 }, + { 0x970D, 71382 }, + { 0x970E, 71403 }, + { 0x970F, 71358 }, + { 0x9710, 71429 }, + { 0x9711, 71346 }, + { 0x9712, 71338 }, + { 0x9713, 71350 }, + { 0x9714, 71399 }, + { 0x9715, 71646 }, + { 0x9716, 71642 }, + { 0x9717, 71433 }, + { 0x9718, 71215 }, + { 0x9719, 71207 }, + { 0x971A, 71211 }, + { 0x971B, 71203 }, + { 0x971C, 70347 }, + { 0x971D, 70332 }, + { 0x971E, 70357 }, + { 0x971F, 70352 }, + { 0x9720, 70393 }, + { 0x9721, 70342 }, + { 0x9722, 70307 }, + { 0x9723, 70382 }, + { 0x9724, 70337 }, + { 0x9725, 70362 }, + { 0x9726, 70367 }, + { 0x9727, 70282 }, + { 0x9728, 70287 }, + { 0x9729, 70297 }, + { 0x972A, 70398 }, + { 0x972B, 70292 }, + { 0x972C, 70322 }, + { 0x972D, 70387 }, + { 0x972E, 70377 }, + { 0x972F, 70327 }, + { 0x9730, 70403 }, + { 0x9731, 70312 }, + { 0x9732, 70302 }, + { 0x9733, 70317 }, + { 0x9734, 70372 }, + { 0x9735, 69887 }, + { 0x9736, 70086 }, + { 0x9737, 70071 }, + { 0x9738, 70102 }, + { 0x9739, 70091 }, + { 0x973A, 70132 }, + { 0x973B, 70081 }, + { 0x973C, 70046 }, + { 0x973D, 70127 }, + { 0x973E, 70076 }, + { 0x973F, 70107 }, + { 0x9740, 70112 }, + { 0x9741, 70021 }, + { 0x9742, 70026 }, + { 0x9743, 70036 }, + { 0x9744, 70137 }, + { 0x9745, 70031 }, + { 0x9746, 70061 }, + { 0x9747, 70096 }, + { 0x9748, 70122 }, + { 0x9749, 70066 }, + { 0x974A, 70142 }, + { 0x974B, 70051 }, + { 0x974C, 70041 }, + { 0x974D, 70056 }, + { 0x974E, 70117 }, + { 0x974F, 70413 }, + { 0x9750, 70408 }, + { 0x9751, 70147 }, + { 0x9752, 69882 }, + { 0x9753, 69872 }, + { 0x9754, 69877 }, + { 0x9755, 69867 }, + { 0x9756, 73441 }, + { 0x9757, 73426 }, + { 0x9758, 73451 }, + { 0x9759, 73446 }, + { 0x975A, 73487 }, + { 0x975B, 73436 }, + { 0x975C, 73401 }, + { 0x975D, 73476 }, + { 0x975E, 73431 }, + { 0x975F, 73456 }, + { 0x9760, 73461 }, + { 0x9761, 73376 }, + { 0x9762, 73381 }, + { 0x9763, 73391 }, + { 0x9764, 73492 }, + { 0x9765, 73386 }, + { 0x9766, 73416 }, + { 0x9767, 73481 }, + { 0x9768, 73471 }, + { 0x9769, 73421 }, + { 0x976A, 73497 }, + { 0x976B, 73406 }, + { 0x976C, 73396 }, + { 0x976D, 73411 }, + { 0x976E, 73466 }, + { 0x976F, 72320 }, + { 0x9770, 72519 }, + { 0x9771, 72504 }, + { 0x9772, 72535 }, + { 0x9773, 72524 }, + { 0x9774, 72565 }, + { 0x9775, 72514 }, + { 0x9776, 72479 }, + { 0x9777, 72560 }, + { 0x9778, 72509 }, + { 0x9779, 72540 }, + { 0x977A, 72545 }, + { 0x977B, 72454 }, + { 0x977C, 72459 }, + { 0x977D, 72469 }, + { 0x977E, 72570 }, + { 0x977F, 72464 }, + { 0x9780, 72494 }, + { 0x9781, 72529 }, + { 0x9782, 72555 }, + { 0x9783, 72499 }, + { 0x9784, 72575 }, + { 0x9785, 72484 }, + { 0x9786, 72474 }, + { 0x9787, 72489 }, + { 0x9788, 72550 }, + { 0x9789, 73507 }, + { 0x978A, 73502 }, + { 0x978B, 72580 }, + { 0x978C, 72315 }, + { 0x978D, 72255 }, + { 0x978E, 72260 }, + { 0x978F, 72250 }, + { 0x9790, 73161 }, + { 0x9791, 73143 }, + { 0x9792, 73173 }, + { 0x9793, 73167 }, + { 0x9794, 73216 }, + { 0x9795, 73155 }, + { 0x9796, 73113 }, + { 0x9797, 73203 }, + { 0x9798, 73149 }, + { 0x9799, 73179 }, + { 0x979A, 73185 }, + { 0x979B, 73083 }, + { 0x979C, 73089 }, + { 0x979D, 73101 }, + { 0x979E, 73222 }, + { 0x979F, 73095 }, + { 0x97A0, 73131 }, + { 0x97A1, 73209 }, + { 0x97A2, 73197 }, + { 0x97A3, 73137 }, + { 0x97A4, 73228 }, + { 0x97A5, 73119 }, + { 0x97A6, 73107 }, + { 0x97A7, 73125 }, + { 0x97A8, 73191 }, + { 0x97A9, 72609 }, + { 0x97AA, 72848 }, + { 0x97AB, 72830 }, + { 0x97AC, 72867 }, + { 0x97AD, 72854 }, + { 0x97AE, 72903 }, + { 0x97AF, 72842 }, + { 0x97B0, 72800 }, + { 0x97B1, 72897 }, + { 0x97B2, 72836 }, + { 0x97B3, 72873 }, + { 0x97B4, 72879 }, + { 0x97B5, 72770 }, + { 0x97B6, 72776 }, + { 0x97B7, 72788 }, + { 0x97B8, 72909 }, + { 0x97B9, 72782 }, + { 0x97BA, 72818 }, + { 0x97BB, 72860 }, + { 0x97BC, 72891 }, + { 0x97BD, 72824 }, + { 0x97BE, 72915 }, + { 0x97BF, 72806 }, + { 0x97C0, 72794 }, + { 0x97C1, 72812 }, + { 0x97C2, 72885 }, + { 0x97C3, 73240 }, + { 0x97C4, 73234 }, + { 0x97C5, 72921 }, + { 0x97C6, 72603 }, + { 0x97C7, 72591 }, + { 0x97C8, 72597 }, + { 0x97C9, 72585 }, + { 0x97CA, 70871 }, + { 0x97CB, 69847 }, + { 0x97CE, 69631 }, + { 0x97CF, 69607 }, + { 0x97D0, 69615 }, + { 0x97D1, 69643 }, + { 0x97D2, 69623 }, + { 0x97D3, 69619 }, + { 0x97D4, 69611 }, + { 0x97D5, 69639 }, + { 0x97D6, 69635 }, + { 0x97D7, 69627 }, + { 0x97D8, 74044 }, + { 0x97D9, 74020 }, + { 0x97DA, 74028 }, + { 0x97DB, 74056 }, + { 0x97DC, 74036 }, + { 0x97DD, 74032 }, + { 0x97DE, 74024 }, + { 0x97DF, 74052 }, + { 0x97E0, 74048 }, + { 0x97E1, 74040 }, + { 0x97E2, 73536 }, + { 0x97E3, 73512 }, + { 0x97E4, 73520 }, + { 0x97E5, 73548 }, + { 0x97E6, 73528 }, + { 0x97E7, 73524 }, + { 0x97E8, 73516 }, + { 0x97E9, 73544 }, + { 0x97EA, 73540 }, + { 0x97EB, 73532 }, + { 0x97EC, 72295 }, + { 0x97ED, 72265 }, + { 0x97EE, 72275 }, + { 0x97EF, 72310 }, + { 0x97F0, 72285 }, + { 0x97F1, 72280 }, + { 0x97F2, 72270 }, + { 0x97F3, 72305 }, + { 0x97F4, 72300 }, + { 0x97F5, 72290 }, + { 0x97F6, 72026 }, + { 0x97F7, 72002 }, + { 0x97F8, 72010 }, + { 0x97F9, 72038 }, + { 0x97FA, 72018 }, + { 0x97FB, 72014 }, + { 0x97FC, 72006 }, + { 0x97FD, 72034 }, + { 0x97FE, 72030 }, + { 0x97FF, 72022 }, + { 0xA000, 41048 }, + { 0xA001, 41145 }, + { 0xA002, 41100 }, + { 0xA003, 41126 }, + { 0xA004, 41011 }, + { 0xA005, 41119 }, + { 0xA006, 41164 }, + { 0xA007, 41006 }, + { 0xA008, 41040 }, + { 0xA009, 41159 }, + { 0xA00A, 41077 }, + { 0xA00B, 41062 }, + { 0xA00C, 41025 }, + { 0xA00D, 41140 }, + { 0xA00E, 41114 }, + { 0xA00F, 41092 }, + { 0xA010, 40996 }, + { 0xA011, 41030 }, + { 0xA012, 41149 }, + { 0xA013, 41067 }, + { 0xA014, 41052 }, + { 0xA015, 41015 }, + { 0xA016, 41130 }, + { 0xA017, 41104 }, + { 0xA018, 41082 }, + { 0xA019, 41001 }, + { 0xA01A, 41035 }, + { 0xA01B, 41154 }, + { 0xA01C, 41072 }, + { 0xA01D, 41057 }, + { 0xA01E, 41020 }, + { 0xA01F, 41135 }, + { 0xA020, 41109 }, + { 0xA021, 41087 }, + { 0xA022, 41097 }, + { 0xA023, 41174 }, + { 0xA024, 41171 }, + { 0xA025, 41186 }, + { 0xA026, 41177 }, + { 0xA027, 41180 }, + { 0xA028, 41168 }, + { 0xA029, 41183 }, + { 0xA02A, 41123 }, + { 0xA02B, 41045 }, + { 0xA030, 31231 }, + { 0xA031, 31382 }, + { 0xA032, 31385 }, + { 0xA033, 31388 }, + { 0xA034, 31391 }, + { 0xA035, 31394 }, + { 0xA036, 31397 }, + { 0xA037, 31400 }, + { 0xA038, 31403 }, + { 0xA039, 31406 }, + { 0xA03A, 31409 }, + { 0xA03B, 31412 }, + { 0xA03C, 31415 }, + { 0xA03D, 31418 }, + { 0xA03E, 31421 }, + { 0xA03F, 31424 }, + { 0xA040, 31427 }, + { 0xA041, 31430 }, + { 0xA042, 31433 }, + { 0xA043, 31436 }, + { 0xA044, 31439 }, + { 0xA045, 31442 }, + { 0xA046, 31445 }, + { 0xA047, 31448 }, + { 0xA048, 31451 }, + { 0xA049, 31454 }, + { 0xA04A, 31457 }, + { 0xA04B, 31460 }, + { 0xA04C, 31463 }, + { 0xA04D, 31466 }, + { 0xA04E, 31469 }, + { 0xA04F, 31472 }, + { 0xA050, 31475 }, + { 0xA051, 31478 }, + { 0xA052, 31481 }, + { 0xA053, 31484 }, + { 0xA054, 31487 }, + { 0xA055, 31490 }, + { 0xA056, 31493 }, + { 0xA057, 31496 }, + { 0xA058, 31499 }, + { 0xA059, 31502 }, + { 0xA05A, 31505 }, + { 0xA05B, 31508 }, + { 0xA05C, 31511 }, + { 0xA05D, 31514 }, + { 0xA05E, 31517 }, + { 0xA05F, 31520 }, + { 0xA060, 31523 }, + { 0xA061, 31526 }, + { 0xA062, 31227 }, + { 0xA063, 31235 }, + { 0xA064, 31238 }, + { 0xA065, 31241 }, + { 0xA066, 31244 }, + { 0xA067, 31247 }, + { 0xA068, 31250 }, + { 0xA069, 31253 }, + { 0xA06A, 31256 }, + { 0xA06B, 31259 }, + { 0xA06C, 31262 }, + { 0xA06D, 31265 }, + { 0xA06E, 31268 }, + { 0xA06F, 31271 }, + { 0xA070, 31274 }, + { 0xA071, 31277 }, + { 0xA072, 31280 }, + { 0xA073, 31283 }, + { 0xA074, 31286 }, + { 0xA075, 31289 }, + { 0xA076, 31292 }, + { 0xA077, 31295 }, + { 0xA078, 31298 }, + { 0xA079, 31301 }, + { 0xA07A, 31304 }, + { 0xA07B, 31307 }, + { 0xA07C, 31310 }, + { 0xA07D, 31313 }, + { 0xA07E, 31316 }, + { 0xA07F, 31319 }, + { 0xA080, 31322 }, + { 0xA081, 31325 }, + { 0xA082, 31328 }, + { 0xA083, 31331 }, + { 0xA084, 31334 }, + { 0xA085, 31337 }, + { 0xA086, 31340 }, + { 0xA087, 31343 }, + { 0xA088, 31346 }, + { 0xA089, 31349 }, + { 0xA08A, 31352 }, + { 0xA08B, 31355 }, + { 0xA08C, 31358 }, + { 0xA08D, 31361 }, + { 0xA08E, 31364 }, + { 0xA08F, 31367 }, + { 0xA090, 31370 }, + { 0xA091, 31373 }, + { 0xA092, 31376 }, + { 0xA093, 31379 }, + { 0xC001, 53726 }, + { 0xC020, 7517 }, + { 0xC021, 7564 }, + { 0xC022, 7551 }, + { 0xC023, 7527 }, + { 0xC024, 7521 }, + { 0xC025, 7530 }, + { 0xC026, 7546 }, + { 0xC027, 7556 }, + { 0xC028, 7203 }, + { 0xC029, 7514 }, + { 0xC02A, 7538 }, + { 0xC02B, 7206 }, + { 0xC02C, 7211 }, + { 0xC02D, 7570 }, + { 0xC02E, 7192 }, + { 0xC02F, 7536 }, + { 0xC030, 7231 }, + { 0xC031, 7213 }, + { 0xC032, 7219 }, + { 0xC033, 7240 }, + { 0xC034, 7225 }, + { 0xC035, 7222 }, + { 0xC036, 7216 }, + { 0xC037, 7237 }, + { 0xC038, 7234 }, + { 0xC039, 7228 }, + { 0xC03A, 7209 }, + { 0xC03B, 7554 }, + { 0xC03C, 7548 }, + { 0xC03D, 7524 }, + { 0xC03E, 7567 }, + { 0xC03F, 7540 }, + { 0xC040, 7561 }, + { 0xC041, 7376 }, + { 0xC042, 7381 }, + { 0xC043, 7386 }, + { 0xC044, 7391 }, + { 0xC045, 7396 }, + { 0xC046, 7401 }, + { 0xC047, 7406 }, + { 0xC048, 7411 }, + { 0xC049, 7416 }, + { 0xC04A, 7421 }, + { 0xC04B, 7426 }, + { 0xC04C, 7431 }, + { 0xC04D, 7436 }, + { 0xC04E, 7441 }, + { 0xC04F, 7446 }, + { 0xC050, 7451 }, + { 0xC051, 7456 }, + { 0xC052, 7461 }, + { 0xC053, 7466 }, + { 0xC054, 7471 }, + { 0xC055, 7476 }, + { 0xC056, 7481 }, + { 0xC057, 7486 }, + { 0xC058, 7491 }, + { 0xC059, 7496 }, + { 0xC05A, 7501 }, + { 0xC05B, 7199 }, + { 0xC05C, 7533 }, + { 0xC05D, 7510 }, + { 0xC05E, 7558 }, + { 0xC05F, 7189 }, + { 0xC060, 7243 }, + { 0xC061, 7246 }, + { 0xC062, 7251 }, + { 0xC063, 7256 }, + { 0xC064, 7261 }, + { 0xC065, 7266 }, + { 0xC066, 7271 }, + { 0xC067, 7276 }, + { 0xC068, 7281 }, + { 0xC069, 7286 }, + { 0xC06A, 7291 }, + { 0xC06B, 7296 }, + { 0xC06C, 7301 }, + { 0xC06D, 7306 }, + { 0xC06E, 7311 }, + { 0xC06F, 7316 }, + { 0xC070, 7321 }, + { 0xC071, 7326 }, + { 0xC072, 7331 }, + { 0xC073, 7336 }, + { 0xC074, 7341 }, + { 0xC075, 7346 }, + { 0xC076, 7351 }, + { 0xC077, 7356 }, + { 0xC078, 7361 }, + { 0xC079, 7366 }, + { 0xC07A, 7371 }, + { 0xC07B, 7195 }, + { 0xC07C, 7543 }, + { 0xC07D, 7506 }, + { 0xC07E, 7519 }, + { 0xC07F, 30315 }, + { 0xC100, 66346 }, + { 0xC101, 66348 }, + { 0xC102, 66350 }, + { 0xC103, 66352 }, + { 0xC104, 66354 }, + { 0xC105, 66356 }, + { 0xC106, 66358 }, + { 0xC107, 66360 }, + { 0xC108, 66362 }, + { 0xC109, 66364 }, + { 0xC10A, 66366 }, + { 0xC10B, 66368 }, + { 0xC10C, 66370 }, + { 0xC10D, 66372 }, + { 0xC10E, 66374 }, + { 0xC10F, 66376 }, + { 0xC110, 66378 }, + { 0xC111, 66380 }, + { 0xC112, 66382 }, + { 0xC113, 66384 }, + { 0xC114, 66386 }, + { 0xC115, 66388 }, + { 0xC116, 66390 }, + { 0xC117, 66392 }, + { 0xC118, 66394 }, + { 0xC119, 66396 }, + { 0xC11A, 66398 }, + { 0xC11B, 66400 }, + { 0xC11C, 66402 }, + { 0xC11D, 66404 }, + { 0xC11E, 66406 }, + { 0xC11F, 66408 }, + { 0xC120, 66410 }, + { 0xC121, 66412 }, + { 0xC122, 66414 }, + { 0xC123, 66416 }, + { 0xC124, 66418 }, + { 0xC125, 66420 }, + { 0xC126, 66422 }, + { 0xC127, 66424 }, + { 0xC128, 66426 }, + { 0xC129, 66428 }, + { 0xC12A, 66430 }, + { 0xC12B, 66432 }, + { 0xC12C, 66434 }, + { 0xC12D, 66436 }, + { 0xC12E, 66438 }, + { 0xC12F, 66440 }, + { 0xC130, 66442 }, + { 0xC131, 66444 }, + { 0xC132, 66446 }, + { 0xC133, 66448 }, + { 0xC134, 66450 }, + { 0xC135, 66452 }, + { 0xC136, 66454 }, + { 0xC137, 66456 }, + { 0xC138, 66458 }, + { 0xC139, 66460 }, + { 0xC13A, 66462 }, + { 0xC13B, 66464 }, + { 0xC13C, 66466 }, + { 0xC13D, 66468 }, + { 0xC13E, 66470 }, + { 0xC13F, 66472 }, + { 0xC140, 66474 }, + { 0xC141, 66476 }, + { 0xC142, 66478 }, + { 0xC143, 66480 }, + { 0xC144, 66482 }, + { 0xC145, 66484 }, + { 0xC146, 66486 }, + { 0xC147, 66488 }, + { 0xC148, 66490 }, + { 0xC149, 66492 }, + { 0xC14A, 66494 }, + { 0xC14B, 66496 }, + { 0xC14C, 66498 }, + { 0xC14D, 66500 }, + { 0xC14E, 66502 }, + { 0xC14F, 66504 }, + { 0xC150, 66506 }, + { 0xC151, 66508 }, + { 0xC152, 66510 }, + { 0xC153, 66512 }, + { 0xC154, 66514 }, + { 0xC155, 66516 }, + { 0xC156, 66518 }, + { 0xC157, 66520 }, + { 0xC158, 66522 }, + { 0xC159, 66524 }, + { 0xC15A, 66526 }, + { 0xC15B, 66528 }, + { 0xC15C, 66530 }, + { 0xC15D, 66532 }, + { 0xC15E, 66534 }, + { 0xC15F, 66536 }, + { 0xC160, 66538 }, + { 0xC161, 66540 }, + { 0xC162, 66542 }, + { 0xC163, 66544 }, + { 0xC164, 66546 }, + { 0xC165, 66548 }, + { 0xC166, 66550 }, + { 0xC167, 66552 }, + { 0xC168, 66554 }, + { 0xC169, 66556 }, + { 0xC16A, 66558 }, + { 0xC16B, 66560 }, + { 0xC16C, 66562 }, + { 0xC16D, 66564 }, + { 0xC16E, 66566 }, + { 0xC16F, 66568 }, + { 0xC170, 66570 }, + { 0xC171, 66572 }, + { 0xC172, 66574 }, + { 0xC173, 66576 }, + { 0xC174, 66578 }, + { 0xC175, 66580 }, + { 0xC176, 66582 }, + { 0xC177, 66584 }, + { 0xC178, 66586 }, + { 0xC179, 66588 }, + { 0xC17A, 66590 }, + { 0xC17B, 66592 }, + { 0xC17C, 66594 }, + { 0xC17D, 66596 }, + { 0xC17E, 66598 }, + { 0xC17F, 66600 }, + { 0xC180, 66602 }, + { 0xC181, 66604 }, + { 0xC182, 66606 }, + { 0xC183, 66608 }, + { 0xC184, 66610 }, + { 0xC185, 66612 }, + { 0xC186, 66614 }, + { 0xC187, 66616 }, + { 0xC188, 66618 }, + { 0xC189, 66620 }, + { 0xC18A, 66622 }, + { 0xC18B, 66624 }, + { 0xC18C, 66626 }, + { 0xC18D, 66628 }, + { 0xC18E, 66630 }, + { 0xC18F, 66632 }, + { 0xC190, 66634 }, + { 0xC191, 66636 }, + { 0xC192, 66638 }, + { 0xC193, 66640 }, + { 0xC194, 66642 }, + { 0xC195, 66644 }, + { 0xC196, 66646 }, + { 0xC197, 66648 }, + { 0xC198, 66650 }, + { 0xC199, 66652 }, + { 0xC19A, 66654 }, + { 0xC19B, 66656 }, + { 0xC19C, 66658 }, + { 0xC19D, 66660 }, + { 0xC19E, 66662 }, + { 0xC19F, 66664 }, + { 0xC1A0, 66666 }, + { 0xC1A1, 66668 }, + { 0xC1A2, 66670 }, + { 0xC1A3, 66672 }, + { 0xC1A4, 66674 }, + { 0xC1A5, 66676 }, + { 0xC1A6, 66678 }, + { 0xC1A7, 66680 }, + { 0xC1A8, 66682 }, + { 0xC1A9, 66684 }, + { 0xC1AA, 66686 }, + { 0xC1AB, 66688 }, + { 0xC1AC, 66690 }, + { 0xC1AD, 66692 }, + { 0xC1AE, 66694 }, + { 0xC1AF, 66696 }, + { 0xC1B0, 66698 }, + { 0xC1B1, 66700 }, + { 0xC1B2, 66702 }, + { 0xC1B3, 66704 }, + { 0xC1B4, 66706 }, + { 0xC1B5, 66708 }, + { 0xC1B6, 66710 }, + { 0xC1B7, 66712 }, + { 0xC1B8, 66714 }, + { 0xC1B9, 66716 }, + { 0xC1BA, 66718 }, + { 0xC1BB, 66720 }, + { 0xC1BC, 66722 }, + { 0xC1BD, 66724 }, + { 0xC1BE, 66726 }, + { 0xC1BF, 66728 }, + { 0xC1C0, 66730 }, + { 0xC1C1, 66732 }, + { 0xC1C2, 66734 }, + { 0xC1C3, 66736 }, + { 0xC1C4, 66738 }, + { 0xC1C5, 66740 }, + { 0xC1C6, 66742 }, + { 0xC1C7, 66744 }, + { 0xC1C8, 66746 }, + { 0xC1C9, 66748 }, + { 0xC1CA, 66750 }, + { 0xC1CB, 66752 }, + { 0xC1CC, 66754 }, + { 0xC1CD, 66756 }, + { 0xC1CE, 66758 }, + { 0xC1CF, 66760 }, + { 0xC1D0, 66762 }, + { 0xC1D1, 66764 }, + { 0xC1D2, 66766 }, + { 0xC1D3, 66768 }, + { 0xC1D4, 66770 }, + { 0xC1D5, 66772 }, + { 0xC1D6, 66774 }, + { 0xC1D7, 66776 }, + { 0xC1D8, 66778 }, + { 0xC1D9, 66780 }, + { 0xC1DA, 66782 }, + { 0xC1DB, 66784 }, + { 0xC1DC, 66786 }, + { 0xC1DD, 66788 }, + { 0xC1DE, 66790 }, + { 0xC1DF, 66792 }, + { 0xC1E0, 66794 }, + { 0xC1E1, 66796 }, + { 0xC1E2, 66798 }, + { 0xC1E3, 66800 }, + { 0xC1E4, 66802 }, + { 0xC1E5, 66804 }, + { 0xC1E6, 66806 }, + { 0xC1E7, 66808 }, + { 0xC1E8, 66810 }, + { 0xC1E9, 66812 }, + { 0xC1EA, 66814 }, + { 0xC1EB, 66816 }, + { 0xC1EC, 66818 }, + { 0xC1ED, 66820 }, + { 0xC1EE, 66822 }, + { 0xC1EF, 66824 }, +}; +#define UNICODE_CHARNAME_MAX_LENGTH 83 +#define UNICODE_CHARNAME_MAX_WORDS 13 diff --git a/lib/uninorm.h b/lib/uninorm.h new file mode 100644 index 00000000..6850967e --- /dev/null +++ b/lib/uninorm.h @@ -0,0 +1,248 @@ +/* Normalization forms (composition and decomposition) of Unicode strings. + Copyright (C) 2001-2002, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNINORM_H +#define _UNINORM_H + +/* Get LIBUNISTRING_DLL_VARIABLE. */ +#include + +/* Get size_t. */ +#include + +#include "unitypes.h" + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Conventions: + + All functions prefixed with u8_ operate on UTF-8 encoded strings. + Their unit is an uint8_t (1 byte). + + All functions prefixed with u16_ operate on UTF-16 encoded strings. + Their unit is an uint16_t (a 2-byte word). + + All functions prefixed with u32_ operate on UCS-4 encoded strings. + Their unit is an uint32_t (a 4-byte word). + + All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly + n units. + + Functions returning a string result take a (resultbuf, lengthp) argument + pair. If resultbuf is not NULL and the result fits into *lengthp units, + it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly + allocated string is returned. In both cases, *lengthp is set to the + length (number of units) of the returned string. In case of error, + NULL is returned and errno is set. */ + + +enum +{ + UC_DECOMP_CANONICAL,/* Canonical decomposition. */ + UC_DECOMP_FONT, /* A font variant (e.g. a blackletter form). */ + UC_DECOMP_NOBREAK, /* A no-break version of a space or hyphen. */ + UC_DECOMP_INITIAL, /* An initial presentation form (Arabic). */ + UC_DECOMP_MEDIAL, /* A medial presentation form (Arabic). */ + UC_DECOMP_FINAL, /* A final presentation form (Arabic). */ + UC_DECOMP_ISOLATED,/* An isolated presentation form (Arabic). */ + UC_DECOMP_CIRCLE, /* An encircled form. */ + UC_DECOMP_SUPER, /* A superscript form. */ + UC_DECOMP_SUB, /* A subscript form. */ + UC_DECOMP_VERTICAL,/* A vertical layout presentation form. */ + UC_DECOMP_WIDE, /* A wide (or zenkaku) compatibility character. */ + UC_DECOMP_NARROW, /* A narrow (or hankaku) compatibility character. */ + UC_DECOMP_SMALL, /* A small variant form (CNS compatibility). */ + UC_DECOMP_SQUARE, /* A CJK squared font variant. */ + UC_DECOMP_FRACTION,/* A vulgar fraction form. */ + UC_DECOMP_COMPAT /* Otherwise unspecified compatibility character. */ +}; + +/* Maximum size of decomposition of a single Unicode character. */ +#define UC_DECOMPOSITION_MAX_LENGTH 32 + +/* Return the character decomposition mapping of a Unicode character. + DECOMPOSITION must point to an array of at least UC_DECOMPOSITION_MAX_LENGTH + ucs_t elements. + When a decomposition exists, DECOMPOSITION[0..N-1] and *DECOMP_TAG are + filled and N is returned. Otherwise -1 is returned. */ +extern int + uc_decomposition (ucs4_t uc, int *decomp_tag, ucs4_t *decomposition); + +/* Return the canonical character decomposition mapping of a Unicode character. + DECOMPOSITION must point to an array of at least UC_DECOMPOSITION_MAX_LENGTH + ucs_t elements. + When a decomposition exists, DECOMPOSITION[0..N-1] is filled and N is + returned. Otherwise -1 is returned. */ +extern int + uc_canonical_decomposition (ucs4_t uc, ucs4_t *decomposition); + + +/* Attempt to combine the Unicode characters uc1, uc2. + uc1 is known to have canonical combining class 0. + Return the combination of uc1 and uc2, if it exists. + Return 0 otherwise. + Not all decompositions can be recombined using this function. See the + Unicode file CompositionExclusions.txt for details. */ +extern ucs4_t + uc_composition (ucs4_t uc1, ucs4_t uc2); + + +/* An object of type uninorm_t denotes a Unicode normalization form. */ +struct unicode_normalization_form; +typedef const struct unicode_normalization_form *uninorm_t; + +/* UNINORM_NFD: Normalization form D: canonical decomposition. */ +extern LIBUNISTRING_DLL_VARIABLE const struct unicode_normalization_form uninorm_nfd; +#define UNINORM_NFD (&uninorm_nfd) + +/* UNINORM_NFC: Normalization form C: canonical decomposition, then + canonical composition. */ +extern LIBUNISTRING_DLL_VARIABLE const struct unicode_normalization_form uninorm_nfc; +#define UNINORM_NFC (&uninorm_nfc) + +/* UNINORM_NFKD: Normalization form KD: compatibility decomposition. */ +extern LIBUNISTRING_DLL_VARIABLE const struct unicode_normalization_form uninorm_nfkd; +#define UNINORM_NFKD (&uninorm_nfkd) + +/* UNINORM_NFKC: Normalization form KC: compatibility decomposition, then + canonical composition. */ +extern LIBUNISTRING_DLL_VARIABLE const struct unicode_normalization_form uninorm_nfkc; +#define UNINORM_NFKC (&uninorm_nfkc) + +/* Test whether a normalization form does compatibility decomposition. */ +#define uninorm_is_compat_decomposing(nf) \ + ((* (const unsigned int *) (nf) >> 0) & 1) + +/* Test whether a normalization form includes canonical composition. */ +#define uninorm_is_composing(nf) \ + ((* (const unsigned int *) (nf) >> 1) & 1) + +/* Return the decomposing variant of a normalization form. + This maps NFC,NFD -> NFD and NFKC,NFKD -> NFKD. */ +extern uninorm_t uninorm_decomposing_form (uninorm_t nf); + + +/* Return the specified normalization form of a string. */ +extern uint8_t * + u8_normalize (uninorm_t nf, const uint8_t *s, size_t n, + uint8_t *resultbuf, size_t *lengthp); +extern uint16_t * + u16_normalize (uninorm_t nf, const uint16_t *s, size_t n, + uint16_t *resultbuf, size_t *lengthp); +extern uint32_t * + u32_normalize (uninorm_t nf, const uint32_t *s, size_t n, + uint32_t *resultbuf, size_t *lengthp); + + +/* Compare S1 and S2, ignoring differences in normalization. + NF must be either UNINORM_NFD or UNINORM_NFKD. + If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and + return 0. Upon failure, return -1 with errno set. */ +extern int + u8_normcmp (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, + uninorm_t nf, int *resultp); +extern int + u16_normcmp (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, + uninorm_t nf, int *resultp); +extern int + u32_normcmp (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, + uninorm_t nf, int *resultp); + + +/* Converts the string S of length N to a NUL-terminated byte sequence, in such + a way that comparing uN_normxfrm (S1) and uN_normxfrm (S2) with uN_cmp2() is + equivalent to comparing S1 and S2 with uN_normcoll(). + NF must be either UNINORM_NFC or UNINORM_NFKC. */ +extern char * + u8_normxfrm (const uint8_t *s, size_t n, uninorm_t nf, + char *resultbuf, size_t *lengthp); +extern char * + u16_normxfrm (const uint16_t *s, size_t n, uninorm_t nf, + char *resultbuf, size_t *lengthp); +extern char * + u32_normxfrm (const uint32_t *s, size_t n, uninorm_t nf, + char *resultbuf, size_t *lengthp); + + +/* Compare S1 and S2, ignoring differences in normalization, using the + collation rules of the current locale. + NF must be either UNINORM_NFC or UNINORM_NFKC. + If successful, set *RESULTP to -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2, and + return 0. Upon failure, return -1 with errno set. */ +extern int + u8_normcoll (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2, + uninorm_t nf, int *resultp); +extern int + u16_normcoll (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2, + uninorm_t nf, int *resultp); +extern int + u32_normcoll (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2, + uninorm_t nf, int *resultp); + + +/* Normalization of a stream of Unicode characters. + + A "stream of Unicode characters" is essentially a function that accepts an + ucs4_t argument repeatedly, optionally combined with a function that + "flushes" the stream. */ + +/* Data type of a stream of Unicode characters that normalizes its input + according to a given normalization form and passes the normalized character + sequence to the encapsulated stream of Unicode characters. */ +struct uninorm_filter; + +/* Create and return a normalization filter for Unicode characters. + The pair (stream_func, stream_data) is the encapsulated stream. + stream_func (stream_data, uc) receives the Unicode character uc + and returns 0 if successful, or -1 with errno set upon failure. + Return the new filter, or NULL with errno set upon failure. */ +extern struct uninorm_filter * + uninorm_filter_create (uninorm_t nf, + int (*stream_func) (void *stream_data, ucs4_t uc), + void *stream_data); + +/* Stuff a Unicode character into a normalizing filter. + Return 0 if successful, or -1 with errno set upon failure. */ +extern int + uninorm_filter_write (struct uninorm_filter *filter, ucs4_t uc); + +/* Bring data buffered in the filter to its destination, the encapsulated + stream. + Return 0 if successful, or -1 with errno set upon failure. + Note! If after calling this function, additional characters are written + into the filter, the resulting character sequence in the encapsulated stream + will not necessarily be normalized. */ +extern int + uninorm_filter_flush (struct uninorm_filter *filter); + +/* Bring data buffered in the filter to its destination, the encapsulated + stream, then close and free the filter. + Return 0 if successful, or -1 with errno set upon failure. */ +extern int + uninorm_filter_free (struct uninorm_filter *filter); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _UNINORM_H */ diff --git a/lib/uninorm/canonical-decomposition.c b/lib/uninorm/canonical-decomposition.c new file mode 100644 index 00000000..210b74b9 --- /dev/null +++ b/lib/uninorm/canonical-decomposition.c @@ -0,0 +1,108 @@ +/* Canonical decomposition of Unicode characters. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include + +#include "decomposition-table.h" + +int +uc_canonical_decomposition (ucs4_t uc, ucs4_t *decomposition) +{ + if (uc >= 0xAC00 && uc < 0xD7A4) + { + /* Hangul syllable. See Unicode standard, chapter 3, section + "Hangul Syllable Decomposition", See also the clarification at + , section + "Clarification of Hangul Jamo Handling". */ + unsigned int t; + + uc -= 0xAC00; + t = uc % 28; + + if (t == 0) + { + unsigned int v, l; + + uc = uc / 28; + v = uc % 21; + l = uc / 21; + + decomposition[0] = 0x1100 + l; + decomposition[1] = 0x1161 + v; + return 2; + } + else + { +#if 1 /* Return the pairwise decomposition, not the full decomposition. */ + decomposition[0] = 0xAC00 + uc - t; /* = 0xAC00 + (l * 21 + v) * 28; */ + decomposition[1] = 0x11A7 + t; + return 2; +#else + unsigned int v, l; + + uc = uc / 28; + v = uc % 21; + l = uc / 21; + + decomposition[0] = 0x1100 + l; + decomposition[1] = 0x1161 + v; + decomposition[2] = 0x11A7 + t; + return 3; +#endif + } + } + else if (uc < 0x110000) + { + unsigned short entry = decomp_index (uc); + /* An entry of (unsigned short)(-1) denotes an absent entry. + Otherwise, bit 15 of the entry tells whether the decomposition + is a canonical one. */ + if (entry < 0x8000) + { + const unsigned char *p; + unsigned int element; + unsigned int length; + + p = &gl_uninorm_decomp_chars_table[3 * entry]; + element = (p[0] << 16) | (p[1] << 8) | p[2]; + /* The first element has 5 bits for the decomposition type. */ + if (((element >> 18) & 0x1f) != UC_DECOMP_CANONICAL) + abort (); + length = 1; + for (;;) + { + /* Every element has an 18 bits wide Unicode code point. */ + *decomposition = element & 0x3ffff; + /* Bit 23 tells whether there are more elements, */ + if ((element & (1 << 23)) == 0) + break; + p += 3; + element = (p[0] << 16) | (p[1] << 8) | p[2]; + decomposition++; + length++; + } + return length; + } + } + return -1; +} + diff --git a/lib/uninorm/compat-decomposition.c b/lib/uninorm/compat-decomposition.c new file mode 100644 index 00000000..19ec87e3 --- /dev/null +++ b/lib/uninorm/compat-decomposition.c @@ -0,0 +1,31 @@ +/* Compatibility decomposition of Unicode characters. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "decompose-internal.h" + +#include "uninorm.h" + +int +uc_compat_decomposition (ucs4_t uc, ucs4_t *decomposition) +{ + int tag; + + return uc_decomposition (uc, &tag, decomposition); +} diff --git a/lib/uninorm/composition-table.gperf b/lib/uninorm/composition-table.gperf new file mode 100644 index 00000000..f7f0febc --- /dev/null +++ b/lib/uninorm/composition-table.gperf @@ -0,0 +1,958 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Canonical composition of Unicode characters. */ +/* Generated automatically by gen-uni-tables for Unicode 5.1.0. */ + +/* Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +struct composition_rule { char codes[4]; }; +%struct-type +%language=ANSI-C +%define slot-name codes +%define hash-function-name gl_uninorm_compose_hash +%define lookup-function-name gl_uninorm_compose_lookup +%compare-lengths +%compare-strncmp +%readonly-tables +%omit-struct-type +%% +"\x00\x41\x03\x00", 0x00c0 +"\x00\x41\x03\x01", 0x00c1 +"\x00\x41\x03\x02", 0x00c2 +"\x00\x41\x03\x03", 0x00c3 +"\x00\x41\x03\x08", 0x00c4 +"\x00\x41\x03\x0a", 0x00c5 +"\x00\x43\x03\x27", 0x00c7 +"\x00\x45\x03\x00", 0x00c8 +"\x00\x45\x03\x01", 0x00c9 +"\x00\x45\x03\x02", 0x00ca +"\x00\x45\x03\x08", 0x00cb +"\x00\x49\x03\x00", 0x00cc +"\x00\x49\x03\x01", 0x00cd +"\x00\x49\x03\x02", 0x00ce +"\x00\x49\x03\x08", 0x00cf +"\x00\x4e\x03\x03", 0x00d1 +"\x00\x4f\x03\x00", 0x00d2 +"\x00\x4f\x03\x01", 0x00d3 +"\x00\x4f\x03\x02", 0x00d4 +"\x00\x4f\x03\x03", 0x00d5 +"\x00\x4f\x03\x08", 0x00d6 +"\x00\x55\x03\x00", 0x00d9 +"\x00\x55\x03\x01", 0x00da +"\x00\x55\x03\x02", 0x00db +"\x00\x55\x03\x08", 0x00dc +"\x00\x59\x03\x01", 0x00dd +"\x00\x61\x03\x00", 0x00e0 +"\x00\x61\x03\x01", 0x00e1 +"\x00\x61\x03\x02", 0x00e2 +"\x00\x61\x03\x03", 0x00e3 +"\x00\x61\x03\x08", 0x00e4 +"\x00\x61\x03\x0a", 0x00e5 +"\x00\x63\x03\x27", 0x00e7 +"\x00\x65\x03\x00", 0x00e8 +"\x00\x65\x03\x01", 0x00e9 +"\x00\x65\x03\x02", 0x00ea +"\x00\x65\x03\x08", 0x00eb +"\x00\x69\x03\x00", 0x00ec +"\x00\x69\x03\x01", 0x00ed +"\x00\x69\x03\x02", 0x00ee +"\x00\x69\x03\x08", 0x00ef +"\x00\x6e\x03\x03", 0x00f1 +"\x00\x6f\x03\x00", 0x00f2 +"\x00\x6f\x03\x01", 0x00f3 +"\x00\x6f\x03\x02", 0x00f4 +"\x00\x6f\x03\x03", 0x00f5 +"\x00\x6f\x03\x08", 0x00f6 +"\x00\x75\x03\x00", 0x00f9 +"\x00\x75\x03\x01", 0x00fa +"\x00\x75\x03\x02", 0x00fb +"\x00\x75\x03\x08", 0x00fc +"\x00\x79\x03\x01", 0x00fd +"\x00\x79\x03\x08", 0x00ff +"\x00\x41\x03\x04", 0x0100 +"\x00\x61\x03\x04", 0x0101 +"\x00\x41\x03\x06", 0x0102 +"\x00\x61\x03\x06", 0x0103 +"\x00\x41\x03\x28", 0x0104 +"\x00\x61\x03\x28", 0x0105 +"\x00\x43\x03\x01", 0x0106 +"\x00\x63\x03\x01", 0x0107 +"\x00\x43\x03\x02", 0x0108 +"\x00\x63\x03\x02", 0x0109 +"\x00\x43\x03\x07", 0x010a +"\x00\x63\x03\x07", 0x010b +"\x00\x43\x03\x0c", 0x010c +"\x00\x63\x03\x0c", 0x010d +"\x00\x44\x03\x0c", 0x010e +"\x00\x64\x03\x0c", 0x010f +"\x00\x45\x03\x04", 0x0112 +"\x00\x65\x03\x04", 0x0113 +"\x00\x45\x03\x06", 0x0114 +"\x00\x65\x03\x06", 0x0115 +"\x00\x45\x03\x07", 0x0116 +"\x00\x65\x03\x07", 0x0117 +"\x00\x45\x03\x28", 0x0118 +"\x00\x65\x03\x28", 0x0119 +"\x00\x45\x03\x0c", 0x011a +"\x00\x65\x03\x0c", 0x011b +"\x00\x47\x03\x02", 0x011c +"\x00\x67\x03\x02", 0x011d +"\x00\x47\x03\x06", 0x011e +"\x00\x67\x03\x06", 0x011f +"\x00\x47\x03\x07", 0x0120 +"\x00\x67\x03\x07", 0x0121 +"\x00\x47\x03\x27", 0x0122 +"\x00\x67\x03\x27", 0x0123 +"\x00\x48\x03\x02", 0x0124 +"\x00\x68\x03\x02", 0x0125 +"\x00\x49\x03\x03", 0x0128 +"\x00\x69\x03\x03", 0x0129 +"\x00\x49\x03\x04", 0x012a +"\x00\x69\x03\x04", 0x012b +"\x00\x49\x03\x06", 0x012c +"\x00\x69\x03\x06", 0x012d +"\x00\x49\x03\x28", 0x012e +"\x00\x69\x03\x28", 0x012f +"\x00\x49\x03\x07", 0x0130 +"\x00\x4a\x03\x02", 0x0134 +"\x00\x6a\x03\x02", 0x0135 +"\x00\x4b\x03\x27", 0x0136 +"\x00\x6b\x03\x27", 0x0137 +"\x00\x4c\x03\x01", 0x0139 +"\x00\x6c\x03\x01", 0x013a +"\x00\x4c\x03\x27", 0x013b +"\x00\x6c\x03\x27", 0x013c +"\x00\x4c\x03\x0c", 0x013d +"\x00\x6c\x03\x0c", 0x013e +"\x00\x4e\x03\x01", 0x0143 +"\x00\x6e\x03\x01", 0x0144 +"\x00\x4e\x03\x27", 0x0145 +"\x00\x6e\x03\x27", 0x0146 +"\x00\x4e\x03\x0c", 0x0147 +"\x00\x6e\x03\x0c", 0x0148 +"\x00\x4f\x03\x04", 0x014c +"\x00\x6f\x03\x04", 0x014d +"\x00\x4f\x03\x06", 0x014e +"\x00\x6f\x03\x06", 0x014f +"\x00\x4f\x03\x0b", 0x0150 +"\x00\x6f\x03\x0b", 0x0151 +"\x00\x52\x03\x01", 0x0154 +"\x00\x72\x03\x01", 0x0155 +"\x00\x52\x03\x27", 0x0156 +"\x00\x72\x03\x27", 0x0157 +"\x00\x52\x03\x0c", 0x0158 +"\x00\x72\x03\x0c", 0x0159 +"\x00\x53\x03\x01", 0x015a +"\x00\x73\x03\x01", 0x015b +"\x00\x53\x03\x02", 0x015c +"\x00\x73\x03\x02", 0x015d +"\x00\x53\x03\x27", 0x015e +"\x00\x73\x03\x27", 0x015f +"\x00\x53\x03\x0c", 0x0160 +"\x00\x73\x03\x0c", 0x0161 +"\x00\x54\x03\x27", 0x0162 +"\x00\x74\x03\x27", 0x0163 +"\x00\x54\x03\x0c", 0x0164 +"\x00\x74\x03\x0c", 0x0165 +"\x00\x55\x03\x03", 0x0168 +"\x00\x75\x03\x03", 0x0169 +"\x00\x55\x03\x04", 0x016a +"\x00\x75\x03\x04", 0x016b +"\x00\x55\x03\x06", 0x016c +"\x00\x75\x03\x06", 0x016d +"\x00\x55\x03\x0a", 0x016e +"\x00\x75\x03\x0a", 0x016f +"\x00\x55\x03\x0b", 0x0170 +"\x00\x75\x03\x0b", 0x0171 +"\x00\x55\x03\x28", 0x0172 +"\x00\x75\x03\x28", 0x0173 +"\x00\x57\x03\x02", 0x0174 +"\x00\x77\x03\x02", 0x0175 +"\x00\x59\x03\x02", 0x0176 +"\x00\x79\x03\x02", 0x0177 +"\x00\x59\x03\x08", 0x0178 +"\x00\x5a\x03\x01", 0x0179 +"\x00\x7a\x03\x01", 0x017a +"\x00\x5a\x03\x07", 0x017b +"\x00\x7a\x03\x07", 0x017c +"\x00\x5a\x03\x0c", 0x017d +"\x00\x7a\x03\x0c", 0x017e +"\x00\x4f\x03\x1b", 0x01a0 +"\x00\x6f\x03\x1b", 0x01a1 +"\x00\x55\x03\x1b", 0x01af +"\x00\x75\x03\x1b", 0x01b0 +"\x00\x41\x03\x0c", 0x01cd +"\x00\x61\x03\x0c", 0x01ce +"\x00\x49\x03\x0c", 0x01cf +"\x00\x69\x03\x0c", 0x01d0 +"\x00\x4f\x03\x0c", 0x01d1 +"\x00\x6f\x03\x0c", 0x01d2 +"\x00\x55\x03\x0c", 0x01d3 +"\x00\x75\x03\x0c", 0x01d4 +"\x00\xdc\x03\x04", 0x01d5 +"\x00\xfc\x03\x04", 0x01d6 +"\x00\xdc\x03\x01", 0x01d7 +"\x00\xfc\x03\x01", 0x01d8 +"\x00\xdc\x03\x0c", 0x01d9 +"\x00\xfc\x03\x0c", 0x01da +"\x00\xdc\x03\x00", 0x01db +"\x00\xfc\x03\x00", 0x01dc +"\x00\xc4\x03\x04", 0x01de +"\x00\xe4\x03\x04", 0x01df +"\x02\x26\x03\x04", 0x01e0 +"\x02\x27\x03\x04", 0x01e1 +"\x00\xc6\x03\x04", 0x01e2 +"\x00\xe6\x03\x04", 0x01e3 +"\x00\x47\x03\x0c", 0x01e6 +"\x00\x67\x03\x0c", 0x01e7 +"\x00\x4b\x03\x0c", 0x01e8 +"\x00\x6b\x03\x0c", 0x01e9 +"\x00\x4f\x03\x28", 0x01ea +"\x00\x6f\x03\x28", 0x01eb +"\x01\xea\x03\x04", 0x01ec +"\x01\xeb\x03\x04", 0x01ed +"\x01\xb7\x03\x0c", 0x01ee +"\x02\x92\x03\x0c", 0x01ef +"\x00\x6a\x03\x0c", 0x01f0 +"\x00\x47\x03\x01", 0x01f4 +"\x00\x67\x03\x01", 0x01f5 +"\x00\x4e\x03\x00", 0x01f8 +"\x00\x6e\x03\x00", 0x01f9 +"\x00\xc5\x03\x01", 0x01fa +"\x00\xe5\x03\x01", 0x01fb +"\x00\xc6\x03\x01", 0x01fc +"\x00\xe6\x03\x01", 0x01fd +"\x00\xd8\x03\x01", 0x01fe +"\x00\xf8\x03\x01", 0x01ff +"\x00\x41\x03\x0f", 0x0200 +"\x00\x61\x03\x0f", 0x0201 +"\x00\x41\x03\x11", 0x0202 +"\x00\x61\x03\x11", 0x0203 +"\x00\x45\x03\x0f", 0x0204 +"\x00\x65\x03\x0f", 0x0205 +"\x00\x45\x03\x11", 0x0206 +"\x00\x65\x03\x11", 0x0207 +"\x00\x49\x03\x0f", 0x0208 +"\x00\x69\x03\x0f", 0x0209 +"\x00\x49\x03\x11", 0x020a +"\x00\x69\x03\x11", 0x020b +"\x00\x4f\x03\x0f", 0x020c +"\x00\x6f\x03\x0f", 0x020d +"\x00\x4f\x03\x11", 0x020e +"\x00\x6f\x03\x11", 0x020f +"\x00\x52\x03\x0f", 0x0210 +"\x00\x72\x03\x0f", 0x0211 +"\x00\x52\x03\x11", 0x0212 +"\x00\x72\x03\x11", 0x0213 +"\x00\x55\x03\x0f", 0x0214 +"\x00\x75\x03\x0f", 0x0215 +"\x00\x55\x03\x11", 0x0216 +"\x00\x75\x03\x11", 0x0217 +"\x00\x53\x03\x26", 0x0218 +"\x00\x73\x03\x26", 0x0219 +"\x00\x54\x03\x26", 0x021a +"\x00\x74\x03\x26", 0x021b +"\x00\x48\x03\x0c", 0x021e +"\x00\x68\x03\x0c", 0x021f +"\x00\x41\x03\x07", 0x0226 +"\x00\x61\x03\x07", 0x0227 +"\x00\x45\x03\x27", 0x0228 +"\x00\x65\x03\x27", 0x0229 +"\x00\xd6\x03\x04", 0x022a +"\x00\xf6\x03\x04", 0x022b +"\x00\xd5\x03\x04", 0x022c +"\x00\xf5\x03\x04", 0x022d +"\x00\x4f\x03\x07", 0x022e +"\x00\x6f\x03\x07", 0x022f +"\x02\x2e\x03\x04", 0x0230 +"\x02\x2f\x03\x04", 0x0231 +"\x00\x59\x03\x04", 0x0232 +"\x00\x79\x03\x04", 0x0233 +"\x00\xa8\x03\x01", 0x0385 +"\x03\x91\x03\x01", 0x0386 +"\x03\x95\x03\x01", 0x0388 +"\x03\x97\x03\x01", 0x0389 +"\x03\x99\x03\x01", 0x038a +"\x03\x9f\x03\x01", 0x038c +"\x03\xa5\x03\x01", 0x038e +"\x03\xa9\x03\x01", 0x038f +"\x03\xca\x03\x01", 0x0390 +"\x03\x99\x03\x08", 0x03aa +"\x03\xa5\x03\x08", 0x03ab +"\x03\xb1\x03\x01", 0x03ac +"\x03\xb5\x03\x01", 0x03ad +"\x03\xb7\x03\x01", 0x03ae +"\x03\xb9\x03\x01", 0x03af +"\x03\xcb\x03\x01", 0x03b0 +"\x03\xb9\x03\x08", 0x03ca +"\x03\xc5\x03\x08", 0x03cb +"\x03\xbf\x03\x01", 0x03cc +"\x03\xc5\x03\x01", 0x03cd +"\x03\xc9\x03\x01", 0x03ce +"\x03\xd2\x03\x01", 0x03d3 +"\x03\xd2\x03\x08", 0x03d4 +"\x04\x15\x03\x00", 0x0400 +"\x04\x15\x03\x08", 0x0401 +"\x04\x13\x03\x01", 0x0403 +"\x04\x06\x03\x08", 0x0407 +"\x04\x1a\x03\x01", 0x040c +"\x04\x18\x03\x00", 0x040d +"\x04\x23\x03\x06", 0x040e +"\x04\x18\x03\x06", 0x0419 +"\x04\x38\x03\x06", 0x0439 +"\x04\x35\x03\x00", 0x0450 +"\x04\x35\x03\x08", 0x0451 +"\x04\x33\x03\x01", 0x0453 +"\x04\x56\x03\x08", 0x0457 +"\x04\x3a\x03\x01", 0x045c +"\x04\x38\x03\x00", 0x045d +"\x04\x43\x03\x06", 0x045e +"\x04\x74\x03\x0f", 0x0476 +"\x04\x75\x03\x0f", 0x0477 +"\x04\x16\x03\x06", 0x04c1 +"\x04\x36\x03\x06", 0x04c2 +"\x04\x10\x03\x06", 0x04d0 +"\x04\x30\x03\x06", 0x04d1 +"\x04\x10\x03\x08", 0x04d2 +"\x04\x30\x03\x08", 0x04d3 +"\x04\x15\x03\x06", 0x04d6 +"\x04\x35\x03\x06", 0x04d7 +"\x04\xd8\x03\x08", 0x04da +"\x04\xd9\x03\x08", 0x04db +"\x04\x16\x03\x08", 0x04dc +"\x04\x36\x03\x08", 0x04dd +"\x04\x17\x03\x08", 0x04de +"\x04\x37\x03\x08", 0x04df +"\x04\x18\x03\x04", 0x04e2 +"\x04\x38\x03\x04", 0x04e3 +"\x04\x18\x03\x08", 0x04e4 +"\x04\x38\x03\x08", 0x04e5 +"\x04\x1e\x03\x08", 0x04e6 +"\x04\x3e\x03\x08", 0x04e7 +"\x04\xe8\x03\x08", 0x04ea +"\x04\xe9\x03\x08", 0x04eb +"\x04\x2d\x03\x08", 0x04ec +"\x04\x4d\x03\x08", 0x04ed +"\x04\x23\x03\x04", 0x04ee +"\x04\x43\x03\x04", 0x04ef +"\x04\x23\x03\x08", 0x04f0 +"\x04\x43\x03\x08", 0x04f1 +"\x04\x23\x03\x0b", 0x04f2 +"\x04\x43\x03\x0b", 0x04f3 +"\x04\x27\x03\x08", 0x04f4 +"\x04\x47\x03\x08", 0x04f5 +"\x04\x2b\x03\x08", 0x04f8 +"\x04\x4b\x03\x08", 0x04f9 +"\x06\x27\x06\x53", 0x0622 +"\x06\x27\x06\x54", 0x0623 +"\x06\x48\x06\x54", 0x0624 +"\x06\x27\x06\x55", 0x0625 +"\x06\x4a\x06\x54", 0x0626 +"\x06\xd5\x06\x54", 0x06c0 +"\x06\xc1\x06\x54", 0x06c2 +"\x06\xd2\x06\x54", 0x06d3 +"\x09\x28\x09\x3c", 0x0929 +"\x09\x30\x09\x3c", 0x0931 +"\x09\x33\x09\x3c", 0x0934 +"\x09\xc7\x09\xbe", 0x09cb +"\x09\xc7\x09\xd7", 0x09cc +"\x0b\x47\x0b\x56", 0x0b48 +"\x0b\x47\x0b\x3e", 0x0b4b +"\x0b\x47\x0b\x57", 0x0b4c +"\x0b\x92\x0b\xd7", 0x0b94 +"\x0b\xc6\x0b\xbe", 0x0bca +"\x0b\xc7\x0b\xbe", 0x0bcb +"\x0b\xc6\x0b\xd7", 0x0bcc +"\x0c\x46\x0c\x56", 0x0c48 +"\x0c\xbf\x0c\xd5", 0x0cc0 +"\x0c\xc6\x0c\xd5", 0x0cc7 +"\x0c\xc6\x0c\xd6", 0x0cc8 +"\x0c\xc6\x0c\xc2", 0x0cca +"\x0c\xca\x0c\xd5", 0x0ccb +"\x0d\x46\x0d\x3e", 0x0d4a +"\x0d\x47\x0d\x3e", 0x0d4b +"\x0d\x46\x0d\x57", 0x0d4c +"\x0d\xd9\x0d\xca", 0x0dda +"\x0d\xd9\x0d\xcf", 0x0ddc +"\x0d\xdc\x0d\xca", 0x0ddd +"\x0d\xd9\x0d\xdf", 0x0dde +"\x10\x25\x10\x2e", 0x1026 +"\x1b\x05\x1b\x35", 0x1b06 +"\x1b\x07\x1b\x35", 0x1b08 +"\x1b\x09\x1b\x35", 0x1b0a +"\x1b\x0b\x1b\x35", 0x1b0c +"\x1b\x0d\x1b\x35", 0x1b0e +"\x1b\x11\x1b\x35", 0x1b12 +"\x1b\x3a\x1b\x35", 0x1b3b +"\x1b\x3c\x1b\x35", 0x1b3d +"\x1b\x3e\x1b\x35", 0x1b40 +"\x1b\x3f\x1b\x35", 0x1b41 +"\x1b\x42\x1b\x35", 0x1b43 +"\x00\x41\x03\x25", 0x1e00 +"\x00\x61\x03\x25", 0x1e01 +"\x00\x42\x03\x07", 0x1e02 +"\x00\x62\x03\x07", 0x1e03 +"\x00\x42\x03\x23", 0x1e04 +"\x00\x62\x03\x23", 0x1e05 +"\x00\x42\x03\x31", 0x1e06 +"\x00\x62\x03\x31", 0x1e07 +"\x00\xc7\x03\x01", 0x1e08 +"\x00\xe7\x03\x01", 0x1e09 +"\x00\x44\x03\x07", 0x1e0a +"\x00\x64\x03\x07", 0x1e0b +"\x00\x44\x03\x23", 0x1e0c +"\x00\x64\x03\x23", 0x1e0d +"\x00\x44\x03\x31", 0x1e0e +"\x00\x64\x03\x31", 0x1e0f +"\x00\x44\x03\x27", 0x1e10 +"\x00\x64\x03\x27", 0x1e11 +"\x00\x44\x03\x2d", 0x1e12 +"\x00\x64\x03\x2d", 0x1e13 +"\x01\x12\x03\x00", 0x1e14 +"\x01\x13\x03\x00", 0x1e15 +"\x01\x12\x03\x01", 0x1e16 +"\x01\x13\x03\x01", 0x1e17 +"\x00\x45\x03\x2d", 0x1e18 +"\x00\x65\x03\x2d", 0x1e19 +"\x00\x45\x03\x30", 0x1e1a +"\x00\x65\x03\x30", 0x1e1b +"\x02\x28\x03\x06", 0x1e1c +"\x02\x29\x03\x06", 0x1e1d +"\x00\x46\x03\x07", 0x1e1e +"\x00\x66\x03\x07", 0x1e1f +"\x00\x47\x03\x04", 0x1e20 +"\x00\x67\x03\x04", 0x1e21 +"\x00\x48\x03\x07", 0x1e22 +"\x00\x68\x03\x07", 0x1e23 +"\x00\x48\x03\x23", 0x1e24 +"\x00\x68\x03\x23", 0x1e25 +"\x00\x48\x03\x08", 0x1e26 +"\x00\x68\x03\x08", 0x1e27 +"\x00\x48\x03\x27", 0x1e28 +"\x00\x68\x03\x27", 0x1e29 +"\x00\x48\x03\x2e", 0x1e2a +"\x00\x68\x03\x2e", 0x1e2b +"\x00\x49\x03\x30", 0x1e2c +"\x00\x69\x03\x30", 0x1e2d +"\x00\xcf\x03\x01", 0x1e2e +"\x00\xef\x03\x01", 0x1e2f +"\x00\x4b\x03\x01", 0x1e30 +"\x00\x6b\x03\x01", 0x1e31 +"\x00\x4b\x03\x23", 0x1e32 +"\x00\x6b\x03\x23", 0x1e33 +"\x00\x4b\x03\x31", 0x1e34 +"\x00\x6b\x03\x31", 0x1e35 +"\x00\x4c\x03\x23", 0x1e36 +"\x00\x6c\x03\x23", 0x1e37 +"\x1e\x36\x03\x04", 0x1e38 +"\x1e\x37\x03\x04", 0x1e39 +"\x00\x4c\x03\x31", 0x1e3a +"\x00\x6c\x03\x31", 0x1e3b +"\x00\x4c\x03\x2d", 0x1e3c +"\x00\x6c\x03\x2d", 0x1e3d +"\x00\x4d\x03\x01", 0x1e3e +"\x00\x6d\x03\x01", 0x1e3f +"\x00\x4d\x03\x07", 0x1e40 +"\x00\x6d\x03\x07", 0x1e41 +"\x00\x4d\x03\x23", 0x1e42 +"\x00\x6d\x03\x23", 0x1e43 +"\x00\x4e\x03\x07", 0x1e44 +"\x00\x6e\x03\x07", 0x1e45 +"\x00\x4e\x03\x23", 0x1e46 +"\x00\x6e\x03\x23", 0x1e47 +"\x00\x4e\x03\x31", 0x1e48 +"\x00\x6e\x03\x31", 0x1e49 +"\x00\x4e\x03\x2d", 0x1e4a +"\x00\x6e\x03\x2d", 0x1e4b +"\x00\xd5\x03\x01", 0x1e4c +"\x00\xf5\x03\x01", 0x1e4d +"\x00\xd5\x03\x08", 0x1e4e +"\x00\xf5\x03\x08", 0x1e4f +"\x01\x4c\x03\x00", 0x1e50 +"\x01\x4d\x03\x00", 0x1e51 +"\x01\x4c\x03\x01", 0x1e52 +"\x01\x4d\x03\x01", 0x1e53 +"\x00\x50\x03\x01", 0x1e54 +"\x00\x70\x03\x01", 0x1e55 +"\x00\x50\x03\x07", 0x1e56 +"\x00\x70\x03\x07", 0x1e57 +"\x00\x52\x03\x07", 0x1e58 +"\x00\x72\x03\x07", 0x1e59 +"\x00\x52\x03\x23", 0x1e5a +"\x00\x72\x03\x23", 0x1e5b +"\x1e\x5a\x03\x04", 0x1e5c +"\x1e\x5b\x03\x04", 0x1e5d +"\x00\x52\x03\x31", 0x1e5e +"\x00\x72\x03\x31", 0x1e5f +"\x00\x53\x03\x07", 0x1e60 +"\x00\x73\x03\x07", 0x1e61 +"\x00\x53\x03\x23", 0x1e62 +"\x00\x73\x03\x23", 0x1e63 +"\x01\x5a\x03\x07", 0x1e64 +"\x01\x5b\x03\x07", 0x1e65 +"\x01\x60\x03\x07", 0x1e66 +"\x01\x61\x03\x07", 0x1e67 +"\x1e\x62\x03\x07", 0x1e68 +"\x1e\x63\x03\x07", 0x1e69 +"\x00\x54\x03\x07", 0x1e6a +"\x00\x74\x03\x07", 0x1e6b +"\x00\x54\x03\x23", 0x1e6c +"\x00\x74\x03\x23", 0x1e6d +"\x00\x54\x03\x31", 0x1e6e +"\x00\x74\x03\x31", 0x1e6f +"\x00\x54\x03\x2d", 0x1e70 +"\x00\x74\x03\x2d", 0x1e71 +"\x00\x55\x03\x24", 0x1e72 +"\x00\x75\x03\x24", 0x1e73 +"\x00\x55\x03\x30", 0x1e74 +"\x00\x75\x03\x30", 0x1e75 +"\x00\x55\x03\x2d", 0x1e76 +"\x00\x75\x03\x2d", 0x1e77 +"\x01\x68\x03\x01", 0x1e78 +"\x01\x69\x03\x01", 0x1e79 +"\x01\x6a\x03\x08", 0x1e7a +"\x01\x6b\x03\x08", 0x1e7b +"\x00\x56\x03\x03", 0x1e7c +"\x00\x76\x03\x03", 0x1e7d +"\x00\x56\x03\x23", 0x1e7e +"\x00\x76\x03\x23", 0x1e7f +"\x00\x57\x03\x00", 0x1e80 +"\x00\x77\x03\x00", 0x1e81 +"\x00\x57\x03\x01", 0x1e82 +"\x00\x77\x03\x01", 0x1e83 +"\x00\x57\x03\x08", 0x1e84 +"\x00\x77\x03\x08", 0x1e85 +"\x00\x57\x03\x07", 0x1e86 +"\x00\x77\x03\x07", 0x1e87 +"\x00\x57\x03\x23", 0x1e88 +"\x00\x77\x03\x23", 0x1e89 +"\x00\x58\x03\x07", 0x1e8a +"\x00\x78\x03\x07", 0x1e8b +"\x00\x58\x03\x08", 0x1e8c +"\x00\x78\x03\x08", 0x1e8d +"\x00\x59\x03\x07", 0x1e8e +"\x00\x79\x03\x07", 0x1e8f +"\x00\x5a\x03\x02", 0x1e90 +"\x00\x7a\x03\x02", 0x1e91 +"\x00\x5a\x03\x23", 0x1e92 +"\x00\x7a\x03\x23", 0x1e93 +"\x00\x5a\x03\x31", 0x1e94 +"\x00\x7a\x03\x31", 0x1e95 +"\x00\x68\x03\x31", 0x1e96 +"\x00\x74\x03\x08", 0x1e97 +"\x00\x77\x03\x0a", 0x1e98 +"\x00\x79\x03\x0a", 0x1e99 +"\x01\x7f\x03\x07", 0x1e9b +"\x00\x41\x03\x23", 0x1ea0 +"\x00\x61\x03\x23", 0x1ea1 +"\x00\x41\x03\x09", 0x1ea2 +"\x00\x61\x03\x09", 0x1ea3 +"\x00\xc2\x03\x01", 0x1ea4 +"\x00\xe2\x03\x01", 0x1ea5 +"\x00\xc2\x03\x00", 0x1ea6 +"\x00\xe2\x03\x00", 0x1ea7 +"\x00\xc2\x03\x09", 0x1ea8 +"\x00\xe2\x03\x09", 0x1ea9 +"\x00\xc2\x03\x03", 0x1eaa +"\x00\xe2\x03\x03", 0x1eab +"\x1e\xa0\x03\x02", 0x1eac +"\x1e\xa1\x03\x02", 0x1ead +"\x01\x02\x03\x01", 0x1eae +"\x01\x03\x03\x01", 0x1eaf +"\x01\x02\x03\x00", 0x1eb0 +"\x01\x03\x03\x00", 0x1eb1 +"\x01\x02\x03\x09", 0x1eb2 +"\x01\x03\x03\x09", 0x1eb3 +"\x01\x02\x03\x03", 0x1eb4 +"\x01\x03\x03\x03", 0x1eb5 +"\x1e\xa0\x03\x06", 0x1eb6 +"\x1e\xa1\x03\x06", 0x1eb7 +"\x00\x45\x03\x23", 0x1eb8 +"\x00\x65\x03\x23", 0x1eb9 +"\x00\x45\x03\x09", 0x1eba +"\x00\x65\x03\x09", 0x1ebb +"\x00\x45\x03\x03", 0x1ebc +"\x00\x65\x03\x03", 0x1ebd +"\x00\xca\x03\x01", 0x1ebe +"\x00\xea\x03\x01", 0x1ebf +"\x00\xca\x03\x00", 0x1ec0 +"\x00\xea\x03\x00", 0x1ec1 +"\x00\xca\x03\x09", 0x1ec2 +"\x00\xea\x03\x09", 0x1ec3 +"\x00\xca\x03\x03", 0x1ec4 +"\x00\xea\x03\x03", 0x1ec5 +"\x1e\xb8\x03\x02", 0x1ec6 +"\x1e\xb9\x03\x02", 0x1ec7 +"\x00\x49\x03\x09", 0x1ec8 +"\x00\x69\x03\x09", 0x1ec9 +"\x00\x49\x03\x23", 0x1eca +"\x00\x69\x03\x23", 0x1ecb +"\x00\x4f\x03\x23", 0x1ecc +"\x00\x6f\x03\x23", 0x1ecd +"\x00\x4f\x03\x09", 0x1ece +"\x00\x6f\x03\x09", 0x1ecf +"\x00\xd4\x03\x01", 0x1ed0 +"\x00\xf4\x03\x01", 0x1ed1 +"\x00\xd4\x03\x00", 0x1ed2 +"\x00\xf4\x03\x00", 0x1ed3 +"\x00\xd4\x03\x09", 0x1ed4 +"\x00\xf4\x03\x09", 0x1ed5 +"\x00\xd4\x03\x03", 0x1ed6 +"\x00\xf4\x03\x03", 0x1ed7 +"\x1e\xcc\x03\x02", 0x1ed8 +"\x1e\xcd\x03\x02", 0x1ed9 +"\x01\xa0\x03\x01", 0x1eda +"\x01\xa1\x03\x01", 0x1edb +"\x01\xa0\x03\x00", 0x1edc +"\x01\xa1\x03\x00", 0x1edd +"\x01\xa0\x03\x09", 0x1ede +"\x01\xa1\x03\x09", 0x1edf +"\x01\xa0\x03\x03", 0x1ee0 +"\x01\xa1\x03\x03", 0x1ee1 +"\x01\xa0\x03\x23", 0x1ee2 +"\x01\xa1\x03\x23", 0x1ee3 +"\x00\x55\x03\x23", 0x1ee4 +"\x00\x75\x03\x23", 0x1ee5 +"\x00\x55\x03\x09", 0x1ee6 +"\x00\x75\x03\x09", 0x1ee7 +"\x01\xaf\x03\x01", 0x1ee8 +"\x01\xb0\x03\x01", 0x1ee9 +"\x01\xaf\x03\x00", 0x1eea +"\x01\xb0\x03\x00", 0x1eeb +"\x01\xaf\x03\x09", 0x1eec +"\x01\xb0\x03\x09", 0x1eed +"\x01\xaf\x03\x03", 0x1eee +"\x01\xb0\x03\x03", 0x1eef +"\x01\xaf\x03\x23", 0x1ef0 +"\x01\xb0\x03\x23", 0x1ef1 +"\x00\x59\x03\x00", 0x1ef2 +"\x00\x79\x03\x00", 0x1ef3 +"\x00\x59\x03\x23", 0x1ef4 +"\x00\x79\x03\x23", 0x1ef5 +"\x00\x59\x03\x09", 0x1ef6 +"\x00\x79\x03\x09", 0x1ef7 +"\x00\x59\x03\x03", 0x1ef8 +"\x00\x79\x03\x03", 0x1ef9 +"\x03\xb1\x03\x13", 0x1f00 +"\x03\xb1\x03\x14", 0x1f01 +"\x1f\x00\x03\x00", 0x1f02 +"\x1f\x01\x03\x00", 0x1f03 +"\x1f\x00\x03\x01", 0x1f04 +"\x1f\x01\x03\x01", 0x1f05 +"\x1f\x00\x03\x42", 0x1f06 +"\x1f\x01\x03\x42", 0x1f07 +"\x03\x91\x03\x13", 0x1f08 +"\x03\x91\x03\x14", 0x1f09 +"\x1f\x08\x03\x00", 0x1f0a +"\x1f\x09\x03\x00", 0x1f0b +"\x1f\x08\x03\x01", 0x1f0c +"\x1f\x09\x03\x01", 0x1f0d +"\x1f\x08\x03\x42", 0x1f0e +"\x1f\x09\x03\x42", 0x1f0f +"\x03\xb5\x03\x13", 0x1f10 +"\x03\xb5\x03\x14", 0x1f11 +"\x1f\x10\x03\x00", 0x1f12 +"\x1f\x11\x03\x00", 0x1f13 +"\x1f\x10\x03\x01", 0x1f14 +"\x1f\x11\x03\x01", 0x1f15 +"\x03\x95\x03\x13", 0x1f18 +"\x03\x95\x03\x14", 0x1f19 +"\x1f\x18\x03\x00", 0x1f1a +"\x1f\x19\x03\x00", 0x1f1b +"\x1f\x18\x03\x01", 0x1f1c +"\x1f\x19\x03\x01", 0x1f1d +"\x03\xb7\x03\x13", 0x1f20 +"\x03\xb7\x03\x14", 0x1f21 +"\x1f\x20\x03\x00", 0x1f22 +"\x1f\x21\x03\x00", 0x1f23 +"\x1f\x20\x03\x01", 0x1f24 +"\x1f\x21\x03\x01", 0x1f25 +"\x1f\x20\x03\x42", 0x1f26 +"\x1f\x21\x03\x42", 0x1f27 +"\x03\x97\x03\x13", 0x1f28 +"\x03\x97\x03\x14", 0x1f29 +"\x1f\x28\x03\x00", 0x1f2a +"\x1f\x29\x03\x00", 0x1f2b +"\x1f\x28\x03\x01", 0x1f2c +"\x1f\x29\x03\x01", 0x1f2d +"\x1f\x28\x03\x42", 0x1f2e +"\x1f\x29\x03\x42", 0x1f2f +"\x03\xb9\x03\x13", 0x1f30 +"\x03\xb9\x03\x14", 0x1f31 +"\x1f\x30\x03\x00", 0x1f32 +"\x1f\x31\x03\x00", 0x1f33 +"\x1f\x30\x03\x01", 0x1f34 +"\x1f\x31\x03\x01", 0x1f35 +"\x1f\x30\x03\x42", 0x1f36 +"\x1f\x31\x03\x42", 0x1f37 +"\x03\x99\x03\x13", 0x1f38 +"\x03\x99\x03\x14", 0x1f39 +"\x1f\x38\x03\x00", 0x1f3a +"\x1f\x39\x03\x00", 0x1f3b +"\x1f\x38\x03\x01", 0x1f3c +"\x1f\x39\x03\x01", 0x1f3d +"\x1f\x38\x03\x42", 0x1f3e +"\x1f\x39\x03\x42", 0x1f3f +"\x03\xbf\x03\x13", 0x1f40 +"\x03\xbf\x03\x14", 0x1f41 +"\x1f\x40\x03\x00", 0x1f42 +"\x1f\x41\x03\x00", 0x1f43 +"\x1f\x40\x03\x01", 0x1f44 +"\x1f\x41\x03\x01", 0x1f45 +"\x03\x9f\x03\x13", 0x1f48 +"\x03\x9f\x03\x14", 0x1f49 +"\x1f\x48\x03\x00", 0x1f4a +"\x1f\x49\x03\x00", 0x1f4b +"\x1f\x48\x03\x01", 0x1f4c +"\x1f\x49\x03\x01", 0x1f4d +"\x03\xc5\x03\x13", 0x1f50 +"\x03\xc5\x03\x14", 0x1f51 +"\x1f\x50\x03\x00", 0x1f52 +"\x1f\x51\x03\x00", 0x1f53 +"\x1f\x50\x03\x01", 0x1f54 +"\x1f\x51\x03\x01", 0x1f55 +"\x1f\x50\x03\x42", 0x1f56 +"\x1f\x51\x03\x42", 0x1f57 +"\x03\xa5\x03\x14", 0x1f59 +"\x1f\x59\x03\x00", 0x1f5b +"\x1f\x59\x03\x01", 0x1f5d +"\x1f\x59\x03\x42", 0x1f5f +"\x03\xc9\x03\x13", 0x1f60 +"\x03\xc9\x03\x14", 0x1f61 +"\x1f\x60\x03\x00", 0x1f62 +"\x1f\x61\x03\x00", 0x1f63 +"\x1f\x60\x03\x01", 0x1f64 +"\x1f\x61\x03\x01", 0x1f65 +"\x1f\x60\x03\x42", 0x1f66 +"\x1f\x61\x03\x42", 0x1f67 +"\x03\xa9\x03\x13", 0x1f68 +"\x03\xa9\x03\x14", 0x1f69 +"\x1f\x68\x03\x00", 0x1f6a +"\x1f\x69\x03\x00", 0x1f6b +"\x1f\x68\x03\x01", 0x1f6c +"\x1f\x69\x03\x01", 0x1f6d +"\x1f\x68\x03\x42", 0x1f6e +"\x1f\x69\x03\x42", 0x1f6f +"\x03\xb1\x03\x00", 0x1f70 +"\x03\xb5\x03\x00", 0x1f72 +"\x03\xb7\x03\x00", 0x1f74 +"\x03\xb9\x03\x00", 0x1f76 +"\x03\xbf\x03\x00", 0x1f78 +"\x03\xc5\x03\x00", 0x1f7a +"\x03\xc9\x03\x00", 0x1f7c +"\x1f\x00\x03\x45", 0x1f80 +"\x1f\x01\x03\x45", 0x1f81 +"\x1f\x02\x03\x45", 0x1f82 +"\x1f\x03\x03\x45", 0x1f83 +"\x1f\x04\x03\x45", 0x1f84 +"\x1f\x05\x03\x45", 0x1f85 +"\x1f\x06\x03\x45", 0x1f86 +"\x1f\x07\x03\x45", 0x1f87 +"\x1f\x08\x03\x45", 0x1f88 +"\x1f\x09\x03\x45", 0x1f89 +"\x1f\x0a\x03\x45", 0x1f8a +"\x1f\x0b\x03\x45", 0x1f8b +"\x1f\x0c\x03\x45", 0x1f8c +"\x1f\x0d\x03\x45", 0x1f8d +"\x1f\x0e\x03\x45", 0x1f8e +"\x1f\x0f\x03\x45", 0x1f8f +"\x1f\x20\x03\x45", 0x1f90 +"\x1f\x21\x03\x45", 0x1f91 +"\x1f\x22\x03\x45", 0x1f92 +"\x1f\x23\x03\x45", 0x1f93 +"\x1f\x24\x03\x45", 0x1f94 +"\x1f\x25\x03\x45", 0x1f95 +"\x1f\x26\x03\x45", 0x1f96 +"\x1f\x27\x03\x45", 0x1f97 +"\x1f\x28\x03\x45", 0x1f98 +"\x1f\x29\x03\x45", 0x1f99 +"\x1f\x2a\x03\x45", 0x1f9a +"\x1f\x2b\x03\x45", 0x1f9b +"\x1f\x2c\x03\x45", 0x1f9c +"\x1f\x2d\x03\x45", 0x1f9d +"\x1f\x2e\x03\x45", 0x1f9e +"\x1f\x2f\x03\x45", 0x1f9f +"\x1f\x60\x03\x45", 0x1fa0 +"\x1f\x61\x03\x45", 0x1fa1 +"\x1f\x62\x03\x45", 0x1fa2 +"\x1f\x63\x03\x45", 0x1fa3 +"\x1f\x64\x03\x45", 0x1fa4 +"\x1f\x65\x03\x45", 0x1fa5 +"\x1f\x66\x03\x45", 0x1fa6 +"\x1f\x67\x03\x45", 0x1fa7 +"\x1f\x68\x03\x45", 0x1fa8 +"\x1f\x69\x03\x45", 0x1fa9 +"\x1f\x6a\x03\x45", 0x1faa +"\x1f\x6b\x03\x45", 0x1fab +"\x1f\x6c\x03\x45", 0x1fac +"\x1f\x6d\x03\x45", 0x1fad +"\x1f\x6e\x03\x45", 0x1fae +"\x1f\x6f\x03\x45", 0x1faf +"\x03\xb1\x03\x06", 0x1fb0 +"\x03\xb1\x03\x04", 0x1fb1 +"\x1f\x70\x03\x45", 0x1fb2 +"\x03\xb1\x03\x45", 0x1fb3 +"\x03\xac\x03\x45", 0x1fb4 +"\x03\xb1\x03\x42", 0x1fb6 +"\x1f\xb6\x03\x45", 0x1fb7 +"\x03\x91\x03\x06", 0x1fb8 +"\x03\x91\x03\x04", 0x1fb9 +"\x03\x91\x03\x00", 0x1fba +"\x03\x91\x03\x45", 0x1fbc +"\x00\xa8\x03\x42", 0x1fc1 +"\x1f\x74\x03\x45", 0x1fc2 +"\x03\xb7\x03\x45", 0x1fc3 +"\x03\xae\x03\x45", 0x1fc4 +"\x03\xb7\x03\x42", 0x1fc6 +"\x1f\xc6\x03\x45", 0x1fc7 +"\x03\x95\x03\x00", 0x1fc8 +"\x03\x97\x03\x00", 0x1fca +"\x03\x97\x03\x45", 0x1fcc +"\x1f\xbf\x03\x00", 0x1fcd +"\x1f\xbf\x03\x01", 0x1fce +"\x1f\xbf\x03\x42", 0x1fcf +"\x03\xb9\x03\x06", 0x1fd0 +"\x03\xb9\x03\x04", 0x1fd1 +"\x03\xca\x03\x00", 0x1fd2 +"\x03\xb9\x03\x42", 0x1fd6 +"\x03\xca\x03\x42", 0x1fd7 +"\x03\x99\x03\x06", 0x1fd8 +"\x03\x99\x03\x04", 0x1fd9 +"\x03\x99\x03\x00", 0x1fda +"\x1f\xfe\x03\x00", 0x1fdd +"\x1f\xfe\x03\x01", 0x1fde +"\x1f\xfe\x03\x42", 0x1fdf +"\x03\xc5\x03\x06", 0x1fe0 +"\x03\xc5\x03\x04", 0x1fe1 +"\x03\xcb\x03\x00", 0x1fe2 +"\x03\xc1\x03\x13", 0x1fe4 +"\x03\xc1\x03\x14", 0x1fe5 +"\x03\xc5\x03\x42", 0x1fe6 +"\x03\xcb\x03\x42", 0x1fe7 +"\x03\xa5\x03\x06", 0x1fe8 +"\x03\xa5\x03\x04", 0x1fe9 +"\x03\xa5\x03\x00", 0x1fea +"\x03\xa1\x03\x14", 0x1fec +"\x00\xa8\x03\x00", 0x1fed +"\x1f\x7c\x03\x45", 0x1ff2 +"\x03\xc9\x03\x45", 0x1ff3 +"\x03\xce\x03\x45", 0x1ff4 +"\x03\xc9\x03\x42", 0x1ff6 +"\x1f\xf6\x03\x45", 0x1ff7 +"\x03\x9f\x03\x00", 0x1ff8 +"\x03\xa9\x03\x00", 0x1ffa +"\x03\xa9\x03\x45", 0x1ffc +"\x21\x90\x03\x38", 0x219a +"\x21\x92\x03\x38", 0x219b +"\x21\x94\x03\x38", 0x21ae +"\x21\xd0\x03\x38", 0x21cd +"\x21\xd4\x03\x38", 0x21ce +"\x21\xd2\x03\x38", 0x21cf +"\x22\x03\x03\x38", 0x2204 +"\x22\x08\x03\x38", 0x2209 +"\x22\x0b\x03\x38", 0x220c +"\x22\x23\x03\x38", 0x2224 +"\x22\x25\x03\x38", 0x2226 +"\x22\x3c\x03\x38", 0x2241 +"\x22\x43\x03\x38", 0x2244 +"\x22\x45\x03\x38", 0x2247 +"\x22\x48\x03\x38", 0x2249 +"\x00\x3d\x03\x38", 0x2260 +"\x22\x61\x03\x38", 0x2262 +"\x22\x4d\x03\x38", 0x226d +"\x00\x3c\x03\x38", 0x226e +"\x00\x3e\x03\x38", 0x226f +"\x22\x64\x03\x38", 0x2270 +"\x22\x65\x03\x38", 0x2271 +"\x22\x72\x03\x38", 0x2274 +"\x22\x73\x03\x38", 0x2275 +"\x22\x76\x03\x38", 0x2278 +"\x22\x77\x03\x38", 0x2279 +"\x22\x7a\x03\x38", 0x2280 +"\x22\x7b\x03\x38", 0x2281 +"\x22\x82\x03\x38", 0x2284 +"\x22\x83\x03\x38", 0x2285 +"\x22\x86\x03\x38", 0x2288 +"\x22\x87\x03\x38", 0x2289 +"\x22\xa2\x03\x38", 0x22ac +"\x22\xa8\x03\x38", 0x22ad +"\x22\xa9\x03\x38", 0x22ae +"\x22\xab\x03\x38", 0x22af +"\x22\x7c\x03\x38", 0x22e0 +"\x22\x7d\x03\x38", 0x22e1 +"\x22\x91\x03\x38", 0x22e2 +"\x22\x92\x03\x38", 0x22e3 +"\x22\xb2\x03\x38", 0x22ea +"\x22\xb3\x03\x38", 0x22eb +"\x22\xb4\x03\x38", 0x22ec +"\x22\xb5\x03\x38", 0x22ed +"\x30\x4b\x30\x99", 0x304c +"\x30\x4d\x30\x99", 0x304e +"\x30\x4f\x30\x99", 0x3050 +"\x30\x51\x30\x99", 0x3052 +"\x30\x53\x30\x99", 0x3054 +"\x30\x55\x30\x99", 0x3056 +"\x30\x57\x30\x99", 0x3058 +"\x30\x59\x30\x99", 0x305a +"\x30\x5b\x30\x99", 0x305c +"\x30\x5d\x30\x99", 0x305e +"\x30\x5f\x30\x99", 0x3060 +"\x30\x61\x30\x99", 0x3062 +"\x30\x64\x30\x99", 0x3065 +"\x30\x66\x30\x99", 0x3067 +"\x30\x68\x30\x99", 0x3069 +"\x30\x6f\x30\x99", 0x3070 +"\x30\x6f\x30\x9a", 0x3071 +"\x30\x72\x30\x99", 0x3073 +"\x30\x72\x30\x9a", 0x3074 +"\x30\x75\x30\x99", 0x3076 +"\x30\x75\x30\x9a", 0x3077 +"\x30\x78\x30\x99", 0x3079 +"\x30\x78\x30\x9a", 0x307a +"\x30\x7b\x30\x99", 0x307c +"\x30\x7b\x30\x9a", 0x307d +"\x30\x46\x30\x99", 0x3094 +"\x30\x9d\x30\x99", 0x309e +"\x30\xab\x30\x99", 0x30ac +"\x30\xad\x30\x99", 0x30ae +"\x30\xaf\x30\x99", 0x30b0 +"\x30\xb1\x30\x99", 0x30b2 +"\x30\xb3\x30\x99", 0x30b4 +"\x30\xb5\x30\x99", 0x30b6 +"\x30\xb7\x30\x99", 0x30b8 +"\x30\xb9\x30\x99", 0x30ba +"\x30\xbb\x30\x99", 0x30bc +"\x30\xbd\x30\x99", 0x30be +"\x30\xbf\x30\x99", 0x30c0 +"\x30\xc1\x30\x99", 0x30c2 +"\x30\xc4\x30\x99", 0x30c5 +"\x30\xc6\x30\x99", 0x30c7 +"\x30\xc8\x30\x99", 0x30c9 +"\x30\xcf\x30\x99", 0x30d0 +"\x30\xcf\x30\x9a", 0x30d1 +"\x30\xd2\x30\x99", 0x30d3 +"\x30\xd2\x30\x9a", 0x30d4 +"\x30\xd5\x30\x99", 0x30d6 +"\x30\xd5\x30\x9a", 0x30d7 +"\x30\xd8\x30\x99", 0x30d9 +"\x30\xd8\x30\x9a", 0x30da +"\x30\xdb\x30\x99", 0x30dc +"\x30\xdb\x30\x9a", 0x30dd +"\x30\xa6\x30\x99", 0x30f4 +"\x30\xef\x30\x99", 0x30f7 +"\x30\xf0\x30\x99", 0x30f8 +"\x30\xf1\x30\x99", 0x30f9 +"\x30\xf2\x30\x99", 0x30fa +"\x30\xfd\x30\x99", 0x30fe diff --git a/lib/uninorm/composition-table.h b/lib/uninorm/composition-table.h new file mode 100644 index 00000000..3e992a40 --- /dev/null +++ b/lib/uninorm/composition-table.h @@ -0,0 +1,2159 @@ +/* ANSI-C code produced by gperf version 3.0.4 */ +/* Command-line: gperf -m 1 ./uninorm/composition-table.gperf */ +/* Computed positions: -k'1-2,4' */ + + +#define TOTAL_KEYWORDS 928 +#define MIN_WORD_LENGTH 4 +#define MAX_WORD_LENGTH 4 +#define MIN_HASH_VALUE 1 +#define MAX_HASH_VALUE 1527 +/* maximum key range = 1527, duplicates = 0 */ + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +/*ARGSUSED*/ +static unsigned int +gl_uninorm_compose_hash (register const char *str, register unsigned int len) +{ + static const unsigned short asso_values[] = + { + 7, 1, 0, 3, 58, 132, 240, 62, 4, 33, + 117, 268, 485, 135, 601, 599, 103, 770, 249, 284, + 59, 337, 685, 524, 711, 106, 498, 569, 712, 1528, + 91, 13, 841, 752, 322, 487, 192, 604, 817, 13, + 337, 65, 137, 147, 45, 144, 255, 588, 133, 342, + 172, 15, 1528, 794, 60, 95, 606, 50, 18, 1528, + 239, 67, 198, 362, 75, 89, 324, 2, 531, 167, + 12, 375, 289, 61, 397, 314, 431, 452, 395, 180, + 821, 736, 362, 561, 456, 202, 536, 360, 645, 300, + 592, 700, 1528, 361, 1528, 358, 796, 26, 783, 653, + 270, 98, 253, 415, 323, 42, 747, 575, 542, 691, + 262, 124, 792, 1528, 251, 559, 236, 133, 12, 406, + 460, 219, 627, 9, 158, 168, 1528, 1, 1528, 1528, + 161, 153, 1528, 1528, 129, 123, 1528, 1528, 1528, 1528, + 1528, 1528, 1528, 1528, 23, 493, 109, 1528, 10, 676, + 1528, 725, 1528, 650, 59, 384, 1528, 291, 1528, 50, + 589, 518, 79, 1528, 1528, 672, 235, 1528, 466, 628, + 1528, 62, 27, 229, 20, 668, 778, 531, 37, 5, + 16, 416, 5, 560, 34, 482, 1528, 147, 1528, 138, + 1528, 476, 1528, 530, 839, 1, 329, 524, 675, 342, + 136, 684, 580, 211, 31, 19, 9, 87, 21, 1528, + 356, 1528, 725, 313, 14, 0, 555, 65, 1528, 256, + 37, 1528, 1528, 1528, 105, 1528, 833, 1528, 16, 4, + 0, 3, 19, 1, 755, 4, 1528, 1528, 1528, 54, + 100, 76, 27, 1528, 811, 20, 56, 1528, 1, 1528, + 1528, 1528, 706, 14, 71, 1528, 1528 + }; + return asso_values[(unsigned char)str[3]+1] + asso_values[(unsigned char)str[1]] + asso_values[(unsigned char)str[0]]; +} + +#ifdef __GNUC__ +__inline +#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__ +__attribute__ ((__gnu_inline__)) +#endif +#endif +const struct composition_rule * +gl_uninorm_compose_lookup (register const char *str, register unsigned int len) +{ + static const unsigned char lengthtable[] = + { + 0, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 0, 4, 4, 0, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, + 4, 0, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 4, 4, 4, 4, + 4, 0, 4, 4, 4, 4, 0, 4, 4, 0, 4, 4, 0, 0, + 0, 0, 4, 4, 4, 0, 4, 4, 4, 0, 4, 0, 0, 0, + 4, 4, 4, 4, 4, 4, 0, 4, 4, 4, 0, 0, 0, 0, + 0, 4, 0, 4, 4, 0, 0, 0, 4, 4, 0, 4, 0, 4, + 0, 0, 0, 0, 4, 0, 4, 4, 4, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, + 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 4, 4, 0, 0, + 0, 0, 4, 0, 0, 4, 4, 0, 0, 4, 4, 4, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, + 0, 0, 0, 4, 0, 4, 4, 0, 0, 4, 0, 4, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, + 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4 + }; + static const struct composition_rule wordlist[] = + { + {""}, +#line 572 "./uninorm/composition-table.gperf" + {"\001\002\003\001", 0x1eae}, +#line 574 "./uninorm/composition-table.gperf" + {"\001\002\003\000", 0x1eb0}, + {""}, +#line 573 "./uninorm/composition-table.gperf" + {"\001\003\003\001", 0x1eaf}, +#line 575 "./uninorm/composition-table.gperf" + {"\001\003\003\000", 0x1eb1}, +#line 557 "./uninorm/composition-table.gperf" + {"\001\177\003\007", 0x1e9b}, +#line 236 "./uninorm/composition-table.gperf" + {"\000\346\003\001", 0x01fd}, +#line 238 "./uninorm/composition-table.gperf" + {"\000\370\003\001", 0x01ff}, +#line 90 "./uninorm/composition-table.gperf" + {"\000C\003\001", 0x0106}, +#line 412 "./uninorm/composition-table.gperf" + {"\000\347\003\001", 0x1e09}, +#line 234 "./uninorm/composition-table.gperf" + {"\000\345\003\001", 0x01fb}, +#line 92 "./uninorm/composition-table.gperf" + {"\000C\003\002", 0x0108}, +#line 94 "./uninorm/composition-table.gperf" + {"\000C\003\007", 0x010a}, +#line 653 "./uninorm/composition-table.gperf" + {"\037\001\003\001", 0x1f05}, +#line 651 "./uninorm/composition-table.gperf" + {"\037\001\003\000", 0x1f03}, +#line 655 "./uninorm/composition-table.gperf" + {"\037\001\003B", 0x1f07}, +#line 660 "./uninorm/composition-table.gperf" + {"\037\010\003\001", 0x1f0c}, +#line 658 "./uninorm/composition-table.gperf" + {"\037\010\003\000", 0x1f0a}, +#line 662 "./uninorm/composition-table.gperf" + {"\037\010\003B", 0x1f0e}, +#line 652 "./uninorm/composition-table.gperf" + {"\037\000\003\001", 0x1f04}, +#line 650 "./uninorm/composition-table.gperf" + {"\037\000\003\000", 0x1f02}, +#line 654 "./uninorm/composition-table.gperf" + {"\037\000\003B", 0x1f06}, +#line 433 "./uninorm/composition-table.gperf" + {"\000F\003\007", 0x1e1e}, +#line 851 "./uninorm/composition-table.gperf" + {"\003\316\003E", 0x1ff4}, +#line 757 "./uninorm/composition-table.gperf" + {"\037\002\003E", 0x1f82}, +#line 756 "./uninorm/composition-table.gperf" + {"\037\001\003E", 0x1f81}, +#line 480 "./uninorm/composition-table.gperf" + {"\000\365\003\001", 0x1e4d}, +#line 758 "./uninorm/composition-table.gperf" + {"\037\003\003E", 0x1f83}, +#line 763 "./uninorm/composition-table.gperf" + {"\037\010\003E", 0x1f88}, +#line 809 "./uninorm/composition-table.gperf" + {"\037\266\003E", 0x1fb7}, +#line 506 "./uninorm/composition-table.gperf" + {"\001a\003\007", 0x1e67}, +#line 755 "./uninorm/composition-table.gperf" + {"\037\000\003E", 0x1f80}, +#line 58 "./uninorm/composition-table.gperf" + {"\000a\003\001", 0x00e1}, +#line 57 "./uninorm/composition-table.gperf" + {"\000a\003\000", 0x00e0}, +#line 817 "./uninorm/composition-table.gperf" + {"\003\256\003E", 0x1fc4}, +#line 59 "./uninorm/composition-table.gperf" + {"\000a\003\002", 0x00e2}, +#line 270 "./uninorm/composition-table.gperf" + {"\000a\003\007", 0x0227}, +#line 778 "./uninorm/composition-table.gperf" + {"\037'\003E", 0x1f97}, +#line 737 "./uninorm/composition-table.gperf" + {"\037a\003\001", 0x1f65}, +#line 735 "./uninorm/composition-table.gperf" + {"\037a\003\000", 0x1f63}, +#line 739 "./uninorm/composition-table.gperf" + {"\037a\003B", 0x1f67}, +#line 807 "./uninorm/composition-table.gperf" + {"\003\254\003E", 0x1fb4}, +#line 524 "./uninorm/composition-table.gperf" + {"\001i\003\001", 0x1e79}, +#line 206 "./uninorm/composition-table.gperf" + {"\000\334\003\001", 0x01d7}, +#line 210 "./uninorm/composition-table.gperf" + {"\000\334\003\000", 0x01db}, +#line 661 "./uninorm/composition-table.gperf" + {"\037\011\003\001", 0x1f0d}, +#line 659 "./uninorm/composition-table.gperf" + {"\037\011\003\000", 0x1f0b}, +#line 663 "./uninorm/composition-table.gperf" + {"\037\011\003B", 0x1f0f}, +#line 69 "./uninorm/composition-table.gperf" + {"\000i\003\001", 0x00ed}, +#line 68 "./uninorm/composition-table.gperf" + {"\000i\003\000", 0x00ec}, +#line 788 "./uninorm/composition-table.gperf" + {"\037a\003E", 0x1fa1}, +#line 70 "./uninorm/composition-table.gperf" + {"\000i\003\002", 0x00ee}, +#line 288 "./uninorm/composition-table.gperf" + {"\003\237\003\001", 0x038c}, +#line 854 "./uninorm/composition-table.gperf" + {"\003\237\003\000", 0x1ff8}, +#line 745 "./uninorm/composition-table.gperf" + {"\037i\003\001", 0x1f6d}, +#line 743 "./uninorm/composition-table.gperf" + {"\037i\003\000", 0x1f6b}, +#line 747 "./uninorm/composition-table.gperf" + {"\037i\003B", 0x1f6f}, +#line 764 "./uninorm/composition-table.gperf" + {"\037\011\003E", 0x1f89}, +#line 578 "./uninorm/composition-table.gperf" + {"\001\002\003\003", 0x1eb4}, +#line 482 "./uninorm/composition-table.gperf" + {"\000\365\003\010", 0x1e4f}, +#line 450 "./uninorm/composition-table.gperf" + {"\000\357\003\001", 0x1e2f}, +#line 579 "./uninorm/composition-table.gperf" + {"\001\003\003\003", 0x1eb5}, +#line 705 "./uninorm/composition-table.gperf" + {"\0379\003\001", 0x1f3d}, +#line 703 "./uninorm/composition-table.gperf" + {"\0379\003\000", 0x1f3b}, +#line 707 "./uninorm/composition-table.gperf" + {"\0379\003B", 0x1f3f}, +#line 61 "./uninorm/composition-table.gperf" + {"\000a\003\010", 0x00e4}, +#line 796 "./uninorm/composition-table.gperf" + {"\037i\003E", 0x1fa9}, +#line 43 "./uninorm/composition-table.gperf" + {"\000I\003\001", 0x00cd}, +#line 42 "./uninorm/composition-table.gperf" + {"\000I\003\000", 0x00cc}, +#line 783 "./uninorm/composition-table.gperf" + {"\037,\003E", 0x1f9c}, +#line 44 "./uninorm/composition-table.gperf" + {"\000I\003\002", 0x00ce}, +#line 128 "./uninorm/composition-table.gperf" + {"\000I\003\007", 0x0130}, +#line 317 "./uninorm/composition-table.gperf" + {"\0043\003\001", 0x0453}, +#line 719 "./uninorm/composition-table.gperf" + {"\037I\003\001", 0x1f4d}, +#line 717 "./uninorm/composition-table.gperf" + {"\037I\003\000", 0x1f4b}, +#line 319 "./uninorm/composition-table.gperf" + {"\004:\003\001", 0x045c}, +#line 528 "./uninorm/composition-table.gperf" + {"\000v\003\003", 0x1e7d}, +#line 689 "./uninorm/composition-table.gperf" + {"\037)\003\001", 0x1f2d}, +#line 687 "./uninorm/composition-table.gperf" + {"\037)\003\000", 0x1f2b}, +#line 691 "./uninorm/composition-table.gperf" + {"\037)\003B", 0x1f2f}, +#line 853 "./uninorm/composition-table.gperf" + {"\037\366\003E", 0x1ff7}, +#line 71 "./uninorm/composition-table.gperf" + {"\000i\003\010", 0x00ef}, +#line 759 "./uninorm/composition-table.gperf" + {"\037\004\003E", 0x1f84}, +#line 835 "./uninorm/composition-table.gperf" + {"\037\376\003\001", 0x1fde}, +#line 834 "./uninorm/composition-table.gperf" + {"\037\376\003\000", 0x1fdd}, +#line 836 "./uninorm/composition-table.gperf" + {"\037\376\003B", 0x1fdf}, +#line 762 "./uninorm/composition-table.gperf" + {"\037\007\003E", 0x1f87}, +#line 712 "./uninorm/composition-table.gperf" + {"\037@\003\001", 0x1f44}, +#line 710 "./uninorm/composition-table.gperf" + {"\037@\003\000", 0x1f42}, +#line 780 "./uninorm/composition-table.gperf" + {"\037)\003E", 0x1f99}, +#line 60 "./uninorm/composition-table.gperf" + {"\000a\003\003", 0x00e3}, +#line 345 "./uninorm/composition-table.gperf" + {"\004\351\003\010", 0x04eb}, +#line 351 "./uninorm/composition-table.gperf" + {"\004C\003\010", 0x04f1}, +#line 449 "./uninorm/composition-table.gperf" + {"\000\317\003\001", 0x1e2e}, +#line 87 "./uninorm/composition-table.gperf" + {"\000a\003\006", 0x0103}, +#line 32 "./uninorm/composition-table.gperf" + {"\000A\003\001", 0x00c1}, +#line 31 "./uninorm/composition-table.gperf" + {"\000A\003\000", 0x00c0}, +#line 89 "./uninorm/composition-table.gperf" + {"\000a\003(", 0x0105}, +#line 33 "./uninorm/composition-table.gperf" + {"\000A\003\002", 0x00c2}, +#line 269 "./uninorm/composition-table.gperf" + {"\000A\003\007", 0x0226}, +#line 45 "./uninorm/composition-table.gperf" + {"\000I\003\010", 0x00cf}, +#line 713 "./uninorm/composition-table.gperf" + {"\037A\003\001", 0x1f45}, +#line 711 "./uninorm/composition-table.gperf" + {"\037A\003\000", 0x1f43}, +#line 354 "./uninorm/composition-table.gperf" + {"\004'\003\010", 0x04f4}, +#line 65 "./uninorm/composition-table.gperf" + {"\000e\003\001", 0x00e9}, +#line 64 "./uninorm/composition-table.gperf" + {"\000e\003\000", 0x00e8}, +#line 121 "./uninorm/composition-table.gperf" + {"\000i\003\003", 0x0129}, +#line 66 "./uninorm/composition-table.gperf" + {"\000e\003\002", 0x00ea}, +#line 105 "./uninorm/composition-table.gperf" + {"\000e\003\007", 0x0117}, +#line 344 "./uninorm/composition-table.gperf" + {"\004\350\003\010", 0x04ea}, +#line 125 "./uninorm/composition-table.gperf" + {"\000i\003\006", 0x012d}, +#line 714 "./uninorm/composition-table.gperf" + {"\003\237\003\023", 0x1f48}, +#line 615 "./uninorm/composition-table.gperf" + {"\036\315\003\002", 0x1ed9}, +#line 127 "./uninorm/composition-table.gperf" + {"\000i\003(", 0x012f}, +#line 368 "./uninorm/composition-table.gperf" + {"\0113\011<", 0x0934}, +#line 668 "./uninorm/composition-table.gperf" + {"\037\020\003\001", 0x1f14}, +#line 666 "./uninorm/composition-table.gperf" + {"\037\020\003\000", 0x1f12}, +#line 576 "./uninorm/composition-table.gperf" + {"\001\002\003\011", 0x1eb2}, +#line 675 "./uninorm/composition-table.gperf" + {"\037\031\003\001", 0x1f1d}, +#line 673 "./uninorm/composition-table.gperf" + {"\037\031\003\000", 0x1f1b}, +#line 577 "./uninorm/composition-table.gperf" + {"\001\003\003\011", 0x1eb3}, +#line 321 "./uninorm/composition-table.gperf" + {"\004C\003\006", 0x045e}, +#line 792 "./uninorm/composition-table.gperf" + {"\037e\003E", 0x1fa5}, +#line 872 "./uninorm/composition-table.gperf" + {"\000=\0038", 0x2260}, +#line 614 "./uninorm/composition-table.gperf" + {"\036\314\003\002", 0x1ed8}, +#line 120 "./uninorm/composition-table.gperf" + {"\000I\003\003", 0x0128}, +#line 432 "./uninorm/composition-table.gperf" + {"\002)\003\006", 0x1e1d}, +#line 596 "./uninorm/composition-table.gperf" + {"\036\270\003\002", 0x1ec6}, +#line 35 "./uninorm/composition-table.gperf" + {"\000A\003\010", 0x00c4}, +#line 124 "./uninorm/composition-table.gperf" + {"\000I\003\006", 0x012c}, +#line 74 "./uninorm/composition-table.gperf" + {"\000o\003\001", 0x00f3}, +#line 73 "./uninorm/composition-table.gperf" + {"\000o\003\000", 0x00f2}, +#line 126 "./uninorm/composition-table.gperf" + {"\000I\003(", 0x012e}, +#line 75 "./uninorm/composition-table.gperf" + {"\000o\003\002", 0x00f4}, +#line 278 "./uninorm/composition-table.gperf" + {"\000o\003\007", 0x022f}, +#line 240 "./uninorm/composition-table.gperf" + {"\000a\003\017", 0x0201}, +#line 225 "./uninorm/composition-table.gperf" + {"\001\353\003\004", 0x01ed}, +#line 67 "./uninorm/composition-table.gperf" + {"\000e\003\010", 0x00eb}, +#line 217 "./uninorm/composition-table.gperf" + {"\000\346\003\004", 0x01e3}, +#line 79 "./uninorm/composition-table.gperf" + {"\000u\003\001", 0x00fa}, +#line 78 "./uninorm/composition-table.gperf" + {"\000u\003\000", 0x00f9}, +#line 765 "./uninorm/composition-table.gperf" + {"\037\012\003E", 0x1f8a}, +#line 80 "./uninorm/composition-table.gperf" + {"\000u\003\002", 0x00fb}, +#line 96 "./uninorm/composition-table.gperf" + {"\000C\003\014", 0x010c}, +#line 215 "./uninorm/composition-table.gperf" + {"\002'\003\004", 0x01e1}, +#line 696 "./uninorm/composition-table.gperf" + {"\0370\003\001", 0x1f34}, +#line 694 "./uninorm/composition-table.gperf" + {"\0370\003\000", 0x1f32}, +#line 698 "./uninorm/composition-table.gperf" + {"\0370\003B", 0x1f36}, +#line 802 "./uninorm/composition-table.gperf" + {"\037o\003E", 0x1faf}, +#line 561 "./uninorm/composition-table.gperf" + {"\000a\003\011", 0x1ea3}, +#line 335 "./uninorm/composition-table.gperf" + {"\0046\003\010", 0x04dd}, +#line 248 "./uninorm/composition-table.gperf" + {"\000i\003\017", 0x0209}, +#line 273 "./uninorm/composition-table.gperf" + {"\000\326\003\004", 0x022a}, +#line 34 "./uninorm/composition-table.gperf" + {"\000A\003\003", 0x00c3}, +#line 213 "./uninorm/composition-table.gperf" + {"\000\344\003\004", 0x01df}, +#line 333 "./uninorm/composition-table.gperf" + {"\004\331\003\010", 0x04db}, +#line 760 "./uninorm/composition-table.gperf" + {"\037\005\003E", 0x1f85}, +#line 86 "./uninorm/composition-table.gperf" + {"\000A\003\006", 0x0102}, +#line 276 "./uninorm/composition-table.gperf" + {"\000\365\003\004", 0x022d}, +#line 768 "./uninorm/composition-table.gperf" + {"\037\015\003E", 0x1f8d}, +#line 88 "./uninorm/composition-table.gperf" + {"\000A\003(", 0x0104}, +#line 781 "./uninorm/composition-table.gperf" + {"\037*\003E", 0x1f9a}, +#line 587 "./uninorm/composition-table.gperf" + {"\000e\003\003", 0x1ebd}, +#line 77 "./uninorm/composition-table.gperf" + {"\000o\003\010", 0x00f6}, +#line 85 "./uninorm/composition-table.gperf" + {"\000a\003\004", 0x0101}, +#line 599 "./uninorm/composition-table.gperf" + {"\000i\003\011", 0x1ec9}, +#line 103 "./uninorm/composition-table.gperf" + {"\000e\003\006", 0x0115}, +#line 197 "./uninorm/composition-table.gperf" + {"\000a\003\014", 0x01ce}, +#line 784 "./uninorm/composition-table.gperf" + {"\037-\003E", 0x1f9d}, +#line 107 "./uninorm/composition-table.gperf" + {"\000e\003(", 0x0119}, +#line 247 "./uninorm/composition-table.gperf" + {"\000I\003\017", 0x0208}, +#line 782 "./uninorm/composition-table.gperf" + {"\037+\003E", 0x1f9b}, +#line 81 "./uninorm/composition-table.gperf" + {"\000u\003\010", 0x00fc}, +#line 39 "./uninorm/composition-table.gperf" + {"\000E\003\001", 0x00c9}, +#line 38 "./uninorm/composition-table.gperf" + {"\000E\003\000", 0x00c8}, +#line 204 "./uninorm/composition-table.gperf" + {"\000\334\003\004", 0x01d5}, +#line 40 "./uninorm/composition-table.gperf" + {"\000E\003\002", 0x00ca}, +#line 104 "./uninorm/composition-table.gperf" + {"\000E\003\007", 0x0116}, +#line 208 "./uninorm/composition-table.gperf" + {"\000\334\003\014", 0x01d9}, +#line 325 "./uninorm/composition-table.gperf" + {"\0046\003\006", 0x04c2}, +#line 123 "./uninorm/composition-table.gperf" + {"\000i\003\004", 0x012b}, +#line 342 "./uninorm/composition-table.gperf" + {"\004\036\003\010", 0x04e6}, +#line 849 "./uninorm/composition-table.gperf" + {"\037|\003E", 0x1ff2}, +#line 199 "./uninorm/composition-table.gperf" + {"\000i\003\014", 0x01d0}, +#line 598 "./uninorm/composition-table.gperf" + {"\000I\003\011", 0x1ec8}, +#line 337 "./uninorm/composition-table.gperf" + {"\0047\003\010", 0x04df}, +#line 48 "./uninorm/composition-table.gperf" + {"\000O\003\001", 0x00d3}, +#line 47 "./uninorm/composition-table.gperf" + {"\000O\003\000", 0x00d2}, +#line 76 "./uninorm/composition-table.gperf" + {"\000o\003\003", 0x00f5}, +#line 49 "./uninorm/composition-table.gperf" + {"\000O\003\002", 0x00d4}, +#line 277 "./uninorm/composition-table.gperf" + {"\000O\003\007", 0x022e}, +#line 349 "./uninorm/composition-table.gperf" + {"\004C\003\004", 0x04ef}, +#line 148 "./uninorm/composition-table.gperf" + {"\000o\003\006", 0x014f}, +#line 328 "./uninorm/composition-table.gperf" + {"\004\020\003\010", 0x04d2}, +#line 274 "./uninorm/composition-table.gperf" + {"\000\366\003\004", 0x022b}, +#line 223 "./uninorm/composition-table.gperf" + {"\000o\003(", 0x01eb}, +#line 932 "./uninorm/composition-table.gperf" + {"0\2630\231", 0x30b4}, +#line 170 "./uninorm/composition-table.gperf" + {"\000u\003\003", 0x0169}, +#line 239 "./uninorm/composition-table.gperf" + {"\000A\003\017", 0x0200}, +#line 122 "./uninorm/composition-table.gperf" + {"\000I\003\004", 0x012a}, +#line 924 "./uninorm/composition-table.gperf" + {"0{0\231", 0x307c}, +#line 174 "./uninorm/composition-table.gperf" + {"\000u\003\006", 0x016d}, +#line 198 "./uninorm/composition-table.gperf" + {"\000I\003\014", 0x01cf}, +#line 926 "./uninorm/composition-table.gperf" + {"0F0\231", 0x3094}, +#line 180 "./uninorm/composition-table.gperf" + {"\000u\003(", 0x0173}, +#line 958 "./uninorm/composition-table.gperf" + {"0\3750\231", 0x30fe}, +#line 41 "./uninorm/composition-table.gperf" + {"\000E\003\010", 0x00cb}, +#line 244 "./uninorm/composition-table.gperf" + {"\000e\003\017", 0x0205}, +#line 53 "./uninorm/composition-table.gperf" + {"\000U\003\001", 0x00da}, +#line 52 "./uninorm/composition-table.gperf" + {"\000U\003\000", 0x00d9}, +#line 530 "./uninorm/composition-table.gperf" + {"\000v\003#", 0x1e7f}, +#line 54 "./uninorm/composition-table.gperf" + {"\000U\003\002", 0x00db}, +#line 560 "./uninorm/composition-table.gperf" + {"\000A\003\011", 0x1ea2}, +#line 298 "./uninorm/composition-table.gperf" + {"\003\313\003\001", 0x03b0}, +#line 839 "./uninorm/composition-table.gperf" + {"\003\313\003\000", 0x1fe2}, +#line 843 "./uninorm/composition-table.gperf" + {"\003\313\003B", 0x1fe7}, +#line 775 "./uninorm/composition-table.gperf" + {"\037$\003E", 0x1f94}, +#line 912 "./uninorm/composition-table.gperf" + {"0a0\231", 0x3062}, +#line 957 "./uninorm/composition-table.gperf" + {"0\3620\231", 0x30fa}, +#line 51 "./uninorm/composition-table.gperf" + {"\000O\003\010", 0x00d6}, +#line 388 "./uninorm/composition-table.gperf" + {"\015\331\015\317", 0x0ddc}, +#line 585 "./uninorm/composition-table.gperf" + {"\000e\003\011", 0x1ebb}, +#line 326 "./uninorm/composition-table.gperf" + {"\004\020\003\006", 0x04d0}, +#line 329 "./uninorm/composition-table.gperf" + {"\0040\003\010", 0x04d3}, +#line 559 "./uninorm/composition-table.gperf" + {"\000a\003#", 0x1ea1}, +#line 82 "./uninorm/composition-table.gperf" + {"\000y\003\001", 0x00fd}, +#line 641 "./uninorm/composition-table.gperf" + {"\000y\003\000", 0x1ef3}, +#line 84 "./uninorm/composition-table.gperf" + {"\000A\003\004", 0x0100}, +#line 184 "./uninorm/composition-table.gperf" + {"\000y\003\002", 0x0177}, +#line 546 "./uninorm/composition-table.gperf" + {"\000y\003\007", 0x1e8f}, +#line 196 "./uninorm/composition-table.gperf" + {"\000A\003\014", 0x01cd}, +#line 586 "./uninorm/composition-table.gperf" + {"\000E\003\003", 0x1ebc}, +#line 367 "./uninorm/composition-table.gperf" + {"\0110\011<", 0x0931}, +#line 252 "./uninorm/composition-table.gperf" + {"\000o\003\017", 0x020d}, +#line 346 "./uninorm/composition-table.gperf" + {"\004-\003\010", 0x04ec}, +#line 102 "./uninorm/composition-table.gperf" + {"\000E\003\006", 0x0114}, +#line 101 "./uninorm/composition-table.gperf" + {"\000e\003\004", 0x0113}, +#line 356 "./uninorm/composition-table.gperf" + {"\004+\003\010", 0x04f8}, +#line 106 "./uninorm/composition-table.gperf" + {"\000E\003(", 0x0118}, +#line 109 "./uninorm/composition-table.gperf" + {"\000e\003\014", 0x011b}, +#line 601 "./uninorm/composition-table.gperf" + {"\000i\003#", 0x1ecb}, +#line 55 "./uninorm/composition-table.gperf" + {"\000U\003\010", 0x00dc}, +#line 260 "./uninorm/composition-table.gperf" + {"\000u\003\017", 0x0215}, +#line 227 "./uninorm/composition-table.gperf" + {"\002\222\003\014", 0x01ef}, +#line 50 "./uninorm/composition-table.gperf" + {"\000O\003\003", 0x00d5}, +#line 954 "./uninorm/composition-table.gperf" + {"0\3570\231", 0x30f7}, +#line 510 "./uninorm/composition-table.gperf" + {"\000t\003\007", 0x1e6b}, +#line 605 "./uninorm/composition-table.gperf" + {"\000o\003\011", 0x1ecf}, +#line 147 "./uninorm/composition-table.gperf" + {"\000O\003\006", 0x014e}, +#line 425 "./uninorm/composition-table.gperf" + {"\001\022\003\001", 0x1e16}, +#line 423 "./uninorm/composition-table.gperf" + {"\001\022\003\000", 0x1e14}, +#line 222 "./uninorm/composition-table.gperf" + {"\000O\003(", 0x01ea}, +#line 327 "./uninorm/composition-table.gperf" + {"\0040\003\006", 0x04d1}, +#line 928 "./uninorm/composition-table.gperf" + {"0\2530\231", 0x30ac}, +#line 876 "./uninorm/composition-table.gperf" + {"\000>\0038", 0x226f}, +#line 266 "./uninorm/composition-table.gperf" + {"\000t\003&", 0x021b}, +#line 629 "./uninorm/composition-table.gperf" + {"\000u\003\011", 0x1ee7}, +#line 152 "./uninorm/composition-table.gperf" + {"\000r\003\001", 0x0155}, +#line 83 "./uninorm/composition-table.gperf" + {"\000y\003\010", 0x00ff}, +#line 600 "./uninorm/composition-table.gperf" + {"\000I\003#", 0x1eca}, +#line 815 "./uninorm/composition-table.gperf" + {"\037t\003E", 0x1fc2}, +#line 492 "./uninorm/composition-table.gperf" + {"\000r\003\007", 0x1e59}, +#line 146 "./uninorm/composition-table.gperf" + {"\000o\003\004", 0x014d}, +#line 434 "./uninorm/composition-table.gperf" + {"\000f\003\007", 0x1e1f}, +#line 761 "./uninorm/composition-table.gperf" + {"\037\006\003E", 0x1f86}, +#line 201 "./uninorm/composition-table.gperf" + {"\000o\003\014", 0x01d2}, +#line 169 "./uninorm/composition-table.gperf" + {"\000U\003\003", 0x0168}, +#line 956 "./uninorm/composition-table.gperf" + {"0\3610\231", 0x30f9}, +#line 140 "./uninorm/composition-table.gperf" + {"\000n\003\001", 0x0144}, +#line 232 "./uninorm/composition-table.gperf" + {"\000n\003\000", 0x01f9}, +#line 173 "./uninorm/composition-table.gperf" + {"\000U\003\006", 0x016c}, +#line 172 "./uninorm/composition-table.gperf" + {"\000u\003\004", 0x016b}, +#line 472 "./uninorm/composition-table.gperf" + {"\000n\003\007", 0x1e45}, +#line 179 "./uninorm/composition-table.gperf" + {"\000U\003(", 0x0172}, +#line 203 "./uninorm/composition-table.gperf" + {"\000u\003\014", 0x01d4}, +#line 554 "./uninorm/composition-table.gperf" + {"\000t\003\010", 0x1e97}, +#line 243 "./uninorm/composition-table.gperf" + {"\000E\003\017", 0x0204}, +#line 793 "./uninorm/composition-table.gperf" + {"\037f\003E", 0x1fa6}, +#line 943 "./uninorm/composition-table.gperf" + {"0\3170\231", 0x30d0}, +#line 785 "./uninorm/composition-table.gperf" + {"\037.\003E", 0x1f9e}, +#line 414 "./uninorm/composition-table.gperf" + {"\000d\003\007", 0x1e0b}, +#line 242 "./uninorm/composition-table.gperf" + {"\000a\003\021", 0x0203}, +#line 459 "./uninorm/composition-table.gperf" + {"\0366\003\004", 0x1e38}, +#line 647 "./uninorm/composition-table.gperf" + {"\000y\003\003", 0x1ef9}, +#line 426 "./uninorm/composition-table.gperf" + {"\001\023\003\001", 0x1e17}, +#line 424 "./uninorm/composition-table.gperf" + {"\001\023\003\000", 0x1e15}, +#line 801 "./uninorm/composition-table.gperf" + {"\037n\003E", 0x1fae}, +#line 558 "./uninorm/composition-table.gperf" + {"\000A\003#", 0x1ea0}, +#line 343 "./uninorm/composition-table.gperf" + {"\004>\003\010", 0x04e7}, +#line 251 "./uninorm/composition-table.gperf" + {"\000O\003\017", 0x020c}, +#line 584 "./uninorm/composition-table.gperf" + {"\000E\003\011", 0x1eba}, +#line 955 "./uninorm/composition-table.gperf" + {"0\3600\231", 0x30f8}, +#line 766 "./uninorm/composition-table.gperf" + {"\037\013\003E", 0x1f8b}, +#line 323 "./uninorm/composition-table.gperf" + {"\004u\003\017", 0x0477}, +#line 791 "./uninorm/composition-table.gperf" + {"\037d\003E", 0x1fa4}, +#line 875 "./uninorm/composition-table.gperf" + {"\000<\0038", 0x226e}, +#line 583 "./uninorm/composition-table.gperf" + {"\000e\003#", 0x1eb9}, +#line 250 "./uninorm/composition-table.gperf" + {"\000i\003\021", 0x020b}, +#line 118 "./uninorm/composition-table.gperf" + {"\000H\003\002", 0x0124}, +#line 437 "./uninorm/composition-table.gperf" + {"\000H\003\007", 0x1e22}, +#line 62 "./uninorm/composition-table.gperf" + {"\000a\003\012", 0x00e5}, +#line 718 "./uninorm/composition-table.gperf" + {"\037H\003\001", 0x1f4c}, +#line 716 "./uninorm/composition-table.gperf" + {"\037H\003\000", 0x1f4a}, +#line 604 "./uninorm/composition-table.gperf" + {"\000O\003\011", 0x1ece}, +#line 390 "./uninorm/composition-table.gperf" + {"\015\331\015\337", 0x0dde}, +#line 100 "./uninorm/composition-table.gperf" + {"\000E\003\004", 0x0112}, +#line 56 "./uninorm/composition-table.gperf" + {"\000Y\003\001", 0x00dd}, +#line 640 "./uninorm/composition-table.gperf" + {"\000Y\003\000", 0x1ef2}, +#line 108 "./uninorm/composition-table.gperf" + {"\000E\003\014", 0x011a}, +#line 183 "./uninorm/composition-table.gperf" + {"\000Y\003\002", 0x0176}, +#line 545 "./uninorm/composition-table.gperf" + {"\000Y\003\007", 0x1e8e}, +#line 259 "./uninorm/composition-table.gperf" + {"\000U\003\017", 0x0214}, +#line 730 "./uninorm/composition-table.gperf" + {"\037Y\003\001", 0x1f5d}, +#line 729 "./uninorm/composition-table.gperf" + {"\037Y\003\000", 0x1f5b}, +#line 731 "./uninorm/composition-table.gperf" + {"\037Y\003B", 0x1f5f}, +#line 916 "./uninorm/composition-table.gperf" + {"0o0\231", 0x3070}, +#line 249 "./uninorm/composition-table.gperf" + {"\000I\003\021", 0x020a}, +#line 460 "./uninorm/composition-table.gperf" + {"\0367\003\004", 0x1e39}, +#line 145 "./uninorm/composition-table.gperf" + {"\000O\003\004", 0x014c}, +#line 479 "./uninorm/composition-table.gperf" + {"\000\325\003\001", 0x1e4c}, +#line 451 "./uninorm/composition-table.gperf" + {"\000K\003\001", 0x1e30}, +#line 200 "./uninorm/composition-table.gperf" + {"\000O\003\014", 0x01d1}, +#line 603 "./uninorm/composition-table.gperf" + {"\000o\003#", 0x1ecd}, +#line 523 "./uninorm/composition-table.gperf" + {"\001h\003\001", 0x1e78}, +#line 920 "./uninorm/composition-table.gperf" + {"0u0\231", 0x3076}, +#line 628 "./uninorm/composition-table.gperf" + {"\000U\003\011", 0x1ee6}, +#line 72 "./uninorm/composition-table.gperf" + {"\000n\003\003", 0x00f1}, +#line 942 "./uninorm/composition-table.gperf" + {"0\3100\231", 0x30c9}, +#line 441 "./uninorm/composition-table.gperf" + {"\000H\003\010", 0x1e26}, +#line 937 "./uninorm/composition-table.gperf" + {"0\2750\231", 0x30be}, +#line 309 "./uninorm/composition-table.gperf" + {"\004\006\003\010", 0x0407}, +#line 627 "./uninorm/composition-table.gperf" + {"\000u\003#", 0x1ee5}, +#line 119 "./uninorm/composition-table.gperf" + {"\000h\003\002", 0x0125}, +#line 438 "./uninorm/composition-table.gperf" + {"\000h\003\007", 0x1e23}, +#line 405 "./uninorm/composition-table.gperf" + {"\000B\003\007", 0x1e02}, +#line 744 "./uninorm/composition-table.gperf" + {"\037h\003\001", 0x1f6c}, +#line 742 "./uninorm/composition-table.gperf" + {"\037h\003\000", 0x1f6a}, +#line 746 "./uninorm/composition-table.gperf" + {"\037h\003B", 0x1f6e}, +#line 936 "./uninorm/composition-table.gperf" + {"0\2730\231", 0x30bc}, +#line 185 "./uninorm/composition-table.gperf" + {"\000Y\003\010", 0x0178}, +#line 171 "./uninorm/composition-table.gperf" + {"\000U\003\004", 0x016a}, +#line 308 "./uninorm/composition-table.gperf" + {"\004\023\003\001", 0x0403}, +#line 645 "./uninorm/composition-table.gperf" + {"\000y\003\011", 0x1ef7}, +#line 202 "./uninorm/composition-table.gperf" + {"\000U\003\014", 0x01d3}, +#line 241 "./uninorm/composition-table.gperf" + {"\000A\003\021", 0x0202}, +#line 37 "./uninorm/composition-table.gperf" + {"\000C\003'", 0x00c7}, +#line 773 "./uninorm/composition-table.gperf" + {"\037\"\003E", 0x1f92}, +#line 795 "./uninorm/composition-table.gperf" + {"\037h\003E", 0x1fa8}, +#line 411 "./uninorm/composition-table.gperf" + {"\000\307\003\001", 0x1e08}, +#line 688 "./uninorm/composition-table.gperf" + {"\037(\003\001", 0x1f2c}, +#line 686 "./uninorm/composition-table.gperf" + {"\037(\003\000", 0x1f2a}, +#line 690 "./uninorm/composition-table.gperf" + {"\037(\003B", 0x1f2e}, +#line 481 "./uninorm/composition-table.gperf" + {"\000\325\003\010", 0x1e4e}, +#line 246 "./uninorm/composition-table.gperf" + {"\000e\003\021", 0x0207}, +#line 697 "./uninorm/composition-table.gperf" + {"\0371\003\001", 0x1f35}, +#line 695 "./uninorm/composition-table.gperf" + {"\0371\003\000", 0x1f33}, +#line 699 "./uninorm/composition-table.gperf" + {"\0371\003B", 0x1f37}, +#line 282 "./uninorm/composition-table.gperf" + {"\000y\003\004", 0x0233}, +#line 304 "./uninorm/composition-table.gperf" + {"\003\322\003\001", 0x03d3}, +#line 428 "./uninorm/composition-table.gperf" + {"\000e\003-", 0x1e19}, +#line 256 "./uninorm/composition-table.gperf" + {"\000r\003\017", 0x0211}, +#line 779 "./uninorm/composition-table.gperf" + {"\037(\003E", 0x1f98}, +#line 442 "./uninorm/composition-table.gperf" + {"\000h\003\010", 0x1e27}, +#line 36 "./uninorm/composition-table.gperf" + {"\000A\003\012", 0x00c5}, +#line 646 "./uninorm/composition-table.gperf" + {"\000Y\003\003", 0x1ef8}, +#line 582 "./uninorm/composition-table.gperf" + {"\000E\003#", 0x1eb8}, +#line 533 "./uninorm/composition-table.gperf" + {"\000W\003\001", 0x1e82}, +#line 531 "./uninorm/composition-table.gperf" + {"\000W\003\000", 0x1e80}, +#line 151 "./uninorm/composition-table.gperf" + {"\000R\003\001", 0x0154}, +#line 181 "./uninorm/composition-table.gperf" + {"\000W\003\002", 0x0174}, +#line 537 "./uninorm/composition-table.gperf" + {"\000W\003\007", 0x1e86}, +#line 903 "./uninorm/composition-table.gperf" + {"0O0\231", 0x3050}, +#line 491 "./uninorm/composition-table.gperf" + {"\000R\003\007", 0x1e58}, +#line 869 "./uninorm/composition-table.gperf" + {"\"C\0038", 0x2244}, +#line 863 "./uninorm/composition-table.gperf" + {"\"\003\0038", 0x2204}, +#line 864 "./uninorm/composition-table.gperf" + {"\"\010\0038", 0x2209}, +#line 898 "./uninorm/composition-table.gperf" + {"\"\263\0038", 0x22eb}, +#line 168 "./uninorm/composition-table.gperf" + {"\000t\003\014", 0x0165}, +#line 602 "./uninorm/composition-table.gperf" + {"\000O\003#", 0x1ecc}, +#line 254 "./uninorm/composition-table.gperf" + {"\000o\003\021", 0x020f}, +#line 884 "./uninorm/composition-table.gperf" + {"\"{\0038", 0x2281}, +#line 229 "./uninorm/composition-table.gperf" + {"\000G\003\001", 0x01f4}, +#line 389 "./uninorm/composition-table.gperf" + {"\015\334\015\312", 0x0ddd}, +#line 881 "./uninorm/composition-table.gperf" + {"\"v\0038", 0x2278}, +#line 110 "./uninorm/composition-table.gperf" + {"\000G\003\002", 0x011c}, +#line 114 "./uninorm/composition-table.gperf" + {"\000G\003\007", 0x0120}, +#line 279 "./uninorm/composition-table.gperf" + {"\002.\003\004", 0x0230}, +#line 899 "./uninorm/composition-table.gperf" + {"\"\264\0038", 0x22ec}, +#line 262 "./uninorm/composition-table.gperf" + {"\000u\003\021", 0x0217}, +#line 715 "./uninorm/composition-table.gperf" + {"\003\237\003\024", 0x1f49}, +#line 448 "./uninorm/composition-table.gperf" + {"\000i\0030", 0x1e2d}, +#line 305 "./uninorm/composition-table.gperf" + {"\003\322\003\010", 0x03d4}, +#line 156 "./uninorm/composition-table.gperf" + {"\000r\003\014", 0x0159}, +#line 906 "./uninorm/composition-table.gperf" + {"0U0\231", 0x3056}, +#line 522 "./uninorm/composition-table.gperf" + {"\000u\003-", 0x1e77}, +#line 306 "./uninorm/composition-table.gperf" + {"\004\025\003\000", 0x0400}, +#line 322 "./uninorm/composition-table.gperf" + {"\004t\003\017", 0x0476}, +#line 873 "./uninorm/composition-table.gperf" + {"\"a\0038", 0x2262}, +#line 431 "./uninorm/composition-table.gperf" + {"\002(\003\006", 0x1e1c}, +#line 535 "./uninorm/composition-table.gperf" + {"\000W\003\010", 0x1e84}, +#line 626 "./uninorm/composition-table.gperf" + {"\000U\003#", 0x1ee4}, +#line 139 "./uninorm/composition-table.gperf" + {"\000N\003\001", 0x0143}, +#line 231 "./uninorm/composition-table.gperf" + {"\000N\003\000", 0x01f8}, +#line 144 "./uninorm/composition-table.gperf" + {"\000n\003\014", 0x0148}, +#line 357 "./uninorm/composition-table.gperf" + {"\004K\003\010", 0x04f9}, +#line 471 "./uninorm/composition-table.gperf" + {"\000N\003\007", 0x1e44}, +#line 129 "./uninorm/composition-table.gperf" + {"\000J\003\002", 0x0134}, +#line 176 "./uninorm/composition-table.gperf" + {"\000u\003\012", 0x016f}, +#line 897 "./uninorm/composition-table.gperf" + {"\"\262\0038", 0x22ea}, +#line 447 "./uninorm/composition-table.gperf" + {"\000I\0030", 0x1e2c}, +#line 387 "./uninorm/composition-table.gperf" + {"\015\331\015\312", 0x0dda}, +#line 99 "./uninorm/composition-table.gperf" + {"\000d\003\014", 0x010f}, +#line 534 "./uninorm/composition-table.gperf" + {"\000w\003\001", 0x1e83}, +#line 532 "./uninorm/composition-table.gperf" + {"\000w\003\000", 0x1e81}, +#line 514 "./uninorm/composition-table.gperf" + {"\000t\0031", 0x1e6f}, +#line 182 "./uninorm/composition-table.gperf" + {"\000w\003\002", 0x0175}, +#line 538 "./uninorm/composition-table.gperf" + {"\000w\003\007", 0x1e87}, +#line 643 "./uninorm/composition-table.gperf" + {"\000y\003#", 0x1ef5}, +#line 295 "./uninorm/composition-table.gperf" + {"\003\265\003\001", 0x03ad}, +#line 749 "./uninorm/composition-table.gperf" + {"\003\265\003\000", 0x1f72}, +#line 929 "./uninorm/composition-table.gperf" + {"0\2550\231", 0x30ae}, +#line 230 "./uninorm/composition-table.gperf" + {"\000g\003\001", 0x01f5}, +#line 245 "./uninorm/composition-table.gperf" + {"\000E\003\021", 0x0206}, +#line 644 "./uninorm/composition-table.gperf" + {"\000Y\003\011", 0x1ef6}, +#line 111 "./uninorm/composition-table.gperf" + {"\000g\003\002", 0x011d}, +#line 115 "./uninorm/composition-table.gperf" + {"\000g\003\007", 0x0121}, +#line 953 "./uninorm/composition-table.gperf" + {"0\2460\231", 0x30f4}, +#line 307 "./uninorm/composition-table.gperf" + {"\004\025\003\010", 0x0401}, +#line 427 "./uninorm/composition-table.gperf" + {"\000E\003-", 0x1e18}, +#line 498 "./uninorm/composition-table.gperf" + {"\000r\0031", 0x1e5f}, +#line 267 "./uninorm/composition-table.gperf" + {"\000H\003\014", 0x021e}, +#line 485 "./uninorm/composition-table.gperf" + {"\001L\003\001", 0x1e52}, +#line 483 "./uninorm/composition-table.gperf" + {"\001L\003\000", 0x1e50}, +#line 892 "./uninorm/composition-table.gperf" + {"\"\253\0038", 0x22af}, +#line 512 "./uninorm/composition-table.gperf" + {"\000t\003#", 0x1e6d}, +#line 253 "./uninorm/composition-table.gperf" + {"\000O\003\021", 0x020e}, +#line 366 "./uninorm/composition-table.gperf" + {"\011(\011<", 0x0929}, +#line 133 "./uninorm/composition-table.gperf" + {"\000L\003\001", 0x0139}, +#line 281 "./uninorm/composition-table.gperf" + {"\000Y\003\004", 0x0232}, +#line 794 "./uninorm/composition-table.gperf" + {"\037g\003E", 0x1fa7}, +#line 476 "./uninorm/composition-table.gperf" + {"\000n\0031", 0x1e49}, +#line 272 "./uninorm/composition-table.gperf" + {"\000e\003'", 0x0229}, +#line 918 "./uninorm/composition-table.gperf" + {"0r0\231", 0x3073}, +#line 112 "./uninorm/composition-table.gperf" + {"\000G\003\006", 0x011e}, +#line 914 "./uninorm/composition-table.gperf" + {"0f0\231", 0x3067}, +#line 536 "./uninorm/composition-table.gperf" + {"\000w\003\010", 0x1e85}, +#line 430 "./uninorm/composition-table.gperf" + {"\000e\0030", 0x1e1b}, +#line 951 "./uninorm/composition-table.gperf" + {"0\3330\231", 0x30dc}, +#line 418 "./uninorm/composition-table.gperf" + {"\000d\0031", 0x1e0f}, +#line 494 "./uninorm/composition-table.gperf" + {"\000r\003#", 0x1e5b}, +#line 889 "./uninorm/composition-table.gperf" + {"\"\242\0038", 0x22ac}, +#line 275 "./uninorm/composition-table.gperf" + {"\000\325\003\004", 0x022c}, +#line 486 "./uninorm/composition-table.gperf" + {"\001M\003\001", 0x1e53}, +#line 484 "./uninorm/composition-table.gperf" + {"\001M\003\000", 0x1e51}, +#line 359 "./uninorm/composition-table.gperf" + {"\006'\006T", 0x0623}, +#line 220 "./uninorm/composition-table.gperf" + {"\000K\003\014", 0x01e8}, +#line 330 "./uninorm/composition-table.gperf" + {"\004\025\003\006", 0x04d6}, +#line 261 "./uninorm/composition-table.gperf" + {"\000U\003\021", 0x0216}, +#line 465 "./uninorm/composition-table.gperf" + {"\000M\003\001", 0x1e3e}, +#line 46 "./uninorm/composition-table.gperf" + {"\000N\003\003", 0x00d1}, +#line 474 "./uninorm/composition-table.gperf" + {"\000n\003#", 0x1e47}, +#line 913 "./uninorm/composition-table.gperf" + {"0d0\231", 0x3065}, +#line 467 "./uninorm/composition-table.gperf" + {"\000M\003\007", 0x1e40}, +#line 521 "./uninorm/composition-table.gperf" + {"\000U\003-", 0x1e76}, +#line 268 "./uninorm/composition-table.gperf" + {"\000h\003\014", 0x021f}, +#line 355 "./uninorm/composition-table.gperf" + {"\004G\003\010", 0x04f5}, +#line 509 "./uninorm/composition-table.gperf" + {"\000T\003\007", 0x1e6a}, +#line 212 "./uninorm/composition-table.gperf" + {"\000\304\003\004", 0x01de}, +#line 416 "./uninorm/composition-table.gperf" + {"\000d\003#", 0x1e0d}, +#line 878 "./uninorm/composition-table.gperf" + {"\"e\0038", 0x2271}, +#line 542 "./uninorm/composition-table.gperf" + {"\000x\003\007", 0x1e8b}, +#line 255 "./uninorm/composition-table.gperf" + {"\000R\003\017", 0x0210}, +#line 283 "./uninorm/composition-table.gperf" + {"\000\250\003\001", 0x0385}, +#line 848 "./uninorm/composition-table.gperf" + {"\000\250\003\000", 0x1fed}, +#line 814 "./uninorm/composition-table.gperf" + {"\000\250\003B", 0x1fc1}, +#line 265 "./uninorm/composition-table.gperf" + {"\000T\003&", 0x021a}, +#line 175 "./uninorm/composition-table.gperf" + {"\000U\003\012", 0x016e}, +#line 664 "./uninorm/composition-table.gperf" + {"\003\265\003\023", 0x1f10}, +#line 301 "./uninorm/composition-table.gperf" + {"\003\277\003\001", 0x03cc}, +#line 752 "./uninorm/composition-table.gperf" + {"\003\277\003\000", 0x1f78}, +#line 896 "./uninorm/composition-table.gperf" + {"\"\222\0038", 0x22e3}, +#line 520 "./uninorm/composition-table.gperf" + {"\000u\0030", 0x1e75}, +#line 927 "./uninorm/composition-table.gperf" + {"0\2350\231", 0x309e}, +#line 113 "./uninorm/composition-table.gperf" + {"\000g\003\006", 0x011f}, +#line 297 "./uninorm/composition-table.gperf" + {"\003\271\003\001", 0x03af}, +#line 751 "./uninorm/composition-table.gperf" + {"\003\271\003\000", 0x1f76}, +#line 829 "./uninorm/composition-table.gperf" + {"\003\271\003B", 0x1fd6}, +#line 439 "./uninorm/composition-table.gperf" + {"\000H\003#", 0x1e24}, +#line 824 "./uninorm/composition-table.gperf" + {"\037\277\003\001", 0x1fce}, +#line 823 "./uninorm/composition-table.gperf" + {"\037\277\003\000", 0x1fcd}, +#line 825 "./uninorm/composition-table.gperf" + {"\037\277\003B", 0x1fcf}, +#line 908 "./uninorm/composition-table.gperf" + {"0Y0\231", 0x305a}, +#line 455 "./uninorm/composition-table.gperf" + {"\000K\0031", 0x1e34}, +#line 556 "./uninorm/composition-table.gperf" + {"\000y\003\012", 0x1e99}, +#line 888 "./uninorm/composition-table.gperf" + {"\"\207\0038", 0x2289}, +#line 284 "./uninorm/composition-table.gperf" + {"\003\221\003\001", 0x0386}, +#line 812 "./uninorm/composition-table.gperf" + {"\003\221\003\000", 0x1fba}, +#line 516 "./uninorm/composition-table.gperf" + {"\000t\003-", 0x1e71}, +#line 642 "./uninorm/composition-table.gperf" + {"\000Y\003#", 0x1ef4}, +#line 544 "./uninorm/composition-table.gperf" + {"\000x\003\010", 0x1e8d}, +#line 887 "./uninorm/composition-table.gperf" + {"\"\206\0038", 0x2288}, +#line 553 "./uninorm/composition-table.gperf" + {"\000h\0031", 0x1e96}, +#line 409 "./uninorm/composition-table.gperf" + {"\000B\0031", 0x1e06}, +#line 155 "./uninorm/composition-table.gperf" + {"\000R\003\014", 0x0158}, +#line 947 "./uninorm/composition-table.gperf" + {"0\3250\231", 0x30d6}, +#line 901 "./uninorm/composition-table.gperf" + {"0K0\231", 0x304c}, +#line 258 "./uninorm/composition-table.gperf" + {"\000r\003\021", 0x0213}, +#line 813 "./uninorm/composition-table.gperf" + {"\003\221\003E", 0x1fbc}, +#line 384 "./uninorm/composition-table.gperf" + {"\015F\015>", 0x0d4a}, +#line 767 "./uninorm/composition-table.gperf" + {"\037\014\003E", 0x1f8c}, +#line 271 "./uninorm/composition-table.gperf" + {"\000E\003'", 0x0228}, +#line 774 "./uninorm/composition-table.gperf" + {"\037#\003E", 0x1f93}, +#line 453 "./uninorm/composition-table.gperf" + {"\000K\003#", 0x1e32}, +#line 435 "./uninorm/composition-table.gperf" + {"\000G\003\004", 0x1e20}, +#line 915 "./uninorm/composition-table.gperf" + {"0h0\231", 0x3069}, +#line 429 "./uninorm/composition-table.gperf" + {"\000E\0030", 0x1e1a}, +#line 218 "./uninorm/composition-table.gperf" + {"\000G\003\014", 0x01e6}, +#line 299 "./uninorm/composition-table.gperf" + {"\003\271\003\010", 0x03ca}, +#line 617 "./uninorm/composition-table.gperf" + {"\001\241\003\001", 0x1edb}, +#line 619 "./uninorm/composition-table.gperf" + {"\001\241\003\000", 0x1edd}, +#line 940 "./uninorm/composition-table.gperf" + {"0\3040\231", 0x30c5}, +#line 440 "./uninorm/composition-table.gperf" + {"\000h\003#", 0x1e25}, +#line 407 "./uninorm/composition-table.gperf" + {"\000B\003#", 0x1e04}, +#line 478 "./uninorm/composition-table.gperf" + {"\000n\003-", 0x1e4b}, +#line 886 "./uninorm/composition-table.gperf" + {"\"\203\0038", 0x2285}, +#line 925 "./uninorm/composition-table.gperf" + {"0{0\232", 0x307d}, +#line 302 "./uninorm/composition-table.gperf" + {"\003\305\003\001", 0x03cd}, +#line 753 "./uninorm/composition-table.gperf" + {"\003\305\003\000", 0x1f7a}, +#line 842 "./uninorm/composition-table.gperf" + {"\003\305\003B", 0x1fe6}, +#line 893 "./uninorm/composition-table.gperf" + {"\"|\0038", 0x22e0}, +#line 233 "./uninorm/composition-table.gperf" + {"\000\305\003\001", 0x01fa}, +#line 422 "./uninorm/composition-table.gperf" + {"\000d\003-", 0x1e13}, +#line 885 "./uninorm/composition-table.gperf" + {"\"\202\0038", 0x2284}, +#line 294 "./uninorm/composition-table.gperf" + {"\003\261\003\001", 0x03ac}, +#line 748 "./uninorm/composition-table.gperf" + {"\003\261\003\000", 0x1f70}, +#line 808 "./uninorm/composition-table.gperf" + {"\003\261\003B", 0x1fb6}, +#line 143 "./uninorm/composition-table.gperf" + {"\000N\003\014", 0x0147}, +#line 708 "./uninorm/composition-table.gperf" + {"\003\277\003\023", 0x1f40}, +#line 870 "./uninorm/composition-table.gperf" + {"\"E\0038", 0x2247}, +#line 894 "./uninorm/composition-table.gperf" + {"\"}\0038", 0x22e1}, +#line 497 "./uninorm/composition-table.gperf" + {"\000R\0031", 0x1e5e}, +#line 413 "./uninorm/composition-table.gperf" + {"\000D\003\007", 0x1e0a}, +#line 347 "./uninorm/composition-table.gperf" + {"\004M\003\010", 0x04ed}, +#line 692 "./uninorm/composition-table.gperf" + {"\003\271\003\023", 0x1f30}, +#line 353 "./uninorm/composition-table.gperf" + {"\004C\003\013", 0x04f3}, +#line 806 "./uninorm/composition-table.gperf" + {"\003\261\003E", 0x1fb3}, +#line 826 "./uninorm/composition-table.gperf" + {"\003\271\003\006", 0x1fd0}, +#line 945 "./uninorm/composition-table.gperf" + {"0\3220\231", 0x30d3}, +#line 134 "./uninorm/composition-table.gperf" + {"\000l\003\001", 0x013a}, +#line 911 "./uninorm/composition-table.gperf" + {"0_0\231", 0x3060}, +#line 519 "./uninorm/composition-table.gperf" + {"\000U\0030", 0x1e74}, +#line 907 "./uninorm/composition-table.gperf" + {"0W0\231", 0x3058}, +#line 910 "./uninorm/composition-table.gperf" + {"0]0\231", 0x305e}, +#line 436 "./uninorm/composition-table.gperf" + {"\000g\003\004", 0x1e21}, +#line 656 "./uninorm/composition-table.gperf" + {"\003\221\003\023", 0x1f08}, +#line 310 "./uninorm/composition-table.gperf" + {"\004\032\003\001", 0x040c}, +#line 219 "./uninorm/composition-table.gperf" + {"\000g\003\014", 0x01e7}, +#line 810 "./uninorm/composition-table.gperf" + {"\003\221\003\006", 0x1fb8}, +#line 539 "./uninorm/composition-table.gperf" + {"\000W\003#", 0x1e88}, +#line 300 "./uninorm/composition-table.gperf" + {"\003\305\003\010", 0x03cb}, +#line 493 "./uninorm/composition-table.gperf" + {"\000R\003#", 0x1e5a}, +#line 237 "./uninorm/composition-table.gperf" + {"\000\330\003\001", 0x01fe}, +#line 296 "./uninorm/composition-table.gperf" + {"\003\267\003\001", 0x03ae}, +#line 750 "./uninorm/composition-table.gperf" + {"\003\267\003\000", 0x1f74}, +#line 818 "./uninorm/composition-table.gperf" + {"\003\267\003B", 0x1fc6}, +#line 158 "./uninorm/composition-table.gperf" + {"\000s\003\001", 0x015b}, +#line 799 "./uninorm/composition-table.gperf" + {"\037l\003E", 0x1fac}, +#line 157 "./uninorm/composition-table.gperf" + {"\000S\003\001", 0x015a}, +#line 160 "./uninorm/composition-table.gperf" + {"\000s\003\002", 0x015d}, +#line 500 "./uninorm/composition-table.gperf" + {"\000s\003\007", 0x1e61}, +#line 159 "./uninorm/composition-table.gperf" + {"\000S\003\002", 0x015c}, +#line 499 "./uninorm/composition-table.gperf" + {"\000S\003\007", 0x1e60}, +#line 137 "./uninorm/composition-table.gperf" + {"\000L\003\014", 0x013d}, +#line 475 "./uninorm/composition-table.gperf" + {"\000N\0031", 0x1e48}, +#line 816 "./uninorm/composition-table.gperf" + {"\003\267\003E", 0x1fc3}, +#line 597 "./uninorm/composition-table.gperf" + {"\036\271\003\002", 0x1ec7}, +#line 623 "./uninorm/composition-table.gperf" + {"\001\241\003\003", 0x1ee1}, +#line 350 "./uninorm/composition-table.gperf" + {"\004#\003\010", 0x04f0}, +#line 264 "./uninorm/composition-table.gperf" + {"\000s\003&", 0x0219}, +#line 166 "./uninorm/composition-table.gperf" + {"\000t\003'", 0x0163}, +#line 263 "./uninorm/composition-table.gperf" + {"\000S\003&", 0x0218}, +#line 452 "./uninorm/composition-table.gperf" + {"\000k\003\001", 0x1e31}, +#line 291 "./uninorm/composition-table.gperf" + {"\003\312\003\001", 0x0390}, +#line 828 "./uninorm/composition-table.gperf" + {"\003\312\003\000", 0x1fd2}, +#line 830 "./uninorm/composition-table.gperf" + {"\003\312\003B", 0x1fd7}, +#line 720 "./uninorm/composition-table.gperf" + {"\003\305\003\023", 0x1f50}, +#line 588 "./uninorm/composition-table.gperf" + {"\000\312\003\001", 0x1ebe}, +#line 590 "./uninorm/composition-table.gperf" + {"\000\312\003\000", 0x1ec0}, +#line 837 "./uninorm/composition-table.gperf" + {"\003\305\003\006", 0x1fe0}, +#line 616 "./uninorm/composition-table.gperf" + {"\001\240\003\001", 0x1eda}, +#line 618 "./uninorm/composition-table.gperf" + {"\001\240\003\000", 0x1edc}, +#line 840 "./uninorm/composition-table.gperf" + {"\003\301\003\023", 0x1fe4}, +#line 648 "./uninorm/composition-table.gperf" + {"\003\261\003\023", 0x1f00}, +#line 473 "./uninorm/composition-table.gperf" + {"\000N\003#", 0x1e46}, +#line 154 "./uninorm/composition-table.gperf" + {"\000r\003'", 0x0157}, +#line 803 "./uninorm/composition-table.gperf" + {"\003\261\003\006", 0x1fb0}, +#line 503 "./uninorm/composition-table.gperf" + {"\001Z\003\007", 0x1e64}, +#line 167 "./uninorm/composition-table.gperf" + {"\000T\003\014", 0x0164}, +#line 186 "./uninorm/composition-table.gperf" + {"\000Z\003\001", 0x0179}, +#line 798 "./uninorm/composition-table.gperf" + {"\037k\003E", 0x1fab}, +#line 527 "./uninorm/composition-table.gperf" + {"\000V\003\003", 0x1e7c}, +#line 547 "./uninorm/composition-table.gperf" + {"\000Z\003\002", 0x1e90}, +#line 188 "./uninorm/composition-table.gperf" + {"\000Z\003\007", 0x017b}, +#line 944 "./uninorm/composition-table.gperf" + {"0\3170\232", 0x30d1}, +#line 540 "./uninorm/composition-table.gperf" + {"\000w\003#", 0x1e89}, +#line 142 "./uninorm/composition-table.gperf" + {"\000n\003'", 0x0146}, +#line 312 "./uninorm/composition-table.gperf" + {"\004#\003\006", 0x040e}, +#line 933 "./uninorm/composition-table.gperf" + {"0\2650\231", 0x30b6}, +#line 526 "./uninorm/composition-table.gperf" + {"\001k\003\010", 0x1e7b}, +#line 461 "./uninorm/composition-table.gperf" + {"\000L\0031", 0x1e3a}, +#line 868 "./uninorm/composition-table.gperf" + {"\"<\0038", 0x2241}, +#line 571 "./uninorm/composition-table.gperf" + {"\036\241\003\002", 0x1ead}, +#line 786 "./uninorm/composition-table.gperf" + {"\037/\003E", 0x1f9f}, +#line 420 "./uninorm/composition-table.gperf" + {"\000d\003'", 0x1e11}, +#line 336 "./uninorm/composition-table.gperf" + {"\004\027\003\010", 0x04de}, +#line 150 "./uninorm/composition-table.gperf" + {"\000o\003\013", 0x0151}, +#line 827 "./uninorm/composition-table.gperf" + {"\003\271\003\004", 0x1fd1}, +#line 257 "./uninorm/composition-table.gperf" + {"\000R\003\021", 0x0212}, +#line 704 "./uninorm/composition-table.gperf" + {"\0378\003\001", 0x1f3c}, +#line 702 "./uninorm/composition-table.gperf" + {"\0378\003\000", 0x1f3a}, +#line 706 "./uninorm/composition-table.gperf" + {"\0378\003B", 0x1f3e}, +#line 676 "./uninorm/composition-table.gperf" + {"\003\267\003\023", 0x1f20}, +#line 879 "./uninorm/composition-table.gperf" + {"\"r\0038", 0x2274}, +#line 770 "./uninorm/composition-table.gperf" + {"\037\017\003E", 0x1f8f}, +#line 178 "./uninorm/composition-table.gperf" + {"\000u\003\013", 0x0171}, +#line 769 "./uninorm/composition-table.gperf" + {"\037\016\003E", 0x1f8e}, +#line 318 "./uninorm/composition-table.gperf" + {"\004V\003\010", 0x0457}, +#line 811 "./uninorm/composition-table.gperf" + {"\003\221\003\004", 0x1fb9}, +#line 776 "./uninorm/composition-table.gperf" + {"\037%\003E", 0x1f95}, +#line 457 "./uninorm/composition-table.gperf" + {"\000L\003#", 0x1e36}, +#line 290 "./uninorm/composition-table.gperf" + {"\003\251\003\001", 0x038f}, +#line 855 "./uninorm/composition-table.gperf" + {"\003\251\003\000", 0x1ffa}, +#line 443 "./uninorm/composition-table.gperf" + {"\000H\003'", 0x1e28}, +#line 187 "./uninorm/composition-table.gperf" + {"\000z\003\001", 0x017a}, +#line 513 "./uninorm/composition-table.gperf" + {"\000T\0031", 0x1e6e}, +#line 621 "./uninorm/composition-table.gperf" + {"\001\241\003\011", 0x1edf}, +#line 548 "./uninorm/composition-table.gperf" + {"\000z\003\002", 0x1e91}, +#line 189 "./uninorm/composition-table.gperf" + {"\000z\003\007", 0x017c}, + {""}, +#line 865 "./uninorm/composition-table.gperf" + {"\"\013\0038", 0x220c}, +#line 917 "./uninorm/composition-table.gperf" + {"0o0\232", 0x3071}, +#line 877 "./uninorm/composition-table.gperf" + {"\"d\0038", 0x2270}, +#line 856 "./uninorm/composition-table.gperf" + {"\003\251\003E", 0x1ffc}, +#line 902 "./uninorm/composition-table.gperf" + {"0M0\231", 0x304e}, +#line 594 "./uninorm/composition-table.gperf" + {"\000\312\003\003", 0x1ec4}, +#line 332 "./uninorm/composition-table.gperf" + {"\004\330\003\010", 0x04da}, +#line 398 "./uninorm/composition-table.gperf" + {"\033:\0335", 0x1b3b}, +#line 622 "./uninorm/composition-table.gperf" + {"\001\240\003\003", 0x1ee0}, + {""}, +#line 921 "./uninorm/composition-table.gperf" + {"0u0\232", 0x3077}, +#line 469 "./uninorm/composition-table.gperf" + {"\000M\003#", 0x1e42}, +#line 922 "./uninorm/composition-table.gperf" + {"0x0\231", 0x3079}, +#line 287 "./uninorm/composition-table.gperf" + {"\003\231\003\001", 0x038a}, +#line 833 "./uninorm/composition-table.gperf" + {"\003\231\003\000", 0x1fda}, +#line 511 "./uninorm/composition-table.gperf" + {"\000T\003#", 0x1e6c}, +#line 541 "./uninorm/composition-table.gperf" + {"\000X\003\007", 0x1e8a}, +#line 477 "./uninorm/composition-table.gperf" + {"\000N\003-", 0x1e4a}, +#line 131 "./uninorm/composition-table.gperf" + {"\000K\003'", 0x0136}, +#line 838 "./uninorm/composition-table.gperf" + {"\003\305\003\004", 0x1fe1}, +#line 91 "./uninorm/composition-table.gperf" + {"\000c\003\001", 0x0107}, +#line 871 "./uninorm/composition-table.gperf" + {"\"H\0038", 0x2249}, +#line 394 "./uninorm/composition-table.gperf" + {"\033\011\0335", 0x1b0a}, +#line 93 "./uninorm/composition-table.gperf" + {"\000c\003\002", 0x0109}, +#line 95 "./uninorm/composition-table.gperf" + {"\000c\003\007", 0x010b}, +#line 320 "./uninorm/composition-table.gperf" + {"\0048\003\000", 0x045d}, +#line 804 "./uninorm/composition-table.gperf" + {"\003\261\003\004", 0x1fb1}, +#line 444 "./uninorm/composition-table.gperf" + {"\000h\003'", 0x1e29}, +#line 938 "./uninorm/composition-table.gperf" + {"0\2770\231", 0x30c0}, +#line 630 "./uninorm/composition-table.gperf" + {"\001\257\003\001", 0x1ee8}, +#line 632 "./uninorm/composition-table.gperf" + {"\001\257\003\000", 0x1eea}, +#line 581 "./uninorm/composition-table.gperf" + {"\036\241\003\006", 0x1eb7}, +#line 149 "./uninorm/composition-table.gperf" + {"\000O\003\013", 0x0150}, +#line 98 "./uninorm/composition-table.gperf" + {"\000D\003\014", 0x010e}, +#line 935 "./uninorm/composition-table.gperf" + {"0\2710\231", 0x30ba}, +#line 289 "./uninorm/composition-table.gperf" + {"\003\245\003\001", 0x038e}, +#line 846 "./uninorm/composition-table.gperf" + {"\003\245\003\000", 0x1fea}, +#line 348 "./uninorm/composition-table.gperf" + {"\004#\003\004", 0x04ee}, +#line 790 "./uninorm/composition-table.gperf" + {"\037c\003E", 0x1fa3}, +#line 285 "./uninorm/composition-table.gperf" + {"\003\225\003\001", 0x0388}, +#line 820 "./uninorm/composition-table.gperf" + {"\003\225\003\000", 0x1fc8}, +#line 555 "./uninorm/composition-table.gperf" + {"\000w\003\012", 0x1e98}, +#line 235 "./uninorm/composition-table.gperf" + {"\000\306\003\001", 0x01fc}, +#line 570 "./uninorm/composition-table.gperf" + {"\036\240\003\002", 0x1eac}, +#line 138 "./uninorm/composition-table.gperf" + {"\000l\003\014", 0x013e}, +#line 543 "./uninorm/composition-table.gperf" + {"\000X\003\010", 0x1e8c}, +#line 292 "./uninorm/composition-table.gperf" + {"\003\231\003\010", 0x03aa}, +#line 303 "./uninorm/composition-table.gperf" + {"\003\311\003\001", 0x03ce}, +#line 754 "./uninorm/composition-table.gperf" + {"\003\311\003\000", 0x1f7c}, +#line 852 "./uninorm/composition-table.gperf" + {"\003\311\003B", 0x1ff6}, +#line 740 "./uninorm/composition-table.gperf" + {"\003\251\003\023", 0x1f68}, +#line 393 "./uninorm/composition-table.gperf" + {"\033\007\0335", 0x1b08}, + {""}, +#line 463 "./uninorm/composition-table.gperf" + {"\000L\003-", 0x1e3c}, +#line 177 "./uninorm/composition-table.gperf" + {"\000U\003\013", 0x0170}, + {""}, +#line 226 "./uninorm/composition-table.gperf" + {"\001\267\003\014", 0x01ee}, +#line 341 "./uninorm/composition-table.gperf" + {"\0048\003\010", 0x04e5}, +#line 466 "./uninorm/composition-table.gperf" + {"\000m\003\001", 0x1e3f}, +#line 850 "./uninorm/composition-table.gperf" + {"\003\311\003E", 0x1ff3}, +#line 819 "./uninorm/composition-table.gperf" + {"\037\306\003E", 0x1fc7}, +#line 164 "./uninorm/composition-table.gperf" + {"\000s\003\014", 0x0161}, +#line 468 "./uninorm/composition-table.gperf" + {"\000m\003\007", 0x1e41}, +#line 163 "./uninorm/composition-table.gperf" + {"\000S\003\014", 0x0160}, +#line 592 "./uninorm/composition-table.gperf" + {"\000\312\003\011", 0x1ec2}, +#line 504 "./uninorm/composition-table.gperf" + {"\001[\003\007", 0x1e65}, +#line 153 "./uninorm/composition-table.gperf" + {"\000R\003'", 0x0156}, +#line 620 "./uninorm/composition-table.gperf" + {"\001\240\003\011", 0x1ede}, +#line 293 "./uninorm/composition-table.gperf" + {"\003\245\003\010", 0x03ab}, +#line 358 "./uninorm/composition-table.gperf" + {"\006'\006S", 0x0622}, +#line 417 "./uninorm/composition-table.gperf" + {"\000D\0031", 0x1e0e}, +#line 625 "./uninorm/composition-table.gperf" + {"\001\241\003#", 0x1ee3}, +#line 700 "./uninorm/composition-table.gperf" + {"\003\231\003\023", 0x1f38}, +#line 207 "./uninorm/composition-table.gperf" + {"\000\374\003\001", 0x01d8}, +#line 211 "./uninorm/composition-table.gperf" + {"\000\374\003\000", 0x01dc}, +#line 831 "./uninorm/composition-table.gperf" + {"\003\231\003\006", 0x1fd8}, +#line 800 "./uninorm/composition-table.gperf" + {"\037m\003E", 0x1fad}, +#line 221 "./uninorm/composition-table.gperf" + {"\000k\003\014", 0x01e9}, +#line 515 "./uninorm/composition-table.gperf" + {"\000T\003-", 0x1e70}, +#line 116 "./uninorm/composition-table.gperf" + {"\000G\003'", 0x0122}, +#line 280 "./uninorm/composition-table.gperf" + {"\002/\003\004", 0x0231}, +#line 462 "./uninorm/composition-table.gperf" + {"\000l\0031", 0x1e3b}, +#line 939 "./uninorm/composition-table.gperf" + {"0\3010\231", 0x30c2}, +#line 931 "./uninorm/composition-table.gperf" + {"0\2610\231", 0x30b2}, +#line 674 "./uninorm/composition-table.gperf" + {"\037\030\003\001", 0x1f1c}, +#line 672 "./uninorm/composition-table.gperf" + {"\037\030\003\000", 0x1f1a}, +#line 314 "./uninorm/composition-table.gperf" + {"\0048\003\006", 0x0439}, +#line 636 "./uninorm/composition-table.gperf" + {"\001\257\003\003", 0x1eee}, +#line 286 "./uninorm/composition-table.gperf" + {"\003\227\003\001", 0x0389}, +#line 821 "./uninorm/composition-table.gperf" + {"\003\227\003\000", 0x1fca}, +#line 415 "./uninorm/composition-table.gperf" + {"\000D\003#", 0x1e0c}, +#line 360 "./uninorm/composition-table.gperf" + {"\006H\006T", 0x0624}, +#line 606 "./uninorm/composition-table.gperf" + {"\000\324\003\001", 0x1ed0}, +#line 608 "./uninorm/composition-table.gperf" + {"\000\324\003\000", 0x1ed2}, +#line 190 "./uninorm/composition-table.gperf" + {"\000Z\003\014", 0x017d}, +#line 529 "./uninorm/composition-table.gperf" + {"\000V\003#", 0x1e7e}, + {""}, +#line 844 "./uninorm/composition-table.gperf" + {"\003\245\003\006", 0x1fe8}, +#line 670 "./uninorm/composition-table.gperf" + {"\003\225\003\023", 0x1f18}, +#line 141 "./uninorm/composition-table.gperf" + {"\000N\003'", 0x0145}, +#line 822 "./uninorm/composition-table.gperf" + {"\003\227\003E", 0x1fcc}, +#line 458 "./uninorm/composition-table.gperf" + {"\000l\003#", 0x1e37}, +#line 580 "./uninorm/composition-table.gperf" + {"\036\240\003\006", 0x1eb6}, + {""}, +#line 518 "./uninorm/composition-table.gperf" + {"\000u\003$", 0x1e73}, + {""}, +#line 732 "./uninorm/composition-table.gperf" + {"\003\311\003\023", 0x1f60}, +#line 949 "./uninorm/composition-table.gperf" + {"0\3300\231", 0x30d9}, +#line 508 "./uninorm/composition-table.gperf" + {"\036c\003\007", 0x1e69}, +#line 725 "./uninorm/composition-table.gperf" + {"\037Q\003\001", 0x1f55}, +#line 723 "./uninorm/composition-table.gperf" + {"\037Q\003\000", 0x1f53}, +#line 727 "./uninorm/composition-table.gperf" + {"\037Q\003B", 0x1f57}, +#line 934 "./uninorm/composition-table.gperf" + {"0\2670\231", 0x30b8}, +#line 905 "./uninorm/composition-table.gperf" + {"0S0\231", 0x3054}, +#line 456 "./uninorm/composition-table.gperf" + {"\000k\0031", 0x1e35}, +#line 363 "./uninorm/composition-table.gperf" + {"\006\325\006T", 0x06c0}, +#line 665 "./uninorm/composition-table.gperf" + {"\003\265\003\024", 0x1f11}, +#line 130 "./uninorm/composition-table.gperf" + {"\000j\003\002", 0x0135}, +#line 502 "./uninorm/composition-table.gperf" + {"\000s\003#", 0x1e63}, +#line 117 "./uninorm/composition-table.gperf" + {"\000g\003'", 0x0123}, +#line 501 "./uninorm/composition-table.gperf" + {"\000S\003#", 0x1e62}, +#line 392 "./uninorm/composition-table.gperf" + {"\033\005\0335", 0x1b06}, +#line 589 "./uninorm/composition-table.gperf" + {"\000\352\003\001", 0x1ebf}, +#line 591 "./uninorm/composition-table.gperf" + {"\000\352\003\000", 0x1ec1}, +#line 396 "./uninorm/composition-table.gperf" + {"\033\015\0335", 0x1b0e}, +#line 681 "./uninorm/composition-table.gperf" + {"\037!\003\001", 0x1f25}, +#line 679 "./uninorm/composition-table.gperf" + {"\037!\003\000", 0x1f23}, +#line 683 "./uninorm/composition-table.gperf" + {"\037!\003B", 0x1f27}, +#line 919 "./uninorm/composition-table.gperf" + {"0r0\232", 0x3074}, +#line 191 "./uninorm/composition-table.gperf" + {"\000z\003\014", 0x017e}, +#line 311 "./uninorm/composition-table.gperf" + {"\004\030\003\000", 0x040d}, +#line 551 "./uninorm/composition-table.gperf" + {"\000Z\0031", 0x1e94}, +#line 797 "./uninorm/composition-table.gperf" + {"\037j\003E", 0x1faa}, +#line 952 "./uninorm/composition-table.gperf" + {"0\3330\232", 0x30dd}, +#line 454 "./uninorm/composition-table.gperf" + {"\000k\003#", 0x1e33}, +#line 135 "./uninorm/composition-table.gperf" + {"\000L\003'", 0x013b}, +#line 334 "./uninorm/composition-table.gperf" + {"\004\026\003\010", 0x04dc}, +#line 772 "./uninorm/composition-table.gperf" + {"\037!\003E", 0x1f91}, +#line 882 "./uninorm/composition-table.gperf" + {"\"w\0038", 0x2279}, +#line 631 "./uninorm/composition-table.gperf" + {"\001\260\003\001", 0x1ee9}, +#line 633 "./uninorm/composition-table.gperf" + {"\001\260\003\000", 0x1eeb}, +#line 525 "./uninorm/composition-table.gperf" + {"\001j\003\010", 0x1e7a}, +#line 624 "./uninorm/composition-table.gperf" + {"\001\240\003#", 0x1ee2}, +#line 669 "./uninorm/composition-table.gperf" + {"\037\021\003\001", 0x1f15}, +#line 667 "./uninorm/composition-table.gperf" + {"\037\021\003\000", 0x1f13}, +#line 832 "./uninorm/composition-table.gperf" + {"\003\231\003\004", 0x1fd9}, +#line 634 "./uninorm/composition-table.gperf" + {"\001\257\003\011", 0x1eec}, +#line 684 "./uninorm/composition-table.gperf" + {"\003\227\003\023", 0x1f28}, +#line 900 "./uninorm/composition-table.gperf" + {"\"\265\0038", 0x22ed}, +#line 361 "./uninorm/composition-table.gperf" + {"\006'\006U", 0x0625}, +#line 612 "./uninorm/composition-table.gperf" + {"\000\324\003\003", 0x1ed6}, +#line 549 "./uninorm/composition-table.gperf" + {"\000Z\003#", 0x1e92}, +#line 386 "./uninorm/composition-table.gperf" + {"\015F\015W", 0x0d4c}, +#line 421 "./uninorm/composition-table.gperf" + {"\000D\003-", 0x1e12}, +#line 406 "./uninorm/composition-table.gperf" + {"\000b\003\007", 0x1e03}, +#line 97 "./uninorm/composition-table.gperf" + {"\000c\003\014", 0x010d}, +#line 339 "./uninorm/composition-table.gperf" + {"\0048\003\004", 0x04e3}, + {""}, +#line 365 "./uninorm/composition-table.gperf" + {"\006\322\006T", 0x06d3}, +#line 488 "./uninorm/composition-table.gperf" + {"\000p\003\001", 0x1e55}, +#line 165 "./uninorm/composition-table.gperf" + {"\000T\003'", 0x0162}, +#line 505 "./uninorm/composition-table.gperf" + {"\001`\003\007", 0x1e66}, +#line 340 "./uninorm/composition-table.gperf" + {"\004\030\003\010", 0x04e4}, +#line 490 "./uninorm/composition-table.gperf" + {"\000p\003\007", 0x1e57}, +#line 464 "./uninorm/composition-table.gperf" + {"\000l\003-", 0x1e3d}, +#line 324 "./uninorm/composition-table.gperf" + {"\004\026\003\006", 0x04c1}, +#line 552 "./uninorm/composition-table.gperf" + {"\000z\0031", 0x1e95}, +#line 845 "./uninorm/composition-table.gperf" + {"\003\245\003\004", 0x1fe9}, +#line 789 "./uninorm/composition-table.gperf" + {"\037b\003E", 0x1fa2}, +#line 736 "./uninorm/composition-table.gperf" + {"\037`\003\001", 0x1f64}, +#line 734 "./uninorm/composition-table.gperf" + {"\037`\003\000", 0x1f62}, +#line 738 "./uninorm/composition-table.gperf" + {"\037`\003B", 0x1f66}, +#line 859 "./uninorm/composition-table.gperf" + {"!\224\0038", 0x21ae}, +#line 517 "./uninorm/composition-table.gperf" + {"\000U\003$", 0x1e72}, +#line 216 "./uninorm/composition-table.gperf" + {"\000\306\003\004", 0x01e2}, +#line 495 "./uninorm/composition-table.gperf" + {"\036Z\003\004", 0x1e5c}, +#line 709 "./uninorm/composition-table.gperf" + {"\003\277\003\024", 0x1f41}, +#line 805 "./uninorm/composition-table.gperf" + {"\037p\003E", 0x1fb2}, +#line 607 "./uninorm/composition-table.gperf" + {"\000\364\003\001", 0x1ed1}, +#line 609 "./uninorm/composition-table.gperf" + {"\000\364\003\000", 0x1ed3}, +#line 595 "./uninorm/composition-table.gperf" + {"\000\352\003\003", 0x1ec5}, +#line 787 "./uninorm/composition-table.gperf" + {"\037`\003E", 0x1fa0}, +#line 693 "./uninorm/composition-table.gperf" + {"\003\271\003\024", 0x1f31}, +#line 860 "./uninorm/composition-table.gperf" + {"!\320\0038", 0x21cd}, +#line 874 "./uninorm/composition-table.gperf" + {"\"M\0038", 0x226d}, +#line 857 "./uninorm/composition-table.gperf" + {"!\220\0038", 0x219a}, +#line 550 "./uninorm/composition-table.gperf" + {"\000z\003#", 0x1e93}, +#line 400 "./uninorm/composition-table.gperf" + {"\033>\0335", 0x1b40}, +#line 487 "./uninorm/composition-table.gperf" + {"\000P\003\001", 0x1e54}, + {""}, +#line 948 "./uninorm/composition-table.gperf" + {"0\3250\232", 0x30d7}, +#line 313 "./uninorm/composition-table.gperf" + {"\004\030\003\006", 0x0419}, +#line 489 "./uninorm/composition-table.gperf" + {"\000P\003\007", 0x1e56}, +#line 657 "./uninorm/composition-table.gperf" + {"\003\221\003\024", 0x1f09}, +#line 724 "./uninorm/composition-table.gperf" + {"\037P\003\001", 0x1f54}, +#line 722 "./uninorm/composition-table.gperf" + {"\037P\003\000", 0x1f52}, +#line 726 "./uninorm/composition-table.gperf" + {"\037P\003B", 0x1f56}, +#line 637 "./uninorm/composition-table.gperf" + {"\001\260\003\003", 0x1eef}, +#line 890 "./uninorm/composition-table.gperf" + {"\"\250\0038", 0x22ad}, +#line 362 "./uninorm/composition-table.gperf" + {"\006J\006T", 0x0626}, +#line 563 "./uninorm/composition-table.gperf" + {"\000\342\003\001", 0x1ea5}, +#line 565 "./uninorm/composition-table.gperf" + {"\000\342\003\000", 0x1ea7}, +#line 777 "./uninorm/composition-table.gperf" + {"\037&\003E", 0x1f96}, +#line 193 "./uninorm/composition-table.gperf" + {"\000o\003\033", 0x01a1}, + {""}, +#line 205 "./uninorm/composition-table.gperf" + {"\000\374\003\004", 0x01d6}, +#line 562 "./uninorm/composition-table.gperf" + {"\000\302\003\001", 0x1ea4}, +#line 564 "./uninorm/composition-table.gperf" + {"\000\302\003\000", 0x1ea6}, +#line 209 "./uninorm/composition-table.gperf" + {"\000\374\003\014", 0x01da}, +#line 610 "./uninorm/composition-table.gperf" + {"\000\324\003\011", 0x1ed4}, +#line 404 "./uninorm/composition-table.gperf" + {"\000a\003%", 0x1e01}, +#line 369 "./uninorm/composition-table.gperf" + {"\011\307\011\276", 0x09cb}, +#line 195 "./uninorm/composition-table.gperf" + {"\000u\003\033", 0x01b0}, +#line 315 "./uninorm/composition-table.gperf" + {"\0045\003\000", 0x0450}, +#line 680 "./uninorm/composition-table.gperf" + {"\037 \003\001", 0x1f24}, +#line 678 "./uninorm/composition-table.gperf" + {"\037 \003\000", 0x1f22}, +#line 682 "./uninorm/composition-table.gperf" + {"\037 \003B", 0x1f26}, +#line 378 "./uninorm/composition-table.gperf" + {"\014F\014V", 0x0c48}, +#line 847 "./uninorm/composition-table.gperf" + {"\003\241\003\024", 0x1fec}, +#line 866 "./uninorm/composition-table.gperf" + {"\"#\0038", 0x2224}, +#line 930 "./uninorm/composition-table.gperf" + {"0\2570\231", 0x30b0}, +#line 638 "./uninorm/composition-table.gperf" + {"\001\257\003#", 0x1ef0}, + {""}, {""}, +#line 721 "./uninorm/composition-table.gperf" + {"\003\305\003\024", 0x1f51}, +#line 895 "./uninorm/composition-table.gperf" + {"\"\221\0038", 0x22e2}, +#line 771 "./uninorm/composition-table.gperf" + {"\037 \003E", 0x1f90}, +#line 941 "./uninorm/composition-table.gperf" + {"0\3060\231", 0x30c7}, +#line 399 "./uninorm/composition-table.gperf" + {"\033<\0335", 0x1b3d}, + {""}, +#line 841 "./uninorm/composition-table.gperf" + {"\003\301\003\024", 0x1fe5}, +#line 649 "./uninorm/composition-table.gperf" + {"\003\261\003\024", 0x1f01}, +#line 385 "./uninorm/composition-table.gperf" + {"\015G\015>", 0x0d4b}, +#line 946 "./uninorm/composition-table.gperf" + {"0\3220\232", 0x30d4}, + {""}, +#line 419 "./uninorm/composition-table.gperf" + {"\000D\003'", 0x1e10}, +#line 613 "./uninorm/composition-table.gperf" + {"\000\364\003\003", 0x1ed7}, + {""}, +#line 507 "./uninorm/composition-table.gperf" + {"\036b\003\007", 0x1e68}, +#line 593 "./uninorm/composition-table.gperf" + {"\000\352\003\011", 0x1ec3}, + {""}, {""}, {""}, {""}, +#line 445 "./uninorm/composition-table.gperf" + {"\000H\003.", 0x1e2a}, +#line 316 "./uninorm/composition-table.gperf" + {"\0045\003\010", 0x0451}, +#line 136 "./uninorm/composition-table.gperf" + {"\000l\003'", 0x013c}, + {""}, +#line 224 "./uninorm/composition-table.gperf" + {"\001\352\003\004", 0x01ec}, +#line 228 "./uninorm/composition-table.gperf" + {"\000j\003\014", 0x01f0}, +#line 470 "./uninorm/composition-table.gperf" + {"\000m\003#", 0x1e43}, + {""}, +#line 909 "./uninorm/composition-table.gperf" + {"0[0\231", 0x305c}, + {""}, {""}, {""}, +#line 635 "./uninorm/composition-table.gperf" + {"\001\260\003\011", 0x1eed}, +#line 395 "./uninorm/composition-table.gperf" + {"\033\013\0335", 0x1b0c}, +#line 569 "./uninorm/composition-table.gperf" + {"\000\342\003\003", 0x1eab}, +#line 192 "./uninorm/composition-table.gperf" + {"\000O\003\033", 0x01a0}, +#line 677 "./uninorm/composition-table.gperf" + {"\003\267\003\024", 0x1f21}, +#line 338 "./uninorm/composition-table.gperf" + {"\004\030\003\004", 0x04e2}, + {""}, +#line 162 "./uninorm/composition-table.gperf" + {"\000s\003'", 0x015f}, +#line 568 "./uninorm/composition-table.gperf" + {"\000\302\003\003", 0x1eaa}, +#line 161 "./uninorm/composition-table.gperf" + {"\000S\003'", 0x015e}, + {""}, {""}, {""}, {""}, {""}, +#line 858 "./uninorm/composition-table.gperf" + {"!\222\0038", 0x219b}, + {""}, +#line 403 "./uninorm/composition-table.gperf" + {"\000A\003%", 0x1e00}, +#line 331 "./uninorm/composition-table.gperf" + {"\0045\003\006", 0x04d7}, + {""}, {""}, {""}, +#line 446 "./uninorm/composition-table.gperf" + {"\000h\003.", 0x1e2b}, +#line 132 "./uninorm/composition-table.gperf" + {"\000k\003'", 0x0137}, + {""}, +#line 194 "./uninorm/composition-table.gperf" + {"\000U\003\033", 0x01af}, + {""}, +#line 496 "./uninorm/composition-table.gperf" + {"\036[\003\004", 0x1e5d}, + {""}, {""}, {""}, {""}, +#line 904 "./uninorm/composition-table.gperf" + {"0Q0\231", 0x3052}, + {""}, +#line 370 "./uninorm/composition-table.gperf" + {"\011\307\011\327", 0x09cc}, +#line 880 "./uninorm/composition-table.gperf" + {"\"s\0038", 0x2275}, +#line 374 "./uninorm/composition-table.gperf" + {"\013\222\013\327", 0x0b94}, + {""}, {""}, +#line 611 "./uninorm/composition-table.gperf" + {"\000\364\003\011", 0x1ed5}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 214 "./uninorm/composition-table.gperf" + {"\002&\003\004", 0x01e0}, + {""}, {""}, {""}, +#line 402 "./uninorm/composition-table.gperf" + {"\033B\0335", 0x1b43}, + {""}, {""}, {""}, +#line 567 "./uninorm/composition-table.gperf" + {"\000\342\003\011", 0x1ea9}, + {""}, {""}, {""}, {""}, +#line 410 "./uninorm/composition-table.gperf" + {"\000b\0031", 0x1e07}, +#line 566 "./uninorm/composition-table.gperf" + {"\000\302\003\011", 0x1ea8}, + {""}, {""}, {""}, {""}, +#line 741 "./uninorm/composition-table.gperf" + {"\003\251\003\024", 0x1f69}, + {""}, {""}, +#line 639 "./uninorm/composition-table.gperf" + {"\001\260\003#", 0x1ef1}, +#line 364 "./uninorm/composition-table.gperf" + {"\006\301\006T", 0x06c2}, + {""}, {""}, +#line 379 "./uninorm/composition-table.gperf" + {"\014\277\014\325", 0x0cc0}, +#line 867 "./uninorm/composition-table.gperf" + {"\"%\0038", 0x2226}, +#line 923 "./uninorm/composition-table.gperf" + {"0x0\232", 0x307a}, + {""}, {""}, {""}, {""}, +#line 408 "./uninorm/composition-table.gperf" + {"\000b\003#", 0x1e05}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 701 "./uninorm/composition-table.gperf" + {"\003\231\003\024", 0x1f39}, +#line 401 "./uninorm/composition-table.gperf" + {"\033?\0335", 0x1b41}, + {""}, {""}, {""}, {""}, {""}, +#line 63 "./uninorm/composition-table.gperf" + {"\000c\003'", 0x00e7}, + {""}, +#line 883 "./uninorm/composition-table.gperf" + {"\"z\0038", 0x2280}, +#line 891 "./uninorm/composition-table.gperf" + {"\"\251\0038", 0x22ae}, + {""}, {""}, +#line 371 "./uninorm/composition-table.gperf" + {"\013G\013V", 0x0b48}, + {""}, +#line 372 "./uninorm/composition-table.gperf" + {"\013G\013>", 0x0b4b}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 728 "./uninorm/composition-table.gperf" + {"\003\245\003\024", 0x1f59}, + {""}, {""}, {""}, +#line 671 "./uninorm/composition-table.gperf" + {"\003\225\003\024", 0x1f19}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 733 "./uninorm/composition-table.gperf" + {"\003\311\003\024", 0x1f61}, + {""}, {""}, {""}, {""}, {""}, +#line 352 "./uninorm/composition-table.gperf" + {"\004#\003\013", 0x04f2}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 685 "./uninorm/composition-table.gperf" + {"\003\227\003\024", 0x1f29}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 950 "./uninorm/composition-table.gperf" + {"0\3300\232", 0x30da}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 383 "./uninorm/composition-table.gperf" + {"\014\312\014\325", 0x0ccb}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 376 "./uninorm/composition-table.gperf" + {"\013\307\013\276", 0x0bcb}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, +#line 862 "./uninorm/composition-table.gperf" + {"!\322\0038", 0x21cf}, + {""}, +#line 381 "./uninorm/composition-table.gperf" + {"\014\306\014\326", 0x0cc8}, +#line 382 "./uninorm/composition-table.gperf" + {"\014\306\014\302", 0x0cca}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, +#line 380 "./uninorm/composition-table.gperf" + {"\014\306\014\325", 0x0cc7}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, +#line 373 "./uninorm/composition-table.gperf" + {"\013G\013W", 0x0b4c}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 391 "./uninorm/composition-table.gperf" + {"\020%\020.", 0x1026}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, +#line 397 "./uninorm/composition-table.gperf" + {"\033\021\0335", 0x1b12}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 375 "./uninorm/composition-table.gperf" + {"\013\306\013\276", 0x0bca}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, +#line 377 "./uninorm/composition-table.gperf" + {"\013\306\013\327", 0x0bcc}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, +#line 861 "./uninorm/composition-table.gperf" + {"!\324\0038", 0x21ce} + }; + + if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) + { + register int key = gl_uninorm_compose_hash (str, len); + + if (key <= MAX_HASH_VALUE && key >= 0) + if (len == lengthtable[key]) + { + register const char *s = wordlist[key].codes; + + if (*str == *s && !memcmp (str + 1, s + 1, len - 1)) + return &wordlist[key]; + } + } + return 0; +} diff --git a/lib/uninorm/composition.c b/lib/uninorm/composition.c new file mode 100644 index 00000000..4caf9a06 --- /dev/null +++ b/lib/uninorm/composition.c @@ -0,0 +1,85 @@ +/* Canonical composition of Unicode characters. + Copyright (C) 2002, 2006, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include + +struct composition_rule { char codes[4]; unsigned short combined; }; + +#include "composition-table.h" + +ucs4_t +uc_composition (ucs4_t uc1, ucs4_t uc2) +{ + if (uc1 < 0x10000 && uc2 < 0x10000) + { + if (uc2 >= 0x1161 && uc2 < 0x1161 + 21 + && uc1 >= 0x1100 && uc1 < 0x1100 + 19) + { + /* Hangul: Combine single letter L and single letter V to form + two-letter syllable LV. */ + return 0xAC00 + ((uc1 - 0x1100) * 21 + (uc2 - 0x1161)) * 28; + } + else if (uc2 > 0x11A7 && uc2 < 0x11A7 + 28 + && uc1 >= 0xAC00 && uc1 < 0xD7A4 && ((uc1 - 0xAC00) % 28) == 0) + { + /* Hangul: Combine two-letter syllable LV with single-letter T + to form three-letter syllable LVT. */ + return uc1 + (uc2 - 0x11A7); + } + else + { +#if 0 + unsigned int uc = MUL1 * uc1 * MUL2 * uc2; + unsigned int index1 = uc >> composition_header_0; + if (index1 < composition_header_1) + { + int lookup1 = u_composition.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> composition_header_2) & composition_header_3; + int lookup2 = u_composition.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = (uc & composition_header_4); + unsigned int lookup3 = u_composition.level3[lookup2 + index3]; + if ((lookup3 >> 16) == uc2) + return lookup3 & ((1U << 16) - 1); + } + } + } +#else + char codes[4]; + const struct composition_rule *rule; + + codes[0] = (uc1 >> 8) & 0xff; + codes[1] = uc1 & 0xff; + codes[2] = (uc2 >> 8) & 0xff; + codes[3] = uc2 & 0xff; + + rule = gl_uninorm_compose_lookup (codes, 4); + if (rule != NULL) + return rule->combined; +#endif + } + } + return 0; +} diff --git a/lib/uninorm/decompose-internal.c b/lib/uninorm/decompose-internal.c new file mode 100644 index 00000000..53b745da --- /dev/null +++ b/lib/uninorm/decompose-internal.c @@ -0,0 +1,28 @@ +/* Decomposition of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "decompose-internal.h" + +#define ELEMENT struct ucs4_with_ccc +#define COMPARE(a,b) ((a)->ccc - (b)->ccc) +#define STATIC +#define merge_sort_fromto gl_uninorm_decompose_merge_sort_fromto +#define merge_sort_inplace gl_uninorm_decompose_merge_sort_inplace +#include "array-mergesort.h" diff --git a/lib/uninorm/decompose-internal.h b/lib/uninorm/decompose-internal.h new file mode 100644 index 00000000..c1bf1258 --- /dev/null +++ b/lib/uninorm/decompose-internal.h @@ -0,0 +1,36 @@ +/* Decomposition of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#include "unitypes.h" + +/* Variant of uc_decomposition that does not produce the 'tag'. */ +extern int + uc_compat_decomposition (ucs4_t uc, ucs4_t *decomposition); + +/* A Unicode character together with its canonical combining class. */ +struct ucs4_with_ccc +{ + ucs4_t code; + int ccc; /* range 0..255 */ +}; + +/* Stable-sort an array of 'struct ucs4_with_ccc'. */ +extern void + gl_uninorm_decompose_merge_sort_inplace (struct ucs4_with_ccc *src, size_t n, + struct ucs4_with_ccc *tmp); diff --git a/lib/uninorm/decomposing-form.c b/lib/uninorm/decomposing-form.c new file mode 100644 index 00000000..3b49cb8b --- /dev/null +++ b/lib/uninorm/decomposing-form.c @@ -0,0 +1,29 @@ +/* Decomposing variant of a normalization form. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include "normalize-internal.h" + +uninorm_t +uninorm_decomposing_form (uninorm_t nf) +{ + return nf->decomposing_variant; +} diff --git a/lib/uninorm/decomposition-table.c b/lib/uninorm/decomposition-table.c new file mode 100644 index 00000000..63f64427 --- /dev/null +++ b/lib/uninorm/decomposition-table.c @@ -0,0 +1,23 @@ +/* Decomposition of Unicode characters. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm/decomposition-table.h" + +#include "uninorm/decomposition-table2.h" diff --git a/lib/uninorm/decomposition-table.h b/lib/uninorm/decomposition-table.h new file mode 100644 index 00000000..ad0e1a3f --- /dev/null +++ b/lib/uninorm/decomposition-table.h @@ -0,0 +1,48 @@ +/* Decomposition of Unicode characters. + Copyright (C) 2001-2003, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + + +#include "unitypes.h" + +/* The decomposition table is made of two parts: + - A table containing the actual arrays of decomposed equivalents. + (This table is separate because the maximum length of a decomposition + is 18, much larger than than the average length 1.497 of a decomposition). + - A 3-level table of indices into this array. */ + +#include "decomposition-table1.h" + +static inline unsigned short +decomp_index (ucs4_t uc) +{ + unsigned int index1 = uc >> decomp_header_0; + if (index1 < decomp_header_1) + { + int lookup1 = gl_uninorm_decomp_index_table.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> decomp_header_2) & decomp_header_3; + int lookup2 = gl_uninorm_decomp_index_table.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = uc & decomp_header_4; + return gl_uninorm_decomp_index_table.level3[lookup2 + index3]; + } + } + } + return (unsigned short)(-1); +} diff --git a/lib/uninorm/decomposition-table1.h b/lib/uninorm/decomposition-table1.h new file mode 100644 index 00000000..4ac70f4c --- /dev/null +++ b/lib/uninorm/decomposition-table1.h @@ -0,0 +1,20 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Decomposition of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 5.1.0. */ + +extern const unsigned char gl_uninorm_decomp_chars_table[]; + +#define decomp_header_0 10 +#define decomp_header_1 191 +#define decomp_header_2 5 +#define decomp_header_3 31 +#define decomp_header_4 31 + +typedef struct + { + int level1[191]; + int level2[18 << 5]; + unsigned short level3[254 << 5]; + } +decomp_index_table_t; +extern const decomp_index_table_t gl_uninorm_decomp_index_table; diff --git a/lib/uninorm/decomposition-table2.h b/lib/uninorm/decomposition-table2.h new file mode 100644 index 00000000..f80f4342 --- /dev/null +++ b/lib/uninorm/decomposition-table2.h @@ -0,0 +1,3152 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Decomposition of Unicode characters. */ +/* Generated automatically by gen-uni-tables.c for Unicode 5.1.0. */ + +const unsigned char gl_uninorm_decomp_chars_table[] = +{ + 0x08, 0x00, 0x20, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x08, 0x20, 0x00, 0x61, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x04, 0x20, 0x00, 0x32, 0x20, 0x00, 0x33, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x01, 0x40, 0x03, 0xBC, 0xC0, 0x00, 0x20, + 0x00, 0x03, 0x27, 0x20, 0x00, 0x31, 0x20, 0x00, 0x6F, 0xBC, 0x00, 0x31, + 0x80, 0x20, 0x44, 0x00, 0x00, 0x34, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, + 0x00, 0x00, 0x32, 0xBC, 0x00, 0x33, 0x80, 0x20, 0x44, 0x00, 0x00, 0x34, + 0x80, 0x00, 0x41, 0x00, 0x03, 0x00, 0x80, 0x00, 0x41, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x41, 0x00, 0x03, 0x02, 0x80, 0x00, 0x41, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x41, 0x00, 0x03, 0x08, 0x80, 0x00, 0x41, 0x00, 0x03, 0x0A, + 0x80, 0x00, 0x43, 0x00, 0x03, 0x27, 0x80, 0x00, 0x45, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x45, 0x00, 0x03, 0x01, 0x80, 0x00, 0x45, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x45, 0x00, 0x03, 0x08, 0x80, 0x00, 0x49, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x49, 0x00, 0x03, 0x01, 0x80, 0x00, 0x49, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x49, 0x00, 0x03, 0x08, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x4F, 0x00, 0x03, 0x00, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x4F, 0x00, 0x03, 0x02, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x4F, 0x00, 0x03, 0x08, 0x80, 0x00, 0x55, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x55, 0x00, 0x03, 0x01, 0x80, 0x00, 0x55, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x55, 0x00, 0x03, 0x08, 0x80, 0x00, 0x59, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x00, 0x80, 0x00, 0x61, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x02, 0x80, 0x00, 0x61, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x08, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0A, + 0x80, 0x00, 0x63, 0x00, 0x03, 0x27, 0x80, 0x00, 0x65, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x01, 0x80, 0x00, 0x65, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x08, 0x80, 0x00, 0x69, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x01, 0x80, 0x00, 0x69, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x08, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x00, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x02, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x08, 0x80, 0x00, 0x75, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x01, 0x80, 0x00, 0x75, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x08, 0x80, 0x00, 0x79, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x08, 0x80, 0x00, 0x41, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x04, 0x80, 0x00, 0x41, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x06, 0x80, 0x00, 0x41, 0x00, 0x03, 0x28, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x28, 0x80, 0x00, 0x43, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x63, 0x00, 0x03, 0x01, 0x80, 0x00, 0x43, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x63, 0x00, 0x03, 0x02, 0x80, 0x00, 0x43, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x63, 0x00, 0x03, 0x07, 0x80, 0x00, 0x43, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x63, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x44, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x45, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x04, 0x80, 0x00, 0x45, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x06, 0x80, 0x00, 0x45, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x07, 0x80, 0x00, 0x45, 0x00, 0x03, 0x28, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x28, 0x80, 0x00, 0x45, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x47, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x67, 0x00, 0x03, 0x02, 0x80, 0x00, 0x47, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x67, 0x00, 0x03, 0x06, 0x80, 0x00, 0x47, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x67, 0x00, 0x03, 0x07, 0x80, 0x00, 0x47, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x67, 0x00, 0x03, 0x27, 0x80, 0x00, 0x48, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x02, 0x80, 0x00, 0x49, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x03, 0x80, 0x00, 0x49, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x04, 0x80, 0x00, 0x49, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x06, 0x80, 0x00, 0x49, 0x00, 0x03, 0x28, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x28, 0x80, 0x00, 0x49, 0x00, 0x03, 0x07, + 0xC0, 0x00, 0x49, 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x69, 0x00, 0x00, 0x6A, + 0x80, 0x00, 0x4A, 0x00, 0x03, 0x02, 0x80, 0x00, 0x6A, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x4B, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6B, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x4C, 0x00, 0x03, 0x01, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x4C, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x4C, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6C, 0x00, 0x03, 0x0C, + 0xC0, 0x00, 0x4C, 0x00, 0x00, 0xB7, 0xC0, 0x00, 0x6C, 0x00, 0x00, 0xB7, + 0x80, 0x00, 0x4E, 0x00, 0x03, 0x01, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x4E, 0x00, 0x03, 0x27, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x4E, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x0C, + 0xC0, 0x02, 0xBC, 0x00, 0x00, 0x6E, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x06, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x0B, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0B, 0x80, 0x00, 0x52, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x01, 0x80, 0x00, 0x52, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x27, 0x80, 0x00, 0x52, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x53, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x01, 0x80, 0x00, 0x53, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x02, 0x80, 0x00, 0x53, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x27, 0x80, 0x00, 0x53, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x54, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x27, 0x80, 0x00, 0x54, 0x00, 0x03, 0x0C, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x55, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x03, 0x80, 0x00, 0x55, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x04, 0x80, 0x00, 0x55, 0x00, 0x03, 0x06, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x06, 0x80, 0x00, 0x55, 0x00, 0x03, 0x0A, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x0A, 0x80, 0x00, 0x55, 0x00, 0x03, 0x0B, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x0B, 0x80, 0x00, 0x55, 0x00, 0x03, 0x28, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x28, 0x80, 0x00, 0x57, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x02, 0x80, 0x00, 0x59, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x02, 0x80, 0x00, 0x59, 0x00, 0x03, 0x08, + 0x80, 0x00, 0x5A, 0x00, 0x03, 0x01, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x5A, 0x00, 0x03, 0x07, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x5A, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x7A, 0x00, 0x03, 0x0C, + 0x40, 0x00, 0x73, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x1B, 0x80, 0x00, 0x6F, + 0x00, 0x03, 0x1B, 0x80, 0x00, 0x55, 0x00, 0x03, 0x1B, 0x80, 0x00, 0x75, + 0x00, 0x03, 0x1B, 0xC0, 0x00, 0x44, 0x00, 0x01, 0x7D, 0xC0, 0x00, 0x44, + 0x00, 0x01, 0x7E, 0xC0, 0x00, 0x64, 0x00, 0x01, 0x7E, 0xC0, 0x00, 0x4C, + 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x4C, 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x6C, + 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x4E, 0x00, 0x00, 0x4A, 0xC0, 0x00, 0x4E, + 0x00, 0x00, 0x6A, 0xC0, 0x00, 0x6E, 0x00, 0x00, 0x6A, 0x80, 0x00, 0x41, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x49, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x69, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4F, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x55, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x75, 0x00, 0x03, 0x0C, 0x80, 0x00, 0xDC, + 0x00, 0x03, 0x04, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x04, 0x80, 0x00, 0xDC, + 0x00, 0x03, 0x01, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x01, 0x80, 0x00, 0xDC, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x0C, 0x80, 0x00, 0xDC, + 0x00, 0x03, 0x00, 0x80, 0x00, 0xFC, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC4, + 0x00, 0x03, 0x04, 0x80, 0x00, 0xE4, 0x00, 0x03, 0x04, 0x80, 0x02, 0x26, + 0x00, 0x03, 0x04, 0x80, 0x02, 0x27, 0x00, 0x03, 0x04, 0x80, 0x00, 0xC6, + 0x00, 0x03, 0x04, 0x80, 0x00, 0xE6, 0x00, 0x03, 0x04, 0x80, 0x00, 0x47, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x67, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4B, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6B, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x4F, + 0x00, 0x03, 0x28, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x28, 0x80, 0x01, 0xEA, + 0x00, 0x03, 0x04, 0x80, 0x01, 0xEB, 0x00, 0x03, 0x04, 0x80, 0x01, 0xB7, + 0x00, 0x03, 0x0C, 0x80, 0x02, 0x92, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x6A, + 0x00, 0x03, 0x0C, 0xC0, 0x00, 0x44, 0x00, 0x00, 0x5A, 0xC0, 0x00, 0x44, + 0x00, 0x00, 0x7A, 0xC0, 0x00, 0x64, 0x00, 0x00, 0x7A, 0x80, 0x00, 0x47, + 0x00, 0x03, 0x01, 0x80, 0x00, 0x67, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4E, + 0x00, 0x03, 0x00, 0x80, 0x00, 0x6E, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC5, + 0x00, 0x03, 0x01, 0x80, 0x00, 0xE5, 0x00, 0x03, 0x01, 0x80, 0x00, 0xC6, + 0x00, 0x03, 0x01, 0x80, 0x00, 0xE6, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD8, + 0x00, 0x03, 0x01, 0x80, 0x00, 0xF8, 0x00, 0x03, 0x01, 0x80, 0x00, 0x41, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x61, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x41, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x61, 0x00, 0x03, 0x11, 0x80, 0x00, 0x45, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x65, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x45, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x65, 0x00, 0x03, 0x11, 0x80, 0x00, 0x49, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x69, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x49, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x69, 0x00, 0x03, 0x11, 0x80, 0x00, 0x4F, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x4F, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x11, 0x80, 0x00, 0x52, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x72, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x52, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x72, 0x00, 0x03, 0x11, 0x80, 0x00, 0x55, + 0x00, 0x03, 0x0F, 0x80, 0x00, 0x75, 0x00, 0x03, 0x0F, 0x80, 0x00, 0x55, + 0x00, 0x03, 0x11, 0x80, 0x00, 0x75, 0x00, 0x03, 0x11, 0x80, 0x00, 0x53, + 0x00, 0x03, 0x26, 0x80, 0x00, 0x73, 0x00, 0x03, 0x26, 0x80, 0x00, 0x54, + 0x00, 0x03, 0x26, 0x80, 0x00, 0x74, 0x00, 0x03, 0x26, 0x80, 0x00, 0x48, + 0x00, 0x03, 0x0C, 0x80, 0x00, 0x68, 0x00, 0x03, 0x0C, 0x80, 0x00, 0x41, + 0x00, 0x03, 0x07, 0x80, 0x00, 0x61, 0x00, 0x03, 0x07, 0x80, 0x00, 0x45, + 0x00, 0x03, 0x27, 0x80, 0x00, 0x65, 0x00, 0x03, 0x27, 0x80, 0x00, 0xD6, + 0x00, 0x03, 0x04, 0x80, 0x00, 0xF6, 0x00, 0x03, 0x04, 0x80, 0x00, 0xD5, + 0x00, 0x03, 0x04, 0x80, 0x00, 0xF5, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4F, + 0x00, 0x03, 0x07, 0x80, 0x00, 0x6F, 0x00, 0x03, 0x07, 0x80, 0x02, 0x2E, + 0x00, 0x03, 0x04, 0x80, 0x02, 0x2F, 0x00, 0x03, 0x04, 0x80, 0x00, 0x59, + 0x00, 0x03, 0x04, 0x80, 0x00, 0x79, 0x00, 0x03, 0x04, 0x20, 0x00, 0x68, + 0x20, 0x02, 0x66, 0x20, 0x00, 0x6A, 0x20, 0x00, 0x72, 0x20, 0x02, 0x79, + 0x20, 0x02, 0x7B, 0x20, 0x02, 0x81, 0x20, 0x00, 0x77, 0x20, 0x00, 0x79, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x06, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x07, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x0A, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x28, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x03, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x0B, + 0x20, 0x02, 0x63, 0x20, 0x00, 0x6C, 0x20, 0x00, 0x73, 0x20, 0x00, 0x78, + 0x20, 0x02, 0x95, 0x00, 0x03, 0x00, 0x00, 0x03, 0x01, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x08, 0x00, 0x03, 0x01, 0x00, 0x02, 0xB9, 0xC0, 0x00, 0x20, + 0x00, 0x03, 0x45, 0x00, 0x00, 0x3B, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xA8, 0x00, 0x03, 0x01, 0x80, 0x03, 0x91, 0x00, 0x03, 0x01, + 0x00, 0x00, 0xB7, 0x80, 0x03, 0x95, 0x00, 0x03, 0x01, 0x80, 0x03, 0x97, + 0x00, 0x03, 0x01, 0x80, 0x03, 0x99, 0x00, 0x03, 0x01, 0x80, 0x03, 0x9F, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x01, 0x80, 0x03, 0xA9, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xCA, 0x00, 0x03, 0x01, 0x80, 0x03, 0x99, + 0x00, 0x03, 0x08, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x08, 0x80, 0x03, 0xB1, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x01, 0x80, 0x03, 0xB7, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x01, 0x80, 0x03, 0xCB, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x08, 0x80, 0x03, 0xC5, + 0x00, 0x03, 0x08, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x01, 0x80, 0x03, 0xC5, + 0x00, 0x03, 0x01, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x01, 0x40, 0x03, 0xB2, + 0x40, 0x03, 0xB8, 0x40, 0x03, 0xA5, 0x80, 0x03, 0xD2, 0x00, 0x03, 0x01, + 0x80, 0x03, 0xD2, 0x00, 0x03, 0x08, 0x40, 0x03, 0xC6, 0x40, 0x03, 0xC0, + 0x40, 0x03, 0xBA, 0x40, 0x03, 0xC1, 0x40, 0x03, 0xC2, 0x40, 0x03, 0x98, + 0x40, 0x03, 0xB5, 0x40, 0x03, 0xA3, 0x80, 0x04, 0x15, 0x00, 0x03, 0x00, + 0x80, 0x04, 0x15, 0x00, 0x03, 0x08, 0x80, 0x04, 0x13, 0x00, 0x03, 0x01, + 0x80, 0x04, 0x06, 0x00, 0x03, 0x08, 0x80, 0x04, 0x1A, 0x00, 0x03, 0x01, + 0x80, 0x04, 0x18, 0x00, 0x03, 0x00, 0x80, 0x04, 0x23, 0x00, 0x03, 0x06, + 0x80, 0x04, 0x18, 0x00, 0x03, 0x06, 0x80, 0x04, 0x38, 0x00, 0x03, 0x06, + 0x80, 0x04, 0x35, 0x00, 0x03, 0x00, 0x80, 0x04, 0x35, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x33, 0x00, 0x03, 0x01, 0x80, 0x04, 0x56, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x3A, 0x00, 0x03, 0x01, 0x80, 0x04, 0x38, 0x00, 0x03, 0x00, + 0x80, 0x04, 0x43, 0x00, 0x03, 0x06, 0x80, 0x04, 0x74, 0x00, 0x03, 0x0F, + 0x80, 0x04, 0x75, 0x00, 0x03, 0x0F, 0x80, 0x04, 0x16, 0x00, 0x03, 0x06, + 0x80, 0x04, 0x36, 0x00, 0x03, 0x06, 0x80, 0x04, 0x10, 0x00, 0x03, 0x06, + 0x80, 0x04, 0x30, 0x00, 0x03, 0x06, 0x80, 0x04, 0x10, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x30, 0x00, 0x03, 0x08, 0x80, 0x04, 0x15, 0x00, 0x03, 0x06, + 0x80, 0x04, 0x35, 0x00, 0x03, 0x06, 0x80, 0x04, 0xD8, 0x00, 0x03, 0x08, + 0x80, 0x04, 0xD9, 0x00, 0x03, 0x08, 0x80, 0x04, 0x16, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x36, 0x00, 0x03, 0x08, 0x80, 0x04, 0x17, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x37, 0x00, 0x03, 0x08, 0x80, 0x04, 0x18, 0x00, 0x03, 0x04, + 0x80, 0x04, 0x38, 0x00, 0x03, 0x04, 0x80, 0x04, 0x18, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x38, 0x00, 0x03, 0x08, 0x80, 0x04, 0x1E, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x3E, 0x00, 0x03, 0x08, 0x80, 0x04, 0xE8, 0x00, 0x03, 0x08, + 0x80, 0x04, 0xE9, 0x00, 0x03, 0x08, 0x80, 0x04, 0x2D, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x4D, 0x00, 0x03, 0x08, 0x80, 0x04, 0x23, 0x00, 0x03, 0x04, + 0x80, 0x04, 0x43, 0x00, 0x03, 0x04, 0x80, 0x04, 0x23, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x43, 0x00, 0x03, 0x08, 0x80, 0x04, 0x23, 0x00, 0x03, 0x0B, + 0x80, 0x04, 0x43, 0x00, 0x03, 0x0B, 0x80, 0x04, 0x27, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x47, 0x00, 0x03, 0x08, 0x80, 0x04, 0x2B, 0x00, 0x03, 0x08, + 0x80, 0x04, 0x4B, 0x00, 0x03, 0x08, 0xC0, 0x05, 0x65, 0x00, 0x05, 0x82, + 0x80, 0x06, 0x27, 0x00, 0x06, 0x53, 0x80, 0x06, 0x27, 0x00, 0x06, 0x54, + 0x80, 0x06, 0x48, 0x00, 0x06, 0x54, 0x80, 0x06, 0x27, 0x00, 0x06, 0x55, + 0x80, 0x06, 0x4A, 0x00, 0x06, 0x54, 0xC0, 0x06, 0x27, 0x00, 0x06, 0x74, + 0xC0, 0x06, 0x48, 0x00, 0x06, 0x74, 0xC0, 0x06, 0xC7, 0x00, 0x06, 0x74, + 0xC0, 0x06, 0x4A, 0x00, 0x06, 0x74, 0x80, 0x06, 0xD5, 0x00, 0x06, 0x54, + 0x80, 0x06, 0xC1, 0x00, 0x06, 0x54, 0x80, 0x06, 0xD2, 0x00, 0x06, 0x54, + 0x80, 0x09, 0x28, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x30, 0x00, 0x09, 0x3C, + 0x80, 0x09, 0x33, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x15, 0x00, 0x09, 0x3C, + 0x80, 0x09, 0x16, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x17, 0x00, 0x09, 0x3C, + 0x80, 0x09, 0x1C, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x21, 0x00, 0x09, 0x3C, + 0x80, 0x09, 0x22, 0x00, 0x09, 0x3C, 0x80, 0x09, 0x2B, 0x00, 0x09, 0x3C, + 0x80, 0x09, 0x2F, 0x00, 0x09, 0x3C, 0x80, 0x09, 0xC7, 0x00, 0x09, 0xBE, + 0x80, 0x09, 0xC7, 0x00, 0x09, 0xD7, 0x80, 0x09, 0xA1, 0x00, 0x09, 0xBC, + 0x80, 0x09, 0xA2, 0x00, 0x09, 0xBC, 0x80, 0x09, 0xAF, 0x00, 0x09, 0xBC, + 0x80, 0x0A, 0x32, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x38, 0x00, 0x0A, 0x3C, + 0x80, 0x0A, 0x16, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x17, 0x00, 0x0A, 0x3C, + 0x80, 0x0A, 0x1C, 0x00, 0x0A, 0x3C, 0x80, 0x0A, 0x2B, 0x00, 0x0A, 0x3C, + 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x56, 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x3E, + 0x80, 0x0B, 0x47, 0x00, 0x0B, 0x57, 0x80, 0x0B, 0x21, 0x00, 0x0B, 0x3C, + 0x80, 0x0B, 0x22, 0x00, 0x0B, 0x3C, 0x80, 0x0B, 0x92, 0x00, 0x0B, 0xD7, + 0x80, 0x0B, 0xC6, 0x00, 0x0B, 0xBE, 0x80, 0x0B, 0xC7, 0x00, 0x0B, 0xBE, + 0x80, 0x0B, 0xC6, 0x00, 0x0B, 0xD7, 0x80, 0x0C, 0x46, 0x00, 0x0C, 0x56, + 0x80, 0x0C, 0xBF, 0x00, 0x0C, 0xD5, 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xD5, + 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xD6, 0x80, 0x0C, 0xC6, 0x00, 0x0C, 0xC2, + 0x80, 0x0C, 0xCA, 0x00, 0x0C, 0xD5, 0x80, 0x0D, 0x46, 0x00, 0x0D, 0x3E, + 0x80, 0x0D, 0x47, 0x00, 0x0D, 0x3E, 0x80, 0x0D, 0x46, 0x00, 0x0D, 0x57, + 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xCA, 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xCF, + 0x80, 0x0D, 0xDC, 0x00, 0x0D, 0xCA, 0x80, 0x0D, 0xD9, 0x00, 0x0D, 0xDF, + 0xC0, 0x0E, 0x4D, 0x00, 0x0E, 0x32, 0xC0, 0x0E, 0xCD, 0x00, 0x0E, 0xB2, + 0xC0, 0x0E, 0xAB, 0x00, 0x0E, 0x99, 0xC0, 0x0E, 0xAB, 0x00, 0x0E, 0xA1, + 0x08, 0x0F, 0x0B, 0x80, 0x0F, 0x42, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x4C, + 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x51, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x56, + 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x5B, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x40, + 0x00, 0x0F, 0xB5, 0x80, 0x0F, 0x71, 0x00, 0x0F, 0x72, 0x80, 0x0F, 0x71, + 0x00, 0x0F, 0x74, 0x80, 0x0F, 0xB2, 0x00, 0x0F, 0x80, 0xC0, 0x0F, 0xB2, + 0x00, 0x0F, 0x81, 0x80, 0x0F, 0xB3, 0x00, 0x0F, 0x80, 0xC0, 0x0F, 0xB3, + 0x00, 0x0F, 0x81, 0x80, 0x0F, 0x71, 0x00, 0x0F, 0x80, 0x80, 0x0F, 0x92, + 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x9C, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xA1, + 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xA6, 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0xAB, + 0x00, 0x0F, 0xB7, 0x80, 0x0F, 0x90, 0x00, 0x0F, 0xB5, 0x80, 0x10, 0x25, + 0x00, 0x10, 0x2E, 0x20, 0x10, 0xDC, 0x80, 0x1B, 0x05, 0x00, 0x1B, 0x35, + 0x80, 0x1B, 0x07, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x09, 0x00, 0x1B, 0x35, + 0x80, 0x1B, 0x0B, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x0D, 0x00, 0x1B, 0x35, + 0x80, 0x1B, 0x11, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x3A, 0x00, 0x1B, 0x35, + 0x80, 0x1B, 0x3C, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x3E, 0x00, 0x1B, 0x35, + 0x80, 0x1B, 0x3F, 0x00, 0x1B, 0x35, 0x80, 0x1B, 0x42, 0x00, 0x1B, 0x35, + 0x20, 0x00, 0x41, 0x20, 0x00, 0xC6, 0x20, 0x00, 0x42, 0x20, 0x00, 0x44, + 0x20, 0x00, 0x45, 0x20, 0x01, 0x8E, 0x20, 0x00, 0x47, 0x20, 0x00, 0x48, + 0x20, 0x00, 0x49, 0x20, 0x00, 0x4A, 0x20, 0x00, 0x4B, 0x20, 0x00, 0x4C, + 0x20, 0x00, 0x4D, 0x20, 0x00, 0x4E, 0x20, 0x00, 0x4F, 0x20, 0x02, 0x22, + 0x20, 0x00, 0x50, 0x20, 0x00, 0x52, 0x20, 0x00, 0x54, 0x20, 0x00, 0x55, + 0x20, 0x00, 0x57, 0x20, 0x00, 0x61, 0x20, 0x02, 0x50, 0x20, 0x02, 0x51, + 0x20, 0x1D, 0x02, 0x20, 0x00, 0x62, 0x20, 0x00, 0x64, 0x20, 0x00, 0x65, + 0x20, 0x02, 0x59, 0x20, 0x02, 0x5B, 0x20, 0x02, 0x5C, 0x20, 0x00, 0x67, + 0x20, 0x00, 0x6B, 0x20, 0x00, 0x6D, 0x20, 0x01, 0x4B, 0x20, 0x00, 0x6F, + 0x20, 0x02, 0x54, 0x20, 0x1D, 0x16, 0x20, 0x1D, 0x17, 0x20, 0x00, 0x70, + 0x20, 0x00, 0x74, 0x20, 0x00, 0x75, 0x20, 0x1D, 0x1D, 0x20, 0x02, 0x6F, + 0x20, 0x00, 0x76, 0x20, 0x1D, 0x25, 0x20, 0x03, 0xB2, 0x20, 0x03, 0xB3, + 0x20, 0x03, 0xB4, 0x20, 0x03, 0xC6, 0x20, 0x03, 0xC7, 0x24, 0x00, 0x69, + 0x24, 0x00, 0x72, 0x24, 0x00, 0x75, 0x24, 0x00, 0x76, 0x24, 0x03, 0xB2, + 0x24, 0x03, 0xB3, 0x24, 0x03, 0xC1, 0x24, 0x03, 0xC6, 0x24, 0x03, 0xC7, + 0x20, 0x04, 0x3D, 0x20, 0x02, 0x52, 0x20, 0x00, 0x63, 0x20, 0x02, 0x55, + 0x20, 0x00, 0xF0, 0x20, 0x02, 0x5C, 0x20, 0x00, 0x66, 0x20, 0x02, 0x5F, + 0x20, 0x02, 0x61, 0x20, 0x02, 0x65, 0x20, 0x02, 0x68, 0x20, 0x02, 0x69, + 0x20, 0x02, 0x6A, 0x20, 0x1D, 0x7B, 0x20, 0x02, 0x9D, 0x20, 0x02, 0x6D, + 0x20, 0x1D, 0x85, 0x20, 0x02, 0x9F, 0x20, 0x02, 0x71, 0x20, 0x02, 0x70, + 0x20, 0x02, 0x72, 0x20, 0x02, 0x73, 0x20, 0x02, 0x74, 0x20, 0x02, 0x75, + 0x20, 0x02, 0x78, 0x20, 0x02, 0x82, 0x20, 0x02, 0x83, 0x20, 0x01, 0xAB, + 0x20, 0x02, 0x89, 0x20, 0x02, 0x8A, 0x20, 0x1D, 0x1C, 0x20, 0x02, 0x8B, + 0x20, 0x02, 0x8C, 0x20, 0x00, 0x7A, 0x20, 0x02, 0x90, 0x20, 0x02, 0x91, + 0x20, 0x02, 0x92, 0x20, 0x03, 0xB8, 0x80, 0x00, 0x41, 0x00, 0x03, 0x25, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x25, 0x80, 0x00, 0x42, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x62, 0x00, 0x03, 0x07, 0x80, 0x00, 0x42, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x62, 0x00, 0x03, 0x23, 0x80, 0x00, 0x42, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x62, 0x00, 0x03, 0x31, 0x80, 0x00, 0xC7, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xE7, 0x00, 0x03, 0x01, 0x80, 0x00, 0x44, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x07, 0x80, 0x00, 0x44, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x23, 0x80, 0x00, 0x44, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x31, 0x80, 0x00, 0x44, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x27, 0x80, 0x00, 0x44, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x64, 0x00, 0x03, 0x2D, 0x80, 0x01, 0x12, 0x00, 0x03, 0x00, + 0x80, 0x01, 0x13, 0x00, 0x03, 0x00, 0x80, 0x01, 0x12, 0x00, 0x03, 0x01, + 0x80, 0x01, 0x13, 0x00, 0x03, 0x01, 0x80, 0x00, 0x45, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x45, 0x00, 0x03, 0x30, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x30, 0x80, 0x02, 0x28, 0x00, 0x03, 0x06, + 0x80, 0x02, 0x29, 0x00, 0x03, 0x06, 0x80, 0x00, 0x46, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x66, 0x00, 0x03, 0x07, 0x80, 0x00, 0x47, 0x00, 0x03, 0x04, + 0x80, 0x00, 0x67, 0x00, 0x03, 0x04, 0x80, 0x00, 0x48, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x07, 0x80, 0x00, 0x48, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x23, 0x80, 0x00, 0x48, 0x00, 0x03, 0x08, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x08, 0x80, 0x00, 0x48, 0x00, 0x03, 0x27, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x27, 0x80, 0x00, 0x48, 0x00, 0x03, 0x2E, + 0x80, 0x00, 0x68, 0x00, 0x03, 0x2E, 0x80, 0x00, 0x49, 0x00, 0x03, 0x30, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x30, 0x80, 0x00, 0xCF, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xEF, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x6B, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x6B, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4B, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x6B, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x6C, 0x00, 0x03, 0x23, 0x80, 0x1E, 0x36, 0x00, 0x03, 0x04, + 0x80, 0x1E, 0x37, 0x00, 0x03, 0x04, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x6C, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4C, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x6C, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x6D, 0x00, 0x03, 0x01, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x6D, 0x00, 0x03, 0x07, 0x80, 0x00, 0x4D, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x6D, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x6E, 0x00, 0x03, 0x07, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x6E, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x6E, 0x00, 0x03, 0x31, 0x80, 0x00, 0x4E, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x6E, 0x00, 0x03, 0x2D, 0x80, 0x00, 0xD5, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xF5, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD5, 0x00, 0x03, 0x08, + 0x80, 0x00, 0xF5, 0x00, 0x03, 0x08, 0x80, 0x01, 0x4C, 0x00, 0x03, 0x00, + 0x80, 0x01, 0x4D, 0x00, 0x03, 0x00, 0x80, 0x01, 0x4C, 0x00, 0x03, 0x01, + 0x80, 0x01, 0x4D, 0x00, 0x03, 0x01, 0x80, 0x00, 0x50, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x70, 0x00, 0x03, 0x01, 0x80, 0x00, 0x50, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x70, 0x00, 0x03, 0x07, 0x80, 0x00, 0x52, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x07, 0x80, 0x00, 0x52, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x23, 0x80, 0x1E, 0x5A, 0x00, 0x03, 0x04, + 0x80, 0x1E, 0x5B, 0x00, 0x03, 0x04, 0x80, 0x00, 0x52, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x72, 0x00, 0x03, 0x31, 0x80, 0x00, 0x53, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x07, 0x80, 0x00, 0x53, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x73, 0x00, 0x03, 0x23, 0x80, 0x01, 0x5A, 0x00, 0x03, 0x07, + 0x80, 0x01, 0x5B, 0x00, 0x03, 0x07, 0x80, 0x01, 0x60, 0x00, 0x03, 0x07, + 0x80, 0x01, 0x61, 0x00, 0x03, 0x07, 0x80, 0x1E, 0x62, 0x00, 0x03, 0x07, + 0x80, 0x1E, 0x63, 0x00, 0x03, 0x07, 0x80, 0x00, 0x54, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x07, 0x80, 0x00, 0x54, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x23, 0x80, 0x00, 0x54, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x31, 0x80, 0x00, 0x54, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x2D, 0x80, 0x00, 0x55, 0x00, 0x03, 0x24, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x24, 0x80, 0x00, 0x55, 0x00, 0x03, 0x30, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x30, 0x80, 0x00, 0x55, 0x00, 0x03, 0x2D, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x2D, 0x80, 0x01, 0x68, 0x00, 0x03, 0x01, + 0x80, 0x01, 0x69, 0x00, 0x03, 0x01, 0x80, 0x01, 0x6A, 0x00, 0x03, 0x08, + 0x80, 0x01, 0x6B, 0x00, 0x03, 0x08, 0x80, 0x00, 0x56, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x76, 0x00, 0x03, 0x03, 0x80, 0x00, 0x56, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x76, 0x00, 0x03, 0x23, 0x80, 0x00, 0x57, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x00, 0x80, 0x00, 0x57, 0x00, 0x03, 0x01, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x01, 0x80, 0x00, 0x57, 0x00, 0x03, 0x08, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x08, 0x80, 0x00, 0x57, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x07, 0x80, 0x00, 0x57, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x77, 0x00, 0x03, 0x23, 0x80, 0x00, 0x58, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x78, 0x00, 0x03, 0x07, 0x80, 0x00, 0x58, 0x00, 0x03, 0x08, + 0x80, 0x00, 0x78, 0x00, 0x03, 0x08, 0x80, 0x00, 0x59, 0x00, 0x03, 0x07, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x07, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x02, + 0x80, 0x00, 0x7A, 0x00, 0x03, 0x02, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x7A, 0x00, 0x03, 0x23, 0x80, 0x00, 0x5A, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x7A, 0x00, 0x03, 0x31, 0x80, 0x00, 0x68, 0x00, 0x03, 0x31, + 0x80, 0x00, 0x74, 0x00, 0x03, 0x08, 0x80, 0x00, 0x77, 0x00, 0x03, 0x0A, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x0A, 0xC0, 0x00, 0x61, 0x00, 0x02, 0xBE, + 0x80, 0x01, 0x7F, 0x00, 0x03, 0x07, 0x80, 0x00, 0x41, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x23, 0x80, 0x00, 0x41, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x61, 0x00, 0x03, 0x09, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xE2, 0x00, 0x03, 0x01, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x00, + 0x80, 0x00, 0xE2, 0x00, 0x03, 0x00, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x09, + 0x80, 0x00, 0xE2, 0x00, 0x03, 0x09, 0x80, 0x00, 0xC2, 0x00, 0x03, 0x03, + 0x80, 0x00, 0xE2, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xA0, 0x00, 0x03, 0x02, + 0x80, 0x1E, 0xA1, 0x00, 0x03, 0x02, 0x80, 0x01, 0x02, 0x00, 0x03, 0x01, + 0x80, 0x01, 0x03, 0x00, 0x03, 0x01, 0x80, 0x01, 0x02, 0x00, 0x03, 0x00, + 0x80, 0x01, 0x03, 0x00, 0x03, 0x00, 0x80, 0x01, 0x02, 0x00, 0x03, 0x09, + 0x80, 0x01, 0x03, 0x00, 0x03, 0x09, 0x80, 0x01, 0x02, 0x00, 0x03, 0x03, + 0x80, 0x01, 0x03, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xA0, 0x00, 0x03, 0x06, + 0x80, 0x1E, 0xA1, 0x00, 0x03, 0x06, 0x80, 0x00, 0x45, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x23, 0x80, 0x00, 0x45, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x09, 0x80, 0x00, 0x45, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x65, 0x00, 0x03, 0x03, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xEA, 0x00, 0x03, 0x01, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x00, + 0x80, 0x00, 0xEA, 0x00, 0x03, 0x00, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x09, + 0x80, 0x00, 0xEA, 0x00, 0x03, 0x09, 0x80, 0x00, 0xCA, 0x00, 0x03, 0x03, + 0x80, 0x00, 0xEA, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xB8, 0x00, 0x03, 0x02, + 0x80, 0x1E, 0xB9, 0x00, 0x03, 0x02, 0x80, 0x00, 0x49, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x09, 0x80, 0x00, 0x49, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x69, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x23, 0x80, 0x00, 0x4F, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x6F, 0x00, 0x03, 0x09, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x01, + 0x80, 0x00, 0xF4, 0x00, 0x03, 0x01, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x00, + 0x80, 0x00, 0xF4, 0x00, 0x03, 0x00, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x09, + 0x80, 0x00, 0xF4, 0x00, 0x03, 0x09, 0x80, 0x00, 0xD4, 0x00, 0x03, 0x03, + 0x80, 0x00, 0xF4, 0x00, 0x03, 0x03, 0x80, 0x1E, 0xCC, 0x00, 0x03, 0x02, + 0x80, 0x1E, 0xCD, 0x00, 0x03, 0x02, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x01, + 0x80, 0x01, 0xA1, 0x00, 0x03, 0x01, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x00, + 0x80, 0x01, 0xA1, 0x00, 0x03, 0x00, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x09, + 0x80, 0x01, 0xA1, 0x00, 0x03, 0x09, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x03, + 0x80, 0x01, 0xA1, 0x00, 0x03, 0x03, 0x80, 0x01, 0xA0, 0x00, 0x03, 0x23, + 0x80, 0x01, 0xA1, 0x00, 0x03, 0x23, 0x80, 0x00, 0x55, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x23, 0x80, 0x00, 0x55, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x75, 0x00, 0x03, 0x09, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x01, + 0x80, 0x01, 0xB0, 0x00, 0x03, 0x01, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x00, + 0x80, 0x01, 0xB0, 0x00, 0x03, 0x00, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x09, + 0x80, 0x01, 0xB0, 0x00, 0x03, 0x09, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x03, + 0x80, 0x01, 0xB0, 0x00, 0x03, 0x03, 0x80, 0x01, 0xAF, 0x00, 0x03, 0x23, + 0x80, 0x01, 0xB0, 0x00, 0x03, 0x23, 0x80, 0x00, 0x59, 0x00, 0x03, 0x00, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x00, 0x80, 0x00, 0x59, 0x00, 0x03, 0x23, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x23, 0x80, 0x00, 0x59, 0x00, 0x03, 0x09, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x09, 0x80, 0x00, 0x59, 0x00, 0x03, 0x03, + 0x80, 0x00, 0x79, 0x00, 0x03, 0x03, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xB1, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x01, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x01, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x00, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x01, 0x00, 0x03, 0x42, 0x80, 0x03, 0x91, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x91, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x09, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x09, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x08, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x09, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xB5, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x10, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x11, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x10, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x11, 0x00, 0x03, 0x01, 0x80, 0x03, 0x95, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x95, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x18, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x19, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x18, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x19, 0x00, 0x03, 0x01, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xB7, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x21, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x21, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x20, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x21, 0x00, 0x03, 0x42, 0x80, 0x03, 0x97, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x97, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x29, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x29, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x28, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x29, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xB9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x31, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x31, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x30, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x31, 0x00, 0x03, 0x42, 0x80, 0x03, 0x99, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x99, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x39, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x39, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x38, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x39, 0x00, 0x03, 0x42, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xBF, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x40, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x41, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x40, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x41, 0x00, 0x03, 0x01, 0x80, 0x03, 0x9F, 0x00, 0x03, 0x13, + 0x80, 0x03, 0x9F, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x48, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x49, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x48, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x49, 0x00, 0x03, 0x01, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xC5, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x51, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x51, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x50, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x51, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x14, + 0x80, 0x1F, 0x59, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x59, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x59, 0x00, 0x03, 0x42, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xC9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x61, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x61, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x60, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x61, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA9, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xA9, 0x00, 0x03, 0x14, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x00, + 0x80, 0x1F, 0x69, 0x00, 0x03, 0x00, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x01, + 0x80, 0x1F, 0x69, 0x00, 0x03, 0x01, 0x80, 0x1F, 0x68, 0x00, 0x03, 0x42, + 0x80, 0x1F, 0x69, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x00, + 0x00, 0x03, 0xAC, 0x80, 0x03, 0xB5, 0x00, 0x03, 0x00, 0x00, 0x03, 0xAD, + 0x80, 0x03, 0xB7, 0x00, 0x03, 0x00, 0x00, 0x03, 0xAE, 0x80, 0x03, 0xB9, + 0x00, 0x03, 0x00, 0x00, 0x03, 0xAF, 0x80, 0x03, 0xBF, 0x00, 0x03, 0x00, + 0x00, 0x03, 0xCC, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x00, 0x00, 0x03, 0xCD, + 0x80, 0x03, 0xC9, 0x00, 0x03, 0x00, 0x00, 0x03, 0xCE, 0x80, 0x1F, 0x00, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x01, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x02, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x03, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x04, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x05, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x06, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x07, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x08, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x09, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0A, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0C, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0E, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x0F, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x20, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x21, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x22, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x23, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x24, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x25, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x26, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x27, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x28, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x29, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2A, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2C, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2E, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x2F, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x60, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x61, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x62, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x63, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x64, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x65, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x66, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x67, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x68, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x69, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6A, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6B, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6C, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6D, 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6E, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0x6F, 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, + 0x00, 0x03, 0x06, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x04, 0x80, 0x1F, 0x70, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x45, 0x80, 0x03, 0xAC, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xB1, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xB6, + 0x00, 0x03, 0x45, 0x80, 0x03, 0x91, 0x00, 0x03, 0x06, 0x80, 0x03, 0x91, + 0x00, 0x03, 0x04, 0x80, 0x03, 0x91, 0x00, 0x03, 0x00, 0x00, 0x03, 0x86, + 0x80, 0x03, 0x91, 0x00, 0x03, 0x45, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x13, + 0x00, 0x03, 0xB9, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x13, 0xC0, 0x00, 0x20, + 0x00, 0x03, 0x42, 0x80, 0x00, 0xA8, 0x00, 0x03, 0x42, 0x80, 0x1F, 0x74, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x45, 0x80, 0x03, 0xAE, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xB7, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xC6, + 0x00, 0x03, 0x45, 0x80, 0x03, 0x95, 0x00, 0x03, 0x00, 0x00, 0x03, 0x88, + 0x80, 0x03, 0x97, 0x00, 0x03, 0x00, 0x00, 0x03, 0x89, 0x80, 0x03, 0x97, + 0x00, 0x03, 0x45, 0x80, 0x1F, 0xBF, 0x00, 0x03, 0x00, 0x80, 0x1F, 0xBF, + 0x00, 0x03, 0x01, 0x80, 0x1F, 0xBF, 0x00, 0x03, 0x42, 0x80, 0x03, 0xB9, + 0x00, 0x03, 0x06, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x04, 0x80, 0x03, 0xCA, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x90, 0x80, 0x03, 0xB9, 0x00, 0x03, 0x42, + 0x80, 0x03, 0xCA, 0x00, 0x03, 0x42, 0x80, 0x03, 0x99, 0x00, 0x03, 0x06, + 0x80, 0x03, 0x99, 0x00, 0x03, 0x04, 0x80, 0x03, 0x99, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x8A, 0x80, 0x1F, 0xFE, 0x00, 0x03, 0x00, 0x80, 0x1F, 0xFE, + 0x00, 0x03, 0x01, 0x80, 0x1F, 0xFE, 0x00, 0x03, 0x42, 0x80, 0x03, 0xC5, + 0x00, 0x03, 0x06, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x04, 0x80, 0x03, 0xCB, + 0x00, 0x03, 0x00, 0x00, 0x03, 0xB0, 0x80, 0x03, 0xC1, 0x00, 0x03, 0x13, + 0x80, 0x03, 0xC1, 0x00, 0x03, 0x14, 0x80, 0x03, 0xC5, 0x00, 0x03, 0x42, + 0x80, 0x03, 0xCB, 0x00, 0x03, 0x42, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x06, + 0x80, 0x03, 0xA5, 0x00, 0x03, 0x04, 0x80, 0x03, 0xA5, 0x00, 0x03, 0x00, + 0x00, 0x03, 0x8E, 0x80, 0x03, 0xA1, 0x00, 0x03, 0x14, 0x80, 0x00, 0xA8, + 0x00, 0x03, 0x00, 0x00, 0x03, 0x85, 0x00, 0x00, 0x60, 0x80, 0x1F, 0x7C, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x45, 0x80, 0x03, 0xCE, + 0x00, 0x03, 0x45, 0x80, 0x03, 0xC9, 0x00, 0x03, 0x42, 0x80, 0x1F, 0xF6, + 0x00, 0x03, 0x45, 0x80, 0x03, 0x9F, 0x00, 0x03, 0x00, 0x00, 0x03, 0x8C, + 0x80, 0x03, 0xA9, 0x00, 0x03, 0x00, 0x00, 0x03, 0x8F, 0x80, 0x03, 0xA9, + 0x00, 0x03, 0x45, 0x00, 0x00, 0xB4, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x14, + 0x00, 0x20, 0x02, 0x00, 0x20, 0x03, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, + 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x08, 0x00, 0x20, + 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x08, 0x20, 0x10, + 0xC0, 0x00, 0x20, 0x00, 0x03, 0x33, 0x40, 0x00, 0x2E, 0xC0, 0x00, 0x2E, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x2E, 0x80, 0x00, 0x2E, 0x00, 0x00, 0x2E, + 0x08, 0x00, 0x20, 0xC0, 0x20, 0x32, 0x00, 0x20, 0x32, 0xC0, 0x20, 0x32, + 0x80, 0x20, 0x32, 0x00, 0x20, 0x32, 0xC0, 0x20, 0x35, 0x00, 0x20, 0x35, + 0xC0, 0x20, 0x35, 0x80, 0x20, 0x35, 0x00, 0x20, 0x35, 0xC0, 0x00, 0x21, + 0x00, 0x00, 0x21, 0xC0, 0x00, 0x20, 0x00, 0x03, 0x05, 0xC0, 0x00, 0x3F, + 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x21, 0xC0, 0x00, 0x21, + 0x00, 0x00, 0x3F, 0xC0, 0x20, 0x32, 0x80, 0x20, 0x32, 0x80, 0x20, 0x32, + 0x00, 0x20, 0x32, 0x40, 0x00, 0x20, 0x20, 0x00, 0x30, 0x20, 0x00, 0x69, + 0x20, 0x00, 0x34, 0x20, 0x00, 0x35, 0x20, 0x00, 0x36, 0x20, 0x00, 0x37, + 0x20, 0x00, 0x38, 0x20, 0x00, 0x39, 0x20, 0x00, 0x2B, 0x20, 0x22, 0x12, + 0x20, 0x00, 0x3D, 0x20, 0x00, 0x28, 0x20, 0x00, 0x29, 0x20, 0x00, 0x6E, + 0x24, 0x00, 0x30, 0x24, 0x00, 0x31, 0x24, 0x00, 0x32, 0x24, 0x00, 0x33, + 0x24, 0x00, 0x34, 0x24, 0x00, 0x35, 0x24, 0x00, 0x36, 0x24, 0x00, 0x37, + 0x24, 0x00, 0x38, 0x24, 0x00, 0x39, 0x24, 0x00, 0x2B, 0x24, 0x22, 0x12, + 0x24, 0x00, 0x3D, 0x24, 0x00, 0x28, 0x24, 0x00, 0x29, 0x24, 0x00, 0x61, + 0x24, 0x00, 0x65, 0x24, 0x00, 0x6F, 0x24, 0x00, 0x78, 0x24, 0x02, 0x59, + 0xC0, 0x00, 0x52, 0x00, 0x00, 0x73, 0xC0, 0x00, 0x61, 0x80, 0x00, 0x2F, + 0x00, 0x00, 0x63, 0xC0, 0x00, 0x61, 0x80, 0x00, 0x2F, 0x00, 0x00, 0x73, + 0x04, 0x00, 0x43, 0xC0, 0x00, 0xB0, 0x00, 0x00, 0x43, 0xC0, 0x00, 0x63, + 0x80, 0x00, 0x2F, 0x00, 0x00, 0x6F, 0xC0, 0x00, 0x63, 0x80, 0x00, 0x2F, + 0x00, 0x00, 0x75, 0x40, 0x01, 0x90, 0xC0, 0x00, 0xB0, 0x00, 0x00, 0x46, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x48, 0x04, 0x00, 0x48, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x68, 0x04, 0x01, 0x27, 0x04, 0x00, 0x49, 0x04, 0x00, 0x49, + 0x04, 0x00, 0x4C, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x4E, 0xC0, 0x00, 0x4E, + 0x00, 0x00, 0x6F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, + 0x04, 0x00, 0x52, 0x04, 0x00, 0x52, 0xA0, 0x00, 0x53, 0x00, 0x00, 0x4D, + 0xC0, 0x00, 0x54, 0x80, 0x00, 0x45, 0x00, 0x00, 0x4C, 0xA0, 0x00, 0x54, + 0x00, 0x00, 0x4D, 0x04, 0x00, 0x5A, 0x00, 0x03, 0xA9, 0x04, 0x00, 0x5A, + 0x00, 0x00, 0x4B, 0x00, 0x00, 0xC5, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x4D, + 0x04, 0x00, 0x6F, 0x40, 0x05, 0xD0, 0x40, 0x05, 0xD1, 0x40, 0x05, 0xD2, + 0x40, 0x05, 0xD3, 0x04, 0x00, 0x69, 0xC0, 0x00, 0x46, 0x80, 0x00, 0x41, + 0x00, 0x00, 0x58, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xB3, 0x04, 0x03, 0x93, + 0x04, 0x03, 0xA0, 0x04, 0x22, 0x11, 0x04, 0x00, 0x44, 0x04, 0x00, 0x64, + 0x04, 0x00, 0x65, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0xBC, 0x00, 0x31, + 0x80, 0x20, 0x44, 0x00, 0x00, 0x33, 0xBC, 0x00, 0x32, 0x80, 0x20, 0x44, + 0x00, 0x00, 0x33, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, + 0xBC, 0x00, 0x32, 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, 0xBC, 0x00, 0x33, + 0x80, 0x20, 0x44, 0x00, 0x00, 0x35, 0xBC, 0x00, 0x34, 0x80, 0x20, 0x44, + 0x00, 0x00, 0x35, 0xBC, 0x00, 0x31, 0x80, 0x20, 0x44, 0x00, 0x00, 0x36, + 0xBC, 0x00, 0x35, 0x80, 0x20, 0x44, 0x00, 0x00, 0x36, 0xBC, 0x00, 0x31, + 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, 0xBC, 0x00, 0x33, 0x80, 0x20, 0x44, + 0x00, 0x00, 0x38, 0xBC, 0x00, 0x35, 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, + 0xBC, 0x00, 0x37, 0x80, 0x20, 0x44, 0x00, 0x00, 0x38, 0xBC, 0x00, 0x31, + 0x00, 0x20, 0x44, 0x40, 0x00, 0x49, 0xC0, 0x00, 0x49, 0x00, 0x00, 0x49, + 0xC0, 0x00, 0x49, 0x80, 0x00, 0x49, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x49, + 0x00, 0x00, 0x56, 0x40, 0x00, 0x56, 0xC0, 0x00, 0x56, 0x00, 0x00, 0x49, + 0xC0, 0x00, 0x56, 0x80, 0x00, 0x49, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x56, + 0x80, 0x00, 0x49, 0x80, 0x00, 0x49, 0x00, 0x00, 0x49, 0xC0, 0x00, 0x49, + 0x00, 0x00, 0x58, 0x40, 0x00, 0x58, 0xC0, 0x00, 0x58, 0x00, 0x00, 0x49, + 0xC0, 0x00, 0x58, 0x80, 0x00, 0x49, 0x00, 0x00, 0x49, 0x40, 0x00, 0x4C, + 0x40, 0x00, 0x43, 0x40, 0x00, 0x44, 0x40, 0x00, 0x4D, 0x40, 0x00, 0x69, + 0xC0, 0x00, 0x69, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x69, 0x80, 0x00, 0x69, + 0x00, 0x00, 0x69, 0xC0, 0x00, 0x69, 0x00, 0x00, 0x76, 0x40, 0x00, 0x76, + 0xC0, 0x00, 0x76, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x76, 0x80, 0x00, 0x69, + 0x00, 0x00, 0x69, 0xC0, 0x00, 0x76, 0x80, 0x00, 0x69, 0x80, 0x00, 0x69, + 0x00, 0x00, 0x69, 0xC0, 0x00, 0x69, 0x00, 0x00, 0x78, 0x40, 0x00, 0x78, + 0xC0, 0x00, 0x78, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x78, 0x80, 0x00, 0x69, + 0x00, 0x00, 0x69, 0x40, 0x00, 0x6C, 0x40, 0x00, 0x63, 0x40, 0x00, 0x64, + 0x40, 0x00, 0x6D, 0x80, 0x21, 0x90, 0x00, 0x03, 0x38, 0x80, 0x21, 0x92, + 0x00, 0x03, 0x38, 0x80, 0x21, 0x94, 0x00, 0x03, 0x38, 0x80, 0x21, 0xD0, + 0x00, 0x03, 0x38, 0x80, 0x21, 0xD4, 0x00, 0x03, 0x38, 0x80, 0x21, 0xD2, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x03, 0x00, 0x03, 0x38, 0x80, 0x22, 0x08, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x0B, 0x00, 0x03, 0x38, 0x80, 0x22, 0x23, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x25, 0x00, 0x03, 0x38, 0xC0, 0x22, 0x2B, + 0x00, 0x22, 0x2B, 0xC0, 0x22, 0x2B, 0x80, 0x22, 0x2B, 0x00, 0x22, 0x2B, + 0xC0, 0x22, 0x2E, 0x00, 0x22, 0x2E, 0xC0, 0x22, 0x2E, 0x80, 0x22, 0x2E, + 0x00, 0x22, 0x2E, 0x80, 0x22, 0x3C, 0x00, 0x03, 0x38, 0x80, 0x22, 0x43, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x45, 0x00, 0x03, 0x38, 0x80, 0x22, 0x48, + 0x00, 0x03, 0x38, 0x80, 0x00, 0x3D, 0x00, 0x03, 0x38, 0x80, 0x22, 0x61, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x4D, 0x00, 0x03, 0x38, 0x80, 0x00, 0x3C, + 0x00, 0x03, 0x38, 0x80, 0x00, 0x3E, 0x00, 0x03, 0x38, 0x80, 0x22, 0x64, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x65, 0x00, 0x03, 0x38, 0x80, 0x22, 0x72, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x73, 0x00, 0x03, 0x38, 0x80, 0x22, 0x76, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x77, 0x00, 0x03, 0x38, 0x80, 0x22, 0x7A, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x7B, 0x00, 0x03, 0x38, 0x80, 0x22, 0x82, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x83, 0x00, 0x03, 0x38, 0x80, 0x22, 0x86, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x87, 0x00, 0x03, 0x38, 0x80, 0x22, 0xA2, + 0x00, 0x03, 0x38, 0x80, 0x22, 0xA8, 0x00, 0x03, 0x38, 0x80, 0x22, 0xA9, + 0x00, 0x03, 0x38, 0x80, 0x22, 0xAB, 0x00, 0x03, 0x38, 0x80, 0x22, 0x7C, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x7D, 0x00, 0x03, 0x38, 0x80, 0x22, 0x91, + 0x00, 0x03, 0x38, 0x80, 0x22, 0x92, 0x00, 0x03, 0x38, 0x80, 0x22, 0xB2, + 0x00, 0x03, 0x38, 0x80, 0x22, 0xB3, 0x00, 0x03, 0x38, 0x80, 0x22, 0xB4, + 0x00, 0x03, 0x38, 0x80, 0x22, 0xB5, 0x00, 0x03, 0x38, 0x00, 0x30, 0x08, + 0x00, 0x30, 0x09, 0x1C, 0x00, 0x31, 0x1C, 0x00, 0x32, 0x1C, 0x00, 0x33, + 0x1C, 0x00, 0x34, 0x1C, 0x00, 0x35, 0x1C, 0x00, 0x36, 0x1C, 0x00, 0x37, + 0x1C, 0x00, 0x38, 0x1C, 0x00, 0x39, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x30, + 0x9C, 0x00, 0x31, 0x00, 0x00, 0x31, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x32, + 0x9C, 0x00, 0x31, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x34, + 0x9C, 0x00, 0x31, 0x00, 0x00, 0x35, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x36, + 0x9C, 0x00, 0x31, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x31, 0x00, 0x00, 0x38, + 0x9C, 0x00, 0x31, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x30, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x31, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x32, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x33, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x34, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x35, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x36, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x37, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x38, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x39, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x31, 0x80, 0x00, 0x32, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x31, 0x80, 0x00, 0x33, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x31, 0x80, 0x00, 0x36, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x31, 0x80, 0x00, 0x37, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x32, 0x80, 0x00, 0x30, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x31, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x32, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x33, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x34, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x35, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x36, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x37, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x38, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x39, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x00, 0x2E, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x32, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x33, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x00, 0x2E, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x36, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x37, + 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x00, 0x2E, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x32, + 0x80, 0x00, 0x30, 0x00, 0x00, 0x2E, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x62, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x63, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x64, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x65, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x66, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x67, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x68, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x69, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6A, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x6C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6D, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6E, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x6F, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x70, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x71, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x72, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x73, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x74, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x75, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x76, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x00, 0x77, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x00, 0x78, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x79, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x00, 0x7A, 0x00, 0x00, 0x29, + 0x1C, 0x00, 0x41, 0x1C, 0x00, 0x42, 0x1C, 0x00, 0x43, 0x1C, 0x00, 0x44, + 0x1C, 0x00, 0x45, 0x1C, 0x00, 0x46, 0x1C, 0x00, 0x47, 0x1C, 0x00, 0x48, + 0x1C, 0x00, 0x49, 0x1C, 0x00, 0x4A, 0x1C, 0x00, 0x4B, 0x1C, 0x00, 0x4C, + 0x1C, 0x00, 0x4D, 0x1C, 0x00, 0x4E, 0x1C, 0x00, 0x4F, 0x1C, 0x00, 0x50, + 0x1C, 0x00, 0x51, 0x1C, 0x00, 0x52, 0x1C, 0x00, 0x53, 0x1C, 0x00, 0x54, + 0x1C, 0x00, 0x55, 0x1C, 0x00, 0x56, 0x1C, 0x00, 0x57, 0x1C, 0x00, 0x58, + 0x1C, 0x00, 0x59, 0x1C, 0x00, 0x5A, 0x1C, 0x00, 0x61, 0x1C, 0x00, 0x62, + 0x1C, 0x00, 0x63, 0x1C, 0x00, 0x64, 0x1C, 0x00, 0x65, 0x1C, 0x00, 0x66, + 0x1C, 0x00, 0x67, 0x1C, 0x00, 0x68, 0x1C, 0x00, 0x69, 0x1C, 0x00, 0x6A, + 0x1C, 0x00, 0x6B, 0x1C, 0x00, 0x6C, 0x1C, 0x00, 0x6D, 0x1C, 0x00, 0x6E, + 0x1C, 0x00, 0x6F, 0x1C, 0x00, 0x70, 0x1C, 0x00, 0x71, 0x1C, 0x00, 0x72, + 0x1C, 0x00, 0x73, 0x1C, 0x00, 0x74, 0x1C, 0x00, 0x75, 0x1C, 0x00, 0x76, + 0x1C, 0x00, 0x77, 0x1C, 0x00, 0x78, 0x1C, 0x00, 0x79, 0x1C, 0x00, 0x7A, + 0x1C, 0x00, 0x30, 0xC0, 0x22, 0x2B, 0x80, 0x22, 0x2B, 0x80, 0x22, 0x2B, + 0x00, 0x22, 0x2B, 0xC0, 0x00, 0x3A, 0x80, 0x00, 0x3A, 0x00, 0x00, 0x3D, + 0xC0, 0x00, 0x3D, 0x00, 0x00, 0x3D, 0xC0, 0x00, 0x3D, 0x80, 0x00, 0x3D, + 0x00, 0x00, 0x3D, 0x80, 0x2A, 0xDD, 0x00, 0x03, 0x38, 0x24, 0x00, 0x6A, + 0x20, 0x00, 0x56, 0x20, 0x2D, 0x61, 0x40, 0x6B, 0xCD, 0x40, 0x9F, 0x9F, + 0x40, 0x4E, 0x00, 0x40, 0x4E, 0x28, 0x40, 0x4E, 0x36, 0x40, 0x4E, 0x3F, + 0x40, 0x4E, 0x59, 0x40, 0x4E, 0x85, 0x40, 0x4E, 0x8C, 0x40, 0x4E, 0xA0, + 0x40, 0x4E, 0xBA, 0x40, 0x51, 0x3F, 0x40, 0x51, 0x65, 0x40, 0x51, 0x6B, + 0x40, 0x51, 0x82, 0x40, 0x51, 0x96, 0x40, 0x51, 0xAB, 0x40, 0x51, 0xE0, + 0x40, 0x51, 0xF5, 0x40, 0x52, 0x00, 0x40, 0x52, 0x9B, 0x40, 0x52, 0xF9, + 0x40, 0x53, 0x15, 0x40, 0x53, 0x1A, 0x40, 0x53, 0x38, 0x40, 0x53, 0x41, + 0x40, 0x53, 0x5C, 0x40, 0x53, 0x69, 0x40, 0x53, 0x82, 0x40, 0x53, 0xB6, + 0x40, 0x53, 0xC8, 0x40, 0x53, 0xE3, 0x40, 0x56, 0xD7, 0x40, 0x57, 0x1F, + 0x40, 0x58, 0xEB, 0x40, 0x59, 0x02, 0x40, 0x59, 0x0A, 0x40, 0x59, 0x15, + 0x40, 0x59, 0x27, 0x40, 0x59, 0x73, 0x40, 0x5B, 0x50, 0x40, 0x5B, 0x80, + 0x40, 0x5B, 0xF8, 0x40, 0x5C, 0x0F, 0x40, 0x5C, 0x22, 0x40, 0x5C, 0x38, + 0x40, 0x5C, 0x6E, 0x40, 0x5C, 0x71, 0x40, 0x5D, 0xDB, 0x40, 0x5D, 0xE5, + 0x40, 0x5D, 0xF1, 0x40, 0x5D, 0xFE, 0x40, 0x5E, 0x72, 0x40, 0x5E, 0x7A, + 0x40, 0x5E, 0x7F, 0x40, 0x5E, 0xF4, 0x40, 0x5E, 0xFE, 0x40, 0x5F, 0x0B, + 0x40, 0x5F, 0x13, 0x40, 0x5F, 0x50, 0x40, 0x5F, 0x61, 0x40, 0x5F, 0x73, + 0x40, 0x5F, 0xC3, 0x40, 0x62, 0x08, 0x40, 0x62, 0x36, 0x40, 0x62, 0x4B, + 0x40, 0x65, 0x2F, 0x40, 0x65, 0x34, 0x40, 0x65, 0x87, 0x40, 0x65, 0x97, + 0x40, 0x65, 0xA4, 0x40, 0x65, 0xB9, 0x40, 0x65, 0xE0, 0x40, 0x65, 0xE5, + 0x40, 0x66, 0xF0, 0x40, 0x67, 0x08, 0x40, 0x67, 0x28, 0x40, 0x6B, 0x20, + 0x40, 0x6B, 0x62, 0x40, 0x6B, 0x79, 0x40, 0x6B, 0xB3, 0x40, 0x6B, 0xCB, + 0x40, 0x6B, 0xD4, 0x40, 0x6B, 0xDB, 0x40, 0x6C, 0x0F, 0x40, 0x6C, 0x14, + 0x40, 0x6C, 0x34, 0x40, 0x70, 0x6B, 0x40, 0x72, 0x2A, 0x40, 0x72, 0x36, + 0x40, 0x72, 0x3B, 0x40, 0x72, 0x3F, 0x40, 0x72, 0x47, 0x40, 0x72, 0x59, + 0x40, 0x72, 0x5B, 0x40, 0x72, 0xAC, 0x40, 0x73, 0x84, 0x40, 0x73, 0x89, + 0x40, 0x74, 0xDC, 0x40, 0x74, 0xE6, 0x40, 0x75, 0x18, 0x40, 0x75, 0x1F, + 0x40, 0x75, 0x28, 0x40, 0x75, 0x30, 0x40, 0x75, 0x8B, 0x40, 0x75, 0x92, + 0x40, 0x76, 0x76, 0x40, 0x76, 0x7D, 0x40, 0x76, 0xAE, 0x40, 0x76, 0xBF, + 0x40, 0x76, 0xEE, 0x40, 0x77, 0xDB, 0x40, 0x77, 0xE2, 0x40, 0x77, 0xF3, + 0x40, 0x79, 0x3A, 0x40, 0x79, 0xB8, 0x40, 0x79, 0xBE, 0x40, 0x7A, 0x74, + 0x40, 0x7A, 0xCB, 0x40, 0x7A, 0xF9, 0x40, 0x7C, 0x73, 0x40, 0x7C, 0xF8, + 0x40, 0x7F, 0x36, 0x40, 0x7F, 0x51, 0x40, 0x7F, 0x8A, 0x40, 0x7F, 0xBD, + 0x40, 0x80, 0x01, 0x40, 0x80, 0x0C, 0x40, 0x80, 0x12, 0x40, 0x80, 0x33, + 0x40, 0x80, 0x7F, 0x40, 0x80, 0x89, 0x40, 0x81, 0xE3, 0x40, 0x81, 0xEA, + 0x40, 0x81, 0xF3, 0x40, 0x81, 0xFC, 0x40, 0x82, 0x0C, 0x40, 0x82, 0x1B, + 0x40, 0x82, 0x1F, 0x40, 0x82, 0x6E, 0x40, 0x82, 0x72, 0x40, 0x82, 0x78, + 0x40, 0x86, 0x4D, 0x40, 0x86, 0x6B, 0x40, 0x88, 0x40, 0x40, 0x88, 0x4C, + 0x40, 0x88, 0x63, 0x40, 0x89, 0x7E, 0x40, 0x89, 0x8B, 0x40, 0x89, 0xD2, + 0x40, 0x8A, 0x00, 0x40, 0x8C, 0x37, 0x40, 0x8C, 0x46, 0x40, 0x8C, 0x55, + 0x40, 0x8C, 0x78, 0x40, 0x8C, 0x9D, 0x40, 0x8D, 0x64, 0x40, 0x8D, 0x70, + 0x40, 0x8D, 0xB3, 0x40, 0x8E, 0xAB, 0x40, 0x8E, 0xCA, 0x40, 0x8F, 0x9B, + 0x40, 0x8F, 0xB0, 0x40, 0x8F, 0xB5, 0x40, 0x90, 0x91, 0x40, 0x91, 0x49, + 0x40, 0x91, 0xC6, 0x40, 0x91, 0xCC, 0x40, 0x91, 0xD1, 0x40, 0x95, 0x77, + 0x40, 0x95, 0x80, 0x40, 0x96, 0x1C, 0x40, 0x96, 0xB6, 0x40, 0x96, 0xB9, + 0x40, 0x96, 0xE8, 0x40, 0x97, 0x51, 0x40, 0x97, 0x5E, 0x40, 0x97, 0x62, + 0x40, 0x97, 0x69, 0x40, 0x97, 0xCB, 0x40, 0x97, 0xED, 0x40, 0x97, 0xF3, + 0x40, 0x98, 0x01, 0x40, 0x98, 0xA8, 0x40, 0x98, 0xDB, 0x40, 0x98, 0xDF, + 0x40, 0x99, 0x96, 0x40, 0x99, 0x99, 0x40, 0x99, 0xAC, 0x40, 0x9A, 0xA8, + 0x40, 0x9A, 0xD8, 0x40, 0x9A, 0xDF, 0x40, 0x9B, 0x25, 0x40, 0x9B, 0x2F, + 0x40, 0x9B, 0x32, 0x40, 0x9B, 0x3C, 0x40, 0x9B, 0x5A, 0x40, 0x9C, 0xE5, + 0x40, 0x9E, 0x75, 0x40, 0x9E, 0x7F, 0x40, 0x9E, 0xA5, 0x40, 0x9E, 0xBB, + 0x40, 0x9E, 0xC3, 0x40, 0x9E, 0xCD, 0x40, 0x9E, 0xD1, 0x40, 0x9E, 0xF9, + 0x40, 0x9E, 0xFD, 0x40, 0x9F, 0x0E, 0x40, 0x9F, 0x13, 0x40, 0x9F, 0x20, + 0x40, 0x9F, 0x3B, 0x40, 0x9F, 0x4A, 0x40, 0x9F, 0x52, 0x40, 0x9F, 0x8D, + 0x40, 0x9F, 0x9C, 0x40, 0x9F, 0xA0, 0x2C, 0x00, 0x20, 0x40, 0x30, 0x12, + 0x40, 0x53, 0x41, 0x40, 0x53, 0x44, 0x40, 0x53, 0x45, 0x80, 0x30, 0x4B, + 0x00, 0x30, 0x99, 0x80, 0x30, 0x4D, 0x00, 0x30, 0x99, 0x80, 0x30, 0x4F, + 0x00, 0x30, 0x99, 0x80, 0x30, 0x51, 0x00, 0x30, 0x99, 0x80, 0x30, 0x53, + 0x00, 0x30, 0x99, 0x80, 0x30, 0x55, 0x00, 0x30, 0x99, 0x80, 0x30, 0x57, + 0x00, 0x30, 0x99, 0x80, 0x30, 0x59, 0x00, 0x30, 0x99, 0x80, 0x30, 0x5B, + 0x00, 0x30, 0x99, 0x80, 0x30, 0x5D, 0x00, 0x30, 0x99, 0x80, 0x30, 0x5F, + 0x00, 0x30, 0x99, 0x80, 0x30, 0x61, 0x00, 0x30, 0x99, 0x80, 0x30, 0x64, + 0x00, 0x30, 0x99, 0x80, 0x30, 0x66, 0x00, 0x30, 0x99, 0x80, 0x30, 0x68, + 0x00, 0x30, 0x99, 0x80, 0x30, 0x6F, 0x00, 0x30, 0x99, 0x80, 0x30, 0x6F, + 0x00, 0x30, 0x9A, 0x80, 0x30, 0x72, 0x00, 0x30, 0x99, 0x80, 0x30, 0x72, + 0x00, 0x30, 0x9A, 0x80, 0x30, 0x75, 0x00, 0x30, 0x99, 0x80, 0x30, 0x75, + 0x00, 0x30, 0x9A, 0x80, 0x30, 0x78, 0x00, 0x30, 0x99, 0x80, 0x30, 0x78, + 0x00, 0x30, 0x9A, 0x80, 0x30, 0x7B, 0x00, 0x30, 0x99, 0x80, 0x30, 0x7B, + 0x00, 0x30, 0x9A, 0x80, 0x30, 0x46, 0x00, 0x30, 0x99, 0xC0, 0x00, 0x20, + 0x00, 0x30, 0x99, 0xC0, 0x00, 0x20, 0x00, 0x30, 0x9A, 0x80, 0x30, 0x9D, + 0x00, 0x30, 0x99, 0xA8, 0x30, 0x88, 0x00, 0x30, 0x8A, 0x80, 0x30, 0xAB, + 0x00, 0x30, 0x99, 0x80, 0x30, 0xAD, 0x00, 0x30, 0x99, 0x80, 0x30, 0xAF, + 0x00, 0x30, 0x99, 0x80, 0x30, 0xB1, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB3, + 0x00, 0x30, 0x99, 0x80, 0x30, 0xB5, 0x00, 0x30, 0x99, 0x80, 0x30, 0xB7, + 0x00, 0x30, 0x99, 0x80, 0x30, 0xB9, 0x00, 0x30, 0x99, 0x80, 0x30, 0xBB, + 0x00, 0x30, 0x99, 0x80, 0x30, 0xBD, 0x00, 0x30, 0x99, 0x80, 0x30, 0xBF, + 0x00, 0x30, 0x99, 0x80, 0x30, 0xC1, 0x00, 0x30, 0x99, 0x80, 0x30, 0xC4, + 0x00, 0x30, 0x99, 0x80, 0x30, 0xC6, 0x00, 0x30, 0x99, 0x80, 0x30, 0xC8, + 0x00, 0x30, 0x99, 0x80, 0x30, 0xCF, 0x00, 0x30, 0x99, 0x80, 0x30, 0xCF, + 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD2, 0x00, 0x30, 0x99, 0x80, 0x30, 0xD2, + 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD5, 0x00, 0x30, 0x99, 0x80, 0x30, 0xD5, + 0x00, 0x30, 0x9A, 0x80, 0x30, 0xD8, 0x00, 0x30, 0x99, 0x80, 0x30, 0xD8, + 0x00, 0x30, 0x9A, 0x80, 0x30, 0xDB, 0x00, 0x30, 0x99, 0x80, 0x30, 0xDB, + 0x00, 0x30, 0x9A, 0x80, 0x30, 0xA6, 0x00, 0x30, 0x99, 0x80, 0x30, 0xEF, + 0x00, 0x30, 0x99, 0x80, 0x30, 0xF0, 0x00, 0x30, 0x99, 0x80, 0x30, 0xF1, + 0x00, 0x30, 0x99, 0x80, 0x30, 0xF2, 0x00, 0x30, 0x99, 0x80, 0x30, 0xFD, + 0x00, 0x30, 0x99, 0xA8, 0x30, 0xB3, 0x00, 0x30, 0xC8, 0x40, 0x11, 0x00, + 0x40, 0x11, 0x01, 0x40, 0x11, 0xAA, 0x40, 0x11, 0x02, 0x40, 0x11, 0xAC, + 0x40, 0x11, 0xAD, 0x40, 0x11, 0x03, 0x40, 0x11, 0x04, 0x40, 0x11, 0x05, + 0x40, 0x11, 0xB0, 0x40, 0x11, 0xB1, 0x40, 0x11, 0xB2, 0x40, 0x11, 0xB3, + 0x40, 0x11, 0xB4, 0x40, 0x11, 0xB5, 0x40, 0x11, 0x1A, 0x40, 0x11, 0x06, + 0x40, 0x11, 0x07, 0x40, 0x11, 0x08, 0x40, 0x11, 0x21, 0x40, 0x11, 0x09, + 0x40, 0x11, 0x0A, 0x40, 0x11, 0x0B, 0x40, 0x11, 0x0C, 0x40, 0x11, 0x0D, + 0x40, 0x11, 0x0E, 0x40, 0x11, 0x0F, 0x40, 0x11, 0x10, 0x40, 0x11, 0x11, + 0x40, 0x11, 0x12, 0x40, 0x11, 0x61, 0x40, 0x11, 0x62, 0x40, 0x11, 0x63, + 0x40, 0x11, 0x64, 0x40, 0x11, 0x65, 0x40, 0x11, 0x66, 0x40, 0x11, 0x67, + 0x40, 0x11, 0x68, 0x40, 0x11, 0x69, 0x40, 0x11, 0x6A, 0x40, 0x11, 0x6B, + 0x40, 0x11, 0x6C, 0x40, 0x11, 0x6D, 0x40, 0x11, 0x6E, 0x40, 0x11, 0x6F, + 0x40, 0x11, 0x70, 0x40, 0x11, 0x71, 0x40, 0x11, 0x72, 0x40, 0x11, 0x73, + 0x40, 0x11, 0x74, 0x40, 0x11, 0x75, 0x40, 0x11, 0x60, 0x40, 0x11, 0x14, + 0x40, 0x11, 0x15, 0x40, 0x11, 0xC7, 0x40, 0x11, 0xC8, 0x40, 0x11, 0xCC, + 0x40, 0x11, 0xCE, 0x40, 0x11, 0xD3, 0x40, 0x11, 0xD7, 0x40, 0x11, 0xD9, + 0x40, 0x11, 0x1C, 0x40, 0x11, 0xDD, 0x40, 0x11, 0xDF, 0x40, 0x11, 0x1D, + 0x40, 0x11, 0x1E, 0x40, 0x11, 0x20, 0x40, 0x11, 0x22, 0x40, 0x11, 0x23, + 0x40, 0x11, 0x27, 0x40, 0x11, 0x29, 0x40, 0x11, 0x2B, 0x40, 0x11, 0x2C, + 0x40, 0x11, 0x2D, 0x40, 0x11, 0x2E, 0x40, 0x11, 0x2F, 0x40, 0x11, 0x32, + 0x40, 0x11, 0x36, 0x40, 0x11, 0x40, 0x40, 0x11, 0x47, 0x40, 0x11, 0x4C, + 0x40, 0x11, 0xF1, 0x40, 0x11, 0xF2, 0x40, 0x11, 0x57, 0x40, 0x11, 0x58, + 0x40, 0x11, 0x59, 0x40, 0x11, 0x84, 0x40, 0x11, 0x85, 0x40, 0x11, 0x88, + 0x40, 0x11, 0x91, 0x40, 0x11, 0x92, 0x40, 0x11, 0x94, 0x40, 0x11, 0x9E, + 0x40, 0x11, 0xA1, 0x20, 0x4E, 0x00, 0x20, 0x4E, 0x8C, 0x20, 0x4E, 0x09, + 0x20, 0x56, 0xDB, 0x20, 0x4E, 0x0A, 0x20, 0x4E, 0x2D, 0x20, 0x4E, 0x0B, + 0x20, 0x75, 0x32, 0x20, 0x4E, 0x59, 0x20, 0x4E, 0x19, 0x20, 0x4E, 0x01, + 0x20, 0x59, 0x29, 0x20, 0x57, 0x30, 0x20, 0x4E, 0xBA, 0xC0, 0x00, 0x28, + 0x80, 0x11, 0x00, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x02, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x03, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x11, 0x05, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x11, 0x06, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x07, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x09, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x11, 0x0C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0E, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0F, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x11, 0x10, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x11, 0x11, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x12, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x00, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x02, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x03, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x05, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x06, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x07, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x09, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0C, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0E, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0F, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x10, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x11, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x12, 0x80, 0x11, 0x61, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0C, 0x80, 0x11, 0x6E, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x80, 0x11, 0x69, + 0x80, 0x11, 0x0C, 0x80, 0x11, 0x65, 0x80, 0x11, 0xAB, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x11, 0x0B, 0x80, 0x11, 0x69, 0x80, 0x11, 0x12, + 0x80, 0x11, 0x6E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x00, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x8C, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x09, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x56, 0xDB, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x94, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x51, 0x6D, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x03, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x51, 0x6B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0x5D, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x53, 0x41, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x67, 0x08, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x70, 0x6B, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x6C, 0x34, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x67, 0x28, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x91, 0xD1, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x57, 0x1F, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x65, 0xE5, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x68, 0x2A, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x67, 0x09, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x79, 0x3E, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x54, 0x0D, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x72, 0x79, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x8C, 0xA1, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x79, 0x5D, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x52, 0xB4, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4E, 0xE3, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x54, 0x7C, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x5B, 0x66, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x76, 0xE3, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4F, 0x01, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x8C, 0xC7, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x53, 0x54, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x79, 0x6D, + 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, 0x80, 0x4F, 0x11, 0x00, 0x00, 0x29, + 0xC0, 0x00, 0x28, 0x80, 0x81, 0xEA, 0x00, 0x00, 0x29, 0xC0, 0x00, 0x28, + 0x80, 0x81, 0xF3, 0x00, 0x00, 0x29, 0xB8, 0x00, 0x50, 0x80, 0x00, 0x54, + 0x00, 0x00, 0x45, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x31, 0x9C, 0x00, 0x32, + 0x00, 0x00, 0x32, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x32, + 0x00, 0x00, 0x34, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x35, 0x9C, 0x00, 0x32, + 0x00, 0x00, 0x36, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x37, 0x9C, 0x00, 0x32, + 0x00, 0x00, 0x38, 0x9C, 0x00, 0x32, 0x00, 0x00, 0x39, 0x9C, 0x00, 0x33, + 0x00, 0x00, 0x30, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x31, 0x9C, 0x00, 0x33, + 0x00, 0x00, 0x32, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x33, 0x9C, 0x00, 0x33, + 0x00, 0x00, 0x34, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x35, 0x1C, 0x11, 0x00, + 0x1C, 0x11, 0x02, 0x1C, 0x11, 0x03, 0x1C, 0x11, 0x05, 0x1C, 0x11, 0x06, + 0x1C, 0x11, 0x07, 0x1C, 0x11, 0x09, 0x1C, 0x11, 0x0B, 0x1C, 0x11, 0x0C, + 0x1C, 0x11, 0x0E, 0x1C, 0x11, 0x0F, 0x1C, 0x11, 0x10, 0x1C, 0x11, 0x11, + 0x1C, 0x11, 0x12, 0x9C, 0x11, 0x00, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x02, + 0x00, 0x11, 0x61, 0x9C, 0x11, 0x03, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x05, + 0x00, 0x11, 0x61, 0x9C, 0x11, 0x06, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x07, + 0x00, 0x11, 0x61, 0x9C, 0x11, 0x09, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0B, + 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0C, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0E, + 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0F, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x10, + 0x00, 0x11, 0x61, 0x9C, 0x11, 0x11, 0x00, 0x11, 0x61, 0x9C, 0x11, 0x12, + 0x00, 0x11, 0x61, 0x9C, 0x11, 0x0E, 0x80, 0x11, 0x61, 0x80, 0x11, 0xB7, + 0x80, 0x11, 0x00, 0x00, 0x11, 0x69, 0x9C, 0x11, 0x0C, 0x80, 0x11, 0x6E, + 0x80, 0x11, 0x0B, 0x00, 0x11, 0x74, 0x9C, 0x11, 0x0B, 0x00, 0x11, 0x6E, + 0x1C, 0x4E, 0x00, 0x1C, 0x4E, 0x8C, 0x1C, 0x4E, 0x09, 0x1C, 0x56, 0xDB, + 0x1C, 0x4E, 0x94, 0x1C, 0x51, 0x6D, 0x1C, 0x4E, 0x03, 0x1C, 0x51, 0x6B, + 0x1C, 0x4E, 0x5D, 0x1C, 0x53, 0x41, 0x1C, 0x67, 0x08, 0x1C, 0x70, 0x6B, + 0x1C, 0x6C, 0x34, 0x1C, 0x67, 0x28, 0x1C, 0x91, 0xD1, 0x1C, 0x57, 0x1F, + 0x1C, 0x65, 0xE5, 0x1C, 0x68, 0x2A, 0x1C, 0x67, 0x09, 0x1C, 0x79, 0x3E, + 0x1C, 0x54, 0x0D, 0x1C, 0x72, 0x79, 0x1C, 0x8C, 0xA1, 0x1C, 0x79, 0x5D, + 0x1C, 0x52, 0xB4, 0x1C, 0x79, 0xD8, 0x1C, 0x75, 0x37, 0x1C, 0x59, 0x73, + 0x1C, 0x90, 0x69, 0x1C, 0x51, 0x2A, 0x1C, 0x53, 0x70, 0x1C, 0x6C, 0xE8, + 0x1C, 0x98, 0x05, 0x1C, 0x4F, 0x11, 0x1C, 0x51, 0x99, 0x1C, 0x6B, 0x63, + 0x1C, 0x4E, 0x0A, 0x1C, 0x4E, 0x2D, 0x1C, 0x4E, 0x0B, 0x1C, 0x5D, 0xE6, + 0x1C, 0x53, 0xF3, 0x1C, 0x53, 0x3B, 0x1C, 0x5B, 0x97, 0x1C, 0x5B, 0x66, + 0x1C, 0x76, 0xE3, 0x1C, 0x4F, 0x01, 0x1C, 0x8C, 0xC7, 0x1C, 0x53, 0x54, + 0x1C, 0x59, 0x1C, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x36, 0x9C, 0x00, 0x33, + 0x00, 0x00, 0x37, 0x9C, 0x00, 0x33, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x33, + 0x00, 0x00, 0x39, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x30, 0x9C, 0x00, 0x34, + 0x00, 0x00, 0x31, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x32, 0x9C, 0x00, 0x34, + 0x00, 0x00, 0x33, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x34, 0x9C, 0x00, 0x34, + 0x00, 0x00, 0x35, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x36, 0x9C, 0x00, 0x34, + 0x00, 0x00, 0x37, 0x9C, 0x00, 0x34, 0x00, 0x00, 0x38, 0x9C, 0x00, 0x34, + 0x00, 0x00, 0x39, 0x9C, 0x00, 0x35, 0x00, 0x00, 0x30, 0xC0, 0x00, 0x31, + 0x00, 0x67, 0x08, 0xC0, 0x00, 0x32, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x33, + 0x00, 0x67, 0x08, 0xC0, 0x00, 0x34, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x35, + 0x00, 0x67, 0x08, 0xC0, 0x00, 0x36, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x37, + 0x00, 0x67, 0x08, 0xC0, 0x00, 0x38, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x39, + 0x00, 0x67, 0x08, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x67, 0x08, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x67, 0x08, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x32, 0x00, 0x67, 0x08, 0xB8, 0x00, 0x48, 0x00, 0x00, 0x67, + 0xB8, 0x00, 0x65, 0x80, 0x00, 0x72, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x65, + 0x00, 0x00, 0x56, 0xB8, 0x00, 0x4C, 0x80, 0x00, 0x54, 0x00, 0x00, 0x44, + 0x1C, 0x30, 0xA2, 0x1C, 0x30, 0xA4, 0x1C, 0x30, 0xA6, 0x1C, 0x30, 0xA8, + 0x1C, 0x30, 0xAA, 0x1C, 0x30, 0xAB, 0x1C, 0x30, 0xAD, 0x1C, 0x30, 0xAF, + 0x1C, 0x30, 0xB1, 0x1C, 0x30, 0xB3, 0x1C, 0x30, 0xB5, 0x1C, 0x30, 0xB7, + 0x1C, 0x30, 0xB9, 0x1C, 0x30, 0xBB, 0x1C, 0x30, 0xBD, 0x1C, 0x30, 0xBF, + 0x1C, 0x30, 0xC1, 0x1C, 0x30, 0xC4, 0x1C, 0x30, 0xC6, 0x1C, 0x30, 0xC8, + 0x1C, 0x30, 0xCA, 0x1C, 0x30, 0xCB, 0x1C, 0x30, 0xCC, 0x1C, 0x30, 0xCD, + 0x1C, 0x30, 0xCE, 0x1C, 0x30, 0xCF, 0x1C, 0x30, 0xD2, 0x1C, 0x30, 0xD5, + 0x1C, 0x30, 0xD8, 0x1C, 0x30, 0xDB, 0x1C, 0x30, 0xDE, 0x1C, 0x30, 0xDF, + 0x1C, 0x30, 0xE0, 0x1C, 0x30, 0xE1, 0x1C, 0x30, 0xE2, 0x1C, 0x30, 0xE4, + 0x1C, 0x30, 0xE6, 0x1C, 0x30, 0xE8, 0x1C, 0x30, 0xE9, 0x1C, 0x30, 0xEA, + 0x1C, 0x30, 0xEB, 0x1C, 0x30, 0xEC, 0x1C, 0x30, 0xED, 0x1C, 0x30, 0xEF, + 0x1C, 0x30, 0xF0, 0x1C, 0x30, 0xF1, 0x1C, 0x30, 0xF2, 0xB8, 0x30, 0xA2, + 0x80, 0x30, 0xD1, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xA2, + 0x80, 0x30, 0xEB, 0x80, 0x30, 0xD5, 0x00, 0x30, 0xA1, 0xB8, 0x30, 0xA2, + 0x80, 0x30, 0xF3, 0x80, 0x30, 0xDA, 0x00, 0x30, 0xA2, 0xB8, 0x30, 0xA2, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xA4, 0x80, 0x30, 0xCB, + 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB0, 0xB8, 0x30, 0xA4, 0x80, 0x30, 0xF3, + 0x00, 0x30, 0xC1, 0xB8, 0x30, 0xA6, 0x80, 0x30, 0xA9, 0x00, 0x30, 0xF3, + 0xB8, 0x30, 0xA8, 0x80, 0x30, 0xB9, 0x80, 0x30, 0xAF, 0x80, 0x30, 0xFC, + 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xA8, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xAB, + 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAA, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB9, + 0xB8, 0x30, 0xAA, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xAB, + 0x80, 0x30, 0xA4, 0x00, 0x30, 0xEA, 0xB8, 0x30, 0xAB, 0x80, 0x30, 0xE9, + 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xAB, 0x80, 0x30, 0xED, + 0x80, 0x30, 0xEA, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAC, 0x80, 0x30, 0xED, + 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xAC, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xDE, + 0xB8, 0x30, 0xAE, 0x00, 0x30, 0xAC, 0xB8, 0x30, 0xAE, 0x80, 0x30, 0xCB, + 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xE5, 0x80, 0x30, 0xEA, + 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAE, 0x80, 0x30, 0xEB, 0x80, 0x30, 0xC0, + 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xAD, 0x00, 0x30, 0xED, 0xB8, 0x30, 0xAD, + 0x80, 0x30, 0xED, 0x80, 0x30, 0xB0, 0x80, 0x30, 0xE9, 0x00, 0x30, 0xE0, + 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xED, 0x80, 0x30, 0xE1, 0x80, 0x30, 0xFC, + 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xAD, 0x80, 0x30, 0xED, + 0x80, 0x30, 0xEF, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xB0, + 0x80, 0x30, 0xE9, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xB0, 0x80, 0x30, 0xE9, + 0x80, 0x30, 0xE0, 0x80, 0x30, 0xC8, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xAF, + 0x80, 0x30, 0xEB, 0x80, 0x30, 0xBC, 0x80, 0x30, 0xA4, 0x00, 0x30, 0xED, + 0xB8, 0x30, 0xAF, 0x80, 0x30, 0xED, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xCD, + 0xB8, 0x30, 0xB1, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xB3, + 0x80, 0x30, 0xEB, 0x00, 0x30, 0xCA, 0xB8, 0x30, 0xB3, 0x80, 0x30, 0xFC, + 0x00, 0x30, 0xDD, 0xB8, 0x30, 0xB5, 0x80, 0x30, 0xA4, 0x80, 0x30, 0xAF, + 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xB5, 0x80, 0x30, 0xF3, 0x80, 0x30, 0xC1, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xB7, 0x80, 0x30, 0xEA, + 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB0, 0xB8, 0x30, 0xBB, 0x80, 0x30, 0xF3, + 0x00, 0x30, 0xC1, 0xB8, 0x30, 0xBB, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC8, + 0xB8, 0x30, 0xC0, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xC7, + 0x00, 0x30, 0xB7, 0xB8, 0x30, 0xC9, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xC8, + 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xCA, 0x00, 0x30, 0xCE, 0xB8, 0x30, 0xCE, + 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xCF, 0x80, 0x30, 0xA4, + 0x00, 0x30, 0xC4, 0xB8, 0x30, 0xD1, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xBB, + 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xD1, 0x80, 0x30, 0xFC, + 0x00, 0x30, 0xC4, 0xB8, 0x30, 0xD0, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xEC, + 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD4, 0x80, 0x30, 0xA2, 0x80, 0x30, 0xB9, + 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD4, 0x80, 0x30, 0xAF, + 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD4, 0x00, 0x30, 0xB3, 0xB8, 0x30, 0xD3, + 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD5, 0x80, 0x30, 0xA1, 0x80, 0x30, 0xE9, + 0x80, 0x30, 0xC3, 0x00, 0x30, 0xC9, 0xB8, 0x30, 0xD5, 0x80, 0x30, 0xA3, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xD6, 0x80, 0x30, 0xC3, + 0x80, 0x30, 0xB7, 0x80, 0x30, 0xA7, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xD5, + 0x80, 0x30, 0xE9, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xD8, 0x80, 0x30, 0xAF, + 0x80, 0x30, 0xBF, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xDA, + 0x00, 0x30, 0xBD, 0xB8, 0x30, 0xDA, 0x80, 0x30, 0xCB, 0x00, 0x30, 0xD2, + 0xB8, 0x30, 0xD8, 0x80, 0x30, 0xEB, 0x00, 0x30, 0xC4, 0xB8, 0x30, 0xDA, + 0x80, 0x30, 0xF3, 0x00, 0x30, 0xB9, 0xB8, 0x30, 0xDA, 0x80, 0x30, 0xFC, + 0x00, 0x30, 0xB8, 0xB8, 0x30, 0xD9, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xBF, + 0xB8, 0x30, 0xDD, 0x80, 0x30, 0xA4, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC8, + 0xB8, 0x30, 0xDC, 0x80, 0x30, 0xEB, 0x00, 0x30, 0xC8, 0xB8, 0x30, 0xDB, + 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDD, 0x80, 0x30, 0xF3, 0x00, 0x30, 0xC9, + 0xB8, 0x30, 0xDB, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xDB, + 0x80, 0x30, 0xFC, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xA4, + 0x80, 0x30, 0xAF, 0x00, 0x30, 0xED, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xA4, + 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xC3, 0x00, 0x30, 0xCF, + 0xB8, 0x30, 0xDE, 0x80, 0x30, 0xEB, 0x00, 0x30, 0xAF, 0xB8, 0x30, 0xDE, + 0x80, 0x30, 0xF3, 0x80, 0x30, 0xB7, 0x80, 0x30, 0xE7, 0x00, 0x30, 0xF3, + 0xB8, 0x30, 0xDF, 0x80, 0x30, 0xAF, 0x80, 0x30, 0xED, 0x00, 0x30, 0xF3, + 0xB8, 0x30, 0xDF, 0x00, 0x30, 0xEA, 0xB8, 0x30, 0xDF, 0x80, 0x30, 0xEA, + 0x80, 0x30, 0xD0, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xE1, + 0x00, 0x30, 0xAC, 0xB8, 0x30, 0xE1, 0x80, 0x30, 0xAC, 0x80, 0x30, 0xC8, + 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xE1, 0x80, 0x30, 0xFC, 0x80, 0x30, 0xC8, + 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xE4, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xC9, + 0xB8, 0x30, 0xE4, 0x80, 0x30, 0xFC, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xE6, + 0x80, 0x30, 0xA2, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xEA, 0x80, 0x30, 0xC3, + 0x80, 0x30, 0xC8, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xEA, 0x00, 0x30, 0xE9, + 0xB8, 0x30, 0xEB, 0x80, 0x30, 0xD4, 0x00, 0x30, 0xFC, 0xB8, 0x30, 0xEB, + 0x80, 0x30, 0xFC, 0x80, 0x30, 0xD6, 0x00, 0x30, 0xEB, 0xB8, 0x30, 0xEC, + 0x00, 0x30, 0xE0, 0xB8, 0x30, 0xEC, 0x80, 0x30, 0xF3, 0x80, 0x30, 0xC8, + 0x80, 0x30, 0xB2, 0x00, 0x30, 0xF3, 0xB8, 0x30, 0xEF, 0x80, 0x30, 0xC3, + 0x00, 0x30, 0xC8, 0xC0, 0x00, 0x30, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, + 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x33, + 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x34, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x35, + 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x36, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x37, + 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x38, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x39, + 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x31, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x32, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x33, + 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x35, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x36, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x37, + 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x39, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, + 0x80, 0x00, 0x30, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x31, + 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x32, 0x00, 0x70, 0xB9, + 0xC0, 0x00, 0x32, 0x80, 0x00, 0x33, 0x00, 0x70, 0xB9, 0xC0, 0x00, 0x32, + 0x80, 0x00, 0x34, 0x00, 0x70, 0xB9, 0xB8, 0x00, 0x68, 0x80, 0x00, 0x50, + 0x00, 0x00, 0x61, 0xB8, 0x00, 0x64, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x41, + 0x00, 0x00, 0x55, 0xB8, 0x00, 0x62, 0x80, 0x00, 0x61, 0x00, 0x00, 0x72, + 0xB8, 0x00, 0x6F, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x63, + 0xB8, 0x00, 0x64, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x64, 0x80, 0x00, 0x6D, + 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x64, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, + 0xB8, 0x00, 0x49, 0x00, 0x00, 0x55, 0xB8, 0x5E, 0x73, 0x00, 0x62, 0x10, + 0xB8, 0x66, 0x2D, 0x00, 0x54, 0x8C, 0xB8, 0x59, 0x27, 0x00, 0x6B, 0x63, + 0xB8, 0x66, 0x0E, 0x00, 0x6C, 0xBB, 0xB8, 0x68, 0x2A, 0x80, 0x5F, 0x0F, + 0x80, 0x4F, 0x1A, 0x00, 0x79, 0x3E, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x41, + 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x41, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x41, + 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x41, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x41, + 0xB8, 0x00, 0x4B, 0x00, 0x00, 0x42, 0xB8, 0x00, 0x4D, 0x00, 0x00, 0x42, + 0xB8, 0x00, 0x47, 0x00, 0x00, 0x42, 0xB8, 0x00, 0x63, 0x80, 0x00, 0x61, + 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x63, 0x80, 0x00, 0x61, + 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x46, 0xB8, 0x00, 0x6E, + 0x00, 0x00, 0x46, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x46, 0xB8, 0x03, 0xBC, + 0x00, 0x00, 0x67, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x6B, + 0x00, 0x00, 0x67, 0xB8, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x6B, + 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x4D, 0x80, 0x00, 0x48, + 0x00, 0x00, 0x7A, 0xB8, 0x00, 0x47, 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, + 0xB8, 0x00, 0x54, 0x80, 0x00, 0x48, 0x00, 0x00, 0x7A, 0xB8, 0x03, 0xBC, + 0x00, 0x21, 0x13, 0xB8, 0x00, 0x6D, 0x00, 0x21, 0x13, 0xB8, 0x00, 0x64, + 0x00, 0x21, 0x13, 0xB8, 0x00, 0x6B, 0x00, 0x21, 0x13, 0xB8, 0x00, 0x66, + 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6E, 0x00, 0x00, 0x6D, 0xB8, 0x03, 0xBC, + 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x63, + 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x6D, + 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x63, 0x80, 0x00, 0x6D, + 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x6B, + 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x6D, + 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x63, 0x80, 0x00, 0x6D, 0x00, 0x00, 0xB3, + 0xB8, 0x00, 0x6D, 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x6D, + 0x00, 0x00, 0xB3, 0xB8, 0x00, 0x6D, 0x80, 0x22, 0x15, 0x00, 0x00, 0x73, + 0xB8, 0x00, 0x6D, 0x80, 0x22, 0x15, 0x80, 0x00, 0x73, 0x00, 0x00, 0xB2, + 0xB8, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x6B, 0x80, 0x00, 0x50, + 0x00, 0x00, 0x61, 0xB8, 0x00, 0x4D, 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, + 0xB8, 0x00, 0x47, 0x80, 0x00, 0x50, 0x00, 0x00, 0x61, 0xB8, 0x00, 0x72, + 0x80, 0x00, 0x61, 0x00, 0x00, 0x64, 0xB8, 0x00, 0x72, 0x80, 0x00, 0x61, + 0x80, 0x00, 0x64, 0x80, 0x22, 0x15, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x72, + 0x80, 0x00, 0x61, 0x80, 0x00, 0x64, 0x80, 0x22, 0x15, 0x80, 0x00, 0x73, + 0x00, 0x00, 0xB2, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x6E, + 0x00, 0x00, 0x73, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x73, 0xB8, 0x00, 0x6D, + 0x00, 0x00, 0x73, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x6E, + 0x00, 0x00, 0x56, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x6D, + 0x00, 0x00, 0x56, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x56, 0xB8, 0x00, 0x4D, + 0x00, 0x00, 0x56, 0xB8, 0x00, 0x70, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6E, + 0x00, 0x00, 0x57, 0xB8, 0x03, 0xBC, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6D, + 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x57, 0xB8, 0x00, 0x4D, + 0x00, 0x00, 0x57, 0xB8, 0x00, 0x6B, 0x00, 0x03, 0xA9, 0xB8, 0x00, 0x4D, + 0x00, 0x03, 0xA9, 0xB8, 0x00, 0x61, 0x80, 0x00, 0x2E, 0x80, 0x00, 0x6D, + 0x00, 0x00, 0x2E, 0xB8, 0x00, 0x42, 0x00, 0x00, 0x71, 0xB8, 0x00, 0x63, + 0x00, 0x00, 0x63, 0xB8, 0x00, 0x63, 0x00, 0x00, 0x64, 0xB8, 0x00, 0x43, + 0x80, 0x22, 0x15, 0x80, 0x00, 0x6B, 0x00, 0x00, 0x67, 0xB8, 0x00, 0x43, + 0x80, 0x00, 0x6F, 0x00, 0x00, 0x2E, 0xB8, 0x00, 0x64, 0x00, 0x00, 0x42, + 0xB8, 0x00, 0x47, 0x00, 0x00, 0x79, 0xB8, 0x00, 0x68, 0x00, 0x00, 0x61, + 0xB8, 0x00, 0x48, 0x00, 0x00, 0x50, 0xB8, 0x00, 0x69, 0x00, 0x00, 0x6E, + 0xB8, 0x00, 0x4B, 0x00, 0x00, 0x4B, 0xB8, 0x00, 0x4B, 0x00, 0x00, 0x4D, + 0xB8, 0x00, 0x6B, 0x00, 0x00, 0x74, 0xB8, 0x00, 0x6C, 0x00, 0x00, 0x6D, + 0xB8, 0x00, 0x6C, 0x00, 0x00, 0x6E, 0xB8, 0x00, 0x6C, 0x80, 0x00, 0x6F, + 0x00, 0x00, 0x67, 0xB8, 0x00, 0x6C, 0x00, 0x00, 0x78, 0xB8, 0x00, 0x6D, + 0x00, 0x00, 0x62, 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x69, 0x00, 0x00, 0x6C, + 0xB8, 0x00, 0x6D, 0x80, 0x00, 0x6F, 0x00, 0x00, 0x6C, 0xB8, 0x00, 0x50, + 0x00, 0x00, 0x48, 0xB8, 0x00, 0x70, 0x80, 0x00, 0x2E, 0x80, 0x00, 0x6D, + 0x00, 0x00, 0x2E, 0xB8, 0x00, 0x50, 0x80, 0x00, 0x50, 0x00, 0x00, 0x4D, + 0xB8, 0x00, 0x50, 0x00, 0x00, 0x52, 0xB8, 0x00, 0x73, 0x00, 0x00, 0x72, + 0xB8, 0x00, 0x53, 0x00, 0x00, 0x76, 0xB8, 0x00, 0x57, 0x00, 0x00, 0x62, + 0xB8, 0x00, 0x56, 0x80, 0x22, 0x15, 0x00, 0x00, 0x6D, 0xB8, 0x00, 0x41, + 0x80, 0x22, 0x15, 0x00, 0x00, 0x6D, 0xC0, 0x00, 0x31, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x32, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x33, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x34, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x35, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x36, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x37, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x38, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x39, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x30, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x31, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x32, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x33, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x34, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x35, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x36, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, 0x80, 0x00, 0x37, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x31, 0x80, 0x00, 0x38, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x31, + 0x80, 0x00, 0x39, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x30, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x31, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x32, 0x80, 0x00, 0x32, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, + 0x80, 0x00, 0x33, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x34, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x35, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x32, 0x80, 0x00, 0x36, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, + 0x80, 0x00, 0x37, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x38, + 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x32, 0x80, 0x00, 0x39, 0x00, 0x65, 0xE5, + 0xC0, 0x00, 0x33, 0x80, 0x00, 0x30, 0x00, 0x65, 0xE5, 0xC0, 0x00, 0x33, + 0x80, 0x00, 0x31, 0x00, 0x65, 0xE5, 0xB8, 0x00, 0x67, 0x80, 0x00, 0x61, + 0x00, 0x00, 0x6C, 0x20, 0xA7, 0x6F, 0x00, 0x8C, 0x48, 0x00, 0x66, 0xF4, + 0x00, 0x8E, 0xCA, 0x00, 0x8C, 0xC8, 0x00, 0x6E, 0xD1, 0x00, 0x4E, 0x32, + 0x00, 0x53, 0xE5, 0x00, 0x9F, 0x9C, 0x00, 0x9F, 0x9C, 0x00, 0x59, 0x51, + 0x00, 0x91, 0xD1, 0x00, 0x55, 0x87, 0x00, 0x59, 0x48, 0x00, 0x61, 0xF6, + 0x00, 0x76, 0x69, 0x00, 0x7F, 0x85, 0x00, 0x86, 0x3F, 0x00, 0x87, 0xBA, + 0x00, 0x88, 0xF8, 0x00, 0x90, 0x8F, 0x00, 0x6A, 0x02, 0x00, 0x6D, 0x1B, + 0x00, 0x70, 0xD9, 0x00, 0x73, 0xDE, 0x00, 0x84, 0x3D, 0x00, 0x91, 0x6A, + 0x00, 0x99, 0xF1, 0x00, 0x4E, 0x82, 0x00, 0x53, 0x75, 0x00, 0x6B, 0x04, + 0x00, 0x72, 0x1B, 0x00, 0x86, 0x2D, 0x00, 0x9E, 0x1E, 0x00, 0x5D, 0x50, + 0x00, 0x6F, 0xEB, 0x00, 0x85, 0xCD, 0x00, 0x89, 0x64, 0x00, 0x62, 0xC9, + 0x00, 0x81, 0xD8, 0x00, 0x88, 0x1F, 0x00, 0x5E, 0xCA, 0x00, 0x67, 0x17, + 0x00, 0x6D, 0x6A, 0x00, 0x72, 0xFC, 0x00, 0x90, 0xCE, 0x00, 0x4F, 0x86, + 0x00, 0x51, 0xB7, 0x00, 0x52, 0xDE, 0x00, 0x64, 0xC4, 0x00, 0x6A, 0xD3, + 0x00, 0x72, 0x10, 0x00, 0x76, 0xE7, 0x00, 0x80, 0x01, 0x00, 0x86, 0x06, + 0x00, 0x86, 0x5C, 0x00, 0x8D, 0xEF, 0x00, 0x97, 0x32, 0x00, 0x9B, 0x6F, + 0x00, 0x9D, 0xFA, 0x00, 0x78, 0x8C, 0x00, 0x79, 0x7F, 0x00, 0x7D, 0xA0, + 0x00, 0x83, 0xC9, 0x00, 0x93, 0x04, 0x00, 0x9E, 0x7F, 0x00, 0x8A, 0xD6, + 0x00, 0x58, 0xDF, 0x00, 0x5F, 0x04, 0x00, 0x7C, 0x60, 0x00, 0x80, 0x7E, + 0x00, 0x72, 0x62, 0x00, 0x78, 0xCA, 0x00, 0x8C, 0xC2, 0x00, 0x96, 0xF7, + 0x00, 0x58, 0xD8, 0x00, 0x5C, 0x62, 0x00, 0x6A, 0x13, 0x00, 0x6D, 0xDA, + 0x00, 0x6F, 0x0F, 0x00, 0x7D, 0x2F, 0x00, 0x7E, 0x37, 0x00, 0x96, 0x4B, + 0x00, 0x52, 0xD2, 0x00, 0x80, 0x8B, 0x00, 0x51, 0xDC, 0x00, 0x51, 0xCC, + 0x00, 0x7A, 0x1C, 0x00, 0x7D, 0xBE, 0x00, 0x83, 0xF1, 0x00, 0x96, 0x75, + 0x00, 0x8B, 0x80, 0x00, 0x62, 0xCF, 0x00, 0x6A, 0x02, 0x00, 0x8A, 0xFE, + 0x00, 0x4E, 0x39, 0x00, 0x5B, 0xE7, 0x00, 0x60, 0x12, 0x00, 0x73, 0x87, + 0x00, 0x75, 0x70, 0x00, 0x53, 0x17, 0x00, 0x78, 0xFB, 0x00, 0x4F, 0xBF, + 0x00, 0x5F, 0xA9, 0x00, 0x4E, 0x0D, 0x00, 0x6C, 0xCC, 0x00, 0x65, 0x78, + 0x00, 0x7D, 0x22, 0x00, 0x53, 0xC3, 0x00, 0x58, 0x5E, 0x00, 0x77, 0x01, + 0x00, 0x84, 0x49, 0x00, 0x8A, 0xAA, 0x00, 0x6B, 0xBA, 0x00, 0x8F, 0xB0, + 0x00, 0x6C, 0x88, 0x00, 0x62, 0xFE, 0x00, 0x82, 0xE5, 0x00, 0x63, 0xA0, + 0x00, 0x75, 0x65, 0x00, 0x4E, 0xAE, 0x00, 0x51, 0x69, 0x00, 0x51, 0xC9, + 0x00, 0x68, 0x81, 0x00, 0x7C, 0xE7, 0x00, 0x82, 0x6F, 0x00, 0x8A, 0xD2, + 0x00, 0x91, 0xCF, 0x00, 0x52, 0xF5, 0x00, 0x54, 0x42, 0x00, 0x59, 0x73, + 0x00, 0x5E, 0xEC, 0x00, 0x65, 0xC5, 0x00, 0x6F, 0xFE, 0x00, 0x79, 0x2A, + 0x00, 0x95, 0xAD, 0x00, 0x9A, 0x6A, 0x00, 0x9E, 0x97, 0x00, 0x9E, 0xCE, + 0x00, 0x52, 0x9B, 0x00, 0x66, 0xC6, 0x00, 0x6B, 0x77, 0x00, 0x8F, 0x62, + 0x00, 0x5E, 0x74, 0x00, 0x61, 0x90, 0x00, 0x62, 0x00, 0x00, 0x64, 0x9A, + 0x00, 0x6F, 0x23, 0x00, 0x71, 0x49, 0x00, 0x74, 0x89, 0x00, 0x79, 0xCA, + 0x00, 0x7D, 0xF4, 0x00, 0x80, 0x6F, 0x00, 0x8F, 0x26, 0x00, 0x84, 0xEE, + 0x00, 0x90, 0x23, 0x00, 0x93, 0x4A, 0x00, 0x52, 0x17, 0x00, 0x52, 0xA3, + 0x00, 0x54, 0xBD, 0x00, 0x70, 0xC8, 0x00, 0x88, 0xC2, 0x00, 0x8A, 0xAA, + 0x00, 0x5E, 0xC9, 0x00, 0x5F, 0xF5, 0x00, 0x63, 0x7B, 0x00, 0x6B, 0xAE, + 0x00, 0x7C, 0x3E, 0x00, 0x73, 0x75, 0x00, 0x4E, 0xE4, 0x00, 0x56, 0xF9, + 0x00, 0x5B, 0xE7, 0x00, 0x5D, 0xBA, 0x00, 0x60, 0x1C, 0x00, 0x73, 0xB2, + 0x00, 0x74, 0x69, 0x00, 0x7F, 0x9A, 0x00, 0x80, 0x46, 0x00, 0x92, 0x34, + 0x00, 0x96, 0xF6, 0x00, 0x97, 0x48, 0x00, 0x98, 0x18, 0x00, 0x4F, 0x8B, + 0x00, 0x79, 0xAE, 0x00, 0x91, 0xB4, 0x00, 0x96, 0xB8, 0x00, 0x60, 0xE1, + 0x00, 0x4E, 0x86, 0x00, 0x50, 0xDA, 0x00, 0x5B, 0xEE, 0x00, 0x5C, 0x3F, + 0x00, 0x65, 0x99, 0x00, 0x6A, 0x02, 0x00, 0x71, 0xCE, 0x00, 0x76, 0x42, + 0x00, 0x84, 0xFC, 0x00, 0x90, 0x7C, 0x00, 0x9F, 0x8D, 0x00, 0x66, 0x88, + 0x00, 0x96, 0x2E, 0x00, 0x52, 0x89, 0x00, 0x67, 0x7B, 0x00, 0x67, 0xF3, + 0x00, 0x6D, 0x41, 0x00, 0x6E, 0x9C, 0x00, 0x74, 0x09, 0x00, 0x75, 0x59, + 0x00, 0x78, 0x6B, 0x00, 0x7D, 0x10, 0x00, 0x98, 0x5E, 0x00, 0x51, 0x6D, + 0x00, 0x62, 0x2E, 0x00, 0x96, 0x78, 0x00, 0x50, 0x2B, 0x00, 0x5D, 0x19, + 0x00, 0x6D, 0xEA, 0x00, 0x8F, 0x2A, 0x00, 0x5F, 0x8B, 0x00, 0x61, 0x44, + 0x00, 0x68, 0x17, 0x00, 0x73, 0x87, 0x00, 0x96, 0x86, 0x00, 0x52, 0x29, + 0x00, 0x54, 0x0F, 0x00, 0x5C, 0x65, 0x00, 0x66, 0x13, 0x00, 0x67, 0x4E, + 0x00, 0x68, 0xA8, 0x00, 0x6C, 0xE5, 0x00, 0x74, 0x06, 0x00, 0x75, 0xE2, + 0x00, 0x7F, 0x79, 0x00, 0x88, 0xCF, 0x00, 0x88, 0xE1, 0x00, 0x91, 0xCC, + 0x00, 0x96, 0xE2, 0x00, 0x53, 0x3F, 0x00, 0x6E, 0xBA, 0x00, 0x54, 0x1D, + 0x00, 0x71, 0xD0, 0x00, 0x74, 0x98, 0x00, 0x85, 0xFA, 0x00, 0x96, 0xA3, + 0x00, 0x9C, 0x57, 0x00, 0x9E, 0x9F, 0x00, 0x67, 0x97, 0x00, 0x6D, 0xCB, + 0x00, 0x81, 0xE8, 0x00, 0x7A, 0xCB, 0x00, 0x7B, 0x20, 0x00, 0x7C, 0x92, + 0x00, 0x72, 0xC0, 0x00, 0x70, 0x99, 0x00, 0x8B, 0x58, 0x00, 0x4E, 0xC0, + 0x00, 0x83, 0x36, 0x00, 0x52, 0x3A, 0x00, 0x52, 0x07, 0x00, 0x5E, 0xA6, + 0x00, 0x62, 0xD3, 0x00, 0x7C, 0xD6, 0x00, 0x5B, 0x85, 0x00, 0x6D, 0x1E, + 0x00, 0x66, 0xB4, 0x00, 0x8F, 0x3B, 0x00, 0x88, 0x4C, 0x00, 0x96, 0x4D, + 0x00, 0x89, 0x8B, 0x00, 0x5E, 0xD3, 0x00, 0x51, 0x40, 0x00, 0x55, 0xC0, + 0x00, 0x58, 0x5A, 0x00, 0x66, 0x74, 0x00, 0x51, 0xDE, 0x00, 0x73, 0x2A, + 0x00, 0x76, 0xCA, 0x00, 0x79, 0x3C, 0x00, 0x79, 0x5E, 0x00, 0x79, 0x65, + 0x00, 0x79, 0x8F, 0x00, 0x97, 0x56, 0x00, 0x7C, 0xBE, 0x00, 0x7F, 0xBD, + 0x00, 0x86, 0x12, 0x00, 0x8A, 0xF8, 0x00, 0x90, 0x38, 0x00, 0x90, 0xFD, + 0x00, 0x98, 0xEF, 0x00, 0x98, 0xFC, 0x00, 0x99, 0x28, 0x00, 0x9D, 0xB4, + 0x00, 0x4F, 0xAE, 0x00, 0x50, 0xE7, 0x00, 0x51, 0x4D, 0x00, 0x52, 0xC9, + 0x00, 0x52, 0xE4, 0x00, 0x53, 0x51, 0x00, 0x55, 0x9D, 0x00, 0x56, 0x06, + 0x00, 0x56, 0x68, 0x00, 0x58, 0x40, 0x00, 0x58, 0xA8, 0x00, 0x5C, 0x64, + 0x00, 0x5C, 0x6E, 0x00, 0x60, 0x94, 0x00, 0x61, 0x68, 0x00, 0x61, 0x8E, + 0x00, 0x61, 0xF2, 0x00, 0x65, 0x4F, 0x00, 0x65, 0xE2, 0x00, 0x66, 0x91, + 0x00, 0x68, 0x85, 0x00, 0x6D, 0x77, 0x00, 0x6E, 0x1A, 0x00, 0x6F, 0x22, + 0x00, 0x71, 0x6E, 0x00, 0x72, 0x2B, 0x00, 0x74, 0x22, 0x00, 0x78, 0x91, + 0x00, 0x79, 0x3E, 0x00, 0x79, 0x49, 0x00, 0x79, 0x48, 0x00, 0x79, 0x50, + 0x00, 0x79, 0x56, 0x00, 0x79, 0x5D, 0x00, 0x79, 0x8D, 0x00, 0x79, 0x8E, + 0x00, 0x7A, 0x40, 0x00, 0x7A, 0x81, 0x00, 0x7B, 0xC0, 0x00, 0x7D, 0xF4, + 0x00, 0x7E, 0x09, 0x00, 0x7E, 0x41, 0x00, 0x7F, 0x72, 0x00, 0x80, 0x05, + 0x00, 0x81, 0xED, 0x00, 0x82, 0x79, 0x00, 0x82, 0x79, 0x00, 0x84, 0x57, + 0x00, 0x89, 0x10, 0x00, 0x89, 0x96, 0x00, 0x8B, 0x01, 0x00, 0x8B, 0x39, + 0x00, 0x8C, 0xD3, 0x00, 0x8D, 0x08, 0x00, 0x8F, 0xB6, 0x00, 0x90, 0x38, + 0x00, 0x96, 0xE3, 0x00, 0x97, 0xFF, 0x00, 0x98, 0x3B, 0x00, 0x4E, 0x26, + 0x00, 0x51, 0xB5, 0x00, 0x51, 0x68, 0x00, 0x4F, 0x80, 0x00, 0x51, 0x45, + 0x00, 0x51, 0x80, 0x00, 0x52, 0xC7, 0x00, 0x52, 0xFA, 0x00, 0x55, 0x9D, + 0x00, 0x55, 0x55, 0x00, 0x55, 0x99, 0x00, 0x55, 0xE2, 0x00, 0x58, 0x5A, + 0x00, 0x58, 0xB3, 0x00, 0x59, 0x44, 0x00, 0x59, 0x54, 0x00, 0x5A, 0x62, + 0x00, 0x5B, 0x28, 0x00, 0x5E, 0xD2, 0x00, 0x5E, 0xD9, 0x00, 0x5F, 0x69, + 0x00, 0x5F, 0xAD, 0x00, 0x60, 0xD8, 0x00, 0x61, 0x4E, 0x00, 0x61, 0x08, + 0x00, 0x61, 0x8E, 0x00, 0x61, 0x60, 0x00, 0x61, 0xF2, 0x00, 0x62, 0x34, + 0x00, 0x63, 0xC4, 0x00, 0x64, 0x1C, 0x00, 0x64, 0x52, 0x00, 0x65, 0x56, + 0x00, 0x66, 0x74, 0x00, 0x67, 0x17, 0x00, 0x67, 0x1B, 0x00, 0x67, 0x56, + 0x00, 0x6B, 0x79, 0x00, 0x6B, 0xBA, 0x00, 0x6D, 0x41, 0x00, 0x6E, 0xDB, + 0x00, 0x6E, 0xCB, 0x00, 0x6F, 0x22, 0x00, 0x70, 0x1E, 0x00, 0x71, 0x6E, + 0x00, 0x77, 0xA7, 0x00, 0x72, 0x35, 0x00, 0x72, 0xAF, 0x00, 0x73, 0x2A, + 0x00, 0x74, 0x71, 0x00, 0x75, 0x06, 0x00, 0x75, 0x3B, 0x00, 0x76, 0x1D, + 0x00, 0x76, 0x1F, 0x00, 0x76, 0xCA, 0x00, 0x76, 0xDB, 0x00, 0x76, 0xF4, + 0x00, 0x77, 0x4A, 0x00, 0x77, 0x40, 0x00, 0x78, 0xCC, 0x00, 0x7A, 0xB1, + 0x00, 0x7B, 0xC0, 0x00, 0x7C, 0x7B, 0x00, 0x7D, 0x5B, 0x00, 0x7D, 0xF4, + 0x00, 0x7F, 0x3E, 0x00, 0x80, 0x05, 0x00, 0x83, 0x52, 0x00, 0x83, 0xEF, + 0x00, 0x87, 0x79, 0x00, 0x89, 0x41, 0x00, 0x89, 0x86, 0x00, 0x89, 0x96, + 0x00, 0x8A, 0xBF, 0x00, 0x8A, 0xF8, 0x00, 0x8A, 0xCB, 0x00, 0x8B, 0x01, + 0x00, 0x8A, 0xFE, 0x00, 0x8A, 0xED, 0x00, 0x8B, 0x39, 0x00, 0x8B, 0x8A, + 0x00, 0x8D, 0x08, 0x00, 0x8F, 0x38, 0x00, 0x90, 0x72, 0x00, 0x91, 0x99, + 0x00, 0x92, 0x76, 0x00, 0x96, 0x7C, 0x00, 0x96, 0xE3, 0x00, 0x97, 0x56, + 0x00, 0x97, 0xDB, 0x00, 0x97, 0xFF, 0x00, 0x98, 0x0B, 0x00, 0x98, 0x3B, + 0x00, 0x9B, 0x12, 0x00, 0x9F, 0x9C, 0x02, 0x28, 0x4A, 0x02, 0x28, 0x44, + 0x02, 0x33, 0xD5, 0x00, 0x3B, 0x9D, 0x00, 0x40, 0x18, 0x00, 0x40, 0x39, + 0x02, 0x52, 0x49, 0x02, 0x5C, 0xD0, 0x02, 0x7E, 0xD3, 0x00, 0x9F, 0x43, + 0x00, 0x9F, 0x8E, 0xC0, 0x00, 0x66, 0x00, 0x00, 0x66, 0xC0, 0x00, 0x66, + 0x00, 0x00, 0x69, 0xC0, 0x00, 0x66, 0x00, 0x00, 0x6C, 0xC0, 0x00, 0x66, + 0x80, 0x00, 0x66, 0x00, 0x00, 0x69, 0xC0, 0x00, 0x66, 0x80, 0x00, 0x66, + 0x00, 0x00, 0x6C, 0xC0, 0x01, 0x7F, 0x00, 0x00, 0x74, 0xC0, 0x00, 0x73, + 0x00, 0x00, 0x74, 0xC0, 0x05, 0x74, 0x00, 0x05, 0x76, 0xC0, 0x05, 0x74, + 0x00, 0x05, 0x65, 0xC0, 0x05, 0x74, 0x00, 0x05, 0x6B, 0xC0, 0x05, 0x7E, + 0x00, 0x05, 0x76, 0xC0, 0x05, 0x74, 0x00, 0x05, 0x6D, 0x80, 0x05, 0xD9, + 0x00, 0x05, 0xB4, 0x80, 0x05, 0xF2, 0x00, 0x05, 0xB7, 0x04, 0x05, 0xE2, + 0x04, 0x05, 0xD0, 0x04, 0x05, 0xD3, 0x04, 0x05, 0xD4, 0x04, 0x05, 0xDB, + 0x04, 0x05, 0xDC, 0x04, 0x05, 0xDD, 0x04, 0x05, 0xE8, 0x04, 0x05, 0xEA, + 0x04, 0x00, 0x2B, 0x80, 0x05, 0xE9, 0x00, 0x05, 0xC1, 0x80, 0x05, 0xE9, + 0x00, 0x05, 0xC2, 0x80, 0xFB, 0x49, 0x00, 0x05, 0xC1, 0x80, 0xFB, 0x49, + 0x00, 0x05, 0xC2, 0x80, 0x05, 0xD0, 0x00, 0x05, 0xB7, 0x80, 0x05, 0xD0, + 0x00, 0x05, 0xB8, 0x80, 0x05, 0xD0, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD1, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD2, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD3, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD4, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD5, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD6, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD8, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD9, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDA, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDB, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDC, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xDE, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE0, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE1, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE3, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE4, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE6, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE7, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE8, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xE9, 0x00, 0x05, 0xBC, 0x80, 0x05, 0xEA, + 0x00, 0x05, 0xBC, 0x80, 0x05, 0xD5, 0x00, 0x05, 0xB9, 0x80, 0x05, 0xD1, + 0x00, 0x05, 0xBF, 0x80, 0x05, 0xDB, 0x00, 0x05, 0xBF, 0x80, 0x05, 0xE4, + 0x00, 0x05, 0xBF, 0xC0, 0x05, 0xD0, 0x00, 0x05, 0xDC, 0x18, 0x06, 0x71, + 0x14, 0x06, 0x71, 0x18, 0x06, 0x7B, 0x14, 0x06, 0x7B, 0x0C, 0x06, 0x7B, + 0x10, 0x06, 0x7B, 0x18, 0x06, 0x7E, 0x14, 0x06, 0x7E, 0x0C, 0x06, 0x7E, + 0x10, 0x06, 0x7E, 0x18, 0x06, 0x80, 0x14, 0x06, 0x80, 0x0C, 0x06, 0x80, + 0x10, 0x06, 0x80, 0x18, 0x06, 0x7A, 0x14, 0x06, 0x7A, 0x0C, 0x06, 0x7A, + 0x10, 0x06, 0x7A, 0x18, 0x06, 0x7F, 0x14, 0x06, 0x7F, 0x0C, 0x06, 0x7F, + 0x10, 0x06, 0x7F, 0x18, 0x06, 0x79, 0x14, 0x06, 0x79, 0x0C, 0x06, 0x79, + 0x10, 0x06, 0x79, 0x18, 0x06, 0xA4, 0x14, 0x06, 0xA4, 0x0C, 0x06, 0xA4, + 0x10, 0x06, 0xA4, 0x18, 0x06, 0xA6, 0x14, 0x06, 0xA6, 0x0C, 0x06, 0xA6, + 0x10, 0x06, 0xA6, 0x18, 0x06, 0x84, 0x14, 0x06, 0x84, 0x0C, 0x06, 0x84, + 0x10, 0x06, 0x84, 0x18, 0x06, 0x83, 0x14, 0x06, 0x83, 0x0C, 0x06, 0x83, + 0x10, 0x06, 0x83, 0x18, 0x06, 0x86, 0x14, 0x06, 0x86, 0x0C, 0x06, 0x86, + 0x10, 0x06, 0x86, 0x18, 0x06, 0x87, 0x14, 0x06, 0x87, 0x0C, 0x06, 0x87, + 0x10, 0x06, 0x87, 0x18, 0x06, 0x8D, 0x14, 0x06, 0x8D, 0x18, 0x06, 0x8C, + 0x14, 0x06, 0x8C, 0x18, 0x06, 0x8E, 0x14, 0x06, 0x8E, 0x18, 0x06, 0x88, + 0x14, 0x06, 0x88, 0x18, 0x06, 0x98, 0x14, 0x06, 0x98, 0x18, 0x06, 0x91, + 0x14, 0x06, 0x91, 0x18, 0x06, 0xA9, 0x14, 0x06, 0xA9, 0x0C, 0x06, 0xA9, + 0x10, 0x06, 0xA9, 0x18, 0x06, 0xAF, 0x14, 0x06, 0xAF, 0x0C, 0x06, 0xAF, + 0x10, 0x06, 0xAF, 0x18, 0x06, 0xB3, 0x14, 0x06, 0xB3, 0x0C, 0x06, 0xB3, + 0x10, 0x06, 0xB3, 0x18, 0x06, 0xB1, 0x14, 0x06, 0xB1, 0x0C, 0x06, 0xB1, + 0x10, 0x06, 0xB1, 0x18, 0x06, 0xBA, 0x14, 0x06, 0xBA, 0x18, 0x06, 0xBB, + 0x14, 0x06, 0xBB, 0x0C, 0x06, 0xBB, 0x10, 0x06, 0xBB, 0x18, 0x06, 0xC0, + 0x14, 0x06, 0xC0, 0x18, 0x06, 0xC1, 0x14, 0x06, 0xC1, 0x0C, 0x06, 0xC1, + 0x10, 0x06, 0xC1, 0x18, 0x06, 0xBE, 0x14, 0x06, 0xBE, 0x0C, 0x06, 0xBE, + 0x10, 0x06, 0xBE, 0x18, 0x06, 0xD2, 0x14, 0x06, 0xD2, 0x18, 0x06, 0xD3, + 0x14, 0x06, 0xD3, 0x18, 0x06, 0xAD, 0x14, 0x06, 0xAD, 0x0C, 0x06, 0xAD, + 0x10, 0x06, 0xAD, 0x18, 0x06, 0xC7, 0x14, 0x06, 0xC7, 0x18, 0x06, 0xC6, + 0x14, 0x06, 0xC6, 0x18, 0x06, 0xC8, 0x14, 0x06, 0xC8, 0x18, 0x06, 0x77, + 0x18, 0x06, 0xCB, 0x14, 0x06, 0xCB, 0x18, 0x06, 0xC5, 0x14, 0x06, 0xC5, + 0x18, 0x06, 0xC9, 0x14, 0x06, 0xC9, 0x18, 0x06, 0xD0, 0x14, 0x06, 0xD0, + 0x0C, 0x06, 0xD0, 0x10, 0x06, 0xD0, 0x0C, 0x06, 0x49, 0x10, 0x06, 0x49, + 0x98, 0x06, 0x26, 0x00, 0x06, 0x27, 0x94, 0x06, 0x26, 0x00, 0x06, 0x27, + 0x98, 0x06, 0x26, 0x00, 0x06, 0xD5, 0x94, 0x06, 0x26, 0x00, 0x06, 0xD5, + 0x98, 0x06, 0x26, 0x00, 0x06, 0x48, 0x94, 0x06, 0x26, 0x00, 0x06, 0x48, + 0x98, 0x06, 0x26, 0x00, 0x06, 0xC7, 0x94, 0x06, 0x26, 0x00, 0x06, 0xC7, + 0x98, 0x06, 0x26, 0x00, 0x06, 0xC6, 0x94, 0x06, 0x26, 0x00, 0x06, 0xC6, + 0x98, 0x06, 0x26, 0x00, 0x06, 0xC8, 0x94, 0x06, 0x26, 0x00, 0x06, 0xC8, + 0x98, 0x06, 0x26, 0x00, 0x06, 0xD0, 0x94, 0x06, 0x26, 0x00, 0x06, 0xD0, + 0x8C, 0x06, 0x26, 0x00, 0x06, 0xD0, 0x98, 0x06, 0x26, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x26, 0x00, 0x06, 0x49, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x49, + 0x18, 0x06, 0xCC, 0x14, 0x06, 0xCC, 0x0C, 0x06, 0xCC, 0x10, 0x06, 0xCC, + 0x98, 0x06, 0x26, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x26, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x26, 0x00, 0x06, 0x45, 0x98, 0x06, 0x26, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x26, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x28, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x28, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x28, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x28, 0x00, 0x06, 0x45, 0x98, 0x06, 0x28, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x28, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x2A, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2A, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x2A, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2B, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x2B, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2B, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x2B, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2C, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2D, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x2E, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x45, + 0x98, 0x06, 0x33, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x33, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x33, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x33, 0x00, 0x06, 0x45, + 0x98, 0x06, 0x35, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x35, 0x00, 0x06, 0x45, + 0x98, 0x06, 0x36, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x36, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x36, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x36, 0x00, 0x06, 0x45, + 0x98, 0x06, 0x37, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x37, 0x00, 0x06, 0x45, + 0x98, 0x06, 0x38, 0x00, 0x06, 0x45, 0x98, 0x06, 0x39, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x39, 0x00, 0x06, 0x45, 0x98, 0x06, 0x3A, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x3A, 0x00, 0x06, 0x45, 0x98, 0x06, 0x41, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x41, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x41, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x41, 0x00, 0x06, 0x45, 0x98, 0x06, 0x41, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x41, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x42, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x42, 0x00, 0x06, 0x45, 0x98, 0x06, 0x42, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x42, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x43, 0x00, 0x06, 0x27, + 0x98, 0x06, 0x43, 0x00, 0x06, 0x2C, 0x98, 0x06, 0x43, 0x00, 0x06, 0x2D, + 0x98, 0x06, 0x43, 0x00, 0x06, 0x2E, 0x98, 0x06, 0x43, 0x00, 0x06, 0x44, + 0x98, 0x06, 0x43, 0x00, 0x06, 0x45, 0x98, 0x06, 0x43, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x43, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x44, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x44, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x44, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x44, 0x00, 0x06, 0x45, 0x98, 0x06, 0x44, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x44, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x45, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x45, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x45, 0x00, 0x06, 0x45, 0x98, 0x06, 0x45, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x46, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x46, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x46, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x46, 0x00, 0x06, 0x45, 0x98, 0x06, 0x46, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x46, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x47, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x47, 0x00, 0x06, 0x45, 0x98, 0x06, 0x47, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x47, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2C, + 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x2E, + 0x98, 0x06, 0x4A, 0x00, 0x06, 0x45, 0x98, 0x06, 0x4A, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x4A, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x30, 0x00, 0x06, 0x70, + 0x98, 0x06, 0x31, 0x00, 0x06, 0x70, 0x98, 0x06, 0x49, 0x00, 0x06, 0x70, + 0x98, 0x00, 0x20, 0x80, 0x06, 0x4C, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, + 0x80, 0x06, 0x4D, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x4E, + 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, 0x80, 0x06, 0x4F, 0x00, 0x06, 0x51, + 0x98, 0x00, 0x20, 0x80, 0x06, 0x50, 0x00, 0x06, 0x51, 0x98, 0x00, 0x20, + 0x80, 0x06, 0x51, 0x00, 0x06, 0x70, 0x94, 0x06, 0x26, 0x00, 0x06, 0x31, + 0x94, 0x06, 0x26, 0x00, 0x06, 0x32, 0x94, 0x06, 0x26, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x26, 0x00, 0x06, 0x46, 0x94, 0x06, 0x26, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x26, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x28, 0x00, 0x06, 0x31, + 0x94, 0x06, 0x28, 0x00, 0x06, 0x32, 0x94, 0x06, 0x28, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x28, 0x00, 0x06, 0x46, 0x94, 0x06, 0x28, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x28, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x31, + 0x94, 0x06, 0x2A, 0x00, 0x06, 0x32, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x2A, 0x00, 0x06, 0x46, 0x94, 0x06, 0x2A, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x2A, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x31, + 0x94, 0x06, 0x2B, 0x00, 0x06, 0x32, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x2B, 0x00, 0x06, 0x46, 0x94, 0x06, 0x2B, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x2B, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x41, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x41, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x42, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x42, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x43, 0x00, 0x06, 0x27, + 0x94, 0x06, 0x43, 0x00, 0x06, 0x44, 0x94, 0x06, 0x43, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x43, 0x00, 0x06, 0x49, 0x94, 0x06, 0x43, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x44, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x44, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x45, 0x00, 0x06, 0x27, + 0x94, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x00, 0x06, 0x31, + 0x94, 0x06, 0x46, 0x00, 0x06, 0x32, 0x94, 0x06, 0x46, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x46, 0x00, 0x06, 0x46, 0x94, 0x06, 0x46, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x46, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x49, 0x00, 0x06, 0x70, + 0x94, 0x06, 0x4A, 0x00, 0x06, 0x31, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x32, + 0x94, 0x06, 0x4A, 0x00, 0x06, 0x45, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x46, + 0x94, 0x06, 0x4A, 0x00, 0x06, 0x49, 0x94, 0x06, 0x4A, 0x00, 0x06, 0x4A, + 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x26, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x26, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x26, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x28, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x28, 0x00, 0x06, 0x47, + 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x2A, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x2B, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x2C, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2D, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x2E, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2E, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x33, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x33, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x35, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x35, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x35, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x36, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x36, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x37, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x38, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x39, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x39, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x3A, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x3A, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x41, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x41, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x42, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x42, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x43, 0x00, 0x06, 0x44, 0x8C, 0x06, 0x43, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x44, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x44, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x44, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x45, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x46, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, 0x00, 0x06, 0x47, + 0x8C, 0x06, 0x47, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x47, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x47, 0x00, 0x06, 0x70, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x4A, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x26, 0x00, 0x06, 0x45, 0x90, 0x06, 0x26, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x28, 0x00, 0x06, 0x45, 0x90, 0x06, 0x28, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x2A, 0x00, 0x06, 0x45, 0x90, 0x06, 0x2A, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x2B, 0x00, 0x06, 0x45, 0x90, 0x06, 0x2B, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x33, 0x00, 0x06, 0x45, 0x90, 0x06, 0x33, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x34, 0x00, 0x06, 0x45, 0x90, 0x06, 0x34, 0x00, 0x06, 0x47, + 0x90, 0x06, 0x43, 0x00, 0x06, 0x44, 0x90, 0x06, 0x43, 0x00, 0x06, 0x45, + 0x90, 0x06, 0x44, 0x00, 0x06, 0x45, 0x90, 0x06, 0x46, 0x00, 0x06, 0x45, + 0x90, 0x06, 0x46, 0x00, 0x06, 0x47, 0x90, 0x06, 0x4A, 0x00, 0x06, 0x45, + 0x90, 0x06, 0x4A, 0x00, 0x06, 0x47, 0x90, 0x06, 0x40, 0x80, 0x06, 0x4E, + 0x00, 0x06, 0x51, 0x90, 0x06, 0x40, 0x80, 0x06, 0x4F, 0x00, 0x06, 0x51, + 0x90, 0x06, 0x40, 0x80, 0x06, 0x50, 0x00, 0x06, 0x51, 0x98, 0x06, 0x37, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x37, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x39, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x39, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x3A, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x3A, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x33, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x33, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x34, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x34, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2D, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2C, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x2E, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x35, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x35, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x36, + 0x00, 0x06, 0x49, 0x98, 0x06, 0x36, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x34, + 0x00, 0x06, 0x2C, 0x98, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x98, 0x06, 0x34, + 0x00, 0x06, 0x2E, 0x98, 0x06, 0x34, 0x00, 0x06, 0x45, 0x98, 0x06, 0x34, + 0x00, 0x06, 0x31, 0x98, 0x06, 0x33, 0x00, 0x06, 0x31, 0x98, 0x06, 0x35, + 0x00, 0x06, 0x31, 0x98, 0x06, 0x36, 0x00, 0x06, 0x31, 0x94, 0x06, 0x37, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x37, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x39, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x39, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x3A, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x3A, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x33, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x33, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x34, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2D, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2C, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2E, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x2E, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x35, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x35, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x36, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x36, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, + 0x00, 0x06, 0x2C, 0x94, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x34, + 0x00, 0x06, 0x2E, 0x94, 0x06, 0x34, 0x00, 0x06, 0x45, 0x94, 0x06, 0x34, + 0x00, 0x06, 0x31, 0x94, 0x06, 0x33, 0x00, 0x06, 0x31, 0x94, 0x06, 0x35, + 0x00, 0x06, 0x31, 0x94, 0x06, 0x36, 0x00, 0x06, 0x31, 0x8C, 0x06, 0x34, + 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x34, + 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x33, + 0x00, 0x06, 0x47, 0x8C, 0x06, 0x34, 0x00, 0x06, 0x47, 0x8C, 0x06, 0x37, + 0x00, 0x06, 0x45, 0x90, 0x06, 0x33, 0x00, 0x06, 0x2C, 0x90, 0x06, 0x33, + 0x00, 0x06, 0x2D, 0x90, 0x06, 0x33, 0x00, 0x06, 0x2E, 0x90, 0x06, 0x34, + 0x00, 0x06, 0x2C, 0x90, 0x06, 0x34, 0x00, 0x06, 0x2D, 0x90, 0x06, 0x34, + 0x00, 0x06, 0x2E, 0x90, 0x06, 0x37, 0x00, 0x06, 0x45, 0x90, 0x06, 0x38, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x27, 0x00, 0x06, 0x4B, 0x98, 0x06, 0x27, + 0x00, 0x06, 0x4B, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, + 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x45, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x2A, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x2A, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x2E, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x2C, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x2D, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2D, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x49, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, + 0x8C, 0x06, 0x33, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x33, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x94, 0x06, 0x33, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x33, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x94, 0x06, 0x33, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x33, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x35, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x35, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x35, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x34, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x45, 0x8C, 0x06, 0x34, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x34, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x2E, 0x8C, 0x06, 0x34, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x2E, 0x94, 0x06, 0x34, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x34, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x36, + 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x94, 0x06, 0x36, 0x80, 0x06, 0x2E, + 0x00, 0x06, 0x45, 0x8C, 0x06, 0x36, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x37, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x37, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x37, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x37, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x39, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x39, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x3A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x3A, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x3A, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x41, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, + 0x8C, 0x06, 0x41, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x94, 0x06, 0x42, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x42, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x44, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, + 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2C, + 0x00, 0x06, 0x2C, 0x94, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2C, + 0x94, 0x06, 0x44, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x44, + 0x80, 0x06, 0x2E, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x45, + 0x80, 0x06, 0x2D, 0x00, 0x06, 0x45, 0x94, 0x06, 0x45, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, + 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x45, + 0x80, 0x06, 0x2E, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2E, + 0x00, 0x06, 0x45, 0x8C, 0x06, 0x45, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2E, + 0x8C, 0x06, 0x47, 0x80, 0x06, 0x45, 0x00, 0x06, 0x2C, 0x8C, 0x06, 0x47, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x46, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, + 0x00, 0x06, 0x49, 0x94, 0x06, 0x46, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x46, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x4A, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x4A, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x28, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2E, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x2A, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2A, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x49, + 0x94, 0x06, 0x2C, 0x80, 0x06, 0x45, 0x00, 0x06, 0x49, 0x94, 0x06, 0x33, + 0x80, 0x06, 0x2E, 0x00, 0x06, 0x49, 0x94, 0x06, 0x35, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x34, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x36, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x44, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x4A, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x4A, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x4A, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x45, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x42, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x46, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x42, + 0x80, 0x06, 0x45, 0x00, 0x06, 0x2D, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2D, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x39, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x43, 0x80, 0x06, 0x45, 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x46, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x2D, 0x94, 0x06, 0x45, 0x80, 0x06, 0x2E, + 0x00, 0x06, 0x4A, 0x8C, 0x06, 0x44, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, + 0x94, 0x06, 0x43, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x94, 0x06, 0x44, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, + 0x00, 0x06, 0x2D, 0x94, 0x06, 0x2C, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x2D, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x45, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x94, 0x06, 0x41, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x4A, 0x94, 0x06, 0x28, 0x80, 0x06, 0x2D, 0x00, 0x06, 0x4A, + 0x8C, 0x06, 0x43, 0x80, 0x06, 0x45, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x39, + 0x80, 0x06, 0x2C, 0x00, 0x06, 0x45, 0x8C, 0x06, 0x35, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x45, 0x94, 0x06, 0x33, 0x80, 0x06, 0x2E, 0x00, 0x06, 0x4A, + 0x94, 0x06, 0x46, 0x80, 0x06, 0x2C, 0x00, 0x06, 0x4A, 0x98, 0x06, 0x35, + 0x80, 0x06, 0x44, 0x00, 0x06, 0xD2, 0x98, 0x06, 0x42, 0x80, 0x06, 0x44, + 0x00, 0x06, 0xD2, 0x98, 0x06, 0x27, 0x80, 0x06, 0x44, 0x80, 0x06, 0x44, + 0x00, 0x06, 0x47, 0x98, 0x06, 0x27, 0x80, 0x06, 0x43, 0x80, 0x06, 0x28, + 0x00, 0x06, 0x31, 0x98, 0x06, 0x45, 0x80, 0x06, 0x2D, 0x80, 0x06, 0x45, + 0x00, 0x06, 0x2F, 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, 0x80, 0x06, 0x39, + 0x00, 0x06, 0x45, 0x98, 0x06, 0x31, 0x80, 0x06, 0x33, 0x80, 0x06, 0x48, + 0x00, 0x06, 0x44, 0x98, 0x06, 0x39, 0x80, 0x06, 0x44, 0x80, 0x06, 0x4A, + 0x00, 0x06, 0x47, 0x98, 0x06, 0x48, 0x80, 0x06, 0x33, 0x80, 0x06, 0x44, + 0x00, 0x06, 0x45, 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, 0x00, 0x06, 0x49, + 0x98, 0x06, 0x35, 0x80, 0x06, 0x44, 0x80, 0x06, 0x49, 0x80, 0x00, 0x20, + 0x80, 0x06, 0x27, 0x80, 0x06, 0x44, 0x80, 0x06, 0x44, 0x80, 0x06, 0x47, + 0x80, 0x00, 0x20, 0x80, 0x06, 0x39, 0x80, 0x06, 0x44, 0x80, 0x06, 0x4A, + 0x80, 0x06, 0x47, 0x80, 0x00, 0x20, 0x80, 0x06, 0x48, 0x80, 0x06, 0x33, + 0x80, 0x06, 0x44, 0x00, 0x06, 0x45, 0x98, 0x06, 0x2C, 0x80, 0x06, 0x44, + 0x80, 0x00, 0x20, 0x80, 0x06, 0x2C, 0x80, 0x06, 0x44, 0x80, 0x06, 0x27, + 0x80, 0x06, 0x44, 0x00, 0x06, 0x47, 0x98, 0x06, 0x31, 0x80, 0x06, 0xCC, + 0x80, 0x06, 0x27, 0x00, 0x06, 0x44, 0x28, 0x00, 0x2C, 0x28, 0x30, 0x01, + 0x28, 0x30, 0x02, 0x28, 0x00, 0x3A, 0x28, 0x00, 0x3B, 0x28, 0x00, 0x21, + 0x28, 0x00, 0x3F, 0x28, 0x30, 0x16, 0x28, 0x30, 0x17, 0x28, 0x20, 0x26, + 0x28, 0x20, 0x25, 0x28, 0x20, 0x14, 0x28, 0x20, 0x13, 0x28, 0x00, 0x5F, + 0x28, 0x00, 0x5F, 0x28, 0x00, 0x28, 0x28, 0x00, 0x29, 0x28, 0x00, 0x7B, + 0x28, 0x00, 0x7D, 0x28, 0x30, 0x14, 0x28, 0x30, 0x15, 0x28, 0x30, 0x10, + 0x28, 0x30, 0x11, 0x28, 0x30, 0x0A, 0x28, 0x30, 0x0B, 0x28, 0x30, 0x08, + 0x28, 0x30, 0x09, 0x28, 0x30, 0x0C, 0x28, 0x30, 0x0D, 0x28, 0x30, 0x0E, + 0x28, 0x30, 0x0F, 0x28, 0x00, 0x5B, 0x28, 0x00, 0x5D, 0x40, 0x20, 0x3E, + 0x40, 0x20, 0x3E, 0x40, 0x20, 0x3E, 0x40, 0x20, 0x3E, 0x40, 0x00, 0x5F, + 0x40, 0x00, 0x5F, 0x40, 0x00, 0x5F, 0x34, 0x00, 0x2C, 0x34, 0x30, 0x01, + 0x34, 0x00, 0x2E, 0x34, 0x00, 0x3B, 0x34, 0x00, 0x3A, 0x34, 0x00, 0x3F, + 0x34, 0x00, 0x21, 0x34, 0x20, 0x14, 0x34, 0x00, 0x28, 0x34, 0x00, 0x29, + 0x34, 0x00, 0x7B, 0x34, 0x00, 0x7D, 0x34, 0x30, 0x14, 0x34, 0x30, 0x15, + 0x34, 0x00, 0x23, 0x34, 0x00, 0x26, 0x34, 0x00, 0x2A, 0x34, 0x00, 0x2B, + 0x34, 0x00, 0x2D, 0x34, 0x00, 0x3C, 0x34, 0x00, 0x3E, 0x34, 0x00, 0x3D, + 0x34, 0x00, 0x5C, 0x34, 0x00, 0x24, 0x34, 0x00, 0x25, 0x34, 0x00, 0x40, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x4B, 0x90, 0x06, 0x40, 0x00, 0x06, 0x4B, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x4C, 0x98, 0x00, 0x20, 0x00, 0x06, 0x4D, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x4E, 0x90, 0x06, 0x40, 0x00, 0x06, 0x4E, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x4F, 0x90, 0x06, 0x40, 0x00, 0x06, 0x4F, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x50, 0x90, 0x06, 0x40, 0x00, 0x06, 0x50, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x51, 0x90, 0x06, 0x40, 0x00, 0x06, 0x51, + 0x98, 0x00, 0x20, 0x00, 0x06, 0x52, 0x90, 0x06, 0x40, 0x00, 0x06, 0x52, + 0x18, 0x06, 0x21, 0x18, 0x06, 0x22, 0x14, 0x06, 0x22, 0x18, 0x06, 0x23, + 0x14, 0x06, 0x23, 0x18, 0x06, 0x24, 0x14, 0x06, 0x24, 0x18, 0x06, 0x25, + 0x14, 0x06, 0x25, 0x18, 0x06, 0x26, 0x14, 0x06, 0x26, 0x0C, 0x06, 0x26, + 0x10, 0x06, 0x26, 0x18, 0x06, 0x27, 0x14, 0x06, 0x27, 0x18, 0x06, 0x28, + 0x14, 0x06, 0x28, 0x0C, 0x06, 0x28, 0x10, 0x06, 0x28, 0x18, 0x06, 0x29, + 0x14, 0x06, 0x29, 0x18, 0x06, 0x2A, 0x14, 0x06, 0x2A, 0x0C, 0x06, 0x2A, + 0x10, 0x06, 0x2A, 0x18, 0x06, 0x2B, 0x14, 0x06, 0x2B, 0x0C, 0x06, 0x2B, + 0x10, 0x06, 0x2B, 0x18, 0x06, 0x2C, 0x14, 0x06, 0x2C, 0x0C, 0x06, 0x2C, + 0x10, 0x06, 0x2C, 0x18, 0x06, 0x2D, 0x14, 0x06, 0x2D, 0x0C, 0x06, 0x2D, + 0x10, 0x06, 0x2D, 0x18, 0x06, 0x2E, 0x14, 0x06, 0x2E, 0x0C, 0x06, 0x2E, + 0x10, 0x06, 0x2E, 0x18, 0x06, 0x2F, 0x14, 0x06, 0x2F, 0x18, 0x06, 0x30, + 0x14, 0x06, 0x30, 0x18, 0x06, 0x31, 0x14, 0x06, 0x31, 0x18, 0x06, 0x32, + 0x14, 0x06, 0x32, 0x18, 0x06, 0x33, 0x14, 0x06, 0x33, 0x0C, 0x06, 0x33, + 0x10, 0x06, 0x33, 0x18, 0x06, 0x34, 0x14, 0x06, 0x34, 0x0C, 0x06, 0x34, + 0x10, 0x06, 0x34, 0x18, 0x06, 0x35, 0x14, 0x06, 0x35, 0x0C, 0x06, 0x35, + 0x10, 0x06, 0x35, 0x18, 0x06, 0x36, 0x14, 0x06, 0x36, 0x0C, 0x06, 0x36, + 0x10, 0x06, 0x36, 0x18, 0x06, 0x37, 0x14, 0x06, 0x37, 0x0C, 0x06, 0x37, + 0x10, 0x06, 0x37, 0x18, 0x06, 0x38, 0x14, 0x06, 0x38, 0x0C, 0x06, 0x38, + 0x10, 0x06, 0x38, 0x18, 0x06, 0x39, 0x14, 0x06, 0x39, 0x0C, 0x06, 0x39, + 0x10, 0x06, 0x39, 0x18, 0x06, 0x3A, 0x14, 0x06, 0x3A, 0x0C, 0x06, 0x3A, + 0x10, 0x06, 0x3A, 0x18, 0x06, 0x41, 0x14, 0x06, 0x41, 0x0C, 0x06, 0x41, + 0x10, 0x06, 0x41, 0x18, 0x06, 0x42, 0x14, 0x06, 0x42, 0x0C, 0x06, 0x42, + 0x10, 0x06, 0x42, 0x18, 0x06, 0x43, 0x14, 0x06, 0x43, 0x0C, 0x06, 0x43, + 0x10, 0x06, 0x43, 0x18, 0x06, 0x44, 0x14, 0x06, 0x44, 0x0C, 0x06, 0x44, + 0x10, 0x06, 0x44, 0x18, 0x06, 0x45, 0x14, 0x06, 0x45, 0x0C, 0x06, 0x45, + 0x10, 0x06, 0x45, 0x18, 0x06, 0x46, 0x14, 0x06, 0x46, 0x0C, 0x06, 0x46, + 0x10, 0x06, 0x46, 0x18, 0x06, 0x47, 0x14, 0x06, 0x47, 0x0C, 0x06, 0x47, + 0x10, 0x06, 0x47, 0x18, 0x06, 0x48, 0x14, 0x06, 0x48, 0x18, 0x06, 0x49, + 0x14, 0x06, 0x49, 0x18, 0x06, 0x4A, 0x14, 0x06, 0x4A, 0x0C, 0x06, 0x4A, + 0x10, 0x06, 0x4A, 0x98, 0x06, 0x44, 0x00, 0x06, 0x22, 0x94, 0x06, 0x44, + 0x00, 0x06, 0x22, 0x98, 0x06, 0x44, 0x00, 0x06, 0x23, 0x94, 0x06, 0x44, + 0x00, 0x06, 0x23, 0x98, 0x06, 0x44, 0x00, 0x06, 0x25, 0x94, 0x06, 0x44, + 0x00, 0x06, 0x25, 0x98, 0x06, 0x44, 0x00, 0x06, 0x27, 0x94, 0x06, 0x44, + 0x00, 0x06, 0x27, 0x2C, 0x00, 0x21, 0x2C, 0x00, 0x22, 0x2C, 0x00, 0x23, + 0x2C, 0x00, 0x24, 0x2C, 0x00, 0x25, 0x2C, 0x00, 0x26, 0x2C, 0x00, 0x27, + 0x2C, 0x00, 0x28, 0x2C, 0x00, 0x29, 0x2C, 0x00, 0x2A, 0x2C, 0x00, 0x2B, + 0x2C, 0x00, 0x2C, 0x2C, 0x00, 0x2D, 0x2C, 0x00, 0x2E, 0x2C, 0x00, 0x2F, + 0x2C, 0x00, 0x30, 0x2C, 0x00, 0x31, 0x2C, 0x00, 0x32, 0x2C, 0x00, 0x33, + 0x2C, 0x00, 0x34, 0x2C, 0x00, 0x35, 0x2C, 0x00, 0x36, 0x2C, 0x00, 0x37, + 0x2C, 0x00, 0x38, 0x2C, 0x00, 0x39, 0x2C, 0x00, 0x3A, 0x2C, 0x00, 0x3B, + 0x2C, 0x00, 0x3C, 0x2C, 0x00, 0x3D, 0x2C, 0x00, 0x3E, 0x2C, 0x00, 0x3F, + 0x2C, 0x00, 0x40, 0x2C, 0x00, 0x41, 0x2C, 0x00, 0x42, 0x2C, 0x00, 0x43, + 0x2C, 0x00, 0x44, 0x2C, 0x00, 0x45, 0x2C, 0x00, 0x46, 0x2C, 0x00, 0x47, + 0x2C, 0x00, 0x48, 0x2C, 0x00, 0x49, 0x2C, 0x00, 0x4A, 0x2C, 0x00, 0x4B, + 0x2C, 0x00, 0x4C, 0x2C, 0x00, 0x4D, 0x2C, 0x00, 0x4E, 0x2C, 0x00, 0x4F, + 0x2C, 0x00, 0x50, 0x2C, 0x00, 0x51, 0x2C, 0x00, 0x52, 0x2C, 0x00, 0x53, + 0x2C, 0x00, 0x54, 0x2C, 0x00, 0x55, 0x2C, 0x00, 0x56, 0x2C, 0x00, 0x57, + 0x2C, 0x00, 0x58, 0x2C, 0x00, 0x59, 0x2C, 0x00, 0x5A, 0x2C, 0x00, 0x5B, + 0x2C, 0x00, 0x5C, 0x2C, 0x00, 0x5D, 0x2C, 0x00, 0x5E, 0x2C, 0x00, 0x5F, + 0x2C, 0x00, 0x60, 0x2C, 0x00, 0x61, 0x2C, 0x00, 0x62, 0x2C, 0x00, 0x63, + 0x2C, 0x00, 0x64, 0x2C, 0x00, 0x65, 0x2C, 0x00, 0x66, 0x2C, 0x00, 0x67, + 0x2C, 0x00, 0x68, 0x2C, 0x00, 0x69, 0x2C, 0x00, 0x6A, 0x2C, 0x00, 0x6B, + 0x2C, 0x00, 0x6C, 0x2C, 0x00, 0x6D, 0x2C, 0x00, 0x6E, 0x2C, 0x00, 0x6F, + 0x2C, 0x00, 0x70, 0x2C, 0x00, 0x71, 0x2C, 0x00, 0x72, 0x2C, 0x00, 0x73, + 0x2C, 0x00, 0x74, 0x2C, 0x00, 0x75, 0x2C, 0x00, 0x76, 0x2C, 0x00, 0x77, + 0x2C, 0x00, 0x78, 0x2C, 0x00, 0x79, 0x2C, 0x00, 0x7A, 0x2C, 0x00, 0x7B, + 0x2C, 0x00, 0x7C, 0x2C, 0x00, 0x7D, 0x2C, 0x00, 0x7E, 0x2C, 0x29, 0x85, + 0x2C, 0x29, 0x86, 0x30, 0x30, 0x02, 0x30, 0x30, 0x0C, 0x30, 0x30, 0x0D, + 0x30, 0x30, 0x01, 0x30, 0x30, 0xFB, 0x30, 0x30, 0xF2, 0x30, 0x30, 0xA1, + 0x30, 0x30, 0xA3, 0x30, 0x30, 0xA5, 0x30, 0x30, 0xA7, 0x30, 0x30, 0xA9, + 0x30, 0x30, 0xE3, 0x30, 0x30, 0xE5, 0x30, 0x30, 0xE7, 0x30, 0x30, 0xC3, + 0x30, 0x30, 0xFC, 0x30, 0x30, 0xA2, 0x30, 0x30, 0xA4, 0x30, 0x30, 0xA6, + 0x30, 0x30, 0xA8, 0x30, 0x30, 0xAA, 0x30, 0x30, 0xAB, 0x30, 0x30, 0xAD, + 0x30, 0x30, 0xAF, 0x30, 0x30, 0xB1, 0x30, 0x30, 0xB3, 0x30, 0x30, 0xB5, + 0x30, 0x30, 0xB7, 0x30, 0x30, 0xB9, 0x30, 0x30, 0xBB, 0x30, 0x30, 0xBD, + 0x30, 0x30, 0xBF, 0x30, 0x30, 0xC1, 0x30, 0x30, 0xC4, 0x30, 0x30, 0xC6, + 0x30, 0x30, 0xC8, 0x30, 0x30, 0xCA, 0x30, 0x30, 0xCB, 0x30, 0x30, 0xCC, + 0x30, 0x30, 0xCD, 0x30, 0x30, 0xCE, 0x30, 0x30, 0xCF, 0x30, 0x30, 0xD2, + 0x30, 0x30, 0xD5, 0x30, 0x30, 0xD8, 0x30, 0x30, 0xDB, 0x30, 0x30, 0xDE, + 0x30, 0x30, 0xDF, 0x30, 0x30, 0xE0, 0x30, 0x30, 0xE1, 0x30, 0x30, 0xE2, + 0x30, 0x30, 0xE4, 0x30, 0x30, 0xE6, 0x30, 0x30, 0xE8, 0x30, 0x30, 0xE9, + 0x30, 0x30, 0xEA, 0x30, 0x30, 0xEB, 0x30, 0x30, 0xEC, 0x30, 0x30, 0xED, + 0x30, 0x30, 0xEF, 0x30, 0x30, 0xF3, 0x30, 0x30, 0x99, 0x30, 0x30, 0x9A, + 0x30, 0x31, 0x64, 0x30, 0x31, 0x31, 0x30, 0x31, 0x32, 0x30, 0x31, 0x33, + 0x30, 0x31, 0x34, 0x30, 0x31, 0x35, 0x30, 0x31, 0x36, 0x30, 0x31, 0x37, + 0x30, 0x31, 0x38, 0x30, 0x31, 0x39, 0x30, 0x31, 0x3A, 0x30, 0x31, 0x3B, + 0x30, 0x31, 0x3C, 0x30, 0x31, 0x3D, 0x30, 0x31, 0x3E, 0x30, 0x31, 0x3F, + 0x30, 0x31, 0x40, 0x30, 0x31, 0x41, 0x30, 0x31, 0x42, 0x30, 0x31, 0x43, + 0x30, 0x31, 0x44, 0x30, 0x31, 0x45, 0x30, 0x31, 0x46, 0x30, 0x31, 0x47, + 0x30, 0x31, 0x48, 0x30, 0x31, 0x49, 0x30, 0x31, 0x4A, 0x30, 0x31, 0x4B, + 0x30, 0x31, 0x4C, 0x30, 0x31, 0x4D, 0x30, 0x31, 0x4E, 0x30, 0x31, 0x4F, + 0x30, 0x31, 0x50, 0x30, 0x31, 0x51, 0x30, 0x31, 0x52, 0x30, 0x31, 0x53, + 0x30, 0x31, 0x54, 0x30, 0x31, 0x55, 0x30, 0x31, 0x56, 0x30, 0x31, 0x57, + 0x30, 0x31, 0x58, 0x30, 0x31, 0x59, 0x30, 0x31, 0x5A, 0x30, 0x31, 0x5B, + 0x30, 0x31, 0x5C, 0x30, 0x31, 0x5D, 0x30, 0x31, 0x5E, 0x30, 0x31, 0x5F, + 0x30, 0x31, 0x60, 0x30, 0x31, 0x61, 0x30, 0x31, 0x62, 0x30, 0x31, 0x63, + 0x2C, 0x00, 0xA2, 0x2C, 0x00, 0xA3, 0x2C, 0x00, 0xAC, 0x2C, 0x00, 0xAF, + 0x2C, 0x00, 0xA6, 0x2C, 0x00, 0xA5, 0x2C, 0x20, 0xA9, 0x30, 0x25, 0x02, + 0x30, 0x21, 0x90, 0x30, 0x21, 0x91, 0x30, 0x21, 0x92, 0x30, 0x21, 0x93, + 0x30, 0x25, 0xA0, 0x30, 0x25, 0xCB, 0x81, 0xD1, 0x57, 0x01, 0xD1, 0x65, + 0x81, 0xD1, 0x58, 0x01, 0xD1, 0x65, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x6E, + 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x6F, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x70, + 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x71, 0x81, 0xD1, 0x5F, 0x01, 0xD1, 0x72, + 0x81, 0xD1, 0xB9, 0x01, 0xD1, 0x65, 0x81, 0xD1, 0xBA, 0x01, 0xD1, 0x65, + 0x81, 0xD1, 0xBB, 0x01, 0xD1, 0x6E, 0x81, 0xD1, 0xBC, 0x01, 0xD1, 0x6E, + 0x81, 0xD1, 0xBB, 0x01, 0xD1, 0x6F, 0x81, 0xD1, 0xBC, 0x01, 0xD1, 0x6F, + 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, + 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, + 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, + 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, + 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, + 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, + 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, + 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, + 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, + 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, + 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, + 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, + 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, + 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, + 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, + 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, + 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, + 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, + 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, + 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, + 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, + 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, 0x04, 0x00, 0x49, + 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, + 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, + 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, + 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, + 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, + 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, + 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, + 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, + 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, + 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, + 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, + 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, 0x04, 0x00, 0x47, 0x04, 0x00, 0x4A, + 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, + 0x04, 0x00, 0x51, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, + 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, + 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, + 0x04, 0x00, 0x64, 0x04, 0x00, 0x66, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, + 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, + 0x04, 0x00, 0x6E, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, + 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, + 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, + 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, + 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, + 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, + 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, + 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, + 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, + 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, + 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, + 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, + 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, + 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, + 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, + 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, + 0x04, 0x00, 0x50, 0x04, 0x00, 0x51, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, + 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, + 0x04, 0x00, 0x59, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, 0x04, 0x00, 0x63, + 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, 0x04, 0x00, 0x67, + 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, 0x04, 0x00, 0x6B, + 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, 0x04, 0x00, 0x6F, + 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, 0x04, 0x00, 0x73, + 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, 0x04, 0x00, 0x77, + 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, 0x04, 0x00, 0x41, + 0x04, 0x00, 0x42, 0x04, 0x00, 0x44, 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, + 0x04, 0x00, 0x47, 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, + 0x04, 0x00, 0x4C, 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x53, + 0x04, 0x00, 0x54, 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, + 0x04, 0x00, 0x58, 0x04, 0x00, 0x59, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, + 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, + 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, + 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, + 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, + 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, + 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, + 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, + 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, + 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, + 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, + 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, + 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, + 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, + 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, + 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, + 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, + 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, + 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, + 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, + 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, + 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, + 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, + 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, + 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, + 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, + 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, + 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, + 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, + 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, + 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, + 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, + 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, + 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, + 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, + 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, + 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, + 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, + 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, + 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, + 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, + 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, + 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, + 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, + 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, + 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, + 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, + 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, + 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, + 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, + 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, + 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, + 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, + 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, + 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, + 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, + 0x04, 0x00, 0x41, 0x04, 0x00, 0x42, 0x04, 0x00, 0x43, 0x04, 0x00, 0x44, + 0x04, 0x00, 0x45, 0x04, 0x00, 0x46, 0x04, 0x00, 0x47, 0x04, 0x00, 0x48, + 0x04, 0x00, 0x49, 0x04, 0x00, 0x4A, 0x04, 0x00, 0x4B, 0x04, 0x00, 0x4C, + 0x04, 0x00, 0x4D, 0x04, 0x00, 0x4E, 0x04, 0x00, 0x4F, 0x04, 0x00, 0x50, + 0x04, 0x00, 0x51, 0x04, 0x00, 0x52, 0x04, 0x00, 0x53, 0x04, 0x00, 0x54, + 0x04, 0x00, 0x55, 0x04, 0x00, 0x56, 0x04, 0x00, 0x57, 0x04, 0x00, 0x58, + 0x04, 0x00, 0x59, 0x04, 0x00, 0x5A, 0x04, 0x00, 0x61, 0x04, 0x00, 0x62, + 0x04, 0x00, 0x63, 0x04, 0x00, 0x64, 0x04, 0x00, 0x65, 0x04, 0x00, 0x66, + 0x04, 0x00, 0x67, 0x04, 0x00, 0x68, 0x04, 0x00, 0x69, 0x04, 0x00, 0x6A, + 0x04, 0x00, 0x6B, 0x04, 0x00, 0x6C, 0x04, 0x00, 0x6D, 0x04, 0x00, 0x6E, + 0x04, 0x00, 0x6F, 0x04, 0x00, 0x70, 0x04, 0x00, 0x71, 0x04, 0x00, 0x72, + 0x04, 0x00, 0x73, 0x04, 0x00, 0x74, 0x04, 0x00, 0x75, 0x04, 0x00, 0x76, + 0x04, 0x00, 0x77, 0x04, 0x00, 0x78, 0x04, 0x00, 0x79, 0x04, 0x00, 0x7A, + 0x04, 0x01, 0x31, 0x04, 0x02, 0x37, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, + 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, + 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, + 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, + 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, + 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, + 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, + 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, + 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, + 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, + 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, + 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, + 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, + 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, + 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, + 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, + 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, + 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, + 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, + 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, + 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, + 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, + 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, + 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, + 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, + 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, + 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, + 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, + 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, + 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, + 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, + 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, + 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, + 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, + 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, + 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, + 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, + 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, + 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, + 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, + 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, + 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, + 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, + 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, + 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, + 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, + 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, + 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, + 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, + 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, + 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, + 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, + 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, + 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, + 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, + 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, + 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, + 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, + 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, 0x04, 0x03, 0x91, 0x04, 0x03, 0x92, + 0x04, 0x03, 0x93, 0x04, 0x03, 0x94, 0x04, 0x03, 0x95, 0x04, 0x03, 0x96, + 0x04, 0x03, 0x97, 0x04, 0x03, 0x98, 0x04, 0x03, 0x99, 0x04, 0x03, 0x9A, + 0x04, 0x03, 0x9B, 0x04, 0x03, 0x9C, 0x04, 0x03, 0x9D, 0x04, 0x03, 0x9E, + 0x04, 0x03, 0x9F, 0x04, 0x03, 0xA0, 0x04, 0x03, 0xA1, 0x04, 0x03, 0xF4, + 0x04, 0x03, 0xA3, 0x04, 0x03, 0xA4, 0x04, 0x03, 0xA5, 0x04, 0x03, 0xA6, + 0x04, 0x03, 0xA7, 0x04, 0x03, 0xA8, 0x04, 0x03, 0xA9, 0x04, 0x22, 0x07, + 0x04, 0x03, 0xB1, 0x04, 0x03, 0xB2, 0x04, 0x03, 0xB3, 0x04, 0x03, 0xB4, + 0x04, 0x03, 0xB5, 0x04, 0x03, 0xB6, 0x04, 0x03, 0xB7, 0x04, 0x03, 0xB8, + 0x04, 0x03, 0xB9, 0x04, 0x03, 0xBA, 0x04, 0x03, 0xBB, 0x04, 0x03, 0xBC, + 0x04, 0x03, 0xBD, 0x04, 0x03, 0xBE, 0x04, 0x03, 0xBF, 0x04, 0x03, 0xC0, + 0x04, 0x03, 0xC1, 0x04, 0x03, 0xC2, 0x04, 0x03, 0xC3, 0x04, 0x03, 0xC4, + 0x04, 0x03, 0xC5, 0x04, 0x03, 0xC6, 0x04, 0x03, 0xC7, 0x04, 0x03, 0xC8, + 0x04, 0x03, 0xC9, 0x04, 0x22, 0x02, 0x04, 0x03, 0xF5, 0x04, 0x03, 0xD1, + 0x04, 0x03, 0xF0, 0x04, 0x03, 0xD5, 0x04, 0x03, 0xF1, 0x04, 0x03, 0xD6, + 0x04, 0x03, 0xDC, 0x04, 0x03, 0xDD, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, + 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, + 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, + 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, + 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, + 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, + 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, + 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, + 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, + 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, + 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, 0x04, 0x00, 0x30, 0x04, 0x00, 0x31, + 0x04, 0x00, 0x32, 0x04, 0x00, 0x33, 0x04, 0x00, 0x34, 0x04, 0x00, 0x35, + 0x04, 0x00, 0x36, 0x04, 0x00, 0x37, 0x04, 0x00, 0x38, 0x04, 0x00, 0x39, + 0x00, 0x4E, 0x3D, 0x00, 0x4E, 0x38, 0x00, 0x4E, 0x41, 0x02, 0x01, 0x22, + 0x00, 0x4F, 0x60, 0x00, 0x4F, 0xAE, 0x00, 0x4F, 0xBB, 0x00, 0x50, 0x02, + 0x00, 0x50, 0x7A, 0x00, 0x50, 0x99, 0x00, 0x50, 0xE7, 0x00, 0x50, 0xCF, + 0x00, 0x34, 0x9E, 0x02, 0x06, 0x3A, 0x00, 0x51, 0x4D, 0x00, 0x51, 0x54, + 0x00, 0x51, 0x64, 0x00, 0x51, 0x77, 0x02, 0x05, 0x1C, 0x00, 0x34, 0xB9, + 0x00, 0x51, 0x67, 0x00, 0x51, 0x8D, 0x02, 0x05, 0x4B, 0x00, 0x51, 0x97, + 0x00, 0x51, 0xA4, 0x00, 0x4E, 0xCC, 0x00, 0x51, 0xAC, 0x00, 0x51, 0xB5, + 0x02, 0x91, 0xDF, 0x00, 0x51, 0xF5, 0x00, 0x52, 0x03, 0x00, 0x34, 0xDF, + 0x00, 0x52, 0x3B, 0x00, 0x52, 0x46, 0x00, 0x52, 0x72, 0x00, 0x52, 0x77, + 0x00, 0x35, 0x15, 0x00, 0x52, 0xC7, 0x00, 0x52, 0xC9, 0x00, 0x52, 0xE4, + 0x00, 0x52, 0xFA, 0x00, 0x53, 0x05, 0x00, 0x53, 0x06, 0x00, 0x53, 0x17, + 0x00, 0x53, 0x49, 0x00, 0x53, 0x51, 0x00, 0x53, 0x5A, 0x00, 0x53, 0x73, + 0x00, 0x53, 0x7D, 0x00, 0x53, 0x7F, 0x00, 0x53, 0x7F, 0x00, 0x53, 0x7F, + 0x02, 0x0A, 0x2C, 0x00, 0x70, 0x70, 0x00, 0x53, 0xCA, 0x00, 0x53, 0xDF, + 0x02, 0x0B, 0x63, 0x00, 0x53, 0xEB, 0x00, 0x53, 0xF1, 0x00, 0x54, 0x06, + 0x00, 0x54, 0x9E, 0x00, 0x54, 0x38, 0x00, 0x54, 0x48, 0x00, 0x54, 0x68, + 0x00, 0x54, 0xA2, 0x00, 0x54, 0xF6, 0x00, 0x55, 0x10, 0x00, 0x55, 0x53, + 0x00, 0x55, 0x63, 0x00, 0x55, 0x84, 0x00, 0x55, 0x84, 0x00, 0x55, 0x99, + 0x00, 0x55, 0xAB, 0x00, 0x55, 0xB3, 0x00, 0x55, 0xC2, 0x00, 0x57, 0x16, + 0x00, 0x56, 0x06, 0x00, 0x57, 0x17, 0x00, 0x56, 0x51, 0x00, 0x56, 0x74, + 0x00, 0x52, 0x07, 0x00, 0x58, 0xEE, 0x00, 0x57, 0xCE, 0x00, 0x57, 0xF4, + 0x00, 0x58, 0x0D, 0x00, 0x57, 0x8B, 0x00, 0x58, 0x32, 0x00, 0x58, 0x31, + 0x00, 0x58, 0xAC, 0x02, 0x14, 0xE4, 0x00, 0x58, 0xF2, 0x00, 0x58, 0xF7, + 0x00, 0x59, 0x06, 0x00, 0x59, 0x1A, 0x00, 0x59, 0x22, 0x00, 0x59, 0x62, + 0x02, 0x16, 0xA8, 0x02, 0x16, 0xEA, 0x00, 0x59, 0xEC, 0x00, 0x5A, 0x1B, + 0x00, 0x5A, 0x27, 0x00, 0x59, 0xD8, 0x00, 0x5A, 0x66, 0x00, 0x36, 0xEE, + 0x00, 0x36, 0xFC, 0x00, 0x5B, 0x08, 0x00, 0x5B, 0x3E, 0x00, 0x5B, 0x3E, + 0x02, 0x19, 0xC8, 0x00, 0x5B, 0xC3, 0x00, 0x5B, 0xD8, 0x00, 0x5B, 0xE7, + 0x00, 0x5B, 0xF3, 0x02, 0x1B, 0x18, 0x00, 0x5B, 0xFF, 0x00, 0x5C, 0x06, + 0x00, 0x5F, 0x53, 0x00, 0x5C, 0x22, 0x00, 0x37, 0x81, 0x00, 0x5C, 0x60, + 0x00, 0x5C, 0x6E, 0x00, 0x5C, 0xC0, 0x00, 0x5C, 0x8D, 0x02, 0x1D, 0xE4, + 0x00, 0x5D, 0x43, 0x02, 0x1D, 0xE6, 0x00, 0x5D, 0x6E, 0x00, 0x5D, 0x6B, + 0x00, 0x5D, 0x7C, 0x00, 0x5D, 0xE1, 0x00, 0x5D, 0xE2, 0x00, 0x38, 0x2F, + 0x00, 0x5D, 0xFD, 0x00, 0x5E, 0x28, 0x00, 0x5E, 0x3D, 0x00, 0x5E, 0x69, + 0x00, 0x38, 0x62, 0x02, 0x21, 0x83, 0x00, 0x38, 0x7C, 0x00, 0x5E, 0xB0, + 0x00, 0x5E, 0xB3, 0x00, 0x5E, 0xB6, 0x00, 0x5E, 0xCA, 0x02, 0xA3, 0x92, + 0x00, 0x5E, 0xFE, 0x02, 0x23, 0x31, 0x02, 0x23, 0x31, 0x00, 0x82, 0x01, + 0x00, 0x5F, 0x22, 0x00, 0x5F, 0x22, 0x00, 0x38, 0xC7, 0x02, 0x32, 0xB8, + 0x02, 0x61, 0xDA, 0x00, 0x5F, 0x62, 0x00, 0x5F, 0x6B, 0x00, 0x38, 0xE3, + 0x00, 0x5F, 0x9A, 0x00, 0x5F, 0xCD, 0x00, 0x5F, 0xD7, 0x00, 0x5F, 0xF9, + 0x00, 0x60, 0x81, 0x00, 0x39, 0x3A, 0x00, 0x39, 0x1C, 0x00, 0x60, 0x94, + 0x02, 0x26, 0xD4, 0x00, 0x60, 0xC7, 0x00, 0x61, 0x48, 0x00, 0x61, 0x4C, + 0x00, 0x61, 0x4E, 0x00, 0x61, 0x4C, 0x00, 0x61, 0x7A, 0x00, 0x61, 0x8E, + 0x00, 0x61, 0xB2, 0x00, 0x61, 0xA4, 0x00, 0x61, 0xAF, 0x00, 0x61, 0xDE, + 0x00, 0x61, 0xF2, 0x00, 0x61, 0xF6, 0x00, 0x62, 0x10, 0x00, 0x62, 0x1B, + 0x00, 0x62, 0x5D, 0x00, 0x62, 0xB1, 0x00, 0x62, 0xD4, 0x00, 0x63, 0x50, + 0x02, 0x2B, 0x0C, 0x00, 0x63, 0x3D, 0x00, 0x62, 0xFC, 0x00, 0x63, 0x68, + 0x00, 0x63, 0x83, 0x00, 0x63, 0xE4, 0x02, 0x2B, 0xF1, 0x00, 0x64, 0x22, + 0x00, 0x63, 0xC5, 0x00, 0x63, 0xA9, 0x00, 0x3A, 0x2E, 0x00, 0x64, 0x69, + 0x00, 0x64, 0x7E, 0x00, 0x64, 0x9D, 0x00, 0x64, 0x77, 0x00, 0x3A, 0x6C, + 0x00, 0x65, 0x4F, 0x00, 0x65, 0x6C, 0x02, 0x30, 0x0A, 0x00, 0x65, 0xE3, + 0x00, 0x66, 0xF8, 0x00, 0x66, 0x49, 0x00, 0x3B, 0x19, 0x00, 0x66, 0x91, + 0x00, 0x3B, 0x08, 0x00, 0x3A, 0xE4, 0x00, 0x51, 0x92, 0x00, 0x51, 0x95, + 0x00, 0x67, 0x00, 0x00, 0x66, 0x9C, 0x00, 0x80, 0xAD, 0x00, 0x43, 0xD9, + 0x00, 0x67, 0x17, 0x00, 0x67, 0x1B, 0x00, 0x67, 0x21, 0x00, 0x67, 0x5E, + 0x00, 0x67, 0x53, 0x02, 0x33, 0xC3, 0x00, 0x3B, 0x49, 0x00, 0x67, 0xFA, + 0x00, 0x67, 0x85, 0x00, 0x68, 0x52, 0x00, 0x68, 0x85, 0x02, 0x34, 0x6D, + 0x00, 0x68, 0x8E, 0x00, 0x68, 0x1F, 0x00, 0x69, 0x14, 0x00, 0x3B, 0x9D, + 0x00, 0x69, 0x42, 0x00, 0x69, 0xA3, 0x00, 0x69, 0xEA, 0x00, 0x6A, 0xA8, + 0x02, 0x36, 0xA3, 0x00, 0x6A, 0xDB, 0x00, 0x3C, 0x18, 0x00, 0x6B, 0x21, + 0x02, 0x38, 0xA7, 0x00, 0x6B, 0x54, 0x00, 0x3C, 0x4E, 0x00, 0x6B, 0x72, + 0x00, 0x6B, 0x9F, 0x00, 0x6B, 0xBA, 0x00, 0x6B, 0xBB, 0x02, 0x3A, 0x8D, + 0x02, 0x1D, 0x0B, 0x02, 0x3A, 0xFA, 0x00, 0x6C, 0x4E, 0x02, 0x3C, 0xBC, + 0x00, 0x6C, 0xBF, 0x00, 0x6C, 0xCD, 0x00, 0x6C, 0x67, 0x00, 0x6D, 0x16, + 0x00, 0x6D, 0x3E, 0x00, 0x6D, 0x77, 0x00, 0x6D, 0x41, 0x00, 0x6D, 0x69, + 0x00, 0x6D, 0x78, 0x00, 0x6D, 0x85, 0x02, 0x3D, 0x1E, 0x00, 0x6D, 0x34, + 0x00, 0x6E, 0x2F, 0x00, 0x6E, 0x6E, 0x00, 0x3D, 0x33, 0x00, 0x6E, 0xCB, + 0x00, 0x6E, 0xC7, 0x02, 0x3E, 0xD1, 0x00, 0x6D, 0xF9, 0x00, 0x6F, 0x6E, + 0x02, 0x3F, 0x5E, 0x02, 0x3F, 0x8E, 0x00, 0x6F, 0xC6, 0x00, 0x70, 0x39, + 0x00, 0x70, 0x1E, 0x00, 0x70, 0x1B, 0x00, 0x3D, 0x96, 0x00, 0x70, 0x4A, + 0x00, 0x70, 0x7D, 0x00, 0x70, 0x77, 0x00, 0x70, 0xAD, 0x02, 0x05, 0x25, + 0x00, 0x71, 0x45, 0x02, 0x42, 0x63, 0x00, 0x71, 0x9C, 0x02, 0x43, 0xAB, + 0x00, 0x72, 0x28, 0x00, 0x72, 0x35, 0x00, 0x72, 0x50, 0x02, 0x46, 0x08, + 0x00, 0x72, 0x80, 0x00, 0x72, 0x95, 0x02, 0x47, 0x35, 0x02, 0x48, 0x14, + 0x00, 0x73, 0x7A, 0x00, 0x73, 0x8B, 0x00, 0x3E, 0xAC, 0x00, 0x73, 0xA5, + 0x00, 0x3E, 0xB8, 0x00, 0x3E, 0xB8, 0x00, 0x74, 0x47, 0x00, 0x74, 0x5C, + 0x00, 0x74, 0x71, 0x00, 0x74, 0x85, 0x00, 0x74, 0xCA, 0x00, 0x3F, 0x1B, + 0x00, 0x75, 0x24, 0x02, 0x4C, 0x36, 0x00, 0x75, 0x3E, 0x02, 0x4C, 0x92, + 0x00, 0x75, 0x70, 0x02, 0x21, 0x9F, 0x00, 0x76, 0x10, 0x02, 0x4F, 0xA1, + 0x02, 0x4F, 0xB8, 0x02, 0x50, 0x44, 0x00, 0x3F, 0xFC, 0x00, 0x40, 0x08, + 0x00, 0x76, 0xF4, 0x02, 0x50, 0xF3, 0x02, 0x50, 0xF2, 0x02, 0x51, 0x19, + 0x02, 0x51, 0x33, 0x00, 0x77, 0x1E, 0x00, 0x77, 0x1F, 0x00, 0x77, 0x1F, + 0x00, 0x77, 0x4A, 0x00, 0x40, 0x39, 0x00, 0x77, 0x8B, 0x00, 0x40, 0x46, + 0x00, 0x40, 0x96, 0x02, 0x54, 0x1D, 0x00, 0x78, 0x4E, 0x00, 0x78, 0x8C, + 0x00, 0x78, 0xCC, 0x00, 0x40, 0xE3, 0x02, 0x56, 0x26, 0x00, 0x79, 0x56, + 0x02, 0x56, 0x9A, 0x02, 0x56, 0xC5, 0x00, 0x79, 0x8F, 0x00, 0x79, 0xEB, + 0x00, 0x41, 0x2F, 0x00, 0x7A, 0x40, 0x00, 0x7A, 0x4A, 0x00, 0x7A, 0x4F, + 0x02, 0x59, 0x7C, 0x02, 0x5A, 0xA7, 0x02, 0x5A, 0xA7, 0x00, 0x7A, 0xEE, + 0x00, 0x42, 0x02, 0x02, 0x5B, 0xAB, 0x00, 0x7B, 0xC6, 0x00, 0x7B, 0xC9, + 0x00, 0x42, 0x27, 0x02, 0x5C, 0x80, 0x00, 0x7C, 0xD2, 0x00, 0x42, 0xA0, + 0x00, 0x7C, 0xE8, 0x00, 0x7C, 0xE3, 0x00, 0x7D, 0x00, 0x02, 0x5F, 0x86, + 0x00, 0x7D, 0x63, 0x00, 0x43, 0x01, 0x00, 0x7D, 0xC7, 0x00, 0x7E, 0x02, + 0x00, 0x7E, 0x45, 0x00, 0x43, 0x34, 0x02, 0x62, 0x28, 0x02, 0x62, 0x47, + 0x00, 0x43, 0x59, 0x02, 0x62, 0xD9, 0x00, 0x7F, 0x7A, 0x02, 0x63, 0x3E, + 0x00, 0x7F, 0x95, 0x00, 0x7F, 0xFA, 0x00, 0x80, 0x05, 0x02, 0x64, 0xDA, + 0x02, 0x65, 0x23, 0x00, 0x80, 0x60, 0x02, 0x65, 0xA8, 0x00, 0x80, 0x70, + 0x02, 0x33, 0x5F, 0x00, 0x43, 0xD5, 0x00, 0x80, 0xB2, 0x00, 0x81, 0x03, + 0x00, 0x44, 0x0B, 0x00, 0x81, 0x3E, 0x00, 0x5A, 0xB5, 0x02, 0x67, 0xA7, + 0x02, 0x67, 0xB5, 0x02, 0x33, 0x93, 0x02, 0x33, 0x9C, 0x00, 0x82, 0x01, + 0x00, 0x82, 0x04, 0x00, 0x8F, 0x9E, 0x00, 0x44, 0x6B, 0x00, 0x82, 0x91, + 0x00, 0x82, 0x8B, 0x00, 0x82, 0x9D, 0x00, 0x52, 0xB3, 0x00, 0x82, 0xB1, + 0x00, 0x82, 0xB3, 0x00, 0x82, 0xBD, 0x00, 0x82, 0xE6, 0x02, 0x6B, 0x3C, + 0x00, 0x82, 0xE5, 0x00, 0x83, 0x1D, 0x00, 0x83, 0x63, 0x00, 0x83, 0xAD, + 0x00, 0x83, 0x23, 0x00, 0x83, 0xBD, 0x00, 0x83, 0xE7, 0x00, 0x84, 0x57, + 0x00, 0x83, 0x53, 0x00, 0x83, 0xCA, 0x00, 0x83, 0xCC, 0x00, 0x83, 0xDC, + 0x02, 0x6C, 0x36, 0x02, 0x6D, 0x6B, 0x02, 0x6C, 0xD5, 0x00, 0x45, 0x2B, + 0x00, 0x84, 0xF1, 0x00, 0x84, 0xF3, 0x00, 0x85, 0x16, 0x02, 0x73, 0xCA, + 0x00, 0x85, 0x64, 0x02, 0x6F, 0x2C, 0x00, 0x45, 0x5D, 0x00, 0x45, 0x61, + 0x02, 0x6F, 0xB1, 0x02, 0x70, 0xD2, 0x00, 0x45, 0x6B, 0x00, 0x86, 0x50, + 0x00, 0x86, 0x5C, 0x00, 0x86, 0x67, 0x00, 0x86, 0x69, 0x00, 0x86, 0xA9, + 0x00, 0x86, 0x88, 0x00, 0x87, 0x0E, 0x00, 0x86, 0xE2, 0x00, 0x87, 0x79, + 0x00, 0x87, 0x28, 0x00, 0x87, 0x6B, 0x00, 0x87, 0x86, 0x00, 0x45, 0xD7, + 0x00, 0x87, 0xE1, 0x00, 0x88, 0x01, 0x00, 0x45, 0xF9, 0x00, 0x88, 0x60, + 0x00, 0x88, 0x63, 0x02, 0x76, 0x67, 0x00, 0x88, 0xD7, 0x00, 0x88, 0xDE, + 0x00, 0x46, 0x35, 0x00, 0x88, 0xFA, 0x00, 0x34, 0xBB, 0x02, 0x78, 0xAE, + 0x02, 0x79, 0x66, 0x00, 0x46, 0xBE, 0x00, 0x46, 0xC7, 0x00, 0x8A, 0xA0, + 0x00, 0x8A, 0xED, 0x00, 0x8B, 0x8A, 0x00, 0x8C, 0x55, 0x02, 0x7C, 0xA8, + 0x00, 0x8C, 0xAB, 0x00, 0x8C, 0xC1, 0x00, 0x8D, 0x1B, 0x00, 0x8D, 0x77, + 0x02, 0x7F, 0x2F, 0x02, 0x08, 0x04, 0x00, 0x8D, 0xCB, 0x00, 0x8D, 0xBC, + 0x00, 0x8D, 0xF0, 0x02, 0x08, 0xDE, 0x00, 0x8E, 0xD4, 0x00, 0x8F, 0x38, + 0x02, 0x85, 0xD2, 0x02, 0x85, 0xED, 0x00, 0x90, 0x94, 0x00, 0x90, 0xF1, + 0x00, 0x91, 0x11, 0x02, 0x87, 0x2E, 0x00, 0x91, 0x1B, 0x00, 0x92, 0x38, + 0x00, 0x92, 0xD7, 0x00, 0x92, 0xD8, 0x00, 0x92, 0x7C, 0x00, 0x93, 0xF9, + 0x00, 0x94, 0x15, 0x02, 0x8B, 0xFA, 0x00, 0x95, 0x8B, 0x00, 0x49, 0x95, + 0x00, 0x95, 0xB7, 0x02, 0x8D, 0x77, 0x00, 0x49, 0xE6, 0x00, 0x96, 0xC3, + 0x00, 0x5D, 0xB2, 0x00, 0x97, 0x23, 0x02, 0x91, 0x45, 0x02, 0x92, 0x1A, + 0x00, 0x4A, 0x6E, 0x00, 0x4A, 0x76, 0x00, 0x97, 0xE0, 0x02, 0x94, 0x0A, + 0x00, 0x4A, 0xB2, 0x02, 0x94, 0x96, 0x00, 0x98, 0x0B, 0x00, 0x98, 0x0B, + 0x00, 0x98, 0x29, 0x02, 0x95, 0xB6, 0x00, 0x98, 0xE2, 0x00, 0x4B, 0x33, + 0x00, 0x99, 0x29, 0x00, 0x99, 0xA7, 0x00, 0x99, 0xC2, 0x00, 0x99, 0xFE, + 0x00, 0x4B, 0xCE, 0x02, 0x9B, 0x30, 0x00, 0x9B, 0x12, 0x00, 0x9C, 0x40, + 0x00, 0x9C, 0xFD, 0x00, 0x4C, 0xCE, 0x00, 0x4C, 0xED, 0x00, 0x9D, 0x67, + 0x02, 0xA0, 0xCE, 0x00, 0x4C, 0xF8, 0x02, 0xA1, 0x05, 0x02, 0xA2, 0x0E, + 0x02, 0xA2, 0x91, 0x00, 0x9E, 0xBB, 0x00, 0x4D, 0x56, 0x00, 0x9E, 0xF9, + 0x00, 0x9E, 0xFE, 0x00, 0x9F, 0x05, 0x00, 0x9F, 0x0F, 0x00, 0x9F, 0x16, + 0x00, 0x9F, 0x3B, 0x02, 0xA6, 0x00 +}; + +const decomp_index_table_t gl_uninorm_decomp_index_table = +{ + { + 0, 32, 64, 96, 128, -1, 160, 192, + 224, 256, 288, 320, 352, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 384, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 416, 448, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 480, 512, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 544 + }, + { + -1, -1, -1, -1, -1, 0, 32, 64, + 96, 128, 160, 192, -1, 224, 256, 288, + 320, 352, -1, -1, -1, 384, 416, 448, + -1, -1, 480, 512, 544, 576, 608, 640, + 672, 704, 736, 768, -1, -1, 800, 832, + -1, -1, -1, -1, 864, -1, -1, -1, + -1, 896, -1, 928, -1, -1, 960, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 992, 1024, -1, -1, -1, 1056, -1, + -1, 1088, 1120, -1, -1, -1, -1, -1, + -1, -1, 1152, -1, 1184, -1, 1216, -1, + -1, -1, 1248, -1, -1, -1, 1280, -1, + -1, -1, 1312, -1, -1, -1, 1344, -1, + -1, 1376, -1, -1, -1, 1408, 1440, -1, + 1472, -1, 1504, 1536, 1568, 1600, -1, -1, + -1, 1632, -1, -1, -1, -1, -1, 1664, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 1696, 1728, 1760, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 1792, 1824, 1856, 1888, 1920, -1, -1, + 1952, 1984, 2016, 2048, 2080, 2112, 2144, 2176, + 2208, 2240, 2272, 2304, 2336, 2368, 2400, 2432, + 2464, 2496, 2528, 2560, 2592, 2624, -1, -1, + 2656, 2688, 2720, 2752, 2784, 2816, 2848, -1, + 2880, 2912, 2944, 2976, 3008, 3040, -1, 3072, + -1, 3104, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3136, 3168, 3200, 3232, 3264, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 3296, -1, -1, 3328, -1, -1, 3360, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3392, -1, -1, -1, -1, + -1, -1, -1, 3424, -1, -1, -1, -1, + -1, -1, -1, -1, 3456, -1, -1, 3488, + 3520, 3552, 3584, 3616, 3648, 3680, 3712, -1, + 3744, 3776, 3808, 3840, 3872, 3904, 3936, 3968, + -1, 4000, 4032, 4064, 4096, -1, -1, -1, + 4128, 4160, 4192, 4224, 4256, 4288, 4320, 4352, + 4384, 4416, 4448, 4480, 4512, 4544, 4576, 4608, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 4640, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 4672, 4704, 4736, 4768, 4800, 4832, 4864, 4896, + 4928, 4960, 4992, 5024, 5056, 5088, 5120, -1, + 5152, 5184, 5216, 5248, 5280, 5312, 5344, 5376, + 5408, 5440, 5472, 5504, 5536, 5568, 5600, 5632, + 5664, 5696, 5728, 5760, 5792, 5824, 5856, 5888, + 5920, 5952, 5984, 6016, 6048, 6080, 6112, 6144, + 6176, 6208, 6240, 6272, 6304, 6336, 6368, 6400, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 6432, 6464, -1, 6496, 6528, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 6560, 6592, 6624, 6656, 6688, 6720, 6752, 6784, + 6816, 6848, 6880, 6912, 6944, 6976, 7008, 7040, + 7072, 7104, 7136, 7168, 7200, 7232, 7264, 7296, + 7328, 7360, 7392, 7424, 7456, 7488, 7520, 7552, + 7584, 7616, 7648, 7680, 7712, 7744, 7776, 7808, + 7840, 7872, 7904, 7936, 7968, 8000, 8032, 8064, + 8096, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + 32768, -1, -1, -1, -1, -1, -1, -1, + 32769, -1, 32771, -1, -1, -1, -1, 32772, + -1, -1, 32774, 32775, 32776, 32778, -1, -1, + 32779, 32781, 32782, -1, 32783, 32786, 32789, -1, + 24, 26, 28, 30, 32, 34, -1, 36, + 38, 40, 42, 44, 46, 48, 50, 52, + -1, 54, 56, 58, 60, 62, 64, -1, + -1, 66, 68, 70, 72, 74, -1, -1, + 76, 78, 80, 82, 84, 86, -1, 88, + 90, 92, 94, 96, 98, 100, 102, 104, + -1, 106, 108, 110, 112, 114, 116, -1, + -1, 118, 120, 122, 124, 126, -1, 128, + 130, 132, 134, 136, 138, 140, 142, 144, + 146, 148, 150, 152, 154, 156, 158, 160, + -1, -1, 162, 164, 166, 168, 170, 172, + 174, 176, 178, 180, 182, 184, 186, 188, + 190, 192, 194, 196, 198, 200, -1, -1, + 202, 204, 206, 208, 210, 212, 214, 216, + 218, -1, 32988, 32990, 224, 226, 228, 230, + -1, 232, 234, 236, 238, 240, 242, 33012, + 33014, -1, -1, 248, 250, 252, 254, 256, + 258, 33028, -1, -1, 262, 264, 266, 268, + 270, 272, -1, -1, 274, 276, 278, 280, + 282, 284, 286, 288, 290, 292, 294, 296, + 298, 300, 302, 304, 306, 308, -1, -1, + 310, 312, 314, 316, 318, 320, 322, 324, + 326, 328, 330, 332, 334, 336, 338, 340, + 342, 344, 346, 348, 350, 352, 354, 33124, + 357, 359, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 361, + 363, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33133, 33135, 33137, 33139, + 33141, 33143, 33145, 33147, 33149, 383, 385, 387, + 389, 391, 393, 395, 397, 399, 401, 403, + 405, 407, 409, 411, 413, -1, 415, 417, + 419, 421, 423, 425, -1, -1, 427, 429, + 431, 433, 435, 437, 439, 441, 443, 445, + 447, 33217, 33219, 33221, 455, 457, -1, -1, + 459, 461, 463, 465, 467, 469, 471, 473, + 475, 477, 479, 481, 483, 485, 487, 489, + 491, 493, 495, 497, 499, 501, 503, 505, + 507, 509, 511, 513, 515, 517, 519, 521, + 523, 525, 527, 529, -1, -1, 531, 533, + -1, -1, -1, -1, -1, -1, 535, 537, + 539, 541, 543, 545, 547, 549, 551, 553, + 555, 557, 559, 561, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 33331, 33332, 33333, 33334, 33335, 33336, 33337, 33338, + 33339, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 33340, 33342, 33344, 33346, 33348, 33350, -1, -1, + 33352, 33353, 33354, 33355, 33356, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 589, 590, -1, 591, 592, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 594, -1, -1, -1, + -1, -1, 33363, -1, -1, -1, 597, -1, + -1, -1, -1, -1, 33366, 600, 602, 604, + 605, 607, 609, -1, 611, -1, 613, 615, + 617, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 619, 621, 623, 625, 627, 629, + 631, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 633, 635, 637, 639, 641, -1, + 33411, 33412, 33413, 646, 648, 33418, 33419, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 33420, 33421, 33422, -1, 33423, 33424, -1, -1, + -1, 33425, -1, -1, -1, -1, -1, -1, + 658, 660, -1, 662, -1, -1, -1, 664, + -1, -1, -1, -1, 666, 668, 670, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 672, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 674, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 676, 678, -1, 680, -1, -1, -1, 682, + -1, -1, -1, -1, 684, 686, 688, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 690, 692, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 694, 696, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 698, 700, 702, 704, -1, -1, 706, 708, + -1, -1, 710, 712, 714, 716, 718, 720, + -1, -1, 722, 724, 726, 728, 730, 732, + -1, -1, 734, 736, 738, 740, 742, 744, + 746, 748, 750, 752, 754, 756, -1, -1, + 758, 760, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33530, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 764, 766, 768, 770, 772, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 33542, 33544, 33546, + 33548, -1, -1, -1, -1, -1, -1, -1, + 782, -1, 784, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 786, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 788, -1, -1, -1, -1, -1, -1, + -1, 790, -1, -1, 792, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 794, 796, 798, 800, 802, 804, 806, 808, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 810, 812, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 814, 816, -1, 818, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 820, -1, -1, 822, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 824, 826, 828, -1, -1, 830, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 832, -1, -1, 834, 836, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 838, 840, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 842, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 844, 846, 848, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 850, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 852, -1, -1, -1, -1, -1, -1, 854, + 856, -1, 858, 860, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 862, 864, 866, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 868, -1, 870, 872, 874, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33644, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33646, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33648, 33650, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33652, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 885, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 887, -1, -1, + -1, -1, 889, -1, -1, -1, -1, 891, + -1, -1, -1, -1, 893, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 895, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 897, -1, 899, 901, 33671, + 905, 33675, -1, -1, -1, -1, -1, -1, + -1, 909, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 911, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 913, -1, -1, + -1, -1, 915, -1, -1, -1, -1, 917, + -1, -1, -1, -1, 919, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 921, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 923, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33693, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 926, -1, + 928, -1, 930, -1, 932, -1, 934, -1, + -1, -1, 936, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 938, -1, 940, -1, -1, + 942, 944, -1, 946, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33716, 33717, 33718, -1, + 33719, 33720, 33721, 33722, 33723, 33724, 33725, 33726, + 33727, 33728, 33729, -1, 33730, 33731, 33732, 33733, + 33734, 33735, 33736, 33737, 33738, 33739, 33740, 33741, + 33742, 33743, 33744, 33745, 33746, 33747, -1, 33748, + 33749, 33750, 33751, 33752, 33753, 33754, 33755, 33756, + 33757, 33758, 33759, 33760, 33761, 33762, 33763, 33764, + 33765, 33766, 33767, 33768, 33769, 33770, 33771, 33772, + 33773, 33774, 33775, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 33776, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33777, 33778, 33779, 33780, 33781, + 33782, 33783, 33784, 33785, 33786, 33787, 33788, 33789, + 33790, 33791, 33792, 33793, 33794, 33795, 33796, 33797, + 33798, 33799, 33800, 33801, 33802, 33803, 33804, 33805, + 33806, 33807, 33808, 33809, 33810, 33811, 33812, 33813, + 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, + 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, + 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, + 1094, 1096, 1098, 1100, 1102, 1104, 1106, 1108, + 1110, 1112, 1114, 1116, 1118, 1120, 1122, 1124, + 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, + 1142, 1144, 1146, 1148, 1150, 1152, 1154, 1156, + 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, + 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, + 1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, + 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, + 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, + 1238, 1240, 1242, 1244, 1246, 1248, 1250, 1252, + 1254, 1256, 1258, 1260, 1262, 1264, 1266, 1268, + 1270, 1272, 1274, 1276, 1278, 1280, 1282, 1284, + 1286, 1288, 1290, 1292, 1294, 1296, 1298, 1300, + 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1316, + 1318, 1320, 1322, 1324, 1326, 1328, 1330, 1332, + 1334, 1336, 1338, 1340, 1342, 1344, 1346, 1348, + 1350, 1352, 34122, 1356, -1, -1, -1, -1, + 1358, 1360, 1362, 1364, 1366, 1368, 1370, 1372, + 1374, 1376, 1378, 1380, 1382, 1384, 1386, 1388, + 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, + 1406, 1408, 1410, 1412, 1414, 1416, 1418, 1420, + 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, + 1438, 1440, 1442, 1444, 1446, 1448, 1450, 1452, + 1454, 1456, 1458, 1460, 1462, 1464, 1466, 1468, + 1470, 1472, 1474, 1476, 1478, 1480, 1482, 1484, + 1486, 1488, 1490, 1492, 1494, 1496, 1498, 1500, + 1502, 1504, 1506, 1508, 1510, 1512, 1514, 1516, + 1518, 1520, 1522, 1524, 1526, 1528, 1530, 1532, + 1534, 1536, -1, -1, -1, -1, -1, -1, + 1538, 1540, 1542, 1544, 1546, 1548, 1550, 1552, + 1554, 1556, 1558, 1560, 1562, 1564, 1566, 1568, + 1570, 1572, 1574, 1576, 1578, 1580, -1, -1, + 1582, 1584, 1586, 1588, 1590, 1592, -1, -1, + 1594, 1596, 1598, 1600, 1602, 1604, 1606, 1608, + 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, + 1626, 1628, 1630, 1632, 1634, 1636, 1638, 1640, + 1642, 1644, 1646, 1648, 1650, 1652, 1654, 1656, + 1658, 1660, 1662, 1664, 1666, 1668, -1, -1, + 1670, 1672, 1674, 1676, 1678, 1680, -1, -1, + 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, + -1, 1698, -1, 1700, -1, 1702, -1, 1704, + 1706, 1708, 1710, 1712, 1714, 1716, 1718, 1720, + 1722, 1724, 1726, 1728, 1730, 1732, 1734, 1736, + 1738, 1740, 1741, 1743, 1744, 1746, 1747, 1749, + 1750, 1752, 1753, 1755, 1756, 1758, -1, -1, + 1759, 1761, 1763, 1765, 1767, 1769, 1771, 1773, + 1775, 1777, 1779, 1781, 1783, 1785, 1787, 1789, + 1791, 1793, 1795, 1797, 1799, 1801, 1803, 1805, + 1807, 1809, 1811, 1813, 1815, 1817, 1819, 1821, + 1823, 1825, 1827, 1829, 1831, 1833, 1835, 1837, + 1839, 1841, 1843, 1845, 1847, 1849, 1851, 1853, + 1855, 1857, 1859, 1861, 1863, -1, 1865, 1867, + 1869, 1871, 1873, 1875, 1876, 34646, 1880, 34649, + 34651, 1885, 1887, 1889, 1891, -1, 1893, 1895, + 1897, 1899, 1900, 1902, 1903, 1905, 1907, 1909, + 1911, 1913, 1915, 1917, -1, -1, 1918, 1920, + 1922, 1924, 1926, 1928, -1, 1929, 1931, 1933, + 1935, 1937, 1939, 1941, 1942, 1944, 1946, 1948, + 1950, 1952, 1954, 1956, 1957, 1959, 1961, 1962, + -1, -1, 1963, 1965, 1967, -1, 1969, 1971, + 1973, 1975, 1976, 1978, 1979, 1981, 34750, -1, + 1984, 1985, 34754, 34755, 34756, 34757, 34758, 34759, + 34760, 34761, 34762, -1, -1, -1, -1, -1, + -1, 34763, -1, -1, -1, -1, -1, 34764, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 34766, 34767, 34769, -1, + -1, -1, -1, -1, -1, -1, -1, 34772, + -1, -1, -1, 34773, 34775, -1, 34778, 34780, + -1, -1, -1, -1, 34783, -1, 34785, -1, + -1, -1, -1, -1, -1, -1, -1, 34787, + 34789, 34791, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 34793, + -1, -1, -1, -1, -1, -1, -1, 34797, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 34798, 34799, -1, -1, 34800, 34801, 34802, 34803, + 34804, 34805, 34806, 34807, 34808, 34809, 34810, 34811, + 34812, 34813, 34814, 34815, 34816, 34817, 34818, 34819, + 34820, 34821, 34822, 34823, 34824, 34825, 34826, -1, + 34827, 34828, 34829, 34830, 34831, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 34832, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 34834, 34837, 34840, 34841, -1, 34843, 34846, 34849, + -1, 34850, 34852, 34853, 34854, 34855, 34856, 34857, + 34858, 34859, 34860, 34861, -1, 34862, 34863, -1, + -1, 34865, 34866, 34867, 34868, 34869, -1, -1, + 34870, 34872, 34875, -1, 34877, -1, 2110, -1, + 34879, -1, 2112, 2113, 34882, 34883, -1, 34884, + 34885, 34886, -1, 34887, 34888, 34889, 34890, 34891, + 34892, 34893, -1, 34894, 34897, 34898, 34899, 34900, + 34901, -1, -1, -1, -1, 34902, 34903, 34904, + 34905, 34906, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 34907, 34910, 34913, 34916, 34919, + 34922, 34925, 34928, 34931, 34934, 34937, 34940, 34943, + 34945, 34946, 34948, 34951, 34953, 34954, 34956, 34959, + 34963, 34965, 34966, 34968, 34971, 34972, 34973, 34974, + 34975, 34976, 34978, 34981, 34983, 34984, 34986, 34989, + 34993, 34995, 34996, 34998, 35001, 35002, 35003, 35004, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 2237, 2239, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 2241, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2243, 2245, 2247, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2249, -1, -1, -1, + -1, 2251, -1, -1, 2253, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2255, -1, 2257, -1, + -1, -1, -1, -1, 35027, 35029, -1, 35032, + 35034, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2269, -1, -1, 2271, -1, -1, 2273, + -1, 2275, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2277, -1, 2279, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 2281, 2283, 2285, + 2287, 2289, -1, -1, 2291, 2293, -1, -1, + 2295, 2297, -1, -1, -1, -1, -1, -1, + 2299, 2301, -1, -1, 2303, 2305, -1, -1, + 2307, 2309, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2311, 2313, 2315, 2317, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 2319, 2321, 2323, 2325, -1, -1, -1, -1, + -1, -1, 2327, 2329, 2331, 2333, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 2335, 2336, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 35105, 35106, 35107, 35108, 35109, 35110, 35111, 35112, + 35113, 35114, 35116, 35118, 35120, 35122, 35124, 35126, + 35128, 35130, 35132, 35134, 35136, 35139, 35142, 35145, + 35148, 35151, 35154, 35157, 35160, 35163, 35167, 35171, + 35175, 35179, 35183, 35187, 35191, 35195, 35199, 35203, + 35207, 35209, 35211, 35213, 35215, 35217, 35219, 35221, + 35223, 35225, 35228, 35231, 35234, 35237, 35240, 35243, + 35246, 35249, 35252, 35255, 35258, 35261, 35264, 35267, + 35270, 35273, 35276, 35279, 35282, 35285, 35288, 35291, + 35294, 35297, 35300, 35303, 35306, 35309, 35312, 35315, + 35318, 35321, 35324, 35327, 35330, 35333, 35336, 35337, + 35338, 35339, 35340, 35341, 35342, 35343, 35344, 35345, + 35346, 35347, 35348, 35349, 35350, 35351, 35352, 35353, + 35354, 35355, 35356, 35357, 35358, 35359, 35360, 35361, + 35362, 35363, 35364, 35365, 35366, 35367, 35368, 35369, + 35370, 35371, 35372, 35373, 35374, 35375, 35376, 35377, + 35378, 35379, 35380, 35381, 35382, 35383, 35384, 35385, + 35386, 35387, 35388, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 35389, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 35393, 35396, 35398, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2633, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 35403, 35404, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 35405, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 35406, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 35407, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 35408, 35409, 35410, 35411, 35412, 35413, 35414, 35415, + 35416, 35417, 35418, 35419, 35420, 35421, 35422, 35423, + 35424, 35425, 35426, 35427, 35428, 35429, 35430, 35431, + 35432, 35433, 35434, 35435, 35436, 35437, 35438, 35439, + 35440, 35441, 35442, 35443, 35444, 35445, 35446, 35447, + 35448, 35449, 35450, 35451, 35452, 35453, 35454, 35455, + 35456, 35457, 35458, 35459, 35460, 35461, 35462, 35463, + 35464, 35465, 35466, 35467, 35468, 35469, 35470, 35471, + 35472, 35473, 35474, 35475, 35476, 35477, 35478, 35479, + 35480, 35481, 35482, 35483, 35484, 35485, 35486, 35487, + 35488, 35489, 35490, 35491, 35492, 35493, 35494, 35495, + 35496, 35497, 35498, 35499, 35500, 35501, 35502, 35503, + 35504, 35505, 35506, 35507, 35508, 35509, 35510, 35511, + 35512, 35513, 35514, 35515, 35516, 35517, 35518, 35519, + 35520, 35521, 35522, 35523, 35524, 35525, 35526, 35527, + 35528, 35529, 35530, 35531, 35532, 35533, 35534, 35535, + 35536, 35537, 35538, 35539, 35540, 35541, 35542, 35543, + 35544, 35545, 35546, 35547, 35548, 35549, 35550, 35551, + 35552, 35553, 35554, 35555, 35556, 35557, 35558, 35559, + 35560, 35561, 35562, 35563, 35564, 35565, 35566, 35567, + 35568, 35569, 35570, 35571, 35572, 35573, 35574, 35575, + 35576, 35577, 35578, 35579, 35580, 35581, 35582, 35583, + 35584, 35585, 35586, 35587, 35588, 35589, 35590, 35591, + 35592, 35593, 35594, 35595, 35596, 35597, 35598, 35599, + 35600, 35601, 35602, 35603, 35604, 35605, 35606, 35607, + 35608, 35609, 35610, 35611, 35612, 35613, 35614, 35615, + 35616, 35617, 35618, 35619, 35620, 35621, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 35622, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 35623, -1, + 35624, 35625, 35626, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2859, -1, 2861, -1, + 2863, -1, 2865, -1, 2867, -1, 2869, -1, + 2871, -1, 2873, -1, 2875, -1, 2877, -1, + 2879, -1, 2881, -1, -1, 2883, -1, 2885, + -1, 2887, -1, -1, -1, -1, -1, -1, + 2889, 2891, -1, 2893, 2895, -1, 2897, 2899, + -1, 2901, 2903, -1, 2905, 2907, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2909, -1, -1, -1, + -1, -1, -1, 35679, 35681, -1, 2915, 35685, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2919, -1, 2921, -1, + 2923, -1, 2925, -1, 2927, -1, 2929, -1, + 2931, -1, 2933, -1, 2935, -1, 2937, -1, + 2939, -1, 2941, -1, -1, 2943, -1, 2945, + -1, 2947, -1, -1, -1, -1, -1, -1, + 2949, 2951, -1, 2953, 2955, -1, 2957, 2959, + -1, 2961, 2963, -1, 2965, 2967, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 2969, -1, -1, 2971, + 2973, 2975, 2977, -1, -1, -1, 2979, 35749, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, 35751, 35752, 35753, 35754, 35755, 35756, 35757, + 35758, 35759, 35760, 35761, 35762, 35763, 35764, 35765, + 35766, 35767, 35768, 35769, 35770, 35771, 35772, 35773, + 35774, 35775, 35776, 35777, 35778, 35779, 35780, 35781, + 35782, 35783, 35784, 35785, 35786, 35787, 35788, 35789, + 35790, 35791, 35792, 35793, 35794, 35795, 35796, 35797, + 35798, 35799, 35800, 35801, 35802, 35803, 35804, 35805, + 35806, 35807, 35808, 35809, 35810, 35811, 35812, 35813, + 35814, 35815, 35816, 35817, 35818, 35819, 35820, 35821, + 35822, 35823, 35824, 35825, 35826, 35827, 35828, 35829, + 35830, 35831, 35832, 35833, 35834, 35835, 35836, 35837, + 35838, 35839, 35840, 35841, 35842, 35843, 35844, -1, + -1, -1, 35845, 35846, 35847, 35848, 35849, 35850, + 35851, 35852, 35853, 35854, 35855, 35856, 35857, 35858, + 35859, 35862, 35865, 35868, 35871, 35874, 35877, 35880, + 35883, 35886, 35889, 35892, 35895, 35898, 35901, 35905, + 35909, 35913, 35917, 35921, 35925, 35929, 35933, 35937, + 35941, 35945, 35949, 35953, 35957, 35961, 35968, -1, + 35974, 35977, 35980, 35983, 35986, 35989, 35992, 35995, + 35998, 36001, 36004, 36007, 36010, 36013, 36016, 36019, + 36022, 36025, 36028, 36031, 36034, 36037, 36040, 36043, + 36046, 36049, 36052, 36055, 36058, 36061, 36064, 36067, + 36070, 36073, 36076, 36079, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 36082, 36085, 36087, 36089, 36091, 36093, 36095, 36097, + 36099, 36101, 36103, 36105, 36107, 36109, 36111, 36113, + 36115, 36116, 36117, 36118, 36119, 36120, 36121, 36122, + 36123, 36124, 36125, 36126, 36127, 36128, 36129, 36131, + 36133, 36135, 36137, 36139, 36141, 36143, 36145, 36147, + 36149, 36151, 36153, 36155, 36157, 36162, 36166, -1, + 36168, 36169, 36170, 36171, 36172, 36173, 36174, 36175, + 36176, 36177, 36178, 36179, 36180, 36181, 36182, 36183, + 36184, 36185, 36186, 36187, 36188, 36189, 36190, 36191, + 36192, 36193, 36194, 36195, 36196, 36197, 36198, 36199, + 36200, 36201, 36202, 36203, 36204, 36205, 36206, 36207, + 36208, 36209, 36210, 36211, 36212, 36213, 36214, 36215, + 36216, 36217, 36219, 36221, 36223, 36225, 36227, 36229, + 36231, 36233, 36235, 36237, 36239, 36241, 36243, 36245, + 36247, 36249, 36251, 36253, 36255, 36257, 36259, 36261, + 36263, 36265, 36268, 36271, 36274, 36276, 36279, 36281, + 36284, 36285, 36286, 36287, 36288, 36289, 36290, 36291, + 36292, 36293, 36294, 36295, 36296, 36297, 36298, 36299, + 36300, 36301, 36302, 36303, 36304, 36305, 36306, 36307, + 36308, 36309, 36310, 36311, 36312, 36313, 36314, 36315, + 36316, 36317, 36318, 36319, 36320, 36321, 36322, 36323, + 36324, 36325, 36326, 36327, 36328, 36329, 36330, -1, + 36331, 36335, 36339, 36343, 36346, 36350, 36353, 36356, + 36361, 36365, 36368, 36371, 36374, 36378, 36382, 36385, + 36388, 36390, 36393, 36397, 36401, 36403, 36408, 36414, + 36419, 36422, 36427, 36432, 36436, 36439, 36442, 36445, + 36449, 36454, 36458, 36461, 36464, 36467, 36469, 36471, + 36473, 36475, 36478, 36481, 36486, 36489, 36493, 36498, + 36501, 36503, 36505, 36510, 36514, 36519, 36522, 36527, + 36529, 36532, 36535, 36538, 36541, 36544, 36548, 36551, + 36553, 36556, 36559, 36562, 36566, 36569, 36572, 36575, + 36580, 36584, 36586, 36591, 36593, 36597, 36601, 36604, + 36607, 36610, 36614, 36616, 36619, 36623, 36625, 36630, + 36633, 36635, 36637, 36639, 36641, 36643, 36645, 36647, + 36649, 36651, 36653, 36656, 36659, 36662, 36665, 36668, + 36671, 36674, 36677, 36680, 36683, 36686, 36689, 36692, + 36695, 36698, 36701, 36703, 36705, 36708, 36710, 36712, + 36714, 36717, 36720, 36722, 36724, 36726, 36728, 36730, + 36734, 36736, 36738, 36740, 36742, 36744, 36746, 36748, + 36750, 36753, 36757, 36759, 36761, 36763, 36765, 36767, + 36769, 36771, 36774, 36777, 36780, 36783, 36785, 36787, + 36789, 36791, 36793, 36795, 36797, 36799, 36801, 36803, + 36806, 36809, 36811, 36814, 36817, 36820, 36822, 36825, + 36828, 36832, 36834, 36837, 36840, 36843, 36846, 36851, + 36857, 36859, 36861, 36863, 36865, 36867, 36869, 36871, + 36873, 36875, 36877, 36879, 36881, 36883, 36885, 36887, + 36889, 36891, 36893, 36897, 36899, 36901, 36903, 36907, + 36910, 36912, 36914, 36916, 36918, 36920, 36922, 36924, + 36926, 36928, 36930, 36933, 36935, 36937, 36940, 36943, + 36945, 36949, 36952, 36954, 36956, 36958, 36960, 36963, + 36966, 36968, 36970, 36972, 36974, 36976, 36978, 36980, + 36982, 36984, 36987, 36990, 36993, 36996, 36999, 37002, + 37005, 37008, 37011, 37014, 37017, 37020, 37023, 37026, + 37029, 37032, 37035, 37038, 37041, 37044, 37047, 37050, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 37053, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, + 4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, + 4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, + 4310, 4311, 4312, 4313, 4314, 4315, 4316, 4317, + 4318, 4319, 4320, 4321, 4322, 4323, 4324, 4325, + 4326, 4327, 4328, 4329, 4330, 4331, 4332, 4333, + 4334, 4335, 4336, 4337, 4338, 4339, 4340, 4341, + 4342, 4343, 4344, 4345, 4346, 4347, 4348, 4349, + 4350, 4351, 4352, 4353, 4354, 4355, 4356, 4357, + 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4365, + 4366, 4367, 4368, 4369, 4370, 4371, 4372, 4373, + 4374, 4375, 4376, 4377, 4378, 4379, 4380, 4381, + 4382, 4383, 4384, 4385, 4386, 4387, 4388, 4389, + 4390, 4391, 4392, 4393, 4394, 4395, 4396, 4397, + 4398, 4399, 4400, 4401, 4402, 4403, 4404, 4405, + 4406, 4407, 4408, 4409, 4410, 4411, 4412, 4413, + 4414, 4415, 4416, 4417, 4418, 4419, 4420, 4421, + 4422, 4423, 4424, 4425, 4426, 4427, 4428, 4429, + 4430, 4431, 4432, 4433, 4434, 4435, 4436, 4437, + 4438, 4439, 4440, 4441, 4442, 4443, 4444, 4445, + 4446, 4447, 4448, 4449, 4450, 4451, 4452, 4453, + 4454, 4455, 4456, 4457, 4458, 4459, 4460, 4461, + 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, + 4470, 4471, 4472, 4473, 4474, 4475, 4476, 4477, + 4478, 4479, 4480, 4481, 4482, 4483, 4484, 4485, + 4486, 4487, 4488, 4489, 4490, 4491, 4492, 4493, + 4494, 4495, 4496, 4497, 4498, 4499, 4500, 4501, + 4502, 4503, 4504, 4505, 4506, 4507, 4508, 4509, + 4510, 4511, 4512, 4513, 4514, 4515, 4516, 4517, + 4518, 4519, 4520, 4521, 4522, 4523, 4524, 4525, + 4526, 4527, 4528, 4529, 4530, 4531, 4532, 4533, + 4534, 4535, 4536, 4537, 4538, 4539, 4540, 4541, + 4542, 4543, 4544, 4545, 4546, 4547, 4548, 4549, + 4550, 4551, 4552, 4553, 4554, 4555, -1, -1, + 4556, -1, 4557, -1, -1, 4558, 4559, 4560, + 4561, 4562, 4563, 4564, 4565, 4566, 4567, -1, + 4568, -1, 4569, -1, -1, 4570, 4571, -1, + -1, -1, 4572, 4573, 4574, 4575, -1, -1, + 4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, + 4584, 4585, 4586, 4587, 4588, 4589, 4590, 4591, + 4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, + 4600, 4601, 4602, 4603, 4604, 4605, 4606, 4607, + 4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, + 4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, + 4624, 4625, 4626, 4627, 4628, 4629, 4630, 4631, + 4632, 4633, 4634, -1, -1, -1, -1, -1, + 4635, 4636, 4637, 4638, 4639, 4640, 4641, 4642, + 4643, 4644, 4645, 4646, 4647, 4648, 4649, 4650, + 4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, + 4659, 4660, 4661, 4662, 4663, 4664, 4665, 4666, + 4667, 4668, 4669, 4670, 4671, 4672, 4673, 4674, + 4675, 4676, 4677, 4678, 4679, 4680, 4681, 4682, + 4683, 4684, 4685, 4686, 4687, 4688, 4689, 4690, + 4691, 4692, 4693, 4694, 4695, 4696, 4697, 4698, + 4699, 4700, 4701, 4702, 4703, 4704, 4705, 4706, + 4707, 4708, 4709, 4710, 4711, 4712, 4713, 4714, + 4715, 4716, 4717, 4718, 4719, 4720, 4721, 4722, + 4723, 4724, 4725, 4726, 4727, 4728, 4729, 4730, + 4731, 4732, 4733, 4734, 4735, 4736, 4737, 4738, + 4739, 4740, -1, -1, -1, -1, -1, -1, + 37509, 37511, 37513, 37515, 37518, 37521, 37523, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 37525, 37527, 37529, 37531, 37533, + -1, -1, -1, -1, -1, 4767, -1, 4769, + 37539, 37540, 37541, 37542, 37543, 37544, 37545, 37546, + 37547, 37548, 4781, 4783, 4785, 4787, 4789, 4791, + 4793, 4795, 4797, 4799, 4801, 4803, 4805, -1, + 4807, 4809, 4811, 4813, 4815, -1, 4817, -1, + 4819, 4821, -1, 4823, 4825, -1, 4827, 4829, + 4831, 4833, 4835, 4837, 4839, 4841, 4843, 37613, + 37615, 37616, 37617, 37618, 37619, 37620, 37621, 37622, + 37623, 37624, 37625, 37626, 37627, 37628, 37629, 37630, + 37631, 37632, 37633, 37634, 37635, 37636, 37637, 37638, + 37639, 37640, 37641, 37642, 37643, 37644, 37645, 37646, + 37647, 37648, 37649, 37650, 37651, 37652, 37653, 37654, + 37655, 37656, 37657, 37658, 37659, 37660, 37661, 37662, + 37663, 37664, 37665, 37666, 37667, 37668, 37669, 37670, + 37671, 37672, 37673, 37674, 37675, 37676, 37677, 37678, + 37679, 37680, 37681, 37682, 37683, 37684, 37685, 37686, + 37687, 37688, 37689, 37690, 37691, 37692, 37693, 37694, + 37695, 37696, 37697, 37698, 37699, 37700, 37701, 37702, + 37703, 37704, 37705, 37706, 37707, 37708, 37709, 37710, + 37711, 37712, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 37713, 37714, 37715, 37716, 37717, + 37718, 37719, 37720, 37721, 37722, 37723, 37724, 37725, + 37726, 37727, 37728, 37729, 37730, 37731, 37732, 37733, + 37734, 37735, 37736, 37738, 37740, 37742, 37744, 37746, + 37748, 37750, 37752, 37754, 37756, 37758, 37760, 37762, + 37764, 37766, 37768, 37770, 37772, 37773, 37774, 37775, + 37776, 37778, 37780, 37782, 37784, 37786, 37788, 37790, + 37792, 37794, 37796, 37798, 37800, 37802, 37804, 37806, + 37808, 37810, 37812, 37814, 37816, 37818, 37820, 37822, + 37824, 37826, 37828, 37830, 37832, 37834, 37836, 37838, + 37840, 37842, 37844, 37846, 37848, 37850, 37852, 37854, + 37856, 37858, 37860, 37862, 37864, 37866, 37868, 37870, + 37872, 37874, 37876, 37878, 37880, 37882, 37884, 37886, + 37888, 37890, 37892, 37894, 37896, 37898, 37900, 37902, + 37904, 37906, 37908, 37910, 37912, 37914, 37916, 37918, + 37920, 37922, 37924, 37926, 37928, 37930, 37932, 37934, + 37936, 37938, 37940, 37942, 37944, 37946, 37948, 37950, + 37952, 37954, 37956, 37958, 37960, 37962, 37964, 37967, + 37970, 37973, 37976, 37979, 37982, 37984, 37986, 37988, + 37990, 37992, 37994, 37996, 37998, 38000, 38002, 38004, + 38006, 38008, 38010, 38012, 38014, 38016, 38018, 38020, + 38022, 38024, 38026, 38028, 38030, 38032, 38034, 38036, + 38038, 38040, 38042, 38044, 38046, 38048, 38050, 38052, + 38054, 38056, 38058, 38060, 38062, 38064, 38066, 38068, + 38070, 38072, 38074, 38076, 38078, 38080, 38082, 38084, + 38086, 38088, 38090, 38092, 38094, 38096, 38098, 38100, + 38102, 38104, 38106, 38108, 38110, 38112, 38114, 38116, + 38118, 38120, 38122, 38124, 38126, 38128, 38130, 38132, + 38134, 38136, 38138, 38140, 38142, 38144, 38146, 38148, + 38150, 38152, 38154, 38156, 38158, 38160, 38162, 38164, + 38166, 38168, 38170, 38172, 38174, 38176, 38178, 38180, + 38182, 38184, 38186, 38188, 38190, 38192, 38194, 38196, + 38198, 38200, 38202, 38204, 38206, 38208, 38210, 38212, + 38214, 38216, 38218, 38220, 38222, 38224, 38226, 38228, + 38230, 38232, 38234, 38236, 38238, 38240, 38242, 38244, + 38246, 38248, 38250, 38252, 38254, 38256, 38258, 38260, + 38262, 38264, 38266, 38269, 38272, 38275, 38277, 38279, + 38281, 38283, 38285, 38287, 38289, 38291, 38293, 38295, + 38297, 38299, 38301, 38303, 38305, 38307, 38309, 38311, + 38313, 38315, 38317, 38319, 38321, 38323, 38325, 38327, + 38329, 38331, 38333, 38335, 38337, 38339, 38341, 38343, + 38345, 38347, 38349, 38351, 38353, 38355, 38357, 38359, + 38361, 38363, 38365, 38367, 38369, 38371, 38373, 38375, + 38377, 38379, 38381, 38383, 38385, 38387, 38389, 38391, + 38393, 38395, 38397, 38399, 38401, 38403, 38405, 38407, + 38409, 38411, 38413, 38415, 38417, 38419, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 38421, 38424, 38427, 38430, 38433, 38436, 38439, 38442, + 38445, 38448, 38451, 38454, 38457, 38460, 38463, 38466, + 38469, 38472, 38475, 38478, 38481, 38484, 38487, 38490, + 38493, 38496, 38499, 38502, 38505, 38508, 38511, 38514, + 38517, 38520, 38523, 38526, 38529, 38532, 38535, 38538, + 38541, 38544, 38547, 38550, 38553, 38556, 38559, 38562, + 38565, 38568, 38571, 38574, 38577, 38580, 38583, 38586, + 38589, 38592, 38595, 38598, 38601, 38604, 38607, 38610, + -1, -1, 38613, 38616, 38619, 38622, 38625, 38628, + 38631, 38634, 38637, 38640, 38643, 38646, 38649, 38652, + 38655, 38658, 38661, 38664, 38667, 38670, 38673, 38676, + 38679, 38682, 38685, 38688, 38691, 38694, 38697, 38700, + 38703, 38706, 38709, 38712, 38715, 38718, 38721, 38724, + 38727, 38730, 38733, 38736, 38739, 38742, 38745, 38748, + 38751, 38754, 38757, 38760, 38763, 38766, 38769, 38772, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 38775, 38778, 38781, 38785, 38789, 38793, 38797, 38801, + 38805, 38809, 38812, 38830, 38838, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 38842, 38843, 38844, 38845, 38846, 38847, 38848, 38849, + 38850, 38851, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 38852, 38853, 38854, 38855, 38856, 38857, 38858, 38859, + 38860, 38861, 38862, 38863, 38864, 38865, 38866, 38867, + 38868, 38869, 38870, 38871, 38872, -1, -1, 38873, + 38874, 38875, 38876, 38877, 38878, 38879, 38880, 38881, + 38882, 38883, 38884, -1, 38885, 38886, 38887, 38888, + 38889, 38890, 38891, 38892, 38893, 38894, 38895, 38896, + 38897, 38898, 38899, 38900, 38901, 38902, 38903, -1, + 38904, 38905, 38906, 38907, -1, -1, -1, -1, + 38908, 38910, 38912, -1, 38914, -1, 38916, 38918, + 38920, 38922, 38924, 38926, 38928, 38930, 38932, 38934, + 38936, 38937, 38938, 38939, 38940, 38941, 38942, 38943, + 38944, 38945, 38946, 38947, 38948, 38949, 38950, 38951, + 38952, 38953, 38954, 38955, 38956, 38957, 38958, 38959, + 38960, 38961, 38962, 38963, 38964, 38965, 38966, 38967, + 38968, 38969, 38970, 38971, 38972, 38973, 38974, 38975, + 38976, 38977, 38978, 38979, 38980, 38981, 38982, 38983, + 38984, 38985, 38986, 38987, 38988, 38989, 38990, 38991, + 38992, 38993, 38994, 38995, 38996, 38997, 38998, 38999, + 39000, 39001, 39002, 39003, 39004, 39005, 39006, 39007, + 39008, 39009, 39010, 39011, 39012, 39013, 39014, 39015, + 39016, 39017, 39018, 39019, 39020, 39021, 39022, 39023, + 39024, 39025, 39026, 39027, 39028, 39029, 39030, 39031, + 39032, 39033, 39034, 39035, 39036, 39037, 39038, 39039, + 39040, 39041, 39042, 39043, 39044, 39045, 39046, 39047, + 39048, 39049, 39050, 39051, 39052, 39053, 39055, 39057, + 39059, 39061, 39063, 39065, 39067, -1, -1, -1, + -1, 39069, 39070, 39071, 39072, 39073, 39074, 39075, + 39076, 39077, 39078, 39079, 39080, 39081, 39082, 39083, + 39084, 39085, 39086, 39087, 39088, 39089, 39090, 39091, + 39092, 39093, 39094, 39095, 39096, 39097, 39098, 39099, + 39100, 39101, 39102, 39103, 39104, 39105, 39106, 39107, + 39108, 39109, 39110, 39111, 39112, 39113, 39114, 39115, + 39116, 39117, 39118, 39119, 39120, 39121, 39122, 39123, + 39124, 39125, 39126, 39127, 39128, 39129, 39130, 39131, + 39132, 39133, 39134, 39135, 39136, 39137, 39138, 39139, + 39140, 39141, 39142, 39143, 39144, 39145, 39146, 39147, + 39148, 39149, 39150, 39151, 39152, 39153, 39154, 39155, + 39156, 39157, 39158, 39159, 39160, 39161, 39162, 39163, + 39164, 39165, 39166, 39167, 39168, 39169, 39170, 39171, + 39172, 39173, 39174, 39175, 39176, 39177, 39178, 39179, + 39180, 39181, 39182, 39183, 39184, 39185, 39186, 39187, + 39188, 39189, 39190, 39191, 39192, 39193, 39194, 39195, + 39196, 39197, 39198, 39199, 39200, 39201, 39202, 39203, + 39204, 39205, 39206, 39207, 39208, 39209, 39210, 39211, + 39212, 39213, 39214, 39215, 39216, 39217, 39218, 39219, + 39220, 39221, 39222, 39223, 39224, 39225, 39226, 39227, + 39228, 39229, 39230, 39231, 39232, 39233, 39234, 39235, + 39236, 39237, 39238, 39239, 39240, 39241, 39242, 39243, + 39244, 39245, 39246, 39247, 39248, 39249, 39250, 39251, + 39252, 39253, 39254, 39255, 39256, 39257, 39258, -1, + -1, -1, 39259, 39260, 39261, 39262, 39263, 39264, + -1, -1, 39265, 39266, 39267, 39268, 39269, 39270, + -1, -1, 39271, 39272, 39273, 39274, 39275, 39276, + -1, -1, 39277, 39278, 39279, -1, -1, -1, + 39280, 39281, 39282, 39283, 39284, 39285, 39286, -1, + 39287, 39288, 39289, 39290, 39291, 39292, 39293, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 6526, 6528, + 6530, 6532, 6534, 6536, 6538, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 6540, 6542, 6544, 6546, 6548, + 6550, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 39320, 39321, 39322, 39323, 39324, 39325, 39326, 39327, + 39328, 39329, 39330, 39331, 39332, 39333, 39334, 39335, + 39336, 39337, 39338, 39339, 39340, 39341, 39342, 39343, + 39344, 39345, 39346, 39347, 39348, 39349, 39350, 39351, + 39352, 39353, 39354, 39355, 39356, 39357, 39358, 39359, + 39360, 39361, 39362, 39363, 39364, 39365, 39366, 39367, + 39368, 39369, 39370, 39371, 39372, 39373, 39374, 39375, + 39376, 39377, 39378, 39379, 39380, 39381, 39382, 39383, + 39384, 39385, 39386, 39387, 39388, 39389, 39390, 39391, + 39392, 39393, 39394, 39395, 39396, 39397, 39398, 39399, + 39400, 39401, 39402, 39403, 39404, -1, 39405, 39406, + 39407, 39408, 39409, 39410, 39411, 39412, 39413, 39414, + 39415, 39416, 39417, 39418, 39419, 39420, 39421, 39422, + 39423, 39424, 39425, 39426, 39427, 39428, 39429, 39430, + 39431, 39432, 39433, 39434, 39435, 39436, 39437, 39438, + 39439, 39440, 39441, 39442, 39443, 39444, 39445, 39446, + 39447, 39448, 39449, 39450, 39451, 39452, 39453, 39454, + 39455, 39456, 39457, 39458, 39459, 39460, 39461, 39462, + 39463, 39464, 39465, 39466, 39467, 39468, 39469, 39470, + 39471, 39472, 39473, 39474, 39475, -1, 39476, 39477, + -1, -1, 39478, -1, -1, 39479, 39480, -1, + -1, 39481, 39482, 39483, 39484, -1, 39485, 39486, + 39487, 39488, 39489, 39490, 39491, 39492, 39493, 39494, + 39495, 39496, -1, 39497, -1, 39498, 39499, 39500, + 39501, 39502, 39503, 39504, -1, 39505, 39506, 39507, + 39508, 39509, 39510, 39511, 39512, 39513, 39514, 39515, + 39516, 39517, 39518, 39519, 39520, 39521, 39522, 39523, + 39524, 39525, 39526, 39527, 39528, 39529, 39530, 39531, + 39532, 39533, 39534, 39535, 39536, 39537, 39538, 39539, + 39540, 39541, 39542, 39543, 39544, 39545, 39546, 39547, + 39548, 39549, 39550, 39551, 39552, 39553, 39554, 39555, + 39556, 39557, 39558, 39559, 39560, 39561, 39562, 39563, + 39564, 39565, 39566, 39567, 39568, 39569, -1, 39570, + 39571, 39572, 39573, -1, -1, 39574, 39575, 39576, + 39577, 39578, 39579, 39580, 39581, -1, 39582, 39583, + 39584, 39585, 39586, 39587, 39588, -1, 39589, 39590, + 39591, 39592, 39593, 39594, 39595, 39596, 39597, 39598, + 39599, 39600, 39601, 39602, 39603, 39604, 39605, 39606, + 39607, 39608, 39609, 39610, 39611, 39612, 39613, 39614, + 39615, 39616, -1, 39617, 39618, 39619, 39620, -1, + 39621, 39622, 39623, 39624, 39625, -1, 39626, -1, + -1, -1, 39627, 39628, 39629, 39630, 39631, 39632, + 39633, -1, 39634, 39635, 39636, 39637, 39638, 39639, + 39640, 39641, 39642, 39643, 39644, 39645, 39646, 39647, + 39648, 39649, 39650, 39651, 39652, 39653, 39654, 39655, + 39656, 39657, 39658, 39659, 39660, 39661, 39662, 39663, + 39664, 39665, 39666, 39667, 39668, 39669, 39670, 39671, + 39672, 39673, 39674, 39675, 39676, 39677, 39678, 39679, + 39680, 39681, 39682, 39683, 39684, 39685, 39686, 39687, + 39688, 39689, 39690, 39691, 39692, 39693, 39694, 39695, + 39696, 39697, 39698, 39699, 39700, 39701, 39702, 39703, + 39704, 39705, 39706, 39707, 39708, 39709, 39710, 39711, + 39712, 39713, 39714, 39715, 39716, 39717, 39718, 39719, + 39720, 39721, 39722, 39723, 39724, 39725, 39726, 39727, + 39728, 39729, 39730, 39731, 39732, 39733, 39734, 39735, + 39736, 39737, 39738, 39739, 39740, 39741, 39742, 39743, + 39744, 39745, 39746, 39747, 39748, 39749, 39750, 39751, + 39752, 39753, 39754, 39755, 39756, 39757, 39758, 39759, + 39760, 39761, 39762, 39763, 39764, 39765, 39766, 39767, + 39768, 39769, 39770, 39771, 39772, 39773, 39774, 39775, + 39776, 39777, 39778, 39779, 39780, 39781, 39782, 39783, + 39784, 39785, 39786, 39787, 39788, 39789, 39790, 39791, + 39792, 39793, 39794, 39795, 39796, 39797, 39798, 39799, + 39800, 39801, 39802, 39803, 39804, 39805, 39806, 39807, + 39808, 39809, 39810, 39811, 39812, 39813, 39814, 39815, + 39816, 39817, 39818, 39819, 39820, 39821, 39822, 39823, + 39824, 39825, 39826, 39827, 39828, 39829, 39830, 39831, + 39832, 39833, 39834, 39835, 39836, 39837, 39838, 39839, + 39840, 39841, 39842, 39843, 39844, 39845, 39846, 39847, + 39848, 39849, 39850, 39851, 39852, 39853, 39854, 39855, + 39856, 39857, 39858, 39859, 39860, 39861, 39862, 39863, + 39864, 39865, 39866, 39867, 39868, 39869, 39870, 39871, + 39872, 39873, 39874, 39875, 39876, 39877, 39878, 39879, + 39880, 39881, 39882, 39883, 39884, 39885, 39886, 39887, + 39888, 39889, 39890, 39891, 39892, 39893, 39894, 39895, + 39896, 39897, 39898, 39899, 39900, 39901, 39902, 39903, + 39904, 39905, 39906, 39907, 39908, 39909, 39910, 39911, + 39912, 39913, 39914, 39915, 39916, 39917, 39918, 39919, + 39920, 39921, 39922, 39923, 39924, 39925, 39926, 39927, + 39928, 39929, 39930, 39931, 39932, 39933, 39934, 39935, + 39936, 39937, 39938, 39939, 39940, 39941, 39942, 39943, + 39944, 39945, 39946, 39947, 39948, 39949, 39950, 39951, + 39952, 39953, 39954, 39955, 39956, 39957, 39958, 39959, + 39960, 39961, 39962, 39963, 39964, 39965, 39966, 39967, + 39968, 39969, 39970, 39971, 39972, 39973, -1, -1, + 39974, 39975, 39976, 39977, 39978, 39979, 39980, 39981, + 39982, 39983, 39984, 39985, 39986, 39987, 39988, 39989, + 39990, 39991, 39992, 39993, 39994, 39995, 39996, 39997, + 39998, 39999, 40000, 40001, 40002, 40003, 40004, 40005, + 40006, 40007, 40008, 40009, 40010, 40011, 40012, 40013, + 40014, 40015, 40016, 40017, 40018, 40019, 40020, 40021, + 40022, 40023, 40024, 40025, 40026, 40027, 40028, 40029, + 40030, 40031, 40032, 40033, 40034, 40035, 40036, 40037, + 40038, 40039, 40040, 40041, 40042, 40043, 40044, 40045, + 40046, 40047, 40048, 40049, 40050, 40051, 40052, 40053, + 40054, 40055, 40056, 40057, 40058, 40059, 40060, 40061, + 40062, 40063, 40064, 40065, 40066, 40067, 40068, 40069, + 40070, 40071, 40072, 40073, 40074, 40075, 40076, 40077, + 40078, 40079, 40080, 40081, 40082, 40083, 40084, 40085, + 40086, 40087, 40088, 40089, 40090, 40091, 40092, 40093, + 40094, 40095, 40096, 40097, 40098, 40099, 40100, 40101, + 40102, 40103, 40104, 40105, 40106, 40107, 40108, 40109, + 40110, 40111, 40112, 40113, 40114, 40115, 40116, 40117, + 40118, 40119, 40120, 40121, 40122, 40123, 40124, 40125, + 40126, 40127, 40128, 40129, 40130, 40131, 40132, 40133, + 40134, 40135, 40136, 40137, 40138, 40139, 40140, 40141, + 40142, 40143, 40144, 40145, 40146, 40147, 40148, 40149, + 40150, 40151, 40152, 40153, 40154, 40155, 40156, 40157, + 40158, 40159, 40160, 40161, 40162, 40163, 40164, 40165, + 40166, 40167, 40168, 40169, 40170, 40171, 40172, 40173, + 40174, 40175, 40176, 40177, 40178, 40179, 40180, 40181, + 40182, 40183, 40184, 40185, 40186, 40187, 40188, 40189, + 40190, 40191, 40192, 40193, 40194, 40195, 40196, 40197, + 40198, 40199, 40200, 40201, 40202, 40203, 40204, 40205, + 40206, 40207, 40208, 40209, 40210, 40211, 40212, 40213, + 40214, 40215, 40216, 40217, 40218, 40219, 40220, 40221, + 40222, 40223, 40224, 40225, 40226, 40227, 40228, 40229, + 40230, 40231, 40232, 40233, 40234, 40235, 40236, 40237, + 40238, 40239, 40240, 40241, 40242, 40243, 40244, 40245, + 40246, 40247, 40248, 40249, 40250, 40251, 40252, 40253, + 40254, 40255, 40256, 40257, 40258, 40259, 40260, 40261, + 40262, 40263, 40264, 40265, -1, -1, 40266, 40267, + 40268, 40269, 40270, 40271, 40272, 40273, 40274, 40275, + 40276, 40277, 40278, 40279, 40280, 40281, 40282, 40283, + 40284, 40285, 40286, 40287, 40288, 40289, 40290, 40291, + 40292, 40293, 40294, 40295, 40296, 40297, 40298, 40299, + 40300, 40301, 40302, 40303, 40304, 40305, 40306, 40307, + 40308, 40309, 40310, 40311, 40312, 40313, 40314, 40315, + 7548, 7549, 7550, 7551, 7552, 7553, 7554, 7555, + 7556, 7557, 7558, 7559, 7560, 7561, 7562, 7563, + 7564, 7565, 7566, 7567, 7568, 7569, 7570, 7571, + 7572, 7573, 7574, 7575, 7576, 7577, 7578, 7579, + 7580, 7581, 7582, 7583, 7584, 7585, 7586, 7587, + 7588, 7589, 7590, 7591, 7592, 7593, 7594, 7595, + 7596, 7597, 7598, 7599, 7600, 7601, 7602, 7603, + 7604, 7605, 7606, 7607, 7608, 7609, 7610, 7611, + 7612, 7613, 7614, 7615, 7616, 7617, 7618, 7619, + 7620, 7621, 7622, 7623, 7624, 7625, 7626, 7627, + 7628, 7629, 7630, 7631, 7632, 7633, 7634, 7635, + 7636, 7637, 7638, 7639, 7640, 7641, 7642, 7643, + 7644, 7645, 7646, 7647, 7648, 7649, 7650, 7651, + 7652, 7653, 7654, 7655, 7656, 7657, 7658, 7659, + 7660, 7661, 7662, 7663, 7664, 7665, 7666, 7667, + 7668, 7669, 7670, 7671, 7672, 7673, 7674, 7675, + 7676, 7677, 7678, 7679, 7680, 7681, 7682, 7683, + 7684, 7685, 7686, 7687, 7688, 7689, 7690, 7691, + 7692, 7693, 7694, 7695, 7696, 7697, 7698, 7699, + 7700, 7701, 7702, 7703, 7704, 7705, 7706, 7707, + 7708, 7709, 7710, 7711, 7712, 7713, 7714, 7715, + 7716, 7717, 7718, 7719, 7720, 7721, 7722, 7723, + 7724, 7725, 7726, 7727, 7728, 7729, 7730, 7731, + 7732, 7733, 7734, 7735, 7736, 7737, 7738, 7739, + 7740, 7741, 7742, 7743, 7744, 7745, 7746, 7747, + 7748, 7749, 7750, 7751, 7752, 7753, 7754, 7755, + 7756, 7757, 7758, 7759, 7760, 7761, 7762, 7763, + 7764, 7765, 7766, 7767, 7768, 7769, 7770, 7771, + 7772, 7773, 7774, 7775, 7776, 7777, 7778, 7779, + 7780, 7781, 7782, 7783, 7784, 7785, 7786, 7787, + 7788, 7789, 7790, 7791, 7792, 7793, 7794, 7795, + 7796, 7797, 7798, 7799, 7800, 7801, 7802, 7803, + 7804, 7805, 7806, 7807, 7808, 7809, 7810, 7811, + 7812, 7813, 7814, 7815, 7816, 7817, 7818, 7819, + 7820, 7821, 7822, 7823, 7824, 7825, 7826, 7827, + 7828, 7829, 7830, 7831, 7832, 7833, 7834, 7835, + 7836, 7837, 7838, 7839, 7840, 7841, 7842, 7843, + 7844, 7845, 7846, 7847, 7848, 7849, 7850, 7851, + 7852, 7853, 7854, 7855, 7856, 7857, 7858, 7859, + 7860, 7861, 7862, 7863, 7864, 7865, 7866, 7867, + 7868, 7869, 7870, 7871, 7872, 7873, 7874, 7875, + 7876, 7877, 7878, 7879, 7880, 7881, 7882, 7883, + 7884, 7885, 7886, 7887, 7888, 7889, 7890, 7891, + 7892, 7893, 7894, 7895, 7896, 7897, 7898, 7899, + 7900, 7901, 7902, 7903, 7904, 7905, 7906, 7907, + 7908, 7909, 7910, 7911, 7912, 7913, 7914, 7915, + 7916, 7917, 7918, 7919, 7920, 7921, 7922, 7923, + 7924, 7925, 7926, 7927, 7928, 7929, 7930, 7931, + 7932, 7933, 7934, 7935, 7936, 7937, 7938, 7939, + 7940, 7941, 7942, 7943, 7944, 7945, 7946, 7947, + 7948, 7949, 7950, 7951, 7952, 7953, 7954, 7955, + 7956, 7957, 7958, 7959, 7960, 7961, 7962, 7963, + 7964, 7965, 7966, 7967, 7968, 7969, 7970, 7971, + 7972, 7973, 7974, 7975, 7976, 7977, 7978, 7979, + 7980, 7981, 7982, 7983, 7984, 7985, 7986, 7987, + 7988, 7989, 7990, 7991, 7992, 7993, 7994, 7995, + 7996, 7997, 7998, 7999, 8000, 8001, 8002, 8003, + 8004, 8005, 8006, 8007, 8008, 8009, 8010, 8011, + 8012, 8013, 8014, 8015, 8016, 8017, 8018, 8019, + 8020, 8021, 8022, 8023, 8024, 8025, 8026, 8027, + 8028, 8029, 8030, 8031, 8032, 8033, 8034, 8035, + 8036, 8037, 8038, 8039, 8040, 8041, 8042, 8043, + 8044, 8045, 8046, 8047, 8048, 8049, 8050, 8051, + 8052, 8053, 8054, 8055, 8056, 8057, 8058, 8059, + 8060, 8061, 8062, 8063, 8064, 8065, 8066, 8067, + 8068, 8069, 8070, 8071, 8072, 8073, 8074, 8075, + 8076, 8077, 8078, 8079, 8080, 8081, 8082, 8083, + 8084, 8085, 8086, 8087, 8088, 8089, -1, -1 + } +}; diff --git a/lib/uninorm/decomposition.c b/lib/uninorm/decomposition.c new file mode 100644 index 00000000..af030182 --- /dev/null +++ b/lib/uninorm/decomposition.c @@ -0,0 +1,102 @@ +/* Decomposition of Unicode characters. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include "decomposition-table.h" + +int +uc_decomposition (ucs4_t uc, int *decomp_tag, ucs4_t *decomposition) +{ + if (uc >= 0xAC00 && uc < 0xD7A4) + { + /* Hangul syllable. See Unicode standard, chapter 3, section + "Hangul Syllable Decomposition", See also the clarification at + , section + "Clarification of Hangul Jamo Handling". */ + unsigned int t; + + uc -= 0xAC00; + t = uc % 28; + + *decomp_tag = UC_DECOMP_CANONICAL; + if (t == 0) + { + unsigned int v, l; + + uc = uc / 28; + v = uc % 21; + l = uc / 21; + + decomposition[0] = 0x1100 + l; + decomposition[1] = 0x1161 + v; + return 2; + } + else + { +#if 1 /* Return the pairwise decomposition, not the full decomposition. */ + decomposition[0] = 0xAC00 + uc - t; /* = 0xAC00 + (l * 21 + v) * 28; */ + decomposition[1] = 0x11A7 + t; + return 2; +#else + unsigned int v, l; + + uc = uc / 28; + v = uc % 21; + l = uc / 21; + + decomposition[0] = 0x1100 + l; + decomposition[1] = 0x1161 + v; + decomposition[2] = 0x11A7 + t; + return 3; +#endif + } + } + else if (uc < 0x110000) + { + unsigned short entry = decomp_index (uc); + if (entry != (unsigned short)(-1)) + { + const unsigned char *p; + unsigned int element; + unsigned int length; + + p = &gl_uninorm_decomp_chars_table[3 * (entry & 0x7FFF)]; + element = (p[0] << 16) | (p[1] << 8) | p[2]; + /* The first element has 5 bits for the decomposition type. */ + *decomp_tag = (element >> 18) & 0x1f; + length = 1; + for (;;) + { + /* Every element has an 18 bits wide Unicode code point. */ + *decomposition = element & 0x3ffff; + /* Bit 23 tells whether there are more elements, */ + if ((element & (1 << 23)) == 0) + break; + p += 3; + element = (p[0] << 16) | (p[1] << 8) | p[2]; + decomposition++; + length++; + } + return length; + } + } + return -1; +} diff --git a/lib/uninorm/nfc.c b/lib/uninorm/nfc.c new file mode 100644 index 00000000..c205b166 --- /dev/null +++ b/lib/uninorm/nfc.c @@ -0,0 +1,31 @@ +/* Unicode Normalization Form C. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include "normalize-internal.h" + +const struct unicode_normalization_form uninorm_nfc = + { + NF_IS_COMPOSING, + uc_canonical_decomposition, + uc_composition, + &uninorm_nfd + }; diff --git a/lib/uninorm/nfd.c b/lib/uninorm/nfd.c new file mode 100644 index 00000000..54c98bc2 --- /dev/null +++ b/lib/uninorm/nfd.c @@ -0,0 +1,31 @@ +/* Unicode Normalization Form D. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include "normalize-internal.h" + +const struct unicode_normalization_form uninorm_nfd = + { + 0, + uc_canonical_decomposition, + NULL, + &uninorm_nfd + }; diff --git a/lib/uninorm/nfkc.c b/lib/uninorm/nfkc.c new file mode 100644 index 00000000..1fb52f13 --- /dev/null +++ b/lib/uninorm/nfkc.c @@ -0,0 +1,32 @@ +/* Unicode Normalization Form KC. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include "normalize-internal.h" +#include "decompose-internal.h" + +const struct unicode_normalization_form uninorm_nfkc = + { + NF_IS_COMPAT_DECOMPOSING | NF_IS_COMPOSING, + uc_compat_decomposition, + uc_composition, + &uninorm_nfkd + }; diff --git a/lib/uninorm/nfkd.c b/lib/uninorm/nfkd.c new file mode 100644 index 00000000..871dd647 --- /dev/null +++ b/lib/uninorm/nfkd.c @@ -0,0 +1,32 @@ +/* Unicode Normalization Form KD. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include "normalize-internal.h" +#include "decompose-internal.h" + +const struct unicode_normalization_form uninorm_nfkd = + { + NF_IS_COMPAT_DECOMPOSING, + uc_compat_decomposition, + NULL, + &uninorm_nfkd + }; diff --git a/lib/uninorm/normalize-internal.h b/lib/uninorm/normalize-internal.h new file mode 100644 index 00000000..0b346c65 --- /dev/null +++ b/lib/uninorm/normalize-internal.h @@ -0,0 +1,37 @@ +/* Normalization of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#include "unitypes.h" + +/* Complete definition of normalization form descriptor. */ +struct unicode_normalization_form +{ + /* Bit mask containing meta-information. + This must be the first field. */ + unsigned int description; + #define NF_IS_COMPAT_DECOMPOSING (1 << 0) + #define NF_IS_COMPOSING (1 << 1) + /* Function that decomposes a Unicode character. */ + int (*decomposer) (ucs4_t uc, ucs4_t *decomposition); + /* Function that combines two Unicode characters, a starter and another + character. */ + ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2); + /* Decomposing variant. */ + const struct unicode_normalization_form *decomposing_variant; +}; diff --git a/lib/uninorm/u-normalize-internal.h b/lib/uninorm/u-normalize-internal.h new file mode 100644 index 00000000..70c32551 --- /dev/null +++ b/lib/uninorm/u-normalize-internal.h @@ -0,0 +1,375 @@ +/* Decomposition and composition of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (uninorm_t nf, const UNIT *s, size_t n, + UNIT *resultbuf, size_t *lengthp) +{ + int (*decomposer) (ucs4_t uc, ucs4_t *decomposition) = nf->decomposer; + ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2) = nf->composer; + + /* The result being accumulated. */ + UNIT *result; + size_t length; + size_t allocated; + /* The buffer for sorting. */ + #define SORTBUF_PREALLOCATED 64 + struct ucs4_with_ccc sortbuf_preallocated[2 * SORTBUF_PREALLOCATED]; + struct ucs4_with_ccc *sortbuf; /* array of size 2 * sortbuf_allocated */ + size_t sortbuf_allocated; + size_t sortbuf_count; + + /* Initialize the accumulator. */ + if (resultbuf == NULL) + { + result = NULL; + allocated = 0; + } + else + { + result = resultbuf; + allocated = *lengthp; + } + length = 0; + + /* Initialize the buffer for sorting. */ + sortbuf = sortbuf_preallocated; + sortbuf_allocated = SORTBUF_PREALLOCATED; + sortbuf_count = 0; + + { + const UNIT *s_end = s + n; + + for (;;) + { + int count; + ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; + int decomposed_count; + int i; + + if (s < s_end) + { + /* Fetch the next character. */ + count = U_MBTOUC_UNSAFE (&decomposed[0], s, s_end - s); + decomposed_count = 1; + + /* Decompose it, recursively. + It would be possible to precompute the recursive decomposition + and store it in a table. But this would significantly increase + the size of the decomposition tables, because for example for + U+1FC1 the recursive canonical decomposition and the recursive + compatibility decomposition are different. */ + { + int curr; + + for (curr = 0; curr < decomposed_count; ) + { + /* Invariant: decomposed[0..curr-1] is fully decomposed, i.e. + all elements are atomic. */ + ucs4_t curr_decomposed[UC_DECOMPOSITION_MAX_LENGTH]; + int curr_decomposed_count; + + curr_decomposed_count = decomposer (decomposed[curr], curr_decomposed); + if (curr_decomposed_count >= 0) + { + /* Move curr_decomposed[0..curr_decomposed_count-1] over + decomposed[curr], making room. It's not worth using + memcpy() here, since the counts are so small. */ + int shift = curr_decomposed_count - 1; + + if (shift < 0) + abort (); + if (shift > 0) + { + int j; + + decomposed_count += shift; + if (decomposed_count > UC_DECOMPOSITION_MAX_LENGTH) + abort (); + for (j = decomposed_count - 1 - shift; j > curr; j--) + decomposed[j + shift] = decomposed[j]; + } + for (; shift >= 0; shift--) + decomposed[curr + shift] = curr_decomposed[shift]; + } + else + { + /* decomposed[curr] is atomic. */ + curr++; + } + } + } + } + else + { + count = 0; + decomposed_count = 0; + } + + i = 0; + for (;;) + { + ucs4_t uc; + int ccc; + + if (s < s_end) + { + /* Fetch the next character from the decomposition. */ + if (i == decomposed_count) + break; + uc = decomposed[i]; + ccc = uc_combining_class (uc); + } + else + { + /* End of string reached. */ + uc = 0; + ccc = 0; + } + + if (ccc == 0) + { + size_t j; + + /* Apply the canonical ordering algorithm to the accumulated + sequence of characters. */ + if (sortbuf_count > 1) + gl_uninorm_decompose_merge_sort_inplace (sortbuf, sortbuf_count, + sortbuf + sortbuf_count); + + if (composer != NULL) + { + /* Attempt to combine decomposed characters, as specified + in the Unicode Standard Annex #15 "Unicode Normalization + Forms". We need to check + 1. whether the first accumulated character is a + "starter" (i.e. has ccc = 0). This is usually the + case. But when the string starts with a + non-starter, the sortbuf also starts with a + non-starter. Btw, this check could also be + omitted, because the composition table has only + entries (code1, code2) for which code1 is a + starter; if the first accumulated character is not + a starter, no lookup will succeed. + 2. If the sortbuf has more than one character, check + for each of these characters that are not "blocked" + from the starter (i.e. have a ccc that is higher + than the ccc of the previous character) whether it + can be combined with the first character. + 3. If only one character is left in sortbuf, check + whether it can be combined with the next character + (also a starter). */ + if (sortbuf_count > 0 && sortbuf[0].ccc == 0) + { + for (j = 1; j < sortbuf_count; ) + { + if (sortbuf[j].ccc > sortbuf[j - 1].ccc) + { + ucs4_t combined = + composer (sortbuf[0].code, sortbuf[j].code); + if (combined) + { + size_t k; + + sortbuf[0].code = combined; + /* sortbuf[0].ccc = 0, still valid. */ + for (k = j + 1; k < sortbuf_count; k++) + sortbuf[k - 1] = sortbuf[k]; + sortbuf_count--; + continue; + } + } + j++; + } + if (s < s_end && sortbuf_count == 1) + { + ucs4_t combined = + composer (sortbuf[0].code, uc); + if (combined) + { + uc = combined; + ccc = 0; + /* uc could be further combined with subsequent + characters. So don't put it into sortbuf[0] in + this round, only in the next round. */ + sortbuf_count = 0; + } + } + } + } + + for (j = 0; j < sortbuf_count; j++) + { + ucs4_t muc = sortbuf[j].code; + + /* Append muc to the result accumulator. */ + if (length < allocated) + { + int ret = + U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail; + } + if (ret >= 0) + { + length += ret; + goto done_appending; + } + } + { + size_t old_allocated = allocated; + size_t new_allocated = 2 * old_allocated; + if (new_allocated < 64) + new_allocated = 64; + if (new_allocated < old_allocated) /* integer overflow? */ + abort (); + { + UNIT *larger_result; + if (result == NULL) + { + larger_result = + (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + else if (result == resultbuf) + { + larger_result = + (UNIT *) malloc (new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + U_CPY (larger_result, resultbuf, length); + } + else + { + larger_result = + (UNIT *) realloc (result, new_allocated * sizeof (UNIT)); + if (larger_result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + result = larger_result; + allocated = new_allocated; + { + int ret = + U_UCTOMB (result + length, muc, allocated - length); + if (ret == -1) + { + errno = EINVAL; + goto fail; + } + if (ret < 0) + abort (); + length += ret; + goto done_appending; + } + } + } + done_appending: ; + } + + /* sortbuf is now empty. */ + sortbuf_count = 0; + } + + if (!(s < s_end)) + /* End of string reached. */ + break; + + /* Append (uc, ccc) to sortbuf. */ + if (sortbuf_count == sortbuf_allocated) + { + struct ucs4_with_ccc *new_sortbuf; + + sortbuf_allocated = 2 * sortbuf_allocated; + if (sortbuf_allocated < sortbuf_count) /* integer overflow? */ + abort (); + new_sortbuf = + (struct ucs4_with_ccc *) malloc (2 * sortbuf_allocated * sizeof (struct ucs4_with_ccc)); + memcpy (new_sortbuf, sortbuf, + sortbuf_count * sizeof (struct ucs4_with_ccc)); + if (sortbuf != sortbuf_preallocated) + free (sortbuf); + sortbuf = new_sortbuf; + } + sortbuf[sortbuf_count].code = uc; + sortbuf[sortbuf_count].ccc = ccc; + sortbuf_count++; + + i++; + } + + if (!(s < s_end)) + /* End of string reached. */ + break; + + s += count; + } + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + goto fail; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + UNIT *memory; + + memory = (UNIT *) realloc (result, length * sizeof (UNIT)); + if (memory != NULL) + result = memory; + } + + if (sortbuf_count > 0) + abort (); + if (sortbuf != sortbuf_preallocated) + free (sortbuf); + + *lengthp = length; + return result; + + fail: + { + int saved_errno = errno; + if (sortbuf != sortbuf_preallocated) + free (sortbuf); + if (result != resultbuf) + free (result); + errno = saved_errno; + } + return NULL; +} diff --git a/lib/uninorm/u-normcmp.h b/lib/uninorm/u-normcmp.h new file mode 100644 index 00000000..66164406 --- /dev/null +++ b/lib/uninorm/u-normcmp.h @@ -0,0 +1,64 @@ +/* Normalization insensitive comparison of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2, + uninorm_t nf, int *resultp) +{ + UNIT buf1[2048 / sizeof (UNIT)]; + UNIT buf2[2048 / sizeof (UNIT)]; + UNIT *norms1; + size_t norms1_length; + UNIT *norms2; + size_t norms2_length; + int cmp; + + /* Normalize S1. */ + norms1_length = sizeof (buf1) / sizeof (UNIT); + norms1 = U_NORMALIZE (nf, s1, n1, buf1, &norms1_length); + if (norms1 == NULL) + /* errno is set here. */ + return -1; + + /* Normalize S2. */ + norms2_length = sizeof (buf2) / sizeof (UNIT); + norms2 = U_NORMALIZE (nf, s2, n2, buf2, &norms2_length); + if (norms2 == NULL) + { + if (norms1 != buf1) + { + int saved_errno = errno; + free (norms1); + errno = saved_errno; + } + return -1; + } + + /* Compare the normalized strings. */ + cmp = U_CMP2 (norms1, norms1_length, norms2, norms2_length); + if (cmp > 0) + cmp = 1; + else if (cmp < 0) + cmp = -1; + + if (norms2 != buf2) + free (norms2); + if (norms1 != buf1) + free (norms1); + *resultp = cmp; + return 0; +} diff --git a/lib/uninorm/u-normcoll.h b/lib/uninorm/u-normcoll.h new file mode 100644 index 00000000..e30880b0 --- /dev/null +++ b/lib/uninorm/u-normcoll.h @@ -0,0 +1,65 @@ +/* Locale dependent, normalization insensitive comparison of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2, + uninorm_t nf, int *resultp) +{ + char buf1[2048]; + char buf2[2048]; + char *transformed1; + size_t transformed1_length; + char *transformed2; + size_t transformed2_length; + int cmp; + + /* Normalize and transform S1. */ + transformed1_length = sizeof (buf1); + transformed1 = U_NORMXFRM (s1, n1, nf, buf1, &transformed1_length); + if (transformed1 == NULL) + /* errno is set here. */ + return -1; + + /* Normalize and transform S2. */ + transformed2_length = sizeof (buf2); + transformed2 = U_NORMXFRM (s2, n2, nf, buf2, &transformed2_length); + if (transformed2 == NULL) + { + if (transformed1 != buf1) + { + int saved_errno = errno; + free (transformed1); + errno = saved_errno; + } + return -1; + } + + /* Compare the transformed strings. */ + cmp = memcmp2 (transformed1, transformed1_length, + transformed2, transformed2_length); + if (cmp < 0) + cmp = -1; + else if (cmp > 0) + cmp = 1; + + if (transformed2 != buf2) + free (transformed2); + if (transformed1 != buf1) + free (transformed1); + *resultp = cmp; + return 0; +} diff --git a/lib/uninorm/u-normxfrm.h b/lib/uninorm/u-normxfrm.h new file mode 100644 index 00000000..6ed1e3c3 --- /dev/null +++ b/lib/uninorm/u-normxfrm.h @@ -0,0 +1,87 @@ +/* Locale dependent transformation for comparison of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +char * +FUNC (const UNIT *s, size_t n, uninorm_t nf, + char *resultbuf, size_t *lengthp) +{ + UNIT normsbuf[2048 / sizeof (UNIT)]; + UNIT *norms; + size_t norms_length; + char convsbuf[2048]; + char *convs; + size_t convs_length; + char *result; + + /* Normalize the Unicode string. */ + norms_length = sizeof (normsbuf) / sizeof (UNIT); + norms = U_NORMALIZE (nf, s, n, normsbuf, &norms_length); + if (norms == NULL) + /* errno is set here. */ + return NULL; + + /* Convert it to locale encoding. */ + convs_length = sizeof (convsbuf) - 1; + convs = U_CONV_TO_ENCODING (locale_charset (), + iconveh_error, + norms, norms_length, + NULL, + convsbuf, &convs_length); + if (convs == NULL) + { + if (norms != normsbuf) + { + int saved_errno = errno; + free (norms); + errno = saved_errno; + } + return NULL; + } + + if (norms != normsbuf) + free (norms); + + /* Ensure one more byte is available. */ + if (convs != convsbuf) + { + char *memory = (char *) realloc (convs, convs_length + 1); + if (memory == NULL) + { + free (convs); + errno = ENOMEM; + return NULL; + } + convs = memory; + } + + /* Apply locale dependent transformations for comparison. */ + result = memxfrm (convs, convs_length, resultbuf, lengthp); + if (result == NULL) + { + if (convs != convsbuf) + { + int saved_errno = errno; + free (convs); + errno = saved_errno; + } + return NULL; + } + + if (convs != convsbuf) + free (convs); + return result; +} diff --git a/lib/uninorm/u16-normalize.c b/lib/uninorm/u16-normalize.c new file mode 100644 index 00000000..86334d53 --- /dev/null +++ b/lib/uninorm/u16-normalize.c @@ -0,0 +1,38 @@ +/* Normalization of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" +#include "unictype.h" +#include "normalize-internal.h" +#include "decompose-internal.h" + +#define FUNC u16_normalize +#define UNIT uint16_t +#define U_MBTOUC_UNSAFE u16_mbtouc_unsafe +#define U_UCTOMB u16_uctomb +#define U_CPY u16_cpy +#include "u-normalize-internal.h" diff --git a/lib/uninorm/u16-normcmp.c b/lib/uninorm/u16-normcmp.c new file mode 100644 index 00000000..c66cc1be --- /dev/null +++ b/lib/uninorm/u16-normcmp.c @@ -0,0 +1,33 @@ +/* Normalization insensitive comparison of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include + +#include "minmax.h" +#include "unistr.h" + +#define FUNC u16_normcmp +#define UNIT uint16_t +#define U_NORMALIZE u16_normalize +#define U_CMP2 u16_cmp2 +#include "u-normcmp.h" diff --git a/lib/uninorm/u16-normcoll.c b/lib/uninorm/u16-normcoll.c new file mode 100644 index 00000000..a4f76c1b --- /dev/null +++ b/lib/uninorm/u16-normcoll.c @@ -0,0 +1,31 @@ +/* Locale dependent, normalization insensitive comparison of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include + +#include "memcmp2.h" + +#define FUNC u16_normcoll +#define UNIT uint16_t +#define U_NORMXFRM u16_normxfrm +#include "u-normcoll.h" diff --git a/lib/uninorm/u16-normxfrm.c b/lib/uninorm/u16-normxfrm.c new file mode 100644 index 00000000..cc22d8e3 --- /dev/null +++ b/lib/uninorm/u16-normxfrm.c @@ -0,0 +1,34 @@ +/* Locale dependent transformation for comparison of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include + +#include "localcharset.h" +#include "uniconv.h" +#include "memxfrm.h" + +#define FUNC u16_normxfrm +#define UNIT uint16_t +#define U_NORMALIZE u16_normalize +#define U_CONV_TO_ENCODING u16_conv_to_encoding +#include "u-normxfrm.h" diff --git a/lib/uninorm/u32-normalize.c b/lib/uninorm/u32-normalize.c new file mode 100644 index 00000000..6549423f --- /dev/null +++ b/lib/uninorm/u32-normalize.c @@ -0,0 +1,38 @@ +/* Normalization of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" +#include "unictype.h" +#include "normalize-internal.h" +#include "decompose-internal.h" + +#define FUNC u32_normalize +#define UNIT uint32_t +#define U_MBTOUC_UNSAFE u32_mbtouc_unsafe +#define U_UCTOMB u32_uctomb +#define U_CPY u32_cpy +#include "u-normalize-internal.h" diff --git a/lib/uninorm/u32-normcmp.c b/lib/uninorm/u32-normcmp.c new file mode 100644 index 00000000..58f890d6 --- /dev/null +++ b/lib/uninorm/u32-normcmp.c @@ -0,0 +1,33 @@ +/* Normalization insensitive comparison of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include + +#include "minmax.h" +#include "unistr.h" + +#define FUNC u32_normcmp +#define UNIT uint32_t +#define U_NORMALIZE u32_normalize +#define U_CMP2 u32_cmp2 +#include "u-normcmp.h" diff --git a/lib/uninorm/u32-normcoll.c b/lib/uninorm/u32-normcoll.c new file mode 100644 index 00000000..0343f760 --- /dev/null +++ b/lib/uninorm/u32-normcoll.c @@ -0,0 +1,31 @@ +/* Locale dependent, normalization insensitive comparison of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include + +#include "memcmp2.h" + +#define FUNC u32_normcoll +#define UNIT uint32_t +#define U_NORMXFRM u32_normxfrm +#include "u-normcoll.h" diff --git a/lib/uninorm/u32-normxfrm.c b/lib/uninorm/u32-normxfrm.c new file mode 100644 index 00000000..4b4dbc05 --- /dev/null +++ b/lib/uninorm/u32-normxfrm.c @@ -0,0 +1,34 @@ +/* Locale dependent transformation for comparison of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include + +#include "localcharset.h" +#include "uniconv.h" +#include "memxfrm.h" + +#define FUNC u32_normxfrm +#define UNIT uint32_t +#define U_NORMALIZE u32_normalize +#define U_CONV_TO_ENCODING u32_conv_to_encoding +#include "u-normxfrm.h" diff --git a/lib/uninorm/u8-normalize.c b/lib/uninorm/u8-normalize.c new file mode 100644 index 00000000..7e003ec2 --- /dev/null +++ b/lib/uninorm/u8-normalize.c @@ -0,0 +1,38 @@ +/* Normalization of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" +#include "unictype.h" +#include "normalize-internal.h" +#include "decompose-internal.h" + +#define FUNC u8_normalize +#define UNIT uint8_t +#define U_MBTOUC_UNSAFE u8_mbtouc_unsafe +#define U_UCTOMB u8_uctomb +#define U_CPY u8_cpy +#include "u-normalize-internal.h" diff --git a/lib/uninorm/u8-normcmp.c b/lib/uninorm/u8-normcmp.c new file mode 100644 index 00000000..6994f6c5 --- /dev/null +++ b/lib/uninorm/u8-normcmp.c @@ -0,0 +1,33 @@ +/* Normalization insensitive comparison of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include + +#include "minmax.h" +#include "unistr.h" + +#define FUNC u8_normcmp +#define UNIT uint8_t +#define U_NORMALIZE u8_normalize +#define U_CMP2 u8_cmp2 +#include "u-normcmp.h" diff --git a/lib/uninorm/u8-normcoll.c b/lib/uninorm/u8-normcoll.c new file mode 100644 index 00000000..4d163d41 --- /dev/null +++ b/lib/uninorm/u8-normcoll.c @@ -0,0 +1,31 @@ +/* Locale dependent, normalization insensitive comparison of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include + +#include "memcmp2.h" + +#define FUNC u8_normcoll +#define UNIT uint8_t +#define U_NORMXFRM u8_normxfrm +#include "u-normcoll.h" diff --git a/lib/uninorm/u8-normxfrm.c b/lib/uninorm/u8-normxfrm.c new file mode 100644 index 00000000..31da05d1 --- /dev/null +++ b/lib/uninorm/u8-normxfrm.c @@ -0,0 +1,34 @@ +/* Locale dependent transformation for comparison of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include + +#include "localcharset.h" +#include "uniconv.h" +#include "memxfrm.h" + +#define FUNC u8_normxfrm +#define UNIT uint8_t +#define U_NORMALIZE u8_normalize +#define U_CONV_TO_ENCODING u8_conv_to_encoding +#include "u-normxfrm.h" diff --git a/lib/uninorm/uninorm-filter.c b/lib/uninorm/uninorm-filter.c new file mode 100644 index 00000000..1d03cfaf --- /dev/null +++ b/lib/uninorm/uninorm-filter.c @@ -0,0 +1,367 @@ +/* Stream-based normalization of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unictype.h" +#include "normalize-internal.h" +#include "decompose-internal.h" + + +struct uninorm_filter +{ + /* Characteristics of the normalization form. */ + int (*decomposer) (ucs4_t uc, ucs4_t *decomposition); + ucs4_t (*composer) (ucs4_t uc1, ucs4_t uc2); + + /* The encapsulated stream. */ + int (*stream_func) (void *stream_data, ucs4_t uc); + void *stream_data; + + /* The buffer for sorting. */ + #define SORTBUF_PREALLOCATED 64 + struct ucs4_with_ccc sortbuf_preallocated[2 * SORTBUF_PREALLOCATED]; + struct ucs4_with_ccc *sortbuf; /* array of size 2 * sortbuf_allocated */ + size_t sortbuf_allocated; + size_t sortbuf_count; +}; + +struct uninorm_filter * +uninorm_filter_create (uninorm_t nf, + int (*stream_func) (void *stream_data, ucs4_t uc), + void *stream_data) +{ + struct uninorm_filter *filter = + (struct uninorm_filter *) malloc (sizeof (struct uninorm_filter)); + + if (filter == NULL) + /* errno is ENOMEM. */ + return NULL; + + filter->decomposer = nf->decomposer; + filter->composer = nf->composer; + filter->stream_func = stream_func; + filter->stream_data = stream_data; + filter->sortbuf = filter->sortbuf_preallocated; + filter->sortbuf_allocated = SORTBUF_PREALLOCATED; + filter->sortbuf_count = 0; + + return filter; +} + +int +uninorm_filter_write (struct uninorm_filter *filter, ucs4_t uc_arg) +{ + ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; + int decomposed_count; + + /* Accept the next character. */ + decomposed[0] = uc_arg; + decomposed_count = 1; + + /* Decompose it, recursively. + It would be possible to precompute the recursive decomposition + and store it in a table. But this would significantly increase + the size of the decomposition tables, because for example for + U+1FC1 the recursive canonical decomposition and the recursive + compatibility decomposition are different. */ + { + int curr; + + for (curr = 0; curr < decomposed_count; ) + { + /* Invariant: decomposed[0..curr-1] is fully decomposed, i.e. + all elements are atomic. */ + ucs4_t curr_decomposed[UC_DECOMPOSITION_MAX_LENGTH]; + int curr_decomposed_count; + + curr_decomposed_count = + filter->decomposer (decomposed[curr], curr_decomposed); + if (curr_decomposed_count >= 0) + { + /* Move curr_decomposed[0..curr_decomposed_count-1] over + decomposed[curr], making room. It's not worth using + memcpy() here, since the counts are so small. */ + int shift = curr_decomposed_count - 1; + + if (shift < 0) + abort (); + if (shift > 0) + { + int j; + + decomposed_count += shift; + if (decomposed_count > UC_DECOMPOSITION_MAX_LENGTH) + abort (); + for (j = decomposed_count - 1 - shift; j > curr; j--) + decomposed[j + shift] = decomposed[j]; + } + for (; shift >= 0; shift--) + decomposed[curr + shift] = curr_decomposed[shift]; + } + else + { + /* decomposed[curr] is atomic. */ + curr++; + } + } + } + + { + /* Cache sortbuf and sortbuf_count in local register variables. */ + struct ucs4_with_ccc * const sortbuf = filter->sortbuf; + size_t sortbuf_count = filter->sortbuf_count; + int i; + + for (i = 0; i < decomposed_count; i++) + { + /* Fetch the next character from the decomposition. */ + ucs4_t uc = decomposed[i]; + int ccc = uc_combining_class (uc); + + if (ccc == 0) + { + size_t j; + + /* Apply the canonical ordering algorithm to the accumulated + sequence of characters. */ + if (sortbuf_count > 1) + gl_uninorm_decompose_merge_sort_inplace (sortbuf, sortbuf_count, + sortbuf + sortbuf_count); + + if (filter->composer != NULL) + { + /* Attempt to combine decomposed characters, as specified + in the Unicode Standard Annex #15 "Unicode Normalization + Forms". We need to check + 1. whether the first accumulated character is a + "starter" (i.e. has ccc = 0). This is usually the + case. But when the string starts with a + non-starter, the sortbuf also starts with a + non-starter. Btw, this check could also be + omitted, because the composition table has only + entries (code1, code2) for which code1 is a + starter; if the first accumulated character is not + a starter, no lookup will succeed. + 2. If the sortbuf has more than one character, check + for each of these characters that are not "blocked" + from the starter (i.e. have a ccc that is higher + than the ccc of the previous character) whether it + can be combined with the first character. + 3. If only one character is left in sortbuf, check + whether it can be combined with the next character + (also a starter). */ + if (sortbuf_count > 0 && sortbuf[0].ccc == 0) + { + for (j = 1; j < sortbuf_count; ) + { + if (sortbuf[j].ccc > sortbuf[j - 1].ccc) + { + ucs4_t combined = + filter->composer (sortbuf[0].code, sortbuf[j].code); + if (combined) + { + size_t k; + + sortbuf[0].code = combined; + /* sortbuf[0].ccc = 0, still valid. */ + for (k = j + 1; k < sortbuf_count; k++) + sortbuf[k - 1] = sortbuf[k]; + sortbuf_count--; + continue; + } + } + j++; + } + if (sortbuf_count == 1) + { + ucs4_t combined = + filter->composer (sortbuf[0].code, uc); + if (combined) + { + uc = combined; + ccc = 0; + /* uc could be further combined with subsequent + characters. So don't put it into sortbuf[0] in + this round, only in the next round. */ + sortbuf_count = 0; + } + } + } + } + + for (j = 0; j < sortbuf_count; j++) + { + ucs4_t muc = sortbuf[j].code; + + /* Output muc to the encapsulated stream. */ + int ret = filter->stream_func (filter->stream_data, muc); + if (ret < 0) + { + /* errno is set here. */ + filter->sortbuf_count = 0; + return -1; + } + } + + /* sortbuf is now empty. */ + sortbuf_count = 0; + } + + /* Append (uc, ccc) to sortbuf. */ + if (sortbuf_count == filter->sortbuf_allocated) + { + struct ucs4_with_ccc *new_sortbuf; + + filter->sortbuf_allocated = 2 * filter->sortbuf_allocated; + if (filter->sortbuf_allocated < sortbuf_count) /* integer overflow? */ + abort (); + new_sortbuf = + (struct ucs4_with_ccc *) + malloc (2 * filter->sortbuf_allocated * sizeof (struct ucs4_with_ccc)); + memcpy (new_sortbuf, filter->sortbuf, + sortbuf_count * sizeof (struct ucs4_with_ccc)); + if (filter->sortbuf != filter->sortbuf_preallocated) + free (filter->sortbuf); + filter->sortbuf = new_sortbuf; + } + filter->sortbuf[sortbuf_count].code = uc; + filter->sortbuf[sortbuf_count].ccc = ccc; + sortbuf_count++; + } + + filter->sortbuf_count = sortbuf_count; + } + + return 0; +} + +/* Bring data buffered in the filter to its destination, the encapsulated + stream. + Return 0 if successful, or -1 with errno set upon failure. + Note! If after calling this function, additional characters are written + into the filter, the resulting character sequence in the encapsulated stream + will not necessarily be normalized. */ +int +uninorm_filter_flush (struct uninorm_filter *filter) +{ + /* Cache sortbuf and sortbuf_count in local register variables. */ + struct ucs4_with_ccc * const sortbuf = filter->sortbuf; + size_t sortbuf_count = filter->sortbuf_count; + size_t j; + + /* Apply the canonical ordering algorithm to the accumulated + sequence of characters. */ + if (sortbuf_count > 1) + gl_uninorm_decompose_merge_sort_inplace (sortbuf, sortbuf_count, + sortbuf + sortbuf_count); + + if (filter->composer != NULL) + { + /* Attempt to combine decomposed characters, as specified + in the Unicode Standard Annex #15 "Unicode Normalization + Forms". We need to check + 1. whether the first accumulated character is a + "starter" (i.e. has ccc = 0). This is usually the + case. But when the string starts with a + non-starter, the sortbuf also starts with a + non-starter. Btw, this check could also be + omitted, because the composition table has only + entries (code1, code2) for which code1 is a + starter; if the first accumulated character is not + a starter, no lookup will succeed. + 2. If the sortbuf has more than one character, check + for each of these characters that are not "blocked" + from the starter (i.e. have a ccc that is higher + than the ccc of the previous character) whether it + can be combined with the first character. + 3. If only one character is left in sortbuf, check + whether it can be combined with the next character + (also a starter). */ + if (sortbuf_count > 0 && sortbuf[0].ccc == 0) + { + for (j = 1; j < sortbuf_count; ) + { + if (sortbuf[j].ccc > sortbuf[j - 1].ccc) + { + ucs4_t combined = + filter->composer (sortbuf[0].code, sortbuf[j].code); + if (combined) + { + size_t k; + + sortbuf[0].code = combined; + /* sortbuf[0].ccc = 0, still valid. */ + for (k = j + 1; k < sortbuf_count; k++) + sortbuf[k - 1] = sortbuf[k]; + sortbuf_count--; + continue; + } + } + j++; + } + } + } + + for (j = 0; j < sortbuf_count; j++) + { + ucs4_t muc = sortbuf[j].code; + + /* Output muc to the encapsulated stream. */ + int ret = filter->stream_func (filter->stream_data, muc); + if (ret < 0) + { + /* errno is set here. */ + filter->sortbuf_count = 0; + return -1; + } + } + + /* sortbuf is now empty. */ + filter->sortbuf_count = 0; + + return 0; +} + +/* Bring data buffered in the filter to its destination, the encapsulated + stream, then close and free the filter. + Return 0 if successful, or -1 with errno set upon failure. */ +int +uninorm_filter_free (struct uninorm_filter *filter) +{ + int ret = uninorm_filter_flush (filter); + + if (ret < 0) + /* errno is set here. */ + return -1; + + if (filter->sortbuf_count > 0) + abort (); + if (filter->sortbuf != filter->sortbuf_preallocated) + free (filter->sortbuf); + free (filter); + + return 0; +} diff --git a/lib/unistd.in.h b/lib/unistd.in.h new file mode 100644 index 00000000..2e42c0b8 --- /dev/null +++ b/lib/unistd.in.h @@ -0,0 +1,578 @@ +/* Substitute for and wrapper around . + Copyright (C) 2003-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _GL_UNISTD_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_UNISTD_H@ +# @INCLUDE_NEXT@ @NEXT_UNISTD_H@ +#endif + +#ifndef _GL_UNISTD_H +#define _GL_UNISTD_H + +/* mingw doesn't define the SEEK_* or *_FILENO macros in . */ +#if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) +# include +#endif + +/* mingw fails to declare _exit in . */ +/* mingw, BeOS, Haiku declare environ in , not in . */ +#include + +#if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@ +/* Get ssize_t. */ +# include +#endif + +#if @GNULIB_GETHOSTNAME@ +/* Get all possible declarations of gethostname(). */ +# if @UNISTD_H_HAVE_WINSOCK2_H@ +# include +# if !defined _GL_SYS_SOCKET_H +# undef socket +# define socket socket_used_without_including_sys_socket_h +# undef connect +# define connect connect_used_without_including_sys_socket_h +# undef accept +# define accept accept_used_without_including_sys_socket_h +# undef bind +# define bind bind_used_without_including_sys_socket_h +# undef getpeername +# define getpeername getpeername_used_without_including_sys_socket_h +# undef getsockname +# define getsockname getsockname_used_without_including_sys_socket_h +# undef getsockopt +# define getsockopt getsockopt_used_without_including_sys_socket_h +# undef listen +# define listen listen_used_without_including_sys_socket_h +# undef recv +# define recv recv_used_without_including_sys_socket_h +# undef send +# define send send_used_without_including_sys_socket_h +# undef recvfrom +# define recvfrom recvfrom_used_without_including_sys_socket_h +# undef sendto +# define sendto sendto_used_without_including_sys_socket_h +# undef setsockopt +# define setsockopt setsockopt_used_without_including_sys_socket_h +# undef shutdown +# define shutdown shutdown_used_without_including_sys_socket_h +# endif +# if !defined _GL_SYS_SELECT_H +# undef select +# define select select_used_without_including_sys_select_h +# endif +# endif +#endif + +/* The definition of GL_LINK_WARNING is copied here. */ + + +/* OS/2 EMX lacks these macros. */ +#ifndef STDIN_FILENO +# define STDIN_FILENO 0 +#endif +#ifndef STDOUT_FILENO +# define STDOUT_FILENO 1 +#endif +#ifndef STDERR_FILENO +# define STDERR_FILENO 2 +#endif + +/* Declare overridden functions. */ + +#ifdef __cplusplus +extern "C" { +#endif + + +#if @GNULIB_CHOWN@ +# if @REPLACE_CHOWN@ +# ifndef REPLACE_CHOWN +# define REPLACE_CHOWN 1 +# endif +# if REPLACE_CHOWN +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# define chown rpl_chown +extern int chown (const char *file, uid_t uid, gid_t gid); +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef chown +# define chown(f,u,g) \ + (GL_LINK_WARNING ("chown fails to follow symlinks on some systems and " \ + "doesn't treat a uid or gid of -1 on some systems - " \ + "use gnulib module chown for portability"), \ + chown (f, u, g)) +#endif + + +#if @GNULIB_CLOSE@ +# if @REPLACE_CLOSE@ +/* Automatically included by modules that need a replacement for close. */ +# undef close +# define close rpl_close +extern int close (int); +# endif +#elif @UNISTD_H_HAVE_WINSOCK2_H@ +# undef close +# define close close_used_without_requesting_gnulib_module_close +#elif defined GNULIB_POSIXCHECK +# undef close +# define close(f) \ + (GL_LINK_WARNING ("close does not portably work on sockets - " \ + "use gnulib module close for portability"), \ + close (f)) +#endif + + +#if @GNULIB_DUP2@ +# if !@HAVE_DUP2@ +/* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if + NEWFD = OLDFD, otherwise close NEWFD first if it is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +extern int dup2 (int oldfd, int newfd); +# endif +#elif defined GNULIB_POSIXCHECK +# undef dup2 +# define dup2(o,n) \ + (GL_LINK_WARNING ("dup2 is unportable - " \ + "use gnulib module dup2 for portability"), \ + dup2 (o, n)) +#endif + + +#if @GNULIB_ENVIRON@ +# if !@HAVE_DECL_ENVIRON@ +/* Set of environment variables and values. An array of strings of the form + "VARIABLE=VALUE", terminated with a NULL. */ +# if defined __APPLE__ && defined __MACH__ +# include +# define environ (*_NSGetEnviron ()) +# else +extern char **environ; +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef environ +# define environ \ + (GL_LINK_WARNING ("environ is unportable - " \ + "use gnulib module environ for portability"), \ + environ) +#endif + + +#if @GNULIB_EUIDACCESS@ +# if !@HAVE_EUIDACCESS@ +/* Like access(), except that is uses the effective user id and group id of + the current process. */ +extern int euidaccess (const char *filename, int mode); +# endif +#elif defined GNULIB_POSIXCHECK +# undef euidaccess +# define euidaccess(f,m) \ + (GL_LINK_WARNING ("euidaccess is unportable - " \ + "use gnulib module euidaccess for portability"), \ + euidaccess (f, m)) +#endif + + +#if @GNULIB_FCHDIR@ +# if @REPLACE_FCHDIR@ + +/* Change the process' current working directory to the directory on which + the given file descriptor is open. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +extern int fchdir (int /*fd*/); + +# define dup rpl_dup +extern int dup (int); +# define dup2 rpl_dup2 +extern int dup2 (int, int); + +# endif +#elif defined GNULIB_POSIXCHECK +# undef fchdir +# define fchdir(f) \ + (GL_LINK_WARNING ("fchdir is unportable - " \ + "use gnulib module fchdir for portability"), \ + fchdir (f)) +#endif + + +#if @GNULIB_FSYNC@ +/* Synchronize changes to a file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2001 specification + . */ +# if !@HAVE_FSYNC@ +extern int fsync (int fd); +# endif +#elif defined GNULIB_POSIXCHECK +# undef fsync +# define fsync(fd) \ + (GL_LINK_WARNING ("fsync is unportable - " \ + "use gnulib module fsync for portability"), \ + fsync (fd)) +#endif + + +#if @GNULIB_FTRUNCATE@ +# if !@HAVE_FTRUNCATE@ +/* Change the size of the file to which FD is opened to become equal to LENGTH. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +extern int ftruncate (int fd, off_t length); +# endif +#elif defined GNULIB_POSIXCHECK +# undef ftruncate +# define ftruncate(f,l) \ + (GL_LINK_WARNING ("ftruncate is unportable - " \ + "use gnulib module ftruncate for portability"), \ + ftruncate (f, l)) +#endif + + +#if @GNULIB_GETCWD@ +/* Include the headers that might declare getcwd so that they will not + cause confusion if included after this file. */ +# include +# if @REPLACE_GETCWD@ +/* Get the name of the current working directory, and put it in SIZE bytes + of BUF. + Return BUF if successful, or NULL if the directory couldn't be determined + or SIZE was too small. + See the POSIX:2001 specification + . + Additionally, the gnulib module 'getcwd' guarantees the following GNU + extension: If BUF is NULL, an array is allocated with 'malloc'; the array + is SIZE bytes long, unless SIZE == 0, in which case it is as big as + necessary. */ +# define getcwd rpl_getcwd +extern char * getcwd (char *buf, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getcwd +# define getcwd(b,s) \ + (GL_LINK_WARNING ("getcwd is unportable - " \ + "use gnulib module getcwd for portability"), \ + getcwd (b, s)) +#endif + + +#if @GNULIB_GETDOMAINNAME@ +/* Return the NIS domain name of the machine. + WARNING! The NIS domain name is unrelated to the fully qualified host name + of the machine. It is also unrelated to email addresses. + WARNING! The NIS domain name is usually the empty string or "(none)" when + not using NIS. + + Put up to LEN bytes of the NIS domain name into NAME. + Null terminate it if the name is shorter than LEN. + If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if !@HAVE_GETDOMAINNAME@ +extern int getdomainname(char *name, size_t len); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getdomainname +# define getdomainname(n,l) \ + (GL_LINK_WARNING ("getdomainname is unportable - " \ + "use gnulib module getdomainname for portability"), \ + getdomainname (n, l)) +#endif + + +#if @GNULIB_GETDTABLESIZE@ +# if !@HAVE_GETDTABLESIZE@ +/* Return the maximum number of file descriptors in the current process. */ +extern int getdtablesize (void); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getdtablesize +# define getdtablesize() \ + (GL_LINK_WARNING ("getdtablesize is unportable - " \ + "use gnulib module getdtablesize for portability"), \ + getdtablesize ()) +#endif + + +#if @GNULIB_GETHOSTNAME@ +/* Return the standard host name of the machine. + WARNING! The host name may or may not be fully qualified. + + Put up to LEN bytes of the host name into NAME. + Null terminate it if the name is shorter than LEN. + If the host name is longer than LEN, set errno = EINVAL and return -1. + Return 0 if successful, otherwise set errno and return -1. */ +# if @UNISTD_H_HAVE_WINSOCK2_H@ +# undef gethostname +# define gethostname rpl_gethostname +# endif +# if @UNISTD_H_HAVE_WINSOCK2_H@ || !@HAVE_GETHOSTNAME@ +extern int gethostname(char *name, size_t len); +# endif +#elif @UNISTD_H_HAVE_WINSOCK2_H@ +# undef gethostname +# define gethostname gethostname_used_without_requesting_gnulib_module_gethostname +#elif defined GNULIB_POSIXCHECK +# undef gethostname +# define gethostname(n,l) \ + (GL_LINK_WARNING ("gethostname is unportable - " \ + "use gnulib module gethostname for portability"), \ + gethostname (n, l)) +#endif + + +#if @GNULIB_GETLOGIN_R@ +/* Copies the user's login name to NAME. + The array pointed to by NAME has room for SIZE bytes. + + Returns 0 if successful. Upon error, an error number is returned, or -1 in + the case that the login name cannot be found but no specific error is + provided (this case is hopefully rare but is left open by the POSIX spec). + + See . + */ +# if !@HAVE_DECL_GETLOGIN_R@ +# include +extern int getlogin_r (char *name, size_t size); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getlogin_r +# define getlogin_r(n,s) \ + (GL_LINK_WARNING ("getlogin_r is unportable - " \ + "use gnulib module getlogin_r for portability"), \ + getlogin_r (n, s)) +#endif + + +#if @GNULIB_GETPAGESIZE@ +# if @REPLACE_GETPAGESIZE@ +# define getpagesize rpl_getpagesize +extern int getpagesize (void); +# elif !@HAVE_GETPAGESIZE@ +/* This is for POSIX systems. */ +# if !defined getpagesize && defined _SC_PAGESIZE +# if ! (defined __VMS && __VMS_VER < 70000000) +# define getpagesize() sysconf (_SC_PAGESIZE) +# endif +# endif +/* This is for older VMS. */ +# if !defined getpagesize && defined __VMS +# ifdef __ALPHA +# define getpagesize() 8192 +# else +# define getpagesize() 512 +# endif +# endif +/* This is for BeOS. */ +# if !defined getpagesize && @HAVE_OS_H@ +# include +# if defined B_PAGE_SIZE +# define getpagesize() B_PAGE_SIZE +# endif +# endif +/* This is for AmigaOS4.0. */ +# if !defined getpagesize && defined __amigaos4__ +# define getpagesize() 2048 +# endif +/* This is for older Unix systems. */ +# if !defined getpagesize && @HAVE_SYS_PARAM_H@ +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else +# ifdef NBPG +# ifndef CLSIZE +# define CLSIZE 1 +# endif +# define getpagesize() (NBPG * CLSIZE) +# else +# ifdef NBPC +# define getpagesize() NBPC +# endif +# endif +# endif +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef getpagesize +# define getpagesize() \ + (GL_LINK_WARNING ("getpagesize is unportable - " \ + "use gnulib module getpagesize for portability"), \ + getpagesize ()) +#endif + + +#if @GNULIB_GETUSERSHELL@ +# if !@HAVE_GETUSERSHELL@ +/* Return the next valid login shell on the system, or NULL when the end of + the list has been reached. */ +extern char *getusershell (void); +/* Rewind to pointer that is advanced at each getusershell() call. */ +extern void setusershell (void); +/* Free the pointer that is advanced at each getusershell() call and + associated resources. */ +extern void endusershell (void); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getusershell +# define getusershell() \ + (GL_LINK_WARNING ("getusershell is unportable - " \ + "use gnulib module getusershell for portability"), \ + getusershell ()) +# undef setusershell +# define setusershell() \ + (GL_LINK_WARNING ("setusershell is unportable - " \ + "use gnulib module getusershell for portability"), \ + setusershell ()) +# undef endusershell +# define endusershell() \ + (GL_LINK_WARNING ("endusershell is unportable - " \ + "use gnulib module getusershell for portability"), \ + endusershell ()) +#endif + + +#if @GNULIB_LCHOWN@ +# if @REPLACE_LCHOWN@ +/* Change the owner of FILE to UID (if UID is not -1) and the group of FILE + to GID (if GID is not -1). Do not follow symbolic links. + Return 0 if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# define lchown rpl_lchown +extern int lchown (char const *file, uid_t owner, gid_t group); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lchown +# define lchown(f,u,g) \ + (GL_LINK_WARNING ("lchown is unportable to pre-POSIX.1-2001 " \ + "systems - use gnulib module lchown for portability"), \ + lchown (f, u, g)) +#endif + + +#if @GNULIB_LINK@ +/* Create a new hard link for an existing file. + Return 0 if successful, otherwise -1 and errno set. + See POSIX:2001 specification + . */ +# if !@HAVE_LINK@ +extern int link (const char *path1, const char *path2); +# endif +#elif defined GNULIB_POSIXCHECK +# undef link +# define link(path1,path2) \ + (GL_LINK_WARNING ("link is unportable - " \ + "use gnulib module link for portability"), \ + link (path1, path2)) +#endif + + +#if @GNULIB_LSEEK@ +# if @REPLACE_LSEEK@ +/* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. + Return the new offset if successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# define lseek rpl_lseek + extern off_t lseek (int fd, off_t offset, int whence); +# endif +#elif defined GNULIB_POSIXCHECK +# undef lseek +# define lseek(f,o,w) \ + (GL_LINK_WARNING ("lseek does not fail with ESPIPE on pipes on some " \ + "systems - use gnulib module lseek for portability"), \ + lseek (f, o, w)) +#endif + + +#if @GNULIB_READLINK@ +/* Read the contents of the symbolic link FILE and place the first BUFSIZE + bytes of it into BUF. Return the number of bytes placed into BUF if + successful, otherwise -1 and errno set. + See the POSIX:2001 specification + . */ +# if !@HAVE_READLINK@ +# include +extern int readlink (const char *file, char *buf, size_t bufsize); +# endif +#elif defined GNULIB_POSIXCHECK +# undef readlink +# define readlink(f,b,s) \ + (GL_LINK_WARNING ("readlink is unportable - " \ + "use gnulib module readlink for portability"), \ + readlink (f, b, s)) +#endif + + +#if @GNULIB_SLEEP@ +/* Pause the execution of the current thread for N seconds. + Returns the number of seconds left to sleep. + See the POSIX:2001 specification + . */ +# if !@HAVE_SLEEP@ +extern unsigned int sleep (unsigned int n); +# endif +#elif defined GNULIB_POSIXCHECK +# undef sleep +# define sleep(n) \ + (GL_LINK_WARNING ("sleep is unportable - " \ + "use gnulib module sleep for portability"), \ + sleep (n)) +#endif + + +#if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@ +/* Write up to COUNT bytes starting at BUF to file descriptor FD. + See the POSIX:2001 specification + . */ +# undef write +# define write rpl_write +extern ssize_t write (int fd, const void *buf, size_t count); +#endif + + +#ifdef FCHDIR_REPLACEMENT +/* gnulib internal function. */ +extern void _gl_unregister_fd (int fd); +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _GL_UNISTD_H */ +#endif /* _GL_UNISTD_H */ diff --git a/lib/unistdio.h b/lib/unistdio.h new file mode 100644 index 00000000..d9eca02f --- /dev/null +++ b/lib/unistdio.h @@ -0,0 +1,256 @@ +/* Elementary Unicode string functions. + Copyright (C) 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNISTDIO_H +#define _UNISTDIO_H + +#include "unitypes.h" + +/* Get size_t. */ +#include + +/* Get FILE. */ +#include + +/* Get va_list. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* These work like the printf function family. + In the format string: + The format directive 'U' takes an UTF-8 string (const uint8_t *). + The format directive 'lU' takes an UTF-16 string (const uint16_t *). + The format directive 'llU' takes an UTF-32 string (const uint32_t *). + + The prefix (ulc_, u8_, u16_, u16_) indicates the type of the resulting + string. The prefix 'ulc' stands for "locale encoded". + + An infix 'v' indicates that a va_list is passed instead of multiple + arguments. + + The functions *sprintf have a 'buf' argument that is assumed to be large + enough. (DANGEROUS! Overflowing the buffer will crash the program.) + The functions *snprintf have a 'buf' argument that is assumed to be 'size' + units large. (DANGEROUS! The resulting string might be truncated in the + middle of a multibyte character.) + The functions *asprintf have a 'resultp' argument. The result will be + freshly allocated and stored in *resultp. + The functions *asnprintf have a (resultbuf, lengthp) argument pair. If + resultbuf is not NULL and the result fits into *lengthp units, it is put + in resultbuf, and resultbuf is returned. Otherwise, a freshly allocated + string is returned. In both cases, *lengthp is set to the length (number + of units) of the returned string. In case of error, NULL is returned and + errno is set. + */ + +/* ASCII format string, result in locale dependent encoded 'char *'. */ +extern int + ulc_sprintf (char *buf, + const char *format, ...); +extern int + ulc_snprintf (char *buf, size_t size, + const char *format, ...); +extern int + ulc_asprintf (char **resultp, + const char *format, ...); +extern char * + ulc_asnprintf (char *resultbuf, size_t *lengthp, + const char *format, ...); +extern int + ulc_vsprintf (char *buf, + const char *format, va_list ap); +extern int + ulc_vsnprintf (char *buf, size_t size, + const char *format, va_list ap); +extern int + ulc_vasprintf (char **resultp, + const char *format, va_list ap); +extern char * + ulc_vasnprintf (char *resultbuf, size_t *lengthp, + const char *format, va_list ap); + +/* ASCII format string, result in UTF-8 format. */ +extern int + u8_sprintf (uint8_t *buf, + const char *format, ...); +extern int + u8_snprintf (uint8_t *buf, size_t size, + const char *format, ...); +extern int + u8_asprintf (uint8_t **resultp, + const char *format, ...); +extern uint8_t * + u8_asnprintf (uint8_t *resultbuf, size_t *lengthp, + const char *format, ...); +extern int + u8_vsprintf (uint8_t *buf, + const char *format, va_list ap); +extern int + u8_vsnprintf (uint8_t *buf, size_t size, + const char *format, va_list ap); +extern int + u8_vasprintf (uint8_t **resultp, + const char *format, va_list ap); +extern uint8_t * + u8_vasnprintf (uint8_t *resultbuf, size_t *lengthp, + const char *format, va_list ap); + +/* UTF-8 format string, result in UTF-8 format. */ +extern int + u8_u8_sprintf (uint8_t *buf, + const uint8_t *format, ...); +extern int + u8_u8_snprintf (uint8_t *buf, size_t size, + const uint8_t *format, ...); +extern int + u8_u8_asprintf (uint8_t **resultp, + const uint8_t *format, ...); +extern uint8_t * + u8_u8_asnprintf (uint8_t *resultbuf, size_t *lengthp, + const uint8_t *format, ...); +extern int + u8_u8_vsprintf (uint8_t *buf, + const uint8_t *format, va_list ap); +extern int + u8_u8_vsnprintf (uint8_t *buf, size_t size, + const uint8_t *format, va_list ap); +extern int + u8_u8_vasprintf (uint8_t **resultp, + const uint8_t *format, va_list ap); +extern uint8_t * + u8_u8_vasnprintf (uint8_t *resultbuf, size_t *lengthp, + const uint8_t *format, va_list ap); + +/* ASCII format string, result in UTF-16 format. */ +extern int + u16_sprintf (uint16_t *buf, + const char *format, ...); +extern int + u16_snprintf (uint16_t *buf, size_t size, + const char *format, ...); +extern int + u16_asprintf (uint16_t **resultp, + const char *format, ...); +extern uint16_t * + u16_asnprintf (uint16_t *resultbuf, size_t *lengthp, + const char *format, ...); +extern int + u16_vsprintf (uint16_t *buf, + const char *format, va_list ap); +extern int + u16_vsnprintf (uint16_t *buf, size_t size, + const char *format, va_list ap); +extern int + u16_vasprintf (uint16_t **resultp, + const char *format, va_list ap); +extern uint16_t * + u16_vasnprintf (uint16_t *resultbuf, size_t *lengthp, + const char *format, va_list ap); + +/* UTF-16 format string, result in UTF-16 format. */ +extern int + u16_u16_sprintf (uint16_t *buf, + const uint16_t *format, ...); +extern int + u16_u16_snprintf (uint16_t *buf, size_t size, + const uint16_t *format, ...); +extern int + u16_u16_asprintf (uint16_t **resultp, + const uint16_t *format, ...); +extern uint16_t * + u16_u16_asnprintf (uint16_t *resultbuf, size_t *lengthp, + const uint16_t *format, ...); +extern int + u16_u16_vsprintf (uint16_t *buf, + const uint16_t *format, va_list ap); +extern int + u16_u16_vsnprintf (uint16_t *buf, size_t size, + const uint16_t *format, va_list ap); +extern int + u16_u16_vasprintf (uint16_t **resultp, + const uint16_t *format, va_list ap); +extern uint16_t * + u16_u16_vasnprintf (uint16_t *resultbuf, size_t *lengthp, + const uint16_t *format, va_list ap); + +/* ASCII format string, result in UTF-32 format. */ +extern int + u32_sprintf (uint32_t *buf, + const char *format, ...); +extern int + u32_snprintf (uint32_t *buf, size_t size, + const char *format, ...); +extern int + u32_asprintf (uint32_t **resultp, + const char *format, ...); +extern uint32_t * + u32_asnprintf (uint32_t *resultbuf, size_t *lengthp, + const char *format, ...); +extern int + u32_vsprintf (uint32_t *buf, + const char *format, va_list ap); +extern int + u32_vsnprintf (uint32_t *buf, size_t size, + const char *format, va_list ap); +extern int + u32_vasprintf (uint32_t **resultp, + const char *format, va_list ap); +extern uint32_t * + u32_vasnprintf (uint32_t *resultbuf, size_t *lengthp, + const char *format, va_list ap); + +/* UTF-32 format string, result in UTF-32 format. */ +extern int + u32_u32_sprintf (uint32_t *buf, + const uint32_t *format, ...); +extern int + u32_u32_snprintf (uint32_t *buf, size_t size, + const uint32_t *format, ...); +extern int + u32_u32_asprintf (uint32_t **resultp, + const uint32_t *format, ...); +extern uint32_t * + u32_u32_asnprintf (uint32_t *resultbuf, size_t *lengthp, + const uint32_t *format, ...); +extern int + u32_u32_vsprintf (uint32_t *buf, + const uint32_t *format, va_list ap); +extern int + u32_u32_vsnprintf (uint32_t *buf, size_t size, + const uint32_t *format, va_list ap); +extern int + u32_u32_vasprintf (uint32_t **resultp, + const uint32_t *format, va_list ap); +extern uint32_t * + u32_u32_vasnprintf (uint32_t *resultbuf, size_t *lengthp, + const uint32_t *format, va_list ap); + +/* ASCII format string, output to FILE in locale dependent encoding. */ +extern int + ulc_fprintf (FILE *stream, + const char *format, ...); +extern int + ulc_vfprintf (FILE *stream, + const char *format, va_list ap); + +#ifdef __cplusplus +} +#endif + +#endif /* _UNISTDIO_H */ diff --git a/lib/unistdio/u-asnprintf.h b/lib/unistdio/u-asnprintf.h new file mode 100644 index 00000000..8fd08d7f --- /dev/null +++ b/lib/unistdio/u-asnprintf.h @@ -0,0 +1,27 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +DCHAR_T * +ASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, const FCHAR_T *format, ...) +{ + va_list args; + DCHAR_T *result; + + va_start (args, format); + result = VASNPRINTF (resultbuf, lengthp, format, args); + va_end (args); + return result; +} diff --git a/lib/unistdio/u-asprintf.h b/lib/unistdio/u-asprintf.h new file mode 100644 index 00000000..ba82faba --- /dev/null +++ b/lib/unistdio/u-asprintf.h @@ -0,0 +1,27 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +ASPRINTF (DCHAR_T **resultp, const FCHAR_T *format, ...) +{ + va_list args; + int result; + + va_start (args, format); + result = VASPRINTF (resultp, format, args); + va_end (args); + return result; +} diff --git a/lib/unistdio/u-printf-args.c b/lib/unistdio/u-printf-args.c new file mode 100644 index 00000000..22fbc088 --- /dev/null +++ b/lib/unistdio/u-printf-args.c @@ -0,0 +1,22 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio/u-printf-args.h" + +#include "printf-args.c" diff --git a/lib/unistdio/u-printf-args.h b/lib/unistdio/u-printf-args.h new file mode 100644 index 00000000..7b2255a2 --- /dev/null +++ b/lib/unistdio/u-printf-args.h @@ -0,0 +1,27 @@ +/* Decomposed printf argument list. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _U_PRINTF_ARGS_H +#define _U_PRINTF_ARGS_H + +#include "unitypes.h" + +/* Parametrization of printf-args.h. */ +#define ENABLE_UNISTDIO 1 +#define PRINTF_FETCHARGS u_printf_fetchargs +#include "printf-args.h" + +#endif /* _U_PRINTF_ARGS_H */ diff --git a/lib/unistdio/u-printf-parse.h b/lib/unistdio/u-printf-parse.h new file mode 100644 index 00000000..11a953f9 --- /dev/null +++ b/lib/unistdio/u-printf-parse.h @@ -0,0 +1,27 @@ +/* Parse printf format string. + Copyright (C) 1999, 2002, 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _U_PRINTF_PARSE_H +#define _U_PRINTF_PARSE_H + +#include "unistdio/u-printf-args.h" + +/* Parametrization of printf-parse.h. */ +#undef ENABLE_UNISTDIO +#define ENABLE_UNISTDIO 1 +#include "printf-parse.h" + +#endif /* _U_PRINTF_PARSE_H */ diff --git a/lib/unistdio/u-snprintf.h b/lib/unistdio/u-snprintf.h new file mode 100644 index 00000000..1665bc23 --- /dev/null +++ b/lib/unistdio/u-snprintf.h @@ -0,0 +1,27 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +SNPRINTF (DCHAR_T *buf, size_t size, const FCHAR_T *format, ...) +{ + va_list args; + int result; + + va_start (args, format); + result = VSNPRINTF (buf, size, format, args); + va_end (args); + return result; +} diff --git a/lib/unistdio/u-sprintf.h b/lib/unistdio/u-sprintf.h new file mode 100644 index 00000000..8a1b5544 --- /dev/null +++ b/lib/unistdio/u-sprintf.h @@ -0,0 +1,27 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +SPRINTF (DCHAR_T *buf, const FCHAR_T *format, ...) +{ + va_list args; + int result; + + va_start (args, format); + result = VSPRINTF (buf, format, args); + va_end (args); + return result; +} diff --git a/lib/unistdio/u-vasprintf.h b/lib/unistdio/u-vasprintf.h new file mode 100644 index 00000000..965bfbf5 --- /dev/null +++ b/lib/unistdio/u-vasprintf.h @@ -0,0 +1,35 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +VASPRINTF (DCHAR_T **resultp, const FCHAR_T *format, va_list args) +{ + size_t length; + DCHAR_T *result = VASNPRINTF (NULL, &length, format, args); + if (result == NULL) + return -1; + + if (length > INT_MAX) + { + free (result); + errno = EOVERFLOW; + return -1; + } + + *resultp = result; + /* Return the number of resulting units, excluding the trailing NUL. */ + return length; +} diff --git a/lib/unistdio/u-vsnprintf.h b/lib/unistdio/u-vsnprintf.h new file mode 100644 index 00000000..481a22f0 --- /dev/null +++ b/lib/unistdio/u-vsnprintf.h @@ -0,0 +1,52 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +VSNPRINTF (DCHAR_T *buf, size_t size, const FCHAR_T *format, va_list args) +{ + size_t length; + DCHAR_T *result; + + if (size == 0) + buf = NULL; + else + length = size; + result = VASNPRINTF (buf, &length, format, args); + if (result == NULL) + return -1; + + if (result != buf) + { + if (size != 0) + { + /* The result did not fit into the buffer. Copy the initial segment + into the buffer, truncating it if necessary. */ + size_t n = (length < size ? length : size - 1); + DCHAR_CPY (buf, result, n); + buf[n] = '\0'; + } + free (result); + } + + if (length > INT_MAX) + { + errno = EOVERFLOW; + return -1; + } + + /* Return the number of resulting units, excluding the trailing NUL. */ + return length; +} diff --git a/lib/unistdio/u-vsprintf.h b/lib/unistdio/u-vsprintf.h new file mode 100644 index 00000000..36ebd9fa --- /dev/null +++ b/lib/unistdio/u-vsprintf.h @@ -0,0 +1,58 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef SIZE_MAX +# define SIZE_MAX ((size_t) -1) +#endif + +int +VSPRINTF (DCHAR_T *buf, const FCHAR_T *format, va_list args) +{ + /* Pass an infinite length. But note that *vasnprintf may fail if the buffer + argument is larger than INT_MAX (if that fits into a 'size_t' at all). + Also note that glibc's iconv fails with E2BIG when we pass a length that + is so large that buf + length wraps around, i.e. + (uintptr_t) (buf + length) < (uintptr_t) buf. */ + size_t length; + DCHAR_T *result; + + /* Set length = min (SIZE_MAX, INT_MAX, - (uintptr_t) buf - 1). */ + length = (SIZE_MAX < INT_MAX ? SIZE_MAX : INT_MAX); + if (length > (~ (uintptr_t) buf) / sizeof (DCHAR_T)) + length = (~ (uintptr_t) buf) / sizeof (DCHAR_T); + + result = VASNPRINTF (buf, &length, format, args); + if (result == NULL) + return -1; + + /* The infinite buffer size guarantees that the result is not malloc()ed. */ + if (result != buf) + { + /* length is near SIZE_MAX. */ + free (result); + errno = EOVERFLOW; + return -1; + } + + if (length > INT_MAX) + { + errno = EOVERFLOW; + return -1; + } + + /* Return the number of resulting units, excluding the trailing NUL. */ + return length; +} diff --git a/lib/unistdio/u16-asnprintf.c b/lib/unistdio/u16-asnprintf.c new file mode 100644 index 00000000..bbe4bacb --- /dev/null +++ b/lib/unistdio/u16-asnprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASNPRINTF u16_asnprintf +#define VASNPRINTF u16_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint16_t +#include "u-asnprintf.h" diff --git a/lib/unistdio/u16-asprintf.c b/lib/unistdio/u16-asprintf.c new file mode 100644 index 00000000..79f3969c --- /dev/null +++ b/lib/unistdio/u16-asprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASPRINTF u16_asprintf +#define VASPRINTF u16_vasprintf +#define FCHAR_T char +#define DCHAR_T uint16_t +#include "u-asprintf.h" diff --git a/lib/unistdio/u16-printf-parse.c b/lib/unistdio/u16-printf-parse.c new file mode 100644 index 00000000..3a8acd32 --- /dev/null +++ b/lib/unistdio/u16-printf-parse.c @@ -0,0 +1,26 @@ +/* Formatted output to strings. + Copyright (C) 1999-2000, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio/u-printf-parse.h" + +#define PRINTF_PARSE u16_printf_parse +#define CHAR_T uint16_t +#define DIRECTIVE u16_directive +#define DIRECTIVES u16_directives +#include "printf-parse.c" diff --git a/lib/unistdio/u16-snprintf.c b/lib/unistdio/u16-snprintf.c new file mode 100644 index 00000000..afed8a7e --- /dev/null +++ b/lib/unistdio/u16-snprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SNPRINTF u16_snprintf +#define VSNPRINTF u16_vsnprintf +#define FCHAR_T char +#define DCHAR_T uint16_t +#include "u-snprintf.h" diff --git a/lib/unistdio/u16-sprintf.c b/lib/unistdio/u16-sprintf.c new file mode 100644 index 00000000..48603652 --- /dev/null +++ b/lib/unistdio/u16-sprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SPRINTF u16_sprintf +#define VSPRINTF u16_vsprintf +#define FCHAR_T char +#define DCHAR_T uint16_t +#include "u-sprintf.h" diff --git a/lib/unistdio/u16-u16-asnprintf.c b/lib/unistdio/u16-u16-asnprintf.c new file mode 100644 index 00000000..64c257c2 --- /dev/null +++ b/lib/unistdio/u16-u16-asnprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASNPRINTF u16_u16_asnprintf +#define VASNPRINTF u16_u16_vasnprintf +#define FCHAR_T uint16_t +#define DCHAR_T uint16_t +#include "u-asnprintf.h" diff --git a/lib/unistdio/u16-u16-asprintf.c b/lib/unistdio/u16-u16-asprintf.c new file mode 100644 index 00000000..38469c6e --- /dev/null +++ b/lib/unistdio/u16-u16-asprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASPRINTF u16_u16_asprintf +#define VASPRINTF u16_u16_vasprintf +#define FCHAR_T uint16_t +#define DCHAR_T uint16_t +#include "u-asprintf.h" diff --git a/lib/unistdio/u16-u16-snprintf.c b/lib/unistdio/u16-u16-snprintf.c new file mode 100644 index 00000000..7229add1 --- /dev/null +++ b/lib/unistdio/u16-u16-snprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SNPRINTF u16_u16_snprintf +#define VSNPRINTF u16_u16_vsnprintf +#define FCHAR_T uint16_t +#define DCHAR_T uint16_t +#include "u-snprintf.h" diff --git a/lib/unistdio/u16-u16-sprintf.c b/lib/unistdio/u16-u16-sprintf.c new file mode 100644 index 00000000..1c517c36 --- /dev/null +++ b/lib/unistdio/u16-u16-sprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SPRINTF u16_u16_sprintf +#define VSPRINTF u16_u16_vsprintf +#define FCHAR_T uint16_t +#define DCHAR_T uint16_t +#include "u-sprintf.h" diff --git a/lib/unistdio/u16-u16-vasnprintf.c b/lib/unistdio/u16-u16-vasnprintf.c new file mode 100644 index 00000000..e33851e2 --- /dev/null +++ b/lib/unistdio/u16-u16-vasnprintf.c @@ -0,0 +1,49 @@ +/* Formatted output to UTF-16 strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Tell glibc's to provide a prototype for snprintf(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include +#include + +/* Specification. */ +#include "unistdio.h" + +#include "uniconv.h" +#include "unistr.h" +#include "unistdio/u-printf-parse.h" + +#define VASNPRINTF u16_u16_vasnprintf +#define FCHAR_T uint16_t +#define DIRECTIVE u16_directive +#define DIRECTIVES u16_directives +#define PRINTF_PARSE u16_printf_parse +#define DCHAR_T uint16_t +#define DCHAR_T_IS_UINT16_T 1 +#define DCHAR_CPY u16_cpy +#define DCHAR_SET u16_set +#define DCHAR_MBSNLEN u16_mbsnlen +#define DCHAR_IS_UINT16_T 1 +#define U8_TO_DCHAR u8_to_u16 +#define U32_TO_DCHAR u32_to_u16 +#define DCHAR_CONV_FROM_ENCODING u16_conv_from_encoding +#define TCHAR_T char +#include "vasnprintf.c" diff --git a/lib/unistdio/u16-u16-vasprintf.c b/lib/unistdio/u16-u16-vasprintf.c new file mode 100644 index 00000000..3d8fc508 --- /dev/null +++ b/lib/unistdio/u16-u16-vasprintf.c @@ -0,0 +1,30 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include + +#define VASPRINTF u16_u16_vasprintf +#define VASNPRINTF u16_u16_vasnprintf +#define FCHAR_T uint16_t +#define DCHAR_T uint16_t +#include "u-vasprintf.h" diff --git a/lib/unistdio/u16-u16-vsnprintf.c b/lib/unistdio/u16-u16-vsnprintf.c new file mode 100644 index 00000000..6bbf8251 --- /dev/null +++ b/lib/unistdio/u16-u16-vsnprintf.c @@ -0,0 +1,33 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include "unistr.h" + +#define VSNPRINTF u16_u16_vsnprintf +#define VASNPRINTF u16_u16_vasnprintf +#define FCHAR_T uint16_t +#define DCHAR_T uint16_t +#define DCHAR_CPY u16_cpy +#include "u-vsnprintf.h" diff --git a/lib/unistdio/u16-u16-vsprintf.c b/lib/unistdio/u16-u16-vsprintf.c new file mode 100644 index 00000000..1a7e93c2 --- /dev/null +++ b/lib/unistdio/u16-u16-vsprintf.c @@ -0,0 +1,32 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include + +#define VSPRINTF u16_u16_vsprintf +#define VASNPRINTF u16_u16_vasnprintf +#define FCHAR_T uint16_t +#define DCHAR_T uint16_t +#include "u-vsprintf.h" diff --git a/lib/unistdio/u16-vasnprintf.c b/lib/unistdio/u16-vasnprintf.c new file mode 100644 index 00000000..3ce19d42 --- /dev/null +++ b/lib/unistdio/u16-vasnprintf.c @@ -0,0 +1,50 @@ +/* Formatted output to UTF-16 strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Tell glibc's to provide a prototype for snprintf(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include +#include + +/* Specification. */ +#include "unistdio.h" + +#include "uniconv.h" +#include "unistr.h" +#include "unistdio/u-printf-parse.h" + +#define VASNPRINTF u16_vasnprintf +#define FCHAR_T char +#define DIRECTIVE char_directive +#define DIRECTIVES char_directives +#define ASCII_ONLY 1 +#define PRINTF_PARSE ulc_printf_parse +#define DCHAR_T uint16_t +#define DCHAR_T_IS_UINT16_T 1 +#define DCHAR_CPY u16_cpy +#define DCHAR_SET u16_set +#define DCHAR_MBSNLEN u16_mbsnlen +#define DCHAR_IS_UINT16_T 1 +#define U8_TO_DCHAR u8_to_u16 +#define U32_TO_DCHAR u32_to_u16 +#define DCHAR_CONV_FROM_ENCODING u16_conv_from_encoding +#define TCHAR_T char +#include "vasnprintf.c" diff --git a/lib/unistdio/u16-vasprintf.c b/lib/unistdio/u16-vasprintf.c new file mode 100644 index 00000000..b63dd183 --- /dev/null +++ b/lib/unistdio/u16-vasprintf.c @@ -0,0 +1,30 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include + +#define VASPRINTF u16_vasprintf +#define VASNPRINTF u16_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint16_t +#include "u-vasprintf.h" diff --git a/lib/unistdio/u16-vsnprintf.c b/lib/unistdio/u16-vsnprintf.c new file mode 100644 index 00000000..b06ca094 --- /dev/null +++ b/lib/unistdio/u16-vsnprintf.c @@ -0,0 +1,33 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include "unistr.h" + +#define VSNPRINTF u16_vsnprintf +#define VASNPRINTF u16_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint16_t +#define DCHAR_CPY u16_cpy +#include "u-vsnprintf.h" diff --git a/lib/unistdio/u16-vsprintf.c b/lib/unistdio/u16-vsprintf.c new file mode 100644 index 00000000..4811bc15 --- /dev/null +++ b/lib/unistdio/u16-vsprintf.c @@ -0,0 +1,32 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include + +#define VSPRINTF u16_vsprintf +#define VASNPRINTF u16_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint16_t +#include "u-vsprintf.h" diff --git a/lib/unistdio/u32-asnprintf.c b/lib/unistdio/u32-asnprintf.c new file mode 100644 index 00000000..dad1ae49 --- /dev/null +++ b/lib/unistdio/u32-asnprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASNPRINTF u32_asnprintf +#define VASNPRINTF u32_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint32_t +#include "u-asnprintf.h" diff --git a/lib/unistdio/u32-asprintf.c b/lib/unistdio/u32-asprintf.c new file mode 100644 index 00000000..11e23f01 --- /dev/null +++ b/lib/unistdio/u32-asprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASPRINTF u32_asprintf +#define VASPRINTF u32_vasprintf +#define FCHAR_T char +#define DCHAR_T uint32_t +#include "u-asprintf.h" diff --git a/lib/unistdio/u32-printf-parse.c b/lib/unistdio/u32-printf-parse.c new file mode 100644 index 00000000..a5772566 --- /dev/null +++ b/lib/unistdio/u32-printf-parse.c @@ -0,0 +1,26 @@ +/* Formatted output to strings. + Copyright (C) 1999-2000, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio/u-printf-parse.h" + +#define PRINTF_PARSE u32_printf_parse +#define CHAR_T uint32_t +#define DIRECTIVE u32_directive +#define DIRECTIVES u32_directives +#include "printf-parse.c" diff --git a/lib/unistdio/u32-snprintf.c b/lib/unistdio/u32-snprintf.c new file mode 100644 index 00000000..7d670171 --- /dev/null +++ b/lib/unistdio/u32-snprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SNPRINTF u32_snprintf +#define VSNPRINTF u32_vsnprintf +#define FCHAR_T char +#define DCHAR_T uint32_t +#include "u-snprintf.h" diff --git a/lib/unistdio/u32-sprintf.c b/lib/unistdio/u32-sprintf.c new file mode 100644 index 00000000..6f930d09 --- /dev/null +++ b/lib/unistdio/u32-sprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SPRINTF u32_sprintf +#define VSPRINTF u32_vsprintf +#define FCHAR_T char +#define DCHAR_T uint32_t +#include "u-sprintf.h" diff --git a/lib/unistdio/u32-u32-asnprintf.c b/lib/unistdio/u32-u32-asnprintf.c new file mode 100644 index 00000000..b3a02745 --- /dev/null +++ b/lib/unistdio/u32-u32-asnprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASNPRINTF u32_u32_asnprintf +#define VASNPRINTF u32_u32_vasnprintf +#define FCHAR_T uint32_t +#define DCHAR_T uint32_t +#include "u-asnprintf.h" diff --git a/lib/unistdio/u32-u32-asprintf.c b/lib/unistdio/u32-u32-asprintf.c new file mode 100644 index 00000000..91a96fc4 --- /dev/null +++ b/lib/unistdio/u32-u32-asprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASPRINTF u32_u32_asprintf +#define VASPRINTF u32_u32_vasprintf +#define FCHAR_T uint32_t +#define DCHAR_T uint32_t +#include "u-asprintf.h" diff --git a/lib/unistdio/u32-u32-snprintf.c b/lib/unistdio/u32-u32-snprintf.c new file mode 100644 index 00000000..cf88529c --- /dev/null +++ b/lib/unistdio/u32-u32-snprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SNPRINTF u32_u32_snprintf +#define VSNPRINTF u32_u32_vsnprintf +#define FCHAR_T uint32_t +#define DCHAR_T uint32_t +#include "u-snprintf.h" diff --git a/lib/unistdio/u32-u32-sprintf.c b/lib/unistdio/u32-u32-sprintf.c new file mode 100644 index 00000000..ccf6d028 --- /dev/null +++ b/lib/unistdio/u32-u32-sprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SPRINTF u32_u32_sprintf +#define VSPRINTF u32_u32_vsprintf +#define FCHAR_T uint32_t +#define DCHAR_T uint32_t +#include "u-sprintf.h" diff --git a/lib/unistdio/u32-u32-vasnprintf.c b/lib/unistdio/u32-u32-vasnprintf.c new file mode 100644 index 00000000..b272af33 --- /dev/null +++ b/lib/unistdio/u32-u32-vasnprintf.c @@ -0,0 +1,49 @@ +/* Formatted output to UTF-32 strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Tell glibc's to provide a prototype for snprintf(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include +#include + +/* Specification. */ +#include "unistdio.h" + +#include "uniconv.h" +#include "unistr.h" +#include "unistdio/u-printf-parse.h" + +#define VASNPRINTF u32_u32_vasnprintf +#define FCHAR_T uint32_t +#define DIRECTIVE u32_directive +#define DIRECTIVES u32_directives +#define PRINTF_PARSE u32_printf_parse +#define DCHAR_T uint32_t +#define DCHAR_T_IS_UINT32_T 1 +#define DCHAR_CPY u32_cpy +#define DCHAR_SET u32_set +#define DCHAR_MBSNLEN u32_mbsnlen +#define DCHAR_IS_UINT32_T 1 +#define U8_TO_DCHAR u8_to_u32 +#define U16_TO_DCHAR u16_to_u32 +#define DCHAR_CONV_FROM_ENCODING u32_conv_from_encoding +#define TCHAR_T char +#include "vasnprintf.c" diff --git a/lib/unistdio/u32-u32-vasprintf.c b/lib/unistdio/u32-u32-vasprintf.c new file mode 100644 index 00000000..bacc7c1b --- /dev/null +++ b/lib/unistdio/u32-u32-vasprintf.c @@ -0,0 +1,30 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include + +#define VASPRINTF u32_u32_vasprintf +#define VASNPRINTF u32_u32_vasnprintf +#define FCHAR_T uint32_t +#define DCHAR_T uint32_t +#include "u-vasprintf.h" diff --git a/lib/unistdio/u32-u32-vsnprintf.c b/lib/unistdio/u32-u32-vsnprintf.c new file mode 100644 index 00000000..7f436236 --- /dev/null +++ b/lib/unistdio/u32-u32-vsnprintf.c @@ -0,0 +1,33 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include "unistr.h" + +#define VSNPRINTF u32_u32_vsnprintf +#define VASNPRINTF u32_u32_vasnprintf +#define FCHAR_T uint32_t +#define DCHAR_T uint32_t +#define DCHAR_CPY u32_cpy +#include "u-vsnprintf.h" diff --git a/lib/unistdio/u32-u32-vsprintf.c b/lib/unistdio/u32-u32-vsprintf.c new file mode 100644 index 00000000..46d299ac --- /dev/null +++ b/lib/unistdio/u32-u32-vsprintf.c @@ -0,0 +1,32 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include + +#define VSPRINTF u32_u32_vsprintf +#define VASNPRINTF u32_u32_vasnprintf +#define FCHAR_T uint32_t +#define DCHAR_T uint32_t +#include "u-vsprintf.h" diff --git a/lib/unistdio/u32-vasnprintf.c b/lib/unistdio/u32-vasnprintf.c new file mode 100644 index 00000000..6aac6235 --- /dev/null +++ b/lib/unistdio/u32-vasnprintf.c @@ -0,0 +1,50 @@ +/* Formatted output to UTF-32 strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Tell glibc's to provide a prototype for snprintf(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include +#include + +/* Specification. */ +#include "unistdio.h" + +#include "uniconv.h" +#include "unistr.h" +#include "unistdio/u-printf-parse.h" + +#define VASNPRINTF u32_vasnprintf +#define FCHAR_T char +#define DIRECTIVE char_directive +#define DIRECTIVES char_directives +#define ASCII_ONLY 1 +#define PRINTF_PARSE ulc_printf_parse +#define DCHAR_T uint32_t +#define DCHAR_T_IS_UINT32_T 1 +#define DCHAR_CPY u32_cpy +#define DCHAR_SET u32_set +#define DCHAR_MBSNLEN u32_mbsnlen +#define DCHAR_IS_UINT32_T 1 +#define U8_TO_DCHAR u8_to_u32 +#define U16_TO_DCHAR u16_to_u32 +#define DCHAR_CONV_FROM_ENCODING u32_conv_from_encoding +#define TCHAR_T char +#include "vasnprintf.c" diff --git a/lib/unistdio/u32-vasprintf.c b/lib/unistdio/u32-vasprintf.c new file mode 100644 index 00000000..e6883e31 --- /dev/null +++ b/lib/unistdio/u32-vasprintf.c @@ -0,0 +1,30 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include + +#define VASPRINTF u32_vasprintf +#define VASNPRINTF u32_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint32_t +#include "u-vasprintf.h" diff --git a/lib/unistdio/u32-vsnprintf.c b/lib/unistdio/u32-vsnprintf.c new file mode 100644 index 00000000..a55e1c76 --- /dev/null +++ b/lib/unistdio/u32-vsnprintf.c @@ -0,0 +1,33 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include "unistr.h" + +#define VSNPRINTF u32_vsnprintf +#define VASNPRINTF u32_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint32_t +#define DCHAR_CPY u32_cpy +#include "u-vsnprintf.h" diff --git a/lib/unistdio/u32-vsprintf.c b/lib/unistdio/u32-vsprintf.c new file mode 100644 index 00000000..a850e45f --- /dev/null +++ b/lib/unistdio/u32-vsprintf.c @@ -0,0 +1,32 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include + +#define VSPRINTF u32_vsprintf +#define VASNPRINTF u32_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint32_t +#include "u-vsprintf.h" diff --git a/lib/unistdio/u8-asnprintf.c b/lib/unistdio/u8-asnprintf.c new file mode 100644 index 00000000..b8e7a276 --- /dev/null +++ b/lib/unistdio/u8-asnprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASNPRINTF u8_asnprintf +#define VASNPRINTF u8_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint8_t +#include "u-asnprintf.h" diff --git a/lib/unistdio/u8-asprintf.c b/lib/unistdio/u8-asprintf.c new file mode 100644 index 00000000..22b01705 --- /dev/null +++ b/lib/unistdio/u8-asprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASPRINTF u8_asprintf +#define VASPRINTF u8_vasprintf +#define FCHAR_T char +#define DCHAR_T uint8_t +#include "u-asprintf.h" diff --git a/lib/unistdio/u8-printf-parse.c b/lib/unistdio/u8-printf-parse.c new file mode 100644 index 00000000..a3555481 --- /dev/null +++ b/lib/unistdio/u8-printf-parse.c @@ -0,0 +1,26 @@ +/* Formatted output to strings. + Copyright (C) 1999-2000, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio/u-printf-parse.h" + +#define PRINTF_PARSE u8_printf_parse +#define CHAR_T uint8_t +#define DIRECTIVE u8_directive +#define DIRECTIVES u8_directives +#include "printf-parse.c" diff --git a/lib/unistdio/u8-snprintf.c b/lib/unistdio/u8-snprintf.c new file mode 100644 index 00000000..87290541 --- /dev/null +++ b/lib/unistdio/u8-snprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SNPRINTF u8_snprintf +#define VSNPRINTF u8_vsnprintf +#define FCHAR_T char +#define DCHAR_T uint8_t +#include "u-snprintf.h" diff --git a/lib/unistdio/u8-sprintf.c b/lib/unistdio/u8-sprintf.c new file mode 100644 index 00000000..330feaee --- /dev/null +++ b/lib/unistdio/u8-sprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SPRINTF u8_sprintf +#define VSPRINTF u8_vsprintf +#define FCHAR_T char +#define DCHAR_T uint8_t +#include "u-sprintf.h" diff --git a/lib/unistdio/u8-u8-asnprintf.c b/lib/unistdio/u8-u8-asnprintf.c new file mode 100644 index 00000000..9379c72a --- /dev/null +++ b/lib/unistdio/u8-u8-asnprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASNPRINTF u8_u8_asnprintf +#define VASNPRINTF u8_u8_vasnprintf +#define FCHAR_T uint8_t +#define DCHAR_T uint8_t +#include "u-asnprintf.h" diff --git a/lib/unistdio/u8-u8-asprintf.c b/lib/unistdio/u8-u8-asprintf.c new file mode 100644 index 00000000..59745278 --- /dev/null +++ b/lib/unistdio/u8-u8-asprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASPRINTF u8_u8_asprintf +#define VASPRINTF u8_u8_vasprintf +#define FCHAR_T uint8_t +#define DCHAR_T uint8_t +#include "u-asprintf.h" diff --git a/lib/unistdio/u8-u8-snprintf.c b/lib/unistdio/u8-u8-snprintf.c new file mode 100644 index 00000000..26dfac0e --- /dev/null +++ b/lib/unistdio/u8-u8-snprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SNPRINTF u8_u8_snprintf +#define VSNPRINTF u8_u8_vsnprintf +#define FCHAR_T uint8_t +#define DCHAR_T uint8_t +#include "u-snprintf.h" diff --git a/lib/unistdio/u8-u8-sprintf.c b/lib/unistdio/u8-u8-sprintf.c new file mode 100644 index 00000000..53b3c96b --- /dev/null +++ b/lib/unistdio/u8-u8-sprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SPRINTF u8_u8_sprintf +#define VSPRINTF u8_u8_vsprintf +#define FCHAR_T uint8_t +#define DCHAR_T uint8_t +#include "u-sprintf.h" diff --git a/lib/unistdio/u8-u8-vasnprintf.c b/lib/unistdio/u8-u8-vasnprintf.c new file mode 100644 index 00000000..7535d4ca --- /dev/null +++ b/lib/unistdio/u8-u8-vasnprintf.c @@ -0,0 +1,49 @@ +/* Formatted output to UTF-8 strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Tell glibc's to provide a prototype for snprintf(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include +#include + +/* Specification. */ +#include "unistdio.h" + +#include "uniconv.h" +#include "unistr.h" +#include "unistdio/u-printf-parse.h" + +#define VASNPRINTF u8_u8_vasnprintf +#define FCHAR_T uint8_t +#define DIRECTIVE u8_directive +#define DIRECTIVES u8_directives +#define PRINTF_PARSE u8_printf_parse +#define DCHAR_T uint8_t +#define DCHAR_T_IS_UINT8_T 1 +#define DCHAR_CPY u8_cpy +#define DCHAR_SET u8_set +#define DCHAR_MBSNLEN u8_mbsnlen +#define DCHAR_IS_UINT8_T 1 +#define U16_TO_DCHAR u16_to_u8 +#define U32_TO_DCHAR u32_to_u8 +#define DCHAR_CONV_FROM_ENCODING u8_conv_from_encoding +#define TCHAR_T char +#include "vasnprintf.c" diff --git a/lib/unistdio/u8-u8-vasprintf.c b/lib/unistdio/u8-u8-vasprintf.c new file mode 100644 index 00000000..bb28dc5f --- /dev/null +++ b/lib/unistdio/u8-u8-vasprintf.c @@ -0,0 +1,30 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include + +#define VASPRINTF u8_u8_vasprintf +#define VASNPRINTF u8_u8_vasnprintf +#define FCHAR_T uint8_t +#define DCHAR_T uint8_t +#include "u-vasprintf.h" diff --git a/lib/unistdio/u8-u8-vsnprintf.c b/lib/unistdio/u8-u8-vsnprintf.c new file mode 100644 index 00000000..f9e99223 --- /dev/null +++ b/lib/unistdio/u8-u8-vsnprintf.c @@ -0,0 +1,33 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include "unistr.h" + +#define VSNPRINTF u8_u8_vsnprintf +#define VASNPRINTF u8_u8_vasnprintf +#define FCHAR_T uint8_t +#define DCHAR_T uint8_t +#define DCHAR_CPY u8_cpy +#include "u-vsnprintf.h" diff --git a/lib/unistdio/u8-u8-vsprintf.c b/lib/unistdio/u8-u8-vsprintf.c new file mode 100644 index 00000000..9e66018a --- /dev/null +++ b/lib/unistdio/u8-u8-vsprintf.c @@ -0,0 +1,32 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include + +#define VSPRINTF u8_u8_vsprintf +#define VASNPRINTF u8_u8_vasnprintf +#define FCHAR_T uint8_t +#define DCHAR_T uint8_t +#include "u-vsprintf.h" diff --git a/lib/unistdio/u8-vasnprintf.c b/lib/unistdio/u8-vasnprintf.c new file mode 100644 index 00000000..0067e6ce --- /dev/null +++ b/lib/unistdio/u8-vasnprintf.c @@ -0,0 +1,50 @@ +/* Formatted output to UTF-8 strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Tell glibc's to provide a prototype for snprintf(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include +#include + +/* Specification. */ +#include "unistdio.h" + +#include "uniconv.h" +#include "unistr.h" +#include "unistdio/u-printf-parse.h" + +#define VASNPRINTF u8_vasnprintf +#define FCHAR_T char +#define DIRECTIVE char_directive +#define DIRECTIVES char_directives +#define ASCII_ONLY 1 +#define PRINTF_PARSE ulc_printf_parse +#define DCHAR_T uint8_t +#define DCHAR_T_IS_UINT8_T 1 +#define DCHAR_CPY u8_cpy +#define DCHAR_SET u8_set +#define DCHAR_MBSNLEN u8_mbsnlen +#define DCHAR_IS_UINT8_T 1 +#define U16_TO_DCHAR u16_to_u8 +#define U32_TO_DCHAR u32_to_u8 +#define DCHAR_CONV_FROM_ENCODING u8_conv_from_encoding +#define TCHAR_T char +#include "vasnprintf.c" diff --git a/lib/unistdio/u8-vasprintf.c b/lib/unistdio/u8-vasprintf.c new file mode 100644 index 00000000..304d4965 --- /dev/null +++ b/lib/unistdio/u8-vasprintf.c @@ -0,0 +1,30 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include + +#define VASPRINTF u8_vasprintf +#define VASNPRINTF u8_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint8_t +#include "u-vasprintf.h" diff --git a/lib/unistdio/u8-vsnprintf.c b/lib/unistdio/u8-vsnprintf.c new file mode 100644 index 00000000..87388e29 --- /dev/null +++ b/lib/unistdio/u8-vsnprintf.c @@ -0,0 +1,33 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include "unistr.h" + +#define VSNPRINTF u8_vsnprintf +#define VASNPRINTF u8_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint8_t +#define DCHAR_CPY u8_cpy +#include "u-vsnprintf.h" diff --git a/lib/unistdio/u8-vsprintf.c b/lib/unistdio/u8-vsprintf.c new file mode 100644 index 00000000..aa0b52d2 --- /dev/null +++ b/lib/unistdio/u8-vsprintf.c @@ -0,0 +1,32 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include + +#define VSPRINTF u8_vsprintf +#define VASNPRINTF u8_vasnprintf +#define FCHAR_T char +#define DCHAR_T uint8_t +#include "u-vsprintf.h" diff --git a/lib/unistdio/ulc-asnprintf.c b/lib/unistdio/ulc-asnprintf.c new file mode 100644 index 00000000..31d3f220 --- /dev/null +++ b/lib/unistdio/ulc-asnprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASNPRINTF ulc_asnprintf +#define VASNPRINTF ulc_vasnprintf +#define FCHAR_T char +#define DCHAR_T char +#include "u-asnprintf.h" diff --git a/lib/unistdio/ulc-asprintf.c b/lib/unistdio/ulc-asprintf.c new file mode 100644 index 00000000..4f760e1d --- /dev/null +++ b/lib/unistdio/ulc-asprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define ASPRINTF ulc_asprintf +#define VASPRINTF ulc_vasprintf +#define FCHAR_T char +#define DCHAR_T char +#include "u-asprintf.h" diff --git a/lib/unistdio/ulc-fprintf.c b/lib/unistdio/ulc-fprintf.c new file mode 100644 index 00000000..ac8ab6fe --- /dev/null +++ b/lib/unistdio/ulc-fprintf.c @@ -0,0 +1,74 @@ +/* Formatted output to a stream. + Copyright (C) 2004, 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include + +#include "fseterr.h" + +/* Print formatted output to the stream FP. + Return string length of formatted string. On error, return a negative + value. */ +int +ulc_fprintf (FILE *fp, const char *format, ...) +{ + char buf[2000]; + char *output; + size_t len; + size_t lenbuf = sizeof (buf); + va_list args; + + va_start (args, format); + output = ulc_vasnprintf (buf, &lenbuf, format, args); + len = lenbuf; + va_end (args); + + if (!output) + { + fseterr (fp); + return -1; + } + + if (fwrite (output, 1, len, fp) < len) + { + if (output != buf) + { + int saved_errno = errno; + free (output); + errno = saved_errno; + } + return -1; + } + + if (len > INT_MAX) + { + errno = EOVERFLOW; + fseterr (fp); + return -1; + } + + return len; +} diff --git a/lib/unistdio/ulc-printf-parse.c b/lib/unistdio/ulc-printf-parse.c new file mode 100644 index 00000000..81af3690 --- /dev/null +++ b/lib/unistdio/ulc-printf-parse.c @@ -0,0 +1,27 @@ +/* Formatted output to strings. + Copyright (C) 1999-2000, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio/u-printf-parse.h" + +#define PRINTF_PARSE ulc_printf_parse +#define CHAR_T char +#define CHAR_T_ONLY_ASCII 1 +#define DIRECTIVE char_directive +#define DIRECTIVES char_directives +#include "printf-parse.c" diff --git a/lib/unistdio/ulc-snprintf.c b/lib/unistdio/ulc-snprintf.c new file mode 100644 index 00000000..f774ac04 --- /dev/null +++ b/lib/unistdio/ulc-snprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SNPRINTF ulc_snprintf +#define VSNPRINTF ulc_vsnprintf +#define FCHAR_T char +#define DCHAR_T char +#include "u-snprintf.h" diff --git a/lib/unistdio/ulc-sprintf.c b/lib/unistdio/ulc-sprintf.c new file mode 100644 index 00000000..466ffb40 --- /dev/null +++ b/lib/unistdio/ulc-sprintf.c @@ -0,0 +1,28 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2005-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include + +#define SPRINTF ulc_sprintf +#define VSPRINTF ulc_vsprintf +#define FCHAR_T char +#define DCHAR_T char +#include "u-sprintf.h" diff --git a/lib/unistdio/ulc-vasnprintf.c b/lib/unistdio/ulc-vasnprintf.c new file mode 100644 index 00000000..e89b7fff --- /dev/null +++ b/lib/unistdio/ulc-vasnprintf.c @@ -0,0 +1,46 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Tell glibc's to provide a prototype for snprintf(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include +#include + +/* Specification. */ +#include "unistdio.h" + +#include "uniconv.h" +#include "unistr.h" +#include "unistdio/u-printf-parse.h" + +#define VASNPRINTF ulc_vasnprintf +#define FCHAR_T char +#define DIRECTIVE char_directive +#define DIRECTIVES char_directives +#define FCHAR_T_ONLY_ASCII 1 +#define PRINTF_PARSE ulc_printf_parse +#define DCHAR_T char +#define DCHAR_CPY memcpy +#define DCHAR_SET memset +#define DCHAR_MBSNLEN mbsnlen +#define TCHAR_T char +#define DCHAR_IS_TCHAR 1 +#include "vasnprintf.c" diff --git a/lib/unistdio/ulc-vasprintf.c b/lib/unistdio/ulc-vasprintf.c new file mode 100644 index 00000000..8773ab46 --- /dev/null +++ b/lib/unistdio/ulc-vasprintf.c @@ -0,0 +1,30 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include + +#define VASPRINTF ulc_vasprintf +#define VASNPRINTF ulc_vasnprintf +#define FCHAR_T char +#define DCHAR_T char +#include "u-vasprintf.h" diff --git a/lib/unistdio/ulc-vfprintf.c b/lib/unistdio/ulc-vfprintf.c new file mode 100644 index 00000000..586fe13a --- /dev/null +++ b/lib/unistdio/ulc-vfprintf.c @@ -0,0 +1,71 @@ +/* Formatted output to a stream. + Copyright (C) 2004, 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include + +#include "fseterr.h" + +/* Print formatted output to the stream FP. + Return string length of formatted string. On error, return a negative + value. */ +int +ulc_vfprintf (FILE *fp, const char *format, va_list args) +{ + char buf[2000]; + char *output; + size_t len; + size_t lenbuf = sizeof (buf); + + output = ulc_vasnprintf (buf, &lenbuf, format, args); + len = lenbuf; + + if (!output) + { + fseterr (fp); + return -1; + } + + if (fwrite (output, 1, len, fp) < len) + { + if (output != buf) + { + int saved_errno = errno; + free (output); + errno = saved_errno; + } + return -1; + } + + if (len > INT_MAX) + { + errno = EOVERFLOW; + fseterr (fp); + return -1; + } + + return len; +} diff --git a/lib/unistdio/ulc-vsnprintf.c b/lib/unistdio/ulc-vsnprintf.c new file mode 100644 index 00000000..c1665359 --- /dev/null +++ b/lib/unistdio/ulc-vsnprintf.c @@ -0,0 +1,33 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include + +#define VSNPRINTF ulc_vsnprintf +#define VASNPRINTF ulc_vasnprintf +#define FCHAR_T char +#define DCHAR_T char +#define DCHAR_CPY memcpy +#include "u-vsnprintf.h" diff --git a/lib/unistdio/ulc-vsprintf.c b/lib/unistdio/ulc-vsprintf.c new file mode 100644 index 00000000..0cccc05d --- /dev/null +++ b/lib/unistdio/ulc-vsprintf.c @@ -0,0 +1,32 @@ +/* Formatted output to strings. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistdio.h" + +#include +#include +#include +#include +#include + +#define VSPRINTF ulc_vsprintf +#define VASNPRINTF ulc_vasnprintf +#define FCHAR_T char +#define DCHAR_T char +#include "u-vsprintf.h" diff --git a/lib/unistr.h b/lib/unistr.h new file mode 100644 index 00000000..01ecc372 --- /dev/null +++ b/lib/unistr.h @@ -0,0 +1,684 @@ +/* Elementary Unicode string functions. + Copyright (C) 2001-2002, 2005-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNISTR_H +#define _UNISTR_H + +#include "unitypes.h" + +/* Get inline if available. */ +#include + +/* Get bool. */ +#include + +/* Get size_t. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Conventions: + + All functions prefixed with u8_ operate on UTF-8 encoded strings. + Their unit is an uint8_t (1 byte). + + All functions prefixed with u16_ operate on UTF-16 encoded strings. + Their unit is an uint16_t (a 2-byte word). + + All functions prefixed with u32_ operate on UCS-4 encoded strings. + Their unit is an uint32_t (a 4-byte word). + + All argument pairs (s, n) denote a Unicode string s[0..n-1] with exactly + n units. + + All arguments starting with "str" and the arguments of functions starting + with u8_str/u16_str/u32_str denote a NUL terminated string, i.e. a string + which terminates at the first NUL unit. This termination unit is + considered part of the string for all memory allocation purposes, but + is not considered part of the string for all other logical purposes. + + Functions returning a string result take a (resultbuf, lengthp) argument + pair. If resultbuf is not NULL and the result fits into *lengthp units, + it is put in resultbuf, and resultbuf is returned. Otherwise, a freshly + allocated string is returned. In both cases, *lengthp is set to the + length (number of units) of the returned string. In case of error, + NULL is returned and errno is set. */ + + +/* Elementary string checks. */ + +/* Check whether an UTF-8 string is well-formed. + Return NULL if valid, or a pointer to the first invalid unit otherwise. */ +extern const uint8_t * + u8_check (const uint8_t *s, size_t n); + +/* Check whether an UTF-16 string is well-formed. + Return NULL if valid, or a pointer to the first invalid unit otherwise. */ +extern const uint16_t * + u16_check (const uint16_t *s, size_t n); + +/* Check whether an UCS-4 string is well-formed. + Return NULL if valid, or a pointer to the first invalid unit otherwise. */ +extern const uint32_t * + u32_check (const uint32_t *s, size_t n); + + +/* Elementary string conversions. */ + +/* Convert an UTF-8 string to an UTF-16 string. */ +extern uint16_t * + u8_to_u16 (const uint8_t *s, size_t n, uint16_t *resultbuf, + size_t *lengthp); + +/* Convert an UTF-8 string to an UCS-4 string. */ +extern uint32_t * + u8_to_u32 (const uint8_t *s, size_t n, uint32_t *resultbuf, + size_t *lengthp); + +/* Convert an UTF-16 string to an UTF-8 string. */ +extern uint8_t * + u16_to_u8 (const uint16_t *s, size_t n, uint8_t *resultbuf, + size_t *lengthp); + +/* Convert an UTF-16 string to an UCS-4 string. */ +extern uint32_t * + u16_to_u32 (const uint16_t *s, size_t n, uint32_t *resultbuf, + size_t *lengthp); + +/* Convert an UCS-4 string to an UTF-8 string. */ +extern uint8_t * + u32_to_u8 (const uint32_t *s, size_t n, uint8_t *resultbuf, + size_t *lengthp); + +/* Convert an UCS-4 string to an UTF-16 string. */ +extern uint16_t * + u32_to_u16 (const uint32_t *s, size_t n, uint16_t *resultbuf, + size_t *lengthp); + + +/* Elementary string functions. */ + +/* Return the length (number of units) of the first character in S, which is + no longer than N. Return 0 if it is the NUL character. Return -1 upon + failure. */ +/* Similar to mblen(), except that s must not be NULL. */ +extern int + u8_mblen (const uint8_t *s, size_t n); +extern int + u16_mblen (const uint16_t *s, size_t n); +extern int + u32_mblen (const uint32_t *s, size_t n); + +/* Return the length (number of units) of the first character in S, putting + its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd, + and an appropriate number of units is returned. + The number of available units, N, must be > 0. */ +/* Similar to mbtowc(), except that puc and s must not be NULL, n must be > 0, + and the NUL character is not treated specially. */ +/* The variants with _safe suffix are safe, even if the library is compiled + without --enable-safety. */ + +#if 1 +# if !UNISTRING_HAVE_INLINE +extern int + u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n); +# else +extern int + u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n); +static inline int +u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n) +{ + uint8_t c = *s; + + if (c < 0x80) + { + *puc = c; + return 1; + } + else + return u8_mbtouc_unsafe_aux (puc, s, n); +} +# endif +#endif + +#if 1 +# if !UNISTRING_HAVE_INLINE +extern int + u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n); +# else +extern int + u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n); +static inline int +u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n) +{ + uint16_t c = *s; + + if (c < 0xd800 || c >= 0xe000) + { + *puc = c; + return 1; + } + else + return u16_mbtouc_unsafe_aux (puc, s, n); +} +# endif +#endif + +#if 1 +# if !UNISTRING_HAVE_INLINE +extern int + u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n); +# else +static inline int +u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n _UNUSED_PARAMETER_) +{ + uint32_t c = *s; + +# if CONFIG_UNICODE_SAFETY + if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) +# endif + *puc = c; +# if CONFIG_UNICODE_SAFETY + else + /* invalid multibyte character */ + *puc = 0xfffd; +# endif + return 1; +} +# endif +#endif + +#if 1 +# if !UNISTRING_HAVE_INLINE +extern int + u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n); +# else +extern int + u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n); +static inline int +u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n) +{ + uint8_t c = *s; + + if (c < 0x80) + { + *puc = c; + return 1; + } + else + return u8_mbtouc_aux (puc, s, n); +} +# endif +#endif + +#if 1 +# if !UNISTRING_HAVE_INLINE +extern int + u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n); +# else +extern int + u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n); +static inline int +u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n) +{ + uint16_t c = *s; + + if (c < 0xd800 || c >= 0xe000) + { + *puc = c; + return 1; + } + else + return u16_mbtouc_aux (puc, s, n); +} +# endif +#endif + +#if 1 +# if !UNISTRING_HAVE_INLINE +extern int + u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n); +# else +static inline int +u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n _UNUSED_PARAMETER_) +{ + uint32_t c = *s; + + if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) + *puc = c; + else + /* invalid multibyte character */ + *puc = 0xfffd; + return 1; +} +# endif +#endif + +/* Return the length (number of units) of the first character in S, putting + its 'ucs4_t' representation in *PUC. Upon failure, *PUC is set to 0xfffd, + and -1 is returned for an invalid sequence of units, -2 is returned for an + incomplete sequence of units. + The number of available units, N, must be > 0. */ +/* Similar to u*_mbtouc(), except that the return value gives more details + about the failure, similar to mbrtowc(). */ + +#if 1 +extern int + u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n); +#endif + +#if 1 +extern int + u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n); +#endif + +#if 1 +extern int + u32_mbtoucr (ucs4_t *puc, const uint32_t *s, size_t n); +#endif + +/* Put the multibyte character represented by UC in S, returning its + length. Return -1 upon failure, -2 if the number of available units, N, + is too small. The latter case cannot occur if N >= 6/2/1, respectively. */ +/* Similar to wctomb(), except that s must not be NULL, and the argument n + must be specified. */ + +#if 1 +/* Auxiliary function, also used by u8_chr, u8_strchr, u8_strrchr. */ +extern int + u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n); +# if !UNISTRING_HAVE_INLINE +extern int + u8_uctomb (uint8_t *s, ucs4_t uc, int n); +# else +static inline int +u8_uctomb (uint8_t *s, ucs4_t uc, int n) +{ + if (uc < 0x80 && n > 0) + { + s[0] = uc; + return 1; + } + else + return u8_uctomb_aux (s, uc, n); +} +# endif +#endif + +#if 1 +/* Auxiliary function, also used by u16_chr, u16_strchr, u16_strrchr. */ +extern int + u16_uctomb_aux (uint16_t *s, ucs4_t uc, int n); +# if !UNISTRING_HAVE_INLINE +extern int + u16_uctomb (uint16_t *s, ucs4_t uc, int n); +# else +static inline int +u16_uctomb (uint16_t *s, ucs4_t uc, int n) +{ + if (uc < 0xd800 && n > 0) + { + s[0] = uc; + return 1; + } + else + return u16_uctomb_aux (s, uc, n); +} +# endif +#endif + +#if 1 +# if !UNISTRING_HAVE_INLINE +extern int + u32_uctomb (uint32_t *s, ucs4_t uc, int n); +# else +static inline int +u32_uctomb (uint32_t *s, ucs4_t uc, int n) +{ + if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000)) + { + if (n > 0) + { + *s = uc; + return 1; + } + else + return -2; + } + else + return -1; +} +# endif +#endif + +/* Copy N units from SRC to DEST. */ +/* Similar to memcpy(). */ +extern uint8_t * + u8_cpy (uint8_t *dest, const uint8_t *src, size_t n); +extern uint16_t * + u16_cpy (uint16_t *dest, const uint16_t *src, size_t n); +extern uint32_t * + u32_cpy (uint32_t *dest, const uint32_t *src, size_t n); + +/* Copy N units from SRC to DEST, guaranteeing correct behavior for + overlapping memory areas. */ +/* Similar to memmove(). */ +extern uint8_t * + u8_move (uint8_t *dest, const uint8_t *src, size_t n); +extern uint16_t * + u16_move (uint16_t *dest, const uint16_t *src, size_t n); +extern uint32_t * + u32_move (uint32_t *dest, const uint32_t *src, size_t n); + +/* Set the first N characters of S to UC. UC should be a character that + occupies only 1 unit. */ +/* Similar to memset(). */ +extern uint8_t * + u8_set (uint8_t *s, ucs4_t uc, size_t n); +extern uint16_t * + u16_set (uint16_t *s, ucs4_t uc, size_t n); +extern uint32_t * + u32_set (uint32_t *s, ucs4_t uc, size_t n); + +/* Compare S1 and S2, each of length N. */ +/* Similar to memcmp(). */ +extern int + u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n); +extern int + u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n); +extern int + u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n); + +/* Compare S1 and S2. */ +/* Similar to the gnulib function memcmp2(). */ +extern int + u8_cmp2 (const uint8_t *s1, size_t n1, const uint8_t *s2, size_t n2); +extern int + u16_cmp2 (const uint16_t *s1, size_t n1, const uint16_t *s2, size_t n2); +extern int + u32_cmp2 (const uint32_t *s1, size_t n1, const uint32_t *s2, size_t n2); + +/* Search the string at S for UC. */ +/* Similar to memchr(). */ +extern uint8_t * + u8_chr (const uint8_t *s, size_t n, ucs4_t uc); +extern uint16_t * + u16_chr (const uint16_t *s, size_t n, ucs4_t uc); +extern uint32_t * + u32_chr (const uint32_t *s, size_t n, ucs4_t uc); + +/* Count the number of Unicode characters in the N units from S. */ +/* Similar to mbsnlen(). */ +extern size_t + u8_mbsnlen (const uint8_t *s, size_t n); +extern size_t + u16_mbsnlen (const uint16_t *s, size_t n); +extern size_t + u32_mbsnlen (const uint32_t *s, size_t n); + +/* Elementary string functions with memory allocation. */ + +/* Make a freshly allocated copy of S, of length N. */ +extern uint8_t * + u8_cpy_alloc (const uint8_t *s, size_t n); +extern uint16_t * + u16_cpy_alloc (const uint16_t *s, size_t n); +extern uint32_t * + u32_cpy_alloc (const uint32_t *s, size_t n); + +/* Elementary string functions on NUL terminated strings. */ + +/* Return the length (number of units) of the first character in S. + Return 0 if it is the NUL character. Return -1 upon failure. */ +extern int + u8_strmblen (const uint8_t *s); +extern int + u16_strmblen (const uint16_t *s); +extern int + u32_strmblen (const uint32_t *s); + +/* Return the length (number of units) of the first character in S, putting + its 'ucs4_t' representation in *PUC. Return 0 if it is the NUL + character. Return -1 upon failure. */ +extern int + u8_strmbtouc (ucs4_t *puc, const uint8_t *s); +extern int + u16_strmbtouc (ucs4_t *puc, const uint16_t *s); +extern int + u32_strmbtouc (ucs4_t *puc, const uint32_t *s); + +/* Forward iteration step. Advances the pointer past the next character, + or returns NULL if the end of the string has been reached. Puts the + character's 'ucs4_t' representation in *PUC. */ +extern const uint8_t * + u8_next (ucs4_t *puc, const uint8_t *s); +extern const uint16_t * + u16_next (ucs4_t *puc, const uint16_t *s); +extern const uint32_t * + u32_next (ucs4_t *puc, const uint32_t *s); + +/* Backward iteration step. Advances the pointer to point to the previous + character, or returns NULL if the beginning of the string had been reached. + Puts the character's 'ucs4_t' representation in *PUC. */ +extern const uint8_t * + u8_prev (ucs4_t *puc, const uint8_t *s, const uint8_t *start); +extern const uint16_t * + u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start); +extern const uint32_t * + u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start); + +/* Return the number of units in S. */ +/* Similar to strlen(), wcslen(). */ +extern size_t + u8_strlen (const uint8_t *s); +extern size_t + u16_strlen (const uint16_t *s); +extern size_t + u32_strlen (const uint32_t *s); + +/* Return the number of units in S, but at most MAXLEN. */ +/* Similar to strnlen(), wcsnlen(). */ +extern size_t + u8_strnlen (const uint8_t *s, size_t maxlen); +extern size_t + u16_strnlen (const uint16_t *s, size_t maxlen); +extern size_t + u32_strnlen (const uint32_t *s, size_t maxlen); + +/* Copy SRC to DEST. */ +/* Similar to strcpy(), wcscpy(). */ +extern uint8_t * + u8_strcpy (uint8_t *dest, const uint8_t *src); +extern uint16_t * + u16_strcpy (uint16_t *dest, const uint16_t *src); +extern uint32_t * + u32_strcpy (uint32_t *dest, const uint32_t *src); + +/* Copy SRC to DEST, returning the address of the terminating NUL in DEST. */ +/* Similar to stpcpy(). */ +extern uint8_t * + u8_stpcpy (uint8_t *dest, const uint8_t *src); +extern uint16_t * + u16_stpcpy (uint16_t *dest, const uint16_t *src); +extern uint32_t * + u32_stpcpy (uint32_t *dest, const uint32_t *src); + +/* Copy no more than N units of SRC to DEST. */ +/* Similar to strncpy(), wcsncpy(). */ +extern uint8_t * + u8_strncpy (uint8_t *dest, const uint8_t *src, size_t n); +extern uint16_t * + u16_strncpy (uint16_t *dest, const uint16_t *src, size_t n); +extern uint32_t * + u32_strncpy (uint32_t *dest, const uint32_t *src, size_t n); + +/* Copy no more than N units of SRC to DEST, returning the address of + the last unit written into DEST. */ +/* Similar to stpncpy(). */ +extern uint8_t * + u8_stpncpy (uint8_t *dest, const uint8_t *src, size_t n); +extern uint16_t * + u16_stpncpy (uint16_t *dest, const uint16_t *src, size_t n); +extern uint32_t * + u32_stpncpy (uint32_t *dest, const uint32_t *src, size_t n); + +/* Append SRC onto DEST. */ +/* Similar to strcat(), wcscat(). */ +extern uint8_t * + u8_strcat (uint8_t *dest, const uint8_t *src); +extern uint16_t * + u16_strcat (uint16_t *dest, const uint16_t *src); +extern uint32_t * + u32_strcat (uint32_t *dest, const uint32_t *src); + +/* Append no more than N units of SRC onto DEST. */ +/* Similar to strncat(), wcsncat(). */ +extern uint8_t * + u8_strncat (uint8_t *dest, const uint8_t *src, size_t n); +extern uint16_t * + u16_strncat (uint16_t *dest, const uint16_t *src, size_t n); +extern uint32_t * + u32_strncat (uint32_t *dest, const uint32_t *src, size_t n); + +/* Compare S1 and S2. */ +/* Similar to strcmp(), wcscmp(). */ +extern int + u8_strcmp (const uint8_t *s1, const uint8_t *s2); +extern int + u16_strcmp (const uint16_t *s1, const uint16_t *s2); +extern int + u32_strcmp (const uint32_t *s1, const uint32_t *s2); + +/* Compare S1 and S2 using the collation rules of the current locale. + Return -1 if S1 < S2, 0 if S1 = S2, 1 if S1 > S2. + Upon failure, set errno and return any value. */ +/* Similar to strcoll(), wcscoll(). */ +extern int + u8_strcoll (const uint8_t *s1, const uint8_t *s2); +extern int + u16_strcoll (const uint16_t *s1, const uint16_t *s2); +extern int + u32_strcoll (const uint32_t *s1, const uint32_t *s2); + +/* Compare no more than N units of S1 and S2. */ +/* Similar to strncmp(), wcsncmp(). */ +extern int + u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n); +extern int + u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n); +extern int + u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n); + +/* Duplicate S, returning an identical malloc'd string. */ +/* Similar to strdup(), wcsdup(). */ +extern uint8_t * + u8_strdup (const uint8_t *s); +extern uint16_t * + u16_strdup (const uint16_t *s); +extern uint32_t * + u32_strdup (const uint32_t *s); + +/* Find the first occurrence of UC in STR. */ +/* Similar to strchr(), wcschr(). */ +extern uint8_t * + u8_strchr (const uint8_t *str, ucs4_t uc); +extern uint16_t * + u16_strchr (const uint16_t *str, ucs4_t uc); +extern uint32_t * + u32_strchr (const uint32_t *str, ucs4_t uc); + +/* Find the last occurrence of UC in STR. */ +/* Similar to strrchr(), wcsrchr(). */ +extern uint8_t * + u8_strrchr (const uint8_t *str, ucs4_t uc); +extern uint16_t * + u16_strrchr (const uint16_t *str, ucs4_t uc); +extern uint32_t * + u32_strrchr (const uint32_t *str, ucs4_t uc); + +/* Return the length of the initial segment of STR which consists entirely + of Unicode characters not in REJECT. */ +/* Similar to strcspn(), wcscspn(). */ +extern size_t + u8_strcspn (const uint8_t *str, const uint8_t *reject); +extern size_t + u16_strcspn (const uint16_t *str, const uint16_t *reject); +extern size_t + u32_strcspn (const uint32_t *str, const uint32_t *reject); + +/* Return the length of the initial segment of STR which consists entirely + of Unicode characters in ACCEPT. */ +/* Similar to strspn(), wcsspn(). */ +extern size_t + u8_strspn (const uint8_t *str, const uint8_t *accept); +extern size_t + u16_strspn (const uint16_t *str, const uint16_t *accept); +extern size_t + u32_strspn (const uint32_t *str, const uint32_t *accept); + +/* Find the first occurrence in STR of any character in ACCEPT. */ +/* Similar to strpbrk(), wcspbrk(). */ +extern uint8_t * + u8_strpbrk (const uint8_t *str, const uint8_t *accept); +extern uint16_t * + u16_strpbrk (const uint16_t *str, const uint16_t *accept); +extern uint32_t * + u32_strpbrk (const uint32_t *str, const uint32_t *accept); + +/* Find the first occurrence of NEEDLE in HAYSTACK. */ +/* Similar to strstr(), wcsstr(). */ +extern uint8_t * + u8_strstr (const uint8_t *haystack, const uint8_t *needle); +extern uint16_t * + u16_strstr (const uint16_t *haystack, const uint16_t *needle); +extern uint32_t * + u32_strstr (const uint32_t *haystack, const uint32_t *needle); + +/* Test whether STR starts with PREFIX. */ +extern bool + u8_startswith (const uint8_t *str, const uint8_t *prefix); +extern bool + u16_startswith (const uint16_t *str, const uint16_t *prefix); +extern bool + u32_startswith (const uint32_t *str, const uint32_t *prefix); + +/* Test whether STR ends with SUFFIX. */ +extern bool + u8_endswith (const uint8_t *str, const uint8_t *suffix); +extern bool + u16_endswith (const uint16_t *str, const uint16_t *suffix); +extern bool + u32_endswith (const uint32_t *str, const uint32_t *suffix); + +/* Divide STR into tokens separated by characters in DELIM. + This interface is actually more similar to wcstok than to strtok. */ +/* Similar to strtok_r(), wcstok(). */ +extern uint8_t * + u8_strtok (uint8_t *str, const uint8_t *delim, uint8_t **ptr); +extern uint16_t * + u16_strtok (uint16_t *str, const uint16_t *delim, uint16_t **ptr); +extern uint32_t * + u32_strtok (uint32_t *str, const uint32_t *delim, uint32_t **ptr); + + +#ifdef __cplusplus +} +#endif + +#endif /* _UNISTR_H */ diff --git a/lib/unistr/u-cmp2.h b/lib/unistr/u-cmp2.h new file mode 100644 index 00000000..ae3750c4 --- /dev/null +++ b/lib/unistr/u-cmp2.h @@ -0,0 +1,32 @@ +/* Compare pieces of UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +FUNC (const UNIT *s1, size_t n1, const UNIT *s2, size_t n2) +{ + int cmp = U_CMP (s1, s2, MIN (n1, n2)); + + if (cmp == 0) + { + if (n1 < n2) + cmp = -1; + else if (n1 > n2) + cmp = 1; + } + + return cmp; +} diff --git a/lib/unistr/u-cpy-alloc.h b/lib/unistr/u-cpy-alloc.h new file mode 100644 index 00000000..dace3e2e --- /dev/null +++ b/lib/unistr/u-cpy-alloc.h @@ -0,0 +1,39 @@ +/* Copy piece of UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include +#include + +UNIT * +FUNC (const UNIT *s, size_t n) +{ + UNIT *dest; + + dest = (UNIT *) malloc (n > 0 ? n * sizeof (UNIT) : 1); + if (dest != NULL) + { +#if 0 + UNIT *destptr = dest; + + for (; n > 0; n--) + *destptr++ = *s++; +#else + memcpy ((char *) dest, (const char *) s, n * sizeof (UNIT)); +#endif + } + return dest; +} diff --git a/lib/unistr/u-cpy.h b/lib/unistr/u-cpy.h new file mode 100644 index 00000000..c660eae0 --- /dev/null +++ b/lib/unistr/u-cpy.h @@ -0,0 +1,32 @@ +/* Copy piece of UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +UNIT * +FUNC (UNIT *dest, const UNIT *src, size_t n) +{ +#if 0 + UNIT *destptr = dest; + + for (; n > 0; n--) + *destptr++ = *src++; +#else + memcpy ((char *) dest, (const char *) src, n * sizeof (UNIT)); +#endif + return dest; +} diff --git a/lib/unistr/u-endswith.h b/lib/unistr/u-endswith.h new file mode 100644 index 00000000..739bfbb1 --- /dev/null +++ b/lib/unistr/u-endswith.h @@ -0,0 +1,28 @@ +/* Substring test for UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +bool +FUNC (const UNIT *str, const UNIT *suffix) +{ + size_t len = U_STRLEN (str); + size_t suffixlen = U_STRLEN (suffix); + + if (len >= suffixlen) + return (U_CMP (str + (len - suffixlen), suffix, suffixlen) == 0); + else + return false; +} diff --git a/lib/unistr/u-move.h b/lib/unistr/u-move.h new file mode 100644 index 00000000..77b6788b --- /dev/null +++ b/lib/unistr/u-move.h @@ -0,0 +1,44 @@ +/* Copy piece of UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +UNIT * +FUNC (UNIT *dest, const UNIT *src, size_t n) +{ +#if 0 + if (dest < src) + { + UNIT *destptr = dest; + const UNIT *srcptr = src; + + for (; n > 0; n--) + *destptr++ = *srcptr++; + } + else if (dest > src) + { + UNIT *destptr = dest + n - 1; + const UNIT *srcptr = src + n - 1; + + for (; n > 0; n--) + *destptr-- = *srcptr--; + } +#else + memmove ((char *) dest, (const char *) src, n * sizeof (UNIT)); +#endif + return dest; +} diff --git a/lib/unistr/u-set.h b/lib/unistr/u-set.h new file mode 100644 index 00000000..a093e7f6 --- /dev/null +++ b/lib/unistr/u-set.h @@ -0,0 +1,39 @@ +/* Fill UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +UNIT * +FUNC (UNIT *s, ucs4_t uc, size_t n) +{ + if (n > 0) + { + if (IS_SINGLE_UNIT (uc)) + { + UNIT *ptr = s; + + for (; n > 0; n--) + *ptr++ = uc; + } + else + { + errno = EILSEQ; + return NULL; + } + } + return s; +} diff --git a/lib/unistr/u-startswith.h b/lib/unistr/u-startswith.h new file mode 100644 index 00000000..0486ef88 --- /dev/null +++ b/lib/unistr/u-startswith.h @@ -0,0 +1,30 @@ +/* Substring test for UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +bool +FUNC (const UNIT *str, const UNIT *prefix) +{ + for (;;) + { + UNIT uc1 = *str++; + UNIT uc2 = *prefix++; + if (uc2 == 0) + return true; + if (uc1 != uc2) + return false; + } +} diff --git a/lib/unistr/u-stpcpy.h b/lib/unistr/u-stpcpy.h new file mode 100644 index 00000000..b13e816f --- /dev/null +++ b/lib/unistr/u-stpcpy.h @@ -0,0 +1,24 @@ +/* Copy UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src) +{ + for (; (*dest = *src) != 0; src++, dest++) + ; + return dest; +} diff --git a/lib/unistr/u-stpncpy.h b/lib/unistr/u-stpncpy.h new file mode 100644 index 00000000..09bf434c --- /dev/null +++ b/lib/unistr/u-stpncpy.h @@ -0,0 +1,30 @@ +/* Copy UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src, size_t n) +{ + for (; n > 0 && (*dest = *src) != 0; src++, dest++, n--) + ; + + /* This behavior is rarely useful, but it is here for consistency with + strncpy and wcsncpy. */ + for (; n > 0; n--) + *dest++ = 0; + + return dest - 1; +} diff --git a/lib/unistr/u-strcat.h b/lib/unistr/u-strcat.h new file mode 100644 index 00000000..e86bbf99 --- /dev/null +++ b/lib/unistr/u-strcat.h @@ -0,0 +1,26 @@ +/* Concatenate UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src) +{ + UNIT *destptr = dest + U_STRLEN (dest); + + for (; (*destptr = *src) != 0; src++, destptr++) + ; + return dest; +} diff --git a/lib/unistr/u-strcoll.h b/lib/unistr/u-strcoll.h new file mode 100644 index 00000000..af404a04 --- /dev/null +++ b/lib/unistr/u-strcoll.h @@ -0,0 +1,81 @@ +/* Compare UTF-8/UTF-16/UTF-32 strings using the collation rules of the current + locale. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +int +FUNC (const UNIT *s1, const UNIT *s2) +{ + /* When this function succeeds, it sets errno back to its original value. + When it fails, it sets errno, but also returns a meaningful return value, + for the sake of callers which ignore errno. */ + int final_errno = errno; + char *sl1; + char *sl2; + int result; + + sl1 = U_STRCONV_TO_LOCALE (s1); + if (sl1 != NULL) + { + sl2 = U_STRCONV_TO_LOCALE (s2); + if (sl2 != NULL) + { + /* Compare sl1 and sl2. */ + errno = 0; + result = strcoll (sl1, sl2); + if (errno == 0) + { + /* strcoll succeeded. */ + free (sl1); + free (sl2); + } + else + { + /* strcoll failed. */ + final_errno = errno; + free (sl1); + free (sl2); + result = U_STRCMP (s1, s2); + } + } + else + { + /* s1 could be converted to locale encoding, s2 not. */ + final_errno = errno; + free (sl1); + result = -1; + } + } + else + { + final_errno = errno; + sl2 = U_STRCONV_TO_LOCALE (s2); + if (sl2 != NULL) + { + /* s2 could be converted to locale encoding, s1 not. */ + free (sl2); + result = 1; + } + else + { + /* Neither s1 nor s2 could be converted to locale encoding. */ + result = U_STRCMP (s1, s2); + } + } + + errno = final_errno; + return result; +} diff --git a/lib/unistr/u-strcpy.h b/lib/unistr/u-strcpy.h new file mode 100644 index 00000000..153f60ec --- /dev/null +++ b/lib/unistr/u-strcpy.h @@ -0,0 +1,26 @@ +/* Copy UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src) +{ + UNIT *destptr = dest; + + for (; (*destptr = *src) != 0; src++, destptr++) + ; + return dest; +} diff --git a/lib/unistr/u-strcspn.h b/lib/unistr/u-strcspn.h new file mode 100644 index 00000000..de326563 --- /dev/null +++ b/lib/unistr/u-strcspn.h @@ -0,0 +1,54 @@ +/* Search for some characters in UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +FUNC (const UNIT *str, const UNIT *reject) +{ + /* Optimize two cases. */ + if (reject[0] == 0) + return U_STRLEN (str); + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, reject); + if (count >= 0 && reject[count] == 0) + { + const UNIT *found = U_STRCHR (str, uc); + if (found != NULL) + return found - str; + else + return U_STRLEN (str); + } + } + /* General case. */ + { + const UNIT *ptr = str; + + for (;;) + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, ptr); + if (count == 0) + return ptr - str; + if (count < 0) + break; + if (U_STRCHR (reject, uc)) + return ptr - str; + ptr += count; + } + return U_STRLEN (str); + } +} diff --git a/lib/unistr/u-strdup.h b/lib/unistr/u-strdup.h new file mode 100644 index 00000000..71e527a7 --- /dev/null +++ b/lib/unistr/u-strdup.h @@ -0,0 +1,40 @@ +/* Copy UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include +#include + +UNIT * +FUNC (const UNIT *s) +{ + size_t n = U_STRLEN (s) + 1; + UNIT *dest; + + dest = (UNIT *) malloc (n * sizeof (UNIT)); + if (dest != NULL) + { +#if 0 + UNIT *destptr = dest; + + for (; n > 0; n--) + *destptr++ = *s++; +#else + memcpy ((char *) dest, (const char *) s, n * sizeof (UNIT)); +#endif + } + return dest; +} diff --git a/lib/unistr/u-strlen.h b/lib/unistr/u-strlen.h new file mode 100644 index 00000000..51dcae00 --- /dev/null +++ b/lib/unistr/u-strlen.h @@ -0,0 +1,26 @@ +/* Determine length of UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +FUNC (const UNIT *s) +{ + const UNIT *ptr; + + for (ptr = s; *ptr != 0; ptr++) + ; + return ptr - s; +} diff --git a/lib/unistr/u-strncat.h b/lib/unistr/u-strncat.h new file mode 100644 index 00000000..40b442ec --- /dev/null +++ b/lib/unistr/u-strncat.h @@ -0,0 +1,28 @@ +/* Concatenate UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src, size_t n) +{ + UNIT *destptr = dest + U_STRLEN (dest); + + for (; n > 0 && (*destptr = *src) != 0; src++, destptr++, n--) + ; + if (n == 0) + *destptr = 0; + return dest; +} diff --git a/lib/unistr/u-strncpy.h b/lib/unistr/u-strncpy.h new file mode 100644 index 00000000..3d441b51 --- /dev/null +++ b/lib/unistr/u-strncpy.h @@ -0,0 +1,32 @@ +/* Copy UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (UNIT *dest, const UNIT *src, size_t n) +{ + UNIT *destptr = dest; + + for (; n > 0 && (*destptr = *src) != 0; src++, destptr++, n--) + ; + + /* This behavior is rarely useful, but it is here for consistency with + strncpy and wcsncpy. */ + for (; n > 0; n--) + *destptr++ = 0; + + return dest; +} diff --git a/lib/unistr/u-strnlen.h b/lib/unistr/u-strnlen.h new file mode 100644 index 00000000..6a1d2ad2 --- /dev/null +++ b/lib/unistr/u-strnlen.h @@ -0,0 +1,26 @@ +/* Determine bounded length of UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +FUNC (const UNIT *s, size_t maxlen) +{ + const UNIT *ptr; + + for (ptr = s; maxlen > 0 && *ptr != 0; ptr++, maxlen--) + ; + return ptr - s; +} diff --git a/lib/unistr/u-strpbrk.h b/lib/unistr/u-strpbrk.h new file mode 100644 index 00000000..2ff46182 --- /dev/null +++ b/lib/unistr/u-strpbrk.h @@ -0,0 +1,46 @@ +/* Search for some characters in UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (const UNIT *str, const UNIT *accept) +{ + /* Optimize two cases. */ + if (accept[0] == 0) + return NULL; + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, accept); + if (count >= 0 && accept[count] == 0) + return U_STRCHR (str, uc); + } + /* General case. */ + { + const UNIT *ptr = str; + + for (;;) + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, ptr); + if (count <= 0) + break; + if (U_STRCHR (accept, uc)) + return (UNIT *) ptr; + ptr += count; + } + return NULL; + } +} diff --git a/lib/unistr/u-strspn.h b/lib/unistr/u-strspn.h new file mode 100644 index 00000000..6502ce4b --- /dev/null +++ b/lib/unistr/u-strspn.h @@ -0,0 +1,54 @@ +/* Search for some characters in UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +size_t +FUNC (const UNIT *str, const UNIT *accept) +{ + /* Optimize two cases. */ + if (accept[0] == 0) + return 0; + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, accept); + if (count >= 0 && accept[count] == 0) + { + const UNIT *ptr = str; + for (; *ptr != 0; ptr += count) + if (U_CMP (ptr, accept, count) != 0) + break; + return ptr - str; + } + } + /* General case. */ + { + const UNIT *ptr = str; + + for (;;) + { + ucs4_t uc; + int count = U_STRMBTOUC (&uc, ptr); + if (count == 0) + return ptr - str; + if (count < 0) + break; + if (!U_STRCHR (accept, uc)) + return ptr - str; + ptr += count; + } + return U_STRLEN (str); + } +} diff --git a/lib/unistr/u-strstr.h b/lib/unistr/u-strstr.h new file mode 100644 index 00000000..55b5a31d --- /dev/null +++ b/lib/unistr/u-strstr.h @@ -0,0 +1,49 @@ +/* Substring test for UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (const UNIT *haystack, const UNIT *needle) +{ + UNIT first = needle[0]; + + /* Is needle empty? */ + if (first == 0) + return (UNIT *) haystack; + + /* Is needle nearly empty? */ + if (needle[1] == 0) + return U_STRCHR (haystack, first); + + /* Search for needle's first unit. */ + for (; *haystack != 0; haystack++) + if (*haystack == first) + { + /* Compare with needle's remaining units. */ + const UNIT *hptr = haystack + 1; + const UNIT *nptr = needle + 1; + for (;;) + { + if (*hptr != *nptr) + break; + hptr++; nptr++; + if (*nptr == 0) + return (UNIT *) haystack; + } + } + + return NULL; +} diff --git a/lib/unistr/u-strtok.h b/lib/unistr/u-strtok.h new file mode 100644 index 00000000..7ed57d6f --- /dev/null +++ b/lib/unistr/u-strtok.h @@ -0,0 +1,52 @@ +/* Tokenize UTF-8/UTF-16/UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +UNIT * +FUNC (UNIT *str, const UNIT *delim, UNIT **ptr) +{ + if (str == NULL) + { + str = *ptr; + if (str == NULL) + return NULL; /* reminder that end of token sequence has been reached */ + } + + /* Skip leading delimiters. */ + str += U_STRSPN (str, delim); + + /* Found a token? */ + if (*str == 0) + { + *ptr = NULL; + return NULL; + } + + /* Move past the token. */ + { + UNIT *token_end = U_STRPBRK (str, delim); + if (token_end) + { + /* NUL-terminate the token. */ + *token_end = 0; + *ptr = token_end + 1; + } + else + *ptr = NULL; + } + + return str; +} diff --git a/lib/unistr/u16-check.c b/lib/unistr/u16-check.c new file mode 100644 index 00000000..380cec2c --- /dev/null +++ b/lib/unistr/u16-check.c @@ -0,0 +1,51 @@ +/* Check UTF-16 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +const uint16_t * +u16_check (const uint16_t *s, size_t n) +{ + const uint16_t *s_end = s + n; + + while (s < s_end) + { + /* Keep in sync with unistr.h and utf16-ucs4.c. */ + uint16_t c = *s; + + if (c < 0xd800 || c >= 0xe000) + { + s++; + continue; + } + if (c < 0xdc00) + { + if (s + 2 <= s_end + && s[1] >= 0xdc00 && s[1] < 0xe000) + { + s += 2; + continue; + } + } + /* invalid or incomplete multibyte character */ + return s; + } + return NULL; +} diff --git a/lib/unistr/u16-chr.c b/lib/unistr/u16-chr.c new file mode 100644 index 00000000..2d7d797e --- /dev/null +++ b/lib/unistr/u16-chr.c @@ -0,0 +1,56 @@ +/* Search character in piece of UTF-16 string. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +uint16_t * +u16_chr (const uint16_t *s, size_t n, ucs4_t uc) +{ + uint16_t c[2]; + + if (uc < 0x10000) + { + uint16_t c0 = uc; + + for (; n > 0; s++, n--) + { + if (*s == c0) + return (uint16_t *) s; + } + } + else + switch (u16_uctomb_aux (c, uc, 2)) + { + case 2: + if (n > 1) + { + uint16_t c0 = c[0]; + uint16_t c1 = c[1]; + + for (n--; n > 0; s++, n--) + { + if (*s == c0 && s[1] == c1) + return (uint16_t *) s; + } + } + break; + } + return NULL; +} diff --git a/lib/unistr/u16-cmp.c b/lib/unistr/u16-cmp.c new file mode 100644 index 00000000..0130d271 --- /dev/null +++ b/lib/unistr/u16-cmp.c @@ -0,0 +1,54 @@ +/* Compare pieces of UTF-16 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u16_cmp (const uint16_t *s1, const uint16_t *s2, size_t n) +{ + /* Note that the UTF-16 encoding does NOT preserve lexicographic order. + Namely, if uc1 is a 16-bit character and [uc2a,uc2b] is a surrogate pair, + we must enforce uc1 < [uc2a,uc2b], even if uc1 > uc2a. */ + for (; n > 0;) + { + uint16_t c1 = *s1++; + uint16_t c2 = *s2++; + if (c1 == c2) + { + n--; + continue; + } + if (c1 < 0xd800 || c1 >= 0xe000) + { + if (!(c2 < 0xd800 || c2 >= 0xe000)) + /* c2 is a surrogate, but c1 is not. */ + return -1; + } + else + { + if (c2 < 0xd800 || c2 >= 0xe000) + /* c1 is a surrogate, but c2 is not. */ + return 1; + } + return (int)c1 - (int)c2; + /* > 0 if c1 > c2, < 0 if c1 < c2. */ + } + return 0; +} diff --git a/lib/unistr/u16-cmp2.c b/lib/unistr/u16-cmp2.c new file mode 100644 index 00000000..766dcd2d --- /dev/null +++ b/lib/unistr/u16-cmp2.c @@ -0,0 +1,28 @@ +/* Compare pieces of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include "minmax.h" + +#define FUNC u16_cmp2 +#define UNIT uint16_t +#define U_CMP u16_cmp +#include "u-cmp2.h" diff --git a/lib/unistr/u16-cpy-alloc.c b/lib/unistr/u16-cpy-alloc.c new file mode 100644 index 00000000..047977eb --- /dev/null +++ b/lib/unistr/u16-cpy-alloc.c @@ -0,0 +1,25 @@ +/* Copy piece of UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_cpy_alloc +#define UNIT uint16_t +#include "u-cpy-alloc.h" diff --git a/lib/unistr/u16-cpy.c b/lib/unistr/u16-cpy.c new file mode 100644 index 00000000..13e04b81 --- /dev/null +++ b/lib/unistr/u16-cpy.c @@ -0,0 +1,25 @@ +/* Copy piece of UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_cpy +#define UNIT uint16_t +#include "u-cpy.h" diff --git a/lib/unistr/u16-endswith.c b/lib/unistr/u16-endswith.c new file mode 100644 index 00000000..d9abf464 --- /dev/null +++ b/lib/unistr/u16-endswith.c @@ -0,0 +1,27 @@ +/* Substring test for UTF-16 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_endswith +#define UNIT uint16_t +#define U_STRLEN u16_strlen +#define U_CMP u16_cmp +#include "u-endswith.h" diff --git a/lib/unistr/u16-mblen.c b/lib/unistr/u16-mblen.c new file mode 100644 index 00000000..6bb35ac8 --- /dev/null +++ b/lib/unistr/u16-mblen.c @@ -0,0 +1,49 @@ +/* Look at first character in UTF-16 string. + Copyright (C) 1999-2000, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u16_mblen (const uint16_t *s, size_t n) +{ + if (n > 0) + { + /* Keep in sync with unistr.h and utf16-ucs4.c. */ + uint16_t c = *s; + + if (c < 0xd800 || c >= 0xe000) + return (c != 0 ? 1 : 0); +#if CONFIG_UNICODE_SAFETY + if (c < 0xdc00) + { + if (n >= 2 + && s[1] >= 0xdc00 && s[1] < 0xe000) + return 2; + } +#else + { + if (n >= 2) + return 2; + } +#endif + } + /* invalid or incomplete multibyte character */ + return -1; +} diff --git a/lib/unistr/u16-mbsnlen.c b/lib/unistr/u16-mbsnlen.c new file mode 100644 index 00000000..881958e1 --- /dev/null +++ b/lib/unistr/u16-mbsnlen.c @@ -0,0 +1,39 @@ +/* Count characters in UTF-16 string. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +size_t +u16_mbsnlen (const uint16_t *s, size_t n) +{ + size_t characters; + + characters = 0; + while (n > 0) + { + int count = u16_mblen (s, n); + if (count <= 0) + count = 1; + s += count; + n -= count; + characters++; + } + return characters; +} diff --git a/lib/unistr/u16-mbtouc-aux.c b/lib/unistr/u16-mbtouc-aux.c new file mode 100644 index 00000000..5f35b867 --- /dev/null +++ b/lib/unistr/u16-mbtouc-aux.c @@ -0,0 +1,51 @@ +/* Conversion UTF-16 to UCS-4. + Copyright (C) 2001-2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#if defined IN_LIBUNISTRING || HAVE_INLINE + +int +u16_mbtouc_aux (ucs4_t *puc, const uint16_t *s, size_t n) +{ + uint16_t c = *s; + + if (c < 0xdc00) + { + if (n >= 2) + { + if (s[1] >= 0xdc00 && s[1] < 0xe000) + { + *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); + return 2; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + } + } + /* invalid multibyte character */ + *puc = 0xfffd; + return 1; +} + +#endif diff --git a/lib/unistr/u16-mbtouc-unsafe-aux.c b/lib/unistr/u16-mbtouc-unsafe-aux.c new file mode 100644 index 00000000..9906e301 --- /dev/null +++ b/lib/unistr/u16-mbtouc-unsafe-aux.c @@ -0,0 +1,55 @@ +/* Conversion UTF-16 to UCS-4. + Copyright (C) 2001-2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#if defined IN_LIBUNISTRING || HAVE_INLINE + +int +u16_mbtouc_unsafe_aux (ucs4_t *puc, const uint16_t *s, size_t n) +{ + uint16_t c = *s; + +#if CONFIG_UNICODE_SAFETY + if (c < 0xdc00) +#endif + { + if (n >= 2) + { +#if CONFIG_UNICODE_SAFETY + if (s[1] >= 0xdc00 && s[1] < 0xe000) +#endif + { + *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); + return 2; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + } + } + /* invalid multibyte character */ + *puc = 0xfffd; + return 1; +} + +#endif diff --git a/lib/unistr/u16-mbtouc-unsafe.c b/lib/unistr/u16-mbtouc-unsafe.c new file mode 100644 index 00000000..cc858d88 --- /dev/null +++ b/lib/unistr/u16-mbtouc-unsafe.c @@ -0,0 +1,66 @@ +/* Look at first character in UTF-16 string. + Copyright (C) 1999-2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#if defined IN_LIBUNISTRING +/* Tell unistr.h to declare u16_mbtouc_unsafe as 'extern', not + 'static inline'. */ +# include "unistring-notinline.h" +#endif + +/* Specification. */ +#include "unistr.h" + +#if !HAVE_INLINE + +int +u16_mbtouc_unsafe (ucs4_t *puc, const uint16_t *s, size_t n) +{ + uint16_t c = *s; + + if (c < 0xd800 || c >= 0xe000) + { + *puc = c; + return 1; + } +#if CONFIG_UNICODE_SAFETY + if (c < 0xdc00) +#endif + { + if (n >= 2) + { +#if CONFIG_UNICODE_SAFETY + if (s[1] >= 0xdc00 && s[1] < 0xe000) +#endif + { + *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); + return 2; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + } + } + /* invalid multibyte character */ + *puc = 0xfffd; + return 1; +} + +#endif diff --git a/lib/unistr/u16-mbtouc.c b/lib/unistr/u16-mbtouc.c new file mode 100644 index 00000000..2691db83 --- /dev/null +++ b/lib/unistr/u16-mbtouc.c @@ -0,0 +1,61 @@ +/* Look at first character in UTF-16 string. + Copyright (C) 1999-2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#if defined IN_LIBUNISTRING +/* Tell unistr.h to declare u16_mbtouc as 'extern', not 'static inline'. */ +# include "unistring-notinline.h" +#endif + +/* Specification. */ +#include "unistr.h" + +#if !HAVE_INLINE + +int +u16_mbtouc (ucs4_t *puc, const uint16_t *s, size_t n) +{ + uint16_t c = *s; + + if (c < 0xd800 || c >= 0xe000) + { + *puc = c; + return 1; + } + if (c < 0xdc00) + { + if (n >= 2) + { + if (s[1] >= 0xdc00 && s[1] < 0xe000) + { + *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); + return 2; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + } + } + /* invalid multibyte character */ + *puc = 0xfffd; + return 1; +} + +#endif diff --git a/lib/unistr/u16-mbtoucr.c b/lib/unistr/u16-mbtoucr.c new file mode 100644 index 00000000..a1bd8ee9 --- /dev/null +++ b/lib/unistr/u16-mbtoucr.c @@ -0,0 +1,54 @@ +/* Look at first character in UTF-16 string, returning an error code. + Copyright (C) 1999-2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u16_mbtoucr (ucs4_t *puc, const uint16_t *s, size_t n) +{ + uint16_t c = *s; + + if (c < 0xd800 || c >= 0xe000) + { + *puc = c; + return 1; + } + if (c < 0xdc00) + { + if (n >= 2) + { + if (s[1] >= 0xdc00 && s[1] < 0xe000) + { + *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); + return 2; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + /* invalid multibyte character */ + *puc = 0xfffd; + return -1; +} diff --git a/lib/unistr/u16-move.c b/lib/unistr/u16-move.c new file mode 100644 index 00000000..2bf8c619 --- /dev/null +++ b/lib/unistr/u16-move.c @@ -0,0 +1,25 @@ +/* Copy piece of UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_move +#define UNIT uint16_t +#include "u-move.h" diff --git a/lib/unistr/u16-next.c b/lib/unistr/u16-next.c new file mode 100644 index 00000000..7c49f72f --- /dev/null +++ b/lib/unistr/u16-next.c @@ -0,0 +1,37 @@ +/* Iterate over next character in UTF-16 string. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +const uint16_t * +u16_next (ucs4_t *puc, const uint16_t *s) +{ + int count; + + count = u16_strmbtouc (puc, s); + if (count > 0) + return s + count; + else + { + if (count < 0) + *puc = 0xfffd; + return NULL; + } +} diff --git a/lib/unistr/u16-prev.c b/lib/unistr/u16-prev.c new file mode 100644 index 00000000..3beecf01 --- /dev/null +++ b/lib/unistr/u16-prev.c @@ -0,0 +1,53 @@ +/* Iterate over previous character in UTF-16 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +const uint16_t * +u16_prev (ucs4_t *puc, const uint16_t *s, const uint16_t *start) +{ + /* Keep in sync with unistr.h and utf16-ucs4.c. */ + if (s != start) + { + uint16_t c_1 = s[-1]; + + if (c_1 < 0xd800 || c_1 >= 0xe000) + { + *puc = c_1; + return s - 1; + } +#if CONFIG_UNICODE_SAFETY + if (c_1 >= 0xdc00) +#endif + if (s - 1 != start) + { + uint16_t c_2 = s[-2]; + +#if CONFIG_UNICODE_SAFETY + if (c_2 >= 0xd800 && c_2 < 0xdc00) +#endif + { + *puc = 0x10000 + ((c_2 - 0xd800) << 10) + (c_1 - 0xdc00); + return s - 2; + } + } + } + return NULL; +} diff --git a/lib/unistr/u16-set.c b/lib/unistr/u16-set.c new file mode 100644 index 00000000..9ef307f2 --- /dev/null +++ b/lib/unistr/u16-set.c @@ -0,0 +1,26 @@ +/* Fill UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_set +#define UNIT uint16_t +#define IS_SINGLE_UNIT(uc) (uc < 0xd800 || (uc < 0x10000 && uc >= 0xe000)) +#include "u-set.h" diff --git a/lib/unistr/u16-startswith.c b/lib/unistr/u16-startswith.c new file mode 100644 index 00000000..2f39d74f --- /dev/null +++ b/lib/unistr/u16-startswith.c @@ -0,0 +1,25 @@ +/* Substring test for UTF-16 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_startswith +#define UNIT uint16_t +#include "u-startswith.h" diff --git a/lib/unistr/u16-stpcpy.c b/lib/unistr/u16-stpcpy.c new file mode 100644 index 00000000..9207edc1 --- /dev/null +++ b/lib/unistr/u16-stpcpy.c @@ -0,0 +1,25 @@ +/* Copy UTF-16 string. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_stpcpy +#define UNIT uint16_t +#include "u-stpcpy.h" diff --git a/lib/unistr/u16-stpncpy.c b/lib/unistr/u16-stpncpy.c new file mode 100644 index 00000000..30ef7e30 --- /dev/null +++ b/lib/unistr/u16-stpncpy.c @@ -0,0 +1,25 @@ +/* Copy UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_stpncpy +#define UNIT uint16_t +#include "u-stpncpy.h" diff --git a/lib/unistr/u16-strcat.c b/lib/unistr/u16-strcat.c new file mode 100644 index 00000000..bb88f1b5 --- /dev/null +++ b/lib/unistr/u16-strcat.c @@ -0,0 +1,26 @@ +/* Concatenate UTF-16 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_strcat +#define UNIT uint16_t +#define U_STRLEN u16_strlen +#include "u-strcat.h" diff --git a/lib/unistr/u16-strchr.c b/lib/unistr/u16-strchr.c new file mode 100644 index 00000000..673152f9 --- /dev/null +++ b/lib/unistr/u16-strchr.c @@ -0,0 +1,63 @@ +/* Search character in UTF-16 string. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +uint16_t * +u16_strchr (const uint16_t *s, ucs4_t uc) +{ + uint16_t c[2]; + + if (uc < 0x10000) + { + uint16_t c0 = uc; + + for (;; s++) + { + if (*s == c0) + break; + if (*s == 0) + goto notfound; + } + return (uint16_t *) s; + } + else + switch (u16_uctomb_aux (c, uc, 2)) + { + case 2: + if (*s == 0) + goto notfound; + { + uint16_t c0 = c[0]; + uint16_t c1 = c[1]; + + for (;; s++) + { + if (s[1] == 0) + goto notfound; + if (*s == c0 && s[1] == c1) + break; + } + return (uint16_t *) s; + } + } +notfound: + return NULL; +} diff --git a/lib/unistr/u16-strcmp.c b/lib/unistr/u16-strcmp.c new file mode 100644 index 00000000..c161c65b --- /dev/null +++ b/lib/unistr/u16-strcmp.c @@ -0,0 +1,50 @@ +/* Compare UTF-16 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u16_strcmp (const uint16_t *s1, const uint16_t *s2) +{ + /* Note that the UTF-16 encoding does NOT preserve lexicographic order. + Namely, if uc1 is a 16-bit character and [uc2a,uc2b] is a surrogate pair, + we must enforce uc1 < [uc2a,uc2b], even if uc1 > uc2a. */ + for (;;) + { + uint16_t c1 = *s1++; + uint16_t c2 = *s2++; + if (c1 != 0 && c1 == c2) + continue; + if (c1 < 0xd800 || c1 >= 0xe000) + { + if (!(c2 < 0xd800 || c2 >= 0xe000)) + /* c2 is a surrogate, but c1 is not. */ + return -1; + } + else + { + if (c2 < 0xd800 || c2 >= 0xe000) + /* c1 is a surrogate, but c2 is not. */ + return 1; + } + return (int)c1 - (int)c2; + /* > 0 if c1 > c2, < 0 if c1 < c2. */ + } +} diff --git a/lib/unistr/u16-strcoll.c b/lib/unistr/u16-strcoll.c new file mode 100644 index 00000000..280ba83e --- /dev/null +++ b/lib/unistr/u16-strcoll.c @@ -0,0 +1,33 @@ +/* Compare UTF-16 strings using the collation rules of the current locale. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include +#include +#include + +#include "uniconv.h" + +#define FUNC u16_strcoll +#define UNIT uint16_t +#define U_STRCMP u16_strcmp +#define U_STRCONV_TO_LOCALE u16_strconv_to_locale +#include "u-strcoll.h" diff --git a/lib/unistr/u16-strcpy.c b/lib/unistr/u16-strcpy.c new file mode 100644 index 00000000..92c3e7ec --- /dev/null +++ b/lib/unistr/u16-strcpy.c @@ -0,0 +1,25 @@ +/* Copy UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_strcpy +#define UNIT uint16_t +#include "u-strcpy.h" diff --git a/lib/unistr/u16-strcspn.c b/lib/unistr/u16-strcspn.c new file mode 100644 index 00000000..2f5ba435 --- /dev/null +++ b/lib/unistr/u16-strcspn.c @@ -0,0 +1,28 @@ +/* Search for some characters in UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_strcspn +#define UNIT uint16_t +#define U_STRLEN u16_strlen +#define U_STRMBTOUC u16_strmbtouc +#define U_STRCHR u16_strchr +#include "u-strcspn.h" diff --git a/lib/unistr/u16-strdup.c b/lib/unistr/u16-strdup.c new file mode 100644 index 00000000..22242c29 --- /dev/null +++ b/lib/unistr/u16-strdup.c @@ -0,0 +1,26 @@ +/* Copy UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_strdup +#define UNIT uint16_t +#define U_STRLEN u16_strlen +#include "u-strdup.h" diff --git a/lib/unistr/u16-strlen.c b/lib/unistr/u16-strlen.c new file mode 100644 index 00000000..9c05541c --- /dev/null +++ b/lib/unistr/u16-strlen.c @@ -0,0 +1,25 @@ +/* Determine length of UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_strlen +#define UNIT uint16_t +#include "u-strlen.h" diff --git a/lib/unistr/u16-strmblen.c b/lib/unistr/u16-strmblen.c new file mode 100644 index 00000000..e7f36250 --- /dev/null +++ b/lib/unistr/u16-strmblen.c @@ -0,0 +1,43 @@ +/* Look at first character in UTF-16 string. + Copyright (C) 1999-2000, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u16_strmblen (const uint16_t *s) +{ + /* Keep in sync with unistr.h and utf16-ucs4.c. */ + uint16_t c = *s; + + if (c < 0xd800 || c >= 0xe000) + return (c != 0 ? 1 : 0); +#if CONFIG_UNICODE_SAFETY + if (c < 0xdc00) + { + if (s[1] >= 0xdc00 && s[1] < 0xe000) + return 2; + } +#else + if (s[1] != 0) + return 2; +#endif + /* invalid or incomplete multibyte character */ + return -1; +} diff --git a/lib/unistr/u16-strmbtouc.c b/lib/unistr/u16-strmbtouc.c new file mode 100644 index 00000000..78d482ee --- /dev/null +++ b/lib/unistr/u16-strmbtouc.c @@ -0,0 +1,50 @@ +/* Look at first character in UTF-16 string. + Copyright (C) 1999-2000, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u16_strmbtouc (ucs4_t *puc, const uint16_t *s) +{ + /* Keep in sync with unistr.h and utf16-ucs4.c. */ + uint16_t c = *s; + + if (c < 0xd800 || c >= 0xe000) + { + *puc = c; + return (c != 0 ? 1 : 0); + } +#if CONFIG_UNICODE_SAFETY + if (c < 0xdc00) +#endif + { +#if CONFIG_UNICODE_SAFETY + if (s[1] >= 0xdc00 && s[1] < 0xe000) +#else + if (s[1] != 0) +#endif + { + *puc = 0x10000 + ((c - 0xd800) << 10) + (s[1] - 0xdc00); + return 2; + } + } + /* invalid or incomplete multibyte character */ + return -1; +} diff --git a/lib/unistr/u16-strncat.c b/lib/unistr/u16-strncat.c new file mode 100644 index 00000000..9e14388c --- /dev/null +++ b/lib/unistr/u16-strncat.c @@ -0,0 +1,26 @@ +/* Concatenate UTF-16 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_strncat +#define UNIT uint16_t +#define U_STRLEN u16_strlen +#include "u-strncat.h" diff --git a/lib/unistr/u16-strncmp.c b/lib/unistr/u16-strncmp.c new file mode 100644 index 00000000..7278b6f0 --- /dev/null +++ b/lib/unistr/u16-strncmp.c @@ -0,0 +1,54 @@ +/* Compare UTF-16 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u16_strncmp (const uint16_t *s1, const uint16_t *s2, size_t n) +{ + /* Note that the UTF-16 encoding does NOT preserve lexicographic order. + Namely, if uc1 is a 16-bit character and [uc2a,uc2b] is a surrogate pair, + we must enforce uc1 < [uc2a,uc2b], even if uc1 > uc2a. */ + for (; n > 0;) + { + uint16_t c1 = *s1++; + uint16_t c2 = *s2++; + if (c1 != 0 && c1 == c2) + { + n--; + continue; + } + if (c1 < 0xd800 || c1 >= 0xe000) + { + if (!(c2 < 0xd800 || c2 >= 0xe000)) + /* c2 is a surrogate, but c1 is not. */ + return -1; + } + else + { + if (c2 < 0xd800 || c2 >= 0xe000) + /* c1 is a surrogate, but c2 is not. */ + return 1; + } + return (int)c1 - (int)c2; + /* > 0 if c1 > c2, < 0 if c1 < c2, = 0 if c1 and c2 are both 0. */ + } + return 0; +} diff --git a/lib/unistr/u16-strncpy.c b/lib/unistr/u16-strncpy.c new file mode 100644 index 00000000..65676aaa --- /dev/null +++ b/lib/unistr/u16-strncpy.c @@ -0,0 +1,25 @@ +/* Copy UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_strncpy +#define UNIT uint16_t +#include "u-strncpy.h" diff --git a/lib/unistr/u16-strnlen.c b/lib/unistr/u16-strnlen.c new file mode 100644 index 00000000..1cd80c41 --- /dev/null +++ b/lib/unistr/u16-strnlen.c @@ -0,0 +1,25 @@ +/* Determine bounded length of UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_strnlen +#define UNIT uint16_t +#include "u-strnlen.h" diff --git a/lib/unistr/u16-strpbrk.c b/lib/unistr/u16-strpbrk.c new file mode 100644 index 00000000..63605819 --- /dev/null +++ b/lib/unistr/u16-strpbrk.c @@ -0,0 +1,27 @@ +/* Search for some characters in UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_strpbrk +#define UNIT uint16_t +#define U_STRMBTOUC u16_strmbtouc +#define U_STRCHR u16_strchr +#include "u-strpbrk.h" diff --git a/lib/unistr/u16-strrchr.c b/lib/unistr/u16-strrchr.c new file mode 100644 index 00000000..b3c7ab03 --- /dev/null +++ b/lib/unistr/u16-strrchr.c @@ -0,0 +1,64 @@ +/* Search character in UTF-16 string. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +uint16_t * +u16_strrchr (const uint16_t *s, ucs4_t uc) +{ + /* Calling u16_strlen and then searching from the other end would cause more + memory accesses. Avoid that, at the cost of a few more comparisons. */ + uint16_t *result = NULL; + uint16_t c[2]; + + if (uc < 0x10000) + { + uint16_t c0 = uc; + + for (;; s++) + { + if (*s == c0) + result = (uint16_t *) s; + if (*s == 0) + break; + } + } + else + switch (u16_uctomb_aux (c, uc, 2)) + { + case 2: + if (*s) + { + uint16_t c0 = c[0]; + uint16_t c1 = c[1]; + + /* FIXME: Maybe walking the string via u16_mblen is a win? */ + for (;; s++) + { + if (s[1] == 0) + break; + if (*s == c0 && s[1] == c1) + result = (uint16_t *) s; + } + } + break; + } + return result; +} diff --git a/lib/unistr/u16-strspn.c b/lib/unistr/u16-strspn.c new file mode 100644 index 00000000..04ba8e69 --- /dev/null +++ b/lib/unistr/u16-strspn.c @@ -0,0 +1,29 @@ +/* Search for some characters in UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_strspn +#define UNIT uint16_t +#define U_STRLEN u16_strlen +#define U_STRMBTOUC u16_strmbtouc +#define U_CMP u16_cmp +#define U_STRCHR u16_strchr +#include "u-strspn.h" diff --git a/lib/unistr/u16-strstr.c b/lib/unistr/u16-strstr.c new file mode 100644 index 00000000..bc61233d --- /dev/null +++ b/lib/unistr/u16-strstr.c @@ -0,0 +1,28 @@ +/* Substring test for UTF-16 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +/* FIXME: Maybe walking the string via u16_mblen is a win? */ + +#define FUNC u16_strstr +#define UNIT uint16_t +#define U_STRCHR u16_strchr +#include "u-strstr.h" diff --git a/lib/unistr/u16-strtok.c b/lib/unistr/u16-strtok.c new file mode 100644 index 00000000..dd9b247d --- /dev/null +++ b/lib/unistr/u16-strtok.c @@ -0,0 +1,27 @@ +/* Tokenize UTF-16 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_strtok +#define UNIT uint16_t +#define U_STRSPN u16_strspn +#define U_STRPBRK u16_strpbrk +#include "u-strtok.h" diff --git a/lib/unistr/u16-to-u32.c b/lib/unistr/u16-to-u32.c new file mode 100644 index 00000000..2f39dcd7 --- /dev/null +++ b/lib/unistr/u16-to-u32.c @@ -0,0 +1,125 @@ +/* Convert UTF-16 string to UTF-32 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_to_u32 +#define SRC_UNIT uint16_t +#define DST_UNIT uint32_t + +#include +#include +#include + +DST_UNIT * +FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) +{ + const SRC_UNIT *s_end = s + n; + /* Output string accumulator. */ + DST_UNIT *result; + size_t allocated; + size_t length; + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + while (s < s_end) + { + ucs4_t uc; + int count; + + /* Fetch a Unicode character from the input string. */ + count = u16_mbtouc (&uc, s, s_end - s); + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = EILSEQ; + return NULL; + } + s += count; + + /* Store it in the output string. */ + if (length + 1 > allocated) + { + DST_UNIT *memory; + + allocated = (allocated > 0 ? 2 * allocated : 12); + if (length + 1 > allocated) + allocated = length + 1; + if (result == resultbuf || result == NULL) + memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); + else + memory = + (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); + + if (memory == NULL) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = ENOMEM; + return NULL; + } + if (result == resultbuf && length > 0) + memcpy ((char *) memory, (char *) result, + length * sizeof (DST_UNIT)); + result = memory; + } + result[length++] = uc; + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (DST_UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + DST_UNIT *memory; + + memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); + if (memory != NULL) + result = memory; + } + + *lengthp = length; + return result; +} diff --git a/lib/unistr/u16-to-u8.c b/lib/unistr/u16-to-u8.c new file mode 100644 index 00000000..38b27ec0 --- /dev/null +++ b/lib/unistr/u16-to-u8.c @@ -0,0 +1,136 @@ +/* Convert UTF-16 string to UTF-8 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u16_to_u8 +#define SRC_UNIT uint16_t +#define DST_UNIT uint8_t + +#include +#include +#include + +DST_UNIT * +FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) +{ + const SRC_UNIT *s_end = s + n; + /* Output string accumulator. */ + DST_UNIT *result; + size_t allocated; + size_t length; + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + while (s < s_end) + { + ucs4_t uc; + int count; + + /* Fetch a Unicode character from the input string. */ + count = u16_mbtouc (&uc, s, s_end - s); + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = EILSEQ; + return NULL; + } + s += count; + + /* Store it in the output string. */ + count = u8_uctomb (result + length, uc, allocated - length); + if (count == -1) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = EILSEQ; + return NULL; + } + if (count == -2) + { + DST_UNIT *memory; + + allocated = (allocated > 0 ? 2 * allocated : 12); + if (length + 6 > allocated) + allocated = length + 6; + if (result == resultbuf || result == NULL) + memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); + else + memory = + (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); + + if (memory == NULL) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = ENOMEM; + return NULL; + } + if (result == resultbuf && length > 0) + memcpy ((char *) memory, (char *) result, + length * sizeof (DST_UNIT)); + result = memory; + count = u8_uctomb (result + length, uc, allocated - length); + if (count < 0) + abort (); + } + length += count; + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (DST_UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + DST_UNIT *memory; + + memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); + if (memory != NULL) + result = memory; + } + + *lengthp = length; + return result; +} diff --git a/lib/unistr/u16-uctomb-aux.c b/lib/unistr/u16-uctomb-aux.c new file mode 100644 index 00000000..384452ba --- /dev/null +++ b/lib/unistr/u16-uctomb-aux.c @@ -0,0 +1,58 @@ +/* Conversion UCS-4 to UTF-16. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u16_uctomb_aux (uint16_t *s, ucs4_t uc, int n) +{ + if (uc < 0xd800) + { + /* The case n >= 1 is already handled by the caller. */ + } + else if (uc < 0x10000) + { + if (uc >= 0xe000) + { + if (n >= 1) + { + s[0] = uc; + return 1; + } + } + else + return -1; + } + else + { + if (uc < 0x110000) + { + if (n >= 2) + { + s[0] = 0xd800 + ((uc - 0x10000) >> 10); + s[1] = 0xdc00 + ((uc - 0x10000) & 0x3ff); + return 2; + } + } + else + return -1; + } + return -2; +} diff --git a/lib/unistr/u16-uctomb.c b/lib/unistr/u16-uctomb.c new file mode 100644 index 00000000..6ac5ada5 --- /dev/null +++ b/lib/unistr/u16-uctomb.c @@ -0,0 +1,72 @@ +/* Store a character in UTF-16 string. + Copyright (C) 2002, 2005-2006, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#if defined IN_LIBUNISTRING +/* Tell unistr.h to declare u16_uctomb as 'extern', not 'static inline'. */ +# include "unistring-notinline.h" +#endif + +/* Specification. */ +#include "unistr.h" + +#if !HAVE_INLINE + +int +u16_uctomb (uint16_t *s, ucs4_t uc, int n) +{ + if (uc < 0xd800) + { + if (n > 0) + { + s[0] = uc; + return 1; + } + /* else return -2, below. */ + } + else if (uc < 0x10000) + { + if (uc >= 0xe000) + { + if (n >= 1) + { + s[0] = uc; + return 1; + } + } + else + return -1; + } + else + { + if (uc < 0x110000) + { + if (n >= 2) + { + s[0] = 0xd800 + ((uc - 0x10000) >> 10); + s[1] = 0xdc00 + ((uc - 0x10000) & 0x3ff); + return 2; + } + } + else + return -1; + } + return -2; +} + +#endif diff --git a/lib/unistr/u32-check.c b/lib/unistr/u32-check.c new file mode 100644 index 00000000..87e91271 --- /dev/null +++ b/lib/unistr/u32-check.c @@ -0,0 +1,39 @@ +/* Check UTF-32 string. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +const uint32_t * +u32_check (const uint32_t *s, size_t n) +{ + const uint32_t *s_end = s + n; + + while (s < s_end) + { + uint32_t c = *s; + + if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) + s++; + else + /* invalid Unicode character */ + return s; + } + return NULL; +} diff --git a/lib/unistr/u32-chr.c b/lib/unistr/u32-chr.c new file mode 100644 index 00000000..5a594b25 --- /dev/null +++ b/lib/unistr/u32-chr.c @@ -0,0 +1,32 @@ +/* Search character in piece of UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +uint32_t * +u32_chr (const uint32_t *s, size_t n, ucs4_t uc) +{ + for (; n > 0; s++, n--) + { + if (*s == uc) + return (uint32_t *) s; + } + return NULL; +} diff --git a/lib/unistr/u32-cmp.c b/lib/unistr/u32-cmp.c new file mode 100644 index 00000000..a273b10b --- /dev/null +++ b/lib/unistr/u32-cmp.c @@ -0,0 +1,40 @@ +/* Compare pieces of UTF-32 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u32_cmp (const uint32_t *s1, const uint32_t *s2, size_t n) +{ + for (; n > 0;) + { + uint32_t uc1 = *s1++; + uint32_t uc2 = *s2++; + if (uc1 == uc2) + { + n--; + continue; + } + /* Note that uc1 and uc2 each have at most 31 bits. */ + return (int)uc1 - (int)uc2; + /* > 0 if uc1 > uc2, < 0 if uc1 < uc2. */ + } + return 0; +} diff --git a/lib/unistr/u32-cmp2.c b/lib/unistr/u32-cmp2.c new file mode 100644 index 00000000..6924c482 --- /dev/null +++ b/lib/unistr/u32-cmp2.c @@ -0,0 +1,28 @@ +/* Compare pieces of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include "minmax.h" + +#define FUNC u32_cmp2 +#define UNIT uint32_t +#define U_CMP u32_cmp +#include "u-cmp2.h" diff --git a/lib/unistr/u32-cpy-alloc.c b/lib/unistr/u32-cpy-alloc.c new file mode 100644 index 00000000..f9c69608 --- /dev/null +++ b/lib/unistr/u32-cpy-alloc.c @@ -0,0 +1,25 @@ +/* Copy piece of UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_cpy_alloc +#define UNIT uint32_t +#include "u-cpy-alloc.h" diff --git a/lib/unistr/u32-cpy.c b/lib/unistr/u32-cpy.c new file mode 100644 index 00000000..2493b65a --- /dev/null +++ b/lib/unistr/u32-cpy.c @@ -0,0 +1,25 @@ +/* Copy piece of UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_cpy +#define UNIT uint32_t +#include "u-cpy.h" diff --git a/lib/unistr/u32-endswith.c b/lib/unistr/u32-endswith.c new file mode 100644 index 00000000..d77fa8cf --- /dev/null +++ b/lib/unistr/u32-endswith.c @@ -0,0 +1,27 @@ +/* Substring test for UTF-32 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_endswith +#define UNIT uint32_t +#define U_STRLEN u32_strlen +#define U_CMP u32_cmp +#include "u-endswith.h" diff --git a/lib/unistr/u32-mblen.c b/lib/unistr/u32-mblen.c new file mode 100644 index 00000000..a48c8b21 --- /dev/null +++ b/lib/unistr/u32-mblen.c @@ -0,0 +1,37 @@ +/* Look at first character in UTF-32 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u32_mblen (const uint32_t *s, size_t n) +{ + if (n > 0) + { + uint32_t c = *s; + +#if CONFIG_UNICODE_SAFETY + if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) +#endif + return (c != 0 ? 1 : 0); + } + /* invalid or incomplete multibyte character */ + return -1; +} diff --git a/lib/unistr/u32-mbsnlen.c b/lib/unistr/u32-mbsnlen.c new file mode 100644 index 00000000..b7a5d185 --- /dev/null +++ b/lib/unistr/u32-mbsnlen.c @@ -0,0 +1,27 @@ +/* Count characters in UTF-32 string. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +size_t +u32_mbsnlen (const uint32_t *s, size_t n) +{ + return n; +} diff --git a/lib/unistr/u32-mbtouc-unsafe.c b/lib/unistr/u32-mbtouc-unsafe.c new file mode 100644 index 00000000..4bd9e817 --- /dev/null +++ b/lib/unistr/u32-mbtouc-unsafe.c @@ -0,0 +1,48 @@ +/* Look at first character in UTF-32 string. + Copyright (C) 2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#if defined IN_LIBUNISTRING +/* Tell unistr.h to declare u32_mbtouc_unsafe as 'extern', not + 'static inline'. */ +# include "unistring-notinline.h" +#endif + +/* Specification. */ +#include "unistr.h" + +#if !HAVE_INLINE + +int +u32_mbtouc_unsafe (ucs4_t *puc, const uint32_t *s, size_t n) +{ + uint32_t c = *s; + +#if CONFIG_UNICODE_SAFETY + if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) +#endif + *puc = c; +#if CONFIG_UNICODE_SAFETY + else + /* invalid multibyte character */ + *puc = 0xfffd; +#endif + return 1; +} + +#endif diff --git a/lib/unistr/u32-mbtouc.c b/lib/unistr/u32-mbtouc.c new file mode 100644 index 00000000..4eeef58c --- /dev/null +++ b/lib/unistr/u32-mbtouc.c @@ -0,0 +1,43 @@ +/* Look at first character in UTF-32 string. + Copyright (C) 2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#if defined IN_LIBUNISTRING +/* Tell unistr.h to declare u32_mbtouc as 'extern', not 'static inline'. */ +# include "unistring-notinline.h" +#endif + +/* Specification. */ +#include "unistr.h" + +#if !HAVE_INLINE + +int +u32_mbtouc (ucs4_t *puc, const uint32_t *s, size_t n) +{ + uint32_t c = *s; + + if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) + *puc = c; + else + /* invalid multibyte character */ + *puc = 0xfffd; + return 1; +} + +#endif diff --git a/lib/unistr/u32-mbtoucr.c b/lib/unistr/u32-mbtoucr.c new file mode 100644 index 00000000..7d7993cc --- /dev/null +++ b/lib/unistr/u32-mbtoucr.c @@ -0,0 +1,39 @@ +/* Look at first character in UTF-32 string, returning an error code. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u32_mbtoucr (ucs4_t *puc, const uint32_t *s, size_t n) +{ + uint32_t c = *s; + + if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) + { + *puc = c; + return 1; + } + else + { + /* invalid multibyte character */ + *puc = 0xfffd; + return -1; + } +} diff --git a/lib/unistr/u32-move.c b/lib/unistr/u32-move.c new file mode 100644 index 00000000..d6c08f4b --- /dev/null +++ b/lib/unistr/u32-move.c @@ -0,0 +1,25 @@ +/* Copy piece of UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_move +#define UNIT uint32_t +#include "u-move.h" diff --git a/lib/unistr/u32-next.c b/lib/unistr/u32-next.c new file mode 100644 index 00000000..c529295c --- /dev/null +++ b/lib/unistr/u32-next.c @@ -0,0 +1,39 @@ +/* Iterate over next character in UTF-32 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +const uint32_t * +u32_next (ucs4_t *puc, const uint32_t *s) +{ + int count; + + count = u32_strmbtouc (puc, s); + if (count > 0) + return s + count; + else + { +#if CONFIG_UNICODE_SAFETY + if (count < 0) + *puc = 0xfffd; +#endif + return NULL; + } +} diff --git a/lib/unistr/u32-prev.c b/lib/unistr/u32-prev.c new file mode 100644 index 00000000..bc20c93f --- /dev/null +++ b/lib/unistr/u32-prev.c @@ -0,0 +1,39 @@ +/* Iterate over previous character in UTF-32 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +const uint32_t * +u32_prev (ucs4_t *puc, const uint32_t *s, const uint32_t *start) +{ + if (s != start) + { + uint32_t c_1 = s[-1]; + +#if CONFIG_UNICODE_SAFETY + if (c_1 < 0xd800 || (c_1 >= 0xe000 && c_1 < 0x110000)) +#endif + { + *puc = c_1; + return s - 1; + } + } + return NULL; +} diff --git a/lib/unistr/u32-set.c b/lib/unistr/u32-set.c new file mode 100644 index 00000000..de10e09e --- /dev/null +++ b/lib/unistr/u32-set.c @@ -0,0 +1,26 @@ +/* Fill UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_set +#define UNIT uint32_t +#define IS_SINGLE_UNIT(uc) (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000)) +#include "u-set.h" diff --git a/lib/unistr/u32-startswith.c b/lib/unistr/u32-startswith.c new file mode 100644 index 00000000..0f9a1859 --- /dev/null +++ b/lib/unistr/u32-startswith.c @@ -0,0 +1,25 @@ +/* Substring test for UTF-32 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_startswith +#define UNIT uint32_t +#include "u-startswith.h" diff --git a/lib/unistr/u32-stpcpy.c b/lib/unistr/u32-stpcpy.c new file mode 100644 index 00000000..5df82339 --- /dev/null +++ b/lib/unistr/u32-stpcpy.c @@ -0,0 +1,25 @@ +/* Copy UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_stpcpy +#define UNIT uint32_t +#include "u-stpcpy.h" diff --git a/lib/unistr/u32-stpncpy.c b/lib/unistr/u32-stpncpy.c new file mode 100644 index 00000000..19a08943 --- /dev/null +++ b/lib/unistr/u32-stpncpy.c @@ -0,0 +1,25 @@ +/* Copy UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_stpncpy +#define UNIT uint32_t +#include "u-stpncpy.h" diff --git a/lib/unistr/u32-strcat.c b/lib/unistr/u32-strcat.c new file mode 100644 index 00000000..cd4737fd --- /dev/null +++ b/lib/unistr/u32-strcat.c @@ -0,0 +1,26 @@ +/* Concatenate UTF-32 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strcat +#define UNIT uint32_t +#define U_STRLEN u32_strlen +#include "u-strcat.h" diff --git a/lib/unistr/u32-strchr.c b/lib/unistr/u32-strchr.c new file mode 100644 index 00000000..57a3a3cf --- /dev/null +++ b/lib/unistr/u32-strchr.c @@ -0,0 +1,36 @@ +/* Search character in UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +uint32_t * +u32_strchr (const uint32_t *s, ucs4_t uc) +{ + for (;; s++) + { + if (*s == uc) + break; + if (*s == 0) + goto notfound; + } + return (uint32_t *) s; +notfound: + return NULL; +} diff --git a/lib/unistr/u32-strcmp.c b/lib/unistr/u32-strcmp.c new file mode 100644 index 00000000..b82d5ede --- /dev/null +++ b/lib/unistr/u32-strcmp.c @@ -0,0 +1,36 @@ +/* Compare UTF-32 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u32_strcmp (const uint32_t *s1, const uint32_t *s2) +{ + for (;;) + { + uint32_t uc1 = *s1++; + uint32_t uc2 = *s2++; + if (uc1 != 0 && uc1 == uc2) + continue; + /* Note that uc1 and uc2 each have at most 31 bits. */ + return (int)uc1 - (int)uc2; + /* > 0 if uc1 > uc2, < 0 if uc1 < uc2. */ + } +} diff --git a/lib/unistr/u32-strcoll.c b/lib/unistr/u32-strcoll.c new file mode 100644 index 00000000..d5e1482c --- /dev/null +++ b/lib/unistr/u32-strcoll.c @@ -0,0 +1,33 @@ +/* Compare UTF-32 strings using the collation rules of the current locale. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include +#include +#include + +#include "uniconv.h" + +#define FUNC u32_strcoll +#define UNIT uint32_t +#define U_STRCMP u32_strcmp +#define U_STRCONV_TO_LOCALE u32_strconv_to_locale +#include "u-strcoll.h" diff --git a/lib/unistr/u32-strcpy.c b/lib/unistr/u32-strcpy.c new file mode 100644 index 00000000..e5001005 --- /dev/null +++ b/lib/unistr/u32-strcpy.c @@ -0,0 +1,25 @@ +/* Copy UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strcpy +#define UNIT uint32_t +#include "u-strcpy.h" diff --git a/lib/unistr/u32-strcspn.c b/lib/unistr/u32-strcspn.c new file mode 100644 index 00000000..f93ab2ef --- /dev/null +++ b/lib/unistr/u32-strcspn.c @@ -0,0 +1,51 @@ +/* Search for some characters in UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strcspn +#define UNIT uint32_t +#define U_STRLEN u32_strlen +#define U_STRCHR u32_strchr + +size_t +FUNC (const UNIT *str, const UNIT *reject) +{ + /* Optimize two cases. */ + if (reject[0] == 0) + return U_STRLEN (str); + if (reject[1] == 0) + { + ucs4_t uc = reject[0]; + const UNIT *ptr = str; + for (; *ptr != 0; ptr++) + if (*ptr == uc) + break; + return ptr - str; + } + /* General case. */ + { + const UNIT *ptr = str; + for (; *ptr != 0; ptr++) + if (U_STRCHR (reject, *ptr)) + break; + return ptr - str; + } +} diff --git a/lib/unistr/u32-strdup.c b/lib/unistr/u32-strdup.c new file mode 100644 index 00000000..66e9393e --- /dev/null +++ b/lib/unistr/u32-strdup.c @@ -0,0 +1,26 @@ +/* Copy UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strdup +#define UNIT uint32_t +#define U_STRLEN u32_strlen +#include "u-strdup.h" diff --git a/lib/unistr/u32-strlen.c b/lib/unistr/u32-strlen.c new file mode 100644 index 00000000..eb64cc2a --- /dev/null +++ b/lib/unistr/u32-strlen.c @@ -0,0 +1,25 @@ +/* Determine length of UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strlen +#define UNIT uint32_t +#include "u-strlen.h" diff --git a/lib/unistr/u32-strmblen.c b/lib/unistr/u32-strmblen.c new file mode 100644 index 00000000..4dde3fff --- /dev/null +++ b/lib/unistr/u32-strmblen.c @@ -0,0 +1,36 @@ +/* Look at first character in UTF-32 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u32_strmblen (const uint32_t *s) +{ + uint32_t c = *s; + +#if CONFIG_UNICODE_SAFETY + if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) +#endif + return (c != 0 ? 1 : 0); +#if CONFIG_UNICODE_SAFETY + /* invalid multibyte character */ + return -1; +#endif +} diff --git a/lib/unistr/u32-strmbtouc.c b/lib/unistr/u32-strmbtouc.c new file mode 100644 index 00000000..e94ac300 --- /dev/null +++ b/lib/unistr/u32-strmbtouc.c @@ -0,0 +1,39 @@ +/* Look at first character in UTF-32 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u32_strmbtouc (ucs4_t *puc, const uint32_t *s) +{ + uint32_t c = *s; + +#if CONFIG_UNICODE_SAFETY + if (c < 0xd800 || (c >= 0xe000 && c < 0x110000)) +#endif + { + *puc = c; + return (c != 0 ? 1 : 0); + } +#if CONFIG_UNICODE_SAFETY + /* invalid multibyte character */ + return -1; +#endif +} diff --git a/lib/unistr/u32-strncat.c b/lib/unistr/u32-strncat.c new file mode 100644 index 00000000..86f895b5 --- /dev/null +++ b/lib/unistr/u32-strncat.c @@ -0,0 +1,26 @@ +/* Concatenate UTF-32 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strncat +#define UNIT uint32_t +#define U_STRLEN u32_strlen +#include "u-strncat.h" diff --git a/lib/unistr/u32-strncmp.c b/lib/unistr/u32-strncmp.c new file mode 100644 index 00000000..026ce50c --- /dev/null +++ b/lib/unistr/u32-strncmp.c @@ -0,0 +1,40 @@ +/* Compare UTF-32 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u32_strncmp (const uint32_t *s1, const uint32_t *s2, size_t n) +{ + for (; n > 0;) + { + uint32_t uc1 = *s1++; + uint32_t uc2 = *s2++; + if (uc1 != 0 && uc1 == uc2) + { + n--; + continue; + } + /* Note that uc1 and uc2 each have at most 31 bits. */ + return (int)uc1 - (int)uc2; + /* > 0 if uc1 > uc2, < 0 if uc1 < uc2, = 0 if uc1 and uc2 are both 0. */ + } + return 0; +} diff --git a/lib/unistr/u32-strncpy.c b/lib/unistr/u32-strncpy.c new file mode 100644 index 00000000..c8f409bb --- /dev/null +++ b/lib/unistr/u32-strncpy.c @@ -0,0 +1,25 @@ +/* Copy UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strncpy +#define UNIT uint32_t +#include "u-strncpy.h" diff --git a/lib/unistr/u32-strnlen.c b/lib/unistr/u32-strnlen.c new file mode 100644 index 00000000..2ead8f26 --- /dev/null +++ b/lib/unistr/u32-strnlen.c @@ -0,0 +1,25 @@ +/* Determine bounded length of UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strnlen +#define UNIT uint32_t +#include "u-strnlen.h" diff --git a/lib/unistr/u32-strpbrk.c b/lib/unistr/u32-strpbrk.c new file mode 100644 index 00000000..9579a1b0 --- /dev/null +++ b/lib/unistr/u32-strpbrk.c @@ -0,0 +1,50 @@ +/* Search for some characters in UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strpbrk +#define UNIT uint32_t +#define U_STRCHR u32_strchr + +UNIT * +FUNC (const UNIT *str, const UNIT *accept) +{ + /* Optimize two cases. */ + if (accept[0] == 0) + return NULL; + if (accept[1] == 0) + { + ucs4_t uc = accept[0]; + const UNIT *ptr = str; + for (; *ptr != 0; ptr++) + if (*ptr == uc) + return (UNIT *) ptr; + return NULL; + } + /* General case. */ + { + const UNIT *ptr = str; + for (; *ptr != 0; ptr++) + if (U_STRCHR (accept, *ptr)) + return (UNIT *) ptr; + return NULL; + } +} diff --git a/lib/unistr/u32-strrchr.c b/lib/unistr/u32-strrchr.c new file mode 100644 index 00000000..b4641f33 --- /dev/null +++ b/lib/unistr/u32-strrchr.c @@ -0,0 +1,38 @@ +/* Search character in UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +uint32_t * +u32_strrchr (const uint32_t *s, ucs4_t uc) +{ + /* Calling u32_strlen and then searching from the other end would cause more + memory accesses. Avoid that, at the cost of a few more comparisons. */ + uint32_t *result = NULL; + + for (;; s++) + { + if (*s == uc) + result = (uint32_t *) s; + if (*s == 0) + break; + } + return result; +} diff --git a/lib/unistr/u32-strspn.c b/lib/unistr/u32-strspn.c new file mode 100644 index 00000000..6f802029 --- /dev/null +++ b/lib/unistr/u32-strspn.c @@ -0,0 +1,50 @@ +/* Search for some characters in UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strspn +#define UNIT uint32_t +#define U_STRCHR u32_strchr + +size_t +FUNC (const UNIT *str, const UNIT *accept) +{ + /* Optimize two cases. */ + if (accept[0] == 0) + return 0; + if (accept[1] == 0) + { + ucs4_t uc = accept[0]; + const UNIT *ptr = str; + for (; *ptr != 0; ptr++) + if (*ptr != uc) + break; + return ptr - str; + } + /* General case. */ + { + const UNIT *ptr = str; + for (; *ptr != 0; ptr++) + if (!U_STRCHR (accept, *ptr)) + break; + return ptr - str; + } +} diff --git a/lib/unistr/u32-strstr.c b/lib/unistr/u32-strstr.c new file mode 100644 index 00000000..285746de --- /dev/null +++ b/lib/unistr/u32-strstr.c @@ -0,0 +1,26 @@ +/* Substring test for UTF-32 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strstr +#define UNIT uint32_t +#define U_STRCHR u32_strchr +#include "u-strstr.h" diff --git a/lib/unistr/u32-strtok.c b/lib/unistr/u32-strtok.c new file mode 100644 index 00000000..3f219192 --- /dev/null +++ b/lib/unistr/u32-strtok.c @@ -0,0 +1,27 @@ +/* Tokenize UTF-32 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_strtok +#define UNIT uint32_t +#define U_STRSPN u32_strspn +#define U_STRPBRK u32_strpbrk +#include "u-strtok.h" diff --git a/lib/unistr/u32-to-u16.c b/lib/unistr/u32-to-u16.c new file mode 100644 index 00000000..3a32162c --- /dev/null +++ b/lib/unistr/u32-to-u16.c @@ -0,0 +1,130 @@ +/* Convert UTF-32 string to UTF-16 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_to_u16 +#define SRC_UNIT uint32_t +#define DST_UNIT uint16_t + +#include +#include +#include + +DST_UNIT * +FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) +{ + const SRC_UNIT *s_end = s + n; + /* Output string accumulator. */ + DST_UNIT *result; + size_t allocated; + size_t length; + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + while (s < s_end) + { + ucs4_t uc; + int count; + + /* Fetch a Unicode character from the input string. */ + uc = *s++; + /* No need to call the safe variant u32_mbtouc, because + u16_uctomb will verify uc anyway. */ + + /* Store it in the output string. */ + count = u16_uctomb (result + length, uc, allocated - length); + if (count == -1) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = EILSEQ; + return NULL; + } + if (count == -2) + { + DST_UNIT *memory; + + allocated = (allocated > 0 ? 2 * allocated : 12); + if (length + 2 > allocated) + allocated = length + 2; + if (result == resultbuf || result == NULL) + memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); + else + memory = + (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); + + if (memory == NULL) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = ENOMEM; + return NULL; + } + if (result == resultbuf && length > 0) + memcpy ((char *) memory, (char *) result, + length * sizeof (DST_UNIT)); + result = memory; + count = u16_uctomb (result + length, uc, allocated - length); + if (count < 0) + abort (); + } + length += count; + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (DST_UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + DST_UNIT *memory; + + memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); + if (memory != NULL) + result = memory; + } + + *lengthp = length; + return result; +} diff --git a/lib/unistr/u32-to-u8.c b/lib/unistr/u32-to-u8.c new file mode 100644 index 00000000..4dce896b --- /dev/null +++ b/lib/unistr/u32-to-u8.c @@ -0,0 +1,130 @@ +/* Convert UTF-32 string to UTF-8 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u32_to_u8 +#define SRC_UNIT uint32_t +#define DST_UNIT uint8_t + +#include +#include +#include + +DST_UNIT * +FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) +{ + const SRC_UNIT *s_end = s + n; + /* Output string accumulator. */ + DST_UNIT *result; + size_t allocated; + size_t length; + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + while (s < s_end) + { + ucs4_t uc; + int count; + + /* Fetch a Unicode character from the input string. */ + uc = *s++; + /* No need to call the safe variant u32_mbtouc, because + u8_uctomb will verify uc anyway. */ + + /* Store it in the output string. */ + count = u8_uctomb (result + length, uc, allocated - length); + if (count == -1) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = EILSEQ; + return NULL; + } + if (count == -2) + { + DST_UNIT *memory; + + allocated = (allocated > 0 ? 2 * allocated : 12); + if (length + 6 > allocated) + allocated = length + 6; + if (result == resultbuf || result == NULL) + memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); + else + memory = + (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); + + if (memory == NULL) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = ENOMEM; + return NULL; + } + if (result == resultbuf && length > 0) + memcpy ((char *) memory, (char *) result, + length * sizeof (DST_UNIT)); + result = memory; + count = u8_uctomb (result + length, uc, allocated - length); + if (count < 0) + abort (); + } + length += count; + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (DST_UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + DST_UNIT *memory; + + memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); + if (memory != NULL) + result = memory; + } + + *lengthp = length; + return result; +} diff --git a/lib/unistr/u32-uctomb.c b/lib/unistr/u32-uctomb.c new file mode 100644 index 00000000..583b3b66 --- /dev/null +++ b/lib/unistr/u32-uctomb.c @@ -0,0 +1,47 @@ +/* Store a character in UTF-32 string. + Copyright (C) 2002, 2005-2006, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#if defined IN_LIBUNISTRING +/* Tell unistr.h to declare u32_uctomb as 'extern', not 'static inline'. */ +# include "unistring-notinline.h" +#endif + +/* Specification. */ +#include "unistr.h" + +#if !HAVE_INLINE + +int +u32_uctomb (uint32_t *s, ucs4_t uc, int n) +{ + if (uc < 0xd800 || (uc >= 0xe000 && uc < 0x110000)) + { + if (n > 0) + { + *s = uc; + return 1; + } + else + return -2; + } + else + return -1; +} + +#endif diff --git a/lib/unistr/u8-check.c b/lib/unistr/u8-check.c new file mode 100644 index 00000000..53897fc5 --- /dev/null +++ b/lib/unistr/u8-check.c @@ -0,0 +1,105 @@ +/* Check UTF-8 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +const uint8_t * +u8_check (const uint8_t *s, size_t n) +{ + const uint8_t *s_end = s + n; + + while (s < s_end) + { + /* Keep in sync with unistr.h and utf8-ucs4.c. */ + uint8_t c = *s; + + if (c < 0x80) + { + s++; + continue; + } + if (c >= 0xc2) + { + if (c < 0xe0) + { + if (s + 2 <= s_end + && (s[1] ^ 0x80) < 0x40) + { + s += 2; + continue; + } + } + else if (c < 0xf0) + { + if (s + 3 <= s_end + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (c >= 0xe1 || s[1] >= 0xa0) + && (c != 0xed || s[1] < 0xa0)) + { + s += 3; + continue; + } + } + else if (c < 0xf8) + { + if (s + 4 <= s_end + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 + && (c >= 0xf1 || s[1] >= 0x90) +#if 1 + && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) +#endif + ) + { + s += 4; + continue; + } + } +#if 0 + else if (c < 0xfc) + { + if (s + 5 <= s_end + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (c >= 0xf9 || s[1] >= 0x88)) + { + s += 5; + continue; + } + } + else if (c < 0xfe) + { + if (s + 6 <= s_end + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (s[5] ^ 0x80) < 0x40 + && (c >= 0xfd || s[1] >= 0x84)) + { + s += 6; + continue; + } + } +#endif + } + /* invalid or incomplete multibyte character */ + return s; + } + return NULL; +} diff --git a/lib/unistr/u8-chr.c b/lib/unistr/u8-chr.c new file mode 100644 index 00000000..2c4d7687 --- /dev/null +++ b/lib/unistr/u8-chr.c @@ -0,0 +1,87 @@ +/* Search character in piece of UTF-8 string. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +uint8_t * +u8_chr (const uint8_t *s, size_t n, ucs4_t uc) +{ + uint8_t c[6]; + + if (uc < 0x80) + { + uint8_t c0 = uc; + + for (; n > 0; s++, n--) + { + if (*s == c0) + return (uint8_t *) s; + } + } + else + switch (u8_uctomb_aux (c, uc, 6)) + { + case 2: + if (n > 1) + { + uint8_t c0 = c[0]; + uint8_t c1 = c[1]; + + for (n--; n > 0; s++, n--) + { + if (*s == c0 && s[1] == c1) + return (uint8_t *) s; + } + } + break; + + case 3: + if (n > 2) + { + uint8_t c0 = c[0]; + uint8_t c1 = c[1]; + uint8_t c2 = c[2]; + + for (n -= 2; n > 0; s++, n--) + { + if (*s == c0 && s[1] == c1 && s[2] == c2) + return (uint8_t *) s; + } + } + break; + + case 4: + if (n > 3) + { + uint8_t c0 = c[0]; + uint8_t c1 = c[1]; + uint8_t c2 = c[2]; + uint8_t c3 = c[3]; + + for (n -= 3; n > 0; s++, n--) + { + if (*s == c0 && s[1] == c1 && s[2] == c2 && s[3] == c3) + return (uint8_t *) s; + } + } + break; + } + return NULL; +} diff --git a/lib/unistr/u8-cmp.c b/lib/unistr/u8-cmp.c new file mode 100644 index 00000000..77b2402d --- /dev/null +++ b/lib/unistr/u8-cmp.c @@ -0,0 +1,30 @@ +/* Compare pieces of UTF-8 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include + +int +u8_cmp (const uint8_t *s1, const uint8_t *s2, size_t n) +{ + /* Use the fact that the UTF-8 encoding preserves lexicographic order. */ + return memcmp ((const char *) s1, (const char *) s2, n); +} diff --git a/lib/unistr/u8-cmp2.c b/lib/unistr/u8-cmp2.c new file mode 100644 index 00000000..99cee9f2 --- /dev/null +++ b/lib/unistr/u8-cmp2.c @@ -0,0 +1,28 @@ +/* Compare pieces of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include "minmax.h" + +#define FUNC u8_cmp2 +#define UNIT uint8_t +#define U_CMP u8_cmp +#include "u-cmp2.h" diff --git a/lib/unistr/u8-cpy-alloc.c b/lib/unistr/u8-cpy-alloc.c new file mode 100644 index 00000000..b2dcc5dc --- /dev/null +++ b/lib/unistr/u8-cpy-alloc.c @@ -0,0 +1,25 @@ +/* Copy piece of UTF-8 string. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_cpy_alloc +#define UNIT uint8_t +#include "u-cpy-alloc.h" diff --git a/lib/unistr/u8-cpy.c b/lib/unistr/u8-cpy.c new file mode 100644 index 00000000..bf3a55bc --- /dev/null +++ b/lib/unistr/u8-cpy.c @@ -0,0 +1,25 @@ +/* Copy piece of UTF-8 string. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_cpy +#define UNIT uint8_t +#include "u-cpy.h" diff --git a/lib/unistr/u8-endswith.c b/lib/unistr/u8-endswith.c new file mode 100644 index 00000000..e40613aa --- /dev/null +++ b/lib/unistr/u8-endswith.c @@ -0,0 +1,27 @@ +/* Substring test for UTF-8 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_endswith +#define UNIT uint8_t +#define U_STRLEN u8_strlen +#define U_CMP u8_cmp +#include "u-endswith.h" diff --git a/lib/unistr/u8-mblen.c b/lib/unistr/u8-mblen.c new file mode 100644 index 00000000..1981befe --- /dev/null +++ b/lib/unistr/u8-mblen.c @@ -0,0 +1,98 @@ +/* Look at first character in UTF-8 string. + Copyright (C) 1999-2000, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u8_mblen (const uint8_t *s, size_t n) +{ + if (n > 0) + { + /* Keep in sync with unistr.h and utf8-ucs4.c. */ + uint8_t c = *s; + + if (c < 0x80) + return (c != 0 ? 1 : 0); + if (c >= 0xc2) + { + if (c < 0xe0) + { + if (n >= 2 +#if CONFIG_UNICODE_SAFETY + && (s[1] ^ 0x80) < 0x40 +#endif + ) + return 2; + } + else if (c < 0xf0) + { + if (n >= 3 +#if CONFIG_UNICODE_SAFETY + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (c >= 0xe1 || s[1] >= 0xa0) + && (c != 0xed || s[1] < 0xa0) +#endif + ) + return 3; + } + else if (c < 0xf8) + { + if (n >= 4 +#if CONFIG_UNICODE_SAFETY + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 + && (c >= 0xf1 || s[1] >= 0x90) +#if 1 + && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) +#endif +#endif + ) + return 4; + } +#if 0 + else if (c < 0xfc) + { + if (n >= 5 +#if CONFIG_UNICODE_SAFETY + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (c >= 0xf9 || s[1] >= 0x88) +#endif + ) + return 5; + } + else if (c < 0xfe) + { + if (n >= 6 +#if CONFIG_UNICODE_SAFETY + && (s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (s[5] ^ 0x80) < 0x40 + && (c >= 0xfd || s[1] >= 0x84) +#endif + ) + return 6; + } +#endif + } + } + /* invalid or incomplete multibyte character */ + return -1; +} diff --git a/lib/unistr/u8-mbsnlen.c b/lib/unistr/u8-mbsnlen.c new file mode 100644 index 00000000..29af297f --- /dev/null +++ b/lib/unistr/u8-mbsnlen.c @@ -0,0 +1,39 @@ +/* Count characters in UTF-8 string. + Copyright (C) 2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2007. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +size_t +u8_mbsnlen (const uint8_t *s, size_t n) +{ + size_t characters; + + characters = 0; + while (n > 0) + { + int count = u8_mblen (s, n); + if (count <= 0) + count = 1; + s += count; + n -= count; + characters++; + } + return characters; +} diff --git a/lib/unistr/u8-mbtouc-aux.c b/lib/unistr/u8-mbtouc-aux.c new file mode 100644 index 00000000..53d02bf0 --- /dev/null +++ b/lib/unistr/u8-mbtouc-aux.c @@ -0,0 +1,158 @@ +/* Conversion UTF-8 to UCS-4. + Copyright (C) 2001-2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#if defined IN_LIBUNISTRING || HAVE_INLINE + +int +u8_mbtouc_aux (ucs4_t *puc, const uint8_t *s, size_t n) +{ + uint8_t c = *s; + + if (c >= 0xc2) + { + if (c < 0xe0) + { + if (n >= 2) + { + if ((s[1] ^ 0x80) < 0x40) + { + *puc = ((unsigned int) (c & 0x1f) << 6) + | (unsigned int) (s[1] ^ 0x80); + return 2; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xf0) + { + if (n >= 3) + { + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (c >= 0xe1 || s[1] >= 0xa0) + && (c != 0xed || s[1] < 0xa0)) + { + *puc = ((unsigned int) (c & 0x0f) << 12) + | ((unsigned int) (s[1] ^ 0x80) << 6) + | (unsigned int) (s[2] ^ 0x80); + return 3; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xf8) + { + if (n >= 4) + { + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 + && (c >= 0xf1 || s[1] >= 0x90) +#if 1 + && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) +#endif + ) + { + *puc = ((unsigned int) (c & 0x07) << 18) + | ((unsigned int) (s[1] ^ 0x80) << 12) + | ((unsigned int) (s[2] ^ 0x80) << 6) + | (unsigned int) (s[3] ^ 0x80); + return 4; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } +#if 0 + else if (c < 0xfc) + { + if (n >= 5) + { + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (c >= 0xf9 || s[1] >= 0x88)) + { + *puc = ((unsigned int) (c & 0x03) << 24) + | ((unsigned int) (s[1] ^ 0x80) << 18) + | ((unsigned int) (s[2] ^ 0x80) << 12) + | ((unsigned int) (s[3] ^ 0x80) << 6) + | (unsigned int) (s[4] ^ 0x80); + return 5; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xfe) + { + if (n >= 6) + { + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (s[5] ^ 0x80) < 0x40 + && (c >= 0xfd || s[1] >= 0x84)) + { + *puc = ((unsigned int) (c & 0x01) << 30) + | ((unsigned int) (s[1] ^ 0x80) << 24) + | ((unsigned int) (s[2] ^ 0x80) << 18) + | ((unsigned int) (s[3] ^ 0x80) << 12) + | ((unsigned int) (s[4] ^ 0x80) << 6) + | (unsigned int) (s[5] ^ 0x80); + return 6; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } +#endif + } + /* invalid multibyte character */ + *puc = 0xfffd; + return 1; +} + +#endif diff --git a/lib/unistr/u8-mbtouc-unsafe-aux.c b/lib/unistr/u8-mbtouc-unsafe-aux.c new file mode 100644 index 00000000..43e4a360 --- /dev/null +++ b/lib/unistr/u8-mbtouc-unsafe-aux.c @@ -0,0 +1,168 @@ +/* Conversion UTF-8 to UCS-4. + Copyright (C) 2001-2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#if defined IN_LIBUNISTRING || HAVE_INLINE + +int +u8_mbtouc_unsafe_aux (ucs4_t *puc, const uint8_t *s, size_t n) +{ + uint8_t c = *s; + + if (c >= 0xc2) + { + if (c < 0xe0) + { + if (n >= 2) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40) +#endif + { + *puc = ((unsigned int) (c & 0x1f) << 6) + | (unsigned int) (s[1] ^ 0x80); + return 2; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xf0) + { + if (n >= 3) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (c >= 0xe1 || s[1] >= 0xa0) + && (c != 0xed || s[1] < 0xa0)) +#endif + { + *puc = ((unsigned int) (c & 0x0f) << 12) + | ((unsigned int) (s[1] ^ 0x80) << 6) + | (unsigned int) (s[2] ^ 0x80); + return 3; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xf8) + { + if (n >= 4) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 + && (c >= 0xf1 || s[1] >= 0x90) +#if 1 + && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) +#endif + ) +#endif + { + *puc = ((unsigned int) (c & 0x07) << 18) + | ((unsigned int) (s[1] ^ 0x80) << 12) + | ((unsigned int) (s[2] ^ 0x80) << 6) + | (unsigned int) (s[3] ^ 0x80); + return 4; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } +#if 0 + else if (c < 0xfc) + { + if (n >= 5) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (c >= 0xf9 || s[1] >= 0x88)) +#endif + { + *puc = ((unsigned int) (c & 0x03) << 24) + | ((unsigned int) (s[1] ^ 0x80) << 18) + | ((unsigned int) (s[2] ^ 0x80) << 12) + | ((unsigned int) (s[3] ^ 0x80) << 6) + | (unsigned int) (s[4] ^ 0x80); + return 5; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xfe) + { + if (n >= 6) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (s[5] ^ 0x80) < 0x40 + && (c >= 0xfd || s[1] >= 0x84)) +#endif + { + *puc = ((unsigned int) (c & 0x01) << 30) + | ((unsigned int) (s[1] ^ 0x80) << 24) + | ((unsigned int) (s[2] ^ 0x80) << 18) + | ((unsigned int) (s[3] ^ 0x80) << 12) + | ((unsigned int) (s[4] ^ 0x80) << 6) + | (unsigned int) (s[5] ^ 0x80); + return 6; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } +#endif + } + /* invalid multibyte character */ + *puc = 0xfffd; + return 1; +} + +#endif diff --git a/lib/unistr/u8-mbtouc-unsafe.c b/lib/unistr/u8-mbtouc-unsafe.c new file mode 100644 index 00000000..46615696 --- /dev/null +++ b/lib/unistr/u8-mbtouc-unsafe.c @@ -0,0 +1,179 @@ +/* Look at first character in UTF-8 string. + Copyright (C) 1999-2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#if defined IN_LIBUNISTRING +/* Tell unistr.h to declare u8_mbtouc_unsafe as 'extern', not + 'static inline'. */ +# include "unistring-notinline.h" +#endif + +/* Specification. */ +#include "unistr.h" + +#if !HAVE_INLINE + +int +u8_mbtouc_unsafe (ucs4_t *puc, const uint8_t *s, size_t n) +{ + uint8_t c = *s; + + if (c < 0x80) + { + *puc = c; + return 1; + } + else if (c >= 0xc2) + { + if (c < 0xe0) + { + if (n >= 2) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40) +#endif + { + *puc = ((unsigned int) (c & 0x1f) << 6) + | (unsigned int) (s[1] ^ 0x80); + return 2; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xf0) + { + if (n >= 3) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (c >= 0xe1 || s[1] >= 0xa0) + && (c != 0xed || s[1] < 0xa0)) +#endif + { + *puc = ((unsigned int) (c & 0x0f) << 12) + | ((unsigned int) (s[1] ^ 0x80) << 6) + | (unsigned int) (s[2] ^ 0x80); + return 3; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xf8) + { + if (n >= 4) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 + && (c >= 0xf1 || s[1] >= 0x90) +#if 1 + && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) +#endif + ) +#endif + { + *puc = ((unsigned int) (c & 0x07) << 18) + | ((unsigned int) (s[1] ^ 0x80) << 12) + | ((unsigned int) (s[2] ^ 0x80) << 6) + | (unsigned int) (s[3] ^ 0x80); + return 4; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } +#if 0 + else if (c < 0xfc) + { + if (n >= 5) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (c >= 0xf9 || s[1] >= 0x88)) +#endif + { + *puc = ((unsigned int) (c & 0x03) << 24) + | ((unsigned int) (s[1] ^ 0x80) << 18) + | ((unsigned int) (s[2] ^ 0x80) << 12) + | ((unsigned int) (s[3] ^ 0x80) << 6) + | (unsigned int) (s[4] ^ 0x80); + return 5; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xfe) + { + if (n >= 6) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (s[5] ^ 0x80) < 0x40 + && (c >= 0xfd || s[1] >= 0x84)) +#endif + { + *puc = ((unsigned int) (c & 0x01) << 30) + | ((unsigned int) (s[1] ^ 0x80) << 24) + | ((unsigned int) (s[2] ^ 0x80) << 18) + | ((unsigned int) (s[3] ^ 0x80) << 12) + | ((unsigned int) (s[4] ^ 0x80) << 6) + | (unsigned int) (s[5] ^ 0x80); + return 6; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } +#endif + } + /* invalid multibyte character */ + *puc = 0xfffd; + return 1; +} + +#endif diff --git a/lib/unistr/u8-mbtouc.c b/lib/unistr/u8-mbtouc.c new file mode 100644 index 00000000..ff624f17 --- /dev/null +++ b/lib/unistr/u8-mbtouc.c @@ -0,0 +1,168 @@ +/* Look at first character in UTF-8 string. + Copyright (C) 1999-2002, 2006-2007, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#if defined IN_LIBUNISTRING +/* Tell unistr.h to declare u8_mbtouc as 'extern', not 'static inline'. */ +# include "unistring-notinline.h" +#endif + +/* Specification. */ +#include "unistr.h" + +#if !HAVE_INLINE + +int +u8_mbtouc (ucs4_t *puc, const uint8_t *s, size_t n) +{ + uint8_t c = *s; + + if (c < 0x80) + { + *puc = c; + return 1; + } + else if (c >= 0xc2) + { + if (c < 0xe0) + { + if (n >= 2) + { + if ((s[1] ^ 0x80) < 0x40) + { + *puc = ((unsigned int) (c & 0x1f) << 6) + | (unsigned int) (s[1] ^ 0x80); + return 2; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xf0) + { + if (n >= 3) + { + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (c >= 0xe1 || s[1] >= 0xa0) + && (c != 0xed || s[1] < 0xa0)) + { + *puc = ((unsigned int) (c & 0x0f) << 12) + | ((unsigned int) (s[1] ^ 0x80) << 6) + | (unsigned int) (s[2] ^ 0x80); + return 3; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xf8) + { + if (n >= 4) + { + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 + && (c >= 0xf1 || s[1] >= 0x90) +#if 1 + && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) +#endif + ) + { + *puc = ((unsigned int) (c & 0x07) << 18) + | ((unsigned int) (s[1] ^ 0x80) << 12) + | ((unsigned int) (s[2] ^ 0x80) << 6) + | (unsigned int) (s[3] ^ 0x80); + return 4; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } +#if 0 + else if (c < 0xfc) + { + if (n >= 5) + { + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (c >= 0xf9 || s[1] >= 0x88)) + { + *puc = ((unsigned int) (c & 0x03) << 24) + | ((unsigned int) (s[1] ^ 0x80) << 18) + | ((unsigned int) (s[2] ^ 0x80) << 12) + | ((unsigned int) (s[3] ^ 0x80) << 6) + | (unsigned int) (s[4] ^ 0x80); + return 5; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } + else if (c < 0xfe) + { + if (n >= 6) + { + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (s[5] ^ 0x80) < 0x40 + && (c >= 0xfd || s[1] >= 0x84)) + { + *puc = ((unsigned int) (c & 0x01) << 30) + | ((unsigned int) (s[1] ^ 0x80) << 24) + | ((unsigned int) (s[2] ^ 0x80) << 18) + | ((unsigned int) (s[3] ^ 0x80) << 12) + | ((unsigned int) (s[4] ^ 0x80) << 6) + | (unsigned int) (s[5] ^ 0x80); + return 6; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return n; + } + } +#endif + } + /* invalid multibyte character */ + *puc = 0xfffd; + return 1; +} + +#endif diff --git a/lib/unistr/u8-mbtoucr.c b/lib/unistr/u8-mbtoucr.c new file mode 100644 index 00000000..dd833524 --- /dev/null +++ b/lib/unistr/u8-mbtoucr.c @@ -0,0 +1,285 @@ +/* Look at first character in UTF-8 string, returning an error code. + Copyright (C) 1999-2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u8_mbtoucr (ucs4_t *puc, const uint8_t *s, size_t n) +{ + uint8_t c = *s; + + if (c < 0x80) + { + *puc = c; + return 1; + } + else if (c >= 0xc2) + { + if (c < 0xe0) + { + if (n >= 2) + { + if ((s[1] ^ 0x80) < 0x40) + { + *puc = ((unsigned int) (c & 0x1f) << 6) + | (unsigned int) (s[1] ^ 0x80); + return 2; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + else if (c < 0xf0) + { + if (n >= 2) + { + if ((s[1] ^ 0x80) < 0x40 + && (c >= 0xe1 || s[1] >= 0xa0) + && (c != 0xed || s[1] < 0xa0)) + { + if (n >= 3) + { + if ((s[2] ^ 0x80) < 0x40) + { + *puc = ((unsigned int) (c & 0x0f) << 12) + | ((unsigned int) (s[1] ^ 0x80) << 6) + | (unsigned int) (s[2] ^ 0x80); + return 3; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + else if (c < 0xf8) + { + if (n >= 2) + { + if ((s[1] ^ 0x80) < 0x40 + && (c >= 0xf1 || s[1] >= 0x90) +#if 1 + && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) +#endif + ) + { + if (n >= 3) + { + if ((s[2] ^ 0x80) < 0x40) + { + if (n >= 4) + { + if ((s[3] ^ 0x80) < 0x40) + { + *puc = ((unsigned int) (c & 0x07) << 18) + | ((unsigned int) (s[1] ^ 0x80) << 12) + | ((unsigned int) (s[2] ^ 0x80) << 6) + | (unsigned int) (s[3] ^ 0x80); + return 4; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } +#if 0 + else if (c < 0xfc) + { + if (n >= 2) + { + if ((s[1] ^ 0x80) < 0x40 + && (c >= 0xf9 || s[1] >= 0x88)) + { + if (n >= 3) + { + if ((s[2] ^ 0x80) < 0x40) + { + if (n >= 4) + { + if ((s[3] ^ 0x80) < 0x40) + { + if (n >= 5) + { + if ((s[4] ^ 0x80) < 0x40) + { + *puc = ((unsigned int) (c & 0x03) << 24) + | ((unsigned int) (s[1] ^ 0x80) << 18) + | ((unsigned int) (s[2] ^ 0x80) << 12) + | ((unsigned int) (s[3] ^ 0x80) << 6) + | (unsigned int) (s[4] ^ 0x80); + return 5; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + else if (c < 0xfe) + { + if (n >= 2) + { + if ((s[1] ^ 0x80) < 0x40 + && (c >= 0xfd || s[1] >= 0x84)) + { + if (n >= 3) + { + if ((s[2] ^ 0x80) < 0x40) + { + if (n >= 4) + { + if ((s[3] ^ 0x80) < 0x40) + { + if (n >= 5) + { + if ((s[4] ^ 0x80) < 0x40) + { + if (n >= 6) + { + if ((s[5] ^ 0x80) < 0x40) + { + *puc = ((unsigned int) (c & 0x01) << 30) + | ((unsigned int) (s[1] ^ 0x80) << 24) + | ((unsigned int) (s[2] ^ 0x80) << 18) + | ((unsigned int) (s[3] ^ 0x80) << 12) + | ((unsigned int) (s[4] ^ 0x80) << 6) + | (unsigned int) (s[5] ^ 0x80); + return 6; + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } + /* invalid multibyte character */ + } + else + { + /* incomplete multibyte character */ + *puc = 0xfffd; + return -2; + } + } +#endif + } + /* invalid multibyte character */ + *puc = 0xfffd; + return -1; +} diff --git a/lib/unistr/u8-move.c b/lib/unistr/u8-move.c new file mode 100644 index 00000000..5a30be8c --- /dev/null +++ b/lib/unistr/u8-move.c @@ -0,0 +1,25 @@ +/* Copy piece of UTF-8 string. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_move +#define UNIT uint8_t +#include "u-move.h" diff --git a/lib/unistr/u8-next.c b/lib/unistr/u8-next.c new file mode 100644 index 00000000..ecf4f80a --- /dev/null +++ b/lib/unistr/u8-next.c @@ -0,0 +1,37 @@ +/* Iterate over next character in UTF-8 string. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +const uint8_t * +u8_next (ucs4_t *puc, const uint8_t *s) +{ + int count; + + count = u8_strmbtouc (puc, s); + if (count > 0) + return s + count; + else + { + if (count < 0) + *puc = 0xfffd; + return NULL; + } +} diff --git a/lib/unistr/u8-prev.c b/lib/unistr/u8-prev.c new file mode 100644 index 00000000..245d22ff --- /dev/null +++ b/lib/unistr/u8-prev.c @@ -0,0 +1,93 @@ +/* Iterate over previous character in UTF-8 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +const uint8_t * +u8_prev (ucs4_t *puc, const uint8_t *s, const uint8_t *start) +{ + /* Keep in sync with unistr.h and utf8-ucs4.c. */ + if (s != start) + { + uint8_t c_1 = s[-1]; + + if (c_1 < 0x80) + { + *puc = c_1; + return s - 1; + } +#if CONFIG_UNICODE_SAFETY + if ((c_1 ^ 0x80) < 0x40) +#endif + if (s - 1 != start) + { + uint8_t c_2 = s[-2]; + + if (c_2 >= 0xc2 && c_2 < 0xe0) + { + *puc = ((unsigned int) (c_2 & 0x1f) << 6) + | (unsigned int) (c_1 ^ 0x80); + return s - 2; + } +#if CONFIG_UNICODE_SAFETY + if ((c_2 ^ 0x80) < 0x40) +#endif + if (s - 2 != start) + { + uint8_t c_3 = s[-3]; + + if (c_3 >= 0xe0 && c_3 < 0xf0 +#if CONFIG_UNICODE_SAFETY + && (c_3 >= 0xe1 || c_2 >= 0xa0) + && (c_3 != 0xed || c_2 < 0xa0) +#endif + ) + { + *puc = ((unsigned int) (c_3 & 0x0f) << 12) + | ((unsigned int) (c_2 ^ 0x80) << 6) + | (unsigned int) (c_1 ^ 0x80); + return s - 3; + } +#if CONFIG_UNICODE_SAFETY + if ((c_3 ^ 0x80) < 0x40) +#endif + if (s - 3 != start) + { + uint8_t c_4 = s[-4]; + + if (c_4 >= 0xf0 && c_4 < 0xf8 +#if CONFIG_UNICODE_SAFETY + && (c_4 >= 0xf1 || c_3 >= 0x90) + && (c_4 < 0xf4 || (c_4 == 0xf4 && c_3 < 0x90)) +#endif + ) + { + *puc = ((unsigned int) (c_4 & 0x07) << 18) + | ((unsigned int) (c_3 ^ 0x80) << 12) + | ((unsigned int) (c_2 ^ 0x80) << 6) + | (unsigned int) (c_1 ^ 0x80); + return s - 4; + } + } + } + } + } + return NULL; +} diff --git a/lib/unistr/u8-set.c b/lib/unistr/u8-set.c new file mode 100644 index 00000000..5bb4fd7a --- /dev/null +++ b/lib/unistr/u8-set.c @@ -0,0 +1,44 @@ +/* Fill UTF-8 string. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_set +#define UNIT uint8_t +#define IS_SINGLE_UNIT(uc) (uc < 0x80) + +#include +#include + +UNIT * +FUNC (UNIT *s, ucs4_t uc, size_t n) +{ + if (n > 0) + { + if (IS_SINGLE_UNIT (uc)) + memset ((char *) s, uc, n); + else + { + errno = EILSEQ; + return NULL; + } + } + return s; +} diff --git a/lib/unistr/u8-startswith.c b/lib/unistr/u8-startswith.c new file mode 100644 index 00000000..671e3d9f --- /dev/null +++ b/lib/unistr/u8-startswith.c @@ -0,0 +1,25 @@ +/* Substring test for UTF-8 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_startswith +#define UNIT uint8_t +#include "u-startswith.h" diff --git a/lib/unistr/u8-stpcpy.c b/lib/unistr/u8-stpcpy.c new file mode 100644 index 00000000..a5c15c5d --- /dev/null +++ b/lib/unistr/u8-stpcpy.c @@ -0,0 +1,44 @@ +/* Copy UTF-8 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Ensure stpcpy() gets declared. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include + +/* Specification. */ +#include "unistr.h" + +#if HAVE_STPCPY + +# include + +uint8_t * +u8_stpcpy (uint8_t *dest, const uint8_t *src) +{ + return (uint8_t *) stpcpy ((char *) dest, (const char *) src); +} + +#else + +# define FUNC u8_stpcpy +# define UNIT uint8_t +# include "u-stpcpy.h" + +#endif diff --git a/lib/unistr/u8-stpncpy.c b/lib/unistr/u8-stpncpy.c new file mode 100644 index 00000000..87f254d7 --- /dev/null +++ b/lib/unistr/u8-stpncpy.c @@ -0,0 +1,44 @@ +/* Copy UTF-8 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Ensure stpncpy() gets declared. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include + +/* Specification. */ +#include "unistr.h" + +#if __GLIBC__ >= 2 + +# include + +uint8_t * +u8_stpncpy (uint8_t *dest, const uint8_t *src, size_t n) +{ + return (uint8_t *) stpncpy ((char *) dest, (const char *) src, n); +} + +#else + +# define FUNC u8_stpncpy +# define UNIT uint8_t +# include "u-stpncpy.h" + +#endif diff --git a/lib/unistr/u8-strcat.c b/lib/unistr/u8-strcat.c new file mode 100644 index 00000000..25ec5d37 --- /dev/null +++ b/lib/unistr/u8-strcat.c @@ -0,0 +1,29 @@ +/* Concatenate UTF-8 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include + +uint8_t * +u8_strcat (uint8_t *dest, const uint8_t *src) +{ + return (uint8_t *) strcat ((char *) dest, (const char *) src); +} diff --git a/lib/unistr/u8-strchr.c b/lib/unistr/u8-strchr.c new file mode 100644 index 00000000..370a7930 --- /dev/null +++ b/lib/unistr/u8-strchr.c @@ -0,0 +1,100 @@ +/* Search character in UTF-8 string. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +uint8_t * +u8_strchr (const uint8_t *s, ucs4_t uc) +{ + uint8_t c[6]; + + if (uc < 0x80) + { + uint8_t c0 = uc; + + for (;; s++) + { + if (*s == c0) + break; + if (*s == 0) + goto notfound; + } + return (uint8_t *) s; + } + else + switch (u8_uctomb_aux (c, uc, 6)) + { + case 2: + if (*s == 0) + goto notfound; + { + uint8_t c0 = c[0]; + uint8_t c1 = c[1]; + + for (;; s++) + { + if (s[1] == 0) + goto notfound; + if (*s == c0 && s[1] == c1) + break; + } + return (uint8_t *) s; + } + + case 3: + if (*s == 0 || s[1] == 0) + goto notfound; + { + uint8_t c0 = c[0]; + uint8_t c1 = c[1]; + uint8_t c2 = c[2]; + + for (;; s++) + { + if (s[2] == 0) + goto notfound; + if (*s == c0 && s[1] == c1 && s[2] == c2) + break; + } + return (uint8_t *) s; + } + + case 4: + if (*s == 0 || s[1] == 0 || s[2] == 0) + goto notfound; + { + uint8_t c0 = c[0]; + uint8_t c1 = c[1]; + uint8_t c2 = c[2]; + uint8_t c3 = c[3]; + + for (;; s++) + { + if (s[3] == 0) + goto notfound; + if (*s == c0 && s[1] == c1 && s[2] == c2 && s[3] == c3) + break; + } + return (uint8_t *) s; + } + } +notfound: + return NULL; +} diff --git a/lib/unistr/u8-strcmp.c b/lib/unistr/u8-strcmp.c new file mode 100644 index 00000000..58b4b8c2 --- /dev/null +++ b/lib/unistr/u8-strcmp.c @@ -0,0 +1,30 @@ +/* Compare UTF-8 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include + +int +u8_strcmp (const uint8_t *s1, const uint8_t *s2) +{ + /* Use the fact that the UTF-8 encoding preserves lexicographic order. */ + return strcmp ((const char *) s1, (const char *) s2); +} diff --git a/lib/unistr/u8-strcoll.c b/lib/unistr/u8-strcoll.c new file mode 100644 index 00000000..ca08609e --- /dev/null +++ b/lib/unistr/u8-strcoll.c @@ -0,0 +1,33 @@ +/* Compare UTF-8 strings using the collation rules of the current locale. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include +#include +#include + +#include "uniconv.h" + +#define FUNC u8_strcoll +#define UNIT uint8_t +#define U_STRCMP u8_strcmp +#define U_STRCONV_TO_LOCALE u8_strconv_to_locale +#include "u-strcoll.h" diff --git a/lib/unistr/u8-strcpy.c b/lib/unistr/u8-strcpy.c new file mode 100644 index 00000000..b93c8cb4 --- /dev/null +++ b/lib/unistr/u8-strcpy.c @@ -0,0 +1,29 @@ +/* Copy UTF-8 string. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include + +uint8_t * +u8_strcpy (uint8_t *dest, const uint8_t *src) +{ + return (uint8_t *) strcpy ((char *) dest, (const char *) src); +} diff --git a/lib/unistr/u8-strcspn.c b/lib/unistr/u8-strcspn.c new file mode 100644 index 00000000..a43b53fb --- /dev/null +++ b/lib/unistr/u8-strcspn.c @@ -0,0 +1,28 @@ +/* Search for some characters in UTF-8 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_strcspn +#define UNIT uint8_t +#define U_STRLEN u8_strlen +#define U_STRMBTOUC u8_strmbtouc +#define U_STRCHR u8_strchr +#include "u-strcspn.h" diff --git a/lib/unistr/u8-strdup.c b/lib/unistr/u8-strdup.c new file mode 100644 index 00000000..feaa8725 --- /dev/null +++ b/lib/unistr/u8-strdup.c @@ -0,0 +1,40 @@ +/* Copy UTF-8 string. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#if HAVE_STRDUP + +# include + +uint8_t * +u8_strdup (const uint8_t *s) +{ + return (uint8_t *) strdup ((const char *) s); +} + +#else + +# define FUNC u8_strdup +# define UNIT uint8_t +# define U_STRLEN u8_strlen +# include "u-strdup.h" + +#endif diff --git a/lib/unistr/u8-strlen.c b/lib/unistr/u8-strlen.c new file mode 100644 index 00000000..cf5b9ceb --- /dev/null +++ b/lib/unistr/u8-strlen.c @@ -0,0 +1,29 @@ +/* Determine length of UTF-8 string. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include + +size_t +u8_strlen (const uint8_t *s) +{ + return strlen ((const char *) s); +} diff --git a/lib/unistr/u8-strmblen.c b/lib/unistr/u8-strmblen.c new file mode 100644 index 00000000..52db99d0 --- /dev/null +++ b/lib/unistr/u8-strmblen.c @@ -0,0 +1,96 @@ +/* Look at first character in UTF-8 string. + Copyright (C) 1999-2000, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u8_strmblen (const uint8_t *s) +{ + /* Keep in sync with unistr.h and utf8-ucs4.c. */ + uint8_t c = *s; + + if (c < 0x80) + return (c != 0 ? 1 : 0); + if (c >= 0xc2) + { + if (c < 0xe0) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40) +#else + if (s[1] != 0) +#endif + return 2; + } + else if (c < 0xf0) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (c >= 0xe1 || s[1] >= 0xa0) + && (c != 0xed || s[1] < 0xa0)) +#else + if (s[1] != 0 && s[2] != 0) +#endif + return 3; + } + else if (c < 0xf8) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 + && (c >= 0xf1 || s[1] >= 0x90) +#if 1 + && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) +#endif + ) +#else + if (s[1] != 0 && s[2] != 0 && s[3] != 0) +#endif + return 4; + } +#if 0 + else if (c < 0xfc) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (c >= 0xf9 || s[1] >= 0x88)) +#else + if (s[1] != 0 && s[2] != 0 && s[3] != 0 && s[4] != 0) +#endif + return 5; + } + else if (c < 0xfe) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (s[5] ^ 0x80) < 0x40 + && (c >= 0xfd || s[1] >= 0x84)) +#else + if (s[1] != 0 && s[2] != 0 && s[3] != 0 && s[4] != 0 && s[5] != 0) +#endif + return 6; + } +#endif + } + /* invalid or incomplete multibyte character */ + return -1; +} diff --git a/lib/unistr/u8-strmbtouc.c b/lib/unistr/u8-strmbtouc.c new file mode 100644 index 00000000..bc2fdb0d --- /dev/null +++ b/lib/unistr/u8-strmbtouc.c @@ -0,0 +1,129 @@ +/* Look at first character in UTF-8 string. + Copyright (C) 1999-2000, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u8_strmbtouc (ucs4_t *puc, const uint8_t *s) +{ + /* Keep in sync with unistr.h and utf8-ucs4.c. */ + uint8_t c = *s; + + if (c < 0x80) + { + *puc = c; + return (c != 0 ? 1 : 0); + } + if (c >= 0xc2) + { + if (c < 0xe0) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40) +#else + if (s[1] != 0) +#endif + { + *puc = ((unsigned int) (c & 0x1f) << 6) + | (unsigned int) (s[1] ^ 0x80); + return 2; + } + } + else if (c < 0xf0) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (c >= 0xe1 || s[1] >= 0xa0) + && (c != 0xed || s[1] < 0xa0)) +#else + if (s[1] != 0 && s[2] != 0) +#endif + { + *puc = ((unsigned int) (c & 0x0f) << 12) + | ((unsigned int) (s[1] ^ 0x80) << 6) + | (unsigned int) (s[2] ^ 0x80); + return 3; + } + } + else if (c < 0xf8) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 + && (c >= 0xf1 || s[1] >= 0x90) +#if 1 + && (c < 0xf4 || (c == 0xf4 && s[1] < 0x90)) +#endif + ) +#else + if (s[1] != 0 && s[2] != 0 && s[3] != 0) +#endif + { + *puc = ((unsigned int) (c & 0x07) << 18) + | ((unsigned int) (s[1] ^ 0x80) << 12) + | ((unsigned int) (s[2] ^ 0x80) << 6) + | (unsigned int) (s[3] ^ 0x80); + return 4; + } + } +#if 0 + else if (c < 0xfc) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (c >= 0xf9 || s[1] >= 0x88)) +#else + if (s[1] != 0 && s[2] != 0 && s[3] != 0 && s[4] != 0) +#endif + { + *puc = ((unsigned int) (c & 0x03) << 24) + | ((unsigned int) (s[1] ^ 0x80) << 18) + | ((unsigned int) (s[2] ^ 0x80) << 12) + | ((unsigned int) (s[3] ^ 0x80) << 6) + | (unsigned int) (s[4] ^ 0x80); + return 5; + } + } + else if (c < 0xfe) + { +#if CONFIG_UNICODE_SAFETY + if ((s[1] ^ 0x80) < 0x40 && (s[2] ^ 0x80) < 0x40 + && (s[3] ^ 0x80) < 0x40 && (s[4] ^ 0x80) < 0x40 + && (s[5] ^ 0x80) < 0x40 + && (c >= 0xfd || s[1] >= 0x84)) +#else + if (s[1] != 0 && s[2] != 0 && s[3] != 0 && s[4] != 0 && s[5] != 0) +#endif + { + *puc = ((unsigned int) (c & 0x01) << 30) + | ((unsigned int) (s[1] ^ 0x80) << 24) + | ((unsigned int) (s[2] ^ 0x80) << 18) + | ((unsigned int) (s[3] ^ 0x80) << 12) + | ((unsigned int) (s[4] ^ 0x80) << 6) + | (unsigned int) (s[5] ^ 0x80); + return 6; + } + } +#endif + } + /* invalid or incomplete multibyte character */ + return -1; +} diff --git a/lib/unistr/u8-strncat.c b/lib/unistr/u8-strncat.c new file mode 100644 index 00000000..d9654602 --- /dev/null +++ b/lib/unistr/u8-strncat.c @@ -0,0 +1,29 @@ +/* Concatenate UTF-8 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include + +uint8_t * +u8_strncat (uint8_t *dest, const uint8_t *src, size_t n) +{ + return (uint8_t *) strncat ((char *) dest, (const char *) src, n); +} diff --git a/lib/unistr/u8-strncmp.c b/lib/unistr/u8-strncmp.c new file mode 100644 index 00000000..5aad7e76 --- /dev/null +++ b/lib/unistr/u8-strncmp.c @@ -0,0 +1,30 @@ +/* Compare UTF-8 strings. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include + +int +u8_strncmp (const uint8_t *s1, const uint8_t *s2, size_t n) +{ + /* Use the fact that the UTF-8 encoding preserves lexicographic order. */ + return strncmp ((const char *) s1, (const char *) s2, n); +} diff --git a/lib/unistr/u8-strncpy.c b/lib/unistr/u8-strncpy.c new file mode 100644 index 00000000..f478fab6 --- /dev/null +++ b/lib/unistr/u8-strncpy.c @@ -0,0 +1,29 @@ +/* Copy UTF-8 string. + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#include + +uint8_t * +u8_strncpy (uint8_t *dest, const uint8_t *src, size_t n) +{ + return (uint8_t *) strncpy ((char *) dest, (const char *) src, n); +} diff --git a/lib/unistr/u8-strnlen.c b/lib/unistr/u8-strnlen.c new file mode 100644 index 00000000..32ce7b88 --- /dev/null +++ b/lib/unistr/u8-strnlen.c @@ -0,0 +1,44 @@ +/* Determine bounded length of UTF-8 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Ensure strnlen() gets declared. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#include + +/* Specification. */ +#include "unistr.h" + +#if __GLIBC__ >= 2 + +# include + +size_t +u8_strnlen (const uint8_t *s, size_t maxlen) +{ + return strnlen ((const char *) s, maxlen); +} + +#else + +# define FUNC u8_strnlen +# define UNIT uint8_t +# include "u-strnlen.h" + +#endif diff --git a/lib/unistr/u8-strpbrk.c b/lib/unistr/u8-strpbrk.c new file mode 100644 index 00000000..1538faa7 --- /dev/null +++ b/lib/unistr/u8-strpbrk.c @@ -0,0 +1,27 @@ +/* Search for some characters in UTF-8 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_strpbrk +#define UNIT uint8_t +#define U_STRMBTOUC u8_strmbtouc +#define U_STRCHR u8_strchr +#include "u-strpbrk.h" diff --git a/lib/unistr/u8-strrchr.c b/lib/unistr/u8-strrchr.c new file mode 100644 index 00000000..309f3234 --- /dev/null +++ b/lib/unistr/u8-strrchr.c @@ -0,0 +1,101 @@ +/* Search character in UTF-8 string. + Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +uint8_t * +u8_strrchr (const uint8_t *s, ucs4_t uc) +{ + /* Calling u8_strlen and then searching from the other end would cause more + memory accesses. Avoid that, at the cost of a few more comparisons. */ + uint8_t *result = NULL; + uint8_t c[6]; + + if (uc < 0x80) + { + uint8_t c0 = uc; + + for (;; s++) + { + if (*s == c0) + result = (uint8_t *) s; + if (*s == 0) + break; + } + } + else + switch (u8_uctomb_aux (c, uc, 6)) + { + case 2: + if (*s) + { + uint8_t c0 = c[0]; + uint8_t c1 = c[1]; + + /* FIXME: Maybe walking the string via u8_mblen is a win? */ + for (;; s++) + { + if (s[1] == 0) + break; + if (*s == c0 && s[1] == c1) + result = (uint8_t *) s; + } + } + break; + + case 3: + if (*s && s[1]) + { + uint8_t c0 = c[0]; + uint8_t c1 = c[1]; + uint8_t c2 = c[2]; + + /* FIXME: Maybe walking the string via u8_mblen is a win? */ + for (;; s++) + { + if (s[2] == 0) + break; + if (*s == c0 && s[1] == c1 && s[2] == c2) + result = (uint8_t *) s; + } + } + break; + + case 4: + if (*s && s[1] && s[2]) + { + uint8_t c0 = c[0]; + uint8_t c1 = c[1]; + uint8_t c2 = c[2]; + uint8_t c3 = c[3]; + + /* FIXME: Maybe walking the string via u8_mblen is a win? */ + for (;; s++) + { + if (s[3] == 0) + break; + if (*s == c0 && s[1] == c1 && s[2] == c2 && s[3] == c3) + result = (uint8_t *) s; + } + } + break; + } + return result; +} diff --git a/lib/unistr/u8-strspn.c b/lib/unistr/u8-strspn.c new file mode 100644 index 00000000..582c8259 --- /dev/null +++ b/lib/unistr/u8-strspn.c @@ -0,0 +1,29 @@ +/* Search for some characters in UTF-8 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_strspn +#define UNIT uint8_t +#define U_STRLEN u8_strlen +#define U_STRMBTOUC u8_strmbtouc +#define U_CMP u8_cmp +#define U_STRCHR u8_strchr +#include "u-strspn.h" diff --git a/lib/unistr/u8-strstr.c b/lib/unistr/u8-strstr.c new file mode 100644 index 00000000..b5cbf249 --- /dev/null +++ b/lib/unistr/u8-strstr.c @@ -0,0 +1,28 @@ +/* Substring test for UTF-8 strings. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +/* FIXME: Maybe walking the string via u8_mblen is a win? */ + +#define FUNC u8_strstr +#define UNIT uint8_t +#define U_STRCHR u8_strchr +#include "u-strstr.h" diff --git a/lib/unistr/u8-strtok.c b/lib/unistr/u8-strtok.c new file mode 100644 index 00000000..a8d3821d --- /dev/null +++ b/lib/unistr/u8-strtok.c @@ -0,0 +1,27 @@ +/* Tokenize UTF-8 string. + Copyright (C) 1999, 2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_strtok +#define UNIT uint8_t +#define U_STRSPN u8_strspn +#define U_STRPBRK u8_strpbrk +#include "u-strtok.h" diff --git a/lib/unistr/u8-to-u16.c b/lib/unistr/u8-to-u16.c new file mode 100644 index 00000000..03c66000 --- /dev/null +++ b/lib/unistr/u8-to-u16.c @@ -0,0 +1,136 @@ +/* Convert UTF-8 string to UTF-16 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_to_u16 +#define SRC_UNIT uint8_t +#define DST_UNIT uint16_t + +#include +#include +#include + +DST_UNIT * +FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) +{ + const SRC_UNIT *s_end = s + n; + /* Output string accumulator. */ + DST_UNIT *result; + size_t allocated; + size_t length; + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + while (s < s_end) + { + ucs4_t uc; + int count; + + /* Fetch a Unicode character from the input string. */ + count = u8_mbtouc (&uc, s, s_end - s); + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = EILSEQ; + return NULL; + } + s += count; + + /* Store it in the output string. */ + count = u16_uctomb (result + length, uc, allocated - length); + if (count == -1) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = EILSEQ; + return NULL; + } + if (count == -2) + { + DST_UNIT *memory; + + allocated = (allocated > 0 ? 2 * allocated : 12); + if (length + 2 > allocated) + allocated = length + 2; + if (result == resultbuf || result == NULL) + memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); + else + memory = + (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); + + if (memory == NULL) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = ENOMEM; + return NULL; + } + if (result == resultbuf && length > 0) + memcpy ((char *) memory, (char *) result, + length * sizeof (DST_UNIT)); + result = memory; + count = u16_uctomb (result + length, uc, allocated - length); + if (count < 0) + abort (); + } + length += count; + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (DST_UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + DST_UNIT *memory; + + memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); + if (memory != NULL) + result = memory; + } + + *lengthp = length; + return result; +} diff --git a/lib/unistr/u8-to-u32.c b/lib/unistr/u8-to-u32.c new file mode 100644 index 00000000..2a0ad39e --- /dev/null +++ b/lib/unistr/u8-to-u32.c @@ -0,0 +1,125 @@ +/* Convert UTF-8 string to UTF-32 string. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +#define FUNC u8_to_u32 +#define SRC_UNIT uint8_t +#define DST_UNIT uint32_t + +#include +#include +#include + +DST_UNIT * +FUNC (const SRC_UNIT *s, size_t n, DST_UNIT *resultbuf, size_t *lengthp) +{ + const SRC_UNIT *s_end = s + n; + /* Output string accumulator. */ + DST_UNIT *result; + size_t allocated; + size_t length; + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + while (s < s_end) + { + ucs4_t uc; + int count; + + /* Fetch a Unicode character from the input string. */ + count = u8_mbtouc (&uc, s, s_end - s); + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = EILSEQ; + return NULL; + } + s += count; + + /* Store it in the output string. */ + if (length + 1 > allocated) + { + DST_UNIT *memory; + + allocated = (allocated > 0 ? 2 * allocated : 12); + if (length + 1 > allocated) + allocated = length + 1; + if (result == resultbuf || result == NULL) + memory = (DST_UNIT *) malloc (allocated * sizeof (DST_UNIT)); + else + memory = + (DST_UNIT *) realloc (result, allocated * sizeof (DST_UNIT)); + + if (memory == NULL) + { + if (!(result == resultbuf || result == NULL)) + free (result); + errno = ENOMEM; + return NULL; + } + if (result == resultbuf && length > 0) + memcpy ((char *) memory, (char *) result, + length * sizeof (DST_UNIT)); + result = memory; + } + result[length++] = uc; + } + + if (length == 0) + { + if (result == NULL) + { + /* Return a non-NULL value. NULL means error. */ + result = (DST_UNIT *) malloc (1); + if (result == NULL) + { + errno = ENOMEM; + return NULL; + } + } + } + else if (result != resultbuf && length < allocated) + { + /* Shrink the allocated memory if possible. */ + DST_UNIT *memory; + + memory = (DST_UNIT *) realloc (result, length * sizeof (DST_UNIT)); + if (memory != NULL) + result = memory; + } + + *lengthp = length; + return result; +} diff --git a/lib/unistr/u8-uctomb-aux.c b/lib/unistr/u8-uctomb-aux.c new file mode 100644 index 00000000..c42fa501 --- /dev/null +++ b/lib/unistr/u8-uctomb-aux.c @@ -0,0 +1,69 @@ +/* Conversion UCS-4 to UTF-8. + Copyright (C) 2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistr.h" + +int +u8_uctomb_aux (uint8_t *s, ucs4_t uc, int n) +{ + int count; + + if (uc < 0x80) + /* The case n >= 1 is already handled by the caller. */ + return -2; + else if (uc < 0x800) + count = 2; + else if (uc < 0x10000) + { + if (uc < 0xd800 || uc >= 0xe000) + count = 3; + else + return -1; + } +#if 0 + else if (uc < 0x200000) + count = 4; + else if (uc < 0x4000000) + count = 5; + else if (uc <= 0x7fffffff) + count = 6; +#else + else if (uc < 0x110000) + count = 4; +#endif + else + return -1; + + if (n < count) + return -2; + + switch (count) /* note: code falls through cases! */ + { +#if 0 + case 6: s[5] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x4000000; + case 5: s[4] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x200000; +#endif + case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000; + case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800; + case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0; + /*case 1:*/ s[0] = uc; + } + return count; +} diff --git a/lib/unistr/u8-uctomb.c b/lib/unistr/u8-uctomb.c new file mode 100644 index 00000000..33921669 --- /dev/null +++ b/lib/unistr/u8-uctomb.c @@ -0,0 +1,88 @@ +/* Store a character in UTF-8 string. + Copyright (C) 2002, 2005-2006, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#if defined IN_LIBUNISTRING +/* Tell unistr.h to declare u8_uctomb as 'extern', not 'static inline'. */ +# include "unistring-notinline.h" +#endif + +/* Specification. */ +#include "unistr.h" + +#if !HAVE_INLINE + +int +u8_uctomb (uint8_t *s, ucs4_t uc, int n) +{ + if (uc < 0x80) + { + if (n > 0) + { + s[0] = uc; + return 1; + } + /* else return -2, below. */ + } + else + { + int count; + + if (uc < 0x800) + count = 2; + else if (uc < 0x10000) + { + if (uc < 0xd800 || uc >= 0xe000) + count = 3; + else + return -1; + } +#if 0 + else if (uc < 0x200000) + count = 4; + else if (uc < 0x4000000) + count = 5; + else if (uc <= 0x7fffffff) + count = 6; +#else + else if (uc < 0x110000) + count = 4; +#endif + else + return -1; + + if (n >= count) + { + switch (count) /* note: code falls through cases! */ + { +#if 0 + case 6: s[5] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x4000000; + case 5: s[4] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x200000; +#endif + case 4: s[3] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x10000; + case 3: s[2] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0x800; + case 2: s[1] = 0x80 | (uc & 0x3f); uc = uc >> 6; uc |= 0xc0; + /*case 1:*/ s[0] = uc; + } + return count; + } + } + return -2; +} + +#endif diff --git a/lib/unistring-notinline.h b/lib/unistring-notinline.h new file mode 100644 index 00000000..e7e5faa3 --- /dev/null +++ b/lib/unistring-notinline.h @@ -0,0 +1,23 @@ +/* Override decision whether to use 'inline' or not. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include "unistring/inline.h" +#undef UNISTRING_HAVE_INLINE +#define UNISTRING_HAVE_INLINE 0 +#undef HAVE_INLINE +#define HAVE_INLINE 0 diff --git a/lib/unistring/inline.h b/lib/unistring/inline.h new file mode 100644 index 00000000..bdb0b229 --- /dev/null +++ b/lib/unistring/inline.h @@ -0,0 +1,68 @@ +/* Decision whether to use 'inline' or not. + Copyright (C) 2006, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#ifndef _UNISTRING_INLINE_H +#define _UNISTRING_INLINE_H + +/* This is like the gl_INLINE macro in gnulib/m4/inline.m4, but makes its + decision based on defined preprocessor symbols rather than through + autoconf tests. + See */ + +/* Test for the 'inline' keyword or equivalent. ISO C 99 semantics is not + required, only that 'static inline' works. + Define 'inline' to a supported equivalent, or to nothing if not supported, + like AC_C_INLINE does. Also, define UNISTRING_HAVE_INLINE if 'inline' or an + equivalent is effectively supported, i.e. if the compiler is likely to + drop unused 'static inline' functions. */ + +#if defined __GNUC__ +/* GNU C or GNU C++. */ +# if defined __NO_INLINE__ +/* GCC defines __NO_INLINE__ if not optimizing or if -fno-inline is + specified. */ +# define UNISTRING_HAVE_INLINE 0 +# else +/* Whether 'inline' has the old GCC semantics or the ISO C 99 semantics, + does not matter. */ +# define UNISTRING_HAVE_INLINE 1 +# ifndef inline +# define inline __inline__ +# endif +# endif +#elif defined __cplusplus +/* Any other C++ compiler. */ +# define UNISTRING_HAVE_INLINE 1 +#else +/* Any other C compiler. */ +# if defined __osf__ +/* OSF/1 cc has inline. */ +# define UNISTRING_HAVE_INLINE 1 +# elif defined _AIX || defined __sgi +/* AIX 4 xlc, IRIX 6.5 cc have __inline. */ +# define UNISTRING_HAVE_INLINE 1 +# ifndef inline +# define inline __inline +# endif +# else +/* Some older C compiler. */ +# define UNISTRING_HAVE_INLINE 0 +# endif +#endif + +#endif /* _UNISTRING_INLINE_H */ diff --git a/lib/unistring/version.in.h b/lib/unistring/version.in.h new file mode 100644 index 00000000..47b736ad --- /dev/null +++ b/lib/unistring/version.in.h @@ -0,0 +1,39 @@ +/* Meta information about GNU libunistring. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNISTRING_VERSION_H +#define _UNISTRING_VERSION_H + +/* Get LIBUNISTRING_DLL_VARIABLE. */ +#include + + +#ifdef __cplusplus +extern "C" { +#endif + + +#define _LIBUNISTRING_VERSION @HEXVERSION@ /* version number: (major<<8) + minor */ +extern LIBUNISTRING_DLL_VARIABLE const int _libunistring_version; /* Likewise */ + + +#ifdef __cplusplus +} +#endif + + +#endif /* _UNISTRING_VERSION_H */ diff --git a/lib/unistring/woe32dll.in.h b/lib/unistring/woe32dll.in.h new file mode 100644 index 00000000..7764c86e --- /dev/null +++ b/lib/unistring/woe32dll.in.h @@ -0,0 +1,30 @@ +/* Support for variables in shared libraries on Windows platforms. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#ifndef _UNISTRING_WOE32DLL_H +#define _UNISTRING_WOE32DLL_H + +#ifdef IN_LIBUNISTRING +/* All code is collected in a single library, */ +# define LIBUNISTRING_DLL_VARIABLE +#else +/* References from outside of libunistring. */ +# define LIBUNISTRING_DLL_VARIABLE @DLL_VARIABLE@ +#endif + +#endif /* _UNISTRING_WOE32DLL_H */ diff --git a/lib/unitypes.h b/lib/unitypes.h new file mode 100644 index 00000000..515f7adc --- /dev/null +++ b/lib/unitypes.h @@ -0,0 +1,26 @@ +/* Elementary types for the GNU UniString library. + Copyright (C) 2002, 2005-2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNITYPES_H +#define _UNITYPES_H + +/* Get uint8_t, uint16_t, uint32_t. */ +#include + +/* Type representing a Unicode character. */ +typedef uint32_t ucs4_t; + +#endif /* _UNITYPES_H */ diff --git a/lib/uniwbrk.h b/lib/uniwbrk.h new file mode 100644 index 00000000..c6ad971e --- /dev/null +++ b/lib/uniwbrk.h @@ -0,0 +1,83 @@ +/* Word breaks in Unicode strings. + Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNIWBRK_H +#define _UNIWBRK_H + +/* Get size_t. */ +#include + +#include "unitypes.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +/* ========================================================================= */ + +/* Property defined in Unicode Standard Annex #29, section "Word Boundaries" + */ + +/* Possible values of the Word_Break property. + This enumeration may be extended in the future. */ +enum +{ + WBP_OTHER = 0, + WBP_CR = 11, + WBP_LF = 12, + WBP_NEWLINE = 10, + WBP_EXTEND = 8, + WBP_FORMAT = 9, + WBP_KATAKANA = 1, + WBP_ALETTER = 2, + WBP_MIDNUMLET = 3, + WBP_MIDLETTER = 4, + WBP_MIDNUM = 5, + WBP_NUMERIC = 6, + WBP_EXTENDNUMLET = 7 +}; + +/* Return the Word_Break property of a Unicode character. */ +extern int + uc_wordbreak_property (ucs4_t uc); + +/* ========================================================================= */ + +/* Word breaks. */ + +/* Determine the word break points in S, and store the result at p[0..n-1]. + p[i] = 1 means that there is a word boundary between s[i-1] and s[i]. + p[i] = 0 means that s[i-1] and s[i] must not be separated. + */ +extern void + u8_wordbreaks (const uint8_t *s, size_t n, char *p); +extern void + u16_wordbreaks (const uint16_t *s, size_t n, char *p); +extern void + u32_wordbreaks (const uint32_t *s, size_t n, char *p); +extern void + ulc_wordbreaks (const char *s, size_t n, char *p); + +/* ========================================================================= */ + +#ifdef __cplusplus +} +#endif + + +#endif /* _UNIWBRK_H */ diff --git a/lib/uniwbrk/u-wordbreaks.h b/lib/uniwbrk/u-wordbreaks.h new file mode 100644 index 00000000..5ef4e8c1 --- /dev/null +++ b/lib/uniwbrk/u-wordbreaks.h @@ -0,0 +1,127 @@ +/* Word breaks in UTF-8/UTF-16/UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +void +FUNC (const UNIT *s, size_t n, char *p) +{ + if (n > 0) + { + const UNIT *s_end = s + n; + + /* Word break property of the last character. + -1 at the very beginning of the string. */ + int last_char_prop = -1; + + /* Format and Extend characters are ignored; this means, the mostly used + unit is the complex character (= character with subsequent ignored + characters). + Word break property of the last complex character. + -1 at the very beginning of the string. */ + int last_compchar_prop = -1; + char *last_compchar_ptr = NULL; + + /* For recognizing rules involving 3 complex characters: + Word break property of the second-to-last complex character. + -1 at the very beginning of the string. */ + int secondlast_compchar_prop = -1; + + /* Don't break inside multibyte characters. */ + memset (p, 0, n); + + while (s < s_end) + { + ucs4_t uc; + int count = U_MBTOUC_UNSAFE (&uc, s, s_end - s); + int prop = uc_wordbreak_property (uc); + + /* No break at the start of the string. */ + if (last_char_prop >= 0) + { + /* No break between CR and LF. */ + if (last_char_prop == WBP_CR && prop == WBP_LF) + /* *p = 0 */; + /* Break before and after newlines. */ + else if (last_char_prop >= WBP_NEWLINE + /* same as: + last_char_prop == WBP_CR + || last_char_prop == WBP_LF + || last_char_prop == WBP_NEWLINE */ + || prop >= WBP_NEWLINE + /* same as: + prop == WBP_CR + || prop == WBP_LF + || prop == WBP_NEWLINE */) + *p = 1; + /* Ignore Format and Extend characters. */ + else if (!(prop == WBP_EXTEND || prop == WBP_FORMAT)) + { + /* No break in these situations (see UAX #29): + + secondlast last current + + ALetter (MidLetter | MidNumLet) × ALetter (WB7) + ALetter × (MidLetter | MidNumLet) ALetter (WB6) + Numeric (MidNum | MidNumLet) × Numeric (WB11) + Numeric × (MidNum | MidNumLet) Numeric (WB12) + ALetter × ALetter (WB5) + ALetter × Numeric (WB9) + Numeric × ALetter (WB10) + Numeric × Numeric (WB8) + Katakana × Katakana (WB13) + (ALetter | Numeric | Katakana) × ExtendNumLet (WB13a) + ExtendNumLet × ExtendNumLet (WB13a) + ExtendNumLet × (ALetter | Numeric | Katakana) (WB13b) + */ + /* No break across certain punctuation. Also, disable word + breaks that were recognized earlier (due to lookahead of + only one complex character). */ + if ((prop == WBP_ALETTER + && (last_compchar_prop == WBP_MIDLETTER + || last_compchar_prop == WBP_MIDNUMLET) + && secondlast_compchar_prop == WBP_ALETTER) + || (prop == WBP_NUMERIC + && (last_compchar_prop == WBP_MIDNUM + || last_compchar_prop == WBP_MIDNUMLET) + && secondlast_compchar_prop == WBP_NUMERIC)) + { + *last_compchar_ptr = 0; + /* *p = 0; */ + } + else + { + /* Perform a single table lookup. */ + if (uniwbrk_table[last_compchar_prop][prop]) + *p = 1; + /* else *p = 0; */ + } + } + } + + last_char_prop = prop; + /* Ignore Format and Extend characters, except at the start of the string. */ + if (last_compchar_prop < 0 || !(prop == WBP_EXTEND || prop == WBP_FORMAT)) + { + secondlast_compchar_prop = last_compchar_prop; + last_compchar_prop = prop; + last_compchar_ptr = p; + } + + s += count; + p += count; + } + } +} diff --git a/lib/uniwbrk/u16-wordbreaks.c b/lib/uniwbrk/u16-wordbreaks.c new file mode 100644 index 00000000..3398fd3a --- /dev/null +++ b/lib/uniwbrk/u16-wordbreaks.c @@ -0,0 +1,31 @@ +/* Word breaks in UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwbrk.h" + +#include + +#include "unistr.h" +#include "uniwbrk/wbrktable.h" + +#define FUNC u16_wordbreaks +#define UNIT uint16_t +#define U_MBTOUC_UNSAFE u16_mbtouc_unsafe +#include "u-wordbreaks.h" diff --git a/lib/uniwbrk/u32-wordbreaks.c b/lib/uniwbrk/u32-wordbreaks.c new file mode 100644 index 00000000..6763fb9e --- /dev/null +++ b/lib/uniwbrk/u32-wordbreaks.c @@ -0,0 +1,31 @@ +/* Word breaks in UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwbrk.h" + +#include + +#include "unistr.h" +#include "uniwbrk/wbrktable.h" + +#define FUNC u32_wordbreaks +#define UNIT uint32_t +#define U_MBTOUC_UNSAFE u32_mbtouc_unsafe +#include "u-wordbreaks.h" diff --git a/lib/uniwbrk/u8-wordbreaks.c b/lib/uniwbrk/u8-wordbreaks.c new file mode 100644 index 00000000..59d2076d --- /dev/null +++ b/lib/uniwbrk/u8-wordbreaks.c @@ -0,0 +1,124 @@ +/* Word breaks in UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwbrk.h" + +#include + +#include "unistr.h" +#include "uniwbrk/wbrktable.h" + +#define FUNC u8_wordbreaks +#define UNIT uint8_t +#define U_MBTOUC_UNSAFE u8_mbtouc_unsafe +#include "u-wordbreaks.h" + + +#ifdef TEST + +#include +#include + +/* Read the contents of an input stream, and return it, terminated with a NUL + byte. */ +char * +read_file (FILE *stream) +{ +#define BUFSIZE 4096 + char *buf = NULL; + int alloc = 0; + int size = 0; + int count; + + while (! feof (stream)) + { + if (size + BUFSIZE > alloc) + { + alloc = alloc + alloc / 2; + if (alloc < size + BUFSIZE) + alloc = size + BUFSIZE; + buf = realloc (buf, alloc); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + } + count = fread (buf + size, 1, BUFSIZE, stream); + if (count == 0) + { + if (ferror (stream)) + { + perror ("fread"); + exit (1); + } + } + else + size += count; + } + buf = realloc (buf, size + 1); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + buf[size] = '\0'; + return buf; +#undef BUFSIZE +} + +int +main (int argc, char * argv[]) +{ + if (argc == 1) + { + /* Display all the word breaks in the input string. */ + char *input = read_file (stdin); + int length = strlen (input); + char *breaks = malloc (length); + int i; + + u8_wordbreaks ((uint8_t *) input, length, breaks); + + for (i = 0; i < length; i++) + { + switch (breaks[i]) + { + case 1: + /* U+2027 in UTF-8 encoding */ + putc (0xe2, stdout); putc (0x80, stdout); putc (0xa7, stdout); + break; + case 0: + break; + default: + abort (); + } + putc (input[i], stdout); + } + + free (breaks); + + return 0; + } + else + return 1; +} + +#endif /* TEST */ diff --git a/lib/uniwbrk/ulc-wordbreaks.c b/lib/uniwbrk/ulc-wordbreaks.c new file mode 100644 index 00000000..cb6e131c --- /dev/null +++ b/lib/uniwbrk/ulc-wordbreaks.c @@ -0,0 +1,201 @@ +/* Word breaks in strings. + Copyright (C) 2001-2003, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwbrk.h" + +#include +#include + +#include "c-ctype.h" +#include "localcharset.h" +#include "uniconv.h" +#include "unilbrk/ulc-common.h" + +/* Word breaks of a string in an arbitrary encoding. + + We convert the input string to Unicode. + + The standardized Unicode encodings are UTF-8, UCS-2, UCS-4, UTF-16, + UTF-16BE, UTF-16LE, UTF-7. UCS-2 supports only characters up to + \U0000FFFF. UTF-16 and variants support only characters up to + \U0010FFFF. UTF-7 is way too complex and not supported by glibc-2.1. + UCS-4 specification leaves doubts about endianness and byte order mark. + glibc currently interprets it as big endian without byte order mark, + but this is not backed by an RFC. So we use UTF-8. It supports + characters up to \U7FFFFFFF and is unambiguously defined. */ + +void +ulc_wordbreaks (const char *s, size_t n, char *p) +{ + if (n > 0) + { + const char *encoding = locale_charset (); + + if (is_utf8_encoding (encoding)) + u8_wordbreaks ((const uint8_t *) s, n, p); + else + { + /* Convert the string to UTF-8 and build a translation table + from offsets into s to offsets into the translated string. */ + size_t *offsets = (size_t *) malloc (n * sizeof (size_t)); + + if (offsets != NULL) + { + uint8_t *t; + size_t m; + + t = u8_conv_from_encoding (encoding, iconveh_question_mark, + s, n, offsets, NULL, &m); + if (t != NULL) + { + char *q = (char *) (m > 0 ? malloc (m) : NULL); + + if (m == 0 || q != NULL) + { + size_t i; + + /* Determine the word breaks of the UTF-8 string. */ + u8_wordbreaks (t, m, q); + + /* Translate the result back to the original string. */ + memset (p, 0, n); + for (i = 0; i < n; i++) + if (offsets[i] != (size_t)(-1)) + p[i] = q[offsets[i]]; + + free (q); + free (t); + free (offsets); + return; + } + free (t); + } + free (offsets); + } + + /* Impossible to convert. */ +#if C_CTYPE_ASCII + if (is_all_ascii (s, n)) + { + /* ASCII is a subset of UTF-8. */ + u8_wordbreaks ((const uint8_t *) s, n, p); + return; + } +#endif + /* We have a non-ASCII string and cannot convert it. + Don't produce any word breaks. */ + memset (p, 0, n); + } + } +} + + +#ifdef TEST + +#include +#include +#include + +/* Read the contents of an input stream, and return it, terminated with a NUL + byte. */ +char * +read_file (FILE *stream) +{ +#define BUFSIZE 4096 + char *buf = NULL; + int alloc = 0; + int size = 0; + int count; + + while (! feof (stream)) + { + if (size + BUFSIZE > alloc) + { + alloc = alloc + alloc / 2; + if (alloc < size + BUFSIZE) + alloc = size + BUFSIZE; + buf = realloc (buf, alloc); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + } + count = fread (buf + size, 1, BUFSIZE, stream); + if (count == 0) + { + if (ferror (stream)) + { + perror ("fread"); + exit (1); + } + } + else + size += count; + } + buf = realloc (buf, size + 1); + if (buf == NULL) + { + fprintf (stderr, "out of memory\n"); + exit (1); + } + buf[size] = '\0'; + return buf; +#undef BUFSIZE +} + +int +main (int argc, char * argv[]) +{ + setlocale (LC_CTYPE, ""); + if (argc == 1) + { + /* Display all the word breaks in the input string. */ + char *input = read_file (stdin); + int length = strlen (input); + char *breaks = malloc (length); + int i; + + ulc_wordbreaks (input, length, breaks); + + for (i = 0; i < length; i++) + { + switch (breaks[i]) + { + case 1: + putc ('|', stdout); + break; + case 0: + break; + default: + abort (); + } + putc (input[i], stdout); + } + + free (breaks); + + return 0; + } + else + return 1; +} + +#endif /* TEST */ diff --git a/lib/uniwbrk/wbrkprop.h b/lib/uniwbrk/wbrkprop.h new file mode 100644 index 00000000..3b50e17e --- /dev/null +++ b/lib/uniwbrk/wbrkprop.h @@ -0,0 +1,3755 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Line breaking properties of Unicode characters. */ +/* Generated automatically by gen-uni-tables for Unicode 5.1.0. */ + +/* Copyright (C) 2000-2002, 2004, 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#define wbrkprop_header_0 16 +#define wbrkprop_header_1 15 +#define wbrkprop_header_2 7 +#define wbrkprop_header_3 511 +#define wbrkprop_header_4 127 + +typedef struct + { + int level1[15]; + int level2[3 << 9]; + unsigned char level3[110 << 7]; + } +wbrkprop_t; +static const wbrkprop_t uniwbrkprop = +{ + { + 0, 512, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1024 + }, + { + 0, 128, 256, 256, 256, 384, 512, 640, + 256, 768, 896, 1024, 1152, 1280, 1408, 1536, + -1, -1, 1664, 1792, 1920, 2048, 2176, 2304, + 2432, 2560, 2688, 2816, 2944, 3072, 3200, 3328, + 3456, 3584, 3712, 3840, 3968, 4096, 4224, 4352, + 4480, 256, 256, 256, 4608, 4736, 4864, 4992, + 5120, 5248, 5376, 5504, 5632, -1, 5760, 5888, + 6016, -1, 256, 6144, 256, 256, 6272, 6400, + 6528, 6656, 6784, 6912, -1, -1, -1, -1, + -1, 7040, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 7168, 7296, 7424, 7552, 7680, -1, -1, -1, + 7808, 7936, 8064, 8192, -1, 8320, 8448, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 8576, 256, 256, 8704, 8832, 8960, 9088, + 9216, 9344, 9472, -1, 9600, -1, -1, -1, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 9728, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 9856, 9984, + 256, 256, 10112, 10240, 10368, 10496, 10624, 10752, + 10880, 11008, 11136, 11264, -1, 11392, 11520, 11648, + 256, 11776, -1, -1, -1, -1, -1, -1, + 11904, -1, 12032, -1, 12160, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 256, 256, 256, 256, 256, 256, 12288, -1, + 12416, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 12544, 12672, 12800, -1, -1, -1, + 12928, 13056, 13184, 256, 256, 13312, 13440, 13568, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + 13696, -1, 13824, 13952, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1 + }, + { + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_LF, WBP_NEWLINE, + WBP_NEWLINE, WBP_CR, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDNUMLET, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUM, WBP_OTHER, WBP_MIDNUMLET, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_MIDLETTER, WBP_MIDNUM, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_NEWLINE, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_FORMAT, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_MIDLETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_MIDNUM, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_MIDLETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_MIDNUM, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_MIDLETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUM, WBP_MIDNUM, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_NUMERIC, + WBP_MIDNUM, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_FORMAT, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_FORMAT, + WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUM, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_EXTEND, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_FORMAT, WBP_FORMAT, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_FORMAT, + WBP_EXTEND, WBP_EXTEND, WBP_FORMAT, WBP_FORMAT, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUMLET, WBP_MIDNUMLET, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUMLET, WBP_OTHER, WBP_OTHER, WBP_MIDLETTER, + WBP_NEWLINE, WBP_NEWLINE, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, + WBP_EXTENDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUM, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTENDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_KATAKANA, + WBP_KATAKANA, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_OTHER, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_EXTEND, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_MIDNUM, WBP_OTHER, WBP_OTHER, WBP_MIDLETTER, + WBP_MIDNUM, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, + WBP_EXTENDNUMLET, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTENDNUMLET, WBP_EXTENDNUMLET, WBP_EXTENDNUMLET, + WBP_MIDNUM, WBP_OTHER, WBP_MIDNUMLET, WBP_OTHER, + WBP_MIDNUM, WBP_MIDLETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_FORMAT, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_MIDNUMLET, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_MIDNUM, WBP_OTHER, WBP_MIDNUMLET, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_MIDLETTER, WBP_MIDNUM, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTENDNUMLET, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, WBP_KATAKANA, + WBP_KATAKANA, WBP_KATAKANA, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_OTHER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_OTHER, + WBP_OTHER, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_OTHER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_OTHER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_OTHER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, WBP_ALETTER, + WBP_OTHER, WBP_OTHER, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, WBP_NUMERIC, + WBP_OTHER, WBP_FORMAT, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, WBP_FORMAT, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, WBP_EXTEND, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER, + WBP_OTHER, WBP_OTHER, WBP_OTHER, WBP_OTHER + } +}; diff --git a/lib/uniwbrk/wbrktable.c b/lib/uniwbrk/wbrktable.c new file mode 100644 index 00000000..81a2323e --- /dev/null +++ b/lib/uniwbrk/wbrktable.c @@ -0,0 +1,52 @@ +/* Word break auxiliary table. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "wbrktable.h" + +/* This table contains the following rules (see UAX #29): + + last current + + ALetter × ALetter (WB5) + ALetter × Numeric (WB9) + Numeric × ALetter (WB10) + Numeric × Numeric (WB8) + Katakana × Katakana (WB13) + (ALetter | Numeric | Katakana) × ExtendNumLet (WB13a) + ExtendNumLet × ExtendNumLet (WB13a) + ExtendNumLet × (ALetter | Numeric | Katakana) (WB13b) + */ + +const unsigned char uniwbrk_table[10][8] = +{ /* current: OTHER MIDNUMLET NUMERIC */ + /* KATAKANA MIDLETTER EXTENDNUMLET */ + /* ALETTER MIDNUM */ + /* last */ + /* WBP_OTHER */ { 1, 1, 1, 1, 1, 1, 1, 1 }, + /* WBP_KATAKANA */ { 1, 0, 1, 1, 1, 1, 1, 0 }, + /* WBP_ALETTER */ { 1, 1, 0, 1, 1, 1, 0, 0 }, + /* WBP_MIDNUMLET */ { 1, 1, 1, 1, 1, 1, 1, 1 }, + /* WBP_MIDLETTER */ { 1, 1, 1, 1, 1, 1, 1, 1 }, + /* WBP_MIDNUM */ { 1, 1, 1, 1, 1, 1, 1, 1 }, + /* WBP_NUMERIC */ { 1, 1, 0, 1, 1, 1, 0, 0 }, + /* WBP_EXTENDNUMLET */ { 1, 0, 0, 1, 1, 1, 0, 0 }, + /* WBP_EXTEND */ { 1, 1, 1, 1, 1, 1, 1, 1 }, + /* WBP_FORMAT */ { 1, 1, 1, 1, 1, 1, 1, 1 } +}; diff --git a/lib/uniwbrk/wbrktable.h b/lib/uniwbrk/wbrktable.h new file mode 100644 index 00000000..14efee90 --- /dev/null +++ b/lib/uniwbrk/wbrktable.h @@ -0,0 +1,18 @@ +/* Word break auxiliary table. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +extern const unsigned char uniwbrk_table[10][8]; diff --git a/lib/uniwbrk/wordbreak-property.c b/lib/uniwbrk/wordbreak-property.c new file mode 100644 index 00000000..4d0a212d --- /dev/null +++ b/lib/uniwbrk/wordbreak-property.c @@ -0,0 +1,44 @@ +/* Word break property. + Copyright (C) 2001-2003, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwbrk.h" + +#include "wbrkprop.h" + +int +uc_wordbreak_property (ucs4_t uc) +{ + unsigned int index1 = uc >> wbrkprop_header_0; + if (index1 < wbrkprop_header_1) + { + int lookup1 = uniwbrkprop.level1[index1]; + if (lookup1 >= 0) + { + unsigned int index2 = (uc >> wbrkprop_header_2) & wbrkprop_header_3; + int lookup2 = uniwbrkprop.level2[lookup1 + index2]; + if (lookup2 >= 0) + { + unsigned int index3 = uc & wbrkprop_header_4; + return uniwbrkprop.level3[lookup2 + index3]; + } + } + } + return WBP_OTHER; +} diff --git a/lib/uniwidth.h b/lib/uniwidth.h new file mode 100644 index 00000000..4f867b33 --- /dev/null +++ b/lib/uniwidth.h @@ -0,0 +1,64 @@ +/* Display width functions. + Copyright (C) 2001-2002, 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#ifndef _UNIWIDTH_H +#define _UNIWIDTH_H + +#include "unitypes.h" + +/* Get size_t. */ +#include + +/* Get locale_charset() declaration. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Display width. */ + +/* These functions are locale dependent. The encoding argument identifies + the encoding (e.g. "ISO-8859-2" for Polish). */ + +/* Determine number of column positions required for UC. */ +extern int + uc_width (ucs4_t uc, const char *encoding); + +/* Determine number of column positions required for first N units + (or fewer if S ends before this) in S. */ +extern int + u8_width (const uint8_t *s, size_t n, const char *encoding); +extern int + u16_width (const uint16_t *s, size_t n, const char *encoding); +extern int + u32_width (const uint32_t *s, size_t n, const char *encoding); + +/* Determine number of column positions required for S. */ +extern int + u8_strwidth (const uint8_t *s, const char *encoding); +extern int + u16_strwidth (const uint16_t *s, const char *encoding); +extern int + u32_strwidth (const uint32_t *s, const char *encoding); + + +#ifdef __cplusplus +} +#endif + +#endif /* _UNIWIDTH_H */ diff --git a/lib/uniwidth/cjk.h b/lib/uniwidth/cjk.h new file mode 100644 index 00000000..6124e1a4 --- /dev/null +++ b/lib/uniwidth/cjk.h @@ -0,0 +1,37 @@ +/* Test for CJK encoding. + Copyright (C) 2001-2002, 2005-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include "streq.h" + +static int +is_cjk_encoding (const char *encoding) +{ + if (0 + /* Legacy Japanese encodings */ + || STREQ (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0) + /* Legacy Chinese encodings */ + || STREQ (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) + || STREQ (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0) + || STREQ (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0) + || STREQ (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0) + /* Legacy Korean encodings */ + || STREQ (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) + || STREQ (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0) + || STREQ (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0)) + return 1; + return 0; +} diff --git a/lib/uniwidth/u16-strwidth.c b/lib/uniwidth/u16-strwidth.c new file mode 100644 index 00000000..e938bd25 --- /dev/null +++ b/lib/uniwidth/u16-strwidth.c @@ -0,0 +1,29 @@ +/* Determine display width of UTF-16 string. + Copyright (C) 2001-2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwidth.h" + +#include "unistr.h" + +int +u16_strwidth (const uint16_t *s, const char *encoding) +{ + return u16_width (s, u16_strlen (s), encoding); +} diff --git a/lib/uniwidth/u16-width.c b/lib/uniwidth/u16-width.c new file mode 100644 index 00000000..b866b3c9 --- /dev/null +++ b/lib/uniwidth/u16-width.c @@ -0,0 +1,47 @@ +/* Determine display width of UTF-16 string. + Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwidth.h" + +#include "unistr.h" + +int +u16_width (const uint16_t *s, size_t n, const char *encoding) +{ + const uint16_t *s_end = s + n; + int width = 0; + + while (s < s_end) + { + ucs4_t uc; + int w; + + s += u16_mbtouc_unsafe (&uc, s, s_end - s); + + if (uc == 0) + break; /* end of string reached */ + + w = uc_width (uc, encoding); + if (w >= 0) /* ignore control characters in the string */ + width += w; + } + + return width; +} diff --git a/lib/uniwidth/u32-strwidth.c b/lib/uniwidth/u32-strwidth.c new file mode 100644 index 00000000..ee4eb4a5 --- /dev/null +++ b/lib/uniwidth/u32-strwidth.c @@ -0,0 +1,29 @@ +/* Determine display width of UTF-32 string. + Copyright (C) 2001-2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwidth.h" + +#include "unistr.h" + +int +u32_strwidth (const uint32_t *s, const char *encoding) +{ + return u32_width (s, u32_strlen (s), encoding); +} diff --git a/lib/uniwidth/u32-width.c b/lib/uniwidth/u32-width.c new file mode 100644 index 00000000..f928fa45 --- /dev/null +++ b/lib/uniwidth/u32-width.c @@ -0,0 +1,43 @@ +/* Determine display width of UTF-32 string. + Copyright (C) 2001-2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwidth.h" + +int +u32_width (const uint32_t *s, size_t n, const char *encoding) +{ + const uint32_t *s_end = s + n; + int width = 0; + + while (s < s_end) + { + ucs4_t uc = *s++; + int w; + + if (uc == 0) + break; /* end of string reached */ + + w = uc_width (uc, encoding); + if (w >= 0) /* ignore control characters in the string */ + width += w; + } + + return width; +} diff --git a/lib/uniwidth/u8-strwidth.c b/lib/uniwidth/u8-strwidth.c new file mode 100644 index 00000000..961f26b5 --- /dev/null +++ b/lib/uniwidth/u8-strwidth.c @@ -0,0 +1,29 @@ +/* Determine display width of UTF-8 string. + Copyright (C) 2001-2002, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwidth.h" + +#include "unistr.h" + +int +u8_strwidth (const uint8_t *s, const char *encoding) +{ + return u8_width (s, u8_strlen (s), encoding); +} diff --git a/lib/uniwidth/u8-width.c b/lib/uniwidth/u8-width.c new file mode 100644 index 00000000..ad0d49d8 --- /dev/null +++ b/lib/uniwidth/u8-width.c @@ -0,0 +1,47 @@ +/* Determine display width of UTF-8 string. + Copyright (C) 2001-2002, 2006-2007 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwidth.h" + +#include "unistr.h" + +int +u8_width (const uint8_t *s, size_t n, const char *encoding) +{ + const uint8_t *s_end = s + n; + int width = 0; + + while (s < s_end) + { + ucs4_t uc; + int w; + + s += u8_mbtouc_unsafe (&uc, s, s_end - s); + + if (uc == 0) + break; /* end of string reached */ + + w = uc_width (uc, encoding); + if (w >= 0) /* ignore control characters in the string */ + width += w; + } + + return width; +} diff --git a/lib/uniwidth/width.c b/lib/uniwidth/width.c new file mode 100644 index 00000000..25ff0c73 --- /dev/null +++ b/lib/uniwidth/width.c @@ -0,0 +1,359 @@ +/* Determine display width of Unicode character. + Copyright (C) 2001-2002, 2006-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2002. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "uniwidth.h" + +#include "cjk.h" + +/* + * Non-spacing attribute table. + * Consists of: + * - Non-spacing characters; generated from PropList.txt or + * "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt" + * - Format control characters; generated from + * "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt" + * - Zero width characters; generated from + * "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt" + */ +static const unsigned char nonspacing_table_data[26*64] = { + /* 0x0000-0x01ff */ + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */ + 0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */ + /* 0x0200-0x03ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */ + /* 0x0400-0x05ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */ + 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */ + 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */ + 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */ + /* 0x0600-0x07ff */ + 0x0f, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */ + 0x00, 0xf8, 0xff, 0x7f, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */ + 0x00, 0x00, 0xc0, 0xff, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */ + 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */ + 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */ + 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */ + /* 0x0800-0x09ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0800-0x083f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08c0-0x08ff */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0900-0x093f */ + 0xfe, 0x21, 0x1e, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */ + 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */ + /* 0x0a00-0x0bff */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */ + 0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */ + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */ + 0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */ + 0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */ + 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */ + /* 0x0c00-0x0dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */ + 0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */ + 0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */ + 0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */ + 0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */ + /* 0x0e00-0x0fff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */ + 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */ + 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */ + 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */ + 0xdf, 0x00, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */ + 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */ + /* 0x1000-0x11ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */ + 0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */ + 0x64, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */ + /* 0x1200-0x13ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */ + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */ + /* 0x1600-0x17ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */ + 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */ + 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */ + 0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */ + /* 0x1800-0x19ff */ + 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */ + 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */ + /* 0x1a00-0x1bff */ + 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a40-0x1a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a80-0x1abf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */ + 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */ + 0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */ + 0x03, 0x00, 0x00, 0x00, 0x3c, 0x03, 0x00, 0x00, /* 0x1b80-0x1bbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc0-0x1bff */ + /* 0x1c00-0x1dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1cc0-0x1cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */ + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xc0, /* 0x1dc0-0x1dff */ + /* 0x2000-0x21ff */ + 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */ + 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */ + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */ + /* 0x2c00-0x2dff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2cc0-0x2cff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d40-0x2d7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */ + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */ + /* 0x3000-0x31ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, /* 0x3000-0x303f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */ + 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */ + /* 0xa600-0xa7ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x30, /* 0xa640-0xa67f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa6c0-0xa6ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */ + /* 0xa800-0xa9ff */ + 0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */ + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa8c0-0xa8ff */ + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */ + 0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa980-0xa9bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */ + /* 0xaa00-0xabff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */ + 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa40-0xaa7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa80-0xaabf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaac0-0xaaff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xabc0-0xabff */ + /* 0xfa00-0xfbff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */ + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */ + /* 0xfe00-0xffff */ + 0xff, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, /* 0xfe00-0xfe3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */ + /* 0x10000-0x101ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */ + /* 0x10a00-0x10bff */ + 0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */ + /* 0x1d000-0x1d1ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */ + 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xf8, /* 0x1d140-0x1d17f */ + 0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */ + /* 0x1d200-0x1d3ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */ + 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* 0x1d3c0-0x1d3ff */ +}; +static const signed char nonspacing_table_ind[240] = { + 0, 1, 2, 3, 4, 5, 6, 7, /* 0x0000-0x0fff */ + 8, 9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */ + 14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */ + 16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */ + -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */ + -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */ + 22, -1, -1, -1, -1, 23, -1, -1, /* 0x10000-0x10fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */ + -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */ + 24, 25, -1, -1, -1, -1, -1, -1 /* 0x1d000-0x1dfff */ +}; + +/* Determine number of column positions required for UC. */ +int +uc_width (ucs4_t uc, const char *encoding) +{ + /* Test for non-spacing or control character. */ + if ((uc >> 9) < 240) + { + int ind = nonspacing_table_ind[uc >> 9]; + if (ind >= 0) + if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1) + { + if (uc > 0 && uc < 0xa0) + return -1; + else + return 0; + } + } + else if ((uc >> 9) == (0xe0000 >> 9)) + { + if (uc >= 0xe0100) + { + if (uc <= 0xe01ef) + return 0; + } + else + { + if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001) + return 0; + } + } + /* Test for double-width character. + * Generated from "grep '^....;[WF]' EastAsianWidth.txt" + * and "grep '^....;[^WF]' EastAsianWidth.txt" + */ + if (uc >= 0x1100 + && ((uc < 0x1160) /* Hangul Jamo */ + || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */ + || (uc >= 0x2e80 && uc < 0xa4d0 /* CJK ... Yi */ + && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00)) + || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */ + || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */ + || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */ + || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */ + || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */ + || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */ + || (uc >= 0x20000 && uc <= 0x2a6d6) /* CJK */ + || (uc >= 0x2f800 && uc <= 0x2fa1d) /* CJK Compatibility Ideographs */ + ) ) + return 2; + /* In ancient CJK encodings, Cyrillic and most other characters are + double-width as well. */ + if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9 + && is_cjk_encoding (encoding)) + return 2; + return 1; +} diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c new file mode 100644 index 00000000..c620b4c0 --- /dev/null +++ b/lib/vasnprintf.c @@ -0,0 +1,5487 @@ +/* vsprintf with automatic memory allocation. + Copyright (C) 1999, 2002-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* This file can be parametrized with the following macros: + VASNPRINTF The name of the function being defined. + FCHAR_T The element type of the format string. + DCHAR_T The element type of the destination (result) string. + FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters + in the format string are ASCII. MUST be set if + FCHAR_T and DCHAR_T are not the same type. + DIRECTIVE Structure denoting a format directive. + Depends on FCHAR_T. + DIRECTIVES Structure denoting the set of format directives of a + format string. Depends on FCHAR_T. + PRINTF_PARSE Function that parses a format string. + Depends on FCHAR_T. + DCHAR_CPY memcpy like function for DCHAR_T[] arrays. + DCHAR_SET memset like function for DCHAR_T[] arrays. + DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. + SNPRINTF The system's snprintf (or similar) function. + This may be either snprintf or swprintf. + TCHAR_T The element type of the argument and result string + of the said SNPRINTF function. This may be either + char or wchar_t. The code exploits that + sizeof (TCHAR_T) | sizeof (DCHAR_T) and + alignof (TCHAR_T) <= alignof (DCHAR_T). + DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. + DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. + DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. + DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. + DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ + +/* Tell glibc's to provide a prototype for snprintf(). + This must come before because may include + , and once has been included, it's too late. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif + +#ifndef VASNPRINTF +# include +#endif +#ifndef IN_LIBINTL +# include +#endif + +/* Specification. */ +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# include "vasnwprintf.h" +# else +# include "vasnprintf.h" +# endif +#endif + +#include /* localeconv() */ +#include /* snprintf(), sprintf() */ +#include /* abort(), malloc(), realloc(), free() */ +#include /* memcpy(), strlen() */ +#include /* errno */ +#include /* CHAR_BIT */ +#include /* DBL_MAX_EXP, LDBL_MAX_EXP */ +#if HAVE_NL_LANGINFO +# include +#endif +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# include "wprintf-parse.h" +# else +# include "printf-parse.h" +# endif +#endif + +/* Checked size_t computations. */ +#include "xsize.h" + +#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL +# include +# include "float+.h" +#endif + +#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnand-nolibm.h" +#endif + +#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnanl-nolibm.h" +# include "fpucw.h" +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnand-nolibm.h" +# include "printf-frexp.h" +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL +# include +# include "isnanl-nolibm.h" +# include "printf-frexpl.h" +# include "fpucw.h" +#endif + +/* Default parameters. */ +#ifndef VASNPRINTF +# if WIDE_CHAR_VERSION +# define VASNPRINTF vasnwprintf +# define FCHAR_T wchar_t +# define DCHAR_T wchar_t +# define TCHAR_T wchar_t +# define DCHAR_IS_TCHAR 1 +# define DIRECTIVE wchar_t_directive +# define DIRECTIVES wchar_t_directives +# define PRINTF_PARSE wprintf_parse +# define DCHAR_CPY wmemcpy +# define DCHAR_SET wmemset +# else +# define VASNPRINTF vasnprintf +# define FCHAR_T char +# define DCHAR_T char +# define TCHAR_T char +# define DCHAR_IS_TCHAR 1 +# define DIRECTIVE char_directive +# define DIRECTIVES char_directives +# define PRINTF_PARSE printf_parse +# define DCHAR_CPY memcpy +# define DCHAR_SET memset +# endif +#endif +#if WIDE_CHAR_VERSION + /* TCHAR_T is wchar_t. */ +# define USE_SNPRINTF 1 +# if HAVE_DECL__SNWPRINTF + /* On Windows, the function swprintf() has a different signature than + on Unix; we use the _snwprintf() function instead. */ +# define SNPRINTF _snwprintf +# else + /* Unix. */ +# define SNPRINTF swprintf +# endif +#else + /* TCHAR_T is char. */ + /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. + But don't use it on BeOS, since BeOS snprintf produces no output if the + size argument is >= 0x3000000. + Also don't use it on Linux libc5, since there snprintf with size = 1 + writes any output without bounds, like sprintf. */ +# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) +# define USE_SNPRINTF 1 +# else +# define USE_SNPRINTF 0 +# endif +# if HAVE_DECL__SNPRINTF + /* Windows. */ +# define SNPRINTF _snprintf +# else + /* Unix. */ +# define SNPRINTF snprintf + /* Here we need to call the native snprintf, not rpl_snprintf. */ +# undef snprintf +# endif +#endif +/* Here we need to call the native sprintf, not rpl_sprintf. */ +#undef sprintf + +/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" + warnings in this file. Use -Dlint to suppress them. */ +#ifdef lint +# define IF_LINT(Code) Code +#else +# define IF_LINT(Code) /* empty */ +#endif + +/* Avoid some warnings from "gcc -Wshadow". + This file doesn't use the exp() and remainder() functions. */ +#undef exp +#define exp expo +#undef remainder +#define remainder rem + +#if !USE_SNPRINTF && !WIDE_CHAR_VERSION +# if (HAVE_STRNLEN && !defined _AIX) +# define local_strnlen strnlen +# else +# ifndef local_strnlen_defined +# define local_strnlen_defined 1 +static size_t +local_strnlen (const char *string, size_t maxlen) +{ + const char *end = memchr (string, '\0', maxlen); + return end ? (size_t) (end - string) : maxlen; +} +# endif +# endif +#endif + +#if (!USE_SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T && (WIDE_CHAR_VERSION || DCHAR_IS_TCHAR) +# if HAVE_WCSLEN +# define local_wcslen wcslen +# else + /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid + a dependency towards this library, here is a local substitute. + Define this substitute only once, even if this file is included + twice in the same compilation unit. */ +# ifndef local_wcslen_defined +# define local_wcslen_defined 1 +static size_t +local_wcslen (const wchar_t *s) +{ + const wchar_t *ptr; + + for (ptr = s; *ptr != (wchar_t) 0; ptr++) + ; + return ptr - s; +} +# endif +# endif +#endif + +#if !USE_SNPRINTF && HAVE_WCHAR_T && WIDE_CHAR_VERSION +# if HAVE_WCSNLEN +# define local_wcsnlen wcsnlen +# else +# ifndef local_wcsnlen_defined +# define local_wcsnlen_defined 1 +static size_t +local_wcsnlen (const wchar_t *s, size_t maxlen) +{ + const wchar_t *ptr; + + for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) + ; + return ptr - s; +} +# endif +# endif +#endif + +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL +/* Determine the decimal-point character according to the current locale. */ +# ifndef decimal_point_char_defined +# define decimal_point_char_defined 1 +static char +decimal_point_char () +{ + const char *point; + /* Determine it in a multithread-safe way. We know nl_langinfo is + multithread-safe on glibc systems, but is not required to be multithread- + safe by POSIX. sprintf(), however, is multithread-safe. localeconv() + is rarely multithread-safe. */ +# if HAVE_NL_LANGINFO && __GLIBC__ + point = nl_langinfo (RADIXCHAR); +# elif 1 + char pointbuf[5]; + sprintf (pointbuf, "%#.0f", 1.0); + point = &pointbuf[1]; +# else + point = localeconv () -> decimal_point; +# endif + /* The decimal point is always a single byte: either '.' or ','. */ + return (point[0] != '\0' ? point[0] : '.'); +} +# endif +#endif + +#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL + +/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ +static int +is_infinite_or_zero (double x) +{ + return isnand (x) || x + x == x; +} + +#endif + +#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL + +/* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ +static int +is_infinite_or_zerol (long double x) +{ + return isnanl (x) || x + x == x; +} + +#endif + +#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL + +/* Converting 'long double' to decimal without rare rounding bugs requires + real bignums. We use the naming conventions of GNU gmp, but vastly simpler + (and slower) algorithms. */ + +typedef unsigned int mp_limb_t; +# define GMP_LIMB_BITS 32 +typedef int mp_limb_verify[2 * (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS) - 1]; + +typedef unsigned long long mp_twolimb_t; +# define GMP_TWOLIMB_BITS 64 +typedef int mp_twolimb_verify[2 * (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS) - 1]; + +/* Representation of a bignum >= 0. */ +typedef struct +{ + size_t nlimbs; + mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ +} mpn_t; + +/* Compute the product of two bignums >= 0. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +multiply (mpn_t src1, mpn_t src2, mpn_t *dest) +{ + const mp_limb_t *p1; + const mp_limb_t *p2; + size_t len1; + size_t len2; + + if (src1.nlimbs <= src2.nlimbs) + { + len1 = src1.nlimbs; + p1 = src1.limbs; + len2 = src2.nlimbs; + p2 = src2.limbs; + } + else + { + len1 = src2.nlimbs; + p1 = src2.limbs; + len2 = src1.nlimbs; + p2 = src1.limbs; + } + /* Now 0 <= len1 <= len2. */ + if (len1 == 0) + { + /* src1 or src2 is zero. */ + dest->nlimbs = 0; + dest->limbs = (mp_limb_t *) malloc (1); + } + else + { + /* Here 1 <= len1 <= len2. */ + size_t dlen; + mp_limb_t *dp; + size_t k, i, j; + + dlen = len1 + len2; + dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); + if (dp == NULL) + return NULL; + for (k = len2; k > 0; ) + dp[--k] = 0; + for (i = 0; i < len1; i++) + { + mp_limb_t digit1 = p1[i]; + mp_twolimb_t carry = 0; + for (j = 0; j < len2; j++) + { + mp_limb_t digit2 = p2[j]; + carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; + carry += dp[i + j]; + dp[i + j] = (mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; + } + dp[i + len2] = (mp_limb_t) carry; + } + /* Normalise. */ + while (dlen > 0 && dp[dlen - 1] == 0) + dlen--; + dest->nlimbs = dlen; + dest->limbs = dp; + } + return dest->limbs; +} + +/* Compute the quotient of a bignum a >= 0 and a bignum b > 0. + a is written as a = q * b + r with 0 <= r < b. q is the quotient, r + the remainder. + Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, + q is incremented. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +divide (mpn_t a, mpn_t b, mpn_t *q) +{ + /* Algorithm: + First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] + with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). + If m=n=1, perform a single-precision division: + r:=0, j:=m, + while j>0 do + {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = + = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r=n>1, perform a multiple-precision division: + We have a/b < beta^(m-n+1). + s:=intDsize-1-(highest bit in b[n-1]), 0<=s=beta/2. + For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} + Compute q* : + q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). + In case of overflow (q* >= beta) set q* := beta-1. + Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] + and c3 := b[n-2] * q*. + {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow + occurred. Furthermore 0 <= c3 < beta^2. + If there was overflow and + r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, + the next test can be skipped.} + While c3 > c2, {Here 0 <= c2 < c3 < beta^2} + Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. + If q* > 0: + Put r := r - b * q* * beta^j. In detail: + [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. + hence: u:=0, for i:=0 to n-1 do + u := u + q* * b[i], + r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), + u:=u div beta (+ 1, if carry in subtraction) + r[n+j]:=r[n+j]-u. + {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 + < q* + 1 <= beta, + the carry u does not overflow.} + If a negative carry occurs, put q* := q* - 1 + and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. + Set q[j] := q*. + Normalise [q[m-n],..,q[0]]; this yields the quotient q. + Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the + rest r. + The room for q[j] can be allocated at the memory location of r[n+j]. + Finally, round-to-even: + Shift r left by 1 bit. + If r > b or if r = b and q[0] is odd, q := q+1. + */ + const mp_limb_t *a_ptr = a.limbs; + size_t a_len = a.nlimbs; + const mp_limb_t *b_ptr = b.limbs; + size_t b_len = b.nlimbs; + mp_limb_t *roomptr; + mp_limb_t *tmp_roomptr = NULL; + mp_limb_t *q_ptr; + size_t q_len; + mp_limb_t *r_ptr; + size_t r_len; + + /* Allocate room for a_len+2 digits. + (Need a_len+1 digits for the real division and 1 more digit for the + final rounding of q.) */ + roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); + if (roomptr == NULL) + return NULL; + + /* Normalise a. */ + while (a_len > 0 && a_ptr[a_len - 1] == 0) + a_len--; + + /* Normalise b. */ + for (;;) + { + if (b_len == 0) + /* Division by zero. */ + abort (); + if (b_ptr[b_len - 1] == 0) + b_len--; + else + break; + } + + /* Here m = a_len >= 0 and n = b_len > 0. */ + + if (a_len < b_len) + { + /* m beta^(m-2) <= a/b < beta^m */ + r_ptr = roomptr; + q_ptr = roomptr + 1; + { + mp_limb_t den = b_ptr[0]; + mp_limb_t remainder = 0; + const mp_limb_t *sourceptr = a_ptr + a_len; + mp_limb_t *destptr = q_ptr + a_len; + size_t count; + for (count = a_len; count > 0; count--) + { + mp_twolimb_t num = + ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; + *--destptr = num / den; + remainder = num % den; + } + /* Normalise and store r. */ + if (remainder > 0) + { + r_ptr[0] = remainder; + r_len = 1; + } + else + r_len = 0; + /* Normalise q. */ + q_len = a_len; + if (q_ptr[q_len - 1] == 0) + q_len--; + } + } + else + { + /* n>1: multiple precision division. + beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> + beta^(m-n-1) <= a/b < beta^(m-n+1). */ + /* Determine s. */ + size_t s; + { + mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ + s = 31; + if (msd >= 0x10000) + { + msd = msd >> 16; + s -= 16; + } + if (msd >= 0x100) + { + msd = msd >> 8; + s -= 8; + } + if (msd >= 0x10) + { + msd = msd >> 4; + s -= 4; + } + if (msd >= 0x4) + { + msd = msd >> 2; + s -= 2; + } + if (msd >= 0x2) + { + msd = msd >> 1; + s -= 1; + } + } + /* 0 <= s < GMP_LIMB_BITS. + Copy b, shifting it left by s bits. */ + if (s > 0) + { + tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); + if (tmp_roomptr == NULL) + { + free (roomptr); + return NULL; + } + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = tmp_roomptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + /* accu must be zero, since that was how s was determined. */ + if (accu != 0) + abort (); + } + b_ptr = tmp_roomptr; + } + /* Copy a, shifting it left by s bits, yields r. + Memory layout: + At the beginning: r = roomptr[0..a_len], + at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ + r_ptr = roomptr; + if (s == 0) + { + memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); + r_ptr[a_len] = 0; + } + else + { + const mp_limb_t *sourceptr = a_ptr; + mp_limb_t *destptr = r_ptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = a_len; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + *destptr++ = (mp_limb_t) accu; + } + q_ptr = roomptr + b_len; + q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ + { + size_t j = a_len - b_len; /* m-n */ + mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ + mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ + mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ + ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; + /* Division loop, traversed m-n+1 times. + j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ + for (;;) + { + mp_limb_t q_star; + mp_limb_t c1; + if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ + { + /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ + mp_twolimb_t num = + ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) + | r_ptr[j + b_len - 1]; + q_star = num / b_msd; + c1 = num % b_msd; + } + else + { + /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ + q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ + /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta + <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta + <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) + {<= beta !}. + If yes, jump directly to the subtraction loop. + (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta + <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ + if (r_ptr[j + b_len] > b_msd + || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) + /* r[j+n] >= b[n-1]+1 or + r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a + carry. */ + goto subtract; + } + /* q_star = q*, + c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, 0, decrease it by + b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 + this can happen only twice. */ + if (c3 > c2) + { + q_star = q_star - 1; /* q* := q* - 1 */ + if (c3 - c2 > b_msdd) + q_star = q_star - 1; /* q* := q* - 1 */ + } + } + if (q_star > 0) + subtract: + { + /* Subtract r := r - b * q* * beta^j. */ + mp_limb_t cr; + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = r_ptr + j; + mp_twolimb_t carry = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + /* Here 0 <= carry <= q*. */ + carry = + carry + + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + + (mp_limb_t) ~(*destptr); + /* Here 0 <= carry <= beta*q* + beta-1. */ + *destptr++ = ~(mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; /* <= q* */ + } + cr = (mp_limb_t) carry; + } + /* Subtract cr from r_ptr[j + b_len], then forget about + r_ptr[j + b_len]. */ + if (cr > r_ptr[j + b_len]) + { + /* Subtraction gave a carry. */ + q_star = q_star - 1; /* q* := q* - 1 */ + /* Add b back. */ + { + const mp_limb_t *sourceptr = b_ptr; + mp_limb_t *destptr = r_ptr + j; + mp_limb_t carry = 0; + size_t count; + for (count = b_len; count > 0; count--) + { + mp_limb_t source1 = *sourceptr++; + mp_limb_t source2 = *destptr; + *destptr++ = source1 + source2 + carry; + carry = + (carry + ? source1 >= (mp_limb_t) ~source2 + : source1 > (mp_limb_t) ~source2); + } + } + /* Forget about the carry and about r[j+n]. */ + } + } + /* q* is determined. Store it as q[j]. */ + q_ptr[j] = q_star; + if (j == 0) + break; + j--; + } + } + r_len = b_len; + /* Normalise q. */ + if (q_ptr[q_len - 1] == 0) + q_len--; +# if 0 /* Not needed here, since we need r only to compare it with b/2, and + b is shifted left by s bits. */ + /* Shift r right by s bits. */ + if (s > 0) + { + mp_limb_t ptr = r_ptr + r_len; + mp_twolimb_t accu = 0; + size_t count; + for (count = r_len; count > 0; count--) + { + accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; + accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); + *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); + } + } +# endif + /* Normalise r. */ + while (r_len > 0 && r_ptr[r_len - 1] == 0) + r_len--; + } + /* Compare r << 1 with b. */ + if (r_len > b_len) + goto increment_q; + { + size_t i; + for (i = b_len;;) + { + mp_limb_t r_i = + (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) + | (i < r_len ? r_ptr[i] << 1 : 0); + mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); + if (r_i > b_i) + goto increment_q; + if (r_i < b_i) + goto keep_q; + if (i == 0) + break; + i--; + } + } + if (q_len > 0 && ((q_ptr[0] & 1) != 0)) + /* q is odd. */ + increment_q: + { + size_t i; + for (i = 0; i < q_len; i++) + if (++(q_ptr[i]) != 0) + goto keep_q; + q_ptr[q_len++] = 1; + } + keep_q: + if (tmp_roomptr != NULL) + free (tmp_roomptr); + q->limbs = q_ptr; + q->nlimbs = q_len; + return roomptr; +} + +/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal + representation. + Destroys the contents of a. + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +convert_to_decimal (mpn_t a, size_t extra_zeroes) +{ + mp_limb_t *a_ptr = a.limbs; + size_t a_len = a.nlimbs; + /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ + size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); + char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); + if (c_ptr != NULL) + { + char *d_ptr = c_ptr; + for (; extra_zeroes > 0; extra_zeroes--) + *d_ptr++ = '0'; + while (a_len > 0) + { + /* Divide a by 10^9, in-place. */ + mp_limb_t remainder = 0; + mp_limb_t *ptr = a_ptr + a_len; + size_t count; + for (count = a_len; count > 0; count--) + { + mp_twolimb_t num = + ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; + *ptr = num / 1000000000; + remainder = num % 1000000000; + } + /* Store the remainder as 9 decimal digits. */ + for (count = 9; count > 0; count--) + { + *d_ptr++ = '0' + (remainder % 10); + remainder = remainder / 10; + } + /* Normalize a. */ + if (a_ptr[a_len - 1] == 0) + a_len--; + } + /* Remove leading zeroes. */ + while (d_ptr > c_ptr && d_ptr[-1] == '0') + d_ptr--; + /* But keep at least one zero. */ + if (d_ptr == c_ptr) + *d_ptr++ = '0'; + /* Terminate the string. */ + *d_ptr = '\0'; + } + return c_ptr; +} + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and >= 0: + write x as x = 2^e * m, where m is a bignum. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +decode_long_double (long double x, int *ep, mpn_t *mp) +{ + mpn_t m; + int exp; + long double y; + size_t i; + + /* Allocate memory for result. */ + m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); + if (m.limbs == NULL) + return NULL; + /* Split into exponential part and mantissa. */ + y = frexpl (x, &exp); + if (!(y >= 0.0L && y < 1.0L)) + abort (); + /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * LDBL_MANT_BIT), and the + latter is an integer. */ + /* Convert the mantissa (y * LDBL_MANT_BIT) to a sequence of limbs. + I'm not sure whether it's safe to cast a 'long double' value between + 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only + 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', + doesn't matter). */ +# if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 +# if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); + hi = (int) y; + y -= hi; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# else + { + mp_limb_t d; + y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); + d = (int) y; + y -= d; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; + } +# endif +# endif + for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + hi = (int) y; + y -= hi; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0L && y < 1.0L)) + abort (); + m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +#if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess + precision. */ + if (!(y == 0.0L)) + abort (); +#endif + /* Normalise. */ + while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) + m.nlimbs--; + *mp = m; + *ep = exp - LDBL_MANT_BIT; + return m.limbs; +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and >= 0: + write x as x = 2^e * m, where m is a bignum. + Return the allocated memory in case of success, NULL in case of memory + allocation failure. */ +static void * +decode_double (double x, int *ep, mpn_t *mp) +{ + mpn_t m; + int exp; + double y; + size_t i; + + /* Allocate memory for result. */ + m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; + m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); + if (m.limbs == NULL) + return NULL; + /* Split into exponential part and mantissa. */ + y = frexp (x, &exp); + if (!(y >= 0.0 && y < 1.0)) + abort (); + /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * DBL_MANT_BIT), and the + latter is an integer. */ + /* Convert the mantissa (y * DBL_MANT_BIT) to a sequence of limbs. + I'm not sure whether it's safe to cast a 'double' value between + 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only + 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', + doesn't matter). */ +# if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 +# if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); + hi = (int) y; + y -= hi; + if (!(y >= 0.0 && y < 1.0)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } +# else + { + mp_limb_t d; + y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); + d = (int) y; + y -= d; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; + } +# endif +# endif + for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) + { + mp_limb_t hi, lo; + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + hi = (int) y; + y -= hi; + if (!(y >= 0.0 && y < 1.0)) + abort (); + y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); + lo = (int) y; + y -= lo; + if (!(y >= 0.0 && y < 1.0)) + abort (); + m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; + } + if (!(y == 0.0)) + abort (); + /* Normalise. */ + while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) + m.nlimbs--; + *mp = m; + *ep = exp - DBL_MANT_BIT; + return m.limbs; +} + +# endif + +/* Assuming x = 2^e * m is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) +{ + int s; + size_t extra_zeroes; + unsigned int abs_n; + unsigned int abs_s; + mp_limb_t *pow5_ptr; + size_t pow5_len; + unsigned int s_limbs; + unsigned int s_bits; + mpn_t pow5; + mpn_t z; + void *z_memory; + char *digits; + + if (memory == NULL) + return NULL; + /* x = 2^e * m, hence + y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) + = round (2^s * 5^n * m). */ + s = e + n; + extra_zeroes = 0; + /* Factor out a common power of 10 if possible. */ + if (s > 0 && n > 0) + { + extra_zeroes = (s < n ? s : n); + s -= extra_zeroes; + n -= extra_zeroes; + } + /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. + Before converting to decimal, we need to compute + z = round (2^s * 5^n * m). */ + /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same + sign. 2.322 is slightly larger than log(5)/log(2). */ + abs_n = (n >= 0 ? n : -n); + abs_s = (s >= 0 ? s : -s); + pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + + abs_s / GMP_LIMB_BITS + 1) + * sizeof (mp_limb_t)); + if (pow5_ptr == NULL) + { + free (memory); + return NULL; + } + /* Initialize with 1. */ + pow5_ptr[0] = 1; + pow5_len = 1; + /* Multiply with 5^|n|. */ + if (abs_n > 0) + { + static mp_limb_t const small_pow5[13 + 1] = + { + 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, + 48828125, 244140625, 1220703125 + }; + unsigned int n13; + for (n13 = 0; n13 <= abs_n; n13 += 13) + { + mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; + size_t j; + mp_twolimb_t carry = 0; + for (j = 0; j < pow5_len; j++) + { + mp_limb_t digit2 = pow5_ptr[j]; + carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; + pow5_ptr[j] = (mp_limb_t) carry; + carry = carry >> GMP_LIMB_BITS; + } + if (carry > 0) + pow5_ptr[pow5_len++] = (mp_limb_t) carry; + } + } + s_limbs = abs_s / GMP_LIMB_BITS; + s_bits = abs_s % GMP_LIMB_BITS; + if (n >= 0 ? s >= 0 : s <= 0) + { + /* Multiply with 2^|s|. */ + if (s_bits > 0) + { + mp_limb_t *ptr = pow5_ptr; + mp_twolimb_t accu = 0; + size_t count; + for (count = pow5_len; count > 0; count--) + { + accu += (mp_twolimb_t) *ptr << s_bits; + *ptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + if (accu > 0) + { + *ptr = (mp_limb_t) accu; + pow5_len++; + } + } + if (s_limbs > 0) + { + size_t count; + for (count = pow5_len; count > 0;) + { + count--; + pow5_ptr[s_limbs + count] = pow5_ptr[count]; + } + for (count = s_limbs; count > 0;) + { + count--; + pow5_ptr[count] = 0; + } + pow5_len += s_limbs; + } + pow5.limbs = pow5_ptr; + pow5.nlimbs = pow5_len; + if (n >= 0) + { + /* Multiply m with pow5. No division needed. */ + z_memory = multiply (m, pow5, &z); + } + else + { + /* Divide m by pow5 and round. */ + z_memory = divide (m, pow5, &z); + } + } + else + { + pow5.limbs = pow5_ptr; + pow5.nlimbs = pow5_len; + if (n >= 0) + { + /* n >= 0, s < 0. + Multiply m with pow5, then divide by 2^|s|. */ + mpn_t numerator; + mpn_t denominator; + void *tmp_memory; + tmp_memory = multiply (m, pow5, &numerator); + if (tmp_memory == NULL) + { + free (pow5_ptr); + free (memory); + return NULL; + } + /* Construct 2^|s|. */ + { + mp_limb_t *ptr = pow5_ptr + pow5_len; + size_t i; + for (i = 0; i < s_limbs; i++) + ptr[i] = 0; + ptr[s_limbs] = (mp_limb_t) 1 << s_bits; + denominator.limbs = ptr; + denominator.nlimbs = s_limbs + 1; + } + z_memory = divide (numerator, denominator, &z); + free (tmp_memory); + } + else + { + /* n < 0, s > 0. + Multiply m with 2^s, then divide by pow5. */ + mpn_t numerator; + mp_limb_t *num_ptr; + num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) + * sizeof (mp_limb_t)); + if (num_ptr == NULL) + { + free (pow5_ptr); + free (memory); + return NULL; + } + { + mp_limb_t *destptr = num_ptr; + { + size_t i; + for (i = 0; i < s_limbs; i++) + *destptr++ = 0; + } + if (s_bits > 0) + { + const mp_limb_t *sourceptr = m.limbs; + mp_twolimb_t accu = 0; + size_t count; + for (count = m.nlimbs; count > 0; count--) + { + accu += (mp_twolimb_t) *sourceptr++ << s_bits; + *destptr++ = (mp_limb_t) accu; + accu = accu >> GMP_LIMB_BITS; + } + if (accu > 0) + *destptr++ = (mp_limb_t) accu; + } + else + { + const mp_limb_t *sourceptr = m.limbs; + size_t count; + for (count = m.nlimbs; count > 0; count--) + *destptr++ = *sourceptr++; + } + numerator.limbs = num_ptr; + numerator.nlimbs = destptr - num_ptr; + } + z_memory = divide (numerator, pow5, &z); + free (num_ptr); + } + } + free (pow5_ptr); + free (memory); + + /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ + + if (z_memory == NULL) + return NULL; + digits = convert_to_decimal (z, extra_zeroes); + free (z_memory); + return digits; +} + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_long_double (long double x, int n) +{ + int e IF_LINT(= 0); + mpn_t m; + void *memory = decode_long_double (x, &e, &m); + return scale10_round_decimal_decoded (e, m, memory, n); +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and >= 0, and n is an integer: + Returns the decimal representation of round (x * 10^n). + Return the allocated memory - containing the decimal digits in low-to-high + order, terminated with a NUL character - in case of success, NULL in case + of memory allocation failure. */ +static char * +scale10_round_decimal_double (double x, int n) +{ + int e IF_LINT(= 0); + mpn_t m; + void *memory = decode_double (x, &e, &m); + return scale10_round_decimal_decoded (e, m, memory, n); +} + +# endif + +# if NEED_PRINTF_LONG_DOUBLE + +/* Assuming x is finite and > 0: + Return an approximation for n with 10^n <= x < 10^(n+1). + The approximation is usually the right n, but may be off by 1 sometimes. */ +static int +floorlog10l (long double x) +{ + int exp; + long double y; + double z; + double l; + + /* Split into exponential part and mantissa. */ + y = frexpl (x, &exp); + if (!(y >= 0.0L && y < 1.0L)) + abort (); + if (y == 0.0L) + return INT_MIN; + if (y < 0.5L) + { + while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) + { + y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); + exp -= GMP_LIMB_BITS; + } + if (y < (1.0L / (1 << 16))) + { + y *= 1.0L * (1 << 16); + exp -= 16; + } + if (y < (1.0L / (1 << 8))) + { + y *= 1.0L * (1 << 8); + exp -= 8; + } + if (y < (1.0L / (1 << 4))) + { + y *= 1.0L * (1 << 4); + exp -= 4; + } + if (y < (1.0L / (1 << 2))) + { + y *= 1.0L * (1 << 2); + exp -= 2; + } + if (y < (1.0L / (1 << 1))) + { + y *= 1.0L * (1 << 1); + exp -= 1; + } + } + if (!(y >= 0.5L && y < 1.0L)) + abort (); + /* Compute an approximation for l = log2(x) = exp + log2(y). */ + l = exp; + z = y; + if (z < 0.70710678118654752444) + { + z *= 1.4142135623730950488; + l -= 0.5; + } + if (z < 0.8408964152537145431) + { + z *= 1.1892071150027210667; + l -= 0.25; + } + if (z < 0.91700404320467123175) + { + z *= 1.0905077326652576592; + l -= 0.125; + } + if (z < 0.9576032806985736469) + { + z *= 1.0442737824274138403; + l -= 0.0625; + } + /* Now 0.95 <= z <= 1.01. */ + z = 1 - z; + /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) + Four terms are enough to get an approximation with error < 10^-7. */ + l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); + /* Finally multiply with log(2)/log(10), yields an approximation for + log10(x). */ + l *= 0.30102999566398119523; + /* Round down to the next integer. */ + return (int) l + (l < 0 ? -1 : 0); +} + +# endif + +# if NEED_PRINTF_DOUBLE + +/* Assuming x is finite and > 0: + Return an approximation for n with 10^n <= x < 10^(n+1). + The approximation is usually the right n, but may be off by 1 sometimes. */ +static int +floorlog10 (double x) +{ + int exp; + double y; + double z; + double l; + + /* Split into exponential part and mantissa. */ + y = frexp (x, &exp); + if (!(y >= 0.0 && y < 1.0)) + abort (); + if (y == 0.0) + return INT_MIN; + if (y < 0.5) + { + while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) + { + y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); + exp -= GMP_LIMB_BITS; + } + if (y < (1.0 / (1 << 16))) + { + y *= 1.0 * (1 << 16); + exp -= 16; + } + if (y < (1.0 / (1 << 8))) + { + y *= 1.0 * (1 << 8); + exp -= 8; + } + if (y < (1.0 / (1 << 4))) + { + y *= 1.0 * (1 << 4); + exp -= 4; + } + if (y < (1.0 / (1 << 2))) + { + y *= 1.0 * (1 << 2); + exp -= 2; + } + if (y < (1.0 / (1 << 1))) + { + y *= 1.0 * (1 << 1); + exp -= 1; + } + } + if (!(y >= 0.5 && y < 1.0)) + abort (); + /* Compute an approximation for l = log2(x) = exp + log2(y). */ + l = exp; + z = y; + if (z < 0.70710678118654752444) + { + z *= 1.4142135623730950488; + l -= 0.5; + } + if (z < 0.8408964152537145431) + { + z *= 1.1892071150027210667; + l -= 0.25; + } + if (z < 0.91700404320467123175) + { + z *= 1.0905077326652576592; + l -= 0.125; + } + if (z < 0.9576032806985736469) + { + z *= 1.0442737824274138403; + l -= 0.0625; + } + /* Now 0.95 <= z <= 1.01. */ + z = 1 - z; + /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) + Four terms are enough to get an approximation with error < 10^-7. */ + l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); + /* Finally multiply with log(2)/log(10), yields an approximation for + log10(x). */ + l *= 0.30102999566398119523; + /* Round down to the next integer. */ + return (int) l + (l < 0 ? -1 : 0); +} + +# endif + +/* Tests whether a string of digits consists of exactly PRECISION zeroes and + a single '1' digit. */ +static int +is_borderline (const char *digits, size_t precision) +{ + for (; precision > 0; precision--, digits++) + if (*digits != '0') + return 0; + if (*digits != '1') + return 0; + digits++; + return *digits == '\0'; +} + +#endif + +DCHAR_T * +VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, + const FCHAR_T *format, va_list args) +{ + DIRECTIVES d; + arguments a; + + if (PRINTF_PARSE (format, &d, &a) < 0) + /* errno is already set. */ + return NULL; + +#define CLEANUP() \ + free (d.dir); \ + if (a.arg) \ + free (a.arg); + + if (PRINTF_FETCHARGS (args, &a) < 0) + { + CLEANUP (); + errno = EINVAL; + return NULL; + } + + { + size_t buf_neededlength; + TCHAR_T *buf; + TCHAR_T *buf_malloced; + const FCHAR_T *cp; + size_t i; + DIRECTIVE *dp; + /* Output string accumulator. */ + DCHAR_T *result; + size_t allocated; + size_t length; + + /* Allocate a small buffer that will hold a directive passed to + sprintf or snprintf. */ + buf_neededlength = + xsum4 (7, d.max_width_length, d.max_precision_length, 6); +#if HAVE_ALLOCA + if (buf_neededlength < 4000 / sizeof (TCHAR_T)) + { + buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); + buf_malloced = NULL; + } + else +#endif + { + size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); + if (size_overflow_p (buf_memsize)) + goto out_of_memory_1; + buf = (TCHAR_T *) malloc (buf_memsize); + if (buf == NULL) + goto out_of_memory_1; + buf_malloced = buf; + } + + if (resultbuf != NULL) + { + result = resultbuf; + allocated = *lengthp; + } + else + { + result = NULL; + allocated = 0; + } + length = 0; + /* Invariants: + result is either == resultbuf or == NULL or malloc-allocated. + If length > 0, then result != NULL. */ + + /* Ensures that allocated >= needed. Aborts through a jump to + out_of_memory if needed is SIZE_MAX or otherwise too big. */ +#define ENSURE_ALLOCATION(needed) \ + if ((needed) > allocated) \ + { \ + size_t memory_size; \ + DCHAR_T *memory; \ + \ + allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ + if ((needed) > allocated) \ + allocated = (needed); \ + memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ + if (size_overflow_p (memory_size)) \ + goto out_of_memory; \ + if (result == resultbuf || result == NULL) \ + memory = (DCHAR_T *) malloc (memory_size); \ + else \ + memory = (DCHAR_T *) realloc (result, memory_size); \ + if (memory == NULL) \ + goto out_of_memory; \ + if (result == resultbuf && length > 0) \ + DCHAR_CPY (memory, result, length); \ + result = memory; \ + } + + for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) + { + if (cp != dp->dir_start) + { + size_t n = dp->dir_start - cp; + size_t augmented_length = xsum (length, n); + + ENSURE_ALLOCATION (augmented_length); + /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we + need that the format string contains only ASCII characters + if FCHAR_T and DCHAR_T are not the same type. */ + if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) + { + DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); + length = augmented_length; + } + else + { + do + result[length++] = (unsigned char) *cp++; + while (--n > 0); + } + } + if (i == d.count) + break; + + /* Execute a single directive. */ + if (dp->conversion == '%') + { + size_t augmented_length; + + if (!(dp->arg_index == ARG_NONE)) + abort (); + augmented_length = xsum (length, 1); + ENSURE_ALLOCATION (augmented_length); + result[length] = '%'; + length = augmented_length; + } + else + { + if (!(dp->arg_index != ARG_NONE)) + abort (); + + if (dp->conversion == 'n') + { + switch (a.arg[dp->arg_index].type) + { + case TYPE_COUNT_SCHAR_POINTER: + *a.arg[dp->arg_index].a.a_count_schar_pointer = length; + break; + case TYPE_COUNT_SHORT_POINTER: + *a.arg[dp->arg_index].a.a_count_short_pointer = length; + break; + case TYPE_COUNT_INT_POINTER: + *a.arg[dp->arg_index].a.a_count_int_pointer = length; + break; + case TYPE_COUNT_LONGINT_POINTER: + *a.arg[dp->arg_index].a.a_count_longint_pointer = length; + break; +#if HAVE_LONG_LONG_INT + case TYPE_COUNT_LONGLONGINT_POINTER: + *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; + break; +#endif + default: + abort (); + } + } +#if ENABLE_UNISTDIO + /* The unistdio extensions. */ + else if (dp->conversion == 'U') + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + switch (type) + { + case TYPE_U8_STRING: + { + const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; + const uint8_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u8_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u8_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u8_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT8_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-8 to locale encoding. */ + converted = + u8_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-8 to UTF-16/UTF-32. */ + converted = + U8_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + case TYPE_U16_STRING: + { + const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; + const uint16_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u16_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u16_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u16_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT16_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-16 to locale encoding. */ + converted = + u16_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-16 to UTF-8/UTF-32. */ + converted = + U16_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + case TYPE_U32_STRING: + { + const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; + const uint32_t *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only PRECISION characters, from the left. */ + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count = u32_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of + characters. */ + arg_end = arg; + characters = 0; + for (;;) + { + int count = u32_strmblen (arg_end); + if (count == 0) + break; + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + u32_strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_UINT32_T + { + size_t n = arg_end - arg; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_CPY (result + length, arg, n); + length += n; + } +# else + { /* Convert. */ + DCHAR_T *converted = result + length; + size_t converted_len = allocated - length; +# if DCHAR_IS_TCHAR + /* Convert from UTF-32 to locale encoding. */ + converted = + u32_conv_to_encoding (locale_charset (), + iconveh_question_mark, + arg, arg_end - arg, NULL, + converted, &converted_len); +# else + /* Convert from UTF-32 to UTF-8/UTF-16. */ + converted = + U32_TO_DCHAR (arg, arg_end - arg, + converted, &converted_len); +# endif + if (converted == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + if (converted != result + length) + { + ENSURE_ALLOCATION (xsum (length, converted_len)); + DCHAR_CPY (result + length, converted, converted_len); + free (converted); + } + length += converted_len; + } +# endif + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + break; + + default: + abort (); + } + } +#endif +#if (!USE_SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T + else if (dp->conversion == 's' +# if WIDE_CHAR_VERSION + && a.arg[dp->arg_index].type != TYPE_WIDE_STRING +# else + && a.arg[dp->arg_index].type == TYPE_WIDE_STRING +# endif + ) + { + /* The normal handling of the 's' directive below requires + allocating a temporary buffer. The determination of its + length (tmp_length), in the case when a precision is + specified, below requires a conversion between a char[] + string and a wchar_t[] wide string. It could be done, but + we have no guarantee that the implementation of sprintf will + use the exactly same algorithm. Without this guarantee, it + is possible to have buffer overrun bugs. In order to avoid + such bugs, we implement the entire processing of the 's' + directive ourselves. */ + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 6; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + +# if WIDE_CHAR_VERSION + /* %s in vasnwprintf. See the specification of fwprintf. */ + { + const char *arg = a.arg[dp->arg_index].a.a_string; + const char *arg_end; + size_t characters; + + if (has_precision) + { + /* Use only as many bytes as needed to produce PRECISION + wide characters, from the left. */ +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (; precision > 0; precision--) + { + int count; +# if HAVE_MBRTOWC + count = mbrlen (arg_end, MB_CUR_MAX, &state); +# else + count = mblen (arg_end, MB_CUR_MAX); +# endif + if (count == 0) + /* Found the terminating NUL. */ + break; + if (count < 0) + { + /* Invalid or incomplete multibyte character. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else if (has_width) + { + /* Use the entire string, and count the number of wide + characters. */ +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (;;) + { + int count; +# if HAVE_MBRTOWC + count = mbrlen (arg_end, MB_CUR_MAX, &state); +# else + count = mblen (arg_end, MB_CUR_MAX); +# endif + if (count == 0) + /* Found the terminating NUL. */ + break; + if (count < 0) + { + /* Invalid or incomplete multibyte character. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end += count; + characters++; + } + } + else + { + /* Use the entire string. */ + arg_end = arg + strlen (arg); + /* The number of characters doesn't matter. */ + characters = 0; + } + + if (has_width && width > characters + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + + if (has_precision || has_width) + { + /* We know the number of wide characters in advance. */ + size_t remaining; +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + ENSURE_ALLOCATION (xsum (length, characters)); + for (remaining = characters; remaining > 0; remaining--) + { + wchar_t wc; + int count; +# if HAVE_MBRTOWC + count = mbrtowc (&wc, arg, arg_end - arg, &state); +# else + count = mbtowc (&wc, arg, arg_end - arg); +# endif + if (count <= 0) + /* mbrtowc not consistent with mbrlen, or mbtowc + not consistent with mblen. */ + abort (); + result[length++] = wc; + arg += count; + } + if (!(arg == arg_end)) + abort (); + } + else + { +# if HAVE_MBRTOWC + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + while (arg < arg_end) + { + wchar_t wc; + int count; +# if HAVE_MBRTOWC + count = mbrtowc (&wc, arg, arg_end - arg, &state); +# else + count = mbtowc (&wc, arg, arg_end - arg); +# endif + if (count <= 0) + /* mbrtowc not consistent with mbrlen, or mbtowc + not consistent with mblen. */ + abort (); + ENSURE_ALLOCATION (xsum (length, 1)); + result[length++] = wc; + arg += count; + } + } + + if (has_width && width > characters + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - characters; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } +# else + /* %ls in vasnprintf. See the specification of fprintf. */ + { + const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; + const wchar_t *arg_end; + size_t characters; +# if !DCHAR_IS_TCHAR + /* This code assumes that TCHAR_T is 'char'. */ + typedef int TCHAR_T_verify[2 * (sizeof (TCHAR_T) == 1) - 1]; + TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t tmpdst_len; +# endif + size_t w; + + if (has_precision) + { + /* Use only as many wide characters as needed to produce + at most PRECISION bytes, from the left. */ +# if HAVE_WCRTOMB + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + while (precision > 0) + { + char buf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg_end == 0) + /* Found the terminating null wide character. */ + break; +# if HAVE_WCRTOMB + count = wcrtomb (buf, *arg_end, &state); +# else + count = wctomb (buf, *arg_end); +# endif + if (count < 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + if (precision < count) + break; + arg_end++; + characters += count; + precision -= count; + } + } +# if DCHAR_IS_TCHAR + else if (has_width) +# else + else +# endif + { + /* Use the entire string, and count the number of + bytes. */ +# if HAVE_WCRTOMB + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + arg_end = arg; + characters = 0; + for (;;) + { + char buf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg_end == 0) + /* Found the terminating null wide character. */ + break; +# if HAVE_WCRTOMB + count = wcrtomb (buf, *arg_end, &state); +# else + count = wctomb (buf, *arg_end); +# endif + if (count < 0) + { + /* Cannot convert. */ + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EILSEQ; + return NULL; + } + arg_end++; + characters += count; + } + } +# if DCHAR_IS_TCHAR + else + { + /* Use the entire string. */ + arg_end = arg + local_wcslen (arg); + /* The number of bytes doesn't matter. */ + characters = 0; + } +# endif + +# if !DCHAR_IS_TCHAR + /* Convert the string into a piece of temporary memory. */ + tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); + if (tmpsrc == NULL) + goto out_of_memory; + { + TCHAR_T *tmpptr = tmpsrc; + size_t remaining; +# if HAVE_WCRTOMB + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + for (remaining = characters; remaining > 0; ) + { + char buf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB + count = wcrtomb (buf, *arg, &state); +# else + count = wctomb (buf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + memcpy (tmpptr, buf, count); + tmpptr += count; + arg++; + remaining -= count; + } + if (!(arg == arg_end)) + abort (); + } + + /* Convert from TCHAR_T[] to DCHAR_T[]. */ + tmpdst = + DCHAR_CONV_FROM_ENCODING (locale_charset (), + iconveh_question_mark, + tmpsrc, characters, + NULL, + NULL, &tmpdst_len); + if (tmpdst == NULL) + { + int saved_errno = errno; + free (tmpsrc); + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + free (tmpsrc); +# endif + + if (has_width) + { +# if ENABLE_UNISTDIO + /* Outside POSIX, it's preferrable to compare the width + against the number of _characters_ of the converted + value. */ + w = DCHAR_MBSNLEN (result + length, characters); +# else + /* The width is compared against the number of _bytes_ + of the converted value, says POSIX. */ + w = characters; +# endif + } + else + /* w doesn't matter. */ + w = 0; + + if (has_width && width > w + && !(dp->flags & FLAG_LEFT)) + { + size_t n = width - w; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + +# if DCHAR_IS_TCHAR + if (has_precision || has_width) + { + /* We know the number of bytes in advance. */ + size_t remaining; +# if HAVE_WCRTOMB + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + ENSURE_ALLOCATION (xsum (length, characters)); + for (remaining = characters; remaining > 0; ) + { + char buf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB + count = wcrtomb (buf, *arg, &state); +# else + count = wctomb (buf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + memcpy (result + length, buf, count); + length += count; + arg++; + remaining -= count; + } + if (!(arg == arg_end)) + abort (); + } + else + { +# if HAVE_WCRTOMB + mbstate_t state; + memset (&state, '\0', sizeof (mbstate_t)); +# endif + while (arg < arg_end) + { + char buf[64]; /* Assume MB_CUR_MAX <= 64. */ + int count; + + if (*arg == 0) + abort (); +# if HAVE_WCRTOMB + count = wcrtomb (buf, *arg, &state); +# else + count = wctomb (buf, *arg); +# endif + if (count <= 0) + /* Inconsistency. */ + abort (); + ENSURE_ALLOCATION (xsum (length, count)); + memcpy (result + length, buf, count); + length += count; + arg++; + } + } +# else + ENSURE_ALLOCATION (xsum (length, tmpdst_len)); + DCHAR_CPY (result + length, tmpdst, tmpdst_len); + free (tmpdst); + length += tmpdst_len; +# endif + + if (has_width && width > w + && (dp->flags & FLAG_LEFT)) + { + size_t n = width - w; + ENSURE_ALLOCATION (xsum (length, n)); + DCHAR_SET (result + length, ' ', n); + length += n; + } + } + } +# endif +#endif +#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL + else if ((dp->conversion == 'a' || dp->conversion == 'A') +# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) + && (0 +# if NEED_PRINTF_DOUBLE + || a.arg[dp->arg_index].type == TYPE_DOUBLE +# endif +# if NEED_PRINTF_LONG_DOUBLE + || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE +# endif + ) +# endif + ) + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + size_t tmp_length; + DCHAR_T tmpbuf[700]; + DCHAR_T *tmp; + DCHAR_T *pad_ptr; + DCHAR_T *p; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + /* Allocate a temporary buffer of sufficient size. */ + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) ((LDBL_DIG + 1) + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) ((DBL_DIG + 1) + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + + if (tmp_length < width) + tmp_length = width; + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (DCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } + + pad_ptr = NULL; + p = tmp; + if (type == TYPE_LONGDOUBLE) + { +# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE + long double arg = a.arg[dp->arg_index].a.a_longdouble; + + if (isnanl (arg)) + { + if (dp->conversion == 'A') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + if (signbit (arg)) /* arg < 0.0L or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0L && arg + arg == arg) + { + if (dp->conversion == 'A') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { + int exponent; + long double mantissa; + + if (arg > 0.0L) + mantissa = printf_frexpl (arg, &exponent); + else + { + exponent = 0; + mantissa = 0.0L; + } + + if (has_precision + && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) + { + /* Round the mantissa. */ + long double tail = mantissa; + size_t q; + + for (q = precision; ; q--) + { + int digit = (int) tail; + tail -= digit; + if (q == 0) + { + if (digit & 1 ? tail >= 0.5L : tail > 0.5L) + tail = 1 - tail; + else + tail = - tail; + break; + } + tail *= 16.0L; + } + if (tail != 0.0L) + for (q = precision; q > 0; q--) + tail *= 0.0625L; + mantissa += tail; + } + + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + { + int digit; + + digit = (int) mantissa; + mantissa -= digit; + *p++ = '0' + digit; + if ((flags & FLAG_ALT) + || mantissa > 0.0L || precision > 0) + { + *p++ = decimal_point_char (); + /* This loop terminates because we assume + that FLT_RADIX is a power of 2. */ + while (mantissa > 0.0L) + { + mantissa *= 16.0L; + digit = (int) mantissa; + mantissa -= digit; + *p++ = digit + + (digit < 10 + ? '0' + : dp->conversion - 10); + if (precision > 0) + precision--; + } + while (precision > 0) + { + *p++ = '0'; + precision--; + } + } + } + *p++ = dp->conversion - 'A' + 'P'; +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + + END_LONG_DOUBLE_ROUNDING (); + } +# else + abort (); +# endif + } + else + { +# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE + double arg = a.arg[dp->arg_index].a.a_double; + + if (isnand (arg)) + { + if (dp->conversion == 'A') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + + if (signbit (arg)) /* arg < 0.0 or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0 && arg + arg == arg) + { + if (dp->conversion == 'A') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { + int exponent; + double mantissa; + + if (arg > 0.0) + mantissa = printf_frexp (arg, &exponent); + else + { + exponent = 0; + mantissa = 0.0; + } + + if (has_precision + && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) + { + /* Round the mantissa. */ + double tail = mantissa; + size_t q; + + for (q = precision; ; q--) + { + int digit = (int) tail; + tail -= digit; + if (q == 0) + { + if (digit & 1 ? tail >= 0.5 : tail > 0.5) + tail = 1 - tail; + else + tail = - tail; + break; + } + tail *= 16.0; + } + if (tail != 0.0) + for (q = precision; q > 0; q--) + tail *= 0.0625; + mantissa += tail; + } + + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + { + int digit; + + digit = (int) mantissa; + mantissa -= digit; + *p++ = '0' + digit; + if ((flags & FLAG_ALT) + || mantissa > 0.0 || precision > 0) + { + *p++ = decimal_point_char (); + /* This loop terminates because we assume + that FLT_RADIX is a power of 2. */ + while (mantissa > 0.0) + { + mantissa *= 16.0; + digit = (int) mantissa; + mantissa -= digit; + *p++ = digit + + (digit < 10 + ? '0' + : dp->conversion - 10); + if (precision > 0) + precision--; + } + while (precision > 0) + { + *p++ = '0'; + precision--; + } + } + } + *p++ = dp->conversion - 'A' + 'P'; +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + } +# else + abort (); +# endif + } + /* The generated string now extends from tmp to p, with the + zero padding insertion point being at pad_ptr. */ + if (has_width && p - tmp < width) + { + size_t pad = width - (p - tmp); + DCHAR_T *end = p + pad; + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > tmp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + + p = end; + } + + { + size_t count = p - tmp; + + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); + + /* Make room for the result. */ + if (count >= allocated - length) + { + size_t n = xsum (length, count); + + ENSURE_ALLOCATION (n); + } + + /* Append the result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); + if (tmp != tmpbuf) + free (tmp); + length += count; + } + } +#endif +#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL + else if ((dp->conversion == 'f' || dp->conversion == 'F' + || dp->conversion == 'e' || dp->conversion == 'E' + || dp->conversion == 'g' || dp->conversion == 'G' + || dp->conversion == 'a' || dp->conversion == 'A') + && (0 +# if NEED_PRINTF_DOUBLE + || a.arg[dp->arg_index].type == TYPE_DOUBLE +# elif NEED_PRINTF_INFINITE_DOUBLE + || (a.arg[dp->arg_index].type == TYPE_DOUBLE + /* The systems (mingw) which produce wrong output + for Inf, -Inf, and NaN also do so for -0.0. + Therefore we treat this case here as well. */ + && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) +# endif +# if NEED_PRINTF_LONG_DOUBLE + || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE +# elif NEED_PRINTF_INFINITE_LONG_DOUBLE + || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE + /* Some systems produce wrong output for Inf, + -Inf, and NaN. Some systems in this category + (IRIX 5.3) also do so for -0.0. Therefore we + treat this case here as well. */ + && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) +# endif + )) + { +# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) + arg_type type = a.arg[dp->arg_index].type; +# endif + int flags = dp->flags; + int has_width; + size_t width; + int has_precision; + size_t precision; + size_t tmp_length; + DCHAR_T tmpbuf[700]; + DCHAR_T *tmp; + DCHAR_T *pad_ptr; + DCHAR_T *p; + + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } + + has_precision = 0; + precision = 0; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } + + /* POSIX specifies the default precision to be 6 for %f, %F, + %e, %E, but not for %g, %G. Implementations appear to use + the same default precision also for %g, %G. But for %a, %A, + the default precision is 0. */ + if (!has_precision) + if (!(dp->conversion == 'a' || dp->conversion == 'A')) + precision = 6; + + /* Allocate a temporary buffer of sufficient size. */ +# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE + tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); +# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE + tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); +# elif NEED_PRINTF_LONG_DOUBLE + tmp_length = LDBL_DIG + 1; +# elif NEED_PRINTF_DOUBLE + tmp_length = DBL_DIG + 1; +# else + tmp_length = 0; +# endif + if (tmp_length < precision) + tmp_length = precision; +# if NEED_PRINTF_LONG_DOUBLE +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + if (type == TYPE_LONGDOUBLE) +# endif + if (dp->conversion == 'f' || dp->conversion == 'F') + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + if (!(isnanl (arg) || arg + arg == arg)) + { + /* arg is finite and nonzero. */ + int exponent = floorlog10l (arg < 0 ? -arg : arg); + if (exponent >= 0 && tmp_length < exponent + precision) + tmp_length = exponent + precision; + } + } +# endif +# if NEED_PRINTF_DOUBLE +# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE + if (type == TYPE_DOUBLE) +# endif + if (dp->conversion == 'f' || dp->conversion == 'F') + { + double arg = a.arg[dp->arg_index].a.a_double; + if (!(isnand (arg) || arg + arg == arg)) + { + /* arg is finite and nonzero. */ + int exponent = floorlog10 (arg < 0 ? -arg : arg); + if (exponent >= 0 && tmp_length < exponent + precision) + tmp_length = exponent + precision; + } + } +# endif + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + + if (tmp_length < width) + tmp_length = width; + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + + if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (DCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } + + pad_ptr = NULL; + p = tmp; + +# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + if (type == TYPE_LONGDOUBLE) +# endif + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + + if (isnanl (arg)) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + if (signbit (arg)) /* arg < 0.0L or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0L && arg + arg == arg) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { +# if NEED_PRINTF_LONG_DOUBLE + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + char *digits; + size_t ndigits; + + digits = + scale10_round_decimal_long_double (arg, precision); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits > precision) + do + { + --ndigits; + *p++ = digits[ndigits]; + } + while (ndigits > precision); + else + *p++ = '0'; + /* Here ndigits <= precision. */ + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > ndigits; precision--) + *p++ = '0'; + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + int exponent; + + if (arg == 0.0L) + { + exponent = 0; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else + { + /* arg > 0.0L. */ + int adjusted; + char *digits; + size_t ndigits; + + exponent = floorlog10l (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_long_double (arg, + (int)precision - exponent); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits == precision + 1) + break; + if (ndigits < precision + || ndigits > precision + 2) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits == precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision+1. */ + if (is_borderline (digits, precision)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_long_double (arg, + (int)precision - exponent + 1); + if (digits2 == NULL) + { + free (digits); + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + if (strlen (digits2) == precision + 1) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision+1. */ + + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + + *p++ = dp->conversion; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', '.', '2', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+.2d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+.2d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + if (precision == 0) + precision = 1; + /* precision >= 1. */ + + if (arg == 0.0L) + /* The exponent is 0, >= -4, < precision. + Use fixed-point notation. */ + { + size_t ndigits = precision; + /* Number of trailing zeroes that have to be + dropped. */ + size_t nzeroes = + (flags & FLAG_ALT ? 0 : precision - 1); + + --ndigits; + *p++ = '0'; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = '0'; + } + } + } + else + { + /* arg > 0.0L. */ + int exponent; + int adjusted; + char *digits; + size_t ndigits; + size_t nzeroes; + + exponent = floorlog10l (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_long_double (arg, + (int)(precision - 1) - exponent); + if (digits == NULL) + { + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + ndigits = strlen (digits); + + if (ndigits == precision) + break; + if (ndigits < precision - 1 + || ndigits > precision + 1) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits < precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision. */ + if (is_borderline (digits, precision - 1)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_long_double (arg, + (int)(precision - 1) - exponent + 1); + if (digits2 == NULL) + { + free (digits); + END_LONG_DOUBLE_ROUNDING (); + goto out_of_memory; + } + if (strlen (digits2) == precision) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision. */ + + /* Determine the number of trailing zeroes + that have to be dropped. */ + nzeroes = 0; + if ((flags & FLAG_ALT) == 0) + while (nzeroes < ndigits + && digits[nzeroes] == '0') + nzeroes++; + + /* The exponent is now determined. */ + if (exponent >= -4 + && exponent < (long)precision) + { + /* Fixed-point notation: + max(exponent,0)+1 digits, then the + decimal point, then the remaining + digits without trailing zeroes. */ + if (exponent >= 0) + { + size_t count = exponent + 1; + /* Note: count <= precision = ndigits. */ + for (; count > 0; count--) + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + size_t count = -exponent - 1; + *p++ = '0'; + *p++ = decimal_point_char (); + for (; count > 0; count--) + *p++ = '0'; + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + /* Exponential notation. */ + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + { '%', '+', '.', '2', 'd', '\0' }; + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, "%+.2d", exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, "%+.2d", exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } +# endif + } + + free (digits); + } + } + else + abort (); +# else + /* arg is finite. */ + if (!(arg == 0.0L)) + abort (); + + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion; /* 'e' or 'E' */ + *p++ = '+'; + *p++ = '0'; + *p++ = '0'; + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + *p++ = '0'; + if (flags & FLAG_ALT) + { + size_t ndigits = + (precision > 0 ? precision - 1 : 0); + *p++ = decimal_point_char (); + for (; ndigits > 0; --ndigits) + *p++ = '0'; + } + } + else if (dp->conversion == 'a' || dp->conversion == 'A') + { + *p++ = '0'; + *p++ = dp->conversion - 'A' + 'X'; + pad_ptr = p; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion - 'A' + 'P'; + *p++ = '+'; + *p++ = '0'; + } + else + abort (); +# endif + } + + END_LONG_DOUBLE_ROUNDING (); + } + } +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + else +# endif +# endif +# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE + { + double arg = a.arg[dp->arg_index].a.a_double; + + if (isnand (arg)) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; + } + else + { + *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; + } + } + else + { + int sign = 0; + + if (signbit (arg)) /* arg < 0.0 or negative zero */ + { + sign = -1; + arg = -arg; + } + + if (sign < 0) + *p++ = '-'; + else if (flags & FLAG_SHOWSIGN) + *p++ = '+'; + else if (flags & FLAG_SPACE) + *p++ = ' '; + + if (arg > 0.0 && arg + arg == arg) + { + if (dp->conversion >= 'A' && dp->conversion <= 'Z') + { + *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; + } + else + { + *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; + } + } + else + { +# if NEED_PRINTF_DOUBLE + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + char *digits; + size_t ndigits; + + digits = + scale10_round_decimal_double (arg, precision); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits > precision) + do + { + --ndigits; + *p++ = digits[ndigits]; + } + while (ndigits > precision); + else + *p++ = '0'; + /* Here ndigits <= precision. */ + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > ndigits; precision--) + *p++ = '0'; + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + int exponent; + + if (arg == 0.0) + { + exponent = 0; + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else + { + /* arg > 0.0. */ + int adjusted; + char *digits; + size_t ndigits; + + exponent = floorlog10 (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_double (arg, + (int)precision - exponent); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits == precision + 1) + break; + if (ndigits < precision + || ndigits > precision + 2) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits == precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision+1. */ + if (is_borderline (digits, precision)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_double (arg, + (int)precision - exponent + 1); + if (digits2 == NULL) + { + free (digits); + goto out_of_memory; + } + if (strlen (digits2) == precision + 1) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision+1. */ + + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + while (ndigits > 0) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + + free (digits); + } + + *p++ = dp->conversion; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + { '%', '+', '.', '3', 'd', '\0' }; +# else + { '%', '+', '.', '2', 'd', '\0' }; +# endif + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + { + static const char decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + "%+.3d"; +# else + "%+.2d"; +# endif + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, decimal_format, exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, decimal_format, exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } + } +# endif + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + if (precision == 0) + precision = 1; + /* precision >= 1. */ + + if (arg == 0.0) + /* The exponent is 0, >= -4, < precision. + Use fixed-point notation. */ + { + size_t ndigits = precision; + /* Number of trailing zeroes that have to be + dropped. */ + size_t nzeroes = + (flags & FLAG_ALT ? 0 : precision - 1); + + --ndigits; + *p++ = '0'; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = '0'; + } + } + } + else + { + /* arg > 0.0. */ + int exponent; + int adjusted; + char *digits; + size_t ndigits; + size_t nzeroes; + + exponent = floorlog10 (arg); + adjusted = 0; + for (;;) + { + digits = + scale10_round_decimal_double (arg, + (int)(precision - 1) - exponent); + if (digits == NULL) + goto out_of_memory; + ndigits = strlen (digits); + + if (ndigits == precision) + break; + if (ndigits < precision - 1 + || ndigits > precision + 1) + /* The exponent was not guessed + precisely enough. */ + abort (); + if (adjusted) + /* None of two values of exponent is + the right one. Prevent an endless + loop. */ + abort (); + free (digits); + if (ndigits < precision) + exponent -= 1; + else + exponent += 1; + adjusted = 1; + } + /* Here ndigits = precision. */ + if (is_borderline (digits, precision - 1)) + { + /* Maybe the exponent guess was too high + and a smaller exponent can be reached + by turning a 10...0 into 9...9x. */ + char *digits2 = + scale10_round_decimal_double (arg, + (int)(precision - 1) - exponent + 1); + if (digits2 == NULL) + { + free (digits); + goto out_of_memory; + } + if (strlen (digits2) == precision) + { + free (digits); + digits = digits2; + exponent -= 1; + } + else + free (digits2); + } + /* Here ndigits = precision. */ + + /* Determine the number of trailing zeroes + that have to be dropped. */ + nzeroes = 0; + if ((flags & FLAG_ALT) == 0) + while (nzeroes < ndigits + && digits[nzeroes] == '0') + nzeroes++; + + /* The exponent is now determined. */ + if (exponent >= -4 + && exponent < (long)precision) + { + /* Fixed-point notation: + max(exponent,0)+1 digits, then the + decimal point, then the remaining + digits without trailing zeroes. */ + if (exponent >= 0) + { + size_t count = exponent + 1; + /* Note: count <= precision = ndigits. */ + for (; count > 0; count--) + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + size_t count = -exponent - 1; + *p++ = '0'; + *p++ = decimal_point_char (); + for (; count > 0; count--) + *p++ = '0'; + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + } + else + { + /* Exponential notation. */ + *p++ = digits[--ndigits]; + if ((flags & FLAG_ALT) || ndigits > nzeroes) + { + *p++ = decimal_point_char (); + while (ndigits > nzeroes) + { + --ndigits; + *p++ = digits[ndigits]; + } + } + *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ +# if WIDE_CHAR_VERSION + { + static const wchar_t decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + { '%', '+', '.', '3', 'd', '\0' }; +# else + { '%', '+', '.', '2', 'd', '\0' }; +# endif + SNPRINTF (p, 6 + 1, decimal_format, exponent); + } + while (*p != '\0') + p++; +# else + { + static const char decimal_format[] = + /* Produce the same number of exponent digits + as the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + "%+.3d"; +# else + "%+.2d"; +# endif + if (sizeof (DCHAR_T) == 1) + { + sprintf ((char *) p, decimal_format, exponent); + while (*p != '\0') + p++; + } + else + { + char expbuf[6 + 1]; + const char *ep; + sprintf (expbuf, decimal_format, exponent); + for (ep = expbuf; (*p = *ep) != '\0'; ep++) + p++; + } + } +# endif + } + + free (digits); + } + } + else + abort (); +# else + /* arg is finite. */ + if (!(arg == 0.0)) + abort (); + + pad_ptr = p; + + if (dp->conversion == 'f' || dp->conversion == 'F') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + } + else if (dp->conversion == 'e' || dp->conversion == 'E') + { + *p++ = '0'; + if ((flags & FLAG_ALT) || precision > 0) + { + *p++ = decimal_point_char (); + for (; precision > 0; precision--) + *p++ = '0'; + } + *p++ = dp->conversion; /* 'e' or 'E' */ + *p++ = '+'; + /* Produce the same number of exponent digits as + the native printf implementation. */ +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + *p++ = '0'; +# endif + *p++ = '0'; + *p++ = '0'; + } + else if (dp->conversion == 'g' || dp->conversion == 'G') + { + *p++ = '0'; + if (flags & FLAG_ALT) + { + size_t ndigits = + (precision > 0 ? precision - 1 : 0); + *p++ = decimal_point_char (); + for (; ndigits > 0; --ndigits) + *p++ = '0'; + } + } + else + abort (); +# endif + } + } + } +# endif + + /* The generated string now extends from tmp to p, with the + zero padding insertion point being at pad_ptr. */ + if (has_width && p - tmp < width) + { + size_t pad = width - (p - tmp); + DCHAR_T *end = p + pad; + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > tmp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + + p = end; + } + + { + size_t count = p - tmp; + + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); + + /* Make room for the result. */ + if (count >= allocated - length) + { + size_t n = xsum (length, count); + + ENSURE_ALLOCATION (n); + } + + /* Append the result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); + if (tmp != tmpbuf) + free (tmp); + length += count; + } + } +#endif + else + { + arg_type type = a.arg[dp->arg_index].type; + int flags = dp->flags; +#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + int has_width; + size_t width; +#endif +#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION + int has_precision; + size_t precision; +#endif +#if NEED_PRINTF_UNBOUNDED_PRECISION + int prec_ourselves; +#else +# define prec_ourselves 0 +#endif +#if NEED_PRINTF_FLAG_LEFTADJUST +# define pad_ourselves 1 +#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + int pad_ourselves; +#else +# define pad_ourselves 0 +#endif + TCHAR_T *fbp; + unsigned int prefix_count; + int prefixes[2] IF_LINT (= { 0 }); +#if !USE_SNPRINTF + size_t tmp_length; + TCHAR_T tmpbuf[700]; + TCHAR_T *tmp; +#endif + +#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + has_width = 0; + width = 0; + if (dp->width_start != dp->width_end) + { + if (dp->width_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->width_arg_index].a.a_int; + if (arg < 0) + { + /* "A negative field width is taken as a '-' flag + followed by a positive field width." */ + flags |= FLAG_LEFT; + width = (unsigned int) (-arg); + } + else + width = arg; + } + else + { + const FCHAR_T *digitp = dp->width_start; + + do + width = xsum (xtimes (width, 10), *digitp++ - '0'); + while (digitp != dp->width_end); + } + has_width = 1; + } +#endif + +#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION + has_precision = 0; + precision = 6; + if (dp->precision_start != dp->precision_end) + { + if (dp->precision_arg_index != ARG_NONE) + { + int arg; + + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + arg = a.arg[dp->precision_arg_index].a.a_int; + /* "A negative precision is taken as if the precision + were omitted." */ + if (arg >= 0) + { + precision = arg; + has_precision = 1; + } + } + else + { + const FCHAR_T *digitp = dp->precision_start + 1; + + precision = 0; + while (digitp != dp->precision_end) + precision = xsum (xtimes (precision, 10), *digitp++ - '0'); + has_precision = 1; + } + } +#endif + + /* Decide whether to handle the precision ourselves. */ +#if NEED_PRINTF_UNBOUNDED_PRECISION + switch (dp->conversion) + { + case 'd': case 'i': case 'u': + case 'o': + case 'x': case 'X': case 'p': + prec_ourselves = has_precision && (precision > 0); + break; + default: + prec_ourselves = 0; + break; + } +#endif + + /* Decide whether to perform the padding ourselves. */ +#if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) + switch (dp->conversion) + { +# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO + /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need + to perform the padding after this conversion. Functions + with unistdio extensions perform the padding based on + character count rather than element count. */ + case 'c': case 's': +# endif +# if NEED_PRINTF_FLAG_ZERO + case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': + case 'a': case 'A': +# endif + pad_ourselves = 1; + break; + default: + pad_ourselves = prec_ourselves; + break; + } +#endif + +#if !USE_SNPRINTF + /* Allocate a temporary buffer of sufficient size for calling + sprintf. */ + { + switch (dp->conversion) + { + + case 'd': case 'i': case 'u': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.30103 /* binary -> decimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Multiply by 2, as an estimate for FLAG_GROUP. */ + tmp_length = xsum (tmp_length, tmp_length); + /* Add 1, to account for a leading sign. */ + tmp_length = xsum (tmp_length, 1); + break; + + case 'o': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.333334 /* binary -> octal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Add 1, to account for a leading sign. */ + tmp_length = xsum (tmp_length, 1); + break; + + case 'x': case 'X': +# if HAVE_LONG_LONG_INT + if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long long) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else +# endif + if (type == TYPE_LONGINT || type == TYPE_ULONGINT) + tmp_length = + (unsigned int) (sizeof (unsigned long) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (sizeof (unsigned int) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Add 2, to account for a leading sign or alternate form. */ + tmp_length = xsum (tmp_length, 2); + break; + + case 'f': case 'F': + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) (LDBL_MAX_EXP + * 0.30103 /* binary -> decimal */ + * 2 /* estimate for FLAG_GROUP */ + ) + + 1 /* turn floor into ceil */ + + 10; /* sign, decimal point etc. */ + else + tmp_length = + (unsigned int) (DBL_MAX_EXP + * 0.30103 /* binary -> decimal */ + * 2 /* estimate for FLAG_GROUP */ + ) + + 1 /* turn floor into ceil */ + + 10; /* sign, decimal point etc. */ + tmp_length = xsum (tmp_length, precision); + break; + + case 'e': case 'E': case 'g': case 'G': + tmp_length = + 12; /* sign, decimal point, exponent etc. */ + tmp_length = xsum (tmp_length, precision); + break; + + case 'a': case 'A': + if (type == TYPE_LONGDOUBLE) + tmp_length = + (unsigned int) (LDBL_DIG + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + else + tmp_length = + (unsigned int) (DBL_DIG + * 0.831 /* decimal -> hexadecimal */ + ) + + 1; /* turn floor into ceil */ + if (tmp_length < precision) + tmp_length = precision; + /* Account for sign, decimal point etc. */ + tmp_length = xsum (tmp_length, 12); + break; + + case 'c': +# if HAVE_WINT_T && !WIDE_CHAR_VERSION + if (type == TYPE_WIDE_CHAR) + tmp_length = MB_CUR_MAX; + else +# endif + tmp_length = 1; + break; + + case 's': +# if HAVE_WCHAR_T + if (type == TYPE_WIDE_STRING) + { +# if WIDE_CHAR_VERSION + /* ISO C says about %ls in fwprintf: + "If the precision is not specified or is greater + than the size of the array, the array shall + contain a null wide character." + So if there is a precision, we must not use + wcslen. */ + const wchar_t *arg = + a.arg[dp->arg_index].a.a_wide_string; + + if (has_precision) + tmp_length = local_wcsnlen (arg, precision); + else + tmp_length = local_wcslen (arg); +# else + /* ISO C says about %ls in fprintf: + "If a precision is specified, no more than that + many bytes are written (including shift + sequences, if any), and the array shall contain + a null wide character if, to equal the + multibyte character sequence length given by + the precision, the function would need to + access a wide character one past the end of the + array." + So if there is a precision, we must not use + wcslen. */ + /* This case has already been handled above. */ + abort (); +# endif + } + else +# endif + { +# if WIDE_CHAR_VERSION + /* ISO C says about %s in fwprintf: + "If the precision is not specified or is greater + than the size of the converted array, the + converted array shall contain a null wide + character." + So if there is a precision, we must not use + strlen. */ + /* This case has already been handled above. */ + abort (); +# else + /* ISO C says about %s in fprintf: + "If the precision is not specified or greater + than the size of the array, the array shall + contain a null character." + So if there is a precision, we must not use + strlen. */ + const char *arg = a.arg[dp->arg_index].a.a_string; + + if (has_precision) + tmp_length = local_strnlen (arg, precision); + else + tmp_length = strlen (arg); +# endif + } + break; + + case 'p': + tmp_length = + (unsigned int) (sizeof (void *) * CHAR_BIT + * 0.25 /* binary -> hexadecimal */ + ) + + 1 /* turn floor into ceil */ + + 2; /* account for leading 0x */ + break; + + default: + abort (); + } + + if (!pad_ourselves) + { +# if ENABLE_UNISTDIO + /* Padding considers the number of characters, therefore + the number of elements after padding may be + > max (tmp_length, width) + but is certainly + <= tmp_length + width. */ + tmp_length = xsum (tmp_length, width); +# else + /* Padding considers the number of elements, + says POSIX. */ + if (tmp_length < width) + tmp_length = width; +# endif + } + + tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ + } + + if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) + tmp = tmpbuf; + else + { + size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); + + if (size_overflow_p (tmp_memsize)) + /* Overflow, would lead to out of memory. */ + goto out_of_memory; + tmp = (TCHAR_T *) malloc (tmp_memsize); + if (tmp == NULL) + /* Out of memory. */ + goto out_of_memory; + } +#endif + + /* Construct the format string for calling snprintf or + sprintf. */ + fbp = buf; + *fbp++ = '%'; +#if NEED_PRINTF_FLAG_GROUPING + /* The underlying implementation doesn't support the ' flag. + Produce no grouping characters in this case; this is + acceptable because the grouping is locale dependent. */ +#else + if (flags & FLAG_GROUP) + *fbp++ = '\''; +#endif + if (flags & FLAG_LEFT) + *fbp++ = '-'; + if (flags & FLAG_SHOWSIGN) + *fbp++ = '+'; + if (flags & FLAG_SPACE) + *fbp++ = ' '; + if (flags & FLAG_ALT) + *fbp++ = '#'; + if (!pad_ourselves) + { + if (flags & FLAG_ZERO) + *fbp++ = '0'; + if (dp->width_start != dp->width_end) + { + size_t n = dp->width_end - dp->width_start; + /* The width specification is known to consist only + of standard ASCII characters. */ + if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) + { + memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); + fbp += n; + } + else + { + const FCHAR_T *mp = dp->width_start; + do + *fbp++ = (unsigned char) *mp++; + while (--n > 0); + } + } + } + if (!prec_ourselves) + { + if (dp->precision_start != dp->precision_end) + { + size_t n = dp->precision_end - dp->precision_start; + /* The precision specification is known to consist only + of standard ASCII characters. */ + if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) + { + memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); + fbp += n; + } + else + { + const FCHAR_T *mp = dp->precision_start; + do + *fbp++ = (unsigned char) *mp++; + while (--n > 0); + } + } + } + + switch (type) + { +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + case TYPE_ULONGLONGINT: +# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ + *fbp++ = 'I'; + *fbp++ = '6'; + *fbp++ = '4'; + break; +# else + *fbp++ = 'l'; + /*FALLTHROUGH*/ +# endif +#endif + case TYPE_LONGINT: + case TYPE_ULONGINT: +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: +#endif +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: +#endif + *fbp++ = 'l'; + break; + case TYPE_LONGDOUBLE: + *fbp++ = 'L'; + break; + default: + break; + } +#if NEED_PRINTF_DIRECTIVE_F + if (dp->conversion == 'F') + *fbp = 'f'; + else +#endif + *fbp = dp->conversion; +#if USE_SNPRINTF +# if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) + fbp[1] = '%'; + fbp[2] = 'n'; + fbp[3] = '\0'; +# else + /* On glibc2 systems from glibc >= 2.3 - probably also older + ones - we know that snprintf's returns value conforms to + ISO C 99: the gl_SNPRINTF_DIRECTIVE_N test passes. + Therefore we can avoid using %n in this situation. + On glibc2 systems from 2004-10-18 or newer, the use of %n + in format strings in writable memory may crash the program + (if compiled with _FORTIFY_SOURCE=2), so we should avoid it + in this situation. */ + /* On native Win32 systems (such as mingw), we can avoid using + %n because: + - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, + snprintf does not write more than the specified number + of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes + '4', '5', '6' into buf, not '4', '5', '\0'.) + - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf + allows us to recognize the case of an insufficient + buffer size: it returns -1 in this case. + On native Win32 systems (such as mingw) where the OS is + Windows Vista, the use of %n in format strings by default + crashes the program. See + and + + So we should avoid %n in this situation. */ + fbp[1] = '\0'; +# endif +#else + fbp[1] = '\0'; +#endif + + /* Construct the arguments for calling snprintf or sprintf. */ + prefix_count = 0; + if (!pad_ourselves && dp->width_arg_index != ARG_NONE) + { + if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) + abort (); + prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; + } + if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) + { + if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) + abort (); + prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; + } + +#if USE_SNPRINTF + /* The SNPRINTF result is appended after result[0..length]. + The latter is an array of DCHAR_T; SNPRINTF appends an + array of TCHAR_T to it. This is possible because + sizeof (TCHAR_T) divides sizeof (DCHAR_T) and + alignof (TCHAR_T) <= alignof (DCHAR_T). */ +# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) + /* Ensure that maxlen below will be >= 2. Needed on BeOS, + where an snprintf() with maxlen==1 acts like sprintf(). */ + ENSURE_ALLOCATION (xsum (length, + (2 + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR)); + /* Prepare checking whether snprintf returns the count + via %n. */ + *(TCHAR_T *) (result + length) = '\0'; +#endif + + for (;;) + { + int count = -1; + +#if USE_SNPRINTF + int retcount = 0; + size_t maxlen = allocated - length; + /* SNPRINTF can fail if its second argument is + > INT_MAX. */ + if (maxlen > INT_MAX / TCHARS_PER_DCHAR) + maxlen = INT_MAX / TCHARS_PER_DCHAR; + maxlen = maxlen * TCHARS_PER_DCHAR; +# define SNPRINTF_BUF(arg) \ + switch (prefix_count) \ + { \ + case 0: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + arg, &count); \ + break; \ + case 1: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + prefixes[0], arg, &count); \ + break; \ + case 2: \ + retcount = SNPRINTF ((TCHAR_T *) (result + length), \ + maxlen, buf, \ + prefixes[0], prefixes[1], arg, \ + &count); \ + break; \ + default: \ + abort (); \ + } +#else +# define SNPRINTF_BUF(arg) \ + switch (prefix_count) \ + { \ + case 0: \ + count = sprintf (tmp, buf, arg); \ + break; \ + case 1: \ + count = sprintf (tmp, buf, prefixes[0], arg); \ + break; \ + case 2: \ + count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ + arg); \ + break; \ + default: \ + abort (); \ + } +#endif + + switch (type) + { + case TYPE_SCHAR: + { + int arg = a.arg[dp->arg_index].a.a_schar; + SNPRINTF_BUF (arg); + } + break; + case TYPE_UCHAR: + { + unsigned int arg = a.arg[dp->arg_index].a.a_uchar; + SNPRINTF_BUF (arg); + } + break; + case TYPE_SHORT: + { + int arg = a.arg[dp->arg_index].a.a_short; + SNPRINTF_BUF (arg); + } + break; + case TYPE_USHORT: + { + unsigned int arg = a.arg[dp->arg_index].a.a_ushort; + SNPRINTF_BUF (arg); + } + break; + case TYPE_INT: + { + int arg = a.arg[dp->arg_index].a.a_int; + SNPRINTF_BUF (arg); + } + break; + case TYPE_UINT: + { + unsigned int arg = a.arg[dp->arg_index].a.a_uint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_LONGINT: + { + long int arg = a.arg[dp->arg_index].a.a_longint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_ULONGINT: + { + unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_LONG_LONG_INT + case TYPE_LONGLONGINT: + { + long long int arg = a.arg[dp->arg_index].a.a_longlongint; + SNPRINTF_BUF (arg); + } + break; + case TYPE_ULONGLONGINT: + { + unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_DOUBLE: + { + double arg = a.arg[dp->arg_index].a.a_double; + SNPRINTF_BUF (arg); + } + break; + case TYPE_LONGDOUBLE: + { + long double arg = a.arg[dp->arg_index].a.a_longdouble; + SNPRINTF_BUF (arg); + } + break; + case TYPE_CHAR: + { + int arg = a.arg[dp->arg_index].a.a_char; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_WINT_T + case TYPE_WIDE_CHAR: + { + wint_t arg = a.arg[dp->arg_index].a.a_wide_char; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_STRING: + { + const char *arg = a.arg[dp->arg_index].a.a_string; + SNPRINTF_BUF (arg); + } + break; +#if HAVE_WCHAR_T + case TYPE_WIDE_STRING: + { + const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; + SNPRINTF_BUF (arg); + } + break; +#endif + case TYPE_POINTER: + { + void *arg = a.arg[dp->arg_index].a.a_pointer; + SNPRINTF_BUF (arg); + } + break; + default: + abort (); + } + +#if USE_SNPRINTF + /* Portability: Not all implementations of snprintf() + are ISO C 99 compliant. Determine the number of + bytes that snprintf() has produced or would have + produced. */ + if (count >= 0) + { + /* Verify that snprintf() has NUL-terminated its + result. */ + if (count < maxlen + && ((TCHAR_T *) (result + length)) [count] != '\0') + abort (); + /* Portability hack. */ + if (retcount > count) + count = retcount; + } + else + { + /* snprintf() doesn't understand the '%n' + directive. */ + if (fbp[1] != '\0') + { + /* Don't use the '%n' directive; instead, look + at the snprintf() return value. */ + fbp[1] = '\0'; + continue; + } + else + { + /* Look at the snprintf() return value. */ + if (retcount < 0) + { + /* HP-UX 10.20 snprintf() is doubly deficient: + It doesn't understand the '%n' directive, + *and* it returns -1 (rather than the length + that would have been required) when the + buffer is too small. */ + size_t bigger_need = + xsum (xtimes (allocated, 2), 12); + ENSURE_ALLOCATION (bigger_need); + continue; + } + else + count = retcount; + } + } +#endif + + /* Attempt to handle failure. */ + if (count < 0) + { + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EINVAL; + return NULL; + } + +#if USE_SNPRINTF + /* Handle overflow of the allocated buffer. + If such an overflow occurs, a C99 compliant snprintf() + returns a count >= maxlen. However, a non-compliant + snprintf() function returns only count = maxlen - 1. To + cover both cases, test whether count >= maxlen - 1. */ + if ((unsigned int) count + 1 >= maxlen) + { + /* If maxlen already has attained its allowed maximum, + allocating more memory will not increase maxlen. + Instead of looping, bail out. */ + if (maxlen == INT_MAX / TCHARS_PER_DCHAR) + goto overflow; + else + { + /* Need at least (count + 1) * sizeof (TCHAR_T) + bytes. (The +1 is for the trailing NUL.) + But ask for (count + 2) * sizeof (TCHAR_T) + bytes, so that in the next round, we likely get + maxlen > (unsigned int) count + 1 + and so we don't get here again. + And allocate proportionally, to avoid looping + eternally if snprintf() reports a too small + count. */ + size_t n = + xmax (xsum (length, + ((unsigned int) count + 2 + + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR), + xtimes (allocated, 2)); + + ENSURE_ALLOCATION (n); + continue; + } + } +#endif + +#if NEED_PRINTF_UNBOUNDED_PRECISION + if (prec_ourselves) + { + /* Handle the precision. */ + TCHAR_T *prec_ptr = +# if USE_SNPRINTF + (TCHAR_T *) (result + length); +# else + tmp; +# endif + size_t prefix_count; + size_t move; + + prefix_count = 0; + /* Put the additional zeroes after the sign. */ + if (count >= 1 + && (*prec_ptr == '-' || *prec_ptr == '+' + || *prec_ptr == ' ')) + prefix_count = 1; + /* Put the additional zeroes after the 0x prefix if + (flags & FLAG_ALT) || (dp->conversion == 'p'). */ + else if (count >= 2 + && prec_ptr[0] == '0' + && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) + prefix_count = 2; + + move = count - prefix_count; + if (precision > move) + { + /* Insert zeroes. */ + size_t insert = precision - move; + TCHAR_T *prec_end; + +# if USE_SNPRINTF + size_t n = + xsum (length, + (count + insert + TCHARS_PER_DCHAR - 1) + / TCHARS_PER_DCHAR); + length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; + ENSURE_ALLOCATION (n); + length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; + prec_ptr = (TCHAR_T *) (result + length); +# endif + + prec_end = prec_ptr + count; + prec_ptr += prefix_count; + + while (prec_end > prec_ptr) + { + prec_end--; + prec_end[insert] = prec_end[0]; + } + + prec_end += insert; + do + *--prec_end = '0'; + while (prec_end > prec_ptr); + + count += insert; + } + } +#endif + +#if !USE_SNPRINTF + if (count >= tmp_length) + /* tmp_length was incorrectly calculated - fix the + code above! */ + abort (); +#endif + +#if !DCHAR_IS_TCHAR + /* Convert from TCHAR_T[] to DCHAR_T[]. */ + if (dp->conversion == 'c' || dp->conversion == 's') + { + /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING + TYPE_WIDE_STRING. + The result string is not certainly ASCII. */ + const TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t tmpdst_len; + /* This code assumes that TCHAR_T is 'char'. */ + typedef int TCHAR_T_verify + [2 * (sizeof (TCHAR_T) == 1) - 1]; +# if USE_SNPRINTF + tmpsrc = (TCHAR_T *) (result + length); +# else + tmpsrc = tmp; +# endif + tmpdst = + DCHAR_CONV_FROM_ENCODING (locale_charset (), + iconveh_question_mark, + tmpsrc, count, + NULL, + NULL, &tmpdst_len); + if (tmpdst == NULL) + { + int saved_errno = errno; + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = saved_errno; + return NULL; + } + ENSURE_ALLOCATION (xsum (length, tmpdst_len)); + DCHAR_CPY (result + length, tmpdst, tmpdst_len); + free (tmpdst); + count = tmpdst_len; + } + else + { + /* The result string is ASCII. + Simple 1:1 conversion. */ +# if USE_SNPRINTF + /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a + no-op conversion, in-place on the array starting + at (result + length). */ + if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) +# endif + { + const TCHAR_T *tmpsrc; + DCHAR_T *tmpdst; + size_t n; + +# if USE_SNPRINTF + if (result == resultbuf) + { + tmpsrc = (TCHAR_T *) (result + length); + /* ENSURE_ALLOCATION will not move tmpsrc + (because it's part of resultbuf). */ + ENSURE_ALLOCATION (xsum (length, count)); + } + else + { + /* ENSURE_ALLOCATION will move the array + (because it uses realloc(). */ + ENSURE_ALLOCATION (xsum (length, count)); + tmpsrc = (TCHAR_T *) (result + length); + } +# else + tmpsrc = tmp; + ENSURE_ALLOCATION (xsum (length, count)); +# endif + tmpdst = result + length; + /* Copy backwards, because of overlapping. */ + tmpsrc += count; + tmpdst += count; + for (n = count; n > 0; n--) + *--tmpdst = (unsigned char) *--tmpsrc; + } + } +#endif + +#if DCHAR_IS_TCHAR && !USE_SNPRINTF + /* Make room for the result. */ + if (count > allocated - length) + { + /* Need at least count elements. But allocate + proportionally. */ + size_t n = + xmax (xsum (length, count), xtimes (allocated, 2)); + + ENSURE_ALLOCATION (n); + } +#endif + + /* Here count <= allocated - length. */ + + /* Perform padding. */ +#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION + if (pad_ourselves && has_width) + { + size_t w; +# if ENABLE_UNISTDIO + /* Outside POSIX, it's preferrable to compare the width + against the number of _characters_ of the converted + value. */ + w = DCHAR_MBSNLEN (result + length, count); +# else + /* The width is compared against the number of _bytes_ + of the converted value, says POSIX. */ + w = count; +# endif + if (w < width) + { + size_t pad = width - w; + + /* Make room for the result. */ + if (xsum (count, pad) > allocated - length) + { + /* Need at least count + pad elements. But + allocate proportionally. */ + size_t n = + xmax (xsum3 (length, count, pad), + xtimes (allocated, 2)); + +# if USE_SNPRINTF + length += count; + ENSURE_ALLOCATION (n); + length -= count; +# else + ENSURE_ALLOCATION (n); +# endif + } + /* Here count + pad <= allocated - length. */ + + { +# if !DCHAR_IS_TCHAR || USE_SNPRINTF + DCHAR_T * const rp = result + length; +# else + DCHAR_T * const rp = tmp; +# endif + DCHAR_T *p = rp + count; + DCHAR_T *end = p + pad; + DCHAR_T *pad_ptr; +# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO + if (dp->conversion == 'c' + || dp->conversion == 's') + /* No zero-padding for string directives. */ + pad_ptr = NULL; + else +# endif + { + pad_ptr = (*rp == '-' ? rp + 1 : rp); + /* No zero-padding of "inf" and "nan". */ + if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') + || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) + pad_ptr = NULL; + } + /* The generated string now extends from rp to p, + with the zero padding insertion point being at + pad_ptr. */ + + count = count + pad; /* = end - rp */ + + if (flags & FLAG_LEFT) + { + /* Pad with spaces on the right. */ + for (; pad > 0; pad--) + *p++ = ' '; + } + else if ((flags & FLAG_ZERO) && pad_ptr != NULL) + { + /* Pad with zeroes. */ + DCHAR_T *q = end; + + while (p > pad_ptr) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = '0'; + } + else + { + /* Pad with spaces on the left. */ + DCHAR_T *q = end; + + while (p > rp) + *--q = *--p; + for (; pad > 0; pad--) + *p++ = ' '; + } + } + } + } +#endif + + /* Here still count <= allocated - length. */ + +#if !DCHAR_IS_TCHAR || USE_SNPRINTF + /* The snprintf() result did fit. */ +#else + /* Append the sprintf() result. */ + memcpy (result + length, tmp, count * sizeof (DCHAR_T)); +#endif +#if !USE_SNPRINTF + if (tmp != tmpbuf) + free (tmp); +#endif + +#if NEED_PRINTF_DIRECTIVE_F + if (dp->conversion == 'F') + { + /* Convert the %f result to upper case for %F. */ + DCHAR_T *rp = result + length; + size_t rc; + for (rc = count; rc > 0; rc--, rp++) + if (*rp >= 'a' && *rp <= 'z') + *rp = *rp - 'a' + 'A'; + } +#endif + + length += count; + break; + } + } + } + } + + /* Add the final NUL. */ + ENSURE_ALLOCATION (xsum (length, 1)); + result[length] = '\0'; + + if (result != resultbuf && length + 1 < allocated) + { + /* Shrink the allocated memory if possible. */ + DCHAR_T *memory; + + memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); + if (memory != NULL) + result = memory; + } + + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + *lengthp = length; + /* Note that we can produce a big string of a length > INT_MAX. POSIX + says that snprintf() fails with errno = EOVERFLOW in this case, but + that's only because snprintf() returns an 'int'. This function does + not have this limitation. */ + return result; + +#if USE_SNPRINTF + overflow: + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + CLEANUP (); + errno = EOVERFLOW; + return NULL; +#endif + + out_of_memory: + if (!(result == resultbuf || result == NULL)) + free (result); + if (buf_malloced != NULL) + free (buf_malloced); + out_of_memory_1: + CLEANUP (); + errno = ENOMEM; + return NULL; + } +} + +#undef TCHARS_PER_DCHAR +#undef SNPRINTF +#undef USE_SNPRINTF +#undef DCHAR_CPY +#undef PRINTF_PARSE +#undef DIRECTIVES +#undef DIRECTIVE +#undef DCHAR_IS_TCHAR +#undef TCHAR_T +#undef DCHAR_T +#undef FCHAR_T +#undef VASNPRINTF diff --git a/lib/verify.h b/lib/verify.h new file mode 100644 index 00000000..e82fa02d --- /dev/null +++ b/lib/verify.h @@ -0,0 +1,140 @@ +/* Compile-time assert-like macros. + + Copyright (C) 2005, 2006 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ + +#ifndef VERIFY_H +# define VERIFY_H 1 + +/* Each of these macros verifies that its argument R is nonzero. To + be portable, R should be an integer constant expression. Unlike + assert (R), there is no run-time overhead. + + There are two macros, since no single macro can be used in all + contexts in C. verify_true (R) is for scalar contexts, including + integer constant expression contexts. verify (R) is for declaration + contexts, e.g., the top level. + + Symbols ending in "__" are private to this header. + + The code below uses several ideas. + + * The first step is ((R) ? 1 : -1). Given an expression R, of + integral or boolean or floating-point type, this yields an + expression of integral type, whose value is later verified to be + constant and nonnegative. + + * Next this expression W is wrapped in a type + struct verify_type__ { unsigned int verify_error_if_negative_size__: W; }. + If W is negative, this yields a compile-time error. No compiler can + deal with a bit-field of negative size. + + One might think that an array size check would have the same + effect, that is, that the type struct { unsigned int dummy[W]; } + would work as well. However, inside a function, some compilers + (such as C++ compilers and GNU C) allow local parameters and + variables inside array size expressions. With these compilers, + an array size check would not properly diagnose this misuse of + the verify macro: + + void function (int n) { verify (n < 0); } + + * For the verify macro, the struct verify_type__ will need to + somehow be embedded into a declaration. To be portable, this + declaration must declare an object, a constant, a function, or a + typedef name. If the declared entity uses the type directly, + such as in + + struct dummy {...}; + typedef struct {...} dummy; + extern struct {...} *dummy; + extern void dummy (struct {...} *); + extern struct {...} *dummy (void); + + two uses of the verify macro would yield colliding declarations + if the entity names are not disambiguated. A workaround is to + attach the current line number to the entity name: + + #define GL_CONCAT0(x, y) x##y + #define GL_CONCAT(x, y) GL_CONCAT0 (x, y) + extern struct {...} * GL_CONCAT(dummy,__LINE__); + + But this has the problem that two invocations of verify from + within the same macro would collide, since the __LINE__ value + would be the same for both invocations. + + A solution is to use the sizeof operator. It yields a number, + getting rid of the identity of the type. Declarations like + + extern int dummy [sizeof (struct {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + + can be repeated. + + * Should the implementation use a named struct or an unnamed struct? + Which of the following alternatives can be used? + + extern int dummy [sizeof (struct {...})]; + extern int dummy [sizeof (struct verify_type__ {...})]; + extern void dummy (int [sizeof (struct {...})]); + extern void dummy (int [sizeof (struct verify_type__ {...})]); + extern int (*dummy (void)) [sizeof (struct {...})]; + extern int (*dummy (void)) [sizeof (struct verify_type__ {...})]; + + In the second and sixth case, the struct type is exported to the + outer scope; two such declarations therefore collide. GCC warns + about the first, third, and fourth cases. So the only remaining + possibility is the fifth case: + + extern int (*dummy (void)) [sizeof (struct {...})]; + + * This implementation exploits the fact that GCC does not warn about + the last declaration mentioned above. If a future version of GCC + introduces a warning for this, the problem could be worked around + by using code specialized to GCC, e.g.,: + + #if 4 <= __GNUC__ + # define verify(R) \ + extern int (* verify_function__ (void)) \ + [__builtin_constant_p (R) && (R) ? 1 : -1] + #endif + + * In C++, any struct definition inside sizeof is invalid. + Use a template type to work around the problem. */ + + +/* Verify requirement R at compile-time, as an integer constant expression. + Return 1. */ + +# ifdef __cplusplus +template + struct verify_type__ { unsigned int verify_error_if_negative_size__: w; }; +# define verify_true(R) \ + (!!sizeof (verify_type__<(R) ? 1 : -1>)) +# else +# define verify_true(R) \ + (!!sizeof \ + (struct { unsigned int verify_error_if_negative_size__: (R) ? 1 : -1; })) +# endif + +/* Verify requirement R at compile-time, as a declaration without a + trailing ';'. */ + +# define verify(R) extern int (* verify_function__ (void)) [verify_true (R)] + +#endif diff --git a/lib/version.c b/lib/version.c new file mode 100644 index 00000000..0b3bde19 --- /dev/null +++ b/lib/version.c @@ -0,0 +1,23 @@ +/* Version information about GNU libunistring. + Copyright (C) 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2009. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include "unistring/version.h" + +const int _libunistring_version = _LIBUNISTRING_VERSION; diff --git a/lib/wchar.in.h b/lib/wchar.in.h new file mode 100644 index 00000000..1f1f1309 --- /dev/null +++ b/lib/wchar.in.h @@ -0,0 +1,310 @@ +/* A substitute for ISO C99 , for platforms that have issues. + + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Eric Blake. */ + +/* + * ISO C 99 for platforms that have issues. + * + * + * For now, this just ensures proper prerequisite inclusion order and + * the declaration of wcwidth(). + */ + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if defined __need_mbstate_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H +/* Special invocation convention: + - Inside uClibc header files. + - On HP-UX 11.00 we have a sequence of nested includes + -> -> , and the latter includes , + once indirectly -> -> -> + and once directly. In both situations 'wint_t' is not yet defined, + therefore we cannot provide the function overrides; instead include only + the system's . + - On IRIX 6.5, similarly, we have an include -> , and + the latter includes . But here, we have no way to detect whether + is completely included or is still being included. */ + +#@INCLUDE_NEXT@ @NEXT_WCHAR_H@ + +#else +/* Normal invocation convention. */ + +#ifndef _GL_WCHAR_H + +#define _GL_ALREADY_INCLUDING_WCHAR_H + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +#include +#include +#include + +/* Include the original if it exists. + Some builds of uClibc lack it. */ +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_WCHAR_H@ +# @INCLUDE_NEXT@ @NEXT_WCHAR_H@ +#endif + +#undef _GL_ALREADY_INCLUDING_WCHAR_H + +#ifndef _GL_WCHAR_H +#define _GL_WCHAR_H + +/* The definition of GL_LINK_WARNING is copied here. */ + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Define wint_t. (Also done in wctype.in.h.) */ +#if !@HAVE_WINT_T@ && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#endif + + +/* Override mbstate_t if it is too small. + On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for + implementing mbrtowc for encodings like UTF-8. */ +#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ +typedef int rpl_mbstate_t; +# undef mbstate_t +# define mbstate_t rpl_mbstate_t +# define GNULIB_defined_mbstate_t 1 +#endif + + +/* Convert a single-byte character to a wide character. */ +#if @GNULIB_BTOWC@ +# if @REPLACE_BTOWC@ +# undef btowc +# define btowc rpl_btowc +# endif +# if !@HAVE_BTOWC@ || @REPLACE_BTOWC@ +extern wint_t btowc (int c); +# endif +#elif defined GNULIB_POSIXCHECK +# undef btowc +# define btowc(c) \ + (GL_LINK_WARNING ("btowc is unportable - " \ + "use gnulib module btowc for portability"), \ + btowc (c)) +#endif + + +/* Convert a wide character to a single-byte character. */ +#if @GNULIB_WCTOB@ +# if @REPLACE_WCTOB@ +# undef wctob +# define wctob rpl_wctob +# endif +# if (!defined wctob && !@HAVE_DECL_WCTOB@) || @REPLACE_WCTOB@ +/* wctob is provided by gnulib, or wctob exists but is not declared. */ +extern int wctob (wint_t wc); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wctob +# define wctob(w) \ + (GL_LINK_WARNING ("wctob is unportable - " \ + "use gnulib module wctob for portability"), \ + wctob (w)) +#endif + + +/* Test whether *PS is in the initial state. */ +#if @GNULIB_MBSINIT@ +# if @REPLACE_MBSINIT@ +# undef mbsinit +# define mbsinit rpl_mbsinit +# endif +# if !@HAVE_MBSINIT@ || @REPLACE_MBSINIT@ +extern int mbsinit (const mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbsinit +# define mbsinit(p) \ + (GL_LINK_WARNING ("mbsinit is unportable - " \ + "use gnulib module mbsinit for portability"), \ + mbsinit (p)) +#endif + + +/* Convert a multibyte character to a wide character. */ +#if @GNULIB_MBRTOWC@ +# if @REPLACE_MBRTOWC@ +# undef mbrtowc +# define mbrtowc rpl_mbrtowc +# endif +# if !@HAVE_MBRTOWC@ || @REPLACE_MBRTOWC@ +extern size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbrtowc +# define mbrtowc(w,s,n,p) \ + (GL_LINK_WARNING ("mbrtowc is unportable - " \ + "use gnulib module mbrtowc for portability"), \ + mbrtowc (w, s, n, p)) +#endif + + +/* Recognize a multibyte character. */ +#if @GNULIB_MBRLEN@ +# if @REPLACE_MBRLEN@ +# undef mbrlen +# define mbrlen rpl_mbrlen +# endif +# if !@HAVE_MBRLEN@ || @REPLACE_MBRLEN@ +extern size_t mbrlen (const char *s, size_t n, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbrlen +# define mbrlen(s,n,p) \ + (GL_LINK_WARNING ("mbrlen is unportable - " \ + "use gnulib module mbrlen for portability"), \ + mbrlen (s, n, p)) +#endif + + +/* Convert a string to a wide string. */ +#if @GNULIB_MBSRTOWCS@ +# if @REPLACE_MBSRTOWCS@ +# undef mbsrtowcs +# define mbsrtowcs rpl_mbsrtowcs +# endif +# if !@HAVE_MBSRTOWCS@ || @REPLACE_MBSRTOWCS@ +extern size_t mbsrtowcs (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbsrtowcs +# define mbsrtowcs(d,s,l,p) \ + (GL_LINK_WARNING ("mbsrtowcs is unportable - " \ + "use gnulib module mbsrtowcs for portability"), \ + mbsrtowcs (d, s, l, p)) +#endif + + +/* Convert a string to a wide string. */ +#if @GNULIB_MBSNRTOWCS@ +# if @REPLACE_MBSNRTOWCS@ +# undef mbsnrtowcs +# define mbsnrtowcs rpl_mbsnrtowcs +# endif +# if !@HAVE_MBSNRTOWCS@ || @REPLACE_MBSNRTOWCS@ +extern size_t mbsnrtowcs (wchar_t *dest, const char **srcp, size_t srclen, size_t len, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef mbsnrtowcs +# define mbsnrtowcs(d,s,n,l,p) \ + (GL_LINK_WARNING ("mbsnrtowcs is unportable - " \ + "use gnulib module mbsnrtowcs for portability"), \ + mbsnrtowcs (d, s, n, l, p)) +#endif + + +/* Convert a wide character to a multibyte character. */ +#if @GNULIB_WCRTOMB@ +# if @REPLACE_WCRTOMB@ +# undef wcrtomb +# define wcrtomb rpl_wcrtomb +# endif +# if !@HAVE_WCRTOMB@ || @REPLACE_WCRTOMB@ +extern size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcrtomb +# define wcrtomb(s,w,p) \ + (GL_LINK_WARNING ("wcrtomb is unportable - " \ + "use gnulib module wcrtomb for portability"), \ + wcrtomb (s, w, p)) +#endif + + +/* Convert a wide string to a string. */ +#if @GNULIB_WCSRTOMBS@ +# if @REPLACE_WCSRTOMBS@ +# undef wcsrtombs +# define wcsrtombs rpl_wcsrtombs +# endif +# if !@HAVE_WCSRTOMBS@ || @REPLACE_WCSRTOMBS@ +extern size_t wcsrtombs (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsrtombs +# define wcsrtombs(d,s,l,p) \ + (GL_LINK_WARNING ("wcsrtombs is unportable - " \ + "use gnulib module wcsrtombs for portability"), \ + wcsrtombs (d, s, l, p)) +#endif + + +/* Convert a wide string to a string. */ +#if @GNULIB_WCSNRTOMBS@ +# if @REPLACE_WCSNRTOMBS@ +# undef wcsnrtombs +# define wcsnrtombs rpl_wcsnrtombs +# endif +# if !@HAVE_WCSNRTOMBS@ || @REPLACE_WCSNRTOMBS@ +extern size_t wcsnrtombs (char *dest, const wchar_t **srcp, size_t srclen, size_t len, mbstate_t *ps); +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcsnrtombs +# define wcsnrtombs(d,s,n,l,p) \ + (GL_LINK_WARNING ("wcsnrtombs is unportable - " \ + "use gnulib module wcsnrtombs for portability"), \ + wcsnrtombs (d, s, n, l, p)) +#endif + + +/* Return the number of screen columns needed for WC. */ +#if @GNULIB_WCWIDTH@ +# if @REPLACE_WCWIDTH@ +# undef wcwidth +# define wcwidth rpl_wcwidth +extern int wcwidth (wchar_t); +# else +# if !defined wcwidth && !@HAVE_DECL_WCWIDTH@ +/* wcwidth exists but is not declared. */ +extern int wcwidth (int /* actually wchar_t */); +# endif +# endif +#elif defined GNULIB_POSIXCHECK +# undef wcwidth +# define wcwidth(w) \ + (GL_LINK_WARNING ("wcwidth is unportable - " \ + "use gnulib module wcwidth for portability"), \ + wcwidth (w)) +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _GL_WCHAR_H */ +#endif /* _GL_WCHAR_H */ +#endif diff --git a/lib/wctype.in.h b/lib/wctype.in.h new file mode 100644 index 00000000..a583a044 --- /dev/null +++ b/lib/wctype.in.h @@ -0,0 +1,184 @@ +/* A substitute for ISO C99 , for platforms that lack it. + + Copyright (C) 2006-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Bruno Haible and Paul Eggert. */ + +/* + * ISO C 99 for platforms that lack it. + * + * + * iswctype, towctrans, towlower, towupper, wctrans, wctype, + * wctrans_t, and wctype_t are not yet implemented. + */ + +#ifndef _GL_WCTYPE_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +#if @HAVE_WINT_T@ +/* Solaris 2.5 has a bug: must be included before . + Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be + included before . */ +# include +# include +# include +# include +#endif + +/* Include the original if it exists. + BeOS 5 has the functions but no . */ +/* The include_next requires a split double-inclusion guard. */ +#if @HAVE_WCTYPE_H@ +# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@ +#endif + +#ifndef _GL_WCTYPE_H +#define _GL_WCTYPE_H + +/* Define wint_t. (Also done in wchar.in.h.) */ +#if !@HAVE_WINT_T@ && !defined wint_t +# define wint_t int +# ifndef WEOF +# define WEOF -1 +# endif +#endif + +/* FreeBSD 4.4 to 4.11 has but lacks the functions. + Linux libc5 has and the functions but they are broken. + Assume all 12 functions are implemented the same way, or not at all. */ +#if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ + +/* IRIX 5.3 has macros but no functions, its isw* macros refer to an + undefined variable _ctmp_ and to macros like _P, and they + refer to system functions like _iswctype that are not in the + standard C library. Rather than try to get ancient buggy + implementations like this to work, just disable them. */ +# undef iswalnum +# undef iswalpha +# undef iswblank +# undef iswcntrl +# undef iswdigit +# undef iswgraph +# undef iswlower +# undef iswprint +# undef iswpunct +# undef iswspace +# undef iswupper +# undef iswxdigit + +/* Linux libc5 has and the functions but they are broken. */ +# if @REPLACE_ISWCNTRL@ +# define iswalnum rpl_iswalnum +# define iswalpha rpl_iswalpha +# define iswblank rpl_iswblank +# define iswcntrl rpl_iswcntrl +# define iswdigit rpl_iswdigit +# define iswgraph rpl_iswgraph +# define iswlower rpl_iswlower +# define iswprint rpl_iswprint +# define iswpunct rpl_iswpunct +# define iswspace rpl_iswspace +# define iswupper rpl_iswupper +# define iswxdigit rpl_iswxdigit +# endif + +static inline int +iswalnum (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); +} + +static inline int +iswalpha (wint_t wc) +{ + return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; +} + +static inline int +iswblank (wint_t wc) +{ + return wc == ' ' || wc == '\t'; +} + +static inline int +iswcntrl (wint_t wc) +{ + return (wc & ~0x1f) == 0 || wc == 0x7f; +} + +static inline int +iswdigit (wint_t wc) +{ + return wc >= '0' && wc <= '9'; +} + +static inline int +iswgraph (wint_t wc) +{ + return wc >= '!' && wc <= '~'; +} + +static inline int +iswlower (wint_t wc) +{ + return wc >= 'a' && wc <= 'z'; +} + +static inline int +iswprint (wint_t wc) +{ + return wc >= ' ' && wc <= '~'; +} + +static inline int +iswpunct (wint_t wc) +{ + return (wc >= '!' && wc <= '~' + && !((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); +} + +static inline int +iswspace (wint_t wc) +{ + return (wc == ' ' || wc == '\t' + || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); +} + +static inline int +iswupper (wint_t wc) +{ + return wc >= 'A' && wc <= 'Z'; +} + +static inline int +iswxdigit (wint_t wc) +{ + return ((wc >= '0' && wc <= '9') + || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); +} + +# endif /* ! HAVE_ISWCNTRL */ + +#endif /* _GL_WCTYPE_H */ +#endif /* _GL_WCTYPE_H */ diff --git a/lib/wcwidth.c b/lib/wcwidth.c new file mode 100644 index 00000000..8dea6118 --- /dev/null +++ b/lib/wcwidth.c @@ -0,0 +1,51 @@ +/* Determine the number of screen columns needed for a character. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +/* Get iswprint. */ +#include + +#include "localcharset.h" +#include "streq.h" +#include "uniwidth.h" + +#undef wcwidth + +int +rpl_wcwidth (wchar_t wc) +{ + /* In UTF-8 locales, use a Unicode aware width function. */ + const char *encoding = locale_charset (); + if (STREQ (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0)) + { + /* We assume that in a UTF-8 locale, a wide character is the same as a + Unicode character. */ + return uc_width (wc, encoding); + } + else + { + /* Otherwise, fall back to the system's wcwidth function. */ +#if HAVE_WCWIDTH + return wcwidth (wc); +#else + return wc == 0 ? 0 : iswprint (wc) ? 1 : -1; +#endif + } +} diff --git a/lib/xsize.h b/lib/xsize.h new file mode 100644 index 00000000..0b30045e --- /dev/null +++ b/lib/xsize.h @@ -0,0 +1,108 @@ +/* xsize.h -- Checked size_t computations. + + Copyright (C) 2003, 2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _XSIZE_H +#define _XSIZE_H + +/* Get size_t. */ +#include + +/* Get SIZE_MAX. */ +#include +#if HAVE_STDINT_H +# include +#endif + +/* The size of memory objects is often computed through expressions of + type size_t. Example: + void* p = malloc (header_size + n * element_size). + These computations can lead to overflow. When this happens, malloc() + returns a piece of memory that is way too small, and the program then + crashes while attempting to fill the memory. + To avoid this, the functions and macros in this file check for overflow. + The convention is that SIZE_MAX represents overflow. + malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc + implementation that uses mmap --, it's recommended to use size_overflow_p() + or size_in_bounds_p() before invoking malloc(). + The example thus becomes: + size_t size = xsum (header_size, xtimes (n, element_size)); + void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); +*/ + +/* Convert an arbitrary value >= 0 to type size_t. */ +#define xcast_size_t(N) \ + ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) + +/* Sum of two sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum (size_t size1, size_t size2) +{ + size_t sum = size1 + size2; + return (sum >= size1 ? sum : SIZE_MAX); +} + +/* Sum of three sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum3 (size_t size1, size_t size2, size_t size3) +{ + return xsum (xsum (size1, size2), size3); +} + +/* Sum of four sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) +{ + return xsum (xsum (xsum (size1, size2), size3), size4); +} + +/* Maximum of two sizes, with overflow check. */ +static inline size_t +#if __GNUC__ >= 3 +__attribute__ ((__pure__)) +#endif +xmax (size_t size1, size_t size2) +{ + /* No explicit check is needed here, because for any n: + max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ + return (size1 >= size2 ? size1 : size2); +} + +/* Multiplication of a count with an element size, with overflow check. + The count must be >= 0 and the element size must be > 0. + This is a macro, not an inline function, so that it works correctly even + when N is of a wider type and N > SIZE_MAX. */ +#define xtimes(N, ELSIZE) \ + ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) + +/* Check for overflow. */ +#define size_overflow_p(SIZE) \ + ((SIZE) == SIZE_MAX) +/* Check against overflow. */ +#define size_in_bounds_p(SIZE) \ + ((SIZE) != SIZE_MAX) + +#endif /* _XSIZE_H */ diff --git a/m4/exported.m4 b/m4/exported.m4 new file mode 100644 index 00000000..fc379231 --- /dev/null +++ b/m4/exported.m4 @@ -0,0 +1,21 @@ +# exported.m4 serial 1 (gettext-0.18) +dnl Copyright (C) 2006, 2009 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Prerequisites of the exported.sh script: +dnl Check for nm output filter that yields the exported symbols. +AC_DEFUN([gt_GLOBAL_SYMBOL_PIPE], [ + AC_REQUIRE([AC_PROG_NM]) dnl provided by libtool.m4 + AC_SUBST([NM]) + AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE]) dnl provided by libtool.m4 + GLOBAL_SYMBOL_PIPE=$lt_cv_sys_global_symbol_pipe + AC_SUBST([GLOBAL_SYMBOL_PIPE]) + if test -n "$GLOBAL_SYMBOL_PIPE"; then + HAVE_GLOBAL_SYMBOL_PIPE=1 + else + HAVE_GLOBAL_SYMBOL_PIPE= + fi + AC_SUBST([HAVE_GLOBAL_SYMBOL_PIPE]) +]) diff --git a/m4/init-package-version.m4 b/m4/init-package-version.m4 new file mode 100644 index 00000000..f131a844 --- /dev/null +++ b/m4/init-package-version.m4 @@ -0,0 +1,97 @@ +# init-package-version.m4 serial 1 (gettext-0.18) +dnl Copyright (C) 1992-2009 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +# Make it possible to pass version numbers extracted from a file in +# $(srcdir) to autoconf. +# +# Autoconf insists on passing the package name and version number to +# every generated .h file and every Makefile. This was a reasonable +# design at times when a version number was changed only once a month. +# Nowadays, people often assign a new version number once a week, or +# even change it each time a 'git' commit is made. Regenerating all +# the files that depend on configure.ac (aclocal.m4, configure, +# config.status, config.h, all Makefiles) may take 15 minutes. These +# delays can severely hamper development. +# +# An alternative is to store the version number in a file in $(srcdir) +# that is separate from configure.ac. It can be a data file, a shell +# script, a .m4 file, or other. The essential point is that the maintainer +# is responsible for creating Makefile dependencies to this version file +# for every file that needs to be rebuilt when the version changes. This +# typically includes +# - distributable documentation files that carry the version number, +# but does not include +# - aclocal.m4, configure, config.status, config.h, all Makefiles, +# - executables. +# +# autoconf and automake make it hard to follow this approach: +# +# - If AC_INIT is used with arguments, there is a chicken-and-egg problem: +# The arguments need to be read from a file in $(srcdir). The location +# of $(srcdir) is only determined by AC_CONFIG_SRCDIR. AC_CONFIG_SRCDIR +# can only appear after AC_INIT (otherwise aclocal gives an error: +# "error: m4_defn: undefined macro: _m4_divert_diversion"). +# Furthermore, the arguments passed to AC_INIT must be literals; for +# example, the assignment to PACKAGE_VERSION looks like this: +# [PACKAGE_VERSION=']AC_PACKAGE_VERSION['] +# +# - If AC_INIT is used without arguments: +# Automake provides its own variables, PACKAGE and VERSION, and uses them +# instead of PACKAGE_NAME and PACKAGE_VERSION that come from Autoconf. +# - If AM_INIT_AUTOMAKE is used with two arguments, automake options +# like 'silent-rules' cannot be specified. +# - If AM_INIT_AUTOMAKE is used in its one-argument form or without +# arguments at all, it triggers an error +# "error: AC_INIT should be called with package and version arguments". +# - If AM_INIT_AUTOMAKE is used in its one-argument form or without +# arguments at all, and _AC_INIT_PACKAGE is used before it, with +# the package and version number from the file as arguments, we get +# a warning: "warning: AC_INIT: not a literal: $VERSION_NUMBER". +# The arguments passed to _AC_INIT_PACKAGE must be literals. +# +# With the macro defined in this file, the approach can be coded like this: +# +# AC_INIT +# AC_CONFIG_SRCDIR(WITNESS) +# . $srcdir/../version.sh +# gl_INIT_PACKAGE(PACKAGE, $VERSION_NUMBER) +# AM_INIT_AUTOMAKE([OPTIONS]) + +# gl_INIT_PACKAGE(PACKAGE-NAME, VERSION) +# -------------------------------------- +# followed by an AM_INIT_AUTOMAKE invocation, +# is like calling AM_INIT_AUTOMAKE(PACKAGE-NAME, VERSION) +# except that it can use computed non-literal arguments. +AC_DEFUN([gl_INIT_PACKAGE], +[ + AC_BEFORE([$0], [AM_INIT_AUTOMAKE]) + dnl Redefine AM_INIT_AUTOMAKE. + m4_define([gl_AM_INIT_AUTOMAKE], + m4_bpatsubst(m4_dquote( + m4_bpatsubst(m4_dquote( + m4_bpatsubst(m4_dquote( + m4_defn([AM_INIT_AUTOMAKE])), + [AC_PACKAGE_NAME], [gl_INIT_DUMMY])), + [AC_PACKAGE_TARNAME], [gl_INIT_DUMMY])), + [AC_PACKAGE_VERSION], [gl_INIT_DUMMY]) + [AC_SUBST([PACKAGE], [$1]) + AC_SUBST([VERSION], [$2]) + ]) + m4_define([AM_INIT_AUTOMAKE], + m4_defn([gl_RPL_INIT_AUTOMAKE])) +]) +m4_define([gl_INIT_DUMMY], []) +AC_DEFUN([gl_RPL_INIT_AUTOMAKE], [ + m4_ifval([$2], + [m4_fatal([After gl_INIT_PACKAGE, the two-argument form of AM_INIT_AUTOMAKE cannot be used.])]) + gl_AM_INIT_AUTOMAKE([$1 no-define]) + m4_if(m4_index([ $1 ], [ no-define ]), [-1], + [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]) + ]) +]) diff --git a/m4/libtool.m4 b/m4/libtool.m4 new file mode 100644 index 00000000..53ef95a7 --- /dev/null +++ b/m4/libtool.m4 @@ -0,0 +1,7372 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 56 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL="${CONFIG_SHELL-$SHELL} "'$(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl +_LT_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\[$]0 --fallback-echo"')dnl " + lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` + ;; +esac + +_LT_OUTPUT_LIBTOOL_INIT +]) + + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +cat >"$CONFIG_LT" <<_LTEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. + +lt_cl_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AS_SHELL_SANITIZE +_AS_PREPARE + +exec AS_MESSAGE_FD>&1 +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +if test "$no_create" != yes; then + lt_cl_success=: + test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" + exec AS_MESSAGE_LOG_FD>/dev/null + $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false + exec AS_MESSAGE_LOG_FD>>config.log + $lt_cl_success || AS_EXIT(1) +fi +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_XSI_SHELLFNS + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX +# ----------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_SHELL_INIT + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[_LT_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +[$]* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(lt_ECHO) +]) +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], + [An echo program that does not interpret backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[AC_CHECK_TOOL(AR, ar, false) +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1]) + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method == "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" \ + && { test "$build" = "$host" \ + || { test "$build_os" = cygwin && test "$host_os" = mingw32; }; \ + }; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac +AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE(int foo(void) {}, + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + ) + LDFLAGS="$save_LDFLAGS" + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [fix_srcfile_path], [1], + [Fix the shell variable $srcfile for the compiler]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_PROG_CXX +# ------------ +# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ +# compiler, we have our own version here. +m4_defun([_LT_PROG_CXX], +[ +pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) +AC_PROG_CXX +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_CXX + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_CXX], []) + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[AC_REQUIRE([_LT_PROG_CXX])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_PROG_F77 +# ------------ +# Since AC_PROG_F77 is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_F77], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) +AC_PROG_F77 +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_F77 + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_F77], []) + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_REQUIRE([_LT_PROG_F77])dnl +AC_LANG_PUSH(Fortran 77) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${F77-"f77"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_PROG_FC +# ----------- +# Since AC_PROG_FC is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_FC], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) +AC_PROG_FC +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_FC + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_FC], []) + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_REQUIRE([_LT_PROG_FC])dnl +AC_LANG_PUSH(Fortran) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${FC-"f95"} + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC="$lt_save_CC" +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_XSI_SHELLFNS +# --------------------- +# Bourne and XSI compatible variants of some useful shell functions. +m4_defun([_LT_PROG_XSI_SHELLFNS], +[case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $[*] )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +dnl func_dirname_and_basename +dnl A portable version of this function is already defined in general.m4sh +dnl so there is no need for it here. + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[[^=]]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$[@]"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]+=\$[2]" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]=\$$[1]\$[2]" +} + +_LT_EOF + ;; + esac +]) diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 new file mode 100644 index 00000000..34151a3b --- /dev/null +++ b/m4/ltoptions.m4 @@ -0,0 +1,368 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [0], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 new file mode 100644 index 00000000..9000a057 --- /dev/null +++ b/m4/ltsugar.m4 @@ -0,0 +1,123 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 new file mode 100644 index 00000000..b8e154fe --- /dev/null +++ b/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# Generated from ltversion.in. + +# serial 3012 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.2.6]) +m4_define([LT_PACKAGE_REVISION], [1.3012]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.2.6' +macro_revision='1.3012' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 new file mode 100644 index 00000000..637bb206 --- /dev/null +++ b/m4/lt~obsolete.m4 @@ -0,0 +1,92 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 4 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) diff --git a/m4/woe32-dll.m4 b/m4/woe32-dll.m4 new file mode 100644 index 00000000..6b5a037b --- /dev/null +++ b/m4/woe32-dll.m4 @@ -0,0 +1,45 @@ +# woe32-dll.m4 serial 2 +dnl Copyright (C) 2005-2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +# Add --disable-auto-import to the LDFLAGS if the linker supports it. +# GNU ld has an --enable-auto-import option, and it is the default on Cygwin +# since July 2005. But it has three fatal drawbacks: +# - It produces executables and shared libraries with relocations in the +# .text segment, defeating the principles of virtual memory. +# - For some constructs such as +# extern int var; +# int * const b = &var; +# it creates an executable that will give an error at runtime, rather +# than either a compile-time or link-time error or a working executable. +# (This is with both gcc and g++.) Whereas this code, not relying on +# auto-import: +# extern __declspec (dllimport) int var; +# int * const b = &var; +# gives a compile-time error with gcc and works with g++. +# - It doesn't work in some cases (references to a member field of an +# exported struct variable, or to a particular element of an exported +# array variable), requiring code modifications. One platform +# dictates code modifications on all platforms. +AC_DEFUN([gl_WOE32_DLL], +[ + AC_REQUIRE([AC_CANONICAL_HOST]) + case "$host_os" in + mingw* | cygwin*) + AC_MSG_CHECKING([for auto-import of symbols]) + AC_CACHE_VAL([gl_cv_ld_autoimport], [ + gl_save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -Wl,--disable-auto-import" + AC_TRY_LINK([], [], [gl_cv_ld_autoimport=yes], [gl_cv_ld_autoimport=no]) + LDFLAGS="$gl_save_LDFLAGS"]) + AC_MSG_RESULT([$gl_cv_ld_autoimport]) + if test $gl_cv_ld_autoimport = yes; then + LDFLAGS="$LDFLAGS -Wl,--disable-auto-import" + fi + ;; + esac +]) diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 00000000..08ee6413 --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,39 @@ +## Makefile for the tests subdirectory of GNU libunistring. +## Copyright (C) 2009 Free Software Foundation, Inc. +## +## This program is free software: you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 3 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program. If not, see . + +## Process this file with automake to produce Makefile.in. + +# Rules generated and collected by gnulib-tool. +include Makefile.gnulib + +AUTOMAKE_OPTIONS += 1.11 subdir-objects color-tests + +# Ensure that ../lib/config.h is seen before ../config.h. +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/lib -I$(top_builddir) + +# The test suite uses the 'localcharset' module. +TESTS_ENVIRONMENT += @LOCALCHARSET_TESTS_ENVIRONMENT@ + + +# For debugging memory leaks and memory allocation bugs. +# You should build with --disable-shared when using valgrind. +CHECKER = +#CHECKER = valgrind --tool=memcheck --suppressions=$(srcdir)/../lib/malloca.valgrind --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes +#CHECKER = valgrind --tool=massif --format=html --depth=10 --alloc-fn=xmalloc --alloc-fn=xrealloc --stacks=no +CHECKER_END_OF_COMMENTS = + +# This must be the last thing that gets added to TESTS_ENVIRONMENT. +TESTS_ENVIRONMENT += $(SHELL) $(top_srcdir)/build-aux/run-test '$(CHECKER)' diff --git a/tests/Makefile.gnulib b/tests/Makefile.gnulib new file mode 100644 index 00000000..454cfe7d --- /dev/null +++ b/tests/Makefile.gnulib @@ -0,0 +1,3200 @@ +## DO NOT EDIT! GENERATED AUTOMATICALLY! +## Process this file with automake to produce Makefile.in. +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. + +AUTOMAKE_OPTIONS = 1.5 foreign + +SUBDIRS = +TESTS = +TESTS_ENVIRONMENT = +noinst_PROGRAMS = +check_PROGRAMS = +noinst_HEADERS = +noinst_LIBRARIES = +check_LIBRARIES = libtests.a +EXTRA_DIST = +BUILT_SOURCES = +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = + +AM_CPPFLAGS = \ + -I. -I$(srcdir) \ + -I.. -I$(srcdir)/.. \ + -I../lib -I$(srcdir)/../lib + +LDADD = libtests.a ../lib/libunistring.la libtests.a $(LIBTESTS_LIBDEPS) + +libtests_a_SOURCES = +libtests_a_LIBADD = $(gltests_LIBOBJS) +libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) +EXTRA_libtests_a_SOURCES = +AM_LIBTOOLFLAGS = --preserve-dup-deps + +## begin gnulib module alloca-opt-tests + +TESTS += test-alloca-opt +check_PROGRAMS += test-alloca-opt + +EXTRA_DIST += test-alloca-opt.c + +## end gnulib module alloca-opt-tests + +## begin gnulib module array-mergesort-tests + +TESTS += test-array-mergesort +check_PROGRAMS += test-array-mergesort +EXTRA_DIST += test-array-mergesort.c + +## end gnulib module array-mergesort-tests + +## begin gnulib module c-ctype-tests + +TESTS += test-c-ctype +check_PROGRAMS += test-c-ctype + +EXTRA_DIST += test-c-ctype.c + +## end gnulib module c-ctype-tests + +## begin gnulib module c-strcase-tests + +TESTS += test-c-strcase.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' +check_PROGRAMS += test-c-strcasecmp test-c-strncasecmp +EXTRA_DIST += test-c-strcase.sh test-c-strcasecmp.c test-c-strncasecmp.c + +## end gnulib module c-strcase-tests + +## begin gnulib module environ-tests + +TESTS += test-environ +check_PROGRAMS += test-environ + +EXTRA_DIST += test-environ.c + +## end gnulib module environ-tests + +## begin gnulib module errno-tests + +TESTS += test-errno +check_PROGRAMS += test-errno + +EXTRA_DIST += test-errno.c + +## end gnulib module errno-tests + +## begin gnulib module error + + +EXTRA_DIST += error.c error.h + +EXTRA_libtests_a_SOURCES += error.c + +## end gnulib module error + +## begin gnulib module exitfail + + +EXTRA_DIST += exitfail.c exitfail.h + +EXTRA_libtests_a_SOURCES += exitfail.c + +## end gnulib module exitfail + +## begin gnulib module frexpl-nolibm-tests + +TESTS += test-frexpl-nolibm +check_PROGRAMS += test-frexpl-nolibm +test_frexpl_nolibm_SOURCES = test-frexpl.c + +EXTRA_DIST += test-frexpl.c + +## end gnulib module frexpl-nolibm-tests + +## begin gnulib module fseterr-tests + +TESTS += test-fseterr +check_PROGRAMS += test-fseterr + +EXTRA_DIST += test-fseterr.c + +## end gnulib module fseterr-tests + +## begin gnulib module gettext-h + +libtests_a_SOURCES += gettext.h + +## end gnulib module gettext-h + +## begin gnulib module iconv-tests + +TESTS += test-iconv +check_PROGRAMS += test-iconv +test_iconv_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += test-iconv.c + +## end gnulib module iconv-tests + +## begin gnulib module intprops + + +EXTRA_DIST += intprops.h + +## end gnulib module intprops + +## begin gnulib module isnand-nolibm-tests + +TESTS += test-isnand-nolibm +check_PROGRAMS += test-isnand-nolibm + +EXTRA_DIST += test-isnand-nolibm.c test-isnand.h nan.h + +## end gnulib module isnand-nolibm-tests + +## begin gnulib module isnanf-nolibm-tests + +TESTS += test-isnanf-nolibm +check_PROGRAMS += test-isnanf-nolibm + +EXTRA_DIST += test-isnanf-nolibm.c test-isnanf.h nan.h + +## end gnulib module isnanf-nolibm-tests + +## begin gnulib module isnanl-nolibm-tests + +TESTS += test-isnanl-nolibm +check_PROGRAMS += test-isnanl-nolibm + +EXTRA_DIST += test-isnanl-nolibm.c test-isnanl.h nan.h + +## end gnulib module isnanl-nolibm-tests + +## begin gnulib module locale + +BUILT_SOURCES += $(LOCALE_H) + +# We need the following in order to create when the system +# doesn't have one that provides all definitions. +locale.h: locale.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ + < $(srcdir)/locale.in.h; \ + } > $@-t + mv $@-t $@ +MOSTLYCLEANFILES += locale.h locale.h-t + +EXTRA_DIST += locale.in.h + +## end gnulib module locale + +## begin gnulib module locale-tests + +TESTS += test-locale +check_PROGRAMS += test-locale + +EXTRA_DIST += test-locale.c + +## end gnulib module locale-tests + +## begin gnulib module localename-tests + +TESTS += test-localename +check_PROGRAMS += test-localename +test_localename_LDADD = $(LDADD) @INTL_MACOSX_LIBS@ + +EXTRA_DIST += test-localename.c + +## end gnulib module localename-tests + +## begin gnulib module malloca-tests + +TESTS += test-malloca +check_PROGRAMS += test-malloca + +EXTRA_DIST += test-malloca.c + +## end gnulib module malloca-tests + +## begin gnulib module math-tests + +TESTS += test-math +check_PROGRAMS += test-math + +EXTRA_DIST += test-math.c + +## end gnulib module math-tests + +## begin gnulib module mbrtowc-tests + +TESTS += test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh +TESTS_ENVIRONMENT += \ + EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-mbrtowc + +EXTRA_DIST += test-mbrtowc1.sh test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh test-mbrtowc.c + +## end gnulib module mbrtowc-tests + +## begin gnulib module mbsinit-tests + +TESTS += test-mbsinit.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-mbsinit + +EXTRA_DIST += test-mbsinit.sh test-mbsinit.c + +## end gnulib module mbsinit-tests + +## begin gnulib module memchr-tests + +TESTS += test-memchr +check_PROGRAMS += test-memchr +EXTRA_DIST += test-memchr.c zerosize-ptr.h + +## end gnulib module memchr-tests + +## begin gnulib module printf-frexp-tests + +TESTS += test-printf-frexp +check_PROGRAMS += test-printf-frexp + +EXTRA_DIST += test-printf-frexp.c + +## end gnulib module printf-frexp-tests + +## begin gnulib module printf-frexpl-tests + +TESTS += test-printf-frexpl +check_PROGRAMS += test-printf-frexpl + +EXTRA_DIST += test-printf-frexpl.c + +## end gnulib module printf-frexpl-tests + +## begin gnulib module progname + +libtests_a_SOURCES += progname.h progname.c + +## end gnulib module progname + +## begin gnulib module setenv + + +EXTRA_DIST += setenv.c + +EXTRA_libtests_a_SOURCES += setenv.c + +## end gnulib module setenv + +## begin gnulib module signbit-tests + +TESTS += test-signbit +check_PROGRAMS += test-signbit + +EXTRA_DIST += test-signbit.c + +## end gnulib module signbit-tests + +## begin gnulib module stdbool-tests + +TESTS += test-stdbool +check_PROGRAMS += test-stdbool + +EXTRA_DIST += test-stdbool.c + +## end gnulib module stdbool-tests + +## begin gnulib module stdint-tests + +TESTS += test-stdint +check_PROGRAMS += test-stdint + +EXTRA_DIST += test-stdint.c + +## end gnulib module stdint-tests + +## begin gnulib module stdlib-tests + +TESTS += test-stdlib +check_PROGRAMS += test-stdlib + +EXTRA_DIST += test-stdlib.c + +## end gnulib module stdlib-tests + +## begin gnulib module strerror + + +EXTRA_DIST += strerror.c + +EXTRA_libtests_a_SOURCES += strerror.c + +## end gnulib module strerror + +## begin gnulib module strerror-tests + +TESTS += test-strerror +check_PROGRAMS += test-strerror +EXTRA_DIST += test-strerror.c + +## end gnulib module strerror-tests + +## begin gnulib module striconveh-tests + +TESTS += test-striconveh +check_PROGRAMS += test-striconveh +test_striconveh_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += test-striconveh.c + +## end gnulib module striconveh-tests + +## begin gnulib module striconveha-tests + +TESTS += test-striconveha +check_PROGRAMS += test-striconveha +test_striconveha_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += test-striconveha.c + +## end gnulib module striconveha-tests + +## begin gnulib module string-tests + +TESTS += test-string +check_PROGRAMS += test-string + +EXTRA_DIST += test-string.c + +## end gnulib module string-tests + +## begin gnulib module unicase/cased-tests + +TESTS += test-cased +check_PROGRAMS += test-cased +test_cased_SOURCES = unicase/test-cased.c + +EXTRA_DIST += unicase/test-cased.c unicase/test-predicate-part1.h unicase/test-predicate-part2.h + +## end gnulib module unicase/cased-tests + +## begin gnulib module unicase/ignorable-tests + +TESTS += test-ignorable +check_PROGRAMS += test-ignorable +test_ignorable_SOURCES = unicase/test-ignorable.c + +EXTRA_DIST += unicase/test-ignorable.c unicase/test-predicate-part1.h unicase/test-predicate-part2.h + +## end gnulib module unicase/ignorable-tests + +## begin gnulib module unicase/locale-language-tests + +TESTS += unicase/test-locale-language.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_JA='@LOCALE_JA@' LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' +check_PROGRAMS += test-locale-language +test_locale_language_SOURCES = unicase/test-locale-language.c +test_locale_language_LDADD = $(LDADD) @INTL_MACOSX_LIBS@ +EXTRA_DIST += unicase/test-locale-language.sh unicase/test-locale-language.c + +## end gnulib module unicase/locale-language-tests + +## begin gnulib module unicase/tolower-tests + +TESTS += test-uc_tolower +check_PROGRAMS += test-uc_tolower +test_uc_tolower_SOURCES = unicase/test-uc_tolower.c + +EXTRA_DIST += unicase/test-uc_tolower.c unicase/test-mapping-part1.h unicase/test-mapping-part2.h + +## end gnulib module unicase/tolower-tests + +## begin gnulib module unicase/totitle-tests + +TESTS += test-uc_totitle +check_PROGRAMS += test-uc_totitle +test_uc_totitle_SOURCES = unicase/test-uc_totitle.c + +EXTRA_DIST += unicase/test-uc_totitle.c unicase/test-mapping-part1.h unicase/test-mapping-part2.h + +## end gnulib module unicase/totitle-tests + +## begin gnulib module unicase/toupper-tests + +TESTS += test-uc_toupper +check_PROGRAMS += test-uc_toupper +test_uc_toupper_SOURCES = unicase/test-uc_toupper.c + +EXTRA_DIST += unicase/test-uc_toupper.c unicase/test-mapping-part1.h unicase/test-mapping-part2.h + +## end gnulib module unicase/toupper-tests + +## begin gnulib module unicase/u16-casecmp-tests + +TESTS += test-u16-casecmp +check_PROGRAMS += test-u16-casecmp +test_u16_casecmp_SOURCES = unicase/test-u16-casecmp.c + +EXTRA_DIST += unicase/test-u16-casecmp.c unicase/test-casecmp.h + +## end gnulib module unicase/u16-casecmp-tests + +## begin gnulib module unicase/u16-casecoll-tests + +TESTS += test-u16-casecoll +check_PROGRAMS += test-u16-casecoll +test_u16_casecoll_SOURCES = unicase/test-u16-casecoll.c +test_u16_casecoll_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += unicase/test-u16-casecoll.c unicase/test-casecmp.h + +## end gnulib module unicase/u16-casecoll-tests + +## begin gnulib module unicase/u16-casefold-tests + +TESTS += test-u16-casefold +check_PROGRAMS += test-u16-casefold +test_u16_casefold_SOURCES = unicase/test-u16-casefold.c + +EXTRA_DIST += unicase/test-u16-casefold.c + +## end gnulib module unicase/u16-casefold-tests + +## begin gnulib module unicase/u16-is-cased-tests + +TESTS += test-u16-is-cased +check_PROGRAMS += test-u16-is-cased +test_u16_is_cased_SOURCES = unicase/test-u16-is-cased.c + +EXTRA_DIST += unicase/test-u16-is-cased.c unicase/test-is-cased.h + +## end gnulib module unicase/u16-is-cased-tests + +## begin gnulib module unicase/u16-is-casefolded-tests + +TESTS += test-u16-is-casefolded +check_PROGRAMS += test-u16-is-casefolded +test_u16_is_casefolded_SOURCES = unicase/test-u16-is-casefolded.c + +EXTRA_DIST += unicase/test-u16-is-casefolded.c unicase/test-is-casefolded.h + +## end gnulib module unicase/u16-is-casefolded-tests + +## begin gnulib module unicase/u16-is-lowercase-tests + +TESTS += test-u16-is-lowercase +check_PROGRAMS += test-u16-is-lowercase +test_u16_is_lowercase_SOURCES = unicase/test-u16-is-lowercase.c + +EXTRA_DIST += unicase/test-u16-is-lowercase.c unicase/test-is-lowercase.h + +## end gnulib module unicase/u16-is-lowercase-tests + +## begin gnulib module unicase/u16-is-titlecase-tests + +TESTS += test-u16-is-titlecase +check_PROGRAMS += test-u16-is-titlecase +test_u16_is_titlecase_SOURCES = unicase/test-u16-is-titlecase.c + +EXTRA_DIST += unicase/test-u16-is-titlecase.c unicase/test-is-titlecase.h + +## end gnulib module unicase/u16-is-titlecase-tests + +## begin gnulib module unicase/u16-is-uppercase-tests + +TESTS += test-u16-is-uppercase +check_PROGRAMS += test-u16-is-uppercase +test_u16_is_uppercase_SOURCES = unicase/test-u16-is-uppercase.c + +EXTRA_DIST += unicase/test-u16-is-uppercase.c unicase/test-is-uppercase.h + +## end gnulib module unicase/u16-is-uppercase-tests + +## begin gnulib module unicase/u16-tolower-tests + +TESTS += test-u16-tolower +check_PROGRAMS += test-u16-tolower +test_u16_tolower_SOURCES = unicase/test-u16-tolower.c + +EXTRA_DIST += unicase/test-u16-tolower.c + +## end gnulib module unicase/u16-tolower-tests + +## begin gnulib module unicase/u16-totitle-tests + +TESTS += test-u16-totitle +check_PROGRAMS += test-u16-totitle +test_u16_totitle_SOURCES = unicase/test-u16-totitle.c + +EXTRA_DIST += unicase/test-u16-totitle.c + +## end gnulib module unicase/u16-totitle-tests + +## begin gnulib module unicase/u16-toupper-tests + +TESTS += test-u16-toupper +check_PROGRAMS += test-u16-toupper +test_u16_toupper_SOURCES = unicase/test-u16-toupper.c + +EXTRA_DIST += unicase/test-u16-toupper.c + +## end gnulib module unicase/u16-toupper-tests + +## begin gnulib module unicase/u32-casecmp-tests + +TESTS += test-u32-casecmp +check_PROGRAMS += test-u32-casecmp +test_u32_casecmp_SOURCES = unicase/test-u32-casecmp.c + +EXTRA_DIST += unicase/test-u32-casecmp.c unicase/test-casecmp.h + +## end gnulib module unicase/u32-casecmp-tests + +## begin gnulib module unicase/u32-casecoll-tests + +TESTS += test-u32-casecoll +check_PROGRAMS += test-u32-casecoll +test_u32_casecoll_SOURCES = unicase/test-u32-casecoll.c +test_u32_casecoll_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += unicase/test-u32-casecoll.c unicase/test-casecmp.h + +## end gnulib module unicase/u32-casecoll-tests + +## begin gnulib module unicase/u32-casefold-tests + +TESTS += test-u32-casefold +check_PROGRAMS += test-u32-casefold +test_u32_casefold_SOURCES = unicase/test-u32-casefold.c + +EXTRA_DIST += unicase/test-u32-casefold.c + +## end gnulib module unicase/u32-casefold-tests + +## begin gnulib module unicase/u32-is-cased-tests + +TESTS += test-u32-is-cased +check_PROGRAMS += test-u32-is-cased +test_u32_is_cased_SOURCES = unicase/test-u32-is-cased.c + +EXTRA_DIST += unicase/test-u32-is-cased.c unicase/test-is-cased.h + +## end gnulib module unicase/u32-is-cased-tests + +## begin gnulib module unicase/u32-is-casefolded-tests + +TESTS += test-u32-is-casefolded +check_PROGRAMS += test-u32-is-casefolded +test_u32_is_casefolded_SOURCES = unicase/test-u32-is-casefolded.c + +EXTRA_DIST += unicase/test-u32-is-casefolded.c unicase/test-is-casefolded.h + +## end gnulib module unicase/u32-is-casefolded-tests + +## begin gnulib module unicase/u32-is-lowercase-tests + +TESTS += test-u32-is-lowercase +check_PROGRAMS += test-u32-is-lowercase +test_u32_is_lowercase_SOURCES = unicase/test-u32-is-lowercase.c + +EXTRA_DIST += unicase/test-u32-is-lowercase.c unicase/test-is-lowercase.h + +## end gnulib module unicase/u32-is-lowercase-tests + +## begin gnulib module unicase/u32-is-titlecase-tests + +TESTS += test-u32-is-titlecase +check_PROGRAMS += test-u32-is-titlecase +test_u32_is_titlecase_SOURCES = unicase/test-u32-is-titlecase.c + +EXTRA_DIST += unicase/test-u32-is-titlecase.c unicase/test-is-titlecase.h + +## end gnulib module unicase/u32-is-titlecase-tests + +## begin gnulib module unicase/u32-is-uppercase-tests + +TESTS += test-u32-is-uppercase +check_PROGRAMS += test-u32-is-uppercase +test_u32_is_uppercase_SOURCES = unicase/test-u32-is-uppercase.c + +EXTRA_DIST += unicase/test-u32-is-uppercase.c unicase/test-is-uppercase.h + +## end gnulib module unicase/u32-is-uppercase-tests + +## begin gnulib module unicase/u32-tolower-tests + +TESTS += test-u32-tolower +check_PROGRAMS += test-u32-tolower +test_u32_tolower_SOURCES = unicase/test-u32-tolower.c + +EXTRA_DIST += unicase/test-u32-tolower.c + +## end gnulib module unicase/u32-tolower-tests + +## begin gnulib module unicase/u32-totitle-tests + +TESTS += test-u32-totitle +check_PROGRAMS += test-u32-totitle +test_u32_totitle_SOURCES = unicase/test-u32-totitle.c + +EXTRA_DIST += unicase/test-u32-totitle.c + +## end gnulib module unicase/u32-totitle-tests + +## begin gnulib module unicase/u32-toupper-tests + +TESTS += test-u32-toupper +check_PROGRAMS += test-u32-toupper +test_u32_toupper_SOURCES = unicase/test-u32-toupper.c + +EXTRA_DIST += unicase/test-u32-toupper.c + +## end gnulib module unicase/u32-toupper-tests + +## begin gnulib module unicase/u8-casecmp-tests + +TESTS += test-u8-casecmp +check_PROGRAMS += test-u8-casecmp +test_u8_casecmp_SOURCES = unicase/test-u8-casecmp.c + +EXTRA_DIST += unicase/test-u8-casecmp.c unicase/test-casecmp.h + +## end gnulib module unicase/u8-casecmp-tests + +## begin gnulib module unicase/u8-casecoll-tests + +TESTS += test-u8-casecoll +check_PROGRAMS += test-u8-casecoll +test_u8_casecoll_SOURCES = unicase/test-u8-casecoll.c +test_u8_casecoll_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += unicase/test-u8-casecoll.c unicase/test-casecmp.h + +## end gnulib module unicase/u8-casecoll-tests + +## begin gnulib module unicase/u8-casefold-tests + +TESTS += test-u8-casefold +check_PROGRAMS += test-u8-casefold +test_u8_casefold_SOURCES = unicase/test-u8-casefold.c + +EXTRA_DIST += unicase/test-u8-casefold.c + +## end gnulib module unicase/u8-casefold-tests + +## begin gnulib module unicase/u8-is-cased-tests + +TESTS += test-u8-is-cased +check_PROGRAMS += test-u8-is-cased +test_u8_is_cased_SOURCES = unicase/test-u8-is-cased.c + +EXTRA_DIST += unicase/test-u8-is-cased.c unicase/test-is-cased.h + +## end gnulib module unicase/u8-is-cased-tests + +## begin gnulib module unicase/u8-is-casefolded-tests + +TESTS += test-u8-is-casefolded +check_PROGRAMS += test-u8-is-casefolded +test_u8_is_casefolded_SOURCES = unicase/test-u8-is-casefolded.c + +EXTRA_DIST += unicase/test-u8-is-casefolded.c unicase/test-is-casefolded.h + +## end gnulib module unicase/u8-is-casefolded-tests + +## begin gnulib module unicase/u8-is-lowercase-tests + +TESTS += test-u8-is-lowercase +check_PROGRAMS += test-u8-is-lowercase +test_u8_is_lowercase_SOURCES = unicase/test-u8-is-lowercase.c + +EXTRA_DIST += unicase/test-u8-is-lowercase.c unicase/test-is-lowercase.h + +## end gnulib module unicase/u8-is-lowercase-tests + +## begin gnulib module unicase/u8-is-titlecase-tests + +TESTS += test-u8-is-titlecase +check_PROGRAMS += test-u8-is-titlecase +test_u8_is_titlecase_SOURCES = unicase/test-u8-is-titlecase.c + +EXTRA_DIST += unicase/test-u8-is-titlecase.c unicase/test-is-titlecase.h + +## end gnulib module unicase/u8-is-titlecase-tests + +## begin gnulib module unicase/u8-is-uppercase-tests + +TESTS += test-u8-is-uppercase +check_PROGRAMS += test-u8-is-uppercase +test_u8_is_uppercase_SOURCES = unicase/test-u8-is-uppercase.c + +EXTRA_DIST += unicase/test-u8-is-uppercase.c unicase/test-is-uppercase.h + +## end gnulib module unicase/u8-is-uppercase-tests + +## begin gnulib module unicase/u8-tolower-tests + +TESTS += test-u8-tolower +check_PROGRAMS += test-u8-tolower +test_u8_tolower_SOURCES = unicase/test-u8-tolower.c + +EXTRA_DIST += unicase/test-u8-tolower.c + +## end gnulib module unicase/u8-tolower-tests + +## begin gnulib module unicase/u8-totitle-tests + +TESTS += test-u8-totitle +check_PROGRAMS += test-u8-totitle +test_u8_totitle_SOURCES = unicase/test-u8-totitle.c + +EXTRA_DIST += unicase/test-u8-totitle.c + +## end gnulib module unicase/u8-totitle-tests + +## begin gnulib module unicase/u8-toupper-tests + +TESTS += test-u8-toupper +check_PROGRAMS += test-u8-toupper +test_u8_toupper_SOURCES = unicase/test-u8-toupper.c + +EXTRA_DIST += unicase/test-u8-toupper.c + +## end gnulib module unicase/u8-toupper-tests + +## begin gnulib module unicase/ulc-casecmp-tests + +TESTS += unicase/test-ulc-casecmp1.sh unicase/test-ulc-casecmp2.sh +TESTS_ENVIRONMENT += \ + EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-ulc-casecmp +test_ulc_casecmp_SOURCES = unicase/test-ulc-casecmp.c +test_ulc_casecmp_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += unicase/test-ulc-casecmp1.sh unicase/test-ulc-casecmp2.sh unicase/test-ulc-casecmp.c unicase/test-casecmp.h + +## end gnulib module unicase/ulc-casecmp-tests + +## begin gnulib module unicase/ulc-casecoll-tests + +TESTS += unicase/test-ulc-casecoll1.sh unicase/test-ulc-casecoll2.sh +TESTS_ENVIRONMENT += \ + EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-ulc-casecoll +test_ulc_casecoll_SOURCES = unicase/test-ulc-casecoll.c +test_ulc_casecoll_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += unicase/test-ulc-casecoll1.sh unicase/test-ulc-casecoll2.sh unicase/test-ulc-casecoll.c unicase/test-casecmp.h + +## end gnulib module unicase/ulc-casecoll-tests + +## begin gnulib module uniconv/u16-conv-from-enc-tests + +TESTS += test-u16-conv-from-enc +check_PROGRAMS += test-u16-conv-from-enc +test_u16_conv_from_enc_SOURCES = uniconv/test-u16-conv-from-enc.c +test_u16_conv_from_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u16-conv-from-enc.c + +## end gnulib module uniconv/u16-conv-from-enc-tests + +## begin gnulib module uniconv/u16-conv-to-enc-tests + +TESTS += test-u16-conv-to-enc +check_PROGRAMS += test-u16-conv-to-enc +test_u16_conv_to_enc_SOURCES = uniconv/test-u16-conv-to-enc.c +test_u16_conv_to_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u16-conv-to-enc.c + +## end gnulib module uniconv/u16-conv-to-enc-tests + +## begin gnulib module uniconv/u16-strconv-from-enc-tests + +TESTS += test-u16-strconv-from-enc +check_PROGRAMS += test-u16-strconv-from-enc +test_u16_strconv_from_enc_SOURCES = uniconv/test-u16-strconv-from-enc.c +test_u16_strconv_from_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u16-strconv-from-enc.c + +## end gnulib module uniconv/u16-strconv-from-enc-tests + +## begin gnulib module uniconv/u16-strconv-to-enc-tests + +TESTS += test-u16-strconv-to-enc +check_PROGRAMS += test-u16-strconv-to-enc +test_u16_strconv_to_enc_SOURCES = uniconv/test-u16-strconv-to-enc.c +test_u16_strconv_to_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u16-strconv-to-enc.c + +## end gnulib module uniconv/u16-strconv-to-enc-tests + +## begin gnulib module uniconv/u32-conv-from-enc-tests + +TESTS += test-u32-conv-from-enc +check_PROGRAMS += test-u32-conv-from-enc +test_u32_conv_from_enc_SOURCES = uniconv/test-u32-conv-from-enc.c +test_u32_conv_from_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u32-conv-from-enc.c + +## end gnulib module uniconv/u32-conv-from-enc-tests + +## begin gnulib module uniconv/u32-conv-to-enc-tests + +TESTS += test-u32-conv-to-enc +check_PROGRAMS += test-u32-conv-to-enc +test_u32_conv_to_enc_SOURCES = uniconv/test-u32-conv-to-enc.c +test_u32_conv_to_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u32-conv-to-enc.c + +## end gnulib module uniconv/u32-conv-to-enc-tests + +## begin gnulib module uniconv/u32-strconv-from-enc-tests + +TESTS += test-u32-strconv-from-enc +check_PROGRAMS += test-u32-strconv-from-enc +test_u32_strconv_from_enc_SOURCES = uniconv/test-u32-strconv-from-enc.c +test_u32_strconv_from_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u32-strconv-from-enc.c + +## end gnulib module uniconv/u32-strconv-from-enc-tests + +## begin gnulib module uniconv/u32-strconv-to-enc-tests + +TESTS += test-u32-strconv-to-enc +check_PROGRAMS += test-u32-strconv-to-enc +test_u32_strconv_to_enc_SOURCES = uniconv/test-u32-strconv-to-enc.c +test_u32_strconv_to_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u32-strconv-to-enc.c + +## end gnulib module uniconv/u32-strconv-to-enc-tests + +## begin gnulib module uniconv/u8-conv-from-enc-tests + +TESTS += test-u8-conv-from-enc +check_PROGRAMS += test-u8-conv-from-enc +test_u8_conv_from_enc_SOURCES = uniconv/test-u8-conv-from-enc.c +test_u8_conv_from_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u8-conv-from-enc.c + +## end gnulib module uniconv/u8-conv-from-enc-tests + +## begin gnulib module uniconv/u8-conv-to-enc-tests + +TESTS += test-u8-conv-to-enc +check_PROGRAMS += test-u8-conv-to-enc +test_u8_conv_to_enc_SOURCES = uniconv/test-u8-conv-to-enc.c +test_u8_conv_to_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u8-conv-to-enc.c + +## end gnulib module uniconv/u8-conv-to-enc-tests + +## begin gnulib module uniconv/u8-strconv-from-enc-tests + +TESTS += test-u8-strconv-from-enc +check_PROGRAMS += test-u8-strconv-from-enc +test_u8_strconv_from_enc_SOURCES = uniconv/test-u8-strconv-from-enc.c +test_u8_strconv_from_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u8-strconv-from-enc.c + +## end gnulib module uniconv/u8-strconv-from-enc-tests + +## begin gnulib module uniconv/u8-strconv-to-enc-tests + +TESTS += test-u8-strconv-to-enc +check_PROGRAMS += test-u8-strconv-to-enc +test_u8_strconv_to_enc_SOURCES = uniconv/test-u8-strconv-to-enc.c +test_u8_strconv_to_enc_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniconv/test-u8-strconv-to-enc.c + +## end gnulib module uniconv/u8-strconv-to-enc-tests + +## begin gnulib module unictype/bidicategory-byname-tests + +TESTS += test-bidi_byname +check_PROGRAMS += test-bidi_byname +test_bidi_byname_SOURCES = unictype/test-bidi_byname.c + +EXTRA_DIST += unictype/test-bidi_byname.c + +## end gnulib module unictype/bidicategory-byname-tests + +## begin gnulib module unictype/bidicategory-name-tests + +TESTS += test-bidi_name +check_PROGRAMS += test-bidi_name +test_bidi_name_SOURCES = unictype/test-bidi_name.c + +EXTRA_DIST += unictype/test-bidi_name.c + +## end gnulib module unictype/bidicategory-name-tests + +## begin gnulib module unictype/bidicategory-of-tests + +TESTS += test-bidi_of +check_PROGRAMS += test-bidi_of +test_bidi_of_SOURCES = unictype/test-bidi_of.c + +EXTRA_DIST += unictype/test-bidi_of.c + +## end gnulib module unictype/bidicategory-of-tests + +## begin gnulib module unictype/bidicategory-test-tests + +TESTS += test-bidi_test +check_PROGRAMS += test-bidi_test +test_bidi_test_SOURCES = unictype/test-bidi_test.c + +EXTRA_DIST += unictype/test-bidi_test.c + +## end gnulib module unictype/bidicategory-test-tests + +## begin gnulib module unictype/block-list-tests + +TESTS += test-block_list +check_PROGRAMS += test-block_list +test_block_list_SOURCES = unictype/test-block_list.c + +EXTRA_DIST += unictype/test-block_list.c + +## end gnulib module unictype/block-list-tests + +## begin gnulib module unictype/block-of-tests + +TESTS += test-block_of +check_PROGRAMS += test-block_of +test_block_of_SOURCES = unictype/test-block_of.c + +EXTRA_DIST += unictype/test-block_of.c + +## end gnulib module unictype/block-of-tests + +## begin gnulib module unictype/block-test-tests + +TESTS += test-block_test +check_PROGRAMS += test-block_test +test_block_test_SOURCES = unictype/test-block_test.c + +EXTRA_DIST += unictype/test-block_test.c + +## end gnulib module unictype/block-test-tests + +## begin gnulib module unictype/category-C-tests + +TESTS += test-categ_C +check_PROGRAMS += test-categ_C +test_categ_C_SOURCES = unictype/test-categ_C.c + +EXTRA_DIST += unictype/test-categ_C.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-C-tests + +## begin gnulib module unictype/category-Cc-tests + +TESTS += test-categ_Cc +check_PROGRAMS += test-categ_Cc +test_categ_Cc_SOURCES = unictype/test-categ_Cc.c + +EXTRA_DIST += unictype/test-categ_Cc.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Cc-tests + +## begin gnulib module unictype/category-Cf-tests + +TESTS += test-categ_Cf +check_PROGRAMS += test-categ_Cf +test_categ_Cf_SOURCES = unictype/test-categ_Cf.c + +EXTRA_DIST += unictype/test-categ_Cf.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Cf-tests + +## begin gnulib module unictype/category-Cn-tests + +TESTS += test-categ_Cn +check_PROGRAMS += test-categ_Cn +test_categ_Cn_SOURCES = unictype/test-categ_Cn.c + +EXTRA_DIST += unictype/test-categ_Cn.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Cn-tests + +## begin gnulib module unictype/category-Co-tests + +TESTS += test-categ_Co +check_PROGRAMS += test-categ_Co +test_categ_Co_SOURCES = unictype/test-categ_Co.c + +EXTRA_DIST += unictype/test-categ_Co.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Co-tests + +## begin gnulib module unictype/category-Cs-tests + +TESTS += test-categ_Cs +check_PROGRAMS += test-categ_Cs +test_categ_Cs_SOURCES = unictype/test-categ_Cs.c + +EXTRA_DIST += unictype/test-categ_Cs.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Cs-tests + +## begin gnulib module unictype/category-L-tests + +TESTS += test-categ_L +check_PROGRAMS += test-categ_L +test_categ_L_SOURCES = unictype/test-categ_L.c + +EXTRA_DIST += unictype/test-categ_L.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-L-tests + +## begin gnulib module unictype/category-Ll-tests + +TESTS += test-categ_Ll +check_PROGRAMS += test-categ_Ll +test_categ_Ll_SOURCES = unictype/test-categ_Ll.c + +EXTRA_DIST += unictype/test-categ_Ll.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Ll-tests + +## begin gnulib module unictype/category-Lm-tests + +TESTS += test-categ_Lm +check_PROGRAMS += test-categ_Lm +test_categ_Lm_SOURCES = unictype/test-categ_Lm.c + +EXTRA_DIST += unictype/test-categ_Lm.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Lm-tests + +## begin gnulib module unictype/category-Lo-tests + +TESTS += test-categ_Lo +check_PROGRAMS += test-categ_Lo +test_categ_Lo_SOURCES = unictype/test-categ_Lo.c + +EXTRA_DIST += unictype/test-categ_Lo.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Lo-tests + +## begin gnulib module unictype/category-Lt-tests + +TESTS += test-categ_Lt +check_PROGRAMS += test-categ_Lt +test_categ_Lt_SOURCES = unictype/test-categ_Lt.c + +EXTRA_DIST += unictype/test-categ_Lt.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Lt-tests + +## begin gnulib module unictype/category-Lu-tests + +TESTS += test-categ_Lu +check_PROGRAMS += test-categ_Lu +test_categ_Lu_SOURCES = unictype/test-categ_Lu.c + +EXTRA_DIST += unictype/test-categ_Lu.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Lu-tests + +## begin gnulib module unictype/category-M-tests + +TESTS += test-categ_M +check_PROGRAMS += test-categ_M +test_categ_M_SOURCES = unictype/test-categ_M.c + +EXTRA_DIST += unictype/test-categ_M.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-M-tests + +## begin gnulib module unictype/category-Mc-tests + +TESTS += test-categ_Mc +check_PROGRAMS += test-categ_Mc +test_categ_Mc_SOURCES = unictype/test-categ_Mc.c + +EXTRA_DIST += unictype/test-categ_Mc.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Mc-tests + +## begin gnulib module unictype/category-Me-tests + +TESTS += test-categ_Me +check_PROGRAMS += test-categ_Me +test_categ_Me_SOURCES = unictype/test-categ_Me.c + +EXTRA_DIST += unictype/test-categ_Me.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Me-tests + +## begin gnulib module unictype/category-Mn-tests + +TESTS += test-categ_Mn +check_PROGRAMS += test-categ_Mn +test_categ_Mn_SOURCES = unictype/test-categ_Mn.c + +EXTRA_DIST += unictype/test-categ_Mn.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Mn-tests + +## begin gnulib module unictype/category-N-tests + +TESTS += test-categ_N +check_PROGRAMS += test-categ_N +test_categ_N_SOURCES = unictype/test-categ_N.c + +EXTRA_DIST += unictype/test-categ_N.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-N-tests + +## begin gnulib module unictype/category-Nd-tests + +TESTS += test-categ_Nd +check_PROGRAMS += test-categ_Nd +test_categ_Nd_SOURCES = unictype/test-categ_Nd.c + +EXTRA_DIST += unictype/test-categ_Nd.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Nd-tests + +## begin gnulib module unictype/category-Nl-tests + +TESTS += test-categ_Nl +check_PROGRAMS += test-categ_Nl +test_categ_Nl_SOURCES = unictype/test-categ_Nl.c + +EXTRA_DIST += unictype/test-categ_Nl.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Nl-tests + +## begin gnulib module unictype/category-No-tests + +TESTS += test-categ_No +check_PROGRAMS += test-categ_No +test_categ_No_SOURCES = unictype/test-categ_No.c + +EXTRA_DIST += unictype/test-categ_No.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-No-tests + +## begin gnulib module unictype/category-P-tests + +TESTS += test-categ_P +check_PROGRAMS += test-categ_P +test_categ_P_SOURCES = unictype/test-categ_P.c + +EXTRA_DIST += unictype/test-categ_P.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-P-tests + +## begin gnulib module unictype/category-Pc-tests + +TESTS += test-categ_Pc +check_PROGRAMS += test-categ_Pc +test_categ_Pc_SOURCES = unictype/test-categ_Pc.c + +EXTRA_DIST += unictype/test-categ_Pc.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Pc-tests + +## begin gnulib module unictype/category-Pd-tests + +TESTS += test-categ_Pd +check_PROGRAMS += test-categ_Pd +test_categ_Pd_SOURCES = unictype/test-categ_Pd.c + +EXTRA_DIST += unictype/test-categ_Pd.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Pd-tests + +## begin gnulib module unictype/category-Pe-tests + +TESTS += test-categ_Pe +check_PROGRAMS += test-categ_Pe +test_categ_Pe_SOURCES = unictype/test-categ_Pe.c + +EXTRA_DIST += unictype/test-categ_Pe.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Pe-tests + +## begin gnulib module unictype/category-Pf-tests + +TESTS += test-categ_Pf +check_PROGRAMS += test-categ_Pf +test_categ_Pf_SOURCES = unictype/test-categ_Pf.c + +EXTRA_DIST += unictype/test-categ_Pf.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Pf-tests + +## begin gnulib module unictype/category-Pi-tests + +TESTS += test-categ_Pi +check_PROGRAMS += test-categ_Pi +test_categ_Pi_SOURCES = unictype/test-categ_Pi.c + +EXTRA_DIST += unictype/test-categ_Pi.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Pi-tests + +## begin gnulib module unictype/category-Po-tests + +TESTS += test-categ_Po +check_PROGRAMS += test-categ_Po +test_categ_Po_SOURCES = unictype/test-categ_Po.c + +EXTRA_DIST += unictype/test-categ_Po.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Po-tests + +## begin gnulib module unictype/category-Ps-tests + +TESTS += test-categ_Ps +check_PROGRAMS += test-categ_Ps +test_categ_Ps_SOURCES = unictype/test-categ_Ps.c + +EXTRA_DIST += unictype/test-categ_Ps.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Ps-tests + +## begin gnulib module unictype/category-S-tests + +TESTS += test-categ_S +check_PROGRAMS += test-categ_S +test_categ_S_SOURCES = unictype/test-categ_S.c + +EXTRA_DIST += unictype/test-categ_S.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-S-tests + +## begin gnulib module unictype/category-Sc-tests + +TESTS += test-categ_Sc +check_PROGRAMS += test-categ_Sc +test_categ_Sc_SOURCES = unictype/test-categ_Sc.c + +EXTRA_DIST += unictype/test-categ_Sc.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Sc-tests + +## begin gnulib module unictype/category-Sk-tests + +TESTS += test-categ_Sk +check_PROGRAMS += test-categ_Sk +test_categ_Sk_SOURCES = unictype/test-categ_Sk.c + +EXTRA_DIST += unictype/test-categ_Sk.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Sk-tests + +## begin gnulib module unictype/category-Sm-tests + +TESTS += test-categ_Sm +check_PROGRAMS += test-categ_Sm +test_categ_Sm_SOURCES = unictype/test-categ_Sm.c + +EXTRA_DIST += unictype/test-categ_Sm.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Sm-tests + +## begin gnulib module unictype/category-So-tests + +TESTS += test-categ_So +check_PROGRAMS += test-categ_So +test_categ_So_SOURCES = unictype/test-categ_So.c + +EXTRA_DIST += unictype/test-categ_So.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-So-tests + +## begin gnulib module unictype/category-Z-tests + +TESTS += test-categ_Z +check_PROGRAMS += test-categ_Z +test_categ_Z_SOURCES = unictype/test-categ_Z.c + +EXTRA_DIST += unictype/test-categ_Z.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Z-tests + +## begin gnulib module unictype/category-Zl-tests + +TESTS += test-categ_Zl +check_PROGRAMS += test-categ_Zl +test_categ_Zl_SOURCES = unictype/test-categ_Zl.c + +EXTRA_DIST += unictype/test-categ_Zl.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Zl-tests + +## begin gnulib module unictype/category-Zp-tests + +TESTS += test-categ_Zp +check_PROGRAMS += test-categ_Zp +test_categ_Zp_SOURCES = unictype/test-categ_Zp.c + +EXTRA_DIST += unictype/test-categ_Zp.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Zp-tests + +## begin gnulib module unictype/category-Zs-tests + +TESTS += test-categ_Zs +check_PROGRAMS += test-categ_Zs +test_categ_Zs_SOURCES = unictype/test-categ_Zs.c + +EXTRA_DIST += unictype/test-categ_Zs.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/category-Zs-tests + +## begin gnulib module unictype/category-and-not-tests + +TESTS += test-categ_and_not +check_PROGRAMS += test-categ_and_not +test_categ_and_not_SOURCES = unictype/test-categ_and_not.c + +EXTRA_DIST += unictype/test-categ_and_not.c + +## end gnulib module unictype/category-and-not-tests + +## begin gnulib module unictype/category-and-tests + +TESTS += test-categ_and +check_PROGRAMS += test-categ_and +test_categ_and_SOURCES = unictype/test-categ_and.c + +EXTRA_DIST += unictype/test-categ_and.c + +## end gnulib module unictype/category-and-tests + +## begin gnulib module unictype/category-byname-tests + +TESTS += test-categ_byname +check_PROGRAMS += test-categ_byname +test_categ_byname_SOURCES = unictype/test-categ_byname.c + +EXTRA_DIST += unictype/test-categ_byname.c + +## end gnulib module unictype/category-byname-tests + +## begin gnulib module unictype/category-name-tests + +TESTS += test-categ_name +check_PROGRAMS += test-categ_name +test_categ_name_SOURCES = unictype/test-categ_name.c + +EXTRA_DIST += unictype/test-categ_name.c + +## end gnulib module unictype/category-name-tests + +## begin gnulib module unictype/category-none-tests + +if !WOE32DLL +TESTS += test-categ_none +check_PROGRAMS += test-categ_none +test_categ_none_SOURCES = unictype/test-categ_none.c +endif + +EXTRA_DIST += unictype/test-categ_none.c + +## end gnulib module unictype/category-none-tests + +## begin gnulib module unictype/category-of-tests + +TESTS += test-categ_of +check_PROGRAMS += test-categ_of +test_categ_of_SOURCES = unictype/test-categ_of.c + +EXTRA_DIST += unictype/test-categ_of.c + +## end gnulib module unictype/category-of-tests + +## begin gnulib module unictype/category-or-tests + +TESTS += test-categ_or +check_PROGRAMS += test-categ_or +test_categ_or_SOURCES = unictype/test-categ_or.c + +EXTRA_DIST += unictype/test-categ_or.c + +## end gnulib module unictype/category-or-tests + +## begin gnulib module unictype/category-test-withtable-tests + +TESTS += test-categ_test_withtable +check_PROGRAMS += test-categ_test_withtable +test_categ_test_withtable_SOURCES = unictype/test-categ_test_withtable.c + +EXTRA_DIST += unictype/test-categ_test_withtable.c + +## end gnulib module unictype/category-test-withtable-tests + +## begin gnulib module unictype/combining-class-tests + +TESTS += test-combining +check_PROGRAMS += test-combining +test_combining_SOURCES = unictype/test-combining.c + +EXTRA_DIST += unictype/test-combining.c + +## end gnulib module unictype/combining-class-tests + +## begin gnulib module unictype/ctype-alnum-tests + +TESTS += test-ctype_alnum +check_PROGRAMS += test-ctype_alnum +test_ctype_alnum_SOURCES = unictype/test-ctype_alnum.c + +EXTRA_DIST += unictype/test-ctype_alnum.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-alnum-tests + +## begin gnulib module unictype/ctype-alpha-tests + +TESTS += test-ctype_alpha +check_PROGRAMS += test-ctype_alpha +test_ctype_alpha_SOURCES = unictype/test-ctype_alpha.c + +EXTRA_DIST += unictype/test-ctype_alpha.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-alpha-tests + +## begin gnulib module unictype/ctype-blank-tests + +TESTS += test-ctype_blank +check_PROGRAMS += test-ctype_blank +test_ctype_blank_SOURCES = unictype/test-ctype_blank.c + +EXTRA_DIST += unictype/test-ctype_blank.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-blank-tests + +## begin gnulib module unictype/ctype-cntrl-tests + +TESTS += test-ctype_cntrl +check_PROGRAMS += test-ctype_cntrl +test_ctype_cntrl_SOURCES = unictype/test-ctype_cntrl.c + +EXTRA_DIST += unictype/test-ctype_cntrl.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-cntrl-tests + +## begin gnulib module unictype/ctype-digit-tests + +TESTS += test-ctype_digit +check_PROGRAMS += test-ctype_digit +test_ctype_digit_SOURCES = unictype/test-ctype_digit.c + +EXTRA_DIST += unictype/test-ctype_digit.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-digit-tests + +## begin gnulib module unictype/ctype-graph-tests + +TESTS += test-ctype_graph +check_PROGRAMS += test-ctype_graph +test_ctype_graph_SOURCES = unictype/test-ctype_graph.c + +EXTRA_DIST += unictype/test-ctype_graph.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-graph-tests + +## begin gnulib module unictype/ctype-lower-tests + +TESTS += test-ctype_lower +check_PROGRAMS += test-ctype_lower +test_ctype_lower_SOURCES = unictype/test-ctype_lower.c + +EXTRA_DIST += unictype/test-ctype_lower.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-lower-tests + +## begin gnulib module unictype/ctype-print-tests + +TESTS += test-ctype_print +check_PROGRAMS += test-ctype_print +test_ctype_print_SOURCES = unictype/test-ctype_print.c + +EXTRA_DIST += unictype/test-ctype_print.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-print-tests + +## begin gnulib module unictype/ctype-punct-tests + +TESTS += test-ctype_punct +check_PROGRAMS += test-ctype_punct +test_ctype_punct_SOURCES = unictype/test-ctype_punct.c + +EXTRA_DIST += unictype/test-ctype_punct.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-punct-tests + +## begin gnulib module unictype/ctype-space-tests + +TESTS += test-ctype_space +check_PROGRAMS += test-ctype_space +test_ctype_space_SOURCES = unictype/test-ctype_space.c + +EXTRA_DIST += unictype/test-ctype_space.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-space-tests + +## begin gnulib module unictype/ctype-upper-tests + +TESTS += test-ctype_upper +check_PROGRAMS += test-ctype_upper +test_ctype_upper_SOURCES = unictype/test-ctype_upper.c + +EXTRA_DIST += unictype/test-ctype_upper.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-upper-tests + +## begin gnulib module unictype/ctype-xdigit-tests + +TESTS += test-ctype_xdigit +check_PROGRAMS += test-ctype_xdigit +test_ctype_xdigit_SOURCES = unictype/test-ctype_xdigit.c + +EXTRA_DIST += unictype/test-ctype_xdigit.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/ctype-xdigit-tests + +## begin gnulib module unictype/decimal-digit-tests + +TESTS += test-decdigit +check_PROGRAMS += test-decdigit +test_decdigit_SOURCES = unictype/test-decdigit.c + +EXTRA_DIST += unictype/test-decdigit.c unictype/test-decdigit.h + +## end gnulib module unictype/decimal-digit-tests + +## begin gnulib module unictype/digit-tests + +TESTS += test-digit +check_PROGRAMS += test-digit +test_digit_SOURCES = unictype/test-digit.c + +EXTRA_DIST += unictype/test-digit.c unictype/test-digit.h + +## end gnulib module unictype/digit-tests + +## begin gnulib module unictype/mirror-tests + +TESTS += test-mirror +check_PROGRAMS += test-mirror +test_mirror_SOURCES = unictype/test-mirror.c + +EXTRA_DIST += unictype/test-mirror.c + +## end gnulib module unictype/mirror-tests + +## begin gnulib module unictype/numeric-tests + +TESTS += test-numeric +check_PROGRAMS += test-numeric +test_numeric_SOURCES = unictype/test-numeric.c + +EXTRA_DIST += unictype/test-numeric.c unictype/test-numeric.h + +## end gnulib module unictype/numeric-tests + +## begin gnulib module unictype/property-alphabetic-tests + +TESTS += test-pr_alphabetic +check_PROGRAMS += test-pr_alphabetic +test_pr_alphabetic_SOURCES = unictype/test-pr_alphabetic.c + +EXTRA_DIST += unictype/test-pr_alphabetic.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-alphabetic-tests + +## begin gnulib module unictype/property-ascii-hex-digit-tests + +TESTS += test-pr_ascii_hex_digit +check_PROGRAMS += test-pr_ascii_hex_digit +test_pr_ascii_hex_digit_SOURCES = unictype/test-pr_ascii_hex_digit.c + +EXTRA_DIST += unictype/test-pr_ascii_hex_digit.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-ascii-hex-digit-tests + +## begin gnulib module unictype/property-bidi-arabic-digit-tests + +TESTS += test-pr_bidi_arabic_digit +check_PROGRAMS += test-pr_bidi_arabic_digit +test_pr_bidi_arabic_digit_SOURCES = unictype/test-pr_bidi_arabic_digit.c + +EXTRA_DIST += unictype/test-pr_bidi_arabic_digit.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-arabic-digit-tests + +## begin gnulib module unictype/property-bidi-arabic-right-to-left-tests + +TESTS += test-pr_bidi_arabic_right_to_left +check_PROGRAMS += test-pr_bidi_arabic_right_to_left +test_pr_bidi_arabic_right_to_left_SOURCES = unictype/test-pr_bidi_arabic_right_to_left.c + +EXTRA_DIST += unictype/test-pr_bidi_arabic_right_to_left.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-arabic-right-to-left-tests + +## begin gnulib module unictype/property-bidi-block-separator-tests + +TESTS += test-pr_bidi_block_separator +check_PROGRAMS += test-pr_bidi_block_separator +test_pr_bidi_block_separator_SOURCES = unictype/test-pr_bidi_block_separator.c + +EXTRA_DIST += unictype/test-pr_bidi_block_separator.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-block-separator-tests + +## begin gnulib module unictype/property-bidi-boundary-neutral-tests + +TESTS += test-pr_bidi_boundary_neutral +check_PROGRAMS += test-pr_bidi_boundary_neutral +test_pr_bidi_boundary_neutral_SOURCES = unictype/test-pr_bidi_boundary_neutral.c + +EXTRA_DIST += unictype/test-pr_bidi_boundary_neutral.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-boundary-neutral-tests + +## begin gnulib module unictype/property-bidi-common-separator-tests + +TESTS += test-pr_bidi_common_separator +check_PROGRAMS += test-pr_bidi_common_separator +test_pr_bidi_common_separator_SOURCES = unictype/test-pr_bidi_common_separator.c + +EXTRA_DIST += unictype/test-pr_bidi_common_separator.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-common-separator-tests + +## begin gnulib module unictype/property-bidi-control-tests + +TESTS += test-pr_bidi_control +check_PROGRAMS += test-pr_bidi_control +test_pr_bidi_control_SOURCES = unictype/test-pr_bidi_control.c + +EXTRA_DIST += unictype/test-pr_bidi_control.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-control-tests + +## begin gnulib module unictype/property-bidi-embedding-or-override-tests + +TESTS += test-pr_bidi_embedding_or_override +check_PROGRAMS += test-pr_bidi_embedding_or_override +test_pr_bidi_embedding_or_override_SOURCES = unictype/test-pr_bidi_embedding_or_override.c + +EXTRA_DIST += unictype/test-pr_bidi_embedding_or_override.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-embedding-or-override-tests + +## begin gnulib module unictype/property-bidi-eur-num-separator-tests + +TESTS += test-pr_bidi_eur_num_separator +check_PROGRAMS += test-pr_bidi_eur_num_separator +test_pr_bidi_eur_num_separator_SOURCES = unictype/test-pr_bidi_eur_num_separator.c + +EXTRA_DIST += unictype/test-pr_bidi_eur_num_separator.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-eur-num-separator-tests + +## begin gnulib module unictype/property-bidi-eur-num-terminator-tests + +TESTS += test-pr_bidi_eur_num_terminator +check_PROGRAMS += test-pr_bidi_eur_num_terminator +test_pr_bidi_eur_num_terminator_SOURCES = unictype/test-pr_bidi_eur_num_terminator.c + +EXTRA_DIST += unictype/test-pr_bidi_eur_num_terminator.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-eur-num-terminator-tests + +## begin gnulib module unictype/property-bidi-european-digit-tests + +TESTS += test-pr_bidi_european_digit +check_PROGRAMS += test-pr_bidi_european_digit +test_pr_bidi_european_digit_SOURCES = unictype/test-pr_bidi_european_digit.c + +EXTRA_DIST += unictype/test-pr_bidi_european_digit.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-european-digit-tests + +## begin gnulib module unictype/property-bidi-hebrew-right-to-left-tests + +TESTS += test-pr_bidi_hebrew_right_to_left +check_PROGRAMS += test-pr_bidi_hebrew_right_to_left +test_pr_bidi_hebrew_right_to_left_SOURCES = unictype/test-pr_bidi_hebrew_right_to_left.c + +EXTRA_DIST += unictype/test-pr_bidi_hebrew_right_to_left.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-hebrew-right-to-left-tests + +## begin gnulib module unictype/property-bidi-left-to-right-tests + +TESTS += test-pr_bidi_left_to_right +check_PROGRAMS += test-pr_bidi_left_to_right +test_pr_bidi_left_to_right_SOURCES = unictype/test-pr_bidi_left_to_right.c + +EXTRA_DIST += unictype/test-pr_bidi_left_to_right.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-left-to-right-tests + +## begin gnulib module unictype/property-bidi-non-spacing-mark-tests + +TESTS += test-pr_bidi_non_spacing_mark +check_PROGRAMS += test-pr_bidi_non_spacing_mark +test_pr_bidi_non_spacing_mark_SOURCES = unictype/test-pr_bidi_non_spacing_mark.c + +EXTRA_DIST += unictype/test-pr_bidi_non_spacing_mark.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-non-spacing-mark-tests + +## begin gnulib module unictype/property-bidi-other-neutral-tests + +TESTS += test-pr_bidi_other_neutral +check_PROGRAMS += test-pr_bidi_other_neutral +test_pr_bidi_other_neutral_SOURCES = unictype/test-pr_bidi_other_neutral.c + +EXTRA_DIST += unictype/test-pr_bidi_other_neutral.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-other-neutral-tests + +## begin gnulib module unictype/property-bidi-pdf-tests + +TESTS += test-pr_bidi_pdf +check_PROGRAMS += test-pr_bidi_pdf +test_pr_bidi_pdf_SOURCES = unictype/test-pr_bidi_pdf.c + +EXTRA_DIST += unictype/test-pr_bidi_pdf.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-pdf-tests + +## begin gnulib module unictype/property-bidi-segment-separator-tests + +TESTS += test-pr_bidi_segment_separator +check_PROGRAMS += test-pr_bidi_segment_separator +test_pr_bidi_segment_separator_SOURCES = unictype/test-pr_bidi_segment_separator.c + +EXTRA_DIST += unictype/test-pr_bidi_segment_separator.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-segment-separator-tests + +## begin gnulib module unictype/property-bidi-whitespace-tests + +TESTS += test-pr_bidi_whitespace +check_PROGRAMS += test-pr_bidi_whitespace +test_pr_bidi_whitespace_SOURCES = unictype/test-pr_bidi_whitespace.c + +EXTRA_DIST += unictype/test-pr_bidi_whitespace.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-bidi-whitespace-tests + +## begin gnulib module unictype/property-byname-tests + +TESTS += test-pr_byname +check_PROGRAMS += test-pr_byname +test_pr_byname_SOURCES = unictype/test-pr_byname.c + +EXTRA_DIST += unictype/test-pr_byname.c + +## end gnulib module unictype/property-byname-tests + +## begin gnulib module unictype/property-combining-tests + +TESTS += test-pr_combining +check_PROGRAMS += test-pr_combining +test_pr_combining_SOURCES = unictype/test-pr_combining.c + +EXTRA_DIST += unictype/test-pr_combining.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-combining-tests + +## begin gnulib module unictype/property-composite-tests + +TESTS += test-pr_composite +check_PROGRAMS += test-pr_composite +test_pr_composite_SOURCES = unictype/test-pr_composite.c + +EXTRA_DIST += unictype/test-pr_composite.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-composite-tests + +## begin gnulib module unictype/property-currency-symbol-tests + +TESTS += test-pr_currency_symbol +check_PROGRAMS += test-pr_currency_symbol +test_pr_currency_symbol_SOURCES = unictype/test-pr_currency_symbol.c + +EXTRA_DIST += unictype/test-pr_currency_symbol.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-currency-symbol-tests + +## begin gnulib module unictype/property-dash-tests + +TESTS += test-pr_dash +check_PROGRAMS += test-pr_dash +test_pr_dash_SOURCES = unictype/test-pr_dash.c + +EXTRA_DIST += unictype/test-pr_dash.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-dash-tests + +## begin gnulib module unictype/property-decimal-digit-tests + +TESTS += test-pr_decimal_digit +check_PROGRAMS += test-pr_decimal_digit +test_pr_decimal_digit_SOURCES = unictype/test-pr_decimal_digit.c + +EXTRA_DIST += unictype/test-pr_decimal_digit.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-decimal-digit-tests + +## begin gnulib module unictype/property-default-ignorable-code-point-tests + +TESTS += test-pr_default_ignorable_code_point +check_PROGRAMS += test-pr_default_ignorable_code_point +test_pr_default_ignorable_code_point_SOURCES = unictype/test-pr_default_ignorable_code_point.c + +EXTRA_DIST += unictype/test-pr_default_ignorable_code_point.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-default-ignorable-code-point-tests + +## begin gnulib module unictype/property-deprecated-tests + +TESTS += test-pr_deprecated +check_PROGRAMS += test-pr_deprecated +test_pr_deprecated_SOURCES = unictype/test-pr_deprecated.c + +EXTRA_DIST += unictype/test-pr_deprecated.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-deprecated-tests + +## begin gnulib module unictype/property-diacritic-tests + +TESTS += test-pr_diacritic +check_PROGRAMS += test-pr_diacritic +test_pr_diacritic_SOURCES = unictype/test-pr_diacritic.c + +EXTRA_DIST += unictype/test-pr_diacritic.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-diacritic-tests + +## begin gnulib module unictype/property-extender-tests + +TESTS += test-pr_extender +check_PROGRAMS += test-pr_extender +test_pr_extender_SOURCES = unictype/test-pr_extender.c + +EXTRA_DIST += unictype/test-pr_extender.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-extender-tests + +## begin gnulib module unictype/property-format-control-tests + +TESTS += test-pr_format_control +check_PROGRAMS += test-pr_format_control +test_pr_format_control_SOURCES = unictype/test-pr_format_control.c + +EXTRA_DIST += unictype/test-pr_format_control.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-format-control-tests + +## begin gnulib module unictype/property-grapheme-base-tests + +TESTS += test-pr_grapheme_base +check_PROGRAMS += test-pr_grapheme_base +test_pr_grapheme_base_SOURCES = unictype/test-pr_grapheme_base.c + +EXTRA_DIST += unictype/test-pr_grapheme_base.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-grapheme-base-tests + +## begin gnulib module unictype/property-grapheme-extend-tests + +TESTS += test-pr_grapheme_extend +check_PROGRAMS += test-pr_grapheme_extend +test_pr_grapheme_extend_SOURCES = unictype/test-pr_grapheme_extend.c + +EXTRA_DIST += unictype/test-pr_grapheme_extend.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-grapheme-extend-tests + +## begin gnulib module unictype/property-grapheme-link-tests + +TESTS += test-pr_grapheme_link +check_PROGRAMS += test-pr_grapheme_link +test_pr_grapheme_link_SOURCES = unictype/test-pr_grapheme_link.c + +EXTRA_DIST += unictype/test-pr_grapheme_link.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-grapheme-link-tests + +## begin gnulib module unictype/property-hex-digit-tests + +TESTS += test-pr_hex_digit +check_PROGRAMS += test-pr_hex_digit +test_pr_hex_digit_SOURCES = unictype/test-pr_hex_digit.c + +EXTRA_DIST += unictype/test-pr_hex_digit.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-hex-digit-tests + +## begin gnulib module unictype/property-hyphen-tests + +TESTS += test-pr_hyphen +check_PROGRAMS += test-pr_hyphen +test_pr_hyphen_SOURCES = unictype/test-pr_hyphen.c + +EXTRA_DIST += unictype/test-pr_hyphen.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-hyphen-tests + +## begin gnulib module unictype/property-id-continue-tests + +TESTS += test-pr_id_continue +check_PROGRAMS += test-pr_id_continue +test_pr_id_continue_SOURCES = unictype/test-pr_id_continue.c + +EXTRA_DIST += unictype/test-pr_id_continue.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-id-continue-tests + +## begin gnulib module unictype/property-id-start-tests + +TESTS += test-pr_id_start +check_PROGRAMS += test-pr_id_start +test_pr_id_start_SOURCES = unictype/test-pr_id_start.c + +EXTRA_DIST += unictype/test-pr_id_start.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-id-start-tests + +## begin gnulib module unictype/property-ideographic-tests + +TESTS += test-pr_ideographic +check_PROGRAMS += test-pr_ideographic +test_pr_ideographic_SOURCES = unictype/test-pr_ideographic.c + +EXTRA_DIST += unictype/test-pr_ideographic.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-ideographic-tests + +## begin gnulib module unictype/property-ids-binary-operator-tests + +TESTS += test-pr_ids_binary_operator +check_PROGRAMS += test-pr_ids_binary_operator +test_pr_ids_binary_operator_SOURCES = unictype/test-pr_ids_binary_operator.c + +EXTRA_DIST += unictype/test-pr_ids_binary_operator.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-ids-binary-operator-tests + +## begin gnulib module unictype/property-ids-trinary-operator-tests + +TESTS += test-pr_ids_trinary_operator +check_PROGRAMS += test-pr_ids_trinary_operator +test_pr_ids_trinary_operator_SOURCES = unictype/test-pr_ids_trinary_operator.c + +EXTRA_DIST += unictype/test-pr_ids_trinary_operator.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-ids-trinary-operator-tests + +## begin gnulib module unictype/property-ignorable-control-tests + +TESTS += test-pr_ignorable_control +check_PROGRAMS += test-pr_ignorable_control +test_pr_ignorable_control_SOURCES = unictype/test-pr_ignorable_control.c + +EXTRA_DIST += unictype/test-pr_ignorable_control.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-ignorable-control-tests + +## begin gnulib module unictype/property-iso-control-tests + +TESTS += test-pr_iso_control +check_PROGRAMS += test-pr_iso_control +test_pr_iso_control_SOURCES = unictype/test-pr_iso_control.c + +EXTRA_DIST += unictype/test-pr_iso_control.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-iso-control-tests + +## begin gnulib module unictype/property-join-control-tests + +TESTS += test-pr_join_control +check_PROGRAMS += test-pr_join_control +test_pr_join_control_SOURCES = unictype/test-pr_join_control.c + +EXTRA_DIST += unictype/test-pr_join_control.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-join-control-tests + +## begin gnulib module unictype/property-left-of-pair-tests + +TESTS += test-pr_left_of_pair +check_PROGRAMS += test-pr_left_of_pair +test_pr_left_of_pair_SOURCES = unictype/test-pr_left_of_pair.c + +EXTRA_DIST += unictype/test-pr_left_of_pair.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-left-of-pair-tests + +## begin gnulib module unictype/property-line-separator-tests + +TESTS += test-pr_line_separator +check_PROGRAMS += test-pr_line_separator +test_pr_line_separator_SOURCES = unictype/test-pr_line_separator.c + +EXTRA_DIST += unictype/test-pr_line_separator.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-line-separator-tests + +## begin gnulib module unictype/property-logical-order-exception-tests + +TESTS += test-pr_logical_order_exception +check_PROGRAMS += test-pr_logical_order_exception +test_pr_logical_order_exception_SOURCES = unictype/test-pr_logical_order_exception.c + +EXTRA_DIST += unictype/test-pr_logical_order_exception.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-logical-order-exception-tests + +## begin gnulib module unictype/property-lowercase-tests + +TESTS += test-pr_lowercase +check_PROGRAMS += test-pr_lowercase +test_pr_lowercase_SOURCES = unictype/test-pr_lowercase.c + +EXTRA_DIST += unictype/test-pr_lowercase.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-lowercase-tests + +## begin gnulib module unictype/property-math-tests + +TESTS += test-pr_math +check_PROGRAMS += test-pr_math +test_pr_math_SOURCES = unictype/test-pr_math.c + +EXTRA_DIST += unictype/test-pr_math.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-math-tests + +## begin gnulib module unictype/property-non-break-tests + +TESTS += test-pr_non_break +check_PROGRAMS += test-pr_non_break +test_pr_non_break_SOURCES = unictype/test-pr_non_break.c + +EXTRA_DIST += unictype/test-pr_non_break.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-non-break-tests + +## begin gnulib module unictype/property-not-a-character-tests + +TESTS += test-pr_not_a_character +check_PROGRAMS += test-pr_not_a_character +test_pr_not_a_character_SOURCES = unictype/test-pr_not_a_character.c + +EXTRA_DIST += unictype/test-pr_not_a_character.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-not-a-character-tests + +## begin gnulib module unictype/property-numeric-tests + +TESTS += test-pr_numeric +check_PROGRAMS += test-pr_numeric +test_pr_numeric_SOURCES = unictype/test-pr_numeric.c + +EXTRA_DIST += unictype/test-pr_numeric.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-numeric-tests + +## begin gnulib module unictype/property-other-alphabetic-tests + +TESTS += test-pr_other_alphabetic +check_PROGRAMS += test-pr_other_alphabetic +test_pr_other_alphabetic_SOURCES = unictype/test-pr_other_alphabetic.c + +EXTRA_DIST += unictype/test-pr_other_alphabetic.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-other-alphabetic-tests + +## begin gnulib module unictype/property-other-default-ignorable-code-point-tests + +TESTS += test-pr_other_default_ignorable_code_point +check_PROGRAMS += test-pr_other_default_ignorable_code_point +test_pr_other_default_ignorable_code_point_SOURCES = unictype/test-pr_other_default_ignorable_code_point.c + +EXTRA_DIST += unictype/test-pr_other_default_ignorable_code_point.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-other-default-ignorable-code-point-tests + +## begin gnulib module unictype/property-other-grapheme-extend-tests + +TESTS += test-pr_other_grapheme_extend +check_PROGRAMS += test-pr_other_grapheme_extend +test_pr_other_grapheme_extend_SOURCES = unictype/test-pr_other_grapheme_extend.c + +EXTRA_DIST += unictype/test-pr_other_grapheme_extend.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-other-grapheme-extend-tests + +## begin gnulib module unictype/property-other-id-continue-tests + +TESTS += test-pr_other_id_continue +check_PROGRAMS += test-pr_other_id_continue +test_pr_other_id_continue_SOURCES = unictype/test-pr_other_id_continue.c + +EXTRA_DIST += unictype/test-pr_other_id_continue.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-other-id-continue-tests + +## begin gnulib module unictype/property-other-id-start-tests + +TESTS += test-pr_other_id_start +check_PROGRAMS += test-pr_other_id_start +test_pr_other_id_start_SOURCES = unictype/test-pr_other_id_start.c + +EXTRA_DIST += unictype/test-pr_other_id_start.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-other-id-start-tests + +## begin gnulib module unictype/property-other-lowercase-tests + +TESTS += test-pr_other_lowercase +check_PROGRAMS += test-pr_other_lowercase +test_pr_other_lowercase_SOURCES = unictype/test-pr_other_lowercase.c + +EXTRA_DIST += unictype/test-pr_other_lowercase.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-other-lowercase-tests + +## begin gnulib module unictype/property-other-math-tests + +TESTS += test-pr_other_math +check_PROGRAMS += test-pr_other_math +test_pr_other_math_SOURCES = unictype/test-pr_other_math.c + +EXTRA_DIST += unictype/test-pr_other_math.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-other-math-tests + +## begin gnulib module unictype/property-other-uppercase-tests + +TESTS += test-pr_other_uppercase +check_PROGRAMS += test-pr_other_uppercase +test_pr_other_uppercase_SOURCES = unictype/test-pr_other_uppercase.c + +EXTRA_DIST += unictype/test-pr_other_uppercase.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-other-uppercase-tests + +## begin gnulib module unictype/property-paired-punctuation-tests + +TESTS += test-pr_paired_punctuation +check_PROGRAMS += test-pr_paired_punctuation +test_pr_paired_punctuation_SOURCES = unictype/test-pr_paired_punctuation.c + +EXTRA_DIST += unictype/test-pr_paired_punctuation.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-paired-punctuation-tests + +## begin gnulib module unictype/property-paragraph-separator-tests + +TESTS += test-pr_paragraph_separator +check_PROGRAMS += test-pr_paragraph_separator +test_pr_paragraph_separator_SOURCES = unictype/test-pr_paragraph_separator.c + +EXTRA_DIST += unictype/test-pr_paragraph_separator.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-paragraph-separator-tests + +## begin gnulib module unictype/property-pattern-syntax-tests + +TESTS += test-pr_pattern_syntax +check_PROGRAMS += test-pr_pattern_syntax +test_pr_pattern_syntax_SOURCES = unictype/test-pr_pattern_syntax.c + +EXTRA_DIST += unictype/test-pr_pattern_syntax.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-pattern-syntax-tests + +## begin gnulib module unictype/property-pattern-white-space-tests + +TESTS += test-pr_pattern_white_space +check_PROGRAMS += test-pr_pattern_white_space +test_pr_pattern_white_space_SOURCES = unictype/test-pr_pattern_white_space.c + +EXTRA_DIST += unictype/test-pr_pattern_white_space.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-pattern-white-space-tests + +## begin gnulib module unictype/property-private-use-tests + +TESTS += test-pr_private_use +check_PROGRAMS += test-pr_private_use +test_pr_private_use_SOURCES = unictype/test-pr_private_use.c + +EXTRA_DIST += unictype/test-pr_private_use.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-private-use-tests + +## begin gnulib module unictype/property-punctuation-tests + +TESTS += test-pr_punctuation +check_PROGRAMS += test-pr_punctuation +test_pr_punctuation_SOURCES = unictype/test-pr_punctuation.c + +EXTRA_DIST += unictype/test-pr_punctuation.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-punctuation-tests + +## begin gnulib module unictype/property-quotation-mark-tests + +TESTS += test-pr_quotation_mark +check_PROGRAMS += test-pr_quotation_mark +test_pr_quotation_mark_SOURCES = unictype/test-pr_quotation_mark.c + +EXTRA_DIST += unictype/test-pr_quotation_mark.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-quotation-mark-tests + +## begin gnulib module unictype/property-radical-tests + +TESTS += test-pr_radical +check_PROGRAMS += test-pr_radical +test_pr_radical_SOURCES = unictype/test-pr_radical.c + +EXTRA_DIST += unictype/test-pr_radical.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-radical-tests + +## begin gnulib module unictype/property-sentence-terminal-tests + +TESTS += test-pr_sentence_terminal +check_PROGRAMS += test-pr_sentence_terminal +test_pr_sentence_terminal_SOURCES = unictype/test-pr_sentence_terminal.c + +EXTRA_DIST += unictype/test-pr_sentence_terminal.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-sentence-terminal-tests + +## begin gnulib module unictype/property-soft-dotted-tests + +TESTS += test-pr_soft_dotted +check_PROGRAMS += test-pr_soft_dotted +test_pr_soft_dotted_SOURCES = unictype/test-pr_soft_dotted.c + +EXTRA_DIST += unictype/test-pr_soft_dotted.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-soft-dotted-tests + +## begin gnulib module unictype/property-space-tests + +TESTS += test-pr_space +check_PROGRAMS += test-pr_space +test_pr_space_SOURCES = unictype/test-pr_space.c + +EXTRA_DIST += unictype/test-pr_space.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-space-tests + +## begin gnulib module unictype/property-terminal-punctuation-tests + +TESTS += test-pr_terminal_punctuation +check_PROGRAMS += test-pr_terminal_punctuation +test_pr_terminal_punctuation_SOURCES = unictype/test-pr_terminal_punctuation.c + +EXTRA_DIST += unictype/test-pr_terminal_punctuation.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-terminal-punctuation-tests + +## begin gnulib module unictype/property-test-tests + +TESTS += test-pr_test +check_PROGRAMS += test-pr_test +test_pr_test_SOURCES = unictype/test-pr_test.c + +EXTRA_DIST += unictype/test-pr_test.c + +## end gnulib module unictype/property-test-tests + +## begin gnulib module unictype/property-titlecase-tests + +TESTS += test-pr_titlecase +check_PROGRAMS += test-pr_titlecase +test_pr_titlecase_SOURCES = unictype/test-pr_titlecase.c + +EXTRA_DIST += unictype/test-pr_titlecase.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-titlecase-tests + +## begin gnulib module unictype/property-unassigned-code-value-tests + +TESTS += test-pr_unassigned_code_value +check_PROGRAMS += test-pr_unassigned_code_value +test_pr_unassigned_code_value_SOURCES = unictype/test-pr_unassigned_code_value.c + +EXTRA_DIST += unictype/test-pr_unassigned_code_value.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-unassigned-code-value-tests + +## begin gnulib module unictype/property-unified-ideograph-tests + +TESTS += test-pr_unified_ideograph +check_PROGRAMS += test-pr_unified_ideograph +test_pr_unified_ideograph_SOURCES = unictype/test-pr_unified_ideograph.c + +EXTRA_DIST += unictype/test-pr_unified_ideograph.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-unified-ideograph-tests + +## begin gnulib module unictype/property-uppercase-tests + +TESTS += test-pr_uppercase +check_PROGRAMS += test-pr_uppercase +test_pr_uppercase_SOURCES = unictype/test-pr_uppercase.c + +EXTRA_DIST += unictype/test-pr_uppercase.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-uppercase-tests + +## begin gnulib module unictype/property-variation-selector-tests + +TESTS += test-pr_variation_selector +check_PROGRAMS += test-pr_variation_selector +test_pr_variation_selector_SOURCES = unictype/test-pr_variation_selector.c + +EXTRA_DIST += unictype/test-pr_variation_selector.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-variation-selector-tests + +## begin gnulib module unictype/property-white-space-tests + +TESTS += test-pr_white_space +check_PROGRAMS += test-pr_white_space +test_pr_white_space_SOURCES = unictype/test-pr_white_space.c + +EXTRA_DIST += unictype/test-pr_white_space.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-white-space-tests + +## begin gnulib module unictype/property-xid-continue-tests + +TESTS += test-pr_xid_continue +check_PROGRAMS += test-pr_xid_continue +test_pr_xid_continue_SOURCES = unictype/test-pr_xid_continue.c + +EXTRA_DIST += unictype/test-pr_xid_continue.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-xid-continue-tests + +## begin gnulib module unictype/property-xid-start-tests + +TESTS += test-pr_xid_start +check_PROGRAMS += test-pr_xid_start +test_pr_xid_start_SOURCES = unictype/test-pr_xid_start.c + +EXTRA_DIST += unictype/test-pr_xid_start.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-xid-start-tests + +## begin gnulib module unictype/property-zero-width-tests + +TESTS += test-pr_zero_width +check_PROGRAMS += test-pr_zero_width +test_pr_zero_width_SOURCES = unictype/test-pr_zero_width.c + +EXTRA_DIST += unictype/test-pr_zero_width.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/property-zero-width-tests + +## begin gnulib module unictype/scripts-tests + +TESTS += test-scripts +check_PROGRAMS += test-scripts +test_scripts_SOURCES = unictype/test-scripts.c + +EXTRA_DIST += unictype/test-scripts.c + +## end gnulib module unictype/scripts-tests + +## begin gnulib module unictype/syntax-c-ident-tests + +TESTS += test-sy_c_ident +check_PROGRAMS += test-sy_c_ident +test_sy_c_ident_SOURCES = unictype/test-sy_c_ident.c + +EXTRA_DIST += unictype/test-sy_c_ident.c + +## end gnulib module unictype/syntax-c-ident-tests + +## begin gnulib module unictype/syntax-c-whitespace-tests + +TESTS += test-sy_c_whitespace +check_PROGRAMS += test-sy_c_whitespace +test_sy_c_whitespace_SOURCES = unictype/test-sy_c_whitespace.c + +EXTRA_DIST += unictype/test-sy_c_whitespace.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/syntax-c-whitespace-tests + +## begin gnulib module unictype/syntax-java-ident-tests + +TESTS += test-sy_java_ident +check_PROGRAMS += test-sy_java_ident +test_sy_java_ident_SOURCES = unictype/test-sy_java_ident.c + +EXTRA_DIST += unictype/test-sy_java_ident.c + +## end gnulib module unictype/syntax-java-ident-tests + +## begin gnulib module unictype/syntax-java-whitespace-tests + +TESTS += test-sy_java_whitespace +check_PROGRAMS += test-sy_java_whitespace +test_sy_java_whitespace_SOURCES = unictype/test-sy_java_whitespace.c + +EXTRA_DIST += unictype/test-sy_java_whitespace.c unictype/test-predicate-part1.h unictype/test-predicate-part2.h + +## end gnulib module unictype/syntax-java-whitespace-tests + +## begin gnulib module unilbrk/u16-possible-linebreaks-tests + +TESTS += test-u16-possible-linebreaks +check_PROGRAMS += test-u16-possible-linebreaks +test_u16_possible_linebreaks_SOURCES = unilbrk/test-u16-possible-linebreaks.c + +EXTRA_DIST += unilbrk/test-u16-possible-linebreaks.c + +## end gnulib module unilbrk/u16-possible-linebreaks-tests + +## begin gnulib module unilbrk/u16-width-linebreaks-tests + +TESTS += test-u16-width-linebreaks +check_PROGRAMS += test-u16-width-linebreaks +test_u16_width_linebreaks_SOURCES = unilbrk/test-u16-width-linebreaks.c + +EXTRA_DIST += unilbrk/test-u16-width-linebreaks.c + +## end gnulib module unilbrk/u16-width-linebreaks-tests + +## begin gnulib module unilbrk/u32-possible-linebreaks-tests + +TESTS += test-u32-possible-linebreaks +check_PROGRAMS += test-u32-possible-linebreaks +test_u32_possible_linebreaks_SOURCES = unilbrk/test-u32-possible-linebreaks.c + +EXTRA_DIST += unilbrk/test-u32-possible-linebreaks.c + +## end gnulib module unilbrk/u32-possible-linebreaks-tests + +## begin gnulib module unilbrk/u32-width-linebreaks-tests + +TESTS += test-u32-width-linebreaks +check_PROGRAMS += test-u32-width-linebreaks +test_u32_width_linebreaks_SOURCES = unilbrk/test-u32-width-linebreaks.c + +EXTRA_DIST += unilbrk/test-u32-width-linebreaks.c + +## end gnulib module unilbrk/u32-width-linebreaks-tests + +## begin gnulib module unilbrk/u8-possible-linebreaks-tests + +TESTS += test-u8-possible-linebreaks +check_PROGRAMS += test-u8-possible-linebreaks +test_u8_possible_linebreaks_SOURCES = unilbrk/test-u8-possible-linebreaks.c + +EXTRA_DIST += unilbrk/test-u8-possible-linebreaks.c + +## end gnulib module unilbrk/u8-possible-linebreaks-tests + +## begin gnulib module unilbrk/u8-width-linebreaks-tests + +TESTS += test-u8-width-linebreaks +check_PROGRAMS += test-u8-width-linebreaks +test_u8_width_linebreaks_SOURCES = unilbrk/test-u8-width-linebreaks.c + +EXTRA_DIST += unilbrk/test-u8-width-linebreaks.c + +## end gnulib module unilbrk/u8-width-linebreaks-tests + +## begin gnulib module unilbrk/ulc-possible-linebreaks-tests + +TESTS += test-ulc-possible-linebreaks +check_PROGRAMS += test-ulc-possible-linebreaks +test_ulc_possible_linebreaks_SOURCES = unilbrk/test-ulc-possible-linebreaks.c +test_ulc_possible_linebreaks_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += unilbrk/test-ulc-possible-linebreaks.c + +## end gnulib module unilbrk/ulc-possible-linebreaks-tests + +## begin gnulib module unilbrk/ulc-width-linebreaks-tests + +TESTS += test-ulc-width-linebreaks +check_PROGRAMS += test-ulc-width-linebreaks +test_ulc_width_linebreaks_SOURCES = unilbrk/test-ulc-width-linebreaks.c +test_ulc_width_linebreaks_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += unilbrk/test-ulc-width-linebreaks.c + +## end gnulib module unilbrk/ulc-width-linebreaks-tests + +## begin gnulib module uniname/uniname-tests + +TESTS += uniname/test-uninames.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' srcdir='$(srcdir)' +check_PROGRAMS += test-uninames +test_uninames_SOURCES = uniname/test-uninames.c +test_uninames_LDADD = $(LDADD) @LIBINTL@ + +EXTRA_DIST += uniname/test-uninames.sh uniname/test-uninames.c uniname/UnicodeDataNames.txt + +## end gnulib module uniname/uniname-tests + +## begin gnulib module uninorm/canonical-decomposition-tests + +TESTS += test-canonical-decomposition +check_PROGRAMS += test-canonical-decomposition +test_canonical_decomposition_SOURCES = uninorm/test-canonical-decomposition.c + +EXTRA_DIST += uninorm/test-canonical-decomposition.c + +## end gnulib module uninorm/canonical-decomposition-tests + +## begin gnulib module uninorm/compat-decomposition-tests + +TESTS += test-compat-decomposition +check_PROGRAMS += test-compat-decomposition +test_compat_decomposition_SOURCES = uninorm/test-compat-decomposition.c + +EXTRA_DIST += uninorm/test-compat-decomposition.c + +## end gnulib module uninorm/compat-decomposition-tests + +## begin gnulib module uninorm/composition-tests + +TESTS += test-composition +check_PROGRAMS += test-composition +test_composition_SOURCES = uninorm/test-composition.c + +EXTRA_DIST += uninorm/test-composition.c + +## end gnulib module uninorm/composition-tests + +## begin gnulib module uninorm/decomposing-form-tests + +TESTS += test-decomposing-form +check_PROGRAMS += test-decomposing-form +test_decomposing_form_SOURCES = uninorm/test-decomposing-form.c + +EXTRA_DIST += uninorm/test-decomposing-form.c + +## end gnulib module uninorm/decomposing-form-tests + +## begin gnulib module uninorm/decomposition-tests + +TESTS += test-decomposition +check_PROGRAMS += test-decomposition +test_decomposition_SOURCES = uninorm/test-decomposition.c + +EXTRA_DIST += uninorm/test-decomposition.c + +## end gnulib module uninorm/decomposition-tests + +## begin gnulib module uninorm/filter-tests + +TESTS += test-uninorm-filter-nfc +check_PROGRAMS += test-uninorm-filter-nfc +test_uninorm_filter_nfc_SOURCES = uninorm/test-uninorm-filter-nfc.c + +EXTRA_DIST += uninorm/test-uninorm-filter-nfc.c + +## end gnulib module uninorm/filter-tests + +## begin gnulib module uninorm/nfc-tests + +TESTS += test-nfc uninorm/test-u32-nfc-big.sh +check_PROGRAMS += test-nfc test-u32-nfc-big +test_nfc_SOURCES = \ + uninorm/test-nfc.c \ + uninorm/test-u8-nfc.c \ + uninorm/test-u16-nfc.c \ + uninorm/test-u32-nfc.c +test_u32_nfc_big_SOURCES = \ + uninorm/test-u32-nfc-big.c \ + uninorm/test-u32-normalize-big.c +test_u32_nfc_big_LDADD = $(LDADD) @LIBINTL@ +EXTRA_DIST += uninorm/test-nfc.c uninorm/test-u8-nfc.c uninorm/test-u16-nfc.c uninorm/test-u32-nfc.c uninorm/test-u32-nfc-big.sh uninorm/test-u32-nfc-big.c uninorm/test-u32-normalize-big.h uninorm/test-u32-normalize-big.c uninorm/NormalizationTest.txt + +## end gnulib module uninorm/nfc-tests + +## begin gnulib module uninorm/nfd-tests + +TESTS += test-nfd uninorm/test-u32-nfd-big.sh +check_PROGRAMS += test-nfd test-u32-nfd-big +test_nfd_SOURCES = \ + uninorm/test-nfd.c \ + uninorm/test-u8-nfd.c \ + uninorm/test-u16-nfd.c \ + uninorm/test-u32-nfd.c +test_u32_nfd_big_SOURCES = \ + uninorm/test-u32-nfd-big.c \ + uninorm/test-u32-normalize-big.c +test_u32_nfd_big_LDADD = $(LDADD) @LIBINTL@ + +EXTRA_DIST += uninorm/test-nfd.c uninorm/test-u8-nfd.c uninorm/test-u16-nfd.c uninorm/test-u32-nfd.c uninorm/test-u32-nfd-big.sh uninorm/test-u32-nfd-big.c uninorm/test-u32-normalize-big.h uninorm/test-u32-normalize-big.c uninorm/NormalizationTest.txt + +## end gnulib module uninorm/nfd-tests + +## begin gnulib module uninorm/nfkc-tests + +TESTS += test-nfkc uninorm/test-u32-nfkc-big.sh +check_PROGRAMS += test-nfkc test-u32-nfkc-big +test_nfkc_SOURCES = \ + uninorm/test-nfkc.c \ + uninorm/test-u8-nfkc.c \ + uninorm/test-u16-nfkc.c \ + uninorm/test-u32-nfkc.c +test_u32_nfkc_big_SOURCES = \ + uninorm/test-u32-nfkc-big.c \ + uninorm/test-u32-normalize-big.c +test_u32_nfkc_big_LDADD = $(LDADD) @LIBINTL@ + +EXTRA_DIST += uninorm/test-nfkc.c uninorm/test-u8-nfkc.c uninorm/test-u16-nfkc.c uninorm/test-u32-nfkc.c uninorm/test-u32-nfkc-big.sh uninorm/test-u32-nfkc-big.c uninorm/test-u32-normalize-big.h uninorm/test-u32-normalize-big.c uninorm/NormalizationTest.txt + +## end gnulib module uninorm/nfkc-tests + +## begin gnulib module uninorm/nfkd-tests + +TESTS += test-nfkd uninorm/test-u32-nfkd-big.sh +check_PROGRAMS += test-nfkd test-u32-nfkd-big +test_nfkd_SOURCES = \ + uninorm/test-nfkd.c \ + uninorm/test-u8-nfkd.c \ + uninorm/test-u16-nfkd.c \ + uninorm/test-u32-nfkd.c +test_u32_nfkd_big_SOURCES = \ + uninorm/test-u32-nfkd-big.c \ + uninorm/test-u32-normalize-big.c +test_u32_nfkd_big_LDADD = $(LDADD) @LIBINTL@ + +EXTRA_DIST += uninorm/test-nfkd.c uninorm/test-u8-nfkd.c uninorm/test-u16-nfkd.c uninorm/test-u32-nfkd.c uninorm/test-u32-nfkd-big.sh uninorm/test-u32-nfkd-big.c uninorm/test-u32-normalize-big.h uninorm/test-u32-normalize-big.c uninorm/NormalizationTest.txt + +## end gnulib module uninorm/nfkd-tests + +## begin gnulib module uninorm/u16-normcmp-tests + +TESTS += test-u16-normcmp +check_PROGRAMS += test-u16-normcmp +test_u16_normcmp_SOURCES = uninorm/test-u16-normcmp.c + +EXTRA_DIST += uninorm/test-u16-normcmp.c uninorm/test-u16-normcmp.h + +## end gnulib module uninorm/u16-normcmp-tests + +## begin gnulib module uninorm/u16-normcoll-tests + +TESTS += test-u16-normcoll +check_PROGRAMS += test-u16-normcoll +test_u16_normcoll_SOURCES = uninorm/test-u16-normcoll.c +test_u16_normcoll_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uninorm/test-u16-normcoll.c uninorm/test-u16-normcmp.h + +## end gnulib module uninorm/u16-normcoll-tests + +## begin gnulib module uninorm/u32-normcmp-tests + +TESTS += test-u32-normcmp +check_PROGRAMS += test-u32-normcmp +test_u32_normcmp_SOURCES = uninorm/test-u32-normcmp.c + +EXTRA_DIST += uninorm/test-u32-normcmp.c uninorm/test-u32-normcmp.h + +## end gnulib module uninorm/u32-normcmp-tests + +## begin gnulib module uninorm/u32-normcoll-tests + +TESTS += test-u32-normcoll +check_PROGRAMS += test-u32-normcoll +test_u32_normcoll_SOURCES = uninorm/test-u32-normcoll.c +test_u32_normcoll_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uninorm/test-u32-normcoll.c uninorm/test-u32-normcmp.h + +## end gnulib module uninorm/u32-normcoll-tests + +## begin gnulib module uninorm/u8-normcmp-tests + +TESTS += test-u8-normcmp +check_PROGRAMS += test-u8-normcmp +test_u8_normcmp_SOURCES = uninorm/test-u8-normcmp.c + +EXTRA_DIST += uninorm/test-u8-normcmp.c uninorm/test-u8-normcmp.h + +## end gnulib module uninorm/u8-normcmp-tests + +## begin gnulib module uninorm/u8-normcoll-tests + +TESTS += test-u8-normcoll +check_PROGRAMS += test-u8-normcoll +test_u8_normcoll_SOURCES = uninorm/test-u8-normcoll.c +test_u8_normcoll_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uninorm/test-u8-normcoll.c uninorm/test-u8-normcmp.h + +## end gnulib module uninorm/u8-normcoll-tests + +## begin gnulib module unistd-tests + +TESTS += test-unistd +check_PROGRAMS += test-unistd + +EXTRA_DIST += test-unistd.c + +## end gnulib module unistd-tests + +## begin gnulib module unistdio/u16-asnprintf-tests + +TESTS += test-u16-asnprintf1 +check_PROGRAMS += test-u16-asnprintf1 +test_u16_asnprintf1_SOURCES = unistdio/test-u16-asnprintf1.c +test_u16_asnprintf1_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-u16-asnprintf1.c unistdio/test-u16-asnprintf1.h unistdio/test-u16-printf1.h + +## end gnulib module unistdio/u16-asnprintf-tests + +## begin gnulib module unistdio/u16-vasnprintf-tests + +TESTS += test-u16-vasnprintf1 unistdio/test-u16-vasnprintf2.sh unistdio/test-u16-vasnprintf3.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-u16-vasnprintf1 test-u16-vasnprintf2 test-u16-vasnprintf3 +test_u16_vasnprintf1_SOURCES = unistdio/test-u16-vasnprintf1.c +test_u16_vasnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u16_vasnprintf2_SOURCES = unistdio/test-u16-vasnprintf2.c +test_u16_vasnprintf2_LDADD = $(LDADD) @LIBICONV@ +test_u16_vasnprintf3_SOURCES = unistdio/test-u16-vasnprintf3.c +test_u16_vasnprintf3_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-u16-vasnprintf1.c unistdio/test-u16-asnprintf1.h unistdio/test-u16-printf1.h unistdio/test-u16-vasnprintf2.sh unistdio/test-u16-vasnprintf2.c unistdio/test-u16-vasnprintf3.sh unistdio/test-u16-vasnprintf3.c + +## end gnulib module unistdio/u16-vasnprintf-tests + +## begin gnulib module unistdio/u16-vasprintf-tests + +TESTS += test-u16-vasprintf1 +check_PROGRAMS += test-u16-vasprintf1 +test_u16_vasprintf1_SOURCES = unistdio/test-u16-vasprintf1.c +test_u16_vasprintf1_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-u16-vasprintf1.c unistdio/test-u16-printf1.h + +## end gnulib module unistdio/u16-vasprintf-tests + +## begin gnulib module unistdio/u16-vsnprintf-tests + +TESTS += test-u16-vsnprintf1 +check_PROGRAMS += test-u16-vsnprintf1 +test_u16_vsnprintf1_SOURCES = unistdio/test-u16-vsnprintf1.c +test_u16_vsnprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +EXTRA_DIST += unistdio/test-u16-vsnprintf1.c unistdio/test-u16-printf1.h + +## end gnulib module unistdio/u16-vsnprintf-tests + +## begin gnulib module unistdio/u16-vsprintf-tests + +TESTS += test-u16-vsprintf1 +check_PROGRAMS += test-u16-vsprintf1 +test_u16_vsprintf1_SOURCES = unistdio/test-u16-vsprintf1.c +test_u16_vsprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +EXTRA_DIST += unistdio/test-u16-vsprintf1.c unistdio/test-u16-printf1.h + +## end gnulib module unistdio/u16-vsprintf-tests + +## begin gnulib module unistdio/u32-asnprintf-tests + +TESTS += test-u32-asnprintf1 +check_PROGRAMS += test-u32-asnprintf1 +test_u32_asnprintf1_SOURCES = unistdio/test-u32-asnprintf1.c +test_u32_asnprintf1_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-u32-asnprintf1.c unistdio/test-u32-asnprintf1.h unistdio/test-u32-printf1.h + +## end gnulib module unistdio/u32-asnprintf-tests + +## begin gnulib module unistdio/u32-vasnprintf-tests + +TESTS += test-u32-vasnprintf1 unistdio/test-u32-vasnprintf2.sh unistdio/test-u32-vasnprintf3.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-u32-vasnprintf1 test-u32-vasnprintf2 test-u32-vasnprintf3 +test_u32_vasnprintf1_SOURCES = unistdio/test-u32-vasnprintf1.c +test_u32_vasnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u32_vasnprintf2_SOURCES = unistdio/test-u32-vasnprintf2.c +test_u32_vasnprintf2_LDADD = $(LDADD) @LIBICONV@ +test_u32_vasnprintf3_SOURCES = unistdio/test-u32-vasnprintf3.c +test_u32_vasnprintf3_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-u32-vasnprintf1.c unistdio/test-u32-asnprintf1.h unistdio/test-u32-printf1.h unistdio/test-u32-vasnprintf2.sh unistdio/test-u32-vasnprintf2.c unistdio/test-u32-vasnprintf3.sh unistdio/test-u32-vasnprintf3.c + +## end gnulib module unistdio/u32-vasnprintf-tests + +## begin gnulib module unistdio/u32-vasprintf-tests + +TESTS += test-u32-vasprintf1 +check_PROGRAMS += test-u32-vasprintf1 +test_u32_vasprintf1_SOURCES = unistdio/test-u32-vasprintf1.c +test_u32_vasprintf1_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-u32-vasprintf1.c unistdio/test-u32-printf1.h + +## end gnulib module unistdio/u32-vasprintf-tests + +## begin gnulib module unistdio/u32-vsnprintf-tests + +TESTS += test-u32-vsnprintf1 +check_PROGRAMS += test-u32-vsnprintf1 +test_u32_vsnprintf1_SOURCES = unistdio/test-u32-vsnprintf1.c +test_u32_vsnprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +EXTRA_DIST += unistdio/test-u32-vsnprintf1.c unistdio/test-u32-printf1.h + +## end gnulib module unistdio/u32-vsnprintf-tests + +## begin gnulib module unistdio/u32-vsprintf-tests + +TESTS += test-u32-vsprintf1 +check_PROGRAMS += test-u32-vsprintf1 +test_u32_vsprintf1_SOURCES = unistdio/test-u32-vsprintf1.c +test_u32_vsprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +EXTRA_DIST += unistdio/test-u32-vsprintf1.c unistdio/test-u32-printf1.h + +## end gnulib module unistdio/u32-vsprintf-tests + +## begin gnulib module unistdio/u8-asnprintf-tests + +TESTS += test-u8-asnprintf1 +check_PROGRAMS += test-u8-asnprintf1 +test_u8_asnprintf1_SOURCES = unistdio/test-u8-asnprintf1.c +test_u8_asnprintf1_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-u8-asnprintf1.c unistdio/test-u8-asnprintf1.h unistdio/test-u8-printf1.h + +## end gnulib module unistdio/u8-asnprintf-tests + +## begin gnulib module unistdio/u8-vasnprintf-tests + +TESTS += test-u8-vasnprintf1 unistdio/test-u8-vasnprintf2.sh unistdio/test-u8-vasnprintf3.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-u8-vasnprintf1 test-u8-vasnprintf2 test-u8-vasnprintf3 +test_u8_vasnprintf1_SOURCES = unistdio/test-u8-vasnprintf1.c +test_u8_vasnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u8_vasnprintf2_SOURCES = unistdio/test-u8-vasnprintf2.c +test_u8_vasnprintf2_LDADD = $(LDADD) @LIBICONV@ +test_u8_vasnprintf3_SOURCES = unistdio/test-u8-vasnprintf3.c +test_u8_vasnprintf3_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-u8-vasnprintf1.c unistdio/test-u8-asnprintf1.h unistdio/test-u8-printf1.h unistdio/test-u8-vasnprintf2.sh unistdio/test-u8-vasnprintf2.c unistdio/test-u8-vasnprintf3.sh unistdio/test-u8-vasnprintf3.c + +## end gnulib module unistdio/u8-vasnprintf-tests + +## begin gnulib module unistdio/u8-vasprintf-tests + +TESTS += test-u8-vasprintf1 +check_PROGRAMS += test-u8-vasprintf1 +test_u8_vasprintf1_SOURCES = unistdio/test-u8-vasprintf1.c +test_u8_vasprintf1_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-u8-vasprintf1.c unistdio/test-u8-printf1.h + +## end gnulib module unistdio/u8-vasprintf-tests + +## begin gnulib module unistdio/u8-vsnprintf-tests + +TESTS += test-u8-vsnprintf1 +check_PROGRAMS += test-u8-vsnprintf1 +test_u8_vsnprintf1_SOURCES = unistdio/test-u8-vsnprintf1.c +test_u8_vsnprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +EXTRA_DIST += unistdio/test-u8-vsnprintf1.c unistdio/test-u8-printf1.h + +## end gnulib module unistdio/u8-vsnprintf-tests + +## begin gnulib module unistdio/u8-vsprintf-tests + +TESTS += test-u8-vsprintf1 +check_PROGRAMS += test-u8-vsprintf1 +test_u8_vsprintf1_SOURCES = unistdio/test-u8-vsprintf1.c +test_u8_vsprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +EXTRA_DIST += unistdio/test-u8-vsprintf1.c unistdio/test-u8-printf1.h + +## end gnulib module unistdio/u8-vsprintf-tests + +## begin gnulib module unistdio/ulc-asnprintf-tests + +TESTS += test-ulc-asnprintf1 +check_PROGRAMS += test-ulc-asnprintf1 +test_ulc_asnprintf1_SOURCES = unistdio/test-ulc-asnprintf1.c +test_ulc_asnprintf1_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-ulc-asnprintf1.c unistdio/test-ulc-asnprintf1.h unistdio/test-ulc-printf1.h + +## end gnulib module unistdio/ulc-asnprintf-tests + +## begin gnulib module unistdio/ulc-vasnprintf-tests + +TESTS += test-ulc-vasnprintf1 unistdio/test-ulc-vasnprintf2.sh unistdio/test-ulc-vasnprintf3.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' +check_PROGRAMS += test-ulc-vasnprintf1 test-ulc-vasnprintf2 test-ulc-vasnprintf3 +test_ulc_vasnprintf1_SOURCES = unistdio/test-ulc-vasnprintf1.c +test_ulc_vasnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_ulc_vasnprintf2_SOURCES = unistdio/test-ulc-vasnprintf2.c +test_ulc_vasnprintf2_LDADD = $(LDADD) @LIBICONV@ +test_ulc_vasnprintf3_SOURCES = unistdio/test-ulc-vasnprintf3.c +test_ulc_vasnprintf3_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-ulc-vasnprintf1.c unistdio/test-ulc-asnprintf1.h unistdio/test-ulc-printf1.h unistdio/test-ulc-vasnprintf2.sh unistdio/test-ulc-vasnprintf2.c unistdio/test-ulc-vasnprintf3.sh unistdio/test-ulc-vasnprintf3.c + +## end gnulib module unistdio/ulc-vasnprintf-tests + +## begin gnulib module unistdio/ulc-vasprintf-tests + +TESTS += test-ulc-vasprintf1 +check_PROGRAMS += test-ulc-vasprintf1 +test_ulc_vasprintf1_SOURCES = unistdio/test-ulc-vasprintf1.c +test_ulc_vasprintf1_LDADD = $(LDADD) @LIBICONV@ +EXTRA_DIST += unistdio/test-ulc-vasprintf1.c unistdio/test-ulc-printf1.h + +## end gnulib module unistdio/ulc-vasprintf-tests + +## begin gnulib module unistdio/ulc-vsnprintf-tests + +TESTS += test-ulc-vsnprintf1 +check_PROGRAMS += test-ulc-vsnprintf1 +test_ulc_vsnprintf1_SOURCES = unistdio/test-ulc-vsnprintf1.c +test_ulc_vsnprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +EXTRA_DIST += unistdio/test-ulc-vsnprintf1.c unistdio/test-ulc-printf1.h + +## end gnulib module unistdio/ulc-vsnprintf-tests + +## begin gnulib module unistdio/ulc-vsprintf-tests + +TESTS += test-ulc-vsprintf1 +check_PROGRAMS += test-ulc-vsprintf1 +test_ulc_vsprintf1_SOURCES = unistdio/test-ulc-vsprintf1.c +test_ulc_vsprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +EXTRA_DIST += unistdio/test-ulc-vsprintf1.c unistdio/test-ulc-printf1.h + +## end gnulib module unistdio/ulc-vsprintf-tests + +## begin gnulib module uniwbrk/u16-wordbreaks-tests + +TESTS += test-u16-wordbreaks +check_PROGRAMS += test-u16-wordbreaks +test_u16_wordbreaks_SOURCES = uniwbrk/test-u16-wordbreaks.c + +EXTRA_DIST += uniwbrk/test-u16-wordbreaks.c + +## end gnulib module uniwbrk/u16-wordbreaks-tests + +## begin gnulib module uniwbrk/u32-wordbreaks-tests + +TESTS += test-u32-wordbreaks +check_PROGRAMS += test-u32-wordbreaks +test_u32_wordbreaks_SOURCES = uniwbrk/test-u32-wordbreaks.c + +EXTRA_DIST += uniwbrk/test-u32-wordbreaks.c + +## end gnulib module uniwbrk/u32-wordbreaks-tests + +## begin gnulib module uniwbrk/u8-wordbreaks-tests + +TESTS += test-u8-wordbreaks +check_PROGRAMS += test-u8-wordbreaks +test_u8_wordbreaks_SOURCES = uniwbrk/test-u8-wordbreaks.c + +EXTRA_DIST += uniwbrk/test-u8-wordbreaks.c + +## end gnulib module uniwbrk/u8-wordbreaks-tests + +## begin gnulib module uniwbrk/ulc-wordbreaks-tests + +TESTS += uniwbrk/test-ulc-wordbreaks.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' +check_PROGRAMS += test-ulc-wordbreaks +test_ulc_wordbreaks_SOURCES = uniwbrk/test-ulc-wordbreaks.c +test_ulc_wordbreaks_LDADD = $(LDADD) @LIBICONV@ + +EXTRA_DIST += uniwbrk/test-ulc-wordbreaks.sh uniwbrk/test-ulc-wordbreaks.c + +## end gnulib module uniwbrk/ulc-wordbreaks-tests + +## begin gnulib module uniwidth/u16-strwidth-tests + +TESTS += test-u16-strwidth +check_PROGRAMS += test-u16-strwidth +test_u16_strwidth_SOURCES = uniwidth/test-u16-strwidth.c + +EXTRA_DIST += uniwidth/test-u16-strwidth.c + +## end gnulib module uniwidth/u16-strwidth-tests + +## begin gnulib module uniwidth/u16-width-tests + +TESTS += test-u16-width +check_PROGRAMS += test-u16-width +test_u16_width_SOURCES = uniwidth/test-u16-width.c + +EXTRA_DIST += uniwidth/test-u16-width.c + +## end gnulib module uniwidth/u16-width-tests + +## begin gnulib module uniwidth/u32-strwidth-tests + +TESTS += test-u32-strwidth +check_PROGRAMS += test-u32-strwidth +test_u32_strwidth_SOURCES = uniwidth/test-u32-strwidth.c + +EXTRA_DIST += uniwidth/test-u32-strwidth.c + +## end gnulib module uniwidth/u32-strwidth-tests + +## begin gnulib module uniwidth/u32-width-tests + +TESTS += test-u32-width +check_PROGRAMS += test-u32-width +test_u32_width_SOURCES = uniwidth/test-u32-width.c + +EXTRA_DIST += uniwidth/test-u32-width.c + +## end gnulib module uniwidth/u32-width-tests + +## begin gnulib module uniwidth/u8-strwidth-tests + +TESTS += test-u8-strwidth +check_PROGRAMS += test-u8-strwidth +test_u8_strwidth_SOURCES = uniwidth/test-u8-strwidth.c + +EXTRA_DIST += uniwidth/test-u8-strwidth.c + +## end gnulib module uniwidth/u8-strwidth-tests + +## begin gnulib module uniwidth/u8-width-tests + +TESTS += test-u8-width +check_PROGRAMS += test-u8-width +test_u8_width_SOURCES = uniwidth/test-u8-width.c + +EXTRA_DIST += uniwidth/test-u8-width.c + +## end gnulib module uniwidth/u8-width-tests + +## begin gnulib module uniwidth/width-tests + +TESTS += test-uc_width uniwidth/test-uc_width2.sh +TESTS_ENVIRONMENT += EXEEXT='@EXEEXT@' +check_PROGRAMS += test-uc_width test-uc_width2 +test_uc_width_SOURCES = uniwidth/test-uc_width.c +test_uc_width2_SOURCES = uniwidth/test-uc_width2.c + +EXTRA_DIST += uniwidth/test-uc_width.c uniwidth/test-uc_width2.c uniwidth/test-uc_width2.sh + +## end gnulib module uniwidth/width-tests + +## begin gnulib module unsetenv + + +EXTRA_DIST += unsetenv.c + +EXTRA_libtests_a_SOURCES += unsetenv.c + +## end gnulib module unsetenv + +## begin gnulib module wchar-tests + +TESTS += test-wchar +check_PROGRAMS += test-wchar + +EXTRA_DIST += test-wchar.c + +## end gnulib module wchar-tests + +## begin gnulib module wctob + + +EXTRA_DIST += wctob.c + +EXTRA_libtests_a_SOURCES += wctob.c + +## end gnulib module wctob + +## begin gnulib module wctype-tests + +TESTS += test-wctype +check_PROGRAMS += test-wctype + +EXTRA_DIST += test-wctype.c + +## end gnulib module wctype-tests + +## begin gnulib module wcwidth-tests + +TESTS += test-wcwidth +check_PROGRAMS += test-wcwidth + +EXTRA_DIST += test-wcwidth.c + +## end gnulib module wcwidth-tests + +## begin gnulib module xalloc + + +EXTRA_DIST += xalloc.h xmalloc.c + +EXTRA_libtests_a_SOURCES += xmalloc.c + +## end gnulib module xalloc + +## begin gnulib module xalloc-die + +libtests_a_SOURCES += xalloc-die.c + +## end gnulib module xalloc-die + +# Clean up after Solaris cc. +clean-local: + rm -rf SunWS_cache + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : diff --git a/tests/Makefile.in b/tests/Makefile.in new file mode 100644 index 00000000..fa734572 --- /dev/null +++ b/tests/Makefile.in @@ -0,0 +1,6709 @@ +# Makefile.in generated by automake 1.11 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Copyright (C) 2002-2009 Free Software Foundation, Inc. +# +# This file is free software, distributed under the terms of the GNU +# General Public License. As a special exception to the GNU General +# Public License, this file may be distributed as part of a program +# that contains a configuration script generated by Autoconf, under +# the same distribution terms as the rest of that program. +# +# Generated by gnulib-tool. + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.gnulib $(srcdir)/Makefile.in +TESTS = test-alloca-opt$(EXEEXT) test-array-mergesort$(EXEEXT) \ + test-c-ctype$(EXEEXT) test-c-strcase.sh test-environ$(EXEEXT) \ + test-errno$(EXEEXT) test-frexpl-nolibm$(EXEEXT) \ + test-fseterr$(EXEEXT) test-iconv$(EXEEXT) \ + test-isnand-nolibm$(EXEEXT) test-isnanf-nolibm$(EXEEXT) \ + test-isnanl-nolibm$(EXEEXT) test-locale$(EXEEXT) \ + test-localename$(EXEEXT) test-malloca$(EXEEXT) \ + test-math$(EXEEXT) test-mbrtowc1.sh test-mbrtowc2.sh \ + test-mbrtowc3.sh test-mbrtowc4.sh test-mbsinit.sh \ + test-memchr$(EXEEXT) test-printf-frexp$(EXEEXT) \ + test-printf-frexpl$(EXEEXT) test-signbit$(EXEEXT) \ + test-stdbool$(EXEEXT) test-stdint$(EXEEXT) \ + test-stdlib$(EXEEXT) test-strerror$(EXEEXT) \ + test-striconveh$(EXEEXT) test-striconveha$(EXEEXT) \ + test-string$(EXEEXT) test-cased$(EXEEXT) \ + test-ignorable$(EXEEXT) unicase/test-locale-language.sh \ + test-uc_tolower$(EXEEXT) test-uc_totitle$(EXEEXT) \ + test-uc_toupper$(EXEEXT) test-u16-casecmp$(EXEEXT) \ + test-u16-casecoll$(EXEEXT) test-u16-casefold$(EXEEXT) \ + test-u16-is-cased$(EXEEXT) test-u16-is-casefolded$(EXEEXT) \ + test-u16-is-lowercase$(EXEEXT) test-u16-is-titlecase$(EXEEXT) \ + test-u16-is-uppercase$(EXEEXT) test-u16-tolower$(EXEEXT) \ + test-u16-totitle$(EXEEXT) test-u16-toupper$(EXEEXT) \ + test-u32-casecmp$(EXEEXT) test-u32-casecoll$(EXEEXT) \ + test-u32-casefold$(EXEEXT) test-u32-is-cased$(EXEEXT) \ + test-u32-is-casefolded$(EXEEXT) test-u32-is-lowercase$(EXEEXT) \ + test-u32-is-titlecase$(EXEEXT) test-u32-is-uppercase$(EXEEXT) \ + test-u32-tolower$(EXEEXT) test-u32-totitle$(EXEEXT) \ + test-u32-toupper$(EXEEXT) test-u8-casecmp$(EXEEXT) \ + test-u8-casecoll$(EXEEXT) test-u8-casefold$(EXEEXT) \ + test-u8-is-cased$(EXEEXT) test-u8-is-casefolded$(EXEEXT) \ + test-u8-is-lowercase$(EXEEXT) test-u8-is-titlecase$(EXEEXT) \ + test-u8-is-uppercase$(EXEEXT) test-u8-tolower$(EXEEXT) \ + test-u8-totitle$(EXEEXT) test-u8-toupper$(EXEEXT) \ + unicase/test-ulc-casecmp1.sh unicase/test-ulc-casecmp2.sh \ + unicase/test-ulc-casecoll1.sh unicase/test-ulc-casecoll2.sh \ + test-u16-conv-from-enc$(EXEEXT) test-u16-conv-to-enc$(EXEEXT) \ + test-u16-strconv-from-enc$(EXEEXT) \ + test-u16-strconv-to-enc$(EXEEXT) \ + test-u32-conv-from-enc$(EXEEXT) test-u32-conv-to-enc$(EXEEXT) \ + test-u32-strconv-from-enc$(EXEEXT) \ + test-u32-strconv-to-enc$(EXEEXT) \ + test-u8-conv-from-enc$(EXEEXT) test-u8-conv-to-enc$(EXEEXT) \ + test-u8-strconv-from-enc$(EXEEXT) \ + test-u8-strconv-to-enc$(EXEEXT) test-bidi_byname$(EXEEXT) \ + test-bidi_name$(EXEEXT) test-bidi_of$(EXEEXT) \ + test-bidi_test$(EXEEXT) test-block_list$(EXEEXT) \ + test-block_of$(EXEEXT) test-block_test$(EXEEXT) \ + test-categ_C$(EXEEXT) test-categ_Cc$(EXEEXT) \ + test-categ_Cf$(EXEEXT) test-categ_Cn$(EXEEXT) \ + test-categ_Co$(EXEEXT) test-categ_Cs$(EXEEXT) \ + test-categ_L$(EXEEXT) test-categ_Ll$(EXEEXT) \ + test-categ_Lm$(EXEEXT) test-categ_Lo$(EXEEXT) \ + test-categ_Lt$(EXEEXT) test-categ_Lu$(EXEEXT) \ + test-categ_M$(EXEEXT) test-categ_Mc$(EXEEXT) \ + test-categ_Me$(EXEEXT) test-categ_Mn$(EXEEXT) \ + test-categ_N$(EXEEXT) test-categ_Nd$(EXEEXT) \ + test-categ_Nl$(EXEEXT) test-categ_No$(EXEEXT) \ + test-categ_P$(EXEEXT) test-categ_Pc$(EXEEXT) \ + test-categ_Pd$(EXEEXT) test-categ_Pe$(EXEEXT) \ + test-categ_Pf$(EXEEXT) test-categ_Pi$(EXEEXT) \ + test-categ_Po$(EXEEXT) test-categ_Ps$(EXEEXT) \ + test-categ_S$(EXEEXT) test-categ_Sc$(EXEEXT) \ + test-categ_Sk$(EXEEXT) test-categ_Sm$(EXEEXT) \ + test-categ_So$(EXEEXT) test-categ_Z$(EXEEXT) \ + test-categ_Zl$(EXEEXT) test-categ_Zp$(EXEEXT) \ + test-categ_Zs$(EXEEXT) test-categ_and_not$(EXEEXT) \ + test-categ_and$(EXEEXT) test-categ_byname$(EXEEXT) \ + test-categ_name$(EXEEXT) $(am__EXEEXT_1) \ + test-categ_of$(EXEEXT) test-categ_or$(EXEEXT) \ + test-categ_test_withtable$(EXEEXT) test-combining$(EXEEXT) \ + test-ctype_alnum$(EXEEXT) test-ctype_alpha$(EXEEXT) \ + test-ctype_blank$(EXEEXT) test-ctype_cntrl$(EXEEXT) \ + test-ctype_digit$(EXEEXT) test-ctype_graph$(EXEEXT) \ + test-ctype_lower$(EXEEXT) test-ctype_print$(EXEEXT) \ + test-ctype_punct$(EXEEXT) test-ctype_space$(EXEEXT) \ + test-ctype_upper$(EXEEXT) test-ctype_xdigit$(EXEEXT) \ + test-decdigit$(EXEEXT) test-digit$(EXEEXT) \ + test-mirror$(EXEEXT) test-numeric$(EXEEXT) \ + test-pr_alphabetic$(EXEEXT) test-pr_ascii_hex_digit$(EXEEXT) \ + test-pr_bidi_arabic_digit$(EXEEXT) \ + test-pr_bidi_arabic_right_to_left$(EXEEXT) \ + test-pr_bidi_block_separator$(EXEEXT) \ + test-pr_bidi_boundary_neutral$(EXEEXT) \ + test-pr_bidi_common_separator$(EXEEXT) \ + test-pr_bidi_control$(EXEEXT) \ + test-pr_bidi_embedding_or_override$(EXEEXT) \ + test-pr_bidi_eur_num_separator$(EXEEXT) \ + test-pr_bidi_eur_num_terminator$(EXEEXT) \ + test-pr_bidi_european_digit$(EXEEXT) \ + test-pr_bidi_hebrew_right_to_left$(EXEEXT) \ + test-pr_bidi_left_to_right$(EXEEXT) \ + test-pr_bidi_non_spacing_mark$(EXEEXT) \ + test-pr_bidi_other_neutral$(EXEEXT) test-pr_bidi_pdf$(EXEEXT) \ + test-pr_bidi_segment_separator$(EXEEXT) \ + test-pr_bidi_whitespace$(EXEEXT) test-pr_byname$(EXEEXT) \ + test-pr_combining$(EXEEXT) test-pr_composite$(EXEEXT) \ + test-pr_currency_symbol$(EXEEXT) test-pr_dash$(EXEEXT) \ + test-pr_decimal_digit$(EXEEXT) \ + test-pr_default_ignorable_code_point$(EXEEXT) \ + test-pr_deprecated$(EXEEXT) test-pr_diacritic$(EXEEXT) \ + test-pr_extender$(EXEEXT) test-pr_format_control$(EXEEXT) \ + test-pr_grapheme_base$(EXEEXT) \ + test-pr_grapheme_extend$(EXEEXT) \ + test-pr_grapheme_link$(EXEEXT) test-pr_hex_digit$(EXEEXT) \ + test-pr_hyphen$(EXEEXT) test-pr_id_continue$(EXEEXT) \ + test-pr_id_start$(EXEEXT) test-pr_ideographic$(EXEEXT) \ + test-pr_ids_binary_operator$(EXEEXT) \ + test-pr_ids_trinary_operator$(EXEEXT) \ + test-pr_ignorable_control$(EXEEXT) \ + test-pr_iso_control$(EXEEXT) test-pr_join_control$(EXEEXT) \ + test-pr_left_of_pair$(EXEEXT) test-pr_line_separator$(EXEEXT) \ + test-pr_logical_order_exception$(EXEEXT) \ + test-pr_lowercase$(EXEEXT) test-pr_math$(EXEEXT) \ + test-pr_non_break$(EXEEXT) test-pr_not_a_character$(EXEEXT) \ + test-pr_numeric$(EXEEXT) test-pr_other_alphabetic$(EXEEXT) \ + test-pr_other_default_ignorable_code_point$(EXEEXT) \ + test-pr_other_grapheme_extend$(EXEEXT) \ + test-pr_other_id_continue$(EXEEXT) \ + test-pr_other_id_start$(EXEEXT) \ + test-pr_other_lowercase$(EXEEXT) test-pr_other_math$(EXEEXT) \ + test-pr_other_uppercase$(EXEEXT) \ + test-pr_paired_punctuation$(EXEEXT) \ + test-pr_paragraph_separator$(EXEEXT) \ + test-pr_pattern_syntax$(EXEEXT) \ + test-pr_pattern_white_space$(EXEEXT) \ + test-pr_private_use$(EXEEXT) test-pr_punctuation$(EXEEXT) \ + test-pr_quotation_mark$(EXEEXT) test-pr_radical$(EXEEXT) \ + test-pr_sentence_terminal$(EXEEXT) \ + test-pr_soft_dotted$(EXEEXT) test-pr_space$(EXEEXT) \ + test-pr_terminal_punctuation$(EXEEXT) test-pr_test$(EXEEXT) \ + test-pr_titlecase$(EXEEXT) \ + test-pr_unassigned_code_value$(EXEEXT) \ + test-pr_unified_ideograph$(EXEEXT) test-pr_uppercase$(EXEEXT) \ + test-pr_variation_selector$(EXEEXT) \ + test-pr_white_space$(EXEEXT) test-pr_xid_continue$(EXEEXT) \ + test-pr_xid_start$(EXEEXT) test-pr_zero_width$(EXEEXT) \ + test-scripts$(EXEEXT) test-sy_c_ident$(EXEEXT) \ + test-sy_c_whitespace$(EXEEXT) test-sy_java_ident$(EXEEXT) \ + test-sy_java_whitespace$(EXEEXT) \ + test-u16-possible-linebreaks$(EXEEXT) \ + test-u16-width-linebreaks$(EXEEXT) \ + test-u32-possible-linebreaks$(EXEEXT) \ + test-u32-width-linebreaks$(EXEEXT) \ + test-u8-possible-linebreaks$(EXEEXT) \ + test-u8-width-linebreaks$(EXEEXT) \ + test-ulc-possible-linebreaks$(EXEEXT) \ + test-ulc-width-linebreaks$(EXEEXT) uniname/test-uninames.sh \ + test-canonical-decomposition$(EXEEXT) \ + test-compat-decomposition$(EXEEXT) test-composition$(EXEEXT) \ + test-decomposing-form$(EXEEXT) test-decomposition$(EXEEXT) \ + test-uninorm-filter-nfc$(EXEEXT) test-nfc$(EXEEXT) \ + uninorm/test-u32-nfc-big.sh test-nfd$(EXEEXT) \ + uninorm/test-u32-nfd-big.sh test-nfkc$(EXEEXT) \ + uninorm/test-u32-nfkc-big.sh test-nfkd$(EXEEXT) \ + uninorm/test-u32-nfkd-big.sh test-u16-normcmp$(EXEEXT) \ + test-u16-normcoll$(EXEEXT) test-u32-normcmp$(EXEEXT) \ + test-u32-normcoll$(EXEEXT) test-u8-normcmp$(EXEEXT) \ + test-u8-normcoll$(EXEEXT) test-unistd$(EXEEXT) \ + test-u16-asnprintf1$(EXEEXT) test-u16-vasnprintf1$(EXEEXT) \ + unistdio/test-u16-vasnprintf2.sh \ + unistdio/test-u16-vasnprintf3.sh test-u16-vasprintf1$(EXEEXT) \ + test-u16-vsnprintf1$(EXEEXT) test-u16-vsprintf1$(EXEEXT) \ + test-u32-asnprintf1$(EXEEXT) test-u32-vasnprintf1$(EXEEXT) \ + unistdio/test-u32-vasnprintf2.sh \ + unistdio/test-u32-vasnprintf3.sh test-u32-vasprintf1$(EXEEXT) \ + test-u32-vsnprintf1$(EXEEXT) test-u32-vsprintf1$(EXEEXT) \ + test-u8-asnprintf1$(EXEEXT) test-u8-vasnprintf1$(EXEEXT) \ + unistdio/test-u8-vasnprintf2.sh \ + unistdio/test-u8-vasnprintf3.sh test-u8-vasprintf1$(EXEEXT) \ + test-u8-vsnprintf1$(EXEEXT) test-u8-vsprintf1$(EXEEXT) \ + test-ulc-asnprintf1$(EXEEXT) test-ulc-vasnprintf1$(EXEEXT) \ + unistdio/test-ulc-vasnprintf2.sh \ + unistdio/test-ulc-vasnprintf3.sh test-ulc-vasprintf1$(EXEEXT) \ + test-ulc-vsnprintf1$(EXEEXT) test-ulc-vsprintf1$(EXEEXT) \ + test-u16-wordbreaks$(EXEEXT) test-u32-wordbreaks$(EXEEXT) \ + test-u8-wordbreaks$(EXEEXT) uniwbrk/test-ulc-wordbreaks.sh \ + test-u16-strwidth$(EXEEXT) test-u16-width$(EXEEXT) \ + test-u32-strwidth$(EXEEXT) test-u32-width$(EXEEXT) \ + test-u8-strwidth$(EXEEXT) test-u8-width$(EXEEXT) \ + test-uc_width$(EXEEXT) uniwidth/test-uc_width2.sh \ + test-wchar$(EXEEXT) test-wctype$(EXEEXT) test-wcwidth$(EXEEXT) +noinst_PROGRAMS = +check_PROGRAMS = test-alloca-opt$(EXEEXT) \ + test-array-mergesort$(EXEEXT) test-c-ctype$(EXEEXT) \ + test-c-strcasecmp$(EXEEXT) test-c-strncasecmp$(EXEEXT) \ + test-environ$(EXEEXT) test-errno$(EXEEXT) \ + test-frexpl-nolibm$(EXEEXT) test-fseterr$(EXEEXT) \ + test-iconv$(EXEEXT) test-isnand-nolibm$(EXEEXT) \ + test-isnanf-nolibm$(EXEEXT) test-isnanl-nolibm$(EXEEXT) \ + test-locale$(EXEEXT) test-localename$(EXEEXT) \ + test-malloca$(EXEEXT) test-math$(EXEEXT) test-mbrtowc$(EXEEXT) \ + test-mbsinit$(EXEEXT) test-memchr$(EXEEXT) \ + test-printf-frexp$(EXEEXT) test-printf-frexpl$(EXEEXT) \ + test-signbit$(EXEEXT) test-stdbool$(EXEEXT) \ + test-stdint$(EXEEXT) test-stdlib$(EXEEXT) \ + test-strerror$(EXEEXT) test-striconveh$(EXEEXT) \ + test-striconveha$(EXEEXT) test-string$(EXEEXT) \ + test-cased$(EXEEXT) test-ignorable$(EXEEXT) \ + test-locale-language$(EXEEXT) test-uc_tolower$(EXEEXT) \ + test-uc_totitle$(EXEEXT) test-uc_toupper$(EXEEXT) \ + test-u16-casecmp$(EXEEXT) test-u16-casecoll$(EXEEXT) \ + test-u16-casefold$(EXEEXT) test-u16-is-cased$(EXEEXT) \ + test-u16-is-casefolded$(EXEEXT) test-u16-is-lowercase$(EXEEXT) \ + test-u16-is-titlecase$(EXEEXT) test-u16-is-uppercase$(EXEEXT) \ + test-u16-tolower$(EXEEXT) test-u16-totitle$(EXEEXT) \ + test-u16-toupper$(EXEEXT) test-u32-casecmp$(EXEEXT) \ + test-u32-casecoll$(EXEEXT) test-u32-casefold$(EXEEXT) \ + test-u32-is-cased$(EXEEXT) test-u32-is-casefolded$(EXEEXT) \ + test-u32-is-lowercase$(EXEEXT) test-u32-is-titlecase$(EXEEXT) \ + test-u32-is-uppercase$(EXEEXT) test-u32-tolower$(EXEEXT) \ + test-u32-totitle$(EXEEXT) test-u32-toupper$(EXEEXT) \ + test-u8-casecmp$(EXEEXT) test-u8-casecoll$(EXEEXT) \ + test-u8-casefold$(EXEEXT) test-u8-is-cased$(EXEEXT) \ + test-u8-is-casefolded$(EXEEXT) test-u8-is-lowercase$(EXEEXT) \ + test-u8-is-titlecase$(EXEEXT) test-u8-is-uppercase$(EXEEXT) \ + test-u8-tolower$(EXEEXT) test-u8-totitle$(EXEEXT) \ + test-u8-toupper$(EXEEXT) test-ulc-casecmp$(EXEEXT) \ + test-ulc-casecoll$(EXEEXT) test-u16-conv-from-enc$(EXEEXT) \ + test-u16-conv-to-enc$(EXEEXT) \ + test-u16-strconv-from-enc$(EXEEXT) \ + test-u16-strconv-to-enc$(EXEEXT) \ + test-u32-conv-from-enc$(EXEEXT) test-u32-conv-to-enc$(EXEEXT) \ + test-u32-strconv-from-enc$(EXEEXT) \ + test-u32-strconv-to-enc$(EXEEXT) \ + test-u8-conv-from-enc$(EXEEXT) test-u8-conv-to-enc$(EXEEXT) \ + test-u8-strconv-from-enc$(EXEEXT) \ + test-u8-strconv-to-enc$(EXEEXT) test-bidi_byname$(EXEEXT) \ + test-bidi_name$(EXEEXT) test-bidi_of$(EXEEXT) \ + test-bidi_test$(EXEEXT) test-block_list$(EXEEXT) \ + test-block_of$(EXEEXT) test-block_test$(EXEEXT) \ + test-categ_C$(EXEEXT) test-categ_Cc$(EXEEXT) \ + test-categ_Cf$(EXEEXT) test-categ_Cn$(EXEEXT) \ + test-categ_Co$(EXEEXT) test-categ_Cs$(EXEEXT) \ + test-categ_L$(EXEEXT) test-categ_Ll$(EXEEXT) \ + test-categ_Lm$(EXEEXT) test-categ_Lo$(EXEEXT) \ + test-categ_Lt$(EXEEXT) test-categ_Lu$(EXEEXT) \ + test-categ_M$(EXEEXT) test-categ_Mc$(EXEEXT) \ + test-categ_Me$(EXEEXT) test-categ_Mn$(EXEEXT) \ + test-categ_N$(EXEEXT) test-categ_Nd$(EXEEXT) \ + test-categ_Nl$(EXEEXT) test-categ_No$(EXEEXT) \ + test-categ_P$(EXEEXT) test-categ_Pc$(EXEEXT) \ + test-categ_Pd$(EXEEXT) test-categ_Pe$(EXEEXT) \ + test-categ_Pf$(EXEEXT) test-categ_Pi$(EXEEXT) \ + test-categ_Po$(EXEEXT) test-categ_Ps$(EXEEXT) \ + test-categ_S$(EXEEXT) test-categ_Sc$(EXEEXT) \ + test-categ_Sk$(EXEEXT) test-categ_Sm$(EXEEXT) \ + test-categ_So$(EXEEXT) test-categ_Z$(EXEEXT) \ + test-categ_Zl$(EXEEXT) test-categ_Zp$(EXEEXT) \ + test-categ_Zs$(EXEEXT) test-categ_and_not$(EXEEXT) \ + test-categ_and$(EXEEXT) test-categ_byname$(EXEEXT) \ + test-categ_name$(EXEEXT) $(am__EXEEXT_1) \ + test-categ_of$(EXEEXT) test-categ_or$(EXEEXT) \ + test-categ_test_withtable$(EXEEXT) test-combining$(EXEEXT) \ + test-ctype_alnum$(EXEEXT) test-ctype_alpha$(EXEEXT) \ + test-ctype_blank$(EXEEXT) test-ctype_cntrl$(EXEEXT) \ + test-ctype_digit$(EXEEXT) test-ctype_graph$(EXEEXT) \ + test-ctype_lower$(EXEEXT) test-ctype_print$(EXEEXT) \ + test-ctype_punct$(EXEEXT) test-ctype_space$(EXEEXT) \ + test-ctype_upper$(EXEEXT) test-ctype_xdigit$(EXEEXT) \ + test-decdigit$(EXEEXT) test-digit$(EXEEXT) \ + test-mirror$(EXEEXT) test-numeric$(EXEEXT) \ + test-pr_alphabetic$(EXEEXT) test-pr_ascii_hex_digit$(EXEEXT) \ + test-pr_bidi_arabic_digit$(EXEEXT) \ + test-pr_bidi_arabic_right_to_left$(EXEEXT) \ + test-pr_bidi_block_separator$(EXEEXT) \ + test-pr_bidi_boundary_neutral$(EXEEXT) \ + test-pr_bidi_common_separator$(EXEEXT) \ + test-pr_bidi_control$(EXEEXT) \ + test-pr_bidi_embedding_or_override$(EXEEXT) \ + test-pr_bidi_eur_num_separator$(EXEEXT) \ + test-pr_bidi_eur_num_terminator$(EXEEXT) \ + test-pr_bidi_european_digit$(EXEEXT) \ + test-pr_bidi_hebrew_right_to_left$(EXEEXT) \ + test-pr_bidi_left_to_right$(EXEEXT) \ + test-pr_bidi_non_spacing_mark$(EXEEXT) \ + test-pr_bidi_other_neutral$(EXEEXT) test-pr_bidi_pdf$(EXEEXT) \ + test-pr_bidi_segment_separator$(EXEEXT) \ + test-pr_bidi_whitespace$(EXEEXT) test-pr_byname$(EXEEXT) \ + test-pr_combining$(EXEEXT) test-pr_composite$(EXEEXT) \ + test-pr_currency_symbol$(EXEEXT) test-pr_dash$(EXEEXT) \ + test-pr_decimal_digit$(EXEEXT) \ + test-pr_default_ignorable_code_point$(EXEEXT) \ + test-pr_deprecated$(EXEEXT) test-pr_diacritic$(EXEEXT) \ + test-pr_extender$(EXEEXT) test-pr_format_control$(EXEEXT) \ + test-pr_grapheme_base$(EXEEXT) \ + test-pr_grapheme_extend$(EXEEXT) \ + test-pr_grapheme_link$(EXEEXT) test-pr_hex_digit$(EXEEXT) \ + test-pr_hyphen$(EXEEXT) test-pr_id_continue$(EXEEXT) \ + test-pr_id_start$(EXEEXT) test-pr_ideographic$(EXEEXT) \ + test-pr_ids_binary_operator$(EXEEXT) \ + test-pr_ids_trinary_operator$(EXEEXT) \ + test-pr_ignorable_control$(EXEEXT) \ + test-pr_iso_control$(EXEEXT) test-pr_join_control$(EXEEXT) \ + test-pr_left_of_pair$(EXEEXT) test-pr_line_separator$(EXEEXT) \ + test-pr_logical_order_exception$(EXEEXT) \ + test-pr_lowercase$(EXEEXT) test-pr_math$(EXEEXT) \ + test-pr_non_break$(EXEEXT) test-pr_not_a_character$(EXEEXT) \ + test-pr_numeric$(EXEEXT) test-pr_other_alphabetic$(EXEEXT) \ + test-pr_other_default_ignorable_code_point$(EXEEXT) \ + test-pr_other_grapheme_extend$(EXEEXT) \ + test-pr_other_id_continue$(EXEEXT) \ + test-pr_other_id_start$(EXEEXT) \ + test-pr_other_lowercase$(EXEEXT) test-pr_other_math$(EXEEXT) \ + test-pr_other_uppercase$(EXEEXT) \ + test-pr_paired_punctuation$(EXEEXT) \ + test-pr_paragraph_separator$(EXEEXT) \ + test-pr_pattern_syntax$(EXEEXT) \ + test-pr_pattern_white_space$(EXEEXT) \ + test-pr_private_use$(EXEEXT) test-pr_punctuation$(EXEEXT) \ + test-pr_quotation_mark$(EXEEXT) test-pr_radical$(EXEEXT) \ + test-pr_sentence_terminal$(EXEEXT) \ + test-pr_soft_dotted$(EXEEXT) test-pr_space$(EXEEXT) \ + test-pr_terminal_punctuation$(EXEEXT) test-pr_test$(EXEEXT) \ + test-pr_titlecase$(EXEEXT) \ + test-pr_unassigned_code_value$(EXEEXT) \ + test-pr_unified_ideograph$(EXEEXT) test-pr_uppercase$(EXEEXT) \ + test-pr_variation_selector$(EXEEXT) \ + test-pr_white_space$(EXEEXT) test-pr_xid_continue$(EXEEXT) \ + test-pr_xid_start$(EXEEXT) test-pr_zero_width$(EXEEXT) \ + test-scripts$(EXEEXT) test-sy_c_ident$(EXEEXT) \ + test-sy_c_whitespace$(EXEEXT) test-sy_java_ident$(EXEEXT) \ + test-sy_java_whitespace$(EXEEXT) \ + test-u16-possible-linebreaks$(EXEEXT) \ + test-u16-width-linebreaks$(EXEEXT) \ + test-u32-possible-linebreaks$(EXEEXT) \ + test-u32-width-linebreaks$(EXEEXT) \ + test-u8-possible-linebreaks$(EXEEXT) \ + test-u8-width-linebreaks$(EXEEXT) \ + test-ulc-possible-linebreaks$(EXEEXT) \ + test-ulc-width-linebreaks$(EXEEXT) test-uninames$(EXEEXT) \ + test-canonical-decomposition$(EXEEXT) \ + test-compat-decomposition$(EXEEXT) test-composition$(EXEEXT) \ + test-decomposing-form$(EXEEXT) test-decomposition$(EXEEXT) \ + test-uninorm-filter-nfc$(EXEEXT) test-nfc$(EXEEXT) \ + test-u32-nfc-big$(EXEEXT) test-nfd$(EXEEXT) \ + test-u32-nfd-big$(EXEEXT) test-nfkc$(EXEEXT) \ + test-u32-nfkc-big$(EXEEXT) test-nfkd$(EXEEXT) \ + test-u32-nfkd-big$(EXEEXT) test-u16-normcmp$(EXEEXT) \ + test-u16-normcoll$(EXEEXT) test-u32-normcmp$(EXEEXT) \ + test-u32-normcoll$(EXEEXT) test-u8-normcmp$(EXEEXT) \ + test-u8-normcoll$(EXEEXT) test-unistd$(EXEEXT) \ + test-u16-asnprintf1$(EXEEXT) test-u16-vasnprintf1$(EXEEXT) \ + test-u16-vasnprintf2$(EXEEXT) test-u16-vasnprintf3$(EXEEXT) \ + test-u16-vasprintf1$(EXEEXT) test-u16-vsnprintf1$(EXEEXT) \ + test-u16-vsprintf1$(EXEEXT) test-u32-asnprintf1$(EXEEXT) \ + test-u32-vasnprintf1$(EXEEXT) test-u32-vasnprintf2$(EXEEXT) \ + test-u32-vasnprintf3$(EXEEXT) test-u32-vasprintf1$(EXEEXT) \ + test-u32-vsnprintf1$(EXEEXT) test-u32-vsprintf1$(EXEEXT) \ + test-u8-asnprintf1$(EXEEXT) test-u8-vasnprintf1$(EXEEXT) \ + test-u8-vasnprintf2$(EXEEXT) test-u8-vasnprintf3$(EXEEXT) \ + test-u8-vasprintf1$(EXEEXT) test-u8-vsnprintf1$(EXEEXT) \ + test-u8-vsprintf1$(EXEEXT) test-ulc-asnprintf1$(EXEEXT) \ + test-ulc-vasnprintf1$(EXEEXT) test-ulc-vasnprintf2$(EXEEXT) \ + test-ulc-vasnprintf3$(EXEEXT) test-ulc-vasprintf1$(EXEEXT) \ + test-ulc-vsnprintf1$(EXEEXT) test-ulc-vsprintf1$(EXEEXT) \ + test-u16-wordbreaks$(EXEEXT) test-u32-wordbreaks$(EXEEXT) \ + test-u8-wordbreaks$(EXEEXT) test-ulc-wordbreaks$(EXEEXT) \ + test-u16-strwidth$(EXEEXT) test-u16-width$(EXEEXT) \ + test-u32-strwidth$(EXEEXT) test-u32-width$(EXEEXT) \ + test-u8-strwidth$(EXEEXT) test-u8-width$(EXEEXT) \ + test-uc_width$(EXEEXT) test-uc_width2$(EXEEXT) \ + test-wchar$(EXEEXT) test-wctype$(EXEEXT) test-wcwidth$(EXEEXT) +@WOE32DLL_FALSE@am__append_1 = test-categ_none +@WOE32DLL_FALSE@am__append_2 = test-categ_none +subdir = tests +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/gnulib-m4/00gnulib.m4 \ + $(top_srcdir)/gnulib-m4/alloca.m4 \ + $(top_srcdir)/gnulib-m4/codeset.m4 \ + $(top_srcdir)/gnulib-m4/eealloc.m4 \ + $(top_srcdir)/gnulib-m4/environ.m4 \ + $(top_srcdir)/gnulib-m4/errno_h.m4 \ + $(top_srcdir)/gnulib-m4/error.m4 \ + $(top_srcdir)/gnulib-m4/exitfail.m4 \ + $(top_srcdir)/gnulib-m4/exponentd.m4 \ + $(top_srcdir)/gnulib-m4/exponentf.m4 \ + $(top_srcdir)/gnulib-m4/exponentl.m4 \ + $(top_srcdir)/gnulib-m4/extensions.m4 \ + $(top_srcdir)/gnulib-m4/float_h.m4 \ + $(top_srcdir)/gnulib-m4/fpieee.m4 \ + $(top_srcdir)/gnulib-m4/frexp.m4 \ + $(top_srcdir)/gnulib-m4/frexpl.m4 \ + $(top_srcdir)/gnulib-m4/getpagesize.m4 \ + $(top_srcdir)/gnulib-m4/glibc21.m4 \ + $(top_srcdir)/gnulib-m4/gnulib-common.m4 \ + $(top_srcdir)/gnulib-m4/gnulib-comp.m4 \ + $(top_srcdir)/gnulib-m4/iconv.m4 \ + $(top_srcdir)/gnulib-m4/iconv_h.m4 \ + $(top_srcdir)/gnulib-m4/iconv_open.m4 \ + $(top_srcdir)/gnulib-m4/include_next.m4 \ + $(top_srcdir)/gnulib-m4/inline.m4 \ + $(top_srcdir)/gnulib-m4/intlmacosx.m4 \ + $(top_srcdir)/gnulib-m4/intmax_t.m4 \ + $(top_srcdir)/gnulib-m4/inttypes_h.m4 \ + $(top_srcdir)/gnulib-m4/isnand.m4 \ + $(top_srcdir)/gnulib-m4/isnanf.m4 \ + $(top_srcdir)/gnulib-m4/isnanl.m4 \ + $(top_srcdir)/gnulib-m4/lcmessage.m4 \ + $(top_srcdir)/gnulib-m4/ldexpl.m4 \ + $(top_srcdir)/gnulib-m4/lib-ld.m4 \ + $(top_srcdir)/gnulib-m4/lib-link.m4 \ + $(top_srcdir)/gnulib-m4/lib-prefix.m4 \ + $(top_srcdir)/gnulib-m4/localcharset.m4 \ + $(top_srcdir)/gnulib-m4/locale-fr.m4 \ + $(top_srcdir)/gnulib-m4/locale-ja.m4 \ + $(top_srcdir)/gnulib-m4/locale-tr.m4 \ + $(top_srcdir)/gnulib-m4/locale-zh.m4 \ + $(top_srcdir)/gnulib-m4/locale_h.m4 \ + $(top_srcdir)/gnulib-m4/localename.m4 \ + $(top_srcdir)/gnulib-m4/longlong.m4 \ + $(top_srcdir)/gnulib-m4/malloc.m4 \ + $(top_srcdir)/gnulib-m4/malloca.m4 \ + $(top_srcdir)/gnulib-m4/math_h.m4 \ + $(top_srcdir)/gnulib-m4/mbchar.m4 \ + $(top_srcdir)/gnulib-m4/mbiter.m4 \ + $(top_srcdir)/gnulib-m4/mbrtowc.m4 \ + $(top_srcdir)/gnulib-m4/mbsinit.m4 \ + $(top_srcdir)/gnulib-m4/mbstate_t.m4 \ + $(top_srcdir)/gnulib-m4/memchr.m4 \ + $(top_srcdir)/gnulib-m4/minmax.m4 \ + $(top_srcdir)/gnulib-m4/mmap-anon.m4 \ + $(top_srcdir)/gnulib-m4/multiarch.m4 \ + $(top_srcdir)/gnulib-m4/nocrash.m4 \ + $(top_srcdir)/gnulib-m4/printf-frexp.m4 \ + $(top_srcdir)/gnulib-m4/printf-frexpl.m4 \ + $(top_srcdir)/gnulib-m4/printf.m4 \ + $(top_srcdir)/gnulib-m4/relocatable-lib.m4 \ + $(top_srcdir)/gnulib-m4/setenv.m4 \ + $(top_srcdir)/gnulib-m4/signbit.m4 \ + $(top_srcdir)/gnulib-m4/size_max.m4 \ + $(top_srcdir)/gnulib-m4/stdbool.m4 \ + $(top_srcdir)/gnulib-m4/stdint.m4 \ + $(top_srcdir)/gnulib-m4/stdint_h.m4 \ + $(top_srcdir)/gnulib-m4/stdlib_h.m4 \ + $(top_srcdir)/gnulib-m4/strerror.m4 \ + $(top_srcdir)/gnulib-m4/string_h.m4 \ + $(top_srcdir)/gnulib-m4/unistd_h.m4 \ + $(top_srcdir)/gnulib-m4/vasnprintf.m4 \ + $(top_srcdir)/gnulib-m4/wchar.m4 \ + $(top_srcdir)/gnulib-m4/wchar_t.m4 \ + $(top_srcdir)/gnulib-m4/wctob.m4 \ + $(top_srcdir)/gnulib-m4/wctype.m4 \ + $(top_srcdir)/gnulib-m4/wcwidth.m4 \ + $(top_srcdir)/gnulib-m4/wint_t.m4 \ + $(top_srcdir)/gnulib-m4/xalloc.m4 \ + $(top_srcdir)/gnulib-m4/xsize.m4 $(top_srcdir)/m4/exported.m4 \ + $(top_srcdir)/m4/init-package-version.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/woe32-dll.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LIBRARIES = $(noinst_LIBRARIES) +ARFLAGS = cru +AM_V_AR = $(am__v_AR_$(V)) +am__v_AR_ = $(am__v_AR_$(AM_DEFAULT_VERBOSITY)) +am__v_AR_0 = @echo " AR " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +libtests_a_AR = $(AR) $(ARFLAGS) +am__DEPENDENCIES_1 = +am_libtests_a_OBJECTS = progname.$(OBJEXT) xalloc-die.$(OBJEXT) +libtests_a_OBJECTS = $(am_libtests_a_OBJECTS) +@WOE32DLL_FALSE@am__EXEEXT_1 = test-categ_none$(EXEEXT) +PROGRAMS = $(noinst_PROGRAMS) +test_alloca_opt_SOURCES = test-alloca-opt.c +test_alloca_opt_OBJECTS = test-alloca-opt.$(OBJEXT) +test_alloca_opt_LDADD = $(LDADD) +test_alloca_opt_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +test_array_mergesort_SOURCES = test-array-mergesort.c +test_array_mergesort_OBJECTS = test-array-mergesort.$(OBJEXT) +test_array_mergesort_LDADD = $(LDADD) +test_array_mergesort_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am__dirstamp = $(am__leading_dot)dirstamp +am_test_bidi_byname_OBJECTS = unictype/test-bidi_byname.$(OBJEXT) +test_bidi_byname_OBJECTS = $(am_test_bidi_byname_OBJECTS) +test_bidi_byname_LDADD = $(LDADD) +test_bidi_byname_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_bidi_name_OBJECTS = unictype/test-bidi_name.$(OBJEXT) +test_bidi_name_OBJECTS = $(am_test_bidi_name_OBJECTS) +test_bidi_name_LDADD = $(LDADD) +test_bidi_name_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_bidi_of_OBJECTS = unictype/test-bidi_of.$(OBJEXT) +test_bidi_of_OBJECTS = $(am_test_bidi_of_OBJECTS) +test_bidi_of_LDADD = $(LDADD) +test_bidi_of_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_bidi_test_OBJECTS = unictype/test-bidi_test.$(OBJEXT) +test_bidi_test_OBJECTS = $(am_test_bidi_test_OBJECTS) +test_bidi_test_LDADD = $(LDADD) +test_bidi_test_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_block_list_OBJECTS = unictype/test-block_list.$(OBJEXT) +test_block_list_OBJECTS = $(am_test_block_list_OBJECTS) +test_block_list_LDADD = $(LDADD) +test_block_list_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_block_of_OBJECTS = unictype/test-block_of.$(OBJEXT) +test_block_of_OBJECTS = $(am_test_block_of_OBJECTS) +test_block_of_LDADD = $(LDADD) +test_block_of_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_block_test_OBJECTS = unictype/test-block_test.$(OBJEXT) +test_block_test_OBJECTS = $(am_test_block_test_OBJECTS) +test_block_test_LDADD = $(LDADD) +test_block_test_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_c_ctype_SOURCES = test-c-ctype.c +test_c_ctype_OBJECTS = test-c-ctype.$(OBJEXT) +test_c_ctype_LDADD = $(LDADD) +test_c_ctype_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_c_strcasecmp_SOURCES = test-c-strcasecmp.c +test_c_strcasecmp_OBJECTS = test-c-strcasecmp.$(OBJEXT) +test_c_strcasecmp_LDADD = $(LDADD) +test_c_strcasecmp_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_c_strncasecmp_SOURCES = test-c-strncasecmp.c +test_c_strncasecmp_OBJECTS = test-c-strncasecmp.$(OBJEXT) +test_c_strncasecmp_LDADD = $(LDADD) +test_c_strncasecmp_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_canonical_decomposition_OBJECTS = \ + uninorm/test-canonical-decomposition.$(OBJEXT) +test_canonical_decomposition_OBJECTS = \ + $(am_test_canonical_decomposition_OBJECTS) +test_canonical_decomposition_LDADD = $(LDADD) +test_canonical_decomposition_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_cased_OBJECTS = unicase/test-cased.$(OBJEXT) +test_cased_OBJECTS = $(am_test_cased_OBJECTS) +test_cased_LDADD = $(LDADD) +test_cased_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +am_test_categ_C_OBJECTS = unictype/test-categ_C.$(OBJEXT) +test_categ_C_OBJECTS = $(am_test_categ_C_OBJECTS) +test_categ_C_LDADD = $(LDADD) +test_categ_C_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Cc_OBJECTS = unictype/test-categ_Cc.$(OBJEXT) +test_categ_Cc_OBJECTS = $(am_test_categ_Cc_OBJECTS) +test_categ_Cc_LDADD = $(LDADD) +test_categ_Cc_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Cf_OBJECTS = unictype/test-categ_Cf.$(OBJEXT) +test_categ_Cf_OBJECTS = $(am_test_categ_Cf_OBJECTS) +test_categ_Cf_LDADD = $(LDADD) +test_categ_Cf_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Cn_OBJECTS = unictype/test-categ_Cn.$(OBJEXT) +test_categ_Cn_OBJECTS = $(am_test_categ_Cn_OBJECTS) +test_categ_Cn_LDADD = $(LDADD) +test_categ_Cn_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Co_OBJECTS = unictype/test-categ_Co.$(OBJEXT) +test_categ_Co_OBJECTS = $(am_test_categ_Co_OBJECTS) +test_categ_Co_LDADD = $(LDADD) +test_categ_Co_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Cs_OBJECTS = unictype/test-categ_Cs.$(OBJEXT) +test_categ_Cs_OBJECTS = $(am_test_categ_Cs_OBJECTS) +test_categ_Cs_LDADD = $(LDADD) +test_categ_Cs_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_L_OBJECTS = unictype/test-categ_L.$(OBJEXT) +test_categ_L_OBJECTS = $(am_test_categ_L_OBJECTS) +test_categ_L_LDADD = $(LDADD) +test_categ_L_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Ll_OBJECTS = unictype/test-categ_Ll.$(OBJEXT) +test_categ_Ll_OBJECTS = $(am_test_categ_Ll_OBJECTS) +test_categ_Ll_LDADD = $(LDADD) +test_categ_Ll_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Lm_OBJECTS = unictype/test-categ_Lm.$(OBJEXT) +test_categ_Lm_OBJECTS = $(am_test_categ_Lm_OBJECTS) +test_categ_Lm_LDADD = $(LDADD) +test_categ_Lm_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Lo_OBJECTS = unictype/test-categ_Lo.$(OBJEXT) +test_categ_Lo_OBJECTS = $(am_test_categ_Lo_OBJECTS) +test_categ_Lo_LDADD = $(LDADD) +test_categ_Lo_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Lt_OBJECTS = unictype/test-categ_Lt.$(OBJEXT) +test_categ_Lt_OBJECTS = $(am_test_categ_Lt_OBJECTS) +test_categ_Lt_LDADD = $(LDADD) +test_categ_Lt_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Lu_OBJECTS = unictype/test-categ_Lu.$(OBJEXT) +test_categ_Lu_OBJECTS = $(am_test_categ_Lu_OBJECTS) +test_categ_Lu_LDADD = $(LDADD) +test_categ_Lu_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_M_OBJECTS = unictype/test-categ_M.$(OBJEXT) +test_categ_M_OBJECTS = $(am_test_categ_M_OBJECTS) +test_categ_M_LDADD = $(LDADD) +test_categ_M_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Mc_OBJECTS = unictype/test-categ_Mc.$(OBJEXT) +test_categ_Mc_OBJECTS = $(am_test_categ_Mc_OBJECTS) +test_categ_Mc_LDADD = $(LDADD) +test_categ_Mc_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Me_OBJECTS = unictype/test-categ_Me.$(OBJEXT) +test_categ_Me_OBJECTS = $(am_test_categ_Me_OBJECTS) +test_categ_Me_LDADD = $(LDADD) +test_categ_Me_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Mn_OBJECTS = unictype/test-categ_Mn.$(OBJEXT) +test_categ_Mn_OBJECTS = $(am_test_categ_Mn_OBJECTS) +test_categ_Mn_LDADD = $(LDADD) +test_categ_Mn_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_N_OBJECTS = unictype/test-categ_N.$(OBJEXT) +test_categ_N_OBJECTS = $(am_test_categ_N_OBJECTS) +test_categ_N_LDADD = $(LDADD) +test_categ_N_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Nd_OBJECTS = unictype/test-categ_Nd.$(OBJEXT) +test_categ_Nd_OBJECTS = $(am_test_categ_Nd_OBJECTS) +test_categ_Nd_LDADD = $(LDADD) +test_categ_Nd_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Nl_OBJECTS = unictype/test-categ_Nl.$(OBJEXT) +test_categ_Nl_OBJECTS = $(am_test_categ_Nl_OBJECTS) +test_categ_Nl_LDADD = $(LDADD) +test_categ_Nl_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_No_OBJECTS = unictype/test-categ_No.$(OBJEXT) +test_categ_No_OBJECTS = $(am_test_categ_No_OBJECTS) +test_categ_No_LDADD = $(LDADD) +test_categ_No_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_P_OBJECTS = unictype/test-categ_P.$(OBJEXT) +test_categ_P_OBJECTS = $(am_test_categ_P_OBJECTS) +test_categ_P_LDADD = $(LDADD) +test_categ_P_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Pc_OBJECTS = unictype/test-categ_Pc.$(OBJEXT) +test_categ_Pc_OBJECTS = $(am_test_categ_Pc_OBJECTS) +test_categ_Pc_LDADD = $(LDADD) +test_categ_Pc_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Pd_OBJECTS = unictype/test-categ_Pd.$(OBJEXT) +test_categ_Pd_OBJECTS = $(am_test_categ_Pd_OBJECTS) +test_categ_Pd_LDADD = $(LDADD) +test_categ_Pd_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Pe_OBJECTS = unictype/test-categ_Pe.$(OBJEXT) +test_categ_Pe_OBJECTS = $(am_test_categ_Pe_OBJECTS) +test_categ_Pe_LDADD = $(LDADD) +test_categ_Pe_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Pf_OBJECTS = unictype/test-categ_Pf.$(OBJEXT) +test_categ_Pf_OBJECTS = $(am_test_categ_Pf_OBJECTS) +test_categ_Pf_LDADD = $(LDADD) +test_categ_Pf_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Pi_OBJECTS = unictype/test-categ_Pi.$(OBJEXT) +test_categ_Pi_OBJECTS = $(am_test_categ_Pi_OBJECTS) +test_categ_Pi_LDADD = $(LDADD) +test_categ_Pi_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Po_OBJECTS = unictype/test-categ_Po.$(OBJEXT) +test_categ_Po_OBJECTS = $(am_test_categ_Po_OBJECTS) +test_categ_Po_LDADD = $(LDADD) +test_categ_Po_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Ps_OBJECTS = unictype/test-categ_Ps.$(OBJEXT) +test_categ_Ps_OBJECTS = $(am_test_categ_Ps_OBJECTS) +test_categ_Ps_LDADD = $(LDADD) +test_categ_Ps_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_S_OBJECTS = unictype/test-categ_S.$(OBJEXT) +test_categ_S_OBJECTS = $(am_test_categ_S_OBJECTS) +test_categ_S_LDADD = $(LDADD) +test_categ_S_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Sc_OBJECTS = unictype/test-categ_Sc.$(OBJEXT) +test_categ_Sc_OBJECTS = $(am_test_categ_Sc_OBJECTS) +test_categ_Sc_LDADD = $(LDADD) +test_categ_Sc_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Sk_OBJECTS = unictype/test-categ_Sk.$(OBJEXT) +test_categ_Sk_OBJECTS = $(am_test_categ_Sk_OBJECTS) +test_categ_Sk_LDADD = $(LDADD) +test_categ_Sk_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Sm_OBJECTS = unictype/test-categ_Sm.$(OBJEXT) +test_categ_Sm_OBJECTS = $(am_test_categ_Sm_OBJECTS) +test_categ_Sm_LDADD = $(LDADD) +test_categ_Sm_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_So_OBJECTS = unictype/test-categ_So.$(OBJEXT) +test_categ_So_OBJECTS = $(am_test_categ_So_OBJECTS) +test_categ_So_LDADD = $(LDADD) +test_categ_So_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Z_OBJECTS = unictype/test-categ_Z.$(OBJEXT) +test_categ_Z_OBJECTS = $(am_test_categ_Z_OBJECTS) +test_categ_Z_LDADD = $(LDADD) +test_categ_Z_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Zl_OBJECTS = unictype/test-categ_Zl.$(OBJEXT) +test_categ_Zl_OBJECTS = $(am_test_categ_Zl_OBJECTS) +test_categ_Zl_LDADD = $(LDADD) +test_categ_Zl_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Zp_OBJECTS = unictype/test-categ_Zp.$(OBJEXT) +test_categ_Zp_OBJECTS = $(am_test_categ_Zp_OBJECTS) +test_categ_Zp_LDADD = $(LDADD) +test_categ_Zp_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_Zs_OBJECTS = unictype/test-categ_Zs.$(OBJEXT) +test_categ_Zs_OBJECTS = $(am_test_categ_Zs_OBJECTS) +test_categ_Zs_LDADD = $(LDADD) +test_categ_Zs_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_and_OBJECTS = unictype/test-categ_and.$(OBJEXT) +test_categ_and_OBJECTS = $(am_test_categ_and_OBJECTS) +test_categ_and_LDADD = $(LDADD) +test_categ_and_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_and_not_OBJECTS = unictype/test-categ_and_not.$(OBJEXT) +test_categ_and_not_OBJECTS = $(am_test_categ_and_not_OBJECTS) +test_categ_and_not_LDADD = $(LDADD) +test_categ_and_not_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_byname_OBJECTS = unictype/test-categ_byname.$(OBJEXT) +test_categ_byname_OBJECTS = $(am_test_categ_byname_OBJECTS) +test_categ_byname_LDADD = $(LDADD) +test_categ_byname_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_name_OBJECTS = unictype/test-categ_name.$(OBJEXT) +test_categ_name_OBJECTS = $(am_test_categ_name_OBJECTS) +test_categ_name_LDADD = $(LDADD) +test_categ_name_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am__test_categ_none_SOURCES_DIST = unictype/test-categ_none.c +@WOE32DLL_FALSE@am_test_categ_none_OBJECTS = \ +@WOE32DLL_FALSE@ unictype/test-categ_none.$(OBJEXT) +test_categ_none_OBJECTS = $(am_test_categ_none_OBJECTS) +test_categ_none_LDADD = $(LDADD) +test_categ_none_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_of_OBJECTS = unictype/test-categ_of.$(OBJEXT) +test_categ_of_OBJECTS = $(am_test_categ_of_OBJECTS) +test_categ_of_LDADD = $(LDADD) +test_categ_of_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_or_OBJECTS = unictype/test-categ_or.$(OBJEXT) +test_categ_or_OBJECTS = $(am_test_categ_or_OBJECTS) +test_categ_or_LDADD = $(LDADD) +test_categ_or_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_categ_test_withtable_OBJECTS = \ + unictype/test-categ_test_withtable.$(OBJEXT) +test_categ_test_withtable_OBJECTS = \ + $(am_test_categ_test_withtable_OBJECTS) +test_categ_test_withtable_LDADD = $(LDADD) +test_categ_test_withtable_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_combining_OBJECTS = unictype/test-combining.$(OBJEXT) +test_combining_OBJECTS = $(am_test_combining_OBJECTS) +test_combining_LDADD = $(LDADD) +test_combining_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_compat_decomposition_OBJECTS = \ + uninorm/test-compat-decomposition.$(OBJEXT) +test_compat_decomposition_OBJECTS = \ + $(am_test_compat_decomposition_OBJECTS) +test_compat_decomposition_LDADD = $(LDADD) +test_compat_decomposition_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_composition_OBJECTS = uninorm/test-composition.$(OBJEXT) +test_composition_OBJECTS = $(am_test_composition_OBJECTS) +test_composition_LDADD = $(LDADD) +test_composition_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_alnum_OBJECTS = unictype/test-ctype_alnum.$(OBJEXT) +test_ctype_alnum_OBJECTS = $(am_test_ctype_alnum_OBJECTS) +test_ctype_alnum_LDADD = $(LDADD) +test_ctype_alnum_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_alpha_OBJECTS = unictype/test-ctype_alpha.$(OBJEXT) +test_ctype_alpha_OBJECTS = $(am_test_ctype_alpha_OBJECTS) +test_ctype_alpha_LDADD = $(LDADD) +test_ctype_alpha_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_blank_OBJECTS = unictype/test-ctype_blank.$(OBJEXT) +test_ctype_blank_OBJECTS = $(am_test_ctype_blank_OBJECTS) +test_ctype_blank_LDADD = $(LDADD) +test_ctype_blank_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_cntrl_OBJECTS = unictype/test-ctype_cntrl.$(OBJEXT) +test_ctype_cntrl_OBJECTS = $(am_test_ctype_cntrl_OBJECTS) +test_ctype_cntrl_LDADD = $(LDADD) +test_ctype_cntrl_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_digit_OBJECTS = unictype/test-ctype_digit.$(OBJEXT) +test_ctype_digit_OBJECTS = $(am_test_ctype_digit_OBJECTS) +test_ctype_digit_LDADD = $(LDADD) +test_ctype_digit_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_graph_OBJECTS = unictype/test-ctype_graph.$(OBJEXT) +test_ctype_graph_OBJECTS = $(am_test_ctype_graph_OBJECTS) +test_ctype_graph_LDADD = $(LDADD) +test_ctype_graph_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_lower_OBJECTS = unictype/test-ctype_lower.$(OBJEXT) +test_ctype_lower_OBJECTS = $(am_test_ctype_lower_OBJECTS) +test_ctype_lower_LDADD = $(LDADD) +test_ctype_lower_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_print_OBJECTS = unictype/test-ctype_print.$(OBJEXT) +test_ctype_print_OBJECTS = $(am_test_ctype_print_OBJECTS) +test_ctype_print_LDADD = $(LDADD) +test_ctype_print_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_punct_OBJECTS = unictype/test-ctype_punct.$(OBJEXT) +test_ctype_punct_OBJECTS = $(am_test_ctype_punct_OBJECTS) +test_ctype_punct_LDADD = $(LDADD) +test_ctype_punct_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_space_OBJECTS = unictype/test-ctype_space.$(OBJEXT) +test_ctype_space_OBJECTS = $(am_test_ctype_space_OBJECTS) +test_ctype_space_LDADD = $(LDADD) +test_ctype_space_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_upper_OBJECTS = unictype/test-ctype_upper.$(OBJEXT) +test_ctype_upper_OBJECTS = $(am_test_ctype_upper_OBJECTS) +test_ctype_upper_LDADD = $(LDADD) +test_ctype_upper_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ctype_xdigit_OBJECTS = unictype/test-ctype_xdigit.$(OBJEXT) +test_ctype_xdigit_OBJECTS = $(am_test_ctype_xdigit_OBJECTS) +test_ctype_xdigit_LDADD = $(LDADD) +test_ctype_xdigit_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_decdigit_OBJECTS = unictype/test-decdigit.$(OBJEXT) +test_decdigit_OBJECTS = $(am_test_decdigit_OBJECTS) +test_decdigit_LDADD = $(LDADD) +test_decdigit_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_decomposing_form_OBJECTS = \ + uninorm/test-decomposing-form.$(OBJEXT) +test_decomposing_form_OBJECTS = $(am_test_decomposing_form_OBJECTS) +test_decomposing_form_LDADD = $(LDADD) +test_decomposing_form_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_decomposition_OBJECTS = uninorm/test-decomposition.$(OBJEXT) +test_decomposition_OBJECTS = $(am_test_decomposition_OBJECTS) +test_decomposition_LDADD = $(LDADD) +test_decomposition_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_digit_OBJECTS = unictype/test-digit.$(OBJEXT) +test_digit_OBJECTS = $(am_test_digit_OBJECTS) +test_digit_LDADD = $(LDADD) +test_digit_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +test_environ_SOURCES = test-environ.c +test_environ_OBJECTS = test-environ.$(OBJEXT) +test_environ_LDADD = $(LDADD) +test_environ_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_errno_SOURCES = test-errno.c +test_errno_OBJECTS = test-errno.$(OBJEXT) +test_errno_LDADD = $(LDADD) +test_errno_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +am_test_frexpl_nolibm_OBJECTS = test-frexpl.$(OBJEXT) +test_frexpl_nolibm_OBJECTS = $(am_test_frexpl_nolibm_OBJECTS) +test_frexpl_nolibm_LDADD = $(LDADD) +test_frexpl_nolibm_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_fseterr_SOURCES = test-fseterr.c +test_fseterr_OBJECTS = test-fseterr.$(OBJEXT) +test_fseterr_LDADD = $(LDADD) +test_fseterr_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_iconv_SOURCES = test-iconv.c +test_iconv_OBJECTS = test-iconv.$(OBJEXT) +am__DEPENDENCIES_2 = libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +test_iconv_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ignorable_OBJECTS = unicase/test-ignorable.$(OBJEXT) +test_ignorable_OBJECTS = $(am_test_ignorable_OBJECTS) +test_ignorable_LDADD = $(LDADD) +test_ignorable_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_isnand_nolibm_SOURCES = test-isnand-nolibm.c +test_isnand_nolibm_OBJECTS = test-isnand-nolibm.$(OBJEXT) +test_isnand_nolibm_LDADD = $(LDADD) +test_isnand_nolibm_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_isnanf_nolibm_SOURCES = test-isnanf-nolibm.c +test_isnanf_nolibm_OBJECTS = test-isnanf-nolibm.$(OBJEXT) +test_isnanf_nolibm_LDADD = $(LDADD) +test_isnanf_nolibm_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_isnanl_nolibm_SOURCES = test-isnanl-nolibm.c +test_isnanl_nolibm_OBJECTS = test-isnanl-nolibm.$(OBJEXT) +test_isnanl_nolibm_LDADD = $(LDADD) +test_isnanl_nolibm_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_locale_SOURCES = test-locale.c +test_locale_OBJECTS = test-locale.$(OBJEXT) +test_locale_LDADD = $(LDADD) +test_locale_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_locale_language_OBJECTS = \ + unicase/test-locale-language.$(OBJEXT) +test_locale_language_OBJECTS = $(am_test_locale_language_OBJECTS) +test_locale_language_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_localename_SOURCES = test-localename.c +test_localename_OBJECTS = test-localename.$(OBJEXT) +test_localename_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_malloca_SOURCES = test-malloca.c +test_malloca_OBJECTS = test-malloca.$(OBJEXT) +test_malloca_LDADD = $(LDADD) +test_malloca_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_math_SOURCES = test-math.c +test_math_OBJECTS = test-math.$(OBJEXT) +test_math_LDADD = $(LDADD) +test_math_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +test_mbrtowc_SOURCES = test-mbrtowc.c +test_mbrtowc_OBJECTS = test-mbrtowc.$(OBJEXT) +test_mbrtowc_LDADD = $(LDADD) +test_mbrtowc_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_mbsinit_SOURCES = test-mbsinit.c +test_mbsinit_OBJECTS = test-mbsinit.$(OBJEXT) +test_mbsinit_LDADD = $(LDADD) +test_mbsinit_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_memchr_SOURCES = test-memchr.c +test_memchr_OBJECTS = test-memchr.$(OBJEXT) +test_memchr_LDADD = $(LDADD) +test_memchr_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_mirror_OBJECTS = unictype/test-mirror.$(OBJEXT) +test_mirror_OBJECTS = $(am_test_mirror_OBJECTS) +test_mirror_LDADD = $(LDADD) +test_mirror_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_nfc_OBJECTS = uninorm/test-nfc.$(OBJEXT) \ + uninorm/test-u8-nfc.$(OBJEXT) uninorm/test-u16-nfc.$(OBJEXT) \ + uninorm/test-u32-nfc.$(OBJEXT) +test_nfc_OBJECTS = $(am_test_nfc_OBJECTS) +test_nfc_LDADD = $(LDADD) +test_nfc_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +am_test_nfd_OBJECTS = uninorm/test-nfd.$(OBJEXT) \ + uninorm/test-u8-nfd.$(OBJEXT) uninorm/test-u16-nfd.$(OBJEXT) \ + uninorm/test-u32-nfd.$(OBJEXT) +test_nfd_OBJECTS = $(am_test_nfd_OBJECTS) +test_nfd_LDADD = $(LDADD) +test_nfd_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +am_test_nfkc_OBJECTS = uninorm/test-nfkc.$(OBJEXT) \ + uninorm/test-u8-nfkc.$(OBJEXT) uninorm/test-u16-nfkc.$(OBJEXT) \ + uninorm/test-u32-nfkc.$(OBJEXT) +test_nfkc_OBJECTS = $(am_test_nfkc_OBJECTS) +test_nfkc_LDADD = $(LDADD) +test_nfkc_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +am_test_nfkd_OBJECTS = uninorm/test-nfkd.$(OBJEXT) \ + uninorm/test-u8-nfkd.$(OBJEXT) uninorm/test-u16-nfkd.$(OBJEXT) \ + uninorm/test-u32-nfkd.$(OBJEXT) +test_nfkd_OBJECTS = $(am_test_nfkd_OBJECTS) +test_nfkd_LDADD = $(LDADD) +test_nfkd_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +am_test_numeric_OBJECTS = unictype/test-numeric.$(OBJEXT) +test_numeric_OBJECTS = $(am_test_numeric_OBJECTS) +test_numeric_LDADD = $(LDADD) +test_numeric_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_alphabetic_OBJECTS = unictype/test-pr_alphabetic.$(OBJEXT) +test_pr_alphabetic_OBJECTS = $(am_test_pr_alphabetic_OBJECTS) +test_pr_alphabetic_LDADD = $(LDADD) +test_pr_alphabetic_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_ascii_hex_digit_OBJECTS = \ + unictype/test-pr_ascii_hex_digit.$(OBJEXT) +test_pr_ascii_hex_digit_OBJECTS = \ + $(am_test_pr_ascii_hex_digit_OBJECTS) +test_pr_ascii_hex_digit_LDADD = $(LDADD) +test_pr_ascii_hex_digit_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_arabic_digit_OBJECTS = \ + unictype/test-pr_bidi_arabic_digit.$(OBJEXT) +test_pr_bidi_arabic_digit_OBJECTS = \ + $(am_test_pr_bidi_arabic_digit_OBJECTS) +test_pr_bidi_arabic_digit_LDADD = $(LDADD) +test_pr_bidi_arabic_digit_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_arabic_right_to_left_OBJECTS = \ + unictype/test-pr_bidi_arabic_right_to_left.$(OBJEXT) +test_pr_bidi_arabic_right_to_left_OBJECTS = \ + $(am_test_pr_bidi_arabic_right_to_left_OBJECTS) +test_pr_bidi_arabic_right_to_left_LDADD = $(LDADD) +test_pr_bidi_arabic_right_to_left_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_block_separator_OBJECTS = \ + unictype/test-pr_bidi_block_separator.$(OBJEXT) +test_pr_bidi_block_separator_OBJECTS = \ + $(am_test_pr_bidi_block_separator_OBJECTS) +test_pr_bidi_block_separator_LDADD = $(LDADD) +test_pr_bidi_block_separator_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_boundary_neutral_OBJECTS = \ + unictype/test-pr_bidi_boundary_neutral.$(OBJEXT) +test_pr_bidi_boundary_neutral_OBJECTS = \ + $(am_test_pr_bidi_boundary_neutral_OBJECTS) +test_pr_bidi_boundary_neutral_LDADD = $(LDADD) +test_pr_bidi_boundary_neutral_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_common_separator_OBJECTS = \ + unictype/test-pr_bidi_common_separator.$(OBJEXT) +test_pr_bidi_common_separator_OBJECTS = \ + $(am_test_pr_bidi_common_separator_OBJECTS) +test_pr_bidi_common_separator_LDADD = $(LDADD) +test_pr_bidi_common_separator_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_control_OBJECTS = \ + unictype/test-pr_bidi_control.$(OBJEXT) +test_pr_bidi_control_OBJECTS = $(am_test_pr_bidi_control_OBJECTS) +test_pr_bidi_control_LDADD = $(LDADD) +test_pr_bidi_control_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_embedding_or_override_OBJECTS = \ + unictype/test-pr_bidi_embedding_or_override.$(OBJEXT) +test_pr_bidi_embedding_or_override_OBJECTS = \ + $(am_test_pr_bidi_embedding_or_override_OBJECTS) +test_pr_bidi_embedding_or_override_LDADD = $(LDADD) +test_pr_bidi_embedding_or_override_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_eur_num_separator_OBJECTS = \ + unictype/test-pr_bidi_eur_num_separator.$(OBJEXT) +test_pr_bidi_eur_num_separator_OBJECTS = \ + $(am_test_pr_bidi_eur_num_separator_OBJECTS) +test_pr_bidi_eur_num_separator_LDADD = $(LDADD) +test_pr_bidi_eur_num_separator_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_eur_num_terminator_OBJECTS = \ + unictype/test-pr_bidi_eur_num_terminator.$(OBJEXT) +test_pr_bidi_eur_num_terminator_OBJECTS = \ + $(am_test_pr_bidi_eur_num_terminator_OBJECTS) +test_pr_bidi_eur_num_terminator_LDADD = $(LDADD) +test_pr_bidi_eur_num_terminator_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_european_digit_OBJECTS = \ + unictype/test-pr_bidi_european_digit.$(OBJEXT) +test_pr_bidi_european_digit_OBJECTS = \ + $(am_test_pr_bidi_european_digit_OBJECTS) +test_pr_bidi_european_digit_LDADD = $(LDADD) +test_pr_bidi_european_digit_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_hebrew_right_to_left_OBJECTS = \ + unictype/test-pr_bidi_hebrew_right_to_left.$(OBJEXT) +test_pr_bidi_hebrew_right_to_left_OBJECTS = \ + $(am_test_pr_bidi_hebrew_right_to_left_OBJECTS) +test_pr_bidi_hebrew_right_to_left_LDADD = $(LDADD) +test_pr_bidi_hebrew_right_to_left_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_left_to_right_OBJECTS = \ + unictype/test-pr_bidi_left_to_right.$(OBJEXT) +test_pr_bidi_left_to_right_OBJECTS = \ + $(am_test_pr_bidi_left_to_right_OBJECTS) +test_pr_bidi_left_to_right_LDADD = $(LDADD) +test_pr_bidi_left_to_right_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_non_spacing_mark_OBJECTS = \ + unictype/test-pr_bidi_non_spacing_mark.$(OBJEXT) +test_pr_bidi_non_spacing_mark_OBJECTS = \ + $(am_test_pr_bidi_non_spacing_mark_OBJECTS) +test_pr_bidi_non_spacing_mark_LDADD = $(LDADD) +test_pr_bidi_non_spacing_mark_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_other_neutral_OBJECTS = \ + unictype/test-pr_bidi_other_neutral.$(OBJEXT) +test_pr_bidi_other_neutral_OBJECTS = \ + $(am_test_pr_bidi_other_neutral_OBJECTS) +test_pr_bidi_other_neutral_LDADD = $(LDADD) +test_pr_bidi_other_neutral_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_pdf_OBJECTS = unictype/test-pr_bidi_pdf.$(OBJEXT) +test_pr_bidi_pdf_OBJECTS = $(am_test_pr_bidi_pdf_OBJECTS) +test_pr_bidi_pdf_LDADD = $(LDADD) +test_pr_bidi_pdf_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_segment_separator_OBJECTS = \ + unictype/test-pr_bidi_segment_separator.$(OBJEXT) +test_pr_bidi_segment_separator_OBJECTS = \ + $(am_test_pr_bidi_segment_separator_OBJECTS) +test_pr_bidi_segment_separator_LDADD = $(LDADD) +test_pr_bidi_segment_separator_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_bidi_whitespace_OBJECTS = \ + unictype/test-pr_bidi_whitespace.$(OBJEXT) +test_pr_bidi_whitespace_OBJECTS = \ + $(am_test_pr_bidi_whitespace_OBJECTS) +test_pr_bidi_whitespace_LDADD = $(LDADD) +test_pr_bidi_whitespace_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_byname_OBJECTS = unictype/test-pr_byname.$(OBJEXT) +test_pr_byname_OBJECTS = $(am_test_pr_byname_OBJECTS) +test_pr_byname_LDADD = $(LDADD) +test_pr_byname_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_combining_OBJECTS = unictype/test-pr_combining.$(OBJEXT) +test_pr_combining_OBJECTS = $(am_test_pr_combining_OBJECTS) +test_pr_combining_LDADD = $(LDADD) +test_pr_combining_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_composite_OBJECTS = unictype/test-pr_composite.$(OBJEXT) +test_pr_composite_OBJECTS = $(am_test_pr_composite_OBJECTS) +test_pr_composite_LDADD = $(LDADD) +test_pr_composite_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_currency_symbol_OBJECTS = \ + unictype/test-pr_currency_symbol.$(OBJEXT) +test_pr_currency_symbol_OBJECTS = \ + $(am_test_pr_currency_symbol_OBJECTS) +test_pr_currency_symbol_LDADD = $(LDADD) +test_pr_currency_symbol_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_dash_OBJECTS = unictype/test-pr_dash.$(OBJEXT) +test_pr_dash_OBJECTS = $(am_test_pr_dash_OBJECTS) +test_pr_dash_LDADD = $(LDADD) +test_pr_dash_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_decimal_digit_OBJECTS = \ + unictype/test-pr_decimal_digit.$(OBJEXT) +test_pr_decimal_digit_OBJECTS = $(am_test_pr_decimal_digit_OBJECTS) +test_pr_decimal_digit_LDADD = $(LDADD) +test_pr_decimal_digit_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_default_ignorable_code_point_OBJECTS = \ + unictype/test-pr_default_ignorable_code_point.$(OBJEXT) +test_pr_default_ignorable_code_point_OBJECTS = \ + $(am_test_pr_default_ignorable_code_point_OBJECTS) +test_pr_default_ignorable_code_point_LDADD = $(LDADD) +test_pr_default_ignorable_code_point_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_deprecated_OBJECTS = unictype/test-pr_deprecated.$(OBJEXT) +test_pr_deprecated_OBJECTS = $(am_test_pr_deprecated_OBJECTS) +test_pr_deprecated_LDADD = $(LDADD) +test_pr_deprecated_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_diacritic_OBJECTS = unictype/test-pr_diacritic.$(OBJEXT) +test_pr_diacritic_OBJECTS = $(am_test_pr_diacritic_OBJECTS) +test_pr_diacritic_LDADD = $(LDADD) +test_pr_diacritic_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_extender_OBJECTS = unictype/test-pr_extender.$(OBJEXT) +test_pr_extender_OBJECTS = $(am_test_pr_extender_OBJECTS) +test_pr_extender_LDADD = $(LDADD) +test_pr_extender_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_format_control_OBJECTS = \ + unictype/test-pr_format_control.$(OBJEXT) +test_pr_format_control_OBJECTS = $(am_test_pr_format_control_OBJECTS) +test_pr_format_control_LDADD = $(LDADD) +test_pr_format_control_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_grapheme_base_OBJECTS = \ + unictype/test-pr_grapheme_base.$(OBJEXT) +test_pr_grapheme_base_OBJECTS = $(am_test_pr_grapheme_base_OBJECTS) +test_pr_grapheme_base_LDADD = $(LDADD) +test_pr_grapheme_base_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_grapheme_extend_OBJECTS = \ + unictype/test-pr_grapheme_extend.$(OBJEXT) +test_pr_grapheme_extend_OBJECTS = \ + $(am_test_pr_grapheme_extend_OBJECTS) +test_pr_grapheme_extend_LDADD = $(LDADD) +test_pr_grapheme_extend_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_grapheme_link_OBJECTS = \ + unictype/test-pr_grapheme_link.$(OBJEXT) +test_pr_grapheme_link_OBJECTS = $(am_test_pr_grapheme_link_OBJECTS) +test_pr_grapheme_link_LDADD = $(LDADD) +test_pr_grapheme_link_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_hex_digit_OBJECTS = unictype/test-pr_hex_digit.$(OBJEXT) +test_pr_hex_digit_OBJECTS = $(am_test_pr_hex_digit_OBJECTS) +test_pr_hex_digit_LDADD = $(LDADD) +test_pr_hex_digit_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_hyphen_OBJECTS = unictype/test-pr_hyphen.$(OBJEXT) +test_pr_hyphen_OBJECTS = $(am_test_pr_hyphen_OBJECTS) +test_pr_hyphen_LDADD = $(LDADD) +test_pr_hyphen_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_id_continue_OBJECTS = \ + unictype/test-pr_id_continue.$(OBJEXT) +test_pr_id_continue_OBJECTS = $(am_test_pr_id_continue_OBJECTS) +test_pr_id_continue_LDADD = $(LDADD) +test_pr_id_continue_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_id_start_OBJECTS = unictype/test-pr_id_start.$(OBJEXT) +test_pr_id_start_OBJECTS = $(am_test_pr_id_start_OBJECTS) +test_pr_id_start_LDADD = $(LDADD) +test_pr_id_start_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_ideographic_OBJECTS = \ + unictype/test-pr_ideographic.$(OBJEXT) +test_pr_ideographic_OBJECTS = $(am_test_pr_ideographic_OBJECTS) +test_pr_ideographic_LDADD = $(LDADD) +test_pr_ideographic_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_ids_binary_operator_OBJECTS = \ + unictype/test-pr_ids_binary_operator.$(OBJEXT) +test_pr_ids_binary_operator_OBJECTS = \ + $(am_test_pr_ids_binary_operator_OBJECTS) +test_pr_ids_binary_operator_LDADD = $(LDADD) +test_pr_ids_binary_operator_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_ids_trinary_operator_OBJECTS = \ + unictype/test-pr_ids_trinary_operator.$(OBJEXT) +test_pr_ids_trinary_operator_OBJECTS = \ + $(am_test_pr_ids_trinary_operator_OBJECTS) +test_pr_ids_trinary_operator_LDADD = $(LDADD) +test_pr_ids_trinary_operator_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_ignorable_control_OBJECTS = \ + unictype/test-pr_ignorable_control.$(OBJEXT) +test_pr_ignorable_control_OBJECTS = \ + $(am_test_pr_ignorable_control_OBJECTS) +test_pr_ignorable_control_LDADD = $(LDADD) +test_pr_ignorable_control_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_iso_control_OBJECTS = \ + unictype/test-pr_iso_control.$(OBJEXT) +test_pr_iso_control_OBJECTS = $(am_test_pr_iso_control_OBJECTS) +test_pr_iso_control_LDADD = $(LDADD) +test_pr_iso_control_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_join_control_OBJECTS = \ + unictype/test-pr_join_control.$(OBJEXT) +test_pr_join_control_OBJECTS = $(am_test_pr_join_control_OBJECTS) +test_pr_join_control_LDADD = $(LDADD) +test_pr_join_control_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_left_of_pair_OBJECTS = \ + unictype/test-pr_left_of_pair.$(OBJEXT) +test_pr_left_of_pair_OBJECTS = $(am_test_pr_left_of_pair_OBJECTS) +test_pr_left_of_pair_LDADD = $(LDADD) +test_pr_left_of_pair_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_line_separator_OBJECTS = \ + unictype/test-pr_line_separator.$(OBJEXT) +test_pr_line_separator_OBJECTS = $(am_test_pr_line_separator_OBJECTS) +test_pr_line_separator_LDADD = $(LDADD) +test_pr_line_separator_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_logical_order_exception_OBJECTS = \ + unictype/test-pr_logical_order_exception.$(OBJEXT) +test_pr_logical_order_exception_OBJECTS = \ + $(am_test_pr_logical_order_exception_OBJECTS) +test_pr_logical_order_exception_LDADD = $(LDADD) +test_pr_logical_order_exception_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_lowercase_OBJECTS = unictype/test-pr_lowercase.$(OBJEXT) +test_pr_lowercase_OBJECTS = $(am_test_pr_lowercase_OBJECTS) +test_pr_lowercase_LDADD = $(LDADD) +test_pr_lowercase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_math_OBJECTS = unictype/test-pr_math.$(OBJEXT) +test_pr_math_OBJECTS = $(am_test_pr_math_OBJECTS) +test_pr_math_LDADD = $(LDADD) +test_pr_math_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_non_break_OBJECTS = unictype/test-pr_non_break.$(OBJEXT) +test_pr_non_break_OBJECTS = $(am_test_pr_non_break_OBJECTS) +test_pr_non_break_LDADD = $(LDADD) +test_pr_non_break_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_not_a_character_OBJECTS = \ + unictype/test-pr_not_a_character.$(OBJEXT) +test_pr_not_a_character_OBJECTS = \ + $(am_test_pr_not_a_character_OBJECTS) +test_pr_not_a_character_LDADD = $(LDADD) +test_pr_not_a_character_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_numeric_OBJECTS = unictype/test-pr_numeric.$(OBJEXT) +test_pr_numeric_OBJECTS = $(am_test_pr_numeric_OBJECTS) +test_pr_numeric_LDADD = $(LDADD) +test_pr_numeric_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_other_alphabetic_OBJECTS = \ + unictype/test-pr_other_alphabetic.$(OBJEXT) +test_pr_other_alphabetic_OBJECTS = \ + $(am_test_pr_other_alphabetic_OBJECTS) +test_pr_other_alphabetic_LDADD = $(LDADD) +test_pr_other_alphabetic_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_other_default_ignorable_code_point_OBJECTS = \ + unictype/test-pr_other_default_ignorable_code_point.$(OBJEXT) +test_pr_other_default_ignorable_code_point_OBJECTS = \ + $(am_test_pr_other_default_ignorable_code_point_OBJECTS) +test_pr_other_default_ignorable_code_point_LDADD = $(LDADD) +test_pr_other_default_ignorable_code_point_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_other_grapheme_extend_OBJECTS = \ + unictype/test-pr_other_grapheme_extend.$(OBJEXT) +test_pr_other_grapheme_extend_OBJECTS = \ + $(am_test_pr_other_grapheme_extend_OBJECTS) +test_pr_other_grapheme_extend_LDADD = $(LDADD) +test_pr_other_grapheme_extend_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_other_id_continue_OBJECTS = \ + unictype/test-pr_other_id_continue.$(OBJEXT) +test_pr_other_id_continue_OBJECTS = \ + $(am_test_pr_other_id_continue_OBJECTS) +test_pr_other_id_continue_LDADD = $(LDADD) +test_pr_other_id_continue_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_other_id_start_OBJECTS = \ + unictype/test-pr_other_id_start.$(OBJEXT) +test_pr_other_id_start_OBJECTS = $(am_test_pr_other_id_start_OBJECTS) +test_pr_other_id_start_LDADD = $(LDADD) +test_pr_other_id_start_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_other_lowercase_OBJECTS = \ + unictype/test-pr_other_lowercase.$(OBJEXT) +test_pr_other_lowercase_OBJECTS = \ + $(am_test_pr_other_lowercase_OBJECTS) +test_pr_other_lowercase_LDADD = $(LDADD) +test_pr_other_lowercase_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_other_math_OBJECTS = unictype/test-pr_other_math.$(OBJEXT) +test_pr_other_math_OBJECTS = $(am_test_pr_other_math_OBJECTS) +test_pr_other_math_LDADD = $(LDADD) +test_pr_other_math_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_other_uppercase_OBJECTS = \ + unictype/test-pr_other_uppercase.$(OBJEXT) +test_pr_other_uppercase_OBJECTS = \ + $(am_test_pr_other_uppercase_OBJECTS) +test_pr_other_uppercase_LDADD = $(LDADD) +test_pr_other_uppercase_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_paired_punctuation_OBJECTS = \ + unictype/test-pr_paired_punctuation.$(OBJEXT) +test_pr_paired_punctuation_OBJECTS = \ + $(am_test_pr_paired_punctuation_OBJECTS) +test_pr_paired_punctuation_LDADD = $(LDADD) +test_pr_paired_punctuation_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_paragraph_separator_OBJECTS = \ + unictype/test-pr_paragraph_separator.$(OBJEXT) +test_pr_paragraph_separator_OBJECTS = \ + $(am_test_pr_paragraph_separator_OBJECTS) +test_pr_paragraph_separator_LDADD = $(LDADD) +test_pr_paragraph_separator_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_pattern_syntax_OBJECTS = \ + unictype/test-pr_pattern_syntax.$(OBJEXT) +test_pr_pattern_syntax_OBJECTS = $(am_test_pr_pattern_syntax_OBJECTS) +test_pr_pattern_syntax_LDADD = $(LDADD) +test_pr_pattern_syntax_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_pattern_white_space_OBJECTS = \ + unictype/test-pr_pattern_white_space.$(OBJEXT) +test_pr_pattern_white_space_OBJECTS = \ + $(am_test_pr_pattern_white_space_OBJECTS) +test_pr_pattern_white_space_LDADD = $(LDADD) +test_pr_pattern_white_space_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_private_use_OBJECTS = \ + unictype/test-pr_private_use.$(OBJEXT) +test_pr_private_use_OBJECTS = $(am_test_pr_private_use_OBJECTS) +test_pr_private_use_LDADD = $(LDADD) +test_pr_private_use_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_punctuation_OBJECTS = \ + unictype/test-pr_punctuation.$(OBJEXT) +test_pr_punctuation_OBJECTS = $(am_test_pr_punctuation_OBJECTS) +test_pr_punctuation_LDADD = $(LDADD) +test_pr_punctuation_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_quotation_mark_OBJECTS = \ + unictype/test-pr_quotation_mark.$(OBJEXT) +test_pr_quotation_mark_OBJECTS = $(am_test_pr_quotation_mark_OBJECTS) +test_pr_quotation_mark_LDADD = $(LDADD) +test_pr_quotation_mark_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_radical_OBJECTS = unictype/test-pr_radical.$(OBJEXT) +test_pr_radical_OBJECTS = $(am_test_pr_radical_OBJECTS) +test_pr_radical_LDADD = $(LDADD) +test_pr_radical_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_sentence_terminal_OBJECTS = \ + unictype/test-pr_sentence_terminal.$(OBJEXT) +test_pr_sentence_terminal_OBJECTS = \ + $(am_test_pr_sentence_terminal_OBJECTS) +test_pr_sentence_terminal_LDADD = $(LDADD) +test_pr_sentence_terminal_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_soft_dotted_OBJECTS = \ + unictype/test-pr_soft_dotted.$(OBJEXT) +test_pr_soft_dotted_OBJECTS = $(am_test_pr_soft_dotted_OBJECTS) +test_pr_soft_dotted_LDADD = $(LDADD) +test_pr_soft_dotted_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_space_OBJECTS = unictype/test-pr_space.$(OBJEXT) +test_pr_space_OBJECTS = $(am_test_pr_space_OBJECTS) +test_pr_space_LDADD = $(LDADD) +test_pr_space_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_terminal_punctuation_OBJECTS = \ + unictype/test-pr_terminal_punctuation.$(OBJEXT) +test_pr_terminal_punctuation_OBJECTS = \ + $(am_test_pr_terminal_punctuation_OBJECTS) +test_pr_terminal_punctuation_LDADD = $(LDADD) +test_pr_terminal_punctuation_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_test_OBJECTS = unictype/test-pr_test.$(OBJEXT) +test_pr_test_OBJECTS = $(am_test_pr_test_OBJECTS) +test_pr_test_LDADD = $(LDADD) +test_pr_test_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_titlecase_OBJECTS = unictype/test-pr_titlecase.$(OBJEXT) +test_pr_titlecase_OBJECTS = $(am_test_pr_titlecase_OBJECTS) +test_pr_titlecase_LDADD = $(LDADD) +test_pr_titlecase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_unassigned_code_value_OBJECTS = \ + unictype/test-pr_unassigned_code_value.$(OBJEXT) +test_pr_unassigned_code_value_OBJECTS = \ + $(am_test_pr_unassigned_code_value_OBJECTS) +test_pr_unassigned_code_value_LDADD = $(LDADD) +test_pr_unassigned_code_value_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_unified_ideograph_OBJECTS = \ + unictype/test-pr_unified_ideograph.$(OBJEXT) +test_pr_unified_ideograph_OBJECTS = \ + $(am_test_pr_unified_ideograph_OBJECTS) +test_pr_unified_ideograph_LDADD = $(LDADD) +test_pr_unified_ideograph_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_uppercase_OBJECTS = unictype/test-pr_uppercase.$(OBJEXT) +test_pr_uppercase_OBJECTS = $(am_test_pr_uppercase_OBJECTS) +test_pr_uppercase_LDADD = $(LDADD) +test_pr_uppercase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_variation_selector_OBJECTS = \ + unictype/test-pr_variation_selector.$(OBJEXT) +test_pr_variation_selector_OBJECTS = \ + $(am_test_pr_variation_selector_OBJECTS) +test_pr_variation_selector_LDADD = $(LDADD) +test_pr_variation_selector_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_pr_white_space_OBJECTS = \ + unictype/test-pr_white_space.$(OBJEXT) +test_pr_white_space_OBJECTS = $(am_test_pr_white_space_OBJECTS) +test_pr_white_space_LDADD = $(LDADD) +test_pr_white_space_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_xid_continue_OBJECTS = \ + unictype/test-pr_xid_continue.$(OBJEXT) +test_pr_xid_continue_OBJECTS = $(am_test_pr_xid_continue_OBJECTS) +test_pr_xid_continue_LDADD = $(LDADD) +test_pr_xid_continue_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_xid_start_OBJECTS = unictype/test-pr_xid_start.$(OBJEXT) +test_pr_xid_start_OBJECTS = $(am_test_pr_xid_start_OBJECTS) +test_pr_xid_start_LDADD = $(LDADD) +test_pr_xid_start_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_pr_zero_width_OBJECTS = unictype/test-pr_zero_width.$(OBJEXT) +test_pr_zero_width_OBJECTS = $(am_test_pr_zero_width_OBJECTS) +test_pr_zero_width_LDADD = $(LDADD) +test_pr_zero_width_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_printf_frexp_SOURCES = test-printf-frexp.c +test_printf_frexp_OBJECTS = test-printf-frexp.$(OBJEXT) +test_printf_frexp_LDADD = $(LDADD) +test_printf_frexp_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_printf_frexpl_SOURCES = test-printf-frexpl.c +test_printf_frexpl_OBJECTS = test-printf-frexpl.$(OBJEXT) +test_printf_frexpl_LDADD = $(LDADD) +test_printf_frexpl_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_scripts_OBJECTS = unictype/test-scripts.$(OBJEXT) +test_scripts_OBJECTS = $(am_test_scripts_OBJECTS) +test_scripts_LDADD = $(LDADD) +test_scripts_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_signbit_SOURCES = test-signbit.c +test_signbit_OBJECTS = test-signbit.$(OBJEXT) +test_signbit_LDADD = $(LDADD) +test_signbit_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_stdbool_SOURCES = test-stdbool.c +test_stdbool_OBJECTS = test-stdbool.$(OBJEXT) +test_stdbool_LDADD = $(LDADD) +test_stdbool_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_stdint_SOURCES = test-stdint.c +test_stdint_OBJECTS = test-stdint.$(OBJEXT) +test_stdint_LDADD = $(LDADD) +test_stdint_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_stdlib_SOURCES = test-stdlib.c +test_stdlib_OBJECTS = test-stdlib.$(OBJEXT) +test_stdlib_LDADD = $(LDADD) +test_stdlib_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_strerror_SOURCES = test-strerror.c +test_strerror_OBJECTS = test-strerror.$(OBJEXT) +test_strerror_LDADD = $(LDADD) +test_strerror_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_striconveh_SOURCES = test-striconveh.c +test_striconveh_OBJECTS = test-striconveh.$(OBJEXT) +test_striconveh_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_striconveha_SOURCES = test-striconveha.c +test_striconveha_OBJECTS = test-striconveha.$(OBJEXT) +test_striconveha_DEPENDENCIES = $(am__DEPENDENCIES_2) +test_string_SOURCES = test-string.c +test_string_OBJECTS = test-string.$(OBJEXT) +test_string_LDADD = $(LDADD) +test_string_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_sy_c_ident_OBJECTS = unictype/test-sy_c_ident.$(OBJEXT) +test_sy_c_ident_OBJECTS = $(am_test_sy_c_ident_OBJECTS) +test_sy_c_ident_LDADD = $(LDADD) +test_sy_c_ident_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_sy_c_whitespace_OBJECTS = \ + unictype/test-sy_c_whitespace.$(OBJEXT) +test_sy_c_whitespace_OBJECTS = $(am_test_sy_c_whitespace_OBJECTS) +test_sy_c_whitespace_LDADD = $(LDADD) +test_sy_c_whitespace_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_sy_java_ident_OBJECTS = unictype/test-sy_java_ident.$(OBJEXT) +test_sy_java_ident_OBJECTS = $(am_test_sy_java_ident_OBJECTS) +test_sy_java_ident_LDADD = $(LDADD) +test_sy_java_ident_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_sy_java_whitespace_OBJECTS = \ + unictype/test-sy_java_whitespace.$(OBJEXT) +test_sy_java_whitespace_OBJECTS = \ + $(am_test_sy_java_whitespace_OBJECTS) +test_sy_java_whitespace_LDADD = $(LDADD) +test_sy_java_whitespace_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_u16_asnprintf1_OBJECTS = \ + unistdio/test-u16-asnprintf1.$(OBJEXT) +test_u16_asnprintf1_OBJECTS = $(am_test_u16_asnprintf1_OBJECTS) +test_u16_asnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_casecmp_OBJECTS = unicase/test-u16-casecmp.$(OBJEXT) +test_u16_casecmp_OBJECTS = $(am_test_u16_casecmp_OBJECTS) +test_u16_casecmp_LDADD = $(LDADD) +test_u16_casecmp_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_casecoll_OBJECTS = unicase/test-u16-casecoll.$(OBJEXT) +test_u16_casecoll_OBJECTS = $(am_test_u16_casecoll_OBJECTS) +test_u16_casecoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_casefold_OBJECTS = unicase/test-u16-casefold.$(OBJEXT) +test_u16_casefold_OBJECTS = $(am_test_u16_casefold_OBJECTS) +test_u16_casefold_LDADD = $(LDADD) +test_u16_casefold_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_conv_from_enc_OBJECTS = \ + uniconv/test-u16-conv-from-enc.$(OBJEXT) +test_u16_conv_from_enc_OBJECTS = $(am_test_u16_conv_from_enc_OBJECTS) +test_u16_conv_from_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_conv_to_enc_OBJECTS = \ + uniconv/test-u16-conv-to-enc.$(OBJEXT) +test_u16_conv_to_enc_OBJECTS = $(am_test_u16_conv_to_enc_OBJECTS) +test_u16_conv_to_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_is_cased_OBJECTS = unicase/test-u16-is-cased.$(OBJEXT) +test_u16_is_cased_OBJECTS = $(am_test_u16_is_cased_OBJECTS) +test_u16_is_cased_LDADD = $(LDADD) +test_u16_is_cased_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_is_casefolded_OBJECTS = \ + unicase/test-u16-is-casefolded.$(OBJEXT) +test_u16_is_casefolded_OBJECTS = $(am_test_u16_is_casefolded_OBJECTS) +test_u16_is_casefolded_LDADD = $(LDADD) +test_u16_is_casefolded_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_u16_is_lowercase_OBJECTS = \ + unicase/test-u16-is-lowercase.$(OBJEXT) +test_u16_is_lowercase_OBJECTS = $(am_test_u16_is_lowercase_OBJECTS) +test_u16_is_lowercase_LDADD = $(LDADD) +test_u16_is_lowercase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_is_titlecase_OBJECTS = \ + unicase/test-u16-is-titlecase.$(OBJEXT) +test_u16_is_titlecase_OBJECTS = $(am_test_u16_is_titlecase_OBJECTS) +test_u16_is_titlecase_LDADD = $(LDADD) +test_u16_is_titlecase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_is_uppercase_OBJECTS = \ + unicase/test-u16-is-uppercase.$(OBJEXT) +test_u16_is_uppercase_OBJECTS = $(am_test_u16_is_uppercase_OBJECTS) +test_u16_is_uppercase_LDADD = $(LDADD) +test_u16_is_uppercase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_normcmp_OBJECTS = uninorm/test-u16-normcmp.$(OBJEXT) +test_u16_normcmp_OBJECTS = $(am_test_u16_normcmp_OBJECTS) +test_u16_normcmp_LDADD = $(LDADD) +test_u16_normcmp_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_normcoll_OBJECTS = uninorm/test-u16-normcoll.$(OBJEXT) +test_u16_normcoll_OBJECTS = $(am_test_u16_normcoll_OBJECTS) +test_u16_normcoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_possible_linebreaks_OBJECTS = \ + unilbrk/test-u16-possible-linebreaks.$(OBJEXT) +test_u16_possible_linebreaks_OBJECTS = \ + $(am_test_u16_possible_linebreaks_OBJECTS) +test_u16_possible_linebreaks_LDADD = $(LDADD) +test_u16_possible_linebreaks_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_u16_strconv_from_enc_OBJECTS = \ + uniconv/test-u16-strconv-from-enc.$(OBJEXT) +test_u16_strconv_from_enc_OBJECTS = \ + $(am_test_u16_strconv_from_enc_OBJECTS) +test_u16_strconv_from_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_strconv_to_enc_OBJECTS = \ + uniconv/test-u16-strconv-to-enc.$(OBJEXT) +test_u16_strconv_to_enc_OBJECTS = \ + $(am_test_u16_strconv_to_enc_OBJECTS) +test_u16_strconv_to_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_strwidth_OBJECTS = uniwidth/test-u16-strwidth.$(OBJEXT) +test_u16_strwidth_OBJECTS = $(am_test_u16_strwidth_OBJECTS) +test_u16_strwidth_LDADD = $(LDADD) +test_u16_strwidth_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_tolower_OBJECTS = unicase/test-u16-tolower.$(OBJEXT) +test_u16_tolower_OBJECTS = $(am_test_u16_tolower_OBJECTS) +test_u16_tolower_LDADD = $(LDADD) +test_u16_tolower_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_totitle_OBJECTS = unicase/test-u16-totitle.$(OBJEXT) +test_u16_totitle_OBJECTS = $(am_test_u16_totitle_OBJECTS) +test_u16_totitle_LDADD = $(LDADD) +test_u16_totitle_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_toupper_OBJECTS = unicase/test-u16-toupper.$(OBJEXT) +test_u16_toupper_OBJECTS = $(am_test_u16_toupper_OBJECTS) +test_u16_toupper_LDADD = $(LDADD) +test_u16_toupper_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_vasnprintf1_OBJECTS = \ + unistdio/test-u16-vasnprintf1.$(OBJEXT) +test_u16_vasnprintf1_OBJECTS = $(am_test_u16_vasnprintf1_OBJECTS) +test_u16_vasnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_vasnprintf2_OBJECTS = \ + unistdio/test-u16-vasnprintf2.$(OBJEXT) +test_u16_vasnprintf2_OBJECTS = $(am_test_u16_vasnprintf2_OBJECTS) +test_u16_vasnprintf2_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_vasnprintf3_OBJECTS = \ + unistdio/test-u16-vasnprintf3.$(OBJEXT) +test_u16_vasnprintf3_OBJECTS = $(am_test_u16_vasnprintf3_OBJECTS) +test_u16_vasnprintf3_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_vasprintf1_OBJECTS = \ + unistdio/test-u16-vasprintf1.$(OBJEXT) +test_u16_vasprintf1_OBJECTS = $(am_test_u16_vasprintf1_OBJECTS) +test_u16_vasprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_vsnprintf1_OBJECTS = \ + unistdio/test-u16-vsnprintf1.$(OBJEXT) +test_u16_vsnprintf1_OBJECTS = $(am_test_u16_vsnprintf1_OBJECTS) +test_u16_vsnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_vsprintf1_OBJECTS = unistdio/test-u16-vsprintf1.$(OBJEXT) +test_u16_vsprintf1_OBJECTS = $(am_test_u16_vsprintf1_OBJECTS) +test_u16_vsprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u16_width_OBJECTS = uniwidth/test-u16-width.$(OBJEXT) +test_u16_width_OBJECTS = $(am_test_u16_width_OBJECTS) +test_u16_width_LDADD = $(LDADD) +test_u16_width_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u16_width_linebreaks_OBJECTS = \ + unilbrk/test-u16-width-linebreaks.$(OBJEXT) +test_u16_width_linebreaks_OBJECTS = \ + $(am_test_u16_width_linebreaks_OBJECTS) +test_u16_width_linebreaks_LDADD = $(LDADD) +test_u16_width_linebreaks_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_u16_wordbreaks_OBJECTS = \ + uniwbrk/test-u16-wordbreaks.$(OBJEXT) +test_u16_wordbreaks_OBJECTS = $(am_test_u16_wordbreaks_OBJECTS) +test_u16_wordbreaks_LDADD = $(LDADD) +test_u16_wordbreaks_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_asnprintf1_OBJECTS = \ + unistdio/test-u32-asnprintf1.$(OBJEXT) +test_u32_asnprintf1_OBJECTS = $(am_test_u32_asnprintf1_OBJECTS) +test_u32_asnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_casecmp_OBJECTS = unicase/test-u32-casecmp.$(OBJEXT) +test_u32_casecmp_OBJECTS = $(am_test_u32_casecmp_OBJECTS) +test_u32_casecmp_LDADD = $(LDADD) +test_u32_casecmp_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_casecoll_OBJECTS = unicase/test-u32-casecoll.$(OBJEXT) +test_u32_casecoll_OBJECTS = $(am_test_u32_casecoll_OBJECTS) +test_u32_casecoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_casefold_OBJECTS = unicase/test-u32-casefold.$(OBJEXT) +test_u32_casefold_OBJECTS = $(am_test_u32_casefold_OBJECTS) +test_u32_casefold_LDADD = $(LDADD) +test_u32_casefold_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_conv_from_enc_OBJECTS = \ + uniconv/test-u32-conv-from-enc.$(OBJEXT) +test_u32_conv_from_enc_OBJECTS = $(am_test_u32_conv_from_enc_OBJECTS) +test_u32_conv_from_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_conv_to_enc_OBJECTS = \ + uniconv/test-u32-conv-to-enc.$(OBJEXT) +test_u32_conv_to_enc_OBJECTS = $(am_test_u32_conv_to_enc_OBJECTS) +test_u32_conv_to_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_is_cased_OBJECTS = unicase/test-u32-is-cased.$(OBJEXT) +test_u32_is_cased_OBJECTS = $(am_test_u32_is_cased_OBJECTS) +test_u32_is_cased_LDADD = $(LDADD) +test_u32_is_cased_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_is_casefolded_OBJECTS = \ + unicase/test-u32-is-casefolded.$(OBJEXT) +test_u32_is_casefolded_OBJECTS = $(am_test_u32_is_casefolded_OBJECTS) +test_u32_is_casefolded_LDADD = $(LDADD) +test_u32_is_casefolded_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_u32_is_lowercase_OBJECTS = \ + unicase/test-u32-is-lowercase.$(OBJEXT) +test_u32_is_lowercase_OBJECTS = $(am_test_u32_is_lowercase_OBJECTS) +test_u32_is_lowercase_LDADD = $(LDADD) +test_u32_is_lowercase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_is_titlecase_OBJECTS = \ + unicase/test-u32-is-titlecase.$(OBJEXT) +test_u32_is_titlecase_OBJECTS = $(am_test_u32_is_titlecase_OBJECTS) +test_u32_is_titlecase_LDADD = $(LDADD) +test_u32_is_titlecase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_is_uppercase_OBJECTS = \ + unicase/test-u32-is-uppercase.$(OBJEXT) +test_u32_is_uppercase_OBJECTS = $(am_test_u32_is_uppercase_OBJECTS) +test_u32_is_uppercase_LDADD = $(LDADD) +test_u32_is_uppercase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_nfc_big_OBJECTS = uninorm/test-u32-nfc-big.$(OBJEXT) \ + uninorm/test-u32-normalize-big.$(OBJEXT) +test_u32_nfc_big_OBJECTS = $(am_test_u32_nfc_big_OBJECTS) +test_u32_nfc_big_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_nfd_big_OBJECTS = uninorm/test-u32-nfd-big.$(OBJEXT) \ + uninorm/test-u32-normalize-big.$(OBJEXT) +test_u32_nfd_big_OBJECTS = $(am_test_u32_nfd_big_OBJECTS) +test_u32_nfd_big_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_nfkc_big_OBJECTS = uninorm/test-u32-nfkc-big.$(OBJEXT) \ + uninorm/test-u32-normalize-big.$(OBJEXT) +test_u32_nfkc_big_OBJECTS = $(am_test_u32_nfkc_big_OBJECTS) +test_u32_nfkc_big_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_nfkd_big_OBJECTS = uninorm/test-u32-nfkd-big.$(OBJEXT) \ + uninorm/test-u32-normalize-big.$(OBJEXT) +test_u32_nfkd_big_OBJECTS = $(am_test_u32_nfkd_big_OBJECTS) +test_u32_nfkd_big_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_normcmp_OBJECTS = uninorm/test-u32-normcmp.$(OBJEXT) +test_u32_normcmp_OBJECTS = $(am_test_u32_normcmp_OBJECTS) +test_u32_normcmp_LDADD = $(LDADD) +test_u32_normcmp_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_normcoll_OBJECTS = uninorm/test-u32-normcoll.$(OBJEXT) +test_u32_normcoll_OBJECTS = $(am_test_u32_normcoll_OBJECTS) +test_u32_normcoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_possible_linebreaks_OBJECTS = \ + unilbrk/test-u32-possible-linebreaks.$(OBJEXT) +test_u32_possible_linebreaks_OBJECTS = \ + $(am_test_u32_possible_linebreaks_OBJECTS) +test_u32_possible_linebreaks_LDADD = $(LDADD) +test_u32_possible_linebreaks_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_u32_strconv_from_enc_OBJECTS = \ + uniconv/test-u32-strconv-from-enc.$(OBJEXT) +test_u32_strconv_from_enc_OBJECTS = \ + $(am_test_u32_strconv_from_enc_OBJECTS) +test_u32_strconv_from_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_strconv_to_enc_OBJECTS = \ + uniconv/test-u32-strconv-to-enc.$(OBJEXT) +test_u32_strconv_to_enc_OBJECTS = \ + $(am_test_u32_strconv_to_enc_OBJECTS) +test_u32_strconv_to_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_strwidth_OBJECTS = uniwidth/test-u32-strwidth.$(OBJEXT) +test_u32_strwidth_OBJECTS = $(am_test_u32_strwidth_OBJECTS) +test_u32_strwidth_LDADD = $(LDADD) +test_u32_strwidth_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_tolower_OBJECTS = unicase/test-u32-tolower.$(OBJEXT) +test_u32_tolower_OBJECTS = $(am_test_u32_tolower_OBJECTS) +test_u32_tolower_LDADD = $(LDADD) +test_u32_tolower_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_totitle_OBJECTS = unicase/test-u32-totitle.$(OBJEXT) +test_u32_totitle_OBJECTS = $(am_test_u32_totitle_OBJECTS) +test_u32_totitle_LDADD = $(LDADD) +test_u32_totitle_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_toupper_OBJECTS = unicase/test-u32-toupper.$(OBJEXT) +test_u32_toupper_OBJECTS = $(am_test_u32_toupper_OBJECTS) +test_u32_toupper_LDADD = $(LDADD) +test_u32_toupper_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_vasnprintf1_OBJECTS = \ + unistdio/test-u32-vasnprintf1.$(OBJEXT) +test_u32_vasnprintf1_OBJECTS = $(am_test_u32_vasnprintf1_OBJECTS) +test_u32_vasnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_vasnprintf2_OBJECTS = \ + unistdio/test-u32-vasnprintf2.$(OBJEXT) +test_u32_vasnprintf2_OBJECTS = $(am_test_u32_vasnprintf2_OBJECTS) +test_u32_vasnprintf2_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_vasnprintf3_OBJECTS = \ + unistdio/test-u32-vasnprintf3.$(OBJEXT) +test_u32_vasnprintf3_OBJECTS = $(am_test_u32_vasnprintf3_OBJECTS) +test_u32_vasnprintf3_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_vasprintf1_OBJECTS = \ + unistdio/test-u32-vasprintf1.$(OBJEXT) +test_u32_vasprintf1_OBJECTS = $(am_test_u32_vasprintf1_OBJECTS) +test_u32_vasprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_vsnprintf1_OBJECTS = \ + unistdio/test-u32-vsnprintf1.$(OBJEXT) +test_u32_vsnprintf1_OBJECTS = $(am_test_u32_vsnprintf1_OBJECTS) +test_u32_vsnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_vsprintf1_OBJECTS = unistdio/test-u32-vsprintf1.$(OBJEXT) +test_u32_vsprintf1_OBJECTS = $(am_test_u32_vsprintf1_OBJECTS) +test_u32_vsprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u32_width_OBJECTS = uniwidth/test-u32-width.$(OBJEXT) +test_u32_width_OBJECTS = $(am_test_u32_width_OBJECTS) +test_u32_width_LDADD = $(LDADD) +test_u32_width_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u32_width_linebreaks_OBJECTS = \ + unilbrk/test-u32-width-linebreaks.$(OBJEXT) +test_u32_width_linebreaks_OBJECTS = \ + $(am_test_u32_width_linebreaks_OBJECTS) +test_u32_width_linebreaks_LDADD = $(LDADD) +test_u32_width_linebreaks_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_u32_wordbreaks_OBJECTS = \ + uniwbrk/test-u32-wordbreaks.$(OBJEXT) +test_u32_wordbreaks_OBJECTS = $(am_test_u32_wordbreaks_OBJECTS) +test_u32_wordbreaks_LDADD = $(LDADD) +test_u32_wordbreaks_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_asnprintf1_OBJECTS = unistdio/test-u8-asnprintf1.$(OBJEXT) +test_u8_asnprintf1_OBJECTS = $(am_test_u8_asnprintf1_OBJECTS) +test_u8_asnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_casecmp_OBJECTS = unicase/test-u8-casecmp.$(OBJEXT) +test_u8_casecmp_OBJECTS = $(am_test_u8_casecmp_OBJECTS) +test_u8_casecmp_LDADD = $(LDADD) +test_u8_casecmp_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_casecoll_OBJECTS = unicase/test-u8-casecoll.$(OBJEXT) +test_u8_casecoll_OBJECTS = $(am_test_u8_casecoll_OBJECTS) +test_u8_casecoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_casefold_OBJECTS = unicase/test-u8-casefold.$(OBJEXT) +test_u8_casefold_OBJECTS = $(am_test_u8_casefold_OBJECTS) +test_u8_casefold_LDADD = $(LDADD) +test_u8_casefold_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_conv_from_enc_OBJECTS = \ + uniconv/test-u8-conv-from-enc.$(OBJEXT) +test_u8_conv_from_enc_OBJECTS = $(am_test_u8_conv_from_enc_OBJECTS) +test_u8_conv_from_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_conv_to_enc_OBJECTS = \ + uniconv/test-u8-conv-to-enc.$(OBJEXT) +test_u8_conv_to_enc_OBJECTS = $(am_test_u8_conv_to_enc_OBJECTS) +test_u8_conv_to_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_is_cased_OBJECTS = unicase/test-u8-is-cased.$(OBJEXT) +test_u8_is_cased_OBJECTS = $(am_test_u8_is_cased_OBJECTS) +test_u8_is_cased_LDADD = $(LDADD) +test_u8_is_cased_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_is_casefolded_OBJECTS = \ + unicase/test-u8-is-casefolded.$(OBJEXT) +test_u8_is_casefolded_OBJECTS = $(am_test_u8_is_casefolded_OBJECTS) +test_u8_is_casefolded_LDADD = $(LDADD) +test_u8_is_casefolded_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_is_lowercase_OBJECTS = \ + unicase/test-u8-is-lowercase.$(OBJEXT) +test_u8_is_lowercase_OBJECTS = $(am_test_u8_is_lowercase_OBJECTS) +test_u8_is_lowercase_LDADD = $(LDADD) +test_u8_is_lowercase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_is_titlecase_OBJECTS = \ + unicase/test-u8-is-titlecase.$(OBJEXT) +test_u8_is_titlecase_OBJECTS = $(am_test_u8_is_titlecase_OBJECTS) +test_u8_is_titlecase_LDADD = $(LDADD) +test_u8_is_titlecase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_is_uppercase_OBJECTS = \ + unicase/test-u8-is-uppercase.$(OBJEXT) +test_u8_is_uppercase_OBJECTS = $(am_test_u8_is_uppercase_OBJECTS) +test_u8_is_uppercase_LDADD = $(LDADD) +test_u8_is_uppercase_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_normcmp_OBJECTS = uninorm/test-u8-normcmp.$(OBJEXT) +test_u8_normcmp_OBJECTS = $(am_test_u8_normcmp_OBJECTS) +test_u8_normcmp_LDADD = $(LDADD) +test_u8_normcmp_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_normcoll_OBJECTS = uninorm/test-u8-normcoll.$(OBJEXT) +test_u8_normcoll_OBJECTS = $(am_test_u8_normcoll_OBJECTS) +test_u8_normcoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_possible_linebreaks_OBJECTS = \ + unilbrk/test-u8-possible-linebreaks.$(OBJEXT) +test_u8_possible_linebreaks_OBJECTS = \ + $(am_test_u8_possible_linebreaks_OBJECTS) +test_u8_possible_linebreaks_LDADD = $(LDADD) +test_u8_possible_linebreaks_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_u8_strconv_from_enc_OBJECTS = \ + uniconv/test-u8-strconv-from-enc.$(OBJEXT) +test_u8_strconv_from_enc_OBJECTS = \ + $(am_test_u8_strconv_from_enc_OBJECTS) +test_u8_strconv_from_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_strconv_to_enc_OBJECTS = \ + uniconv/test-u8-strconv-to-enc.$(OBJEXT) +test_u8_strconv_to_enc_OBJECTS = $(am_test_u8_strconv_to_enc_OBJECTS) +test_u8_strconv_to_enc_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_strwidth_OBJECTS = uniwidth/test-u8-strwidth.$(OBJEXT) +test_u8_strwidth_OBJECTS = $(am_test_u8_strwidth_OBJECTS) +test_u8_strwidth_LDADD = $(LDADD) +test_u8_strwidth_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_tolower_OBJECTS = unicase/test-u8-tolower.$(OBJEXT) +test_u8_tolower_OBJECTS = $(am_test_u8_tolower_OBJECTS) +test_u8_tolower_LDADD = $(LDADD) +test_u8_tolower_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_totitle_OBJECTS = unicase/test-u8-totitle.$(OBJEXT) +test_u8_totitle_OBJECTS = $(am_test_u8_totitle_OBJECTS) +test_u8_totitle_LDADD = $(LDADD) +test_u8_totitle_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_toupper_OBJECTS = unicase/test-u8-toupper.$(OBJEXT) +test_u8_toupper_OBJECTS = $(am_test_u8_toupper_OBJECTS) +test_u8_toupper_LDADD = $(LDADD) +test_u8_toupper_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_vasnprintf1_OBJECTS = \ + unistdio/test-u8-vasnprintf1.$(OBJEXT) +test_u8_vasnprintf1_OBJECTS = $(am_test_u8_vasnprintf1_OBJECTS) +test_u8_vasnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_vasnprintf2_OBJECTS = \ + unistdio/test-u8-vasnprintf2.$(OBJEXT) +test_u8_vasnprintf2_OBJECTS = $(am_test_u8_vasnprintf2_OBJECTS) +test_u8_vasnprintf2_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_vasnprintf3_OBJECTS = \ + unistdio/test-u8-vasnprintf3.$(OBJEXT) +test_u8_vasnprintf3_OBJECTS = $(am_test_u8_vasnprintf3_OBJECTS) +test_u8_vasnprintf3_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_vasprintf1_OBJECTS = unistdio/test-u8-vasprintf1.$(OBJEXT) +test_u8_vasprintf1_OBJECTS = $(am_test_u8_vasprintf1_OBJECTS) +test_u8_vasprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_vsnprintf1_OBJECTS = unistdio/test-u8-vsnprintf1.$(OBJEXT) +test_u8_vsnprintf1_OBJECTS = $(am_test_u8_vsnprintf1_OBJECTS) +test_u8_vsnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_vsprintf1_OBJECTS = unistdio/test-u8-vsprintf1.$(OBJEXT) +test_u8_vsprintf1_OBJECTS = $(am_test_u8_vsprintf1_OBJECTS) +test_u8_vsprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_u8_width_OBJECTS = uniwidth/test-u8-width.$(OBJEXT) +test_u8_width_OBJECTS = $(am_test_u8_width_OBJECTS) +test_u8_width_LDADD = $(LDADD) +test_u8_width_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_u8_width_linebreaks_OBJECTS = \ + unilbrk/test-u8-width-linebreaks.$(OBJEXT) +test_u8_width_linebreaks_OBJECTS = \ + $(am_test_u8_width_linebreaks_OBJECTS) +test_u8_width_linebreaks_LDADD = $(LDADD) +test_u8_width_linebreaks_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +am_test_u8_wordbreaks_OBJECTS = uniwbrk/test-u8-wordbreaks.$(OBJEXT) +test_u8_wordbreaks_OBJECTS = $(am_test_u8_wordbreaks_OBJECTS) +test_u8_wordbreaks_LDADD = $(LDADD) +test_u8_wordbreaks_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_uc_tolower_OBJECTS = unicase/test-uc_tolower.$(OBJEXT) +test_uc_tolower_OBJECTS = $(am_test_uc_tolower_OBJECTS) +test_uc_tolower_LDADD = $(LDADD) +test_uc_tolower_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_uc_totitle_OBJECTS = unicase/test-uc_totitle.$(OBJEXT) +test_uc_totitle_OBJECTS = $(am_test_uc_totitle_OBJECTS) +test_uc_totitle_LDADD = $(LDADD) +test_uc_totitle_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_uc_toupper_OBJECTS = unicase/test-uc_toupper.$(OBJEXT) +test_uc_toupper_OBJECTS = $(am_test_uc_toupper_OBJECTS) +test_uc_toupper_LDADD = $(LDADD) +test_uc_toupper_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_uc_width_OBJECTS = uniwidth/test-uc_width.$(OBJEXT) +test_uc_width_OBJECTS = $(am_test_uc_width_OBJECTS) +test_uc_width_LDADD = $(LDADD) +test_uc_width_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_uc_width2_OBJECTS = uniwidth/test-uc_width2.$(OBJEXT) +test_uc_width2_OBJECTS = $(am_test_uc_width2_OBJECTS) +test_uc_width2_LDADD = $(LDADD) +test_uc_width2_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +am_test_ulc_asnprintf1_OBJECTS = \ + unistdio/test-ulc-asnprintf1.$(OBJEXT) +test_ulc_asnprintf1_OBJECTS = $(am_test_ulc_asnprintf1_OBJECTS) +test_ulc_asnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ulc_casecmp_OBJECTS = unicase/test-ulc-casecmp.$(OBJEXT) +test_ulc_casecmp_OBJECTS = $(am_test_ulc_casecmp_OBJECTS) +test_ulc_casecmp_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ulc_casecoll_OBJECTS = unicase/test-ulc-casecoll.$(OBJEXT) +test_ulc_casecoll_OBJECTS = $(am_test_ulc_casecoll_OBJECTS) +test_ulc_casecoll_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ulc_possible_linebreaks_OBJECTS = \ + unilbrk/test-ulc-possible-linebreaks.$(OBJEXT) +test_ulc_possible_linebreaks_OBJECTS = \ + $(am_test_ulc_possible_linebreaks_OBJECTS) +test_ulc_possible_linebreaks_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ulc_vasnprintf1_OBJECTS = \ + unistdio/test-ulc-vasnprintf1.$(OBJEXT) +test_ulc_vasnprintf1_OBJECTS = $(am_test_ulc_vasnprintf1_OBJECTS) +test_ulc_vasnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ulc_vasnprintf2_OBJECTS = \ + unistdio/test-ulc-vasnprintf2.$(OBJEXT) +test_ulc_vasnprintf2_OBJECTS = $(am_test_ulc_vasnprintf2_OBJECTS) +test_ulc_vasnprintf2_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ulc_vasnprintf3_OBJECTS = \ + unistdio/test-ulc-vasnprintf3.$(OBJEXT) +test_ulc_vasnprintf3_OBJECTS = $(am_test_ulc_vasnprintf3_OBJECTS) +test_ulc_vasnprintf3_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ulc_vasprintf1_OBJECTS = \ + unistdio/test-ulc-vasprintf1.$(OBJEXT) +test_ulc_vasprintf1_OBJECTS = $(am_test_ulc_vasprintf1_OBJECTS) +test_ulc_vasprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ulc_vsnprintf1_OBJECTS = \ + unistdio/test-ulc-vsnprintf1.$(OBJEXT) +test_ulc_vsnprintf1_OBJECTS = $(am_test_ulc_vsnprintf1_OBJECTS) +test_ulc_vsnprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ulc_vsprintf1_OBJECTS = unistdio/test-ulc-vsprintf1.$(OBJEXT) +test_ulc_vsprintf1_OBJECTS = $(am_test_ulc_vsprintf1_OBJECTS) +test_ulc_vsprintf1_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ulc_width_linebreaks_OBJECTS = \ + unilbrk/test-ulc-width-linebreaks.$(OBJEXT) +test_ulc_width_linebreaks_OBJECTS = \ + $(am_test_ulc_width_linebreaks_OBJECTS) +test_ulc_width_linebreaks_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_ulc_wordbreaks_OBJECTS = \ + uniwbrk/test-ulc-wordbreaks.$(OBJEXT) +test_ulc_wordbreaks_OBJECTS = $(am_test_ulc_wordbreaks_OBJECTS) +test_ulc_wordbreaks_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_uninames_OBJECTS = uniname/test-uninames.$(OBJEXT) +test_uninames_OBJECTS = $(am_test_uninames_OBJECTS) +test_uninames_DEPENDENCIES = $(am__DEPENDENCIES_2) +am_test_uninorm_filter_nfc_OBJECTS = \ + uninorm/test-uninorm-filter-nfc.$(OBJEXT) +test_uninorm_filter_nfc_OBJECTS = \ + $(am_test_uninorm_filter_nfc_OBJECTS) +test_uninorm_filter_nfc_LDADD = $(LDADD) +test_uninorm_filter_nfc_DEPENDENCIES = libtests.a \ + ../lib/libunistring.la libtests.a $(am__DEPENDENCIES_1) +test_unistd_SOURCES = test-unistd.c +test_unistd_OBJECTS = test-unistd.$(OBJEXT) +test_unistd_LDADD = $(LDADD) +test_unistd_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_wchar_SOURCES = test-wchar.c +test_wchar_OBJECTS = test-wchar.$(OBJEXT) +test_wchar_LDADD = $(LDADD) +test_wchar_DEPENDENCIES = libtests.a ../lib/libunistring.la libtests.a \ + $(am__DEPENDENCIES_1) +test_wctype_SOURCES = test-wctype.c +test_wctype_OBJECTS = test-wctype.$(OBJEXT) +test_wctype_LDADD = $(LDADD) +test_wctype_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +test_wcwidth_SOURCES = test-wcwidth.c +test_wcwidth_OBJECTS = test-wcwidth.$(OBJEXT) +test_wcwidth_LDADD = $(LDADD) +test_wcwidth_DEPENDENCIES = libtests.a ../lib/libunistring.la \ + libtests.a $(am__DEPENDENCIES_1) +depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ + test-alloca-opt.c test-array-mergesort.c \ + $(test_bidi_byname_SOURCES) $(test_bidi_name_SOURCES) \ + $(test_bidi_of_SOURCES) $(test_bidi_test_SOURCES) \ + $(test_block_list_SOURCES) $(test_block_of_SOURCES) \ + $(test_block_test_SOURCES) test-c-ctype.c test-c-strcasecmp.c \ + test-c-strncasecmp.c $(test_canonical_decomposition_SOURCES) \ + $(test_cased_SOURCES) $(test_categ_C_SOURCES) \ + $(test_categ_Cc_SOURCES) $(test_categ_Cf_SOURCES) \ + $(test_categ_Cn_SOURCES) $(test_categ_Co_SOURCES) \ + $(test_categ_Cs_SOURCES) $(test_categ_L_SOURCES) \ + $(test_categ_Ll_SOURCES) $(test_categ_Lm_SOURCES) \ + $(test_categ_Lo_SOURCES) $(test_categ_Lt_SOURCES) \ + $(test_categ_Lu_SOURCES) $(test_categ_M_SOURCES) \ + $(test_categ_Mc_SOURCES) $(test_categ_Me_SOURCES) \ + $(test_categ_Mn_SOURCES) $(test_categ_N_SOURCES) \ + $(test_categ_Nd_SOURCES) $(test_categ_Nl_SOURCES) \ + $(test_categ_No_SOURCES) $(test_categ_P_SOURCES) \ + $(test_categ_Pc_SOURCES) $(test_categ_Pd_SOURCES) \ + $(test_categ_Pe_SOURCES) $(test_categ_Pf_SOURCES) \ + $(test_categ_Pi_SOURCES) $(test_categ_Po_SOURCES) \ + $(test_categ_Ps_SOURCES) $(test_categ_S_SOURCES) \ + $(test_categ_Sc_SOURCES) $(test_categ_Sk_SOURCES) \ + $(test_categ_Sm_SOURCES) $(test_categ_So_SOURCES) \ + $(test_categ_Z_SOURCES) $(test_categ_Zl_SOURCES) \ + $(test_categ_Zp_SOURCES) $(test_categ_Zs_SOURCES) \ + $(test_categ_and_SOURCES) $(test_categ_and_not_SOURCES) \ + $(test_categ_byname_SOURCES) $(test_categ_name_SOURCES) \ + $(test_categ_none_SOURCES) $(test_categ_of_SOURCES) \ + $(test_categ_or_SOURCES) $(test_categ_test_withtable_SOURCES) \ + $(test_combining_SOURCES) $(test_compat_decomposition_SOURCES) \ + $(test_composition_SOURCES) $(test_ctype_alnum_SOURCES) \ + $(test_ctype_alpha_SOURCES) $(test_ctype_blank_SOURCES) \ + $(test_ctype_cntrl_SOURCES) $(test_ctype_digit_SOURCES) \ + $(test_ctype_graph_SOURCES) $(test_ctype_lower_SOURCES) \ + $(test_ctype_print_SOURCES) $(test_ctype_punct_SOURCES) \ + $(test_ctype_space_SOURCES) $(test_ctype_upper_SOURCES) \ + $(test_ctype_xdigit_SOURCES) $(test_decdigit_SOURCES) \ + $(test_decomposing_form_SOURCES) $(test_decomposition_SOURCES) \ + $(test_digit_SOURCES) test-environ.c test-errno.c \ + $(test_frexpl_nolibm_SOURCES) test-fseterr.c test-iconv.c \ + $(test_ignorable_SOURCES) test-isnand-nolibm.c \ + test-isnanf-nolibm.c test-isnanl-nolibm.c test-locale.c \ + $(test_locale_language_SOURCES) test-localename.c \ + test-malloca.c test-math.c test-mbrtowc.c test-mbsinit.c \ + test-memchr.c $(test_mirror_SOURCES) $(test_nfc_SOURCES) \ + $(test_nfd_SOURCES) $(test_nfkc_SOURCES) $(test_nfkd_SOURCES) \ + $(test_numeric_SOURCES) $(test_pr_alphabetic_SOURCES) \ + $(test_pr_ascii_hex_digit_SOURCES) \ + $(test_pr_bidi_arabic_digit_SOURCES) \ + $(test_pr_bidi_arabic_right_to_left_SOURCES) \ + $(test_pr_bidi_block_separator_SOURCES) \ + $(test_pr_bidi_boundary_neutral_SOURCES) \ + $(test_pr_bidi_common_separator_SOURCES) \ + $(test_pr_bidi_control_SOURCES) \ + $(test_pr_bidi_embedding_or_override_SOURCES) \ + $(test_pr_bidi_eur_num_separator_SOURCES) \ + $(test_pr_bidi_eur_num_terminator_SOURCES) \ + $(test_pr_bidi_european_digit_SOURCES) \ + $(test_pr_bidi_hebrew_right_to_left_SOURCES) \ + $(test_pr_bidi_left_to_right_SOURCES) \ + $(test_pr_bidi_non_spacing_mark_SOURCES) \ + $(test_pr_bidi_other_neutral_SOURCES) \ + $(test_pr_bidi_pdf_SOURCES) \ + $(test_pr_bidi_segment_separator_SOURCES) \ + $(test_pr_bidi_whitespace_SOURCES) $(test_pr_byname_SOURCES) \ + $(test_pr_combining_SOURCES) $(test_pr_composite_SOURCES) \ + $(test_pr_currency_symbol_SOURCES) $(test_pr_dash_SOURCES) \ + $(test_pr_decimal_digit_SOURCES) \ + $(test_pr_default_ignorable_code_point_SOURCES) \ + $(test_pr_deprecated_SOURCES) $(test_pr_diacritic_SOURCES) \ + $(test_pr_extender_SOURCES) $(test_pr_format_control_SOURCES) \ + $(test_pr_grapheme_base_SOURCES) \ + $(test_pr_grapheme_extend_SOURCES) \ + $(test_pr_grapheme_link_SOURCES) $(test_pr_hex_digit_SOURCES) \ + $(test_pr_hyphen_SOURCES) $(test_pr_id_continue_SOURCES) \ + $(test_pr_id_start_SOURCES) $(test_pr_ideographic_SOURCES) \ + $(test_pr_ids_binary_operator_SOURCES) \ + $(test_pr_ids_trinary_operator_SOURCES) \ + $(test_pr_ignorable_control_SOURCES) \ + $(test_pr_iso_control_SOURCES) $(test_pr_join_control_SOURCES) \ + $(test_pr_left_of_pair_SOURCES) \ + $(test_pr_line_separator_SOURCES) \ + $(test_pr_logical_order_exception_SOURCES) \ + $(test_pr_lowercase_SOURCES) $(test_pr_math_SOURCES) \ + $(test_pr_non_break_SOURCES) \ + $(test_pr_not_a_character_SOURCES) $(test_pr_numeric_SOURCES) \ + $(test_pr_other_alphabetic_SOURCES) \ + $(test_pr_other_default_ignorable_code_point_SOURCES) \ + $(test_pr_other_grapheme_extend_SOURCES) \ + $(test_pr_other_id_continue_SOURCES) \ + $(test_pr_other_id_start_SOURCES) \ + $(test_pr_other_lowercase_SOURCES) \ + $(test_pr_other_math_SOURCES) \ + $(test_pr_other_uppercase_SOURCES) \ + $(test_pr_paired_punctuation_SOURCES) \ + $(test_pr_paragraph_separator_SOURCES) \ + $(test_pr_pattern_syntax_SOURCES) \ + $(test_pr_pattern_white_space_SOURCES) \ + $(test_pr_private_use_SOURCES) $(test_pr_punctuation_SOURCES) \ + $(test_pr_quotation_mark_SOURCES) $(test_pr_radical_SOURCES) \ + $(test_pr_sentence_terminal_SOURCES) \ + $(test_pr_soft_dotted_SOURCES) $(test_pr_space_SOURCES) \ + $(test_pr_terminal_punctuation_SOURCES) \ + $(test_pr_test_SOURCES) $(test_pr_titlecase_SOURCES) \ + $(test_pr_unassigned_code_value_SOURCES) \ + $(test_pr_unified_ideograph_SOURCES) \ + $(test_pr_uppercase_SOURCES) \ + $(test_pr_variation_selector_SOURCES) \ + $(test_pr_white_space_SOURCES) $(test_pr_xid_continue_SOURCES) \ + $(test_pr_xid_start_SOURCES) $(test_pr_zero_width_SOURCES) \ + test-printf-frexp.c test-printf-frexpl.c \ + $(test_scripts_SOURCES) test-signbit.c test-stdbool.c \ + test-stdint.c test-stdlib.c test-strerror.c test-striconveh.c \ + test-striconveha.c test-string.c $(test_sy_c_ident_SOURCES) \ + $(test_sy_c_whitespace_SOURCES) $(test_sy_java_ident_SOURCES) \ + $(test_sy_java_whitespace_SOURCES) \ + $(test_u16_asnprintf1_SOURCES) $(test_u16_casecmp_SOURCES) \ + $(test_u16_casecoll_SOURCES) $(test_u16_casefold_SOURCES) \ + $(test_u16_conv_from_enc_SOURCES) \ + $(test_u16_conv_to_enc_SOURCES) $(test_u16_is_cased_SOURCES) \ + $(test_u16_is_casefolded_SOURCES) \ + $(test_u16_is_lowercase_SOURCES) \ + $(test_u16_is_titlecase_SOURCES) \ + $(test_u16_is_uppercase_SOURCES) $(test_u16_normcmp_SOURCES) \ + $(test_u16_normcoll_SOURCES) \ + $(test_u16_possible_linebreaks_SOURCES) \ + $(test_u16_strconv_from_enc_SOURCES) \ + $(test_u16_strconv_to_enc_SOURCES) \ + $(test_u16_strwidth_SOURCES) $(test_u16_tolower_SOURCES) \ + $(test_u16_totitle_SOURCES) $(test_u16_toupper_SOURCES) \ + $(test_u16_vasnprintf1_SOURCES) \ + $(test_u16_vasnprintf2_SOURCES) \ + $(test_u16_vasnprintf3_SOURCES) $(test_u16_vasprintf1_SOURCES) \ + $(test_u16_vsnprintf1_SOURCES) $(test_u16_vsprintf1_SOURCES) \ + $(test_u16_width_SOURCES) $(test_u16_width_linebreaks_SOURCES) \ + $(test_u16_wordbreaks_SOURCES) $(test_u32_asnprintf1_SOURCES) \ + $(test_u32_casecmp_SOURCES) $(test_u32_casecoll_SOURCES) \ + $(test_u32_casefold_SOURCES) $(test_u32_conv_from_enc_SOURCES) \ + $(test_u32_conv_to_enc_SOURCES) $(test_u32_is_cased_SOURCES) \ + $(test_u32_is_casefolded_SOURCES) \ + $(test_u32_is_lowercase_SOURCES) \ + $(test_u32_is_titlecase_SOURCES) \ + $(test_u32_is_uppercase_SOURCES) $(test_u32_nfc_big_SOURCES) \ + $(test_u32_nfd_big_SOURCES) $(test_u32_nfkc_big_SOURCES) \ + $(test_u32_nfkd_big_SOURCES) $(test_u32_normcmp_SOURCES) \ + $(test_u32_normcoll_SOURCES) \ + $(test_u32_possible_linebreaks_SOURCES) \ + $(test_u32_strconv_from_enc_SOURCES) \ + $(test_u32_strconv_to_enc_SOURCES) \ + $(test_u32_strwidth_SOURCES) $(test_u32_tolower_SOURCES) \ + $(test_u32_totitle_SOURCES) $(test_u32_toupper_SOURCES) \ + $(test_u32_vasnprintf1_SOURCES) \ + $(test_u32_vasnprintf2_SOURCES) \ + $(test_u32_vasnprintf3_SOURCES) $(test_u32_vasprintf1_SOURCES) \ + $(test_u32_vsnprintf1_SOURCES) $(test_u32_vsprintf1_SOURCES) \ + $(test_u32_width_SOURCES) $(test_u32_width_linebreaks_SOURCES) \ + $(test_u32_wordbreaks_SOURCES) $(test_u8_asnprintf1_SOURCES) \ + $(test_u8_casecmp_SOURCES) $(test_u8_casecoll_SOURCES) \ + $(test_u8_casefold_SOURCES) $(test_u8_conv_from_enc_SOURCES) \ + $(test_u8_conv_to_enc_SOURCES) $(test_u8_is_cased_SOURCES) \ + $(test_u8_is_casefolded_SOURCES) \ + $(test_u8_is_lowercase_SOURCES) \ + $(test_u8_is_titlecase_SOURCES) \ + $(test_u8_is_uppercase_SOURCES) $(test_u8_normcmp_SOURCES) \ + $(test_u8_normcoll_SOURCES) \ + $(test_u8_possible_linebreaks_SOURCES) \ + $(test_u8_strconv_from_enc_SOURCES) \ + $(test_u8_strconv_to_enc_SOURCES) $(test_u8_strwidth_SOURCES) \ + $(test_u8_tolower_SOURCES) $(test_u8_totitle_SOURCES) \ + $(test_u8_toupper_SOURCES) $(test_u8_vasnprintf1_SOURCES) \ + $(test_u8_vasnprintf2_SOURCES) $(test_u8_vasnprintf3_SOURCES) \ + $(test_u8_vasprintf1_SOURCES) $(test_u8_vsnprintf1_SOURCES) \ + $(test_u8_vsprintf1_SOURCES) $(test_u8_width_SOURCES) \ + $(test_u8_width_linebreaks_SOURCES) \ + $(test_u8_wordbreaks_SOURCES) $(test_uc_tolower_SOURCES) \ + $(test_uc_totitle_SOURCES) $(test_uc_toupper_SOURCES) \ + $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ + $(test_ulc_asnprintf1_SOURCES) $(test_ulc_casecmp_SOURCES) \ + $(test_ulc_casecoll_SOURCES) \ + $(test_ulc_possible_linebreaks_SOURCES) \ + $(test_ulc_vasnprintf1_SOURCES) \ + $(test_ulc_vasnprintf2_SOURCES) \ + $(test_ulc_vasnprintf3_SOURCES) $(test_ulc_vasprintf1_SOURCES) \ + $(test_ulc_vsnprintf1_SOURCES) $(test_ulc_vsprintf1_SOURCES) \ + $(test_ulc_width_linebreaks_SOURCES) \ + $(test_ulc_wordbreaks_SOURCES) $(test_uninames_SOURCES) \ + $(test_uninorm_filter_nfc_SOURCES) test-unistd.c test-wchar.c \ + test-wctype.c test-wcwidth.c +DIST_SOURCES = $(libtests_a_SOURCES) $(EXTRA_libtests_a_SOURCES) \ + test-alloca-opt.c test-array-mergesort.c \ + $(test_bidi_byname_SOURCES) $(test_bidi_name_SOURCES) \ + $(test_bidi_of_SOURCES) $(test_bidi_test_SOURCES) \ + $(test_block_list_SOURCES) $(test_block_of_SOURCES) \ + $(test_block_test_SOURCES) test-c-ctype.c test-c-strcasecmp.c \ + test-c-strncasecmp.c $(test_canonical_decomposition_SOURCES) \ + $(test_cased_SOURCES) $(test_categ_C_SOURCES) \ + $(test_categ_Cc_SOURCES) $(test_categ_Cf_SOURCES) \ + $(test_categ_Cn_SOURCES) $(test_categ_Co_SOURCES) \ + $(test_categ_Cs_SOURCES) $(test_categ_L_SOURCES) \ + $(test_categ_Ll_SOURCES) $(test_categ_Lm_SOURCES) \ + $(test_categ_Lo_SOURCES) $(test_categ_Lt_SOURCES) \ + $(test_categ_Lu_SOURCES) $(test_categ_M_SOURCES) \ + $(test_categ_Mc_SOURCES) $(test_categ_Me_SOURCES) \ + $(test_categ_Mn_SOURCES) $(test_categ_N_SOURCES) \ + $(test_categ_Nd_SOURCES) $(test_categ_Nl_SOURCES) \ + $(test_categ_No_SOURCES) $(test_categ_P_SOURCES) \ + $(test_categ_Pc_SOURCES) $(test_categ_Pd_SOURCES) \ + $(test_categ_Pe_SOURCES) $(test_categ_Pf_SOURCES) \ + $(test_categ_Pi_SOURCES) $(test_categ_Po_SOURCES) \ + $(test_categ_Ps_SOURCES) $(test_categ_S_SOURCES) \ + $(test_categ_Sc_SOURCES) $(test_categ_Sk_SOURCES) \ + $(test_categ_Sm_SOURCES) $(test_categ_So_SOURCES) \ + $(test_categ_Z_SOURCES) $(test_categ_Zl_SOURCES) \ + $(test_categ_Zp_SOURCES) $(test_categ_Zs_SOURCES) \ + $(test_categ_and_SOURCES) $(test_categ_and_not_SOURCES) \ + $(test_categ_byname_SOURCES) $(test_categ_name_SOURCES) \ + $(am__test_categ_none_SOURCES_DIST) $(test_categ_of_SOURCES) \ + $(test_categ_or_SOURCES) $(test_categ_test_withtable_SOURCES) \ + $(test_combining_SOURCES) $(test_compat_decomposition_SOURCES) \ + $(test_composition_SOURCES) $(test_ctype_alnum_SOURCES) \ + $(test_ctype_alpha_SOURCES) $(test_ctype_blank_SOURCES) \ + $(test_ctype_cntrl_SOURCES) $(test_ctype_digit_SOURCES) \ + $(test_ctype_graph_SOURCES) $(test_ctype_lower_SOURCES) \ + $(test_ctype_print_SOURCES) $(test_ctype_punct_SOURCES) \ + $(test_ctype_space_SOURCES) $(test_ctype_upper_SOURCES) \ + $(test_ctype_xdigit_SOURCES) $(test_decdigit_SOURCES) \ + $(test_decomposing_form_SOURCES) $(test_decomposition_SOURCES) \ + $(test_digit_SOURCES) test-environ.c test-errno.c \ + $(test_frexpl_nolibm_SOURCES) test-fseterr.c test-iconv.c \ + $(test_ignorable_SOURCES) test-isnand-nolibm.c \ + test-isnanf-nolibm.c test-isnanl-nolibm.c test-locale.c \ + $(test_locale_language_SOURCES) test-localename.c \ + test-malloca.c test-math.c test-mbrtowc.c test-mbsinit.c \ + test-memchr.c $(test_mirror_SOURCES) $(test_nfc_SOURCES) \ + $(test_nfd_SOURCES) $(test_nfkc_SOURCES) $(test_nfkd_SOURCES) \ + $(test_numeric_SOURCES) $(test_pr_alphabetic_SOURCES) \ + $(test_pr_ascii_hex_digit_SOURCES) \ + $(test_pr_bidi_arabic_digit_SOURCES) \ + $(test_pr_bidi_arabic_right_to_left_SOURCES) \ + $(test_pr_bidi_block_separator_SOURCES) \ + $(test_pr_bidi_boundary_neutral_SOURCES) \ + $(test_pr_bidi_common_separator_SOURCES) \ + $(test_pr_bidi_control_SOURCES) \ + $(test_pr_bidi_embedding_or_override_SOURCES) \ + $(test_pr_bidi_eur_num_separator_SOURCES) \ + $(test_pr_bidi_eur_num_terminator_SOURCES) \ + $(test_pr_bidi_european_digit_SOURCES) \ + $(test_pr_bidi_hebrew_right_to_left_SOURCES) \ + $(test_pr_bidi_left_to_right_SOURCES) \ + $(test_pr_bidi_non_spacing_mark_SOURCES) \ + $(test_pr_bidi_other_neutral_SOURCES) \ + $(test_pr_bidi_pdf_SOURCES) \ + $(test_pr_bidi_segment_separator_SOURCES) \ + $(test_pr_bidi_whitespace_SOURCES) $(test_pr_byname_SOURCES) \ + $(test_pr_combining_SOURCES) $(test_pr_composite_SOURCES) \ + $(test_pr_currency_symbol_SOURCES) $(test_pr_dash_SOURCES) \ + $(test_pr_decimal_digit_SOURCES) \ + $(test_pr_default_ignorable_code_point_SOURCES) \ + $(test_pr_deprecated_SOURCES) $(test_pr_diacritic_SOURCES) \ + $(test_pr_extender_SOURCES) $(test_pr_format_control_SOURCES) \ + $(test_pr_grapheme_base_SOURCES) \ + $(test_pr_grapheme_extend_SOURCES) \ + $(test_pr_grapheme_link_SOURCES) $(test_pr_hex_digit_SOURCES) \ + $(test_pr_hyphen_SOURCES) $(test_pr_id_continue_SOURCES) \ + $(test_pr_id_start_SOURCES) $(test_pr_ideographic_SOURCES) \ + $(test_pr_ids_binary_operator_SOURCES) \ + $(test_pr_ids_trinary_operator_SOURCES) \ + $(test_pr_ignorable_control_SOURCES) \ + $(test_pr_iso_control_SOURCES) $(test_pr_join_control_SOURCES) \ + $(test_pr_left_of_pair_SOURCES) \ + $(test_pr_line_separator_SOURCES) \ + $(test_pr_logical_order_exception_SOURCES) \ + $(test_pr_lowercase_SOURCES) $(test_pr_math_SOURCES) \ + $(test_pr_non_break_SOURCES) \ + $(test_pr_not_a_character_SOURCES) $(test_pr_numeric_SOURCES) \ + $(test_pr_other_alphabetic_SOURCES) \ + $(test_pr_other_default_ignorable_code_point_SOURCES) \ + $(test_pr_other_grapheme_extend_SOURCES) \ + $(test_pr_other_id_continue_SOURCES) \ + $(test_pr_other_id_start_SOURCES) \ + $(test_pr_other_lowercase_SOURCES) \ + $(test_pr_other_math_SOURCES) \ + $(test_pr_other_uppercase_SOURCES) \ + $(test_pr_paired_punctuation_SOURCES) \ + $(test_pr_paragraph_separator_SOURCES) \ + $(test_pr_pattern_syntax_SOURCES) \ + $(test_pr_pattern_white_space_SOURCES) \ + $(test_pr_private_use_SOURCES) $(test_pr_punctuation_SOURCES) \ + $(test_pr_quotation_mark_SOURCES) $(test_pr_radical_SOURCES) \ + $(test_pr_sentence_terminal_SOURCES) \ + $(test_pr_soft_dotted_SOURCES) $(test_pr_space_SOURCES) \ + $(test_pr_terminal_punctuation_SOURCES) \ + $(test_pr_test_SOURCES) $(test_pr_titlecase_SOURCES) \ + $(test_pr_unassigned_code_value_SOURCES) \ + $(test_pr_unified_ideograph_SOURCES) \ + $(test_pr_uppercase_SOURCES) \ + $(test_pr_variation_selector_SOURCES) \ + $(test_pr_white_space_SOURCES) $(test_pr_xid_continue_SOURCES) \ + $(test_pr_xid_start_SOURCES) $(test_pr_zero_width_SOURCES) \ + test-printf-frexp.c test-printf-frexpl.c \ + $(test_scripts_SOURCES) test-signbit.c test-stdbool.c \ + test-stdint.c test-stdlib.c test-strerror.c test-striconveh.c \ + test-striconveha.c test-string.c $(test_sy_c_ident_SOURCES) \ + $(test_sy_c_whitespace_SOURCES) $(test_sy_java_ident_SOURCES) \ + $(test_sy_java_whitespace_SOURCES) \ + $(test_u16_asnprintf1_SOURCES) $(test_u16_casecmp_SOURCES) \ + $(test_u16_casecoll_SOURCES) $(test_u16_casefold_SOURCES) \ + $(test_u16_conv_from_enc_SOURCES) \ + $(test_u16_conv_to_enc_SOURCES) $(test_u16_is_cased_SOURCES) \ + $(test_u16_is_casefolded_SOURCES) \ + $(test_u16_is_lowercase_SOURCES) \ + $(test_u16_is_titlecase_SOURCES) \ + $(test_u16_is_uppercase_SOURCES) $(test_u16_normcmp_SOURCES) \ + $(test_u16_normcoll_SOURCES) \ + $(test_u16_possible_linebreaks_SOURCES) \ + $(test_u16_strconv_from_enc_SOURCES) \ + $(test_u16_strconv_to_enc_SOURCES) \ + $(test_u16_strwidth_SOURCES) $(test_u16_tolower_SOURCES) \ + $(test_u16_totitle_SOURCES) $(test_u16_toupper_SOURCES) \ + $(test_u16_vasnprintf1_SOURCES) \ + $(test_u16_vasnprintf2_SOURCES) \ + $(test_u16_vasnprintf3_SOURCES) $(test_u16_vasprintf1_SOURCES) \ + $(test_u16_vsnprintf1_SOURCES) $(test_u16_vsprintf1_SOURCES) \ + $(test_u16_width_SOURCES) $(test_u16_width_linebreaks_SOURCES) \ + $(test_u16_wordbreaks_SOURCES) $(test_u32_asnprintf1_SOURCES) \ + $(test_u32_casecmp_SOURCES) $(test_u32_casecoll_SOURCES) \ + $(test_u32_casefold_SOURCES) $(test_u32_conv_from_enc_SOURCES) \ + $(test_u32_conv_to_enc_SOURCES) $(test_u32_is_cased_SOURCES) \ + $(test_u32_is_casefolded_SOURCES) \ + $(test_u32_is_lowercase_SOURCES) \ + $(test_u32_is_titlecase_SOURCES) \ + $(test_u32_is_uppercase_SOURCES) $(test_u32_nfc_big_SOURCES) \ + $(test_u32_nfd_big_SOURCES) $(test_u32_nfkc_big_SOURCES) \ + $(test_u32_nfkd_big_SOURCES) $(test_u32_normcmp_SOURCES) \ + $(test_u32_normcoll_SOURCES) \ + $(test_u32_possible_linebreaks_SOURCES) \ + $(test_u32_strconv_from_enc_SOURCES) \ + $(test_u32_strconv_to_enc_SOURCES) \ + $(test_u32_strwidth_SOURCES) $(test_u32_tolower_SOURCES) \ + $(test_u32_totitle_SOURCES) $(test_u32_toupper_SOURCES) \ + $(test_u32_vasnprintf1_SOURCES) \ + $(test_u32_vasnprintf2_SOURCES) \ + $(test_u32_vasnprintf3_SOURCES) $(test_u32_vasprintf1_SOURCES) \ + $(test_u32_vsnprintf1_SOURCES) $(test_u32_vsprintf1_SOURCES) \ + $(test_u32_width_SOURCES) $(test_u32_width_linebreaks_SOURCES) \ + $(test_u32_wordbreaks_SOURCES) $(test_u8_asnprintf1_SOURCES) \ + $(test_u8_casecmp_SOURCES) $(test_u8_casecoll_SOURCES) \ + $(test_u8_casefold_SOURCES) $(test_u8_conv_from_enc_SOURCES) \ + $(test_u8_conv_to_enc_SOURCES) $(test_u8_is_cased_SOURCES) \ + $(test_u8_is_casefolded_SOURCES) \ + $(test_u8_is_lowercase_SOURCES) \ + $(test_u8_is_titlecase_SOURCES) \ + $(test_u8_is_uppercase_SOURCES) $(test_u8_normcmp_SOURCES) \ + $(test_u8_normcoll_SOURCES) \ + $(test_u8_possible_linebreaks_SOURCES) \ + $(test_u8_strconv_from_enc_SOURCES) \ + $(test_u8_strconv_to_enc_SOURCES) $(test_u8_strwidth_SOURCES) \ + $(test_u8_tolower_SOURCES) $(test_u8_totitle_SOURCES) \ + $(test_u8_toupper_SOURCES) $(test_u8_vasnprintf1_SOURCES) \ + $(test_u8_vasnprintf2_SOURCES) $(test_u8_vasnprintf3_SOURCES) \ + $(test_u8_vasprintf1_SOURCES) $(test_u8_vsnprintf1_SOURCES) \ + $(test_u8_vsprintf1_SOURCES) $(test_u8_width_SOURCES) \ + $(test_u8_width_linebreaks_SOURCES) \ + $(test_u8_wordbreaks_SOURCES) $(test_uc_tolower_SOURCES) \ + $(test_uc_totitle_SOURCES) $(test_uc_toupper_SOURCES) \ + $(test_uc_width_SOURCES) $(test_uc_width2_SOURCES) \ + $(test_ulc_asnprintf1_SOURCES) $(test_ulc_casecmp_SOURCES) \ + $(test_ulc_casecoll_SOURCES) \ + $(test_ulc_possible_linebreaks_SOURCES) \ + $(test_ulc_vasnprintf1_SOURCES) \ + $(test_ulc_vasnprintf2_SOURCES) \ + $(test_ulc_vasnprintf3_SOURCES) $(test_ulc_vasprintf1_SOURCES) \ + $(test_ulc_vsnprintf1_SOURCES) $(test_ulc_vsprintf1_SOURCES) \ + $(test_ulc_width_linebreaks_SOURCES) \ + $(test_ulc_wordbreaks_SOURCES) $(test_uninames_SOURCES) \ + $(test_uninorm_filter_nfc_SOURCES) test-unistd.c test-wchar.c \ + test-wctype.c test-wcwidth.c +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +# If stdout is a non-dumb tty, use colors. If test -t is not supported, +# then this fails; a conservative approach. Of course do not redirect +# stdout here, just stderr. +am__tty_colors = \ +red=; grn=; lgn=; blu=; std=; \ +test "X$(AM_COLOR_TESTS)" != Xno \ +&& test "X$$TERM" != Xdumb \ +&& { test "X$(AM_COLOR_TESTS)" = Xalways || test -t 1 2>/dev/null; } \ +&& { \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + std=''; \ +} +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +ALLOCA_H = @ALLOCA_H@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ +BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ +BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ +BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ +BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DLL_VARIABLE = @DLL_VARIABLE@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +DVIPS = @DVIPS@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ +EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ +ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ +ENOLINK_VALUE = @ENOLINK_VALUE@ +EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ +EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ +ERRNO_H = @ERRNO_H@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FLOAT_H = @FLOAT_H@ +GLIBC21 = @GLIBC21@ +GLOBAL_SYMBOL_PIPE = @GLOBAL_SYMBOL_PIPE@ +GNULIB_ATOLL = @GNULIB_ATOLL@ +GNULIB_BTOWC = @GNULIB_BTOWC@ +GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@ +GNULIB_CEILF = @GNULIB_CEILF@ +GNULIB_CEILL = @GNULIB_CEILL@ +GNULIB_CHOWN = @GNULIB_CHOWN@ +GNULIB_CLOSE = @GNULIB_CLOSE@ +GNULIB_DUP2 = @GNULIB_DUP2@ +GNULIB_ENVIRON = @GNULIB_ENVIRON@ +GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ +GNULIB_FCHDIR = @GNULIB_FCHDIR@ +GNULIB_FLOORF = @GNULIB_FLOORF@ +GNULIB_FLOORL = @GNULIB_FLOORL@ +GNULIB_FREXP = @GNULIB_FREXP@ +GNULIB_FREXPL = @GNULIB_FREXPL@ +GNULIB_FSYNC = @GNULIB_FSYNC@ +GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ +GNULIB_GETCWD = @GNULIB_GETCWD@ +GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ +GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ +GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ +GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@ +GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ +GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ +GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@ +GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ +GNULIB_ISFINITE = @GNULIB_ISFINITE@ +GNULIB_ISINF = @GNULIB_ISINF@ +GNULIB_ISNAN = @GNULIB_ISNAN@ +GNULIB_ISNAND = @GNULIB_ISNAND@ +GNULIB_ISNANF = @GNULIB_ISNANF@ +GNULIB_ISNANL = @GNULIB_ISNANL@ +GNULIB_LCHOWN = @GNULIB_LCHOWN@ +GNULIB_LDEXPL = @GNULIB_LDEXPL@ +GNULIB_LINK = @GNULIB_LINK@ +GNULIB_LSEEK = @GNULIB_LSEEK@ +GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@ +GNULIB_MATHL = @GNULIB_MATHL@ +GNULIB_MBRLEN = @GNULIB_MBRLEN@ +GNULIB_MBRTOWC = @GNULIB_MBRTOWC@ +GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ +GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ +GNULIB_MBSCHR = @GNULIB_MBSCHR@ +GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ +GNULIB_MBSINIT = @GNULIB_MBSINIT@ +GNULIB_MBSLEN = @GNULIB_MBSLEN@ +GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ +GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ +GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@ +GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ +GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ +GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ +GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@ +GNULIB_MBSSEP = @GNULIB_MBSSEP@ +GNULIB_MBSSPN = @GNULIB_MBSSPN@ +GNULIB_MBSSTR = @GNULIB_MBSSTR@ +GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ +GNULIB_MEMCHR = @GNULIB_MEMCHR@ +GNULIB_MEMMEM = @GNULIB_MEMMEM@ +GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ +GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ +GNULIB_MKDTEMP = @GNULIB_MKDTEMP@ +GNULIB_MKSTEMP = @GNULIB_MKSTEMP@ +GNULIB_PUTENV = @GNULIB_PUTENV@ +GNULIB_RANDOM_R = @GNULIB_RANDOM_R@ +GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ +GNULIB_READLINK = @GNULIB_READLINK@ +GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@ +GNULIB_ROUND = @GNULIB_ROUND@ +GNULIB_ROUNDF = @GNULIB_ROUNDF@ +GNULIB_ROUNDL = @GNULIB_ROUNDL@ +GNULIB_RPMATCH = @GNULIB_RPMATCH@ +GNULIB_SETENV = @GNULIB_SETENV@ +GNULIB_SIGNBIT = @GNULIB_SIGNBIT@ +GNULIB_SLEEP = @GNULIB_SLEEP@ +GNULIB_STPCPY = @GNULIB_STPCPY@ +GNULIB_STPNCPY = @GNULIB_STPNCPY@ +GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ +GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ +GNULIB_STRDUP = @GNULIB_STRDUP@ +GNULIB_STRERROR = @GNULIB_STRERROR@ +GNULIB_STRNDUP = @GNULIB_STRNDUP@ +GNULIB_STRNLEN = @GNULIB_STRNLEN@ +GNULIB_STRPBRK = @GNULIB_STRPBRK@ +GNULIB_STRSEP = @GNULIB_STRSEP@ +GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ +GNULIB_STRSTR = @GNULIB_STRSTR@ +GNULIB_STRTOD = @GNULIB_STRTOD@ +GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ +GNULIB_STRTOLL = @GNULIB_STRTOLL@ +GNULIB_STRTOULL = @GNULIB_STRTOULL@ +GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ +GNULIB_TRUNC = @GNULIB_TRUNC@ +GNULIB_TRUNCF = @GNULIB_TRUNCF@ +GNULIB_TRUNCL = @GNULIB_TRUNCL@ +GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ +GNULIB_UNSETENV = @GNULIB_UNSETENV@ +GNULIB_WCRTOMB = @GNULIB_WCRTOMB@ +GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@ +GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@ +GNULIB_WCTOB = @GNULIB_WCTOB@ +GNULIB_WCWIDTH = @GNULIB_WCWIDTH@ +GNULIB_WRITE = @GNULIB_WRITE@ +GREP = @GREP@ +HAVE_ATOLL = @HAVE_ATOLL@ +HAVE_BTOWC = @HAVE_BTOWC@ +HAVE_CALLOC_POSIX = @HAVE_CALLOC_POSIX@ +HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ +HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ +HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ +HAVE_DECL_COSL = @HAVE_DECL_COSL@ +HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ +HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ +HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ +HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ +HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ +HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ +HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ +HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ +HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ +HAVE_DECL_SINL = @HAVE_DECL_SINL@ +HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ +HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ +HAVE_DECL_STRERROR = @HAVE_DECL_STRERROR@ +HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ +HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ +HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ +HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ +HAVE_DECL_TANL = @HAVE_DECL_TANL@ +HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ +HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ +HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ +HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ +HAVE_DUP2 = @HAVE_DUP2@ +HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ +HAVE_FSYNC = @HAVE_FSYNC@ +HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ +HAVE_GETDOMAINNAME = @HAVE_GETDOMAINNAME@ +HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ +HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ +HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ +HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ +HAVE_GETUSERSHELL = @HAVE_GETUSERSHELL@ +HAVE_GLOBAL_SYMBOL_PIPE = @HAVE_GLOBAL_SYMBOL_PIPE@ +HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ +HAVE_ISNAND = @HAVE_ISNAND@ +HAVE_ISNANF = @HAVE_ISNANF@ +HAVE_ISNANL = @HAVE_ISNANL@ +HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ +HAVE_LINK = @HAVE_LINK@ +HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@ +HAVE_MALLOC_POSIX = @HAVE_MALLOC_POSIX@ +HAVE_MBRLEN = @HAVE_MBRLEN@ +HAVE_MBRTOWC = @HAVE_MBRTOWC@ +HAVE_MBSINIT = @HAVE_MBSINIT@ +HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ +HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ +HAVE_MEMPCPY = @HAVE_MEMPCPY@ +HAVE_MKDTEMP = @HAVE_MKDTEMP@ +HAVE_OS_H = @HAVE_OS_H@ +HAVE_RANDOM_H = @HAVE_RANDOM_H@ +HAVE_RANDOM_R = @HAVE_RANDOM_R@ +HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ +HAVE_READLINK = @HAVE_READLINK@ +HAVE_REALLOC_POSIX = @HAVE_REALLOC_POSIX@ +HAVE_RPMATCH = @HAVE_RPMATCH@ +HAVE_SETENV = @HAVE_SETENV@ +HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ +HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ +HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ +HAVE_SLEEP = @HAVE_SLEEP@ +HAVE_STDINT_H = @HAVE_STDINT_H@ +HAVE_STPCPY = @HAVE_STPCPY@ +HAVE_STPNCPY = @HAVE_STPNCPY@ +HAVE_STRCASESTR = @HAVE_STRCASESTR@ +HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ +HAVE_STRNDUP = @HAVE_STRNDUP@ +HAVE_STRPBRK = @HAVE_STRPBRK@ +HAVE_STRSEP = @HAVE_STRSEP@ +HAVE_STRTOD = @HAVE_STRTOD@ +HAVE_STRTOLL = @HAVE_STRTOLL@ +HAVE_STRTOULL = @HAVE_STRTOULL@ +HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ +HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ +HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ +HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ +HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ +HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ +HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ +HAVE_UNISTD_H = @HAVE_UNISTD_H@ +HAVE_UNSETENV = @HAVE_UNSETENV@ +HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@ +HAVE_WCHAR_H = @HAVE_WCHAR_H@ +HAVE_WCRTOMB = @HAVE_WCRTOMB@ +HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ +HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ +HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ +HAVE_WINT_T = @HAVE_WINT_T@ +HAVE__BOOL = @HAVE__BOOL@ +HEXVERSION = @HEXVERSION@ +ICONV_H = @ICONV_H@ +INCLUDE_NEXT = @INCLUDE_NEXT@ +INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ +LOCALE_FR = @LOCALE_FR@ +LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ +LOCALE_H = @LOCALE_H@ +LOCALE_JA = @LOCALE_JA@ +LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@ +LOCALE_ZH_CN = @LOCALE_ZH_CN@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NAMESPACING = @NAMESPACING@ +NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ +NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ +NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_H@ +NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ +NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ +NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ +NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ +NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ +NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ +NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ +NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ +NEXT_ERRNO_H = @NEXT_ERRNO_H@ +NEXT_FLOAT_H = @NEXT_FLOAT_H@ +NEXT_ICONV_H = @NEXT_ICONV_H@ +NEXT_LOCALE_H = @NEXT_LOCALE_H@ +NEXT_MATH_H = @NEXT_MATH_H@ +NEXT_STDINT_H = @NEXT_STDINT_H@ +NEXT_STDLIB_H = @NEXT_STDLIB_H@ +NEXT_STRING_H = @NEXT_STRING_H@ +NEXT_UNISTD_H = @NEXT_UNISTD_H@ +NEXT_WCHAR_H = @NEXT_WCHAR_H@ +NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ +PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ +RANLIB = @RANLIB@ +RC = @RC@ +RELOCATABLE = @RELOCATABLE@ +REPLACE_BTOWC = @REPLACE_BTOWC@ +REPLACE_CEILF = @REPLACE_CEILF@ +REPLACE_CEILL = @REPLACE_CEILL@ +REPLACE_CHOWN = @REPLACE_CHOWN@ +REPLACE_CLOSE = @REPLACE_CLOSE@ +REPLACE_FCHDIR = @REPLACE_FCHDIR@ +REPLACE_FLOORF = @REPLACE_FLOORF@ +REPLACE_FLOORL = @REPLACE_FLOORL@ +REPLACE_FREXP = @REPLACE_FREXP@ +REPLACE_FREXPL = @REPLACE_FREXPL@ +REPLACE_GETCWD = @REPLACE_GETCWD@ +REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ +REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ +REPLACE_ICONV = @REPLACE_ICONV@ +REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@ +REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@ +REPLACE_ISFINITE = @REPLACE_ISFINITE@ +REPLACE_ISINF = @REPLACE_ISINF@ +REPLACE_ISNAN = @REPLACE_ISNAN@ +REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ +REPLACE_LCHOWN = @REPLACE_LCHOWN@ +REPLACE_LDEXPL = @REPLACE_LDEXPL@ +REPLACE_LSEEK = @REPLACE_LSEEK@ +REPLACE_MBRLEN = @REPLACE_MBRLEN@ +REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ +REPLACE_MBSINIT = @REPLACE_MBSINIT@ +REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ +REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ +REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ +REPLACE_MEMCHR = @REPLACE_MEMCHR@ +REPLACE_MEMMEM = @REPLACE_MEMMEM@ +REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ +REPLACE_NAN = @REPLACE_NAN@ +REPLACE_PUTENV = @REPLACE_PUTENV@ +REPLACE_ROUND = @REPLACE_ROUND@ +REPLACE_ROUNDF = @REPLACE_ROUNDF@ +REPLACE_ROUNDL = @REPLACE_ROUNDL@ +REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ +REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@ +REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ +REPLACE_STRDUP = @REPLACE_STRDUP@ +REPLACE_STRERROR = @REPLACE_STRERROR@ +REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ +REPLACE_STRSTR = @REPLACE_STRSTR@ +REPLACE_STRTOD = @REPLACE_STRTOD@ +REPLACE_TRUNCL = @REPLACE_TRUNCL@ +REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ +REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ +REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ +REPLACE_WCTOB = @REPLACE_WCTOB@ +REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ +REPLACE_WRITE = @REPLACE_WRITE@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ +SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ +STDBOOL_H = @STDBOOL_H@ +STDINT_H = @STDINT_H@ +STRIP = @STRIP@ +TEXI2DVI = @TEXI2DVI@ +UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ +VERSION = @VERSION@ +VOID_UNSETENV = @VOID_UNSETENV@ +WCHAR_H = @WCHAR_H@ +WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ +WCTYPE_H = @WCTYPE_H@ +WINT_T_SUFFIX = @WINT_T_SUFFIX@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +gl_LIBOBJS = @gl_LIBOBJS@ +gl_LTLIBOBJS = @gl_LTLIBOBJS@ +gltests_LIBOBJS = @gltests_LIBOBJS@ +gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# Rules generated and collected by gnulib-tool. +AUTOMAKE_OPTIONS = 1.5 foreign 1.11 subdir-objects color-tests +SUBDIRS = + +# The test suite uses the 'localcharset' module. + +# This must be the last thing that gets added to TESTS_ENVIRONMENT. +TESTS_ENVIRONMENT = EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' \ + LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + LOCALE_JA='@LOCALE_JA@' LOCALE_ZH_CN='@LOCALE_ZH_CN@' \ + EXEEXT='@EXEEXT@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' LOCALE_JA='@LOCALE_JA@' \ + LOCALE_TR_UTF8='@LOCALE_TR_UTF8@' \ + LOCALE_ZH_CN='@LOCALE_ZH_CN@' EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' EXEEXT='@EXEEXT@' \ + srcdir='$(srcdir)' EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' \ + LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' EXEEXT='@EXEEXT@' \ + LOCALE_FR='@LOCALE_FR@' LOCALE_FR_UTF8='@LOCALE_FR_UTF8@' \ + EXEEXT='@EXEEXT@' LOCALE_FR='@LOCALE_FR@' EXEEXT='@EXEEXT@' \ + @LOCALCHARSET_TESTS_ENVIRONMENT@ $(SHELL) \ + $(top_srcdir)/build-aux/run-test '$(CHECKER)' +noinst_HEADERS = +noinst_LIBRARIES = +check_LIBRARIES = libtests.a +EXTRA_DIST = test-alloca-opt.c test-array-mergesort.c test-c-ctype.c \ + test-c-strcase.sh test-c-strcasecmp.c test-c-strncasecmp.c \ + test-environ.c test-errno.c error.c error.h exitfail.c \ + exitfail.h test-frexpl.c test-fseterr.c test-iconv.c \ + intprops.h test-isnand-nolibm.c test-isnand.h nan.h \ + test-isnanf-nolibm.c test-isnanf.h nan.h test-isnanl-nolibm.c \ + test-isnanl.h nan.h locale.in.h test-locale.c \ + test-localename.c test-malloca.c test-math.c test-mbrtowc1.sh \ + test-mbrtowc2.sh test-mbrtowc3.sh test-mbrtowc4.sh \ + test-mbrtowc.c test-mbsinit.sh test-mbsinit.c test-memchr.c \ + zerosize-ptr.h test-printf-frexp.c test-printf-frexpl.c \ + setenv.c test-signbit.c test-stdbool.c test-stdint.c \ + test-stdlib.c strerror.c test-strerror.c test-striconveh.c \ + test-striconveha.c test-string.c unicase/test-cased.c \ + unicase/test-predicate-part1.h unicase/test-predicate-part2.h \ + unicase/test-ignorable.c unicase/test-predicate-part1.h \ + unicase/test-predicate-part2.h unicase/test-locale-language.sh \ + unicase/test-locale-language.c unicase/test-uc_tolower.c \ + unicase/test-mapping-part1.h unicase/test-mapping-part2.h \ + unicase/test-uc_totitle.c unicase/test-mapping-part1.h \ + unicase/test-mapping-part2.h unicase/test-uc_toupper.c \ + unicase/test-mapping-part1.h unicase/test-mapping-part2.h \ + unicase/test-u16-casecmp.c unicase/test-casecmp.h \ + unicase/test-u16-casecoll.c unicase/test-casecmp.h \ + unicase/test-u16-casefold.c unicase/test-u16-is-cased.c \ + unicase/test-is-cased.h unicase/test-u16-is-casefolded.c \ + unicase/test-is-casefolded.h unicase/test-u16-is-lowercase.c \ + unicase/test-is-lowercase.h unicase/test-u16-is-titlecase.c \ + unicase/test-is-titlecase.h unicase/test-u16-is-uppercase.c \ + unicase/test-is-uppercase.h unicase/test-u16-tolower.c \ + unicase/test-u16-totitle.c unicase/test-u16-toupper.c \ + unicase/test-u32-casecmp.c unicase/test-casecmp.h \ + unicase/test-u32-casecoll.c unicase/test-casecmp.h \ + unicase/test-u32-casefold.c unicase/test-u32-is-cased.c \ + unicase/test-is-cased.h unicase/test-u32-is-casefolded.c \ + unicase/test-is-casefolded.h unicase/test-u32-is-lowercase.c \ + unicase/test-is-lowercase.h unicase/test-u32-is-titlecase.c \ + unicase/test-is-titlecase.h unicase/test-u32-is-uppercase.c \ + unicase/test-is-uppercase.h unicase/test-u32-tolower.c \ + unicase/test-u32-totitle.c unicase/test-u32-toupper.c \ + unicase/test-u8-casecmp.c unicase/test-casecmp.h \ + unicase/test-u8-casecoll.c unicase/test-casecmp.h \ + unicase/test-u8-casefold.c unicase/test-u8-is-cased.c \ + unicase/test-is-cased.h unicase/test-u8-is-casefolded.c \ + unicase/test-is-casefolded.h unicase/test-u8-is-lowercase.c \ + unicase/test-is-lowercase.h unicase/test-u8-is-titlecase.c \ + unicase/test-is-titlecase.h unicase/test-u8-is-uppercase.c \ + unicase/test-is-uppercase.h unicase/test-u8-tolower.c \ + unicase/test-u8-totitle.c unicase/test-u8-toupper.c \ + unicase/test-ulc-casecmp1.sh unicase/test-ulc-casecmp2.sh \ + unicase/test-ulc-casecmp.c unicase/test-casecmp.h \ + unicase/test-ulc-casecoll1.sh unicase/test-ulc-casecoll2.sh \ + unicase/test-ulc-casecoll.c unicase/test-casecmp.h \ + uniconv/test-u16-conv-from-enc.c \ + uniconv/test-u16-conv-to-enc.c \ + uniconv/test-u16-strconv-from-enc.c \ + uniconv/test-u16-strconv-to-enc.c \ + uniconv/test-u32-conv-from-enc.c \ + uniconv/test-u32-conv-to-enc.c \ + uniconv/test-u32-strconv-from-enc.c \ + uniconv/test-u32-strconv-to-enc.c \ + uniconv/test-u8-conv-from-enc.c uniconv/test-u8-conv-to-enc.c \ + uniconv/test-u8-strconv-from-enc.c \ + uniconv/test-u8-strconv-to-enc.c unictype/test-bidi_byname.c \ + unictype/test-bidi_name.c unictype/test-bidi_of.c \ + unictype/test-bidi_test.c unictype/test-block_list.c \ + unictype/test-block_of.c unictype/test-block_test.c \ + unictype/test-categ_C.c unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Cc.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Cf.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Cn.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Co.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Cs.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_L.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Ll.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Lm.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Lo.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Lt.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Lu.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_M.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Mc.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Me.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Mn.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_N.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Nd.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Nl.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_No.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_P.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Pc.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Pd.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Pe.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Pf.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Pi.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Po.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Ps.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_S.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Sc.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Sk.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Sm.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_So.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Z.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Zl.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Zp.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_Zs.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-categ_and_not.c \ + unictype/test-categ_and.c unictype/test-categ_byname.c \ + unictype/test-categ_name.c unictype/test-categ_none.c \ + unictype/test-categ_of.c unictype/test-categ_or.c \ + unictype/test-categ_test_withtable.c unictype/test-combining.c \ + unictype/test-ctype_alnum.c unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-ctype_alpha.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-ctype_blank.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-ctype_cntrl.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-ctype_digit.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-ctype_graph.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-ctype_lower.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-ctype_print.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-ctype_punct.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-ctype_space.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-ctype_upper.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-ctype_xdigit.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-decdigit.c \ + unictype/test-decdigit.h unictype/test-digit.c \ + unictype/test-digit.h unictype/test-mirror.c \ + unictype/test-numeric.c unictype/test-numeric.h \ + unictype/test-pr_alphabetic.c unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_ascii_hex_digit.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_arabic_digit.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_arabic_right_to_left.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_block_separator.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_boundary_neutral.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_common_separator.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_control.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_embedding_or_override.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_eur_num_separator.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_eur_num_terminator.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_european_digit.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_hebrew_right_to_left.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_left_to_right.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_non_spacing_mark.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_other_neutral.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_bidi_pdf.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_segment_separator.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_bidi_whitespace.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_byname.c \ + unictype/test-pr_combining.c unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_composite.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_currency_symbol.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_dash.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_decimal_digit.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_default_ignorable_code_point.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_deprecated.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_diacritic.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_extender.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_format_control.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_grapheme_base.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_grapheme_extend.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_grapheme_link.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_hex_digit.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_hyphen.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_id_continue.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_id_start.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_ideographic.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_ids_binary_operator.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_ids_trinary_operator.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_ignorable_control.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_iso_control.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_join_control.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_left_of_pair.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_line_separator.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_logical_order_exception.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_lowercase.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_math.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_non_break.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_not_a_character.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_numeric.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_other_alphabetic.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_other_default_ignorable_code_point.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_other_grapheme_extend.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_other_id_continue.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_other_id_start.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_other_lowercase.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_other_math.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_other_uppercase.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_paired_punctuation.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_paragraph_separator.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_pattern_syntax.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_pattern_white_space.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_private_use.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_punctuation.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_quotation_mark.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_radical.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_sentence_terminal.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_soft_dotted.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_space.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_terminal_punctuation.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_test.c \ + unictype/test-pr_titlecase.c unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_unassigned_code_value.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_unified_ideograph.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_uppercase.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_variation_selector.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_white_space.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unictype/test-pr_xid_continue.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_xid_start.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-pr_zero_width.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-scripts.c \ + unictype/test-sy_c_ident.c unictype/test-sy_c_whitespace.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h unictype/test-sy_java_ident.c \ + unictype/test-sy_java_whitespace.c \ + unictype/test-predicate-part1.h \ + unictype/test-predicate-part2.h \ + unilbrk/test-u16-possible-linebreaks.c \ + unilbrk/test-u16-width-linebreaks.c \ + unilbrk/test-u32-possible-linebreaks.c \ + unilbrk/test-u32-width-linebreaks.c \ + unilbrk/test-u8-possible-linebreaks.c \ + unilbrk/test-u8-width-linebreaks.c \ + unilbrk/test-ulc-possible-linebreaks.c \ + unilbrk/test-ulc-width-linebreaks.c uniname/test-uninames.sh \ + uniname/test-uninames.c uniname/UnicodeDataNames.txt \ + uninorm/test-canonical-decomposition.c \ + uninorm/test-compat-decomposition.c uninorm/test-composition.c \ + uninorm/test-decomposing-form.c uninorm/test-decomposition.c \ + uninorm/test-uninorm-filter-nfc.c uninorm/test-nfc.c \ + uninorm/test-u8-nfc.c uninorm/test-u16-nfc.c \ + uninorm/test-u32-nfc.c uninorm/test-u32-nfc-big.sh \ + uninorm/test-u32-nfc-big.c uninorm/test-u32-normalize-big.h \ + uninorm/test-u32-normalize-big.c uninorm/NormalizationTest.txt \ + uninorm/test-nfd.c uninorm/test-u8-nfd.c \ + uninorm/test-u16-nfd.c uninorm/test-u32-nfd.c \ + uninorm/test-u32-nfd-big.sh uninorm/test-u32-nfd-big.c \ + uninorm/test-u32-normalize-big.h \ + uninorm/test-u32-normalize-big.c uninorm/NormalizationTest.txt \ + uninorm/test-nfkc.c uninorm/test-u8-nfkc.c \ + uninorm/test-u16-nfkc.c uninorm/test-u32-nfkc.c \ + uninorm/test-u32-nfkc-big.sh uninorm/test-u32-nfkc-big.c \ + uninorm/test-u32-normalize-big.h \ + uninorm/test-u32-normalize-big.c uninorm/NormalizationTest.txt \ + uninorm/test-nfkd.c uninorm/test-u8-nfkd.c \ + uninorm/test-u16-nfkd.c uninorm/test-u32-nfkd.c \ + uninorm/test-u32-nfkd-big.sh uninorm/test-u32-nfkd-big.c \ + uninorm/test-u32-normalize-big.h \ + uninorm/test-u32-normalize-big.c uninorm/NormalizationTest.txt \ + uninorm/test-u16-normcmp.c uninorm/test-u16-normcmp.h \ + uninorm/test-u16-normcoll.c uninorm/test-u16-normcmp.h \ + uninorm/test-u32-normcmp.c uninorm/test-u32-normcmp.h \ + uninorm/test-u32-normcoll.c uninorm/test-u32-normcmp.h \ + uninorm/test-u8-normcmp.c uninorm/test-u8-normcmp.h \ + uninorm/test-u8-normcoll.c uninorm/test-u8-normcmp.h \ + test-unistd.c unistdio/test-u16-asnprintf1.c \ + unistdio/test-u16-asnprintf1.h unistdio/test-u16-printf1.h \ + unistdio/test-u16-vasnprintf1.c unistdio/test-u16-asnprintf1.h \ + unistdio/test-u16-printf1.h unistdio/test-u16-vasnprintf2.sh \ + unistdio/test-u16-vasnprintf2.c \ + unistdio/test-u16-vasnprintf3.sh \ + unistdio/test-u16-vasnprintf3.c unistdio/test-u16-vasprintf1.c \ + unistdio/test-u16-printf1.h unistdio/test-u16-vsnprintf1.c \ + unistdio/test-u16-printf1.h unistdio/test-u16-vsprintf1.c \ + unistdio/test-u16-printf1.h unistdio/test-u32-asnprintf1.c \ + unistdio/test-u32-asnprintf1.h unistdio/test-u32-printf1.h \ + unistdio/test-u32-vasnprintf1.c unistdio/test-u32-asnprintf1.h \ + unistdio/test-u32-printf1.h unistdio/test-u32-vasnprintf2.sh \ + unistdio/test-u32-vasnprintf2.c \ + unistdio/test-u32-vasnprintf3.sh \ + unistdio/test-u32-vasnprintf3.c unistdio/test-u32-vasprintf1.c \ + unistdio/test-u32-printf1.h unistdio/test-u32-vsnprintf1.c \ + unistdio/test-u32-printf1.h unistdio/test-u32-vsprintf1.c \ + unistdio/test-u32-printf1.h unistdio/test-u8-asnprintf1.c \ + unistdio/test-u8-asnprintf1.h unistdio/test-u8-printf1.h \ + unistdio/test-u8-vasnprintf1.c unistdio/test-u8-asnprintf1.h \ + unistdio/test-u8-printf1.h unistdio/test-u8-vasnprintf2.sh \ + unistdio/test-u8-vasnprintf2.c unistdio/test-u8-vasnprintf3.sh \ + unistdio/test-u8-vasnprintf3.c unistdio/test-u8-vasprintf1.c \ + unistdio/test-u8-printf1.h unistdio/test-u8-vsnprintf1.c \ + unistdio/test-u8-printf1.h unistdio/test-u8-vsprintf1.c \ + unistdio/test-u8-printf1.h unistdio/test-ulc-asnprintf1.c \ + unistdio/test-ulc-asnprintf1.h unistdio/test-ulc-printf1.h \ + unistdio/test-ulc-vasnprintf1.c unistdio/test-ulc-asnprintf1.h \ + unistdio/test-ulc-printf1.h unistdio/test-ulc-vasnprintf2.sh \ + unistdio/test-ulc-vasnprintf2.c \ + unistdio/test-ulc-vasnprintf3.sh \ + unistdio/test-ulc-vasnprintf3.c unistdio/test-ulc-vasprintf1.c \ + unistdio/test-ulc-printf1.h unistdio/test-ulc-vsnprintf1.c \ + unistdio/test-ulc-printf1.h unistdio/test-ulc-vsprintf1.c \ + unistdio/test-ulc-printf1.h uniwbrk/test-u16-wordbreaks.c \ + uniwbrk/test-u32-wordbreaks.c uniwbrk/test-u8-wordbreaks.c \ + uniwbrk/test-ulc-wordbreaks.sh uniwbrk/test-ulc-wordbreaks.c \ + uniwidth/test-u16-strwidth.c uniwidth/test-u16-width.c \ + uniwidth/test-u32-strwidth.c uniwidth/test-u32-width.c \ + uniwidth/test-u8-strwidth.c uniwidth/test-u8-width.c \ + uniwidth/test-uc_width.c uniwidth/test-uc_width2.c \ + uniwidth/test-uc_width2.sh unsetenv.c test-wchar.c wctob.c \ + test-wctype.c test-wcwidth.c xalloc.h xmalloc.c +BUILT_SOURCES = $(LOCALE_H) +SUFFIXES = +MOSTLYCLEANFILES = core *.stackdump locale.h locale.h-t +MOSTLYCLEANDIRS = +CLEANFILES = +DISTCLEANFILES = +MAINTAINERCLEANFILES = +AM_CPPFLAGS = \ + -I. -I$(srcdir) \ + -I.. -I$(srcdir)/.. \ + -I../lib -I$(srcdir)/../lib + +LDADD = libtests.a ../lib/libunistring.la libtests.a $(LIBTESTS_LIBDEPS) +libtests_a_SOURCES = gettext.h progname.h progname.c xalloc-die.c +libtests_a_LIBADD = $(gltests_LIBOBJS) +libtests_a_DEPENDENCIES = $(gltests_LIBOBJS) +EXTRA_libtests_a_SOURCES = error.c exitfail.c setenv.c strerror.c \ + unsetenv.c wctob.c xmalloc.c +AM_LIBTOOLFLAGS = --preserve-dup-deps +test_frexpl_nolibm_SOURCES = test-frexpl.c +test_iconv_LDADD = $(LDADD) @LIBICONV@ +test_localename_LDADD = $(LDADD) @INTL_MACOSX_LIBS@ +test_striconveh_LDADD = $(LDADD) @LIBICONV@ +test_striconveha_LDADD = $(LDADD) @LIBICONV@ +test_cased_SOURCES = unicase/test-cased.c +test_ignorable_SOURCES = unicase/test-ignorable.c +test_locale_language_SOURCES = unicase/test-locale-language.c +test_locale_language_LDADD = $(LDADD) @INTL_MACOSX_LIBS@ +test_uc_tolower_SOURCES = unicase/test-uc_tolower.c +test_uc_totitle_SOURCES = unicase/test-uc_totitle.c +test_uc_toupper_SOURCES = unicase/test-uc_toupper.c +test_u16_casecmp_SOURCES = unicase/test-u16-casecmp.c +test_u16_casecoll_SOURCES = unicase/test-u16-casecoll.c +test_u16_casecoll_LDADD = $(LDADD) @LIBICONV@ +test_u16_casefold_SOURCES = unicase/test-u16-casefold.c +test_u16_is_cased_SOURCES = unicase/test-u16-is-cased.c +test_u16_is_casefolded_SOURCES = unicase/test-u16-is-casefolded.c +test_u16_is_lowercase_SOURCES = unicase/test-u16-is-lowercase.c +test_u16_is_titlecase_SOURCES = unicase/test-u16-is-titlecase.c +test_u16_is_uppercase_SOURCES = unicase/test-u16-is-uppercase.c +test_u16_tolower_SOURCES = unicase/test-u16-tolower.c +test_u16_totitle_SOURCES = unicase/test-u16-totitle.c +test_u16_toupper_SOURCES = unicase/test-u16-toupper.c +test_u32_casecmp_SOURCES = unicase/test-u32-casecmp.c +test_u32_casecoll_SOURCES = unicase/test-u32-casecoll.c +test_u32_casecoll_LDADD = $(LDADD) @LIBICONV@ +test_u32_casefold_SOURCES = unicase/test-u32-casefold.c +test_u32_is_cased_SOURCES = unicase/test-u32-is-cased.c +test_u32_is_casefolded_SOURCES = unicase/test-u32-is-casefolded.c +test_u32_is_lowercase_SOURCES = unicase/test-u32-is-lowercase.c +test_u32_is_titlecase_SOURCES = unicase/test-u32-is-titlecase.c +test_u32_is_uppercase_SOURCES = unicase/test-u32-is-uppercase.c +test_u32_tolower_SOURCES = unicase/test-u32-tolower.c +test_u32_totitle_SOURCES = unicase/test-u32-totitle.c +test_u32_toupper_SOURCES = unicase/test-u32-toupper.c +test_u8_casecmp_SOURCES = unicase/test-u8-casecmp.c +test_u8_casecoll_SOURCES = unicase/test-u8-casecoll.c +test_u8_casecoll_LDADD = $(LDADD) @LIBICONV@ +test_u8_casefold_SOURCES = unicase/test-u8-casefold.c +test_u8_is_cased_SOURCES = unicase/test-u8-is-cased.c +test_u8_is_casefolded_SOURCES = unicase/test-u8-is-casefolded.c +test_u8_is_lowercase_SOURCES = unicase/test-u8-is-lowercase.c +test_u8_is_titlecase_SOURCES = unicase/test-u8-is-titlecase.c +test_u8_is_uppercase_SOURCES = unicase/test-u8-is-uppercase.c +test_u8_tolower_SOURCES = unicase/test-u8-tolower.c +test_u8_totitle_SOURCES = unicase/test-u8-totitle.c +test_u8_toupper_SOURCES = unicase/test-u8-toupper.c +test_ulc_casecmp_SOURCES = unicase/test-ulc-casecmp.c +test_ulc_casecmp_LDADD = $(LDADD) @LIBICONV@ +test_ulc_casecoll_SOURCES = unicase/test-ulc-casecoll.c +test_ulc_casecoll_LDADD = $(LDADD) @LIBICONV@ +test_u16_conv_from_enc_SOURCES = uniconv/test-u16-conv-from-enc.c +test_u16_conv_from_enc_LDADD = $(LDADD) @LIBICONV@ +test_u16_conv_to_enc_SOURCES = uniconv/test-u16-conv-to-enc.c +test_u16_conv_to_enc_LDADD = $(LDADD) @LIBICONV@ +test_u16_strconv_from_enc_SOURCES = uniconv/test-u16-strconv-from-enc.c +test_u16_strconv_from_enc_LDADD = $(LDADD) @LIBICONV@ +test_u16_strconv_to_enc_SOURCES = uniconv/test-u16-strconv-to-enc.c +test_u16_strconv_to_enc_LDADD = $(LDADD) @LIBICONV@ +test_u32_conv_from_enc_SOURCES = uniconv/test-u32-conv-from-enc.c +test_u32_conv_from_enc_LDADD = $(LDADD) @LIBICONV@ +test_u32_conv_to_enc_SOURCES = uniconv/test-u32-conv-to-enc.c +test_u32_conv_to_enc_LDADD = $(LDADD) @LIBICONV@ +test_u32_strconv_from_enc_SOURCES = uniconv/test-u32-strconv-from-enc.c +test_u32_strconv_from_enc_LDADD = $(LDADD) @LIBICONV@ +test_u32_strconv_to_enc_SOURCES = uniconv/test-u32-strconv-to-enc.c +test_u32_strconv_to_enc_LDADD = $(LDADD) @LIBICONV@ +test_u8_conv_from_enc_SOURCES = uniconv/test-u8-conv-from-enc.c +test_u8_conv_from_enc_LDADD = $(LDADD) @LIBICONV@ +test_u8_conv_to_enc_SOURCES = uniconv/test-u8-conv-to-enc.c +test_u8_conv_to_enc_LDADD = $(LDADD) @LIBICONV@ +test_u8_strconv_from_enc_SOURCES = uniconv/test-u8-strconv-from-enc.c +test_u8_strconv_from_enc_LDADD = $(LDADD) @LIBICONV@ +test_u8_strconv_to_enc_SOURCES = uniconv/test-u8-strconv-to-enc.c +test_u8_strconv_to_enc_LDADD = $(LDADD) @LIBICONV@ +test_bidi_byname_SOURCES = unictype/test-bidi_byname.c +test_bidi_name_SOURCES = unictype/test-bidi_name.c +test_bidi_of_SOURCES = unictype/test-bidi_of.c +test_bidi_test_SOURCES = unictype/test-bidi_test.c +test_block_list_SOURCES = unictype/test-block_list.c +test_block_of_SOURCES = unictype/test-block_of.c +test_block_test_SOURCES = unictype/test-block_test.c +test_categ_C_SOURCES = unictype/test-categ_C.c +test_categ_Cc_SOURCES = unictype/test-categ_Cc.c +test_categ_Cf_SOURCES = unictype/test-categ_Cf.c +test_categ_Cn_SOURCES = unictype/test-categ_Cn.c +test_categ_Co_SOURCES = unictype/test-categ_Co.c +test_categ_Cs_SOURCES = unictype/test-categ_Cs.c +test_categ_L_SOURCES = unictype/test-categ_L.c +test_categ_Ll_SOURCES = unictype/test-categ_Ll.c +test_categ_Lm_SOURCES = unictype/test-categ_Lm.c +test_categ_Lo_SOURCES = unictype/test-categ_Lo.c +test_categ_Lt_SOURCES = unictype/test-categ_Lt.c +test_categ_Lu_SOURCES = unictype/test-categ_Lu.c +test_categ_M_SOURCES = unictype/test-categ_M.c +test_categ_Mc_SOURCES = unictype/test-categ_Mc.c +test_categ_Me_SOURCES = unictype/test-categ_Me.c +test_categ_Mn_SOURCES = unictype/test-categ_Mn.c +test_categ_N_SOURCES = unictype/test-categ_N.c +test_categ_Nd_SOURCES = unictype/test-categ_Nd.c +test_categ_Nl_SOURCES = unictype/test-categ_Nl.c +test_categ_No_SOURCES = unictype/test-categ_No.c +test_categ_P_SOURCES = unictype/test-categ_P.c +test_categ_Pc_SOURCES = unictype/test-categ_Pc.c +test_categ_Pd_SOURCES = unictype/test-categ_Pd.c +test_categ_Pe_SOURCES = unictype/test-categ_Pe.c +test_categ_Pf_SOURCES = unictype/test-categ_Pf.c +test_categ_Pi_SOURCES = unictype/test-categ_Pi.c +test_categ_Po_SOURCES = unictype/test-categ_Po.c +test_categ_Ps_SOURCES = unictype/test-categ_Ps.c +test_categ_S_SOURCES = unictype/test-categ_S.c +test_categ_Sc_SOURCES = unictype/test-categ_Sc.c +test_categ_Sk_SOURCES = unictype/test-categ_Sk.c +test_categ_Sm_SOURCES = unictype/test-categ_Sm.c +test_categ_So_SOURCES = unictype/test-categ_So.c +test_categ_Z_SOURCES = unictype/test-categ_Z.c +test_categ_Zl_SOURCES = unictype/test-categ_Zl.c +test_categ_Zp_SOURCES = unictype/test-categ_Zp.c +test_categ_Zs_SOURCES = unictype/test-categ_Zs.c +test_categ_and_not_SOURCES = unictype/test-categ_and_not.c +test_categ_and_SOURCES = unictype/test-categ_and.c +test_categ_byname_SOURCES = unictype/test-categ_byname.c +test_categ_name_SOURCES = unictype/test-categ_name.c +@WOE32DLL_FALSE@test_categ_none_SOURCES = unictype/test-categ_none.c +test_categ_of_SOURCES = unictype/test-categ_of.c +test_categ_or_SOURCES = unictype/test-categ_or.c +test_categ_test_withtable_SOURCES = unictype/test-categ_test_withtable.c +test_combining_SOURCES = unictype/test-combining.c +test_ctype_alnum_SOURCES = unictype/test-ctype_alnum.c +test_ctype_alpha_SOURCES = unictype/test-ctype_alpha.c +test_ctype_blank_SOURCES = unictype/test-ctype_blank.c +test_ctype_cntrl_SOURCES = unictype/test-ctype_cntrl.c +test_ctype_digit_SOURCES = unictype/test-ctype_digit.c +test_ctype_graph_SOURCES = unictype/test-ctype_graph.c +test_ctype_lower_SOURCES = unictype/test-ctype_lower.c +test_ctype_print_SOURCES = unictype/test-ctype_print.c +test_ctype_punct_SOURCES = unictype/test-ctype_punct.c +test_ctype_space_SOURCES = unictype/test-ctype_space.c +test_ctype_upper_SOURCES = unictype/test-ctype_upper.c +test_ctype_xdigit_SOURCES = unictype/test-ctype_xdigit.c +test_decdigit_SOURCES = unictype/test-decdigit.c +test_digit_SOURCES = unictype/test-digit.c +test_mirror_SOURCES = unictype/test-mirror.c +test_numeric_SOURCES = unictype/test-numeric.c +test_pr_alphabetic_SOURCES = unictype/test-pr_alphabetic.c +test_pr_ascii_hex_digit_SOURCES = unictype/test-pr_ascii_hex_digit.c +test_pr_bidi_arabic_digit_SOURCES = unictype/test-pr_bidi_arabic_digit.c +test_pr_bidi_arabic_right_to_left_SOURCES = unictype/test-pr_bidi_arabic_right_to_left.c +test_pr_bidi_block_separator_SOURCES = unictype/test-pr_bidi_block_separator.c +test_pr_bidi_boundary_neutral_SOURCES = unictype/test-pr_bidi_boundary_neutral.c +test_pr_bidi_common_separator_SOURCES = unictype/test-pr_bidi_common_separator.c +test_pr_bidi_control_SOURCES = unictype/test-pr_bidi_control.c +test_pr_bidi_embedding_or_override_SOURCES = unictype/test-pr_bidi_embedding_or_override.c +test_pr_bidi_eur_num_separator_SOURCES = unictype/test-pr_bidi_eur_num_separator.c +test_pr_bidi_eur_num_terminator_SOURCES = unictype/test-pr_bidi_eur_num_terminator.c +test_pr_bidi_european_digit_SOURCES = unictype/test-pr_bidi_european_digit.c +test_pr_bidi_hebrew_right_to_left_SOURCES = unictype/test-pr_bidi_hebrew_right_to_left.c +test_pr_bidi_left_to_right_SOURCES = unictype/test-pr_bidi_left_to_right.c +test_pr_bidi_non_spacing_mark_SOURCES = unictype/test-pr_bidi_non_spacing_mark.c +test_pr_bidi_other_neutral_SOURCES = unictype/test-pr_bidi_other_neutral.c +test_pr_bidi_pdf_SOURCES = unictype/test-pr_bidi_pdf.c +test_pr_bidi_segment_separator_SOURCES = unictype/test-pr_bidi_segment_separator.c +test_pr_bidi_whitespace_SOURCES = unictype/test-pr_bidi_whitespace.c +test_pr_byname_SOURCES = unictype/test-pr_byname.c +test_pr_combining_SOURCES = unictype/test-pr_combining.c +test_pr_composite_SOURCES = unictype/test-pr_composite.c +test_pr_currency_symbol_SOURCES = unictype/test-pr_currency_symbol.c +test_pr_dash_SOURCES = unictype/test-pr_dash.c +test_pr_decimal_digit_SOURCES = unictype/test-pr_decimal_digit.c +test_pr_default_ignorable_code_point_SOURCES = unictype/test-pr_default_ignorable_code_point.c +test_pr_deprecated_SOURCES = unictype/test-pr_deprecated.c +test_pr_diacritic_SOURCES = unictype/test-pr_diacritic.c +test_pr_extender_SOURCES = unictype/test-pr_extender.c +test_pr_format_control_SOURCES = unictype/test-pr_format_control.c +test_pr_grapheme_base_SOURCES = unictype/test-pr_grapheme_base.c +test_pr_grapheme_extend_SOURCES = unictype/test-pr_grapheme_extend.c +test_pr_grapheme_link_SOURCES = unictype/test-pr_grapheme_link.c +test_pr_hex_digit_SOURCES = unictype/test-pr_hex_digit.c +test_pr_hyphen_SOURCES = unictype/test-pr_hyphen.c +test_pr_id_continue_SOURCES = unictype/test-pr_id_continue.c +test_pr_id_start_SOURCES = unictype/test-pr_id_start.c +test_pr_ideographic_SOURCES = unictype/test-pr_ideographic.c +test_pr_ids_binary_operator_SOURCES = unictype/test-pr_ids_binary_operator.c +test_pr_ids_trinary_operator_SOURCES = unictype/test-pr_ids_trinary_operator.c +test_pr_ignorable_control_SOURCES = unictype/test-pr_ignorable_control.c +test_pr_iso_control_SOURCES = unictype/test-pr_iso_control.c +test_pr_join_control_SOURCES = unictype/test-pr_join_control.c +test_pr_left_of_pair_SOURCES = unictype/test-pr_left_of_pair.c +test_pr_line_separator_SOURCES = unictype/test-pr_line_separator.c +test_pr_logical_order_exception_SOURCES = unictype/test-pr_logical_order_exception.c +test_pr_lowercase_SOURCES = unictype/test-pr_lowercase.c +test_pr_math_SOURCES = unictype/test-pr_math.c +test_pr_non_break_SOURCES = unictype/test-pr_non_break.c +test_pr_not_a_character_SOURCES = unictype/test-pr_not_a_character.c +test_pr_numeric_SOURCES = unictype/test-pr_numeric.c +test_pr_other_alphabetic_SOURCES = unictype/test-pr_other_alphabetic.c +test_pr_other_default_ignorable_code_point_SOURCES = unictype/test-pr_other_default_ignorable_code_point.c +test_pr_other_grapheme_extend_SOURCES = unictype/test-pr_other_grapheme_extend.c +test_pr_other_id_continue_SOURCES = unictype/test-pr_other_id_continue.c +test_pr_other_id_start_SOURCES = unictype/test-pr_other_id_start.c +test_pr_other_lowercase_SOURCES = unictype/test-pr_other_lowercase.c +test_pr_other_math_SOURCES = unictype/test-pr_other_math.c +test_pr_other_uppercase_SOURCES = unictype/test-pr_other_uppercase.c +test_pr_paired_punctuation_SOURCES = unictype/test-pr_paired_punctuation.c +test_pr_paragraph_separator_SOURCES = unictype/test-pr_paragraph_separator.c +test_pr_pattern_syntax_SOURCES = unictype/test-pr_pattern_syntax.c +test_pr_pattern_white_space_SOURCES = unictype/test-pr_pattern_white_space.c +test_pr_private_use_SOURCES = unictype/test-pr_private_use.c +test_pr_punctuation_SOURCES = unictype/test-pr_punctuation.c +test_pr_quotation_mark_SOURCES = unictype/test-pr_quotation_mark.c +test_pr_radical_SOURCES = unictype/test-pr_radical.c +test_pr_sentence_terminal_SOURCES = unictype/test-pr_sentence_terminal.c +test_pr_soft_dotted_SOURCES = unictype/test-pr_soft_dotted.c +test_pr_space_SOURCES = unictype/test-pr_space.c +test_pr_terminal_punctuation_SOURCES = unictype/test-pr_terminal_punctuation.c +test_pr_test_SOURCES = unictype/test-pr_test.c +test_pr_titlecase_SOURCES = unictype/test-pr_titlecase.c +test_pr_unassigned_code_value_SOURCES = unictype/test-pr_unassigned_code_value.c +test_pr_unified_ideograph_SOURCES = unictype/test-pr_unified_ideograph.c +test_pr_uppercase_SOURCES = unictype/test-pr_uppercase.c +test_pr_variation_selector_SOURCES = unictype/test-pr_variation_selector.c +test_pr_white_space_SOURCES = unictype/test-pr_white_space.c +test_pr_xid_continue_SOURCES = unictype/test-pr_xid_continue.c +test_pr_xid_start_SOURCES = unictype/test-pr_xid_start.c +test_pr_zero_width_SOURCES = unictype/test-pr_zero_width.c +test_scripts_SOURCES = unictype/test-scripts.c +test_sy_c_ident_SOURCES = unictype/test-sy_c_ident.c +test_sy_c_whitespace_SOURCES = unictype/test-sy_c_whitespace.c +test_sy_java_ident_SOURCES = unictype/test-sy_java_ident.c +test_sy_java_whitespace_SOURCES = unictype/test-sy_java_whitespace.c +test_u16_possible_linebreaks_SOURCES = unilbrk/test-u16-possible-linebreaks.c +test_u16_width_linebreaks_SOURCES = unilbrk/test-u16-width-linebreaks.c +test_u32_possible_linebreaks_SOURCES = unilbrk/test-u32-possible-linebreaks.c +test_u32_width_linebreaks_SOURCES = unilbrk/test-u32-width-linebreaks.c +test_u8_possible_linebreaks_SOURCES = unilbrk/test-u8-possible-linebreaks.c +test_u8_width_linebreaks_SOURCES = unilbrk/test-u8-width-linebreaks.c +test_ulc_possible_linebreaks_SOURCES = unilbrk/test-ulc-possible-linebreaks.c +test_ulc_possible_linebreaks_LDADD = $(LDADD) @LIBICONV@ +test_ulc_width_linebreaks_SOURCES = unilbrk/test-ulc-width-linebreaks.c +test_ulc_width_linebreaks_LDADD = $(LDADD) @LIBICONV@ +test_uninames_SOURCES = uniname/test-uninames.c +test_uninames_LDADD = $(LDADD) @LIBINTL@ +test_canonical_decomposition_SOURCES = uninorm/test-canonical-decomposition.c +test_compat_decomposition_SOURCES = uninorm/test-compat-decomposition.c +test_composition_SOURCES = uninorm/test-composition.c +test_decomposing_form_SOURCES = uninorm/test-decomposing-form.c +test_decomposition_SOURCES = uninorm/test-decomposition.c +test_uninorm_filter_nfc_SOURCES = uninorm/test-uninorm-filter-nfc.c +test_nfc_SOURCES = \ + uninorm/test-nfc.c \ + uninorm/test-u8-nfc.c \ + uninorm/test-u16-nfc.c \ + uninorm/test-u32-nfc.c + +test_u32_nfc_big_SOURCES = \ + uninorm/test-u32-nfc-big.c \ + uninorm/test-u32-normalize-big.c + +test_u32_nfc_big_LDADD = $(LDADD) @LIBINTL@ +test_nfd_SOURCES = \ + uninorm/test-nfd.c \ + uninorm/test-u8-nfd.c \ + uninorm/test-u16-nfd.c \ + uninorm/test-u32-nfd.c + +test_u32_nfd_big_SOURCES = \ + uninorm/test-u32-nfd-big.c \ + uninorm/test-u32-normalize-big.c + +test_u32_nfd_big_LDADD = $(LDADD) @LIBINTL@ +test_nfkc_SOURCES = \ + uninorm/test-nfkc.c \ + uninorm/test-u8-nfkc.c \ + uninorm/test-u16-nfkc.c \ + uninorm/test-u32-nfkc.c + +test_u32_nfkc_big_SOURCES = \ + uninorm/test-u32-nfkc-big.c \ + uninorm/test-u32-normalize-big.c + +test_u32_nfkc_big_LDADD = $(LDADD) @LIBINTL@ +test_nfkd_SOURCES = \ + uninorm/test-nfkd.c \ + uninorm/test-u8-nfkd.c \ + uninorm/test-u16-nfkd.c \ + uninorm/test-u32-nfkd.c + +test_u32_nfkd_big_SOURCES = \ + uninorm/test-u32-nfkd-big.c \ + uninorm/test-u32-normalize-big.c + +test_u32_nfkd_big_LDADD = $(LDADD) @LIBINTL@ +test_u16_normcmp_SOURCES = uninorm/test-u16-normcmp.c +test_u16_normcoll_SOURCES = uninorm/test-u16-normcoll.c +test_u16_normcoll_LDADD = $(LDADD) @LIBICONV@ +test_u32_normcmp_SOURCES = uninorm/test-u32-normcmp.c +test_u32_normcoll_SOURCES = uninorm/test-u32-normcoll.c +test_u32_normcoll_LDADD = $(LDADD) @LIBICONV@ +test_u8_normcmp_SOURCES = uninorm/test-u8-normcmp.c +test_u8_normcoll_SOURCES = uninorm/test-u8-normcoll.c +test_u8_normcoll_LDADD = $(LDADD) @LIBICONV@ +test_u16_asnprintf1_SOURCES = unistdio/test-u16-asnprintf1.c +test_u16_asnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u16_vasnprintf1_SOURCES = unistdio/test-u16-vasnprintf1.c +test_u16_vasnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u16_vasnprintf2_SOURCES = unistdio/test-u16-vasnprintf2.c +test_u16_vasnprintf2_LDADD = $(LDADD) @LIBICONV@ +test_u16_vasnprintf3_SOURCES = unistdio/test-u16-vasnprintf3.c +test_u16_vasnprintf3_LDADD = $(LDADD) @LIBICONV@ +test_u16_vasprintf1_SOURCES = unistdio/test-u16-vasprintf1.c +test_u16_vasprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u16_vsnprintf1_SOURCES = unistdio/test-u16-vsnprintf1.c +test_u16_vsnprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +test_u16_vsprintf1_SOURCES = unistdio/test-u16-vsprintf1.c +test_u16_vsprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +test_u32_asnprintf1_SOURCES = unistdio/test-u32-asnprintf1.c +test_u32_asnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u32_vasnprintf1_SOURCES = unistdio/test-u32-vasnprintf1.c +test_u32_vasnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u32_vasnprintf2_SOURCES = unistdio/test-u32-vasnprintf2.c +test_u32_vasnprintf2_LDADD = $(LDADD) @LIBICONV@ +test_u32_vasnprintf3_SOURCES = unistdio/test-u32-vasnprintf3.c +test_u32_vasnprintf3_LDADD = $(LDADD) @LIBICONV@ +test_u32_vasprintf1_SOURCES = unistdio/test-u32-vasprintf1.c +test_u32_vasprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u32_vsnprintf1_SOURCES = unistdio/test-u32-vsnprintf1.c +test_u32_vsnprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +test_u32_vsprintf1_SOURCES = unistdio/test-u32-vsprintf1.c +test_u32_vsprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +test_u8_asnprintf1_SOURCES = unistdio/test-u8-asnprintf1.c +test_u8_asnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u8_vasnprintf1_SOURCES = unistdio/test-u8-vasnprintf1.c +test_u8_vasnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u8_vasnprintf2_SOURCES = unistdio/test-u8-vasnprintf2.c +test_u8_vasnprintf2_LDADD = $(LDADD) @LIBICONV@ +test_u8_vasnprintf3_SOURCES = unistdio/test-u8-vasnprintf3.c +test_u8_vasnprintf3_LDADD = $(LDADD) @LIBICONV@ +test_u8_vasprintf1_SOURCES = unistdio/test-u8-vasprintf1.c +test_u8_vasprintf1_LDADD = $(LDADD) @LIBICONV@ +test_u8_vsnprintf1_SOURCES = unistdio/test-u8-vsnprintf1.c +test_u8_vsnprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +test_u8_vsprintf1_SOURCES = unistdio/test-u8-vsprintf1.c +test_u8_vsprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +test_ulc_asnprintf1_SOURCES = unistdio/test-ulc-asnprintf1.c +test_ulc_asnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_ulc_vasnprintf1_SOURCES = unistdio/test-ulc-vasnprintf1.c +test_ulc_vasnprintf1_LDADD = $(LDADD) @LIBICONV@ +test_ulc_vasnprintf2_SOURCES = unistdio/test-ulc-vasnprintf2.c +test_ulc_vasnprintf2_LDADD = $(LDADD) @LIBICONV@ +test_ulc_vasnprintf3_SOURCES = unistdio/test-ulc-vasnprintf3.c +test_ulc_vasnprintf3_LDADD = $(LDADD) @LIBICONV@ +test_ulc_vasprintf1_SOURCES = unistdio/test-ulc-vasprintf1.c +test_ulc_vasprintf1_LDADD = $(LDADD) @LIBICONV@ +test_ulc_vsnprintf1_SOURCES = unistdio/test-ulc-vsnprintf1.c +test_ulc_vsnprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +test_ulc_vsprintf1_SOURCES = unistdio/test-ulc-vsprintf1.c +test_ulc_vsprintf1_LDADD = $(LDADD) @LIBINTL@ @LIBICONV@ +test_u16_wordbreaks_SOURCES = uniwbrk/test-u16-wordbreaks.c +test_u32_wordbreaks_SOURCES = uniwbrk/test-u32-wordbreaks.c +test_u8_wordbreaks_SOURCES = uniwbrk/test-u8-wordbreaks.c +test_ulc_wordbreaks_SOURCES = uniwbrk/test-ulc-wordbreaks.c +test_ulc_wordbreaks_LDADD = $(LDADD) @LIBICONV@ +test_u16_strwidth_SOURCES = uniwidth/test-u16-strwidth.c +test_u16_width_SOURCES = uniwidth/test-u16-width.c +test_u32_strwidth_SOURCES = uniwidth/test-u32-strwidth.c +test_u32_width_SOURCES = uniwidth/test-u32-width.c +test_u8_strwidth_SOURCES = uniwidth/test-u8-strwidth.c +test_u8_width_SOURCES = uniwidth/test-u8-width.c +test_uc_width_SOURCES = uniwidth/test-uc_width.c +test_uc_width2_SOURCES = uniwidth/test-uc_width2.c + +# Ensure that ../lib/config.h is seen before ../config.h. +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/lib -I$(top_builddir) + +# For debugging memory leaks and memory allocation bugs. +# You should build with --disable-shared when using valgrind. +CHECKER = +#CHECKER = valgrind --tool=memcheck --suppressions=$(srcdir)/../lib/malloca.valgrind --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes +#CHECKER = valgrind --tool=massif --format=html --depth=10 --alloc-fn=xmalloc --alloc-fn=xrealloc --stacks=no +CHECKER_END_OF_COMMENTS = +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.gnulib $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-checkLIBRARIES: + -test -z "$(check_LIBRARIES)" || rm -f $(check_LIBRARIES) + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libtests.a: $(libtests_a_OBJECTS) $(libtests_a_DEPENDENCIES) + $(AM_V_at)-rm -f libtests.a + $(AM_V_AR)$(libtests_a_AR) libtests.a $(libtests_a_OBJECTS) $(libtests_a_LIBADD) + $(AM_V_at)$(RANLIB) libtests.a + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +test-alloca-opt$(EXEEXT): $(test_alloca_opt_OBJECTS) $(test_alloca_opt_DEPENDENCIES) + @rm -f test-alloca-opt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_alloca_opt_OBJECTS) $(test_alloca_opt_LDADD) $(LIBS) +test-array-mergesort$(EXEEXT): $(test_array_mergesort_OBJECTS) $(test_array_mergesort_DEPENDENCIES) + @rm -f test-array-mergesort$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_array_mergesort_OBJECTS) $(test_array_mergesort_LDADD) $(LIBS) +unictype/$(am__dirstamp): + @$(MKDIR_P) unictype + @: > unictype/$(am__dirstamp) +unictype/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) unictype/$(DEPDIR) + @: > unictype/$(DEPDIR)/$(am__dirstamp) +unictype/test-bidi_byname.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-bidi_byname$(EXEEXT): $(test_bidi_byname_OBJECTS) $(test_bidi_byname_DEPENDENCIES) + @rm -f test-bidi_byname$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_bidi_byname_OBJECTS) $(test_bidi_byname_LDADD) $(LIBS) +unictype/test-bidi_name.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-bidi_name$(EXEEXT): $(test_bidi_name_OBJECTS) $(test_bidi_name_DEPENDENCIES) + @rm -f test-bidi_name$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_bidi_name_OBJECTS) $(test_bidi_name_LDADD) $(LIBS) +unictype/test-bidi_of.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-bidi_of$(EXEEXT): $(test_bidi_of_OBJECTS) $(test_bidi_of_DEPENDENCIES) + @rm -f test-bidi_of$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_bidi_of_OBJECTS) $(test_bidi_of_LDADD) $(LIBS) +unictype/test-bidi_test.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-bidi_test$(EXEEXT): $(test_bidi_test_OBJECTS) $(test_bidi_test_DEPENDENCIES) + @rm -f test-bidi_test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_bidi_test_OBJECTS) $(test_bidi_test_LDADD) $(LIBS) +unictype/test-block_list.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-block_list$(EXEEXT): $(test_block_list_OBJECTS) $(test_block_list_DEPENDENCIES) + @rm -f test-block_list$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_block_list_OBJECTS) $(test_block_list_LDADD) $(LIBS) +unictype/test-block_of.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-block_of$(EXEEXT): $(test_block_of_OBJECTS) $(test_block_of_DEPENDENCIES) + @rm -f test-block_of$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_block_of_OBJECTS) $(test_block_of_LDADD) $(LIBS) +unictype/test-block_test.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-block_test$(EXEEXT): $(test_block_test_OBJECTS) $(test_block_test_DEPENDENCIES) + @rm -f test-block_test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_block_test_OBJECTS) $(test_block_test_LDADD) $(LIBS) +test-c-ctype$(EXEEXT): $(test_c_ctype_OBJECTS) $(test_c_ctype_DEPENDENCIES) + @rm -f test-c-ctype$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c_ctype_OBJECTS) $(test_c_ctype_LDADD) $(LIBS) +test-c-strcasecmp$(EXEEXT): $(test_c_strcasecmp_OBJECTS) $(test_c_strcasecmp_DEPENDENCIES) + @rm -f test-c-strcasecmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c_strcasecmp_OBJECTS) $(test_c_strcasecmp_LDADD) $(LIBS) +test-c-strncasecmp$(EXEEXT): $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_DEPENDENCIES) + @rm -f test-c-strncasecmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_c_strncasecmp_OBJECTS) $(test_c_strncasecmp_LDADD) $(LIBS) +uninorm/$(am__dirstamp): + @$(MKDIR_P) uninorm + @: > uninorm/$(am__dirstamp) +uninorm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) uninorm/$(DEPDIR) + @: > uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-canonical-decomposition.$(OBJEXT): \ + uninorm/$(am__dirstamp) uninorm/$(DEPDIR)/$(am__dirstamp) +test-canonical-decomposition$(EXEEXT): $(test_canonical_decomposition_OBJECTS) $(test_canonical_decomposition_DEPENDENCIES) + @rm -f test-canonical-decomposition$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_canonical_decomposition_OBJECTS) $(test_canonical_decomposition_LDADD) $(LIBS) +unicase/$(am__dirstamp): + @$(MKDIR_P) unicase + @: > unicase/$(am__dirstamp) +unicase/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) unicase/$(DEPDIR) + @: > unicase/$(DEPDIR)/$(am__dirstamp) +unicase/test-cased.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-cased$(EXEEXT): $(test_cased_OBJECTS) $(test_cased_DEPENDENCIES) + @rm -f test-cased$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_cased_OBJECTS) $(test_cased_LDADD) $(LIBS) +unictype/test-categ_C.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_C$(EXEEXT): $(test_categ_C_OBJECTS) $(test_categ_C_DEPENDENCIES) + @rm -f test-categ_C$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_C_OBJECTS) $(test_categ_C_LDADD) $(LIBS) +unictype/test-categ_Cc.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Cc$(EXEEXT): $(test_categ_Cc_OBJECTS) $(test_categ_Cc_DEPENDENCIES) + @rm -f test-categ_Cc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Cc_OBJECTS) $(test_categ_Cc_LDADD) $(LIBS) +unictype/test-categ_Cf.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Cf$(EXEEXT): $(test_categ_Cf_OBJECTS) $(test_categ_Cf_DEPENDENCIES) + @rm -f test-categ_Cf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Cf_OBJECTS) $(test_categ_Cf_LDADD) $(LIBS) +unictype/test-categ_Cn.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Cn$(EXEEXT): $(test_categ_Cn_OBJECTS) $(test_categ_Cn_DEPENDENCIES) + @rm -f test-categ_Cn$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Cn_OBJECTS) $(test_categ_Cn_LDADD) $(LIBS) +unictype/test-categ_Co.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Co$(EXEEXT): $(test_categ_Co_OBJECTS) $(test_categ_Co_DEPENDENCIES) + @rm -f test-categ_Co$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Co_OBJECTS) $(test_categ_Co_LDADD) $(LIBS) +unictype/test-categ_Cs.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Cs$(EXEEXT): $(test_categ_Cs_OBJECTS) $(test_categ_Cs_DEPENDENCIES) + @rm -f test-categ_Cs$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Cs_OBJECTS) $(test_categ_Cs_LDADD) $(LIBS) +unictype/test-categ_L.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_L$(EXEEXT): $(test_categ_L_OBJECTS) $(test_categ_L_DEPENDENCIES) + @rm -f test-categ_L$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_L_OBJECTS) $(test_categ_L_LDADD) $(LIBS) +unictype/test-categ_Ll.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Ll$(EXEEXT): $(test_categ_Ll_OBJECTS) $(test_categ_Ll_DEPENDENCIES) + @rm -f test-categ_Ll$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Ll_OBJECTS) $(test_categ_Ll_LDADD) $(LIBS) +unictype/test-categ_Lm.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Lm$(EXEEXT): $(test_categ_Lm_OBJECTS) $(test_categ_Lm_DEPENDENCIES) + @rm -f test-categ_Lm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Lm_OBJECTS) $(test_categ_Lm_LDADD) $(LIBS) +unictype/test-categ_Lo.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Lo$(EXEEXT): $(test_categ_Lo_OBJECTS) $(test_categ_Lo_DEPENDENCIES) + @rm -f test-categ_Lo$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Lo_OBJECTS) $(test_categ_Lo_LDADD) $(LIBS) +unictype/test-categ_Lt.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Lt$(EXEEXT): $(test_categ_Lt_OBJECTS) $(test_categ_Lt_DEPENDENCIES) + @rm -f test-categ_Lt$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Lt_OBJECTS) $(test_categ_Lt_LDADD) $(LIBS) +unictype/test-categ_Lu.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Lu$(EXEEXT): $(test_categ_Lu_OBJECTS) $(test_categ_Lu_DEPENDENCIES) + @rm -f test-categ_Lu$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Lu_OBJECTS) $(test_categ_Lu_LDADD) $(LIBS) +unictype/test-categ_M.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_M$(EXEEXT): $(test_categ_M_OBJECTS) $(test_categ_M_DEPENDENCIES) + @rm -f test-categ_M$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_M_OBJECTS) $(test_categ_M_LDADD) $(LIBS) +unictype/test-categ_Mc.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Mc$(EXEEXT): $(test_categ_Mc_OBJECTS) $(test_categ_Mc_DEPENDENCIES) + @rm -f test-categ_Mc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Mc_OBJECTS) $(test_categ_Mc_LDADD) $(LIBS) +unictype/test-categ_Me.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Me$(EXEEXT): $(test_categ_Me_OBJECTS) $(test_categ_Me_DEPENDENCIES) + @rm -f test-categ_Me$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Me_OBJECTS) $(test_categ_Me_LDADD) $(LIBS) +unictype/test-categ_Mn.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Mn$(EXEEXT): $(test_categ_Mn_OBJECTS) $(test_categ_Mn_DEPENDENCIES) + @rm -f test-categ_Mn$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Mn_OBJECTS) $(test_categ_Mn_LDADD) $(LIBS) +unictype/test-categ_N.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_N$(EXEEXT): $(test_categ_N_OBJECTS) $(test_categ_N_DEPENDENCIES) + @rm -f test-categ_N$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_N_OBJECTS) $(test_categ_N_LDADD) $(LIBS) +unictype/test-categ_Nd.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Nd$(EXEEXT): $(test_categ_Nd_OBJECTS) $(test_categ_Nd_DEPENDENCIES) + @rm -f test-categ_Nd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Nd_OBJECTS) $(test_categ_Nd_LDADD) $(LIBS) +unictype/test-categ_Nl.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Nl$(EXEEXT): $(test_categ_Nl_OBJECTS) $(test_categ_Nl_DEPENDENCIES) + @rm -f test-categ_Nl$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Nl_OBJECTS) $(test_categ_Nl_LDADD) $(LIBS) +unictype/test-categ_No.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_No$(EXEEXT): $(test_categ_No_OBJECTS) $(test_categ_No_DEPENDENCIES) + @rm -f test-categ_No$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_No_OBJECTS) $(test_categ_No_LDADD) $(LIBS) +unictype/test-categ_P.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_P$(EXEEXT): $(test_categ_P_OBJECTS) $(test_categ_P_DEPENDENCIES) + @rm -f test-categ_P$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_P_OBJECTS) $(test_categ_P_LDADD) $(LIBS) +unictype/test-categ_Pc.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Pc$(EXEEXT): $(test_categ_Pc_OBJECTS) $(test_categ_Pc_DEPENDENCIES) + @rm -f test-categ_Pc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Pc_OBJECTS) $(test_categ_Pc_LDADD) $(LIBS) +unictype/test-categ_Pd.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Pd$(EXEEXT): $(test_categ_Pd_OBJECTS) $(test_categ_Pd_DEPENDENCIES) + @rm -f test-categ_Pd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Pd_OBJECTS) $(test_categ_Pd_LDADD) $(LIBS) +unictype/test-categ_Pe.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Pe$(EXEEXT): $(test_categ_Pe_OBJECTS) $(test_categ_Pe_DEPENDENCIES) + @rm -f test-categ_Pe$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Pe_OBJECTS) $(test_categ_Pe_LDADD) $(LIBS) +unictype/test-categ_Pf.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Pf$(EXEEXT): $(test_categ_Pf_OBJECTS) $(test_categ_Pf_DEPENDENCIES) + @rm -f test-categ_Pf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Pf_OBJECTS) $(test_categ_Pf_LDADD) $(LIBS) +unictype/test-categ_Pi.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Pi$(EXEEXT): $(test_categ_Pi_OBJECTS) $(test_categ_Pi_DEPENDENCIES) + @rm -f test-categ_Pi$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Pi_OBJECTS) $(test_categ_Pi_LDADD) $(LIBS) +unictype/test-categ_Po.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Po$(EXEEXT): $(test_categ_Po_OBJECTS) $(test_categ_Po_DEPENDENCIES) + @rm -f test-categ_Po$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Po_OBJECTS) $(test_categ_Po_LDADD) $(LIBS) +unictype/test-categ_Ps.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Ps$(EXEEXT): $(test_categ_Ps_OBJECTS) $(test_categ_Ps_DEPENDENCIES) + @rm -f test-categ_Ps$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Ps_OBJECTS) $(test_categ_Ps_LDADD) $(LIBS) +unictype/test-categ_S.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_S$(EXEEXT): $(test_categ_S_OBJECTS) $(test_categ_S_DEPENDENCIES) + @rm -f test-categ_S$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_S_OBJECTS) $(test_categ_S_LDADD) $(LIBS) +unictype/test-categ_Sc.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Sc$(EXEEXT): $(test_categ_Sc_OBJECTS) $(test_categ_Sc_DEPENDENCIES) + @rm -f test-categ_Sc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Sc_OBJECTS) $(test_categ_Sc_LDADD) $(LIBS) +unictype/test-categ_Sk.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Sk$(EXEEXT): $(test_categ_Sk_OBJECTS) $(test_categ_Sk_DEPENDENCIES) + @rm -f test-categ_Sk$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Sk_OBJECTS) $(test_categ_Sk_LDADD) $(LIBS) +unictype/test-categ_Sm.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Sm$(EXEEXT): $(test_categ_Sm_OBJECTS) $(test_categ_Sm_DEPENDENCIES) + @rm -f test-categ_Sm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Sm_OBJECTS) $(test_categ_Sm_LDADD) $(LIBS) +unictype/test-categ_So.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_So$(EXEEXT): $(test_categ_So_OBJECTS) $(test_categ_So_DEPENDENCIES) + @rm -f test-categ_So$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_So_OBJECTS) $(test_categ_So_LDADD) $(LIBS) +unictype/test-categ_Z.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Z$(EXEEXT): $(test_categ_Z_OBJECTS) $(test_categ_Z_DEPENDENCIES) + @rm -f test-categ_Z$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Z_OBJECTS) $(test_categ_Z_LDADD) $(LIBS) +unictype/test-categ_Zl.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Zl$(EXEEXT): $(test_categ_Zl_OBJECTS) $(test_categ_Zl_DEPENDENCIES) + @rm -f test-categ_Zl$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Zl_OBJECTS) $(test_categ_Zl_LDADD) $(LIBS) +unictype/test-categ_Zp.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Zp$(EXEEXT): $(test_categ_Zp_OBJECTS) $(test_categ_Zp_DEPENDENCIES) + @rm -f test-categ_Zp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Zp_OBJECTS) $(test_categ_Zp_LDADD) $(LIBS) +unictype/test-categ_Zs.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_Zs$(EXEEXT): $(test_categ_Zs_OBJECTS) $(test_categ_Zs_DEPENDENCIES) + @rm -f test-categ_Zs$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_Zs_OBJECTS) $(test_categ_Zs_LDADD) $(LIBS) +unictype/test-categ_and.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_and$(EXEEXT): $(test_categ_and_OBJECTS) $(test_categ_and_DEPENDENCIES) + @rm -f test-categ_and$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_and_OBJECTS) $(test_categ_and_LDADD) $(LIBS) +unictype/test-categ_and_not.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_and_not$(EXEEXT): $(test_categ_and_not_OBJECTS) $(test_categ_and_not_DEPENDENCIES) + @rm -f test-categ_and_not$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_and_not_OBJECTS) $(test_categ_and_not_LDADD) $(LIBS) +unictype/test-categ_byname.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_byname$(EXEEXT): $(test_categ_byname_OBJECTS) $(test_categ_byname_DEPENDENCIES) + @rm -f test-categ_byname$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_byname_OBJECTS) $(test_categ_byname_LDADD) $(LIBS) +unictype/test-categ_name.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_name$(EXEEXT): $(test_categ_name_OBJECTS) $(test_categ_name_DEPENDENCIES) + @rm -f test-categ_name$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_name_OBJECTS) $(test_categ_name_LDADD) $(LIBS) +unictype/test-categ_none.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_none$(EXEEXT): $(test_categ_none_OBJECTS) $(test_categ_none_DEPENDENCIES) + @rm -f test-categ_none$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_none_OBJECTS) $(test_categ_none_LDADD) $(LIBS) +unictype/test-categ_of.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_of$(EXEEXT): $(test_categ_of_OBJECTS) $(test_categ_of_DEPENDENCIES) + @rm -f test-categ_of$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_of_OBJECTS) $(test_categ_of_LDADD) $(LIBS) +unictype/test-categ_or.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_or$(EXEEXT): $(test_categ_or_OBJECTS) $(test_categ_or_DEPENDENCIES) + @rm -f test-categ_or$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_or_OBJECTS) $(test_categ_or_LDADD) $(LIBS) +unictype/test-categ_test_withtable.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-categ_test_withtable$(EXEEXT): $(test_categ_test_withtable_OBJECTS) $(test_categ_test_withtable_DEPENDENCIES) + @rm -f test-categ_test_withtable$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_categ_test_withtable_OBJECTS) $(test_categ_test_withtable_LDADD) $(LIBS) +unictype/test-combining.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-combining$(EXEEXT): $(test_combining_OBJECTS) $(test_combining_DEPENDENCIES) + @rm -f test-combining$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_combining_OBJECTS) $(test_combining_LDADD) $(LIBS) +uninorm/test-compat-decomposition.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-compat-decomposition$(EXEEXT): $(test_compat_decomposition_OBJECTS) $(test_compat_decomposition_DEPENDENCIES) + @rm -f test-compat-decomposition$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_compat_decomposition_OBJECTS) $(test_compat_decomposition_LDADD) $(LIBS) +uninorm/test-composition.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-composition$(EXEEXT): $(test_composition_OBJECTS) $(test_composition_DEPENDENCIES) + @rm -f test-composition$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_composition_OBJECTS) $(test_composition_LDADD) $(LIBS) +unictype/test-ctype_alnum.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_alnum$(EXEEXT): $(test_ctype_alnum_OBJECTS) $(test_ctype_alnum_DEPENDENCIES) + @rm -f test-ctype_alnum$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_alnum_OBJECTS) $(test_ctype_alnum_LDADD) $(LIBS) +unictype/test-ctype_alpha.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_alpha$(EXEEXT): $(test_ctype_alpha_OBJECTS) $(test_ctype_alpha_DEPENDENCIES) + @rm -f test-ctype_alpha$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_alpha_OBJECTS) $(test_ctype_alpha_LDADD) $(LIBS) +unictype/test-ctype_blank.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_blank$(EXEEXT): $(test_ctype_blank_OBJECTS) $(test_ctype_blank_DEPENDENCIES) + @rm -f test-ctype_blank$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_blank_OBJECTS) $(test_ctype_blank_LDADD) $(LIBS) +unictype/test-ctype_cntrl.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_cntrl$(EXEEXT): $(test_ctype_cntrl_OBJECTS) $(test_ctype_cntrl_DEPENDENCIES) + @rm -f test-ctype_cntrl$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_cntrl_OBJECTS) $(test_ctype_cntrl_LDADD) $(LIBS) +unictype/test-ctype_digit.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_digit$(EXEEXT): $(test_ctype_digit_OBJECTS) $(test_ctype_digit_DEPENDENCIES) + @rm -f test-ctype_digit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_digit_OBJECTS) $(test_ctype_digit_LDADD) $(LIBS) +unictype/test-ctype_graph.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_graph$(EXEEXT): $(test_ctype_graph_OBJECTS) $(test_ctype_graph_DEPENDENCIES) + @rm -f test-ctype_graph$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_graph_OBJECTS) $(test_ctype_graph_LDADD) $(LIBS) +unictype/test-ctype_lower.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_lower$(EXEEXT): $(test_ctype_lower_OBJECTS) $(test_ctype_lower_DEPENDENCIES) + @rm -f test-ctype_lower$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_lower_OBJECTS) $(test_ctype_lower_LDADD) $(LIBS) +unictype/test-ctype_print.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_print$(EXEEXT): $(test_ctype_print_OBJECTS) $(test_ctype_print_DEPENDENCIES) + @rm -f test-ctype_print$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_print_OBJECTS) $(test_ctype_print_LDADD) $(LIBS) +unictype/test-ctype_punct.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_punct$(EXEEXT): $(test_ctype_punct_OBJECTS) $(test_ctype_punct_DEPENDENCIES) + @rm -f test-ctype_punct$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_punct_OBJECTS) $(test_ctype_punct_LDADD) $(LIBS) +unictype/test-ctype_space.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_space$(EXEEXT): $(test_ctype_space_OBJECTS) $(test_ctype_space_DEPENDENCIES) + @rm -f test-ctype_space$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_space_OBJECTS) $(test_ctype_space_LDADD) $(LIBS) +unictype/test-ctype_upper.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_upper$(EXEEXT): $(test_ctype_upper_OBJECTS) $(test_ctype_upper_DEPENDENCIES) + @rm -f test-ctype_upper$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_upper_OBJECTS) $(test_ctype_upper_LDADD) $(LIBS) +unictype/test-ctype_xdigit.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-ctype_xdigit$(EXEEXT): $(test_ctype_xdigit_OBJECTS) $(test_ctype_xdigit_DEPENDENCIES) + @rm -f test-ctype_xdigit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ctype_xdigit_OBJECTS) $(test_ctype_xdigit_LDADD) $(LIBS) +unictype/test-decdigit.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-decdigit$(EXEEXT): $(test_decdigit_OBJECTS) $(test_decdigit_DEPENDENCIES) + @rm -f test-decdigit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_decdigit_OBJECTS) $(test_decdigit_LDADD) $(LIBS) +uninorm/test-decomposing-form.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-decomposing-form$(EXEEXT): $(test_decomposing_form_OBJECTS) $(test_decomposing_form_DEPENDENCIES) + @rm -f test-decomposing-form$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_decomposing_form_OBJECTS) $(test_decomposing_form_LDADD) $(LIBS) +uninorm/test-decomposition.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-decomposition$(EXEEXT): $(test_decomposition_OBJECTS) $(test_decomposition_DEPENDENCIES) + @rm -f test-decomposition$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_decomposition_OBJECTS) $(test_decomposition_LDADD) $(LIBS) +unictype/test-digit.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-digit$(EXEEXT): $(test_digit_OBJECTS) $(test_digit_DEPENDENCIES) + @rm -f test-digit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_digit_OBJECTS) $(test_digit_LDADD) $(LIBS) +test-environ$(EXEEXT): $(test_environ_OBJECTS) $(test_environ_DEPENDENCIES) + @rm -f test-environ$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_environ_OBJECTS) $(test_environ_LDADD) $(LIBS) +test-errno$(EXEEXT): $(test_errno_OBJECTS) $(test_errno_DEPENDENCIES) + @rm -f test-errno$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_errno_OBJECTS) $(test_errno_LDADD) $(LIBS) +test-frexpl-nolibm$(EXEEXT): $(test_frexpl_nolibm_OBJECTS) $(test_frexpl_nolibm_DEPENDENCIES) + @rm -f test-frexpl-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_frexpl_nolibm_OBJECTS) $(test_frexpl_nolibm_LDADD) $(LIBS) +test-fseterr$(EXEEXT): $(test_fseterr_OBJECTS) $(test_fseterr_DEPENDENCIES) + @rm -f test-fseterr$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_fseterr_OBJECTS) $(test_fseterr_LDADD) $(LIBS) +test-iconv$(EXEEXT): $(test_iconv_OBJECTS) $(test_iconv_DEPENDENCIES) + @rm -f test-iconv$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_iconv_OBJECTS) $(test_iconv_LDADD) $(LIBS) +unicase/test-ignorable.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-ignorable$(EXEEXT): $(test_ignorable_OBJECTS) $(test_ignorable_DEPENDENCIES) + @rm -f test-ignorable$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ignorable_OBJECTS) $(test_ignorable_LDADD) $(LIBS) +test-isnand-nolibm$(EXEEXT): $(test_isnand_nolibm_OBJECTS) $(test_isnand_nolibm_DEPENDENCIES) + @rm -f test-isnand-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_isnand_nolibm_OBJECTS) $(test_isnand_nolibm_LDADD) $(LIBS) +test-isnanf-nolibm$(EXEEXT): $(test_isnanf_nolibm_OBJECTS) $(test_isnanf_nolibm_DEPENDENCIES) + @rm -f test-isnanf-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_isnanf_nolibm_OBJECTS) $(test_isnanf_nolibm_LDADD) $(LIBS) +test-isnanl-nolibm$(EXEEXT): $(test_isnanl_nolibm_OBJECTS) $(test_isnanl_nolibm_DEPENDENCIES) + @rm -f test-isnanl-nolibm$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_isnanl_nolibm_OBJECTS) $(test_isnanl_nolibm_LDADD) $(LIBS) +test-locale$(EXEEXT): $(test_locale_OBJECTS) $(test_locale_DEPENDENCIES) + @rm -f test-locale$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_locale_OBJECTS) $(test_locale_LDADD) $(LIBS) +unicase/test-locale-language.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-locale-language$(EXEEXT): $(test_locale_language_OBJECTS) $(test_locale_language_DEPENDENCIES) + @rm -f test-locale-language$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_locale_language_OBJECTS) $(test_locale_language_LDADD) $(LIBS) +test-localename$(EXEEXT): $(test_localename_OBJECTS) $(test_localename_DEPENDENCIES) + @rm -f test-localename$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_localename_OBJECTS) $(test_localename_LDADD) $(LIBS) +test-malloca$(EXEEXT): $(test_malloca_OBJECTS) $(test_malloca_DEPENDENCIES) + @rm -f test-malloca$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_malloca_OBJECTS) $(test_malloca_LDADD) $(LIBS) +test-math$(EXEEXT): $(test_math_OBJECTS) $(test_math_DEPENDENCIES) + @rm -f test-math$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_math_OBJECTS) $(test_math_LDADD) $(LIBS) +test-mbrtowc$(EXEEXT): $(test_mbrtowc_OBJECTS) $(test_mbrtowc_DEPENDENCIES) + @rm -f test-mbrtowc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbrtowc_OBJECTS) $(test_mbrtowc_LDADD) $(LIBS) +test-mbsinit$(EXEEXT): $(test_mbsinit_OBJECTS) $(test_mbsinit_DEPENDENCIES) + @rm -f test-mbsinit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mbsinit_OBJECTS) $(test_mbsinit_LDADD) $(LIBS) +test-memchr$(EXEEXT): $(test_memchr_OBJECTS) $(test_memchr_DEPENDENCIES) + @rm -f test-memchr$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_memchr_OBJECTS) $(test_memchr_LDADD) $(LIBS) +unictype/test-mirror.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-mirror$(EXEEXT): $(test_mirror_OBJECTS) $(test_mirror_DEPENDENCIES) + @rm -f test-mirror$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_mirror_OBJECTS) $(test_mirror_LDADD) $(LIBS) +uninorm/test-nfc.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u8-nfc.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u16-nfc.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u32-nfc.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-nfc$(EXEEXT): $(test_nfc_OBJECTS) $(test_nfc_DEPENDENCIES) + @rm -f test-nfc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_nfc_OBJECTS) $(test_nfc_LDADD) $(LIBS) +uninorm/test-nfd.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u8-nfd.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u16-nfd.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u32-nfd.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-nfd$(EXEEXT): $(test_nfd_OBJECTS) $(test_nfd_DEPENDENCIES) + @rm -f test-nfd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_nfd_OBJECTS) $(test_nfd_LDADD) $(LIBS) +uninorm/test-nfkc.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u8-nfkc.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u16-nfkc.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u32-nfkc.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-nfkc$(EXEEXT): $(test_nfkc_OBJECTS) $(test_nfkc_DEPENDENCIES) + @rm -f test-nfkc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_nfkc_OBJECTS) $(test_nfkc_LDADD) $(LIBS) +uninorm/test-nfkd.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u8-nfkd.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u16-nfkd.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u32-nfkd.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-nfkd$(EXEEXT): $(test_nfkd_OBJECTS) $(test_nfkd_DEPENDENCIES) + @rm -f test-nfkd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_nfkd_OBJECTS) $(test_nfkd_LDADD) $(LIBS) +unictype/test-numeric.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-numeric$(EXEEXT): $(test_numeric_OBJECTS) $(test_numeric_DEPENDENCIES) + @rm -f test-numeric$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_numeric_OBJECTS) $(test_numeric_LDADD) $(LIBS) +unictype/test-pr_alphabetic.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_alphabetic$(EXEEXT): $(test_pr_alphabetic_OBJECTS) $(test_pr_alphabetic_DEPENDENCIES) + @rm -f test-pr_alphabetic$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_alphabetic_OBJECTS) $(test_pr_alphabetic_LDADD) $(LIBS) +unictype/test-pr_ascii_hex_digit.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_ascii_hex_digit$(EXEEXT): $(test_pr_ascii_hex_digit_OBJECTS) $(test_pr_ascii_hex_digit_DEPENDENCIES) + @rm -f test-pr_ascii_hex_digit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_ascii_hex_digit_OBJECTS) $(test_pr_ascii_hex_digit_LDADD) $(LIBS) +unictype/test-pr_bidi_arabic_digit.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_arabic_digit$(EXEEXT): $(test_pr_bidi_arabic_digit_OBJECTS) $(test_pr_bidi_arabic_digit_DEPENDENCIES) + @rm -f test-pr_bidi_arabic_digit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_arabic_digit_OBJECTS) $(test_pr_bidi_arabic_digit_LDADD) $(LIBS) +unictype/test-pr_bidi_arabic_right_to_left.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_arabic_right_to_left$(EXEEXT): $(test_pr_bidi_arabic_right_to_left_OBJECTS) $(test_pr_bidi_arabic_right_to_left_DEPENDENCIES) + @rm -f test-pr_bidi_arabic_right_to_left$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_arabic_right_to_left_OBJECTS) $(test_pr_bidi_arabic_right_to_left_LDADD) $(LIBS) +unictype/test-pr_bidi_block_separator.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_block_separator$(EXEEXT): $(test_pr_bidi_block_separator_OBJECTS) $(test_pr_bidi_block_separator_DEPENDENCIES) + @rm -f test-pr_bidi_block_separator$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_block_separator_OBJECTS) $(test_pr_bidi_block_separator_LDADD) $(LIBS) +unictype/test-pr_bidi_boundary_neutral.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_boundary_neutral$(EXEEXT): $(test_pr_bidi_boundary_neutral_OBJECTS) $(test_pr_bidi_boundary_neutral_DEPENDENCIES) + @rm -f test-pr_bidi_boundary_neutral$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_boundary_neutral_OBJECTS) $(test_pr_bidi_boundary_neutral_LDADD) $(LIBS) +unictype/test-pr_bidi_common_separator.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_common_separator$(EXEEXT): $(test_pr_bidi_common_separator_OBJECTS) $(test_pr_bidi_common_separator_DEPENDENCIES) + @rm -f test-pr_bidi_common_separator$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_common_separator_OBJECTS) $(test_pr_bidi_common_separator_LDADD) $(LIBS) +unictype/test-pr_bidi_control.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_control$(EXEEXT): $(test_pr_bidi_control_OBJECTS) $(test_pr_bidi_control_DEPENDENCIES) + @rm -f test-pr_bidi_control$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_control_OBJECTS) $(test_pr_bidi_control_LDADD) $(LIBS) +unictype/test-pr_bidi_embedding_or_override.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_embedding_or_override$(EXEEXT): $(test_pr_bidi_embedding_or_override_OBJECTS) $(test_pr_bidi_embedding_or_override_DEPENDENCIES) + @rm -f test-pr_bidi_embedding_or_override$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_embedding_or_override_OBJECTS) $(test_pr_bidi_embedding_or_override_LDADD) $(LIBS) +unictype/test-pr_bidi_eur_num_separator.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_eur_num_separator$(EXEEXT): $(test_pr_bidi_eur_num_separator_OBJECTS) $(test_pr_bidi_eur_num_separator_DEPENDENCIES) + @rm -f test-pr_bidi_eur_num_separator$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_eur_num_separator_OBJECTS) $(test_pr_bidi_eur_num_separator_LDADD) $(LIBS) +unictype/test-pr_bidi_eur_num_terminator.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_eur_num_terminator$(EXEEXT): $(test_pr_bidi_eur_num_terminator_OBJECTS) $(test_pr_bidi_eur_num_terminator_DEPENDENCIES) + @rm -f test-pr_bidi_eur_num_terminator$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_eur_num_terminator_OBJECTS) $(test_pr_bidi_eur_num_terminator_LDADD) $(LIBS) +unictype/test-pr_bidi_european_digit.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_european_digit$(EXEEXT): $(test_pr_bidi_european_digit_OBJECTS) $(test_pr_bidi_european_digit_DEPENDENCIES) + @rm -f test-pr_bidi_european_digit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_european_digit_OBJECTS) $(test_pr_bidi_european_digit_LDADD) $(LIBS) +unictype/test-pr_bidi_hebrew_right_to_left.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_hebrew_right_to_left$(EXEEXT): $(test_pr_bidi_hebrew_right_to_left_OBJECTS) $(test_pr_bidi_hebrew_right_to_left_DEPENDENCIES) + @rm -f test-pr_bidi_hebrew_right_to_left$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_hebrew_right_to_left_OBJECTS) $(test_pr_bidi_hebrew_right_to_left_LDADD) $(LIBS) +unictype/test-pr_bidi_left_to_right.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_left_to_right$(EXEEXT): $(test_pr_bidi_left_to_right_OBJECTS) $(test_pr_bidi_left_to_right_DEPENDENCIES) + @rm -f test-pr_bidi_left_to_right$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_left_to_right_OBJECTS) $(test_pr_bidi_left_to_right_LDADD) $(LIBS) +unictype/test-pr_bidi_non_spacing_mark.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_non_spacing_mark$(EXEEXT): $(test_pr_bidi_non_spacing_mark_OBJECTS) $(test_pr_bidi_non_spacing_mark_DEPENDENCIES) + @rm -f test-pr_bidi_non_spacing_mark$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_non_spacing_mark_OBJECTS) $(test_pr_bidi_non_spacing_mark_LDADD) $(LIBS) +unictype/test-pr_bidi_other_neutral.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_other_neutral$(EXEEXT): $(test_pr_bidi_other_neutral_OBJECTS) $(test_pr_bidi_other_neutral_DEPENDENCIES) + @rm -f test-pr_bidi_other_neutral$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_other_neutral_OBJECTS) $(test_pr_bidi_other_neutral_LDADD) $(LIBS) +unictype/test-pr_bidi_pdf.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_pdf$(EXEEXT): $(test_pr_bidi_pdf_OBJECTS) $(test_pr_bidi_pdf_DEPENDENCIES) + @rm -f test-pr_bidi_pdf$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_pdf_OBJECTS) $(test_pr_bidi_pdf_LDADD) $(LIBS) +unictype/test-pr_bidi_segment_separator.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_segment_separator$(EXEEXT): $(test_pr_bidi_segment_separator_OBJECTS) $(test_pr_bidi_segment_separator_DEPENDENCIES) + @rm -f test-pr_bidi_segment_separator$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_segment_separator_OBJECTS) $(test_pr_bidi_segment_separator_LDADD) $(LIBS) +unictype/test-pr_bidi_whitespace.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_bidi_whitespace$(EXEEXT): $(test_pr_bidi_whitespace_OBJECTS) $(test_pr_bidi_whitespace_DEPENDENCIES) + @rm -f test-pr_bidi_whitespace$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_bidi_whitespace_OBJECTS) $(test_pr_bidi_whitespace_LDADD) $(LIBS) +unictype/test-pr_byname.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_byname$(EXEEXT): $(test_pr_byname_OBJECTS) $(test_pr_byname_DEPENDENCIES) + @rm -f test-pr_byname$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_byname_OBJECTS) $(test_pr_byname_LDADD) $(LIBS) +unictype/test-pr_combining.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_combining$(EXEEXT): $(test_pr_combining_OBJECTS) $(test_pr_combining_DEPENDENCIES) + @rm -f test-pr_combining$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_combining_OBJECTS) $(test_pr_combining_LDADD) $(LIBS) +unictype/test-pr_composite.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_composite$(EXEEXT): $(test_pr_composite_OBJECTS) $(test_pr_composite_DEPENDENCIES) + @rm -f test-pr_composite$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_composite_OBJECTS) $(test_pr_composite_LDADD) $(LIBS) +unictype/test-pr_currency_symbol.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_currency_symbol$(EXEEXT): $(test_pr_currency_symbol_OBJECTS) $(test_pr_currency_symbol_DEPENDENCIES) + @rm -f test-pr_currency_symbol$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_currency_symbol_OBJECTS) $(test_pr_currency_symbol_LDADD) $(LIBS) +unictype/test-pr_dash.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_dash$(EXEEXT): $(test_pr_dash_OBJECTS) $(test_pr_dash_DEPENDENCIES) + @rm -f test-pr_dash$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_dash_OBJECTS) $(test_pr_dash_LDADD) $(LIBS) +unictype/test-pr_decimal_digit.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_decimal_digit$(EXEEXT): $(test_pr_decimal_digit_OBJECTS) $(test_pr_decimal_digit_DEPENDENCIES) + @rm -f test-pr_decimal_digit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_decimal_digit_OBJECTS) $(test_pr_decimal_digit_LDADD) $(LIBS) +unictype/test-pr_default_ignorable_code_point.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_default_ignorable_code_point$(EXEEXT): $(test_pr_default_ignorable_code_point_OBJECTS) $(test_pr_default_ignorable_code_point_DEPENDENCIES) + @rm -f test-pr_default_ignorable_code_point$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_default_ignorable_code_point_OBJECTS) $(test_pr_default_ignorable_code_point_LDADD) $(LIBS) +unictype/test-pr_deprecated.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_deprecated$(EXEEXT): $(test_pr_deprecated_OBJECTS) $(test_pr_deprecated_DEPENDENCIES) + @rm -f test-pr_deprecated$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_deprecated_OBJECTS) $(test_pr_deprecated_LDADD) $(LIBS) +unictype/test-pr_diacritic.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_diacritic$(EXEEXT): $(test_pr_diacritic_OBJECTS) $(test_pr_diacritic_DEPENDENCIES) + @rm -f test-pr_diacritic$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_diacritic_OBJECTS) $(test_pr_diacritic_LDADD) $(LIBS) +unictype/test-pr_extender.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_extender$(EXEEXT): $(test_pr_extender_OBJECTS) $(test_pr_extender_DEPENDENCIES) + @rm -f test-pr_extender$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_extender_OBJECTS) $(test_pr_extender_LDADD) $(LIBS) +unictype/test-pr_format_control.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_format_control$(EXEEXT): $(test_pr_format_control_OBJECTS) $(test_pr_format_control_DEPENDENCIES) + @rm -f test-pr_format_control$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_format_control_OBJECTS) $(test_pr_format_control_LDADD) $(LIBS) +unictype/test-pr_grapheme_base.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_grapheme_base$(EXEEXT): $(test_pr_grapheme_base_OBJECTS) $(test_pr_grapheme_base_DEPENDENCIES) + @rm -f test-pr_grapheme_base$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_grapheme_base_OBJECTS) $(test_pr_grapheme_base_LDADD) $(LIBS) +unictype/test-pr_grapheme_extend.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_grapheme_extend$(EXEEXT): $(test_pr_grapheme_extend_OBJECTS) $(test_pr_grapheme_extend_DEPENDENCIES) + @rm -f test-pr_grapheme_extend$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_grapheme_extend_OBJECTS) $(test_pr_grapheme_extend_LDADD) $(LIBS) +unictype/test-pr_grapheme_link.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_grapheme_link$(EXEEXT): $(test_pr_grapheme_link_OBJECTS) $(test_pr_grapheme_link_DEPENDENCIES) + @rm -f test-pr_grapheme_link$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_grapheme_link_OBJECTS) $(test_pr_grapheme_link_LDADD) $(LIBS) +unictype/test-pr_hex_digit.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_hex_digit$(EXEEXT): $(test_pr_hex_digit_OBJECTS) $(test_pr_hex_digit_DEPENDENCIES) + @rm -f test-pr_hex_digit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_hex_digit_OBJECTS) $(test_pr_hex_digit_LDADD) $(LIBS) +unictype/test-pr_hyphen.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_hyphen$(EXEEXT): $(test_pr_hyphen_OBJECTS) $(test_pr_hyphen_DEPENDENCIES) + @rm -f test-pr_hyphen$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_hyphen_OBJECTS) $(test_pr_hyphen_LDADD) $(LIBS) +unictype/test-pr_id_continue.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_id_continue$(EXEEXT): $(test_pr_id_continue_OBJECTS) $(test_pr_id_continue_DEPENDENCIES) + @rm -f test-pr_id_continue$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_id_continue_OBJECTS) $(test_pr_id_continue_LDADD) $(LIBS) +unictype/test-pr_id_start.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_id_start$(EXEEXT): $(test_pr_id_start_OBJECTS) $(test_pr_id_start_DEPENDENCIES) + @rm -f test-pr_id_start$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_id_start_OBJECTS) $(test_pr_id_start_LDADD) $(LIBS) +unictype/test-pr_ideographic.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_ideographic$(EXEEXT): $(test_pr_ideographic_OBJECTS) $(test_pr_ideographic_DEPENDENCIES) + @rm -f test-pr_ideographic$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_ideographic_OBJECTS) $(test_pr_ideographic_LDADD) $(LIBS) +unictype/test-pr_ids_binary_operator.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_ids_binary_operator$(EXEEXT): $(test_pr_ids_binary_operator_OBJECTS) $(test_pr_ids_binary_operator_DEPENDENCIES) + @rm -f test-pr_ids_binary_operator$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_ids_binary_operator_OBJECTS) $(test_pr_ids_binary_operator_LDADD) $(LIBS) +unictype/test-pr_ids_trinary_operator.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_ids_trinary_operator$(EXEEXT): $(test_pr_ids_trinary_operator_OBJECTS) $(test_pr_ids_trinary_operator_DEPENDENCIES) + @rm -f test-pr_ids_trinary_operator$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_ids_trinary_operator_OBJECTS) $(test_pr_ids_trinary_operator_LDADD) $(LIBS) +unictype/test-pr_ignorable_control.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_ignorable_control$(EXEEXT): $(test_pr_ignorable_control_OBJECTS) $(test_pr_ignorable_control_DEPENDENCIES) + @rm -f test-pr_ignorable_control$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_ignorable_control_OBJECTS) $(test_pr_ignorable_control_LDADD) $(LIBS) +unictype/test-pr_iso_control.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_iso_control$(EXEEXT): $(test_pr_iso_control_OBJECTS) $(test_pr_iso_control_DEPENDENCIES) + @rm -f test-pr_iso_control$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_iso_control_OBJECTS) $(test_pr_iso_control_LDADD) $(LIBS) +unictype/test-pr_join_control.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_join_control$(EXEEXT): $(test_pr_join_control_OBJECTS) $(test_pr_join_control_DEPENDENCIES) + @rm -f test-pr_join_control$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_join_control_OBJECTS) $(test_pr_join_control_LDADD) $(LIBS) +unictype/test-pr_left_of_pair.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_left_of_pair$(EXEEXT): $(test_pr_left_of_pair_OBJECTS) $(test_pr_left_of_pair_DEPENDENCIES) + @rm -f test-pr_left_of_pair$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_left_of_pair_OBJECTS) $(test_pr_left_of_pair_LDADD) $(LIBS) +unictype/test-pr_line_separator.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_line_separator$(EXEEXT): $(test_pr_line_separator_OBJECTS) $(test_pr_line_separator_DEPENDENCIES) + @rm -f test-pr_line_separator$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_line_separator_OBJECTS) $(test_pr_line_separator_LDADD) $(LIBS) +unictype/test-pr_logical_order_exception.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_logical_order_exception$(EXEEXT): $(test_pr_logical_order_exception_OBJECTS) $(test_pr_logical_order_exception_DEPENDENCIES) + @rm -f test-pr_logical_order_exception$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_logical_order_exception_OBJECTS) $(test_pr_logical_order_exception_LDADD) $(LIBS) +unictype/test-pr_lowercase.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_lowercase$(EXEEXT): $(test_pr_lowercase_OBJECTS) $(test_pr_lowercase_DEPENDENCIES) + @rm -f test-pr_lowercase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_lowercase_OBJECTS) $(test_pr_lowercase_LDADD) $(LIBS) +unictype/test-pr_math.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_math$(EXEEXT): $(test_pr_math_OBJECTS) $(test_pr_math_DEPENDENCIES) + @rm -f test-pr_math$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_math_OBJECTS) $(test_pr_math_LDADD) $(LIBS) +unictype/test-pr_non_break.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_non_break$(EXEEXT): $(test_pr_non_break_OBJECTS) $(test_pr_non_break_DEPENDENCIES) + @rm -f test-pr_non_break$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_non_break_OBJECTS) $(test_pr_non_break_LDADD) $(LIBS) +unictype/test-pr_not_a_character.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_not_a_character$(EXEEXT): $(test_pr_not_a_character_OBJECTS) $(test_pr_not_a_character_DEPENDENCIES) + @rm -f test-pr_not_a_character$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_not_a_character_OBJECTS) $(test_pr_not_a_character_LDADD) $(LIBS) +unictype/test-pr_numeric.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_numeric$(EXEEXT): $(test_pr_numeric_OBJECTS) $(test_pr_numeric_DEPENDENCIES) + @rm -f test-pr_numeric$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_numeric_OBJECTS) $(test_pr_numeric_LDADD) $(LIBS) +unictype/test-pr_other_alphabetic.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_other_alphabetic$(EXEEXT): $(test_pr_other_alphabetic_OBJECTS) $(test_pr_other_alphabetic_DEPENDENCIES) + @rm -f test-pr_other_alphabetic$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_other_alphabetic_OBJECTS) $(test_pr_other_alphabetic_LDADD) $(LIBS) +unictype/test-pr_other_default_ignorable_code_point.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_other_default_ignorable_code_point$(EXEEXT): $(test_pr_other_default_ignorable_code_point_OBJECTS) $(test_pr_other_default_ignorable_code_point_DEPENDENCIES) + @rm -f test-pr_other_default_ignorable_code_point$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_other_default_ignorable_code_point_OBJECTS) $(test_pr_other_default_ignorable_code_point_LDADD) $(LIBS) +unictype/test-pr_other_grapheme_extend.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_other_grapheme_extend$(EXEEXT): $(test_pr_other_grapheme_extend_OBJECTS) $(test_pr_other_grapheme_extend_DEPENDENCIES) + @rm -f test-pr_other_grapheme_extend$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_other_grapheme_extend_OBJECTS) $(test_pr_other_grapheme_extend_LDADD) $(LIBS) +unictype/test-pr_other_id_continue.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_other_id_continue$(EXEEXT): $(test_pr_other_id_continue_OBJECTS) $(test_pr_other_id_continue_DEPENDENCIES) + @rm -f test-pr_other_id_continue$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_other_id_continue_OBJECTS) $(test_pr_other_id_continue_LDADD) $(LIBS) +unictype/test-pr_other_id_start.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_other_id_start$(EXEEXT): $(test_pr_other_id_start_OBJECTS) $(test_pr_other_id_start_DEPENDENCIES) + @rm -f test-pr_other_id_start$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_other_id_start_OBJECTS) $(test_pr_other_id_start_LDADD) $(LIBS) +unictype/test-pr_other_lowercase.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_other_lowercase$(EXEEXT): $(test_pr_other_lowercase_OBJECTS) $(test_pr_other_lowercase_DEPENDENCIES) + @rm -f test-pr_other_lowercase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_other_lowercase_OBJECTS) $(test_pr_other_lowercase_LDADD) $(LIBS) +unictype/test-pr_other_math.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_other_math$(EXEEXT): $(test_pr_other_math_OBJECTS) $(test_pr_other_math_DEPENDENCIES) + @rm -f test-pr_other_math$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_other_math_OBJECTS) $(test_pr_other_math_LDADD) $(LIBS) +unictype/test-pr_other_uppercase.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_other_uppercase$(EXEEXT): $(test_pr_other_uppercase_OBJECTS) $(test_pr_other_uppercase_DEPENDENCIES) + @rm -f test-pr_other_uppercase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_other_uppercase_OBJECTS) $(test_pr_other_uppercase_LDADD) $(LIBS) +unictype/test-pr_paired_punctuation.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_paired_punctuation$(EXEEXT): $(test_pr_paired_punctuation_OBJECTS) $(test_pr_paired_punctuation_DEPENDENCIES) + @rm -f test-pr_paired_punctuation$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_paired_punctuation_OBJECTS) $(test_pr_paired_punctuation_LDADD) $(LIBS) +unictype/test-pr_paragraph_separator.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_paragraph_separator$(EXEEXT): $(test_pr_paragraph_separator_OBJECTS) $(test_pr_paragraph_separator_DEPENDENCIES) + @rm -f test-pr_paragraph_separator$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_paragraph_separator_OBJECTS) $(test_pr_paragraph_separator_LDADD) $(LIBS) +unictype/test-pr_pattern_syntax.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_pattern_syntax$(EXEEXT): $(test_pr_pattern_syntax_OBJECTS) $(test_pr_pattern_syntax_DEPENDENCIES) + @rm -f test-pr_pattern_syntax$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_pattern_syntax_OBJECTS) $(test_pr_pattern_syntax_LDADD) $(LIBS) +unictype/test-pr_pattern_white_space.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_pattern_white_space$(EXEEXT): $(test_pr_pattern_white_space_OBJECTS) $(test_pr_pattern_white_space_DEPENDENCIES) + @rm -f test-pr_pattern_white_space$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_pattern_white_space_OBJECTS) $(test_pr_pattern_white_space_LDADD) $(LIBS) +unictype/test-pr_private_use.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_private_use$(EXEEXT): $(test_pr_private_use_OBJECTS) $(test_pr_private_use_DEPENDENCIES) + @rm -f test-pr_private_use$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_private_use_OBJECTS) $(test_pr_private_use_LDADD) $(LIBS) +unictype/test-pr_punctuation.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_punctuation$(EXEEXT): $(test_pr_punctuation_OBJECTS) $(test_pr_punctuation_DEPENDENCIES) + @rm -f test-pr_punctuation$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_punctuation_OBJECTS) $(test_pr_punctuation_LDADD) $(LIBS) +unictype/test-pr_quotation_mark.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_quotation_mark$(EXEEXT): $(test_pr_quotation_mark_OBJECTS) $(test_pr_quotation_mark_DEPENDENCIES) + @rm -f test-pr_quotation_mark$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_quotation_mark_OBJECTS) $(test_pr_quotation_mark_LDADD) $(LIBS) +unictype/test-pr_radical.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_radical$(EXEEXT): $(test_pr_radical_OBJECTS) $(test_pr_radical_DEPENDENCIES) + @rm -f test-pr_radical$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_radical_OBJECTS) $(test_pr_radical_LDADD) $(LIBS) +unictype/test-pr_sentence_terminal.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_sentence_terminal$(EXEEXT): $(test_pr_sentence_terminal_OBJECTS) $(test_pr_sentence_terminal_DEPENDENCIES) + @rm -f test-pr_sentence_terminal$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_sentence_terminal_OBJECTS) $(test_pr_sentence_terminal_LDADD) $(LIBS) +unictype/test-pr_soft_dotted.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_soft_dotted$(EXEEXT): $(test_pr_soft_dotted_OBJECTS) $(test_pr_soft_dotted_DEPENDENCIES) + @rm -f test-pr_soft_dotted$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_soft_dotted_OBJECTS) $(test_pr_soft_dotted_LDADD) $(LIBS) +unictype/test-pr_space.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_space$(EXEEXT): $(test_pr_space_OBJECTS) $(test_pr_space_DEPENDENCIES) + @rm -f test-pr_space$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_space_OBJECTS) $(test_pr_space_LDADD) $(LIBS) +unictype/test-pr_terminal_punctuation.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_terminal_punctuation$(EXEEXT): $(test_pr_terminal_punctuation_OBJECTS) $(test_pr_terminal_punctuation_DEPENDENCIES) + @rm -f test-pr_terminal_punctuation$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_terminal_punctuation_OBJECTS) $(test_pr_terminal_punctuation_LDADD) $(LIBS) +unictype/test-pr_test.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_test$(EXEEXT): $(test_pr_test_OBJECTS) $(test_pr_test_DEPENDENCIES) + @rm -f test-pr_test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_test_OBJECTS) $(test_pr_test_LDADD) $(LIBS) +unictype/test-pr_titlecase.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_titlecase$(EXEEXT): $(test_pr_titlecase_OBJECTS) $(test_pr_titlecase_DEPENDENCIES) + @rm -f test-pr_titlecase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_titlecase_OBJECTS) $(test_pr_titlecase_LDADD) $(LIBS) +unictype/test-pr_unassigned_code_value.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_unassigned_code_value$(EXEEXT): $(test_pr_unassigned_code_value_OBJECTS) $(test_pr_unassigned_code_value_DEPENDENCIES) + @rm -f test-pr_unassigned_code_value$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_unassigned_code_value_OBJECTS) $(test_pr_unassigned_code_value_LDADD) $(LIBS) +unictype/test-pr_unified_ideograph.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_unified_ideograph$(EXEEXT): $(test_pr_unified_ideograph_OBJECTS) $(test_pr_unified_ideograph_DEPENDENCIES) + @rm -f test-pr_unified_ideograph$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_unified_ideograph_OBJECTS) $(test_pr_unified_ideograph_LDADD) $(LIBS) +unictype/test-pr_uppercase.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_uppercase$(EXEEXT): $(test_pr_uppercase_OBJECTS) $(test_pr_uppercase_DEPENDENCIES) + @rm -f test-pr_uppercase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_uppercase_OBJECTS) $(test_pr_uppercase_LDADD) $(LIBS) +unictype/test-pr_variation_selector.$(OBJEXT): \ + unictype/$(am__dirstamp) unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_variation_selector$(EXEEXT): $(test_pr_variation_selector_OBJECTS) $(test_pr_variation_selector_DEPENDENCIES) + @rm -f test-pr_variation_selector$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_variation_selector_OBJECTS) $(test_pr_variation_selector_LDADD) $(LIBS) +unictype/test-pr_white_space.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_white_space$(EXEEXT): $(test_pr_white_space_OBJECTS) $(test_pr_white_space_DEPENDENCIES) + @rm -f test-pr_white_space$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_white_space_OBJECTS) $(test_pr_white_space_LDADD) $(LIBS) +unictype/test-pr_xid_continue.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_xid_continue$(EXEEXT): $(test_pr_xid_continue_OBJECTS) $(test_pr_xid_continue_DEPENDENCIES) + @rm -f test-pr_xid_continue$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_xid_continue_OBJECTS) $(test_pr_xid_continue_LDADD) $(LIBS) +unictype/test-pr_xid_start.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_xid_start$(EXEEXT): $(test_pr_xid_start_OBJECTS) $(test_pr_xid_start_DEPENDENCIES) + @rm -f test-pr_xid_start$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_xid_start_OBJECTS) $(test_pr_xid_start_LDADD) $(LIBS) +unictype/test-pr_zero_width.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-pr_zero_width$(EXEEXT): $(test_pr_zero_width_OBJECTS) $(test_pr_zero_width_DEPENDENCIES) + @rm -f test-pr_zero_width$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_pr_zero_width_OBJECTS) $(test_pr_zero_width_LDADD) $(LIBS) +test-printf-frexp$(EXEEXT): $(test_printf_frexp_OBJECTS) $(test_printf_frexp_DEPENDENCIES) + @rm -f test-printf-frexp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_printf_frexp_OBJECTS) $(test_printf_frexp_LDADD) $(LIBS) +test-printf-frexpl$(EXEEXT): $(test_printf_frexpl_OBJECTS) $(test_printf_frexpl_DEPENDENCIES) + @rm -f test-printf-frexpl$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_printf_frexpl_OBJECTS) $(test_printf_frexpl_LDADD) $(LIBS) +unictype/test-scripts.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-scripts$(EXEEXT): $(test_scripts_OBJECTS) $(test_scripts_DEPENDENCIES) + @rm -f test-scripts$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_scripts_OBJECTS) $(test_scripts_LDADD) $(LIBS) +test-signbit$(EXEEXT): $(test_signbit_OBJECTS) $(test_signbit_DEPENDENCIES) + @rm -f test-signbit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_signbit_OBJECTS) $(test_signbit_LDADD) $(LIBS) +test-stdbool$(EXEEXT): $(test_stdbool_OBJECTS) $(test_stdbool_DEPENDENCIES) + @rm -f test-stdbool$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdbool_OBJECTS) $(test_stdbool_LDADD) $(LIBS) +test-stdint$(EXEEXT): $(test_stdint_OBJECTS) $(test_stdint_DEPENDENCIES) + @rm -f test-stdint$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdint_OBJECTS) $(test_stdint_LDADD) $(LIBS) +test-stdlib$(EXEEXT): $(test_stdlib_OBJECTS) $(test_stdlib_DEPENDENCIES) + @rm -f test-stdlib$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stdlib_OBJECTS) $(test_stdlib_LDADD) $(LIBS) +test-strerror$(EXEEXT): $(test_strerror_OBJECTS) $(test_strerror_DEPENDENCIES) + @rm -f test-strerror$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_strerror_OBJECTS) $(test_strerror_LDADD) $(LIBS) +test-striconveh$(EXEEXT): $(test_striconveh_OBJECTS) $(test_striconveh_DEPENDENCIES) + @rm -f test-striconveh$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_striconveh_OBJECTS) $(test_striconveh_LDADD) $(LIBS) +test-striconveha$(EXEEXT): $(test_striconveha_OBJECTS) $(test_striconveha_DEPENDENCIES) + @rm -f test-striconveha$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_striconveha_OBJECTS) $(test_striconveha_LDADD) $(LIBS) +test-string$(EXEEXT): $(test_string_OBJECTS) $(test_string_DEPENDENCIES) + @rm -f test-string$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_string_OBJECTS) $(test_string_LDADD) $(LIBS) +unictype/test-sy_c_ident.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-sy_c_ident$(EXEEXT): $(test_sy_c_ident_OBJECTS) $(test_sy_c_ident_DEPENDENCIES) + @rm -f test-sy_c_ident$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sy_c_ident_OBJECTS) $(test_sy_c_ident_LDADD) $(LIBS) +unictype/test-sy_c_whitespace.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-sy_c_whitespace$(EXEEXT): $(test_sy_c_whitespace_OBJECTS) $(test_sy_c_whitespace_DEPENDENCIES) + @rm -f test-sy_c_whitespace$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sy_c_whitespace_OBJECTS) $(test_sy_c_whitespace_LDADD) $(LIBS) +unictype/test-sy_java_ident.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-sy_java_ident$(EXEEXT): $(test_sy_java_ident_OBJECTS) $(test_sy_java_ident_DEPENDENCIES) + @rm -f test-sy_java_ident$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sy_java_ident_OBJECTS) $(test_sy_java_ident_LDADD) $(LIBS) +unictype/test-sy_java_whitespace.$(OBJEXT): unictype/$(am__dirstamp) \ + unictype/$(DEPDIR)/$(am__dirstamp) +test-sy_java_whitespace$(EXEEXT): $(test_sy_java_whitespace_OBJECTS) $(test_sy_java_whitespace_DEPENDENCIES) + @rm -f test-sy_java_whitespace$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_sy_java_whitespace_OBJECTS) $(test_sy_java_whitespace_LDADD) $(LIBS) +unistdio/$(am__dirstamp): + @$(MKDIR_P) unistdio + @: > unistdio/$(am__dirstamp) +unistdio/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) unistdio/$(DEPDIR) + @: > unistdio/$(DEPDIR)/$(am__dirstamp) +unistdio/test-u16-asnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u16-asnprintf1$(EXEEXT): $(test_u16_asnprintf1_OBJECTS) $(test_u16_asnprintf1_DEPENDENCIES) + @rm -f test-u16-asnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_asnprintf1_OBJECTS) $(test_u16_asnprintf1_LDADD) $(LIBS) +unicase/test-u16-casecmp.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u16-casecmp$(EXEEXT): $(test_u16_casecmp_OBJECTS) $(test_u16_casecmp_DEPENDENCIES) + @rm -f test-u16-casecmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_casecmp_OBJECTS) $(test_u16_casecmp_LDADD) $(LIBS) +unicase/test-u16-casecoll.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u16-casecoll$(EXEEXT): $(test_u16_casecoll_OBJECTS) $(test_u16_casecoll_DEPENDENCIES) + @rm -f test-u16-casecoll$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_casecoll_OBJECTS) $(test_u16_casecoll_LDADD) $(LIBS) +unicase/test-u16-casefold.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u16-casefold$(EXEEXT): $(test_u16_casefold_OBJECTS) $(test_u16_casefold_DEPENDENCIES) + @rm -f test-u16-casefold$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_casefold_OBJECTS) $(test_u16_casefold_LDADD) $(LIBS) +uniconv/$(am__dirstamp): + @$(MKDIR_P) uniconv + @: > uniconv/$(am__dirstamp) +uniconv/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) uniconv/$(DEPDIR) + @: > uniconv/$(DEPDIR)/$(am__dirstamp) +uniconv/test-u16-conv-from-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u16-conv-from-enc$(EXEEXT): $(test_u16_conv_from_enc_OBJECTS) $(test_u16_conv_from_enc_DEPENDENCIES) + @rm -f test-u16-conv-from-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_conv_from_enc_OBJECTS) $(test_u16_conv_from_enc_LDADD) $(LIBS) +uniconv/test-u16-conv-to-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u16-conv-to-enc$(EXEEXT): $(test_u16_conv_to_enc_OBJECTS) $(test_u16_conv_to_enc_DEPENDENCIES) + @rm -f test-u16-conv-to-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_conv_to_enc_OBJECTS) $(test_u16_conv_to_enc_LDADD) $(LIBS) +unicase/test-u16-is-cased.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u16-is-cased$(EXEEXT): $(test_u16_is_cased_OBJECTS) $(test_u16_is_cased_DEPENDENCIES) + @rm -f test-u16-is-cased$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_is_cased_OBJECTS) $(test_u16_is_cased_LDADD) $(LIBS) +unicase/test-u16-is-casefolded.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u16-is-casefolded$(EXEEXT): $(test_u16_is_casefolded_OBJECTS) $(test_u16_is_casefolded_DEPENDENCIES) + @rm -f test-u16-is-casefolded$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_is_casefolded_OBJECTS) $(test_u16_is_casefolded_LDADD) $(LIBS) +unicase/test-u16-is-lowercase.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u16-is-lowercase$(EXEEXT): $(test_u16_is_lowercase_OBJECTS) $(test_u16_is_lowercase_DEPENDENCIES) + @rm -f test-u16-is-lowercase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_is_lowercase_OBJECTS) $(test_u16_is_lowercase_LDADD) $(LIBS) +unicase/test-u16-is-titlecase.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u16-is-titlecase$(EXEEXT): $(test_u16_is_titlecase_OBJECTS) $(test_u16_is_titlecase_DEPENDENCIES) + @rm -f test-u16-is-titlecase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_is_titlecase_OBJECTS) $(test_u16_is_titlecase_LDADD) $(LIBS) +unicase/test-u16-is-uppercase.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u16-is-uppercase$(EXEEXT): $(test_u16_is_uppercase_OBJECTS) $(test_u16_is_uppercase_DEPENDENCIES) + @rm -f test-u16-is-uppercase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_is_uppercase_OBJECTS) $(test_u16_is_uppercase_LDADD) $(LIBS) +uninorm/test-u16-normcmp.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-u16-normcmp$(EXEEXT): $(test_u16_normcmp_OBJECTS) $(test_u16_normcmp_DEPENDENCIES) + @rm -f test-u16-normcmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_normcmp_OBJECTS) $(test_u16_normcmp_LDADD) $(LIBS) +uninorm/test-u16-normcoll.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-u16-normcoll$(EXEEXT): $(test_u16_normcoll_OBJECTS) $(test_u16_normcoll_DEPENDENCIES) + @rm -f test-u16-normcoll$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_normcoll_OBJECTS) $(test_u16_normcoll_LDADD) $(LIBS) +unilbrk/$(am__dirstamp): + @$(MKDIR_P) unilbrk + @: > unilbrk/$(am__dirstamp) +unilbrk/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) unilbrk/$(DEPDIR) + @: > unilbrk/$(DEPDIR)/$(am__dirstamp) +unilbrk/test-u16-possible-linebreaks.$(OBJEXT): \ + unilbrk/$(am__dirstamp) unilbrk/$(DEPDIR)/$(am__dirstamp) +test-u16-possible-linebreaks$(EXEEXT): $(test_u16_possible_linebreaks_OBJECTS) $(test_u16_possible_linebreaks_DEPENDENCIES) + @rm -f test-u16-possible-linebreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_possible_linebreaks_OBJECTS) $(test_u16_possible_linebreaks_LDADD) $(LIBS) +uniconv/test-u16-strconv-from-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u16-strconv-from-enc$(EXEEXT): $(test_u16_strconv_from_enc_OBJECTS) $(test_u16_strconv_from_enc_DEPENDENCIES) + @rm -f test-u16-strconv-from-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_strconv_from_enc_OBJECTS) $(test_u16_strconv_from_enc_LDADD) $(LIBS) +uniconv/test-u16-strconv-to-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u16-strconv-to-enc$(EXEEXT): $(test_u16_strconv_to_enc_OBJECTS) $(test_u16_strconv_to_enc_DEPENDENCIES) + @rm -f test-u16-strconv-to-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_strconv_to_enc_OBJECTS) $(test_u16_strconv_to_enc_LDADD) $(LIBS) +uniwidth/$(am__dirstamp): + @$(MKDIR_P) uniwidth + @: > uniwidth/$(am__dirstamp) +uniwidth/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) uniwidth/$(DEPDIR) + @: > uniwidth/$(DEPDIR)/$(am__dirstamp) +uniwidth/test-u16-strwidth.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) +test-u16-strwidth$(EXEEXT): $(test_u16_strwidth_OBJECTS) $(test_u16_strwidth_DEPENDENCIES) + @rm -f test-u16-strwidth$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_strwidth_OBJECTS) $(test_u16_strwidth_LDADD) $(LIBS) +unicase/test-u16-tolower.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u16-tolower$(EXEEXT): $(test_u16_tolower_OBJECTS) $(test_u16_tolower_DEPENDENCIES) + @rm -f test-u16-tolower$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_tolower_OBJECTS) $(test_u16_tolower_LDADD) $(LIBS) +unicase/test-u16-totitle.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u16-totitle$(EXEEXT): $(test_u16_totitle_OBJECTS) $(test_u16_totitle_DEPENDENCIES) + @rm -f test-u16-totitle$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_totitle_OBJECTS) $(test_u16_totitle_LDADD) $(LIBS) +unicase/test-u16-toupper.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u16-toupper$(EXEEXT): $(test_u16_toupper_OBJECTS) $(test_u16_toupper_DEPENDENCIES) + @rm -f test-u16-toupper$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_toupper_OBJECTS) $(test_u16_toupper_LDADD) $(LIBS) +unistdio/test-u16-vasnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u16-vasnprintf1$(EXEEXT): $(test_u16_vasnprintf1_OBJECTS) $(test_u16_vasnprintf1_DEPENDENCIES) + @rm -f test-u16-vasnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_vasnprintf1_OBJECTS) $(test_u16_vasnprintf1_LDADD) $(LIBS) +unistdio/test-u16-vasnprintf2.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u16-vasnprintf2$(EXEEXT): $(test_u16_vasnprintf2_OBJECTS) $(test_u16_vasnprintf2_DEPENDENCIES) + @rm -f test-u16-vasnprintf2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_vasnprintf2_OBJECTS) $(test_u16_vasnprintf2_LDADD) $(LIBS) +unistdio/test-u16-vasnprintf3.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u16-vasnprintf3$(EXEEXT): $(test_u16_vasnprintf3_OBJECTS) $(test_u16_vasnprintf3_DEPENDENCIES) + @rm -f test-u16-vasnprintf3$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_vasnprintf3_OBJECTS) $(test_u16_vasnprintf3_LDADD) $(LIBS) +unistdio/test-u16-vasprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u16-vasprintf1$(EXEEXT): $(test_u16_vasprintf1_OBJECTS) $(test_u16_vasprintf1_DEPENDENCIES) + @rm -f test-u16-vasprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_vasprintf1_OBJECTS) $(test_u16_vasprintf1_LDADD) $(LIBS) +unistdio/test-u16-vsnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u16-vsnprintf1$(EXEEXT): $(test_u16_vsnprintf1_OBJECTS) $(test_u16_vsnprintf1_DEPENDENCIES) + @rm -f test-u16-vsnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_vsnprintf1_OBJECTS) $(test_u16_vsnprintf1_LDADD) $(LIBS) +unistdio/test-u16-vsprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u16-vsprintf1$(EXEEXT): $(test_u16_vsprintf1_OBJECTS) $(test_u16_vsprintf1_DEPENDENCIES) + @rm -f test-u16-vsprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_vsprintf1_OBJECTS) $(test_u16_vsprintf1_LDADD) $(LIBS) +uniwidth/test-u16-width.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) +test-u16-width$(EXEEXT): $(test_u16_width_OBJECTS) $(test_u16_width_DEPENDENCIES) + @rm -f test-u16-width$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_width_OBJECTS) $(test_u16_width_LDADD) $(LIBS) +unilbrk/test-u16-width-linebreaks.$(OBJEXT): unilbrk/$(am__dirstamp) \ + unilbrk/$(DEPDIR)/$(am__dirstamp) +test-u16-width-linebreaks$(EXEEXT): $(test_u16_width_linebreaks_OBJECTS) $(test_u16_width_linebreaks_DEPENDENCIES) + @rm -f test-u16-width-linebreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_width_linebreaks_OBJECTS) $(test_u16_width_linebreaks_LDADD) $(LIBS) +uniwbrk/$(am__dirstamp): + @$(MKDIR_P) uniwbrk + @: > uniwbrk/$(am__dirstamp) +uniwbrk/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) uniwbrk/$(DEPDIR) + @: > uniwbrk/$(DEPDIR)/$(am__dirstamp) +uniwbrk/test-u16-wordbreaks.$(OBJEXT): uniwbrk/$(am__dirstamp) \ + uniwbrk/$(DEPDIR)/$(am__dirstamp) +test-u16-wordbreaks$(EXEEXT): $(test_u16_wordbreaks_OBJECTS) $(test_u16_wordbreaks_DEPENDENCIES) + @rm -f test-u16-wordbreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u16_wordbreaks_OBJECTS) $(test_u16_wordbreaks_LDADD) $(LIBS) +unistdio/test-u32-asnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u32-asnprintf1$(EXEEXT): $(test_u32_asnprintf1_OBJECTS) $(test_u32_asnprintf1_DEPENDENCIES) + @rm -f test-u32-asnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_asnprintf1_OBJECTS) $(test_u32_asnprintf1_LDADD) $(LIBS) +unicase/test-u32-casecmp.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u32-casecmp$(EXEEXT): $(test_u32_casecmp_OBJECTS) $(test_u32_casecmp_DEPENDENCIES) + @rm -f test-u32-casecmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_casecmp_OBJECTS) $(test_u32_casecmp_LDADD) $(LIBS) +unicase/test-u32-casecoll.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u32-casecoll$(EXEEXT): $(test_u32_casecoll_OBJECTS) $(test_u32_casecoll_DEPENDENCIES) + @rm -f test-u32-casecoll$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_casecoll_OBJECTS) $(test_u32_casecoll_LDADD) $(LIBS) +unicase/test-u32-casefold.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u32-casefold$(EXEEXT): $(test_u32_casefold_OBJECTS) $(test_u32_casefold_DEPENDENCIES) + @rm -f test-u32-casefold$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_casefold_OBJECTS) $(test_u32_casefold_LDADD) $(LIBS) +uniconv/test-u32-conv-from-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u32-conv-from-enc$(EXEEXT): $(test_u32_conv_from_enc_OBJECTS) $(test_u32_conv_from_enc_DEPENDENCIES) + @rm -f test-u32-conv-from-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_conv_from_enc_OBJECTS) $(test_u32_conv_from_enc_LDADD) $(LIBS) +uniconv/test-u32-conv-to-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u32-conv-to-enc$(EXEEXT): $(test_u32_conv_to_enc_OBJECTS) $(test_u32_conv_to_enc_DEPENDENCIES) + @rm -f test-u32-conv-to-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_conv_to_enc_OBJECTS) $(test_u32_conv_to_enc_LDADD) $(LIBS) +unicase/test-u32-is-cased.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u32-is-cased$(EXEEXT): $(test_u32_is_cased_OBJECTS) $(test_u32_is_cased_DEPENDENCIES) + @rm -f test-u32-is-cased$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_is_cased_OBJECTS) $(test_u32_is_cased_LDADD) $(LIBS) +unicase/test-u32-is-casefolded.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u32-is-casefolded$(EXEEXT): $(test_u32_is_casefolded_OBJECTS) $(test_u32_is_casefolded_DEPENDENCIES) + @rm -f test-u32-is-casefolded$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_is_casefolded_OBJECTS) $(test_u32_is_casefolded_LDADD) $(LIBS) +unicase/test-u32-is-lowercase.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u32-is-lowercase$(EXEEXT): $(test_u32_is_lowercase_OBJECTS) $(test_u32_is_lowercase_DEPENDENCIES) + @rm -f test-u32-is-lowercase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_is_lowercase_OBJECTS) $(test_u32_is_lowercase_LDADD) $(LIBS) +unicase/test-u32-is-titlecase.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u32-is-titlecase$(EXEEXT): $(test_u32_is_titlecase_OBJECTS) $(test_u32_is_titlecase_DEPENDENCIES) + @rm -f test-u32-is-titlecase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_is_titlecase_OBJECTS) $(test_u32_is_titlecase_LDADD) $(LIBS) +unicase/test-u32-is-uppercase.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u32-is-uppercase$(EXEEXT): $(test_u32_is_uppercase_OBJECTS) $(test_u32_is_uppercase_DEPENDENCIES) + @rm -f test-u32-is-uppercase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_is_uppercase_OBJECTS) $(test_u32_is_uppercase_LDADD) $(LIBS) +uninorm/test-u32-nfc-big.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +uninorm/test-u32-normalize-big.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-u32-nfc-big$(EXEEXT): $(test_u32_nfc_big_OBJECTS) $(test_u32_nfc_big_DEPENDENCIES) + @rm -f test-u32-nfc-big$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_nfc_big_OBJECTS) $(test_u32_nfc_big_LDADD) $(LIBS) +uninorm/test-u32-nfd-big.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-u32-nfd-big$(EXEEXT): $(test_u32_nfd_big_OBJECTS) $(test_u32_nfd_big_DEPENDENCIES) + @rm -f test-u32-nfd-big$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_nfd_big_OBJECTS) $(test_u32_nfd_big_LDADD) $(LIBS) +uninorm/test-u32-nfkc-big.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-u32-nfkc-big$(EXEEXT): $(test_u32_nfkc_big_OBJECTS) $(test_u32_nfkc_big_DEPENDENCIES) + @rm -f test-u32-nfkc-big$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_nfkc_big_OBJECTS) $(test_u32_nfkc_big_LDADD) $(LIBS) +uninorm/test-u32-nfkd-big.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-u32-nfkd-big$(EXEEXT): $(test_u32_nfkd_big_OBJECTS) $(test_u32_nfkd_big_DEPENDENCIES) + @rm -f test-u32-nfkd-big$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_nfkd_big_OBJECTS) $(test_u32_nfkd_big_LDADD) $(LIBS) +uninorm/test-u32-normcmp.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-u32-normcmp$(EXEEXT): $(test_u32_normcmp_OBJECTS) $(test_u32_normcmp_DEPENDENCIES) + @rm -f test-u32-normcmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_normcmp_OBJECTS) $(test_u32_normcmp_LDADD) $(LIBS) +uninorm/test-u32-normcoll.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-u32-normcoll$(EXEEXT): $(test_u32_normcoll_OBJECTS) $(test_u32_normcoll_DEPENDENCIES) + @rm -f test-u32-normcoll$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_normcoll_OBJECTS) $(test_u32_normcoll_LDADD) $(LIBS) +unilbrk/test-u32-possible-linebreaks.$(OBJEXT): \ + unilbrk/$(am__dirstamp) unilbrk/$(DEPDIR)/$(am__dirstamp) +test-u32-possible-linebreaks$(EXEEXT): $(test_u32_possible_linebreaks_OBJECTS) $(test_u32_possible_linebreaks_DEPENDENCIES) + @rm -f test-u32-possible-linebreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_possible_linebreaks_OBJECTS) $(test_u32_possible_linebreaks_LDADD) $(LIBS) +uniconv/test-u32-strconv-from-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u32-strconv-from-enc$(EXEEXT): $(test_u32_strconv_from_enc_OBJECTS) $(test_u32_strconv_from_enc_DEPENDENCIES) + @rm -f test-u32-strconv-from-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_strconv_from_enc_OBJECTS) $(test_u32_strconv_from_enc_LDADD) $(LIBS) +uniconv/test-u32-strconv-to-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u32-strconv-to-enc$(EXEEXT): $(test_u32_strconv_to_enc_OBJECTS) $(test_u32_strconv_to_enc_DEPENDENCIES) + @rm -f test-u32-strconv-to-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_strconv_to_enc_OBJECTS) $(test_u32_strconv_to_enc_LDADD) $(LIBS) +uniwidth/test-u32-strwidth.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) +test-u32-strwidth$(EXEEXT): $(test_u32_strwidth_OBJECTS) $(test_u32_strwidth_DEPENDENCIES) + @rm -f test-u32-strwidth$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_strwidth_OBJECTS) $(test_u32_strwidth_LDADD) $(LIBS) +unicase/test-u32-tolower.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u32-tolower$(EXEEXT): $(test_u32_tolower_OBJECTS) $(test_u32_tolower_DEPENDENCIES) + @rm -f test-u32-tolower$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_tolower_OBJECTS) $(test_u32_tolower_LDADD) $(LIBS) +unicase/test-u32-totitle.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u32-totitle$(EXEEXT): $(test_u32_totitle_OBJECTS) $(test_u32_totitle_DEPENDENCIES) + @rm -f test-u32-totitle$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_totitle_OBJECTS) $(test_u32_totitle_LDADD) $(LIBS) +unicase/test-u32-toupper.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u32-toupper$(EXEEXT): $(test_u32_toupper_OBJECTS) $(test_u32_toupper_DEPENDENCIES) + @rm -f test-u32-toupper$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_toupper_OBJECTS) $(test_u32_toupper_LDADD) $(LIBS) +unistdio/test-u32-vasnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u32-vasnprintf1$(EXEEXT): $(test_u32_vasnprintf1_OBJECTS) $(test_u32_vasnprintf1_DEPENDENCIES) + @rm -f test-u32-vasnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_vasnprintf1_OBJECTS) $(test_u32_vasnprintf1_LDADD) $(LIBS) +unistdio/test-u32-vasnprintf2.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u32-vasnprintf2$(EXEEXT): $(test_u32_vasnprintf2_OBJECTS) $(test_u32_vasnprintf2_DEPENDENCIES) + @rm -f test-u32-vasnprintf2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_vasnprintf2_OBJECTS) $(test_u32_vasnprintf2_LDADD) $(LIBS) +unistdio/test-u32-vasnprintf3.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u32-vasnprintf3$(EXEEXT): $(test_u32_vasnprintf3_OBJECTS) $(test_u32_vasnprintf3_DEPENDENCIES) + @rm -f test-u32-vasnprintf3$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_vasnprintf3_OBJECTS) $(test_u32_vasnprintf3_LDADD) $(LIBS) +unistdio/test-u32-vasprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u32-vasprintf1$(EXEEXT): $(test_u32_vasprintf1_OBJECTS) $(test_u32_vasprintf1_DEPENDENCIES) + @rm -f test-u32-vasprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_vasprintf1_OBJECTS) $(test_u32_vasprintf1_LDADD) $(LIBS) +unistdio/test-u32-vsnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u32-vsnprintf1$(EXEEXT): $(test_u32_vsnprintf1_OBJECTS) $(test_u32_vsnprintf1_DEPENDENCIES) + @rm -f test-u32-vsnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_vsnprintf1_OBJECTS) $(test_u32_vsnprintf1_LDADD) $(LIBS) +unistdio/test-u32-vsprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u32-vsprintf1$(EXEEXT): $(test_u32_vsprintf1_OBJECTS) $(test_u32_vsprintf1_DEPENDENCIES) + @rm -f test-u32-vsprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_vsprintf1_OBJECTS) $(test_u32_vsprintf1_LDADD) $(LIBS) +uniwidth/test-u32-width.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) +test-u32-width$(EXEEXT): $(test_u32_width_OBJECTS) $(test_u32_width_DEPENDENCIES) + @rm -f test-u32-width$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_width_OBJECTS) $(test_u32_width_LDADD) $(LIBS) +unilbrk/test-u32-width-linebreaks.$(OBJEXT): unilbrk/$(am__dirstamp) \ + unilbrk/$(DEPDIR)/$(am__dirstamp) +test-u32-width-linebreaks$(EXEEXT): $(test_u32_width_linebreaks_OBJECTS) $(test_u32_width_linebreaks_DEPENDENCIES) + @rm -f test-u32-width-linebreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_width_linebreaks_OBJECTS) $(test_u32_width_linebreaks_LDADD) $(LIBS) +uniwbrk/test-u32-wordbreaks.$(OBJEXT): uniwbrk/$(am__dirstamp) \ + uniwbrk/$(DEPDIR)/$(am__dirstamp) +test-u32-wordbreaks$(EXEEXT): $(test_u32_wordbreaks_OBJECTS) $(test_u32_wordbreaks_DEPENDENCIES) + @rm -f test-u32-wordbreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u32_wordbreaks_OBJECTS) $(test_u32_wordbreaks_LDADD) $(LIBS) +unistdio/test-u8-asnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u8-asnprintf1$(EXEEXT): $(test_u8_asnprintf1_OBJECTS) $(test_u8_asnprintf1_DEPENDENCIES) + @rm -f test-u8-asnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_asnprintf1_OBJECTS) $(test_u8_asnprintf1_LDADD) $(LIBS) +unicase/test-u8-casecmp.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u8-casecmp$(EXEEXT): $(test_u8_casecmp_OBJECTS) $(test_u8_casecmp_DEPENDENCIES) + @rm -f test-u8-casecmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_casecmp_OBJECTS) $(test_u8_casecmp_LDADD) $(LIBS) +unicase/test-u8-casecoll.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u8-casecoll$(EXEEXT): $(test_u8_casecoll_OBJECTS) $(test_u8_casecoll_DEPENDENCIES) + @rm -f test-u8-casecoll$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_casecoll_OBJECTS) $(test_u8_casecoll_LDADD) $(LIBS) +unicase/test-u8-casefold.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u8-casefold$(EXEEXT): $(test_u8_casefold_OBJECTS) $(test_u8_casefold_DEPENDENCIES) + @rm -f test-u8-casefold$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_casefold_OBJECTS) $(test_u8_casefold_LDADD) $(LIBS) +uniconv/test-u8-conv-from-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u8-conv-from-enc$(EXEEXT): $(test_u8_conv_from_enc_OBJECTS) $(test_u8_conv_from_enc_DEPENDENCIES) + @rm -f test-u8-conv-from-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_conv_from_enc_OBJECTS) $(test_u8_conv_from_enc_LDADD) $(LIBS) +uniconv/test-u8-conv-to-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u8-conv-to-enc$(EXEEXT): $(test_u8_conv_to_enc_OBJECTS) $(test_u8_conv_to_enc_DEPENDENCIES) + @rm -f test-u8-conv-to-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_conv_to_enc_OBJECTS) $(test_u8_conv_to_enc_LDADD) $(LIBS) +unicase/test-u8-is-cased.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u8-is-cased$(EXEEXT): $(test_u8_is_cased_OBJECTS) $(test_u8_is_cased_DEPENDENCIES) + @rm -f test-u8-is-cased$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_is_cased_OBJECTS) $(test_u8_is_cased_LDADD) $(LIBS) +unicase/test-u8-is-casefolded.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u8-is-casefolded$(EXEEXT): $(test_u8_is_casefolded_OBJECTS) $(test_u8_is_casefolded_DEPENDENCIES) + @rm -f test-u8-is-casefolded$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_is_casefolded_OBJECTS) $(test_u8_is_casefolded_LDADD) $(LIBS) +unicase/test-u8-is-lowercase.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u8-is-lowercase$(EXEEXT): $(test_u8_is_lowercase_OBJECTS) $(test_u8_is_lowercase_DEPENDENCIES) + @rm -f test-u8-is-lowercase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_is_lowercase_OBJECTS) $(test_u8_is_lowercase_LDADD) $(LIBS) +unicase/test-u8-is-titlecase.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u8-is-titlecase$(EXEEXT): $(test_u8_is_titlecase_OBJECTS) $(test_u8_is_titlecase_DEPENDENCIES) + @rm -f test-u8-is-titlecase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_is_titlecase_OBJECTS) $(test_u8_is_titlecase_LDADD) $(LIBS) +unicase/test-u8-is-uppercase.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u8-is-uppercase$(EXEEXT): $(test_u8_is_uppercase_OBJECTS) $(test_u8_is_uppercase_DEPENDENCIES) + @rm -f test-u8-is-uppercase$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_is_uppercase_OBJECTS) $(test_u8_is_uppercase_LDADD) $(LIBS) +uninorm/test-u8-normcmp.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-u8-normcmp$(EXEEXT): $(test_u8_normcmp_OBJECTS) $(test_u8_normcmp_DEPENDENCIES) + @rm -f test-u8-normcmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_normcmp_OBJECTS) $(test_u8_normcmp_LDADD) $(LIBS) +uninorm/test-u8-normcoll.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-u8-normcoll$(EXEEXT): $(test_u8_normcoll_OBJECTS) $(test_u8_normcoll_DEPENDENCIES) + @rm -f test-u8-normcoll$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_normcoll_OBJECTS) $(test_u8_normcoll_LDADD) $(LIBS) +unilbrk/test-u8-possible-linebreaks.$(OBJEXT): \ + unilbrk/$(am__dirstamp) unilbrk/$(DEPDIR)/$(am__dirstamp) +test-u8-possible-linebreaks$(EXEEXT): $(test_u8_possible_linebreaks_OBJECTS) $(test_u8_possible_linebreaks_DEPENDENCIES) + @rm -f test-u8-possible-linebreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_possible_linebreaks_OBJECTS) $(test_u8_possible_linebreaks_LDADD) $(LIBS) +uniconv/test-u8-strconv-from-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u8-strconv-from-enc$(EXEEXT): $(test_u8_strconv_from_enc_OBJECTS) $(test_u8_strconv_from_enc_DEPENDENCIES) + @rm -f test-u8-strconv-from-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_strconv_from_enc_OBJECTS) $(test_u8_strconv_from_enc_LDADD) $(LIBS) +uniconv/test-u8-strconv-to-enc.$(OBJEXT): uniconv/$(am__dirstamp) \ + uniconv/$(DEPDIR)/$(am__dirstamp) +test-u8-strconv-to-enc$(EXEEXT): $(test_u8_strconv_to_enc_OBJECTS) $(test_u8_strconv_to_enc_DEPENDENCIES) + @rm -f test-u8-strconv-to-enc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_strconv_to_enc_OBJECTS) $(test_u8_strconv_to_enc_LDADD) $(LIBS) +uniwidth/test-u8-strwidth.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) +test-u8-strwidth$(EXEEXT): $(test_u8_strwidth_OBJECTS) $(test_u8_strwidth_DEPENDENCIES) + @rm -f test-u8-strwidth$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_strwidth_OBJECTS) $(test_u8_strwidth_LDADD) $(LIBS) +unicase/test-u8-tolower.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u8-tolower$(EXEEXT): $(test_u8_tolower_OBJECTS) $(test_u8_tolower_DEPENDENCIES) + @rm -f test-u8-tolower$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_tolower_OBJECTS) $(test_u8_tolower_LDADD) $(LIBS) +unicase/test-u8-totitle.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u8-totitle$(EXEEXT): $(test_u8_totitle_OBJECTS) $(test_u8_totitle_DEPENDENCIES) + @rm -f test-u8-totitle$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_totitle_OBJECTS) $(test_u8_totitle_LDADD) $(LIBS) +unicase/test-u8-toupper.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-u8-toupper$(EXEEXT): $(test_u8_toupper_OBJECTS) $(test_u8_toupper_DEPENDENCIES) + @rm -f test-u8-toupper$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_toupper_OBJECTS) $(test_u8_toupper_LDADD) $(LIBS) +unistdio/test-u8-vasnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u8-vasnprintf1$(EXEEXT): $(test_u8_vasnprintf1_OBJECTS) $(test_u8_vasnprintf1_DEPENDENCIES) + @rm -f test-u8-vasnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_vasnprintf1_OBJECTS) $(test_u8_vasnprintf1_LDADD) $(LIBS) +unistdio/test-u8-vasnprintf2.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u8-vasnprintf2$(EXEEXT): $(test_u8_vasnprintf2_OBJECTS) $(test_u8_vasnprintf2_DEPENDENCIES) + @rm -f test-u8-vasnprintf2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_vasnprintf2_OBJECTS) $(test_u8_vasnprintf2_LDADD) $(LIBS) +unistdio/test-u8-vasnprintf3.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u8-vasnprintf3$(EXEEXT): $(test_u8_vasnprintf3_OBJECTS) $(test_u8_vasnprintf3_DEPENDENCIES) + @rm -f test-u8-vasnprintf3$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_vasnprintf3_OBJECTS) $(test_u8_vasnprintf3_LDADD) $(LIBS) +unistdio/test-u8-vasprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u8-vasprintf1$(EXEEXT): $(test_u8_vasprintf1_OBJECTS) $(test_u8_vasprintf1_DEPENDENCIES) + @rm -f test-u8-vasprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_vasprintf1_OBJECTS) $(test_u8_vasprintf1_LDADD) $(LIBS) +unistdio/test-u8-vsnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u8-vsnprintf1$(EXEEXT): $(test_u8_vsnprintf1_OBJECTS) $(test_u8_vsnprintf1_DEPENDENCIES) + @rm -f test-u8-vsnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_vsnprintf1_OBJECTS) $(test_u8_vsnprintf1_LDADD) $(LIBS) +unistdio/test-u8-vsprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-u8-vsprintf1$(EXEEXT): $(test_u8_vsprintf1_OBJECTS) $(test_u8_vsprintf1_DEPENDENCIES) + @rm -f test-u8-vsprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_vsprintf1_OBJECTS) $(test_u8_vsprintf1_LDADD) $(LIBS) +uniwidth/test-u8-width.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) +test-u8-width$(EXEEXT): $(test_u8_width_OBJECTS) $(test_u8_width_DEPENDENCIES) + @rm -f test-u8-width$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_width_OBJECTS) $(test_u8_width_LDADD) $(LIBS) +unilbrk/test-u8-width-linebreaks.$(OBJEXT): unilbrk/$(am__dirstamp) \ + unilbrk/$(DEPDIR)/$(am__dirstamp) +test-u8-width-linebreaks$(EXEEXT): $(test_u8_width_linebreaks_OBJECTS) $(test_u8_width_linebreaks_DEPENDENCIES) + @rm -f test-u8-width-linebreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_width_linebreaks_OBJECTS) $(test_u8_width_linebreaks_LDADD) $(LIBS) +uniwbrk/test-u8-wordbreaks.$(OBJEXT): uniwbrk/$(am__dirstamp) \ + uniwbrk/$(DEPDIR)/$(am__dirstamp) +test-u8-wordbreaks$(EXEEXT): $(test_u8_wordbreaks_OBJECTS) $(test_u8_wordbreaks_DEPENDENCIES) + @rm -f test-u8-wordbreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_u8_wordbreaks_OBJECTS) $(test_u8_wordbreaks_LDADD) $(LIBS) +unicase/test-uc_tolower.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-uc_tolower$(EXEEXT): $(test_uc_tolower_OBJECTS) $(test_uc_tolower_DEPENDENCIES) + @rm -f test-uc_tolower$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_uc_tolower_OBJECTS) $(test_uc_tolower_LDADD) $(LIBS) +unicase/test-uc_totitle.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-uc_totitle$(EXEEXT): $(test_uc_totitle_OBJECTS) $(test_uc_totitle_DEPENDENCIES) + @rm -f test-uc_totitle$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_uc_totitle_OBJECTS) $(test_uc_totitle_LDADD) $(LIBS) +unicase/test-uc_toupper.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-uc_toupper$(EXEEXT): $(test_uc_toupper_OBJECTS) $(test_uc_toupper_DEPENDENCIES) + @rm -f test-uc_toupper$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_uc_toupper_OBJECTS) $(test_uc_toupper_LDADD) $(LIBS) +uniwidth/test-uc_width.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) +test-uc_width$(EXEEXT): $(test_uc_width_OBJECTS) $(test_uc_width_DEPENDENCIES) + @rm -f test-uc_width$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_uc_width_OBJECTS) $(test_uc_width_LDADD) $(LIBS) +uniwidth/test-uc_width2.$(OBJEXT): uniwidth/$(am__dirstamp) \ + uniwidth/$(DEPDIR)/$(am__dirstamp) +test-uc_width2$(EXEEXT): $(test_uc_width2_OBJECTS) $(test_uc_width2_DEPENDENCIES) + @rm -f test-uc_width2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_uc_width2_OBJECTS) $(test_uc_width2_LDADD) $(LIBS) +unistdio/test-ulc-asnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-ulc-asnprintf1$(EXEEXT): $(test_ulc_asnprintf1_OBJECTS) $(test_ulc_asnprintf1_DEPENDENCIES) + @rm -f test-ulc-asnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_asnprintf1_OBJECTS) $(test_ulc_asnprintf1_LDADD) $(LIBS) +unicase/test-ulc-casecmp.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-ulc-casecmp$(EXEEXT): $(test_ulc_casecmp_OBJECTS) $(test_ulc_casecmp_DEPENDENCIES) + @rm -f test-ulc-casecmp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_casecmp_OBJECTS) $(test_ulc_casecmp_LDADD) $(LIBS) +unicase/test-ulc-casecoll.$(OBJEXT): unicase/$(am__dirstamp) \ + unicase/$(DEPDIR)/$(am__dirstamp) +test-ulc-casecoll$(EXEEXT): $(test_ulc_casecoll_OBJECTS) $(test_ulc_casecoll_DEPENDENCIES) + @rm -f test-ulc-casecoll$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_casecoll_OBJECTS) $(test_ulc_casecoll_LDADD) $(LIBS) +unilbrk/test-ulc-possible-linebreaks.$(OBJEXT): \ + unilbrk/$(am__dirstamp) unilbrk/$(DEPDIR)/$(am__dirstamp) +test-ulc-possible-linebreaks$(EXEEXT): $(test_ulc_possible_linebreaks_OBJECTS) $(test_ulc_possible_linebreaks_DEPENDENCIES) + @rm -f test-ulc-possible-linebreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_possible_linebreaks_OBJECTS) $(test_ulc_possible_linebreaks_LDADD) $(LIBS) +unistdio/test-ulc-vasnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-ulc-vasnprintf1$(EXEEXT): $(test_ulc_vasnprintf1_OBJECTS) $(test_ulc_vasnprintf1_DEPENDENCIES) + @rm -f test-ulc-vasnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_vasnprintf1_OBJECTS) $(test_ulc_vasnprintf1_LDADD) $(LIBS) +unistdio/test-ulc-vasnprintf2.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-ulc-vasnprintf2$(EXEEXT): $(test_ulc_vasnprintf2_OBJECTS) $(test_ulc_vasnprintf2_DEPENDENCIES) + @rm -f test-ulc-vasnprintf2$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_vasnprintf2_OBJECTS) $(test_ulc_vasnprintf2_LDADD) $(LIBS) +unistdio/test-ulc-vasnprintf3.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-ulc-vasnprintf3$(EXEEXT): $(test_ulc_vasnprintf3_OBJECTS) $(test_ulc_vasnprintf3_DEPENDENCIES) + @rm -f test-ulc-vasnprintf3$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_vasnprintf3_OBJECTS) $(test_ulc_vasnprintf3_LDADD) $(LIBS) +unistdio/test-ulc-vasprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-ulc-vasprintf1$(EXEEXT): $(test_ulc_vasprintf1_OBJECTS) $(test_ulc_vasprintf1_DEPENDENCIES) + @rm -f test-ulc-vasprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_vasprintf1_OBJECTS) $(test_ulc_vasprintf1_LDADD) $(LIBS) +unistdio/test-ulc-vsnprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-ulc-vsnprintf1$(EXEEXT): $(test_ulc_vsnprintf1_OBJECTS) $(test_ulc_vsnprintf1_DEPENDENCIES) + @rm -f test-ulc-vsnprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_vsnprintf1_OBJECTS) $(test_ulc_vsnprintf1_LDADD) $(LIBS) +unistdio/test-ulc-vsprintf1.$(OBJEXT): unistdio/$(am__dirstamp) \ + unistdio/$(DEPDIR)/$(am__dirstamp) +test-ulc-vsprintf1$(EXEEXT): $(test_ulc_vsprintf1_OBJECTS) $(test_ulc_vsprintf1_DEPENDENCIES) + @rm -f test-ulc-vsprintf1$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_vsprintf1_OBJECTS) $(test_ulc_vsprintf1_LDADD) $(LIBS) +unilbrk/test-ulc-width-linebreaks.$(OBJEXT): unilbrk/$(am__dirstamp) \ + unilbrk/$(DEPDIR)/$(am__dirstamp) +test-ulc-width-linebreaks$(EXEEXT): $(test_ulc_width_linebreaks_OBJECTS) $(test_ulc_width_linebreaks_DEPENDENCIES) + @rm -f test-ulc-width-linebreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_width_linebreaks_OBJECTS) $(test_ulc_width_linebreaks_LDADD) $(LIBS) +uniwbrk/test-ulc-wordbreaks.$(OBJEXT): uniwbrk/$(am__dirstamp) \ + uniwbrk/$(DEPDIR)/$(am__dirstamp) +test-ulc-wordbreaks$(EXEEXT): $(test_ulc_wordbreaks_OBJECTS) $(test_ulc_wordbreaks_DEPENDENCIES) + @rm -f test-ulc-wordbreaks$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_ulc_wordbreaks_OBJECTS) $(test_ulc_wordbreaks_LDADD) $(LIBS) +uniname/$(am__dirstamp): + @$(MKDIR_P) uniname + @: > uniname/$(am__dirstamp) +uniname/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) uniname/$(DEPDIR) + @: > uniname/$(DEPDIR)/$(am__dirstamp) +uniname/test-uninames.$(OBJEXT): uniname/$(am__dirstamp) \ + uniname/$(DEPDIR)/$(am__dirstamp) +test-uninames$(EXEEXT): $(test_uninames_OBJECTS) $(test_uninames_DEPENDENCIES) + @rm -f test-uninames$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_uninames_OBJECTS) $(test_uninames_LDADD) $(LIBS) +uninorm/test-uninorm-filter-nfc.$(OBJEXT): uninorm/$(am__dirstamp) \ + uninorm/$(DEPDIR)/$(am__dirstamp) +test-uninorm-filter-nfc$(EXEEXT): $(test_uninorm_filter_nfc_OBJECTS) $(test_uninorm_filter_nfc_DEPENDENCIES) + @rm -f test-uninorm-filter-nfc$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_uninorm_filter_nfc_OBJECTS) $(test_uninorm_filter_nfc_LDADD) $(LIBS) +test-unistd$(EXEEXT): $(test_unistd_OBJECTS) $(test_unistd_DEPENDENCIES) + @rm -f test-unistd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_unistd_OBJECTS) $(test_unistd_LDADD) $(LIBS) +test-wchar$(EXEEXT): $(test_wchar_OBJECTS) $(test_wchar_DEPENDENCIES) + @rm -f test-wchar$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wchar_OBJECTS) $(test_wchar_LDADD) $(LIBS) +test-wctype$(EXEEXT): $(test_wctype_OBJECTS) $(test_wctype_DEPENDENCIES) + @rm -f test-wctype$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wctype_OBJECTS) $(test_wctype_LDADD) $(LIBS) +test-wcwidth$(EXEEXT): $(test_wcwidth_OBJECTS) $(test_wcwidth_DEPENDENCIES) + @rm -f test-wcwidth$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_wcwidth_OBJECTS) $(test_wcwidth_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + -rm -f unicase/test-cased.$(OBJEXT) + -rm -f unicase/test-ignorable.$(OBJEXT) + -rm -f unicase/test-locale-language.$(OBJEXT) + -rm -f unicase/test-u16-casecmp.$(OBJEXT) + -rm -f unicase/test-u16-casecoll.$(OBJEXT) + -rm -f unicase/test-u16-casefold.$(OBJEXT) + -rm -f unicase/test-u16-is-cased.$(OBJEXT) + -rm -f unicase/test-u16-is-casefolded.$(OBJEXT) + -rm -f unicase/test-u16-is-lowercase.$(OBJEXT) + -rm -f unicase/test-u16-is-titlecase.$(OBJEXT) + -rm -f unicase/test-u16-is-uppercase.$(OBJEXT) + -rm -f unicase/test-u16-tolower.$(OBJEXT) + -rm -f unicase/test-u16-totitle.$(OBJEXT) + -rm -f unicase/test-u16-toupper.$(OBJEXT) + -rm -f unicase/test-u32-casecmp.$(OBJEXT) + -rm -f unicase/test-u32-casecoll.$(OBJEXT) + -rm -f unicase/test-u32-casefold.$(OBJEXT) + -rm -f unicase/test-u32-is-cased.$(OBJEXT) + -rm -f unicase/test-u32-is-casefolded.$(OBJEXT) + -rm -f unicase/test-u32-is-lowercase.$(OBJEXT) + -rm -f unicase/test-u32-is-titlecase.$(OBJEXT) + -rm -f unicase/test-u32-is-uppercase.$(OBJEXT) + -rm -f unicase/test-u32-tolower.$(OBJEXT) + -rm -f unicase/test-u32-totitle.$(OBJEXT) + -rm -f unicase/test-u32-toupper.$(OBJEXT) + -rm -f unicase/test-u8-casecmp.$(OBJEXT) + -rm -f unicase/test-u8-casecoll.$(OBJEXT) + -rm -f unicase/test-u8-casefold.$(OBJEXT) + -rm -f unicase/test-u8-is-cased.$(OBJEXT) + -rm -f unicase/test-u8-is-casefolded.$(OBJEXT) + -rm -f unicase/test-u8-is-lowercase.$(OBJEXT) + -rm -f unicase/test-u8-is-titlecase.$(OBJEXT) + -rm -f unicase/test-u8-is-uppercase.$(OBJEXT) + -rm -f unicase/test-u8-tolower.$(OBJEXT) + -rm -f unicase/test-u8-totitle.$(OBJEXT) + -rm -f unicase/test-u8-toupper.$(OBJEXT) + -rm -f unicase/test-uc_tolower.$(OBJEXT) + -rm -f unicase/test-uc_totitle.$(OBJEXT) + -rm -f unicase/test-uc_toupper.$(OBJEXT) + -rm -f unicase/test-ulc-casecmp.$(OBJEXT) + -rm -f unicase/test-ulc-casecoll.$(OBJEXT) + -rm -f uniconv/test-u16-conv-from-enc.$(OBJEXT) + -rm -f uniconv/test-u16-conv-to-enc.$(OBJEXT) + -rm -f uniconv/test-u16-strconv-from-enc.$(OBJEXT) + -rm -f uniconv/test-u16-strconv-to-enc.$(OBJEXT) + -rm -f uniconv/test-u32-conv-from-enc.$(OBJEXT) + -rm -f uniconv/test-u32-conv-to-enc.$(OBJEXT) + -rm -f uniconv/test-u32-strconv-from-enc.$(OBJEXT) + -rm -f uniconv/test-u32-strconv-to-enc.$(OBJEXT) + -rm -f uniconv/test-u8-conv-from-enc.$(OBJEXT) + -rm -f uniconv/test-u8-conv-to-enc.$(OBJEXT) + -rm -f uniconv/test-u8-strconv-from-enc.$(OBJEXT) + -rm -f uniconv/test-u8-strconv-to-enc.$(OBJEXT) + -rm -f unictype/test-bidi_byname.$(OBJEXT) + -rm -f unictype/test-bidi_name.$(OBJEXT) + -rm -f unictype/test-bidi_of.$(OBJEXT) + -rm -f unictype/test-bidi_test.$(OBJEXT) + -rm -f unictype/test-block_list.$(OBJEXT) + -rm -f unictype/test-block_of.$(OBJEXT) + -rm -f unictype/test-block_test.$(OBJEXT) + -rm -f unictype/test-categ_C.$(OBJEXT) + -rm -f unictype/test-categ_Cc.$(OBJEXT) + -rm -f unictype/test-categ_Cf.$(OBJEXT) + -rm -f unictype/test-categ_Cn.$(OBJEXT) + -rm -f unictype/test-categ_Co.$(OBJEXT) + -rm -f unictype/test-categ_Cs.$(OBJEXT) + -rm -f unictype/test-categ_L.$(OBJEXT) + -rm -f unictype/test-categ_Ll.$(OBJEXT) + -rm -f unictype/test-categ_Lm.$(OBJEXT) + -rm -f unictype/test-categ_Lo.$(OBJEXT) + -rm -f unictype/test-categ_Lt.$(OBJEXT) + -rm -f unictype/test-categ_Lu.$(OBJEXT) + -rm -f unictype/test-categ_M.$(OBJEXT) + -rm -f unictype/test-categ_Mc.$(OBJEXT) + -rm -f unictype/test-categ_Me.$(OBJEXT) + -rm -f unictype/test-categ_Mn.$(OBJEXT) + -rm -f unictype/test-categ_N.$(OBJEXT) + -rm -f unictype/test-categ_Nd.$(OBJEXT) + -rm -f unictype/test-categ_Nl.$(OBJEXT) + -rm -f unictype/test-categ_No.$(OBJEXT) + -rm -f unictype/test-categ_P.$(OBJEXT) + -rm -f unictype/test-categ_Pc.$(OBJEXT) + -rm -f unictype/test-categ_Pd.$(OBJEXT) + -rm -f unictype/test-categ_Pe.$(OBJEXT) + -rm -f unictype/test-categ_Pf.$(OBJEXT) + -rm -f unictype/test-categ_Pi.$(OBJEXT) + -rm -f unictype/test-categ_Po.$(OBJEXT) + -rm -f unictype/test-categ_Ps.$(OBJEXT) + -rm -f unictype/test-categ_S.$(OBJEXT) + -rm -f unictype/test-categ_Sc.$(OBJEXT) + -rm -f unictype/test-categ_Sk.$(OBJEXT) + -rm -f unictype/test-categ_Sm.$(OBJEXT) + -rm -f unictype/test-categ_So.$(OBJEXT) + -rm -f unictype/test-categ_Z.$(OBJEXT) + -rm -f unictype/test-categ_Zl.$(OBJEXT) + -rm -f unictype/test-categ_Zp.$(OBJEXT) + -rm -f unictype/test-categ_Zs.$(OBJEXT) + -rm -f unictype/test-categ_and.$(OBJEXT) + -rm -f unictype/test-categ_and_not.$(OBJEXT) + -rm -f unictype/test-categ_byname.$(OBJEXT) + -rm -f unictype/test-categ_name.$(OBJEXT) + -rm -f unictype/test-categ_none.$(OBJEXT) + -rm -f unictype/test-categ_of.$(OBJEXT) + -rm -f unictype/test-categ_or.$(OBJEXT) + -rm -f unictype/test-categ_test_withtable.$(OBJEXT) + -rm -f unictype/test-combining.$(OBJEXT) + -rm -f unictype/test-ctype_alnum.$(OBJEXT) + -rm -f unictype/test-ctype_alpha.$(OBJEXT) + -rm -f unictype/test-ctype_blank.$(OBJEXT) + -rm -f unictype/test-ctype_cntrl.$(OBJEXT) + -rm -f unictype/test-ctype_digit.$(OBJEXT) + -rm -f unictype/test-ctype_graph.$(OBJEXT) + -rm -f unictype/test-ctype_lower.$(OBJEXT) + -rm -f unictype/test-ctype_print.$(OBJEXT) + -rm -f unictype/test-ctype_punct.$(OBJEXT) + -rm -f unictype/test-ctype_space.$(OBJEXT) + -rm -f unictype/test-ctype_upper.$(OBJEXT) + -rm -f unictype/test-ctype_xdigit.$(OBJEXT) + -rm -f unictype/test-decdigit.$(OBJEXT) + -rm -f unictype/test-digit.$(OBJEXT) + -rm -f unictype/test-mirror.$(OBJEXT) + -rm -f unictype/test-numeric.$(OBJEXT) + -rm -f unictype/test-pr_alphabetic.$(OBJEXT) + -rm -f unictype/test-pr_ascii_hex_digit.$(OBJEXT) + -rm -f unictype/test-pr_bidi_arabic_digit.$(OBJEXT) + -rm -f unictype/test-pr_bidi_arabic_right_to_left.$(OBJEXT) + -rm -f unictype/test-pr_bidi_block_separator.$(OBJEXT) + -rm -f unictype/test-pr_bidi_boundary_neutral.$(OBJEXT) + -rm -f unictype/test-pr_bidi_common_separator.$(OBJEXT) + -rm -f unictype/test-pr_bidi_control.$(OBJEXT) + -rm -f unictype/test-pr_bidi_embedding_or_override.$(OBJEXT) + -rm -f unictype/test-pr_bidi_eur_num_separator.$(OBJEXT) + -rm -f unictype/test-pr_bidi_eur_num_terminator.$(OBJEXT) + -rm -f unictype/test-pr_bidi_european_digit.$(OBJEXT) + -rm -f unictype/test-pr_bidi_hebrew_right_to_left.$(OBJEXT) + -rm -f unictype/test-pr_bidi_left_to_right.$(OBJEXT) + -rm -f unictype/test-pr_bidi_non_spacing_mark.$(OBJEXT) + -rm -f unictype/test-pr_bidi_other_neutral.$(OBJEXT) + -rm -f unictype/test-pr_bidi_pdf.$(OBJEXT) + -rm -f unictype/test-pr_bidi_segment_separator.$(OBJEXT) + -rm -f unictype/test-pr_bidi_whitespace.$(OBJEXT) + -rm -f unictype/test-pr_byname.$(OBJEXT) + -rm -f unictype/test-pr_combining.$(OBJEXT) + -rm -f unictype/test-pr_composite.$(OBJEXT) + -rm -f unictype/test-pr_currency_symbol.$(OBJEXT) + -rm -f unictype/test-pr_dash.$(OBJEXT) + -rm -f unictype/test-pr_decimal_digit.$(OBJEXT) + -rm -f unictype/test-pr_default_ignorable_code_point.$(OBJEXT) + -rm -f unictype/test-pr_deprecated.$(OBJEXT) + -rm -f unictype/test-pr_diacritic.$(OBJEXT) + -rm -f unictype/test-pr_extender.$(OBJEXT) + -rm -f unictype/test-pr_format_control.$(OBJEXT) + -rm -f unictype/test-pr_grapheme_base.$(OBJEXT) + -rm -f unictype/test-pr_grapheme_extend.$(OBJEXT) + -rm -f unictype/test-pr_grapheme_link.$(OBJEXT) + -rm -f unictype/test-pr_hex_digit.$(OBJEXT) + -rm -f unictype/test-pr_hyphen.$(OBJEXT) + -rm -f unictype/test-pr_id_continue.$(OBJEXT) + -rm -f unictype/test-pr_id_start.$(OBJEXT) + -rm -f unictype/test-pr_ideographic.$(OBJEXT) + -rm -f unictype/test-pr_ids_binary_operator.$(OBJEXT) + -rm -f unictype/test-pr_ids_trinary_operator.$(OBJEXT) + -rm -f unictype/test-pr_ignorable_control.$(OBJEXT) + -rm -f unictype/test-pr_iso_control.$(OBJEXT) + -rm -f unictype/test-pr_join_control.$(OBJEXT) + -rm -f unictype/test-pr_left_of_pair.$(OBJEXT) + -rm -f unictype/test-pr_line_separator.$(OBJEXT) + -rm -f unictype/test-pr_logical_order_exception.$(OBJEXT) + -rm -f unictype/test-pr_lowercase.$(OBJEXT) + -rm -f unictype/test-pr_math.$(OBJEXT) + -rm -f unictype/test-pr_non_break.$(OBJEXT) + -rm -f unictype/test-pr_not_a_character.$(OBJEXT) + -rm -f unictype/test-pr_numeric.$(OBJEXT) + -rm -f unictype/test-pr_other_alphabetic.$(OBJEXT) + -rm -f unictype/test-pr_other_default_ignorable_code_point.$(OBJEXT) + -rm -f unictype/test-pr_other_grapheme_extend.$(OBJEXT) + -rm -f unictype/test-pr_other_id_continue.$(OBJEXT) + -rm -f unictype/test-pr_other_id_start.$(OBJEXT) + -rm -f unictype/test-pr_other_lowercase.$(OBJEXT) + -rm -f unictype/test-pr_other_math.$(OBJEXT) + -rm -f unictype/test-pr_other_uppercase.$(OBJEXT) + -rm -f unictype/test-pr_paired_punctuation.$(OBJEXT) + -rm -f unictype/test-pr_paragraph_separator.$(OBJEXT) + -rm -f unictype/test-pr_pattern_syntax.$(OBJEXT) + -rm -f unictype/test-pr_pattern_white_space.$(OBJEXT) + -rm -f unictype/test-pr_private_use.$(OBJEXT) + -rm -f unictype/test-pr_punctuation.$(OBJEXT) + -rm -f unictype/test-pr_quotation_mark.$(OBJEXT) + -rm -f unictype/test-pr_radical.$(OBJEXT) + -rm -f unictype/test-pr_sentence_terminal.$(OBJEXT) + -rm -f unictype/test-pr_soft_dotted.$(OBJEXT) + -rm -f unictype/test-pr_space.$(OBJEXT) + -rm -f unictype/test-pr_terminal_punctuation.$(OBJEXT) + -rm -f unictype/test-pr_test.$(OBJEXT) + -rm -f unictype/test-pr_titlecase.$(OBJEXT) + -rm -f unictype/test-pr_unassigned_code_value.$(OBJEXT) + -rm -f unictype/test-pr_unified_ideograph.$(OBJEXT) + -rm -f unictype/test-pr_uppercase.$(OBJEXT) + -rm -f unictype/test-pr_variation_selector.$(OBJEXT) + -rm -f unictype/test-pr_white_space.$(OBJEXT) + -rm -f unictype/test-pr_xid_continue.$(OBJEXT) + -rm -f unictype/test-pr_xid_start.$(OBJEXT) + -rm -f unictype/test-pr_zero_width.$(OBJEXT) + -rm -f unictype/test-scripts.$(OBJEXT) + -rm -f unictype/test-sy_c_ident.$(OBJEXT) + -rm -f unictype/test-sy_c_whitespace.$(OBJEXT) + -rm -f unictype/test-sy_java_ident.$(OBJEXT) + -rm -f unictype/test-sy_java_whitespace.$(OBJEXT) + -rm -f unilbrk/test-u16-possible-linebreaks.$(OBJEXT) + -rm -f unilbrk/test-u16-width-linebreaks.$(OBJEXT) + -rm -f unilbrk/test-u32-possible-linebreaks.$(OBJEXT) + -rm -f unilbrk/test-u32-width-linebreaks.$(OBJEXT) + -rm -f unilbrk/test-u8-possible-linebreaks.$(OBJEXT) + -rm -f unilbrk/test-u8-width-linebreaks.$(OBJEXT) + -rm -f unilbrk/test-ulc-possible-linebreaks.$(OBJEXT) + -rm -f unilbrk/test-ulc-width-linebreaks.$(OBJEXT) + -rm -f uniname/test-uninames.$(OBJEXT) + -rm -f uninorm/test-canonical-decomposition.$(OBJEXT) + -rm -f uninorm/test-compat-decomposition.$(OBJEXT) + -rm -f uninorm/test-composition.$(OBJEXT) + -rm -f uninorm/test-decomposing-form.$(OBJEXT) + -rm -f uninorm/test-decomposition.$(OBJEXT) + -rm -f uninorm/test-nfc.$(OBJEXT) + -rm -f uninorm/test-nfd.$(OBJEXT) + -rm -f uninorm/test-nfkc.$(OBJEXT) + -rm -f uninorm/test-nfkd.$(OBJEXT) + -rm -f uninorm/test-u16-nfc.$(OBJEXT) + -rm -f uninorm/test-u16-nfd.$(OBJEXT) + -rm -f uninorm/test-u16-nfkc.$(OBJEXT) + -rm -f uninorm/test-u16-nfkd.$(OBJEXT) + -rm -f uninorm/test-u16-normcmp.$(OBJEXT) + -rm -f uninorm/test-u16-normcoll.$(OBJEXT) + -rm -f uninorm/test-u32-nfc-big.$(OBJEXT) + -rm -f uninorm/test-u32-nfc.$(OBJEXT) + -rm -f uninorm/test-u32-nfd-big.$(OBJEXT) + -rm -f uninorm/test-u32-nfd.$(OBJEXT) + -rm -f uninorm/test-u32-nfkc-big.$(OBJEXT) + -rm -f uninorm/test-u32-nfkc.$(OBJEXT) + -rm -f uninorm/test-u32-nfkd-big.$(OBJEXT) + -rm -f uninorm/test-u32-nfkd.$(OBJEXT) + -rm -f uninorm/test-u32-normalize-big.$(OBJEXT) + -rm -f uninorm/test-u32-normcmp.$(OBJEXT) + -rm -f uninorm/test-u32-normcoll.$(OBJEXT) + -rm -f uninorm/test-u8-nfc.$(OBJEXT) + -rm -f uninorm/test-u8-nfd.$(OBJEXT) + -rm -f uninorm/test-u8-nfkc.$(OBJEXT) + -rm -f uninorm/test-u8-nfkd.$(OBJEXT) + -rm -f uninorm/test-u8-normcmp.$(OBJEXT) + -rm -f uninorm/test-u8-normcoll.$(OBJEXT) + -rm -f uninorm/test-uninorm-filter-nfc.$(OBJEXT) + -rm -f unistdio/test-u16-asnprintf1.$(OBJEXT) + -rm -f unistdio/test-u16-vasnprintf1.$(OBJEXT) + -rm -f unistdio/test-u16-vasnprintf2.$(OBJEXT) + -rm -f unistdio/test-u16-vasnprintf3.$(OBJEXT) + -rm -f unistdio/test-u16-vasprintf1.$(OBJEXT) + -rm -f unistdio/test-u16-vsnprintf1.$(OBJEXT) + -rm -f unistdio/test-u16-vsprintf1.$(OBJEXT) + -rm -f unistdio/test-u32-asnprintf1.$(OBJEXT) + -rm -f unistdio/test-u32-vasnprintf1.$(OBJEXT) + -rm -f unistdio/test-u32-vasnprintf2.$(OBJEXT) + -rm -f unistdio/test-u32-vasnprintf3.$(OBJEXT) + -rm -f unistdio/test-u32-vasprintf1.$(OBJEXT) + -rm -f unistdio/test-u32-vsnprintf1.$(OBJEXT) + -rm -f unistdio/test-u32-vsprintf1.$(OBJEXT) + -rm -f unistdio/test-u8-asnprintf1.$(OBJEXT) + -rm -f unistdio/test-u8-vasnprintf1.$(OBJEXT) + -rm -f unistdio/test-u8-vasnprintf2.$(OBJEXT) + -rm -f unistdio/test-u8-vasnprintf3.$(OBJEXT) + -rm -f unistdio/test-u8-vasprintf1.$(OBJEXT) + -rm -f unistdio/test-u8-vsnprintf1.$(OBJEXT) + -rm -f unistdio/test-u8-vsprintf1.$(OBJEXT) + -rm -f unistdio/test-ulc-asnprintf1.$(OBJEXT) + -rm -f unistdio/test-ulc-vasnprintf1.$(OBJEXT) + -rm -f unistdio/test-ulc-vasnprintf2.$(OBJEXT) + -rm -f unistdio/test-ulc-vasnprintf3.$(OBJEXT) + -rm -f unistdio/test-ulc-vasprintf1.$(OBJEXT) + -rm -f unistdio/test-ulc-vsnprintf1.$(OBJEXT) + -rm -f unistdio/test-ulc-vsprintf1.$(OBJEXT) + -rm -f uniwbrk/test-u16-wordbreaks.$(OBJEXT) + -rm -f uniwbrk/test-u32-wordbreaks.$(OBJEXT) + -rm -f uniwbrk/test-u8-wordbreaks.$(OBJEXT) + -rm -f uniwbrk/test-ulc-wordbreaks.$(OBJEXT) + -rm -f uniwidth/test-u16-strwidth.$(OBJEXT) + -rm -f uniwidth/test-u16-width.$(OBJEXT) + -rm -f uniwidth/test-u32-strwidth.$(OBJEXT) + -rm -f uniwidth/test-u32-width.$(OBJEXT) + -rm -f uniwidth/test-u8-strwidth.$(OBJEXT) + -rm -f uniwidth/test-u8-width.$(OBJEXT) + -rm -f uniwidth/test-uc_width.$(OBJEXT) + -rm -f uniwidth/test-uc_width2.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exitfail.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-alloca-opt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-array-mergesort.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-ctype.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strcasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-c-strncasecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-environ.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-errno.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-frexpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-fseterr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-iconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnand-nolibm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnanf-nolibm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-isnanl-nolibm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-locale.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-localename.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-malloca.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-math.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbrtowc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-mbsinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-memchr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-printf-frexp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-printf-frexpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-signbit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdbool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdint.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stdlib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-strerror.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-striconveh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-striconveha.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-string.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-unistd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wchar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wctype.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-wcwidth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unsetenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctob.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xalloc-die.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-cased.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-ignorable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-locale-language.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u16-casecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u16-casecoll.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u16-casefold.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u16-is-cased.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u16-is-casefolded.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u16-is-lowercase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u16-is-titlecase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u16-is-uppercase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u16-tolower.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u16-totitle.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u16-toupper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u32-casecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u32-casecoll.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u32-casefold.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u32-is-cased.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u32-is-casefolded.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u32-is-lowercase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u32-is-titlecase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u32-is-uppercase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u32-tolower.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u32-totitle.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u32-toupper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u8-casecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u8-casecoll.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u8-casefold.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u8-is-cased.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u8-is-casefolded.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u8-is-lowercase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u8-is-titlecase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u8-is-uppercase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u8-tolower.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u8-totitle.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-u8-toupper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-uc_tolower.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-uc_totitle.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-uc_toupper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-ulc-casecmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unicase/$(DEPDIR)/test-ulc-casecoll.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u16-conv-from-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u16-conv-to-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u16-strconv-from-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u16-strconv-to-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u32-conv-from-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u32-conv-to-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u32-strconv-from-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u32-strconv-to-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u8-conv-from-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u8-conv-to-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u8-strconv-from-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniconv/$(DEPDIR)/test-u8-strconv-to-enc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-bidi_byname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-bidi_name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-bidi_of.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-bidi_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-block_list.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-block_of.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-block_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_C.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Cc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Cf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Cn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Co.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Cs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_L.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Ll.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Lm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Lo.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Lt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Lu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_M.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Mc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Me.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Mn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_N.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Nd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Nl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_No.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_P.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Pc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Pd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Pe.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Pf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Pi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Po.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Ps.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_S.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Sc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Sk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Sm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_So.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Z.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Zl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Zp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_Zs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_and.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_and_not.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_byname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_none.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_of.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_or.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-categ_test_withtable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-combining.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_alnum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_alpha.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_blank.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_cntrl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_digit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_graph.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_lower.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_print.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_punct.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_space.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_upper.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-ctype_xdigit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-decdigit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-digit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-mirror.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-numeric.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_alphabetic.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ascii_hex_digit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_arabic_digit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_arabic_right_to_left.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_block_separator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_boundary_neutral.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_common_separator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_control.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_embedding_or_override.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_eur_num_separator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_eur_num_terminator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_european_digit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_hebrew_right_to_left.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_left_to_right.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_non_spacing_mark.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_other_neutral.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_pdf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_segment_separator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_bidi_whitespace.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_byname.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_combining.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_composite.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_currency_symbol.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_dash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_decimal_digit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_default_ignorable_code_point.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_deprecated.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_diacritic.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_extender.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_format_control.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_grapheme_base.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_grapheme_extend.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_grapheme_link.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_hex_digit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_hyphen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_id_continue.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_id_start.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ideographic.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ids_binary_operator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ids_trinary_operator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_ignorable_control.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_iso_control.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_join_control.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_left_of_pair.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_line_separator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_logical_order_exception.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_lowercase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_math.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_non_break.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_not_a_character.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_numeric.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_other_alphabetic.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_other_default_ignorable_code_point.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_other_grapheme_extend.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_other_id_continue.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_other_id_start.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_other_lowercase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_other_math.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_other_uppercase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_paired_punctuation.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_paragraph_separator.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_pattern_syntax.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_pattern_white_space.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_private_use.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_punctuation.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_quotation_mark.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_radical.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_sentence_terminal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_soft_dotted.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_space.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_terminal_punctuation.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_titlecase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_unassigned_code_value.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_unified_ideograph.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_uppercase.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_variation_selector.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_white_space.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_xid_continue.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_xid_start.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-pr_zero_width.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-scripts.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-sy_c_ident.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-sy_c_whitespace.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-sy_java_ident.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unictype/$(DEPDIR)/test-sy_java_whitespace.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-u16-possible-linebreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-u16-width-linebreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-u32-possible-linebreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-u32-width-linebreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-u8-possible-linebreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-u8-width-linebreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-ulc-possible-linebreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unilbrk/$(DEPDIR)/test-ulc-width-linebreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniname/$(DEPDIR)/test-uninames.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-canonical-decomposition.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-compat-decomposition.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-composition.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-decomposing-form.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-decomposition.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-nfc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-nfd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-nfkc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-nfkd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u16-nfc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u16-nfd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u16-nfkc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u16-nfkd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u16-normcmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u16-normcoll.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u32-nfc-big.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u32-nfc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u32-nfd-big.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u32-nfd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u32-nfkc-big.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u32-nfkc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u32-nfkd-big.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u32-nfkd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u32-normalize-big.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u32-normcmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u32-normcoll.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u8-nfc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u8-nfd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u8-nfkc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u8-nfkd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u8-normcmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-u8-normcoll.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uninorm/$(DEPDIR)/test-uninorm-filter-nfc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u16-asnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u16-vasnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u16-vasnprintf2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u16-vasnprintf3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u16-vasprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u16-vsnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u16-vsprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u32-asnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u32-vasnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u32-vasnprintf2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u32-vasnprintf3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u32-vasprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u32-vsnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u32-vsprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u8-asnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u8-vasnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u8-vasnprintf2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u8-vasnprintf3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u8-vasprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u8-vsnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-u8-vsprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-ulc-asnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-ulc-vasnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-ulc-vasnprintf2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-ulc-vasnprintf3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-ulc-vasprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-ulc-vsnprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@unistdio/$(DEPDIR)/test-ulc-vsprintf1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwbrk/$(DEPDIR)/test-u16-wordbreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwbrk/$(DEPDIR)/test-u32-wordbreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwbrk/$(DEPDIR)/test-u8-wordbreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwbrk/$(DEPDIR)/test-ulc-wordbreaks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-u16-strwidth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-u16-width.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-u32-strwidth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-u32-width.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-u8-strwidth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-u8-width.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-uc_width.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/test-uc_width2.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list=' $(TESTS) '; \ + $(am__tty_colors); \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + col=$$red; res=XPASS; \ + ;; \ + *) \ + col=$$grn; res=PASS; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$tst[\ \ ]*) \ + xfail=`expr $$xfail + 1`; \ + col=$$lgn; res=XFAIL; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + col=$$red; res=FAIL; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + col=$$blu; res=SKIP; \ + fi; \ + echo "$${col}$$res$${std}: $$tst"; \ + done; \ + if test "$$all" -eq 1; then \ + tests="test"; \ + All=""; \ + else \ + tests="tests"; \ + All="All "; \ + fi; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="$$All$$all $$tests passed"; \ + else \ + if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ + banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all $$tests failed"; \ + else \ + if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ + banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + if test "$$skip" -eq 1; then \ + skipped="($$skip test was not run)"; \ + else \ + skipped="($$skip tests were not run)"; \ + fi; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + if test "$$failed" -eq 0; then \ + echo "$$grn$$dashes"; \ + else \ + echo "$$red$$dashes"; \ + fi; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes$$std"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_LIBRARIES) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f unicase/$(DEPDIR)/$(am__dirstamp) + -rm -f unicase/$(am__dirstamp) + -rm -f uniconv/$(DEPDIR)/$(am__dirstamp) + -rm -f uniconv/$(am__dirstamp) + -rm -f unictype/$(DEPDIR)/$(am__dirstamp) + -rm -f unictype/$(am__dirstamp) + -rm -f unilbrk/$(DEPDIR)/$(am__dirstamp) + -rm -f unilbrk/$(am__dirstamp) + -rm -f uniname/$(DEPDIR)/$(am__dirstamp) + -rm -f uniname/$(am__dirstamp) + -rm -f uninorm/$(DEPDIR)/$(am__dirstamp) + -rm -f uninorm/$(am__dirstamp) + -rm -f unistdio/$(DEPDIR)/$(am__dirstamp) + -rm -f unistdio/$(am__dirstamp) + -rm -f uniwbrk/$(DEPDIR)/$(am__dirstamp) + -rm -f uniwbrk/$(am__dirstamp) + -rm -f uniwidth/$(DEPDIR)/$(am__dirstamp) + -rm -f uniwidth/$(am__dirstamp) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ + clean-libtool clean-local clean-noinstLIBRARIES \ + clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-recursive + -rm -rf ./$(DEPDIR) unicase/$(DEPDIR) uniconv/$(DEPDIR) unictype/$(DEPDIR) unilbrk/$(DEPDIR) uniname/$(DEPDIR) uninorm/$(DEPDIR) unistdio/$(DEPDIR) uniwbrk/$(DEPDIR) uniwidth/$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf ./$(DEPDIR) unicase/$(DEPDIR) uniconv/$(DEPDIR) unictype/$(DEPDIR) unilbrk/$(DEPDIR) uniname/$(DEPDIR) uninorm/$(DEPDIR) unistdio/$(DEPDIR) uniwbrk/$(DEPDIR) uniwidth/$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool mostlyclean-local + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + check-am ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-TESTS check-am clean \ + clean-checkLIBRARIES clean-checkPROGRAMS clean-generic \ + clean-libtool clean-local clean-noinstLIBRARIES \ + clean-noinstPROGRAMS ctags ctags-recursive distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool mostlyclean-local pdf pdf-am ps ps-am tags \ + tags-recursive uninstall uninstall-am + + +# We need the following in order to create when the system +# doesn't have one that provides all definitions. +locale.h: locale.in.h + rm -f $@-t $@ + { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ + sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ + -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ + < $(srcdir)/locale.in.h; \ + } > $@-t + mv $@-t $@ + +# Clean up after Solaris cc. +clean-local: + rm -rf SunWS_cache + +mostlyclean-local: mostlyclean-generic + @for dir in '' $(MOSTLYCLEANDIRS); do \ + if test -n "$$dir" && test -d $$dir; then \ + echo "rmdir $$dir"; rmdir $$dir; \ + fi; \ + done; \ + : + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/error.c b/tests/error.c new file mode 100644 index 00000000..3177bd5d --- /dev/null +++ b/tests/error.c @@ -0,0 +1,338 @@ +/* Error handler for noninteractive utilities + Copyright (C) 1990-1998, 2000-2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by David MacKenzie . */ + +#if !_LIBC +# include +#endif + +#include "error.h" + +#include +#include +#include +#include + +#if !_LIBC && ENABLE_NLS +# include "gettext.h" +# define _(msgid) gettext (msgid) +#endif + +#ifdef _LIBC +# include +# include +# include +# include +# define mbsrtowcs __mbsrtowcs +#endif + +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + +#ifndef _ +# define _(String) String +#endif + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +void (*error_print_progname) (void); + +/* This variable is incremented each time `error' is called. */ +unsigned int error_message_count; + +#ifdef _LIBC +/* In the GNU C library, there is a predefined variable for this. */ + +# define program_name program_invocation_name +# include +# include +# include + +/* In GNU libc we want do not want to use the common name `error' directly. + Instead make it a weak alias. */ +extern void __error (int status, int errnum, const char *message, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); +extern void __error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, + ...) + __attribute__ ((__format__ (__printf__, 5, 6)));; +# define error __error +# define error_at_line __error_at_line + +# include +# define fflush(s) INTUSE(_IO_fflush) (s) +# undef putc +# define putc(c, fp) INTUSE(_IO_putc) (c, fp) + +# include + +#else /* not _LIBC */ + +# if !HAVE_DECL_STRERROR_R && STRERROR_R_CHAR_P +# ifndef HAVE_DECL_STRERROR_R +"this configure-time declaration test was not run" +# endif +char *strerror_r (); +# endif + +/* The calling program should define program_name and set it to the + name of the executing program. */ +extern char *program_name; + +# if HAVE_STRERROR_R || defined strerror_r +# define __strerror_r strerror_r +# endif /* HAVE_STRERROR_R || defined strerror_r */ +#endif /* not _LIBC */ + +static void +print_errno_message (int errnum) +{ + char const *s; + +#if defined HAVE_STRERROR_R || _LIBC + char errbuf[1024]; +# if STRERROR_R_CHAR_P || _LIBC + s = __strerror_r (errnum, errbuf, sizeof errbuf); +# else + if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) + s = errbuf; + else + s = 0; +# endif +#else + s = strerror (errnum); +#endif + +#if !_LIBC + if (! s) + s = _("Unknown system error"); +#endif + +#if _LIBC + __fxprintf (NULL, ": %s", s); +#else + fprintf (stderr, ": %s", s); +#endif +} + +static void +error_tail (int status, int errnum, const char *message, va_list args) +{ +#if _LIBC + if (_IO_fwide (stderr, 0) > 0) + { +# define ALLOCA_LIMIT 2000 + size_t len = strlen (message) + 1; + wchar_t *wmessage = NULL; + mbstate_t st; + size_t res; + const char *tmp; + bool use_malloc = false; + + while (1) + { + if (__libc_use_alloca (len * sizeof (wchar_t))) + wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); + else + { + if (!use_malloc) + wmessage = NULL; + + wchar_t *p = (wchar_t *) realloc (wmessage, + len * sizeof (wchar_t)); + if (p == NULL) + { + free (wmessage); + fputws_unlocked (L"out of memory\n", stderr); + return; + } + wmessage = p; + use_malloc = true; + } + + memset (&st, '\0', sizeof (st)); + tmp = message; + + res = mbsrtowcs (wmessage, &tmp, len, &st); + if (res != len) + break; + + if (__builtin_expect (len >= SIZE_MAX / 2, 0)) + { + /* This really should not happen if everything is fine. */ + res = (size_t) -1; + break; + } + + len *= 2; + } + + if (res == (size_t) -1) + { + /* The string cannot be converted. */ + if (use_malloc) + { + free (wmessage); + use_malloc = false; + } + wmessage = (wchar_t *) L"???"; + } + + __vfwprintf (stderr, wmessage, args); + + if (use_malloc) + free (wmessage); + } + else +#endif + vfprintf (stderr, message, args); + va_end (args); + + ++error_message_count; + if (errnum) + print_errno_message (errnum); +#if _LIBC + __fxprintf (NULL, "\n"); +#else + putc ('\n', stderr); +#endif + fflush (stderr); + if (status) + exit (status); +} + + +/* Print the program name and error message MESSAGE, which is a printf-style + format string with optional args. + If ERRNUM is nonzero, print its corresponding system error message. + Exit with status STATUS if it is nonzero. */ +void +error (int status, int errnum, const char *message, ...) +{ + va_list args; + +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + + fflush (stdout); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s: ", program_name); +#else + fprintf (stderr, "%s: ", program_name); +#endif + } + + va_start (args, message); + error_tail (status, errnum, message, args); + +#ifdef _LIBC + _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif +#endif +} + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +int error_one_per_line; + +void +error_at_line (int status, int errnum, const char *file_name, + unsigned int line_number, const char *message, ...) +{ + va_list args; + + if (error_one_per_line) + { + static const char *old_file_name; + static unsigned int old_line_number; + + if (old_line_number == line_number + && (file_name == old_file_name + || strcmp (old_file_name, file_name) == 0)) + /* Simply return and print nothing. */ + return; + + old_file_name = file_name; + old_line_number = line_number; + } + +#if defined _LIBC && defined __libc_ptf_call + /* We do not want this call to be cut short by a thread + cancellation. Therefore disable cancellation for now. */ + int state = PTHREAD_CANCEL_ENABLE; + __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), + 0); +#endif + + fflush (stdout); +#ifdef _LIBC + _IO_flockfile (stderr); +#endif + if (error_print_progname) + (*error_print_progname) (); + else + { +#if _LIBC + __fxprintf (NULL, "%s:", program_name); +#else + fprintf (stderr, "%s:", program_name); +#endif + } + +#if _LIBC + __fxprintf (NULL, file_name != NULL ? "%s:%d: " : " ", + file_name, line_number); +#else + fprintf (stderr, file_name != NULL ? "%s:%d: " : " ", + file_name, line_number); +#endif + + va_start (args, message); + error_tail (status, errnum, message, args); + +#ifdef _LIBC + _IO_funlockfile (stderr); +# ifdef __libc_ptf_call + __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); +# endif +#endif +} + +#ifdef _LIBC +/* Make the weak alias. */ +# undef error +# undef error_at_line +weak_alias (__error, error) +weak_alias (__error_at_line, error_at_line) +#endif diff --git a/tests/error.h b/tests/error.h new file mode 100644 index 00000000..6d496811 --- /dev/null +++ b/tests/error.h @@ -0,0 +1,65 @@ +/* Declaration for error-reporting function + Copyright (C) 1995, 1996, 1997, 2003, 2006, 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _ERROR_H +#define _ERROR_H 1 + +#ifndef __attribute__ +/* This feature is available in gcc versions 2.5 and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) +# define __attribute__(Spec) /* empty */ +# endif +/* The __-protected variants of `format' and `printf' attributes + are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) +# define __format__ format +# define __printf__ printf +# endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* Print a message with `fprintf (stderr, FORMAT, ...)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with `exit (STATUS)'. */ + +extern void error (int __status, int __errnum, const char *__format, ...) + __attribute__ ((__format__ (__printf__, 3, 4))); + +extern void error_at_line (int __status, int __errnum, const char *__fname, + unsigned int __lineno, const char *__format, ...) + __attribute__ ((__format__ (__printf__, 5, 6))); + +/* If NULL, error will flush stdout, then print on stderr the program + name, a colon and a space. Otherwise, error will call this + function without parameters instead. */ +extern void (*error_print_progname) (void); + +/* This variable is incremented each time `error' is called. */ +extern unsigned int error_message_count; + +/* Sometimes we want to have at most one error per line. This + variable controls whether this mode is selected or not. */ +extern int error_one_per_line; + +#ifdef __cplusplus +} +#endif + +#endif /* error.h */ diff --git a/tests/exitfail.c b/tests/exitfail.c new file mode 100644 index 00000000..6d1fe4ae --- /dev/null +++ b/tests/exitfail.c @@ -0,0 +1,24 @@ +/* Failure exit status + + Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "exitfail.h" + +#include + +int volatile exit_failure = EXIT_FAILURE; diff --git a/tests/exitfail.h b/tests/exitfail.h new file mode 100644 index 00000000..713f2591 --- /dev/null +++ b/tests/exitfail.h @@ -0,0 +1,18 @@ +/* Failure exit status + + Copyright (C) 2002 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +extern int volatile exit_failure; diff --git a/tests/gettext.h b/tests/gettext.h new file mode 100644 index 00000000..8cf2dca0 --- /dev/null +++ b/tests/gettext.h @@ -0,0 +1,279 @@ +/* Convenience header for conditional use of GNU . + Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +#ifndef _LIBGETTEXT_H +#define _LIBGETTEXT_H 1 + +/* NLS can be disabled through the configure --disable-nls option. */ +#if ENABLE_NLS + +/* Get declarations of GNU message catalog functions. */ +# include + +/* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by + the gettext() and ngettext() macros. This is an alternative to calling + textdomain(), and is useful for libraries. */ +# ifdef DEFAULT_TEXT_DOMAIN +# undef gettext +# define gettext(Msgid) \ + dgettext (DEFAULT_TEXT_DOMAIN, Msgid) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) +# endif + +#else + +/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which + chokes if dcgettext is defined as a macro. So include it now, to make + later inclusions of a NOP. We don't include + as well because people using "gettext.h" will not include , + and also including would fail on SunOS 4, whereas + is OK. */ +#if defined(__sun) +# include +#endif + +/* Many header files from the libstdc++ coming with g++ 3.3 or newer include + , which chokes if dcgettext is defined as a macro. So include + it now, to make later inclusions of a NOP. */ +#if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) +# include +# if (__GLIBC__ >= 2) || _GLIBCXX_HAVE_LIBINTL_H +# include +# endif +#endif + +/* Disabled NLS. + The casts to 'const char *' serve the purpose of producing warnings + for invalid uses of the value returned from these functions. + On pre-ANSI systems without 'const', the config.h file is supposed to + contain "#define const". */ +# undef gettext +# define gettext(Msgid) ((const char *) (Msgid)) +# undef dgettext +# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) +# undef dcgettext +# define dcgettext(Domainname, Msgid, Category) \ + ((void) (Category), dgettext (Domainname, Msgid)) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + ((N) == 1 \ + ? ((void) (Msgid2), (const char *) (Msgid1)) \ + : ((void) (Msgid1), (const char *) (Msgid2))) +# undef dngettext +# define dngettext(Domainname, Msgid1, Msgid2, N) \ + ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) +# undef dcngettext +# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ + ((void) (Category), dngettext(Domainname, Msgid1, Msgid2, N)) +# undef textdomain +# define textdomain(Domainname) ((const char *) (Domainname)) +# undef bindtextdomain +# define bindtextdomain(Domainname, Dirname) \ + ((void) (Domainname), (const char *) (Dirname)) +# undef bind_textdomain_codeset +# define bind_textdomain_codeset(Domainname, Codeset) \ + ((void) (Domainname), (const char *) (Codeset)) + +#endif + +/* A pseudo function call that serves as a marker for the automated + extraction of messages, but does not call gettext(). The run-time + translation is done at a different place in the code. + The argument, String, should be a literal string. Concatenated strings + and other string expressions won't work. + The macro's expansion is not parenthesized, so that it is suitable as + initializer for static 'char[]' or 'const char[]' variables. */ +#define gettext_noop(String) String + +/* The separator between msgctxt and msgid in a .mo file. */ +#define GETTEXT_CONTEXT_GLUE "\004" + +/* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a + MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be + short and rarely need to change. + The letter 'p' stands for 'particular' or 'special'. */ +#ifdef DEFAULT_TEXT_DOMAIN +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#else +# define pgettext(Msgctxt, Msgid) \ + pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#endif +#define dpgettext(Domainname, Msgctxt, Msgid) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) +#define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ + pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) +#ifdef DEFAULT_TEXT_DOMAIN +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#else +# define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#endif +#define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ + npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +pgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + int category) +{ + const char *translation = dcgettext (domain, msg_ctxt_id, category); + if (translation == msg_ctxt_id) + return msgid; + else + return translation; +} + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +npgettext_aux (const char *domain, + const char *msg_ctxt_id, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + const char *translation = + dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); + if (translation == msg_ctxt_id || translation == msgid_plural) + return (n == 1 ? msgid : msgid_plural); + else + return translation; +} + +/* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID + can be arbitrary expressions. But for string literals these macros are + less efficient than those above. */ + +#include + +#define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS \ + (((__GNUC__ >= 3 || __GNUG__ >= 2) && !__STRICT_ANSI__) \ + /* || __STDC_VERSION__ >= 199901L */ ) + +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS +#include +#endif + +#define pgettext_expr(Msgctxt, Msgid) \ + dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) +#define dpgettext_expr(Domainname, Msgctxt, Msgid) \ + dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcgettext (domain, msg_ctxt_id, category); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (translation != msg_ctxt_id) + return translation; + } + return msgid; +} + +#define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) +#define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ + dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) + +#ifdef __GNUC__ +__inline +#else +#ifdef __cplusplus +inline +#endif +#endif +static const char * +dcnpgettext_expr (const char *domain, + const char *msgctxt, const char *msgid, + const char *msgid_plural, unsigned long int n, + int category) +{ + size_t msgctxt_len = strlen (msgctxt) + 1; + size_t msgid_len = strlen (msgid) + 1; + const char *translation; +#if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + char msg_ctxt_id[msgctxt_len + msgid_len]; +#else + char buf[1024]; + char *msg_ctxt_id = + (msgctxt_len + msgid_len <= sizeof (buf) + ? buf + : (char *) malloc (msgctxt_len + msgid_len)); + if (msg_ctxt_id != NULL) +#endif + { + memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); + msg_ctxt_id[msgctxt_len - 1] = '\004'; + memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); + translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); +#if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS + if (msg_ctxt_id != buf) + free (msg_ctxt_id); +#endif + if (!(translation == msg_ctxt_id || translation == msgid_plural)) + return translation; + } + return (n == 1 ? msgid : msgid_plural); +} + +#endif /* _LIBGETTEXT_H */ diff --git a/tests/intprops.h b/tests/intprops.h new file mode 100644 index 00000000..002161ee --- /dev/null +++ b/tests/intprops.h @@ -0,0 +1,77 @@ +/* intprops.h -- properties of integer types + + Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Paul Eggert. */ + +#include + +/* The extra casts in the following macros work around compiler bugs, + e.g., in Cray C 5.0.3.0. */ + +/* True if the arithmetic type T is an integer type. bool counts as + an integer. */ +#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) + +/* True if negative values of the signed integer type T use two's + complement, ones' complement, or signed magnitude representation, + respectively. Much GNU code assumes two's complement, but some + people like to be portable to all possible C hosts. */ +#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) +#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) +#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) + +/* True if the arithmetic type T is signed. */ +#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) + +/* The maximum and minimum values for the integer type T. These + macros have undefined behavior if T is signed and has padding bits. + If this is a problem for you, please let us know how to fix it for + your host. */ +#define TYPE_MINIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) 0 \ + : TYPE_SIGNED_MAGNITUDE (t) \ + ? ~ (t) 0 \ + : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) +#define TYPE_MAXIMUM(t) \ + ((t) (! TYPE_SIGNED (t) \ + ? (t) -1 \ + : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))) + +/* Return zero if T can be determined to be an unsigned type. + Otherwise, return 1. + When compiling with GCC, INT_STRLEN_BOUND uses this macro to obtain a + tighter bound. Otherwise, it overestimates the true bound by one byte + when applied to unsigned types of size 2, 4, 16, ... bytes. + The symbol signed_type_or_expr__ is private to this header file. */ +#if __GNUC__ >= 2 +# define signed_type_or_expr__(t) TYPE_SIGNED (__typeof__ (t)) +#else +# define signed_type_or_expr__(t) 1 +#endif + +/* Bound on length of the string representing an integer type or expression T. + Subtract 1 for the sign bit if T is signed; log10 (2.0) < 146/485; + add 1 for integer division truncation; add 1 more for a minus sign + if needed. */ +#define INT_STRLEN_BOUND(t) \ + ((sizeof (t) * CHAR_BIT - signed_type_or_expr__ (t)) * 146 / 485 \ + + signed_type_or_expr__ (t) + 1) + +/* Bound on buffer size needed to represent an integer type or expression T, + including the terminating null. */ +#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) diff --git a/tests/locale.in.h b/tests/locale.in.h new file mode 100644 index 00000000..10629f6c --- /dev/null +++ b/tests/locale.in.h @@ -0,0 +1,36 @@ +/* A POSIX . + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _GL_LOCALE_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif + +/* The include_next requires a split double-inclusion guard. */ +#@INCLUDE_NEXT@ @NEXT_LOCALE_H@ + +#ifndef _GL_LOCALE_H +#define _GL_LOCALE_H + +/* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C. + On systems that don't define it, use the same value as GNU libintl. */ +#if !defined LC_MESSAGES +# define LC_MESSAGES 1729 +#endif + +#endif /* _GL_LOCALE_H */ +#endif /* _GL_LOCALE_H */ diff --git a/tests/nan.h b/tests/nan.h new file mode 100644 index 00000000..8aa8bf00 --- /dev/null +++ b/tests/nan.h @@ -0,0 +1,60 @@ +/* Macros for not-a-number. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +/* NaNf () returns a 'float' not-a-number. */ + +/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +#ifdef __DECC +static float +NaNf () +{ + static float zero = 0.0f; + return zero / zero; +} +#else +# define NaNf() (0.0f / 0.0f) +#endif + + +/* NaNd () returns a 'double' not-a-number. */ + +/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ +#ifdef __DECC +static double +NaNd () +{ + static double zero = 0.0; + return zero / zero; +} +#else +# define NaNd() (0.0 / 0.0) +#endif + + +/* NaNl () returns a 'long double' not-a-number. */ + +/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the + runtime type conversion. */ +#ifdef __sgi +static long double NaNl () +{ + double zero = 0.0; + return zero / zero; +} +#else +# define NaNl() (0.0L / 0.0L) +#endif diff --git a/tests/progname.c b/tests/progname.c new file mode 100644 index 00000000..9854b5e7 --- /dev/null +++ b/tests/progname.c @@ -0,0 +1,63 @@ +/* Program name management. + Copyright (C) 2001-2003, 2005-2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + +#include + +/* Specification. */ +#undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */ +#include "progname.h" + +#include + + +/* String containing name the program is called with. + To be initialized by main(). */ +const char *program_name = NULL; + +/* Set program_name, based on argv[0]. */ +void +set_program_name (const char *argv0) +{ + /* libtool creates a temporary executable whose name is sometimes prefixed + with "lt-" (depends on the platform). It also makes argv[0] absolute. + But the name of the temporary executable is a detail that should not be + visible to the end user and to the test suite. + Remove this "/.libs/" or "/.libs/lt-" prefix here. */ + const char *slash; + const char *base; + + slash = strrchr (argv0, '/'); + base = (slash != NULL ? slash + 1 : argv0); + if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0) + { + argv0 = base; + if (strncmp (base, "lt-", 3) == 0) + argv0 = base + 3; + } + + /* But don't strip off a leading / in general, because when the user + runs + /some/hidden/place/bin/cp foo foo + he should get the error message + /some/hidden/place/bin/cp: `foo' and `foo' are the same file + not + cp: `foo' and `foo' are the same file + */ + + program_name = argv0; +} diff --git a/tests/progname.h b/tests/progname.h new file mode 100644 index 00000000..82615c6b --- /dev/null +++ b/tests/progname.h @@ -0,0 +1,60 @@ +/* Program name management. + Copyright (C) 2001-2004, 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2001. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _PROGNAME_H +#define _PROGNAME_H + +/* Programs using this file should do the following in main(): + set_program_name (argv[0]); + */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* String containing name the program is called with. */ +extern const char *program_name; + +/* Set program_name, based on argv[0]. */ +extern void set_program_name (const char *argv0); + +#if ENABLE_RELOCATABLE + +/* Set program_name, based on argv[0], and original installation prefix and + directory, for relocatability. */ +extern void set_program_name_and_installdir (const char *argv0, + const char *orig_installprefix, + const char *orig_installdir); +#undef set_program_name +#define set_program_name(ARG0) \ + set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) + +/* Return the full pathname of the current executable, based on the earlier + call to set_program_name_and_installdir. Return NULL if unknown. */ +extern char *get_full_program_name (void); + +#endif + + +#ifdef __cplusplus +} +#endif + + +#endif /* _PROGNAME_H */ diff --git a/tests/setenv.c b/tests/setenv.c new file mode 100644 index 00000000..83b52b88 --- /dev/null +++ b/tests/setenv.c @@ -0,0 +1,330 @@ +/* Copyright (C) 1992,1995-1999,2000-2003,2005-2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#if !_LIBC +# include +#endif +#include + +/* Specification. */ +#include + +#include +#ifndef __set_errno +# define __set_errno(ev) ((errno) = (ev)) +#endif + +#include +#if _LIBC || HAVE_UNISTD_H +# include +#endif + +#if _LIBC || !HAVE_SETENV + +#if !_LIBC +# include "malloca.h" +#endif + +#if !_LIBC +# define __environ environ +#endif + +#if _LIBC +/* This lock protects against simultaneous modifications of `environ'. */ +# include +__libc_lock_define_initialized (static, envlock) +# define LOCK __libc_lock_lock (envlock) +# define UNLOCK __libc_lock_unlock (envlock) +#else +# define LOCK +# define UNLOCK +#endif + +/* In the GNU C library we must keep the namespace clean. */ +#ifdef _LIBC +# define setenv __setenv +# define clearenv __clearenv +# define tfind __tfind +# define tsearch __tsearch +#endif + +/* In the GNU C library implementation we try to be more clever and + allow arbitrarily many changes of the environment given that the used + values are from a small set. Outside glibc this will eat up all + memory after a while. */ +#if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \ + && defined __GNUC__) +# define USE_TSEARCH 1 +# include +typedef int (*compar_fn_t) (const void *, const void *); + +/* This is a pointer to the root of the search tree with the known + values. */ +static void *known_values; + +# define KNOWN_VALUE(Str) \ + ({ \ + void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \ + value != NULL ? *(char **) value : NULL; \ + }) +# define STORE_VALUE(Str) \ + tsearch (Str, &known_values, (compar_fn_t) strcmp) + +#else +# undef USE_TSEARCH + +# define KNOWN_VALUE(Str) NULL +# define STORE_VALUE(Str) do { } while (0) + +#endif + + +/* If this variable is not a null pointer we allocated the current + environment. */ +static char **last_environ; + + +/* This function is used by `setenv' and `putenv'. The difference between + the two functions is that for the former must create a new string which + is then placed in the environment, while the argument of `putenv' + must be used directly. This is all complicated by the fact that we try + to reuse values once generated for a `setenv' call since we can never + free the strings. */ +int +__add_to_environ (const char *name, const char *value, const char *combined, + int replace) +{ + register char **ep; + register size_t size; + const size_t namelen = strlen (name); + const size_t vallen = value != NULL ? strlen (value) + 1 : 0; + + LOCK; + + /* We have to get the pointer now that we have the lock and not earlier + since another thread might have created a new environment. */ + ep = __environ; + + size = 0; + if (ep != NULL) + { + for (; *ep != NULL; ++ep) + if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') + break; + else + ++size; + } + + if (ep == NULL || *ep == NULL) + { + char **new_environ; +#ifdef USE_TSEARCH + char *new_value; +#endif + + /* We allocated this space; we can extend it. */ + new_environ = + (char **) (last_environ == NULL + ? malloc ((size + 2) * sizeof (char *)) + : realloc (last_environ, (size + 2) * sizeof (char *))); + if (new_environ == NULL) + { + UNLOCK; + return -1; + } + + /* If the whole entry is given add it. */ + if (combined != NULL) + /* We must not add the string to the search tree since it belongs + to the user. */ + new_environ[size] = (char *) combined; + else + { + /* See whether the value is already known. */ +#ifdef USE_TSEARCH +# ifdef _LIBC + new_value = (char *) alloca (namelen + 1 + vallen); + __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), + value, vallen); +# else + new_value = (char *) malloca (namelen + 1 + vallen); + if (new_value == NULL) + { + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + memcpy (new_value, name, namelen); + new_value[namelen] = '='; + memcpy (&new_value[namelen + 1], value, vallen); +# endif + + new_environ[size] = KNOWN_VALUE (new_value); + if (new_environ[size] == NULL) +#endif + { + new_environ[size] = (char *) malloc (namelen + 1 + vallen); + if (new_environ[size] == NULL) + { +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + +#ifdef USE_TSEARCH + memcpy (new_environ[size], new_value, namelen + 1 + vallen); +#else + memcpy (new_environ[size], name, namelen); + new_environ[size][namelen] = '='; + memcpy (&new_environ[size][namelen + 1], value, vallen); +#endif + /* And save the value now. We cannot do this when we remove + the string since then we cannot decide whether it is a + user string or not. */ + STORE_VALUE (new_environ[size]); + } +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + } + + if (__environ != last_environ) + memcpy ((char *) new_environ, (char *) __environ, + size * sizeof (char *)); + + new_environ[size + 1] = NULL; + + last_environ = __environ = new_environ; + } + else if (replace) + { + char *np; + + /* Use the user string if given. */ + if (combined != NULL) + np = (char *) combined; + else + { +#ifdef USE_TSEARCH + char *new_value; +# ifdef _LIBC + new_value = alloca (namelen + 1 + vallen); + __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), + value, vallen); +# else + new_value = malloca (namelen + 1 + vallen); + if (new_value == NULL) + { + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + memcpy (new_value, name, namelen); + new_value[namelen] = '='; + memcpy (&new_value[namelen + 1], value, vallen); +# endif + + np = KNOWN_VALUE (new_value); + if (np == NULL) +#endif + { + np = malloc (namelen + 1 + vallen); + if (np == NULL) + { +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + __set_errno (ENOMEM); + UNLOCK; + return -1; + } + +#ifdef USE_TSEARCH + memcpy (np, new_value, namelen + 1 + vallen); +#else + memcpy (np, name, namelen); + np[namelen] = '='; + memcpy (&np[namelen + 1], value, vallen); +#endif + /* And remember the value. */ + STORE_VALUE (np); + } +#if defined USE_TSEARCH && !defined _LIBC + freea (new_value); +#endif + } + + *ep = np; + } + + UNLOCK; + + return 0; +} + +int +setenv (const char *name, const char *value, int replace) +{ + return __add_to_environ (name, value, NULL, replace); +} + +/* The `clearenv' was planned to be added to POSIX.1 but probably + never made it. Nevertheless the POSIX.9 standard (POSIX bindings + for Fortran 77) requires this function. */ +int +clearenv (void) +{ + LOCK; + + if (__environ == last_environ && __environ != NULL) + { + /* We allocated this environment so we can free it. */ + free (__environ); + last_environ = NULL; + } + + /* Clear the environment pointer removes the whole environment. */ + __environ = NULL; + + UNLOCK; + + return 0; +} + +#ifdef _LIBC +static void +free_mem (void) +{ + /* Remove all traces. */ + clearenv (); + + /* Now remove the search tree. */ + __tdestroy (known_values, free); + known_values = NULL; +} +text_set_element (__libc_subfreeres, free_mem); + + +# undef setenv +# undef clearenv +weak_alias (__setenv, setenv) +weak_alias (__clearenv, clearenv) +#endif + +#endif /* _LIBC || !HAVE_SETENV */ diff --git a/tests/strerror.c b/tests/strerror.c new file mode 100644 index 00000000..dfe6c25f --- /dev/null +++ b/tests/strerror.c @@ -0,0 +1,347 @@ +/* strerror.c --- POSIX compatible system error routine + + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include + +#if REPLACE_STRERROR + +# include +# include + +# if GNULIB_defined_ESOCK /* native Windows platforms */ +# if HAVE_WINSOCK2_H +# include +# endif +# endif + +# include "intprops.h" + +# undef strerror +# if ! HAVE_DECL_STRERROR +# define strerror(n) NULL +# endif + +char * +rpl_strerror (int n) +{ + char const *msg = NULL; + /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ + switch (n) + { +# if GNULIB_defined_ETXTBSY + case ETXTBSY: + msg = "Text file busy"; + break; +# endif + +# if GNULIB_defined_ESOCK /* native Windows platforms */ + /* EWOULDBLOCK is the same as EAGAIN. */ + case EINPROGRESS: + msg = "Operation now in progress"; + break; + case EALREADY: + msg = "Operation already in progress"; + break; + case ENOTSOCK: + msg = "Socket operation on non-socket"; + break; + case EDESTADDRREQ: + msg = "Destination address required"; + break; + case EMSGSIZE: + msg = "Message too long"; + break; + case EPROTOTYPE: + msg = "Protocol wrong type for socket"; + break; + case ENOPROTOOPT: + msg = "Protocol not available"; + break; + case EPROTONOSUPPORT: + msg = "Protocol not supported"; + break; + case ESOCKTNOSUPPORT: + msg = "Socket type not supported"; + break; + case EOPNOTSUPP: + msg = "Operation not supported"; + break; + case EPFNOSUPPORT: + msg = "Protocol family not supported"; + break; + case EAFNOSUPPORT: + msg = "Address family not supported by protocol"; + break; + case EADDRINUSE: + msg = "Address already in use"; + break; + case EADDRNOTAVAIL: + msg = "Cannot assign requested address"; + break; + case ENETDOWN: + msg = "Network is down"; + break; + case ENETUNREACH: + msg = "Network is unreachable"; + break; + case ENETRESET: + msg = "Network dropped connection on reset"; + break; + case ECONNABORTED: + msg = "Software caused connection abort"; + break; + case ECONNRESET: + msg = "Connection reset by peer"; + break; + case ENOBUFS: + msg = "No buffer space available"; + break; + case EISCONN: + msg = "Transport endpoint is already connected"; + break; + case ENOTCONN: + msg = "Transport endpoint is not connected"; + break; + case ESHUTDOWN: + msg = "Cannot send after transport endpoint shutdown"; + break; + case ETOOMANYREFS: + msg = "Too many references: cannot splice"; + break; + case ETIMEDOUT: + msg = "Connection timed out"; + break; + case ECONNREFUSED: + msg = "Connection refused"; + break; + case ELOOP: + msg = "Too many levels of symbolic links"; + break; + case EHOSTDOWN: + msg = "Host is down"; + break; + case EHOSTUNREACH: + msg = "No route to host"; + break; + case EPROCLIM: + msg = "Too many processes"; + break; + case EUSERS: + msg = "Too many users"; + break; + case EDQUOT: + msg = "Disk quota exceeded"; + break; + case ESTALE: + msg = "Stale NFS file handle"; + break; + case EREMOTE: + msg = "Object is remote"; + break; +# if HAVE_WINSOCK2_H + /* WSA_INVALID_HANDLE maps to EBADF */ + /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ + /* WSA_INVALID_PARAMETER maps to EINVAL */ + case WSA_OPERATION_ABORTED: + msg = "Overlapped operation aborted"; + break; + case WSA_IO_INCOMPLETE: + msg = "Overlapped I/O event object not in signaled state"; + break; + case WSA_IO_PENDING: + msg = "Overlapped operations will complete later"; + break; + /* WSAEINTR maps to EINTR */ + /* WSAEBADF maps to EBADF */ + /* WSAEACCES maps to EACCES */ + /* WSAEFAULT maps to EFAULT */ + /* WSAEINVAL maps to EINVAL */ + /* WSAEMFILE maps to EMFILE */ + /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ + /* WSAEINPROGRESS is EINPROGRESS */ + /* WSAEALREADY is EALREADY */ + /* WSAENOTSOCK is ENOTSOCK */ + /* WSAEDESTADDRREQ is EDESTADDRREQ */ + /* WSAEMSGSIZE is EMSGSIZE */ + /* WSAEPROTOTYPE is EPROTOTYPE */ + /* WSAENOPROTOOPT is ENOPROTOOPT */ + /* WSAEPROTONOSUPPORT is EPROTONOSUPPORT */ + /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ + /* WSAEOPNOTSUPP is EOPNOTSUPP */ + /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ + /* WSAEAFNOSUPPORT is EAFNOSUPPORT */ + /* WSAEADDRINUSE is EADDRINUSE */ + /* WSAEADDRNOTAVAIL is EADDRNOTAVAIL */ + /* WSAENETDOWN is ENETDOWN */ + /* WSAENETUNREACH is ENETUNREACH */ + /* WSAENETRESET is ENETRESET */ + /* WSAECONNABORTED is ECONNABORTED */ + /* WSAECONNRESET is ECONNRESET */ + /* WSAENOBUFS is ENOBUFS */ + /* WSAEISCONN is EISCONN */ + /* WSAENOTCONN is ENOTCONN */ + /* WSAESHUTDOWN is ESHUTDOWN */ + /* WSAETOOMANYREFS is ETOOMANYREFS */ + /* WSAETIMEDOUT is ETIMEDOUT */ + /* WSAECONNREFUSED is ECONNREFUSED */ + /* WSAELOOP is ELOOP */ + /* WSAENAMETOOLONG maps to ENAMETOOLONG */ + /* WSAEHOSTDOWN is EHOSTDOWN */ + /* WSAEHOSTUNREACH is EHOSTUNREACH */ + /* WSAENOTEMPTY maps to ENOTEMPTY */ + /* WSAEPROCLIM is EPROCLIM */ + /* WSAEUSERS is EUSERS */ + /* WSAEDQUOT is EDQUOT */ + /* WSAESTALE is ESTALE */ + /* WSAEREMOTE is EREMOTE */ + case WSASYSNOTREADY: + msg = "Network subsystem is unavailable"; + break; + case WSAVERNOTSUPPORTED: + msg = "Winsock.dll version out of range"; + break; + case WSANOTINITIALISED: + msg = "Successful WSAStartup not yet performed"; + break; + case WSAEDISCON: + msg = "Graceful shutdown in progress"; + break; + case WSAENOMORE: case WSA_E_NO_MORE: + msg = "No more results"; + break; + case WSAECANCELLED: case WSA_E_CANCELLED: + msg = "Call was canceled"; + break; + case WSAEINVALIDPROCTABLE: + msg = "Procedure call table is invalid"; + break; + case WSAEINVALIDPROVIDER: + msg = "Service provider is invalid"; + break; + case WSAEPROVIDERFAILEDINIT: + msg = "Service provider failed to initialize"; + break; + case WSASYSCALLFAILURE: + msg = "System call failure"; + break; + case WSASERVICE_NOT_FOUND: + msg = "Service not found"; + break; + case WSATYPE_NOT_FOUND: + msg = "Class type not found"; + break; + case WSAEREFUSED: + msg = "Database query was refused"; + break; + case WSAHOST_NOT_FOUND: + msg = "Host not found"; + break; + case WSATRY_AGAIN: + msg = "Nonauthoritative host not found"; + break; + case WSANO_RECOVERY: + msg = "Nonrecoverable error"; + break; + case WSANO_DATA: + msg = "Valid name, no data record of requested type"; + break; + /* WSA_QOS_* omitted */ +# endif +# endif + +# if GNULIB_defined_ENOMSG + case ENOMSG: + msg = "No message of desired type"; + break; +# endif + +# if GNULIB_defined_EIDRM + case EIDRM: + msg = "Identifier removed"; + break; +# endif + +# if GNULIB_defined_ENOLINK + case ENOLINK: + msg = "Link has been severed"; + break; +# endif + +# if GNULIB_defined_EPROTO + case EPROTO: + msg = "Protocol error"; + break; +# endif + +# if GNULIB_defined_EMULTIHOP + case EMULTIHOP: + msg = "Multihop attempted"; + break; +# endif + +# if GNULIB_defined_EBADMSG + case EBADMSG: + msg = "Bad message"; + break; +# endif + +# if GNULIB_defined_EOVERFLOW + case EOVERFLOW: + msg = "Value too large for defined data type"; + break; +# endif + +# if GNULIB_defined_ENOTSUP + case ENOTSUP: + msg = "Not supported"; + break; +# endif + +# if GNULIB_defined_ESTALE + case ESTALE: + msg = "Stale NFS file handle"; + break; +# endif + +# if GNULIB_defined_ECANCELED + case ECANCELED: + msg = "Operation canceled"; + break; +# endif + } + + if (msg) + return (char *) msg; + + { + char *result = strerror (n); + + if (result == NULL || result[0] == '\0') + { + static char const fmt[] = "Unknown error (%d)"; + static char msg_buf[sizeof fmt + INT_STRLEN_BOUND (n)]; + sprintf (msg_buf, fmt, n); + return msg_buf; + } + + return result; + } +} + +#endif diff --git a/tests/test-alloca-opt.c b/tests/test-alloca-opt.c new file mode 100644 index 00000000..68d906d8 --- /dev/null +++ b/tests/test-alloca-opt.c @@ -0,0 +1,62 @@ +/* Test of optional automatic memory allocation. + Copyright (C) 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#if HAVE_ALLOCA + +static void +do_allocation (int n) +{ + void *ptr = alloca (n); + (void) ptr; +} + +void (*func) (int) = do_allocation; + +#endif + +int +main () +{ +#if HAVE_ALLOCA + int i; + + /* Repeat a lot of times, to make sure there's no memory leak. */ + for (i = 0; i < 100000; i++) + { + /* Try various values. + n = 0 gave a crash on Alpha with gcc-2.5.8. + Some versions of MacOS X have a stack size limit of 512 KB. */ + func (34); + func (134); + func (399); + func (510823); + func (129321); + func (0); + func (4070); + func (4095); + func (1); + func (16582); + } +#endif + + return 0; +} diff --git a/tests/test-array-mergesort.c b/tests/test-array-mergesort.c new file mode 100644 index 00000000..8a47b676 --- /dev/null +++ b/tests/test-array-mergesort.c @@ -0,0 +1,395 @@ +/* Test of stable-sorting of an array using mergesort. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +#include + +#include + +struct foo { double x; double index; }; +#define ELEMENT struct foo +#define COMPARE(a,b) ((a)->x < (b)->x ? -1 : (a)->x > (b)->x ? 1 : 0) +#define STATIC static +#include "array-mergesort.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define NMAX 257 +static const struct foo data[NMAX] = +{ + { 2, 0 }, + { 28, 1 }, + { 36, 2 }, + { 43, 3 }, + { 20, 4 }, + { 37, 5 }, + { 19, 6 }, + { 37, 7 }, + { 30, 8 }, + { 18, 9 }, + { 30, 10 }, + { 49, 11 }, + { 16, 12 }, + { 22, 13 }, + { 23, 14 }, + { 3, 15 }, + { 39, 16 }, + { 48, 17 }, + { 18, 18 }, + { 18, 19 }, + { 45, 20 }, + { 39, 21 }, + { 1, 22 }, + { 44, 23 }, + { 24, 24 }, + { 21, 25 }, + { 29, 26 }, + { 3, 27 }, + { 34, 28 }, + { 15, 29 }, + { 39, 30 }, + { 11, 31 }, + { 29, 32 }, + { 27, 33 }, + { 43, 34 }, + { 31, 35 }, + { 28, 36 }, + { 12, 37 }, + { 16, 38 }, + { 34, 39 }, + { 25, 40 }, + { 31, 41 }, + { 29, 42 }, + { 36, 43 }, + { 17, 44 }, + { 18, 45 }, + { 44, 46 }, + { 22, 47 }, + { 23, 48 }, + { 32, 49 }, + { 16, 50 }, + { 47, 51 }, + { 28, 52 }, + { 46, 53 }, + { 49, 54 }, + { 24, 55 }, + { 0, 56 }, + { 20, 57 }, + { 25, 58 }, + { 42, 59 }, + { 48, 60 }, + { 16, 61 }, + { 26, 62 }, + { 32, 63 }, + { 24, 64 }, + { 17, 65 }, + { 47, 66 }, + { 47, 67 }, + { 12, 68 }, + { 33, 69 }, + { 41, 70 }, + { 36, 71 }, + { 8, 72 }, + { 15, 73 }, + { 0, 74 }, + { 32, 75 }, + { 28, 76 }, + { 11, 77 }, + { 46, 78 }, + { 34, 79 }, + { 5, 80 }, + { 20, 81 }, + { 47, 82 }, + { 25, 83 }, + { 7, 84 }, + { 29, 85 }, + { 40, 86 }, + { 5, 87 }, + { 12, 88 }, + { 30, 89 }, + { 1, 90 }, + { 22, 91 }, + { 29, 92 }, + { 42, 93 }, + { 49, 94 }, + { 30, 95 }, + { 40, 96 }, + { 33, 97 }, + { 36, 98 }, + { 12, 99 }, + { 8, 100 }, + { 33, 101 }, + { 5, 102 }, + { 31, 103 }, + { 27, 104 }, + { 19, 105 }, + { 43, 106 }, + { 37, 107 }, + { 9, 108 }, + { 40, 109 }, + { 0, 110 }, + { 35, 111 }, + { 32, 112 }, + { 6, 113 }, + { 27, 114 }, + { 28, 115 }, + { 30, 116 }, + { 37, 117 }, + { 32, 118 }, + { 41, 119 }, + { 14, 120 }, + { 44, 121 }, + { 22, 122 }, + { 26, 123 }, + { 2, 124 }, + { 43, 125 }, + { 20, 126 }, + { 32, 127 }, + { 24, 128 }, + { 33, 129 }, + { 7, 130 }, + { 17, 131 }, + { 10, 132 }, + { 47, 133 }, + { 14, 134 }, + { 29, 135 }, + { 19, 136 }, + { 25, 137 }, + { 25, 138 }, + { 13, 139 }, + { 25, 140 }, + { 32, 141 }, + { 8, 142 }, + { 37, 143 }, + { 31, 144 }, + { 32, 145 }, + { 5, 146 }, + { 45, 147 }, + { 35, 148 }, + { 47, 149 }, + { 3, 150 }, + { 4, 151 }, + { 37, 152 }, + { 43, 153 }, + { 39, 154 }, + { 18, 155 }, + { 13, 156 }, + { 15, 157 }, + { 41, 158 }, + { 34, 159 }, + { 4, 160 }, + { 33, 161 }, + { 20, 162 }, + { 4, 163 }, + { 38, 164 }, + { 47, 165 }, + { 30, 166 }, + { 41, 167 }, + { 23, 168 }, + { 40, 169 }, + { 23, 170 }, + { 35, 171 }, + { 47, 172 }, + { 32, 173 }, + { 15, 174 }, + { 15, 175 }, + { 41, 176 }, + { 35, 177 }, + { 6, 178 }, + { 18, 179 }, + { 35, 180 }, + { 39, 181 }, + { 34, 182 }, + { 6, 183 }, + { 34, 184 }, + { 37, 185 }, + { 15, 186 }, + { 6, 187 }, + { 12, 188 }, + { 39, 189 }, + { 9, 190 }, + { 48, 191 }, + { 37, 192 }, + { 28, 193 }, + { 32, 194 }, + { 1, 195 }, + { 45, 196 }, + { 21, 197 }, + { 11, 198 }, + { 32, 199 }, + { 43, 200 }, + { 35, 201 }, + { 25, 202 }, + { 4, 203 }, + { 20, 204 }, + { 10, 205 }, + { 22, 206 }, + { 44, 207 }, + { 30, 208 }, + { 16, 209 }, + { 42, 210 }, + { 13, 211 }, + { 29, 212 }, + { 23, 213 }, + { 30, 214 }, + { 25, 215 }, + { 49, 216 }, + { 0, 217 }, + { 49, 218 }, + { 29, 219 }, + { 37, 220 }, + { 6, 221 }, + { 27, 222 }, + { 31, 223 }, + { 17, 224 }, + { 45, 225 }, + { 25, 226 }, + { 15, 227 }, + { 34, 228 }, + { 7, 229 }, + { 7, 230 }, + { 4, 231 }, + { 31, 232 }, + { 40, 233 }, + { 17, 234 }, + { 2, 235 }, + { 34, 236 }, + { 17, 237 }, + { 25, 238 }, + { 5, 239 }, + { 48, 240 }, + { 31, 241 }, + { 41, 242 }, + { 45, 243 }, + { 33, 244 }, + { 46, 245 }, + { 19, 246 }, + { 17, 247 }, + { 38, 248 }, + { 43, 249 }, + { 16, 250 }, + { 5, 251 }, + { 21, 252 }, + { 0, 253 }, + { 47, 254 }, + { 40, 255 }, + { 22, 256 } +}; + +static int +cmp_double (const void *a, const void *b) +{ + return (*(const double *)a < *(const double *)b ? -1 : + *(const double *)a > *(const double *)b ? 1 : + 0); +} + +int +main () +{ + size_t n; + + /* Test merge_sort_fromto. */ + for (n = 1; n <= NMAX; n++) + { + struct foo *dst; + struct foo *tmp; + double *qsort_result; + size_t i; + + dst = (struct foo *) malloc ((n + 1) * sizeof (struct foo)); + dst[n].x = 0x4A6A71FE; /* canary */ + tmp = (struct foo *) malloc ((n / 2 + 1) * sizeof (struct foo)); + tmp[n / 2].x = 0x587EF149; /* canary */ + + merge_sort_fromto (data, dst, n, tmp); + + /* Verify the canaries. */ + ASSERT (dst[n].x == 0x4A6A71FE); + ASSERT (tmp[n / 2].x == 0x587EF149); + + /* Verify the result. */ + qsort_result = (double *) malloc (n * sizeof (double)); + for (i = 0; i < n; i++) + qsort_result[i] = data[i].x; + qsort (qsort_result, n, sizeof (double), cmp_double); + for (i = 0; i < n; i++) + ASSERT (dst[i].x == qsort_result[i]); + + /* Verify the stability. */ + for (i = 0; i < n; i++) + if (i > 0 && dst[i - 1].x == dst[i].x) + ASSERT (dst[i - 1].index < dst[i].index); + + free (qsort_result); + free (tmp); + free (dst); + } + + /* Test merge_sort_inplace. */ + for (n = 1; n <= NMAX; n++) + { + struct foo *src; + struct foo *tmp; + double *qsort_result; + size_t i; + + src = (struct foo *) malloc ((n + 1) * sizeof (struct foo)); + src[n].x = 0x4A6A71FE; /* canary */ + tmp = (struct foo *) malloc ((n + 1) * sizeof (struct foo)); + tmp[n].x = 0x587EF149; /* canary */ + + for (i = 0; i < n; i++) + src[i] = data[i]; + + merge_sort_inplace (src, n, tmp); + + /* Verify the canaries. */ + ASSERT (src[n].x == 0x4A6A71FE); + ASSERT (tmp[n].x == 0x587EF149); + + /* Verify the result. */ + qsort_result = (double *) malloc (n * sizeof (double)); + for (i = 0; i < n; i++) + qsort_result[i] = data[i].x; + qsort (qsort_result, n, sizeof (double), cmp_double); + for (i = 0; i < n; i++) + ASSERT (src[i].x == qsort_result[i]); + + /* Verify the stability. */ + for (i = 0; i < n; i++) + if (i > 0 && src[i - 1].x == src[i].x) + ASSERT (src[i - 1].index < src[i].index); + + free (qsort_result); + free (tmp); + free (src); + } + + return 0; +} diff --git a/tests/test-c-ctype.c b/tests/test-c-ctype.c new file mode 100644 index 00000000..6d7fe1b7 --- /dev/null +++ b/tests/test-c-ctype.c @@ -0,0 +1,398 @@ +/* Test of character handling in C locale. + Copyright (C) 2005, 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. */ + +#include + +#include "c-ctype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static void +test_all (void) +{ + int c; + + for (c = -0x80; c < 0x100; c++) + { + ASSERT (c_isascii (c) == (c >= 0 && c < 0x80)); + + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + ASSERT (c_isalnum (c) == 1); + break; + default: + ASSERT (c_isalnum (c) == 0); + break; + } + + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + ASSERT (c_isalpha (c) == 1); + break; + default: + ASSERT (c_isalpha (c) == 0); + break; + } + + switch (c) + { + case '\t': case ' ': + ASSERT (c_isblank (c) == 1); + break; + default: + ASSERT (c_isblank (c) == 0); + break; + } + + ASSERT (c_iscntrl (c) == ((c >= 0 && c < 0x20) || c == 0x7f)); + + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + ASSERT (c_isdigit (c) == 1); + break; + default: + ASSERT (c_isdigit (c) == 0); + break; + } + + switch (c) + { + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': + case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': + case 's': case 't': case 'u': case 'v': case 'w': case 'x': + case 'y': case 'z': + ASSERT (c_islower (c) == 1); + break; + default: + ASSERT (c_islower (c) == 0); + break; + } + + ASSERT (c_isgraph (c) == ((c >= 0x20 && c < 0x7f) && c != ' ')); + + ASSERT (c_isprint (c) == (c >= 0x20 && c < 0x7f)); + + ASSERT (c_ispunct (c) == (c_isgraph (c) && !c_isalnum (c))); + + switch (c) + { + case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': + ASSERT (c_isspace (c) == 1); + break; + default: + ASSERT (c_isspace (c) == 0); + break; + } + + switch (c) + { + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': + case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': + case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': + case 'Y': case 'Z': + ASSERT (c_isupper (c) == 1); + break; + default: + ASSERT (c_isupper (c) == 0); + break; + } + + switch (c) + { + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + ASSERT (c_isxdigit (c) == 1); + break; + default: + ASSERT (c_isxdigit (c) == 0); + break; + } + + switch (c) + { + case 'A': + ASSERT (c_tolower (c) == 'a'); + ASSERT (c_toupper (c) == c); + break; + case 'B': + ASSERT (c_tolower (c) == 'b'); + ASSERT (c_toupper (c) == c); + break; + case 'C': + ASSERT (c_tolower (c) == 'c'); + ASSERT (c_toupper (c) == c); + break; + case 'D': + ASSERT (c_tolower (c) == 'd'); + ASSERT (c_toupper (c) == c); + break; + case 'E': + ASSERT (c_tolower (c) == 'e'); + ASSERT (c_toupper (c) == c); + break; + case 'F': + ASSERT (c_tolower (c) == 'f'); + ASSERT (c_toupper (c) == c); + break; + case 'G': + ASSERT (c_tolower (c) == 'g'); + ASSERT (c_toupper (c) == c); + break; + case 'H': + ASSERT (c_tolower (c) == 'h'); + ASSERT (c_toupper (c) == c); + break; + case 'I': + ASSERT (c_tolower (c) == 'i'); + ASSERT (c_toupper (c) == c); + break; + case 'J': + ASSERT (c_tolower (c) == 'j'); + ASSERT (c_toupper (c) == c); + break; + case 'K': + ASSERT (c_tolower (c) == 'k'); + ASSERT (c_toupper (c) == c); + break; + case 'L': + ASSERT (c_tolower (c) == 'l'); + ASSERT (c_toupper (c) == c); + break; + case 'M': + ASSERT (c_tolower (c) == 'm'); + ASSERT (c_toupper (c) == c); + break; + case 'N': + ASSERT (c_tolower (c) == 'n'); + ASSERT (c_toupper (c) == c); + break; + case 'O': + ASSERT (c_tolower (c) == 'o'); + ASSERT (c_toupper (c) == c); + break; + case 'P': + ASSERT (c_tolower (c) == 'p'); + ASSERT (c_toupper (c) == c); + break; + case 'Q': + ASSERT (c_tolower (c) == 'q'); + ASSERT (c_toupper (c) == c); + break; + case 'R': + ASSERT (c_tolower (c) == 'r'); + ASSERT (c_toupper (c) == c); + break; + case 'S': + ASSERT (c_tolower (c) == 's'); + ASSERT (c_toupper (c) == c); + break; + case 'T': + ASSERT (c_tolower (c) == 't'); + ASSERT (c_toupper (c) == c); + break; + case 'U': + ASSERT (c_tolower (c) == 'u'); + ASSERT (c_toupper (c) == c); + break; + case 'V': + ASSERT (c_tolower (c) == 'v'); + ASSERT (c_toupper (c) == c); + break; + case 'W': + ASSERT (c_tolower (c) == 'w'); + ASSERT (c_toupper (c) == c); + break; + case 'X': + ASSERT (c_tolower (c) == 'x'); + ASSERT (c_toupper (c) == c); + break; + case 'Y': + ASSERT (c_tolower (c) == 'y'); + ASSERT (c_toupper (c) == c); + break; + case 'Z': + ASSERT (c_tolower (c) == 'z'); + ASSERT (c_toupper (c) == c); + break; + case 'a': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'A'); + break; + case 'b': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'B'); + break; + case 'c': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'C'); + break; + case 'd': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'D'); + break; + case 'e': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'E'); + break; + case 'f': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'F'); + break; + case 'g': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'G'); + break; + case 'h': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'H'); + break; + case 'i': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'I'); + break; + case 'j': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'J'); + break; + case 'k': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'K'); + break; + case 'l': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'L'); + break; + case 'm': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'M'); + break; + case 'n': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'N'); + break; + case 'o': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'O'); + break; + case 'p': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'P'); + break; + case 'q': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'Q'); + break; + case 'r': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'R'); + break; + case 's': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'S'); + break; + case 't': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'T'); + break; + case 'u': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'U'); + break; + case 'v': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'V'); + break; + case 'w': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'W'); + break; + case 'x': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'X'); + break; + case 'y': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'Y'); + break; + case 'z': + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == 'Z'); + break; + default: + ASSERT (c_tolower (c) == c); + ASSERT (c_toupper (c) == c); + break; + } + } +} + +int +main () +{ + test_all (); + + setlocale (LC_ALL, "de_DE"); + test_all (); + + setlocale (LC_ALL, "ja_JP.EUC-JP"); + test_all (); + + return 0; +} diff --git a/tests/test-c-strcase.sh b/tests/test-c-strcase.sh new file mode 100755 index 00000000..5fcf906b --- /dev/null +++ b/tests/test-c-strcase.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Test in the C locale. +./test-c-strcasecmp${EXEEXT} || exit 1 +./test-c-strncasecmp${EXEEXT} || exit 1 + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR != none; then + LC_ALL=$LOCALE_FR ./test-c-strcasecmp${EXEEXT} locale || exit 1 + LC_ALL=$LOCALE_FR ./test-c-strncasecmp${EXEEXT} locale || exit 1 +fi + +# Test in a Turkish UTF-8 locale. +: ${LOCALE_TR_UTF8=tr_TR.UTF-8} +if test $LOCALE_TR_UTF8 != none; then + LC_ALL=$LOCALE_TR_UTF8 ./test-c-strcasecmp${EXEEXT} locale || exit 1 + LC_ALL=$LOCALE_TR_UTF8 ./test-c-strncasecmp${EXEEXT} locale || exit 1 +fi + +exit 0 diff --git a/tests/test-c-strcasecmp.c b/tests/test-c-strcasecmp.c new file mode 100644 index 00000000..16244b9f --- /dev/null +++ b/tests/test-c-strcasecmp.c @@ -0,0 +1,77 @@ +/* Test of case-insensitive string comparison function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "c-strcase.h" + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char *argv[]) +{ + if (argc > 1) + { + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + } + + ASSERT (c_strcasecmp ("paragraph", "Paragraph") == 0); + + ASSERT (c_strcasecmp ("paragrapH", "parAgRaph") == 0); + + ASSERT (c_strcasecmp ("paragraph", "paraLyzed") < 0); + ASSERT (c_strcasecmp ("paraLyzed", "paragraph") > 0); + + ASSERT (c_strcasecmp ("para", "paragraph") < 0); + ASSERT (c_strcasecmp ("paragraph", "para") > 0); + + /* The following tests shows how c_strcasecmp() is different from + strcasecmp(). */ + + ASSERT (c_strcasecmp ("\311mile", "\351mile") < 0); + ASSERT (c_strcasecmp ("\351mile", "\311mile") > 0); + + /* The following tests shows how c_strcasecmp() is different from + mbscasecmp(). */ + + ASSERT (c_strcasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R") > 0); /* özgür */ + ASSERT (c_strcasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r") < 0); /* özgür */ + + /* This test shows how strings of different size cannot compare equal. */ + ASSERT (c_strcasecmp ("turkish", "TURK\304\260SH") < 0); + ASSERT (c_strcasecmp ("TURK\304\260SH", "turkish") > 0); + + return 0; +} diff --git a/tests/test-c-strncasecmp.c b/tests/test-c-strncasecmp.c new file mode 100644 index 00000000..7d6dbf50 --- /dev/null +++ b/tests/test-c-strncasecmp.c @@ -0,0 +1,91 @@ +/* Test of case-insensitive string comparison function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "c-strcase.h" + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char *argv[]) +{ + if (argc > 1) + { + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + } + + ASSERT (c_strncasecmp ("paragraph", "Paragraph", 1000000) == 0); + ASSERT (c_strncasecmp ("paragraph", "Paragraph", 9) == 0); + + ASSERT (c_strncasecmp ("paragrapH", "parAgRaph", 1000000) == 0); + ASSERT (c_strncasecmp ("paragrapH", "parAgRaph", 9) == 0); + + ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 10) < 0); + ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 9) < 0); + ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 5) < 0); + ASSERT (c_strncasecmp ("paragraph", "paraLyzed", 4) == 0); + ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 10) > 0); + ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 9) > 0); + ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 5) > 0); + ASSERT (c_strncasecmp ("paraLyzed", "paragraph", 4) == 0); + + ASSERT (c_strncasecmp ("para", "paragraph", 10) < 0); + ASSERT (c_strncasecmp ("para", "paragraph", 9) < 0); + ASSERT (c_strncasecmp ("para", "paragraph", 5) < 0); + ASSERT (c_strncasecmp ("para", "paragraph", 4) == 0); + ASSERT (c_strncasecmp ("paragraph", "para", 10) > 0); + ASSERT (c_strncasecmp ("paragraph", "para", 9) > 0); + ASSERT (c_strncasecmp ("paragraph", "para", 5) > 0); + ASSERT (c_strncasecmp ("paragraph", "para", 4) == 0); + + /* The following tests shows how c_strncasecmp() is different from + strncasecmp(). */ + + ASSERT (c_strncasecmp ("\311mily", "\351mile", 4) < 0); + ASSERT (c_strncasecmp ("\351mile", "\311mily", 4) > 0); + + /* The following tests shows how c_strncasecmp() is different from + mbsncasecmp(). */ + + ASSERT (c_strncasecmp ("\303\266zg\303\274r", "\303\226ZG\303\234R", 99) > 0); /* özgür */ + ASSERT (c_strncasecmp ("\303\226ZG\303\234R", "\303\266zg\303\274r", 99) < 0); /* özgür */ + + /* This test shows how strings of different size cannot compare equal. */ + ASSERT (c_strncasecmp ("turkish", "TURK\304\260SH", 7) < 0); + ASSERT (c_strncasecmp ("TURK\304\260SH", "turkish", 7) > 0); + + return 0; +} diff --git a/tests/test-environ.c b/tests/test-environ.c new file mode 100644 index 00000000..d9501bbd --- /dev/null +++ b/tests/test-environ.c @@ -0,0 +1,44 @@ +/* Test of environ variable. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +#include + +int +main () +{ + /* The environment variables that are set even in the weirdest situations + are HOME and PATH. + POSIX says that HOME is initialized by the system, and that PATH may be + unset. But in practice it's more frequent to see HOME unset and PATH + set. So we test the presence of PATH. */ + char **remaining_variables = environ; + char *string; + + for (; (string = *remaining_variables) != NULL; remaining_variables++) + { + if (strncmp (string, "PATH=", 5) == 0) + /* Found the PATH environment variable. */ + return 0; + } + /* Failed to find the PATH environment variable. */ + return 1; +} diff --git a/tests/test-errno.c b/tests/test-errno.c new file mode 100644 index 00000000..4642027d --- /dev/null +++ b/tests/test-errno.c @@ -0,0 +1,117 @@ +/* Test of substitute. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +/* Verify that the POSIX mandated errno values exist and can be used as + initializers outside of a function. + The variable names happen to match the Linux/x86 error numbers. */ +int e1 = EPERM; +int e2 = ENOENT; +int e3 = ESRCH; +int e4 = EINTR; +int e5 = EIO; +int e6 = ENXIO; +int e7 = E2BIG; +int e8 = ENOEXEC; +int e9 = EBADF; +int e10 = ECHILD; +int e11 = EAGAIN; +int e11a = EWOULDBLOCK; +int e12 = ENOMEM; +int e13 = EACCES; +int e14 = EFAULT; +int e16 = EBUSY; +int e17 = EEXIST; +int e18 = EXDEV; +int e19 = ENODEV; +int e20 = ENOTDIR; +int e21 = EISDIR; +int e22 = EINVAL; +int e23 = ENFILE; +int e24 = EMFILE; +int e25 = ENOTTY; +int e26 = ETXTBSY; +int e27 = EFBIG; +int e28 = ENOSPC; +int e29 = ESPIPE; +int e30 = EROFS; +int e31 = EMLINK; +int e32 = EPIPE; +int e33 = EDOM; +int e34 = ERANGE; +int e35 = EDEADLK; +int e36 = ENAMETOOLONG; +int e37 = ENOLCK; +int e38 = ENOSYS; +int e39 = ENOTEMPTY; +int e40 = ELOOP; +int e42 = ENOMSG; +int e43 = EIDRM; +int e67 = ENOLINK; +int e71 = EPROTO; +int e72 = EMULTIHOP; +int e74 = EBADMSG; +int e75 = EOVERFLOW; +int e84 = EILSEQ; +int e88 = ENOTSOCK; +int e89 = EDESTADDRREQ; +int e90 = EMSGSIZE; +int e91 = EPROTOTYPE; +int e92 = ENOPROTOOPT; +int e93 = EPROTONOSUPPORT; +int e95 = EOPNOTSUPP; +int e95a = ENOTSUP; +int e97 = EAFNOSUPPORT; +int e98 = EADDRINUSE; +int e99 = EADDRNOTAVAIL; +int e100 = ENETDOWN; +int e101 = ENETUNREACH; +int e102 = ENETRESET; +int e103 = ECONNABORTED; +int e104 = ECONNRESET; +int e105 = ENOBUFS; +int e106 = EISCONN; +int e107 = ENOTCONN; +int e110 = ETIMEDOUT; +int e111 = ECONNREFUSED; +int e113 = EHOSTUNREACH; +int e114 = EALREADY; +int e115 = EINPROGRESS; +int e116 = ESTALE; +int e122 = EDQUOT; +int e125 = ECANCELED; + +/* Don't verify that these errno values are all different, except for possibly + EWOULDBLOCK == EAGAIN. Even Linux/x86 does not pass this check: it has + ENOTSUP == EOPNOTSUPP. */ + +int +main () +{ + /* Verify that errno can be assigned. */ + errno = EOVERFLOW; + + /* snprintf() callers want to distinguish EINVAL and EOVERFLOW. */ + if (errno == EINVAL) + return 1; + + return 0; +} diff --git a/tests/test-frexpl.c b/tests/test-frexpl.c new file mode 100644 index 00000000..d4babb88 --- /dev/null +++ b/tests/test-frexpl.c @@ -0,0 +1,233 @@ +/* Test of splitting a 'long double' into fraction and mantissa. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include +#include +#include + +#include "fpucw.h" +#include "isnanl-nolibm.h" +#include "nan.h" + +/* Avoid some warnings from "gcc -Wshadow". + This file doesn't use the exp() function. */ +#undef exp +#define exp exponent + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* On MIPS IRIX machines, LDBL_MIN_EXP is -1021, but the smallest reliable + exponent for 'long double' is -964. Similarly, on PowerPC machines, + LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' + is -968. For exponents below that, the precision may be truncated to the + precision used for 'double'. */ +#ifdef __sgi +# define MIN_NORMAL_EXP (LDBL_MIN_EXP + 57) +#elif defined __ppc || defined __ppc__ || defined __powerpc || defined __powerpc__ +# define MIN_NORMAL_EXP (LDBL_MIN_EXP + 53) +#else +# define MIN_NORMAL_EXP LDBL_MIN_EXP +#endif + +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zero instead. + IRIX cc can't put -0.0L into .data, but can compute at runtime. + Note that the expression -LDBL_MIN * LDBL_MIN does not work on other + platforms, such as when cross-compiling to PowerPC on MacOS X 10.5. */ +#if defined __hpux || defined __sgi +static long double +compute_minus_zero (void) +{ + return -LDBL_MIN * LDBL_MIN; +} +# define minus_zero compute_minus_zero () +#else +long double minus_zero = -0.0L; +#endif + +static long double +my_ldexp (long double x, int d) +{ + for (; d > 0; d--) + x *= 2.0L; + for (; d < 0; d++) + x *= 0.5L; + return x; +} + +int +main () +{ + int i; + long double x; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + { /* NaN. */ + int exp = -9999; + long double mantissa; + x = NaNl (); + mantissa = frexpl (x, &exp); + ASSERT (isnanl (mantissa)); + } + + { /* Positive infinity. */ + int exp = -9999; + long double mantissa; + x = 1.0L / 0.0L; + mantissa = frexpl (x, &exp); + ASSERT (mantissa == x); + } + + { /* Negative infinity. */ + int exp = -9999; + long double mantissa; + x = -1.0L / 0.0L; + mantissa = frexpl (x, &exp); + ASSERT (mantissa == x); + } + + { /* Positive zero. */ + int exp = -9999; + long double mantissa; + x = 0.0L; + mantissa = frexpl (x, &exp); + ASSERT (exp == 0); + ASSERT (mantissa == x); + ASSERT (!signbit (mantissa)); + } + + { /* Negative zero. */ + int exp = -9999; + long double mantissa; + x = minus_zero; + mantissa = frexpl (x, &exp); + ASSERT (exp == 0); + ASSERT (mantissa == x); + ASSERT (signbit (mantissa)); + } + + for (i = 1, x = 1.0L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.5L); + } + for (i = 1, x = 1.0L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.5L); + } + for (; i >= LDBL_MIN_EXP - 100 && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.5L); + } + + for (i = 1, x = -1.0L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == -0.5L); + } + for (i = 1, x = -1.0L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == -0.5L); + } + for (; i >= LDBL_MIN_EXP - 100 && x < 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == -0.5L); + } + + for (i = 1, x = 1.01L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.505L); + } + for (i = 1, x = 1.01L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.505L); + } + for (; i >= LDBL_MIN_EXP - 100 && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa >= 0.5L); + ASSERT (mantissa < 1.0L); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + for (i = 1, x = 1.73205L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.866025L); + } + for (i = 1, x = 1.73205L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i); + ASSERT (mantissa == 0.866025L); + } + for (; i >= LDBL_MIN_EXP - 100 && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = frexpl (x, &exp); + ASSERT (exp == i || exp == i + 1); + ASSERT (mantissa >= 0.5L); + ASSERT (mantissa < 1.0L); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + return 0; +} diff --git a/tests/test-fseterr.c b/tests/test-fseterr.c new file mode 100644 index 00000000..475979b0 --- /dev/null +++ b/tests/test-fseterr.c @@ -0,0 +1,44 @@ +/* Test setting the error indicator of a stream. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "fseterr.h" + +#include +#include + +int +main () +{ + /* All streams are initially created with the error indicator cleared. */ + if (ferror (stdout)) + abort (); + + /* Verify that fseterr() works. */ + fseterr (stdout); + if (!ferror (stdout)) + abort (); + + /* Verify fseterr's effect can be undone by clearerr(). */ + clearerr (stdout); + if (ferror (stdout)) + abort (); + + return 0; +} diff --git a/tests/test-iconv.c b/tests/test-iconv.c new file mode 100644 index 00000000..8bac1764 --- /dev/null +++ b/tests/test-iconv.c @@ -0,0 +1,149 @@ +/* Test of character set conversion. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#if HAVE_ICONV +# include +#endif + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + and UTF-8. */ + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + iconv_t cd_utf8_to_88591 = iconv_open ("ISO-8859-1", "UTF-8"); + + ASSERT (cd_88591_to_utf8 != (iconv_t)(-1)); + ASSERT (cd_utf8_to_88591 != (iconv_t)(-1)); + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + strlen (expected)); + ASSERT (memcmp (buf, expected, strlen (expected)) == 0); + } + + /* Test conversion from ISO-8859-1 to UTF-8 with E2BIG. */ + { + static const char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + const char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == (size_t)(-1) && errno == E2BIG); + ASSERT (inbytesleft == 1); + ASSERT (outbytesleft == 1); + ASSERT ((unsigned char) buf[1] == 0xAD); + ASSERT ((unsigned char) buf[0] == 0xDE); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + { + static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == 0 && inbytesleft == 0); + ASSERT (outptr == buf + strlen (expected)); + ASSERT (memcmp (buf, expected, strlen (expected)) == 0); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == (size_t)(-1)) + { + ASSERT (errno == EILSEQ); + ASSERT (inbytesleft == strlen (input) && outptr == buf); + } + else + { + ASSERT (res == 1); + ASSERT (inbytesleft == 0); + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + { + static const char input[] = "\342"; + char buf[10]; + const char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (ICONV_CONST char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + ASSERT (res == (size_t)(-1) && errno == EINVAL); + ASSERT (inbytesleft == 1 && outptr == buf); + } + + iconv_close (cd_88591_to_utf8); + iconv_close (cd_utf8_to_88591); +#endif + + return 0; +} diff --git a/tests/test-isnand-nolibm.c b/tests/test-isnand-nolibm.c new file mode 100644 index 00000000..fd739ca3 --- /dev/null +++ b/tests/test-isnand-nolibm.c @@ -0,0 +1,22 @@ +/* Test of isnand() substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "isnand-nolibm.h" + +#include "test-isnand.h" + diff --git a/tests/test-isnand.h b/tests/test-isnand.h new file mode 100644 index 00000000..09c5e977 --- /dev/null +++ b/tests/test-isnand.h @@ -0,0 +1,78 @@ +/* Test of isnand() substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include +#include +#include + +#include "nan.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zero instead. */ +double zero = 0.0; + +int +main () +{ + /* Finite values. */ + ASSERT (!isnand (3.141)); + ASSERT (!isnand (3.141e30)); + ASSERT (!isnand (3.141e-30)); + ASSERT (!isnand (-2.718)); + ASSERT (!isnand (-2.718e30)); + ASSERT (!isnand (-2.718e-30)); + ASSERT (!isnand (0.0)); + ASSERT (!isnand (-zero)); + /* Infinite values. */ + ASSERT (!isnand (1.0 / 0.0)); + ASSERT (!isnand (-1.0 / 0.0)); + /* Quiet NaN. */ + ASSERT (isnand (NaNd ())); +#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + /* Signalling NaN. */ + { + #define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { double value; unsigned int word[NWORDS]; } memory_double; + memory_double m; + m.value = NaNd (); +# if DBL_EXPBIT0_BIT > 0 + m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); +# else + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << DBL_EXPBIT0_BIT; + ASSERT (isnand (m.value)); + } +#endif + return 0; +} diff --git a/tests/test-isnanf-nolibm.c b/tests/test-isnanf-nolibm.c new file mode 100644 index 00000000..0105ce9c --- /dev/null +++ b/tests/test-isnanf-nolibm.c @@ -0,0 +1,21 @@ +/* Test of isnanf() substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "isnanf-nolibm.h" + +#include "test-isnanf.h" diff --git a/tests/test-isnanf.h b/tests/test-isnanf.h new file mode 100644 index 00000000..f3f387c4 --- /dev/null +++ b/tests/test-isnanf.h @@ -0,0 +1,80 @@ +/* Test of isnanf() substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include +#include +#include + +#include "nan.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. + So we use -zero instead. */ +float zero = 0.0f; + +int +main () +{ + /* Finite values. */ + ASSERT (!isnanf (3.141f)); + ASSERT (!isnanf (3.141e30f)); + ASSERT (!isnanf (3.141e-30f)); + ASSERT (!isnanf (-2.718f)); + ASSERT (!isnanf (-2.718e30f)); + ASSERT (!isnanf (-2.718e-30f)); + ASSERT (!isnanf (0.0f)); + ASSERT (!isnanf (-zero)); + /* Infinite values. */ + ASSERT (!isnanf (1.0f / 0.0f)); + ASSERT (!isnanf (-1.0f / 0.0f)); + /* Quiet NaN. */ + ASSERT (isnanf (NaNf ())); +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + /* Signalling NaN. */ + { + #define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { float value; unsigned int word[NWORDS]; } memory_float; + memory_float m; + m.value = NaNf (); +# if FLT_EXPBIT0_BIT > 0 + m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); +# else + m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + if (FLT_EXPBIT0_WORD < NWORDS / 2) + m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; + else + m.word[0] |= (unsigned int) 1; + ASSERT (isnanf (m.value)); + } +#endif + return 0; +} diff --git a/tests/test-isnanl-nolibm.c b/tests/test-isnanl-nolibm.c new file mode 100644 index 00000000..70c984d5 --- /dev/null +++ b/tests/test-isnanl-nolibm.c @@ -0,0 +1,23 @@ +/* Test of isnanl() substitute. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "isnanl-nolibm.h" + +#include "test-isnanl.h" diff --git a/tests/test-isnanl.h b/tests/test-isnanl.h new file mode 100644 index 00000000..baf04db0 --- /dev/null +++ b/tests/test-isnanl.h @@ -0,0 +1,154 @@ +/* Test of isnanl() substitute. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include +#include +#include +#include + +#include "nan.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zero instead. + IRIX cc can't put -0.0L into .data, but can compute at runtime. + Note that the expression -LDBL_MIN * LDBL_MIN does not work on other + platforms, such as when cross-compiling to PowerPC on MacOS X 10.5. */ +#if defined __hpux || defined __sgi +static long double +compute_minus_zero (void) +{ + return -LDBL_MIN * LDBL_MIN; +} +# define minus_zero compute_minus_zero () +#else +long double minus_zero = -0.0L; +#endif + +int +main () +{ + #define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { unsigned int word[NWORDS]; long double value; } + memory_long_double; + + /* Finite values. */ + ASSERT (!isnanl (3.141L)); + ASSERT (!isnanl (3.141e30L)); + ASSERT (!isnanl (3.141e-30L)); + ASSERT (!isnanl (-2.718L)); + ASSERT (!isnanl (-2.718e30L)); + ASSERT (!isnanl (-2.718e-30L)); + ASSERT (!isnanl (0.0L)); + ASSERT (!isnanl (minus_zero)); + /* Infinite values. */ + ASSERT (!isnanl (1.0L / 0.0L)); + ASSERT (!isnanl (-1.0L / 0.0L)); + /* Quiet NaN. */ + ASSERT (isnanl (NaNl ())); + +#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT + /* A bit pattern that is different from a Quiet NaN. With a bit of luck, + it's a Signalling NaN. */ + { + memory_long_double m; + m.value = NaNl (); +# if LDBL_EXPBIT0_BIT > 0 + m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); +# else + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; + ASSERT (isnanl (m.value)); + } +#endif + +#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) +/* Representation of an 80-bit 'long double' as an initializer for a sequence + of 'unsigned int' words. */ +# ifdef WORDS_BIGENDIAN +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ + ((unsigned int) (manthi) << 16) | (unsigned int) (mantlo) >> 16), \ + (unsigned int) (mantlo) << 16 \ + } +# else +# define LDBL80_WORDS(exponent,manthi,mantlo) \ + { mantlo, manthi, exponent } +# endif + { /* Quiet NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + { + /* Signalling NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + /* The isnanl function should recognize Pseudo-NaNs, Pseudo-Infinities, + Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals, as defined in + Intel IA-64 Architecture Software Developer's Manual, Volume 1: + Application Architecture. + Table 5-2 "Floating-Point Register Encodings" + Figure 5-6 "Memory to Floating-Point Register Data Translation" + */ + { /* Pseudo-NaN. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + { /* Pseudo-Infinity. */ + static memory_long_double x = + { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + { /* Pseudo-Zero. */ + static memory_long_double x = + { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + { /* Unnormalized number. */ + static memory_long_double x = + { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; + ASSERT (isnanl (x.value)); + } + { /* Pseudo-Denormal. */ + static memory_long_double x = + { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; + ASSERT (isnanl (x.value)); + } +#endif + + return 0; +} diff --git a/tests/test-locale.c b/tests/test-locale.c new file mode 100644 index 00000000..625cc43d --- /dev/null +++ b/tests/test-locale.c @@ -0,0 +1,44 @@ +/* Test of substitute. + Copyright (C) 2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include "verify.h" + +int a[] = + { + LC_ALL, + LC_COLLATE, + LC_CTYPE, + LC_MESSAGES, + LC_MONETARY, + LC_NUMERIC, + LC_TIME + }; + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +verify (sizeof NULL == sizeof (void *)); + +int +main () +{ + return 0; +} diff --git a/tests/test-localename.c b/tests/test-localename.c new file mode 100644 index 00000000..82f786bb --- /dev/null +++ b/tests/test-localename.c @@ -0,0 +1,122 @@ +/* Test of gl_locale_name function. + Copyright (C) 2007, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "localename.h" + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Check that gl_locale_name returns non-NULL. */ + ASSERT (gl_locale_name (LC_MESSAGES, "LC_MESSAGES") != NULL); + + /* Check that when all environment variables are unset, + gl_locale_name_posix returns NULL. */ + unsetenv ("LC_ALL"); + unsetenv ("LC_CTYPE"); + unsetenv ("LC_MESSAGES"); + unsetenv ("LC_NUMERIC"); + unsetenv ("LANG"); + setlocale (LC_ALL, ""); + ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), + gl_locale_name_default ()) == 0); + ASSERT (strcmp (gl_locale_name (LC_NUMERIC, "LC_NUMERIC"), + gl_locale_name_default ()) == 0); + + /* Check that an empty environment variable is treated like an unset + environment variable. */ + + setenv ("LC_ALL", "", 1); + unsetenv ("LC_CTYPE"); + unsetenv ("LC_MESSAGES"); + unsetenv ("LANG"); + setlocale (LC_ALL, ""); + ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), + gl_locale_name_default ()) == 0); + + unsetenv ("LC_ALL"); + setenv ("LC_CTYPE", "", 1); + unsetenv ("LC_MESSAGES"); + unsetenv ("LANG"); + setlocale (LC_ALL, ""); + ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), + gl_locale_name_default ()) == 0); + + unsetenv ("LC_ALL"); + unsetenv ("LC_CTYPE"); + setenv ("LC_MESSAGES", "", 1); + unsetenv ("LANG"); + setlocale (LC_ALL, ""); + ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), + gl_locale_name_default ()) == 0); + + unsetenv ("LC_ALL"); + unsetenv ("LC_CTYPE"); + unsetenv ("LC_MESSAGES"); + setenv ("LANG", "", 1); + setlocale (LC_ALL, ""); + ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), + gl_locale_name_default ()) == 0); + + /* Check that LC_ALL overrides the others, and LANG is overridden by the + others. */ + + setenv ("LC_ALL", "C", 1); + unsetenv ("LC_CTYPE"); + unsetenv ("LC_MESSAGES"); + unsetenv ("LANG"); + setlocale (LC_ALL, ""); + ASSERT (strcmp (gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); + ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); + + unsetenv ("LC_ALL"); + setenv ("LC_CTYPE", "C", 1); + setenv ("LC_MESSAGES", "C", 1); + unsetenv ("LANG"); + setlocale (LC_ALL, ""); + ASSERT (strcmp (gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); + ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); + + unsetenv ("LC_ALL"); + unsetenv ("LC_CTYPE"); + unsetenv ("LC_MESSAGES"); + setenv ("LANG", "C", 1); + setlocale (LC_ALL, ""); + ASSERT (strcmp (gl_locale_name_posix (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); + ASSERT (strcmp (gl_locale_name (LC_MESSAGES, "LC_MESSAGES"), "C") == 0); + + return 0; +} diff --git a/tests/test-malloca.c b/tests/test-malloca.c new file mode 100644 index 00000000..7de6c68a --- /dev/null +++ b/tests/test-malloca.c @@ -0,0 +1,59 @@ +/* Test of safe automatic memory allocation. + Copyright (C) 2005, 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005. */ + +#include + +#include "malloca.h" + +#include + +static void +do_allocation (int n) +{ + void *ptr = malloca (n); + freea (ptr); + ptr = safe_alloca (n); +} + +void (*func) (int) = do_allocation; + +int +main () +{ + int i; + + /* Repeat a lot of times, to make sure there's no memory leak. */ + for (i = 0; i < 50000; i++) + { + /* Try various values. + n = 0 gave a crash on Alpha with gcc-2.5.8. + Some versions of MacOS X have a stack size limit of 512 KB. */ + func (34); + func (134); + func (399); + func (510823); + func (129321); + func (0); + func (4070); + func (4095); + func (1); + func (16582); + } + + return 0; +} diff --git a/tests/test-math.c b/tests/test-math.c new file mode 100644 index 00000000..aa51f858 --- /dev/null +++ b/tests/test-math.c @@ -0,0 +1,53 @@ +/* Test of substitute. + Copyright (C) 2007, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#ifndef NAN +# error NAN should be defined +choke me +#endif + +#if 0 +/* Check that NAN expands into a constant expression. */ +static float n = NAN; +#endif + +/* Compare two numbers with ==. + This is a separate function because IRIX 6.5 "cc -O" miscompiles an + 'x == x' test. */ +static int +numeric_equal (double x, double y) +{ + return x == y; +} + +int +main () +{ + double d = NAN; + double zero = 0.0; + if (numeric_equal (d, d)) + return 1; + d = HUGE_VAL; + if (!numeric_equal (d, 1.0 / zero)) + return 1; + return 0; +} diff --git a/tests/test-mbrtowc.c b/tests/test-mbrtowc.c new file mode 100644 index 00000000..8f1f1bec --- /dev/null +++ b/tests/test-mbrtowc.c @@ -0,0 +1,330 @@ +/* Test of conversion of multibyte character to wide character. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char *argv[]) +{ + mbstate_t state; + wchar_t wc; + size_t ret; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test zero-length input. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "x", 0, &state); + /* gnulib's implementation returns (size_t)(-2). + The AIX 5.1 implementation returns (size_t)(-1). + glibc's implementation returns 0. */ + ASSERT (ret == (size_t)(-2) || ret == (size_t)(-1) || ret == 0); + ASSERT (mbsinit (&state)); + } + + /* Test NUL byte input. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, "", 1, &state); + ASSERT (ret == 0); + ASSERT (wc == 0); + ASSERT (mbsinit (&state)); + ret = mbrtowc (NULL, "", 1, &state); + ASSERT (ret == 0); + ASSERT (mbsinit (&state)); + } + + /* Test single-byte input. */ + { + int c; + char buf[1]; + + memset (&state, '\0', sizeof (mbstate_t)); + for (c = 0; c < 0x100; c++) + switch (c) + { + case '\t': case '\v': case '\f': + case ' ': case '!': case '"': case '#': case '%': + case '&': case '\'': case '(': case ')': case '*': + case '+': case ',': case '-': case '.': case '/': + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case ':': case ';': case '<': case '=': case '>': + case '?': + case 'A': case 'B': case 'C': case 'D': case 'E': + case 'F': case 'G': case 'H': case 'I': case 'J': + case 'K': case 'L': case 'M': case 'N': case 'O': + case 'P': case 'Q': case 'R': case 'S': case 'T': + case 'U': case 'V': case 'W': case 'X': case 'Y': + case 'Z': + case '[': case '\\': case ']': case '^': case '_': + case 'a': case 'b': case 'c': case 'd': case 'e': + case 'f': case 'g': case 'h': case 'i': case 'j': + case 'k': case 'l': case 'm': case 'n': case 'o': + case 'p': case 'q': case 'r': case 's': case 't': + case 'u': case 'v': case 'w': case 'x': case 'y': + case 'z': case '{': case '|': case '}': case '~': + /* c is in the ISO C "basic character set". */ + buf[0] = c; + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == c); + ASSERT (mbsinit (&state)); + ret = mbrtowc (NULL, buf, 1, &state); + ASSERT (ret == 1); + ASSERT (mbsinit (&state)); + break; + } + } + + /* Test special calling convention, passing a NULL pointer. */ + { + memset (&state, '\0', sizeof (mbstate_t)); + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, NULL, 5, &state); + ASSERT (ret == 0); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (mbsinit (&state)); + } + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + { + char input[] = "B\374\337er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == (unsigned char) '\374'); + ASSERT (mbsinit (&state)); + input[1] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 2, 3, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == (unsigned char) '\337'); + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 4, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '2': + /* Locale encoding is UTF-8. */ + { + char input[] = "B\303\274\303\237er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 2, 5, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 4, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + input[4] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 5, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[5] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 6, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '3': + /* Locale encoding is EUC-JP. */ + { + char input[] = "<\306\374\313\334\270\354>"; /* "<日本語>" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '<'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 2, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[1] = '\0'; + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[3] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 4, 4, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[4] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 5, 3, &state); + ASSERT (ret == 2); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[5] = '\0'; + input[6] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 7, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == '>'); + ASSERT (mbsinit (&state)); + } + return 0; + + case '4': + /* Locale encoding is GB18030. */ + { + char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ + memset (&state, '\0', sizeof (mbstate_t)); + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'B'); + ASSERT (mbsinit (&state)); + input[0] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 1, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (wc == (wchar_t) 0xBADFACE); + ASSERT (!mbsinit (&state)); + input[1] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 2, 7, &state); + ASSERT (ret == 1); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[2] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 3, 6, &state); + ASSERT (ret == 4); + ASSERT (wctob (wc) == EOF); + ASSERT (mbsinit (&state)); + input[3] = '\0'; + input[4] = '\0'; + input[5] = '\0'; + input[6] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 7, 2, &state); + ASSERT (ret == 1); + ASSERT (wc == 'e'); + ASSERT (mbsinit (&state)); + input[5] = '\0'; + + wc = (wchar_t) 0xBADFACE; + ret = mbrtowc (&wc, input + 8, 1, &state); + ASSERT (ret == 1); + ASSERT (wc == 'r'); + ASSERT (mbsinit (&state)); + } + return 0; + } + + return 1; +} diff --git a/tests/test-mbrtowc1.sh b/tests/test-mbrtowc1.sh new file mode 100755 index 00000000..3becba3a --- /dev/null +++ b/tests/test-mbrtowc1.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR \ +./test-mbrtowc${EXEEXT} 1 diff --git a/tests/test-mbrtowc2.sh b/tests/test-mbrtowc2.sh new file mode 100755 index 00000000..0405abaf --- /dev/null +++ b/tests/test-mbrtowc2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-mbrtowc${EXEEXT} 2 diff --git a/tests/test-mbrtowc3.sh b/tests/test-mbrtowc3.sh new file mode 100755 index 00000000..63a89a2e --- /dev/null +++ b/tests/test-mbrtowc3.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific EUC-JP locale is installed. +: ${LOCALE_JA=ja_JP} +if test $LOCALE_JA = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional japanese locale is installed" + else + echo "Skipping test: no traditional japanese locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_JA \ +./test-mbrtowc${EXEEXT} 3 diff --git a/tests/test-mbrtowc4.sh b/tests/test-mbrtowc4.sh new file mode 100755 index 00000000..b299a2c4 --- /dev/null +++ b/tests/test-mbrtowc4.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific GB18030 locale is installed. +: ${LOCALE_ZH_CN=zh_CN.GB18030} +if test $LOCALE_ZH_CN = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no transitional chinese locale is installed" + else + echo "Skipping test: no transitional chinese locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_ZH_CN \ +./test-mbrtowc${EXEEXT} 4 diff --git a/tests/test-mbsinit.c b/tests/test-mbsinit.c new file mode 100644 index 00000000..5d4c9c3a --- /dev/null +++ b/tests/test-mbsinit.c @@ -0,0 +1,62 @@ +/* Test of test for initial conversion state. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char *argv[]) +{ + static mbstate_t state; + + ASSERT (mbsinit (&state)); + + if (argc > 1) + { + static const char input[1] = "\303"; + wchar_t wc; + size_t ret; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + ret = mbrtowc (&wc, input, 1, &state); + ASSERT (ret == (size_t)(-2)); + ASSERT (!mbsinit (&state)); + } + + return 0; +} diff --git a/tests/test-mbsinit.sh b/tests/test-mbsinit.sh new file mode 100755 index 00000000..bbda48d2 --- /dev/null +++ b/tests/test-mbsinit.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-mbsinit${EXEEXT} diff --git a/tests/test-memchr.c b/tests/test-memchr.c new file mode 100644 index 00000000..1124f8b5 --- /dev/null +++ b/tests/test-memchr.c @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2008-2009 Free Software Foundation + * Written by Eric Blake and Bruno Haible + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ + +#include + +#include + +#include +#include + +#include "zerosize-ptr.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Calculating void * + int is not portable, so this wrapper converts + to char * to make the tests easier to write. */ +#define MEMCHR (char *) memchr + +int +main () +{ + size_t n = 0x100000; + char *input = malloc (n); + ASSERT (input); + + input[0] = 'a'; + input[1] = 'b'; + memset (input + 2, 'c', 1024); + memset (input + 1026, 'd', n - 1028); + input[n - 2] = 'e'; + input[n - 1] = 'a'; + + /* Basic behavior tests. */ + ASSERT (MEMCHR (input, 'a', n) == input); + + ASSERT (MEMCHR (input, 'a', 0) == NULL); + ASSERT (MEMCHR (zerosize_ptr (), 'a', 0) == NULL); + + ASSERT (MEMCHR (input, 'b', n) == input + 1); + ASSERT (MEMCHR (input, 'c', n) == input + 2); + ASSERT (MEMCHR (input, 'd', n) == input + 1026); + + ASSERT (MEMCHR (input + 1, 'a', n - 1) == input + n - 1); + ASSERT (MEMCHR (input + 1, 'e', n - 1) == input + n - 2); + + ASSERT (MEMCHR (input, 'f', n) == NULL); + ASSERT (MEMCHR (input, '\0', n) == NULL); + + /* Check that a very long haystack is handled quickly if the byte is + found near the beginning. */ + { + size_t repeat = 10000; + for (; repeat > 0; repeat--) + { + ASSERT (MEMCHR (input, 'c', n) == input + 2); + } + } + + /* Alignment tests. */ + { + int i, j; + for (i = 0; i < 32; i++) + { + for (j = 0; j < 256; j++) + input[i + j] = j; + for (j = 0; j < 256; j++) + { + ASSERT (MEMCHR (input + i, j, 256) == input + i + j); + } + } + } + + /* Check that memchr() does not read past the first occurrence of the + byte being searched. See the Austin Group's clarification + . */ + { + char *page_boundary = (char *) zerosize_ptr (); + + if (page_boundary != NULL) + { + int n; + + for (n = 1; n <= 500; n++) + { + char *mem = page_boundary - n; + memset (mem, 'X', n); + ASSERT (MEMCHR (mem, 'U', n) == NULL); + + { + int i; + + for (i = 0; i < n; i++) + { + mem[i] = 'U'; + ASSERT (MEMCHR (mem, 'U', 4000) == mem + i); + mem[i] = 'X'; + } + } + } + } + } + + free (input); + + return 0; +} diff --git a/tests/test-printf-frexp.c b/tests/test-printf-frexp.c new file mode 100644 index 00000000..8ba93488 --- /dev/null +++ b/tests/test-printf-frexp.c @@ -0,0 +1,131 @@ +/* Test of splitting a double into fraction and mantissa. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "printf-frexp.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static double +my_ldexp (double x, int d) +{ + for (; d > 0; d--) + x *= 2.0; + for (; d < 0; d++) + x *= 0.5; + return x; +} + +int +main () +{ + int i; + /* The use of 'volatile' guarantees that excess precision bits are dropped + when dealing with denormalized numbers. It is necessary on x86 systems + where double-floats are not IEEE compliant by default, to avoid that the + results become platform and compiler option dependent. 'volatile' is a + portable alternative to gcc's -ffloat-store option. */ + volatile double x; + + for (i = 1, x = 1.0; i <= DBL_MAX_EXP; i++, x *= 2.0) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.0); + } + for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.0); + } + for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == DBL_MIN_EXP - 1); + ASSERT (mantissa == my_ldexp (1.0, i - DBL_MIN_EXP)); + } + + for (i = 1, x = 1.01; i <= DBL_MAX_EXP; i++, x *= 2.0) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.01); + } + for (i = 1, x = 1.01; i >= DBL_MIN_EXP; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.01); + } + for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == DBL_MIN_EXP - 1); + ASSERT (mantissa >= my_ldexp (1.0, i - DBL_MIN_EXP)); + ASSERT (mantissa <= my_ldexp (2.0, i - DBL_MIN_EXP)); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + for (i = 1, x = 1.73205; i <= DBL_MAX_EXP; i++, x *= 2.0) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.73205); + } + for (i = 1, x = 1.73205; i >= DBL_MIN_EXP; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.73205); + } + for (; i >= DBL_MIN_EXP - 100 && x > 0.0; i--, x *= 0.5) + { + int exp = -9999; + double mantissa = printf_frexp (x, &exp); + ASSERT (exp == DBL_MIN_EXP - 1); + ASSERT (mantissa >= my_ldexp (1.0, i - DBL_MIN_EXP)); + ASSERT (mantissa <= my_ldexp (2.0, i - DBL_MIN_EXP)); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + return 0; +} diff --git a/tests/test-printf-frexpl.c b/tests/test-printf-frexpl.c new file mode 100644 index 00000000..c4c156a9 --- /dev/null +++ b/tests/test-printf-frexpl.c @@ -0,0 +1,147 @@ +/* Test of splitting a 'long double' into fraction and mantissa. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "printf-frexpl.h" + +#include +#include +#include + +#include "fpucw.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* On MIPS IRIX machines, LDBL_MIN_EXP is -1021, but the smallest reliable + exponent for 'long double' is -964. Similarly, on PowerPC machines, + LDBL_MIN_EXP is -1021, but the smallest reliable exponent for 'long double' + is -968. For exponents below that, the precision may be truncated to the + precision used for 'double'. */ +#ifdef __sgi +# define MIN_NORMAL_EXP (LDBL_MIN_EXP + 57) +# define MIN_SUBNORMAL_EXP MIN_NORMAL_EXP +#elif defined __ppc || defined __ppc__ || defined __powerpc || defined __powerpc__ +# define MIN_NORMAL_EXP (LDBL_MIN_EXP + 53) +# define MIN_SUBNORMAL_EXP MIN_NORMAL_EXP +#else +# define MIN_NORMAL_EXP LDBL_MIN_EXP +# define MIN_SUBNORMAL_EXP (LDBL_MIN_EXP - 100) +#endif + +static long double +my_ldexp (long double x, int d) +{ + for (; d > 0; d--) + x *= 2.0L; + for (; d < 0; d++) + x *= 0.5L; + return x; +} + +int +main () +{ + int i; + long double x; + DECL_LONG_DOUBLE_ROUNDING + + BEGIN_LONG_DOUBLE_ROUNDING (); + + for (i = 1, x = 1.0L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.0L); + } + for (i = 1, x = 1.0L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.0L); + } + for (; i >= MIN_SUBNORMAL_EXP && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == LDBL_MIN_EXP - 1); + ASSERT (mantissa == my_ldexp (1.0L, i - LDBL_MIN_EXP)); + } + + for (i = 1, x = 1.01L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.01L); + } + for (i = 1, x = 1.01L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.01L); + } + for (; i >= MIN_SUBNORMAL_EXP && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == LDBL_MIN_EXP - 1); + ASSERT (mantissa >= my_ldexp (1.0L, i - LDBL_MIN_EXP)); + ASSERT (mantissa <= my_ldexp (2.0L, i - LDBL_MIN_EXP)); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + for (i = 1, x = 1.73205L; i <= LDBL_MAX_EXP; i++, x *= 2.0L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.73205L); + } + for (i = 1, x = 1.73205L; i >= MIN_NORMAL_EXP; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == i - 1); + ASSERT (mantissa == 1.73205L); + } + for (; i >= MIN_SUBNORMAL_EXP && x > 0.0L; i--, x *= 0.5L) + { + int exp = -9999; + long double mantissa = printf_frexpl (x, &exp); + ASSERT (exp == LDBL_MIN_EXP - 1); + ASSERT (mantissa >= my_ldexp (1.0L, i - LDBL_MIN_EXP)); + ASSERT (mantissa <= my_ldexp (2.0L, i - LDBL_MIN_EXP)); + ASSERT (mantissa == my_ldexp (x, - exp)); + } + + return 0; +} diff --git a/tests/test-signbit.c b/tests/test-signbit.c new file mode 100644 index 00000000..97f68e6a --- /dev/null +++ b/tests/test-signbit.c @@ -0,0 +1,204 @@ +/* Test of signbit() substitute. + Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +float zerof = 0.0f; +double zerod = 0.0; +long double zerol = 0.0L; + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0f. + So we use -zerof instead. */ + +/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. + So we use -zerod instead. */ + +/* On HP-UX 10.20, negating 0.0L does not yield -0.0L. + So we use minus_zerol instead. + IRIX cc can't put -0.0L into .data, but can compute at runtime. + Note that the expression -LDBL_MIN * LDBL_MIN does not work on other + platforms, such as when cross-compiling to PowerPC on MacOS X 10.5. */ +#if defined __hpux || defined __sgi +static long double +compute_minus_zerol (void) +{ + return -LDBL_MIN * LDBL_MIN; +} +# define minus_zerol compute_minus_zerol () +#else +long double minus_zerol = -0.0L; +#endif + +static void +test_signbitf () +{ + /* Finite values. */ + ASSERT (!signbit (3.141f)); + ASSERT (!signbit (3.141e30f)); + ASSERT (!signbit (3.141e-30f)); + ASSERT (signbit (-2.718f)); + ASSERT (signbit (-2.718e30f)); + ASSERT (signbit (-2.718e-30f)); + /* Zeros. */ + ASSERT (!signbit (0.0f)); + if (1.0f / -zerof < 0) + ASSERT (signbit (-zerof)); + else + ASSERT (!signbit (-zerof)); + /* Infinite values. */ + ASSERT (!signbit (1.0f / 0.0f)); + ASSERT (signbit (-1.0f / 0.0f)); + /* Quiet NaN. */ + (void) signbit (zerof / zerof); +#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT + /* Signalling NaN. */ + { + #define NWORDS \ + ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { float value; unsigned int word[NWORDS]; } memory_float; + memory_float m; + m.value = zerof / zerof; +# if FLT_EXPBIT0_BIT > 0 + m.word[FLT_EXPBIT0_WORD] ^= (unsigned int) 1 << (FLT_EXPBIT0_BIT - 1); +# else + m.word[FLT_EXPBIT0_WORD + (FLT_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + if (FLT_EXPBIT0_WORD < NWORDS / 2) + m.word[FLT_EXPBIT0_WORD + 1] |= (unsigned int) 1 << FLT_EXPBIT0_BIT; + else + m.word[0] |= (unsigned int) 1; + (void) signbit (m.value); + #undef NWORDS + } +#endif +} + +static void +test_signbitd () +{ + /* Finite values. */ + ASSERT (!signbit (3.141)); + ASSERT (!signbit (3.141e30)); + ASSERT (!signbit (3.141e-30)); + ASSERT (signbit (-2.718)); + ASSERT (signbit (-2.718e30)); + ASSERT (signbit (-2.718e-30)); + /* Zeros. */ + ASSERT (!signbit (0.0)); + if (1.0 / -zerod < 0) + ASSERT (signbit (-zerod)); + else + ASSERT (!signbit (-zerod)); + /* Infinite values. */ + ASSERT (!signbit (1.0 / 0.0)); + ASSERT (signbit (-1.0 / 0.0)); + /* Quiet NaN. */ + (void) signbit (zerod / zerod); +#if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT + /* Signalling NaN. */ + { + #define NWORDS \ + ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { double value; unsigned int word[NWORDS]; } memory_double; + memory_double m; + m.value = zerod / zerod; +# if DBL_EXPBIT0_BIT > 0 + m.word[DBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (DBL_EXPBIT0_BIT - 1); +# else + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + m.word[DBL_EXPBIT0_WORD + (DBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << DBL_EXPBIT0_BIT; + (void) signbit (m.value); + #undef NWORDS + } +#endif +} + +static void +test_signbitl () +{ + /* Finite values. */ + ASSERT (!signbit (3.141L)); + ASSERT (!signbit (3.141e30L)); + ASSERT (!signbit (3.141e-30L)); + ASSERT (signbit (-2.718L)); + ASSERT (signbit (-2.718e30L)); + ASSERT (signbit (-2.718e-30L)); + /* Zeros. */ + ASSERT (!signbit (0.0L)); + if (1.0L / minus_zerol < 0) + ASSERT (signbit (minus_zerol)); + else + ASSERT (!signbit (minus_zerol)); + /* Infinite values. */ + ASSERT (!signbit (1.0L / 0.0L)); + ASSERT (signbit (-1.0L / 0.0L)); + /* Quiet NaN. */ + (void) signbit (zerol / zerol); +#if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT + /* Signalling NaN. */ + { + #define NWORDS \ + ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) + typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; + memory_long_double m; + m.value = zerol / zerol; +# if LDBL_EXPBIT0_BIT > 0 + m.word[LDBL_EXPBIT0_WORD] ^= (unsigned int) 1 << (LDBL_EXPBIT0_BIT - 1); +# else + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); +# endif + m.word[LDBL_EXPBIT0_WORD + (LDBL_EXPBIT0_WORD < NWORDS / 2 ? 1 : - 1)] + |= (unsigned int) 1 << LDBL_EXPBIT0_BIT; + (void) signbit (m.value); + #undef NWORDS + } +#endif +} + +int +main () +{ + test_signbitf (); + test_signbitd (); + test_signbitl (); + return 0; +} diff --git a/tests/test-stdbool.c b/tests/test-stdbool.c new file mode 100644 index 00000000..30d53217 --- /dev/null +++ b/tests/test-stdbool.c @@ -0,0 +1,95 @@ +/* Test of substitute. + Copyright (C) 2002-2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#ifndef bool + "error: bool is not defined" +#endif +#ifndef false + "error: false is not defined" +#endif +#if false + "error: false is not 0" +#endif +#ifndef true + "error: true is not defined" +#endif +#if true != 1 + "error: true is not 1" +#endif +#ifndef __bool_true_false_are_defined + "error: __bool_true_false_are_defined is not defined" +#endif + +#if 0 /* Cannot be guaranteed with gnulib's . */ +struct s { _Bool s: 1; _Bool t; } s; +#endif + +char a[true == 1 ? 1 : -1]; +char b[false == 0 ? 1 : -1]; +char c[__bool_true_false_are_defined == 1 ? 1 : -1]; +#if 0 /* Cannot be guaranteed with gnulib's . */ +char d[(bool) 0.5 == true ? 1 : -1]; +bool e = &s; +#endif +char f[(_Bool) 0.0 == false ? 1 : -1]; +char g[true]; +char h[sizeof (_Bool)]; +#if 0 /* See above. */ +char i[sizeof s.t]; +#endif +enum { j = false, k = true, l = false * true, m = true * 256 }; +_Bool n[m]; +char o[sizeof n == m * sizeof n[0] ? 1 : -1]; +char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; +#if 0 /* Cannot be guaranteed with gnulib's . */ +#if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a run-time + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); +#endif +#endif +/* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ +_Bool q = true; +_Bool *pq = &q; + +int +main () +{ + return 0; +} diff --git a/tests/test-stdint.c b/tests/test-stdint.c new file mode 100644 index 00000000..a2bf42ac --- /dev/null +++ b/tests/test-stdint.c @@ -0,0 +1,360 @@ +/* Test of substitute. + Copyright (C) 2006-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2006. */ + +#include + +/* Whether to enable pedantic checks. */ +#define DO_PEDANTIC 0 + +#define __STDC_LIMIT_MACROS 1 /* to make it work also in C++ mode */ +#include + +#include "verify.h" +#include "intprops.h" + +#if __GNUC__ >= 2 && DO_PEDANTIC +# define verify_same_types(expr1,expr2) \ + extern void _verify_func(__LINE__) (__typeof__ (expr1) *); \ + extern void _verify_func(__LINE__) (__typeof__ (expr2) *); +# define _verify_func(line) _verify_func2(line) +# define _verify_func2(line) verify_func_ ## line +#else +# define verify_same_types(expr1,expr2) extern void verify_func (int) +#endif + +/* 7.18.1.1. Exact-width integer types */ +/* 7.18.2.1. Limits of exact-width integer types */ + +int8_t a1[3] = { INT8_C (17), INT8_MIN, INT8_MAX }; +verify (TYPE_MINIMUM (int8_t) == INT8_MIN); +verify (TYPE_MAXIMUM (int8_t) == INT8_MAX); +verify_same_types (INT8_MIN, (int8_t) 0 + 0); +verify_same_types (INT8_MAX, (int8_t) 0 + 0); + +int16_t a2[3] = { INT16_C (17), INT16_MIN, INT16_MAX }; +verify (TYPE_MINIMUM (int16_t) == INT16_MIN); +verify (TYPE_MAXIMUM (int16_t) == INT16_MAX); +verify_same_types (INT16_MIN, (int16_t) 0 + 0); +verify_same_types (INT16_MAX, (int16_t) 0 + 0); + +int32_t a3[3] = { INT32_C (17), INT32_MIN, INT32_MAX }; +verify (TYPE_MINIMUM (int32_t) == INT32_MIN); +verify (TYPE_MAXIMUM (int32_t) == INT32_MAX); +verify_same_types (INT32_MIN, (int32_t) 0 + 0); +verify_same_types (INT32_MAX, (int32_t) 0 + 0); + +#ifdef INT64_MAX +int64_t a4[3] = { INT64_C (17), INT64_MIN, INT64_MAX }; +verify (TYPE_MINIMUM (int64_t) == INT64_MIN); +verify (TYPE_MAXIMUM (int64_t) == INT64_MAX); +verify_same_types (INT64_MIN, (int64_t) 0 + 0); +verify_same_types (INT64_MAX, (int64_t) 0 + 0); +#endif + +uint8_t b1[2] = { UINT8_C (17), UINT8_MAX }; +verify (TYPE_MAXIMUM (uint8_t) == UINT8_MAX); +verify_same_types (UINT8_MAX, (uint8_t) 0 + 0); + +uint16_t b2[2] = { UINT16_C (17), UINT16_MAX }; +verify (TYPE_MAXIMUM (uint16_t) == UINT16_MAX); +verify_same_types (UINT16_MAX, (uint16_t) 0 + 0); + +uint32_t b3[2] = { UINT32_C (17), UINT32_MAX }; +verify (TYPE_MAXIMUM (uint32_t) == UINT32_MAX); +verify_same_types (UINT32_MAX, (uint32_t) 0 + 0); + +#ifdef UINT64_MAX +uint64_t b4[2] = { UINT64_C (17), UINT64_MAX }; +verify (TYPE_MAXIMUM (uint64_t) == UINT64_MAX); +verify_same_types (UINT64_MAX, (uint64_t) 0 + 0); +#endif + +#if INT8_MIN && INT8_MAX && INT16_MIN && INT16_MAX && INT32_MIN && INT32_MAX +/* ok */ +#else +err or; +#endif + +#if UINT8_MAX && UINT16_MAX && UINT32_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.2. Minimum-width integer types */ +/* 7.18.2.2. Limits of minimum-width integer types */ + +int_least8_t c1[3] = { 17, INT_LEAST8_MIN, INT_LEAST8_MAX }; +verify (TYPE_MINIMUM (int_least8_t) == INT_LEAST8_MIN); +verify (TYPE_MAXIMUM (int_least8_t) == INT_LEAST8_MAX); +verify_same_types (INT_LEAST8_MIN, (int_least8_t) 0 + 0); +verify_same_types (INT_LEAST8_MAX, (int_least8_t) 0 + 0); + +int_least16_t c2[3] = { 17, INT_LEAST16_MIN, INT_LEAST16_MAX }; +verify (TYPE_MINIMUM (int_least16_t) == INT_LEAST16_MIN); +verify (TYPE_MAXIMUM (int_least16_t) == INT_LEAST16_MAX); +verify_same_types (INT_LEAST16_MIN, (int_least16_t) 0 + 0); +verify_same_types (INT_LEAST16_MAX, (int_least16_t) 0 + 0); + +int_least32_t c3[3] = { 17, INT_LEAST32_MIN, INT_LEAST32_MAX }; +verify (TYPE_MINIMUM (int_least32_t) == INT_LEAST32_MIN); +verify (TYPE_MAXIMUM (int_least32_t) == INT_LEAST32_MAX); +verify_same_types (INT_LEAST32_MIN, (int_least32_t) 0 + 0); +verify_same_types (INT_LEAST32_MAX, (int_least32_t) 0 + 0); + +#ifdef INT_LEAST64_MAX +int_least64_t c4[3] = { 17, INT_LEAST64_MIN, INT_LEAST64_MAX }; +verify (TYPE_MINIMUM (int_least64_t) == INT_LEAST64_MIN); +verify (TYPE_MAXIMUM (int_least64_t) == INT_LEAST64_MAX); +verify_same_types (INT_LEAST64_MIN, (int_least64_t) 0 + 0); +verify_same_types (INT_LEAST64_MAX, (int_least64_t) 0 + 0); +#endif + +uint_least8_t d1[2] = { 17, UINT_LEAST8_MAX }; +verify (TYPE_MAXIMUM (uint_least8_t) == UINT_LEAST8_MAX); +verify_same_types (UINT_LEAST8_MAX, (uint_least8_t) 0 + 0); + +uint_least16_t d2[2] = { 17, UINT_LEAST16_MAX }; +verify (TYPE_MAXIMUM (uint_least16_t) == UINT_LEAST16_MAX); +verify_same_types (UINT_LEAST16_MAX, (uint_least16_t) 0 + 0); + +uint_least32_t d3[2] = { 17, UINT_LEAST32_MAX }; +verify (TYPE_MAXIMUM (uint_least32_t) == UINT_LEAST32_MAX); +verify_same_types (UINT_LEAST32_MAX, (uint_least32_t) 0 + 0); + +#ifdef UINT_LEAST64_MAX +uint_least64_t d4[2] = { 17, UINT_LEAST64_MAX }; +verify (TYPE_MAXIMUM (uint_least64_t) == UINT_LEAST64_MAX); +verify_same_types (UINT_LEAST64_MAX, (uint_least64_t) 0 + 0); +#endif + +#if INT_LEAST8_MIN && INT_LEAST8_MAX && INT_LEAST16_MIN && INT_LEAST16_MAX && INT_LEAST32_MIN && INT_LEAST32_MAX +/* ok */ +#else +err or; +#endif + +#if UINT_LEAST8_MAX && UINT_LEAST16_MAX && UINT_LEAST32_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.3. Fastest minimum-width integer types */ +/* 7.18.2.3. Limits of fastest minimum-width integer types */ + +int_fast8_t e1[3] = { 17, INT_FAST8_MIN, INT_FAST8_MAX }; +verify (TYPE_MINIMUM (int_fast8_t) == INT_FAST8_MIN); +verify (TYPE_MAXIMUM (int_fast8_t) == INT_FAST8_MAX); +verify_same_types (INT_FAST8_MIN, (int_fast8_t) 0 + 0); +verify_same_types (INT_FAST8_MAX, (int_fast8_t) 0 + 0); + +int_fast16_t e2[3] = { 17, INT_FAST16_MIN, INT_FAST16_MAX }; +verify (TYPE_MINIMUM (int_fast16_t) == INT_FAST16_MIN); +verify (TYPE_MAXIMUM (int_fast16_t) == INT_FAST16_MAX); +verify_same_types (INT_FAST16_MIN, (int_fast16_t) 0 + 0); +verify_same_types (INT_FAST16_MAX, (int_fast16_t) 0 + 0); + +int_fast32_t e3[3] = { 17, INT_FAST32_MIN, INT_FAST32_MAX }; +verify (TYPE_MINIMUM (int_fast32_t) == INT_FAST32_MIN); +verify (TYPE_MAXIMUM (int_fast32_t) == INT_FAST32_MAX); +verify_same_types (INT_FAST32_MIN, (int_fast32_t) 0 + 0); +verify_same_types (INT_FAST32_MAX, (int_fast32_t) 0 + 0); + +#ifdef INT_FAST64_MAX +int_fast64_t e4[3] = { 17, INT_FAST64_MIN, INT_FAST64_MAX }; +verify (TYPE_MINIMUM (int_fast64_t) == INT_FAST64_MIN); +verify (TYPE_MAXIMUM (int_fast64_t) == INT_FAST64_MAX); +verify_same_types (INT_FAST64_MIN, (int_fast64_t) 0 + 0); +verify_same_types (INT_FAST64_MAX, (int_fast64_t) 0 + 0); +#endif + +uint_fast8_t f1[2] = { 17, UINT_FAST8_MAX }; +verify (TYPE_MAXIMUM (uint_fast8_t) == UINT_FAST8_MAX); +verify_same_types (UINT_FAST8_MAX, (uint_fast8_t) 0 + 0); + +uint_fast16_t f2[2] = { 17, UINT_FAST16_MAX }; +verify (TYPE_MAXIMUM (uint_fast16_t) == UINT_FAST16_MAX); +verify_same_types (UINT_FAST16_MAX, (uint_fast16_t) 0 + 0); + +uint_fast32_t f3[2] = { 17, UINT_FAST32_MAX }; +verify (TYPE_MAXIMUM (uint_fast32_t) == UINT_FAST32_MAX); +verify_same_types (UINT_FAST32_MAX, (uint_fast32_t) 0 + 0); + +#ifdef UINT_FAST64_MAX +uint_fast64_t f4[2] = { 17, UINT_FAST64_MAX }; +verify (TYPE_MAXIMUM (uint_fast64_t) == UINT_FAST64_MAX); +verify_same_types (UINT_FAST64_MAX, (uint_fast64_t) 0 + 0); +#endif + +#if INT_FAST8_MIN && INT_FAST8_MAX && INT_FAST16_MIN && INT_FAST16_MAX && INT_FAST32_MIN && INT_FAST32_MAX +/* ok */ +#else +err or; +#endif + +#if UINT_FAST8_MAX && UINT_FAST16_MAX && UINT_FAST32_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.4. Integer types capable of holding object pointers */ +/* 7.18.2.4. Limits of integer types capable of holding object pointers */ + +intptr_t g[3] = { 17, INTPTR_MIN, INTPTR_MAX }; +verify (TYPE_MINIMUM (intptr_t) == INTPTR_MIN); +verify (TYPE_MAXIMUM (intptr_t) == INTPTR_MAX); +verify_same_types (INTPTR_MIN, (intptr_t) 0 + 0); +verify_same_types (INTPTR_MAX, (intptr_t) 0 + 0); + +uintptr_t h[2] = { 17, UINTPTR_MAX }; +verify (TYPE_MAXIMUM (uintptr_t) == UINTPTR_MAX); +verify_same_types (UINTPTR_MAX, (uintptr_t) 0 + 0); + +#if INTPTR_MIN && INTPTR_MAX && UINTPTR_MAX +/* ok */ +#else +err or; +#endif + +/* 7.18.1.5. Greatest-width integer types */ +/* 7.18.2.5. Limits of greatest-width integer types */ + +intmax_t i[3] = { INTMAX_C (17), INTMAX_MIN, INTMAX_MAX }; +verify (TYPE_MINIMUM (intmax_t) == INTMAX_MIN); +verify (TYPE_MAXIMUM (intmax_t) == INTMAX_MAX); +verify_same_types (INTMAX_MIN, (intmax_t) 0 + 0); +verify_same_types (INTMAX_MAX, (intmax_t) 0 + 0); + +uintmax_t j[2] = { UINTMAX_C (17), UINTMAX_MAX }; +verify (TYPE_MAXIMUM (uintmax_t) == UINTMAX_MAX); +verify_same_types (UINTMAX_MAX, (uintmax_t) 0 + 0); + +/* As of 2007, Sun C and HP-UX 10.20 cc don't support 'long long' constants in + the preprocessor. */ +#if !(defined __SUNPRO_C || (defined __hpux && !defined __GNUC__)) +#if INTMAX_MIN && INTMAX_MAX && UINTMAX_MAX +/* ok */ +#else +err or; +#endif +#endif + +/* 7.18.3. Limits of other integer types */ + +#include + +verify (TYPE_MINIMUM (ptrdiff_t) == PTRDIFF_MIN); +verify (TYPE_MAXIMUM (ptrdiff_t) == PTRDIFF_MAX); +verify_same_types (PTRDIFF_MIN, (ptrdiff_t) 0 + 0); +verify_same_types (PTRDIFF_MAX, (ptrdiff_t) 0 + 0); + +#if PTRDIFF_MIN && PTRDIFF_MAX +/* ok */ +#else +err or; +#endif + +#include + +verify (TYPE_MINIMUM (sig_atomic_t) == SIG_ATOMIC_MIN); +verify (TYPE_MAXIMUM (sig_atomic_t) == SIG_ATOMIC_MAX); +verify_same_types (SIG_ATOMIC_MIN, (sig_atomic_t) 0 + 0); +verify_same_types (SIG_ATOMIC_MAX, (sig_atomic_t) 0 + 0); + +#if SIG_ATOMIC_MIN != 17 && SIG_ATOMIC_MAX +/* ok */ +#else +err or; +#endif + +verify (TYPE_MAXIMUM (size_t) == SIZE_MAX); +verify_same_types (SIZE_MAX, (size_t) 0 + 0); + +#if SIZE_MAX +/* ok */ +#else +err or; +#endif + +#if HAVE_WCHAR_T +verify (TYPE_MINIMUM (wchar_t) == WCHAR_MIN); +verify (TYPE_MAXIMUM (wchar_t) == WCHAR_MAX); +verify_same_types (WCHAR_MIN, (wchar_t) 0 + 0); +verify_same_types (WCHAR_MAX, (wchar_t) 0 + 0); + +# if WCHAR_MIN != 17 && WCHAR_MAX +/* ok */ +# else +err or; +# endif +#endif + +#if HAVE_WINT_T +# include + +verify (TYPE_MINIMUM (wint_t) == WINT_MIN); +verify (TYPE_MAXIMUM (wint_t) == WINT_MAX); +verify_same_types (WINT_MIN, (wint_t) 0 + 0); +verify_same_types (WINT_MAX, (wint_t) 0 + 0); + +# if WINT_MIN != 17 && WINT_MAX +/* ok */ +# else +err or; +# endif +#endif + +/* 7.18.4. Macros for integer constants */ + +verify (INT8_C (17) == 17); +verify_same_types (INT8_C (17), (int_least8_t)0 + 0); +verify (UINT8_C (17) == 17); +verify_same_types (UINT8_C (17), (uint_least8_t)0 + 0); + +verify (INT16_C (17) == 17); +verify_same_types (INT16_C (17), (int_least16_t)0 + 0); +verify (UINT16_C (17) == 17); +verify_same_types (UINT16_C (17), (uint_least16_t)0 + 0); + +verify (INT32_C (17) == 17); +verify_same_types (INT32_C (17), (int_least32_t)0 + 0); +verify (UINT32_C (17) == 17); +verify_same_types (UINT32_C (17), (uint_least32_t)0 + 0); + +#ifdef INT64_C +verify (INT64_C (17) == 17); +verify_same_types (INT64_C (17), (int_least64_t)0 + 0); +#endif +#ifdef UINT64_C +verify (UINT64_C (17) == 17); +verify_same_types (UINT64_C (17), (uint_least64_t)0 + 0); +#endif + +verify (INTMAX_C (17) == 17); +verify_same_types (INTMAX_C (17), (intmax_t)0 + 0); +verify (UINTMAX_C (17) == 17); +verify_same_types (UINTMAX_C (17), (uintmax_t)0 + 0); + + +int +main () +{ + return 0; +} diff --git a/tests/test-stdlib.c b/tests/test-stdlib.c new file mode 100644 index 00000000..ae46ba16 --- /dev/null +++ b/tests/test-stdlib.c @@ -0,0 +1,43 @@ +/* Test of substitute. + Copyright (C) 2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include "verify.h" + +int exitcode; + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +verify (sizeof NULL == sizeof (void *)); + +int +main () +{ + /* Check that some macros are defined and different integer constants. */ + switch (exitcode) + { + case EXIT_SUCCESS: + case EXIT_FAILURE: + break; + } + + return 0; +} diff --git a/tests/test-strerror.c b/tests/test-strerror.c new file mode 100644 index 00000000..3d9814d5 --- /dev/null +++ b/tests/test-strerror.c @@ -0,0 +1,65 @@ +/* Test of strerror() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + +/* Written by Eric Blake , 2007. */ + +#include + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char **argv) +{ + char *str; + + str = strerror (EACCES); + ASSERT (str); + ASSERT (*str); + + str = strerror (ETIMEDOUT); + ASSERT (str); + ASSERT (*str); + + str = strerror (EOVERFLOW); + ASSERT (str); + ASSERT (*str); + + str = strerror (0); + ASSERT (str); + ASSERT (*str); + + str = strerror (-3); + ASSERT (str); + ASSERT (*str); + + return 0; +} diff --git a/tests/test-striconveh.c b/tests/test-striconveh.c new file mode 100644 index 00000000..16a16f46 --- /dev/null +++ b/tests/test-striconveh.c @@ -0,0 +1,922 @@ +/* Test of character set conversion with error handling. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "striconveh.h" + +#if HAVE_ICONV +# include +#endif + +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Magic number for detecting bounds violations. */ +#define MAGIC 0x1983EFF1 + +static size_t * +new_offsets (size_t n) +{ + size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); + offsets[n] = MAGIC; + return offsets; +} + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + size_t o; + size_t i; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + iconv_t cd_88591_to_88592 = iconv_open ("ISO-8859-2", "ISO-8859-1"); + iconv_t cd_88592_to_88591 = iconv_open ("ISO-8859-1", "ISO-8859-2"); + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + iconv_t cd_utf8_to_88591 = iconv_open ("ISO-8859-1", "UTF-8"); + iconv_t cd_88592_to_utf8 = iconv_open ("UTF-8", "ISO-8859-2"); + iconv_t cd_utf8_to_88592 = iconv_open ("ISO-8859-2", "UTF-8"); + iconv_t cd_utf7_to_utf8 = iconv_open ("UTF-8", "UTF-7"); + + ASSERT (cd_88591_to_utf8 != (iconv_t)(-1)); + ASSERT (cd_utf8_to_88591 != (iconv_t)(-1)); + ASSERT (cd_88592_to_utf8 != (iconv_t)(-1)); + ASSERT (cd_utf8_to_88592 != (iconv_t)(-1)); + + /* ------------------------ Test mem_cd_iconveh() ------------------------ */ + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconveh (input, strlen (input), + cd_88592_to_88591, + cd_88592_to_utf8, cd_utf8_to_88591, + handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 37; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[37] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconveh (input, strlen (input), + cd_88592_to_88591, + cd_88592_to_utf8, cd_utf8_to_88591, + handler, + offsets, + &result, &length); + switch (handler) + { + case iconveh_error: + ASSERT (retval == -1 && errno == EILSEQ); + ASSERT (result == NULL); + if (o) + free (offsets); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i + 5)); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + break; + } + } + } + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconveh (input, strlen (input), + cd_88591_to_utf8, + cd_88591_to_utf8, (iconv_t)(-1), + handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 37; i++) + ASSERT (offsets[i] == (i < 1 ? i : + i < 12 ? i + 1 : + i < 18 ? i + 2 : + i + 3)); + ASSERT (offsets[37] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconveh (input, strlen (input), + cd_utf8_to_88591, + (iconv_t)(-1), cd_utf8_to_88591, + handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 41; i++) + ASSERT (offsets[i] == (i < 1 ? i : + i == 1 ? (size_t)(-1) : + i < 13 ? i - 1 : + i == 13 ? (size_t)(-1) : + i < 20 ? i - 2 : + i == 20 ? (size_t)(-1) : + i < 40 ? i - 3 : + (size_t)(-1))); + ASSERT (offsets[41] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconveh (input, strlen (input), + cd_utf8_to_88591, + (iconv_t)(-1), cd_utf8_to_88591, + handler, + offsets, + &result, &length); + switch (handler) + { + case iconveh_error: + ASSERT (retval == -1 && errno == EILSEQ); + ASSERT (result == NULL); + if (o) + free (offsets); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 17; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i == 5 ? (size_t)(-1) : + i - 1)); + ASSERT (offsets[17] == MAGIC); + free (offsets); + } + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 17; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i == 5 ? (size_t)(-1) : + i + 4)); + ASSERT (offsets[17] == MAGIC); + free (offsets); + } + free (result); + } + break; + } + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\342"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconveh (input, strlen (input), + cd_utf8_to_88591, + (iconv_t)(-1), cd_utf8_to_88591, + handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == 0); + if (o) + { + ASSERT (offsets[0] == 0); + ASSERT (offsets[1] == MAGIC); + free (offsets); + } + free (result); + } + } + + if (cd_utf7_to_utf8 != (iconv_t)(-1)) + { + /* Disabled on Solaris, because Solaris 9 iconv() is buggy: it returns + -1 / EILSEQ when converting the 7th byte of the input "+VDLYP9hA". */ +# if !(defined __sun && !defined _LIBICONV_VERSION) + /* Test conversion from UTF-7 to UTF-8 with EINVAL. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + /* This is base64 encoded 0x54 0x32 0xD8 0x3F 0xD8 0x40. It would + convert to U+5432 U+D83F U+D840 but these are Unicode surrogates. */ + static const char input[] = "+VDLYP9hA"; + static const char expected1[] = "\345\220\262"; /* 吲 glibc */ + static const char expected2[] = ""; /* libiconv */ + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconveh (input, 7, + cd_utf7_to_utf8, + cd_utf7_to_utf8, (iconv_t)(-1), + handler, + NULL, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected1) || length == strlen (expected2)); + ASSERT (result != NULL); + if (length == strlen (expected1)) + ASSERT (memcmp (result, expected1, strlen (expected1)) == 0); + else + ASSERT (memcmp (result, expected2, strlen (expected2)) == 0); + free (result); + } + + /* Test conversion from UTF-7 to UTF-8 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + /* This is base64 encoded 0xD8 0x3F 0xD8 0x40 0xD8 0x41. It would + convert to U+D83F U+D840 U+D841 but these are Unicode surrogates. */ + static const char input[] = "+2D/YQNhB"; + char *result = NULL; + size_t length = 0; + int retval = mem_cd_iconveh (input, strlen (input), + cd_utf7_to_utf8, + cd_utf7_to_utf8, (iconv_t)(-1), + handler, + NULL, + &result, &length); + switch (handler) + { + case iconveh_error: + ASSERT (retval == -1 && errno == EILSEQ); + ASSERT (result == NULL); + break; + case iconveh_question_mark: + case iconveh_escape_sequence: + { + /* glibc result */ + static const char expected1[] = "?????"; + /* libiconv <= 1.12 result */ + static const char expected2[] = "?2D/YQNhB"; + /* libiconv behaviour changed in version 1.13: the result is + '?' U+0FF6 U+1036; this is U+D83F U+D840 U+D841 shifted left + by 6 bits. */ + static const char expected3[] = "?\340\277\266\341\200\266"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected1) + || length == strlen (expected2) + || length == strlen (expected3)); + ASSERT (result != NULL); + if (length == strlen (expected1)) + ASSERT (memcmp (result, expected1, strlen (expected1)) == 0); + else if (length == strlen (expected2)) + ASSERT (memcmp (result, expected2, strlen (expected2)) == 0); + else + ASSERT (memcmp (result, expected3, strlen (expected3)) == 0); + free (result); + } + break; + } + } +# endif + } + + /* ------------------------ Test str_cd_iconveh() ------------------------ */ + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = str_cd_iconveh (input, + cd_88592_to_88591, + cd_88592_to_utf8, cd_utf8_to_88591, + handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + char *result = str_cd_iconveh (input, + cd_88592_to_88591, + cd_88592_to_utf8, cd_utf8_to_88591, + handler); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL && errno == EILSEQ); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + } + } + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + char *result = str_cd_iconveh (input, + cd_88591_to_utf8, + cd_88591_to_utf8, (iconv_t)(-1), + handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = str_cd_iconveh (input, + cd_utf8_to_88591, + (iconv_t)(-1), cd_utf8_to_88591, + handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ + char *result = str_cd_iconveh (input, + cd_utf8_to_88591, + (iconv_t)(-1), cd_utf8_to_88591, + handler); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL && errno == EILSEQ); + break; + case iconveh_question_mark: + { + static const char expected[] = "Costs: 27 ?"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Costs: 27 \\u20AC"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\342"; + char *result = str_cd_iconveh (input, + cd_utf8_to_88591, + (iconv_t)(-1), cd_utf8_to_88591, + handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, "") == 0); + free (result); + } + + if (cd_88591_to_88592 != (iconv_t)(-1)) + iconv_close (cd_88591_to_88592); + if (cd_88592_to_88591 != (iconv_t)(-1)) + iconv_close (cd_88592_to_88591); + iconv_close (cd_88591_to_utf8); + iconv_close (cd_utf8_to_88591); + iconv_close (cd_88592_to_utf8); + iconv_close (cd_utf8_to_88592); + + /* ------------------------- Test mem_iconveh() ------------------------- */ + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveh (input, strlen (input), + "ISO-8859-2", "ISO-8859-1", + handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 37; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[37] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveh (input, strlen (input), + "ISO-8859-2", "ISO-8859-1", + handler, + offsets, + &result, &length); + switch (handler) + { + case iconveh_error: + ASSERT (retval == -1 && errno == EILSEQ); + ASSERT (result == NULL); + if (o) + free (offsets); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i + 5)); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + break; + } + } + } + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveh (input, strlen (input), + "ISO-8859-1", "UTF-8", + handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 37; i++) + ASSERT (offsets[i] == (i < 1 ? i : + i < 12 ? i + 1 : + i < 18 ? i + 2 : + i + 3)); + ASSERT (offsets[37] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveh (input, strlen (input), + "UTF-8", "ISO-8859-1", + handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 41; i++) + ASSERT (offsets[i] == (i < 1 ? i : + i == 1 ? (size_t)(-1) : + i < 13 ? i - 1 : + i == 13 ? (size_t)(-1) : + i < 20 ? i - 2 : + i == 20 ? (size_t)(-1) : + i < 40 ? i - 3 : + (size_t)(-1))); + ASSERT (offsets[41] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveh (input, strlen (input), + "UTF-8", "ISO-8859-1", + handler, + offsets, + &result, &length); + switch (handler) + { + case iconveh_error: + ASSERT (retval == -1 && errno == EILSEQ); + ASSERT (result == NULL); + if (o) + free (offsets); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 17; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i == 5 ? (size_t)(-1) : + i - 1)); + ASSERT (offsets[17] == MAGIC); + free (offsets); + } + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 17; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i == 5 ? (size_t)(-1) : + i + 4)); + ASSERT (offsets[17] == MAGIC); + free (offsets); + } + free (result); + } + break; + } + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\342"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveh (input, strlen (input), + "UTF-8", "ISO-8859-1", + handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == 0); + if (o) + { + ASSERT (offsets[0] == 0); + ASSERT (offsets[1] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* ------------------------- Test str_iconveh() ------------------------- */ + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = str_iconveh (input, "ISO-8859-2", "ISO-8859-1", handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + char *result = str_iconveh (input, "ISO-8859-2", "ISO-8859-1", handler); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL && errno == EILSEQ); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + } + } + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + char *result = str_iconveh (input, "ISO-8859-1", "UTF-8", handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = str_iconveh (input, "UTF-8", "ISO-8859-1", handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ + char *result = str_iconveh (input, "UTF-8", "ISO-8859-1", handler); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL && errno == EILSEQ); + break; + case iconveh_question_mark: + { + static const char expected[] = "Costs: 27 ?"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Costs: 27 \\u20AC"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\342"; + char *result = str_iconveh (input, "UTF-8", "ISO-8859-1", handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, "") == 0); + free (result); + } + +#endif + + return 0; +} diff --git a/tests/test-striconveha.c b/tests/test-striconveha.c new file mode 100644 index 00000000..47e9a46e --- /dev/null +++ b/tests/test-striconveha.c @@ -0,0 +1,609 @@ +/* Test of character set conversion with error handling and autodetection. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "striconveha.h" + +#if HAVE_ICONV +# include +#endif + +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Magic number for detecting bounds violations. */ +#define MAGIC 0x1983EFF1 + +static size_t * +new_offsets (size_t n) +{ + size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); + offsets[n] = MAGIC; + return offsets; +} + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + size_t o; + size_t i; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* ------------------------- Test mem_iconveha() ------------------------- */ + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveha (input, strlen (input), + "ISO-8859-2", "ISO-8859-1", + false, handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 37; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[37] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveha (input, strlen (input), + "ISO-8859-2", "ISO-8859-1", + false, handler, + offsets, + &result, &length); + switch (handler) + { + case iconveh_error: + ASSERT (retval == -1 && errno == EILSEQ); + ASSERT (result == NULL); + if (o) + free (offsets); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i + 5)); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + break; + } + } + } + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveha (input, strlen (input), + "ISO-8859-1", "UTF-8", + false, handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 37; i++) + ASSERT (offsets[i] == (i < 1 ? i : + i < 12 ? i + 1 : + i < 18 ? i + 2 : + i + 3)); + ASSERT (offsets[37] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveha (input, strlen (input), + "UTF-8", "ISO-8859-1", + false, handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 41; i++) + ASSERT (offsets[i] == (i < 1 ? i : + i == 1 ? (size_t)(-1) : + i < 13 ? i - 1 : + i == 13 ? (size_t)(-1) : + i < 20 ? i - 2 : + i == 20 ? (size_t)(-1) : + i < 40 ? i - 3 : + (size_t)(-1))); + ASSERT (offsets[41] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveha (input, strlen (input), + "UTF-8", "ISO-8859-1", + false, handler, + offsets, + &result, &length); + switch (handler) + { + case iconveh_error: + ASSERT (retval == -1 && errno == EILSEQ); + ASSERT (result == NULL); + if (o) + free (offsets); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 17; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i == 5 ? (size_t)(-1) : + i - 1)); + ASSERT (offsets[17] == MAGIC); + free (offsets); + } + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 17; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i == 5 ? (size_t)(-1) : + i + 4)); + ASSERT (offsets[17] == MAGIC); + free (offsets); + } + free (result); + } + break; + } + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\342"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveha (input, strlen (input), + "UTF-8", "ISO-8859-1", + false, handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == 0); + if (o) + { + ASSERT (offsets[0] == 0); + ASSERT (offsets[1] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ +# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) + /* Test conversions from autodetect_jp to UTF-8. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ + static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveha (input, strlen (input), + "autodetect_jp", "UTF-8", + false, handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 10; i++) + ASSERT (offsets[i] == ((i % 2) == 0 ? (i / 2) * 3 : (size_t)(-1))); + ASSERT (offsets[10] == MAGIC); + free (offsets); + } + free (result); + } + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ + static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveha (input, strlen (input), + "autodetect_jp", "UTF-8", + false, handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 10; i++) + ASSERT (offsets[i] == ((i % 2) == 0 ? (i / 2) * 3 : (size_t)(-1))); + ASSERT (offsets[10] == MAGIC); + free (offsets); + } + free (result); + } + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ + static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveha (input, strlen (input), + "autodetect_jp", "UTF-8", + false, handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == (i == 0 ? 0 : + i == 5 ? 3 : + i == 7 ? 6 : + i == 9 ? 9 : + i == 11 ? 12 : + i == 13 ? 15 : + (size_t)(-1))); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + } +# endif + +# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 || _LIBICONV_VERSION >= 0x0105 + /* Test conversion from UTF-8 to ISO-8859-1 with transliteration. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ + static const char expected[] = "Costs: 27 EUR"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + char *result = NULL; + size_t length = 0; + int retval = mem_iconveha (input, strlen (input), + "UTF-8", "ISO-8859-1", + true, handler, + offsets, + &result, &length); + ASSERT (retval == 0); + ASSERT (length == strlen (expected)); + ASSERT (result != NULL && memcmp (result, expected, strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 13; i++) + ASSERT (offsets[i] == (i < 11 ? i : (size_t)(-1))); + ASSERT (offsets[13] == MAGIC); + free (offsets); + } + free (result); + } + } +# endif + + /* ------------------------- Test str_iconveha() ------------------------- */ + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = str_iconveha (input, "ISO-8859-2", "ISO-8859-1", false, handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from ISO-8859-2 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + char *result = str_iconveha (input, "ISO-8859-2", "ISO-8859-1", false, handler); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL && errno == EILSEQ); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + } + } + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const char expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + char *result = str_iconveha (input, "ISO-8859-1", "UTF-8", false, handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", false, handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ + char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", false, handler); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL && errno == EILSEQ); + break; + case iconveh_question_mark: + { + static const char expected[] = "Costs: 27 ?"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Costs: 27 \\u20AC"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\342"; + char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", false, handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, "") == 0); + free (result); + } + + /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ +# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__ || defined __sun) + /* Test conversions from autodetect_jp to UTF-8. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ + static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + char *result = str_iconveha (input, "autodetect_jp", "UTF-8", false, handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ + static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + char *result = str_iconveha (input, "autodetect_jp", "UTF-8", false, handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ + static const char expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + char *result = str_iconveha (input, "autodetect_jp", "UTF-8", false, handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } +# endif + +# if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 || _LIBICONV_VERSION >= 0x0105 + /* Test conversion from UTF-8 to ISO-8859-1 with transliteration. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Costs: 27 \342\202\254"; /* EURO SIGN */ + static const char expected[] = "Costs: 27 EUR"; + char *result = str_iconveha (input, "UTF-8", "ISO-8859-1", true, handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } +# endif + +#endif + + return 0; +} diff --git a/tests/test-string.c b/tests/test-string.c new file mode 100644 index 00000000..fe53cd9b --- /dev/null +++ b/tests/test-string.c @@ -0,0 +1,33 @@ +/* Test of substitute. + Copyright (C) 2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include "verify.h" + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +verify (sizeof NULL == sizeof (void *)); + +int +main () +{ + return 0; +} diff --git a/tests/test-unistd.c b/tests/test-unistd.c new file mode 100644 index 00000000..129367b4 --- /dev/null +++ b/tests/test-unistd.c @@ -0,0 +1,56 @@ +/* Test of substitute. + Copyright (C) 2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include "verify.h" + +/* Check that NULL can be passed through varargs as a pointer type, + per POSIX 2008. */ +verify (sizeof NULL == sizeof (void *)); + +/* Check that the various SEEK_* macros are defined. */ +int sk[] = { SEEK_CUR, SEEK_END, SEEK_SET }; + +/* Check that the various *_FILENO macros are defined. */ +#if ! (defined STDIN_FILENO \ + && (STDIN_FILENO + STDOUT_FILENO + STDERR_FILENO == 3)) +missing or broken *_FILENO macros +#endif + +/* Check that the types are all defined. */ +size_t t1; +ssize_t t2; +#ifdef TODO /* Not implemented in gnulib yet */ +uid_t t3; +gid_t t4; +#endif +off_t t5; +pid_t t6; +#ifdef TODO +useconds_t t7; +intptr_t t8; +#endif + +int +main () +{ + return 0; +} diff --git a/tests/test-wchar.c b/tests/test-wchar.c new file mode 100644 index 00000000..19da7d93 --- /dev/null +++ b/tests/test-wchar.c @@ -0,0 +1,31 @@ +/* Test of substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +/* Check that the types wchar_t and wint_t are defined. */ +wchar_t a = 'c'; +wint_t b = 'x'; + +int +main () +{ + return 0; +} diff --git a/tests/test-wctype.c b/tests/test-wctype.c new file mode 100644 index 00000000..c2d86016 --- /dev/null +++ b/tests/test-wctype.c @@ -0,0 +1,46 @@ +/* Test of substitute. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +/* Check that the type wint_t is defined. */ +wint_t a = 'x'; + +int +main () +{ + /* Check that the isw* functions exist as functions or as macros. */ + (void) iswalnum (0); + (void) iswalpha (0); +#if 0 /* not portable: missing on mingw */ + (void) iswblank (0); +#endif + (void) iswcntrl (0); + (void) iswdigit (0); + (void) iswgraph (0); + (void) iswlower (0); + (void) iswprint (0); + (void) iswpunct (0); + (void) iswspace (0); + (void) iswupper (0); + (void) iswxdigit (0); + + return 0; +} diff --git a/tests/test-wcwidth.c b/tests/test-wcwidth.c new file mode 100644 index 00000000..582a8aa2 --- /dev/null +++ b/tests/test-wcwidth.c @@ -0,0 +1,91 @@ +/* Test of wcwidth() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include + +#include +#include +#include +#include + +#include "localcharset.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + wchar_t wc; + + /* Test width of ASCII characters. */ + for (wc = 0x20; wc < 0x7F; wc++) + ASSERT (wcwidth (wc) == 1); + + /* Switch to an UTF-8 locale. */ + if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL + /* Check whether it's really an UTF-8 locale. + On OpenBSD 4.0, the setlocale call succeeds only for the LC_CTYPE + category and therefore returns "C/fr_FR.UTF-8/C/C/C/C", but the + LC_CTYPE category is effectively set to an ASCII LC_CTYPE category; + in particular, locale_charset() returns "ASCII". */ + && strcmp (locale_charset (), "UTF-8") == 0) + { + /* Test width of ASCII characters. */ + for (wc = 0x20; wc < 0x7F; wc++) + ASSERT (wcwidth (wc) == 1); + + /* Test width of some non-spacing characters. */ + ASSERT (wcwidth (0x0301) == 0); + ASSERT (wcwidth (0x05B0) == 0); + + /* Test width of some format control characters. */ + ASSERT (wcwidth (0x200E) <= 0); + ASSERT (wcwidth (0x2060) <= 0); +#if 0 /* wchar_t may be only 16 bits. */ + ASSERT (wcwidth (0xE0001) <= 0); + ASSERT (wcwidth (0xE0044) <= 0); +#endif + + /* Test width of some zero width characters. */ + ASSERT (wcwidth (0x200B) == 0); + ASSERT (wcwidth (0xFEFF) <= 0); + + /* Test width of some CJK characters. */ + ASSERT (wcwidth (0x3000) == 2); + ASSERT (wcwidth (0xB250) == 2); + ASSERT (wcwidth (0xFF1A) == 2); +#if 0 /* wchar_t may be only 16 bits. */ + ASSERT (wcwidth (0x20369) == 2); + ASSERT (wcwidth (0x2F876) == 2); +#endif + } + + return 0; +} diff --git a/tests/unicase/test-casecmp.h b/tests/unicase/test-casecmp.h new file mode 100644 index 00000000..d057f898 --- /dev/null +++ b/tests/unicase/test-casecmp.h @@ -0,0 +1,69 @@ +/* Test of case and normalization insensitive comparison of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +static void +test_ascii (int (*my_casecmp) (const UNIT *, size_t, const UNIT *, size_t, const char *, uninorm_t, int *), + uninorm_t nf) +{ + /* Empty string. */ + { + int cmp; + + ASSERT (my_casecmp (NULL, 0, NULL, 0, NULL, nf, &cmp) == 0); + ASSERT (cmp == 0); + } + { + static const UNIT input[] = { 'x', 'y' }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), NULL, 0, NULL, nf, &cmp) == 0); + ASSERT (cmp == 1); + + ASSERT (my_casecmp (NULL, 0, input, SIZEOF (input), NULL, nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input, SIZEOF (input), input, SIZEOF (input), NULL, nf, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Normal lexicographic order. */ + { + static const UNIT input1[] = { 'A', 'm', 'e', 'r', 'i', 'c', 'a' }; + static const UNIT input2[] = { 'A', 'm', 'i', 'g', 'o' }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, nf, &cmp) == 0); + ASSERT (cmp == 1); + } + + /* Shorter and longer strings. */ + { + static const UNIT input1[] = { 'R', 'e', 'a', 'g', 'a', 'n' }; + static const UNIT input2[] = { 'R', 'e', 'a', 'g', 'a', 'n', 'o', 'm', 'i', 'c', 's' }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, nf, &cmp) == 0); + ASSERT (cmp == 1); + } +} diff --git a/tests/unicase/test-cased.c b/tests/unicase/test-cased.c new file mode 100644 index 00000000..37af3d22 --- /dev/null +++ b/tests/unicase/test-cased.c @@ -0,0 +1,135 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0041, 0x005A }, + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00BA, 0x00BA }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00F6 }, + { 0x00F8, 0x01BA }, + { 0x01BC, 0x01BF }, + { 0x01C4, 0x0293 }, + { 0x0295, 0x02B8 }, + { 0x02C0, 0x02C1 }, + { 0x02E0, 0x02E4 }, + { 0x0345, 0x0345 }, + { 0x0370, 0x0373 }, + { 0x0376, 0x0377 }, + { 0x037A, 0x037D }, + { 0x0386, 0x0386 }, + { 0x0388, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x03F5 }, + { 0x03F7, 0x0481 }, + { 0x048A, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0561, 0x0587 }, + { 0x10A0, 0x10C5 }, + { 0x1D00, 0x1DBF }, + { 0x1E00, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FBC }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FC4 }, + { 0x1FC6, 0x1FCC }, + { 0x1FD0, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FE0, 0x1FEC }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFC }, + { 0x2071, 0x2071 }, + { 0x207F, 0x207F }, + { 0x2090, 0x2094 }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2119, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x2128 }, + { 0x212A, 0x212D }, + { 0x212F, 0x2134 }, + { 0x2139, 0x2139 }, + { 0x213C, 0x213F }, + { 0x2145, 0x2149 }, + { 0x214E, 0x214E }, + { 0x2160, 0x217F }, + { 0x2183, 0x2184 }, + { 0x24B6, 0x24E9 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CE4 }, + { 0x2D00, 0x2D25 }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA66D }, + { 0xA680, 0xA697 }, + { 0xA722, 0xA787 }, + { 0xA78B, 0xA78C }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFF21, 0xFF3A }, + { 0xFF41, 0xFF5A }, + { 0x10400, 0x1044F }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6FA }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D734 }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D76E }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D7A8 }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7CB } + +#define PREDICATE(c) uc_is_cased (c) +#include "test-predicate-part2.h" diff --git a/tests/unicase/test-ignorable.c b/tests/unicase/test-ignorable.c new file mode 100644 index 00000000..94f809e9 --- /dev/null +++ b/tests/unicase/test-ignorable.c @@ -0,0 +1,246 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0027, 0x0027 }, + { 0x002E, 0x002E }, + { 0x003A, 0x003A }, + { 0x005E, 0x005E }, + { 0x0060, 0x0060 }, + { 0x00A8, 0x00A8 }, + { 0x00AD, 0x00AD }, + { 0x00AF, 0x00AF }, + { 0x00B4, 0x00B4 }, + { 0x00B7, 0x00B8 }, + { 0x02B9, 0x02BF }, + { 0x02C2, 0x02DF }, + { 0x02E5, 0x0344 }, + { 0x0346, 0x036F }, + { 0x0374, 0x0375 }, + { 0x0384, 0x0385 }, + { 0x0387, 0x0387 }, + { 0x0483, 0x0489 }, + { 0x0559, 0x0559 }, + { 0x0591, 0x05BD }, + { 0x05BF, 0x05BF }, + { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, + { 0x05C7, 0x05C7 }, + { 0x05F4, 0x05F4 }, + { 0x0600, 0x0603 }, + { 0x0610, 0x061A }, + { 0x0640, 0x0640 }, + { 0x064B, 0x065E }, + { 0x0670, 0x0670 }, + { 0x06D6, 0x06E8 }, + { 0x06EA, 0x06ED }, + { 0x070F, 0x070F }, + { 0x0711, 0x0711 }, + { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, + { 0x07EB, 0x07F5 }, + { 0x07FA, 0x07FA }, + { 0x0901, 0x0902 }, + { 0x093C, 0x093C }, + { 0x0941, 0x0948 }, + { 0x094D, 0x094D }, + { 0x0951, 0x0954 }, + { 0x0962, 0x0963 }, + { 0x0971, 0x0971 }, + { 0x0981, 0x0981 }, + { 0x09BC, 0x09BC }, + { 0x09C1, 0x09C4 }, + { 0x09CD, 0x09CD }, + { 0x09E2, 0x09E3 }, + { 0x0A01, 0x0A02 }, + { 0x0A3C, 0x0A3C }, + { 0x0A41, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, + { 0x0A51, 0x0A51 }, + { 0x0A70, 0x0A71 }, + { 0x0A75, 0x0A75 }, + { 0x0A81, 0x0A82 }, + { 0x0ABC, 0x0ABC }, + { 0x0AC1, 0x0AC5 }, + { 0x0AC7, 0x0AC8 }, + { 0x0ACD, 0x0ACD }, + { 0x0AE2, 0x0AE3 }, + { 0x0B01, 0x0B01 }, + { 0x0B3C, 0x0B3C }, + { 0x0B3F, 0x0B3F }, + { 0x0B41, 0x0B44 }, + { 0x0B4D, 0x0B4D }, + { 0x0B56, 0x0B56 }, + { 0x0B62, 0x0B63 }, + { 0x0B82, 0x0B82 }, + { 0x0BC0, 0x0BC0 }, + { 0x0BCD, 0x0BCD }, + { 0x0C3E, 0x0C40 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, + { 0x0C55, 0x0C56 }, + { 0x0C62, 0x0C63 }, + { 0x0CBC, 0x0CBC }, + { 0x0CBF, 0x0CBF }, + { 0x0CC6, 0x0CC6 }, + { 0x0CCC, 0x0CCD }, + { 0x0CE2, 0x0CE3 }, + { 0x0D41, 0x0D44 }, + { 0x0D4D, 0x0D4D }, + { 0x0D62, 0x0D63 }, + { 0x0DCA, 0x0DCA }, + { 0x0DD2, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0E31, 0x0E31 }, + { 0x0E34, 0x0E3A }, + { 0x0E46, 0x0E4E }, + { 0x0EB1, 0x0EB1 }, + { 0x0EB4, 0x0EB9 }, + { 0x0EBB, 0x0EBC }, + { 0x0EC6, 0x0EC6 }, + { 0x0EC8, 0x0ECD }, + { 0x0F18, 0x0F19 }, + { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, + { 0x0F39, 0x0F39 }, + { 0x0F71, 0x0F7E }, + { 0x0F80, 0x0F84 }, + { 0x0F86, 0x0F87 }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x0FC6, 0x0FC6 }, + { 0x102D, 0x1030 }, + { 0x1032, 0x1037 }, + { 0x1039, 0x103A }, + { 0x103D, 0x103E }, + { 0x1058, 0x1059 }, + { 0x105E, 0x1060 }, + { 0x1071, 0x1074 }, + { 0x1082, 0x1082 }, + { 0x1085, 0x1086 }, + { 0x108D, 0x108D }, + { 0x10FC, 0x10FC }, + { 0x135F, 0x135F }, + { 0x1712, 0x1714 }, + { 0x1732, 0x1734 }, + { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, + { 0x17B4, 0x17B5 }, + { 0x17B7, 0x17BD }, + { 0x17C6, 0x17C6 }, + { 0x17C9, 0x17D3 }, + { 0x17D7, 0x17D7 }, + { 0x17DD, 0x17DD }, + { 0x180B, 0x180D }, + { 0x1843, 0x1843 }, + { 0x18A9, 0x18A9 }, + { 0x1920, 0x1922 }, + { 0x1927, 0x1928 }, + { 0x1932, 0x1932 }, + { 0x1939, 0x193B }, + { 0x1A17, 0x1A18 }, + { 0x1B00, 0x1B03 }, + { 0x1B34, 0x1B34 }, + { 0x1B36, 0x1B3A }, + { 0x1B3C, 0x1B3C }, + { 0x1B42, 0x1B42 }, + { 0x1B6B, 0x1B73 }, + { 0x1B80, 0x1B81 }, + { 0x1BA2, 0x1BA5 }, + { 0x1BA8, 0x1BA9 }, + { 0x1C2C, 0x1C33 }, + { 0x1C36, 0x1C37 }, + { 0x1C78, 0x1C7D }, + { 0x1DC0, 0x1DE6 }, + { 0x1DFE, 0x1DFF }, + { 0x1FBD, 0x1FBD }, + { 0x1FBF, 0x1FC1 }, + { 0x1FCD, 0x1FCF }, + { 0x1FDD, 0x1FDF }, + { 0x1FED, 0x1FEF }, + { 0x1FFD, 0x1FFE }, + { 0x200B, 0x200F }, + { 0x2018, 0x2019 }, + { 0x2024, 0x2024 }, + { 0x2027, 0x2027 }, + { 0x202A, 0x202E }, + { 0x2060, 0x2064 }, + { 0x206A, 0x206F }, + { 0x20D0, 0x20F0 }, + { 0x2D6F, 0x2D6F }, + { 0x2DE0, 0x2DFF }, + { 0x2E2F, 0x2E2F }, + { 0x3005, 0x3005 }, + { 0x302A, 0x302F }, + { 0x3031, 0x3035 }, + { 0x303B, 0x303B }, + { 0x3099, 0x309E }, + { 0x30FC, 0x30FE }, + { 0xA015, 0xA015 }, + { 0xA60C, 0xA60C }, + { 0xA66F, 0xA672 }, + { 0xA67C, 0xA67D }, + { 0xA67F, 0xA67F }, + { 0xA700, 0xA721 }, + { 0xA788, 0xA78A }, + { 0xA802, 0xA802 }, + { 0xA806, 0xA806 }, + { 0xA80B, 0xA80B }, + { 0xA825, 0xA826 }, + { 0xA8C4, 0xA8C4 }, + { 0xA926, 0xA92D }, + { 0xA947, 0xA951 }, + { 0xAA29, 0xAA2E }, + { 0xAA31, 0xAA32 }, + { 0xAA35, 0xAA36 }, + { 0xAA43, 0xAA43 }, + { 0xAA4C, 0xAA4C }, + { 0xFB1E, 0xFB1E }, + { 0xFE00, 0xFE0F }, + { 0xFE13, 0xFE13 }, + { 0xFE20, 0xFE26 }, + { 0xFE52, 0xFE52 }, + { 0xFE55, 0xFE55 }, + { 0xFEFF, 0xFEFF }, + { 0xFF07, 0xFF07 }, + { 0xFF0E, 0xFF0E }, + { 0xFF1A, 0xFF1A }, + { 0xFF3E, 0xFF3E }, + { 0xFF40, 0xFF40 }, + { 0xFF70, 0xFF70 }, + { 0xFF9E, 0xFF9F }, + { 0xFFE3, 0xFFE3 }, + { 0xFFF9, 0xFFFB }, + { 0x101FD, 0x101FD }, + { 0x10A01, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A0F }, + { 0x10A38, 0x10A3A }, + { 0x10A3F, 0x10A3F }, + { 0x1D167, 0x1D169 }, + { 0x1D173, 0x1D182 }, + { 0x1D185, 0x1D18B }, + { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, + { 0xE0001, 0xE0001 }, + { 0xE0020, 0xE007F }, + { 0xE0100, 0xE01EF } + +#define PREDICATE(c) uc_is_case_ignorable (c) +#include "test-predicate-part2.h" diff --git a/tests/unicase/test-is-cased.h b/tests/unicase/test-is-cased.h new file mode 100644 index 00000000..474b8a45 --- /dev/null +++ b/tests/unicase/test-is-cased.h @@ -0,0 +1,58 @@ +/* Test of test whether case matters for a Unicode string. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +static void +test_ascii (int (*my_is) (const UNIT *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.0, chapter 3. */ + { + static const UNIT input[] = { 'A', 'B', 'C' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'a', 'b', 'c' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'a', 'B', 'c' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'a', 'B', 'c', '1', '2', '3' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { '1', '2', '3' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } +} diff --git a/tests/unicase/test-is-casefolded.h b/tests/unicase/test-is-casefolded.h new file mode 100644 index 00000000..99638c6c --- /dev/null +++ b/tests/unicase/test-is-casefolded.h @@ -0,0 +1,43 @@ +/* Test of test whether a Unicode string is already case-folded. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +static void +test_ascii (int (*my_is) (const UNIT *, size_t, const char *, bool *)) +{ + { + static const UNIT input[] = { 'J', 'O', 'H', 'N', ' ', 'S', 'M', 'I', 'T', 'H' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'J', 'o', 'h', 'n', ' ', 'S', 'm', 'i', 't', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'j', 'o', 'h', 'n', ' ', 's', 'm', 'i', 't', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } +} diff --git a/tests/unicase/test-is-lowercase.h b/tests/unicase/test-is-lowercase.h new file mode 100644 index 00000000..cc37471b --- /dev/null +++ b/tests/unicase/test-is-lowercase.h @@ -0,0 +1,95 @@ +/* Test of test whether a Unicode string is entirely lower case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +static void +test_ascii (int (*my_is) (const UNIT *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.0, chapter 3. */ + { + static const UNIT input[] = { 'a' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'J', 'O', 'H', 'N', ' ', 'S', 'M', 'I', 'T', 'H' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'J', 'o', 'h', 'n', ' ', 'S', 'm', 'i', 't', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'j', 'o', 'h', 'n', ' ', 's', 'm', 'i', 't', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'a', '2' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { '3' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + + /* Test cases from Unicode 5.1.0. */ + { + static const UNIT input[] = { 'H', 'H' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'h', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'H', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'h', 'H' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } +} diff --git a/tests/unicase/test-is-titlecase.h b/tests/unicase/test-is-titlecase.h new file mode 100644 index 00000000..b36ababa --- /dev/null +++ b/tests/unicase/test-is-titlecase.h @@ -0,0 +1,95 @@ +/* Test of test whether a Unicode string is entirely title case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +static void +test_ascii (int (*my_is) (const UNIT *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.0, chapter 3. */ + { + static const UNIT input[] = { 'A' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'J', 'O', 'H', 'N', ' ', 'S', 'M', 'I', 'T', 'H' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'J', 'o', 'h', 'n', ' ', 'S', 'm', 'i', 't', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'j', 'o', 'h', 'n', ' ', 's', 'm', 'i', 't', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'A', '2' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { '3' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + + /* Test cases from Unicode 5.1.0. */ + { + static const UNIT input[] = { 'H', 'H' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'h', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'H', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'h', 'H' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } +} diff --git a/tests/unicase/test-is-uppercase.h b/tests/unicase/test-is-uppercase.h new file mode 100644 index 00000000..d1b7ca1e --- /dev/null +++ b/tests/unicase/test-is-uppercase.h @@ -0,0 +1,95 @@ +/* Test of test whether a Unicode string is entirely upper case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +static void +test_ascii (int (*my_is) (const UNIT *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.0, chapter 3. */ + { + static const UNIT input[] = { 'A' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'J', 'O', 'H', 'N', ' ', 'S', 'M', 'I', 'T', 'H' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'J', 'o', 'h', 'n', ' ', 'S', 'm', 'i', 't', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'j', 'o', 'h', 'n', ' ', 's', 'm', 'i', 't', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'A', '2' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { '3' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + + /* Test cases from Unicode 5.1.0. */ + { + static const UNIT input[] = { 'H', 'H' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const UNIT input[] = { 'h', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'H', 'h' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const UNIT input[] = { 'h', 'H' }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } +} diff --git a/tests/unicase/test-locale-language.c b/tests/unicase/test-locale-language.c new file mode 100644 index 00000000..e8fe1815 --- /dev/null +++ b/tests/unicase/test-locale-language.c @@ -0,0 +1,56 @@ +/* Test of language code determination. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main (int argc, char *argv[]) +{ + const char *expected; + const char *language; + + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + expected = argv[1]; + + language = uc_locale_language (); + ASSERT (strcmp (language, expected) == 0); + + return 0; +} diff --git a/tests/unicase/test-locale-language.sh b/tests/unicase/test-locale-language.sh new file mode 100755 index 00000000..0a04a0da --- /dev/null +++ b/tests/unicase/test-locale-language.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +LC_ALL=C ./test-locale-language${EXEEXT} '' || exit 1 + +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 ./test-locale-language${EXEEXT} fr || exit 1 +fi + +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 != none; then + LC_ALL=$LOCALE_FR_UTF8 ./test-locale-language${EXEEXT} fr || exit 1 +fi + +: ${LOCALE_JA=ja_JP} +if test $LOCALE_JA != none; then + LC_ALL=$LOCALE_JA ./test-locale-language${EXEEXT} ja || exit 1 +fi + +: ${LOCALE_TR_UTF8=tr_TR.UTF-8} +if test $LOCALE_TR_UTF8 != none; then + LC_ALL=$LOCALE_TR_UTF8 ./test-locale-language${EXEEXT} tr || exit 1 +fi + +: ${LOCALE_ZH_CN=zh_CN.GB18030} +if test $LOCALE_ZH_CN != none; then + LC_ALL=$LOCALE_ZH_CN ./test-locale-language${EXEEXT} zh || exit 1 +fi + +exit 0 diff --git a/tests/unicase/test-mapping-part1.h b/tests/unicase/test-mapping-part1.h new file mode 100644 index 00000000..4b7ac8ec --- /dev/null +++ b/tests/unicase/test-mapping-part1.h @@ -0,0 +1,45 @@ +/* Test of single character case mapping functions. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unicase.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed for c = 0x%04X\n", \ + __FILE__, __LINE__, c); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + +/* Pair of Unicode characters. */ +typedef struct { ucs4_t ch; ucs4_t value; } pair_t; + +/* Characters and their mapping values, ignoring no-op mappings, in increasing + order. */ +static const pair_t mapping[] = + { diff --git a/tests/unicase/test-mapping-part2.h b/tests/unicase/test-mapping-part2.h new file mode 100644 index 00000000..ef43cdde --- /dev/null +++ b/tests/unicase/test-mapping-part2.h @@ -0,0 +1,37 @@ +/* Test of single character case mapping functions. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + }; + +int +main () +{ + unsigned int c; + size_t i; + + c = 0; + for (i = 0; i < SIZEOF (mapping); i++) + { + for (; c < mapping[i].ch; c++) + ASSERT (MAP (c) == c); + ASSERT (MAP (c) == mapping[i].value); + c++; + } + for (; c < 0x110000; c++) + ASSERT (MAP (c) == c); + + return 0; +} diff --git a/tests/unicase/test-predicate-part1.h b/tests/unicase/test-predicate-part1.h new file mode 100644 index 00000000..76d804e1 --- /dev/null +++ b/tests/unicase/test-predicate-part1.h @@ -0,0 +1,45 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unicase/caseprop.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed for c = 0x%04X\n", \ + __FILE__, __LINE__, c); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + +/* Interval of Unicode characters. */ +typedef struct { ucs4_t start; ucs4_t end; } interval_t; + +/* Set of Unicode characters, described as list of intervals, in increasing + order. */ +static const interval_t set[] = + { diff --git a/tests/unicase/test-predicate-part2.h b/tests/unicase/test-predicate-part2.h new file mode 100644 index 00000000..60b7c246 --- /dev/null +++ b/tests/unicase/test-predicate-part2.h @@ -0,0 +1,37 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + }; + +int +main () +{ + unsigned int c; + size_t i; + + c = 0; + for (i = 0; i < SIZEOF (set); i++) + { + for (; c < set[i].start; c++) + ASSERT (!PREDICATE (c)); + for (; c <= set[i].end; c++) + ASSERT (PREDICATE (c)); + } + for (; c < 0x110000; c++) + ASSERT (!PREDICATE (c)); + + return 0; +} diff --git a/tests/unicase/test-u16-casecmp.c b/tests/unicase/test-u16-casecmp.c new file mode 100644 index 00000000..f079bbf8 --- /dev/null +++ b/tests/unicase/test-u16-casecmp.c @@ -0,0 +1,336 @@ +/* Test of case and normalization insensitive comparison of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint16_t +#include "test-casecmp.h" +#undef UNIT + +static void +test_nonascii (int (*my_casecmp) (const uint16_t *, size_t, const uint16_t *, size_t, const char *, uninorm_t, int *)) +{ + /* Normalization effects. */ + { + static const uint16_t input1[] = { 'H', 0x00F6, 'h', 'l', 'e' }; + static const uint16_t input2[] = { 'H', 'O', 0x0308, 'h', 'L', 'e' }; + static const uint16_t input3[] = { 'H', 0x00F6, 'h', 'l', 'e', 'n' }; + static const uint16_t input4[] = { 'H', 'O', 0x0308, 'h', 'L', 'e', 'n' }; + static const uint16_t input5[] = { 'H', 'u', 'r', 'z' }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint16_t input1[] = { 0x00C4 }; + static const uint16_t input2[] = { 0x0041, 0x0308 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint16_t input1[] = { 0x01DE }; + static const uint16_t input2[] = { 0x0041, 0x0308, 0x0304 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint16_t input1[] = { 0x1FC1 }; + static const uint16_t input2[] = { 0x00A8, 0x0342 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEUL */ + static const uint16_t input1[] = { 0xAE00 }; + static const uint16_t input2[] = { 0xADF8, 0x11AF }; + static const uint16_t input3[] = { 0x1100, 0x1173, 0x11AF }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEU */ + static const uint16_t input1[] = { 0xADF8 }; + static const uint16_t input2[] = { 0x1100, 0x1173 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint16_t input1[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint16_t input2[] = + { 'g', 'r', 0x00FC, 0x0073, 0x0073, ' ', 'g', 'o', 't', 't', '.', ' ', + 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint16_t input3[] = + { 'G', 'R', 0x00DC, 0x0053, 0x0053, ' ', 'G', 'O', 'T', 'T', '.', ' ', + 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, + 0x0419, 0x0422, 0x0415, '!', ' ', + 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, + '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint16_t input1[] = { 0x0149 }; + static const uint16_t input2[] = { 0x02BC, 0x006E }; + static const uint16_t input3[] = { 0x02BC, 0x004E }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint16_t input1[] = { 0x0390 }; + static const uint16_t input2[] = { 0x03B9, 0x0308, 0x0301 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint16_t input[] = { 0x0049 }; + static const uint16_t casefolded[] = { 0x0069 }; + static const uint16_t casefolded_tr[] = { 0x0131 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint16_t input[] = { 0x0069 }; + static const uint16_t casefolded[] = { 0x0049 }; + static const uint16_t casefolded_tr[] = { 0x0130 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint16_t input[] = { 0x0130 }; + static const uint16_t casefolded[] = { 0x0069, 0x0307 }; + static const uint16_t casefolded_tr[] = { 0x0069 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint16_t input[] = { 0x0131 }; + static const uint16_t casefolded[] = { 0x0049 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 1); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* "topkapı" */ + static const uint16_t input[] = + { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; + static const uint16_t casefolded[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint16_t input1[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; + static const uint16_t input2[] = { 0x0068, 0x0065, 0x0069, 0x0073, 0x0073 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint16_t input1[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + static const uint16_t input2[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C3, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C3 + }; + static const uint16_t input3[] = + { + 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, + 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, + 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 + }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint16_t input[] = { 0x01F0, 0x0323 }; + static const uint16_t casefolded[] = { 0x006A, 0x030C, 0x0323 }; + static const uint16_t casefolded_decomposed[] = { 0x006A, 0x0323, 0x030C }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, NULL, &cmp) == 0); + ASSERT (cmp != 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } +} + +int +main () +{ + test_ascii (u16_casecmp, UNINORM_NFD); + test_nonascii (u16_casecmp); + + return 0; +} diff --git a/tests/unicase/test-u16-casecoll.c b/tests/unicase/test-u16-casecoll.c new file mode 100644 index 00000000..5428cf04 --- /dev/null +++ b/tests/unicase/test-u16-casecoll.c @@ -0,0 +1,54 @@ +/* Test of locale dependent, case and normalization insensitive comparison of + UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint16_t +#include "test-casecmp.h" +#undef UNIT + +int +main () +{ + /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_casecoll + on ASCII strings should behave like strcasecmp. */ + test_ascii (u16_casecoll, UNINORM_NFC); + + return 0; +} diff --git a/tests/unicase/test-u16-casefold.c b/tests/unicase/test-u16-casefold.c new file mode 100644 index 00000000..3f4f633a --- /dev/null +++ b/tests/unicase/test-u16-casefold.c @@ -0,0 +1,214 @@ +/* Test of casefolding mapping for UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint16_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint16_t *expected, size_t expected_length) +{ + size_t length; + uint16_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u16_casefold (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint16_t *preallocated; + + length = expected_length - 1; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_casefold (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint16_t *preallocated; + + length = expected_length; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_casefold (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint16_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint16_t casefolded[] = + { 'g', 'r', 0x00FC, 0x0073, 0x0073, ' ', 'g', 'o', 't', 't', '.', ' ', + 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint16_t input[] = { 0x0149 }; + static const uint16_t casefolded[] = { 0x02BC, 0x006E }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint16_t input[] = { 0x0390 }; + static const uint16_t casefolded[] = { 0x03B9, 0x0308, 0x0301 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint16_t input[] = { 0x0049 }; + static const uint16_t casefolded[] = { 0x0069 }; + static const uint16_t casefolded_tr[] = { 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint16_t input[] = { 0x0069 }; + static const uint16_t casefolded[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint16_t input[] = { 0x0130 }; + static const uint16_t casefolded[] = { 0x0069, 0x0307 }; + static const uint16_t casefolded_tr[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint16_t input[] = { 0x0131 }; + static const uint16_t casefolded[] = { 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); + } + { /* "topkapı" */ + static const uint16_t input[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + static const uint16_t casefolded[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint16_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; + static const uint16_t casefolded[] = { 0x0068, 0x0065, 0x0069, 0x0073, 0x0073 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint16_t input[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + static const uint16_t casefolded[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C3, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C3 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint16_t input[] = { 0x01F0, 0x0323 }; + static const uint16_t casefolded[] = { 0x006A, 0x030C, 0x0323 }; + static const uint16_t casefolded_decomposed[] = { 0x006A, 0x0323, 0x030C }; + static const uint16_t casefolded_normalized[] = { 0x01F0, 0x0323 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFD, casefolded_decomposed, SIZEOF (casefolded_decomposed)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casefolded_normalized, SIZEOF (casefolded_normalized)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-u16-is-cased.c b/tests/unicase/test-u16-is-cased.c new file mode 100644 index 00000000..a4b9dc39 --- /dev/null +++ b/tests/unicase/test-u16-is-cased.c @@ -0,0 +1,51 @@ +/* Test of test whether case matters for an UTF-16 string. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint16_t +#include "test-is-cased.h" +#undef UNIT + +int +main () +{ + test_ascii (u16_is_cased); + + return 0; +} diff --git a/tests/unicase/test-u16-is-casefolded.c b/tests/unicase/test-u16-is-casefolded.c new file mode 100644 index 00000000..8c0122da --- /dev/null +++ b/tests/unicase/test-u16-is-casefolded.c @@ -0,0 +1,65 @@ +/* Test of test whether an UTF-16 string is already case-folded. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint16_t +#include "test-is-casefolded.h" +#undef UNIT + +static void +test_nonascii (int (*my_is) (const uint16_t *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.1.0. */ + { + static const uint16_t input[] = { 0x00DF }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } +} + +int +main () +{ + test_ascii (u16_is_casefolded); + test_nonascii (u16_is_casefolded); + + return 0; +} diff --git a/tests/unicase/test-u16-is-lowercase.c b/tests/unicase/test-u16-is-lowercase.c new file mode 100644 index 00000000..f7bea495 --- /dev/null +++ b/tests/unicase/test-u16-is-lowercase.c @@ -0,0 +1,93 @@ +/* Test of test whether an UTF-16 string is entirely lower case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint16_t +#include "test-is-lowercase.h" +#undef UNIT + +static void +test_nonascii (int (*my_is) (const uint16_t *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.1.0. */ + { + static const uint16_t input[] = { 0x24D7 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint16_t input[] = { 0x24BD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const uint16_t input[] = { 0x02B0 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint16_t input[] = { 0x1D34 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint16_t input[] = { 0x02BD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } +} + +int +main () +{ + test_ascii (u16_is_lowercase); + test_nonascii (u16_is_lowercase); + + return 0; +} diff --git a/tests/unicase/test-u16-is-titlecase.c b/tests/unicase/test-u16-is-titlecase.c new file mode 100644 index 00000000..6b1c6d10 --- /dev/null +++ b/tests/unicase/test-u16-is-titlecase.c @@ -0,0 +1,51 @@ +/* Test of test whether an UTF-16 string is entirely title case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint16_t +#include "test-is-titlecase.h" +#undef UNIT + +int +main () +{ + test_ascii (u16_is_titlecase); + + return 0; +} diff --git a/tests/unicase/test-u16-is-uppercase.c b/tests/unicase/test-u16-is-uppercase.c new file mode 100644 index 00000000..1acf7055 --- /dev/null +++ b/tests/unicase/test-u16-is-uppercase.c @@ -0,0 +1,93 @@ +/* Test of test whether an UTF-16 string is entirely upper case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint16_t +#include "test-is-uppercase.h" +#undef UNIT + +static void +test_nonascii (int (*my_is) (const uint16_t *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.1.0. */ + { + static const uint16_t input[] = { 0x24D7 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const uint16_t input[] = { 0x24BD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint16_t input[] = { 0x02B0 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint16_t input[] = { 0x1D34 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint16_t input[] = { 0x02BD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } +} + +int +main () +{ + test_ascii (u16_is_uppercase); + test_nonascii (u16_is_uppercase); + + return 0; +} diff --git a/tests/unicase/test-u16-tolower.c b/tests/unicase/test-u16-tolower.c new file mode 100644 index 00000000..5ec764c4 --- /dev/null +++ b/tests/unicase/test-u16-tolower.c @@ -0,0 +1,251 @@ +/* Test of lowercase mapping for UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint16_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint16_t *expected, size_t expected_length) +{ + size_t length; + uint16_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u16_tolower (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint16_t *preallocated; + + length = expected_length - 1; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_tolower (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint16_t *preallocated; + + length = expected_length; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_tolower (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint16_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint16_t casemapped[] = + { 'g', 'r', 0x00FC, 0x00DF, ' ', 'g', 'o', 't', 't', '.', ' ', + 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint16_t input[] = { 0x0049 }; + static const uint16_t casemapped[] = { 0x0069 }; + static const uint16_t casemapped_tr[] = { 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint16_t input[] = { 0x0069 }; + static const uint16_t casemapped[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint16_t input[] = { 0x0130 }; + static const uint16_t casemapped[] = { 0x0069, 0x0307 }; + static const uint16_t casemapped_tr[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint16_t input[] = { 0x0131 }; + static const uint16_t casemapped[] = { 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "TOPKAPI" */ + static const uint16_t input[] = + { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; + static const uint16_t casemapped[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "HEIß" */ + static const uint16_t input[] = { 0x0048, 0x0045, 0x0049, 0x00DF }; + static const uint16_t casemapped[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "ΠΕΡΙΣΣΌΤΕΡΕΣ ΠΛΗΡΟΦΟΡΊΕΣ" */ + static const uint16_t input[] = + { + 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, + 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, + 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 + }; + static const uint16_t casemapped[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "Σ" -> "σ" */ + static const uint16_t input[] = { 0x03A3 }; + static const uint16_t casemapped[] = { 0x03C3 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ" -> "ας" */ + static const uint16_t input[] = { 0x0391, 0x03A3 }; + static const uint16_t casemapped[] = { 0x03B1, 0x03C2 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + /* It's a final sigma only if not followed by a case-ignorable sequence and + then a cased letter. Note that U+0345 and U+037A are simultaneously + case-ignorable and cased (which is a bit paradoxical). */ + { /* "ΑΣΑ" -> "ασα" */ + static const uint16_t input[] = { 0x0391, 0x03A3, 0x0391 }; + static const uint16_t casemapped[] = { 0x03B1, 0x03C3, 0x03B1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:" -> "ας:" */ + static const uint16_t input[] = { 0x0391, 0x03A3, 0x003A }; + static const uint16_t casemapped[] = { 0x03B1, 0x03C2, 0x003A }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:Α" -> "ασ:α" */ + static const uint16_t input[] = { 0x0391, 0x03A3, 0x003A, 0x0391 }; + static const uint16_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x03B1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:ͺ" -> "ασ:ͺ" */ + static const uint16_t input[] = { 0x0391, 0x03A3, 0x003A, 0x037A }; + static const uint16_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x037A }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:ͺ " -> "ασ:ͺ " */ + static const uint16_t input[] = { 0x0391, 0x03A3, 0x003A, 0x037A, 0x0020 }; + static const uint16_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x037A, 0x0020 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + /* It's a final sigma only if preceded by a case-ignorable sequence and + a cased letter before it. Note that U+0345 and U+037A are simultaneously + case-ignorable and cased (which is a bit paradoxical). */ + { /* ":Σ" -> ":σ" */ + static const uint16_t input[] = { 0x003A, 0x03A3 }; + static const uint16_t casemapped[] = { 0x003A, 0x03C3 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "Α:Σ" -> "α:ς" */ + static const uint16_t input[] = { 0x0391, 0x003A, 0x03A3 }; + static const uint16_t casemapped[] = { 0x03B1, 0x003A, 0x03C2 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ͺ:Σ" -> "ͺ:ς" */ + static const uint16_t input[] = { 0x037A, 0x003A, 0x03A3 }; + static const uint16_t casemapped[] = { 0x037A, 0x003A, 0x03C2 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* " ͺ:Σ" -> " ͺ:ς" */ + static const uint16_t input[] = { 0x0020, 0x037A, 0x003A, 0x03A3 }; + static const uint16_t casemapped[] = { 0x0020, 0x037A, 0x003A, 0x03C2 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-u16-totitle.c b/tests/unicase/test-u16-totitle.c new file mode 100644 index 00000000..3839c907 --- /dev/null +++ b/tests/unicase/test-u16-totitle.c @@ -0,0 +1,211 @@ +/* Test of titlecase mapping for UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint16_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint16_t *expected, size_t expected_length) +{ + size_t length; + uint16_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u16_totitle (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint16_t *preallocated; + + length = expected_length - 1; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_totitle (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint16_t *preallocated; + + length = expected_length; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_totitle (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "GRÜß GOTT. ЗДРАВСТВУЙТЕ! X=(-B±SQRT(B²-4AC))/(2A) 日本語,中文,한글" */ + static const uint16_t input[] = + { 'G', 'R', 0x00DC, 0x00DF, ' ', 'G', 'O', 'T', 'T', '.', ' ', + 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, + 0x0419, 0x0422, 0x0415, '!', ' ', + 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, + '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint16_t casemapped[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'q', 'r', 't', '(', 'B', 0x00B2, + '-', '4', 'A', 'c', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint16_t input[] = { 0x0149 }; + static const uint16_t casemapped[] = { 0x02BC, 0x004E }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint16_t input[] = { 0x0390 }; + static const uint16_t casemapped[] = { 0x0399, 0x0308, 0x0301 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint16_t input[] = { 0x0049 }; + static const uint16_t casemapped[] = { 0x0049 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint16_t input[] = { 0x0069 }; + static const uint16_t casemapped[] = { 0x0049 }; + static const uint16_t casemapped_tr[] = { 0x0130 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint16_t input[] = { 0x0130 }; + static const uint16_t casemapped[] = { 0x0130 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint16_t input[] = { 0x0131 }; + static const uint16_t casemapped[] = { 0x0049 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "topkapı" */ + static const uint16_t input[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + static const uint16_t casemapped[] = + { 0x0054, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint16_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; + static const uint16_t casemapped[] = { 0x0048, 0x0065, 0x0069, 0x00DF }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint16_t input[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + static const uint16_t casemapped[] = + { + 0x03A0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03A0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint16_t input[] = { 0x01F0, 0x0323 }; + static const uint16_t casemapped[] = { 0x004A, 0x030C, 0x0323 }; + static const uint16_t casemapped_normalized[] = { 0x004A, 0x0323, 0x030C }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-u16-toupper.c b/tests/unicase/test-u16-toupper.c new file mode 100644 index 00000000..ed9fd6b1 --- /dev/null +++ b/tests/unicase/test-u16-toupper.c @@ -0,0 +1,211 @@ +/* Test of uppercase mapping for UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint16_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint16_t *expected, size_t expected_length) +{ + size_t length; + uint16_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u16_toupper (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint16_t *preallocated; + + length = expected_length - 1; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_toupper (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint16_t *preallocated; + + length = expected_length; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_toupper (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint16_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint16_t casemapped[] = + { 'G', 'R', 0x00DC, 0x0053, 0x0053, ' ', 'G', 'O', 'T', 'T', '.', ' ', + 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, + 0x0419, 0x0422, 0x0415, '!', ' ', + 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, + '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint16_t input[] = { 0x0149 }; + static const uint16_t casemapped[] = { 0x02BC, 0x004E }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint16_t input[] = { 0x0390 }; + static const uint16_t casemapped[] = { 0x0399, 0x0308, 0x0301 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint16_t input[] = { 0x0049 }; + static const uint16_t casemapped[] = { 0x0049 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint16_t input[] = { 0x0069 }; + static const uint16_t casemapped[] = { 0x0049 }; + static const uint16_t casemapped_tr[] = { 0x0130 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint16_t input[] = { 0x0130 }; + static const uint16_t casemapped[] = { 0x0130 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint16_t input[] = { 0x0131 }; + static const uint16_t casemapped[] = { 0x0049 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "topkapı" */ + static const uint16_t input[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + static const uint16_t casemapped[] = + { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint16_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; + static const uint16_t casemapped[] = { 0x0048, 0x0045, 0x0049, 0x0053, 0x0053 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint16_t input[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + static const uint16_t casemapped[] = + { + 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, + 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, + 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint16_t input[] = { 0x01F0, 0x0323 }; + static const uint16_t casemapped[] = { 0x004A, 0x030C, 0x0323 }; + static const uint16_t casemapped_normalized[] = { 0x004A, 0x0323, 0x030C }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-u32-casecmp.c b/tests/unicase/test-u32-casecmp.c new file mode 100644 index 00000000..8d58bc76 --- /dev/null +++ b/tests/unicase/test-u32-casecmp.c @@ -0,0 +1,336 @@ +/* Test of case and normalization insensitive comparison of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint32_t +#include "test-casecmp.h" +#undef UNIT + +static void +test_nonascii (int (*my_casecmp) (const uint32_t *, size_t, const uint32_t *, size_t, const char *, uninorm_t, int *)) +{ + /* Normalization effects. */ + { + static const uint32_t input1[] = { 'H', 0x00F6, 'h', 'l', 'e' }; + static const uint32_t input2[] = { 'H', 'O', 0x0308, 'h', 'L', 'e' }; + static const uint32_t input3[] = { 'H', 0x00F6, 'h', 'l', 'e', 'n' }; + static const uint32_t input4[] = { 'H', 'O', 0x0308, 'h', 'L', 'e', 'n' }; + static const uint32_t input5[] = { 'H', 'u', 'r', 'z' }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint32_t input1[] = { 0x00C4 }; + static const uint32_t input2[] = { 0x0041, 0x0308 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint32_t input1[] = { 0x01DE }; + static const uint32_t input2[] = { 0x0041, 0x0308, 0x0304 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint32_t input1[] = { 0x1FC1 }; + static const uint32_t input2[] = { 0x00A8, 0x0342 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEUL */ + static const uint32_t input1[] = { 0xAE00 }; + static const uint32_t input2[] = { 0xADF8, 0x11AF }; + static const uint32_t input3[] = { 0x1100, 0x1173, 0x11AF }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEU */ + static const uint32_t input1[] = { 0xADF8 }; + static const uint32_t input2[] = { 0x1100, 0x1173 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint32_t input1[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint32_t input2[] = + { 'g', 'r', 0x00FC, 0x0073, 0x0073, ' ', 'g', 'o', 't', 't', '.', ' ', + 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint32_t input3[] = + { 'G', 'R', 0x00DC, 0x0053, 0x0053, ' ', 'G', 'O', 'T', 'T', '.', ' ', + 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, + 0x0419, 0x0422, 0x0415, '!', ' ', + 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, + '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint32_t input1[] = { 0x0149 }; + static const uint32_t input2[] = { 0x02BC, 0x006E }; + static const uint32_t input3[] = { 0x02BC, 0x004E }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint32_t input1[] = { 0x0390 }; + static const uint32_t input2[] = { 0x03B9, 0x0308, 0x0301 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint32_t input[] = { 0x0049 }; + static const uint32_t casefolded[] = { 0x0069 }; + static const uint32_t casefolded_tr[] = { 0x0131 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint32_t input[] = { 0x0069 }; + static const uint32_t casefolded[] = { 0x0049 }; + static const uint32_t casefolded_tr[] = { 0x0130 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint32_t input[] = { 0x0130 }; + static const uint32_t casefolded[] = { 0x0069, 0x0307 }; + static const uint32_t casefolded_tr[] = { 0x0069 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint32_t input[] = { 0x0131 }; + static const uint32_t casefolded[] = { 0x0049 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 1); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* "topkapı" */ + static const uint32_t input[] = + { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; + static const uint32_t casefolded[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint32_t input1[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; + static const uint32_t input2[] = { 0x0068, 0x0065, 0x0069, 0x0073, 0x0073 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint32_t input1[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + static const uint32_t input2[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C3, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C3 + }; + static const uint32_t input3[] = + { + 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, + 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, + 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 + }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint32_t input[] = { 0x01F0, 0x0323 }; + static const uint32_t casefolded[] = { 0x006A, 0x030C, 0x0323 }; + static const uint32_t casefolded_decomposed[] = { 0x006A, 0x0323, 0x030C }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, NULL, &cmp) == 0); + ASSERT (cmp != 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } +} + +int +main () +{ + test_ascii (u32_casecmp, UNINORM_NFD); + test_nonascii (u32_casecmp); + + return 0; +} diff --git a/tests/unicase/test-u32-casecoll.c b/tests/unicase/test-u32-casecoll.c new file mode 100644 index 00000000..23edfbdf --- /dev/null +++ b/tests/unicase/test-u32-casecoll.c @@ -0,0 +1,54 @@ +/* Test of locale dependent, case and normalization insensitive comparison of + UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint32_t +#include "test-casecmp.h" +#undef UNIT + +int +main () +{ + /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_casecoll + on ASCII strings should behave like strcasecmp. */ + test_ascii (u32_casecoll, UNINORM_NFC); + + return 0; +} diff --git a/tests/unicase/test-u32-casefold.c b/tests/unicase/test-u32-casefold.c new file mode 100644 index 00000000..d48e8dc8 --- /dev/null +++ b/tests/unicase/test-u32-casefold.c @@ -0,0 +1,214 @@ +/* Test of casefolding mapping for UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint32_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint32_t *expected, size_t expected_length) +{ + size_t length; + uint32_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u32_casefold (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint32_t *preallocated; + + length = expected_length - 1; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_casefold (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint32_t *preallocated; + + length = expected_length; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_casefold (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint32_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint32_t casefolded[] = + { 'g', 'r', 0x00FC, 0x0073, 0x0073, ' ', 'g', 'o', 't', 't', '.', ' ', + 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint32_t input[] = { 0x0149 }; + static const uint32_t casefolded[] = { 0x02BC, 0x006E }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint32_t input[] = { 0x0390 }; + static const uint32_t casefolded[] = { 0x03B9, 0x0308, 0x0301 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint32_t input[] = { 0x0049 }; + static const uint32_t casefolded[] = { 0x0069 }; + static const uint32_t casefolded_tr[] = { 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint32_t input[] = { 0x0069 }; + static const uint32_t casefolded[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint32_t input[] = { 0x0130 }; + static const uint32_t casefolded[] = { 0x0069, 0x0307 }; + static const uint32_t casefolded_tr[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint32_t input[] = { 0x0131 }; + static const uint32_t casefolded[] = { 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); + } + { /* "topkapı" */ + static const uint32_t input[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + static const uint32_t casefolded[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint32_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; + static const uint32_t casefolded[] = { 0x0068, 0x0065, 0x0069, 0x0073, 0x0073 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint32_t input[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + static const uint32_t casefolded[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C3, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C3 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint32_t input[] = { 0x01F0, 0x0323 }; + static const uint32_t casefolded[] = { 0x006A, 0x030C, 0x0323 }; + static const uint32_t casefolded_decomposed[] = { 0x006A, 0x0323, 0x030C }; + static const uint32_t casefolded_normalized[] = { 0x01F0, 0x0323 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFD, casefolded_decomposed, SIZEOF (casefolded_decomposed)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casefolded_normalized, SIZEOF (casefolded_normalized)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-u32-is-cased.c b/tests/unicase/test-u32-is-cased.c new file mode 100644 index 00000000..d8353fc4 --- /dev/null +++ b/tests/unicase/test-u32-is-cased.c @@ -0,0 +1,51 @@ +/* Test of test whether case matters for an UTF-32 string. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint32_t +#include "test-is-cased.h" +#undef UNIT + +int +main () +{ + test_ascii (u32_is_cased); + + return 0; +} diff --git a/tests/unicase/test-u32-is-casefolded.c b/tests/unicase/test-u32-is-casefolded.c new file mode 100644 index 00000000..d79241d7 --- /dev/null +++ b/tests/unicase/test-u32-is-casefolded.c @@ -0,0 +1,65 @@ +/* Test of test whether an UTF-32 string is already case-folded. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint32_t +#include "test-is-casefolded.h" +#undef UNIT + +static void +test_nonascii (int (*my_is) (const uint32_t *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.1.0. */ + { + static const uint32_t input[] = { 0x00DF }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } +} + +int +main () +{ + test_ascii (u32_is_casefolded); + test_nonascii (u32_is_casefolded); + + return 0; +} diff --git a/tests/unicase/test-u32-is-lowercase.c b/tests/unicase/test-u32-is-lowercase.c new file mode 100644 index 00000000..2cff3925 --- /dev/null +++ b/tests/unicase/test-u32-is-lowercase.c @@ -0,0 +1,93 @@ +/* Test of test whether an UTF-32 string is entirely lower case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint32_t +#include "test-is-lowercase.h" +#undef UNIT + +static void +test_nonascii (int (*my_is) (const uint32_t *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.1.0. */ + { + static const uint32_t input[] = { 0x24D7 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint32_t input[] = { 0x24BD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const uint32_t input[] = { 0x02B0 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint32_t input[] = { 0x1D34 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint32_t input[] = { 0x02BD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } +} + +int +main () +{ + test_ascii (u32_is_lowercase); + test_nonascii (u32_is_lowercase); + + return 0; +} diff --git a/tests/unicase/test-u32-is-titlecase.c b/tests/unicase/test-u32-is-titlecase.c new file mode 100644 index 00000000..2c287e98 --- /dev/null +++ b/tests/unicase/test-u32-is-titlecase.c @@ -0,0 +1,51 @@ +/* Test of test whether an UTF-32 string is entirely title case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint32_t +#include "test-is-titlecase.h" +#undef UNIT + +int +main () +{ + test_ascii (u32_is_titlecase); + + return 0; +} diff --git a/tests/unicase/test-u32-is-uppercase.c b/tests/unicase/test-u32-is-uppercase.c new file mode 100644 index 00000000..0044ec1d --- /dev/null +++ b/tests/unicase/test-u32-is-uppercase.c @@ -0,0 +1,93 @@ +/* Test of test whether an UTF-32 string is entirely upper case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint32_t +#include "test-is-uppercase.h" +#undef UNIT + +static void +test_nonascii (int (*my_is) (const uint32_t *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.1.0. */ + { + static const uint32_t input[] = { 0x24D7 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const uint32_t input[] = { 0x24BD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint32_t input[] = { 0x02B0 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint32_t input[] = { 0x1D34 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint32_t input[] = { 0x02BD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } +} + +int +main () +{ + test_ascii (u32_is_uppercase); + test_nonascii (u32_is_uppercase); + + return 0; +} diff --git a/tests/unicase/test-u32-tolower.c b/tests/unicase/test-u32-tolower.c new file mode 100644 index 00000000..7f348da4 --- /dev/null +++ b/tests/unicase/test-u32-tolower.c @@ -0,0 +1,251 @@ +/* Test of lowercase mapping for UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint32_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint32_t *expected, size_t expected_length) +{ + size_t length; + uint32_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u32_tolower (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint32_t *preallocated; + + length = expected_length - 1; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_tolower (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint32_t *preallocated; + + length = expected_length; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_tolower (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint32_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint32_t casemapped[] = + { 'g', 'r', 0x00FC, 0x00DF, ' ', 'g', 'o', 't', 't', '.', ' ', + 0x0437, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint32_t input[] = { 0x0049 }; + static const uint32_t casemapped[] = { 0x0069 }; + static const uint32_t casemapped_tr[] = { 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint32_t input[] = { 0x0069 }; + static const uint32_t casemapped[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint32_t input[] = { 0x0130 }; + static const uint32_t casemapped[] = { 0x0069, 0x0307 }; + static const uint32_t casemapped_tr[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint32_t input[] = { 0x0131 }; + static const uint32_t casemapped[] = { 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "TOPKAPI" */ + static const uint32_t input[] = + { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; + static const uint32_t casemapped[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "HEIß" */ + static const uint32_t input[] = { 0x0048, 0x0045, 0x0049, 0x00DF }; + static const uint32_t casemapped[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "ΠΕΡΙΣΣΌΤΕΡΕΣ ΠΛΗΡΟΦΟΡΊΕΣ" */ + static const uint32_t input[] = + { + 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, + 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, + 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 + }; + static const uint32_t casemapped[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "Σ" -> "σ" */ + static const uint32_t input[] = { 0x03A3 }; + static const uint32_t casemapped[] = { 0x03C3 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ" -> "ας" */ + static const uint32_t input[] = { 0x0391, 0x03A3 }; + static const uint32_t casemapped[] = { 0x03B1, 0x03C2 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + /* It's a final sigma only if not followed by a case-ignorable sequence and + then a cased letter. Note that U+0345 and U+037A are simultaneously + case-ignorable and cased (which is a bit paradoxical). */ + { /* "ΑΣΑ" -> "ασα" */ + static const uint32_t input[] = { 0x0391, 0x03A3, 0x0391 }; + static const uint32_t casemapped[] = { 0x03B1, 0x03C3, 0x03B1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:" -> "ας:" */ + static const uint32_t input[] = { 0x0391, 0x03A3, 0x003A }; + static const uint32_t casemapped[] = { 0x03B1, 0x03C2, 0x003A }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:Α" -> "ασ:α" */ + static const uint32_t input[] = { 0x0391, 0x03A3, 0x003A, 0x0391 }; + static const uint32_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x03B1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:ͺ" -> "ασ:ͺ" */ + static const uint32_t input[] = { 0x0391, 0x03A3, 0x003A, 0x037A }; + static const uint32_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x037A }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:ͺ " -> "ασ:ͺ " */ + static const uint32_t input[] = { 0x0391, 0x03A3, 0x003A, 0x037A, 0x0020 }; + static const uint32_t casemapped[] = { 0x03B1, 0x03C3, 0x003A, 0x037A, 0x0020 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + /* It's a final sigma only if preceded by a case-ignorable sequence and + a cased letter before it. Note that U+0345 and U+037A are simultaneously + case-ignorable and cased (which is a bit paradoxical). */ + { /* ":Σ" -> ":σ" */ + static const uint32_t input[] = { 0x003A, 0x03A3 }; + static const uint32_t casemapped[] = { 0x003A, 0x03C3 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "Α:Σ" -> "α:ς" */ + static const uint32_t input[] = { 0x0391, 0x003A, 0x03A3 }; + static const uint32_t casemapped[] = { 0x03B1, 0x003A, 0x03C2 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ͺ:Σ" -> "ͺ:ς" */ + static const uint32_t input[] = { 0x037A, 0x003A, 0x03A3 }; + static const uint32_t casemapped[] = { 0x037A, 0x003A, 0x03C2 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* " ͺ:Σ" -> " ͺ:ς" */ + static const uint32_t input[] = { 0x0020, 0x037A, 0x003A, 0x03A3 }; + static const uint32_t casemapped[] = { 0x0020, 0x037A, 0x003A, 0x03C2 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-u32-totitle.c b/tests/unicase/test-u32-totitle.c new file mode 100644 index 00000000..82c4b0f1 --- /dev/null +++ b/tests/unicase/test-u32-totitle.c @@ -0,0 +1,211 @@ +/* Test of titlecase mapping for UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint32_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint32_t *expected, size_t expected_length) +{ + size_t length; + uint32_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u32_totitle (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint32_t *preallocated; + + length = expected_length - 1; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_totitle (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint32_t *preallocated; + + length = expected_length; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_totitle (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "GRÜß GOTT. ЗДРАВСТВУЙТЕ! X=(-B±SQRT(B²-4AC))/(2A) 日本語,中文,한글" */ + static const uint32_t input[] = + { 'G', 'R', 0x00DC, 0x00DF, ' ', 'G', 'O', 'T', 'T', '.', ' ', + 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, + 0x0419, 0x0422, 0x0415, '!', ' ', + 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, + '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint32_t casemapped[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'q', 'r', 't', '(', 'B', 0x00B2, + '-', '4', 'A', 'c', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint32_t input[] = { 0x0149 }; + static const uint32_t casemapped[] = { 0x02BC, 0x004E }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint32_t input[] = { 0x0390 }; + static const uint32_t casemapped[] = { 0x0399, 0x0308, 0x0301 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint32_t input[] = { 0x0049 }; + static const uint32_t casemapped[] = { 0x0049 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint32_t input[] = { 0x0069 }; + static const uint32_t casemapped[] = { 0x0049 }; + static const uint32_t casemapped_tr[] = { 0x0130 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint32_t input[] = { 0x0130 }; + static const uint32_t casemapped[] = { 0x0130 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint32_t input[] = { 0x0131 }; + static const uint32_t casemapped[] = { 0x0049 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "topkapı" */ + static const uint32_t input[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + static const uint32_t casemapped[] = + { 0x0054, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint32_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; + static const uint32_t casemapped[] = { 0x0048, 0x0065, 0x0069, 0x00DF }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint32_t input[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + static const uint32_t casemapped[] = + { + 0x03A0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03A0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint32_t input[] = { 0x01F0, 0x0323 }; + static const uint32_t casemapped[] = { 0x004A, 0x030C, 0x0323 }; + static const uint32_t casemapped_normalized[] = { 0x004A, 0x0323, 0x030C }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-u32-toupper.c b/tests/unicase/test-u32-toupper.c new file mode 100644 index 00000000..dbc1619b --- /dev/null +++ b/tests/unicase/test-u32-toupper.c @@ -0,0 +1,211 @@ +/* Test of uppercase mapping for UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint32_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint32_t *expected, size_t expected_length) +{ + size_t length; + uint32_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u32_toupper (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint32_t *preallocated; + + length = expected_length - 1; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_toupper (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint32_t *preallocated; + + length = expected_length; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_toupper (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint32_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint32_t casemapped[] = + { 'G', 'R', 0x00DC, 0x0053, 0x0053, ' ', 'G', 'O', 'T', 'T', '.', ' ', + 0x0417, 0x0414, 0x0420, 0x0410, 0x0412, 0x0421, 0x0422, 0x0412, 0x0423, + 0x0419, 0x0422, 0x0415, '!', ' ', + 'X', '=', '(', '-', 'B', 0x00B1, 'S', 'Q', 'R', 'T', '(', 'B', 0x00B2, + '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint32_t input[] = { 0x0149 }; + static const uint32_t casemapped[] = { 0x02BC, 0x004E }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint32_t input[] = { 0x0390 }; + static const uint32_t casemapped[] = { 0x0399, 0x0308, 0x0301 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint32_t input[] = { 0x0049 }; + static const uint32_t casemapped[] = { 0x0049 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint32_t input[] = { 0x0069 }; + static const uint32_t casemapped[] = { 0x0049 }; + static const uint32_t casemapped_tr[] = { 0x0130 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint32_t input[] = { 0x0130 }; + static const uint32_t casemapped[] = { 0x0130 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint32_t input[] = { 0x0131 }; + static const uint32_t casemapped[] = { 0x0049 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "topkapı" */ + static const uint32_t input[] = + { 0x0074, 0x006F, 0x0070, 0x006B, 0x0061, 0x0070, 0x0131 }; + static const uint32_t casemapped[] = + { 0x0054, 0x004F, 0x0050, 0x004B, 0x0041, 0x0050, 0x0049 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint32_t input[] = { 0x0068, 0x0065, 0x0069, 0x00DF }; + static const uint32_t casemapped[] = { 0x0048, 0x0045, 0x0049, 0x0053, 0x0053 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint32_t input[] = + { + 0x03C0, 0x03B5, 0x03C1, 0x03B9, 0x03C3, 0x03C3, 0x03CC, 0x03C4, + 0x03B5, 0x03C1, 0x03B5, 0x03C2, 0x0020, 0x03C0, 0x03BB, 0x03B7, + 0x03C1, 0x03BF, 0x03C6, 0x03BF, 0x03C1, 0x03AF, 0x03B5, 0x03C2 + }; + static const uint32_t casemapped[] = + { + 0x03A0, 0x0395, 0x03A1, 0x0399, 0x03A3, 0x03A3, 0x038C, 0x03A4, + 0x0395, 0x03A1, 0x0395, 0x03A3, 0x0020, 0x03A0, 0x039B, 0x0397, + 0x03A1, 0x039F, 0x03A6, 0x039F, 0x03A1, 0x038A, 0x0395, 0x03A3 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint32_t input[] = { 0x01F0, 0x0323 }; + static const uint32_t casemapped[] = { 0x004A, 0x030C, 0x0323 }; + static const uint32_t casemapped_normalized[] = { 0x004A, 0x0323, 0x030C }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-u8-casecmp.c b/tests/unicase/test-u8-casecmp.c new file mode 100644 index 00000000..dbcc9d76 --- /dev/null +++ b/tests/unicase/test-u8-casecmp.c @@ -0,0 +1,345 @@ +/* Test of case and normalization insensitive comparison of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint8_t +#include "test-casecmp.h" +#undef UNIT + +static void +test_nonascii (int (*my_casecmp) (const uint8_t *, size_t, const uint8_t *, size_t, const char *, uninorm_t, int *)) +{ + /* Normalization effects. */ + { + static const uint8_t input1[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e' }; + static const uint8_t input2[] = { 'H', 'O', 0xCC, 0x88, 'h', 'L', 'e' }; + static const uint8_t input3[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e', 'n' }; + static const uint8_t input4[] = { 'H', 'O', 0xCC, 0x88, 'h', 'L', 'e', 'n' }; + static const uint8_t input5[] = { 'H', 'u', 'r', 'z' }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint8_t input1[] = { 0xC3, 0x84 }; + static const uint8_t input2[] = { 0x41, 0xCC, 0x88 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint8_t input1[] = { 0xC7, 0x9E }; + static const uint8_t input2[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint8_t input1[] = { 0xE1, 0xBF, 0x81 }; + static const uint8_t input2[] = { 0xC2, 0xA8, 0xCD, 0x82 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEUL */ + static const uint8_t input1[] = { 0xEA, 0xB8, 0x80 }; + static const uint8_t input2[] = { 0xEA, 0xB7, 0xB8, 0xE1, 0x86, 0xAF }; + static const uint8_t input3[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEU */ + static const uint8_t input1[] = { 0xEA, 0xB7, 0xB8 }; + static const uint8_t input2[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint8_t input1[] = + { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', + 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, + 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, + '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', + 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + static const uint8_t input2[] = + { 'g', 'r', 0xC3, 0xBC, 0x73, 0x73, ' ', 'g', 'o', 't', 't', '.', ' ', + 0xD0, 0xB7, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, + 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, + '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', + 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + static const uint8_t input3[] = + { 'G', 'R', 0xC3, 0x9C, 0x53, 0x53, ' ', 'G', 'O', 'T', 'T', '.', ' ', + 0xD0, 0x97, 0xD0, 0x94, 0xD0, 0xA0, 0xD0, 0x90, 0xD0, 0x92, 0xD0, 0xA1, + 0xD0, 0xA2, 0xD0, 0x92, 0xD0, 0xA3, 0xD0, 0x99, 0xD0, 0xA2, 0xD0, 0x95, + '!', ' ', 'X', '=', '(', '-', 'B', 0xC2, 0xB1, 'S', 'Q', 'R', 'T', '(', + 'B', 0xC2, 0xB2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint8_t input1[] = { 0xC5, 0x89 }; + static const uint8_t input2[] = { 0xCA, 0xBC, 0x6E }; + static const uint8_t input3[] = { 0xCA, 0xBC, 0x4E }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint8_t input1[] = { 0xCE, 0x90 }; + static const uint8_t input2[] = { 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint8_t input[] = { 0x49 }; + static const uint8_t casefolded[] = { 0x69 }; + static const uint8_t casefolded_tr[] = { 0xC4, 0xB1 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint8_t input[] = { 0x69 }; + static const uint8_t casefolded[] = { 0x49 }; + static const uint8_t casefolded_tr[] = { 0xC4, 0xB0 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint8_t input[] = { 0xC4, 0xB0 }; + static const uint8_t casefolded[] = { 0x69, 0xCC, 0x87 }; + static const uint8_t casefolded_tr[] = { 0x69 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint8_t input[] = { 0xC4, 0xB1 }; + static const uint8_t casefolded[] = { 0x49 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 1); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* "topkapı" */ + static const uint8_t input[] = + { 0x54, 0x4F, 0x50, 0x4B, 0x41, 0x50, 0x49 }; + static const uint8_t casefolded[] = + { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint8_t input1[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; + static const uint8_t input2[] = { 0x68, 0x65, 0x69, 0x73, 0x73 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint8_t input1[] = + { + 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, + 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, + ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, + 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 + }; + static const uint8_t input2[] = + { + 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, + 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x83, + ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, + 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x83 + }; + static const uint8_t input3[] = + { + 0xCE, 0xA0, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x99, 0xCE, 0xA3, 0xCE, 0xA3, + 0xCE, 0x8C, 0xCE, 0xA4, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x95, 0xCE, 0xA3, + ' ', 0xCE, 0xA0, 0xCE, 0x9B, 0xCE, 0x97, 0xCE, 0xA1, 0xCE, 0x9F, + 0xCE, 0xA6, 0xCE, 0x9F, 0xCE, 0xA1, 0xCE, 0x8A, 0xCE, 0x95, 0xCE, 0xA3 + }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint8_t input[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; + static const uint8_t casefolded[] = { 0x6A, 0xCC, 0x8C, 0xCC, 0xA3 }; + static const uint8_t casefolded_decomposed[] = { 0x6A, 0xCC, 0xA3, 0xCC, 0x8C }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, NULL, &cmp) == 0); + ASSERT (cmp != 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } +} + +int +main () +{ + test_ascii (u8_casecmp, UNINORM_NFD); + test_nonascii (u8_casecmp); + + return 0; +} diff --git a/tests/unicase/test-u8-casecoll.c b/tests/unicase/test-u8-casecoll.c new file mode 100644 index 00000000..e1b0c57c --- /dev/null +++ b/tests/unicase/test-u8-casecoll.c @@ -0,0 +1,54 @@ +/* Test of locale dependent, case and normalization insensitive comparison of + UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint8_t +#include "test-casecmp.h" +#undef UNIT + +int +main () +{ + /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_casecoll + on ASCII strings should behave like strcasecmp. */ + test_ascii (u8_casecoll, UNINORM_NFC); + + return 0; +} diff --git a/tests/unicase/test-u8-casefold.c b/tests/unicase/test-u8-casefold.c new file mode 100644 index 00000000..225b9979 --- /dev/null +++ b/tests/unicase/test-u8-casefold.c @@ -0,0 +1,220 @@ +/* Test of casefolding mapping for UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint8_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint8_t *expected, size_t expected_length) +{ + size_t length; + uint8_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u8_casefold (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint8_t *preallocated; + + length = expected_length - 1; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_casefold (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint8_t *preallocated; + + length = expected_length; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_casefold (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint8_t input[] = + { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', + 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, + 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, + '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', + 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + static const uint8_t casefolded[] = + { 'g', 'r', 0xC3, 0xBC, 0x73, 0x73, ' ', 'g', 'o', 't', 't', '.', ' ', + 0xD0, 0xB7, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, + 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, + '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', + 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint8_t input[] = { 0xC5, 0x89 }; + static const uint8_t casefolded[] = { 0xCA, 0xBC, 0x6E }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint8_t input[] = { 0xCE, 0x90 }; + static const uint8_t casefolded[] = { 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint8_t input[] = { 0x49 }; + static const uint8_t casefolded[] = { 0x69 }; + static const uint8_t casefolded_tr[] = { 0xC4, 0xB1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint8_t input[] = { 0x69 }; + static const uint8_t casefolded[] = { 0x69 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint8_t input[] = { 0xC4, 0xB0 }; + static const uint8_t casefolded[] = { 0x69, 0xCC, 0x87 }; + static const uint8_t casefolded_tr[] = { 0x69 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded_tr, SIZEOF (casefolded_tr)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint8_t input[] = { 0xC4, 0xB1 }; + static const uint8_t casefolded[] = { 0xC4, 0xB1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); + } + { /* "topkapı" */ + static const uint8_t input[] = + { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; + static const uint8_t casefolded[] = + { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint8_t input[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; + static const uint8_t casefolded[] = { 0x68, 0x65, 0x69, 0x73, 0x73 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint8_t input[] = + { + 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, + 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, + ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, + 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 + }; + static const uint8_t casefolded[] = + { + 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, + 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x83, + ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, + 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x83 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint8_t input[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; + static const uint8_t casefolded[] = { 0x6A, 0xCC, 0x8C, 0xCC, 0xA3 }; + static const uint8_t casefolded_decomposed[] = { 0x6A, 0xCC, 0xA3, 0xCC, 0x8C }; + static const uint8_t casefolded_normalized[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casefolded, SIZEOF (casefolded)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFD, casefolded_decomposed, SIZEOF (casefolded_decomposed)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casefolded_normalized, SIZEOF (casefolded_normalized)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-u8-is-cased.c b/tests/unicase/test-u8-is-cased.c new file mode 100644 index 00000000..984f81b6 --- /dev/null +++ b/tests/unicase/test-u8-is-cased.c @@ -0,0 +1,51 @@ +/* Test of test whether case matters for an UTF-8 string. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint8_t +#include "test-is-cased.h" +#undef UNIT + +int +main () +{ + test_ascii (u8_is_cased); + + return 0; +} diff --git a/tests/unicase/test-u8-is-casefolded.c b/tests/unicase/test-u8-is-casefolded.c new file mode 100644 index 00000000..b727f6bb --- /dev/null +++ b/tests/unicase/test-u8-is-casefolded.c @@ -0,0 +1,65 @@ +/* Test of test whether an UTF-8 string is already case-folded. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint8_t +#include "test-is-casefolded.h" +#undef UNIT + +static void +test_nonascii (int (*my_is) (const uint8_t *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.1.0. */ + { + static const uint8_t input[] = { 0xC3, 0x9F }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } +} + +int +main () +{ + test_ascii (u8_is_casefolded); + test_nonascii (u8_is_casefolded); + + return 0; +} diff --git a/tests/unicase/test-u8-is-lowercase.c b/tests/unicase/test-u8-is-lowercase.c new file mode 100644 index 00000000..230e77cf --- /dev/null +++ b/tests/unicase/test-u8-is-lowercase.c @@ -0,0 +1,93 @@ +/* Test of test whether an UTF-8 string is entirely lower case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint8_t +#include "test-is-lowercase.h" +#undef UNIT + +static void +test_nonascii (int (*my_is) (const uint8_t *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.1.0. */ + { + static const uint8_t input[] = { 0xE2, 0x93, 0x97 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint8_t input[] = { 0xE2, 0x92, 0xBD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const uint8_t input[] = { 0xCA, 0xB0 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint8_t input[] = { 0xE1, 0x80, 0xB4 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint8_t input[] = { 0xCA, 0xBD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } +} + +int +main () +{ + test_ascii (u8_is_lowercase); + test_nonascii (u8_is_lowercase); + + return 0; +} diff --git a/tests/unicase/test-u8-is-titlecase.c b/tests/unicase/test-u8-is-titlecase.c new file mode 100644 index 00000000..fb803ea8 --- /dev/null +++ b/tests/unicase/test-u8-is-titlecase.c @@ -0,0 +1,51 @@ +/* Test of test whether an UTF-8 string is entirely title case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint8_t +#include "test-is-titlecase.h" +#undef UNIT + +int +main () +{ + test_ascii (u8_is_titlecase); + + return 0; +} diff --git a/tests/unicase/test-u8-is-uppercase.c b/tests/unicase/test-u8-is-uppercase.c new file mode 100644 index 00000000..c66bf393 --- /dev/null +++ b/tests/unicase/test-u8-is-uppercase.c @@ -0,0 +1,93 @@ +/* Test of test whether an UTF-8 string is entirely upper case. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT uint8_t +#include "test-is-uppercase.h" +#undef UNIT + +static void +test_nonascii (int (*my_is) (const uint8_t *, size_t, const char *, bool *)) +{ + /* Test cases from Unicode 5.1.0. */ + { + static const uint8_t input[] = { 0xE2, 0x93, 0x97 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == false); + } + { + static const uint8_t input[] = { 0xE2, 0x92, 0xBD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint8_t input[] = { 0xCA, 0xB0 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint8_t input[] = { 0xE1, 0x80, 0xB4 }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } + { + static const uint8_t input[] = { 0xCA, 0xBD }; + bool result; + + ASSERT (my_is (input, SIZEOF (input), NULL, &result) == 0); + ASSERT (result == true); + } +} + +int +main () +{ + test_ascii (u8_is_uppercase); + test_nonascii (u8_is_uppercase); + + return 0; +} diff --git a/tests/unicase/test-u8-tolower.c b/tests/unicase/test-u8-tolower.c new file mode 100644 index 00000000..6c0a5df6 --- /dev/null +++ b/tests/unicase/test-u8-tolower.c @@ -0,0 +1,257 @@ +/* Test of lowercase mapping for UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint8_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint8_t *expected, size_t expected_length) +{ + size_t length; + uint8_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u8_tolower (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint8_t *preallocated; + + length = expected_length - 1; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_tolower (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint8_t *preallocated; + + length = expected_length; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_tolower (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint8_t input[] = + { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', + 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, + 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, + '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', + 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + static const uint8_t casemapped[] = + { 'g', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'g', 'o', 't', 't', '.', ' ', + 0xD0, 0xB7, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, + 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, + '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', + 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint8_t input[] = { 0x49 }; + static const uint8_t casemapped[] = { 0x69 }; + static const uint8_t casemapped_tr[] = { 0xC4, 0xB1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint8_t input[] = { 0x69 }; + static const uint8_t casemapped[] = { 0x69 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint8_t input[] = { 0xC4, 0xB0 }; + static const uint8_t casemapped[] = { 0x69, 0xCC, 0x87 }; + static const uint8_t casemapped_tr[] = { 0x69 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint8_t input[] = { 0xC4, 0xB1}; + static const uint8_t casemapped[] = { 0xC4, 0xB1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "TOPKAPI" */ + static const uint8_t input[] = + { 0x54, 0x4F, 0x50, 0x4B, 0x41, 0x50, 0x49 }; + static const uint8_t casemapped[] = + { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "HEIß" */ + static const uint8_t input[] = { 0x48, 0x45, 0x49, 0xC3, 0x9F }; + static const uint8_t casemapped[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "ΠΕΡΙΣΣΌΤΕΡΕΣ ΠΛΗΡΟΦΟΡΊΕΣ" */ + static const uint8_t input[] = + { + 0xCE, 0xA0, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x99, 0xCE, 0xA3, 0xCE, 0xA3, + 0xCE, 0x8C, 0xCE, 0xA4, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x95, 0xCE, 0xA3, + ' ', 0xCE, 0xA0, 0xCE, 0x9B, 0xCE, 0x97, 0xCE, 0xA1, 0xCE, 0x9F, + 0xCE, 0xA6, 0xCE, 0x9F, 0xCE, 0xA1, 0xCE, 0x8A, 0xCE, 0x95, 0xCE, 0xA3 + }; + static const uint8_t casemapped[] = + { + 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, + 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, + ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, + 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "Σ" -> "σ" */ + static const uint8_t input[] = { 0xCE, 0xA3 }; + static const uint8_t casemapped[] = { 0xCF, 0x83 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ" -> "ας" */ + static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3 }; + static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x82 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + /* It's a final sigma only if not followed by a case-ignorable sequence and + then a cased letter. Note that U+0345 and U+037A are simultaneously + case-ignorable and cased (which is a bit paradoxical). */ + { /* "ΑΣΑ" -> "ασα" */ + static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3, 0xCE, 0x91 }; + static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x83, 0xCE, 0xB1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:" -> "ας:" */ + static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3, 0x3A }; + static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x82, 0x3A }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:Α" -> "ασ:α" */ + static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3, 0x3A, 0xCE, 0x91 }; + static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x83, 0x3A, 0xCE, 0xB1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:ͺ" -> "ασ:ͺ" */ + static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3, 0x3A, 0xCD, 0xBA }; + static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x83, 0x3A, 0xCD, 0xBA }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ΑΣ:ͺ " -> "ασ:ͺ " */ + static const uint8_t input[] = { 0xCE, 0x91, 0xCE, 0xA3, 0x3A, 0xCD, 0xBA, 0x20 }; + static const uint8_t casemapped[] = { 0xCE, 0xB1, 0xCF, 0x83, 0x3A, 0xCD, 0xBA, 0x20 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + /* It's a final sigma only if preceded by a case-ignorable sequence and + a cased letter before it. Note that U+0345 and U+037A are simultaneously + case-ignorable and cased (which is a bit paradoxical). */ + { /* ":Σ" -> ":σ" */ + static const uint8_t input[] = { 0x3A, 0xCE, 0xA3 }; + static const uint8_t casemapped[] = { 0x3A, 0xCF, 0x83 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "Α:Σ" -> "α:ς" */ + static const uint8_t input[] = { 0xCE, 0x91, 0x3A, 0xCE, 0xA3 }; + static const uint8_t casemapped[] = { 0xCE, 0xB1, 0x3A, 0xCF, 0x82 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "ͺ:Σ" -> "ͺ:ς" */ + static const uint8_t input[] = { 0xCD, 0xBA, 0x3A, 0xCE, 0xA3 }; + static const uint8_t casemapped[] = { 0xCD, 0xBA, 0x3A, 0xCF, 0x82 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* " ͺ:Σ" -> " ͺ:ς" */ + static const uint8_t input[] = { 0x20, 0xCD, 0xBA, 0x3A, 0xCE, 0xA3 }; + static const uint8_t casemapped[] = { 0x20, 0xCD, 0xBA, 0x3A, 0xCF, 0x82 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-u8-totitle.c b/tests/unicase/test-u8-totitle.c new file mode 100644 index 00000000..c2506ac5 --- /dev/null +++ b/tests/unicase/test-u8-totitle.c @@ -0,0 +1,217 @@ +/* Test of titlecase mapping for UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint8_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint8_t *expected, size_t expected_length) +{ + size_t length; + uint8_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u8_totitle (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint8_t *preallocated; + + length = expected_length - 1; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_totitle (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint8_t *preallocated; + + length = expected_length; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_totitle (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "GRÜß GOTT. ЗДРАВСТВУЙТЕ! X=(-B±SQRT(B²-4AC))/(2A) 日本語,中文,한글" */ + static const uint8_t input[] = + { 'G', 'R', 0xC3, 0x9C, 0xC3, 0x9F, ' ', 'G', 'O', 'T', 'T', '.', ' ', + 0xD0, 0x97, 0xD0, 0x94, 0xD0, 0xA0, 0xD0, 0x90, 0xD0, 0x92, 0xD0, 0xA1, + 0xD0, 0xA2, 0xD0, 0x92, 0xD0, 0xA3, 0xD0, 0x99, 0xD0, 0xA2, 0xD0, 0x95, + '!', ' ', 'X', '=', '(', '-', 'B', 0xC2, 0xB1, 'S', 'Q', 'R', 'T', '(', + 'B', 0xC2, 0xB2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + static const uint8_t casemapped[] = + { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', + 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, + 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, + '!', ' ', 'X', '=', '(', '-', 'B', 0xC2, 0xB1, 'S', 'q', 'r', 't', '(', + 'B', 0xC2, 0xB2, '-', '4', 'A', 'c', ')', ')', '/', '(', '2', 'A', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint8_t input[] = { 0xC5, 0x89 }; + static const uint8_t casemapped[] = { 0xCA, 0xBC, 0x4E }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint8_t input[] = { 0xCE, 0x90 }; + static const uint8_t casemapped[] = { 0xCE, 0x99, 0xCC, 0x88, 0xCC, 0x81 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint8_t input[] = { 0x49 }; + static const uint8_t casemapped[] = { 0x49 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint8_t input[] = { 0x69 }; + static const uint8_t casemapped[] = { 0x49 }; + static const uint8_t casemapped_tr[] = { 0xC4, 0xB0 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint8_t input[] = { 0xC4, 0xB0 }; + static const uint8_t casemapped[] = { 0xC4, 0xB0 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint8_t input[] = { 0xC4, 0xB1 }; + static const uint8_t casemapped[] = { 0x49 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "topkapı" */ + static const uint8_t input[] = + { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; + static const uint8_t casemapped[] = + { 0x54, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint8_t input[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; + static const uint8_t casemapped[] = { 0x48, 0x65, 0x69, 0xC3, 0x9F }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint8_t input[] = + { + 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, + 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, + ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, + 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 + }; + static const uint8_t casemapped[] = + { + 0xCE, 0xA0, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, + 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, + ' ', 0xCE, 0xA0, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, + 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint8_t input[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; + static const uint8_t casemapped[] = { 0x4A, 0xCC, 0x8C, 0xCC, 0xA3 }; + static const uint8_t casemapped_normalized[] = { 0x4A, 0xCC, 0xA3, 0xCC, 0x8C }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-u8-toupper.c b/tests/unicase/test-u8-toupper.c new file mode 100644 index 00000000..41e536bd --- /dev/null +++ b/tests/unicase/test-u8-toupper.c @@ -0,0 +1,217 @@ +/* Test of uppercase mapping for UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include + +#include "unistr.h" +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint8_t *input, size_t input_length, + const char *iso639_language, uninorm_t nf, + const uint8_t *expected, size_t expected_length) +{ + size_t length; + uint8_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u8_toupper (input, input_length, iso639_language, nf, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint8_t *preallocated; + + length = expected_length - 1; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_toupper (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint8_t *preallocated; + + length = expected_length; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_toupper (input, input_length, iso639_language, nf, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +int +main () +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, NULL, NULL, 0) == 0); + ASSERT (check (NULL, 0, NULL, UNINORM_NFC, NULL, 0) == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint8_t input[] = + { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', + 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, + 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, + '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', + 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + static const uint8_t casemapped[] = + { 'G', 'R', 0xC3, 0x9C, 0x53, 0x53, ' ', 'G', 'O', 'T', 'T', '.', ' ', + 0xD0, 0x97, 0xD0, 0x94, 0xD0, 0xA0, 0xD0, 0x90, 0xD0, 0x92, 0xD0, 0xA1, + 0xD0, 0xA2, 0xD0, 0x92, 0xD0, 0xA3, 0xD0, 0x99, 0xD0, 0xA2, 0xD0, 0x95, + '!', ' ', 'X', '=', '(', '-', 'B', 0xC2, 0xB1, 'S', 'Q', 'R', 'T', '(', + 'B', 0xC2, 0xB2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const uint8_t input[] = { 0xC5, 0x89 }; + static const uint8_t casemapped[] = { 0xCA, 0xBC, 0x4E }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const uint8_t input[] = { 0xCE, 0x90 }; + static const uint8_t casemapped[] = { 0xCE, 0x99, 0xCC, 0x88, 0xCC, 0x81 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const uint8_t input[] = { 0x49 }; + static const uint8_t casemapped[] = { 0x49 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER I */ + static const uint8_t input[] = { 0x69 }; + static const uint8_t casemapped[] = { 0x49 }; + static const uint8_t casemapped_tr[] = { 0xC4, 0xB0 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped_tr, SIZEOF (casemapped_tr)) == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const uint8_t input[] = { 0xC4, 0xB0 }; + static const uint8_t casemapped[] = { 0xC4, 0xB0 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const uint8_t input[] = { 0xC4, 0xB1 }; + static const uint8_t casemapped[] = { 0x49 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + { /* "topkapı" */ + static const uint8_t input[] = + { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; + static const uint8_t casemapped[] = + { 0x54, 0x4F, 0x50, 0x4B, 0x41, 0x50, 0x49 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), "tr", NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const uint8_t input[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; + static const uint8_t casemapped[] = { 0x48, 0x45, 0x49, 0x53, 0x53 }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const uint8_t input[] = + { + 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, + 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, + ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, + 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 + }; + static const uint8_t casemapped[] = + { + 0xCE, 0xA0, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x99, 0xCE, 0xA3, 0xCE, 0xA3, + 0xCE, 0x8C, 0xCE, 0xA4, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x95, 0xCE, 0xA3, + ' ', 0xCE, 0xA0, 0xCE, 0x9B, 0xCE, 0x97, 0xCE, 0xA1, 0xCE, 0x9F, + 0xCE, 0xA6, 0xCE, 0x9F, 0xCE, 0xA1, 0xCE, 0x8A, 0xCE, 0x95, 0xCE, 0xA3 + }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const uint8_t input[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; + static const uint8_t casemapped[] = { 0x4A, 0xCC, 0x8C, 0xCC, 0xA3 }; + static const uint8_t casemapped_normalized[] = { 0x4A, 0xCC, 0xA3, 0xCC, 0x8C }; + ASSERT (check (input, SIZEOF (input), NULL, NULL, casemapped, SIZEOF (casemapped)) == 0); + ASSERT (check (input, SIZEOF (input), NULL, UNINORM_NFC, casemapped_normalized, SIZEOF (casemapped_normalized)) == 0); + } + + return 0; +} diff --git a/tests/unicase/test-uc_tolower.c b/tests/unicase/test-uc_tolower.c new file mode 100644 index 00000000..302e26b8 --- /dev/null +++ b/tests/unicase/test-uc_tolower.c @@ -0,0 +1,1047 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character mapping functions. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Generated automatically by gen-case.c for Unicode 5.1.0. */ + +#include "test-mapping-part1.h" + + { 0x0041, 0x0061 }, + { 0x0042, 0x0062 }, + { 0x0043, 0x0063 }, + { 0x0044, 0x0064 }, + { 0x0045, 0x0065 }, + { 0x0046, 0x0066 }, + { 0x0047, 0x0067 }, + { 0x0048, 0x0068 }, + { 0x0049, 0x0069 }, + { 0x004A, 0x006A }, + { 0x004B, 0x006B }, + { 0x004C, 0x006C }, + { 0x004D, 0x006D }, + { 0x004E, 0x006E }, + { 0x004F, 0x006F }, + { 0x0050, 0x0070 }, + { 0x0051, 0x0071 }, + { 0x0052, 0x0072 }, + { 0x0053, 0x0073 }, + { 0x0054, 0x0074 }, + { 0x0055, 0x0075 }, + { 0x0056, 0x0076 }, + { 0x0057, 0x0077 }, + { 0x0058, 0x0078 }, + { 0x0059, 0x0079 }, + { 0x005A, 0x007A }, + { 0x00C0, 0x00E0 }, + { 0x00C1, 0x00E1 }, + { 0x00C2, 0x00E2 }, + { 0x00C3, 0x00E3 }, + { 0x00C4, 0x00E4 }, + { 0x00C5, 0x00E5 }, + { 0x00C6, 0x00E6 }, + { 0x00C7, 0x00E7 }, + { 0x00C8, 0x00E8 }, + { 0x00C9, 0x00E9 }, + { 0x00CA, 0x00EA }, + { 0x00CB, 0x00EB }, + { 0x00CC, 0x00EC }, + { 0x00CD, 0x00ED }, + { 0x00CE, 0x00EE }, + { 0x00CF, 0x00EF }, + { 0x00D0, 0x00F0 }, + { 0x00D1, 0x00F1 }, + { 0x00D2, 0x00F2 }, + { 0x00D3, 0x00F3 }, + { 0x00D4, 0x00F4 }, + { 0x00D5, 0x00F5 }, + { 0x00D6, 0x00F6 }, + { 0x00D8, 0x00F8 }, + { 0x00D9, 0x00F9 }, + { 0x00DA, 0x00FA }, + { 0x00DB, 0x00FB }, + { 0x00DC, 0x00FC }, + { 0x00DD, 0x00FD }, + { 0x00DE, 0x00FE }, + { 0x0100, 0x0101 }, + { 0x0102, 0x0103 }, + { 0x0104, 0x0105 }, + { 0x0106, 0x0107 }, + { 0x0108, 0x0109 }, + { 0x010A, 0x010B }, + { 0x010C, 0x010D }, + { 0x010E, 0x010F }, + { 0x0110, 0x0111 }, + { 0x0112, 0x0113 }, + { 0x0114, 0x0115 }, + { 0x0116, 0x0117 }, + { 0x0118, 0x0119 }, + { 0x011A, 0x011B }, + { 0x011C, 0x011D }, + { 0x011E, 0x011F }, + { 0x0120, 0x0121 }, + { 0x0122, 0x0123 }, + { 0x0124, 0x0125 }, + { 0x0126, 0x0127 }, + { 0x0128, 0x0129 }, + { 0x012A, 0x012B }, + { 0x012C, 0x012D }, + { 0x012E, 0x012F }, + { 0x0130, 0x0069 }, + { 0x0132, 0x0133 }, + { 0x0134, 0x0135 }, + { 0x0136, 0x0137 }, + { 0x0139, 0x013A }, + { 0x013B, 0x013C }, + { 0x013D, 0x013E }, + { 0x013F, 0x0140 }, + { 0x0141, 0x0142 }, + { 0x0143, 0x0144 }, + { 0x0145, 0x0146 }, + { 0x0147, 0x0148 }, + { 0x014A, 0x014B }, + { 0x014C, 0x014D }, + { 0x014E, 0x014F }, + { 0x0150, 0x0151 }, + { 0x0152, 0x0153 }, + { 0x0154, 0x0155 }, + { 0x0156, 0x0157 }, + { 0x0158, 0x0159 }, + { 0x015A, 0x015B }, + { 0x015C, 0x015D }, + { 0x015E, 0x015F }, + { 0x0160, 0x0161 }, + { 0x0162, 0x0163 }, + { 0x0164, 0x0165 }, + { 0x0166, 0x0167 }, + { 0x0168, 0x0169 }, + { 0x016A, 0x016B }, + { 0x016C, 0x016D }, + { 0x016E, 0x016F }, + { 0x0170, 0x0171 }, + { 0x0172, 0x0173 }, + { 0x0174, 0x0175 }, + { 0x0176, 0x0177 }, + { 0x0178, 0x00FF }, + { 0x0179, 0x017A }, + { 0x017B, 0x017C }, + { 0x017D, 0x017E }, + { 0x0181, 0x0253 }, + { 0x0182, 0x0183 }, + { 0x0184, 0x0185 }, + { 0x0186, 0x0254 }, + { 0x0187, 0x0188 }, + { 0x0189, 0x0256 }, + { 0x018A, 0x0257 }, + { 0x018B, 0x018C }, + { 0x018E, 0x01DD }, + { 0x018F, 0x0259 }, + { 0x0190, 0x025B }, + { 0x0191, 0x0192 }, + { 0x0193, 0x0260 }, + { 0x0194, 0x0263 }, + { 0x0196, 0x0269 }, + { 0x0197, 0x0268 }, + { 0x0198, 0x0199 }, + { 0x019C, 0x026F }, + { 0x019D, 0x0272 }, + { 0x019F, 0x0275 }, + { 0x01A0, 0x01A1 }, + { 0x01A2, 0x01A3 }, + { 0x01A4, 0x01A5 }, + { 0x01A6, 0x0280 }, + { 0x01A7, 0x01A8 }, + { 0x01A9, 0x0283 }, + { 0x01AC, 0x01AD }, + { 0x01AE, 0x0288 }, + { 0x01AF, 0x01B0 }, + { 0x01B1, 0x028A }, + { 0x01B2, 0x028B }, + { 0x01B3, 0x01B4 }, + { 0x01B5, 0x01B6 }, + { 0x01B7, 0x0292 }, + { 0x01B8, 0x01B9 }, + { 0x01BC, 0x01BD }, + { 0x01C4, 0x01C6 }, + { 0x01C5, 0x01C6 }, + { 0x01C7, 0x01C9 }, + { 0x01C8, 0x01C9 }, + { 0x01CA, 0x01CC }, + { 0x01CB, 0x01CC }, + { 0x01CD, 0x01CE }, + { 0x01CF, 0x01D0 }, + { 0x01D1, 0x01D2 }, + { 0x01D3, 0x01D4 }, + { 0x01D5, 0x01D6 }, + { 0x01D7, 0x01D8 }, + { 0x01D9, 0x01DA }, + { 0x01DB, 0x01DC }, + { 0x01DE, 0x01DF }, + { 0x01E0, 0x01E1 }, + { 0x01E2, 0x01E3 }, + { 0x01E4, 0x01E5 }, + { 0x01E6, 0x01E7 }, + { 0x01E8, 0x01E9 }, + { 0x01EA, 0x01EB }, + { 0x01EC, 0x01ED }, + { 0x01EE, 0x01EF }, + { 0x01F1, 0x01F3 }, + { 0x01F2, 0x01F3 }, + { 0x01F4, 0x01F5 }, + { 0x01F6, 0x0195 }, + { 0x01F7, 0x01BF }, + { 0x01F8, 0x01F9 }, + { 0x01FA, 0x01FB }, + { 0x01FC, 0x01FD }, + { 0x01FE, 0x01FF }, + { 0x0200, 0x0201 }, + { 0x0202, 0x0203 }, + { 0x0204, 0x0205 }, + { 0x0206, 0x0207 }, + { 0x0208, 0x0209 }, + { 0x020A, 0x020B }, + { 0x020C, 0x020D }, + { 0x020E, 0x020F }, + { 0x0210, 0x0211 }, + { 0x0212, 0x0213 }, + { 0x0214, 0x0215 }, + { 0x0216, 0x0217 }, + { 0x0218, 0x0219 }, + { 0x021A, 0x021B }, + { 0x021C, 0x021D }, + { 0x021E, 0x021F }, + { 0x0220, 0x019E }, + { 0x0222, 0x0223 }, + { 0x0224, 0x0225 }, + { 0x0226, 0x0227 }, + { 0x0228, 0x0229 }, + { 0x022A, 0x022B }, + { 0x022C, 0x022D }, + { 0x022E, 0x022F }, + { 0x0230, 0x0231 }, + { 0x0232, 0x0233 }, + { 0x023A, 0x2C65 }, + { 0x023B, 0x023C }, + { 0x023D, 0x019A }, + { 0x023E, 0x2C66 }, + { 0x0241, 0x0242 }, + { 0x0243, 0x0180 }, + { 0x0244, 0x0289 }, + { 0x0245, 0x028C }, + { 0x0246, 0x0247 }, + { 0x0248, 0x0249 }, + { 0x024A, 0x024B }, + { 0x024C, 0x024D }, + { 0x024E, 0x024F }, + { 0x0370, 0x0371 }, + { 0x0372, 0x0373 }, + { 0x0376, 0x0377 }, + { 0x0386, 0x03AC }, + { 0x0388, 0x03AD }, + { 0x0389, 0x03AE }, + { 0x038A, 0x03AF }, + { 0x038C, 0x03CC }, + { 0x038E, 0x03CD }, + { 0x038F, 0x03CE }, + { 0x0391, 0x03B1 }, + { 0x0392, 0x03B2 }, + { 0x0393, 0x03B3 }, + { 0x0394, 0x03B4 }, + { 0x0395, 0x03B5 }, + { 0x0396, 0x03B6 }, + { 0x0397, 0x03B7 }, + { 0x0398, 0x03B8 }, + { 0x0399, 0x03B9 }, + { 0x039A, 0x03BA }, + { 0x039B, 0x03BB }, + { 0x039C, 0x03BC }, + { 0x039D, 0x03BD }, + { 0x039E, 0x03BE }, + { 0x039F, 0x03BF }, + { 0x03A0, 0x03C0 }, + { 0x03A1, 0x03C1 }, + { 0x03A3, 0x03C3 }, + { 0x03A4, 0x03C4 }, + { 0x03A5, 0x03C5 }, + { 0x03A6, 0x03C6 }, + { 0x03A7, 0x03C7 }, + { 0x03A8, 0x03C8 }, + { 0x03A9, 0x03C9 }, + { 0x03AA, 0x03CA }, + { 0x03AB, 0x03CB }, + { 0x03CF, 0x03D7 }, + { 0x03D8, 0x03D9 }, + { 0x03DA, 0x03DB }, + { 0x03DC, 0x03DD }, + { 0x03DE, 0x03DF }, + { 0x03E0, 0x03E1 }, + { 0x03E2, 0x03E3 }, + { 0x03E4, 0x03E5 }, + { 0x03E6, 0x03E7 }, + { 0x03E8, 0x03E9 }, + { 0x03EA, 0x03EB }, + { 0x03EC, 0x03ED }, + { 0x03EE, 0x03EF }, + { 0x03F4, 0x03B8 }, + { 0x03F7, 0x03F8 }, + { 0x03F9, 0x03F2 }, + { 0x03FA, 0x03FB }, + { 0x03FD, 0x037B }, + { 0x03FE, 0x037C }, + { 0x03FF, 0x037D }, + { 0x0400, 0x0450 }, + { 0x0401, 0x0451 }, + { 0x0402, 0x0452 }, + { 0x0403, 0x0453 }, + { 0x0404, 0x0454 }, + { 0x0405, 0x0455 }, + { 0x0406, 0x0456 }, + { 0x0407, 0x0457 }, + { 0x0408, 0x0458 }, + { 0x0409, 0x0459 }, + { 0x040A, 0x045A }, + { 0x040B, 0x045B }, + { 0x040C, 0x045C }, + { 0x040D, 0x045D }, + { 0x040E, 0x045E }, + { 0x040F, 0x045F }, + { 0x0410, 0x0430 }, + { 0x0411, 0x0431 }, + { 0x0412, 0x0432 }, + { 0x0413, 0x0433 }, + { 0x0414, 0x0434 }, + { 0x0415, 0x0435 }, + { 0x0416, 0x0436 }, + { 0x0417, 0x0437 }, + { 0x0418, 0x0438 }, + { 0x0419, 0x0439 }, + { 0x041A, 0x043A }, + { 0x041B, 0x043B }, + { 0x041C, 0x043C }, + { 0x041D, 0x043D }, + { 0x041E, 0x043E }, + { 0x041F, 0x043F }, + { 0x0420, 0x0440 }, + { 0x0421, 0x0441 }, + { 0x0422, 0x0442 }, + { 0x0423, 0x0443 }, + { 0x0424, 0x0444 }, + { 0x0425, 0x0445 }, + { 0x0426, 0x0446 }, + { 0x0427, 0x0447 }, + { 0x0428, 0x0448 }, + { 0x0429, 0x0449 }, + { 0x042A, 0x044A }, + { 0x042B, 0x044B }, + { 0x042C, 0x044C }, + { 0x042D, 0x044D }, + { 0x042E, 0x044E }, + { 0x042F, 0x044F }, + { 0x0460, 0x0461 }, + { 0x0462, 0x0463 }, + { 0x0464, 0x0465 }, + { 0x0466, 0x0467 }, + { 0x0468, 0x0469 }, + { 0x046A, 0x046B }, + { 0x046C, 0x046D }, + { 0x046E, 0x046F }, + { 0x0470, 0x0471 }, + { 0x0472, 0x0473 }, + { 0x0474, 0x0475 }, + { 0x0476, 0x0477 }, + { 0x0478, 0x0479 }, + { 0x047A, 0x047B }, + { 0x047C, 0x047D }, + { 0x047E, 0x047F }, + { 0x0480, 0x0481 }, + { 0x048A, 0x048B }, + { 0x048C, 0x048D }, + { 0x048E, 0x048F }, + { 0x0490, 0x0491 }, + { 0x0492, 0x0493 }, + { 0x0494, 0x0495 }, + { 0x0496, 0x0497 }, + { 0x0498, 0x0499 }, + { 0x049A, 0x049B }, + { 0x049C, 0x049D }, + { 0x049E, 0x049F }, + { 0x04A0, 0x04A1 }, + { 0x04A2, 0x04A3 }, + { 0x04A4, 0x04A5 }, + { 0x04A6, 0x04A7 }, + { 0x04A8, 0x04A9 }, + { 0x04AA, 0x04AB }, + { 0x04AC, 0x04AD }, + { 0x04AE, 0x04AF }, + { 0x04B0, 0x04B1 }, + { 0x04B2, 0x04B3 }, + { 0x04B4, 0x04B5 }, + { 0x04B6, 0x04B7 }, + { 0x04B8, 0x04B9 }, + { 0x04BA, 0x04BB }, + { 0x04BC, 0x04BD }, + { 0x04BE, 0x04BF }, + { 0x04C0, 0x04CF }, + { 0x04C1, 0x04C2 }, + { 0x04C3, 0x04C4 }, + { 0x04C5, 0x04C6 }, + { 0x04C7, 0x04C8 }, + { 0x04C9, 0x04CA }, + { 0x04CB, 0x04CC }, + { 0x04CD, 0x04CE }, + { 0x04D0, 0x04D1 }, + { 0x04D2, 0x04D3 }, + { 0x04D4, 0x04D5 }, + { 0x04D6, 0x04D7 }, + { 0x04D8, 0x04D9 }, + { 0x04DA, 0x04DB }, + { 0x04DC, 0x04DD }, + { 0x04DE, 0x04DF }, + { 0x04E0, 0x04E1 }, + { 0x04E2, 0x04E3 }, + { 0x04E4, 0x04E5 }, + { 0x04E6, 0x04E7 }, + { 0x04E8, 0x04E9 }, + { 0x04EA, 0x04EB }, + { 0x04EC, 0x04ED }, + { 0x04EE, 0x04EF }, + { 0x04F0, 0x04F1 }, + { 0x04F2, 0x04F3 }, + { 0x04F4, 0x04F5 }, + { 0x04F6, 0x04F7 }, + { 0x04F8, 0x04F9 }, + { 0x04FA, 0x04FB }, + { 0x04FC, 0x04FD }, + { 0x04FE, 0x04FF }, + { 0x0500, 0x0501 }, + { 0x0502, 0x0503 }, + { 0x0504, 0x0505 }, + { 0x0506, 0x0507 }, + { 0x0508, 0x0509 }, + { 0x050A, 0x050B }, + { 0x050C, 0x050D }, + { 0x050E, 0x050F }, + { 0x0510, 0x0511 }, + { 0x0512, 0x0513 }, + { 0x0514, 0x0515 }, + { 0x0516, 0x0517 }, + { 0x0518, 0x0519 }, + { 0x051A, 0x051B }, + { 0x051C, 0x051D }, + { 0x051E, 0x051F }, + { 0x0520, 0x0521 }, + { 0x0522, 0x0523 }, + { 0x0531, 0x0561 }, + { 0x0532, 0x0562 }, + { 0x0533, 0x0563 }, + { 0x0534, 0x0564 }, + { 0x0535, 0x0565 }, + { 0x0536, 0x0566 }, + { 0x0537, 0x0567 }, + { 0x0538, 0x0568 }, + { 0x0539, 0x0569 }, + { 0x053A, 0x056A }, + { 0x053B, 0x056B }, + { 0x053C, 0x056C }, + { 0x053D, 0x056D }, + { 0x053E, 0x056E }, + { 0x053F, 0x056F }, + { 0x0540, 0x0570 }, + { 0x0541, 0x0571 }, + { 0x0542, 0x0572 }, + { 0x0543, 0x0573 }, + { 0x0544, 0x0574 }, + { 0x0545, 0x0575 }, + { 0x0546, 0x0576 }, + { 0x0547, 0x0577 }, + { 0x0548, 0x0578 }, + { 0x0549, 0x0579 }, + { 0x054A, 0x057A }, + { 0x054B, 0x057B }, + { 0x054C, 0x057C }, + { 0x054D, 0x057D }, + { 0x054E, 0x057E }, + { 0x054F, 0x057F }, + { 0x0550, 0x0580 }, + { 0x0551, 0x0581 }, + { 0x0552, 0x0582 }, + { 0x0553, 0x0583 }, + { 0x0554, 0x0584 }, + { 0x0555, 0x0585 }, + { 0x0556, 0x0586 }, + { 0x10A0, 0x2D00 }, + { 0x10A1, 0x2D01 }, + { 0x10A2, 0x2D02 }, + { 0x10A3, 0x2D03 }, + { 0x10A4, 0x2D04 }, + { 0x10A5, 0x2D05 }, + { 0x10A6, 0x2D06 }, + { 0x10A7, 0x2D07 }, + { 0x10A8, 0x2D08 }, + { 0x10A9, 0x2D09 }, + { 0x10AA, 0x2D0A }, + { 0x10AB, 0x2D0B }, + { 0x10AC, 0x2D0C }, + { 0x10AD, 0x2D0D }, + { 0x10AE, 0x2D0E }, + { 0x10AF, 0x2D0F }, + { 0x10B0, 0x2D10 }, + { 0x10B1, 0x2D11 }, + { 0x10B2, 0x2D12 }, + { 0x10B3, 0x2D13 }, + { 0x10B4, 0x2D14 }, + { 0x10B5, 0x2D15 }, + { 0x10B6, 0x2D16 }, + { 0x10B7, 0x2D17 }, + { 0x10B8, 0x2D18 }, + { 0x10B9, 0x2D19 }, + { 0x10BA, 0x2D1A }, + { 0x10BB, 0x2D1B }, + { 0x10BC, 0x2D1C }, + { 0x10BD, 0x2D1D }, + { 0x10BE, 0x2D1E }, + { 0x10BF, 0x2D1F }, + { 0x10C0, 0x2D20 }, + { 0x10C1, 0x2D21 }, + { 0x10C2, 0x2D22 }, + { 0x10C3, 0x2D23 }, + { 0x10C4, 0x2D24 }, + { 0x10C5, 0x2D25 }, + { 0x1E00, 0x1E01 }, + { 0x1E02, 0x1E03 }, + { 0x1E04, 0x1E05 }, + { 0x1E06, 0x1E07 }, + { 0x1E08, 0x1E09 }, + { 0x1E0A, 0x1E0B }, + { 0x1E0C, 0x1E0D }, + { 0x1E0E, 0x1E0F }, + { 0x1E10, 0x1E11 }, + { 0x1E12, 0x1E13 }, + { 0x1E14, 0x1E15 }, + { 0x1E16, 0x1E17 }, + { 0x1E18, 0x1E19 }, + { 0x1E1A, 0x1E1B }, + { 0x1E1C, 0x1E1D }, + { 0x1E1E, 0x1E1F }, + { 0x1E20, 0x1E21 }, + { 0x1E22, 0x1E23 }, + { 0x1E24, 0x1E25 }, + { 0x1E26, 0x1E27 }, + { 0x1E28, 0x1E29 }, + { 0x1E2A, 0x1E2B }, + { 0x1E2C, 0x1E2D }, + { 0x1E2E, 0x1E2F }, + { 0x1E30, 0x1E31 }, + { 0x1E32, 0x1E33 }, + { 0x1E34, 0x1E35 }, + { 0x1E36, 0x1E37 }, + { 0x1E38, 0x1E39 }, + { 0x1E3A, 0x1E3B }, + { 0x1E3C, 0x1E3D }, + { 0x1E3E, 0x1E3F }, + { 0x1E40, 0x1E41 }, + { 0x1E42, 0x1E43 }, + { 0x1E44, 0x1E45 }, + { 0x1E46, 0x1E47 }, + { 0x1E48, 0x1E49 }, + { 0x1E4A, 0x1E4B }, + { 0x1E4C, 0x1E4D }, + { 0x1E4E, 0x1E4F }, + { 0x1E50, 0x1E51 }, + { 0x1E52, 0x1E53 }, + { 0x1E54, 0x1E55 }, + { 0x1E56, 0x1E57 }, + { 0x1E58, 0x1E59 }, + { 0x1E5A, 0x1E5B }, + { 0x1E5C, 0x1E5D }, + { 0x1E5E, 0x1E5F }, + { 0x1E60, 0x1E61 }, + { 0x1E62, 0x1E63 }, + { 0x1E64, 0x1E65 }, + { 0x1E66, 0x1E67 }, + { 0x1E68, 0x1E69 }, + { 0x1E6A, 0x1E6B }, + { 0x1E6C, 0x1E6D }, + { 0x1E6E, 0x1E6F }, + { 0x1E70, 0x1E71 }, + { 0x1E72, 0x1E73 }, + { 0x1E74, 0x1E75 }, + { 0x1E76, 0x1E77 }, + { 0x1E78, 0x1E79 }, + { 0x1E7A, 0x1E7B }, + { 0x1E7C, 0x1E7D }, + { 0x1E7E, 0x1E7F }, + { 0x1E80, 0x1E81 }, + { 0x1E82, 0x1E83 }, + { 0x1E84, 0x1E85 }, + { 0x1E86, 0x1E87 }, + { 0x1E88, 0x1E89 }, + { 0x1E8A, 0x1E8B }, + { 0x1E8C, 0x1E8D }, + { 0x1E8E, 0x1E8F }, + { 0x1E90, 0x1E91 }, + { 0x1E92, 0x1E93 }, + { 0x1E94, 0x1E95 }, + { 0x1E9E, 0x00DF }, + { 0x1EA0, 0x1EA1 }, + { 0x1EA2, 0x1EA3 }, + { 0x1EA4, 0x1EA5 }, + { 0x1EA6, 0x1EA7 }, + { 0x1EA8, 0x1EA9 }, + { 0x1EAA, 0x1EAB }, + { 0x1EAC, 0x1EAD }, + { 0x1EAE, 0x1EAF }, + { 0x1EB0, 0x1EB1 }, + { 0x1EB2, 0x1EB3 }, + { 0x1EB4, 0x1EB5 }, + { 0x1EB6, 0x1EB7 }, + { 0x1EB8, 0x1EB9 }, + { 0x1EBA, 0x1EBB }, + { 0x1EBC, 0x1EBD }, + { 0x1EBE, 0x1EBF }, + { 0x1EC0, 0x1EC1 }, + { 0x1EC2, 0x1EC3 }, + { 0x1EC4, 0x1EC5 }, + { 0x1EC6, 0x1EC7 }, + { 0x1EC8, 0x1EC9 }, + { 0x1ECA, 0x1ECB }, + { 0x1ECC, 0x1ECD }, + { 0x1ECE, 0x1ECF }, + { 0x1ED0, 0x1ED1 }, + { 0x1ED2, 0x1ED3 }, + { 0x1ED4, 0x1ED5 }, + { 0x1ED6, 0x1ED7 }, + { 0x1ED8, 0x1ED9 }, + { 0x1EDA, 0x1EDB }, + { 0x1EDC, 0x1EDD }, + { 0x1EDE, 0x1EDF }, + { 0x1EE0, 0x1EE1 }, + { 0x1EE2, 0x1EE3 }, + { 0x1EE4, 0x1EE5 }, + { 0x1EE6, 0x1EE7 }, + { 0x1EE8, 0x1EE9 }, + { 0x1EEA, 0x1EEB }, + { 0x1EEC, 0x1EED }, + { 0x1EEE, 0x1EEF }, + { 0x1EF0, 0x1EF1 }, + { 0x1EF2, 0x1EF3 }, + { 0x1EF4, 0x1EF5 }, + { 0x1EF6, 0x1EF7 }, + { 0x1EF8, 0x1EF9 }, + { 0x1EFA, 0x1EFB }, + { 0x1EFC, 0x1EFD }, + { 0x1EFE, 0x1EFF }, + { 0x1F08, 0x1F00 }, + { 0x1F09, 0x1F01 }, + { 0x1F0A, 0x1F02 }, + { 0x1F0B, 0x1F03 }, + { 0x1F0C, 0x1F04 }, + { 0x1F0D, 0x1F05 }, + { 0x1F0E, 0x1F06 }, + { 0x1F0F, 0x1F07 }, + { 0x1F18, 0x1F10 }, + { 0x1F19, 0x1F11 }, + { 0x1F1A, 0x1F12 }, + { 0x1F1B, 0x1F13 }, + { 0x1F1C, 0x1F14 }, + { 0x1F1D, 0x1F15 }, + { 0x1F28, 0x1F20 }, + { 0x1F29, 0x1F21 }, + { 0x1F2A, 0x1F22 }, + { 0x1F2B, 0x1F23 }, + { 0x1F2C, 0x1F24 }, + { 0x1F2D, 0x1F25 }, + { 0x1F2E, 0x1F26 }, + { 0x1F2F, 0x1F27 }, + { 0x1F38, 0x1F30 }, + { 0x1F39, 0x1F31 }, + { 0x1F3A, 0x1F32 }, + { 0x1F3B, 0x1F33 }, + { 0x1F3C, 0x1F34 }, + { 0x1F3D, 0x1F35 }, + { 0x1F3E, 0x1F36 }, + { 0x1F3F, 0x1F37 }, + { 0x1F48, 0x1F40 }, + { 0x1F49, 0x1F41 }, + { 0x1F4A, 0x1F42 }, + { 0x1F4B, 0x1F43 }, + { 0x1F4C, 0x1F44 }, + { 0x1F4D, 0x1F45 }, + { 0x1F59, 0x1F51 }, + { 0x1F5B, 0x1F53 }, + { 0x1F5D, 0x1F55 }, + { 0x1F5F, 0x1F57 }, + { 0x1F68, 0x1F60 }, + { 0x1F69, 0x1F61 }, + { 0x1F6A, 0x1F62 }, + { 0x1F6B, 0x1F63 }, + { 0x1F6C, 0x1F64 }, + { 0x1F6D, 0x1F65 }, + { 0x1F6E, 0x1F66 }, + { 0x1F6F, 0x1F67 }, + { 0x1F88, 0x1F80 }, + { 0x1F89, 0x1F81 }, + { 0x1F8A, 0x1F82 }, + { 0x1F8B, 0x1F83 }, + { 0x1F8C, 0x1F84 }, + { 0x1F8D, 0x1F85 }, + { 0x1F8E, 0x1F86 }, + { 0x1F8F, 0x1F87 }, + { 0x1F98, 0x1F90 }, + { 0x1F99, 0x1F91 }, + { 0x1F9A, 0x1F92 }, + { 0x1F9B, 0x1F93 }, + { 0x1F9C, 0x1F94 }, + { 0x1F9D, 0x1F95 }, + { 0x1F9E, 0x1F96 }, + { 0x1F9F, 0x1F97 }, + { 0x1FA8, 0x1FA0 }, + { 0x1FA9, 0x1FA1 }, + { 0x1FAA, 0x1FA2 }, + { 0x1FAB, 0x1FA3 }, + { 0x1FAC, 0x1FA4 }, + { 0x1FAD, 0x1FA5 }, + { 0x1FAE, 0x1FA6 }, + { 0x1FAF, 0x1FA7 }, + { 0x1FB8, 0x1FB0 }, + { 0x1FB9, 0x1FB1 }, + { 0x1FBA, 0x1F70 }, + { 0x1FBB, 0x1F71 }, + { 0x1FBC, 0x1FB3 }, + { 0x1FC8, 0x1F72 }, + { 0x1FC9, 0x1F73 }, + { 0x1FCA, 0x1F74 }, + { 0x1FCB, 0x1F75 }, + { 0x1FCC, 0x1FC3 }, + { 0x1FD8, 0x1FD0 }, + { 0x1FD9, 0x1FD1 }, + { 0x1FDA, 0x1F76 }, + { 0x1FDB, 0x1F77 }, + { 0x1FE8, 0x1FE0 }, + { 0x1FE9, 0x1FE1 }, + { 0x1FEA, 0x1F7A }, + { 0x1FEB, 0x1F7B }, + { 0x1FEC, 0x1FE5 }, + { 0x1FF8, 0x1F78 }, + { 0x1FF9, 0x1F79 }, + { 0x1FFA, 0x1F7C }, + { 0x1FFB, 0x1F7D }, + { 0x1FFC, 0x1FF3 }, + { 0x2126, 0x03C9 }, + { 0x212A, 0x006B }, + { 0x212B, 0x00E5 }, + { 0x2132, 0x214E }, + { 0x2160, 0x2170 }, + { 0x2161, 0x2171 }, + { 0x2162, 0x2172 }, + { 0x2163, 0x2173 }, + { 0x2164, 0x2174 }, + { 0x2165, 0x2175 }, + { 0x2166, 0x2176 }, + { 0x2167, 0x2177 }, + { 0x2168, 0x2178 }, + { 0x2169, 0x2179 }, + { 0x216A, 0x217A }, + { 0x216B, 0x217B }, + { 0x216C, 0x217C }, + { 0x216D, 0x217D }, + { 0x216E, 0x217E }, + { 0x216F, 0x217F }, + { 0x2183, 0x2184 }, + { 0x24B6, 0x24D0 }, + { 0x24B7, 0x24D1 }, + { 0x24B8, 0x24D2 }, + { 0x24B9, 0x24D3 }, + { 0x24BA, 0x24D4 }, + { 0x24BB, 0x24D5 }, + { 0x24BC, 0x24D6 }, + { 0x24BD, 0x24D7 }, + { 0x24BE, 0x24D8 }, + { 0x24BF, 0x24D9 }, + { 0x24C0, 0x24DA }, + { 0x24C1, 0x24DB }, + { 0x24C2, 0x24DC }, + { 0x24C3, 0x24DD }, + { 0x24C4, 0x24DE }, + { 0x24C5, 0x24DF }, + { 0x24C6, 0x24E0 }, + { 0x24C7, 0x24E1 }, + { 0x24C8, 0x24E2 }, + { 0x24C9, 0x24E3 }, + { 0x24CA, 0x24E4 }, + { 0x24CB, 0x24E5 }, + { 0x24CC, 0x24E6 }, + { 0x24CD, 0x24E7 }, + { 0x24CE, 0x24E8 }, + { 0x24CF, 0x24E9 }, + { 0x2C00, 0x2C30 }, + { 0x2C01, 0x2C31 }, + { 0x2C02, 0x2C32 }, + { 0x2C03, 0x2C33 }, + { 0x2C04, 0x2C34 }, + { 0x2C05, 0x2C35 }, + { 0x2C06, 0x2C36 }, + { 0x2C07, 0x2C37 }, + { 0x2C08, 0x2C38 }, + { 0x2C09, 0x2C39 }, + { 0x2C0A, 0x2C3A }, + { 0x2C0B, 0x2C3B }, + { 0x2C0C, 0x2C3C }, + { 0x2C0D, 0x2C3D }, + { 0x2C0E, 0x2C3E }, + { 0x2C0F, 0x2C3F }, + { 0x2C10, 0x2C40 }, + { 0x2C11, 0x2C41 }, + { 0x2C12, 0x2C42 }, + { 0x2C13, 0x2C43 }, + { 0x2C14, 0x2C44 }, + { 0x2C15, 0x2C45 }, + { 0x2C16, 0x2C46 }, + { 0x2C17, 0x2C47 }, + { 0x2C18, 0x2C48 }, + { 0x2C19, 0x2C49 }, + { 0x2C1A, 0x2C4A }, + { 0x2C1B, 0x2C4B }, + { 0x2C1C, 0x2C4C }, + { 0x2C1D, 0x2C4D }, + { 0x2C1E, 0x2C4E }, + { 0x2C1F, 0x2C4F }, + { 0x2C20, 0x2C50 }, + { 0x2C21, 0x2C51 }, + { 0x2C22, 0x2C52 }, + { 0x2C23, 0x2C53 }, + { 0x2C24, 0x2C54 }, + { 0x2C25, 0x2C55 }, + { 0x2C26, 0x2C56 }, + { 0x2C27, 0x2C57 }, + { 0x2C28, 0x2C58 }, + { 0x2C29, 0x2C59 }, + { 0x2C2A, 0x2C5A }, + { 0x2C2B, 0x2C5B }, + { 0x2C2C, 0x2C5C }, + { 0x2C2D, 0x2C5D }, + { 0x2C2E, 0x2C5E }, + { 0x2C60, 0x2C61 }, + { 0x2C62, 0x026B }, + { 0x2C63, 0x1D7D }, + { 0x2C64, 0x027D }, + { 0x2C67, 0x2C68 }, + { 0x2C69, 0x2C6A }, + { 0x2C6B, 0x2C6C }, + { 0x2C6D, 0x0251 }, + { 0x2C6E, 0x0271 }, + { 0x2C6F, 0x0250 }, + { 0x2C72, 0x2C73 }, + { 0x2C75, 0x2C76 }, + { 0x2C80, 0x2C81 }, + { 0x2C82, 0x2C83 }, + { 0x2C84, 0x2C85 }, + { 0x2C86, 0x2C87 }, + { 0x2C88, 0x2C89 }, + { 0x2C8A, 0x2C8B }, + { 0x2C8C, 0x2C8D }, + { 0x2C8E, 0x2C8F }, + { 0x2C90, 0x2C91 }, + { 0x2C92, 0x2C93 }, + { 0x2C94, 0x2C95 }, + { 0x2C96, 0x2C97 }, + { 0x2C98, 0x2C99 }, + { 0x2C9A, 0x2C9B }, + { 0x2C9C, 0x2C9D }, + { 0x2C9E, 0x2C9F }, + { 0x2CA0, 0x2CA1 }, + { 0x2CA2, 0x2CA3 }, + { 0x2CA4, 0x2CA5 }, + { 0x2CA6, 0x2CA7 }, + { 0x2CA8, 0x2CA9 }, + { 0x2CAA, 0x2CAB }, + { 0x2CAC, 0x2CAD }, + { 0x2CAE, 0x2CAF }, + { 0x2CB0, 0x2CB1 }, + { 0x2CB2, 0x2CB3 }, + { 0x2CB4, 0x2CB5 }, + { 0x2CB6, 0x2CB7 }, + { 0x2CB8, 0x2CB9 }, + { 0x2CBA, 0x2CBB }, + { 0x2CBC, 0x2CBD }, + { 0x2CBE, 0x2CBF }, + { 0x2CC0, 0x2CC1 }, + { 0x2CC2, 0x2CC3 }, + { 0x2CC4, 0x2CC5 }, + { 0x2CC6, 0x2CC7 }, + { 0x2CC8, 0x2CC9 }, + { 0x2CCA, 0x2CCB }, + { 0x2CCC, 0x2CCD }, + { 0x2CCE, 0x2CCF }, + { 0x2CD0, 0x2CD1 }, + { 0x2CD2, 0x2CD3 }, + { 0x2CD4, 0x2CD5 }, + { 0x2CD6, 0x2CD7 }, + { 0x2CD8, 0x2CD9 }, + { 0x2CDA, 0x2CDB }, + { 0x2CDC, 0x2CDD }, + { 0x2CDE, 0x2CDF }, + { 0x2CE0, 0x2CE1 }, + { 0x2CE2, 0x2CE3 }, + { 0xA640, 0xA641 }, + { 0xA642, 0xA643 }, + { 0xA644, 0xA645 }, + { 0xA646, 0xA647 }, + { 0xA648, 0xA649 }, + { 0xA64A, 0xA64B }, + { 0xA64C, 0xA64D }, + { 0xA64E, 0xA64F }, + { 0xA650, 0xA651 }, + { 0xA652, 0xA653 }, + { 0xA654, 0xA655 }, + { 0xA656, 0xA657 }, + { 0xA658, 0xA659 }, + { 0xA65A, 0xA65B }, + { 0xA65C, 0xA65D }, + { 0xA65E, 0xA65F }, + { 0xA662, 0xA663 }, + { 0xA664, 0xA665 }, + { 0xA666, 0xA667 }, + { 0xA668, 0xA669 }, + { 0xA66A, 0xA66B }, + { 0xA66C, 0xA66D }, + { 0xA680, 0xA681 }, + { 0xA682, 0xA683 }, + { 0xA684, 0xA685 }, + { 0xA686, 0xA687 }, + { 0xA688, 0xA689 }, + { 0xA68A, 0xA68B }, + { 0xA68C, 0xA68D }, + { 0xA68E, 0xA68F }, + { 0xA690, 0xA691 }, + { 0xA692, 0xA693 }, + { 0xA694, 0xA695 }, + { 0xA696, 0xA697 }, + { 0xA722, 0xA723 }, + { 0xA724, 0xA725 }, + { 0xA726, 0xA727 }, + { 0xA728, 0xA729 }, + { 0xA72A, 0xA72B }, + { 0xA72C, 0xA72D }, + { 0xA72E, 0xA72F }, + { 0xA732, 0xA733 }, + { 0xA734, 0xA735 }, + { 0xA736, 0xA737 }, + { 0xA738, 0xA739 }, + { 0xA73A, 0xA73B }, + { 0xA73C, 0xA73D }, + { 0xA73E, 0xA73F }, + { 0xA740, 0xA741 }, + { 0xA742, 0xA743 }, + { 0xA744, 0xA745 }, + { 0xA746, 0xA747 }, + { 0xA748, 0xA749 }, + { 0xA74A, 0xA74B }, + { 0xA74C, 0xA74D }, + { 0xA74E, 0xA74F }, + { 0xA750, 0xA751 }, + { 0xA752, 0xA753 }, + { 0xA754, 0xA755 }, + { 0xA756, 0xA757 }, + { 0xA758, 0xA759 }, + { 0xA75A, 0xA75B }, + { 0xA75C, 0xA75D }, + { 0xA75E, 0xA75F }, + { 0xA760, 0xA761 }, + { 0xA762, 0xA763 }, + { 0xA764, 0xA765 }, + { 0xA766, 0xA767 }, + { 0xA768, 0xA769 }, + { 0xA76A, 0xA76B }, + { 0xA76C, 0xA76D }, + { 0xA76E, 0xA76F }, + { 0xA779, 0xA77A }, + { 0xA77B, 0xA77C }, + { 0xA77D, 0x1D79 }, + { 0xA77E, 0xA77F }, + { 0xA780, 0xA781 }, + { 0xA782, 0xA783 }, + { 0xA784, 0xA785 }, + { 0xA786, 0xA787 }, + { 0xA78B, 0xA78C }, + { 0xFF21, 0xFF41 }, + { 0xFF22, 0xFF42 }, + { 0xFF23, 0xFF43 }, + { 0xFF24, 0xFF44 }, + { 0xFF25, 0xFF45 }, + { 0xFF26, 0xFF46 }, + { 0xFF27, 0xFF47 }, + { 0xFF28, 0xFF48 }, + { 0xFF29, 0xFF49 }, + { 0xFF2A, 0xFF4A }, + { 0xFF2B, 0xFF4B }, + { 0xFF2C, 0xFF4C }, + { 0xFF2D, 0xFF4D }, + { 0xFF2E, 0xFF4E }, + { 0xFF2F, 0xFF4F }, + { 0xFF30, 0xFF50 }, + { 0xFF31, 0xFF51 }, + { 0xFF32, 0xFF52 }, + { 0xFF33, 0xFF53 }, + { 0xFF34, 0xFF54 }, + { 0xFF35, 0xFF55 }, + { 0xFF36, 0xFF56 }, + { 0xFF37, 0xFF57 }, + { 0xFF38, 0xFF58 }, + { 0xFF39, 0xFF59 }, + { 0xFF3A, 0xFF5A }, + { 0x10400, 0x10428 }, + { 0x10401, 0x10429 }, + { 0x10402, 0x1042A }, + { 0x10403, 0x1042B }, + { 0x10404, 0x1042C }, + { 0x10405, 0x1042D }, + { 0x10406, 0x1042E }, + { 0x10407, 0x1042F }, + { 0x10408, 0x10430 }, + { 0x10409, 0x10431 }, + { 0x1040A, 0x10432 }, + { 0x1040B, 0x10433 }, + { 0x1040C, 0x10434 }, + { 0x1040D, 0x10435 }, + { 0x1040E, 0x10436 }, + { 0x1040F, 0x10437 }, + { 0x10410, 0x10438 }, + { 0x10411, 0x10439 }, + { 0x10412, 0x1043A }, + { 0x10413, 0x1043B }, + { 0x10414, 0x1043C }, + { 0x10415, 0x1043D }, + { 0x10416, 0x1043E }, + { 0x10417, 0x1043F }, + { 0x10418, 0x10440 }, + { 0x10419, 0x10441 }, + { 0x1041A, 0x10442 }, + { 0x1041B, 0x10443 }, + { 0x1041C, 0x10444 }, + { 0x1041D, 0x10445 }, + { 0x1041E, 0x10446 }, + { 0x1041F, 0x10447 }, + { 0x10420, 0x10448 }, + { 0x10421, 0x10449 }, + { 0x10422, 0x1044A }, + { 0x10423, 0x1044B }, + { 0x10424, 0x1044C }, + { 0x10425, 0x1044D }, + { 0x10426, 0x1044E }, + { 0x10427, 0x1044F } + +#define MAP(c) uc_tolower (c) +#include "test-mapping-part2.h" diff --git a/tests/unicase/test-uc_totitle.c b/tests/unicase/test-uc_totitle.c new file mode 100644 index 00000000..9064a41a --- /dev/null +++ b/tests/unicase/test-uc_totitle.c @@ -0,0 +1,1055 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character mapping functions. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Generated automatically by gen-case.c for Unicode 5.1.0. */ + +#include "test-mapping-part1.h" + + { 0x0061, 0x0041 }, + { 0x0062, 0x0042 }, + { 0x0063, 0x0043 }, + { 0x0064, 0x0044 }, + { 0x0065, 0x0045 }, + { 0x0066, 0x0046 }, + { 0x0067, 0x0047 }, + { 0x0068, 0x0048 }, + { 0x0069, 0x0049 }, + { 0x006A, 0x004A }, + { 0x006B, 0x004B }, + { 0x006C, 0x004C }, + { 0x006D, 0x004D }, + { 0x006E, 0x004E }, + { 0x006F, 0x004F }, + { 0x0070, 0x0050 }, + { 0x0071, 0x0051 }, + { 0x0072, 0x0052 }, + { 0x0073, 0x0053 }, + { 0x0074, 0x0054 }, + { 0x0075, 0x0055 }, + { 0x0076, 0x0056 }, + { 0x0077, 0x0057 }, + { 0x0078, 0x0058 }, + { 0x0079, 0x0059 }, + { 0x007A, 0x005A }, + { 0x00B5, 0x039C }, + { 0x00E0, 0x00C0 }, + { 0x00E1, 0x00C1 }, + { 0x00E2, 0x00C2 }, + { 0x00E3, 0x00C3 }, + { 0x00E4, 0x00C4 }, + { 0x00E5, 0x00C5 }, + { 0x00E6, 0x00C6 }, + { 0x00E7, 0x00C7 }, + { 0x00E8, 0x00C8 }, + { 0x00E9, 0x00C9 }, + { 0x00EA, 0x00CA }, + { 0x00EB, 0x00CB }, + { 0x00EC, 0x00CC }, + { 0x00ED, 0x00CD }, + { 0x00EE, 0x00CE }, + { 0x00EF, 0x00CF }, + { 0x00F0, 0x00D0 }, + { 0x00F1, 0x00D1 }, + { 0x00F2, 0x00D2 }, + { 0x00F3, 0x00D3 }, + { 0x00F4, 0x00D4 }, + { 0x00F5, 0x00D5 }, + { 0x00F6, 0x00D6 }, + { 0x00F8, 0x00D8 }, + { 0x00F9, 0x00D9 }, + { 0x00FA, 0x00DA }, + { 0x00FB, 0x00DB }, + { 0x00FC, 0x00DC }, + { 0x00FD, 0x00DD }, + { 0x00FE, 0x00DE }, + { 0x00FF, 0x0178 }, + { 0x0101, 0x0100 }, + { 0x0103, 0x0102 }, + { 0x0105, 0x0104 }, + { 0x0107, 0x0106 }, + { 0x0109, 0x0108 }, + { 0x010B, 0x010A }, + { 0x010D, 0x010C }, + { 0x010F, 0x010E }, + { 0x0111, 0x0110 }, + { 0x0113, 0x0112 }, + { 0x0115, 0x0114 }, + { 0x0117, 0x0116 }, + { 0x0119, 0x0118 }, + { 0x011B, 0x011A }, + { 0x011D, 0x011C }, + { 0x011F, 0x011E }, + { 0x0121, 0x0120 }, + { 0x0123, 0x0122 }, + { 0x0125, 0x0124 }, + { 0x0127, 0x0126 }, + { 0x0129, 0x0128 }, + { 0x012B, 0x012A }, + { 0x012D, 0x012C }, + { 0x012F, 0x012E }, + { 0x0131, 0x0049 }, + { 0x0133, 0x0132 }, + { 0x0135, 0x0134 }, + { 0x0137, 0x0136 }, + { 0x013A, 0x0139 }, + { 0x013C, 0x013B }, + { 0x013E, 0x013D }, + { 0x0140, 0x013F }, + { 0x0142, 0x0141 }, + { 0x0144, 0x0143 }, + { 0x0146, 0x0145 }, + { 0x0148, 0x0147 }, + { 0x014B, 0x014A }, + { 0x014D, 0x014C }, + { 0x014F, 0x014E }, + { 0x0151, 0x0150 }, + { 0x0153, 0x0152 }, + { 0x0155, 0x0154 }, + { 0x0157, 0x0156 }, + { 0x0159, 0x0158 }, + { 0x015B, 0x015A }, + { 0x015D, 0x015C }, + { 0x015F, 0x015E }, + { 0x0161, 0x0160 }, + { 0x0163, 0x0162 }, + { 0x0165, 0x0164 }, + { 0x0167, 0x0166 }, + { 0x0169, 0x0168 }, + { 0x016B, 0x016A }, + { 0x016D, 0x016C }, + { 0x016F, 0x016E }, + { 0x0171, 0x0170 }, + { 0x0173, 0x0172 }, + { 0x0175, 0x0174 }, + { 0x0177, 0x0176 }, + { 0x017A, 0x0179 }, + { 0x017C, 0x017B }, + { 0x017E, 0x017D }, + { 0x017F, 0x0053 }, + { 0x0180, 0x0243 }, + { 0x0183, 0x0182 }, + { 0x0185, 0x0184 }, + { 0x0188, 0x0187 }, + { 0x018C, 0x018B }, + { 0x0192, 0x0191 }, + { 0x0195, 0x01F6 }, + { 0x0199, 0x0198 }, + { 0x019A, 0x023D }, + { 0x019E, 0x0220 }, + { 0x01A1, 0x01A0 }, + { 0x01A3, 0x01A2 }, + { 0x01A5, 0x01A4 }, + { 0x01A8, 0x01A7 }, + { 0x01AD, 0x01AC }, + { 0x01B0, 0x01AF }, + { 0x01B4, 0x01B3 }, + { 0x01B6, 0x01B5 }, + { 0x01B9, 0x01B8 }, + { 0x01BD, 0x01BC }, + { 0x01BF, 0x01F7 }, + { 0x01C4, 0x01C5 }, + { 0x01C6, 0x01C5 }, + { 0x01C7, 0x01C8 }, + { 0x01C9, 0x01C8 }, + { 0x01CA, 0x01CB }, + { 0x01CC, 0x01CB }, + { 0x01CE, 0x01CD }, + { 0x01D0, 0x01CF }, + { 0x01D2, 0x01D1 }, + { 0x01D4, 0x01D3 }, + { 0x01D6, 0x01D5 }, + { 0x01D8, 0x01D7 }, + { 0x01DA, 0x01D9 }, + { 0x01DC, 0x01DB }, + { 0x01DD, 0x018E }, + { 0x01DF, 0x01DE }, + { 0x01E1, 0x01E0 }, + { 0x01E3, 0x01E2 }, + { 0x01E5, 0x01E4 }, + { 0x01E7, 0x01E6 }, + { 0x01E9, 0x01E8 }, + { 0x01EB, 0x01EA }, + { 0x01ED, 0x01EC }, + { 0x01EF, 0x01EE }, + { 0x01F1, 0x01F2 }, + { 0x01F3, 0x01F2 }, + { 0x01F5, 0x01F4 }, + { 0x01F9, 0x01F8 }, + { 0x01FB, 0x01FA }, + { 0x01FD, 0x01FC }, + { 0x01FF, 0x01FE }, + { 0x0201, 0x0200 }, + { 0x0203, 0x0202 }, + { 0x0205, 0x0204 }, + { 0x0207, 0x0206 }, + { 0x0209, 0x0208 }, + { 0x020B, 0x020A }, + { 0x020D, 0x020C }, + { 0x020F, 0x020E }, + { 0x0211, 0x0210 }, + { 0x0213, 0x0212 }, + { 0x0215, 0x0214 }, + { 0x0217, 0x0216 }, + { 0x0219, 0x0218 }, + { 0x021B, 0x021A }, + { 0x021D, 0x021C }, + { 0x021F, 0x021E }, + { 0x0223, 0x0222 }, + { 0x0225, 0x0224 }, + { 0x0227, 0x0226 }, + { 0x0229, 0x0228 }, + { 0x022B, 0x022A }, + { 0x022D, 0x022C }, + { 0x022F, 0x022E }, + { 0x0231, 0x0230 }, + { 0x0233, 0x0232 }, + { 0x023C, 0x023B }, + { 0x0242, 0x0241 }, + { 0x0247, 0x0246 }, + { 0x0249, 0x0248 }, + { 0x024B, 0x024A }, + { 0x024D, 0x024C }, + { 0x024F, 0x024E }, + { 0x0250, 0x2C6F }, + { 0x0251, 0x2C6D }, + { 0x0253, 0x0181 }, + { 0x0254, 0x0186 }, + { 0x0256, 0x0189 }, + { 0x0257, 0x018A }, + { 0x0259, 0x018F }, + { 0x025B, 0x0190 }, + { 0x0260, 0x0193 }, + { 0x0263, 0x0194 }, + { 0x0268, 0x0197 }, + { 0x0269, 0x0196 }, + { 0x026B, 0x2C62 }, + { 0x026F, 0x019C }, + { 0x0271, 0x2C6E }, + { 0x0272, 0x019D }, + { 0x0275, 0x019F }, + { 0x027D, 0x2C64 }, + { 0x0280, 0x01A6 }, + { 0x0283, 0x01A9 }, + { 0x0288, 0x01AE }, + { 0x0289, 0x0244 }, + { 0x028A, 0x01B1 }, + { 0x028B, 0x01B2 }, + { 0x028C, 0x0245 }, + { 0x0292, 0x01B7 }, + { 0x0345, 0x0399 }, + { 0x0371, 0x0370 }, + { 0x0373, 0x0372 }, + { 0x0377, 0x0376 }, + { 0x037B, 0x03FD }, + { 0x037C, 0x03FE }, + { 0x037D, 0x03FF }, + { 0x03AC, 0x0386 }, + { 0x03AD, 0x0388 }, + { 0x03AE, 0x0389 }, + { 0x03AF, 0x038A }, + { 0x03B1, 0x0391 }, + { 0x03B2, 0x0392 }, + { 0x03B3, 0x0393 }, + { 0x03B4, 0x0394 }, + { 0x03B5, 0x0395 }, + { 0x03B6, 0x0396 }, + { 0x03B7, 0x0397 }, + { 0x03B8, 0x0398 }, + { 0x03B9, 0x0399 }, + { 0x03BA, 0x039A }, + { 0x03BB, 0x039B }, + { 0x03BC, 0x039C }, + { 0x03BD, 0x039D }, + { 0x03BE, 0x039E }, + { 0x03BF, 0x039F }, + { 0x03C0, 0x03A0 }, + { 0x03C1, 0x03A1 }, + { 0x03C2, 0x03A3 }, + { 0x03C3, 0x03A3 }, + { 0x03C4, 0x03A4 }, + { 0x03C5, 0x03A5 }, + { 0x03C6, 0x03A6 }, + { 0x03C7, 0x03A7 }, + { 0x03C8, 0x03A8 }, + { 0x03C9, 0x03A9 }, + { 0x03CA, 0x03AA }, + { 0x03CB, 0x03AB }, + { 0x03CC, 0x038C }, + { 0x03CD, 0x038E }, + { 0x03CE, 0x038F }, + { 0x03D0, 0x0392 }, + { 0x03D1, 0x0398 }, + { 0x03D5, 0x03A6 }, + { 0x03D6, 0x03A0 }, + { 0x03D7, 0x03CF }, + { 0x03D9, 0x03D8 }, + { 0x03DB, 0x03DA }, + { 0x03DD, 0x03DC }, + { 0x03DF, 0x03DE }, + { 0x03E1, 0x03E0 }, + { 0x03E3, 0x03E2 }, + { 0x03E5, 0x03E4 }, + { 0x03E7, 0x03E6 }, + { 0x03E9, 0x03E8 }, + { 0x03EB, 0x03EA }, + { 0x03ED, 0x03EC }, + { 0x03EF, 0x03EE }, + { 0x03F0, 0x039A }, + { 0x03F1, 0x03A1 }, + { 0x03F2, 0x03F9 }, + { 0x03F5, 0x0395 }, + { 0x03F8, 0x03F7 }, + { 0x03FB, 0x03FA }, + { 0x0430, 0x0410 }, + { 0x0431, 0x0411 }, + { 0x0432, 0x0412 }, + { 0x0433, 0x0413 }, + { 0x0434, 0x0414 }, + { 0x0435, 0x0415 }, + { 0x0436, 0x0416 }, + { 0x0437, 0x0417 }, + { 0x0438, 0x0418 }, + { 0x0439, 0x0419 }, + { 0x043A, 0x041A }, + { 0x043B, 0x041B }, + { 0x043C, 0x041C }, + { 0x043D, 0x041D }, + { 0x043E, 0x041E }, + { 0x043F, 0x041F }, + { 0x0440, 0x0420 }, + { 0x0441, 0x0421 }, + { 0x0442, 0x0422 }, + { 0x0443, 0x0423 }, + { 0x0444, 0x0424 }, + { 0x0445, 0x0425 }, + { 0x0446, 0x0426 }, + { 0x0447, 0x0427 }, + { 0x0448, 0x0428 }, + { 0x0449, 0x0429 }, + { 0x044A, 0x042A }, + { 0x044B, 0x042B }, + { 0x044C, 0x042C }, + { 0x044D, 0x042D }, + { 0x044E, 0x042E }, + { 0x044F, 0x042F }, + { 0x0450, 0x0400 }, + { 0x0451, 0x0401 }, + { 0x0452, 0x0402 }, + { 0x0453, 0x0403 }, + { 0x0454, 0x0404 }, + { 0x0455, 0x0405 }, + { 0x0456, 0x0406 }, + { 0x0457, 0x0407 }, + { 0x0458, 0x0408 }, + { 0x0459, 0x0409 }, + { 0x045A, 0x040A }, + { 0x045B, 0x040B }, + { 0x045C, 0x040C }, + { 0x045D, 0x040D }, + { 0x045E, 0x040E }, + { 0x045F, 0x040F }, + { 0x0461, 0x0460 }, + { 0x0463, 0x0462 }, + { 0x0465, 0x0464 }, + { 0x0467, 0x0466 }, + { 0x0469, 0x0468 }, + { 0x046B, 0x046A }, + { 0x046D, 0x046C }, + { 0x046F, 0x046E }, + { 0x0471, 0x0470 }, + { 0x0473, 0x0472 }, + { 0x0475, 0x0474 }, + { 0x0477, 0x0476 }, + { 0x0479, 0x0478 }, + { 0x047B, 0x047A }, + { 0x047D, 0x047C }, + { 0x047F, 0x047E }, + { 0x0481, 0x0480 }, + { 0x048B, 0x048A }, + { 0x048D, 0x048C }, + { 0x048F, 0x048E }, + { 0x0491, 0x0490 }, + { 0x0493, 0x0492 }, + { 0x0495, 0x0494 }, + { 0x0497, 0x0496 }, + { 0x0499, 0x0498 }, + { 0x049B, 0x049A }, + { 0x049D, 0x049C }, + { 0x049F, 0x049E }, + { 0x04A1, 0x04A0 }, + { 0x04A3, 0x04A2 }, + { 0x04A5, 0x04A4 }, + { 0x04A7, 0x04A6 }, + { 0x04A9, 0x04A8 }, + { 0x04AB, 0x04AA }, + { 0x04AD, 0x04AC }, + { 0x04AF, 0x04AE }, + { 0x04B1, 0x04B0 }, + { 0x04B3, 0x04B2 }, + { 0x04B5, 0x04B4 }, + { 0x04B7, 0x04B6 }, + { 0x04B9, 0x04B8 }, + { 0x04BB, 0x04BA }, + { 0x04BD, 0x04BC }, + { 0x04BF, 0x04BE }, + { 0x04C2, 0x04C1 }, + { 0x04C4, 0x04C3 }, + { 0x04C6, 0x04C5 }, + { 0x04C8, 0x04C7 }, + { 0x04CA, 0x04C9 }, + { 0x04CC, 0x04CB }, + { 0x04CE, 0x04CD }, + { 0x04CF, 0x04C0 }, + { 0x04D1, 0x04D0 }, + { 0x04D3, 0x04D2 }, + { 0x04D5, 0x04D4 }, + { 0x04D7, 0x04D6 }, + { 0x04D9, 0x04D8 }, + { 0x04DB, 0x04DA }, + { 0x04DD, 0x04DC }, + { 0x04DF, 0x04DE }, + { 0x04E1, 0x04E0 }, + { 0x04E3, 0x04E2 }, + { 0x04E5, 0x04E4 }, + { 0x04E7, 0x04E6 }, + { 0x04E9, 0x04E8 }, + { 0x04EB, 0x04EA }, + { 0x04ED, 0x04EC }, + { 0x04EF, 0x04EE }, + { 0x04F1, 0x04F0 }, + { 0x04F3, 0x04F2 }, + { 0x04F5, 0x04F4 }, + { 0x04F7, 0x04F6 }, + { 0x04F9, 0x04F8 }, + { 0x04FB, 0x04FA }, + { 0x04FD, 0x04FC }, + { 0x04FF, 0x04FE }, + { 0x0501, 0x0500 }, + { 0x0503, 0x0502 }, + { 0x0505, 0x0504 }, + { 0x0507, 0x0506 }, + { 0x0509, 0x0508 }, + { 0x050B, 0x050A }, + { 0x050D, 0x050C }, + { 0x050F, 0x050E }, + { 0x0511, 0x0510 }, + { 0x0513, 0x0512 }, + { 0x0515, 0x0514 }, + { 0x0517, 0x0516 }, + { 0x0519, 0x0518 }, + { 0x051B, 0x051A }, + { 0x051D, 0x051C }, + { 0x051F, 0x051E }, + { 0x0521, 0x0520 }, + { 0x0523, 0x0522 }, + { 0x0561, 0x0531 }, + { 0x0562, 0x0532 }, + { 0x0563, 0x0533 }, + { 0x0564, 0x0534 }, + { 0x0565, 0x0535 }, + { 0x0566, 0x0536 }, + { 0x0567, 0x0537 }, + { 0x0568, 0x0538 }, + { 0x0569, 0x0539 }, + { 0x056A, 0x053A }, + { 0x056B, 0x053B }, + { 0x056C, 0x053C }, + { 0x056D, 0x053D }, + { 0x056E, 0x053E }, + { 0x056F, 0x053F }, + { 0x0570, 0x0540 }, + { 0x0571, 0x0541 }, + { 0x0572, 0x0542 }, + { 0x0573, 0x0543 }, + { 0x0574, 0x0544 }, + { 0x0575, 0x0545 }, + { 0x0576, 0x0546 }, + { 0x0577, 0x0547 }, + { 0x0578, 0x0548 }, + { 0x0579, 0x0549 }, + { 0x057A, 0x054A }, + { 0x057B, 0x054B }, + { 0x057C, 0x054C }, + { 0x057D, 0x054D }, + { 0x057E, 0x054E }, + { 0x057F, 0x054F }, + { 0x0580, 0x0550 }, + { 0x0581, 0x0551 }, + { 0x0582, 0x0552 }, + { 0x0583, 0x0553 }, + { 0x0584, 0x0554 }, + { 0x0585, 0x0555 }, + { 0x0586, 0x0556 }, + { 0x1D79, 0xA77D }, + { 0x1D7D, 0x2C63 }, + { 0x1E01, 0x1E00 }, + { 0x1E03, 0x1E02 }, + { 0x1E05, 0x1E04 }, + { 0x1E07, 0x1E06 }, + { 0x1E09, 0x1E08 }, + { 0x1E0B, 0x1E0A }, + { 0x1E0D, 0x1E0C }, + { 0x1E0F, 0x1E0E }, + { 0x1E11, 0x1E10 }, + { 0x1E13, 0x1E12 }, + { 0x1E15, 0x1E14 }, + { 0x1E17, 0x1E16 }, + { 0x1E19, 0x1E18 }, + { 0x1E1B, 0x1E1A }, + { 0x1E1D, 0x1E1C }, + { 0x1E1F, 0x1E1E }, + { 0x1E21, 0x1E20 }, + { 0x1E23, 0x1E22 }, + { 0x1E25, 0x1E24 }, + { 0x1E27, 0x1E26 }, + { 0x1E29, 0x1E28 }, + { 0x1E2B, 0x1E2A }, + { 0x1E2D, 0x1E2C }, + { 0x1E2F, 0x1E2E }, + { 0x1E31, 0x1E30 }, + { 0x1E33, 0x1E32 }, + { 0x1E35, 0x1E34 }, + { 0x1E37, 0x1E36 }, + { 0x1E39, 0x1E38 }, + { 0x1E3B, 0x1E3A }, + { 0x1E3D, 0x1E3C }, + { 0x1E3F, 0x1E3E }, + { 0x1E41, 0x1E40 }, + { 0x1E43, 0x1E42 }, + { 0x1E45, 0x1E44 }, + { 0x1E47, 0x1E46 }, + { 0x1E49, 0x1E48 }, + { 0x1E4B, 0x1E4A }, + { 0x1E4D, 0x1E4C }, + { 0x1E4F, 0x1E4E }, + { 0x1E51, 0x1E50 }, + { 0x1E53, 0x1E52 }, + { 0x1E55, 0x1E54 }, + { 0x1E57, 0x1E56 }, + { 0x1E59, 0x1E58 }, + { 0x1E5B, 0x1E5A }, + { 0x1E5D, 0x1E5C }, + { 0x1E5F, 0x1E5E }, + { 0x1E61, 0x1E60 }, + { 0x1E63, 0x1E62 }, + { 0x1E65, 0x1E64 }, + { 0x1E67, 0x1E66 }, + { 0x1E69, 0x1E68 }, + { 0x1E6B, 0x1E6A }, + { 0x1E6D, 0x1E6C }, + { 0x1E6F, 0x1E6E }, + { 0x1E71, 0x1E70 }, + { 0x1E73, 0x1E72 }, + { 0x1E75, 0x1E74 }, + { 0x1E77, 0x1E76 }, + { 0x1E79, 0x1E78 }, + { 0x1E7B, 0x1E7A }, + { 0x1E7D, 0x1E7C }, + { 0x1E7F, 0x1E7E }, + { 0x1E81, 0x1E80 }, + { 0x1E83, 0x1E82 }, + { 0x1E85, 0x1E84 }, + { 0x1E87, 0x1E86 }, + { 0x1E89, 0x1E88 }, + { 0x1E8B, 0x1E8A }, + { 0x1E8D, 0x1E8C }, + { 0x1E8F, 0x1E8E }, + { 0x1E91, 0x1E90 }, + { 0x1E93, 0x1E92 }, + { 0x1E95, 0x1E94 }, + { 0x1E9B, 0x1E60 }, + { 0x1EA1, 0x1EA0 }, + { 0x1EA3, 0x1EA2 }, + { 0x1EA5, 0x1EA4 }, + { 0x1EA7, 0x1EA6 }, + { 0x1EA9, 0x1EA8 }, + { 0x1EAB, 0x1EAA }, + { 0x1EAD, 0x1EAC }, + { 0x1EAF, 0x1EAE }, + { 0x1EB1, 0x1EB0 }, + { 0x1EB3, 0x1EB2 }, + { 0x1EB5, 0x1EB4 }, + { 0x1EB7, 0x1EB6 }, + { 0x1EB9, 0x1EB8 }, + { 0x1EBB, 0x1EBA }, + { 0x1EBD, 0x1EBC }, + { 0x1EBF, 0x1EBE }, + { 0x1EC1, 0x1EC0 }, + { 0x1EC3, 0x1EC2 }, + { 0x1EC5, 0x1EC4 }, + { 0x1EC7, 0x1EC6 }, + { 0x1EC9, 0x1EC8 }, + { 0x1ECB, 0x1ECA }, + { 0x1ECD, 0x1ECC }, + { 0x1ECF, 0x1ECE }, + { 0x1ED1, 0x1ED0 }, + { 0x1ED3, 0x1ED2 }, + { 0x1ED5, 0x1ED4 }, + { 0x1ED7, 0x1ED6 }, + { 0x1ED9, 0x1ED8 }, + { 0x1EDB, 0x1EDA }, + { 0x1EDD, 0x1EDC }, + { 0x1EDF, 0x1EDE }, + { 0x1EE1, 0x1EE0 }, + { 0x1EE3, 0x1EE2 }, + { 0x1EE5, 0x1EE4 }, + { 0x1EE7, 0x1EE6 }, + { 0x1EE9, 0x1EE8 }, + { 0x1EEB, 0x1EEA }, + { 0x1EED, 0x1EEC }, + { 0x1EEF, 0x1EEE }, + { 0x1EF1, 0x1EF0 }, + { 0x1EF3, 0x1EF2 }, + { 0x1EF5, 0x1EF4 }, + { 0x1EF7, 0x1EF6 }, + { 0x1EF9, 0x1EF8 }, + { 0x1EFB, 0x1EFA }, + { 0x1EFD, 0x1EFC }, + { 0x1EFF, 0x1EFE }, + { 0x1F00, 0x1F08 }, + { 0x1F01, 0x1F09 }, + { 0x1F02, 0x1F0A }, + { 0x1F03, 0x1F0B }, + { 0x1F04, 0x1F0C }, + { 0x1F05, 0x1F0D }, + { 0x1F06, 0x1F0E }, + { 0x1F07, 0x1F0F }, + { 0x1F10, 0x1F18 }, + { 0x1F11, 0x1F19 }, + { 0x1F12, 0x1F1A }, + { 0x1F13, 0x1F1B }, + { 0x1F14, 0x1F1C }, + { 0x1F15, 0x1F1D }, + { 0x1F20, 0x1F28 }, + { 0x1F21, 0x1F29 }, + { 0x1F22, 0x1F2A }, + { 0x1F23, 0x1F2B }, + { 0x1F24, 0x1F2C }, + { 0x1F25, 0x1F2D }, + { 0x1F26, 0x1F2E }, + { 0x1F27, 0x1F2F }, + { 0x1F30, 0x1F38 }, + { 0x1F31, 0x1F39 }, + { 0x1F32, 0x1F3A }, + { 0x1F33, 0x1F3B }, + { 0x1F34, 0x1F3C }, + { 0x1F35, 0x1F3D }, + { 0x1F36, 0x1F3E }, + { 0x1F37, 0x1F3F }, + { 0x1F40, 0x1F48 }, + { 0x1F41, 0x1F49 }, + { 0x1F42, 0x1F4A }, + { 0x1F43, 0x1F4B }, + { 0x1F44, 0x1F4C }, + { 0x1F45, 0x1F4D }, + { 0x1F51, 0x1F59 }, + { 0x1F53, 0x1F5B }, + { 0x1F55, 0x1F5D }, + { 0x1F57, 0x1F5F }, + { 0x1F60, 0x1F68 }, + { 0x1F61, 0x1F69 }, + { 0x1F62, 0x1F6A }, + { 0x1F63, 0x1F6B }, + { 0x1F64, 0x1F6C }, + { 0x1F65, 0x1F6D }, + { 0x1F66, 0x1F6E }, + { 0x1F67, 0x1F6F }, + { 0x1F70, 0x1FBA }, + { 0x1F71, 0x1FBB }, + { 0x1F72, 0x1FC8 }, + { 0x1F73, 0x1FC9 }, + { 0x1F74, 0x1FCA }, + { 0x1F75, 0x1FCB }, + { 0x1F76, 0x1FDA }, + { 0x1F77, 0x1FDB }, + { 0x1F78, 0x1FF8 }, + { 0x1F79, 0x1FF9 }, + { 0x1F7A, 0x1FEA }, + { 0x1F7B, 0x1FEB }, + { 0x1F7C, 0x1FFA }, + { 0x1F7D, 0x1FFB }, + { 0x1F80, 0x1F88 }, + { 0x1F81, 0x1F89 }, + { 0x1F82, 0x1F8A }, + { 0x1F83, 0x1F8B }, + { 0x1F84, 0x1F8C }, + { 0x1F85, 0x1F8D }, + { 0x1F86, 0x1F8E }, + { 0x1F87, 0x1F8F }, + { 0x1F90, 0x1F98 }, + { 0x1F91, 0x1F99 }, + { 0x1F92, 0x1F9A }, + { 0x1F93, 0x1F9B }, + { 0x1F94, 0x1F9C }, + { 0x1F95, 0x1F9D }, + { 0x1F96, 0x1F9E }, + { 0x1F97, 0x1F9F }, + { 0x1FA0, 0x1FA8 }, + { 0x1FA1, 0x1FA9 }, + { 0x1FA2, 0x1FAA }, + { 0x1FA3, 0x1FAB }, + { 0x1FA4, 0x1FAC }, + { 0x1FA5, 0x1FAD }, + { 0x1FA6, 0x1FAE }, + { 0x1FA7, 0x1FAF }, + { 0x1FB0, 0x1FB8 }, + { 0x1FB1, 0x1FB9 }, + { 0x1FB3, 0x1FBC }, + { 0x1FBE, 0x0399 }, + { 0x1FC3, 0x1FCC }, + { 0x1FD0, 0x1FD8 }, + { 0x1FD1, 0x1FD9 }, + { 0x1FE0, 0x1FE8 }, + { 0x1FE1, 0x1FE9 }, + { 0x1FE5, 0x1FEC }, + { 0x1FF3, 0x1FFC }, + { 0x214E, 0x2132 }, + { 0x2170, 0x2160 }, + { 0x2171, 0x2161 }, + { 0x2172, 0x2162 }, + { 0x2173, 0x2163 }, + { 0x2174, 0x2164 }, + { 0x2175, 0x2165 }, + { 0x2176, 0x2166 }, + { 0x2177, 0x2167 }, + { 0x2178, 0x2168 }, + { 0x2179, 0x2169 }, + { 0x217A, 0x216A }, + { 0x217B, 0x216B }, + { 0x217C, 0x216C }, + { 0x217D, 0x216D }, + { 0x217E, 0x216E }, + { 0x217F, 0x216F }, + { 0x2184, 0x2183 }, + { 0x24D0, 0x24B6 }, + { 0x24D1, 0x24B7 }, + { 0x24D2, 0x24B8 }, + { 0x24D3, 0x24B9 }, + { 0x24D4, 0x24BA }, + { 0x24D5, 0x24BB }, + { 0x24D6, 0x24BC }, + { 0x24D7, 0x24BD }, + { 0x24D8, 0x24BE }, + { 0x24D9, 0x24BF }, + { 0x24DA, 0x24C0 }, + { 0x24DB, 0x24C1 }, + { 0x24DC, 0x24C2 }, + { 0x24DD, 0x24C3 }, + { 0x24DE, 0x24C4 }, + { 0x24DF, 0x24C5 }, + { 0x24E0, 0x24C6 }, + { 0x24E1, 0x24C7 }, + { 0x24E2, 0x24C8 }, + { 0x24E3, 0x24C9 }, + { 0x24E4, 0x24CA }, + { 0x24E5, 0x24CB }, + { 0x24E6, 0x24CC }, + { 0x24E7, 0x24CD }, + { 0x24E8, 0x24CE }, + { 0x24E9, 0x24CF }, + { 0x2C30, 0x2C00 }, + { 0x2C31, 0x2C01 }, + { 0x2C32, 0x2C02 }, + { 0x2C33, 0x2C03 }, + { 0x2C34, 0x2C04 }, + { 0x2C35, 0x2C05 }, + { 0x2C36, 0x2C06 }, + { 0x2C37, 0x2C07 }, + { 0x2C38, 0x2C08 }, + { 0x2C39, 0x2C09 }, + { 0x2C3A, 0x2C0A }, + { 0x2C3B, 0x2C0B }, + { 0x2C3C, 0x2C0C }, + { 0x2C3D, 0x2C0D }, + { 0x2C3E, 0x2C0E }, + { 0x2C3F, 0x2C0F }, + { 0x2C40, 0x2C10 }, + { 0x2C41, 0x2C11 }, + { 0x2C42, 0x2C12 }, + { 0x2C43, 0x2C13 }, + { 0x2C44, 0x2C14 }, + { 0x2C45, 0x2C15 }, + { 0x2C46, 0x2C16 }, + { 0x2C47, 0x2C17 }, + { 0x2C48, 0x2C18 }, + { 0x2C49, 0x2C19 }, + { 0x2C4A, 0x2C1A }, + { 0x2C4B, 0x2C1B }, + { 0x2C4C, 0x2C1C }, + { 0x2C4D, 0x2C1D }, + { 0x2C4E, 0x2C1E }, + { 0x2C4F, 0x2C1F }, + { 0x2C50, 0x2C20 }, + { 0x2C51, 0x2C21 }, + { 0x2C52, 0x2C22 }, + { 0x2C53, 0x2C23 }, + { 0x2C54, 0x2C24 }, + { 0x2C55, 0x2C25 }, + { 0x2C56, 0x2C26 }, + { 0x2C57, 0x2C27 }, + { 0x2C58, 0x2C28 }, + { 0x2C59, 0x2C29 }, + { 0x2C5A, 0x2C2A }, + { 0x2C5B, 0x2C2B }, + { 0x2C5C, 0x2C2C }, + { 0x2C5D, 0x2C2D }, + { 0x2C5E, 0x2C2E }, + { 0x2C61, 0x2C60 }, + { 0x2C65, 0x023A }, + { 0x2C66, 0x023E }, + { 0x2C68, 0x2C67 }, + { 0x2C6A, 0x2C69 }, + { 0x2C6C, 0x2C6B }, + { 0x2C73, 0x2C72 }, + { 0x2C76, 0x2C75 }, + { 0x2C81, 0x2C80 }, + { 0x2C83, 0x2C82 }, + { 0x2C85, 0x2C84 }, + { 0x2C87, 0x2C86 }, + { 0x2C89, 0x2C88 }, + { 0x2C8B, 0x2C8A }, + { 0x2C8D, 0x2C8C }, + { 0x2C8F, 0x2C8E }, + { 0x2C91, 0x2C90 }, + { 0x2C93, 0x2C92 }, + { 0x2C95, 0x2C94 }, + { 0x2C97, 0x2C96 }, + { 0x2C99, 0x2C98 }, + { 0x2C9B, 0x2C9A }, + { 0x2C9D, 0x2C9C }, + { 0x2C9F, 0x2C9E }, + { 0x2CA1, 0x2CA0 }, + { 0x2CA3, 0x2CA2 }, + { 0x2CA5, 0x2CA4 }, + { 0x2CA7, 0x2CA6 }, + { 0x2CA9, 0x2CA8 }, + { 0x2CAB, 0x2CAA }, + { 0x2CAD, 0x2CAC }, + { 0x2CAF, 0x2CAE }, + { 0x2CB1, 0x2CB0 }, + { 0x2CB3, 0x2CB2 }, + { 0x2CB5, 0x2CB4 }, + { 0x2CB7, 0x2CB6 }, + { 0x2CB9, 0x2CB8 }, + { 0x2CBB, 0x2CBA }, + { 0x2CBD, 0x2CBC }, + { 0x2CBF, 0x2CBE }, + { 0x2CC1, 0x2CC0 }, + { 0x2CC3, 0x2CC2 }, + { 0x2CC5, 0x2CC4 }, + { 0x2CC7, 0x2CC6 }, + { 0x2CC9, 0x2CC8 }, + { 0x2CCB, 0x2CCA }, + { 0x2CCD, 0x2CCC }, + { 0x2CCF, 0x2CCE }, + { 0x2CD1, 0x2CD0 }, + { 0x2CD3, 0x2CD2 }, + { 0x2CD5, 0x2CD4 }, + { 0x2CD7, 0x2CD6 }, + { 0x2CD9, 0x2CD8 }, + { 0x2CDB, 0x2CDA }, + { 0x2CDD, 0x2CDC }, + { 0x2CDF, 0x2CDE }, + { 0x2CE1, 0x2CE0 }, + { 0x2CE3, 0x2CE2 }, + { 0x2D00, 0x10A0 }, + { 0x2D01, 0x10A1 }, + { 0x2D02, 0x10A2 }, + { 0x2D03, 0x10A3 }, + { 0x2D04, 0x10A4 }, + { 0x2D05, 0x10A5 }, + { 0x2D06, 0x10A6 }, + { 0x2D07, 0x10A7 }, + { 0x2D08, 0x10A8 }, + { 0x2D09, 0x10A9 }, + { 0x2D0A, 0x10AA }, + { 0x2D0B, 0x10AB }, + { 0x2D0C, 0x10AC }, + { 0x2D0D, 0x10AD }, + { 0x2D0E, 0x10AE }, + { 0x2D0F, 0x10AF }, + { 0x2D10, 0x10B0 }, + { 0x2D11, 0x10B1 }, + { 0x2D12, 0x10B2 }, + { 0x2D13, 0x10B3 }, + { 0x2D14, 0x10B4 }, + { 0x2D15, 0x10B5 }, + { 0x2D16, 0x10B6 }, + { 0x2D17, 0x10B7 }, + { 0x2D18, 0x10B8 }, + { 0x2D19, 0x10B9 }, + { 0x2D1A, 0x10BA }, + { 0x2D1B, 0x10BB }, + { 0x2D1C, 0x10BC }, + { 0x2D1D, 0x10BD }, + { 0x2D1E, 0x10BE }, + { 0x2D1F, 0x10BF }, + { 0x2D20, 0x10C0 }, + { 0x2D21, 0x10C1 }, + { 0x2D22, 0x10C2 }, + { 0x2D23, 0x10C3 }, + { 0x2D24, 0x10C4 }, + { 0x2D25, 0x10C5 }, + { 0xA641, 0xA640 }, + { 0xA643, 0xA642 }, + { 0xA645, 0xA644 }, + { 0xA647, 0xA646 }, + { 0xA649, 0xA648 }, + { 0xA64B, 0xA64A }, + { 0xA64D, 0xA64C }, + { 0xA64F, 0xA64E }, + { 0xA651, 0xA650 }, + { 0xA653, 0xA652 }, + { 0xA655, 0xA654 }, + { 0xA657, 0xA656 }, + { 0xA659, 0xA658 }, + { 0xA65B, 0xA65A }, + { 0xA65D, 0xA65C }, + { 0xA65F, 0xA65E }, + { 0xA663, 0xA662 }, + { 0xA665, 0xA664 }, + { 0xA667, 0xA666 }, + { 0xA669, 0xA668 }, + { 0xA66B, 0xA66A }, + { 0xA66D, 0xA66C }, + { 0xA681, 0xA680 }, + { 0xA683, 0xA682 }, + { 0xA685, 0xA684 }, + { 0xA687, 0xA686 }, + { 0xA689, 0xA688 }, + { 0xA68B, 0xA68A }, + { 0xA68D, 0xA68C }, + { 0xA68F, 0xA68E }, + { 0xA691, 0xA690 }, + { 0xA693, 0xA692 }, + { 0xA695, 0xA694 }, + { 0xA697, 0xA696 }, + { 0xA723, 0xA722 }, + { 0xA725, 0xA724 }, + { 0xA727, 0xA726 }, + { 0xA729, 0xA728 }, + { 0xA72B, 0xA72A }, + { 0xA72D, 0xA72C }, + { 0xA72F, 0xA72E }, + { 0xA733, 0xA732 }, + { 0xA735, 0xA734 }, + { 0xA737, 0xA736 }, + { 0xA739, 0xA738 }, + { 0xA73B, 0xA73A }, + { 0xA73D, 0xA73C }, + { 0xA73F, 0xA73E }, + { 0xA741, 0xA740 }, + { 0xA743, 0xA742 }, + { 0xA745, 0xA744 }, + { 0xA747, 0xA746 }, + { 0xA749, 0xA748 }, + { 0xA74B, 0xA74A }, + { 0xA74D, 0xA74C }, + { 0xA74F, 0xA74E }, + { 0xA751, 0xA750 }, + { 0xA753, 0xA752 }, + { 0xA755, 0xA754 }, + { 0xA757, 0xA756 }, + { 0xA759, 0xA758 }, + { 0xA75B, 0xA75A }, + { 0xA75D, 0xA75C }, + { 0xA75F, 0xA75E }, + { 0xA761, 0xA760 }, + { 0xA763, 0xA762 }, + { 0xA765, 0xA764 }, + { 0xA767, 0xA766 }, + { 0xA769, 0xA768 }, + { 0xA76B, 0xA76A }, + { 0xA76D, 0xA76C }, + { 0xA76F, 0xA76E }, + { 0xA77A, 0xA779 }, + { 0xA77C, 0xA77B }, + { 0xA77F, 0xA77E }, + { 0xA781, 0xA780 }, + { 0xA783, 0xA782 }, + { 0xA785, 0xA784 }, + { 0xA787, 0xA786 }, + { 0xA78C, 0xA78B }, + { 0xFF41, 0xFF21 }, + { 0xFF42, 0xFF22 }, + { 0xFF43, 0xFF23 }, + { 0xFF44, 0xFF24 }, + { 0xFF45, 0xFF25 }, + { 0xFF46, 0xFF26 }, + { 0xFF47, 0xFF27 }, + { 0xFF48, 0xFF28 }, + { 0xFF49, 0xFF29 }, + { 0xFF4A, 0xFF2A }, + { 0xFF4B, 0xFF2B }, + { 0xFF4C, 0xFF2C }, + { 0xFF4D, 0xFF2D }, + { 0xFF4E, 0xFF2E }, + { 0xFF4F, 0xFF2F }, + { 0xFF50, 0xFF30 }, + { 0xFF51, 0xFF31 }, + { 0xFF52, 0xFF32 }, + { 0xFF53, 0xFF33 }, + { 0xFF54, 0xFF34 }, + { 0xFF55, 0xFF35 }, + { 0xFF56, 0xFF36 }, + { 0xFF57, 0xFF37 }, + { 0xFF58, 0xFF38 }, + { 0xFF59, 0xFF39 }, + { 0xFF5A, 0xFF3A }, + { 0x10428, 0x10400 }, + { 0x10429, 0x10401 }, + { 0x1042A, 0x10402 }, + { 0x1042B, 0x10403 }, + { 0x1042C, 0x10404 }, + { 0x1042D, 0x10405 }, + { 0x1042E, 0x10406 }, + { 0x1042F, 0x10407 }, + { 0x10430, 0x10408 }, + { 0x10431, 0x10409 }, + { 0x10432, 0x1040A }, + { 0x10433, 0x1040B }, + { 0x10434, 0x1040C }, + { 0x10435, 0x1040D }, + { 0x10436, 0x1040E }, + { 0x10437, 0x1040F }, + { 0x10438, 0x10410 }, + { 0x10439, 0x10411 }, + { 0x1043A, 0x10412 }, + { 0x1043B, 0x10413 }, + { 0x1043C, 0x10414 }, + { 0x1043D, 0x10415 }, + { 0x1043E, 0x10416 }, + { 0x1043F, 0x10417 }, + { 0x10440, 0x10418 }, + { 0x10441, 0x10419 }, + { 0x10442, 0x1041A }, + { 0x10443, 0x1041B }, + { 0x10444, 0x1041C }, + { 0x10445, 0x1041D }, + { 0x10446, 0x1041E }, + { 0x10447, 0x1041F }, + { 0x10448, 0x10420 }, + { 0x10449, 0x10421 }, + { 0x1044A, 0x10422 }, + { 0x1044B, 0x10423 }, + { 0x1044C, 0x10424 }, + { 0x1044D, 0x10425 }, + { 0x1044E, 0x10426 }, + { 0x1044F, 0x10427 } + +#define MAP(c) uc_totitle (c) +#include "test-mapping-part2.h" diff --git a/tests/unicase/test-uc_toupper.c b/tests/unicase/test-uc_toupper.c new file mode 100644 index 00000000..ed242a07 --- /dev/null +++ b/tests/unicase/test-uc_toupper.c @@ -0,0 +1,1055 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character mapping functions. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Generated automatically by gen-case.c for Unicode 5.1.0. */ + +#include "test-mapping-part1.h" + + { 0x0061, 0x0041 }, + { 0x0062, 0x0042 }, + { 0x0063, 0x0043 }, + { 0x0064, 0x0044 }, + { 0x0065, 0x0045 }, + { 0x0066, 0x0046 }, + { 0x0067, 0x0047 }, + { 0x0068, 0x0048 }, + { 0x0069, 0x0049 }, + { 0x006A, 0x004A }, + { 0x006B, 0x004B }, + { 0x006C, 0x004C }, + { 0x006D, 0x004D }, + { 0x006E, 0x004E }, + { 0x006F, 0x004F }, + { 0x0070, 0x0050 }, + { 0x0071, 0x0051 }, + { 0x0072, 0x0052 }, + { 0x0073, 0x0053 }, + { 0x0074, 0x0054 }, + { 0x0075, 0x0055 }, + { 0x0076, 0x0056 }, + { 0x0077, 0x0057 }, + { 0x0078, 0x0058 }, + { 0x0079, 0x0059 }, + { 0x007A, 0x005A }, + { 0x00B5, 0x039C }, + { 0x00E0, 0x00C0 }, + { 0x00E1, 0x00C1 }, + { 0x00E2, 0x00C2 }, + { 0x00E3, 0x00C3 }, + { 0x00E4, 0x00C4 }, + { 0x00E5, 0x00C5 }, + { 0x00E6, 0x00C6 }, + { 0x00E7, 0x00C7 }, + { 0x00E8, 0x00C8 }, + { 0x00E9, 0x00C9 }, + { 0x00EA, 0x00CA }, + { 0x00EB, 0x00CB }, + { 0x00EC, 0x00CC }, + { 0x00ED, 0x00CD }, + { 0x00EE, 0x00CE }, + { 0x00EF, 0x00CF }, + { 0x00F0, 0x00D0 }, + { 0x00F1, 0x00D1 }, + { 0x00F2, 0x00D2 }, + { 0x00F3, 0x00D3 }, + { 0x00F4, 0x00D4 }, + { 0x00F5, 0x00D5 }, + { 0x00F6, 0x00D6 }, + { 0x00F8, 0x00D8 }, + { 0x00F9, 0x00D9 }, + { 0x00FA, 0x00DA }, + { 0x00FB, 0x00DB }, + { 0x00FC, 0x00DC }, + { 0x00FD, 0x00DD }, + { 0x00FE, 0x00DE }, + { 0x00FF, 0x0178 }, + { 0x0101, 0x0100 }, + { 0x0103, 0x0102 }, + { 0x0105, 0x0104 }, + { 0x0107, 0x0106 }, + { 0x0109, 0x0108 }, + { 0x010B, 0x010A }, + { 0x010D, 0x010C }, + { 0x010F, 0x010E }, + { 0x0111, 0x0110 }, + { 0x0113, 0x0112 }, + { 0x0115, 0x0114 }, + { 0x0117, 0x0116 }, + { 0x0119, 0x0118 }, + { 0x011B, 0x011A }, + { 0x011D, 0x011C }, + { 0x011F, 0x011E }, + { 0x0121, 0x0120 }, + { 0x0123, 0x0122 }, + { 0x0125, 0x0124 }, + { 0x0127, 0x0126 }, + { 0x0129, 0x0128 }, + { 0x012B, 0x012A }, + { 0x012D, 0x012C }, + { 0x012F, 0x012E }, + { 0x0131, 0x0049 }, + { 0x0133, 0x0132 }, + { 0x0135, 0x0134 }, + { 0x0137, 0x0136 }, + { 0x013A, 0x0139 }, + { 0x013C, 0x013B }, + { 0x013E, 0x013D }, + { 0x0140, 0x013F }, + { 0x0142, 0x0141 }, + { 0x0144, 0x0143 }, + { 0x0146, 0x0145 }, + { 0x0148, 0x0147 }, + { 0x014B, 0x014A }, + { 0x014D, 0x014C }, + { 0x014F, 0x014E }, + { 0x0151, 0x0150 }, + { 0x0153, 0x0152 }, + { 0x0155, 0x0154 }, + { 0x0157, 0x0156 }, + { 0x0159, 0x0158 }, + { 0x015B, 0x015A }, + { 0x015D, 0x015C }, + { 0x015F, 0x015E }, + { 0x0161, 0x0160 }, + { 0x0163, 0x0162 }, + { 0x0165, 0x0164 }, + { 0x0167, 0x0166 }, + { 0x0169, 0x0168 }, + { 0x016B, 0x016A }, + { 0x016D, 0x016C }, + { 0x016F, 0x016E }, + { 0x0171, 0x0170 }, + { 0x0173, 0x0172 }, + { 0x0175, 0x0174 }, + { 0x0177, 0x0176 }, + { 0x017A, 0x0179 }, + { 0x017C, 0x017B }, + { 0x017E, 0x017D }, + { 0x017F, 0x0053 }, + { 0x0180, 0x0243 }, + { 0x0183, 0x0182 }, + { 0x0185, 0x0184 }, + { 0x0188, 0x0187 }, + { 0x018C, 0x018B }, + { 0x0192, 0x0191 }, + { 0x0195, 0x01F6 }, + { 0x0199, 0x0198 }, + { 0x019A, 0x023D }, + { 0x019E, 0x0220 }, + { 0x01A1, 0x01A0 }, + { 0x01A3, 0x01A2 }, + { 0x01A5, 0x01A4 }, + { 0x01A8, 0x01A7 }, + { 0x01AD, 0x01AC }, + { 0x01B0, 0x01AF }, + { 0x01B4, 0x01B3 }, + { 0x01B6, 0x01B5 }, + { 0x01B9, 0x01B8 }, + { 0x01BD, 0x01BC }, + { 0x01BF, 0x01F7 }, + { 0x01C5, 0x01C4 }, + { 0x01C6, 0x01C4 }, + { 0x01C8, 0x01C7 }, + { 0x01C9, 0x01C7 }, + { 0x01CB, 0x01CA }, + { 0x01CC, 0x01CA }, + { 0x01CE, 0x01CD }, + { 0x01D0, 0x01CF }, + { 0x01D2, 0x01D1 }, + { 0x01D4, 0x01D3 }, + { 0x01D6, 0x01D5 }, + { 0x01D8, 0x01D7 }, + { 0x01DA, 0x01D9 }, + { 0x01DC, 0x01DB }, + { 0x01DD, 0x018E }, + { 0x01DF, 0x01DE }, + { 0x01E1, 0x01E0 }, + { 0x01E3, 0x01E2 }, + { 0x01E5, 0x01E4 }, + { 0x01E7, 0x01E6 }, + { 0x01E9, 0x01E8 }, + { 0x01EB, 0x01EA }, + { 0x01ED, 0x01EC }, + { 0x01EF, 0x01EE }, + { 0x01F2, 0x01F1 }, + { 0x01F3, 0x01F1 }, + { 0x01F5, 0x01F4 }, + { 0x01F9, 0x01F8 }, + { 0x01FB, 0x01FA }, + { 0x01FD, 0x01FC }, + { 0x01FF, 0x01FE }, + { 0x0201, 0x0200 }, + { 0x0203, 0x0202 }, + { 0x0205, 0x0204 }, + { 0x0207, 0x0206 }, + { 0x0209, 0x0208 }, + { 0x020B, 0x020A }, + { 0x020D, 0x020C }, + { 0x020F, 0x020E }, + { 0x0211, 0x0210 }, + { 0x0213, 0x0212 }, + { 0x0215, 0x0214 }, + { 0x0217, 0x0216 }, + { 0x0219, 0x0218 }, + { 0x021B, 0x021A }, + { 0x021D, 0x021C }, + { 0x021F, 0x021E }, + { 0x0223, 0x0222 }, + { 0x0225, 0x0224 }, + { 0x0227, 0x0226 }, + { 0x0229, 0x0228 }, + { 0x022B, 0x022A }, + { 0x022D, 0x022C }, + { 0x022F, 0x022E }, + { 0x0231, 0x0230 }, + { 0x0233, 0x0232 }, + { 0x023C, 0x023B }, + { 0x0242, 0x0241 }, + { 0x0247, 0x0246 }, + { 0x0249, 0x0248 }, + { 0x024B, 0x024A }, + { 0x024D, 0x024C }, + { 0x024F, 0x024E }, + { 0x0250, 0x2C6F }, + { 0x0251, 0x2C6D }, + { 0x0253, 0x0181 }, + { 0x0254, 0x0186 }, + { 0x0256, 0x0189 }, + { 0x0257, 0x018A }, + { 0x0259, 0x018F }, + { 0x025B, 0x0190 }, + { 0x0260, 0x0193 }, + { 0x0263, 0x0194 }, + { 0x0268, 0x0197 }, + { 0x0269, 0x0196 }, + { 0x026B, 0x2C62 }, + { 0x026F, 0x019C }, + { 0x0271, 0x2C6E }, + { 0x0272, 0x019D }, + { 0x0275, 0x019F }, + { 0x027D, 0x2C64 }, + { 0x0280, 0x01A6 }, + { 0x0283, 0x01A9 }, + { 0x0288, 0x01AE }, + { 0x0289, 0x0244 }, + { 0x028A, 0x01B1 }, + { 0x028B, 0x01B2 }, + { 0x028C, 0x0245 }, + { 0x0292, 0x01B7 }, + { 0x0345, 0x0399 }, + { 0x0371, 0x0370 }, + { 0x0373, 0x0372 }, + { 0x0377, 0x0376 }, + { 0x037B, 0x03FD }, + { 0x037C, 0x03FE }, + { 0x037D, 0x03FF }, + { 0x03AC, 0x0386 }, + { 0x03AD, 0x0388 }, + { 0x03AE, 0x0389 }, + { 0x03AF, 0x038A }, + { 0x03B1, 0x0391 }, + { 0x03B2, 0x0392 }, + { 0x03B3, 0x0393 }, + { 0x03B4, 0x0394 }, + { 0x03B5, 0x0395 }, + { 0x03B6, 0x0396 }, + { 0x03B7, 0x0397 }, + { 0x03B8, 0x0398 }, + { 0x03B9, 0x0399 }, + { 0x03BA, 0x039A }, + { 0x03BB, 0x039B }, + { 0x03BC, 0x039C }, + { 0x03BD, 0x039D }, + { 0x03BE, 0x039E }, + { 0x03BF, 0x039F }, + { 0x03C0, 0x03A0 }, + { 0x03C1, 0x03A1 }, + { 0x03C2, 0x03A3 }, + { 0x03C3, 0x03A3 }, + { 0x03C4, 0x03A4 }, + { 0x03C5, 0x03A5 }, + { 0x03C6, 0x03A6 }, + { 0x03C7, 0x03A7 }, + { 0x03C8, 0x03A8 }, + { 0x03C9, 0x03A9 }, + { 0x03CA, 0x03AA }, + { 0x03CB, 0x03AB }, + { 0x03CC, 0x038C }, + { 0x03CD, 0x038E }, + { 0x03CE, 0x038F }, + { 0x03D0, 0x0392 }, + { 0x03D1, 0x0398 }, + { 0x03D5, 0x03A6 }, + { 0x03D6, 0x03A0 }, + { 0x03D7, 0x03CF }, + { 0x03D9, 0x03D8 }, + { 0x03DB, 0x03DA }, + { 0x03DD, 0x03DC }, + { 0x03DF, 0x03DE }, + { 0x03E1, 0x03E0 }, + { 0x03E3, 0x03E2 }, + { 0x03E5, 0x03E4 }, + { 0x03E7, 0x03E6 }, + { 0x03E9, 0x03E8 }, + { 0x03EB, 0x03EA }, + { 0x03ED, 0x03EC }, + { 0x03EF, 0x03EE }, + { 0x03F0, 0x039A }, + { 0x03F1, 0x03A1 }, + { 0x03F2, 0x03F9 }, + { 0x03F5, 0x0395 }, + { 0x03F8, 0x03F7 }, + { 0x03FB, 0x03FA }, + { 0x0430, 0x0410 }, + { 0x0431, 0x0411 }, + { 0x0432, 0x0412 }, + { 0x0433, 0x0413 }, + { 0x0434, 0x0414 }, + { 0x0435, 0x0415 }, + { 0x0436, 0x0416 }, + { 0x0437, 0x0417 }, + { 0x0438, 0x0418 }, + { 0x0439, 0x0419 }, + { 0x043A, 0x041A }, + { 0x043B, 0x041B }, + { 0x043C, 0x041C }, + { 0x043D, 0x041D }, + { 0x043E, 0x041E }, + { 0x043F, 0x041F }, + { 0x0440, 0x0420 }, + { 0x0441, 0x0421 }, + { 0x0442, 0x0422 }, + { 0x0443, 0x0423 }, + { 0x0444, 0x0424 }, + { 0x0445, 0x0425 }, + { 0x0446, 0x0426 }, + { 0x0447, 0x0427 }, + { 0x0448, 0x0428 }, + { 0x0449, 0x0429 }, + { 0x044A, 0x042A }, + { 0x044B, 0x042B }, + { 0x044C, 0x042C }, + { 0x044D, 0x042D }, + { 0x044E, 0x042E }, + { 0x044F, 0x042F }, + { 0x0450, 0x0400 }, + { 0x0451, 0x0401 }, + { 0x0452, 0x0402 }, + { 0x0453, 0x0403 }, + { 0x0454, 0x0404 }, + { 0x0455, 0x0405 }, + { 0x0456, 0x0406 }, + { 0x0457, 0x0407 }, + { 0x0458, 0x0408 }, + { 0x0459, 0x0409 }, + { 0x045A, 0x040A }, + { 0x045B, 0x040B }, + { 0x045C, 0x040C }, + { 0x045D, 0x040D }, + { 0x045E, 0x040E }, + { 0x045F, 0x040F }, + { 0x0461, 0x0460 }, + { 0x0463, 0x0462 }, + { 0x0465, 0x0464 }, + { 0x0467, 0x0466 }, + { 0x0469, 0x0468 }, + { 0x046B, 0x046A }, + { 0x046D, 0x046C }, + { 0x046F, 0x046E }, + { 0x0471, 0x0470 }, + { 0x0473, 0x0472 }, + { 0x0475, 0x0474 }, + { 0x0477, 0x0476 }, + { 0x0479, 0x0478 }, + { 0x047B, 0x047A }, + { 0x047D, 0x047C }, + { 0x047F, 0x047E }, + { 0x0481, 0x0480 }, + { 0x048B, 0x048A }, + { 0x048D, 0x048C }, + { 0x048F, 0x048E }, + { 0x0491, 0x0490 }, + { 0x0493, 0x0492 }, + { 0x0495, 0x0494 }, + { 0x0497, 0x0496 }, + { 0x0499, 0x0498 }, + { 0x049B, 0x049A }, + { 0x049D, 0x049C }, + { 0x049F, 0x049E }, + { 0x04A1, 0x04A0 }, + { 0x04A3, 0x04A2 }, + { 0x04A5, 0x04A4 }, + { 0x04A7, 0x04A6 }, + { 0x04A9, 0x04A8 }, + { 0x04AB, 0x04AA }, + { 0x04AD, 0x04AC }, + { 0x04AF, 0x04AE }, + { 0x04B1, 0x04B0 }, + { 0x04B3, 0x04B2 }, + { 0x04B5, 0x04B4 }, + { 0x04B7, 0x04B6 }, + { 0x04B9, 0x04B8 }, + { 0x04BB, 0x04BA }, + { 0x04BD, 0x04BC }, + { 0x04BF, 0x04BE }, + { 0x04C2, 0x04C1 }, + { 0x04C4, 0x04C3 }, + { 0x04C6, 0x04C5 }, + { 0x04C8, 0x04C7 }, + { 0x04CA, 0x04C9 }, + { 0x04CC, 0x04CB }, + { 0x04CE, 0x04CD }, + { 0x04CF, 0x04C0 }, + { 0x04D1, 0x04D0 }, + { 0x04D3, 0x04D2 }, + { 0x04D5, 0x04D4 }, + { 0x04D7, 0x04D6 }, + { 0x04D9, 0x04D8 }, + { 0x04DB, 0x04DA }, + { 0x04DD, 0x04DC }, + { 0x04DF, 0x04DE }, + { 0x04E1, 0x04E0 }, + { 0x04E3, 0x04E2 }, + { 0x04E5, 0x04E4 }, + { 0x04E7, 0x04E6 }, + { 0x04E9, 0x04E8 }, + { 0x04EB, 0x04EA }, + { 0x04ED, 0x04EC }, + { 0x04EF, 0x04EE }, + { 0x04F1, 0x04F0 }, + { 0x04F3, 0x04F2 }, + { 0x04F5, 0x04F4 }, + { 0x04F7, 0x04F6 }, + { 0x04F9, 0x04F8 }, + { 0x04FB, 0x04FA }, + { 0x04FD, 0x04FC }, + { 0x04FF, 0x04FE }, + { 0x0501, 0x0500 }, + { 0x0503, 0x0502 }, + { 0x0505, 0x0504 }, + { 0x0507, 0x0506 }, + { 0x0509, 0x0508 }, + { 0x050B, 0x050A }, + { 0x050D, 0x050C }, + { 0x050F, 0x050E }, + { 0x0511, 0x0510 }, + { 0x0513, 0x0512 }, + { 0x0515, 0x0514 }, + { 0x0517, 0x0516 }, + { 0x0519, 0x0518 }, + { 0x051B, 0x051A }, + { 0x051D, 0x051C }, + { 0x051F, 0x051E }, + { 0x0521, 0x0520 }, + { 0x0523, 0x0522 }, + { 0x0561, 0x0531 }, + { 0x0562, 0x0532 }, + { 0x0563, 0x0533 }, + { 0x0564, 0x0534 }, + { 0x0565, 0x0535 }, + { 0x0566, 0x0536 }, + { 0x0567, 0x0537 }, + { 0x0568, 0x0538 }, + { 0x0569, 0x0539 }, + { 0x056A, 0x053A }, + { 0x056B, 0x053B }, + { 0x056C, 0x053C }, + { 0x056D, 0x053D }, + { 0x056E, 0x053E }, + { 0x056F, 0x053F }, + { 0x0570, 0x0540 }, + { 0x0571, 0x0541 }, + { 0x0572, 0x0542 }, + { 0x0573, 0x0543 }, + { 0x0574, 0x0544 }, + { 0x0575, 0x0545 }, + { 0x0576, 0x0546 }, + { 0x0577, 0x0547 }, + { 0x0578, 0x0548 }, + { 0x0579, 0x0549 }, + { 0x057A, 0x054A }, + { 0x057B, 0x054B }, + { 0x057C, 0x054C }, + { 0x057D, 0x054D }, + { 0x057E, 0x054E }, + { 0x057F, 0x054F }, + { 0x0580, 0x0550 }, + { 0x0581, 0x0551 }, + { 0x0582, 0x0552 }, + { 0x0583, 0x0553 }, + { 0x0584, 0x0554 }, + { 0x0585, 0x0555 }, + { 0x0586, 0x0556 }, + { 0x1D79, 0xA77D }, + { 0x1D7D, 0x2C63 }, + { 0x1E01, 0x1E00 }, + { 0x1E03, 0x1E02 }, + { 0x1E05, 0x1E04 }, + { 0x1E07, 0x1E06 }, + { 0x1E09, 0x1E08 }, + { 0x1E0B, 0x1E0A }, + { 0x1E0D, 0x1E0C }, + { 0x1E0F, 0x1E0E }, + { 0x1E11, 0x1E10 }, + { 0x1E13, 0x1E12 }, + { 0x1E15, 0x1E14 }, + { 0x1E17, 0x1E16 }, + { 0x1E19, 0x1E18 }, + { 0x1E1B, 0x1E1A }, + { 0x1E1D, 0x1E1C }, + { 0x1E1F, 0x1E1E }, + { 0x1E21, 0x1E20 }, + { 0x1E23, 0x1E22 }, + { 0x1E25, 0x1E24 }, + { 0x1E27, 0x1E26 }, + { 0x1E29, 0x1E28 }, + { 0x1E2B, 0x1E2A }, + { 0x1E2D, 0x1E2C }, + { 0x1E2F, 0x1E2E }, + { 0x1E31, 0x1E30 }, + { 0x1E33, 0x1E32 }, + { 0x1E35, 0x1E34 }, + { 0x1E37, 0x1E36 }, + { 0x1E39, 0x1E38 }, + { 0x1E3B, 0x1E3A }, + { 0x1E3D, 0x1E3C }, + { 0x1E3F, 0x1E3E }, + { 0x1E41, 0x1E40 }, + { 0x1E43, 0x1E42 }, + { 0x1E45, 0x1E44 }, + { 0x1E47, 0x1E46 }, + { 0x1E49, 0x1E48 }, + { 0x1E4B, 0x1E4A }, + { 0x1E4D, 0x1E4C }, + { 0x1E4F, 0x1E4E }, + { 0x1E51, 0x1E50 }, + { 0x1E53, 0x1E52 }, + { 0x1E55, 0x1E54 }, + { 0x1E57, 0x1E56 }, + { 0x1E59, 0x1E58 }, + { 0x1E5B, 0x1E5A }, + { 0x1E5D, 0x1E5C }, + { 0x1E5F, 0x1E5E }, + { 0x1E61, 0x1E60 }, + { 0x1E63, 0x1E62 }, + { 0x1E65, 0x1E64 }, + { 0x1E67, 0x1E66 }, + { 0x1E69, 0x1E68 }, + { 0x1E6B, 0x1E6A }, + { 0x1E6D, 0x1E6C }, + { 0x1E6F, 0x1E6E }, + { 0x1E71, 0x1E70 }, + { 0x1E73, 0x1E72 }, + { 0x1E75, 0x1E74 }, + { 0x1E77, 0x1E76 }, + { 0x1E79, 0x1E78 }, + { 0x1E7B, 0x1E7A }, + { 0x1E7D, 0x1E7C }, + { 0x1E7F, 0x1E7E }, + { 0x1E81, 0x1E80 }, + { 0x1E83, 0x1E82 }, + { 0x1E85, 0x1E84 }, + { 0x1E87, 0x1E86 }, + { 0x1E89, 0x1E88 }, + { 0x1E8B, 0x1E8A }, + { 0x1E8D, 0x1E8C }, + { 0x1E8F, 0x1E8E }, + { 0x1E91, 0x1E90 }, + { 0x1E93, 0x1E92 }, + { 0x1E95, 0x1E94 }, + { 0x1E9B, 0x1E60 }, + { 0x1EA1, 0x1EA0 }, + { 0x1EA3, 0x1EA2 }, + { 0x1EA5, 0x1EA4 }, + { 0x1EA7, 0x1EA6 }, + { 0x1EA9, 0x1EA8 }, + { 0x1EAB, 0x1EAA }, + { 0x1EAD, 0x1EAC }, + { 0x1EAF, 0x1EAE }, + { 0x1EB1, 0x1EB0 }, + { 0x1EB3, 0x1EB2 }, + { 0x1EB5, 0x1EB4 }, + { 0x1EB7, 0x1EB6 }, + { 0x1EB9, 0x1EB8 }, + { 0x1EBB, 0x1EBA }, + { 0x1EBD, 0x1EBC }, + { 0x1EBF, 0x1EBE }, + { 0x1EC1, 0x1EC0 }, + { 0x1EC3, 0x1EC2 }, + { 0x1EC5, 0x1EC4 }, + { 0x1EC7, 0x1EC6 }, + { 0x1EC9, 0x1EC8 }, + { 0x1ECB, 0x1ECA }, + { 0x1ECD, 0x1ECC }, + { 0x1ECF, 0x1ECE }, + { 0x1ED1, 0x1ED0 }, + { 0x1ED3, 0x1ED2 }, + { 0x1ED5, 0x1ED4 }, + { 0x1ED7, 0x1ED6 }, + { 0x1ED9, 0x1ED8 }, + { 0x1EDB, 0x1EDA }, + { 0x1EDD, 0x1EDC }, + { 0x1EDF, 0x1EDE }, + { 0x1EE1, 0x1EE0 }, + { 0x1EE3, 0x1EE2 }, + { 0x1EE5, 0x1EE4 }, + { 0x1EE7, 0x1EE6 }, + { 0x1EE9, 0x1EE8 }, + { 0x1EEB, 0x1EEA }, + { 0x1EED, 0x1EEC }, + { 0x1EEF, 0x1EEE }, + { 0x1EF1, 0x1EF0 }, + { 0x1EF3, 0x1EF2 }, + { 0x1EF5, 0x1EF4 }, + { 0x1EF7, 0x1EF6 }, + { 0x1EF9, 0x1EF8 }, + { 0x1EFB, 0x1EFA }, + { 0x1EFD, 0x1EFC }, + { 0x1EFF, 0x1EFE }, + { 0x1F00, 0x1F08 }, + { 0x1F01, 0x1F09 }, + { 0x1F02, 0x1F0A }, + { 0x1F03, 0x1F0B }, + { 0x1F04, 0x1F0C }, + { 0x1F05, 0x1F0D }, + { 0x1F06, 0x1F0E }, + { 0x1F07, 0x1F0F }, + { 0x1F10, 0x1F18 }, + { 0x1F11, 0x1F19 }, + { 0x1F12, 0x1F1A }, + { 0x1F13, 0x1F1B }, + { 0x1F14, 0x1F1C }, + { 0x1F15, 0x1F1D }, + { 0x1F20, 0x1F28 }, + { 0x1F21, 0x1F29 }, + { 0x1F22, 0x1F2A }, + { 0x1F23, 0x1F2B }, + { 0x1F24, 0x1F2C }, + { 0x1F25, 0x1F2D }, + { 0x1F26, 0x1F2E }, + { 0x1F27, 0x1F2F }, + { 0x1F30, 0x1F38 }, + { 0x1F31, 0x1F39 }, + { 0x1F32, 0x1F3A }, + { 0x1F33, 0x1F3B }, + { 0x1F34, 0x1F3C }, + { 0x1F35, 0x1F3D }, + { 0x1F36, 0x1F3E }, + { 0x1F37, 0x1F3F }, + { 0x1F40, 0x1F48 }, + { 0x1F41, 0x1F49 }, + { 0x1F42, 0x1F4A }, + { 0x1F43, 0x1F4B }, + { 0x1F44, 0x1F4C }, + { 0x1F45, 0x1F4D }, + { 0x1F51, 0x1F59 }, + { 0x1F53, 0x1F5B }, + { 0x1F55, 0x1F5D }, + { 0x1F57, 0x1F5F }, + { 0x1F60, 0x1F68 }, + { 0x1F61, 0x1F69 }, + { 0x1F62, 0x1F6A }, + { 0x1F63, 0x1F6B }, + { 0x1F64, 0x1F6C }, + { 0x1F65, 0x1F6D }, + { 0x1F66, 0x1F6E }, + { 0x1F67, 0x1F6F }, + { 0x1F70, 0x1FBA }, + { 0x1F71, 0x1FBB }, + { 0x1F72, 0x1FC8 }, + { 0x1F73, 0x1FC9 }, + { 0x1F74, 0x1FCA }, + { 0x1F75, 0x1FCB }, + { 0x1F76, 0x1FDA }, + { 0x1F77, 0x1FDB }, + { 0x1F78, 0x1FF8 }, + { 0x1F79, 0x1FF9 }, + { 0x1F7A, 0x1FEA }, + { 0x1F7B, 0x1FEB }, + { 0x1F7C, 0x1FFA }, + { 0x1F7D, 0x1FFB }, + { 0x1F80, 0x1F88 }, + { 0x1F81, 0x1F89 }, + { 0x1F82, 0x1F8A }, + { 0x1F83, 0x1F8B }, + { 0x1F84, 0x1F8C }, + { 0x1F85, 0x1F8D }, + { 0x1F86, 0x1F8E }, + { 0x1F87, 0x1F8F }, + { 0x1F90, 0x1F98 }, + { 0x1F91, 0x1F99 }, + { 0x1F92, 0x1F9A }, + { 0x1F93, 0x1F9B }, + { 0x1F94, 0x1F9C }, + { 0x1F95, 0x1F9D }, + { 0x1F96, 0x1F9E }, + { 0x1F97, 0x1F9F }, + { 0x1FA0, 0x1FA8 }, + { 0x1FA1, 0x1FA9 }, + { 0x1FA2, 0x1FAA }, + { 0x1FA3, 0x1FAB }, + { 0x1FA4, 0x1FAC }, + { 0x1FA5, 0x1FAD }, + { 0x1FA6, 0x1FAE }, + { 0x1FA7, 0x1FAF }, + { 0x1FB0, 0x1FB8 }, + { 0x1FB1, 0x1FB9 }, + { 0x1FB3, 0x1FBC }, + { 0x1FBE, 0x0399 }, + { 0x1FC3, 0x1FCC }, + { 0x1FD0, 0x1FD8 }, + { 0x1FD1, 0x1FD9 }, + { 0x1FE0, 0x1FE8 }, + { 0x1FE1, 0x1FE9 }, + { 0x1FE5, 0x1FEC }, + { 0x1FF3, 0x1FFC }, + { 0x214E, 0x2132 }, + { 0x2170, 0x2160 }, + { 0x2171, 0x2161 }, + { 0x2172, 0x2162 }, + { 0x2173, 0x2163 }, + { 0x2174, 0x2164 }, + { 0x2175, 0x2165 }, + { 0x2176, 0x2166 }, + { 0x2177, 0x2167 }, + { 0x2178, 0x2168 }, + { 0x2179, 0x2169 }, + { 0x217A, 0x216A }, + { 0x217B, 0x216B }, + { 0x217C, 0x216C }, + { 0x217D, 0x216D }, + { 0x217E, 0x216E }, + { 0x217F, 0x216F }, + { 0x2184, 0x2183 }, + { 0x24D0, 0x24B6 }, + { 0x24D1, 0x24B7 }, + { 0x24D2, 0x24B8 }, + { 0x24D3, 0x24B9 }, + { 0x24D4, 0x24BA }, + { 0x24D5, 0x24BB }, + { 0x24D6, 0x24BC }, + { 0x24D7, 0x24BD }, + { 0x24D8, 0x24BE }, + { 0x24D9, 0x24BF }, + { 0x24DA, 0x24C0 }, + { 0x24DB, 0x24C1 }, + { 0x24DC, 0x24C2 }, + { 0x24DD, 0x24C3 }, + { 0x24DE, 0x24C4 }, + { 0x24DF, 0x24C5 }, + { 0x24E0, 0x24C6 }, + { 0x24E1, 0x24C7 }, + { 0x24E2, 0x24C8 }, + { 0x24E3, 0x24C9 }, + { 0x24E4, 0x24CA }, + { 0x24E5, 0x24CB }, + { 0x24E6, 0x24CC }, + { 0x24E7, 0x24CD }, + { 0x24E8, 0x24CE }, + { 0x24E9, 0x24CF }, + { 0x2C30, 0x2C00 }, + { 0x2C31, 0x2C01 }, + { 0x2C32, 0x2C02 }, + { 0x2C33, 0x2C03 }, + { 0x2C34, 0x2C04 }, + { 0x2C35, 0x2C05 }, + { 0x2C36, 0x2C06 }, + { 0x2C37, 0x2C07 }, + { 0x2C38, 0x2C08 }, + { 0x2C39, 0x2C09 }, + { 0x2C3A, 0x2C0A }, + { 0x2C3B, 0x2C0B }, + { 0x2C3C, 0x2C0C }, + { 0x2C3D, 0x2C0D }, + { 0x2C3E, 0x2C0E }, + { 0x2C3F, 0x2C0F }, + { 0x2C40, 0x2C10 }, + { 0x2C41, 0x2C11 }, + { 0x2C42, 0x2C12 }, + { 0x2C43, 0x2C13 }, + { 0x2C44, 0x2C14 }, + { 0x2C45, 0x2C15 }, + { 0x2C46, 0x2C16 }, + { 0x2C47, 0x2C17 }, + { 0x2C48, 0x2C18 }, + { 0x2C49, 0x2C19 }, + { 0x2C4A, 0x2C1A }, + { 0x2C4B, 0x2C1B }, + { 0x2C4C, 0x2C1C }, + { 0x2C4D, 0x2C1D }, + { 0x2C4E, 0x2C1E }, + { 0x2C4F, 0x2C1F }, + { 0x2C50, 0x2C20 }, + { 0x2C51, 0x2C21 }, + { 0x2C52, 0x2C22 }, + { 0x2C53, 0x2C23 }, + { 0x2C54, 0x2C24 }, + { 0x2C55, 0x2C25 }, + { 0x2C56, 0x2C26 }, + { 0x2C57, 0x2C27 }, + { 0x2C58, 0x2C28 }, + { 0x2C59, 0x2C29 }, + { 0x2C5A, 0x2C2A }, + { 0x2C5B, 0x2C2B }, + { 0x2C5C, 0x2C2C }, + { 0x2C5D, 0x2C2D }, + { 0x2C5E, 0x2C2E }, + { 0x2C61, 0x2C60 }, + { 0x2C65, 0x023A }, + { 0x2C66, 0x023E }, + { 0x2C68, 0x2C67 }, + { 0x2C6A, 0x2C69 }, + { 0x2C6C, 0x2C6B }, + { 0x2C73, 0x2C72 }, + { 0x2C76, 0x2C75 }, + { 0x2C81, 0x2C80 }, + { 0x2C83, 0x2C82 }, + { 0x2C85, 0x2C84 }, + { 0x2C87, 0x2C86 }, + { 0x2C89, 0x2C88 }, + { 0x2C8B, 0x2C8A }, + { 0x2C8D, 0x2C8C }, + { 0x2C8F, 0x2C8E }, + { 0x2C91, 0x2C90 }, + { 0x2C93, 0x2C92 }, + { 0x2C95, 0x2C94 }, + { 0x2C97, 0x2C96 }, + { 0x2C99, 0x2C98 }, + { 0x2C9B, 0x2C9A }, + { 0x2C9D, 0x2C9C }, + { 0x2C9F, 0x2C9E }, + { 0x2CA1, 0x2CA0 }, + { 0x2CA3, 0x2CA2 }, + { 0x2CA5, 0x2CA4 }, + { 0x2CA7, 0x2CA6 }, + { 0x2CA9, 0x2CA8 }, + { 0x2CAB, 0x2CAA }, + { 0x2CAD, 0x2CAC }, + { 0x2CAF, 0x2CAE }, + { 0x2CB1, 0x2CB0 }, + { 0x2CB3, 0x2CB2 }, + { 0x2CB5, 0x2CB4 }, + { 0x2CB7, 0x2CB6 }, + { 0x2CB9, 0x2CB8 }, + { 0x2CBB, 0x2CBA }, + { 0x2CBD, 0x2CBC }, + { 0x2CBF, 0x2CBE }, + { 0x2CC1, 0x2CC0 }, + { 0x2CC3, 0x2CC2 }, + { 0x2CC5, 0x2CC4 }, + { 0x2CC7, 0x2CC6 }, + { 0x2CC9, 0x2CC8 }, + { 0x2CCB, 0x2CCA }, + { 0x2CCD, 0x2CCC }, + { 0x2CCF, 0x2CCE }, + { 0x2CD1, 0x2CD0 }, + { 0x2CD3, 0x2CD2 }, + { 0x2CD5, 0x2CD4 }, + { 0x2CD7, 0x2CD6 }, + { 0x2CD9, 0x2CD8 }, + { 0x2CDB, 0x2CDA }, + { 0x2CDD, 0x2CDC }, + { 0x2CDF, 0x2CDE }, + { 0x2CE1, 0x2CE0 }, + { 0x2CE3, 0x2CE2 }, + { 0x2D00, 0x10A0 }, + { 0x2D01, 0x10A1 }, + { 0x2D02, 0x10A2 }, + { 0x2D03, 0x10A3 }, + { 0x2D04, 0x10A4 }, + { 0x2D05, 0x10A5 }, + { 0x2D06, 0x10A6 }, + { 0x2D07, 0x10A7 }, + { 0x2D08, 0x10A8 }, + { 0x2D09, 0x10A9 }, + { 0x2D0A, 0x10AA }, + { 0x2D0B, 0x10AB }, + { 0x2D0C, 0x10AC }, + { 0x2D0D, 0x10AD }, + { 0x2D0E, 0x10AE }, + { 0x2D0F, 0x10AF }, + { 0x2D10, 0x10B0 }, + { 0x2D11, 0x10B1 }, + { 0x2D12, 0x10B2 }, + { 0x2D13, 0x10B3 }, + { 0x2D14, 0x10B4 }, + { 0x2D15, 0x10B5 }, + { 0x2D16, 0x10B6 }, + { 0x2D17, 0x10B7 }, + { 0x2D18, 0x10B8 }, + { 0x2D19, 0x10B9 }, + { 0x2D1A, 0x10BA }, + { 0x2D1B, 0x10BB }, + { 0x2D1C, 0x10BC }, + { 0x2D1D, 0x10BD }, + { 0x2D1E, 0x10BE }, + { 0x2D1F, 0x10BF }, + { 0x2D20, 0x10C0 }, + { 0x2D21, 0x10C1 }, + { 0x2D22, 0x10C2 }, + { 0x2D23, 0x10C3 }, + { 0x2D24, 0x10C4 }, + { 0x2D25, 0x10C5 }, + { 0xA641, 0xA640 }, + { 0xA643, 0xA642 }, + { 0xA645, 0xA644 }, + { 0xA647, 0xA646 }, + { 0xA649, 0xA648 }, + { 0xA64B, 0xA64A }, + { 0xA64D, 0xA64C }, + { 0xA64F, 0xA64E }, + { 0xA651, 0xA650 }, + { 0xA653, 0xA652 }, + { 0xA655, 0xA654 }, + { 0xA657, 0xA656 }, + { 0xA659, 0xA658 }, + { 0xA65B, 0xA65A }, + { 0xA65D, 0xA65C }, + { 0xA65F, 0xA65E }, + { 0xA663, 0xA662 }, + { 0xA665, 0xA664 }, + { 0xA667, 0xA666 }, + { 0xA669, 0xA668 }, + { 0xA66B, 0xA66A }, + { 0xA66D, 0xA66C }, + { 0xA681, 0xA680 }, + { 0xA683, 0xA682 }, + { 0xA685, 0xA684 }, + { 0xA687, 0xA686 }, + { 0xA689, 0xA688 }, + { 0xA68B, 0xA68A }, + { 0xA68D, 0xA68C }, + { 0xA68F, 0xA68E }, + { 0xA691, 0xA690 }, + { 0xA693, 0xA692 }, + { 0xA695, 0xA694 }, + { 0xA697, 0xA696 }, + { 0xA723, 0xA722 }, + { 0xA725, 0xA724 }, + { 0xA727, 0xA726 }, + { 0xA729, 0xA728 }, + { 0xA72B, 0xA72A }, + { 0xA72D, 0xA72C }, + { 0xA72F, 0xA72E }, + { 0xA733, 0xA732 }, + { 0xA735, 0xA734 }, + { 0xA737, 0xA736 }, + { 0xA739, 0xA738 }, + { 0xA73B, 0xA73A }, + { 0xA73D, 0xA73C }, + { 0xA73F, 0xA73E }, + { 0xA741, 0xA740 }, + { 0xA743, 0xA742 }, + { 0xA745, 0xA744 }, + { 0xA747, 0xA746 }, + { 0xA749, 0xA748 }, + { 0xA74B, 0xA74A }, + { 0xA74D, 0xA74C }, + { 0xA74F, 0xA74E }, + { 0xA751, 0xA750 }, + { 0xA753, 0xA752 }, + { 0xA755, 0xA754 }, + { 0xA757, 0xA756 }, + { 0xA759, 0xA758 }, + { 0xA75B, 0xA75A }, + { 0xA75D, 0xA75C }, + { 0xA75F, 0xA75E }, + { 0xA761, 0xA760 }, + { 0xA763, 0xA762 }, + { 0xA765, 0xA764 }, + { 0xA767, 0xA766 }, + { 0xA769, 0xA768 }, + { 0xA76B, 0xA76A }, + { 0xA76D, 0xA76C }, + { 0xA76F, 0xA76E }, + { 0xA77A, 0xA779 }, + { 0xA77C, 0xA77B }, + { 0xA77F, 0xA77E }, + { 0xA781, 0xA780 }, + { 0xA783, 0xA782 }, + { 0xA785, 0xA784 }, + { 0xA787, 0xA786 }, + { 0xA78C, 0xA78B }, + { 0xFF41, 0xFF21 }, + { 0xFF42, 0xFF22 }, + { 0xFF43, 0xFF23 }, + { 0xFF44, 0xFF24 }, + { 0xFF45, 0xFF25 }, + { 0xFF46, 0xFF26 }, + { 0xFF47, 0xFF27 }, + { 0xFF48, 0xFF28 }, + { 0xFF49, 0xFF29 }, + { 0xFF4A, 0xFF2A }, + { 0xFF4B, 0xFF2B }, + { 0xFF4C, 0xFF2C }, + { 0xFF4D, 0xFF2D }, + { 0xFF4E, 0xFF2E }, + { 0xFF4F, 0xFF2F }, + { 0xFF50, 0xFF30 }, + { 0xFF51, 0xFF31 }, + { 0xFF52, 0xFF32 }, + { 0xFF53, 0xFF33 }, + { 0xFF54, 0xFF34 }, + { 0xFF55, 0xFF35 }, + { 0xFF56, 0xFF36 }, + { 0xFF57, 0xFF37 }, + { 0xFF58, 0xFF38 }, + { 0xFF59, 0xFF39 }, + { 0xFF5A, 0xFF3A }, + { 0x10428, 0x10400 }, + { 0x10429, 0x10401 }, + { 0x1042A, 0x10402 }, + { 0x1042B, 0x10403 }, + { 0x1042C, 0x10404 }, + { 0x1042D, 0x10405 }, + { 0x1042E, 0x10406 }, + { 0x1042F, 0x10407 }, + { 0x10430, 0x10408 }, + { 0x10431, 0x10409 }, + { 0x10432, 0x1040A }, + { 0x10433, 0x1040B }, + { 0x10434, 0x1040C }, + { 0x10435, 0x1040D }, + { 0x10436, 0x1040E }, + { 0x10437, 0x1040F }, + { 0x10438, 0x10410 }, + { 0x10439, 0x10411 }, + { 0x1043A, 0x10412 }, + { 0x1043B, 0x10413 }, + { 0x1043C, 0x10414 }, + { 0x1043D, 0x10415 }, + { 0x1043E, 0x10416 }, + { 0x1043F, 0x10417 }, + { 0x10440, 0x10418 }, + { 0x10441, 0x10419 }, + { 0x10442, 0x1041A }, + { 0x10443, 0x1041B }, + { 0x10444, 0x1041C }, + { 0x10445, 0x1041D }, + { 0x10446, 0x1041E }, + { 0x10447, 0x1041F }, + { 0x10448, 0x10420 }, + { 0x10449, 0x10421 }, + { 0x1044A, 0x10422 }, + { 0x1044B, 0x10423 }, + { 0x1044C, 0x10424 }, + { 0x1044D, 0x10425 }, + { 0x1044E, 0x10426 }, + { 0x1044F, 0x10427 } + +#define MAP(c) uc_toupper (c) +#include "test-mapping-part2.h" diff --git a/tests/unicase/test-ulc-casecmp.c b/tests/unicase/test-ulc-casecmp.c new file mode 100644 index 00000000..5450ef31 --- /dev/null +++ b/tests/unicase/test-ulc-casecmp.c @@ -0,0 +1,408 @@ +/* Test of case and normalization insensitive comparison of strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT char +#include "test-casecmp.h" +#undef UNIT + +static void +test_iso_8859_1 (int (*my_casecmp) (const char *, size_t, const char *, size_t, const char *, uninorm_t, int *)) +{ + { + static const char input1[] = { 'H', 0xF6, 'h', 'l', 'e' }; + static const char input2[] = { 'H', 0xD6, 'h', 'L', 'e' }; + static const char input3[] = { 'H', 0xF6, 'h', 'l', 'e', 'n' }; + static const char input4[] = { 'H', 0xD6, 'h', 'L', 'e', 'n' }; + static const char input5[] = { 'H', 'u', 'r', 'z' }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const char input1[] = { 0x68, 0x65, 0x69, 0xDF }; + static const char input2[] = { 0x68, 0x65, 0x69, 0x73, 0x73 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + } +} + +static void +test_utf_8 (int (*my_casecmp) (const char *, size_t, const char *, size_t, const char *, uninorm_t, int *)) +{ + /* Normalization effects. */ + { + static const char input1[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e' }; + static const char input2[] = { 'H', 'O', 0xCC, 0x88, 'h', 'L', 'e' }; + static const char input3[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e', 'n' }; + static const char input4[] = { 'H', 'O', 0xCC, 0x88, 'h', 'L', 'e', 'n' }; + static const char input5[] = { 'H', 'u', 'r', 'z' }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input1, SIZEOF (input1), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input3, SIZEOF (input3), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input4, SIZEOF (input4), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input4, SIZEOF (input4), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input5, SIZEOF (input5), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const char input1[] = { 0xC3, 0x84 }; + static const char input2[] = { 0x41, 0xCC, 0x88 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const char input1[] = { 0xC7, 0x9E }; + static const char input2[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const char input1[] = { 0xE1, 0xBF, 0x81 }; + static const char input2[] = { 0xC2, 0xA8, 0xCD, 0x82 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEUL */ + static const char input1[] = { 0xEA, 0xB8, 0x80 }; + static const char input2[] = { 0xEA, 0xB7, 0xB8, 0xE1, 0x86, 0xAF }; + static const char input3[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEU */ + static const char input1[] = { 0xEA, 0xB7, 0xB8 }; + static const char input2[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Simple string. */ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const char input1[] = + { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', ' ', + 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, + 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, + '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', + 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + static const char input2[] = + { 'g', 'r', 0xC3, 0xBC, 0x73, 0x73, ' ', 'g', 'o', 't', 't', '.', ' ', + 0xD0, 0xB7, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, 0x81, + 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5, + '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, 's', 'q', 'r', 't', '(', + 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + static const char input3[] = + { 'G', 'R', 0xC3, 0x9C, 0x53, 0x53, ' ', 'G', 'O', 'T', 'T', '.', ' ', + 0xD0, 0x97, 0xD0, 0x94, 0xD0, 0xA0, 0xD0, 0x90, 0xD0, 0x92, 0xD0, 0xA1, + 0xD0, 0xA2, 0xD0, 0x92, 0xD0, 0xA3, 0xD0, 0x99, 0xD0, 0xA2, 0xD0, 0x95, + '!', ' ', 'X', '=', '(', '-', 'B', 0xC2, 0xB1, 'S', 'Q', 'R', 'T', '(', + 'B', 0xC2, 0xB2, '-', '4', 'A', 'C', ')', ')', '/', '(', '2', 'A', ')', + ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, 0xE8, 0xAA, 0x9E, ',', + 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, 0xEA, 0xB8, 0x80, '\n' + }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mapping can increase the number of Unicode characters. */ + { /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE */ + static const char input1[] = { 0xC5, 0x89 }; + static const char input2[] = { 0xCA, 0xBC, 0x6E }; + static const char input3[] = { 0xCA, 0xBC, 0x4E }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ + static const char input1[] = { 0xCE, 0x90 }; + static const char input2[] = { 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Turkish letters i İ ı I */ + { /* LATIN CAPITAL LETTER I */ + static const char input[] = { 0x49 }; + static const char casefolded[] = { 0x69 }; + static const char casefolded_tr[] = { 0xC4, 0xB1 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN SMALL LETTER I */ + static const char input[] = { 0x69 }; + static const char casefolded[] = { 0x49 }; + static const char casefolded_tr[] = { 0xC4, 0xB0 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + static const char input[] = { 0xC4, 0xB0 }; + static const char casefolded[] = { 0x69, 0xCC, 0x87 }; + static const char casefolded_tr[] = { 0x69 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_tr, SIZEOF (casefolded_tr), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN SMALL LETTER DOTLESS I */ + static const char input[] = { 0xC4, 0xB1 }; + static const char casefolded[] = { 0x49 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 1); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* "topkapı" */ + static const char input[] = + { 0x54, 0x4F, 0x50, 0x4B, 0x41, 0x50, 0x49 }; + static const char casefolded[] = + { 0x74, 0x6F, 0x70, 0x6B, 0x61, 0x70, 0xC4, 0xB1 }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), "tr", NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Uppercasing can increase the number of Unicode characters. */ + { /* "heiß" */ + static const char input1[] = { 0x68, 0x65, 0x69, 0xC3, 0x9F }; + static const char input2[] = { 0x68, 0x65, 0x69, 0x73, 0x73 }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mappings for some characters can depend on the surrounding characters. */ + { /* "περισσότερες πληροφορίες" */ + static const char input1[] = + { + 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, + 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x82, + ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, + 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x82 + }; + static const char input2[] = + { + 0xCF, 0x80, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB9, 0xCF, 0x83, 0xCF, 0x83, + 0xCF, 0x8C, 0xCF, 0x84, 0xCE, 0xB5, 0xCF, 0x81, 0xCE, 0xB5, 0xCF, 0x83, + ' ', 0xCF, 0x80, 0xCE, 0xBB, 0xCE, 0xB7, 0xCF, 0x81, 0xCE, 0xBF, + 0xCF, 0x86, 0xCE, 0xBF, 0xCF, 0x81, 0xCE, 0xAF, 0xCE, 0xB5, 0xCF, 0x83 + }; + static const char input3[] = + { + 0xCE, 0xA0, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x99, 0xCE, 0xA3, 0xCE, 0xA3, + 0xCE, 0x8C, 0xCE, 0xA4, 0xCE, 0x95, 0xCE, 0xA1, 0xCE, 0x95, 0xCE, 0xA3, + ' ', 0xCE, 0xA0, 0xCE, 0x9B, 0xCE, 0x97, 0xCE, 0xA1, 0xCE, 0x9F, + 0xCE, 0xA6, 0xCE, 0x9F, 0xCE, 0xA1, 0xCE, 0x8A, 0xCE, 0x95, 0xCE, 0xA3 + }; + int cmp; + + ASSERT (my_casecmp (input1, SIZEOF (input1), input2, SIZEOF (input2), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input1, SIZEOF (input1), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input2, SIZEOF (input2), input3, SIZEOF (input3), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Case mapping can require subsequent normalization. */ + { /* LATIN SMALL LETTER J WITH CARON, COMBINING DOT BELOW */ + static const char input[] = { 0xC7, 0xB0, 0xCC, 0xA3 }; + static const char casefolded[] = { 0x6A, 0xCC, 0x8C, 0xCC, 0xA3 }; + static const char casefolded_decomposed[] = { 0x6A, 0xCC, 0xA3, 0xCC, 0x8C }; + int cmp; + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, NULL, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, NULL, &cmp) == 0); + ASSERT (cmp != 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded, SIZEOF (casefolded), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_casecmp (input, SIZEOF (input), casefolded_decomposed, SIZEOF (casefolded_decomposed), NULL, UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } +} + +int +main (int argc, char *argv[]) +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + test_ascii (ulc_casecmp, UNINORM_NFD); + + if (argc > 1) + switch (argv[1][0]) + { + case '1': + /* Locale encoding is ISO-8859-1 or ISO-8859-15. */ + test_iso_8859_1 (ulc_casecmp); + return 0; + + case '2': + /* Locale encoding is UTF-8. */ + test_utf_8 (ulc_casecmp); + return 0; + } + + return 1; +} diff --git a/tests/unicase/test-ulc-casecmp1.sh b/tests/unicase/test-ulc-casecmp1.sh new file mode 100755 index 00000000..7be2cca1 --- /dev/null +++ b/tests/unicase/test-ulc-casecmp1.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR \ +./test-ulc-casecmp${EXEEXT} 1 diff --git a/tests/unicase/test-ulc-casecmp2.sh b/tests/unicase/test-ulc-casecmp2.sh new file mode 100755 index 00000000..a7f06e88 --- /dev/null +++ b/tests/unicase/test-ulc-casecmp2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-ulc-casecmp${EXEEXT} 2 diff --git a/tests/unicase/test-ulc-casecoll.c b/tests/unicase/test-ulc-casecoll.c new file mode 100644 index 00000000..a0875f44 --- /dev/null +++ b/tests/unicase/test-ulc-casecoll.c @@ -0,0 +1,59 @@ +/* Test of locale dependent, case and normalization insensitive comparison of + strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "unicase.h" + +#include +#include +#include + +#include "uninorm.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define UNIT char +#include "test-casecmp.h" +#undef UNIT + +int +main () +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_casecoll + on ASCII strings should behave like strcasecmp. */ + test_ascii (ulc_casecoll, UNINORM_NFC); + + return 0; +} diff --git a/tests/unicase/test-ulc-casecoll1.sh b/tests/unicase/test-ulc-casecoll1.sh new file mode 100755 index 00000000..3760ed82 --- /dev/null +++ b/tests/unicase/test-ulc-casecoll1.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR \ +./test-ulc-casecoll${EXEEXT} diff --git a/tests/unicase/test-ulc-casecoll2.sh b/tests/unicase/test-ulc-casecoll2.sh new file mode 100755 index 00000000..b179a4c6 --- /dev/null +++ b/tests/unicase/test-ulc-casecoll2.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test whether a specific UTF-8 locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR_UTF8 \ +./test-ulc-casecoll${EXEEXT} diff --git a/tests/uniconv/test-u16-conv-from-enc.c b/tests/uniconv/test-u16-conv-from-enc.c new file mode 100644 index 00000000..ac7617b3 --- /dev/null +++ b/tests/uniconv/test-u16-conv-from-enc.c @@ -0,0 +1,232 @@ +/* Test of conversion to UTF-16 from legacy encodings. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Magic number for detecting bounds violations. */ +#define MAGIC 0x1983EFF1 + +static size_t * +new_offsets (size_t n) +{ + size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); + offsets[n] = MAGIC; + return offsets; +} + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + size_t o; + size_t i; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from ISO-8859-1 to UTF-16 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const uint16_t expected[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ + { + 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', + 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', + 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint16_t *result = u16_conv_from_encoding ("ISO-8859-1", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == SIZEOF (expected)); + ASSERT (u16_cmp (result, expected, SIZEOF (expected)) == 0); + if (o) + { + for (i = 0; i < 37; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[37] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from ISO-8859-2 to UTF-16 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + static const uint16_t expected[] = + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i' + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint16_t *result = u16_conv_from_encoding ("ISO-8859-2", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == SIZEOF (expected)); + ASSERT (u16_cmp (result, expected, SIZEOF (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ +# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__) + /* Test conversions from autodetect_jp to UTF-16. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ + static const uint16_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint16_t *result = u16_conv_from_encoding ("autodetect_jp", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == SIZEOF (expected)); + ASSERT (u16_cmp (result, expected, SIZEOF (expected)) == 0); + if (o) + { + for (i = 0; i < 10; i++) + ASSERT (offsets[i] == ((i % 2) == 0 ? i / 2 : (size_t)(-1))); + ASSERT (offsets[10] == MAGIC); + free (offsets); + } + free (result); + } + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ + static const uint16_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint16_t *result = u16_conv_from_encoding ("autodetect_jp", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == SIZEOF (expected)); + ASSERT (u16_cmp (result, expected, SIZEOF (expected)) == 0); + if (o) + { + for (i = 0; i < 10; i++) + ASSERT (offsets[i] == ((i % 2) == 0 ? i / 2 : (size_t)(-1))); + ASSERT (offsets[10] == MAGIC); + free (offsets); + } + free (result); + } + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ + static const uint16_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint16_t *result = u16_conv_from_encoding ("autodetect_jp", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == SIZEOF (expected)); + ASSERT (u16_cmp (result, expected, SIZEOF (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == (i == 0 ? 0 : + i == 5 ? 1 : + i == 7 ? 2 : + i == 9 ? 3 : + i == 11 ? 4 : + i == 13 ? 5 : + (size_t)(-1))); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + } +# endif + +#endif + + return 0; +} diff --git a/tests/uniconv/test-u16-conv-to-enc.c b/tests/uniconv/test-u16-conv-to-enc.c new file mode 100644 index 00000000..a2dc3c68 --- /dev/null +++ b/tests/uniconv/test-u16-conv-to-enc.c @@ -0,0 +1,188 @@ +/* Test of conversion from UTF-16 to legacy encodings. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Magic number for detecting bounds violations. */ +#define MAGIC 0x1983EFF1 + +static size_t * +new_offsets (size_t n) +{ + size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); + offsets[n] = MAGIC; + return offsets; +} + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + size_t o; + size_t i; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from UTF-16 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint16_t input[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ + { + 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', + 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', + 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF + }; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (SIZEOF (input)) : NULL); + size_t length; + char *result = u16_conv_to_encoding ("ISO-8859-1", handler, + input, SIZEOF (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == strlen (expected)); + ASSERT (memcmp (result, expected, length) == 0); + if (o) + { + for (i = 0; i < 37; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[37] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from UTF-16 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint16_t input[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i' + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (SIZEOF (input)) : NULL); + size_t length = 0xdead; + char *result = u16_conv_to_encoding ("ISO-8859-1", handler, + input, SIZEOF (input), + offsets, + NULL, &length); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL); + ASSERT (errno == EILSEQ); + ASSERT (length == 0xdead); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + static const char expected_translit[] = "Rafal Maszkowski"; + ASSERT (result != NULL); + ASSERT (length == strlen (expected)); + ASSERT (memcmp (result, expected, length) == 0 + || memcmp (result, expected_translit, length) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (result != NULL); + ASSERT (length == strlen (expected)); + ASSERT (memcmp (result, expected, length) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == (i < 5 ? i : i + 5)); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + break; + } + } + } + + /* Test conversion from UTF-16 to ISO-8859-1 with EINVAL. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint16_t input[] = { 0xD845 }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (SIZEOF (input)) : NULL); + size_t length; + char *result = u16_conv_to_encoding ("ISO-8859-1", handler, + input, SIZEOF (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == strlen ("")); + if (o) + { + ASSERT (offsets[0] == 0); + ASSERT (offsets[1] == MAGIC); + free (offsets); + } + free (result); + } + } + +#endif + + return 0; +} diff --git a/tests/uniconv/test-u16-strconv-from-enc.c b/tests/uniconv/test-u16-strconv-from-enc.c new file mode 100644 index 00000000..f2f173a8 --- /dev/null +++ b/tests/uniconv/test-u16-strconv-from-enc.c @@ -0,0 +1,132 @@ +/* Test of conversion to UTF-16 from legacy encodings. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from ISO-8859-1 to UTF-16 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const uint16_t expected[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ + { + 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', + 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', + 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF, 0 + }; + uint16_t *result = u16_strconv_from_encoding (input, "ISO-8859-1", handler); + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from ISO-8859-2 to UTF-16 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + static const uint16_t expected[] = + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + uint16_t *result = u16_strconv_from_encoding (input, "ISO-8859-2", handler); + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ +# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__) + /* Test conversions from autodetect_jp to UTF-16. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ + static const uint16_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 + }; + uint16_t *result = u16_strconv_from_encoding (input, "autodetect_jp", handler); + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ + static const uint16_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 + }; + uint16_t *result = u16_strconv_from_encoding (input, "autodetect_jp", handler); + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ + static const uint16_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 + }; + uint16_t *result = u16_strconv_from_encoding (input, "autodetect_jp", handler); + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } +# endif + +#endif + + return 0; +} diff --git a/tests/uniconv/test-u16-strconv-to-enc.c b/tests/uniconv/test-u16-strconv-to-enc.c new file mode 100644 index 00000000..95a72065 --- /dev/null +++ b/tests/uniconv/test-u16-strconv-to-enc.c @@ -0,0 +1,121 @@ +/* Test of conversion from UTF-16 to legacy encodings. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from UTF-16 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint16_t input[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ + { + 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', + 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', + 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF, 0 + }; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = u16_strconv_to_encoding (input, "ISO-8859-1", handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-16 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint16_t input[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + char *result = u16_strconv_to_encoding (input, "ISO-8859-1", handler); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL && errno == EILSEQ); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + static const char expected_translit[] = "Rafal Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0 + || strcmp (result, expected_translit) == 0); + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + } + } + +# if 0 + /* Test conversion from UTF-16 to ISO-8859-1 with EINVAL. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint16_t input[] = { 0xD845, 0 }; + char *result = u16_strconv_to_encoding (input, "ISO-8859-1", handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, "") == 0); + free (result); + } +# endif + +#endif + + return 0; +} diff --git a/tests/uniconv/test-u32-conv-from-enc.c b/tests/uniconv/test-u32-conv-from-enc.c new file mode 100644 index 00000000..8f709f18 --- /dev/null +++ b/tests/uniconv/test-u32-conv-from-enc.c @@ -0,0 +1,232 @@ +/* Test of conversion to UTF-32 from legacy encodings. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Magic number for detecting bounds violations. */ +#define MAGIC 0x1983EFF1 + +static size_t * +new_offsets (size_t n) +{ + size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); + offsets[n] = MAGIC; + return offsets; +} + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + size_t o; + size_t i; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from ISO-8859-1 to UTF-16 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const uint32_t expected[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ + { + 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', + 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', + 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint32_t *result = u32_conv_from_encoding ("ISO-8859-1", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == SIZEOF (expected)); + ASSERT (u32_cmp (result, expected, SIZEOF (expected)) == 0); + if (o) + { + for (i = 0; i < 37; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[37] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from ISO-8859-2 to UTF-16 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + static const uint32_t expected[] = + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i' + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint32_t *result = u32_conv_from_encoding ("ISO-8859-2", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == SIZEOF (expected)); + ASSERT (u32_cmp (result, expected, SIZEOF (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ +# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__) + /* Test conversions from autodetect_jp to UTF-16. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ + static const uint32_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint32_t *result = u32_conv_from_encoding ("autodetect_jp", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == SIZEOF (expected)); + ASSERT (u32_cmp (result, expected, SIZEOF (expected)) == 0); + if (o) + { + for (i = 0; i < 10; i++) + ASSERT (offsets[i] == ((i % 2) == 0 ? i / 2 : (size_t)(-1))); + ASSERT (offsets[10] == MAGIC); + free (offsets); + } + free (result); + } + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ + static const uint32_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint32_t *result = u32_conv_from_encoding ("autodetect_jp", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == SIZEOF (expected)); + ASSERT (u32_cmp (result, expected, SIZEOF (expected)) == 0); + if (o) + { + for (i = 0; i < 10; i++) + ASSERT (offsets[i] == ((i % 2) == 0 ? i / 2 : (size_t)(-1))); + ASSERT (offsets[10] == MAGIC); + free (offsets); + } + free (result); + } + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ + static const uint32_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint32_t *result = u32_conv_from_encoding ("autodetect_jp", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == SIZEOF (expected)); + ASSERT (u32_cmp (result, expected, SIZEOF (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == (i == 0 ? 0 : + i == 5 ? 1 : + i == 7 ? 2 : + i == 9 ? 3 : + i == 11 ? 4 : + i == 13 ? 5 : + (size_t)(-1))); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + } +# endif + +#endif + + return 0; +} diff --git a/tests/uniconv/test-u32-conv-to-enc.c b/tests/uniconv/test-u32-conv-to-enc.c new file mode 100644 index 00000000..585b737c --- /dev/null +++ b/tests/uniconv/test-u32-conv-to-enc.c @@ -0,0 +1,163 @@ +/* Test of conversion from UTF-32 to legacy encodings. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Magic number for detecting bounds violations. */ +#define MAGIC 0x1983EFF1 + +static size_t * +new_offsets (size_t n) +{ + size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); + offsets[n] = MAGIC; + return offsets; +} + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + size_t o; + size_t i; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from UTF-32 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint32_t input[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ + { + 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', + 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', + 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF + }; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (SIZEOF (input)) : NULL); + size_t length; + char *result = u32_conv_to_encoding ("ISO-8859-1", handler, + input, SIZEOF (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == strlen (expected)); + ASSERT (memcmp (result, expected, length) == 0); + if (o) + { + for (i = 0; i < 37; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[37] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from UTF-32 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint32_t input[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i' + }; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (SIZEOF (input)) : NULL); + size_t length = 0xdead; + char *result = u32_conv_to_encoding ("ISO-8859-1", handler, + input, SIZEOF (input), + offsets, + NULL, &length); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL); + ASSERT (errno == EILSEQ); + ASSERT (length == 0xdead); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + static const char expected_translit[] = "Rafal Maszkowski"; + ASSERT (result != NULL); + ASSERT (length == strlen (expected)); + ASSERT (memcmp (result, expected, length) == 0 + || memcmp (result, expected_translit, length) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == i); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (result != NULL); + ASSERT (length == strlen (expected)); + ASSERT (memcmp (result, expected, length) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == (i < 5 ? i : i + 5)); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + break; + } + } + } + +#endif + + return 0; +} diff --git a/tests/uniconv/test-u32-strconv-from-enc.c b/tests/uniconv/test-u32-strconv-from-enc.c new file mode 100644 index 00000000..96af7385 --- /dev/null +++ b/tests/uniconv/test-u32-strconv-from-enc.c @@ -0,0 +1,132 @@ +/* Test of conversion to UTF-32 from legacy encodings. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from ISO-8859-1 to UTF-16 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const uint32_t expected[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ + { + 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', + 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', + 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF, 0 + }; + uint32_t *result = u32_strconv_from_encoding (input, "ISO-8859-1", handler); + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from ISO-8859-2 to UTF-16 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + static const uint32_t expected[] = + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + uint32_t *result = u32_strconv_from_encoding (input, "ISO-8859-2", handler); + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ +# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__) + /* Test conversions from autodetect_jp to UTF-16. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ + static const uint32_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 + }; + uint32_t *result = u32_strconv_from_encoding (input, "autodetect_jp", handler); + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ + static const uint32_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 + }; + uint32_t *result = u32_strconv_from_encoding (input, "autodetect_jp", handler); + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ + static const uint32_t expected[] = /* こんにちは */ + { + 0x3053, 0x3093, 0x306B, 0x3061, 0x306F, 0 + }; + uint32_t *result = u32_strconv_from_encoding (input, "autodetect_jp", handler); + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } +# endif + +#endif + + return 0; +} diff --git a/tests/uniconv/test-u32-strconv-to-enc.c b/tests/uniconv/test-u32-strconv-to-enc.c new file mode 100644 index 00000000..eef3d04d --- /dev/null +++ b/tests/uniconv/test-u32-strconv-to-enc.c @@ -0,0 +1,108 @@ +/* Test of conversion from UTF-32 to legacy encodings. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from UTF-32 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint32_t input[] = /* Ärger mit bösen Bübchen ohne Augenmaß */ + { + 0xC4, 'r', 'g', 'e', 'r', ' ', 'm', 'i', 't', ' ', 'b', 0xF6, 's', + 'e', 'n', ' ', 'B', 0xFC, 'b', 'c', 'h', 'e', 'n', ' ', 'o', 'h', + 'n', 'e', ' ', 'A', 'u', 'g', 'e', 'n', 'm', 'a', 0xDF, 0 + }; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = u32_strconv_to_encoding (input, "ISO-8859-1", handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-32 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint32_t input[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + char *result = u32_strconv_to_encoding (input, "ISO-8859-1", handler); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL && errno == EILSEQ); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + static const char expected_translit[] = "Rafal Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0 + || strcmp (result, expected_translit) == 0); + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + } + } + +#endif + + return 0; +} diff --git a/tests/uniconv/test-u8-conv-from-enc.c b/tests/uniconv/test-u8-conv-from-enc.c new file mode 100644 index 00000000..0768be63 --- /dev/null +++ b/tests/uniconv/test-u8-conv-from-enc.c @@ -0,0 +1,218 @@ +/* Test of conversion to UTF-8 from legacy encodings. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Magic number for detecting bounds violations. */ +#define MAGIC 0x1983EFF1 + +static size_t * +new_offsets (size_t n) +{ + size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); + offsets[n] = MAGIC; + return offsets; +} + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + size_t o; + size_t i; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const uint8_t expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint8_t *result = u8_conv_from_encoding ("ISO-8859-1", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == u8_strlen (expected)); + ASSERT (u8_cmp (result, expected, u8_strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 37; i++) + ASSERT (offsets[i] == (i < 1 ? i : + i < 12 ? i + 1 : + i < 18 ? i + 2 : + i + 3)); + ASSERT (offsets[37] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from ISO-8859-2 to UTF-8 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + static const uint8_t expected[] = "Rafa\305\202 Maszkowski"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint8_t *result = u8_conv_from_encoding ("ISO-8859-2", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == u8_strlen (expected)); + ASSERT (u8_cmp (result, expected, u8_strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i + 1)); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ +# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__) + /* Test conversions from autodetect_jp to UTF-8. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ + static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint8_t *result = u8_conv_from_encoding ("autodetect_jp", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == u8_strlen (expected)); + ASSERT (u8_cmp (result, expected, u8_strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 10; i++) + ASSERT (offsets[i] == ((i % 2) == 0 ? (i / 2) * 3 : (size_t)(-1))); + ASSERT (offsets[10] == MAGIC); + free (offsets); + } + free (result); + } + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ + static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint8_t *result = u8_conv_from_encoding ("autodetect_jp", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == u8_strlen (expected)); + ASSERT (u8_cmp (result, expected, u8_strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 10; i++) + ASSERT (offsets[i] == ((i % 2) == 0 ? (i / 2) * 3 : (size_t)(-1))); + ASSERT (offsets[10] == MAGIC); + free (offsets); + } + free (result); + } + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ + static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (strlen (input)) : NULL); + size_t length; + uint8_t *result = u8_conv_from_encoding ("autodetect_jp", handler, + input, strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == u8_strlen (expected)); + ASSERT (u8_cmp (result, expected, u8_strlen (expected)) == 0); + if (o) + { + for (i = 0; i < 16; i++) + ASSERT (offsets[i] == (i == 0 ? 0 : + i == 5 ? 3 : + i == 7 ? 6 : + i == 9 ? 9 : + i == 11 ? 12 : + i == 13 ? 15 : + (size_t)(-1))); + ASSERT (offsets[16] == MAGIC); + free (offsets); + } + free (result); + } + } +# endif + +#endif + + return 0; +} diff --git a/tests/uniconv/test-u8-conv-to-enc.c b/tests/uniconv/test-u8-conv-to-enc.c new file mode 100644 index 00000000..271fb051 --- /dev/null +++ b/tests/uniconv/test-u8-conv-to-enc.c @@ -0,0 +1,193 @@ +/* Test of conversion from UTF-8 to legacy encodings. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* Magic number for detecting bounds violations. */ +#define MAGIC 0x1983EFF1 + +static size_t * +new_offsets (size_t n) +{ + size_t *offsets = (size_t *) malloc ((n + 1) * sizeof (size_t)); + offsets[n] = MAGIC; + return offsets; +} + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + size_t o; + size_t i; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint8_t input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (u8_strlen (input)) : NULL); + size_t length; + char *result = u8_conv_to_encoding ("ISO-8859-1", handler, + input, u8_strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == strlen (expected)); + ASSERT (memcmp (result, expected, length) == 0); + if (o) + { + for (i = 0; i < 41; i++) + ASSERT (offsets[i] == (i < 1 ? i : + i == 1 ? (size_t)(-1) : + i < 13 ? i - 1 : + i == 13 ? (size_t)(-1) : + i < 20 ? i - 2 : + i == 20 ? (size_t)(-1) : + i < 40 ? i - 3 : + i == 40 ? (size_t)(-1) : + i - 4)); + ASSERT (offsets[41] == MAGIC); + free (offsets); + } + free (result); + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint8_t input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (u8_strlen (input)) : NULL); + size_t length = 0xdead; + char *result = u8_conv_to_encoding ("ISO-8859-1", handler, + input, u8_strlen (input), + offsets, + NULL, &length); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL); + ASSERT (errno == EILSEQ); + ASSERT (length == 0xdead); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + static const char expected_translit[] = "Rafal Maszkowski"; + ASSERT (result != NULL); + ASSERT (length == strlen (expected)); + ASSERT (memcmp (result, expected, length) == 0 + || memcmp (result, expected_translit, length) == 0); + if (o) + { + for (i = 0; i < 17; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i == 5 ? (size_t)(-1) : + i - 1)); + ASSERT (offsets[17] == MAGIC); + free (offsets); + } + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (result != NULL); + ASSERT (length == strlen (expected)); + ASSERT (memcmp (result, expected, length) == 0); + if (o) + { + for (i = 0; i < 17; i++) + ASSERT (offsets[i] == (i < 5 ? i : + i == 5 ? (size_t)(-1) : + i + 4)); + ASSERT (offsets[17] == MAGIC); + free (offsets); + } + free (result); + } + break; + } + } + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint8_t input[] = "\342"; + for (o = 0; o < 2; o++) + { + size_t *offsets = (o ? new_offsets (u8_strlen (input)) : NULL); + size_t length; + char *result = u8_conv_to_encoding ("ISO-8859-1", handler, + input, u8_strlen (input), + offsets, + NULL, &length); + ASSERT (result != NULL); + ASSERT (length == strlen ("")); + if (o) + { + ASSERT (offsets[0] == 0); + ASSERT (offsets[1] == MAGIC); + free (offsets); + } + free (result); + } + } + +#endif + + return 0; +} diff --git a/tests/uniconv/test-u8-strconv-from-enc.c b/tests/uniconv/test-u8-strconv-from-enc.c new file mode 100644 index 00000000..7f70c297 --- /dev/null +++ b/tests/uniconv/test-u8-strconv-from-enc.c @@ -0,0 +1,114 @@ +/* Test of conversion to UTF-8 from legacy encodings. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from ISO-8859-1 to UTF-8 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + static const uint8_t expected[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + uint8_t *result = u8_strconv_from_encoding (input, "ISO-8859-1", handler); + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from ISO-8859-2 to UTF-8 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "Rafa\263 Maszkowski"; /* Rafał Maszkowski */ + static const uint8_t expected[] = "Rafa\305\202 Maszkowski"; + uint8_t *result = u8_strconv_from_encoding (input, "ISO-8859-2", handler); + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + /* autodetect_jp is only supported when iconv() support ISO-2022-JP-2. */ +# if defined _LIBICONV_VERSION || !(defined _AIX || defined __sgi || defined __hpux || defined __osf__) + /* Test conversions from autodetect_jp to UTF-8. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\244\263\244\363\244\313\244\301\244\317"; /* こんにちは in EUC-JP */ + static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + uint8_t *result = u8_strconv_from_encoding (input, "autodetect_jp", handler); + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\202\261\202\361\202\311\202\277\202\315"; /* こんにちは in Shift_JIS */ + static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + uint8_t *result = u8_strconv_from_encoding (input, "autodetect_jp", handler); + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const char input[] = "\033$B$3$s$K$A$O\033(B"; /* こんにちは in ISO-2022-JP-2 */ + static const uint8_t expected[] = "\343\201\223\343\202\223\343\201\253\343\201\241\343\201\257"; /* こんにちは */ + uint8_t *result = u8_strconv_from_encoding (input, "autodetect_jp", handler); + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } +# endif + +#endif + + return 0; +} diff --git a/tests/uniconv/test-u8-strconv-to-enc.c b/tests/uniconv/test-u8-strconv-to-enc.c new file mode 100644 index 00000000..73085b55 --- /dev/null +++ b/tests/uniconv/test-u8-strconv-to-enc.c @@ -0,0 +1,112 @@ +/* Test of conversion from UTF-8 to legacy encodings. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniconv.h" + +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + static enum iconv_ilseq_handler handlers[] = + { iconveh_error, iconveh_question_mark, iconveh_escape_sequence }; + size_t h; + +#if HAVE_ICONV + /* Assume that iconv() supports at least the encodings ASCII, ISO-8859-1, + ISO-8859-2, and UTF-8. */ + + /* Test conversion from UTF-8 to ISO-8859-1 with no errors. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint8_t input[] = "\303\204rger mit b\303\266sen B\303\274bchen ohne Augenma\303\237"; + static const char expected[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char *result = u8_strconv_to_encoding (input, "ISO-8859-1", handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + + /* Test conversion from UTF-8 to ISO-8859-1 with EILSEQ. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint8_t input[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ + char *result = u8_strconv_to_encoding (input, "ISO-8859-1", handler); + switch (handler) + { + case iconveh_error: + ASSERT (result == NULL && errno == EILSEQ); + break; + case iconveh_question_mark: + { + static const char expected[] = "Rafa? Maszkowski"; + static const char expected_translit[] = "Rafal Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0 + || strcmp (result, expected_translit) == 0); + free (result); + } + break; + case iconveh_escape_sequence: + { + static const char expected[] = "Rafa\\u0142 Maszkowski"; + ASSERT (result != NULL); + ASSERT (strcmp (result, expected) == 0); + free (result); + } + break; + } + } + +# if 0 + /* Test conversion from UTF-8 to ISO-8859-1 with EINVAL. */ + for (h = 0; h < SIZEOF (handlers); h++) + { + enum iconv_ilseq_handler handler = handlers[h]; + static const uint8_t input[] = "\342"; + char *result = u8_strconv_to_encoding (input, "ISO-8859-1", handler); + ASSERT (result != NULL); + ASSERT (strcmp (result, "") == 0); + free (result); + } +# endif + +#endif + + return 0; +} diff --git a/tests/unictype/test-bidi_byname.c b/tests/unictype/test-bidi_byname.c new file mode 100644 index 00000000..5b1cfec9 --- /dev/null +++ b/tests/unictype/test-bidi_byname.c @@ -0,0 +1,44 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (uc_bidi_category_byname ("NSM") == UC_BIDI_NSM); + ASSERT (uc_bidi_category_byname ("X") < 0); + + return 0; +} diff --git a/tests/unictype/test-bidi_name.c b/tests/unictype/test-bidi_name.c new file mode 100644 index 00000000..a444ec0c --- /dev/null +++ b/tests/unictype/test-bidi_name.c @@ -0,0 +1,44 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (strcmp (uc_bidi_category_name (UC_BIDI_NSM), "NSM") == 0); + ASSERT (uc_bidi_category_name (-1) == NULL); + + return 0; +} diff --git a/tests/unictype/test-bidi_of.c b/tests/unictype/test-bidi_of.c new file mode 100644 index 00000000..720e9f97 --- /dev/null +++ b/tests/unictype/test-bidi_of.c @@ -0,0 +1,45 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (uc_bidi_category ('x') == UC_BIDI_L); + ASSERT (uc_bidi_category (0x05D7) == UC_BIDI_R); + ASSERT (uc_bidi_category ('7') == UC_BIDI_EN); + + return 0; +} diff --git a/tests/unictype/test-bidi_test.c b/tests/unictype/test-bidi_test.c new file mode 100644 index 00000000..3404e72f --- /dev/null +++ b/tests/unictype/test-bidi_test.c @@ -0,0 +1,60 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (uc_is_bidi_category ('x', UC_BIDI_L)); + ASSERT (!uc_is_bidi_category ('x', UC_BIDI_R)); + ASSERT (!uc_is_bidi_category ('x', UC_BIDI_EN)); + + ASSERT (uc_is_bidi_category (0x05D7, UC_BIDI_R)); + ASSERT (!uc_is_bidi_category (0x05D7, UC_BIDI_L)); + ASSERT (!uc_is_bidi_category (0x05D7, UC_BIDI_EN)); + + ASSERT (uc_is_bidi_category ('7', UC_BIDI_EN)); + ASSERT (!uc_is_bidi_category ('7', UC_BIDI_L)); + ASSERT (!uc_is_bidi_category ('7', UC_BIDI_R)); + + { + unsigned int c; + + for (c = 0; c < 0x110000; c++) + ASSERT (uc_is_bidi_category (c, uc_bidi_category (c))); + } + + return 0; +} diff --git a/tests/unictype/test-block_list.c b/tests/unictype/test-block_list.c new file mode 100644 index 00000000..140b573f --- /dev/null +++ b/tests/unictype/test-block_list.c @@ -0,0 +1,62 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + const uc_block_t *blocks; + size_t nblocks; + + uc_all_blocks (&blocks, &nblocks); + + { + const uc_block_t *latin_block = NULL; + const uc_block_t *hebrew_block = NULL; + size_t i; + + for (i = 0; i < nblocks; i++) + { + if (strcmp (blocks[i].name, "Latin") == 0) + latin_block = &blocks[i]; + if (strcmp (blocks[i].name, "Hebrew") == 0) + hebrew_block = &blocks[i]; + } + ASSERT (latin_block == NULL); + ASSERT (hebrew_block != NULL); + } + + return 0; +} diff --git a/tests/unictype/test-block_of.c b/tests/unictype/test-block_of.c new file mode 100644 index 00000000..9460cdeb --- /dev/null +++ b/tests/unictype/test-block_of.c @@ -0,0 +1,79 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (strcmp (uc_block ('x')->name, "Basic Latin") == 0); + ASSERT (strcmp (uc_block (0x20AC)->name, "Currency Symbols") == 0); + + { + unsigned int c; + + for (c = 0; c < 0x110000; c++) + { + const uc_block_t *block = uc_block (c); + ASSERT (block == NULL || uc_is_block (c, block)); + } + } + + { + const uc_block_t *blocks; + size_t nblocks; + size_t i; + + uc_all_blocks (&blocks, &nblocks); + + for (i = 0; i < nblocks; i++) + { + if (strcmp (blocks[i].name, "Hebrew") == 0) + { + ASSERT (uc_block (0x05DE) == &blocks[i]); + ASSERT (uc_is_block (0x05DE, &blocks[i])); + } + } + + for (i = 0; i < nblocks; i++) + { + unsigned int c; + + for (c = blocks[i].start; c <= blocks[i].end; c++) + ASSERT (uc_block (c) == &blocks[i]); + } + } + + return 0; +} diff --git a/tests/unictype/test-block_test.c b/tests/unictype/test-block_test.c new file mode 100644 index 00000000..b086cde6 --- /dev/null +++ b/tests/unictype/test-block_test.c @@ -0,0 +1,54 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + uc_block_t b; + + b.start = 0x20000; + b.end = 0x2A6D6; + b.name = "CJK Supplemental Area"; + + ASSERT (!uc_is_block (0x5678, &b)); + ASSERT (!uc_is_block (0x1FFFF, &b)); + ASSERT (uc_is_block (0x20000, &b)); + ASSERT (uc_is_block (0x25678, &b)); + ASSERT (uc_is_block (0x2A6D6, &b)); + ASSERT (!uc_is_block (0x2A6D7, &b)); + + return 0; +} diff --git a/tests/unictype/test-categ_C.c b/tests/unictype/test-categ_C.c new file mode 100644 index 00000000..e057af87 --- /dev/null +++ b/tests/unictype/test-categ_C.c @@ -0,0 +1,469 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0000, 0x001F }, + { 0x007F, 0x009F }, + { 0x00AD, 0x00AD }, + { 0x0378, 0x0379 }, + { 0x037F, 0x0383 }, + { 0x038B, 0x038B }, + { 0x038D, 0x038D }, + { 0x03A2, 0x03A2 }, + { 0x0524, 0x0530 }, + { 0x0557, 0x0558 }, + { 0x0560, 0x0560 }, + { 0x0588, 0x0588 }, + { 0x058B, 0x0590 }, + { 0x05C8, 0x05CF }, + { 0x05EB, 0x05EF }, + { 0x05F5, 0x0605 }, + { 0x061C, 0x061D }, + { 0x0620, 0x0620 }, + { 0x065F, 0x065F }, + { 0x06DD, 0x06DD }, + { 0x070E, 0x070F }, + { 0x074B, 0x074C }, + { 0x07B2, 0x07BF }, + { 0x07FB, 0x0900 }, + { 0x093A, 0x093B }, + { 0x094E, 0x094F }, + { 0x0955, 0x0957 }, + { 0x0973, 0x097A }, + { 0x0980, 0x0980 }, + { 0x0984, 0x0984 }, + { 0x098D, 0x098E }, + { 0x0991, 0x0992 }, + { 0x09A9, 0x09A9 }, + { 0x09B1, 0x09B1 }, + { 0x09B3, 0x09B5 }, + { 0x09BA, 0x09BB }, + { 0x09C5, 0x09C6 }, + { 0x09C9, 0x09CA }, + { 0x09CF, 0x09D6 }, + { 0x09D8, 0x09DB }, + { 0x09DE, 0x09DE }, + { 0x09E4, 0x09E5 }, + { 0x09FB, 0x0A00 }, + { 0x0A04, 0x0A04 }, + { 0x0A0B, 0x0A0E }, + { 0x0A11, 0x0A12 }, + { 0x0A29, 0x0A29 }, + { 0x0A31, 0x0A31 }, + { 0x0A34, 0x0A34 }, + { 0x0A37, 0x0A37 }, + { 0x0A3A, 0x0A3B }, + { 0x0A3D, 0x0A3D }, + { 0x0A43, 0x0A46 }, + { 0x0A49, 0x0A4A }, + { 0x0A4E, 0x0A50 }, + { 0x0A52, 0x0A58 }, + { 0x0A5D, 0x0A5D }, + { 0x0A5F, 0x0A65 }, + { 0x0A76, 0x0A80 }, + { 0x0A84, 0x0A84 }, + { 0x0A8E, 0x0A8E }, + { 0x0A92, 0x0A92 }, + { 0x0AA9, 0x0AA9 }, + { 0x0AB1, 0x0AB1 }, + { 0x0AB4, 0x0AB4 }, + { 0x0ABA, 0x0ABB }, + { 0x0AC6, 0x0AC6 }, + { 0x0ACA, 0x0ACA }, + { 0x0ACE, 0x0ACF }, + { 0x0AD1, 0x0ADF }, + { 0x0AE4, 0x0AE5 }, + { 0x0AF0, 0x0AF0 }, + { 0x0AF2, 0x0B00 }, + { 0x0B04, 0x0B04 }, + { 0x0B0D, 0x0B0E }, + { 0x0B11, 0x0B12 }, + { 0x0B29, 0x0B29 }, + { 0x0B31, 0x0B31 }, + { 0x0B34, 0x0B34 }, + { 0x0B3A, 0x0B3B }, + { 0x0B45, 0x0B46 }, + { 0x0B49, 0x0B4A }, + { 0x0B4E, 0x0B55 }, + { 0x0B58, 0x0B5B }, + { 0x0B5E, 0x0B5E }, + { 0x0B64, 0x0B65 }, + { 0x0B72, 0x0B81 }, + { 0x0B84, 0x0B84 }, + { 0x0B8B, 0x0B8D }, + { 0x0B91, 0x0B91 }, + { 0x0B96, 0x0B98 }, + { 0x0B9B, 0x0B9B }, + { 0x0B9D, 0x0B9D }, + { 0x0BA0, 0x0BA2 }, + { 0x0BA5, 0x0BA7 }, + { 0x0BAB, 0x0BAD }, + { 0x0BBA, 0x0BBD }, + { 0x0BC3, 0x0BC5 }, + { 0x0BC9, 0x0BC9 }, + { 0x0BCE, 0x0BCF }, + { 0x0BD1, 0x0BD6 }, + { 0x0BD8, 0x0BE5 }, + { 0x0BFB, 0x0C00 }, + { 0x0C04, 0x0C04 }, + { 0x0C0D, 0x0C0D }, + { 0x0C11, 0x0C11 }, + { 0x0C29, 0x0C29 }, + { 0x0C34, 0x0C34 }, + { 0x0C3A, 0x0C3C }, + { 0x0C45, 0x0C45 }, + { 0x0C49, 0x0C49 }, + { 0x0C4E, 0x0C54 }, + { 0x0C57, 0x0C57 }, + { 0x0C5A, 0x0C5F }, + { 0x0C64, 0x0C65 }, + { 0x0C70, 0x0C77 }, + { 0x0C80, 0x0C81 }, + { 0x0C84, 0x0C84 }, + { 0x0C8D, 0x0C8D }, + { 0x0C91, 0x0C91 }, + { 0x0CA9, 0x0CA9 }, + { 0x0CB4, 0x0CB4 }, + { 0x0CBA, 0x0CBB }, + { 0x0CC5, 0x0CC5 }, + { 0x0CC9, 0x0CC9 }, + { 0x0CCE, 0x0CD4 }, + { 0x0CD7, 0x0CDD }, + { 0x0CDF, 0x0CDF }, + { 0x0CE4, 0x0CE5 }, + { 0x0CF0, 0x0CF0 }, + { 0x0CF3, 0x0D01 }, + { 0x0D04, 0x0D04 }, + { 0x0D0D, 0x0D0D }, + { 0x0D11, 0x0D11 }, + { 0x0D29, 0x0D29 }, + { 0x0D3A, 0x0D3C }, + { 0x0D45, 0x0D45 }, + { 0x0D49, 0x0D49 }, + { 0x0D4E, 0x0D56 }, + { 0x0D58, 0x0D5F }, + { 0x0D64, 0x0D65 }, + { 0x0D76, 0x0D78 }, + { 0x0D80, 0x0D81 }, + { 0x0D84, 0x0D84 }, + { 0x0D97, 0x0D99 }, + { 0x0DB2, 0x0DB2 }, + { 0x0DBC, 0x0DBC }, + { 0x0DBE, 0x0DBF }, + { 0x0DC7, 0x0DC9 }, + { 0x0DCB, 0x0DCE }, + { 0x0DD5, 0x0DD5 }, + { 0x0DD7, 0x0DD7 }, + { 0x0DE0, 0x0DF1 }, + { 0x0DF5, 0x0E00 }, + { 0x0E3B, 0x0E3E }, + { 0x0E5C, 0x0E80 }, + { 0x0E83, 0x0E83 }, + { 0x0E85, 0x0E86 }, + { 0x0E89, 0x0E89 }, + { 0x0E8B, 0x0E8C }, + { 0x0E8E, 0x0E93 }, + { 0x0E98, 0x0E98 }, + { 0x0EA0, 0x0EA0 }, + { 0x0EA4, 0x0EA4 }, + { 0x0EA6, 0x0EA6 }, + { 0x0EA8, 0x0EA9 }, + { 0x0EAC, 0x0EAC }, + { 0x0EBA, 0x0EBA }, + { 0x0EBE, 0x0EBF }, + { 0x0EC5, 0x0EC5 }, + { 0x0EC7, 0x0EC7 }, + { 0x0ECE, 0x0ECF }, + { 0x0EDA, 0x0EDB }, + { 0x0EDE, 0x0EFF }, + { 0x0F48, 0x0F48 }, + { 0x0F6D, 0x0F70 }, + { 0x0F8C, 0x0F8F }, + { 0x0F98, 0x0F98 }, + { 0x0FBD, 0x0FBD }, + { 0x0FCD, 0x0FCD }, + { 0x0FD5, 0x0FFF }, + { 0x109A, 0x109D }, + { 0x10C6, 0x10CF }, + { 0x10FD, 0x10FF }, + { 0x115A, 0x115E }, + { 0x11A3, 0x11A7 }, + { 0x11FA, 0x11FF }, + { 0x1249, 0x1249 }, + { 0x124E, 0x124F }, + { 0x1257, 0x1257 }, + { 0x1259, 0x1259 }, + { 0x125E, 0x125F }, + { 0x1289, 0x1289 }, + { 0x128E, 0x128F }, + { 0x12B1, 0x12B1 }, + { 0x12B6, 0x12B7 }, + { 0x12BF, 0x12BF }, + { 0x12C1, 0x12C1 }, + { 0x12C6, 0x12C7 }, + { 0x12D7, 0x12D7 }, + { 0x1311, 0x1311 }, + { 0x1316, 0x1317 }, + { 0x135B, 0x135E }, + { 0x137D, 0x137F }, + { 0x139A, 0x139F }, + { 0x13F5, 0x1400 }, + { 0x1677, 0x167F }, + { 0x169D, 0x169F }, + { 0x16F1, 0x16FF }, + { 0x170D, 0x170D }, + { 0x1715, 0x171F }, + { 0x1737, 0x173F }, + { 0x1754, 0x175F }, + { 0x176D, 0x176D }, + { 0x1771, 0x1771 }, + { 0x1774, 0x177F }, + { 0x17B4, 0x17B5 }, + { 0x17DE, 0x17DF }, + { 0x17EA, 0x17EF }, + { 0x17FA, 0x17FF }, + { 0x180F, 0x180F }, + { 0x181A, 0x181F }, + { 0x1878, 0x187F }, + { 0x18AB, 0x18FF }, + { 0x191D, 0x191F }, + { 0x192C, 0x192F }, + { 0x193C, 0x193F }, + { 0x1941, 0x1943 }, + { 0x196E, 0x196F }, + { 0x1975, 0x197F }, + { 0x19AA, 0x19AF }, + { 0x19CA, 0x19CF }, + { 0x19DA, 0x19DD }, + { 0x1A1C, 0x1A1D }, + { 0x1A20, 0x1AFF }, + { 0x1B4C, 0x1B4F }, + { 0x1B7D, 0x1B7F }, + { 0x1BAB, 0x1BAD }, + { 0x1BBA, 0x1BFF }, + { 0x1C38, 0x1C3A }, + { 0x1C4A, 0x1C4C }, + { 0x1C80, 0x1CFF }, + { 0x1DE7, 0x1DFD }, + { 0x1F16, 0x1F17 }, + { 0x1F1E, 0x1F1F }, + { 0x1F46, 0x1F47 }, + { 0x1F4E, 0x1F4F }, + { 0x1F58, 0x1F58 }, + { 0x1F5A, 0x1F5A }, + { 0x1F5C, 0x1F5C }, + { 0x1F5E, 0x1F5E }, + { 0x1F7E, 0x1F7F }, + { 0x1FB5, 0x1FB5 }, + { 0x1FC5, 0x1FC5 }, + { 0x1FD4, 0x1FD5 }, + { 0x1FDC, 0x1FDC }, + { 0x1FF0, 0x1FF1 }, + { 0x1FF5, 0x1FF5 }, + { 0x1FFF, 0x1FFF }, + { 0x200B, 0x200F }, + { 0x202A, 0x202E }, + { 0x2060, 0x206F }, + { 0x2072, 0x2073 }, + { 0x208F, 0x208F }, + { 0x2095, 0x209F }, + { 0x20B6, 0x20CF }, + { 0x20F1, 0x20FF }, + { 0x2150, 0x2152 }, + { 0x2189, 0x218F }, + { 0x23E8, 0x23FF }, + { 0x2427, 0x243F }, + { 0x244B, 0x245F }, + { 0x269E, 0x269F }, + { 0x26BD, 0x26BF }, + { 0x26C4, 0x2700 }, + { 0x2705, 0x2705 }, + { 0x270A, 0x270B }, + { 0x2728, 0x2728 }, + { 0x274C, 0x274C }, + { 0x274E, 0x274E }, + { 0x2753, 0x2755 }, + { 0x2757, 0x2757 }, + { 0x275F, 0x2760 }, + { 0x2795, 0x2797 }, + { 0x27B0, 0x27B0 }, + { 0x27BF, 0x27BF }, + { 0x27CB, 0x27CB }, + { 0x27CD, 0x27CF }, + { 0x2B4D, 0x2B4F }, + { 0x2B55, 0x2BFF }, + { 0x2C2F, 0x2C2F }, + { 0x2C5F, 0x2C5F }, + { 0x2C70, 0x2C70 }, + { 0x2C7E, 0x2C7F }, + { 0x2CEB, 0x2CF8 }, + { 0x2D26, 0x2D2F }, + { 0x2D66, 0x2D6E }, + { 0x2D70, 0x2D7F }, + { 0x2D97, 0x2D9F }, + { 0x2DA7, 0x2DA7 }, + { 0x2DAF, 0x2DAF }, + { 0x2DB7, 0x2DB7 }, + { 0x2DBF, 0x2DBF }, + { 0x2DC7, 0x2DC7 }, + { 0x2DCF, 0x2DCF }, + { 0x2DD7, 0x2DD7 }, + { 0x2DDF, 0x2DDF }, + { 0x2E31, 0x2E7F }, + { 0x2E9A, 0x2E9A }, + { 0x2EF4, 0x2EFF }, + { 0x2FD6, 0x2FEF }, + { 0x2FFC, 0x2FFF }, + { 0x3040, 0x3040 }, + { 0x3097, 0x3098 }, + { 0x3100, 0x3104 }, + { 0x312E, 0x3130 }, + { 0x318F, 0x318F }, + { 0x31B8, 0x31BF }, + { 0x31E4, 0x31EF }, + { 0x321F, 0x321F }, + { 0x3244, 0x324F }, + { 0x32FF, 0x32FF }, + { 0x4DB6, 0x4DBF }, + { 0x9FC4, 0x9FFF }, + { 0xA48D, 0xA48F }, + { 0xA4C7, 0xA4FF }, + { 0xA62C, 0xA63F }, + { 0xA660, 0xA661 }, + { 0xA674, 0xA67B }, + { 0xA698, 0xA6FF }, + { 0xA78D, 0xA7FA }, + { 0xA82C, 0xA83F }, + { 0xA878, 0xA87F }, + { 0xA8C5, 0xA8CD }, + { 0xA8DA, 0xA8FF }, + { 0xA954, 0xA95E }, + { 0xA960, 0xA9FF }, + { 0xAA37, 0xAA3F }, + { 0xAA4E, 0xAA4F }, + { 0xAA5A, 0xAA5B }, + { 0xAA60, 0xABFF }, + { 0xD7A4, 0xF8FF }, + { 0xFA2E, 0xFA2F }, + { 0xFA6B, 0xFA6F }, + { 0xFADA, 0xFAFF }, + { 0xFB07, 0xFB12 }, + { 0xFB18, 0xFB1C }, + { 0xFB37, 0xFB37 }, + { 0xFB3D, 0xFB3D }, + { 0xFB3F, 0xFB3F }, + { 0xFB42, 0xFB42 }, + { 0xFB45, 0xFB45 }, + { 0xFBB2, 0xFBD2 }, + { 0xFD40, 0xFD4F }, + { 0xFD90, 0xFD91 }, + { 0xFDC8, 0xFDEF }, + { 0xFDFE, 0xFDFF }, + { 0xFE1A, 0xFE1F }, + { 0xFE27, 0xFE2F }, + { 0xFE53, 0xFE53 }, + { 0xFE67, 0xFE67 }, + { 0xFE6C, 0xFE6F }, + { 0xFE75, 0xFE75 }, + { 0xFEFD, 0xFF00 }, + { 0xFFBF, 0xFFC1 }, + { 0xFFC8, 0xFFC9 }, + { 0xFFD0, 0xFFD1 }, + { 0xFFD8, 0xFFD9 }, + { 0xFFDD, 0xFFDF }, + { 0xFFE7, 0xFFE7 }, + { 0xFFEF, 0xFFFB }, + { 0xFFFE, 0xFFFF }, + { 0x1000C, 0x1000C }, + { 0x10027, 0x10027 }, + { 0x1003B, 0x1003B }, + { 0x1003E, 0x1003E }, + { 0x1004E, 0x1004F }, + { 0x1005E, 0x1007F }, + { 0x100FB, 0x100FF }, + { 0x10103, 0x10106 }, + { 0x10134, 0x10136 }, + { 0x1018B, 0x1018F }, + { 0x1019C, 0x101CF }, + { 0x101FE, 0x1027F }, + { 0x1029D, 0x1029F }, + { 0x102D1, 0x102FF }, + { 0x1031F, 0x1031F }, + { 0x10324, 0x1032F }, + { 0x1034B, 0x1037F }, + { 0x1039E, 0x1039E }, + { 0x103C4, 0x103C7 }, + { 0x103D6, 0x103FF }, + { 0x1049E, 0x1049F }, + { 0x104AA, 0x107FF }, + { 0x10806, 0x10807 }, + { 0x10809, 0x10809 }, + { 0x10836, 0x10836 }, + { 0x10839, 0x1083B }, + { 0x1083D, 0x1083E }, + { 0x10840, 0x108FF }, + { 0x1091A, 0x1091E }, + { 0x1093A, 0x1093E }, + { 0x10940, 0x109FF }, + { 0x10A04, 0x10A04 }, + { 0x10A07, 0x10A0B }, + { 0x10A14, 0x10A14 }, + { 0x10A18, 0x10A18 }, + { 0x10A34, 0x10A37 }, + { 0x10A3B, 0x10A3E }, + { 0x10A48, 0x10A4F }, + { 0x10A59, 0x11FFF }, + { 0x1236F, 0x123FF }, + { 0x12463, 0x1246F }, + { 0x12474, 0x1CFFF }, + { 0x1D0F6, 0x1D0FF }, + { 0x1D127, 0x1D128 }, + { 0x1D173, 0x1D17A }, + { 0x1D1DE, 0x1D1FF }, + { 0x1D246, 0x1D2FF }, + { 0x1D357, 0x1D35F }, + { 0x1D372, 0x1D3FF }, + { 0x1D455, 0x1D455 }, + { 0x1D49D, 0x1D49D }, + { 0x1D4A0, 0x1D4A1 }, + { 0x1D4A3, 0x1D4A4 }, + { 0x1D4A7, 0x1D4A8 }, + { 0x1D4AD, 0x1D4AD }, + { 0x1D4BA, 0x1D4BA }, + { 0x1D4BC, 0x1D4BC }, + { 0x1D4C4, 0x1D4C4 }, + { 0x1D506, 0x1D506 }, + { 0x1D50B, 0x1D50C }, + { 0x1D515, 0x1D515 }, + { 0x1D51D, 0x1D51D }, + { 0x1D53A, 0x1D53A }, + { 0x1D53F, 0x1D53F }, + { 0x1D545, 0x1D545 }, + { 0x1D547, 0x1D549 }, + { 0x1D551, 0x1D551 }, + { 0x1D6A6, 0x1D6A7 }, + { 0x1D7CC, 0x1D7CD }, + { 0x1D800, 0x1EFFF }, + { 0x1F02C, 0x1F02F }, + { 0x1F094, 0x1FFFF }, + { 0x2A6D7, 0x2F7FF }, + { 0x2FA1E, 0xE00FF }, + { 0xE01F0, 0x10FFFF } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_C) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Cc.c b/tests/unictype/test-categ_Cc.c new file mode 100644 index 00000000..9740dd47 --- /dev/null +++ b/tests/unictype/test-categ_Cc.c @@ -0,0 +1,24 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0000, 0x001F }, + { 0x007F, 0x009F } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Cc) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Cf.c b/tests/unictype/test-categ_Cf.c new file mode 100644 index 00000000..bcaf2f2b --- /dev/null +++ b/tests/unictype/test-categ_Cf.c @@ -0,0 +1,36 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00AD, 0x00AD }, + { 0x0600, 0x0603 }, + { 0x06DD, 0x06DD }, + { 0x070F, 0x070F }, + { 0x17B4, 0x17B5 }, + { 0x200B, 0x200F }, + { 0x202A, 0x202E }, + { 0x2060, 0x2064 }, + { 0x206A, 0x206F }, + { 0xFEFF, 0xFEFF }, + { 0xFFF9, 0xFFFB }, + { 0x1D173, 0x1D17A }, + { 0xE0001, 0xE0001 }, + { 0xE0020, 0xE007F } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Cf) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Cn.c b/tests/unictype/test-categ_Cn.c new file mode 100644 index 00000000..5430ea28 --- /dev/null +++ b/tests/unictype/test-categ_Cn.c @@ -0,0 +1,467 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0378, 0x0379 }, + { 0x037F, 0x0383 }, + { 0x038B, 0x038B }, + { 0x038D, 0x038D }, + { 0x03A2, 0x03A2 }, + { 0x0524, 0x0530 }, + { 0x0557, 0x0558 }, + { 0x0560, 0x0560 }, + { 0x0588, 0x0588 }, + { 0x058B, 0x0590 }, + { 0x05C8, 0x05CF }, + { 0x05EB, 0x05EF }, + { 0x05F5, 0x05FF }, + { 0x0604, 0x0605 }, + { 0x061C, 0x061D }, + { 0x0620, 0x0620 }, + { 0x065F, 0x065F }, + { 0x070E, 0x070E }, + { 0x074B, 0x074C }, + { 0x07B2, 0x07BF }, + { 0x07FB, 0x0900 }, + { 0x093A, 0x093B }, + { 0x094E, 0x094F }, + { 0x0955, 0x0957 }, + { 0x0973, 0x097A }, + { 0x0980, 0x0980 }, + { 0x0984, 0x0984 }, + { 0x098D, 0x098E }, + { 0x0991, 0x0992 }, + { 0x09A9, 0x09A9 }, + { 0x09B1, 0x09B1 }, + { 0x09B3, 0x09B5 }, + { 0x09BA, 0x09BB }, + { 0x09C5, 0x09C6 }, + { 0x09C9, 0x09CA }, + { 0x09CF, 0x09D6 }, + { 0x09D8, 0x09DB }, + { 0x09DE, 0x09DE }, + { 0x09E4, 0x09E5 }, + { 0x09FB, 0x0A00 }, + { 0x0A04, 0x0A04 }, + { 0x0A0B, 0x0A0E }, + { 0x0A11, 0x0A12 }, + { 0x0A29, 0x0A29 }, + { 0x0A31, 0x0A31 }, + { 0x0A34, 0x0A34 }, + { 0x0A37, 0x0A37 }, + { 0x0A3A, 0x0A3B }, + { 0x0A3D, 0x0A3D }, + { 0x0A43, 0x0A46 }, + { 0x0A49, 0x0A4A }, + { 0x0A4E, 0x0A50 }, + { 0x0A52, 0x0A58 }, + { 0x0A5D, 0x0A5D }, + { 0x0A5F, 0x0A65 }, + { 0x0A76, 0x0A80 }, + { 0x0A84, 0x0A84 }, + { 0x0A8E, 0x0A8E }, + { 0x0A92, 0x0A92 }, + { 0x0AA9, 0x0AA9 }, + { 0x0AB1, 0x0AB1 }, + { 0x0AB4, 0x0AB4 }, + { 0x0ABA, 0x0ABB }, + { 0x0AC6, 0x0AC6 }, + { 0x0ACA, 0x0ACA }, + { 0x0ACE, 0x0ACF }, + { 0x0AD1, 0x0ADF }, + { 0x0AE4, 0x0AE5 }, + { 0x0AF0, 0x0AF0 }, + { 0x0AF2, 0x0B00 }, + { 0x0B04, 0x0B04 }, + { 0x0B0D, 0x0B0E }, + { 0x0B11, 0x0B12 }, + { 0x0B29, 0x0B29 }, + { 0x0B31, 0x0B31 }, + { 0x0B34, 0x0B34 }, + { 0x0B3A, 0x0B3B }, + { 0x0B45, 0x0B46 }, + { 0x0B49, 0x0B4A }, + { 0x0B4E, 0x0B55 }, + { 0x0B58, 0x0B5B }, + { 0x0B5E, 0x0B5E }, + { 0x0B64, 0x0B65 }, + { 0x0B72, 0x0B81 }, + { 0x0B84, 0x0B84 }, + { 0x0B8B, 0x0B8D }, + { 0x0B91, 0x0B91 }, + { 0x0B96, 0x0B98 }, + { 0x0B9B, 0x0B9B }, + { 0x0B9D, 0x0B9D }, + { 0x0BA0, 0x0BA2 }, + { 0x0BA5, 0x0BA7 }, + { 0x0BAB, 0x0BAD }, + { 0x0BBA, 0x0BBD }, + { 0x0BC3, 0x0BC5 }, + { 0x0BC9, 0x0BC9 }, + { 0x0BCE, 0x0BCF }, + { 0x0BD1, 0x0BD6 }, + { 0x0BD8, 0x0BE5 }, + { 0x0BFB, 0x0C00 }, + { 0x0C04, 0x0C04 }, + { 0x0C0D, 0x0C0D }, + { 0x0C11, 0x0C11 }, + { 0x0C29, 0x0C29 }, + { 0x0C34, 0x0C34 }, + { 0x0C3A, 0x0C3C }, + { 0x0C45, 0x0C45 }, + { 0x0C49, 0x0C49 }, + { 0x0C4E, 0x0C54 }, + { 0x0C57, 0x0C57 }, + { 0x0C5A, 0x0C5F }, + { 0x0C64, 0x0C65 }, + { 0x0C70, 0x0C77 }, + { 0x0C80, 0x0C81 }, + { 0x0C84, 0x0C84 }, + { 0x0C8D, 0x0C8D }, + { 0x0C91, 0x0C91 }, + { 0x0CA9, 0x0CA9 }, + { 0x0CB4, 0x0CB4 }, + { 0x0CBA, 0x0CBB }, + { 0x0CC5, 0x0CC5 }, + { 0x0CC9, 0x0CC9 }, + { 0x0CCE, 0x0CD4 }, + { 0x0CD7, 0x0CDD }, + { 0x0CDF, 0x0CDF }, + { 0x0CE4, 0x0CE5 }, + { 0x0CF0, 0x0CF0 }, + { 0x0CF3, 0x0D01 }, + { 0x0D04, 0x0D04 }, + { 0x0D0D, 0x0D0D }, + { 0x0D11, 0x0D11 }, + { 0x0D29, 0x0D29 }, + { 0x0D3A, 0x0D3C }, + { 0x0D45, 0x0D45 }, + { 0x0D49, 0x0D49 }, + { 0x0D4E, 0x0D56 }, + { 0x0D58, 0x0D5F }, + { 0x0D64, 0x0D65 }, + { 0x0D76, 0x0D78 }, + { 0x0D80, 0x0D81 }, + { 0x0D84, 0x0D84 }, + { 0x0D97, 0x0D99 }, + { 0x0DB2, 0x0DB2 }, + { 0x0DBC, 0x0DBC }, + { 0x0DBE, 0x0DBF }, + { 0x0DC7, 0x0DC9 }, + { 0x0DCB, 0x0DCE }, + { 0x0DD5, 0x0DD5 }, + { 0x0DD7, 0x0DD7 }, + { 0x0DE0, 0x0DF1 }, + { 0x0DF5, 0x0E00 }, + { 0x0E3B, 0x0E3E }, + { 0x0E5C, 0x0E80 }, + { 0x0E83, 0x0E83 }, + { 0x0E85, 0x0E86 }, + { 0x0E89, 0x0E89 }, + { 0x0E8B, 0x0E8C }, + { 0x0E8E, 0x0E93 }, + { 0x0E98, 0x0E98 }, + { 0x0EA0, 0x0EA0 }, + { 0x0EA4, 0x0EA4 }, + { 0x0EA6, 0x0EA6 }, + { 0x0EA8, 0x0EA9 }, + { 0x0EAC, 0x0EAC }, + { 0x0EBA, 0x0EBA }, + { 0x0EBE, 0x0EBF }, + { 0x0EC5, 0x0EC5 }, + { 0x0EC7, 0x0EC7 }, + { 0x0ECE, 0x0ECF }, + { 0x0EDA, 0x0EDB }, + { 0x0EDE, 0x0EFF }, + { 0x0F48, 0x0F48 }, + { 0x0F6D, 0x0F70 }, + { 0x0F8C, 0x0F8F }, + { 0x0F98, 0x0F98 }, + { 0x0FBD, 0x0FBD }, + { 0x0FCD, 0x0FCD }, + { 0x0FD5, 0x0FFF }, + { 0x109A, 0x109D }, + { 0x10C6, 0x10CF }, + { 0x10FD, 0x10FF }, + { 0x115A, 0x115E }, + { 0x11A3, 0x11A7 }, + { 0x11FA, 0x11FF }, + { 0x1249, 0x1249 }, + { 0x124E, 0x124F }, + { 0x1257, 0x1257 }, + { 0x1259, 0x1259 }, + { 0x125E, 0x125F }, + { 0x1289, 0x1289 }, + { 0x128E, 0x128F }, + { 0x12B1, 0x12B1 }, + { 0x12B6, 0x12B7 }, + { 0x12BF, 0x12BF }, + { 0x12C1, 0x12C1 }, + { 0x12C6, 0x12C7 }, + { 0x12D7, 0x12D7 }, + { 0x1311, 0x1311 }, + { 0x1316, 0x1317 }, + { 0x135B, 0x135E }, + { 0x137D, 0x137F }, + { 0x139A, 0x139F }, + { 0x13F5, 0x1400 }, + { 0x1677, 0x167F }, + { 0x169D, 0x169F }, + { 0x16F1, 0x16FF }, + { 0x170D, 0x170D }, + { 0x1715, 0x171F }, + { 0x1737, 0x173F }, + { 0x1754, 0x175F }, + { 0x176D, 0x176D }, + { 0x1771, 0x1771 }, + { 0x1774, 0x177F }, + { 0x17DE, 0x17DF }, + { 0x17EA, 0x17EF }, + { 0x17FA, 0x17FF }, + { 0x180F, 0x180F }, + { 0x181A, 0x181F }, + { 0x1878, 0x187F }, + { 0x18AB, 0x18FF }, + { 0x191D, 0x191F }, + { 0x192C, 0x192F }, + { 0x193C, 0x193F }, + { 0x1941, 0x1943 }, + { 0x196E, 0x196F }, + { 0x1975, 0x197F }, + { 0x19AA, 0x19AF }, + { 0x19CA, 0x19CF }, + { 0x19DA, 0x19DD }, + { 0x1A1C, 0x1A1D }, + { 0x1A20, 0x1AFF }, + { 0x1B4C, 0x1B4F }, + { 0x1B7D, 0x1B7F }, + { 0x1BAB, 0x1BAD }, + { 0x1BBA, 0x1BFF }, + { 0x1C38, 0x1C3A }, + { 0x1C4A, 0x1C4C }, + { 0x1C80, 0x1CFF }, + { 0x1DE7, 0x1DFD }, + { 0x1F16, 0x1F17 }, + { 0x1F1E, 0x1F1F }, + { 0x1F46, 0x1F47 }, + { 0x1F4E, 0x1F4F }, + { 0x1F58, 0x1F58 }, + { 0x1F5A, 0x1F5A }, + { 0x1F5C, 0x1F5C }, + { 0x1F5E, 0x1F5E }, + { 0x1F7E, 0x1F7F }, + { 0x1FB5, 0x1FB5 }, + { 0x1FC5, 0x1FC5 }, + { 0x1FD4, 0x1FD5 }, + { 0x1FDC, 0x1FDC }, + { 0x1FF0, 0x1FF1 }, + { 0x1FF5, 0x1FF5 }, + { 0x1FFF, 0x1FFF }, + { 0x2065, 0x2069 }, + { 0x2072, 0x2073 }, + { 0x208F, 0x208F }, + { 0x2095, 0x209F }, + { 0x20B6, 0x20CF }, + { 0x20F1, 0x20FF }, + { 0x2150, 0x2152 }, + { 0x2189, 0x218F }, + { 0x23E8, 0x23FF }, + { 0x2427, 0x243F }, + { 0x244B, 0x245F }, + { 0x269E, 0x269F }, + { 0x26BD, 0x26BF }, + { 0x26C4, 0x2700 }, + { 0x2705, 0x2705 }, + { 0x270A, 0x270B }, + { 0x2728, 0x2728 }, + { 0x274C, 0x274C }, + { 0x274E, 0x274E }, + { 0x2753, 0x2755 }, + { 0x2757, 0x2757 }, + { 0x275F, 0x2760 }, + { 0x2795, 0x2797 }, + { 0x27B0, 0x27B0 }, + { 0x27BF, 0x27BF }, + { 0x27CB, 0x27CB }, + { 0x27CD, 0x27CF }, + { 0x2B4D, 0x2B4F }, + { 0x2B55, 0x2BFF }, + { 0x2C2F, 0x2C2F }, + { 0x2C5F, 0x2C5F }, + { 0x2C70, 0x2C70 }, + { 0x2C7E, 0x2C7F }, + { 0x2CEB, 0x2CF8 }, + { 0x2D26, 0x2D2F }, + { 0x2D66, 0x2D6E }, + { 0x2D70, 0x2D7F }, + { 0x2D97, 0x2D9F }, + { 0x2DA7, 0x2DA7 }, + { 0x2DAF, 0x2DAF }, + { 0x2DB7, 0x2DB7 }, + { 0x2DBF, 0x2DBF }, + { 0x2DC7, 0x2DC7 }, + { 0x2DCF, 0x2DCF }, + { 0x2DD7, 0x2DD7 }, + { 0x2DDF, 0x2DDF }, + { 0x2E31, 0x2E7F }, + { 0x2E9A, 0x2E9A }, + { 0x2EF4, 0x2EFF }, + { 0x2FD6, 0x2FEF }, + { 0x2FFC, 0x2FFF }, + { 0x3040, 0x3040 }, + { 0x3097, 0x3098 }, + { 0x3100, 0x3104 }, + { 0x312E, 0x3130 }, + { 0x318F, 0x318F }, + { 0x31B8, 0x31BF }, + { 0x31E4, 0x31EF }, + { 0x321F, 0x321F }, + { 0x3244, 0x324F }, + { 0x32FF, 0x32FF }, + { 0x4DB6, 0x4DBF }, + { 0x9FC4, 0x9FFF }, + { 0xA48D, 0xA48F }, + { 0xA4C7, 0xA4FF }, + { 0xA62C, 0xA63F }, + { 0xA660, 0xA661 }, + { 0xA674, 0xA67B }, + { 0xA698, 0xA6FF }, + { 0xA78D, 0xA7FA }, + { 0xA82C, 0xA83F }, + { 0xA878, 0xA87F }, + { 0xA8C5, 0xA8CD }, + { 0xA8DA, 0xA8FF }, + { 0xA954, 0xA95E }, + { 0xA960, 0xA9FF }, + { 0xAA37, 0xAA3F }, + { 0xAA4E, 0xAA4F }, + { 0xAA5A, 0xAA5B }, + { 0xAA60, 0xABFF }, + { 0xD7A4, 0xD7FF }, + { 0xFA2E, 0xFA2F }, + { 0xFA6B, 0xFA6F }, + { 0xFADA, 0xFAFF }, + { 0xFB07, 0xFB12 }, + { 0xFB18, 0xFB1C }, + { 0xFB37, 0xFB37 }, + { 0xFB3D, 0xFB3D }, + { 0xFB3F, 0xFB3F }, + { 0xFB42, 0xFB42 }, + { 0xFB45, 0xFB45 }, + { 0xFBB2, 0xFBD2 }, + { 0xFD40, 0xFD4F }, + { 0xFD90, 0xFD91 }, + { 0xFDC8, 0xFDEF }, + { 0xFDFE, 0xFDFF }, + { 0xFE1A, 0xFE1F }, + { 0xFE27, 0xFE2F }, + { 0xFE53, 0xFE53 }, + { 0xFE67, 0xFE67 }, + { 0xFE6C, 0xFE6F }, + { 0xFE75, 0xFE75 }, + { 0xFEFD, 0xFEFE }, + { 0xFF00, 0xFF00 }, + { 0xFFBF, 0xFFC1 }, + { 0xFFC8, 0xFFC9 }, + { 0xFFD0, 0xFFD1 }, + { 0xFFD8, 0xFFD9 }, + { 0xFFDD, 0xFFDF }, + { 0xFFE7, 0xFFE7 }, + { 0xFFEF, 0xFFF8 }, + { 0xFFFE, 0xFFFF }, + { 0x1000C, 0x1000C }, + { 0x10027, 0x10027 }, + { 0x1003B, 0x1003B }, + { 0x1003E, 0x1003E }, + { 0x1004E, 0x1004F }, + { 0x1005E, 0x1007F }, + { 0x100FB, 0x100FF }, + { 0x10103, 0x10106 }, + { 0x10134, 0x10136 }, + { 0x1018B, 0x1018F }, + { 0x1019C, 0x101CF }, + { 0x101FE, 0x1027F }, + { 0x1029D, 0x1029F }, + { 0x102D1, 0x102FF }, + { 0x1031F, 0x1031F }, + { 0x10324, 0x1032F }, + { 0x1034B, 0x1037F }, + { 0x1039E, 0x1039E }, + { 0x103C4, 0x103C7 }, + { 0x103D6, 0x103FF }, + { 0x1049E, 0x1049F }, + { 0x104AA, 0x107FF }, + { 0x10806, 0x10807 }, + { 0x10809, 0x10809 }, + { 0x10836, 0x10836 }, + { 0x10839, 0x1083B }, + { 0x1083D, 0x1083E }, + { 0x10840, 0x108FF }, + { 0x1091A, 0x1091E }, + { 0x1093A, 0x1093E }, + { 0x10940, 0x109FF }, + { 0x10A04, 0x10A04 }, + { 0x10A07, 0x10A0B }, + { 0x10A14, 0x10A14 }, + { 0x10A18, 0x10A18 }, + { 0x10A34, 0x10A37 }, + { 0x10A3B, 0x10A3E }, + { 0x10A48, 0x10A4F }, + { 0x10A59, 0x11FFF }, + { 0x1236F, 0x123FF }, + { 0x12463, 0x1246F }, + { 0x12474, 0x1CFFF }, + { 0x1D0F6, 0x1D0FF }, + { 0x1D127, 0x1D128 }, + { 0x1D1DE, 0x1D1FF }, + { 0x1D246, 0x1D2FF }, + { 0x1D357, 0x1D35F }, + { 0x1D372, 0x1D3FF }, + { 0x1D455, 0x1D455 }, + { 0x1D49D, 0x1D49D }, + { 0x1D4A0, 0x1D4A1 }, + { 0x1D4A3, 0x1D4A4 }, + { 0x1D4A7, 0x1D4A8 }, + { 0x1D4AD, 0x1D4AD }, + { 0x1D4BA, 0x1D4BA }, + { 0x1D4BC, 0x1D4BC }, + { 0x1D4C4, 0x1D4C4 }, + { 0x1D506, 0x1D506 }, + { 0x1D50B, 0x1D50C }, + { 0x1D515, 0x1D515 }, + { 0x1D51D, 0x1D51D }, + { 0x1D53A, 0x1D53A }, + { 0x1D53F, 0x1D53F }, + { 0x1D545, 0x1D545 }, + { 0x1D547, 0x1D549 }, + { 0x1D551, 0x1D551 }, + { 0x1D6A6, 0x1D6A7 }, + { 0x1D7CC, 0x1D7CD }, + { 0x1D800, 0x1EFFF }, + { 0x1F02C, 0x1F02F }, + { 0x1F094, 0x1FFFF }, + { 0x2A6D7, 0x2F7FF }, + { 0x2FA1E, 0xE0000 }, + { 0xE0002, 0xE001F }, + { 0xE0080, 0xE00FF }, + { 0xE01F0, 0xEFFFF }, + { 0xFFFFE, 0xFFFFF }, + { 0x10FFFE, 0x10FFFF } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Cn) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Co.c b/tests/unictype/test-categ_Co.c new file mode 100644 index 00000000..f524db4c --- /dev/null +++ b/tests/unictype/test-categ_Co.c @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0xE000, 0xF8FF }, + { 0xF0000, 0xFFFFD }, + { 0x100000, 0x10FFFD } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Co) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Cs.c b/tests/unictype/test-categ_Cs.c new file mode 100644 index 00000000..cb8cc969 --- /dev/null +++ b/tests/unictype/test-categ_Cs.c @@ -0,0 +1,23 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0xD800, 0xDFFF } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Cs) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_L.c b/tests/unictype/test-categ_L.c new file mode 100644 index 00000000..f4019171 --- /dev/null +++ b/tests/unictype/test-categ_L.c @@ -0,0 +1,412 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0041, 0x005A }, + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00BA, 0x00BA }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00F6 }, + { 0x00F8, 0x02C1 }, + { 0x02C6, 0x02D1 }, + { 0x02E0, 0x02E4 }, + { 0x02EC, 0x02EC }, + { 0x02EE, 0x02EE }, + { 0x0370, 0x0374 }, + { 0x0376, 0x0377 }, + { 0x037A, 0x037D }, + { 0x0386, 0x0386 }, + { 0x0388, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x03F5 }, + { 0x03F7, 0x0481 }, + { 0x048A, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0559, 0x0559 }, + { 0x0561, 0x0587 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F2 }, + { 0x0621, 0x064A }, + { 0x066E, 0x066F }, + { 0x0671, 0x06D3 }, + { 0x06D5, 0x06D5 }, + { 0x06E5, 0x06E6 }, + { 0x06EE, 0x06EF }, + { 0x06FA, 0x06FC }, + { 0x06FF, 0x06FF }, + { 0x0710, 0x0710 }, + { 0x0712, 0x072F }, + { 0x074D, 0x07A5 }, + { 0x07B1, 0x07B1 }, + { 0x07CA, 0x07EA }, + { 0x07F4, 0x07F5 }, + { 0x07FA, 0x07FA }, + { 0x0904, 0x0939 }, + { 0x093D, 0x093D }, + { 0x0950, 0x0950 }, + { 0x0958, 0x0961 }, + { 0x0971, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BD, 0x09BD }, + { 0x09CE, 0x09CE }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E1 }, + { 0x09F0, 0x09F1 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A72, 0x0A74 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABD, 0x0ABD }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE1 }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3D, 0x0B3D }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B61 }, + { 0x0B71, 0x0B71 }, + { 0x0B83, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BD0, 0x0BD0 }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C3D }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C61 }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBD, 0x0CBD }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE1 }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D3D }, + { 0x0D60, 0x0D61 }, + { 0x0D7A, 0x0D7F }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0E01, 0x0E30 }, + { 0x0E32, 0x0E33 }, + { 0x0E40, 0x0E46 }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB0 }, + { 0x0EB2, 0x0EB3 }, + { 0x0EBD, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EC6, 0x0EC6 }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F00 }, + { 0x0F40, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F88, 0x0F8B }, + { 0x1000, 0x102A }, + { 0x103F, 0x103F }, + { 0x1050, 0x1055 }, + { 0x105A, 0x105D }, + { 0x1061, 0x1061 }, + { 0x1065, 0x1066 }, + { 0x106E, 0x1070 }, + { 0x1075, 0x1081 }, + { 0x108E, 0x108E }, + { 0x10A0, 0x10C5 }, + { 0x10D0, 0x10FA }, + { 0x10FC, 0x10FC }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x1380, 0x138F }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x166C }, + { 0x166F, 0x1676 }, + { 0x1681, 0x169A }, + { 0x16A0, 0x16EA }, + { 0x1700, 0x170C }, + { 0x170E, 0x1711 }, + { 0x1720, 0x1731 }, + { 0x1740, 0x1751 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1780, 0x17B3 }, + { 0x17D7, 0x17D7 }, + { 0x17DC, 0x17DC }, + { 0x1820, 0x1877 }, + { 0x1880, 0x18A8 }, + { 0x18AA, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1950, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19C1, 0x19C7 }, + { 0x1A00, 0x1A16 }, + { 0x1B05, 0x1B33 }, + { 0x1B45, 0x1B4B }, + { 0x1B83, 0x1BA0 }, + { 0x1BAE, 0x1BAF }, + { 0x1C00, 0x1C23 }, + { 0x1C4D, 0x1C4F }, + { 0x1C5A, 0x1C7D }, + { 0x1D00, 0x1DBF }, + { 0x1E00, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FBC }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FC4 }, + { 0x1FC6, 0x1FCC }, + { 0x1FD0, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FE0, 0x1FEC }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFC }, + { 0x2071, 0x2071 }, + { 0x207F, 0x207F }, + { 0x2090, 0x2094 }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2119, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x2128 }, + { 0x212A, 0x212D }, + { 0x212F, 0x2139 }, + { 0x213C, 0x213F }, + { 0x2145, 0x2149 }, + { 0x214E, 0x214E }, + { 0x2183, 0x2184 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CE4 }, + { 0x2D00, 0x2D25 }, + { 0x2D30, 0x2D65 }, + { 0x2D6F, 0x2D6F }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x2E2F, 0x2E2F }, + { 0x3005, 0x3006 }, + { 0x3031, 0x3035 }, + { 0x303B, 0x303C }, + { 0x3041, 0x3096 }, + { 0x309D, 0x309F }, + { 0x30A1, 0x30FA }, + { 0x30FC, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x31A0, 0x31B7 }, + { 0x31F0, 0x31FF }, + { 0x3400, 0x4DB5 }, + { 0x4E00, 0x9FC3 }, + { 0xA000, 0xA48C }, + { 0xA500, 0xA60C }, + { 0xA610, 0xA61F }, + { 0xA62A, 0xA62B }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA66E }, + { 0xA67F, 0xA697 }, + { 0xA717, 0xA71F }, + { 0xA722, 0xA788 }, + { 0xA78B, 0xA78C }, + { 0xA7FB, 0xA801 }, + { 0xA803, 0xA805 }, + { 0xA807, 0xA80A }, + { 0xA80C, 0xA822 }, + { 0xA840, 0xA873 }, + { 0xA882, 0xA8B3 }, + { 0xA90A, 0xA925 }, + { 0xA930, 0xA946 }, + { 0xAA00, 0xAA28 }, + { 0xAA40, 0xAA42 }, + { 0xAA44, 0xAA4B }, + { 0xAC00, 0xD7A3 }, + { 0xF900, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB1D }, + { 0xFB1F, 0xFB28 }, + { 0xFB2A, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFD3D }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDFB }, + { 0xFE70, 0xFE74 }, + { 0xFE76, 0xFEFC }, + { 0xFF21, 0xFF3A }, + { 0xFF41, 0xFF5A }, + { 0xFF66, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10330, 0x10340 }, + { 0x10342, 0x10349 }, + { 0x10380, 0x1039D }, + { 0x103A0, 0x103C3 }, + { 0x103C8, 0x103CF }, + { 0x10400, 0x1049D }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10915 }, + { 0x10920, 0x10939 }, + { 0x10A00, 0x10A00 }, + { 0x10A10, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x12000, 0x1236E }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6FA }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D734 }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D76E }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D7A8 }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7CB }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_L) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Ll.c b/tests/unictype/test-categ_Ll.c new file mode 100644 index 00000000..7cd4ac36 --- /dev/null +++ b/tests/unictype/test-categ_Ll.c @@ -0,0 +1,620 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00BA, 0x00BA }, + { 0x00DF, 0x00F6 }, + { 0x00F8, 0x00FF }, + { 0x0101, 0x0101 }, + { 0x0103, 0x0103 }, + { 0x0105, 0x0105 }, + { 0x0107, 0x0107 }, + { 0x0109, 0x0109 }, + { 0x010B, 0x010B }, + { 0x010D, 0x010D }, + { 0x010F, 0x010F }, + { 0x0111, 0x0111 }, + { 0x0113, 0x0113 }, + { 0x0115, 0x0115 }, + { 0x0117, 0x0117 }, + { 0x0119, 0x0119 }, + { 0x011B, 0x011B }, + { 0x011D, 0x011D }, + { 0x011F, 0x011F }, + { 0x0121, 0x0121 }, + { 0x0123, 0x0123 }, + { 0x0125, 0x0125 }, + { 0x0127, 0x0127 }, + { 0x0129, 0x0129 }, + { 0x012B, 0x012B }, + { 0x012D, 0x012D }, + { 0x012F, 0x012F }, + { 0x0131, 0x0131 }, + { 0x0133, 0x0133 }, + { 0x0135, 0x0135 }, + { 0x0137, 0x0138 }, + { 0x013A, 0x013A }, + { 0x013C, 0x013C }, + { 0x013E, 0x013E }, + { 0x0140, 0x0140 }, + { 0x0142, 0x0142 }, + { 0x0144, 0x0144 }, + { 0x0146, 0x0146 }, + { 0x0148, 0x0149 }, + { 0x014B, 0x014B }, + { 0x014D, 0x014D }, + { 0x014F, 0x014F }, + { 0x0151, 0x0151 }, + { 0x0153, 0x0153 }, + { 0x0155, 0x0155 }, + { 0x0157, 0x0157 }, + { 0x0159, 0x0159 }, + { 0x015B, 0x015B }, + { 0x015D, 0x015D }, + { 0x015F, 0x015F }, + { 0x0161, 0x0161 }, + { 0x0163, 0x0163 }, + { 0x0165, 0x0165 }, + { 0x0167, 0x0167 }, + { 0x0169, 0x0169 }, + { 0x016B, 0x016B }, + { 0x016D, 0x016D }, + { 0x016F, 0x016F }, + { 0x0171, 0x0171 }, + { 0x0173, 0x0173 }, + { 0x0175, 0x0175 }, + { 0x0177, 0x0177 }, + { 0x017A, 0x017A }, + { 0x017C, 0x017C }, + { 0x017E, 0x0180 }, + { 0x0183, 0x0183 }, + { 0x0185, 0x0185 }, + { 0x0188, 0x0188 }, + { 0x018C, 0x018D }, + { 0x0192, 0x0192 }, + { 0x0195, 0x0195 }, + { 0x0199, 0x019B }, + { 0x019E, 0x019E }, + { 0x01A1, 0x01A1 }, + { 0x01A3, 0x01A3 }, + { 0x01A5, 0x01A5 }, + { 0x01A8, 0x01A8 }, + { 0x01AA, 0x01AB }, + { 0x01AD, 0x01AD }, + { 0x01B0, 0x01B0 }, + { 0x01B4, 0x01B4 }, + { 0x01B6, 0x01B6 }, + { 0x01B9, 0x01BA }, + { 0x01BD, 0x01BF }, + { 0x01C6, 0x01C6 }, + { 0x01C9, 0x01C9 }, + { 0x01CC, 0x01CC }, + { 0x01CE, 0x01CE }, + { 0x01D0, 0x01D0 }, + { 0x01D2, 0x01D2 }, + { 0x01D4, 0x01D4 }, + { 0x01D6, 0x01D6 }, + { 0x01D8, 0x01D8 }, + { 0x01DA, 0x01DA }, + { 0x01DC, 0x01DD }, + { 0x01DF, 0x01DF }, + { 0x01E1, 0x01E1 }, + { 0x01E3, 0x01E3 }, + { 0x01E5, 0x01E5 }, + { 0x01E7, 0x01E7 }, + { 0x01E9, 0x01E9 }, + { 0x01EB, 0x01EB }, + { 0x01ED, 0x01ED }, + { 0x01EF, 0x01F0 }, + { 0x01F3, 0x01F3 }, + { 0x01F5, 0x01F5 }, + { 0x01F9, 0x01F9 }, + { 0x01FB, 0x01FB }, + { 0x01FD, 0x01FD }, + { 0x01FF, 0x01FF }, + { 0x0201, 0x0201 }, + { 0x0203, 0x0203 }, + { 0x0205, 0x0205 }, + { 0x0207, 0x0207 }, + { 0x0209, 0x0209 }, + { 0x020B, 0x020B }, + { 0x020D, 0x020D }, + { 0x020F, 0x020F }, + { 0x0211, 0x0211 }, + { 0x0213, 0x0213 }, + { 0x0215, 0x0215 }, + { 0x0217, 0x0217 }, + { 0x0219, 0x0219 }, + { 0x021B, 0x021B }, + { 0x021D, 0x021D }, + { 0x021F, 0x021F }, + { 0x0221, 0x0221 }, + { 0x0223, 0x0223 }, + { 0x0225, 0x0225 }, + { 0x0227, 0x0227 }, + { 0x0229, 0x0229 }, + { 0x022B, 0x022B }, + { 0x022D, 0x022D }, + { 0x022F, 0x022F }, + { 0x0231, 0x0231 }, + { 0x0233, 0x0239 }, + { 0x023C, 0x023C }, + { 0x023F, 0x0240 }, + { 0x0242, 0x0242 }, + { 0x0247, 0x0247 }, + { 0x0249, 0x0249 }, + { 0x024B, 0x024B }, + { 0x024D, 0x024D }, + { 0x024F, 0x0293 }, + { 0x0295, 0x02AF }, + { 0x0371, 0x0371 }, + { 0x0373, 0x0373 }, + { 0x0377, 0x0377 }, + { 0x037B, 0x037D }, + { 0x0390, 0x0390 }, + { 0x03AC, 0x03CE }, + { 0x03D0, 0x03D1 }, + { 0x03D5, 0x03D7 }, + { 0x03D9, 0x03D9 }, + { 0x03DB, 0x03DB }, + { 0x03DD, 0x03DD }, + { 0x03DF, 0x03DF }, + { 0x03E1, 0x03E1 }, + { 0x03E3, 0x03E3 }, + { 0x03E5, 0x03E5 }, + { 0x03E7, 0x03E7 }, + { 0x03E9, 0x03E9 }, + { 0x03EB, 0x03EB }, + { 0x03ED, 0x03ED }, + { 0x03EF, 0x03F3 }, + { 0x03F5, 0x03F5 }, + { 0x03F8, 0x03F8 }, + { 0x03FB, 0x03FC }, + { 0x0430, 0x045F }, + { 0x0461, 0x0461 }, + { 0x0463, 0x0463 }, + { 0x0465, 0x0465 }, + { 0x0467, 0x0467 }, + { 0x0469, 0x0469 }, + { 0x046B, 0x046B }, + { 0x046D, 0x046D }, + { 0x046F, 0x046F }, + { 0x0471, 0x0471 }, + { 0x0473, 0x0473 }, + { 0x0475, 0x0475 }, + { 0x0477, 0x0477 }, + { 0x0479, 0x0479 }, + { 0x047B, 0x047B }, + { 0x047D, 0x047D }, + { 0x047F, 0x047F }, + { 0x0481, 0x0481 }, + { 0x048B, 0x048B }, + { 0x048D, 0x048D }, + { 0x048F, 0x048F }, + { 0x0491, 0x0491 }, + { 0x0493, 0x0493 }, + { 0x0495, 0x0495 }, + { 0x0497, 0x0497 }, + { 0x0499, 0x0499 }, + { 0x049B, 0x049B }, + { 0x049D, 0x049D }, + { 0x049F, 0x049F }, + { 0x04A1, 0x04A1 }, + { 0x04A3, 0x04A3 }, + { 0x04A5, 0x04A5 }, + { 0x04A7, 0x04A7 }, + { 0x04A9, 0x04A9 }, + { 0x04AB, 0x04AB }, + { 0x04AD, 0x04AD }, + { 0x04AF, 0x04AF }, + { 0x04B1, 0x04B1 }, + { 0x04B3, 0x04B3 }, + { 0x04B5, 0x04B5 }, + { 0x04B7, 0x04B7 }, + { 0x04B9, 0x04B9 }, + { 0x04BB, 0x04BB }, + { 0x04BD, 0x04BD }, + { 0x04BF, 0x04BF }, + { 0x04C2, 0x04C2 }, + { 0x04C4, 0x04C4 }, + { 0x04C6, 0x04C6 }, + { 0x04C8, 0x04C8 }, + { 0x04CA, 0x04CA }, + { 0x04CC, 0x04CC }, + { 0x04CE, 0x04CF }, + { 0x04D1, 0x04D1 }, + { 0x04D3, 0x04D3 }, + { 0x04D5, 0x04D5 }, + { 0x04D7, 0x04D7 }, + { 0x04D9, 0x04D9 }, + { 0x04DB, 0x04DB }, + { 0x04DD, 0x04DD }, + { 0x04DF, 0x04DF }, + { 0x04E1, 0x04E1 }, + { 0x04E3, 0x04E3 }, + { 0x04E5, 0x04E5 }, + { 0x04E7, 0x04E7 }, + { 0x04E9, 0x04E9 }, + { 0x04EB, 0x04EB }, + { 0x04ED, 0x04ED }, + { 0x04EF, 0x04EF }, + { 0x04F1, 0x04F1 }, + { 0x04F3, 0x04F3 }, + { 0x04F5, 0x04F5 }, + { 0x04F7, 0x04F7 }, + { 0x04F9, 0x04F9 }, + { 0x04FB, 0x04FB }, + { 0x04FD, 0x04FD }, + { 0x04FF, 0x04FF }, + { 0x0501, 0x0501 }, + { 0x0503, 0x0503 }, + { 0x0505, 0x0505 }, + { 0x0507, 0x0507 }, + { 0x0509, 0x0509 }, + { 0x050B, 0x050B }, + { 0x050D, 0x050D }, + { 0x050F, 0x050F }, + { 0x0511, 0x0511 }, + { 0x0513, 0x0513 }, + { 0x0515, 0x0515 }, + { 0x0517, 0x0517 }, + { 0x0519, 0x0519 }, + { 0x051B, 0x051B }, + { 0x051D, 0x051D }, + { 0x051F, 0x051F }, + { 0x0521, 0x0521 }, + { 0x0523, 0x0523 }, + { 0x0561, 0x0587 }, + { 0x1D00, 0x1D2B }, + { 0x1D62, 0x1D77 }, + { 0x1D79, 0x1D9A }, + { 0x1E01, 0x1E01 }, + { 0x1E03, 0x1E03 }, + { 0x1E05, 0x1E05 }, + { 0x1E07, 0x1E07 }, + { 0x1E09, 0x1E09 }, + { 0x1E0B, 0x1E0B }, + { 0x1E0D, 0x1E0D }, + { 0x1E0F, 0x1E0F }, + { 0x1E11, 0x1E11 }, + { 0x1E13, 0x1E13 }, + { 0x1E15, 0x1E15 }, + { 0x1E17, 0x1E17 }, + { 0x1E19, 0x1E19 }, + { 0x1E1B, 0x1E1B }, + { 0x1E1D, 0x1E1D }, + { 0x1E1F, 0x1E1F }, + { 0x1E21, 0x1E21 }, + { 0x1E23, 0x1E23 }, + { 0x1E25, 0x1E25 }, + { 0x1E27, 0x1E27 }, + { 0x1E29, 0x1E29 }, + { 0x1E2B, 0x1E2B }, + { 0x1E2D, 0x1E2D }, + { 0x1E2F, 0x1E2F }, + { 0x1E31, 0x1E31 }, + { 0x1E33, 0x1E33 }, + { 0x1E35, 0x1E35 }, + { 0x1E37, 0x1E37 }, + { 0x1E39, 0x1E39 }, + { 0x1E3B, 0x1E3B }, + { 0x1E3D, 0x1E3D }, + { 0x1E3F, 0x1E3F }, + { 0x1E41, 0x1E41 }, + { 0x1E43, 0x1E43 }, + { 0x1E45, 0x1E45 }, + { 0x1E47, 0x1E47 }, + { 0x1E49, 0x1E49 }, + { 0x1E4B, 0x1E4B }, + { 0x1E4D, 0x1E4D }, + { 0x1E4F, 0x1E4F }, + { 0x1E51, 0x1E51 }, + { 0x1E53, 0x1E53 }, + { 0x1E55, 0x1E55 }, + { 0x1E57, 0x1E57 }, + { 0x1E59, 0x1E59 }, + { 0x1E5B, 0x1E5B }, + { 0x1E5D, 0x1E5D }, + { 0x1E5F, 0x1E5F }, + { 0x1E61, 0x1E61 }, + { 0x1E63, 0x1E63 }, + { 0x1E65, 0x1E65 }, + { 0x1E67, 0x1E67 }, + { 0x1E69, 0x1E69 }, + { 0x1E6B, 0x1E6B }, + { 0x1E6D, 0x1E6D }, + { 0x1E6F, 0x1E6F }, + { 0x1E71, 0x1E71 }, + { 0x1E73, 0x1E73 }, + { 0x1E75, 0x1E75 }, + { 0x1E77, 0x1E77 }, + { 0x1E79, 0x1E79 }, + { 0x1E7B, 0x1E7B }, + { 0x1E7D, 0x1E7D }, + { 0x1E7F, 0x1E7F }, + { 0x1E81, 0x1E81 }, + { 0x1E83, 0x1E83 }, + { 0x1E85, 0x1E85 }, + { 0x1E87, 0x1E87 }, + { 0x1E89, 0x1E89 }, + { 0x1E8B, 0x1E8B }, + { 0x1E8D, 0x1E8D }, + { 0x1E8F, 0x1E8F }, + { 0x1E91, 0x1E91 }, + { 0x1E93, 0x1E93 }, + { 0x1E95, 0x1E9D }, + { 0x1E9F, 0x1E9F }, + { 0x1EA1, 0x1EA1 }, + { 0x1EA3, 0x1EA3 }, + { 0x1EA5, 0x1EA5 }, + { 0x1EA7, 0x1EA7 }, + { 0x1EA9, 0x1EA9 }, + { 0x1EAB, 0x1EAB }, + { 0x1EAD, 0x1EAD }, + { 0x1EAF, 0x1EAF }, + { 0x1EB1, 0x1EB1 }, + { 0x1EB3, 0x1EB3 }, + { 0x1EB5, 0x1EB5 }, + { 0x1EB7, 0x1EB7 }, + { 0x1EB9, 0x1EB9 }, + { 0x1EBB, 0x1EBB }, + { 0x1EBD, 0x1EBD }, + { 0x1EBF, 0x1EBF }, + { 0x1EC1, 0x1EC1 }, + { 0x1EC3, 0x1EC3 }, + { 0x1EC5, 0x1EC5 }, + { 0x1EC7, 0x1EC7 }, + { 0x1EC9, 0x1EC9 }, + { 0x1ECB, 0x1ECB }, + { 0x1ECD, 0x1ECD }, + { 0x1ECF, 0x1ECF }, + { 0x1ED1, 0x1ED1 }, + { 0x1ED3, 0x1ED3 }, + { 0x1ED5, 0x1ED5 }, + { 0x1ED7, 0x1ED7 }, + { 0x1ED9, 0x1ED9 }, + { 0x1EDB, 0x1EDB }, + { 0x1EDD, 0x1EDD }, + { 0x1EDF, 0x1EDF }, + { 0x1EE1, 0x1EE1 }, + { 0x1EE3, 0x1EE3 }, + { 0x1EE5, 0x1EE5 }, + { 0x1EE7, 0x1EE7 }, + { 0x1EE9, 0x1EE9 }, + { 0x1EEB, 0x1EEB }, + { 0x1EED, 0x1EED }, + { 0x1EEF, 0x1EEF }, + { 0x1EF1, 0x1EF1 }, + { 0x1EF3, 0x1EF3 }, + { 0x1EF5, 0x1EF5 }, + { 0x1EF7, 0x1EF7 }, + { 0x1EF9, 0x1EF9 }, + { 0x1EFB, 0x1EFB }, + { 0x1EFD, 0x1EFD }, + { 0x1EFF, 0x1F07 }, + { 0x1F10, 0x1F15 }, + { 0x1F20, 0x1F27 }, + { 0x1F30, 0x1F37 }, + { 0x1F40, 0x1F45 }, + { 0x1F50, 0x1F57 }, + { 0x1F60, 0x1F67 }, + { 0x1F70, 0x1F7D }, + { 0x1F80, 0x1F87 }, + { 0x1F90, 0x1F97 }, + { 0x1FA0, 0x1FA7 }, + { 0x1FB0, 0x1FB4 }, + { 0x1FB6, 0x1FB7 }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FC4 }, + { 0x1FC6, 0x1FC7 }, + { 0x1FD0, 0x1FD3 }, + { 0x1FD6, 0x1FD7 }, + { 0x1FE0, 0x1FE7 }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FF7 }, + { 0x2071, 0x2071 }, + { 0x207F, 0x207F }, + { 0x210A, 0x210A }, + { 0x210E, 0x210F }, + { 0x2113, 0x2113 }, + { 0x212F, 0x212F }, + { 0x2134, 0x2134 }, + { 0x2139, 0x2139 }, + { 0x213C, 0x213D }, + { 0x2146, 0x2149 }, + { 0x214E, 0x214E }, + { 0x2184, 0x2184 }, + { 0x2C30, 0x2C5E }, + { 0x2C61, 0x2C61 }, + { 0x2C65, 0x2C66 }, + { 0x2C68, 0x2C68 }, + { 0x2C6A, 0x2C6A }, + { 0x2C6C, 0x2C6C }, + { 0x2C71, 0x2C71 }, + { 0x2C73, 0x2C74 }, + { 0x2C76, 0x2C7C }, + { 0x2C81, 0x2C81 }, + { 0x2C83, 0x2C83 }, + { 0x2C85, 0x2C85 }, + { 0x2C87, 0x2C87 }, + { 0x2C89, 0x2C89 }, + { 0x2C8B, 0x2C8B }, + { 0x2C8D, 0x2C8D }, + { 0x2C8F, 0x2C8F }, + { 0x2C91, 0x2C91 }, + { 0x2C93, 0x2C93 }, + { 0x2C95, 0x2C95 }, + { 0x2C97, 0x2C97 }, + { 0x2C99, 0x2C99 }, + { 0x2C9B, 0x2C9B }, + { 0x2C9D, 0x2C9D }, + { 0x2C9F, 0x2C9F }, + { 0x2CA1, 0x2CA1 }, + { 0x2CA3, 0x2CA3 }, + { 0x2CA5, 0x2CA5 }, + { 0x2CA7, 0x2CA7 }, + { 0x2CA9, 0x2CA9 }, + { 0x2CAB, 0x2CAB }, + { 0x2CAD, 0x2CAD }, + { 0x2CAF, 0x2CAF }, + { 0x2CB1, 0x2CB1 }, + { 0x2CB3, 0x2CB3 }, + { 0x2CB5, 0x2CB5 }, + { 0x2CB7, 0x2CB7 }, + { 0x2CB9, 0x2CB9 }, + { 0x2CBB, 0x2CBB }, + { 0x2CBD, 0x2CBD }, + { 0x2CBF, 0x2CBF }, + { 0x2CC1, 0x2CC1 }, + { 0x2CC3, 0x2CC3 }, + { 0x2CC5, 0x2CC5 }, + { 0x2CC7, 0x2CC7 }, + { 0x2CC9, 0x2CC9 }, + { 0x2CCB, 0x2CCB }, + { 0x2CCD, 0x2CCD }, + { 0x2CCF, 0x2CCF }, + { 0x2CD1, 0x2CD1 }, + { 0x2CD3, 0x2CD3 }, + { 0x2CD5, 0x2CD5 }, + { 0x2CD7, 0x2CD7 }, + { 0x2CD9, 0x2CD9 }, + { 0x2CDB, 0x2CDB }, + { 0x2CDD, 0x2CDD }, + { 0x2CDF, 0x2CDF }, + { 0x2CE1, 0x2CE1 }, + { 0x2CE3, 0x2CE4 }, + { 0x2D00, 0x2D25 }, + { 0xA641, 0xA641 }, + { 0xA643, 0xA643 }, + { 0xA645, 0xA645 }, + { 0xA647, 0xA647 }, + { 0xA649, 0xA649 }, + { 0xA64B, 0xA64B }, + { 0xA64D, 0xA64D }, + { 0xA64F, 0xA64F }, + { 0xA651, 0xA651 }, + { 0xA653, 0xA653 }, + { 0xA655, 0xA655 }, + { 0xA657, 0xA657 }, + { 0xA659, 0xA659 }, + { 0xA65B, 0xA65B }, + { 0xA65D, 0xA65D }, + { 0xA65F, 0xA65F }, + { 0xA663, 0xA663 }, + { 0xA665, 0xA665 }, + { 0xA667, 0xA667 }, + { 0xA669, 0xA669 }, + { 0xA66B, 0xA66B }, + { 0xA66D, 0xA66D }, + { 0xA681, 0xA681 }, + { 0xA683, 0xA683 }, + { 0xA685, 0xA685 }, + { 0xA687, 0xA687 }, + { 0xA689, 0xA689 }, + { 0xA68B, 0xA68B }, + { 0xA68D, 0xA68D }, + { 0xA68F, 0xA68F }, + { 0xA691, 0xA691 }, + { 0xA693, 0xA693 }, + { 0xA695, 0xA695 }, + { 0xA697, 0xA697 }, + { 0xA723, 0xA723 }, + { 0xA725, 0xA725 }, + { 0xA727, 0xA727 }, + { 0xA729, 0xA729 }, + { 0xA72B, 0xA72B }, + { 0xA72D, 0xA72D }, + { 0xA72F, 0xA731 }, + { 0xA733, 0xA733 }, + { 0xA735, 0xA735 }, + { 0xA737, 0xA737 }, + { 0xA739, 0xA739 }, + { 0xA73B, 0xA73B }, + { 0xA73D, 0xA73D }, + { 0xA73F, 0xA73F }, + { 0xA741, 0xA741 }, + { 0xA743, 0xA743 }, + { 0xA745, 0xA745 }, + { 0xA747, 0xA747 }, + { 0xA749, 0xA749 }, + { 0xA74B, 0xA74B }, + { 0xA74D, 0xA74D }, + { 0xA74F, 0xA74F }, + { 0xA751, 0xA751 }, + { 0xA753, 0xA753 }, + { 0xA755, 0xA755 }, + { 0xA757, 0xA757 }, + { 0xA759, 0xA759 }, + { 0xA75B, 0xA75B }, + { 0xA75D, 0xA75D }, + { 0xA75F, 0xA75F }, + { 0xA761, 0xA761 }, + { 0xA763, 0xA763 }, + { 0xA765, 0xA765 }, + { 0xA767, 0xA767 }, + { 0xA769, 0xA769 }, + { 0xA76B, 0xA76B }, + { 0xA76D, 0xA76D }, + { 0xA76F, 0xA76F }, + { 0xA771, 0xA778 }, + { 0xA77A, 0xA77A }, + { 0xA77C, 0xA77C }, + { 0xA77F, 0xA77F }, + { 0xA781, 0xA781 }, + { 0xA783, 0xA783 }, + { 0xA785, 0xA785 }, + { 0xA787, 0xA787 }, + { 0xA78C, 0xA78C }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFF41, 0xFF5A }, + { 0x10428, 0x1044F }, + { 0x1D41A, 0x1D433 }, + { 0x1D44E, 0x1D454 }, + { 0x1D456, 0x1D467 }, + { 0x1D482, 0x1D49B }, + { 0x1D4B6, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D4CF }, + { 0x1D4EA, 0x1D503 }, + { 0x1D51E, 0x1D537 }, + { 0x1D552, 0x1D56B }, + { 0x1D586, 0x1D59F }, + { 0x1D5BA, 0x1D5D3 }, + { 0x1D5EE, 0x1D607 }, + { 0x1D622, 0x1D63B }, + { 0x1D656, 0x1D66F }, + { 0x1D68A, 0x1D6A5 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6E1 }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D71B }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D755 }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D78F }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7C9 }, + { 0x1D7CB, 0x1D7CB } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Ll) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Lm.c b/tests/unictype/test-categ_Lm.c new file mode 100644 index 00000000..7444b164 --- /dev/null +++ b/tests/unictype/test-categ_Lm.c @@ -0,0 +1,61 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x02B0, 0x02C1 }, + { 0x02C6, 0x02D1 }, + { 0x02E0, 0x02E4 }, + { 0x02EC, 0x02EC }, + { 0x02EE, 0x02EE }, + { 0x0374, 0x0374 }, + { 0x037A, 0x037A }, + { 0x0559, 0x0559 }, + { 0x0640, 0x0640 }, + { 0x06E5, 0x06E6 }, + { 0x07F4, 0x07F5 }, + { 0x07FA, 0x07FA }, + { 0x0971, 0x0971 }, + { 0x0E46, 0x0E46 }, + { 0x0EC6, 0x0EC6 }, + { 0x10FC, 0x10FC }, + { 0x17D7, 0x17D7 }, + { 0x1843, 0x1843 }, + { 0x1C78, 0x1C7D }, + { 0x1D2C, 0x1D61 }, + { 0x1D78, 0x1D78 }, + { 0x1D9B, 0x1DBF }, + { 0x2090, 0x2094 }, + { 0x2C7D, 0x2C7D }, + { 0x2D6F, 0x2D6F }, + { 0x2E2F, 0x2E2F }, + { 0x3005, 0x3005 }, + { 0x3031, 0x3035 }, + { 0x303B, 0x303B }, + { 0x309D, 0x309E }, + { 0x30FC, 0x30FE }, + { 0xA015, 0xA015 }, + { 0xA60C, 0xA60C }, + { 0xA67F, 0xA67F }, + { 0xA717, 0xA71F }, + { 0xA770, 0xA770 }, + { 0xA788, 0xA788 }, + { 0xFF70, 0xFF70 }, + { 0xFF9E, 0xFF9F } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Lm) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Lo.c b/tests/unictype/test-categ_Lo.c new file mode 100644 index 00000000..aaf69963 --- /dev/null +++ b/tests/unictype/test-categ_Lo.c @@ -0,0 +1,304 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x01BB, 0x01BB }, + { 0x01C0, 0x01C3 }, + { 0x0294, 0x0294 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F2 }, + { 0x0621, 0x063F }, + { 0x0641, 0x064A }, + { 0x066E, 0x066F }, + { 0x0671, 0x06D3 }, + { 0x06D5, 0x06D5 }, + { 0x06EE, 0x06EF }, + { 0x06FA, 0x06FC }, + { 0x06FF, 0x06FF }, + { 0x0710, 0x0710 }, + { 0x0712, 0x072F }, + { 0x074D, 0x07A5 }, + { 0x07B1, 0x07B1 }, + { 0x07CA, 0x07EA }, + { 0x0904, 0x0939 }, + { 0x093D, 0x093D }, + { 0x0950, 0x0950 }, + { 0x0958, 0x0961 }, + { 0x0972, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BD, 0x09BD }, + { 0x09CE, 0x09CE }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E1 }, + { 0x09F0, 0x09F1 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A72, 0x0A74 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABD, 0x0ABD }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE1 }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3D, 0x0B3D }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B61 }, + { 0x0B71, 0x0B71 }, + { 0x0B83, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BD0, 0x0BD0 }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C3D }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C61 }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBD, 0x0CBD }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE1 }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D3D }, + { 0x0D60, 0x0D61 }, + { 0x0D7A, 0x0D7F }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0E01, 0x0E30 }, + { 0x0E32, 0x0E33 }, + { 0x0E40, 0x0E45 }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB0 }, + { 0x0EB2, 0x0EB3 }, + { 0x0EBD, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F00 }, + { 0x0F40, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F88, 0x0F8B }, + { 0x1000, 0x102A }, + { 0x103F, 0x103F }, + { 0x1050, 0x1055 }, + { 0x105A, 0x105D }, + { 0x1061, 0x1061 }, + { 0x1065, 0x1066 }, + { 0x106E, 0x1070 }, + { 0x1075, 0x1081 }, + { 0x108E, 0x108E }, + { 0x10D0, 0x10FA }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x1380, 0x138F }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x166C }, + { 0x166F, 0x1676 }, + { 0x1681, 0x169A }, + { 0x16A0, 0x16EA }, + { 0x1700, 0x170C }, + { 0x170E, 0x1711 }, + { 0x1720, 0x1731 }, + { 0x1740, 0x1751 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1780, 0x17B3 }, + { 0x17DC, 0x17DC }, + { 0x1820, 0x1842 }, + { 0x1844, 0x1877 }, + { 0x1880, 0x18A8 }, + { 0x18AA, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1950, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19C1, 0x19C7 }, + { 0x1A00, 0x1A16 }, + { 0x1B05, 0x1B33 }, + { 0x1B45, 0x1B4B }, + { 0x1B83, 0x1BA0 }, + { 0x1BAE, 0x1BAF }, + { 0x1C00, 0x1C23 }, + { 0x1C4D, 0x1C4F }, + { 0x1C5A, 0x1C77 }, + { 0x2135, 0x2138 }, + { 0x2D30, 0x2D65 }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x3006, 0x3006 }, + { 0x303C, 0x303C }, + { 0x3041, 0x3096 }, + { 0x309F, 0x309F }, + { 0x30A1, 0x30FA }, + { 0x30FF, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x31A0, 0x31B7 }, + { 0x31F0, 0x31FF }, + { 0x3400, 0x4DB5 }, + { 0x4E00, 0x9FC3 }, + { 0xA000, 0xA014 }, + { 0xA016, 0xA48C }, + { 0xA500, 0xA60B }, + { 0xA610, 0xA61F }, + { 0xA62A, 0xA62B }, + { 0xA66E, 0xA66E }, + { 0xA7FB, 0xA801 }, + { 0xA803, 0xA805 }, + { 0xA807, 0xA80A }, + { 0xA80C, 0xA822 }, + { 0xA840, 0xA873 }, + { 0xA882, 0xA8B3 }, + { 0xA90A, 0xA925 }, + { 0xA930, 0xA946 }, + { 0xAA00, 0xAA28 }, + { 0xAA40, 0xAA42 }, + { 0xAA44, 0xAA4B }, + { 0xAC00, 0xD7A3 }, + { 0xF900, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB1D, 0xFB1D }, + { 0xFB1F, 0xFB28 }, + { 0xFB2A, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFD3D }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDFB }, + { 0xFE70, 0xFE74 }, + { 0xFE76, 0xFEFC }, + { 0xFF66, 0xFF6F }, + { 0xFF71, 0xFF9D }, + { 0xFFA0, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10330, 0x10340 }, + { 0x10342, 0x10349 }, + { 0x10380, 0x1039D }, + { 0x103A0, 0x103C3 }, + { 0x103C8, 0x103CF }, + { 0x10450, 0x1049D }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10915 }, + { 0x10920, 0x10939 }, + { 0x10A00, 0x10A00 }, + { 0x10A10, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x12000, 0x1236E }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Lo) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Lt.c b/tests/unictype/test-categ_Lt.c new file mode 100644 index 00000000..6f319237 --- /dev/null +++ b/tests/unictype/test-categ_Lt.c @@ -0,0 +1,32 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x01C5, 0x01C5 }, + { 0x01C8, 0x01C8 }, + { 0x01CB, 0x01CB }, + { 0x01F2, 0x01F2 }, + { 0x1F88, 0x1F8F }, + { 0x1F98, 0x1F9F }, + { 0x1FA8, 0x1FAF }, + { 0x1FBC, 0x1FBC }, + { 0x1FCC, 0x1FCC }, + { 0x1FFC, 0x1FFC } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Lt) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Lu.c b/tests/unictype/test-categ_Lu.c new file mode 100644 index 00000000..1ed6b403 --- /dev/null +++ b/tests/unictype/test-categ_Lu.c @@ -0,0 +1,613 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0041, 0x005A }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00DE }, + { 0x0100, 0x0100 }, + { 0x0102, 0x0102 }, + { 0x0104, 0x0104 }, + { 0x0106, 0x0106 }, + { 0x0108, 0x0108 }, + { 0x010A, 0x010A }, + { 0x010C, 0x010C }, + { 0x010E, 0x010E }, + { 0x0110, 0x0110 }, + { 0x0112, 0x0112 }, + { 0x0114, 0x0114 }, + { 0x0116, 0x0116 }, + { 0x0118, 0x0118 }, + { 0x011A, 0x011A }, + { 0x011C, 0x011C }, + { 0x011E, 0x011E }, + { 0x0120, 0x0120 }, + { 0x0122, 0x0122 }, + { 0x0124, 0x0124 }, + { 0x0126, 0x0126 }, + { 0x0128, 0x0128 }, + { 0x012A, 0x012A }, + { 0x012C, 0x012C }, + { 0x012E, 0x012E }, + { 0x0130, 0x0130 }, + { 0x0132, 0x0132 }, + { 0x0134, 0x0134 }, + { 0x0136, 0x0136 }, + { 0x0139, 0x0139 }, + { 0x013B, 0x013B }, + { 0x013D, 0x013D }, + { 0x013F, 0x013F }, + { 0x0141, 0x0141 }, + { 0x0143, 0x0143 }, + { 0x0145, 0x0145 }, + { 0x0147, 0x0147 }, + { 0x014A, 0x014A }, + { 0x014C, 0x014C }, + { 0x014E, 0x014E }, + { 0x0150, 0x0150 }, + { 0x0152, 0x0152 }, + { 0x0154, 0x0154 }, + { 0x0156, 0x0156 }, + { 0x0158, 0x0158 }, + { 0x015A, 0x015A }, + { 0x015C, 0x015C }, + { 0x015E, 0x015E }, + { 0x0160, 0x0160 }, + { 0x0162, 0x0162 }, + { 0x0164, 0x0164 }, + { 0x0166, 0x0166 }, + { 0x0168, 0x0168 }, + { 0x016A, 0x016A }, + { 0x016C, 0x016C }, + { 0x016E, 0x016E }, + { 0x0170, 0x0170 }, + { 0x0172, 0x0172 }, + { 0x0174, 0x0174 }, + { 0x0176, 0x0176 }, + { 0x0178, 0x0179 }, + { 0x017B, 0x017B }, + { 0x017D, 0x017D }, + { 0x0181, 0x0182 }, + { 0x0184, 0x0184 }, + { 0x0186, 0x0187 }, + { 0x0189, 0x018B }, + { 0x018E, 0x0191 }, + { 0x0193, 0x0194 }, + { 0x0196, 0x0198 }, + { 0x019C, 0x019D }, + { 0x019F, 0x01A0 }, + { 0x01A2, 0x01A2 }, + { 0x01A4, 0x01A4 }, + { 0x01A6, 0x01A7 }, + { 0x01A9, 0x01A9 }, + { 0x01AC, 0x01AC }, + { 0x01AE, 0x01AF }, + { 0x01B1, 0x01B3 }, + { 0x01B5, 0x01B5 }, + { 0x01B7, 0x01B8 }, + { 0x01BC, 0x01BC }, + { 0x01C4, 0x01C4 }, + { 0x01C7, 0x01C7 }, + { 0x01CA, 0x01CA }, + { 0x01CD, 0x01CD }, + { 0x01CF, 0x01CF }, + { 0x01D1, 0x01D1 }, + { 0x01D3, 0x01D3 }, + { 0x01D5, 0x01D5 }, + { 0x01D7, 0x01D7 }, + { 0x01D9, 0x01D9 }, + { 0x01DB, 0x01DB }, + { 0x01DE, 0x01DE }, + { 0x01E0, 0x01E0 }, + { 0x01E2, 0x01E2 }, + { 0x01E4, 0x01E4 }, + { 0x01E6, 0x01E6 }, + { 0x01E8, 0x01E8 }, + { 0x01EA, 0x01EA }, + { 0x01EC, 0x01EC }, + { 0x01EE, 0x01EE }, + { 0x01F1, 0x01F1 }, + { 0x01F4, 0x01F4 }, + { 0x01F6, 0x01F8 }, + { 0x01FA, 0x01FA }, + { 0x01FC, 0x01FC }, + { 0x01FE, 0x01FE }, + { 0x0200, 0x0200 }, + { 0x0202, 0x0202 }, + { 0x0204, 0x0204 }, + { 0x0206, 0x0206 }, + { 0x0208, 0x0208 }, + { 0x020A, 0x020A }, + { 0x020C, 0x020C }, + { 0x020E, 0x020E }, + { 0x0210, 0x0210 }, + { 0x0212, 0x0212 }, + { 0x0214, 0x0214 }, + { 0x0216, 0x0216 }, + { 0x0218, 0x0218 }, + { 0x021A, 0x021A }, + { 0x021C, 0x021C }, + { 0x021E, 0x021E }, + { 0x0220, 0x0220 }, + { 0x0222, 0x0222 }, + { 0x0224, 0x0224 }, + { 0x0226, 0x0226 }, + { 0x0228, 0x0228 }, + { 0x022A, 0x022A }, + { 0x022C, 0x022C }, + { 0x022E, 0x022E }, + { 0x0230, 0x0230 }, + { 0x0232, 0x0232 }, + { 0x023A, 0x023B }, + { 0x023D, 0x023E }, + { 0x0241, 0x0241 }, + { 0x0243, 0x0246 }, + { 0x0248, 0x0248 }, + { 0x024A, 0x024A }, + { 0x024C, 0x024C }, + { 0x024E, 0x024E }, + { 0x0370, 0x0370 }, + { 0x0372, 0x0372 }, + { 0x0376, 0x0376 }, + { 0x0386, 0x0386 }, + { 0x0388, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x038F }, + { 0x0391, 0x03A1 }, + { 0x03A3, 0x03AB }, + { 0x03CF, 0x03CF }, + { 0x03D2, 0x03D4 }, + { 0x03D8, 0x03D8 }, + { 0x03DA, 0x03DA }, + { 0x03DC, 0x03DC }, + { 0x03DE, 0x03DE }, + { 0x03E0, 0x03E0 }, + { 0x03E2, 0x03E2 }, + { 0x03E4, 0x03E4 }, + { 0x03E6, 0x03E6 }, + { 0x03E8, 0x03E8 }, + { 0x03EA, 0x03EA }, + { 0x03EC, 0x03EC }, + { 0x03EE, 0x03EE }, + { 0x03F4, 0x03F4 }, + { 0x03F7, 0x03F7 }, + { 0x03F9, 0x03FA }, + { 0x03FD, 0x042F }, + { 0x0460, 0x0460 }, + { 0x0462, 0x0462 }, + { 0x0464, 0x0464 }, + { 0x0466, 0x0466 }, + { 0x0468, 0x0468 }, + { 0x046A, 0x046A }, + { 0x046C, 0x046C }, + { 0x046E, 0x046E }, + { 0x0470, 0x0470 }, + { 0x0472, 0x0472 }, + { 0x0474, 0x0474 }, + { 0x0476, 0x0476 }, + { 0x0478, 0x0478 }, + { 0x047A, 0x047A }, + { 0x047C, 0x047C }, + { 0x047E, 0x047E }, + { 0x0480, 0x0480 }, + { 0x048A, 0x048A }, + { 0x048C, 0x048C }, + { 0x048E, 0x048E }, + { 0x0490, 0x0490 }, + { 0x0492, 0x0492 }, + { 0x0494, 0x0494 }, + { 0x0496, 0x0496 }, + { 0x0498, 0x0498 }, + { 0x049A, 0x049A }, + { 0x049C, 0x049C }, + { 0x049E, 0x049E }, + { 0x04A0, 0x04A0 }, + { 0x04A2, 0x04A2 }, + { 0x04A4, 0x04A4 }, + { 0x04A6, 0x04A6 }, + { 0x04A8, 0x04A8 }, + { 0x04AA, 0x04AA }, + { 0x04AC, 0x04AC }, + { 0x04AE, 0x04AE }, + { 0x04B0, 0x04B0 }, + { 0x04B2, 0x04B2 }, + { 0x04B4, 0x04B4 }, + { 0x04B6, 0x04B6 }, + { 0x04B8, 0x04B8 }, + { 0x04BA, 0x04BA }, + { 0x04BC, 0x04BC }, + { 0x04BE, 0x04BE }, + { 0x04C0, 0x04C1 }, + { 0x04C3, 0x04C3 }, + { 0x04C5, 0x04C5 }, + { 0x04C7, 0x04C7 }, + { 0x04C9, 0x04C9 }, + { 0x04CB, 0x04CB }, + { 0x04CD, 0x04CD }, + { 0x04D0, 0x04D0 }, + { 0x04D2, 0x04D2 }, + { 0x04D4, 0x04D4 }, + { 0x04D6, 0x04D6 }, + { 0x04D8, 0x04D8 }, + { 0x04DA, 0x04DA }, + { 0x04DC, 0x04DC }, + { 0x04DE, 0x04DE }, + { 0x04E0, 0x04E0 }, + { 0x04E2, 0x04E2 }, + { 0x04E4, 0x04E4 }, + { 0x04E6, 0x04E6 }, + { 0x04E8, 0x04E8 }, + { 0x04EA, 0x04EA }, + { 0x04EC, 0x04EC }, + { 0x04EE, 0x04EE }, + { 0x04F0, 0x04F0 }, + { 0x04F2, 0x04F2 }, + { 0x04F4, 0x04F4 }, + { 0x04F6, 0x04F6 }, + { 0x04F8, 0x04F8 }, + { 0x04FA, 0x04FA }, + { 0x04FC, 0x04FC }, + { 0x04FE, 0x04FE }, + { 0x0500, 0x0500 }, + { 0x0502, 0x0502 }, + { 0x0504, 0x0504 }, + { 0x0506, 0x0506 }, + { 0x0508, 0x0508 }, + { 0x050A, 0x050A }, + { 0x050C, 0x050C }, + { 0x050E, 0x050E }, + { 0x0510, 0x0510 }, + { 0x0512, 0x0512 }, + { 0x0514, 0x0514 }, + { 0x0516, 0x0516 }, + { 0x0518, 0x0518 }, + { 0x051A, 0x051A }, + { 0x051C, 0x051C }, + { 0x051E, 0x051E }, + { 0x0520, 0x0520 }, + { 0x0522, 0x0522 }, + { 0x0531, 0x0556 }, + { 0x10A0, 0x10C5 }, + { 0x1E00, 0x1E00 }, + { 0x1E02, 0x1E02 }, + { 0x1E04, 0x1E04 }, + { 0x1E06, 0x1E06 }, + { 0x1E08, 0x1E08 }, + { 0x1E0A, 0x1E0A }, + { 0x1E0C, 0x1E0C }, + { 0x1E0E, 0x1E0E }, + { 0x1E10, 0x1E10 }, + { 0x1E12, 0x1E12 }, + { 0x1E14, 0x1E14 }, + { 0x1E16, 0x1E16 }, + { 0x1E18, 0x1E18 }, + { 0x1E1A, 0x1E1A }, + { 0x1E1C, 0x1E1C }, + { 0x1E1E, 0x1E1E }, + { 0x1E20, 0x1E20 }, + { 0x1E22, 0x1E22 }, + { 0x1E24, 0x1E24 }, + { 0x1E26, 0x1E26 }, + { 0x1E28, 0x1E28 }, + { 0x1E2A, 0x1E2A }, + { 0x1E2C, 0x1E2C }, + { 0x1E2E, 0x1E2E }, + { 0x1E30, 0x1E30 }, + { 0x1E32, 0x1E32 }, + { 0x1E34, 0x1E34 }, + { 0x1E36, 0x1E36 }, + { 0x1E38, 0x1E38 }, + { 0x1E3A, 0x1E3A }, + { 0x1E3C, 0x1E3C }, + { 0x1E3E, 0x1E3E }, + { 0x1E40, 0x1E40 }, + { 0x1E42, 0x1E42 }, + { 0x1E44, 0x1E44 }, + { 0x1E46, 0x1E46 }, + { 0x1E48, 0x1E48 }, + { 0x1E4A, 0x1E4A }, + { 0x1E4C, 0x1E4C }, + { 0x1E4E, 0x1E4E }, + { 0x1E50, 0x1E50 }, + { 0x1E52, 0x1E52 }, + { 0x1E54, 0x1E54 }, + { 0x1E56, 0x1E56 }, + { 0x1E58, 0x1E58 }, + { 0x1E5A, 0x1E5A }, + { 0x1E5C, 0x1E5C }, + { 0x1E5E, 0x1E5E }, + { 0x1E60, 0x1E60 }, + { 0x1E62, 0x1E62 }, + { 0x1E64, 0x1E64 }, + { 0x1E66, 0x1E66 }, + { 0x1E68, 0x1E68 }, + { 0x1E6A, 0x1E6A }, + { 0x1E6C, 0x1E6C }, + { 0x1E6E, 0x1E6E }, + { 0x1E70, 0x1E70 }, + { 0x1E72, 0x1E72 }, + { 0x1E74, 0x1E74 }, + { 0x1E76, 0x1E76 }, + { 0x1E78, 0x1E78 }, + { 0x1E7A, 0x1E7A }, + { 0x1E7C, 0x1E7C }, + { 0x1E7E, 0x1E7E }, + { 0x1E80, 0x1E80 }, + { 0x1E82, 0x1E82 }, + { 0x1E84, 0x1E84 }, + { 0x1E86, 0x1E86 }, + { 0x1E88, 0x1E88 }, + { 0x1E8A, 0x1E8A }, + { 0x1E8C, 0x1E8C }, + { 0x1E8E, 0x1E8E }, + { 0x1E90, 0x1E90 }, + { 0x1E92, 0x1E92 }, + { 0x1E94, 0x1E94 }, + { 0x1E9E, 0x1E9E }, + { 0x1EA0, 0x1EA0 }, + { 0x1EA2, 0x1EA2 }, + { 0x1EA4, 0x1EA4 }, + { 0x1EA6, 0x1EA6 }, + { 0x1EA8, 0x1EA8 }, + { 0x1EAA, 0x1EAA }, + { 0x1EAC, 0x1EAC }, + { 0x1EAE, 0x1EAE }, + { 0x1EB0, 0x1EB0 }, + { 0x1EB2, 0x1EB2 }, + { 0x1EB4, 0x1EB4 }, + { 0x1EB6, 0x1EB6 }, + { 0x1EB8, 0x1EB8 }, + { 0x1EBA, 0x1EBA }, + { 0x1EBC, 0x1EBC }, + { 0x1EBE, 0x1EBE }, + { 0x1EC0, 0x1EC0 }, + { 0x1EC2, 0x1EC2 }, + { 0x1EC4, 0x1EC4 }, + { 0x1EC6, 0x1EC6 }, + { 0x1EC8, 0x1EC8 }, + { 0x1ECA, 0x1ECA }, + { 0x1ECC, 0x1ECC }, + { 0x1ECE, 0x1ECE }, + { 0x1ED0, 0x1ED0 }, + { 0x1ED2, 0x1ED2 }, + { 0x1ED4, 0x1ED4 }, + { 0x1ED6, 0x1ED6 }, + { 0x1ED8, 0x1ED8 }, + { 0x1EDA, 0x1EDA }, + { 0x1EDC, 0x1EDC }, + { 0x1EDE, 0x1EDE }, + { 0x1EE0, 0x1EE0 }, + { 0x1EE2, 0x1EE2 }, + { 0x1EE4, 0x1EE4 }, + { 0x1EE6, 0x1EE6 }, + { 0x1EE8, 0x1EE8 }, + { 0x1EEA, 0x1EEA }, + { 0x1EEC, 0x1EEC }, + { 0x1EEE, 0x1EEE }, + { 0x1EF0, 0x1EF0 }, + { 0x1EF2, 0x1EF2 }, + { 0x1EF4, 0x1EF4 }, + { 0x1EF6, 0x1EF6 }, + { 0x1EF8, 0x1EF8 }, + { 0x1EFA, 0x1EFA }, + { 0x1EFC, 0x1EFC }, + { 0x1EFE, 0x1EFE }, + { 0x1F08, 0x1F0F }, + { 0x1F18, 0x1F1D }, + { 0x1F28, 0x1F2F }, + { 0x1F38, 0x1F3F }, + { 0x1F48, 0x1F4D }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F5F }, + { 0x1F68, 0x1F6F }, + { 0x1FB8, 0x1FBB }, + { 0x1FC8, 0x1FCB }, + { 0x1FD8, 0x1FDB }, + { 0x1FE8, 0x1FEC }, + { 0x1FF8, 0x1FFB }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210B, 0x210D }, + { 0x2110, 0x2112 }, + { 0x2115, 0x2115 }, + { 0x2119, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x2128 }, + { 0x212A, 0x212D }, + { 0x2130, 0x2133 }, + { 0x213E, 0x213F }, + { 0x2145, 0x2145 }, + { 0x2183, 0x2183 }, + { 0x2C00, 0x2C2E }, + { 0x2C60, 0x2C60 }, + { 0x2C62, 0x2C64 }, + { 0x2C67, 0x2C67 }, + { 0x2C69, 0x2C69 }, + { 0x2C6B, 0x2C6B }, + { 0x2C6D, 0x2C6F }, + { 0x2C72, 0x2C72 }, + { 0x2C75, 0x2C75 }, + { 0x2C80, 0x2C80 }, + { 0x2C82, 0x2C82 }, + { 0x2C84, 0x2C84 }, + { 0x2C86, 0x2C86 }, + { 0x2C88, 0x2C88 }, + { 0x2C8A, 0x2C8A }, + { 0x2C8C, 0x2C8C }, + { 0x2C8E, 0x2C8E }, + { 0x2C90, 0x2C90 }, + { 0x2C92, 0x2C92 }, + { 0x2C94, 0x2C94 }, + { 0x2C96, 0x2C96 }, + { 0x2C98, 0x2C98 }, + { 0x2C9A, 0x2C9A }, + { 0x2C9C, 0x2C9C }, + { 0x2C9E, 0x2C9E }, + { 0x2CA0, 0x2CA0 }, + { 0x2CA2, 0x2CA2 }, + { 0x2CA4, 0x2CA4 }, + { 0x2CA6, 0x2CA6 }, + { 0x2CA8, 0x2CA8 }, + { 0x2CAA, 0x2CAA }, + { 0x2CAC, 0x2CAC }, + { 0x2CAE, 0x2CAE }, + { 0x2CB0, 0x2CB0 }, + { 0x2CB2, 0x2CB2 }, + { 0x2CB4, 0x2CB4 }, + { 0x2CB6, 0x2CB6 }, + { 0x2CB8, 0x2CB8 }, + { 0x2CBA, 0x2CBA }, + { 0x2CBC, 0x2CBC }, + { 0x2CBE, 0x2CBE }, + { 0x2CC0, 0x2CC0 }, + { 0x2CC2, 0x2CC2 }, + { 0x2CC4, 0x2CC4 }, + { 0x2CC6, 0x2CC6 }, + { 0x2CC8, 0x2CC8 }, + { 0x2CCA, 0x2CCA }, + { 0x2CCC, 0x2CCC }, + { 0x2CCE, 0x2CCE }, + { 0x2CD0, 0x2CD0 }, + { 0x2CD2, 0x2CD2 }, + { 0x2CD4, 0x2CD4 }, + { 0x2CD6, 0x2CD6 }, + { 0x2CD8, 0x2CD8 }, + { 0x2CDA, 0x2CDA }, + { 0x2CDC, 0x2CDC }, + { 0x2CDE, 0x2CDE }, + { 0x2CE0, 0x2CE0 }, + { 0x2CE2, 0x2CE2 }, + { 0xA640, 0xA640 }, + { 0xA642, 0xA642 }, + { 0xA644, 0xA644 }, + { 0xA646, 0xA646 }, + { 0xA648, 0xA648 }, + { 0xA64A, 0xA64A }, + { 0xA64C, 0xA64C }, + { 0xA64E, 0xA64E }, + { 0xA650, 0xA650 }, + { 0xA652, 0xA652 }, + { 0xA654, 0xA654 }, + { 0xA656, 0xA656 }, + { 0xA658, 0xA658 }, + { 0xA65A, 0xA65A }, + { 0xA65C, 0xA65C }, + { 0xA65E, 0xA65E }, + { 0xA662, 0xA662 }, + { 0xA664, 0xA664 }, + { 0xA666, 0xA666 }, + { 0xA668, 0xA668 }, + { 0xA66A, 0xA66A }, + { 0xA66C, 0xA66C }, + { 0xA680, 0xA680 }, + { 0xA682, 0xA682 }, + { 0xA684, 0xA684 }, + { 0xA686, 0xA686 }, + { 0xA688, 0xA688 }, + { 0xA68A, 0xA68A }, + { 0xA68C, 0xA68C }, + { 0xA68E, 0xA68E }, + { 0xA690, 0xA690 }, + { 0xA692, 0xA692 }, + { 0xA694, 0xA694 }, + { 0xA696, 0xA696 }, + { 0xA722, 0xA722 }, + { 0xA724, 0xA724 }, + { 0xA726, 0xA726 }, + { 0xA728, 0xA728 }, + { 0xA72A, 0xA72A }, + { 0xA72C, 0xA72C }, + { 0xA72E, 0xA72E }, + { 0xA732, 0xA732 }, + { 0xA734, 0xA734 }, + { 0xA736, 0xA736 }, + { 0xA738, 0xA738 }, + { 0xA73A, 0xA73A }, + { 0xA73C, 0xA73C }, + { 0xA73E, 0xA73E }, + { 0xA740, 0xA740 }, + { 0xA742, 0xA742 }, + { 0xA744, 0xA744 }, + { 0xA746, 0xA746 }, + { 0xA748, 0xA748 }, + { 0xA74A, 0xA74A }, + { 0xA74C, 0xA74C }, + { 0xA74E, 0xA74E }, + { 0xA750, 0xA750 }, + { 0xA752, 0xA752 }, + { 0xA754, 0xA754 }, + { 0xA756, 0xA756 }, + { 0xA758, 0xA758 }, + { 0xA75A, 0xA75A }, + { 0xA75C, 0xA75C }, + { 0xA75E, 0xA75E }, + { 0xA760, 0xA760 }, + { 0xA762, 0xA762 }, + { 0xA764, 0xA764 }, + { 0xA766, 0xA766 }, + { 0xA768, 0xA768 }, + { 0xA76A, 0xA76A }, + { 0xA76C, 0xA76C }, + { 0xA76E, 0xA76E }, + { 0xA779, 0xA779 }, + { 0xA77B, 0xA77B }, + { 0xA77D, 0xA77E }, + { 0xA780, 0xA780 }, + { 0xA782, 0xA782 }, + { 0xA784, 0xA784 }, + { 0xA786, 0xA786 }, + { 0xA78B, 0xA78B }, + { 0xFF21, 0xFF3A }, + { 0x10400, 0x10427 }, + { 0x1D400, 0x1D419 }, + { 0x1D434, 0x1D44D }, + { 0x1D468, 0x1D481 }, + { 0x1D49C, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B5 }, + { 0x1D4D0, 0x1D4E9 }, + { 0x1D504, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D538, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D56C, 0x1D585 }, + { 0x1D5A0, 0x1D5B9 }, + { 0x1D5D4, 0x1D5ED }, + { 0x1D608, 0x1D621 }, + { 0x1D63C, 0x1D655 }, + { 0x1D670, 0x1D689 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6E2, 0x1D6FA }, + { 0x1D71C, 0x1D734 }, + { 0x1D756, 0x1D76E }, + { 0x1D790, 0x1D7A8 }, + { 0x1D7CA, 0x1D7CA } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Lu) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_M.c b/tests/unictype/test-categ_M.c new file mode 100644 index 00000000..c6138d6e --- /dev/null +++ b/tests/unictype/test-categ_M.c @@ -0,0 +1,183 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0300, 0x036F }, + { 0x0483, 0x0489 }, + { 0x0591, 0x05BD }, + { 0x05BF, 0x05BF }, + { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, + { 0x05C7, 0x05C7 }, + { 0x0610, 0x061A }, + { 0x064B, 0x065E }, + { 0x0670, 0x0670 }, + { 0x06D6, 0x06DC }, + { 0x06DE, 0x06E4 }, + { 0x06E7, 0x06E8 }, + { 0x06EA, 0x06ED }, + { 0x0711, 0x0711 }, + { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, + { 0x07EB, 0x07F3 }, + { 0x0901, 0x0903 }, + { 0x093C, 0x093C }, + { 0x093E, 0x094D }, + { 0x0951, 0x0954 }, + { 0x0962, 0x0963 }, + { 0x0981, 0x0983 }, + { 0x09BC, 0x09BC }, + { 0x09BE, 0x09C4 }, + { 0x09C7, 0x09C8 }, + { 0x09CB, 0x09CD }, + { 0x09D7, 0x09D7 }, + { 0x09E2, 0x09E3 }, + { 0x0A01, 0x0A03 }, + { 0x0A3C, 0x0A3C }, + { 0x0A3E, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, + { 0x0A51, 0x0A51 }, + { 0x0A70, 0x0A71 }, + { 0x0A75, 0x0A75 }, + { 0x0A81, 0x0A83 }, + { 0x0ABC, 0x0ABC }, + { 0x0ABE, 0x0AC5 }, + { 0x0AC7, 0x0AC9 }, + { 0x0ACB, 0x0ACD }, + { 0x0AE2, 0x0AE3 }, + { 0x0B01, 0x0B03 }, + { 0x0B3C, 0x0B3C }, + { 0x0B3E, 0x0B44 }, + { 0x0B47, 0x0B48 }, + { 0x0B4B, 0x0B4D }, + { 0x0B56, 0x0B57 }, + { 0x0B62, 0x0B63 }, + { 0x0B82, 0x0B82 }, + { 0x0BBE, 0x0BC2 }, + { 0x0BC6, 0x0BC8 }, + { 0x0BCA, 0x0BCD }, + { 0x0BD7, 0x0BD7 }, + { 0x0C01, 0x0C03 }, + { 0x0C3E, 0x0C44 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, + { 0x0C55, 0x0C56 }, + { 0x0C62, 0x0C63 }, + { 0x0C82, 0x0C83 }, + { 0x0CBC, 0x0CBC }, + { 0x0CBE, 0x0CC4 }, + { 0x0CC6, 0x0CC8 }, + { 0x0CCA, 0x0CCD }, + { 0x0CD5, 0x0CD6 }, + { 0x0CE2, 0x0CE3 }, + { 0x0D02, 0x0D03 }, + { 0x0D3E, 0x0D44 }, + { 0x0D46, 0x0D48 }, + { 0x0D4A, 0x0D4D }, + { 0x0D57, 0x0D57 }, + { 0x0D62, 0x0D63 }, + { 0x0D82, 0x0D83 }, + { 0x0DCA, 0x0DCA }, + { 0x0DCF, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0DD8, 0x0DDF }, + { 0x0DF2, 0x0DF3 }, + { 0x0E31, 0x0E31 }, + { 0x0E34, 0x0E3A }, + { 0x0E47, 0x0E4E }, + { 0x0EB1, 0x0EB1 }, + { 0x0EB4, 0x0EB9 }, + { 0x0EBB, 0x0EBC }, + { 0x0EC8, 0x0ECD }, + { 0x0F18, 0x0F19 }, + { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, + { 0x0F39, 0x0F39 }, + { 0x0F3E, 0x0F3F }, + { 0x0F71, 0x0F84 }, + { 0x0F86, 0x0F87 }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x0FC6, 0x0FC6 }, + { 0x102B, 0x103E }, + { 0x1056, 0x1059 }, + { 0x105E, 0x1060 }, + { 0x1062, 0x1064 }, + { 0x1067, 0x106D }, + { 0x1071, 0x1074 }, + { 0x1082, 0x108D }, + { 0x108F, 0x108F }, + { 0x135F, 0x135F }, + { 0x1712, 0x1714 }, + { 0x1732, 0x1734 }, + { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, + { 0x17B6, 0x17D3 }, + { 0x17DD, 0x17DD }, + { 0x180B, 0x180D }, + { 0x18A9, 0x18A9 }, + { 0x1920, 0x192B }, + { 0x1930, 0x193B }, + { 0x19B0, 0x19C0 }, + { 0x19C8, 0x19C9 }, + { 0x1A17, 0x1A1B }, + { 0x1B00, 0x1B04 }, + { 0x1B34, 0x1B44 }, + { 0x1B6B, 0x1B73 }, + { 0x1B80, 0x1B82 }, + { 0x1BA1, 0x1BAA }, + { 0x1C24, 0x1C37 }, + { 0x1DC0, 0x1DE6 }, + { 0x1DFE, 0x1DFF }, + { 0x20D0, 0x20F0 }, + { 0x2DE0, 0x2DFF }, + { 0x302A, 0x302F }, + { 0x3099, 0x309A }, + { 0xA66F, 0xA672 }, + { 0xA67C, 0xA67D }, + { 0xA802, 0xA802 }, + { 0xA806, 0xA806 }, + { 0xA80B, 0xA80B }, + { 0xA823, 0xA827 }, + { 0xA880, 0xA881 }, + { 0xA8B4, 0xA8C4 }, + { 0xA926, 0xA92D }, + { 0xA947, 0xA953 }, + { 0xAA29, 0xAA36 }, + { 0xAA43, 0xAA43 }, + { 0xAA4C, 0xAA4D }, + { 0xFB1E, 0xFB1E }, + { 0xFE00, 0xFE0F }, + { 0xFE20, 0xFE26 }, + { 0x101FD, 0x101FD }, + { 0x10A01, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A0F }, + { 0x10A38, 0x10A3A }, + { 0x10A3F, 0x10A3F }, + { 0x1D165, 0x1D169 }, + { 0x1D16D, 0x1D172 }, + { 0x1D17B, 0x1D182 }, + { 0x1D185, 0x1D18B }, + { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, + { 0xE0100, 0xE01EF } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_M) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Mc.c b/tests/unictype/test-categ_Mc.c new file mode 100644 index 00000000..4984b4b9 --- /dev/null +++ b/tests/unictype/test-categ_Mc.c @@ -0,0 +1,107 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0903, 0x0903 }, + { 0x093E, 0x0940 }, + { 0x0949, 0x094C }, + { 0x0982, 0x0983 }, + { 0x09BE, 0x09C0 }, + { 0x09C7, 0x09C8 }, + { 0x09CB, 0x09CC }, + { 0x09D7, 0x09D7 }, + { 0x0A03, 0x0A03 }, + { 0x0A3E, 0x0A40 }, + { 0x0A83, 0x0A83 }, + { 0x0ABE, 0x0AC0 }, + { 0x0AC9, 0x0AC9 }, + { 0x0ACB, 0x0ACC }, + { 0x0B02, 0x0B03 }, + { 0x0B3E, 0x0B3E }, + { 0x0B40, 0x0B40 }, + { 0x0B47, 0x0B48 }, + { 0x0B4B, 0x0B4C }, + { 0x0B57, 0x0B57 }, + { 0x0BBE, 0x0BBF }, + { 0x0BC1, 0x0BC2 }, + { 0x0BC6, 0x0BC8 }, + { 0x0BCA, 0x0BCC }, + { 0x0BD7, 0x0BD7 }, + { 0x0C01, 0x0C03 }, + { 0x0C41, 0x0C44 }, + { 0x0C82, 0x0C83 }, + { 0x0CBE, 0x0CBE }, + { 0x0CC0, 0x0CC4 }, + { 0x0CC7, 0x0CC8 }, + { 0x0CCA, 0x0CCB }, + { 0x0CD5, 0x0CD6 }, + { 0x0D02, 0x0D03 }, + { 0x0D3E, 0x0D40 }, + { 0x0D46, 0x0D48 }, + { 0x0D4A, 0x0D4C }, + { 0x0D57, 0x0D57 }, + { 0x0D82, 0x0D83 }, + { 0x0DCF, 0x0DD1 }, + { 0x0DD8, 0x0DDF }, + { 0x0DF2, 0x0DF3 }, + { 0x0F3E, 0x0F3F }, + { 0x0F7F, 0x0F7F }, + { 0x102B, 0x102C }, + { 0x1031, 0x1031 }, + { 0x1038, 0x1038 }, + { 0x103B, 0x103C }, + { 0x1056, 0x1057 }, + { 0x1062, 0x1064 }, + { 0x1067, 0x106D }, + { 0x1083, 0x1084 }, + { 0x1087, 0x108C }, + { 0x108F, 0x108F }, + { 0x17B6, 0x17B6 }, + { 0x17BE, 0x17C5 }, + { 0x17C7, 0x17C8 }, + { 0x1923, 0x1926 }, + { 0x1929, 0x192B }, + { 0x1930, 0x1931 }, + { 0x1933, 0x1938 }, + { 0x19B0, 0x19C0 }, + { 0x19C8, 0x19C9 }, + { 0x1A19, 0x1A1B }, + { 0x1B04, 0x1B04 }, + { 0x1B35, 0x1B35 }, + { 0x1B3B, 0x1B3B }, + { 0x1B3D, 0x1B41 }, + { 0x1B43, 0x1B44 }, + { 0x1B82, 0x1B82 }, + { 0x1BA1, 0x1BA1 }, + { 0x1BA6, 0x1BA7 }, + { 0x1BAA, 0x1BAA }, + { 0x1C24, 0x1C2B }, + { 0x1C34, 0x1C35 }, + { 0xA823, 0xA824 }, + { 0xA827, 0xA827 }, + { 0xA880, 0xA881 }, + { 0xA8B4, 0xA8C3 }, + { 0xA952, 0xA953 }, + { 0xAA2F, 0xAA30 }, + { 0xAA33, 0xAA34 }, + { 0xAA4D, 0xAA4D }, + { 0x1D165, 0x1D166 }, + { 0x1D16D, 0x1D172 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Mc) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Me.c b/tests/unictype/test-categ_Me.c new file mode 100644 index 00000000..f8aa3855 --- /dev/null +++ b/tests/unictype/test-categ_Me.c @@ -0,0 +1,27 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0488, 0x0489 }, + { 0x06DE, 0x06DE }, + { 0x20DD, 0x20E0 }, + { 0x20E2, 0x20E4 }, + { 0xA670, 0xA672 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Me) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Mn.c b/tests/unictype/test-categ_Mn.c new file mode 100644 index 00000000..a29b6e5c --- /dev/null +++ b/tests/unictype/test-categ_Mn.c @@ -0,0 +1,182 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0300, 0x036F }, + { 0x0483, 0x0487 }, + { 0x0591, 0x05BD }, + { 0x05BF, 0x05BF }, + { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, + { 0x05C7, 0x05C7 }, + { 0x0610, 0x061A }, + { 0x064B, 0x065E }, + { 0x0670, 0x0670 }, + { 0x06D6, 0x06DC }, + { 0x06DF, 0x06E4 }, + { 0x06E7, 0x06E8 }, + { 0x06EA, 0x06ED }, + { 0x0711, 0x0711 }, + { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, + { 0x07EB, 0x07F3 }, + { 0x0901, 0x0902 }, + { 0x093C, 0x093C }, + { 0x0941, 0x0948 }, + { 0x094D, 0x094D }, + { 0x0951, 0x0954 }, + { 0x0962, 0x0963 }, + { 0x0981, 0x0981 }, + { 0x09BC, 0x09BC }, + { 0x09C1, 0x09C4 }, + { 0x09CD, 0x09CD }, + { 0x09E2, 0x09E3 }, + { 0x0A01, 0x0A02 }, + { 0x0A3C, 0x0A3C }, + { 0x0A41, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, + { 0x0A51, 0x0A51 }, + { 0x0A70, 0x0A71 }, + { 0x0A75, 0x0A75 }, + { 0x0A81, 0x0A82 }, + { 0x0ABC, 0x0ABC }, + { 0x0AC1, 0x0AC5 }, + { 0x0AC7, 0x0AC8 }, + { 0x0ACD, 0x0ACD }, + { 0x0AE2, 0x0AE3 }, + { 0x0B01, 0x0B01 }, + { 0x0B3C, 0x0B3C }, + { 0x0B3F, 0x0B3F }, + { 0x0B41, 0x0B44 }, + { 0x0B4D, 0x0B4D }, + { 0x0B56, 0x0B56 }, + { 0x0B62, 0x0B63 }, + { 0x0B82, 0x0B82 }, + { 0x0BC0, 0x0BC0 }, + { 0x0BCD, 0x0BCD }, + { 0x0C3E, 0x0C40 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, + { 0x0C55, 0x0C56 }, + { 0x0C62, 0x0C63 }, + { 0x0CBC, 0x0CBC }, + { 0x0CBF, 0x0CBF }, + { 0x0CC6, 0x0CC6 }, + { 0x0CCC, 0x0CCD }, + { 0x0CE2, 0x0CE3 }, + { 0x0D41, 0x0D44 }, + { 0x0D4D, 0x0D4D }, + { 0x0D62, 0x0D63 }, + { 0x0DCA, 0x0DCA }, + { 0x0DD2, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0E31, 0x0E31 }, + { 0x0E34, 0x0E3A }, + { 0x0E47, 0x0E4E }, + { 0x0EB1, 0x0EB1 }, + { 0x0EB4, 0x0EB9 }, + { 0x0EBB, 0x0EBC }, + { 0x0EC8, 0x0ECD }, + { 0x0F18, 0x0F19 }, + { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, + { 0x0F39, 0x0F39 }, + { 0x0F71, 0x0F7E }, + { 0x0F80, 0x0F84 }, + { 0x0F86, 0x0F87 }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x0FC6, 0x0FC6 }, + { 0x102D, 0x1030 }, + { 0x1032, 0x1037 }, + { 0x1039, 0x103A }, + { 0x103D, 0x103E }, + { 0x1058, 0x1059 }, + { 0x105E, 0x1060 }, + { 0x1071, 0x1074 }, + { 0x1082, 0x1082 }, + { 0x1085, 0x1086 }, + { 0x108D, 0x108D }, + { 0x135F, 0x135F }, + { 0x1712, 0x1714 }, + { 0x1732, 0x1734 }, + { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, + { 0x17B7, 0x17BD }, + { 0x17C6, 0x17C6 }, + { 0x17C9, 0x17D3 }, + { 0x17DD, 0x17DD }, + { 0x180B, 0x180D }, + { 0x18A9, 0x18A9 }, + { 0x1920, 0x1922 }, + { 0x1927, 0x1928 }, + { 0x1932, 0x1932 }, + { 0x1939, 0x193B }, + { 0x1A17, 0x1A18 }, + { 0x1B00, 0x1B03 }, + { 0x1B34, 0x1B34 }, + { 0x1B36, 0x1B3A }, + { 0x1B3C, 0x1B3C }, + { 0x1B42, 0x1B42 }, + { 0x1B6B, 0x1B73 }, + { 0x1B80, 0x1B81 }, + { 0x1BA2, 0x1BA5 }, + { 0x1BA8, 0x1BA9 }, + { 0x1C2C, 0x1C33 }, + { 0x1C36, 0x1C37 }, + { 0x1DC0, 0x1DE6 }, + { 0x1DFE, 0x1DFF }, + { 0x20D0, 0x20DC }, + { 0x20E1, 0x20E1 }, + { 0x20E5, 0x20F0 }, + { 0x2DE0, 0x2DFF }, + { 0x302A, 0x302F }, + { 0x3099, 0x309A }, + { 0xA66F, 0xA66F }, + { 0xA67C, 0xA67D }, + { 0xA802, 0xA802 }, + { 0xA806, 0xA806 }, + { 0xA80B, 0xA80B }, + { 0xA825, 0xA826 }, + { 0xA8C4, 0xA8C4 }, + { 0xA926, 0xA92D }, + { 0xA947, 0xA951 }, + { 0xAA29, 0xAA2E }, + { 0xAA31, 0xAA32 }, + { 0xAA35, 0xAA36 }, + { 0xAA43, 0xAA43 }, + { 0xAA4C, 0xAA4C }, + { 0xFB1E, 0xFB1E }, + { 0xFE00, 0xFE0F }, + { 0xFE20, 0xFE26 }, + { 0x101FD, 0x101FD }, + { 0x10A01, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A0F }, + { 0x10A38, 0x10A3A }, + { 0x10A3F, 0x10A3F }, + { 0x1D167, 0x1D169 }, + { 0x1D17B, 0x1D182 }, + { 0x1D185, 0x1D18B }, + { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, + { 0xE0100, 0xE01EF } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Mn) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_N.c b/tests/unictype/test-categ_N.c new file mode 100644 index 00000000..219b6c77 --- /dev/null +++ b/tests/unictype/test-categ_N.c @@ -0,0 +1,91 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 }, + { 0x00B2, 0x00B3 }, + { 0x00B9, 0x00B9 }, + { 0x00BC, 0x00BE }, + { 0x0660, 0x0669 }, + { 0x06F0, 0x06F9 }, + { 0x07C0, 0x07C9 }, + { 0x0966, 0x096F }, + { 0x09E6, 0x09EF }, + { 0x09F4, 0x09F9 }, + { 0x0A66, 0x0A6F }, + { 0x0AE6, 0x0AEF }, + { 0x0B66, 0x0B6F }, + { 0x0BE6, 0x0BF2 }, + { 0x0C66, 0x0C6F }, + { 0x0C78, 0x0C7E }, + { 0x0CE6, 0x0CEF }, + { 0x0D66, 0x0D75 }, + { 0x0E50, 0x0E59 }, + { 0x0ED0, 0x0ED9 }, + { 0x0F20, 0x0F33 }, + { 0x1040, 0x1049 }, + { 0x1090, 0x1099 }, + { 0x1369, 0x137C }, + { 0x16EE, 0x16F0 }, + { 0x17E0, 0x17E9 }, + { 0x17F0, 0x17F9 }, + { 0x1810, 0x1819 }, + { 0x1946, 0x194F }, + { 0x19D0, 0x19D9 }, + { 0x1B50, 0x1B59 }, + { 0x1BB0, 0x1BB9 }, + { 0x1C40, 0x1C49 }, + { 0x1C50, 0x1C59 }, + { 0x2070, 0x2070 }, + { 0x2074, 0x2079 }, + { 0x2080, 0x2089 }, + { 0x2153, 0x2182 }, + { 0x2185, 0x2188 }, + { 0x2460, 0x249B }, + { 0x24EA, 0x24FF }, + { 0x2776, 0x2793 }, + { 0x2CFD, 0x2CFD }, + { 0x3007, 0x3007 }, + { 0x3021, 0x3029 }, + { 0x3038, 0x303A }, + { 0x3192, 0x3195 }, + { 0x3220, 0x3229 }, + { 0x3251, 0x325F }, + { 0x3280, 0x3289 }, + { 0x32B1, 0x32BF }, + { 0xA620, 0xA629 }, + { 0xA8D0, 0xA8D9 }, + { 0xA900, 0xA909 }, + { 0xAA50, 0xAA59 }, + { 0xFF10, 0xFF19 }, + { 0x10107, 0x10133 }, + { 0x10140, 0x10178 }, + { 0x1018A, 0x1018A }, + { 0x10320, 0x10323 }, + { 0x10341, 0x10341 }, + { 0x1034A, 0x1034A }, + { 0x103D1, 0x103D5 }, + { 0x104A0, 0x104A9 }, + { 0x10916, 0x10919 }, + { 0x10A40, 0x10A47 }, + { 0x12400, 0x12462 }, + { 0x1D360, 0x1D371 }, + { 0x1D7CE, 0x1D7FF } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_N) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Nd.c b/tests/unictype/test-categ_Nd.c new file mode 100644 index 00000000..a6170aef --- /dev/null +++ b/tests/unictype/test-categ_Nd.c @@ -0,0 +1,55 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 }, + { 0x0660, 0x0669 }, + { 0x06F0, 0x06F9 }, + { 0x07C0, 0x07C9 }, + { 0x0966, 0x096F }, + { 0x09E6, 0x09EF }, + { 0x0A66, 0x0A6F }, + { 0x0AE6, 0x0AEF }, + { 0x0B66, 0x0B6F }, + { 0x0BE6, 0x0BEF }, + { 0x0C66, 0x0C6F }, + { 0x0CE6, 0x0CEF }, + { 0x0D66, 0x0D6F }, + { 0x0E50, 0x0E59 }, + { 0x0ED0, 0x0ED9 }, + { 0x0F20, 0x0F29 }, + { 0x1040, 0x1049 }, + { 0x1090, 0x1099 }, + { 0x17E0, 0x17E9 }, + { 0x1810, 0x1819 }, + { 0x1946, 0x194F }, + { 0x19D0, 0x19D9 }, + { 0x1B50, 0x1B59 }, + { 0x1BB0, 0x1BB9 }, + { 0x1C40, 0x1C49 }, + { 0x1C50, 0x1C59 }, + { 0xA620, 0xA629 }, + { 0xA8D0, 0xA8D9 }, + { 0xA900, 0xA909 }, + { 0xAA50, 0xAA59 }, + { 0xFF10, 0xFF19 }, + { 0x104A0, 0x104A9 }, + { 0x1D7CE, 0x1D7FF } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Nd) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Nl.c b/tests/unictype/test-categ_Nl.c new file mode 100644 index 00000000..0a3207f6 --- /dev/null +++ b/tests/unictype/test-categ_Nl.c @@ -0,0 +1,33 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x16EE, 0x16F0 }, + { 0x2160, 0x2182 }, + { 0x2185, 0x2188 }, + { 0x3007, 0x3007 }, + { 0x3021, 0x3029 }, + { 0x3038, 0x303A }, + { 0x10140, 0x10174 }, + { 0x10341, 0x10341 }, + { 0x1034A, 0x1034A }, + { 0x103D1, 0x103D5 }, + { 0x12400, 0x12462 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Nl) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_No.c b/tests/unictype/test-categ_No.c new file mode 100644 index 00000000..d800a592 --- /dev/null +++ b/tests/unictype/test-categ_No.c @@ -0,0 +1,52 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00B2, 0x00B3 }, + { 0x00B9, 0x00B9 }, + { 0x00BC, 0x00BE }, + { 0x09F4, 0x09F9 }, + { 0x0BF0, 0x0BF2 }, + { 0x0C78, 0x0C7E }, + { 0x0D70, 0x0D75 }, + { 0x0F2A, 0x0F33 }, + { 0x1369, 0x137C }, + { 0x17F0, 0x17F9 }, + { 0x2070, 0x2070 }, + { 0x2074, 0x2079 }, + { 0x2080, 0x2089 }, + { 0x2153, 0x215F }, + { 0x2460, 0x249B }, + { 0x24EA, 0x24FF }, + { 0x2776, 0x2793 }, + { 0x2CFD, 0x2CFD }, + { 0x3192, 0x3195 }, + { 0x3220, 0x3229 }, + { 0x3251, 0x325F }, + { 0x3280, 0x3289 }, + { 0x32B1, 0x32BF }, + { 0x10107, 0x10133 }, + { 0x10175, 0x10178 }, + { 0x1018A, 0x1018A }, + { 0x10320, 0x10323 }, + { 0x10916, 0x10919 }, + { 0x10A40, 0x10A47 }, + { 0x1D360, 0x1D371 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_No) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_P.c b/tests/unictype/test-categ_P.c new file mode 100644 index 00000000..38587b0e --- /dev/null +++ b/tests/unictype/test-categ_P.c @@ -0,0 +1,134 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0021, 0x0023 }, + { 0x0025, 0x002A }, + { 0x002C, 0x002F }, + { 0x003A, 0x003B }, + { 0x003F, 0x0040 }, + { 0x005B, 0x005D }, + { 0x005F, 0x005F }, + { 0x007B, 0x007B }, + { 0x007D, 0x007D }, + { 0x00A1, 0x00A1 }, + { 0x00AB, 0x00AB }, + { 0x00B7, 0x00B7 }, + { 0x00BB, 0x00BB }, + { 0x00BF, 0x00BF }, + { 0x037E, 0x037E }, + { 0x0387, 0x0387 }, + { 0x055A, 0x055F }, + { 0x0589, 0x058A }, + { 0x05BE, 0x05BE }, + { 0x05C0, 0x05C0 }, + { 0x05C3, 0x05C3 }, + { 0x05C6, 0x05C6 }, + { 0x05F3, 0x05F4 }, + { 0x0609, 0x060A }, + { 0x060C, 0x060D }, + { 0x061B, 0x061B }, + { 0x061E, 0x061F }, + { 0x066A, 0x066D }, + { 0x06D4, 0x06D4 }, + { 0x0700, 0x070D }, + { 0x07F7, 0x07F9 }, + { 0x0964, 0x0965 }, + { 0x0970, 0x0970 }, + { 0x0DF4, 0x0DF4 }, + { 0x0E4F, 0x0E4F }, + { 0x0E5A, 0x0E5B }, + { 0x0F04, 0x0F12 }, + { 0x0F3A, 0x0F3D }, + { 0x0F85, 0x0F85 }, + { 0x0FD0, 0x0FD4 }, + { 0x104A, 0x104F }, + { 0x10FB, 0x10FB }, + { 0x1361, 0x1368 }, + { 0x166D, 0x166E }, + { 0x169B, 0x169C }, + { 0x16EB, 0x16ED }, + { 0x1735, 0x1736 }, + { 0x17D4, 0x17D6 }, + { 0x17D8, 0x17DA }, + { 0x1800, 0x180A }, + { 0x1944, 0x1945 }, + { 0x19DE, 0x19DF }, + { 0x1A1E, 0x1A1F }, + { 0x1B5A, 0x1B60 }, + { 0x1C3B, 0x1C3F }, + { 0x1C7E, 0x1C7F }, + { 0x2010, 0x2027 }, + { 0x2030, 0x2043 }, + { 0x2045, 0x2051 }, + { 0x2053, 0x205E }, + { 0x207D, 0x207E }, + { 0x208D, 0x208E }, + { 0x2329, 0x232A }, + { 0x2768, 0x2775 }, + { 0x27C5, 0x27C6 }, + { 0x27E6, 0x27EF }, + { 0x2983, 0x2998 }, + { 0x29D8, 0x29DB }, + { 0x29FC, 0x29FD }, + { 0x2CF9, 0x2CFC }, + { 0x2CFE, 0x2CFF }, + { 0x2E00, 0x2E2E }, + { 0x2E30, 0x2E30 }, + { 0x3001, 0x3003 }, + { 0x3008, 0x3011 }, + { 0x3014, 0x301F }, + { 0x3030, 0x3030 }, + { 0x303D, 0x303D }, + { 0x30A0, 0x30A0 }, + { 0x30FB, 0x30FB }, + { 0xA60D, 0xA60F }, + { 0xA673, 0xA673 }, + { 0xA67E, 0xA67E }, + { 0xA874, 0xA877 }, + { 0xA8CE, 0xA8CF }, + { 0xA92E, 0xA92F }, + { 0xA95F, 0xA95F }, + { 0xAA5C, 0xAA5F }, + { 0xFD3E, 0xFD3F }, + { 0xFE10, 0xFE19 }, + { 0xFE30, 0xFE52 }, + { 0xFE54, 0xFE61 }, + { 0xFE63, 0xFE63 }, + { 0xFE68, 0xFE68 }, + { 0xFE6A, 0xFE6B }, + { 0xFF01, 0xFF03 }, + { 0xFF05, 0xFF0A }, + { 0xFF0C, 0xFF0F }, + { 0xFF1A, 0xFF1B }, + { 0xFF1F, 0xFF20 }, + { 0xFF3B, 0xFF3D }, + { 0xFF3F, 0xFF3F }, + { 0xFF5B, 0xFF5B }, + { 0xFF5D, 0xFF5D }, + { 0xFF5F, 0xFF65 }, + { 0x10100, 0x10101 }, + { 0x1039F, 0x1039F }, + { 0x103D0, 0x103D0 }, + { 0x1091F, 0x1091F }, + { 0x1093F, 0x1093F }, + { 0x10A50, 0x10A58 }, + { 0x12470, 0x12473 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_P) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Pc.c b/tests/unictype/test-categ_Pc.c new file mode 100644 index 00000000..db291030 --- /dev/null +++ b/tests/unictype/test-categ_Pc.c @@ -0,0 +1,28 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x005F, 0x005F }, + { 0x203F, 0x2040 }, + { 0x2054, 0x2054 }, + { 0xFE33, 0xFE34 }, + { 0xFE4D, 0xFE4F }, + { 0xFF3F, 0xFF3F } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Pc) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Pd.c b/tests/unictype/test-categ_Pd.c new file mode 100644 index 00000000..aae4aea3 --- /dev/null +++ b/tests/unictype/test-categ_Pd.c @@ -0,0 +1,36 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x002D, 0x002D }, + { 0x058A, 0x058A }, + { 0x05BE, 0x05BE }, + { 0x1806, 0x1806 }, + { 0x2010, 0x2015 }, + { 0x2E17, 0x2E17 }, + { 0x2E1A, 0x2E1A }, + { 0x301C, 0x301C }, + { 0x3030, 0x3030 }, + { 0x30A0, 0x30A0 }, + { 0xFE31, 0xFE32 }, + { 0xFE58, 0xFE58 }, + { 0xFE63, 0xFE63 }, + { 0xFF0D, 0xFF0D } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Pd) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Pe.c b/tests/unictype/test-categ_Pe.c new file mode 100644 index 00000000..01c77ecf --- /dev/null +++ b/tests/unictype/test-categ_Pe.c @@ -0,0 +1,92 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0029, 0x0029 }, + { 0x005D, 0x005D }, + { 0x007D, 0x007D }, + { 0x0F3B, 0x0F3B }, + { 0x0F3D, 0x0F3D }, + { 0x169C, 0x169C }, + { 0x2046, 0x2046 }, + { 0x207E, 0x207E }, + { 0x208E, 0x208E }, + { 0x232A, 0x232A }, + { 0x2769, 0x2769 }, + { 0x276B, 0x276B }, + { 0x276D, 0x276D }, + { 0x276F, 0x276F }, + { 0x2771, 0x2771 }, + { 0x2773, 0x2773 }, + { 0x2775, 0x2775 }, + { 0x27C6, 0x27C6 }, + { 0x27E7, 0x27E7 }, + { 0x27E9, 0x27E9 }, + { 0x27EB, 0x27EB }, + { 0x27ED, 0x27ED }, + { 0x27EF, 0x27EF }, + { 0x2984, 0x2984 }, + { 0x2986, 0x2986 }, + { 0x2988, 0x2988 }, + { 0x298A, 0x298A }, + { 0x298C, 0x298C }, + { 0x298E, 0x298E }, + { 0x2990, 0x2990 }, + { 0x2992, 0x2992 }, + { 0x2994, 0x2994 }, + { 0x2996, 0x2996 }, + { 0x2998, 0x2998 }, + { 0x29D9, 0x29D9 }, + { 0x29DB, 0x29DB }, + { 0x29FD, 0x29FD }, + { 0x2E23, 0x2E23 }, + { 0x2E25, 0x2E25 }, + { 0x2E27, 0x2E27 }, + { 0x2E29, 0x2E29 }, + { 0x3009, 0x3009 }, + { 0x300B, 0x300B }, + { 0x300D, 0x300D }, + { 0x300F, 0x300F }, + { 0x3011, 0x3011 }, + { 0x3015, 0x3015 }, + { 0x3017, 0x3017 }, + { 0x3019, 0x3019 }, + { 0x301B, 0x301B }, + { 0x301E, 0x301F }, + { 0xFD3F, 0xFD3F }, + { 0xFE18, 0xFE18 }, + { 0xFE36, 0xFE36 }, + { 0xFE38, 0xFE38 }, + { 0xFE3A, 0xFE3A }, + { 0xFE3C, 0xFE3C }, + { 0xFE3E, 0xFE3E }, + { 0xFE40, 0xFE40 }, + { 0xFE42, 0xFE42 }, + { 0xFE44, 0xFE44 }, + { 0xFE48, 0xFE48 }, + { 0xFE5A, 0xFE5A }, + { 0xFE5C, 0xFE5C }, + { 0xFE5E, 0xFE5E }, + { 0xFF09, 0xFF09 }, + { 0xFF3D, 0xFF3D }, + { 0xFF5D, 0xFF5D }, + { 0xFF60, 0xFF60 }, + { 0xFF63, 0xFF63 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Pe) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Pf.c b/tests/unictype/test-categ_Pf.c new file mode 100644 index 00000000..b94173e1 --- /dev/null +++ b/tests/unictype/test-categ_Pf.c @@ -0,0 +1,32 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00BB, 0x00BB }, + { 0x2019, 0x2019 }, + { 0x201D, 0x201D }, + { 0x203A, 0x203A }, + { 0x2E03, 0x2E03 }, + { 0x2E05, 0x2E05 }, + { 0x2E0A, 0x2E0A }, + { 0x2E0D, 0x2E0D }, + { 0x2E1D, 0x2E1D }, + { 0x2E21, 0x2E21 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Pf) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Pi.c b/tests/unictype/test-categ_Pi.c new file mode 100644 index 00000000..2a9dcd4b --- /dev/null +++ b/tests/unictype/test-categ_Pi.c @@ -0,0 +1,33 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00AB, 0x00AB }, + { 0x2018, 0x2018 }, + { 0x201B, 0x201C }, + { 0x201F, 0x201F }, + { 0x2039, 0x2039 }, + { 0x2E02, 0x2E02 }, + { 0x2E04, 0x2E04 }, + { 0x2E09, 0x2E09 }, + { 0x2E0C, 0x2E0C }, + { 0x2E1C, 0x2E1C }, + { 0x2E20, 0x2E20 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Pi) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Po.c b/tests/unictype/test-categ_Po.c new file mode 100644 index 00000000..e84ec765 --- /dev/null +++ b/tests/unictype/test-categ_Po.c @@ -0,0 +1,130 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0021, 0x0023 }, + { 0x0025, 0x0027 }, + { 0x002A, 0x002A }, + { 0x002C, 0x002C }, + { 0x002E, 0x002F }, + { 0x003A, 0x003B }, + { 0x003F, 0x0040 }, + { 0x005C, 0x005C }, + { 0x00A1, 0x00A1 }, + { 0x00B7, 0x00B7 }, + { 0x00BF, 0x00BF }, + { 0x037E, 0x037E }, + { 0x0387, 0x0387 }, + { 0x055A, 0x055F }, + { 0x0589, 0x0589 }, + { 0x05C0, 0x05C0 }, + { 0x05C3, 0x05C3 }, + { 0x05C6, 0x05C6 }, + { 0x05F3, 0x05F4 }, + { 0x0609, 0x060A }, + { 0x060C, 0x060D }, + { 0x061B, 0x061B }, + { 0x061E, 0x061F }, + { 0x066A, 0x066D }, + { 0x06D4, 0x06D4 }, + { 0x0700, 0x070D }, + { 0x07F7, 0x07F9 }, + { 0x0964, 0x0965 }, + { 0x0970, 0x0970 }, + { 0x0DF4, 0x0DF4 }, + { 0x0E4F, 0x0E4F }, + { 0x0E5A, 0x0E5B }, + { 0x0F04, 0x0F12 }, + { 0x0F85, 0x0F85 }, + { 0x0FD0, 0x0FD4 }, + { 0x104A, 0x104F }, + { 0x10FB, 0x10FB }, + { 0x1361, 0x1368 }, + { 0x166D, 0x166E }, + { 0x16EB, 0x16ED }, + { 0x1735, 0x1736 }, + { 0x17D4, 0x17D6 }, + { 0x17D8, 0x17DA }, + { 0x1800, 0x1805 }, + { 0x1807, 0x180A }, + { 0x1944, 0x1945 }, + { 0x19DE, 0x19DF }, + { 0x1A1E, 0x1A1F }, + { 0x1B5A, 0x1B60 }, + { 0x1C3B, 0x1C3F }, + { 0x1C7E, 0x1C7F }, + { 0x2016, 0x2017 }, + { 0x2020, 0x2027 }, + { 0x2030, 0x2038 }, + { 0x203B, 0x203E }, + { 0x2041, 0x2043 }, + { 0x2047, 0x2051 }, + { 0x2053, 0x2053 }, + { 0x2055, 0x205E }, + { 0x2CF9, 0x2CFC }, + { 0x2CFE, 0x2CFF }, + { 0x2E00, 0x2E01 }, + { 0x2E06, 0x2E08 }, + { 0x2E0B, 0x2E0B }, + { 0x2E0E, 0x2E16 }, + { 0x2E18, 0x2E19 }, + { 0x2E1B, 0x2E1B }, + { 0x2E1E, 0x2E1F }, + { 0x2E2A, 0x2E2E }, + { 0x2E30, 0x2E30 }, + { 0x3001, 0x3003 }, + { 0x303D, 0x303D }, + { 0x30FB, 0x30FB }, + { 0xA60D, 0xA60F }, + { 0xA673, 0xA673 }, + { 0xA67E, 0xA67E }, + { 0xA874, 0xA877 }, + { 0xA8CE, 0xA8CF }, + { 0xA92E, 0xA92F }, + { 0xA95F, 0xA95F }, + { 0xAA5C, 0xAA5F }, + { 0xFE10, 0xFE16 }, + { 0xFE19, 0xFE19 }, + { 0xFE30, 0xFE30 }, + { 0xFE45, 0xFE46 }, + { 0xFE49, 0xFE4C }, + { 0xFE50, 0xFE52 }, + { 0xFE54, 0xFE57 }, + { 0xFE5F, 0xFE61 }, + { 0xFE68, 0xFE68 }, + { 0xFE6A, 0xFE6B }, + { 0xFF01, 0xFF03 }, + { 0xFF05, 0xFF07 }, + { 0xFF0A, 0xFF0A }, + { 0xFF0C, 0xFF0C }, + { 0xFF0E, 0xFF0F }, + { 0xFF1A, 0xFF1B }, + { 0xFF1F, 0xFF20 }, + { 0xFF3C, 0xFF3C }, + { 0xFF61, 0xFF61 }, + { 0xFF64, 0xFF65 }, + { 0x10100, 0x10101 }, + { 0x1039F, 0x1039F }, + { 0x103D0, 0x103D0 }, + { 0x1091F, 0x1091F }, + { 0x1093F, 0x1093F }, + { 0x10A50, 0x10A58 }, + { 0x12470, 0x12473 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Po) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Ps.c b/tests/unictype/test-categ_Ps.c new file mode 100644 index 00000000..7e3be746 --- /dev/null +++ b/tests/unictype/test-categ_Ps.c @@ -0,0 +1,94 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0028, 0x0028 }, + { 0x005B, 0x005B }, + { 0x007B, 0x007B }, + { 0x0F3A, 0x0F3A }, + { 0x0F3C, 0x0F3C }, + { 0x169B, 0x169B }, + { 0x201A, 0x201A }, + { 0x201E, 0x201E }, + { 0x2045, 0x2045 }, + { 0x207D, 0x207D }, + { 0x208D, 0x208D }, + { 0x2329, 0x2329 }, + { 0x2768, 0x2768 }, + { 0x276A, 0x276A }, + { 0x276C, 0x276C }, + { 0x276E, 0x276E }, + { 0x2770, 0x2770 }, + { 0x2772, 0x2772 }, + { 0x2774, 0x2774 }, + { 0x27C5, 0x27C5 }, + { 0x27E6, 0x27E6 }, + { 0x27E8, 0x27E8 }, + { 0x27EA, 0x27EA }, + { 0x27EC, 0x27EC }, + { 0x27EE, 0x27EE }, + { 0x2983, 0x2983 }, + { 0x2985, 0x2985 }, + { 0x2987, 0x2987 }, + { 0x2989, 0x2989 }, + { 0x298B, 0x298B }, + { 0x298D, 0x298D }, + { 0x298F, 0x298F }, + { 0x2991, 0x2991 }, + { 0x2993, 0x2993 }, + { 0x2995, 0x2995 }, + { 0x2997, 0x2997 }, + { 0x29D8, 0x29D8 }, + { 0x29DA, 0x29DA }, + { 0x29FC, 0x29FC }, + { 0x2E22, 0x2E22 }, + { 0x2E24, 0x2E24 }, + { 0x2E26, 0x2E26 }, + { 0x2E28, 0x2E28 }, + { 0x3008, 0x3008 }, + { 0x300A, 0x300A }, + { 0x300C, 0x300C }, + { 0x300E, 0x300E }, + { 0x3010, 0x3010 }, + { 0x3014, 0x3014 }, + { 0x3016, 0x3016 }, + { 0x3018, 0x3018 }, + { 0x301A, 0x301A }, + { 0x301D, 0x301D }, + { 0xFD3E, 0xFD3E }, + { 0xFE17, 0xFE17 }, + { 0xFE35, 0xFE35 }, + { 0xFE37, 0xFE37 }, + { 0xFE39, 0xFE39 }, + { 0xFE3B, 0xFE3B }, + { 0xFE3D, 0xFE3D }, + { 0xFE3F, 0xFE3F }, + { 0xFE41, 0xFE41 }, + { 0xFE43, 0xFE43 }, + { 0xFE47, 0xFE47 }, + { 0xFE59, 0xFE59 }, + { 0xFE5B, 0xFE5B }, + { 0xFE5D, 0xFE5D }, + { 0xFF08, 0xFF08 }, + { 0xFF3B, 0xFF3B }, + { 0xFF5B, 0xFF5B }, + { 0xFF5F, 0xFF5F }, + { 0xFF62, 0xFF62 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Ps) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_S.c b/tests/unictype/test-categ_S.c new file mode 100644 index 00000000..6f6cdd58 --- /dev/null +++ b/tests/unictype/test-categ_S.c @@ -0,0 +1,201 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0024, 0x0024 }, + { 0x002B, 0x002B }, + { 0x003C, 0x003E }, + { 0x005E, 0x005E }, + { 0x0060, 0x0060 }, + { 0x007C, 0x007C }, + { 0x007E, 0x007E }, + { 0x00A2, 0x00A9 }, + { 0x00AC, 0x00AC }, + { 0x00AE, 0x00B1 }, + { 0x00B4, 0x00B4 }, + { 0x00B6, 0x00B6 }, + { 0x00B8, 0x00B8 }, + { 0x00D7, 0x00D7 }, + { 0x00F7, 0x00F7 }, + { 0x02C2, 0x02C5 }, + { 0x02D2, 0x02DF }, + { 0x02E5, 0x02EB }, + { 0x02ED, 0x02ED }, + { 0x02EF, 0x02FF }, + { 0x0375, 0x0375 }, + { 0x0384, 0x0385 }, + { 0x03F6, 0x03F6 }, + { 0x0482, 0x0482 }, + { 0x0606, 0x0608 }, + { 0x060B, 0x060B }, + { 0x060E, 0x060F }, + { 0x06E9, 0x06E9 }, + { 0x06FD, 0x06FE }, + { 0x07F6, 0x07F6 }, + { 0x09F2, 0x09F3 }, + { 0x09FA, 0x09FA }, + { 0x0AF1, 0x0AF1 }, + { 0x0B70, 0x0B70 }, + { 0x0BF3, 0x0BFA }, + { 0x0C7F, 0x0C7F }, + { 0x0CF1, 0x0CF2 }, + { 0x0D79, 0x0D79 }, + { 0x0E3F, 0x0E3F }, + { 0x0F01, 0x0F03 }, + { 0x0F13, 0x0F17 }, + { 0x0F1A, 0x0F1F }, + { 0x0F34, 0x0F34 }, + { 0x0F36, 0x0F36 }, + { 0x0F38, 0x0F38 }, + { 0x0FBE, 0x0FC5 }, + { 0x0FC7, 0x0FCC }, + { 0x0FCE, 0x0FCF }, + { 0x109E, 0x109F }, + { 0x1360, 0x1360 }, + { 0x1390, 0x1399 }, + { 0x17DB, 0x17DB }, + { 0x1940, 0x1940 }, + { 0x19E0, 0x19FF }, + { 0x1B61, 0x1B6A }, + { 0x1B74, 0x1B7C }, + { 0x1FBD, 0x1FBD }, + { 0x1FBF, 0x1FC1 }, + { 0x1FCD, 0x1FCF }, + { 0x1FDD, 0x1FDF }, + { 0x1FED, 0x1FEF }, + { 0x1FFD, 0x1FFE }, + { 0x2044, 0x2044 }, + { 0x2052, 0x2052 }, + { 0x207A, 0x207C }, + { 0x208A, 0x208C }, + { 0x20A0, 0x20B5 }, + { 0x2100, 0x2101 }, + { 0x2103, 0x2106 }, + { 0x2108, 0x2109 }, + { 0x2114, 0x2114 }, + { 0x2116, 0x2118 }, + { 0x211E, 0x2123 }, + { 0x2125, 0x2125 }, + { 0x2127, 0x2127 }, + { 0x2129, 0x2129 }, + { 0x212E, 0x212E }, + { 0x213A, 0x213B }, + { 0x2140, 0x2144 }, + { 0x214A, 0x214D }, + { 0x214F, 0x214F }, + { 0x2190, 0x2328 }, + { 0x232B, 0x23E7 }, + { 0x2400, 0x2426 }, + { 0x2440, 0x244A }, + { 0x249C, 0x24E9 }, + { 0x2500, 0x269D }, + { 0x26A0, 0x26BC }, + { 0x26C0, 0x26C3 }, + { 0x2701, 0x2704 }, + { 0x2706, 0x2709 }, + { 0x270C, 0x2727 }, + { 0x2729, 0x274B }, + { 0x274D, 0x274D }, + { 0x274F, 0x2752 }, + { 0x2756, 0x2756 }, + { 0x2758, 0x275E }, + { 0x2761, 0x2767 }, + { 0x2794, 0x2794 }, + { 0x2798, 0x27AF }, + { 0x27B1, 0x27BE }, + { 0x27C0, 0x27C4 }, + { 0x27C7, 0x27CA }, + { 0x27CC, 0x27CC }, + { 0x27D0, 0x27E5 }, + { 0x27F0, 0x2982 }, + { 0x2999, 0x29D7 }, + { 0x29DC, 0x29FB }, + { 0x29FE, 0x2B4C }, + { 0x2B50, 0x2B54 }, + { 0x2CE5, 0x2CEA }, + { 0x2E80, 0x2E99 }, + { 0x2E9B, 0x2EF3 }, + { 0x2F00, 0x2FD5 }, + { 0x2FF0, 0x2FFB }, + { 0x3004, 0x3004 }, + { 0x3012, 0x3013 }, + { 0x3020, 0x3020 }, + { 0x3036, 0x3037 }, + { 0x303E, 0x303F }, + { 0x309B, 0x309C }, + { 0x3190, 0x3191 }, + { 0x3196, 0x319F }, + { 0x31C0, 0x31E3 }, + { 0x3200, 0x321E }, + { 0x322A, 0x3243 }, + { 0x3250, 0x3250 }, + { 0x3260, 0x327F }, + { 0x328A, 0x32B0 }, + { 0x32C0, 0x32FE }, + { 0x3300, 0x33FF }, + { 0x4DC0, 0x4DFF }, + { 0xA490, 0xA4C6 }, + { 0xA700, 0xA716 }, + { 0xA720, 0xA721 }, + { 0xA789, 0xA78A }, + { 0xA828, 0xA82B }, + { 0xFB29, 0xFB29 }, + { 0xFDFC, 0xFDFD }, + { 0xFE62, 0xFE62 }, + { 0xFE64, 0xFE66 }, + { 0xFE69, 0xFE69 }, + { 0xFF04, 0xFF04 }, + { 0xFF0B, 0xFF0B }, + { 0xFF1C, 0xFF1E }, + { 0xFF3E, 0xFF3E }, + { 0xFF40, 0xFF40 }, + { 0xFF5C, 0xFF5C }, + { 0xFF5E, 0xFF5E }, + { 0xFFE0, 0xFFE6 }, + { 0xFFE8, 0xFFEE }, + { 0xFFFC, 0xFFFD }, + { 0x10102, 0x10102 }, + { 0x10137, 0x1013F }, + { 0x10179, 0x10189 }, + { 0x10190, 0x1019B }, + { 0x101D0, 0x101FC }, + { 0x1D000, 0x1D0F5 }, + { 0x1D100, 0x1D126 }, + { 0x1D129, 0x1D164 }, + { 0x1D16A, 0x1D16C }, + { 0x1D183, 0x1D184 }, + { 0x1D18C, 0x1D1A9 }, + { 0x1D1AE, 0x1D1DD }, + { 0x1D200, 0x1D241 }, + { 0x1D245, 0x1D245 }, + { 0x1D300, 0x1D356 }, + { 0x1D6C1, 0x1D6C1 }, + { 0x1D6DB, 0x1D6DB }, + { 0x1D6FB, 0x1D6FB }, + { 0x1D715, 0x1D715 }, + { 0x1D735, 0x1D735 }, + { 0x1D74F, 0x1D74F }, + { 0x1D76F, 0x1D76F }, + { 0x1D789, 0x1D789 }, + { 0x1D7A9, 0x1D7A9 }, + { 0x1D7C3, 0x1D7C3 }, + { 0x1F000, 0x1F02B }, + { 0x1F030, 0x1F093 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_S) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Sc.c b/tests/unictype/test-categ_Sc.c new file mode 100644 index 00000000..8ec99a68 --- /dev/null +++ b/tests/unictype/test-categ_Sc.c @@ -0,0 +1,36 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0024, 0x0024 }, + { 0x00A2, 0x00A5 }, + { 0x060B, 0x060B }, + { 0x09F2, 0x09F3 }, + { 0x0AF1, 0x0AF1 }, + { 0x0BF9, 0x0BF9 }, + { 0x0E3F, 0x0E3F }, + { 0x17DB, 0x17DB }, + { 0x20A0, 0x20B5 }, + { 0xFDFC, 0xFDFC }, + { 0xFE69, 0xFE69 }, + { 0xFF04, 0xFF04 }, + { 0xFFE0, 0xFFE1 }, + { 0xFFE5, 0xFFE6 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Sc) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Sk.c b/tests/unictype/test-categ_Sk.c new file mode 100644 index 00000000..b0961aab --- /dev/null +++ b/tests/unictype/test-categ_Sk.c @@ -0,0 +1,48 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x005E, 0x005E }, + { 0x0060, 0x0060 }, + { 0x00A8, 0x00A8 }, + { 0x00AF, 0x00AF }, + { 0x00B4, 0x00B4 }, + { 0x00B8, 0x00B8 }, + { 0x02C2, 0x02C5 }, + { 0x02D2, 0x02DF }, + { 0x02E5, 0x02EB }, + { 0x02ED, 0x02ED }, + { 0x02EF, 0x02FF }, + { 0x0375, 0x0375 }, + { 0x0384, 0x0385 }, + { 0x1FBD, 0x1FBD }, + { 0x1FBF, 0x1FC1 }, + { 0x1FCD, 0x1FCF }, + { 0x1FDD, 0x1FDF }, + { 0x1FED, 0x1FEF }, + { 0x1FFD, 0x1FFE }, + { 0x309B, 0x309C }, + { 0xA700, 0xA716 }, + { 0xA720, 0xA721 }, + { 0xA789, 0xA78A }, + { 0xFF3E, 0xFF3E }, + { 0xFF40, 0xFF40 }, + { 0xFFE3, 0xFFE3 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Sk) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Sm.c b/tests/unictype/test-categ_Sm.c new file mode 100644 index 00000000..b373cb44 --- /dev/null +++ b/tests/unictype/test-categ_Sm.c @@ -0,0 +1,87 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x002B, 0x002B }, + { 0x003C, 0x003E }, + { 0x007C, 0x007C }, + { 0x007E, 0x007E }, + { 0x00AC, 0x00AC }, + { 0x00B1, 0x00B1 }, + { 0x00D7, 0x00D7 }, + { 0x00F7, 0x00F7 }, + { 0x03F6, 0x03F6 }, + { 0x0606, 0x0608 }, + { 0x2044, 0x2044 }, + { 0x2052, 0x2052 }, + { 0x207A, 0x207C }, + { 0x208A, 0x208C }, + { 0x2140, 0x2144 }, + { 0x214B, 0x214B }, + { 0x2190, 0x2194 }, + { 0x219A, 0x219B }, + { 0x21A0, 0x21A0 }, + { 0x21A3, 0x21A3 }, + { 0x21A6, 0x21A6 }, + { 0x21AE, 0x21AE }, + { 0x21CE, 0x21CF }, + { 0x21D2, 0x21D2 }, + { 0x21D4, 0x21D4 }, + { 0x21F4, 0x22FF }, + { 0x2308, 0x230B }, + { 0x2320, 0x2321 }, + { 0x237C, 0x237C }, + { 0x239B, 0x23B3 }, + { 0x23DC, 0x23E1 }, + { 0x25B7, 0x25B7 }, + { 0x25C1, 0x25C1 }, + { 0x25F8, 0x25FF }, + { 0x266F, 0x266F }, + { 0x27C0, 0x27C4 }, + { 0x27C7, 0x27CA }, + { 0x27CC, 0x27CC }, + { 0x27D0, 0x27E5 }, + { 0x27F0, 0x27FF }, + { 0x2900, 0x2982 }, + { 0x2999, 0x29D7 }, + { 0x29DC, 0x29FB }, + { 0x29FE, 0x2AFF }, + { 0x2B30, 0x2B44 }, + { 0x2B47, 0x2B4C }, + { 0xFB29, 0xFB29 }, + { 0xFE62, 0xFE62 }, + { 0xFE64, 0xFE66 }, + { 0xFF0B, 0xFF0B }, + { 0xFF1C, 0xFF1E }, + { 0xFF5C, 0xFF5C }, + { 0xFF5E, 0xFF5E }, + { 0xFFE2, 0xFFE2 }, + { 0xFFE9, 0xFFEC }, + { 0x1D6C1, 0x1D6C1 }, + { 0x1D6DB, 0x1D6DB }, + { 0x1D6FB, 0x1D6FB }, + { 0x1D715, 0x1D715 }, + { 0x1D735, 0x1D735 }, + { 0x1D74F, 0x1D74F }, + { 0x1D76F, 0x1D76F }, + { 0x1D789, 0x1D789 }, + { 0x1D7A9, 0x1D7A9 }, + { 0x1D7C3, 0x1D7C3 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Sm) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_So.c b/tests/unictype/test-categ_So.c new file mode 100644 index 00000000..c4c5e3ee --- /dev/null +++ b/tests/unictype/test-categ_So.c @@ -0,0 +1,156 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00A6, 0x00A7 }, + { 0x00A9, 0x00A9 }, + { 0x00AE, 0x00AE }, + { 0x00B0, 0x00B0 }, + { 0x00B6, 0x00B6 }, + { 0x0482, 0x0482 }, + { 0x060E, 0x060F }, + { 0x06E9, 0x06E9 }, + { 0x06FD, 0x06FE }, + { 0x07F6, 0x07F6 }, + { 0x09FA, 0x09FA }, + { 0x0B70, 0x0B70 }, + { 0x0BF3, 0x0BF8 }, + { 0x0BFA, 0x0BFA }, + { 0x0C7F, 0x0C7F }, + { 0x0CF1, 0x0CF2 }, + { 0x0D79, 0x0D79 }, + { 0x0F01, 0x0F03 }, + { 0x0F13, 0x0F17 }, + { 0x0F1A, 0x0F1F }, + { 0x0F34, 0x0F34 }, + { 0x0F36, 0x0F36 }, + { 0x0F38, 0x0F38 }, + { 0x0FBE, 0x0FC5 }, + { 0x0FC7, 0x0FCC }, + { 0x0FCE, 0x0FCF }, + { 0x109E, 0x109F }, + { 0x1360, 0x1360 }, + { 0x1390, 0x1399 }, + { 0x1940, 0x1940 }, + { 0x19E0, 0x19FF }, + { 0x1B61, 0x1B6A }, + { 0x1B74, 0x1B7C }, + { 0x2100, 0x2101 }, + { 0x2103, 0x2106 }, + { 0x2108, 0x2109 }, + { 0x2114, 0x2114 }, + { 0x2116, 0x2118 }, + { 0x211E, 0x2123 }, + { 0x2125, 0x2125 }, + { 0x2127, 0x2127 }, + { 0x2129, 0x2129 }, + { 0x212E, 0x212E }, + { 0x213A, 0x213B }, + { 0x214A, 0x214A }, + { 0x214C, 0x214D }, + { 0x214F, 0x214F }, + { 0x2195, 0x2199 }, + { 0x219C, 0x219F }, + { 0x21A1, 0x21A2 }, + { 0x21A4, 0x21A5 }, + { 0x21A7, 0x21AD }, + { 0x21AF, 0x21CD }, + { 0x21D0, 0x21D1 }, + { 0x21D3, 0x21D3 }, + { 0x21D5, 0x21F3 }, + { 0x2300, 0x2307 }, + { 0x230C, 0x231F }, + { 0x2322, 0x2328 }, + { 0x232B, 0x237B }, + { 0x237D, 0x239A }, + { 0x23B4, 0x23DB }, + { 0x23E2, 0x23E7 }, + { 0x2400, 0x2426 }, + { 0x2440, 0x244A }, + { 0x249C, 0x24E9 }, + { 0x2500, 0x25B6 }, + { 0x25B8, 0x25C0 }, + { 0x25C2, 0x25F7 }, + { 0x2600, 0x266E }, + { 0x2670, 0x269D }, + { 0x26A0, 0x26BC }, + { 0x26C0, 0x26C3 }, + { 0x2701, 0x2704 }, + { 0x2706, 0x2709 }, + { 0x270C, 0x2727 }, + { 0x2729, 0x274B }, + { 0x274D, 0x274D }, + { 0x274F, 0x2752 }, + { 0x2756, 0x2756 }, + { 0x2758, 0x275E }, + { 0x2761, 0x2767 }, + { 0x2794, 0x2794 }, + { 0x2798, 0x27AF }, + { 0x27B1, 0x27BE }, + { 0x2800, 0x28FF }, + { 0x2B00, 0x2B2F }, + { 0x2B45, 0x2B46 }, + { 0x2B50, 0x2B54 }, + { 0x2CE5, 0x2CEA }, + { 0x2E80, 0x2E99 }, + { 0x2E9B, 0x2EF3 }, + { 0x2F00, 0x2FD5 }, + { 0x2FF0, 0x2FFB }, + { 0x3004, 0x3004 }, + { 0x3012, 0x3013 }, + { 0x3020, 0x3020 }, + { 0x3036, 0x3037 }, + { 0x303E, 0x303F }, + { 0x3190, 0x3191 }, + { 0x3196, 0x319F }, + { 0x31C0, 0x31E3 }, + { 0x3200, 0x321E }, + { 0x322A, 0x3243 }, + { 0x3250, 0x3250 }, + { 0x3260, 0x327F }, + { 0x328A, 0x32B0 }, + { 0x32C0, 0x32FE }, + { 0x3300, 0x33FF }, + { 0x4DC0, 0x4DFF }, + { 0xA490, 0xA4C6 }, + { 0xA828, 0xA82B }, + { 0xFDFD, 0xFDFD }, + { 0xFFE4, 0xFFE4 }, + { 0xFFE8, 0xFFE8 }, + { 0xFFED, 0xFFEE }, + { 0xFFFC, 0xFFFD }, + { 0x10102, 0x10102 }, + { 0x10137, 0x1013F }, + { 0x10179, 0x10189 }, + { 0x10190, 0x1019B }, + { 0x101D0, 0x101FC }, + { 0x1D000, 0x1D0F5 }, + { 0x1D100, 0x1D126 }, + { 0x1D129, 0x1D164 }, + { 0x1D16A, 0x1D16C }, + { 0x1D183, 0x1D184 }, + { 0x1D18C, 0x1D1A9 }, + { 0x1D1AE, 0x1D1DD }, + { 0x1D200, 0x1D241 }, + { 0x1D245, 0x1D245 }, + { 0x1D300, 0x1D356 }, + { 0x1F000, 0x1F02B }, + { 0x1F030, 0x1F093 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_So) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Z.c b/tests/unictype/test-categ_Z.c new file mode 100644 index 00000000..f3745943 --- /dev/null +++ b/tests/unictype/test-categ_Z.c @@ -0,0 +1,31 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0020, 0x0020 }, + { 0x00A0, 0x00A0 }, + { 0x1680, 0x1680 }, + { 0x180E, 0x180E }, + { 0x2000, 0x200A }, + { 0x2028, 0x2029 }, + { 0x202F, 0x202F }, + { 0x205F, 0x205F }, + { 0x3000, 0x3000 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Z) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Zl.c b/tests/unictype/test-categ_Zl.c new file mode 100644 index 00000000..ce9d36c1 --- /dev/null +++ b/tests/unictype/test-categ_Zl.c @@ -0,0 +1,23 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x2028, 0x2028 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Zl) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Zp.c b/tests/unictype/test-categ_Zp.c new file mode 100644 index 00000000..84866d85 --- /dev/null +++ b/tests/unictype/test-categ_Zp.c @@ -0,0 +1,23 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x2029, 0x2029 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Zp) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_Zs.c b/tests/unictype/test-categ_Zs.c new file mode 100644 index 00000000..982ee0bb --- /dev/null +++ b/tests/unictype/test-categ_Zs.c @@ -0,0 +1,30 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0020, 0x0020 }, + { 0x00A0, 0x00A0 }, + { 0x1680, 0x1680 }, + { 0x180E, 0x180E }, + { 0x2000, 0x200A }, + { 0x202F, 0x202F }, + { 0x205F, 0x205F }, + { 0x3000, 0x3000 } + +#define PREDICATE(c) uc_is_general_category (c, UC_CATEGORY_Zs) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-categ_and.c b/tests/unictype/test-categ_and.c new file mode 100644 index 00000000..5531ff40 --- /dev/null +++ b/tests/unictype/test-categ_and.c @@ -0,0 +1,51 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + uc_general_category_t ct = + uc_general_category_and ( + uc_general_category_or (UC_LETTER, UC_DECIMAL_DIGIT_NUMBER), + uc_general_category_or (UC_UPPERCASE_LETTER, UC_NUMBER)); + + ASSERT (uc_is_general_category ('A', ct)); + ASSERT (!uc_is_general_category ('a', ct)); + ASSERT (uc_is_general_category ('7', ct)); + ASSERT (!uc_is_general_category (0x00B2, ct)); + + return 0; +} diff --git a/tests/unictype/test-categ_and_not.c b/tests/unictype/test-categ_and_not.c new file mode 100644 index 00000000..90b40f8b --- /dev/null +++ b/tests/unictype/test-categ_and_not.c @@ -0,0 +1,51 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + uc_general_category_t ct = + uc_general_category_and_not ( + uc_general_category_or (UC_LETTER, UC_NUMBER), + uc_general_category_or (UC_UPPERCASE_LETTER, UC_DECIMAL_DIGIT_NUMBER)); + + ASSERT (!uc_is_general_category ('A', ct)); + ASSERT (uc_is_general_category ('a', ct)); + ASSERT (!uc_is_general_category ('7', ct)); + ASSERT (uc_is_general_category (0x00B2, ct)); + + return 0; +} diff --git a/tests/unictype/test-categ_byname.c b/tests/unictype/test-categ_byname.c new file mode 100644 index 00000000..3bb44e9c --- /dev/null +++ b/tests/unictype/test-categ_byname.c @@ -0,0 +1,62 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + uc_general_category_byname ("L"); + uc_general_category_byname ("Nl"); + + { + uc_general_category_t ct = uc_general_category_byname ("Nd"); + unsigned int c; + + for (c = 0x30; c <= 0x39; c++) + ASSERT (uc_is_general_category (c, ct)); + for (c = 0x40; c < 0x80; c++) + ASSERT (!uc_is_general_category (c, ct)); + } + + { + uc_general_category_t ct = uc_general_category_byname ("Foo"); + unsigned int c; + + for (c = 0; c < 0x110000; c++) + ASSERT (!uc_is_general_category (c, ct)); + } + + return 0; +} diff --git a/tests/unictype/test-categ_name.c b/tests/unictype/test-categ_name.c new file mode 100644 index 00000000..b5c3f752 --- /dev/null +++ b/tests/unictype/test-categ_name.c @@ -0,0 +1,45 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (strcmp (uc_general_category_name (UC_CATEGORY_Z), "Z") == 0); + ASSERT (strcmp (uc_general_category_name (UC_CATEGORY_Nl), "Nl") == 0); + ASSERT (uc_general_category_name (uc_general_category_or (UC_CATEGORY_Z, UC_CATEGORY_Nl)) == NULL); + + return 0; +} diff --git a/tests/unictype/test-categ_none.c b/tests/unictype/test-categ_none.c new file mode 100644 index 00000000..f8002416 --- /dev/null +++ b/tests/unictype/test-categ_none.c @@ -0,0 +1,47 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + uc_general_category_t ct = _UC_CATEGORY_NONE; + unsigned int c; + + for (c = 0; c < 0x110000; c++) + ASSERT (!uc_is_general_category (c, ct)); + + return 0; +} diff --git a/tests/unictype/test-categ_of.c b/tests/unictype/test-categ_of.c new file mode 100644 index 00000000..28ee6630 --- /dev/null +++ b/tests/unictype/test-categ_of.c @@ -0,0 +1,67 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + { + unsigned int c; + for (c = 0; c < 0x110000; c++) + ASSERT (uc_is_general_category (c, uc_general_category (c))); + } + + { + uc_general_category_t decimal_digits = uc_general_category ('7'); + unsigned int c; + + for (c = 0x30; c <= 0x39; c++) + ASSERT (uc_is_general_category (c, decimal_digits)); + for (c = 0x40; c < 0x80; c++) + ASSERT (!uc_is_general_category (c, decimal_digits)); + } + + { + uc_general_category_t lowercase_letters = uc_general_category ('x'); + unsigned int c; + + for (c = 0x41; c <= 0x5A; c++) + ASSERT (!uc_is_general_category (c, lowercase_letters)); + for (c = 0x61; c <= 0x7A; c++) + ASSERT (uc_is_general_category (c, lowercase_letters)); + } + + return 0; +} diff --git a/tests/unictype/test-categ_or.c b/tests/unictype/test-categ_or.c new file mode 100644 index 00000000..6b07de5f --- /dev/null +++ b/tests/unictype/test-categ_or.c @@ -0,0 +1,48 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + uc_general_category_t ct = + uc_general_category_or (UC_LETTER, UC_NUMBER); + + ASSERT (uc_is_general_category ('a', ct)); + ASSERT (uc_is_general_category ('7', ct)); + ASSERT (!uc_is_general_category ('$', ct)); + + return 0; +} diff --git a/tests/unictype/test-categ_test_withtable.c b/tests/unictype/test-categ_test_withtable.c new file mode 100644 index 00000000..b7351328 --- /dev/null +++ b/tests/unictype/test-categ_test_withtable.c @@ -0,0 +1,50 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + uint32_t ctmask = + (UC_CATEGORY_MASK_L | UC_CATEGORY_MASK_N) + & ~(UC_CATEGORY_MASK_Lu | UC_CATEGORY_MASK_Nd); + + ASSERT (!uc_is_general_category_withtable ('A', ctmask)); + ASSERT (uc_is_general_category_withtable ('a', ctmask)); + ASSERT (!uc_is_general_category_withtable ('7', ctmask)); + ASSERT (uc_is_general_category_withtable (0x00B2, ctmask)); + + return 0; +} diff --git a/tests/unictype/test-combining.c b/tests/unictype/test-combining.c new file mode 100644 index 00000000..3e66a9b7 --- /dev/null +++ b/tests/unictype/test-combining.c @@ -0,0 +1,47 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (uc_combining_class ('x') == UC_CCC_NR); + ASSERT (uc_combining_class (0x0300) == UC_CCC_A); + ASSERT (uc_combining_class (0x0319) == UC_CCC_B); + ASSERT (uc_combining_class (0x0327) == UC_CCC_ATB); + ASSERT (uc_combining_class (0x093C) == UC_CCC_NK); + + return 0; +} diff --git a/tests/unictype/test-ctype_alnum.c b/tests/unictype/test-ctype_alnum.c new file mode 100644 index 00000000..9a1c6cac --- /dev/null +++ b/tests/unictype/test-ctype_alnum.c @@ -0,0 +1,439 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 }, + { 0x0041, 0x005A }, + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00BA, 0x00BA }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00F6 }, + { 0x00F8, 0x02C1 }, + { 0x02C6, 0x02D1 }, + { 0x02E0, 0x02E4 }, + { 0x02EC, 0x02EC }, + { 0x02EE, 0x02EE }, + { 0x0345, 0x0345 }, + { 0x0370, 0x0374 }, + { 0x0376, 0x0377 }, + { 0x037A, 0x037D }, + { 0x0386, 0x0386 }, + { 0x0388, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x03F5 }, + { 0x03F7, 0x0481 }, + { 0x048A, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0559, 0x0559 }, + { 0x0561, 0x0587 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F2 }, + { 0x0621, 0x064A }, + { 0x0660, 0x0669 }, + { 0x066E, 0x066F }, + { 0x0671, 0x06D3 }, + { 0x06D5, 0x06D5 }, + { 0x06E5, 0x06E6 }, + { 0x06EE, 0x06FC }, + { 0x06FF, 0x06FF }, + { 0x0710, 0x0710 }, + { 0x0712, 0x072F }, + { 0x074D, 0x07A5 }, + { 0x07B1, 0x07B1 }, + { 0x07C0, 0x07EA }, + { 0x07F4, 0x07F5 }, + { 0x07FA, 0x07FA }, + { 0x0904, 0x0939 }, + { 0x093D, 0x093D }, + { 0x0950, 0x0950 }, + { 0x0958, 0x0961 }, + { 0x0966, 0x096F }, + { 0x0971, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BD, 0x09BD }, + { 0x09CE, 0x09CE }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E1 }, + { 0x09E6, 0x09F1 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A66, 0x0A6F }, + { 0x0A72, 0x0A74 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABD, 0x0ABD }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE1 }, + { 0x0AE6, 0x0AEF }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3D, 0x0B3D }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B61 }, + { 0x0B66, 0x0B6F }, + { 0x0B71, 0x0B71 }, + { 0x0B83, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BD0, 0x0BD0 }, + { 0x0BE6, 0x0BEF }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C3D }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C61 }, + { 0x0C66, 0x0C6F }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBD, 0x0CBD }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE1 }, + { 0x0CE6, 0x0CEF }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D3D }, + { 0x0D60, 0x0D61 }, + { 0x0D66, 0x0D6F }, + { 0x0D7A, 0x0D7F }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0E01, 0x0E2E }, + { 0x0E30, 0x0E3A }, + { 0x0E40, 0x0E45 }, + { 0x0E47, 0x0E4E }, + { 0x0E50, 0x0E59 }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB0 }, + { 0x0EB2, 0x0EB3 }, + { 0x0EBD, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EC6, 0x0EC6 }, + { 0x0ED0, 0x0ED9 }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F00 }, + { 0x0F20, 0x0F29 }, + { 0x0F40, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F88, 0x0F8B }, + { 0x1000, 0x102A }, + { 0x103F, 0x1049 }, + { 0x1050, 0x1055 }, + { 0x105A, 0x105D }, + { 0x1061, 0x1061 }, + { 0x1065, 0x1066 }, + { 0x106E, 0x1070 }, + { 0x1075, 0x1081 }, + { 0x108E, 0x108E }, + { 0x1090, 0x1099 }, + { 0x10A0, 0x10C5 }, + { 0x10D0, 0x10FA }, + { 0x10FC, 0x10FC }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x1380, 0x138F }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x166C }, + { 0x166F, 0x1676 }, + { 0x1681, 0x169A }, + { 0x16A0, 0x16EA }, + { 0x16EE, 0x16F0 }, + { 0x1700, 0x170C }, + { 0x170E, 0x1711 }, + { 0x1720, 0x1731 }, + { 0x1740, 0x1751 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1780, 0x17B3 }, + { 0x17D7, 0x17D7 }, + { 0x17DC, 0x17DC }, + { 0x17E0, 0x17E9 }, + { 0x1810, 0x1819 }, + { 0x1820, 0x1877 }, + { 0x1880, 0x18A8 }, + { 0x18AA, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1946, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19C1, 0x19C7 }, + { 0x19D0, 0x19D9 }, + { 0x1A00, 0x1A16 }, + { 0x1B05, 0x1B33 }, + { 0x1B45, 0x1B4B }, + { 0x1B50, 0x1B59 }, + { 0x1B83, 0x1BA0 }, + { 0x1BAE, 0x1BB9 }, + { 0x1C00, 0x1C23 }, + { 0x1C40, 0x1C49 }, + { 0x1C4D, 0x1C7D }, + { 0x1D00, 0x1DBF }, + { 0x1E00, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FBC }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FC4 }, + { 0x1FC6, 0x1FCC }, + { 0x1FD0, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FE0, 0x1FEC }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFC }, + { 0x2071, 0x2071 }, + { 0x207F, 0x207F }, + { 0x2090, 0x2094 }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2119, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x212D }, + { 0x212F, 0x2139 }, + { 0x213C, 0x213F }, + { 0x2145, 0x2149 }, + { 0x214E, 0x214E }, + { 0x2160, 0x2188 }, + { 0x249C, 0x24E9 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CE4 }, + { 0x2D00, 0x2D25 }, + { 0x2D30, 0x2D65 }, + { 0x2D6F, 0x2D6F }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x2E2F, 0x2E2F }, + { 0x3005, 0x3007 }, + { 0x3021, 0x3029 }, + { 0x3031, 0x3035 }, + { 0x3038, 0x303C }, + { 0x3041, 0x3096 }, + { 0x309D, 0x309F }, + { 0x30A1, 0x30FA }, + { 0x30FC, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x31A0, 0x31B7 }, + { 0x31F0, 0x31FF }, + { 0x3400, 0x4DB5 }, + { 0x4E00, 0x9FC3 }, + { 0xA000, 0xA48C }, + { 0xA500, 0xA60C }, + { 0xA610, 0xA62B }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA66E }, + { 0xA67F, 0xA697 }, + { 0xA717, 0xA71F }, + { 0xA722, 0xA788 }, + { 0xA78B, 0xA78C }, + { 0xA7FB, 0xA801 }, + { 0xA803, 0xA805 }, + { 0xA807, 0xA80A }, + { 0xA80C, 0xA822 }, + { 0xA840, 0xA873 }, + { 0xA882, 0xA8B3 }, + { 0xA8D0, 0xA8D9 }, + { 0xA900, 0xA925 }, + { 0xA930, 0xA946 }, + { 0xAA00, 0xAA28 }, + { 0xAA40, 0xAA42 }, + { 0xAA44, 0xAA4B }, + { 0xAA50, 0xAA59 }, + { 0xAC00, 0xD7A3 }, + { 0xF900, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB1D }, + { 0xFB1F, 0xFB28 }, + { 0xFB2A, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFD3D }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDFB }, + { 0xFE70, 0xFE74 }, + { 0xFE76, 0xFEFC }, + { 0xFF10, 0xFF19 }, + { 0xFF21, 0xFF3A }, + { 0xFF41, 0xFF5A }, + { 0xFF66, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10140, 0x10174 }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10330, 0x1034A }, + { 0x10380, 0x1039D }, + { 0x103A0, 0x103C3 }, + { 0x103C8, 0x103CF }, + { 0x103D1, 0x103D5 }, + { 0x10400, 0x1049D }, + { 0x104A0, 0x104A9 }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10915 }, + { 0x10920, 0x10939 }, + { 0x10A00, 0x10A00 }, + { 0x10A10, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x12000, 0x1236E }, + { 0x12400, 0x12462 }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6FA }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D734 }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D76E }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D7A8 }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7CB }, + { 0x1D7CE, 0x1D7FF }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D } + +#define PREDICATE(c) uc_is_alnum (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-ctype_alpha.c b/tests/unictype/test-ctype_alpha.c new file mode 100644 index 00000000..c6100cfa --- /dev/null +++ b/tests/unictype/test-ctype_alpha.c @@ -0,0 +1,438 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0041, 0x005A }, + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00BA, 0x00BA }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00F6 }, + { 0x00F8, 0x02C1 }, + { 0x02C6, 0x02D1 }, + { 0x02E0, 0x02E4 }, + { 0x02EC, 0x02EC }, + { 0x02EE, 0x02EE }, + { 0x0345, 0x0345 }, + { 0x0370, 0x0374 }, + { 0x0376, 0x0377 }, + { 0x037A, 0x037D }, + { 0x0386, 0x0386 }, + { 0x0388, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x03F5 }, + { 0x03F7, 0x0481 }, + { 0x048A, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0559, 0x0559 }, + { 0x0561, 0x0587 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F2 }, + { 0x0621, 0x064A }, + { 0x0660, 0x0669 }, + { 0x066E, 0x066F }, + { 0x0671, 0x06D3 }, + { 0x06D5, 0x06D5 }, + { 0x06E5, 0x06E6 }, + { 0x06EE, 0x06FC }, + { 0x06FF, 0x06FF }, + { 0x0710, 0x0710 }, + { 0x0712, 0x072F }, + { 0x074D, 0x07A5 }, + { 0x07B1, 0x07B1 }, + { 0x07C0, 0x07EA }, + { 0x07F4, 0x07F5 }, + { 0x07FA, 0x07FA }, + { 0x0904, 0x0939 }, + { 0x093D, 0x093D }, + { 0x0950, 0x0950 }, + { 0x0958, 0x0961 }, + { 0x0966, 0x096F }, + { 0x0971, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BD, 0x09BD }, + { 0x09CE, 0x09CE }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E1 }, + { 0x09E6, 0x09F1 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A66, 0x0A6F }, + { 0x0A72, 0x0A74 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABD, 0x0ABD }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE1 }, + { 0x0AE6, 0x0AEF }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3D, 0x0B3D }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B61 }, + { 0x0B66, 0x0B6F }, + { 0x0B71, 0x0B71 }, + { 0x0B83, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BD0, 0x0BD0 }, + { 0x0BE6, 0x0BEF }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C3D }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C61 }, + { 0x0C66, 0x0C6F }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBD, 0x0CBD }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE1 }, + { 0x0CE6, 0x0CEF }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D3D }, + { 0x0D60, 0x0D61 }, + { 0x0D66, 0x0D6F }, + { 0x0D7A, 0x0D7F }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0E01, 0x0E2E }, + { 0x0E30, 0x0E3A }, + { 0x0E40, 0x0E45 }, + { 0x0E47, 0x0E4E }, + { 0x0E50, 0x0E59 }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB0 }, + { 0x0EB2, 0x0EB3 }, + { 0x0EBD, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EC6, 0x0EC6 }, + { 0x0ED0, 0x0ED9 }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F00 }, + { 0x0F20, 0x0F29 }, + { 0x0F40, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F88, 0x0F8B }, + { 0x1000, 0x102A }, + { 0x103F, 0x1049 }, + { 0x1050, 0x1055 }, + { 0x105A, 0x105D }, + { 0x1061, 0x1061 }, + { 0x1065, 0x1066 }, + { 0x106E, 0x1070 }, + { 0x1075, 0x1081 }, + { 0x108E, 0x108E }, + { 0x1090, 0x1099 }, + { 0x10A0, 0x10C5 }, + { 0x10D0, 0x10FA }, + { 0x10FC, 0x10FC }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x1380, 0x138F }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x166C }, + { 0x166F, 0x1676 }, + { 0x1681, 0x169A }, + { 0x16A0, 0x16EA }, + { 0x16EE, 0x16F0 }, + { 0x1700, 0x170C }, + { 0x170E, 0x1711 }, + { 0x1720, 0x1731 }, + { 0x1740, 0x1751 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1780, 0x17B3 }, + { 0x17D7, 0x17D7 }, + { 0x17DC, 0x17DC }, + { 0x17E0, 0x17E9 }, + { 0x1810, 0x1819 }, + { 0x1820, 0x1877 }, + { 0x1880, 0x18A8 }, + { 0x18AA, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1946, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19C1, 0x19C7 }, + { 0x19D0, 0x19D9 }, + { 0x1A00, 0x1A16 }, + { 0x1B05, 0x1B33 }, + { 0x1B45, 0x1B4B }, + { 0x1B50, 0x1B59 }, + { 0x1B83, 0x1BA0 }, + { 0x1BAE, 0x1BB9 }, + { 0x1C00, 0x1C23 }, + { 0x1C40, 0x1C49 }, + { 0x1C4D, 0x1C7D }, + { 0x1D00, 0x1DBF }, + { 0x1E00, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FBC }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FC4 }, + { 0x1FC6, 0x1FCC }, + { 0x1FD0, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FE0, 0x1FEC }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFC }, + { 0x2071, 0x2071 }, + { 0x207F, 0x207F }, + { 0x2090, 0x2094 }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2119, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x212D }, + { 0x212F, 0x2139 }, + { 0x213C, 0x213F }, + { 0x2145, 0x2149 }, + { 0x214E, 0x214E }, + { 0x2160, 0x2188 }, + { 0x249C, 0x24E9 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CE4 }, + { 0x2D00, 0x2D25 }, + { 0x2D30, 0x2D65 }, + { 0x2D6F, 0x2D6F }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x2E2F, 0x2E2F }, + { 0x3005, 0x3007 }, + { 0x3021, 0x3029 }, + { 0x3031, 0x3035 }, + { 0x3038, 0x303C }, + { 0x3041, 0x3096 }, + { 0x309D, 0x309F }, + { 0x30A1, 0x30FA }, + { 0x30FC, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x31A0, 0x31B7 }, + { 0x31F0, 0x31FF }, + { 0x3400, 0x4DB5 }, + { 0x4E00, 0x9FC3 }, + { 0xA000, 0xA48C }, + { 0xA500, 0xA60C }, + { 0xA610, 0xA62B }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA66E }, + { 0xA67F, 0xA697 }, + { 0xA717, 0xA71F }, + { 0xA722, 0xA788 }, + { 0xA78B, 0xA78C }, + { 0xA7FB, 0xA801 }, + { 0xA803, 0xA805 }, + { 0xA807, 0xA80A }, + { 0xA80C, 0xA822 }, + { 0xA840, 0xA873 }, + { 0xA882, 0xA8B3 }, + { 0xA8D0, 0xA8D9 }, + { 0xA900, 0xA925 }, + { 0xA930, 0xA946 }, + { 0xAA00, 0xAA28 }, + { 0xAA40, 0xAA42 }, + { 0xAA44, 0xAA4B }, + { 0xAA50, 0xAA59 }, + { 0xAC00, 0xD7A3 }, + { 0xF900, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB1D }, + { 0xFB1F, 0xFB28 }, + { 0xFB2A, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFD3D }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDFB }, + { 0xFE70, 0xFE74 }, + { 0xFE76, 0xFEFC }, + { 0xFF10, 0xFF19 }, + { 0xFF21, 0xFF3A }, + { 0xFF41, 0xFF5A }, + { 0xFF66, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10140, 0x10174 }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10330, 0x1034A }, + { 0x10380, 0x1039D }, + { 0x103A0, 0x103C3 }, + { 0x103C8, 0x103CF }, + { 0x103D1, 0x103D5 }, + { 0x10400, 0x1049D }, + { 0x104A0, 0x104A9 }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10915 }, + { 0x10920, 0x10939 }, + { 0x10A00, 0x10A00 }, + { 0x10A10, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x12000, 0x1236E }, + { 0x12400, 0x12462 }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6FA }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D734 }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D76E }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D7A8 }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7CB }, + { 0x1D7CE, 0x1D7FF }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D } + +#define PREDICATE(c) uc_is_alpha (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-ctype_blank.c b/tests/unictype/test-ctype_blank.c new file mode 100644 index 00000000..15aa3087 --- /dev/null +++ b/tests/unictype/test-ctype_blank.c @@ -0,0 +1,30 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0009, 0x0009 }, + { 0x0020, 0x0020 }, + { 0x1680, 0x1680 }, + { 0x180E, 0x180E }, + { 0x2000, 0x2006 }, + { 0x2008, 0x200A }, + { 0x205F, 0x205F }, + { 0x3000, 0x3000 } + +#define PREDICATE(c) uc_is_blank (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-ctype_cntrl.c b/tests/unictype/test-ctype_cntrl.c new file mode 100644 index 00000000..ea886b9a --- /dev/null +++ b/tests/unictype/test-ctype_cntrl.c @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0000, 0x001F }, + { 0x007F, 0x009F }, + { 0x2028, 0x2029 } + +#define PREDICATE(c) uc_is_cntrl (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-ctype_digit.c b/tests/unictype/test-ctype_digit.c new file mode 100644 index 00000000..acf5b4ac --- /dev/null +++ b/tests/unictype/test-ctype_digit.c @@ -0,0 +1,23 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 } + +#define PREDICATE(c) uc_is_digit (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-ctype_graph.c b/tests/unictype/test-ctype_graph.c new file mode 100644 index 00000000..32055ede --- /dev/null +++ b/tests/unictype/test-ctype_graph.c @@ -0,0 +1,471 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0021, 0x007E }, + { 0x00A0, 0x0377 }, + { 0x037A, 0x037E }, + { 0x0384, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0559, 0x055F }, + { 0x0561, 0x0587 }, + { 0x0589, 0x058A }, + { 0x0591, 0x05C7 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F4 }, + { 0x0600, 0x0603 }, + { 0x0606, 0x061B }, + { 0x061E, 0x061F }, + { 0x0621, 0x065E }, + { 0x0660, 0x070D }, + { 0x070F, 0x074A }, + { 0x074D, 0x07B1 }, + { 0x07C0, 0x07FA }, + { 0x0901, 0x0939 }, + { 0x093C, 0x094D }, + { 0x0950, 0x0954 }, + { 0x0958, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0981, 0x0983 }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BC, 0x09C4 }, + { 0x09C7, 0x09C8 }, + { 0x09CB, 0x09CE }, + { 0x09D7, 0x09D7 }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E3 }, + { 0x09E6, 0x09FA }, + { 0x0A01, 0x0A03 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A3C, 0x0A3C }, + { 0x0A3E, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, + { 0x0A51, 0x0A51 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A66, 0x0A75 }, + { 0x0A81, 0x0A83 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABC, 0x0AC5 }, + { 0x0AC7, 0x0AC9 }, + { 0x0ACB, 0x0ACD }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE3 }, + { 0x0AE6, 0x0AEF }, + { 0x0AF1, 0x0AF1 }, + { 0x0B01, 0x0B03 }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3C, 0x0B44 }, + { 0x0B47, 0x0B48 }, + { 0x0B4B, 0x0B4D }, + { 0x0B56, 0x0B57 }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B63 }, + { 0x0B66, 0x0B71 }, + { 0x0B82, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BBE, 0x0BC2 }, + { 0x0BC6, 0x0BC8 }, + { 0x0BCA, 0x0BCD }, + { 0x0BD0, 0x0BD0 }, + { 0x0BD7, 0x0BD7 }, + { 0x0BE6, 0x0BFA }, + { 0x0C01, 0x0C03 }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C44 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, + { 0x0C55, 0x0C56 }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C63 }, + { 0x0C66, 0x0C6F }, + { 0x0C78, 0x0C7F }, + { 0x0C82, 0x0C83 }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBC, 0x0CC4 }, + { 0x0CC6, 0x0CC8 }, + { 0x0CCA, 0x0CCD }, + { 0x0CD5, 0x0CD6 }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE3 }, + { 0x0CE6, 0x0CEF }, + { 0x0CF1, 0x0CF2 }, + { 0x0D02, 0x0D03 }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D44 }, + { 0x0D46, 0x0D48 }, + { 0x0D4A, 0x0D4D }, + { 0x0D57, 0x0D57 }, + { 0x0D60, 0x0D63 }, + { 0x0D66, 0x0D75 }, + { 0x0D79, 0x0D7F }, + { 0x0D82, 0x0D83 }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0DCA, 0x0DCA }, + { 0x0DCF, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0DD8, 0x0DDF }, + { 0x0DF2, 0x0DF4 }, + { 0x0E01, 0x0E3A }, + { 0x0E3F, 0x0E5B }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB9 }, + { 0x0EBB, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EC6, 0x0EC6 }, + { 0x0EC8, 0x0ECD }, + { 0x0ED0, 0x0ED9 }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F71, 0x0F8B }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x0FBE, 0x0FCC }, + { 0x0FCE, 0x0FD4 }, + { 0x1000, 0x1099 }, + { 0x109E, 0x10C5 }, + { 0x10D0, 0x10FC }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x135F, 0x137C }, + { 0x1380, 0x1399 }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x1676 }, + { 0x1681, 0x169C }, + { 0x16A0, 0x16F0 }, + { 0x1700, 0x170C }, + { 0x170E, 0x1714 }, + { 0x1720, 0x1736 }, + { 0x1740, 0x1753 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1772, 0x1773 }, + { 0x1780, 0x17DD }, + { 0x17E0, 0x17E9 }, + { 0x17F0, 0x17F9 }, + { 0x1800, 0x180D }, + { 0x1810, 0x1819 }, + { 0x1820, 0x1877 }, + { 0x1880, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1920, 0x192B }, + { 0x1930, 0x193B }, + { 0x1940, 0x1940 }, + { 0x1944, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19B0, 0x19C9 }, + { 0x19D0, 0x19D9 }, + { 0x19DE, 0x1A1B }, + { 0x1A1E, 0x1A1F }, + { 0x1B00, 0x1B4B }, + { 0x1B50, 0x1B7C }, + { 0x1B80, 0x1BAA }, + { 0x1BAE, 0x1BB9 }, + { 0x1C00, 0x1C37 }, + { 0x1C3B, 0x1C49 }, + { 0x1C4D, 0x1C7F }, + { 0x1D00, 0x1DE6 }, + { 0x1DFE, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FC4 }, + { 0x1FC6, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FDD, 0x1FEF }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFE }, + { 0x2007, 0x2007 }, + { 0x200B, 0x2027 }, + { 0x202A, 0x205E }, + { 0x2060, 0x2064 }, + { 0x206A, 0x2071 }, + { 0x2074, 0x208E }, + { 0x2090, 0x2094 }, + { 0x20A0, 0x20B5 }, + { 0x20D0, 0x20F0 }, + { 0x2100, 0x214F }, + { 0x2153, 0x2188 }, + { 0x2190, 0x23E7 }, + { 0x2400, 0x2426 }, + { 0x2440, 0x244A }, + { 0x2460, 0x269D }, + { 0x26A0, 0x26BC }, + { 0x26C0, 0x26C3 }, + { 0x2701, 0x2704 }, + { 0x2706, 0x2709 }, + { 0x270C, 0x2727 }, + { 0x2729, 0x274B }, + { 0x274D, 0x274D }, + { 0x274F, 0x2752 }, + { 0x2756, 0x2756 }, + { 0x2758, 0x275E }, + { 0x2761, 0x2794 }, + { 0x2798, 0x27AF }, + { 0x27B1, 0x27BE }, + { 0x27C0, 0x27CA }, + { 0x27CC, 0x27CC }, + { 0x27D0, 0x2B4C }, + { 0x2B50, 0x2B54 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CEA }, + { 0x2CF9, 0x2D25 }, + { 0x2D30, 0x2D65 }, + { 0x2D6F, 0x2D6F }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x2DE0, 0x2E30 }, + { 0x2E80, 0x2E99 }, + { 0x2E9B, 0x2EF3 }, + { 0x2F00, 0x2FD5 }, + { 0x2FF0, 0x2FFB }, + { 0x3001, 0x303F }, + { 0x3041, 0x3096 }, + { 0x3099, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x3190, 0x31B7 }, + { 0x31C0, 0x31E3 }, + { 0x31F0, 0x321E }, + { 0x3220, 0x3243 }, + { 0x3250, 0x32FE }, + { 0x3300, 0x4DB5 }, + { 0x4DC0, 0x9FC3 }, + { 0xA000, 0xA48C }, + { 0xA490, 0xA4C6 }, + { 0xA500, 0xA62B }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA673 }, + { 0xA67C, 0xA697 }, + { 0xA700, 0xA78C }, + { 0xA7FB, 0xA82B }, + { 0xA840, 0xA877 }, + { 0xA880, 0xA8C4 }, + { 0xA8CE, 0xA8D9 }, + { 0xA900, 0xA953 }, + { 0xA95F, 0xA95F }, + { 0xAA00, 0xAA36 }, + { 0xAA40, 0xAA4D }, + { 0xAA50, 0xAA59 }, + { 0xAA5C, 0xAA5F }, + { 0xAC00, 0xD7A3 }, + { 0xE000, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFD3F }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDFD }, + { 0xFE00, 0xFE19 }, + { 0xFE20, 0xFE26 }, + { 0xFE30, 0xFE52 }, + { 0xFE54, 0xFE66 }, + { 0xFE68, 0xFE6B }, + { 0xFE70, 0xFE74 }, + { 0xFE76, 0xFEFC }, + { 0xFEFF, 0xFEFF }, + { 0xFF01, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0xFFE0, 0xFFE6 }, + { 0xFFE8, 0xFFEE }, + { 0xFFF9, 0xFFFD }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10100, 0x10102 }, + { 0x10107, 0x10133 }, + { 0x10137, 0x1018A }, + { 0x10190, 0x1019B }, + { 0x101D0, 0x101FD }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10320, 0x10323 }, + { 0x10330, 0x1034A }, + { 0x10380, 0x1039D }, + { 0x1039F, 0x103C3 }, + { 0x103C8, 0x103D5 }, + { 0x10400, 0x1049D }, + { 0x104A0, 0x104A9 }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10919 }, + { 0x1091F, 0x10939 }, + { 0x1093F, 0x1093F }, + { 0x10A00, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x10A38, 0x10A3A }, + { 0x10A3F, 0x10A47 }, + { 0x10A50, 0x10A58 }, + { 0x12000, 0x1236E }, + { 0x12400, 0x12462 }, + { 0x12470, 0x12473 }, + { 0x1D000, 0x1D0F5 }, + { 0x1D100, 0x1D126 }, + { 0x1D129, 0x1D1DD }, + { 0x1D200, 0x1D245 }, + { 0x1D300, 0x1D356 }, + { 0x1D360, 0x1D371 }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D7CB }, + { 0x1D7CE, 0x1D7FF }, + { 0x1F000, 0x1F02B }, + { 0x1F030, 0x1F093 }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D }, + { 0xE0001, 0xE0001 }, + { 0xE0020, 0xE007F }, + { 0xE0100, 0xE01EF }, + { 0xF0000, 0xFFFFD }, + { 0x100000, 0x10FFFD } + +#define PREDICATE(c) uc_is_graph (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-ctype_lower.c b/tests/unictype/test-ctype_lower.c new file mode 100644 index 00000000..f7135fa7 --- /dev/null +++ b/tests/unictype/test-ctype_lower.c @@ -0,0 +1,592 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0061, 0x007A }, + { 0x00B5, 0x00B5 }, + { 0x00DF, 0x00F6 }, + { 0x00F8, 0x00FF }, + { 0x0101, 0x0101 }, + { 0x0103, 0x0103 }, + { 0x0105, 0x0105 }, + { 0x0107, 0x0107 }, + { 0x0109, 0x0109 }, + { 0x010B, 0x010B }, + { 0x010D, 0x010D }, + { 0x010F, 0x010F }, + { 0x0111, 0x0111 }, + { 0x0113, 0x0113 }, + { 0x0115, 0x0115 }, + { 0x0117, 0x0117 }, + { 0x0119, 0x0119 }, + { 0x011B, 0x011B }, + { 0x011D, 0x011D }, + { 0x011F, 0x011F }, + { 0x0121, 0x0121 }, + { 0x0123, 0x0123 }, + { 0x0125, 0x0125 }, + { 0x0127, 0x0127 }, + { 0x0129, 0x0129 }, + { 0x012B, 0x012B }, + { 0x012D, 0x012D }, + { 0x012F, 0x012F }, + { 0x0131, 0x0131 }, + { 0x0133, 0x0133 }, + { 0x0135, 0x0135 }, + { 0x0137, 0x0137 }, + { 0x013A, 0x013A }, + { 0x013C, 0x013C }, + { 0x013E, 0x013E }, + { 0x0140, 0x0140 }, + { 0x0142, 0x0142 }, + { 0x0144, 0x0144 }, + { 0x0146, 0x0146 }, + { 0x0148, 0x0148 }, + { 0x014B, 0x014B }, + { 0x014D, 0x014D }, + { 0x014F, 0x014F }, + { 0x0151, 0x0151 }, + { 0x0153, 0x0153 }, + { 0x0155, 0x0155 }, + { 0x0157, 0x0157 }, + { 0x0159, 0x0159 }, + { 0x015B, 0x015B }, + { 0x015D, 0x015D }, + { 0x015F, 0x015F }, + { 0x0161, 0x0161 }, + { 0x0163, 0x0163 }, + { 0x0165, 0x0165 }, + { 0x0167, 0x0167 }, + { 0x0169, 0x0169 }, + { 0x016B, 0x016B }, + { 0x016D, 0x016D }, + { 0x016F, 0x016F }, + { 0x0171, 0x0171 }, + { 0x0173, 0x0173 }, + { 0x0175, 0x0175 }, + { 0x0177, 0x0177 }, + { 0x017A, 0x017A }, + { 0x017C, 0x017C }, + { 0x017E, 0x0180 }, + { 0x0183, 0x0183 }, + { 0x0185, 0x0185 }, + { 0x0188, 0x0188 }, + { 0x018C, 0x018C }, + { 0x0192, 0x0192 }, + { 0x0195, 0x0195 }, + { 0x0199, 0x019A }, + { 0x019E, 0x019E }, + { 0x01A1, 0x01A1 }, + { 0x01A3, 0x01A3 }, + { 0x01A5, 0x01A5 }, + { 0x01A8, 0x01A8 }, + { 0x01AD, 0x01AD }, + { 0x01B0, 0x01B0 }, + { 0x01B4, 0x01B4 }, + { 0x01B6, 0x01B6 }, + { 0x01B9, 0x01B9 }, + { 0x01BD, 0x01BD }, + { 0x01BF, 0x01BF }, + { 0x01C5, 0x01C6 }, + { 0x01C8, 0x01C9 }, + { 0x01CB, 0x01CC }, + { 0x01CE, 0x01CE }, + { 0x01D0, 0x01D0 }, + { 0x01D2, 0x01D2 }, + { 0x01D4, 0x01D4 }, + { 0x01D6, 0x01D6 }, + { 0x01D8, 0x01D8 }, + { 0x01DA, 0x01DA }, + { 0x01DC, 0x01DD }, + { 0x01DF, 0x01DF }, + { 0x01E1, 0x01E1 }, + { 0x01E3, 0x01E3 }, + { 0x01E5, 0x01E5 }, + { 0x01E7, 0x01E7 }, + { 0x01E9, 0x01E9 }, + { 0x01EB, 0x01EB }, + { 0x01ED, 0x01ED }, + { 0x01EF, 0x01EF }, + { 0x01F2, 0x01F3 }, + { 0x01F5, 0x01F5 }, + { 0x01F9, 0x01F9 }, + { 0x01FB, 0x01FB }, + { 0x01FD, 0x01FD }, + { 0x01FF, 0x01FF }, + { 0x0201, 0x0201 }, + { 0x0203, 0x0203 }, + { 0x0205, 0x0205 }, + { 0x0207, 0x0207 }, + { 0x0209, 0x0209 }, + { 0x020B, 0x020B }, + { 0x020D, 0x020D }, + { 0x020F, 0x020F }, + { 0x0211, 0x0211 }, + { 0x0213, 0x0213 }, + { 0x0215, 0x0215 }, + { 0x0217, 0x0217 }, + { 0x0219, 0x0219 }, + { 0x021B, 0x021B }, + { 0x021D, 0x021D }, + { 0x021F, 0x021F }, + { 0x0223, 0x0223 }, + { 0x0225, 0x0225 }, + { 0x0227, 0x0227 }, + { 0x0229, 0x0229 }, + { 0x022B, 0x022B }, + { 0x022D, 0x022D }, + { 0x022F, 0x022F }, + { 0x0231, 0x0231 }, + { 0x0233, 0x0233 }, + { 0x023C, 0x023C }, + { 0x0242, 0x0242 }, + { 0x0247, 0x0247 }, + { 0x0249, 0x0249 }, + { 0x024B, 0x024B }, + { 0x024D, 0x024D }, + { 0x024F, 0x0251 }, + { 0x0253, 0x0254 }, + { 0x0256, 0x0257 }, + { 0x0259, 0x0259 }, + { 0x025B, 0x025B }, + { 0x0260, 0x0260 }, + { 0x0263, 0x0263 }, + { 0x0268, 0x0269 }, + { 0x026B, 0x026B }, + { 0x026F, 0x026F }, + { 0x0271, 0x0272 }, + { 0x0275, 0x0275 }, + { 0x027D, 0x027D }, + { 0x0280, 0x0280 }, + { 0x0283, 0x0283 }, + { 0x0288, 0x028C }, + { 0x0292, 0x0292 }, + { 0x0345, 0x0345 }, + { 0x0371, 0x0371 }, + { 0x0373, 0x0373 }, + { 0x0377, 0x0377 }, + { 0x037B, 0x037D }, + { 0x03AC, 0x03AF }, + { 0x03B1, 0x03CE }, + { 0x03D0, 0x03D1 }, + { 0x03D5, 0x03D7 }, + { 0x03D9, 0x03D9 }, + { 0x03DB, 0x03DB }, + { 0x03DD, 0x03DD }, + { 0x03DF, 0x03DF }, + { 0x03E1, 0x03E1 }, + { 0x03E3, 0x03E3 }, + { 0x03E5, 0x03E5 }, + { 0x03E7, 0x03E7 }, + { 0x03E9, 0x03E9 }, + { 0x03EB, 0x03EB }, + { 0x03ED, 0x03ED }, + { 0x03EF, 0x03F2 }, + { 0x03F5, 0x03F5 }, + { 0x03F8, 0x03F8 }, + { 0x03FB, 0x03FB }, + { 0x0430, 0x045F }, + { 0x0461, 0x0461 }, + { 0x0463, 0x0463 }, + { 0x0465, 0x0465 }, + { 0x0467, 0x0467 }, + { 0x0469, 0x0469 }, + { 0x046B, 0x046B }, + { 0x046D, 0x046D }, + { 0x046F, 0x046F }, + { 0x0471, 0x0471 }, + { 0x0473, 0x0473 }, + { 0x0475, 0x0475 }, + { 0x0477, 0x0477 }, + { 0x0479, 0x0479 }, + { 0x047B, 0x047B }, + { 0x047D, 0x047D }, + { 0x047F, 0x047F }, + { 0x0481, 0x0481 }, + { 0x048B, 0x048B }, + { 0x048D, 0x048D }, + { 0x048F, 0x048F }, + { 0x0491, 0x0491 }, + { 0x0493, 0x0493 }, + { 0x0495, 0x0495 }, + { 0x0497, 0x0497 }, + { 0x0499, 0x0499 }, + { 0x049B, 0x049B }, + { 0x049D, 0x049D }, + { 0x049F, 0x049F }, + { 0x04A1, 0x04A1 }, + { 0x04A3, 0x04A3 }, + { 0x04A5, 0x04A5 }, + { 0x04A7, 0x04A7 }, + { 0x04A9, 0x04A9 }, + { 0x04AB, 0x04AB }, + { 0x04AD, 0x04AD }, + { 0x04AF, 0x04AF }, + { 0x04B1, 0x04B1 }, + { 0x04B3, 0x04B3 }, + { 0x04B5, 0x04B5 }, + { 0x04B7, 0x04B7 }, + { 0x04B9, 0x04B9 }, + { 0x04BB, 0x04BB }, + { 0x04BD, 0x04BD }, + { 0x04BF, 0x04BF }, + { 0x04C2, 0x04C2 }, + { 0x04C4, 0x04C4 }, + { 0x04C6, 0x04C6 }, + { 0x04C8, 0x04C8 }, + { 0x04CA, 0x04CA }, + { 0x04CC, 0x04CC }, + { 0x04CE, 0x04CF }, + { 0x04D1, 0x04D1 }, + { 0x04D3, 0x04D3 }, + { 0x04D5, 0x04D5 }, + { 0x04D7, 0x04D7 }, + { 0x04D9, 0x04D9 }, + { 0x04DB, 0x04DB }, + { 0x04DD, 0x04DD }, + { 0x04DF, 0x04DF }, + { 0x04E1, 0x04E1 }, + { 0x04E3, 0x04E3 }, + { 0x04E5, 0x04E5 }, + { 0x04E7, 0x04E7 }, + { 0x04E9, 0x04E9 }, + { 0x04EB, 0x04EB }, + { 0x04ED, 0x04ED }, + { 0x04EF, 0x04EF }, + { 0x04F1, 0x04F1 }, + { 0x04F3, 0x04F3 }, + { 0x04F5, 0x04F5 }, + { 0x04F7, 0x04F7 }, + { 0x04F9, 0x04F9 }, + { 0x04FB, 0x04FB }, + { 0x04FD, 0x04FD }, + { 0x04FF, 0x04FF }, + { 0x0501, 0x0501 }, + { 0x0503, 0x0503 }, + { 0x0505, 0x0505 }, + { 0x0507, 0x0507 }, + { 0x0509, 0x0509 }, + { 0x050B, 0x050B }, + { 0x050D, 0x050D }, + { 0x050F, 0x050F }, + { 0x0511, 0x0511 }, + { 0x0513, 0x0513 }, + { 0x0515, 0x0515 }, + { 0x0517, 0x0517 }, + { 0x0519, 0x0519 }, + { 0x051B, 0x051B }, + { 0x051D, 0x051D }, + { 0x051F, 0x051F }, + { 0x0521, 0x0521 }, + { 0x0523, 0x0523 }, + { 0x0561, 0x0586 }, + { 0x1D79, 0x1D79 }, + { 0x1D7D, 0x1D7D }, + { 0x1E01, 0x1E01 }, + { 0x1E03, 0x1E03 }, + { 0x1E05, 0x1E05 }, + { 0x1E07, 0x1E07 }, + { 0x1E09, 0x1E09 }, + { 0x1E0B, 0x1E0B }, + { 0x1E0D, 0x1E0D }, + { 0x1E0F, 0x1E0F }, + { 0x1E11, 0x1E11 }, + { 0x1E13, 0x1E13 }, + { 0x1E15, 0x1E15 }, + { 0x1E17, 0x1E17 }, + { 0x1E19, 0x1E19 }, + { 0x1E1B, 0x1E1B }, + { 0x1E1D, 0x1E1D }, + { 0x1E1F, 0x1E1F }, + { 0x1E21, 0x1E21 }, + { 0x1E23, 0x1E23 }, + { 0x1E25, 0x1E25 }, + { 0x1E27, 0x1E27 }, + { 0x1E29, 0x1E29 }, + { 0x1E2B, 0x1E2B }, + { 0x1E2D, 0x1E2D }, + { 0x1E2F, 0x1E2F }, + { 0x1E31, 0x1E31 }, + { 0x1E33, 0x1E33 }, + { 0x1E35, 0x1E35 }, + { 0x1E37, 0x1E37 }, + { 0x1E39, 0x1E39 }, + { 0x1E3B, 0x1E3B }, + { 0x1E3D, 0x1E3D }, + { 0x1E3F, 0x1E3F }, + { 0x1E41, 0x1E41 }, + { 0x1E43, 0x1E43 }, + { 0x1E45, 0x1E45 }, + { 0x1E47, 0x1E47 }, + { 0x1E49, 0x1E49 }, + { 0x1E4B, 0x1E4B }, + { 0x1E4D, 0x1E4D }, + { 0x1E4F, 0x1E4F }, + { 0x1E51, 0x1E51 }, + { 0x1E53, 0x1E53 }, + { 0x1E55, 0x1E55 }, + { 0x1E57, 0x1E57 }, + { 0x1E59, 0x1E59 }, + { 0x1E5B, 0x1E5B }, + { 0x1E5D, 0x1E5D }, + { 0x1E5F, 0x1E5F }, + { 0x1E61, 0x1E61 }, + { 0x1E63, 0x1E63 }, + { 0x1E65, 0x1E65 }, + { 0x1E67, 0x1E67 }, + { 0x1E69, 0x1E69 }, + { 0x1E6B, 0x1E6B }, + { 0x1E6D, 0x1E6D }, + { 0x1E6F, 0x1E6F }, + { 0x1E71, 0x1E71 }, + { 0x1E73, 0x1E73 }, + { 0x1E75, 0x1E75 }, + { 0x1E77, 0x1E77 }, + { 0x1E79, 0x1E79 }, + { 0x1E7B, 0x1E7B }, + { 0x1E7D, 0x1E7D }, + { 0x1E7F, 0x1E7F }, + { 0x1E81, 0x1E81 }, + { 0x1E83, 0x1E83 }, + { 0x1E85, 0x1E85 }, + { 0x1E87, 0x1E87 }, + { 0x1E89, 0x1E89 }, + { 0x1E8B, 0x1E8B }, + { 0x1E8D, 0x1E8D }, + { 0x1E8F, 0x1E8F }, + { 0x1E91, 0x1E91 }, + { 0x1E93, 0x1E93 }, + { 0x1E95, 0x1E95 }, + { 0x1E9B, 0x1E9B }, + { 0x1EA1, 0x1EA1 }, + { 0x1EA3, 0x1EA3 }, + { 0x1EA5, 0x1EA5 }, + { 0x1EA7, 0x1EA7 }, + { 0x1EA9, 0x1EA9 }, + { 0x1EAB, 0x1EAB }, + { 0x1EAD, 0x1EAD }, + { 0x1EAF, 0x1EAF }, + { 0x1EB1, 0x1EB1 }, + { 0x1EB3, 0x1EB3 }, + { 0x1EB5, 0x1EB5 }, + { 0x1EB7, 0x1EB7 }, + { 0x1EB9, 0x1EB9 }, + { 0x1EBB, 0x1EBB }, + { 0x1EBD, 0x1EBD }, + { 0x1EBF, 0x1EBF }, + { 0x1EC1, 0x1EC1 }, + { 0x1EC3, 0x1EC3 }, + { 0x1EC5, 0x1EC5 }, + { 0x1EC7, 0x1EC7 }, + { 0x1EC9, 0x1EC9 }, + { 0x1ECB, 0x1ECB }, + { 0x1ECD, 0x1ECD }, + { 0x1ECF, 0x1ECF }, + { 0x1ED1, 0x1ED1 }, + { 0x1ED3, 0x1ED3 }, + { 0x1ED5, 0x1ED5 }, + { 0x1ED7, 0x1ED7 }, + { 0x1ED9, 0x1ED9 }, + { 0x1EDB, 0x1EDB }, + { 0x1EDD, 0x1EDD }, + { 0x1EDF, 0x1EDF }, + { 0x1EE1, 0x1EE1 }, + { 0x1EE3, 0x1EE3 }, + { 0x1EE5, 0x1EE5 }, + { 0x1EE7, 0x1EE7 }, + { 0x1EE9, 0x1EE9 }, + { 0x1EEB, 0x1EEB }, + { 0x1EED, 0x1EED }, + { 0x1EEF, 0x1EEF }, + { 0x1EF1, 0x1EF1 }, + { 0x1EF3, 0x1EF3 }, + { 0x1EF5, 0x1EF5 }, + { 0x1EF7, 0x1EF7 }, + { 0x1EF9, 0x1EF9 }, + { 0x1EFB, 0x1EFB }, + { 0x1EFD, 0x1EFD }, + { 0x1EFF, 0x1F07 }, + { 0x1F10, 0x1F15 }, + { 0x1F20, 0x1F27 }, + { 0x1F30, 0x1F37 }, + { 0x1F40, 0x1F45 }, + { 0x1F51, 0x1F51 }, + { 0x1F53, 0x1F53 }, + { 0x1F55, 0x1F55 }, + { 0x1F57, 0x1F57 }, + { 0x1F60, 0x1F67 }, + { 0x1F70, 0x1F7D }, + { 0x1F80, 0x1F87 }, + { 0x1F90, 0x1F97 }, + { 0x1FA0, 0x1FA7 }, + { 0x1FB0, 0x1FB1 }, + { 0x1FB3, 0x1FB3 }, + { 0x1FBE, 0x1FBE }, + { 0x1FC3, 0x1FC3 }, + { 0x1FD0, 0x1FD1 }, + { 0x1FE0, 0x1FE1 }, + { 0x1FE5, 0x1FE5 }, + { 0x1FF3, 0x1FF3 }, + { 0x214E, 0x214E }, + { 0x2170, 0x217F }, + { 0x2184, 0x2184 }, + { 0x24D0, 0x24E9 }, + { 0x2C30, 0x2C5E }, + { 0x2C61, 0x2C61 }, + { 0x2C65, 0x2C66 }, + { 0x2C68, 0x2C68 }, + { 0x2C6A, 0x2C6A }, + { 0x2C6C, 0x2C6C }, + { 0x2C73, 0x2C73 }, + { 0x2C76, 0x2C76 }, + { 0x2C81, 0x2C81 }, + { 0x2C83, 0x2C83 }, + { 0x2C85, 0x2C85 }, + { 0x2C87, 0x2C87 }, + { 0x2C89, 0x2C89 }, + { 0x2C8B, 0x2C8B }, + { 0x2C8D, 0x2C8D }, + { 0x2C8F, 0x2C8F }, + { 0x2C91, 0x2C91 }, + { 0x2C93, 0x2C93 }, + { 0x2C95, 0x2C95 }, + { 0x2C97, 0x2C97 }, + { 0x2C99, 0x2C99 }, + { 0x2C9B, 0x2C9B }, + { 0x2C9D, 0x2C9D }, + { 0x2C9F, 0x2C9F }, + { 0x2CA1, 0x2CA1 }, + { 0x2CA3, 0x2CA3 }, + { 0x2CA5, 0x2CA5 }, + { 0x2CA7, 0x2CA7 }, + { 0x2CA9, 0x2CA9 }, + { 0x2CAB, 0x2CAB }, + { 0x2CAD, 0x2CAD }, + { 0x2CAF, 0x2CAF }, + { 0x2CB1, 0x2CB1 }, + { 0x2CB3, 0x2CB3 }, + { 0x2CB5, 0x2CB5 }, + { 0x2CB7, 0x2CB7 }, + { 0x2CB9, 0x2CB9 }, + { 0x2CBB, 0x2CBB }, + { 0x2CBD, 0x2CBD }, + { 0x2CBF, 0x2CBF }, + { 0x2CC1, 0x2CC1 }, + { 0x2CC3, 0x2CC3 }, + { 0x2CC5, 0x2CC5 }, + { 0x2CC7, 0x2CC7 }, + { 0x2CC9, 0x2CC9 }, + { 0x2CCB, 0x2CCB }, + { 0x2CCD, 0x2CCD }, + { 0x2CCF, 0x2CCF }, + { 0x2CD1, 0x2CD1 }, + { 0x2CD3, 0x2CD3 }, + { 0x2CD5, 0x2CD5 }, + { 0x2CD7, 0x2CD7 }, + { 0x2CD9, 0x2CD9 }, + { 0x2CDB, 0x2CDB }, + { 0x2CDD, 0x2CDD }, + { 0x2CDF, 0x2CDF }, + { 0x2CE1, 0x2CE1 }, + { 0x2CE3, 0x2CE3 }, + { 0x2D00, 0x2D25 }, + { 0xA641, 0xA641 }, + { 0xA643, 0xA643 }, + { 0xA645, 0xA645 }, + { 0xA647, 0xA647 }, + { 0xA649, 0xA649 }, + { 0xA64B, 0xA64B }, + { 0xA64D, 0xA64D }, + { 0xA64F, 0xA64F }, + { 0xA651, 0xA651 }, + { 0xA653, 0xA653 }, + { 0xA655, 0xA655 }, + { 0xA657, 0xA657 }, + { 0xA659, 0xA659 }, + { 0xA65B, 0xA65B }, + { 0xA65D, 0xA65D }, + { 0xA65F, 0xA65F }, + { 0xA663, 0xA663 }, + { 0xA665, 0xA665 }, + { 0xA667, 0xA667 }, + { 0xA669, 0xA669 }, + { 0xA66B, 0xA66B }, + { 0xA66D, 0xA66D }, + { 0xA681, 0xA681 }, + { 0xA683, 0xA683 }, + { 0xA685, 0xA685 }, + { 0xA687, 0xA687 }, + { 0xA689, 0xA689 }, + { 0xA68B, 0xA68B }, + { 0xA68D, 0xA68D }, + { 0xA68F, 0xA68F }, + { 0xA691, 0xA691 }, + { 0xA693, 0xA693 }, + { 0xA695, 0xA695 }, + { 0xA697, 0xA697 }, + { 0xA723, 0xA723 }, + { 0xA725, 0xA725 }, + { 0xA727, 0xA727 }, + { 0xA729, 0xA729 }, + { 0xA72B, 0xA72B }, + { 0xA72D, 0xA72D }, + { 0xA72F, 0xA72F }, + { 0xA733, 0xA733 }, + { 0xA735, 0xA735 }, + { 0xA737, 0xA737 }, + { 0xA739, 0xA739 }, + { 0xA73B, 0xA73B }, + { 0xA73D, 0xA73D }, + { 0xA73F, 0xA73F }, + { 0xA741, 0xA741 }, + { 0xA743, 0xA743 }, + { 0xA745, 0xA745 }, + { 0xA747, 0xA747 }, + { 0xA749, 0xA749 }, + { 0xA74B, 0xA74B }, + { 0xA74D, 0xA74D }, + { 0xA74F, 0xA74F }, + { 0xA751, 0xA751 }, + { 0xA753, 0xA753 }, + { 0xA755, 0xA755 }, + { 0xA757, 0xA757 }, + { 0xA759, 0xA759 }, + { 0xA75B, 0xA75B }, + { 0xA75D, 0xA75D }, + { 0xA75F, 0xA75F }, + { 0xA761, 0xA761 }, + { 0xA763, 0xA763 }, + { 0xA765, 0xA765 }, + { 0xA767, 0xA767 }, + { 0xA769, 0xA769 }, + { 0xA76B, 0xA76B }, + { 0xA76D, 0xA76D }, + { 0xA76F, 0xA76F }, + { 0xA77A, 0xA77A }, + { 0xA77C, 0xA77C }, + { 0xA77F, 0xA77F }, + { 0xA781, 0xA781 }, + { 0xA783, 0xA783 }, + { 0xA785, 0xA785 }, + { 0xA787, 0xA787 }, + { 0xA78C, 0xA78C }, + { 0xFF41, 0xFF5A }, + { 0x10428, 0x1044F } + +#define PREDICATE(c) uc_is_lower (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-ctype_print.c b/tests/unictype/test-ctype_print.c new file mode 100644 index 00000000..7333d75e --- /dev/null +++ b/tests/unictype/test-ctype_print.c @@ -0,0 +1,469 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0020, 0x007E }, + { 0x00A0, 0x0377 }, + { 0x037A, 0x037E }, + { 0x0384, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0559, 0x055F }, + { 0x0561, 0x0587 }, + { 0x0589, 0x058A }, + { 0x0591, 0x05C7 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F4 }, + { 0x0600, 0x0603 }, + { 0x0606, 0x061B }, + { 0x061E, 0x061F }, + { 0x0621, 0x065E }, + { 0x0660, 0x070D }, + { 0x070F, 0x074A }, + { 0x074D, 0x07B1 }, + { 0x07C0, 0x07FA }, + { 0x0901, 0x0939 }, + { 0x093C, 0x094D }, + { 0x0950, 0x0954 }, + { 0x0958, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0981, 0x0983 }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BC, 0x09C4 }, + { 0x09C7, 0x09C8 }, + { 0x09CB, 0x09CE }, + { 0x09D7, 0x09D7 }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E3 }, + { 0x09E6, 0x09FA }, + { 0x0A01, 0x0A03 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A3C, 0x0A3C }, + { 0x0A3E, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, + { 0x0A51, 0x0A51 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A66, 0x0A75 }, + { 0x0A81, 0x0A83 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABC, 0x0AC5 }, + { 0x0AC7, 0x0AC9 }, + { 0x0ACB, 0x0ACD }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE3 }, + { 0x0AE6, 0x0AEF }, + { 0x0AF1, 0x0AF1 }, + { 0x0B01, 0x0B03 }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3C, 0x0B44 }, + { 0x0B47, 0x0B48 }, + { 0x0B4B, 0x0B4D }, + { 0x0B56, 0x0B57 }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B63 }, + { 0x0B66, 0x0B71 }, + { 0x0B82, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BBE, 0x0BC2 }, + { 0x0BC6, 0x0BC8 }, + { 0x0BCA, 0x0BCD }, + { 0x0BD0, 0x0BD0 }, + { 0x0BD7, 0x0BD7 }, + { 0x0BE6, 0x0BFA }, + { 0x0C01, 0x0C03 }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C44 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, + { 0x0C55, 0x0C56 }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C63 }, + { 0x0C66, 0x0C6F }, + { 0x0C78, 0x0C7F }, + { 0x0C82, 0x0C83 }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBC, 0x0CC4 }, + { 0x0CC6, 0x0CC8 }, + { 0x0CCA, 0x0CCD }, + { 0x0CD5, 0x0CD6 }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE3 }, + { 0x0CE6, 0x0CEF }, + { 0x0CF1, 0x0CF2 }, + { 0x0D02, 0x0D03 }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D44 }, + { 0x0D46, 0x0D48 }, + { 0x0D4A, 0x0D4D }, + { 0x0D57, 0x0D57 }, + { 0x0D60, 0x0D63 }, + { 0x0D66, 0x0D75 }, + { 0x0D79, 0x0D7F }, + { 0x0D82, 0x0D83 }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0DCA, 0x0DCA }, + { 0x0DCF, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0DD8, 0x0DDF }, + { 0x0DF2, 0x0DF4 }, + { 0x0E01, 0x0E3A }, + { 0x0E3F, 0x0E5B }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB9 }, + { 0x0EBB, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EC6, 0x0EC6 }, + { 0x0EC8, 0x0ECD }, + { 0x0ED0, 0x0ED9 }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F71, 0x0F8B }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x0FBE, 0x0FCC }, + { 0x0FCE, 0x0FD4 }, + { 0x1000, 0x1099 }, + { 0x109E, 0x10C5 }, + { 0x10D0, 0x10FC }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x135F, 0x137C }, + { 0x1380, 0x1399 }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x1676 }, + { 0x1680, 0x169C }, + { 0x16A0, 0x16F0 }, + { 0x1700, 0x170C }, + { 0x170E, 0x1714 }, + { 0x1720, 0x1736 }, + { 0x1740, 0x1753 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1772, 0x1773 }, + { 0x1780, 0x17DD }, + { 0x17E0, 0x17E9 }, + { 0x17F0, 0x17F9 }, + { 0x1800, 0x180E }, + { 0x1810, 0x1819 }, + { 0x1820, 0x1877 }, + { 0x1880, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1920, 0x192B }, + { 0x1930, 0x193B }, + { 0x1940, 0x1940 }, + { 0x1944, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19B0, 0x19C9 }, + { 0x19D0, 0x19D9 }, + { 0x19DE, 0x1A1B }, + { 0x1A1E, 0x1A1F }, + { 0x1B00, 0x1B4B }, + { 0x1B50, 0x1B7C }, + { 0x1B80, 0x1BAA }, + { 0x1BAE, 0x1BB9 }, + { 0x1C00, 0x1C37 }, + { 0x1C3B, 0x1C49 }, + { 0x1C4D, 0x1C7F }, + { 0x1D00, 0x1DE6 }, + { 0x1DFE, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FC4 }, + { 0x1FC6, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FDD, 0x1FEF }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFE }, + { 0x2000, 0x2027 }, + { 0x202A, 0x2064 }, + { 0x206A, 0x2071 }, + { 0x2074, 0x208E }, + { 0x2090, 0x2094 }, + { 0x20A0, 0x20B5 }, + { 0x20D0, 0x20F0 }, + { 0x2100, 0x214F }, + { 0x2153, 0x2188 }, + { 0x2190, 0x23E7 }, + { 0x2400, 0x2426 }, + { 0x2440, 0x244A }, + { 0x2460, 0x269D }, + { 0x26A0, 0x26BC }, + { 0x26C0, 0x26C3 }, + { 0x2701, 0x2704 }, + { 0x2706, 0x2709 }, + { 0x270C, 0x2727 }, + { 0x2729, 0x274B }, + { 0x274D, 0x274D }, + { 0x274F, 0x2752 }, + { 0x2756, 0x2756 }, + { 0x2758, 0x275E }, + { 0x2761, 0x2794 }, + { 0x2798, 0x27AF }, + { 0x27B1, 0x27BE }, + { 0x27C0, 0x27CA }, + { 0x27CC, 0x27CC }, + { 0x27D0, 0x2B4C }, + { 0x2B50, 0x2B54 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CEA }, + { 0x2CF9, 0x2D25 }, + { 0x2D30, 0x2D65 }, + { 0x2D6F, 0x2D6F }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x2DE0, 0x2E30 }, + { 0x2E80, 0x2E99 }, + { 0x2E9B, 0x2EF3 }, + { 0x2F00, 0x2FD5 }, + { 0x2FF0, 0x2FFB }, + { 0x3000, 0x303F }, + { 0x3041, 0x3096 }, + { 0x3099, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x3190, 0x31B7 }, + { 0x31C0, 0x31E3 }, + { 0x31F0, 0x321E }, + { 0x3220, 0x3243 }, + { 0x3250, 0x32FE }, + { 0x3300, 0x4DB5 }, + { 0x4DC0, 0x9FC3 }, + { 0xA000, 0xA48C }, + { 0xA490, 0xA4C6 }, + { 0xA500, 0xA62B }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA673 }, + { 0xA67C, 0xA697 }, + { 0xA700, 0xA78C }, + { 0xA7FB, 0xA82B }, + { 0xA840, 0xA877 }, + { 0xA880, 0xA8C4 }, + { 0xA8CE, 0xA8D9 }, + { 0xA900, 0xA953 }, + { 0xA95F, 0xA95F }, + { 0xAA00, 0xAA36 }, + { 0xAA40, 0xAA4D }, + { 0xAA50, 0xAA59 }, + { 0xAA5C, 0xAA5F }, + { 0xAC00, 0xD7A3 }, + { 0xE000, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFD3F }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDFD }, + { 0xFE00, 0xFE19 }, + { 0xFE20, 0xFE26 }, + { 0xFE30, 0xFE52 }, + { 0xFE54, 0xFE66 }, + { 0xFE68, 0xFE6B }, + { 0xFE70, 0xFE74 }, + { 0xFE76, 0xFEFC }, + { 0xFEFF, 0xFEFF }, + { 0xFF01, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0xFFE0, 0xFFE6 }, + { 0xFFE8, 0xFFEE }, + { 0xFFF9, 0xFFFD }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10100, 0x10102 }, + { 0x10107, 0x10133 }, + { 0x10137, 0x1018A }, + { 0x10190, 0x1019B }, + { 0x101D0, 0x101FD }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10320, 0x10323 }, + { 0x10330, 0x1034A }, + { 0x10380, 0x1039D }, + { 0x1039F, 0x103C3 }, + { 0x103C8, 0x103D5 }, + { 0x10400, 0x1049D }, + { 0x104A0, 0x104A9 }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10919 }, + { 0x1091F, 0x10939 }, + { 0x1093F, 0x1093F }, + { 0x10A00, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x10A38, 0x10A3A }, + { 0x10A3F, 0x10A47 }, + { 0x10A50, 0x10A58 }, + { 0x12000, 0x1236E }, + { 0x12400, 0x12462 }, + { 0x12470, 0x12473 }, + { 0x1D000, 0x1D0F5 }, + { 0x1D100, 0x1D126 }, + { 0x1D129, 0x1D1DD }, + { 0x1D200, 0x1D245 }, + { 0x1D300, 0x1D356 }, + { 0x1D360, 0x1D371 }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D7CB }, + { 0x1D7CE, 0x1D7FF }, + { 0x1F000, 0x1F02B }, + { 0x1F030, 0x1F093 }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D }, + { 0xE0001, 0xE0001 }, + { 0xE0020, 0xE007F }, + { 0xE0100, 0xE01EF }, + { 0xF0000, 0xFFFFD }, + { 0x100000, 0x10FFFD } + +#define PREDICATE(c) uc_is_print (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-ctype_punct.c b/tests/unictype/test-ctype_punct.c new file mode 100644 index 00000000..e9aa3f0b --- /dev/null +++ b/tests/unictype/test-ctype_punct.c @@ -0,0 +1,354 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0021, 0x002F }, + { 0x003A, 0x0040 }, + { 0x005B, 0x0060 }, + { 0x007B, 0x007E }, + { 0x00A0, 0x00A9 }, + { 0x00AB, 0x00B4 }, + { 0x00B6, 0x00B9 }, + { 0x00BB, 0x00BF }, + { 0x00D7, 0x00D7 }, + { 0x00F7, 0x00F7 }, + { 0x02C2, 0x02C5 }, + { 0x02D2, 0x02DF }, + { 0x02E5, 0x02EB }, + { 0x02ED, 0x02ED }, + { 0x02EF, 0x0344 }, + { 0x0346, 0x036F }, + { 0x0375, 0x0375 }, + { 0x037E, 0x037E }, + { 0x0384, 0x0385 }, + { 0x0387, 0x0387 }, + { 0x03F6, 0x03F6 }, + { 0x0482, 0x0489 }, + { 0x055A, 0x055F }, + { 0x0589, 0x058A }, + { 0x0591, 0x05C7 }, + { 0x05F3, 0x05F4 }, + { 0x0600, 0x0603 }, + { 0x0606, 0x061B }, + { 0x061E, 0x061F }, + { 0x064B, 0x065E }, + { 0x066A, 0x066D }, + { 0x0670, 0x0670 }, + { 0x06D4, 0x06D4 }, + { 0x06D6, 0x06E4 }, + { 0x06E7, 0x06ED }, + { 0x06FD, 0x06FE }, + { 0x0700, 0x070D }, + { 0x070F, 0x070F }, + { 0x0711, 0x0711 }, + { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, + { 0x07EB, 0x07F3 }, + { 0x07F6, 0x07F9 }, + { 0x0901, 0x0903 }, + { 0x093C, 0x093C }, + { 0x093E, 0x094D }, + { 0x0951, 0x0954 }, + { 0x0962, 0x0965 }, + { 0x0970, 0x0970 }, + { 0x0981, 0x0983 }, + { 0x09BC, 0x09BC }, + { 0x09BE, 0x09C4 }, + { 0x09C7, 0x09C8 }, + { 0x09CB, 0x09CD }, + { 0x09D7, 0x09D7 }, + { 0x09E2, 0x09E3 }, + { 0x09F2, 0x09FA }, + { 0x0A01, 0x0A03 }, + { 0x0A3C, 0x0A3C }, + { 0x0A3E, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, + { 0x0A51, 0x0A51 }, + { 0x0A70, 0x0A71 }, + { 0x0A75, 0x0A75 }, + { 0x0A81, 0x0A83 }, + { 0x0ABC, 0x0ABC }, + { 0x0ABE, 0x0AC5 }, + { 0x0AC7, 0x0AC9 }, + { 0x0ACB, 0x0ACD }, + { 0x0AE2, 0x0AE3 }, + { 0x0AF1, 0x0AF1 }, + { 0x0B01, 0x0B03 }, + { 0x0B3C, 0x0B3C }, + { 0x0B3E, 0x0B44 }, + { 0x0B47, 0x0B48 }, + { 0x0B4B, 0x0B4D }, + { 0x0B56, 0x0B57 }, + { 0x0B62, 0x0B63 }, + { 0x0B70, 0x0B70 }, + { 0x0B82, 0x0B82 }, + { 0x0BBE, 0x0BC2 }, + { 0x0BC6, 0x0BC8 }, + { 0x0BCA, 0x0BCD }, + { 0x0BD7, 0x0BD7 }, + { 0x0BF0, 0x0BFA }, + { 0x0C01, 0x0C03 }, + { 0x0C3E, 0x0C44 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, + { 0x0C55, 0x0C56 }, + { 0x0C62, 0x0C63 }, + { 0x0C78, 0x0C7F }, + { 0x0C82, 0x0C83 }, + { 0x0CBC, 0x0CBC }, + { 0x0CBE, 0x0CC4 }, + { 0x0CC6, 0x0CC8 }, + { 0x0CCA, 0x0CCD }, + { 0x0CD5, 0x0CD6 }, + { 0x0CE2, 0x0CE3 }, + { 0x0CF1, 0x0CF2 }, + { 0x0D02, 0x0D03 }, + { 0x0D3E, 0x0D44 }, + { 0x0D46, 0x0D48 }, + { 0x0D4A, 0x0D4D }, + { 0x0D57, 0x0D57 }, + { 0x0D62, 0x0D63 }, + { 0x0D70, 0x0D75 }, + { 0x0D79, 0x0D79 }, + { 0x0D82, 0x0D83 }, + { 0x0DCA, 0x0DCA }, + { 0x0DCF, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0DD8, 0x0DDF }, + { 0x0DF2, 0x0DF4 }, + { 0x0E2F, 0x0E2F }, + { 0x0E3F, 0x0E3F }, + { 0x0E46, 0x0E46 }, + { 0x0E4F, 0x0E4F }, + { 0x0E5A, 0x0E5B }, + { 0x0EB1, 0x0EB1 }, + { 0x0EB4, 0x0EB9 }, + { 0x0EBB, 0x0EBC }, + { 0x0EC8, 0x0ECD }, + { 0x0F01, 0x0F1F }, + { 0x0F2A, 0x0F3F }, + { 0x0F71, 0x0F87 }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x0FBE, 0x0FCC }, + { 0x0FCE, 0x0FD4 }, + { 0x102B, 0x103E }, + { 0x104A, 0x104F }, + { 0x1056, 0x1059 }, + { 0x105E, 0x1060 }, + { 0x1062, 0x1064 }, + { 0x1067, 0x106D }, + { 0x1071, 0x1074 }, + { 0x1082, 0x108D }, + { 0x108F, 0x108F }, + { 0x109E, 0x109F }, + { 0x10FB, 0x10FB }, + { 0x135F, 0x137C }, + { 0x1390, 0x1399 }, + { 0x166D, 0x166E }, + { 0x169B, 0x169C }, + { 0x16EB, 0x16ED }, + { 0x1712, 0x1714 }, + { 0x1732, 0x1736 }, + { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, + { 0x17B4, 0x17D6 }, + { 0x17D8, 0x17DB }, + { 0x17DD, 0x17DD }, + { 0x17F0, 0x17F9 }, + { 0x1800, 0x180D }, + { 0x18A9, 0x18A9 }, + { 0x1920, 0x192B }, + { 0x1930, 0x193B }, + { 0x1940, 0x1940 }, + { 0x1944, 0x1945 }, + { 0x19B0, 0x19C0 }, + { 0x19C8, 0x19C9 }, + { 0x19DE, 0x19FF }, + { 0x1A17, 0x1A1B }, + { 0x1A1E, 0x1A1F }, + { 0x1B00, 0x1B04 }, + { 0x1B34, 0x1B44 }, + { 0x1B5A, 0x1B7C }, + { 0x1B80, 0x1B82 }, + { 0x1BA1, 0x1BAA }, + { 0x1C24, 0x1C37 }, + { 0x1C3B, 0x1C3F }, + { 0x1C7E, 0x1C7F }, + { 0x1DC0, 0x1DE6 }, + { 0x1DFE, 0x1DFF }, + { 0x1FBD, 0x1FBD }, + { 0x1FBF, 0x1FC1 }, + { 0x1FCD, 0x1FCF }, + { 0x1FDD, 0x1FDF }, + { 0x1FED, 0x1FEF }, + { 0x1FFD, 0x1FFE }, + { 0x2007, 0x2007 }, + { 0x200B, 0x2027 }, + { 0x202A, 0x205E }, + { 0x2060, 0x2064 }, + { 0x206A, 0x2070 }, + { 0x2074, 0x207E }, + { 0x2080, 0x208E }, + { 0x20A0, 0x20B5 }, + { 0x20D0, 0x20F0 }, + { 0x2100, 0x2101 }, + { 0x2103, 0x2106 }, + { 0x2108, 0x2109 }, + { 0x2114, 0x2114 }, + { 0x2116, 0x2118 }, + { 0x211E, 0x2123 }, + { 0x2125, 0x2125 }, + { 0x2127, 0x2127 }, + { 0x212E, 0x212E }, + { 0x213A, 0x213B }, + { 0x2140, 0x2144 }, + { 0x214A, 0x214D }, + { 0x214F, 0x214F }, + { 0x2153, 0x215F }, + { 0x2190, 0x23E7 }, + { 0x2400, 0x2426 }, + { 0x2440, 0x244A }, + { 0x2460, 0x249B }, + { 0x24EA, 0x269D }, + { 0x26A0, 0x26BC }, + { 0x26C0, 0x26C3 }, + { 0x2701, 0x2704 }, + { 0x2706, 0x2709 }, + { 0x270C, 0x2727 }, + { 0x2729, 0x274B }, + { 0x274D, 0x274D }, + { 0x274F, 0x2752 }, + { 0x2756, 0x2756 }, + { 0x2758, 0x275E }, + { 0x2761, 0x2794 }, + { 0x2798, 0x27AF }, + { 0x27B1, 0x27BE }, + { 0x27C0, 0x27CA }, + { 0x27CC, 0x27CC }, + { 0x27D0, 0x2B4C }, + { 0x2B50, 0x2B54 }, + { 0x2CE5, 0x2CEA }, + { 0x2CF9, 0x2CFF }, + { 0x2DE0, 0x2E2E }, + { 0x2E30, 0x2E30 }, + { 0x2E80, 0x2E99 }, + { 0x2E9B, 0x2EF3 }, + { 0x2F00, 0x2FD5 }, + { 0x2FF0, 0x2FFB }, + { 0x3001, 0x3004 }, + { 0x3008, 0x3020 }, + { 0x302A, 0x3030 }, + { 0x3036, 0x3037 }, + { 0x303D, 0x303F }, + { 0x3099, 0x309C }, + { 0x30A0, 0x30A0 }, + { 0x30FB, 0x30FB }, + { 0x3190, 0x319F }, + { 0x31C0, 0x31E3 }, + { 0x3200, 0x321E }, + { 0x3220, 0x3243 }, + { 0x3250, 0x32FE }, + { 0x3300, 0x33FF }, + { 0x4DC0, 0x4DFF }, + { 0xA490, 0xA4C6 }, + { 0xA60D, 0xA60F }, + { 0xA66F, 0xA673 }, + { 0xA67C, 0xA67E }, + { 0xA700, 0xA716 }, + { 0xA720, 0xA721 }, + { 0xA789, 0xA78A }, + { 0xA802, 0xA802 }, + { 0xA806, 0xA806 }, + { 0xA80B, 0xA80B }, + { 0xA823, 0xA82B }, + { 0xA874, 0xA877 }, + { 0xA880, 0xA881 }, + { 0xA8B4, 0xA8C4 }, + { 0xA8CE, 0xA8CF }, + { 0xA926, 0xA92F }, + { 0xA947, 0xA953 }, + { 0xA95F, 0xA95F }, + { 0xAA29, 0xAA36 }, + { 0xAA43, 0xAA43 }, + { 0xAA4C, 0xAA4D }, + { 0xAA5C, 0xAA5F }, + { 0xE000, 0xF8FF }, + { 0xFB1E, 0xFB1E }, + { 0xFB29, 0xFB29 }, + { 0xFD3E, 0xFD3F }, + { 0xFDFC, 0xFDFD }, + { 0xFE00, 0xFE19 }, + { 0xFE20, 0xFE26 }, + { 0xFE30, 0xFE52 }, + { 0xFE54, 0xFE66 }, + { 0xFE68, 0xFE6B }, + { 0xFEFF, 0xFEFF }, + { 0xFF01, 0xFF0F }, + { 0xFF1A, 0xFF20 }, + { 0xFF3B, 0xFF40 }, + { 0xFF5B, 0xFF65 }, + { 0xFFE0, 0xFFE6 }, + { 0xFFE8, 0xFFEE }, + { 0xFFF9, 0xFFFD }, + { 0x10100, 0x10102 }, + { 0x10107, 0x10133 }, + { 0x10137, 0x1013F }, + { 0x10175, 0x1018A }, + { 0x10190, 0x1019B }, + { 0x101D0, 0x101FD }, + { 0x10320, 0x10323 }, + { 0x1039F, 0x1039F }, + { 0x103D0, 0x103D0 }, + { 0x10916, 0x10919 }, + { 0x1091F, 0x1091F }, + { 0x1093F, 0x1093F }, + { 0x10A01, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A0F }, + { 0x10A38, 0x10A3A }, + { 0x10A3F, 0x10A47 }, + { 0x10A50, 0x10A58 }, + { 0x12470, 0x12473 }, + { 0x1D000, 0x1D0F5 }, + { 0x1D100, 0x1D126 }, + { 0x1D129, 0x1D1DD }, + { 0x1D200, 0x1D245 }, + { 0x1D300, 0x1D356 }, + { 0x1D360, 0x1D371 }, + { 0x1D6C1, 0x1D6C1 }, + { 0x1D6DB, 0x1D6DB }, + { 0x1D6FB, 0x1D6FB }, + { 0x1D715, 0x1D715 }, + { 0x1D735, 0x1D735 }, + { 0x1D74F, 0x1D74F }, + { 0x1D76F, 0x1D76F }, + { 0x1D789, 0x1D789 }, + { 0x1D7A9, 0x1D7A9 }, + { 0x1D7C3, 0x1D7C3 }, + { 0x1F000, 0x1F02B }, + { 0x1F030, 0x1F093 }, + { 0xE0001, 0xE0001 }, + { 0xE0020, 0xE007F }, + { 0xE0100, 0xE01EF }, + { 0xF0000, 0xFFFFD }, + { 0x100000, 0x10FFFD } + +#define PREDICATE(c) uc_is_punct (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-ctype_space.c b/tests/unictype/test-ctype_space.c new file mode 100644 index 00000000..c02fa963 --- /dev/null +++ b/tests/unictype/test-ctype_space.c @@ -0,0 +1,31 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0009, 0x000D }, + { 0x0020, 0x0020 }, + { 0x1680, 0x1680 }, + { 0x180E, 0x180E }, + { 0x2000, 0x2006 }, + { 0x2008, 0x200A }, + { 0x2028, 0x2029 }, + { 0x205F, 0x205F }, + { 0x3000, 0x3000 } + +#define PREDICATE(c) uc_is_space (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-ctype_upper.c b/tests/unictype/test-ctype_upper.c new file mode 100644 index 00000000..d7f0c035 --- /dev/null +++ b/tests/unictype/test-ctype_upper.c @@ -0,0 +1,576 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0041, 0x005A }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00DE }, + { 0x0100, 0x0100 }, + { 0x0102, 0x0102 }, + { 0x0104, 0x0104 }, + { 0x0106, 0x0106 }, + { 0x0108, 0x0108 }, + { 0x010A, 0x010A }, + { 0x010C, 0x010C }, + { 0x010E, 0x010E }, + { 0x0110, 0x0110 }, + { 0x0112, 0x0112 }, + { 0x0114, 0x0114 }, + { 0x0116, 0x0116 }, + { 0x0118, 0x0118 }, + { 0x011A, 0x011A }, + { 0x011C, 0x011C }, + { 0x011E, 0x011E }, + { 0x0120, 0x0120 }, + { 0x0122, 0x0122 }, + { 0x0124, 0x0124 }, + { 0x0126, 0x0126 }, + { 0x0128, 0x0128 }, + { 0x012A, 0x012A }, + { 0x012C, 0x012C }, + { 0x012E, 0x012E }, + { 0x0130, 0x0130 }, + { 0x0132, 0x0132 }, + { 0x0134, 0x0134 }, + { 0x0136, 0x0136 }, + { 0x0139, 0x0139 }, + { 0x013B, 0x013B }, + { 0x013D, 0x013D }, + { 0x013F, 0x013F }, + { 0x0141, 0x0141 }, + { 0x0143, 0x0143 }, + { 0x0145, 0x0145 }, + { 0x0147, 0x0147 }, + { 0x014A, 0x014A }, + { 0x014C, 0x014C }, + { 0x014E, 0x014E }, + { 0x0150, 0x0150 }, + { 0x0152, 0x0152 }, + { 0x0154, 0x0154 }, + { 0x0156, 0x0156 }, + { 0x0158, 0x0158 }, + { 0x015A, 0x015A }, + { 0x015C, 0x015C }, + { 0x015E, 0x015E }, + { 0x0160, 0x0160 }, + { 0x0162, 0x0162 }, + { 0x0164, 0x0164 }, + { 0x0166, 0x0166 }, + { 0x0168, 0x0168 }, + { 0x016A, 0x016A }, + { 0x016C, 0x016C }, + { 0x016E, 0x016E }, + { 0x0170, 0x0170 }, + { 0x0172, 0x0172 }, + { 0x0174, 0x0174 }, + { 0x0176, 0x0176 }, + { 0x0178, 0x0179 }, + { 0x017B, 0x017B }, + { 0x017D, 0x017D }, + { 0x0181, 0x0182 }, + { 0x0184, 0x0184 }, + { 0x0186, 0x0187 }, + { 0x0189, 0x018B }, + { 0x018E, 0x0191 }, + { 0x0193, 0x0194 }, + { 0x0196, 0x0198 }, + { 0x019C, 0x019D }, + { 0x019F, 0x01A0 }, + { 0x01A2, 0x01A2 }, + { 0x01A4, 0x01A4 }, + { 0x01A6, 0x01A7 }, + { 0x01A9, 0x01A9 }, + { 0x01AC, 0x01AC }, + { 0x01AE, 0x01AF }, + { 0x01B1, 0x01B3 }, + { 0x01B5, 0x01B5 }, + { 0x01B7, 0x01B8 }, + { 0x01BC, 0x01BC }, + { 0x01C4, 0x01C5 }, + { 0x01C7, 0x01C8 }, + { 0x01CA, 0x01CB }, + { 0x01CD, 0x01CD }, + { 0x01CF, 0x01CF }, + { 0x01D1, 0x01D1 }, + { 0x01D3, 0x01D3 }, + { 0x01D5, 0x01D5 }, + { 0x01D7, 0x01D7 }, + { 0x01D9, 0x01D9 }, + { 0x01DB, 0x01DB }, + { 0x01DE, 0x01DE }, + { 0x01E0, 0x01E0 }, + { 0x01E2, 0x01E2 }, + { 0x01E4, 0x01E4 }, + { 0x01E6, 0x01E6 }, + { 0x01E8, 0x01E8 }, + { 0x01EA, 0x01EA }, + { 0x01EC, 0x01EC }, + { 0x01EE, 0x01EE }, + { 0x01F1, 0x01F2 }, + { 0x01F4, 0x01F4 }, + { 0x01F6, 0x01F8 }, + { 0x01FA, 0x01FA }, + { 0x01FC, 0x01FC }, + { 0x01FE, 0x01FE }, + { 0x0200, 0x0200 }, + { 0x0202, 0x0202 }, + { 0x0204, 0x0204 }, + { 0x0206, 0x0206 }, + { 0x0208, 0x0208 }, + { 0x020A, 0x020A }, + { 0x020C, 0x020C }, + { 0x020E, 0x020E }, + { 0x0210, 0x0210 }, + { 0x0212, 0x0212 }, + { 0x0214, 0x0214 }, + { 0x0216, 0x0216 }, + { 0x0218, 0x0218 }, + { 0x021A, 0x021A }, + { 0x021C, 0x021C }, + { 0x021E, 0x021E }, + { 0x0220, 0x0220 }, + { 0x0222, 0x0222 }, + { 0x0224, 0x0224 }, + { 0x0226, 0x0226 }, + { 0x0228, 0x0228 }, + { 0x022A, 0x022A }, + { 0x022C, 0x022C }, + { 0x022E, 0x022E }, + { 0x0230, 0x0230 }, + { 0x0232, 0x0232 }, + { 0x023A, 0x023B }, + { 0x023D, 0x023E }, + { 0x0241, 0x0241 }, + { 0x0243, 0x0246 }, + { 0x0248, 0x0248 }, + { 0x024A, 0x024A }, + { 0x024C, 0x024C }, + { 0x024E, 0x024E }, + { 0x0370, 0x0370 }, + { 0x0372, 0x0372 }, + { 0x0376, 0x0376 }, + { 0x0386, 0x0386 }, + { 0x0388, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x038F }, + { 0x0391, 0x03A1 }, + { 0x03A3, 0x03AB }, + { 0x03CF, 0x03CF }, + { 0x03D8, 0x03D8 }, + { 0x03DA, 0x03DA }, + { 0x03DC, 0x03DC }, + { 0x03DE, 0x03DE }, + { 0x03E0, 0x03E0 }, + { 0x03E2, 0x03E2 }, + { 0x03E4, 0x03E4 }, + { 0x03E6, 0x03E6 }, + { 0x03E8, 0x03E8 }, + { 0x03EA, 0x03EA }, + { 0x03EC, 0x03EC }, + { 0x03EE, 0x03EE }, + { 0x03F4, 0x03F4 }, + { 0x03F7, 0x03F7 }, + { 0x03F9, 0x03FA }, + { 0x03FD, 0x042F }, + { 0x0460, 0x0460 }, + { 0x0462, 0x0462 }, + { 0x0464, 0x0464 }, + { 0x0466, 0x0466 }, + { 0x0468, 0x0468 }, + { 0x046A, 0x046A }, + { 0x046C, 0x046C }, + { 0x046E, 0x046E }, + { 0x0470, 0x0470 }, + { 0x0472, 0x0472 }, + { 0x0474, 0x0474 }, + { 0x0476, 0x0476 }, + { 0x0478, 0x0478 }, + { 0x047A, 0x047A }, + { 0x047C, 0x047C }, + { 0x047E, 0x047E }, + { 0x0480, 0x0480 }, + { 0x048A, 0x048A }, + { 0x048C, 0x048C }, + { 0x048E, 0x048E }, + { 0x0490, 0x0490 }, + { 0x0492, 0x0492 }, + { 0x0494, 0x0494 }, + { 0x0496, 0x0496 }, + { 0x0498, 0x0498 }, + { 0x049A, 0x049A }, + { 0x049C, 0x049C }, + { 0x049E, 0x049E }, + { 0x04A0, 0x04A0 }, + { 0x04A2, 0x04A2 }, + { 0x04A4, 0x04A4 }, + { 0x04A6, 0x04A6 }, + { 0x04A8, 0x04A8 }, + { 0x04AA, 0x04AA }, + { 0x04AC, 0x04AC }, + { 0x04AE, 0x04AE }, + { 0x04B0, 0x04B0 }, + { 0x04B2, 0x04B2 }, + { 0x04B4, 0x04B4 }, + { 0x04B6, 0x04B6 }, + { 0x04B8, 0x04B8 }, + { 0x04BA, 0x04BA }, + { 0x04BC, 0x04BC }, + { 0x04BE, 0x04BE }, + { 0x04C0, 0x04C1 }, + { 0x04C3, 0x04C3 }, + { 0x04C5, 0x04C5 }, + { 0x04C7, 0x04C7 }, + { 0x04C9, 0x04C9 }, + { 0x04CB, 0x04CB }, + { 0x04CD, 0x04CD }, + { 0x04D0, 0x04D0 }, + { 0x04D2, 0x04D2 }, + { 0x04D4, 0x04D4 }, + { 0x04D6, 0x04D6 }, + { 0x04D8, 0x04D8 }, + { 0x04DA, 0x04DA }, + { 0x04DC, 0x04DC }, + { 0x04DE, 0x04DE }, + { 0x04E0, 0x04E0 }, + { 0x04E2, 0x04E2 }, + { 0x04E4, 0x04E4 }, + { 0x04E6, 0x04E6 }, + { 0x04E8, 0x04E8 }, + { 0x04EA, 0x04EA }, + { 0x04EC, 0x04EC }, + { 0x04EE, 0x04EE }, + { 0x04F0, 0x04F0 }, + { 0x04F2, 0x04F2 }, + { 0x04F4, 0x04F4 }, + { 0x04F6, 0x04F6 }, + { 0x04F8, 0x04F8 }, + { 0x04FA, 0x04FA }, + { 0x04FC, 0x04FC }, + { 0x04FE, 0x04FE }, + { 0x0500, 0x0500 }, + { 0x0502, 0x0502 }, + { 0x0504, 0x0504 }, + { 0x0506, 0x0506 }, + { 0x0508, 0x0508 }, + { 0x050A, 0x050A }, + { 0x050C, 0x050C }, + { 0x050E, 0x050E }, + { 0x0510, 0x0510 }, + { 0x0512, 0x0512 }, + { 0x0514, 0x0514 }, + { 0x0516, 0x0516 }, + { 0x0518, 0x0518 }, + { 0x051A, 0x051A }, + { 0x051C, 0x051C }, + { 0x051E, 0x051E }, + { 0x0520, 0x0520 }, + { 0x0522, 0x0522 }, + { 0x0531, 0x0556 }, + { 0x10A0, 0x10C5 }, + { 0x1E00, 0x1E00 }, + { 0x1E02, 0x1E02 }, + { 0x1E04, 0x1E04 }, + { 0x1E06, 0x1E06 }, + { 0x1E08, 0x1E08 }, + { 0x1E0A, 0x1E0A }, + { 0x1E0C, 0x1E0C }, + { 0x1E0E, 0x1E0E }, + { 0x1E10, 0x1E10 }, + { 0x1E12, 0x1E12 }, + { 0x1E14, 0x1E14 }, + { 0x1E16, 0x1E16 }, + { 0x1E18, 0x1E18 }, + { 0x1E1A, 0x1E1A }, + { 0x1E1C, 0x1E1C }, + { 0x1E1E, 0x1E1E }, + { 0x1E20, 0x1E20 }, + { 0x1E22, 0x1E22 }, + { 0x1E24, 0x1E24 }, + { 0x1E26, 0x1E26 }, + { 0x1E28, 0x1E28 }, + { 0x1E2A, 0x1E2A }, + { 0x1E2C, 0x1E2C }, + { 0x1E2E, 0x1E2E }, + { 0x1E30, 0x1E30 }, + { 0x1E32, 0x1E32 }, + { 0x1E34, 0x1E34 }, + { 0x1E36, 0x1E36 }, + { 0x1E38, 0x1E38 }, + { 0x1E3A, 0x1E3A }, + { 0x1E3C, 0x1E3C }, + { 0x1E3E, 0x1E3E }, + { 0x1E40, 0x1E40 }, + { 0x1E42, 0x1E42 }, + { 0x1E44, 0x1E44 }, + { 0x1E46, 0x1E46 }, + { 0x1E48, 0x1E48 }, + { 0x1E4A, 0x1E4A }, + { 0x1E4C, 0x1E4C }, + { 0x1E4E, 0x1E4E }, + { 0x1E50, 0x1E50 }, + { 0x1E52, 0x1E52 }, + { 0x1E54, 0x1E54 }, + { 0x1E56, 0x1E56 }, + { 0x1E58, 0x1E58 }, + { 0x1E5A, 0x1E5A }, + { 0x1E5C, 0x1E5C }, + { 0x1E5E, 0x1E5E }, + { 0x1E60, 0x1E60 }, + { 0x1E62, 0x1E62 }, + { 0x1E64, 0x1E64 }, + { 0x1E66, 0x1E66 }, + { 0x1E68, 0x1E68 }, + { 0x1E6A, 0x1E6A }, + { 0x1E6C, 0x1E6C }, + { 0x1E6E, 0x1E6E }, + { 0x1E70, 0x1E70 }, + { 0x1E72, 0x1E72 }, + { 0x1E74, 0x1E74 }, + { 0x1E76, 0x1E76 }, + { 0x1E78, 0x1E78 }, + { 0x1E7A, 0x1E7A }, + { 0x1E7C, 0x1E7C }, + { 0x1E7E, 0x1E7E }, + { 0x1E80, 0x1E80 }, + { 0x1E82, 0x1E82 }, + { 0x1E84, 0x1E84 }, + { 0x1E86, 0x1E86 }, + { 0x1E88, 0x1E88 }, + { 0x1E8A, 0x1E8A }, + { 0x1E8C, 0x1E8C }, + { 0x1E8E, 0x1E8E }, + { 0x1E90, 0x1E90 }, + { 0x1E92, 0x1E92 }, + { 0x1E94, 0x1E94 }, + { 0x1E9E, 0x1E9E }, + { 0x1EA0, 0x1EA0 }, + { 0x1EA2, 0x1EA2 }, + { 0x1EA4, 0x1EA4 }, + { 0x1EA6, 0x1EA6 }, + { 0x1EA8, 0x1EA8 }, + { 0x1EAA, 0x1EAA }, + { 0x1EAC, 0x1EAC }, + { 0x1EAE, 0x1EAE }, + { 0x1EB0, 0x1EB0 }, + { 0x1EB2, 0x1EB2 }, + { 0x1EB4, 0x1EB4 }, + { 0x1EB6, 0x1EB6 }, + { 0x1EB8, 0x1EB8 }, + { 0x1EBA, 0x1EBA }, + { 0x1EBC, 0x1EBC }, + { 0x1EBE, 0x1EBE }, + { 0x1EC0, 0x1EC0 }, + { 0x1EC2, 0x1EC2 }, + { 0x1EC4, 0x1EC4 }, + { 0x1EC6, 0x1EC6 }, + { 0x1EC8, 0x1EC8 }, + { 0x1ECA, 0x1ECA }, + { 0x1ECC, 0x1ECC }, + { 0x1ECE, 0x1ECE }, + { 0x1ED0, 0x1ED0 }, + { 0x1ED2, 0x1ED2 }, + { 0x1ED4, 0x1ED4 }, + { 0x1ED6, 0x1ED6 }, + { 0x1ED8, 0x1ED8 }, + { 0x1EDA, 0x1EDA }, + { 0x1EDC, 0x1EDC }, + { 0x1EDE, 0x1EDE }, + { 0x1EE0, 0x1EE0 }, + { 0x1EE2, 0x1EE2 }, + { 0x1EE4, 0x1EE4 }, + { 0x1EE6, 0x1EE6 }, + { 0x1EE8, 0x1EE8 }, + { 0x1EEA, 0x1EEA }, + { 0x1EEC, 0x1EEC }, + { 0x1EEE, 0x1EEE }, + { 0x1EF0, 0x1EF0 }, + { 0x1EF2, 0x1EF2 }, + { 0x1EF4, 0x1EF4 }, + { 0x1EF6, 0x1EF6 }, + { 0x1EF8, 0x1EF8 }, + { 0x1EFA, 0x1EFA }, + { 0x1EFC, 0x1EFC }, + { 0x1EFE, 0x1EFE }, + { 0x1F08, 0x1F0F }, + { 0x1F18, 0x1F1D }, + { 0x1F28, 0x1F2F }, + { 0x1F38, 0x1F3F }, + { 0x1F48, 0x1F4D }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F5F }, + { 0x1F68, 0x1F6F }, + { 0x1F88, 0x1F8F }, + { 0x1F98, 0x1F9F }, + { 0x1FA8, 0x1FAF }, + { 0x1FB8, 0x1FBC }, + { 0x1FC8, 0x1FCC }, + { 0x1FD8, 0x1FDB }, + { 0x1FE8, 0x1FEC }, + { 0x1FF8, 0x1FFC }, + { 0x2126, 0x2126 }, + { 0x212A, 0x212B }, + { 0x2132, 0x2132 }, + { 0x2160, 0x216F }, + { 0x2183, 0x2183 }, + { 0x24B6, 0x24CF }, + { 0x2C00, 0x2C2E }, + { 0x2C60, 0x2C60 }, + { 0x2C62, 0x2C64 }, + { 0x2C67, 0x2C67 }, + { 0x2C69, 0x2C69 }, + { 0x2C6B, 0x2C6B }, + { 0x2C6D, 0x2C6F }, + { 0x2C72, 0x2C72 }, + { 0x2C75, 0x2C75 }, + { 0x2C80, 0x2C80 }, + { 0x2C82, 0x2C82 }, + { 0x2C84, 0x2C84 }, + { 0x2C86, 0x2C86 }, + { 0x2C88, 0x2C88 }, + { 0x2C8A, 0x2C8A }, + { 0x2C8C, 0x2C8C }, + { 0x2C8E, 0x2C8E }, + { 0x2C90, 0x2C90 }, + { 0x2C92, 0x2C92 }, + { 0x2C94, 0x2C94 }, + { 0x2C96, 0x2C96 }, + { 0x2C98, 0x2C98 }, + { 0x2C9A, 0x2C9A }, + { 0x2C9C, 0x2C9C }, + { 0x2C9E, 0x2C9E }, + { 0x2CA0, 0x2CA0 }, + { 0x2CA2, 0x2CA2 }, + { 0x2CA4, 0x2CA4 }, + { 0x2CA6, 0x2CA6 }, + { 0x2CA8, 0x2CA8 }, + { 0x2CAA, 0x2CAA }, + { 0x2CAC, 0x2CAC }, + { 0x2CAE, 0x2CAE }, + { 0x2CB0, 0x2CB0 }, + { 0x2CB2, 0x2CB2 }, + { 0x2CB4, 0x2CB4 }, + { 0x2CB6, 0x2CB6 }, + { 0x2CB8, 0x2CB8 }, + { 0x2CBA, 0x2CBA }, + { 0x2CBC, 0x2CBC }, + { 0x2CBE, 0x2CBE }, + { 0x2CC0, 0x2CC0 }, + { 0x2CC2, 0x2CC2 }, + { 0x2CC4, 0x2CC4 }, + { 0x2CC6, 0x2CC6 }, + { 0x2CC8, 0x2CC8 }, + { 0x2CCA, 0x2CCA }, + { 0x2CCC, 0x2CCC }, + { 0x2CCE, 0x2CCE }, + { 0x2CD0, 0x2CD0 }, + { 0x2CD2, 0x2CD2 }, + { 0x2CD4, 0x2CD4 }, + { 0x2CD6, 0x2CD6 }, + { 0x2CD8, 0x2CD8 }, + { 0x2CDA, 0x2CDA }, + { 0x2CDC, 0x2CDC }, + { 0x2CDE, 0x2CDE }, + { 0x2CE0, 0x2CE0 }, + { 0x2CE2, 0x2CE2 }, + { 0xA640, 0xA640 }, + { 0xA642, 0xA642 }, + { 0xA644, 0xA644 }, + { 0xA646, 0xA646 }, + { 0xA648, 0xA648 }, + { 0xA64A, 0xA64A }, + { 0xA64C, 0xA64C }, + { 0xA64E, 0xA64E }, + { 0xA650, 0xA650 }, + { 0xA652, 0xA652 }, + { 0xA654, 0xA654 }, + { 0xA656, 0xA656 }, + { 0xA658, 0xA658 }, + { 0xA65A, 0xA65A }, + { 0xA65C, 0xA65C }, + { 0xA65E, 0xA65E }, + { 0xA662, 0xA662 }, + { 0xA664, 0xA664 }, + { 0xA666, 0xA666 }, + { 0xA668, 0xA668 }, + { 0xA66A, 0xA66A }, + { 0xA66C, 0xA66C }, + { 0xA680, 0xA680 }, + { 0xA682, 0xA682 }, + { 0xA684, 0xA684 }, + { 0xA686, 0xA686 }, + { 0xA688, 0xA688 }, + { 0xA68A, 0xA68A }, + { 0xA68C, 0xA68C }, + { 0xA68E, 0xA68E }, + { 0xA690, 0xA690 }, + { 0xA692, 0xA692 }, + { 0xA694, 0xA694 }, + { 0xA696, 0xA696 }, + { 0xA722, 0xA722 }, + { 0xA724, 0xA724 }, + { 0xA726, 0xA726 }, + { 0xA728, 0xA728 }, + { 0xA72A, 0xA72A }, + { 0xA72C, 0xA72C }, + { 0xA72E, 0xA72E }, + { 0xA732, 0xA732 }, + { 0xA734, 0xA734 }, + { 0xA736, 0xA736 }, + { 0xA738, 0xA738 }, + { 0xA73A, 0xA73A }, + { 0xA73C, 0xA73C }, + { 0xA73E, 0xA73E }, + { 0xA740, 0xA740 }, + { 0xA742, 0xA742 }, + { 0xA744, 0xA744 }, + { 0xA746, 0xA746 }, + { 0xA748, 0xA748 }, + { 0xA74A, 0xA74A }, + { 0xA74C, 0xA74C }, + { 0xA74E, 0xA74E }, + { 0xA750, 0xA750 }, + { 0xA752, 0xA752 }, + { 0xA754, 0xA754 }, + { 0xA756, 0xA756 }, + { 0xA758, 0xA758 }, + { 0xA75A, 0xA75A }, + { 0xA75C, 0xA75C }, + { 0xA75E, 0xA75E }, + { 0xA760, 0xA760 }, + { 0xA762, 0xA762 }, + { 0xA764, 0xA764 }, + { 0xA766, 0xA766 }, + { 0xA768, 0xA768 }, + { 0xA76A, 0xA76A }, + { 0xA76C, 0xA76C }, + { 0xA76E, 0xA76E }, + { 0xA779, 0xA779 }, + { 0xA77B, 0xA77B }, + { 0xA77D, 0xA77E }, + { 0xA780, 0xA780 }, + { 0xA782, 0xA782 }, + { 0xA784, 0xA784 }, + { 0xA786, 0xA786 }, + { 0xA78B, 0xA78B }, + { 0xFF21, 0xFF3A }, + { 0x10400, 0x10427 } + +#define PREDICATE(c) uc_is_upper (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-ctype_xdigit.c b/tests/unictype/test-ctype_xdigit.c new file mode 100644 index 00000000..d4e57178 --- /dev/null +++ b/tests/unictype/test-ctype_xdigit.c @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 }, + { 0x0041, 0x0046 }, + { 0x0061, 0x0066 } + +#define PREDICATE(c) uc_is_xdigit (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-decdigit.c b/tests/unictype/test-decdigit.c new file mode 100644 index 00000000..3d916908 --- /dev/null +++ b/tests/unictype/test-decdigit.c @@ -0,0 +1,62 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + +static const struct { unsigned int ch; int value; } mapping[] = + { +#include "test-decdigit.h" + }; + +int +main () +{ + unsigned int c; + size_t i; + + c = 0; + for (i = 0; i < SIZEOF (mapping); i++) + { + for (; c < mapping[i].ch; c++) + ASSERT (uc_decimal_value (c) == -1); + /* Here c = mapping[i].ch. */ + ASSERT (uc_decimal_value (c) == mapping[i].value); + c++; + } + for (; c < 0x110000; c++) + ASSERT (uc_decimal_value (c) == -1); + + return 0; +} diff --git a/tests/unictype/test-decdigit.h b/tests/unictype/test-decdigit.h new file mode 100644 index 00000000..afa88de7 --- /dev/null +++ b/tests/unictype/test-decdigit.h @@ -0,0 +1,373 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Decimal digit values of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ + { 0x0030, 0 }, + { 0x0031, 1 }, + { 0x0032, 2 }, + { 0x0033, 3 }, + { 0x0034, 4 }, + { 0x0035, 5 }, + { 0x0036, 6 }, + { 0x0037, 7 }, + { 0x0038, 8 }, + { 0x0039, 9 }, + { 0x0660, 0 }, + { 0x0661, 1 }, + { 0x0662, 2 }, + { 0x0663, 3 }, + { 0x0664, 4 }, + { 0x0665, 5 }, + { 0x0666, 6 }, + { 0x0667, 7 }, + { 0x0668, 8 }, + { 0x0669, 9 }, + { 0x06F0, 0 }, + { 0x06F1, 1 }, + { 0x06F2, 2 }, + { 0x06F3, 3 }, + { 0x06F4, 4 }, + { 0x06F5, 5 }, + { 0x06F6, 6 }, + { 0x06F7, 7 }, + { 0x06F8, 8 }, + { 0x06F9, 9 }, + { 0x07C0, 0 }, + { 0x07C1, 1 }, + { 0x07C2, 2 }, + { 0x07C3, 3 }, + { 0x07C4, 4 }, + { 0x07C5, 5 }, + { 0x07C6, 6 }, + { 0x07C7, 7 }, + { 0x07C8, 8 }, + { 0x07C9, 9 }, + { 0x0966, 0 }, + { 0x0967, 1 }, + { 0x0968, 2 }, + { 0x0969, 3 }, + { 0x096A, 4 }, + { 0x096B, 5 }, + { 0x096C, 6 }, + { 0x096D, 7 }, + { 0x096E, 8 }, + { 0x096F, 9 }, + { 0x09E6, 0 }, + { 0x09E7, 1 }, + { 0x09E8, 2 }, + { 0x09E9, 3 }, + { 0x09EA, 4 }, + { 0x09EB, 5 }, + { 0x09EC, 6 }, + { 0x09ED, 7 }, + { 0x09EE, 8 }, + { 0x09EF, 9 }, + { 0x0A66, 0 }, + { 0x0A67, 1 }, + { 0x0A68, 2 }, + { 0x0A69, 3 }, + { 0x0A6A, 4 }, + { 0x0A6B, 5 }, + { 0x0A6C, 6 }, + { 0x0A6D, 7 }, + { 0x0A6E, 8 }, + { 0x0A6F, 9 }, + { 0x0AE6, 0 }, + { 0x0AE7, 1 }, + { 0x0AE8, 2 }, + { 0x0AE9, 3 }, + { 0x0AEA, 4 }, + { 0x0AEB, 5 }, + { 0x0AEC, 6 }, + { 0x0AED, 7 }, + { 0x0AEE, 8 }, + { 0x0AEF, 9 }, + { 0x0B66, 0 }, + { 0x0B67, 1 }, + { 0x0B68, 2 }, + { 0x0B69, 3 }, + { 0x0B6A, 4 }, + { 0x0B6B, 5 }, + { 0x0B6C, 6 }, + { 0x0B6D, 7 }, + { 0x0B6E, 8 }, + { 0x0B6F, 9 }, + { 0x0BE6, 0 }, + { 0x0BE7, 1 }, + { 0x0BE8, 2 }, + { 0x0BE9, 3 }, + { 0x0BEA, 4 }, + { 0x0BEB, 5 }, + { 0x0BEC, 6 }, + { 0x0BED, 7 }, + { 0x0BEE, 8 }, + { 0x0BEF, 9 }, + { 0x0C66, 0 }, + { 0x0C67, 1 }, + { 0x0C68, 2 }, + { 0x0C69, 3 }, + { 0x0C6A, 4 }, + { 0x0C6B, 5 }, + { 0x0C6C, 6 }, + { 0x0C6D, 7 }, + { 0x0C6E, 8 }, + { 0x0C6F, 9 }, + { 0x0CE6, 0 }, + { 0x0CE7, 1 }, + { 0x0CE8, 2 }, + { 0x0CE9, 3 }, + { 0x0CEA, 4 }, + { 0x0CEB, 5 }, + { 0x0CEC, 6 }, + { 0x0CED, 7 }, + { 0x0CEE, 8 }, + { 0x0CEF, 9 }, + { 0x0D66, 0 }, + { 0x0D67, 1 }, + { 0x0D68, 2 }, + { 0x0D69, 3 }, + { 0x0D6A, 4 }, + { 0x0D6B, 5 }, + { 0x0D6C, 6 }, + { 0x0D6D, 7 }, + { 0x0D6E, 8 }, + { 0x0D6F, 9 }, + { 0x0E50, 0 }, + { 0x0E51, 1 }, + { 0x0E52, 2 }, + { 0x0E53, 3 }, + { 0x0E54, 4 }, + { 0x0E55, 5 }, + { 0x0E56, 6 }, + { 0x0E57, 7 }, + { 0x0E58, 8 }, + { 0x0E59, 9 }, + { 0x0ED0, 0 }, + { 0x0ED1, 1 }, + { 0x0ED2, 2 }, + { 0x0ED3, 3 }, + { 0x0ED4, 4 }, + { 0x0ED5, 5 }, + { 0x0ED6, 6 }, + { 0x0ED7, 7 }, + { 0x0ED8, 8 }, + { 0x0ED9, 9 }, + { 0x0F20, 0 }, + { 0x0F21, 1 }, + { 0x0F22, 2 }, + { 0x0F23, 3 }, + { 0x0F24, 4 }, + { 0x0F25, 5 }, + { 0x0F26, 6 }, + { 0x0F27, 7 }, + { 0x0F28, 8 }, + { 0x0F29, 9 }, + { 0x1040, 0 }, + { 0x1041, 1 }, + { 0x1042, 2 }, + { 0x1043, 3 }, + { 0x1044, 4 }, + { 0x1045, 5 }, + { 0x1046, 6 }, + { 0x1047, 7 }, + { 0x1048, 8 }, + { 0x1049, 9 }, + { 0x1090, 0 }, + { 0x1091, 1 }, + { 0x1092, 2 }, + { 0x1093, 3 }, + { 0x1094, 4 }, + { 0x1095, 5 }, + { 0x1096, 6 }, + { 0x1097, 7 }, + { 0x1098, 8 }, + { 0x1099, 9 }, + { 0x17E0, 0 }, + { 0x17E1, 1 }, + { 0x17E2, 2 }, + { 0x17E3, 3 }, + { 0x17E4, 4 }, + { 0x17E5, 5 }, + { 0x17E6, 6 }, + { 0x17E7, 7 }, + { 0x17E8, 8 }, + { 0x17E9, 9 }, + { 0x1810, 0 }, + { 0x1811, 1 }, + { 0x1812, 2 }, + { 0x1813, 3 }, + { 0x1814, 4 }, + { 0x1815, 5 }, + { 0x1816, 6 }, + { 0x1817, 7 }, + { 0x1818, 8 }, + { 0x1819, 9 }, + { 0x1946, 0 }, + { 0x1947, 1 }, + { 0x1948, 2 }, + { 0x1949, 3 }, + { 0x194A, 4 }, + { 0x194B, 5 }, + { 0x194C, 6 }, + { 0x194D, 7 }, + { 0x194E, 8 }, + { 0x194F, 9 }, + { 0x19D0, 0 }, + { 0x19D1, 1 }, + { 0x19D2, 2 }, + { 0x19D3, 3 }, + { 0x19D4, 4 }, + { 0x19D5, 5 }, + { 0x19D6, 6 }, + { 0x19D7, 7 }, + { 0x19D8, 8 }, + { 0x19D9, 9 }, + { 0x1B50, 0 }, + { 0x1B51, 1 }, + { 0x1B52, 2 }, + { 0x1B53, 3 }, + { 0x1B54, 4 }, + { 0x1B55, 5 }, + { 0x1B56, 6 }, + { 0x1B57, 7 }, + { 0x1B58, 8 }, + { 0x1B59, 9 }, + { 0x1BB0, 0 }, + { 0x1BB1, 1 }, + { 0x1BB2, 2 }, + { 0x1BB3, 3 }, + { 0x1BB4, 4 }, + { 0x1BB5, 5 }, + { 0x1BB6, 6 }, + { 0x1BB7, 7 }, + { 0x1BB8, 8 }, + { 0x1BB9, 9 }, + { 0x1C40, 0 }, + { 0x1C41, 1 }, + { 0x1C42, 2 }, + { 0x1C43, 3 }, + { 0x1C44, 4 }, + { 0x1C45, 5 }, + { 0x1C46, 6 }, + { 0x1C47, 7 }, + { 0x1C48, 8 }, + { 0x1C49, 9 }, + { 0x1C50, 0 }, + { 0x1C51, 1 }, + { 0x1C52, 2 }, + { 0x1C53, 3 }, + { 0x1C54, 4 }, + { 0x1C55, 5 }, + { 0x1C56, 6 }, + { 0x1C57, 7 }, + { 0x1C58, 8 }, + { 0x1C59, 9 }, + { 0xA620, 0 }, + { 0xA621, 1 }, + { 0xA622, 2 }, + { 0xA623, 3 }, + { 0xA624, 4 }, + { 0xA625, 5 }, + { 0xA626, 6 }, + { 0xA627, 7 }, + { 0xA628, 8 }, + { 0xA629, 9 }, + { 0xA8D0, 0 }, + { 0xA8D1, 1 }, + { 0xA8D2, 2 }, + { 0xA8D3, 3 }, + { 0xA8D4, 4 }, + { 0xA8D5, 5 }, + { 0xA8D6, 6 }, + { 0xA8D7, 7 }, + { 0xA8D8, 8 }, + { 0xA8D9, 9 }, + { 0xA900, 0 }, + { 0xA901, 1 }, + { 0xA902, 2 }, + { 0xA903, 3 }, + { 0xA904, 4 }, + { 0xA905, 5 }, + { 0xA906, 6 }, + { 0xA907, 7 }, + { 0xA908, 8 }, + { 0xA909, 9 }, + { 0xAA50, 0 }, + { 0xAA51, 1 }, + { 0xAA52, 2 }, + { 0xAA53, 3 }, + { 0xAA54, 4 }, + { 0xAA55, 5 }, + { 0xAA56, 6 }, + { 0xAA57, 7 }, + { 0xAA58, 8 }, + { 0xAA59, 9 }, + { 0xFF10, 0 }, + { 0xFF11, 1 }, + { 0xFF12, 2 }, + { 0xFF13, 3 }, + { 0xFF14, 4 }, + { 0xFF15, 5 }, + { 0xFF16, 6 }, + { 0xFF17, 7 }, + { 0xFF18, 8 }, + { 0xFF19, 9 }, + { 0x104A0, 0 }, + { 0x104A1, 1 }, + { 0x104A2, 2 }, + { 0x104A3, 3 }, + { 0x104A4, 4 }, + { 0x104A5, 5 }, + { 0x104A6, 6 }, + { 0x104A7, 7 }, + { 0x104A8, 8 }, + { 0x104A9, 9 }, + { 0x1D7CE, 0 }, + { 0x1D7CF, 1 }, + { 0x1D7D0, 2 }, + { 0x1D7D1, 3 }, + { 0x1D7D2, 4 }, + { 0x1D7D3, 5 }, + { 0x1D7D4, 6 }, + { 0x1D7D5, 7 }, + { 0x1D7D6, 8 }, + { 0x1D7D7, 9 }, + { 0x1D7D8, 0 }, + { 0x1D7D9, 1 }, + { 0x1D7DA, 2 }, + { 0x1D7DB, 3 }, + { 0x1D7DC, 4 }, + { 0x1D7DD, 5 }, + { 0x1D7DE, 6 }, + { 0x1D7DF, 7 }, + { 0x1D7E0, 8 }, + { 0x1D7E1, 9 }, + { 0x1D7E2, 0 }, + { 0x1D7E3, 1 }, + { 0x1D7E4, 2 }, + { 0x1D7E5, 3 }, + { 0x1D7E6, 4 }, + { 0x1D7E7, 5 }, + { 0x1D7E8, 6 }, + { 0x1D7E9, 7 }, + { 0x1D7EA, 8 }, + { 0x1D7EB, 9 }, + { 0x1D7EC, 0 }, + { 0x1D7ED, 1 }, + { 0x1D7EE, 2 }, + { 0x1D7EF, 3 }, + { 0x1D7F0, 4 }, + { 0x1D7F1, 5 }, + { 0x1D7F2, 6 }, + { 0x1D7F3, 7 }, + { 0x1D7F4, 8 }, + { 0x1D7F5, 9 }, + { 0x1D7F6, 0 }, + { 0x1D7F7, 1 }, + { 0x1D7F8, 2 }, + { 0x1D7F9, 3 }, + { 0x1D7FA, 4 }, + { 0x1D7FB, 5 }, + { 0x1D7FC, 6 }, + { 0x1D7FD, 7 }, + { 0x1D7FE, 8 }, + { 0x1D7FF, 9 } diff --git a/tests/unictype/test-digit.c b/tests/unictype/test-digit.c new file mode 100644 index 00000000..efecaaba --- /dev/null +++ b/tests/unictype/test-digit.c @@ -0,0 +1,62 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + +static const struct { unsigned int ch; int value; } mapping[] = + { +#include "test-digit.h" + }; + +int +main () +{ + unsigned int c; + size_t i; + + c = 0; + for (i = 0; i < SIZEOF (mapping); i++) + { + for (; c < mapping[i].ch; c++) + ASSERT (uc_digit_value (c) == -1); + /* Here c = mapping[i].ch. */ + ASSERT (uc_digit_value (c) == mapping[i].value); + c++; + } + for (; c < 0x110000; c++) + ASSERT (uc_digit_value (c) == -1); + + return 0; +} diff --git a/tests/unictype/test-digit.h b/tests/unictype/test-digit.h new file mode 100644 index 00000000..9902a7fe --- /dev/null +++ b/tests/unictype/test-digit.h @@ -0,0 +1,471 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Digit values of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ + { 0x0030, 0 }, + { 0x0031, 1 }, + { 0x0032, 2 }, + { 0x0033, 3 }, + { 0x0034, 4 }, + { 0x0035, 5 }, + { 0x0036, 6 }, + { 0x0037, 7 }, + { 0x0038, 8 }, + { 0x0039, 9 }, + { 0x00B2, 2 }, + { 0x00B3, 3 }, + { 0x00B9, 1 }, + { 0x0660, 0 }, + { 0x0661, 1 }, + { 0x0662, 2 }, + { 0x0663, 3 }, + { 0x0664, 4 }, + { 0x0665, 5 }, + { 0x0666, 6 }, + { 0x0667, 7 }, + { 0x0668, 8 }, + { 0x0669, 9 }, + { 0x06F0, 0 }, + { 0x06F1, 1 }, + { 0x06F2, 2 }, + { 0x06F3, 3 }, + { 0x06F4, 4 }, + { 0x06F5, 5 }, + { 0x06F6, 6 }, + { 0x06F7, 7 }, + { 0x06F8, 8 }, + { 0x06F9, 9 }, + { 0x07C0, 0 }, + { 0x07C1, 1 }, + { 0x07C2, 2 }, + { 0x07C3, 3 }, + { 0x07C4, 4 }, + { 0x07C5, 5 }, + { 0x07C6, 6 }, + { 0x07C7, 7 }, + { 0x07C8, 8 }, + { 0x07C9, 9 }, + { 0x0966, 0 }, + { 0x0967, 1 }, + { 0x0968, 2 }, + { 0x0969, 3 }, + { 0x096A, 4 }, + { 0x096B, 5 }, + { 0x096C, 6 }, + { 0x096D, 7 }, + { 0x096E, 8 }, + { 0x096F, 9 }, + { 0x09E6, 0 }, + { 0x09E7, 1 }, + { 0x09E8, 2 }, + { 0x09E9, 3 }, + { 0x09EA, 4 }, + { 0x09EB, 5 }, + { 0x09EC, 6 }, + { 0x09ED, 7 }, + { 0x09EE, 8 }, + { 0x09EF, 9 }, + { 0x0A66, 0 }, + { 0x0A67, 1 }, + { 0x0A68, 2 }, + { 0x0A69, 3 }, + { 0x0A6A, 4 }, + { 0x0A6B, 5 }, + { 0x0A6C, 6 }, + { 0x0A6D, 7 }, + { 0x0A6E, 8 }, + { 0x0A6F, 9 }, + { 0x0AE6, 0 }, + { 0x0AE7, 1 }, + { 0x0AE8, 2 }, + { 0x0AE9, 3 }, + { 0x0AEA, 4 }, + { 0x0AEB, 5 }, + { 0x0AEC, 6 }, + { 0x0AED, 7 }, + { 0x0AEE, 8 }, + { 0x0AEF, 9 }, + { 0x0B66, 0 }, + { 0x0B67, 1 }, + { 0x0B68, 2 }, + { 0x0B69, 3 }, + { 0x0B6A, 4 }, + { 0x0B6B, 5 }, + { 0x0B6C, 6 }, + { 0x0B6D, 7 }, + { 0x0B6E, 8 }, + { 0x0B6F, 9 }, + { 0x0BE6, 0 }, + { 0x0BE7, 1 }, + { 0x0BE8, 2 }, + { 0x0BE9, 3 }, + { 0x0BEA, 4 }, + { 0x0BEB, 5 }, + { 0x0BEC, 6 }, + { 0x0BED, 7 }, + { 0x0BEE, 8 }, + { 0x0BEF, 9 }, + { 0x0C66, 0 }, + { 0x0C67, 1 }, + { 0x0C68, 2 }, + { 0x0C69, 3 }, + { 0x0C6A, 4 }, + { 0x0C6B, 5 }, + { 0x0C6C, 6 }, + { 0x0C6D, 7 }, + { 0x0C6E, 8 }, + { 0x0C6F, 9 }, + { 0x0CE6, 0 }, + { 0x0CE7, 1 }, + { 0x0CE8, 2 }, + { 0x0CE9, 3 }, + { 0x0CEA, 4 }, + { 0x0CEB, 5 }, + { 0x0CEC, 6 }, + { 0x0CED, 7 }, + { 0x0CEE, 8 }, + { 0x0CEF, 9 }, + { 0x0D66, 0 }, + { 0x0D67, 1 }, + { 0x0D68, 2 }, + { 0x0D69, 3 }, + { 0x0D6A, 4 }, + { 0x0D6B, 5 }, + { 0x0D6C, 6 }, + { 0x0D6D, 7 }, + { 0x0D6E, 8 }, + { 0x0D6F, 9 }, + { 0x0E50, 0 }, + { 0x0E51, 1 }, + { 0x0E52, 2 }, + { 0x0E53, 3 }, + { 0x0E54, 4 }, + { 0x0E55, 5 }, + { 0x0E56, 6 }, + { 0x0E57, 7 }, + { 0x0E58, 8 }, + { 0x0E59, 9 }, + { 0x0ED0, 0 }, + { 0x0ED1, 1 }, + { 0x0ED2, 2 }, + { 0x0ED3, 3 }, + { 0x0ED4, 4 }, + { 0x0ED5, 5 }, + { 0x0ED6, 6 }, + { 0x0ED7, 7 }, + { 0x0ED8, 8 }, + { 0x0ED9, 9 }, + { 0x0F20, 0 }, + { 0x0F21, 1 }, + { 0x0F22, 2 }, + { 0x0F23, 3 }, + { 0x0F24, 4 }, + { 0x0F25, 5 }, + { 0x0F26, 6 }, + { 0x0F27, 7 }, + { 0x0F28, 8 }, + { 0x0F29, 9 }, + { 0x1040, 0 }, + { 0x1041, 1 }, + { 0x1042, 2 }, + { 0x1043, 3 }, + { 0x1044, 4 }, + { 0x1045, 5 }, + { 0x1046, 6 }, + { 0x1047, 7 }, + { 0x1048, 8 }, + { 0x1049, 9 }, + { 0x1090, 0 }, + { 0x1091, 1 }, + { 0x1092, 2 }, + { 0x1093, 3 }, + { 0x1094, 4 }, + { 0x1095, 5 }, + { 0x1096, 6 }, + { 0x1097, 7 }, + { 0x1098, 8 }, + { 0x1099, 9 }, + { 0x1369, 1 }, + { 0x136A, 2 }, + { 0x136B, 3 }, + { 0x136C, 4 }, + { 0x136D, 5 }, + { 0x136E, 6 }, + { 0x136F, 7 }, + { 0x1370, 8 }, + { 0x1371, 9 }, + { 0x17E0, 0 }, + { 0x17E1, 1 }, + { 0x17E2, 2 }, + { 0x17E3, 3 }, + { 0x17E4, 4 }, + { 0x17E5, 5 }, + { 0x17E6, 6 }, + { 0x17E7, 7 }, + { 0x17E8, 8 }, + { 0x17E9, 9 }, + { 0x1810, 0 }, + { 0x1811, 1 }, + { 0x1812, 2 }, + { 0x1813, 3 }, + { 0x1814, 4 }, + { 0x1815, 5 }, + { 0x1816, 6 }, + { 0x1817, 7 }, + { 0x1818, 8 }, + { 0x1819, 9 }, + { 0x1946, 0 }, + { 0x1947, 1 }, + { 0x1948, 2 }, + { 0x1949, 3 }, + { 0x194A, 4 }, + { 0x194B, 5 }, + { 0x194C, 6 }, + { 0x194D, 7 }, + { 0x194E, 8 }, + { 0x194F, 9 }, + { 0x19D0, 0 }, + { 0x19D1, 1 }, + { 0x19D2, 2 }, + { 0x19D3, 3 }, + { 0x19D4, 4 }, + { 0x19D5, 5 }, + { 0x19D6, 6 }, + { 0x19D7, 7 }, + { 0x19D8, 8 }, + { 0x19D9, 9 }, + { 0x1B50, 0 }, + { 0x1B51, 1 }, + { 0x1B52, 2 }, + { 0x1B53, 3 }, + { 0x1B54, 4 }, + { 0x1B55, 5 }, + { 0x1B56, 6 }, + { 0x1B57, 7 }, + { 0x1B58, 8 }, + { 0x1B59, 9 }, + { 0x1BB0, 0 }, + { 0x1BB1, 1 }, + { 0x1BB2, 2 }, + { 0x1BB3, 3 }, + { 0x1BB4, 4 }, + { 0x1BB5, 5 }, + { 0x1BB6, 6 }, + { 0x1BB7, 7 }, + { 0x1BB8, 8 }, + { 0x1BB9, 9 }, + { 0x1C40, 0 }, + { 0x1C41, 1 }, + { 0x1C42, 2 }, + { 0x1C43, 3 }, + { 0x1C44, 4 }, + { 0x1C45, 5 }, + { 0x1C46, 6 }, + { 0x1C47, 7 }, + { 0x1C48, 8 }, + { 0x1C49, 9 }, + { 0x1C50, 0 }, + { 0x1C51, 1 }, + { 0x1C52, 2 }, + { 0x1C53, 3 }, + { 0x1C54, 4 }, + { 0x1C55, 5 }, + { 0x1C56, 6 }, + { 0x1C57, 7 }, + { 0x1C58, 8 }, + { 0x1C59, 9 }, + { 0x2070, 0 }, + { 0x2074, 4 }, + { 0x2075, 5 }, + { 0x2076, 6 }, + { 0x2077, 7 }, + { 0x2078, 8 }, + { 0x2079, 9 }, + { 0x2080, 0 }, + { 0x2081, 1 }, + { 0x2082, 2 }, + { 0x2083, 3 }, + { 0x2084, 4 }, + { 0x2085, 5 }, + { 0x2086, 6 }, + { 0x2087, 7 }, + { 0x2088, 8 }, + { 0x2089, 9 }, + { 0x2460, 1 }, + { 0x2461, 2 }, + { 0x2462, 3 }, + { 0x2463, 4 }, + { 0x2464, 5 }, + { 0x2465, 6 }, + { 0x2466, 7 }, + { 0x2467, 8 }, + { 0x2468, 9 }, + { 0x2474, 1 }, + { 0x2475, 2 }, + { 0x2476, 3 }, + { 0x2477, 4 }, + { 0x2478, 5 }, + { 0x2479, 6 }, + { 0x247A, 7 }, + { 0x247B, 8 }, + { 0x247C, 9 }, + { 0x2488, 1 }, + { 0x2489, 2 }, + { 0x248A, 3 }, + { 0x248B, 4 }, + { 0x248C, 5 }, + { 0x248D, 6 }, + { 0x248E, 7 }, + { 0x248F, 8 }, + { 0x2490, 9 }, + { 0x24EA, 0 }, + { 0x24F5, 1 }, + { 0x24F6, 2 }, + { 0x24F7, 3 }, + { 0x24F8, 4 }, + { 0x24F9, 5 }, + { 0x24FA, 6 }, + { 0x24FB, 7 }, + { 0x24FC, 8 }, + { 0x24FD, 9 }, + { 0x24FF, 0 }, + { 0x2776, 1 }, + { 0x2777, 2 }, + { 0x2778, 3 }, + { 0x2779, 4 }, + { 0x277A, 5 }, + { 0x277B, 6 }, + { 0x277C, 7 }, + { 0x277D, 8 }, + { 0x277E, 9 }, + { 0x2780, 1 }, + { 0x2781, 2 }, + { 0x2782, 3 }, + { 0x2783, 4 }, + { 0x2784, 5 }, + { 0x2785, 6 }, + { 0x2786, 7 }, + { 0x2787, 8 }, + { 0x2788, 9 }, + { 0x278A, 1 }, + { 0x278B, 2 }, + { 0x278C, 3 }, + { 0x278D, 4 }, + { 0x278E, 5 }, + { 0x278F, 6 }, + { 0x2790, 7 }, + { 0x2791, 8 }, + { 0x2792, 9 }, + { 0xA620, 0 }, + { 0xA621, 1 }, + { 0xA622, 2 }, + { 0xA623, 3 }, + { 0xA624, 4 }, + { 0xA625, 5 }, + { 0xA626, 6 }, + { 0xA627, 7 }, + { 0xA628, 8 }, + { 0xA629, 9 }, + { 0xA8D0, 0 }, + { 0xA8D1, 1 }, + { 0xA8D2, 2 }, + { 0xA8D3, 3 }, + { 0xA8D4, 4 }, + { 0xA8D5, 5 }, + { 0xA8D6, 6 }, + { 0xA8D7, 7 }, + { 0xA8D8, 8 }, + { 0xA8D9, 9 }, + { 0xA900, 0 }, + { 0xA901, 1 }, + { 0xA902, 2 }, + { 0xA903, 3 }, + { 0xA904, 4 }, + { 0xA905, 5 }, + { 0xA906, 6 }, + { 0xA907, 7 }, + { 0xA908, 8 }, + { 0xA909, 9 }, + { 0xAA50, 0 }, + { 0xAA51, 1 }, + { 0xAA52, 2 }, + { 0xAA53, 3 }, + { 0xAA54, 4 }, + { 0xAA55, 5 }, + { 0xAA56, 6 }, + { 0xAA57, 7 }, + { 0xAA58, 8 }, + { 0xAA59, 9 }, + { 0xFF10, 0 }, + { 0xFF11, 1 }, + { 0xFF12, 2 }, + { 0xFF13, 3 }, + { 0xFF14, 4 }, + { 0xFF15, 5 }, + { 0xFF16, 6 }, + { 0xFF17, 7 }, + { 0xFF18, 8 }, + { 0xFF19, 9 }, + { 0x104A0, 0 }, + { 0x104A1, 1 }, + { 0x104A2, 2 }, + { 0x104A3, 3 }, + { 0x104A4, 4 }, + { 0x104A5, 5 }, + { 0x104A6, 6 }, + { 0x104A7, 7 }, + { 0x104A8, 8 }, + { 0x104A9, 9 }, + { 0x10A40, 1 }, + { 0x10A41, 2 }, + { 0x10A42, 3 }, + { 0x10A43, 4 }, + { 0x1D7CE, 0 }, + { 0x1D7CF, 1 }, + { 0x1D7D0, 2 }, + { 0x1D7D1, 3 }, + { 0x1D7D2, 4 }, + { 0x1D7D3, 5 }, + { 0x1D7D4, 6 }, + { 0x1D7D5, 7 }, + { 0x1D7D6, 8 }, + { 0x1D7D7, 9 }, + { 0x1D7D8, 0 }, + { 0x1D7D9, 1 }, + { 0x1D7DA, 2 }, + { 0x1D7DB, 3 }, + { 0x1D7DC, 4 }, + { 0x1D7DD, 5 }, + { 0x1D7DE, 6 }, + { 0x1D7DF, 7 }, + { 0x1D7E0, 8 }, + { 0x1D7E1, 9 }, + { 0x1D7E2, 0 }, + { 0x1D7E3, 1 }, + { 0x1D7E4, 2 }, + { 0x1D7E5, 3 }, + { 0x1D7E6, 4 }, + { 0x1D7E7, 5 }, + { 0x1D7E8, 6 }, + { 0x1D7E9, 7 }, + { 0x1D7EA, 8 }, + { 0x1D7EB, 9 }, + { 0x1D7EC, 0 }, + { 0x1D7ED, 1 }, + { 0x1D7EE, 2 }, + { 0x1D7EF, 3 }, + { 0x1D7F0, 4 }, + { 0x1D7F1, 5 }, + { 0x1D7F2, 6 }, + { 0x1D7F3, 7 }, + { 0x1D7F4, 8 }, + { 0x1D7F5, 9 }, + { 0x1D7F6, 0 }, + { 0x1D7F7, 1 }, + { 0x1D7F8, 2 }, + { 0x1D7F9, 3 }, + { 0x1D7FA, 4 }, + { 0x1D7FB, 5 }, + { 0x1D7FC, 6 }, + { 0x1D7FD, 7 }, + { 0x1D7FE, 8 }, + { 0x1D7FF, 9 } diff --git a/tests/unictype/test-mirror.c b/tests/unictype/test-mirror.c new file mode 100644 index 00000000..fb4402ff --- /dev/null +++ b/tests/unictype/test-mirror.c @@ -0,0 +1,53 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ucs4_t mirrored; + + ASSERT (uc_mirror_char ('(', &mirrored) && mirrored == ')'); + ASSERT (uc_mirror_char (')', &mirrored) && mirrored == '('); + ASSERT (uc_mirror_char ('<', &mirrored) && mirrored == '>'); + ASSERT (uc_mirror_char ('>', &mirrored) && mirrored == '<'); + ASSERT (uc_mirror_char ('[', &mirrored) && mirrored == ']'); + ASSERT (uc_mirror_char (']', &mirrored) && mirrored == '['); + ASSERT (uc_mirror_char ('{', &mirrored) && mirrored == '}'); + ASSERT (uc_mirror_char ('}', &mirrored) && mirrored == '{'); + ASSERT (!uc_mirror_char ('X', &mirrored)); + + return 0; +} diff --git a/tests/unictype/test-numeric.c b/tests/unictype/test-numeric.c new file mode 100644 index 00000000..5bca3638 --- /dev/null +++ b/tests/unictype/test-numeric.c @@ -0,0 +1,72 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + +static const struct { unsigned int ch; int numerator; int denominator; } + mapping[] = + { +#include "test-numeric.h" + }; + +int +main () +{ + unsigned int c; + uc_fraction_t value; + size_t i; + + c = 0; + for (i = 0; i < SIZEOF (mapping); i++) + { + for (; c < mapping[i].ch; c++) + { + value = uc_numeric_value (c); + ASSERT (value.numerator == 0 && value.denominator == 0); + } + /* Here c = mapping[i].ch. */ + value = uc_numeric_value (c); + ASSERT (value.numerator == mapping[i].numerator + && value.denominator == mapping[i].denominator); + c++; + } + for (; c < 0x110000; c++) + { + value = uc_numeric_value (c); + ASSERT (value.numerator == 0 && value.denominator == 0); + } + + return 0; +} diff --git a/tests/unictype/test-numeric.h b/tests/unictype/test-numeric.h new file mode 100644 index 00000000..32679424 --- /dev/null +++ b/tests/unictype/test-numeric.h @@ -0,0 +1,939 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Numeric values of Unicode characters. */ +/* Generated automatically by gen-ctype.c for Unicode 5.1.0. */ + { 0x0030, 0, 1 }, + { 0x0031, 1, 1 }, + { 0x0032, 2, 1 }, + { 0x0033, 3, 1 }, + { 0x0034, 4, 1 }, + { 0x0035, 5, 1 }, + { 0x0036, 6, 1 }, + { 0x0037, 7, 1 }, + { 0x0038, 8, 1 }, + { 0x0039, 9, 1 }, + { 0x00B2, 2, 1 }, + { 0x00B3, 3, 1 }, + { 0x00B9, 1, 1 }, + { 0x00BC, 1, 4 }, + { 0x00BD, 1, 2 }, + { 0x00BE, 3, 4 }, + { 0x0660, 0, 1 }, + { 0x0661, 1, 1 }, + { 0x0662, 2, 1 }, + { 0x0663, 3, 1 }, + { 0x0664, 4, 1 }, + { 0x0665, 5, 1 }, + { 0x0666, 6, 1 }, + { 0x0667, 7, 1 }, + { 0x0668, 8, 1 }, + { 0x0669, 9, 1 }, + { 0x06F0, 0, 1 }, + { 0x06F1, 1, 1 }, + { 0x06F2, 2, 1 }, + { 0x06F3, 3, 1 }, + { 0x06F4, 4, 1 }, + { 0x06F5, 5, 1 }, + { 0x06F6, 6, 1 }, + { 0x06F7, 7, 1 }, + { 0x06F8, 8, 1 }, + { 0x06F9, 9, 1 }, + { 0x07C0, 0, 1 }, + { 0x07C1, 1, 1 }, + { 0x07C2, 2, 1 }, + { 0x07C3, 3, 1 }, + { 0x07C4, 4, 1 }, + { 0x07C5, 5, 1 }, + { 0x07C6, 6, 1 }, + { 0x07C7, 7, 1 }, + { 0x07C8, 8, 1 }, + { 0x07C9, 9, 1 }, + { 0x0966, 0, 1 }, + { 0x0967, 1, 1 }, + { 0x0968, 2, 1 }, + { 0x0969, 3, 1 }, + { 0x096A, 4, 1 }, + { 0x096B, 5, 1 }, + { 0x096C, 6, 1 }, + { 0x096D, 7, 1 }, + { 0x096E, 8, 1 }, + { 0x096F, 9, 1 }, + { 0x09E6, 0, 1 }, + { 0x09E7, 1, 1 }, + { 0x09E8, 2, 1 }, + { 0x09E9, 3, 1 }, + { 0x09EA, 4, 1 }, + { 0x09EB, 5, 1 }, + { 0x09EC, 6, 1 }, + { 0x09ED, 7, 1 }, + { 0x09EE, 8, 1 }, + { 0x09EF, 9, 1 }, + { 0x09F4, 1, 1 }, + { 0x09F5, 2, 1 }, + { 0x09F6, 3, 1 }, + { 0x09F7, 4, 1 }, + { 0x09F9, 16, 1 }, + { 0x0A66, 0, 1 }, + { 0x0A67, 1, 1 }, + { 0x0A68, 2, 1 }, + { 0x0A69, 3, 1 }, + { 0x0A6A, 4, 1 }, + { 0x0A6B, 5, 1 }, + { 0x0A6C, 6, 1 }, + { 0x0A6D, 7, 1 }, + { 0x0A6E, 8, 1 }, + { 0x0A6F, 9, 1 }, + { 0x0AE6, 0, 1 }, + { 0x0AE7, 1, 1 }, + { 0x0AE8, 2, 1 }, + { 0x0AE9, 3, 1 }, + { 0x0AEA, 4, 1 }, + { 0x0AEB, 5, 1 }, + { 0x0AEC, 6, 1 }, + { 0x0AED, 7, 1 }, + { 0x0AEE, 8, 1 }, + { 0x0AEF, 9, 1 }, + { 0x0B66, 0, 1 }, + { 0x0B67, 1, 1 }, + { 0x0B68, 2, 1 }, + { 0x0B69, 3, 1 }, + { 0x0B6A, 4, 1 }, + { 0x0B6B, 5, 1 }, + { 0x0B6C, 6, 1 }, + { 0x0B6D, 7, 1 }, + { 0x0B6E, 8, 1 }, + { 0x0B6F, 9, 1 }, + { 0x0BE6, 0, 1 }, + { 0x0BE7, 1, 1 }, + { 0x0BE8, 2, 1 }, + { 0x0BE9, 3, 1 }, + { 0x0BEA, 4, 1 }, + { 0x0BEB, 5, 1 }, + { 0x0BEC, 6, 1 }, + { 0x0BED, 7, 1 }, + { 0x0BEE, 8, 1 }, + { 0x0BEF, 9, 1 }, + { 0x0BF0, 10, 1 }, + { 0x0BF1, 100, 1 }, + { 0x0BF2, 1000, 1 }, + { 0x0C66, 0, 1 }, + { 0x0C67, 1, 1 }, + { 0x0C68, 2, 1 }, + { 0x0C69, 3, 1 }, + { 0x0C6A, 4, 1 }, + { 0x0C6B, 5, 1 }, + { 0x0C6C, 6, 1 }, + { 0x0C6D, 7, 1 }, + { 0x0C6E, 8, 1 }, + { 0x0C6F, 9, 1 }, + { 0x0C78, 0, 1 }, + { 0x0C79, 1, 1 }, + { 0x0C7A, 2, 1 }, + { 0x0C7B, 3, 1 }, + { 0x0C7C, 1, 1 }, + { 0x0C7D, 2, 1 }, + { 0x0C7E, 3, 1 }, + { 0x0CE6, 0, 1 }, + { 0x0CE7, 1, 1 }, + { 0x0CE8, 2, 1 }, + { 0x0CE9, 3, 1 }, + { 0x0CEA, 4, 1 }, + { 0x0CEB, 5, 1 }, + { 0x0CEC, 6, 1 }, + { 0x0CED, 7, 1 }, + { 0x0CEE, 8, 1 }, + { 0x0CEF, 9, 1 }, + { 0x0D66, 0, 1 }, + { 0x0D67, 1, 1 }, + { 0x0D68, 2, 1 }, + { 0x0D69, 3, 1 }, + { 0x0D6A, 4, 1 }, + { 0x0D6B, 5, 1 }, + { 0x0D6C, 6, 1 }, + { 0x0D6D, 7, 1 }, + { 0x0D6E, 8, 1 }, + { 0x0D6F, 9, 1 }, + { 0x0D70, 10, 1 }, + { 0x0D71, 100, 1 }, + { 0x0D72, 1000, 1 }, + { 0x0D73, 1, 4 }, + { 0x0D74, 1, 2 }, + { 0x0D75, 3, 4 }, + { 0x0E50, 0, 1 }, + { 0x0E51, 1, 1 }, + { 0x0E52, 2, 1 }, + { 0x0E53, 3, 1 }, + { 0x0E54, 4, 1 }, + { 0x0E55, 5, 1 }, + { 0x0E56, 6, 1 }, + { 0x0E57, 7, 1 }, + { 0x0E58, 8, 1 }, + { 0x0E59, 9, 1 }, + { 0x0ED0, 0, 1 }, + { 0x0ED1, 1, 1 }, + { 0x0ED2, 2, 1 }, + { 0x0ED3, 3, 1 }, + { 0x0ED4, 4, 1 }, + { 0x0ED5, 5, 1 }, + { 0x0ED6, 6, 1 }, + { 0x0ED7, 7, 1 }, + { 0x0ED8, 8, 1 }, + { 0x0ED9, 9, 1 }, + { 0x0F20, 0, 1 }, + { 0x0F21, 1, 1 }, + { 0x0F22, 2, 1 }, + { 0x0F23, 3, 1 }, + { 0x0F24, 4, 1 }, + { 0x0F25, 5, 1 }, + { 0x0F26, 6, 1 }, + { 0x0F27, 7, 1 }, + { 0x0F28, 8, 1 }, + { 0x0F29, 9, 1 }, + { 0x0F2A, 1, 2 }, + { 0x0F2B, 3, 2 }, + { 0x0F2C, 5, 2 }, + { 0x0F2D, 7, 2 }, + { 0x0F2E, 9, 2 }, + { 0x0F2F, 11, 2 }, + { 0x0F30, 13, 2 }, + { 0x0F31, 15, 2 }, + { 0x0F32, 17, 2 }, + { 0x0F33, -1, 2 }, + { 0x1040, 0, 1 }, + { 0x1041, 1, 1 }, + { 0x1042, 2, 1 }, + { 0x1043, 3, 1 }, + { 0x1044, 4, 1 }, + { 0x1045, 5, 1 }, + { 0x1046, 6, 1 }, + { 0x1047, 7, 1 }, + { 0x1048, 8, 1 }, + { 0x1049, 9, 1 }, + { 0x1090, 0, 1 }, + { 0x1091, 1, 1 }, + { 0x1092, 2, 1 }, + { 0x1093, 3, 1 }, + { 0x1094, 4, 1 }, + { 0x1095, 5, 1 }, + { 0x1096, 6, 1 }, + { 0x1097, 7, 1 }, + { 0x1098, 8, 1 }, + { 0x1099, 9, 1 }, + { 0x1369, 1, 1 }, + { 0x136A, 2, 1 }, + { 0x136B, 3, 1 }, + { 0x136C, 4, 1 }, + { 0x136D, 5, 1 }, + { 0x136E, 6, 1 }, + { 0x136F, 7, 1 }, + { 0x1370, 8, 1 }, + { 0x1371, 9, 1 }, + { 0x1372, 10, 1 }, + { 0x1373, 20, 1 }, + { 0x1374, 30, 1 }, + { 0x1375, 40, 1 }, + { 0x1376, 50, 1 }, + { 0x1377, 60, 1 }, + { 0x1378, 70, 1 }, + { 0x1379, 80, 1 }, + { 0x137A, 90, 1 }, + { 0x137B, 100, 1 }, + { 0x137C, 10000, 1 }, + { 0x16EE, 17, 1 }, + { 0x16EF, 18, 1 }, + { 0x16F0, 19, 1 }, + { 0x17E0, 0, 1 }, + { 0x17E1, 1, 1 }, + { 0x17E2, 2, 1 }, + { 0x17E3, 3, 1 }, + { 0x17E4, 4, 1 }, + { 0x17E5, 5, 1 }, + { 0x17E6, 6, 1 }, + { 0x17E7, 7, 1 }, + { 0x17E8, 8, 1 }, + { 0x17E9, 9, 1 }, + { 0x17F0, 0, 1 }, + { 0x17F1, 1, 1 }, + { 0x17F2, 2, 1 }, + { 0x17F3, 3, 1 }, + { 0x17F4, 4, 1 }, + { 0x17F5, 5, 1 }, + { 0x17F6, 6, 1 }, + { 0x17F7, 7, 1 }, + { 0x17F8, 8, 1 }, + { 0x17F9, 9, 1 }, + { 0x1810, 0, 1 }, + { 0x1811, 1, 1 }, + { 0x1812, 2, 1 }, + { 0x1813, 3, 1 }, + { 0x1814, 4, 1 }, + { 0x1815, 5, 1 }, + { 0x1816, 6, 1 }, + { 0x1817, 7, 1 }, + { 0x1818, 8, 1 }, + { 0x1819, 9, 1 }, + { 0x1946, 0, 1 }, + { 0x1947, 1, 1 }, + { 0x1948, 2, 1 }, + { 0x1949, 3, 1 }, + { 0x194A, 4, 1 }, + { 0x194B, 5, 1 }, + { 0x194C, 6, 1 }, + { 0x194D, 7, 1 }, + { 0x194E, 8, 1 }, + { 0x194F, 9, 1 }, + { 0x19D0, 0, 1 }, + { 0x19D1, 1, 1 }, + { 0x19D2, 2, 1 }, + { 0x19D3, 3, 1 }, + { 0x19D4, 4, 1 }, + { 0x19D5, 5, 1 }, + { 0x19D6, 6, 1 }, + { 0x19D7, 7, 1 }, + { 0x19D8, 8, 1 }, + { 0x19D9, 9, 1 }, + { 0x1B50, 0, 1 }, + { 0x1B51, 1, 1 }, + { 0x1B52, 2, 1 }, + { 0x1B53, 3, 1 }, + { 0x1B54, 4, 1 }, + { 0x1B55, 5, 1 }, + { 0x1B56, 6, 1 }, + { 0x1B57, 7, 1 }, + { 0x1B58, 8, 1 }, + { 0x1B59, 9, 1 }, + { 0x1BB0, 0, 1 }, + { 0x1BB1, 1, 1 }, + { 0x1BB2, 2, 1 }, + { 0x1BB3, 3, 1 }, + { 0x1BB4, 4, 1 }, + { 0x1BB5, 5, 1 }, + { 0x1BB6, 6, 1 }, + { 0x1BB7, 7, 1 }, + { 0x1BB8, 8, 1 }, + { 0x1BB9, 9, 1 }, + { 0x1C40, 0, 1 }, + { 0x1C41, 1, 1 }, + { 0x1C42, 2, 1 }, + { 0x1C43, 3, 1 }, + { 0x1C44, 4, 1 }, + { 0x1C45, 5, 1 }, + { 0x1C46, 6, 1 }, + { 0x1C47, 7, 1 }, + { 0x1C48, 8, 1 }, + { 0x1C49, 9, 1 }, + { 0x1C50, 0, 1 }, + { 0x1C51, 1, 1 }, + { 0x1C52, 2, 1 }, + { 0x1C53, 3, 1 }, + { 0x1C54, 4, 1 }, + { 0x1C55, 5, 1 }, + { 0x1C56, 6, 1 }, + { 0x1C57, 7, 1 }, + { 0x1C58, 8, 1 }, + { 0x1C59, 9, 1 }, + { 0x2070, 0, 1 }, + { 0x2074, 4, 1 }, + { 0x2075, 5, 1 }, + { 0x2076, 6, 1 }, + { 0x2077, 7, 1 }, + { 0x2078, 8, 1 }, + { 0x2079, 9, 1 }, + { 0x2080, 0, 1 }, + { 0x2081, 1, 1 }, + { 0x2082, 2, 1 }, + { 0x2083, 3, 1 }, + { 0x2084, 4, 1 }, + { 0x2085, 5, 1 }, + { 0x2086, 6, 1 }, + { 0x2087, 7, 1 }, + { 0x2088, 8, 1 }, + { 0x2089, 9, 1 }, + { 0x2153, 1, 3 }, + { 0x2154, 2, 3 }, + { 0x2155, 1, 5 }, + { 0x2156, 2, 5 }, + { 0x2157, 3, 5 }, + { 0x2158, 4, 5 }, + { 0x2159, 1, 6 }, + { 0x215A, 5, 6 }, + { 0x215B, 1, 8 }, + { 0x215C, 3, 8 }, + { 0x215D, 5, 8 }, + { 0x215E, 7, 8 }, + { 0x215F, 1, 1 }, + { 0x2160, 1, 1 }, + { 0x2161, 2, 1 }, + { 0x2162, 3, 1 }, + { 0x2163, 4, 1 }, + { 0x2164, 5, 1 }, + { 0x2165, 6, 1 }, + { 0x2166, 7, 1 }, + { 0x2167, 8, 1 }, + { 0x2168, 9, 1 }, + { 0x2169, 10, 1 }, + { 0x216A, 11, 1 }, + { 0x216B, 12, 1 }, + { 0x216C, 50, 1 }, + { 0x216D, 100, 1 }, + { 0x216E, 500, 1 }, + { 0x216F, 1000, 1 }, + { 0x2170, 1, 1 }, + { 0x2171, 2, 1 }, + { 0x2172, 3, 1 }, + { 0x2173, 4, 1 }, + { 0x2174, 5, 1 }, + { 0x2175, 6, 1 }, + { 0x2176, 7, 1 }, + { 0x2177, 8, 1 }, + { 0x2178, 9, 1 }, + { 0x2179, 10, 1 }, + { 0x217A, 11, 1 }, + { 0x217B, 12, 1 }, + { 0x217C, 50, 1 }, + { 0x217D, 100, 1 }, + { 0x217E, 500, 1 }, + { 0x217F, 1000, 1 }, + { 0x2180, 1000, 1 }, + { 0x2181, 5000, 1 }, + { 0x2182, 10000, 1 }, + { 0x2185, 6, 1 }, + { 0x2186, 50, 1 }, + { 0x2187, 50000, 1 }, + { 0x2188, 100000, 1 }, + { 0x2460, 1, 1 }, + { 0x2461, 2, 1 }, + { 0x2462, 3, 1 }, + { 0x2463, 4, 1 }, + { 0x2464, 5, 1 }, + { 0x2465, 6, 1 }, + { 0x2466, 7, 1 }, + { 0x2467, 8, 1 }, + { 0x2468, 9, 1 }, + { 0x2469, 10, 1 }, + { 0x246A, 11, 1 }, + { 0x246B, 12, 1 }, + { 0x246C, 13, 1 }, + { 0x246D, 14, 1 }, + { 0x246E, 15, 1 }, + { 0x246F, 16, 1 }, + { 0x2470, 17, 1 }, + { 0x2471, 18, 1 }, + { 0x2472, 19, 1 }, + { 0x2473, 20, 1 }, + { 0x2474, 1, 1 }, + { 0x2475, 2, 1 }, + { 0x2476, 3, 1 }, + { 0x2477, 4, 1 }, + { 0x2478, 5, 1 }, + { 0x2479, 6, 1 }, + { 0x247A, 7, 1 }, + { 0x247B, 8, 1 }, + { 0x247C, 9, 1 }, + { 0x247D, 10, 1 }, + { 0x247E, 11, 1 }, + { 0x247F, 12, 1 }, + { 0x2480, 13, 1 }, + { 0x2481, 14, 1 }, + { 0x2482, 15, 1 }, + { 0x2483, 16, 1 }, + { 0x2484, 17, 1 }, + { 0x2485, 18, 1 }, + { 0x2486, 19, 1 }, + { 0x2487, 20, 1 }, + { 0x2488, 1, 1 }, + { 0x2489, 2, 1 }, + { 0x248A, 3, 1 }, + { 0x248B, 4, 1 }, + { 0x248C, 5, 1 }, + { 0x248D, 6, 1 }, + { 0x248E, 7, 1 }, + { 0x248F, 8, 1 }, + { 0x2490, 9, 1 }, + { 0x2491, 10, 1 }, + { 0x2492, 11, 1 }, + { 0x2493, 12, 1 }, + { 0x2494, 13, 1 }, + { 0x2495, 14, 1 }, + { 0x2496, 15, 1 }, + { 0x2497, 16, 1 }, + { 0x2498, 17, 1 }, + { 0x2499, 18, 1 }, + { 0x249A, 19, 1 }, + { 0x249B, 20, 1 }, + { 0x24EA, 0, 1 }, + { 0x24EB, 11, 1 }, + { 0x24EC, 12, 1 }, + { 0x24ED, 13, 1 }, + { 0x24EE, 14, 1 }, + { 0x24EF, 15, 1 }, + { 0x24F0, 16, 1 }, + { 0x24F1, 17, 1 }, + { 0x24F2, 18, 1 }, + { 0x24F3, 19, 1 }, + { 0x24F4, 20, 1 }, + { 0x24F5, 1, 1 }, + { 0x24F6, 2, 1 }, + { 0x24F7, 3, 1 }, + { 0x24F8, 4, 1 }, + { 0x24F9, 5, 1 }, + { 0x24FA, 6, 1 }, + { 0x24FB, 7, 1 }, + { 0x24FC, 8, 1 }, + { 0x24FD, 9, 1 }, + { 0x24FE, 10, 1 }, + { 0x24FF, 0, 1 }, + { 0x2776, 1, 1 }, + { 0x2777, 2, 1 }, + { 0x2778, 3, 1 }, + { 0x2779, 4, 1 }, + { 0x277A, 5, 1 }, + { 0x277B, 6, 1 }, + { 0x277C, 7, 1 }, + { 0x277D, 8, 1 }, + { 0x277E, 9, 1 }, + { 0x277F, 10, 1 }, + { 0x2780, 1, 1 }, + { 0x2781, 2, 1 }, + { 0x2782, 3, 1 }, + { 0x2783, 4, 1 }, + { 0x2784, 5, 1 }, + { 0x2785, 6, 1 }, + { 0x2786, 7, 1 }, + { 0x2787, 8, 1 }, + { 0x2788, 9, 1 }, + { 0x2789, 10, 1 }, + { 0x278A, 1, 1 }, + { 0x278B, 2, 1 }, + { 0x278C, 3, 1 }, + { 0x278D, 4, 1 }, + { 0x278E, 5, 1 }, + { 0x278F, 6, 1 }, + { 0x2790, 7, 1 }, + { 0x2791, 8, 1 }, + { 0x2792, 9, 1 }, + { 0x2793, 10, 1 }, + { 0x2CFD, 1, 2 }, + { 0x3007, 0, 1 }, + { 0x3021, 1, 1 }, + { 0x3022, 2, 1 }, + { 0x3023, 3, 1 }, + { 0x3024, 4, 1 }, + { 0x3025, 5, 1 }, + { 0x3026, 6, 1 }, + { 0x3027, 7, 1 }, + { 0x3028, 8, 1 }, + { 0x3029, 9, 1 }, + { 0x3038, 10, 1 }, + { 0x3039, 20, 1 }, + { 0x303A, 30, 1 }, + { 0x3192, 1, 1 }, + { 0x3193, 2, 1 }, + { 0x3194, 3, 1 }, + { 0x3195, 4, 1 }, + { 0x3220, 1, 1 }, + { 0x3221, 2, 1 }, + { 0x3222, 3, 1 }, + { 0x3223, 4, 1 }, + { 0x3224, 5, 1 }, + { 0x3225, 6, 1 }, + { 0x3226, 7, 1 }, + { 0x3227, 8, 1 }, + { 0x3228, 9, 1 }, + { 0x3229, 10, 1 }, + { 0x3251, 21, 1 }, + { 0x3252, 22, 1 }, + { 0x3253, 23, 1 }, + { 0x3254, 24, 1 }, + { 0x3255, 25, 1 }, + { 0x3256, 26, 1 }, + { 0x3257, 27, 1 }, + { 0x3258, 28, 1 }, + { 0x3259, 29, 1 }, + { 0x325A, 30, 1 }, + { 0x325B, 31, 1 }, + { 0x325C, 32, 1 }, + { 0x325D, 33, 1 }, + { 0x325E, 34, 1 }, + { 0x325F, 35, 1 }, + { 0x3280, 1, 1 }, + { 0x3281, 2, 1 }, + { 0x3282, 3, 1 }, + { 0x3283, 4, 1 }, + { 0x3284, 5, 1 }, + { 0x3285, 6, 1 }, + { 0x3286, 7, 1 }, + { 0x3287, 8, 1 }, + { 0x3288, 9, 1 }, + { 0x3289, 10, 1 }, + { 0x32B1, 36, 1 }, + { 0x32B2, 37, 1 }, + { 0x32B3, 38, 1 }, + { 0x32B4, 39, 1 }, + { 0x32B5, 40, 1 }, + { 0x32B6, 41, 1 }, + { 0x32B7, 42, 1 }, + { 0x32B8, 43, 1 }, + { 0x32B9, 44, 1 }, + { 0x32BA, 45, 1 }, + { 0x32BB, 46, 1 }, + { 0x32BC, 47, 1 }, + { 0x32BD, 48, 1 }, + { 0x32BE, 49, 1 }, + { 0x32BF, 50, 1 }, + { 0xA620, 0, 1 }, + { 0xA621, 1, 1 }, + { 0xA622, 2, 1 }, + { 0xA623, 3, 1 }, + { 0xA624, 4, 1 }, + { 0xA625, 5, 1 }, + { 0xA626, 6, 1 }, + { 0xA627, 7, 1 }, + { 0xA628, 8, 1 }, + { 0xA629, 9, 1 }, + { 0xA8D0, 0, 1 }, + { 0xA8D1, 1, 1 }, + { 0xA8D2, 2, 1 }, + { 0xA8D3, 3, 1 }, + { 0xA8D4, 4, 1 }, + { 0xA8D5, 5, 1 }, + { 0xA8D6, 6, 1 }, + { 0xA8D7, 7, 1 }, + { 0xA8D8, 8, 1 }, + { 0xA8D9, 9, 1 }, + { 0xA900, 0, 1 }, + { 0xA901, 1, 1 }, + { 0xA902, 2, 1 }, + { 0xA903, 3, 1 }, + { 0xA904, 4, 1 }, + { 0xA905, 5, 1 }, + { 0xA906, 6, 1 }, + { 0xA907, 7, 1 }, + { 0xA908, 8, 1 }, + { 0xA909, 9, 1 }, + { 0xAA50, 0, 1 }, + { 0xAA51, 1, 1 }, + { 0xAA52, 2, 1 }, + { 0xAA53, 3, 1 }, + { 0xAA54, 4, 1 }, + { 0xAA55, 5, 1 }, + { 0xAA56, 6, 1 }, + { 0xAA57, 7, 1 }, + { 0xAA58, 8, 1 }, + { 0xAA59, 9, 1 }, + { 0xF96B, 3, 1 }, + { 0xF973, 10, 1 }, + { 0xF978, 2, 1 }, + { 0xF9B2, 0, 1 }, + { 0xF9D1, 6, 1 }, + { 0xF9D3, 6, 1 }, + { 0xF9FD, 10, 1 }, + { 0xFF10, 0, 1 }, + { 0xFF11, 1, 1 }, + { 0xFF12, 2, 1 }, + { 0xFF13, 3, 1 }, + { 0xFF14, 4, 1 }, + { 0xFF15, 5, 1 }, + { 0xFF16, 6, 1 }, + { 0xFF17, 7, 1 }, + { 0xFF18, 8, 1 }, + { 0xFF19, 9, 1 }, + { 0x10107, 1, 1 }, + { 0x10108, 2, 1 }, + { 0x10109, 3, 1 }, + { 0x1010A, 4, 1 }, + { 0x1010B, 5, 1 }, + { 0x1010C, 6, 1 }, + { 0x1010D, 7, 1 }, + { 0x1010E, 8, 1 }, + { 0x1010F, 9, 1 }, + { 0x10110, 10, 1 }, + { 0x10111, 20, 1 }, + { 0x10112, 30, 1 }, + { 0x10113, 40, 1 }, + { 0x10114, 50, 1 }, + { 0x10115, 60, 1 }, + { 0x10116, 70, 1 }, + { 0x10117, 80, 1 }, + { 0x10118, 90, 1 }, + { 0x10119, 100, 1 }, + { 0x1011A, 200, 1 }, + { 0x1011B, 300, 1 }, + { 0x1011C, 400, 1 }, + { 0x1011D, 500, 1 }, + { 0x1011E, 600, 1 }, + { 0x1011F, 700, 1 }, + { 0x10120, 800, 1 }, + { 0x10121, 900, 1 }, + { 0x10122, 1000, 1 }, + { 0x10123, 2000, 1 }, + { 0x10124, 3000, 1 }, + { 0x10125, 4000, 1 }, + { 0x10126, 5000, 1 }, + { 0x10127, 6000, 1 }, + { 0x10128, 7000, 1 }, + { 0x10129, 8000, 1 }, + { 0x1012A, 9000, 1 }, + { 0x1012B, 10000, 1 }, + { 0x1012C, 20000, 1 }, + { 0x1012D, 30000, 1 }, + { 0x1012E, 40000, 1 }, + { 0x1012F, 50000, 1 }, + { 0x10130, 60000, 1 }, + { 0x10131, 70000, 1 }, + { 0x10132, 80000, 1 }, + { 0x10133, 90000, 1 }, + { 0x10140, 1, 4 }, + { 0x10141, 1, 2 }, + { 0x10142, 1, 1 }, + { 0x10143, 5, 1 }, + { 0x10144, 50, 1 }, + { 0x10145, 500, 1 }, + { 0x10146, 5000, 1 }, + { 0x10147, 50000, 1 }, + { 0x10148, 5, 1 }, + { 0x10149, 10, 1 }, + { 0x1014A, 50, 1 }, + { 0x1014B, 100, 1 }, + { 0x1014C, 500, 1 }, + { 0x1014D, 1000, 1 }, + { 0x1014E, 5000, 1 }, + { 0x1014F, 5, 1 }, + { 0x10150, 10, 1 }, + { 0x10151, 50, 1 }, + { 0x10152, 100, 1 }, + { 0x10153, 500, 1 }, + { 0x10154, 1000, 1 }, + { 0x10155, 10000, 1 }, + { 0x10156, 50000, 1 }, + { 0x10157, 10, 1 }, + { 0x10158, 1, 1 }, + { 0x10159, 1, 1 }, + { 0x1015A, 1, 1 }, + { 0x1015B, 2, 1 }, + { 0x1015C, 2, 1 }, + { 0x1015D, 2, 1 }, + { 0x1015E, 2, 1 }, + { 0x1015F, 5, 1 }, + { 0x10160, 10, 1 }, + { 0x10161, 10, 1 }, + { 0x10162, 10, 1 }, + { 0x10163, 10, 1 }, + { 0x10164, 10, 1 }, + { 0x10165, 30, 1 }, + { 0x10166, 50, 1 }, + { 0x10167, 50, 1 }, + { 0x10168, 50, 1 }, + { 0x10169, 50, 1 }, + { 0x1016A, 100, 1 }, + { 0x1016B, 300, 1 }, + { 0x1016C, 500, 1 }, + { 0x1016D, 500, 1 }, + { 0x1016E, 500, 1 }, + { 0x1016F, 500, 1 }, + { 0x10170, 500, 1 }, + { 0x10171, 1000, 1 }, + { 0x10172, 5000, 1 }, + { 0x10173, 5, 1 }, + { 0x10174, 50, 1 }, + { 0x10175, 1, 2 }, + { 0x10176, 1, 2 }, + { 0x10177, 2, 3 }, + { 0x10178, 3, 4 }, + { 0x1018A, 0, 1 }, + { 0x10320, 1, 1 }, + { 0x10321, 5, 1 }, + { 0x10322, 10, 1 }, + { 0x10323, 50, 1 }, + { 0x10341, 90, 1 }, + { 0x1034A, 900, 1 }, + { 0x103D1, 1, 1 }, + { 0x103D2, 2, 1 }, + { 0x103D3, 10, 1 }, + { 0x103D4, 20, 1 }, + { 0x103D5, 100, 1 }, + { 0x104A0, 0, 1 }, + { 0x104A1, 1, 1 }, + { 0x104A2, 2, 1 }, + { 0x104A3, 3, 1 }, + { 0x104A4, 4, 1 }, + { 0x104A5, 5, 1 }, + { 0x104A6, 6, 1 }, + { 0x104A7, 7, 1 }, + { 0x104A8, 8, 1 }, + { 0x104A9, 9, 1 }, + { 0x10916, 1, 1 }, + { 0x10917, 10, 1 }, + { 0x10918, 20, 1 }, + { 0x10919, 100, 1 }, + { 0x10A40, 1, 1 }, + { 0x10A41, 2, 1 }, + { 0x10A42, 3, 1 }, + { 0x10A43, 4, 1 }, + { 0x10A44, 10, 1 }, + { 0x10A45, 20, 1 }, + { 0x10A46, 100, 1 }, + { 0x10A47, 1000, 1 }, + { 0x12400, 2, 1 }, + { 0x12401, 3, 1 }, + { 0x12402, 4, 1 }, + { 0x12403, 5, 1 }, + { 0x12404, 6, 1 }, + { 0x12405, 7, 1 }, + { 0x12406, 8, 1 }, + { 0x12407, 9, 1 }, + { 0x12408, 3, 1 }, + { 0x12409, 4, 1 }, + { 0x1240A, 5, 1 }, + { 0x1240B, 6, 1 }, + { 0x1240C, 7, 1 }, + { 0x1240D, 8, 1 }, + { 0x1240E, 9, 1 }, + { 0x1240F, 4, 1 }, + { 0x12410, 5, 1 }, + { 0x12411, 6, 1 }, + { 0x12412, 7, 1 }, + { 0x12413, 8, 1 }, + { 0x12414, 9, 1 }, + { 0x12415, 1, 1 }, + { 0x12416, 2, 1 }, + { 0x12417, 3, 1 }, + { 0x12418, 4, 1 }, + { 0x12419, 5, 1 }, + { 0x1241A, 6, 1 }, + { 0x1241B, 7, 1 }, + { 0x1241C, 8, 1 }, + { 0x1241D, 9, 1 }, + { 0x1241E, 1, 1 }, + { 0x1241F, 2, 1 }, + { 0x12420, 3, 1 }, + { 0x12421, 4, 1 }, + { 0x12422, 5, 1 }, + { 0x12423, 2, 1 }, + { 0x12424, 3, 1 }, + { 0x12425, 3, 1 }, + { 0x12426, 4, 1 }, + { 0x12427, 5, 1 }, + { 0x12428, 6, 1 }, + { 0x12429, 7, 1 }, + { 0x1242A, 8, 1 }, + { 0x1242B, 9, 1 }, + { 0x1242C, 1, 1 }, + { 0x1242D, 2, 1 }, + { 0x1242E, 3, 1 }, + { 0x1242F, 3, 1 }, + { 0x12430, 4, 1 }, + { 0x12431, 5, 1 }, + { 0x12434, 1, 1 }, + { 0x12435, 2, 1 }, + { 0x12436, 3, 1 }, + { 0x12437, 3, 1 }, + { 0x12438, 4, 1 }, + { 0x12439, 5, 1 }, + { 0x1243A, 3, 1 }, + { 0x1243B, 3, 1 }, + { 0x1243C, 4, 1 }, + { 0x1243D, 4, 1 }, + { 0x1243E, 4, 1 }, + { 0x1243F, 4, 1 }, + { 0x12440, 6, 1 }, + { 0x12441, 7, 1 }, + { 0x12442, 7, 1 }, + { 0x12443, 7, 1 }, + { 0x12444, 8, 1 }, + { 0x12445, 8, 1 }, + { 0x12446, 9, 1 }, + { 0x12447, 9, 1 }, + { 0x12448, 9, 1 }, + { 0x12449, 9, 1 }, + { 0x1244A, 2, 1 }, + { 0x1244B, 3, 1 }, + { 0x1244C, 4, 1 }, + { 0x1244D, 5, 1 }, + { 0x1244E, 6, 1 }, + { 0x1244F, 1, 1 }, + { 0x12450, 2, 1 }, + { 0x12451, 3, 1 }, + { 0x12452, 4, 1 }, + { 0x12453, 4, 1 }, + { 0x12454, 5, 1 }, + { 0x12455, 5, 1 }, + { 0x12458, 1, 1 }, + { 0x12459, 2, 1 }, + { 0x1245A, 1, 3 }, + { 0x1245B, 2, 3 }, + { 0x1245C, 5, 6 }, + { 0x1245D, 1, 3 }, + { 0x1245E, 2, 3 }, + { 0x1245F, 1, 8 }, + { 0x12460, 1, 4 }, + { 0x12461, 1, 6 }, + { 0x12462, 1, 4 }, + { 0x1D360, 1, 1 }, + { 0x1D361, 2, 1 }, + { 0x1D362, 3, 1 }, + { 0x1D363, 4, 1 }, + { 0x1D364, 5, 1 }, + { 0x1D365, 6, 1 }, + { 0x1D366, 7, 1 }, + { 0x1D367, 8, 1 }, + { 0x1D368, 9, 1 }, + { 0x1D369, 10, 1 }, + { 0x1D36A, 20, 1 }, + { 0x1D36B, 30, 1 }, + { 0x1D36C, 40, 1 }, + { 0x1D36D, 50, 1 }, + { 0x1D36E, 60, 1 }, + { 0x1D36F, 70, 1 }, + { 0x1D370, 80, 1 }, + { 0x1D371, 90, 1 }, + { 0x1D7CE, 0, 1 }, + { 0x1D7CF, 1, 1 }, + { 0x1D7D0, 2, 1 }, + { 0x1D7D1, 3, 1 }, + { 0x1D7D2, 4, 1 }, + { 0x1D7D3, 5, 1 }, + { 0x1D7D4, 6, 1 }, + { 0x1D7D5, 7, 1 }, + { 0x1D7D6, 8, 1 }, + { 0x1D7D7, 9, 1 }, + { 0x1D7D8, 0, 1 }, + { 0x1D7D9, 1, 1 }, + { 0x1D7DA, 2, 1 }, + { 0x1D7DB, 3, 1 }, + { 0x1D7DC, 4, 1 }, + { 0x1D7DD, 5, 1 }, + { 0x1D7DE, 6, 1 }, + { 0x1D7DF, 7, 1 }, + { 0x1D7E0, 8, 1 }, + { 0x1D7E1, 9, 1 }, + { 0x1D7E2, 0, 1 }, + { 0x1D7E3, 1, 1 }, + { 0x1D7E4, 2, 1 }, + { 0x1D7E5, 3, 1 }, + { 0x1D7E6, 4, 1 }, + { 0x1D7E7, 5, 1 }, + { 0x1D7E8, 6, 1 }, + { 0x1D7E9, 7, 1 }, + { 0x1D7EA, 8, 1 }, + { 0x1D7EB, 9, 1 }, + { 0x1D7EC, 0, 1 }, + { 0x1D7ED, 1, 1 }, + { 0x1D7EE, 2, 1 }, + { 0x1D7EF, 3, 1 }, + { 0x1D7F0, 4, 1 }, + { 0x1D7F1, 5, 1 }, + { 0x1D7F2, 6, 1 }, + { 0x1D7F3, 7, 1 }, + { 0x1D7F4, 8, 1 }, + { 0x1D7F5, 9, 1 }, + { 0x1D7F6, 0, 1 }, + { 0x1D7F7, 1, 1 }, + { 0x1D7F8, 2, 1 }, + { 0x1D7F9, 3, 1 }, + { 0x1D7FA, 4, 1 }, + { 0x1D7FB, 5, 1 }, + { 0x1D7FC, 6, 1 }, + { 0x1D7FD, 7, 1 }, + { 0x1D7FE, 8, 1 }, + { 0x1D7FF, 9, 1 }, + { 0x2F890, 9, 1 } diff --git a/tests/unictype/test-pr_alphabetic.c b/tests/unictype/test-pr_alphabetic.c new file mode 100644 index 00000000..b13da5d7 --- /dev/null +++ b/tests/unictype/test-pr_alphabetic.c @@ -0,0 +1,465 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0041, 0x005A }, + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00BA, 0x00BA }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00F6 }, + { 0x00F8, 0x02C1 }, + { 0x02C6, 0x02D1 }, + { 0x02E0, 0x02E4 }, + { 0x02EC, 0x02EC }, + { 0x02EE, 0x02EE }, + { 0x0345, 0x0345 }, + { 0x0370, 0x0374 }, + { 0x0376, 0x0377 }, + { 0x037A, 0x037D }, + { 0x0386, 0x0386 }, + { 0x0388, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x03F5 }, + { 0x03F7, 0x0481 }, + { 0x048A, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0559, 0x0559 }, + { 0x0561, 0x0587 }, + { 0x05B0, 0x05BD }, + { 0x05BF, 0x05BF }, + { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, + { 0x05C7, 0x05C7 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F2 }, + { 0x0610, 0x061A }, + { 0x0621, 0x0657 }, + { 0x0659, 0x065E }, + { 0x066E, 0x06D3 }, + { 0x06D5, 0x06DC }, + { 0x06E1, 0x06E8 }, + { 0x06ED, 0x06EF }, + { 0x06FA, 0x06FC }, + { 0x06FF, 0x06FF }, + { 0x0710, 0x073F }, + { 0x074D, 0x07B1 }, + { 0x07CA, 0x07EA }, + { 0x07F4, 0x07F5 }, + { 0x07FA, 0x07FA }, + { 0x0901, 0x0939 }, + { 0x093D, 0x094C }, + { 0x0950, 0x0950 }, + { 0x0958, 0x0963 }, + { 0x0971, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0981, 0x0983 }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BD, 0x09C4 }, + { 0x09C7, 0x09C8 }, + { 0x09CB, 0x09CC }, + { 0x09CE, 0x09CE }, + { 0x09D7, 0x09D7 }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E3 }, + { 0x09F0, 0x09F1 }, + { 0x0A01, 0x0A03 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A3E, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4C }, + { 0x0A51, 0x0A51 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A70, 0x0A75 }, + { 0x0A81, 0x0A83 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABD, 0x0AC5 }, + { 0x0AC7, 0x0AC9 }, + { 0x0ACB, 0x0ACC }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE3 }, + { 0x0B01, 0x0B03 }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3D, 0x0B44 }, + { 0x0B47, 0x0B48 }, + { 0x0B4B, 0x0B4C }, + { 0x0B56, 0x0B57 }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B63 }, + { 0x0B71, 0x0B71 }, + { 0x0B82, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BBE, 0x0BC2 }, + { 0x0BC6, 0x0BC8 }, + { 0x0BCA, 0x0BCC }, + { 0x0BD0, 0x0BD0 }, + { 0x0BD7, 0x0BD7 }, + { 0x0C01, 0x0C03 }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C44 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4C }, + { 0x0C55, 0x0C56 }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C63 }, + { 0x0C82, 0x0C83 }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBD, 0x0CC4 }, + { 0x0CC6, 0x0CC8 }, + { 0x0CCA, 0x0CCC }, + { 0x0CD5, 0x0CD6 }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE3 }, + { 0x0D02, 0x0D03 }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D44 }, + { 0x0D46, 0x0D48 }, + { 0x0D4A, 0x0D4C }, + { 0x0D57, 0x0D57 }, + { 0x0D60, 0x0D63 }, + { 0x0D7A, 0x0D7F }, + { 0x0D82, 0x0D83 }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0DCF, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0DD8, 0x0DDF }, + { 0x0DF2, 0x0DF3 }, + { 0x0E01, 0x0E3A }, + { 0x0E40, 0x0E46 }, + { 0x0E4D, 0x0E4D }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB9 }, + { 0x0EBB, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EC6, 0x0EC6 }, + { 0x0ECD, 0x0ECD }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F00 }, + { 0x0F40, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F71, 0x0F81 }, + { 0x0F88, 0x0F8B }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x1000, 0x1036 }, + { 0x1038, 0x1038 }, + { 0x103B, 0x103F }, + { 0x1050, 0x1062 }, + { 0x1065, 0x1068 }, + { 0x106E, 0x1086 }, + { 0x108E, 0x108E }, + { 0x10A0, 0x10C5 }, + { 0x10D0, 0x10FA }, + { 0x10FC, 0x10FC }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x135F, 0x135F }, + { 0x1380, 0x138F }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x166C }, + { 0x166F, 0x1676 }, + { 0x1681, 0x169A }, + { 0x16A0, 0x16EA }, + { 0x16EE, 0x16F0 }, + { 0x1700, 0x170C }, + { 0x170E, 0x1713 }, + { 0x1720, 0x1733 }, + { 0x1740, 0x1753 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1772, 0x1773 }, + { 0x1780, 0x17B3 }, + { 0x17B6, 0x17C8 }, + { 0x17D7, 0x17D7 }, + { 0x17DC, 0x17DC }, + { 0x1820, 0x1877 }, + { 0x1880, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1920, 0x192B }, + { 0x1930, 0x1938 }, + { 0x1950, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19B0, 0x19C9 }, + { 0x1A00, 0x1A1B }, + { 0x1B00, 0x1B33 }, + { 0x1B35, 0x1B43 }, + { 0x1B45, 0x1B4B }, + { 0x1B80, 0x1BA9 }, + { 0x1BAE, 0x1BAF }, + { 0x1C00, 0x1C35 }, + { 0x1C4D, 0x1C4F }, + { 0x1C5A, 0x1C7D }, + { 0x1D00, 0x1DBF }, + { 0x1E00, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FBC }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FC4 }, + { 0x1FC6, 0x1FCC }, + { 0x1FD0, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FE0, 0x1FEC }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFC }, + { 0x2071, 0x2071 }, + { 0x207F, 0x207F }, + { 0x2090, 0x2094 }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2119, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x2128 }, + { 0x212A, 0x212D }, + { 0x212F, 0x2139 }, + { 0x213C, 0x213F }, + { 0x2145, 0x2149 }, + { 0x214E, 0x214E }, + { 0x2160, 0x2188 }, + { 0x24B6, 0x24E9 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CE4 }, + { 0x2D00, 0x2D25 }, + { 0x2D30, 0x2D65 }, + { 0x2D6F, 0x2D6F }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x2DE0, 0x2DFF }, + { 0x2E2F, 0x2E2F }, + { 0x3005, 0x3007 }, + { 0x3021, 0x3029 }, + { 0x3031, 0x3035 }, + { 0x3038, 0x303C }, + { 0x3041, 0x3096 }, + { 0x309D, 0x309F }, + { 0x30A1, 0x30FA }, + { 0x30FC, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x31A0, 0x31B7 }, + { 0x31F0, 0x31FF }, + { 0x3400, 0x4DB5 }, + { 0x4E00, 0x9FC3 }, + { 0xA000, 0xA48C }, + { 0xA500, 0xA60C }, + { 0xA610, 0xA61F }, + { 0xA62A, 0xA62B }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA66E }, + { 0xA67F, 0xA697 }, + { 0xA717, 0xA71F }, + { 0xA722, 0xA788 }, + { 0xA78B, 0xA78C }, + { 0xA7FB, 0xA801 }, + { 0xA803, 0xA805 }, + { 0xA807, 0xA80A }, + { 0xA80C, 0xA827 }, + { 0xA840, 0xA873 }, + { 0xA880, 0xA8C3 }, + { 0xA90A, 0xA92A }, + { 0xA930, 0xA952 }, + { 0xAA00, 0xAA36 }, + { 0xAA40, 0xAA4D }, + { 0xAC00, 0xD7A3 }, + { 0xF900, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB28 }, + { 0xFB2A, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFD3D }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDFB }, + { 0xFE70, 0xFE74 }, + { 0xFE76, 0xFEFC }, + { 0xFF21, 0xFF3A }, + { 0xFF41, 0xFF5A }, + { 0xFF66, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10140, 0x10174 }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10330, 0x1034A }, + { 0x10380, 0x1039D }, + { 0x103A0, 0x103C3 }, + { 0x103C8, 0x103CF }, + { 0x103D1, 0x103D5 }, + { 0x10400, 0x1049D }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10915 }, + { 0x10920, 0x10939 }, + { 0x10A00, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x12000, 0x1236E }, + { 0x12400, 0x12462 }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6FA }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D734 }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D76E }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D7A8 }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7CB }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D } + +#define PREDICATE(c) uc_is_property_alphabetic (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_ascii_hex_digit.c b/tests/unictype/test-pr_ascii_hex_digit.c new file mode 100644 index 00000000..df600d7b --- /dev/null +++ b/tests/unictype/test-pr_ascii_hex_digit.c @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 }, + { 0x0041, 0x0046 }, + { 0x0061, 0x0066 } + +#define PREDICATE(c) uc_is_property_ascii_hex_digit (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_arabic_digit.c b/tests/unictype/test-pr_bidi_arabic_digit.c new file mode 100644 index 00000000..f4e4edb8 --- /dev/null +++ b/tests/unictype/test-pr_bidi_arabic_digit.c @@ -0,0 +1,26 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0600, 0x0603 }, + { 0x0660, 0x0669 }, + { 0x066B, 0x066C }, + { 0x06DD, 0x06DD } + +#define PREDICATE(c) uc_is_property_bidi_arabic_digit (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_arabic_right_to_left.c b/tests/unictype/test-pr_bidi_arabic_right_to_left.c new file mode 100644 index 00000000..f329ccf1 --- /dev/null +++ b/tests/unictype/test-pr_bidi_arabic_right_to_left.c @@ -0,0 +1,47 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0604, 0x0605 }, + { 0x0608, 0x0608 }, + { 0x060B, 0x060B }, + { 0x060D, 0x060D }, + { 0x061B, 0x064A }, + { 0x065F, 0x065F }, + { 0x066D, 0x066F }, + { 0x0671, 0x06D5 }, + { 0x06E5, 0x06E6 }, + { 0x06EE, 0x06EF }, + { 0x06FA, 0x070E }, + { 0x0710, 0x0710 }, + { 0x0712, 0x072F }, + { 0x074B, 0x07A5 }, + { 0x07B1, 0x07BF }, + { 0x2065, 0x2069 }, + { 0xFB50, 0xFD3D }, + { 0xFD40, 0xFDCF }, + { 0xFDF0, 0xFDFC }, + { 0xFDFE, 0xFDFF }, + { 0xFE1A, 0xFE1F }, + { 0xFE27, 0xFE2F }, + { 0xFE53, 0xFE53 }, + { 0xFE67, 0xFE67 }, + { 0xFE6C, 0xFEFE } + +#define PREDICATE(c) uc_is_property_bidi_arabic_right_to_left (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_block_separator.c b/tests/unictype/test-pr_bidi_block_separator.c new file mode 100644 index 00000000..4b4353d2 --- /dev/null +++ b/tests/unictype/test-pr_bidi_block_separator.c @@ -0,0 +1,27 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x000A, 0x000A }, + { 0x000D, 0x000D }, + { 0x001C, 0x001E }, + { 0x0085, 0x0085 }, + { 0x2029, 0x2029 } + +#define PREDICATE(c) uc_is_property_bidi_block_separator (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_boundary_neutral.c b/tests/unictype/test-pr_bidi_boundary_neutral.c new file mode 100644 index 00000000..19a67d1b --- /dev/null +++ b/tests/unictype/test-pr_bidi_boundary_neutral.c @@ -0,0 +1,53 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0000, 0x0008 }, + { 0x000E, 0x001B }, + { 0x007F, 0x0084 }, + { 0x0086, 0x009F }, + { 0x00AD, 0x00AD }, + { 0x070F, 0x070F }, + { 0x200B, 0x200D }, + { 0x2060, 0x2064 }, + { 0x206A, 0x206F }, + { 0xFDD0, 0xFDEF }, + { 0xFEFF, 0xFEFF }, + { 0xFFF0, 0xFFF8 }, + { 0xFFFE, 0xFFFF }, + { 0x1D173, 0x1D17A }, + { 0x1FFFE, 0x1FFFF }, + { 0x2FFFE, 0x2FFFF }, + { 0x3FFFE, 0x3FFFF }, + { 0x4FFFE, 0x4FFFF }, + { 0x5FFFE, 0x5FFFF }, + { 0x6FFFE, 0x6FFFF }, + { 0x7FFFE, 0x7FFFF }, + { 0x8FFFE, 0x8FFFF }, + { 0x9FFFE, 0x9FFFF }, + { 0xAFFFE, 0xAFFFF }, + { 0xBFFFE, 0xBFFFF }, + { 0xCFFFE, 0xCFFFF }, + { 0xDFFFE, 0xE00FF }, + { 0xE01F0, 0xE0FFF }, + { 0xEFFFE, 0xEFFFF }, + { 0xFFFFE, 0xFFFFF }, + { 0x10FFFE, 0x10FFFF } + +#define PREDICATE(c) uc_is_property_bidi_boundary_neutral (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_common_separator.c b/tests/unictype/test-pr_bidi_common_separator.c new file mode 100644 index 00000000..eeca1825 --- /dev/null +++ b/tests/unictype/test-pr_bidi_common_separator.c @@ -0,0 +1,35 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x002C, 0x002C }, + { 0x002E, 0x002F }, + { 0x003A, 0x003A }, + { 0x00A0, 0x00A0 }, + { 0x060C, 0x060C }, + { 0x202F, 0x202F }, + { 0x2044, 0x2044 }, + { 0xFE50, 0xFE50 }, + { 0xFE52, 0xFE52 }, + { 0xFE55, 0xFE55 }, + { 0xFF0C, 0xFF0C }, + { 0xFF0E, 0xFF0F }, + { 0xFF1A, 0xFF1A } + +#define PREDICATE(c) uc_is_property_bidi_common_separator (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_control.c b/tests/unictype/test-pr_bidi_control.c new file mode 100644 index 00000000..151f116f --- /dev/null +++ b/tests/unictype/test-pr_bidi_control.c @@ -0,0 +1,24 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x200E, 0x200F }, + { 0x202A, 0x202E } + +#define PREDICATE(c) uc_is_property_bidi_control (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_embedding_or_override.c b/tests/unictype/test-pr_bidi_embedding_or_override.c new file mode 100644 index 00000000..4a977170 --- /dev/null +++ b/tests/unictype/test-pr_bidi_embedding_or_override.c @@ -0,0 +1,24 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x202A, 0x202B }, + { 0x202D, 0x202E } + +#define PREDICATE(c) uc_is_property_bidi_embedding_or_override (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_eur_num_separator.c b/tests/unictype/test-pr_bidi_eur_num_separator.c new file mode 100644 index 00000000..9b984f6b --- /dev/null +++ b/tests/unictype/test-pr_bidi_eur_num_separator.c @@ -0,0 +1,31 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x002B, 0x002B }, + { 0x002D, 0x002D }, + { 0x207A, 0x207B }, + { 0x208A, 0x208B }, + { 0x2212, 0x2212 }, + { 0xFB29, 0xFB29 }, + { 0xFE62, 0xFE63 }, + { 0xFF0B, 0xFF0B }, + { 0xFF0D, 0xFF0D } + +#define PREDICATE(c) uc_is_property_bidi_eur_num_separator (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_eur_num_terminator.c b/tests/unictype/test-pr_bidi_eur_num_terminator.c new file mode 100644 index 00000000..22f28381 --- /dev/null +++ b/tests/unictype/test-pr_bidi_eur_num_terminator.c @@ -0,0 +1,41 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0023, 0x0025 }, + { 0x00A2, 0x00A5 }, + { 0x00B0, 0x00B1 }, + { 0x0609, 0x060A }, + { 0x066A, 0x066A }, + { 0x09F2, 0x09F3 }, + { 0x0AF1, 0x0AF1 }, + { 0x0BF9, 0x0BF9 }, + { 0x0E3F, 0x0E3F }, + { 0x17DB, 0x17DB }, + { 0x2030, 0x2034 }, + { 0x20A0, 0x20B5 }, + { 0x212E, 0x212E }, + { 0x2213, 0x2213 }, + { 0xFE5F, 0xFE5F }, + { 0xFE69, 0xFE6A }, + { 0xFF03, 0xFF05 }, + { 0xFFE0, 0xFFE1 }, + { 0xFFE5, 0xFFE6 } + +#define PREDICATE(c) uc_is_property_bidi_eur_num_terminator (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_european_digit.c b/tests/unictype/test-pr_bidi_european_digit.c new file mode 100644 index 00000000..63a3a87c --- /dev/null +++ b/tests/unictype/test-pr_bidi_european_digit.c @@ -0,0 +1,32 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 }, + { 0x00B2, 0x00B3 }, + { 0x00B9, 0x00B9 }, + { 0x06F0, 0x06F9 }, + { 0x2070, 0x2070 }, + { 0x2074, 0x2079 }, + { 0x2080, 0x2089 }, + { 0x2488, 0x249B }, + { 0xFF10, 0xFF19 }, + { 0x1D7CE, 0x1D7FF } + +#define PREDICATE(c) uc_is_property_bidi_european_digit (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_hebrew_right_to_left.c b/tests/unictype/test-pr_bidi_hebrew_right_to_left.c new file mode 100644 index 00000000..5a0a4e4b --- /dev/null +++ b/tests/unictype/test-pr_bidi_hebrew_right_to_left.c @@ -0,0 +1,42 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0590, 0x0590 }, + { 0x05BE, 0x05BE }, + { 0x05C0, 0x05C0 }, + { 0x05C3, 0x05C3 }, + { 0x05C6, 0x05C6 }, + { 0x05C8, 0x05FF }, + { 0x07C0, 0x07EA }, + { 0x07F4, 0x07F5 }, + { 0x07FA, 0x08FF }, + { 0x200F, 0x200F }, + { 0xFB1D, 0xFB1D }, + { 0xFB1F, 0xFB28 }, + { 0xFB2A, 0xFB4F }, + { 0x10800, 0x1091E }, + { 0x10920, 0x10A00 }, + { 0x10A04, 0x10A04 }, + { 0x10A07, 0x10A0B }, + { 0x10A10, 0x10A37 }, + { 0x10A3B, 0x10A3E }, + { 0x10A40, 0x10FFF } + +#define PREDICATE(c) uc_is_property_bidi_hebrew_right_to_left (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_left_to_right.c b/tests/unictype/test-pr_bidi_left_to_right.c new file mode 100644 index 00000000..09617edb --- /dev/null +++ b/tests/unictype/test-pr_bidi_left_to_right.c @@ -0,0 +1,295 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0041, 0x005A }, + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00BA, 0x00BA }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00F6 }, + { 0x00F8, 0x02B8 }, + { 0x02BB, 0x02C1 }, + { 0x02D0, 0x02D1 }, + { 0x02E0, 0x02E4 }, + { 0x02EE, 0x02EE }, + { 0x0370, 0x0373 }, + { 0x0376, 0x037D }, + { 0x037F, 0x0383 }, + { 0x0386, 0x0386 }, + { 0x0388, 0x03F5 }, + { 0x03F7, 0x0482 }, + { 0x048A, 0x0589 }, + { 0x058B, 0x058F }, + { 0x0900, 0x0900 }, + { 0x0903, 0x093B }, + { 0x093D, 0x0940 }, + { 0x0949, 0x094C }, + { 0x094E, 0x0950 }, + { 0x0955, 0x0961 }, + { 0x0964, 0x0980 }, + { 0x0982, 0x09BB }, + { 0x09BD, 0x09C0 }, + { 0x09C5, 0x09CC }, + { 0x09CE, 0x09E1 }, + { 0x09E4, 0x09F1 }, + { 0x09F4, 0x0A00 }, + { 0x0A03, 0x0A3B }, + { 0x0A3D, 0x0A40 }, + { 0x0A43, 0x0A46 }, + { 0x0A49, 0x0A4A }, + { 0x0A4E, 0x0A50 }, + { 0x0A52, 0x0A6F }, + { 0x0A72, 0x0A74 }, + { 0x0A76, 0x0A80 }, + { 0x0A83, 0x0ABB }, + { 0x0ABD, 0x0AC0 }, + { 0x0AC6, 0x0AC6 }, + { 0x0AC9, 0x0ACC }, + { 0x0ACE, 0x0AE1 }, + { 0x0AE4, 0x0AF0 }, + { 0x0AF2, 0x0B00 }, + { 0x0B02, 0x0B3B }, + { 0x0B3D, 0x0B3E }, + { 0x0B40, 0x0B40 }, + { 0x0B45, 0x0B4C }, + { 0x0B4E, 0x0B55 }, + { 0x0B57, 0x0B61 }, + { 0x0B64, 0x0B81 }, + { 0x0B83, 0x0BBF }, + { 0x0BC1, 0x0BCC }, + { 0x0BCE, 0x0BF2 }, + { 0x0BFB, 0x0C3D }, + { 0x0C41, 0x0C45 }, + { 0x0C49, 0x0C49 }, + { 0x0C4E, 0x0C54 }, + { 0x0C57, 0x0C61 }, + { 0x0C64, 0x0C77 }, + { 0x0C7F, 0x0CBB }, + { 0x0CBD, 0x0CCB }, + { 0x0CCE, 0x0CE1 }, + { 0x0CE4, 0x0CF0 }, + { 0x0CF3, 0x0D40 }, + { 0x0D45, 0x0D4C }, + { 0x0D4E, 0x0D61 }, + { 0x0D64, 0x0DC9 }, + { 0x0DCB, 0x0DD1 }, + { 0x0DD5, 0x0DD5 }, + { 0x0DD7, 0x0E30 }, + { 0x0E32, 0x0E33 }, + { 0x0E3B, 0x0E3E }, + { 0x0E40, 0x0E46 }, + { 0x0E4F, 0x0EB0 }, + { 0x0EB2, 0x0EB3 }, + { 0x0EBA, 0x0EBA }, + { 0x0EBD, 0x0EC7 }, + { 0x0ECE, 0x0F17 }, + { 0x0F1A, 0x0F34 }, + { 0x0F36, 0x0F36 }, + { 0x0F38, 0x0F38 }, + { 0x0F3E, 0x0F70 }, + { 0x0F7F, 0x0F7F }, + { 0x0F85, 0x0F85 }, + { 0x0F88, 0x0F8F }, + { 0x0F98, 0x0F98 }, + { 0x0FBD, 0x0FC5 }, + { 0x0FC7, 0x102C }, + { 0x1031, 0x1031 }, + { 0x1038, 0x1038 }, + { 0x103B, 0x103C }, + { 0x103F, 0x1057 }, + { 0x105A, 0x105D }, + { 0x1061, 0x1070 }, + { 0x1075, 0x1081 }, + { 0x1083, 0x1084 }, + { 0x1087, 0x108C }, + { 0x108E, 0x135E }, + { 0x1360, 0x138F }, + { 0x139A, 0x167F }, + { 0x1681, 0x169A }, + { 0x169D, 0x1711 }, + { 0x1715, 0x1731 }, + { 0x1735, 0x1751 }, + { 0x1754, 0x1771 }, + { 0x1774, 0x17B6 }, + { 0x17BE, 0x17C5 }, + { 0x17C7, 0x17C8 }, + { 0x17D4, 0x17DA }, + { 0x17DC, 0x17DC }, + { 0x17DE, 0x17EF }, + { 0x17FA, 0x17FF }, + { 0x180F, 0x18A8 }, + { 0x18AA, 0x191F }, + { 0x1923, 0x1926 }, + { 0x1929, 0x1931 }, + { 0x1933, 0x1938 }, + { 0x193C, 0x193F }, + { 0x1941, 0x1943 }, + { 0x1946, 0x19DD }, + { 0x1A00, 0x1A16 }, + { 0x1A19, 0x1AFF }, + { 0x1B04, 0x1B33 }, + { 0x1B35, 0x1B35 }, + { 0x1B3B, 0x1B3B }, + { 0x1B3D, 0x1B41 }, + { 0x1B43, 0x1B6A }, + { 0x1B74, 0x1B7F }, + { 0x1B82, 0x1BA1 }, + { 0x1BA6, 0x1BA7 }, + { 0x1BAA, 0x1C2B }, + { 0x1C34, 0x1C35 }, + { 0x1C38, 0x1DBF }, + { 0x1DE7, 0x1DFD }, + { 0x1E00, 0x1FBC }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FCC }, + { 0x1FD0, 0x1FDC }, + { 0x1FE0, 0x1FEC }, + { 0x1FF0, 0x1FFC }, + { 0x1FFF, 0x1FFF }, + { 0x200E, 0x200E }, + { 0x2071, 0x2073 }, + { 0x207F, 0x207F }, + { 0x208F, 0x209F }, + { 0x20B6, 0x20CF }, + { 0x20F1, 0x20FF }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2119, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x2128 }, + { 0x212A, 0x212D }, + { 0x212F, 0x2139 }, + { 0x213C, 0x213F }, + { 0x2145, 0x2149 }, + { 0x214E, 0x2152 }, + { 0x2160, 0x218F }, + { 0x2336, 0x237A }, + { 0x2395, 0x2395 }, + { 0x23E8, 0x23FF }, + { 0x2427, 0x243F }, + { 0x244B, 0x245F }, + { 0x249C, 0x24E9 }, + { 0x269E, 0x269F }, + { 0x26AC, 0x26AC }, + { 0x26BD, 0x26BF }, + { 0x26C4, 0x2700 }, + { 0x2705, 0x2705 }, + { 0x270A, 0x270B }, + { 0x2728, 0x2728 }, + { 0x274C, 0x274C }, + { 0x274E, 0x274E }, + { 0x2753, 0x2755 }, + { 0x2757, 0x2757 }, + { 0x275F, 0x2760 }, + { 0x2795, 0x2797 }, + { 0x27B0, 0x27B0 }, + { 0x27BF, 0x27BF }, + { 0x27CB, 0x27CB }, + { 0x27CD, 0x27CF }, + { 0x2800, 0x28FF }, + { 0x2B4D, 0x2B4F }, + { 0x2B55, 0x2CE4 }, + { 0x2CEB, 0x2CF8 }, + { 0x2D00, 0x2DDF }, + { 0x2E31, 0x2E7F }, + { 0x2E9A, 0x2E9A }, + { 0x2EF4, 0x2EFF }, + { 0x2FD6, 0x2FEF }, + { 0x2FFC, 0x2FFF }, + { 0x3005, 0x3007 }, + { 0x3021, 0x3029 }, + { 0x3031, 0x3035 }, + { 0x3038, 0x303C }, + { 0x3040, 0x3098 }, + { 0x309D, 0x309F }, + { 0x30A1, 0x30FA }, + { 0x30FC, 0x31BF }, + { 0x31E4, 0x321C }, + { 0x321F, 0x324F }, + { 0x3260, 0x327B }, + { 0x327F, 0x32B0 }, + { 0x32C0, 0x32CB }, + { 0x32D0, 0x3376 }, + { 0x337B, 0x33DD }, + { 0x33E0, 0x33FE }, + { 0x3400, 0x4DBF }, + { 0x4E00, 0xA48F }, + { 0xA4C7, 0xA60C }, + { 0xA610, 0xA66E }, + { 0xA674, 0xA67B }, + { 0xA680, 0xA6FF }, + { 0xA722, 0xA787 }, + { 0xA789, 0xA801 }, + { 0xA803, 0xA805 }, + { 0xA807, 0xA80A }, + { 0xA80C, 0xA824 }, + { 0xA827, 0xA827 }, + { 0xA82C, 0xA873 }, + { 0xA878, 0xA8C3 }, + { 0xA8C5, 0xA925 }, + { 0xA92E, 0xA946 }, + { 0xA952, 0xAA28 }, + { 0xAA2F, 0xAA30 }, + { 0xAA33, 0xAA34 }, + { 0xAA37, 0xAA42 }, + { 0xAA44, 0xAA4B }, + { 0xAA4D, 0xFB1C }, + { 0xFF00, 0xFF00 }, + { 0xFF21, 0xFF3A }, + { 0xFF41, 0xFF5A }, + { 0xFF66, 0xFFDF }, + { 0xFFE7, 0xFFE7 }, + { 0xFFEF, 0xFFEF }, + { 0x10000, 0x10100 }, + { 0x10102, 0x1013F }, + { 0x1018B, 0x1018F }, + { 0x1019C, 0x101FC }, + { 0x101FE, 0x107FF }, + { 0x11000, 0x1D166 }, + { 0x1D16A, 0x1D172 }, + { 0x1D183, 0x1D184 }, + { 0x1D18C, 0x1D1A9 }, + { 0x1D1AE, 0x1D1FF }, + { 0x1D246, 0x1D2FF }, + { 0x1D357, 0x1D7CD }, + { 0x1D800, 0x1EFFF }, + { 0x1F02C, 0x1F02F }, + { 0x1F094, 0x1FFFD }, + { 0x20000, 0x2FFFD }, + { 0x30000, 0x3FFFD }, + { 0x40000, 0x4FFFD }, + { 0x50000, 0x5FFFD }, + { 0x60000, 0x6FFFD }, + { 0x70000, 0x7FFFD }, + { 0x80000, 0x8FFFD }, + { 0x90000, 0x9FFFD }, + { 0xA0000, 0xAFFFD }, + { 0xB0000, 0xBFFFD }, + { 0xC0000, 0xCFFFD }, + { 0xD0000, 0xDFFFD }, + { 0xE1000, 0xEFFFD }, + { 0xF0000, 0xFFFFD }, + { 0x100000, 0x10FFFD } + +#define PREDICATE(c) uc_is_property_bidi_left_to_right (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_non_spacing_mark.c b/tests/unictype/test-pr_bidi_non_spacing_mark.c new file mode 100644 index 00000000..927ab845 --- /dev/null +++ b/tests/unictype/test-pr_bidi_non_spacing_mark.c @@ -0,0 +1,178 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0300, 0x036F }, + { 0x0483, 0x0489 }, + { 0x0591, 0x05BD }, + { 0x05BF, 0x05BF }, + { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, + { 0x05C7, 0x05C7 }, + { 0x0610, 0x061A }, + { 0x064B, 0x065E }, + { 0x0670, 0x0670 }, + { 0x06D6, 0x06DC }, + { 0x06DE, 0x06E4 }, + { 0x06E7, 0x06E8 }, + { 0x06EA, 0x06ED }, + { 0x0711, 0x0711 }, + { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, + { 0x07EB, 0x07F3 }, + { 0x0901, 0x0902 }, + { 0x093C, 0x093C }, + { 0x0941, 0x0948 }, + { 0x094D, 0x094D }, + { 0x0951, 0x0954 }, + { 0x0962, 0x0963 }, + { 0x0981, 0x0981 }, + { 0x09BC, 0x09BC }, + { 0x09C1, 0x09C4 }, + { 0x09CD, 0x09CD }, + { 0x09E2, 0x09E3 }, + { 0x0A01, 0x0A02 }, + { 0x0A3C, 0x0A3C }, + { 0x0A41, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, + { 0x0A51, 0x0A51 }, + { 0x0A70, 0x0A71 }, + { 0x0A75, 0x0A75 }, + { 0x0A81, 0x0A82 }, + { 0x0ABC, 0x0ABC }, + { 0x0AC1, 0x0AC5 }, + { 0x0AC7, 0x0AC8 }, + { 0x0ACD, 0x0ACD }, + { 0x0AE2, 0x0AE3 }, + { 0x0B01, 0x0B01 }, + { 0x0B3C, 0x0B3C }, + { 0x0B3F, 0x0B3F }, + { 0x0B41, 0x0B44 }, + { 0x0B4D, 0x0B4D }, + { 0x0B56, 0x0B56 }, + { 0x0B62, 0x0B63 }, + { 0x0B82, 0x0B82 }, + { 0x0BC0, 0x0BC0 }, + { 0x0BCD, 0x0BCD }, + { 0x0C3E, 0x0C40 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, + { 0x0C55, 0x0C56 }, + { 0x0C62, 0x0C63 }, + { 0x0CBC, 0x0CBC }, + { 0x0CCC, 0x0CCD }, + { 0x0CE2, 0x0CE3 }, + { 0x0D41, 0x0D44 }, + { 0x0D4D, 0x0D4D }, + { 0x0D62, 0x0D63 }, + { 0x0DCA, 0x0DCA }, + { 0x0DD2, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0E31, 0x0E31 }, + { 0x0E34, 0x0E3A }, + { 0x0E47, 0x0E4E }, + { 0x0EB1, 0x0EB1 }, + { 0x0EB4, 0x0EB9 }, + { 0x0EBB, 0x0EBC }, + { 0x0EC8, 0x0ECD }, + { 0x0F18, 0x0F19 }, + { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, + { 0x0F39, 0x0F39 }, + { 0x0F71, 0x0F7E }, + { 0x0F80, 0x0F84 }, + { 0x0F86, 0x0F87 }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x0FC6, 0x0FC6 }, + { 0x102D, 0x1030 }, + { 0x1032, 0x1037 }, + { 0x1039, 0x103A }, + { 0x103D, 0x103E }, + { 0x1058, 0x1059 }, + { 0x105E, 0x1060 }, + { 0x1071, 0x1074 }, + { 0x1082, 0x1082 }, + { 0x1085, 0x1086 }, + { 0x108D, 0x108D }, + { 0x135F, 0x135F }, + { 0x1712, 0x1714 }, + { 0x1732, 0x1734 }, + { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, + { 0x17B7, 0x17BD }, + { 0x17C6, 0x17C6 }, + { 0x17C9, 0x17D3 }, + { 0x17DD, 0x17DD }, + { 0x180B, 0x180D }, + { 0x18A9, 0x18A9 }, + { 0x1920, 0x1922 }, + { 0x1927, 0x1928 }, + { 0x1932, 0x1932 }, + { 0x1939, 0x193B }, + { 0x1A17, 0x1A18 }, + { 0x1B00, 0x1B03 }, + { 0x1B34, 0x1B34 }, + { 0x1B36, 0x1B3A }, + { 0x1B3C, 0x1B3C }, + { 0x1B42, 0x1B42 }, + { 0x1B6B, 0x1B73 }, + { 0x1B80, 0x1B81 }, + { 0x1BA2, 0x1BA5 }, + { 0x1BA8, 0x1BA9 }, + { 0x1C2C, 0x1C33 }, + { 0x1C36, 0x1C37 }, + { 0x1DC0, 0x1DE6 }, + { 0x1DFE, 0x1DFF }, + { 0x20D0, 0x20F0 }, + { 0x2DE0, 0x2DFF }, + { 0x302A, 0x302F }, + { 0x3099, 0x309A }, + { 0xA66F, 0xA672 }, + { 0xA67C, 0xA67D }, + { 0xA802, 0xA802 }, + { 0xA806, 0xA806 }, + { 0xA80B, 0xA80B }, + { 0xA825, 0xA826 }, + { 0xA8C4, 0xA8C4 }, + { 0xA926, 0xA92D }, + { 0xA947, 0xA951 }, + { 0xAA29, 0xAA2E }, + { 0xAA31, 0xAA32 }, + { 0xAA35, 0xAA36 }, + { 0xAA43, 0xAA43 }, + { 0xAA4C, 0xAA4C }, + { 0xFB1E, 0xFB1E }, + { 0xFE00, 0xFE0F }, + { 0xFE20, 0xFE26 }, + { 0x101FD, 0x101FD }, + { 0x10A01, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A0F }, + { 0x10A38, 0x10A3A }, + { 0x10A3F, 0x10A3F }, + { 0x1D167, 0x1D169 }, + { 0x1D17B, 0x1D182 }, + { 0x1D185, 0x1D18B }, + { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, + { 0xE0100, 0xE01EF } + +#define PREDICATE(c) uc_is_property_bidi_non_spacing_mark (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_other_neutral.c b/tests/unictype/test-pr_bidi_other_neutral.c new file mode 100644 index 00000000..b3efed8b --- /dev/null +++ b/tests/unictype/test-pr_bidi_other_neutral.c @@ -0,0 +1,175 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0021, 0x0022 }, + { 0x0026, 0x002A }, + { 0x003B, 0x0040 }, + { 0x005B, 0x0060 }, + { 0x007B, 0x007E }, + { 0x00A1, 0x00A1 }, + { 0x00A6, 0x00A9 }, + { 0x00AB, 0x00AC }, + { 0x00AE, 0x00AF }, + { 0x00B4, 0x00B4 }, + { 0x00B6, 0x00B8 }, + { 0x00BB, 0x00BF }, + { 0x00D7, 0x00D7 }, + { 0x00F7, 0x00F7 }, + { 0x02B9, 0x02BA }, + { 0x02C2, 0x02CF }, + { 0x02D2, 0x02DF }, + { 0x02E5, 0x02ED }, + { 0x02EF, 0x02FF }, + { 0x0374, 0x0375 }, + { 0x037E, 0x037E }, + { 0x0384, 0x0385 }, + { 0x0387, 0x0387 }, + { 0x03F6, 0x03F6 }, + { 0x058A, 0x058A }, + { 0x0606, 0x0607 }, + { 0x060E, 0x060F }, + { 0x06E9, 0x06E9 }, + { 0x07F6, 0x07F9 }, + { 0x0BF3, 0x0BF8 }, + { 0x0BFA, 0x0BFA }, + { 0x0C78, 0x0C7E }, + { 0x0CF1, 0x0CF2 }, + { 0x0F3A, 0x0F3D }, + { 0x1390, 0x1399 }, + { 0x169B, 0x169C }, + { 0x17F0, 0x17F9 }, + { 0x1800, 0x180A }, + { 0x1940, 0x1940 }, + { 0x1944, 0x1945 }, + { 0x19DE, 0x19FF }, + { 0x1FBD, 0x1FBD }, + { 0x1FBF, 0x1FC1 }, + { 0x1FCD, 0x1FCF }, + { 0x1FDD, 0x1FDF }, + { 0x1FED, 0x1FEF }, + { 0x1FFD, 0x1FFE }, + { 0x2010, 0x2027 }, + { 0x2035, 0x2043 }, + { 0x2045, 0x205E }, + { 0x207C, 0x207E }, + { 0x208C, 0x208E }, + { 0x2100, 0x2101 }, + { 0x2103, 0x2106 }, + { 0x2108, 0x2109 }, + { 0x2114, 0x2114 }, + { 0x2116, 0x2118 }, + { 0x211E, 0x2123 }, + { 0x2125, 0x2125 }, + { 0x2127, 0x2127 }, + { 0x2129, 0x2129 }, + { 0x213A, 0x213B }, + { 0x2140, 0x2144 }, + { 0x214A, 0x214D }, + { 0x2153, 0x215F }, + { 0x2190, 0x2211 }, + { 0x2214, 0x2335 }, + { 0x237B, 0x2394 }, + { 0x2396, 0x23E7 }, + { 0x2400, 0x2426 }, + { 0x2440, 0x244A }, + { 0x2460, 0x2487 }, + { 0x24EA, 0x269D }, + { 0x26A0, 0x26AB }, + { 0x26AD, 0x26BC }, + { 0x26C0, 0x26C3 }, + { 0x2701, 0x2704 }, + { 0x2706, 0x2709 }, + { 0x270C, 0x2727 }, + { 0x2729, 0x274B }, + { 0x274D, 0x274D }, + { 0x274F, 0x2752 }, + { 0x2756, 0x2756 }, + { 0x2758, 0x275E }, + { 0x2761, 0x2794 }, + { 0x2798, 0x27AF }, + { 0x27B1, 0x27BE }, + { 0x27C0, 0x27CA }, + { 0x27CC, 0x27CC }, + { 0x27D0, 0x27FF }, + { 0x2900, 0x2B4C }, + { 0x2B50, 0x2B54 }, + { 0x2CE5, 0x2CEA }, + { 0x2CF9, 0x2CFF }, + { 0x2E00, 0x2E30 }, + { 0x2E80, 0x2E99 }, + { 0x2E9B, 0x2EF3 }, + { 0x2F00, 0x2FD5 }, + { 0x2FF0, 0x2FFB }, + { 0x3001, 0x3004 }, + { 0x3008, 0x3020 }, + { 0x3030, 0x3030 }, + { 0x3036, 0x3037 }, + { 0x303D, 0x303F }, + { 0x309B, 0x309C }, + { 0x30A0, 0x30A0 }, + { 0x30FB, 0x30FB }, + { 0x31C0, 0x31E3 }, + { 0x321D, 0x321E }, + { 0x3250, 0x325F }, + { 0x327C, 0x327E }, + { 0x32B1, 0x32BF }, + { 0x32CC, 0x32CF }, + { 0x3377, 0x337A }, + { 0x33DE, 0x33DF }, + { 0x33FF, 0x33FF }, + { 0x4DC0, 0x4DFF }, + { 0xA490, 0xA4C6 }, + { 0xA60D, 0xA60F }, + { 0xA673, 0xA673 }, + { 0xA67E, 0xA67F }, + { 0xA700, 0xA721 }, + { 0xA788, 0xA788 }, + { 0xA828, 0xA82B }, + { 0xA874, 0xA877 }, + { 0xFD3E, 0xFD3F }, + { 0xFDFD, 0xFDFD }, + { 0xFE10, 0xFE19 }, + { 0xFE30, 0xFE4F }, + { 0xFE51, 0xFE51 }, + { 0xFE54, 0xFE54 }, + { 0xFE56, 0xFE5E }, + { 0xFE60, 0xFE61 }, + { 0xFE64, 0xFE66 }, + { 0xFE68, 0xFE68 }, + { 0xFE6B, 0xFE6B }, + { 0xFF01, 0xFF02 }, + { 0xFF06, 0xFF0A }, + { 0xFF1B, 0xFF20 }, + { 0xFF3B, 0xFF40 }, + { 0xFF5B, 0xFF65 }, + { 0xFFE2, 0xFFE4 }, + { 0xFFE8, 0xFFEE }, + { 0xFFF9, 0xFFFD }, + { 0x10101, 0x10101 }, + { 0x10140, 0x1018A }, + { 0x10190, 0x1019B }, + { 0x1091F, 0x1091F }, + { 0x1D200, 0x1D241 }, + { 0x1D245, 0x1D245 }, + { 0x1D300, 0x1D356 }, + { 0x1F000, 0x1F02B }, + { 0x1F030, 0x1F093 } + +#define PREDICATE(c) uc_is_property_bidi_other_neutral (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_pdf.c b/tests/unictype/test-pr_bidi_pdf.c new file mode 100644 index 00000000..e8ff8dd8 --- /dev/null +++ b/tests/unictype/test-pr_bidi_pdf.c @@ -0,0 +1,23 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x202C, 0x202C } + +#define PREDICATE(c) uc_is_property_bidi_pdf (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_segment_separator.c b/tests/unictype/test-pr_bidi_segment_separator.c new file mode 100644 index 00000000..86ba97b4 --- /dev/null +++ b/tests/unictype/test-pr_bidi_segment_separator.c @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0009, 0x0009 }, + { 0x000B, 0x000B }, + { 0x001F, 0x001F } + +#define PREDICATE(c) uc_is_property_bidi_segment_separator (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_bidi_whitespace.c b/tests/unictype/test-pr_bidi_whitespace.c new file mode 100644 index 00000000..646ef4f4 --- /dev/null +++ b/tests/unictype/test-pr_bidi_whitespace.c @@ -0,0 +1,30 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x000C, 0x000C }, + { 0x0020, 0x0020 }, + { 0x1680, 0x1680 }, + { 0x180E, 0x180E }, + { 0x2000, 0x200A }, + { 0x2028, 0x2028 }, + { 0x205F, 0x205F }, + { 0x3000, 0x3000 } + +#define PREDICATE(c) uc_is_property_bidi_whitespace (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_byname.c b/tests/unictype/test-pr_byname.c new file mode 100644 index 00000000..770d4c8f --- /dev/null +++ b/tests/unictype/test-pr_byname.c @@ -0,0 +1,54 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + { + uc_property_t pr = uc_property_byname ("composite"); + unsigned int c; + + for (c = 0; c < 0x110000; c++) + ASSERT (uc_is_property (c, pr) == uc_is_property_composite (c)); + } + + { + uc_property_t pr = uc_property_byname ("foobar"); + ASSERT (! uc_property_is_valid (pr)); + } + + return 0; +} diff --git a/tests/unictype/test-pr_combining.c b/tests/unictype/test-pr_combining.c new file mode 100644 index 00000000..2a8377a3 --- /dev/null +++ b/tests/unictype/test-pr_combining.c @@ -0,0 +1,183 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0300, 0x036F }, + { 0x0483, 0x0489 }, + { 0x0591, 0x05BD }, + { 0x05BF, 0x05BF }, + { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, + { 0x05C7, 0x05C7 }, + { 0x0610, 0x061A }, + { 0x064B, 0x065E }, + { 0x0670, 0x0670 }, + { 0x06D6, 0x06DC }, + { 0x06DE, 0x06E4 }, + { 0x06E7, 0x06E8 }, + { 0x06EA, 0x06ED }, + { 0x0711, 0x0711 }, + { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, + { 0x07EB, 0x07F3 }, + { 0x0901, 0x0903 }, + { 0x093C, 0x093C }, + { 0x093E, 0x094D }, + { 0x0951, 0x0954 }, + { 0x0962, 0x0963 }, + { 0x0981, 0x0983 }, + { 0x09BC, 0x09BC }, + { 0x09BE, 0x09C4 }, + { 0x09C7, 0x09C8 }, + { 0x09CB, 0x09CD }, + { 0x09D7, 0x09D7 }, + { 0x09E2, 0x09E3 }, + { 0x0A01, 0x0A03 }, + { 0x0A3C, 0x0A3C }, + { 0x0A3E, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, + { 0x0A51, 0x0A51 }, + { 0x0A70, 0x0A71 }, + { 0x0A75, 0x0A75 }, + { 0x0A81, 0x0A83 }, + { 0x0ABC, 0x0ABC }, + { 0x0ABE, 0x0AC5 }, + { 0x0AC7, 0x0AC9 }, + { 0x0ACB, 0x0ACD }, + { 0x0AE2, 0x0AE3 }, + { 0x0B01, 0x0B03 }, + { 0x0B3C, 0x0B3C }, + { 0x0B3E, 0x0B44 }, + { 0x0B47, 0x0B48 }, + { 0x0B4B, 0x0B4D }, + { 0x0B56, 0x0B57 }, + { 0x0B62, 0x0B63 }, + { 0x0B82, 0x0B82 }, + { 0x0BBE, 0x0BC2 }, + { 0x0BC6, 0x0BC8 }, + { 0x0BCA, 0x0BCD }, + { 0x0BD7, 0x0BD7 }, + { 0x0C01, 0x0C03 }, + { 0x0C3E, 0x0C44 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, + { 0x0C55, 0x0C56 }, + { 0x0C62, 0x0C63 }, + { 0x0C82, 0x0C83 }, + { 0x0CBC, 0x0CBC }, + { 0x0CBE, 0x0CC4 }, + { 0x0CC6, 0x0CC8 }, + { 0x0CCA, 0x0CCD }, + { 0x0CD5, 0x0CD6 }, + { 0x0CE2, 0x0CE3 }, + { 0x0D02, 0x0D03 }, + { 0x0D3E, 0x0D44 }, + { 0x0D46, 0x0D48 }, + { 0x0D4A, 0x0D4D }, + { 0x0D57, 0x0D57 }, + { 0x0D62, 0x0D63 }, + { 0x0D82, 0x0D83 }, + { 0x0DCA, 0x0DCA }, + { 0x0DCF, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0DD8, 0x0DDF }, + { 0x0DF2, 0x0DF3 }, + { 0x0E31, 0x0E31 }, + { 0x0E34, 0x0E3A }, + { 0x0E47, 0x0E4E }, + { 0x0EB1, 0x0EB1 }, + { 0x0EB4, 0x0EB9 }, + { 0x0EBB, 0x0EBC }, + { 0x0EC8, 0x0ECD }, + { 0x0F18, 0x0F19 }, + { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, + { 0x0F39, 0x0F39 }, + { 0x0F3E, 0x0F3F }, + { 0x0F71, 0x0F84 }, + { 0x0F86, 0x0F87 }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x0FC6, 0x0FC6 }, + { 0x102B, 0x103E }, + { 0x1056, 0x1059 }, + { 0x105E, 0x1060 }, + { 0x1062, 0x1064 }, + { 0x1067, 0x106D }, + { 0x1071, 0x1074 }, + { 0x1082, 0x108D }, + { 0x108F, 0x108F }, + { 0x135F, 0x135F }, + { 0x1712, 0x1714 }, + { 0x1732, 0x1734 }, + { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, + { 0x17B6, 0x17D3 }, + { 0x17DD, 0x17DD }, + { 0x180B, 0x180D }, + { 0x18A9, 0x18A9 }, + { 0x1920, 0x192B }, + { 0x1930, 0x193B }, + { 0x19B0, 0x19C0 }, + { 0x19C8, 0x19C9 }, + { 0x1A17, 0x1A1B }, + { 0x1B00, 0x1B04 }, + { 0x1B34, 0x1B44 }, + { 0x1B6B, 0x1B73 }, + { 0x1B80, 0x1B82 }, + { 0x1BA1, 0x1BAA }, + { 0x1C24, 0x1C37 }, + { 0x1DC0, 0x1DE6 }, + { 0x1DFE, 0x1DFF }, + { 0x20D0, 0x20F0 }, + { 0x2DE0, 0x2DFF }, + { 0x302A, 0x302F }, + { 0x3099, 0x309A }, + { 0xA66F, 0xA672 }, + { 0xA67C, 0xA67D }, + { 0xA802, 0xA802 }, + { 0xA806, 0xA806 }, + { 0xA80B, 0xA80B }, + { 0xA823, 0xA827 }, + { 0xA880, 0xA881 }, + { 0xA8B4, 0xA8C4 }, + { 0xA926, 0xA92D }, + { 0xA947, 0xA953 }, + { 0xAA29, 0xAA36 }, + { 0xAA43, 0xAA43 }, + { 0xAA4C, 0xAA4D }, + { 0xFB1E, 0xFB1E }, + { 0xFE00, 0xFE0F }, + { 0xFE20, 0xFE26 }, + { 0x101FD, 0x101FD }, + { 0x10A01, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A0F }, + { 0x10A38, 0x10A3A }, + { 0x10A3F, 0x10A3F }, + { 0x1D165, 0x1D169 }, + { 0x1D16D, 0x1D172 }, + { 0x1D17B, 0x1D182 }, + { 0x1D185, 0x1D18B }, + { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, + { 0xE0100, 0xE01EF } + +#define PREDICATE(c) uc_is_property_combining (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_composite.c b/tests/unictype/test-pr_composite.c new file mode 100644 index 00000000..c7aff1e8 --- /dev/null +++ b/tests/unictype/test-pr_composite.c @@ -0,0 +1,291 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00BC, 0x00BE }, + { 0x00C0, 0x00C5 }, + { 0x00C7, 0x00CF }, + { 0x00D1, 0x00D6 }, + { 0x00D9, 0x00DD }, + { 0x00E0, 0x00E5 }, + { 0x00E7, 0x00EF }, + { 0x00F1, 0x00F6 }, + { 0x00F9, 0x00FD }, + { 0x00FF, 0x010F }, + { 0x0112, 0x0125 }, + { 0x0128, 0x0130 }, + { 0x0132, 0x0137 }, + { 0x0139, 0x0140 }, + { 0x0143, 0x0149 }, + { 0x014C, 0x0151 }, + { 0x0154, 0x0165 }, + { 0x0168, 0x017E }, + { 0x01A0, 0x01A1 }, + { 0x01AF, 0x01B0 }, + { 0x01C4, 0x01DC }, + { 0x01DE, 0x01E3 }, + { 0x01E6, 0x01F5 }, + { 0x01F8, 0x021B }, + { 0x021E, 0x021F }, + { 0x0226, 0x0233 }, + { 0x0344, 0x0344 }, + { 0x0385, 0x0386 }, + { 0x0388, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x0390 }, + { 0x03AA, 0x03B0 }, + { 0x03CA, 0x03CE }, + { 0x03D3, 0x03D4 }, + { 0x0400, 0x0401 }, + { 0x0403, 0x0403 }, + { 0x0407, 0x0407 }, + { 0x040C, 0x040E }, + { 0x0419, 0x0419 }, + { 0x0439, 0x0439 }, + { 0x0450, 0x0451 }, + { 0x0453, 0x0453 }, + { 0x0457, 0x0457 }, + { 0x045C, 0x045E }, + { 0x0476, 0x0477 }, + { 0x04C1, 0x04C2 }, + { 0x04D0, 0x04D3 }, + { 0x04D6, 0x04D7 }, + { 0x04DA, 0x04DF }, + { 0x04E2, 0x04E7 }, + { 0x04EA, 0x04F5 }, + { 0x04F8, 0x04F9 }, + { 0x0587, 0x0587 }, + { 0x0622, 0x0626 }, + { 0x0675, 0x0678 }, + { 0x06C0, 0x06C0 }, + { 0x06C2, 0x06C2 }, + { 0x06D3, 0x06D3 }, + { 0x0929, 0x0929 }, + { 0x0931, 0x0931 }, + { 0x0934, 0x0934 }, + { 0x0958, 0x095F }, + { 0x09CB, 0x09CC }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09DF }, + { 0x0A33, 0x0A33 }, + { 0x0A36, 0x0A36 }, + { 0x0A59, 0x0A5B }, + { 0x0A5E, 0x0A5E }, + { 0x0B48, 0x0B48 }, + { 0x0B4B, 0x0B4C }, + { 0x0B5C, 0x0B5D }, + { 0x0B94, 0x0B94 }, + { 0x0BCA, 0x0BCC }, + { 0x0C48, 0x0C48 }, + { 0x0CC0, 0x0CC0 }, + { 0x0CC7, 0x0CC8 }, + { 0x0CCA, 0x0CCB }, + { 0x0D4A, 0x0D4C }, + { 0x0DDA, 0x0DDA }, + { 0x0DDC, 0x0DDE }, + { 0x0E33, 0x0E33 }, + { 0x0EB3, 0x0EB3 }, + { 0x0EDC, 0x0EDD }, + { 0x0F43, 0x0F43 }, + { 0x0F4D, 0x0F4D }, + { 0x0F52, 0x0F52 }, + { 0x0F57, 0x0F57 }, + { 0x0F5C, 0x0F5C }, + { 0x0F69, 0x0F69 }, + { 0x0F73, 0x0F73 }, + { 0x0F75, 0x0F79 }, + { 0x0F81, 0x0F81 }, + { 0x0F93, 0x0F93 }, + { 0x0F9D, 0x0F9D }, + { 0x0FA2, 0x0FA2 }, + { 0x0FA7, 0x0FA7 }, + { 0x0FAC, 0x0FAC }, + { 0x0FB9, 0x0FB9 }, + { 0x1026, 0x1026 }, + { 0x1B06, 0x1B06 }, + { 0x1B08, 0x1B08 }, + { 0x1B0A, 0x1B0A }, + { 0x1B0C, 0x1B0C }, + { 0x1B0E, 0x1B0E }, + { 0x1B12, 0x1B12 }, + { 0x1B3B, 0x1B3B }, + { 0x1B3D, 0x1B3D }, + { 0x1B40, 0x1B41 }, + { 0x1B43, 0x1B43 }, + { 0x1E00, 0x1E9B }, + { 0x1EA0, 0x1EF9 }, + { 0x1F00, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F70 }, + { 0x1F72, 0x1F72 }, + { 0x1F74, 0x1F74 }, + { 0x1F76, 0x1F76 }, + { 0x1F78, 0x1F78 }, + { 0x1F7A, 0x1F7A }, + { 0x1F7C, 0x1F7C }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FBA }, + { 0x1FBC, 0x1FBC }, + { 0x1FC1, 0x1FC4 }, + { 0x1FC6, 0x1FC8 }, + { 0x1FCA, 0x1FCA }, + { 0x1FCC, 0x1FD2 }, + { 0x1FD6, 0x1FDA }, + { 0x1FDD, 0x1FE2 }, + { 0x1FE4, 0x1FEA }, + { 0x1FEC, 0x1FED }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FF8 }, + { 0x1FFA, 0x1FFA }, + { 0x1FFC, 0x1FFC }, + { 0x2025, 0x2026 }, + { 0x2033, 0x2034 }, + { 0x2036, 0x2037 }, + { 0x203C, 0x203C }, + { 0x2047, 0x2049 }, + { 0x2057, 0x2057 }, + { 0x20A8, 0x20A8 }, + { 0x2100, 0x2101 }, + { 0x2103, 0x2103 }, + { 0x2105, 0x2106 }, + { 0x2109, 0x2109 }, + { 0x2116, 0x2116 }, + { 0x2120, 0x2122 }, + { 0x213B, 0x213B }, + { 0x2153, 0x215F }, + { 0x2161, 0x2163 }, + { 0x2165, 0x2168 }, + { 0x216A, 0x216B }, + { 0x2171, 0x2173 }, + { 0x2175, 0x2178 }, + { 0x217A, 0x217B }, + { 0x219A, 0x219B }, + { 0x21AE, 0x21AE }, + { 0x21CD, 0x21CF }, + { 0x2204, 0x2204 }, + { 0x2209, 0x2209 }, + { 0x220C, 0x220C }, + { 0x2224, 0x2224 }, + { 0x2226, 0x2226 }, + { 0x222C, 0x222D }, + { 0x222F, 0x2230 }, + { 0x2241, 0x2241 }, + { 0x2244, 0x2244 }, + { 0x2247, 0x2247 }, + { 0x2249, 0x2249 }, + { 0x2260, 0x2260 }, + { 0x2262, 0x2262 }, + { 0x226D, 0x2271 }, + { 0x2274, 0x2275 }, + { 0x2278, 0x2279 }, + { 0x2280, 0x2281 }, + { 0x2284, 0x2285 }, + { 0x2288, 0x2289 }, + { 0x22AC, 0x22AF }, + { 0x22E0, 0x22E3 }, + { 0x22EA, 0x22ED }, + { 0x2469, 0x24B5 }, + { 0x2A0C, 0x2A0C }, + { 0x2A74, 0x2A76 }, + { 0x2ADC, 0x2ADC }, + { 0x304C, 0x304C }, + { 0x304E, 0x304E }, + { 0x3050, 0x3050 }, + { 0x3052, 0x3052 }, + { 0x3054, 0x3054 }, + { 0x3056, 0x3056 }, + { 0x3058, 0x3058 }, + { 0x305A, 0x305A }, + { 0x305C, 0x305C }, + { 0x305E, 0x305E }, + { 0x3060, 0x3060 }, + { 0x3062, 0x3062 }, + { 0x3065, 0x3065 }, + { 0x3067, 0x3067 }, + { 0x3069, 0x3069 }, + { 0x3070, 0x3071 }, + { 0x3073, 0x3074 }, + { 0x3076, 0x3077 }, + { 0x3079, 0x307A }, + { 0x307C, 0x307D }, + { 0x3094, 0x3094 }, + { 0x309E, 0x309F }, + { 0x30AC, 0x30AC }, + { 0x30AE, 0x30AE }, + { 0x30B0, 0x30B0 }, + { 0x30B2, 0x30B2 }, + { 0x30B4, 0x30B4 }, + { 0x30B6, 0x30B6 }, + { 0x30B8, 0x30B8 }, + { 0x30BA, 0x30BA }, + { 0x30BC, 0x30BC }, + { 0x30BE, 0x30BE }, + { 0x30C0, 0x30C0 }, + { 0x30C2, 0x30C2 }, + { 0x30C5, 0x30C5 }, + { 0x30C7, 0x30C7 }, + { 0x30C9, 0x30C9 }, + { 0x30D0, 0x30D1 }, + { 0x30D3, 0x30D4 }, + { 0x30D6, 0x30D7 }, + { 0x30D9, 0x30DA }, + { 0x30DC, 0x30DD }, + { 0x30F4, 0x30F4 }, + { 0x30F7, 0x30FA }, + { 0x30FE, 0x30FF }, + { 0x3200, 0x321E }, + { 0x3220, 0x3243 }, + { 0x3250, 0x325F }, + { 0x326E, 0x327E }, + { 0x32B1, 0x32CF }, + { 0x3300, 0x33FF }, + { 0xAC00, 0xD7A4 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB1D }, + { 0xFB1F, 0xFB1F }, + { 0xFB2A, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFB4F }, + { 0xFBEA, 0xFBFB }, + { 0xFC00, 0xFC5D }, + { 0xFC64, 0xFD3D }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDFC }, + { 0xFE71, 0xFE71 }, + { 0xFE77, 0xFE77 }, + { 0xFE79, 0xFE79 }, + { 0xFE7B, 0xFE7B }, + { 0xFE7D, 0xFE7D }, + { 0xFE7F, 0xFE7F }, + { 0xFEF5, 0xFEFC }, + { 0x1D15E, 0x1D164 }, + { 0x1D1BB, 0x1D1C0 } + +#define PREDICATE(c) uc_is_property_composite (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_currency_symbol.c b/tests/unictype/test-pr_currency_symbol.c new file mode 100644 index 00000000..79a37068 --- /dev/null +++ b/tests/unictype/test-pr_currency_symbol.c @@ -0,0 +1,36 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0024, 0x0024 }, + { 0x00A2, 0x00A5 }, + { 0x060B, 0x060B }, + { 0x09F2, 0x09F3 }, + { 0x0AF1, 0x0AF1 }, + { 0x0BF9, 0x0BF9 }, + { 0x0E3F, 0x0E3F }, + { 0x17DB, 0x17DB }, + { 0x20A0, 0x20B5 }, + { 0xFDFC, 0xFDFC }, + { 0xFE69, 0xFE69 }, + { 0xFF04, 0xFF04 }, + { 0xFFE0, 0xFFE1 }, + { 0xFFE5, 0xFFE6 } + +#define PREDICATE(c) uc_is_property_currency_symbol (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_dash.c b/tests/unictype/test-pr_dash.c new file mode 100644 index 00000000..8089772a --- /dev/null +++ b/tests/unictype/test-pr_dash.c @@ -0,0 +1,40 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x002D, 0x002D }, + { 0x058A, 0x058A }, + { 0x05BE, 0x05BE }, + { 0x1806, 0x1806 }, + { 0x2010, 0x2015 }, + { 0x2053, 0x2053 }, + { 0x207B, 0x207B }, + { 0x208B, 0x208B }, + { 0x2212, 0x2212 }, + { 0x2E17, 0x2E17 }, + { 0x2E1A, 0x2E1A }, + { 0x301C, 0x301C }, + { 0x3030, 0x3030 }, + { 0x30A0, 0x30A0 }, + { 0xFE31, 0xFE32 }, + { 0xFE58, 0xFE58 }, + { 0xFE63, 0xFE63 }, + { 0xFF0D, 0xFF0D } + +#define PREDICATE(c) uc_is_property_dash (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_decimal_digit.c b/tests/unictype/test-pr_decimal_digit.c new file mode 100644 index 00000000..8d6c284b --- /dev/null +++ b/tests/unictype/test-pr_decimal_digit.c @@ -0,0 +1,55 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 }, + { 0x0660, 0x0669 }, + { 0x06F0, 0x06F9 }, + { 0x07C0, 0x07C9 }, + { 0x0966, 0x096F }, + { 0x09E6, 0x09EF }, + { 0x0A66, 0x0A6F }, + { 0x0AE6, 0x0AEF }, + { 0x0B66, 0x0B6F }, + { 0x0BE6, 0x0BEF }, + { 0x0C66, 0x0C6F }, + { 0x0CE6, 0x0CEF }, + { 0x0D66, 0x0D6F }, + { 0x0E50, 0x0E59 }, + { 0x0ED0, 0x0ED9 }, + { 0x0F20, 0x0F29 }, + { 0x1040, 0x1049 }, + { 0x1090, 0x1099 }, + { 0x17E0, 0x17E9 }, + { 0x1810, 0x1819 }, + { 0x1946, 0x194F }, + { 0x19D0, 0x19D9 }, + { 0x1B50, 0x1B59 }, + { 0x1BB0, 0x1BB9 }, + { 0x1C40, 0x1C49 }, + { 0x1C50, 0x1C59 }, + { 0xA620, 0xA629 }, + { 0xA8D0, 0xA8D9 }, + { 0xA900, 0xA909 }, + { 0xAA50, 0xAA59 }, + { 0xFF10, 0xFF19 }, + { 0x104A0, 0x104A9 }, + { 0x1D7CE, 0x1D7FF } + +#define PREDICATE(c) uc_is_property_decimal_digit (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_default_ignorable_code_point.c b/tests/unictype/test-pr_default_ignorable_code_point.c new file mode 100644 index 00000000..894bc7fd --- /dev/null +++ b/tests/unictype/test-pr_default_ignorable_code_point.c @@ -0,0 +1,37 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00AD, 0x00AD }, + { 0x034F, 0x034F }, + { 0x115F, 0x1160 }, + { 0x17B4, 0x17B5 }, + { 0x180B, 0x180D }, + { 0x200B, 0x200F }, + { 0x202A, 0x202E }, + { 0x2060, 0x206F }, + { 0x3164, 0x3164 }, + { 0xFE00, 0xFE0F }, + { 0xFEFF, 0xFEFF }, + { 0xFFA0, 0xFFA0 }, + { 0xFFF0, 0xFFF8 }, + { 0x1D173, 0x1D17A }, + { 0xE0000, 0xE0FFF } + +#define PREDICATE(c) uc_is_property_default_ignorable_code_point (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_deprecated.c b/tests/unictype/test-pr_deprecated.c new file mode 100644 index 00000000..f8af73d9 --- /dev/null +++ b/tests/unictype/test-pr_deprecated.c @@ -0,0 +1,28 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0340, 0x0341 }, + { 0x17A3, 0x17A3 }, + { 0x17D3, 0x17D3 }, + { 0x206A, 0x206F }, + { 0xE0001, 0xE0001 }, + { 0xE0020, 0xE007F } + +#define PREDICATE(c) uc_is_property_deprecated (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_diacritic.c b/tests/unictype/test-pr_diacritic.c new file mode 100644 index 00000000..ae21cd42 --- /dev/null +++ b/tests/unictype/test-pr_diacritic.c @@ -0,0 +1,124 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x005E, 0x005E }, + { 0x0060, 0x0060 }, + { 0x00A8, 0x00A8 }, + { 0x00AF, 0x00AF }, + { 0x00B4, 0x00B4 }, + { 0x00B7, 0x00B8 }, + { 0x02B0, 0x034E }, + { 0x0350, 0x0357 }, + { 0x035D, 0x0362 }, + { 0x0374, 0x0375 }, + { 0x037A, 0x037A }, + { 0x0384, 0x0385 }, + { 0x0483, 0x0487 }, + { 0x0559, 0x0559 }, + { 0x0591, 0x05A1 }, + { 0x05A3, 0x05BD }, + { 0x05BF, 0x05BF }, + { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C4 }, + { 0x064B, 0x0652 }, + { 0x0657, 0x0658 }, + { 0x06DF, 0x06E0 }, + { 0x06E5, 0x06E6 }, + { 0x06EA, 0x06EC }, + { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, + { 0x07EB, 0x07F5 }, + { 0x093C, 0x093C }, + { 0x094D, 0x094D }, + { 0x0951, 0x0954 }, + { 0x0971, 0x0971 }, + { 0x09BC, 0x09BC }, + { 0x09CD, 0x09CD }, + { 0x0A3C, 0x0A3C }, + { 0x0A4D, 0x0A4D }, + { 0x0ABC, 0x0ABC }, + { 0x0ACD, 0x0ACD }, + { 0x0B3C, 0x0B3C }, + { 0x0B4D, 0x0B4D }, + { 0x0BCD, 0x0BCD }, + { 0x0C4D, 0x0C4D }, + { 0x0CBC, 0x0CBC }, + { 0x0CCD, 0x0CCD }, + { 0x0D4D, 0x0D4D }, + { 0x0DCA, 0x0DCA }, + { 0x0E47, 0x0E4C }, + { 0x0E4E, 0x0E4E }, + { 0x0EC8, 0x0ECC }, + { 0x0F18, 0x0F19 }, + { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, + { 0x0F39, 0x0F39 }, + { 0x0F3E, 0x0F3F }, + { 0x0F82, 0x0F84 }, + { 0x0F86, 0x0F87 }, + { 0x0FC6, 0x0FC6 }, + { 0x1037, 0x1037 }, + { 0x1039, 0x103A }, + { 0x1087, 0x108D }, + { 0x108F, 0x108F }, + { 0x17C9, 0x17D3 }, + { 0x17DD, 0x17DD }, + { 0x1939, 0x193B }, + { 0x1B34, 0x1B34 }, + { 0x1B44, 0x1B44 }, + { 0x1B6B, 0x1B73 }, + { 0x1BAA, 0x1BAA }, + { 0x1C36, 0x1C37 }, + { 0x1C78, 0x1C7D }, + { 0x1D2C, 0x1D6A }, + { 0x1DC4, 0x1DCF }, + { 0x1DFE, 0x1DFF }, + { 0x1FBD, 0x1FBD }, + { 0x1FBF, 0x1FC1 }, + { 0x1FCD, 0x1FCF }, + { 0x1FDD, 0x1FDF }, + { 0x1FED, 0x1FEF }, + { 0x1FFD, 0x1FFE }, + { 0x2E2F, 0x2E2F }, + { 0x302A, 0x302F }, + { 0x3099, 0x309C }, + { 0x30FC, 0x30FC }, + { 0xA66F, 0xA66F }, + { 0xA67C, 0xA67D }, + { 0xA67F, 0xA67F }, + { 0xA717, 0xA721 }, + { 0xA788, 0xA788 }, + { 0xA8C4, 0xA8C4 }, + { 0xA92B, 0xA92E }, + { 0xA953, 0xA953 }, + { 0xFB1E, 0xFB1E }, + { 0xFE20, 0xFE26 }, + { 0xFF3E, 0xFF3E }, + { 0xFF40, 0xFF40 }, + { 0xFF70, 0xFF70 }, + { 0xFF9E, 0xFF9F }, + { 0xFFE3, 0xFFE3 }, + { 0x1D167, 0x1D169 }, + { 0x1D16D, 0x1D172 }, + { 0x1D17B, 0x1D182 }, + { 0x1D185, 0x1D18B }, + { 0x1D1AA, 0x1D1AD } + +#define PREDICATE(c) uc_is_property_diacritic (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_extender.c b/tests/unictype/test-pr_extender.c new file mode 100644 index 00000000..acca2ed0 --- /dev/null +++ b/tests/unictype/test-pr_extender.c @@ -0,0 +1,38 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00B7, 0x00B7 }, + { 0x02D0, 0x02D1 }, + { 0x0640, 0x0640 }, + { 0x07FA, 0x07FA }, + { 0x0E46, 0x0E46 }, + { 0x0EC6, 0x0EC6 }, + { 0x1843, 0x1843 }, + { 0x1C36, 0x1C36 }, + { 0x1C7B, 0x1C7B }, + { 0x3005, 0x3005 }, + { 0x3031, 0x3035 }, + { 0x309D, 0x309E }, + { 0x30FC, 0x30FE }, + { 0xA015, 0xA015 }, + { 0xA60C, 0xA60C }, + { 0xFF70, 0xFF70 } + +#define PREDICATE(c) uc_is_property_extender (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_format_control.c b/tests/unictype/test-pr_format_control.c new file mode 100644 index 00000000..258996bd --- /dev/null +++ b/tests/unictype/test-pr_format_control.c @@ -0,0 +1,30 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00AD, 0x00AD }, + { 0x070F, 0x070F }, + { 0x200B, 0x200B }, + { 0x2060, 0x2064 }, + { 0x206A, 0x206F }, + { 0x1D173, 0x1D17A }, + { 0xE0001, 0xE0001 }, + { 0xE0020, 0xE007F } + +#define PREDICATE(c) uc_is_property_format_control (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_grapheme_base.c b/tests/unictype/test-pr_grapheme_base.c new file mode 100644 index 00000000..2fe8bf24 --- /dev/null +++ b/tests/unictype/test-pr_grapheme_base.c @@ -0,0 +1,524 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0020, 0x007E }, + { 0x00A0, 0x00AC }, + { 0x00AE, 0x02FF }, + { 0x0370, 0x0377 }, + { 0x037A, 0x037E }, + { 0x0384, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x0482 }, + { 0x048A, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0559, 0x055F }, + { 0x0561, 0x0587 }, + { 0x0589, 0x058A }, + { 0x05BE, 0x05BE }, + { 0x05C0, 0x05C0 }, + { 0x05C3, 0x05C3 }, + { 0x05C6, 0x05C6 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F4 }, + { 0x0606, 0x060F }, + { 0x061B, 0x061B }, + { 0x061E, 0x061F }, + { 0x0621, 0x064A }, + { 0x0660, 0x066F }, + { 0x0671, 0x06D5 }, + { 0x06E5, 0x06E6 }, + { 0x06E9, 0x06E9 }, + { 0x06EE, 0x070D }, + { 0x0710, 0x0710 }, + { 0x0712, 0x072F }, + { 0x074D, 0x07A5 }, + { 0x07B1, 0x07B1 }, + { 0x07C0, 0x07EA }, + { 0x07F4, 0x07FA }, + { 0x0903, 0x0939 }, + { 0x093D, 0x0940 }, + { 0x0949, 0x094C }, + { 0x0950, 0x0950 }, + { 0x0958, 0x0961 }, + { 0x0964, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0982, 0x0983 }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BD, 0x09BD }, + { 0x09BF, 0x09C0 }, + { 0x09C7, 0x09C8 }, + { 0x09CB, 0x09CC }, + { 0x09CE, 0x09CE }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E1 }, + { 0x09E6, 0x09FA }, + { 0x0A03, 0x0A03 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A3E, 0x0A40 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A66, 0x0A6F }, + { 0x0A72, 0x0A74 }, + { 0x0A83, 0x0A83 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABD, 0x0AC0 }, + { 0x0AC9, 0x0AC9 }, + { 0x0ACB, 0x0ACC }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE1 }, + { 0x0AE6, 0x0AEF }, + { 0x0AF1, 0x0AF1 }, + { 0x0B02, 0x0B03 }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3D, 0x0B3D }, + { 0x0B40, 0x0B40 }, + { 0x0B47, 0x0B48 }, + { 0x0B4B, 0x0B4C }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B61 }, + { 0x0B66, 0x0B71 }, + { 0x0B83, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BBF, 0x0BBF }, + { 0x0BC1, 0x0BC2 }, + { 0x0BC6, 0x0BC8 }, + { 0x0BCA, 0x0BCC }, + { 0x0BD0, 0x0BD0 }, + { 0x0BE6, 0x0BFA }, + { 0x0C01, 0x0C03 }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C3D }, + { 0x0C41, 0x0C44 }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C61 }, + { 0x0C66, 0x0C6F }, + { 0x0C78, 0x0C7F }, + { 0x0C82, 0x0C83 }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBD, 0x0CBE }, + { 0x0CC0, 0x0CC1 }, + { 0x0CC3, 0x0CC4 }, + { 0x0CC7, 0x0CC8 }, + { 0x0CCA, 0x0CCB }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE1 }, + { 0x0CE6, 0x0CEF }, + { 0x0CF1, 0x0CF2 }, + { 0x0D02, 0x0D03 }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D3D }, + { 0x0D3F, 0x0D40 }, + { 0x0D46, 0x0D48 }, + { 0x0D4A, 0x0D4C }, + { 0x0D60, 0x0D61 }, + { 0x0D66, 0x0D75 }, + { 0x0D79, 0x0D7F }, + { 0x0D82, 0x0D83 }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0DD0, 0x0DD1 }, + { 0x0DD8, 0x0DDE }, + { 0x0DF2, 0x0DF4 }, + { 0x0E01, 0x0E30 }, + { 0x0E32, 0x0E33 }, + { 0x0E3F, 0x0E46 }, + { 0x0E4F, 0x0E5B }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB0 }, + { 0x0EB2, 0x0EB3 }, + { 0x0EBD, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EC6, 0x0EC6 }, + { 0x0ED0, 0x0ED9 }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F17 }, + { 0x0F1A, 0x0F34 }, + { 0x0F36, 0x0F36 }, + { 0x0F38, 0x0F38 }, + { 0x0F3A, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F7F, 0x0F7F }, + { 0x0F85, 0x0F85 }, + { 0x0F88, 0x0F8B }, + { 0x0FBE, 0x0FC5 }, + { 0x0FC7, 0x0FCC }, + { 0x0FCE, 0x0FD4 }, + { 0x1000, 0x102C }, + { 0x1031, 0x1031 }, + { 0x1038, 0x1038 }, + { 0x103B, 0x103C }, + { 0x103F, 0x1057 }, + { 0x105A, 0x105D }, + { 0x1061, 0x1070 }, + { 0x1075, 0x1081 }, + { 0x1083, 0x1084 }, + { 0x1087, 0x108C }, + { 0x108E, 0x1099 }, + { 0x109E, 0x10C5 }, + { 0x10D0, 0x10FC }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x1360, 0x137C }, + { 0x1380, 0x1399 }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x1676 }, + { 0x1680, 0x169C }, + { 0x16A0, 0x16F0 }, + { 0x1700, 0x170C }, + { 0x170E, 0x1711 }, + { 0x1720, 0x1731 }, + { 0x1735, 0x1736 }, + { 0x1740, 0x1751 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1780, 0x17B3 }, + { 0x17B6, 0x17B6 }, + { 0x17BE, 0x17C5 }, + { 0x17C7, 0x17C8 }, + { 0x17D4, 0x17DC }, + { 0x17E0, 0x17E9 }, + { 0x17F0, 0x17F9 }, + { 0x1800, 0x180A }, + { 0x180E, 0x180E }, + { 0x1810, 0x1819 }, + { 0x1820, 0x1877 }, + { 0x1880, 0x18A8 }, + { 0x18AA, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1923, 0x1926 }, + { 0x1929, 0x192B }, + { 0x1930, 0x1931 }, + { 0x1933, 0x1938 }, + { 0x1940, 0x1940 }, + { 0x1944, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19B0, 0x19C9 }, + { 0x19D0, 0x19D9 }, + { 0x19DE, 0x1A16 }, + { 0x1A19, 0x1A1B }, + { 0x1A1E, 0x1A1F }, + { 0x1B04, 0x1B33 }, + { 0x1B35, 0x1B35 }, + { 0x1B3B, 0x1B3B }, + { 0x1B3D, 0x1B41 }, + { 0x1B43, 0x1B4B }, + { 0x1B50, 0x1B6A }, + { 0x1B74, 0x1B7C }, + { 0x1B82, 0x1BA1 }, + { 0x1BA6, 0x1BA7 }, + { 0x1BAA, 0x1BAA }, + { 0x1BAE, 0x1BB9 }, + { 0x1C00, 0x1C2B }, + { 0x1C34, 0x1C35 }, + { 0x1C3B, 0x1C49 }, + { 0x1C4D, 0x1C7F }, + { 0x1D00, 0x1DBF }, + { 0x1E00, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FC4 }, + { 0x1FC6, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FDD, 0x1FEF }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFE }, + { 0x2000, 0x200A }, + { 0x2010, 0x2027 }, + { 0x202F, 0x205F }, + { 0x2070, 0x2071 }, + { 0x2074, 0x208E }, + { 0x2090, 0x2094 }, + { 0x20A0, 0x20B5 }, + { 0x2100, 0x214F }, + { 0x2153, 0x2188 }, + { 0x2190, 0x23E7 }, + { 0x2400, 0x2426 }, + { 0x2440, 0x244A }, + { 0x2460, 0x269D }, + { 0x26A0, 0x26BC }, + { 0x26C0, 0x26C3 }, + { 0x2701, 0x2704 }, + { 0x2706, 0x2709 }, + { 0x270C, 0x2727 }, + { 0x2729, 0x274B }, + { 0x274D, 0x274D }, + { 0x274F, 0x2752 }, + { 0x2756, 0x2756 }, + { 0x2758, 0x275E }, + { 0x2761, 0x2794 }, + { 0x2798, 0x27AF }, + { 0x27B1, 0x27BE }, + { 0x27C0, 0x27CA }, + { 0x27CC, 0x27CC }, + { 0x27D0, 0x2B4C }, + { 0x2B50, 0x2B54 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CEA }, + { 0x2CF9, 0x2D25 }, + { 0x2D30, 0x2D65 }, + { 0x2D6F, 0x2D6F }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x2E00, 0x2E30 }, + { 0x2E80, 0x2E99 }, + { 0x2E9B, 0x2EF3 }, + { 0x2F00, 0x2FD5 }, + { 0x2FF0, 0x2FFB }, + { 0x3000, 0x3029 }, + { 0x3030, 0x303F }, + { 0x3041, 0x3096 }, + { 0x309B, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x3190, 0x31B7 }, + { 0x31C0, 0x31E3 }, + { 0x31F0, 0x321E }, + { 0x3220, 0x3243 }, + { 0x3250, 0x32FE }, + { 0x3300, 0x4DB5 }, + { 0x4DC0, 0x9FC3 }, + { 0xA000, 0xA48C }, + { 0xA490, 0xA4C6 }, + { 0xA500, 0xA62B }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA66E }, + { 0xA673, 0xA673 }, + { 0xA67E, 0xA697 }, + { 0xA700, 0xA78C }, + { 0xA7FB, 0xA801 }, + { 0xA803, 0xA805 }, + { 0xA807, 0xA80A }, + { 0xA80C, 0xA824 }, + { 0xA827, 0xA82B }, + { 0xA840, 0xA877 }, + { 0xA880, 0xA8C3 }, + { 0xA8CE, 0xA8D9 }, + { 0xA900, 0xA925 }, + { 0xA92E, 0xA946 }, + { 0xA952, 0xA953 }, + { 0xA95F, 0xA95F }, + { 0xAA00, 0xAA28 }, + { 0xAA2F, 0xAA30 }, + { 0xAA33, 0xAA34 }, + { 0xAA40, 0xAA42 }, + { 0xAA44, 0xAA4B }, + { 0xAA4D, 0xAA4D }, + { 0xAA50, 0xAA59 }, + { 0xAA5C, 0xAA5F }, + { 0xAC00, 0xD7A3 }, + { 0xF900, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB1D }, + { 0xFB1F, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFD3F }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDFD }, + { 0xFE10, 0xFE19 }, + { 0xFE30, 0xFE52 }, + { 0xFE54, 0xFE66 }, + { 0xFE68, 0xFE6B }, + { 0xFE70, 0xFE74 }, + { 0xFE76, 0xFEFC }, + { 0xFF01, 0xFF9D }, + { 0xFFA0, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0xFFE0, 0xFFE6 }, + { 0xFFE8, 0xFFEE }, + { 0xFFFC, 0xFFFD }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10100, 0x10102 }, + { 0x10107, 0x10133 }, + { 0x10137, 0x1018A }, + { 0x10190, 0x1019B }, + { 0x101D0, 0x101FC }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10320, 0x10323 }, + { 0x10330, 0x1034A }, + { 0x10380, 0x1039D }, + { 0x1039F, 0x103C3 }, + { 0x103C8, 0x103D5 }, + { 0x10400, 0x1049D }, + { 0x104A0, 0x104A9 }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10919 }, + { 0x1091F, 0x10939 }, + { 0x1093F, 0x1093F }, + { 0x10A00, 0x10A00 }, + { 0x10A10, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x10A40, 0x10A47 }, + { 0x10A50, 0x10A58 }, + { 0x12000, 0x1236E }, + { 0x12400, 0x12462 }, + { 0x12470, 0x12473 }, + { 0x1D000, 0x1D0F5 }, + { 0x1D100, 0x1D126 }, + { 0x1D129, 0x1D164 }, + { 0x1D166, 0x1D166 }, + { 0x1D16A, 0x1D16D }, + { 0x1D183, 0x1D184 }, + { 0x1D18C, 0x1D1A9 }, + { 0x1D1AE, 0x1D1DD }, + { 0x1D200, 0x1D241 }, + { 0x1D245, 0x1D245 }, + { 0x1D300, 0x1D356 }, + { 0x1D360, 0x1D371 }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D7CB }, + { 0x1D7CE, 0x1D7FF }, + { 0x1F000, 0x1F02B }, + { 0x1F030, 0x1F093 }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D } + +#define PREDICATE(c) uc_is_property_grapheme_base (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_grapheme_extend.c b/tests/unictype/test-pr_grapheme_extend.c new file mode 100644 index 00000000..fa859bbe --- /dev/null +++ b/tests/unictype/test-pr_grapheme_extend.c @@ -0,0 +1,194 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0300, 0x036F }, + { 0x0483, 0x0489 }, + { 0x0591, 0x05BD }, + { 0x05BF, 0x05BF }, + { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, + { 0x05C7, 0x05C7 }, + { 0x0610, 0x061A }, + { 0x064B, 0x065E }, + { 0x0670, 0x0670 }, + { 0x06D6, 0x06DC }, + { 0x06DE, 0x06E4 }, + { 0x06E7, 0x06E8 }, + { 0x06EA, 0x06ED }, + { 0x0711, 0x0711 }, + { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, + { 0x07EB, 0x07F3 }, + { 0x0901, 0x0902 }, + { 0x093C, 0x093C }, + { 0x0941, 0x0948 }, + { 0x094D, 0x094D }, + { 0x0951, 0x0954 }, + { 0x0962, 0x0963 }, + { 0x0981, 0x0981 }, + { 0x09BC, 0x09BC }, + { 0x09BE, 0x09BE }, + { 0x09C1, 0x09C4 }, + { 0x09CD, 0x09CD }, + { 0x09D7, 0x09D7 }, + { 0x09E2, 0x09E3 }, + { 0x0A01, 0x0A02 }, + { 0x0A3C, 0x0A3C }, + { 0x0A41, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, + { 0x0A51, 0x0A51 }, + { 0x0A70, 0x0A71 }, + { 0x0A75, 0x0A75 }, + { 0x0A81, 0x0A82 }, + { 0x0ABC, 0x0ABC }, + { 0x0AC1, 0x0AC5 }, + { 0x0AC7, 0x0AC8 }, + { 0x0ACD, 0x0ACD }, + { 0x0AE2, 0x0AE3 }, + { 0x0B01, 0x0B01 }, + { 0x0B3C, 0x0B3C }, + { 0x0B3E, 0x0B3F }, + { 0x0B41, 0x0B44 }, + { 0x0B4D, 0x0B4D }, + { 0x0B56, 0x0B57 }, + { 0x0B62, 0x0B63 }, + { 0x0B82, 0x0B82 }, + { 0x0BBE, 0x0BBE }, + { 0x0BC0, 0x0BC0 }, + { 0x0BCD, 0x0BCD }, + { 0x0BD7, 0x0BD7 }, + { 0x0C3E, 0x0C40 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, + { 0x0C55, 0x0C56 }, + { 0x0C62, 0x0C63 }, + { 0x0CBC, 0x0CBC }, + { 0x0CBF, 0x0CBF }, + { 0x0CC2, 0x0CC2 }, + { 0x0CC6, 0x0CC6 }, + { 0x0CCC, 0x0CCD }, + { 0x0CD5, 0x0CD6 }, + { 0x0CE2, 0x0CE3 }, + { 0x0D3E, 0x0D3E }, + { 0x0D41, 0x0D44 }, + { 0x0D4D, 0x0D4D }, + { 0x0D57, 0x0D57 }, + { 0x0D62, 0x0D63 }, + { 0x0DCA, 0x0DCA }, + { 0x0DCF, 0x0DCF }, + { 0x0DD2, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0DDF, 0x0DDF }, + { 0x0E31, 0x0E31 }, + { 0x0E34, 0x0E3A }, + { 0x0E47, 0x0E4E }, + { 0x0EB1, 0x0EB1 }, + { 0x0EB4, 0x0EB9 }, + { 0x0EBB, 0x0EBC }, + { 0x0EC8, 0x0ECD }, + { 0x0F18, 0x0F19 }, + { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, + { 0x0F39, 0x0F39 }, + { 0x0F71, 0x0F7E }, + { 0x0F80, 0x0F84 }, + { 0x0F86, 0x0F87 }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x0FC6, 0x0FC6 }, + { 0x102D, 0x1030 }, + { 0x1032, 0x1037 }, + { 0x1039, 0x103A }, + { 0x103D, 0x103E }, + { 0x1058, 0x1059 }, + { 0x105E, 0x1060 }, + { 0x1071, 0x1074 }, + { 0x1082, 0x1082 }, + { 0x1085, 0x1086 }, + { 0x108D, 0x108D }, + { 0x135F, 0x135F }, + { 0x1712, 0x1714 }, + { 0x1732, 0x1734 }, + { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, + { 0x17B7, 0x17BD }, + { 0x17C6, 0x17C6 }, + { 0x17C9, 0x17D3 }, + { 0x17DD, 0x17DD }, + { 0x180B, 0x180D }, + { 0x18A9, 0x18A9 }, + { 0x1920, 0x1922 }, + { 0x1927, 0x1928 }, + { 0x1932, 0x1932 }, + { 0x1939, 0x193B }, + { 0x1A17, 0x1A18 }, + { 0x1B00, 0x1B03 }, + { 0x1B34, 0x1B34 }, + { 0x1B36, 0x1B3A }, + { 0x1B3C, 0x1B3C }, + { 0x1B42, 0x1B42 }, + { 0x1B6B, 0x1B73 }, + { 0x1B80, 0x1B81 }, + { 0x1BA2, 0x1BA5 }, + { 0x1BA8, 0x1BA9 }, + { 0x1C2C, 0x1C33 }, + { 0x1C36, 0x1C37 }, + { 0x1DC0, 0x1DE6 }, + { 0x1DFE, 0x1DFF }, + { 0x200C, 0x200D }, + { 0x20D0, 0x20F0 }, + { 0x2DE0, 0x2DFF }, + { 0x302A, 0x302F }, + { 0x3099, 0x309A }, + { 0xA66F, 0xA672 }, + { 0xA67C, 0xA67D }, + { 0xA802, 0xA802 }, + { 0xA806, 0xA806 }, + { 0xA80B, 0xA80B }, + { 0xA825, 0xA826 }, + { 0xA8C4, 0xA8C4 }, + { 0xA926, 0xA92D }, + { 0xA947, 0xA951 }, + { 0xAA29, 0xAA2E }, + { 0xAA31, 0xAA32 }, + { 0xAA35, 0xAA36 }, + { 0xAA43, 0xAA43 }, + { 0xAA4C, 0xAA4C }, + { 0xFB1E, 0xFB1E }, + { 0xFE00, 0xFE0F }, + { 0xFE20, 0xFE26 }, + { 0xFF9E, 0xFF9F }, + { 0x101FD, 0x101FD }, + { 0x10A01, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A0F }, + { 0x10A38, 0x10A3A }, + { 0x10A3F, 0x10A3F }, + { 0x1D165, 0x1D165 }, + { 0x1D167, 0x1D169 }, + { 0x1D16E, 0x1D172 }, + { 0x1D17B, 0x1D182 }, + { 0x1D185, 0x1D18B }, + { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, + { 0xE0100, 0xE01EF } + +#define PREDICATE(c) uc_is_property_grapheme_extend (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_grapheme_link.c b/tests/unictype/test-pr_grapheme_link.c new file mode 100644 index 00000000..ff1fa5a4 --- /dev/null +++ b/tests/unictype/test-pr_grapheme_link.c @@ -0,0 +1,44 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x094D, 0x094D }, + { 0x09CD, 0x09CD }, + { 0x0A4D, 0x0A4D }, + { 0x0ACD, 0x0ACD }, + { 0x0B4D, 0x0B4D }, + { 0x0BCD, 0x0BCD }, + { 0x0C4D, 0x0C4D }, + { 0x0CCD, 0x0CCD }, + { 0x0D4D, 0x0D4D }, + { 0x0DCA, 0x0DCA }, + { 0x0E3A, 0x0E3A }, + { 0x0F84, 0x0F84 }, + { 0x1039, 0x103A }, + { 0x1714, 0x1714 }, + { 0x1734, 0x1734 }, + { 0x17D2, 0x17D2 }, + { 0x1B44, 0x1B44 }, + { 0x1BAA, 0x1BAA }, + { 0xA806, 0xA806 }, + { 0xA8C4, 0xA8C4 }, + { 0xA953, 0xA953 }, + { 0x10A3F, 0x10A3F } + +#define PREDICATE(c) uc_is_property_grapheme_link (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_hex_digit.c b/tests/unictype/test-pr_hex_digit.c new file mode 100644 index 00000000..1a761b83 --- /dev/null +++ b/tests/unictype/test-pr_hex_digit.c @@ -0,0 +1,28 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 }, + { 0x0041, 0x0046 }, + { 0x0061, 0x0066 }, + { 0xFF10, 0xFF19 }, + { 0xFF21, 0xFF26 }, + { 0xFF41, 0xFF46 } + +#define PREDICATE(c) uc_is_property_hex_digit (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_hyphen.c b/tests/unictype/test-pr_hyphen.c new file mode 100644 index 00000000..9557fbad --- /dev/null +++ b/tests/unictype/test-pr_hyphen.c @@ -0,0 +1,32 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x002D, 0x002D }, + { 0x00AD, 0x00AD }, + { 0x058A, 0x058A }, + { 0x1806, 0x1806 }, + { 0x2010, 0x2011 }, + { 0x2E17, 0x2E17 }, + { 0x30FB, 0x30FB }, + { 0xFE63, 0xFE63 }, + { 0xFF0D, 0xFF0D }, + { 0xFF65, 0xFF65 } + +#define PREDICATE(c) uc_is_property_hyphen (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_id_continue.c b/tests/unictype/test-pr_id_continue.c new file mode 100644 index 00000000..a900ec93 --- /dev/null +++ b/tests/unictype/test-pr_id_continue.c @@ -0,0 +1,499 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 }, + { 0x0041, 0x005A }, + { 0x005F, 0x005F }, + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00B7, 0x00B7 }, + { 0x00BA, 0x00BA }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00F6 }, + { 0x00F8, 0x02C1 }, + { 0x02C6, 0x02D1 }, + { 0x02E0, 0x02E4 }, + { 0x02EC, 0x02EC }, + { 0x02EE, 0x02EE }, + { 0x0300, 0x0374 }, + { 0x0376, 0x0377 }, + { 0x037A, 0x037D }, + { 0x0386, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x03F5 }, + { 0x03F7, 0x0481 }, + { 0x0483, 0x0487 }, + { 0x048A, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0559, 0x0559 }, + { 0x0561, 0x0587 }, + { 0x0591, 0x05BD }, + { 0x05BF, 0x05BF }, + { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, + { 0x05C7, 0x05C7 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F2 }, + { 0x0610, 0x061A }, + { 0x0621, 0x065E }, + { 0x0660, 0x0669 }, + { 0x066E, 0x06D3 }, + { 0x06D5, 0x06DC }, + { 0x06DF, 0x06E8 }, + { 0x06EA, 0x06FC }, + { 0x06FF, 0x06FF }, + { 0x0710, 0x074A }, + { 0x074D, 0x07B1 }, + { 0x07C0, 0x07F5 }, + { 0x07FA, 0x07FA }, + { 0x0901, 0x0939 }, + { 0x093C, 0x094D }, + { 0x0950, 0x0954 }, + { 0x0958, 0x0963 }, + { 0x0966, 0x096F }, + { 0x0971, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0981, 0x0983 }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BC, 0x09C4 }, + { 0x09C7, 0x09C8 }, + { 0x09CB, 0x09CE }, + { 0x09D7, 0x09D7 }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E3 }, + { 0x09E6, 0x09F1 }, + { 0x0A01, 0x0A03 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A3C, 0x0A3C }, + { 0x0A3E, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, + { 0x0A51, 0x0A51 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A66, 0x0A75 }, + { 0x0A81, 0x0A83 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABC, 0x0AC5 }, + { 0x0AC7, 0x0AC9 }, + { 0x0ACB, 0x0ACD }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE3 }, + { 0x0AE6, 0x0AEF }, + { 0x0B01, 0x0B03 }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3C, 0x0B44 }, + { 0x0B47, 0x0B48 }, + { 0x0B4B, 0x0B4D }, + { 0x0B56, 0x0B57 }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B63 }, + { 0x0B66, 0x0B6F }, + { 0x0B71, 0x0B71 }, + { 0x0B82, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BBE, 0x0BC2 }, + { 0x0BC6, 0x0BC8 }, + { 0x0BCA, 0x0BCD }, + { 0x0BD0, 0x0BD0 }, + { 0x0BD7, 0x0BD7 }, + { 0x0BE6, 0x0BEF }, + { 0x0C01, 0x0C03 }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C44 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, + { 0x0C55, 0x0C56 }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C63 }, + { 0x0C66, 0x0C6F }, + { 0x0C82, 0x0C83 }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBC, 0x0CC4 }, + { 0x0CC6, 0x0CC8 }, + { 0x0CCA, 0x0CCD }, + { 0x0CD5, 0x0CD6 }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE3 }, + { 0x0CE6, 0x0CEF }, + { 0x0D02, 0x0D03 }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D44 }, + { 0x0D46, 0x0D48 }, + { 0x0D4A, 0x0D4D }, + { 0x0D57, 0x0D57 }, + { 0x0D60, 0x0D63 }, + { 0x0D66, 0x0D6F }, + { 0x0D7A, 0x0D7F }, + { 0x0D82, 0x0D83 }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0DCA, 0x0DCA }, + { 0x0DCF, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0DD8, 0x0DDF }, + { 0x0DF2, 0x0DF3 }, + { 0x0E01, 0x0E3A }, + { 0x0E40, 0x0E4E }, + { 0x0E50, 0x0E59 }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB9 }, + { 0x0EBB, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EC6, 0x0EC6 }, + { 0x0EC8, 0x0ECD }, + { 0x0ED0, 0x0ED9 }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F00 }, + { 0x0F18, 0x0F19 }, + { 0x0F20, 0x0F29 }, + { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, + { 0x0F39, 0x0F39 }, + { 0x0F3E, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F71, 0x0F84 }, + { 0x0F86, 0x0F8B }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x0FC6, 0x0FC6 }, + { 0x1000, 0x1049 }, + { 0x1050, 0x1099 }, + { 0x10A0, 0x10C5 }, + { 0x10D0, 0x10FA }, + { 0x10FC, 0x10FC }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x135F, 0x135F }, + { 0x1369, 0x1371 }, + { 0x1380, 0x138F }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x166C }, + { 0x166F, 0x1676 }, + { 0x1681, 0x169A }, + { 0x16A0, 0x16EA }, + { 0x16EE, 0x16F0 }, + { 0x1700, 0x170C }, + { 0x170E, 0x1714 }, + { 0x1720, 0x1734 }, + { 0x1740, 0x1753 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1772, 0x1773 }, + { 0x1780, 0x17B3 }, + { 0x17B6, 0x17D3 }, + { 0x17D7, 0x17D7 }, + { 0x17DC, 0x17DD }, + { 0x17E0, 0x17E9 }, + { 0x180B, 0x180D }, + { 0x1810, 0x1819 }, + { 0x1820, 0x1877 }, + { 0x1880, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1920, 0x192B }, + { 0x1930, 0x193B }, + { 0x1946, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19B0, 0x19C9 }, + { 0x19D0, 0x19D9 }, + { 0x1A00, 0x1A1B }, + { 0x1B00, 0x1B4B }, + { 0x1B50, 0x1B59 }, + { 0x1B6B, 0x1B73 }, + { 0x1B80, 0x1BAA }, + { 0x1BAE, 0x1BB9 }, + { 0x1C00, 0x1C37 }, + { 0x1C40, 0x1C49 }, + { 0x1C4D, 0x1C7D }, + { 0x1D00, 0x1DE6 }, + { 0x1DFE, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FBC }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FC4 }, + { 0x1FC6, 0x1FCC }, + { 0x1FD0, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FE0, 0x1FEC }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFC }, + { 0x203F, 0x2040 }, + { 0x2054, 0x2054 }, + { 0x2071, 0x2071 }, + { 0x207F, 0x207F }, + { 0x2090, 0x2094 }, + { 0x20D0, 0x20DC }, + { 0x20E1, 0x20E1 }, + { 0x20E5, 0x20F0 }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2118, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x2128 }, + { 0x212A, 0x2139 }, + { 0x213C, 0x213F }, + { 0x2145, 0x2149 }, + { 0x214E, 0x214E }, + { 0x2160, 0x2188 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CE4 }, + { 0x2D00, 0x2D25 }, + { 0x2D30, 0x2D65 }, + { 0x2D6F, 0x2D6F }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x2DE0, 0x2DFF }, + { 0x3005, 0x3007 }, + { 0x3021, 0x302F }, + { 0x3031, 0x3035 }, + { 0x3038, 0x303C }, + { 0x3041, 0x3096 }, + { 0x3099, 0x309F }, + { 0x30A1, 0x30FA }, + { 0x30FC, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x31A0, 0x31B7 }, + { 0x31F0, 0x31FF }, + { 0x3400, 0x4DB5 }, + { 0x4E00, 0x9FC3 }, + { 0xA000, 0xA48C }, + { 0xA500, 0xA60C }, + { 0xA610, 0xA62B }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA66F }, + { 0xA67C, 0xA67D }, + { 0xA67F, 0xA697 }, + { 0xA717, 0xA71F }, + { 0xA722, 0xA788 }, + { 0xA78B, 0xA78C }, + { 0xA7FB, 0xA827 }, + { 0xA840, 0xA873 }, + { 0xA880, 0xA8C4 }, + { 0xA8D0, 0xA8D9 }, + { 0xA900, 0xA92D }, + { 0xA930, 0xA953 }, + { 0xAA00, 0xAA36 }, + { 0xAA40, 0xAA4D }, + { 0xAA50, 0xAA59 }, + { 0xAC00, 0xD7A3 }, + { 0xF900, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB28 }, + { 0xFB2A, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFD3D }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDFB }, + { 0xFE00, 0xFE0F }, + { 0xFE20, 0xFE26 }, + { 0xFE33, 0xFE34 }, + { 0xFE4D, 0xFE4F }, + { 0xFE70, 0xFE74 }, + { 0xFE76, 0xFEFC }, + { 0xFF10, 0xFF19 }, + { 0xFF21, 0xFF3A }, + { 0xFF3F, 0xFF3F }, + { 0xFF41, 0xFF5A }, + { 0xFF66, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10140, 0x10174 }, + { 0x101FD, 0x101FD }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10330, 0x1034A }, + { 0x10380, 0x1039D }, + { 0x103A0, 0x103C3 }, + { 0x103C8, 0x103CF }, + { 0x103D1, 0x103D5 }, + { 0x10400, 0x1049D }, + { 0x104A0, 0x104A9 }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10915 }, + { 0x10920, 0x10939 }, + { 0x10A00, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x10A38, 0x10A3A }, + { 0x10A3F, 0x10A3F }, + { 0x12000, 0x1236E }, + { 0x12400, 0x12462 }, + { 0x1D165, 0x1D169 }, + { 0x1D16D, 0x1D172 }, + { 0x1D17B, 0x1D182 }, + { 0x1D185, 0x1D18B }, + { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6FA }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D734 }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D76E }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D7A8 }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7CB }, + { 0x1D7CE, 0x1D7FF }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D }, + { 0xE0100, 0xE01EF } + +#define PREDICATE(c) uc_is_property_id_continue (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_id_start.c b/tests/unictype/test-pr_id_start.c new file mode 100644 index 00000000..15b4bd9e --- /dev/null +++ b/tests/unictype/test-pr_id_start.c @@ -0,0 +1,414 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0041, 0x005A }, + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00BA, 0x00BA }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00F6 }, + { 0x00F8, 0x02C1 }, + { 0x02C6, 0x02D1 }, + { 0x02E0, 0x02E4 }, + { 0x02EC, 0x02EC }, + { 0x02EE, 0x02EE }, + { 0x0370, 0x0374 }, + { 0x0376, 0x0377 }, + { 0x037A, 0x037D }, + { 0x0386, 0x0386 }, + { 0x0388, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x03F5 }, + { 0x03F7, 0x0481 }, + { 0x048A, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0559, 0x0559 }, + { 0x0561, 0x0587 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F2 }, + { 0x0621, 0x064A }, + { 0x066E, 0x066F }, + { 0x0671, 0x06D3 }, + { 0x06D5, 0x06D5 }, + { 0x06E5, 0x06E6 }, + { 0x06EE, 0x06EF }, + { 0x06FA, 0x06FC }, + { 0x06FF, 0x06FF }, + { 0x0710, 0x0710 }, + { 0x0712, 0x072F }, + { 0x074D, 0x07A5 }, + { 0x07B1, 0x07B1 }, + { 0x07CA, 0x07EA }, + { 0x07F4, 0x07F5 }, + { 0x07FA, 0x07FA }, + { 0x0904, 0x0939 }, + { 0x093D, 0x093D }, + { 0x0950, 0x0950 }, + { 0x0958, 0x0961 }, + { 0x0971, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BD, 0x09BD }, + { 0x09CE, 0x09CE }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E1 }, + { 0x09F0, 0x09F1 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A72, 0x0A74 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABD, 0x0ABD }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE1 }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3D, 0x0B3D }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B61 }, + { 0x0B71, 0x0B71 }, + { 0x0B83, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BD0, 0x0BD0 }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C3D }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C61 }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBD, 0x0CBD }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE1 }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D3D }, + { 0x0D60, 0x0D61 }, + { 0x0D7A, 0x0D7F }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0E01, 0x0E30 }, + { 0x0E32, 0x0E33 }, + { 0x0E40, 0x0E46 }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB0 }, + { 0x0EB2, 0x0EB3 }, + { 0x0EBD, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EC6, 0x0EC6 }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F00 }, + { 0x0F40, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F88, 0x0F8B }, + { 0x1000, 0x102A }, + { 0x103F, 0x103F }, + { 0x1050, 0x1055 }, + { 0x105A, 0x105D }, + { 0x1061, 0x1061 }, + { 0x1065, 0x1066 }, + { 0x106E, 0x1070 }, + { 0x1075, 0x1081 }, + { 0x108E, 0x108E }, + { 0x10A0, 0x10C5 }, + { 0x10D0, 0x10FA }, + { 0x10FC, 0x10FC }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x1380, 0x138F }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x166C }, + { 0x166F, 0x1676 }, + { 0x1681, 0x169A }, + { 0x16A0, 0x16EA }, + { 0x16EE, 0x16F0 }, + { 0x1700, 0x170C }, + { 0x170E, 0x1711 }, + { 0x1720, 0x1731 }, + { 0x1740, 0x1751 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1780, 0x17B3 }, + { 0x17D7, 0x17D7 }, + { 0x17DC, 0x17DC }, + { 0x1820, 0x1877 }, + { 0x1880, 0x18A8 }, + { 0x18AA, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1950, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19C1, 0x19C7 }, + { 0x1A00, 0x1A16 }, + { 0x1B05, 0x1B33 }, + { 0x1B45, 0x1B4B }, + { 0x1B83, 0x1BA0 }, + { 0x1BAE, 0x1BAF }, + { 0x1C00, 0x1C23 }, + { 0x1C4D, 0x1C4F }, + { 0x1C5A, 0x1C7D }, + { 0x1D00, 0x1DBF }, + { 0x1E00, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FBC }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FC4 }, + { 0x1FC6, 0x1FCC }, + { 0x1FD0, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FE0, 0x1FEC }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFC }, + { 0x2071, 0x2071 }, + { 0x207F, 0x207F }, + { 0x2090, 0x2094 }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2118, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x2128 }, + { 0x212A, 0x2139 }, + { 0x213C, 0x213F }, + { 0x2145, 0x2149 }, + { 0x214E, 0x214E }, + { 0x2160, 0x2188 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CE4 }, + { 0x2D00, 0x2D25 }, + { 0x2D30, 0x2D65 }, + { 0x2D6F, 0x2D6F }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x3005, 0x3007 }, + { 0x3021, 0x3029 }, + { 0x3031, 0x3035 }, + { 0x3038, 0x303C }, + { 0x3041, 0x3096 }, + { 0x309B, 0x309F }, + { 0x30A1, 0x30FA }, + { 0x30FC, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x31A0, 0x31B7 }, + { 0x31F0, 0x31FF }, + { 0x3400, 0x4DB5 }, + { 0x4E00, 0x9FC3 }, + { 0xA000, 0xA48C }, + { 0xA500, 0xA60C }, + { 0xA610, 0xA61F }, + { 0xA62A, 0xA62B }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA66E }, + { 0xA67F, 0xA697 }, + { 0xA717, 0xA71F }, + { 0xA722, 0xA788 }, + { 0xA78B, 0xA78C }, + { 0xA7FB, 0xA801 }, + { 0xA803, 0xA805 }, + { 0xA807, 0xA80A }, + { 0xA80C, 0xA822 }, + { 0xA840, 0xA873 }, + { 0xA882, 0xA8B3 }, + { 0xA90A, 0xA925 }, + { 0xA930, 0xA946 }, + { 0xAA00, 0xAA28 }, + { 0xAA40, 0xAA42 }, + { 0xAA44, 0xAA4B }, + { 0xAC00, 0xD7A3 }, + { 0xF900, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB1D }, + { 0xFB1F, 0xFB28 }, + { 0xFB2A, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFD3D }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDFB }, + { 0xFE70, 0xFE74 }, + { 0xFE76, 0xFEFC }, + { 0xFF21, 0xFF3A }, + { 0xFF41, 0xFF5A }, + { 0xFF66, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10140, 0x10174 }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10330, 0x1034A }, + { 0x10380, 0x1039D }, + { 0x103A0, 0x103C3 }, + { 0x103C8, 0x103CF }, + { 0x103D1, 0x103D5 }, + { 0x10400, 0x1049D }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10915 }, + { 0x10920, 0x10939 }, + { 0x10A00, 0x10A00 }, + { 0x10A10, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x12000, 0x1236E }, + { 0x12400, 0x12462 }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6FA }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D734 }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D76E }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D7A8 }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7CB }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D } + +#define PREDICATE(c) uc_is_property_id_start (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_ideographic.c b/tests/unictype/test-pr_ideographic.c new file mode 100644 index 00000000..c61195db --- /dev/null +++ b/tests/unictype/test-pr_ideographic.c @@ -0,0 +1,32 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x3006, 0x3007 }, + { 0x3021, 0x3029 }, + { 0x3038, 0x303A }, + { 0x3400, 0x4DB5 }, + { 0x4E00, 0x9FC3 }, + { 0xF900, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D } + +#define PREDICATE(c) uc_is_property_ideographic (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_ids_binary_operator.c b/tests/unictype/test-pr_ids_binary_operator.c new file mode 100644 index 00000000..cc6e39a6 --- /dev/null +++ b/tests/unictype/test-pr_ids_binary_operator.c @@ -0,0 +1,24 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x2FF0, 0x2FF1 }, + { 0x2FF4, 0x2FFB } + +#define PREDICATE(c) uc_is_property_ids_binary_operator (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_ids_trinary_operator.c b/tests/unictype/test-pr_ids_trinary_operator.c new file mode 100644 index 00000000..c95de7fe --- /dev/null +++ b/tests/unictype/test-pr_ids_trinary_operator.c @@ -0,0 +1,23 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x2FF2, 0x2FF3 } + +#define PREDICATE(c) uc_is_property_ids_trinary_operator (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_ignorable_control.c b/tests/unictype/test-pr_ignorable_control.c new file mode 100644 index 00000000..58d38b52 --- /dev/null +++ b/tests/unictype/test-pr_ignorable_control.c @@ -0,0 +1,40 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0001, 0x0008 }, + { 0x000E, 0x001B }, + { 0x007F, 0x0084 }, + { 0x0086, 0x009F }, + { 0x00AD, 0x00AD }, + { 0x0600, 0x0603 }, + { 0x06DD, 0x06DD }, + { 0x070F, 0x070F }, + { 0x17B4, 0x17B5 }, + { 0x200B, 0x200F }, + { 0x202A, 0x202E }, + { 0x2060, 0x2064 }, + { 0x206A, 0x206F }, + { 0xFEFF, 0xFEFF }, + { 0xFFF9, 0xFFFB }, + { 0x1D173, 0x1D17A }, + { 0xE0001, 0xE0001 }, + { 0xE0020, 0xE007F } + +#define PREDICATE(c) uc_is_property_ignorable_control (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_iso_control.c b/tests/unictype/test-pr_iso_control.c new file mode 100644 index 00000000..c7d26971 --- /dev/null +++ b/tests/unictype/test-pr_iso_control.c @@ -0,0 +1,24 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0000, 0x001F }, + { 0x007F, 0x009F } + +#define PREDICATE(c) uc_is_property_iso_control (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_join_control.c b/tests/unictype/test-pr_join_control.c new file mode 100644 index 00000000..a452700c --- /dev/null +++ b/tests/unictype/test-pr_join_control.c @@ -0,0 +1,23 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x200C, 0x200D } + +#define PREDICATE(c) uc_is_property_join_control (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_left_of_pair.c b/tests/unictype/test-pr_left_of_pair.c new file mode 100644 index 00000000..5aed7aa0 --- /dev/null +++ b/tests/unictype/test-pr_left_of_pair.c @@ -0,0 +1,63 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0028, 0x0028 }, + { 0x005B, 0x005B }, + { 0x007B, 0x007B }, + { 0x00AB, 0x00AB }, + { 0x0F3A, 0x0F3A }, + { 0x0F3C, 0x0F3C }, + { 0x169B, 0x169B }, + { 0x2018, 0x2018 }, + { 0x201A, 0x201C }, + { 0x201E, 0x201F }, + { 0x2039, 0x2039 }, + { 0x2045, 0x2045 }, + { 0x207D, 0x207D }, + { 0x208D, 0x208D }, + { 0x2329, 0x2329 }, + { 0x3008, 0x3008 }, + { 0x300A, 0x300A }, + { 0x300C, 0x300C }, + { 0x300E, 0x300E }, + { 0x3010, 0x3010 }, + { 0x3014, 0x3014 }, + { 0x3016, 0x3016 }, + { 0x3018, 0x3018 }, + { 0x301A, 0x301A }, + { 0x301D, 0x301D }, + { 0xFD3E, 0xFD3E }, + { 0xFE35, 0xFE35 }, + { 0xFE37, 0xFE37 }, + { 0xFE39, 0xFE39 }, + { 0xFE3B, 0xFE3B }, + { 0xFE3D, 0xFE3D }, + { 0xFE3F, 0xFE3F }, + { 0xFE41, 0xFE41 }, + { 0xFE43, 0xFE43 }, + { 0xFE59, 0xFE59 }, + { 0xFE5B, 0xFE5B }, + { 0xFE5D, 0xFE5D }, + { 0xFF08, 0xFF08 }, + { 0xFF3B, 0xFF3B }, + { 0xFF5B, 0xFF5B }, + { 0xFF62, 0xFF62 } + +#define PREDICATE(c) uc_is_property_left_of_pair (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_line_separator.c b/tests/unictype/test-pr_line_separator.c new file mode 100644 index 00000000..2f16de13 --- /dev/null +++ b/tests/unictype/test-pr_line_separator.c @@ -0,0 +1,23 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x2028, 0x2028 } + +#define PREDICATE(c) uc_is_property_line_separator (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_logical_order_exception.c b/tests/unictype/test-pr_logical_order_exception.c new file mode 100644 index 00000000..b9ca4327 --- /dev/null +++ b/tests/unictype/test-pr_logical_order_exception.c @@ -0,0 +1,24 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0E40, 0x0E44 }, + { 0x0EC0, 0x0EC4 } + +#define PREDICATE(c) uc_is_property_logical_order_exception (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_lowercase.c b/tests/unictype/test-pr_lowercase.c new file mode 100644 index 00000000..cac34e7d --- /dev/null +++ b/tests/unictype/test-pr_lowercase.c @@ -0,0 +1,623 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00BA, 0x00BA }, + { 0x00DF, 0x00F6 }, + { 0x00F8, 0x00FF }, + { 0x0101, 0x0101 }, + { 0x0103, 0x0103 }, + { 0x0105, 0x0105 }, + { 0x0107, 0x0107 }, + { 0x0109, 0x0109 }, + { 0x010B, 0x010B }, + { 0x010D, 0x010D }, + { 0x010F, 0x010F }, + { 0x0111, 0x0111 }, + { 0x0113, 0x0113 }, + { 0x0115, 0x0115 }, + { 0x0117, 0x0117 }, + { 0x0119, 0x0119 }, + { 0x011B, 0x011B }, + { 0x011D, 0x011D }, + { 0x011F, 0x011F }, + { 0x0121, 0x0121 }, + { 0x0123, 0x0123 }, + { 0x0125, 0x0125 }, + { 0x0127, 0x0127 }, + { 0x0129, 0x0129 }, + { 0x012B, 0x012B }, + { 0x012D, 0x012D }, + { 0x012F, 0x012F }, + { 0x0131, 0x0131 }, + { 0x0133, 0x0133 }, + { 0x0135, 0x0135 }, + { 0x0137, 0x0138 }, + { 0x013A, 0x013A }, + { 0x013C, 0x013C }, + { 0x013E, 0x013E }, + { 0x0140, 0x0140 }, + { 0x0142, 0x0142 }, + { 0x0144, 0x0144 }, + { 0x0146, 0x0146 }, + { 0x0148, 0x0149 }, + { 0x014B, 0x014B }, + { 0x014D, 0x014D }, + { 0x014F, 0x014F }, + { 0x0151, 0x0151 }, + { 0x0153, 0x0153 }, + { 0x0155, 0x0155 }, + { 0x0157, 0x0157 }, + { 0x0159, 0x0159 }, + { 0x015B, 0x015B }, + { 0x015D, 0x015D }, + { 0x015F, 0x015F }, + { 0x0161, 0x0161 }, + { 0x0163, 0x0163 }, + { 0x0165, 0x0165 }, + { 0x0167, 0x0167 }, + { 0x0169, 0x0169 }, + { 0x016B, 0x016B }, + { 0x016D, 0x016D }, + { 0x016F, 0x016F }, + { 0x0171, 0x0171 }, + { 0x0173, 0x0173 }, + { 0x0175, 0x0175 }, + { 0x0177, 0x0177 }, + { 0x017A, 0x017A }, + { 0x017C, 0x017C }, + { 0x017E, 0x0180 }, + { 0x0183, 0x0183 }, + { 0x0185, 0x0185 }, + { 0x0188, 0x0188 }, + { 0x018C, 0x018D }, + { 0x0192, 0x0192 }, + { 0x0195, 0x0195 }, + { 0x0199, 0x019B }, + { 0x019E, 0x019E }, + { 0x01A1, 0x01A1 }, + { 0x01A3, 0x01A3 }, + { 0x01A5, 0x01A5 }, + { 0x01A8, 0x01A8 }, + { 0x01AA, 0x01AB }, + { 0x01AD, 0x01AD }, + { 0x01B0, 0x01B0 }, + { 0x01B4, 0x01B4 }, + { 0x01B6, 0x01B6 }, + { 0x01B9, 0x01BA }, + { 0x01BD, 0x01BF }, + { 0x01C6, 0x01C6 }, + { 0x01C9, 0x01C9 }, + { 0x01CC, 0x01CC }, + { 0x01CE, 0x01CE }, + { 0x01D0, 0x01D0 }, + { 0x01D2, 0x01D2 }, + { 0x01D4, 0x01D4 }, + { 0x01D6, 0x01D6 }, + { 0x01D8, 0x01D8 }, + { 0x01DA, 0x01DA }, + { 0x01DC, 0x01DD }, + { 0x01DF, 0x01DF }, + { 0x01E1, 0x01E1 }, + { 0x01E3, 0x01E3 }, + { 0x01E5, 0x01E5 }, + { 0x01E7, 0x01E7 }, + { 0x01E9, 0x01E9 }, + { 0x01EB, 0x01EB }, + { 0x01ED, 0x01ED }, + { 0x01EF, 0x01F0 }, + { 0x01F3, 0x01F3 }, + { 0x01F5, 0x01F5 }, + { 0x01F9, 0x01F9 }, + { 0x01FB, 0x01FB }, + { 0x01FD, 0x01FD }, + { 0x01FF, 0x01FF }, + { 0x0201, 0x0201 }, + { 0x0203, 0x0203 }, + { 0x0205, 0x0205 }, + { 0x0207, 0x0207 }, + { 0x0209, 0x0209 }, + { 0x020B, 0x020B }, + { 0x020D, 0x020D }, + { 0x020F, 0x020F }, + { 0x0211, 0x0211 }, + { 0x0213, 0x0213 }, + { 0x0215, 0x0215 }, + { 0x0217, 0x0217 }, + { 0x0219, 0x0219 }, + { 0x021B, 0x021B }, + { 0x021D, 0x021D }, + { 0x021F, 0x021F }, + { 0x0221, 0x0221 }, + { 0x0223, 0x0223 }, + { 0x0225, 0x0225 }, + { 0x0227, 0x0227 }, + { 0x0229, 0x0229 }, + { 0x022B, 0x022B }, + { 0x022D, 0x022D }, + { 0x022F, 0x022F }, + { 0x0231, 0x0231 }, + { 0x0233, 0x0239 }, + { 0x023C, 0x023C }, + { 0x023F, 0x0240 }, + { 0x0242, 0x0242 }, + { 0x0247, 0x0247 }, + { 0x0249, 0x0249 }, + { 0x024B, 0x024B }, + { 0x024D, 0x024D }, + { 0x024F, 0x0293 }, + { 0x0295, 0x02B8 }, + { 0x02C0, 0x02C1 }, + { 0x02E0, 0x02E4 }, + { 0x0345, 0x0345 }, + { 0x0371, 0x0371 }, + { 0x0373, 0x0373 }, + { 0x0377, 0x0377 }, + { 0x037A, 0x037D }, + { 0x0390, 0x0390 }, + { 0x03AC, 0x03CE }, + { 0x03D0, 0x03D1 }, + { 0x03D5, 0x03D7 }, + { 0x03D9, 0x03D9 }, + { 0x03DB, 0x03DB }, + { 0x03DD, 0x03DD }, + { 0x03DF, 0x03DF }, + { 0x03E1, 0x03E1 }, + { 0x03E3, 0x03E3 }, + { 0x03E5, 0x03E5 }, + { 0x03E7, 0x03E7 }, + { 0x03E9, 0x03E9 }, + { 0x03EB, 0x03EB }, + { 0x03ED, 0x03ED }, + { 0x03EF, 0x03F3 }, + { 0x03F5, 0x03F5 }, + { 0x03F8, 0x03F8 }, + { 0x03FB, 0x03FC }, + { 0x0430, 0x045F }, + { 0x0461, 0x0461 }, + { 0x0463, 0x0463 }, + { 0x0465, 0x0465 }, + { 0x0467, 0x0467 }, + { 0x0469, 0x0469 }, + { 0x046B, 0x046B }, + { 0x046D, 0x046D }, + { 0x046F, 0x046F }, + { 0x0471, 0x0471 }, + { 0x0473, 0x0473 }, + { 0x0475, 0x0475 }, + { 0x0477, 0x0477 }, + { 0x0479, 0x0479 }, + { 0x047B, 0x047B }, + { 0x047D, 0x047D }, + { 0x047F, 0x047F }, + { 0x0481, 0x0481 }, + { 0x048B, 0x048B }, + { 0x048D, 0x048D }, + { 0x048F, 0x048F }, + { 0x0491, 0x0491 }, + { 0x0493, 0x0493 }, + { 0x0495, 0x0495 }, + { 0x0497, 0x0497 }, + { 0x0499, 0x0499 }, + { 0x049B, 0x049B }, + { 0x049D, 0x049D }, + { 0x049F, 0x049F }, + { 0x04A1, 0x04A1 }, + { 0x04A3, 0x04A3 }, + { 0x04A5, 0x04A5 }, + { 0x04A7, 0x04A7 }, + { 0x04A9, 0x04A9 }, + { 0x04AB, 0x04AB }, + { 0x04AD, 0x04AD }, + { 0x04AF, 0x04AF }, + { 0x04B1, 0x04B1 }, + { 0x04B3, 0x04B3 }, + { 0x04B5, 0x04B5 }, + { 0x04B7, 0x04B7 }, + { 0x04B9, 0x04B9 }, + { 0x04BB, 0x04BB }, + { 0x04BD, 0x04BD }, + { 0x04BF, 0x04BF }, + { 0x04C2, 0x04C2 }, + { 0x04C4, 0x04C4 }, + { 0x04C6, 0x04C6 }, + { 0x04C8, 0x04C8 }, + { 0x04CA, 0x04CA }, + { 0x04CC, 0x04CC }, + { 0x04CE, 0x04CF }, + { 0x04D1, 0x04D1 }, + { 0x04D3, 0x04D3 }, + { 0x04D5, 0x04D5 }, + { 0x04D7, 0x04D7 }, + { 0x04D9, 0x04D9 }, + { 0x04DB, 0x04DB }, + { 0x04DD, 0x04DD }, + { 0x04DF, 0x04DF }, + { 0x04E1, 0x04E1 }, + { 0x04E3, 0x04E3 }, + { 0x04E5, 0x04E5 }, + { 0x04E7, 0x04E7 }, + { 0x04E9, 0x04E9 }, + { 0x04EB, 0x04EB }, + { 0x04ED, 0x04ED }, + { 0x04EF, 0x04EF }, + { 0x04F1, 0x04F1 }, + { 0x04F3, 0x04F3 }, + { 0x04F5, 0x04F5 }, + { 0x04F7, 0x04F7 }, + { 0x04F9, 0x04F9 }, + { 0x04FB, 0x04FB }, + { 0x04FD, 0x04FD }, + { 0x04FF, 0x04FF }, + { 0x0501, 0x0501 }, + { 0x0503, 0x0503 }, + { 0x0505, 0x0505 }, + { 0x0507, 0x0507 }, + { 0x0509, 0x0509 }, + { 0x050B, 0x050B }, + { 0x050D, 0x050D }, + { 0x050F, 0x050F }, + { 0x0511, 0x0511 }, + { 0x0513, 0x0513 }, + { 0x0515, 0x0515 }, + { 0x0517, 0x0517 }, + { 0x0519, 0x0519 }, + { 0x051B, 0x051B }, + { 0x051D, 0x051D }, + { 0x051F, 0x051F }, + { 0x0521, 0x0521 }, + { 0x0523, 0x0523 }, + { 0x0561, 0x0587 }, + { 0x1D00, 0x1DBF }, + { 0x1E01, 0x1E01 }, + { 0x1E03, 0x1E03 }, + { 0x1E05, 0x1E05 }, + { 0x1E07, 0x1E07 }, + { 0x1E09, 0x1E09 }, + { 0x1E0B, 0x1E0B }, + { 0x1E0D, 0x1E0D }, + { 0x1E0F, 0x1E0F }, + { 0x1E11, 0x1E11 }, + { 0x1E13, 0x1E13 }, + { 0x1E15, 0x1E15 }, + { 0x1E17, 0x1E17 }, + { 0x1E19, 0x1E19 }, + { 0x1E1B, 0x1E1B }, + { 0x1E1D, 0x1E1D }, + { 0x1E1F, 0x1E1F }, + { 0x1E21, 0x1E21 }, + { 0x1E23, 0x1E23 }, + { 0x1E25, 0x1E25 }, + { 0x1E27, 0x1E27 }, + { 0x1E29, 0x1E29 }, + { 0x1E2B, 0x1E2B }, + { 0x1E2D, 0x1E2D }, + { 0x1E2F, 0x1E2F }, + { 0x1E31, 0x1E31 }, + { 0x1E33, 0x1E33 }, + { 0x1E35, 0x1E35 }, + { 0x1E37, 0x1E37 }, + { 0x1E39, 0x1E39 }, + { 0x1E3B, 0x1E3B }, + { 0x1E3D, 0x1E3D }, + { 0x1E3F, 0x1E3F }, + { 0x1E41, 0x1E41 }, + { 0x1E43, 0x1E43 }, + { 0x1E45, 0x1E45 }, + { 0x1E47, 0x1E47 }, + { 0x1E49, 0x1E49 }, + { 0x1E4B, 0x1E4B }, + { 0x1E4D, 0x1E4D }, + { 0x1E4F, 0x1E4F }, + { 0x1E51, 0x1E51 }, + { 0x1E53, 0x1E53 }, + { 0x1E55, 0x1E55 }, + { 0x1E57, 0x1E57 }, + { 0x1E59, 0x1E59 }, + { 0x1E5B, 0x1E5B }, + { 0x1E5D, 0x1E5D }, + { 0x1E5F, 0x1E5F }, + { 0x1E61, 0x1E61 }, + { 0x1E63, 0x1E63 }, + { 0x1E65, 0x1E65 }, + { 0x1E67, 0x1E67 }, + { 0x1E69, 0x1E69 }, + { 0x1E6B, 0x1E6B }, + { 0x1E6D, 0x1E6D }, + { 0x1E6F, 0x1E6F }, + { 0x1E71, 0x1E71 }, + { 0x1E73, 0x1E73 }, + { 0x1E75, 0x1E75 }, + { 0x1E77, 0x1E77 }, + { 0x1E79, 0x1E79 }, + { 0x1E7B, 0x1E7B }, + { 0x1E7D, 0x1E7D }, + { 0x1E7F, 0x1E7F }, + { 0x1E81, 0x1E81 }, + { 0x1E83, 0x1E83 }, + { 0x1E85, 0x1E85 }, + { 0x1E87, 0x1E87 }, + { 0x1E89, 0x1E89 }, + { 0x1E8B, 0x1E8B }, + { 0x1E8D, 0x1E8D }, + { 0x1E8F, 0x1E8F }, + { 0x1E91, 0x1E91 }, + { 0x1E93, 0x1E93 }, + { 0x1E95, 0x1E9D }, + { 0x1E9F, 0x1E9F }, + { 0x1EA1, 0x1EA1 }, + { 0x1EA3, 0x1EA3 }, + { 0x1EA5, 0x1EA5 }, + { 0x1EA7, 0x1EA7 }, + { 0x1EA9, 0x1EA9 }, + { 0x1EAB, 0x1EAB }, + { 0x1EAD, 0x1EAD }, + { 0x1EAF, 0x1EAF }, + { 0x1EB1, 0x1EB1 }, + { 0x1EB3, 0x1EB3 }, + { 0x1EB5, 0x1EB5 }, + { 0x1EB7, 0x1EB7 }, + { 0x1EB9, 0x1EB9 }, + { 0x1EBB, 0x1EBB }, + { 0x1EBD, 0x1EBD }, + { 0x1EBF, 0x1EBF }, + { 0x1EC1, 0x1EC1 }, + { 0x1EC3, 0x1EC3 }, + { 0x1EC5, 0x1EC5 }, + { 0x1EC7, 0x1EC7 }, + { 0x1EC9, 0x1EC9 }, + { 0x1ECB, 0x1ECB }, + { 0x1ECD, 0x1ECD }, + { 0x1ECF, 0x1ECF }, + { 0x1ED1, 0x1ED1 }, + { 0x1ED3, 0x1ED3 }, + { 0x1ED5, 0x1ED5 }, + { 0x1ED7, 0x1ED7 }, + { 0x1ED9, 0x1ED9 }, + { 0x1EDB, 0x1EDB }, + { 0x1EDD, 0x1EDD }, + { 0x1EDF, 0x1EDF }, + { 0x1EE1, 0x1EE1 }, + { 0x1EE3, 0x1EE3 }, + { 0x1EE5, 0x1EE5 }, + { 0x1EE7, 0x1EE7 }, + { 0x1EE9, 0x1EE9 }, + { 0x1EEB, 0x1EEB }, + { 0x1EED, 0x1EED }, + { 0x1EEF, 0x1EEF }, + { 0x1EF1, 0x1EF1 }, + { 0x1EF3, 0x1EF3 }, + { 0x1EF5, 0x1EF5 }, + { 0x1EF7, 0x1EF7 }, + { 0x1EF9, 0x1EF9 }, + { 0x1EFB, 0x1EFB }, + { 0x1EFD, 0x1EFD }, + { 0x1EFF, 0x1F07 }, + { 0x1F10, 0x1F15 }, + { 0x1F20, 0x1F27 }, + { 0x1F30, 0x1F37 }, + { 0x1F40, 0x1F45 }, + { 0x1F50, 0x1F57 }, + { 0x1F60, 0x1F67 }, + { 0x1F70, 0x1F7D }, + { 0x1F80, 0x1F87 }, + { 0x1F90, 0x1F97 }, + { 0x1FA0, 0x1FA7 }, + { 0x1FB0, 0x1FB4 }, + { 0x1FB6, 0x1FB7 }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FC4 }, + { 0x1FC6, 0x1FC7 }, + { 0x1FD0, 0x1FD3 }, + { 0x1FD6, 0x1FD7 }, + { 0x1FE0, 0x1FE7 }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FF7 }, + { 0x2071, 0x2071 }, + { 0x207F, 0x207F }, + { 0x2090, 0x2094 }, + { 0x210A, 0x210A }, + { 0x210E, 0x210F }, + { 0x2113, 0x2113 }, + { 0x212F, 0x212F }, + { 0x2134, 0x2134 }, + { 0x2139, 0x2139 }, + { 0x213C, 0x213D }, + { 0x2146, 0x2149 }, + { 0x214E, 0x214E }, + { 0x2170, 0x217F }, + { 0x2184, 0x2184 }, + { 0x24D0, 0x24E9 }, + { 0x2C30, 0x2C5E }, + { 0x2C61, 0x2C61 }, + { 0x2C65, 0x2C66 }, + { 0x2C68, 0x2C68 }, + { 0x2C6A, 0x2C6A }, + { 0x2C6C, 0x2C6C }, + { 0x2C71, 0x2C71 }, + { 0x2C73, 0x2C74 }, + { 0x2C76, 0x2C7D }, + { 0x2C81, 0x2C81 }, + { 0x2C83, 0x2C83 }, + { 0x2C85, 0x2C85 }, + { 0x2C87, 0x2C87 }, + { 0x2C89, 0x2C89 }, + { 0x2C8B, 0x2C8B }, + { 0x2C8D, 0x2C8D }, + { 0x2C8F, 0x2C8F }, + { 0x2C91, 0x2C91 }, + { 0x2C93, 0x2C93 }, + { 0x2C95, 0x2C95 }, + { 0x2C97, 0x2C97 }, + { 0x2C99, 0x2C99 }, + { 0x2C9B, 0x2C9B }, + { 0x2C9D, 0x2C9D }, + { 0x2C9F, 0x2C9F }, + { 0x2CA1, 0x2CA1 }, + { 0x2CA3, 0x2CA3 }, + { 0x2CA5, 0x2CA5 }, + { 0x2CA7, 0x2CA7 }, + { 0x2CA9, 0x2CA9 }, + { 0x2CAB, 0x2CAB }, + { 0x2CAD, 0x2CAD }, + { 0x2CAF, 0x2CAF }, + { 0x2CB1, 0x2CB1 }, + { 0x2CB3, 0x2CB3 }, + { 0x2CB5, 0x2CB5 }, + { 0x2CB7, 0x2CB7 }, + { 0x2CB9, 0x2CB9 }, + { 0x2CBB, 0x2CBB }, + { 0x2CBD, 0x2CBD }, + { 0x2CBF, 0x2CBF }, + { 0x2CC1, 0x2CC1 }, + { 0x2CC3, 0x2CC3 }, + { 0x2CC5, 0x2CC5 }, + { 0x2CC7, 0x2CC7 }, + { 0x2CC9, 0x2CC9 }, + { 0x2CCB, 0x2CCB }, + { 0x2CCD, 0x2CCD }, + { 0x2CCF, 0x2CCF }, + { 0x2CD1, 0x2CD1 }, + { 0x2CD3, 0x2CD3 }, + { 0x2CD5, 0x2CD5 }, + { 0x2CD7, 0x2CD7 }, + { 0x2CD9, 0x2CD9 }, + { 0x2CDB, 0x2CDB }, + { 0x2CDD, 0x2CDD }, + { 0x2CDF, 0x2CDF }, + { 0x2CE1, 0x2CE1 }, + { 0x2CE3, 0x2CE4 }, + { 0x2D00, 0x2D25 }, + { 0xA641, 0xA641 }, + { 0xA643, 0xA643 }, + { 0xA645, 0xA645 }, + { 0xA647, 0xA647 }, + { 0xA649, 0xA649 }, + { 0xA64B, 0xA64B }, + { 0xA64D, 0xA64D }, + { 0xA64F, 0xA64F }, + { 0xA651, 0xA651 }, + { 0xA653, 0xA653 }, + { 0xA655, 0xA655 }, + { 0xA657, 0xA657 }, + { 0xA659, 0xA659 }, + { 0xA65B, 0xA65B }, + { 0xA65D, 0xA65D }, + { 0xA65F, 0xA65F }, + { 0xA663, 0xA663 }, + { 0xA665, 0xA665 }, + { 0xA667, 0xA667 }, + { 0xA669, 0xA669 }, + { 0xA66B, 0xA66B }, + { 0xA66D, 0xA66D }, + { 0xA681, 0xA681 }, + { 0xA683, 0xA683 }, + { 0xA685, 0xA685 }, + { 0xA687, 0xA687 }, + { 0xA689, 0xA689 }, + { 0xA68B, 0xA68B }, + { 0xA68D, 0xA68D }, + { 0xA68F, 0xA68F }, + { 0xA691, 0xA691 }, + { 0xA693, 0xA693 }, + { 0xA695, 0xA695 }, + { 0xA697, 0xA697 }, + { 0xA723, 0xA723 }, + { 0xA725, 0xA725 }, + { 0xA727, 0xA727 }, + { 0xA729, 0xA729 }, + { 0xA72B, 0xA72B }, + { 0xA72D, 0xA72D }, + { 0xA72F, 0xA731 }, + { 0xA733, 0xA733 }, + { 0xA735, 0xA735 }, + { 0xA737, 0xA737 }, + { 0xA739, 0xA739 }, + { 0xA73B, 0xA73B }, + { 0xA73D, 0xA73D }, + { 0xA73F, 0xA73F }, + { 0xA741, 0xA741 }, + { 0xA743, 0xA743 }, + { 0xA745, 0xA745 }, + { 0xA747, 0xA747 }, + { 0xA749, 0xA749 }, + { 0xA74B, 0xA74B }, + { 0xA74D, 0xA74D }, + { 0xA74F, 0xA74F }, + { 0xA751, 0xA751 }, + { 0xA753, 0xA753 }, + { 0xA755, 0xA755 }, + { 0xA757, 0xA757 }, + { 0xA759, 0xA759 }, + { 0xA75B, 0xA75B }, + { 0xA75D, 0xA75D }, + { 0xA75F, 0xA75F }, + { 0xA761, 0xA761 }, + { 0xA763, 0xA763 }, + { 0xA765, 0xA765 }, + { 0xA767, 0xA767 }, + { 0xA769, 0xA769 }, + { 0xA76B, 0xA76B }, + { 0xA76D, 0xA76D }, + { 0xA76F, 0xA778 }, + { 0xA77A, 0xA77A }, + { 0xA77C, 0xA77C }, + { 0xA77F, 0xA77F }, + { 0xA781, 0xA781 }, + { 0xA783, 0xA783 }, + { 0xA785, 0xA785 }, + { 0xA787, 0xA787 }, + { 0xA78C, 0xA78C }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFF41, 0xFF5A }, + { 0x10428, 0x1044F }, + { 0x1D41A, 0x1D433 }, + { 0x1D44E, 0x1D454 }, + { 0x1D456, 0x1D467 }, + { 0x1D482, 0x1D49B }, + { 0x1D4B6, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D4CF }, + { 0x1D4EA, 0x1D503 }, + { 0x1D51E, 0x1D537 }, + { 0x1D552, 0x1D56B }, + { 0x1D586, 0x1D59F }, + { 0x1D5BA, 0x1D5D3 }, + { 0x1D5EE, 0x1D607 }, + { 0x1D622, 0x1D63B }, + { 0x1D656, 0x1D66F }, + { 0x1D68A, 0x1D6A5 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6E1 }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D71B }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D755 }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D78F }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7C9 }, + { 0x1D7CB, 0x1D7CB } + +#define PREDICATE(c) uc_is_property_lowercase (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_math.c b/tests/unictype/test-pr_math.c new file mode 100644 index 00000000..5f250871 --- /dev/null +++ b/tests/unictype/test-pr_math.c @@ -0,0 +1,127 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x002B, 0x002B }, + { 0x003C, 0x003E }, + { 0x005E, 0x005E }, + { 0x007C, 0x007C }, + { 0x007E, 0x007E }, + { 0x00AC, 0x00AC }, + { 0x00B1, 0x00B1 }, + { 0x00D7, 0x00D7 }, + { 0x00F7, 0x00F7 }, + { 0x03D0, 0x03D2 }, + { 0x03D5, 0x03D5 }, + { 0x03F0, 0x03F1 }, + { 0x03F4, 0x03F6 }, + { 0x0606, 0x0608 }, + { 0x2016, 0x2016 }, + { 0x2032, 0x2034 }, + { 0x2040, 0x2040 }, + { 0x2044, 0x2044 }, + { 0x2052, 0x2052 }, + { 0x2061, 0x2064 }, + { 0x207A, 0x207E }, + { 0x208A, 0x208E }, + { 0x20D0, 0x20DC }, + { 0x20E1, 0x20E1 }, + { 0x20E5, 0x20E6 }, + { 0x20EB, 0x20EF }, + { 0x2102, 0x2102 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2119, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2128, 0x2129 }, + { 0x212C, 0x212D }, + { 0x212F, 0x2131 }, + { 0x2133, 0x2138 }, + { 0x213C, 0x2149 }, + { 0x214B, 0x214B }, + { 0x2190, 0x21A7 }, + { 0x21A9, 0x21AE }, + { 0x21B0, 0x21B1 }, + { 0x21B6, 0x21B7 }, + { 0x21BC, 0x21DB }, + { 0x21DD, 0x21DD }, + { 0x21E4, 0x21E5 }, + { 0x21F4, 0x22FF }, + { 0x2308, 0x230B }, + { 0x2320, 0x2321 }, + { 0x237C, 0x237C }, + { 0x239B, 0x23B5 }, + { 0x23B7, 0x23B7 }, + { 0x23D0, 0x23D0 }, + { 0x23DC, 0x23E2 }, + { 0x25A0, 0x25A1 }, + { 0x25AE, 0x25B7 }, + { 0x25BC, 0x25C1 }, + { 0x25C6, 0x25C7 }, + { 0x25CA, 0x25CB }, + { 0x25CF, 0x25D3 }, + { 0x25E2, 0x25E2 }, + { 0x25E4, 0x25E4 }, + { 0x25E7, 0x25EC }, + { 0x25F8, 0x25FF }, + { 0x2605, 0x2606 }, + { 0x2640, 0x2640 }, + { 0x2642, 0x2642 }, + { 0x2660, 0x2663 }, + { 0x266D, 0x266F }, + { 0x27C0, 0x27CA }, + { 0x27CC, 0x27CC }, + { 0x27D0, 0x27FF }, + { 0x2900, 0x2AFF }, + { 0x2B30, 0x2B44 }, + { 0x2B47, 0x2B4C }, + { 0xFB29, 0xFB29 }, + { 0xFE61, 0xFE66 }, + { 0xFE68, 0xFE68 }, + { 0xFF0B, 0xFF0B }, + { 0xFF1C, 0xFF1E }, + { 0xFF3C, 0xFF3C }, + { 0xFF3E, 0xFF3E }, + { 0xFF5C, 0xFF5C }, + { 0xFF5E, 0xFF5E }, + { 0xFFE2, 0xFFE2 }, + { 0xFFE9, 0xFFEC }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D7CB }, + { 0x1D7CE, 0x1D7FF } + +#define PREDICATE(c) uc_is_property_math (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_non_break.c b/tests/unictype/test-pr_non_break.c new file mode 100644 index 00000000..06794c58 --- /dev/null +++ b/tests/unictype/test-pr_non_break.c @@ -0,0 +1,32 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00A0, 0x00A0 }, + { 0x034F, 0x034F }, + { 0x035C, 0x0362 }, + { 0x0F08, 0x0F08 }, + { 0x0F0C, 0x0F0C }, + { 0x0F12, 0x0F12 }, + { 0x180E, 0x180E }, + { 0x2007, 0x2007 }, + { 0x2011, 0x2011 }, + { 0x202F, 0x202F } + +#define PREDICATE(c) uc_is_property_non_break (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_not_a_character.c b/tests/unictype/test-pr_not_a_character.c new file mode 100644 index 00000000..7ce96431 --- /dev/null +++ b/tests/unictype/test-pr_not_a_character.c @@ -0,0 +1,40 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0xFDD0, 0xFDEF }, + { 0xFFFE, 0xFFFF }, + { 0x1FFFE, 0x1FFFF }, + { 0x2FFFE, 0x2FFFF }, + { 0x3FFFE, 0x3FFFF }, + { 0x4FFFE, 0x4FFFF }, + { 0x5FFFE, 0x5FFFF }, + { 0x6FFFE, 0x6FFFF }, + { 0x7FFFE, 0x7FFFF }, + { 0x8FFFE, 0x8FFFF }, + { 0x9FFFE, 0x9FFFF }, + { 0xAFFFE, 0xAFFFF }, + { 0xBFFFE, 0xBFFFF }, + { 0xCFFFE, 0xCFFFF }, + { 0xDFFFE, 0xDFFFF }, + { 0xEFFFE, 0xEFFFF }, + { 0xFFFFE, 0xFFFFF }, + { 0x10FFFE, 0x10FFFF } + +#define PREDICATE(c) uc_is_property_not_a_character (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_numeric.c b/tests/unictype/test-pr_numeric.c new file mode 100644 index 00000000..4449802b --- /dev/null +++ b/tests/unictype/test-pr_numeric.c @@ -0,0 +1,101 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 }, + { 0x00B2, 0x00B3 }, + { 0x00B9, 0x00B9 }, + { 0x00BC, 0x00BE }, + { 0x0660, 0x0669 }, + { 0x06F0, 0x06F9 }, + { 0x07C0, 0x07C9 }, + { 0x0966, 0x096F }, + { 0x09E6, 0x09EF }, + { 0x09F4, 0x09F9 }, + { 0x0A66, 0x0A6F }, + { 0x0AE6, 0x0AEF }, + { 0x0B66, 0x0B6F }, + { 0x0BE6, 0x0BF2 }, + { 0x0C66, 0x0C6F }, + { 0x0C78, 0x0C7E }, + { 0x0CE6, 0x0CEF }, + { 0x0D66, 0x0D75 }, + { 0x0E50, 0x0E59 }, + { 0x0ED0, 0x0ED9 }, + { 0x0F20, 0x0F33 }, + { 0x1040, 0x1049 }, + { 0x1090, 0x1099 }, + { 0x1369, 0x137C }, + { 0x16EE, 0x16F0 }, + { 0x17E0, 0x17E9 }, + { 0x17F0, 0x17F9 }, + { 0x1810, 0x1819 }, + { 0x1946, 0x194F }, + { 0x19D0, 0x19D9 }, + { 0x1B50, 0x1B59 }, + { 0x1BB0, 0x1BB9 }, + { 0x1C40, 0x1C49 }, + { 0x1C50, 0x1C59 }, + { 0x2070, 0x2070 }, + { 0x2074, 0x2079 }, + { 0x2080, 0x2089 }, + { 0x2153, 0x2183 }, + { 0x2185, 0x2188 }, + { 0x2460, 0x249B }, + { 0x24EA, 0x24FF }, + { 0x2776, 0x2793 }, + { 0x2CFD, 0x2CFD }, + { 0x3007, 0x3007 }, + { 0x3021, 0x3029 }, + { 0x3038, 0x303A }, + { 0x3192, 0x3195 }, + { 0x3220, 0x3229 }, + { 0x3251, 0x325F }, + { 0x3280, 0x3289 }, + { 0x32B1, 0x32BF }, + { 0xA620, 0xA629 }, + { 0xA8D0, 0xA8D9 }, + { 0xA900, 0xA909 }, + { 0xAA50, 0xAA59 }, + { 0xF96B, 0xF96B }, + { 0xF973, 0xF973 }, + { 0xF978, 0xF978 }, + { 0xF9B2, 0xF9B2 }, + { 0xF9D1, 0xF9D1 }, + { 0xF9D3, 0xF9D3 }, + { 0xF9FD, 0xF9FD }, + { 0xFF10, 0xFF19 }, + { 0x10107, 0x10133 }, + { 0x10140, 0x10178 }, + { 0x1018A, 0x1018A }, + { 0x10320, 0x10323 }, + { 0x10341, 0x10341 }, + { 0x1034A, 0x1034A }, + { 0x103D1, 0x103D5 }, + { 0x104A0, 0x104A9 }, + { 0x10916, 0x10919 }, + { 0x10A40, 0x10A47 }, + { 0x12400, 0x12431 }, + { 0x12434, 0x12455 }, + { 0x12458, 0x12462 }, + { 0x1D360, 0x1D371 }, + { 0x1D7CE, 0x1D7FF }, + { 0x2F890, 0x2F890 } + +#define PREDICATE(c) uc_is_property_numeric (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_other_alphabetic.c b/tests/unictype/test-pr_other_alphabetic.c new file mode 100644 index 00000000..f603dee3 --- /dev/null +++ b/tests/unictype/test-pr_other_alphabetic.c @@ -0,0 +1,144 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0345, 0x0345 }, + { 0x05B0, 0x05BD }, + { 0x05BF, 0x05BF }, + { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, + { 0x05C7, 0x05C7 }, + { 0x0610, 0x061A }, + { 0x064B, 0x0657 }, + { 0x0659, 0x065E }, + { 0x0670, 0x0670 }, + { 0x06D6, 0x06DC }, + { 0x06E1, 0x06E4 }, + { 0x06E7, 0x06E8 }, + { 0x06ED, 0x06ED }, + { 0x0711, 0x0711 }, + { 0x0730, 0x073F }, + { 0x07A6, 0x07B0 }, + { 0x0901, 0x0903 }, + { 0x093E, 0x094C }, + { 0x0962, 0x0963 }, + { 0x0981, 0x0983 }, + { 0x09BE, 0x09C4 }, + { 0x09C7, 0x09C8 }, + { 0x09CB, 0x09CC }, + { 0x09D7, 0x09D7 }, + { 0x09E2, 0x09E3 }, + { 0x0A01, 0x0A03 }, + { 0x0A3E, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4C }, + { 0x0A51, 0x0A51 }, + { 0x0A70, 0x0A71 }, + { 0x0A75, 0x0A75 }, + { 0x0A81, 0x0A83 }, + { 0x0ABE, 0x0AC5 }, + { 0x0AC7, 0x0AC9 }, + { 0x0ACB, 0x0ACC }, + { 0x0AE2, 0x0AE3 }, + { 0x0B01, 0x0B03 }, + { 0x0B3E, 0x0B44 }, + { 0x0B47, 0x0B48 }, + { 0x0B4B, 0x0B4C }, + { 0x0B56, 0x0B57 }, + { 0x0B62, 0x0B63 }, + { 0x0B82, 0x0B82 }, + { 0x0BBE, 0x0BC2 }, + { 0x0BC6, 0x0BC8 }, + { 0x0BCA, 0x0BCC }, + { 0x0BD7, 0x0BD7 }, + { 0x0C01, 0x0C03 }, + { 0x0C3E, 0x0C44 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4C }, + { 0x0C55, 0x0C56 }, + { 0x0C62, 0x0C63 }, + { 0x0C82, 0x0C83 }, + { 0x0CBE, 0x0CC4 }, + { 0x0CC6, 0x0CC8 }, + { 0x0CCA, 0x0CCC }, + { 0x0CD5, 0x0CD6 }, + { 0x0CE2, 0x0CE3 }, + { 0x0D02, 0x0D03 }, + { 0x0D3E, 0x0D44 }, + { 0x0D46, 0x0D48 }, + { 0x0D4A, 0x0D4C }, + { 0x0D57, 0x0D57 }, + { 0x0D62, 0x0D63 }, + { 0x0D82, 0x0D83 }, + { 0x0DCF, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0DD8, 0x0DDF }, + { 0x0DF2, 0x0DF3 }, + { 0x0E31, 0x0E31 }, + { 0x0E34, 0x0E3A }, + { 0x0E4D, 0x0E4D }, + { 0x0EB1, 0x0EB1 }, + { 0x0EB4, 0x0EB9 }, + { 0x0EBB, 0x0EBC }, + { 0x0ECD, 0x0ECD }, + { 0x0F71, 0x0F81 }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x102B, 0x1036 }, + { 0x1038, 0x1038 }, + { 0x103B, 0x103E }, + { 0x1056, 0x1059 }, + { 0x105E, 0x1060 }, + { 0x1062, 0x1062 }, + { 0x1067, 0x1068 }, + { 0x1071, 0x1074 }, + { 0x1082, 0x1086 }, + { 0x135F, 0x135F }, + { 0x1712, 0x1713 }, + { 0x1732, 0x1733 }, + { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, + { 0x17B6, 0x17C8 }, + { 0x18A9, 0x18A9 }, + { 0x1920, 0x192B }, + { 0x1930, 0x1938 }, + { 0x19B0, 0x19C0 }, + { 0x19C8, 0x19C9 }, + { 0x1A17, 0x1A1B }, + { 0x1B00, 0x1B04 }, + { 0x1B35, 0x1B43 }, + { 0x1B80, 0x1B82 }, + { 0x1BA1, 0x1BA9 }, + { 0x1C24, 0x1C35 }, + { 0x24B6, 0x24E9 }, + { 0x2DE0, 0x2DFF }, + { 0xA823, 0xA827 }, + { 0xA880, 0xA881 }, + { 0xA8B4, 0xA8C3 }, + { 0xA926, 0xA92A }, + { 0xA947, 0xA952 }, + { 0xAA29, 0xAA36 }, + { 0xAA43, 0xAA43 }, + { 0xAA4C, 0xAA4D }, + { 0xFB1E, 0xFB1E }, + { 0x10A01, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A0F } + +#define PREDICATE(c) uc_is_property_other_alphabetic (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_other_default_ignorable_code_point.c b/tests/unictype/test-pr_other_default_ignorable_code_point.c new file mode 100644 index 00000000..69068aa2 --- /dev/null +++ b/tests/unictype/test-pr_other_default_ignorable_code_point.c @@ -0,0 +1,32 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x034F, 0x034F }, + { 0x115F, 0x1160 }, + { 0x2065, 0x2069 }, + { 0x3164, 0x3164 }, + { 0xFFA0, 0xFFA0 }, + { 0xFFF0, 0xFFF8 }, + { 0xE0000, 0xE0000 }, + { 0xE0002, 0xE001F }, + { 0xE0080, 0xE00FF }, + { 0xE01F0, 0xE0FFF } + +#define PREDICATE(c) uc_is_property_other_default_ignorable_code_point (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_other_grapheme_extend.c b/tests/unictype/test-pr_other_grapheme_extend.c new file mode 100644 index 00000000..aff4377d --- /dev/null +++ b/tests/unictype/test-pr_other_grapheme_extend.c @@ -0,0 +1,38 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x09BE, 0x09BE }, + { 0x09D7, 0x09D7 }, + { 0x0B3E, 0x0B3E }, + { 0x0B57, 0x0B57 }, + { 0x0BBE, 0x0BBE }, + { 0x0BD7, 0x0BD7 }, + { 0x0CC2, 0x0CC2 }, + { 0x0CD5, 0x0CD6 }, + { 0x0D3E, 0x0D3E }, + { 0x0D57, 0x0D57 }, + { 0x0DCF, 0x0DCF }, + { 0x0DDF, 0x0DDF }, + { 0x200C, 0x200D }, + { 0xFF9E, 0xFF9F }, + { 0x1D165, 0x1D165 }, + { 0x1D16E, 0x1D172 } + +#define PREDICATE(c) uc_is_property_other_grapheme_extend (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_other_id_continue.c b/tests/unictype/test-pr_other_id_continue.c new file mode 100644 index 00000000..b30a7df1 --- /dev/null +++ b/tests/unictype/test-pr_other_id_continue.c @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00B7, 0x00B7 }, + { 0x0387, 0x0387 }, + { 0x1369, 0x1371 } + +#define PREDICATE(c) uc_is_property_other_id_continue (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_other_id_start.c b/tests/unictype/test-pr_other_id_start.c new file mode 100644 index 00000000..d1cc5f09 --- /dev/null +++ b/tests/unictype/test-pr_other_id_start.c @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x2118, 0x2118 }, + { 0x212E, 0x212E }, + { 0x309B, 0x309C } + +#define PREDICATE(c) uc_is_property_other_id_start (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_other_lowercase.c b/tests/unictype/test-pr_other_lowercase.c new file mode 100644 index 00000000..a2810dca --- /dev/null +++ b/tests/unictype/test-pr_other_lowercase.c @@ -0,0 +1,35 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x02B0, 0x02B8 }, + { 0x02C0, 0x02C1 }, + { 0x02E0, 0x02E4 }, + { 0x0345, 0x0345 }, + { 0x037A, 0x037A }, + { 0x1D2C, 0x1D61 }, + { 0x1D78, 0x1D78 }, + { 0x1D9B, 0x1DBF }, + { 0x2090, 0x2094 }, + { 0x2170, 0x217F }, + { 0x24D0, 0x24E9 }, + { 0x2C7D, 0x2C7D }, + { 0xA770, 0xA770 } + +#define PREDICATE(c) uc_is_property_other_lowercase (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_other_math.c b/tests/unictype/test-pr_other_math.c new file mode 100644 index 00000000..b563303b --- /dev/null +++ b/tests/unictype/test-pr_other_math.c @@ -0,0 +1,121 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x005E, 0x005E }, + { 0x03D0, 0x03D2 }, + { 0x03D5, 0x03D5 }, + { 0x03F0, 0x03F1 }, + { 0x03F4, 0x03F5 }, + { 0x2016, 0x2016 }, + { 0x2032, 0x2034 }, + { 0x2040, 0x2040 }, + { 0x2061, 0x2064 }, + { 0x207D, 0x207E }, + { 0x208D, 0x208E }, + { 0x20D0, 0x20DC }, + { 0x20E1, 0x20E1 }, + { 0x20E5, 0x20E6 }, + { 0x20EB, 0x20EF }, + { 0x2102, 0x2102 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2119, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2128, 0x2129 }, + { 0x212C, 0x212D }, + { 0x212F, 0x2131 }, + { 0x2133, 0x2138 }, + { 0x213C, 0x213F }, + { 0x2145, 0x2149 }, + { 0x2195, 0x2199 }, + { 0x219C, 0x219F }, + { 0x21A1, 0x21A2 }, + { 0x21A4, 0x21A5 }, + { 0x21A7, 0x21A7 }, + { 0x21A9, 0x21AD }, + { 0x21B0, 0x21B1 }, + { 0x21B6, 0x21B7 }, + { 0x21BC, 0x21CD }, + { 0x21D0, 0x21D1 }, + { 0x21D3, 0x21D3 }, + { 0x21D5, 0x21DB }, + { 0x21DD, 0x21DD }, + { 0x21E4, 0x21E5 }, + { 0x23B4, 0x23B5 }, + { 0x23B7, 0x23B7 }, + { 0x23D0, 0x23D0 }, + { 0x23E2, 0x23E2 }, + { 0x25A0, 0x25A1 }, + { 0x25AE, 0x25B6 }, + { 0x25BC, 0x25C0 }, + { 0x25C6, 0x25C7 }, + { 0x25CA, 0x25CB }, + { 0x25CF, 0x25D3 }, + { 0x25E2, 0x25E2 }, + { 0x25E4, 0x25E4 }, + { 0x25E7, 0x25EC }, + { 0x2605, 0x2606 }, + { 0x2640, 0x2640 }, + { 0x2642, 0x2642 }, + { 0x2660, 0x2663 }, + { 0x266D, 0x266E }, + { 0x27C5, 0x27C6 }, + { 0x27E6, 0x27EF }, + { 0x2983, 0x2998 }, + { 0x29D8, 0x29DB }, + { 0x29FC, 0x29FD }, + { 0xFE61, 0xFE61 }, + { 0xFE63, 0xFE63 }, + { 0xFE68, 0xFE68 }, + { 0xFF3C, 0xFF3C }, + { 0xFF3E, 0xFF3E }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6FA }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D734 }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D76E }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D7A8 }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7CB }, + { 0x1D7CE, 0x1D7FF } + +#define PREDICATE(c) uc_is_property_other_math (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_other_uppercase.c b/tests/unictype/test-pr_other_uppercase.c new file mode 100644 index 00000000..a98cb44e --- /dev/null +++ b/tests/unictype/test-pr_other_uppercase.c @@ -0,0 +1,24 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x2160, 0x216F }, + { 0x24B6, 0x24CF } + +#define PREDICATE(c) uc_is_property_other_uppercase (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_paired_punctuation.c b/tests/unictype/test-pr_paired_punctuation.c new file mode 100644 index 00000000..3df878cc --- /dev/null +++ b/tests/unictype/test-pr_paired_punctuation.c @@ -0,0 +1,49 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0028, 0x0029 }, + { 0x005B, 0x005B }, + { 0x005D, 0x005D }, + { 0x007B, 0x007B }, + { 0x007D, 0x007D }, + { 0x00AB, 0x00AB }, + { 0x00BB, 0x00BB }, + { 0x0F3A, 0x0F3D }, + { 0x169B, 0x169C }, + { 0x2018, 0x201F }, + { 0x2039, 0x203A }, + { 0x2045, 0x2046 }, + { 0x207D, 0x207E }, + { 0x208D, 0x208E }, + { 0x2329, 0x232A }, + { 0x3008, 0x3011 }, + { 0x3014, 0x301B }, + { 0x301D, 0x301F }, + { 0xFD3E, 0xFD3F }, + { 0xFE35, 0xFE44 }, + { 0xFE59, 0xFE5E }, + { 0xFF08, 0xFF09 }, + { 0xFF3B, 0xFF3B }, + { 0xFF3D, 0xFF3D }, + { 0xFF5B, 0xFF5B }, + { 0xFF5D, 0xFF5D }, + { 0xFF62, 0xFF63 } + +#define PREDICATE(c) uc_is_property_paired_punctuation (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_paragraph_separator.c b/tests/unictype/test-pr_paragraph_separator.c new file mode 100644 index 00000000..dca0b19a --- /dev/null +++ b/tests/unictype/test-pr_paragraph_separator.c @@ -0,0 +1,23 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x2029, 0x2029 } + +#define PREDICATE(c) uc_is_property_paragraph_separator (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_pattern_syntax.c b/tests/unictype/test-pr_pattern_syntax.c new file mode 100644 index 00000000..40a056b3 --- /dev/null +++ b/tests/unictype/test-pr_pattern_syntax.c @@ -0,0 +1,50 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0021, 0x002F }, + { 0x003A, 0x0040 }, + { 0x005B, 0x005E }, + { 0x0060, 0x0060 }, + { 0x007B, 0x007E }, + { 0x00A1, 0x00A7 }, + { 0x00A9, 0x00A9 }, + { 0x00AB, 0x00AC }, + { 0x00AE, 0x00AE }, + { 0x00B0, 0x00B1 }, + { 0x00B6, 0x00B6 }, + { 0x00BB, 0x00BB }, + { 0x00BF, 0x00BF }, + { 0x00D7, 0x00D7 }, + { 0x00F7, 0x00F7 }, + { 0x2010, 0x2027 }, + { 0x2030, 0x203E }, + { 0x2041, 0x2053 }, + { 0x2055, 0x205E }, + { 0x2190, 0x245F }, + { 0x2500, 0x2775 }, + { 0x2794, 0x2BFF }, + { 0x2E00, 0x2E7F }, + { 0x3001, 0x3003 }, + { 0x3008, 0x3020 }, + { 0x3030, 0x3030 }, + { 0xFD3E, 0xFD3F }, + { 0xFE45, 0xFE46 } + +#define PREDICATE(c) uc_is_property_pattern_syntax (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_pattern_white_space.c b/tests/unictype/test-pr_pattern_white_space.c new file mode 100644 index 00000000..347cb0b0 --- /dev/null +++ b/tests/unictype/test-pr_pattern_white_space.c @@ -0,0 +1,27 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0009, 0x000D }, + { 0x0020, 0x0020 }, + { 0x0085, 0x0085 }, + { 0x200E, 0x200F }, + { 0x2028, 0x2029 } + +#define PREDICATE(c) uc_is_property_pattern_white_space (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_private_use.c b/tests/unictype/test-pr_private_use.c new file mode 100644 index 00000000..6cfa1929 --- /dev/null +++ b/tests/unictype/test-pr_private_use.c @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0xE000, 0xF8FF }, + { 0xF0000, 0xFFFFD }, + { 0x100000, 0x10FFFD } + +#define PREDICATE(c) uc_is_property_private_use (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_punctuation.c b/tests/unictype/test-pr_punctuation.c new file mode 100644 index 00000000..936e62ce --- /dev/null +++ b/tests/unictype/test-pr_punctuation.c @@ -0,0 +1,134 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0021, 0x0023 }, + { 0x0025, 0x002A }, + { 0x002C, 0x002F }, + { 0x003A, 0x003B }, + { 0x003F, 0x0040 }, + { 0x005B, 0x005D }, + { 0x005F, 0x005F }, + { 0x007B, 0x007B }, + { 0x007D, 0x007D }, + { 0x00A1, 0x00A1 }, + { 0x00AB, 0x00AB }, + { 0x00B7, 0x00B7 }, + { 0x00BB, 0x00BB }, + { 0x00BF, 0x00BF }, + { 0x037E, 0x037E }, + { 0x0387, 0x0387 }, + { 0x055A, 0x055F }, + { 0x0589, 0x058A }, + { 0x05BE, 0x05BE }, + { 0x05C0, 0x05C0 }, + { 0x05C3, 0x05C3 }, + { 0x05C6, 0x05C6 }, + { 0x05F3, 0x05F4 }, + { 0x0609, 0x060A }, + { 0x060C, 0x060D }, + { 0x061B, 0x061B }, + { 0x061E, 0x061F }, + { 0x066A, 0x066D }, + { 0x06D4, 0x06D4 }, + { 0x0700, 0x070D }, + { 0x07F7, 0x07F9 }, + { 0x0964, 0x0965 }, + { 0x0970, 0x0970 }, + { 0x0DF4, 0x0DF4 }, + { 0x0E4F, 0x0E4F }, + { 0x0E5A, 0x0E5B }, + { 0x0F04, 0x0F12 }, + { 0x0F3A, 0x0F3D }, + { 0x0F85, 0x0F85 }, + { 0x0FD0, 0x0FD4 }, + { 0x104A, 0x104F }, + { 0x10FB, 0x10FB }, + { 0x1361, 0x1368 }, + { 0x166D, 0x166E }, + { 0x169B, 0x169C }, + { 0x16EB, 0x16ED }, + { 0x1735, 0x1736 }, + { 0x17D4, 0x17D6 }, + { 0x17D8, 0x17DA }, + { 0x1800, 0x180A }, + { 0x1944, 0x1945 }, + { 0x19DE, 0x19DF }, + { 0x1A1E, 0x1A1F }, + { 0x1B5A, 0x1B60 }, + { 0x1C3B, 0x1C3F }, + { 0x1C7E, 0x1C7F }, + { 0x2010, 0x2027 }, + { 0x2030, 0x2043 }, + { 0x2045, 0x2051 }, + { 0x2053, 0x205E }, + { 0x207D, 0x207E }, + { 0x208D, 0x208E }, + { 0x2329, 0x232A }, + { 0x2768, 0x2775 }, + { 0x27C5, 0x27C6 }, + { 0x27E6, 0x27EF }, + { 0x2983, 0x2998 }, + { 0x29D8, 0x29DB }, + { 0x29FC, 0x29FD }, + { 0x2CF9, 0x2CFC }, + { 0x2CFE, 0x2CFF }, + { 0x2E00, 0x2E2E }, + { 0x2E30, 0x2E30 }, + { 0x3001, 0x3003 }, + { 0x3008, 0x3011 }, + { 0x3014, 0x301F }, + { 0x3030, 0x3030 }, + { 0x303D, 0x303D }, + { 0x30A0, 0x30A0 }, + { 0x30FB, 0x30FB }, + { 0xA60D, 0xA60F }, + { 0xA673, 0xA673 }, + { 0xA67E, 0xA67E }, + { 0xA874, 0xA877 }, + { 0xA8CE, 0xA8CF }, + { 0xA92E, 0xA92F }, + { 0xA95F, 0xA95F }, + { 0xAA5C, 0xAA5F }, + { 0xFD3E, 0xFD3F }, + { 0xFE10, 0xFE19 }, + { 0xFE30, 0xFE52 }, + { 0xFE54, 0xFE61 }, + { 0xFE63, 0xFE63 }, + { 0xFE68, 0xFE68 }, + { 0xFE6A, 0xFE6B }, + { 0xFF01, 0xFF03 }, + { 0xFF05, 0xFF0A }, + { 0xFF0C, 0xFF0F }, + { 0xFF1A, 0xFF1B }, + { 0xFF1F, 0xFF20 }, + { 0xFF3B, 0xFF3D }, + { 0xFF3F, 0xFF3F }, + { 0xFF5B, 0xFF5B }, + { 0xFF5D, 0xFF5D }, + { 0xFF5F, 0xFF65 }, + { 0x10100, 0x10101 }, + { 0x1039F, 0x1039F }, + { 0x103D0, 0x103D0 }, + { 0x1091F, 0x1091F }, + { 0x1093F, 0x1093F }, + { 0x10A50, 0x10A58 }, + { 0x12470, 0x12473 } + +#define PREDICATE(c) uc_is_property_punctuation (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_quotation_mark.c b/tests/unictype/test-pr_quotation_mark.c new file mode 100644 index 00000000..e592463f --- /dev/null +++ b/tests/unictype/test-pr_quotation_mark.c @@ -0,0 +1,34 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0022, 0x0022 }, + { 0x0027, 0x0027 }, + { 0x00AB, 0x00AB }, + { 0x00BB, 0x00BB }, + { 0x2018, 0x201F }, + { 0x2039, 0x203A }, + { 0x300C, 0x300F }, + { 0x301D, 0x301F }, + { 0xFE41, 0xFE44 }, + { 0xFF02, 0xFF02 }, + { 0xFF07, 0xFF07 }, + { 0xFF62, 0xFF63 } + +#define PREDICATE(c) uc_is_property_quotation_mark (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_radical.c b/tests/unictype/test-pr_radical.c new file mode 100644 index 00000000..23c30260 --- /dev/null +++ b/tests/unictype/test-pr_radical.c @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x2E80, 0x2E99 }, + { 0x2E9B, 0x2EF3 }, + { 0x2F00, 0x2FD5 } + +#define PREDICATE(c) uc_is_property_radical (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_sentence_terminal.c b/tests/unictype/test-pr_sentence_terminal.c new file mode 100644 index 00000000..107649e7 --- /dev/null +++ b/tests/unictype/test-pr_sentence_terminal.c @@ -0,0 +1,59 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0021, 0x0021 }, + { 0x002E, 0x002E }, + { 0x003F, 0x003F }, + { 0x055C, 0x055C }, + { 0x055E, 0x055E }, + { 0x0589, 0x0589 }, + { 0x061F, 0x061F }, + { 0x06D4, 0x06D4 }, + { 0x0700, 0x0702 }, + { 0x07F9, 0x07F9 }, + { 0x0964, 0x0965 }, + { 0x104A, 0x104B }, + { 0x1362, 0x1362 }, + { 0x1367, 0x1368 }, + { 0x166E, 0x166E }, + { 0x1803, 0x1803 }, + { 0x1809, 0x1809 }, + { 0x1944, 0x1945 }, + { 0x1B5A, 0x1B5B }, + { 0x1B5E, 0x1B5F }, + { 0x1C3B, 0x1C3C }, + { 0x1C7E, 0x1C7F }, + { 0x203C, 0x203D }, + { 0x2047, 0x2049 }, + { 0x2E2E, 0x2E2E }, + { 0x3002, 0x3002 }, + { 0xA60E, 0xA60F }, + { 0xA876, 0xA877 }, + { 0xA8CE, 0xA8CF }, + { 0xA92F, 0xA92F }, + { 0xAA5D, 0xAA5F }, + { 0xFE52, 0xFE52 }, + { 0xFE56, 0xFE57 }, + { 0xFF01, 0xFF01 }, + { 0xFF0E, 0xFF0E }, + { 0xFF1F, 0xFF1F }, + { 0xFF61, 0xFF61 } + +#define PREDICATE(c) uc_is_property_sentence_terminal (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_soft_dotted.c b/tests/unictype/test-pr_soft_dotted.c new file mode 100644 index 00000000..ad8b0fb7 --- /dev/null +++ b/tests/unictype/test-pr_soft_dotted.c @@ -0,0 +1,53 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0069, 0x006A }, + { 0x012F, 0x012F }, + { 0x0249, 0x0249 }, + { 0x0268, 0x0268 }, + { 0x029D, 0x029D }, + { 0x02B2, 0x02B2 }, + { 0x03F3, 0x03F3 }, + { 0x0456, 0x0456 }, + { 0x0458, 0x0458 }, + { 0x1D62, 0x1D62 }, + { 0x1D96, 0x1D96 }, + { 0x1DA4, 0x1DA4 }, + { 0x1DA8, 0x1DA8 }, + { 0x1E2D, 0x1E2D }, + { 0x1ECB, 0x1ECB }, + { 0x2071, 0x2071 }, + { 0x2148, 0x2149 }, + { 0x2C7C, 0x2C7C }, + { 0x1D422, 0x1D423 }, + { 0x1D456, 0x1D457 }, + { 0x1D48A, 0x1D48B }, + { 0x1D4BE, 0x1D4BF }, + { 0x1D4F2, 0x1D4F3 }, + { 0x1D526, 0x1D527 }, + { 0x1D55A, 0x1D55B }, + { 0x1D58E, 0x1D58F }, + { 0x1D5C2, 0x1D5C3 }, + { 0x1D5F6, 0x1D5F7 }, + { 0x1D62A, 0x1D62B }, + { 0x1D65E, 0x1D65F }, + { 0x1D692, 0x1D693 } + +#define PREDICATE(c) uc_is_property_soft_dotted (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_space.c b/tests/unictype/test-pr_space.c new file mode 100644 index 00000000..64a3e72c --- /dev/null +++ b/tests/unictype/test-pr_space.c @@ -0,0 +1,30 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0020, 0x0020 }, + { 0x00A0, 0x00A0 }, + { 0x1680, 0x1680 }, + { 0x180E, 0x180E }, + { 0x2000, 0x200A }, + { 0x202F, 0x202F }, + { 0x205F, 0x205F }, + { 0x3000, 0x3000 } + +#define PREDICATE(c) uc_is_property_space (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_terminal_punctuation.c b/tests/unictype/test-pr_terminal_punctuation.c new file mode 100644 index 00000000..3ded06d9 --- /dev/null +++ b/tests/unictype/test-pr_terminal_punctuation.c @@ -0,0 +1,77 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0021, 0x0021 }, + { 0x002C, 0x002C }, + { 0x002E, 0x002E }, + { 0x003A, 0x003B }, + { 0x003F, 0x003F }, + { 0x037E, 0x037E }, + { 0x0387, 0x0387 }, + { 0x0589, 0x0589 }, + { 0x05C3, 0x05C3 }, + { 0x060C, 0x060C }, + { 0x061B, 0x061B }, + { 0x061F, 0x061F }, + { 0x06D4, 0x06D4 }, + { 0x0700, 0x070A }, + { 0x070C, 0x070C }, + { 0x07F8, 0x07F9 }, + { 0x0964, 0x0965 }, + { 0x0E5A, 0x0E5B }, + { 0x0F08, 0x0F08 }, + { 0x0F0D, 0x0F12 }, + { 0x104A, 0x104B }, + { 0x1361, 0x1368 }, + { 0x166D, 0x166E }, + { 0x16EB, 0x16ED }, + { 0x17D4, 0x17D6 }, + { 0x17DA, 0x17DA }, + { 0x1802, 0x1805 }, + { 0x1808, 0x1809 }, + { 0x1944, 0x1945 }, + { 0x1B5A, 0x1B5B }, + { 0x1B5D, 0x1B5F }, + { 0x1C3B, 0x1C3F }, + { 0x1C7E, 0x1C7F }, + { 0x203C, 0x203D }, + { 0x2047, 0x2049 }, + { 0x2E2E, 0x2E2E }, + { 0x3001, 0x3002 }, + { 0xA60D, 0xA60F }, + { 0xA876, 0xA877 }, + { 0xA8CE, 0xA8CF }, + { 0xA92F, 0xA92F }, + { 0xAA5D, 0xAA5F }, + { 0xFE50, 0xFE52 }, + { 0xFE54, 0xFE57 }, + { 0xFF01, 0xFF01 }, + { 0xFF0C, 0xFF0C }, + { 0xFF0E, 0xFF0E }, + { 0xFF1A, 0xFF1B }, + { 0xFF1F, 0xFF1F }, + { 0xFF61, 0xFF61 }, + { 0xFF64, 0xFF64 }, + { 0x1039F, 0x1039F }, + { 0x103D0, 0x103D0 }, + { 0x1091F, 0x1091F }, + { 0x12470, 0x12473 } + +#define PREDICATE(c) uc_is_property_terminal_punctuation (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_test.c b/tests/unictype/test-pr_test.c new file mode 100644 index 00000000..388ae004 --- /dev/null +++ b/tests/unictype/test-pr_test.c @@ -0,0 +1,47 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + uc_property_t pr = UC_PROPERTY_COMPOSITE; + unsigned int c; + + for (c = 0; c < 0x110000; c++) + ASSERT (uc_is_property (c, pr) == uc_is_property_composite (c)); + + return 0; +} diff --git a/tests/unictype/test-pr_titlecase.c b/tests/unictype/test-pr_titlecase.c new file mode 100644 index 00000000..10043865 --- /dev/null +++ b/tests/unictype/test-pr_titlecase.c @@ -0,0 +1,32 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x01C5, 0x01C5 }, + { 0x01C8, 0x01C8 }, + { 0x01CB, 0x01CB }, + { 0x01F2, 0x01F2 }, + { 0x1F88, 0x1F8F }, + { 0x1F98, 0x1F9F }, + { 0x1FA8, 0x1FAF }, + { 0x1FBC, 0x1FBC }, + { 0x1FCC, 0x1FCC }, + { 0x1FFC, 0x1FFC } + +#define PREDICATE(c) uc_is_property_titlecase (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_unassigned_code_value.c b/tests/unictype/test-pr_unassigned_code_value.c new file mode 100644 index 00000000..91bd1611 --- /dev/null +++ b/tests/unictype/test-pr_unassigned_code_value.c @@ -0,0 +1,476 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0378, 0x0379 }, + { 0x037F, 0x0383 }, + { 0x038B, 0x038B }, + { 0x038D, 0x038D }, + { 0x03A2, 0x03A2 }, + { 0x0524, 0x0530 }, + { 0x0557, 0x0558 }, + { 0x0560, 0x0560 }, + { 0x0588, 0x0588 }, + { 0x058B, 0x0590 }, + { 0x05C8, 0x05CF }, + { 0x05EB, 0x05EF }, + { 0x05F5, 0x05FF }, + { 0x0604, 0x0605 }, + { 0x061C, 0x061D }, + { 0x0620, 0x0620 }, + { 0x065F, 0x065F }, + { 0x070E, 0x070E }, + { 0x074B, 0x074C }, + { 0x07B2, 0x07BF }, + { 0x07FB, 0x0900 }, + { 0x093A, 0x093B }, + { 0x094E, 0x094F }, + { 0x0955, 0x0957 }, + { 0x0973, 0x097A }, + { 0x0980, 0x0980 }, + { 0x0984, 0x0984 }, + { 0x098D, 0x098E }, + { 0x0991, 0x0992 }, + { 0x09A9, 0x09A9 }, + { 0x09B1, 0x09B1 }, + { 0x09B3, 0x09B5 }, + { 0x09BA, 0x09BB }, + { 0x09C5, 0x09C6 }, + { 0x09C9, 0x09CA }, + { 0x09CF, 0x09D6 }, + { 0x09D8, 0x09DB }, + { 0x09DE, 0x09DE }, + { 0x09E4, 0x09E5 }, + { 0x09FB, 0x0A00 }, + { 0x0A04, 0x0A04 }, + { 0x0A0B, 0x0A0E }, + { 0x0A11, 0x0A12 }, + { 0x0A29, 0x0A29 }, + { 0x0A31, 0x0A31 }, + { 0x0A34, 0x0A34 }, + { 0x0A37, 0x0A37 }, + { 0x0A3A, 0x0A3B }, + { 0x0A3D, 0x0A3D }, + { 0x0A43, 0x0A46 }, + { 0x0A49, 0x0A4A }, + { 0x0A4E, 0x0A50 }, + { 0x0A52, 0x0A58 }, + { 0x0A5D, 0x0A5D }, + { 0x0A5F, 0x0A65 }, + { 0x0A76, 0x0A80 }, + { 0x0A84, 0x0A84 }, + { 0x0A8E, 0x0A8E }, + { 0x0A92, 0x0A92 }, + { 0x0AA9, 0x0AA9 }, + { 0x0AB1, 0x0AB1 }, + { 0x0AB4, 0x0AB4 }, + { 0x0ABA, 0x0ABB }, + { 0x0AC6, 0x0AC6 }, + { 0x0ACA, 0x0ACA }, + { 0x0ACE, 0x0ACF }, + { 0x0AD1, 0x0ADF }, + { 0x0AE4, 0x0AE5 }, + { 0x0AF0, 0x0AF0 }, + { 0x0AF2, 0x0B00 }, + { 0x0B04, 0x0B04 }, + { 0x0B0D, 0x0B0E }, + { 0x0B11, 0x0B12 }, + { 0x0B29, 0x0B29 }, + { 0x0B31, 0x0B31 }, + { 0x0B34, 0x0B34 }, + { 0x0B3A, 0x0B3B }, + { 0x0B45, 0x0B46 }, + { 0x0B49, 0x0B4A }, + { 0x0B4E, 0x0B55 }, + { 0x0B58, 0x0B5B }, + { 0x0B5E, 0x0B5E }, + { 0x0B64, 0x0B65 }, + { 0x0B72, 0x0B81 }, + { 0x0B84, 0x0B84 }, + { 0x0B8B, 0x0B8D }, + { 0x0B91, 0x0B91 }, + { 0x0B96, 0x0B98 }, + { 0x0B9B, 0x0B9B }, + { 0x0B9D, 0x0B9D }, + { 0x0BA0, 0x0BA2 }, + { 0x0BA5, 0x0BA7 }, + { 0x0BAB, 0x0BAD }, + { 0x0BBA, 0x0BBD }, + { 0x0BC3, 0x0BC5 }, + { 0x0BC9, 0x0BC9 }, + { 0x0BCE, 0x0BCF }, + { 0x0BD1, 0x0BD6 }, + { 0x0BD8, 0x0BE5 }, + { 0x0BFB, 0x0C00 }, + { 0x0C04, 0x0C04 }, + { 0x0C0D, 0x0C0D }, + { 0x0C11, 0x0C11 }, + { 0x0C29, 0x0C29 }, + { 0x0C34, 0x0C34 }, + { 0x0C3A, 0x0C3C }, + { 0x0C45, 0x0C45 }, + { 0x0C49, 0x0C49 }, + { 0x0C4E, 0x0C54 }, + { 0x0C57, 0x0C57 }, + { 0x0C5A, 0x0C5F }, + { 0x0C64, 0x0C65 }, + { 0x0C70, 0x0C77 }, + { 0x0C80, 0x0C81 }, + { 0x0C84, 0x0C84 }, + { 0x0C8D, 0x0C8D }, + { 0x0C91, 0x0C91 }, + { 0x0CA9, 0x0CA9 }, + { 0x0CB4, 0x0CB4 }, + { 0x0CBA, 0x0CBB }, + { 0x0CC5, 0x0CC5 }, + { 0x0CC9, 0x0CC9 }, + { 0x0CCE, 0x0CD4 }, + { 0x0CD7, 0x0CDD }, + { 0x0CDF, 0x0CDF }, + { 0x0CE4, 0x0CE5 }, + { 0x0CF0, 0x0CF0 }, + { 0x0CF3, 0x0D01 }, + { 0x0D04, 0x0D04 }, + { 0x0D0D, 0x0D0D }, + { 0x0D11, 0x0D11 }, + { 0x0D29, 0x0D29 }, + { 0x0D3A, 0x0D3C }, + { 0x0D45, 0x0D45 }, + { 0x0D49, 0x0D49 }, + { 0x0D4E, 0x0D56 }, + { 0x0D58, 0x0D5F }, + { 0x0D64, 0x0D65 }, + { 0x0D76, 0x0D78 }, + { 0x0D80, 0x0D81 }, + { 0x0D84, 0x0D84 }, + { 0x0D97, 0x0D99 }, + { 0x0DB2, 0x0DB2 }, + { 0x0DBC, 0x0DBC }, + { 0x0DBE, 0x0DBF }, + { 0x0DC7, 0x0DC9 }, + { 0x0DCB, 0x0DCE }, + { 0x0DD5, 0x0DD5 }, + { 0x0DD7, 0x0DD7 }, + { 0x0DE0, 0x0DF1 }, + { 0x0DF5, 0x0E00 }, + { 0x0E3B, 0x0E3E }, + { 0x0E5C, 0x0E80 }, + { 0x0E83, 0x0E83 }, + { 0x0E85, 0x0E86 }, + { 0x0E89, 0x0E89 }, + { 0x0E8B, 0x0E8C }, + { 0x0E8E, 0x0E93 }, + { 0x0E98, 0x0E98 }, + { 0x0EA0, 0x0EA0 }, + { 0x0EA4, 0x0EA4 }, + { 0x0EA6, 0x0EA6 }, + { 0x0EA8, 0x0EA9 }, + { 0x0EAC, 0x0EAC }, + { 0x0EBA, 0x0EBA }, + { 0x0EBE, 0x0EBF }, + { 0x0EC5, 0x0EC5 }, + { 0x0EC7, 0x0EC7 }, + { 0x0ECE, 0x0ECF }, + { 0x0EDA, 0x0EDB }, + { 0x0EDE, 0x0EFF }, + { 0x0F48, 0x0F48 }, + { 0x0F6D, 0x0F70 }, + { 0x0F8C, 0x0F8F }, + { 0x0F98, 0x0F98 }, + { 0x0FBD, 0x0FBD }, + { 0x0FCD, 0x0FCD }, + { 0x0FD5, 0x0FFF }, + { 0x109A, 0x109D }, + { 0x10C6, 0x10CF }, + { 0x10FD, 0x10FF }, + { 0x115A, 0x115E }, + { 0x11A3, 0x11A7 }, + { 0x11FA, 0x11FF }, + { 0x1249, 0x1249 }, + { 0x124E, 0x124F }, + { 0x1257, 0x1257 }, + { 0x1259, 0x1259 }, + { 0x125E, 0x125F }, + { 0x1289, 0x1289 }, + { 0x128E, 0x128F }, + { 0x12B1, 0x12B1 }, + { 0x12B6, 0x12B7 }, + { 0x12BF, 0x12BF }, + { 0x12C1, 0x12C1 }, + { 0x12C6, 0x12C7 }, + { 0x12D7, 0x12D7 }, + { 0x1311, 0x1311 }, + { 0x1316, 0x1317 }, + { 0x135B, 0x135E }, + { 0x137D, 0x137F }, + { 0x139A, 0x139F }, + { 0x13F5, 0x1400 }, + { 0x1677, 0x167F }, + { 0x169D, 0x169F }, + { 0x16F1, 0x16FF }, + { 0x170D, 0x170D }, + { 0x1715, 0x171F }, + { 0x1737, 0x173F }, + { 0x1754, 0x175F }, + { 0x176D, 0x176D }, + { 0x1771, 0x1771 }, + { 0x1774, 0x177F }, + { 0x17DE, 0x17DF }, + { 0x17EA, 0x17EF }, + { 0x17FA, 0x17FF }, + { 0x180F, 0x180F }, + { 0x181A, 0x181F }, + { 0x1878, 0x187F }, + { 0x18AB, 0x18FF }, + { 0x191D, 0x191F }, + { 0x192C, 0x192F }, + { 0x193C, 0x193F }, + { 0x1941, 0x1943 }, + { 0x196E, 0x196F }, + { 0x1975, 0x197F }, + { 0x19AA, 0x19AF }, + { 0x19CA, 0x19CF }, + { 0x19DA, 0x19DD }, + { 0x1A1C, 0x1A1D }, + { 0x1A20, 0x1AFF }, + { 0x1B4C, 0x1B4F }, + { 0x1B7D, 0x1B7F }, + { 0x1BAB, 0x1BAD }, + { 0x1BBA, 0x1BFF }, + { 0x1C38, 0x1C3A }, + { 0x1C4A, 0x1C4C }, + { 0x1C80, 0x1CFF }, + { 0x1DE7, 0x1DFD }, + { 0x1F16, 0x1F17 }, + { 0x1F1E, 0x1F1F }, + { 0x1F46, 0x1F47 }, + { 0x1F4E, 0x1F4F }, + { 0x1F58, 0x1F58 }, + { 0x1F5A, 0x1F5A }, + { 0x1F5C, 0x1F5C }, + { 0x1F5E, 0x1F5E }, + { 0x1F7E, 0x1F7F }, + { 0x1FB5, 0x1FB5 }, + { 0x1FC5, 0x1FC5 }, + { 0x1FD4, 0x1FD5 }, + { 0x1FDC, 0x1FDC }, + { 0x1FF0, 0x1FF1 }, + { 0x1FF5, 0x1FF5 }, + { 0x1FFF, 0x1FFF }, + { 0x2065, 0x2069 }, + { 0x2072, 0x2073 }, + { 0x208F, 0x208F }, + { 0x2095, 0x209F }, + { 0x20B6, 0x20CF }, + { 0x20F1, 0x20FF }, + { 0x2150, 0x2152 }, + { 0x2189, 0x218F }, + { 0x23E8, 0x23FF }, + { 0x2427, 0x243F }, + { 0x244B, 0x245F }, + { 0x269E, 0x269F }, + { 0x26BD, 0x26BF }, + { 0x26C4, 0x2700 }, + { 0x2705, 0x2705 }, + { 0x270A, 0x270B }, + { 0x2728, 0x2728 }, + { 0x274C, 0x274C }, + { 0x274E, 0x274E }, + { 0x2753, 0x2755 }, + { 0x2757, 0x2757 }, + { 0x275F, 0x2760 }, + { 0x2795, 0x2797 }, + { 0x27B0, 0x27B0 }, + { 0x27BF, 0x27BF }, + { 0x27CB, 0x27CB }, + { 0x27CD, 0x27CF }, + { 0x2B4D, 0x2B4F }, + { 0x2B55, 0x2BFF }, + { 0x2C2F, 0x2C2F }, + { 0x2C5F, 0x2C5F }, + { 0x2C70, 0x2C70 }, + { 0x2C7E, 0x2C7F }, + { 0x2CEB, 0x2CF8 }, + { 0x2D26, 0x2D2F }, + { 0x2D66, 0x2D6E }, + { 0x2D70, 0x2D7F }, + { 0x2D97, 0x2D9F }, + { 0x2DA7, 0x2DA7 }, + { 0x2DAF, 0x2DAF }, + { 0x2DB7, 0x2DB7 }, + { 0x2DBF, 0x2DBF }, + { 0x2DC7, 0x2DC7 }, + { 0x2DCF, 0x2DCF }, + { 0x2DD7, 0x2DD7 }, + { 0x2DDF, 0x2DDF }, + { 0x2E31, 0x2E7F }, + { 0x2E9A, 0x2E9A }, + { 0x2EF4, 0x2EFF }, + { 0x2FD6, 0x2FEF }, + { 0x2FFC, 0x2FFF }, + { 0x3040, 0x3040 }, + { 0x3097, 0x3098 }, + { 0x3100, 0x3104 }, + { 0x312E, 0x3130 }, + { 0x318F, 0x318F }, + { 0x31B8, 0x31BF }, + { 0x31E4, 0x31EF }, + { 0x321F, 0x321F }, + { 0x3244, 0x324F }, + { 0x32FF, 0x32FF }, + { 0x4DB6, 0x4DBF }, + { 0x9FC4, 0x9FFF }, + { 0xA48D, 0xA48F }, + { 0xA4C7, 0xA4FF }, + { 0xA62C, 0xA63F }, + { 0xA660, 0xA661 }, + { 0xA674, 0xA67B }, + { 0xA698, 0xA6FF }, + { 0xA78D, 0xA7FA }, + { 0xA82C, 0xA83F }, + { 0xA878, 0xA87F }, + { 0xA8C5, 0xA8CD }, + { 0xA8DA, 0xA8FF }, + { 0xA954, 0xA95E }, + { 0xA960, 0xA9FF }, + { 0xAA37, 0xAA3F }, + { 0xAA4E, 0xAA4F }, + { 0xAA5A, 0xAA5B }, + { 0xAA60, 0xABFF }, + { 0xD7A4, 0xD7FF }, + { 0xFA2E, 0xFA2F }, + { 0xFA6B, 0xFA6F }, + { 0xFADA, 0xFAFF }, + { 0xFB07, 0xFB12 }, + { 0xFB18, 0xFB1C }, + { 0xFB37, 0xFB37 }, + { 0xFB3D, 0xFB3D }, + { 0xFB3F, 0xFB3F }, + { 0xFB42, 0xFB42 }, + { 0xFB45, 0xFB45 }, + { 0xFBB2, 0xFBD2 }, + { 0xFD40, 0xFD4F }, + { 0xFD90, 0xFD91 }, + { 0xFDC8, 0xFDCF }, + { 0xFDFE, 0xFDFF }, + { 0xFE1A, 0xFE1F }, + { 0xFE27, 0xFE2F }, + { 0xFE53, 0xFE53 }, + { 0xFE67, 0xFE67 }, + { 0xFE6C, 0xFE6F }, + { 0xFE75, 0xFE75 }, + { 0xFEFD, 0xFEFE }, + { 0xFF00, 0xFF00 }, + { 0xFFBF, 0xFFC1 }, + { 0xFFC8, 0xFFC9 }, + { 0xFFD0, 0xFFD1 }, + { 0xFFD8, 0xFFD9 }, + { 0xFFDD, 0xFFDF }, + { 0xFFE7, 0xFFE7 }, + { 0xFFEF, 0xFFF8 }, + { 0x1000C, 0x1000C }, + { 0x10027, 0x10027 }, + { 0x1003B, 0x1003B }, + { 0x1003E, 0x1003E }, + { 0x1004E, 0x1004F }, + { 0x1005E, 0x1007F }, + { 0x100FB, 0x100FF }, + { 0x10103, 0x10106 }, + { 0x10134, 0x10136 }, + { 0x1018B, 0x1018F }, + { 0x1019C, 0x101CF }, + { 0x101FE, 0x1027F }, + { 0x1029D, 0x1029F }, + { 0x102D1, 0x102FF }, + { 0x1031F, 0x1031F }, + { 0x10324, 0x1032F }, + { 0x1034B, 0x1037F }, + { 0x1039E, 0x1039E }, + { 0x103C4, 0x103C7 }, + { 0x103D6, 0x103FF }, + { 0x1049E, 0x1049F }, + { 0x104AA, 0x107FF }, + { 0x10806, 0x10807 }, + { 0x10809, 0x10809 }, + { 0x10836, 0x10836 }, + { 0x10839, 0x1083B }, + { 0x1083D, 0x1083E }, + { 0x10840, 0x108FF }, + { 0x1091A, 0x1091E }, + { 0x1093A, 0x1093E }, + { 0x10940, 0x109FF }, + { 0x10A04, 0x10A04 }, + { 0x10A07, 0x10A0B }, + { 0x10A14, 0x10A14 }, + { 0x10A18, 0x10A18 }, + { 0x10A34, 0x10A37 }, + { 0x10A3B, 0x10A3E }, + { 0x10A48, 0x10A4F }, + { 0x10A59, 0x11FFF }, + { 0x1236F, 0x123FF }, + { 0x12463, 0x1246F }, + { 0x12474, 0x1CFFF }, + { 0x1D0F6, 0x1D0FF }, + { 0x1D127, 0x1D128 }, + { 0x1D1DE, 0x1D1FF }, + { 0x1D246, 0x1D2FF }, + { 0x1D357, 0x1D35F }, + { 0x1D372, 0x1D3FF }, + { 0x1D455, 0x1D455 }, + { 0x1D49D, 0x1D49D }, + { 0x1D4A0, 0x1D4A1 }, + { 0x1D4A3, 0x1D4A4 }, + { 0x1D4A7, 0x1D4A8 }, + { 0x1D4AD, 0x1D4AD }, + { 0x1D4BA, 0x1D4BA }, + { 0x1D4BC, 0x1D4BC }, + { 0x1D4C4, 0x1D4C4 }, + { 0x1D506, 0x1D506 }, + { 0x1D50B, 0x1D50C }, + { 0x1D515, 0x1D515 }, + { 0x1D51D, 0x1D51D }, + { 0x1D53A, 0x1D53A }, + { 0x1D53F, 0x1D53F }, + { 0x1D545, 0x1D545 }, + { 0x1D547, 0x1D549 }, + { 0x1D551, 0x1D551 }, + { 0x1D6A6, 0x1D6A7 }, + { 0x1D7CC, 0x1D7CD }, + { 0x1D800, 0x1EFFF }, + { 0x1F02C, 0x1F02F }, + { 0x1F094, 0x1FFFD }, + { 0x2A6D7, 0x2F7FF }, + { 0x2FA1E, 0x2FFFD }, + { 0x30000, 0x3FFFD }, + { 0x40000, 0x4FFFD }, + { 0x50000, 0x5FFFD }, + { 0x60000, 0x6FFFD }, + { 0x70000, 0x7FFFD }, + { 0x80000, 0x8FFFD }, + { 0x90000, 0x9FFFD }, + { 0xA0000, 0xAFFFD }, + { 0xB0000, 0xBFFFD }, + { 0xC0000, 0xCFFFD }, + { 0xD0000, 0xDFFFD }, + { 0xE0000, 0xE0000 }, + { 0xE0002, 0xE001F }, + { 0xE0080, 0xE00FF }, + { 0xE01F0, 0xEFFFD } + +#define PREDICATE(c) uc_is_property_unassigned_code_value (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_unified_ideograph.c b/tests/unictype/test-pr_unified_ideograph.c new file mode 100644 index 00000000..e394751d --- /dev/null +++ b/tests/unictype/test-pr_unified_ideograph.c @@ -0,0 +1,32 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x3400, 0x4DB5 }, + { 0x4E00, 0x9FC3 }, + { 0xFA0E, 0xFA0F }, + { 0xFA11, 0xFA11 }, + { 0xFA13, 0xFA14 }, + { 0xFA1F, 0xFA1F }, + { 0xFA21, 0xFA21 }, + { 0xFA23, 0xFA24 }, + { 0xFA27, 0xFA29 }, + { 0x20000, 0x2A6D6 } + +#define PREDICATE(c) uc_is_property_unified_ideograph (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_uppercase.c b/tests/unictype/test-pr_uppercase.c new file mode 100644 index 00000000..f44611ba --- /dev/null +++ b/tests/unictype/test-pr_uppercase.c @@ -0,0 +1,615 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0041, 0x005A }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00DE }, + { 0x0100, 0x0100 }, + { 0x0102, 0x0102 }, + { 0x0104, 0x0104 }, + { 0x0106, 0x0106 }, + { 0x0108, 0x0108 }, + { 0x010A, 0x010A }, + { 0x010C, 0x010C }, + { 0x010E, 0x010E }, + { 0x0110, 0x0110 }, + { 0x0112, 0x0112 }, + { 0x0114, 0x0114 }, + { 0x0116, 0x0116 }, + { 0x0118, 0x0118 }, + { 0x011A, 0x011A }, + { 0x011C, 0x011C }, + { 0x011E, 0x011E }, + { 0x0120, 0x0120 }, + { 0x0122, 0x0122 }, + { 0x0124, 0x0124 }, + { 0x0126, 0x0126 }, + { 0x0128, 0x0128 }, + { 0x012A, 0x012A }, + { 0x012C, 0x012C }, + { 0x012E, 0x012E }, + { 0x0130, 0x0130 }, + { 0x0132, 0x0132 }, + { 0x0134, 0x0134 }, + { 0x0136, 0x0136 }, + { 0x0139, 0x0139 }, + { 0x013B, 0x013B }, + { 0x013D, 0x013D }, + { 0x013F, 0x013F }, + { 0x0141, 0x0141 }, + { 0x0143, 0x0143 }, + { 0x0145, 0x0145 }, + { 0x0147, 0x0147 }, + { 0x014A, 0x014A }, + { 0x014C, 0x014C }, + { 0x014E, 0x014E }, + { 0x0150, 0x0150 }, + { 0x0152, 0x0152 }, + { 0x0154, 0x0154 }, + { 0x0156, 0x0156 }, + { 0x0158, 0x0158 }, + { 0x015A, 0x015A }, + { 0x015C, 0x015C }, + { 0x015E, 0x015E }, + { 0x0160, 0x0160 }, + { 0x0162, 0x0162 }, + { 0x0164, 0x0164 }, + { 0x0166, 0x0166 }, + { 0x0168, 0x0168 }, + { 0x016A, 0x016A }, + { 0x016C, 0x016C }, + { 0x016E, 0x016E }, + { 0x0170, 0x0170 }, + { 0x0172, 0x0172 }, + { 0x0174, 0x0174 }, + { 0x0176, 0x0176 }, + { 0x0178, 0x0179 }, + { 0x017B, 0x017B }, + { 0x017D, 0x017D }, + { 0x0181, 0x0182 }, + { 0x0184, 0x0184 }, + { 0x0186, 0x0187 }, + { 0x0189, 0x018B }, + { 0x018E, 0x0191 }, + { 0x0193, 0x0194 }, + { 0x0196, 0x0198 }, + { 0x019C, 0x019D }, + { 0x019F, 0x01A0 }, + { 0x01A2, 0x01A2 }, + { 0x01A4, 0x01A4 }, + { 0x01A6, 0x01A7 }, + { 0x01A9, 0x01A9 }, + { 0x01AC, 0x01AC }, + { 0x01AE, 0x01AF }, + { 0x01B1, 0x01B3 }, + { 0x01B5, 0x01B5 }, + { 0x01B7, 0x01B8 }, + { 0x01BC, 0x01BC }, + { 0x01C4, 0x01C4 }, + { 0x01C7, 0x01C7 }, + { 0x01CA, 0x01CA }, + { 0x01CD, 0x01CD }, + { 0x01CF, 0x01CF }, + { 0x01D1, 0x01D1 }, + { 0x01D3, 0x01D3 }, + { 0x01D5, 0x01D5 }, + { 0x01D7, 0x01D7 }, + { 0x01D9, 0x01D9 }, + { 0x01DB, 0x01DB }, + { 0x01DE, 0x01DE }, + { 0x01E0, 0x01E0 }, + { 0x01E2, 0x01E2 }, + { 0x01E4, 0x01E4 }, + { 0x01E6, 0x01E6 }, + { 0x01E8, 0x01E8 }, + { 0x01EA, 0x01EA }, + { 0x01EC, 0x01EC }, + { 0x01EE, 0x01EE }, + { 0x01F1, 0x01F1 }, + { 0x01F4, 0x01F4 }, + { 0x01F6, 0x01F8 }, + { 0x01FA, 0x01FA }, + { 0x01FC, 0x01FC }, + { 0x01FE, 0x01FE }, + { 0x0200, 0x0200 }, + { 0x0202, 0x0202 }, + { 0x0204, 0x0204 }, + { 0x0206, 0x0206 }, + { 0x0208, 0x0208 }, + { 0x020A, 0x020A }, + { 0x020C, 0x020C }, + { 0x020E, 0x020E }, + { 0x0210, 0x0210 }, + { 0x0212, 0x0212 }, + { 0x0214, 0x0214 }, + { 0x0216, 0x0216 }, + { 0x0218, 0x0218 }, + { 0x021A, 0x021A }, + { 0x021C, 0x021C }, + { 0x021E, 0x021E }, + { 0x0220, 0x0220 }, + { 0x0222, 0x0222 }, + { 0x0224, 0x0224 }, + { 0x0226, 0x0226 }, + { 0x0228, 0x0228 }, + { 0x022A, 0x022A }, + { 0x022C, 0x022C }, + { 0x022E, 0x022E }, + { 0x0230, 0x0230 }, + { 0x0232, 0x0232 }, + { 0x023A, 0x023B }, + { 0x023D, 0x023E }, + { 0x0241, 0x0241 }, + { 0x0243, 0x0246 }, + { 0x0248, 0x0248 }, + { 0x024A, 0x024A }, + { 0x024C, 0x024C }, + { 0x024E, 0x024E }, + { 0x0370, 0x0370 }, + { 0x0372, 0x0372 }, + { 0x0376, 0x0376 }, + { 0x0386, 0x0386 }, + { 0x0388, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x038F }, + { 0x0391, 0x03A1 }, + { 0x03A3, 0x03AB }, + { 0x03CF, 0x03CF }, + { 0x03D2, 0x03D4 }, + { 0x03D8, 0x03D8 }, + { 0x03DA, 0x03DA }, + { 0x03DC, 0x03DC }, + { 0x03DE, 0x03DE }, + { 0x03E0, 0x03E0 }, + { 0x03E2, 0x03E2 }, + { 0x03E4, 0x03E4 }, + { 0x03E6, 0x03E6 }, + { 0x03E8, 0x03E8 }, + { 0x03EA, 0x03EA }, + { 0x03EC, 0x03EC }, + { 0x03EE, 0x03EE }, + { 0x03F4, 0x03F4 }, + { 0x03F7, 0x03F7 }, + { 0x03F9, 0x03FA }, + { 0x03FD, 0x042F }, + { 0x0460, 0x0460 }, + { 0x0462, 0x0462 }, + { 0x0464, 0x0464 }, + { 0x0466, 0x0466 }, + { 0x0468, 0x0468 }, + { 0x046A, 0x046A }, + { 0x046C, 0x046C }, + { 0x046E, 0x046E }, + { 0x0470, 0x0470 }, + { 0x0472, 0x0472 }, + { 0x0474, 0x0474 }, + { 0x0476, 0x0476 }, + { 0x0478, 0x0478 }, + { 0x047A, 0x047A }, + { 0x047C, 0x047C }, + { 0x047E, 0x047E }, + { 0x0480, 0x0480 }, + { 0x048A, 0x048A }, + { 0x048C, 0x048C }, + { 0x048E, 0x048E }, + { 0x0490, 0x0490 }, + { 0x0492, 0x0492 }, + { 0x0494, 0x0494 }, + { 0x0496, 0x0496 }, + { 0x0498, 0x0498 }, + { 0x049A, 0x049A }, + { 0x049C, 0x049C }, + { 0x049E, 0x049E }, + { 0x04A0, 0x04A0 }, + { 0x04A2, 0x04A2 }, + { 0x04A4, 0x04A4 }, + { 0x04A6, 0x04A6 }, + { 0x04A8, 0x04A8 }, + { 0x04AA, 0x04AA }, + { 0x04AC, 0x04AC }, + { 0x04AE, 0x04AE }, + { 0x04B0, 0x04B0 }, + { 0x04B2, 0x04B2 }, + { 0x04B4, 0x04B4 }, + { 0x04B6, 0x04B6 }, + { 0x04B8, 0x04B8 }, + { 0x04BA, 0x04BA }, + { 0x04BC, 0x04BC }, + { 0x04BE, 0x04BE }, + { 0x04C0, 0x04C1 }, + { 0x04C3, 0x04C3 }, + { 0x04C5, 0x04C5 }, + { 0x04C7, 0x04C7 }, + { 0x04C9, 0x04C9 }, + { 0x04CB, 0x04CB }, + { 0x04CD, 0x04CD }, + { 0x04D0, 0x04D0 }, + { 0x04D2, 0x04D2 }, + { 0x04D4, 0x04D4 }, + { 0x04D6, 0x04D6 }, + { 0x04D8, 0x04D8 }, + { 0x04DA, 0x04DA }, + { 0x04DC, 0x04DC }, + { 0x04DE, 0x04DE }, + { 0x04E0, 0x04E0 }, + { 0x04E2, 0x04E2 }, + { 0x04E4, 0x04E4 }, + { 0x04E6, 0x04E6 }, + { 0x04E8, 0x04E8 }, + { 0x04EA, 0x04EA }, + { 0x04EC, 0x04EC }, + { 0x04EE, 0x04EE }, + { 0x04F0, 0x04F0 }, + { 0x04F2, 0x04F2 }, + { 0x04F4, 0x04F4 }, + { 0x04F6, 0x04F6 }, + { 0x04F8, 0x04F8 }, + { 0x04FA, 0x04FA }, + { 0x04FC, 0x04FC }, + { 0x04FE, 0x04FE }, + { 0x0500, 0x0500 }, + { 0x0502, 0x0502 }, + { 0x0504, 0x0504 }, + { 0x0506, 0x0506 }, + { 0x0508, 0x0508 }, + { 0x050A, 0x050A }, + { 0x050C, 0x050C }, + { 0x050E, 0x050E }, + { 0x0510, 0x0510 }, + { 0x0512, 0x0512 }, + { 0x0514, 0x0514 }, + { 0x0516, 0x0516 }, + { 0x0518, 0x0518 }, + { 0x051A, 0x051A }, + { 0x051C, 0x051C }, + { 0x051E, 0x051E }, + { 0x0520, 0x0520 }, + { 0x0522, 0x0522 }, + { 0x0531, 0x0556 }, + { 0x10A0, 0x10C5 }, + { 0x1E00, 0x1E00 }, + { 0x1E02, 0x1E02 }, + { 0x1E04, 0x1E04 }, + { 0x1E06, 0x1E06 }, + { 0x1E08, 0x1E08 }, + { 0x1E0A, 0x1E0A }, + { 0x1E0C, 0x1E0C }, + { 0x1E0E, 0x1E0E }, + { 0x1E10, 0x1E10 }, + { 0x1E12, 0x1E12 }, + { 0x1E14, 0x1E14 }, + { 0x1E16, 0x1E16 }, + { 0x1E18, 0x1E18 }, + { 0x1E1A, 0x1E1A }, + { 0x1E1C, 0x1E1C }, + { 0x1E1E, 0x1E1E }, + { 0x1E20, 0x1E20 }, + { 0x1E22, 0x1E22 }, + { 0x1E24, 0x1E24 }, + { 0x1E26, 0x1E26 }, + { 0x1E28, 0x1E28 }, + { 0x1E2A, 0x1E2A }, + { 0x1E2C, 0x1E2C }, + { 0x1E2E, 0x1E2E }, + { 0x1E30, 0x1E30 }, + { 0x1E32, 0x1E32 }, + { 0x1E34, 0x1E34 }, + { 0x1E36, 0x1E36 }, + { 0x1E38, 0x1E38 }, + { 0x1E3A, 0x1E3A }, + { 0x1E3C, 0x1E3C }, + { 0x1E3E, 0x1E3E }, + { 0x1E40, 0x1E40 }, + { 0x1E42, 0x1E42 }, + { 0x1E44, 0x1E44 }, + { 0x1E46, 0x1E46 }, + { 0x1E48, 0x1E48 }, + { 0x1E4A, 0x1E4A }, + { 0x1E4C, 0x1E4C }, + { 0x1E4E, 0x1E4E }, + { 0x1E50, 0x1E50 }, + { 0x1E52, 0x1E52 }, + { 0x1E54, 0x1E54 }, + { 0x1E56, 0x1E56 }, + { 0x1E58, 0x1E58 }, + { 0x1E5A, 0x1E5A }, + { 0x1E5C, 0x1E5C }, + { 0x1E5E, 0x1E5E }, + { 0x1E60, 0x1E60 }, + { 0x1E62, 0x1E62 }, + { 0x1E64, 0x1E64 }, + { 0x1E66, 0x1E66 }, + { 0x1E68, 0x1E68 }, + { 0x1E6A, 0x1E6A }, + { 0x1E6C, 0x1E6C }, + { 0x1E6E, 0x1E6E }, + { 0x1E70, 0x1E70 }, + { 0x1E72, 0x1E72 }, + { 0x1E74, 0x1E74 }, + { 0x1E76, 0x1E76 }, + { 0x1E78, 0x1E78 }, + { 0x1E7A, 0x1E7A }, + { 0x1E7C, 0x1E7C }, + { 0x1E7E, 0x1E7E }, + { 0x1E80, 0x1E80 }, + { 0x1E82, 0x1E82 }, + { 0x1E84, 0x1E84 }, + { 0x1E86, 0x1E86 }, + { 0x1E88, 0x1E88 }, + { 0x1E8A, 0x1E8A }, + { 0x1E8C, 0x1E8C }, + { 0x1E8E, 0x1E8E }, + { 0x1E90, 0x1E90 }, + { 0x1E92, 0x1E92 }, + { 0x1E94, 0x1E94 }, + { 0x1E9E, 0x1E9E }, + { 0x1EA0, 0x1EA0 }, + { 0x1EA2, 0x1EA2 }, + { 0x1EA4, 0x1EA4 }, + { 0x1EA6, 0x1EA6 }, + { 0x1EA8, 0x1EA8 }, + { 0x1EAA, 0x1EAA }, + { 0x1EAC, 0x1EAC }, + { 0x1EAE, 0x1EAE }, + { 0x1EB0, 0x1EB0 }, + { 0x1EB2, 0x1EB2 }, + { 0x1EB4, 0x1EB4 }, + { 0x1EB6, 0x1EB6 }, + { 0x1EB8, 0x1EB8 }, + { 0x1EBA, 0x1EBA }, + { 0x1EBC, 0x1EBC }, + { 0x1EBE, 0x1EBE }, + { 0x1EC0, 0x1EC0 }, + { 0x1EC2, 0x1EC2 }, + { 0x1EC4, 0x1EC4 }, + { 0x1EC6, 0x1EC6 }, + { 0x1EC8, 0x1EC8 }, + { 0x1ECA, 0x1ECA }, + { 0x1ECC, 0x1ECC }, + { 0x1ECE, 0x1ECE }, + { 0x1ED0, 0x1ED0 }, + { 0x1ED2, 0x1ED2 }, + { 0x1ED4, 0x1ED4 }, + { 0x1ED6, 0x1ED6 }, + { 0x1ED8, 0x1ED8 }, + { 0x1EDA, 0x1EDA }, + { 0x1EDC, 0x1EDC }, + { 0x1EDE, 0x1EDE }, + { 0x1EE0, 0x1EE0 }, + { 0x1EE2, 0x1EE2 }, + { 0x1EE4, 0x1EE4 }, + { 0x1EE6, 0x1EE6 }, + { 0x1EE8, 0x1EE8 }, + { 0x1EEA, 0x1EEA }, + { 0x1EEC, 0x1EEC }, + { 0x1EEE, 0x1EEE }, + { 0x1EF0, 0x1EF0 }, + { 0x1EF2, 0x1EF2 }, + { 0x1EF4, 0x1EF4 }, + { 0x1EF6, 0x1EF6 }, + { 0x1EF8, 0x1EF8 }, + { 0x1EFA, 0x1EFA }, + { 0x1EFC, 0x1EFC }, + { 0x1EFE, 0x1EFE }, + { 0x1F08, 0x1F0F }, + { 0x1F18, 0x1F1D }, + { 0x1F28, 0x1F2F }, + { 0x1F38, 0x1F3F }, + { 0x1F48, 0x1F4D }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F5F }, + { 0x1F68, 0x1F6F }, + { 0x1FB8, 0x1FBB }, + { 0x1FC8, 0x1FCB }, + { 0x1FD8, 0x1FDB }, + { 0x1FE8, 0x1FEC }, + { 0x1FF8, 0x1FFB }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210B, 0x210D }, + { 0x2110, 0x2112 }, + { 0x2115, 0x2115 }, + { 0x2119, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x2128 }, + { 0x212A, 0x212D }, + { 0x2130, 0x2133 }, + { 0x213E, 0x213F }, + { 0x2145, 0x2145 }, + { 0x2160, 0x216F }, + { 0x2183, 0x2183 }, + { 0x24B6, 0x24CF }, + { 0x2C00, 0x2C2E }, + { 0x2C60, 0x2C60 }, + { 0x2C62, 0x2C64 }, + { 0x2C67, 0x2C67 }, + { 0x2C69, 0x2C69 }, + { 0x2C6B, 0x2C6B }, + { 0x2C6D, 0x2C6F }, + { 0x2C72, 0x2C72 }, + { 0x2C75, 0x2C75 }, + { 0x2C80, 0x2C80 }, + { 0x2C82, 0x2C82 }, + { 0x2C84, 0x2C84 }, + { 0x2C86, 0x2C86 }, + { 0x2C88, 0x2C88 }, + { 0x2C8A, 0x2C8A }, + { 0x2C8C, 0x2C8C }, + { 0x2C8E, 0x2C8E }, + { 0x2C90, 0x2C90 }, + { 0x2C92, 0x2C92 }, + { 0x2C94, 0x2C94 }, + { 0x2C96, 0x2C96 }, + { 0x2C98, 0x2C98 }, + { 0x2C9A, 0x2C9A }, + { 0x2C9C, 0x2C9C }, + { 0x2C9E, 0x2C9E }, + { 0x2CA0, 0x2CA0 }, + { 0x2CA2, 0x2CA2 }, + { 0x2CA4, 0x2CA4 }, + { 0x2CA6, 0x2CA6 }, + { 0x2CA8, 0x2CA8 }, + { 0x2CAA, 0x2CAA }, + { 0x2CAC, 0x2CAC }, + { 0x2CAE, 0x2CAE }, + { 0x2CB0, 0x2CB0 }, + { 0x2CB2, 0x2CB2 }, + { 0x2CB4, 0x2CB4 }, + { 0x2CB6, 0x2CB6 }, + { 0x2CB8, 0x2CB8 }, + { 0x2CBA, 0x2CBA }, + { 0x2CBC, 0x2CBC }, + { 0x2CBE, 0x2CBE }, + { 0x2CC0, 0x2CC0 }, + { 0x2CC2, 0x2CC2 }, + { 0x2CC4, 0x2CC4 }, + { 0x2CC6, 0x2CC6 }, + { 0x2CC8, 0x2CC8 }, + { 0x2CCA, 0x2CCA }, + { 0x2CCC, 0x2CCC }, + { 0x2CCE, 0x2CCE }, + { 0x2CD0, 0x2CD0 }, + { 0x2CD2, 0x2CD2 }, + { 0x2CD4, 0x2CD4 }, + { 0x2CD6, 0x2CD6 }, + { 0x2CD8, 0x2CD8 }, + { 0x2CDA, 0x2CDA }, + { 0x2CDC, 0x2CDC }, + { 0x2CDE, 0x2CDE }, + { 0x2CE0, 0x2CE0 }, + { 0x2CE2, 0x2CE2 }, + { 0xA640, 0xA640 }, + { 0xA642, 0xA642 }, + { 0xA644, 0xA644 }, + { 0xA646, 0xA646 }, + { 0xA648, 0xA648 }, + { 0xA64A, 0xA64A }, + { 0xA64C, 0xA64C }, + { 0xA64E, 0xA64E }, + { 0xA650, 0xA650 }, + { 0xA652, 0xA652 }, + { 0xA654, 0xA654 }, + { 0xA656, 0xA656 }, + { 0xA658, 0xA658 }, + { 0xA65A, 0xA65A }, + { 0xA65C, 0xA65C }, + { 0xA65E, 0xA65E }, + { 0xA662, 0xA662 }, + { 0xA664, 0xA664 }, + { 0xA666, 0xA666 }, + { 0xA668, 0xA668 }, + { 0xA66A, 0xA66A }, + { 0xA66C, 0xA66C }, + { 0xA680, 0xA680 }, + { 0xA682, 0xA682 }, + { 0xA684, 0xA684 }, + { 0xA686, 0xA686 }, + { 0xA688, 0xA688 }, + { 0xA68A, 0xA68A }, + { 0xA68C, 0xA68C }, + { 0xA68E, 0xA68E }, + { 0xA690, 0xA690 }, + { 0xA692, 0xA692 }, + { 0xA694, 0xA694 }, + { 0xA696, 0xA696 }, + { 0xA722, 0xA722 }, + { 0xA724, 0xA724 }, + { 0xA726, 0xA726 }, + { 0xA728, 0xA728 }, + { 0xA72A, 0xA72A }, + { 0xA72C, 0xA72C }, + { 0xA72E, 0xA72E }, + { 0xA732, 0xA732 }, + { 0xA734, 0xA734 }, + { 0xA736, 0xA736 }, + { 0xA738, 0xA738 }, + { 0xA73A, 0xA73A }, + { 0xA73C, 0xA73C }, + { 0xA73E, 0xA73E }, + { 0xA740, 0xA740 }, + { 0xA742, 0xA742 }, + { 0xA744, 0xA744 }, + { 0xA746, 0xA746 }, + { 0xA748, 0xA748 }, + { 0xA74A, 0xA74A }, + { 0xA74C, 0xA74C }, + { 0xA74E, 0xA74E }, + { 0xA750, 0xA750 }, + { 0xA752, 0xA752 }, + { 0xA754, 0xA754 }, + { 0xA756, 0xA756 }, + { 0xA758, 0xA758 }, + { 0xA75A, 0xA75A }, + { 0xA75C, 0xA75C }, + { 0xA75E, 0xA75E }, + { 0xA760, 0xA760 }, + { 0xA762, 0xA762 }, + { 0xA764, 0xA764 }, + { 0xA766, 0xA766 }, + { 0xA768, 0xA768 }, + { 0xA76A, 0xA76A }, + { 0xA76C, 0xA76C }, + { 0xA76E, 0xA76E }, + { 0xA779, 0xA779 }, + { 0xA77B, 0xA77B }, + { 0xA77D, 0xA77E }, + { 0xA780, 0xA780 }, + { 0xA782, 0xA782 }, + { 0xA784, 0xA784 }, + { 0xA786, 0xA786 }, + { 0xA78B, 0xA78B }, + { 0xFF21, 0xFF3A }, + { 0x10400, 0x10427 }, + { 0x1D400, 0x1D419 }, + { 0x1D434, 0x1D44D }, + { 0x1D468, 0x1D481 }, + { 0x1D49C, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B5 }, + { 0x1D4D0, 0x1D4E9 }, + { 0x1D504, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D538, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D56C, 0x1D585 }, + { 0x1D5A0, 0x1D5B9 }, + { 0x1D5D4, 0x1D5ED }, + { 0x1D608, 0x1D621 }, + { 0x1D63C, 0x1D655 }, + { 0x1D670, 0x1D689 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6E2, 0x1D6FA }, + { 0x1D71C, 0x1D734 }, + { 0x1D756, 0x1D76E }, + { 0x1D790, 0x1D7A8 }, + { 0x1D7CA, 0x1D7CA } + +#define PREDICATE(c) uc_is_property_uppercase (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_variation_selector.c b/tests/unictype/test-pr_variation_selector.c new file mode 100644 index 00000000..50aaa434 --- /dev/null +++ b/tests/unictype/test-pr_variation_selector.c @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x180B, 0x180D }, + { 0xFE00, 0xFE0F }, + { 0xE0100, 0xE01EF } + +#define PREDICATE(c) uc_is_property_variation_selector (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_white_space.c b/tests/unictype/test-pr_white_space.c new file mode 100644 index 00000000..a7d82173 --- /dev/null +++ b/tests/unictype/test-pr_white_space.c @@ -0,0 +1,33 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0009, 0x000D }, + { 0x0020, 0x0020 }, + { 0x0085, 0x0085 }, + { 0x00A0, 0x00A0 }, + { 0x1680, 0x1680 }, + { 0x180E, 0x180E }, + { 0x2000, 0x200A }, + { 0x2028, 0x2029 }, + { 0x202F, 0x202F }, + { 0x205F, 0x205F }, + { 0x3000, 0x3000 } + +#define PREDICATE(c) uc_is_property_white_space (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_xid_continue.c b/tests/unictype/test-pr_xid_continue.c new file mode 100644 index 00000000..14148c52 --- /dev/null +++ b/tests/unictype/test-pr_xid_continue.c @@ -0,0 +1,506 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0030, 0x0039 }, + { 0x0041, 0x005A }, + { 0x005F, 0x005F }, + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00B7, 0x00B7 }, + { 0x00BA, 0x00BA }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00F6 }, + { 0x00F8, 0x02C1 }, + { 0x02C6, 0x02D1 }, + { 0x02E0, 0x02E4 }, + { 0x02EC, 0x02EC }, + { 0x02EE, 0x02EE }, + { 0x0300, 0x0374 }, + { 0x0376, 0x0377 }, + { 0x037B, 0x037D }, + { 0x0386, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x03F5 }, + { 0x03F7, 0x0481 }, + { 0x0483, 0x0487 }, + { 0x048A, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0559, 0x0559 }, + { 0x0561, 0x0587 }, + { 0x0591, 0x05BD }, + { 0x05BF, 0x05BF }, + { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, + { 0x05C7, 0x05C7 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F2 }, + { 0x0610, 0x061A }, + { 0x0621, 0x065E }, + { 0x0660, 0x0669 }, + { 0x066E, 0x06D3 }, + { 0x06D5, 0x06DC }, + { 0x06DF, 0x06E8 }, + { 0x06EA, 0x06FC }, + { 0x06FF, 0x06FF }, + { 0x0710, 0x074A }, + { 0x074D, 0x07B1 }, + { 0x07C0, 0x07F5 }, + { 0x07FA, 0x07FA }, + { 0x0901, 0x0939 }, + { 0x093C, 0x094D }, + { 0x0950, 0x0954 }, + { 0x0958, 0x0963 }, + { 0x0966, 0x096F }, + { 0x0971, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0981, 0x0983 }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BC, 0x09C4 }, + { 0x09C7, 0x09C8 }, + { 0x09CB, 0x09CE }, + { 0x09D7, 0x09D7 }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E3 }, + { 0x09E6, 0x09F1 }, + { 0x0A01, 0x0A03 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A3C, 0x0A3C }, + { 0x0A3E, 0x0A42 }, + { 0x0A47, 0x0A48 }, + { 0x0A4B, 0x0A4D }, + { 0x0A51, 0x0A51 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A66, 0x0A75 }, + { 0x0A81, 0x0A83 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABC, 0x0AC5 }, + { 0x0AC7, 0x0AC9 }, + { 0x0ACB, 0x0ACD }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE3 }, + { 0x0AE6, 0x0AEF }, + { 0x0B01, 0x0B03 }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3C, 0x0B44 }, + { 0x0B47, 0x0B48 }, + { 0x0B4B, 0x0B4D }, + { 0x0B56, 0x0B57 }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B63 }, + { 0x0B66, 0x0B6F }, + { 0x0B71, 0x0B71 }, + { 0x0B82, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BBE, 0x0BC2 }, + { 0x0BC6, 0x0BC8 }, + { 0x0BCA, 0x0BCD }, + { 0x0BD0, 0x0BD0 }, + { 0x0BD7, 0x0BD7 }, + { 0x0BE6, 0x0BEF }, + { 0x0C01, 0x0C03 }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C44 }, + { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, + { 0x0C55, 0x0C56 }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C63 }, + { 0x0C66, 0x0C6F }, + { 0x0C82, 0x0C83 }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBC, 0x0CC4 }, + { 0x0CC6, 0x0CC8 }, + { 0x0CCA, 0x0CCD }, + { 0x0CD5, 0x0CD6 }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE3 }, + { 0x0CE6, 0x0CEF }, + { 0x0D02, 0x0D03 }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D44 }, + { 0x0D46, 0x0D48 }, + { 0x0D4A, 0x0D4D }, + { 0x0D57, 0x0D57 }, + { 0x0D60, 0x0D63 }, + { 0x0D66, 0x0D6F }, + { 0x0D7A, 0x0D7F }, + { 0x0D82, 0x0D83 }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0DCA, 0x0DCA }, + { 0x0DCF, 0x0DD4 }, + { 0x0DD6, 0x0DD6 }, + { 0x0DD8, 0x0DDF }, + { 0x0DF2, 0x0DF3 }, + { 0x0E01, 0x0E3A }, + { 0x0E40, 0x0E4E }, + { 0x0E50, 0x0E59 }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB9 }, + { 0x0EBB, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EC6, 0x0EC6 }, + { 0x0EC8, 0x0ECD }, + { 0x0ED0, 0x0ED9 }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F00 }, + { 0x0F18, 0x0F19 }, + { 0x0F20, 0x0F29 }, + { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, + { 0x0F39, 0x0F39 }, + { 0x0F3E, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F71, 0x0F84 }, + { 0x0F86, 0x0F8B }, + { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, + { 0x0FC6, 0x0FC6 }, + { 0x1000, 0x1049 }, + { 0x1050, 0x1099 }, + { 0x10A0, 0x10C5 }, + { 0x10D0, 0x10FA }, + { 0x10FC, 0x10FC }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x135F, 0x135F }, + { 0x1369, 0x1371 }, + { 0x1380, 0x138F }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x166C }, + { 0x166F, 0x1676 }, + { 0x1681, 0x169A }, + { 0x16A0, 0x16EA }, + { 0x16EE, 0x16F0 }, + { 0x1700, 0x170C }, + { 0x170E, 0x1714 }, + { 0x1720, 0x1734 }, + { 0x1740, 0x1753 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1772, 0x1773 }, + { 0x1780, 0x17B3 }, + { 0x17B6, 0x17D3 }, + { 0x17D7, 0x17D7 }, + { 0x17DC, 0x17DD }, + { 0x17E0, 0x17E9 }, + { 0x180B, 0x180D }, + { 0x1810, 0x1819 }, + { 0x1820, 0x1877 }, + { 0x1880, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1920, 0x192B }, + { 0x1930, 0x193B }, + { 0x1946, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19B0, 0x19C9 }, + { 0x19D0, 0x19D9 }, + { 0x1A00, 0x1A1B }, + { 0x1B00, 0x1B4B }, + { 0x1B50, 0x1B59 }, + { 0x1B6B, 0x1B73 }, + { 0x1B80, 0x1BAA }, + { 0x1BAE, 0x1BB9 }, + { 0x1C00, 0x1C37 }, + { 0x1C40, 0x1C49 }, + { 0x1C4D, 0x1C7D }, + { 0x1D00, 0x1DE6 }, + { 0x1DFE, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FBC }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FC4 }, + { 0x1FC6, 0x1FCC }, + { 0x1FD0, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FE0, 0x1FEC }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFC }, + { 0x203F, 0x2040 }, + { 0x2054, 0x2054 }, + { 0x2071, 0x2071 }, + { 0x207F, 0x207F }, + { 0x2090, 0x2094 }, + { 0x20D0, 0x20DC }, + { 0x20E1, 0x20E1 }, + { 0x20E5, 0x20F0 }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2118, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x2128 }, + { 0x212A, 0x2139 }, + { 0x213C, 0x213F }, + { 0x2145, 0x2149 }, + { 0x214E, 0x214E }, + { 0x2160, 0x2188 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CE4 }, + { 0x2D00, 0x2D25 }, + { 0x2D30, 0x2D65 }, + { 0x2D6F, 0x2D6F }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x2DE0, 0x2DFF }, + { 0x3005, 0x3007 }, + { 0x3021, 0x302F }, + { 0x3031, 0x3035 }, + { 0x3038, 0x303C }, + { 0x3041, 0x3096 }, + { 0x3099, 0x309A }, + { 0x309D, 0x309F }, + { 0x30A1, 0x30FA }, + { 0x30FC, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x31A0, 0x31B7 }, + { 0x31F0, 0x31FF }, + { 0x3400, 0x4DB5 }, + { 0x4E00, 0x9FC3 }, + { 0xA000, 0xA48C }, + { 0xA500, 0xA60C }, + { 0xA610, 0xA62B }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA66F }, + { 0xA67C, 0xA67D }, + { 0xA67F, 0xA697 }, + { 0xA717, 0xA71F }, + { 0xA722, 0xA788 }, + { 0xA78B, 0xA78C }, + { 0xA7FB, 0xA827 }, + { 0xA840, 0xA873 }, + { 0xA880, 0xA8C4 }, + { 0xA8D0, 0xA8D9 }, + { 0xA900, 0xA92D }, + { 0xA930, 0xA953 }, + { 0xAA00, 0xAA36 }, + { 0xAA40, 0xAA4D }, + { 0xAA50, 0xAA59 }, + { 0xAC00, 0xD7A3 }, + { 0xF900, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB28 }, + { 0xFB2A, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFC5D }, + { 0xFC64, 0xFD3D }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDF9 }, + { 0xFE00, 0xFE0F }, + { 0xFE20, 0xFE26 }, + { 0xFE33, 0xFE34 }, + { 0xFE4D, 0xFE4F }, + { 0xFE71, 0xFE71 }, + { 0xFE73, 0xFE73 }, + { 0xFE77, 0xFE77 }, + { 0xFE79, 0xFE79 }, + { 0xFE7B, 0xFE7B }, + { 0xFE7D, 0xFE7D }, + { 0xFE7F, 0xFEFC }, + { 0xFF10, 0xFF19 }, + { 0xFF21, 0xFF3A }, + { 0xFF3F, 0xFF3F }, + { 0xFF41, 0xFF5A }, + { 0xFF66, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10140, 0x10174 }, + { 0x101FD, 0x101FD }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10330, 0x1034A }, + { 0x10380, 0x1039D }, + { 0x103A0, 0x103C3 }, + { 0x103C8, 0x103CF }, + { 0x103D1, 0x103D5 }, + { 0x10400, 0x1049D }, + { 0x104A0, 0x104A9 }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10915 }, + { 0x10920, 0x10939 }, + { 0x10A00, 0x10A03 }, + { 0x10A05, 0x10A06 }, + { 0x10A0C, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x10A38, 0x10A3A }, + { 0x10A3F, 0x10A3F }, + { 0x12000, 0x1236E }, + { 0x12400, 0x12462 }, + { 0x1D165, 0x1D169 }, + { 0x1D16D, 0x1D172 }, + { 0x1D17B, 0x1D182 }, + { 0x1D185, 0x1D18B }, + { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6FA }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D734 }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D76E }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D7A8 }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7CB }, + { 0x1D7CE, 0x1D7FF }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D }, + { 0xE0100, 0xE01EF } + +#define PREDICATE(c) uc_is_property_xid_continue (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_xid_start.c b/tests/unictype/test-pr_xid_start.c new file mode 100644 index 00000000..57326c0f --- /dev/null +++ b/tests/unictype/test-pr_xid_start.c @@ -0,0 +1,421 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0041, 0x005A }, + { 0x0061, 0x007A }, + { 0x00AA, 0x00AA }, + { 0x00B5, 0x00B5 }, + { 0x00BA, 0x00BA }, + { 0x00C0, 0x00D6 }, + { 0x00D8, 0x00F6 }, + { 0x00F8, 0x02C1 }, + { 0x02C6, 0x02D1 }, + { 0x02E0, 0x02E4 }, + { 0x02EC, 0x02EC }, + { 0x02EE, 0x02EE }, + { 0x0370, 0x0374 }, + { 0x0376, 0x0377 }, + { 0x037B, 0x037D }, + { 0x0386, 0x0386 }, + { 0x0388, 0x038A }, + { 0x038C, 0x038C }, + { 0x038E, 0x03A1 }, + { 0x03A3, 0x03F5 }, + { 0x03F7, 0x0481 }, + { 0x048A, 0x0523 }, + { 0x0531, 0x0556 }, + { 0x0559, 0x0559 }, + { 0x0561, 0x0587 }, + { 0x05D0, 0x05EA }, + { 0x05F0, 0x05F2 }, + { 0x0621, 0x064A }, + { 0x066E, 0x066F }, + { 0x0671, 0x06D3 }, + { 0x06D5, 0x06D5 }, + { 0x06E5, 0x06E6 }, + { 0x06EE, 0x06EF }, + { 0x06FA, 0x06FC }, + { 0x06FF, 0x06FF }, + { 0x0710, 0x0710 }, + { 0x0712, 0x072F }, + { 0x074D, 0x07A5 }, + { 0x07B1, 0x07B1 }, + { 0x07CA, 0x07EA }, + { 0x07F4, 0x07F5 }, + { 0x07FA, 0x07FA }, + { 0x0904, 0x0939 }, + { 0x093D, 0x093D }, + { 0x0950, 0x0950 }, + { 0x0958, 0x0961 }, + { 0x0971, 0x0972 }, + { 0x097B, 0x097F }, + { 0x0985, 0x098C }, + { 0x098F, 0x0990 }, + { 0x0993, 0x09A8 }, + { 0x09AA, 0x09B0 }, + { 0x09B2, 0x09B2 }, + { 0x09B6, 0x09B9 }, + { 0x09BD, 0x09BD }, + { 0x09CE, 0x09CE }, + { 0x09DC, 0x09DD }, + { 0x09DF, 0x09E1 }, + { 0x09F0, 0x09F1 }, + { 0x0A05, 0x0A0A }, + { 0x0A0F, 0x0A10 }, + { 0x0A13, 0x0A28 }, + { 0x0A2A, 0x0A30 }, + { 0x0A32, 0x0A33 }, + { 0x0A35, 0x0A36 }, + { 0x0A38, 0x0A39 }, + { 0x0A59, 0x0A5C }, + { 0x0A5E, 0x0A5E }, + { 0x0A72, 0x0A74 }, + { 0x0A85, 0x0A8D }, + { 0x0A8F, 0x0A91 }, + { 0x0A93, 0x0AA8 }, + { 0x0AAA, 0x0AB0 }, + { 0x0AB2, 0x0AB3 }, + { 0x0AB5, 0x0AB9 }, + { 0x0ABD, 0x0ABD }, + { 0x0AD0, 0x0AD0 }, + { 0x0AE0, 0x0AE1 }, + { 0x0B05, 0x0B0C }, + { 0x0B0F, 0x0B10 }, + { 0x0B13, 0x0B28 }, + { 0x0B2A, 0x0B30 }, + { 0x0B32, 0x0B33 }, + { 0x0B35, 0x0B39 }, + { 0x0B3D, 0x0B3D }, + { 0x0B5C, 0x0B5D }, + { 0x0B5F, 0x0B61 }, + { 0x0B71, 0x0B71 }, + { 0x0B83, 0x0B83 }, + { 0x0B85, 0x0B8A }, + { 0x0B8E, 0x0B90 }, + { 0x0B92, 0x0B95 }, + { 0x0B99, 0x0B9A }, + { 0x0B9C, 0x0B9C }, + { 0x0B9E, 0x0B9F }, + { 0x0BA3, 0x0BA4 }, + { 0x0BA8, 0x0BAA }, + { 0x0BAE, 0x0BB9 }, + { 0x0BD0, 0x0BD0 }, + { 0x0C05, 0x0C0C }, + { 0x0C0E, 0x0C10 }, + { 0x0C12, 0x0C28 }, + { 0x0C2A, 0x0C33 }, + { 0x0C35, 0x0C39 }, + { 0x0C3D, 0x0C3D }, + { 0x0C58, 0x0C59 }, + { 0x0C60, 0x0C61 }, + { 0x0C85, 0x0C8C }, + { 0x0C8E, 0x0C90 }, + { 0x0C92, 0x0CA8 }, + { 0x0CAA, 0x0CB3 }, + { 0x0CB5, 0x0CB9 }, + { 0x0CBD, 0x0CBD }, + { 0x0CDE, 0x0CDE }, + { 0x0CE0, 0x0CE1 }, + { 0x0D05, 0x0D0C }, + { 0x0D0E, 0x0D10 }, + { 0x0D12, 0x0D28 }, + { 0x0D2A, 0x0D39 }, + { 0x0D3D, 0x0D3D }, + { 0x0D60, 0x0D61 }, + { 0x0D7A, 0x0D7F }, + { 0x0D85, 0x0D96 }, + { 0x0D9A, 0x0DB1 }, + { 0x0DB3, 0x0DBB }, + { 0x0DBD, 0x0DBD }, + { 0x0DC0, 0x0DC6 }, + { 0x0E01, 0x0E30 }, + { 0x0E32, 0x0E32 }, + { 0x0E40, 0x0E46 }, + { 0x0E81, 0x0E82 }, + { 0x0E84, 0x0E84 }, + { 0x0E87, 0x0E88 }, + { 0x0E8A, 0x0E8A }, + { 0x0E8D, 0x0E8D }, + { 0x0E94, 0x0E97 }, + { 0x0E99, 0x0E9F }, + { 0x0EA1, 0x0EA3 }, + { 0x0EA5, 0x0EA5 }, + { 0x0EA7, 0x0EA7 }, + { 0x0EAA, 0x0EAB }, + { 0x0EAD, 0x0EB0 }, + { 0x0EB2, 0x0EB2 }, + { 0x0EBD, 0x0EBD }, + { 0x0EC0, 0x0EC4 }, + { 0x0EC6, 0x0EC6 }, + { 0x0EDC, 0x0EDD }, + { 0x0F00, 0x0F00 }, + { 0x0F40, 0x0F47 }, + { 0x0F49, 0x0F6C }, + { 0x0F88, 0x0F8B }, + { 0x1000, 0x102A }, + { 0x103F, 0x103F }, + { 0x1050, 0x1055 }, + { 0x105A, 0x105D }, + { 0x1061, 0x1061 }, + { 0x1065, 0x1066 }, + { 0x106E, 0x1070 }, + { 0x1075, 0x1081 }, + { 0x108E, 0x108E }, + { 0x10A0, 0x10C5 }, + { 0x10D0, 0x10FA }, + { 0x10FC, 0x10FC }, + { 0x1100, 0x1159 }, + { 0x115F, 0x11A2 }, + { 0x11A8, 0x11F9 }, + { 0x1200, 0x1248 }, + { 0x124A, 0x124D }, + { 0x1250, 0x1256 }, + { 0x1258, 0x1258 }, + { 0x125A, 0x125D }, + { 0x1260, 0x1288 }, + { 0x128A, 0x128D }, + { 0x1290, 0x12B0 }, + { 0x12B2, 0x12B5 }, + { 0x12B8, 0x12BE }, + { 0x12C0, 0x12C0 }, + { 0x12C2, 0x12C5 }, + { 0x12C8, 0x12D6 }, + { 0x12D8, 0x1310 }, + { 0x1312, 0x1315 }, + { 0x1318, 0x135A }, + { 0x1380, 0x138F }, + { 0x13A0, 0x13F4 }, + { 0x1401, 0x166C }, + { 0x166F, 0x1676 }, + { 0x1681, 0x169A }, + { 0x16A0, 0x16EA }, + { 0x16EE, 0x16F0 }, + { 0x1700, 0x170C }, + { 0x170E, 0x1711 }, + { 0x1720, 0x1731 }, + { 0x1740, 0x1751 }, + { 0x1760, 0x176C }, + { 0x176E, 0x1770 }, + { 0x1780, 0x17B3 }, + { 0x17D7, 0x17D7 }, + { 0x17DC, 0x17DC }, + { 0x1820, 0x1877 }, + { 0x1880, 0x18A8 }, + { 0x18AA, 0x18AA }, + { 0x1900, 0x191C }, + { 0x1950, 0x196D }, + { 0x1970, 0x1974 }, + { 0x1980, 0x19A9 }, + { 0x19C1, 0x19C7 }, + { 0x1A00, 0x1A16 }, + { 0x1B05, 0x1B33 }, + { 0x1B45, 0x1B4B }, + { 0x1B83, 0x1BA0 }, + { 0x1BAE, 0x1BAF }, + { 0x1C00, 0x1C23 }, + { 0x1C4D, 0x1C4F }, + { 0x1C5A, 0x1C7D }, + { 0x1D00, 0x1DBF }, + { 0x1E00, 0x1F15 }, + { 0x1F18, 0x1F1D }, + { 0x1F20, 0x1F45 }, + { 0x1F48, 0x1F4D }, + { 0x1F50, 0x1F57 }, + { 0x1F59, 0x1F59 }, + { 0x1F5B, 0x1F5B }, + { 0x1F5D, 0x1F5D }, + { 0x1F5F, 0x1F7D }, + { 0x1F80, 0x1FB4 }, + { 0x1FB6, 0x1FBC }, + { 0x1FBE, 0x1FBE }, + { 0x1FC2, 0x1FC4 }, + { 0x1FC6, 0x1FCC }, + { 0x1FD0, 0x1FD3 }, + { 0x1FD6, 0x1FDB }, + { 0x1FE0, 0x1FEC }, + { 0x1FF2, 0x1FF4 }, + { 0x1FF6, 0x1FFC }, + { 0x2071, 0x2071 }, + { 0x207F, 0x207F }, + { 0x2090, 0x2094 }, + { 0x2102, 0x2102 }, + { 0x2107, 0x2107 }, + { 0x210A, 0x2113 }, + { 0x2115, 0x2115 }, + { 0x2118, 0x211D }, + { 0x2124, 0x2124 }, + { 0x2126, 0x2126 }, + { 0x2128, 0x2128 }, + { 0x212A, 0x2139 }, + { 0x213C, 0x213F }, + { 0x2145, 0x2149 }, + { 0x214E, 0x214E }, + { 0x2160, 0x2188 }, + { 0x2C00, 0x2C2E }, + { 0x2C30, 0x2C5E }, + { 0x2C60, 0x2C6F }, + { 0x2C71, 0x2C7D }, + { 0x2C80, 0x2CE4 }, + { 0x2D00, 0x2D25 }, + { 0x2D30, 0x2D65 }, + { 0x2D6F, 0x2D6F }, + { 0x2D80, 0x2D96 }, + { 0x2DA0, 0x2DA6 }, + { 0x2DA8, 0x2DAE }, + { 0x2DB0, 0x2DB6 }, + { 0x2DB8, 0x2DBE }, + { 0x2DC0, 0x2DC6 }, + { 0x2DC8, 0x2DCE }, + { 0x2DD0, 0x2DD6 }, + { 0x2DD8, 0x2DDE }, + { 0x3005, 0x3007 }, + { 0x3021, 0x3029 }, + { 0x3031, 0x3035 }, + { 0x3038, 0x303C }, + { 0x3041, 0x3096 }, + { 0x309D, 0x309F }, + { 0x30A1, 0x30FA }, + { 0x30FC, 0x30FF }, + { 0x3105, 0x312D }, + { 0x3131, 0x318E }, + { 0x31A0, 0x31B7 }, + { 0x31F0, 0x31FF }, + { 0x3400, 0x4DB5 }, + { 0x4E00, 0x9FC3 }, + { 0xA000, 0xA48C }, + { 0xA500, 0xA60C }, + { 0xA610, 0xA61F }, + { 0xA62A, 0xA62B }, + { 0xA640, 0xA65F }, + { 0xA662, 0xA66E }, + { 0xA67F, 0xA697 }, + { 0xA717, 0xA71F }, + { 0xA722, 0xA788 }, + { 0xA78B, 0xA78C }, + { 0xA7FB, 0xA801 }, + { 0xA803, 0xA805 }, + { 0xA807, 0xA80A }, + { 0xA80C, 0xA822 }, + { 0xA840, 0xA873 }, + { 0xA882, 0xA8B3 }, + { 0xA90A, 0xA925 }, + { 0xA930, 0xA946 }, + { 0xAA00, 0xAA28 }, + { 0xAA40, 0xAA42 }, + { 0xAA44, 0xAA4B }, + { 0xAC00, 0xD7A3 }, + { 0xF900, 0xFA2D }, + { 0xFA30, 0xFA6A }, + { 0xFA70, 0xFAD9 }, + { 0xFB00, 0xFB06 }, + { 0xFB13, 0xFB17 }, + { 0xFB1D, 0xFB1D }, + { 0xFB1F, 0xFB28 }, + { 0xFB2A, 0xFB36 }, + { 0xFB38, 0xFB3C }, + { 0xFB3E, 0xFB3E }, + { 0xFB40, 0xFB41 }, + { 0xFB43, 0xFB44 }, + { 0xFB46, 0xFBB1 }, + { 0xFBD3, 0xFC5D }, + { 0xFC64, 0xFD3D }, + { 0xFD50, 0xFD8F }, + { 0xFD92, 0xFDC7 }, + { 0xFDF0, 0xFDF9 }, + { 0xFE71, 0xFE71 }, + { 0xFE73, 0xFE73 }, + { 0xFE77, 0xFE77 }, + { 0xFE79, 0xFE79 }, + { 0xFE7B, 0xFE7B }, + { 0xFE7D, 0xFE7D }, + { 0xFE7F, 0xFEFC }, + { 0xFF21, 0xFF3A }, + { 0xFF41, 0xFF5A }, + { 0xFF66, 0xFF9D }, + { 0xFFA0, 0xFFBE }, + { 0xFFC2, 0xFFC7 }, + { 0xFFCA, 0xFFCF }, + { 0xFFD2, 0xFFD7 }, + { 0xFFDA, 0xFFDC }, + { 0x10000, 0x1000B }, + { 0x1000D, 0x10026 }, + { 0x10028, 0x1003A }, + { 0x1003C, 0x1003D }, + { 0x1003F, 0x1004D }, + { 0x10050, 0x1005D }, + { 0x10080, 0x100FA }, + { 0x10140, 0x10174 }, + { 0x10280, 0x1029C }, + { 0x102A0, 0x102D0 }, + { 0x10300, 0x1031E }, + { 0x10330, 0x1034A }, + { 0x10380, 0x1039D }, + { 0x103A0, 0x103C3 }, + { 0x103C8, 0x103CF }, + { 0x103D1, 0x103D5 }, + { 0x10400, 0x1049D }, + { 0x10800, 0x10805 }, + { 0x10808, 0x10808 }, + { 0x1080A, 0x10835 }, + { 0x10837, 0x10838 }, + { 0x1083C, 0x1083C }, + { 0x1083F, 0x1083F }, + { 0x10900, 0x10915 }, + { 0x10920, 0x10939 }, + { 0x10A00, 0x10A00 }, + { 0x10A10, 0x10A13 }, + { 0x10A15, 0x10A17 }, + { 0x10A19, 0x10A33 }, + { 0x12000, 0x1236E }, + { 0x12400, 0x12462 }, + { 0x1D400, 0x1D454 }, + { 0x1D456, 0x1D49C }, + { 0x1D49E, 0x1D49F }, + { 0x1D4A2, 0x1D4A2 }, + { 0x1D4A5, 0x1D4A6 }, + { 0x1D4A9, 0x1D4AC }, + { 0x1D4AE, 0x1D4B9 }, + { 0x1D4BB, 0x1D4BB }, + { 0x1D4BD, 0x1D4C3 }, + { 0x1D4C5, 0x1D505 }, + { 0x1D507, 0x1D50A }, + { 0x1D50D, 0x1D514 }, + { 0x1D516, 0x1D51C }, + { 0x1D51E, 0x1D539 }, + { 0x1D53B, 0x1D53E }, + { 0x1D540, 0x1D544 }, + { 0x1D546, 0x1D546 }, + { 0x1D54A, 0x1D550 }, + { 0x1D552, 0x1D6A5 }, + { 0x1D6A8, 0x1D6C0 }, + { 0x1D6C2, 0x1D6DA }, + { 0x1D6DC, 0x1D6FA }, + { 0x1D6FC, 0x1D714 }, + { 0x1D716, 0x1D734 }, + { 0x1D736, 0x1D74E }, + { 0x1D750, 0x1D76E }, + { 0x1D770, 0x1D788 }, + { 0x1D78A, 0x1D7A8 }, + { 0x1D7AA, 0x1D7C2 }, + { 0x1D7C4, 0x1D7CB }, + { 0x20000, 0x2A6D6 }, + { 0x2F800, 0x2FA1D } + +#define PREDICATE(c) uc_is_property_xid_start (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-pr_zero_width.c b/tests/unictype/test-pr_zero_width.c new file mode 100644 index 00000000..faefd5e4 --- /dev/null +++ b/tests/unictype/test-pr_zero_width.c @@ -0,0 +1,36 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x00AD, 0x00AD }, + { 0x0600, 0x0603 }, + { 0x06DD, 0x06DD }, + { 0x070F, 0x070F }, + { 0x17B4, 0x17B5 }, + { 0x200B, 0x200F }, + { 0x202A, 0x202E }, + { 0x2060, 0x2064 }, + { 0x206A, 0x206F }, + { 0xFEFF, 0xFEFF }, + { 0xFFF9, 0xFFFB }, + { 0x1D173, 0x1D17A }, + { 0xE0001, 0xE0001 }, + { 0xE0020, 0xE007F } + +#define PREDICATE(c) uc_is_property_zero_width (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-predicate-part1.h b/tests/unictype/test-predicate-part1.h new file mode 100644 index 00000000..e81de471 --- /dev/null +++ b/tests/unictype/test-predicate-part1.h @@ -0,0 +1,45 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed for c = 0x%04X\n", \ + __FILE__, __LINE__, c); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) +#define SIZEOF(a) (sizeof(a) / sizeof(a[0])) + +/* Interval of Unicode characters. */ +typedef struct { ucs4_t start; ucs4_t end; } interval_t; + +/* Set of Unicode characters, described as list of intervals, in increasing + order. */ +static const interval_t set[] = + { diff --git a/tests/unictype/test-predicate-part2.h b/tests/unictype/test-predicate-part2.h new file mode 100644 index 00000000..60b7c246 --- /dev/null +++ b/tests/unictype/test-predicate-part2.h @@ -0,0 +1,37 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + + }; + +int +main () +{ + unsigned int c; + size_t i; + + c = 0; + for (i = 0; i < SIZEOF (set); i++) + { + for (; c < set[i].start; c++) + ASSERT (!PREDICATE (c)); + for (; c <= set[i].end; c++) + ASSERT (PREDICATE (c)); + } + for (; c < 0x110000; c++) + ASSERT (!PREDICATE (c)); + + return 0; +} diff --git a/tests/unictype/test-scripts.c b/tests/unictype/test-scripts.c new file mode 100644 index 00000000..4b4b0f92 --- /dev/null +++ b/tests/unictype/test-scripts.c @@ -0,0 +1,86 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test the uc_script function. */ + ASSERT (strcmp (uc_script ('A')->name, "Latin") == 0); + ASSERT (strcmp (uc_script ('%')->name, "Common") == 0); + ASSERT (uc_script (0xE0000) == NULL); + + /* Test the uc_script_byname function. */ + ASSERT (strcmp (uc_script_byname ("Armenian")->name, "Armenian") == 0); + ASSERT (uc_script_byname ("Pekinese") == NULL); + + /* Test the uc_is_script function. */ + ASSERT (uc_is_script ('A', uc_script_byname ("Latin"))); + ASSERT (!uc_is_script ('A', uc_script_byname ("Common"))); + ASSERT (!uc_is_script (0x05DA, uc_script_byname ("Latin"))); + ASSERT (uc_is_script (0x05DA, uc_script_byname ("Hebrew"))); + + { + unsigned int c; + + for (c = 0; c < 0x110000; c++) + { + const uc_script_t *script = uc_script (c); + if (script != NULL) + ASSERT (uc_is_script (c, script)); + } + } + + /* Test the uc_all_scripts function. */ + { + const uc_script_t *scripts; + size_t nscripts; + size_t i; + bool found; + + uc_all_scripts (&scripts, &nscripts); + + found = false; + for (i = 0; i < nscripts; i++) + { + ASSERT (scripts[i].name != NULL); + if (strcmp (scripts[i].name, "Hebrew") == 0) + found = true; + } + ASSERT (found); + } + + return 0; +} diff --git a/tests/unictype/test-sy_c_ident.c b/tests/unictype/test-sy_c_ident.c new file mode 100644 index 00000000..00688e13 --- /dev/null +++ b/tests/unictype/test-sy_c_ident.c @@ -0,0 +1,50 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (uc_c_ident_category ('0') == UC_IDENTIFIER_VALID); + ASSERT (uc_c_ident_category ('X') == UC_IDENTIFIER_START); + ASSERT (uc_c_ident_category ('+') == UC_IDENTIFIER_INVALID); + ASSERT (uc_c_ident_category (0x00B2) == UC_IDENTIFIER_INVALID); + ASSERT (uc_c_ident_category (0x05DA) == UC_IDENTIFIER_START); + + ASSERT (uc_c_ident_category (0x001B) == UC_IDENTIFIER_INVALID); + ASSERT (uc_c_ident_category (0xE0001) == UC_IDENTIFIER_INVALID); + + return 0; +} diff --git a/tests/unictype/test-sy_c_whitespace.c b/tests/unictype/test-sy_c_whitespace.c new file mode 100644 index 00000000..45b9bc0e --- /dev/null +++ b/tests/unictype/test-sy_c_whitespace.c @@ -0,0 +1,24 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0009, 0x000D }, + { 0x0020, 0x0020 } + +#define PREDICATE(c) uc_is_c_whitespace (c) +#include "test-predicate-part2.h" diff --git a/tests/unictype/test-sy_java_ident.c b/tests/unictype/test-sy_java_ident.c new file mode 100644 index 00000000..0a4eb0af --- /dev/null +++ b/tests/unictype/test-sy_java_ident.c @@ -0,0 +1,50 @@ +/* Test the Unicode character type functions. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unictype.h" + +#include +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (uc_java_ident_category ('0') == UC_IDENTIFIER_VALID); + ASSERT (uc_java_ident_category ('X') == UC_IDENTIFIER_START); + ASSERT (uc_java_ident_category ('+') == UC_IDENTIFIER_INVALID); + ASSERT (uc_java_ident_category (0x00B2) == UC_IDENTIFIER_INVALID); + ASSERT (uc_java_ident_category (0x05DA) == UC_IDENTIFIER_START); + + ASSERT (uc_java_ident_category (0x001B) == UC_IDENTIFIER_IGNORABLE); + ASSERT (uc_java_ident_category (0xE0001) == UC_IDENTIFIER_IGNORABLE); + + return 0; +} diff --git a/tests/unictype/test-sy_java_whitespace.c b/tests/unictype/test-sy_java_whitespace.c new file mode 100644 index 00000000..9e2943bf --- /dev/null +++ b/tests/unictype/test-sy_java_whitespace.c @@ -0,0 +1,25 @@ +/* DO NOT EDIT! GENERATED AUTOMATICALLY! */ +/* Test the Unicode character type functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "test-predicate-part1.h" + + { 0x0009, 0x000A }, + { 0x000C, 0x000D }, + { 0x0020, 0x0020 } + +#define PREDICATE(c) uc_is_java_whitespace (c) +#include "test-predicate-part2.h" diff --git a/tests/unilbrk/test-u16-possible-linebreaks.c b/tests/unilbrk/test-u16-possible-linebreaks.c new file mode 100644 index 00000000..4e0ef34b --- /dev/null +++ b/tests/unilbrk/test-u16-possible-linebreaks.c @@ -0,0 +1,96 @@ +/* Test of line breaking of UTF-16 strings. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include "unilbrk.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test case n = 0. */ + u16_possible_linebreaks (NULL, 0, "GB18030", NULL); + + { + static const uint16_t input[61] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u16_possible_linebreaks (input, SIZEOF (input), "GB18030", p); + for (i = 0; i < 61; i++) + { + ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : + i == 5 + || i == 11 || i == 25 + || i == 27 || i == 29 || i == 30 || i == 35 + || i == 45 || i == 51 + || i == 52 || i == 53 || i == 55 || i == 56 + || i == 58 || i == 59 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u16_possible_linebreaks (input, SIZEOF (input), "GB2312", p); + for (i = 0; i < 61; i++) + { + ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : + i == 5 + || i == 11 || i == 25 + || i == 27 || i == 29 || i == 30 || i == 35 + || i == 37 || i == 45 || i == 51 + || i == 52 || i == 53 || i == 55 || i == 56 + || i == 58 || i == 59 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + } + + return 0; +} diff --git a/tests/unilbrk/test-u16-width-linebreaks.c b/tests/unilbrk/test-u16-width-linebreaks.c new file mode 100644 index 00000000..b62d596a --- /dev/null +++ b/tests/unilbrk/test-u16-width-linebreaks.c @@ -0,0 +1,86 @@ +/* Test of line breaking of UTF-16 strings. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include "unilbrk.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test case n = 0. */ + u16_width_linebreaks (NULL, 0, 80, 0, 0, NULL, "GB18030", NULL); + + { + static const uint16_t input[61] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u16_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB18030", p); + for (i = 0; i < 61; i++) + { + ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : + i == 25 || i == 45 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u16_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB2312", p); + for (i = 0; i < 61; i++) + { + ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : + i == 11 || i == 25 || i == 45 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + } + + return 0; +} diff --git a/tests/unilbrk/test-u32-possible-linebreaks.c b/tests/unilbrk/test-u32-possible-linebreaks.c new file mode 100644 index 00000000..94e276a3 --- /dev/null +++ b/tests/unilbrk/test-u32-possible-linebreaks.c @@ -0,0 +1,96 @@ +/* Test of line breaking of UTF-32 strings. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include "unilbrk.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test case n = 0. */ + u32_possible_linebreaks (NULL, 0, "GB18030", NULL); + + { + static const uint32_t input[61] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u32_possible_linebreaks (input, SIZEOF (input), "GB18030", p); + for (i = 0; i < 61; i++) + { + ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : + i == 5 + || i == 11 || i == 25 + || i == 27 || i == 29 || i == 30 || i == 35 + || i == 45 || i == 51 + || i == 52 || i == 53 || i == 55 || i == 56 + || i == 58 || i == 59 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u32_possible_linebreaks (input, SIZEOF (input), "GB2312", p); + for (i = 0; i < 61; i++) + { + ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : + i == 5 + || i == 11 || i == 25 + || i == 27 || i == 29 || i == 30 || i == 35 + || i == 37 || i == 45 || i == 51 + || i == 52 || i == 53 || i == 55 || i == 56 + || i == 58 || i == 59 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + } + + return 0; +} diff --git a/tests/unilbrk/test-u32-width-linebreaks.c b/tests/unilbrk/test-u32-width-linebreaks.c new file mode 100644 index 00000000..f684dee7 --- /dev/null +++ b/tests/unilbrk/test-u32-width-linebreaks.c @@ -0,0 +1,86 @@ +/* Test of line breaking of UTF-32 strings. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include "unilbrk.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test case n = 0. */ + u32_width_linebreaks (NULL, 0, 80, 0, 0, NULL, "GB18030", NULL); + + { + static const uint32_t input[61] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u32_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB18030", p); + for (i = 0; i < 61; i++) + { + ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : + i == 25 || i == 45 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u32_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB2312", p); + for (i = 0; i < 61; i++) + { + ASSERT (p[i] == (i == 60 ? UC_BREAK_MANDATORY : + i == 11 || i == 25 || i == 45 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + } + + return 0; +} diff --git a/tests/unilbrk/test-u8-possible-linebreaks.c b/tests/unilbrk/test-u8-possible-linebreaks.c new file mode 100644 index 00000000..c3a091d6 --- /dev/null +++ b/tests/unilbrk/test-u8-possible-linebreaks.c @@ -0,0 +1,90 @@ +/* Test of line breaking of UTF-8 strings. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include "unilbrk.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test case n = 0. */ + u8_possible_linebreaks (NULL, 0, "GB18030", NULL); + + { + static const uint8_t input[91] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + "Gr\303\274\303\237 Gott. \320\227\320\264\321\200\320\260\320\262\321\201\321\202\320\262\321\203\320\271\321\202\320\265! x=(-b\302\261sqrt(b\302\262-4ac))/(2a) \346\227\245\346\234\254\350\252\236,\344\270\255\346\226\207,\355\225\234\352\270\200\n"; + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u8_possible_linebreaks (input, SIZEOF (input), "GB18030", p); + for (i = 0; i < 91; i++) + { + ASSERT (p[i] == (i == 90 ? UC_BREAK_MANDATORY : + i == 7 + || i == 13 || i == 39 + || i == 41 || i == 43 || i == 44 || i == 50 + || i == 61 || i == 67 + || i == 70 || i == 73 || i == 77 || i == 80 + || i == 84 || i == 87 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u8_possible_linebreaks (input, SIZEOF (input), "GB2312", p); + for (i = 0; i < 91; i++) + { + ASSERT (p[i] == (i == 90 ? UC_BREAK_MANDATORY : + i == 7 + || i == 13 || i == 39 + || i == 41 || i == 43 || i == 44 || i == 50 + || i == 52 || i == 61 || i == 67 + || i == 70 || i == 73 || i == 77 || i == 80 + || i == 84 || i == 87 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + } + + return 0; +} diff --git a/tests/unilbrk/test-u8-width-linebreaks.c b/tests/unilbrk/test-u8-width-linebreaks.c new file mode 100644 index 00000000..6c176f15 --- /dev/null +++ b/tests/unilbrk/test-u8-width-linebreaks.c @@ -0,0 +1,80 @@ +/* Test of line breaking of UTF-8 strings. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include "unilbrk.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test case n = 0. */ + u8_width_linebreaks (NULL, 0, 80, 0, 0, NULL, "GB18030", NULL); + + { + static const uint8_t input[91] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + "Gr\303\274\303\237 Gott. \320\227\320\264\321\200\320\260\320\262\321\201\321\202\320\262\321\203\320\271\321\202\320\265! x=(-b\302\261sqrt(b\302\262-4ac))/(2a) \346\227\245\346\234\254\350\252\236,\344\270\255\346\226\207,\355\225\234\352\270\200\n"; + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u8_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB18030", p); + for (i = 0; i < 91; i++) + { + ASSERT (p[i] == (i == 90 ? UC_BREAK_MANDATORY : + i == 39 || i == 61 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + + { + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u8_width_linebreaks (input, SIZEOF (input), 25, 0, 0, NULL, "GB2312", p); + for (i = 0; i < 91; i++) + { + ASSERT (p[i] == (i == 90 ? UC_BREAK_MANDATORY : + i == 13 || i == 39 || i == 61 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } + } + + return 0; +} diff --git a/tests/unilbrk/test-ulc-possible-linebreaks.c b/tests/unilbrk/test-ulc-possible-linebreaks.c new file mode 100644 index 00000000..fdd73bee --- /dev/null +++ b/tests/unilbrk/test-ulc-possible-linebreaks.c @@ -0,0 +1,66 @@ +/* Test of line breaking of strings. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include "unilbrk.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test case n = 0. */ + ulc_possible_linebreaks (NULL, 0, "GB18030", NULL); + +#if HAVE_ICONV + { + static const char input[36] = + /* "Grüß Gott. x=(-b±sqrt(b²-4ac))/(2a)" */ + "Gr\374\337 Gott. x=(-b\261sqrt(b\262-4ac))/(2a)\n"; + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + ulc_possible_linebreaks (input, SIZEOF (input), "ISO-8859-1", p); + for (i = 0; i < 36; i++) + { + ASSERT (p[i] == (i == 35 ? UC_BREAK_MANDATORY : + i == 5 || i == 11 || i == 13 || i == 15 || i == 16 + || i == 21 || i == 31 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } +#endif + + return 0; +} diff --git a/tests/unilbrk/test-ulc-width-linebreaks.c b/tests/unilbrk/test-ulc-width-linebreaks.c new file mode 100644 index 00000000..c0b23019 --- /dev/null +++ b/tests/unilbrk/test-ulc-width-linebreaks.c @@ -0,0 +1,65 @@ +/* Test of line breaking of strings. + Copyright (C) 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include "unilbrk.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test case n = 0. */ + ulc_width_linebreaks (NULL, 0, 80, 0, 0, NULL, "GB18030", NULL); + +#if HAVE_ICONV + { + static const char input[36] = + /* "Grüß Gott. x=(-b±sqrt(b²-4ac))/(2a)" */ + "Gr\374\337 Gott. x=(-b\261sqrt(b\262-4ac))/(2a)\n"; + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + ulc_width_linebreaks (input, SIZEOF (input), 12, 0, 0, NULL, "ISO-8859-1", p); + for (i = 0; i < 36; i++) + { + ASSERT (p[i] == (i == 35 ? UC_BREAK_MANDATORY : + i == 11 || i == 21 || i == 31 ? UC_BREAK_POSSIBLE : + UC_BREAK_PROHIBITED)); + } + free (p); + } +#endif + + return 0; +} diff --git a/tests/uniname/UnicodeDataNames.txt b/tests/uniname/UnicodeDataNames.txt new file mode 100644 index 00000000..5a4cf1a4 --- /dev/null +++ b/tests/uniname/UnicodeDataNames.txt @@ -0,0 +1,30423 @@ +0020;SPACE;Zs;0;WS;;;;;N;;;;; +0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;; +0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;; +0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;; +0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;; +0026;AMPERSAND;Po;0;ON;;;;;N;;;;; +0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;; +0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;; +0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;; +002A;ASTERISK;Po;0;ON;;;;;N;;;;; +002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;; +002C;COMMA;Po;0;CS;;;;;N;;;;; +002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;; +002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;; +002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;; +0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;; +0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;; +0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;; +0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;; +0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;; +0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;; +0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;; +0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;; +0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;; +0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;; +003A;COLON;Po;0;CS;;;;;N;;;;; +003B;SEMICOLON;Po;0;ON;;;;;N;;;;; +003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;; +003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;; +003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;; +003F;QUESTION MARK;Po;0;ON;;;;;N;;;;; +0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;; +0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061; +0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062; +0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063; +0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064; +0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065; +0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066; +0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067; +0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068; +0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069; +004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A; +004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B; +004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C; +004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D; +004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E; +004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F; +0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070; +0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071; +0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072; +0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073; +0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074; +0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075; +0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076; +0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077; +0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078; +0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079; +005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A; +005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;; +005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;; +005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;; +005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;; +005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;; +0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;; +0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041 +0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042 +0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043 +0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044 +0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045 +0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046 +0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047 +0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048 +0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049 +006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A +006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B +006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C +006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D +006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E +006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F +0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050 +0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051 +0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052 +0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053 +0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054 +0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055 +0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056 +0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057 +0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058 +0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059 +007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A +007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;; +007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;; +007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;; +007E;TILDE;Sm;0;ON;;;;;N;;;;; +00A0;NO-BREAK SPACE;Zs;0;CS; 0020;;;;N;NON-BREAKING SPACE;;;; +00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;; +00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;; +00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; +00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;; +00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;; +00A7;SECTION SIGN;So;0;ON;;;;;N;;;;; +00A8;DIAERESIS;Sk;0;ON; 0020 0308;;;;N;SPACING DIAERESIS;;;; +00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;; +00AA;FEMININE ORDINAL INDICATOR;Ll;0;L; 0061;;;;N;;;;; +00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;; +00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;; +00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;; +00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;; +00AF;MACRON;Sk;0;ON; 0020 0304;;;;N;SPACING MACRON;;;; +00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;; +00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;; +00B2;SUPERSCRIPT TWO;No;0;EN; 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;; +00B3;SUPERSCRIPT THREE;No;0;EN; 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;; +00B4;ACUTE ACCENT;Sk;0;ON; 0020 0301;;;;N;SPACING ACUTE;;;; +00B5;MICRO SIGN;Ll;0;L; 03BC;;;;N;;;039C;;039C +00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;; +00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;; +00B8;CEDILLA;Sk;0;ON; 0020 0327;;;;N;SPACING CEDILLA;;;; +00B9;SUPERSCRIPT ONE;No;0;EN; 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;; +00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L; 006F;;;;N;;;;; +00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;; +00BC;VULGAR FRACTION ONE QUARTER;No;0;ON; 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;; +00BD;VULGAR FRACTION ONE HALF;No;0;ON; 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;; +00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON; 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;; +00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;; +00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0; +00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1; +00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2; +00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3; +00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4; +00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5; +00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6; +00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7; +00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8; +00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9; +00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA; +00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB; +00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC; +00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED; +00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE; +00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF; +00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0; +00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1; +00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2; +00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3; +00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4; +00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5; +00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6; +00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;; +00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8; +00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9; +00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA; +00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB; +00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC; +00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD; +00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE; +00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;; +00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0 +00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1 +00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2 +00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3 +00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4 +00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5 +00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6 +00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7 +00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8 +00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9 +00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA +00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB +00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC +00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD +00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE +00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF +00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0 +00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1 +00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2 +00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3 +00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4 +00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5 +00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6 +00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;; +00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8 +00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9 +00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA +00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB +00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC +00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD +00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE +00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178 +0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101; +0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100 +0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103; +0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102 +0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105; +0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104 +0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107; +0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106 +0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109; +0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108 +010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B; +010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A +010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D; +010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C +010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F; +010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E +0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111; +0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110 +0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113; +0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112 +0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115; +0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114 +0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117; +0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116 +0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119; +0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118 +011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B; +011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A +011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D; +011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C +011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F; +011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E +0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121; +0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120 +0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123; +0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122 +0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125; +0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124 +0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127; +0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126 +0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129; +0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128 +012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B; +012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A +012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D; +012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C +012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F; +012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E +0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069; +0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049 +0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L; 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133; +0133;LATIN SMALL LIGATURE IJ;Ll;0;L; 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132 +0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135; +0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134 +0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137; +0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136 +0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;; +0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A; +013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139 +013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C; +013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B +013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E; +013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D +013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L; 004C 00B7;;;;N;;;;0140; +0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L; 006C 00B7;;;;N;;;013F;;013F +0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142; +0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141 +0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144; +0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143 +0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146; +0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145 +0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148; +0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147 +0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L; 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;; +014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B; +014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A +014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D; +014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C +014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F; +014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E +0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151; +0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150 +0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153; +0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152 +0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155; +0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154 +0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157; +0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156 +0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159; +0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158 +015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B; +015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A +015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D; +015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C +015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F; +015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E +0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161; +0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160 +0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163; +0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162 +0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165; +0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164 +0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167; +0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166 +0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169; +0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168 +016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B; +016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A +016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D; +016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C +016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F; +016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E +0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171; +0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170 +0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173; +0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172 +0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175; +0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174 +0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177; +0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176 +0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF; +0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A; +017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179 +017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C; +017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B +017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E; +017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D +017F;LATIN SMALL LETTER LONG S;Ll;0;L; 0073;;;;N;;;0053;;0053 +0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243 +0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253; +0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183; +0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182 +0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185; +0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184 +0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254; +0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188; +0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187 +0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256; +018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257; +018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C; +018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B +018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;; +018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD; +018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259; +0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B; +0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192; +0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191 +0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260; +0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263; +0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6 +0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269; +0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268; +0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; +0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 +019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D +019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; +019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; +019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; +019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220 +019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275; +01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1; +01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0 +01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3; +01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2 +01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5; +01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4 +01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;*;;0280; +01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8; +01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7 +01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283; +01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;; +01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;; +01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD; +01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC +01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288; +01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0; +01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF +01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A; +01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B; +01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4; +01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3 +01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6; +01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5 +01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292; +01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9; +01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8 +01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;; +01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;; +01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD; +01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC +01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;; +01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7 +01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;; +01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;; +01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;; +01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;; +01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L; 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5 +01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L; 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5 +01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L; 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5 +01C7;LATIN CAPITAL LETTER LJ;Lu;0;L; 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8 +01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L; 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8 +01C9;LATIN SMALL LETTER LJ;Ll;0;L; 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8 +01CA;LATIN CAPITAL LETTER NJ;Lu;0;L; 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB +01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L; 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB +01CC;LATIN SMALL LETTER NJ;Ll;0;L; 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB +01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE; +01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD +01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0; +01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF +01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2; +01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1 +01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4; +01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3 +01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6; +01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5 +01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8; +01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7 +01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA; +01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9 +01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC; +01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB +01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E +01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF; +01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE +01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1; +01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0 +01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3; +01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2 +01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5; +01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4 +01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7; +01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6 +01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9; +01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8 +01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB; +01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA +01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED; +01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC +01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF; +01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE +01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;; +01F1;LATIN CAPITAL LETTER DZ;Lu;0;L; 0044 005A;;;;N;;;;01F3;01F2 +01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L; 0044 007A;;;;N;;;01F1;01F3;01F2 +01F3;LATIN SMALL LETTER DZ;Ll;0;L; 0064 007A;;;;N;;;01F1;;01F2 +01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5; +01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4 +01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195; +01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF; +01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9; +01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8 +01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB; +01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA +01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD; +01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC +01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF; +01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE +0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201; +0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200 +0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203; +0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202 +0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205; +0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204 +0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207; +0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206 +0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209; +0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208 +020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B; +020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A +020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D; +020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C +020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F; +020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E +0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211; +0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210 +0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213; +0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212 +0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215; +0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214 +0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217; +0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216 +0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219; +0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218 +021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B; +021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A +021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D; +021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C +021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F; +021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E +0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E; +0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;; +0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223; +0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222 +0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225; +0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224 +0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227; +0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226 +0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229; +0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228 +022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B; +022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A +022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D; +022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C +022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F; +022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E +0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231; +0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230 +0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233; +0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232 +0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;; +0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;; +0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;; +0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;; +0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;; +0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;; +023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65; +023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C; +023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B +023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A; +023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66; +023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;;; +0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;;; +0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242; +0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241 +0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180; +0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289; +0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C; +0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247; +0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246 +0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249; +0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248 +024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B; +024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A +024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D; +024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C +024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F; +024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E +0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F +0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D +0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;; +0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181 +0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186 +0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;; +0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189 +0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A +0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;; +0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F +025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;; +025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190 +025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;; +025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;; +025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;; +025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;; +0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193 +0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;; +0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;; +0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194 +0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;; +0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;; +0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;; +0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;; +0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197 +0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196 +026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;; +026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62 +026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;; +026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;; +026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;; +026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C +0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;; +0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E +0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D +0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;; +0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;; +0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F +0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;; +0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;; +0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;; +0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;; +027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;; +027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;; +027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;; +027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64 +027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;; +027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; +0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6 +0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;; +0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;; +0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9 +0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;; +0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;; +0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;; +0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;; +0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE +0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244 +028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1 +028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2 +028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245 +028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;; +028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;; +028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;; +0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;; +0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;; +0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 +0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; +0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; +0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; +0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; +0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; +0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;; +0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;; +029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;; +029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;; +029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;; +029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;; +029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;; +029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;; +02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;; +02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;; +02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;; +02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;; +02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;; +02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;; +02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;; +02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;; +02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;; +02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;; +02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;; +02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;; +02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; +02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; +02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;; +02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;; +02B0;MODIFIER LETTER SMALL H;Lm;0;L; 0068;;;;N;;;;; +02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L; 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;; +02B2;MODIFIER LETTER SMALL J;Lm;0;L; 006A;;;;N;;;;; +02B3;MODIFIER LETTER SMALL R;Lm;0;L; 0072;;;;N;;;;; +02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L; 0279;;;;N;;;;; +02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L; 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;; +02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L; 0281;;;;N;;;;; +02B7;MODIFIER LETTER SMALL W;Lm;0;L; 0077;;;;N;;;;; +02B8;MODIFIER LETTER SMALL Y;Lm;0;L; 0079;;;;N;;;;; +02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;; +02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;; +02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;; +02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;; +02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;; +02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;; +02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; +02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;; +02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;; +02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;; +02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;; +02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;; +02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;Mandarin Chinese first tone;;; +02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;; +02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;; +02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;; +02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;; +02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;; +02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;; +02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; +02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;; +02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;; +02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;; +02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;; +02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;; +02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;; +02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;; +02D8;BREVE;Sk;0;ON; 0020 0306;;;;N;SPACING BREVE;;;; +02D9;DOT ABOVE;Sk;0;ON; 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;; +02DA;RING ABOVE;Sk;0;ON; 0020 030A;;;;N;SPACING RING ABOVE;;;; +02DB;OGONEK;Sk;0;ON; 0020 0328;;;;N;SPACING OGONEK;;;; +02DC;SMALL TILDE;Sk;0;ON; 0020 0303;;;;N;SPACING TILDE;;;; +02DD;DOUBLE ACUTE ACCENT;Sk;0;ON; 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;; +02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;; +02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;; +02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L; 0263;;;;N;;;;; +02E1;MODIFIER LETTER SMALL L;Lm;0;L; 006C;;;;N;;;;; +02E2;MODIFIER LETTER SMALL S;Lm;0;L; 0073;;;;N;;;;; +02E3;MODIFIER LETTER SMALL X;Lm;0;L; 0078;;;;N;;;;; +02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L; 0295;;;;N;;;;; +02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; +02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;; +02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;; +02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;; +02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;; +02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; +02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; +02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;; +02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;; +02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;; +02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;; +02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;; +02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; +02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;; +02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;; +02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;; +02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;; +02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;; +02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;; +02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;; +02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;; +02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;; +02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;; +02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;; +0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;; +0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia, Tonos;;; +0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;; +0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;; +0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;; +0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;; +0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;; +0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;; +0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;; +0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;; +030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;; +030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;; +030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;; +030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;; +030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;; +030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;; +0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;; +0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;; +0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;; +0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;; +0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;; +0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;; +0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;; +0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;; +0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;; +0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;; +031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;; +031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;; +031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;; +031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;; +031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;; +031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;; +0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;; +0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;; +0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;; +0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;; +0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;; +0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;; +0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;; +0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;; +0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;; +0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;; +032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;; +032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;; +032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;; +032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;; +032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;; +032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;; +0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;; +0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;; +0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;; +0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;; +0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;; +0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;; +0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;; +0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;; +0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;; +0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;; +033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;; +033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;; +033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;; +033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;; +033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;; +033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;; +0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;; +0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;; +0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;; +0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;; +0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;; +0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399 +0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; +0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; +0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;; +0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;; +034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;; +034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;; +034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;; +034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;; +0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; +0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; +0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;; +0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;; +0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; +0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;; +0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;; +035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; +035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;; +035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;; +035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;; +035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;; +035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;; +0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;; +0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;; +0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;; +0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;; +0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;; +0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;; +0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;; +0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;; +0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;; +0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;; +036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;; +036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;; +036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;; +036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;; +036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;; +036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;; +0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371; +0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370 +0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373; +0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372 +0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;; +0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;; +0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377; +0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376 +037A;GREEK YPOGEGRAMMENI;Lm;0;L; 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;; +037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD +037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE +037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF +037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;; +0384;GREEK TONOS;Sk;0;ON; 0020 0301;;;;N;GREEK SPACING TONOS;;;; +0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;; +0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC; +0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;; +0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD; +0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE; +038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF; +038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC; +038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD; +038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE; +0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;; +0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1; +0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2; +0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3; +0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4; +0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5; +0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6; +0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7; +0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8; +0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9; +039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA; +039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB; +039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC; +039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD; +039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE; +039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF; +03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0; +03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1; +03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3; +03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4; +03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5; +03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6; +03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7; +03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8; +03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9; +03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA; +03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB; +03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386 +03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388 +03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389 +03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A +03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;; +03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391 +03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392 +03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393 +03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394 +03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395 +03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396 +03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397 +03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398 +03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399 +03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A +03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B +03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C +03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D +03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E +03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F +03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0 +03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1 +03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 +03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3 +03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4 +03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5 +03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6 +03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7 +03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8 +03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9 +03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA +03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB +03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C +03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E +03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F +03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7; +03D0;GREEK BETA SYMBOL;Ll;0;L; 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392 +03D1;GREEK THETA SYMBOL;Ll;0;L; 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 +03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L; 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;; +03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;; +03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;; +03D5;GREEK PHI SYMBOL;Ll;0;L; 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6 +03D6;GREEK PI SYMBOL;Ll;0;L; 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0 +03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF +03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;*;;03D9; +03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;*;03D8;;03D8 +03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB; +03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA +03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD; +03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC +03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF; +03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE +03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1; +03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0 +03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3; +03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2 +03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5; +03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4 +03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7; +03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6 +03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9; +03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8 +03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB; +03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA +03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED; +03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC +03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF; +03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE +03F0;GREEK KAPPA SYMBOL;Ll;0;L; 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A +03F1;GREEK RHO SYMBOL;Ll;0;L; 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1 +03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L; 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9 +03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;; +03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L; 0398;;;;N;;;;03B8; +03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L; 03B5;;;;N;;;0395;;0395 +03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;; +03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8; +03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7 +03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L; 03A3;;;;N;;;;03F2; +03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB; +03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA +03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;; +03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B; +03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C; +03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D; +0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450; +0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451; +0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452; +0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453; +0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454; +0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455; +0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456; +0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457; +0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458; +0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459; +040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A; +040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B; +040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C; +040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D; +040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E; +040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F; +0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430; +0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431; +0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432; +0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433; +0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434; +0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435; +0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436; +0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437; +0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438; +0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439; +041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A; +041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B; +041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C; +041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D; +041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E; +041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F; +0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440; +0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441; +0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442; +0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443; +0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444; +0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445; +0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446; +0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447; +0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448; +0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449; +042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A; +042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B; +042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C; +042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D; +042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E; +042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F; +0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410 +0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411 +0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412 +0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413 +0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414 +0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415 +0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416 +0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417 +0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418 +0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419 +043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A +043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B +043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C +043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D +043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E +043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F +0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420 +0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421 +0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422 +0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423 +0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424 +0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425 +0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426 +0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427 +0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428 +0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429 +044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A +044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B +044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C +044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D +044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E +044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F +0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400 +0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401 +0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402 +0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403 +0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404 +0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405 +0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406 +0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407 +0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408 +0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409 +045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A +045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B +045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C +045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D +045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E +045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F +0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461; +0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460 +0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463; +0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462 +0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465; +0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464 +0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467; +0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466 +0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469; +0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468 +046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B; +046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A +046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D; +046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C +046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F; +046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E +0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471; +0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470 +0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473; +0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472 +0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475; +0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474 +0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477; +0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476 +0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479; +0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478 +047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B; +047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A +047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D; +047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C +047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F; +047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E +0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481; +0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480 +0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;; +0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;; +0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;; +0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;; +0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;; +0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;; +0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;; +0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B; +048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A +048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D; +048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C +048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F; +048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E +0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491; +0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490 +0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493; +0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492 +0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495; +0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494 +0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497; +0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496 +0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499; +0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498 +049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B; +049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A +049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D; +049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C +049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F; +049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E +04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1; +04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0 +04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3; +04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2 +04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5; +04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4 +04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7; +04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6 +04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9; +04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8 +04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB; +04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA +04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD; +04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC +04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF; +04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE +04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1; +04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0 +04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3; +04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2 +04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5; +04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4 +04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7; +04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6 +04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9; +04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8 +04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB; +04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA +04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD; +04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC +04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF; +04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE +04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF; +04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2; +04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1 +04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4; +04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3 +04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6; +04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5 +04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8; +04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7 +04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA; +04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9 +04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC; +04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB +04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE; +04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD +04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0 +04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1; +04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0 +04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3; +04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2 +04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5; +04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4 +04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7; +04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6 +04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9; +04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8 +04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB; +04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA +04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD; +04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC +04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF; +04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE +04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1; +04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0 +04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3; +04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2 +04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5; +04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4 +04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7; +04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6 +04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9; +04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8 +04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB; +04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA +04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED; +04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC +04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF; +04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE +04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1; +04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0 +04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3; +04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2 +04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5; +04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4 +04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7; +04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6 +04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9; +04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8 +04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB; +04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA +04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD; +04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC +04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF; +04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE +0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501; +0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500 +0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503; +0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502 +0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505; +0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504 +0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507; +0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506 +0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509; +0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508 +050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B; +050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A +050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D; +050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C +050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F; +050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E +0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511; +0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510 +0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513; +0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512 +0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515; +0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514 +0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517; +0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516 +0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519; +0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518 +051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B; +051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A +051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D; +051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C +051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F; +051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E +0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521; +0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520 +0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523; +0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522 +0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561; +0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562; +0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563; +0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564; +0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565; +0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566; +0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567; +0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568; +0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569; +053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A; +053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B; +053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C; +053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D; +053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E; +053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F; +0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570; +0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571; +0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572; +0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573; +0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574; +0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575; +0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576; +0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577; +0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578; +0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579; +054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A; +054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B; +054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C; +054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D; +054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E; +054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F; +0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580; +0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581; +0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582; +0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583; +0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584; +0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585; +0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586; +0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;; +055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;; +055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;; +055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;; +055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;; +055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;; +055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;; +0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531 +0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532 +0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533 +0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534 +0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535 +0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536 +0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537 +0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538 +0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539 +056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A +056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B +056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C +056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D +056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E +056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F +0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540 +0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541 +0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542 +0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543 +0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544 +0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545 +0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546 +0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547 +0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548 +0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549 +057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A +057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B +057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C +057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D +057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E +057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F +0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550 +0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551 +0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552 +0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553 +0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554 +0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555 +0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556 +0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L; 0565 0582;;;;N;;;;; +0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;; +058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;; +0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;; +0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;; +0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;; +0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;; +0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;; +0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;; +0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;; +0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;; +0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;; +059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;; +059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;; +059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;; +059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;; +059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;; +059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;; +05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;; +05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;; +05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;; +05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;; +05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;; +05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;; +05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;; +05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;; +05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;; +05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;; +05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;; +05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;; +05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;; +05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;; +05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;; +05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;; +05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;; +05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;; +05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;; +05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;; +05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;; +05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;; +05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;; +05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;; +05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;; +05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;; +05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;; +05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;; +05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;; +05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;; +05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;; +05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;; +05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;; +05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;; +05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;; +05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;; +05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;; +05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;; +05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;; +05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;; +05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;; +05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;; +05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;; +05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;; +05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;; +05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;; +05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;; +05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;; +05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;; +05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;; +05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;; +05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;; +05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;; +05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;; +05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;; +05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;; +05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;; +05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;; +05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;; +05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;; +05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;; +05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;; +05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;; +05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;; +05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;; +05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;; +05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;; +05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;; +05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;; +05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;; +05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;; +05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;; +0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;; +0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;; +0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;; +0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;; +0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;; +0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;; +0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;; +0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;; +060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; +060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;; +060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;; +060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;; +060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;; +060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;; +0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;; +0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;; +0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;; +0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;; +0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;; +0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;; +0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;; +0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;; +0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;; +0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;; +061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;; +061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; +061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; +061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; +0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;; +0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;; +0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;; +0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;; +0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;; +0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;; +0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;; +0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;; +0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;; +062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;; +062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;; +062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;; +062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;; +062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;; +062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;; +0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;; +0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;; +0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; +0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;; +0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;; +0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;; +0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;; +0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;; +0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;; +0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;; +063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;; +063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;; +0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;; +0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;; +0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;; +0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;; +0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;; +0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;; +0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;; +0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;; +0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;; +064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;; +064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;; +064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;; +064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;; +064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;; +064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;; +0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;; +0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;; +0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;; +0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;; +0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;; +0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;; +0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;; +0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;; +0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;; +0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;; +065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; +065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; +065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; +065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;; +065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;; +0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; +0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; +0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; +0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;; +0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;; +0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;; +0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;; +0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;; +0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;; +0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;; +066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;; +066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;; +066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;; +066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;; +066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;; +066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;; +0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;; +0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;; +0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;; +0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;; +0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;; +0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL; 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;; +0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL; 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;; +0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL; 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;; +0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL; 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;; +0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;; +067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;; +067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;; +067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;; +067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;; +067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;; +067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;; +0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;; +0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;; +0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;; +0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;; +0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;; +0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;; +0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;; +0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;; +0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;; +0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;; +068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; +068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;; +068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;; +068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;; +068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;; +0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;; +0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;; +0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;; +0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;; +0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;; +0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;; +0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;; +0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;; +0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;; +069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;; +06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;; +06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;; +06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;; +06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;; +06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;; +06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;; +06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;; +06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;; +06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;; +06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;; +06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;; +06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;; +06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;; +06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;; +06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;; +06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;; +06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;; +06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;; +06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;; +06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;; +06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;; +06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;; +06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;; +06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;; +06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;; +06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;; +06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;; +06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;; +06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;; +06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;; +06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;; +06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;; +06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;; +06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;; +06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;; +06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;; +06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;; +06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;; +06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;; +06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;; +06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; +06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;; +06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;; +06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;; +06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;; +06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;; +06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;; +06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;; +06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;; +06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;; +06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;; +06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;; +06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;; +06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;; +06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;; +06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;; +06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;; +06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;; +06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;; +06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;; +06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;; +06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;; +06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;; +06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;; +06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;; +06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;; +06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;; +06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;; +06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;; +06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;; +06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;; +06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;; +06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;; +06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;; +06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;; +06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;; +06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;; +0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;; +0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;; +0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;; +0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;; +0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;; +0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; +0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; +0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;; +0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;; +070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;; +070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;; +070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;; +070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;; +070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;; +0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;; +0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;; +0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;; +0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;; +0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;; +0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;; +0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;; +0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;; +0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;; +0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;; +071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;; +071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;; +071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;; +071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;; +071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;; +071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;; +0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;; +0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;; +0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;; +0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;; +0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;; +0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;; +0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;; +0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;; +0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;; +0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;; +072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;; +072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;; +072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;; +072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;; +072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;; +072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;; +0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;; +0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;; +0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;; +0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;; +0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;; +0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;; +0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;; +0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;; +0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;; +0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;; +073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;; +073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;; +073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;; +073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;; +073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;; +073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;; +0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;; +0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;; +0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;; +0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; +0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;; +0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; +0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;; +0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;; +0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;; +0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;; +074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;; +074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;; +074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;; +074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;; +0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;; +0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; +0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; +075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;; +075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;; +075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;; +0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;; +076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;; +076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; +076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;; +076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; +0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; +0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; +0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;; +0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; +0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; +077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;; +077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;; +0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;; +0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;; +0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;; +0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;; +0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;; +0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;; +0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;; +0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;; +0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;; +078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;; +078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;; +078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;; +078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;; +078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;; +078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;; +0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;; +0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;; +0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;; +0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;; +0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;; +0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;; +0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;; +0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;; +0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;; +0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;; +079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;; +079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;; +079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;; +079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;; +079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;; +079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;; +07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;; +07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;; +07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;; +07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;; +07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;; +07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;; +07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;; +07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;; +07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;; +07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;; +07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;; +07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;; +07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;; +07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;; +07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;; +07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;; +07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;; +07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;; +07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; +07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; +07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; +07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;; +07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;; +07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;; +07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;; +07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;; +07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;; +07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;; +07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;; +07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;; +07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;; +07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;; +07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;; +07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;; +07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;; +07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;; +07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;; +07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;; +07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;; +07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;; +07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;; +07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;; +07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;; +07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;; +07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;; +07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;; +07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;; +07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;; +07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;; +07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;; +07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;; +07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;; +07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;; +07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;; +07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;; +07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;; +07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;; +07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;; +07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;; +07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;; +07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;; +07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;; +07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;; +07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;; +07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;; +07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;; +07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;; +07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;; +07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;; +07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; +07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; +07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;; +07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;; +07F8;NKO COMMA;Po;0;ON;;;;;N;;;;; +07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;; +0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;; +0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;; +0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;; +0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;; +0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;; +0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;; +090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;; +090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;; +090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;; +090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;; +0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;; +0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;; +0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;; +0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;; +0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;; +0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;; +0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;; +0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;; +0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;; +0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;; +091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;; +091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;; +091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;; +091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;; +091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;; +091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;; +0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;; +0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;; +0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;; +0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;; +0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;; +0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;; +0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;; +0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;; +0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;; +0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;; +092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;; +092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;; +092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;; +092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;; +092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;; +092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;; +0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;; +0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;; +0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;; +0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;; +0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;; +0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;; +0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;; +0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;; +0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;; +0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;; +093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; +0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;; +0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; +094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;; +094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;; +0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;; +0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;; +0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; +0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; +0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;; +0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;; +095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;; +095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;; +095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;; +095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;; +095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;; +095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;; +0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;; +0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; +0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;; +0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;; +097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;; +097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;; +097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; +097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;; +097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;; +0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;; +0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;; +0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;; +0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;; +0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;; +098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;; +098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;; +0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;; +0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;; +0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;; +0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;; +0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;; +0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;; +0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;; +0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;; +099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;; +099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;; +099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;; +099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;; +099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;; +099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;; +09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;; +09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;; +09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;; +09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;; +09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;; +09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;; +09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;; +09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;; +09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;; +09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;; +09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;; +09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;; +09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;; +09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;; +09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;; +09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;; +09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;; +09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;; +09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;; +09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;; +09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;; +09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;; +09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;; +09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;; +09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;; +09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;; +09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;; +09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;; +09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;; +09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;; +09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; +09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;; +09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;; +09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;; +09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;; +09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;; +09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;; +09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;; +0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;; +0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;; +0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;; +0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;; +0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;; +0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;; +0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;; +0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;; +0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;; +0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;; +0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;; +0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;; +0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;; +0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;; +0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;; +0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;; +0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;; +0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;; +0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;; +0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;; +0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;; +0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;; +0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;; +0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;; +0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;; +0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;; +0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;; +0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;; +0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;; +0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;; +0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;; +0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;; +0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;; +0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;; +0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;; +0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;; +0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;; +0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;; +0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;; +0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;; +0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;; +0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;; +0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;; +0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;; +0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;; +0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; +0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; +0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;; +0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;; +0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;; +0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;; +0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;; +0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;; +0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;; +0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;; +0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;; +0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;; +0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;; +0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;; +0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;; +0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;; +0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;; +0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;; +0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;; +0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;; +0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;; +0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;; +0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;; +0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;; +0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;; +0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;; +0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;; +0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;; +0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;; +0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;; +0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;; +0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;; +0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;; +0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;; +0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;; +0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;; +0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;; +0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;; +0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;; +0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;; +0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;; +0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;; +0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;; +0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;; +0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;; +0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;; +0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;; +0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;; +0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;; +0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;; +0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;; +0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;; +0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;; +0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;; +0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;; +0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;; +0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;; +0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;; +0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;; +0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;; +0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;; +0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;; +0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;; +0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;; +0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; +0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;; +0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;; +0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;; +0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;; +0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;; +0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;; +0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;; +0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;; +0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;; +0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;; +0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;; +0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;; +0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;; +0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;; +0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;; +0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;; +0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;; +0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;; +0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;; +0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;; +0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;; +0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;; +0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;; +0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;; +0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;; +0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;; +0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;; +0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;; +0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;; +0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;; +0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;; +0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;; +0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;; +0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;; +0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;; +0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;; +0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;; +0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;; +0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;; +0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;; +0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;; +0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;; +0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;; +0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;; +0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;; +0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;; +0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;; +0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;; +0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;; +0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;; +0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;; +0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;; +0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;; +0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;; +0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;; +0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;; +0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;; +0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;; +0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;; +0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;; +0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;; +0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;; +0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;; +0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;; +0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;; +0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;; +0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;; +0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;; +0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;; +0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;; +0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;; +0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;; +0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;; +0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;; +0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;; +0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;; +0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;; +0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;; +0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;; +0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;; +0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;; +0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;; +0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;; +0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;; +0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;; +0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;; +0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;; +0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;; +0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;; +0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;; +0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;; +0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;; +0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;; +0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;; +0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; +0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; +0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;Naal;;; +0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;Maatham;;; +0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;Varudam;;; +0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;Patru;;; +0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;Varavu;;; +0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;Merpadi;;; +0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;Rupai;;; +0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;Enn;;; +0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;; +0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;; +0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;; +0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;; +0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;; +0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;; +0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;; +0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;; +0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;; +0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;; +0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;; +0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;; +0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;; +0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;; +0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;; +0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;; +0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;; +0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;; +0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;; +0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;; +0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;; +0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;; +0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;; +0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;; +0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;; +0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;; +0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;; +0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;; +0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;; +0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;; +0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;; +0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;; +0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;; +0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;; +0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;; +0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;; +0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;; +0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;; +0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;; +0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;; +0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;; +0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;; +0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;; +0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;; +0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;; +0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; +0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; +0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; +0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; +0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;; +0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;; +0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; +0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;; +0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;; +0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; +0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; +0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;; +0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;; +0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;; +0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;; +0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;; +0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;; +0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;; +0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;; +0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;; +0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;; +0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;; +0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;; +0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;; +0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;; +0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;; +0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;; +0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;; +0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;; +0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;; +0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;; +0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;; +0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;; +0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;; +0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;; +0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;; +0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;; +0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;; +0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;; +0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;; +0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;; +0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;; +0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;; +0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;; +0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;; +0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;; +0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;; +0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;; +0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;; +0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;; +0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;; +0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;; +0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;; +0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;; +0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;; +0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;; +0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;; +0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;; +0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;; +0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;; +0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;; +0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;; +0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;; +0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;; +0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;; +0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;; +0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;; +0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;; +0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;; +0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;; +0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;; +0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;; +0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;; +0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; +0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0CF1;KANNADA SIGN JIHVAMULIYA;So;0;ON;;;;;N;;;;; +0CF2;KANNADA SIGN UPADHMANIYA;So;0;ON;;;;;N;;;;; +0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; +0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;; +0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;; +0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;; +0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;; +0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;; +0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;; +0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;; +0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;; +0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;; +0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;; +0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;; +0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;; +0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;; +0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;; +0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;; +0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;; +0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;; +0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;; +0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;; +0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;; +0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;; +0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;; +0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;; +0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;; +0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;; +0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;; +0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;; +0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;; +0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;; +0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;; +0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;; +0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;; +0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;; +0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;; +0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;; +0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;; +0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;; +0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;; +0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;; +0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;; +0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;; +0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;; +0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;; +0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;; +0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;; +0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;; +0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;; +0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;; +0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; +0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; +0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;; +0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;; +0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;; +0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;; +0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; +0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; +0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; +0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; +0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; +0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;; +0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;; +0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;; +0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;; +0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;; +0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;; +0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;; +0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;; +0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;; +0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;; +0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;; +0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;; +0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;; +0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;; +0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;; +0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;; +0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;; +0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;; +0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;; +0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;; +0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;; +0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;; +0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;; +0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;; +0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;; +0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;; +0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;; +0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; +0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;; +0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; +0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;; +0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; +0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;; +0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; +0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;; +0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; +0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;; +0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;; +0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;; +0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;; +0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; +0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;; +0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; +0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;; +0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;; +0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;; +0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; +0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;; +0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; +0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;; +0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;; +0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;; +0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; +0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;; +0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; +0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;; +0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;; +0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;; +0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;; +0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;; +0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;; +0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;; +0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;; +0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;; +0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;; +0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;; +0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;; +0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;; +0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;; +0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;; +0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;; +0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;; +0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;; +0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;; +0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;; +0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;; +0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;; +0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;; +0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;; +0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;; +0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;; +0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;; +0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;; +0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;; +0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;; +0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;; +0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;; +0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;; +0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;; +0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;; +0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;; +0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;; +0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;; +0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;; +0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;; +0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;; +0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;; +0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;; +0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;; +0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;; +0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;; +0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;; +0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;; +0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;; +0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;; +0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;; +0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;; +0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;; +0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;; +0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;; +0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;; +0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;; +0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;; +0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;; +0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;; +0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;; +0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;; +0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;; +0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;; +0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;; +0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;; +0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;; +0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;; +0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;; +0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;; +0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;; +0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;; +0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;; +0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;; +0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;; +0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;; +0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;; +0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;; +0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;; +0E33;THAI CHARACTER SARA AM;Lo;0;L; 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;; +0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;; +0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;; +0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;; +0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;; +0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;; +0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;; +0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;; +0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;; +0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;; +0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;; +0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;; +0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;; +0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;; +0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;; +0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;; +0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;; +0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;; +0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;; +0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;; +0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;; +0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;; +0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;; +0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;; +0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;; +0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;; +0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;; +0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;; +0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;; +0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;; +0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;; +0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;; +0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;; +0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;; +0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;; +0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;; +0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;; +0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;; +0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;; +0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;; +0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;; +0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;; +0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;; +0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;; +0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;; +0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;; +0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;; +0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;; +0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;; +0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;; +0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;; +0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;; +0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;; +0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;; +0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;; +0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;; +0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;; +0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;; +0EB3;LAO VOWEL SIGN AM;Lo;0;L; 0ECD 0EB2;;;;N;;;;; +0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; +0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; +0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;; +0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;; +0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;; +0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;; +0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;; +0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;; +0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;; +0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;; +0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;; +0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;; +0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;; +0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;; +0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;; +0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;; +0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;; +0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;; +0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;; +0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0EDC;LAO HO NO;Lo;0;L; 0EAB 0E99;;;;N;;;;; +0EDD;LAO HO MO;Lo;0;L; 0EAB 0EA1;;;;N;;;;; +0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;; +0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;; +0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;; +0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;; +0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;; +0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;; +0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;; +0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;; +0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;; +0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;; +0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;; +0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;; +0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L; 0F0B;;;;N;;tsek tar;;; +0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;; +0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;; +0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;; +0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;; +0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;; +0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;; +0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;; +0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;; +0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;; +0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;; +0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;; +0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;; +0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;; +0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;; +0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;; +0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;; +0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;; +0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;; +0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;; +0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;; +0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;; +0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;; +0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;; +0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;; +0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;; +0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;; +0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;; +0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;; +0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;; +0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;; +0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;; +0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;; +0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;; +0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;; +0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;; +0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;gug ta yun;;; +0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;gug ta ye;;; +0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;ang kang yun;;; +0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;ang kang ye;;; +0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;; +0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;; +0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;; +0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;; +0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;; +0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;; +0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;; +0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;; +0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;; +0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;; +0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;; +0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;; +0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;; +0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;; +0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;; +0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;; +0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;; +0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;; +0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;; +0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;; +0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;; +0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;; +0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;; +0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;; +0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;; +0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;; +0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;; +0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;; +0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;; +0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;; +0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;; +0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;; +0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;; +0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;; +0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;; +0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;; +0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;; +0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;; +0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;; +0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;; +0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;; +0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;; +0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;; +0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;; +0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;; +0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;; +0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;; +0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;; +0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;; +0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;; +0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;; +0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;; +0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM; 0FB2 0F81;;;;N;;;;; +0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;; +0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM; 0FB3 0F81;;;;N;;;;; +0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;; +0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;; +0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;; +0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;; +0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;; +0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;; +0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;; +0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;; +0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;; +0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;; +0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;; +0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;; +0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;; +0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;; +0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;; +0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;; +0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;; +0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;; +0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;; +0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;; +0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;; +0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;; +0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;; +0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;; +0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;; +0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;; +0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;; +0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;; +0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;; +0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;; +0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;; +0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;; +0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;; +0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;; +0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;; +0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;; +0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;; +0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;; +0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;; +0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;; +0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;; +0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;; +0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;; +0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;; +0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;; +0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;; +0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;; +0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;; +0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;; +0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;; +0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;; +0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;; +0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;; +0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;; +0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;; +0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;; +0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;; +0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;; +0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;; +0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;; +0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;; +0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;; +0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;; +0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;; +0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;; +0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;; +0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;; +0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;; +0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;; +0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;; +0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;; +0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;; +0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;; +0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;; +0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;; +0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;; +0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;; +0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;dena deka;;; +0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;; +0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;ka shog gi go gyen;;; +0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;nyam yig gi go gyen;;; +0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;nyi tsek;;; +0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;da nying yik go dun ma;;; +0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;da nying yik go kab ma;;; +1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;; +1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;; +1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;; +1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;; +1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;; +1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;; +1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;; +1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;; +1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;; +1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;; +100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;; +100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;; +100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;; +100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;; +100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;; +100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;; +1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;; +1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;; +1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;; +1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;; +1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;; +1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;; +1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;; +1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;; +1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;; +1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;; +101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;; +101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;; +101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;; +101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;; +101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;; +101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;; +1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;; +1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;; +1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;; +1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;; +1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;; +1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;; +1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;; +1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;; +1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;; +1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;; +102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;; +102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;; +102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;; +1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;; +1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;; +1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;; +1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;; +1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;; +103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;; +103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; +103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; +103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;; +103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;; +1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;; +104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;; +104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;; +104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;; +104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;; +104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;; +1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;; +1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;; +1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; +105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;; +105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;; +105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;; +105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;; +105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;; +105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;; +1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;; +1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;; +1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;; +1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;; +1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;; +1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;; +1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;; +1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;; +1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;; +1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;; +106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;; +106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;; +106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;; +106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;; +106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;; +106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;; +1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;; +1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;; +1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;; +1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;; +1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;; +1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;; +1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;; +1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;; +1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;; +1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;; +107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;; +107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;; +107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;; +107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;; +107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;; +107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;; +1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;; +1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;; +1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; +1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;; +1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;; +1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;; +1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;; +1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;; +1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;; +1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;; +108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;; +108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;; +108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;; +108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;; +108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;; +108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;; +1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;; +109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;; +10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;2D00; +10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;2D01; +10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;2D02; +10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;2D03; +10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;2D04; +10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;2D05; +10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;2D06; +10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07; +10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;2D08; +10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;2D09; +10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;2D0A; +10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;2D0B; +10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;2D0C; +10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;2D0D; +10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;2D0E; +10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;2D0F; +10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;2D10; +10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;2D11; +10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;2D12; +10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;2D13; +10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;2D14; +10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;2D15; +10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;2D16; +10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;2D17; +10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;2D18; +10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;2D19; +10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;2D1A; +10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;2D1B; +10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;2D1C; +10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;2D1D; +10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;2D1E; +10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;2D1F; +10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;2D20; +10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;2D21; +10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;2D22; +10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;2D23; +10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;2D24; +10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;2D25; +10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;; +10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;; +10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;; +10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;; +10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;; +10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;; +10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;; +10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;; +10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;; +10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;; +10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;; +10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;; +10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;; +10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;; +10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;; +10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;; +10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;; +10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;; +10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;; +10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;; +10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;; +10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;; +10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;; +10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;; +10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;; +10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;; +10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;; +10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;; +10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;; +10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;; +10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;; +10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;; +10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;; +10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;; +10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;; +10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;; +10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;; +10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;; +10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;; +10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;; +10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;; +10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;; +10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;; +10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; +10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L; 10DC;;;;N;;;;; +1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; +1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; +1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; +1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;; +1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;; +1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;; +1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;; +1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;; +1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;; +1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;; +110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;; +110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;; +110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;; +110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;; +110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;; +110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;; +1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;; +1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;; +1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;; +1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; +1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;; +1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; +1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;; +1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; +1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; +1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; +111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;; +111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;; +111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; +111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; +111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; +111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;; +1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;; +1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;; +1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; +1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;; +1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;; +1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;; +1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;; +1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;; +1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;; +112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; +112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;; +112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;; +112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; +1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; +1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;; +1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; +1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;; +1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;; +1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;; +1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;; +1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;; +1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;; +1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;; +113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;; +113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;; +113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;; +113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; +113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;; +113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;; +1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;; +1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; +1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;; +1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;; +1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;; +1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;; +1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; +1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; +1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;; +1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;; +114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;; +114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;; +114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; +114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;; +114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;; +114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; +1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;; +1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;; +1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;; +1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;; +1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;; +1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;; +1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; +1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; +1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;; +1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; +115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;; +1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;; +1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;; +1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;; +1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;; +1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;; +1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;; +1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;; +1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;; +1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;; +1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;; +116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;; +116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;; +116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;; +116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;; +116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;; +116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;; +1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;; +1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;; +1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;; +1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;; +1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;; +1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;; +1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;; +1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;; +1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;; +1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;; +117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;; +117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;; +117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;; +117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;; +117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;; +117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;; +1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;; +1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;; +1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;; +1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;; +1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;; +1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;; +1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;; +1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;; +1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;; +1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;; +118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;; +118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;; +118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;; +118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;; +118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;; +118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;; +1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;; +1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;; +1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;; +1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;; +1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;; +1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;; +1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;; +1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;; +1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;; +1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;; +119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;; +119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;; +119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;; +119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;; +119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;; +119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;; +11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;; +11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;; +11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;; +11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; +11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; +11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;; +11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; +11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;; +11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;; +11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;; +11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;; +11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;; +11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;; +11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;; +11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;; +11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;; +11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;; +11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;; +11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;; +11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;; +11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;; +11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;; +11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;; +11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;; +11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;; +11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;; +11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;; +11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;; +11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;; +11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;; +11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;; +11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;; +11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;; +11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;; +11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;; +11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;; +11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;; +11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;; +11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;; +11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;; +11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;; +11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;; +11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;; +11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; +11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;; +11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;; +11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; +11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;; +11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;; +11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;; +11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;; +11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;; +11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;; +11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;; +11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;; +11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;; +11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;; +11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;; +11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;; +11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;; +11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;; +11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;; +11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;; +11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;; +11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;; +11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;; +11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;; +11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;; +11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;; +11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;; +11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;; +11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;; +11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;; +11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;; +11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;; +11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;; +11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;; +11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;; +11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;; +11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;; +11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;; +11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;; +11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;; +1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;; +1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;; +1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;; +1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;; +1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;; +1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;; +1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;; +1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;; +1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;; +1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;; +120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;; +120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;; +120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;; +120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;; +120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;; +120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;; +1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;; +1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;; +1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;; +1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;; +1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;; +1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;; +1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;; +1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;; +1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;; +1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;; +121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;; +121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;; +121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;; +121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;; +121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;; +121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;; +1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;; +1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;; +1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;; +1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;; +1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;; +1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;; +1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;; +1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;; +1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;; +1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;; +122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;; +122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;; +122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;; +122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;; +122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;; +122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;; +1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;; +1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;; +1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;; +1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;; +1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;; +1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;; +1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;; +1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;; +1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;; +1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;; +123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;; +123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;; +123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; +123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;; +123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;; +123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;; +1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;; +1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;; +1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;; +1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;; +1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;; +1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;; +1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;; +1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;; +1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;; +124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;; +124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;; +124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;; +124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;; +1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;; +1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;; +1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;; +1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;; +1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;; +1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;; +1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;; +1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;; +125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;; +125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;; +125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;; +125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;; +1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;; +1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;; +1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;; +1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;; +1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;; +1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;; +1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;; +1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;; +1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;; +1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;; +126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;; +126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;; +126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;; +126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;; +126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;; +126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;; +1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;; +1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;; +1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;; +1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;; +1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;; +1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;; +1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;; +1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;; +1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;; +1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;; +127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;; +127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;; +127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;; +127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;; +127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;; +127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;; +1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;; +1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;; +1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;; +1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;; +1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;; +1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;; +1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;; +1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;; +1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;; +128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;; +128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;; +128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;; +128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;; +1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;; +1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;; +1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;; +1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;; +1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;; +1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;; +1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;; +1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;; +1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;; +1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;; +129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;; +129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;; +129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; +129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;; +129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;; +129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;; +12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;; +12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;; +12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;; +12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;; +12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;; +12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;; +12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;; +12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;; +12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;; +12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;; +12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;; +12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;; +12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;; +12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;; +12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;; +12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;; +12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;; +12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;; +12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;; +12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;; +12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;; +12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;; +12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;; +12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;; +12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;; +12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;; +12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;; +12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;; +12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;; +12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;; +12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;; +12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;; +12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;; +12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;; +12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;; +12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;; +12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;; +12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;; +12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;; +12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;; +12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;; +12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;; +12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;; +12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;; +12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;; +12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;; +12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;; +12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;; +12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;; +12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;; +12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;; +12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;; +12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; +12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;; +12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;; +12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;; +12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; +12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; +12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; +12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;; +12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; +12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; +12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; +12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;; +12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;; +12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;; +12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;; +12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;; +12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;; +12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;; +12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;; +12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;; +12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;; +12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;; +12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;; +12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;; +12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;; +12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;; +12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;; +12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;; +12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;; +12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;; +12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;; +12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;; +12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;; +12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;; +12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;; +12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;; +1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;; +1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;; +1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;; +1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;; +1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;; +1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;; +1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;; +1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;; +1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;; +1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;; +130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;; +130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;; +130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;; +130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;; +130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;; +130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;; +1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;; +1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;; +1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;; +1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;; +1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;; +1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;; +1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;; +131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;; +131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;; +131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;; +131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;; +131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;; +131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;; +1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;; +1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;; +1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;; +1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;; +1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;; +1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;; +1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;; +1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;; +1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;; +1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;; +132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;; +132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;; +132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;; +132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;; +132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;; +132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;; +1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;; +1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;; +1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;; +1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;; +1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;; +1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;; +1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;; +1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;; +1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;; +1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;; +133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;; +133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;; +133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;; +133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;; +133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;; +133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;; +1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;; +1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;; +1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;; +1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;; +1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;; +1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;; +1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;; +1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;; +1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;; +1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;; +134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;; +134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;; +134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;; +134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;; +134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;; +134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;; +1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;; +1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;; +1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;; +1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;; +1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;; +1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;; +1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;; +1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;; +1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;; +1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;; +135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;; +135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; +1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;; +1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;; +1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;; +1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;; +1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;; +1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;; +1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;; +1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;; +1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; +1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;; +136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;; +136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;; +136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;; +136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;; +136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;; +136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;; +1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;; +1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;; +1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;; +1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; +1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; +1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;; +1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;; +1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;; +1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;; +1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;; +137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;; +137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;; +137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; +1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;; +1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;; +1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;; +1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;; +1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;; +1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;; +1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;; +1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;; +1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;; +1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;; +138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;; +138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;; +138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;; +138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;; +138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;; +138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;; +1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;; +1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;; +1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;; +1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;; +1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;; +1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;; +1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;; +1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;; +1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;; +1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;; +13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;; +13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;; +13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;; +13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;; +13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;; +13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;; +13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;; +13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;; +13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;; +13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;; +13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;; +13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;; +13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;; +13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;; +13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;; +13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;; +13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;; +13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;; +13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;; +13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;; +13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;; +13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;; +13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;; +13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;; +13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;; +13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;; +13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;; +13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;; +13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;; +13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;; +13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;; +13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;; +13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;; +13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;; +13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;; +13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;; +13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;; +13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;; +13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;; +13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;; +13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;; +13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;; +13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;; +13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;; +13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;; +13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;; +13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;; +13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;; +13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;; +13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;; +13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;; +13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;; +13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;; +13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;; +13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;; +13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;; +13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;; +13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;; +13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;; +13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;; +13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;; +13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;; +13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;; +13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;; +13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;; +13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;; +13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;; +13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;; +13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;; +13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;; +13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;; +13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;; +13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;; +13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;; +13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;; +13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;; +13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;; +13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;; +13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;; +13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;; +13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;; +13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;; +13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;; +13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;; +13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;; +1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;; +1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;; +1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;; +1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;; +1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;; +1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;; +1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;; +1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;; +1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;; +140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;; +140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;; +140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;; +140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;; +140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;; +140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;; +1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;; +1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;; +1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;; +1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;; +1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;; +1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;; +1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;; +1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;; +1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;; +1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;; +141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;; +141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;; +141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;; +141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;; +141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;; +141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;; +1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;; +1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;; +1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;; +1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;; +1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;; +1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;; +1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;; +1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;; +1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;; +1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;; +142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;; +142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;; +142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;; +142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;; +142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;; +142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;; +1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;; +1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;; +1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;; +1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;; +1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;; +1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;; +1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;; +1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;; +1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;; +1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;; +143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;; +143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;; +143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;; +143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;; +143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;; +143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;; +1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;; +1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;; +1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;; +1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;; +1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;; +1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;; +1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;; +1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;; +1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;; +1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;; +144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;; +144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;; +144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;; +144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;; +144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;; +144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;; +1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;; +1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;; +1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;; +1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;; +1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;; +1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;; +1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;; +1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;; +1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;; +1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;; +145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;; +145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;; +145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;; +145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;; +145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;; +145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;; +1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;; +1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;; +1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;; +1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;; +1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;; +1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;; +1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;; +1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;; +1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;; +1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;; +146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;; +146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;; +146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;; +146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;; +146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;; +146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;; +1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;; +1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;; +1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;; +1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;; +1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;; +1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;; +1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;; +1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;; +1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;; +1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;; +147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;; +147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;; +147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;; +147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;; +147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;; +147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;; +1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;; +1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;; +1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;; +1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;; +1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;; +1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;; +1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;; +1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;; +1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;; +1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;; +148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;; +148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;; +148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;; +148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;; +148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;; +148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;; +1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;; +1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;; +1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;; +1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;; +1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;; +1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;; +1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;; +1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;; +1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;; +1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;; +149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;; +149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;; +149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;; +149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;; +149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;; +149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;; +14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;; +14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;; +14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;; +14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;; +14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;; +14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;; +14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;; +14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;; +14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;; +14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;; +14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;; +14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;; +14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;; +14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;; +14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;; +14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;; +14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;; +14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;; +14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;; +14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;; +14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;; +14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;; +14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;; +14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;; +14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;; +14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;; +14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;; +14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;; +14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;; +14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;; +14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;; +14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;; +14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;; +14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;; +14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;; +14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;; +14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;; +14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;; +14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;; +14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;; +14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;; +14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;; +14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;; +14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;; +14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;; +14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;; +14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;; +14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;; +14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;; +14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;; +14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;; +14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;; +14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;; +14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;; +14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;; +14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;; +14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;; +14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;; +14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;; +14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;; +14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;; +14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;; +14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;; +14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;; +14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;; +14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;; +14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;; +14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;; +14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;; +14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;; +14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;; +14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;; +14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;; +14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;; +14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;; +14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;; +14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;; +14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;; +14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;; +14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;; +14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;; +14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;; +14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;; +14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;; +14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;; +14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;; +14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;; +14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;; +14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;; +14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;; +14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;; +14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;; +14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;; +14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;; +14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;; +14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;; +1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;; +1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;; +1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;; +1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;; +1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;; +1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;; +1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;; +1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;; +1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;; +1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;; +150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;; +150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;; +150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;; +150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;; +150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;; +150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;; +1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;; +1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;; +1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;; +1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;; +1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;; +1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;; +1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;; +1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;; +1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;; +1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;; +151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;; +151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;; +151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;; +151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;; +151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;; +151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;; +1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;; +1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;; +1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;; +1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;; +1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;; +1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;; +1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;; +1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;; +1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;; +1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;; +152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;; +152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;; +152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;; +152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;; +152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;; +152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;; +1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;; +1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;; +1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;; +1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;; +1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;; +1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;; +1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;; +1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;; +1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;; +1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;; +153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;; +153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;; +153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;; +153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;; +153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;; +153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;; +1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;; +1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;; +1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;; +1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;; +1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;; +1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;; +1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;; +1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;; +1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;; +1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;; +154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;; +154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;; +154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;; +154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;; +154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;; +154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;; +1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;; +1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;; +1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;; +1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;; +1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;; +1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;; +1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;; +1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;; +1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;; +1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;; +155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;; +155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;; +155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;; +155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;; +155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;; +155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;; +1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;; +1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;; +1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;; +1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;; +1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;; +1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;; +1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;; +1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;; +1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;; +1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;; +156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;; +156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;; +156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;; +156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;; +156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;; +156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;; +1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;; +1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;; +1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;; +1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;; +1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;; +1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;; +1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;; +1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;; +1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;; +1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;; +157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;; +157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;; +157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;; +157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;; +157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;; +157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;; +1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;; +1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;; +1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;; +1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;; +1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;; +1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;; +1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;; +1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;; +1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;; +1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;; +158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;; +158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;; +158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;; +158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;; +158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;; +158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;; +1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;; +1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;; +1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;; +1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;; +1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;; +1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;; +1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;; +1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;; +1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;; +1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;; +159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;; +159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;; +159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;; +159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;; +159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;; +159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;; +15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;; +15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;; +15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;; +15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;; +15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;; +15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;; +15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;; +15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;; +15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;; +15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;; +15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;; +15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;; +15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;; +15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;; +15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;; +15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;; +15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;; +15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;; +15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;; +15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;; +15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;; +15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;; +15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;; +15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;; +15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;; +15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;; +15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;; +15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;; +15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;; +15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;; +15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;; +15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;; +15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;; +15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;; +15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;; +15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;; +15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;; +15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;; +15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;; +15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;; +15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;; +15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;; +15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;; +15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;; +15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;; +15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;; +15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;; +15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;; +15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;; +15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;; +15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;; +15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;; +15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;; +15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;; +15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;; +15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;; +15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;; +15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;; +15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;; +15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;; +15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;; +15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;; +15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;; +15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;; +15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;; +15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;; +15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;; +15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;; +15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;; +15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;; +15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;; +15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;; +15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;; +15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;; +15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;; +15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;; +15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;; +15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;; +15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;; +15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;; +15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;; +15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;; +15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;; +15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;; +15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;; +15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;; +15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;; +15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;; +15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;; +15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;; +15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;; +15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;; +15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;; +15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;; +15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;; +15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;; +1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;; +1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;; +1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;; +1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;; +1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;; +1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;; +1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;; +1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;; +1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;; +1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;; +160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;; +160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;; +160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;; +160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;; +160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;; +160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;; +1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;; +1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;; +1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;; +1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;; +1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;; +1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;; +1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;; +1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;; +1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;; +1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;; +161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;; +161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;; +161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;; +161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;; +161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;; +161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;; +1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;; +1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;; +1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;; +1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;; +1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;; +1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;; +1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;; +1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;; +1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;; +1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;; +162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;; +162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;; +162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;; +162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;; +162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;; +162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;; +1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;; +1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;; +1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;; +1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;; +1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;; +1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;; +1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;; +1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;; +1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;; +1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;; +163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;; +163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;; +163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;; +163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;; +163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;; +163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;; +1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;; +1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;; +1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;; +1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;; +1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;; +1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;; +1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;; +1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;; +1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;; +1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;; +164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;; +164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;; +164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;; +164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;; +164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;; +164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;; +1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;; +1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;; +1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;; +1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;; +1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;; +1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;; +1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;; +1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;; +1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;; +1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;; +165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;; +165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;; +165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;; +165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;; +165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;; +165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;; +1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;; +1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;; +1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;; +1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;; +1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;; +1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;; +1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;; +1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;; +1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;; +1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;; +166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;; +166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;; +166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;; +166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;; +166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;; +166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;; +1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;; +1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;; +1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;; +1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;; +1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;; +1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;; +1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;; +1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;; +1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;; +1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;; +1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;; +1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;; +1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;; +1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;; +1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;; +1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;; +1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;; +168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;; +168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;; +168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;; +168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;; +168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;; +168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;; +1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;; +1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;; +1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;; +1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;; +1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;; +1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;; +1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;; +1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;; +1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;; +1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;; +169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;; +169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;; +169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;; +16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;; +16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;; +16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;; +16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;; +16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;; +16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;; +16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;; +16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;; +16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;; +16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;; +16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;; +16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;; +16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;; +16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;; +16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;; +16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;; +16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;; +16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;; +16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;; +16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;; +16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;; +16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;; +16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;; +16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;; +16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;; +16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;; +16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;; +16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;; +16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;; +16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;; +16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;; +16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;; +16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;; +16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;; +16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;; +16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;; +16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;; +16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;; +16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;; +16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;; +16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;; +16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;; +16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;; +16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;; +16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;; +16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;; +16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;; +16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;; +16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;; +16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;; +16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;; +16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;; +16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;; +16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;; +16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;; +16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;; +16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;; +16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;; +16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;; +16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;; +16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;; +16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;; +16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;; +16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;; +16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;; +16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;; +16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;; +16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;; +16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;; +16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;; +16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;; +16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;; +16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;; +16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;; +16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;; +16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; +16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;; +16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;; +16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;golden number 17;;; +16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;golden number 18;;; +16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;golden number 19;;; +1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;; +1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;; +1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;; +1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;; +1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;; +1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;; +1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;; +1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;; +1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;; +1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;; +170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;; +170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;; +170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;; +170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;; +170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;; +1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;; +1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;; +1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;; +1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;; +1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;; +1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;; +1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;; +1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;; +1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;; +1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;; +1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;; +1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;; +172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;; +172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;; +172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;; +172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;; +172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;; +172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;; +1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;; +1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;; +1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;; +1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; +1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;; +1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;; +1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;; +1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;; +1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;; +1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;; +1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;; +1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;; +1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;; +1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;; +1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;; +174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;; +174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;; +174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;; +174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;; +174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;; +174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;; +1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;; +1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;; +1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;; +1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;; +1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;; +1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;; +1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;; +1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;; +1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;; +1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;; +1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;; +1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;; +176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;; +176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;; +176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;; +176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;; +176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;; +1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;; +1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;; +1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;; +1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;; +1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;; +1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;; +1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;; +1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;; +1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;; +1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;; +1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;; +178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;; +178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;; +178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;; +178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;; +178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;; +178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;; +1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;; +1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;; +1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;; +1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;; +1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;; +1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;; +1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;; +1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;; +1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;; +1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;; +179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;; +179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;; +179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;; +179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;; +179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;; +179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;; +17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;; +17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;; +17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;; +17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;*;;; +17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;*;;; +17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;; +17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;; +17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;; +17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;; +17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;; +17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;; +17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;; +17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;; +17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;; +17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;; +17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;; +17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;; +17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;; +17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;; +17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;; +17B4;KHMER VOWEL INHERENT AQ;Cf;0;L;;;;;N;;*;;; +17B5;KHMER VOWEL INHERENT AA;Cf;0;L;;;;;N;;*;;; +17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;; +17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;; +17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; +17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;; +17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;; +17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;; +17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;; +17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;; +17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;; +17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;; +17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;; +17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;; +17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;; +17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;; +17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;; +17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;; +17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;; +17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;; +17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;; +17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;; +17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;*;;; +17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;; +17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;; +17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;; +17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;; +17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;*;;; +17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;; +17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;; +17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;; +17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;; +17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;; +17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;; +17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;; +17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;; +17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;; +17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;; +17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;; +17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;; +17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;; +17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;; +17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;; +1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;; +1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;; +1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;; +1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;; +1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;; +1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;; +1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;; +1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;; +1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;; +1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;; +180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;; +180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;; +180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;; +180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;; +180E;MONGOLIAN VOWEL SEPARATOR;Zs;0;WS;;;;;N;;;;; +1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;; +1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;; +1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;; +1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;; +1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;; +1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;; +1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;; +1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;; +1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;; +1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;; +182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;; +182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;; +182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;; +182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;; +182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;; +182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;; +1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;; +1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;; +1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;; +1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;; +1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;; +1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;; +1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;; +1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;; +1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;; +1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;; +183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;; +183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;; +183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;; +183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;; +183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;; +183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;; +1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;; +1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;; +1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;; +1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;; +1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;; +1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;; +1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;; +1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;; +1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;; +1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;; +184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;; +184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;; +184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;; +184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;; +184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;; +184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;; +1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;; +1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;; +1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;; +1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;; +1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;; +1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;; +1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;; +1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;; +1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;; +1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;; +185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;; +185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;; +185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;; +185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;; +185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;; +185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;; +1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;; +1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;; +1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;; +1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;; +1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;; +1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;; +1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;; +1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;; +1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;; +1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;; +186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;; +186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;; +186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;; +186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;; +186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;; +186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;; +1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;; +1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;; +1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;; +1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;; +1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;; +1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;; +1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;; +1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;; +1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;; +1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;; +1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;; +1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;; +1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;; +1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;; +1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;; +1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;; +1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;; +1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;; +188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;; +188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;; +188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;; +188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;; +188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;; +188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;; +1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;; +1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;; +1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;; +1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;; +1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;; +1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;; +1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;; +1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;; +1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;; +1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;; +189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;; +189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;; +189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;; +189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;; +189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;; +189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;; +18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;; +18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;; +18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;; +18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;; +18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;; +18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;; +18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;; +18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;; +18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;; +18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;; +18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;; +1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;; +1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;; +1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;; +1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;; +1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;; +1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;; +1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;; +1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;; +1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;; +1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;; +190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;; +190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;; +190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;; +190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;; +190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;; +190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;; +1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;; +1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;; +1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;; +1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;; +1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;; +1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;; +1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;; +1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;; +1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;; +1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;; +191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;; +191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;; +191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;; +1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;; +1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; +192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; +192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;; +1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;; +1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;; +1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;; +1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;; +1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;; +1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;; +1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;; +1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;; +1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;; +1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;; +193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;; +193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;; +1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;; +1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;; +1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;; +1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;; +1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;; +1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;; +1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;; +1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;; +1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;; +1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;; +1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;; +1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;; +195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;; +195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;; +195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;; +195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;; +195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;; +195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;; +1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;; +1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;; +1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;; +1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;; +1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;; +1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;; +1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;; +1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;; +1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;; +1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;; +196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;; +196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;; +196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;; +196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;; +1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;; +1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;; +1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;; +1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;; +1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;; +1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;; +1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;; +1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;; +1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;; +1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;; +1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;; +1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;; +1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;; +1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;; +1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;; +198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;; +198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;; +198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;; +198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;; +198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;; +198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;; +1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;; +1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;; +1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;; +1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;; +1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;; +1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; +1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;; +1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;; +1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;; +1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;; +199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;; +199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;; +199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;; +199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;; +199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;; +199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;; +19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;; +19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;; +19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;; +19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;; +19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;; +19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;; +19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;; +19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;; +19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;; +19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;; +19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;; +19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;; +19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;; +19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;; +19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;; +19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;; +19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;; +19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;; +19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;; +19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;; +19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;; +19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;; +19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;; +19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;; +19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;; +19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;; +19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;; +19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;; +19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;; +19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +19DE;NEW TAI LUE SIGN LAE;Po;0;ON;;;;;N;;;;; +19DF;NEW TAI LUE SIGN LAEV;Po;0;ON;;;;;N;;;;; +19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;; +19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;; +19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;; +19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;; +19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;; +19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;; +19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;; +19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;; +19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;; +19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;; +19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;; +19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;; +19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;; +19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;; +19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;; +19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;; +19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;; +19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;; +19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;; +19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;; +19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;; +19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;; +19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;; +19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;; +19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;; +19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;; +19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;; +19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;; +19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;; +19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;; +19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;; +19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;; +1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;; +1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;; +1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;; +1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;; +1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;; +1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;; +1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;; +1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;; +1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;; +1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;; +1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;; +1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;; +1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;; +1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;; +1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;; +1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;; +1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;; +1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;; +1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;; +1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;; +1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;; +1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; +1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;; +1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;; +1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;; +1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;ardhacandra;;; +1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;candrabindu;;; +1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;anusvara;;; +1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;repha;;; +1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;visarga;;; +1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;a;;; +1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;aa;;; +1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;i;;; +1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;ii;;; +1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;u;;; +1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;uu;;; +1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;vocalic r;;; +1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;vocalic rr;;; +1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;vocalic l;;; +1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;vocalic ll;;; +1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;e;;; +1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;ai;;; +1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;o;;; +1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;au;;; +1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;; +1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;kha;;; +1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;; +1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;gha;;; +1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;; +1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;cha;;; +1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;; +1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;jha;;; +1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;tta;;; +1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ttha;;; +1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;dda;;; +1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ddha;;; +1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;nna;;; +1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;; +1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;tha;;; +1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;; +1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;dha;;; +1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;; +1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;; +1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;pha;;; +1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;; +1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;bha;;; +1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;; +1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;; +1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;; +1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;; +1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;; +1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;sha;;; +1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;ssa;;; +1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;; +1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;; +1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;nukta;;; +1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;aa;;; +1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;i;;; +1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;ii;;; +1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;u;;; +1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;uu;;; +1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;vocalic r;;; +1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;vocalic rr;;; +1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;vocalic l;;; +1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;vocalic ll;;; +1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;e;;; +1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;ai;;; +1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;o;;; +1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;au;;; +1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;ae;;; +1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;oe;;; +1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;virama;;; +1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;; +1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;; +1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;; +1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;; +1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;; +1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; +1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; +1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1B5A;BALINESE PANTI;Po;0;L;;;;;N;;section;;; +1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;honorific section;;; +1B5C;BALINESE WINDU;Po;0;L;;;;;N;;punctuation ring;;; +1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;colon;;; +1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;danda;;; +1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;double danda;;; +1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;line-breaking hyphen;;; +1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;; +1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;; +1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;; +1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;; +1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;; +1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;; +1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;; +1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;; +1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;; +1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;; +1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;; +1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;; +1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;; +1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;; +1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;; +1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;; +1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;; +1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;; +1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;; +1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;; +1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;; +1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;; +1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;; +1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;; +1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; +1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;; +1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;; +1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;; +1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;; +1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;; +1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;; +1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;; +1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;; +1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;; +1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;; +1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;; +1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;; +1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;; +1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;; +1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;; +1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;; +1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;; +1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;; +1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;; +1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;; +1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;; +1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;; +1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;; +1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;; +1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;; +1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;; +1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;; +1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;; +1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;; +1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;; +1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;; +1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;; +1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;; +1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;; +1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;; +1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;; +1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;; +1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;; +1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;; +1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;; +1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;; +1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;; +1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;; +1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;; +1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;; +1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;; +1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;; +1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;; +1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;; +1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;; +1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;; +1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;; +1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;; +1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;; +1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;; +1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;; +1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;; +1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;; +1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;; +1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;; +1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;; +1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;; +1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;; +1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;; +1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;; +1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;; +1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;; +1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;; +1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;; +1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;; +1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;; +1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;; +1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;; +1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;; +1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;; +1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;; +1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;; +1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;; +1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;; +1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; +1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; +1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;; +1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;; +1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;; +1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; +1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;; +1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; +1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;; +1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;; +1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;; +1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;; +1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;; +1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;; +1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;; +1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;; +1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;; +1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;; +1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;; +1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;; +1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;; +1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;; +1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;; +1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;; +1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;; +1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;; +1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;; +1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;; +1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;; +1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;; +1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;; +1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;; +1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;; +1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;; +1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;; +1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;; +1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;; +1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;; +1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;; +1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;; +1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;; +1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;; +1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;; +1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;; +1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;; +1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;; +1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;; +1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;; +1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;; +1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;; +1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;; +1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; +1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; +1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;; +1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;; +1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;; +1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;; +1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;; +1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;; +1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;; +1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;; +1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;; +1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;; +1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;; +1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;; +1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;; +1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;; +1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;; +1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;; +1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;; +1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;; +1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;; +1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;; +1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;; +1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;; +1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;; +1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;; +1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;; +1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;; +1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;; +1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;; +1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;; +1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;; +1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;; +1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;; +1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;; +1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;; +1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;; +1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;; +1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;; +1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;; +1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;; +1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;; +1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;; +1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;; +1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;; +1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;; +1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;; +1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;; +1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;; +1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;; +1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;; +1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L; 0041;;;;N;;;;; +1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L; 00C6;;;;N;;;;; +1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L; 0042;;;;N;;;;; +1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;; +1D30;MODIFIER LETTER CAPITAL D;Lm;0;L; 0044;;;;N;;;;; +1D31;MODIFIER LETTER CAPITAL E;Lm;0;L; 0045;;;;N;;;;; +1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L; 018E;;;;N;;;;; +1D33;MODIFIER LETTER CAPITAL G;Lm;0;L; 0047;;;;N;;;;; +1D34;MODIFIER LETTER CAPITAL H;Lm;0;L; 0048;;;;N;;;;; +1D35;MODIFIER LETTER CAPITAL I;Lm;0;L; 0049;;;;N;;;;; +1D36;MODIFIER LETTER CAPITAL J;Lm;0;L; 004A;;;;N;;;;; +1D37;MODIFIER LETTER CAPITAL K;Lm;0;L; 004B;;;;N;;;;; +1D38;MODIFIER LETTER CAPITAL L;Lm;0;L; 004C;;;;N;;;;; +1D39;MODIFIER LETTER CAPITAL M;Lm;0;L; 004D;;;;N;;;;; +1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L; 004E;;;;N;;;;; +1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;; +1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L; 004F;;;;N;;;;; +1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L; 0222;;;;N;;;;; +1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L; 0050;;;;N;;;;; +1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L; 0052;;;;N;;;;; +1D40;MODIFIER LETTER CAPITAL T;Lm;0;L; 0054;;;;N;;;;; +1D41;MODIFIER LETTER CAPITAL U;Lm;0;L; 0055;;;;N;;;;; +1D42;MODIFIER LETTER CAPITAL W;Lm;0;L; 0057;;;;N;;;;; +1D43;MODIFIER LETTER SMALL A;Lm;0;L; 0061;;;;N;;;;; +1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L; 0250;;;;N;;;;; +1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L; 0251;;;;N;;;;; +1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L; 1D02;;;;N;;;;; +1D47;MODIFIER LETTER SMALL B;Lm;0;L; 0062;;;;N;;;;; +1D48;MODIFIER LETTER SMALL D;Lm;0;L; 0064;;;;N;;;;; +1D49;MODIFIER LETTER SMALL E;Lm;0;L; 0065;;;;N;;;;; +1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L; 0259;;;;N;;;;; +1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L; 025B;;;;N;;;;; +1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L; 025C;;;;N;;;;; +1D4D;MODIFIER LETTER SMALL G;Lm;0;L; 0067;;;;N;;;;; +1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;; +1D4F;MODIFIER LETTER SMALL K;Lm;0;L; 006B;;;;N;;;;; +1D50;MODIFIER LETTER SMALL M;Lm;0;L; 006D;;;;N;;;;; +1D51;MODIFIER LETTER SMALL ENG;Lm;0;L; 014B;;;;N;;;;; +1D52;MODIFIER LETTER SMALL O;Lm;0;L; 006F;;;;N;;;;; +1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L; 0254;;;;N;;;;; +1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L; 1D16;;;;N;;;;; +1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L; 1D17;;;;N;;;;; +1D56;MODIFIER LETTER SMALL P;Lm;0;L; 0070;;;;N;;;;; +1D57;MODIFIER LETTER SMALL T;Lm;0;L; 0074;;;;N;;;;; +1D58;MODIFIER LETTER SMALL U;Lm;0;L; 0075;;;;N;;;;; +1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L; 1D1D;;;;N;;;;; +1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L; 026F;;;;N;;;;; +1D5B;MODIFIER LETTER SMALL V;Lm;0;L; 0076;;;;N;;;;; +1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L; 1D25;;;;N;;;;; +1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L; 03B2;;;;N;;;;; +1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L; 03B3;;;;N;;;;; +1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L; 03B4;;;;N;;;;; +1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L; 03C6;;;;N;;;;; +1D61;MODIFIER LETTER SMALL CHI;Lm;0;L; 03C7;;;;N;;;;; +1D62;LATIN SUBSCRIPT SMALL LETTER I;Ll;0;L; 0069;;;;N;;;;; +1D63;LATIN SUBSCRIPT SMALL LETTER R;Ll;0;L; 0072;;;;N;;;;; +1D64;LATIN SUBSCRIPT SMALL LETTER U;Ll;0;L; 0075;;;;N;;;;; +1D65;LATIN SUBSCRIPT SMALL LETTER V;Ll;0;L; 0076;;;;N;;;;; +1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Ll;0;L; 03B2;;;;N;;;;; +1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Ll;0;L; 03C1;;;;N;;;;; +1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L; 03C6;;;;N;;;;; +1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L; 03C7;;;;N;;;;; +1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;; +1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;; +1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L; 043D;;;;N;;;;; +1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D +1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;; +1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63 +1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;; +1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;; +1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L; 0252;;;;N;;;;; +1D9C;MODIFIER LETTER SMALL C;Lm;0;L; 0063;;;;N;;;;; +1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L; 0255;;;;N;;;;; +1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L; 00F0;;;;N;;;;; +1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L; 025C;;;;N;;;;; +1DA0;MODIFIER LETTER SMALL F;Lm;0;L; 0066;;;;N;;;;; +1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L; 025F;;;;N;;;;; +1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L; 0261;;;;N;;;;; +1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L; 0265;;;;N;;;;; +1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L; 0268;;;;N;;;;; +1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L; 0269;;;;N;;;;; +1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L; 026A;;;;N;;;;; +1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L; 1D7B;;;;N;;;;; +1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L; 029D;;;;N;;;;; +1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L; 026D;;;;N;;;;; +1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L; 1D85;;;;N;;;;; +1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L; 029F;;;;N;;;;; +1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L; 0271;;;;N;;;;; +1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L; 0270;;;;N;;;;; +1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L; 0272;;;;N;;;;; +1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L; 0273;;;;N;;;;; +1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L; 0274;;;;N;;;;; +1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L; 0275;;;;N;;;;; +1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L; 0278;;;;N;;;;; +1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L; 0282;;;;N;;;;; +1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L; 0283;;;;N;;;;; +1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L; 01AB;;;;N;;;;; +1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L; 0289;;;;N;;;;; +1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L; 028A;;;;N;;;;; +1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L; 1D1C;;;;N;;;;; +1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L; 028B;;;;N;;;;; +1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L; 028C;;;;N;;;;; +1DBB;MODIFIER LETTER SMALL Z;Lm;0;L; 007A;;;;N;;;;; +1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L; 0290;;;;N;;;;; +1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L; 0291;;;;N;;;;; +1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L; 0292;;;;N;;;;; +1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L; 03B8;;;;N;;;;; +1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; +1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; +1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;; +1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;; +1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;; +1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;; +1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;; +1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;; +1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;; +1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;; +1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;; +1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;; +1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;; +1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;; +1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;; +1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;; +1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;; +1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;; +1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;; +1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;; +1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;; +1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;; +1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;; +1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;; +1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;; +1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;; +1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;; +1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;; +1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;; +1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;; +1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;; +1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;; +1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;; +1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;; +1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;; +1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; +1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; +1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01; +1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00 +1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03; +1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02 +1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05; +1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04 +1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07; +1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06 +1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09; +1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08 +1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B; +1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A +1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D; +1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C +1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F; +1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E +1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11; +1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10 +1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13; +1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12 +1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15; +1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14 +1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17; +1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16 +1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19; +1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18 +1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B; +1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A +1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D; +1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C +1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F; +1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E +1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21; +1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20 +1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23; +1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22 +1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25; +1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24 +1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27; +1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26 +1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29; +1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28 +1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B; +1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A +1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D; +1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C +1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F; +1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E +1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31; +1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30 +1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33; +1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32 +1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35; +1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34 +1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37; +1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36 +1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39; +1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38 +1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B; +1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A +1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D; +1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C +1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F; +1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E +1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41; +1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40 +1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43; +1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42 +1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45; +1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44 +1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47; +1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46 +1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49; +1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48 +1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B; +1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A +1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D; +1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C +1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F; +1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E +1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51; +1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50 +1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53; +1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52 +1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55; +1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54 +1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57; +1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56 +1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59; +1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58 +1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B; +1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A +1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D; +1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C +1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F; +1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E +1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61; +1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60 +1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63; +1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62 +1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65; +1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64 +1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67; +1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66 +1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69; +1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68 +1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B; +1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A +1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D; +1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C +1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F; +1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E +1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71; +1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70 +1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73; +1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72 +1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75; +1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74 +1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77; +1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76 +1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79; +1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78 +1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B; +1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A +1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D; +1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C +1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F; +1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E +1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81; +1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80 +1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83; +1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82 +1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85; +1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84 +1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87; +1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86 +1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89; +1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88 +1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B; +1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A +1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D; +1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C +1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F; +1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E +1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91; +1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90 +1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93; +1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92 +1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95; +1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94 +1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;; +1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;; +1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;; +1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;; +1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L; 0061 02BE;;;;N;;;;; +1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60 +1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;; +1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;; +1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF; +1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;; +1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1; +1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0 +1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3; +1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2 +1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5; +1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4 +1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7; +1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6 +1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9; +1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8 +1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB; +1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA +1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD; +1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC +1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF; +1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE +1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1; +1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0 +1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3; +1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2 +1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5; +1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4 +1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7; +1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6 +1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9; +1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8 +1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB; +1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA +1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD; +1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC +1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF; +1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE +1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1; +1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0 +1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3; +1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2 +1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5; +1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4 +1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7; +1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6 +1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9; +1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8 +1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB; +1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA +1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD; +1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC +1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF; +1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE +1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1; +1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0 +1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3; +1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2 +1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5; +1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4 +1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7; +1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6 +1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9; +1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8 +1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB; +1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA +1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD; +1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC +1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF; +1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE +1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1; +1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0 +1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3; +1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2 +1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5; +1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4 +1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7; +1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6 +1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9; +1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8 +1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB; +1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA +1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED; +1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC +1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF; +1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE +1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1; +1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0 +1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3; +1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2 +1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5; +1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4 +1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7; +1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6 +1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9; +1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8 +1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB; +1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA +1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD; +1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC +1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF; +1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE +1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08 +1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09 +1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A +1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B +1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C +1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D +1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E +1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F +1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00; +1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01; +1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02; +1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03; +1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04; +1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05; +1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06; +1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07; +1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18 +1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19 +1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A +1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B +1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C +1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D +1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10; +1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11; +1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12; +1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13; +1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14; +1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15; +1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28 +1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29 +1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A +1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B +1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C +1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D +1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E +1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F +1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20; +1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21; +1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22; +1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23; +1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24; +1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25; +1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26; +1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27; +1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38 +1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39 +1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A +1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B +1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C +1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D +1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E +1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F +1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30; +1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31; +1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32; +1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33; +1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34; +1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35; +1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36; +1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37; +1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48 +1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49 +1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A +1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B +1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C +1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D +1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40; +1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41; +1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42; +1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43; +1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44; +1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45; +1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;; +1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59 +1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;; +1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B +1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;; +1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D +1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;; +1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F +1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51; +1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53; +1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55; +1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57; +1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68 +1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69 +1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A +1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B +1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C +1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D +1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E +1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F +1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60; +1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61; +1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62; +1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63; +1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64; +1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65; +1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66; +1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67; +1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA +1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB +1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8 +1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9 +1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA +1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB +1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA +1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB +1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8 +1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9 +1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA +1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB +1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA +1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB +1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88 +1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89 +1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A +1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B +1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C +1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D +1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E +1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F +1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80; +1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81; +1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82; +1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83; +1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84; +1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85; +1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86; +1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87; +1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98 +1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99 +1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A +1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B +1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C +1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D +1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E +1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F +1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90; +1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91; +1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92; +1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93; +1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94; +1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95; +1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96; +1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97; +1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8 +1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9 +1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA +1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB +1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC +1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD +1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE +1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF +1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0; +1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1; +1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2; +1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3; +1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4; +1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5; +1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6; +1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7; +1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8 +1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9 +1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;; +1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC +1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;; +1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;; +1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;; +1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0; +1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1; +1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70; +1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71; +1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3; +1FBD;GREEK KORONIS;Sk;0;ON; 0020 0313;;;;N;;;;; +1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399 +1FBF;GREEK PSILI;Sk;0;ON; 0020 0313;;;;N;;;;; +1FC0;GREEK PERISPOMENI;Sk;0;ON; 0020 0342;;;;N;;;;; +1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;; +1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;; +1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC +1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;; +1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;; +1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;; +1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72; +1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73; +1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74; +1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75; +1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3; +1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;; +1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;; +1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;; +1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8 +1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9 +1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;; +1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;; +1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;; +1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;; +1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0; +1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1; +1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76; +1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77; +1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;; +1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;; +1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;; +1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8 +1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9 +1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;; +1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;; +1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;; +1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC +1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;; +1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;; +1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0; +1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1; +1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A; +1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B; +1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5; +1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;; +1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;; +1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;; +1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;; +1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC +1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;; +1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;; +1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;; +1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78; +1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79; +1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C; +1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D; +1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3; +1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;; +1FFE;GREEK DASIA;Sk;0;ON; 0020 0314;;;;N;;;;; +2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;; +2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;; +2002;EN SPACE;Zs;0;WS; 0020;;;;N;;;;; +2003;EM SPACE;Zs;0;WS; 0020;;;;N;;;;; +2004;THREE-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; +2005;FOUR-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; +2006;SIX-PER-EM SPACE;Zs;0;WS; 0020;;;;N;;;;; +2007;FIGURE SPACE;Zs;0;WS; 0020;;;;N;;;;; +2008;PUNCTUATION SPACE;Zs;0;WS; 0020;;;;N;;;;; +2009;THIN SPACE;Zs;0;WS; 0020;;;;N;;;;; +200A;HAIR SPACE;Zs;0;WS; 0020;;;;N;;;;; +200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;; +200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;; +200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;; +200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;; +200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;; +2010;HYPHEN;Pd;0;ON;;;;;N;;;;; +2011;NON-BREAKING HYPHEN;Pd;0;ON; 2010;;;;N;;;;; +2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;; +2013;EN DASH;Pd;0;ON;;;;;N;;;;; +2014;EM DASH;Pd;0;ON;;;;;N;;;;; +2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;; +2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;; +2017;DOUBLE LOW LINE;Po;0;ON; 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;; +2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;; +2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;; +201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;; +201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;; +201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;; +201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;; +201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;; +201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;; +2020;DAGGER;Po;0;ON;;;;;N;;;;; +2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;; +2022;BULLET;Po;0;ON;;;;;N;;;;; +2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;; +2024;ONE DOT LEADER;Po;0;ON; 002E;;;;N;;;;; +2025;TWO DOT LEADER;Po;0;ON; 002E 002E;;;;N;;;;; +2026;HORIZONTAL ELLIPSIS;Po;0;ON; 002E 002E 002E;;;;N;;;;; +2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;; +2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;; +2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;; +202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;; +202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;; +202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;; +202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;; +202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;; +202F;NARROW NO-BREAK SPACE;Zs;0;CS; 0020;;;;N;;;;; +2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;; +2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; +2032;PRIME;Po;0;ET;;;;;N;;;;; +2033;DOUBLE PRIME;Po;0;ET; 2032 2032;;;;N;;;;; +2034;TRIPLE PRIME;Po;0;ET; 2032 2032 2032;;;;N;;;;; +2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;; +2036;REVERSED DOUBLE PRIME;Po;0;ON; 2035 2035;;;;N;;;;; +2037;REVERSED TRIPLE PRIME;Po;0;ON; 2035 2035 2035;;;;N;;;;; +2038;CARET;Po;0;ON;;;;;N;;;;; +2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;; +203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;; +203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;; +203C;DOUBLE EXCLAMATION MARK;Po;0;ON; 0021 0021;;;;N;;;;; +203D;INTERROBANG;Po;0;ON;;;;;N;;;;; +203E;OVERLINE;Po;0;ON; 0020 0305;;;;N;SPACING OVERSCORE;;;; +203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;; +2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;; +2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;; +2042;ASTERISM;Po;0;ON;;;;;N;;;;; +2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;; +2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;; +2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;; +2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;; +2047;DOUBLE QUESTION MARK;Po;0;ON; 003F 003F;;;;N;;;;; +2048;QUESTION EXCLAMATION MARK;Po;0;ON; 003F 0021;;;;N;;;;; +2049;EXCLAMATION QUESTION MARK;Po;0;ON; 0021 003F;;;;N;;;;; +204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;; +204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;; +204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;; +204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;; +204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;; +204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;; +2050;CLOSE UP;Po;0;ON;;;;;N;;;;; +2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;; +2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;; +2053;SWUNG DASH;Po;0;ON;;;;;N;;;;; +2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;; +2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;; +2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2057;QUADRUPLE PRIME;Po;0;ON; 2032 2032 2032 2032;;;;N;;;;; +2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;; +205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;; +205D;TRICOLON;Po;0;ON;;;;;N;;;;; +205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;; +205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS; 0020;;;;N;;;;; +2060;WORD JOINER;Cf;0;BN;;;;;N;;;;; +2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;; +2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;; +2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;; +2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;; +206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; +206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; +206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; +206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; +206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; +206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;; +2070;SUPERSCRIPT ZERO;No;0;EN; 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;; +2071;SUPERSCRIPT LATIN SMALL LETTER I;Ll;0;L; 0069;;;;N;;;;; +2074;SUPERSCRIPT FOUR;No;0;EN; 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;; +2075;SUPERSCRIPT FIVE;No;0;EN; 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;; +2076;SUPERSCRIPT SIX;No;0;EN; 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;; +2077;SUPERSCRIPT SEVEN;No;0;EN; 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;; +2078;SUPERSCRIPT EIGHT;No;0;EN; 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;; +2079;SUPERSCRIPT NINE;No;0;EN; 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;; +207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; +207B;SUPERSCRIPT MINUS;Sm;0;ES; 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; +207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; +207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;; +207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;; +207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L; 006E;;;;N;;;;; +2080;SUBSCRIPT ZERO;No;0;EN; 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;; +2081;SUBSCRIPT ONE;No;0;EN; 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;; +2082;SUBSCRIPT TWO;No;0;EN; 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;; +2083;SUBSCRIPT THREE;No;0;EN; 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;; +2084;SUBSCRIPT FOUR;No;0;EN; 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;; +2085;SUBSCRIPT FIVE;No;0;EN; 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;; +2086;SUBSCRIPT SIX;No;0;EN; 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;; +2087;SUBSCRIPT SEVEN;No;0;EN; 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;; +2088;SUBSCRIPT EIGHT;No;0;EN; 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;; +2089;SUBSCRIPT NINE;No;0;EN; 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;; +208A;SUBSCRIPT PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; +208B;SUBSCRIPT MINUS;Sm;0;ES; 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; +208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; +208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;; +208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;; +2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L; 0061;;;;N;;;;; +2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L; 0065;;;;N;;;;; +2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L; 006F;;;;N;;;;; +2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L; 0078;;;;N;;;;; +2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L; 0259;;;;N;;;;; +20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; +20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;; +20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;; +20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;; +20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;; +20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;; +20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;; +20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;; +20A8;RUPEE SIGN;Sc;0;ET; 0052 0073;;;;N;;;;; +20A9;WON SIGN;Sc;0;ET;;;;;N;;;;; +20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;; +20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;; +20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;; +20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;; +20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;; +20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;; +20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;; +20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;; +20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;; +20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;; +20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;; +20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;; +20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; +20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; +20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; +20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;; +20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;; +20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;; +20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;; +20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;; +20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;; +20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;; +20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;; +20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;; +20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;; +20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;; +20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;; +20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;; +20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;; +20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;; +20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;; +20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;; +20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;; +20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; +20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;; +20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;; +20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;; +20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; +20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;; +20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; +20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; +20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; +20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;; +2100;ACCOUNT OF;So;0;ON; 0061 002F 0063;;;;N;;;;; +2101;ADDRESSED TO THE SUBJECT;So;0;ON; 0061 002F 0073;;;;N;;;;; +2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L; 0043;;;;N;DOUBLE-STRUCK C;;;; +2103;DEGREE CELSIUS;So;0;ON; 00B0 0043;;;;N;DEGREES CENTIGRADE;;;; +2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;; +2105;CARE OF;So;0;ON; 0063 002F 006F;;;;N;;;;; +2106;CADA UNA;So;0;ON; 0063 002F 0075;;;;N;;;;; +2107;EULER CONSTANT;Lu;0;L; 0190;;;;N;EULERS;;;; +2108;SCRUPLE;So;0;ON;;;;;N;;;;; +2109;DEGREE FAHRENHEIT;So;0;ON; 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;; +210A;SCRIPT SMALL G;Ll;0;L; 0067;;;;N;;;;; +210B;SCRIPT CAPITAL H;Lu;0;L; 0048;;;;N;SCRIPT H;;;; +210C;BLACK-LETTER CAPITAL H;Lu;0;L; 0048;;;;N;BLACK-LETTER H;;;; +210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L; 0048;;;;N;DOUBLE-STRUCK H;;;; +210E;PLANCK CONSTANT;Ll;0;L; 0068;;;;N;;;;; +210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L; 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;; +2110;SCRIPT CAPITAL I;Lu;0;L; 0049;;;;N;SCRIPT I;;;; +2111;BLACK-LETTER CAPITAL I;Lu;0;L; 0049;;;;N;BLACK-LETTER I;;;; +2112;SCRIPT CAPITAL L;Lu;0;L; 004C;;;;N;SCRIPT L;;;; +2113;SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; +2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;; +2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L; 004E;;;;N;DOUBLE-STRUCK N;;;; +2116;NUMERO SIGN;So;0;ON; 004E 006F;;;;N;NUMERO;;;; +2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;; +2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;; +2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L; 0050;;;;N;DOUBLE-STRUCK P;;;; +211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L; 0051;;;;N;DOUBLE-STRUCK Q;;;; +211B;SCRIPT CAPITAL R;Lu;0;L; 0052;;;;N;SCRIPT R;;;; +211C;BLACK-LETTER CAPITAL R;Lu;0;L; 0052;;;;N;BLACK-LETTER R;;;; +211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L; 0052;;;;N;DOUBLE-STRUCK R;;;; +211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;; +211F;RESPONSE;So;0;ON;;;;;N;;;;; +2120;SERVICE MARK;So;0;ON; 0053 004D;;;;N;;;;; +2121;TELEPHONE SIGN;So;0;ON; 0054 0045 004C;;;;N;T E L SYMBOL;;;; +2122;TRADE MARK SIGN;So;0;ON; 0054 004D;;;;N;TRADEMARK;;;; +2123;VERSICLE;So;0;ON;;;;;N;;;;; +2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L; 005A;;;;N;DOUBLE-STRUCK Z;;;; +2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;; +2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9; +2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;; +2128;BLACK-LETTER CAPITAL Z;Lu;0;L; 005A;;;;N;BLACK-LETTER Z;;;; +2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;; +212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B; +212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5; +212C;SCRIPT CAPITAL B;Lu;0;L; 0042;;;;N;SCRIPT B;;;; +212D;BLACK-LETTER CAPITAL C;Lu;0;L; 0043;;;;N;BLACK-LETTER C;;;; +212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;; +212F;SCRIPT SMALL E;Ll;0;L; 0065;;;;N;;;;; +2130;SCRIPT CAPITAL E;Lu;0;L; 0045;;;;N;SCRIPT E;;;; +2131;SCRIPT CAPITAL F;Lu;0;L; 0046;;;;N;SCRIPT F;;;; +2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E; +2133;SCRIPT CAPITAL M;Lu;0;L; 004D;;;;N;SCRIPT M;;;; +2134;SCRIPT SMALL O;Ll;0;L; 006F;;;;N;;;;; +2135;ALEF SYMBOL;Lo;0;L; 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;; +2136;BET SYMBOL;Lo;0;L; 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;; +2137;GIMEL SYMBOL;Lo;0;L; 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;; +2138;DALET SYMBOL;Lo;0;L; 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;; +2139;INFORMATION SOURCE;Ll;0;L; 0069;;;;N;;;;; +213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;; +213B;FACSIMILE SIGN;So;0;ON; 0046 0041 0058;;;;N;;;;; +213C;DOUBLE-STRUCK SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON; 2211;;;;Y;;;;; +2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;; +2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; +2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;; +2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;; +2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; +2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; +2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; +2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; +214A;PROPERTY LINE;So;0;ON;;;;;N;;;;; +214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;; +214C;PER SIGN;So;0;ON;;;;;N;;;;; +214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;; +214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132 +214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;; +2153;VULGAR FRACTION ONE THIRD;No;0;ON; 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;; +2154;VULGAR FRACTION TWO THIRDS;No;0;ON; 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;; +2155;VULGAR FRACTION ONE FIFTH;No;0;ON; 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;; +2156;VULGAR FRACTION TWO FIFTHS;No;0;ON; 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;; +2157;VULGAR FRACTION THREE FIFTHS;No;0;ON; 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;; +2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON; 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;; +2159;VULGAR FRACTION ONE SIXTH;No;0;ON; 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;; +215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON; 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;; +215B;VULGAR FRACTION ONE EIGHTH;No;0;ON; 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;; +215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON; 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;; +215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON; 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;; +215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON; 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;; +215F;FRACTION NUMERATOR ONE;No;0;ON; 0031 2044;;;1;N;;;;; +2160;ROMAN NUMERAL ONE;Nl;0;L; 0049;;;1;N;;;;2170; +2161;ROMAN NUMERAL TWO;Nl;0;L; 0049 0049;;;2;N;;;;2171; +2162;ROMAN NUMERAL THREE;Nl;0;L; 0049 0049 0049;;;3;N;;;;2172; +2163;ROMAN NUMERAL FOUR;Nl;0;L; 0049 0056;;;4;N;;;;2173; +2164;ROMAN NUMERAL FIVE;Nl;0;L; 0056;;;5;N;;;;2174; +2165;ROMAN NUMERAL SIX;Nl;0;L; 0056 0049;;;6;N;;;;2175; +2166;ROMAN NUMERAL SEVEN;Nl;0;L; 0056 0049 0049;;;7;N;;;;2176; +2167;ROMAN NUMERAL EIGHT;Nl;0;L; 0056 0049 0049 0049;;;8;N;;;;2177; +2168;ROMAN NUMERAL NINE;Nl;0;L; 0049 0058;;;9;N;;;;2178; +2169;ROMAN NUMERAL TEN;Nl;0;L; 0058;;;10;N;;;;2179; +216A;ROMAN NUMERAL ELEVEN;Nl;0;L; 0058 0049;;;11;N;;;;217A; +216B;ROMAN NUMERAL TWELVE;Nl;0;L; 0058 0049 0049;;;12;N;;;;217B; +216C;ROMAN NUMERAL FIFTY;Nl;0;L; 004C;;;50;N;;;;217C; +216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0043;;;100;N;;;;217D; +216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0044;;;500;N;;;;217E; +216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 004D;;;1000;N;;;;217F; +2170;SMALL ROMAN NUMERAL ONE;Nl;0;L; 0069;;;1;N;;;2160;;2160 +2171;SMALL ROMAN NUMERAL TWO;Nl;0;L; 0069 0069;;;2;N;;;2161;;2161 +2172;SMALL ROMAN NUMERAL THREE;Nl;0;L; 0069 0069 0069;;;3;N;;;2162;;2162 +2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L; 0069 0076;;;4;N;;;2163;;2163 +2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L; 0076;;;5;N;;;2164;;2164 +2175;SMALL ROMAN NUMERAL SIX;Nl;0;L; 0076 0069;;;6;N;;;2165;;2165 +2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L; 0076 0069 0069;;;7;N;;;2166;;2166 +2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L; 0076 0069 0069 0069;;;8;N;;;2167;;2167 +2178;SMALL ROMAN NUMERAL NINE;Nl;0;L; 0069 0078;;;9;N;;;2168;;2168 +2179;SMALL ROMAN NUMERAL TEN;Nl;0;L; 0078;;;10;N;;;2169;;2169 +217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L; 0078 0069;;;11;N;;;216A;;216A +217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L; 0078 0069 0069;;;12;N;;;216B;;216B +217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L; 006C;;;50;N;;;216C;;216C +217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L; 0063;;;100;N;;;216D;;216D +217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L; 0064;;;500;N;;;216E;;216E +217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L; 006D;;;1000;N;;;216F;;216F +2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;; +2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;; +2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;; +2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184; +2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183 +2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;; +2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;; +2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;; +2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;; +2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;; +2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;; +2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;; +2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;; +2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; +2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;; +2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;; +2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;; +2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;; +2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;; +219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;; +219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;; +219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;; +219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;; +219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;; +219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;; +21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;; +21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;; +21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;; +21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;; +21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;; +21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;; +21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;; +21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;; +21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;; +21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;; +21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;; +21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;; +21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;; +21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;; +21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;; +21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;; +21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;; +21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;; +21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;; +21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;; +21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;; +21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;; +21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; +21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;; +21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;; +21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;; +21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; +21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;; +21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;; +21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;; +21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;; +21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;; +21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;; +21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;; +21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;; +21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;; +21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;; +21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;; +21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;; +21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;; +21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;; +21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;; +21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;; +21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;; +21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;; +21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;; +21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;; +21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;; +21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;; +21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;; +21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;; +21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;; +21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;; +21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;; +21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;; +21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;; +21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;; +21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;; +21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;; +21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;; +21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;; +21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;; +21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;; +21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;; +21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;; +21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;; +21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;; +21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;; +21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;; +21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;; +21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;; +21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;; +21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;; +21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;; +21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; +21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;; +21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;; +21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;; +21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;; +21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;; +21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;; +21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;; +21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;; +21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;; +21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; +21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; +21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; +21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;; +2200;FOR ALL;Sm;0;ON;;;;;N;;;;; +2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;; +2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;; +2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;; +2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;; +2205;EMPTY SET;Sm;0;ON;;;;;N;;;;; +2206;INCREMENT;Sm;0;ON;;;;;N;;;;; +2207;NABLA;Sm;0;ON;;;;;N;;;;; +2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;; +2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;; +220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;; +220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; +220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;; +220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;; +220E;END OF PROOF;Sm;0;ON;;;;;N;;;;; +220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;; +2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;; +2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;; +2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;; +2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;; +2214;DOT PLUS;Sm;0;ON;;;;;N;;;;; +2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; +2216;SET MINUS;Sm;0;ON;;;;;Y;;;;; +2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; +2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;; +2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;; +221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;; +221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;; +221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;; +221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;; +221E;INFINITY;Sm;0;ON;;;;;N;;;;; +221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;; +2220;ANGLE;Sm;0;ON;;;;;Y;;;;; +2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;; +2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;; +2223;DIVIDES;Sm;0;ON;;;;;N;;;;; +2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;; +2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;; +2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;; +2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2229;INTERSECTION;Sm;0;ON;;;;;N;;;;; +222A;UNION;Sm;0;ON;;;;;N;;;;; +222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;; +222C;DOUBLE INTEGRAL;Sm;0;ON; 222B 222B;;;;Y;;;;; +222D;TRIPLE INTEGRAL;Sm;0;ON; 222B 222B 222B;;;;Y;;;;; +222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; +222F;SURFACE INTEGRAL;Sm;0;ON; 222E 222E;;;;Y;;;;; +2230;VOLUME INTEGRAL;Sm;0;ON; 222E 222E 222E;;;;Y;;;;; +2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2234;THEREFORE;Sm;0;ON;;;;;N;;;;; +2235;BECAUSE;Sm;0;ON;;;;;N;;;;; +2236;RATIO;Sm;0;ON;;;;;N;;;;; +2237;PROPORTION;Sm;0;ON;;;;;N;;;;; +2238;DOT MINUS;Sm;0;ON;;;;;N;;;;; +2239;EXCESS;Sm;0;ON;;;;;Y;;;;; +223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;; +223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;; +223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;; +223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;; +223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;; +2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;; +2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;; +2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;; +2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;; +2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;; +2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;; +224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;; +224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;; +224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; +224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; +224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;; +2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;; +2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;; +2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;; +2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;; +2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;; +2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;; +2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;; +2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;; +2259;ESTIMATES;Sm;0;ON;;;;;N;;;;; +225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;; +225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;; +225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;; +225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;; +225E;MEASURED BY;Sm;0;ON;;;;;N;;;;; +225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;; +2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;; +2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;; +2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;; +2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;; +2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;; +2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;; +2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;; +2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;; +2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;; +226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;; +226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;; +226C;BETWEEN;Sm;0;ON;;;;;N;;;;; +226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;; +226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;; +226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;; +2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;; +2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;; +2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;; +2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;; +2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;; +2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;; +2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;; +2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;; +2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;; +2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;; +227A;PRECEDES;Sm;0;ON;;;;;Y;;;;; +227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;; +227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;; +2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;; +2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;; +2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;; +2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;; +2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;; +2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;; +2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;; +228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;; +228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;; +228C;MULTISET;Sm;0;ON;;;;;Y;;;;; +228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;; +228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;; +228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;; +2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; +2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;; +2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;; +2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; +2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;; +2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;; +2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; +2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;; +229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;; +229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;; +229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;; +229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;; +229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;; +22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;; +22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;; +22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;; +22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;; +22A5;UP TACK;Sm;0;ON;;;;;N;;;;; +22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;; +22A7;MODELS;Sm;0;ON;;;;;Y;;;;; +22A8;TRUE;Sm;0;ON;;;;;Y;;;;; +22A9;FORCES;Sm;0;ON;;;;;Y;;;;; +22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;; +22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;; +22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;; +22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;; +22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;; +22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;; +22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;; +22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;; +22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;; +22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;; +22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;; +22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;; +22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;; +22BB;XOR;Sm;0;ON;;;;;N;;;;; +22BC;NAND;Sm;0;ON;;;;;N;;;;; +22BD;NOR;Sm;0;ON;;;;;N;;;;; +22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;; +22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; +22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;; +22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;; +22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;; +22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;; +22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;; +22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;; +22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;; +22C8;BOWTIE;Sm;0;ON;;;;;N;;;;; +22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;; +22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;; +22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;; +22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;; +22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;; +22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;; +22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;; +22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;; +22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;; +22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;; +22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;; +22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;; +22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;; +22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;; +22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;; +22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;; +22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;; +22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;; +22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;; +22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;; +22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;; +22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;; +22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;; +22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;; +22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;; +22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;; +22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;; +22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;; +22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;; +22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;; +22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;; +22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; +22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;; +22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; +22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;; +22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;; +22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;; +2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;; +2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;; +2302;HOUSE;So;0;ON;;;;;N;;;;; +2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;; +2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;; +2305;PROJECTIVE;So;0;ON;;;;;N;;;;; +2306;PERSPECTIVE;So;0;ON;;;;;N;;;;; +2307;WAVY LINE;So;0;ON;;;;;N;;;;; +2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;; +2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;; +230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;; +230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;; +230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;; +230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;; +230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;; +230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;; +2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;; +2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;; +2312;ARC;So;0;ON;;;;;N;;;;; +2313;SEGMENT;So;0;ON;;;;;N;;;;; +2314;SECTOR;So;0;ON;;;;;N;;;;; +2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;; +2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;; +2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;; +2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;; +2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;; +231A;WATCH;So;0;ON;;;;;N;;;;; +231B;HOURGLASS;So;0;ON;;;;;N;;;;; +231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;; +231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;; +231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;; +231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;; +2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2322;FROWN;So;0;ON;;;;;N;;;;; +2323;SMILE;So;0;ON;;;;;N;;;;; +2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;; +2325;OPTION KEY;So;0;ON;;;;;N;;;;; +2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;; +2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;; +2328;KEYBOARD;So;0;ON;;;;;N;;;;; +2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;; +232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;; +232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;; +232C;BENZENE RING;So;0;ON;;;;;N;;;;; +232D;CYLINDRICITY;So;0;ON;;;;;N;;;;; +232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;; +232F;SYMMETRY;So;0;ON;;;;;N;;;;; +2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;; +2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;; +2332;CONICAL TAPER;So;0;ON;;;;;N;;;;; +2333;SLOPE;So;0;ON;;;;;N;;;;; +2334;COUNTERBORE;So;0;ON;;;;;N;;;;; +2335;COUNTERSINK;So;0;ON;;;;;N;;;;; +2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;; +2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;; +2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;; +2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;; +233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;; +233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;; +233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;; +233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;; +233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;; +233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;; +2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;; +2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;; +2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;; +2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;; +2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;; +2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;; +2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;; +2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;; +2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;; +2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;; +234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;; +234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;; +234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;; +234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;; +234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;; +234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;; +2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;; +2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;; +2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;; +2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;; +2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;; +2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;; +2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;; +2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;; +2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;; +2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;; +235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;; +235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;; +235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;; +235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;; +235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;; +235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;; +2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;; +2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;; +2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;; +2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;; +2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;; +2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;; +2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;; +2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;; +2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;; +2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;; +236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;; +236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;; +236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;; +236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;; +236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;; +236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;; +2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;; +2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;; +2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;; +2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;; +2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;; +2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;; +2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;; +2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;; +2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;; +2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;; +237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;; +237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;; +237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;; +237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;; +237E;BELL SYMBOL;So;0;ON;;;;;N;;;;; +237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;; +2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;; +2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; +2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;; +2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;; +2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;; +2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;; +2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;; +2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;; +2388;HELM SYMBOL;So;0;ON;;;;;N;;;;; +2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;; +238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;; +238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;; +238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;; +238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;; +238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;; +238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;; +2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;; +2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; +2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;; +2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;; +2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;; +2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;; +2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;; +2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;; +2398;NEXT PAGE;So;0;ON;;;;;N;;;;; +2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;; +239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;; +239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; +239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; +239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; +239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;; +239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;; +23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;; +23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; +23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; +23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; +23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;; +23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; +23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;; +23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; +23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; +23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; +23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;; +23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;; +23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;; +23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;; +23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;; +23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;; +23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; +23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; +23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;; +23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;; +23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;; +23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; +23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; +23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;; +23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;; +23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;; +23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;; +23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;; +23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;; +23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;; +23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; +23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;; +23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; +23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; +23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;; +23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;; +23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; +23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;; +23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;; +23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;; +23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;; +23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;; +23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;; +23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;; +23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;; +23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;; +23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;; +23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;; +23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;; +23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;; +23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;; +23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;; +23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;; +23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;; +23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;; +23DA;EARTH GROUND;So;0;ON;;;;;N;;;;; +23DB;FUSE;So;0;ON;;;;;N;;;;; +23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;; +23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;; +23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;; +23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;; +23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;; +23E5;FLATNESS;So;0;ON;;;;;N;;;;; +23E6;AC CURRENT;So;0;ON;;;;;N;;;;; +23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;; +2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;; +2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;; +2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;; +2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;; +2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;; +2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;; +2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;; +2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;; +2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;; +2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;; +240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;; +240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;; +240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;; +240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;; +240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;; +240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;; +2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;; +2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;; +2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;; +2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;; +2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;; +2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;; +2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;; +2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;; +2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;; +2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;; +241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;; +241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;; +241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;; +241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;; +241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;; +241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;; +2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;; +2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;; +2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;; +2423;OPEN BOX;So;0;ON;;;;;N;;;;; +2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;; +2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;; +2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;; +2440;OCR HOOK;So;0;ON;;;;;N;;;;; +2441;OCR CHAIR;So;0;ON;;;;;N;;;;; +2442;OCR FORK;So;0;ON;;;;;N;;;;; +2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;; +2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;; +2445;OCR BOW TIE;So;0;ON;;;;;N;;;;; +2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;; +2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;; +2448;OCR DASH;So;0;ON;;;;;N;;;;; +2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;; +244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;; +2460;CIRCLED DIGIT ONE;No;0;ON; 0031;;1;1;N;;;;; +2461;CIRCLED DIGIT TWO;No;0;ON; 0032;;2;2;N;;;;; +2462;CIRCLED DIGIT THREE;No;0;ON; 0033;;3;3;N;;;;; +2463;CIRCLED DIGIT FOUR;No;0;ON; 0034;;4;4;N;;;;; +2464;CIRCLED DIGIT FIVE;No;0;ON; 0035;;5;5;N;;;;; +2465;CIRCLED DIGIT SIX;No;0;ON; 0036;;6;6;N;;;;; +2466;CIRCLED DIGIT SEVEN;No;0;ON; 0037;;7;7;N;;;;; +2467;CIRCLED DIGIT EIGHT;No;0;ON; 0038;;8;8;N;;;;; +2468;CIRCLED DIGIT NINE;No;0;ON; 0039;;9;9;N;;;;; +2469;CIRCLED NUMBER TEN;No;0;ON; 0031 0030;;;10;N;;;;; +246A;CIRCLED NUMBER ELEVEN;No;0;ON; 0031 0031;;;11;N;;;;; +246B;CIRCLED NUMBER TWELVE;No;0;ON; 0031 0032;;;12;N;;;;; +246C;CIRCLED NUMBER THIRTEEN;No;0;ON; 0031 0033;;;13;N;;;;; +246D;CIRCLED NUMBER FOURTEEN;No;0;ON; 0031 0034;;;14;N;;;;; +246E;CIRCLED NUMBER FIFTEEN;No;0;ON; 0031 0035;;;15;N;;;;; +246F;CIRCLED NUMBER SIXTEEN;No;0;ON; 0031 0036;;;16;N;;;;; +2470;CIRCLED NUMBER SEVENTEEN;No;0;ON; 0031 0037;;;17;N;;;;; +2471;CIRCLED NUMBER EIGHTEEN;No;0;ON; 0031 0038;;;18;N;;;;; +2472;CIRCLED NUMBER NINETEEN;No;0;ON; 0031 0039;;;19;N;;;;; +2473;CIRCLED NUMBER TWENTY;No;0;ON; 0032 0030;;;20;N;;;;; +2474;PARENTHESIZED DIGIT ONE;No;0;ON; 0028 0031 0029;;1;1;N;;;;; +2475;PARENTHESIZED DIGIT TWO;No;0;ON; 0028 0032 0029;;2;2;N;;;;; +2476;PARENTHESIZED DIGIT THREE;No;0;ON; 0028 0033 0029;;3;3;N;;;;; +2477;PARENTHESIZED DIGIT FOUR;No;0;ON; 0028 0034 0029;;4;4;N;;;;; +2478;PARENTHESIZED DIGIT FIVE;No;0;ON; 0028 0035 0029;;5;5;N;;;;; +2479;PARENTHESIZED DIGIT SIX;No;0;ON; 0028 0036 0029;;6;6;N;;;;; +247A;PARENTHESIZED DIGIT SEVEN;No;0;ON; 0028 0037 0029;;7;7;N;;;;; +247B;PARENTHESIZED DIGIT EIGHT;No;0;ON; 0028 0038 0029;;8;8;N;;;;; +247C;PARENTHESIZED DIGIT NINE;No;0;ON; 0028 0039 0029;;9;9;N;;;;; +247D;PARENTHESIZED NUMBER TEN;No;0;ON; 0028 0031 0030 0029;;;10;N;;;;; +247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON; 0028 0031 0031 0029;;;11;N;;;;; +247F;PARENTHESIZED NUMBER TWELVE;No;0;ON; 0028 0031 0032 0029;;;12;N;;;;; +2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON; 0028 0031 0033 0029;;;13;N;;;;; +2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON; 0028 0031 0034 0029;;;14;N;;;;; +2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON; 0028 0031 0035 0029;;;15;N;;;;; +2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON; 0028 0031 0036 0029;;;16;N;;;;; +2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON; 0028 0031 0037 0029;;;17;N;;;;; +2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON; 0028 0031 0038 0029;;;18;N;;;;; +2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON; 0028 0031 0039 0029;;;19;N;;;;; +2487;PARENTHESIZED NUMBER TWENTY;No;0;ON; 0028 0032 0030 0029;;;20;N;;;;; +2488;DIGIT ONE FULL STOP;No;0;EN; 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;; +2489;DIGIT TWO FULL STOP;No;0;EN; 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;; +248A;DIGIT THREE FULL STOP;No;0;EN; 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;; +248B;DIGIT FOUR FULL STOP;No;0;EN; 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;; +248C;DIGIT FIVE FULL STOP;No;0;EN; 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;; +248D;DIGIT SIX FULL STOP;No;0;EN; 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;; +248E;DIGIT SEVEN FULL STOP;No;0;EN; 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;; +248F;DIGIT EIGHT FULL STOP;No;0;EN; 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;; +2490;DIGIT NINE FULL STOP;No;0;EN; 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;; +2491;NUMBER TEN FULL STOP;No;0;EN; 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;; +2492;NUMBER ELEVEN FULL STOP;No;0;EN; 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;; +2493;NUMBER TWELVE FULL STOP;No;0;EN; 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;; +2494;NUMBER THIRTEEN FULL STOP;No;0;EN; 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;; +2495;NUMBER FOURTEEN FULL STOP;No;0;EN; 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;; +2496;NUMBER FIFTEEN FULL STOP;No;0;EN; 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;; +2497;NUMBER SIXTEEN FULL STOP;No;0;EN; 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;; +2498;NUMBER SEVENTEEN FULL STOP;No;0;EN; 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;; +2499;NUMBER EIGHTEEN FULL STOP;No;0;EN; 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;; +249A;NUMBER NINETEEN FULL STOP;No;0;EN; 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;; +249B;NUMBER TWENTY FULL STOP;No;0;EN; 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;; +249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L; 0028 0061 0029;;;;N;;;;; +249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L; 0028 0062 0029;;;;N;;;;; +249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L; 0028 0063 0029;;;;N;;;;; +249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L; 0028 0064 0029;;;;N;;;;; +24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L; 0028 0065 0029;;;;N;;;;; +24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L; 0028 0066 0029;;;;N;;;;; +24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L; 0028 0067 0029;;;;N;;;;; +24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L; 0028 0068 0029;;;;N;;;;; +24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L; 0028 0069 0029;;;;N;;;;; +24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L; 0028 006A 0029;;;;N;;;;; +24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L; 0028 006B 0029;;;;N;;;;; +24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L; 0028 006C 0029;;;;N;;;;; +24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L; 0028 006D 0029;;;;N;;;;; +24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L; 0028 006E 0029;;;;N;;;;; +24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L; 0028 006F 0029;;;;N;;;;; +24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L; 0028 0070 0029;;;;N;;;;; +24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L; 0028 0071 0029;;;;N;;;;; +24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L; 0028 0072 0029;;;;N;;;;; +24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L; 0028 0073 0029;;;;N;;;;; +24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L; 0028 0074 0029;;;;N;;;;; +24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L; 0028 0075 0029;;;;N;;;;; +24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L; 0028 0076 0029;;;;N;;;;; +24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L; 0028 0077 0029;;;;N;;;;; +24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L; 0028 0078 0029;;;;N;;;;; +24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L; 0028 0079 0029;;;;N;;;;; +24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L; 0028 007A 0029;;;;N;;;;; +24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L; 0041;;;;N;;;;24D0; +24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L; 0042;;;;N;;;;24D1; +24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L; 0043;;;;N;;;;24D2; +24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L; 0044;;;;N;;;;24D3; +24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L; 0045;;;;N;;;;24D4; +24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L; 0046;;;;N;;;;24D5; +24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L; 0047;;;;N;;;;24D6; +24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L; 0048;;;;N;;;;24D7; +24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L; 0049;;;;N;;;;24D8; +24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L; 004A;;;;N;;;;24D9; +24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L; 004B;;;;N;;;;24DA; +24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L; 004C;;;;N;;;;24DB; +24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L; 004D;;;;N;;;;24DC; +24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L; 004E;;;;N;;;;24DD; +24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L; 004F;;;;N;;;;24DE; +24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L; 0050;;;;N;;;;24DF; +24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L; 0051;;;;N;;;;24E0; +24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L; 0052;;;;N;;;;24E1; +24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L; 0053;;;;N;;;;24E2; +24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L; 0054;;;;N;;;;24E3; +24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L; 0055;;;;N;;;;24E4; +24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L; 0056;;;;N;;;;24E5; +24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L; 0057;;;;N;;;;24E6; +24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L; 0058;;;;N;;;;24E7; +24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L; 0059;;;;N;;;;24E8; +24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L; 005A;;;;N;;;;24E9; +24D0;CIRCLED LATIN SMALL LETTER A;So;0;L; 0061;;;;N;;;24B6;;24B6 +24D1;CIRCLED LATIN SMALL LETTER B;So;0;L; 0062;;;;N;;;24B7;;24B7 +24D2;CIRCLED LATIN SMALL LETTER C;So;0;L; 0063;;;;N;;;24B8;;24B8 +24D3;CIRCLED LATIN SMALL LETTER D;So;0;L; 0064;;;;N;;;24B9;;24B9 +24D4;CIRCLED LATIN SMALL LETTER E;So;0;L; 0065;;;;N;;;24BA;;24BA +24D5;CIRCLED LATIN SMALL LETTER F;So;0;L; 0066;;;;N;;;24BB;;24BB +24D6;CIRCLED LATIN SMALL LETTER G;So;0;L; 0067;;;;N;;;24BC;;24BC +24D7;CIRCLED LATIN SMALL LETTER H;So;0;L; 0068;;;;N;;;24BD;;24BD +24D8;CIRCLED LATIN SMALL LETTER I;So;0;L; 0069;;;;N;;;24BE;;24BE +24D9;CIRCLED LATIN SMALL LETTER J;So;0;L; 006A;;;;N;;;24BF;;24BF +24DA;CIRCLED LATIN SMALL LETTER K;So;0;L; 006B;;;;N;;;24C0;;24C0 +24DB;CIRCLED LATIN SMALL LETTER L;So;0;L; 006C;;;;N;;;24C1;;24C1 +24DC;CIRCLED LATIN SMALL LETTER M;So;0;L; 006D;;;;N;;;24C2;;24C2 +24DD;CIRCLED LATIN SMALL LETTER N;So;0;L; 006E;;;;N;;;24C3;;24C3 +24DE;CIRCLED LATIN SMALL LETTER O;So;0;L; 006F;;;;N;;;24C4;;24C4 +24DF;CIRCLED LATIN SMALL LETTER P;So;0;L; 0070;;;;N;;;24C5;;24C5 +24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L; 0071;;;;N;;;24C6;;24C6 +24E1;CIRCLED LATIN SMALL LETTER R;So;0;L; 0072;;;;N;;;24C7;;24C7 +24E2;CIRCLED LATIN SMALL LETTER S;So;0;L; 0073;;;;N;;;24C8;;24C8 +24E3;CIRCLED LATIN SMALL LETTER T;So;0;L; 0074;;;;N;;;24C9;;24C9 +24E4;CIRCLED LATIN SMALL LETTER U;So;0;L; 0075;;;;N;;;24CA;;24CA +24E5;CIRCLED LATIN SMALL LETTER V;So;0;L; 0076;;;;N;;;24CB;;24CB +24E6;CIRCLED LATIN SMALL LETTER W;So;0;L; 0077;;;;N;;;24CC;;24CC +24E7;CIRCLED LATIN SMALL LETTER X;So;0;L; 0078;;;;N;;;24CD;;24CD +24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L; 0079;;;;N;;;24CE;;24CE +24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L; 007A;;;;N;;;24CF;;24CF +24EA;CIRCLED DIGIT ZERO;No;0;ON; 0030;;0;0;N;;;;; +24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;; +24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;; +24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;; +24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;; +24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;; +24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;; +24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;; +24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;; +24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;; +24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;; +24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;; +24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;; +24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;; +24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;; +24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;; +24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;; +24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;; +24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;; +24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;; +24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;; +24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;; +2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;; +2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;; +2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;; +2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;; +2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;; +2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;; +2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;; +2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;; +2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;; +2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;; +250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;; +250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;; +250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;; +250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;; +250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;; +250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;; +2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;; +2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;; +2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;; +2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;; +2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;; +2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;; +2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;; +2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;; +2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;; +2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;; +251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;; +251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;; +251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;; +251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;; +251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;; +251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;; +2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;; +2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;; +2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;; +2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;; +2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;; +2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;; +2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;; +2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;; +2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;; +2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;; +252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;; +252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;; +252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;; +252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;; +252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;; +252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;; +2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;; +2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;; +2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;; +2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;; +2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;; +2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;; +2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;; +2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;; +2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;; +2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;; +253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;; +253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;; +253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;; +253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;; +253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;; +253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;; +2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;; +2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;; +2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;; +2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;; +2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;; +2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;; +2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;; +2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;; +2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;; +2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;; +254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;; +254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;; +254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;; +254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;; +254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;; +254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;; +2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;; +2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;; +2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;; +2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;; +2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;; +2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;; +2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;; +2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;; +2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;; +2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;; +255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;; +255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;; +255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;; +255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;; +255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;; +255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;; +2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;; +2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;; +2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;; +2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;; +2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;; +2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;; +2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;; +2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;; +2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;; +2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;; +256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;; +256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;; +256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;; +256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;; +256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;; +256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;; +2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;; +2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;; +2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;; +2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;; +2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;; +2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;; +2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;; +2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;; +2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;; +2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;; +257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;; +257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;; +257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;; +257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;; +257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;; +257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;; +2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;; +2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;; +2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;; +2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +2588;FULL BLOCK;So;0;ON;;;;;N;;;;; +2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;; +258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;; +258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;; +258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;; +258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;; +2591;LIGHT SHADE;So;0;ON;;;;;N;;;;; +2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;; +2593;DARK SHADE;So;0;ON;;;;;N;;;;; +2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;; +2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;; +2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;; +2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;; +2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; +259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;; +259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;; +259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;; +25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;; +25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;; +25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;; +25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; +25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;; +25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; +25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; +25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;; +25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;; +25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;; +25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;; +25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;; +25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;; +25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;; +25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; +25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;; +25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;; +25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;; +25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;; +25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;; +25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;; +25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;; +25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;; +25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;; +25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;; +25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;; +25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;; +25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;; +25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;; +25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;; +25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;; +25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;; +25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;; +25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;; +25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;; +25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;; +25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;; +25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;; +25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;; +25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;; +25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; +25C9;FISHEYE;So;0;ON;;;;;N;;;;; +25CA;LOZENGE;So;0;ON;;;;;N;;;;; +25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;; +25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;; +25CE;BULLSEYE;So;0;ON;;;;;N;;;;; +25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;; +25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; +25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; +25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;; +25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;; +25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;; +25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;; +25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;; +25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;; +25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;; +25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;; +25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;; +25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;; +25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; +25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; +25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;; +25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;; +25E6;WHITE BULLET;So;0;ON;;;;;N;;;;; +25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; +25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; +25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;; +25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;; +25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;; +25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;; +25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;; +25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;; +25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;; +25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; +25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; +25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;; +25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; +25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;; +25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; +25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;; +25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;; +2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;; +2601;CLOUD;So;0;ON;;;;;N;;;;; +2602;UMBRELLA;So;0;ON;;;;;N;;;;; +2603;SNOWMAN;So;0;ON;;;;;N;;;;; +2604;COMET;So;0;ON;;;;;N;;;;; +2605;BLACK STAR;So;0;ON;;;;;N;;;;; +2606;WHITE STAR;So;0;ON;;;;;N;;;;; +2607;LIGHTNING;So;0;ON;;;;;N;;;;; +2608;THUNDERSTORM;So;0;ON;;;;;N;;;;; +2609;SUN;So;0;ON;;;;;N;;;;; +260A;ASCENDING NODE;So;0;ON;;;;;N;;;;; +260B;DESCENDING NODE;So;0;ON;;;;;N;;;;; +260C;CONJUNCTION;So;0;ON;;;;;N;;;;; +260D;OPPOSITION;So;0;ON;;;;;N;;;;; +260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;; +260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;; +2610;BALLOT BOX;So;0;ON;;;;;N;;;;; +2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;; +2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;; +2613;SALTIRE;So;0;ON;;;;;N;;;;; +2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;; +2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;; +2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; +2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; +2618;SHAMROCK;So;0;ON;;;;;N;;;;; +2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; +261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; +261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; +261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; +261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;; +261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; +261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;; +2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;; +2621;CAUTION SIGN;So;0;ON;;;;;N;;;;; +2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;; +2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;; +2624;CADUCEUS;So;0;ON;;;;;N;;;;; +2625;ANKH;So;0;ON;;;;;N;;;;; +2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;; +2627;CHI RHO;So;0;ON;;;;;N;;;;; +2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;; +2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;; +262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;; +262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;; +262C;ADI SHAKTI;So;0;ON;;;;;N;;;;; +262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;; +262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;; +262F;YIN YANG;So;0;ON;;;;;N;;;;; +2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;; +2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;; +2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;; +2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;; +2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;; +2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;; +2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;; +2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; +2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;; +2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;; +263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;; +263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;; +263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;; +263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;; +263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;; +263F;MERCURY;So;0;ON;;;;;N;;;;; +2640;FEMALE SIGN;So;0;ON;;;;;N;;;;; +2641;EARTH;So;0;ON;;;;;N;;;;; +2642;MALE SIGN;So;0;ON;;;;;N;;;;; +2643;JUPITER;So;0;ON;;;;;N;;;;; +2644;SATURN;So;0;ON;;;;;N;;;;; +2645;URANUS;So;0;ON;;;;;N;;;;; +2646;NEPTUNE;So;0;ON;;;;;N;;;;; +2647;PLUTO;So;0;ON;;;;;N;;;;; +2648;ARIES;So;0;ON;;;;;N;;;;; +2649;TAURUS;So;0;ON;;;;;N;;;;; +264A;GEMINI;So;0;ON;;;;;N;;;;; +264B;CANCER;So;0;ON;;;;;N;;;;; +264C;LEO;So;0;ON;;;;;N;;;;; +264D;VIRGO;So;0;ON;;;;;N;;;;; +264E;LIBRA;So;0;ON;;;;;N;;;;; +264F;SCORPIUS;So;0;ON;;;;;N;;;;; +2650;SAGITTARIUS;So;0;ON;;;;;N;;;;; +2651;CAPRICORN;So;0;ON;;;;;N;;;;; +2652;AQUARIUS;So;0;ON;;;;;N;;;;; +2653;PISCES;So;0;ON;;;;;N;;;;; +2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;; +2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;; +2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;; +2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;; +2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;; +2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;; +265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;; +265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;; +265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;; +265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;; +265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;; +265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;; +2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;; +2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;; +2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;; +2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;; +2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;; +2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;; +2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;; +2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;; +2668;HOT SPRINGS;So;0;ON;;;;;N;;;;; +2669;QUARTER NOTE;So;0;ON;;;;;N;;;;; +266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;; +266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;; +266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;; +266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;; +266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;; +266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;; +2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;; +2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;; +2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; +2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;pete;;; +2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;hdpe;;; +2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;pvc;;; +2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;ldpe;;; +2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;pp;;; +2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;ps;;; +2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;other;;; +267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;; +267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; +267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; +267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; +267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;; +267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;; +2680;DIE FACE-1;So;0;ON;;;;;N;;;;; +2681;DIE FACE-2;So;0;ON;;;;;N;;;;; +2682;DIE FACE-3;So;0;ON;;;;;N;;;;; +2683;DIE FACE-4;So;0;ON;;;;;N;;;;; +2684;DIE FACE-5;So;0;ON;;;;;N;;;;; +2685;DIE FACE-6;So;0;ON;;;;;N;;;;; +2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;; +2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;; +2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;; +2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;; +268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;; +268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;; +268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;; +268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;; +268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;; +268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;; +2690;WHITE FLAG;So;0;ON;;;;;N;;;;; +2691;BLACK FLAG;So;0;ON;;;;;N;;;;; +2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;; +2693;ANCHOR;So;0;ON;;;;;N;;;;; +2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;; +2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;; +2696;SCALES;So;0;ON;;;;;N;;;;; +2697;ALEMBIC;So;0;ON;;;;;N;;;;; +2698;FLOWER;So;0;ON;;;;;N;;;;; +2699;GEAR;So;0;ON;;;;;N;;;;; +269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;; +269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;; +269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;; +269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; +26A0;WARNING SIGN;So;0;ON;;;;;N;;;;; +26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;; +26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;; +26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;; +26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;; +26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;; +26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;; +26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;; +26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;; +26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;; +26B0;COFFIN;So;0;ON;;;;;N;;;;; +26B1;FUNERAL URN;So;0;ON;;;;;N;;;;; +26B2;NEUTER;So;0;ON;;;;;N;;;;; +26B3;CERES;So;0;ON;;;;;N;;;;; +26B4;PALLAS;So;0;ON;;;;;N;;;;; +26B5;JUNO;So;0;ON;;;;;N;;;;; +26B6;VESTA;So;0;ON;;;;;N;;;;; +26B7;CHIRON;So;0;ON;;;;;N;;;;; +26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;; +26B9;SEXTILE;So;0;ON;;;;;N;;;;; +26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;; +26BB;QUINCUNX;So;0;ON;;;;;N;;;;; +26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;; +26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;; +26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;; +26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;; +26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;; +2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;; +2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;; +2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;; +2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;; +2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;; +2707;TAPE DRIVE;So;0;ON;;;;;N;;;;; +2708;AIRPLANE;So;0;ON;;;;;N;;;;; +2709;ENVELOPE;So;0;ON;;;;;N;;;;; +270C;VICTORY HAND;So;0;ON;;;;;N;;;;; +270D;WRITING HAND;So;0;ON;;;;;N;;;;; +270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;; +270F;PENCIL;So;0;ON;;;;;N;;;;; +2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;; +2711;WHITE NIB;So;0;ON;;;;;N;;;;; +2712;BLACK NIB;So;0;ON;;;;;N;;;;; +2713;CHECK MARK;So;0;ON;;;;;N;;;;; +2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;; +2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;; +2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;; +2717;BALLOT X;So;0;ON;;;;;N;;;;; +2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;; +2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;; +271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;; +271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;; +271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;; +271D;LATIN CROSS;So;0;ON;;;;;N;;;;; +271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;; +271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;; +2720;MALTESE CROSS;So;0;ON;;;;;N;;;;; +2721;STAR OF DAVID;So;0;ON;;;;;N;;;;; +2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;; +2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;; +2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; +272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;; +272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;; +272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;; +272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; +272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;; +272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;; +2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;; +2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;; +2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;; +2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;; +2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;; +2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;; +2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; +2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;; +2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;; +273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;; +273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;; +273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;; +273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;; +2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;; +2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;; +2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;; +2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;; +2744;SNOWFLAKE;So;0;ON;;;;;N;;;;; +2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;; +2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;; +2747;SPARKLE;So;0;ON;;;;;N;;;;; +2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;; +2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;; +274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; +274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;; +274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;; +274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;; +2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;; +2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;; +2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;; +275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;; +275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;; +2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;; +2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;; +2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;; +2766;FLORAL HEART;So;0;ON;;;;;N;;;;; +2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; +2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; +276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;; +276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;; +276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;; +276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;; +2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;; +2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;; +2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;; +2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;; +2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;; +277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;; +277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;; +277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;; +277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;; +277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;; +277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;; +2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;; +2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;; +2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;; +2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;; +2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;; +2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;; +2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;; +2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;; +2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;; +2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;; +278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;; +278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;; +278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;; +278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;; +278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;; +278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;; +2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;; +2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;; +2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;; +2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;; +2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;; +2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;; +2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;; +279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;; +279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;; +279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;; +279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;; +279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;; +279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;; +27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;; +27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;; +27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;; +27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;; +27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;; +27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;; +27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;; +27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;; +27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;; +27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;; +27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;; +27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;; +27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;; +27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;; +27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;; +27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;; +27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;; +27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;; +27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;; +27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;; +27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;; +27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;; +27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;; +27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;; +27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;; +27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;; +27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;; +27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;; +27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;; +27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;; +27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;; +27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;; +27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;; +27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;; +27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;; +27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;; +27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;; +27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;; +27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;; +27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;; +27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;; +27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; +27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;; +27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; +27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;; +27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;; +27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;; +27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;; +27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;; +27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;; +27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;; +27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;; +27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;; +27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;; +27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;; +27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;; +27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;; +27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;; +27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; +27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; +27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; +27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; +27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; +27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; +27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; +27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; +27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; +27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;; +27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;; +27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; +2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;; +2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;; +2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;; +2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;; +2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;; +2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;; +2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;; +2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;; +2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;; +2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;; +280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;; +280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;; +280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;; +280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;; +280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;; +280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;; +2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;; +2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;; +2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;; +2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;; +2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;; +2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;; +2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;; +2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;; +2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;; +2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;; +281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;; +281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;; +281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;; +281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;; +281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;; +281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;; +2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;; +2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;; +2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;; +2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;; +2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;; +2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;; +2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;; +2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;; +2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;; +2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;; +282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;; +282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;; +282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;; +282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;; +282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;; +282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;; +2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;; +2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;; +2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;; +2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;; +2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;; +2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;; +2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;; +2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;; +2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;; +2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;; +283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;; +283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;; +283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;; +283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;; +283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;; +283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;; +2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;; +2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;; +2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;; +2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;; +2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;; +2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;; +2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;; +2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;; +2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;; +2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;; +284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;; +284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;; +284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;; +284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;; +284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;; +284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;; +2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;; +2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;; +2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;; +2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;; +2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;; +2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;; +2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;; +2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;; +2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;; +2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;; +285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;; +285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;; +285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;; +285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;; +285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;; +285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;; +2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;; +2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;; +2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;; +2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;; +2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;; +2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;; +2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;; +2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;; +2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;; +2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;; +286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;; +286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;; +286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;; +286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;; +286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;; +286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;; +2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;; +2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;; +2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;; +2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;; +2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;; +2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;; +2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;; +2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;; +2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;; +2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;; +287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;; +287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;; +287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;; +287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;; +287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;; +287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;; +2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;; +2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;; +2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;; +2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;; +2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;; +2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;; +2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;; +2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;; +2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;; +2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;; +288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;; +288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;; +288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;; +288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;; +288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;; +288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;; +2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;; +2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;; +2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;; +2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;; +2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;; +2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;; +2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;; +2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;; +2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;; +2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;; +289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;; +289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;; +289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;; +289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;; +289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;; +289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;; +28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;; +28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;; +28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;; +28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;; +28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;; +28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;; +28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;; +28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;; +28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;; +28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;; +28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;; +28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;; +28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;; +28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;; +28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;; +28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;; +28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;; +28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;; +28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;; +28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;; +28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;; +28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;; +28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;; +28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;; +28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;; +28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;; +28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;; +28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;; +28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;; +28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;; +28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;; +28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;; +28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;; +28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;; +28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;; +28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;; +28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;; +28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;; +28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;; +28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;; +28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;; +28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;; +28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;; +28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;; +28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;; +28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;; +28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;; +28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;; +28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;; +28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;; +28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;; +28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;; +28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;; +28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;; +28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;; +28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;; +28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;; +28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;; +28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;; +28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;; +28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;; +28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;; +28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;; +28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;; +28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;; +28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;; +28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;; +28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;; +28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;; +28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;; +28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;; +28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;; +28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;; +28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;; +28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;; +28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;; +28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;; +28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;; +28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;; +28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;; +28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;; +28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;; +28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;; +28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;; +28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;; +28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;; +28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;; +28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;; +28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;; +28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;; +28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;; +28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;; +28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;; +28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;; +28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;; +28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;; +2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; +290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;; +290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; +2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; +2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;; +2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; +2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;; +291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;; +2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;; +292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;; +292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;; +2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;; +2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;; +2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;; +2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;; +2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;; +2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;; +2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;; +293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;; +293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;; +2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; +2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; +2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;; +2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; +2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; +294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; +294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; +294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; +294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;; +294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;; +2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;; +2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;; +2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; +2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;; +2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; +2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;; +2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; +2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;; +2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; +2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;; +295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; +295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;; +295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; +295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;; +295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; +295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;; +2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; +2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;; +2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; +2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;; +2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;; +296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; +296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; +296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;; +296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;; +296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;; +2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;; +2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;; +2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;; +297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;; +297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;; +297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;; +297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;; +2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;; +2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;; +2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;; +2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;; +2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;; +2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;; +2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;; +2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;; +298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;; +298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;; +298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;; +298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;; +298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;; +298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;; +2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;; +2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;; +2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;; +2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; +2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; +2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;; +2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;; +2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; +2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; +2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;; +299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;; +299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; +299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;; +299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;; +299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;; +299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;; +29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;; +29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;; +29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;; +29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;; +29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;; +29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;; +29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;; +29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;; +29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;; +29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;; +29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;; +29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;; +29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;; +29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;; +29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;; +29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; +29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;; +29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;; +29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;; +29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; +29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;; +29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;; +29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; +29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;; +29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;; +29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;; +29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;; +29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; +29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;; +29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; +29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;; +29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;; +29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;; +29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;; +29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;; +29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;; +29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;; +29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;; +29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;; +29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;; +29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;; +29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; +29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; +29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;; +29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;; +29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;; +29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;; +29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;; +29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;; +29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;; +29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;; +29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; +29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; +29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;; +29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;; +29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;; +29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;; +29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; +29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;; +29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; +29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;; +29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;; +29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;; +29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;; +29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;; +29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;; +29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;; +29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;; +29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; +29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;; +29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;; +29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;; +29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;; +29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;; +29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; +29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; +29FE;TINY;Sm;0;ON;;;;;N;;;;; +29FF;MINY;Sm;0;ON;;;;;N;;;;; +2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;; +2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;; +2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; +2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;; +2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;; +2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;; +2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;; +2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;; +2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;; +2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;; +2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;; +2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON; 222B 222B 222B 222B;;;;Y;;;;; +2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;; +2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;; +2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;; +2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;; +2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;; +2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; +2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;; +2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;; +2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;; +2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;; +2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;; +2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;; +2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;; +2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +2A1D;JOIN;Sm;0;ON;;;;;N;;;;; +2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;; +2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;; +2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;; +2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;; +2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;; +2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; +2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;; +2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;; +2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;; +2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; +2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;; +2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; +2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;; +2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;; +2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; +2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;; +2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;; +2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;; +2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;; +2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;; +2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; +2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;; +2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;; +2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;; +2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;; +2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;; +2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;; +2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;; +2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;; +2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;; +2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;; +2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;; +2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;; +2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;; +2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;; +2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;; +2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;; +2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;; +2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; +2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;; +2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; +2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;; +2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; +2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;; +2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;; +2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; +2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;; +2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;; +2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;; +2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;; +2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;; +2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;; +2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;; +2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;; +2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;; +2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2A74;DOUBLE COLON EQUAL;Sm;0;ON; 003A 003A 003D;;;;Y;;;;; +2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON; 003D 003D;;;;N;;;;; +2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON; 003D 003D 003D;;;;N;;;;; +2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;; +2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;; +2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; +2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;; +2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; +2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;; +2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;; +2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;; +2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;; +2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; +2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;; +2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; +2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;; +2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;; +2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;; +2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;; +2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;; +2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; +2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;; +2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;; +2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;; +2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;; +2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;; +2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;; +2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;; +2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;; +2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;; +2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;; +2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;; +2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;; +2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; +2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;; +2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;; +2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;; +2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; +2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; +2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;; +2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;; +2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;; +2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;; +2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;; +2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;; +2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;; +2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;not independent;;; +2ADD;NONFORKING;Sm;0;ON;;;;;N;;independent;;; +2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;; +2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; +2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;; +2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;; +2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;; +2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;; +2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;; +2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;; +2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;; +2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;; +2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;; +2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; +2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;; +2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;; +2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;; +2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; +2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;; +2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;; +2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;; +2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;; +2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;; +2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;; +2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;; +2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;; +2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;; +2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;; +2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;; +2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;; +2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;; +2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; +2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; +2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; +2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; +2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; +2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; +2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; +2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; +2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; +2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; +2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;; +2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;; +2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;; +2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; +2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; +2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;; +2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;; +2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;; +2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;; +2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;; +2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;; +2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; +2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; +2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; +2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; +2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; +2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;; +2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;; +2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; +2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; +2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; +2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; +2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; +2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; +2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;; +2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;; +2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;; +2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; +2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; +2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;; +2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;; +2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;; +2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; +2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; +2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30; +2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31; +2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32; +2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33; +2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34; +2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35; +2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36; +2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37; +2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38; +2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39; +2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A; +2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B; +2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C; +2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D; +2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E; +2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F; +2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40; +2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41; +2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42; +2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43; +2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44; +2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45; +2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46; +2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47; +2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48; +2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49; +2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A; +2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B; +2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C; +2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D; +2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E; +2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F; +2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50; +2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51; +2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52; +2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53; +2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54; +2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55; +2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56; +2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57; +2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58; +2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59; +2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A; +2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B; +2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C; +2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D; +2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E; +2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00 +2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01 +2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02 +2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03 +2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04 +2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05 +2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06 +2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07 +2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08 +2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09 +2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A +2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B +2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C +2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D +2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E +2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F +2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10 +2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11 +2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12 +2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13 +2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14 +2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15 +2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16 +2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17 +2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18 +2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19 +2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A +2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B +2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C +2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D +2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E +2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F +2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20 +2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21 +2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22 +2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23 +2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24 +2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25 +2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26 +2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27 +2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28 +2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29 +2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A +2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B +2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C +2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D +2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E +2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61; +2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60 +2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B; +2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D; +2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D; +2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A +2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E +2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68; +2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67 +2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A; +2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69 +2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C; +2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B +2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251; +2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271; +2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250; +2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;; +2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73; +2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72 +2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;; +2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76; +2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75 +2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;; +2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;; +2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;; +2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;; +2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;; +2C7C;LATIN SUBSCRIPT SMALL LETTER J;Ll;0;L; 006A;;;;N;;;;; +2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L; 0056;;;;N;;;;; +2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81; +2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80 +2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83; +2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82 +2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85; +2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84 +2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87; +2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86 +2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89; +2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88 +2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B; +2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A +2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D; +2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C +2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F; +2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E +2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91; +2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90 +2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93; +2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92 +2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95; +2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94 +2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97; +2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96 +2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99; +2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98 +2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B; +2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A +2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D; +2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C +2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F; +2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E +2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1; +2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0 +2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3; +2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2 +2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5; +2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4 +2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7; +2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6 +2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9; +2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8 +2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB; +2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA +2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD; +2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC +2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF; +2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE +2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1; +2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0 +2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3; +2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2 +2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5; +2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4 +2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7; +2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6 +2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9; +2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8 +2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB; +2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA +2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD; +2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC +2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF; +2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE +2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1; +2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0 +2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3; +2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2 +2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5; +2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4 +2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7; +2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6 +2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9; +2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8 +2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB; +2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA +2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD; +2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC +2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF; +2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE +2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1; +2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0 +2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3; +2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2 +2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5; +2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4 +2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7; +2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6 +2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9; +2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8 +2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB; +2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA +2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD; +2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC +2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF; +2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE +2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1; +2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0 +2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3; +2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2 +2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;; +2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;; +2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;; +2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;; +2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;; +2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;; +2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;; +2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;; +2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; +2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; +2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;; +2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;; +2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;; +2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;; +2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;Khutsuri;10A0;;10A0 +2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;Khutsuri;10A1;;10A1 +2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;Khutsuri;10A2;;10A2 +2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;Khutsuri;10A3;;10A3 +2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;Khutsuri;10A4;;10A4 +2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;Khutsuri;10A5;;10A5 +2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;Khutsuri;10A6;;10A6 +2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7 +2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;Khutsuri;10A8;;10A8 +2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;Khutsuri;10A9;;10A9 +2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;Khutsuri;10AA;;10AA +2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;Khutsuri;10AB;;10AB +2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;Khutsuri;10AC;;10AC +2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;Khutsuri;10AD;;10AD +2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;Khutsuri;10AE;;10AE +2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;Khutsuri;10AF;;10AF +2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;Khutsuri;10B0;;10B0 +2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;Khutsuri;10B1;;10B1 +2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;Khutsuri;10B2;;10B2 +2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;Khutsuri;10B3;;10B3 +2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;Khutsuri;10B4;;10B4 +2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;Khutsuri;10B5;;10B5 +2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;Khutsuri;10B6;;10B6 +2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;Khutsuri;10B7;;10B7 +2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;Khutsuri;10B8;;10B8 +2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;Khutsuri;10B9;;10B9 +2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;Khutsuri;10BA;;10BA +2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;Khutsuri;10BB;;10BB +2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;Khutsuri;10BC;;10BC +2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;Khutsuri;10BD;;10BD +2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;Khutsuri;10BE;;10BE +2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;Khutsuri;10BF;;10BF +2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;Khutsuri;10C0;;10C0 +2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;Khutsuri;10C1;;10C1 +2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;Khutsuri;10C2;;10C2 +2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;Khutsuri;10C3;;10C3 +2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;Khutsuri;10C4;;10C4 +2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;Khutsuri;10C5;;10C5 +2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;; +2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;; +2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;; +2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;; +2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;; +2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;; +2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;; +2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;; +2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;; +2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;; +2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;; +2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;; +2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;; +2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;; +2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;; +2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;; +2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;Tuareg yab;;; +2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;; +2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;; +2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;; +2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;; +2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;; +2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;; +2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;; +2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;; +2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;; +2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;; +2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;; +2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;; +2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;; +2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;; +2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;; +2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;; +2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;; +2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;; +2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;Tuareg yaw;;; +2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;; +2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;; +2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;; +2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;; +2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;Adrar yaj;;; +2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;; +2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;; +2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;; +2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;; +2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;; +2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;; +2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;; +2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;; +2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;; +2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;; +2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;; +2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;harpoon yaz;;; +2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;; +2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L; 2D61;;;;N;;tamatart;;; +2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;; +2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;; +2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;; +2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;; +2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;; +2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;; +2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;; +2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;; +2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;; +2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;; +2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;; +2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;; +2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;; +2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;; +2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;; +2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;; +2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;; +2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;; +2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;; +2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;; +2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;; +2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;; +2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;; +2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;; +2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;; +2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;; +2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;; +2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;; +2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;; +2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;; +2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;; +2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;; +2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;; +2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;; +2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;; +2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;; +2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;; +2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; +2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; +2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; +2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;; +2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;; +2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; +2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; +2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;; +2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;; +2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;; +2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;; +2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;; +2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;; +2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;; +2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;; +2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;; +2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;; +2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;; +2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;; +2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;; +2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;; +2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;; +2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;; +2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;; +2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;; +2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;; +2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;; +2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;; +2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;; +2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;; +2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;; +2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;; +2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;; +2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;; +2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;; +2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;; +2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;; +2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;; +2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;; +2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;; +2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;; +2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;; +2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;; +2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;; +2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;; +2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;; +2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;; +2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;; +2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;; +2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;; +2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;; +2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;; +2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;; +2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;; +2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;; +2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;; +2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;; +2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;; +2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;; +2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;; +2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;; +2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;; +2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; +2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;; +2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;; +2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;; +2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;; +2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;; +2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;; +2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;; +2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;; +2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;; +2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; +2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;; +2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; +2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; +2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; +2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; +2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;; +2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;; +2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;; +2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;; +2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;; +2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;; +2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;; +2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;; +2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; +2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;; +2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;; +2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;; +2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;; +2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;; +2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;; +2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;; +2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;; +2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;; +2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;; +2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; +2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; +2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; +2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; +2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;; +2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;; +2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;; +2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;; +2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;; +2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;; +2E30;RING POINT;Po;0;ON;;;;;N;;;;; +2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; +2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; +2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; +2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;; +2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;; +2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;; +2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;; +2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;; +2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;; +2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;; +2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;; +2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;; +2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;; +2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;; +2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;; +2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;; +2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;; +2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;; +2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;; +2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;; +2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;; +2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;; +2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;; +2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;; +2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;; +2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;; +2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;; +2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;; +2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;; +2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;; +2E9F;CJK RADICAL MOTHER;So;0;ON; 6BCD;;;;N;;;;; +2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;; +2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;; +2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;; +2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;; +2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;; +2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;; +2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;; +2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;; +2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;; +2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;; +2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;; +2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;; +2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;; +2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;; +2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;; +2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;; +2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;; +2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;; +2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;; +2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;; +2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;; +2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;; +2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;; +2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;; +2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;; +2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;; +2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;; +2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;; +2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;; +2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;; +2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;; +2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;; +2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;; +2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;; +2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;; +2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;; +2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;; +2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;; +2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;; +2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;; +2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;; +2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;; +2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;; +2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;; +2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;; +2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;; +2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;; +2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;; +2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;; +2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;; +2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;; +2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;; +2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;; +2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;; +2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;; +2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;; +2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;; +2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;; +2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;; +2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;; +2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;; +2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;; +2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;; +2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;; +2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;; +2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;; +2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;; +2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;; +2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;; +2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;; +2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;; +2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;; +2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;; +2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;; +2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;; +2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; +2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;; +2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; +2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;; +2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; +2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;; +2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;; +2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;; +2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON; 9F9F;;;;N;;;;; +2F00;KANGXI RADICAL ONE;So;0;ON; 4E00;;;;N;;;;; +2F01;KANGXI RADICAL LINE;So;0;ON; 4E28;;;;N;;;;; +2F02;KANGXI RADICAL DOT;So;0;ON; 4E36;;;;N;;;;; +2F03;KANGXI RADICAL SLASH;So;0;ON; 4E3F;;;;N;;;;; +2F04;KANGXI RADICAL SECOND;So;0;ON; 4E59;;;;N;;;;; +2F05;KANGXI RADICAL HOOK;So;0;ON; 4E85;;;;N;;;;; +2F06;KANGXI RADICAL TWO;So;0;ON; 4E8C;;;;N;;;;; +2F07;KANGXI RADICAL LID;So;0;ON; 4EA0;;;;N;;;;; +2F08;KANGXI RADICAL MAN;So;0;ON; 4EBA;;;;N;;;;; +2F09;KANGXI RADICAL LEGS;So;0;ON; 513F;;;;N;;;;; +2F0A;KANGXI RADICAL ENTER;So;0;ON; 5165;;;;N;;;;; +2F0B;KANGXI RADICAL EIGHT;So;0;ON; 516B;;;;N;;;;; +2F0C;KANGXI RADICAL DOWN BOX;So;0;ON; 5182;;;;N;;;;; +2F0D;KANGXI RADICAL COVER;So;0;ON; 5196;;;;N;;;;; +2F0E;KANGXI RADICAL ICE;So;0;ON; 51AB;;;;N;;;;; +2F0F;KANGXI RADICAL TABLE;So;0;ON; 51E0;;;;N;;;;; +2F10;KANGXI RADICAL OPEN BOX;So;0;ON; 51F5;;;;N;;;;; +2F11;KANGXI RADICAL KNIFE;So;0;ON; 5200;;;;N;;;;; +2F12;KANGXI RADICAL POWER;So;0;ON; 529B;;;;N;;;;; +2F13;KANGXI RADICAL WRAP;So;0;ON; 52F9;;;;N;;;;; +2F14;KANGXI RADICAL SPOON;So;0;ON; 5315;;;;N;;;;; +2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON; 531A;;;;N;;;;; +2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON; 5338;;;;N;;;;; +2F17;KANGXI RADICAL TEN;So;0;ON; 5341;;;;N;;;;; +2F18;KANGXI RADICAL DIVINATION;So;0;ON; 535C;;;;N;;;;; +2F19;KANGXI RADICAL SEAL;So;0;ON; 5369;;;;N;;;;; +2F1A;KANGXI RADICAL CLIFF;So;0;ON; 5382;;;;N;;;;; +2F1B;KANGXI RADICAL PRIVATE;So;0;ON; 53B6;;;;N;;;;; +2F1C;KANGXI RADICAL AGAIN;So;0;ON; 53C8;;;;N;;;;; +2F1D;KANGXI RADICAL MOUTH;So;0;ON; 53E3;;;;N;;;;; +2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON; 56D7;;;;N;;;;; +2F1F;KANGXI RADICAL EARTH;So;0;ON; 571F;;;;N;;;;; +2F20;KANGXI RADICAL SCHOLAR;So;0;ON; 58EB;;;;N;;;;; +2F21;KANGXI RADICAL GO;So;0;ON; 5902;;;;N;;;;; +2F22;KANGXI RADICAL GO SLOWLY;So;0;ON; 590A;;;;N;;;;; +2F23;KANGXI RADICAL EVENING;So;0;ON; 5915;;;;N;;;;; +2F24;KANGXI RADICAL BIG;So;0;ON; 5927;;;;N;;;;; +2F25;KANGXI RADICAL WOMAN;So;0;ON; 5973;;;;N;;;;; +2F26;KANGXI RADICAL CHILD;So;0;ON; 5B50;;;;N;;;;; +2F27;KANGXI RADICAL ROOF;So;0;ON; 5B80;;;;N;;;;; +2F28;KANGXI RADICAL INCH;So;0;ON; 5BF8;;;;N;;;;; +2F29;KANGXI RADICAL SMALL;So;0;ON; 5C0F;;;;N;;;;; +2F2A;KANGXI RADICAL LAME;So;0;ON; 5C22;;;;N;;;;; +2F2B;KANGXI RADICAL CORPSE;So;0;ON; 5C38;;;;N;;;;; +2F2C;KANGXI RADICAL SPROUT;So;0;ON; 5C6E;;;;N;;;;; +2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON; 5C71;;;;N;;;;; +2F2E;KANGXI RADICAL RIVER;So;0;ON; 5DDB;;;;N;;;;; +2F2F;KANGXI RADICAL WORK;So;0;ON; 5DE5;;;;N;;;;; +2F30;KANGXI RADICAL ONESELF;So;0;ON; 5DF1;;;;N;;;;; +2F31;KANGXI RADICAL TURBAN;So;0;ON; 5DFE;;;;N;;;;; +2F32;KANGXI RADICAL DRY;So;0;ON; 5E72;;;;N;;;;; +2F33;KANGXI RADICAL SHORT THREAD;So;0;ON; 5E7A;;;;N;;;;; +2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON; 5E7F;;;;N;;;;; +2F35;KANGXI RADICAL LONG STRIDE;So;0;ON; 5EF4;;;;N;;;;; +2F36;KANGXI RADICAL TWO HANDS;So;0;ON; 5EFE;;;;N;;;;; +2F37;KANGXI RADICAL SHOOT;So;0;ON; 5F0B;;;;N;;;;; +2F38;KANGXI RADICAL BOW;So;0;ON; 5F13;;;;N;;;;; +2F39;KANGXI RADICAL SNOUT;So;0;ON; 5F50;;;;N;;;;; +2F3A;KANGXI RADICAL BRISTLE;So;0;ON; 5F61;;;;N;;;;; +2F3B;KANGXI RADICAL STEP;So;0;ON; 5F73;;;;N;;;;; +2F3C;KANGXI RADICAL HEART;So;0;ON; 5FC3;;;;N;;;;; +2F3D;KANGXI RADICAL HALBERD;So;0;ON; 6208;;;;N;;;;; +2F3E;KANGXI RADICAL DOOR;So;0;ON; 6236;;;;N;;;;; +2F3F;KANGXI RADICAL HAND;So;0;ON; 624B;;;;N;;;;; +2F40;KANGXI RADICAL BRANCH;So;0;ON; 652F;;;;N;;;;; +2F41;KANGXI RADICAL RAP;So;0;ON; 6534;;;;N;;;;; +2F42;KANGXI RADICAL SCRIPT;So;0;ON; 6587;;;;N;;;;; +2F43;KANGXI RADICAL DIPPER;So;0;ON; 6597;;;;N;;;;; +2F44;KANGXI RADICAL AXE;So;0;ON; 65A4;;;;N;;;;; +2F45;KANGXI RADICAL SQUARE;So;0;ON; 65B9;;;;N;;;;; +2F46;KANGXI RADICAL NOT;So;0;ON; 65E0;;;;N;;;;; +2F47;KANGXI RADICAL SUN;So;0;ON; 65E5;;;;N;;;;; +2F48;KANGXI RADICAL SAY;So;0;ON; 66F0;;;;N;;;;; +2F49;KANGXI RADICAL MOON;So;0;ON; 6708;;;;N;;;;; +2F4A;KANGXI RADICAL TREE;So;0;ON; 6728;;;;N;;;;; +2F4B;KANGXI RADICAL LACK;So;0;ON; 6B20;;;;N;;;;; +2F4C;KANGXI RADICAL STOP;So;0;ON; 6B62;;;;N;;;;; +2F4D;KANGXI RADICAL DEATH;So;0;ON; 6B79;;;;N;;;;; +2F4E;KANGXI RADICAL WEAPON;So;0;ON; 6BB3;;;;N;;;;; +2F4F;KANGXI RADICAL DO NOT;So;0;ON; 6BCB;;;;N;;;;; +2F50;KANGXI RADICAL COMPARE;So;0;ON; 6BD4;;;;N;;;;; +2F51;KANGXI RADICAL FUR;So;0;ON; 6BDB;;;;N;;;;; +2F52;KANGXI RADICAL CLAN;So;0;ON; 6C0F;;;;N;;;;; +2F53;KANGXI RADICAL STEAM;So;0;ON; 6C14;;;;N;;;;; +2F54;KANGXI RADICAL WATER;So;0;ON; 6C34;;;;N;;;;; +2F55;KANGXI RADICAL FIRE;So;0;ON; 706B;;;;N;;;;; +2F56;KANGXI RADICAL CLAW;So;0;ON; 722A;;;;N;;;;; +2F57;KANGXI RADICAL FATHER;So;0;ON; 7236;;;;N;;;;; +2F58;KANGXI RADICAL DOUBLE X;So;0;ON; 723B;;;;N;;;;; +2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON; 723F;;;;N;;;;; +2F5A;KANGXI RADICAL SLICE;So;0;ON; 7247;;;;N;;;;; +2F5B;KANGXI RADICAL FANG;So;0;ON; 7259;;;;N;;;;; +2F5C;KANGXI RADICAL COW;So;0;ON; 725B;;;;N;;;;; +2F5D;KANGXI RADICAL DOG;So;0;ON; 72AC;;;;N;;;;; +2F5E;KANGXI RADICAL PROFOUND;So;0;ON; 7384;;;;N;;;;; +2F5F;KANGXI RADICAL JADE;So;0;ON; 7389;;;;N;;;;; +2F60;KANGXI RADICAL MELON;So;0;ON; 74DC;;;;N;;;;; +2F61;KANGXI RADICAL TILE;So;0;ON; 74E6;;;;N;;;;; +2F62;KANGXI RADICAL SWEET;So;0;ON; 7518;;;;N;;;;; +2F63;KANGXI RADICAL LIFE;So;0;ON; 751F;;;;N;;;;; +2F64;KANGXI RADICAL USE;So;0;ON; 7528;;;;N;;;;; +2F65;KANGXI RADICAL FIELD;So;0;ON; 7530;;;;N;;;;; +2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON; 758B;;;;N;;;;; +2F67;KANGXI RADICAL SICKNESS;So;0;ON; 7592;;;;N;;;;; +2F68;KANGXI RADICAL DOTTED TENT;So;0;ON; 7676;;;;N;;;;; +2F69;KANGXI RADICAL WHITE;So;0;ON; 767D;;;;N;;;;; +2F6A;KANGXI RADICAL SKIN;So;0;ON; 76AE;;;;N;;;;; +2F6B;KANGXI RADICAL DISH;So;0;ON; 76BF;;;;N;;;;; +2F6C;KANGXI RADICAL EYE;So;0;ON; 76EE;;;;N;;;;; +2F6D;KANGXI RADICAL SPEAR;So;0;ON; 77DB;;;;N;;;;; +2F6E;KANGXI RADICAL ARROW;So;0;ON; 77E2;;;;N;;;;; +2F6F;KANGXI RADICAL STONE;So;0;ON; 77F3;;;;N;;;;; +2F70;KANGXI RADICAL SPIRIT;So;0;ON; 793A;;;;N;;;;; +2F71;KANGXI RADICAL TRACK;So;0;ON; 79B8;;;;N;;;;; +2F72;KANGXI RADICAL GRAIN;So;0;ON; 79BE;;;;N;;;;; +2F73;KANGXI RADICAL CAVE;So;0;ON; 7A74;;;;N;;;;; +2F74;KANGXI RADICAL STAND;So;0;ON; 7ACB;;;;N;;;;; +2F75;KANGXI RADICAL BAMBOO;So;0;ON; 7AF9;;;;N;;;;; +2F76;KANGXI RADICAL RICE;So;0;ON; 7C73;;;;N;;;;; +2F77;KANGXI RADICAL SILK;So;0;ON; 7CF8;;;;N;;;;; +2F78;KANGXI RADICAL JAR;So;0;ON; 7F36;;;;N;;;;; +2F79;KANGXI RADICAL NET;So;0;ON; 7F51;;;;N;;;;; +2F7A;KANGXI RADICAL SHEEP;So;0;ON; 7F8A;;;;N;;;;; +2F7B;KANGXI RADICAL FEATHER;So;0;ON; 7FBD;;;;N;;;;; +2F7C;KANGXI RADICAL OLD;So;0;ON; 8001;;;;N;;;;; +2F7D;KANGXI RADICAL AND;So;0;ON; 800C;;;;N;;;;; +2F7E;KANGXI RADICAL PLOW;So;0;ON; 8012;;;;N;;;;; +2F7F;KANGXI RADICAL EAR;So;0;ON; 8033;;;;N;;;;; +2F80;KANGXI RADICAL BRUSH;So;0;ON; 807F;;;;N;;;;; +2F81;KANGXI RADICAL MEAT;So;0;ON; 8089;;;;N;;;;; +2F82;KANGXI RADICAL MINISTER;So;0;ON; 81E3;;;;N;;;;; +2F83;KANGXI RADICAL SELF;So;0;ON; 81EA;;;;N;;;;; +2F84;KANGXI RADICAL ARRIVE;So;0;ON; 81F3;;;;N;;;;; +2F85;KANGXI RADICAL MORTAR;So;0;ON; 81FC;;;;N;;;;; +2F86;KANGXI RADICAL TONGUE;So;0;ON; 820C;;;;N;;;;; +2F87;KANGXI RADICAL OPPOSE;So;0;ON; 821B;;;;N;;;;; +2F88;KANGXI RADICAL BOAT;So;0;ON; 821F;;;;N;;;;; +2F89;KANGXI RADICAL STOPPING;So;0;ON; 826E;;;;N;;;;; +2F8A;KANGXI RADICAL COLOR;So;0;ON; 8272;;;;N;;;;; +2F8B;KANGXI RADICAL GRASS;So;0;ON; 8278;;;;N;;;;; +2F8C;KANGXI RADICAL TIGER;So;0;ON; 864D;;;;N;;;;; +2F8D;KANGXI RADICAL INSECT;So;0;ON; 866B;;;;N;;;;; +2F8E;KANGXI RADICAL BLOOD;So;0;ON; 8840;;;;N;;;;; +2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON; 884C;;;;N;;;;; +2F90;KANGXI RADICAL CLOTHES;So;0;ON; 8863;;;;N;;;;; +2F91;KANGXI RADICAL WEST;So;0;ON; 897E;;;;N;;;;; +2F92;KANGXI RADICAL SEE;So;0;ON; 898B;;;;N;;;;; +2F93;KANGXI RADICAL HORN;So;0;ON; 89D2;;;;N;;;;; +2F94;KANGXI RADICAL SPEECH;So;0;ON; 8A00;;;;N;;;;; +2F95;KANGXI RADICAL VALLEY;So;0;ON; 8C37;;;;N;;;;; +2F96;KANGXI RADICAL BEAN;So;0;ON; 8C46;;;;N;;;;; +2F97;KANGXI RADICAL PIG;So;0;ON; 8C55;;;;N;;;;; +2F98;KANGXI RADICAL BADGER;So;0;ON; 8C78;;;;N;;;;; +2F99;KANGXI RADICAL SHELL;So;0;ON; 8C9D;;;;N;;;;; +2F9A;KANGXI RADICAL RED;So;0;ON; 8D64;;;;N;;;;; +2F9B;KANGXI RADICAL RUN;So;0;ON; 8D70;;;;N;;;;; +2F9C;KANGXI RADICAL FOOT;So;0;ON; 8DB3;;;;N;;;;; +2F9D;KANGXI RADICAL BODY;So;0;ON; 8EAB;;;;N;;;;; +2F9E;KANGXI RADICAL CART;So;0;ON; 8ECA;;;;N;;;;; +2F9F;KANGXI RADICAL BITTER;So;0;ON; 8F9B;;;;N;;;;; +2FA0;KANGXI RADICAL MORNING;So;0;ON; 8FB0;;;;N;;;;; +2FA1;KANGXI RADICAL WALK;So;0;ON; 8FB5;;;;N;;;;; +2FA2;KANGXI RADICAL CITY;So;0;ON; 9091;;;;N;;;;; +2FA3;KANGXI RADICAL WINE;So;0;ON; 9149;;;;N;;;;; +2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON; 91C6;;;;N;;;;; +2FA5;KANGXI RADICAL VILLAGE;So;0;ON; 91CC;;;;N;;;;; +2FA6;KANGXI RADICAL GOLD;So;0;ON; 91D1;;;;N;;;;; +2FA7;KANGXI RADICAL LONG;So;0;ON; 9577;;;;N;;;;; +2FA8;KANGXI RADICAL GATE;So;0;ON; 9580;;;;N;;;;; +2FA9;KANGXI RADICAL MOUND;So;0;ON; 961C;;;;N;;;;; +2FAA;KANGXI RADICAL SLAVE;So;0;ON; 96B6;;;;N;;;;; +2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON; 96B9;;;;N;;;;; +2FAC;KANGXI RADICAL RAIN;So;0;ON; 96E8;;;;N;;;;; +2FAD;KANGXI RADICAL BLUE;So;0;ON; 9751;;;;N;;;;; +2FAE;KANGXI RADICAL WRONG;So;0;ON; 975E;;;;N;;;;; +2FAF;KANGXI RADICAL FACE;So;0;ON; 9762;;;;N;;;;; +2FB0;KANGXI RADICAL LEATHER;So;0;ON; 9769;;;;N;;;;; +2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON; 97CB;;;;N;;;;; +2FB2;KANGXI RADICAL LEEK;So;0;ON; 97ED;;;;N;;;;; +2FB3;KANGXI RADICAL SOUND;So;0;ON; 97F3;;;;N;;;;; +2FB4;KANGXI RADICAL LEAF;So;0;ON; 9801;;;;N;;;;; +2FB5;KANGXI RADICAL WIND;So;0;ON; 98A8;;;;N;;;;; +2FB6;KANGXI RADICAL FLY;So;0;ON; 98DB;;;;N;;;;; +2FB7;KANGXI RADICAL EAT;So;0;ON; 98DF;;;;N;;;;; +2FB8;KANGXI RADICAL HEAD;So;0;ON; 9996;;;;N;;;;; +2FB9;KANGXI RADICAL FRAGRANT;So;0;ON; 9999;;;;N;;;;; +2FBA;KANGXI RADICAL HORSE;So;0;ON; 99AC;;;;N;;;;; +2FBB;KANGXI RADICAL BONE;So;0;ON; 9AA8;;;;N;;;;; +2FBC;KANGXI RADICAL TALL;So;0;ON; 9AD8;;;;N;;;;; +2FBD;KANGXI RADICAL HAIR;So;0;ON; 9ADF;;;;N;;;;; +2FBE;KANGXI RADICAL FIGHT;So;0;ON; 9B25;;;;N;;;;; +2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON; 9B2F;;;;N;;;;; +2FC0;KANGXI RADICAL CAULDRON;So;0;ON; 9B32;;;;N;;;;; +2FC1;KANGXI RADICAL GHOST;So;0;ON; 9B3C;;;;N;;;;; +2FC2;KANGXI RADICAL FISH;So;0;ON; 9B5A;;;;N;;;;; +2FC3;KANGXI RADICAL BIRD;So;0;ON; 9CE5;;;;N;;;;; +2FC4;KANGXI RADICAL SALT;So;0;ON; 9E75;;;;N;;;;; +2FC5;KANGXI RADICAL DEER;So;0;ON; 9E7F;;;;N;;;;; +2FC6;KANGXI RADICAL WHEAT;So;0;ON; 9EA5;;;;N;;;;; +2FC7;KANGXI RADICAL HEMP;So;0;ON; 9EBB;;;;N;;;;; +2FC8;KANGXI RADICAL YELLOW;So;0;ON; 9EC3;;;;N;;;;; +2FC9;KANGXI RADICAL MILLET;So;0;ON; 9ECD;;;;N;;;;; +2FCA;KANGXI RADICAL BLACK;So;0;ON; 9ED1;;;;N;;;;; +2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON; 9EF9;;;;N;;;;; +2FCC;KANGXI RADICAL FROG;So;0;ON; 9EFD;;;;N;;;;; +2FCD;KANGXI RADICAL TRIPOD;So;0;ON; 9F0E;;;;N;;;;; +2FCE;KANGXI RADICAL DRUM;So;0;ON; 9F13;;;;N;;;;; +2FCF;KANGXI RADICAL RAT;So;0;ON; 9F20;;;;N;;;;; +2FD0;KANGXI RADICAL NOSE;So;0;ON; 9F3B;;;;N;;;;; +2FD1;KANGXI RADICAL EVEN;So;0;ON; 9F4A;;;;N;;;;; +2FD2;KANGXI RADICAL TOOTH;So;0;ON; 9F52;;;;N;;;;; +2FD3;KANGXI RADICAL DRAGON;So;0;ON; 9F8D;;;;N;;;;; +2FD4;KANGXI RADICAL TURTLE;So;0;ON; 9F9C;;;;N;;;;; +2FD5;KANGXI RADICAL FLUTE;So;0;ON; 9FA0;;;;N;;;;; +2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;; +2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;; +2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;; +2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;; +2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;; +2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;; +2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;; +2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;; +2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;; +2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;; +2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;; +2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;; +3000;IDEOGRAPHIC SPACE;Zs;0;WS; 0020;;;;N;;;;; +3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;; +3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;; +3003;DITTO MARK;Po;0;ON;;;;;N;;;;; +3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;; +3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; +3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;; +3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;; +3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;; +3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;; +300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;; +300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;; +300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;; +300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;; +300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;; +300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;; +3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;; +3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;; +3012;POSTAL MARK;So;0;ON;;;;;N;;;;; +3013;GETA MARK;So;0;ON;;;;;N;;;;; +3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;; +3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;; +3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;; +3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;; +3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;; +3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;; +301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;; +301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;; +301C;WAVE DASH;Pd;0;ON;;;;;N;;;;; +301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;; +301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; +301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;; +3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;; +3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;; +3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;; +3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;; +3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;; +3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;; +3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;; +3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;; +3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;; +3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;; +302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;; +302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;; +302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;; +302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;; +302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;; +302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;; +3030;WAVY DASH;Pd;0;ON;;;;;N;;;;; +3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;; +3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;; +3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;; +3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;; +3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;; +3036;CIRCLED POSTAL MARK;So;0;ON; 3012;;;;N;;;;; +3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;; +3038;HANGZHOU NUMERAL TEN;Nl;0;L; 5341;;;10;N;;;;; +3039;HANGZHOU NUMERAL TWENTY;Nl;0;L; 5344;;;20;N;;;;; +303A;HANGZHOU NUMERAL THIRTY;Nl;0;L; 5345;;;30;N;;;;; +303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;; +303C;MASU MARK;Lo;0;L;;;;;N;;;;; +303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;; +303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;; +303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;; +3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; +3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;; +3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; +3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;; +3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; +3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;; +3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; +3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;; +3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; +304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;; +304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;; +304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;; +304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;; +304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;; +304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;; +3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;; +3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;; +3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;; +3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;; +3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;; +3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;; +3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;; +3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;; +3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;; +3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;; +305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;; +305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;; +305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;; +305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;; +305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;; +305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;; +3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;; +3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;; +3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;; +3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; +3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;; +3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;; +3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;; +3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;; +3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;; +3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;; +306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;; +306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;; +306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;; +306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;; +306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;; +306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;; +3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;; +3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;; +3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;; +3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;; +3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;; +3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;; +3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;; +3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;; +3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;; +3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;; +307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;; +307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;; +307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;; +307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;; +307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;; +307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;; +3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;; +3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;; +3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;; +3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; +3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;; +3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; +3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;; +3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; +3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;; +3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;; +308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;; +308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;; +308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;; +308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;; +308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; +308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;; +3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;; +3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;; +3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;; +3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;; +3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;; +3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; +3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; +3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;; +309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;; +309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON; 0020 3099;;;;N;;;;; +309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON; 0020 309A;;;;N;;;;; +309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;; +309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;; +309F;HIRAGANA DIGRAPH YORI;Lo;0;L; 3088 308A;;;;N;;;;; +30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;; +30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;; +30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;; +30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;; +30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;; +30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;; +30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;; +30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;; +30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;; +30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;; +30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;; +30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;; +30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;; +30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;; +30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;; +30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;; +30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;; +30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;; +30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;; +30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;; +30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;; +30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;; +30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;; +30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;; +30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;; +30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;; +30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;; +30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;; +30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;; +30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;; +30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;; +30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;; +30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;; +30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;; +30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;; +30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;; +30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;; +30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;; +30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;; +30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;; +30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;; +30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;; +30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;; +30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;; +30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;; +30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;; +30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;; +30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;; +30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;; +30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;; +30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;; +30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;; +30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;; +30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;; +30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;; +30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;; +30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;; +30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;; +30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;; +30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;; +30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;; +30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;; +30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;; +30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;; +30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;; +30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;; +30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;; +30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;; +30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;; +30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;; +30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;; +30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;; +30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;; +30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;; +30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;; +30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;; +30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;; +30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;; +30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;; +30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;; +30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;; +30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;; +30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;; +30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;; +30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;; +30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;; +30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;; +30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;; +30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;; +30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;; +30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;; +30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;; +30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;; +30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;; +30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;; +30FF;KATAKANA DIGRAPH KOTO;Lo;0;L; 30B3 30C8;;;;N;;;;; +3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;; +3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;; +3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;; +3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;; +3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;; +310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;; +310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;; +310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;; +310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;; +310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;; +310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;; +3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;; +3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;; +3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;; +3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;; +3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;; +3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;; +3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;; +3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;; +3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;; +3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;; +311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;; +311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;; +311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;; +311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;; +311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;; +311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;; +3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;; +3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;; +3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;; +3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;; +3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;; +3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;; +3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;; +3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;; +3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;; +3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;; +312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;; +312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;; +312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;; +312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;; +3131;HANGUL LETTER KIYEOK;Lo;0;L; 1100;;;;N;HANGUL LETTER GIYEOG;;;; +3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L; 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;; +3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; +3134;HANGUL LETTER NIEUN;Lo;0;L; 1102;;;;N;;;;; +3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;; +3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;; +3137;HANGUL LETTER TIKEUT;Lo;0;L; 1103;;;;N;HANGUL LETTER DIGEUD;;;; +3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L; 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;; +3139;HANGUL LETTER RIEUL;Lo;0;L; 1105;;;;N;HANGUL LETTER LIEUL;;;; +313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;; +313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;; +313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;; +313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L; 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;; +313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;; +313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;; +3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;; +3141;HANGUL LETTER MIEUM;Lo;0;L; 1106;;;;N;;;;; +3142;HANGUL LETTER PIEUP;Lo;0;L; 1107;;;;N;HANGUL LETTER BIEUB;;;; +3143;HANGUL LETTER SSANGPIEUP;Lo;0;L; 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;; +3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L; 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;; +3145;HANGUL LETTER SIOS;Lo;0;L; 1109;;;;N;;;;; +3146;HANGUL LETTER SSANGSIOS;Lo;0;L; 110A;;;;N;HANGUL LETTER SSANG SIOS;;;; +3147;HANGUL LETTER IEUNG;Lo;0;L; 110B;;;;N;;;;; +3148;HANGUL LETTER CIEUC;Lo;0;L; 110C;;;;N;HANGUL LETTER JIEUJ;;;; +3149;HANGUL LETTER SSANGCIEUC;Lo;0;L; 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;; +314A;HANGUL LETTER CHIEUCH;Lo;0;L; 110E;;;;N;HANGUL LETTER CIEUC;;;; +314B;HANGUL LETTER KHIEUKH;Lo;0;L; 110F;;;;N;HANGUL LETTER KIYEOK;;;; +314C;HANGUL LETTER THIEUTH;Lo;0;L; 1110;;;;N;HANGUL LETTER TIEUT;;;; +314D;HANGUL LETTER PHIEUPH;Lo;0;L; 1111;;;;N;HANGUL LETTER PIEUP;;;; +314E;HANGUL LETTER HIEUH;Lo;0;L; 1112;;;;N;;;;; +314F;HANGUL LETTER A;Lo;0;L; 1161;;;;N;;;;; +3150;HANGUL LETTER AE;Lo;0;L; 1162;;;;N;;;;; +3151;HANGUL LETTER YA;Lo;0;L; 1163;;;;N;;;;; +3152;HANGUL LETTER YAE;Lo;0;L; 1164;;;;N;;;;; +3153;HANGUL LETTER EO;Lo;0;L; 1165;;;;N;;;;; +3154;HANGUL LETTER E;Lo;0;L; 1166;;;;N;;;;; +3155;HANGUL LETTER YEO;Lo;0;L; 1167;;;;N;;;;; +3156;HANGUL LETTER YE;Lo;0;L; 1168;;;;N;;;;; +3157;HANGUL LETTER O;Lo;0;L; 1169;;;;N;;;;; +3158;HANGUL LETTER WA;Lo;0;L; 116A;;;;N;;;;; +3159;HANGUL LETTER WAE;Lo;0;L; 116B;;;;N;;;;; +315A;HANGUL LETTER OE;Lo;0;L; 116C;;;;N;;;;; +315B;HANGUL LETTER YO;Lo;0;L; 116D;;;;N;;;;; +315C;HANGUL LETTER U;Lo;0;L; 116E;;;;N;;;;; +315D;HANGUL LETTER WEO;Lo;0;L; 116F;;;;N;;;;; +315E;HANGUL LETTER WE;Lo;0;L; 1170;;;;N;;;;; +315F;HANGUL LETTER WI;Lo;0;L; 1171;;;;N;;;;; +3160;HANGUL LETTER YU;Lo;0;L; 1172;;;;N;;;;; +3161;HANGUL LETTER EU;Lo;0;L; 1173;;;;N;;;;; +3162;HANGUL LETTER YI;Lo;0;L; 1174;;;;N;;;;; +3163;HANGUL LETTER I;Lo;0;L; 1175;;;;N;;;;; +3164;HANGUL FILLER;Lo;0;L; 1160;;;;N;HANGUL CAE OM;;;; +3165;HANGUL LETTER SSANGNIEUN;Lo;0;L; 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;; +3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L; 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;; +3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L; 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;; +3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L; 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;; +3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L; 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;; +316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L; 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;; +316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L; 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;; +316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L; 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;; +316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L; 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;; +316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L; 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;; +316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L; 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;; +3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L; 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;; +3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L; 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;; +3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L; 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;; +3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L; 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;; +3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L; 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;; +3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L; 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;; +3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L; 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;; +3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L; 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;; +3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L; 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;; +3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L; 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;; +317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L; 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;; +317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L; 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;; +317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L; 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;; +317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L; 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;; +317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L; 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;; +317F;HANGUL LETTER PANSIOS;Lo;0;L; 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;; +3180;HANGUL LETTER SSANGIEUNG;Lo;0;L; 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;; +3181;HANGUL LETTER YESIEUNG;Lo;0;L; 114C;;;;N;HANGUL LETTER NGIEUNG;;;; +3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L; 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;; +3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L; 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;; +3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L; 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;; +3185;HANGUL LETTER SSANGHIEUH;Lo;0;L; 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;; +3186;HANGUL LETTER YEORINHIEUH;Lo;0;L; 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;; +3187;HANGUL LETTER YO-YA;Lo;0;L; 1184;;;;N;HANGUL LETTER YOYA;;;; +3188;HANGUL LETTER YO-YAE;Lo;0;L; 1185;;;;N;HANGUL LETTER YOYAE;;;; +3189;HANGUL LETTER YO-I;Lo;0;L; 1188;;;;N;HANGUL LETTER YOI;;;; +318A;HANGUL LETTER YU-YEO;Lo;0;L; 1191;;;;N;HANGUL LETTER YUYEO;;;; +318B;HANGUL LETTER YU-YE;Lo;0;L; 1192;;;;N;HANGUL LETTER YUYE;;;; +318C;HANGUL LETTER YU-I;Lo;0;L; 1194;;;;N;HANGUL LETTER YUI;;;; +318D;HANGUL LETTER ARAEA;Lo;0;L; 119E;;;;N;HANGUL LETTER ALAE A;;;; +318E;HANGUL LETTER ARAEAE;Lo;0;L; 11A1;;;;N;HANGUL LETTER ALAE AE;;;; +3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;; +3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;; +3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L; 4E00;;;1;N;KAERITEN ITI;Kaeriten;;; +3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L; 4E8C;;;2;N;KAERITEN NI;Kaeriten;;; +3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L; 4E09;;;3;N;KAERITEN SAN;Kaeriten;;; +3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L; 56DB;;;4;N;KAERITEN SI;Kaeriten;;; +3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L; 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;; +3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L; 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;; +3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L; 4E0B;;;;N;KAERITEN GE;Kaeriten;;; +3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L; 7532;;;;N;KAERITEN KOU;Kaeriten;;; +319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L; 4E59;;;;N;KAERITEN OTU;Kaeriten;;; +319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L; 4E19;;;;N;KAERITEN HEI;Kaeriten;;; +319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L; 4E01;;;;N;KAERITEN TEI;Kaeriten;;; +319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L; 5929;;;;N;KAERITEN TEN;Kaeriten;;; +319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L; 5730;;;;N;KAERITEN TI;Kaeriten;;; +319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L; 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;; +31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;; +31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;; +31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;; +31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;; +31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;; +31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;; +31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;; +31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;; +31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;; +31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;; +31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;; +31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;; +31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;; +31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;; +31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;; +31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;; +31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;; +31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;; +31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;; +31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;; +31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;; +31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;; +31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;; +31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;; +31C0;CJK STROKE T;So;0;ON;;;;;N;;;;; +31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;; +31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;; +31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;; +31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;; +31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;; +31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;; +31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;; +31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;; +31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;; +31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;; +31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;; +31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;; +31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;; +31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;; +31CF;CJK STROKE N;So;0;ON;;;;;N;;;;; +31D0;CJK STROKE H;So;0;ON;;;;;N;;;;; +31D1;CJK STROKE S;So;0;ON;;;;;N;;;;; +31D2;CJK STROKE P;So;0;ON;;;;;N;;;;; +31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;; +31D4;CJK STROKE D;So;0;ON;;;;;N;;;;; +31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;; +31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;; +31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;; +31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;; +31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;; +31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;; +31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;; +31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;; +31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;; +31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;; +31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;; +31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;; +31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;; +31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;; +31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;; +31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;; +31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;; +31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;; +31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;; +31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;; +31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;; +31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;; +31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;; +31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;; +31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;; +31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;; +31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;; +31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;; +31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;; +31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;; +31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;; +3200;PARENTHESIZED HANGUL KIYEOK;So;0;L; 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;; +3201;PARENTHESIZED HANGUL NIEUN;So;0;L; 0028 1102 0029;;;;N;;;;; +3202;PARENTHESIZED HANGUL TIKEUT;So;0;L; 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;; +3203;PARENTHESIZED HANGUL RIEUL;So;0;L; 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;; +3204;PARENTHESIZED HANGUL MIEUM;So;0;L; 0028 1106 0029;;;;N;;;;; +3205;PARENTHESIZED HANGUL PIEUP;So;0;L; 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;; +3206;PARENTHESIZED HANGUL SIOS;So;0;L; 0028 1109 0029;;;;N;;;;; +3207;PARENTHESIZED HANGUL IEUNG;So;0;L; 0028 110B 0029;;;;N;;;;; +3208;PARENTHESIZED HANGUL CIEUC;So;0;L; 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;; +3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L; 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;; +320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L; 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;; +320B;PARENTHESIZED HANGUL THIEUTH;So;0;L; 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;; +320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L; 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;; +320D;PARENTHESIZED HANGUL HIEUH;So;0;L; 0028 1112 0029;;;;N;;;;; +320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L; 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;; +320F;PARENTHESIZED HANGUL NIEUN A;So;0;L; 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;; +3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L; 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;; +3211;PARENTHESIZED HANGUL RIEUL A;So;0;L; 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;; +3212;PARENTHESIZED HANGUL MIEUM A;So;0;L; 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;; +3213;PARENTHESIZED HANGUL PIEUP A;So;0;L; 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;; +3214;PARENTHESIZED HANGUL SIOS A;So;0;L; 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;; +3215;PARENTHESIZED HANGUL IEUNG A;So;0;L; 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;; +3216;PARENTHESIZED HANGUL CIEUC A;So;0;L; 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;; +3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L; 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;; +3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L; 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;; +3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L; 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;; +321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L; 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;; +321B;PARENTHESIZED HANGUL HIEUH A;So;0;L; 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;; +321C;PARENTHESIZED HANGUL CIEUC U;So;0;L; 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;; +321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON; 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;; +321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON; 0028 110B 1169 1112 116E 0029;;;;N;;;;; +3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L; 0028 4E00 0029;;;1;N;;;;; +3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L; 0028 4E8C 0029;;;2;N;;;;; +3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L; 0028 4E09 0029;;;3;N;;;;; +3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L; 0028 56DB 0029;;;4;N;;;;; +3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L; 0028 4E94 0029;;;5;N;;;;; +3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L; 0028 516D 0029;;;6;N;;;;; +3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L; 0028 4E03 0029;;;7;N;;;;; +3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L; 0028 516B 0029;;;8;N;;;;; +3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L; 0028 4E5D 0029;;;9;N;;;;; +3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L; 0028 5341 0029;;;10;N;;;;; +322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L; 0028 6708 0029;;;;N;;;;; +322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L; 0028 706B 0029;;;;N;;;;; +322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L; 0028 6C34 0029;;;;N;;;;; +322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L; 0028 6728 0029;;;;N;;;;; +322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L; 0028 91D1 0029;;;;N;;;;; +322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L; 0028 571F 0029;;;;N;;;;; +3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L; 0028 65E5 0029;;;;N;;;;; +3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L; 0028 682A 0029;;;;N;;;;; +3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L; 0028 6709 0029;;;;N;;;;; +3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L; 0028 793E 0029;;;;N;;;;; +3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L; 0028 540D 0029;;;;N;;;;; +3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L; 0028 7279 0029;;;;N;;;;; +3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L; 0028 8CA1 0029;;;;N;;;;; +3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L; 0028 795D 0029;;;;N;;;;; +3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L; 0028 52B4 0029;;;;N;;;;; +3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L; 0028 4EE3 0029;;;;N;;;;; +323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L; 0028 547C 0029;;;;N;;;;; +323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L; 0028 5B66 0029;;;;N;;;;; +323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L; 0028 76E3 0029;;;;N;;;;; +323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L; 0028 4F01 0029;;;;N;;;;; +323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L; 0028 8CC7 0029;;;;N;;;;; +323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L; 0028 5354 0029;;;;N;;;;; +3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L; 0028 796D 0029;;;;N;;;;; +3241;PARENTHESIZED IDEOGRAPH REST;So;0;L; 0028 4F11 0029;;;;N;;;;; +3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L; 0028 81EA 0029;;;;N;;;;; +3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L; 0028 81F3 0029;;;;N;;;;; +3250;PARTNERSHIP SIGN;So;0;ON; 0050 0054 0045;;;;N;;;;; +3251;CIRCLED NUMBER TWENTY ONE;No;0;ON; 0032 0031;;;21;N;;;;; +3252;CIRCLED NUMBER TWENTY TWO;No;0;ON; 0032 0032;;;22;N;;;;; +3253;CIRCLED NUMBER TWENTY THREE;No;0;ON; 0032 0033;;;23;N;;;;; +3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON; 0032 0034;;;24;N;;;;; +3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON; 0032 0035;;;25;N;;;;; +3256;CIRCLED NUMBER TWENTY SIX;No;0;ON; 0032 0036;;;26;N;;;;; +3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON; 0032 0037;;;27;N;;;;; +3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON; 0032 0038;;;28;N;;;;; +3259;CIRCLED NUMBER TWENTY NINE;No;0;ON; 0032 0039;;;29;N;;;;; +325A;CIRCLED NUMBER THIRTY;No;0;ON; 0033 0030;;;30;N;;;;; +325B;CIRCLED NUMBER THIRTY ONE;No;0;ON; 0033 0031;;;31;N;;;;; +325C;CIRCLED NUMBER THIRTY TWO;No;0;ON; 0033 0032;;;32;N;;;;; +325D;CIRCLED NUMBER THIRTY THREE;No;0;ON; 0033 0033;;;33;N;;;;; +325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON; 0033 0034;;;34;N;;;;; +325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON; 0033 0035;;;35;N;;;;; +3260;CIRCLED HANGUL KIYEOK;So;0;L; 1100;;;;N;CIRCLED HANGUL GIYEOG;;;; +3261;CIRCLED HANGUL NIEUN;So;0;L; 1102;;;;N;;;;; +3262;CIRCLED HANGUL TIKEUT;So;0;L; 1103;;;;N;CIRCLED HANGUL DIGEUD;;;; +3263;CIRCLED HANGUL RIEUL;So;0;L; 1105;;;;N;CIRCLED HANGUL LIEUL;;;; +3264;CIRCLED HANGUL MIEUM;So;0;L; 1106;;;;N;;;;; +3265;CIRCLED HANGUL PIEUP;So;0;L; 1107;;;;N;CIRCLED HANGUL BIEUB;;;; +3266;CIRCLED HANGUL SIOS;So;0;L; 1109;;;;N;;;;; +3267;CIRCLED HANGUL IEUNG;So;0;L; 110B;;;;N;;;;; +3268;CIRCLED HANGUL CIEUC;So;0;L; 110C;;;;N;CIRCLED HANGUL JIEUJ;;;; +3269;CIRCLED HANGUL CHIEUCH;So;0;L; 110E;;;;N;CIRCLED HANGUL CIEUC;;;; +326A;CIRCLED HANGUL KHIEUKH;So;0;L; 110F;;;;N;CIRCLED HANGUL KIYEOK;;;; +326B;CIRCLED HANGUL THIEUTH;So;0;L; 1110;;;;N;CIRCLED HANGUL TIEUT;;;; +326C;CIRCLED HANGUL PHIEUPH;So;0;L; 1111;;;;N;CIRCLED HANGUL PIEUP;;;; +326D;CIRCLED HANGUL HIEUH;So;0;L; 1112;;;;N;;;;; +326E;CIRCLED HANGUL KIYEOK A;So;0;L; 1100 1161;;;;N;CIRCLED HANGUL GA;;;; +326F;CIRCLED HANGUL NIEUN A;So;0;L; 1102 1161;;;;N;CIRCLED HANGUL NA;;;; +3270;CIRCLED HANGUL TIKEUT A;So;0;L; 1103 1161;;;;N;CIRCLED HANGUL DA;;;; +3271;CIRCLED HANGUL RIEUL A;So;0;L; 1105 1161;;;;N;CIRCLED HANGUL LA;;;; +3272;CIRCLED HANGUL MIEUM A;So;0;L; 1106 1161;;;;N;CIRCLED HANGUL MA;;;; +3273;CIRCLED HANGUL PIEUP A;So;0;L; 1107 1161;;;;N;CIRCLED HANGUL BA;;;; +3274;CIRCLED HANGUL SIOS A;So;0;L; 1109 1161;;;;N;CIRCLED HANGUL SA;;;; +3275;CIRCLED HANGUL IEUNG A;So;0;L; 110B 1161;;;;N;CIRCLED HANGUL A;;;; +3276;CIRCLED HANGUL CIEUC A;So;0;L; 110C 1161;;;;N;CIRCLED HANGUL JA;;;; +3277;CIRCLED HANGUL CHIEUCH A;So;0;L; 110E 1161;;;;N;CIRCLED HANGUL CA;;;; +3278;CIRCLED HANGUL KHIEUKH A;So;0;L; 110F 1161;;;;N;CIRCLED HANGUL KA;;;; +3279;CIRCLED HANGUL THIEUTH A;So;0;L; 1110 1161;;;;N;CIRCLED HANGUL TA;;;; +327A;CIRCLED HANGUL PHIEUPH A;So;0;L; 1111 1161;;;;N;CIRCLED HANGUL PA;;;; +327B;CIRCLED HANGUL HIEUH A;So;0;L; 1112 1161;;;;N;CIRCLED HANGUL HA;;;; +327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON; 110E 1161 11B7 1100 1169;;;;N;;;;; +327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON; 110C 116E 110B 1174;;;;N;;;;; +327E;CIRCLED HANGUL IEUNG U;So;0;ON; 110B 116E;;;;N;;;;; +327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;; +3280;CIRCLED IDEOGRAPH ONE;No;0;L; 4E00;;;1;N;;;;; +3281;CIRCLED IDEOGRAPH TWO;No;0;L; 4E8C;;;2;N;;;;; +3282;CIRCLED IDEOGRAPH THREE;No;0;L; 4E09;;;3;N;;;;; +3283;CIRCLED IDEOGRAPH FOUR;No;0;L; 56DB;;;4;N;;;;; +3284;CIRCLED IDEOGRAPH FIVE;No;0;L; 4E94;;;5;N;;;;; +3285;CIRCLED IDEOGRAPH SIX;No;0;L; 516D;;;6;N;;;;; +3286;CIRCLED IDEOGRAPH SEVEN;No;0;L; 4E03;;;7;N;;;;; +3287;CIRCLED IDEOGRAPH EIGHT;No;0;L; 516B;;;8;N;;;;; +3288;CIRCLED IDEOGRAPH NINE;No;0;L; 4E5D;;;9;N;;;;; +3289;CIRCLED IDEOGRAPH TEN;No;0;L; 5341;;;10;N;;;;; +328A;CIRCLED IDEOGRAPH MOON;So;0;L; 6708;;;;N;;;;; +328B;CIRCLED IDEOGRAPH FIRE;So;0;L; 706B;;;;N;;;;; +328C;CIRCLED IDEOGRAPH WATER;So;0;L; 6C34;;;;N;;;;; +328D;CIRCLED IDEOGRAPH WOOD;So;0;L; 6728;;;;N;;;;; +328E;CIRCLED IDEOGRAPH METAL;So;0;L; 91D1;;;;N;;;;; +328F;CIRCLED IDEOGRAPH EARTH;So;0;L; 571F;;;;N;;;;; +3290;CIRCLED IDEOGRAPH SUN;So;0;L; 65E5;;;;N;;;;; +3291;CIRCLED IDEOGRAPH STOCK;So;0;L; 682A;;;;N;;;;; +3292;CIRCLED IDEOGRAPH HAVE;So;0;L; 6709;;;;N;;;;; +3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L; 793E;;;;N;;;;; +3294;CIRCLED IDEOGRAPH NAME;So;0;L; 540D;;;;N;;;;; +3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L; 7279;;;;N;;;;; +3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L; 8CA1;;;;N;;;;; +3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L; 795D;;;;N;;;;; +3298;CIRCLED IDEOGRAPH LABOR;So;0;L; 52B4;;;;N;;;;; +3299;CIRCLED IDEOGRAPH SECRET;So;0;L; 79D8;;;;N;;;;; +329A;CIRCLED IDEOGRAPH MALE;So;0;L; 7537;;;;N;;;;; +329B;CIRCLED IDEOGRAPH FEMALE;So;0;L; 5973;;;;N;;;;; +329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L; 9069;;;;N;;;;; +329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L; 512A;;;;N;;;;; +329E;CIRCLED IDEOGRAPH PRINT;So;0;L; 5370;;;;N;;;;; +329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L; 6CE8;;;;N;;;;; +32A0;CIRCLED IDEOGRAPH ITEM;So;0;L; 9805;;;;N;;;;; +32A1;CIRCLED IDEOGRAPH REST;So;0;L; 4F11;;;;N;;;;; +32A2;CIRCLED IDEOGRAPH COPY;So;0;L; 5199;;;;N;;;;; +32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L; 6B63;;;;N;;;;; +32A4;CIRCLED IDEOGRAPH HIGH;So;0;L; 4E0A;;;;N;;;;; +32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L; 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;; +32A6;CIRCLED IDEOGRAPH LOW;So;0;L; 4E0B;;;;N;;;;; +32A7;CIRCLED IDEOGRAPH LEFT;So;0;L; 5DE6;;;;N;;;;; +32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L; 53F3;;;;N;;;;; +32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L; 533B;;;;N;;;;; +32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L; 5B97;;;;N;;;;; +32AB;CIRCLED IDEOGRAPH STUDY;So;0;L; 5B66;;;;N;;;;; +32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L; 76E3;;;;N;;;;; +32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L; 4F01;;;;N;;;;; +32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L; 8CC7;;;;N;;;;; +32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L; 5354;;;;N;;;;; +32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L; 591C;;;;N;;;;; +32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON; 0033 0036;;;36;N;;;;; +32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON; 0033 0037;;;37;N;;;;; +32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON; 0033 0038;;;38;N;;;;; +32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON; 0033 0039;;;39;N;;;;; +32B5;CIRCLED NUMBER FORTY;No;0;ON; 0034 0030;;;40;N;;;;; +32B6;CIRCLED NUMBER FORTY ONE;No;0;ON; 0034 0031;;;41;N;;;;; +32B7;CIRCLED NUMBER FORTY TWO;No;0;ON; 0034 0032;;;42;N;;;;; +32B8;CIRCLED NUMBER FORTY THREE;No;0;ON; 0034 0033;;;43;N;;;;; +32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON; 0034 0034;;;44;N;;;;; +32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON; 0034 0035;;;45;N;;;;; +32BB;CIRCLED NUMBER FORTY SIX;No;0;ON; 0034 0036;;;46;N;;;;; +32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON; 0034 0037;;;47;N;;;;; +32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON; 0034 0038;;;48;N;;;;; +32BE;CIRCLED NUMBER FORTY NINE;No;0;ON; 0034 0039;;;49;N;;;;; +32BF;CIRCLED NUMBER FIFTY;No;0;ON; 0035 0030;;;50;N;;;;; +32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L; 0031 6708;;;;N;;;;; +32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L; 0032 6708;;;;N;;;;; +32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L; 0033 6708;;;;N;;;;; +32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L; 0034 6708;;;;N;;;;; +32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L; 0035 6708;;;;N;;;;; +32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L; 0036 6708;;;;N;;;;; +32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L; 0037 6708;;;;N;;;;; +32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L; 0038 6708;;;;N;;;;; +32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L; 0039 6708;;;;N;;;;; +32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L; 0031 0030 6708;;;;N;;;;; +32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L; 0031 0031 6708;;;;N;;;;; +32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L; 0031 0032 6708;;;;N;;;;; +32CC;SQUARE HG;So;0;ON; 0048 0067;;;;N;;;;; +32CD;SQUARE ERG;So;0;ON; 0065 0072 0067;;;;N;;;;; +32CE;SQUARE EV;So;0;ON; 0065 0056;;;;N;;;;; +32CF;LIMITED LIABILITY SIGN;So;0;ON; 004C 0054 0044;;;;N;;;;; +32D0;CIRCLED KATAKANA A;So;0;L; 30A2;;;;N;;;;; +32D1;CIRCLED KATAKANA I;So;0;L; 30A4;;;;N;;;;; +32D2;CIRCLED KATAKANA U;So;0;L; 30A6;;;;N;;;;; +32D3;CIRCLED KATAKANA E;So;0;L; 30A8;;;;N;;;;; +32D4;CIRCLED KATAKANA O;So;0;L; 30AA;;;;N;;;;; +32D5;CIRCLED KATAKANA KA;So;0;L; 30AB;;;;N;;;;; +32D6;CIRCLED KATAKANA KI;So;0;L; 30AD;;;;N;;;;; +32D7;CIRCLED KATAKANA KU;So;0;L; 30AF;;;;N;;;;; +32D8;CIRCLED KATAKANA KE;So;0;L; 30B1;;;;N;;;;; +32D9;CIRCLED KATAKANA KO;So;0;L; 30B3;;;;N;;;;; +32DA;CIRCLED KATAKANA SA;So;0;L; 30B5;;;;N;;;;; +32DB;CIRCLED KATAKANA SI;So;0;L; 30B7;;;;N;;;;; +32DC;CIRCLED KATAKANA SU;So;0;L; 30B9;;;;N;;;;; +32DD;CIRCLED KATAKANA SE;So;0;L; 30BB;;;;N;;;;; +32DE;CIRCLED KATAKANA SO;So;0;L; 30BD;;;;N;;;;; +32DF;CIRCLED KATAKANA TA;So;0;L; 30BF;;;;N;;;;; +32E0;CIRCLED KATAKANA TI;So;0;L; 30C1;;;;N;;;;; +32E1;CIRCLED KATAKANA TU;So;0;L; 30C4;;;;N;;;;; +32E2;CIRCLED KATAKANA TE;So;0;L; 30C6;;;;N;;;;; +32E3;CIRCLED KATAKANA TO;So;0;L; 30C8;;;;N;;;;; +32E4;CIRCLED KATAKANA NA;So;0;L; 30CA;;;;N;;;;; +32E5;CIRCLED KATAKANA NI;So;0;L; 30CB;;;;N;;;;; +32E6;CIRCLED KATAKANA NU;So;0;L; 30CC;;;;N;;;;; +32E7;CIRCLED KATAKANA NE;So;0;L; 30CD;;;;N;;;;; +32E8;CIRCLED KATAKANA NO;So;0;L; 30CE;;;;N;;;;; +32E9;CIRCLED KATAKANA HA;So;0;L; 30CF;;;;N;;;;; +32EA;CIRCLED KATAKANA HI;So;0;L; 30D2;;;;N;;;;; +32EB;CIRCLED KATAKANA HU;So;0;L; 30D5;;;;N;;;;; +32EC;CIRCLED KATAKANA HE;So;0;L; 30D8;;;;N;;;;; +32ED;CIRCLED KATAKANA HO;So;0;L; 30DB;;;;N;;;;; +32EE;CIRCLED KATAKANA MA;So;0;L; 30DE;;;;N;;;;; +32EF;CIRCLED KATAKANA MI;So;0;L; 30DF;;;;N;;;;; +32F0;CIRCLED KATAKANA MU;So;0;L; 30E0;;;;N;;;;; +32F1;CIRCLED KATAKANA ME;So;0;L; 30E1;;;;N;;;;; +32F2;CIRCLED KATAKANA MO;So;0;L; 30E2;;;;N;;;;; +32F3;CIRCLED KATAKANA YA;So;0;L; 30E4;;;;N;;;;; +32F4;CIRCLED KATAKANA YU;So;0;L; 30E6;;;;N;;;;; +32F5;CIRCLED KATAKANA YO;So;0;L; 30E8;;;;N;;;;; +32F6;CIRCLED KATAKANA RA;So;0;L; 30E9;;;;N;;;;; +32F7;CIRCLED KATAKANA RI;So;0;L; 30EA;;;;N;;;;; +32F8;CIRCLED KATAKANA RU;So;0;L; 30EB;;;;N;;;;; +32F9;CIRCLED KATAKANA RE;So;0;L; 30EC;;;;N;;;;; +32FA;CIRCLED KATAKANA RO;So;0;L; 30ED;;;;N;;;;; +32FB;CIRCLED KATAKANA WA;So;0;L; 30EF;;;;N;;;;; +32FC;CIRCLED KATAKANA WI;So;0;L; 30F0;;;;N;;;;; +32FD;CIRCLED KATAKANA WE;So;0;L; 30F1;;;;N;;;;; +32FE;CIRCLED KATAKANA WO;So;0;L; 30F2;;;;N;;;;; +3300;SQUARE APAATO;So;0;L; 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;; +3301;SQUARE ARUHUA;So;0;L; 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;; +3302;SQUARE ANPEA;So;0;L; 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;; +3303;SQUARE AARU;So;0;L; 30A2 30FC 30EB;;;;N;SQUARED AARU;;;; +3304;SQUARE ININGU;So;0;L; 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;; +3305;SQUARE INTI;So;0;L; 30A4 30F3 30C1;;;;N;SQUARED INTI;;;; +3306;SQUARE UON;So;0;L; 30A6 30A9 30F3;;;;N;SQUARED UON;;;; +3307;SQUARE ESUKUUDO;So;0;L; 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;; +3308;SQUARE EEKAA;So;0;L; 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;; +3309;SQUARE ONSU;So;0;L; 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;; +330A;SQUARE OOMU;So;0;L; 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;; +330B;SQUARE KAIRI;So;0;L; 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;; +330C;SQUARE KARATTO;So;0;L; 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;; +330D;SQUARE KARORII;So;0;L; 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;; +330E;SQUARE GARON;So;0;L; 30AC 30ED 30F3;;;;N;SQUARED GARON;;;; +330F;SQUARE GANMA;So;0;L; 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;; +3310;SQUARE GIGA;So;0;L; 30AE 30AC;;;;N;SQUARED GIGA;;;; +3311;SQUARE GINII;So;0;L; 30AE 30CB 30FC;;;;N;SQUARED GINII;;;; +3312;SQUARE KYURII;So;0;L; 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;; +3313;SQUARE GIRUDAA;So;0;L; 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;; +3314;SQUARE KIRO;So;0;L; 30AD 30ED;;;;N;SQUARED KIRO;;;; +3315;SQUARE KIROGURAMU;So;0;L; 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;; +3316;SQUARE KIROMEETORU;So;0;L; 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;; +3317;SQUARE KIROWATTO;So;0;L; 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;; +3318;SQUARE GURAMU;So;0;L; 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;; +3319;SQUARE GURAMUTON;So;0;L; 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;; +331A;SQUARE KURUZEIRO;So;0;L; 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;; +331B;SQUARE KUROONE;So;0;L; 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;; +331C;SQUARE KEESU;So;0;L; 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;; +331D;SQUARE KORUNA;So;0;L; 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;; +331E;SQUARE KOOPO;So;0;L; 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;; +331F;SQUARE SAIKURU;So;0;L; 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;; +3320;SQUARE SANTIIMU;So;0;L; 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;; +3321;SQUARE SIRINGU;So;0;L; 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;; +3322;SQUARE SENTI;So;0;L; 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;; +3323;SQUARE SENTO;So;0;L; 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;; +3324;SQUARE DAASU;So;0;L; 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;; +3325;SQUARE DESI;So;0;L; 30C7 30B7;;;;N;SQUARED DESI;;;; +3326;SQUARE DORU;So;0;L; 30C9 30EB;;;;N;SQUARED DORU;;;; +3327;SQUARE TON;So;0;L; 30C8 30F3;;;;N;SQUARED TON;;;; +3328;SQUARE NANO;So;0;L; 30CA 30CE;;;;N;SQUARED NANO;;;; +3329;SQUARE NOTTO;So;0;L; 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;; +332A;SQUARE HAITU;So;0;L; 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;; +332B;SQUARE PAASENTO;So;0;L; 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;; +332C;SQUARE PAATU;So;0;L; 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;; +332D;SQUARE BAARERU;So;0;L; 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;; +332E;SQUARE PIASUTORU;So;0;L; 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;; +332F;SQUARE PIKURU;So;0;L; 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;; +3330;SQUARE PIKO;So;0;L; 30D4 30B3;;;;N;SQUARED PIKO;;;; +3331;SQUARE BIRU;So;0;L; 30D3 30EB;;;;N;SQUARED BIRU;;;; +3332;SQUARE HUARADDO;So;0;L; 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;; +3333;SQUARE HUIITO;So;0;L; 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;; +3334;SQUARE BUSSYERU;So;0;L; 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;; +3335;SQUARE HURAN;So;0;L; 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;; +3336;SQUARE HEKUTAARU;So;0;L; 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;; +3337;SQUARE PESO;So;0;L; 30DA 30BD;;;;N;SQUARED PESO;;;; +3338;SQUARE PENIHI;So;0;L; 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;; +3339;SQUARE HERUTU;So;0;L; 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;; +333A;SQUARE PENSU;So;0;L; 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;; +333B;SQUARE PEEZI;So;0;L; 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;; +333C;SQUARE BEETA;So;0;L; 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;; +333D;SQUARE POINTO;So;0;L; 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;; +333E;SQUARE BORUTO;So;0;L; 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;; +333F;SQUARE HON;So;0;L; 30DB 30F3;;;;N;SQUARED HON;;;; +3340;SQUARE PONDO;So;0;L; 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;; +3341;SQUARE HOORU;So;0;L; 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;; +3342;SQUARE HOON;So;0;L; 30DB 30FC 30F3;;;;N;SQUARED HOON;;;; +3343;SQUARE MAIKURO;So;0;L; 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;; +3344;SQUARE MAIRU;So;0;L; 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;; +3345;SQUARE MAHHA;So;0;L; 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;; +3346;SQUARE MARUKU;So;0;L; 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;; +3347;SQUARE MANSYON;So;0;L; 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;; +3348;SQUARE MIKURON;So;0;L; 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;; +3349;SQUARE MIRI;So;0;L; 30DF 30EA;;;;N;SQUARED MIRI;;;; +334A;SQUARE MIRIBAARU;So;0;L; 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;; +334B;SQUARE MEGA;So;0;L; 30E1 30AC;;;;N;SQUARED MEGA;;;; +334C;SQUARE MEGATON;So;0;L; 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;; +334D;SQUARE MEETORU;So;0;L; 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;; +334E;SQUARE YAADO;So;0;L; 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;; +334F;SQUARE YAARU;So;0;L; 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;; +3350;SQUARE YUAN;So;0;L; 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;; +3351;SQUARE RITTORU;So;0;L; 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;; +3352;SQUARE RIRA;So;0;L; 30EA 30E9;;;;N;SQUARED RIRA;;;; +3353;SQUARE RUPII;So;0;L; 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;; +3354;SQUARE RUUBURU;So;0;L; 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;; +3355;SQUARE REMU;So;0;L; 30EC 30E0;;;;N;SQUARED REMU;;;; +3356;SQUARE RENTOGEN;So;0;L; 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;; +3357;SQUARE WATTO;So;0;L; 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;; +3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L; 0030 70B9;;;;N;;;;; +3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L; 0031 70B9;;;;N;;;;; +335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L; 0032 70B9;;;;N;;;;; +335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L; 0033 70B9;;;;N;;;;; +335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L; 0034 70B9;;;;N;;;;; +335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L; 0035 70B9;;;;N;;;;; +335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L; 0036 70B9;;;;N;;;;; +335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L; 0037 70B9;;;;N;;;;; +3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L; 0038 70B9;;;;N;;;;; +3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L; 0039 70B9;;;;N;;;;; +3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L; 0031 0030 70B9;;;;N;;;;; +3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L; 0031 0031 70B9;;;;N;;;;; +3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L; 0031 0032 70B9;;;;N;;;;; +3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L; 0031 0033 70B9;;;;N;;;;; +3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L; 0031 0034 70B9;;;;N;;;;; +3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L; 0031 0035 70B9;;;;N;;;;; +3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L; 0031 0036 70B9;;;;N;;;;; +3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L; 0031 0037 70B9;;;;N;;;;; +336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L; 0031 0038 70B9;;;;N;;;;; +336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L; 0031 0039 70B9;;;;N;;;;; +336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L; 0032 0030 70B9;;;;N;;;;; +336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L; 0032 0031 70B9;;;;N;;;;; +336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L; 0032 0032 70B9;;;;N;;;;; +336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L; 0032 0033 70B9;;;;N;;;;; +3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L; 0032 0034 70B9;;;;N;;;;; +3371;SQUARE HPA;So;0;L; 0068 0050 0061;;;;N;;;;; +3372;SQUARE DA;So;0;L; 0064 0061;;;;N;;;;; +3373;SQUARE AU;So;0;L; 0041 0055;;;;N;;;;; +3374;SQUARE BAR;So;0;L; 0062 0061 0072;;;;N;;;;; +3375;SQUARE OV;So;0;L; 006F 0056;;;;N;;;;; +3376;SQUARE PC;So;0;L; 0070 0063;;;;N;;;;; +3377;SQUARE DM;So;0;ON; 0064 006D;;;;N;;;;; +3378;SQUARE DM SQUARED;So;0;ON; 0064 006D 00B2;;;;N;;;;; +3379;SQUARE DM CUBED;So;0;ON; 0064 006D 00B3;;;;N;;;;; +337A;SQUARE IU;So;0;ON; 0049 0055;;;;N;;;;; +337B;SQUARE ERA NAME HEISEI;So;0;L; 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;; +337C;SQUARE ERA NAME SYOUWA;So;0;L; 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;; +337D;SQUARE ERA NAME TAISYOU;So;0;L; 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;; +337E;SQUARE ERA NAME MEIZI;So;0;L; 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;; +337F;SQUARE CORPORATION;So;0;L; 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;; +3380;SQUARE PA AMPS;So;0;L; 0070 0041;;;;N;SQUARED PA AMPS;;;; +3381;SQUARE NA;So;0;L; 006E 0041;;;;N;SQUARED NA;;;; +3382;SQUARE MU A;So;0;L; 03BC 0041;;;;N;SQUARED MU A;;;; +3383;SQUARE MA;So;0;L; 006D 0041;;;;N;SQUARED MA;;;; +3384;SQUARE KA;So;0;L; 006B 0041;;;;N;SQUARED KA;;;; +3385;SQUARE KB;So;0;L; 004B 0042;;;;N;SQUARED KB;;;; +3386;SQUARE MB;So;0;L; 004D 0042;;;;N;SQUARED MB;;;; +3387;SQUARE GB;So;0;L; 0047 0042;;;;N;SQUARED GB;;;; +3388;SQUARE CAL;So;0;L; 0063 0061 006C;;;;N;SQUARED CAL;;;; +3389;SQUARE KCAL;So;0;L; 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;; +338A;SQUARE PF;So;0;L; 0070 0046;;;;N;SQUARED PF;;;; +338B;SQUARE NF;So;0;L; 006E 0046;;;;N;SQUARED NF;;;; +338C;SQUARE MU F;So;0;L; 03BC 0046;;;;N;SQUARED MU F;;;; +338D;SQUARE MU G;So;0;L; 03BC 0067;;;;N;SQUARED MU G;;;; +338E;SQUARE MG;So;0;L; 006D 0067;;;;N;SQUARED MG;;;; +338F;SQUARE KG;So;0;L; 006B 0067;;;;N;SQUARED KG;;;; +3390;SQUARE HZ;So;0;L; 0048 007A;;;;N;SQUARED HZ;;;; +3391;SQUARE KHZ;So;0;L; 006B 0048 007A;;;;N;SQUARED KHZ;;;; +3392;SQUARE MHZ;So;0;L; 004D 0048 007A;;;;N;SQUARED MHZ;;;; +3393;SQUARE GHZ;So;0;L; 0047 0048 007A;;;;N;SQUARED GHZ;;;; +3394;SQUARE THZ;So;0;L; 0054 0048 007A;;;;N;SQUARED THZ;;;; +3395;SQUARE MU L;So;0;L; 03BC 2113;;;;N;SQUARED MU L;;;; +3396;SQUARE ML;So;0;L; 006D 2113;;;;N;SQUARED ML;;;; +3397;SQUARE DL;So;0;L; 0064 2113;;;;N;SQUARED DL;;;; +3398;SQUARE KL;So;0;L; 006B 2113;;;;N;SQUARED KL;;;; +3399;SQUARE FM;So;0;L; 0066 006D;;;;N;SQUARED FM;;;; +339A;SQUARE NM;So;0;L; 006E 006D;;;;N;SQUARED NM;;;; +339B;SQUARE MU M;So;0;L; 03BC 006D;;;;N;SQUARED MU M;;;; +339C;SQUARE MM;So;0;L; 006D 006D;;;;N;SQUARED MM;;;; +339D;SQUARE CM;So;0;L; 0063 006D;;;;N;SQUARED CM;;;; +339E;SQUARE KM;So;0;L; 006B 006D;;;;N;SQUARED KM;;;; +339F;SQUARE MM SQUARED;So;0;L; 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;; +33A0;SQUARE CM SQUARED;So;0;L; 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;; +33A1;SQUARE M SQUARED;So;0;L; 006D 00B2;;;;N;SQUARED M SQUARED;;;; +33A2;SQUARE KM SQUARED;So;0;L; 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;; +33A3;SQUARE MM CUBED;So;0;L; 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;; +33A4;SQUARE CM CUBED;So;0;L; 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;; +33A5;SQUARE M CUBED;So;0;L; 006D 00B3;;;;N;SQUARED M CUBED;;;; +33A6;SQUARE KM CUBED;So;0;L; 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;; +33A7;SQUARE M OVER S;So;0;L; 006D 2215 0073;;;;N;SQUARED M OVER S;;;; +33A8;SQUARE M OVER S SQUARED;So;0;L; 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;; +33A9;SQUARE PA;So;0;L; 0050 0061;;;;N;SQUARED PA;;;; +33AA;SQUARE KPA;So;0;L; 006B 0050 0061;;;;N;SQUARED KPA;;;; +33AB;SQUARE MPA;So;0;L; 004D 0050 0061;;;;N;SQUARED MPA;;;; +33AC;SQUARE GPA;So;0;L; 0047 0050 0061;;;;N;SQUARED GPA;;;; +33AD;SQUARE RAD;So;0;L; 0072 0061 0064;;;;N;SQUARED RAD;;;; +33AE;SQUARE RAD OVER S;So;0;L; 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;; +33AF;SQUARE RAD OVER S SQUARED;So;0;L; 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;; +33B0;SQUARE PS;So;0;L; 0070 0073;;;;N;SQUARED PS;;;; +33B1;SQUARE NS;So;0;L; 006E 0073;;;;N;SQUARED NS;;;; +33B2;SQUARE MU S;So;0;L; 03BC 0073;;;;N;SQUARED MU S;;;; +33B3;SQUARE MS;So;0;L; 006D 0073;;;;N;SQUARED MS;;;; +33B4;SQUARE PV;So;0;L; 0070 0056;;;;N;SQUARED PV;;;; +33B5;SQUARE NV;So;0;L; 006E 0056;;;;N;SQUARED NV;;;; +33B6;SQUARE MU V;So;0;L; 03BC 0056;;;;N;SQUARED MU V;;;; +33B7;SQUARE MV;So;0;L; 006D 0056;;;;N;SQUARED MV;;;; +33B8;SQUARE KV;So;0;L; 006B 0056;;;;N;SQUARED KV;;;; +33B9;SQUARE MV MEGA;So;0;L; 004D 0056;;;;N;SQUARED MV MEGA;;;; +33BA;SQUARE PW;So;0;L; 0070 0057;;;;N;SQUARED PW;;;; +33BB;SQUARE NW;So;0;L; 006E 0057;;;;N;SQUARED NW;;;; +33BC;SQUARE MU W;So;0;L; 03BC 0057;;;;N;SQUARED MU W;;;; +33BD;SQUARE MW;So;0;L; 006D 0057;;;;N;SQUARED MW;;;; +33BE;SQUARE KW;So;0;L; 006B 0057;;;;N;SQUARED KW;;;; +33BF;SQUARE MW MEGA;So;0;L; 004D 0057;;;;N;SQUARED MW MEGA;;;; +33C0;SQUARE K OHM;So;0;L; 006B 03A9;;;;N;SQUARED K OHM;;;; +33C1;SQUARE M OHM;So;0;L; 004D 03A9;;;;N;SQUARED M OHM;;;; +33C2;SQUARE AM;So;0;L; 0061 002E 006D 002E;;;;N;SQUARED AM;;;; +33C3;SQUARE BQ;So;0;L; 0042 0071;;;;N;SQUARED BQ;;;; +33C4;SQUARE CC;So;0;L; 0063 0063;;;;N;SQUARED CC;;;; +33C5;SQUARE CD;So;0;L; 0063 0064;;;;N;SQUARED CD;;;; +33C6;SQUARE C OVER KG;So;0;L; 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;; +33C7;SQUARE CO;So;0;L; 0043 006F 002E;;;;N;SQUARED CO;;;; +33C8;SQUARE DB;So;0;L; 0064 0042;;;;N;SQUARED DB;;;; +33C9;SQUARE GY;So;0;L; 0047 0079;;;;N;SQUARED GY;;;; +33CA;SQUARE HA;So;0;L; 0068 0061;;;;N;SQUARED HA;;;; +33CB;SQUARE HP;So;0;L; 0048 0050;;;;N;SQUARED HP;;;; +33CC;SQUARE IN;So;0;L; 0069 006E;;;;N;SQUARED IN;;;; +33CD;SQUARE KK;So;0;L; 004B 004B;;;;N;SQUARED KK;;;; +33CE;SQUARE KM CAPITAL;So;0;L; 004B 004D;;;;N;SQUARED KM CAPITAL;;;; +33CF;SQUARE KT;So;0;L; 006B 0074;;;;N;SQUARED KT;;;; +33D0;SQUARE LM;So;0;L; 006C 006D;;;;N;SQUARED LM;;;; +33D1;SQUARE LN;So;0;L; 006C 006E;;;;N;SQUARED LN;;;; +33D2;SQUARE LOG;So;0;L; 006C 006F 0067;;;;N;SQUARED LOG;;;; +33D3;SQUARE LX;So;0;L; 006C 0078;;;;N;SQUARED LX;;;; +33D4;SQUARE MB SMALL;So;0;L; 006D 0062;;;;N;SQUARED MB SMALL;;;; +33D5;SQUARE MIL;So;0;L; 006D 0069 006C;;;;N;SQUARED MIL;;;; +33D6;SQUARE MOL;So;0;L; 006D 006F 006C;;;;N;SQUARED MOL;;;; +33D7;SQUARE PH;So;0;L; 0050 0048;;;;N;SQUARED PH;;;; +33D8;SQUARE PM;So;0;L; 0070 002E 006D 002E;;;;N;SQUARED PM;;;; +33D9;SQUARE PPM;So;0;L; 0050 0050 004D;;;;N;SQUARED PPM;;;; +33DA;SQUARE PR;So;0;L; 0050 0052;;;;N;SQUARED PR;;;; +33DB;SQUARE SR;So;0;L; 0073 0072;;;;N;SQUARED SR;;;; +33DC;SQUARE SV;So;0;L; 0053 0076;;;;N;SQUARED SV;;;; +33DD;SQUARE WB;So;0;L; 0057 0062;;;;N;SQUARED WB;;;; +33DE;SQUARE V OVER M;So;0;ON; 0056 2215 006D;;;;N;;;;; +33DF;SQUARE A OVER M;So;0;ON; 0041 2215 006D;;;;N;;;;; +33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L; 0031 65E5;;;;N;;;;; +33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L; 0032 65E5;;;;N;;;;; +33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L; 0033 65E5;;;;N;;;;; +33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L; 0034 65E5;;;;N;;;;; +33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L; 0035 65E5;;;;N;;;;; +33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L; 0036 65E5;;;;N;;;;; +33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L; 0037 65E5;;;;N;;;;; +33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L; 0038 65E5;;;;N;;;;; +33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L; 0039 65E5;;;;N;;;;; +33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L; 0031 0030 65E5;;;;N;;;;; +33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L; 0031 0031 65E5;;;;N;;;;; +33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L; 0031 0032 65E5;;;;N;;;;; +33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L; 0031 0033 65E5;;;;N;;;;; +33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L; 0031 0034 65E5;;;;N;;;;; +33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L; 0031 0035 65E5;;;;N;;;;; +33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L; 0031 0036 65E5;;;;N;;;;; +33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L; 0031 0037 65E5;;;;N;;;;; +33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L; 0031 0038 65E5;;;;N;;;;; +33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L; 0031 0039 65E5;;;;N;;;;; +33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L; 0032 0030 65E5;;;;N;;;;; +33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L; 0032 0031 65E5;;;;N;;;;; +33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L; 0032 0032 65E5;;;;N;;;;; +33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L; 0032 0033 65E5;;;;N;;;;; +33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L; 0032 0034 65E5;;;;N;;;;; +33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L; 0032 0035 65E5;;;;N;;;;; +33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L; 0032 0036 65E5;;;;N;;;;; +33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L; 0032 0037 65E5;;;;N;;;;; +33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L; 0032 0038 65E5;;;;N;;;;; +33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L; 0032 0039 65E5;;;;N;;;;; +33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L; 0033 0030 65E5;;;;N;;;;; +33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L; 0033 0031 65E5;;;;N;;;;; +33FF;SQUARE GAL;So;0;ON; 0067 0061 006C;;;;N;;;;; +4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;; +4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;; +4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;; +4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;; +4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; +4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;; +4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;; +4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;; +4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;; +4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;; +4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;; +4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;; +4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;; +4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;; +4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;; +4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;; +4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; +4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;; +4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;; +4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;; +4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;; +4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;; +4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;; +4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;; +4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;; +4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;; +4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;; +4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;; +4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;; +4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;; +4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;; +4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;; +4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;; +4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;; +4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;; +4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;; +4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;; +4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; +4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;; +4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;; +4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;; +4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; +4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;; +4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;; +4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;; +4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;; +4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;; +4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;; +4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;; +4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;; +4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;; +4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;; +4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;; +4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;; +4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;; +4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;; +4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;; +4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;; +4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;; +4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;; +4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;; +4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;; +4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;; +4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;; +A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; +A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; +A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; +A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;; +A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;; +A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;; +A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;; +A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;; +A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;; +A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;; +A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;; +A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;; +A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;; +A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;; +A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;; +A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;; +A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;; +A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;; +A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;; +A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;; +A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;; +A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;; +A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;; +A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;; +A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;; +A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;; +A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;; +A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;; +A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;; +A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;; +A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;; +A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;; +A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;; +A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;; +A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;; +A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;; +A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;; +A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;; +A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;; +A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;; +A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;; +A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;; +A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;; +A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;; +A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;; +A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;; +A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;; +A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;; +A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;; +A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;; +A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;; +A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;; +A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;; +A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;; +A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;; +A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;; +A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;; +A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;; +A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;; +A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;; +A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;; +A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;; +A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;; +A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;; +A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;; +A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;; +A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;; +A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;; +A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;; +A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;; +A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;; +A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;; +A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;; +A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;; +A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;; +A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;; +A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;; +A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;; +A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;; +A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;; +A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;; +A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;; +A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;; +A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;; +A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;; +A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;; +A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;; +A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;; +A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;; +A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;; +A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;; +A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;; +A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;; +A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;; +A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;; +A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;; +A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;; +A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;; +A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;; +A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;; +A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;; +A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;; +A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;; +A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;; +A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;; +A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;; +A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;; +A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;; +A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;; +A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;; +A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;; +A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;; +A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;; +A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;; +A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;; +A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;; +A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;; +A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;; +A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;; +A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;; +A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;; +A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;; +A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;; +A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;; +A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;; +A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;; +A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;; +A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;; +A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;; +A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;; +A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;; +A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;; +A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;; +A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;; +A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;; +A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;; +A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;; +A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;; +A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;; +A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;; +A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;; +A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;; +A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;; +A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;; +A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;; +A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;; +A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;; +A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;; +A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;; +A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;; +A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;; +A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;; +A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;; +A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;; +A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;; +A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;; +A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;; +A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;; +A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;; +A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;; +A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;; +A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;; +A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;; +A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;; +A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;; +A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;; +A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;; +A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;; +A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;; +A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;; +A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;; +A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;; +A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;; +A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;; +A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;; +A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;; +A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;; +A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;; +A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;; +A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;; +A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;; +A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;; +A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;; +A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;; +A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;; +A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;; +A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;; +A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;; +A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;; +A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;; +A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;; +A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;; +A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;; +A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;; +A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;; +A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;; +A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;; +A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;; +A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;; +A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;; +A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;; +A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;; +A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;; +A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;; +A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;; +A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;; +A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;; +A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;; +A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;; +A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;; +A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;; +A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;; +A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;; +A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;; +A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;; +A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;; +A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;; +A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;; +A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;; +A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;; +A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;; +A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;; +A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;; +A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;; +A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;; +A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;; +A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;; +A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;; +A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;; +A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;; +A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;; +A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;; +A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;; +A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;; +A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;; +A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;; +A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;; +A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;; +A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;; +A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;; +A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;; +A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;; +A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;; +A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;; +A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;; +A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;; +A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;; +A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;; +A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;; +A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;; +A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;; +A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;; +A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;; +A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;; +A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;; +A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;; +A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;; +A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;; +A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;; +A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;; +A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;; +A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;; +A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;; +A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;; +A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;; +A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;; +A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;; +A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;; +A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;; +A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;; +A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;; +A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;; +A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;; +A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;; +A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;; +A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;; +A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;; +A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;; +A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;; +A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;; +A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;; +A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;; +A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;; +A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;; +A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;; +A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;; +A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;; +A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;; +A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;; +A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;; +A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;; +A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;; +A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;; +A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;; +A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;; +A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;; +A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;; +A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;; +A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;; +A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;; +A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;; +A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;; +A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;; +A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;; +A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;; +A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;; +A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;; +A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;; +A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;; +A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;; +A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;; +A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;; +A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;; +A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;; +A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;; +A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;; +A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;; +A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;; +A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;; +A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;; +A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;; +A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;; +A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;; +A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;; +A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;; +A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;; +A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;; +A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;; +A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;; +A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;; +A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;; +A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;; +A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;; +A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;; +A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;; +A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;; +A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;; +A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;; +A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;; +A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; +A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;; +A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;; +A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;; +A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;; +A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;; +A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; +A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;; +A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;; +A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;; +A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; +A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;; +A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;; +A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; +A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;; +A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;; +A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;; +A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; +A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;; +A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;; +A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;; +A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;; +A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;; +A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;; +A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;; +A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;; +A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;; +A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;; +A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;; +A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;; +A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;; +A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;; +A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;; +A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;; +A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;; +A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;; +A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;; +A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;; +A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;; +A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;; +A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;; +A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;; +A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;; +A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;; +A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;; +A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;; +A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;; +A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;; +A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;; +A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;; +A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;; +A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;; +A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;; +A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;; +A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;; +A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;; +A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;; +A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;; +A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;; +A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;; +A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;; +A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;; +A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;; +A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;; +A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;; +A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;; +A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;; +A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;; +A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;; +A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;; +A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;; +A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;; +A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;; +A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;; +A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;; +A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;; +A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;; +A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;; +A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;; +A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;; +A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;; +A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;; +A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;; +A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;; +A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;; +A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;; +A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;; +A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;; +A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;; +A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;; +A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;; +A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;; +A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;; +A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;; +A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;; +A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;; +A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;; +A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;; +A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;; +A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;; +A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;; +A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;; +A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;; +A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;; +A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;; +A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;; +A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;; +A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;; +A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;; +A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;; +A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;; +A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;; +A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;; +A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;; +A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;; +A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;; +A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;; +A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;; +A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;; +A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;; +A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;; +A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;; +A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;; +A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;; +A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;; +A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;; +A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;; +A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;; +A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;; +A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;; +A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;; +A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;; +A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;; +A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;; +A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;; +A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;; +A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;; +A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;; +A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;; +A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;; +A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;; +A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;; +A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;; +A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;; +A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;; +A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;; +A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;; +A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;; +A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;; +A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;; +A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;; +A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;; +A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;; +A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;; +A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;; +A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;; +A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;; +A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;; +A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;; +A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;; +A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;; +A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;; +A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;; +A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;; +A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;; +A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;; +A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;; +A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;; +A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;; +A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;; +A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;; +A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;; +A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;; +A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;; +A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;; +A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;; +A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;; +A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;; +A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;; +A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;; +A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;; +A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;; +A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;; +A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;; +A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;; +A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;; +A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;; +A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;; +A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;; +A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;; +A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;; +A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;; +A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;; +A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;; +A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;; +A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;; +A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;; +A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;; +A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;; +A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;; +A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;; +A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;; +A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;; +A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;; +A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;; +A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;; +A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;; +A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;; +A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;; +A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;; +A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;; +A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;; +A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;; +A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;; +A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;; +A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;; +A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;; +A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;; +A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;; +A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;; +A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;; +A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;; +A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;; +A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;; +A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;; +A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;; +A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;; +A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;; +A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;; +A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;; +A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;; +A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;; +A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;; +A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;; +A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;; +A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;; +A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;; +A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;; +A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;; +A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;; +A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;; +A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;; +A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;; +A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;; +A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;; +A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;; +A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;; +A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;; +A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;; +A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;; +A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;; +A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;; +A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;; +A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;; +A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;; +A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;; +A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;; +A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;; +A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;; +A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;; +A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;; +A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;; +A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;; +A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;; +A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;; +A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;; +A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;; +A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;; +A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;; +A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;; +A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;; +A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;; +A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;; +A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;; +A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;; +A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;; +A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;; +A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;; +A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;; +A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;; +A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;; +A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;; +A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;; +A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;; +A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;; +A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;; +A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;; +A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;; +A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;; +A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;; +A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;; +A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;; +A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;; +A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;; +A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;; +A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;; +A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;; +A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;; +A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;; +A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;; +A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;; +A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;; +A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;; +A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;; +A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;; +A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;; +A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;; +A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;; +A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;; +A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;; +A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;; +A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;; +A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;; +A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;; +A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;; +A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;; +A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; +A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;; +A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;; +A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;; +A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;; +A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;; +A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;; +A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; +A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;; +A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;; +A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;; +A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;; +A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;; +A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;; +A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; +A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;; +A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;; +A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; +A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;; +A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;; +A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;; +A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; +A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;; +A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;; +A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;; +A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;; +A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;; +A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;; +A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;; +A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;; +A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;; +A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;; +A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;; +A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;; +A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;; +A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;; +A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;; +A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;; +A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;; +A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;; +A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;; +A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;; +A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;; +A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;; +A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;; +A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;; +A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;; +A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;; +A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;; +A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;; +A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;; +A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;; +A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;; +A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;; +A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;; +A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;; +A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;; +A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;; +A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;; +A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;; +A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;; +A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;; +A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;; +A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;; +A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;; +A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;; +A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;; +A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; +A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;; +A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;; +A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;; +A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;; +A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;; +A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;; +A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;; +A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; +A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;; +A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;; +A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; +A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;; +A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;; +A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; +A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;; +A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;; +A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; +A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;; +A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;; +A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;; +A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;; +A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;; +A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;; +A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;; +A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;; +A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;; +A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;; +A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;; +A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;; +A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;; +A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;; +A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;; +A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;; +A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;; +A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;; +A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;; +A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;; +A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;; +A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;; +A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;; +A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;; +A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;; +A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;; +A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;; +A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;; +A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;; +A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;; +A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;; +A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;; +A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;; +A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;; +A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;; +A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;; +A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;; +A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;; +A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;; +A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;; +A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;; +A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;; +A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;; +A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;; +A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;; +A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;; +A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;; +A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;; +A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;; +A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;; +A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;; +A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;; +A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;; +A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;; +A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;; +A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;; +A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;; +A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;; +A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;; +A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;; +A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;; +A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;; +A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;; +A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;; +A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;; +A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;; +A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;; +A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;; +A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;; +A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;; +A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;; +A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;; +A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;; +A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;; +A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;; +A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;; +A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;; +A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;; +A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;; +A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;; +A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;; +A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;; +A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;; +A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;; +A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;; +A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;; +A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;; +A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;; +A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;; +A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;; +A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;; +A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;; +A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;; +A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;; +A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;; +A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;; +A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;; +A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;; +A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;; +A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;; +A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; +A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;; +A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;; +A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;; +A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;; +A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;; +A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;; +A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; +A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;; +A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;; +A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;; +A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; +A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;; +A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;; +A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;; +A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; +A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;; +A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;; +A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;; +A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;; +A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;; +A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;; +A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;; +A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;; +A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;; +A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;; +A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;; +A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;; +A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;; +A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;; +A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;; +A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;; +A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;; +A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;; +A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;; +A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;; +A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;; +A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;; +A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;; +A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;; +A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;; +A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;; +A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;; +A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;; +A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;; +A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;; +A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;; +A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;; +A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;; +A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;; +A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;; +A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;; +A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;; +A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;; +A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;; +A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;; +A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;; +A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;; +A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;; +A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;; +A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;; +A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;; +A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;; +A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;; +A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;; +A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;; +A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;; +A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;; +A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;; +A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;; +A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;; +A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;; +A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;; +A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;; +A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;; +A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;; +A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;; +A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;; +A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;; +A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;; +A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;; +A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;; +A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;; +A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;; +A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;; +A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;; +A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;; +A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;; +A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;; +A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;; +A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;; +A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;; +A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;; +A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;; +A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;; +A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;; +A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;; +A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;; +A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;; +A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;; +A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;; +A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; +A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;; +A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;; +A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;; +A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;; +A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;; +A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;; +A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; +A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;; +A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;; +A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;; +A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; +A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;; +A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;; +A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;; +A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; +A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;; +A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;; +A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;; +A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;; +A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;; +A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;; +A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;; +A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;; +A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;; +A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;; +A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;; +A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;; +A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;; +A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;; +A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;; +A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;; +A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;; +A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;; +A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;; +A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;; +A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;; +A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;; +A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;; +A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;; +A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;; +A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;; +A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;; +A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;; +A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;; +A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;; +A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;; +A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;; +A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;; +A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;; +A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;; +A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;; +A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;; +A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;; +A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;; +A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;; +A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;; +A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;; +A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;; +A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;; +A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;; +A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;; +A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;; +A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;; +A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;; +A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;; +A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;; +A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;; +A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;; +A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;; +A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;; +A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;; +A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;; +A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;; +A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;; +A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;; +A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;; +A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;; +A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;; +A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;; +A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;; +A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;; +A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;; +A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;; +A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;; +A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;; +A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;; +A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;; +A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;; +A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;; +A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;; +A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;; +A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;; +A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;; +A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;; +A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;; +A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;; +A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;; +A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;; +A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;; +A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;; +A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;; +A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;; +A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;; +A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;; +A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;; +A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;; +A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;; +A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;; +A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;; +A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;; +A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;; +A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;; +A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;; +A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;; +A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;; +A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;; +A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;; +A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;; +A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;; +A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;; +A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;; +A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;; +A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;; +A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;; +A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;; +A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;; +A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;; +A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;; +A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;; +A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;; +A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;; +A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;; +A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;; +A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; +A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;; +A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;; +A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;; +A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;; +A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;; +A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;; +A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;; +A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;; +A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;; +A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; +A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;; +A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;; +A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; +A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;; +A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;; +A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;; +A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;; +A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;; +A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;; +A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;; +A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;; +A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;; +A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;; +A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;; +A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; +A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;; +A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;; +A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;; +A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;; +A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;; +A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;; +A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;; +A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;; +A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;; +A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;; +A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; +A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;; +A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;; +A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;; +A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; +A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;; +A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;; +A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;; +A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;; +A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;; +A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;; +A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;; +A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;; +A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;; +A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;; +A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;; +A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;; +A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;; +A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;; +A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;; +A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;; +A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;; +A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;; +A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;; +A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;; +A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;; +A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;; +A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;; +A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;; +A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;; +A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;; +A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;; +A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;; +A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;; +A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;; +A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;; +A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;; +A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;; +A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;; +A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;; +A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;; +A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;; +A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;; +A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;; +A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;; +A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;; +A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;; +A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;; +A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;; +A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;; +A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;; +A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;; +A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;; +A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;; +A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;; +A491;YI RADICAL LI;So;0;ON;;;;;N;;;;; +A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;; +A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;; +A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;; +A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;; +A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;; +A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;; +A498;YI RADICAL MI;So;0;ON;;;;;N;;;;; +A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;; +A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;; +A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;; +A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;; +A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;; +A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;; +A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;; +A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;; +A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;; +A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;; +A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;; +A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;; +A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;; +A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;; +A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;; +A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;; +A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;; +A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;; +A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;; +A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;; +A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;; +A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;; +A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;; +A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;; +A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;; +A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;; +A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;; +A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;; +A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;; +A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;; +A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;; +A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;; +A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;; +A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;; +A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;; +A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;; +A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;; +A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;; +A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;; +A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;; +A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;; +A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;; +A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;; +A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;; +A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;; +A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;; +A500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;; +A501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;; +A502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;; +A503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;; +A504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;; +A505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;; +A506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;; +A507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;; +A508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;; +A509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;; +A50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;; +A50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;; +A50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;; +A50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;; +A50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;; +A50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;; +A510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;; +A511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;; +A512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;; +A513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;; +A514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;; +A515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;; +A516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;; +A517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; +A518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; +A519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; +A51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;; +A51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;; +A51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;; +A51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;; +A51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;; +A51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;; +A520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;; +A521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;; +A522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;; +A523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; +A524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;; +A525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;; +A526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;; +A527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;; +A528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;; +A529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;; +A52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;; +A52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;; +A52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;; +A52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;; +A52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;; +A52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;; +A530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;; +A531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;; +A532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;; +A533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;; +A534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;; +A535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;; +A536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;; +A537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;; +A538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;; +A539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;; +A53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; +A53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;; +A53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;; +A53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; +A53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; +A53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;; +A540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;; +A541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; +A542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;; +A543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;; +A544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;; +A545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;; +A546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;; +A547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;; +A548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; +A549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;; +A54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;; +A54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;; +A54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;; +A54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;; +A54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;; +A54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;; +A550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;; +A551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;; +A552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;; +A553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;; +A554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;; +A555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;; +A556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;; +A557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;; +A558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;; +A559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;; +A55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;; +A55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;; +A55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;; +A55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;; +A55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;; +A55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;; +A560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;; +A561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; +A562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;; +A563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; +A564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; +A565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; +A566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;; +A567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;; +A568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;; +A569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;; +A56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;; +A56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;; +A56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;; +A56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;; +A56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;; +A56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;; +A570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;; +A571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;; +A572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;; +A573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;; +A574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;; +A575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;; +A576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;; +A577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;; +A578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;; +A579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;; +A57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;; +A57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;; +A57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;; +A57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;; +A57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;; +A57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;; +A580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;; +A581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;; +A582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;; +A583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;; +A584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;; +A585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;; +A586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;; +A587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;; +A588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;; +A589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;; +A58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;; +A58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;; +A58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;; +A58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;; +A58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;; +A58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;; +A590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;; +A591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;; +A592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;; +A593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;; +A594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;; +A595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;; +A596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;; +A597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;; +A598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;; +A599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;; +A59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;; +A59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;; +A59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;; +A59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;; +A59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;; +A59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;; +A5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;; +A5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;; +A5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;; +A5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;; +A5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;; +A5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;; +A5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;; +A5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;; +A5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;; +A5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;; +A5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;; +A5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; +A5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;; +A5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; +A5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; +A5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; +A5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;; +A5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;; +A5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; +A5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;; +A5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;; +A5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;; +A5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;; +A5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;; +A5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;; +A5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; +A5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;; +A5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;; +A5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;; +A5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;; +A5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;; +A5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;; +A5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;; +A5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;; +A5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;; +A5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;; +A5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;; +A5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;; +A5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;; +A5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;; +A5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;; +A5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;; +A5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;; +A5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;; +A5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;; +A5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;; +A5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;; +A5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;; +A5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;; +A5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;; +A5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; +A5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;; +A5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; +A5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; +A5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; +A5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;; +A5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;; +A5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; +A5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;; +A5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;; +A5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;; +A5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;; +A5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;; +A5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;; +A5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; +A5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;; +A5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;; +A5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;; +A5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;; +A5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;; +A5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;; +A5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;; +A5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;; +A5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;; +A5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;; +A5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;; +A5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;; +A5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;; +A5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;; +A5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;; +A5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;; +A5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;; +A5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;; +A5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;; +A5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;; +A5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;; +A5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;; +A5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;; +A5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;; +A5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;; +A5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; +A5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;; +A5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; +A5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; +A5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; +A5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;; +A600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;; +A601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;; +A602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;; +A603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;; +A604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;; +A605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;; +A606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;; +A607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;; +A608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;; +A609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;; +A60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;; +A60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;; +A60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;; +A60D;VAI COMMA;Po;0;ON;;;;;N;;;;; +A60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;; +A60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;; +A610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;; +A611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;; +A612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;; +A613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;; +A614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;; +A615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;; +A616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;; +A617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;; +A618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;; +A619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;; +A61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;; +A61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;; +A61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;; +A61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;; +A61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;; +A61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;; +A620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +A621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +A622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +A623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +A624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +A625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +A626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +A627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +A628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +A629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +A62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;; +A62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;; +A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641; +A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640 +A642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643; +A643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642 +A644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645; +A645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644 +A646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647; +A647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646 +A648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649; +A649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648 +A64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B; +A64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A +A64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D; +A64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C +A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F; +A64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E +A650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651; +A651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650 +A652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653; +A653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652 +A654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655; +A655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654 +A656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657; +A657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656 +A658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659; +A659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658 +A65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B; +A65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A +A65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D; +A65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C +A65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F; +A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E +A662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663; +A663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662 +A664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665; +A665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664 +A666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667; +A667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666 +A668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669; +A669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668 +A66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B; +A66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A +A66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D; +A66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C +A66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;; +A66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;; +A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;; +A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;; +A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;; +A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;; +A67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;; +A680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681; +A681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680 +A682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683; +A683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682 +A684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685; +A685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684 +A686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687; +A687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686 +A688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689; +A689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688 +A68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B; +A68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A +A68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D; +A68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C +A68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F; +A68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E +A690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691; +A691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690 +A692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693; +A693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692 +A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695; +A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694 +A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697; +A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696 +A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;; +A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;; +A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;; +A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;; +A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;; +A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;; +A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;; +A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;; +A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;; +A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;; +A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;; +A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;; +A71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;; +A71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;; +A71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; +A71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; +A71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; +A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;; +A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;; +A722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723; +A723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722 +A724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725; +A725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724 +A726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727; +A727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726 +A728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729; +A729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728 +A72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B; +A72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A +A72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D; +A72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C +A72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F; +A72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E +A730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;; +A731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;; +A732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733; +A733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732 +A734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735; +A735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734 +A736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737; +A737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736 +A738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739; +A739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738 +A73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B; +A73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A +A73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D; +A73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C +A73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F; +A73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E +A740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741; +A741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740 +A742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743; +A743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742 +A744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745; +A745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744 +A746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747; +A747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746 +A748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749; +A749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748 +A74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B; +A74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A +A74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D; +A74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C +A74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F; +A74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E +A750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751; +A751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750 +A752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753; +A753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752 +A754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755; +A755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754 +A756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757; +A757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756 +A758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759; +A759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758 +A75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B; +A75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A +A75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D; +A75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C +A75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F; +A75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E +A760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761; +A761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760 +A762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763; +A763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762 +A764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765; +A765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764 +A766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767; +A767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766 +A768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769; +A769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768 +A76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B; +A76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A +A76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D; +A76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C +A76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F; +A76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E +A770;MODIFIER LETTER US;Lm;0;L; A76F;;;;N;;;;; +A771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;; +A772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;; +A773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;; +A774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;; +A775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;; +A776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;; +A777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;; +A778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;; +A779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A; +A77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779 +A77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C; +A77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B +A77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79; +A77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F; +A77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E +A780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781; +A781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780 +A782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783; +A783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782 +A784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785; +A785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784 +A786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787; +A787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786 +A788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;; +A789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;; +A78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;; +A78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C; +A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B +A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;; +A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;; +A7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;; +A7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;; +A7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;; +A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;; +A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;; +A802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;; +A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;; +A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;; +A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;; +A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;; +A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;; +A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;; +A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;; +A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;; +A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;; +A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;; +A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;; +A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;; +A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;; +A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;; +A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;; +A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;; +A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;; +A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;; +A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;; +A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;; +A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;; +A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;; +A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;; +A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;; +A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;; +A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;; +A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;; +A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;; +A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;; +A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;; +A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;; +A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;; +A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;; +A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;; +A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;; +A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;; +A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;; +A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;; +A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;; +A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;; +A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;; +A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;; +A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;; +A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;; +A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;; +A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;; +A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;; +A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;; +A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;; +A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;; +A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;; +A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;; +A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;; +A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;; +A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;; +A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;; +A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;; +A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;; +A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;; +A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;; +A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;; +A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;; +A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;; +A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;; +A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;; +A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;; +A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;; +A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;; +A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;; +A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;; +A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;; +A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;; +A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;; +A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;; +A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;; +A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;; +A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;; +A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;; +A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;; +A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;; +A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;; +A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;; +A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;; +A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;; +A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;; +A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;; +A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;; +A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;; +A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;; +A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;; +A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;; +A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;; +A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;; +A882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;; +A883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;; +A884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;; +A885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;; +A886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;; +A887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;; +A888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +A889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +A88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +A88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +A88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;; +A88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;; +A88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;; +A88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;; +A890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;; +A891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;; +A892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;; +A893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;; +A894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;; +A895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;; +A896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;; +A897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;; +A898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;; +A899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;; +A89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;; +A89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;; +A89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;; +A89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;; +A89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;; +A89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;; +A8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;; +A8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;; +A8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;; +A8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;; +A8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;; +A8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;; +A8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;; +A8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;; +A8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;; +A8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;; +A8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;; +A8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;; +A8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;; +A8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;; +A8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;; +A8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;; +A8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;; +A8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;; +A8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;; +A8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;; +A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;; +A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;; +A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;; +A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;; +A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;; +A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +A8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +A8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +A8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +A8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +A8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +A8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +A8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +A8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +A8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +A903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +A904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +A905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +A906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +A907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +A908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +A909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +A90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;; +A90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;; +A90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;; +A90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;; +A90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;; +A90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;; +A910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;; +A911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;; +A912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;; +A913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;; +A914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;; +A915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;; +A916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;; +A917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;; +A918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;; +A919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;; +A91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;; +A91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;; +A91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;; +A91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;; +A91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;; +A91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;; +A920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;; +A921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;; +A922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;; +A923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;; +A924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;; +A925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;; +A926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;; +A927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;; +A928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;; +A929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;; +A92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;; +A92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;; +A92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;; +A92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;; +A92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;; +A92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;; +A930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;; +A931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;; +A932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;; +A933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;; +A934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;; +A935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;; +A936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;; +A937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;; +A938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;; +A939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;; +A93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;; +A93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;; +A93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;; +A93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;; +A93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;; +A93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;; +A940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;; +A941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;; +A942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;; +A943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;; +A944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;; +A945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;; +A946;REJANG LETTER A;Lo;0;L;;;;;N;;;;; +A947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +A948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +A949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +A94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +A94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +A94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +A94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;; +A94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;; +A94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; +A950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; +A951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; +A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;; +A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;; +A95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;; +AA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;; +AA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;; +AA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;; +AA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;; +AA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;; +AA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;; +AA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;; +AA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;; +AA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;; +AA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;; +AA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;; +AA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;; +AA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;; +AA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;; +AA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;; +AA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;; +AA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;; +AA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;; +AA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;; +AA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;; +AA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;; +AA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;; +AA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;; +AA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;; +AA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;; +AA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;; +AA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;; +AA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;; +AA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;; +AA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;; +AA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;; +AA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;; +AA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;; +AA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;; +AA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;; +AA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;; +AA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;; +AA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;; +AA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;; +AA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;; +AA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;; +AA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; +AA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +AA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +AA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;; +AA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +AA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; +AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +AA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +AA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; +AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;; +AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;; +AA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;; +AA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;; +AA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;; +AA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;; +AA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;; +AA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;; +AA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;; +AA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;; +AA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;; +AA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;; +AA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;; +AA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;; +AA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;; +AA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;; +AA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;; +AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;; +AA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +AA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +AA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +AA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +AA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +AA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +AA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +AA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +AA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +AA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +AA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;; +AA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;; +AA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;; +AA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;; +AC00;HANGUL SYLLABLE GA;Lo;0;L;;;;;N;;;;; +AC01;HANGUL SYLLABLE GAG;Lo;0;L;;;;;N;;;;; +AC02;HANGUL SYLLABLE GAGG;Lo;0;L;;;;;N;;;;; +AC03;HANGUL SYLLABLE GAGS;Lo;0;L;;;;;N;;;;; +AC04;HANGUL SYLLABLE GAN;Lo;0;L;;;;;N;;;;; +AC05;HANGUL SYLLABLE GANI;Lo;0;L;;;;;N;;;;; +AC06;HANGUL SYLLABLE GANH;Lo;0;L;;;;;N;;;;; +AC07;HANGUL SYLLABLE GAD;Lo;0;L;;;;;N;;;;; +AC08;HANGUL SYLLABLE GAL;Lo;0;L;;;;;N;;;;; +AC09;HANGUL SYLLABLE GALG;Lo;0;L;;;;;N;;;;; +AC0A;HANGUL SYLLABLE GALM;Lo;0;L;;;;;N;;;;; +AC0B;HANGUL SYLLABLE GALB;Lo;0;L;;;;;N;;;;; +AC0C;HANGUL SYLLABLE GALS;Lo;0;L;;;;;N;;;;; +AC0D;HANGUL SYLLABLE GALT;Lo;0;L;;;;;N;;;;; +AC0E;HANGUL SYLLABLE GALP;Lo;0;L;;;;;N;;;;; +AC0F;HANGUL SYLLABLE GALH;Lo;0;L;;;;;N;;;;; +AC10;HANGUL SYLLABLE GAM;Lo;0;L;;;;;N;;;;; +AC11;HANGUL SYLLABLE GAB;Lo;0;L;;;;;N;;;;; +AC12;HANGUL SYLLABLE GABS;Lo;0;L;;;;;N;;;;; +AC13;HANGUL SYLLABLE GAS;Lo;0;L;;;;;N;;;;; +AC14;HANGUL SYLLABLE GASS;Lo;0;L;;;;;N;;;;; +AC15;HANGUL SYLLABLE GANG;Lo;0;L;;;;;N;;;;; +AC16;HANGUL SYLLABLE GAJ;Lo;0;L;;;;;N;;;;; +AC17;HANGUL SYLLABLE GAC;Lo;0;L;;;;;N;;;;; +AC18;HANGUL SYLLABLE GAK;Lo;0;L;;;;;N;;;;; +AC19;HANGUL SYLLABLE GAT;Lo;0;L;;;;;N;;;;; +AC1A;HANGUL SYLLABLE GAP;Lo;0;L;;;;;N;;;;; +AC1B;HANGUL SYLLABLE GAH;Lo;0;L;;;;;N;;;;; +AC1C;HANGUL SYLLABLE GAE;Lo;0;L;;;;;N;;;;; +AC1D;HANGUL SYLLABLE GAEG;Lo;0;L;;;;;N;;;;; +AC1E;HANGUL SYLLABLE GAEGG;Lo;0;L;;;;;N;;;;; +AC1F;HANGUL SYLLABLE GAEGS;Lo;0;L;;;;;N;;;;; +AC20;HANGUL SYLLABLE GAEN;Lo;0;L;;;;;N;;;;; +AC21;HANGUL SYLLABLE GAENI;Lo;0;L;;;;;N;;;;; +AC22;HANGUL SYLLABLE GAENH;Lo;0;L;;;;;N;;;;; +AC23;HANGUL SYLLABLE GAED;Lo;0;L;;;;;N;;;;; +AC24;HANGUL SYLLABLE GAEL;Lo;0;L;;;;;N;;;;; +AC25;HANGUL SYLLABLE GAELG;Lo;0;L;;;;;N;;;;; +AC26;HANGUL SYLLABLE GAELM;Lo;0;L;;;;;N;;;;; +AC27;HANGUL SYLLABLE GAELB;Lo;0;L;;;;;N;;;;; +AC28;HANGUL SYLLABLE GAELS;Lo;0;L;;;;;N;;;;; +AC29;HANGUL SYLLABLE GAELT;Lo;0;L;;;;;N;;;;; +AC2A;HANGUL SYLLABLE GAELP;Lo;0;L;;;;;N;;;;; +AC2B;HANGUL SYLLABLE GAELH;Lo;0;L;;;;;N;;;;; +AC2C;HANGUL SYLLABLE GAEM;Lo;0;L;;;;;N;;;;; +AC2D;HANGUL SYLLABLE GAEB;Lo;0;L;;;;;N;;;;; +AC2E;HANGUL SYLLABLE GAEBS;Lo;0;L;;;;;N;;;;; +AC2F;HANGUL SYLLABLE GAES;Lo;0;L;;;;;N;;;;; +AC30;HANGUL SYLLABLE GAESS;Lo;0;L;;;;;N;;;;; +AC31;HANGUL SYLLABLE GAENG;Lo;0;L;;;;;N;;;;; +AC32;HANGUL SYLLABLE GAEJ;Lo;0;L;;;;;N;;;;; +AC33;HANGUL SYLLABLE GAEC;Lo;0;L;;;;;N;;;;; +AC34;HANGUL SYLLABLE GAEK;Lo;0;L;;;;;N;;;;; +AC35;HANGUL SYLLABLE GAET;Lo;0;L;;;;;N;;;;; +AC36;HANGUL SYLLABLE GAEP;Lo;0;L;;;;;N;;;;; +AC37;HANGUL SYLLABLE GAEH;Lo;0;L;;;;;N;;;;; +AC38;HANGUL SYLLABLE GYA;Lo;0;L;;;;;N;;;;; +AC39;HANGUL SYLLABLE GYAG;Lo;0;L;;;;;N;;;;; +AC3A;HANGUL SYLLABLE GYAGG;Lo;0;L;;;;;N;;;;; +AC3B;HANGUL SYLLABLE GYAGS;Lo;0;L;;;;;N;;;;; +AC3C;HANGUL SYLLABLE GYAN;Lo;0;L;;;;;N;;;;; +AC3D;HANGUL SYLLABLE GYANI;Lo;0;L;;;;;N;;;;; +AC3E;HANGUL SYLLABLE GYANH;Lo;0;L;;;;;N;;;;; +AC3F;HANGUL SYLLABLE GYAD;Lo;0;L;;;;;N;;;;; +AC40;HANGUL SYLLABLE GYAL;Lo;0;L;;;;;N;;;;; +AC41;HANGUL SYLLABLE GYALG;Lo;0;L;;;;;N;;;;; +AC42;HANGUL SYLLABLE GYALM;Lo;0;L;;;;;N;;;;; +AC43;HANGUL SYLLABLE GYALB;Lo;0;L;;;;;N;;;;; +AC44;HANGUL SYLLABLE GYALS;Lo;0;L;;;;;N;;;;; +AC45;HANGUL SYLLABLE GYALT;Lo;0;L;;;;;N;;;;; +AC46;HANGUL SYLLABLE GYALP;Lo;0;L;;;;;N;;;;; +AC47;HANGUL SYLLABLE GYALH;Lo;0;L;;;;;N;;;;; +AC48;HANGUL SYLLABLE GYAM;Lo;0;L;;;;;N;;;;; +AC49;HANGUL SYLLABLE GYAB;Lo;0;L;;;;;N;;;;; +AC4A;HANGUL SYLLABLE GYABS;Lo;0;L;;;;;N;;;;; +AC4B;HANGUL SYLLABLE GYAS;Lo;0;L;;;;;N;;;;; +AC4C;HANGUL SYLLABLE GYASS;Lo;0;L;;;;;N;;;;; +AC4D;HANGUL SYLLABLE GYANG;Lo;0;L;;;;;N;;;;; +AC4E;HANGUL SYLLABLE GYAJ;Lo;0;L;;;;;N;;;;; +AC4F;HANGUL SYLLABLE GYAC;Lo;0;L;;;;;N;;;;; +AC50;HANGUL SYLLABLE GYAK;Lo;0;L;;;;;N;;;;; +AC51;HANGUL SYLLABLE GYAT;Lo;0;L;;;;;N;;;;; +AC52;HANGUL SYLLABLE GYAP;Lo;0;L;;;;;N;;;;; +AC53;HANGUL SYLLABLE GYAH;Lo;0;L;;;;;N;;;;; +AC54;HANGUL SYLLABLE GYAE;Lo;0;L;;;;;N;;;;; +AC55;HANGUL SYLLABLE GYAEG;Lo;0;L;;;;;N;;;;; +AC56;HANGUL SYLLABLE GYAEGG;Lo;0;L;;;;;N;;;;; +AC57;HANGUL SYLLABLE GYAEGS;Lo;0;L;;;;;N;;;;; +AC58;HANGUL SYLLABLE GYAEN;Lo;0;L;;;;;N;;;;; +AC59;HANGUL SYLLABLE GYAENI;Lo;0;L;;;;;N;;;;; +AC5A;HANGUL SYLLABLE GYAENH;Lo;0;L;;;;;N;;;;; +AC5B;HANGUL SYLLABLE GYAED;Lo;0;L;;;;;N;;;;; +AC5C;HANGUL SYLLABLE GYAEL;Lo;0;L;;;;;N;;;;; +AC5D;HANGUL SYLLABLE GYAELG;Lo;0;L;;;;;N;;;;; +AC5E;HANGUL SYLLABLE GYAELM;Lo;0;L;;;;;N;;;;; +AC5F;HANGUL SYLLABLE GYAELB;Lo;0;L;;;;;N;;;;; +AC60;HANGUL SYLLABLE GYAELS;Lo;0;L;;;;;N;;;;; +AC61;HANGUL SYLLABLE GYAELT;Lo;0;L;;;;;N;;;;; +AC62;HANGUL SYLLABLE GYAELP;Lo;0;L;;;;;N;;;;; +AC63;HANGUL SYLLABLE GYAELH;Lo;0;L;;;;;N;;;;; +AC64;HANGUL SYLLABLE GYAEM;Lo;0;L;;;;;N;;;;; +AC65;HANGUL SYLLABLE GYAEB;Lo;0;L;;;;;N;;;;; +AC66;HANGUL SYLLABLE GYAEBS;Lo;0;L;;;;;N;;;;; +AC67;HANGUL SYLLABLE GYAES;Lo;0;L;;;;;N;;;;; +AC68;HANGUL SYLLABLE GYAESS;Lo;0;L;;;;;N;;;;; +AC69;HANGUL SYLLABLE GYAENG;Lo;0;L;;;;;N;;;;; +AC6A;HANGUL SYLLABLE GYAEJ;Lo;0;L;;;;;N;;;;; +AC6B;HANGUL SYLLABLE GYAEC;Lo;0;L;;;;;N;;;;; +AC6C;HANGUL SYLLABLE GYAEK;Lo;0;L;;;;;N;;;;; +AC6D;HANGUL SYLLABLE GYAET;Lo;0;L;;;;;N;;;;; +AC6E;HANGUL SYLLABLE GYAEP;Lo;0;L;;;;;N;;;;; +AC6F;HANGUL SYLLABLE GYAEH;Lo;0;L;;;;;N;;;;; +AC70;HANGUL SYLLABLE GEO;Lo;0;L;;;;;N;;;;; +AC71;HANGUL SYLLABLE GEOG;Lo;0;L;;;;;N;;;;; +AC72;HANGUL SYLLABLE GEOGG;Lo;0;L;;;;;N;;;;; +AC73;HANGUL SYLLABLE GEOGS;Lo;0;L;;;;;N;;;;; +AC74;HANGUL SYLLABLE GEON;Lo;0;L;;;;;N;;;;; +AC75;HANGUL SYLLABLE GEONI;Lo;0;L;;;;;N;;;;; +AC76;HANGUL SYLLABLE GEONH;Lo;0;L;;;;;N;;;;; +AC77;HANGUL SYLLABLE GEOD;Lo;0;L;;;;;N;;;;; +AC78;HANGUL SYLLABLE GEOL;Lo;0;L;;;;;N;;;;; +AC79;HANGUL SYLLABLE GEOLG;Lo;0;L;;;;;N;;;;; +AC7A;HANGUL SYLLABLE GEOLM;Lo;0;L;;;;;N;;;;; +AC7B;HANGUL SYLLABLE GEOLB;Lo;0;L;;;;;N;;;;; +AC7C;HANGUL SYLLABLE GEOLS;Lo;0;L;;;;;N;;;;; +AC7D;HANGUL SYLLABLE GEOLT;Lo;0;L;;;;;N;;;;; +AC7E;HANGUL SYLLABLE GEOLP;Lo;0;L;;;;;N;;;;; +AC7F;HANGUL SYLLABLE GEOLH;Lo;0;L;;;;;N;;;;; +AC80;HANGUL SYLLABLE GEOM;Lo;0;L;;;;;N;;;;; +AC81;HANGUL SYLLABLE GEOB;Lo;0;L;;;;;N;;;;; +AC82;HANGUL SYLLABLE GEOBS;Lo;0;L;;;;;N;;;;; +AC83;HANGUL SYLLABLE GEOS;Lo;0;L;;;;;N;;;;; +AC84;HANGUL SYLLABLE GEOSS;Lo;0;L;;;;;N;;;;; +AC85;HANGUL SYLLABLE GEONG;Lo;0;L;;;;;N;;;;; +AC86;HANGUL SYLLABLE GEOJ;Lo;0;L;;;;;N;;;;; +AC87;HANGUL SYLLABLE GEOC;Lo;0;L;;;;;N;;;;; +AC88;HANGUL SYLLABLE GEOK;Lo;0;L;;;;;N;;;;; +AC89;HANGUL SYLLABLE GEOT;Lo;0;L;;;;;N;;;;; +AC8A;HANGUL SYLLABLE GEOP;Lo;0;L;;;;;N;;;;; +AC8B;HANGUL SYLLABLE GEOH;Lo;0;L;;;;;N;;;;; +AC8C;HANGUL SYLLABLE GE;Lo;0;L;;;;;N;;;;; +AC8D;HANGUL SYLLABLE GEG;Lo;0;L;;;;;N;;;;; +AC8E;HANGUL SYLLABLE GEGG;Lo;0;L;;;;;N;;;;; +AC8F;HANGUL SYLLABLE GEGS;Lo;0;L;;;;;N;;;;; +AC90;HANGUL SYLLABLE GEN;Lo;0;L;;;;;N;;;;; +AC91;HANGUL SYLLABLE GENI;Lo;0;L;;;;;N;;;;; +AC92;HANGUL SYLLABLE GENH;Lo;0;L;;;;;N;;;;; +AC93;HANGUL SYLLABLE GED;Lo;0;L;;;;;N;;;;; +AC94;HANGUL SYLLABLE GEL;Lo;0;L;;;;;N;;;;; +AC95;HANGUL SYLLABLE GELG;Lo;0;L;;;;;N;;;;; +AC96;HANGUL SYLLABLE GELM;Lo;0;L;;;;;N;;;;; +AC97;HANGUL SYLLABLE GELB;Lo;0;L;;;;;N;;;;; +AC98;HANGUL SYLLABLE GELS;Lo;0;L;;;;;N;;;;; +AC99;HANGUL SYLLABLE GELT;Lo;0;L;;;;;N;;;;; +AC9A;HANGUL SYLLABLE GELP;Lo;0;L;;;;;N;;;;; +AC9B;HANGUL SYLLABLE GELH;Lo;0;L;;;;;N;;;;; +AC9C;HANGUL SYLLABLE GEM;Lo;0;L;;;;;N;;;;; +AC9D;HANGUL SYLLABLE GEB;Lo;0;L;;;;;N;;;;; +AC9E;HANGUL SYLLABLE GEBS;Lo;0;L;;;;;N;;;;; +AC9F;HANGUL SYLLABLE GES;Lo;0;L;;;;;N;;;;; +ACA0;HANGUL SYLLABLE GESS;Lo;0;L;;;;;N;;;;; +ACA1;HANGUL SYLLABLE GENG;Lo;0;L;;;;;N;;;;; +ACA2;HANGUL SYLLABLE GEJ;Lo;0;L;;;;;N;;;;; +ACA3;HANGUL SYLLABLE GEC;Lo;0;L;;;;;N;;;;; +ACA4;HANGUL SYLLABLE GEK;Lo;0;L;;;;;N;;;;; +ACA5;HANGUL SYLLABLE GET;Lo;0;L;;;;;N;;;;; +ACA6;HANGUL SYLLABLE GEP;Lo;0;L;;;;;N;;;;; +ACA7;HANGUL SYLLABLE GEH;Lo;0;L;;;;;N;;;;; +ACA8;HANGUL SYLLABLE GYEO;Lo;0;L;;;;;N;;;;; +ACA9;HANGUL SYLLABLE GYEOG;Lo;0;L;;;;;N;;;;; +ACAA;HANGUL SYLLABLE GYEOGG;Lo;0;L;;;;;N;;;;; +ACAB;HANGUL SYLLABLE GYEOGS;Lo;0;L;;;;;N;;;;; +ACAC;HANGUL SYLLABLE GYEON;Lo;0;L;;;;;N;;;;; +ACAD;HANGUL SYLLABLE GYEONI;Lo;0;L;;;;;N;;;;; +ACAE;HANGUL SYLLABLE GYEONH;Lo;0;L;;;;;N;;;;; +ACAF;HANGUL SYLLABLE GYEOD;Lo;0;L;;;;;N;;;;; +ACB0;HANGUL SYLLABLE GYEOL;Lo;0;L;;;;;N;;;;; +ACB1;HANGUL SYLLABLE GYEOLG;Lo;0;L;;;;;N;;;;; +ACB2;HANGUL SYLLABLE GYEOLM;Lo;0;L;;;;;N;;;;; +ACB3;HANGUL SYLLABLE GYEOLB;Lo;0;L;;;;;N;;;;; +ACB4;HANGUL SYLLABLE GYEOLS;Lo;0;L;;;;;N;;;;; +ACB5;HANGUL SYLLABLE GYEOLT;Lo;0;L;;;;;N;;;;; +ACB6;HANGUL SYLLABLE GYEOLP;Lo;0;L;;;;;N;;;;; +ACB7;HANGUL SYLLABLE GYEOLH;Lo;0;L;;;;;N;;;;; +ACB8;HANGUL SYLLABLE GYEOM;Lo;0;L;;;;;N;;;;; +ACB9;HANGUL SYLLABLE GYEOB;Lo;0;L;;;;;N;;;;; +ACBA;HANGUL SYLLABLE GYEOBS;Lo;0;L;;;;;N;;;;; +ACBB;HANGUL SYLLABLE GYEOS;Lo;0;L;;;;;N;;;;; +ACBC;HANGUL SYLLABLE GYEOSS;Lo;0;L;;;;;N;;;;; +ACBD;HANGUL SYLLABLE GYEONG;Lo;0;L;;;;;N;;;;; +ACBE;HANGUL SYLLABLE GYEOJ;Lo;0;L;;;;;N;;;;; +ACBF;HANGUL SYLLABLE GYEOC;Lo;0;L;;;;;N;;;;; +ACC0;HANGUL SYLLABLE GYEOK;Lo;0;L;;;;;N;;;;; +ACC1;HANGUL SYLLABLE GYEOT;Lo;0;L;;;;;N;;;;; +ACC2;HANGUL SYLLABLE GYEOP;Lo;0;L;;;;;N;;;;; +ACC3;HANGUL SYLLABLE GYEOH;Lo;0;L;;;;;N;;;;; +ACC4;HANGUL SYLLABLE GYE;Lo;0;L;;;;;N;;;;; +ACC5;HANGUL SYLLABLE GYEG;Lo;0;L;;;;;N;;;;; +ACC6;HANGUL SYLLABLE GYEGG;Lo;0;L;;;;;N;;;;; +ACC7;HANGUL SYLLABLE GYEGS;Lo;0;L;;;;;N;;;;; +ACC8;HANGUL SYLLABLE GYEN;Lo;0;L;;;;;N;;;;; +ACC9;HANGUL SYLLABLE GYENI;Lo;0;L;;;;;N;;;;; +ACCA;HANGUL SYLLABLE GYENH;Lo;0;L;;;;;N;;;;; +ACCB;HANGUL SYLLABLE GYED;Lo;0;L;;;;;N;;;;; +ACCC;HANGUL SYLLABLE GYEL;Lo;0;L;;;;;N;;;;; +ACCD;HANGUL SYLLABLE GYELG;Lo;0;L;;;;;N;;;;; +ACCE;HANGUL SYLLABLE GYELM;Lo;0;L;;;;;N;;;;; +ACCF;HANGUL SYLLABLE GYELB;Lo;0;L;;;;;N;;;;; +ACD0;HANGUL SYLLABLE GYELS;Lo;0;L;;;;;N;;;;; +ACD1;HANGUL SYLLABLE GYELT;Lo;0;L;;;;;N;;;;; +ACD2;HANGUL SYLLABLE GYELP;Lo;0;L;;;;;N;;;;; +ACD3;HANGUL SYLLABLE GYELH;Lo;0;L;;;;;N;;;;; +ACD4;HANGUL SYLLABLE GYEM;Lo;0;L;;;;;N;;;;; +ACD5;HANGUL SYLLABLE GYEB;Lo;0;L;;;;;N;;;;; +ACD6;HANGUL SYLLABLE GYEBS;Lo;0;L;;;;;N;;;;; +ACD7;HANGUL SYLLABLE GYES;Lo;0;L;;;;;N;;;;; +ACD8;HANGUL SYLLABLE GYESS;Lo;0;L;;;;;N;;;;; +ACD9;HANGUL SYLLABLE GYENG;Lo;0;L;;;;;N;;;;; +ACDA;HANGUL SYLLABLE GYEJ;Lo;0;L;;;;;N;;;;; +ACDB;HANGUL SYLLABLE GYEC;Lo;0;L;;;;;N;;;;; +ACDC;HANGUL SYLLABLE GYEK;Lo;0;L;;;;;N;;;;; +ACDD;HANGUL SYLLABLE GYET;Lo;0;L;;;;;N;;;;; +ACDE;HANGUL SYLLABLE GYEP;Lo;0;L;;;;;N;;;;; +ACDF;HANGUL SYLLABLE GYEH;Lo;0;L;;;;;N;;;;; +ACE0;HANGUL SYLLABLE GO;Lo;0;L;;;;;N;;;;; +ACE1;HANGUL SYLLABLE GOG;Lo;0;L;;;;;N;;;;; +ACE2;HANGUL SYLLABLE GOGG;Lo;0;L;;;;;N;;;;; +ACE3;HANGUL SYLLABLE GOGS;Lo;0;L;;;;;N;;;;; +ACE4;HANGUL SYLLABLE GON;Lo;0;L;;;;;N;;;;; +ACE5;HANGUL SYLLABLE GONI;Lo;0;L;;;;;N;;;;; +ACE6;HANGUL SYLLABLE GONH;Lo;0;L;;;;;N;;;;; +ACE7;HANGUL SYLLABLE GOD;Lo;0;L;;;;;N;;;;; +ACE8;HANGUL SYLLABLE GOL;Lo;0;L;;;;;N;;;;; +ACE9;HANGUL SYLLABLE GOLG;Lo;0;L;;;;;N;;;;; +ACEA;HANGUL SYLLABLE GOLM;Lo;0;L;;;;;N;;;;; +ACEB;HANGUL SYLLABLE GOLB;Lo;0;L;;;;;N;;;;; +ACEC;HANGUL SYLLABLE GOLS;Lo;0;L;;;;;N;;;;; +ACED;HANGUL SYLLABLE GOLT;Lo;0;L;;;;;N;;;;; +ACEE;HANGUL SYLLABLE GOLP;Lo;0;L;;;;;N;;;;; +ACEF;HANGUL SYLLABLE GOLH;Lo;0;L;;;;;N;;;;; +ACF0;HANGUL SYLLABLE GOM;Lo;0;L;;;;;N;;;;; +ACF1;HANGUL SYLLABLE GOB;Lo;0;L;;;;;N;;;;; +ACF2;HANGUL SYLLABLE GOBS;Lo;0;L;;;;;N;;;;; +ACF3;HANGUL SYLLABLE GOS;Lo;0;L;;;;;N;;;;; +ACF4;HANGUL SYLLABLE GOSS;Lo;0;L;;;;;N;;;;; +ACF5;HANGUL SYLLABLE GONG;Lo;0;L;;;;;N;;;;; +ACF6;HANGUL SYLLABLE GOJ;Lo;0;L;;;;;N;;;;; +ACF7;HANGUL SYLLABLE GOC;Lo;0;L;;;;;N;;;;; +ACF8;HANGUL SYLLABLE GOK;Lo;0;L;;;;;N;;;;; +ACF9;HANGUL SYLLABLE GOT;Lo;0;L;;;;;N;;;;; +ACFA;HANGUL SYLLABLE GOP;Lo;0;L;;;;;N;;;;; +ACFB;HANGUL SYLLABLE GOH;Lo;0;L;;;;;N;;;;; +ACFC;HANGUL SYLLABLE GWA;Lo;0;L;;;;;N;;;;; +ACFD;HANGUL SYLLABLE GWAG;Lo;0;L;;;;;N;;;;; +ACFE;HANGUL SYLLABLE GWAGG;Lo;0;L;;;;;N;;;;; +ACFF;HANGUL SYLLABLE GWAGS;Lo;0;L;;;;;N;;;;; +AD00;HANGUL SYLLABLE GWAN;Lo;0;L;;;;;N;;;;; +AD01;HANGUL SYLLABLE GWANI;Lo;0;L;;;;;N;;;;; +AD02;HANGUL SYLLABLE GWANH;Lo;0;L;;;;;N;;;;; +AD03;HANGUL SYLLABLE GWAD;Lo;0;L;;;;;N;;;;; +AD04;HANGUL SYLLABLE GWAL;Lo;0;L;;;;;N;;;;; +AD05;HANGUL SYLLABLE GWALG;Lo;0;L;;;;;N;;;;; +AD06;HANGUL SYLLABLE GWALM;Lo;0;L;;;;;N;;;;; +AD07;HANGUL SYLLABLE GWALB;Lo;0;L;;;;;N;;;;; +AD08;HANGUL SYLLABLE GWALS;Lo;0;L;;;;;N;;;;; +AD09;HANGUL SYLLABLE GWALT;Lo;0;L;;;;;N;;;;; +AD0A;HANGUL SYLLABLE GWALP;Lo;0;L;;;;;N;;;;; +AD0B;HANGUL SYLLABLE GWALH;Lo;0;L;;;;;N;;;;; +AD0C;HANGUL SYLLABLE GWAM;Lo;0;L;;;;;N;;;;; +AD0D;HANGUL SYLLABLE GWAB;Lo;0;L;;;;;N;;;;; +AD0E;HANGUL SYLLABLE GWABS;Lo;0;L;;;;;N;;;;; +AD0F;HANGUL SYLLABLE GWAS;Lo;0;L;;;;;N;;;;; +AD10;HANGUL SYLLABLE GWASS;Lo;0;L;;;;;N;;;;; +AD11;HANGUL SYLLABLE GWANG;Lo;0;L;;;;;N;;;;; +AD12;HANGUL SYLLABLE GWAJ;Lo;0;L;;;;;N;;;;; +AD13;HANGUL SYLLABLE GWAC;Lo;0;L;;;;;N;;;;; +AD14;HANGUL SYLLABLE GWAK;Lo;0;L;;;;;N;;;;; +AD15;HANGUL SYLLABLE GWAT;Lo;0;L;;;;;N;;;;; +AD16;HANGUL SYLLABLE GWAP;Lo;0;L;;;;;N;;;;; +AD17;HANGUL SYLLABLE GWAH;Lo;0;L;;;;;N;;;;; +AD18;HANGUL SYLLABLE GWAE;Lo;0;L;;;;;N;;;;; +AD19;HANGUL SYLLABLE GWAEG;Lo;0;L;;;;;N;;;;; +AD1A;HANGUL SYLLABLE GWAEGG;Lo;0;L;;;;;N;;;;; +AD1B;HANGUL SYLLABLE GWAEGS;Lo;0;L;;;;;N;;;;; +AD1C;HANGUL SYLLABLE GWAEN;Lo;0;L;;;;;N;;;;; +AD1D;HANGUL SYLLABLE GWAENI;Lo;0;L;;;;;N;;;;; +AD1E;HANGUL SYLLABLE GWAENH;Lo;0;L;;;;;N;;;;; +AD1F;HANGUL SYLLABLE GWAED;Lo;0;L;;;;;N;;;;; +AD20;HANGUL SYLLABLE GWAEL;Lo;0;L;;;;;N;;;;; +AD21;HANGUL SYLLABLE GWAELG;Lo;0;L;;;;;N;;;;; +AD22;HANGUL SYLLABLE GWAELM;Lo;0;L;;;;;N;;;;; +AD23;HANGUL SYLLABLE GWAELB;Lo;0;L;;;;;N;;;;; +AD24;HANGUL SYLLABLE GWAELS;Lo;0;L;;;;;N;;;;; +AD25;HANGUL SYLLABLE GWAELT;Lo;0;L;;;;;N;;;;; +AD26;HANGUL SYLLABLE GWAELP;Lo;0;L;;;;;N;;;;; +AD27;HANGUL SYLLABLE GWAELH;Lo;0;L;;;;;N;;;;; +AD28;HANGUL SYLLABLE GWAEM;Lo;0;L;;;;;N;;;;; +AD29;HANGUL SYLLABLE GWAEB;Lo;0;L;;;;;N;;;;; +AD2A;HANGUL SYLLABLE GWAEBS;Lo;0;L;;;;;N;;;;; +AD2B;HANGUL SYLLABLE GWAES;Lo;0;L;;;;;N;;;;; +AD2C;HANGUL SYLLABLE GWAESS;Lo;0;L;;;;;N;;;;; +AD2D;HANGUL SYLLABLE GWAENG;Lo;0;L;;;;;N;;;;; +AD2E;HANGUL SYLLABLE GWAEJ;Lo;0;L;;;;;N;;;;; +AD2F;HANGUL SYLLABLE GWAEC;Lo;0;L;;;;;N;;;;; +AD30;HANGUL SYLLABLE GWAEK;Lo;0;L;;;;;N;;;;; +AD31;HANGUL SYLLABLE GWAET;Lo;0;L;;;;;N;;;;; +AD32;HANGUL SYLLABLE GWAEP;Lo;0;L;;;;;N;;;;; +AD33;HANGUL SYLLABLE GWAEH;Lo;0;L;;;;;N;;;;; +AD34;HANGUL SYLLABLE GOE;Lo;0;L;;;;;N;;;;; +AD35;HANGUL SYLLABLE GOEG;Lo;0;L;;;;;N;;;;; +AD36;HANGUL SYLLABLE GOEGG;Lo;0;L;;;;;N;;;;; +AD37;HANGUL SYLLABLE GOEGS;Lo;0;L;;;;;N;;;;; +AD38;HANGUL SYLLABLE GOEN;Lo;0;L;;;;;N;;;;; +AD39;HANGUL SYLLABLE GOENI;Lo;0;L;;;;;N;;;;; +AD3A;HANGUL SYLLABLE GOENH;Lo;0;L;;;;;N;;;;; +AD3B;HANGUL SYLLABLE GOED;Lo;0;L;;;;;N;;;;; +AD3C;HANGUL SYLLABLE GOEL;Lo;0;L;;;;;N;;;;; +AD3D;HANGUL SYLLABLE GOELG;Lo;0;L;;;;;N;;;;; +AD3E;HANGUL SYLLABLE GOELM;Lo;0;L;;;;;N;;;;; +AD3F;HANGUL SYLLABLE GOELB;Lo;0;L;;;;;N;;;;; +AD40;HANGUL SYLLABLE GOELS;Lo;0;L;;;;;N;;;;; +AD41;HANGUL SYLLABLE GOELT;Lo;0;L;;;;;N;;;;; +AD42;HANGUL SYLLABLE GOELP;Lo;0;L;;;;;N;;;;; +AD43;HANGUL SYLLABLE GOELH;Lo;0;L;;;;;N;;;;; +AD44;HANGUL SYLLABLE GOEM;Lo;0;L;;;;;N;;;;; +AD45;HANGUL SYLLABLE GOEB;Lo;0;L;;;;;N;;;;; +AD46;HANGUL SYLLABLE GOEBS;Lo;0;L;;;;;N;;;;; +AD47;HANGUL SYLLABLE GOES;Lo;0;L;;;;;N;;;;; +AD48;HANGUL SYLLABLE GOESS;Lo;0;L;;;;;N;;;;; +AD49;HANGUL SYLLABLE GOENG;Lo;0;L;;;;;N;;;;; +AD4A;HANGUL SYLLABLE GOEJ;Lo;0;L;;;;;N;;;;; +AD4B;HANGUL SYLLABLE GOEC;Lo;0;L;;;;;N;;;;; +AD4C;HANGUL SYLLABLE GOEK;Lo;0;L;;;;;N;;;;; +AD4D;HANGUL SYLLABLE GOET;Lo;0;L;;;;;N;;;;; +AD4E;HANGUL SYLLABLE GOEP;Lo;0;L;;;;;N;;;;; +AD4F;HANGUL SYLLABLE GOEH;Lo;0;L;;;;;N;;;;; +AD50;HANGUL SYLLABLE GYO;Lo;0;L;;;;;N;;;;; +AD51;HANGUL SYLLABLE GYOG;Lo;0;L;;;;;N;;;;; +AD52;HANGUL SYLLABLE GYOGG;Lo;0;L;;;;;N;;;;; +AD53;HANGUL SYLLABLE GYOGS;Lo;0;L;;;;;N;;;;; +AD54;HANGUL SYLLABLE GYON;Lo;0;L;;;;;N;;;;; +AD55;HANGUL SYLLABLE GYONI;Lo;0;L;;;;;N;;;;; +AD56;HANGUL SYLLABLE GYONH;Lo;0;L;;;;;N;;;;; +AD57;HANGUL SYLLABLE GYOD;Lo;0;L;;;;;N;;;;; +AD58;HANGUL SYLLABLE GYOL;Lo;0;L;;;;;N;;;;; +AD59;HANGUL SYLLABLE GYOLG;Lo;0;L;;;;;N;;;;; +AD5A;HANGUL SYLLABLE GYOLM;Lo;0;L;;;;;N;;;;; +AD5B;HANGUL SYLLABLE GYOLB;Lo;0;L;;;;;N;;;;; +AD5C;HANGUL SYLLABLE GYOLS;Lo;0;L;;;;;N;;;;; +AD5D;HANGUL SYLLABLE GYOLT;Lo;0;L;;;;;N;;;;; +AD5E;HANGUL SYLLABLE GYOLP;Lo;0;L;;;;;N;;;;; +AD5F;HANGUL SYLLABLE GYOLH;Lo;0;L;;;;;N;;;;; +AD60;HANGUL SYLLABLE GYOM;Lo;0;L;;;;;N;;;;; +AD61;HANGUL SYLLABLE GYOB;Lo;0;L;;;;;N;;;;; +AD62;HANGUL SYLLABLE GYOBS;Lo;0;L;;;;;N;;;;; +AD63;HANGUL SYLLABLE GYOS;Lo;0;L;;;;;N;;;;; +AD64;HANGUL SYLLABLE GYOSS;Lo;0;L;;;;;N;;;;; +AD65;HANGUL SYLLABLE GYONG;Lo;0;L;;;;;N;;;;; +AD66;HANGUL SYLLABLE GYOJ;Lo;0;L;;;;;N;;;;; +AD67;HANGUL SYLLABLE GYOC;Lo;0;L;;;;;N;;;;; +AD68;HANGUL SYLLABLE GYOK;Lo;0;L;;;;;N;;;;; +AD69;HANGUL SYLLABLE GYOT;Lo;0;L;;;;;N;;;;; +AD6A;HANGUL SYLLABLE GYOP;Lo;0;L;;;;;N;;;;; +AD6B;HANGUL SYLLABLE GYOH;Lo;0;L;;;;;N;;;;; +AD6C;HANGUL SYLLABLE GU;Lo;0;L;;;;;N;;;;; +AD6D;HANGUL SYLLABLE GUG;Lo;0;L;;;;;N;;;;; +AD6E;HANGUL SYLLABLE GUGG;Lo;0;L;;;;;N;;;;; +AD6F;HANGUL SYLLABLE GUGS;Lo;0;L;;;;;N;;;;; +AD70;HANGUL SYLLABLE GUN;Lo;0;L;;;;;N;;;;; +AD71;HANGUL SYLLABLE GUNI;Lo;0;L;;;;;N;;;;; +AD72;HANGUL SYLLABLE GUNH;Lo;0;L;;;;;N;;;;; +AD73;HANGUL SYLLABLE GUD;Lo;0;L;;;;;N;;;;; +AD74;HANGUL SYLLABLE GUL;Lo;0;L;;;;;N;;;;; +AD75;HANGUL SYLLABLE GULG;Lo;0;L;;;;;N;;;;; +AD76;HANGUL SYLLABLE GULM;Lo;0;L;;;;;N;;;;; +AD77;HANGUL SYLLABLE GULB;Lo;0;L;;;;;N;;;;; +AD78;HANGUL SYLLABLE GULS;Lo;0;L;;;;;N;;;;; +AD79;HANGUL SYLLABLE GULT;Lo;0;L;;;;;N;;;;; +AD7A;HANGUL SYLLABLE GULP;Lo;0;L;;;;;N;;;;; +AD7B;HANGUL SYLLABLE GULH;Lo;0;L;;;;;N;;;;; +AD7C;HANGUL SYLLABLE GUM;Lo;0;L;;;;;N;;;;; +AD7D;HANGUL SYLLABLE GUB;Lo;0;L;;;;;N;;;;; +AD7E;HANGUL SYLLABLE GUBS;Lo;0;L;;;;;N;;;;; +AD7F;HANGUL SYLLABLE GUS;Lo;0;L;;;;;N;;;;; +AD80;HANGUL SYLLABLE GUSS;Lo;0;L;;;;;N;;;;; +AD81;HANGUL SYLLABLE GUNG;Lo;0;L;;;;;N;;;;; +AD82;HANGUL SYLLABLE GUJ;Lo;0;L;;;;;N;;;;; +AD83;HANGUL SYLLABLE GUC;Lo;0;L;;;;;N;;;;; +AD84;HANGUL SYLLABLE GUK;Lo;0;L;;;;;N;;;;; +AD85;HANGUL SYLLABLE GUT;Lo;0;L;;;;;N;;;;; +AD86;HANGUL SYLLABLE GUP;Lo;0;L;;;;;N;;;;; +AD87;HANGUL SYLLABLE GUH;Lo;0;L;;;;;N;;;;; +AD88;HANGUL SYLLABLE GWEO;Lo;0;L;;;;;N;;;;; +AD89;HANGUL SYLLABLE GWEOG;Lo;0;L;;;;;N;;;;; +AD8A;HANGUL SYLLABLE GWEOGG;Lo;0;L;;;;;N;;;;; +AD8B;HANGUL SYLLABLE GWEOGS;Lo;0;L;;;;;N;;;;; +AD8C;HANGUL SYLLABLE GWEON;Lo;0;L;;;;;N;;;;; +AD8D;HANGUL SYLLABLE GWEONI;Lo;0;L;;;;;N;;;;; +AD8E;HANGUL SYLLABLE GWEONH;Lo;0;L;;;;;N;;;;; +AD8F;HANGUL SYLLABLE GWEOD;Lo;0;L;;;;;N;;;;; +AD90;HANGUL SYLLABLE GWEOL;Lo;0;L;;;;;N;;;;; +AD91;HANGUL SYLLABLE GWEOLG;Lo;0;L;;;;;N;;;;; +AD92;HANGUL SYLLABLE GWEOLM;Lo;0;L;;;;;N;;;;; +AD93;HANGUL SYLLABLE GWEOLB;Lo;0;L;;;;;N;;;;; +AD94;HANGUL SYLLABLE GWEOLS;Lo;0;L;;;;;N;;;;; +AD95;HANGUL SYLLABLE GWEOLT;Lo;0;L;;;;;N;;;;; +AD96;HANGUL SYLLABLE GWEOLP;Lo;0;L;;;;;N;;;;; +AD97;HANGUL SYLLABLE GWEOLH;Lo;0;L;;;;;N;;;;; +AD98;HANGUL SYLLABLE GWEOM;Lo;0;L;;;;;N;;;;; +AD99;HANGUL SYLLABLE GWEOB;Lo;0;L;;;;;N;;;;; +AD9A;HANGUL SYLLABLE GWEOBS;Lo;0;L;;;;;N;;;;; +AD9B;HANGUL SYLLABLE GWEOS;Lo;0;L;;;;;N;;;;; +AD9C;HANGUL SYLLABLE GWEOSS;Lo;0;L;;;;;N;;;;; +AD9D;HANGUL SYLLABLE GWEONG;Lo;0;L;;;;;N;;;;; +AD9E;HANGUL SYLLABLE GWEOJ;Lo;0;L;;;;;N;;;;; +AD9F;HANGUL SYLLABLE GWEOC;Lo;0;L;;;;;N;;;;; +ADA0;HANGUL SYLLABLE GWEOK;Lo;0;L;;;;;N;;;;; +ADA1;HANGUL SYLLABLE GWEOT;Lo;0;L;;;;;N;;;;; +ADA2;HANGUL SYLLABLE GWEOP;Lo;0;L;;;;;N;;;;; +ADA3;HANGUL SYLLABLE GWEOH;Lo;0;L;;;;;N;;;;; +ADA4;HANGUL SYLLABLE GWE;Lo;0;L;;;;;N;;;;; +ADA5;HANGUL SYLLABLE GWEG;Lo;0;L;;;;;N;;;;; +ADA6;HANGUL SYLLABLE GWEGG;Lo;0;L;;;;;N;;;;; +ADA7;HANGUL SYLLABLE GWEGS;Lo;0;L;;;;;N;;;;; +ADA8;HANGUL SYLLABLE GWEN;Lo;0;L;;;;;N;;;;; +ADA9;HANGUL SYLLABLE GWENI;Lo;0;L;;;;;N;;;;; +ADAA;HANGUL SYLLABLE GWENH;Lo;0;L;;;;;N;;;;; +ADAB;HANGUL SYLLABLE GWED;Lo;0;L;;;;;N;;;;; +ADAC;HANGUL SYLLABLE GWEL;Lo;0;L;;;;;N;;;;; +ADAD;HANGUL SYLLABLE GWELG;Lo;0;L;;;;;N;;;;; +ADAE;HANGUL SYLLABLE GWELM;Lo;0;L;;;;;N;;;;; +ADAF;HANGUL SYLLABLE GWELB;Lo;0;L;;;;;N;;;;; +ADB0;HANGUL SYLLABLE GWELS;Lo;0;L;;;;;N;;;;; +ADB1;HANGUL SYLLABLE GWELT;Lo;0;L;;;;;N;;;;; +ADB2;HANGUL SYLLABLE GWELP;Lo;0;L;;;;;N;;;;; +ADB3;HANGUL SYLLABLE GWELH;Lo;0;L;;;;;N;;;;; +ADB4;HANGUL SYLLABLE GWEM;Lo;0;L;;;;;N;;;;; +ADB5;HANGUL SYLLABLE GWEB;Lo;0;L;;;;;N;;;;; +ADB6;HANGUL SYLLABLE GWEBS;Lo;0;L;;;;;N;;;;; +ADB7;HANGUL SYLLABLE GWES;Lo;0;L;;;;;N;;;;; +ADB8;HANGUL SYLLABLE GWESS;Lo;0;L;;;;;N;;;;; +ADB9;HANGUL SYLLABLE GWENG;Lo;0;L;;;;;N;;;;; +ADBA;HANGUL SYLLABLE GWEJ;Lo;0;L;;;;;N;;;;; +ADBB;HANGUL SYLLABLE GWEC;Lo;0;L;;;;;N;;;;; +ADBC;HANGUL SYLLABLE GWEK;Lo;0;L;;;;;N;;;;; +ADBD;HANGUL SYLLABLE GWET;Lo;0;L;;;;;N;;;;; +ADBE;HANGUL SYLLABLE GWEP;Lo;0;L;;;;;N;;;;; +ADBF;HANGUL SYLLABLE GWEH;Lo;0;L;;;;;N;;;;; +ADC0;HANGUL SYLLABLE GWI;Lo;0;L;;;;;N;;;;; +ADC1;HANGUL SYLLABLE GWIG;Lo;0;L;;;;;N;;;;; +ADC2;HANGUL SYLLABLE GWIGG;Lo;0;L;;;;;N;;;;; +ADC3;HANGUL SYLLABLE GWIGS;Lo;0;L;;;;;N;;;;; +ADC4;HANGUL SYLLABLE GWIN;Lo;0;L;;;;;N;;;;; +ADC5;HANGUL SYLLABLE GWINI;Lo;0;L;;;;;N;;;;; +ADC6;HANGUL SYLLABLE GWINH;Lo;0;L;;;;;N;;;;; +ADC7;HANGUL SYLLABLE GWID;Lo;0;L;;;;;N;;;;; +ADC8;HANGUL SYLLABLE GWIL;Lo;0;L;;;;;N;;;;; +ADC9;HANGUL SYLLABLE GWILG;Lo;0;L;;;;;N;;;;; +ADCA;HANGUL SYLLABLE GWILM;Lo;0;L;;;;;N;;;;; +ADCB;HANGUL SYLLABLE GWILB;Lo;0;L;;;;;N;;;;; +ADCC;HANGUL SYLLABLE GWILS;Lo;0;L;;;;;N;;;;; +ADCD;HANGUL SYLLABLE GWILT;Lo;0;L;;;;;N;;;;; +ADCE;HANGUL SYLLABLE GWILP;Lo;0;L;;;;;N;;;;; +ADCF;HANGUL SYLLABLE GWILH;Lo;0;L;;;;;N;;;;; +ADD0;HANGUL SYLLABLE GWIM;Lo;0;L;;;;;N;;;;; +ADD1;HANGUL SYLLABLE GWIB;Lo;0;L;;;;;N;;;;; +ADD2;HANGUL SYLLABLE GWIBS;Lo;0;L;;;;;N;;;;; +ADD3;HANGUL SYLLABLE GWIS;Lo;0;L;;;;;N;;;;; +ADD4;HANGUL SYLLABLE GWISS;Lo;0;L;;;;;N;;;;; +ADD5;HANGUL SYLLABLE GWING;Lo;0;L;;;;;N;;;;; +ADD6;HANGUL SYLLABLE GWIJ;Lo;0;L;;;;;N;;;;; +ADD7;HANGUL SYLLABLE GWIC;Lo;0;L;;;;;N;;;;; +ADD8;HANGUL SYLLABLE GWIK;Lo;0;L;;;;;N;;;;; +ADD9;HANGUL SYLLABLE GWIT;Lo;0;L;;;;;N;;;;; +ADDA;HANGUL SYLLABLE GWIP;Lo;0;L;;;;;N;;;;; +ADDB;HANGUL SYLLABLE GWIH;Lo;0;L;;;;;N;;;;; +ADDC;HANGUL SYLLABLE GYU;Lo;0;L;;;;;N;;;;; +ADDD;HANGUL SYLLABLE GYUG;Lo;0;L;;;;;N;;;;; +ADDE;HANGUL SYLLABLE GYUGG;Lo;0;L;;;;;N;;;;; +ADDF;HANGUL SYLLABLE GYUGS;Lo;0;L;;;;;N;;;;; +ADE0;HANGUL SYLLABLE GYUN;Lo;0;L;;;;;N;;;;; +ADE1;HANGUL SYLLABLE GYUNI;Lo;0;L;;;;;N;;;;; +ADE2;HANGUL SYLLABLE GYUNH;Lo;0;L;;;;;N;;;;; +ADE3;HANGUL SYLLABLE GYUD;Lo;0;L;;;;;N;;;;; +ADE4;HANGUL SYLLABLE GYUL;Lo;0;L;;;;;N;;;;; +ADE5;HANGUL SYLLABLE GYULG;Lo;0;L;;;;;N;;;;; +ADE6;HANGUL SYLLABLE GYULM;Lo;0;L;;;;;N;;;;; +ADE7;HANGUL SYLLABLE GYULB;Lo;0;L;;;;;N;;;;; +ADE8;HANGUL SYLLABLE GYULS;Lo;0;L;;;;;N;;;;; +ADE9;HANGUL SYLLABLE GYULT;Lo;0;L;;;;;N;;;;; +ADEA;HANGUL SYLLABLE GYULP;Lo;0;L;;;;;N;;;;; +ADEB;HANGUL SYLLABLE GYULH;Lo;0;L;;;;;N;;;;; +ADEC;HANGUL SYLLABLE GYUM;Lo;0;L;;;;;N;;;;; +ADED;HANGUL SYLLABLE GYUB;Lo;0;L;;;;;N;;;;; +ADEE;HANGUL SYLLABLE GYUBS;Lo;0;L;;;;;N;;;;; +ADEF;HANGUL SYLLABLE GYUS;Lo;0;L;;;;;N;;;;; +ADF0;HANGUL SYLLABLE GYUSS;Lo;0;L;;;;;N;;;;; +ADF1;HANGUL SYLLABLE GYUNG;Lo;0;L;;;;;N;;;;; +ADF2;HANGUL SYLLABLE GYUJ;Lo;0;L;;;;;N;;;;; +ADF3;HANGUL SYLLABLE GYUC;Lo;0;L;;;;;N;;;;; +ADF4;HANGUL SYLLABLE GYUK;Lo;0;L;;;;;N;;;;; +ADF5;HANGUL SYLLABLE GYUT;Lo;0;L;;;;;N;;;;; +ADF6;HANGUL SYLLABLE GYUP;Lo;0;L;;;;;N;;;;; +ADF7;HANGUL SYLLABLE GYUH;Lo;0;L;;;;;N;;;;; +ADF8;HANGUL SYLLABLE GEU;Lo;0;L;;;;;N;;;;; +ADF9;HANGUL SYLLABLE GEUG;Lo;0;L;;;;;N;;;;; +ADFA;HANGUL SYLLABLE GEUGG;Lo;0;L;;;;;N;;;;; +ADFB;HANGUL SYLLABLE GEUGS;Lo;0;L;;;;;N;;;;; +ADFC;HANGUL SYLLABLE GEUN;Lo;0;L;;;;;N;;;;; +ADFD;HANGUL SYLLABLE GEUNI;Lo;0;L;;;;;N;;;;; +ADFE;HANGUL SYLLABLE GEUNH;Lo;0;L;;;;;N;;;;; +ADFF;HANGUL SYLLABLE GEUD;Lo;0;L;;;;;N;;;;; +AE00;HANGUL SYLLABLE GEUL;Lo;0;L;;;;;N;;;;; +AE01;HANGUL SYLLABLE GEULG;Lo;0;L;;;;;N;;;;; +AE02;HANGUL SYLLABLE GEULM;Lo;0;L;;;;;N;;;;; +AE03;HANGUL SYLLABLE GEULB;Lo;0;L;;;;;N;;;;; +AE04;HANGUL SYLLABLE GEULS;Lo;0;L;;;;;N;;;;; +AE05;HANGUL SYLLABLE GEULT;Lo;0;L;;;;;N;;;;; +AE06;HANGUL SYLLABLE GEULP;Lo;0;L;;;;;N;;;;; +AE07;HANGUL SYLLABLE GEULH;Lo;0;L;;;;;N;;;;; +AE08;HANGUL SYLLABLE GEUM;Lo;0;L;;;;;N;;;;; +AE09;HANGUL SYLLABLE GEUB;Lo;0;L;;;;;N;;;;; +AE0A;HANGUL SYLLABLE GEUBS;Lo;0;L;;;;;N;;;;; +AE0B;HANGUL SYLLABLE GEUS;Lo;0;L;;;;;N;;;;; +AE0C;HANGUL SYLLABLE GEUSS;Lo;0;L;;;;;N;;;;; +AE0D;HANGUL SYLLABLE GEUNG;Lo;0;L;;;;;N;;;;; +AE0E;HANGUL SYLLABLE GEUJ;Lo;0;L;;;;;N;;;;; +AE0F;HANGUL SYLLABLE GEUC;Lo;0;L;;;;;N;;;;; +AE10;HANGUL SYLLABLE GEUK;Lo;0;L;;;;;N;;;;; +AE11;HANGUL SYLLABLE GEUT;Lo;0;L;;;;;N;;;;; +AE12;HANGUL SYLLABLE GEUP;Lo;0;L;;;;;N;;;;; +AE13;HANGUL SYLLABLE GEUH;Lo;0;L;;;;;N;;;;; +AE14;HANGUL SYLLABLE GYI;Lo;0;L;;;;;N;;;;; +AE15;HANGUL SYLLABLE GYIG;Lo;0;L;;;;;N;;;;; +AE16;HANGUL SYLLABLE GYIGG;Lo;0;L;;;;;N;;;;; +AE17;HANGUL SYLLABLE GYIGS;Lo;0;L;;;;;N;;;;; +AE18;HANGUL SYLLABLE GYIN;Lo;0;L;;;;;N;;;;; +AE19;HANGUL SYLLABLE GYINI;Lo;0;L;;;;;N;;;;; +AE1A;HANGUL SYLLABLE GYINH;Lo;0;L;;;;;N;;;;; +AE1B;HANGUL SYLLABLE GYID;Lo;0;L;;;;;N;;;;; +AE1C;HANGUL SYLLABLE GYIL;Lo;0;L;;;;;N;;;;; +AE1D;HANGUL SYLLABLE GYILG;Lo;0;L;;;;;N;;;;; +AE1E;HANGUL SYLLABLE GYILM;Lo;0;L;;;;;N;;;;; +AE1F;HANGUL SYLLABLE GYILB;Lo;0;L;;;;;N;;;;; +AE20;HANGUL SYLLABLE GYILS;Lo;0;L;;;;;N;;;;; +AE21;HANGUL SYLLABLE GYILT;Lo;0;L;;;;;N;;;;; +AE22;HANGUL SYLLABLE GYILP;Lo;0;L;;;;;N;;;;; +AE23;HANGUL SYLLABLE GYILH;Lo;0;L;;;;;N;;;;; +AE24;HANGUL SYLLABLE GYIM;Lo;0;L;;;;;N;;;;; +AE25;HANGUL SYLLABLE GYIB;Lo;0;L;;;;;N;;;;; +AE26;HANGUL SYLLABLE GYIBS;Lo;0;L;;;;;N;;;;; +AE27;HANGUL SYLLABLE GYIS;Lo;0;L;;;;;N;;;;; +AE28;HANGUL SYLLABLE GYISS;Lo;0;L;;;;;N;;;;; +AE29;HANGUL SYLLABLE GYING;Lo;0;L;;;;;N;;;;; +AE2A;HANGUL SYLLABLE GYIJ;Lo;0;L;;;;;N;;;;; +AE2B;HANGUL SYLLABLE GYIC;Lo;0;L;;;;;N;;;;; +AE2C;HANGUL SYLLABLE GYIK;Lo;0;L;;;;;N;;;;; +AE2D;HANGUL SYLLABLE GYIT;Lo;0;L;;;;;N;;;;; +AE2E;HANGUL SYLLABLE GYIP;Lo;0;L;;;;;N;;;;; +AE2F;HANGUL SYLLABLE GYIH;Lo;0;L;;;;;N;;;;; +AE30;HANGUL SYLLABLE GI;Lo;0;L;;;;;N;;;;; +AE31;HANGUL SYLLABLE GIG;Lo;0;L;;;;;N;;;;; +AE32;HANGUL SYLLABLE GIGG;Lo;0;L;;;;;N;;;;; +AE33;HANGUL SYLLABLE GIGS;Lo;0;L;;;;;N;;;;; +AE34;HANGUL SYLLABLE GIN;Lo;0;L;;;;;N;;;;; +AE35;HANGUL SYLLABLE GINI;Lo;0;L;;;;;N;;;;; +AE36;HANGUL SYLLABLE GINH;Lo;0;L;;;;;N;;;;; +AE37;HANGUL SYLLABLE GID;Lo;0;L;;;;;N;;;;; +AE38;HANGUL SYLLABLE GIL;Lo;0;L;;;;;N;;;;; +AE39;HANGUL SYLLABLE GILG;Lo;0;L;;;;;N;;;;; +AE3A;HANGUL SYLLABLE GILM;Lo;0;L;;;;;N;;;;; +AE3B;HANGUL SYLLABLE GILB;Lo;0;L;;;;;N;;;;; +AE3C;HANGUL SYLLABLE GILS;Lo;0;L;;;;;N;;;;; +AE3D;HANGUL SYLLABLE GILT;Lo;0;L;;;;;N;;;;; +AE3E;HANGUL SYLLABLE GILP;Lo;0;L;;;;;N;;;;; +AE3F;HANGUL SYLLABLE GILH;Lo;0;L;;;;;N;;;;; +AE40;HANGUL SYLLABLE GIM;Lo;0;L;;;;;N;;;;; +AE41;HANGUL SYLLABLE GIB;Lo;0;L;;;;;N;;;;; +AE42;HANGUL SYLLABLE GIBS;Lo;0;L;;;;;N;;;;; +AE43;HANGUL SYLLABLE GIS;Lo;0;L;;;;;N;;;;; +AE44;HANGUL SYLLABLE GISS;Lo;0;L;;;;;N;;;;; +AE45;HANGUL SYLLABLE GING;Lo;0;L;;;;;N;;;;; +AE46;HANGUL SYLLABLE GIJ;Lo;0;L;;;;;N;;;;; +AE47;HANGUL SYLLABLE GIC;Lo;0;L;;;;;N;;;;; +AE48;HANGUL SYLLABLE GIK;Lo;0;L;;;;;N;;;;; +AE49;HANGUL SYLLABLE GIT;Lo;0;L;;;;;N;;;;; +AE4A;HANGUL SYLLABLE GIP;Lo;0;L;;;;;N;;;;; +AE4B;HANGUL SYLLABLE GIH;Lo;0;L;;;;;N;;;;; +AE4C;HANGUL SYLLABLE GGA;Lo;0;L;;;;;N;;;;; +AE4D;HANGUL SYLLABLE GGAG;Lo;0;L;;;;;N;;;;; +AE4E;HANGUL SYLLABLE GGAGG;Lo;0;L;;;;;N;;;;; +AE4F;HANGUL SYLLABLE GGAGS;Lo;0;L;;;;;N;;;;; +AE50;HANGUL SYLLABLE GGAN;Lo;0;L;;;;;N;;;;; +AE51;HANGUL SYLLABLE GGANI;Lo;0;L;;;;;N;;;;; +AE52;HANGUL SYLLABLE GGANH;Lo;0;L;;;;;N;;;;; +AE53;HANGUL SYLLABLE GGAD;Lo;0;L;;;;;N;;;;; +AE54;HANGUL SYLLABLE GGAL;Lo;0;L;;;;;N;;;;; +AE55;HANGUL SYLLABLE GGALG;Lo;0;L;;;;;N;;;;; +AE56;HANGUL SYLLABLE GGALM;Lo;0;L;;;;;N;;;;; +AE57;HANGUL SYLLABLE GGALB;Lo;0;L;;;;;N;;;;; +AE58;HANGUL SYLLABLE GGALS;Lo;0;L;;;;;N;;;;; +AE59;HANGUL SYLLABLE GGALT;Lo;0;L;;;;;N;;;;; +AE5A;HANGUL SYLLABLE GGALP;Lo;0;L;;;;;N;;;;; +AE5B;HANGUL SYLLABLE GGALH;Lo;0;L;;;;;N;;;;; +AE5C;HANGUL SYLLABLE GGAM;Lo;0;L;;;;;N;;;;; +AE5D;HANGUL SYLLABLE GGAB;Lo;0;L;;;;;N;;;;; +AE5E;HANGUL SYLLABLE GGABS;Lo;0;L;;;;;N;;;;; +AE5F;HANGUL SYLLABLE GGAS;Lo;0;L;;;;;N;;;;; +AE60;HANGUL SYLLABLE GGASS;Lo;0;L;;;;;N;;;;; +AE61;HANGUL SYLLABLE GGANG;Lo;0;L;;;;;N;;;;; +AE62;HANGUL SYLLABLE GGAJ;Lo;0;L;;;;;N;;;;; +AE63;HANGUL SYLLABLE GGAC;Lo;0;L;;;;;N;;;;; +AE64;HANGUL SYLLABLE GGAK;Lo;0;L;;;;;N;;;;; +AE65;HANGUL SYLLABLE GGAT;Lo;0;L;;;;;N;;;;; +AE66;HANGUL SYLLABLE GGAP;Lo;0;L;;;;;N;;;;; +AE67;HANGUL SYLLABLE GGAH;Lo;0;L;;;;;N;;;;; +AE68;HANGUL SYLLABLE GGAE;Lo;0;L;;;;;N;;;;; +AE69;HANGUL SYLLABLE GGAEG;Lo;0;L;;;;;N;;;;; +AE6A;HANGUL SYLLABLE GGAEGG;Lo;0;L;;;;;N;;;;; +AE6B;HANGUL SYLLABLE GGAEGS;Lo;0;L;;;;;N;;;;; +AE6C;HANGUL SYLLABLE GGAEN;Lo;0;L;;;;;N;;;;; +AE6D;HANGUL SYLLABLE GGAENI;Lo;0;L;;;;;N;;;;; +AE6E;HANGUL SYLLABLE GGAENH;Lo;0;L;;;;;N;;;;; +AE6F;HANGUL SYLLABLE GGAED;Lo;0;L;;;;;N;;;;; +AE70;HANGUL SYLLABLE GGAEL;Lo;0;L;;;;;N;;;;; +AE71;HANGUL SYLLABLE GGAELG;Lo;0;L;;;;;N;;;;; +AE72;HANGUL SYLLABLE GGAELM;Lo;0;L;;;;;N;;;;; +AE73;HANGUL SYLLABLE GGAELB;Lo;0;L;;;;;N;;;;; +AE74;HANGUL SYLLABLE GGAELS;Lo;0;L;;;;;N;;;;; +AE75;HANGUL SYLLABLE GGAELT;Lo;0;L;;;;;N;;;;; +AE76;HANGUL SYLLABLE GGAELP;Lo;0;L;;;;;N;;;;; +AE77;HANGUL SYLLABLE GGAELH;Lo;0;L;;;;;N;;;;; +AE78;HANGUL SYLLABLE GGAEM;Lo;0;L;;;;;N;;;;; +AE79;HANGUL SYLLABLE GGAEB;Lo;0;L;;;;;N;;;;; +AE7A;HANGUL SYLLABLE GGAEBS;Lo;0;L;;;;;N;;;;; +AE7B;HANGUL SYLLABLE GGAES;Lo;0;L;;;;;N;;;;; +AE7C;HANGUL SYLLABLE GGAESS;Lo;0;L;;;;;N;;;;; +AE7D;HANGUL SYLLABLE GGAENG;Lo;0;L;;;;;N;;;;; +AE7E;HANGUL SYLLABLE GGAEJ;Lo;0;L;;;;;N;;;;; +AE7F;HANGUL SYLLABLE GGAEC;Lo;0;L;;;;;N;;;;; +AE80;HANGUL SYLLABLE GGAEK;Lo;0;L;;;;;N;;;;; +AE81;HANGUL SYLLABLE GGAET;Lo;0;L;;;;;N;;;;; +AE82;HANGUL SYLLABLE GGAEP;Lo;0;L;;;;;N;;;;; +AE83;HANGUL SYLLABLE GGAEH;Lo;0;L;;;;;N;;;;; +AE84;HANGUL SYLLABLE GGYA;Lo;0;L;;;;;N;;;;; +AE85;HANGUL SYLLABLE GGYAG;Lo;0;L;;;;;N;;;;; +AE86;HANGUL SYLLABLE GGYAGG;Lo;0;L;;;;;N;;;;; +AE87;HANGUL SYLLABLE GGYAGS;Lo;0;L;;;;;N;;;;; +AE88;HANGUL SYLLABLE GGYAN;Lo;0;L;;;;;N;;;;; +AE89;HANGUL SYLLABLE GGYANI;Lo;0;L;;;;;N;;;;; +AE8A;HANGUL SYLLABLE GGYANH;Lo;0;L;;;;;N;;;;; +AE8B;HANGUL SYLLABLE GGYAD;Lo;0;L;;;;;N;;;;; +AE8C;HANGUL SYLLABLE GGYAL;Lo;0;L;;;;;N;;;;; +AE8D;HANGUL SYLLABLE GGYALG;Lo;0;L;;;;;N;;;;; +AE8E;HANGUL SYLLABLE GGYALM;Lo;0;L;;;;;N;;;;; +AE8F;HANGUL SYLLABLE GGYALB;Lo;0;L;;;;;N;;;;; +AE90;HANGUL SYLLABLE GGYALS;Lo;0;L;;;;;N;;;;; +AE91;HANGUL SYLLABLE GGYALT;Lo;0;L;;;;;N;;;;; +AE92;HANGUL SYLLABLE GGYALP;Lo;0;L;;;;;N;;;;; +AE93;HANGUL SYLLABLE GGYALH;Lo;0;L;;;;;N;;;;; +AE94;HANGUL SYLLABLE GGYAM;Lo;0;L;;;;;N;;;;; +AE95;HANGUL SYLLABLE GGYAB;Lo;0;L;;;;;N;;;;; +AE96;HANGUL SYLLABLE GGYABS;Lo;0;L;;;;;N;;;;; +AE97;HANGUL SYLLABLE GGYAS;Lo;0;L;;;;;N;;;;; +AE98;HANGUL SYLLABLE GGYASS;Lo;0;L;;;;;N;;;;; +AE99;HANGUL SYLLABLE GGYANG;Lo;0;L;;;;;N;;;;; +AE9A;HANGUL SYLLABLE GGYAJ;Lo;0;L;;;;;N;;;;; +AE9B;HANGUL SYLLABLE GGYAC;Lo;0;L;;;;;N;;;;; +AE9C;HANGUL SYLLABLE GGYAK;Lo;0;L;;;;;N;;;;; +AE9D;HANGUL SYLLABLE GGYAT;Lo;0;L;;;;;N;;;;; +AE9E;HANGUL SYLLABLE GGYAP;Lo;0;L;;;;;N;;;;; +AE9F;HANGUL SYLLABLE GGYAH;Lo;0;L;;;;;N;;;;; +AEA0;HANGUL SYLLABLE GGYAE;Lo;0;L;;;;;N;;;;; +AEA1;HANGUL SYLLABLE GGYAEG;Lo;0;L;;;;;N;;;;; +AEA2;HANGUL SYLLABLE GGYAEGG;Lo;0;L;;;;;N;;;;; +AEA3;HANGUL SYLLABLE GGYAEGS;Lo;0;L;;;;;N;;;;; +AEA4;HANGUL SYLLABLE GGYAEN;Lo;0;L;;;;;N;;;;; +AEA5;HANGUL SYLLABLE GGYAENI;Lo;0;L;;;;;N;;;;; +AEA6;HANGUL SYLLABLE GGYAENH;Lo;0;L;;;;;N;;;;; +AEA7;HANGUL SYLLABLE GGYAED;Lo;0;L;;;;;N;;;;; +AEA8;HANGUL SYLLABLE GGYAEL;Lo;0;L;;;;;N;;;;; +AEA9;HANGUL SYLLABLE GGYAELG;Lo;0;L;;;;;N;;;;; +AEAA;HANGUL SYLLABLE GGYAELM;Lo;0;L;;;;;N;;;;; +AEAB;HANGUL SYLLABLE GGYAELB;Lo;0;L;;;;;N;;;;; +AEAC;HANGUL SYLLABLE GGYAELS;Lo;0;L;;;;;N;;;;; +AEAD;HANGUL SYLLABLE GGYAELT;Lo;0;L;;;;;N;;;;; +AEAE;HANGUL SYLLABLE GGYAELP;Lo;0;L;;;;;N;;;;; +AEAF;HANGUL SYLLABLE GGYAELH;Lo;0;L;;;;;N;;;;; +AEB0;HANGUL SYLLABLE GGYAEM;Lo;0;L;;;;;N;;;;; +AEB1;HANGUL SYLLABLE GGYAEB;Lo;0;L;;;;;N;;;;; +AEB2;HANGUL SYLLABLE GGYAEBS;Lo;0;L;;;;;N;;;;; +AEB3;HANGUL SYLLABLE GGYAES;Lo;0;L;;;;;N;;;;; +AEB4;HANGUL SYLLABLE GGYAESS;Lo;0;L;;;;;N;;;;; +AEB5;HANGUL SYLLABLE GGYAENG;Lo;0;L;;;;;N;;;;; +AEB6;HANGUL SYLLABLE GGYAEJ;Lo;0;L;;;;;N;;;;; +AEB7;HANGUL SYLLABLE GGYAEC;Lo;0;L;;;;;N;;;;; +AEB8;HANGUL SYLLABLE GGYAEK;Lo;0;L;;;;;N;;;;; +AEB9;HANGUL SYLLABLE GGYAET;Lo;0;L;;;;;N;;;;; +AEBA;HANGUL SYLLABLE GGYAEP;Lo;0;L;;;;;N;;;;; +AEBB;HANGUL SYLLABLE GGYAEH;Lo;0;L;;;;;N;;;;; +AEBC;HANGUL SYLLABLE GGEO;Lo;0;L;;;;;N;;;;; +AEBD;HANGUL SYLLABLE GGEOG;Lo;0;L;;;;;N;;;;; +AEBE;HANGUL SYLLABLE GGEOGG;Lo;0;L;;;;;N;;;;; +AEBF;HANGUL SYLLABLE GGEOGS;Lo;0;L;;;;;N;;;;; +AEC0;HANGUL SYLLABLE GGEON;Lo;0;L;;;;;N;;;;; +AEC1;HANGUL SYLLABLE GGEONI;Lo;0;L;;;;;N;;;;; +AEC2;HANGUL SYLLABLE GGEONH;Lo;0;L;;;;;N;;;;; +AEC3;HANGUL SYLLABLE GGEOD;Lo;0;L;;;;;N;;;;; +AEC4;HANGUL SYLLABLE GGEOL;Lo;0;L;;;;;N;;;;; +AEC5;HANGUL SYLLABLE GGEOLG;Lo;0;L;;;;;N;;;;; +AEC6;HANGUL SYLLABLE GGEOLM;Lo;0;L;;;;;N;;;;; +AEC7;HANGUL SYLLABLE GGEOLB;Lo;0;L;;;;;N;;;;; +AEC8;HANGUL SYLLABLE GGEOLS;Lo;0;L;;;;;N;;;;; +AEC9;HANGUL SYLLABLE GGEOLT;Lo;0;L;;;;;N;;;;; +AECA;HANGUL SYLLABLE GGEOLP;Lo;0;L;;;;;N;;;;; +AECB;HANGUL SYLLABLE GGEOLH;Lo;0;L;;;;;N;;;;; +AECC;HANGUL SYLLABLE GGEOM;Lo;0;L;;;;;N;;;;; +AECD;HANGUL SYLLABLE GGEOB;Lo;0;L;;;;;N;;;;; +AECE;HANGUL SYLLABLE GGEOBS;Lo;0;L;;;;;N;;;;; +AECF;HANGUL SYLLABLE GGEOS;Lo;0;L;;;;;N;;;;; +AED0;HANGUL SYLLABLE GGEOSS;Lo;0;L;;;;;N;;;;; +AED1;HANGUL SYLLABLE GGEONG;Lo;0;L;;;;;N;;;;; +AED2;HANGUL SYLLABLE GGEOJ;Lo;0;L;;;;;N;;;;; +AED3;HANGUL SYLLABLE GGEOC;Lo;0;L;;;;;N;;;;; +AED4;HANGUL SYLLABLE GGEOK;Lo;0;L;;;;;N;;;;; +AED5;HANGUL SYLLABLE GGEOT;Lo;0;L;;;;;N;;;;; +AED6;HANGUL SYLLABLE GGEOP;Lo;0;L;;;;;N;;;;; +AED7;HANGUL SYLLABLE GGEOH;Lo;0;L;;;;;N;;;;; +AED8;HANGUL SYLLABLE GGE;Lo;0;L;;;;;N;;;;; +AED9;HANGUL SYLLABLE GGEG;Lo;0;L;;;;;N;;;;; +AEDA;HANGUL SYLLABLE GGEGG;Lo;0;L;;;;;N;;;;; +AEDB;HANGUL SYLLABLE GGEGS;Lo;0;L;;;;;N;;;;; +AEDC;HANGUL SYLLABLE GGEN;Lo;0;L;;;;;N;;;;; +AEDD;HANGUL SYLLABLE GGENI;Lo;0;L;;;;;N;;;;; +AEDE;HANGUL SYLLABLE GGENH;Lo;0;L;;;;;N;;;;; +AEDF;HANGUL SYLLABLE GGED;Lo;0;L;;;;;N;;;;; +AEE0;HANGUL SYLLABLE GGEL;Lo;0;L;;;;;N;;;;; +AEE1;HANGUL SYLLABLE GGELG;Lo;0;L;;;;;N;;;;; +AEE2;HANGUL SYLLABLE GGELM;Lo;0;L;;;;;N;;;;; +AEE3;HANGUL SYLLABLE GGELB;Lo;0;L;;;;;N;;;;; +AEE4;HANGUL SYLLABLE GGELS;Lo;0;L;;;;;N;;;;; +AEE5;HANGUL SYLLABLE GGELT;Lo;0;L;;;;;N;;;;; +AEE6;HANGUL SYLLABLE GGELP;Lo;0;L;;;;;N;;;;; +AEE7;HANGUL SYLLABLE GGELH;Lo;0;L;;;;;N;;;;; +AEE8;HANGUL SYLLABLE GGEM;Lo;0;L;;;;;N;;;;; +AEE9;HANGUL SYLLABLE GGEB;Lo;0;L;;;;;N;;;;; +AEEA;HANGUL SYLLABLE GGEBS;Lo;0;L;;;;;N;;;;; +AEEB;HANGUL SYLLABLE GGES;Lo;0;L;;;;;N;;;;; +AEEC;HANGUL SYLLABLE GGESS;Lo;0;L;;;;;N;;;;; +AEED;HANGUL SYLLABLE GGENG;Lo;0;L;;;;;N;;;;; +AEEE;HANGUL SYLLABLE GGEJ;Lo;0;L;;;;;N;;;;; +AEEF;HANGUL SYLLABLE GGEC;Lo;0;L;;;;;N;;;;; +AEF0;HANGUL SYLLABLE GGEK;Lo;0;L;;;;;N;;;;; +AEF1;HANGUL SYLLABLE GGET;Lo;0;L;;;;;N;;;;; +AEF2;HANGUL SYLLABLE GGEP;Lo;0;L;;;;;N;;;;; +AEF3;HANGUL SYLLABLE GGEH;Lo;0;L;;;;;N;;;;; +AEF4;HANGUL SYLLABLE GGYEO;Lo;0;L;;;;;N;;;;; +AEF5;HANGUL SYLLABLE GGYEOG;Lo;0;L;;;;;N;;;;; +AEF6;HANGUL SYLLABLE GGYEOGG;Lo;0;L;;;;;N;;;;; +AEF7;HANGUL SYLLABLE GGYEOGS;Lo;0;L;;;;;N;;;;; +AEF8;HANGUL SYLLABLE GGYEON;Lo;0;L;;;;;N;;;;; +AEF9;HANGUL SYLLABLE GGYEONI;Lo;0;L;;;;;N;;;;; +AEFA;HANGUL SYLLABLE GGYEONH;Lo;0;L;;;;;N;;;;; +AEFB;HANGUL SYLLABLE GGYEOD;Lo;0;L;;;;;N;;;;; +AEFC;HANGUL SYLLABLE GGYEOL;Lo;0;L;;;;;N;;;;; +AEFD;HANGUL SYLLABLE GGYEOLG;Lo;0;L;;;;;N;;;;; +AEFE;HANGUL SYLLABLE GGYEOLM;Lo;0;L;;;;;N;;;;; +AEFF;HANGUL SYLLABLE GGYEOLB;Lo;0;L;;;;;N;;;;; +AF00;HANGUL SYLLABLE GGYEOLS;Lo;0;L;;;;;N;;;;; +AF01;HANGUL SYLLABLE GGYEOLT;Lo;0;L;;;;;N;;;;; +AF02;HANGUL SYLLABLE GGYEOLP;Lo;0;L;;;;;N;;;;; +AF03;HANGUL SYLLABLE GGYEOLH;Lo;0;L;;;;;N;;;;; +AF04;HANGUL SYLLABLE GGYEOM;Lo;0;L;;;;;N;;;;; +AF05;HANGUL SYLLABLE GGYEOB;Lo;0;L;;;;;N;;;;; +AF06;HANGUL SYLLABLE GGYEOBS;Lo;0;L;;;;;N;;;;; +AF07;HANGUL SYLLABLE GGYEOS;Lo;0;L;;;;;N;;;;; +AF08;HANGUL SYLLABLE GGYEOSS;Lo;0;L;;;;;N;;;;; +AF09;HANGUL SYLLABLE GGYEONG;Lo;0;L;;;;;N;;;;; +AF0A;HANGUL SYLLABLE GGYEOJ;Lo;0;L;;;;;N;;;;; +AF0B;HANGUL SYLLABLE GGYEOC;Lo;0;L;;;;;N;;;;; +AF0C;HANGUL SYLLABLE GGYEOK;Lo;0;L;;;;;N;;;;; +AF0D;HANGUL SYLLABLE GGYEOT;Lo;0;L;;;;;N;;;;; +AF0E;HANGUL SYLLABLE GGYEOP;Lo;0;L;;;;;N;;;;; +AF0F;HANGUL SYLLABLE GGYEOH;Lo;0;L;;;;;N;;;;; +AF10;HANGUL SYLLABLE GGYE;Lo;0;L;;;;;N;;;;; +AF11;HANGUL SYLLABLE GGYEG;Lo;0;L;;;;;N;;;;; +AF12;HANGUL SYLLABLE GGYEGG;Lo;0;L;;;;;N;;;;; +AF13;HANGUL SYLLABLE GGYEGS;Lo;0;L;;;;;N;;;;; +AF14;HANGUL SYLLABLE GGYEN;Lo;0;L;;;;;N;;;;; +AF15;HANGUL SYLLABLE GGYENI;Lo;0;L;;;;;N;;;;; +AF16;HANGUL SYLLABLE GGYENH;Lo;0;L;;;;;N;;;;; +AF17;HANGUL SYLLABLE GGYED;Lo;0;L;;;;;N;;;;; +AF18;HANGUL SYLLABLE GGYEL;Lo;0;L;;;;;N;;;;; +AF19;HANGUL SYLLABLE GGYELG;Lo;0;L;;;;;N;;;;; +AF1A;HANGUL SYLLABLE GGYELM;Lo;0;L;;;;;N;;;;; +AF1B;HANGUL SYLLABLE GGYELB;Lo;0;L;;;;;N;;;;; +AF1C;HANGUL SYLLABLE GGYELS;Lo;0;L;;;;;N;;;;; +AF1D;HANGUL SYLLABLE GGYELT;Lo;0;L;;;;;N;;;;; +AF1E;HANGUL SYLLABLE GGYELP;Lo;0;L;;;;;N;;;;; +AF1F;HANGUL SYLLABLE GGYELH;Lo;0;L;;;;;N;;;;; +AF20;HANGUL SYLLABLE GGYEM;Lo;0;L;;;;;N;;;;; +AF21;HANGUL SYLLABLE GGYEB;Lo;0;L;;;;;N;;;;; +AF22;HANGUL SYLLABLE GGYEBS;Lo;0;L;;;;;N;;;;; +AF23;HANGUL SYLLABLE GGYES;Lo;0;L;;;;;N;;;;; +AF24;HANGUL SYLLABLE GGYESS;Lo;0;L;;;;;N;;;;; +AF25;HANGUL SYLLABLE GGYENG;Lo;0;L;;;;;N;;;;; +AF26;HANGUL SYLLABLE GGYEJ;Lo;0;L;;;;;N;;;;; +AF27;HANGUL SYLLABLE GGYEC;Lo;0;L;;;;;N;;;;; +AF28;HANGUL SYLLABLE GGYEK;Lo;0;L;;;;;N;;;;; +AF29;HANGUL SYLLABLE GGYET;Lo;0;L;;;;;N;;;;; +AF2A;HANGUL SYLLABLE GGYEP;Lo;0;L;;;;;N;;;;; +AF2B;HANGUL SYLLABLE GGYEH;Lo;0;L;;;;;N;;;;; +AF2C;HANGUL SYLLABLE GGO;Lo;0;L;;;;;N;;;;; +AF2D;HANGUL SYLLABLE GGOG;Lo;0;L;;;;;N;;;;; +AF2E;HANGUL SYLLABLE GGOGG;Lo;0;L;;;;;N;;;;; +AF2F;HANGUL SYLLABLE GGOGS;Lo;0;L;;;;;N;;;;; +AF30;HANGUL SYLLABLE GGON;Lo;0;L;;;;;N;;;;; +AF31;HANGUL SYLLABLE GGONI;Lo;0;L;;;;;N;;;;; +AF32;HANGUL SYLLABLE GGONH;Lo;0;L;;;;;N;;;;; +AF33;HANGUL SYLLABLE GGOD;Lo;0;L;;;;;N;;;;; +AF34;HANGUL SYLLABLE GGOL;Lo;0;L;;;;;N;;;;; +AF35;HANGUL SYLLABLE GGOLG;Lo;0;L;;;;;N;;;;; +AF36;HANGUL SYLLABLE GGOLM;Lo;0;L;;;;;N;;;;; +AF37;HANGUL SYLLABLE GGOLB;Lo;0;L;;;;;N;;;;; +AF38;HANGUL SYLLABLE GGOLS;Lo;0;L;;;;;N;;;;; +AF39;HANGUL SYLLABLE GGOLT;Lo;0;L;;;;;N;;;;; +AF3A;HANGUL SYLLABLE GGOLP;Lo;0;L;;;;;N;;;;; +AF3B;HANGUL SYLLABLE GGOLH;Lo;0;L;;;;;N;;;;; +AF3C;HANGUL SYLLABLE GGOM;Lo;0;L;;;;;N;;;;; +AF3D;HANGUL SYLLABLE GGOB;Lo;0;L;;;;;N;;;;; +AF3E;HANGUL SYLLABLE GGOBS;Lo;0;L;;;;;N;;;;; +AF3F;HANGUL SYLLABLE GGOS;Lo;0;L;;;;;N;;;;; +AF40;HANGUL SYLLABLE GGOSS;Lo;0;L;;;;;N;;;;; +AF41;HANGUL SYLLABLE GGONG;Lo;0;L;;;;;N;;;;; +AF42;HANGUL SYLLABLE GGOJ;Lo;0;L;;;;;N;;;;; +AF43;HANGUL SYLLABLE GGOC;Lo;0;L;;;;;N;;;;; +AF44;HANGUL SYLLABLE GGOK;Lo;0;L;;;;;N;;;;; +AF45;HANGUL SYLLABLE GGOT;Lo;0;L;;;;;N;;;;; +AF46;HANGUL SYLLABLE GGOP;Lo;0;L;;;;;N;;;;; +AF47;HANGUL SYLLABLE GGOH;Lo;0;L;;;;;N;;;;; +AF48;HANGUL SYLLABLE GGWA;Lo;0;L;;;;;N;;;;; +AF49;HANGUL SYLLABLE GGWAG;Lo;0;L;;;;;N;;;;; +AF4A;HANGUL SYLLABLE GGWAGG;Lo;0;L;;;;;N;;;;; +AF4B;HANGUL SYLLABLE GGWAGS;Lo;0;L;;;;;N;;;;; +AF4C;HANGUL SYLLABLE GGWAN;Lo;0;L;;;;;N;;;;; +AF4D;HANGUL SYLLABLE GGWANI;Lo;0;L;;;;;N;;;;; +AF4E;HANGUL SYLLABLE GGWANH;Lo;0;L;;;;;N;;;;; +AF4F;HANGUL SYLLABLE GGWAD;Lo;0;L;;;;;N;;;;; +AF50;HANGUL SYLLABLE GGWAL;Lo;0;L;;;;;N;;;;; +AF51;HANGUL SYLLABLE GGWALG;Lo;0;L;;;;;N;;;;; +AF52;HANGUL SYLLABLE GGWALM;Lo;0;L;;;;;N;;;;; +AF53;HANGUL SYLLABLE GGWALB;Lo;0;L;;;;;N;;;;; +AF54;HANGUL SYLLABLE GGWALS;Lo;0;L;;;;;N;;;;; +AF55;HANGUL SYLLABLE GGWALT;Lo;0;L;;;;;N;;;;; +AF56;HANGUL SYLLABLE GGWALP;Lo;0;L;;;;;N;;;;; +AF57;HANGUL SYLLABLE GGWALH;Lo;0;L;;;;;N;;;;; +AF58;HANGUL SYLLABLE GGWAM;Lo;0;L;;;;;N;;;;; +AF59;HANGUL SYLLABLE GGWAB;Lo;0;L;;;;;N;;;;; +AF5A;HANGUL SYLLABLE GGWABS;Lo;0;L;;;;;N;;;;; +AF5B;HANGUL SYLLABLE GGWAS;Lo;0;L;;;;;N;;;;; +AF5C;HANGUL SYLLABLE GGWASS;Lo;0;L;;;;;N;;;;; +AF5D;HANGUL SYLLABLE GGWANG;Lo;0;L;;;;;N;;;;; +AF5E;HANGUL SYLLABLE GGWAJ;Lo;0;L;;;;;N;;;;; +AF5F;HANGUL SYLLABLE GGWAC;Lo;0;L;;;;;N;;;;; +AF60;HANGUL SYLLABLE GGWAK;Lo;0;L;;;;;N;;;;; +AF61;HANGUL SYLLABLE GGWAT;Lo;0;L;;;;;N;;;;; +AF62;HANGUL SYLLABLE GGWAP;Lo;0;L;;;;;N;;;;; +AF63;HANGUL SYLLABLE GGWAH;Lo;0;L;;;;;N;;;;; +AF64;HANGUL SYLLABLE GGWAE;Lo;0;L;;;;;N;;;;; +AF65;HANGUL SYLLABLE GGWAEG;Lo;0;L;;;;;N;;;;; +AF66;HANGUL SYLLABLE GGWAEGG;Lo;0;L;;;;;N;;;;; +AF67;HANGUL SYLLABLE GGWAEGS;Lo;0;L;;;;;N;;;;; +AF68;HANGUL SYLLABLE GGWAEN;Lo;0;L;;;;;N;;;;; +AF69;HANGUL SYLLABLE GGWAENI;Lo;0;L;;;;;N;;;;; +AF6A;HANGUL SYLLABLE GGWAENH;Lo;0;L;;;;;N;;;;; +AF6B;HANGUL SYLLABLE GGWAED;Lo;0;L;;;;;N;;;;; +AF6C;HANGUL SYLLABLE GGWAEL;Lo;0;L;;;;;N;;;;; +AF6D;HANGUL SYLLABLE GGWAELG;Lo;0;L;;;;;N;;;;; +AF6E;HANGUL SYLLABLE GGWAELM;Lo;0;L;;;;;N;;;;; +AF6F;HANGUL SYLLABLE GGWAELB;Lo;0;L;;;;;N;;;;; +AF70;HANGUL SYLLABLE GGWAELS;Lo;0;L;;;;;N;;;;; +AF71;HANGUL SYLLABLE GGWAELT;Lo;0;L;;;;;N;;;;; +AF72;HANGUL SYLLABLE GGWAELP;Lo;0;L;;;;;N;;;;; +AF73;HANGUL SYLLABLE GGWAELH;Lo;0;L;;;;;N;;;;; +AF74;HANGUL SYLLABLE GGWAEM;Lo;0;L;;;;;N;;;;; +AF75;HANGUL SYLLABLE GGWAEB;Lo;0;L;;;;;N;;;;; +AF76;HANGUL SYLLABLE GGWAEBS;Lo;0;L;;;;;N;;;;; +AF77;HANGUL SYLLABLE GGWAES;Lo;0;L;;;;;N;;;;; +AF78;HANGUL SYLLABLE GGWAESS;Lo;0;L;;;;;N;;;;; +AF79;HANGUL SYLLABLE GGWAENG;Lo;0;L;;;;;N;;;;; +AF7A;HANGUL SYLLABLE GGWAEJ;Lo;0;L;;;;;N;;;;; +AF7B;HANGUL SYLLABLE GGWAEC;Lo;0;L;;;;;N;;;;; +AF7C;HANGUL SYLLABLE GGWAEK;Lo;0;L;;;;;N;;;;; +AF7D;HANGUL SYLLABLE GGWAET;Lo;0;L;;;;;N;;;;; +AF7E;HANGUL SYLLABLE GGWAEP;Lo;0;L;;;;;N;;;;; +AF7F;HANGUL SYLLABLE GGWAEH;Lo;0;L;;;;;N;;;;; +AF80;HANGUL SYLLABLE GGOE;Lo;0;L;;;;;N;;;;; +AF81;HANGUL SYLLABLE GGOEG;Lo;0;L;;;;;N;;;;; +AF82;HANGUL SYLLABLE GGOEGG;Lo;0;L;;;;;N;;;;; +AF83;HANGUL SYLLABLE GGOEGS;Lo;0;L;;;;;N;;;;; +AF84;HANGUL SYLLABLE GGOEN;Lo;0;L;;;;;N;;;;; +AF85;HANGUL SYLLABLE GGOENI;Lo;0;L;;;;;N;;;;; +AF86;HANGUL SYLLABLE GGOENH;Lo;0;L;;;;;N;;;;; +AF87;HANGUL SYLLABLE GGOED;Lo;0;L;;;;;N;;;;; +AF88;HANGUL SYLLABLE GGOEL;Lo;0;L;;;;;N;;;;; +AF89;HANGUL SYLLABLE GGOELG;Lo;0;L;;;;;N;;;;; +AF8A;HANGUL SYLLABLE GGOELM;Lo;0;L;;;;;N;;;;; +AF8B;HANGUL SYLLABLE GGOELB;Lo;0;L;;;;;N;;;;; +AF8C;HANGUL SYLLABLE GGOELS;Lo;0;L;;;;;N;;;;; +AF8D;HANGUL SYLLABLE GGOELT;Lo;0;L;;;;;N;;;;; +AF8E;HANGUL SYLLABLE GGOELP;Lo;0;L;;;;;N;;;;; +AF8F;HANGUL SYLLABLE GGOELH;Lo;0;L;;;;;N;;;;; +AF90;HANGUL SYLLABLE GGOEM;Lo;0;L;;;;;N;;;;; +AF91;HANGUL SYLLABLE GGOEB;Lo;0;L;;;;;N;;;;; +AF92;HANGUL SYLLABLE GGOEBS;Lo;0;L;;;;;N;;;;; +AF93;HANGUL SYLLABLE GGOES;Lo;0;L;;;;;N;;;;; +AF94;HANGUL SYLLABLE GGOESS;Lo;0;L;;;;;N;;;;; +AF95;HANGUL SYLLABLE GGOENG;Lo;0;L;;;;;N;;;;; +AF96;HANGUL SYLLABLE GGOEJ;Lo;0;L;;;;;N;;;;; +AF97;HANGUL SYLLABLE GGOEC;Lo;0;L;;;;;N;;;;; +AF98;HANGUL SYLLABLE GGOEK;Lo;0;L;;;;;N;;;;; +AF99;HANGUL SYLLABLE GGOET;Lo;0;L;;;;;N;;;;; +AF9A;HANGUL SYLLABLE GGOEP;Lo;0;L;;;;;N;;;;; +AF9B;HANGUL SYLLABLE GGOEH;Lo;0;L;;;;;N;;;;; +AF9C;HANGUL SYLLABLE GGYO;Lo;0;L;;;;;N;;;;; +AF9D;HANGUL SYLLABLE GGYOG;Lo;0;L;;;;;N;;;;; +AF9E;HANGUL SYLLABLE GGYOGG;Lo;0;L;;;;;N;;;;; +AF9F;HANGUL SYLLABLE GGYOGS;Lo;0;L;;;;;N;;;;; +AFA0;HANGUL SYLLABLE GGYON;Lo;0;L;;;;;N;;;;; +AFA1;HANGUL SYLLABLE GGYONI;Lo;0;L;;;;;N;;;;; +AFA2;HANGUL SYLLABLE GGYONH;Lo;0;L;;;;;N;;;;; +AFA3;HANGUL SYLLABLE GGYOD;Lo;0;L;;;;;N;;;;; +AFA4;HANGUL SYLLABLE GGYOL;Lo;0;L;;;;;N;;;;; +AFA5;HANGUL SYLLABLE GGYOLG;Lo;0;L;;;;;N;;;;; +AFA6;HANGUL SYLLABLE GGYOLM;Lo;0;L;;;;;N;;;;; +AFA7;HANGUL SYLLABLE GGYOLB;Lo;0;L;;;;;N;;;;; +AFA8;HANGUL SYLLABLE GGYOLS;Lo;0;L;;;;;N;;;;; +AFA9;HANGUL SYLLABLE GGYOLT;Lo;0;L;;;;;N;;;;; +AFAA;HANGUL SYLLABLE GGYOLP;Lo;0;L;;;;;N;;;;; +AFAB;HANGUL SYLLABLE GGYOLH;Lo;0;L;;;;;N;;;;; +AFAC;HANGUL SYLLABLE GGYOM;Lo;0;L;;;;;N;;;;; +AFAD;HANGUL SYLLABLE GGYOB;Lo;0;L;;;;;N;;;;; +AFAE;HANGUL SYLLABLE GGYOBS;Lo;0;L;;;;;N;;;;; +AFAF;HANGUL SYLLABLE GGYOS;Lo;0;L;;;;;N;;;;; +AFB0;HANGUL SYLLABLE GGYOSS;Lo;0;L;;;;;N;;;;; +AFB1;HANGUL SYLLABLE GGYONG;Lo;0;L;;;;;N;;;;; +AFB2;HANGUL SYLLABLE GGYOJ;Lo;0;L;;;;;N;;;;; +AFB3;HANGUL SYLLABLE GGYOC;Lo;0;L;;;;;N;;;;; +AFB4;HANGUL SYLLABLE GGYOK;Lo;0;L;;;;;N;;;;; +AFB5;HANGUL SYLLABLE GGYOT;Lo;0;L;;;;;N;;;;; +AFB6;HANGUL SYLLABLE GGYOP;Lo;0;L;;;;;N;;;;; +AFB7;HANGUL SYLLABLE GGYOH;Lo;0;L;;;;;N;;;;; +AFB8;HANGUL SYLLABLE GGU;Lo;0;L;;;;;N;;;;; +AFB9;HANGUL SYLLABLE GGUG;Lo;0;L;;;;;N;;;;; +AFBA;HANGUL SYLLABLE GGUGG;Lo;0;L;;;;;N;;;;; +AFBB;HANGUL SYLLABLE GGUGS;Lo;0;L;;;;;N;;;;; +AFBC;HANGUL SYLLABLE GGUN;Lo;0;L;;;;;N;;;;; +AFBD;HANGUL SYLLABLE GGUNI;Lo;0;L;;;;;N;;;;; +AFBE;HANGUL SYLLABLE GGUNH;Lo;0;L;;;;;N;;;;; +AFBF;HANGUL SYLLABLE GGUD;Lo;0;L;;;;;N;;;;; +AFC0;HANGUL SYLLABLE GGUL;Lo;0;L;;;;;N;;;;; +AFC1;HANGUL SYLLABLE GGULG;Lo;0;L;;;;;N;;;;; +AFC2;HANGUL SYLLABLE GGULM;Lo;0;L;;;;;N;;;;; +AFC3;HANGUL SYLLABLE GGULB;Lo;0;L;;;;;N;;;;; +AFC4;HANGUL SYLLABLE GGULS;Lo;0;L;;;;;N;;;;; +AFC5;HANGUL SYLLABLE GGULT;Lo;0;L;;;;;N;;;;; +AFC6;HANGUL SYLLABLE GGULP;Lo;0;L;;;;;N;;;;; +AFC7;HANGUL SYLLABLE GGULH;Lo;0;L;;;;;N;;;;; +AFC8;HANGUL SYLLABLE GGUM;Lo;0;L;;;;;N;;;;; +AFC9;HANGUL SYLLABLE GGUB;Lo;0;L;;;;;N;;;;; +AFCA;HANGUL SYLLABLE GGUBS;Lo;0;L;;;;;N;;;;; +AFCB;HANGUL SYLLABLE GGUS;Lo;0;L;;;;;N;;;;; +AFCC;HANGUL SYLLABLE GGUSS;Lo;0;L;;;;;N;;;;; +AFCD;HANGUL SYLLABLE GGUNG;Lo;0;L;;;;;N;;;;; +AFCE;HANGUL SYLLABLE GGUJ;Lo;0;L;;;;;N;;;;; +AFCF;HANGUL SYLLABLE GGUC;Lo;0;L;;;;;N;;;;; +AFD0;HANGUL SYLLABLE GGUK;Lo;0;L;;;;;N;;;;; +AFD1;HANGUL SYLLABLE GGUT;Lo;0;L;;;;;N;;;;; +AFD2;HANGUL SYLLABLE GGUP;Lo;0;L;;;;;N;;;;; +AFD3;HANGUL SYLLABLE GGUH;Lo;0;L;;;;;N;;;;; +AFD4;HANGUL SYLLABLE GGWEO;Lo;0;L;;;;;N;;;;; +AFD5;HANGUL SYLLABLE GGWEOG;Lo;0;L;;;;;N;;;;; +AFD6;HANGUL SYLLABLE GGWEOGG;Lo;0;L;;;;;N;;;;; +AFD7;HANGUL SYLLABLE GGWEOGS;Lo;0;L;;;;;N;;;;; +AFD8;HANGUL SYLLABLE GGWEON;Lo;0;L;;;;;N;;;;; +AFD9;HANGUL SYLLABLE GGWEONI;Lo;0;L;;;;;N;;;;; +AFDA;HANGUL SYLLABLE GGWEONH;Lo;0;L;;;;;N;;;;; +AFDB;HANGUL SYLLABLE GGWEOD;Lo;0;L;;;;;N;;;;; +AFDC;HANGUL SYLLABLE GGWEOL;Lo;0;L;;;;;N;;;;; +AFDD;HANGUL SYLLABLE GGWEOLG;Lo;0;L;;;;;N;;;;; +AFDE;HANGUL SYLLABLE GGWEOLM;Lo;0;L;;;;;N;;;;; +AFDF;HANGUL SYLLABLE GGWEOLB;Lo;0;L;;;;;N;;;;; +AFE0;HANGUL SYLLABLE GGWEOLS;Lo;0;L;;;;;N;;;;; +AFE1;HANGUL SYLLABLE GGWEOLT;Lo;0;L;;;;;N;;;;; +AFE2;HANGUL SYLLABLE GGWEOLP;Lo;0;L;;;;;N;;;;; +AFE3;HANGUL SYLLABLE GGWEOLH;Lo;0;L;;;;;N;;;;; +AFE4;HANGUL SYLLABLE GGWEOM;Lo;0;L;;;;;N;;;;; +AFE5;HANGUL SYLLABLE GGWEOB;Lo;0;L;;;;;N;;;;; +AFE6;HANGUL SYLLABLE GGWEOBS;Lo;0;L;;;;;N;;;;; +AFE7;HANGUL SYLLABLE GGWEOS;Lo;0;L;;;;;N;;;;; +AFE8;HANGUL SYLLABLE GGWEOSS;Lo;0;L;;;;;N;;;;; +AFE9;HANGUL SYLLABLE GGWEONG;Lo;0;L;;;;;N;;;;; +AFEA;HANGUL SYLLABLE GGWEOJ;Lo;0;L;;;;;N;;;;; +AFEB;HANGUL SYLLABLE GGWEOC;Lo;0;L;;;;;N;;;;; +AFEC;HANGUL SYLLABLE GGWEOK;Lo;0;L;;;;;N;;;;; +AFED;HANGUL SYLLABLE GGWEOT;Lo;0;L;;;;;N;;;;; +AFEE;HANGUL SYLLABLE GGWEOP;Lo;0;L;;;;;N;;;;; +AFEF;HANGUL SYLLABLE GGWEOH;Lo;0;L;;;;;N;;;;; +AFF0;HANGUL SYLLABLE GGWE;Lo;0;L;;;;;N;;;;; +AFF1;HANGUL SYLLABLE GGWEG;Lo;0;L;;;;;N;;;;; +AFF2;HANGUL SYLLABLE GGWEGG;Lo;0;L;;;;;N;;;;; +AFF3;HANGUL SYLLABLE GGWEGS;Lo;0;L;;;;;N;;;;; +AFF4;HANGUL SYLLABLE GGWEN;Lo;0;L;;;;;N;;;;; +AFF5;HANGUL SYLLABLE GGWENI;Lo;0;L;;;;;N;;;;; +AFF6;HANGUL SYLLABLE GGWENH;Lo;0;L;;;;;N;;;;; +AFF7;HANGUL SYLLABLE GGWED;Lo;0;L;;;;;N;;;;; +AFF8;HANGUL SYLLABLE GGWEL;Lo;0;L;;;;;N;;;;; +AFF9;HANGUL SYLLABLE GGWELG;Lo;0;L;;;;;N;;;;; +AFFA;HANGUL SYLLABLE GGWELM;Lo;0;L;;;;;N;;;;; +AFFB;HANGUL SYLLABLE GGWELB;Lo;0;L;;;;;N;;;;; +AFFC;HANGUL SYLLABLE GGWELS;Lo;0;L;;;;;N;;;;; +AFFD;HANGUL SYLLABLE GGWELT;Lo;0;L;;;;;N;;;;; +AFFE;HANGUL SYLLABLE GGWELP;Lo;0;L;;;;;N;;;;; +AFFF;HANGUL SYLLABLE GGWELH;Lo;0;L;;;;;N;;;;; +B000;HANGUL SYLLABLE GGWEM;Lo;0;L;;;;;N;;;;; +B001;HANGUL SYLLABLE GGWEB;Lo;0;L;;;;;N;;;;; +B002;HANGUL SYLLABLE GGWEBS;Lo;0;L;;;;;N;;;;; +B003;HANGUL SYLLABLE GGWES;Lo;0;L;;;;;N;;;;; +B004;HANGUL SYLLABLE GGWESS;Lo;0;L;;;;;N;;;;; +B005;HANGUL SYLLABLE GGWENG;Lo;0;L;;;;;N;;;;; +B006;HANGUL SYLLABLE GGWEJ;Lo;0;L;;;;;N;;;;; +B007;HANGUL SYLLABLE GGWEC;Lo;0;L;;;;;N;;;;; +B008;HANGUL SYLLABLE GGWEK;Lo;0;L;;;;;N;;;;; +B009;HANGUL SYLLABLE GGWET;Lo;0;L;;;;;N;;;;; +B00A;HANGUL SYLLABLE GGWEP;Lo;0;L;;;;;N;;;;; +B00B;HANGUL SYLLABLE GGWEH;Lo;0;L;;;;;N;;;;; +B00C;HANGUL SYLLABLE GGWI;Lo;0;L;;;;;N;;;;; +B00D;HANGUL SYLLABLE GGWIG;Lo;0;L;;;;;N;;;;; +B00E;HANGUL SYLLABLE GGWIGG;Lo;0;L;;;;;N;;;;; +B00F;HANGUL SYLLABLE GGWIGS;Lo;0;L;;;;;N;;;;; +B010;HANGUL SYLLABLE GGWIN;Lo;0;L;;;;;N;;;;; +B011;HANGUL SYLLABLE GGWINI;Lo;0;L;;;;;N;;;;; +B012;HANGUL SYLLABLE GGWINH;Lo;0;L;;;;;N;;;;; +B013;HANGUL SYLLABLE GGWID;Lo;0;L;;;;;N;;;;; +B014;HANGUL SYLLABLE GGWIL;Lo;0;L;;;;;N;;;;; +B015;HANGUL SYLLABLE GGWILG;Lo;0;L;;;;;N;;;;; +B016;HANGUL SYLLABLE GGWILM;Lo;0;L;;;;;N;;;;; +B017;HANGUL SYLLABLE GGWILB;Lo;0;L;;;;;N;;;;; +B018;HANGUL SYLLABLE GGWILS;Lo;0;L;;;;;N;;;;; +B019;HANGUL SYLLABLE GGWILT;Lo;0;L;;;;;N;;;;; +B01A;HANGUL SYLLABLE GGWILP;Lo;0;L;;;;;N;;;;; +B01B;HANGUL SYLLABLE GGWILH;Lo;0;L;;;;;N;;;;; +B01C;HANGUL SYLLABLE GGWIM;Lo;0;L;;;;;N;;;;; +B01D;HANGUL SYLLABLE GGWIB;Lo;0;L;;;;;N;;;;; +B01E;HANGUL SYLLABLE GGWIBS;Lo;0;L;;;;;N;;;;; +B01F;HANGUL SYLLABLE GGWIS;Lo;0;L;;;;;N;;;;; +B020;HANGUL SYLLABLE GGWISS;Lo;0;L;;;;;N;;;;; +B021;HANGUL SYLLABLE GGWING;Lo;0;L;;;;;N;;;;; +B022;HANGUL SYLLABLE GGWIJ;Lo;0;L;;;;;N;;;;; +B023;HANGUL SYLLABLE GGWIC;Lo;0;L;;;;;N;;;;; +B024;HANGUL SYLLABLE GGWIK;Lo;0;L;;;;;N;;;;; +B025;HANGUL SYLLABLE GGWIT;Lo;0;L;;;;;N;;;;; +B026;HANGUL SYLLABLE GGWIP;Lo;0;L;;;;;N;;;;; +B027;HANGUL SYLLABLE GGWIH;Lo;0;L;;;;;N;;;;; +B028;HANGUL SYLLABLE GGYU;Lo;0;L;;;;;N;;;;; +B029;HANGUL SYLLABLE GGYUG;Lo;0;L;;;;;N;;;;; +B02A;HANGUL SYLLABLE GGYUGG;Lo;0;L;;;;;N;;;;; +B02B;HANGUL SYLLABLE GGYUGS;Lo;0;L;;;;;N;;;;; +B02C;HANGUL SYLLABLE GGYUN;Lo;0;L;;;;;N;;;;; +B02D;HANGUL SYLLABLE GGYUNI;Lo;0;L;;;;;N;;;;; +B02E;HANGUL SYLLABLE GGYUNH;Lo;0;L;;;;;N;;;;; +B02F;HANGUL SYLLABLE GGYUD;Lo;0;L;;;;;N;;;;; +B030;HANGUL SYLLABLE GGYUL;Lo;0;L;;;;;N;;;;; +B031;HANGUL SYLLABLE GGYULG;Lo;0;L;;;;;N;;;;; +B032;HANGUL SYLLABLE GGYULM;Lo;0;L;;;;;N;;;;; +B033;HANGUL SYLLABLE GGYULB;Lo;0;L;;;;;N;;;;; +B034;HANGUL SYLLABLE GGYULS;Lo;0;L;;;;;N;;;;; +B035;HANGUL SYLLABLE GGYULT;Lo;0;L;;;;;N;;;;; +B036;HANGUL SYLLABLE GGYULP;Lo;0;L;;;;;N;;;;; +B037;HANGUL SYLLABLE GGYULH;Lo;0;L;;;;;N;;;;; +B038;HANGUL SYLLABLE GGYUM;Lo;0;L;;;;;N;;;;; +B039;HANGUL SYLLABLE GGYUB;Lo;0;L;;;;;N;;;;; +B03A;HANGUL SYLLABLE GGYUBS;Lo;0;L;;;;;N;;;;; +B03B;HANGUL SYLLABLE GGYUS;Lo;0;L;;;;;N;;;;; +B03C;HANGUL SYLLABLE GGYUSS;Lo;0;L;;;;;N;;;;; +B03D;HANGUL SYLLABLE GGYUNG;Lo;0;L;;;;;N;;;;; +B03E;HANGUL SYLLABLE GGYUJ;Lo;0;L;;;;;N;;;;; +B03F;HANGUL SYLLABLE GGYUC;Lo;0;L;;;;;N;;;;; +B040;HANGUL SYLLABLE GGYUK;Lo;0;L;;;;;N;;;;; +B041;HANGUL SYLLABLE GGYUT;Lo;0;L;;;;;N;;;;; +B042;HANGUL SYLLABLE GGYUP;Lo;0;L;;;;;N;;;;; +B043;HANGUL SYLLABLE GGYUH;Lo;0;L;;;;;N;;;;; +B044;HANGUL SYLLABLE GGEU;Lo;0;L;;;;;N;;;;; +B045;HANGUL SYLLABLE GGEUG;Lo;0;L;;;;;N;;;;; +B046;HANGUL SYLLABLE GGEUGG;Lo;0;L;;;;;N;;;;; +B047;HANGUL SYLLABLE GGEUGS;Lo;0;L;;;;;N;;;;; +B048;HANGUL SYLLABLE GGEUN;Lo;0;L;;;;;N;;;;; +B049;HANGUL SYLLABLE GGEUNI;Lo;0;L;;;;;N;;;;; +B04A;HANGUL SYLLABLE GGEUNH;Lo;0;L;;;;;N;;;;; +B04B;HANGUL SYLLABLE GGEUD;Lo;0;L;;;;;N;;;;; +B04C;HANGUL SYLLABLE GGEUL;Lo;0;L;;;;;N;;;;; +B04D;HANGUL SYLLABLE GGEULG;Lo;0;L;;;;;N;;;;; +B04E;HANGUL SYLLABLE GGEULM;Lo;0;L;;;;;N;;;;; +B04F;HANGUL SYLLABLE GGEULB;Lo;0;L;;;;;N;;;;; +B050;HANGUL SYLLABLE GGEULS;Lo;0;L;;;;;N;;;;; +B051;HANGUL SYLLABLE GGEULT;Lo;0;L;;;;;N;;;;; +B052;HANGUL SYLLABLE GGEULP;Lo;0;L;;;;;N;;;;; +B053;HANGUL SYLLABLE GGEULH;Lo;0;L;;;;;N;;;;; +B054;HANGUL SYLLABLE GGEUM;Lo;0;L;;;;;N;;;;; +B055;HANGUL SYLLABLE GGEUB;Lo;0;L;;;;;N;;;;; +B056;HANGUL SYLLABLE GGEUBS;Lo;0;L;;;;;N;;;;; +B057;HANGUL SYLLABLE GGEUS;Lo;0;L;;;;;N;;;;; +B058;HANGUL SYLLABLE GGEUSS;Lo;0;L;;;;;N;;;;; +B059;HANGUL SYLLABLE GGEUNG;Lo;0;L;;;;;N;;;;; +B05A;HANGUL SYLLABLE GGEUJ;Lo;0;L;;;;;N;;;;; +B05B;HANGUL SYLLABLE GGEUC;Lo;0;L;;;;;N;;;;; +B05C;HANGUL SYLLABLE GGEUK;Lo;0;L;;;;;N;;;;; +B05D;HANGUL SYLLABLE GGEUT;Lo;0;L;;;;;N;;;;; +B05E;HANGUL SYLLABLE GGEUP;Lo;0;L;;;;;N;;;;; +B05F;HANGUL SYLLABLE GGEUH;Lo;0;L;;;;;N;;;;; +B060;HANGUL SYLLABLE GGYI;Lo;0;L;;;;;N;;;;; +B061;HANGUL SYLLABLE GGYIG;Lo;0;L;;;;;N;;;;; +B062;HANGUL SYLLABLE GGYIGG;Lo;0;L;;;;;N;;;;; +B063;HANGUL SYLLABLE GGYIGS;Lo;0;L;;;;;N;;;;; +B064;HANGUL SYLLABLE GGYIN;Lo;0;L;;;;;N;;;;; +B065;HANGUL SYLLABLE GGYINI;Lo;0;L;;;;;N;;;;; +B066;HANGUL SYLLABLE GGYINH;Lo;0;L;;;;;N;;;;; +B067;HANGUL SYLLABLE GGYID;Lo;0;L;;;;;N;;;;; +B068;HANGUL SYLLABLE GGYIL;Lo;0;L;;;;;N;;;;; +B069;HANGUL SYLLABLE GGYILG;Lo;0;L;;;;;N;;;;; +B06A;HANGUL SYLLABLE GGYILM;Lo;0;L;;;;;N;;;;; +B06B;HANGUL SYLLABLE GGYILB;Lo;0;L;;;;;N;;;;; +B06C;HANGUL SYLLABLE GGYILS;Lo;0;L;;;;;N;;;;; +B06D;HANGUL SYLLABLE GGYILT;Lo;0;L;;;;;N;;;;; +B06E;HANGUL SYLLABLE GGYILP;Lo;0;L;;;;;N;;;;; +B06F;HANGUL SYLLABLE GGYILH;Lo;0;L;;;;;N;;;;; +B070;HANGUL SYLLABLE GGYIM;Lo;0;L;;;;;N;;;;; +B071;HANGUL SYLLABLE GGYIB;Lo;0;L;;;;;N;;;;; +B072;HANGUL SYLLABLE GGYIBS;Lo;0;L;;;;;N;;;;; +B073;HANGUL SYLLABLE GGYIS;Lo;0;L;;;;;N;;;;; +B074;HANGUL SYLLABLE GGYISS;Lo;0;L;;;;;N;;;;; +B075;HANGUL SYLLABLE GGYING;Lo;0;L;;;;;N;;;;; +B076;HANGUL SYLLABLE GGYIJ;Lo;0;L;;;;;N;;;;; +B077;HANGUL SYLLABLE GGYIC;Lo;0;L;;;;;N;;;;; +B078;HANGUL SYLLABLE GGYIK;Lo;0;L;;;;;N;;;;; +B079;HANGUL SYLLABLE GGYIT;Lo;0;L;;;;;N;;;;; +B07A;HANGUL SYLLABLE GGYIP;Lo;0;L;;;;;N;;;;; +B07B;HANGUL SYLLABLE GGYIH;Lo;0;L;;;;;N;;;;; +B07C;HANGUL SYLLABLE GGI;Lo;0;L;;;;;N;;;;; +B07D;HANGUL SYLLABLE GGIG;Lo;0;L;;;;;N;;;;; +B07E;HANGUL SYLLABLE GGIGG;Lo;0;L;;;;;N;;;;; +B07F;HANGUL SYLLABLE GGIGS;Lo;0;L;;;;;N;;;;; +B080;HANGUL SYLLABLE GGIN;Lo;0;L;;;;;N;;;;; +B081;HANGUL SYLLABLE GGINI;Lo;0;L;;;;;N;;;;; +B082;HANGUL SYLLABLE GGINH;Lo;0;L;;;;;N;;;;; +B083;HANGUL SYLLABLE GGID;Lo;0;L;;;;;N;;;;; +B084;HANGUL SYLLABLE GGIL;Lo;0;L;;;;;N;;;;; +B085;HANGUL SYLLABLE GGILG;Lo;0;L;;;;;N;;;;; +B086;HANGUL SYLLABLE GGILM;Lo;0;L;;;;;N;;;;; +B087;HANGUL SYLLABLE GGILB;Lo;0;L;;;;;N;;;;; +B088;HANGUL SYLLABLE GGILS;Lo;0;L;;;;;N;;;;; +B089;HANGUL SYLLABLE GGILT;Lo;0;L;;;;;N;;;;; +B08A;HANGUL SYLLABLE GGILP;Lo;0;L;;;;;N;;;;; +B08B;HANGUL SYLLABLE GGILH;Lo;0;L;;;;;N;;;;; +B08C;HANGUL SYLLABLE GGIM;Lo;0;L;;;;;N;;;;; +B08D;HANGUL SYLLABLE GGIB;Lo;0;L;;;;;N;;;;; +B08E;HANGUL SYLLABLE GGIBS;Lo;0;L;;;;;N;;;;; +B08F;HANGUL SYLLABLE GGIS;Lo;0;L;;;;;N;;;;; +B090;HANGUL SYLLABLE GGISS;Lo;0;L;;;;;N;;;;; +B091;HANGUL SYLLABLE GGING;Lo;0;L;;;;;N;;;;; +B092;HANGUL SYLLABLE GGIJ;Lo;0;L;;;;;N;;;;; +B093;HANGUL SYLLABLE GGIC;Lo;0;L;;;;;N;;;;; +B094;HANGUL SYLLABLE GGIK;Lo;0;L;;;;;N;;;;; +B095;HANGUL SYLLABLE GGIT;Lo;0;L;;;;;N;;;;; +B096;HANGUL SYLLABLE GGIP;Lo;0;L;;;;;N;;;;; +B097;HANGUL SYLLABLE GGIH;Lo;0;L;;;;;N;;;;; +B098;HANGUL SYLLABLE NA;Lo;0;L;;;;;N;;;;; +B099;HANGUL SYLLABLE NAG;Lo;0;L;;;;;N;;;;; +B09A;HANGUL SYLLABLE NAGG;Lo;0;L;;;;;N;;;;; +B09B;HANGUL SYLLABLE NAGS;Lo;0;L;;;;;N;;;;; +B09C;HANGUL SYLLABLE NAN;Lo;0;L;;;;;N;;;;; +B09D;HANGUL SYLLABLE NANI;Lo;0;L;;;;;N;;;;; +B09E;HANGUL SYLLABLE NANH;Lo;0;L;;;;;N;;;;; +B09F;HANGUL SYLLABLE NAD;Lo;0;L;;;;;N;;;;; +B0A0;HANGUL SYLLABLE NAL;Lo;0;L;;;;;N;;;;; +B0A1;HANGUL SYLLABLE NALG;Lo;0;L;;;;;N;;;;; +B0A2;HANGUL SYLLABLE NALM;Lo;0;L;;;;;N;;;;; +B0A3;HANGUL SYLLABLE NALB;Lo;0;L;;;;;N;;;;; +B0A4;HANGUL SYLLABLE NALS;Lo;0;L;;;;;N;;;;; +B0A5;HANGUL SYLLABLE NALT;Lo;0;L;;;;;N;;;;; +B0A6;HANGUL SYLLABLE NALP;Lo;0;L;;;;;N;;;;; +B0A7;HANGUL SYLLABLE NALH;Lo;0;L;;;;;N;;;;; +B0A8;HANGUL SYLLABLE NAM;Lo;0;L;;;;;N;;;;; +B0A9;HANGUL SYLLABLE NAB;Lo;0;L;;;;;N;;;;; +B0AA;HANGUL SYLLABLE NABS;Lo;0;L;;;;;N;;;;; +B0AB;HANGUL SYLLABLE NAS;Lo;0;L;;;;;N;;;;; +B0AC;HANGUL SYLLABLE NASS;Lo;0;L;;;;;N;;;;; +B0AD;HANGUL SYLLABLE NANG;Lo;0;L;;;;;N;;;;; +B0AE;HANGUL SYLLABLE NAJ;Lo;0;L;;;;;N;;;;; +B0AF;HANGUL SYLLABLE NAC;Lo;0;L;;;;;N;;;;; +B0B0;HANGUL SYLLABLE NAK;Lo;0;L;;;;;N;;;;; +B0B1;HANGUL SYLLABLE NAT;Lo;0;L;;;;;N;;;;; +B0B2;HANGUL SYLLABLE NAP;Lo;0;L;;;;;N;;;;; +B0B3;HANGUL SYLLABLE NAH;Lo;0;L;;;;;N;;;;; +B0B4;HANGUL SYLLABLE NAE;Lo;0;L;;;;;N;;;;; +B0B5;HANGUL SYLLABLE NAEG;Lo;0;L;;;;;N;;;;; +B0B6;HANGUL SYLLABLE NAEGG;Lo;0;L;;;;;N;;;;; +B0B7;HANGUL SYLLABLE NAEGS;Lo;0;L;;;;;N;;;;; +B0B8;HANGUL SYLLABLE NAEN;Lo;0;L;;;;;N;;;;; +B0B9;HANGUL SYLLABLE NAENI;Lo;0;L;;;;;N;;;;; +B0BA;HANGUL SYLLABLE NAENH;Lo;0;L;;;;;N;;;;; +B0BB;HANGUL SYLLABLE NAED;Lo;0;L;;;;;N;;;;; +B0BC;HANGUL SYLLABLE NAEL;Lo;0;L;;;;;N;;;;; +B0BD;HANGUL SYLLABLE NAELG;Lo;0;L;;;;;N;;;;; +B0BE;HANGUL SYLLABLE NAELM;Lo;0;L;;;;;N;;;;; +B0BF;HANGUL SYLLABLE NAELB;Lo;0;L;;;;;N;;;;; +B0C0;HANGUL SYLLABLE NAELS;Lo;0;L;;;;;N;;;;; +B0C1;HANGUL SYLLABLE NAELT;Lo;0;L;;;;;N;;;;; +B0C2;HANGUL SYLLABLE NAELP;Lo;0;L;;;;;N;;;;; +B0C3;HANGUL SYLLABLE NAELH;Lo;0;L;;;;;N;;;;; +B0C4;HANGUL SYLLABLE NAEM;Lo;0;L;;;;;N;;;;; +B0C5;HANGUL SYLLABLE NAEB;Lo;0;L;;;;;N;;;;; +B0C6;HANGUL SYLLABLE NAEBS;Lo;0;L;;;;;N;;;;; +B0C7;HANGUL SYLLABLE NAES;Lo;0;L;;;;;N;;;;; +B0C8;HANGUL SYLLABLE NAESS;Lo;0;L;;;;;N;;;;; +B0C9;HANGUL SYLLABLE NAENG;Lo;0;L;;;;;N;;;;; +B0CA;HANGUL SYLLABLE NAEJ;Lo;0;L;;;;;N;;;;; +B0CB;HANGUL SYLLABLE NAEC;Lo;0;L;;;;;N;;;;; +B0CC;HANGUL SYLLABLE NAEK;Lo;0;L;;;;;N;;;;; +B0CD;HANGUL SYLLABLE NAET;Lo;0;L;;;;;N;;;;; +B0CE;HANGUL SYLLABLE NAEP;Lo;0;L;;;;;N;;;;; +B0CF;HANGUL SYLLABLE NAEH;Lo;0;L;;;;;N;;;;; +B0D0;HANGUL SYLLABLE NYA;Lo;0;L;;;;;N;;;;; +B0D1;HANGUL SYLLABLE NYAG;Lo;0;L;;;;;N;;;;; +B0D2;HANGUL SYLLABLE NYAGG;Lo;0;L;;;;;N;;;;; +B0D3;HANGUL SYLLABLE NYAGS;Lo;0;L;;;;;N;;;;; +B0D4;HANGUL SYLLABLE NYAN;Lo;0;L;;;;;N;;;;; +B0D5;HANGUL SYLLABLE NYANI;Lo;0;L;;;;;N;;;;; +B0D6;HANGUL SYLLABLE NYANH;Lo;0;L;;;;;N;;;;; +B0D7;HANGUL SYLLABLE NYAD;Lo;0;L;;;;;N;;;;; +B0D8;HANGUL SYLLABLE NYAL;Lo;0;L;;;;;N;;;;; +B0D9;HANGUL SYLLABLE NYALG;Lo;0;L;;;;;N;;;;; +B0DA;HANGUL SYLLABLE NYALM;Lo;0;L;;;;;N;;;;; +B0DB;HANGUL SYLLABLE NYALB;Lo;0;L;;;;;N;;;;; +B0DC;HANGUL SYLLABLE NYALS;Lo;0;L;;;;;N;;;;; +B0DD;HANGUL SYLLABLE NYALT;Lo;0;L;;;;;N;;;;; +B0DE;HANGUL SYLLABLE NYALP;Lo;0;L;;;;;N;;;;; +B0DF;HANGUL SYLLABLE NYALH;Lo;0;L;;;;;N;;;;; +B0E0;HANGUL SYLLABLE NYAM;Lo;0;L;;;;;N;;;;; +B0E1;HANGUL SYLLABLE NYAB;Lo;0;L;;;;;N;;;;; +B0E2;HANGUL SYLLABLE NYABS;Lo;0;L;;;;;N;;;;; +B0E3;HANGUL SYLLABLE NYAS;Lo;0;L;;;;;N;;;;; +B0E4;HANGUL SYLLABLE NYASS;Lo;0;L;;;;;N;;;;; +B0E5;HANGUL SYLLABLE NYANG;Lo;0;L;;;;;N;;;;; +B0E6;HANGUL SYLLABLE NYAJ;Lo;0;L;;;;;N;;;;; +B0E7;HANGUL SYLLABLE NYAC;Lo;0;L;;;;;N;;;;; +B0E8;HANGUL SYLLABLE NYAK;Lo;0;L;;;;;N;;;;; +B0E9;HANGUL SYLLABLE NYAT;Lo;0;L;;;;;N;;;;; +B0EA;HANGUL SYLLABLE NYAP;Lo;0;L;;;;;N;;;;; +B0EB;HANGUL SYLLABLE NYAH;Lo;0;L;;;;;N;;;;; +B0EC;HANGUL SYLLABLE NYAE;Lo;0;L;;;;;N;;;;; +B0ED;HANGUL SYLLABLE NYAEG;Lo;0;L;;;;;N;;;;; +B0EE;HANGUL SYLLABLE NYAEGG;Lo;0;L;;;;;N;;;;; +B0EF;HANGUL SYLLABLE NYAEGS;Lo;0;L;;;;;N;;;;; +B0F0;HANGUL SYLLABLE NYAEN;Lo;0;L;;;;;N;;;;; +B0F1;HANGUL SYLLABLE NYAENI;Lo;0;L;;;;;N;;;;; +B0F2;HANGUL SYLLABLE NYAENH;Lo;0;L;;;;;N;;;;; +B0F3;HANGUL SYLLABLE NYAED;Lo;0;L;;;;;N;;;;; +B0F4;HANGUL SYLLABLE NYAEL;Lo;0;L;;;;;N;;;;; +B0F5;HANGUL SYLLABLE NYAELG;Lo;0;L;;;;;N;;;;; +B0F6;HANGUL SYLLABLE NYAELM;Lo;0;L;;;;;N;;;;; +B0F7;HANGUL SYLLABLE NYAELB;Lo;0;L;;;;;N;;;;; +B0F8;HANGUL SYLLABLE NYAELS;Lo;0;L;;;;;N;;;;; +B0F9;HANGUL SYLLABLE NYAELT;Lo;0;L;;;;;N;;;;; +B0FA;HANGUL SYLLABLE NYAELP;Lo;0;L;;;;;N;;;;; +B0FB;HANGUL SYLLABLE NYAELH;Lo;0;L;;;;;N;;;;; +B0FC;HANGUL SYLLABLE NYAEM;Lo;0;L;;;;;N;;;;; +B0FD;HANGUL SYLLABLE NYAEB;Lo;0;L;;;;;N;;;;; +B0FE;HANGUL SYLLABLE NYAEBS;Lo;0;L;;;;;N;;;;; +B0FF;HANGUL SYLLABLE NYAES;Lo;0;L;;;;;N;;;;; +B100;HANGUL SYLLABLE NYAESS;Lo;0;L;;;;;N;;;;; +B101;HANGUL SYLLABLE NYAENG;Lo;0;L;;;;;N;;;;; +B102;HANGUL SYLLABLE NYAEJ;Lo;0;L;;;;;N;;;;; +B103;HANGUL SYLLABLE NYAEC;Lo;0;L;;;;;N;;;;; +B104;HANGUL SYLLABLE NYAEK;Lo;0;L;;;;;N;;;;; +B105;HANGUL SYLLABLE NYAET;Lo;0;L;;;;;N;;;;; +B106;HANGUL SYLLABLE NYAEP;Lo;0;L;;;;;N;;;;; +B107;HANGUL SYLLABLE NYAEH;Lo;0;L;;;;;N;;;;; +B108;HANGUL SYLLABLE NEO;Lo;0;L;;;;;N;;;;; +B109;HANGUL SYLLABLE NEOG;Lo;0;L;;;;;N;;;;; +B10A;HANGUL SYLLABLE NEOGG;Lo;0;L;;;;;N;;;;; +B10B;HANGUL SYLLABLE NEOGS;Lo;0;L;;;;;N;;;;; +B10C;HANGUL SYLLABLE NEON;Lo;0;L;;;;;N;;;;; +B10D;HANGUL SYLLABLE NEONI;Lo;0;L;;;;;N;;;;; +B10E;HANGUL SYLLABLE NEONH;Lo;0;L;;;;;N;;;;; +B10F;HANGUL SYLLABLE NEOD;Lo;0;L;;;;;N;;;;; +B110;HANGUL SYLLABLE NEOL;Lo;0;L;;;;;N;;;;; +B111;HANGUL SYLLABLE NEOLG;Lo;0;L;;;;;N;;;;; +B112;HANGUL SYLLABLE NEOLM;Lo;0;L;;;;;N;;;;; +B113;HANGUL SYLLABLE NEOLB;Lo;0;L;;;;;N;;;;; +B114;HANGUL SYLLABLE NEOLS;Lo;0;L;;;;;N;;;;; +B115;HANGUL SYLLABLE NEOLT;Lo;0;L;;;;;N;;;;; +B116;HANGUL SYLLABLE NEOLP;Lo;0;L;;;;;N;;;;; +B117;HANGUL SYLLABLE NEOLH;Lo;0;L;;;;;N;;;;; +B118;HANGUL SYLLABLE NEOM;Lo;0;L;;;;;N;;;;; +B119;HANGUL SYLLABLE NEOB;Lo;0;L;;;;;N;;;;; +B11A;HANGUL SYLLABLE NEOBS;Lo;0;L;;;;;N;;;;; +B11B;HANGUL SYLLABLE NEOS;Lo;0;L;;;;;N;;;;; +B11C;HANGUL SYLLABLE NEOSS;Lo;0;L;;;;;N;;;;; +B11D;HANGUL SYLLABLE NEONG;Lo;0;L;;;;;N;;;;; +B11E;HANGUL SYLLABLE NEOJ;Lo;0;L;;;;;N;;;;; +B11F;HANGUL SYLLABLE NEOC;Lo;0;L;;;;;N;;;;; +B120;HANGUL SYLLABLE NEOK;Lo;0;L;;;;;N;;;;; +B121;HANGUL SYLLABLE NEOT;Lo;0;L;;;;;N;;;;; +B122;HANGUL SYLLABLE NEOP;Lo;0;L;;;;;N;;;;; +B123;HANGUL SYLLABLE NEOH;Lo;0;L;;;;;N;;;;; +B124;HANGUL SYLLABLE NE;Lo;0;L;;;;;N;;;;; +B125;HANGUL SYLLABLE NEG;Lo;0;L;;;;;N;;;;; +B126;HANGUL SYLLABLE NEGG;Lo;0;L;;;;;N;;;;; +B127;HANGUL SYLLABLE NEGS;Lo;0;L;;;;;N;;;;; +B128;HANGUL SYLLABLE NEN;Lo;0;L;;;;;N;;;;; +B129;HANGUL SYLLABLE NENI;Lo;0;L;;;;;N;;;;; +B12A;HANGUL SYLLABLE NENH;Lo;0;L;;;;;N;;;;; +B12B;HANGUL SYLLABLE NED;Lo;0;L;;;;;N;;;;; +B12C;HANGUL SYLLABLE NEL;Lo;0;L;;;;;N;;;;; +B12D;HANGUL SYLLABLE NELG;Lo;0;L;;;;;N;;;;; +B12E;HANGUL SYLLABLE NELM;Lo;0;L;;;;;N;;;;; +B12F;HANGUL SYLLABLE NELB;Lo;0;L;;;;;N;;;;; +B130;HANGUL SYLLABLE NELS;Lo;0;L;;;;;N;;;;; +B131;HANGUL SYLLABLE NELT;Lo;0;L;;;;;N;;;;; +B132;HANGUL SYLLABLE NELP;Lo;0;L;;;;;N;;;;; +B133;HANGUL SYLLABLE NELH;Lo;0;L;;;;;N;;;;; +B134;HANGUL SYLLABLE NEM;Lo;0;L;;;;;N;;;;; +B135;HANGUL SYLLABLE NEB;Lo;0;L;;;;;N;;;;; +B136;HANGUL SYLLABLE NEBS;Lo;0;L;;;;;N;;;;; +B137;HANGUL SYLLABLE NES;Lo;0;L;;;;;N;;;;; +B138;HANGUL SYLLABLE NESS;Lo;0;L;;;;;N;;;;; +B139;HANGUL SYLLABLE NENG;Lo;0;L;;;;;N;;;;; +B13A;HANGUL SYLLABLE NEJ;Lo;0;L;;;;;N;;;;; +B13B;HANGUL SYLLABLE NEC;Lo;0;L;;;;;N;;;;; +B13C;HANGUL SYLLABLE NEK;Lo;0;L;;;;;N;;;;; +B13D;HANGUL SYLLABLE NET;Lo;0;L;;;;;N;;;;; +B13E;HANGUL SYLLABLE NEP;Lo;0;L;;;;;N;;;;; +B13F;HANGUL SYLLABLE NEH;Lo;0;L;;;;;N;;;;; +B140;HANGUL SYLLABLE NYEO;Lo;0;L;;;;;N;;;;; +B141;HANGUL SYLLABLE NYEOG;Lo;0;L;;;;;N;;;;; +B142;HANGUL SYLLABLE NYEOGG;Lo;0;L;;;;;N;;;;; +B143;HANGUL SYLLABLE NYEOGS;Lo;0;L;;;;;N;;;;; +B144;HANGUL SYLLABLE NYEON;Lo;0;L;;;;;N;;;;; +B145;HANGUL SYLLABLE NYEONI;Lo;0;L;;;;;N;;;;; +B146;HANGUL SYLLABLE NYEONH;Lo;0;L;;;;;N;;;;; +B147;HANGUL SYLLABLE NYEOD;Lo;0;L;;;;;N;;;;; +B148;HANGUL SYLLABLE NYEOL;Lo;0;L;;;;;N;;;;; +B149;HANGUL SYLLABLE NYEOLG;Lo;0;L;;;;;N;;;;; +B14A;HANGUL SYLLABLE NYEOLM;Lo;0;L;;;;;N;;;;; +B14B;HANGUL SYLLABLE NYEOLB;Lo;0;L;;;;;N;;;;; +B14C;HANGUL SYLLABLE NYEOLS;Lo;0;L;;;;;N;;;;; +B14D;HANGUL SYLLABLE NYEOLT;Lo;0;L;;;;;N;;;;; +B14E;HANGUL SYLLABLE NYEOLP;Lo;0;L;;;;;N;;;;; +B14F;HANGUL SYLLABLE NYEOLH;Lo;0;L;;;;;N;;;;; +B150;HANGUL SYLLABLE NYEOM;Lo;0;L;;;;;N;;;;; +B151;HANGUL SYLLABLE NYEOB;Lo;0;L;;;;;N;;;;; +B152;HANGUL SYLLABLE NYEOBS;Lo;0;L;;;;;N;;;;; +B153;HANGUL SYLLABLE NYEOS;Lo;0;L;;;;;N;;;;; +B154;HANGUL SYLLABLE NYEOSS;Lo;0;L;;;;;N;;;;; +B155;HANGUL SYLLABLE NYEONG;Lo;0;L;;;;;N;;;;; +B156;HANGUL SYLLABLE NYEOJ;Lo;0;L;;;;;N;;;;; +B157;HANGUL SYLLABLE NYEOC;Lo;0;L;;;;;N;;;;; +B158;HANGUL SYLLABLE NYEOK;Lo;0;L;;;;;N;;;;; +B159;HANGUL SYLLABLE NYEOT;Lo;0;L;;;;;N;;;;; +B15A;HANGUL SYLLABLE NYEOP;Lo;0;L;;;;;N;;;;; +B15B;HANGUL SYLLABLE NYEOH;Lo;0;L;;;;;N;;;;; +B15C;HANGUL SYLLABLE NYE;Lo;0;L;;;;;N;;;;; +B15D;HANGUL SYLLABLE NYEG;Lo;0;L;;;;;N;;;;; +B15E;HANGUL SYLLABLE NYEGG;Lo;0;L;;;;;N;;;;; +B15F;HANGUL SYLLABLE NYEGS;Lo;0;L;;;;;N;;;;; +B160;HANGUL SYLLABLE NYEN;Lo;0;L;;;;;N;;;;; +B161;HANGUL SYLLABLE NYENI;Lo;0;L;;;;;N;;;;; +B162;HANGUL SYLLABLE NYENH;Lo;0;L;;;;;N;;;;; +B163;HANGUL SYLLABLE NYED;Lo;0;L;;;;;N;;;;; +B164;HANGUL SYLLABLE NYEL;Lo;0;L;;;;;N;;;;; +B165;HANGUL SYLLABLE NYELG;Lo;0;L;;;;;N;;;;; +B166;HANGUL SYLLABLE NYELM;Lo;0;L;;;;;N;;;;; +B167;HANGUL SYLLABLE NYELB;Lo;0;L;;;;;N;;;;; +B168;HANGUL SYLLABLE NYELS;Lo;0;L;;;;;N;;;;; +B169;HANGUL SYLLABLE NYELT;Lo;0;L;;;;;N;;;;; +B16A;HANGUL SYLLABLE NYELP;Lo;0;L;;;;;N;;;;; +B16B;HANGUL SYLLABLE NYELH;Lo;0;L;;;;;N;;;;; +B16C;HANGUL SYLLABLE NYEM;Lo;0;L;;;;;N;;;;; +B16D;HANGUL SYLLABLE NYEB;Lo;0;L;;;;;N;;;;; +B16E;HANGUL SYLLABLE NYEBS;Lo;0;L;;;;;N;;;;; +B16F;HANGUL SYLLABLE NYES;Lo;0;L;;;;;N;;;;; +B170;HANGUL SYLLABLE NYESS;Lo;0;L;;;;;N;;;;; +B171;HANGUL SYLLABLE NYENG;Lo;0;L;;;;;N;;;;; +B172;HANGUL SYLLABLE NYEJ;Lo;0;L;;;;;N;;;;; +B173;HANGUL SYLLABLE NYEC;Lo;0;L;;;;;N;;;;; +B174;HANGUL SYLLABLE NYEK;Lo;0;L;;;;;N;;;;; +B175;HANGUL SYLLABLE NYET;Lo;0;L;;;;;N;;;;; +B176;HANGUL SYLLABLE NYEP;Lo;0;L;;;;;N;;;;; +B177;HANGUL SYLLABLE NYEH;Lo;0;L;;;;;N;;;;; +B178;HANGUL SYLLABLE NO;Lo;0;L;;;;;N;;;;; +B179;HANGUL SYLLABLE NOG;Lo;0;L;;;;;N;;;;; +B17A;HANGUL SYLLABLE NOGG;Lo;0;L;;;;;N;;;;; +B17B;HANGUL SYLLABLE NOGS;Lo;0;L;;;;;N;;;;; +B17C;HANGUL SYLLABLE NON;Lo;0;L;;;;;N;;;;; +B17D;HANGUL SYLLABLE NONI;Lo;0;L;;;;;N;;;;; +B17E;HANGUL SYLLABLE NONH;Lo;0;L;;;;;N;;;;; +B17F;HANGUL SYLLABLE NOD;Lo;0;L;;;;;N;;;;; +B180;HANGUL SYLLABLE NOL;Lo;0;L;;;;;N;;;;; +B181;HANGUL SYLLABLE NOLG;Lo;0;L;;;;;N;;;;; +B182;HANGUL SYLLABLE NOLM;Lo;0;L;;;;;N;;;;; +B183;HANGUL SYLLABLE NOLB;Lo;0;L;;;;;N;;;;; +B184;HANGUL SYLLABLE NOLS;Lo;0;L;;;;;N;;;;; +B185;HANGUL SYLLABLE NOLT;Lo;0;L;;;;;N;;;;; +B186;HANGUL SYLLABLE NOLP;Lo;0;L;;;;;N;;;;; +B187;HANGUL SYLLABLE NOLH;Lo;0;L;;;;;N;;;;; +B188;HANGUL SYLLABLE NOM;Lo;0;L;;;;;N;;;;; +B189;HANGUL SYLLABLE NOB;Lo;0;L;;;;;N;;;;; +B18A;HANGUL SYLLABLE NOBS;Lo;0;L;;;;;N;;;;; +B18B;HANGUL SYLLABLE NOS;Lo;0;L;;;;;N;;;;; +B18C;HANGUL SYLLABLE NOSS;Lo;0;L;;;;;N;;;;; +B18D;HANGUL SYLLABLE NONG;Lo;0;L;;;;;N;;;;; +B18E;HANGUL SYLLABLE NOJ;Lo;0;L;;;;;N;;;;; +B18F;HANGUL SYLLABLE NOC;Lo;0;L;;;;;N;;;;; +B190;HANGUL SYLLABLE NOK;Lo;0;L;;;;;N;;;;; +B191;HANGUL SYLLABLE NOT;Lo;0;L;;;;;N;;;;; +B192;HANGUL SYLLABLE NOP;Lo;0;L;;;;;N;;;;; +B193;HANGUL SYLLABLE NOH;Lo;0;L;;;;;N;;;;; +B194;HANGUL SYLLABLE NWA;Lo;0;L;;;;;N;;;;; +B195;HANGUL SYLLABLE NWAG;Lo;0;L;;;;;N;;;;; +B196;HANGUL SYLLABLE NWAGG;Lo;0;L;;;;;N;;;;; +B197;HANGUL SYLLABLE NWAGS;Lo;0;L;;;;;N;;;;; +B198;HANGUL SYLLABLE NWAN;Lo;0;L;;;;;N;;;;; +B199;HANGUL SYLLABLE NWANI;Lo;0;L;;;;;N;;;;; +B19A;HANGUL SYLLABLE NWANH;Lo;0;L;;;;;N;;;;; +B19B;HANGUL SYLLABLE NWAD;Lo;0;L;;;;;N;;;;; +B19C;HANGUL SYLLABLE NWAL;Lo;0;L;;;;;N;;;;; +B19D;HANGUL SYLLABLE NWALG;Lo;0;L;;;;;N;;;;; +B19E;HANGUL SYLLABLE NWALM;Lo;0;L;;;;;N;;;;; +B19F;HANGUL SYLLABLE NWALB;Lo;0;L;;;;;N;;;;; +B1A0;HANGUL SYLLABLE NWALS;Lo;0;L;;;;;N;;;;; +B1A1;HANGUL SYLLABLE NWALT;Lo;0;L;;;;;N;;;;; +B1A2;HANGUL SYLLABLE NWALP;Lo;0;L;;;;;N;;;;; +B1A3;HANGUL SYLLABLE NWALH;Lo;0;L;;;;;N;;;;; +B1A4;HANGUL SYLLABLE NWAM;Lo;0;L;;;;;N;;;;; +B1A5;HANGUL SYLLABLE NWAB;Lo;0;L;;;;;N;;;;; +B1A6;HANGUL SYLLABLE NWABS;Lo;0;L;;;;;N;;;;; +B1A7;HANGUL SYLLABLE NWAS;Lo;0;L;;;;;N;;;;; +B1A8;HANGUL SYLLABLE NWASS;Lo;0;L;;;;;N;;;;; +B1A9;HANGUL SYLLABLE NWANG;Lo;0;L;;;;;N;;;;; +B1AA;HANGUL SYLLABLE NWAJ;Lo;0;L;;;;;N;;;;; +B1AB;HANGUL SYLLABLE NWAC;Lo;0;L;;;;;N;;;;; +B1AC;HANGUL SYLLABLE NWAK;Lo;0;L;;;;;N;;;;; +B1AD;HANGUL SYLLABLE NWAT;Lo;0;L;;;;;N;;;;; +B1AE;HANGUL SYLLABLE NWAP;Lo;0;L;;;;;N;;;;; +B1AF;HANGUL SYLLABLE NWAH;Lo;0;L;;;;;N;;;;; +B1B0;HANGUL SYLLABLE NWAE;Lo;0;L;;;;;N;;;;; +B1B1;HANGUL SYLLABLE NWAEG;Lo;0;L;;;;;N;;;;; +B1B2;HANGUL SYLLABLE NWAEGG;Lo;0;L;;;;;N;;;;; +B1B3;HANGUL SYLLABLE NWAEGS;Lo;0;L;;;;;N;;;;; +B1B4;HANGUL SYLLABLE NWAEN;Lo;0;L;;;;;N;;;;; +B1B5;HANGUL SYLLABLE NWAENI;Lo;0;L;;;;;N;;;;; +B1B6;HANGUL SYLLABLE NWAENH;Lo;0;L;;;;;N;;;;; +B1B7;HANGUL SYLLABLE NWAED;Lo;0;L;;;;;N;;;;; +B1B8;HANGUL SYLLABLE NWAEL;Lo;0;L;;;;;N;;;;; +B1B9;HANGUL SYLLABLE NWAELG;Lo;0;L;;;;;N;;;;; +B1BA;HANGUL SYLLABLE NWAELM;Lo;0;L;;;;;N;;;;; +B1BB;HANGUL SYLLABLE NWAELB;Lo;0;L;;;;;N;;;;; +B1BC;HANGUL SYLLABLE NWAELS;Lo;0;L;;;;;N;;;;; +B1BD;HANGUL SYLLABLE NWAELT;Lo;0;L;;;;;N;;;;; +B1BE;HANGUL SYLLABLE NWAELP;Lo;0;L;;;;;N;;;;; +B1BF;HANGUL SYLLABLE NWAELH;Lo;0;L;;;;;N;;;;; +B1C0;HANGUL SYLLABLE NWAEM;Lo;0;L;;;;;N;;;;; +B1C1;HANGUL SYLLABLE NWAEB;Lo;0;L;;;;;N;;;;; +B1C2;HANGUL SYLLABLE NWAEBS;Lo;0;L;;;;;N;;;;; +B1C3;HANGUL SYLLABLE NWAES;Lo;0;L;;;;;N;;;;; +B1C4;HANGUL SYLLABLE NWAESS;Lo;0;L;;;;;N;;;;; +B1C5;HANGUL SYLLABLE NWAENG;Lo;0;L;;;;;N;;;;; +B1C6;HANGUL SYLLABLE NWAEJ;Lo;0;L;;;;;N;;;;; +B1C7;HANGUL SYLLABLE NWAEC;Lo;0;L;;;;;N;;;;; +B1C8;HANGUL SYLLABLE NWAEK;Lo;0;L;;;;;N;;;;; +B1C9;HANGUL SYLLABLE NWAET;Lo;0;L;;;;;N;;;;; +B1CA;HANGUL SYLLABLE NWAEP;Lo;0;L;;;;;N;;;;; +B1CB;HANGUL SYLLABLE NWAEH;Lo;0;L;;;;;N;;;;; +B1CC;HANGUL SYLLABLE NOE;Lo;0;L;;;;;N;;;;; +B1CD;HANGUL SYLLABLE NOEG;Lo;0;L;;;;;N;;;;; +B1CE;HANGUL SYLLABLE NOEGG;Lo;0;L;;;;;N;;;;; +B1CF;HANGUL SYLLABLE NOEGS;Lo;0;L;;;;;N;;;;; +B1D0;HANGUL SYLLABLE NOEN;Lo;0;L;;;;;N;;;;; +B1D1;HANGUL SYLLABLE NOENI;Lo;0;L;;;;;N;;;;; +B1D2;HANGUL SYLLABLE NOENH;Lo;0;L;;;;;N;;;;; +B1D3;HANGUL SYLLABLE NOED;Lo;0;L;;;;;N;;;;; +B1D4;HANGUL SYLLABLE NOEL;Lo;0;L;;;;;N;;;;; +B1D5;HANGUL SYLLABLE NOELG;Lo;0;L;;;;;N;;;;; +B1D6;HANGUL SYLLABLE NOELM;Lo;0;L;;;;;N;;;;; +B1D7;HANGUL SYLLABLE NOELB;Lo;0;L;;;;;N;;;;; +B1D8;HANGUL SYLLABLE NOELS;Lo;0;L;;;;;N;;;;; +B1D9;HANGUL SYLLABLE NOELT;Lo;0;L;;;;;N;;;;; +B1DA;HANGUL SYLLABLE NOELP;Lo;0;L;;;;;N;;;;; +B1DB;HANGUL SYLLABLE NOELH;Lo;0;L;;;;;N;;;;; +B1DC;HANGUL SYLLABLE NOEM;Lo;0;L;;;;;N;;;;; +B1DD;HANGUL SYLLABLE NOEB;Lo;0;L;;;;;N;;;;; +B1DE;HANGUL SYLLABLE NOEBS;Lo;0;L;;;;;N;;;;; +B1DF;HANGUL SYLLABLE NOES;Lo;0;L;;;;;N;;;;; +B1E0;HANGUL SYLLABLE NOESS;Lo;0;L;;;;;N;;;;; +B1E1;HANGUL SYLLABLE NOENG;Lo;0;L;;;;;N;;;;; +B1E2;HANGUL SYLLABLE NOEJ;Lo;0;L;;;;;N;;;;; +B1E3;HANGUL SYLLABLE NOEC;Lo;0;L;;;;;N;;;;; +B1E4;HANGUL SYLLABLE NOEK;Lo;0;L;;;;;N;;;;; +B1E5;HANGUL SYLLABLE NOET;Lo;0;L;;;;;N;;;;; +B1E6;HANGUL SYLLABLE NOEP;Lo;0;L;;;;;N;;;;; +B1E7;HANGUL SYLLABLE NOEH;Lo;0;L;;;;;N;;;;; +B1E8;HANGUL SYLLABLE NYO;Lo;0;L;;;;;N;;;;; +B1E9;HANGUL SYLLABLE NYOG;Lo;0;L;;;;;N;;;;; +B1EA;HANGUL SYLLABLE NYOGG;Lo;0;L;;;;;N;;;;; +B1EB;HANGUL SYLLABLE NYOGS;Lo;0;L;;;;;N;;;;; +B1EC;HANGUL SYLLABLE NYON;Lo;0;L;;;;;N;;;;; +B1ED;HANGUL SYLLABLE NYONI;Lo;0;L;;;;;N;;;;; +B1EE;HANGUL SYLLABLE NYONH;Lo;0;L;;;;;N;;;;; +B1EF;HANGUL SYLLABLE NYOD;Lo;0;L;;;;;N;;;;; +B1F0;HANGUL SYLLABLE NYOL;Lo;0;L;;;;;N;;;;; +B1F1;HANGUL SYLLABLE NYOLG;Lo;0;L;;;;;N;;;;; +B1F2;HANGUL SYLLABLE NYOLM;Lo;0;L;;;;;N;;;;; +B1F3;HANGUL SYLLABLE NYOLB;Lo;0;L;;;;;N;;;;; +B1F4;HANGUL SYLLABLE NYOLS;Lo;0;L;;;;;N;;;;; +B1F5;HANGUL SYLLABLE NYOLT;Lo;0;L;;;;;N;;;;; +B1F6;HANGUL SYLLABLE NYOLP;Lo;0;L;;;;;N;;;;; +B1F7;HANGUL SYLLABLE NYOLH;Lo;0;L;;;;;N;;;;; +B1F8;HANGUL SYLLABLE NYOM;Lo;0;L;;;;;N;;;;; +B1F9;HANGUL SYLLABLE NYOB;Lo;0;L;;;;;N;;;;; +B1FA;HANGUL SYLLABLE NYOBS;Lo;0;L;;;;;N;;;;; +B1FB;HANGUL SYLLABLE NYOS;Lo;0;L;;;;;N;;;;; +B1FC;HANGUL SYLLABLE NYOSS;Lo;0;L;;;;;N;;;;; +B1FD;HANGUL SYLLABLE NYONG;Lo;0;L;;;;;N;;;;; +B1FE;HANGUL SYLLABLE NYOJ;Lo;0;L;;;;;N;;;;; +B1FF;HANGUL SYLLABLE NYOC;Lo;0;L;;;;;N;;;;; +B200;HANGUL SYLLABLE NYOK;Lo;0;L;;;;;N;;;;; +B201;HANGUL SYLLABLE NYOT;Lo;0;L;;;;;N;;;;; +B202;HANGUL SYLLABLE NYOP;Lo;0;L;;;;;N;;;;; +B203;HANGUL SYLLABLE NYOH;Lo;0;L;;;;;N;;;;; +B204;HANGUL SYLLABLE NU;Lo;0;L;;;;;N;;;;; +B205;HANGUL SYLLABLE NUG;Lo;0;L;;;;;N;;;;; +B206;HANGUL SYLLABLE NUGG;Lo;0;L;;;;;N;;;;; +B207;HANGUL SYLLABLE NUGS;Lo;0;L;;;;;N;;;;; +B208;HANGUL SYLLABLE NUN;Lo;0;L;;;;;N;;;;; +B209;HANGUL SYLLABLE NUNI;Lo;0;L;;;;;N;;;;; +B20A;HANGUL SYLLABLE NUNH;Lo;0;L;;;;;N;;;;; +B20B;HANGUL SYLLABLE NUD;Lo;0;L;;;;;N;;;;; +B20C;HANGUL SYLLABLE NUL;Lo;0;L;;;;;N;;;;; +B20D;HANGUL SYLLABLE NULG;Lo;0;L;;;;;N;;;;; +B20E;HANGUL SYLLABLE NULM;Lo;0;L;;;;;N;;;;; +B20F;HANGUL SYLLABLE NULB;Lo;0;L;;;;;N;;;;; +B210;HANGUL SYLLABLE NULS;Lo;0;L;;;;;N;;;;; +B211;HANGUL SYLLABLE NULT;Lo;0;L;;;;;N;;;;; +B212;HANGUL SYLLABLE NULP;Lo;0;L;;;;;N;;;;; +B213;HANGUL SYLLABLE NULH;Lo;0;L;;;;;N;;;;; +B214;HANGUL SYLLABLE NUM;Lo;0;L;;;;;N;;;;; +B215;HANGUL SYLLABLE NUB;Lo;0;L;;;;;N;;;;; +B216;HANGUL SYLLABLE NUBS;Lo;0;L;;;;;N;;;;; +B217;HANGUL SYLLABLE NUS;Lo;0;L;;;;;N;;;;; +B218;HANGUL SYLLABLE NUSS;Lo;0;L;;;;;N;;;;; +B219;HANGUL SYLLABLE NUNG;Lo;0;L;;;;;N;;;;; +B21A;HANGUL SYLLABLE NUJ;Lo;0;L;;;;;N;;;;; +B21B;HANGUL SYLLABLE NUC;Lo;0;L;;;;;N;;;;; +B21C;HANGUL SYLLABLE NUK;Lo;0;L;;;;;N;;;;; +B21D;HANGUL SYLLABLE NUT;Lo;0;L;;;;;N;;;;; +B21E;HANGUL SYLLABLE NUP;Lo;0;L;;;;;N;;;;; +B21F;HANGUL SYLLABLE NUH;Lo;0;L;;;;;N;;;;; +B220;HANGUL SYLLABLE NWEO;Lo;0;L;;;;;N;;;;; +B221;HANGUL SYLLABLE NWEOG;Lo;0;L;;;;;N;;;;; +B222;HANGUL SYLLABLE NWEOGG;Lo;0;L;;;;;N;;;;; +B223;HANGUL SYLLABLE NWEOGS;Lo;0;L;;;;;N;;;;; +B224;HANGUL SYLLABLE NWEON;Lo;0;L;;;;;N;;;;; +B225;HANGUL SYLLABLE NWEONI;Lo;0;L;;;;;N;;;;; +B226;HANGUL SYLLABLE NWEONH;Lo;0;L;;;;;N;;;;; +B227;HANGUL SYLLABLE NWEOD;Lo;0;L;;;;;N;;;;; +B228;HANGUL SYLLABLE NWEOL;Lo;0;L;;;;;N;;;;; +B229;HANGUL SYLLABLE NWEOLG;Lo;0;L;;;;;N;;;;; +B22A;HANGUL SYLLABLE NWEOLM;Lo;0;L;;;;;N;;;;; +B22B;HANGUL SYLLABLE NWEOLB;Lo;0;L;;;;;N;;;;; +B22C;HANGUL SYLLABLE NWEOLS;Lo;0;L;;;;;N;;;;; +B22D;HANGUL SYLLABLE NWEOLT;Lo;0;L;;;;;N;;;;; +B22E;HANGUL SYLLABLE NWEOLP;Lo;0;L;;;;;N;;;;; +B22F;HANGUL SYLLABLE NWEOLH;Lo;0;L;;;;;N;;;;; +B230;HANGUL SYLLABLE NWEOM;Lo;0;L;;;;;N;;;;; +B231;HANGUL SYLLABLE NWEOB;Lo;0;L;;;;;N;;;;; +B232;HANGUL SYLLABLE NWEOBS;Lo;0;L;;;;;N;;;;; +B233;HANGUL SYLLABLE NWEOS;Lo;0;L;;;;;N;;;;; +B234;HANGUL SYLLABLE NWEOSS;Lo;0;L;;;;;N;;;;; +B235;HANGUL SYLLABLE NWEONG;Lo;0;L;;;;;N;;;;; +B236;HANGUL SYLLABLE NWEOJ;Lo;0;L;;;;;N;;;;; +B237;HANGUL SYLLABLE NWEOC;Lo;0;L;;;;;N;;;;; +B238;HANGUL SYLLABLE NWEOK;Lo;0;L;;;;;N;;;;; +B239;HANGUL SYLLABLE NWEOT;Lo;0;L;;;;;N;;;;; +B23A;HANGUL SYLLABLE NWEOP;Lo;0;L;;;;;N;;;;; +B23B;HANGUL SYLLABLE NWEOH;Lo;0;L;;;;;N;;;;; +B23C;HANGUL SYLLABLE NWE;Lo;0;L;;;;;N;;;;; +B23D;HANGUL SYLLABLE NWEG;Lo;0;L;;;;;N;;;;; +B23E;HANGUL SYLLABLE NWEGG;Lo;0;L;;;;;N;;;;; +B23F;HANGUL SYLLABLE NWEGS;Lo;0;L;;;;;N;;;;; +B240;HANGUL SYLLABLE NWEN;Lo;0;L;;;;;N;;;;; +B241;HANGUL SYLLABLE NWENI;Lo;0;L;;;;;N;;;;; +B242;HANGUL SYLLABLE NWENH;Lo;0;L;;;;;N;;;;; +B243;HANGUL SYLLABLE NWED;Lo;0;L;;;;;N;;;;; +B244;HANGUL SYLLABLE NWEL;Lo;0;L;;;;;N;;;;; +B245;HANGUL SYLLABLE NWELG;Lo;0;L;;;;;N;;;;; +B246;HANGUL SYLLABLE NWELM;Lo;0;L;;;;;N;;;;; +B247;HANGUL SYLLABLE NWELB;Lo;0;L;;;;;N;;;;; +B248;HANGUL SYLLABLE NWELS;Lo;0;L;;;;;N;;;;; +B249;HANGUL SYLLABLE NWELT;Lo;0;L;;;;;N;;;;; +B24A;HANGUL SYLLABLE NWELP;Lo;0;L;;;;;N;;;;; +B24B;HANGUL SYLLABLE NWELH;Lo;0;L;;;;;N;;;;; +B24C;HANGUL SYLLABLE NWEM;Lo;0;L;;;;;N;;;;; +B24D;HANGUL SYLLABLE NWEB;Lo;0;L;;;;;N;;;;; +B24E;HANGUL SYLLABLE NWEBS;Lo;0;L;;;;;N;;;;; +B24F;HANGUL SYLLABLE NWES;Lo;0;L;;;;;N;;;;; +B250;HANGUL SYLLABLE NWESS;Lo;0;L;;;;;N;;;;; +B251;HANGUL SYLLABLE NWENG;Lo;0;L;;;;;N;;;;; +B252;HANGUL SYLLABLE NWEJ;Lo;0;L;;;;;N;;;;; +B253;HANGUL SYLLABLE NWEC;Lo;0;L;;;;;N;;;;; +B254;HANGUL SYLLABLE NWEK;Lo;0;L;;;;;N;;;;; +B255;HANGUL SYLLABLE NWET;Lo;0;L;;;;;N;;;;; +B256;HANGUL SYLLABLE NWEP;Lo;0;L;;;;;N;;;;; +B257;HANGUL SYLLABLE NWEH;Lo;0;L;;;;;N;;;;; +B258;HANGUL SYLLABLE NWI;Lo;0;L;;;;;N;;;;; +B259;HANGUL SYLLABLE NWIG;Lo;0;L;;;;;N;;;;; +B25A;HANGUL SYLLABLE NWIGG;Lo;0;L;;;;;N;;;;; +B25B;HANGUL SYLLABLE NWIGS;Lo;0;L;;;;;N;;;;; +B25C;HANGUL SYLLABLE NWIN;Lo;0;L;;;;;N;;;;; +B25D;HANGUL SYLLABLE NWINI;Lo;0;L;;;;;N;;;;; +B25E;HANGUL SYLLABLE NWINH;Lo;0;L;;;;;N;;;;; +B25F;HANGUL SYLLABLE NWID;Lo;0;L;;;;;N;;;;; +B260;HANGUL SYLLABLE NWIL;Lo;0;L;;;;;N;;;;; +B261;HANGUL SYLLABLE NWILG;Lo;0;L;;;;;N;;;;; +B262;HANGUL SYLLABLE NWILM;Lo;0;L;;;;;N;;;;; +B263;HANGUL SYLLABLE NWILB;Lo;0;L;;;;;N;;;;; +B264;HANGUL SYLLABLE NWILS;Lo;0;L;;;;;N;;;;; +B265;HANGUL SYLLABLE NWILT;Lo;0;L;;;;;N;;;;; +B266;HANGUL SYLLABLE NWILP;Lo;0;L;;;;;N;;;;; +B267;HANGUL SYLLABLE NWILH;Lo;0;L;;;;;N;;;;; +B268;HANGUL SYLLABLE NWIM;Lo;0;L;;;;;N;;;;; +B269;HANGUL SYLLABLE NWIB;Lo;0;L;;;;;N;;;;; +B26A;HANGUL SYLLABLE NWIBS;Lo;0;L;;;;;N;;;;; +B26B;HANGUL SYLLABLE NWIS;Lo;0;L;;;;;N;;;;; +B26C;HANGUL SYLLABLE NWISS;Lo;0;L;;;;;N;;;;; +B26D;HANGUL SYLLABLE NWING;Lo;0;L;;;;;N;;;;; +B26E;HANGUL SYLLABLE NWIJ;Lo;0;L;;;;;N;;;;; +B26F;HANGUL SYLLABLE NWIC;Lo;0;L;;;;;N;;;;; +B270;HANGUL SYLLABLE NWIK;Lo;0;L;;;;;N;;;;; +B271;HANGUL SYLLABLE NWIT;Lo;0;L;;;;;N;;;;; +B272;HANGUL SYLLABLE NWIP;Lo;0;L;;;;;N;;;;; +B273;HANGUL SYLLABLE NWIH;Lo;0;L;;;;;N;;;;; +B274;HANGUL SYLLABLE NYU;Lo;0;L;;;;;N;;;;; +B275;HANGUL SYLLABLE NYUG;Lo;0;L;;;;;N;;;;; +B276;HANGUL SYLLABLE NYUGG;Lo;0;L;;;;;N;;;;; +B277;HANGUL SYLLABLE NYUGS;Lo;0;L;;;;;N;;;;; +B278;HANGUL SYLLABLE NYUN;Lo;0;L;;;;;N;;;;; +B279;HANGUL SYLLABLE NYUNI;Lo;0;L;;;;;N;;;;; +B27A;HANGUL SYLLABLE NYUNH;Lo;0;L;;;;;N;;;;; +B27B;HANGUL SYLLABLE NYUD;Lo;0;L;;;;;N;;;;; +B27C;HANGUL SYLLABLE NYUL;Lo;0;L;;;;;N;;;;; +B27D;HANGUL SYLLABLE NYULG;Lo;0;L;;;;;N;;;;; +B27E;HANGUL SYLLABLE NYULM;Lo;0;L;;;;;N;;;;; +B27F;HANGUL SYLLABLE NYULB;Lo;0;L;;;;;N;;;;; +B280;HANGUL SYLLABLE NYULS;Lo;0;L;;;;;N;;;;; +B281;HANGUL SYLLABLE NYULT;Lo;0;L;;;;;N;;;;; +B282;HANGUL SYLLABLE NYULP;Lo;0;L;;;;;N;;;;; +B283;HANGUL SYLLABLE NYULH;Lo;0;L;;;;;N;;;;; +B284;HANGUL SYLLABLE NYUM;Lo;0;L;;;;;N;;;;; +B285;HANGUL SYLLABLE NYUB;Lo;0;L;;;;;N;;;;; +B286;HANGUL SYLLABLE NYUBS;Lo;0;L;;;;;N;;;;; +B287;HANGUL SYLLABLE NYUS;Lo;0;L;;;;;N;;;;; +B288;HANGUL SYLLABLE NYUSS;Lo;0;L;;;;;N;;;;; +B289;HANGUL SYLLABLE NYUNG;Lo;0;L;;;;;N;;;;; +B28A;HANGUL SYLLABLE NYUJ;Lo;0;L;;;;;N;;;;; +B28B;HANGUL SYLLABLE NYUC;Lo;0;L;;;;;N;;;;; +B28C;HANGUL SYLLABLE NYUK;Lo;0;L;;;;;N;;;;; +B28D;HANGUL SYLLABLE NYUT;Lo;0;L;;;;;N;;;;; +B28E;HANGUL SYLLABLE NYUP;Lo;0;L;;;;;N;;;;; +B28F;HANGUL SYLLABLE NYUH;Lo;0;L;;;;;N;;;;; +B290;HANGUL SYLLABLE NEU;Lo;0;L;;;;;N;;;;; +B291;HANGUL SYLLABLE NEUG;Lo;0;L;;;;;N;;;;; +B292;HANGUL SYLLABLE NEUGG;Lo;0;L;;;;;N;;;;; +B293;HANGUL SYLLABLE NEUGS;Lo;0;L;;;;;N;;;;; +B294;HANGUL SYLLABLE NEUN;Lo;0;L;;;;;N;;;;; +B295;HANGUL SYLLABLE NEUNI;Lo;0;L;;;;;N;;;;; +B296;HANGUL SYLLABLE NEUNH;Lo;0;L;;;;;N;;;;; +B297;HANGUL SYLLABLE NEUD;Lo;0;L;;;;;N;;;;; +B298;HANGUL SYLLABLE NEUL;Lo;0;L;;;;;N;;;;; +B299;HANGUL SYLLABLE NEULG;Lo;0;L;;;;;N;;;;; +B29A;HANGUL SYLLABLE NEULM;Lo;0;L;;;;;N;;;;; +B29B;HANGUL SYLLABLE NEULB;Lo;0;L;;;;;N;;;;; +B29C;HANGUL SYLLABLE NEULS;Lo;0;L;;;;;N;;;;; +B29D;HANGUL SYLLABLE NEULT;Lo;0;L;;;;;N;;;;; +B29E;HANGUL SYLLABLE NEULP;Lo;0;L;;;;;N;;;;; +B29F;HANGUL SYLLABLE NEULH;Lo;0;L;;;;;N;;;;; +B2A0;HANGUL SYLLABLE NEUM;Lo;0;L;;;;;N;;;;; +B2A1;HANGUL SYLLABLE NEUB;Lo;0;L;;;;;N;;;;; +B2A2;HANGUL SYLLABLE NEUBS;Lo;0;L;;;;;N;;;;; +B2A3;HANGUL SYLLABLE NEUS;Lo;0;L;;;;;N;;;;; +B2A4;HANGUL SYLLABLE NEUSS;Lo;0;L;;;;;N;;;;; +B2A5;HANGUL SYLLABLE NEUNG;Lo;0;L;;;;;N;;;;; +B2A6;HANGUL SYLLABLE NEUJ;Lo;0;L;;;;;N;;;;; +B2A7;HANGUL SYLLABLE NEUC;Lo;0;L;;;;;N;;;;; +B2A8;HANGUL SYLLABLE NEUK;Lo;0;L;;;;;N;;;;; +B2A9;HANGUL SYLLABLE NEUT;Lo;0;L;;;;;N;;;;; +B2AA;HANGUL SYLLABLE NEUP;Lo;0;L;;;;;N;;;;; +B2AB;HANGUL SYLLABLE NEUH;Lo;0;L;;;;;N;;;;; +B2AC;HANGUL SYLLABLE NYI;Lo;0;L;;;;;N;;;;; +B2AD;HANGUL SYLLABLE NYIG;Lo;0;L;;;;;N;;;;; +B2AE;HANGUL SYLLABLE NYIGG;Lo;0;L;;;;;N;;;;; +B2AF;HANGUL SYLLABLE NYIGS;Lo;0;L;;;;;N;;;;; +B2B0;HANGUL SYLLABLE NYIN;Lo;0;L;;;;;N;;;;; +B2B1;HANGUL SYLLABLE NYINI;Lo;0;L;;;;;N;;;;; +B2B2;HANGUL SYLLABLE NYINH;Lo;0;L;;;;;N;;;;; +B2B3;HANGUL SYLLABLE NYID;Lo;0;L;;;;;N;;;;; +B2B4;HANGUL SYLLABLE NYIL;Lo;0;L;;;;;N;;;;; +B2B5;HANGUL SYLLABLE NYILG;Lo;0;L;;;;;N;;;;; +B2B6;HANGUL SYLLABLE NYILM;Lo;0;L;;;;;N;;;;; +B2B7;HANGUL SYLLABLE NYILB;Lo;0;L;;;;;N;;;;; +B2B8;HANGUL SYLLABLE NYILS;Lo;0;L;;;;;N;;;;; +B2B9;HANGUL SYLLABLE NYILT;Lo;0;L;;;;;N;;;;; +B2BA;HANGUL SYLLABLE NYILP;Lo;0;L;;;;;N;;;;; +B2BB;HANGUL SYLLABLE NYILH;Lo;0;L;;;;;N;;;;; +B2BC;HANGUL SYLLABLE NYIM;Lo;0;L;;;;;N;;;;; +B2BD;HANGUL SYLLABLE NYIB;Lo;0;L;;;;;N;;;;; +B2BE;HANGUL SYLLABLE NYIBS;Lo;0;L;;;;;N;;;;; +B2BF;HANGUL SYLLABLE NYIS;Lo;0;L;;;;;N;;;;; +B2C0;HANGUL SYLLABLE NYISS;Lo;0;L;;;;;N;;;;; +B2C1;HANGUL SYLLABLE NYING;Lo;0;L;;;;;N;;;;; +B2C2;HANGUL SYLLABLE NYIJ;Lo;0;L;;;;;N;;;;; +B2C3;HANGUL SYLLABLE NYIC;Lo;0;L;;;;;N;;;;; +B2C4;HANGUL SYLLABLE NYIK;Lo;0;L;;;;;N;;;;; +B2C5;HANGUL SYLLABLE NYIT;Lo;0;L;;;;;N;;;;; +B2C6;HANGUL SYLLABLE NYIP;Lo;0;L;;;;;N;;;;; +B2C7;HANGUL SYLLABLE NYIH;Lo;0;L;;;;;N;;;;; +B2C8;HANGUL SYLLABLE NI;Lo;0;L;;;;;N;;;;; +B2C9;HANGUL SYLLABLE NIG;Lo;0;L;;;;;N;;;;; +B2CA;HANGUL SYLLABLE NIGG;Lo;0;L;;;;;N;;;;; +B2CB;HANGUL SYLLABLE NIGS;Lo;0;L;;;;;N;;;;; +B2CC;HANGUL SYLLABLE NIN;Lo;0;L;;;;;N;;;;; +B2CD;HANGUL SYLLABLE NINI;Lo;0;L;;;;;N;;;;; +B2CE;HANGUL SYLLABLE NINH;Lo;0;L;;;;;N;;;;; +B2CF;HANGUL SYLLABLE NID;Lo;0;L;;;;;N;;;;; +B2D0;HANGUL SYLLABLE NIL;Lo;0;L;;;;;N;;;;; +B2D1;HANGUL SYLLABLE NILG;Lo;0;L;;;;;N;;;;; +B2D2;HANGUL SYLLABLE NILM;Lo;0;L;;;;;N;;;;; +B2D3;HANGUL SYLLABLE NILB;Lo;0;L;;;;;N;;;;; +B2D4;HANGUL SYLLABLE NILS;Lo;0;L;;;;;N;;;;; +B2D5;HANGUL SYLLABLE NILT;Lo;0;L;;;;;N;;;;; +B2D6;HANGUL SYLLABLE NILP;Lo;0;L;;;;;N;;;;; +B2D7;HANGUL SYLLABLE NILH;Lo;0;L;;;;;N;;;;; +B2D8;HANGUL SYLLABLE NIM;Lo;0;L;;;;;N;;;;; +B2D9;HANGUL SYLLABLE NIB;Lo;0;L;;;;;N;;;;; +B2DA;HANGUL SYLLABLE NIBS;Lo;0;L;;;;;N;;;;; +B2DB;HANGUL SYLLABLE NIS;Lo;0;L;;;;;N;;;;; +B2DC;HANGUL SYLLABLE NISS;Lo;0;L;;;;;N;;;;; +B2DD;HANGUL SYLLABLE NING;Lo;0;L;;;;;N;;;;; +B2DE;HANGUL SYLLABLE NIJ;Lo;0;L;;;;;N;;;;; +B2DF;HANGUL SYLLABLE NIC;Lo;0;L;;;;;N;;;;; +B2E0;HANGUL SYLLABLE NIK;Lo;0;L;;;;;N;;;;; +B2E1;HANGUL SYLLABLE NIT;Lo;0;L;;;;;N;;;;; +B2E2;HANGUL SYLLABLE NIP;Lo;0;L;;;;;N;;;;; +B2E3;HANGUL SYLLABLE NIH;Lo;0;L;;;;;N;;;;; +B2E4;HANGUL SYLLABLE DA;Lo;0;L;;;;;N;;;;; +B2E5;HANGUL SYLLABLE DAG;Lo;0;L;;;;;N;;;;; +B2E6;HANGUL SYLLABLE DAGG;Lo;0;L;;;;;N;;;;; +B2E7;HANGUL SYLLABLE DAGS;Lo;0;L;;;;;N;;;;; +B2E8;HANGUL SYLLABLE DAN;Lo;0;L;;;;;N;;;;; +B2E9;HANGUL SYLLABLE DANI;Lo;0;L;;;;;N;;;;; +B2EA;HANGUL SYLLABLE DANH;Lo;0;L;;;;;N;;;;; +B2EB;HANGUL SYLLABLE DAD;Lo;0;L;;;;;N;;;;; +B2EC;HANGUL SYLLABLE DAL;Lo;0;L;;;;;N;;;;; +B2ED;HANGUL SYLLABLE DALG;Lo;0;L;;;;;N;;;;; +B2EE;HANGUL SYLLABLE DALM;Lo;0;L;;;;;N;;;;; +B2EF;HANGUL SYLLABLE DALB;Lo;0;L;;;;;N;;;;; +B2F0;HANGUL SYLLABLE DALS;Lo;0;L;;;;;N;;;;; +B2F1;HANGUL SYLLABLE DALT;Lo;0;L;;;;;N;;;;; +B2F2;HANGUL SYLLABLE DALP;Lo;0;L;;;;;N;;;;; +B2F3;HANGUL SYLLABLE DALH;Lo;0;L;;;;;N;;;;; +B2F4;HANGUL SYLLABLE DAM;Lo;0;L;;;;;N;;;;; +B2F5;HANGUL SYLLABLE DAB;Lo;0;L;;;;;N;;;;; +B2F6;HANGUL SYLLABLE DABS;Lo;0;L;;;;;N;;;;; +B2F7;HANGUL SYLLABLE DAS;Lo;0;L;;;;;N;;;;; +B2F8;HANGUL SYLLABLE DASS;Lo;0;L;;;;;N;;;;; +B2F9;HANGUL SYLLABLE DANG;Lo;0;L;;;;;N;;;;; +B2FA;HANGUL SYLLABLE DAJ;Lo;0;L;;;;;N;;;;; +B2FB;HANGUL SYLLABLE DAC;Lo;0;L;;;;;N;;;;; +B2FC;HANGUL SYLLABLE DAK;Lo;0;L;;;;;N;;;;; +B2FD;HANGUL SYLLABLE DAT;Lo;0;L;;;;;N;;;;; +B2FE;HANGUL SYLLABLE DAP;Lo;0;L;;;;;N;;;;; +B2FF;HANGUL SYLLABLE DAH;Lo;0;L;;;;;N;;;;; +B300;HANGUL SYLLABLE DAE;Lo;0;L;;;;;N;;;;; +B301;HANGUL SYLLABLE DAEG;Lo;0;L;;;;;N;;;;; +B302;HANGUL SYLLABLE DAEGG;Lo;0;L;;;;;N;;;;; +B303;HANGUL SYLLABLE DAEGS;Lo;0;L;;;;;N;;;;; +B304;HANGUL SYLLABLE DAEN;Lo;0;L;;;;;N;;;;; +B305;HANGUL SYLLABLE DAENI;Lo;0;L;;;;;N;;;;; +B306;HANGUL SYLLABLE DAENH;Lo;0;L;;;;;N;;;;; +B307;HANGUL SYLLABLE DAED;Lo;0;L;;;;;N;;;;; +B308;HANGUL SYLLABLE DAEL;Lo;0;L;;;;;N;;;;; +B309;HANGUL SYLLABLE DAELG;Lo;0;L;;;;;N;;;;; +B30A;HANGUL SYLLABLE DAELM;Lo;0;L;;;;;N;;;;; +B30B;HANGUL SYLLABLE DAELB;Lo;0;L;;;;;N;;;;; +B30C;HANGUL SYLLABLE DAELS;Lo;0;L;;;;;N;;;;; +B30D;HANGUL SYLLABLE DAELT;Lo;0;L;;;;;N;;;;; +B30E;HANGUL SYLLABLE DAELP;Lo;0;L;;;;;N;;;;; +B30F;HANGUL SYLLABLE DAELH;Lo;0;L;;;;;N;;;;; +B310;HANGUL SYLLABLE DAEM;Lo;0;L;;;;;N;;;;; +B311;HANGUL SYLLABLE DAEB;Lo;0;L;;;;;N;;;;; +B312;HANGUL SYLLABLE DAEBS;Lo;0;L;;;;;N;;;;; +B313;HANGUL SYLLABLE DAES;Lo;0;L;;;;;N;;;;; +B314;HANGUL SYLLABLE DAESS;Lo;0;L;;;;;N;;;;; +B315;HANGUL SYLLABLE DAENG;Lo;0;L;;;;;N;;;;; +B316;HANGUL SYLLABLE DAEJ;Lo;0;L;;;;;N;;;;; +B317;HANGUL SYLLABLE DAEC;Lo;0;L;;;;;N;;;;; +B318;HANGUL SYLLABLE DAEK;Lo;0;L;;;;;N;;;;; +B319;HANGUL SYLLABLE DAET;Lo;0;L;;;;;N;;;;; +B31A;HANGUL SYLLABLE DAEP;Lo;0;L;;;;;N;;;;; +B31B;HANGUL SYLLABLE DAEH;Lo;0;L;;;;;N;;;;; +B31C;HANGUL SYLLABLE DYA;Lo;0;L;;;;;N;;;;; +B31D;HANGUL SYLLABLE DYAG;Lo;0;L;;;;;N;;;;; +B31E;HANGUL SYLLABLE DYAGG;Lo;0;L;;;;;N;;;;; +B31F;HANGUL SYLLABLE DYAGS;Lo;0;L;;;;;N;;;;; +B320;HANGUL SYLLABLE DYAN;Lo;0;L;;;;;N;;;;; +B321;HANGUL SYLLABLE DYANI;Lo;0;L;;;;;N;;;;; +B322;HANGUL SYLLABLE DYANH;Lo;0;L;;;;;N;;;;; +B323;HANGUL SYLLABLE DYAD;Lo;0;L;;;;;N;;;;; +B324;HANGUL SYLLABLE DYAL;Lo;0;L;;;;;N;;;;; +B325;HANGUL SYLLABLE DYALG;Lo;0;L;;;;;N;;;;; +B326;HANGUL SYLLABLE DYALM;Lo;0;L;;;;;N;;;;; +B327;HANGUL SYLLABLE DYALB;Lo;0;L;;;;;N;;;;; +B328;HANGUL SYLLABLE DYALS;Lo;0;L;;;;;N;;;;; +B329;HANGUL SYLLABLE DYALT;Lo;0;L;;;;;N;;;;; +B32A;HANGUL SYLLABLE DYALP;Lo;0;L;;;;;N;;;;; +B32B;HANGUL SYLLABLE DYALH;Lo;0;L;;;;;N;;;;; +B32C;HANGUL SYLLABLE DYAM;Lo;0;L;;;;;N;;;;; +B32D;HANGUL SYLLABLE DYAB;Lo;0;L;;;;;N;;;;; +B32E;HANGUL SYLLABLE DYABS;Lo;0;L;;;;;N;;;;; +B32F;HANGUL SYLLABLE DYAS;Lo;0;L;;;;;N;;;;; +B330;HANGUL SYLLABLE DYASS;Lo;0;L;;;;;N;;;;; +B331;HANGUL SYLLABLE DYANG;Lo;0;L;;;;;N;;;;; +B332;HANGUL SYLLABLE DYAJ;Lo;0;L;;;;;N;;;;; +B333;HANGUL SYLLABLE DYAC;Lo;0;L;;;;;N;;;;; +B334;HANGUL SYLLABLE DYAK;Lo;0;L;;;;;N;;;;; +B335;HANGUL SYLLABLE DYAT;Lo;0;L;;;;;N;;;;; +B336;HANGUL SYLLABLE DYAP;Lo;0;L;;;;;N;;;;; +B337;HANGUL SYLLABLE DYAH;Lo;0;L;;;;;N;;;;; +B338;HANGUL SYLLABLE DYAE;Lo;0;L;;;;;N;;;;; +B339;HANGUL SYLLABLE DYAEG;Lo;0;L;;;;;N;;;;; +B33A;HANGUL SYLLABLE DYAEGG;Lo;0;L;;;;;N;;;;; +B33B;HANGUL SYLLABLE DYAEGS;Lo;0;L;;;;;N;;;;; +B33C;HANGUL SYLLABLE DYAEN;Lo;0;L;;;;;N;;;;; +B33D;HANGUL SYLLABLE DYAENI;Lo;0;L;;;;;N;;;;; +B33E;HANGUL SYLLABLE DYAENH;Lo;0;L;;;;;N;;;;; +B33F;HANGUL SYLLABLE DYAED;Lo;0;L;;;;;N;;;;; +B340;HANGUL SYLLABLE DYAEL;Lo;0;L;;;;;N;;;;; +B341;HANGUL SYLLABLE DYAELG;Lo;0;L;;;;;N;;;;; +B342;HANGUL SYLLABLE DYAELM;Lo;0;L;;;;;N;;;;; +B343;HANGUL SYLLABLE DYAELB;Lo;0;L;;;;;N;;;;; +B344;HANGUL SYLLABLE DYAELS;Lo;0;L;;;;;N;;;;; +B345;HANGUL SYLLABLE DYAELT;Lo;0;L;;;;;N;;;;; +B346;HANGUL SYLLABLE DYAELP;Lo;0;L;;;;;N;;;;; +B347;HANGUL SYLLABLE DYAELH;Lo;0;L;;;;;N;;;;; +B348;HANGUL SYLLABLE DYAEM;Lo;0;L;;;;;N;;;;; +B349;HANGUL SYLLABLE DYAEB;Lo;0;L;;;;;N;;;;; +B34A;HANGUL SYLLABLE DYAEBS;Lo;0;L;;;;;N;;;;; +B34B;HANGUL SYLLABLE DYAES;Lo;0;L;;;;;N;;;;; +B34C;HANGUL SYLLABLE DYAESS;Lo;0;L;;;;;N;;;;; +B34D;HANGUL SYLLABLE DYAENG;Lo;0;L;;;;;N;;;;; +B34E;HANGUL SYLLABLE DYAEJ;Lo;0;L;;;;;N;;;;; +B34F;HANGUL SYLLABLE DYAEC;Lo;0;L;;;;;N;;;;; +B350;HANGUL SYLLABLE DYAEK;Lo;0;L;;;;;N;;;;; +B351;HANGUL SYLLABLE DYAET;Lo;0;L;;;;;N;;;;; +B352;HANGUL SYLLABLE DYAEP;Lo;0;L;;;;;N;;;;; +B353;HANGUL SYLLABLE DYAEH;Lo;0;L;;;;;N;;;;; +B354;HANGUL SYLLABLE DEO;Lo;0;L;;;;;N;;;;; +B355;HANGUL SYLLABLE DEOG;Lo;0;L;;;;;N;;;;; +B356;HANGUL SYLLABLE DEOGG;Lo;0;L;;;;;N;;;;; +B357;HANGUL SYLLABLE DEOGS;Lo;0;L;;;;;N;;;;; +B358;HANGUL SYLLABLE DEON;Lo;0;L;;;;;N;;;;; +B359;HANGUL SYLLABLE DEONI;Lo;0;L;;;;;N;;;;; +B35A;HANGUL SYLLABLE DEONH;Lo;0;L;;;;;N;;;;; +B35B;HANGUL SYLLABLE DEOD;Lo;0;L;;;;;N;;;;; +B35C;HANGUL SYLLABLE DEOL;Lo;0;L;;;;;N;;;;; +B35D;HANGUL SYLLABLE DEOLG;Lo;0;L;;;;;N;;;;; +B35E;HANGUL SYLLABLE DEOLM;Lo;0;L;;;;;N;;;;; +B35F;HANGUL SYLLABLE DEOLB;Lo;0;L;;;;;N;;;;; +B360;HANGUL SYLLABLE DEOLS;Lo;0;L;;;;;N;;;;; +B361;HANGUL SYLLABLE DEOLT;Lo;0;L;;;;;N;;;;; +B362;HANGUL SYLLABLE DEOLP;Lo;0;L;;;;;N;;;;; +B363;HANGUL SYLLABLE DEOLH;Lo;0;L;;;;;N;;;;; +B364;HANGUL SYLLABLE DEOM;Lo;0;L;;;;;N;;;;; +B365;HANGUL SYLLABLE DEOB;Lo;0;L;;;;;N;;;;; +B366;HANGUL SYLLABLE DEOBS;Lo;0;L;;;;;N;;;;; +B367;HANGUL SYLLABLE DEOS;Lo;0;L;;;;;N;;;;; +B368;HANGUL SYLLABLE DEOSS;Lo;0;L;;;;;N;;;;; +B369;HANGUL SYLLABLE DEONG;Lo;0;L;;;;;N;;;;; +B36A;HANGUL SYLLABLE DEOJ;Lo;0;L;;;;;N;;;;; +B36B;HANGUL SYLLABLE DEOC;Lo;0;L;;;;;N;;;;; +B36C;HANGUL SYLLABLE DEOK;Lo;0;L;;;;;N;;;;; +B36D;HANGUL SYLLABLE DEOT;Lo;0;L;;;;;N;;;;; +B36E;HANGUL SYLLABLE DEOP;Lo;0;L;;;;;N;;;;; +B36F;HANGUL SYLLABLE DEOH;Lo;0;L;;;;;N;;;;; +B370;HANGUL SYLLABLE DE;Lo;0;L;;;;;N;;;;; +B371;HANGUL SYLLABLE DEG;Lo;0;L;;;;;N;;;;; +B372;HANGUL SYLLABLE DEGG;Lo;0;L;;;;;N;;;;; +B373;HANGUL SYLLABLE DEGS;Lo;0;L;;;;;N;;;;; +B374;HANGUL SYLLABLE DEN;Lo;0;L;;;;;N;;;;; +B375;HANGUL SYLLABLE DENI;Lo;0;L;;;;;N;;;;; +B376;HANGUL SYLLABLE DENH;Lo;0;L;;;;;N;;;;; +B377;HANGUL SYLLABLE DED;Lo;0;L;;;;;N;;;;; +B378;HANGUL SYLLABLE DEL;Lo;0;L;;;;;N;;;;; +B379;HANGUL SYLLABLE DELG;Lo;0;L;;;;;N;;;;; +B37A;HANGUL SYLLABLE DELM;Lo;0;L;;;;;N;;;;; +B37B;HANGUL SYLLABLE DELB;Lo;0;L;;;;;N;;;;; +B37C;HANGUL SYLLABLE DELS;Lo;0;L;;;;;N;;;;; +B37D;HANGUL SYLLABLE DELT;Lo;0;L;;;;;N;;;;; +B37E;HANGUL SYLLABLE DELP;Lo;0;L;;;;;N;;;;; +B37F;HANGUL SYLLABLE DELH;Lo;0;L;;;;;N;;;;; +B380;HANGUL SYLLABLE DEM;Lo;0;L;;;;;N;;;;; +B381;HANGUL SYLLABLE DEB;Lo;0;L;;;;;N;;;;; +B382;HANGUL SYLLABLE DEBS;Lo;0;L;;;;;N;;;;; +B383;HANGUL SYLLABLE DES;Lo;0;L;;;;;N;;;;; +B384;HANGUL SYLLABLE DESS;Lo;0;L;;;;;N;;;;; +B385;HANGUL SYLLABLE DENG;Lo;0;L;;;;;N;;;;; +B386;HANGUL SYLLABLE DEJ;Lo;0;L;;;;;N;;;;; +B387;HANGUL SYLLABLE DEC;Lo;0;L;;;;;N;;;;; +B388;HANGUL SYLLABLE DEK;Lo;0;L;;;;;N;;;;; +B389;HANGUL SYLLABLE DET;Lo;0;L;;;;;N;;;;; +B38A;HANGUL SYLLABLE DEP;Lo;0;L;;;;;N;;;;; +B38B;HANGUL SYLLABLE DEH;Lo;0;L;;;;;N;;;;; +B38C;HANGUL SYLLABLE DYEO;Lo;0;L;;;;;N;;;;; +B38D;HANGUL SYLLABLE DYEOG;Lo;0;L;;;;;N;;;;; +B38E;HANGUL SYLLABLE DYEOGG;Lo;0;L;;;;;N;;;;; +B38F;HANGUL SYLLABLE DYEOGS;Lo;0;L;;;;;N;;;;; +B390;HANGUL SYLLABLE DYEON;Lo;0;L;;;;;N;;;;; +B391;HANGUL SYLLABLE DYEONI;Lo;0;L;;;;;N;;;;; +B392;HANGUL SYLLABLE DYEONH;Lo;0;L;;;;;N;;;;; +B393;HANGUL SYLLABLE DYEOD;Lo;0;L;;;;;N;;;;; +B394;HANGUL SYLLABLE DYEOL;Lo;0;L;;;;;N;;;;; +B395;HANGUL SYLLABLE DYEOLG;Lo;0;L;;;;;N;;;;; +B396;HANGUL SYLLABLE DYEOLM;Lo;0;L;;;;;N;;;;; +B397;HANGUL SYLLABLE DYEOLB;Lo;0;L;;;;;N;;;;; +B398;HANGUL SYLLABLE DYEOLS;Lo;0;L;;;;;N;;;;; +B399;HANGUL SYLLABLE DYEOLT;Lo;0;L;;;;;N;;;;; +B39A;HANGUL SYLLABLE DYEOLP;Lo;0;L;;;;;N;;;;; +B39B;HANGUL SYLLABLE DYEOLH;Lo;0;L;;;;;N;;;;; +B39C;HANGUL SYLLABLE DYEOM;Lo;0;L;;;;;N;;;;; +B39D;HANGUL SYLLABLE DYEOB;Lo;0;L;;;;;N;;;;; +B39E;HANGUL SYLLABLE DYEOBS;Lo;0;L;;;;;N;;;;; +B39F;HANGUL SYLLABLE DYEOS;Lo;0;L;;;;;N;;;;; +B3A0;HANGUL SYLLABLE DYEOSS;Lo;0;L;;;;;N;;;;; +B3A1;HANGUL SYLLABLE DYEONG;Lo;0;L;;;;;N;;;;; +B3A2;HANGUL SYLLABLE DYEOJ;Lo;0;L;;;;;N;;;;; +B3A3;HANGUL SYLLABLE DYEOC;Lo;0;L;;;;;N;;;;; +B3A4;HANGUL SYLLABLE DYEOK;Lo;0;L;;;;;N;;;;; +B3A5;HANGUL SYLLABLE DYEOT;Lo;0;L;;;;;N;;;;; +B3A6;HANGUL SYLLABLE DYEOP;Lo;0;L;;;;;N;;;;; +B3A7;HANGUL SYLLABLE DYEOH;Lo;0;L;;;;;N;;;;; +B3A8;HANGUL SYLLABLE DYE;Lo;0;L;;;;;N;;;;; +B3A9;HANGUL SYLLABLE DYEG;Lo;0;L;;;;;N;;;;; +B3AA;HANGUL SYLLABLE DYEGG;Lo;0;L;;;;;N;;;;; +B3AB;HANGUL SYLLABLE DYEGS;Lo;0;L;;;;;N;;;;; +B3AC;HANGUL SYLLABLE DYEN;Lo;0;L;;;;;N;;;;; +B3AD;HANGUL SYLLABLE DYENI;Lo;0;L;;;;;N;;;;; +B3AE;HANGUL SYLLABLE DYENH;Lo;0;L;;;;;N;;;;; +B3AF;HANGUL SYLLABLE DYED;Lo;0;L;;;;;N;;;;; +B3B0;HANGUL SYLLABLE DYEL;Lo;0;L;;;;;N;;;;; +B3B1;HANGUL SYLLABLE DYELG;Lo;0;L;;;;;N;;;;; +B3B2;HANGUL SYLLABLE DYELM;Lo;0;L;;;;;N;;;;; +B3B3;HANGUL SYLLABLE DYELB;Lo;0;L;;;;;N;;;;; +B3B4;HANGUL SYLLABLE DYELS;Lo;0;L;;;;;N;;;;; +B3B5;HANGUL SYLLABLE DYELT;Lo;0;L;;;;;N;;;;; +B3B6;HANGUL SYLLABLE DYELP;Lo;0;L;;;;;N;;;;; +B3B7;HANGUL SYLLABLE DYELH;Lo;0;L;;;;;N;;;;; +B3B8;HANGUL SYLLABLE DYEM;Lo;0;L;;;;;N;;;;; +B3B9;HANGUL SYLLABLE DYEB;Lo;0;L;;;;;N;;;;; +B3BA;HANGUL SYLLABLE DYEBS;Lo;0;L;;;;;N;;;;; +B3BB;HANGUL SYLLABLE DYES;Lo;0;L;;;;;N;;;;; +B3BC;HANGUL SYLLABLE DYESS;Lo;0;L;;;;;N;;;;; +B3BD;HANGUL SYLLABLE DYENG;Lo;0;L;;;;;N;;;;; +B3BE;HANGUL SYLLABLE DYEJ;Lo;0;L;;;;;N;;;;; +B3BF;HANGUL SYLLABLE DYEC;Lo;0;L;;;;;N;;;;; +B3C0;HANGUL SYLLABLE DYEK;Lo;0;L;;;;;N;;;;; +B3C1;HANGUL SYLLABLE DYET;Lo;0;L;;;;;N;;;;; +B3C2;HANGUL SYLLABLE DYEP;Lo;0;L;;;;;N;;;;; +B3C3;HANGUL SYLLABLE DYEH;Lo;0;L;;;;;N;;;;; +B3C4;HANGUL SYLLABLE DO;Lo;0;L;;;;;N;;;;; +B3C5;HANGUL SYLLABLE DOG;Lo;0;L;;;;;N;;;;; +B3C6;HANGUL SYLLABLE DOGG;Lo;0;L;;;;;N;;;;; +B3C7;HANGUL SYLLABLE DOGS;Lo;0;L;;;;;N;;;;; +B3C8;HANGUL SYLLABLE DON;Lo;0;L;;;;;N;;;;; +B3C9;HANGUL SYLLABLE DONI;Lo;0;L;;;;;N;;;;; +B3CA;HANGUL SYLLABLE DONH;Lo;0;L;;;;;N;;;;; +B3CB;HANGUL SYLLABLE DOD;Lo;0;L;;;;;N;;;;; +B3CC;HANGUL SYLLABLE DOL;Lo;0;L;;;;;N;;;;; +B3CD;HANGUL SYLLABLE DOLG;Lo;0;L;;;;;N;;;;; +B3CE;HANGUL SYLLABLE DOLM;Lo;0;L;;;;;N;;;;; +B3CF;HANGUL SYLLABLE DOLB;Lo;0;L;;;;;N;;;;; +B3D0;HANGUL SYLLABLE DOLS;Lo;0;L;;;;;N;;;;; +B3D1;HANGUL SYLLABLE DOLT;Lo;0;L;;;;;N;;;;; +B3D2;HANGUL SYLLABLE DOLP;Lo;0;L;;;;;N;;;;; +B3D3;HANGUL SYLLABLE DOLH;Lo;0;L;;;;;N;;;;; +B3D4;HANGUL SYLLABLE DOM;Lo;0;L;;;;;N;;;;; +B3D5;HANGUL SYLLABLE DOB;Lo;0;L;;;;;N;;;;; +B3D6;HANGUL SYLLABLE DOBS;Lo;0;L;;;;;N;;;;; +B3D7;HANGUL SYLLABLE DOS;Lo;0;L;;;;;N;;;;; +B3D8;HANGUL SYLLABLE DOSS;Lo;0;L;;;;;N;;;;; +B3D9;HANGUL SYLLABLE DONG;Lo;0;L;;;;;N;;;;; +B3DA;HANGUL SYLLABLE DOJ;Lo;0;L;;;;;N;;;;; +B3DB;HANGUL SYLLABLE DOC;Lo;0;L;;;;;N;;;;; +B3DC;HANGUL SYLLABLE DOK;Lo;0;L;;;;;N;;;;; +B3DD;HANGUL SYLLABLE DOT;Lo;0;L;;;;;N;;;;; +B3DE;HANGUL SYLLABLE DOP;Lo;0;L;;;;;N;;;;; +B3DF;HANGUL SYLLABLE DOH;Lo;0;L;;;;;N;;;;; +B3E0;HANGUL SYLLABLE DWA;Lo;0;L;;;;;N;;;;; +B3E1;HANGUL SYLLABLE DWAG;Lo;0;L;;;;;N;;;;; +B3E2;HANGUL SYLLABLE DWAGG;Lo;0;L;;;;;N;;;;; +B3E3;HANGUL SYLLABLE DWAGS;Lo;0;L;;;;;N;;;;; +B3E4;HANGUL SYLLABLE DWAN;Lo;0;L;;;;;N;;;;; +B3E5;HANGUL SYLLABLE DWANI;Lo;0;L;;;;;N;;;;; +B3E6;HANGUL SYLLABLE DWANH;Lo;0;L;;;;;N;;;;; +B3E7;HANGUL SYLLABLE DWAD;Lo;0;L;;;;;N;;;;; +B3E8;HANGUL SYLLABLE DWAL;Lo;0;L;;;;;N;;;;; +B3E9;HANGUL SYLLABLE DWALG;Lo;0;L;;;;;N;;;;; +B3EA;HANGUL SYLLABLE DWALM;Lo;0;L;;;;;N;;;;; +B3EB;HANGUL SYLLABLE DWALB;Lo;0;L;;;;;N;;;;; +B3EC;HANGUL SYLLABLE DWALS;Lo;0;L;;;;;N;;;;; +B3ED;HANGUL SYLLABLE DWALT;Lo;0;L;;;;;N;;;;; +B3EE;HANGUL SYLLABLE DWALP;Lo;0;L;;;;;N;;;;; +B3EF;HANGUL SYLLABLE DWALH;Lo;0;L;;;;;N;;;;; +B3F0;HANGUL SYLLABLE DWAM;Lo;0;L;;;;;N;;;;; +B3F1;HANGUL SYLLABLE DWAB;Lo;0;L;;;;;N;;;;; +B3F2;HANGUL SYLLABLE DWABS;Lo;0;L;;;;;N;;;;; +B3F3;HANGUL SYLLABLE DWAS;Lo;0;L;;;;;N;;;;; +B3F4;HANGUL SYLLABLE DWASS;Lo;0;L;;;;;N;;;;; +B3F5;HANGUL SYLLABLE DWANG;Lo;0;L;;;;;N;;;;; +B3F6;HANGUL SYLLABLE DWAJ;Lo;0;L;;;;;N;;;;; +B3F7;HANGUL SYLLABLE DWAC;Lo;0;L;;;;;N;;;;; +B3F8;HANGUL SYLLABLE DWAK;Lo;0;L;;;;;N;;;;; +B3F9;HANGUL SYLLABLE DWAT;Lo;0;L;;;;;N;;;;; +B3FA;HANGUL SYLLABLE DWAP;Lo;0;L;;;;;N;;;;; +B3FB;HANGUL SYLLABLE DWAH;Lo;0;L;;;;;N;;;;; +B3FC;HANGUL SYLLABLE DWAE;Lo;0;L;;;;;N;;;;; +B3FD;HANGUL SYLLABLE DWAEG;Lo;0;L;;;;;N;;;;; +B3FE;HANGUL SYLLABLE DWAEGG;Lo;0;L;;;;;N;;;;; +B3FF;HANGUL SYLLABLE DWAEGS;Lo;0;L;;;;;N;;;;; +B400;HANGUL SYLLABLE DWAEN;Lo;0;L;;;;;N;;;;; +B401;HANGUL SYLLABLE DWAENI;Lo;0;L;;;;;N;;;;; +B402;HANGUL SYLLABLE DWAENH;Lo;0;L;;;;;N;;;;; +B403;HANGUL SYLLABLE DWAED;Lo;0;L;;;;;N;;;;; +B404;HANGUL SYLLABLE DWAEL;Lo;0;L;;;;;N;;;;; +B405;HANGUL SYLLABLE DWAELG;Lo;0;L;;;;;N;;;;; +B406;HANGUL SYLLABLE DWAELM;Lo;0;L;;;;;N;;;;; +B407;HANGUL SYLLABLE DWAELB;Lo;0;L;;;;;N;;;;; +B408;HANGUL SYLLABLE DWAELS;Lo;0;L;;;;;N;;;;; +B409;HANGUL SYLLABLE DWAELT;Lo;0;L;;;;;N;;;;; +B40A;HANGUL SYLLABLE DWAELP;Lo;0;L;;;;;N;;;;; +B40B;HANGUL SYLLABLE DWAELH;Lo;0;L;;;;;N;;;;; +B40C;HANGUL SYLLABLE DWAEM;Lo;0;L;;;;;N;;;;; +B40D;HANGUL SYLLABLE DWAEB;Lo;0;L;;;;;N;;;;; +B40E;HANGUL SYLLABLE DWAEBS;Lo;0;L;;;;;N;;;;; +B40F;HANGUL SYLLABLE DWAES;Lo;0;L;;;;;N;;;;; +B410;HANGUL SYLLABLE DWAESS;Lo;0;L;;;;;N;;;;; +B411;HANGUL SYLLABLE DWAENG;Lo;0;L;;;;;N;;;;; +B412;HANGUL SYLLABLE DWAEJ;Lo;0;L;;;;;N;;;;; +B413;HANGUL SYLLABLE DWAEC;Lo;0;L;;;;;N;;;;; +B414;HANGUL SYLLABLE DWAEK;Lo;0;L;;;;;N;;;;; +B415;HANGUL SYLLABLE DWAET;Lo;0;L;;;;;N;;;;; +B416;HANGUL SYLLABLE DWAEP;Lo;0;L;;;;;N;;;;; +B417;HANGUL SYLLABLE DWAEH;Lo;0;L;;;;;N;;;;; +B418;HANGUL SYLLABLE DOE;Lo;0;L;;;;;N;;;;; +B419;HANGUL SYLLABLE DOEG;Lo;0;L;;;;;N;;;;; +B41A;HANGUL SYLLABLE DOEGG;Lo;0;L;;;;;N;;;;; +B41B;HANGUL SYLLABLE DOEGS;Lo;0;L;;;;;N;;;;; +B41C;HANGUL SYLLABLE DOEN;Lo;0;L;;;;;N;;;;; +B41D;HANGUL SYLLABLE DOENI;Lo;0;L;;;;;N;;;;; +B41E;HANGUL SYLLABLE DOENH;Lo;0;L;;;;;N;;;;; +B41F;HANGUL SYLLABLE DOED;Lo;0;L;;;;;N;;;;; +B420;HANGUL SYLLABLE DOEL;Lo;0;L;;;;;N;;;;; +B421;HANGUL SYLLABLE DOELG;Lo;0;L;;;;;N;;;;; +B422;HANGUL SYLLABLE DOELM;Lo;0;L;;;;;N;;;;; +B423;HANGUL SYLLABLE DOELB;Lo;0;L;;;;;N;;;;; +B424;HANGUL SYLLABLE DOELS;Lo;0;L;;;;;N;;;;; +B425;HANGUL SYLLABLE DOELT;Lo;0;L;;;;;N;;;;; +B426;HANGUL SYLLABLE DOELP;Lo;0;L;;;;;N;;;;; +B427;HANGUL SYLLABLE DOELH;Lo;0;L;;;;;N;;;;; +B428;HANGUL SYLLABLE DOEM;Lo;0;L;;;;;N;;;;; +B429;HANGUL SYLLABLE DOEB;Lo;0;L;;;;;N;;;;; +B42A;HANGUL SYLLABLE DOEBS;Lo;0;L;;;;;N;;;;; +B42B;HANGUL SYLLABLE DOES;Lo;0;L;;;;;N;;;;; +B42C;HANGUL SYLLABLE DOESS;Lo;0;L;;;;;N;;;;; +B42D;HANGUL SYLLABLE DOENG;Lo;0;L;;;;;N;;;;; +B42E;HANGUL SYLLABLE DOEJ;Lo;0;L;;;;;N;;;;; +B42F;HANGUL SYLLABLE DOEC;Lo;0;L;;;;;N;;;;; +B430;HANGUL SYLLABLE DOEK;Lo;0;L;;;;;N;;;;; +B431;HANGUL SYLLABLE DOET;Lo;0;L;;;;;N;;;;; +B432;HANGUL SYLLABLE DOEP;Lo;0;L;;;;;N;;;;; +B433;HANGUL SYLLABLE DOEH;Lo;0;L;;;;;N;;;;; +B434;HANGUL SYLLABLE DYO;Lo;0;L;;;;;N;;;;; +B435;HANGUL SYLLABLE DYOG;Lo;0;L;;;;;N;;;;; +B436;HANGUL SYLLABLE DYOGG;Lo;0;L;;;;;N;;;;; +B437;HANGUL SYLLABLE DYOGS;Lo;0;L;;;;;N;;;;; +B438;HANGUL SYLLABLE DYON;Lo;0;L;;;;;N;;;;; +B439;HANGUL SYLLABLE DYONI;Lo;0;L;;;;;N;;;;; +B43A;HANGUL SYLLABLE DYONH;Lo;0;L;;;;;N;;;;; +B43B;HANGUL SYLLABLE DYOD;Lo;0;L;;;;;N;;;;; +B43C;HANGUL SYLLABLE DYOL;Lo;0;L;;;;;N;;;;; +B43D;HANGUL SYLLABLE DYOLG;Lo;0;L;;;;;N;;;;; +B43E;HANGUL SYLLABLE DYOLM;Lo;0;L;;;;;N;;;;; +B43F;HANGUL SYLLABLE DYOLB;Lo;0;L;;;;;N;;;;; +B440;HANGUL SYLLABLE DYOLS;Lo;0;L;;;;;N;;;;; +B441;HANGUL SYLLABLE DYOLT;Lo;0;L;;;;;N;;;;; +B442;HANGUL SYLLABLE DYOLP;Lo;0;L;;;;;N;;;;; +B443;HANGUL SYLLABLE DYOLH;Lo;0;L;;;;;N;;;;; +B444;HANGUL SYLLABLE DYOM;Lo;0;L;;;;;N;;;;; +B445;HANGUL SYLLABLE DYOB;Lo;0;L;;;;;N;;;;; +B446;HANGUL SYLLABLE DYOBS;Lo;0;L;;;;;N;;;;; +B447;HANGUL SYLLABLE DYOS;Lo;0;L;;;;;N;;;;; +B448;HANGUL SYLLABLE DYOSS;Lo;0;L;;;;;N;;;;; +B449;HANGUL SYLLABLE DYONG;Lo;0;L;;;;;N;;;;; +B44A;HANGUL SYLLABLE DYOJ;Lo;0;L;;;;;N;;;;; +B44B;HANGUL SYLLABLE DYOC;Lo;0;L;;;;;N;;;;; +B44C;HANGUL SYLLABLE DYOK;Lo;0;L;;;;;N;;;;; +B44D;HANGUL SYLLABLE DYOT;Lo;0;L;;;;;N;;;;; +B44E;HANGUL SYLLABLE DYOP;Lo;0;L;;;;;N;;;;; +B44F;HANGUL SYLLABLE DYOH;Lo;0;L;;;;;N;;;;; +B450;HANGUL SYLLABLE DU;Lo;0;L;;;;;N;;;;; +B451;HANGUL SYLLABLE DUG;Lo;0;L;;;;;N;;;;; +B452;HANGUL SYLLABLE DUGG;Lo;0;L;;;;;N;;;;; +B453;HANGUL SYLLABLE DUGS;Lo;0;L;;;;;N;;;;; +B454;HANGUL SYLLABLE DUN;Lo;0;L;;;;;N;;;;; +B455;HANGUL SYLLABLE DUNI;Lo;0;L;;;;;N;;;;; +B456;HANGUL SYLLABLE DUNH;Lo;0;L;;;;;N;;;;; +B457;HANGUL SYLLABLE DUD;Lo;0;L;;;;;N;;;;; +B458;HANGUL SYLLABLE DUL;Lo;0;L;;;;;N;;;;; +B459;HANGUL SYLLABLE DULG;Lo;0;L;;;;;N;;;;; +B45A;HANGUL SYLLABLE DULM;Lo;0;L;;;;;N;;;;; +B45B;HANGUL SYLLABLE DULB;Lo;0;L;;;;;N;;;;; +B45C;HANGUL SYLLABLE DULS;Lo;0;L;;;;;N;;;;; +B45D;HANGUL SYLLABLE DULT;Lo;0;L;;;;;N;;;;; +B45E;HANGUL SYLLABLE DULP;Lo;0;L;;;;;N;;;;; +B45F;HANGUL SYLLABLE DULH;Lo;0;L;;;;;N;;;;; +B460;HANGUL SYLLABLE DUM;Lo;0;L;;;;;N;;;;; +B461;HANGUL SYLLABLE DUB;Lo;0;L;;;;;N;;;;; +B462;HANGUL SYLLABLE DUBS;Lo;0;L;;;;;N;;;;; +B463;HANGUL SYLLABLE DUS;Lo;0;L;;;;;N;;;;; +B464;HANGUL SYLLABLE DUSS;Lo;0;L;;;;;N;;;;; +B465;HANGUL SYLLABLE DUNG;Lo;0;L;;;;;N;;;;; +B466;HANGUL SYLLABLE DUJ;Lo;0;L;;;;;N;;;;; +B467;HANGUL SYLLABLE DUC;Lo;0;L;;;;;N;;;;; +B468;HANGUL SYLLABLE DUK;Lo;0;L;;;;;N;;;;; +B469;HANGUL SYLLABLE DUT;Lo;0;L;;;;;N;;;;; +B46A;HANGUL SYLLABLE DUP;Lo;0;L;;;;;N;;;;; +B46B;HANGUL SYLLABLE DUH;Lo;0;L;;;;;N;;;;; +B46C;HANGUL SYLLABLE DWEO;Lo;0;L;;;;;N;;;;; +B46D;HANGUL SYLLABLE DWEOG;Lo;0;L;;;;;N;;;;; +B46E;HANGUL SYLLABLE DWEOGG;Lo;0;L;;;;;N;;;;; +B46F;HANGUL SYLLABLE DWEOGS;Lo;0;L;;;;;N;;;;; +B470;HANGUL SYLLABLE DWEON;Lo;0;L;;;;;N;;;;; +B471;HANGUL SYLLABLE DWEONI;Lo;0;L;;;;;N;;;;; +B472;HANGUL SYLLABLE DWEONH;Lo;0;L;;;;;N;;;;; +B473;HANGUL SYLLABLE DWEOD;Lo;0;L;;;;;N;;;;; +B474;HANGUL SYLLABLE DWEOL;Lo;0;L;;;;;N;;;;; +B475;HANGUL SYLLABLE DWEOLG;Lo;0;L;;;;;N;;;;; +B476;HANGUL SYLLABLE DWEOLM;Lo;0;L;;;;;N;;;;; +B477;HANGUL SYLLABLE DWEOLB;Lo;0;L;;;;;N;;;;; +B478;HANGUL SYLLABLE DWEOLS;Lo;0;L;;;;;N;;;;; +B479;HANGUL SYLLABLE DWEOLT;Lo;0;L;;;;;N;;;;; +B47A;HANGUL SYLLABLE DWEOLP;Lo;0;L;;;;;N;;;;; +B47B;HANGUL SYLLABLE DWEOLH;Lo;0;L;;;;;N;;;;; +B47C;HANGUL SYLLABLE DWEOM;Lo;0;L;;;;;N;;;;; +B47D;HANGUL SYLLABLE DWEOB;Lo;0;L;;;;;N;;;;; +B47E;HANGUL SYLLABLE DWEOBS;Lo;0;L;;;;;N;;;;; +B47F;HANGUL SYLLABLE DWEOS;Lo;0;L;;;;;N;;;;; +B480;HANGUL SYLLABLE DWEOSS;Lo;0;L;;;;;N;;;;; +B481;HANGUL SYLLABLE DWEONG;Lo;0;L;;;;;N;;;;; +B482;HANGUL SYLLABLE DWEOJ;Lo;0;L;;;;;N;;;;; +B483;HANGUL SYLLABLE DWEOC;Lo;0;L;;;;;N;;;;; +B484;HANGUL SYLLABLE DWEOK;Lo;0;L;;;;;N;;;;; +B485;HANGUL SYLLABLE DWEOT;Lo;0;L;;;;;N;;;;; +B486;HANGUL SYLLABLE DWEOP;Lo;0;L;;;;;N;;;;; +B487;HANGUL SYLLABLE DWEOH;Lo;0;L;;;;;N;;;;; +B488;HANGUL SYLLABLE DWE;Lo;0;L;;;;;N;;;;; +B489;HANGUL SYLLABLE DWEG;Lo;0;L;;;;;N;;;;; +B48A;HANGUL SYLLABLE DWEGG;Lo;0;L;;;;;N;;;;; +B48B;HANGUL SYLLABLE DWEGS;Lo;0;L;;;;;N;;;;; +B48C;HANGUL SYLLABLE DWEN;Lo;0;L;;;;;N;;;;; +B48D;HANGUL SYLLABLE DWENI;Lo;0;L;;;;;N;;;;; +B48E;HANGUL SYLLABLE DWENH;Lo;0;L;;;;;N;;;;; +B48F;HANGUL SYLLABLE DWED;Lo;0;L;;;;;N;;;;; +B490;HANGUL SYLLABLE DWEL;Lo;0;L;;;;;N;;;;; +B491;HANGUL SYLLABLE DWELG;Lo;0;L;;;;;N;;;;; +B492;HANGUL SYLLABLE DWELM;Lo;0;L;;;;;N;;;;; +B493;HANGUL SYLLABLE DWELB;Lo;0;L;;;;;N;;;;; +B494;HANGUL SYLLABLE DWELS;Lo;0;L;;;;;N;;;;; +B495;HANGUL SYLLABLE DWELT;Lo;0;L;;;;;N;;;;; +B496;HANGUL SYLLABLE DWELP;Lo;0;L;;;;;N;;;;; +B497;HANGUL SYLLABLE DWELH;Lo;0;L;;;;;N;;;;; +B498;HANGUL SYLLABLE DWEM;Lo;0;L;;;;;N;;;;; +B499;HANGUL SYLLABLE DWEB;Lo;0;L;;;;;N;;;;; +B49A;HANGUL SYLLABLE DWEBS;Lo;0;L;;;;;N;;;;; +B49B;HANGUL SYLLABLE DWES;Lo;0;L;;;;;N;;;;; +B49C;HANGUL SYLLABLE DWESS;Lo;0;L;;;;;N;;;;; +B49D;HANGUL SYLLABLE DWENG;Lo;0;L;;;;;N;;;;; +B49E;HANGUL SYLLABLE DWEJ;Lo;0;L;;;;;N;;;;; +B49F;HANGUL SYLLABLE DWEC;Lo;0;L;;;;;N;;;;; +B4A0;HANGUL SYLLABLE DWEK;Lo;0;L;;;;;N;;;;; +B4A1;HANGUL SYLLABLE DWET;Lo;0;L;;;;;N;;;;; +B4A2;HANGUL SYLLABLE DWEP;Lo;0;L;;;;;N;;;;; +B4A3;HANGUL SYLLABLE DWEH;Lo;0;L;;;;;N;;;;; +B4A4;HANGUL SYLLABLE DWI;Lo;0;L;;;;;N;;;;; +B4A5;HANGUL SYLLABLE DWIG;Lo;0;L;;;;;N;;;;; +B4A6;HANGUL SYLLABLE DWIGG;Lo;0;L;;;;;N;;;;; +B4A7;HANGUL SYLLABLE DWIGS;Lo;0;L;;;;;N;;;;; +B4A8;HANGUL SYLLABLE DWIN;Lo;0;L;;;;;N;;;;; +B4A9;HANGUL SYLLABLE DWINI;Lo;0;L;;;;;N;;;;; +B4AA;HANGUL SYLLABLE DWINH;Lo;0;L;;;;;N;;;;; +B4AB;HANGUL SYLLABLE DWID;Lo;0;L;;;;;N;;;;; +B4AC;HANGUL SYLLABLE DWIL;Lo;0;L;;;;;N;;;;; +B4AD;HANGUL SYLLABLE DWILG;Lo;0;L;;;;;N;;;;; +B4AE;HANGUL SYLLABLE DWILM;Lo;0;L;;;;;N;;;;; +B4AF;HANGUL SYLLABLE DWILB;Lo;0;L;;;;;N;;;;; +B4B0;HANGUL SYLLABLE DWILS;Lo;0;L;;;;;N;;;;; +B4B1;HANGUL SYLLABLE DWILT;Lo;0;L;;;;;N;;;;; +B4B2;HANGUL SYLLABLE DWILP;Lo;0;L;;;;;N;;;;; +B4B3;HANGUL SYLLABLE DWILH;Lo;0;L;;;;;N;;;;; +B4B4;HANGUL SYLLABLE DWIM;Lo;0;L;;;;;N;;;;; +B4B5;HANGUL SYLLABLE DWIB;Lo;0;L;;;;;N;;;;; +B4B6;HANGUL SYLLABLE DWIBS;Lo;0;L;;;;;N;;;;; +B4B7;HANGUL SYLLABLE DWIS;Lo;0;L;;;;;N;;;;; +B4B8;HANGUL SYLLABLE DWISS;Lo;0;L;;;;;N;;;;; +B4B9;HANGUL SYLLABLE DWING;Lo;0;L;;;;;N;;;;; +B4BA;HANGUL SYLLABLE DWIJ;Lo;0;L;;;;;N;;;;; +B4BB;HANGUL SYLLABLE DWIC;Lo;0;L;;;;;N;;;;; +B4BC;HANGUL SYLLABLE DWIK;Lo;0;L;;;;;N;;;;; +B4BD;HANGUL SYLLABLE DWIT;Lo;0;L;;;;;N;;;;; +B4BE;HANGUL SYLLABLE DWIP;Lo;0;L;;;;;N;;;;; +B4BF;HANGUL SYLLABLE DWIH;Lo;0;L;;;;;N;;;;; +B4C0;HANGUL SYLLABLE DYU;Lo;0;L;;;;;N;;;;; +B4C1;HANGUL SYLLABLE DYUG;Lo;0;L;;;;;N;;;;; +B4C2;HANGUL SYLLABLE DYUGG;Lo;0;L;;;;;N;;;;; +B4C3;HANGUL SYLLABLE DYUGS;Lo;0;L;;;;;N;;;;; +B4C4;HANGUL SYLLABLE DYUN;Lo;0;L;;;;;N;;;;; +B4C5;HANGUL SYLLABLE DYUNI;Lo;0;L;;;;;N;;;;; +B4C6;HANGUL SYLLABLE DYUNH;Lo;0;L;;;;;N;;;;; +B4C7;HANGUL SYLLABLE DYUD;Lo;0;L;;;;;N;;;;; +B4C8;HANGUL SYLLABLE DYUL;Lo;0;L;;;;;N;;;;; +B4C9;HANGUL SYLLABLE DYULG;Lo;0;L;;;;;N;;;;; +B4CA;HANGUL SYLLABLE DYULM;Lo;0;L;;;;;N;;;;; +B4CB;HANGUL SYLLABLE DYULB;Lo;0;L;;;;;N;;;;; +B4CC;HANGUL SYLLABLE DYULS;Lo;0;L;;;;;N;;;;; +B4CD;HANGUL SYLLABLE DYULT;Lo;0;L;;;;;N;;;;; +B4CE;HANGUL SYLLABLE DYULP;Lo;0;L;;;;;N;;;;; +B4CF;HANGUL SYLLABLE DYULH;Lo;0;L;;;;;N;;;;; +B4D0;HANGUL SYLLABLE DYUM;Lo;0;L;;;;;N;;;;; +B4D1;HANGUL SYLLABLE DYUB;Lo;0;L;;;;;N;;;;; +B4D2;HANGUL SYLLABLE DYUBS;Lo;0;L;;;;;N;;;;; +B4D3;HANGUL SYLLABLE DYUS;Lo;0;L;;;;;N;;;;; +B4D4;HANGUL SYLLABLE DYUSS;Lo;0;L;;;;;N;;;;; +B4D5;HANGUL SYLLABLE DYUNG;Lo;0;L;;;;;N;;;;; +B4D6;HANGUL SYLLABLE DYUJ;Lo;0;L;;;;;N;;;;; +B4D7;HANGUL SYLLABLE DYUC;Lo;0;L;;;;;N;;;;; +B4D8;HANGUL SYLLABLE DYUK;Lo;0;L;;;;;N;;;;; +B4D9;HANGUL SYLLABLE DYUT;Lo;0;L;;;;;N;;;;; +B4DA;HANGUL SYLLABLE DYUP;Lo;0;L;;;;;N;;;;; +B4DB;HANGUL SYLLABLE DYUH;Lo;0;L;;;;;N;;;;; +B4DC;HANGUL SYLLABLE DEU;Lo;0;L;;;;;N;;;;; +B4DD;HANGUL SYLLABLE DEUG;Lo;0;L;;;;;N;;;;; +B4DE;HANGUL SYLLABLE DEUGG;Lo;0;L;;;;;N;;;;; +B4DF;HANGUL SYLLABLE DEUGS;Lo;0;L;;;;;N;;;;; +B4E0;HANGUL SYLLABLE DEUN;Lo;0;L;;;;;N;;;;; +B4E1;HANGUL SYLLABLE DEUNI;Lo;0;L;;;;;N;;;;; +B4E2;HANGUL SYLLABLE DEUNH;Lo;0;L;;;;;N;;;;; +B4E3;HANGUL SYLLABLE DEUD;Lo;0;L;;;;;N;;;;; +B4E4;HANGUL SYLLABLE DEUL;Lo;0;L;;;;;N;;;;; +B4E5;HANGUL SYLLABLE DEULG;Lo;0;L;;;;;N;;;;; +B4E6;HANGUL SYLLABLE DEULM;Lo;0;L;;;;;N;;;;; +B4E7;HANGUL SYLLABLE DEULB;Lo;0;L;;;;;N;;;;; +B4E8;HANGUL SYLLABLE DEULS;Lo;0;L;;;;;N;;;;; +B4E9;HANGUL SYLLABLE DEULT;Lo;0;L;;;;;N;;;;; +B4EA;HANGUL SYLLABLE DEULP;Lo;0;L;;;;;N;;;;; +B4EB;HANGUL SYLLABLE DEULH;Lo;0;L;;;;;N;;;;; +B4EC;HANGUL SYLLABLE DEUM;Lo;0;L;;;;;N;;;;; +B4ED;HANGUL SYLLABLE DEUB;Lo;0;L;;;;;N;;;;; +B4EE;HANGUL SYLLABLE DEUBS;Lo;0;L;;;;;N;;;;; +B4EF;HANGUL SYLLABLE DEUS;Lo;0;L;;;;;N;;;;; +B4F0;HANGUL SYLLABLE DEUSS;Lo;0;L;;;;;N;;;;; +B4F1;HANGUL SYLLABLE DEUNG;Lo;0;L;;;;;N;;;;; +B4F2;HANGUL SYLLABLE DEUJ;Lo;0;L;;;;;N;;;;; +B4F3;HANGUL SYLLABLE DEUC;Lo;0;L;;;;;N;;;;; +B4F4;HANGUL SYLLABLE DEUK;Lo;0;L;;;;;N;;;;; +B4F5;HANGUL SYLLABLE DEUT;Lo;0;L;;;;;N;;;;; +B4F6;HANGUL SYLLABLE DEUP;Lo;0;L;;;;;N;;;;; +B4F7;HANGUL SYLLABLE DEUH;Lo;0;L;;;;;N;;;;; +B4F8;HANGUL SYLLABLE DYI;Lo;0;L;;;;;N;;;;; +B4F9;HANGUL SYLLABLE DYIG;Lo;0;L;;;;;N;;;;; +B4FA;HANGUL SYLLABLE DYIGG;Lo;0;L;;;;;N;;;;; +B4FB;HANGUL SYLLABLE DYIGS;Lo;0;L;;;;;N;;;;; +B4FC;HANGUL SYLLABLE DYIN;Lo;0;L;;;;;N;;;;; +B4FD;HANGUL SYLLABLE DYINI;Lo;0;L;;;;;N;;;;; +B4FE;HANGUL SYLLABLE DYINH;Lo;0;L;;;;;N;;;;; +B4FF;HANGUL SYLLABLE DYID;Lo;0;L;;;;;N;;;;; +B500;HANGUL SYLLABLE DYIL;Lo;0;L;;;;;N;;;;; +B501;HANGUL SYLLABLE DYILG;Lo;0;L;;;;;N;;;;; +B502;HANGUL SYLLABLE DYILM;Lo;0;L;;;;;N;;;;; +B503;HANGUL SYLLABLE DYILB;Lo;0;L;;;;;N;;;;; +B504;HANGUL SYLLABLE DYILS;Lo;0;L;;;;;N;;;;; +B505;HANGUL SYLLABLE DYILT;Lo;0;L;;;;;N;;;;; +B506;HANGUL SYLLABLE DYILP;Lo;0;L;;;;;N;;;;; +B507;HANGUL SYLLABLE DYILH;Lo;0;L;;;;;N;;;;; +B508;HANGUL SYLLABLE DYIM;Lo;0;L;;;;;N;;;;; +B509;HANGUL SYLLABLE DYIB;Lo;0;L;;;;;N;;;;; +B50A;HANGUL SYLLABLE DYIBS;Lo;0;L;;;;;N;;;;; +B50B;HANGUL SYLLABLE DYIS;Lo;0;L;;;;;N;;;;; +B50C;HANGUL SYLLABLE DYISS;Lo;0;L;;;;;N;;;;; +B50D;HANGUL SYLLABLE DYING;Lo;0;L;;;;;N;;;;; +B50E;HANGUL SYLLABLE DYIJ;Lo;0;L;;;;;N;;;;; +B50F;HANGUL SYLLABLE DYIC;Lo;0;L;;;;;N;;;;; +B510;HANGUL SYLLABLE DYIK;Lo;0;L;;;;;N;;;;; +B511;HANGUL SYLLABLE DYIT;Lo;0;L;;;;;N;;;;; +B512;HANGUL SYLLABLE DYIP;Lo;0;L;;;;;N;;;;; +B513;HANGUL SYLLABLE DYIH;Lo;0;L;;;;;N;;;;; +B514;HANGUL SYLLABLE DI;Lo;0;L;;;;;N;;;;; +B515;HANGUL SYLLABLE DIG;Lo;0;L;;;;;N;;;;; +B516;HANGUL SYLLABLE DIGG;Lo;0;L;;;;;N;;;;; +B517;HANGUL SYLLABLE DIGS;Lo;0;L;;;;;N;;;;; +B518;HANGUL SYLLABLE DIN;Lo;0;L;;;;;N;;;;; +B519;HANGUL SYLLABLE DINI;Lo;0;L;;;;;N;;;;; +B51A;HANGUL SYLLABLE DINH;Lo;0;L;;;;;N;;;;; +B51B;HANGUL SYLLABLE DID;Lo;0;L;;;;;N;;;;; +B51C;HANGUL SYLLABLE DIL;Lo;0;L;;;;;N;;;;; +B51D;HANGUL SYLLABLE DILG;Lo;0;L;;;;;N;;;;; +B51E;HANGUL SYLLABLE DILM;Lo;0;L;;;;;N;;;;; +B51F;HANGUL SYLLABLE DILB;Lo;0;L;;;;;N;;;;; +B520;HANGUL SYLLABLE DILS;Lo;0;L;;;;;N;;;;; +B521;HANGUL SYLLABLE DILT;Lo;0;L;;;;;N;;;;; +B522;HANGUL SYLLABLE DILP;Lo;0;L;;;;;N;;;;; +B523;HANGUL SYLLABLE DILH;Lo;0;L;;;;;N;;;;; +B524;HANGUL SYLLABLE DIM;Lo;0;L;;;;;N;;;;; +B525;HANGUL SYLLABLE DIB;Lo;0;L;;;;;N;;;;; +B526;HANGUL SYLLABLE DIBS;Lo;0;L;;;;;N;;;;; +B527;HANGUL SYLLABLE DIS;Lo;0;L;;;;;N;;;;; +B528;HANGUL SYLLABLE DISS;Lo;0;L;;;;;N;;;;; +B529;HANGUL SYLLABLE DING;Lo;0;L;;;;;N;;;;; +B52A;HANGUL SYLLABLE DIJ;Lo;0;L;;;;;N;;;;; +B52B;HANGUL SYLLABLE DIC;Lo;0;L;;;;;N;;;;; +B52C;HANGUL SYLLABLE DIK;Lo;0;L;;;;;N;;;;; +B52D;HANGUL SYLLABLE DIT;Lo;0;L;;;;;N;;;;; +B52E;HANGUL SYLLABLE DIP;Lo;0;L;;;;;N;;;;; +B52F;HANGUL SYLLABLE DIH;Lo;0;L;;;;;N;;;;; +B530;HANGUL SYLLABLE DDA;Lo;0;L;;;;;N;;;;; +B531;HANGUL SYLLABLE DDAG;Lo;0;L;;;;;N;;;;; +B532;HANGUL SYLLABLE DDAGG;Lo;0;L;;;;;N;;;;; +B533;HANGUL SYLLABLE DDAGS;Lo;0;L;;;;;N;;;;; +B534;HANGUL SYLLABLE DDAN;Lo;0;L;;;;;N;;;;; +B535;HANGUL SYLLABLE DDANI;Lo;0;L;;;;;N;;;;; +B536;HANGUL SYLLABLE DDANH;Lo;0;L;;;;;N;;;;; +B537;HANGUL SYLLABLE DDAD;Lo;0;L;;;;;N;;;;; +B538;HANGUL SYLLABLE DDAL;Lo;0;L;;;;;N;;;;; +B539;HANGUL SYLLABLE DDALG;Lo;0;L;;;;;N;;;;; +B53A;HANGUL SYLLABLE DDALM;Lo;0;L;;;;;N;;;;; +B53B;HANGUL SYLLABLE DDALB;Lo;0;L;;;;;N;;;;; +B53C;HANGUL SYLLABLE DDALS;Lo;0;L;;;;;N;;;;; +B53D;HANGUL SYLLABLE DDALT;Lo;0;L;;;;;N;;;;; +B53E;HANGUL SYLLABLE DDALP;Lo;0;L;;;;;N;;;;; +B53F;HANGUL SYLLABLE DDALH;Lo;0;L;;;;;N;;;;; +B540;HANGUL SYLLABLE DDAM;Lo;0;L;;;;;N;;;;; +B541;HANGUL SYLLABLE DDAB;Lo;0;L;;;;;N;;;;; +B542;HANGUL SYLLABLE DDABS;Lo;0;L;;;;;N;;;;; +B543;HANGUL SYLLABLE DDAS;Lo;0;L;;;;;N;;;;; +B544;HANGUL SYLLABLE DDASS;Lo;0;L;;;;;N;;;;; +B545;HANGUL SYLLABLE DDANG;Lo;0;L;;;;;N;;;;; +B546;HANGUL SYLLABLE DDAJ;Lo;0;L;;;;;N;;;;; +B547;HANGUL SYLLABLE DDAC;Lo;0;L;;;;;N;;;;; +B548;HANGUL SYLLABLE DDAK;Lo;0;L;;;;;N;;;;; +B549;HANGUL SYLLABLE DDAT;Lo;0;L;;;;;N;;;;; +B54A;HANGUL SYLLABLE DDAP;Lo;0;L;;;;;N;;;;; +B54B;HANGUL SYLLABLE DDAH;Lo;0;L;;;;;N;;;;; +B54C;HANGUL SYLLABLE DDAE;Lo;0;L;;;;;N;;;;; +B54D;HANGUL SYLLABLE DDAEG;Lo;0;L;;;;;N;;;;; +B54E;HANGUL SYLLABLE DDAEGG;Lo;0;L;;;;;N;;;;; +B54F;HANGUL SYLLABLE DDAEGS;Lo;0;L;;;;;N;;;;; +B550;HANGUL SYLLABLE DDAEN;Lo;0;L;;;;;N;;;;; +B551;HANGUL SYLLABLE DDAENI;Lo;0;L;;;;;N;;;;; +B552;HANGUL SYLLABLE DDAENH;Lo;0;L;;;;;N;;;;; +B553;HANGUL SYLLABLE DDAED;Lo;0;L;;;;;N;;;;; +B554;HANGUL SYLLABLE DDAEL;Lo;0;L;;;;;N;;;;; +B555;HANGUL SYLLABLE DDAELG;Lo;0;L;;;;;N;;;;; +B556;HANGUL SYLLABLE DDAELM;Lo;0;L;;;;;N;;;;; +B557;HANGUL SYLLABLE DDAELB;Lo;0;L;;;;;N;;;;; +B558;HANGUL SYLLABLE DDAELS;Lo;0;L;;;;;N;;;;; +B559;HANGUL SYLLABLE DDAELT;Lo;0;L;;;;;N;;;;; +B55A;HANGUL SYLLABLE DDAELP;Lo;0;L;;;;;N;;;;; +B55B;HANGUL SYLLABLE DDAELH;Lo;0;L;;;;;N;;;;; +B55C;HANGUL SYLLABLE DDAEM;Lo;0;L;;;;;N;;;;; +B55D;HANGUL SYLLABLE DDAEB;Lo;0;L;;;;;N;;;;; +B55E;HANGUL SYLLABLE DDAEBS;Lo;0;L;;;;;N;;;;; +B55F;HANGUL SYLLABLE DDAES;Lo;0;L;;;;;N;;;;; +B560;HANGUL SYLLABLE DDAESS;Lo;0;L;;;;;N;;;;; +B561;HANGUL SYLLABLE DDAENG;Lo;0;L;;;;;N;;;;; +B562;HANGUL SYLLABLE DDAEJ;Lo;0;L;;;;;N;;;;; +B563;HANGUL SYLLABLE DDAEC;Lo;0;L;;;;;N;;;;; +B564;HANGUL SYLLABLE DDAEK;Lo;0;L;;;;;N;;;;; +B565;HANGUL SYLLABLE DDAET;Lo;0;L;;;;;N;;;;; +B566;HANGUL SYLLABLE DDAEP;Lo;0;L;;;;;N;;;;; +B567;HANGUL SYLLABLE DDAEH;Lo;0;L;;;;;N;;;;; +B568;HANGUL SYLLABLE DDYA;Lo;0;L;;;;;N;;;;; +B569;HANGUL SYLLABLE DDYAG;Lo;0;L;;;;;N;;;;; +B56A;HANGUL SYLLABLE DDYAGG;Lo;0;L;;;;;N;;;;; +B56B;HANGUL SYLLABLE DDYAGS;Lo;0;L;;;;;N;;;;; +B56C;HANGUL SYLLABLE DDYAN;Lo;0;L;;;;;N;;;;; +B56D;HANGUL SYLLABLE DDYANI;Lo;0;L;;;;;N;;;;; +B56E;HANGUL SYLLABLE DDYANH;Lo;0;L;;;;;N;;;;; +B56F;HANGUL SYLLABLE DDYAD;Lo;0;L;;;;;N;;;;; +B570;HANGUL SYLLABLE DDYAL;Lo;0;L;;;;;N;;;;; +B571;HANGUL SYLLABLE DDYALG;Lo;0;L;;;;;N;;;;; +B572;HANGUL SYLLABLE DDYALM;Lo;0;L;;;;;N;;;;; +B573;HANGUL SYLLABLE DDYALB;Lo;0;L;;;;;N;;;;; +B574;HANGUL SYLLABLE DDYALS;Lo;0;L;;;;;N;;;;; +B575;HANGUL SYLLABLE DDYALT;Lo;0;L;;;;;N;;;;; +B576;HANGUL SYLLABLE DDYALP;Lo;0;L;;;;;N;;;;; +B577;HANGUL SYLLABLE DDYALH;Lo;0;L;;;;;N;;;;; +B578;HANGUL SYLLABLE DDYAM;Lo;0;L;;;;;N;;;;; +B579;HANGUL SYLLABLE DDYAB;Lo;0;L;;;;;N;;;;; +B57A;HANGUL SYLLABLE DDYABS;Lo;0;L;;;;;N;;;;; +B57B;HANGUL SYLLABLE DDYAS;Lo;0;L;;;;;N;;;;; +B57C;HANGUL SYLLABLE DDYASS;Lo;0;L;;;;;N;;;;; +B57D;HANGUL SYLLABLE DDYANG;Lo;0;L;;;;;N;;;;; +B57E;HANGUL SYLLABLE DDYAJ;Lo;0;L;;;;;N;;;;; +B57F;HANGUL SYLLABLE DDYAC;Lo;0;L;;;;;N;;;;; +B580;HANGUL SYLLABLE DDYAK;Lo;0;L;;;;;N;;;;; +B581;HANGUL SYLLABLE DDYAT;Lo;0;L;;;;;N;;;;; +B582;HANGUL SYLLABLE DDYAP;Lo;0;L;;;;;N;;;;; +B583;HANGUL SYLLABLE DDYAH;Lo;0;L;;;;;N;;;;; +B584;HANGUL SYLLABLE DDYAE;Lo;0;L;;;;;N;;;;; +B585;HANGUL SYLLABLE DDYAEG;Lo;0;L;;;;;N;;;;; +B586;HANGUL SYLLABLE DDYAEGG;Lo;0;L;;;;;N;;;;; +B587;HANGUL SYLLABLE DDYAEGS;Lo;0;L;;;;;N;;;;; +B588;HANGUL SYLLABLE DDYAEN;Lo;0;L;;;;;N;;;;; +B589;HANGUL SYLLABLE DDYAENI;Lo;0;L;;;;;N;;;;; +B58A;HANGUL SYLLABLE DDYAENH;Lo;0;L;;;;;N;;;;; +B58B;HANGUL SYLLABLE DDYAED;Lo;0;L;;;;;N;;;;; +B58C;HANGUL SYLLABLE DDYAEL;Lo;0;L;;;;;N;;;;; +B58D;HANGUL SYLLABLE DDYAELG;Lo;0;L;;;;;N;;;;; +B58E;HANGUL SYLLABLE DDYAELM;Lo;0;L;;;;;N;;;;; +B58F;HANGUL SYLLABLE DDYAELB;Lo;0;L;;;;;N;;;;; +B590;HANGUL SYLLABLE DDYAELS;Lo;0;L;;;;;N;;;;; +B591;HANGUL SYLLABLE DDYAELT;Lo;0;L;;;;;N;;;;; +B592;HANGUL SYLLABLE DDYAELP;Lo;0;L;;;;;N;;;;; +B593;HANGUL SYLLABLE DDYAELH;Lo;0;L;;;;;N;;;;; +B594;HANGUL SYLLABLE DDYAEM;Lo;0;L;;;;;N;;;;; +B595;HANGUL SYLLABLE DDYAEB;Lo;0;L;;;;;N;;;;; +B596;HANGUL SYLLABLE DDYAEBS;Lo;0;L;;;;;N;;;;; +B597;HANGUL SYLLABLE DDYAES;Lo;0;L;;;;;N;;;;; +B598;HANGUL SYLLABLE DDYAESS;Lo;0;L;;;;;N;;;;; +B599;HANGUL SYLLABLE DDYAENG;Lo;0;L;;;;;N;;;;; +B59A;HANGUL SYLLABLE DDYAEJ;Lo;0;L;;;;;N;;;;; +B59B;HANGUL SYLLABLE DDYAEC;Lo;0;L;;;;;N;;;;; +B59C;HANGUL SYLLABLE DDYAEK;Lo;0;L;;;;;N;;;;; +B59D;HANGUL SYLLABLE DDYAET;Lo;0;L;;;;;N;;;;; +B59E;HANGUL SYLLABLE DDYAEP;Lo;0;L;;;;;N;;;;; +B59F;HANGUL SYLLABLE DDYAEH;Lo;0;L;;;;;N;;;;; +B5A0;HANGUL SYLLABLE DDEO;Lo;0;L;;;;;N;;;;; +B5A1;HANGUL SYLLABLE DDEOG;Lo;0;L;;;;;N;;;;; +B5A2;HANGUL SYLLABLE DDEOGG;Lo;0;L;;;;;N;;;;; +B5A3;HANGUL SYLLABLE DDEOGS;Lo;0;L;;;;;N;;;;; +B5A4;HANGUL SYLLABLE DDEON;Lo;0;L;;;;;N;;;;; +B5A5;HANGUL SYLLABLE DDEONI;Lo;0;L;;;;;N;;;;; +B5A6;HANGUL SYLLABLE DDEONH;Lo;0;L;;;;;N;;;;; +B5A7;HANGUL SYLLABLE DDEOD;Lo;0;L;;;;;N;;;;; +B5A8;HANGUL SYLLABLE DDEOL;Lo;0;L;;;;;N;;;;; +B5A9;HANGUL SYLLABLE DDEOLG;Lo;0;L;;;;;N;;;;; +B5AA;HANGUL SYLLABLE DDEOLM;Lo;0;L;;;;;N;;;;; +B5AB;HANGUL SYLLABLE DDEOLB;Lo;0;L;;;;;N;;;;; +B5AC;HANGUL SYLLABLE DDEOLS;Lo;0;L;;;;;N;;;;; +B5AD;HANGUL SYLLABLE DDEOLT;Lo;0;L;;;;;N;;;;; +B5AE;HANGUL SYLLABLE DDEOLP;Lo;0;L;;;;;N;;;;; +B5AF;HANGUL SYLLABLE DDEOLH;Lo;0;L;;;;;N;;;;; +B5B0;HANGUL SYLLABLE DDEOM;Lo;0;L;;;;;N;;;;; +B5B1;HANGUL SYLLABLE DDEOB;Lo;0;L;;;;;N;;;;; +B5B2;HANGUL SYLLABLE DDEOBS;Lo;0;L;;;;;N;;;;; +B5B3;HANGUL SYLLABLE DDEOS;Lo;0;L;;;;;N;;;;; +B5B4;HANGUL SYLLABLE DDEOSS;Lo;0;L;;;;;N;;;;; +B5B5;HANGUL SYLLABLE DDEONG;Lo;0;L;;;;;N;;;;; +B5B6;HANGUL SYLLABLE DDEOJ;Lo;0;L;;;;;N;;;;; +B5B7;HANGUL SYLLABLE DDEOC;Lo;0;L;;;;;N;;;;; +B5B8;HANGUL SYLLABLE DDEOK;Lo;0;L;;;;;N;;;;; +B5B9;HANGUL SYLLABLE DDEOT;Lo;0;L;;;;;N;;;;; +B5BA;HANGUL SYLLABLE DDEOP;Lo;0;L;;;;;N;;;;; +B5BB;HANGUL SYLLABLE DDEOH;Lo;0;L;;;;;N;;;;; +B5BC;HANGUL SYLLABLE DDE;Lo;0;L;;;;;N;;;;; +B5BD;HANGUL SYLLABLE DDEG;Lo;0;L;;;;;N;;;;; +B5BE;HANGUL SYLLABLE DDEGG;Lo;0;L;;;;;N;;;;; +B5BF;HANGUL SYLLABLE DDEGS;Lo;0;L;;;;;N;;;;; +B5C0;HANGUL SYLLABLE DDEN;Lo;0;L;;;;;N;;;;; +B5C1;HANGUL SYLLABLE DDENI;Lo;0;L;;;;;N;;;;; +B5C2;HANGUL SYLLABLE DDENH;Lo;0;L;;;;;N;;;;; +B5C3;HANGUL SYLLABLE DDED;Lo;0;L;;;;;N;;;;; +B5C4;HANGUL SYLLABLE DDEL;Lo;0;L;;;;;N;;;;; +B5C5;HANGUL SYLLABLE DDELG;Lo;0;L;;;;;N;;;;; +B5C6;HANGUL SYLLABLE DDELM;Lo;0;L;;;;;N;;;;; +B5C7;HANGUL SYLLABLE DDELB;Lo;0;L;;;;;N;;;;; +B5C8;HANGUL SYLLABLE DDELS;Lo;0;L;;;;;N;;;;; +B5C9;HANGUL SYLLABLE DDELT;Lo;0;L;;;;;N;;;;; +B5CA;HANGUL SYLLABLE DDELP;Lo;0;L;;;;;N;;;;; +B5CB;HANGUL SYLLABLE DDELH;Lo;0;L;;;;;N;;;;; +B5CC;HANGUL SYLLABLE DDEM;Lo;0;L;;;;;N;;;;; +B5CD;HANGUL SYLLABLE DDEB;Lo;0;L;;;;;N;;;;; +B5CE;HANGUL SYLLABLE DDEBS;Lo;0;L;;;;;N;;;;; +B5CF;HANGUL SYLLABLE DDES;Lo;0;L;;;;;N;;;;; +B5D0;HANGUL SYLLABLE DDESS;Lo;0;L;;;;;N;;;;; +B5D1;HANGUL SYLLABLE DDENG;Lo;0;L;;;;;N;;;;; +B5D2;HANGUL SYLLABLE DDEJ;Lo;0;L;;;;;N;;;;; +B5D3;HANGUL SYLLABLE DDEC;Lo;0;L;;;;;N;;;;; +B5D4;HANGUL SYLLABLE DDEK;Lo;0;L;;;;;N;;;;; +B5D5;HANGUL SYLLABLE DDET;Lo;0;L;;;;;N;;;;; +B5D6;HANGUL SYLLABLE DDEP;Lo;0;L;;;;;N;;;;; +B5D7;HANGUL SYLLABLE DDEH;Lo;0;L;;;;;N;;;;; +B5D8;HANGUL SYLLABLE DDYEO;Lo;0;L;;;;;N;;;;; +B5D9;HANGUL SYLLABLE DDYEOG;Lo;0;L;;;;;N;;;;; +B5DA;HANGUL SYLLABLE DDYEOGG;Lo;0;L;;;;;N;;;;; +B5DB;HANGUL SYLLABLE DDYEOGS;Lo;0;L;;;;;N;;;;; +B5DC;HANGUL SYLLABLE DDYEON;Lo;0;L;;;;;N;;;;; +B5DD;HANGUL SYLLABLE DDYEONI;Lo;0;L;;;;;N;;;;; +B5DE;HANGUL SYLLABLE DDYEONH;Lo;0;L;;;;;N;;;;; +B5DF;HANGUL SYLLABLE DDYEOD;Lo;0;L;;;;;N;;;;; +B5E0;HANGUL SYLLABLE DDYEOL;Lo;0;L;;;;;N;;;;; +B5E1;HANGUL SYLLABLE DDYEOLG;Lo;0;L;;;;;N;;;;; +B5E2;HANGUL SYLLABLE DDYEOLM;Lo;0;L;;;;;N;;;;; +B5E3;HANGUL SYLLABLE DDYEOLB;Lo;0;L;;;;;N;;;;; +B5E4;HANGUL SYLLABLE DDYEOLS;Lo;0;L;;;;;N;;;;; +B5E5;HANGUL SYLLABLE DDYEOLT;Lo;0;L;;;;;N;;;;; +B5E6;HANGUL SYLLABLE DDYEOLP;Lo;0;L;;;;;N;;;;; +B5E7;HANGUL SYLLABLE DDYEOLH;Lo;0;L;;;;;N;;;;; +B5E8;HANGUL SYLLABLE DDYEOM;Lo;0;L;;;;;N;;;;; +B5E9;HANGUL SYLLABLE DDYEOB;Lo;0;L;;;;;N;;;;; +B5EA;HANGUL SYLLABLE DDYEOBS;Lo;0;L;;;;;N;;;;; +B5EB;HANGUL SYLLABLE DDYEOS;Lo;0;L;;;;;N;;;;; +B5EC;HANGUL SYLLABLE DDYEOSS;Lo;0;L;;;;;N;;;;; +B5ED;HANGUL SYLLABLE DDYEONG;Lo;0;L;;;;;N;;;;; +B5EE;HANGUL SYLLABLE DDYEOJ;Lo;0;L;;;;;N;;;;; +B5EF;HANGUL SYLLABLE DDYEOC;Lo;0;L;;;;;N;;;;; +B5F0;HANGUL SYLLABLE DDYEOK;Lo;0;L;;;;;N;;;;; +B5F1;HANGUL SYLLABLE DDYEOT;Lo;0;L;;;;;N;;;;; +B5F2;HANGUL SYLLABLE DDYEOP;Lo;0;L;;;;;N;;;;; +B5F3;HANGUL SYLLABLE DDYEOH;Lo;0;L;;;;;N;;;;; +B5F4;HANGUL SYLLABLE DDYE;Lo;0;L;;;;;N;;;;; +B5F5;HANGUL SYLLABLE DDYEG;Lo;0;L;;;;;N;;;;; +B5F6;HANGUL SYLLABLE DDYEGG;Lo;0;L;;;;;N;;;;; +B5F7;HANGUL SYLLABLE DDYEGS;Lo;0;L;;;;;N;;;;; +B5F8;HANGUL SYLLABLE DDYEN;Lo;0;L;;;;;N;;;;; +B5F9;HANGUL SYLLABLE DDYENI;Lo;0;L;;;;;N;;;;; +B5FA;HANGUL SYLLABLE DDYENH;Lo;0;L;;;;;N;;;;; +B5FB;HANGUL SYLLABLE DDYED;Lo;0;L;;;;;N;;;;; +B5FC;HANGUL SYLLABLE DDYEL;Lo;0;L;;;;;N;;;;; +B5FD;HANGUL SYLLABLE DDYELG;Lo;0;L;;;;;N;;;;; +B5FE;HANGUL SYLLABLE DDYELM;Lo;0;L;;;;;N;;;;; +B5FF;HANGUL SYLLABLE DDYELB;Lo;0;L;;;;;N;;;;; +B600;HANGUL SYLLABLE DDYELS;Lo;0;L;;;;;N;;;;; +B601;HANGUL SYLLABLE DDYELT;Lo;0;L;;;;;N;;;;; +B602;HANGUL SYLLABLE DDYELP;Lo;0;L;;;;;N;;;;; +B603;HANGUL SYLLABLE DDYELH;Lo;0;L;;;;;N;;;;; +B604;HANGUL SYLLABLE DDYEM;Lo;0;L;;;;;N;;;;; +B605;HANGUL SYLLABLE DDYEB;Lo;0;L;;;;;N;;;;; +B606;HANGUL SYLLABLE DDYEBS;Lo;0;L;;;;;N;;;;; +B607;HANGUL SYLLABLE DDYES;Lo;0;L;;;;;N;;;;; +B608;HANGUL SYLLABLE DDYESS;Lo;0;L;;;;;N;;;;; +B609;HANGUL SYLLABLE DDYENG;Lo;0;L;;;;;N;;;;; +B60A;HANGUL SYLLABLE DDYEJ;Lo;0;L;;;;;N;;;;; +B60B;HANGUL SYLLABLE DDYEC;Lo;0;L;;;;;N;;;;; +B60C;HANGUL SYLLABLE DDYEK;Lo;0;L;;;;;N;;;;; +B60D;HANGUL SYLLABLE DDYET;Lo;0;L;;;;;N;;;;; +B60E;HANGUL SYLLABLE DDYEP;Lo;0;L;;;;;N;;;;; +B60F;HANGUL SYLLABLE DDYEH;Lo;0;L;;;;;N;;;;; +B610;HANGUL SYLLABLE DDO;Lo;0;L;;;;;N;;;;; +B611;HANGUL SYLLABLE DDOG;Lo;0;L;;;;;N;;;;; +B612;HANGUL SYLLABLE DDOGG;Lo;0;L;;;;;N;;;;; +B613;HANGUL SYLLABLE DDOGS;Lo;0;L;;;;;N;;;;; +B614;HANGUL SYLLABLE DDON;Lo;0;L;;;;;N;;;;; +B615;HANGUL SYLLABLE DDONI;Lo;0;L;;;;;N;;;;; +B616;HANGUL SYLLABLE DDONH;Lo;0;L;;;;;N;;;;; +B617;HANGUL SYLLABLE DDOD;Lo;0;L;;;;;N;;;;; +B618;HANGUL SYLLABLE DDOL;Lo;0;L;;;;;N;;;;; +B619;HANGUL SYLLABLE DDOLG;Lo;0;L;;;;;N;;;;; +B61A;HANGUL SYLLABLE DDOLM;Lo;0;L;;;;;N;;;;; +B61B;HANGUL SYLLABLE DDOLB;Lo;0;L;;;;;N;;;;; +B61C;HANGUL SYLLABLE DDOLS;Lo;0;L;;;;;N;;;;; +B61D;HANGUL SYLLABLE DDOLT;Lo;0;L;;;;;N;;;;; +B61E;HANGUL SYLLABLE DDOLP;Lo;0;L;;;;;N;;;;; +B61F;HANGUL SYLLABLE DDOLH;Lo;0;L;;;;;N;;;;; +B620;HANGUL SYLLABLE DDOM;Lo;0;L;;;;;N;;;;; +B621;HANGUL SYLLABLE DDOB;Lo;0;L;;;;;N;;;;; +B622;HANGUL SYLLABLE DDOBS;Lo;0;L;;;;;N;;;;; +B623;HANGUL SYLLABLE DDOS;Lo;0;L;;;;;N;;;;; +B624;HANGUL SYLLABLE DDOSS;Lo;0;L;;;;;N;;;;; +B625;HANGUL SYLLABLE DDONG;Lo;0;L;;;;;N;;;;; +B626;HANGUL SYLLABLE DDOJ;Lo;0;L;;;;;N;;;;; +B627;HANGUL SYLLABLE DDOC;Lo;0;L;;;;;N;;;;; +B628;HANGUL SYLLABLE DDOK;Lo;0;L;;;;;N;;;;; +B629;HANGUL SYLLABLE DDOT;Lo;0;L;;;;;N;;;;; +B62A;HANGUL SYLLABLE DDOP;Lo;0;L;;;;;N;;;;; +B62B;HANGUL SYLLABLE DDOH;Lo;0;L;;;;;N;;;;; +B62C;HANGUL SYLLABLE DDWA;Lo;0;L;;;;;N;;;;; +B62D;HANGUL SYLLABLE DDWAG;Lo;0;L;;;;;N;;;;; +B62E;HANGUL SYLLABLE DDWAGG;Lo;0;L;;;;;N;;;;; +B62F;HANGUL SYLLABLE DDWAGS;Lo;0;L;;;;;N;;;;; +B630;HANGUL SYLLABLE DDWAN;Lo;0;L;;;;;N;;;;; +B631;HANGUL SYLLABLE DDWANI;Lo;0;L;;;;;N;;;;; +B632;HANGUL SYLLABLE DDWANH;Lo;0;L;;;;;N;;;;; +B633;HANGUL SYLLABLE DDWAD;Lo;0;L;;;;;N;;;;; +B634;HANGUL SYLLABLE DDWAL;Lo;0;L;;;;;N;;;;; +B635;HANGUL SYLLABLE DDWALG;Lo;0;L;;;;;N;;;;; +B636;HANGUL SYLLABLE DDWALM;Lo;0;L;;;;;N;;;;; +B637;HANGUL SYLLABLE DDWALB;Lo;0;L;;;;;N;;;;; +B638;HANGUL SYLLABLE DDWALS;Lo;0;L;;;;;N;;;;; +B639;HANGUL SYLLABLE DDWALT;Lo;0;L;;;;;N;;;;; +B63A;HANGUL SYLLABLE DDWALP;Lo;0;L;;;;;N;;;;; +B63B;HANGUL SYLLABLE DDWALH;Lo;0;L;;;;;N;;;;; +B63C;HANGUL SYLLABLE DDWAM;Lo;0;L;;;;;N;;;;; +B63D;HANGUL SYLLABLE DDWAB;Lo;0;L;;;;;N;;;;; +B63E;HANGUL SYLLABLE DDWABS;Lo;0;L;;;;;N;;;;; +B63F;HANGUL SYLLABLE DDWAS;Lo;0;L;;;;;N;;;;; +B640;HANGUL SYLLABLE DDWASS;Lo;0;L;;;;;N;;;;; +B641;HANGUL SYLLABLE DDWANG;Lo;0;L;;;;;N;;;;; +B642;HANGUL SYLLABLE DDWAJ;Lo;0;L;;;;;N;;;;; +B643;HANGUL SYLLABLE DDWAC;Lo;0;L;;;;;N;;;;; +B644;HANGUL SYLLABLE DDWAK;Lo;0;L;;;;;N;;;;; +B645;HANGUL SYLLABLE DDWAT;Lo;0;L;;;;;N;;;;; +B646;HANGUL SYLLABLE DDWAP;Lo;0;L;;;;;N;;;;; +B647;HANGUL SYLLABLE DDWAH;Lo;0;L;;;;;N;;;;; +B648;HANGUL SYLLABLE DDWAE;Lo;0;L;;;;;N;;;;; +B649;HANGUL SYLLABLE DDWAEG;Lo;0;L;;;;;N;;;;; +B64A;HANGUL SYLLABLE DDWAEGG;Lo;0;L;;;;;N;;;;; +B64B;HANGUL SYLLABLE DDWAEGS;Lo;0;L;;;;;N;;;;; +B64C;HANGUL SYLLABLE DDWAEN;Lo;0;L;;;;;N;;;;; +B64D;HANGUL SYLLABLE DDWAENI;Lo;0;L;;;;;N;;;;; +B64E;HANGUL SYLLABLE DDWAENH;Lo;0;L;;;;;N;;;;; +B64F;HANGUL SYLLABLE DDWAED;Lo;0;L;;;;;N;;;;; +B650;HANGUL SYLLABLE DDWAEL;Lo;0;L;;;;;N;;;;; +B651;HANGUL SYLLABLE DDWAELG;Lo;0;L;;;;;N;;;;; +B652;HANGUL SYLLABLE DDWAELM;Lo;0;L;;;;;N;;;;; +B653;HANGUL SYLLABLE DDWAELB;Lo;0;L;;;;;N;;;;; +B654;HANGUL SYLLABLE DDWAELS;Lo;0;L;;;;;N;;;;; +B655;HANGUL SYLLABLE DDWAELT;Lo;0;L;;;;;N;;;;; +B656;HANGUL SYLLABLE DDWAELP;Lo;0;L;;;;;N;;;;; +B657;HANGUL SYLLABLE DDWAELH;Lo;0;L;;;;;N;;;;; +B658;HANGUL SYLLABLE DDWAEM;Lo;0;L;;;;;N;;;;; +B659;HANGUL SYLLABLE DDWAEB;Lo;0;L;;;;;N;;;;; +B65A;HANGUL SYLLABLE DDWAEBS;Lo;0;L;;;;;N;;;;; +B65B;HANGUL SYLLABLE DDWAES;Lo;0;L;;;;;N;;;;; +B65C;HANGUL SYLLABLE DDWAESS;Lo;0;L;;;;;N;;;;; +B65D;HANGUL SYLLABLE DDWAENG;Lo;0;L;;;;;N;;;;; +B65E;HANGUL SYLLABLE DDWAEJ;Lo;0;L;;;;;N;;;;; +B65F;HANGUL SYLLABLE DDWAEC;Lo;0;L;;;;;N;;;;; +B660;HANGUL SYLLABLE DDWAEK;Lo;0;L;;;;;N;;;;; +B661;HANGUL SYLLABLE DDWAET;Lo;0;L;;;;;N;;;;; +B662;HANGUL SYLLABLE DDWAEP;Lo;0;L;;;;;N;;;;; +B663;HANGUL SYLLABLE DDWAEH;Lo;0;L;;;;;N;;;;; +B664;HANGUL SYLLABLE DDOE;Lo;0;L;;;;;N;;;;; +B665;HANGUL SYLLABLE DDOEG;Lo;0;L;;;;;N;;;;; +B666;HANGUL SYLLABLE DDOEGG;Lo;0;L;;;;;N;;;;; +B667;HANGUL SYLLABLE DDOEGS;Lo;0;L;;;;;N;;;;; +B668;HANGUL SYLLABLE DDOEN;Lo;0;L;;;;;N;;;;; +B669;HANGUL SYLLABLE DDOENI;Lo;0;L;;;;;N;;;;; +B66A;HANGUL SYLLABLE DDOENH;Lo;0;L;;;;;N;;;;; +B66B;HANGUL SYLLABLE DDOED;Lo;0;L;;;;;N;;;;; +B66C;HANGUL SYLLABLE DDOEL;Lo;0;L;;;;;N;;;;; +B66D;HANGUL SYLLABLE DDOELG;Lo;0;L;;;;;N;;;;; +B66E;HANGUL SYLLABLE DDOELM;Lo;0;L;;;;;N;;;;; +B66F;HANGUL SYLLABLE DDOELB;Lo;0;L;;;;;N;;;;; +B670;HANGUL SYLLABLE DDOELS;Lo;0;L;;;;;N;;;;; +B671;HANGUL SYLLABLE DDOELT;Lo;0;L;;;;;N;;;;; +B672;HANGUL SYLLABLE DDOELP;Lo;0;L;;;;;N;;;;; +B673;HANGUL SYLLABLE DDOELH;Lo;0;L;;;;;N;;;;; +B674;HANGUL SYLLABLE DDOEM;Lo;0;L;;;;;N;;;;; +B675;HANGUL SYLLABLE DDOEB;Lo;0;L;;;;;N;;;;; +B676;HANGUL SYLLABLE DDOEBS;Lo;0;L;;;;;N;;;;; +B677;HANGUL SYLLABLE DDOES;Lo;0;L;;;;;N;;;;; +B678;HANGUL SYLLABLE DDOESS;Lo;0;L;;;;;N;;;;; +B679;HANGUL SYLLABLE DDOENG;Lo;0;L;;;;;N;;;;; +B67A;HANGUL SYLLABLE DDOEJ;Lo;0;L;;;;;N;;;;; +B67B;HANGUL SYLLABLE DDOEC;Lo;0;L;;;;;N;;;;; +B67C;HANGUL SYLLABLE DDOEK;Lo;0;L;;;;;N;;;;; +B67D;HANGUL SYLLABLE DDOET;Lo;0;L;;;;;N;;;;; +B67E;HANGUL SYLLABLE DDOEP;Lo;0;L;;;;;N;;;;; +B67F;HANGUL SYLLABLE DDOEH;Lo;0;L;;;;;N;;;;; +B680;HANGUL SYLLABLE DDYO;Lo;0;L;;;;;N;;;;; +B681;HANGUL SYLLABLE DDYOG;Lo;0;L;;;;;N;;;;; +B682;HANGUL SYLLABLE DDYOGG;Lo;0;L;;;;;N;;;;; +B683;HANGUL SYLLABLE DDYOGS;Lo;0;L;;;;;N;;;;; +B684;HANGUL SYLLABLE DDYON;Lo;0;L;;;;;N;;;;; +B685;HANGUL SYLLABLE DDYONI;Lo;0;L;;;;;N;;;;; +B686;HANGUL SYLLABLE DDYONH;Lo;0;L;;;;;N;;;;; +B687;HANGUL SYLLABLE DDYOD;Lo;0;L;;;;;N;;;;; +B688;HANGUL SYLLABLE DDYOL;Lo;0;L;;;;;N;;;;; +B689;HANGUL SYLLABLE DDYOLG;Lo;0;L;;;;;N;;;;; +B68A;HANGUL SYLLABLE DDYOLM;Lo;0;L;;;;;N;;;;; +B68B;HANGUL SYLLABLE DDYOLB;Lo;0;L;;;;;N;;;;; +B68C;HANGUL SYLLABLE DDYOLS;Lo;0;L;;;;;N;;;;; +B68D;HANGUL SYLLABLE DDYOLT;Lo;0;L;;;;;N;;;;; +B68E;HANGUL SYLLABLE DDYOLP;Lo;0;L;;;;;N;;;;; +B68F;HANGUL SYLLABLE DDYOLH;Lo;0;L;;;;;N;;;;; +B690;HANGUL SYLLABLE DDYOM;Lo;0;L;;;;;N;;;;; +B691;HANGUL SYLLABLE DDYOB;Lo;0;L;;;;;N;;;;; +B692;HANGUL SYLLABLE DDYOBS;Lo;0;L;;;;;N;;;;; +B693;HANGUL SYLLABLE DDYOS;Lo;0;L;;;;;N;;;;; +B694;HANGUL SYLLABLE DDYOSS;Lo;0;L;;;;;N;;;;; +B695;HANGUL SYLLABLE DDYONG;Lo;0;L;;;;;N;;;;; +B696;HANGUL SYLLABLE DDYOJ;Lo;0;L;;;;;N;;;;; +B697;HANGUL SYLLABLE DDYOC;Lo;0;L;;;;;N;;;;; +B698;HANGUL SYLLABLE DDYOK;Lo;0;L;;;;;N;;;;; +B699;HANGUL SYLLABLE DDYOT;Lo;0;L;;;;;N;;;;; +B69A;HANGUL SYLLABLE DDYOP;Lo;0;L;;;;;N;;;;; +B69B;HANGUL SYLLABLE DDYOH;Lo;0;L;;;;;N;;;;; +B69C;HANGUL SYLLABLE DDU;Lo;0;L;;;;;N;;;;; +B69D;HANGUL SYLLABLE DDUG;Lo;0;L;;;;;N;;;;; +B69E;HANGUL SYLLABLE DDUGG;Lo;0;L;;;;;N;;;;; +B69F;HANGUL SYLLABLE DDUGS;Lo;0;L;;;;;N;;;;; +B6A0;HANGUL SYLLABLE DDUN;Lo;0;L;;;;;N;;;;; +B6A1;HANGUL SYLLABLE DDUNI;Lo;0;L;;;;;N;;;;; +B6A2;HANGUL SYLLABLE DDUNH;Lo;0;L;;;;;N;;;;; +B6A3;HANGUL SYLLABLE DDUD;Lo;0;L;;;;;N;;;;; +B6A4;HANGUL SYLLABLE DDUL;Lo;0;L;;;;;N;;;;; +B6A5;HANGUL SYLLABLE DDULG;Lo;0;L;;;;;N;;;;; +B6A6;HANGUL SYLLABLE DDULM;Lo;0;L;;;;;N;;;;; +B6A7;HANGUL SYLLABLE DDULB;Lo;0;L;;;;;N;;;;; +B6A8;HANGUL SYLLABLE DDULS;Lo;0;L;;;;;N;;;;; +B6A9;HANGUL SYLLABLE DDULT;Lo;0;L;;;;;N;;;;; +B6AA;HANGUL SYLLABLE DDULP;Lo;0;L;;;;;N;;;;; +B6AB;HANGUL SYLLABLE DDULH;Lo;0;L;;;;;N;;;;; +B6AC;HANGUL SYLLABLE DDUM;Lo;0;L;;;;;N;;;;; +B6AD;HANGUL SYLLABLE DDUB;Lo;0;L;;;;;N;;;;; +B6AE;HANGUL SYLLABLE DDUBS;Lo;0;L;;;;;N;;;;; +B6AF;HANGUL SYLLABLE DDUS;Lo;0;L;;;;;N;;;;; +B6B0;HANGUL SYLLABLE DDUSS;Lo;0;L;;;;;N;;;;; +B6B1;HANGUL SYLLABLE DDUNG;Lo;0;L;;;;;N;;;;; +B6B2;HANGUL SYLLABLE DDUJ;Lo;0;L;;;;;N;;;;; +B6B3;HANGUL SYLLABLE DDUC;Lo;0;L;;;;;N;;;;; +B6B4;HANGUL SYLLABLE DDUK;Lo;0;L;;;;;N;;;;; +B6B5;HANGUL SYLLABLE DDUT;Lo;0;L;;;;;N;;;;; +B6B6;HANGUL SYLLABLE DDUP;Lo;0;L;;;;;N;;;;; +B6B7;HANGUL SYLLABLE DDUH;Lo;0;L;;;;;N;;;;; +B6B8;HANGUL SYLLABLE DDWEO;Lo;0;L;;;;;N;;;;; +B6B9;HANGUL SYLLABLE DDWEOG;Lo;0;L;;;;;N;;;;; +B6BA;HANGUL SYLLABLE DDWEOGG;Lo;0;L;;;;;N;;;;; +B6BB;HANGUL SYLLABLE DDWEOGS;Lo;0;L;;;;;N;;;;; +B6BC;HANGUL SYLLABLE DDWEON;Lo;0;L;;;;;N;;;;; +B6BD;HANGUL SYLLABLE DDWEONI;Lo;0;L;;;;;N;;;;; +B6BE;HANGUL SYLLABLE DDWEONH;Lo;0;L;;;;;N;;;;; +B6BF;HANGUL SYLLABLE DDWEOD;Lo;0;L;;;;;N;;;;; +B6C0;HANGUL SYLLABLE DDWEOL;Lo;0;L;;;;;N;;;;; +B6C1;HANGUL SYLLABLE DDWEOLG;Lo;0;L;;;;;N;;;;; +B6C2;HANGUL SYLLABLE DDWEOLM;Lo;0;L;;;;;N;;;;; +B6C3;HANGUL SYLLABLE DDWEOLB;Lo;0;L;;;;;N;;;;; +B6C4;HANGUL SYLLABLE DDWEOLS;Lo;0;L;;;;;N;;;;; +B6C5;HANGUL SYLLABLE DDWEOLT;Lo;0;L;;;;;N;;;;; +B6C6;HANGUL SYLLABLE DDWEOLP;Lo;0;L;;;;;N;;;;; +B6C7;HANGUL SYLLABLE DDWEOLH;Lo;0;L;;;;;N;;;;; +B6C8;HANGUL SYLLABLE DDWEOM;Lo;0;L;;;;;N;;;;; +B6C9;HANGUL SYLLABLE DDWEOB;Lo;0;L;;;;;N;;;;; +B6CA;HANGUL SYLLABLE DDWEOBS;Lo;0;L;;;;;N;;;;; +B6CB;HANGUL SYLLABLE DDWEOS;Lo;0;L;;;;;N;;;;; +B6CC;HANGUL SYLLABLE DDWEOSS;Lo;0;L;;;;;N;;;;; +B6CD;HANGUL SYLLABLE DDWEONG;Lo;0;L;;;;;N;;;;; +B6CE;HANGUL SYLLABLE DDWEOJ;Lo;0;L;;;;;N;;;;; +B6CF;HANGUL SYLLABLE DDWEOC;Lo;0;L;;;;;N;;;;; +B6D0;HANGUL SYLLABLE DDWEOK;Lo;0;L;;;;;N;;;;; +B6D1;HANGUL SYLLABLE DDWEOT;Lo;0;L;;;;;N;;;;; +B6D2;HANGUL SYLLABLE DDWEOP;Lo;0;L;;;;;N;;;;; +B6D3;HANGUL SYLLABLE DDWEOH;Lo;0;L;;;;;N;;;;; +B6D4;HANGUL SYLLABLE DDWE;Lo;0;L;;;;;N;;;;; +B6D5;HANGUL SYLLABLE DDWEG;Lo;0;L;;;;;N;;;;; +B6D6;HANGUL SYLLABLE DDWEGG;Lo;0;L;;;;;N;;;;; +B6D7;HANGUL SYLLABLE DDWEGS;Lo;0;L;;;;;N;;;;; +B6D8;HANGUL SYLLABLE DDWEN;Lo;0;L;;;;;N;;;;; +B6D9;HANGUL SYLLABLE DDWENI;Lo;0;L;;;;;N;;;;; +B6DA;HANGUL SYLLABLE DDWENH;Lo;0;L;;;;;N;;;;; +B6DB;HANGUL SYLLABLE DDWED;Lo;0;L;;;;;N;;;;; +B6DC;HANGUL SYLLABLE DDWEL;Lo;0;L;;;;;N;;;;; +B6DD;HANGUL SYLLABLE DDWELG;Lo;0;L;;;;;N;;;;; +B6DE;HANGUL SYLLABLE DDWELM;Lo;0;L;;;;;N;;;;; +B6DF;HANGUL SYLLABLE DDWELB;Lo;0;L;;;;;N;;;;; +B6E0;HANGUL SYLLABLE DDWELS;Lo;0;L;;;;;N;;;;; +B6E1;HANGUL SYLLABLE DDWELT;Lo;0;L;;;;;N;;;;; +B6E2;HANGUL SYLLABLE DDWELP;Lo;0;L;;;;;N;;;;; +B6E3;HANGUL SYLLABLE DDWELH;Lo;0;L;;;;;N;;;;; +B6E4;HANGUL SYLLABLE DDWEM;Lo;0;L;;;;;N;;;;; +B6E5;HANGUL SYLLABLE DDWEB;Lo;0;L;;;;;N;;;;; +B6E6;HANGUL SYLLABLE DDWEBS;Lo;0;L;;;;;N;;;;; +B6E7;HANGUL SYLLABLE DDWES;Lo;0;L;;;;;N;;;;; +B6E8;HANGUL SYLLABLE DDWESS;Lo;0;L;;;;;N;;;;; +B6E9;HANGUL SYLLABLE DDWENG;Lo;0;L;;;;;N;;;;; +B6EA;HANGUL SYLLABLE DDWEJ;Lo;0;L;;;;;N;;;;; +B6EB;HANGUL SYLLABLE DDWEC;Lo;0;L;;;;;N;;;;; +B6EC;HANGUL SYLLABLE DDWEK;Lo;0;L;;;;;N;;;;; +B6ED;HANGUL SYLLABLE DDWET;Lo;0;L;;;;;N;;;;; +B6EE;HANGUL SYLLABLE DDWEP;Lo;0;L;;;;;N;;;;; +B6EF;HANGUL SYLLABLE DDWEH;Lo;0;L;;;;;N;;;;; +B6F0;HANGUL SYLLABLE DDWI;Lo;0;L;;;;;N;;;;; +B6F1;HANGUL SYLLABLE DDWIG;Lo;0;L;;;;;N;;;;; +B6F2;HANGUL SYLLABLE DDWIGG;Lo;0;L;;;;;N;;;;; +B6F3;HANGUL SYLLABLE DDWIGS;Lo;0;L;;;;;N;;;;; +B6F4;HANGUL SYLLABLE DDWIN;Lo;0;L;;;;;N;;;;; +B6F5;HANGUL SYLLABLE DDWINI;Lo;0;L;;;;;N;;;;; +B6F6;HANGUL SYLLABLE DDWINH;Lo;0;L;;;;;N;;;;; +B6F7;HANGUL SYLLABLE DDWID;Lo;0;L;;;;;N;;;;; +B6F8;HANGUL SYLLABLE DDWIL;Lo;0;L;;;;;N;;;;; +B6F9;HANGUL SYLLABLE DDWILG;Lo;0;L;;;;;N;;;;; +B6FA;HANGUL SYLLABLE DDWILM;Lo;0;L;;;;;N;;;;; +B6FB;HANGUL SYLLABLE DDWILB;Lo;0;L;;;;;N;;;;; +B6FC;HANGUL SYLLABLE DDWILS;Lo;0;L;;;;;N;;;;; +B6FD;HANGUL SYLLABLE DDWILT;Lo;0;L;;;;;N;;;;; +B6FE;HANGUL SYLLABLE DDWILP;Lo;0;L;;;;;N;;;;; +B6FF;HANGUL SYLLABLE DDWILH;Lo;0;L;;;;;N;;;;; +B700;HANGUL SYLLABLE DDWIM;Lo;0;L;;;;;N;;;;; +B701;HANGUL SYLLABLE DDWIB;Lo;0;L;;;;;N;;;;; +B702;HANGUL SYLLABLE DDWIBS;Lo;0;L;;;;;N;;;;; +B703;HANGUL SYLLABLE DDWIS;Lo;0;L;;;;;N;;;;; +B704;HANGUL SYLLABLE DDWISS;Lo;0;L;;;;;N;;;;; +B705;HANGUL SYLLABLE DDWING;Lo;0;L;;;;;N;;;;; +B706;HANGUL SYLLABLE DDWIJ;Lo;0;L;;;;;N;;;;; +B707;HANGUL SYLLABLE DDWIC;Lo;0;L;;;;;N;;;;; +B708;HANGUL SYLLABLE DDWIK;Lo;0;L;;;;;N;;;;; +B709;HANGUL SYLLABLE DDWIT;Lo;0;L;;;;;N;;;;; +B70A;HANGUL SYLLABLE DDWIP;Lo;0;L;;;;;N;;;;; +B70B;HANGUL SYLLABLE DDWIH;Lo;0;L;;;;;N;;;;; +B70C;HANGUL SYLLABLE DDYU;Lo;0;L;;;;;N;;;;; +B70D;HANGUL SYLLABLE DDYUG;Lo;0;L;;;;;N;;;;; +B70E;HANGUL SYLLABLE DDYUGG;Lo;0;L;;;;;N;;;;; +B70F;HANGUL SYLLABLE DDYUGS;Lo;0;L;;;;;N;;;;; +B710;HANGUL SYLLABLE DDYUN;Lo;0;L;;;;;N;;;;; +B711;HANGUL SYLLABLE DDYUNI;Lo;0;L;;;;;N;;;;; +B712;HANGUL SYLLABLE DDYUNH;Lo;0;L;;;;;N;;;;; +B713;HANGUL SYLLABLE DDYUD;Lo;0;L;;;;;N;;;;; +B714;HANGUL SYLLABLE DDYUL;Lo;0;L;;;;;N;;;;; +B715;HANGUL SYLLABLE DDYULG;Lo;0;L;;;;;N;;;;; +B716;HANGUL SYLLABLE DDYULM;Lo;0;L;;;;;N;;;;; +B717;HANGUL SYLLABLE DDYULB;Lo;0;L;;;;;N;;;;; +B718;HANGUL SYLLABLE DDYULS;Lo;0;L;;;;;N;;;;; +B719;HANGUL SYLLABLE DDYULT;Lo;0;L;;;;;N;;;;; +B71A;HANGUL SYLLABLE DDYULP;Lo;0;L;;;;;N;;;;; +B71B;HANGUL SYLLABLE DDYULH;Lo;0;L;;;;;N;;;;; +B71C;HANGUL SYLLABLE DDYUM;Lo;0;L;;;;;N;;;;; +B71D;HANGUL SYLLABLE DDYUB;Lo;0;L;;;;;N;;;;; +B71E;HANGUL SYLLABLE DDYUBS;Lo;0;L;;;;;N;;;;; +B71F;HANGUL SYLLABLE DDYUS;Lo;0;L;;;;;N;;;;; +B720;HANGUL SYLLABLE DDYUSS;Lo;0;L;;;;;N;;;;; +B721;HANGUL SYLLABLE DDYUNG;Lo;0;L;;;;;N;;;;; +B722;HANGUL SYLLABLE DDYUJ;Lo;0;L;;;;;N;;;;; +B723;HANGUL SYLLABLE DDYUC;Lo;0;L;;;;;N;;;;; +B724;HANGUL SYLLABLE DDYUK;Lo;0;L;;;;;N;;;;; +B725;HANGUL SYLLABLE DDYUT;Lo;0;L;;;;;N;;;;; +B726;HANGUL SYLLABLE DDYUP;Lo;0;L;;;;;N;;;;; +B727;HANGUL SYLLABLE DDYUH;Lo;0;L;;;;;N;;;;; +B728;HANGUL SYLLABLE DDEU;Lo;0;L;;;;;N;;;;; +B729;HANGUL SYLLABLE DDEUG;Lo;0;L;;;;;N;;;;; +B72A;HANGUL SYLLABLE DDEUGG;Lo;0;L;;;;;N;;;;; +B72B;HANGUL SYLLABLE DDEUGS;Lo;0;L;;;;;N;;;;; +B72C;HANGUL SYLLABLE DDEUN;Lo;0;L;;;;;N;;;;; +B72D;HANGUL SYLLABLE DDEUNI;Lo;0;L;;;;;N;;;;; +B72E;HANGUL SYLLABLE DDEUNH;Lo;0;L;;;;;N;;;;; +B72F;HANGUL SYLLABLE DDEUD;Lo;0;L;;;;;N;;;;; +B730;HANGUL SYLLABLE DDEUL;Lo;0;L;;;;;N;;;;; +B731;HANGUL SYLLABLE DDEULG;Lo;0;L;;;;;N;;;;; +B732;HANGUL SYLLABLE DDEULM;Lo;0;L;;;;;N;;;;; +B733;HANGUL SYLLABLE DDEULB;Lo;0;L;;;;;N;;;;; +B734;HANGUL SYLLABLE DDEULS;Lo;0;L;;;;;N;;;;; +B735;HANGUL SYLLABLE DDEULT;Lo;0;L;;;;;N;;;;; +B736;HANGUL SYLLABLE DDEULP;Lo;0;L;;;;;N;;;;; +B737;HANGUL SYLLABLE DDEULH;Lo;0;L;;;;;N;;;;; +B738;HANGUL SYLLABLE DDEUM;Lo;0;L;;;;;N;;;;; +B739;HANGUL SYLLABLE DDEUB;Lo;0;L;;;;;N;;;;; +B73A;HANGUL SYLLABLE DDEUBS;Lo;0;L;;;;;N;;;;; +B73B;HANGUL SYLLABLE DDEUS;Lo;0;L;;;;;N;;;;; +B73C;HANGUL SYLLABLE DDEUSS;Lo;0;L;;;;;N;;;;; +B73D;HANGUL SYLLABLE DDEUNG;Lo;0;L;;;;;N;;;;; +B73E;HANGUL SYLLABLE DDEUJ;Lo;0;L;;;;;N;;;;; +B73F;HANGUL SYLLABLE DDEUC;Lo;0;L;;;;;N;;;;; +B740;HANGUL SYLLABLE DDEUK;Lo;0;L;;;;;N;;;;; +B741;HANGUL SYLLABLE DDEUT;Lo;0;L;;;;;N;;;;; +B742;HANGUL SYLLABLE DDEUP;Lo;0;L;;;;;N;;;;; +B743;HANGUL SYLLABLE DDEUH;Lo;0;L;;;;;N;;;;; +B744;HANGUL SYLLABLE DDYI;Lo;0;L;;;;;N;;;;; +B745;HANGUL SYLLABLE DDYIG;Lo;0;L;;;;;N;;;;; +B746;HANGUL SYLLABLE DDYIGG;Lo;0;L;;;;;N;;;;; +B747;HANGUL SYLLABLE DDYIGS;Lo;0;L;;;;;N;;;;; +B748;HANGUL SYLLABLE DDYIN;Lo;0;L;;;;;N;;;;; +B749;HANGUL SYLLABLE DDYINI;Lo;0;L;;;;;N;;;;; +B74A;HANGUL SYLLABLE DDYINH;Lo;0;L;;;;;N;;;;; +B74B;HANGUL SYLLABLE DDYID;Lo;0;L;;;;;N;;;;; +B74C;HANGUL SYLLABLE DDYIL;Lo;0;L;;;;;N;;;;; +B74D;HANGUL SYLLABLE DDYILG;Lo;0;L;;;;;N;;;;; +B74E;HANGUL SYLLABLE DDYILM;Lo;0;L;;;;;N;;;;; +B74F;HANGUL SYLLABLE DDYILB;Lo;0;L;;;;;N;;;;; +B750;HANGUL SYLLABLE DDYILS;Lo;0;L;;;;;N;;;;; +B751;HANGUL SYLLABLE DDYILT;Lo;0;L;;;;;N;;;;; +B752;HANGUL SYLLABLE DDYILP;Lo;0;L;;;;;N;;;;; +B753;HANGUL SYLLABLE DDYILH;Lo;0;L;;;;;N;;;;; +B754;HANGUL SYLLABLE DDYIM;Lo;0;L;;;;;N;;;;; +B755;HANGUL SYLLABLE DDYIB;Lo;0;L;;;;;N;;;;; +B756;HANGUL SYLLABLE DDYIBS;Lo;0;L;;;;;N;;;;; +B757;HANGUL SYLLABLE DDYIS;Lo;0;L;;;;;N;;;;; +B758;HANGUL SYLLABLE DDYISS;Lo;0;L;;;;;N;;;;; +B759;HANGUL SYLLABLE DDYING;Lo;0;L;;;;;N;;;;; +B75A;HANGUL SYLLABLE DDYIJ;Lo;0;L;;;;;N;;;;; +B75B;HANGUL SYLLABLE DDYIC;Lo;0;L;;;;;N;;;;; +B75C;HANGUL SYLLABLE DDYIK;Lo;0;L;;;;;N;;;;; +B75D;HANGUL SYLLABLE DDYIT;Lo;0;L;;;;;N;;;;; +B75E;HANGUL SYLLABLE DDYIP;Lo;0;L;;;;;N;;;;; +B75F;HANGUL SYLLABLE DDYIH;Lo;0;L;;;;;N;;;;; +B760;HANGUL SYLLABLE DDI;Lo;0;L;;;;;N;;;;; +B761;HANGUL SYLLABLE DDIG;Lo;0;L;;;;;N;;;;; +B762;HANGUL SYLLABLE DDIGG;Lo;0;L;;;;;N;;;;; +B763;HANGUL SYLLABLE DDIGS;Lo;0;L;;;;;N;;;;; +B764;HANGUL SYLLABLE DDIN;Lo;0;L;;;;;N;;;;; +B765;HANGUL SYLLABLE DDINI;Lo;0;L;;;;;N;;;;; +B766;HANGUL SYLLABLE DDINH;Lo;0;L;;;;;N;;;;; +B767;HANGUL SYLLABLE DDID;Lo;0;L;;;;;N;;;;; +B768;HANGUL SYLLABLE DDIL;Lo;0;L;;;;;N;;;;; +B769;HANGUL SYLLABLE DDILG;Lo;0;L;;;;;N;;;;; +B76A;HANGUL SYLLABLE DDILM;Lo;0;L;;;;;N;;;;; +B76B;HANGUL SYLLABLE DDILB;Lo;0;L;;;;;N;;;;; +B76C;HANGUL SYLLABLE DDILS;Lo;0;L;;;;;N;;;;; +B76D;HANGUL SYLLABLE DDILT;Lo;0;L;;;;;N;;;;; +B76E;HANGUL SYLLABLE DDILP;Lo;0;L;;;;;N;;;;; +B76F;HANGUL SYLLABLE DDILH;Lo;0;L;;;;;N;;;;; +B770;HANGUL SYLLABLE DDIM;Lo;0;L;;;;;N;;;;; +B771;HANGUL SYLLABLE DDIB;Lo;0;L;;;;;N;;;;; +B772;HANGUL SYLLABLE DDIBS;Lo;0;L;;;;;N;;;;; +B773;HANGUL SYLLABLE DDIS;Lo;0;L;;;;;N;;;;; +B774;HANGUL SYLLABLE DDISS;Lo;0;L;;;;;N;;;;; +B775;HANGUL SYLLABLE DDING;Lo;0;L;;;;;N;;;;; +B776;HANGUL SYLLABLE DDIJ;Lo;0;L;;;;;N;;;;; +B777;HANGUL SYLLABLE DDIC;Lo;0;L;;;;;N;;;;; +B778;HANGUL SYLLABLE DDIK;Lo;0;L;;;;;N;;;;; +B779;HANGUL SYLLABLE DDIT;Lo;0;L;;;;;N;;;;; +B77A;HANGUL SYLLABLE DDIP;Lo;0;L;;;;;N;;;;; +B77B;HANGUL SYLLABLE DDIH;Lo;0;L;;;;;N;;;;; +B77C;HANGUL SYLLABLE RA;Lo;0;L;;;;;N;;;;; +B77D;HANGUL SYLLABLE RAG;Lo;0;L;;;;;N;;;;; +B77E;HANGUL SYLLABLE RAGG;Lo;0;L;;;;;N;;;;; +B77F;HANGUL SYLLABLE RAGS;Lo;0;L;;;;;N;;;;; +B780;HANGUL SYLLABLE RAN;Lo;0;L;;;;;N;;;;; +B781;HANGUL SYLLABLE RANI;Lo;0;L;;;;;N;;;;; +B782;HANGUL SYLLABLE RANH;Lo;0;L;;;;;N;;;;; +B783;HANGUL SYLLABLE RAD;Lo;0;L;;;;;N;;;;; +B784;HANGUL SYLLABLE RAL;Lo;0;L;;;;;N;;;;; +B785;HANGUL SYLLABLE RALG;Lo;0;L;;;;;N;;;;; +B786;HANGUL SYLLABLE RALM;Lo;0;L;;;;;N;;;;; +B787;HANGUL SYLLABLE RALB;Lo;0;L;;;;;N;;;;; +B788;HANGUL SYLLABLE RALS;Lo;0;L;;;;;N;;;;; +B789;HANGUL SYLLABLE RALT;Lo;0;L;;;;;N;;;;; +B78A;HANGUL SYLLABLE RALP;Lo;0;L;;;;;N;;;;; +B78B;HANGUL SYLLABLE RALH;Lo;0;L;;;;;N;;;;; +B78C;HANGUL SYLLABLE RAM;Lo;0;L;;;;;N;;;;; +B78D;HANGUL SYLLABLE RAB;Lo;0;L;;;;;N;;;;; +B78E;HANGUL SYLLABLE RABS;Lo;0;L;;;;;N;;;;; +B78F;HANGUL SYLLABLE RAS;Lo;0;L;;;;;N;;;;; +B790;HANGUL SYLLABLE RASS;Lo;0;L;;;;;N;;;;; +B791;HANGUL SYLLABLE RANG;Lo;0;L;;;;;N;;;;; +B792;HANGUL SYLLABLE RAJ;Lo;0;L;;;;;N;;;;; +B793;HANGUL SYLLABLE RAC;Lo;0;L;;;;;N;;;;; +B794;HANGUL SYLLABLE RAK;Lo;0;L;;;;;N;;;;; +B795;HANGUL SYLLABLE RAT;Lo;0;L;;;;;N;;;;; +B796;HANGUL SYLLABLE RAP;Lo;0;L;;;;;N;;;;; +B797;HANGUL SYLLABLE RAH;Lo;0;L;;;;;N;;;;; +B798;HANGUL SYLLABLE RAE;Lo;0;L;;;;;N;;;;; +B799;HANGUL SYLLABLE RAEG;Lo;0;L;;;;;N;;;;; +B79A;HANGUL SYLLABLE RAEGG;Lo;0;L;;;;;N;;;;; +B79B;HANGUL SYLLABLE RAEGS;Lo;0;L;;;;;N;;;;; +B79C;HANGUL SYLLABLE RAEN;Lo;0;L;;;;;N;;;;; +B79D;HANGUL SYLLABLE RAENI;Lo;0;L;;;;;N;;;;; +B79E;HANGUL SYLLABLE RAENH;Lo;0;L;;;;;N;;;;; +B79F;HANGUL SYLLABLE RAED;Lo;0;L;;;;;N;;;;; +B7A0;HANGUL SYLLABLE RAEL;Lo;0;L;;;;;N;;;;; +B7A1;HANGUL SYLLABLE RAELG;Lo;0;L;;;;;N;;;;; +B7A2;HANGUL SYLLABLE RAELM;Lo;0;L;;;;;N;;;;; +B7A3;HANGUL SYLLABLE RAELB;Lo;0;L;;;;;N;;;;; +B7A4;HANGUL SYLLABLE RAELS;Lo;0;L;;;;;N;;;;; +B7A5;HANGUL SYLLABLE RAELT;Lo;0;L;;;;;N;;;;; +B7A6;HANGUL SYLLABLE RAELP;Lo;0;L;;;;;N;;;;; +B7A7;HANGUL SYLLABLE RAELH;Lo;0;L;;;;;N;;;;; +B7A8;HANGUL SYLLABLE RAEM;Lo;0;L;;;;;N;;;;; +B7A9;HANGUL SYLLABLE RAEB;Lo;0;L;;;;;N;;;;; +B7AA;HANGUL SYLLABLE RAEBS;Lo;0;L;;;;;N;;;;; +B7AB;HANGUL SYLLABLE RAES;Lo;0;L;;;;;N;;;;; +B7AC;HANGUL SYLLABLE RAESS;Lo;0;L;;;;;N;;;;; +B7AD;HANGUL SYLLABLE RAENG;Lo;0;L;;;;;N;;;;; +B7AE;HANGUL SYLLABLE RAEJ;Lo;0;L;;;;;N;;;;; +B7AF;HANGUL SYLLABLE RAEC;Lo;0;L;;;;;N;;;;; +B7B0;HANGUL SYLLABLE RAEK;Lo;0;L;;;;;N;;;;; +B7B1;HANGUL SYLLABLE RAET;Lo;0;L;;;;;N;;;;; +B7B2;HANGUL SYLLABLE RAEP;Lo;0;L;;;;;N;;;;; +B7B3;HANGUL SYLLABLE RAEH;Lo;0;L;;;;;N;;;;; +B7B4;HANGUL SYLLABLE RYA;Lo;0;L;;;;;N;;;;; +B7B5;HANGUL SYLLABLE RYAG;Lo;0;L;;;;;N;;;;; +B7B6;HANGUL SYLLABLE RYAGG;Lo;0;L;;;;;N;;;;; +B7B7;HANGUL SYLLABLE RYAGS;Lo;0;L;;;;;N;;;;; +B7B8;HANGUL SYLLABLE RYAN;Lo;0;L;;;;;N;;;;; +B7B9;HANGUL SYLLABLE RYANI;Lo;0;L;;;;;N;;;;; +B7BA;HANGUL SYLLABLE RYANH;Lo;0;L;;;;;N;;;;; +B7BB;HANGUL SYLLABLE RYAD;Lo;0;L;;;;;N;;;;; +B7BC;HANGUL SYLLABLE RYAL;Lo;0;L;;;;;N;;;;; +B7BD;HANGUL SYLLABLE RYALG;Lo;0;L;;;;;N;;;;; +B7BE;HANGUL SYLLABLE RYALM;Lo;0;L;;;;;N;;;;; +B7BF;HANGUL SYLLABLE RYALB;Lo;0;L;;;;;N;;;;; +B7C0;HANGUL SYLLABLE RYALS;Lo;0;L;;;;;N;;;;; +B7C1;HANGUL SYLLABLE RYALT;Lo;0;L;;;;;N;;;;; +B7C2;HANGUL SYLLABLE RYALP;Lo;0;L;;;;;N;;;;; +B7C3;HANGUL SYLLABLE RYALH;Lo;0;L;;;;;N;;;;; +B7C4;HANGUL SYLLABLE RYAM;Lo;0;L;;;;;N;;;;; +B7C5;HANGUL SYLLABLE RYAB;Lo;0;L;;;;;N;;;;; +B7C6;HANGUL SYLLABLE RYABS;Lo;0;L;;;;;N;;;;; +B7C7;HANGUL SYLLABLE RYAS;Lo;0;L;;;;;N;;;;; +B7C8;HANGUL SYLLABLE RYASS;Lo;0;L;;;;;N;;;;; +B7C9;HANGUL SYLLABLE RYANG;Lo;0;L;;;;;N;;;;; +B7CA;HANGUL SYLLABLE RYAJ;Lo;0;L;;;;;N;;;;; +B7CB;HANGUL SYLLABLE RYAC;Lo;0;L;;;;;N;;;;; +B7CC;HANGUL SYLLABLE RYAK;Lo;0;L;;;;;N;;;;; +B7CD;HANGUL SYLLABLE RYAT;Lo;0;L;;;;;N;;;;; +B7CE;HANGUL SYLLABLE RYAP;Lo;0;L;;;;;N;;;;; +B7CF;HANGUL SYLLABLE RYAH;Lo;0;L;;;;;N;;;;; +B7D0;HANGUL SYLLABLE RYAE;Lo;0;L;;;;;N;;;;; +B7D1;HANGUL SYLLABLE RYAEG;Lo;0;L;;;;;N;;;;; +B7D2;HANGUL SYLLABLE RYAEGG;Lo;0;L;;;;;N;;;;; +B7D3;HANGUL SYLLABLE RYAEGS;Lo;0;L;;;;;N;;;;; +B7D4;HANGUL SYLLABLE RYAEN;Lo;0;L;;;;;N;;;;; +B7D5;HANGUL SYLLABLE RYAENI;Lo;0;L;;;;;N;;;;; +B7D6;HANGUL SYLLABLE RYAENH;Lo;0;L;;;;;N;;;;; +B7D7;HANGUL SYLLABLE RYAED;Lo;0;L;;;;;N;;;;; +B7D8;HANGUL SYLLABLE RYAEL;Lo;0;L;;;;;N;;;;; +B7D9;HANGUL SYLLABLE RYAELG;Lo;0;L;;;;;N;;;;; +B7DA;HANGUL SYLLABLE RYAELM;Lo;0;L;;;;;N;;;;; +B7DB;HANGUL SYLLABLE RYAELB;Lo;0;L;;;;;N;;;;; +B7DC;HANGUL SYLLABLE RYAELS;Lo;0;L;;;;;N;;;;; +B7DD;HANGUL SYLLABLE RYAELT;Lo;0;L;;;;;N;;;;; +B7DE;HANGUL SYLLABLE RYAELP;Lo;0;L;;;;;N;;;;; +B7DF;HANGUL SYLLABLE RYAELH;Lo;0;L;;;;;N;;;;; +B7E0;HANGUL SYLLABLE RYAEM;Lo;0;L;;;;;N;;;;; +B7E1;HANGUL SYLLABLE RYAEB;Lo;0;L;;;;;N;;;;; +B7E2;HANGUL SYLLABLE RYAEBS;Lo;0;L;;;;;N;;;;; +B7E3;HANGUL SYLLABLE RYAES;Lo;0;L;;;;;N;;;;; +B7E4;HANGUL SYLLABLE RYAESS;Lo;0;L;;;;;N;;;;; +B7E5;HANGUL SYLLABLE RYAENG;Lo;0;L;;;;;N;;;;; +B7E6;HANGUL SYLLABLE RYAEJ;Lo;0;L;;;;;N;;;;; +B7E7;HANGUL SYLLABLE RYAEC;Lo;0;L;;;;;N;;;;; +B7E8;HANGUL SYLLABLE RYAEK;Lo;0;L;;;;;N;;;;; +B7E9;HANGUL SYLLABLE RYAET;Lo;0;L;;;;;N;;;;; +B7EA;HANGUL SYLLABLE RYAEP;Lo;0;L;;;;;N;;;;; +B7EB;HANGUL SYLLABLE RYAEH;Lo;0;L;;;;;N;;;;; +B7EC;HANGUL SYLLABLE REO;Lo;0;L;;;;;N;;;;; +B7ED;HANGUL SYLLABLE REOG;Lo;0;L;;;;;N;;;;; +B7EE;HANGUL SYLLABLE REOGG;Lo;0;L;;;;;N;;;;; +B7EF;HANGUL SYLLABLE REOGS;Lo;0;L;;;;;N;;;;; +B7F0;HANGUL SYLLABLE REON;Lo;0;L;;;;;N;;;;; +B7F1;HANGUL SYLLABLE REONI;Lo;0;L;;;;;N;;;;; +B7F2;HANGUL SYLLABLE REONH;Lo;0;L;;;;;N;;;;; +B7F3;HANGUL SYLLABLE REOD;Lo;0;L;;;;;N;;;;; +B7F4;HANGUL SYLLABLE REOL;Lo;0;L;;;;;N;;;;; +B7F5;HANGUL SYLLABLE REOLG;Lo;0;L;;;;;N;;;;; +B7F6;HANGUL SYLLABLE REOLM;Lo;0;L;;;;;N;;;;; +B7F7;HANGUL SYLLABLE REOLB;Lo;0;L;;;;;N;;;;; +B7F8;HANGUL SYLLABLE REOLS;Lo;0;L;;;;;N;;;;; +B7F9;HANGUL SYLLABLE REOLT;Lo;0;L;;;;;N;;;;; +B7FA;HANGUL SYLLABLE REOLP;Lo;0;L;;;;;N;;;;; +B7FB;HANGUL SYLLABLE REOLH;Lo;0;L;;;;;N;;;;; +B7FC;HANGUL SYLLABLE REOM;Lo;0;L;;;;;N;;;;; +B7FD;HANGUL SYLLABLE REOB;Lo;0;L;;;;;N;;;;; +B7FE;HANGUL SYLLABLE REOBS;Lo;0;L;;;;;N;;;;; +B7FF;HANGUL SYLLABLE REOS;Lo;0;L;;;;;N;;;;; +B800;HANGUL SYLLABLE REOSS;Lo;0;L;;;;;N;;;;; +B801;HANGUL SYLLABLE REONG;Lo;0;L;;;;;N;;;;; +B802;HANGUL SYLLABLE REOJ;Lo;0;L;;;;;N;;;;; +B803;HANGUL SYLLABLE REOC;Lo;0;L;;;;;N;;;;; +B804;HANGUL SYLLABLE REOK;Lo;0;L;;;;;N;;;;; +B805;HANGUL SYLLABLE REOT;Lo;0;L;;;;;N;;;;; +B806;HANGUL SYLLABLE REOP;Lo;0;L;;;;;N;;;;; +B807;HANGUL SYLLABLE REOH;Lo;0;L;;;;;N;;;;; +B808;HANGUL SYLLABLE RE;Lo;0;L;;;;;N;;;;; +B809;HANGUL SYLLABLE REG;Lo;0;L;;;;;N;;;;; +B80A;HANGUL SYLLABLE REGG;Lo;0;L;;;;;N;;;;; +B80B;HANGUL SYLLABLE REGS;Lo;0;L;;;;;N;;;;; +B80C;HANGUL SYLLABLE REN;Lo;0;L;;;;;N;;;;; +B80D;HANGUL SYLLABLE RENI;Lo;0;L;;;;;N;;;;; +B80E;HANGUL SYLLABLE RENH;Lo;0;L;;;;;N;;;;; +B80F;HANGUL SYLLABLE RED;Lo;0;L;;;;;N;;;;; +B810;HANGUL SYLLABLE REL;Lo;0;L;;;;;N;;;;; +B811;HANGUL SYLLABLE RELG;Lo;0;L;;;;;N;;;;; +B812;HANGUL SYLLABLE RELM;Lo;0;L;;;;;N;;;;; +B813;HANGUL SYLLABLE RELB;Lo;0;L;;;;;N;;;;; +B814;HANGUL SYLLABLE RELS;Lo;0;L;;;;;N;;;;; +B815;HANGUL SYLLABLE RELT;Lo;0;L;;;;;N;;;;; +B816;HANGUL SYLLABLE RELP;Lo;0;L;;;;;N;;;;; +B817;HANGUL SYLLABLE RELH;Lo;0;L;;;;;N;;;;; +B818;HANGUL SYLLABLE REM;Lo;0;L;;;;;N;;;;; +B819;HANGUL SYLLABLE REB;Lo;0;L;;;;;N;;;;; +B81A;HANGUL SYLLABLE REBS;Lo;0;L;;;;;N;;;;; +B81B;HANGUL SYLLABLE RES;Lo;0;L;;;;;N;;;;; +B81C;HANGUL SYLLABLE RESS;Lo;0;L;;;;;N;;;;; +B81D;HANGUL SYLLABLE RENG;Lo;0;L;;;;;N;;;;; +B81E;HANGUL SYLLABLE REJ;Lo;0;L;;;;;N;;;;; +B81F;HANGUL SYLLABLE REC;Lo;0;L;;;;;N;;;;; +B820;HANGUL SYLLABLE REK;Lo;0;L;;;;;N;;;;; +B821;HANGUL SYLLABLE RET;Lo;0;L;;;;;N;;;;; +B822;HANGUL SYLLABLE REP;Lo;0;L;;;;;N;;;;; +B823;HANGUL SYLLABLE REH;Lo;0;L;;;;;N;;;;; +B824;HANGUL SYLLABLE RYEO;Lo;0;L;;;;;N;;;;; +B825;HANGUL SYLLABLE RYEOG;Lo;0;L;;;;;N;;;;; +B826;HANGUL SYLLABLE RYEOGG;Lo;0;L;;;;;N;;;;; +B827;HANGUL SYLLABLE RYEOGS;Lo;0;L;;;;;N;;;;; +B828;HANGUL SYLLABLE RYEON;Lo;0;L;;;;;N;;;;; +B829;HANGUL SYLLABLE RYEONI;Lo;0;L;;;;;N;;;;; +B82A;HANGUL SYLLABLE RYEONH;Lo;0;L;;;;;N;;;;; +B82B;HANGUL SYLLABLE RYEOD;Lo;0;L;;;;;N;;;;; +B82C;HANGUL SYLLABLE RYEOL;Lo;0;L;;;;;N;;;;; +B82D;HANGUL SYLLABLE RYEOLG;Lo;0;L;;;;;N;;;;; +B82E;HANGUL SYLLABLE RYEOLM;Lo;0;L;;;;;N;;;;; +B82F;HANGUL SYLLABLE RYEOLB;Lo;0;L;;;;;N;;;;; +B830;HANGUL SYLLABLE RYEOLS;Lo;0;L;;;;;N;;;;; +B831;HANGUL SYLLABLE RYEOLT;Lo;0;L;;;;;N;;;;; +B832;HANGUL SYLLABLE RYEOLP;Lo;0;L;;;;;N;;;;; +B833;HANGUL SYLLABLE RYEOLH;Lo;0;L;;;;;N;;;;; +B834;HANGUL SYLLABLE RYEOM;Lo;0;L;;;;;N;;;;; +B835;HANGUL SYLLABLE RYEOB;Lo;0;L;;;;;N;;;;; +B836;HANGUL SYLLABLE RYEOBS;Lo;0;L;;;;;N;;;;; +B837;HANGUL SYLLABLE RYEOS;Lo;0;L;;;;;N;;;;; +B838;HANGUL SYLLABLE RYEOSS;Lo;0;L;;;;;N;;;;; +B839;HANGUL SYLLABLE RYEONG;Lo;0;L;;;;;N;;;;; +B83A;HANGUL SYLLABLE RYEOJ;Lo;0;L;;;;;N;;;;; +B83B;HANGUL SYLLABLE RYEOC;Lo;0;L;;;;;N;;;;; +B83C;HANGUL SYLLABLE RYEOK;Lo;0;L;;;;;N;;;;; +B83D;HANGUL SYLLABLE RYEOT;Lo;0;L;;;;;N;;;;; +B83E;HANGUL SYLLABLE RYEOP;Lo;0;L;;;;;N;;;;; +B83F;HANGUL SYLLABLE RYEOH;Lo;0;L;;;;;N;;;;; +B840;HANGUL SYLLABLE RYE;Lo;0;L;;;;;N;;;;; +B841;HANGUL SYLLABLE RYEG;Lo;0;L;;;;;N;;;;; +B842;HANGUL SYLLABLE RYEGG;Lo;0;L;;;;;N;;;;; +B843;HANGUL SYLLABLE RYEGS;Lo;0;L;;;;;N;;;;; +B844;HANGUL SYLLABLE RYEN;Lo;0;L;;;;;N;;;;; +B845;HANGUL SYLLABLE RYENI;Lo;0;L;;;;;N;;;;; +B846;HANGUL SYLLABLE RYENH;Lo;0;L;;;;;N;;;;; +B847;HANGUL SYLLABLE RYED;Lo;0;L;;;;;N;;;;; +B848;HANGUL SYLLABLE RYEL;Lo;0;L;;;;;N;;;;; +B849;HANGUL SYLLABLE RYELG;Lo;0;L;;;;;N;;;;; +B84A;HANGUL SYLLABLE RYELM;Lo;0;L;;;;;N;;;;; +B84B;HANGUL SYLLABLE RYELB;Lo;0;L;;;;;N;;;;; +B84C;HANGUL SYLLABLE RYELS;Lo;0;L;;;;;N;;;;; +B84D;HANGUL SYLLABLE RYELT;Lo;0;L;;;;;N;;;;; +B84E;HANGUL SYLLABLE RYELP;Lo;0;L;;;;;N;;;;; +B84F;HANGUL SYLLABLE RYELH;Lo;0;L;;;;;N;;;;; +B850;HANGUL SYLLABLE RYEM;Lo;0;L;;;;;N;;;;; +B851;HANGUL SYLLABLE RYEB;Lo;0;L;;;;;N;;;;; +B852;HANGUL SYLLABLE RYEBS;Lo;0;L;;;;;N;;;;; +B853;HANGUL SYLLABLE RYES;Lo;0;L;;;;;N;;;;; +B854;HANGUL SYLLABLE RYESS;Lo;0;L;;;;;N;;;;; +B855;HANGUL SYLLABLE RYENG;Lo;0;L;;;;;N;;;;; +B856;HANGUL SYLLABLE RYEJ;Lo;0;L;;;;;N;;;;; +B857;HANGUL SYLLABLE RYEC;Lo;0;L;;;;;N;;;;; +B858;HANGUL SYLLABLE RYEK;Lo;0;L;;;;;N;;;;; +B859;HANGUL SYLLABLE RYET;Lo;0;L;;;;;N;;;;; +B85A;HANGUL SYLLABLE RYEP;Lo;0;L;;;;;N;;;;; +B85B;HANGUL SYLLABLE RYEH;Lo;0;L;;;;;N;;;;; +B85C;HANGUL SYLLABLE RO;Lo;0;L;;;;;N;;;;; +B85D;HANGUL SYLLABLE ROG;Lo;0;L;;;;;N;;;;; +B85E;HANGUL SYLLABLE ROGG;Lo;0;L;;;;;N;;;;; +B85F;HANGUL SYLLABLE ROGS;Lo;0;L;;;;;N;;;;; +B860;HANGUL SYLLABLE RON;Lo;0;L;;;;;N;;;;; +B861;HANGUL SYLLABLE RONI;Lo;0;L;;;;;N;;;;; +B862;HANGUL SYLLABLE RONH;Lo;0;L;;;;;N;;;;; +B863;HANGUL SYLLABLE ROD;Lo;0;L;;;;;N;;;;; +B864;HANGUL SYLLABLE ROL;Lo;0;L;;;;;N;;;;; +B865;HANGUL SYLLABLE ROLG;Lo;0;L;;;;;N;;;;; +B866;HANGUL SYLLABLE ROLM;Lo;0;L;;;;;N;;;;; +B867;HANGUL SYLLABLE ROLB;Lo;0;L;;;;;N;;;;; +B868;HANGUL SYLLABLE ROLS;Lo;0;L;;;;;N;;;;; +B869;HANGUL SYLLABLE ROLT;Lo;0;L;;;;;N;;;;; +B86A;HANGUL SYLLABLE ROLP;Lo;0;L;;;;;N;;;;; +B86B;HANGUL SYLLABLE ROLH;Lo;0;L;;;;;N;;;;; +B86C;HANGUL SYLLABLE ROM;Lo;0;L;;;;;N;;;;; +B86D;HANGUL SYLLABLE ROB;Lo;0;L;;;;;N;;;;; +B86E;HANGUL SYLLABLE ROBS;Lo;0;L;;;;;N;;;;; +B86F;HANGUL SYLLABLE ROS;Lo;0;L;;;;;N;;;;; +B870;HANGUL SYLLABLE ROSS;Lo;0;L;;;;;N;;;;; +B871;HANGUL SYLLABLE RONG;Lo;0;L;;;;;N;;;;; +B872;HANGUL SYLLABLE ROJ;Lo;0;L;;;;;N;;;;; +B873;HANGUL SYLLABLE ROC;Lo;0;L;;;;;N;;;;; +B874;HANGUL SYLLABLE ROK;Lo;0;L;;;;;N;;;;; +B875;HANGUL SYLLABLE ROT;Lo;0;L;;;;;N;;;;; +B876;HANGUL SYLLABLE ROP;Lo;0;L;;;;;N;;;;; +B877;HANGUL SYLLABLE ROH;Lo;0;L;;;;;N;;;;; +B878;HANGUL SYLLABLE RWA;Lo;0;L;;;;;N;;;;; +B879;HANGUL SYLLABLE RWAG;Lo;0;L;;;;;N;;;;; +B87A;HANGUL SYLLABLE RWAGG;Lo;0;L;;;;;N;;;;; +B87B;HANGUL SYLLABLE RWAGS;Lo;0;L;;;;;N;;;;; +B87C;HANGUL SYLLABLE RWAN;Lo;0;L;;;;;N;;;;; +B87D;HANGUL SYLLABLE RWANI;Lo;0;L;;;;;N;;;;; +B87E;HANGUL SYLLABLE RWANH;Lo;0;L;;;;;N;;;;; +B87F;HANGUL SYLLABLE RWAD;Lo;0;L;;;;;N;;;;; +B880;HANGUL SYLLABLE RWAL;Lo;0;L;;;;;N;;;;; +B881;HANGUL SYLLABLE RWALG;Lo;0;L;;;;;N;;;;; +B882;HANGUL SYLLABLE RWALM;Lo;0;L;;;;;N;;;;; +B883;HANGUL SYLLABLE RWALB;Lo;0;L;;;;;N;;;;; +B884;HANGUL SYLLABLE RWALS;Lo;0;L;;;;;N;;;;; +B885;HANGUL SYLLABLE RWALT;Lo;0;L;;;;;N;;;;; +B886;HANGUL SYLLABLE RWALP;Lo;0;L;;;;;N;;;;; +B887;HANGUL SYLLABLE RWALH;Lo;0;L;;;;;N;;;;; +B888;HANGUL SYLLABLE RWAM;Lo;0;L;;;;;N;;;;; +B889;HANGUL SYLLABLE RWAB;Lo;0;L;;;;;N;;;;; +B88A;HANGUL SYLLABLE RWABS;Lo;0;L;;;;;N;;;;; +B88B;HANGUL SYLLABLE RWAS;Lo;0;L;;;;;N;;;;; +B88C;HANGUL SYLLABLE RWASS;Lo;0;L;;;;;N;;;;; +B88D;HANGUL SYLLABLE RWANG;Lo;0;L;;;;;N;;;;; +B88E;HANGUL SYLLABLE RWAJ;Lo;0;L;;;;;N;;;;; +B88F;HANGUL SYLLABLE RWAC;Lo;0;L;;;;;N;;;;; +B890;HANGUL SYLLABLE RWAK;Lo;0;L;;;;;N;;;;; +B891;HANGUL SYLLABLE RWAT;Lo;0;L;;;;;N;;;;; +B892;HANGUL SYLLABLE RWAP;Lo;0;L;;;;;N;;;;; +B893;HANGUL SYLLABLE RWAH;Lo;0;L;;;;;N;;;;; +B894;HANGUL SYLLABLE RWAE;Lo;0;L;;;;;N;;;;; +B895;HANGUL SYLLABLE RWAEG;Lo;0;L;;;;;N;;;;; +B896;HANGUL SYLLABLE RWAEGG;Lo;0;L;;;;;N;;;;; +B897;HANGUL SYLLABLE RWAEGS;Lo;0;L;;;;;N;;;;; +B898;HANGUL SYLLABLE RWAEN;Lo;0;L;;;;;N;;;;; +B899;HANGUL SYLLABLE RWAENI;Lo;0;L;;;;;N;;;;; +B89A;HANGUL SYLLABLE RWAENH;Lo;0;L;;;;;N;;;;; +B89B;HANGUL SYLLABLE RWAED;Lo;0;L;;;;;N;;;;; +B89C;HANGUL SYLLABLE RWAEL;Lo;0;L;;;;;N;;;;; +B89D;HANGUL SYLLABLE RWAELG;Lo;0;L;;;;;N;;;;; +B89E;HANGUL SYLLABLE RWAELM;Lo;0;L;;;;;N;;;;; +B89F;HANGUL SYLLABLE RWAELB;Lo;0;L;;;;;N;;;;; +B8A0;HANGUL SYLLABLE RWAELS;Lo;0;L;;;;;N;;;;; +B8A1;HANGUL SYLLABLE RWAELT;Lo;0;L;;;;;N;;;;; +B8A2;HANGUL SYLLABLE RWAELP;Lo;0;L;;;;;N;;;;; +B8A3;HANGUL SYLLABLE RWAELH;Lo;0;L;;;;;N;;;;; +B8A4;HANGUL SYLLABLE RWAEM;Lo;0;L;;;;;N;;;;; +B8A5;HANGUL SYLLABLE RWAEB;Lo;0;L;;;;;N;;;;; +B8A6;HANGUL SYLLABLE RWAEBS;Lo;0;L;;;;;N;;;;; +B8A7;HANGUL SYLLABLE RWAES;Lo;0;L;;;;;N;;;;; +B8A8;HANGUL SYLLABLE RWAESS;Lo;0;L;;;;;N;;;;; +B8A9;HANGUL SYLLABLE RWAENG;Lo;0;L;;;;;N;;;;; +B8AA;HANGUL SYLLABLE RWAEJ;Lo;0;L;;;;;N;;;;; +B8AB;HANGUL SYLLABLE RWAEC;Lo;0;L;;;;;N;;;;; +B8AC;HANGUL SYLLABLE RWAEK;Lo;0;L;;;;;N;;;;; +B8AD;HANGUL SYLLABLE RWAET;Lo;0;L;;;;;N;;;;; +B8AE;HANGUL SYLLABLE RWAEP;Lo;0;L;;;;;N;;;;; +B8AF;HANGUL SYLLABLE RWAEH;Lo;0;L;;;;;N;;;;; +B8B0;HANGUL SYLLABLE ROE;Lo;0;L;;;;;N;;;;; +B8B1;HANGUL SYLLABLE ROEG;Lo;0;L;;;;;N;;;;; +B8B2;HANGUL SYLLABLE ROEGG;Lo;0;L;;;;;N;;;;; +B8B3;HANGUL SYLLABLE ROEGS;Lo;0;L;;;;;N;;;;; +B8B4;HANGUL SYLLABLE ROEN;Lo;0;L;;;;;N;;;;; +B8B5;HANGUL SYLLABLE ROENI;Lo;0;L;;;;;N;;;;; +B8B6;HANGUL SYLLABLE ROENH;Lo;0;L;;;;;N;;;;; +B8B7;HANGUL SYLLABLE ROED;Lo;0;L;;;;;N;;;;; +B8B8;HANGUL SYLLABLE ROEL;Lo;0;L;;;;;N;;;;; +B8B9;HANGUL SYLLABLE ROELG;Lo;0;L;;;;;N;;;;; +B8BA;HANGUL SYLLABLE ROELM;Lo;0;L;;;;;N;;;;; +B8BB;HANGUL SYLLABLE ROELB;Lo;0;L;;;;;N;;;;; +B8BC;HANGUL SYLLABLE ROELS;Lo;0;L;;;;;N;;;;; +B8BD;HANGUL SYLLABLE ROELT;Lo;0;L;;;;;N;;;;; +B8BE;HANGUL SYLLABLE ROELP;Lo;0;L;;;;;N;;;;; +B8BF;HANGUL SYLLABLE ROELH;Lo;0;L;;;;;N;;;;; +B8C0;HANGUL SYLLABLE ROEM;Lo;0;L;;;;;N;;;;; +B8C1;HANGUL SYLLABLE ROEB;Lo;0;L;;;;;N;;;;; +B8C2;HANGUL SYLLABLE ROEBS;Lo;0;L;;;;;N;;;;; +B8C3;HANGUL SYLLABLE ROES;Lo;0;L;;;;;N;;;;; +B8C4;HANGUL SYLLABLE ROESS;Lo;0;L;;;;;N;;;;; +B8C5;HANGUL SYLLABLE ROENG;Lo;0;L;;;;;N;;;;; +B8C6;HANGUL SYLLABLE ROEJ;Lo;0;L;;;;;N;;;;; +B8C7;HANGUL SYLLABLE ROEC;Lo;0;L;;;;;N;;;;; +B8C8;HANGUL SYLLABLE ROEK;Lo;0;L;;;;;N;;;;; +B8C9;HANGUL SYLLABLE ROET;Lo;0;L;;;;;N;;;;; +B8CA;HANGUL SYLLABLE ROEP;Lo;0;L;;;;;N;;;;; +B8CB;HANGUL SYLLABLE ROEH;Lo;0;L;;;;;N;;;;; +B8CC;HANGUL SYLLABLE RYO;Lo;0;L;;;;;N;;;;; +B8CD;HANGUL SYLLABLE RYOG;Lo;0;L;;;;;N;;;;; +B8CE;HANGUL SYLLABLE RYOGG;Lo;0;L;;;;;N;;;;; +B8CF;HANGUL SYLLABLE RYOGS;Lo;0;L;;;;;N;;;;; +B8D0;HANGUL SYLLABLE RYON;Lo;0;L;;;;;N;;;;; +B8D1;HANGUL SYLLABLE RYONI;Lo;0;L;;;;;N;;;;; +B8D2;HANGUL SYLLABLE RYONH;Lo;0;L;;;;;N;;;;; +B8D3;HANGUL SYLLABLE RYOD;Lo;0;L;;;;;N;;;;; +B8D4;HANGUL SYLLABLE RYOL;Lo;0;L;;;;;N;;;;; +B8D5;HANGUL SYLLABLE RYOLG;Lo;0;L;;;;;N;;;;; +B8D6;HANGUL SYLLABLE RYOLM;Lo;0;L;;;;;N;;;;; +B8D7;HANGUL SYLLABLE RYOLB;Lo;0;L;;;;;N;;;;; +B8D8;HANGUL SYLLABLE RYOLS;Lo;0;L;;;;;N;;;;; +B8D9;HANGUL SYLLABLE RYOLT;Lo;0;L;;;;;N;;;;; +B8DA;HANGUL SYLLABLE RYOLP;Lo;0;L;;;;;N;;;;; +B8DB;HANGUL SYLLABLE RYOLH;Lo;0;L;;;;;N;;;;; +B8DC;HANGUL SYLLABLE RYOM;Lo;0;L;;;;;N;;;;; +B8DD;HANGUL SYLLABLE RYOB;Lo;0;L;;;;;N;;;;; +B8DE;HANGUL SYLLABLE RYOBS;Lo;0;L;;;;;N;;;;; +B8DF;HANGUL SYLLABLE RYOS;Lo;0;L;;;;;N;;;;; +B8E0;HANGUL SYLLABLE RYOSS;Lo;0;L;;;;;N;;;;; +B8E1;HANGUL SYLLABLE RYONG;Lo;0;L;;;;;N;;;;; +B8E2;HANGUL SYLLABLE RYOJ;Lo;0;L;;;;;N;;;;; +B8E3;HANGUL SYLLABLE RYOC;Lo;0;L;;;;;N;;;;; +B8E4;HANGUL SYLLABLE RYOK;Lo;0;L;;;;;N;;;;; +B8E5;HANGUL SYLLABLE RYOT;Lo;0;L;;;;;N;;;;; +B8E6;HANGUL SYLLABLE RYOP;Lo;0;L;;;;;N;;;;; +B8E7;HANGUL SYLLABLE RYOH;Lo;0;L;;;;;N;;;;; +B8E8;HANGUL SYLLABLE RU;Lo;0;L;;;;;N;;;;; +B8E9;HANGUL SYLLABLE RUG;Lo;0;L;;;;;N;;;;; +B8EA;HANGUL SYLLABLE RUGG;Lo;0;L;;;;;N;;;;; +B8EB;HANGUL SYLLABLE RUGS;Lo;0;L;;;;;N;;;;; +B8EC;HANGUL SYLLABLE RUN;Lo;0;L;;;;;N;;;;; +B8ED;HANGUL SYLLABLE RUNI;Lo;0;L;;;;;N;;;;; +B8EE;HANGUL SYLLABLE RUNH;Lo;0;L;;;;;N;;;;; +B8EF;HANGUL SYLLABLE RUD;Lo;0;L;;;;;N;;;;; +B8F0;HANGUL SYLLABLE RUL;Lo;0;L;;;;;N;;;;; +B8F1;HANGUL SYLLABLE RULG;Lo;0;L;;;;;N;;;;; +B8F2;HANGUL SYLLABLE RULM;Lo;0;L;;;;;N;;;;; +B8F3;HANGUL SYLLABLE RULB;Lo;0;L;;;;;N;;;;; +B8F4;HANGUL SYLLABLE RULS;Lo;0;L;;;;;N;;;;; +B8F5;HANGUL SYLLABLE RULT;Lo;0;L;;;;;N;;;;; +B8F6;HANGUL SYLLABLE RULP;Lo;0;L;;;;;N;;;;; +B8F7;HANGUL SYLLABLE RULH;Lo;0;L;;;;;N;;;;; +B8F8;HANGUL SYLLABLE RUM;Lo;0;L;;;;;N;;;;; +B8F9;HANGUL SYLLABLE RUB;Lo;0;L;;;;;N;;;;; +B8FA;HANGUL SYLLABLE RUBS;Lo;0;L;;;;;N;;;;; +B8FB;HANGUL SYLLABLE RUS;Lo;0;L;;;;;N;;;;; +B8FC;HANGUL SYLLABLE RUSS;Lo;0;L;;;;;N;;;;; +B8FD;HANGUL SYLLABLE RUNG;Lo;0;L;;;;;N;;;;; +B8FE;HANGUL SYLLABLE RUJ;Lo;0;L;;;;;N;;;;; +B8FF;HANGUL SYLLABLE RUC;Lo;0;L;;;;;N;;;;; +B900;HANGUL SYLLABLE RUK;Lo;0;L;;;;;N;;;;; +B901;HANGUL SYLLABLE RUT;Lo;0;L;;;;;N;;;;; +B902;HANGUL SYLLABLE RUP;Lo;0;L;;;;;N;;;;; +B903;HANGUL SYLLABLE RUH;Lo;0;L;;;;;N;;;;; +B904;HANGUL SYLLABLE RWEO;Lo;0;L;;;;;N;;;;; +B905;HANGUL SYLLABLE RWEOG;Lo;0;L;;;;;N;;;;; +B906;HANGUL SYLLABLE RWEOGG;Lo;0;L;;;;;N;;;;; +B907;HANGUL SYLLABLE RWEOGS;Lo;0;L;;;;;N;;;;; +B908;HANGUL SYLLABLE RWEON;Lo;0;L;;;;;N;;;;; +B909;HANGUL SYLLABLE RWEONI;Lo;0;L;;;;;N;;;;; +B90A;HANGUL SYLLABLE RWEONH;Lo;0;L;;;;;N;;;;; +B90B;HANGUL SYLLABLE RWEOD;Lo;0;L;;;;;N;;;;; +B90C;HANGUL SYLLABLE RWEOL;Lo;0;L;;;;;N;;;;; +B90D;HANGUL SYLLABLE RWEOLG;Lo;0;L;;;;;N;;;;; +B90E;HANGUL SYLLABLE RWEOLM;Lo;0;L;;;;;N;;;;; +B90F;HANGUL SYLLABLE RWEOLB;Lo;0;L;;;;;N;;;;; +B910;HANGUL SYLLABLE RWEOLS;Lo;0;L;;;;;N;;;;; +B911;HANGUL SYLLABLE RWEOLT;Lo;0;L;;;;;N;;;;; +B912;HANGUL SYLLABLE RWEOLP;Lo;0;L;;;;;N;;;;; +B913;HANGUL SYLLABLE RWEOLH;Lo;0;L;;;;;N;;;;; +B914;HANGUL SYLLABLE RWEOM;Lo;0;L;;;;;N;;;;; +B915;HANGUL SYLLABLE RWEOB;Lo;0;L;;;;;N;;;;; +B916;HANGUL SYLLABLE RWEOBS;Lo;0;L;;;;;N;;;;; +B917;HANGUL SYLLABLE RWEOS;Lo;0;L;;;;;N;;;;; +B918;HANGUL SYLLABLE RWEOSS;Lo;0;L;;;;;N;;;;; +B919;HANGUL SYLLABLE RWEONG;Lo;0;L;;;;;N;;;;; +B91A;HANGUL SYLLABLE RWEOJ;Lo;0;L;;;;;N;;;;; +B91B;HANGUL SYLLABLE RWEOC;Lo;0;L;;;;;N;;;;; +B91C;HANGUL SYLLABLE RWEOK;Lo;0;L;;;;;N;;;;; +B91D;HANGUL SYLLABLE RWEOT;Lo;0;L;;;;;N;;;;; +B91E;HANGUL SYLLABLE RWEOP;Lo;0;L;;;;;N;;;;; +B91F;HANGUL SYLLABLE RWEOH;Lo;0;L;;;;;N;;;;; +B920;HANGUL SYLLABLE RWE;Lo;0;L;;;;;N;;;;; +B921;HANGUL SYLLABLE RWEG;Lo;0;L;;;;;N;;;;; +B922;HANGUL SYLLABLE RWEGG;Lo;0;L;;;;;N;;;;; +B923;HANGUL SYLLABLE RWEGS;Lo;0;L;;;;;N;;;;; +B924;HANGUL SYLLABLE RWEN;Lo;0;L;;;;;N;;;;; +B925;HANGUL SYLLABLE RWENI;Lo;0;L;;;;;N;;;;; +B926;HANGUL SYLLABLE RWENH;Lo;0;L;;;;;N;;;;; +B927;HANGUL SYLLABLE RWED;Lo;0;L;;;;;N;;;;; +B928;HANGUL SYLLABLE RWEL;Lo;0;L;;;;;N;;;;; +B929;HANGUL SYLLABLE RWELG;Lo;0;L;;;;;N;;;;; +B92A;HANGUL SYLLABLE RWELM;Lo;0;L;;;;;N;;;;; +B92B;HANGUL SYLLABLE RWELB;Lo;0;L;;;;;N;;;;; +B92C;HANGUL SYLLABLE RWELS;Lo;0;L;;;;;N;;;;; +B92D;HANGUL SYLLABLE RWELT;Lo;0;L;;;;;N;;;;; +B92E;HANGUL SYLLABLE RWELP;Lo;0;L;;;;;N;;;;; +B92F;HANGUL SYLLABLE RWELH;Lo;0;L;;;;;N;;;;; +B930;HANGUL SYLLABLE RWEM;Lo;0;L;;;;;N;;;;; +B931;HANGUL SYLLABLE RWEB;Lo;0;L;;;;;N;;;;; +B932;HANGUL SYLLABLE RWEBS;Lo;0;L;;;;;N;;;;; +B933;HANGUL SYLLABLE RWES;Lo;0;L;;;;;N;;;;; +B934;HANGUL SYLLABLE RWESS;Lo;0;L;;;;;N;;;;; +B935;HANGUL SYLLABLE RWENG;Lo;0;L;;;;;N;;;;; +B936;HANGUL SYLLABLE RWEJ;Lo;0;L;;;;;N;;;;; +B937;HANGUL SYLLABLE RWEC;Lo;0;L;;;;;N;;;;; +B938;HANGUL SYLLABLE RWEK;Lo;0;L;;;;;N;;;;; +B939;HANGUL SYLLABLE RWET;Lo;0;L;;;;;N;;;;; +B93A;HANGUL SYLLABLE RWEP;Lo;0;L;;;;;N;;;;; +B93B;HANGUL SYLLABLE RWEH;Lo;0;L;;;;;N;;;;; +B93C;HANGUL SYLLABLE RWI;Lo;0;L;;;;;N;;;;; +B93D;HANGUL SYLLABLE RWIG;Lo;0;L;;;;;N;;;;; +B93E;HANGUL SYLLABLE RWIGG;Lo;0;L;;;;;N;;;;; +B93F;HANGUL SYLLABLE RWIGS;Lo;0;L;;;;;N;;;;; +B940;HANGUL SYLLABLE RWIN;Lo;0;L;;;;;N;;;;; +B941;HANGUL SYLLABLE RWINI;Lo;0;L;;;;;N;;;;; +B942;HANGUL SYLLABLE RWINH;Lo;0;L;;;;;N;;;;; +B943;HANGUL SYLLABLE RWID;Lo;0;L;;;;;N;;;;; +B944;HANGUL SYLLABLE RWIL;Lo;0;L;;;;;N;;;;; +B945;HANGUL SYLLABLE RWILG;Lo;0;L;;;;;N;;;;; +B946;HANGUL SYLLABLE RWILM;Lo;0;L;;;;;N;;;;; +B947;HANGUL SYLLABLE RWILB;Lo;0;L;;;;;N;;;;; +B948;HANGUL SYLLABLE RWILS;Lo;0;L;;;;;N;;;;; +B949;HANGUL SYLLABLE RWILT;Lo;0;L;;;;;N;;;;; +B94A;HANGUL SYLLABLE RWILP;Lo;0;L;;;;;N;;;;; +B94B;HANGUL SYLLABLE RWILH;Lo;0;L;;;;;N;;;;; +B94C;HANGUL SYLLABLE RWIM;Lo;0;L;;;;;N;;;;; +B94D;HANGUL SYLLABLE RWIB;Lo;0;L;;;;;N;;;;; +B94E;HANGUL SYLLABLE RWIBS;Lo;0;L;;;;;N;;;;; +B94F;HANGUL SYLLABLE RWIS;Lo;0;L;;;;;N;;;;; +B950;HANGUL SYLLABLE RWISS;Lo;0;L;;;;;N;;;;; +B951;HANGUL SYLLABLE RWING;Lo;0;L;;;;;N;;;;; +B952;HANGUL SYLLABLE RWIJ;Lo;0;L;;;;;N;;;;; +B953;HANGUL SYLLABLE RWIC;Lo;0;L;;;;;N;;;;; +B954;HANGUL SYLLABLE RWIK;Lo;0;L;;;;;N;;;;; +B955;HANGUL SYLLABLE RWIT;Lo;0;L;;;;;N;;;;; +B956;HANGUL SYLLABLE RWIP;Lo;0;L;;;;;N;;;;; +B957;HANGUL SYLLABLE RWIH;Lo;0;L;;;;;N;;;;; +B958;HANGUL SYLLABLE RYU;Lo;0;L;;;;;N;;;;; +B959;HANGUL SYLLABLE RYUG;Lo;0;L;;;;;N;;;;; +B95A;HANGUL SYLLABLE RYUGG;Lo;0;L;;;;;N;;;;; +B95B;HANGUL SYLLABLE RYUGS;Lo;0;L;;;;;N;;;;; +B95C;HANGUL SYLLABLE RYUN;Lo;0;L;;;;;N;;;;; +B95D;HANGUL SYLLABLE RYUNI;Lo;0;L;;;;;N;;;;; +B95E;HANGUL SYLLABLE RYUNH;Lo;0;L;;;;;N;;;;; +B95F;HANGUL SYLLABLE RYUD;Lo;0;L;;;;;N;;;;; +B960;HANGUL SYLLABLE RYUL;Lo;0;L;;;;;N;;;;; +B961;HANGUL SYLLABLE RYULG;Lo;0;L;;;;;N;;;;; +B962;HANGUL SYLLABLE RYULM;Lo;0;L;;;;;N;;;;; +B963;HANGUL SYLLABLE RYULB;Lo;0;L;;;;;N;;;;; +B964;HANGUL SYLLABLE RYULS;Lo;0;L;;;;;N;;;;; +B965;HANGUL SYLLABLE RYULT;Lo;0;L;;;;;N;;;;; +B966;HANGUL SYLLABLE RYULP;Lo;0;L;;;;;N;;;;; +B967;HANGUL SYLLABLE RYULH;Lo;0;L;;;;;N;;;;; +B968;HANGUL SYLLABLE RYUM;Lo;0;L;;;;;N;;;;; +B969;HANGUL SYLLABLE RYUB;Lo;0;L;;;;;N;;;;; +B96A;HANGUL SYLLABLE RYUBS;Lo;0;L;;;;;N;;;;; +B96B;HANGUL SYLLABLE RYUS;Lo;0;L;;;;;N;;;;; +B96C;HANGUL SYLLABLE RYUSS;Lo;0;L;;;;;N;;;;; +B96D;HANGUL SYLLABLE RYUNG;Lo;0;L;;;;;N;;;;; +B96E;HANGUL SYLLABLE RYUJ;Lo;0;L;;;;;N;;;;; +B96F;HANGUL SYLLABLE RYUC;Lo;0;L;;;;;N;;;;; +B970;HANGUL SYLLABLE RYUK;Lo;0;L;;;;;N;;;;; +B971;HANGUL SYLLABLE RYUT;Lo;0;L;;;;;N;;;;; +B972;HANGUL SYLLABLE RYUP;Lo;0;L;;;;;N;;;;; +B973;HANGUL SYLLABLE RYUH;Lo;0;L;;;;;N;;;;; +B974;HANGUL SYLLABLE REU;Lo;0;L;;;;;N;;;;; +B975;HANGUL SYLLABLE REUG;Lo;0;L;;;;;N;;;;; +B976;HANGUL SYLLABLE REUGG;Lo;0;L;;;;;N;;;;; +B977;HANGUL SYLLABLE REUGS;Lo;0;L;;;;;N;;;;; +B978;HANGUL SYLLABLE REUN;Lo;0;L;;;;;N;;;;; +B979;HANGUL SYLLABLE REUNI;Lo;0;L;;;;;N;;;;; +B97A;HANGUL SYLLABLE REUNH;Lo;0;L;;;;;N;;;;; +B97B;HANGUL SYLLABLE REUD;Lo;0;L;;;;;N;;;;; +B97C;HANGUL SYLLABLE REUL;Lo;0;L;;;;;N;;;;; +B97D;HANGUL SYLLABLE REULG;Lo;0;L;;;;;N;;;;; +B97E;HANGUL SYLLABLE REULM;Lo;0;L;;;;;N;;;;; +B97F;HANGUL SYLLABLE REULB;Lo;0;L;;;;;N;;;;; +B980;HANGUL SYLLABLE REULS;Lo;0;L;;;;;N;;;;; +B981;HANGUL SYLLABLE REULT;Lo;0;L;;;;;N;;;;; +B982;HANGUL SYLLABLE REULP;Lo;0;L;;;;;N;;;;; +B983;HANGUL SYLLABLE REULH;Lo;0;L;;;;;N;;;;; +B984;HANGUL SYLLABLE REUM;Lo;0;L;;;;;N;;;;; +B985;HANGUL SYLLABLE REUB;Lo;0;L;;;;;N;;;;; +B986;HANGUL SYLLABLE REUBS;Lo;0;L;;;;;N;;;;; +B987;HANGUL SYLLABLE REUS;Lo;0;L;;;;;N;;;;; +B988;HANGUL SYLLABLE REUSS;Lo;0;L;;;;;N;;;;; +B989;HANGUL SYLLABLE REUNG;Lo;0;L;;;;;N;;;;; +B98A;HANGUL SYLLABLE REUJ;Lo;0;L;;;;;N;;;;; +B98B;HANGUL SYLLABLE REUC;Lo;0;L;;;;;N;;;;; +B98C;HANGUL SYLLABLE REUK;Lo;0;L;;;;;N;;;;; +B98D;HANGUL SYLLABLE REUT;Lo;0;L;;;;;N;;;;; +B98E;HANGUL SYLLABLE REUP;Lo;0;L;;;;;N;;;;; +B98F;HANGUL SYLLABLE REUH;Lo;0;L;;;;;N;;;;; +B990;HANGUL SYLLABLE RYI;Lo;0;L;;;;;N;;;;; +B991;HANGUL SYLLABLE RYIG;Lo;0;L;;;;;N;;;;; +B992;HANGUL SYLLABLE RYIGG;Lo;0;L;;;;;N;;;;; +B993;HANGUL SYLLABLE RYIGS;Lo;0;L;;;;;N;;;;; +B994;HANGUL SYLLABLE RYIN;Lo;0;L;;;;;N;;;;; +B995;HANGUL SYLLABLE RYINI;Lo;0;L;;;;;N;;;;; +B996;HANGUL SYLLABLE RYINH;Lo;0;L;;;;;N;;;;; +B997;HANGUL SYLLABLE RYID;Lo;0;L;;;;;N;;;;; +B998;HANGUL SYLLABLE RYIL;Lo;0;L;;;;;N;;;;; +B999;HANGUL SYLLABLE RYILG;Lo;0;L;;;;;N;;;;; +B99A;HANGUL SYLLABLE RYILM;Lo;0;L;;;;;N;;;;; +B99B;HANGUL SYLLABLE RYILB;Lo;0;L;;;;;N;;;;; +B99C;HANGUL SYLLABLE RYILS;Lo;0;L;;;;;N;;;;; +B99D;HANGUL SYLLABLE RYILT;Lo;0;L;;;;;N;;;;; +B99E;HANGUL SYLLABLE RYILP;Lo;0;L;;;;;N;;;;; +B99F;HANGUL SYLLABLE RYILH;Lo;0;L;;;;;N;;;;; +B9A0;HANGUL SYLLABLE RYIM;Lo;0;L;;;;;N;;;;; +B9A1;HANGUL SYLLABLE RYIB;Lo;0;L;;;;;N;;;;; +B9A2;HANGUL SYLLABLE RYIBS;Lo;0;L;;;;;N;;;;; +B9A3;HANGUL SYLLABLE RYIS;Lo;0;L;;;;;N;;;;; +B9A4;HANGUL SYLLABLE RYISS;Lo;0;L;;;;;N;;;;; +B9A5;HANGUL SYLLABLE RYING;Lo;0;L;;;;;N;;;;; +B9A6;HANGUL SYLLABLE RYIJ;Lo;0;L;;;;;N;;;;; +B9A7;HANGUL SYLLABLE RYIC;Lo;0;L;;;;;N;;;;; +B9A8;HANGUL SYLLABLE RYIK;Lo;0;L;;;;;N;;;;; +B9A9;HANGUL SYLLABLE RYIT;Lo;0;L;;;;;N;;;;; +B9AA;HANGUL SYLLABLE RYIP;Lo;0;L;;;;;N;;;;; +B9AB;HANGUL SYLLABLE RYIH;Lo;0;L;;;;;N;;;;; +B9AC;HANGUL SYLLABLE RI;Lo;0;L;;;;;N;;;;; +B9AD;HANGUL SYLLABLE RIG;Lo;0;L;;;;;N;;;;; +B9AE;HANGUL SYLLABLE RIGG;Lo;0;L;;;;;N;;;;; +B9AF;HANGUL SYLLABLE RIGS;Lo;0;L;;;;;N;;;;; +B9B0;HANGUL SYLLABLE RIN;Lo;0;L;;;;;N;;;;; +B9B1;HANGUL SYLLABLE RINI;Lo;0;L;;;;;N;;;;; +B9B2;HANGUL SYLLABLE RINH;Lo;0;L;;;;;N;;;;; +B9B3;HANGUL SYLLABLE RID;Lo;0;L;;;;;N;;;;; +B9B4;HANGUL SYLLABLE RIL;Lo;0;L;;;;;N;;;;; +B9B5;HANGUL SYLLABLE RILG;Lo;0;L;;;;;N;;;;; +B9B6;HANGUL SYLLABLE RILM;Lo;0;L;;;;;N;;;;; +B9B7;HANGUL SYLLABLE RILB;Lo;0;L;;;;;N;;;;; +B9B8;HANGUL SYLLABLE RILS;Lo;0;L;;;;;N;;;;; +B9B9;HANGUL SYLLABLE RILT;Lo;0;L;;;;;N;;;;; +B9BA;HANGUL SYLLABLE RILP;Lo;0;L;;;;;N;;;;; +B9BB;HANGUL SYLLABLE RILH;Lo;0;L;;;;;N;;;;; +B9BC;HANGUL SYLLABLE RIM;Lo;0;L;;;;;N;;;;; +B9BD;HANGUL SYLLABLE RIB;Lo;0;L;;;;;N;;;;; +B9BE;HANGUL SYLLABLE RIBS;Lo;0;L;;;;;N;;;;; +B9BF;HANGUL SYLLABLE RIS;Lo;0;L;;;;;N;;;;; +B9C0;HANGUL SYLLABLE RISS;Lo;0;L;;;;;N;;;;; +B9C1;HANGUL SYLLABLE RING;Lo;0;L;;;;;N;;;;; +B9C2;HANGUL SYLLABLE RIJ;Lo;0;L;;;;;N;;;;; +B9C3;HANGUL SYLLABLE RIC;Lo;0;L;;;;;N;;;;; +B9C4;HANGUL SYLLABLE RIK;Lo;0;L;;;;;N;;;;; +B9C5;HANGUL SYLLABLE RIT;Lo;0;L;;;;;N;;;;; +B9C6;HANGUL SYLLABLE RIP;Lo;0;L;;;;;N;;;;; +B9C7;HANGUL SYLLABLE RIH;Lo;0;L;;;;;N;;;;; +B9C8;HANGUL SYLLABLE MA;Lo;0;L;;;;;N;;;;; +B9C9;HANGUL SYLLABLE MAG;Lo;0;L;;;;;N;;;;; +B9CA;HANGUL SYLLABLE MAGG;Lo;0;L;;;;;N;;;;; +B9CB;HANGUL SYLLABLE MAGS;Lo;0;L;;;;;N;;;;; +B9CC;HANGUL SYLLABLE MAN;Lo;0;L;;;;;N;;;;; +B9CD;HANGUL SYLLABLE MANI;Lo;0;L;;;;;N;;;;; +B9CE;HANGUL SYLLABLE MANH;Lo;0;L;;;;;N;;;;; +B9CF;HANGUL SYLLABLE MAD;Lo;0;L;;;;;N;;;;; +B9D0;HANGUL SYLLABLE MAL;Lo;0;L;;;;;N;;;;; +B9D1;HANGUL SYLLABLE MALG;Lo;0;L;;;;;N;;;;; +B9D2;HANGUL SYLLABLE MALM;Lo;0;L;;;;;N;;;;; +B9D3;HANGUL SYLLABLE MALB;Lo;0;L;;;;;N;;;;; +B9D4;HANGUL SYLLABLE MALS;Lo;0;L;;;;;N;;;;; +B9D5;HANGUL SYLLABLE MALT;Lo;0;L;;;;;N;;;;; +B9D6;HANGUL SYLLABLE MALP;Lo;0;L;;;;;N;;;;; +B9D7;HANGUL SYLLABLE MALH;Lo;0;L;;;;;N;;;;; +B9D8;HANGUL SYLLABLE MAM;Lo;0;L;;;;;N;;;;; +B9D9;HANGUL SYLLABLE MAB;Lo;0;L;;;;;N;;;;; +B9DA;HANGUL SYLLABLE MABS;Lo;0;L;;;;;N;;;;; +B9DB;HANGUL SYLLABLE MAS;Lo;0;L;;;;;N;;;;; +B9DC;HANGUL SYLLABLE MASS;Lo;0;L;;;;;N;;;;; +B9DD;HANGUL SYLLABLE MANG;Lo;0;L;;;;;N;;;;; +B9DE;HANGUL SYLLABLE MAJ;Lo;0;L;;;;;N;;;;; +B9DF;HANGUL SYLLABLE MAC;Lo;0;L;;;;;N;;;;; +B9E0;HANGUL SYLLABLE MAK;Lo;0;L;;;;;N;;;;; +B9E1;HANGUL SYLLABLE MAT;Lo;0;L;;;;;N;;;;; +B9E2;HANGUL SYLLABLE MAP;Lo;0;L;;;;;N;;;;; +B9E3;HANGUL SYLLABLE MAH;Lo;0;L;;;;;N;;;;; +B9E4;HANGUL SYLLABLE MAE;Lo;0;L;;;;;N;;;;; +B9E5;HANGUL SYLLABLE MAEG;Lo;0;L;;;;;N;;;;; +B9E6;HANGUL SYLLABLE MAEGG;Lo;0;L;;;;;N;;;;; +B9E7;HANGUL SYLLABLE MAEGS;Lo;0;L;;;;;N;;;;; +B9E8;HANGUL SYLLABLE MAEN;Lo;0;L;;;;;N;;;;; +B9E9;HANGUL SYLLABLE MAENI;Lo;0;L;;;;;N;;;;; +B9EA;HANGUL SYLLABLE MAENH;Lo;0;L;;;;;N;;;;; +B9EB;HANGUL SYLLABLE MAED;Lo;0;L;;;;;N;;;;; +B9EC;HANGUL SYLLABLE MAEL;Lo;0;L;;;;;N;;;;; +B9ED;HANGUL SYLLABLE MAELG;Lo;0;L;;;;;N;;;;; +B9EE;HANGUL SYLLABLE MAELM;Lo;0;L;;;;;N;;;;; +B9EF;HANGUL SYLLABLE MAELB;Lo;0;L;;;;;N;;;;; +B9F0;HANGUL SYLLABLE MAELS;Lo;0;L;;;;;N;;;;; +B9F1;HANGUL SYLLABLE MAELT;Lo;0;L;;;;;N;;;;; +B9F2;HANGUL SYLLABLE MAELP;Lo;0;L;;;;;N;;;;; +B9F3;HANGUL SYLLABLE MAELH;Lo;0;L;;;;;N;;;;; +B9F4;HANGUL SYLLABLE MAEM;Lo;0;L;;;;;N;;;;; +B9F5;HANGUL SYLLABLE MAEB;Lo;0;L;;;;;N;;;;; +B9F6;HANGUL SYLLABLE MAEBS;Lo;0;L;;;;;N;;;;; +B9F7;HANGUL SYLLABLE MAES;Lo;0;L;;;;;N;;;;; +B9F8;HANGUL SYLLABLE MAESS;Lo;0;L;;;;;N;;;;; +B9F9;HANGUL SYLLABLE MAENG;Lo;0;L;;;;;N;;;;; +B9FA;HANGUL SYLLABLE MAEJ;Lo;0;L;;;;;N;;;;; +B9FB;HANGUL SYLLABLE MAEC;Lo;0;L;;;;;N;;;;; +B9FC;HANGUL SYLLABLE MAEK;Lo;0;L;;;;;N;;;;; +B9FD;HANGUL SYLLABLE MAET;Lo;0;L;;;;;N;;;;; +B9FE;HANGUL SYLLABLE MAEP;Lo;0;L;;;;;N;;;;; +B9FF;HANGUL SYLLABLE MAEH;Lo;0;L;;;;;N;;;;; +BA00;HANGUL SYLLABLE MYA;Lo;0;L;;;;;N;;;;; +BA01;HANGUL SYLLABLE MYAG;Lo;0;L;;;;;N;;;;; +BA02;HANGUL SYLLABLE MYAGG;Lo;0;L;;;;;N;;;;; +BA03;HANGUL SYLLABLE MYAGS;Lo;0;L;;;;;N;;;;; +BA04;HANGUL SYLLABLE MYAN;Lo;0;L;;;;;N;;;;; +BA05;HANGUL SYLLABLE MYANI;Lo;0;L;;;;;N;;;;; +BA06;HANGUL SYLLABLE MYANH;Lo;0;L;;;;;N;;;;; +BA07;HANGUL SYLLABLE MYAD;Lo;0;L;;;;;N;;;;; +BA08;HANGUL SYLLABLE MYAL;Lo;0;L;;;;;N;;;;; +BA09;HANGUL SYLLABLE MYALG;Lo;0;L;;;;;N;;;;; +BA0A;HANGUL SYLLABLE MYALM;Lo;0;L;;;;;N;;;;; +BA0B;HANGUL SYLLABLE MYALB;Lo;0;L;;;;;N;;;;; +BA0C;HANGUL SYLLABLE MYALS;Lo;0;L;;;;;N;;;;; +BA0D;HANGUL SYLLABLE MYALT;Lo;0;L;;;;;N;;;;; +BA0E;HANGUL SYLLABLE MYALP;Lo;0;L;;;;;N;;;;; +BA0F;HANGUL SYLLABLE MYALH;Lo;0;L;;;;;N;;;;; +BA10;HANGUL SYLLABLE MYAM;Lo;0;L;;;;;N;;;;; +BA11;HANGUL SYLLABLE MYAB;Lo;0;L;;;;;N;;;;; +BA12;HANGUL SYLLABLE MYABS;Lo;0;L;;;;;N;;;;; +BA13;HANGUL SYLLABLE MYAS;Lo;0;L;;;;;N;;;;; +BA14;HANGUL SYLLABLE MYASS;Lo;0;L;;;;;N;;;;; +BA15;HANGUL SYLLABLE MYANG;Lo;0;L;;;;;N;;;;; +BA16;HANGUL SYLLABLE MYAJ;Lo;0;L;;;;;N;;;;; +BA17;HANGUL SYLLABLE MYAC;Lo;0;L;;;;;N;;;;; +BA18;HANGUL SYLLABLE MYAK;Lo;0;L;;;;;N;;;;; +BA19;HANGUL SYLLABLE MYAT;Lo;0;L;;;;;N;;;;; +BA1A;HANGUL SYLLABLE MYAP;Lo;0;L;;;;;N;;;;; +BA1B;HANGUL SYLLABLE MYAH;Lo;0;L;;;;;N;;;;; +BA1C;HANGUL SYLLABLE MYAE;Lo;0;L;;;;;N;;;;; +BA1D;HANGUL SYLLABLE MYAEG;Lo;0;L;;;;;N;;;;; +BA1E;HANGUL SYLLABLE MYAEGG;Lo;0;L;;;;;N;;;;; +BA1F;HANGUL SYLLABLE MYAEGS;Lo;0;L;;;;;N;;;;; +BA20;HANGUL SYLLABLE MYAEN;Lo;0;L;;;;;N;;;;; +BA21;HANGUL SYLLABLE MYAENI;Lo;0;L;;;;;N;;;;; +BA22;HANGUL SYLLABLE MYAENH;Lo;0;L;;;;;N;;;;; +BA23;HANGUL SYLLABLE MYAED;Lo;0;L;;;;;N;;;;; +BA24;HANGUL SYLLABLE MYAEL;Lo;0;L;;;;;N;;;;; +BA25;HANGUL SYLLABLE MYAELG;Lo;0;L;;;;;N;;;;; +BA26;HANGUL SYLLABLE MYAELM;Lo;0;L;;;;;N;;;;; +BA27;HANGUL SYLLABLE MYAELB;Lo;0;L;;;;;N;;;;; +BA28;HANGUL SYLLABLE MYAELS;Lo;0;L;;;;;N;;;;; +BA29;HANGUL SYLLABLE MYAELT;Lo;0;L;;;;;N;;;;; +BA2A;HANGUL SYLLABLE MYAELP;Lo;0;L;;;;;N;;;;; +BA2B;HANGUL SYLLABLE MYAELH;Lo;0;L;;;;;N;;;;; +BA2C;HANGUL SYLLABLE MYAEM;Lo;0;L;;;;;N;;;;; +BA2D;HANGUL SYLLABLE MYAEB;Lo;0;L;;;;;N;;;;; +BA2E;HANGUL SYLLABLE MYAEBS;Lo;0;L;;;;;N;;;;; +BA2F;HANGUL SYLLABLE MYAES;Lo;0;L;;;;;N;;;;; +BA30;HANGUL SYLLABLE MYAESS;Lo;0;L;;;;;N;;;;; +BA31;HANGUL SYLLABLE MYAENG;Lo;0;L;;;;;N;;;;; +BA32;HANGUL SYLLABLE MYAEJ;Lo;0;L;;;;;N;;;;; +BA33;HANGUL SYLLABLE MYAEC;Lo;0;L;;;;;N;;;;; +BA34;HANGUL SYLLABLE MYAEK;Lo;0;L;;;;;N;;;;; +BA35;HANGUL SYLLABLE MYAET;Lo;0;L;;;;;N;;;;; +BA36;HANGUL SYLLABLE MYAEP;Lo;0;L;;;;;N;;;;; +BA37;HANGUL SYLLABLE MYAEH;Lo;0;L;;;;;N;;;;; +BA38;HANGUL SYLLABLE MEO;Lo;0;L;;;;;N;;;;; +BA39;HANGUL SYLLABLE MEOG;Lo;0;L;;;;;N;;;;; +BA3A;HANGUL SYLLABLE MEOGG;Lo;0;L;;;;;N;;;;; +BA3B;HANGUL SYLLABLE MEOGS;Lo;0;L;;;;;N;;;;; +BA3C;HANGUL SYLLABLE MEON;Lo;0;L;;;;;N;;;;; +BA3D;HANGUL SYLLABLE MEONI;Lo;0;L;;;;;N;;;;; +BA3E;HANGUL SYLLABLE MEONH;Lo;0;L;;;;;N;;;;; +BA3F;HANGUL SYLLABLE MEOD;Lo;0;L;;;;;N;;;;; +BA40;HANGUL SYLLABLE MEOL;Lo;0;L;;;;;N;;;;; +BA41;HANGUL SYLLABLE MEOLG;Lo;0;L;;;;;N;;;;; +BA42;HANGUL SYLLABLE MEOLM;Lo;0;L;;;;;N;;;;; +BA43;HANGUL SYLLABLE MEOLB;Lo;0;L;;;;;N;;;;; +BA44;HANGUL SYLLABLE MEOLS;Lo;0;L;;;;;N;;;;; +BA45;HANGUL SYLLABLE MEOLT;Lo;0;L;;;;;N;;;;; +BA46;HANGUL SYLLABLE MEOLP;Lo;0;L;;;;;N;;;;; +BA47;HANGUL SYLLABLE MEOLH;Lo;0;L;;;;;N;;;;; +BA48;HANGUL SYLLABLE MEOM;Lo;0;L;;;;;N;;;;; +BA49;HANGUL SYLLABLE MEOB;Lo;0;L;;;;;N;;;;; +BA4A;HANGUL SYLLABLE MEOBS;Lo;0;L;;;;;N;;;;; +BA4B;HANGUL SYLLABLE MEOS;Lo;0;L;;;;;N;;;;; +BA4C;HANGUL SYLLABLE MEOSS;Lo;0;L;;;;;N;;;;; +BA4D;HANGUL SYLLABLE MEONG;Lo;0;L;;;;;N;;;;; +BA4E;HANGUL SYLLABLE MEOJ;Lo;0;L;;;;;N;;;;; +BA4F;HANGUL SYLLABLE MEOC;Lo;0;L;;;;;N;;;;; +BA50;HANGUL SYLLABLE MEOK;Lo;0;L;;;;;N;;;;; +BA51;HANGUL SYLLABLE MEOT;Lo;0;L;;;;;N;;;;; +BA52;HANGUL SYLLABLE MEOP;Lo;0;L;;;;;N;;;;; +BA53;HANGUL SYLLABLE MEOH;Lo;0;L;;;;;N;;;;; +BA54;HANGUL SYLLABLE ME;Lo;0;L;;;;;N;;;;; +BA55;HANGUL SYLLABLE MEG;Lo;0;L;;;;;N;;;;; +BA56;HANGUL SYLLABLE MEGG;Lo;0;L;;;;;N;;;;; +BA57;HANGUL SYLLABLE MEGS;Lo;0;L;;;;;N;;;;; +BA58;HANGUL SYLLABLE MEN;Lo;0;L;;;;;N;;;;; +BA59;HANGUL SYLLABLE MENI;Lo;0;L;;;;;N;;;;; +BA5A;HANGUL SYLLABLE MENH;Lo;0;L;;;;;N;;;;; +BA5B;HANGUL SYLLABLE MED;Lo;0;L;;;;;N;;;;; +BA5C;HANGUL SYLLABLE MEL;Lo;0;L;;;;;N;;;;; +BA5D;HANGUL SYLLABLE MELG;Lo;0;L;;;;;N;;;;; +BA5E;HANGUL SYLLABLE MELM;Lo;0;L;;;;;N;;;;; +BA5F;HANGUL SYLLABLE MELB;Lo;0;L;;;;;N;;;;; +BA60;HANGUL SYLLABLE MELS;Lo;0;L;;;;;N;;;;; +BA61;HANGUL SYLLABLE MELT;Lo;0;L;;;;;N;;;;; +BA62;HANGUL SYLLABLE MELP;Lo;0;L;;;;;N;;;;; +BA63;HANGUL SYLLABLE MELH;Lo;0;L;;;;;N;;;;; +BA64;HANGUL SYLLABLE MEM;Lo;0;L;;;;;N;;;;; +BA65;HANGUL SYLLABLE MEB;Lo;0;L;;;;;N;;;;; +BA66;HANGUL SYLLABLE MEBS;Lo;0;L;;;;;N;;;;; +BA67;HANGUL SYLLABLE MES;Lo;0;L;;;;;N;;;;; +BA68;HANGUL SYLLABLE MESS;Lo;0;L;;;;;N;;;;; +BA69;HANGUL SYLLABLE MENG;Lo;0;L;;;;;N;;;;; +BA6A;HANGUL SYLLABLE MEJ;Lo;0;L;;;;;N;;;;; +BA6B;HANGUL SYLLABLE MEC;Lo;0;L;;;;;N;;;;; +BA6C;HANGUL SYLLABLE MEK;Lo;0;L;;;;;N;;;;; +BA6D;HANGUL SYLLABLE MET;Lo;0;L;;;;;N;;;;; +BA6E;HANGUL SYLLABLE MEP;Lo;0;L;;;;;N;;;;; +BA6F;HANGUL SYLLABLE MEH;Lo;0;L;;;;;N;;;;; +BA70;HANGUL SYLLABLE MYEO;Lo;0;L;;;;;N;;;;; +BA71;HANGUL SYLLABLE MYEOG;Lo;0;L;;;;;N;;;;; +BA72;HANGUL SYLLABLE MYEOGG;Lo;0;L;;;;;N;;;;; +BA73;HANGUL SYLLABLE MYEOGS;Lo;0;L;;;;;N;;;;; +BA74;HANGUL SYLLABLE MYEON;Lo;0;L;;;;;N;;;;; +BA75;HANGUL SYLLABLE MYEONI;Lo;0;L;;;;;N;;;;; +BA76;HANGUL SYLLABLE MYEONH;Lo;0;L;;;;;N;;;;; +BA77;HANGUL SYLLABLE MYEOD;Lo;0;L;;;;;N;;;;; +BA78;HANGUL SYLLABLE MYEOL;Lo;0;L;;;;;N;;;;; +BA79;HANGUL SYLLABLE MYEOLG;Lo;0;L;;;;;N;;;;; +BA7A;HANGUL SYLLABLE MYEOLM;Lo;0;L;;;;;N;;;;; +BA7B;HANGUL SYLLABLE MYEOLB;Lo;0;L;;;;;N;;;;; +BA7C;HANGUL SYLLABLE MYEOLS;Lo;0;L;;;;;N;;;;; +BA7D;HANGUL SYLLABLE MYEOLT;Lo;0;L;;;;;N;;;;; +BA7E;HANGUL SYLLABLE MYEOLP;Lo;0;L;;;;;N;;;;; +BA7F;HANGUL SYLLABLE MYEOLH;Lo;0;L;;;;;N;;;;; +BA80;HANGUL SYLLABLE MYEOM;Lo;0;L;;;;;N;;;;; +BA81;HANGUL SYLLABLE MYEOB;Lo;0;L;;;;;N;;;;; +BA82;HANGUL SYLLABLE MYEOBS;Lo;0;L;;;;;N;;;;; +BA83;HANGUL SYLLABLE MYEOS;Lo;0;L;;;;;N;;;;; +BA84;HANGUL SYLLABLE MYEOSS;Lo;0;L;;;;;N;;;;; +BA85;HANGUL SYLLABLE MYEONG;Lo;0;L;;;;;N;;;;; +BA86;HANGUL SYLLABLE MYEOJ;Lo;0;L;;;;;N;;;;; +BA87;HANGUL SYLLABLE MYEOC;Lo;0;L;;;;;N;;;;; +BA88;HANGUL SYLLABLE MYEOK;Lo;0;L;;;;;N;;;;; +BA89;HANGUL SYLLABLE MYEOT;Lo;0;L;;;;;N;;;;; +BA8A;HANGUL SYLLABLE MYEOP;Lo;0;L;;;;;N;;;;; +BA8B;HANGUL SYLLABLE MYEOH;Lo;0;L;;;;;N;;;;; +BA8C;HANGUL SYLLABLE MYE;Lo;0;L;;;;;N;;;;; +BA8D;HANGUL SYLLABLE MYEG;Lo;0;L;;;;;N;;;;; +BA8E;HANGUL SYLLABLE MYEGG;Lo;0;L;;;;;N;;;;; +BA8F;HANGUL SYLLABLE MYEGS;Lo;0;L;;;;;N;;;;; +BA90;HANGUL SYLLABLE MYEN;Lo;0;L;;;;;N;;;;; +BA91;HANGUL SYLLABLE MYENI;Lo;0;L;;;;;N;;;;; +BA92;HANGUL SYLLABLE MYENH;Lo;0;L;;;;;N;;;;; +BA93;HANGUL SYLLABLE MYED;Lo;0;L;;;;;N;;;;; +BA94;HANGUL SYLLABLE MYEL;Lo;0;L;;;;;N;;;;; +BA95;HANGUL SYLLABLE MYELG;Lo;0;L;;;;;N;;;;; +BA96;HANGUL SYLLABLE MYELM;Lo;0;L;;;;;N;;;;; +BA97;HANGUL SYLLABLE MYELB;Lo;0;L;;;;;N;;;;; +BA98;HANGUL SYLLABLE MYELS;Lo;0;L;;;;;N;;;;; +BA99;HANGUL SYLLABLE MYELT;Lo;0;L;;;;;N;;;;; +BA9A;HANGUL SYLLABLE MYELP;Lo;0;L;;;;;N;;;;; +BA9B;HANGUL SYLLABLE MYELH;Lo;0;L;;;;;N;;;;; +BA9C;HANGUL SYLLABLE MYEM;Lo;0;L;;;;;N;;;;; +BA9D;HANGUL SYLLABLE MYEB;Lo;0;L;;;;;N;;;;; +BA9E;HANGUL SYLLABLE MYEBS;Lo;0;L;;;;;N;;;;; +BA9F;HANGUL SYLLABLE MYES;Lo;0;L;;;;;N;;;;; +BAA0;HANGUL SYLLABLE MYESS;Lo;0;L;;;;;N;;;;; +BAA1;HANGUL SYLLABLE MYENG;Lo;0;L;;;;;N;;;;; +BAA2;HANGUL SYLLABLE MYEJ;Lo;0;L;;;;;N;;;;; +BAA3;HANGUL SYLLABLE MYEC;Lo;0;L;;;;;N;;;;; +BAA4;HANGUL SYLLABLE MYEK;Lo;0;L;;;;;N;;;;; +BAA5;HANGUL SYLLABLE MYET;Lo;0;L;;;;;N;;;;; +BAA6;HANGUL SYLLABLE MYEP;Lo;0;L;;;;;N;;;;; +BAA7;HANGUL SYLLABLE MYEH;Lo;0;L;;;;;N;;;;; +BAA8;HANGUL SYLLABLE MO;Lo;0;L;;;;;N;;;;; +BAA9;HANGUL SYLLABLE MOG;Lo;0;L;;;;;N;;;;; +BAAA;HANGUL SYLLABLE MOGG;Lo;0;L;;;;;N;;;;; +BAAB;HANGUL SYLLABLE MOGS;Lo;0;L;;;;;N;;;;; +BAAC;HANGUL SYLLABLE MON;Lo;0;L;;;;;N;;;;; +BAAD;HANGUL SYLLABLE MONI;Lo;0;L;;;;;N;;;;; +BAAE;HANGUL SYLLABLE MONH;Lo;0;L;;;;;N;;;;; +BAAF;HANGUL SYLLABLE MOD;Lo;0;L;;;;;N;;;;; +BAB0;HANGUL SYLLABLE MOL;Lo;0;L;;;;;N;;;;; +BAB1;HANGUL SYLLABLE MOLG;Lo;0;L;;;;;N;;;;; +BAB2;HANGUL SYLLABLE MOLM;Lo;0;L;;;;;N;;;;; +BAB3;HANGUL SYLLABLE MOLB;Lo;0;L;;;;;N;;;;; +BAB4;HANGUL SYLLABLE MOLS;Lo;0;L;;;;;N;;;;; +BAB5;HANGUL SYLLABLE MOLT;Lo;0;L;;;;;N;;;;; +BAB6;HANGUL SYLLABLE MOLP;Lo;0;L;;;;;N;;;;; +BAB7;HANGUL SYLLABLE MOLH;Lo;0;L;;;;;N;;;;; +BAB8;HANGUL SYLLABLE MOM;Lo;0;L;;;;;N;;;;; +BAB9;HANGUL SYLLABLE MOB;Lo;0;L;;;;;N;;;;; +BABA;HANGUL SYLLABLE MOBS;Lo;0;L;;;;;N;;;;; +BABB;HANGUL SYLLABLE MOS;Lo;0;L;;;;;N;;;;; +BABC;HANGUL SYLLABLE MOSS;Lo;0;L;;;;;N;;;;; +BABD;HANGUL SYLLABLE MONG;Lo;0;L;;;;;N;;;;; +BABE;HANGUL SYLLABLE MOJ;Lo;0;L;;;;;N;;;;; +BABF;HANGUL SYLLABLE MOC;Lo;0;L;;;;;N;;;;; +BAC0;HANGUL SYLLABLE MOK;Lo;0;L;;;;;N;;;;; +BAC1;HANGUL SYLLABLE MOT;Lo;0;L;;;;;N;;;;; +BAC2;HANGUL SYLLABLE MOP;Lo;0;L;;;;;N;;;;; +BAC3;HANGUL SYLLABLE MOH;Lo;0;L;;;;;N;;;;; +BAC4;HANGUL SYLLABLE MWA;Lo;0;L;;;;;N;;;;; +BAC5;HANGUL SYLLABLE MWAG;Lo;0;L;;;;;N;;;;; +BAC6;HANGUL SYLLABLE MWAGG;Lo;0;L;;;;;N;;;;; +BAC7;HANGUL SYLLABLE MWAGS;Lo;0;L;;;;;N;;;;; +BAC8;HANGUL SYLLABLE MWAN;Lo;0;L;;;;;N;;;;; +BAC9;HANGUL SYLLABLE MWANI;Lo;0;L;;;;;N;;;;; +BACA;HANGUL SYLLABLE MWANH;Lo;0;L;;;;;N;;;;; +BACB;HANGUL SYLLABLE MWAD;Lo;0;L;;;;;N;;;;; +BACC;HANGUL SYLLABLE MWAL;Lo;0;L;;;;;N;;;;; +BACD;HANGUL SYLLABLE MWALG;Lo;0;L;;;;;N;;;;; +BACE;HANGUL SYLLABLE MWALM;Lo;0;L;;;;;N;;;;; +BACF;HANGUL SYLLABLE MWALB;Lo;0;L;;;;;N;;;;; +BAD0;HANGUL SYLLABLE MWALS;Lo;0;L;;;;;N;;;;; +BAD1;HANGUL SYLLABLE MWALT;Lo;0;L;;;;;N;;;;; +BAD2;HANGUL SYLLABLE MWALP;Lo;0;L;;;;;N;;;;; +BAD3;HANGUL SYLLABLE MWALH;Lo;0;L;;;;;N;;;;; +BAD4;HANGUL SYLLABLE MWAM;Lo;0;L;;;;;N;;;;; +BAD5;HANGUL SYLLABLE MWAB;Lo;0;L;;;;;N;;;;; +BAD6;HANGUL SYLLABLE MWABS;Lo;0;L;;;;;N;;;;; +BAD7;HANGUL SYLLABLE MWAS;Lo;0;L;;;;;N;;;;; +BAD8;HANGUL SYLLABLE MWASS;Lo;0;L;;;;;N;;;;; +BAD9;HANGUL SYLLABLE MWANG;Lo;0;L;;;;;N;;;;; +BADA;HANGUL SYLLABLE MWAJ;Lo;0;L;;;;;N;;;;; +BADB;HANGUL SYLLABLE MWAC;Lo;0;L;;;;;N;;;;; +BADC;HANGUL SYLLABLE MWAK;Lo;0;L;;;;;N;;;;; +BADD;HANGUL SYLLABLE MWAT;Lo;0;L;;;;;N;;;;; +BADE;HANGUL SYLLABLE MWAP;Lo;0;L;;;;;N;;;;; +BADF;HANGUL SYLLABLE MWAH;Lo;0;L;;;;;N;;;;; +BAE0;HANGUL SYLLABLE MWAE;Lo;0;L;;;;;N;;;;; +BAE1;HANGUL SYLLABLE MWAEG;Lo;0;L;;;;;N;;;;; +BAE2;HANGUL SYLLABLE MWAEGG;Lo;0;L;;;;;N;;;;; +BAE3;HANGUL SYLLABLE MWAEGS;Lo;0;L;;;;;N;;;;; +BAE4;HANGUL SYLLABLE MWAEN;Lo;0;L;;;;;N;;;;; +BAE5;HANGUL SYLLABLE MWAENI;Lo;0;L;;;;;N;;;;; +BAE6;HANGUL SYLLABLE MWAENH;Lo;0;L;;;;;N;;;;; +BAE7;HANGUL SYLLABLE MWAED;Lo;0;L;;;;;N;;;;; +BAE8;HANGUL SYLLABLE MWAEL;Lo;0;L;;;;;N;;;;; +BAE9;HANGUL SYLLABLE MWAELG;Lo;0;L;;;;;N;;;;; +BAEA;HANGUL SYLLABLE MWAELM;Lo;0;L;;;;;N;;;;; +BAEB;HANGUL SYLLABLE MWAELB;Lo;0;L;;;;;N;;;;; +BAEC;HANGUL SYLLABLE MWAELS;Lo;0;L;;;;;N;;;;; +BAED;HANGUL SYLLABLE MWAELT;Lo;0;L;;;;;N;;;;; +BAEE;HANGUL SYLLABLE MWAELP;Lo;0;L;;;;;N;;;;; +BAEF;HANGUL SYLLABLE MWAELH;Lo;0;L;;;;;N;;;;; +BAF0;HANGUL SYLLABLE MWAEM;Lo;0;L;;;;;N;;;;; +BAF1;HANGUL SYLLABLE MWAEB;Lo;0;L;;;;;N;;;;; +BAF2;HANGUL SYLLABLE MWAEBS;Lo;0;L;;;;;N;;;;; +BAF3;HANGUL SYLLABLE MWAES;Lo;0;L;;;;;N;;;;; +BAF4;HANGUL SYLLABLE MWAESS;Lo;0;L;;;;;N;;;;; +BAF5;HANGUL SYLLABLE MWAENG;Lo;0;L;;;;;N;;;;; +BAF6;HANGUL SYLLABLE MWAEJ;Lo;0;L;;;;;N;;;;; +BAF7;HANGUL SYLLABLE MWAEC;Lo;0;L;;;;;N;;;;; +BAF8;HANGUL SYLLABLE MWAEK;Lo;0;L;;;;;N;;;;; +BAF9;HANGUL SYLLABLE MWAET;Lo;0;L;;;;;N;;;;; +BAFA;HANGUL SYLLABLE MWAEP;Lo;0;L;;;;;N;;;;; +BAFB;HANGUL SYLLABLE MWAEH;Lo;0;L;;;;;N;;;;; +BAFC;HANGUL SYLLABLE MOE;Lo;0;L;;;;;N;;;;; +BAFD;HANGUL SYLLABLE MOEG;Lo;0;L;;;;;N;;;;; +BAFE;HANGUL SYLLABLE MOEGG;Lo;0;L;;;;;N;;;;; +BAFF;HANGUL SYLLABLE MOEGS;Lo;0;L;;;;;N;;;;; +BB00;HANGUL SYLLABLE MOEN;Lo;0;L;;;;;N;;;;; +BB01;HANGUL SYLLABLE MOENI;Lo;0;L;;;;;N;;;;; +BB02;HANGUL SYLLABLE MOENH;Lo;0;L;;;;;N;;;;; +BB03;HANGUL SYLLABLE MOED;Lo;0;L;;;;;N;;;;; +BB04;HANGUL SYLLABLE MOEL;Lo;0;L;;;;;N;;;;; +BB05;HANGUL SYLLABLE MOELG;Lo;0;L;;;;;N;;;;; +BB06;HANGUL SYLLABLE MOELM;Lo;0;L;;;;;N;;;;; +BB07;HANGUL SYLLABLE MOELB;Lo;0;L;;;;;N;;;;; +BB08;HANGUL SYLLABLE MOELS;Lo;0;L;;;;;N;;;;; +BB09;HANGUL SYLLABLE MOELT;Lo;0;L;;;;;N;;;;; +BB0A;HANGUL SYLLABLE MOELP;Lo;0;L;;;;;N;;;;; +BB0B;HANGUL SYLLABLE MOELH;Lo;0;L;;;;;N;;;;; +BB0C;HANGUL SYLLABLE MOEM;Lo;0;L;;;;;N;;;;; +BB0D;HANGUL SYLLABLE MOEB;Lo;0;L;;;;;N;;;;; +BB0E;HANGUL SYLLABLE MOEBS;Lo;0;L;;;;;N;;;;; +BB0F;HANGUL SYLLABLE MOES;Lo;0;L;;;;;N;;;;; +BB10;HANGUL SYLLABLE MOESS;Lo;0;L;;;;;N;;;;; +BB11;HANGUL SYLLABLE MOENG;Lo;0;L;;;;;N;;;;; +BB12;HANGUL SYLLABLE MOEJ;Lo;0;L;;;;;N;;;;; +BB13;HANGUL SYLLABLE MOEC;Lo;0;L;;;;;N;;;;; +BB14;HANGUL SYLLABLE MOEK;Lo;0;L;;;;;N;;;;; +BB15;HANGUL SYLLABLE MOET;Lo;0;L;;;;;N;;;;; +BB16;HANGUL SYLLABLE MOEP;Lo;0;L;;;;;N;;;;; +BB17;HANGUL SYLLABLE MOEH;Lo;0;L;;;;;N;;;;; +BB18;HANGUL SYLLABLE MYO;Lo;0;L;;;;;N;;;;; +BB19;HANGUL SYLLABLE MYOG;Lo;0;L;;;;;N;;;;; +BB1A;HANGUL SYLLABLE MYOGG;Lo;0;L;;;;;N;;;;; +BB1B;HANGUL SYLLABLE MYOGS;Lo;0;L;;;;;N;;;;; +BB1C;HANGUL SYLLABLE MYON;Lo;0;L;;;;;N;;;;; +BB1D;HANGUL SYLLABLE MYONI;Lo;0;L;;;;;N;;;;; +BB1E;HANGUL SYLLABLE MYONH;Lo;0;L;;;;;N;;;;; +BB1F;HANGUL SYLLABLE MYOD;Lo;0;L;;;;;N;;;;; +BB20;HANGUL SYLLABLE MYOL;Lo;0;L;;;;;N;;;;; +BB21;HANGUL SYLLABLE MYOLG;Lo;0;L;;;;;N;;;;; +BB22;HANGUL SYLLABLE MYOLM;Lo;0;L;;;;;N;;;;; +BB23;HANGUL SYLLABLE MYOLB;Lo;0;L;;;;;N;;;;; +BB24;HANGUL SYLLABLE MYOLS;Lo;0;L;;;;;N;;;;; +BB25;HANGUL SYLLABLE MYOLT;Lo;0;L;;;;;N;;;;; +BB26;HANGUL SYLLABLE MYOLP;Lo;0;L;;;;;N;;;;; +BB27;HANGUL SYLLABLE MYOLH;Lo;0;L;;;;;N;;;;; +BB28;HANGUL SYLLABLE MYOM;Lo;0;L;;;;;N;;;;; +BB29;HANGUL SYLLABLE MYOB;Lo;0;L;;;;;N;;;;; +BB2A;HANGUL SYLLABLE MYOBS;Lo;0;L;;;;;N;;;;; +BB2B;HANGUL SYLLABLE MYOS;Lo;0;L;;;;;N;;;;; +BB2C;HANGUL SYLLABLE MYOSS;Lo;0;L;;;;;N;;;;; +BB2D;HANGUL SYLLABLE MYONG;Lo;0;L;;;;;N;;;;; +BB2E;HANGUL SYLLABLE MYOJ;Lo;0;L;;;;;N;;;;; +BB2F;HANGUL SYLLABLE MYOC;Lo;0;L;;;;;N;;;;; +BB30;HANGUL SYLLABLE MYOK;Lo;0;L;;;;;N;;;;; +BB31;HANGUL SYLLABLE MYOT;Lo;0;L;;;;;N;;;;; +BB32;HANGUL SYLLABLE MYOP;Lo;0;L;;;;;N;;;;; +BB33;HANGUL SYLLABLE MYOH;Lo;0;L;;;;;N;;;;; +BB34;HANGUL SYLLABLE MU;Lo;0;L;;;;;N;;;;; +BB35;HANGUL SYLLABLE MUG;Lo;0;L;;;;;N;;;;; +BB36;HANGUL SYLLABLE MUGG;Lo;0;L;;;;;N;;;;; +BB37;HANGUL SYLLABLE MUGS;Lo;0;L;;;;;N;;;;; +BB38;HANGUL SYLLABLE MUN;Lo;0;L;;;;;N;;;;; +BB39;HANGUL SYLLABLE MUNI;Lo;0;L;;;;;N;;;;; +BB3A;HANGUL SYLLABLE MUNH;Lo;0;L;;;;;N;;;;; +BB3B;HANGUL SYLLABLE MUD;Lo;0;L;;;;;N;;;;; +BB3C;HANGUL SYLLABLE MUL;Lo;0;L;;;;;N;;;;; +BB3D;HANGUL SYLLABLE MULG;Lo;0;L;;;;;N;;;;; +BB3E;HANGUL SYLLABLE MULM;Lo;0;L;;;;;N;;;;; +BB3F;HANGUL SYLLABLE MULB;Lo;0;L;;;;;N;;;;; +BB40;HANGUL SYLLABLE MULS;Lo;0;L;;;;;N;;;;; +BB41;HANGUL SYLLABLE MULT;Lo;0;L;;;;;N;;;;; +BB42;HANGUL SYLLABLE MULP;Lo;0;L;;;;;N;;;;; +BB43;HANGUL SYLLABLE MULH;Lo;0;L;;;;;N;;;;; +BB44;HANGUL SYLLABLE MUM;Lo;0;L;;;;;N;;;;; +BB45;HANGUL SYLLABLE MUB;Lo;0;L;;;;;N;;;;; +BB46;HANGUL SYLLABLE MUBS;Lo;0;L;;;;;N;;;;; +BB47;HANGUL SYLLABLE MUS;Lo;0;L;;;;;N;;;;; +BB48;HANGUL SYLLABLE MUSS;Lo;0;L;;;;;N;;;;; +BB49;HANGUL SYLLABLE MUNG;Lo;0;L;;;;;N;;;;; +BB4A;HANGUL SYLLABLE MUJ;Lo;0;L;;;;;N;;;;; +BB4B;HANGUL SYLLABLE MUC;Lo;0;L;;;;;N;;;;; +BB4C;HANGUL SYLLABLE MUK;Lo;0;L;;;;;N;;;;; +BB4D;HANGUL SYLLABLE MUT;Lo;0;L;;;;;N;;;;; +BB4E;HANGUL SYLLABLE MUP;Lo;0;L;;;;;N;;;;; +BB4F;HANGUL SYLLABLE MUH;Lo;0;L;;;;;N;;;;; +BB50;HANGUL SYLLABLE MWEO;Lo;0;L;;;;;N;;;;; +BB51;HANGUL SYLLABLE MWEOG;Lo;0;L;;;;;N;;;;; +BB52;HANGUL SYLLABLE MWEOGG;Lo;0;L;;;;;N;;;;; +BB53;HANGUL SYLLABLE MWEOGS;Lo;0;L;;;;;N;;;;; +BB54;HANGUL SYLLABLE MWEON;Lo;0;L;;;;;N;;;;; +BB55;HANGUL SYLLABLE MWEONI;Lo;0;L;;;;;N;;;;; +BB56;HANGUL SYLLABLE MWEONH;Lo;0;L;;;;;N;;;;; +BB57;HANGUL SYLLABLE MWEOD;Lo;0;L;;;;;N;;;;; +BB58;HANGUL SYLLABLE MWEOL;Lo;0;L;;;;;N;;;;; +BB59;HANGUL SYLLABLE MWEOLG;Lo;0;L;;;;;N;;;;; +BB5A;HANGUL SYLLABLE MWEOLM;Lo;0;L;;;;;N;;;;; +BB5B;HANGUL SYLLABLE MWEOLB;Lo;0;L;;;;;N;;;;; +BB5C;HANGUL SYLLABLE MWEOLS;Lo;0;L;;;;;N;;;;; +BB5D;HANGUL SYLLABLE MWEOLT;Lo;0;L;;;;;N;;;;; +BB5E;HANGUL SYLLABLE MWEOLP;Lo;0;L;;;;;N;;;;; +BB5F;HANGUL SYLLABLE MWEOLH;Lo;0;L;;;;;N;;;;; +BB60;HANGUL SYLLABLE MWEOM;Lo;0;L;;;;;N;;;;; +BB61;HANGUL SYLLABLE MWEOB;Lo;0;L;;;;;N;;;;; +BB62;HANGUL SYLLABLE MWEOBS;Lo;0;L;;;;;N;;;;; +BB63;HANGUL SYLLABLE MWEOS;Lo;0;L;;;;;N;;;;; +BB64;HANGUL SYLLABLE MWEOSS;Lo;0;L;;;;;N;;;;; +BB65;HANGUL SYLLABLE MWEONG;Lo;0;L;;;;;N;;;;; +BB66;HANGUL SYLLABLE MWEOJ;Lo;0;L;;;;;N;;;;; +BB67;HANGUL SYLLABLE MWEOC;Lo;0;L;;;;;N;;;;; +BB68;HANGUL SYLLABLE MWEOK;Lo;0;L;;;;;N;;;;; +BB69;HANGUL SYLLABLE MWEOT;Lo;0;L;;;;;N;;;;; +BB6A;HANGUL SYLLABLE MWEOP;Lo;0;L;;;;;N;;;;; +BB6B;HANGUL SYLLABLE MWEOH;Lo;0;L;;;;;N;;;;; +BB6C;HANGUL SYLLABLE MWE;Lo;0;L;;;;;N;;;;; +BB6D;HANGUL SYLLABLE MWEG;Lo;0;L;;;;;N;;;;; +BB6E;HANGUL SYLLABLE MWEGG;Lo;0;L;;;;;N;;;;; +BB6F;HANGUL SYLLABLE MWEGS;Lo;0;L;;;;;N;;;;; +BB70;HANGUL SYLLABLE MWEN;Lo;0;L;;;;;N;;;;; +BB71;HANGUL SYLLABLE MWENI;Lo;0;L;;;;;N;;;;; +BB72;HANGUL SYLLABLE MWENH;Lo;0;L;;;;;N;;;;; +BB73;HANGUL SYLLABLE MWED;Lo;0;L;;;;;N;;;;; +BB74;HANGUL SYLLABLE MWEL;Lo;0;L;;;;;N;;;;; +BB75;HANGUL SYLLABLE MWELG;Lo;0;L;;;;;N;;;;; +BB76;HANGUL SYLLABLE MWELM;Lo;0;L;;;;;N;;;;; +BB77;HANGUL SYLLABLE MWELB;Lo;0;L;;;;;N;;;;; +BB78;HANGUL SYLLABLE MWELS;Lo;0;L;;;;;N;;;;; +BB79;HANGUL SYLLABLE MWELT;Lo;0;L;;;;;N;;;;; +BB7A;HANGUL SYLLABLE MWELP;Lo;0;L;;;;;N;;;;; +BB7B;HANGUL SYLLABLE MWELH;Lo;0;L;;;;;N;;;;; +BB7C;HANGUL SYLLABLE MWEM;Lo;0;L;;;;;N;;;;; +BB7D;HANGUL SYLLABLE MWEB;Lo;0;L;;;;;N;;;;; +BB7E;HANGUL SYLLABLE MWEBS;Lo;0;L;;;;;N;;;;; +BB7F;HANGUL SYLLABLE MWES;Lo;0;L;;;;;N;;;;; +BB80;HANGUL SYLLABLE MWESS;Lo;0;L;;;;;N;;;;; +BB81;HANGUL SYLLABLE MWENG;Lo;0;L;;;;;N;;;;; +BB82;HANGUL SYLLABLE MWEJ;Lo;0;L;;;;;N;;;;; +BB83;HANGUL SYLLABLE MWEC;Lo;0;L;;;;;N;;;;; +BB84;HANGUL SYLLABLE MWEK;Lo;0;L;;;;;N;;;;; +BB85;HANGUL SYLLABLE MWET;Lo;0;L;;;;;N;;;;; +BB86;HANGUL SYLLABLE MWEP;Lo;0;L;;;;;N;;;;; +BB87;HANGUL SYLLABLE MWEH;Lo;0;L;;;;;N;;;;; +BB88;HANGUL SYLLABLE MWI;Lo;0;L;;;;;N;;;;; +BB89;HANGUL SYLLABLE MWIG;Lo;0;L;;;;;N;;;;; +BB8A;HANGUL SYLLABLE MWIGG;Lo;0;L;;;;;N;;;;; +BB8B;HANGUL SYLLABLE MWIGS;Lo;0;L;;;;;N;;;;; +BB8C;HANGUL SYLLABLE MWIN;Lo;0;L;;;;;N;;;;; +BB8D;HANGUL SYLLABLE MWINI;Lo;0;L;;;;;N;;;;; +BB8E;HANGUL SYLLABLE MWINH;Lo;0;L;;;;;N;;;;; +BB8F;HANGUL SYLLABLE MWID;Lo;0;L;;;;;N;;;;; +BB90;HANGUL SYLLABLE MWIL;Lo;0;L;;;;;N;;;;; +BB91;HANGUL SYLLABLE MWILG;Lo;0;L;;;;;N;;;;; +BB92;HANGUL SYLLABLE MWILM;Lo;0;L;;;;;N;;;;; +BB93;HANGUL SYLLABLE MWILB;Lo;0;L;;;;;N;;;;; +BB94;HANGUL SYLLABLE MWILS;Lo;0;L;;;;;N;;;;; +BB95;HANGUL SYLLABLE MWILT;Lo;0;L;;;;;N;;;;; +BB96;HANGUL SYLLABLE MWILP;Lo;0;L;;;;;N;;;;; +BB97;HANGUL SYLLABLE MWILH;Lo;0;L;;;;;N;;;;; +BB98;HANGUL SYLLABLE MWIM;Lo;0;L;;;;;N;;;;; +BB99;HANGUL SYLLABLE MWIB;Lo;0;L;;;;;N;;;;; +BB9A;HANGUL SYLLABLE MWIBS;Lo;0;L;;;;;N;;;;; +BB9B;HANGUL SYLLABLE MWIS;Lo;0;L;;;;;N;;;;; +BB9C;HANGUL SYLLABLE MWISS;Lo;0;L;;;;;N;;;;; +BB9D;HANGUL SYLLABLE MWING;Lo;0;L;;;;;N;;;;; +BB9E;HANGUL SYLLABLE MWIJ;Lo;0;L;;;;;N;;;;; +BB9F;HANGUL SYLLABLE MWIC;Lo;0;L;;;;;N;;;;; +BBA0;HANGUL SYLLABLE MWIK;Lo;0;L;;;;;N;;;;; +BBA1;HANGUL SYLLABLE MWIT;Lo;0;L;;;;;N;;;;; +BBA2;HANGUL SYLLABLE MWIP;Lo;0;L;;;;;N;;;;; +BBA3;HANGUL SYLLABLE MWIH;Lo;0;L;;;;;N;;;;; +BBA4;HANGUL SYLLABLE MYU;Lo;0;L;;;;;N;;;;; +BBA5;HANGUL SYLLABLE MYUG;Lo;0;L;;;;;N;;;;; +BBA6;HANGUL SYLLABLE MYUGG;Lo;0;L;;;;;N;;;;; +BBA7;HANGUL SYLLABLE MYUGS;Lo;0;L;;;;;N;;;;; +BBA8;HANGUL SYLLABLE MYUN;Lo;0;L;;;;;N;;;;; +BBA9;HANGUL SYLLABLE MYUNI;Lo;0;L;;;;;N;;;;; +BBAA;HANGUL SYLLABLE MYUNH;Lo;0;L;;;;;N;;;;; +BBAB;HANGUL SYLLABLE MYUD;Lo;0;L;;;;;N;;;;; +BBAC;HANGUL SYLLABLE MYUL;Lo;0;L;;;;;N;;;;; +BBAD;HANGUL SYLLABLE MYULG;Lo;0;L;;;;;N;;;;; +BBAE;HANGUL SYLLABLE MYULM;Lo;0;L;;;;;N;;;;; +BBAF;HANGUL SYLLABLE MYULB;Lo;0;L;;;;;N;;;;; +BBB0;HANGUL SYLLABLE MYULS;Lo;0;L;;;;;N;;;;; +BBB1;HANGUL SYLLABLE MYULT;Lo;0;L;;;;;N;;;;; +BBB2;HANGUL SYLLABLE MYULP;Lo;0;L;;;;;N;;;;; +BBB3;HANGUL SYLLABLE MYULH;Lo;0;L;;;;;N;;;;; +BBB4;HANGUL SYLLABLE MYUM;Lo;0;L;;;;;N;;;;; +BBB5;HANGUL SYLLABLE MYUB;Lo;0;L;;;;;N;;;;; +BBB6;HANGUL SYLLABLE MYUBS;Lo;0;L;;;;;N;;;;; +BBB7;HANGUL SYLLABLE MYUS;Lo;0;L;;;;;N;;;;; +BBB8;HANGUL SYLLABLE MYUSS;Lo;0;L;;;;;N;;;;; +BBB9;HANGUL SYLLABLE MYUNG;Lo;0;L;;;;;N;;;;; +BBBA;HANGUL SYLLABLE MYUJ;Lo;0;L;;;;;N;;;;; +BBBB;HANGUL SYLLABLE MYUC;Lo;0;L;;;;;N;;;;; +BBBC;HANGUL SYLLABLE MYUK;Lo;0;L;;;;;N;;;;; +BBBD;HANGUL SYLLABLE MYUT;Lo;0;L;;;;;N;;;;; +BBBE;HANGUL SYLLABLE MYUP;Lo;0;L;;;;;N;;;;; +BBBF;HANGUL SYLLABLE MYUH;Lo;0;L;;;;;N;;;;; +BBC0;HANGUL SYLLABLE MEU;Lo;0;L;;;;;N;;;;; +BBC1;HANGUL SYLLABLE MEUG;Lo;0;L;;;;;N;;;;; +BBC2;HANGUL SYLLABLE MEUGG;Lo;0;L;;;;;N;;;;; +BBC3;HANGUL SYLLABLE MEUGS;Lo;0;L;;;;;N;;;;; +BBC4;HANGUL SYLLABLE MEUN;Lo;0;L;;;;;N;;;;; +BBC5;HANGUL SYLLABLE MEUNI;Lo;0;L;;;;;N;;;;; +BBC6;HANGUL SYLLABLE MEUNH;Lo;0;L;;;;;N;;;;; +BBC7;HANGUL SYLLABLE MEUD;Lo;0;L;;;;;N;;;;; +BBC8;HANGUL SYLLABLE MEUL;Lo;0;L;;;;;N;;;;; +BBC9;HANGUL SYLLABLE MEULG;Lo;0;L;;;;;N;;;;; +BBCA;HANGUL SYLLABLE MEULM;Lo;0;L;;;;;N;;;;; +BBCB;HANGUL SYLLABLE MEULB;Lo;0;L;;;;;N;;;;; +BBCC;HANGUL SYLLABLE MEULS;Lo;0;L;;;;;N;;;;; +BBCD;HANGUL SYLLABLE MEULT;Lo;0;L;;;;;N;;;;; +BBCE;HANGUL SYLLABLE MEULP;Lo;0;L;;;;;N;;;;; +BBCF;HANGUL SYLLABLE MEULH;Lo;0;L;;;;;N;;;;; +BBD0;HANGUL SYLLABLE MEUM;Lo;0;L;;;;;N;;;;; +BBD1;HANGUL SYLLABLE MEUB;Lo;0;L;;;;;N;;;;; +BBD2;HANGUL SYLLABLE MEUBS;Lo;0;L;;;;;N;;;;; +BBD3;HANGUL SYLLABLE MEUS;Lo;0;L;;;;;N;;;;; +BBD4;HANGUL SYLLABLE MEUSS;Lo;0;L;;;;;N;;;;; +BBD5;HANGUL SYLLABLE MEUNG;Lo;0;L;;;;;N;;;;; +BBD6;HANGUL SYLLABLE MEUJ;Lo;0;L;;;;;N;;;;; +BBD7;HANGUL SYLLABLE MEUC;Lo;0;L;;;;;N;;;;; +BBD8;HANGUL SYLLABLE MEUK;Lo;0;L;;;;;N;;;;; +BBD9;HANGUL SYLLABLE MEUT;Lo;0;L;;;;;N;;;;; +BBDA;HANGUL SYLLABLE MEUP;Lo;0;L;;;;;N;;;;; +BBDB;HANGUL SYLLABLE MEUH;Lo;0;L;;;;;N;;;;; +BBDC;HANGUL SYLLABLE MYI;Lo;0;L;;;;;N;;;;; +BBDD;HANGUL SYLLABLE MYIG;Lo;0;L;;;;;N;;;;; +BBDE;HANGUL SYLLABLE MYIGG;Lo;0;L;;;;;N;;;;; +BBDF;HANGUL SYLLABLE MYIGS;Lo;0;L;;;;;N;;;;; +BBE0;HANGUL SYLLABLE MYIN;Lo;0;L;;;;;N;;;;; +BBE1;HANGUL SYLLABLE MYINI;Lo;0;L;;;;;N;;;;; +BBE2;HANGUL SYLLABLE MYINH;Lo;0;L;;;;;N;;;;; +BBE3;HANGUL SYLLABLE MYID;Lo;0;L;;;;;N;;;;; +BBE4;HANGUL SYLLABLE MYIL;Lo;0;L;;;;;N;;;;; +BBE5;HANGUL SYLLABLE MYILG;Lo;0;L;;;;;N;;;;; +BBE6;HANGUL SYLLABLE MYILM;Lo;0;L;;;;;N;;;;; +BBE7;HANGUL SYLLABLE MYILB;Lo;0;L;;;;;N;;;;; +BBE8;HANGUL SYLLABLE MYILS;Lo;0;L;;;;;N;;;;; +BBE9;HANGUL SYLLABLE MYILT;Lo;0;L;;;;;N;;;;; +BBEA;HANGUL SYLLABLE MYILP;Lo;0;L;;;;;N;;;;; +BBEB;HANGUL SYLLABLE MYILH;Lo;0;L;;;;;N;;;;; +BBEC;HANGUL SYLLABLE MYIM;Lo;0;L;;;;;N;;;;; +BBED;HANGUL SYLLABLE MYIB;Lo;0;L;;;;;N;;;;; +BBEE;HANGUL SYLLABLE MYIBS;Lo;0;L;;;;;N;;;;; +BBEF;HANGUL SYLLABLE MYIS;Lo;0;L;;;;;N;;;;; +BBF0;HANGUL SYLLABLE MYISS;Lo;0;L;;;;;N;;;;; +BBF1;HANGUL SYLLABLE MYING;Lo;0;L;;;;;N;;;;; +BBF2;HANGUL SYLLABLE MYIJ;Lo;0;L;;;;;N;;;;; +BBF3;HANGUL SYLLABLE MYIC;Lo;0;L;;;;;N;;;;; +BBF4;HANGUL SYLLABLE MYIK;Lo;0;L;;;;;N;;;;; +BBF5;HANGUL SYLLABLE MYIT;Lo;0;L;;;;;N;;;;; +BBF6;HANGUL SYLLABLE MYIP;Lo;0;L;;;;;N;;;;; +BBF7;HANGUL SYLLABLE MYIH;Lo;0;L;;;;;N;;;;; +BBF8;HANGUL SYLLABLE MI;Lo;0;L;;;;;N;;;;; +BBF9;HANGUL SYLLABLE MIG;Lo;0;L;;;;;N;;;;; +BBFA;HANGUL SYLLABLE MIGG;Lo;0;L;;;;;N;;;;; +BBFB;HANGUL SYLLABLE MIGS;Lo;0;L;;;;;N;;;;; +BBFC;HANGUL SYLLABLE MIN;Lo;0;L;;;;;N;;;;; +BBFD;HANGUL SYLLABLE MINI;Lo;0;L;;;;;N;;;;; +BBFE;HANGUL SYLLABLE MINH;Lo;0;L;;;;;N;;;;; +BBFF;HANGUL SYLLABLE MID;Lo;0;L;;;;;N;;;;; +BC00;HANGUL SYLLABLE MIL;Lo;0;L;;;;;N;;;;; +BC01;HANGUL SYLLABLE MILG;Lo;0;L;;;;;N;;;;; +BC02;HANGUL SYLLABLE MILM;Lo;0;L;;;;;N;;;;; +BC03;HANGUL SYLLABLE MILB;Lo;0;L;;;;;N;;;;; +BC04;HANGUL SYLLABLE MILS;Lo;0;L;;;;;N;;;;; +BC05;HANGUL SYLLABLE MILT;Lo;0;L;;;;;N;;;;; +BC06;HANGUL SYLLABLE MILP;Lo;0;L;;;;;N;;;;; +BC07;HANGUL SYLLABLE MILH;Lo;0;L;;;;;N;;;;; +BC08;HANGUL SYLLABLE MIM;Lo;0;L;;;;;N;;;;; +BC09;HANGUL SYLLABLE MIB;Lo;0;L;;;;;N;;;;; +BC0A;HANGUL SYLLABLE MIBS;Lo;0;L;;;;;N;;;;; +BC0B;HANGUL SYLLABLE MIS;Lo;0;L;;;;;N;;;;; +BC0C;HANGUL SYLLABLE MISS;Lo;0;L;;;;;N;;;;; +BC0D;HANGUL SYLLABLE MING;Lo;0;L;;;;;N;;;;; +BC0E;HANGUL SYLLABLE MIJ;Lo;0;L;;;;;N;;;;; +BC0F;HANGUL SYLLABLE MIC;Lo;0;L;;;;;N;;;;; +BC10;HANGUL SYLLABLE MIK;Lo;0;L;;;;;N;;;;; +BC11;HANGUL SYLLABLE MIT;Lo;0;L;;;;;N;;;;; +BC12;HANGUL SYLLABLE MIP;Lo;0;L;;;;;N;;;;; +BC13;HANGUL SYLLABLE MIH;Lo;0;L;;;;;N;;;;; +BC14;HANGUL SYLLABLE BA;Lo;0;L;;;;;N;;;;; +BC15;HANGUL SYLLABLE BAG;Lo;0;L;;;;;N;;;;; +BC16;HANGUL SYLLABLE BAGG;Lo;0;L;;;;;N;;;;; +BC17;HANGUL SYLLABLE BAGS;Lo;0;L;;;;;N;;;;; +BC18;HANGUL SYLLABLE BAN;Lo;0;L;;;;;N;;;;; +BC19;HANGUL SYLLABLE BANI;Lo;0;L;;;;;N;;;;; +BC1A;HANGUL SYLLABLE BANH;Lo;0;L;;;;;N;;;;; +BC1B;HANGUL SYLLABLE BAD;Lo;0;L;;;;;N;;;;; +BC1C;HANGUL SYLLABLE BAL;Lo;0;L;;;;;N;;;;; +BC1D;HANGUL SYLLABLE BALG;Lo;0;L;;;;;N;;;;; +BC1E;HANGUL SYLLABLE BALM;Lo;0;L;;;;;N;;;;; +BC1F;HANGUL SYLLABLE BALB;Lo;0;L;;;;;N;;;;; +BC20;HANGUL SYLLABLE BALS;Lo;0;L;;;;;N;;;;; +BC21;HANGUL SYLLABLE BALT;Lo;0;L;;;;;N;;;;; +BC22;HANGUL SYLLABLE BALP;Lo;0;L;;;;;N;;;;; +BC23;HANGUL SYLLABLE BALH;Lo;0;L;;;;;N;;;;; +BC24;HANGUL SYLLABLE BAM;Lo;0;L;;;;;N;;;;; +BC25;HANGUL SYLLABLE BAB;Lo;0;L;;;;;N;;;;; +BC26;HANGUL SYLLABLE BABS;Lo;0;L;;;;;N;;;;; +BC27;HANGUL SYLLABLE BAS;Lo;0;L;;;;;N;;;;; +BC28;HANGUL SYLLABLE BASS;Lo;0;L;;;;;N;;;;; +BC29;HANGUL SYLLABLE BANG;Lo;0;L;;;;;N;;;;; +BC2A;HANGUL SYLLABLE BAJ;Lo;0;L;;;;;N;;;;; +BC2B;HANGUL SYLLABLE BAC;Lo;0;L;;;;;N;;;;; +BC2C;HANGUL SYLLABLE BAK;Lo;0;L;;;;;N;;;;; +BC2D;HANGUL SYLLABLE BAT;Lo;0;L;;;;;N;;;;; +BC2E;HANGUL SYLLABLE BAP;Lo;0;L;;;;;N;;;;; +BC2F;HANGUL SYLLABLE BAH;Lo;0;L;;;;;N;;;;; +BC30;HANGUL SYLLABLE BAE;Lo;0;L;;;;;N;;;;; +BC31;HANGUL SYLLABLE BAEG;Lo;0;L;;;;;N;;;;; +BC32;HANGUL SYLLABLE BAEGG;Lo;0;L;;;;;N;;;;; +BC33;HANGUL SYLLABLE BAEGS;Lo;0;L;;;;;N;;;;; +BC34;HANGUL SYLLABLE BAEN;Lo;0;L;;;;;N;;;;; +BC35;HANGUL SYLLABLE BAENI;Lo;0;L;;;;;N;;;;; +BC36;HANGUL SYLLABLE BAENH;Lo;0;L;;;;;N;;;;; +BC37;HANGUL SYLLABLE BAED;Lo;0;L;;;;;N;;;;; +BC38;HANGUL SYLLABLE BAEL;Lo;0;L;;;;;N;;;;; +BC39;HANGUL SYLLABLE BAELG;Lo;0;L;;;;;N;;;;; +BC3A;HANGUL SYLLABLE BAELM;Lo;0;L;;;;;N;;;;; +BC3B;HANGUL SYLLABLE BAELB;Lo;0;L;;;;;N;;;;; +BC3C;HANGUL SYLLABLE BAELS;Lo;0;L;;;;;N;;;;; +BC3D;HANGUL SYLLABLE BAELT;Lo;0;L;;;;;N;;;;; +BC3E;HANGUL SYLLABLE BAELP;Lo;0;L;;;;;N;;;;; +BC3F;HANGUL SYLLABLE BAELH;Lo;0;L;;;;;N;;;;; +BC40;HANGUL SYLLABLE BAEM;Lo;0;L;;;;;N;;;;; +BC41;HANGUL SYLLABLE BAEB;Lo;0;L;;;;;N;;;;; +BC42;HANGUL SYLLABLE BAEBS;Lo;0;L;;;;;N;;;;; +BC43;HANGUL SYLLABLE BAES;Lo;0;L;;;;;N;;;;; +BC44;HANGUL SYLLABLE BAESS;Lo;0;L;;;;;N;;;;; +BC45;HANGUL SYLLABLE BAENG;Lo;0;L;;;;;N;;;;; +BC46;HANGUL SYLLABLE BAEJ;Lo;0;L;;;;;N;;;;; +BC47;HANGUL SYLLABLE BAEC;Lo;0;L;;;;;N;;;;; +BC48;HANGUL SYLLABLE BAEK;Lo;0;L;;;;;N;;;;; +BC49;HANGUL SYLLABLE BAET;Lo;0;L;;;;;N;;;;; +BC4A;HANGUL SYLLABLE BAEP;Lo;0;L;;;;;N;;;;; +BC4B;HANGUL SYLLABLE BAEH;Lo;0;L;;;;;N;;;;; +BC4C;HANGUL SYLLABLE BYA;Lo;0;L;;;;;N;;;;; +BC4D;HANGUL SYLLABLE BYAG;Lo;0;L;;;;;N;;;;; +BC4E;HANGUL SYLLABLE BYAGG;Lo;0;L;;;;;N;;;;; +BC4F;HANGUL SYLLABLE BYAGS;Lo;0;L;;;;;N;;;;; +BC50;HANGUL SYLLABLE BYAN;Lo;0;L;;;;;N;;;;; +BC51;HANGUL SYLLABLE BYANI;Lo;0;L;;;;;N;;;;; +BC52;HANGUL SYLLABLE BYANH;Lo;0;L;;;;;N;;;;; +BC53;HANGUL SYLLABLE BYAD;Lo;0;L;;;;;N;;;;; +BC54;HANGUL SYLLABLE BYAL;Lo;0;L;;;;;N;;;;; +BC55;HANGUL SYLLABLE BYALG;Lo;0;L;;;;;N;;;;; +BC56;HANGUL SYLLABLE BYALM;Lo;0;L;;;;;N;;;;; +BC57;HANGUL SYLLABLE BYALB;Lo;0;L;;;;;N;;;;; +BC58;HANGUL SYLLABLE BYALS;Lo;0;L;;;;;N;;;;; +BC59;HANGUL SYLLABLE BYALT;Lo;0;L;;;;;N;;;;; +BC5A;HANGUL SYLLABLE BYALP;Lo;0;L;;;;;N;;;;; +BC5B;HANGUL SYLLABLE BYALH;Lo;0;L;;;;;N;;;;; +BC5C;HANGUL SYLLABLE BYAM;Lo;0;L;;;;;N;;;;; +BC5D;HANGUL SYLLABLE BYAB;Lo;0;L;;;;;N;;;;; +BC5E;HANGUL SYLLABLE BYABS;Lo;0;L;;;;;N;;;;; +BC5F;HANGUL SYLLABLE BYAS;Lo;0;L;;;;;N;;;;; +BC60;HANGUL SYLLABLE BYASS;Lo;0;L;;;;;N;;;;; +BC61;HANGUL SYLLABLE BYANG;Lo;0;L;;;;;N;;;;; +BC62;HANGUL SYLLABLE BYAJ;Lo;0;L;;;;;N;;;;; +BC63;HANGUL SYLLABLE BYAC;Lo;0;L;;;;;N;;;;; +BC64;HANGUL SYLLABLE BYAK;Lo;0;L;;;;;N;;;;; +BC65;HANGUL SYLLABLE BYAT;Lo;0;L;;;;;N;;;;; +BC66;HANGUL SYLLABLE BYAP;Lo;0;L;;;;;N;;;;; +BC67;HANGUL SYLLABLE BYAH;Lo;0;L;;;;;N;;;;; +BC68;HANGUL SYLLABLE BYAE;Lo;0;L;;;;;N;;;;; +BC69;HANGUL SYLLABLE BYAEG;Lo;0;L;;;;;N;;;;; +BC6A;HANGUL SYLLABLE BYAEGG;Lo;0;L;;;;;N;;;;; +BC6B;HANGUL SYLLABLE BYAEGS;Lo;0;L;;;;;N;;;;; +BC6C;HANGUL SYLLABLE BYAEN;Lo;0;L;;;;;N;;;;; +BC6D;HANGUL SYLLABLE BYAENI;Lo;0;L;;;;;N;;;;; +BC6E;HANGUL SYLLABLE BYAENH;Lo;0;L;;;;;N;;;;; +BC6F;HANGUL SYLLABLE BYAED;Lo;0;L;;;;;N;;;;; +BC70;HANGUL SYLLABLE BYAEL;Lo;0;L;;;;;N;;;;; +BC71;HANGUL SYLLABLE BYAELG;Lo;0;L;;;;;N;;;;; +BC72;HANGUL SYLLABLE BYAELM;Lo;0;L;;;;;N;;;;; +BC73;HANGUL SYLLABLE BYAELB;Lo;0;L;;;;;N;;;;; +BC74;HANGUL SYLLABLE BYAELS;Lo;0;L;;;;;N;;;;; +BC75;HANGUL SYLLABLE BYAELT;Lo;0;L;;;;;N;;;;; +BC76;HANGUL SYLLABLE BYAELP;Lo;0;L;;;;;N;;;;; +BC77;HANGUL SYLLABLE BYAELH;Lo;0;L;;;;;N;;;;; +BC78;HANGUL SYLLABLE BYAEM;Lo;0;L;;;;;N;;;;; +BC79;HANGUL SYLLABLE BYAEB;Lo;0;L;;;;;N;;;;; +BC7A;HANGUL SYLLABLE BYAEBS;Lo;0;L;;;;;N;;;;; +BC7B;HANGUL SYLLABLE BYAES;Lo;0;L;;;;;N;;;;; +BC7C;HANGUL SYLLABLE BYAESS;Lo;0;L;;;;;N;;;;; +BC7D;HANGUL SYLLABLE BYAENG;Lo;0;L;;;;;N;;;;; +BC7E;HANGUL SYLLABLE BYAEJ;Lo;0;L;;;;;N;;;;; +BC7F;HANGUL SYLLABLE BYAEC;Lo;0;L;;;;;N;;;;; +BC80;HANGUL SYLLABLE BYAEK;Lo;0;L;;;;;N;;;;; +BC81;HANGUL SYLLABLE BYAET;Lo;0;L;;;;;N;;;;; +BC82;HANGUL SYLLABLE BYAEP;Lo;0;L;;;;;N;;;;; +BC83;HANGUL SYLLABLE BYAEH;Lo;0;L;;;;;N;;;;; +BC84;HANGUL SYLLABLE BEO;Lo;0;L;;;;;N;;;;; +BC85;HANGUL SYLLABLE BEOG;Lo;0;L;;;;;N;;;;; +BC86;HANGUL SYLLABLE BEOGG;Lo;0;L;;;;;N;;;;; +BC87;HANGUL SYLLABLE BEOGS;Lo;0;L;;;;;N;;;;; +BC88;HANGUL SYLLABLE BEON;Lo;0;L;;;;;N;;;;; +BC89;HANGUL SYLLABLE BEONI;Lo;0;L;;;;;N;;;;; +BC8A;HANGUL SYLLABLE BEONH;Lo;0;L;;;;;N;;;;; +BC8B;HANGUL SYLLABLE BEOD;Lo;0;L;;;;;N;;;;; +BC8C;HANGUL SYLLABLE BEOL;Lo;0;L;;;;;N;;;;; +BC8D;HANGUL SYLLABLE BEOLG;Lo;0;L;;;;;N;;;;; +BC8E;HANGUL SYLLABLE BEOLM;Lo;0;L;;;;;N;;;;; +BC8F;HANGUL SYLLABLE BEOLB;Lo;0;L;;;;;N;;;;; +BC90;HANGUL SYLLABLE BEOLS;Lo;0;L;;;;;N;;;;; +BC91;HANGUL SYLLABLE BEOLT;Lo;0;L;;;;;N;;;;; +BC92;HANGUL SYLLABLE BEOLP;Lo;0;L;;;;;N;;;;; +BC93;HANGUL SYLLABLE BEOLH;Lo;0;L;;;;;N;;;;; +BC94;HANGUL SYLLABLE BEOM;Lo;0;L;;;;;N;;;;; +BC95;HANGUL SYLLABLE BEOB;Lo;0;L;;;;;N;;;;; +BC96;HANGUL SYLLABLE BEOBS;Lo;0;L;;;;;N;;;;; +BC97;HANGUL SYLLABLE BEOS;Lo;0;L;;;;;N;;;;; +BC98;HANGUL SYLLABLE BEOSS;Lo;0;L;;;;;N;;;;; +BC99;HANGUL SYLLABLE BEONG;Lo;0;L;;;;;N;;;;; +BC9A;HANGUL SYLLABLE BEOJ;Lo;0;L;;;;;N;;;;; +BC9B;HANGUL SYLLABLE BEOC;Lo;0;L;;;;;N;;;;; +BC9C;HANGUL SYLLABLE BEOK;Lo;0;L;;;;;N;;;;; +BC9D;HANGUL SYLLABLE BEOT;Lo;0;L;;;;;N;;;;; +BC9E;HANGUL SYLLABLE BEOP;Lo;0;L;;;;;N;;;;; +BC9F;HANGUL SYLLABLE BEOH;Lo;0;L;;;;;N;;;;; +BCA0;HANGUL SYLLABLE BE;Lo;0;L;;;;;N;;;;; +BCA1;HANGUL SYLLABLE BEG;Lo;0;L;;;;;N;;;;; +BCA2;HANGUL SYLLABLE BEGG;Lo;0;L;;;;;N;;;;; +BCA3;HANGUL SYLLABLE BEGS;Lo;0;L;;;;;N;;;;; +BCA4;HANGUL SYLLABLE BEN;Lo;0;L;;;;;N;;;;; +BCA5;HANGUL SYLLABLE BENI;Lo;0;L;;;;;N;;;;; +BCA6;HANGUL SYLLABLE BENH;Lo;0;L;;;;;N;;;;; +BCA7;HANGUL SYLLABLE BED;Lo;0;L;;;;;N;;;;; +BCA8;HANGUL SYLLABLE BEL;Lo;0;L;;;;;N;;;;; +BCA9;HANGUL SYLLABLE BELG;Lo;0;L;;;;;N;;;;; +BCAA;HANGUL SYLLABLE BELM;Lo;0;L;;;;;N;;;;; +BCAB;HANGUL SYLLABLE BELB;Lo;0;L;;;;;N;;;;; +BCAC;HANGUL SYLLABLE BELS;Lo;0;L;;;;;N;;;;; +BCAD;HANGUL SYLLABLE BELT;Lo;0;L;;;;;N;;;;; +BCAE;HANGUL SYLLABLE BELP;Lo;0;L;;;;;N;;;;; +BCAF;HANGUL SYLLABLE BELH;Lo;0;L;;;;;N;;;;; +BCB0;HANGUL SYLLABLE BEM;Lo;0;L;;;;;N;;;;; +BCB1;HANGUL SYLLABLE BEB;Lo;0;L;;;;;N;;;;; +BCB2;HANGUL SYLLABLE BEBS;Lo;0;L;;;;;N;;;;; +BCB3;HANGUL SYLLABLE BES;Lo;0;L;;;;;N;;;;; +BCB4;HANGUL SYLLABLE BESS;Lo;0;L;;;;;N;;;;; +BCB5;HANGUL SYLLABLE BENG;Lo;0;L;;;;;N;;;;; +BCB6;HANGUL SYLLABLE BEJ;Lo;0;L;;;;;N;;;;; +BCB7;HANGUL SYLLABLE BEC;Lo;0;L;;;;;N;;;;; +BCB8;HANGUL SYLLABLE BEK;Lo;0;L;;;;;N;;;;; +BCB9;HANGUL SYLLABLE BET;Lo;0;L;;;;;N;;;;; +BCBA;HANGUL SYLLABLE BEP;Lo;0;L;;;;;N;;;;; +BCBB;HANGUL SYLLABLE BEH;Lo;0;L;;;;;N;;;;; +BCBC;HANGUL SYLLABLE BYEO;Lo;0;L;;;;;N;;;;; +BCBD;HANGUL SYLLABLE BYEOG;Lo;0;L;;;;;N;;;;; +BCBE;HANGUL SYLLABLE BYEOGG;Lo;0;L;;;;;N;;;;; +BCBF;HANGUL SYLLABLE BYEOGS;Lo;0;L;;;;;N;;;;; +BCC0;HANGUL SYLLABLE BYEON;Lo;0;L;;;;;N;;;;; +BCC1;HANGUL SYLLABLE BYEONI;Lo;0;L;;;;;N;;;;; +BCC2;HANGUL SYLLABLE BYEONH;Lo;0;L;;;;;N;;;;; +BCC3;HANGUL SYLLABLE BYEOD;Lo;0;L;;;;;N;;;;; +BCC4;HANGUL SYLLABLE BYEOL;Lo;0;L;;;;;N;;;;; +BCC5;HANGUL SYLLABLE BYEOLG;Lo;0;L;;;;;N;;;;; +BCC6;HANGUL SYLLABLE BYEOLM;Lo;0;L;;;;;N;;;;; +BCC7;HANGUL SYLLABLE BYEOLB;Lo;0;L;;;;;N;;;;; +BCC8;HANGUL SYLLABLE BYEOLS;Lo;0;L;;;;;N;;;;; +BCC9;HANGUL SYLLABLE BYEOLT;Lo;0;L;;;;;N;;;;; +BCCA;HANGUL SYLLABLE BYEOLP;Lo;0;L;;;;;N;;;;; +BCCB;HANGUL SYLLABLE BYEOLH;Lo;0;L;;;;;N;;;;; +BCCC;HANGUL SYLLABLE BYEOM;Lo;0;L;;;;;N;;;;; +BCCD;HANGUL SYLLABLE BYEOB;Lo;0;L;;;;;N;;;;; +BCCE;HANGUL SYLLABLE BYEOBS;Lo;0;L;;;;;N;;;;; +BCCF;HANGUL SYLLABLE BYEOS;Lo;0;L;;;;;N;;;;; +BCD0;HANGUL SYLLABLE BYEOSS;Lo;0;L;;;;;N;;;;; +BCD1;HANGUL SYLLABLE BYEONG;Lo;0;L;;;;;N;;;;; +BCD2;HANGUL SYLLABLE BYEOJ;Lo;0;L;;;;;N;;;;; +BCD3;HANGUL SYLLABLE BYEOC;Lo;0;L;;;;;N;;;;; +BCD4;HANGUL SYLLABLE BYEOK;Lo;0;L;;;;;N;;;;; +BCD5;HANGUL SYLLABLE BYEOT;Lo;0;L;;;;;N;;;;; +BCD6;HANGUL SYLLABLE BYEOP;Lo;0;L;;;;;N;;;;; +BCD7;HANGUL SYLLABLE BYEOH;Lo;0;L;;;;;N;;;;; +BCD8;HANGUL SYLLABLE BYE;Lo;0;L;;;;;N;;;;; +BCD9;HANGUL SYLLABLE BYEG;Lo;0;L;;;;;N;;;;; +BCDA;HANGUL SYLLABLE BYEGG;Lo;0;L;;;;;N;;;;; +BCDB;HANGUL SYLLABLE BYEGS;Lo;0;L;;;;;N;;;;; +BCDC;HANGUL SYLLABLE BYEN;Lo;0;L;;;;;N;;;;; +BCDD;HANGUL SYLLABLE BYENI;Lo;0;L;;;;;N;;;;; +BCDE;HANGUL SYLLABLE BYENH;Lo;0;L;;;;;N;;;;; +BCDF;HANGUL SYLLABLE BYED;Lo;0;L;;;;;N;;;;; +BCE0;HANGUL SYLLABLE BYEL;Lo;0;L;;;;;N;;;;; +BCE1;HANGUL SYLLABLE BYELG;Lo;0;L;;;;;N;;;;; +BCE2;HANGUL SYLLABLE BYELM;Lo;0;L;;;;;N;;;;; +BCE3;HANGUL SYLLABLE BYELB;Lo;0;L;;;;;N;;;;; +BCE4;HANGUL SYLLABLE BYELS;Lo;0;L;;;;;N;;;;; +BCE5;HANGUL SYLLABLE BYELT;Lo;0;L;;;;;N;;;;; +BCE6;HANGUL SYLLABLE BYELP;Lo;0;L;;;;;N;;;;; +BCE7;HANGUL SYLLABLE BYELH;Lo;0;L;;;;;N;;;;; +BCE8;HANGUL SYLLABLE BYEM;Lo;0;L;;;;;N;;;;; +BCE9;HANGUL SYLLABLE BYEB;Lo;0;L;;;;;N;;;;; +BCEA;HANGUL SYLLABLE BYEBS;Lo;0;L;;;;;N;;;;; +BCEB;HANGUL SYLLABLE BYES;Lo;0;L;;;;;N;;;;; +BCEC;HANGUL SYLLABLE BYESS;Lo;0;L;;;;;N;;;;; +BCED;HANGUL SYLLABLE BYENG;Lo;0;L;;;;;N;;;;; +BCEE;HANGUL SYLLABLE BYEJ;Lo;0;L;;;;;N;;;;; +BCEF;HANGUL SYLLABLE BYEC;Lo;0;L;;;;;N;;;;; +BCF0;HANGUL SYLLABLE BYEK;Lo;0;L;;;;;N;;;;; +BCF1;HANGUL SYLLABLE BYET;Lo;0;L;;;;;N;;;;; +BCF2;HANGUL SYLLABLE BYEP;Lo;0;L;;;;;N;;;;; +BCF3;HANGUL SYLLABLE BYEH;Lo;0;L;;;;;N;;;;; +BCF4;HANGUL SYLLABLE BO;Lo;0;L;;;;;N;;;;; +BCF5;HANGUL SYLLABLE BOG;Lo;0;L;;;;;N;;;;; +BCF6;HANGUL SYLLABLE BOGG;Lo;0;L;;;;;N;;;;; +BCF7;HANGUL SYLLABLE BOGS;Lo;0;L;;;;;N;;;;; +BCF8;HANGUL SYLLABLE BON;Lo;0;L;;;;;N;;;;; +BCF9;HANGUL SYLLABLE BONI;Lo;0;L;;;;;N;;;;; +BCFA;HANGUL SYLLABLE BONH;Lo;0;L;;;;;N;;;;; +BCFB;HANGUL SYLLABLE BOD;Lo;0;L;;;;;N;;;;; +BCFC;HANGUL SYLLABLE BOL;Lo;0;L;;;;;N;;;;; +BCFD;HANGUL SYLLABLE BOLG;Lo;0;L;;;;;N;;;;; +BCFE;HANGUL SYLLABLE BOLM;Lo;0;L;;;;;N;;;;; +BCFF;HANGUL SYLLABLE BOLB;Lo;0;L;;;;;N;;;;; +BD00;HANGUL SYLLABLE BOLS;Lo;0;L;;;;;N;;;;; +BD01;HANGUL SYLLABLE BOLT;Lo;0;L;;;;;N;;;;; +BD02;HANGUL SYLLABLE BOLP;Lo;0;L;;;;;N;;;;; +BD03;HANGUL SYLLABLE BOLH;Lo;0;L;;;;;N;;;;; +BD04;HANGUL SYLLABLE BOM;Lo;0;L;;;;;N;;;;; +BD05;HANGUL SYLLABLE BOB;Lo;0;L;;;;;N;;;;; +BD06;HANGUL SYLLABLE BOBS;Lo;0;L;;;;;N;;;;; +BD07;HANGUL SYLLABLE BOS;Lo;0;L;;;;;N;;;;; +BD08;HANGUL SYLLABLE BOSS;Lo;0;L;;;;;N;;;;; +BD09;HANGUL SYLLABLE BONG;Lo;0;L;;;;;N;;;;; +BD0A;HANGUL SYLLABLE BOJ;Lo;0;L;;;;;N;;;;; +BD0B;HANGUL SYLLABLE BOC;Lo;0;L;;;;;N;;;;; +BD0C;HANGUL SYLLABLE BOK;Lo;0;L;;;;;N;;;;; +BD0D;HANGUL SYLLABLE BOT;Lo;0;L;;;;;N;;;;; +BD0E;HANGUL SYLLABLE BOP;Lo;0;L;;;;;N;;;;; +BD0F;HANGUL SYLLABLE BOH;Lo;0;L;;;;;N;;;;; +BD10;HANGUL SYLLABLE BWA;Lo;0;L;;;;;N;;;;; +BD11;HANGUL SYLLABLE BWAG;Lo;0;L;;;;;N;;;;; +BD12;HANGUL SYLLABLE BWAGG;Lo;0;L;;;;;N;;;;; +BD13;HANGUL SYLLABLE BWAGS;Lo;0;L;;;;;N;;;;; +BD14;HANGUL SYLLABLE BWAN;Lo;0;L;;;;;N;;;;; +BD15;HANGUL SYLLABLE BWANI;Lo;0;L;;;;;N;;;;; +BD16;HANGUL SYLLABLE BWANH;Lo;0;L;;;;;N;;;;; +BD17;HANGUL SYLLABLE BWAD;Lo;0;L;;;;;N;;;;; +BD18;HANGUL SYLLABLE BWAL;Lo;0;L;;;;;N;;;;; +BD19;HANGUL SYLLABLE BWALG;Lo;0;L;;;;;N;;;;; +BD1A;HANGUL SYLLABLE BWALM;Lo;0;L;;;;;N;;;;; +BD1B;HANGUL SYLLABLE BWALB;Lo;0;L;;;;;N;;;;; +BD1C;HANGUL SYLLABLE BWALS;Lo;0;L;;;;;N;;;;; +BD1D;HANGUL SYLLABLE BWALT;Lo;0;L;;;;;N;;;;; +BD1E;HANGUL SYLLABLE BWALP;Lo;0;L;;;;;N;;;;; +BD1F;HANGUL SYLLABLE BWALH;Lo;0;L;;;;;N;;;;; +BD20;HANGUL SYLLABLE BWAM;Lo;0;L;;;;;N;;;;; +BD21;HANGUL SYLLABLE BWAB;Lo;0;L;;;;;N;;;;; +BD22;HANGUL SYLLABLE BWABS;Lo;0;L;;;;;N;;;;; +BD23;HANGUL SYLLABLE BWAS;Lo;0;L;;;;;N;;;;; +BD24;HANGUL SYLLABLE BWASS;Lo;0;L;;;;;N;;;;; +BD25;HANGUL SYLLABLE BWANG;Lo;0;L;;;;;N;;;;; +BD26;HANGUL SYLLABLE BWAJ;Lo;0;L;;;;;N;;;;; +BD27;HANGUL SYLLABLE BWAC;Lo;0;L;;;;;N;;;;; +BD28;HANGUL SYLLABLE BWAK;Lo;0;L;;;;;N;;;;; +BD29;HANGUL SYLLABLE BWAT;Lo;0;L;;;;;N;;;;; +BD2A;HANGUL SYLLABLE BWAP;Lo;0;L;;;;;N;;;;; +BD2B;HANGUL SYLLABLE BWAH;Lo;0;L;;;;;N;;;;; +BD2C;HANGUL SYLLABLE BWAE;Lo;0;L;;;;;N;;;;; +BD2D;HANGUL SYLLABLE BWAEG;Lo;0;L;;;;;N;;;;; +BD2E;HANGUL SYLLABLE BWAEGG;Lo;0;L;;;;;N;;;;; +BD2F;HANGUL SYLLABLE BWAEGS;Lo;0;L;;;;;N;;;;; +BD30;HANGUL SYLLABLE BWAEN;Lo;0;L;;;;;N;;;;; +BD31;HANGUL SYLLABLE BWAENI;Lo;0;L;;;;;N;;;;; +BD32;HANGUL SYLLABLE BWAENH;Lo;0;L;;;;;N;;;;; +BD33;HANGUL SYLLABLE BWAED;Lo;0;L;;;;;N;;;;; +BD34;HANGUL SYLLABLE BWAEL;Lo;0;L;;;;;N;;;;; +BD35;HANGUL SYLLABLE BWAELG;Lo;0;L;;;;;N;;;;; +BD36;HANGUL SYLLABLE BWAELM;Lo;0;L;;;;;N;;;;; +BD37;HANGUL SYLLABLE BWAELB;Lo;0;L;;;;;N;;;;; +BD38;HANGUL SYLLABLE BWAELS;Lo;0;L;;;;;N;;;;; +BD39;HANGUL SYLLABLE BWAELT;Lo;0;L;;;;;N;;;;; +BD3A;HANGUL SYLLABLE BWAELP;Lo;0;L;;;;;N;;;;; +BD3B;HANGUL SYLLABLE BWAELH;Lo;0;L;;;;;N;;;;; +BD3C;HANGUL SYLLABLE BWAEM;Lo;0;L;;;;;N;;;;; +BD3D;HANGUL SYLLABLE BWAEB;Lo;0;L;;;;;N;;;;; +BD3E;HANGUL SYLLABLE BWAEBS;Lo;0;L;;;;;N;;;;; +BD3F;HANGUL SYLLABLE BWAES;Lo;0;L;;;;;N;;;;; +BD40;HANGUL SYLLABLE BWAESS;Lo;0;L;;;;;N;;;;; +BD41;HANGUL SYLLABLE BWAENG;Lo;0;L;;;;;N;;;;; +BD42;HANGUL SYLLABLE BWAEJ;Lo;0;L;;;;;N;;;;; +BD43;HANGUL SYLLABLE BWAEC;Lo;0;L;;;;;N;;;;; +BD44;HANGUL SYLLABLE BWAEK;Lo;0;L;;;;;N;;;;; +BD45;HANGUL SYLLABLE BWAET;Lo;0;L;;;;;N;;;;; +BD46;HANGUL SYLLABLE BWAEP;Lo;0;L;;;;;N;;;;; +BD47;HANGUL SYLLABLE BWAEH;Lo;0;L;;;;;N;;;;; +BD48;HANGUL SYLLABLE BOE;Lo;0;L;;;;;N;;;;; +BD49;HANGUL SYLLABLE BOEG;Lo;0;L;;;;;N;;;;; +BD4A;HANGUL SYLLABLE BOEGG;Lo;0;L;;;;;N;;;;; +BD4B;HANGUL SYLLABLE BOEGS;Lo;0;L;;;;;N;;;;; +BD4C;HANGUL SYLLABLE BOEN;Lo;0;L;;;;;N;;;;; +BD4D;HANGUL SYLLABLE BOENI;Lo;0;L;;;;;N;;;;; +BD4E;HANGUL SYLLABLE BOENH;Lo;0;L;;;;;N;;;;; +BD4F;HANGUL SYLLABLE BOED;Lo;0;L;;;;;N;;;;; +BD50;HANGUL SYLLABLE BOEL;Lo;0;L;;;;;N;;;;; +BD51;HANGUL SYLLABLE BOELG;Lo;0;L;;;;;N;;;;; +BD52;HANGUL SYLLABLE BOELM;Lo;0;L;;;;;N;;;;; +BD53;HANGUL SYLLABLE BOELB;Lo;0;L;;;;;N;;;;; +BD54;HANGUL SYLLABLE BOELS;Lo;0;L;;;;;N;;;;; +BD55;HANGUL SYLLABLE BOELT;Lo;0;L;;;;;N;;;;; +BD56;HANGUL SYLLABLE BOELP;Lo;0;L;;;;;N;;;;; +BD57;HANGUL SYLLABLE BOELH;Lo;0;L;;;;;N;;;;; +BD58;HANGUL SYLLABLE BOEM;Lo;0;L;;;;;N;;;;; +BD59;HANGUL SYLLABLE BOEB;Lo;0;L;;;;;N;;;;; +BD5A;HANGUL SYLLABLE BOEBS;Lo;0;L;;;;;N;;;;; +BD5B;HANGUL SYLLABLE BOES;Lo;0;L;;;;;N;;;;; +BD5C;HANGUL SYLLABLE BOESS;Lo;0;L;;;;;N;;;;; +BD5D;HANGUL SYLLABLE BOENG;Lo;0;L;;;;;N;;;;; +BD5E;HANGUL SYLLABLE BOEJ;Lo;0;L;;;;;N;;;;; +BD5F;HANGUL SYLLABLE BOEC;Lo;0;L;;;;;N;;;;; +BD60;HANGUL SYLLABLE BOEK;Lo;0;L;;;;;N;;;;; +BD61;HANGUL SYLLABLE BOET;Lo;0;L;;;;;N;;;;; +BD62;HANGUL SYLLABLE BOEP;Lo;0;L;;;;;N;;;;; +BD63;HANGUL SYLLABLE BOEH;Lo;0;L;;;;;N;;;;; +BD64;HANGUL SYLLABLE BYO;Lo;0;L;;;;;N;;;;; +BD65;HANGUL SYLLABLE BYOG;Lo;0;L;;;;;N;;;;; +BD66;HANGUL SYLLABLE BYOGG;Lo;0;L;;;;;N;;;;; +BD67;HANGUL SYLLABLE BYOGS;Lo;0;L;;;;;N;;;;; +BD68;HANGUL SYLLABLE BYON;Lo;0;L;;;;;N;;;;; +BD69;HANGUL SYLLABLE BYONI;Lo;0;L;;;;;N;;;;; +BD6A;HANGUL SYLLABLE BYONH;Lo;0;L;;;;;N;;;;; +BD6B;HANGUL SYLLABLE BYOD;Lo;0;L;;;;;N;;;;; +BD6C;HANGUL SYLLABLE BYOL;Lo;0;L;;;;;N;;;;; +BD6D;HANGUL SYLLABLE BYOLG;Lo;0;L;;;;;N;;;;; +BD6E;HANGUL SYLLABLE BYOLM;Lo;0;L;;;;;N;;;;; +BD6F;HANGUL SYLLABLE BYOLB;Lo;0;L;;;;;N;;;;; +BD70;HANGUL SYLLABLE BYOLS;Lo;0;L;;;;;N;;;;; +BD71;HANGUL SYLLABLE BYOLT;Lo;0;L;;;;;N;;;;; +BD72;HANGUL SYLLABLE BYOLP;Lo;0;L;;;;;N;;;;; +BD73;HANGUL SYLLABLE BYOLH;Lo;0;L;;;;;N;;;;; +BD74;HANGUL SYLLABLE BYOM;Lo;0;L;;;;;N;;;;; +BD75;HANGUL SYLLABLE BYOB;Lo;0;L;;;;;N;;;;; +BD76;HANGUL SYLLABLE BYOBS;Lo;0;L;;;;;N;;;;; +BD77;HANGUL SYLLABLE BYOS;Lo;0;L;;;;;N;;;;; +BD78;HANGUL SYLLABLE BYOSS;Lo;0;L;;;;;N;;;;; +BD79;HANGUL SYLLABLE BYONG;Lo;0;L;;;;;N;;;;; +BD7A;HANGUL SYLLABLE BYOJ;Lo;0;L;;;;;N;;;;; +BD7B;HANGUL SYLLABLE BYOC;Lo;0;L;;;;;N;;;;; +BD7C;HANGUL SYLLABLE BYOK;Lo;0;L;;;;;N;;;;; +BD7D;HANGUL SYLLABLE BYOT;Lo;0;L;;;;;N;;;;; +BD7E;HANGUL SYLLABLE BYOP;Lo;0;L;;;;;N;;;;; +BD7F;HANGUL SYLLABLE BYOH;Lo;0;L;;;;;N;;;;; +BD80;HANGUL SYLLABLE BU;Lo;0;L;;;;;N;;;;; +BD81;HANGUL SYLLABLE BUG;Lo;0;L;;;;;N;;;;; +BD82;HANGUL SYLLABLE BUGG;Lo;0;L;;;;;N;;;;; +BD83;HANGUL SYLLABLE BUGS;Lo;0;L;;;;;N;;;;; +BD84;HANGUL SYLLABLE BUN;Lo;0;L;;;;;N;;;;; +BD85;HANGUL SYLLABLE BUNI;Lo;0;L;;;;;N;;;;; +BD86;HANGUL SYLLABLE BUNH;Lo;0;L;;;;;N;;;;; +BD87;HANGUL SYLLABLE BUD;Lo;0;L;;;;;N;;;;; +BD88;HANGUL SYLLABLE BUL;Lo;0;L;;;;;N;;;;; +BD89;HANGUL SYLLABLE BULG;Lo;0;L;;;;;N;;;;; +BD8A;HANGUL SYLLABLE BULM;Lo;0;L;;;;;N;;;;; +BD8B;HANGUL SYLLABLE BULB;Lo;0;L;;;;;N;;;;; +BD8C;HANGUL SYLLABLE BULS;Lo;0;L;;;;;N;;;;; +BD8D;HANGUL SYLLABLE BULT;Lo;0;L;;;;;N;;;;; +BD8E;HANGUL SYLLABLE BULP;Lo;0;L;;;;;N;;;;; +BD8F;HANGUL SYLLABLE BULH;Lo;0;L;;;;;N;;;;; +BD90;HANGUL SYLLABLE BUM;Lo;0;L;;;;;N;;;;; +BD91;HANGUL SYLLABLE BUB;Lo;0;L;;;;;N;;;;; +BD92;HANGUL SYLLABLE BUBS;Lo;0;L;;;;;N;;;;; +BD93;HANGUL SYLLABLE BUS;Lo;0;L;;;;;N;;;;; +BD94;HANGUL SYLLABLE BUSS;Lo;0;L;;;;;N;;;;; +BD95;HANGUL SYLLABLE BUNG;Lo;0;L;;;;;N;;;;; +BD96;HANGUL SYLLABLE BUJ;Lo;0;L;;;;;N;;;;; +BD97;HANGUL SYLLABLE BUC;Lo;0;L;;;;;N;;;;; +BD98;HANGUL SYLLABLE BUK;Lo;0;L;;;;;N;;;;; +BD99;HANGUL SYLLABLE BUT;Lo;0;L;;;;;N;;;;; +BD9A;HANGUL SYLLABLE BUP;Lo;0;L;;;;;N;;;;; +BD9B;HANGUL SYLLABLE BUH;Lo;0;L;;;;;N;;;;; +BD9C;HANGUL SYLLABLE BWEO;Lo;0;L;;;;;N;;;;; +BD9D;HANGUL SYLLABLE BWEOG;Lo;0;L;;;;;N;;;;; +BD9E;HANGUL SYLLABLE BWEOGG;Lo;0;L;;;;;N;;;;; +BD9F;HANGUL SYLLABLE BWEOGS;Lo;0;L;;;;;N;;;;; +BDA0;HANGUL SYLLABLE BWEON;Lo;0;L;;;;;N;;;;; +BDA1;HANGUL SYLLABLE BWEONI;Lo;0;L;;;;;N;;;;; +BDA2;HANGUL SYLLABLE BWEONH;Lo;0;L;;;;;N;;;;; +BDA3;HANGUL SYLLABLE BWEOD;Lo;0;L;;;;;N;;;;; +BDA4;HANGUL SYLLABLE BWEOL;Lo;0;L;;;;;N;;;;; +BDA5;HANGUL SYLLABLE BWEOLG;Lo;0;L;;;;;N;;;;; +BDA6;HANGUL SYLLABLE BWEOLM;Lo;0;L;;;;;N;;;;; +BDA7;HANGUL SYLLABLE BWEOLB;Lo;0;L;;;;;N;;;;; +BDA8;HANGUL SYLLABLE BWEOLS;Lo;0;L;;;;;N;;;;; +BDA9;HANGUL SYLLABLE BWEOLT;Lo;0;L;;;;;N;;;;; +BDAA;HANGUL SYLLABLE BWEOLP;Lo;0;L;;;;;N;;;;; +BDAB;HANGUL SYLLABLE BWEOLH;Lo;0;L;;;;;N;;;;; +BDAC;HANGUL SYLLABLE BWEOM;Lo;0;L;;;;;N;;;;; +BDAD;HANGUL SYLLABLE BWEOB;Lo;0;L;;;;;N;;;;; +BDAE;HANGUL SYLLABLE BWEOBS;Lo;0;L;;;;;N;;;;; +BDAF;HANGUL SYLLABLE BWEOS;Lo;0;L;;;;;N;;;;; +BDB0;HANGUL SYLLABLE BWEOSS;Lo;0;L;;;;;N;;;;; +BDB1;HANGUL SYLLABLE BWEONG;Lo;0;L;;;;;N;;;;; +BDB2;HANGUL SYLLABLE BWEOJ;Lo;0;L;;;;;N;;;;; +BDB3;HANGUL SYLLABLE BWEOC;Lo;0;L;;;;;N;;;;; +BDB4;HANGUL SYLLABLE BWEOK;Lo;0;L;;;;;N;;;;; +BDB5;HANGUL SYLLABLE BWEOT;Lo;0;L;;;;;N;;;;; +BDB6;HANGUL SYLLABLE BWEOP;Lo;0;L;;;;;N;;;;; +BDB7;HANGUL SYLLABLE BWEOH;Lo;0;L;;;;;N;;;;; +BDB8;HANGUL SYLLABLE BWE;Lo;0;L;;;;;N;;;;; +BDB9;HANGUL SYLLABLE BWEG;Lo;0;L;;;;;N;;;;; +BDBA;HANGUL SYLLABLE BWEGG;Lo;0;L;;;;;N;;;;; +BDBB;HANGUL SYLLABLE BWEGS;Lo;0;L;;;;;N;;;;; +BDBC;HANGUL SYLLABLE BWEN;Lo;0;L;;;;;N;;;;; +BDBD;HANGUL SYLLABLE BWENI;Lo;0;L;;;;;N;;;;; +BDBE;HANGUL SYLLABLE BWENH;Lo;0;L;;;;;N;;;;; +BDBF;HANGUL SYLLABLE BWED;Lo;0;L;;;;;N;;;;; +BDC0;HANGUL SYLLABLE BWEL;Lo;0;L;;;;;N;;;;; +BDC1;HANGUL SYLLABLE BWELG;Lo;0;L;;;;;N;;;;; +BDC2;HANGUL SYLLABLE BWELM;Lo;0;L;;;;;N;;;;; +BDC3;HANGUL SYLLABLE BWELB;Lo;0;L;;;;;N;;;;; +BDC4;HANGUL SYLLABLE BWELS;Lo;0;L;;;;;N;;;;; +BDC5;HANGUL SYLLABLE BWELT;Lo;0;L;;;;;N;;;;; +BDC6;HANGUL SYLLABLE BWELP;Lo;0;L;;;;;N;;;;; +BDC7;HANGUL SYLLABLE BWELH;Lo;0;L;;;;;N;;;;; +BDC8;HANGUL SYLLABLE BWEM;Lo;0;L;;;;;N;;;;; +BDC9;HANGUL SYLLABLE BWEB;Lo;0;L;;;;;N;;;;; +BDCA;HANGUL SYLLABLE BWEBS;Lo;0;L;;;;;N;;;;; +BDCB;HANGUL SYLLABLE BWES;Lo;0;L;;;;;N;;;;; +BDCC;HANGUL SYLLABLE BWESS;Lo;0;L;;;;;N;;;;; +BDCD;HANGUL SYLLABLE BWENG;Lo;0;L;;;;;N;;;;; +BDCE;HANGUL SYLLABLE BWEJ;Lo;0;L;;;;;N;;;;; +BDCF;HANGUL SYLLABLE BWEC;Lo;0;L;;;;;N;;;;; +BDD0;HANGUL SYLLABLE BWEK;Lo;0;L;;;;;N;;;;; +BDD1;HANGUL SYLLABLE BWET;Lo;0;L;;;;;N;;;;; +BDD2;HANGUL SYLLABLE BWEP;Lo;0;L;;;;;N;;;;; +BDD3;HANGUL SYLLABLE BWEH;Lo;0;L;;;;;N;;;;; +BDD4;HANGUL SYLLABLE BWI;Lo;0;L;;;;;N;;;;; +BDD5;HANGUL SYLLABLE BWIG;Lo;0;L;;;;;N;;;;; +BDD6;HANGUL SYLLABLE BWIGG;Lo;0;L;;;;;N;;;;; +BDD7;HANGUL SYLLABLE BWIGS;Lo;0;L;;;;;N;;;;; +BDD8;HANGUL SYLLABLE BWIN;Lo;0;L;;;;;N;;;;; +BDD9;HANGUL SYLLABLE BWINI;Lo;0;L;;;;;N;;;;; +BDDA;HANGUL SYLLABLE BWINH;Lo;0;L;;;;;N;;;;; +BDDB;HANGUL SYLLABLE BWID;Lo;0;L;;;;;N;;;;; +BDDC;HANGUL SYLLABLE BWIL;Lo;0;L;;;;;N;;;;; +BDDD;HANGUL SYLLABLE BWILG;Lo;0;L;;;;;N;;;;; +BDDE;HANGUL SYLLABLE BWILM;Lo;0;L;;;;;N;;;;; +BDDF;HANGUL SYLLABLE BWILB;Lo;0;L;;;;;N;;;;; +BDE0;HANGUL SYLLABLE BWILS;Lo;0;L;;;;;N;;;;; +BDE1;HANGUL SYLLABLE BWILT;Lo;0;L;;;;;N;;;;; +BDE2;HANGUL SYLLABLE BWILP;Lo;0;L;;;;;N;;;;; +BDE3;HANGUL SYLLABLE BWILH;Lo;0;L;;;;;N;;;;; +BDE4;HANGUL SYLLABLE BWIM;Lo;0;L;;;;;N;;;;; +BDE5;HANGUL SYLLABLE BWIB;Lo;0;L;;;;;N;;;;; +BDE6;HANGUL SYLLABLE BWIBS;Lo;0;L;;;;;N;;;;; +BDE7;HANGUL SYLLABLE BWIS;Lo;0;L;;;;;N;;;;; +BDE8;HANGUL SYLLABLE BWISS;Lo;0;L;;;;;N;;;;; +BDE9;HANGUL SYLLABLE BWING;Lo;0;L;;;;;N;;;;; +BDEA;HANGUL SYLLABLE BWIJ;Lo;0;L;;;;;N;;;;; +BDEB;HANGUL SYLLABLE BWIC;Lo;0;L;;;;;N;;;;; +BDEC;HANGUL SYLLABLE BWIK;Lo;0;L;;;;;N;;;;; +BDED;HANGUL SYLLABLE BWIT;Lo;0;L;;;;;N;;;;; +BDEE;HANGUL SYLLABLE BWIP;Lo;0;L;;;;;N;;;;; +BDEF;HANGUL SYLLABLE BWIH;Lo;0;L;;;;;N;;;;; +BDF0;HANGUL SYLLABLE BYU;Lo;0;L;;;;;N;;;;; +BDF1;HANGUL SYLLABLE BYUG;Lo;0;L;;;;;N;;;;; +BDF2;HANGUL SYLLABLE BYUGG;Lo;0;L;;;;;N;;;;; +BDF3;HANGUL SYLLABLE BYUGS;Lo;0;L;;;;;N;;;;; +BDF4;HANGUL SYLLABLE BYUN;Lo;0;L;;;;;N;;;;; +BDF5;HANGUL SYLLABLE BYUNI;Lo;0;L;;;;;N;;;;; +BDF6;HANGUL SYLLABLE BYUNH;Lo;0;L;;;;;N;;;;; +BDF7;HANGUL SYLLABLE BYUD;Lo;0;L;;;;;N;;;;; +BDF8;HANGUL SYLLABLE BYUL;Lo;0;L;;;;;N;;;;; +BDF9;HANGUL SYLLABLE BYULG;Lo;0;L;;;;;N;;;;; +BDFA;HANGUL SYLLABLE BYULM;Lo;0;L;;;;;N;;;;; +BDFB;HANGUL SYLLABLE BYULB;Lo;0;L;;;;;N;;;;; +BDFC;HANGUL SYLLABLE BYULS;Lo;0;L;;;;;N;;;;; +BDFD;HANGUL SYLLABLE BYULT;Lo;0;L;;;;;N;;;;; +BDFE;HANGUL SYLLABLE BYULP;Lo;0;L;;;;;N;;;;; +BDFF;HANGUL SYLLABLE BYULH;Lo;0;L;;;;;N;;;;; +BE00;HANGUL SYLLABLE BYUM;Lo;0;L;;;;;N;;;;; +BE01;HANGUL SYLLABLE BYUB;Lo;0;L;;;;;N;;;;; +BE02;HANGUL SYLLABLE BYUBS;Lo;0;L;;;;;N;;;;; +BE03;HANGUL SYLLABLE BYUS;Lo;0;L;;;;;N;;;;; +BE04;HANGUL SYLLABLE BYUSS;Lo;0;L;;;;;N;;;;; +BE05;HANGUL SYLLABLE BYUNG;Lo;0;L;;;;;N;;;;; +BE06;HANGUL SYLLABLE BYUJ;Lo;0;L;;;;;N;;;;; +BE07;HANGUL SYLLABLE BYUC;Lo;0;L;;;;;N;;;;; +BE08;HANGUL SYLLABLE BYUK;Lo;0;L;;;;;N;;;;; +BE09;HANGUL SYLLABLE BYUT;Lo;0;L;;;;;N;;;;; +BE0A;HANGUL SYLLABLE BYUP;Lo;0;L;;;;;N;;;;; +BE0B;HANGUL SYLLABLE BYUH;Lo;0;L;;;;;N;;;;; +BE0C;HANGUL SYLLABLE BEU;Lo;0;L;;;;;N;;;;; +BE0D;HANGUL SYLLABLE BEUG;Lo;0;L;;;;;N;;;;; +BE0E;HANGUL SYLLABLE BEUGG;Lo;0;L;;;;;N;;;;; +BE0F;HANGUL SYLLABLE BEUGS;Lo;0;L;;;;;N;;;;; +BE10;HANGUL SYLLABLE BEUN;Lo;0;L;;;;;N;;;;; +BE11;HANGUL SYLLABLE BEUNI;Lo;0;L;;;;;N;;;;; +BE12;HANGUL SYLLABLE BEUNH;Lo;0;L;;;;;N;;;;; +BE13;HANGUL SYLLABLE BEUD;Lo;0;L;;;;;N;;;;; +BE14;HANGUL SYLLABLE BEUL;Lo;0;L;;;;;N;;;;; +BE15;HANGUL SYLLABLE BEULG;Lo;0;L;;;;;N;;;;; +BE16;HANGUL SYLLABLE BEULM;Lo;0;L;;;;;N;;;;; +BE17;HANGUL SYLLABLE BEULB;Lo;0;L;;;;;N;;;;; +BE18;HANGUL SYLLABLE BEULS;Lo;0;L;;;;;N;;;;; +BE19;HANGUL SYLLABLE BEULT;Lo;0;L;;;;;N;;;;; +BE1A;HANGUL SYLLABLE BEULP;Lo;0;L;;;;;N;;;;; +BE1B;HANGUL SYLLABLE BEULH;Lo;0;L;;;;;N;;;;; +BE1C;HANGUL SYLLABLE BEUM;Lo;0;L;;;;;N;;;;; +BE1D;HANGUL SYLLABLE BEUB;Lo;0;L;;;;;N;;;;; +BE1E;HANGUL SYLLABLE BEUBS;Lo;0;L;;;;;N;;;;; +BE1F;HANGUL SYLLABLE BEUS;Lo;0;L;;;;;N;;;;; +BE20;HANGUL SYLLABLE BEUSS;Lo;0;L;;;;;N;;;;; +BE21;HANGUL SYLLABLE BEUNG;Lo;0;L;;;;;N;;;;; +BE22;HANGUL SYLLABLE BEUJ;Lo;0;L;;;;;N;;;;; +BE23;HANGUL SYLLABLE BEUC;Lo;0;L;;;;;N;;;;; +BE24;HANGUL SYLLABLE BEUK;Lo;0;L;;;;;N;;;;; +BE25;HANGUL SYLLABLE BEUT;Lo;0;L;;;;;N;;;;; +BE26;HANGUL SYLLABLE BEUP;Lo;0;L;;;;;N;;;;; +BE27;HANGUL SYLLABLE BEUH;Lo;0;L;;;;;N;;;;; +BE28;HANGUL SYLLABLE BYI;Lo;0;L;;;;;N;;;;; +BE29;HANGUL SYLLABLE BYIG;Lo;0;L;;;;;N;;;;; +BE2A;HANGUL SYLLABLE BYIGG;Lo;0;L;;;;;N;;;;; +BE2B;HANGUL SYLLABLE BYIGS;Lo;0;L;;;;;N;;;;; +BE2C;HANGUL SYLLABLE BYIN;Lo;0;L;;;;;N;;;;; +BE2D;HANGUL SYLLABLE BYINI;Lo;0;L;;;;;N;;;;; +BE2E;HANGUL SYLLABLE BYINH;Lo;0;L;;;;;N;;;;; +BE2F;HANGUL SYLLABLE BYID;Lo;0;L;;;;;N;;;;; +BE30;HANGUL SYLLABLE BYIL;Lo;0;L;;;;;N;;;;; +BE31;HANGUL SYLLABLE BYILG;Lo;0;L;;;;;N;;;;; +BE32;HANGUL SYLLABLE BYILM;Lo;0;L;;;;;N;;;;; +BE33;HANGUL SYLLABLE BYILB;Lo;0;L;;;;;N;;;;; +BE34;HANGUL SYLLABLE BYILS;Lo;0;L;;;;;N;;;;; +BE35;HANGUL SYLLABLE BYILT;Lo;0;L;;;;;N;;;;; +BE36;HANGUL SYLLABLE BYILP;Lo;0;L;;;;;N;;;;; +BE37;HANGUL SYLLABLE BYILH;Lo;0;L;;;;;N;;;;; +BE38;HANGUL SYLLABLE BYIM;Lo;0;L;;;;;N;;;;; +BE39;HANGUL SYLLABLE BYIB;Lo;0;L;;;;;N;;;;; +BE3A;HANGUL SYLLABLE BYIBS;Lo;0;L;;;;;N;;;;; +BE3B;HANGUL SYLLABLE BYIS;Lo;0;L;;;;;N;;;;; +BE3C;HANGUL SYLLABLE BYISS;Lo;0;L;;;;;N;;;;; +BE3D;HANGUL SYLLABLE BYING;Lo;0;L;;;;;N;;;;; +BE3E;HANGUL SYLLABLE BYIJ;Lo;0;L;;;;;N;;;;; +BE3F;HANGUL SYLLABLE BYIC;Lo;0;L;;;;;N;;;;; +BE40;HANGUL SYLLABLE BYIK;Lo;0;L;;;;;N;;;;; +BE41;HANGUL SYLLABLE BYIT;Lo;0;L;;;;;N;;;;; +BE42;HANGUL SYLLABLE BYIP;Lo;0;L;;;;;N;;;;; +BE43;HANGUL SYLLABLE BYIH;Lo;0;L;;;;;N;;;;; +BE44;HANGUL SYLLABLE BI;Lo;0;L;;;;;N;;;;; +BE45;HANGUL SYLLABLE BIG;Lo;0;L;;;;;N;;;;; +BE46;HANGUL SYLLABLE BIGG;Lo;0;L;;;;;N;;;;; +BE47;HANGUL SYLLABLE BIGS;Lo;0;L;;;;;N;;;;; +BE48;HANGUL SYLLABLE BIN;Lo;0;L;;;;;N;;;;; +BE49;HANGUL SYLLABLE BINI;Lo;0;L;;;;;N;;;;; +BE4A;HANGUL SYLLABLE BINH;Lo;0;L;;;;;N;;;;; +BE4B;HANGUL SYLLABLE BID;Lo;0;L;;;;;N;;;;; +BE4C;HANGUL SYLLABLE BIL;Lo;0;L;;;;;N;;;;; +BE4D;HANGUL SYLLABLE BILG;Lo;0;L;;;;;N;;;;; +BE4E;HANGUL SYLLABLE BILM;Lo;0;L;;;;;N;;;;; +BE4F;HANGUL SYLLABLE BILB;Lo;0;L;;;;;N;;;;; +BE50;HANGUL SYLLABLE BILS;Lo;0;L;;;;;N;;;;; +BE51;HANGUL SYLLABLE BILT;Lo;0;L;;;;;N;;;;; +BE52;HANGUL SYLLABLE BILP;Lo;0;L;;;;;N;;;;; +BE53;HANGUL SYLLABLE BILH;Lo;0;L;;;;;N;;;;; +BE54;HANGUL SYLLABLE BIM;Lo;0;L;;;;;N;;;;; +BE55;HANGUL SYLLABLE BIB;Lo;0;L;;;;;N;;;;; +BE56;HANGUL SYLLABLE BIBS;Lo;0;L;;;;;N;;;;; +BE57;HANGUL SYLLABLE BIS;Lo;0;L;;;;;N;;;;; +BE58;HANGUL SYLLABLE BISS;Lo;0;L;;;;;N;;;;; +BE59;HANGUL SYLLABLE BING;Lo;0;L;;;;;N;;;;; +BE5A;HANGUL SYLLABLE BIJ;Lo;0;L;;;;;N;;;;; +BE5B;HANGUL SYLLABLE BIC;Lo;0;L;;;;;N;;;;; +BE5C;HANGUL SYLLABLE BIK;Lo;0;L;;;;;N;;;;; +BE5D;HANGUL SYLLABLE BIT;Lo;0;L;;;;;N;;;;; +BE5E;HANGUL SYLLABLE BIP;Lo;0;L;;;;;N;;;;; +BE5F;HANGUL SYLLABLE BIH;Lo;0;L;;;;;N;;;;; +BE60;HANGUL SYLLABLE BBA;Lo;0;L;;;;;N;;;;; +BE61;HANGUL SYLLABLE BBAG;Lo;0;L;;;;;N;;;;; +BE62;HANGUL SYLLABLE BBAGG;Lo;0;L;;;;;N;;;;; +BE63;HANGUL SYLLABLE BBAGS;Lo;0;L;;;;;N;;;;; +BE64;HANGUL SYLLABLE BBAN;Lo;0;L;;;;;N;;;;; +BE65;HANGUL SYLLABLE BBANI;Lo;0;L;;;;;N;;;;; +BE66;HANGUL SYLLABLE BBANH;Lo;0;L;;;;;N;;;;; +BE67;HANGUL SYLLABLE BBAD;Lo;0;L;;;;;N;;;;; +BE68;HANGUL SYLLABLE BBAL;Lo;0;L;;;;;N;;;;; +BE69;HANGUL SYLLABLE BBALG;Lo;0;L;;;;;N;;;;; +BE6A;HANGUL SYLLABLE BBALM;Lo;0;L;;;;;N;;;;; +BE6B;HANGUL SYLLABLE BBALB;Lo;0;L;;;;;N;;;;; +BE6C;HANGUL SYLLABLE BBALS;Lo;0;L;;;;;N;;;;; +BE6D;HANGUL SYLLABLE BBALT;Lo;0;L;;;;;N;;;;; +BE6E;HANGUL SYLLABLE BBALP;Lo;0;L;;;;;N;;;;; +BE6F;HANGUL SYLLABLE BBALH;Lo;0;L;;;;;N;;;;; +BE70;HANGUL SYLLABLE BBAM;Lo;0;L;;;;;N;;;;; +BE71;HANGUL SYLLABLE BBAB;Lo;0;L;;;;;N;;;;; +BE72;HANGUL SYLLABLE BBABS;Lo;0;L;;;;;N;;;;; +BE73;HANGUL SYLLABLE BBAS;Lo;0;L;;;;;N;;;;; +BE74;HANGUL SYLLABLE BBASS;Lo;0;L;;;;;N;;;;; +BE75;HANGUL SYLLABLE BBANG;Lo;0;L;;;;;N;;;;; +BE76;HANGUL SYLLABLE BBAJ;Lo;0;L;;;;;N;;;;; +BE77;HANGUL SYLLABLE BBAC;Lo;0;L;;;;;N;;;;; +BE78;HANGUL SYLLABLE BBAK;Lo;0;L;;;;;N;;;;; +BE79;HANGUL SYLLABLE BBAT;Lo;0;L;;;;;N;;;;; +BE7A;HANGUL SYLLABLE BBAP;Lo;0;L;;;;;N;;;;; +BE7B;HANGUL SYLLABLE BBAH;Lo;0;L;;;;;N;;;;; +BE7C;HANGUL SYLLABLE BBAE;Lo;0;L;;;;;N;;;;; +BE7D;HANGUL SYLLABLE BBAEG;Lo;0;L;;;;;N;;;;; +BE7E;HANGUL SYLLABLE BBAEGG;Lo;0;L;;;;;N;;;;; +BE7F;HANGUL SYLLABLE BBAEGS;Lo;0;L;;;;;N;;;;; +BE80;HANGUL SYLLABLE BBAEN;Lo;0;L;;;;;N;;;;; +BE81;HANGUL SYLLABLE BBAENI;Lo;0;L;;;;;N;;;;; +BE82;HANGUL SYLLABLE BBAENH;Lo;0;L;;;;;N;;;;; +BE83;HANGUL SYLLABLE BBAED;Lo;0;L;;;;;N;;;;; +BE84;HANGUL SYLLABLE BBAEL;Lo;0;L;;;;;N;;;;; +BE85;HANGUL SYLLABLE BBAELG;Lo;0;L;;;;;N;;;;; +BE86;HANGUL SYLLABLE BBAELM;Lo;0;L;;;;;N;;;;; +BE87;HANGUL SYLLABLE BBAELB;Lo;0;L;;;;;N;;;;; +BE88;HANGUL SYLLABLE BBAELS;Lo;0;L;;;;;N;;;;; +BE89;HANGUL SYLLABLE BBAELT;Lo;0;L;;;;;N;;;;; +BE8A;HANGUL SYLLABLE BBAELP;Lo;0;L;;;;;N;;;;; +BE8B;HANGUL SYLLABLE BBAELH;Lo;0;L;;;;;N;;;;; +BE8C;HANGUL SYLLABLE BBAEM;Lo;0;L;;;;;N;;;;; +BE8D;HANGUL SYLLABLE BBAEB;Lo;0;L;;;;;N;;;;; +BE8E;HANGUL SYLLABLE BBAEBS;Lo;0;L;;;;;N;;;;; +BE8F;HANGUL SYLLABLE BBAES;Lo;0;L;;;;;N;;;;; +BE90;HANGUL SYLLABLE BBAESS;Lo;0;L;;;;;N;;;;; +BE91;HANGUL SYLLABLE BBAENG;Lo;0;L;;;;;N;;;;; +BE92;HANGUL SYLLABLE BBAEJ;Lo;0;L;;;;;N;;;;; +BE93;HANGUL SYLLABLE BBAEC;Lo;0;L;;;;;N;;;;; +BE94;HANGUL SYLLABLE BBAEK;Lo;0;L;;;;;N;;;;; +BE95;HANGUL SYLLABLE BBAET;Lo;0;L;;;;;N;;;;; +BE96;HANGUL SYLLABLE BBAEP;Lo;0;L;;;;;N;;;;; +BE97;HANGUL SYLLABLE BBAEH;Lo;0;L;;;;;N;;;;; +BE98;HANGUL SYLLABLE BBYA;Lo;0;L;;;;;N;;;;; +BE99;HANGUL SYLLABLE BBYAG;Lo;0;L;;;;;N;;;;; +BE9A;HANGUL SYLLABLE BBYAGG;Lo;0;L;;;;;N;;;;; +BE9B;HANGUL SYLLABLE BBYAGS;Lo;0;L;;;;;N;;;;; +BE9C;HANGUL SYLLABLE BBYAN;Lo;0;L;;;;;N;;;;; +BE9D;HANGUL SYLLABLE BBYANI;Lo;0;L;;;;;N;;;;; +BE9E;HANGUL SYLLABLE BBYANH;Lo;0;L;;;;;N;;;;; +BE9F;HANGUL SYLLABLE BBYAD;Lo;0;L;;;;;N;;;;; +BEA0;HANGUL SYLLABLE BBYAL;Lo;0;L;;;;;N;;;;; +BEA1;HANGUL SYLLABLE BBYALG;Lo;0;L;;;;;N;;;;; +BEA2;HANGUL SYLLABLE BBYALM;Lo;0;L;;;;;N;;;;; +BEA3;HANGUL SYLLABLE BBYALB;Lo;0;L;;;;;N;;;;; +BEA4;HANGUL SYLLABLE BBYALS;Lo;0;L;;;;;N;;;;; +BEA5;HANGUL SYLLABLE BBYALT;Lo;0;L;;;;;N;;;;; +BEA6;HANGUL SYLLABLE BBYALP;Lo;0;L;;;;;N;;;;; +BEA7;HANGUL SYLLABLE BBYALH;Lo;0;L;;;;;N;;;;; +BEA8;HANGUL SYLLABLE BBYAM;Lo;0;L;;;;;N;;;;; +BEA9;HANGUL SYLLABLE BBYAB;Lo;0;L;;;;;N;;;;; +BEAA;HANGUL SYLLABLE BBYABS;Lo;0;L;;;;;N;;;;; +BEAB;HANGUL SYLLABLE BBYAS;Lo;0;L;;;;;N;;;;; +BEAC;HANGUL SYLLABLE BBYASS;Lo;0;L;;;;;N;;;;; +BEAD;HANGUL SYLLABLE BBYANG;Lo;0;L;;;;;N;;;;; +BEAE;HANGUL SYLLABLE BBYAJ;Lo;0;L;;;;;N;;;;; +BEAF;HANGUL SYLLABLE BBYAC;Lo;0;L;;;;;N;;;;; +BEB0;HANGUL SYLLABLE BBYAK;Lo;0;L;;;;;N;;;;; +BEB1;HANGUL SYLLABLE BBYAT;Lo;0;L;;;;;N;;;;; +BEB2;HANGUL SYLLABLE BBYAP;Lo;0;L;;;;;N;;;;; +BEB3;HANGUL SYLLABLE BBYAH;Lo;0;L;;;;;N;;;;; +BEB4;HANGUL SYLLABLE BBYAE;Lo;0;L;;;;;N;;;;; +BEB5;HANGUL SYLLABLE BBYAEG;Lo;0;L;;;;;N;;;;; +BEB6;HANGUL SYLLABLE BBYAEGG;Lo;0;L;;;;;N;;;;; +BEB7;HANGUL SYLLABLE BBYAEGS;Lo;0;L;;;;;N;;;;; +BEB8;HANGUL SYLLABLE BBYAEN;Lo;0;L;;;;;N;;;;; +BEB9;HANGUL SYLLABLE BBYAENI;Lo;0;L;;;;;N;;;;; +BEBA;HANGUL SYLLABLE BBYAENH;Lo;0;L;;;;;N;;;;; +BEBB;HANGUL SYLLABLE BBYAED;Lo;0;L;;;;;N;;;;; +BEBC;HANGUL SYLLABLE BBYAEL;Lo;0;L;;;;;N;;;;; +BEBD;HANGUL SYLLABLE BBYAELG;Lo;0;L;;;;;N;;;;; +BEBE;HANGUL SYLLABLE BBYAELM;Lo;0;L;;;;;N;;;;; +BEBF;HANGUL SYLLABLE BBYAELB;Lo;0;L;;;;;N;;;;; +BEC0;HANGUL SYLLABLE BBYAELS;Lo;0;L;;;;;N;;;;; +BEC1;HANGUL SYLLABLE BBYAELT;Lo;0;L;;;;;N;;;;; +BEC2;HANGUL SYLLABLE BBYAELP;Lo;0;L;;;;;N;;;;; +BEC3;HANGUL SYLLABLE BBYAELH;Lo;0;L;;;;;N;;;;; +BEC4;HANGUL SYLLABLE BBYAEM;Lo;0;L;;;;;N;;;;; +BEC5;HANGUL SYLLABLE BBYAEB;Lo;0;L;;;;;N;;;;; +BEC6;HANGUL SYLLABLE BBYAEBS;Lo;0;L;;;;;N;;;;; +BEC7;HANGUL SYLLABLE BBYAES;Lo;0;L;;;;;N;;;;; +BEC8;HANGUL SYLLABLE BBYAESS;Lo;0;L;;;;;N;;;;; +BEC9;HANGUL SYLLABLE BBYAENG;Lo;0;L;;;;;N;;;;; +BECA;HANGUL SYLLABLE BBYAEJ;Lo;0;L;;;;;N;;;;; +BECB;HANGUL SYLLABLE BBYAEC;Lo;0;L;;;;;N;;;;; +BECC;HANGUL SYLLABLE BBYAEK;Lo;0;L;;;;;N;;;;; +BECD;HANGUL SYLLABLE BBYAET;Lo;0;L;;;;;N;;;;; +BECE;HANGUL SYLLABLE BBYAEP;Lo;0;L;;;;;N;;;;; +BECF;HANGUL SYLLABLE BBYAEH;Lo;0;L;;;;;N;;;;; +BED0;HANGUL SYLLABLE BBEO;Lo;0;L;;;;;N;;;;; +BED1;HANGUL SYLLABLE BBEOG;Lo;0;L;;;;;N;;;;; +BED2;HANGUL SYLLABLE BBEOGG;Lo;0;L;;;;;N;;;;; +BED3;HANGUL SYLLABLE BBEOGS;Lo;0;L;;;;;N;;;;; +BED4;HANGUL SYLLABLE BBEON;Lo;0;L;;;;;N;;;;; +BED5;HANGUL SYLLABLE BBEONI;Lo;0;L;;;;;N;;;;; +BED6;HANGUL SYLLABLE BBEONH;Lo;0;L;;;;;N;;;;; +BED7;HANGUL SYLLABLE BBEOD;Lo;0;L;;;;;N;;;;; +BED8;HANGUL SYLLABLE BBEOL;Lo;0;L;;;;;N;;;;; +BED9;HANGUL SYLLABLE BBEOLG;Lo;0;L;;;;;N;;;;; +BEDA;HANGUL SYLLABLE BBEOLM;Lo;0;L;;;;;N;;;;; +BEDB;HANGUL SYLLABLE BBEOLB;Lo;0;L;;;;;N;;;;; +BEDC;HANGUL SYLLABLE BBEOLS;Lo;0;L;;;;;N;;;;; +BEDD;HANGUL SYLLABLE BBEOLT;Lo;0;L;;;;;N;;;;; +BEDE;HANGUL SYLLABLE BBEOLP;Lo;0;L;;;;;N;;;;; +BEDF;HANGUL SYLLABLE BBEOLH;Lo;0;L;;;;;N;;;;; +BEE0;HANGUL SYLLABLE BBEOM;Lo;0;L;;;;;N;;;;; +BEE1;HANGUL SYLLABLE BBEOB;Lo;0;L;;;;;N;;;;; +BEE2;HANGUL SYLLABLE BBEOBS;Lo;0;L;;;;;N;;;;; +BEE3;HANGUL SYLLABLE BBEOS;Lo;0;L;;;;;N;;;;; +BEE4;HANGUL SYLLABLE BBEOSS;Lo;0;L;;;;;N;;;;; +BEE5;HANGUL SYLLABLE BBEONG;Lo;0;L;;;;;N;;;;; +BEE6;HANGUL SYLLABLE BBEOJ;Lo;0;L;;;;;N;;;;; +BEE7;HANGUL SYLLABLE BBEOC;Lo;0;L;;;;;N;;;;; +BEE8;HANGUL SYLLABLE BBEOK;Lo;0;L;;;;;N;;;;; +BEE9;HANGUL SYLLABLE BBEOT;Lo;0;L;;;;;N;;;;; +BEEA;HANGUL SYLLABLE BBEOP;Lo;0;L;;;;;N;;;;; +BEEB;HANGUL SYLLABLE BBEOH;Lo;0;L;;;;;N;;;;; +BEEC;HANGUL SYLLABLE BBE;Lo;0;L;;;;;N;;;;; +BEED;HANGUL SYLLABLE BBEG;Lo;0;L;;;;;N;;;;; +BEEE;HANGUL SYLLABLE BBEGG;Lo;0;L;;;;;N;;;;; +BEEF;HANGUL SYLLABLE BBEGS;Lo;0;L;;;;;N;;;;; +BEF0;HANGUL SYLLABLE BBEN;Lo;0;L;;;;;N;;;;; +BEF1;HANGUL SYLLABLE BBENI;Lo;0;L;;;;;N;;;;; +BEF2;HANGUL SYLLABLE BBENH;Lo;0;L;;;;;N;;;;; +BEF3;HANGUL SYLLABLE BBED;Lo;0;L;;;;;N;;;;; +BEF4;HANGUL SYLLABLE BBEL;Lo;0;L;;;;;N;;;;; +BEF5;HANGUL SYLLABLE BBELG;Lo;0;L;;;;;N;;;;; +BEF6;HANGUL SYLLABLE BBELM;Lo;0;L;;;;;N;;;;; +BEF7;HANGUL SYLLABLE BBELB;Lo;0;L;;;;;N;;;;; +BEF8;HANGUL SYLLABLE BBELS;Lo;0;L;;;;;N;;;;; +BEF9;HANGUL SYLLABLE BBELT;Lo;0;L;;;;;N;;;;; +BEFA;HANGUL SYLLABLE BBELP;Lo;0;L;;;;;N;;;;; +BEFB;HANGUL SYLLABLE BBELH;Lo;0;L;;;;;N;;;;; +BEFC;HANGUL SYLLABLE BBEM;Lo;0;L;;;;;N;;;;; +BEFD;HANGUL SYLLABLE BBEB;Lo;0;L;;;;;N;;;;; +BEFE;HANGUL SYLLABLE BBEBS;Lo;0;L;;;;;N;;;;; +BEFF;HANGUL SYLLABLE BBES;Lo;0;L;;;;;N;;;;; +BF00;HANGUL SYLLABLE BBESS;Lo;0;L;;;;;N;;;;; +BF01;HANGUL SYLLABLE BBENG;Lo;0;L;;;;;N;;;;; +BF02;HANGUL SYLLABLE BBEJ;Lo;0;L;;;;;N;;;;; +BF03;HANGUL SYLLABLE BBEC;Lo;0;L;;;;;N;;;;; +BF04;HANGUL SYLLABLE BBEK;Lo;0;L;;;;;N;;;;; +BF05;HANGUL SYLLABLE BBET;Lo;0;L;;;;;N;;;;; +BF06;HANGUL SYLLABLE BBEP;Lo;0;L;;;;;N;;;;; +BF07;HANGUL SYLLABLE BBEH;Lo;0;L;;;;;N;;;;; +BF08;HANGUL SYLLABLE BBYEO;Lo;0;L;;;;;N;;;;; +BF09;HANGUL SYLLABLE BBYEOG;Lo;0;L;;;;;N;;;;; +BF0A;HANGUL SYLLABLE BBYEOGG;Lo;0;L;;;;;N;;;;; +BF0B;HANGUL SYLLABLE BBYEOGS;Lo;0;L;;;;;N;;;;; +BF0C;HANGUL SYLLABLE BBYEON;Lo;0;L;;;;;N;;;;; +BF0D;HANGUL SYLLABLE BBYEONI;Lo;0;L;;;;;N;;;;; +BF0E;HANGUL SYLLABLE BBYEONH;Lo;0;L;;;;;N;;;;; +BF0F;HANGUL SYLLABLE BBYEOD;Lo;0;L;;;;;N;;;;; +BF10;HANGUL SYLLABLE BBYEOL;Lo;0;L;;;;;N;;;;; +BF11;HANGUL SYLLABLE BBYEOLG;Lo;0;L;;;;;N;;;;; +BF12;HANGUL SYLLABLE BBYEOLM;Lo;0;L;;;;;N;;;;; +BF13;HANGUL SYLLABLE BBYEOLB;Lo;0;L;;;;;N;;;;; +BF14;HANGUL SYLLABLE BBYEOLS;Lo;0;L;;;;;N;;;;; +BF15;HANGUL SYLLABLE BBYEOLT;Lo;0;L;;;;;N;;;;; +BF16;HANGUL SYLLABLE BBYEOLP;Lo;0;L;;;;;N;;;;; +BF17;HANGUL SYLLABLE BBYEOLH;Lo;0;L;;;;;N;;;;; +BF18;HANGUL SYLLABLE BBYEOM;Lo;0;L;;;;;N;;;;; +BF19;HANGUL SYLLABLE BBYEOB;Lo;0;L;;;;;N;;;;; +BF1A;HANGUL SYLLABLE BBYEOBS;Lo;0;L;;;;;N;;;;; +BF1B;HANGUL SYLLABLE BBYEOS;Lo;0;L;;;;;N;;;;; +BF1C;HANGUL SYLLABLE BBYEOSS;Lo;0;L;;;;;N;;;;; +BF1D;HANGUL SYLLABLE BBYEONG;Lo;0;L;;;;;N;;;;; +BF1E;HANGUL SYLLABLE BBYEOJ;Lo;0;L;;;;;N;;;;; +BF1F;HANGUL SYLLABLE BBYEOC;Lo;0;L;;;;;N;;;;; +BF20;HANGUL SYLLABLE BBYEOK;Lo;0;L;;;;;N;;;;; +BF21;HANGUL SYLLABLE BBYEOT;Lo;0;L;;;;;N;;;;; +BF22;HANGUL SYLLABLE BBYEOP;Lo;0;L;;;;;N;;;;; +BF23;HANGUL SYLLABLE BBYEOH;Lo;0;L;;;;;N;;;;; +BF24;HANGUL SYLLABLE BBYE;Lo;0;L;;;;;N;;;;; +BF25;HANGUL SYLLABLE BBYEG;Lo;0;L;;;;;N;;;;; +BF26;HANGUL SYLLABLE BBYEGG;Lo;0;L;;;;;N;;;;; +BF27;HANGUL SYLLABLE BBYEGS;Lo;0;L;;;;;N;;;;; +BF28;HANGUL SYLLABLE BBYEN;Lo;0;L;;;;;N;;;;; +BF29;HANGUL SYLLABLE BBYENI;Lo;0;L;;;;;N;;;;; +BF2A;HANGUL SYLLABLE BBYENH;Lo;0;L;;;;;N;;;;; +BF2B;HANGUL SYLLABLE BBYED;Lo;0;L;;;;;N;;;;; +BF2C;HANGUL SYLLABLE BBYEL;Lo;0;L;;;;;N;;;;; +BF2D;HANGUL SYLLABLE BBYELG;Lo;0;L;;;;;N;;;;; +BF2E;HANGUL SYLLABLE BBYELM;Lo;0;L;;;;;N;;;;; +BF2F;HANGUL SYLLABLE BBYELB;Lo;0;L;;;;;N;;;;; +BF30;HANGUL SYLLABLE BBYELS;Lo;0;L;;;;;N;;;;; +BF31;HANGUL SYLLABLE BBYELT;Lo;0;L;;;;;N;;;;; +BF32;HANGUL SYLLABLE BBYELP;Lo;0;L;;;;;N;;;;; +BF33;HANGUL SYLLABLE BBYELH;Lo;0;L;;;;;N;;;;; +BF34;HANGUL SYLLABLE BBYEM;Lo;0;L;;;;;N;;;;; +BF35;HANGUL SYLLABLE BBYEB;Lo;0;L;;;;;N;;;;; +BF36;HANGUL SYLLABLE BBYEBS;Lo;0;L;;;;;N;;;;; +BF37;HANGUL SYLLABLE BBYES;Lo;0;L;;;;;N;;;;; +BF38;HANGUL SYLLABLE BBYESS;Lo;0;L;;;;;N;;;;; +BF39;HANGUL SYLLABLE BBYENG;Lo;0;L;;;;;N;;;;; +BF3A;HANGUL SYLLABLE BBYEJ;Lo;0;L;;;;;N;;;;; +BF3B;HANGUL SYLLABLE BBYEC;Lo;0;L;;;;;N;;;;; +BF3C;HANGUL SYLLABLE BBYEK;Lo;0;L;;;;;N;;;;; +BF3D;HANGUL SYLLABLE BBYET;Lo;0;L;;;;;N;;;;; +BF3E;HANGUL SYLLABLE BBYEP;Lo;0;L;;;;;N;;;;; +BF3F;HANGUL SYLLABLE BBYEH;Lo;0;L;;;;;N;;;;; +BF40;HANGUL SYLLABLE BBO;Lo;0;L;;;;;N;;;;; +BF41;HANGUL SYLLABLE BBOG;Lo;0;L;;;;;N;;;;; +BF42;HANGUL SYLLABLE BBOGG;Lo;0;L;;;;;N;;;;; +BF43;HANGUL SYLLABLE BBOGS;Lo;0;L;;;;;N;;;;; +BF44;HANGUL SYLLABLE BBON;Lo;0;L;;;;;N;;;;; +BF45;HANGUL SYLLABLE BBONI;Lo;0;L;;;;;N;;;;; +BF46;HANGUL SYLLABLE BBONH;Lo;0;L;;;;;N;;;;; +BF47;HANGUL SYLLABLE BBOD;Lo;0;L;;;;;N;;;;; +BF48;HANGUL SYLLABLE BBOL;Lo;0;L;;;;;N;;;;; +BF49;HANGUL SYLLABLE BBOLG;Lo;0;L;;;;;N;;;;; +BF4A;HANGUL SYLLABLE BBOLM;Lo;0;L;;;;;N;;;;; +BF4B;HANGUL SYLLABLE BBOLB;Lo;0;L;;;;;N;;;;; +BF4C;HANGUL SYLLABLE BBOLS;Lo;0;L;;;;;N;;;;; +BF4D;HANGUL SYLLABLE BBOLT;Lo;0;L;;;;;N;;;;; +BF4E;HANGUL SYLLABLE BBOLP;Lo;0;L;;;;;N;;;;; +BF4F;HANGUL SYLLABLE BBOLH;Lo;0;L;;;;;N;;;;; +BF50;HANGUL SYLLABLE BBOM;Lo;0;L;;;;;N;;;;; +BF51;HANGUL SYLLABLE BBOB;Lo;0;L;;;;;N;;;;; +BF52;HANGUL SYLLABLE BBOBS;Lo;0;L;;;;;N;;;;; +BF53;HANGUL SYLLABLE BBOS;Lo;0;L;;;;;N;;;;; +BF54;HANGUL SYLLABLE BBOSS;Lo;0;L;;;;;N;;;;; +BF55;HANGUL SYLLABLE BBONG;Lo;0;L;;;;;N;;;;; +BF56;HANGUL SYLLABLE BBOJ;Lo;0;L;;;;;N;;;;; +BF57;HANGUL SYLLABLE BBOC;Lo;0;L;;;;;N;;;;; +BF58;HANGUL SYLLABLE BBOK;Lo;0;L;;;;;N;;;;; +BF59;HANGUL SYLLABLE BBOT;Lo;0;L;;;;;N;;;;; +BF5A;HANGUL SYLLABLE BBOP;Lo;0;L;;;;;N;;;;; +BF5B;HANGUL SYLLABLE BBOH;Lo;0;L;;;;;N;;;;; +BF5C;HANGUL SYLLABLE BBWA;Lo;0;L;;;;;N;;;;; +BF5D;HANGUL SYLLABLE BBWAG;Lo;0;L;;;;;N;;;;; +BF5E;HANGUL SYLLABLE BBWAGG;Lo;0;L;;;;;N;;;;; +BF5F;HANGUL SYLLABLE BBWAGS;Lo;0;L;;;;;N;;;;; +BF60;HANGUL SYLLABLE BBWAN;Lo;0;L;;;;;N;;;;; +BF61;HANGUL SYLLABLE BBWANI;Lo;0;L;;;;;N;;;;; +BF62;HANGUL SYLLABLE BBWANH;Lo;0;L;;;;;N;;;;; +BF63;HANGUL SYLLABLE BBWAD;Lo;0;L;;;;;N;;;;; +BF64;HANGUL SYLLABLE BBWAL;Lo;0;L;;;;;N;;;;; +BF65;HANGUL SYLLABLE BBWALG;Lo;0;L;;;;;N;;;;; +BF66;HANGUL SYLLABLE BBWALM;Lo;0;L;;;;;N;;;;; +BF67;HANGUL SYLLABLE BBWALB;Lo;0;L;;;;;N;;;;; +BF68;HANGUL SYLLABLE BBWALS;Lo;0;L;;;;;N;;;;; +BF69;HANGUL SYLLABLE BBWALT;Lo;0;L;;;;;N;;;;; +BF6A;HANGUL SYLLABLE BBWALP;Lo;0;L;;;;;N;;;;; +BF6B;HANGUL SYLLABLE BBWALH;Lo;0;L;;;;;N;;;;; +BF6C;HANGUL SYLLABLE BBWAM;Lo;0;L;;;;;N;;;;; +BF6D;HANGUL SYLLABLE BBWAB;Lo;0;L;;;;;N;;;;; +BF6E;HANGUL SYLLABLE BBWABS;Lo;0;L;;;;;N;;;;; +BF6F;HANGUL SYLLABLE BBWAS;Lo;0;L;;;;;N;;;;; +BF70;HANGUL SYLLABLE BBWASS;Lo;0;L;;;;;N;;;;; +BF71;HANGUL SYLLABLE BBWANG;Lo;0;L;;;;;N;;;;; +BF72;HANGUL SYLLABLE BBWAJ;Lo;0;L;;;;;N;;;;; +BF73;HANGUL SYLLABLE BBWAC;Lo;0;L;;;;;N;;;;; +BF74;HANGUL SYLLABLE BBWAK;Lo;0;L;;;;;N;;;;; +BF75;HANGUL SYLLABLE BBWAT;Lo;0;L;;;;;N;;;;; +BF76;HANGUL SYLLABLE BBWAP;Lo;0;L;;;;;N;;;;; +BF77;HANGUL SYLLABLE BBWAH;Lo;0;L;;;;;N;;;;; +BF78;HANGUL SYLLABLE BBWAE;Lo;0;L;;;;;N;;;;; +BF79;HANGUL SYLLABLE BBWAEG;Lo;0;L;;;;;N;;;;; +BF7A;HANGUL SYLLABLE BBWAEGG;Lo;0;L;;;;;N;;;;; +BF7B;HANGUL SYLLABLE BBWAEGS;Lo;0;L;;;;;N;;;;; +BF7C;HANGUL SYLLABLE BBWAEN;Lo;0;L;;;;;N;;;;; +BF7D;HANGUL SYLLABLE BBWAENI;Lo;0;L;;;;;N;;;;; +BF7E;HANGUL SYLLABLE BBWAENH;Lo;0;L;;;;;N;;;;; +BF7F;HANGUL SYLLABLE BBWAED;Lo;0;L;;;;;N;;;;; +BF80;HANGUL SYLLABLE BBWAEL;Lo;0;L;;;;;N;;;;; +BF81;HANGUL SYLLABLE BBWAELG;Lo;0;L;;;;;N;;;;; +BF82;HANGUL SYLLABLE BBWAELM;Lo;0;L;;;;;N;;;;; +BF83;HANGUL SYLLABLE BBWAELB;Lo;0;L;;;;;N;;;;; +BF84;HANGUL SYLLABLE BBWAELS;Lo;0;L;;;;;N;;;;; +BF85;HANGUL SYLLABLE BBWAELT;Lo;0;L;;;;;N;;;;; +BF86;HANGUL SYLLABLE BBWAELP;Lo;0;L;;;;;N;;;;; +BF87;HANGUL SYLLABLE BBWAELH;Lo;0;L;;;;;N;;;;; +BF88;HANGUL SYLLABLE BBWAEM;Lo;0;L;;;;;N;;;;; +BF89;HANGUL SYLLABLE BBWAEB;Lo;0;L;;;;;N;;;;; +BF8A;HANGUL SYLLABLE BBWAEBS;Lo;0;L;;;;;N;;;;; +BF8B;HANGUL SYLLABLE BBWAES;Lo;0;L;;;;;N;;;;; +BF8C;HANGUL SYLLABLE BBWAESS;Lo;0;L;;;;;N;;;;; +BF8D;HANGUL SYLLABLE BBWAENG;Lo;0;L;;;;;N;;;;; +BF8E;HANGUL SYLLABLE BBWAEJ;Lo;0;L;;;;;N;;;;; +BF8F;HANGUL SYLLABLE BBWAEC;Lo;0;L;;;;;N;;;;; +BF90;HANGUL SYLLABLE BBWAEK;Lo;0;L;;;;;N;;;;; +BF91;HANGUL SYLLABLE BBWAET;Lo;0;L;;;;;N;;;;; +BF92;HANGUL SYLLABLE BBWAEP;Lo;0;L;;;;;N;;;;; +BF93;HANGUL SYLLABLE BBWAEH;Lo;0;L;;;;;N;;;;; +BF94;HANGUL SYLLABLE BBOE;Lo;0;L;;;;;N;;;;; +BF95;HANGUL SYLLABLE BBOEG;Lo;0;L;;;;;N;;;;; +BF96;HANGUL SYLLABLE BBOEGG;Lo;0;L;;;;;N;;;;; +BF97;HANGUL SYLLABLE BBOEGS;Lo;0;L;;;;;N;;;;; +BF98;HANGUL SYLLABLE BBOEN;Lo;0;L;;;;;N;;;;; +BF99;HANGUL SYLLABLE BBOENI;Lo;0;L;;;;;N;;;;; +BF9A;HANGUL SYLLABLE BBOENH;Lo;0;L;;;;;N;;;;; +BF9B;HANGUL SYLLABLE BBOED;Lo;0;L;;;;;N;;;;; +BF9C;HANGUL SYLLABLE BBOEL;Lo;0;L;;;;;N;;;;; +BF9D;HANGUL SYLLABLE BBOELG;Lo;0;L;;;;;N;;;;; +BF9E;HANGUL SYLLABLE BBOELM;Lo;0;L;;;;;N;;;;; +BF9F;HANGUL SYLLABLE BBOELB;Lo;0;L;;;;;N;;;;; +BFA0;HANGUL SYLLABLE BBOELS;Lo;0;L;;;;;N;;;;; +BFA1;HANGUL SYLLABLE BBOELT;Lo;0;L;;;;;N;;;;; +BFA2;HANGUL SYLLABLE BBOELP;Lo;0;L;;;;;N;;;;; +BFA3;HANGUL SYLLABLE BBOELH;Lo;0;L;;;;;N;;;;; +BFA4;HANGUL SYLLABLE BBOEM;Lo;0;L;;;;;N;;;;; +BFA5;HANGUL SYLLABLE BBOEB;Lo;0;L;;;;;N;;;;; +BFA6;HANGUL SYLLABLE BBOEBS;Lo;0;L;;;;;N;;;;; +BFA7;HANGUL SYLLABLE BBOES;Lo;0;L;;;;;N;;;;; +BFA8;HANGUL SYLLABLE BBOESS;Lo;0;L;;;;;N;;;;; +BFA9;HANGUL SYLLABLE BBOENG;Lo;0;L;;;;;N;;;;; +BFAA;HANGUL SYLLABLE BBOEJ;Lo;0;L;;;;;N;;;;; +BFAB;HANGUL SYLLABLE BBOEC;Lo;0;L;;;;;N;;;;; +BFAC;HANGUL SYLLABLE BBOEK;Lo;0;L;;;;;N;;;;; +BFAD;HANGUL SYLLABLE BBOET;Lo;0;L;;;;;N;;;;; +BFAE;HANGUL SYLLABLE BBOEP;Lo;0;L;;;;;N;;;;; +BFAF;HANGUL SYLLABLE BBOEH;Lo;0;L;;;;;N;;;;; +BFB0;HANGUL SYLLABLE BBYO;Lo;0;L;;;;;N;;;;; +BFB1;HANGUL SYLLABLE BBYOG;Lo;0;L;;;;;N;;;;; +BFB2;HANGUL SYLLABLE BBYOGG;Lo;0;L;;;;;N;;;;; +BFB3;HANGUL SYLLABLE BBYOGS;Lo;0;L;;;;;N;;;;; +BFB4;HANGUL SYLLABLE BBYON;Lo;0;L;;;;;N;;;;; +BFB5;HANGUL SYLLABLE BBYONI;Lo;0;L;;;;;N;;;;; +BFB6;HANGUL SYLLABLE BBYONH;Lo;0;L;;;;;N;;;;; +BFB7;HANGUL SYLLABLE BBYOD;Lo;0;L;;;;;N;;;;; +BFB8;HANGUL SYLLABLE BBYOL;Lo;0;L;;;;;N;;;;; +BFB9;HANGUL SYLLABLE BBYOLG;Lo;0;L;;;;;N;;;;; +BFBA;HANGUL SYLLABLE BBYOLM;Lo;0;L;;;;;N;;;;; +BFBB;HANGUL SYLLABLE BBYOLB;Lo;0;L;;;;;N;;;;; +BFBC;HANGUL SYLLABLE BBYOLS;Lo;0;L;;;;;N;;;;; +BFBD;HANGUL SYLLABLE BBYOLT;Lo;0;L;;;;;N;;;;; +BFBE;HANGUL SYLLABLE BBYOLP;Lo;0;L;;;;;N;;;;; +BFBF;HANGUL SYLLABLE BBYOLH;Lo;0;L;;;;;N;;;;; +BFC0;HANGUL SYLLABLE BBYOM;Lo;0;L;;;;;N;;;;; +BFC1;HANGUL SYLLABLE BBYOB;Lo;0;L;;;;;N;;;;; +BFC2;HANGUL SYLLABLE BBYOBS;Lo;0;L;;;;;N;;;;; +BFC3;HANGUL SYLLABLE BBYOS;Lo;0;L;;;;;N;;;;; +BFC4;HANGUL SYLLABLE BBYOSS;Lo;0;L;;;;;N;;;;; +BFC5;HANGUL SYLLABLE BBYONG;Lo;0;L;;;;;N;;;;; +BFC6;HANGUL SYLLABLE BBYOJ;Lo;0;L;;;;;N;;;;; +BFC7;HANGUL SYLLABLE BBYOC;Lo;0;L;;;;;N;;;;; +BFC8;HANGUL SYLLABLE BBYOK;Lo;0;L;;;;;N;;;;; +BFC9;HANGUL SYLLABLE BBYOT;Lo;0;L;;;;;N;;;;; +BFCA;HANGUL SYLLABLE BBYOP;Lo;0;L;;;;;N;;;;; +BFCB;HANGUL SYLLABLE BBYOH;Lo;0;L;;;;;N;;;;; +BFCC;HANGUL SYLLABLE BBU;Lo;0;L;;;;;N;;;;; +BFCD;HANGUL SYLLABLE BBUG;Lo;0;L;;;;;N;;;;; +BFCE;HANGUL SYLLABLE BBUGG;Lo;0;L;;;;;N;;;;; +BFCF;HANGUL SYLLABLE BBUGS;Lo;0;L;;;;;N;;;;; +BFD0;HANGUL SYLLABLE BBUN;Lo;0;L;;;;;N;;;;; +BFD1;HANGUL SYLLABLE BBUNI;Lo;0;L;;;;;N;;;;; +BFD2;HANGUL SYLLABLE BBUNH;Lo;0;L;;;;;N;;;;; +BFD3;HANGUL SYLLABLE BBUD;Lo;0;L;;;;;N;;;;; +BFD4;HANGUL SYLLABLE BBUL;Lo;0;L;;;;;N;;;;; +BFD5;HANGUL SYLLABLE BBULG;Lo;0;L;;;;;N;;;;; +BFD6;HANGUL SYLLABLE BBULM;Lo;0;L;;;;;N;;;;; +BFD7;HANGUL SYLLABLE BBULB;Lo;0;L;;;;;N;;;;; +BFD8;HANGUL SYLLABLE BBULS;Lo;0;L;;;;;N;;;;; +BFD9;HANGUL SYLLABLE BBULT;Lo;0;L;;;;;N;;;;; +BFDA;HANGUL SYLLABLE BBULP;Lo;0;L;;;;;N;;;;; +BFDB;HANGUL SYLLABLE BBULH;Lo;0;L;;;;;N;;;;; +BFDC;HANGUL SYLLABLE BBUM;Lo;0;L;;;;;N;;;;; +BFDD;HANGUL SYLLABLE BBUB;Lo;0;L;;;;;N;;;;; +BFDE;HANGUL SYLLABLE BBUBS;Lo;0;L;;;;;N;;;;; +BFDF;HANGUL SYLLABLE BBUS;Lo;0;L;;;;;N;;;;; +BFE0;HANGUL SYLLABLE BBUSS;Lo;0;L;;;;;N;;;;; +BFE1;HANGUL SYLLABLE BBUNG;Lo;0;L;;;;;N;;;;; +BFE2;HANGUL SYLLABLE BBUJ;Lo;0;L;;;;;N;;;;; +BFE3;HANGUL SYLLABLE BBUC;Lo;0;L;;;;;N;;;;; +BFE4;HANGUL SYLLABLE BBUK;Lo;0;L;;;;;N;;;;; +BFE5;HANGUL SYLLABLE BBUT;Lo;0;L;;;;;N;;;;; +BFE6;HANGUL SYLLABLE BBUP;Lo;0;L;;;;;N;;;;; +BFE7;HANGUL SYLLABLE BBUH;Lo;0;L;;;;;N;;;;; +BFE8;HANGUL SYLLABLE BBWEO;Lo;0;L;;;;;N;;;;; +BFE9;HANGUL SYLLABLE BBWEOG;Lo;0;L;;;;;N;;;;; +BFEA;HANGUL SYLLABLE BBWEOGG;Lo;0;L;;;;;N;;;;; +BFEB;HANGUL SYLLABLE BBWEOGS;Lo;0;L;;;;;N;;;;; +BFEC;HANGUL SYLLABLE BBWEON;Lo;0;L;;;;;N;;;;; +BFED;HANGUL SYLLABLE BBWEONI;Lo;0;L;;;;;N;;;;; +BFEE;HANGUL SYLLABLE BBWEONH;Lo;0;L;;;;;N;;;;; +BFEF;HANGUL SYLLABLE BBWEOD;Lo;0;L;;;;;N;;;;; +BFF0;HANGUL SYLLABLE BBWEOL;Lo;0;L;;;;;N;;;;; +BFF1;HANGUL SYLLABLE BBWEOLG;Lo;0;L;;;;;N;;;;; +BFF2;HANGUL SYLLABLE BBWEOLM;Lo;0;L;;;;;N;;;;; +BFF3;HANGUL SYLLABLE BBWEOLB;Lo;0;L;;;;;N;;;;; +BFF4;HANGUL SYLLABLE BBWEOLS;Lo;0;L;;;;;N;;;;; +BFF5;HANGUL SYLLABLE BBWEOLT;Lo;0;L;;;;;N;;;;; +BFF6;HANGUL SYLLABLE BBWEOLP;Lo;0;L;;;;;N;;;;; +BFF7;HANGUL SYLLABLE BBWEOLH;Lo;0;L;;;;;N;;;;; +BFF8;HANGUL SYLLABLE BBWEOM;Lo;0;L;;;;;N;;;;; +BFF9;HANGUL SYLLABLE BBWEOB;Lo;0;L;;;;;N;;;;; +BFFA;HANGUL SYLLABLE BBWEOBS;Lo;0;L;;;;;N;;;;; +BFFB;HANGUL SYLLABLE BBWEOS;Lo;0;L;;;;;N;;;;; +BFFC;HANGUL SYLLABLE BBWEOSS;Lo;0;L;;;;;N;;;;; +BFFD;HANGUL SYLLABLE BBWEONG;Lo;0;L;;;;;N;;;;; +BFFE;HANGUL SYLLABLE BBWEOJ;Lo;0;L;;;;;N;;;;; +BFFF;HANGUL SYLLABLE BBWEOC;Lo;0;L;;;;;N;;;;; +C000;HANGUL SYLLABLE BBWEOK;Lo;0;L;;;;;N;;;;; +C001;HANGUL SYLLABLE BBWEOT;Lo;0;L;;;;;N;;;;; +C002;HANGUL SYLLABLE BBWEOP;Lo;0;L;;;;;N;;;;; +C003;HANGUL SYLLABLE BBWEOH;Lo;0;L;;;;;N;;;;; +C004;HANGUL SYLLABLE BBWE;Lo;0;L;;;;;N;;;;; +C005;HANGUL SYLLABLE BBWEG;Lo;0;L;;;;;N;;;;; +C006;HANGUL SYLLABLE BBWEGG;Lo;0;L;;;;;N;;;;; +C007;HANGUL SYLLABLE BBWEGS;Lo;0;L;;;;;N;;;;; +C008;HANGUL SYLLABLE BBWEN;Lo;0;L;;;;;N;;;;; +C009;HANGUL SYLLABLE BBWENI;Lo;0;L;;;;;N;;;;; +C00A;HANGUL SYLLABLE BBWENH;Lo;0;L;;;;;N;;;;; +C00B;HANGUL SYLLABLE BBWED;Lo;0;L;;;;;N;;;;; +C00C;HANGUL SYLLABLE BBWEL;Lo;0;L;;;;;N;;;;; +C00D;HANGUL SYLLABLE BBWELG;Lo;0;L;;;;;N;;;;; +C00E;HANGUL SYLLABLE BBWELM;Lo;0;L;;;;;N;;;;; +C00F;HANGUL SYLLABLE BBWELB;Lo;0;L;;;;;N;;;;; +C010;HANGUL SYLLABLE BBWELS;Lo;0;L;;;;;N;;;;; +C011;HANGUL SYLLABLE BBWELT;Lo;0;L;;;;;N;;;;; +C012;HANGUL SYLLABLE BBWELP;Lo;0;L;;;;;N;;;;; +C013;HANGUL SYLLABLE BBWELH;Lo;0;L;;;;;N;;;;; +C014;HANGUL SYLLABLE BBWEM;Lo;0;L;;;;;N;;;;; +C015;HANGUL SYLLABLE BBWEB;Lo;0;L;;;;;N;;;;; +C016;HANGUL SYLLABLE BBWEBS;Lo;0;L;;;;;N;;;;; +C017;HANGUL SYLLABLE BBWES;Lo;0;L;;;;;N;;;;; +C018;HANGUL SYLLABLE BBWESS;Lo;0;L;;;;;N;;;;; +C019;HANGUL SYLLABLE BBWENG;Lo;0;L;;;;;N;;;;; +C01A;HANGUL SYLLABLE BBWEJ;Lo;0;L;;;;;N;;;;; +C01B;HANGUL SYLLABLE BBWEC;Lo;0;L;;;;;N;;;;; +C01C;HANGUL SYLLABLE BBWEK;Lo;0;L;;;;;N;;;;; +C01D;HANGUL SYLLABLE BBWET;Lo;0;L;;;;;N;;;;; +C01E;HANGUL SYLLABLE BBWEP;Lo;0;L;;;;;N;;;;; +C01F;HANGUL SYLLABLE BBWEH;Lo;0;L;;;;;N;;;;; +C020;HANGUL SYLLABLE BBWI;Lo;0;L;;;;;N;;;;; +C021;HANGUL SYLLABLE BBWIG;Lo;0;L;;;;;N;;;;; +C022;HANGUL SYLLABLE BBWIGG;Lo;0;L;;;;;N;;;;; +C023;HANGUL SYLLABLE BBWIGS;Lo;0;L;;;;;N;;;;; +C024;HANGUL SYLLABLE BBWIN;Lo;0;L;;;;;N;;;;; +C025;HANGUL SYLLABLE BBWINI;Lo;0;L;;;;;N;;;;; +C026;HANGUL SYLLABLE BBWINH;Lo;0;L;;;;;N;;;;; +C027;HANGUL SYLLABLE BBWID;Lo;0;L;;;;;N;;;;; +C028;HANGUL SYLLABLE BBWIL;Lo;0;L;;;;;N;;;;; +C029;HANGUL SYLLABLE BBWILG;Lo;0;L;;;;;N;;;;; +C02A;HANGUL SYLLABLE BBWILM;Lo;0;L;;;;;N;;;;; +C02B;HANGUL SYLLABLE BBWILB;Lo;0;L;;;;;N;;;;; +C02C;HANGUL SYLLABLE BBWILS;Lo;0;L;;;;;N;;;;; +C02D;HANGUL SYLLABLE BBWILT;Lo;0;L;;;;;N;;;;; +C02E;HANGUL SYLLABLE BBWILP;Lo;0;L;;;;;N;;;;; +C02F;HANGUL SYLLABLE BBWILH;Lo;0;L;;;;;N;;;;; +C030;HANGUL SYLLABLE BBWIM;Lo;0;L;;;;;N;;;;; +C031;HANGUL SYLLABLE BBWIB;Lo;0;L;;;;;N;;;;; +C032;HANGUL SYLLABLE BBWIBS;Lo;0;L;;;;;N;;;;; +C033;HANGUL SYLLABLE BBWIS;Lo;0;L;;;;;N;;;;; +C034;HANGUL SYLLABLE BBWISS;Lo;0;L;;;;;N;;;;; +C035;HANGUL SYLLABLE BBWING;Lo;0;L;;;;;N;;;;; +C036;HANGUL SYLLABLE BBWIJ;Lo;0;L;;;;;N;;;;; +C037;HANGUL SYLLABLE BBWIC;Lo;0;L;;;;;N;;;;; +C038;HANGUL SYLLABLE BBWIK;Lo;0;L;;;;;N;;;;; +C039;HANGUL SYLLABLE BBWIT;Lo;0;L;;;;;N;;;;; +C03A;HANGUL SYLLABLE BBWIP;Lo;0;L;;;;;N;;;;; +C03B;HANGUL SYLLABLE BBWIH;Lo;0;L;;;;;N;;;;; +C03C;HANGUL SYLLABLE BBYU;Lo;0;L;;;;;N;;;;; +C03D;HANGUL SYLLABLE BBYUG;Lo;0;L;;;;;N;;;;; +C03E;HANGUL SYLLABLE BBYUGG;Lo;0;L;;;;;N;;;;; +C03F;HANGUL SYLLABLE BBYUGS;Lo;0;L;;;;;N;;;;; +C040;HANGUL SYLLABLE BBYUN;Lo;0;L;;;;;N;;;;; +C041;HANGUL SYLLABLE BBYUNI;Lo;0;L;;;;;N;;;;; +C042;HANGUL SYLLABLE BBYUNH;Lo;0;L;;;;;N;;;;; +C043;HANGUL SYLLABLE BBYUD;Lo;0;L;;;;;N;;;;; +C044;HANGUL SYLLABLE BBYUL;Lo;0;L;;;;;N;;;;; +C045;HANGUL SYLLABLE BBYULG;Lo;0;L;;;;;N;;;;; +C046;HANGUL SYLLABLE BBYULM;Lo;0;L;;;;;N;;;;; +C047;HANGUL SYLLABLE BBYULB;Lo;0;L;;;;;N;;;;; +C048;HANGUL SYLLABLE BBYULS;Lo;0;L;;;;;N;;;;; +C049;HANGUL SYLLABLE BBYULT;Lo;0;L;;;;;N;;;;; +C04A;HANGUL SYLLABLE BBYULP;Lo;0;L;;;;;N;;;;; +C04B;HANGUL SYLLABLE BBYULH;Lo;0;L;;;;;N;;;;; +C04C;HANGUL SYLLABLE BBYUM;Lo;0;L;;;;;N;;;;; +C04D;HANGUL SYLLABLE BBYUB;Lo;0;L;;;;;N;;;;; +C04E;HANGUL SYLLABLE BBYUBS;Lo;0;L;;;;;N;;;;; +C04F;HANGUL SYLLABLE BBYUS;Lo;0;L;;;;;N;;;;; +C050;HANGUL SYLLABLE BBYUSS;Lo;0;L;;;;;N;;;;; +C051;HANGUL SYLLABLE BBYUNG;Lo;0;L;;;;;N;;;;; +C052;HANGUL SYLLABLE BBYUJ;Lo;0;L;;;;;N;;;;; +C053;HANGUL SYLLABLE BBYUC;Lo;0;L;;;;;N;;;;; +C054;HANGUL SYLLABLE BBYUK;Lo;0;L;;;;;N;;;;; +C055;HANGUL SYLLABLE BBYUT;Lo;0;L;;;;;N;;;;; +C056;HANGUL SYLLABLE BBYUP;Lo;0;L;;;;;N;;;;; +C057;HANGUL SYLLABLE BBYUH;Lo;0;L;;;;;N;;;;; +C058;HANGUL SYLLABLE BBEU;Lo;0;L;;;;;N;;;;; +C059;HANGUL SYLLABLE BBEUG;Lo;0;L;;;;;N;;;;; +C05A;HANGUL SYLLABLE BBEUGG;Lo;0;L;;;;;N;;;;; +C05B;HANGUL SYLLABLE BBEUGS;Lo;0;L;;;;;N;;;;; +C05C;HANGUL SYLLABLE BBEUN;Lo;0;L;;;;;N;;;;; +C05D;HANGUL SYLLABLE BBEUNI;Lo;0;L;;;;;N;;;;; +C05E;HANGUL SYLLABLE BBEUNH;Lo;0;L;;;;;N;;;;; +C05F;HANGUL SYLLABLE BBEUD;Lo;0;L;;;;;N;;;;; +C060;HANGUL SYLLABLE BBEUL;Lo;0;L;;;;;N;;;;; +C061;HANGUL SYLLABLE BBEULG;Lo;0;L;;;;;N;;;;; +C062;HANGUL SYLLABLE BBEULM;Lo;0;L;;;;;N;;;;; +C063;HANGUL SYLLABLE BBEULB;Lo;0;L;;;;;N;;;;; +C064;HANGUL SYLLABLE BBEULS;Lo;0;L;;;;;N;;;;; +C065;HANGUL SYLLABLE BBEULT;Lo;0;L;;;;;N;;;;; +C066;HANGUL SYLLABLE BBEULP;Lo;0;L;;;;;N;;;;; +C067;HANGUL SYLLABLE BBEULH;Lo;0;L;;;;;N;;;;; +C068;HANGUL SYLLABLE BBEUM;Lo;0;L;;;;;N;;;;; +C069;HANGUL SYLLABLE BBEUB;Lo;0;L;;;;;N;;;;; +C06A;HANGUL SYLLABLE BBEUBS;Lo;0;L;;;;;N;;;;; +C06B;HANGUL SYLLABLE BBEUS;Lo;0;L;;;;;N;;;;; +C06C;HANGUL SYLLABLE BBEUSS;Lo;0;L;;;;;N;;;;; +C06D;HANGUL SYLLABLE BBEUNG;Lo;0;L;;;;;N;;;;; +C06E;HANGUL SYLLABLE BBEUJ;Lo;0;L;;;;;N;;;;; +C06F;HANGUL SYLLABLE BBEUC;Lo;0;L;;;;;N;;;;; +C070;HANGUL SYLLABLE BBEUK;Lo;0;L;;;;;N;;;;; +C071;HANGUL SYLLABLE BBEUT;Lo;0;L;;;;;N;;;;; +C072;HANGUL SYLLABLE BBEUP;Lo;0;L;;;;;N;;;;; +C073;HANGUL SYLLABLE BBEUH;Lo;0;L;;;;;N;;;;; +C074;HANGUL SYLLABLE BBYI;Lo;0;L;;;;;N;;;;; +C075;HANGUL SYLLABLE BBYIG;Lo;0;L;;;;;N;;;;; +C076;HANGUL SYLLABLE BBYIGG;Lo;0;L;;;;;N;;;;; +C077;HANGUL SYLLABLE BBYIGS;Lo;0;L;;;;;N;;;;; +C078;HANGUL SYLLABLE BBYIN;Lo;0;L;;;;;N;;;;; +C079;HANGUL SYLLABLE BBYINI;Lo;0;L;;;;;N;;;;; +C07A;HANGUL SYLLABLE BBYINH;Lo;0;L;;;;;N;;;;; +C07B;HANGUL SYLLABLE BBYID;Lo;0;L;;;;;N;;;;; +C07C;HANGUL SYLLABLE BBYIL;Lo;0;L;;;;;N;;;;; +C07D;HANGUL SYLLABLE BBYILG;Lo;0;L;;;;;N;;;;; +C07E;HANGUL SYLLABLE BBYILM;Lo;0;L;;;;;N;;;;; +C07F;HANGUL SYLLABLE BBYILB;Lo;0;L;;;;;N;;;;; +C080;HANGUL SYLLABLE BBYILS;Lo;0;L;;;;;N;;;;; +C081;HANGUL SYLLABLE BBYILT;Lo;0;L;;;;;N;;;;; +C082;HANGUL SYLLABLE BBYILP;Lo;0;L;;;;;N;;;;; +C083;HANGUL SYLLABLE BBYILH;Lo;0;L;;;;;N;;;;; +C084;HANGUL SYLLABLE BBYIM;Lo;0;L;;;;;N;;;;; +C085;HANGUL SYLLABLE BBYIB;Lo;0;L;;;;;N;;;;; +C086;HANGUL SYLLABLE BBYIBS;Lo;0;L;;;;;N;;;;; +C087;HANGUL SYLLABLE BBYIS;Lo;0;L;;;;;N;;;;; +C088;HANGUL SYLLABLE BBYISS;Lo;0;L;;;;;N;;;;; +C089;HANGUL SYLLABLE BBYING;Lo;0;L;;;;;N;;;;; +C08A;HANGUL SYLLABLE BBYIJ;Lo;0;L;;;;;N;;;;; +C08B;HANGUL SYLLABLE BBYIC;Lo;0;L;;;;;N;;;;; +C08C;HANGUL SYLLABLE BBYIK;Lo;0;L;;;;;N;;;;; +C08D;HANGUL SYLLABLE BBYIT;Lo;0;L;;;;;N;;;;; +C08E;HANGUL SYLLABLE BBYIP;Lo;0;L;;;;;N;;;;; +C08F;HANGUL SYLLABLE BBYIH;Lo;0;L;;;;;N;;;;; +C090;HANGUL SYLLABLE BBI;Lo;0;L;;;;;N;;;;; +C091;HANGUL SYLLABLE BBIG;Lo;0;L;;;;;N;;;;; +C092;HANGUL SYLLABLE BBIGG;Lo;0;L;;;;;N;;;;; +C093;HANGUL SYLLABLE BBIGS;Lo;0;L;;;;;N;;;;; +C094;HANGUL SYLLABLE BBIN;Lo;0;L;;;;;N;;;;; +C095;HANGUL SYLLABLE BBINI;Lo;0;L;;;;;N;;;;; +C096;HANGUL SYLLABLE BBINH;Lo;0;L;;;;;N;;;;; +C097;HANGUL SYLLABLE BBID;Lo;0;L;;;;;N;;;;; +C098;HANGUL SYLLABLE BBIL;Lo;0;L;;;;;N;;;;; +C099;HANGUL SYLLABLE BBILG;Lo;0;L;;;;;N;;;;; +C09A;HANGUL SYLLABLE BBILM;Lo;0;L;;;;;N;;;;; +C09B;HANGUL SYLLABLE BBILB;Lo;0;L;;;;;N;;;;; +C09C;HANGUL SYLLABLE BBILS;Lo;0;L;;;;;N;;;;; +C09D;HANGUL SYLLABLE BBILT;Lo;0;L;;;;;N;;;;; +C09E;HANGUL SYLLABLE BBILP;Lo;0;L;;;;;N;;;;; +C09F;HANGUL SYLLABLE BBILH;Lo;0;L;;;;;N;;;;; +C0A0;HANGUL SYLLABLE BBIM;Lo;0;L;;;;;N;;;;; +C0A1;HANGUL SYLLABLE BBIB;Lo;0;L;;;;;N;;;;; +C0A2;HANGUL SYLLABLE BBIBS;Lo;0;L;;;;;N;;;;; +C0A3;HANGUL SYLLABLE BBIS;Lo;0;L;;;;;N;;;;; +C0A4;HANGUL SYLLABLE BBISS;Lo;0;L;;;;;N;;;;; +C0A5;HANGUL SYLLABLE BBING;Lo;0;L;;;;;N;;;;; +C0A6;HANGUL SYLLABLE BBIJ;Lo;0;L;;;;;N;;;;; +C0A7;HANGUL SYLLABLE BBIC;Lo;0;L;;;;;N;;;;; +C0A8;HANGUL SYLLABLE BBIK;Lo;0;L;;;;;N;;;;; +C0A9;HANGUL SYLLABLE BBIT;Lo;0;L;;;;;N;;;;; +C0AA;HANGUL SYLLABLE BBIP;Lo;0;L;;;;;N;;;;; +C0AB;HANGUL SYLLABLE BBIH;Lo;0;L;;;;;N;;;;; +C0AC;HANGUL SYLLABLE SA;Lo;0;L;;;;;N;;;;; +C0AD;HANGUL SYLLABLE SAG;Lo;0;L;;;;;N;;;;; +C0AE;HANGUL SYLLABLE SAGG;Lo;0;L;;;;;N;;;;; +C0AF;HANGUL SYLLABLE SAGS;Lo;0;L;;;;;N;;;;; +C0B0;HANGUL SYLLABLE SAN;Lo;0;L;;;;;N;;;;; +C0B1;HANGUL SYLLABLE SANI;Lo;0;L;;;;;N;;;;; +C0B2;HANGUL SYLLABLE SANH;Lo;0;L;;;;;N;;;;; +C0B3;HANGUL SYLLABLE SAD;Lo;0;L;;;;;N;;;;; +C0B4;HANGUL SYLLABLE SAL;Lo;0;L;;;;;N;;;;; +C0B5;HANGUL SYLLABLE SALG;Lo;0;L;;;;;N;;;;; +C0B6;HANGUL SYLLABLE SALM;Lo;0;L;;;;;N;;;;; +C0B7;HANGUL SYLLABLE SALB;Lo;0;L;;;;;N;;;;; +C0B8;HANGUL SYLLABLE SALS;Lo;0;L;;;;;N;;;;; +C0B9;HANGUL SYLLABLE SALT;Lo;0;L;;;;;N;;;;; +C0BA;HANGUL SYLLABLE SALP;Lo;0;L;;;;;N;;;;; +C0BB;HANGUL SYLLABLE SALH;Lo;0;L;;;;;N;;;;; +C0BC;HANGUL SYLLABLE SAM;Lo;0;L;;;;;N;;;;; +C0BD;HANGUL SYLLABLE SAB;Lo;0;L;;;;;N;;;;; +C0BE;HANGUL SYLLABLE SABS;Lo;0;L;;;;;N;;;;; +C0BF;HANGUL SYLLABLE SAS;Lo;0;L;;;;;N;;;;; +C0C0;HANGUL SYLLABLE SASS;Lo;0;L;;;;;N;;;;; +C0C1;HANGUL SYLLABLE SANG;Lo;0;L;;;;;N;;;;; +C0C2;HANGUL SYLLABLE SAJ;Lo;0;L;;;;;N;;;;; +C0C3;HANGUL SYLLABLE SAC;Lo;0;L;;;;;N;;;;; +C0C4;HANGUL SYLLABLE SAK;Lo;0;L;;;;;N;;;;; +C0C5;HANGUL SYLLABLE SAT;Lo;0;L;;;;;N;;;;; +C0C6;HANGUL SYLLABLE SAP;Lo;0;L;;;;;N;;;;; +C0C7;HANGUL SYLLABLE SAH;Lo;0;L;;;;;N;;;;; +C0C8;HANGUL SYLLABLE SAE;Lo;0;L;;;;;N;;;;; +C0C9;HANGUL SYLLABLE SAEG;Lo;0;L;;;;;N;;;;; +C0CA;HANGUL SYLLABLE SAEGG;Lo;0;L;;;;;N;;;;; +C0CB;HANGUL SYLLABLE SAEGS;Lo;0;L;;;;;N;;;;; +C0CC;HANGUL SYLLABLE SAEN;Lo;0;L;;;;;N;;;;; +C0CD;HANGUL SYLLABLE SAENI;Lo;0;L;;;;;N;;;;; +C0CE;HANGUL SYLLABLE SAENH;Lo;0;L;;;;;N;;;;; +C0CF;HANGUL SYLLABLE SAED;Lo;0;L;;;;;N;;;;; +C0D0;HANGUL SYLLABLE SAEL;Lo;0;L;;;;;N;;;;; +C0D1;HANGUL SYLLABLE SAELG;Lo;0;L;;;;;N;;;;; +C0D2;HANGUL SYLLABLE SAELM;Lo;0;L;;;;;N;;;;; +C0D3;HANGUL SYLLABLE SAELB;Lo;0;L;;;;;N;;;;; +C0D4;HANGUL SYLLABLE SAELS;Lo;0;L;;;;;N;;;;; +C0D5;HANGUL SYLLABLE SAELT;Lo;0;L;;;;;N;;;;; +C0D6;HANGUL SYLLABLE SAELP;Lo;0;L;;;;;N;;;;; +C0D7;HANGUL SYLLABLE SAELH;Lo;0;L;;;;;N;;;;; +C0D8;HANGUL SYLLABLE SAEM;Lo;0;L;;;;;N;;;;; +C0D9;HANGUL SYLLABLE SAEB;Lo;0;L;;;;;N;;;;; +C0DA;HANGUL SYLLABLE SAEBS;Lo;0;L;;;;;N;;;;; +C0DB;HANGUL SYLLABLE SAES;Lo;0;L;;;;;N;;;;; +C0DC;HANGUL SYLLABLE SAESS;Lo;0;L;;;;;N;;;;; +C0DD;HANGUL SYLLABLE SAENG;Lo;0;L;;;;;N;;;;; +C0DE;HANGUL SYLLABLE SAEJ;Lo;0;L;;;;;N;;;;; +C0DF;HANGUL SYLLABLE SAEC;Lo;0;L;;;;;N;;;;; +C0E0;HANGUL SYLLABLE SAEK;Lo;0;L;;;;;N;;;;; +C0E1;HANGUL SYLLABLE SAET;Lo;0;L;;;;;N;;;;; +C0E2;HANGUL SYLLABLE SAEP;Lo;0;L;;;;;N;;;;; +C0E3;HANGUL SYLLABLE SAEH;Lo;0;L;;;;;N;;;;; +C0E4;HANGUL SYLLABLE SYA;Lo;0;L;;;;;N;;;;; +C0E5;HANGUL SYLLABLE SYAG;Lo;0;L;;;;;N;;;;; +C0E6;HANGUL SYLLABLE SYAGG;Lo;0;L;;;;;N;;;;; +C0E7;HANGUL SYLLABLE SYAGS;Lo;0;L;;;;;N;;;;; +C0E8;HANGUL SYLLABLE SYAN;Lo;0;L;;;;;N;;;;; +C0E9;HANGUL SYLLABLE SYANI;Lo;0;L;;;;;N;;;;; +C0EA;HANGUL SYLLABLE SYANH;Lo;0;L;;;;;N;;;;; +C0EB;HANGUL SYLLABLE SYAD;Lo;0;L;;;;;N;;;;; +C0EC;HANGUL SYLLABLE SYAL;Lo;0;L;;;;;N;;;;; +C0ED;HANGUL SYLLABLE SYALG;Lo;0;L;;;;;N;;;;; +C0EE;HANGUL SYLLABLE SYALM;Lo;0;L;;;;;N;;;;; +C0EF;HANGUL SYLLABLE SYALB;Lo;0;L;;;;;N;;;;; +C0F0;HANGUL SYLLABLE SYALS;Lo;0;L;;;;;N;;;;; +C0F1;HANGUL SYLLABLE SYALT;Lo;0;L;;;;;N;;;;; +C0F2;HANGUL SYLLABLE SYALP;Lo;0;L;;;;;N;;;;; +C0F3;HANGUL SYLLABLE SYALH;Lo;0;L;;;;;N;;;;; +C0F4;HANGUL SYLLABLE SYAM;Lo;0;L;;;;;N;;;;; +C0F5;HANGUL SYLLABLE SYAB;Lo;0;L;;;;;N;;;;; +C0F6;HANGUL SYLLABLE SYABS;Lo;0;L;;;;;N;;;;; +C0F7;HANGUL SYLLABLE SYAS;Lo;0;L;;;;;N;;;;; +C0F8;HANGUL SYLLABLE SYASS;Lo;0;L;;;;;N;;;;; +C0F9;HANGUL SYLLABLE SYANG;Lo;0;L;;;;;N;;;;; +C0FA;HANGUL SYLLABLE SYAJ;Lo;0;L;;;;;N;;;;; +C0FB;HANGUL SYLLABLE SYAC;Lo;0;L;;;;;N;;;;; +C0FC;HANGUL SYLLABLE SYAK;Lo;0;L;;;;;N;;;;; +C0FD;HANGUL SYLLABLE SYAT;Lo;0;L;;;;;N;;;;; +C0FE;HANGUL SYLLABLE SYAP;Lo;0;L;;;;;N;;;;; +C0FF;HANGUL SYLLABLE SYAH;Lo;0;L;;;;;N;;;;; +C100;HANGUL SYLLABLE SYAE;Lo;0;L;;;;;N;;;;; +C101;HANGUL SYLLABLE SYAEG;Lo;0;L;;;;;N;;;;; +C102;HANGUL SYLLABLE SYAEGG;Lo;0;L;;;;;N;;;;; +C103;HANGUL SYLLABLE SYAEGS;Lo;0;L;;;;;N;;;;; +C104;HANGUL SYLLABLE SYAEN;Lo;0;L;;;;;N;;;;; +C105;HANGUL SYLLABLE SYAENI;Lo;0;L;;;;;N;;;;; +C106;HANGUL SYLLABLE SYAENH;Lo;0;L;;;;;N;;;;; +C107;HANGUL SYLLABLE SYAED;Lo;0;L;;;;;N;;;;; +C108;HANGUL SYLLABLE SYAEL;Lo;0;L;;;;;N;;;;; +C109;HANGUL SYLLABLE SYAELG;Lo;0;L;;;;;N;;;;; +C10A;HANGUL SYLLABLE SYAELM;Lo;0;L;;;;;N;;;;; +C10B;HANGUL SYLLABLE SYAELB;Lo;0;L;;;;;N;;;;; +C10C;HANGUL SYLLABLE SYAELS;Lo;0;L;;;;;N;;;;; +C10D;HANGUL SYLLABLE SYAELT;Lo;0;L;;;;;N;;;;; +C10E;HANGUL SYLLABLE SYAELP;Lo;0;L;;;;;N;;;;; +C10F;HANGUL SYLLABLE SYAELH;Lo;0;L;;;;;N;;;;; +C110;HANGUL SYLLABLE SYAEM;Lo;0;L;;;;;N;;;;; +C111;HANGUL SYLLABLE SYAEB;Lo;0;L;;;;;N;;;;; +C112;HANGUL SYLLABLE SYAEBS;Lo;0;L;;;;;N;;;;; +C113;HANGUL SYLLABLE SYAES;Lo;0;L;;;;;N;;;;; +C114;HANGUL SYLLABLE SYAESS;Lo;0;L;;;;;N;;;;; +C115;HANGUL SYLLABLE SYAENG;Lo;0;L;;;;;N;;;;; +C116;HANGUL SYLLABLE SYAEJ;Lo;0;L;;;;;N;;;;; +C117;HANGUL SYLLABLE SYAEC;Lo;0;L;;;;;N;;;;; +C118;HANGUL SYLLABLE SYAEK;Lo;0;L;;;;;N;;;;; +C119;HANGUL SYLLABLE SYAET;Lo;0;L;;;;;N;;;;; +C11A;HANGUL SYLLABLE SYAEP;Lo;0;L;;;;;N;;;;; +C11B;HANGUL SYLLABLE SYAEH;Lo;0;L;;;;;N;;;;; +C11C;HANGUL SYLLABLE SEO;Lo;0;L;;;;;N;;;;; +C11D;HANGUL SYLLABLE SEOG;Lo;0;L;;;;;N;;;;; +C11E;HANGUL SYLLABLE SEOGG;Lo;0;L;;;;;N;;;;; +C11F;HANGUL SYLLABLE SEOGS;Lo;0;L;;;;;N;;;;; +C120;HANGUL SYLLABLE SEON;Lo;0;L;;;;;N;;;;; +C121;HANGUL SYLLABLE SEONI;Lo;0;L;;;;;N;;;;; +C122;HANGUL SYLLABLE SEONH;Lo;0;L;;;;;N;;;;; +C123;HANGUL SYLLABLE SEOD;Lo;0;L;;;;;N;;;;; +C124;HANGUL SYLLABLE SEOL;Lo;0;L;;;;;N;;;;; +C125;HANGUL SYLLABLE SEOLG;Lo;0;L;;;;;N;;;;; +C126;HANGUL SYLLABLE SEOLM;Lo;0;L;;;;;N;;;;; +C127;HANGUL SYLLABLE SEOLB;Lo;0;L;;;;;N;;;;; +C128;HANGUL SYLLABLE SEOLS;Lo;0;L;;;;;N;;;;; +C129;HANGUL SYLLABLE SEOLT;Lo;0;L;;;;;N;;;;; +C12A;HANGUL SYLLABLE SEOLP;Lo;0;L;;;;;N;;;;; +C12B;HANGUL SYLLABLE SEOLH;Lo;0;L;;;;;N;;;;; +C12C;HANGUL SYLLABLE SEOM;Lo;0;L;;;;;N;;;;; +C12D;HANGUL SYLLABLE SEOB;Lo;0;L;;;;;N;;;;; +C12E;HANGUL SYLLABLE SEOBS;Lo;0;L;;;;;N;;;;; +C12F;HANGUL SYLLABLE SEOS;Lo;0;L;;;;;N;;;;; +C130;HANGUL SYLLABLE SEOSS;Lo;0;L;;;;;N;;;;; +C131;HANGUL SYLLABLE SEONG;Lo;0;L;;;;;N;;;;; +C132;HANGUL SYLLABLE SEOJ;Lo;0;L;;;;;N;;;;; +C133;HANGUL SYLLABLE SEOC;Lo;0;L;;;;;N;;;;; +C134;HANGUL SYLLABLE SEOK;Lo;0;L;;;;;N;;;;; +C135;HANGUL SYLLABLE SEOT;Lo;0;L;;;;;N;;;;; +C136;HANGUL SYLLABLE SEOP;Lo;0;L;;;;;N;;;;; +C137;HANGUL SYLLABLE SEOH;Lo;0;L;;;;;N;;;;; +C138;HANGUL SYLLABLE SE;Lo;0;L;;;;;N;;;;; +C139;HANGUL SYLLABLE SEG;Lo;0;L;;;;;N;;;;; +C13A;HANGUL SYLLABLE SEGG;Lo;0;L;;;;;N;;;;; +C13B;HANGUL SYLLABLE SEGS;Lo;0;L;;;;;N;;;;; +C13C;HANGUL SYLLABLE SEN;Lo;0;L;;;;;N;;;;; +C13D;HANGUL SYLLABLE SENI;Lo;0;L;;;;;N;;;;; +C13E;HANGUL SYLLABLE SENH;Lo;0;L;;;;;N;;;;; +C13F;HANGUL SYLLABLE SED;Lo;0;L;;;;;N;;;;; +C140;HANGUL SYLLABLE SEL;Lo;0;L;;;;;N;;;;; +C141;HANGUL SYLLABLE SELG;Lo;0;L;;;;;N;;;;; +C142;HANGUL SYLLABLE SELM;Lo;0;L;;;;;N;;;;; +C143;HANGUL SYLLABLE SELB;Lo;0;L;;;;;N;;;;; +C144;HANGUL SYLLABLE SELS;Lo;0;L;;;;;N;;;;; +C145;HANGUL SYLLABLE SELT;Lo;0;L;;;;;N;;;;; +C146;HANGUL SYLLABLE SELP;Lo;0;L;;;;;N;;;;; +C147;HANGUL SYLLABLE SELH;Lo;0;L;;;;;N;;;;; +C148;HANGUL SYLLABLE SEM;Lo;0;L;;;;;N;;;;; +C149;HANGUL SYLLABLE SEB;Lo;0;L;;;;;N;;;;; +C14A;HANGUL SYLLABLE SEBS;Lo;0;L;;;;;N;;;;; +C14B;HANGUL SYLLABLE SES;Lo;0;L;;;;;N;;;;; +C14C;HANGUL SYLLABLE SESS;Lo;0;L;;;;;N;;;;; +C14D;HANGUL SYLLABLE SENG;Lo;0;L;;;;;N;;;;; +C14E;HANGUL SYLLABLE SEJ;Lo;0;L;;;;;N;;;;; +C14F;HANGUL SYLLABLE SEC;Lo;0;L;;;;;N;;;;; +C150;HANGUL SYLLABLE SEK;Lo;0;L;;;;;N;;;;; +C151;HANGUL SYLLABLE SET;Lo;0;L;;;;;N;;;;; +C152;HANGUL SYLLABLE SEP;Lo;0;L;;;;;N;;;;; +C153;HANGUL SYLLABLE SEH;Lo;0;L;;;;;N;;;;; +C154;HANGUL SYLLABLE SYEO;Lo;0;L;;;;;N;;;;; +C155;HANGUL SYLLABLE SYEOG;Lo;0;L;;;;;N;;;;; +C156;HANGUL SYLLABLE SYEOGG;Lo;0;L;;;;;N;;;;; +C157;HANGUL SYLLABLE SYEOGS;Lo;0;L;;;;;N;;;;; +C158;HANGUL SYLLABLE SYEON;Lo;0;L;;;;;N;;;;; +C159;HANGUL SYLLABLE SYEONI;Lo;0;L;;;;;N;;;;; +C15A;HANGUL SYLLABLE SYEONH;Lo;0;L;;;;;N;;;;; +C15B;HANGUL SYLLABLE SYEOD;Lo;0;L;;;;;N;;;;; +C15C;HANGUL SYLLABLE SYEOL;Lo;0;L;;;;;N;;;;; +C15D;HANGUL SYLLABLE SYEOLG;Lo;0;L;;;;;N;;;;; +C15E;HANGUL SYLLABLE SYEOLM;Lo;0;L;;;;;N;;;;; +C15F;HANGUL SYLLABLE SYEOLB;Lo;0;L;;;;;N;;;;; +C160;HANGUL SYLLABLE SYEOLS;Lo;0;L;;;;;N;;;;; +C161;HANGUL SYLLABLE SYEOLT;Lo;0;L;;;;;N;;;;; +C162;HANGUL SYLLABLE SYEOLP;Lo;0;L;;;;;N;;;;; +C163;HANGUL SYLLABLE SYEOLH;Lo;0;L;;;;;N;;;;; +C164;HANGUL SYLLABLE SYEOM;Lo;0;L;;;;;N;;;;; +C165;HANGUL SYLLABLE SYEOB;Lo;0;L;;;;;N;;;;; +C166;HANGUL SYLLABLE SYEOBS;Lo;0;L;;;;;N;;;;; +C167;HANGUL SYLLABLE SYEOS;Lo;0;L;;;;;N;;;;; +C168;HANGUL SYLLABLE SYEOSS;Lo;0;L;;;;;N;;;;; +C169;HANGUL SYLLABLE SYEONG;Lo;0;L;;;;;N;;;;; +C16A;HANGUL SYLLABLE SYEOJ;Lo;0;L;;;;;N;;;;; +C16B;HANGUL SYLLABLE SYEOC;Lo;0;L;;;;;N;;;;; +C16C;HANGUL SYLLABLE SYEOK;Lo;0;L;;;;;N;;;;; +C16D;HANGUL SYLLABLE SYEOT;Lo;0;L;;;;;N;;;;; +C16E;HANGUL SYLLABLE SYEOP;Lo;0;L;;;;;N;;;;; +C16F;HANGUL SYLLABLE SYEOH;Lo;0;L;;;;;N;;;;; +C170;HANGUL SYLLABLE SYE;Lo;0;L;;;;;N;;;;; +C171;HANGUL SYLLABLE SYEG;Lo;0;L;;;;;N;;;;; +C172;HANGUL SYLLABLE SYEGG;Lo;0;L;;;;;N;;;;; +C173;HANGUL SYLLABLE SYEGS;Lo;0;L;;;;;N;;;;; +C174;HANGUL SYLLABLE SYEN;Lo;0;L;;;;;N;;;;; +C175;HANGUL SYLLABLE SYENI;Lo;0;L;;;;;N;;;;; +C176;HANGUL SYLLABLE SYENH;Lo;0;L;;;;;N;;;;; +C177;HANGUL SYLLABLE SYED;Lo;0;L;;;;;N;;;;; +C178;HANGUL SYLLABLE SYEL;Lo;0;L;;;;;N;;;;; +C179;HANGUL SYLLABLE SYELG;Lo;0;L;;;;;N;;;;; +C17A;HANGUL SYLLABLE SYELM;Lo;0;L;;;;;N;;;;; +C17B;HANGUL SYLLABLE SYELB;Lo;0;L;;;;;N;;;;; +C17C;HANGUL SYLLABLE SYELS;Lo;0;L;;;;;N;;;;; +C17D;HANGUL SYLLABLE SYELT;Lo;0;L;;;;;N;;;;; +C17E;HANGUL SYLLABLE SYELP;Lo;0;L;;;;;N;;;;; +C17F;HANGUL SYLLABLE SYELH;Lo;0;L;;;;;N;;;;; +C180;HANGUL SYLLABLE SYEM;Lo;0;L;;;;;N;;;;; +C181;HANGUL SYLLABLE SYEB;Lo;0;L;;;;;N;;;;; +C182;HANGUL SYLLABLE SYEBS;Lo;0;L;;;;;N;;;;; +C183;HANGUL SYLLABLE SYES;Lo;0;L;;;;;N;;;;; +C184;HANGUL SYLLABLE SYESS;Lo;0;L;;;;;N;;;;; +C185;HANGUL SYLLABLE SYENG;Lo;0;L;;;;;N;;;;; +C186;HANGUL SYLLABLE SYEJ;Lo;0;L;;;;;N;;;;; +C187;HANGUL SYLLABLE SYEC;Lo;0;L;;;;;N;;;;; +C188;HANGUL SYLLABLE SYEK;Lo;0;L;;;;;N;;;;; +C189;HANGUL SYLLABLE SYET;Lo;0;L;;;;;N;;;;; +C18A;HANGUL SYLLABLE SYEP;Lo;0;L;;;;;N;;;;; +C18B;HANGUL SYLLABLE SYEH;Lo;0;L;;;;;N;;;;; +C18C;HANGUL SYLLABLE SO;Lo;0;L;;;;;N;;;;; +C18D;HANGUL SYLLABLE SOG;Lo;0;L;;;;;N;;;;; +C18E;HANGUL SYLLABLE SOGG;Lo;0;L;;;;;N;;;;; +C18F;HANGUL SYLLABLE SOGS;Lo;0;L;;;;;N;;;;; +C190;HANGUL SYLLABLE SON;Lo;0;L;;;;;N;;;;; +C191;HANGUL SYLLABLE SONI;Lo;0;L;;;;;N;;;;; +C192;HANGUL SYLLABLE SONH;Lo;0;L;;;;;N;;;;; +C193;HANGUL SYLLABLE SOD;Lo;0;L;;;;;N;;;;; +C194;HANGUL SYLLABLE SOL;Lo;0;L;;;;;N;;;;; +C195;HANGUL SYLLABLE SOLG;Lo;0;L;;;;;N;;;;; +C196;HANGUL SYLLABLE SOLM;Lo;0;L;;;;;N;;;;; +C197;HANGUL SYLLABLE SOLB;Lo;0;L;;;;;N;;;;; +C198;HANGUL SYLLABLE SOLS;Lo;0;L;;;;;N;;;;; +C199;HANGUL SYLLABLE SOLT;Lo;0;L;;;;;N;;;;; +C19A;HANGUL SYLLABLE SOLP;Lo;0;L;;;;;N;;;;; +C19B;HANGUL SYLLABLE SOLH;Lo;0;L;;;;;N;;;;; +C19C;HANGUL SYLLABLE SOM;Lo;0;L;;;;;N;;;;; +C19D;HANGUL SYLLABLE SOB;Lo;0;L;;;;;N;;;;; +C19E;HANGUL SYLLABLE SOBS;Lo;0;L;;;;;N;;;;; +C19F;HANGUL SYLLABLE SOS;Lo;0;L;;;;;N;;;;; +C1A0;HANGUL SYLLABLE SOSS;Lo;0;L;;;;;N;;;;; +C1A1;HANGUL SYLLABLE SONG;Lo;0;L;;;;;N;;;;; +C1A2;HANGUL SYLLABLE SOJ;Lo;0;L;;;;;N;;;;; +C1A3;HANGUL SYLLABLE SOC;Lo;0;L;;;;;N;;;;; +C1A4;HANGUL SYLLABLE SOK;Lo;0;L;;;;;N;;;;; +C1A5;HANGUL SYLLABLE SOT;Lo;0;L;;;;;N;;;;; +C1A6;HANGUL SYLLABLE SOP;Lo;0;L;;;;;N;;;;; +C1A7;HANGUL SYLLABLE SOH;Lo;0;L;;;;;N;;;;; +C1A8;HANGUL SYLLABLE SWA;Lo;0;L;;;;;N;;;;; +C1A9;HANGUL SYLLABLE SWAG;Lo;0;L;;;;;N;;;;; +C1AA;HANGUL SYLLABLE SWAGG;Lo;0;L;;;;;N;;;;; +C1AB;HANGUL SYLLABLE SWAGS;Lo;0;L;;;;;N;;;;; +C1AC;HANGUL SYLLABLE SWAN;Lo;0;L;;;;;N;;;;; +C1AD;HANGUL SYLLABLE SWANI;Lo;0;L;;;;;N;;;;; +C1AE;HANGUL SYLLABLE SWANH;Lo;0;L;;;;;N;;;;; +C1AF;HANGUL SYLLABLE SWAD;Lo;0;L;;;;;N;;;;; +C1B0;HANGUL SYLLABLE SWAL;Lo;0;L;;;;;N;;;;; +C1B1;HANGUL SYLLABLE SWALG;Lo;0;L;;;;;N;;;;; +C1B2;HANGUL SYLLABLE SWALM;Lo;0;L;;;;;N;;;;; +C1B3;HANGUL SYLLABLE SWALB;Lo;0;L;;;;;N;;;;; +C1B4;HANGUL SYLLABLE SWALS;Lo;0;L;;;;;N;;;;; +C1B5;HANGUL SYLLABLE SWALT;Lo;0;L;;;;;N;;;;; +C1B6;HANGUL SYLLABLE SWALP;Lo;0;L;;;;;N;;;;; +C1B7;HANGUL SYLLABLE SWALH;Lo;0;L;;;;;N;;;;; +C1B8;HANGUL SYLLABLE SWAM;Lo;0;L;;;;;N;;;;; +C1B9;HANGUL SYLLABLE SWAB;Lo;0;L;;;;;N;;;;; +C1BA;HANGUL SYLLABLE SWABS;Lo;0;L;;;;;N;;;;; +C1BB;HANGUL SYLLABLE SWAS;Lo;0;L;;;;;N;;;;; +C1BC;HANGUL SYLLABLE SWASS;Lo;0;L;;;;;N;;;;; +C1BD;HANGUL SYLLABLE SWANG;Lo;0;L;;;;;N;;;;; +C1BE;HANGUL SYLLABLE SWAJ;Lo;0;L;;;;;N;;;;; +C1BF;HANGUL SYLLABLE SWAC;Lo;0;L;;;;;N;;;;; +C1C0;HANGUL SYLLABLE SWAK;Lo;0;L;;;;;N;;;;; +C1C1;HANGUL SYLLABLE SWAT;Lo;0;L;;;;;N;;;;; +C1C2;HANGUL SYLLABLE SWAP;Lo;0;L;;;;;N;;;;; +C1C3;HANGUL SYLLABLE SWAH;Lo;0;L;;;;;N;;;;; +C1C4;HANGUL SYLLABLE SWAE;Lo;0;L;;;;;N;;;;; +C1C5;HANGUL SYLLABLE SWAEG;Lo;0;L;;;;;N;;;;; +C1C6;HANGUL SYLLABLE SWAEGG;Lo;0;L;;;;;N;;;;; +C1C7;HANGUL SYLLABLE SWAEGS;Lo;0;L;;;;;N;;;;; +C1C8;HANGUL SYLLABLE SWAEN;Lo;0;L;;;;;N;;;;; +C1C9;HANGUL SYLLABLE SWAENI;Lo;0;L;;;;;N;;;;; +C1CA;HANGUL SYLLABLE SWAENH;Lo;0;L;;;;;N;;;;; +C1CB;HANGUL SYLLABLE SWAED;Lo;0;L;;;;;N;;;;; +C1CC;HANGUL SYLLABLE SWAEL;Lo;0;L;;;;;N;;;;; +C1CD;HANGUL SYLLABLE SWAELG;Lo;0;L;;;;;N;;;;; +C1CE;HANGUL SYLLABLE SWAELM;Lo;0;L;;;;;N;;;;; +C1CF;HANGUL SYLLABLE SWAELB;Lo;0;L;;;;;N;;;;; +C1D0;HANGUL SYLLABLE SWAELS;Lo;0;L;;;;;N;;;;; +C1D1;HANGUL SYLLABLE SWAELT;Lo;0;L;;;;;N;;;;; +C1D2;HANGUL SYLLABLE SWAELP;Lo;0;L;;;;;N;;;;; +C1D3;HANGUL SYLLABLE SWAELH;Lo;0;L;;;;;N;;;;; +C1D4;HANGUL SYLLABLE SWAEM;Lo;0;L;;;;;N;;;;; +C1D5;HANGUL SYLLABLE SWAEB;Lo;0;L;;;;;N;;;;; +C1D6;HANGUL SYLLABLE SWAEBS;Lo;0;L;;;;;N;;;;; +C1D7;HANGUL SYLLABLE SWAES;Lo;0;L;;;;;N;;;;; +C1D8;HANGUL SYLLABLE SWAESS;Lo;0;L;;;;;N;;;;; +C1D9;HANGUL SYLLABLE SWAENG;Lo;0;L;;;;;N;;;;; +C1DA;HANGUL SYLLABLE SWAEJ;Lo;0;L;;;;;N;;;;; +C1DB;HANGUL SYLLABLE SWAEC;Lo;0;L;;;;;N;;;;; +C1DC;HANGUL SYLLABLE SWAEK;Lo;0;L;;;;;N;;;;; +C1DD;HANGUL SYLLABLE SWAET;Lo;0;L;;;;;N;;;;; +C1DE;HANGUL SYLLABLE SWAEP;Lo;0;L;;;;;N;;;;; +C1DF;HANGUL SYLLABLE SWAEH;Lo;0;L;;;;;N;;;;; +C1E0;HANGUL SYLLABLE SOE;Lo;0;L;;;;;N;;;;; +C1E1;HANGUL SYLLABLE SOEG;Lo;0;L;;;;;N;;;;; +C1E2;HANGUL SYLLABLE SOEGG;Lo;0;L;;;;;N;;;;; +C1E3;HANGUL SYLLABLE SOEGS;Lo;0;L;;;;;N;;;;; +C1E4;HANGUL SYLLABLE SOEN;Lo;0;L;;;;;N;;;;; +C1E5;HANGUL SYLLABLE SOENI;Lo;0;L;;;;;N;;;;; +C1E6;HANGUL SYLLABLE SOENH;Lo;0;L;;;;;N;;;;; +C1E7;HANGUL SYLLABLE SOED;Lo;0;L;;;;;N;;;;; +C1E8;HANGUL SYLLABLE SOEL;Lo;0;L;;;;;N;;;;; +C1E9;HANGUL SYLLABLE SOELG;Lo;0;L;;;;;N;;;;; +C1EA;HANGUL SYLLABLE SOELM;Lo;0;L;;;;;N;;;;; +C1EB;HANGUL SYLLABLE SOELB;Lo;0;L;;;;;N;;;;; +C1EC;HANGUL SYLLABLE SOELS;Lo;0;L;;;;;N;;;;; +C1ED;HANGUL SYLLABLE SOELT;Lo;0;L;;;;;N;;;;; +C1EE;HANGUL SYLLABLE SOELP;Lo;0;L;;;;;N;;;;; +C1EF;HANGUL SYLLABLE SOELH;Lo;0;L;;;;;N;;;;; +C1F0;HANGUL SYLLABLE SOEM;Lo;0;L;;;;;N;;;;; +C1F1;HANGUL SYLLABLE SOEB;Lo;0;L;;;;;N;;;;; +C1F2;HANGUL SYLLABLE SOEBS;Lo;0;L;;;;;N;;;;; +C1F3;HANGUL SYLLABLE SOES;Lo;0;L;;;;;N;;;;; +C1F4;HANGUL SYLLABLE SOESS;Lo;0;L;;;;;N;;;;; +C1F5;HANGUL SYLLABLE SOENG;Lo;0;L;;;;;N;;;;; +C1F6;HANGUL SYLLABLE SOEJ;Lo;0;L;;;;;N;;;;; +C1F7;HANGUL SYLLABLE SOEC;Lo;0;L;;;;;N;;;;; +C1F8;HANGUL SYLLABLE SOEK;Lo;0;L;;;;;N;;;;; +C1F9;HANGUL SYLLABLE SOET;Lo;0;L;;;;;N;;;;; +C1FA;HANGUL SYLLABLE SOEP;Lo;0;L;;;;;N;;;;; +C1FB;HANGUL SYLLABLE SOEH;Lo;0;L;;;;;N;;;;; +C1FC;HANGUL SYLLABLE SYO;Lo;0;L;;;;;N;;;;; +C1FD;HANGUL SYLLABLE SYOG;Lo;0;L;;;;;N;;;;; +C1FE;HANGUL SYLLABLE SYOGG;Lo;0;L;;;;;N;;;;; +C1FF;HANGUL SYLLABLE SYOGS;Lo;0;L;;;;;N;;;;; +C200;HANGUL SYLLABLE SYON;Lo;0;L;;;;;N;;;;; +C201;HANGUL SYLLABLE SYONI;Lo;0;L;;;;;N;;;;; +C202;HANGUL SYLLABLE SYONH;Lo;0;L;;;;;N;;;;; +C203;HANGUL SYLLABLE SYOD;Lo;0;L;;;;;N;;;;; +C204;HANGUL SYLLABLE SYOL;Lo;0;L;;;;;N;;;;; +C205;HANGUL SYLLABLE SYOLG;Lo;0;L;;;;;N;;;;; +C206;HANGUL SYLLABLE SYOLM;Lo;0;L;;;;;N;;;;; +C207;HANGUL SYLLABLE SYOLB;Lo;0;L;;;;;N;;;;; +C208;HANGUL SYLLABLE SYOLS;Lo;0;L;;;;;N;;;;; +C209;HANGUL SYLLABLE SYOLT;Lo;0;L;;;;;N;;;;; +C20A;HANGUL SYLLABLE SYOLP;Lo;0;L;;;;;N;;;;; +C20B;HANGUL SYLLABLE SYOLH;Lo;0;L;;;;;N;;;;; +C20C;HANGUL SYLLABLE SYOM;Lo;0;L;;;;;N;;;;; +C20D;HANGUL SYLLABLE SYOB;Lo;0;L;;;;;N;;;;; +C20E;HANGUL SYLLABLE SYOBS;Lo;0;L;;;;;N;;;;; +C20F;HANGUL SYLLABLE SYOS;Lo;0;L;;;;;N;;;;; +C210;HANGUL SYLLABLE SYOSS;Lo;0;L;;;;;N;;;;; +C211;HANGUL SYLLABLE SYONG;Lo;0;L;;;;;N;;;;; +C212;HANGUL SYLLABLE SYOJ;Lo;0;L;;;;;N;;;;; +C213;HANGUL SYLLABLE SYOC;Lo;0;L;;;;;N;;;;; +C214;HANGUL SYLLABLE SYOK;Lo;0;L;;;;;N;;;;; +C215;HANGUL SYLLABLE SYOT;Lo;0;L;;;;;N;;;;; +C216;HANGUL SYLLABLE SYOP;Lo;0;L;;;;;N;;;;; +C217;HANGUL SYLLABLE SYOH;Lo;0;L;;;;;N;;;;; +C218;HANGUL SYLLABLE SU;Lo;0;L;;;;;N;;;;; +C219;HANGUL SYLLABLE SUG;Lo;0;L;;;;;N;;;;; +C21A;HANGUL SYLLABLE SUGG;Lo;0;L;;;;;N;;;;; +C21B;HANGUL SYLLABLE SUGS;Lo;0;L;;;;;N;;;;; +C21C;HANGUL SYLLABLE SUN;Lo;0;L;;;;;N;;;;; +C21D;HANGUL SYLLABLE SUNI;Lo;0;L;;;;;N;;;;; +C21E;HANGUL SYLLABLE SUNH;Lo;0;L;;;;;N;;;;; +C21F;HANGUL SYLLABLE SUD;Lo;0;L;;;;;N;;;;; +C220;HANGUL SYLLABLE SUL;Lo;0;L;;;;;N;;;;; +C221;HANGUL SYLLABLE SULG;Lo;0;L;;;;;N;;;;; +C222;HANGUL SYLLABLE SULM;Lo;0;L;;;;;N;;;;; +C223;HANGUL SYLLABLE SULB;Lo;0;L;;;;;N;;;;; +C224;HANGUL SYLLABLE SULS;Lo;0;L;;;;;N;;;;; +C225;HANGUL SYLLABLE SULT;Lo;0;L;;;;;N;;;;; +C226;HANGUL SYLLABLE SULP;Lo;0;L;;;;;N;;;;; +C227;HANGUL SYLLABLE SULH;Lo;0;L;;;;;N;;;;; +C228;HANGUL SYLLABLE SUM;Lo;0;L;;;;;N;;;;; +C229;HANGUL SYLLABLE SUB;Lo;0;L;;;;;N;;;;; +C22A;HANGUL SYLLABLE SUBS;Lo;0;L;;;;;N;;;;; +C22B;HANGUL SYLLABLE SUS;Lo;0;L;;;;;N;;;;; +C22C;HANGUL SYLLABLE SUSS;Lo;0;L;;;;;N;;;;; +C22D;HANGUL SYLLABLE SUNG;Lo;0;L;;;;;N;;;;; +C22E;HANGUL SYLLABLE SUJ;Lo;0;L;;;;;N;;;;; +C22F;HANGUL SYLLABLE SUC;Lo;0;L;;;;;N;;;;; +C230;HANGUL SYLLABLE SUK;Lo;0;L;;;;;N;;;;; +C231;HANGUL SYLLABLE SUT;Lo;0;L;;;;;N;;;;; +C232;HANGUL SYLLABLE SUP;Lo;0;L;;;;;N;;;;; +C233;HANGUL SYLLABLE SUH;Lo;0;L;;;;;N;;;;; +C234;HANGUL SYLLABLE SWEO;Lo;0;L;;;;;N;;;;; +C235;HANGUL SYLLABLE SWEOG;Lo;0;L;;;;;N;;;;; +C236;HANGUL SYLLABLE SWEOGG;Lo;0;L;;;;;N;;;;; +C237;HANGUL SYLLABLE SWEOGS;Lo;0;L;;;;;N;;;;; +C238;HANGUL SYLLABLE SWEON;Lo;0;L;;;;;N;;;;; +C239;HANGUL SYLLABLE SWEONI;Lo;0;L;;;;;N;;;;; +C23A;HANGUL SYLLABLE SWEONH;Lo;0;L;;;;;N;;;;; +C23B;HANGUL SYLLABLE SWEOD;Lo;0;L;;;;;N;;;;; +C23C;HANGUL SYLLABLE SWEOL;Lo;0;L;;;;;N;;;;; +C23D;HANGUL SYLLABLE SWEOLG;Lo;0;L;;;;;N;;;;; +C23E;HANGUL SYLLABLE SWEOLM;Lo;0;L;;;;;N;;;;; +C23F;HANGUL SYLLABLE SWEOLB;Lo;0;L;;;;;N;;;;; +C240;HANGUL SYLLABLE SWEOLS;Lo;0;L;;;;;N;;;;; +C241;HANGUL SYLLABLE SWEOLT;Lo;0;L;;;;;N;;;;; +C242;HANGUL SYLLABLE SWEOLP;Lo;0;L;;;;;N;;;;; +C243;HANGUL SYLLABLE SWEOLH;Lo;0;L;;;;;N;;;;; +C244;HANGUL SYLLABLE SWEOM;Lo;0;L;;;;;N;;;;; +C245;HANGUL SYLLABLE SWEOB;Lo;0;L;;;;;N;;;;; +C246;HANGUL SYLLABLE SWEOBS;Lo;0;L;;;;;N;;;;; +C247;HANGUL SYLLABLE SWEOS;Lo;0;L;;;;;N;;;;; +C248;HANGUL SYLLABLE SWEOSS;Lo;0;L;;;;;N;;;;; +C249;HANGUL SYLLABLE SWEONG;Lo;0;L;;;;;N;;;;; +C24A;HANGUL SYLLABLE SWEOJ;Lo;0;L;;;;;N;;;;; +C24B;HANGUL SYLLABLE SWEOC;Lo;0;L;;;;;N;;;;; +C24C;HANGUL SYLLABLE SWEOK;Lo;0;L;;;;;N;;;;; +C24D;HANGUL SYLLABLE SWEOT;Lo;0;L;;;;;N;;;;; +C24E;HANGUL SYLLABLE SWEOP;Lo;0;L;;;;;N;;;;; +C24F;HANGUL SYLLABLE SWEOH;Lo;0;L;;;;;N;;;;; +C250;HANGUL SYLLABLE SWE;Lo;0;L;;;;;N;;;;; +C251;HANGUL SYLLABLE SWEG;Lo;0;L;;;;;N;;;;; +C252;HANGUL SYLLABLE SWEGG;Lo;0;L;;;;;N;;;;; +C253;HANGUL SYLLABLE SWEGS;Lo;0;L;;;;;N;;;;; +C254;HANGUL SYLLABLE SWEN;Lo;0;L;;;;;N;;;;; +C255;HANGUL SYLLABLE SWENI;Lo;0;L;;;;;N;;;;; +C256;HANGUL SYLLABLE SWENH;Lo;0;L;;;;;N;;;;; +C257;HANGUL SYLLABLE SWED;Lo;0;L;;;;;N;;;;; +C258;HANGUL SYLLABLE SWEL;Lo;0;L;;;;;N;;;;; +C259;HANGUL SYLLABLE SWELG;Lo;0;L;;;;;N;;;;; +C25A;HANGUL SYLLABLE SWELM;Lo;0;L;;;;;N;;;;; +C25B;HANGUL SYLLABLE SWELB;Lo;0;L;;;;;N;;;;; +C25C;HANGUL SYLLABLE SWELS;Lo;0;L;;;;;N;;;;; +C25D;HANGUL SYLLABLE SWELT;Lo;0;L;;;;;N;;;;; +C25E;HANGUL SYLLABLE SWELP;Lo;0;L;;;;;N;;;;; +C25F;HANGUL SYLLABLE SWELH;Lo;0;L;;;;;N;;;;; +C260;HANGUL SYLLABLE SWEM;Lo;0;L;;;;;N;;;;; +C261;HANGUL SYLLABLE SWEB;Lo;0;L;;;;;N;;;;; +C262;HANGUL SYLLABLE SWEBS;Lo;0;L;;;;;N;;;;; +C263;HANGUL SYLLABLE SWES;Lo;0;L;;;;;N;;;;; +C264;HANGUL SYLLABLE SWESS;Lo;0;L;;;;;N;;;;; +C265;HANGUL SYLLABLE SWENG;Lo;0;L;;;;;N;;;;; +C266;HANGUL SYLLABLE SWEJ;Lo;0;L;;;;;N;;;;; +C267;HANGUL SYLLABLE SWEC;Lo;0;L;;;;;N;;;;; +C268;HANGUL SYLLABLE SWEK;Lo;0;L;;;;;N;;;;; +C269;HANGUL SYLLABLE SWET;Lo;0;L;;;;;N;;;;; +C26A;HANGUL SYLLABLE SWEP;Lo;0;L;;;;;N;;;;; +C26B;HANGUL SYLLABLE SWEH;Lo;0;L;;;;;N;;;;; +C26C;HANGUL SYLLABLE SWI;Lo;0;L;;;;;N;;;;; +C26D;HANGUL SYLLABLE SWIG;Lo;0;L;;;;;N;;;;; +C26E;HANGUL SYLLABLE SWIGG;Lo;0;L;;;;;N;;;;; +C26F;HANGUL SYLLABLE SWIGS;Lo;0;L;;;;;N;;;;; +C270;HANGUL SYLLABLE SWIN;Lo;0;L;;;;;N;;;;; +C271;HANGUL SYLLABLE SWINI;Lo;0;L;;;;;N;;;;; +C272;HANGUL SYLLABLE SWINH;Lo;0;L;;;;;N;;;;; +C273;HANGUL SYLLABLE SWID;Lo;0;L;;;;;N;;;;; +C274;HANGUL SYLLABLE SWIL;Lo;0;L;;;;;N;;;;; +C275;HANGUL SYLLABLE SWILG;Lo;0;L;;;;;N;;;;; +C276;HANGUL SYLLABLE SWILM;Lo;0;L;;;;;N;;;;; +C277;HANGUL SYLLABLE SWILB;Lo;0;L;;;;;N;;;;; +C278;HANGUL SYLLABLE SWILS;Lo;0;L;;;;;N;;;;; +C279;HANGUL SYLLABLE SWILT;Lo;0;L;;;;;N;;;;; +C27A;HANGUL SYLLABLE SWILP;Lo;0;L;;;;;N;;;;; +C27B;HANGUL SYLLABLE SWILH;Lo;0;L;;;;;N;;;;; +C27C;HANGUL SYLLABLE SWIM;Lo;0;L;;;;;N;;;;; +C27D;HANGUL SYLLABLE SWIB;Lo;0;L;;;;;N;;;;; +C27E;HANGUL SYLLABLE SWIBS;Lo;0;L;;;;;N;;;;; +C27F;HANGUL SYLLABLE SWIS;Lo;0;L;;;;;N;;;;; +C280;HANGUL SYLLABLE SWISS;Lo;0;L;;;;;N;;;;; +C281;HANGUL SYLLABLE SWING;Lo;0;L;;;;;N;;;;; +C282;HANGUL SYLLABLE SWIJ;Lo;0;L;;;;;N;;;;; +C283;HANGUL SYLLABLE SWIC;Lo;0;L;;;;;N;;;;; +C284;HANGUL SYLLABLE SWIK;Lo;0;L;;;;;N;;;;; +C285;HANGUL SYLLABLE SWIT;Lo;0;L;;;;;N;;;;; +C286;HANGUL SYLLABLE SWIP;Lo;0;L;;;;;N;;;;; +C287;HANGUL SYLLABLE SWIH;Lo;0;L;;;;;N;;;;; +C288;HANGUL SYLLABLE SYU;Lo;0;L;;;;;N;;;;; +C289;HANGUL SYLLABLE SYUG;Lo;0;L;;;;;N;;;;; +C28A;HANGUL SYLLABLE SYUGG;Lo;0;L;;;;;N;;;;; +C28B;HANGUL SYLLABLE SYUGS;Lo;0;L;;;;;N;;;;; +C28C;HANGUL SYLLABLE SYUN;Lo;0;L;;;;;N;;;;; +C28D;HANGUL SYLLABLE SYUNI;Lo;0;L;;;;;N;;;;; +C28E;HANGUL SYLLABLE SYUNH;Lo;0;L;;;;;N;;;;; +C28F;HANGUL SYLLABLE SYUD;Lo;0;L;;;;;N;;;;; +C290;HANGUL SYLLABLE SYUL;Lo;0;L;;;;;N;;;;; +C291;HANGUL SYLLABLE SYULG;Lo;0;L;;;;;N;;;;; +C292;HANGUL SYLLABLE SYULM;Lo;0;L;;;;;N;;;;; +C293;HANGUL SYLLABLE SYULB;Lo;0;L;;;;;N;;;;; +C294;HANGUL SYLLABLE SYULS;Lo;0;L;;;;;N;;;;; +C295;HANGUL SYLLABLE SYULT;Lo;0;L;;;;;N;;;;; +C296;HANGUL SYLLABLE SYULP;Lo;0;L;;;;;N;;;;; +C297;HANGUL SYLLABLE SYULH;Lo;0;L;;;;;N;;;;; +C298;HANGUL SYLLABLE SYUM;Lo;0;L;;;;;N;;;;; +C299;HANGUL SYLLABLE SYUB;Lo;0;L;;;;;N;;;;; +C29A;HANGUL SYLLABLE SYUBS;Lo;0;L;;;;;N;;;;; +C29B;HANGUL SYLLABLE SYUS;Lo;0;L;;;;;N;;;;; +C29C;HANGUL SYLLABLE SYUSS;Lo;0;L;;;;;N;;;;; +C29D;HANGUL SYLLABLE SYUNG;Lo;0;L;;;;;N;;;;; +C29E;HANGUL SYLLABLE SYUJ;Lo;0;L;;;;;N;;;;; +C29F;HANGUL SYLLABLE SYUC;Lo;0;L;;;;;N;;;;; +C2A0;HANGUL SYLLABLE SYUK;Lo;0;L;;;;;N;;;;; +C2A1;HANGUL SYLLABLE SYUT;Lo;0;L;;;;;N;;;;; +C2A2;HANGUL SYLLABLE SYUP;Lo;0;L;;;;;N;;;;; +C2A3;HANGUL SYLLABLE SYUH;Lo;0;L;;;;;N;;;;; +C2A4;HANGUL SYLLABLE SEU;Lo;0;L;;;;;N;;;;; +C2A5;HANGUL SYLLABLE SEUG;Lo;0;L;;;;;N;;;;; +C2A6;HANGUL SYLLABLE SEUGG;Lo;0;L;;;;;N;;;;; +C2A7;HANGUL SYLLABLE SEUGS;Lo;0;L;;;;;N;;;;; +C2A8;HANGUL SYLLABLE SEUN;Lo;0;L;;;;;N;;;;; +C2A9;HANGUL SYLLABLE SEUNI;Lo;0;L;;;;;N;;;;; +C2AA;HANGUL SYLLABLE SEUNH;Lo;0;L;;;;;N;;;;; +C2AB;HANGUL SYLLABLE SEUD;Lo;0;L;;;;;N;;;;; +C2AC;HANGUL SYLLABLE SEUL;Lo;0;L;;;;;N;;;;; +C2AD;HANGUL SYLLABLE SEULG;Lo;0;L;;;;;N;;;;; +C2AE;HANGUL SYLLABLE SEULM;Lo;0;L;;;;;N;;;;; +C2AF;HANGUL SYLLABLE SEULB;Lo;0;L;;;;;N;;;;; +C2B0;HANGUL SYLLABLE SEULS;Lo;0;L;;;;;N;;;;; +C2B1;HANGUL SYLLABLE SEULT;Lo;0;L;;;;;N;;;;; +C2B2;HANGUL SYLLABLE SEULP;Lo;0;L;;;;;N;;;;; +C2B3;HANGUL SYLLABLE SEULH;Lo;0;L;;;;;N;;;;; +C2B4;HANGUL SYLLABLE SEUM;Lo;0;L;;;;;N;;;;; +C2B5;HANGUL SYLLABLE SEUB;Lo;0;L;;;;;N;;;;; +C2B6;HANGUL SYLLABLE SEUBS;Lo;0;L;;;;;N;;;;; +C2B7;HANGUL SYLLABLE SEUS;Lo;0;L;;;;;N;;;;; +C2B8;HANGUL SYLLABLE SEUSS;Lo;0;L;;;;;N;;;;; +C2B9;HANGUL SYLLABLE SEUNG;Lo;0;L;;;;;N;;;;; +C2BA;HANGUL SYLLABLE SEUJ;Lo;0;L;;;;;N;;;;; +C2BB;HANGUL SYLLABLE SEUC;Lo;0;L;;;;;N;;;;; +C2BC;HANGUL SYLLABLE SEUK;Lo;0;L;;;;;N;;;;; +C2BD;HANGUL SYLLABLE SEUT;Lo;0;L;;;;;N;;;;; +C2BE;HANGUL SYLLABLE SEUP;Lo;0;L;;;;;N;;;;; +C2BF;HANGUL SYLLABLE SEUH;Lo;0;L;;;;;N;;;;; +C2C0;HANGUL SYLLABLE SYI;Lo;0;L;;;;;N;;;;; +C2C1;HANGUL SYLLABLE SYIG;Lo;0;L;;;;;N;;;;; +C2C2;HANGUL SYLLABLE SYIGG;Lo;0;L;;;;;N;;;;; +C2C3;HANGUL SYLLABLE SYIGS;Lo;0;L;;;;;N;;;;; +C2C4;HANGUL SYLLABLE SYIN;Lo;0;L;;;;;N;;;;; +C2C5;HANGUL SYLLABLE SYINI;Lo;0;L;;;;;N;;;;; +C2C6;HANGUL SYLLABLE SYINH;Lo;0;L;;;;;N;;;;; +C2C7;HANGUL SYLLABLE SYID;Lo;0;L;;;;;N;;;;; +C2C8;HANGUL SYLLABLE SYIL;Lo;0;L;;;;;N;;;;; +C2C9;HANGUL SYLLABLE SYILG;Lo;0;L;;;;;N;;;;; +C2CA;HANGUL SYLLABLE SYILM;Lo;0;L;;;;;N;;;;; +C2CB;HANGUL SYLLABLE SYILB;Lo;0;L;;;;;N;;;;; +C2CC;HANGUL SYLLABLE SYILS;Lo;0;L;;;;;N;;;;; +C2CD;HANGUL SYLLABLE SYILT;Lo;0;L;;;;;N;;;;; +C2CE;HANGUL SYLLABLE SYILP;Lo;0;L;;;;;N;;;;; +C2CF;HANGUL SYLLABLE SYILH;Lo;0;L;;;;;N;;;;; +C2D0;HANGUL SYLLABLE SYIM;Lo;0;L;;;;;N;;;;; +C2D1;HANGUL SYLLABLE SYIB;Lo;0;L;;;;;N;;;;; +C2D2;HANGUL SYLLABLE SYIBS;Lo;0;L;;;;;N;;;;; +C2D3;HANGUL SYLLABLE SYIS;Lo;0;L;;;;;N;;;;; +C2D4;HANGUL SYLLABLE SYISS;Lo;0;L;;;;;N;;;;; +C2D5;HANGUL SYLLABLE SYING;Lo;0;L;;;;;N;;;;; +C2D6;HANGUL SYLLABLE SYIJ;Lo;0;L;;;;;N;;;;; +C2D7;HANGUL SYLLABLE SYIC;Lo;0;L;;;;;N;;;;; +C2D8;HANGUL SYLLABLE SYIK;Lo;0;L;;;;;N;;;;; +C2D9;HANGUL SYLLABLE SYIT;Lo;0;L;;;;;N;;;;; +C2DA;HANGUL SYLLABLE SYIP;Lo;0;L;;;;;N;;;;; +C2DB;HANGUL SYLLABLE SYIH;Lo;0;L;;;;;N;;;;; +C2DC;HANGUL SYLLABLE SI;Lo;0;L;;;;;N;;;;; +C2DD;HANGUL SYLLABLE SIG;Lo;0;L;;;;;N;;;;; +C2DE;HANGUL SYLLABLE SIGG;Lo;0;L;;;;;N;;;;; +C2DF;HANGUL SYLLABLE SIGS;Lo;0;L;;;;;N;;;;; +C2E0;HANGUL SYLLABLE SIN;Lo;0;L;;;;;N;;;;; +C2E1;HANGUL SYLLABLE SINI;Lo;0;L;;;;;N;;;;; +C2E2;HANGUL SYLLABLE SINH;Lo;0;L;;;;;N;;;;; +C2E3;HANGUL SYLLABLE SID;Lo;0;L;;;;;N;;;;; +C2E4;HANGUL SYLLABLE SIL;Lo;0;L;;;;;N;;;;; +C2E5;HANGUL SYLLABLE SILG;Lo;0;L;;;;;N;;;;; +C2E6;HANGUL SYLLABLE SILM;Lo;0;L;;;;;N;;;;; +C2E7;HANGUL SYLLABLE SILB;Lo;0;L;;;;;N;;;;; +C2E8;HANGUL SYLLABLE SILS;Lo;0;L;;;;;N;;;;; +C2E9;HANGUL SYLLABLE SILT;Lo;0;L;;;;;N;;;;; +C2EA;HANGUL SYLLABLE SILP;Lo;0;L;;;;;N;;;;; +C2EB;HANGUL SYLLABLE SILH;Lo;0;L;;;;;N;;;;; +C2EC;HANGUL SYLLABLE SIM;Lo;0;L;;;;;N;;;;; +C2ED;HANGUL SYLLABLE SIB;Lo;0;L;;;;;N;;;;; +C2EE;HANGUL SYLLABLE SIBS;Lo;0;L;;;;;N;;;;; +C2EF;HANGUL SYLLABLE SIS;Lo;0;L;;;;;N;;;;; +C2F0;HANGUL SYLLABLE SISS;Lo;0;L;;;;;N;;;;; +C2F1;HANGUL SYLLABLE SING;Lo;0;L;;;;;N;;;;; +C2F2;HANGUL SYLLABLE SIJ;Lo;0;L;;;;;N;;;;; +C2F3;HANGUL SYLLABLE SIC;Lo;0;L;;;;;N;;;;; +C2F4;HANGUL SYLLABLE SIK;Lo;0;L;;;;;N;;;;; +C2F5;HANGUL SYLLABLE SIT;Lo;0;L;;;;;N;;;;; +C2F6;HANGUL SYLLABLE SIP;Lo;0;L;;;;;N;;;;; +C2F7;HANGUL SYLLABLE SIH;Lo;0;L;;;;;N;;;;; +C2F8;HANGUL SYLLABLE SSA;Lo;0;L;;;;;N;;;;; +C2F9;HANGUL SYLLABLE SSAG;Lo;0;L;;;;;N;;;;; +C2FA;HANGUL SYLLABLE SSAGG;Lo;0;L;;;;;N;;;;; +C2FB;HANGUL SYLLABLE SSAGS;Lo;0;L;;;;;N;;;;; +C2FC;HANGUL SYLLABLE SSAN;Lo;0;L;;;;;N;;;;; +C2FD;HANGUL SYLLABLE SSANI;Lo;0;L;;;;;N;;;;; +C2FE;HANGUL SYLLABLE SSANH;Lo;0;L;;;;;N;;;;; +C2FF;HANGUL SYLLABLE SSAD;Lo;0;L;;;;;N;;;;; +C300;HANGUL SYLLABLE SSAL;Lo;0;L;;;;;N;;;;; +C301;HANGUL SYLLABLE SSALG;Lo;0;L;;;;;N;;;;; +C302;HANGUL SYLLABLE SSALM;Lo;0;L;;;;;N;;;;; +C303;HANGUL SYLLABLE SSALB;Lo;0;L;;;;;N;;;;; +C304;HANGUL SYLLABLE SSALS;Lo;0;L;;;;;N;;;;; +C305;HANGUL SYLLABLE SSALT;Lo;0;L;;;;;N;;;;; +C306;HANGUL SYLLABLE SSALP;Lo;0;L;;;;;N;;;;; +C307;HANGUL SYLLABLE SSALH;Lo;0;L;;;;;N;;;;; +C308;HANGUL SYLLABLE SSAM;Lo;0;L;;;;;N;;;;; +C309;HANGUL SYLLABLE SSAB;Lo;0;L;;;;;N;;;;; +C30A;HANGUL SYLLABLE SSABS;Lo;0;L;;;;;N;;;;; +C30B;HANGUL SYLLABLE SSAS;Lo;0;L;;;;;N;;;;; +C30C;HANGUL SYLLABLE SSASS;Lo;0;L;;;;;N;;;;; +C30D;HANGUL SYLLABLE SSANG;Lo;0;L;;;;;N;;;;; +C30E;HANGUL SYLLABLE SSAJ;Lo;0;L;;;;;N;;;;; +C30F;HANGUL SYLLABLE SSAC;Lo;0;L;;;;;N;;;;; +C310;HANGUL SYLLABLE SSAK;Lo;0;L;;;;;N;;;;; +C311;HANGUL SYLLABLE SSAT;Lo;0;L;;;;;N;;;;; +C312;HANGUL SYLLABLE SSAP;Lo;0;L;;;;;N;;;;; +C313;HANGUL SYLLABLE SSAH;Lo;0;L;;;;;N;;;;; +C314;HANGUL SYLLABLE SSAE;Lo;0;L;;;;;N;;;;; +C315;HANGUL SYLLABLE SSAEG;Lo;0;L;;;;;N;;;;; +C316;HANGUL SYLLABLE SSAEGG;Lo;0;L;;;;;N;;;;; +C317;HANGUL SYLLABLE SSAEGS;Lo;0;L;;;;;N;;;;; +C318;HANGUL SYLLABLE SSAEN;Lo;0;L;;;;;N;;;;; +C319;HANGUL SYLLABLE SSAENI;Lo;0;L;;;;;N;;;;; +C31A;HANGUL SYLLABLE SSAENH;Lo;0;L;;;;;N;;;;; +C31B;HANGUL SYLLABLE SSAED;Lo;0;L;;;;;N;;;;; +C31C;HANGUL SYLLABLE SSAEL;Lo;0;L;;;;;N;;;;; +C31D;HANGUL SYLLABLE SSAELG;Lo;0;L;;;;;N;;;;; +C31E;HANGUL SYLLABLE SSAELM;Lo;0;L;;;;;N;;;;; +C31F;HANGUL SYLLABLE SSAELB;Lo;0;L;;;;;N;;;;; +C320;HANGUL SYLLABLE SSAELS;Lo;0;L;;;;;N;;;;; +C321;HANGUL SYLLABLE SSAELT;Lo;0;L;;;;;N;;;;; +C322;HANGUL SYLLABLE SSAELP;Lo;0;L;;;;;N;;;;; +C323;HANGUL SYLLABLE SSAELH;Lo;0;L;;;;;N;;;;; +C324;HANGUL SYLLABLE SSAEM;Lo;0;L;;;;;N;;;;; +C325;HANGUL SYLLABLE SSAEB;Lo;0;L;;;;;N;;;;; +C326;HANGUL SYLLABLE SSAEBS;Lo;0;L;;;;;N;;;;; +C327;HANGUL SYLLABLE SSAES;Lo;0;L;;;;;N;;;;; +C328;HANGUL SYLLABLE SSAESS;Lo;0;L;;;;;N;;;;; +C329;HANGUL SYLLABLE SSAENG;Lo;0;L;;;;;N;;;;; +C32A;HANGUL SYLLABLE SSAEJ;Lo;0;L;;;;;N;;;;; +C32B;HANGUL SYLLABLE SSAEC;Lo;0;L;;;;;N;;;;; +C32C;HANGUL SYLLABLE SSAEK;Lo;0;L;;;;;N;;;;; +C32D;HANGUL SYLLABLE SSAET;Lo;0;L;;;;;N;;;;; +C32E;HANGUL SYLLABLE SSAEP;Lo;0;L;;;;;N;;;;; +C32F;HANGUL SYLLABLE SSAEH;Lo;0;L;;;;;N;;;;; +C330;HANGUL SYLLABLE SSYA;Lo;0;L;;;;;N;;;;; +C331;HANGUL SYLLABLE SSYAG;Lo;0;L;;;;;N;;;;; +C332;HANGUL SYLLABLE SSYAGG;Lo;0;L;;;;;N;;;;; +C333;HANGUL SYLLABLE SSYAGS;Lo;0;L;;;;;N;;;;; +C334;HANGUL SYLLABLE SSYAN;Lo;0;L;;;;;N;;;;; +C335;HANGUL SYLLABLE SSYANI;Lo;0;L;;;;;N;;;;; +C336;HANGUL SYLLABLE SSYANH;Lo;0;L;;;;;N;;;;; +C337;HANGUL SYLLABLE SSYAD;Lo;0;L;;;;;N;;;;; +C338;HANGUL SYLLABLE SSYAL;Lo;0;L;;;;;N;;;;; +C339;HANGUL SYLLABLE SSYALG;Lo;0;L;;;;;N;;;;; +C33A;HANGUL SYLLABLE SSYALM;Lo;0;L;;;;;N;;;;; +C33B;HANGUL SYLLABLE SSYALB;Lo;0;L;;;;;N;;;;; +C33C;HANGUL SYLLABLE SSYALS;Lo;0;L;;;;;N;;;;; +C33D;HANGUL SYLLABLE SSYALT;Lo;0;L;;;;;N;;;;; +C33E;HANGUL SYLLABLE SSYALP;Lo;0;L;;;;;N;;;;; +C33F;HANGUL SYLLABLE SSYALH;Lo;0;L;;;;;N;;;;; +C340;HANGUL SYLLABLE SSYAM;Lo;0;L;;;;;N;;;;; +C341;HANGUL SYLLABLE SSYAB;Lo;0;L;;;;;N;;;;; +C342;HANGUL SYLLABLE SSYABS;Lo;0;L;;;;;N;;;;; +C343;HANGUL SYLLABLE SSYAS;Lo;0;L;;;;;N;;;;; +C344;HANGUL SYLLABLE SSYASS;Lo;0;L;;;;;N;;;;; +C345;HANGUL SYLLABLE SSYANG;Lo;0;L;;;;;N;;;;; +C346;HANGUL SYLLABLE SSYAJ;Lo;0;L;;;;;N;;;;; +C347;HANGUL SYLLABLE SSYAC;Lo;0;L;;;;;N;;;;; +C348;HANGUL SYLLABLE SSYAK;Lo;0;L;;;;;N;;;;; +C349;HANGUL SYLLABLE SSYAT;Lo;0;L;;;;;N;;;;; +C34A;HANGUL SYLLABLE SSYAP;Lo;0;L;;;;;N;;;;; +C34B;HANGUL SYLLABLE SSYAH;Lo;0;L;;;;;N;;;;; +C34C;HANGUL SYLLABLE SSYAE;Lo;0;L;;;;;N;;;;; +C34D;HANGUL SYLLABLE SSYAEG;Lo;0;L;;;;;N;;;;; +C34E;HANGUL SYLLABLE SSYAEGG;Lo;0;L;;;;;N;;;;; +C34F;HANGUL SYLLABLE SSYAEGS;Lo;0;L;;;;;N;;;;; +C350;HANGUL SYLLABLE SSYAEN;Lo;0;L;;;;;N;;;;; +C351;HANGUL SYLLABLE SSYAENI;Lo;0;L;;;;;N;;;;; +C352;HANGUL SYLLABLE SSYAENH;Lo;0;L;;;;;N;;;;; +C353;HANGUL SYLLABLE SSYAED;Lo;0;L;;;;;N;;;;; +C354;HANGUL SYLLABLE SSYAEL;Lo;0;L;;;;;N;;;;; +C355;HANGUL SYLLABLE SSYAELG;Lo;0;L;;;;;N;;;;; +C356;HANGUL SYLLABLE SSYAELM;Lo;0;L;;;;;N;;;;; +C357;HANGUL SYLLABLE SSYAELB;Lo;0;L;;;;;N;;;;; +C358;HANGUL SYLLABLE SSYAELS;Lo;0;L;;;;;N;;;;; +C359;HANGUL SYLLABLE SSYAELT;Lo;0;L;;;;;N;;;;; +C35A;HANGUL SYLLABLE SSYAELP;Lo;0;L;;;;;N;;;;; +C35B;HANGUL SYLLABLE SSYAELH;Lo;0;L;;;;;N;;;;; +C35C;HANGUL SYLLABLE SSYAEM;Lo;0;L;;;;;N;;;;; +C35D;HANGUL SYLLABLE SSYAEB;Lo;0;L;;;;;N;;;;; +C35E;HANGUL SYLLABLE SSYAEBS;Lo;0;L;;;;;N;;;;; +C35F;HANGUL SYLLABLE SSYAES;Lo;0;L;;;;;N;;;;; +C360;HANGUL SYLLABLE SSYAESS;Lo;0;L;;;;;N;;;;; +C361;HANGUL SYLLABLE SSYAENG;Lo;0;L;;;;;N;;;;; +C362;HANGUL SYLLABLE SSYAEJ;Lo;0;L;;;;;N;;;;; +C363;HANGUL SYLLABLE SSYAEC;Lo;0;L;;;;;N;;;;; +C364;HANGUL SYLLABLE SSYAEK;Lo;0;L;;;;;N;;;;; +C365;HANGUL SYLLABLE SSYAET;Lo;0;L;;;;;N;;;;; +C366;HANGUL SYLLABLE SSYAEP;Lo;0;L;;;;;N;;;;; +C367;HANGUL SYLLABLE SSYAEH;Lo;0;L;;;;;N;;;;; +C368;HANGUL SYLLABLE SSEO;Lo;0;L;;;;;N;;;;; +C369;HANGUL SYLLABLE SSEOG;Lo;0;L;;;;;N;;;;; +C36A;HANGUL SYLLABLE SSEOGG;Lo;0;L;;;;;N;;;;; +C36B;HANGUL SYLLABLE SSEOGS;Lo;0;L;;;;;N;;;;; +C36C;HANGUL SYLLABLE SSEON;Lo;0;L;;;;;N;;;;; +C36D;HANGUL SYLLABLE SSEONI;Lo;0;L;;;;;N;;;;; +C36E;HANGUL SYLLABLE SSEONH;Lo;0;L;;;;;N;;;;; +C36F;HANGUL SYLLABLE SSEOD;Lo;0;L;;;;;N;;;;; +C370;HANGUL SYLLABLE SSEOL;Lo;0;L;;;;;N;;;;; +C371;HANGUL SYLLABLE SSEOLG;Lo;0;L;;;;;N;;;;; +C372;HANGUL SYLLABLE SSEOLM;Lo;0;L;;;;;N;;;;; +C373;HANGUL SYLLABLE SSEOLB;Lo;0;L;;;;;N;;;;; +C374;HANGUL SYLLABLE SSEOLS;Lo;0;L;;;;;N;;;;; +C375;HANGUL SYLLABLE SSEOLT;Lo;0;L;;;;;N;;;;; +C376;HANGUL SYLLABLE SSEOLP;Lo;0;L;;;;;N;;;;; +C377;HANGUL SYLLABLE SSEOLH;Lo;0;L;;;;;N;;;;; +C378;HANGUL SYLLABLE SSEOM;Lo;0;L;;;;;N;;;;; +C379;HANGUL SYLLABLE SSEOB;Lo;0;L;;;;;N;;;;; +C37A;HANGUL SYLLABLE SSEOBS;Lo;0;L;;;;;N;;;;; +C37B;HANGUL SYLLABLE SSEOS;Lo;0;L;;;;;N;;;;; +C37C;HANGUL SYLLABLE SSEOSS;Lo;0;L;;;;;N;;;;; +C37D;HANGUL SYLLABLE SSEONG;Lo;0;L;;;;;N;;;;; +C37E;HANGUL SYLLABLE SSEOJ;Lo;0;L;;;;;N;;;;; +C37F;HANGUL SYLLABLE SSEOC;Lo;0;L;;;;;N;;;;; +C380;HANGUL SYLLABLE SSEOK;Lo;0;L;;;;;N;;;;; +C381;HANGUL SYLLABLE SSEOT;Lo;0;L;;;;;N;;;;; +C382;HANGUL SYLLABLE SSEOP;Lo;0;L;;;;;N;;;;; +C383;HANGUL SYLLABLE SSEOH;Lo;0;L;;;;;N;;;;; +C384;HANGUL SYLLABLE SSE;Lo;0;L;;;;;N;;;;; +C385;HANGUL SYLLABLE SSEG;Lo;0;L;;;;;N;;;;; +C386;HANGUL SYLLABLE SSEGG;Lo;0;L;;;;;N;;;;; +C387;HANGUL SYLLABLE SSEGS;Lo;0;L;;;;;N;;;;; +C388;HANGUL SYLLABLE SSEN;Lo;0;L;;;;;N;;;;; +C389;HANGUL SYLLABLE SSENI;Lo;0;L;;;;;N;;;;; +C38A;HANGUL SYLLABLE SSENH;Lo;0;L;;;;;N;;;;; +C38B;HANGUL SYLLABLE SSED;Lo;0;L;;;;;N;;;;; +C38C;HANGUL SYLLABLE SSEL;Lo;0;L;;;;;N;;;;; +C38D;HANGUL SYLLABLE SSELG;Lo;0;L;;;;;N;;;;; +C38E;HANGUL SYLLABLE SSELM;Lo;0;L;;;;;N;;;;; +C38F;HANGUL SYLLABLE SSELB;Lo;0;L;;;;;N;;;;; +C390;HANGUL SYLLABLE SSELS;Lo;0;L;;;;;N;;;;; +C391;HANGUL SYLLABLE SSELT;Lo;0;L;;;;;N;;;;; +C392;HANGUL SYLLABLE SSELP;Lo;0;L;;;;;N;;;;; +C393;HANGUL SYLLABLE SSELH;Lo;0;L;;;;;N;;;;; +C394;HANGUL SYLLABLE SSEM;Lo;0;L;;;;;N;;;;; +C395;HANGUL SYLLABLE SSEB;Lo;0;L;;;;;N;;;;; +C396;HANGUL SYLLABLE SSEBS;Lo;0;L;;;;;N;;;;; +C397;HANGUL SYLLABLE SSES;Lo;0;L;;;;;N;;;;; +C398;HANGUL SYLLABLE SSESS;Lo;0;L;;;;;N;;;;; +C399;HANGUL SYLLABLE SSENG;Lo;0;L;;;;;N;;;;; +C39A;HANGUL SYLLABLE SSEJ;Lo;0;L;;;;;N;;;;; +C39B;HANGUL SYLLABLE SSEC;Lo;0;L;;;;;N;;;;; +C39C;HANGUL SYLLABLE SSEK;Lo;0;L;;;;;N;;;;; +C39D;HANGUL SYLLABLE SSET;Lo;0;L;;;;;N;;;;; +C39E;HANGUL SYLLABLE SSEP;Lo;0;L;;;;;N;;;;; +C39F;HANGUL SYLLABLE SSEH;Lo;0;L;;;;;N;;;;; +C3A0;HANGUL SYLLABLE SSYEO;Lo;0;L;;;;;N;;;;; +C3A1;HANGUL SYLLABLE SSYEOG;Lo;0;L;;;;;N;;;;; +C3A2;HANGUL SYLLABLE SSYEOGG;Lo;0;L;;;;;N;;;;; +C3A3;HANGUL SYLLABLE SSYEOGS;Lo;0;L;;;;;N;;;;; +C3A4;HANGUL SYLLABLE SSYEON;Lo;0;L;;;;;N;;;;; +C3A5;HANGUL SYLLABLE SSYEONI;Lo;0;L;;;;;N;;;;; +C3A6;HANGUL SYLLABLE SSYEONH;Lo;0;L;;;;;N;;;;; +C3A7;HANGUL SYLLABLE SSYEOD;Lo;0;L;;;;;N;;;;; +C3A8;HANGUL SYLLABLE SSYEOL;Lo;0;L;;;;;N;;;;; +C3A9;HANGUL SYLLABLE SSYEOLG;Lo;0;L;;;;;N;;;;; +C3AA;HANGUL SYLLABLE SSYEOLM;Lo;0;L;;;;;N;;;;; +C3AB;HANGUL SYLLABLE SSYEOLB;Lo;0;L;;;;;N;;;;; +C3AC;HANGUL SYLLABLE SSYEOLS;Lo;0;L;;;;;N;;;;; +C3AD;HANGUL SYLLABLE SSYEOLT;Lo;0;L;;;;;N;;;;; +C3AE;HANGUL SYLLABLE SSYEOLP;Lo;0;L;;;;;N;;;;; +C3AF;HANGUL SYLLABLE SSYEOLH;Lo;0;L;;;;;N;;;;; +C3B0;HANGUL SYLLABLE SSYEOM;Lo;0;L;;;;;N;;;;; +C3B1;HANGUL SYLLABLE SSYEOB;Lo;0;L;;;;;N;;;;; +C3B2;HANGUL SYLLABLE SSYEOBS;Lo;0;L;;;;;N;;;;; +C3B3;HANGUL SYLLABLE SSYEOS;Lo;0;L;;;;;N;;;;; +C3B4;HANGUL SYLLABLE SSYEOSS;Lo;0;L;;;;;N;;;;; +C3B5;HANGUL SYLLABLE SSYEONG;Lo;0;L;;;;;N;;;;; +C3B6;HANGUL SYLLABLE SSYEOJ;Lo;0;L;;;;;N;;;;; +C3B7;HANGUL SYLLABLE SSYEOC;Lo;0;L;;;;;N;;;;; +C3B8;HANGUL SYLLABLE SSYEOK;Lo;0;L;;;;;N;;;;; +C3B9;HANGUL SYLLABLE SSYEOT;Lo;0;L;;;;;N;;;;; +C3BA;HANGUL SYLLABLE SSYEOP;Lo;0;L;;;;;N;;;;; +C3BB;HANGUL SYLLABLE SSYEOH;Lo;0;L;;;;;N;;;;; +C3BC;HANGUL SYLLABLE SSYE;Lo;0;L;;;;;N;;;;; +C3BD;HANGUL SYLLABLE SSYEG;Lo;0;L;;;;;N;;;;; +C3BE;HANGUL SYLLABLE SSYEGG;Lo;0;L;;;;;N;;;;; +C3BF;HANGUL SYLLABLE SSYEGS;Lo;0;L;;;;;N;;;;; +C3C0;HANGUL SYLLABLE SSYEN;Lo;0;L;;;;;N;;;;; +C3C1;HANGUL SYLLABLE SSYENI;Lo;0;L;;;;;N;;;;; +C3C2;HANGUL SYLLABLE SSYENH;Lo;0;L;;;;;N;;;;; +C3C3;HANGUL SYLLABLE SSYED;Lo;0;L;;;;;N;;;;; +C3C4;HANGUL SYLLABLE SSYEL;Lo;0;L;;;;;N;;;;; +C3C5;HANGUL SYLLABLE SSYELG;Lo;0;L;;;;;N;;;;; +C3C6;HANGUL SYLLABLE SSYELM;Lo;0;L;;;;;N;;;;; +C3C7;HANGUL SYLLABLE SSYELB;Lo;0;L;;;;;N;;;;; +C3C8;HANGUL SYLLABLE SSYELS;Lo;0;L;;;;;N;;;;; +C3C9;HANGUL SYLLABLE SSYELT;Lo;0;L;;;;;N;;;;; +C3CA;HANGUL SYLLABLE SSYELP;Lo;0;L;;;;;N;;;;; +C3CB;HANGUL SYLLABLE SSYELH;Lo;0;L;;;;;N;;;;; +C3CC;HANGUL SYLLABLE SSYEM;Lo;0;L;;;;;N;;;;; +C3CD;HANGUL SYLLABLE SSYEB;Lo;0;L;;;;;N;;;;; +C3CE;HANGUL SYLLABLE SSYEBS;Lo;0;L;;;;;N;;;;; +C3CF;HANGUL SYLLABLE SSYES;Lo;0;L;;;;;N;;;;; +C3D0;HANGUL SYLLABLE SSYESS;Lo;0;L;;;;;N;;;;; +C3D1;HANGUL SYLLABLE SSYENG;Lo;0;L;;;;;N;;;;; +C3D2;HANGUL SYLLABLE SSYEJ;Lo;0;L;;;;;N;;;;; +C3D3;HANGUL SYLLABLE SSYEC;Lo;0;L;;;;;N;;;;; +C3D4;HANGUL SYLLABLE SSYEK;Lo;0;L;;;;;N;;;;; +C3D5;HANGUL SYLLABLE SSYET;Lo;0;L;;;;;N;;;;; +C3D6;HANGUL SYLLABLE SSYEP;Lo;0;L;;;;;N;;;;; +C3D7;HANGUL SYLLABLE SSYEH;Lo;0;L;;;;;N;;;;; +C3D8;HANGUL SYLLABLE SSO;Lo;0;L;;;;;N;;;;; +C3D9;HANGUL SYLLABLE SSOG;Lo;0;L;;;;;N;;;;; +C3DA;HANGUL SYLLABLE SSOGG;Lo;0;L;;;;;N;;;;; +C3DB;HANGUL SYLLABLE SSOGS;Lo;0;L;;;;;N;;;;; +C3DC;HANGUL SYLLABLE SSON;Lo;0;L;;;;;N;;;;; +C3DD;HANGUL SYLLABLE SSONI;Lo;0;L;;;;;N;;;;; +C3DE;HANGUL SYLLABLE SSONH;Lo;0;L;;;;;N;;;;; +C3DF;HANGUL SYLLABLE SSOD;Lo;0;L;;;;;N;;;;; +C3E0;HANGUL SYLLABLE SSOL;Lo;0;L;;;;;N;;;;; +C3E1;HANGUL SYLLABLE SSOLG;Lo;0;L;;;;;N;;;;; +C3E2;HANGUL SYLLABLE SSOLM;Lo;0;L;;;;;N;;;;; +C3E3;HANGUL SYLLABLE SSOLB;Lo;0;L;;;;;N;;;;; +C3E4;HANGUL SYLLABLE SSOLS;Lo;0;L;;;;;N;;;;; +C3E5;HANGUL SYLLABLE SSOLT;Lo;0;L;;;;;N;;;;; +C3E6;HANGUL SYLLABLE SSOLP;Lo;0;L;;;;;N;;;;; +C3E7;HANGUL SYLLABLE SSOLH;Lo;0;L;;;;;N;;;;; +C3E8;HANGUL SYLLABLE SSOM;Lo;0;L;;;;;N;;;;; +C3E9;HANGUL SYLLABLE SSOB;Lo;0;L;;;;;N;;;;; +C3EA;HANGUL SYLLABLE SSOBS;Lo;0;L;;;;;N;;;;; +C3EB;HANGUL SYLLABLE SSOS;Lo;0;L;;;;;N;;;;; +C3EC;HANGUL SYLLABLE SSOSS;Lo;0;L;;;;;N;;;;; +C3ED;HANGUL SYLLABLE SSONG;Lo;0;L;;;;;N;;;;; +C3EE;HANGUL SYLLABLE SSOJ;Lo;0;L;;;;;N;;;;; +C3EF;HANGUL SYLLABLE SSOC;Lo;0;L;;;;;N;;;;; +C3F0;HANGUL SYLLABLE SSOK;Lo;0;L;;;;;N;;;;; +C3F1;HANGUL SYLLABLE SSOT;Lo;0;L;;;;;N;;;;; +C3F2;HANGUL SYLLABLE SSOP;Lo;0;L;;;;;N;;;;; +C3F3;HANGUL SYLLABLE SSOH;Lo;0;L;;;;;N;;;;; +C3F4;HANGUL SYLLABLE SSWA;Lo;0;L;;;;;N;;;;; +C3F5;HANGUL SYLLABLE SSWAG;Lo;0;L;;;;;N;;;;; +C3F6;HANGUL SYLLABLE SSWAGG;Lo;0;L;;;;;N;;;;; +C3F7;HANGUL SYLLABLE SSWAGS;Lo;0;L;;;;;N;;;;; +C3F8;HANGUL SYLLABLE SSWAN;Lo;0;L;;;;;N;;;;; +C3F9;HANGUL SYLLABLE SSWANI;Lo;0;L;;;;;N;;;;; +C3FA;HANGUL SYLLABLE SSWANH;Lo;0;L;;;;;N;;;;; +C3FB;HANGUL SYLLABLE SSWAD;Lo;0;L;;;;;N;;;;; +C3FC;HANGUL SYLLABLE SSWAL;Lo;0;L;;;;;N;;;;; +C3FD;HANGUL SYLLABLE SSWALG;Lo;0;L;;;;;N;;;;; +C3FE;HANGUL SYLLABLE SSWALM;Lo;0;L;;;;;N;;;;; +C3FF;HANGUL SYLLABLE SSWALB;Lo;0;L;;;;;N;;;;; +C400;HANGUL SYLLABLE SSWALS;Lo;0;L;;;;;N;;;;; +C401;HANGUL SYLLABLE SSWALT;Lo;0;L;;;;;N;;;;; +C402;HANGUL SYLLABLE SSWALP;Lo;0;L;;;;;N;;;;; +C403;HANGUL SYLLABLE SSWALH;Lo;0;L;;;;;N;;;;; +C404;HANGUL SYLLABLE SSWAM;Lo;0;L;;;;;N;;;;; +C405;HANGUL SYLLABLE SSWAB;Lo;0;L;;;;;N;;;;; +C406;HANGUL SYLLABLE SSWABS;Lo;0;L;;;;;N;;;;; +C407;HANGUL SYLLABLE SSWAS;Lo;0;L;;;;;N;;;;; +C408;HANGUL SYLLABLE SSWASS;Lo;0;L;;;;;N;;;;; +C409;HANGUL SYLLABLE SSWANG;Lo;0;L;;;;;N;;;;; +C40A;HANGUL SYLLABLE SSWAJ;Lo;0;L;;;;;N;;;;; +C40B;HANGUL SYLLABLE SSWAC;Lo;0;L;;;;;N;;;;; +C40C;HANGUL SYLLABLE SSWAK;Lo;0;L;;;;;N;;;;; +C40D;HANGUL SYLLABLE SSWAT;Lo;0;L;;;;;N;;;;; +C40E;HANGUL SYLLABLE SSWAP;Lo;0;L;;;;;N;;;;; +C40F;HANGUL SYLLABLE SSWAH;Lo;0;L;;;;;N;;;;; +C410;HANGUL SYLLABLE SSWAE;Lo;0;L;;;;;N;;;;; +C411;HANGUL SYLLABLE SSWAEG;Lo;0;L;;;;;N;;;;; +C412;HANGUL SYLLABLE SSWAEGG;Lo;0;L;;;;;N;;;;; +C413;HANGUL SYLLABLE SSWAEGS;Lo;0;L;;;;;N;;;;; +C414;HANGUL SYLLABLE SSWAEN;Lo;0;L;;;;;N;;;;; +C415;HANGUL SYLLABLE SSWAENI;Lo;0;L;;;;;N;;;;; +C416;HANGUL SYLLABLE SSWAENH;Lo;0;L;;;;;N;;;;; +C417;HANGUL SYLLABLE SSWAED;Lo;0;L;;;;;N;;;;; +C418;HANGUL SYLLABLE SSWAEL;Lo;0;L;;;;;N;;;;; +C419;HANGUL SYLLABLE SSWAELG;Lo;0;L;;;;;N;;;;; +C41A;HANGUL SYLLABLE SSWAELM;Lo;0;L;;;;;N;;;;; +C41B;HANGUL SYLLABLE SSWAELB;Lo;0;L;;;;;N;;;;; +C41C;HANGUL SYLLABLE SSWAELS;Lo;0;L;;;;;N;;;;; +C41D;HANGUL SYLLABLE SSWAELT;Lo;0;L;;;;;N;;;;; +C41E;HANGUL SYLLABLE SSWAELP;Lo;0;L;;;;;N;;;;; +C41F;HANGUL SYLLABLE SSWAELH;Lo;0;L;;;;;N;;;;; +C420;HANGUL SYLLABLE SSWAEM;Lo;0;L;;;;;N;;;;; +C421;HANGUL SYLLABLE SSWAEB;Lo;0;L;;;;;N;;;;; +C422;HANGUL SYLLABLE SSWAEBS;Lo;0;L;;;;;N;;;;; +C423;HANGUL SYLLABLE SSWAES;Lo;0;L;;;;;N;;;;; +C424;HANGUL SYLLABLE SSWAESS;Lo;0;L;;;;;N;;;;; +C425;HANGUL SYLLABLE SSWAENG;Lo;0;L;;;;;N;;;;; +C426;HANGUL SYLLABLE SSWAEJ;Lo;0;L;;;;;N;;;;; +C427;HANGUL SYLLABLE SSWAEC;Lo;0;L;;;;;N;;;;; +C428;HANGUL SYLLABLE SSWAEK;Lo;0;L;;;;;N;;;;; +C429;HANGUL SYLLABLE SSWAET;Lo;0;L;;;;;N;;;;; +C42A;HANGUL SYLLABLE SSWAEP;Lo;0;L;;;;;N;;;;; +C42B;HANGUL SYLLABLE SSWAEH;Lo;0;L;;;;;N;;;;; +C42C;HANGUL SYLLABLE SSOE;Lo;0;L;;;;;N;;;;; +C42D;HANGUL SYLLABLE SSOEG;Lo;0;L;;;;;N;;;;; +C42E;HANGUL SYLLABLE SSOEGG;Lo;0;L;;;;;N;;;;; +C42F;HANGUL SYLLABLE SSOEGS;Lo;0;L;;;;;N;;;;; +C430;HANGUL SYLLABLE SSOEN;Lo;0;L;;;;;N;;;;; +C431;HANGUL SYLLABLE SSOENI;Lo;0;L;;;;;N;;;;; +C432;HANGUL SYLLABLE SSOENH;Lo;0;L;;;;;N;;;;; +C433;HANGUL SYLLABLE SSOED;Lo;0;L;;;;;N;;;;; +C434;HANGUL SYLLABLE SSOEL;Lo;0;L;;;;;N;;;;; +C435;HANGUL SYLLABLE SSOELG;Lo;0;L;;;;;N;;;;; +C436;HANGUL SYLLABLE SSOELM;Lo;0;L;;;;;N;;;;; +C437;HANGUL SYLLABLE SSOELB;Lo;0;L;;;;;N;;;;; +C438;HANGUL SYLLABLE SSOELS;Lo;0;L;;;;;N;;;;; +C439;HANGUL SYLLABLE SSOELT;Lo;0;L;;;;;N;;;;; +C43A;HANGUL SYLLABLE SSOELP;Lo;0;L;;;;;N;;;;; +C43B;HANGUL SYLLABLE SSOELH;Lo;0;L;;;;;N;;;;; +C43C;HANGUL SYLLABLE SSOEM;Lo;0;L;;;;;N;;;;; +C43D;HANGUL SYLLABLE SSOEB;Lo;0;L;;;;;N;;;;; +C43E;HANGUL SYLLABLE SSOEBS;Lo;0;L;;;;;N;;;;; +C43F;HANGUL SYLLABLE SSOES;Lo;0;L;;;;;N;;;;; +C440;HANGUL SYLLABLE SSOESS;Lo;0;L;;;;;N;;;;; +C441;HANGUL SYLLABLE SSOENG;Lo;0;L;;;;;N;;;;; +C442;HANGUL SYLLABLE SSOEJ;Lo;0;L;;;;;N;;;;; +C443;HANGUL SYLLABLE SSOEC;Lo;0;L;;;;;N;;;;; +C444;HANGUL SYLLABLE SSOEK;Lo;0;L;;;;;N;;;;; +C445;HANGUL SYLLABLE SSOET;Lo;0;L;;;;;N;;;;; +C446;HANGUL SYLLABLE SSOEP;Lo;0;L;;;;;N;;;;; +C447;HANGUL SYLLABLE SSOEH;Lo;0;L;;;;;N;;;;; +C448;HANGUL SYLLABLE SSYO;Lo;0;L;;;;;N;;;;; +C449;HANGUL SYLLABLE SSYOG;Lo;0;L;;;;;N;;;;; +C44A;HANGUL SYLLABLE SSYOGG;Lo;0;L;;;;;N;;;;; +C44B;HANGUL SYLLABLE SSYOGS;Lo;0;L;;;;;N;;;;; +C44C;HANGUL SYLLABLE SSYON;Lo;0;L;;;;;N;;;;; +C44D;HANGUL SYLLABLE SSYONI;Lo;0;L;;;;;N;;;;; +C44E;HANGUL SYLLABLE SSYONH;Lo;0;L;;;;;N;;;;; +C44F;HANGUL SYLLABLE SSYOD;Lo;0;L;;;;;N;;;;; +C450;HANGUL SYLLABLE SSYOL;Lo;0;L;;;;;N;;;;; +C451;HANGUL SYLLABLE SSYOLG;Lo;0;L;;;;;N;;;;; +C452;HANGUL SYLLABLE SSYOLM;Lo;0;L;;;;;N;;;;; +C453;HANGUL SYLLABLE SSYOLB;Lo;0;L;;;;;N;;;;; +C454;HANGUL SYLLABLE SSYOLS;Lo;0;L;;;;;N;;;;; +C455;HANGUL SYLLABLE SSYOLT;Lo;0;L;;;;;N;;;;; +C456;HANGUL SYLLABLE SSYOLP;Lo;0;L;;;;;N;;;;; +C457;HANGUL SYLLABLE SSYOLH;Lo;0;L;;;;;N;;;;; +C458;HANGUL SYLLABLE SSYOM;Lo;0;L;;;;;N;;;;; +C459;HANGUL SYLLABLE SSYOB;Lo;0;L;;;;;N;;;;; +C45A;HANGUL SYLLABLE SSYOBS;Lo;0;L;;;;;N;;;;; +C45B;HANGUL SYLLABLE SSYOS;Lo;0;L;;;;;N;;;;; +C45C;HANGUL SYLLABLE SSYOSS;Lo;0;L;;;;;N;;;;; +C45D;HANGUL SYLLABLE SSYONG;Lo;0;L;;;;;N;;;;; +C45E;HANGUL SYLLABLE SSYOJ;Lo;0;L;;;;;N;;;;; +C45F;HANGUL SYLLABLE SSYOC;Lo;0;L;;;;;N;;;;; +C460;HANGUL SYLLABLE SSYOK;Lo;0;L;;;;;N;;;;; +C461;HANGUL SYLLABLE SSYOT;Lo;0;L;;;;;N;;;;; +C462;HANGUL SYLLABLE SSYOP;Lo;0;L;;;;;N;;;;; +C463;HANGUL SYLLABLE SSYOH;Lo;0;L;;;;;N;;;;; +C464;HANGUL SYLLABLE SSU;Lo;0;L;;;;;N;;;;; +C465;HANGUL SYLLABLE SSUG;Lo;0;L;;;;;N;;;;; +C466;HANGUL SYLLABLE SSUGG;Lo;0;L;;;;;N;;;;; +C467;HANGUL SYLLABLE SSUGS;Lo;0;L;;;;;N;;;;; +C468;HANGUL SYLLABLE SSUN;Lo;0;L;;;;;N;;;;; +C469;HANGUL SYLLABLE SSUNI;Lo;0;L;;;;;N;;;;; +C46A;HANGUL SYLLABLE SSUNH;Lo;0;L;;;;;N;;;;; +C46B;HANGUL SYLLABLE SSUD;Lo;0;L;;;;;N;;;;; +C46C;HANGUL SYLLABLE SSUL;Lo;0;L;;;;;N;;;;; +C46D;HANGUL SYLLABLE SSULG;Lo;0;L;;;;;N;;;;; +C46E;HANGUL SYLLABLE SSULM;Lo;0;L;;;;;N;;;;; +C46F;HANGUL SYLLABLE SSULB;Lo;0;L;;;;;N;;;;; +C470;HANGUL SYLLABLE SSULS;Lo;0;L;;;;;N;;;;; +C471;HANGUL SYLLABLE SSULT;Lo;0;L;;;;;N;;;;; +C472;HANGUL SYLLABLE SSULP;Lo;0;L;;;;;N;;;;; +C473;HANGUL SYLLABLE SSULH;Lo;0;L;;;;;N;;;;; +C474;HANGUL SYLLABLE SSUM;Lo;0;L;;;;;N;;;;; +C475;HANGUL SYLLABLE SSUB;Lo;0;L;;;;;N;;;;; +C476;HANGUL SYLLABLE SSUBS;Lo;0;L;;;;;N;;;;; +C477;HANGUL SYLLABLE SSUS;Lo;0;L;;;;;N;;;;; +C478;HANGUL SYLLABLE SSUSS;Lo;0;L;;;;;N;;;;; +C479;HANGUL SYLLABLE SSUNG;Lo;0;L;;;;;N;;;;; +C47A;HANGUL SYLLABLE SSUJ;Lo;0;L;;;;;N;;;;; +C47B;HANGUL SYLLABLE SSUC;Lo;0;L;;;;;N;;;;; +C47C;HANGUL SYLLABLE SSUK;Lo;0;L;;;;;N;;;;; +C47D;HANGUL SYLLABLE SSUT;Lo;0;L;;;;;N;;;;; +C47E;HANGUL SYLLABLE SSUP;Lo;0;L;;;;;N;;;;; +C47F;HANGUL SYLLABLE SSUH;Lo;0;L;;;;;N;;;;; +C480;HANGUL SYLLABLE SSWEO;Lo;0;L;;;;;N;;;;; +C481;HANGUL SYLLABLE SSWEOG;Lo;0;L;;;;;N;;;;; +C482;HANGUL SYLLABLE SSWEOGG;Lo;0;L;;;;;N;;;;; +C483;HANGUL SYLLABLE SSWEOGS;Lo;0;L;;;;;N;;;;; +C484;HANGUL SYLLABLE SSWEON;Lo;0;L;;;;;N;;;;; +C485;HANGUL SYLLABLE SSWEONI;Lo;0;L;;;;;N;;;;; +C486;HANGUL SYLLABLE SSWEONH;Lo;0;L;;;;;N;;;;; +C487;HANGUL SYLLABLE SSWEOD;Lo;0;L;;;;;N;;;;; +C488;HANGUL SYLLABLE SSWEOL;Lo;0;L;;;;;N;;;;; +C489;HANGUL SYLLABLE SSWEOLG;Lo;0;L;;;;;N;;;;; +C48A;HANGUL SYLLABLE SSWEOLM;Lo;0;L;;;;;N;;;;; +C48B;HANGUL SYLLABLE SSWEOLB;Lo;0;L;;;;;N;;;;; +C48C;HANGUL SYLLABLE SSWEOLS;Lo;0;L;;;;;N;;;;; +C48D;HANGUL SYLLABLE SSWEOLT;Lo;0;L;;;;;N;;;;; +C48E;HANGUL SYLLABLE SSWEOLP;Lo;0;L;;;;;N;;;;; +C48F;HANGUL SYLLABLE SSWEOLH;Lo;0;L;;;;;N;;;;; +C490;HANGUL SYLLABLE SSWEOM;Lo;0;L;;;;;N;;;;; +C491;HANGUL SYLLABLE SSWEOB;Lo;0;L;;;;;N;;;;; +C492;HANGUL SYLLABLE SSWEOBS;Lo;0;L;;;;;N;;;;; +C493;HANGUL SYLLABLE SSWEOS;Lo;0;L;;;;;N;;;;; +C494;HANGUL SYLLABLE SSWEOSS;Lo;0;L;;;;;N;;;;; +C495;HANGUL SYLLABLE SSWEONG;Lo;0;L;;;;;N;;;;; +C496;HANGUL SYLLABLE SSWEOJ;Lo;0;L;;;;;N;;;;; +C497;HANGUL SYLLABLE SSWEOC;Lo;0;L;;;;;N;;;;; +C498;HANGUL SYLLABLE SSWEOK;Lo;0;L;;;;;N;;;;; +C499;HANGUL SYLLABLE SSWEOT;Lo;0;L;;;;;N;;;;; +C49A;HANGUL SYLLABLE SSWEOP;Lo;0;L;;;;;N;;;;; +C49B;HANGUL SYLLABLE SSWEOH;Lo;0;L;;;;;N;;;;; +C49C;HANGUL SYLLABLE SSWE;Lo;0;L;;;;;N;;;;; +C49D;HANGUL SYLLABLE SSWEG;Lo;0;L;;;;;N;;;;; +C49E;HANGUL SYLLABLE SSWEGG;Lo;0;L;;;;;N;;;;; +C49F;HANGUL SYLLABLE SSWEGS;Lo;0;L;;;;;N;;;;; +C4A0;HANGUL SYLLABLE SSWEN;Lo;0;L;;;;;N;;;;; +C4A1;HANGUL SYLLABLE SSWENI;Lo;0;L;;;;;N;;;;; +C4A2;HANGUL SYLLABLE SSWENH;Lo;0;L;;;;;N;;;;; +C4A3;HANGUL SYLLABLE SSWED;Lo;0;L;;;;;N;;;;; +C4A4;HANGUL SYLLABLE SSWEL;Lo;0;L;;;;;N;;;;; +C4A5;HANGUL SYLLABLE SSWELG;Lo;0;L;;;;;N;;;;; +C4A6;HANGUL SYLLABLE SSWELM;Lo;0;L;;;;;N;;;;; +C4A7;HANGUL SYLLABLE SSWELB;Lo;0;L;;;;;N;;;;; +C4A8;HANGUL SYLLABLE SSWELS;Lo;0;L;;;;;N;;;;; +C4A9;HANGUL SYLLABLE SSWELT;Lo;0;L;;;;;N;;;;; +C4AA;HANGUL SYLLABLE SSWELP;Lo;0;L;;;;;N;;;;; +C4AB;HANGUL SYLLABLE SSWELH;Lo;0;L;;;;;N;;;;; +C4AC;HANGUL SYLLABLE SSWEM;Lo;0;L;;;;;N;;;;; +C4AD;HANGUL SYLLABLE SSWEB;Lo;0;L;;;;;N;;;;; +C4AE;HANGUL SYLLABLE SSWEBS;Lo;0;L;;;;;N;;;;; +C4AF;HANGUL SYLLABLE SSWES;Lo;0;L;;;;;N;;;;; +C4B0;HANGUL SYLLABLE SSWESS;Lo;0;L;;;;;N;;;;; +C4B1;HANGUL SYLLABLE SSWENG;Lo;0;L;;;;;N;;;;; +C4B2;HANGUL SYLLABLE SSWEJ;Lo;0;L;;;;;N;;;;; +C4B3;HANGUL SYLLABLE SSWEC;Lo;0;L;;;;;N;;;;; +C4B4;HANGUL SYLLABLE SSWEK;Lo;0;L;;;;;N;;;;; +C4B5;HANGUL SYLLABLE SSWET;Lo;0;L;;;;;N;;;;; +C4B6;HANGUL SYLLABLE SSWEP;Lo;0;L;;;;;N;;;;; +C4B7;HANGUL SYLLABLE SSWEH;Lo;0;L;;;;;N;;;;; +C4B8;HANGUL SYLLABLE SSWI;Lo;0;L;;;;;N;;;;; +C4B9;HANGUL SYLLABLE SSWIG;Lo;0;L;;;;;N;;;;; +C4BA;HANGUL SYLLABLE SSWIGG;Lo;0;L;;;;;N;;;;; +C4BB;HANGUL SYLLABLE SSWIGS;Lo;0;L;;;;;N;;;;; +C4BC;HANGUL SYLLABLE SSWIN;Lo;0;L;;;;;N;;;;; +C4BD;HANGUL SYLLABLE SSWINI;Lo;0;L;;;;;N;;;;; +C4BE;HANGUL SYLLABLE SSWINH;Lo;0;L;;;;;N;;;;; +C4BF;HANGUL SYLLABLE SSWID;Lo;0;L;;;;;N;;;;; +C4C0;HANGUL SYLLABLE SSWIL;Lo;0;L;;;;;N;;;;; +C4C1;HANGUL SYLLABLE SSWILG;Lo;0;L;;;;;N;;;;; +C4C2;HANGUL SYLLABLE SSWILM;Lo;0;L;;;;;N;;;;; +C4C3;HANGUL SYLLABLE SSWILB;Lo;0;L;;;;;N;;;;; +C4C4;HANGUL SYLLABLE SSWILS;Lo;0;L;;;;;N;;;;; +C4C5;HANGUL SYLLABLE SSWILT;Lo;0;L;;;;;N;;;;; +C4C6;HANGUL SYLLABLE SSWILP;Lo;0;L;;;;;N;;;;; +C4C7;HANGUL SYLLABLE SSWILH;Lo;0;L;;;;;N;;;;; +C4C8;HANGUL SYLLABLE SSWIM;Lo;0;L;;;;;N;;;;; +C4C9;HANGUL SYLLABLE SSWIB;Lo;0;L;;;;;N;;;;; +C4CA;HANGUL SYLLABLE SSWIBS;Lo;0;L;;;;;N;;;;; +C4CB;HANGUL SYLLABLE SSWIS;Lo;0;L;;;;;N;;;;; +C4CC;HANGUL SYLLABLE SSWISS;Lo;0;L;;;;;N;;;;; +C4CD;HANGUL SYLLABLE SSWING;Lo;0;L;;;;;N;;;;; +C4CE;HANGUL SYLLABLE SSWIJ;Lo;0;L;;;;;N;;;;; +C4CF;HANGUL SYLLABLE SSWIC;Lo;0;L;;;;;N;;;;; +C4D0;HANGUL SYLLABLE SSWIK;Lo;0;L;;;;;N;;;;; +C4D1;HANGUL SYLLABLE SSWIT;Lo;0;L;;;;;N;;;;; +C4D2;HANGUL SYLLABLE SSWIP;Lo;0;L;;;;;N;;;;; +C4D3;HANGUL SYLLABLE SSWIH;Lo;0;L;;;;;N;;;;; +C4D4;HANGUL SYLLABLE SSYU;Lo;0;L;;;;;N;;;;; +C4D5;HANGUL SYLLABLE SSYUG;Lo;0;L;;;;;N;;;;; +C4D6;HANGUL SYLLABLE SSYUGG;Lo;0;L;;;;;N;;;;; +C4D7;HANGUL SYLLABLE SSYUGS;Lo;0;L;;;;;N;;;;; +C4D8;HANGUL SYLLABLE SSYUN;Lo;0;L;;;;;N;;;;; +C4D9;HANGUL SYLLABLE SSYUNI;Lo;0;L;;;;;N;;;;; +C4DA;HANGUL SYLLABLE SSYUNH;Lo;0;L;;;;;N;;;;; +C4DB;HANGUL SYLLABLE SSYUD;Lo;0;L;;;;;N;;;;; +C4DC;HANGUL SYLLABLE SSYUL;Lo;0;L;;;;;N;;;;; +C4DD;HANGUL SYLLABLE SSYULG;Lo;0;L;;;;;N;;;;; +C4DE;HANGUL SYLLABLE SSYULM;Lo;0;L;;;;;N;;;;; +C4DF;HANGUL SYLLABLE SSYULB;Lo;0;L;;;;;N;;;;; +C4E0;HANGUL SYLLABLE SSYULS;Lo;0;L;;;;;N;;;;; +C4E1;HANGUL SYLLABLE SSYULT;Lo;0;L;;;;;N;;;;; +C4E2;HANGUL SYLLABLE SSYULP;Lo;0;L;;;;;N;;;;; +C4E3;HANGUL SYLLABLE SSYULH;Lo;0;L;;;;;N;;;;; +C4E4;HANGUL SYLLABLE SSYUM;Lo;0;L;;;;;N;;;;; +C4E5;HANGUL SYLLABLE SSYUB;Lo;0;L;;;;;N;;;;; +C4E6;HANGUL SYLLABLE SSYUBS;Lo;0;L;;;;;N;;;;; +C4E7;HANGUL SYLLABLE SSYUS;Lo;0;L;;;;;N;;;;; +C4E8;HANGUL SYLLABLE SSYUSS;Lo;0;L;;;;;N;;;;; +C4E9;HANGUL SYLLABLE SSYUNG;Lo;0;L;;;;;N;;;;; +C4EA;HANGUL SYLLABLE SSYUJ;Lo;0;L;;;;;N;;;;; +C4EB;HANGUL SYLLABLE SSYUC;Lo;0;L;;;;;N;;;;; +C4EC;HANGUL SYLLABLE SSYUK;Lo;0;L;;;;;N;;;;; +C4ED;HANGUL SYLLABLE SSYUT;Lo;0;L;;;;;N;;;;; +C4EE;HANGUL SYLLABLE SSYUP;Lo;0;L;;;;;N;;;;; +C4EF;HANGUL SYLLABLE SSYUH;Lo;0;L;;;;;N;;;;; +C4F0;HANGUL SYLLABLE SSEU;Lo;0;L;;;;;N;;;;; +C4F1;HANGUL SYLLABLE SSEUG;Lo;0;L;;;;;N;;;;; +C4F2;HANGUL SYLLABLE SSEUGG;Lo;0;L;;;;;N;;;;; +C4F3;HANGUL SYLLABLE SSEUGS;Lo;0;L;;;;;N;;;;; +C4F4;HANGUL SYLLABLE SSEUN;Lo;0;L;;;;;N;;;;; +C4F5;HANGUL SYLLABLE SSEUNI;Lo;0;L;;;;;N;;;;; +C4F6;HANGUL SYLLABLE SSEUNH;Lo;0;L;;;;;N;;;;; +C4F7;HANGUL SYLLABLE SSEUD;Lo;0;L;;;;;N;;;;; +C4F8;HANGUL SYLLABLE SSEUL;Lo;0;L;;;;;N;;;;; +C4F9;HANGUL SYLLABLE SSEULG;Lo;0;L;;;;;N;;;;; +C4FA;HANGUL SYLLABLE SSEULM;Lo;0;L;;;;;N;;;;; +C4FB;HANGUL SYLLABLE SSEULB;Lo;0;L;;;;;N;;;;; +C4FC;HANGUL SYLLABLE SSEULS;Lo;0;L;;;;;N;;;;; +C4FD;HANGUL SYLLABLE SSEULT;Lo;0;L;;;;;N;;;;; +C4FE;HANGUL SYLLABLE SSEULP;Lo;0;L;;;;;N;;;;; +C4FF;HANGUL SYLLABLE SSEULH;Lo;0;L;;;;;N;;;;; +C500;HANGUL SYLLABLE SSEUM;Lo;0;L;;;;;N;;;;; +C501;HANGUL SYLLABLE SSEUB;Lo;0;L;;;;;N;;;;; +C502;HANGUL SYLLABLE SSEUBS;Lo;0;L;;;;;N;;;;; +C503;HANGUL SYLLABLE SSEUS;Lo;0;L;;;;;N;;;;; +C504;HANGUL SYLLABLE SSEUSS;Lo;0;L;;;;;N;;;;; +C505;HANGUL SYLLABLE SSEUNG;Lo;0;L;;;;;N;;;;; +C506;HANGUL SYLLABLE SSEUJ;Lo;0;L;;;;;N;;;;; +C507;HANGUL SYLLABLE SSEUC;Lo;0;L;;;;;N;;;;; +C508;HANGUL SYLLABLE SSEUK;Lo;0;L;;;;;N;;;;; +C509;HANGUL SYLLABLE SSEUT;Lo;0;L;;;;;N;;;;; +C50A;HANGUL SYLLABLE SSEUP;Lo;0;L;;;;;N;;;;; +C50B;HANGUL SYLLABLE SSEUH;Lo;0;L;;;;;N;;;;; +C50C;HANGUL SYLLABLE SSYI;Lo;0;L;;;;;N;;;;; +C50D;HANGUL SYLLABLE SSYIG;Lo;0;L;;;;;N;;;;; +C50E;HANGUL SYLLABLE SSYIGG;Lo;0;L;;;;;N;;;;; +C50F;HANGUL SYLLABLE SSYIGS;Lo;0;L;;;;;N;;;;; +C510;HANGUL SYLLABLE SSYIN;Lo;0;L;;;;;N;;;;; +C511;HANGUL SYLLABLE SSYINI;Lo;0;L;;;;;N;;;;; +C512;HANGUL SYLLABLE SSYINH;Lo;0;L;;;;;N;;;;; +C513;HANGUL SYLLABLE SSYID;Lo;0;L;;;;;N;;;;; +C514;HANGUL SYLLABLE SSYIL;Lo;0;L;;;;;N;;;;; +C515;HANGUL SYLLABLE SSYILG;Lo;0;L;;;;;N;;;;; +C516;HANGUL SYLLABLE SSYILM;Lo;0;L;;;;;N;;;;; +C517;HANGUL SYLLABLE SSYILB;Lo;0;L;;;;;N;;;;; +C518;HANGUL SYLLABLE SSYILS;Lo;0;L;;;;;N;;;;; +C519;HANGUL SYLLABLE SSYILT;Lo;0;L;;;;;N;;;;; +C51A;HANGUL SYLLABLE SSYILP;Lo;0;L;;;;;N;;;;; +C51B;HANGUL SYLLABLE SSYILH;Lo;0;L;;;;;N;;;;; +C51C;HANGUL SYLLABLE SSYIM;Lo;0;L;;;;;N;;;;; +C51D;HANGUL SYLLABLE SSYIB;Lo;0;L;;;;;N;;;;; +C51E;HANGUL SYLLABLE SSYIBS;Lo;0;L;;;;;N;;;;; +C51F;HANGUL SYLLABLE SSYIS;Lo;0;L;;;;;N;;;;; +C520;HANGUL SYLLABLE SSYISS;Lo;0;L;;;;;N;;;;; +C521;HANGUL SYLLABLE SSYING;Lo;0;L;;;;;N;;;;; +C522;HANGUL SYLLABLE SSYIJ;Lo;0;L;;;;;N;;;;; +C523;HANGUL SYLLABLE SSYIC;Lo;0;L;;;;;N;;;;; +C524;HANGUL SYLLABLE SSYIK;Lo;0;L;;;;;N;;;;; +C525;HANGUL SYLLABLE SSYIT;Lo;0;L;;;;;N;;;;; +C526;HANGUL SYLLABLE SSYIP;Lo;0;L;;;;;N;;;;; +C527;HANGUL SYLLABLE SSYIH;Lo;0;L;;;;;N;;;;; +C528;HANGUL SYLLABLE SSI;Lo;0;L;;;;;N;;;;; +C529;HANGUL SYLLABLE SSIG;Lo;0;L;;;;;N;;;;; +C52A;HANGUL SYLLABLE SSIGG;Lo;0;L;;;;;N;;;;; +C52B;HANGUL SYLLABLE SSIGS;Lo;0;L;;;;;N;;;;; +C52C;HANGUL SYLLABLE SSIN;Lo;0;L;;;;;N;;;;; +C52D;HANGUL SYLLABLE SSINI;Lo;0;L;;;;;N;;;;; +C52E;HANGUL SYLLABLE SSINH;Lo;0;L;;;;;N;;;;; +C52F;HANGUL SYLLABLE SSID;Lo;0;L;;;;;N;;;;; +C530;HANGUL SYLLABLE SSIL;Lo;0;L;;;;;N;;;;; +C531;HANGUL SYLLABLE SSILG;Lo;0;L;;;;;N;;;;; +C532;HANGUL SYLLABLE SSILM;Lo;0;L;;;;;N;;;;; +C533;HANGUL SYLLABLE SSILB;Lo;0;L;;;;;N;;;;; +C534;HANGUL SYLLABLE SSILS;Lo;0;L;;;;;N;;;;; +C535;HANGUL SYLLABLE SSILT;Lo;0;L;;;;;N;;;;; +C536;HANGUL SYLLABLE SSILP;Lo;0;L;;;;;N;;;;; +C537;HANGUL SYLLABLE SSILH;Lo;0;L;;;;;N;;;;; +C538;HANGUL SYLLABLE SSIM;Lo;0;L;;;;;N;;;;; +C539;HANGUL SYLLABLE SSIB;Lo;0;L;;;;;N;;;;; +C53A;HANGUL SYLLABLE SSIBS;Lo;0;L;;;;;N;;;;; +C53B;HANGUL SYLLABLE SSIS;Lo;0;L;;;;;N;;;;; +C53C;HANGUL SYLLABLE SSISS;Lo;0;L;;;;;N;;;;; +C53D;HANGUL SYLLABLE SSING;Lo;0;L;;;;;N;;;;; +C53E;HANGUL SYLLABLE SSIJ;Lo;0;L;;;;;N;;;;; +C53F;HANGUL SYLLABLE SSIC;Lo;0;L;;;;;N;;;;; +C540;HANGUL SYLLABLE SSIK;Lo;0;L;;;;;N;;;;; +C541;HANGUL SYLLABLE SSIT;Lo;0;L;;;;;N;;;;; +C542;HANGUL SYLLABLE SSIP;Lo;0;L;;;;;N;;;;; +C543;HANGUL SYLLABLE SSIH;Lo;0;L;;;;;N;;;;; +C544;HANGUL SYLLABLE A;Lo;0;L;;;;;N;;;;; +C545;HANGUL SYLLABLE AG;Lo;0;L;;;;;N;;;;; +C546;HANGUL SYLLABLE AGG;Lo;0;L;;;;;N;;;;; +C547;HANGUL SYLLABLE AGS;Lo;0;L;;;;;N;;;;; +C548;HANGUL SYLLABLE AN;Lo;0;L;;;;;N;;;;; +C549;HANGUL SYLLABLE ANI;Lo;0;L;;;;;N;;;;; +C54A;HANGUL SYLLABLE ANH;Lo;0;L;;;;;N;;;;; +C54B;HANGUL SYLLABLE AD;Lo;0;L;;;;;N;;;;; +C54C;HANGUL SYLLABLE AL;Lo;0;L;;;;;N;;;;; +C54D;HANGUL SYLLABLE ALG;Lo;0;L;;;;;N;;;;; +C54E;HANGUL SYLLABLE ALM;Lo;0;L;;;;;N;;;;; +C54F;HANGUL SYLLABLE ALB;Lo;0;L;;;;;N;;;;; +C550;HANGUL SYLLABLE ALS;Lo;0;L;;;;;N;;;;; +C551;HANGUL SYLLABLE ALT;Lo;0;L;;;;;N;;;;; +C552;HANGUL SYLLABLE ALP;Lo;0;L;;;;;N;;;;; +C553;HANGUL SYLLABLE ALH;Lo;0;L;;;;;N;;;;; +C554;HANGUL SYLLABLE AM;Lo;0;L;;;;;N;;;;; +C555;HANGUL SYLLABLE AB;Lo;0;L;;;;;N;;;;; +C556;HANGUL SYLLABLE ABS;Lo;0;L;;;;;N;;;;; +C557;HANGUL SYLLABLE AS;Lo;0;L;;;;;N;;;;; +C558;HANGUL SYLLABLE ASS;Lo;0;L;;;;;N;;;;; +C559;HANGUL SYLLABLE ANG;Lo;0;L;;;;;N;;;;; +C55A;HANGUL SYLLABLE AJ;Lo;0;L;;;;;N;;;;; +C55B;HANGUL SYLLABLE AC;Lo;0;L;;;;;N;;;;; +C55C;HANGUL SYLLABLE AK;Lo;0;L;;;;;N;;;;; +C55D;HANGUL SYLLABLE AT;Lo;0;L;;;;;N;;;;; +C55E;HANGUL SYLLABLE AP;Lo;0;L;;;;;N;;;;; +C55F;HANGUL SYLLABLE AH;Lo;0;L;;;;;N;;;;; +C560;HANGUL SYLLABLE AE;Lo;0;L;;;;;N;;;;; +C561;HANGUL SYLLABLE AEG;Lo;0;L;;;;;N;;;;; +C562;HANGUL SYLLABLE AEGG;Lo;0;L;;;;;N;;;;; +C563;HANGUL SYLLABLE AEGS;Lo;0;L;;;;;N;;;;; +C564;HANGUL SYLLABLE AEN;Lo;0;L;;;;;N;;;;; +C565;HANGUL SYLLABLE AENI;Lo;0;L;;;;;N;;;;; +C566;HANGUL SYLLABLE AENH;Lo;0;L;;;;;N;;;;; +C567;HANGUL SYLLABLE AED;Lo;0;L;;;;;N;;;;; +C568;HANGUL SYLLABLE AEL;Lo;0;L;;;;;N;;;;; +C569;HANGUL SYLLABLE AELG;Lo;0;L;;;;;N;;;;; +C56A;HANGUL SYLLABLE AELM;Lo;0;L;;;;;N;;;;; +C56B;HANGUL SYLLABLE AELB;Lo;0;L;;;;;N;;;;; +C56C;HANGUL SYLLABLE AELS;Lo;0;L;;;;;N;;;;; +C56D;HANGUL SYLLABLE AELT;Lo;0;L;;;;;N;;;;; +C56E;HANGUL SYLLABLE AELP;Lo;0;L;;;;;N;;;;; +C56F;HANGUL SYLLABLE AELH;Lo;0;L;;;;;N;;;;; +C570;HANGUL SYLLABLE AEM;Lo;0;L;;;;;N;;;;; +C571;HANGUL SYLLABLE AEB;Lo;0;L;;;;;N;;;;; +C572;HANGUL SYLLABLE AEBS;Lo;0;L;;;;;N;;;;; +C573;HANGUL SYLLABLE AES;Lo;0;L;;;;;N;;;;; +C574;HANGUL SYLLABLE AESS;Lo;0;L;;;;;N;;;;; +C575;HANGUL SYLLABLE AENG;Lo;0;L;;;;;N;;;;; +C576;HANGUL SYLLABLE AEJ;Lo;0;L;;;;;N;;;;; +C577;HANGUL SYLLABLE AEC;Lo;0;L;;;;;N;;;;; +C578;HANGUL SYLLABLE AEK;Lo;0;L;;;;;N;;;;; +C579;HANGUL SYLLABLE AET;Lo;0;L;;;;;N;;;;; +C57A;HANGUL SYLLABLE AEP;Lo;0;L;;;;;N;;;;; +C57B;HANGUL SYLLABLE AEH;Lo;0;L;;;;;N;;;;; +C57C;HANGUL SYLLABLE YA;Lo;0;L;;;;;N;;;;; +C57D;HANGUL SYLLABLE YAG;Lo;0;L;;;;;N;;;;; +C57E;HANGUL SYLLABLE YAGG;Lo;0;L;;;;;N;;;;; +C57F;HANGUL SYLLABLE YAGS;Lo;0;L;;;;;N;;;;; +C580;HANGUL SYLLABLE YAN;Lo;0;L;;;;;N;;;;; +C581;HANGUL SYLLABLE YANI;Lo;0;L;;;;;N;;;;; +C582;HANGUL SYLLABLE YANH;Lo;0;L;;;;;N;;;;; +C583;HANGUL SYLLABLE YAD;Lo;0;L;;;;;N;;;;; +C584;HANGUL SYLLABLE YAL;Lo;0;L;;;;;N;;;;; +C585;HANGUL SYLLABLE YALG;Lo;0;L;;;;;N;;;;; +C586;HANGUL SYLLABLE YALM;Lo;0;L;;;;;N;;;;; +C587;HANGUL SYLLABLE YALB;Lo;0;L;;;;;N;;;;; +C588;HANGUL SYLLABLE YALS;Lo;0;L;;;;;N;;;;; +C589;HANGUL SYLLABLE YALT;Lo;0;L;;;;;N;;;;; +C58A;HANGUL SYLLABLE YALP;Lo;0;L;;;;;N;;;;; +C58B;HANGUL SYLLABLE YALH;Lo;0;L;;;;;N;;;;; +C58C;HANGUL SYLLABLE YAM;Lo;0;L;;;;;N;;;;; +C58D;HANGUL SYLLABLE YAB;Lo;0;L;;;;;N;;;;; +C58E;HANGUL SYLLABLE YABS;Lo;0;L;;;;;N;;;;; +C58F;HANGUL SYLLABLE YAS;Lo;0;L;;;;;N;;;;; +C590;HANGUL SYLLABLE YASS;Lo;0;L;;;;;N;;;;; +C591;HANGUL SYLLABLE YANG;Lo;0;L;;;;;N;;;;; +C592;HANGUL SYLLABLE YAJ;Lo;0;L;;;;;N;;;;; +C593;HANGUL SYLLABLE YAC;Lo;0;L;;;;;N;;;;; +C594;HANGUL SYLLABLE YAK;Lo;0;L;;;;;N;;;;; +C595;HANGUL SYLLABLE YAT;Lo;0;L;;;;;N;;;;; +C596;HANGUL SYLLABLE YAP;Lo;0;L;;;;;N;;;;; +C597;HANGUL SYLLABLE YAH;Lo;0;L;;;;;N;;;;; +C598;HANGUL SYLLABLE YAE;Lo;0;L;;;;;N;;;;; +C599;HANGUL SYLLABLE YAEG;Lo;0;L;;;;;N;;;;; +C59A;HANGUL SYLLABLE YAEGG;Lo;0;L;;;;;N;;;;; +C59B;HANGUL SYLLABLE YAEGS;Lo;0;L;;;;;N;;;;; +C59C;HANGUL SYLLABLE YAEN;Lo;0;L;;;;;N;;;;; +C59D;HANGUL SYLLABLE YAENI;Lo;0;L;;;;;N;;;;; +C59E;HANGUL SYLLABLE YAENH;Lo;0;L;;;;;N;;;;; +C59F;HANGUL SYLLABLE YAED;Lo;0;L;;;;;N;;;;; +C5A0;HANGUL SYLLABLE YAEL;Lo;0;L;;;;;N;;;;; +C5A1;HANGUL SYLLABLE YAELG;Lo;0;L;;;;;N;;;;; +C5A2;HANGUL SYLLABLE YAELM;Lo;0;L;;;;;N;;;;; +C5A3;HANGUL SYLLABLE YAELB;Lo;0;L;;;;;N;;;;; +C5A4;HANGUL SYLLABLE YAELS;Lo;0;L;;;;;N;;;;; +C5A5;HANGUL SYLLABLE YAELT;Lo;0;L;;;;;N;;;;; +C5A6;HANGUL SYLLABLE YAELP;Lo;0;L;;;;;N;;;;; +C5A7;HANGUL SYLLABLE YAELH;Lo;0;L;;;;;N;;;;; +C5A8;HANGUL SYLLABLE YAEM;Lo;0;L;;;;;N;;;;; +C5A9;HANGUL SYLLABLE YAEB;Lo;0;L;;;;;N;;;;; +C5AA;HANGUL SYLLABLE YAEBS;Lo;0;L;;;;;N;;;;; +C5AB;HANGUL SYLLABLE YAES;Lo;0;L;;;;;N;;;;; +C5AC;HANGUL SYLLABLE YAESS;Lo;0;L;;;;;N;;;;; +C5AD;HANGUL SYLLABLE YAENG;Lo;0;L;;;;;N;;;;; +C5AE;HANGUL SYLLABLE YAEJ;Lo;0;L;;;;;N;;;;; +C5AF;HANGUL SYLLABLE YAEC;Lo;0;L;;;;;N;;;;; +C5B0;HANGUL SYLLABLE YAEK;Lo;0;L;;;;;N;;;;; +C5B1;HANGUL SYLLABLE YAET;Lo;0;L;;;;;N;;;;; +C5B2;HANGUL SYLLABLE YAEP;Lo;0;L;;;;;N;;;;; +C5B3;HANGUL SYLLABLE YAEH;Lo;0;L;;;;;N;;;;; +C5B4;HANGUL SYLLABLE EO;Lo;0;L;;;;;N;;;;; +C5B5;HANGUL SYLLABLE EOG;Lo;0;L;;;;;N;;;;; +C5B6;HANGUL SYLLABLE EOGG;Lo;0;L;;;;;N;;;;; +C5B7;HANGUL SYLLABLE EOGS;Lo;0;L;;;;;N;;;;; +C5B8;HANGUL SYLLABLE EON;Lo;0;L;;;;;N;;;;; +C5B9;HANGUL SYLLABLE EONI;Lo;0;L;;;;;N;;;;; +C5BA;HANGUL SYLLABLE EONH;Lo;0;L;;;;;N;;;;; +C5BB;HANGUL SYLLABLE EOD;Lo;0;L;;;;;N;;;;; +C5BC;HANGUL SYLLABLE EOL;Lo;0;L;;;;;N;;;;; +C5BD;HANGUL SYLLABLE EOLG;Lo;0;L;;;;;N;;;;; +C5BE;HANGUL SYLLABLE EOLM;Lo;0;L;;;;;N;;;;; +C5BF;HANGUL SYLLABLE EOLB;Lo;0;L;;;;;N;;;;; +C5C0;HANGUL SYLLABLE EOLS;Lo;0;L;;;;;N;;;;; +C5C1;HANGUL SYLLABLE EOLT;Lo;0;L;;;;;N;;;;; +C5C2;HANGUL SYLLABLE EOLP;Lo;0;L;;;;;N;;;;; +C5C3;HANGUL SYLLABLE EOLH;Lo;0;L;;;;;N;;;;; +C5C4;HANGUL SYLLABLE EOM;Lo;0;L;;;;;N;;;;; +C5C5;HANGUL SYLLABLE EOB;Lo;0;L;;;;;N;;;;; +C5C6;HANGUL SYLLABLE EOBS;Lo;0;L;;;;;N;;;;; +C5C7;HANGUL SYLLABLE EOS;Lo;0;L;;;;;N;;;;; +C5C8;HANGUL SYLLABLE EOSS;Lo;0;L;;;;;N;;;;; +C5C9;HANGUL SYLLABLE EONG;Lo;0;L;;;;;N;;;;; +C5CA;HANGUL SYLLABLE EOJ;Lo;0;L;;;;;N;;;;; +C5CB;HANGUL SYLLABLE EOC;Lo;0;L;;;;;N;;;;; +C5CC;HANGUL SYLLABLE EOK;Lo;0;L;;;;;N;;;;; +C5CD;HANGUL SYLLABLE EOT;Lo;0;L;;;;;N;;;;; +C5CE;HANGUL SYLLABLE EOP;Lo;0;L;;;;;N;;;;; +C5CF;HANGUL SYLLABLE EOH;Lo;0;L;;;;;N;;;;; +C5D0;HANGUL SYLLABLE E;Lo;0;L;;;;;N;;;;; +C5D1;HANGUL SYLLABLE EG;Lo;0;L;;;;;N;;;;; +C5D2;HANGUL SYLLABLE EGG;Lo;0;L;;;;;N;;;;; +C5D3;HANGUL SYLLABLE EGS;Lo;0;L;;;;;N;;;;; +C5D4;HANGUL SYLLABLE EN;Lo;0;L;;;;;N;;;;; +C5D5;HANGUL SYLLABLE ENI;Lo;0;L;;;;;N;;;;; +C5D6;HANGUL SYLLABLE ENH;Lo;0;L;;;;;N;;;;; +C5D7;HANGUL SYLLABLE ED;Lo;0;L;;;;;N;;;;; +C5D8;HANGUL SYLLABLE EL;Lo;0;L;;;;;N;;;;; +C5D9;HANGUL SYLLABLE ELG;Lo;0;L;;;;;N;;;;; +C5DA;HANGUL SYLLABLE ELM;Lo;0;L;;;;;N;;;;; +C5DB;HANGUL SYLLABLE ELB;Lo;0;L;;;;;N;;;;; +C5DC;HANGUL SYLLABLE ELS;Lo;0;L;;;;;N;;;;; +C5DD;HANGUL SYLLABLE ELT;Lo;0;L;;;;;N;;;;; +C5DE;HANGUL SYLLABLE ELP;Lo;0;L;;;;;N;;;;; +C5DF;HANGUL SYLLABLE ELH;Lo;0;L;;;;;N;;;;; +C5E0;HANGUL SYLLABLE EM;Lo;0;L;;;;;N;;;;; +C5E1;HANGUL SYLLABLE EB;Lo;0;L;;;;;N;;;;; +C5E2;HANGUL SYLLABLE EBS;Lo;0;L;;;;;N;;;;; +C5E3;HANGUL SYLLABLE ES;Lo;0;L;;;;;N;;;;; +C5E4;HANGUL SYLLABLE ESS;Lo;0;L;;;;;N;;;;; +C5E5;HANGUL SYLLABLE ENG;Lo;0;L;;;;;N;;;;; +C5E6;HANGUL SYLLABLE EJ;Lo;0;L;;;;;N;;;;; +C5E7;HANGUL SYLLABLE EC;Lo;0;L;;;;;N;;;;; +C5E8;HANGUL SYLLABLE EK;Lo;0;L;;;;;N;;;;; +C5E9;HANGUL SYLLABLE ET;Lo;0;L;;;;;N;;;;; +C5EA;HANGUL SYLLABLE EP;Lo;0;L;;;;;N;;;;; +C5EB;HANGUL SYLLABLE EH;Lo;0;L;;;;;N;;;;; +C5EC;HANGUL SYLLABLE YEO;Lo;0;L;;;;;N;;;;; +C5ED;HANGUL SYLLABLE YEOG;Lo;0;L;;;;;N;;;;; +C5EE;HANGUL SYLLABLE YEOGG;Lo;0;L;;;;;N;;;;; +C5EF;HANGUL SYLLABLE YEOGS;Lo;0;L;;;;;N;;;;; +C5F0;HANGUL SYLLABLE YEON;Lo;0;L;;;;;N;;;;; +C5F1;HANGUL SYLLABLE YEONI;Lo;0;L;;;;;N;;;;; +C5F2;HANGUL SYLLABLE YEONH;Lo;0;L;;;;;N;;;;; +C5F3;HANGUL SYLLABLE YEOD;Lo;0;L;;;;;N;;;;; +C5F4;HANGUL SYLLABLE YEOL;Lo;0;L;;;;;N;;;;; +C5F5;HANGUL SYLLABLE YEOLG;Lo;0;L;;;;;N;;;;; +C5F6;HANGUL SYLLABLE YEOLM;Lo;0;L;;;;;N;;;;; +C5F7;HANGUL SYLLABLE YEOLB;Lo;0;L;;;;;N;;;;; +C5F8;HANGUL SYLLABLE YEOLS;Lo;0;L;;;;;N;;;;; +C5F9;HANGUL SYLLABLE YEOLT;Lo;0;L;;;;;N;;;;; +C5FA;HANGUL SYLLABLE YEOLP;Lo;0;L;;;;;N;;;;; +C5FB;HANGUL SYLLABLE YEOLH;Lo;0;L;;;;;N;;;;; +C5FC;HANGUL SYLLABLE YEOM;Lo;0;L;;;;;N;;;;; +C5FD;HANGUL SYLLABLE YEOB;Lo;0;L;;;;;N;;;;; +C5FE;HANGUL SYLLABLE YEOBS;Lo;0;L;;;;;N;;;;; +C5FF;HANGUL SYLLABLE YEOS;Lo;0;L;;;;;N;;;;; +C600;HANGUL SYLLABLE YEOSS;Lo;0;L;;;;;N;;;;; +C601;HANGUL SYLLABLE YEONG;Lo;0;L;;;;;N;;;;; +C602;HANGUL SYLLABLE YEOJ;Lo;0;L;;;;;N;;;;; +C603;HANGUL SYLLABLE YEOC;Lo;0;L;;;;;N;;;;; +C604;HANGUL SYLLABLE YEOK;Lo;0;L;;;;;N;;;;; +C605;HANGUL SYLLABLE YEOT;Lo;0;L;;;;;N;;;;; +C606;HANGUL SYLLABLE YEOP;Lo;0;L;;;;;N;;;;; +C607;HANGUL SYLLABLE YEOH;Lo;0;L;;;;;N;;;;; +C608;HANGUL SYLLABLE YE;Lo;0;L;;;;;N;;;;; +C609;HANGUL SYLLABLE YEG;Lo;0;L;;;;;N;;;;; +C60A;HANGUL SYLLABLE YEGG;Lo;0;L;;;;;N;;;;; +C60B;HANGUL SYLLABLE YEGS;Lo;0;L;;;;;N;;;;; +C60C;HANGUL SYLLABLE YEN;Lo;0;L;;;;;N;;;;; +C60D;HANGUL SYLLABLE YENI;Lo;0;L;;;;;N;;;;; +C60E;HANGUL SYLLABLE YENH;Lo;0;L;;;;;N;;;;; +C60F;HANGUL SYLLABLE YED;Lo;0;L;;;;;N;;;;; +C610;HANGUL SYLLABLE YEL;Lo;0;L;;;;;N;;;;; +C611;HANGUL SYLLABLE YELG;Lo;0;L;;;;;N;;;;; +C612;HANGUL SYLLABLE YELM;Lo;0;L;;;;;N;;;;; +C613;HANGUL SYLLABLE YELB;Lo;0;L;;;;;N;;;;; +C614;HANGUL SYLLABLE YELS;Lo;0;L;;;;;N;;;;; +C615;HANGUL SYLLABLE YELT;Lo;0;L;;;;;N;;;;; +C616;HANGUL SYLLABLE YELP;Lo;0;L;;;;;N;;;;; +C617;HANGUL SYLLABLE YELH;Lo;0;L;;;;;N;;;;; +C618;HANGUL SYLLABLE YEM;Lo;0;L;;;;;N;;;;; +C619;HANGUL SYLLABLE YEB;Lo;0;L;;;;;N;;;;; +C61A;HANGUL SYLLABLE YEBS;Lo;0;L;;;;;N;;;;; +C61B;HANGUL SYLLABLE YES;Lo;0;L;;;;;N;;;;; +C61C;HANGUL SYLLABLE YESS;Lo;0;L;;;;;N;;;;; +C61D;HANGUL SYLLABLE YENG;Lo;0;L;;;;;N;;;;; +C61E;HANGUL SYLLABLE YEJ;Lo;0;L;;;;;N;;;;; +C61F;HANGUL SYLLABLE YEC;Lo;0;L;;;;;N;;;;; +C620;HANGUL SYLLABLE YEK;Lo;0;L;;;;;N;;;;; +C621;HANGUL SYLLABLE YET;Lo;0;L;;;;;N;;;;; +C622;HANGUL SYLLABLE YEP;Lo;0;L;;;;;N;;;;; +C623;HANGUL SYLLABLE YEH;Lo;0;L;;;;;N;;;;; +C624;HANGUL SYLLABLE O;Lo;0;L;;;;;N;;;;; +C625;HANGUL SYLLABLE OG;Lo;0;L;;;;;N;;;;; +C626;HANGUL SYLLABLE OGG;Lo;0;L;;;;;N;;;;; +C627;HANGUL SYLLABLE OGS;Lo;0;L;;;;;N;;;;; +C628;HANGUL SYLLABLE ON;Lo;0;L;;;;;N;;;;; +C629;HANGUL SYLLABLE ONI;Lo;0;L;;;;;N;;;;; +C62A;HANGUL SYLLABLE ONH;Lo;0;L;;;;;N;;;;; +C62B;HANGUL SYLLABLE OD;Lo;0;L;;;;;N;;;;; +C62C;HANGUL SYLLABLE OL;Lo;0;L;;;;;N;;;;; +C62D;HANGUL SYLLABLE OLG;Lo;0;L;;;;;N;;;;; +C62E;HANGUL SYLLABLE OLM;Lo;0;L;;;;;N;;;;; +C62F;HANGUL SYLLABLE OLB;Lo;0;L;;;;;N;;;;; +C630;HANGUL SYLLABLE OLS;Lo;0;L;;;;;N;;;;; +C631;HANGUL SYLLABLE OLT;Lo;0;L;;;;;N;;;;; +C632;HANGUL SYLLABLE OLP;Lo;0;L;;;;;N;;;;; +C633;HANGUL SYLLABLE OLH;Lo;0;L;;;;;N;;;;; +C634;HANGUL SYLLABLE OM;Lo;0;L;;;;;N;;;;; +C635;HANGUL SYLLABLE OB;Lo;0;L;;;;;N;;;;; +C636;HANGUL SYLLABLE OBS;Lo;0;L;;;;;N;;;;; +C637;HANGUL SYLLABLE OS;Lo;0;L;;;;;N;;;;; +C638;HANGUL SYLLABLE OSS;Lo;0;L;;;;;N;;;;; +C639;HANGUL SYLLABLE ONG;Lo;0;L;;;;;N;;;;; +C63A;HANGUL SYLLABLE OJ;Lo;0;L;;;;;N;;;;; +C63B;HANGUL SYLLABLE OC;Lo;0;L;;;;;N;;;;; +C63C;HANGUL SYLLABLE OK;Lo;0;L;;;;;N;;;;; +C63D;HANGUL SYLLABLE OT;Lo;0;L;;;;;N;;;;; +C63E;HANGUL SYLLABLE OP;Lo;0;L;;;;;N;;;;; +C63F;HANGUL SYLLABLE OH;Lo;0;L;;;;;N;;;;; +C640;HANGUL SYLLABLE WA;Lo;0;L;;;;;N;;;;; +C641;HANGUL SYLLABLE WAG;Lo;0;L;;;;;N;;;;; +C642;HANGUL SYLLABLE WAGG;Lo;0;L;;;;;N;;;;; +C643;HANGUL SYLLABLE WAGS;Lo;0;L;;;;;N;;;;; +C644;HANGUL SYLLABLE WAN;Lo;0;L;;;;;N;;;;; +C645;HANGUL SYLLABLE WANI;Lo;0;L;;;;;N;;;;; +C646;HANGUL SYLLABLE WANH;Lo;0;L;;;;;N;;;;; +C647;HANGUL SYLLABLE WAD;Lo;0;L;;;;;N;;;;; +C648;HANGUL SYLLABLE WAL;Lo;0;L;;;;;N;;;;; +C649;HANGUL SYLLABLE WALG;Lo;0;L;;;;;N;;;;; +C64A;HANGUL SYLLABLE WALM;Lo;0;L;;;;;N;;;;; +C64B;HANGUL SYLLABLE WALB;Lo;0;L;;;;;N;;;;; +C64C;HANGUL SYLLABLE WALS;Lo;0;L;;;;;N;;;;; +C64D;HANGUL SYLLABLE WALT;Lo;0;L;;;;;N;;;;; +C64E;HANGUL SYLLABLE WALP;Lo;0;L;;;;;N;;;;; +C64F;HANGUL SYLLABLE WALH;Lo;0;L;;;;;N;;;;; +C650;HANGUL SYLLABLE WAM;Lo;0;L;;;;;N;;;;; +C651;HANGUL SYLLABLE WAB;Lo;0;L;;;;;N;;;;; +C652;HANGUL SYLLABLE WABS;Lo;0;L;;;;;N;;;;; +C653;HANGUL SYLLABLE WAS;Lo;0;L;;;;;N;;;;; +C654;HANGUL SYLLABLE WASS;Lo;0;L;;;;;N;;;;; +C655;HANGUL SYLLABLE WANG;Lo;0;L;;;;;N;;;;; +C656;HANGUL SYLLABLE WAJ;Lo;0;L;;;;;N;;;;; +C657;HANGUL SYLLABLE WAC;Lo;0;L;;;;;N;;;;; +C658;HANGUL SYLLABLE WAK;Lo;0;L;;;;;N;;;;; +C659;HANGUL SYLLABLE WAT;Lo;0;L;;;;;N;;;;; +C65A;HANGUL SYLLABLE WAP;Lo;0;L;;;;;N;;;;; +C65B;HANGUL SYLLABLE WAH;Lo;0;L;;;;;N;;;;; +C65C;HANGUL SYLLABLE WAE;Lo;0;L;;;;;N;;;;; +C65D;HANGUL SYLLABLE WAEG;Lo;0;L;;;;;N;;;;; +C65E;HANGUL SYLLABLE WAEGG;Lo;0;L;;;;;N;;;;; +C65F;HANGUL SYLLABLE WAEGS;Lo;0;L;;;;;N;;;;; +C660;HANGUL SYLLABLE WAEN;Lo;0;L;;;;;N;;;;; +C661;HANGUL SYLLABLE WAENI;Lo;0;L;;;;;N;;;;; +C662;HANGUL SYLLABLE WAENH;Lo;0;L;;;;;N;;;;; +C663;HANGUL SYLLABLE WAED;Lo;0;L;;;;;N;;;;; +C664;HANGUL SYLLABLE WAEL;Lo;0;L;;;;;N;;;;; +C665;HANGUL SYLLABLE WAELG;Lo;0;L;;;;;N;;;;; +C666;HANGUL SYLLABLE WAELM;Lo;0;L;;;;;N;;;;; +C667;HANGUL SYLLABLE WAELB;Lo;0;L;;;;;N;;;;; +C668;HANGUL SYLLABLE WAELS;Lo;0;L;;;;;N;;;;; +C669;HANGUL SYLLABLE WAELT;Lo;0;L;;;;;N;;;;; +C66A;HANGUL SYLLABLE WAELP;Lo;0;L;;;;;N;;;;; +C66B;HANGUL SYLLABLE WAELH;Lo;0;L;;;;;N;;;;; +C66C;HANGUL SYLLABLE WAEM;Lo;0;L;;;;;N;;;;; +C66D;HANGUL SYLLABLE WAEB;Lo;0;L;;;;;N;;;;; +C66E;HANGUL SYLLABLE WAEBS;Lo;0;L;;;;;N;;;;; +C66F;HANGUL SYLLABLE WAES;Lo;0;L;;;;;N;;;;; +C670;HANGUL SYLLABLE WAESS;Lo;0;L;;;;;N;;;;; +C671;HANGUL SYLLABLE WAENG;Lo;0;L;;;;;N;;;;; +C672;HANGUL SYLLABLE WAEJ;Lo;0;L;;;;;N;;;;; +C673;HANGUL SYLLABLE WAEC;Lo;0;L;;;;;N;;;;; +C674;HANGUL SYLLABLE WAEK;Lo;0;L;;;;;N;;;;; +C675;HANGUL SYLLABLE WAET;Lo;0;L;;;;;N;;;;; +C676;HANGUL SYLLABLE WAEP;Lo;0;L;;;;;N;;;;; +C677;HANGUL SYLLABLE WAEH;Lo;0;L;;;;;N;;;;; +C678;HANGUL SYLLABLE OE;Lo;0;L;;;;;N;;;;; +C679;HANGUL SYLLABLE OEG;Lo;0;L;;;;;N;;;;; +C67A;HANGUL SYLLABLE OEGG;Lo;0;L;;;;;N;;;;; +C67B;HANGUL SYLLABLE OEGS;Lo;0;L;;;;;N;;;;; +C67C;HANGUL SYLLABLE OEN;Lo;0;L;;;;;N;;;;; +C67D;HANGUL SYLLABLE OENI;Lo;0;L;;;;;N;;;;; +C67E;HANGUL SYLLABLE OENH;Lo;0;L;;;;;N;;;;; +C67F;HANGUL SYLLABLE OED;Lo;0;L;;;;;N;;;;; +C680;HANGUL SYLLABLE OEL;Lo;0;L;;;;;N;;;;; +C681;HANGUL SYLLABLE OELG;Lo;0;L;;;;;N;;;;; +C682;HANGUL SYLLABLE OELM;Lo;0;L;;;;;N;;;;; +C683;HANGUL SYLLABLE OELB;Lo;0;L;;;;;N;;;;; +C684;HANGUL SYLLABLE OELS;Lo;0;L;;;;;N;;;;; +C685;HANGUL SYLLABLE OELT;Lo;0;L;;;;;N;;;;; +C686;HANGUL SYLLABLE OELP;Lo;0;L;;;;;N;;;;; +C687;HANGUL SYLLABLE OELH;Lo;0;L;;;;;N;;;;; +C688;HANGUL SYLLABLE OEM;Lo;0;L;;;;;N;;;;; +C689;HANGUL SYLLABLE OEB;Lo;0;L;;;;;N;;;;; +C68A;HANGUL SYLLABLE OEBS;Lo;0;L;;;;;N;;;;; +C68B;HANGUL SYLLABLE OES;Lo;0;L;;;;;N;;;;; +C68C;HANGUL SYLLABLE OESS;Lo;0;L;;;;;N;;;;; +C68D;HANGUL SYLLABLE OENG;Lo;0;L;;;;;N;;;;; +C68E;HANGUL SYLLABLE OEJ;Lo;0;L;;;;;N;;;;; +C68F;HANGUL SYLLABLE OEC;Lo;0;L;;;;;N;;;;; +C690;HANGUL SYLLABLE OEK;Lo;0;L;;;;;N;;;;; +C691;HANGUL SYLLABLE OET;Lo;0;L;;;;;N;;;;; +C692;HANGUL SYLLABLE OEP;Lo;0;L;;;;;N;;;;; +C693;HANGUL SYLLABLE OEH;Lo;0;L;;;;;N;;;;; +C694;HANGUL SYLLABLE YO;Lo;0;L;;;;;N;;;;; +C695;HANGUL SYLLABLE YOG;Lo;0;L;;;;;N;;;;; +C696;HANGUL SYLLABLE YOGG;Lo;0;L;;;;;N;;;;; +C697;HANGUL SYLLABLE YOGS;Lo;0;L;;;;;N;;;;; +C698;HANGUL SYLLABLE YON;Lo;0;L;;;;;N;;;;; +C699;HANGUL SYLLABLE YONI;Lo;0;L;;;;;N;;;;; +C69A;HANGUL SYLLABLE YONH;Lo;0;L;;;;;N;;;;; +C69B;HANGUL SYLLABLE YOD;Lo;0;L;;;;;N;;;;; +C69C;HANGUL SYLLABLE YOL;Lo;0;L;;;;;N;;;;; +C69D;HANGUL SYLLABLE YOLG;Lo;0;L;;;;;N;;;;; +C69E;HANGUL SYLLABLE YOLM;Lo;0;L;;;;;N;;;;; +C69F;HANGUL SYLLABLE YOLB;Lo;0;L;;;;;N;;;;; +C6A0;HANGUL SYLLABLE YOLS;Lo;0;L;;;;;N;;;;; +C6A1;HANGUL SYLLABLE YOLT;Lo;0;L;;;;;N;;;;; +C6A2;HANGUL SYLLABLE YOLP;Lo;0;L;;;;;N;;;;; +C6A3;HANGUL SYLLABLE YOLH;Lo;0;L;;;;;N;;;;; +C6A4;HANGUL SYLLABLE YOM;Lo;0;L;;;;;N;;;;; +C6A5;HANGUL SYLLABLE YOB;Lo;0;L;;;;;N;;;;; +C6A6;HANGUL SYLLABLE YOBS;Lo;0;L;;;;;N;;;;; +C6A7;HANGUL SYLLABLE YOS;Lo;0;L;;;;;N;;;;; +C6A8;HANGUL SYLLABLE YOSS;Lo;0;L;;;;;N;;;;; +C6A9;HANGUL SYLLABLE YONG;Lo;0;L;;;;;N;;;;; +C6AA;HANGUL SYLLABLE YOJ;Lo;0;L;;;;;N;;;;; +C6AB;HANGUL SYLLABLE YOC;Lo;0;L;;;;;N;;;;; +C6AC;HANGUL SYLLABLE YOK;Lo;0;L;;;;;N;;;;; +C6AD;HANGUL SYLLABLE YOT;Lo;0;L;;;;;N;;;;; +C6AE;HANGUL SYLLABLE YOP;Lo;0;L;;;;;N;;;;; +C6AF;HANGUL SYLLABLE YOH;Lo;0;L;;;;;N;;;;; +C6B0;HANGUL SYLLABLE U;Lo;0;L;;;;;N;;;;; +C6B1;HANGUL SYLLABLE UG;Lo;0;L;;;;;N;;;;; +C6B2;HANGUL SYLLABLE UGG;Lo;0;L;;;;;N;;;;; +C6B3;HANGUL SYLLABLE UGS;Lo;0;L;;;;;N;;;;; +C6B4;HANGUL SYLLABLE UN;Lo;0;L;;;;;N;;;;; +C6B5;HANGUL SYLLABLE UNI;Lo;0;L;;;;;N;;;;; +C6B6;HANGUL SYLLABLE UNH;Lo;0;L;;;;;N;;;;; +C6B7;HANGUL SYLLABLE UD;Lo;0;L;;;;;N;;;;; +C6B8;HANGUL SYLLABLE UL;Lo;0;L;;;;;N;;;;; +C6B9;HANGUL SYLLABLE ULG;Lo;0;L;;;;;N;;;;; +C6BA;HANGUL SYLLABLE ULM;Lo;0;L;;;;;N;;;;; +C6BB;HANGUL SYLLABLE ULB;Lo;0;L;;;;;N;;;;; +C6BC;HANGUL SYLLABLE ULS;Lo;0;L;;;;;N;;;;; +C6BD;HANGUL SYLLABLE ULT;Lo;0;L;;;;;N;;;;; +C6BE;HANGUL SYLLABLE ULP;Lo;0;L;;;;;N;;;;; +C6BF;HANGUL SYLLABLE ULH;Lo;0;L;;;;;N;;;;; +C6C0;HANGUL SYLLABLE UM;Lo;0;L;;;;;N;;;;; +C6C1;HANGUL SYLLABLE UB;Lo;0;L;;;;;N;;;;; +C6C2;HANGUL SYLLABLE UBS;Lo;0;L;;;;;N;;;;; +C6C3;HANGUL SYLLABLE US;Lo;0;L;;;;;N;;;;; +C6C4;HANGUL SYLLABLE USS;Lo;0;L;;;;;N;;;;; +C6C5;HANGUL SYLLABLE UNG;Lo;0;L;;;;;N;;;;; +C6C6;HANGUL SYLLABLE UJ;Lo;0;L;;;;;N;;;;; +C6C7;HANGUL SYLLABLE UC;Lo;0;L;;;;;N;;;;; +C6C8;HANGUL SYLLABLE UK;Lo;0;L;;;;;N;;;;; +C6C9;HANGUL SYLLABLE UT;Lo;0;L;;;;;N;;;;; +C6CA;HANGUL SYLLABLE UP;Lo;0;L;;;;;N;;;;; +C6CB;HANGUL SYLLABLE UH;Lo;0;L;;;;;N;;;;; +C6CC;HANGUL SYLLABLE WEO;Lo;0;L;;;;;N;;;;; +C6CD;HANGUL SYLLABLE WEOG;Lo;0;L;;;;;N;;;;; +C6CE;HANGUL SYLLABLE WEOGG;Lo;0;L;;;;;N;;;;; +C6CF;HANGUL SYLLABLE WEOGS;Lo;0;L;;;;;N;;;;; +C6D0;HANGUL SYLLABLE WEON;Lo;0;L;;;;;N;;;;; +C6D1;HANGUL SYLLABLE WEONI;Lo;0;L;;;;;N;;;;; +C6D2;HANGUL SYLLABLE WEONH;Lo;0;L;;;;;N;;;;; +C6D3;HANGUL SYLLABLE WEOD;Lo;0;L;;;;;N;;;;; +C6D4;HANGUL SYLLABLE WEOL;Lo;0;L;;;;;N;;;;; +C6D5;HANGUL SYLLABLE WEOLG;Lo;0;L;;;;;N;;;;; +C6D6;HANGUL SYLLABLE WEOLM;Lo;0;L;;;;;N;;;;; +C6D7;HANGUL SYLLABLE WEOLB;Lo;0;L;;;;;N;;;;; +C6D8;HANGUL SYLLABLE WEOLS;Lo;0;L;;;;;N;;;;; +C6D9;HANGUL SYLLABLE WEOLT;Lo;0;L;;;;;N;;;;; +C6DA;HANGUL SYLLABLE WEOLP;Lo;0;L;;;;;N;;;;; +C6DB;HANGUL SYLLABLE WEOLH;Lo;0;L;;;;;N;;;;; +C6DC;HANGUL SYLLABLE WEOM;Lo;0;L;;;;;N;;;;; +C6DD;HANGUL SYLLABLE WEOB;Lo;0;L;;;;;N;;;;; +C6DE;HANGUL SYLLABLE WEOBS;Lo;0;L;;;;;N;;;;; +C6DF;HANGUL SYLLABLE WEOS;Lo;0;L;;;;;N;;;;; +C6E0;HANGUL SYLLABLE WEOSS;Lo;0;L;;;;;N;;;;; +C6E1;HANGUL SYLLABLE WEONG;Lo;0;L;;;;;N;;;;; +C6E2;HANGUL SYLLABLE WEOJ;Lo;0;L;;;;;N;;;;; +C6E3;HANGUL SYLLABLE WEOC;Lo;0;L;;;;;N;;;;; +C6E4;HANGUL SYLLABLE WEOK;Lo;0;L;;;;;N;;;;; +C6E5;HANGUL SYLLABLE WEOT;Lo;0;L;;;;;N;;;;; +C6E6;HANGUL SYLLABLE WEOP;Lo;0;L;;;;;N;;;;; +C6E7;HANGUL SYLLABLE WEOH;Lo;0;L;;;;;N;;;;; +C6E8;HANGUL SYLLABLE WE;Lo;0;L;;;;;N;;;;; +C6E9;HANGUL SYLLABLE WEG;Lo;0;L;;;;;N;;;;; +C6EA;HANGUL SYLLABLE WEGG;Lo;0;L;;;;;N;;;;; +C6EB;HANGUL SYLLABLE WEGS;Lo;0;L;;;;;N;;;;; +C6EC;HANGUL SYLLABLE WEN;Lo;0;L;;;;;N;;;;; +C6ED;HANGUL SYLLABLE WENI;Lo;0;L;;;;;N;;;;; +C6EE;HANGUL SYLLABLE WENH;Lo;0;L;;;;;N;;;;; +C6EF;HANGUL SYLLABLE WED;Lo;0;L;;;;;N;;;;; +C6F0;HANGUL SYLLABLE WEL;Lo;0;L;;;;;N;;;;; +C6F1;HANGUL SYLLABLE WELG;Lo;0;L;;;;;N;;;;; +C6F2;HANGUL SYLLABLE WELM;Lo;0;L;;;;;N;;;;; +C6F3;HANGUL SYLLABLE WELB;Lo;0;L;;;;;N;;;;; +C6F4;HANGUL SYLLABLE WELS;Lo;0;L;;;;;N;;;;; +C6F5;HANGUL SYLLABLE WELT;Lo;0;L;;;;;N;;;;; +C6F6;HANGUL SYLLABLE WELP;Lo;0;L;;;;;N;;;;; +C6F7;HANGUL SYLLABLE WELH;Lo;0;L;;;;;N;;;;; +C6F8;HANGUL SYLLABLE WEM;Lo;0;L;;;;;N;;;;; +C6F9;HANGUL SYLLABLE WEB;Lo;0;L;;;;;N;;;;; +C6FA;HANGUL SYLLABLE WEBS;Lo;0;L;;;;;N;;;;; +C6FB;HANGUL SYLLABLE WES;Lo;0;L;;;;;N;;;;; +C6FC;HANGUL SYLLABLE WESS;Lo;0;L;;;;;N;;;;; +C6FD;HANGUL SYLLABLE WENG;Lo;0;L;;;;;N;;;;; +C6FE;HANGUL SYLLABLE WEJ;Lo;0;L;;;;;N;;;;; +C6FF;HANGUL SYLLABLE WEC;Lo;0;L;;;;;N;;;;; +C700;HANGUL SYLLABLE WEK;Lo;0;L;;;;;N;;;;; +C701;HANGUL SYLLABLE WET;Lo;0;L;;;;;N;;;;; +C702;HANGUL SYLLABLE WEP;Lo;0;L;;;;;N;;;;; +C703;HANGUL SYLLABLE WEH;Lo;0;L;;;;;N;;;;; +C704;HANGUL SYLLABLE WI;Lo;0;L;;;;;N;;;;; +C705;HANGUL SYLLABLE WIG;Lo;0;L;;;;;N;;;;; +C706;HANGUL SYLLABLE WIGG;Lo;0;L;;;;;N;;;;; +C707;HANGUL SYLLABLE WIGS;Lo;0;L;;;;;N;;;;; +C708;HANGUL SYLLABLE WIN;Lo;0;L;;;;;N;;;;; +C709;HANGUL SYLLABLE WINI;Lo;0;L;;;;;N;;;;; +C70A;HANGUL SYLLABLE WINH;Lo;0;L;;;;;N;;;;; +C70B;HANGUL SYLLABLE WID;Lo;0;L;;;;;N;;;;; +C70C;HANGUL SYLLABLE WIL;Lo;0;L;;;;;N;;;;; +C70D;HANGUL SYLLABLE WILG;Lo;0;L;;;;;N;;;;; +C70E;HANGUL SYLLABLE WILM;Lo;0;L;;;;;N;;;;; +C70F;HANGUL SYLLABLE WILB;Lo;0;L;;;;;N;;;;; +C710;HANGUL SYLLABLE WILS;Lo;0;L;;;;;N;;;;; +C711;HANGUL SYLLABLE WILT;Lo;0;L;;;;;N;;;;; +C712;HANGUL SYLLABLE WILP;Lo;0;L;;;;;N;;;;; +C713;HANGUL SYLLABLE WILH;Lo;0;L;;;;;N;;;;; +C714;HANGUL SYLLABLE WIM;Lo;0;L;;;;;N;;;;; +C715;HANGUL SYLLABLE WIB;Lo;0;L;;;;;N;;;;; +C716;HANGUL SYLLABLE WIBS;Lo;0;L;;;;;N;;;;; +C717;HANGUL SYLLABLE WIS;Lo;0;L;;;;;N;;;;; +C718;HANGUL SYLLABLE WISS;Lo;0;L;;;;;N;;;;; +C719;HANGUL SYLLABLE WING;Lo;0;L;;;;;N;;;;; +C71A;HANGUL SYLLABLE WIJ;Lo;0;L;;;;;N;;;;; +C71B;HANGUL SYLLABLE WIC;Lo;0;L;;;;;N;;;;; +C71C;HANGUL SYLLABLE WIK;Lo;0;L;;;;;N;;;;; +C71D;HANGUL SYLLABLE WIT;Lo;0;L;;;;;N;;;;; +C71E;HANGUL SYLLABLE WIP;Lo;0;L;;;;;N;;;;; +C71F;HANGUL SYLLABLE WIH;Lo;0;L;;;;;N;;;;; +C720;HANGUL SYLLABLE YU;Lo;0;L;;;;;N;;;;; +C721;HANGUL SYLLABLE YUG;Lo;0;L;;;;;N;;;;; +C722;HANGUL SYLLABLE YUGG;Lo;0;L;;;;;N;;;;; +C723;HANGUL SYLLABLE YUGS;Lo;0;L;;;;;N;;;;; +C724;HANGUL SYLLABLE YUN;Lo;0;L;;;;;N;;;;; +C725;HANGUL SYLLABLE YUNI;Lo;0;L;;;;;N;;;;; +C726;HANGUL SYLLABLE YUNH;Lo;0;L;;;;;N;;;;; +C727;HANGUL SYLLABLE YUD;Lo;0;L;;;;;N;;;;; +C728;HANGUL SYLLABLE YUL;Lo;0;L;;;;;N;;;;; +C729;HANGUL SYLLABLE YULG;Lo;0;L;;;;;N;;;;; +C72A;HANGUL SYLLABLE YULM;Lo;0;L;;;;;N;;;;; +C72B;HANGUL SYLLABLE YULB;Lo;0;L;;;;;N;;;;; +C72C;HANGUL SYLLABLE YULS;Lo;0;L;;;;;N;;;;; +C72D;HANGUL SYLLABLE YULT;Lo;0;L;;;;;N;;;;; +C72E;HANGUL SYLLABLE YULP;Lo;0;L;;;;;N;;;;; +C72F;HANGUL SYLLABLE YULH;Lo;0;L;;;;;N;;;;; +C730;HANGUL SYLLABLE YUM;Lo;0;L;;;;;N;;;;; +C731;HANGUL SYLLABLE YUB;Lo;0;L;;;;;N;;;;; +C732;HANGUL SYLLABLE YUBS;Lo;0;L;;;;;N;;;;; +C733;HANGUL SYLLABLE YUS;Lo;0;L;;;;;N;;;;; +C734;HANGUL SYLLABLE YUSS;Lo;0;L;;;;;N;;;;; +C735;HANGUL SYLLABLE YUNG;Lo;0;L;;;;;N;;;;; +C736;HANGUL SYLLABLE YUJ;Lo;0;L;;;;;N;;;;; +C737;HANGUL SYLLABLE YUC;Lo;0;L;;;;;N;;;;; +C738;HANGUL SYLLABLE YUK;Lo;0;L;;;;;N;;;;; +C739;HANGUL SYLLABLE YUT;Lo;0;L;;;;;N;;;;; +C73A;HANGUL SYLLABLE YUP;Lo;0;L;;;;;N;;;;; +C73B;HANGUL SYLLABLE YUH;Lo;0;L;;;;;N;;;;; +C73C;HANGUL SYLLABLE EU;Lo;0;L;;;;;N;;;;; +C73D;HANGUL SYLLABLE EUG;Lo;0;L;;;;;N;;;;; +C73E;HANGUL SYLLABLE EUGG;Lo;0;L;;;;;N;;;;; +C73F;HANGUL SYLLABLE EUGS;Lo;0;L;;;;;N;;;;; +C740;HANGUL SYLLABLE EUN;Lo;0;L;;;;;N;;;;; +C741;HANGUL SYLLABLE EUNI;Lo;0;L;;;;;N;;;;; +C742;HANGUL SYLLABLE EUNH;Lo;0;L;;;;;N;;;;; +C743;HANGUL SYLLABLE EUD;Lo;0;L;;;;;N;;;;; +C744;HANGUL SYLLABLE EUL;Lo;0;L;;;;;N;;;;; +C745;HANGUL SYLLABLE EULG;Lo;0;L;;;;;N;;;;; +C746;HANGUL SYLLABLE EULM;Lo;0;L;;;;;N;;;;; +C747;HANGUL SYLLABLE EULB;Lo;0;L;;;;;N;;;;; +C748;HANGUL SYLLABLE EULS;Lo;0;L;;;;;N;;;;; +C749;HANGUL SYLLABLE EULT;Lo;0;L;;;;;N;;;;; +C74A;HANGUL SYLLABLE EULP;Lo;0;L;;;;;N;;;;; +C74B;HANGUL SYLLABLE EULH;Lo;0;L;;;;;N;;;;; +C74C;HANGUL SYLLABLE EUM;Lo;0;L;;;;;N;;;;; +C74D;HANGUL SYLLABLE EUB;Lo;0;L;;;;;N;;;;; +C74E;HANGUL SYLLABLE EUBS;Lo;0;L;;;;;N;;;;; +C74F;HANGUL SYLLABLE EUS;Lo;0;L;;;;;N;;;;; +C750;HANGUL SYLLABLE EUSS;Lo;0;L;;;;;N;;;;; +C751;HANGUL SYLLABLE EUNG;Lo;0;L;;;;;N;;;;; +C752;HANGUL SYLLABLE EUJ;Lo;0;L;;;;;N;;;;; +C753;HANGUL SYLLABLE EUC;Lo;0;L;;;;;N;;;;; +C754;HANGUL SYLLABLE EUK;Lo;0;L;;;;;N;;;;; +C755;HANGUL SYLLABLE EUT;Lo;0;L;;;;;N;;;;; +C756;HANGUL SYLLABLE EUP;Lo;0;L;;;;;N;;;;; +C757;HANGUL SYLLABLE EUH;Lo;0;L;;;;;N;;;;; +C758;HANGUL SYLLABLE YI;Lo;0;L;;;;;N;;;;; +C759;HANGUL SYLLABLE YIG;Lo;0;L;;;;;N;;;;; +C75A;HANGUL SYLLABLE YIGG;Lo;0;L;;;;;N;;;;; +C75B;HANGUL SYLLABLE YIGS;Lo;0;L;;;;;N;;;;; +C75C;HANGUL SYLLABLE YIN;Lo;0;L;;;;;N;;;;; +C75D;HANGUL SYLLABLE YINI;Lo;0;L;;;;;N;;;;; +C75E;HANGUL SYLLABLE YINH;Lo;0;L;;;;;N;;;;; +C75F;HANGUL SYLLABLE YID;Lo;0;L;;;;;N;;;;; +C760;HANGUL SYLLABLE YIL;Lo;0;L;;;;;N;;;;; +C761;HANGUL SYLLABLE YILG;Lo;0;L;;;;;N;;;;; +C762;HANGUL SYLLABLE YILM;Lo;0;L;;;;;N;;;;; +C763;HANGUL SYLLABLE YILB;Lo;0;L;;;;;N;;;;; +C764;HANGUL SYLLABLE YILS;Lo;0;L;;;;;N;;;;; +C765;HANGUL SYLLABLE YILT;Lo;0;L;;;;;N;;;;; +C766;HANGUL SYLLABLE YILP;Lo;0;L;;;;;N;;;;; +C767;HANGUL SYLLABLE YILH;Lo;0;L;;;;;N;;;;; +C768;HANGUL SYLLABLE YIM;Lo;0;L;;;;;N;;;;; +C769;HANGUL SYLLABLE YIB;Lo;0;L;;;;;N;;;;; +C76A;HANGUL SYLLABLE YIBS;Lo;0;L;;;;;N;;;;; +C76B;HANGUL SYLLABLE YIS;Lo;0;L;;;;;N;;;;; +C76C;HANGUL SYLLABLE YISS;Lo;0;L;;;;;N;;;;; +C76D;HANGUL SYLLABLE YING;Lo;0;L;;;;;N;;;;; +C76E;HANGUL SYLLABLE YIJ;Lo;0;L;;;;;N;;;;; +C76F;HANGUL SYLLABLE YIC;Lo;0;L;;;;;N;;;;; +C770;HANGUL SYLLABLE YIK;Lo;0;L;;;;;N;;;;; +C771;HANGUL SYLLABLE YIT;Lo;0;L;;;;;N;;;;; +C772;HANGUL SYLLABLE YIP;Lo;0;L;;;;;N;;;;; +C773;HANGUL SYLLABLE YIH;Lo;0;L;;;;;N;;;;; +C774;HANGUL SYLLABLE I;Lo;0;L;;;;;N;;;;; +C775;HANGUL SYLLABLE IG;Lo;0;L;;;;;N;;;;; +C776;HANGUL SYLLABLE IGG;Lo;0;L;;;;;N;;;;; +C777;HANGUL SYLLABLE IGS;Lo;0;L;;;;;N;;;;; +C778;HANGUL SYLLABLE IN;Lo;0;L;;;;;N;;;;; +C779;HANGUL SYLLABLE INI;Lo;0;L;;;;;N;;;;; +C77A;HANGUL SYLLABLE INH;Lo;0;L;;;;;N;;;;; +C77B;HANGUL SYLLABLE ID;Lo;0;L;;;;;N;;;;; +C77C;HANGUL SYLLABLE IL;Lo;0;L;;;;;N;;;;; +C77D;HANGUL SYLLABLE ILG;Lo;0;L;;;;;N;;;;; +C77E;HANGUL SYLLABLE ILM;Lo;0;L;;;;;N;;;;; +C77F;HANGUL SYLLABLE ILB;Lo;0;L;;;;;N;;;;; +C780;HANGUL SYLLABLE ILS;Lo;0;L;;;;;N;;;;; +C781;HANGUL SYLLABLE ILT;Lo;0;L;;;;;N;;;;; +C782;HANGUL SYLLABLE ILP;Lo;0;L;;;;;N;;;;; +C783;HANGUL SYLLABLE ILH;Lo;0;L;;;;;N;;;;; +C784;HANGUL SYLLABLE IM;Lo;0;L;;;;;N;;;;; +C785;HANGUL SYLLABLE IB;Lo;0;L;;;;;N;;;;; +C786;HANGUL SYLLABLE IBS;Lo;0;L;;;;;N;;;;; +C787;HANGUL SYLLABLE IS;Lo;0;L;;;;;N;;;;; +C788;HANGUL SYLLABLE ISS;Lo;0;L;;;;;N;;;;; +C789;HANGUL SYLLABLE ING;Lo;0;L;;;;;N;;;;; +C78A;HANGUL SYLLABLE IJ;Lo;0;L;;;;;N;;;;; +C78B;HANGUL SYLLABLE IC;Lo;0;L;;;;;N;;;;; +C78C;HANGUL SYLLABLE IK;Lo;0;L;;;;;N;;;;; +C78D;HANGUL SYLLABLE IT;Lo;0;L;;;;;N;;;;; +C78E;HANGUL SYLLABLE IP;Lo;0;L;;;;;N;;;;; +C78F;HANGUL SYLLABLE IH;Lo;0;L;;;;;N;;;;; +C790;HANGUL SYLLABLE JA;Lo;0;L;;;;;N;;;;; +C791;HANGUL SYLLABLE JAG;Lo;0;L;;;;;N;;;;; +C792;HANGUL SYLLABLE JAGG;Lo;0;L;;;;;N;;;;; +C793;HANGUL SYLLABLE JAGS;Lo;0;L;;;;;N;;;;; +C794;HANGUL SYLLABLE JAN;Lo;0;L;;;;;N;;;;; +C795;HANGUL SYLLABLE JANI;Lo;0;L;;;;;N;;;;; +C796;HANGUL SYLLABLE JANH;Lo;0;L;;;;;N;;;;; +C797;HANGUL SYLLABLE JAD;Lo;0;L;;;;;N;;;;; +C798;HANGUL SYLLABLE JAL;Lo;0;L;;;;;N;;;;; +C799;HANGUL SYLLABLE JALG;Lo;0;L;;;;;N;;;;; +C79A;HANGUL SYLLABLE JALM;Lo;0;L;;;;;N;;;;; +C79B;HANGUL SYLLABLE JALB;Lo;0;L;;;;;N;;;;; +C79C;HANGUL SYLLABLE JALS;Lo;0;L;;;;;N;;;;; +C79D;HANGUL SYLLABLE JALT;Lo;0;L;;;;;N;;;;; +C79E;HANGUL SYLLABLE JALP;Lo;0;L;;;;;N;;;;; +C79F;HANGUL SYLLABLE JALH;Lo;0;L;;;;;N;;;;; +C7A0;HANGUL SYLLABLE JAM;Lo;0;L;;;;;N;;;;; +C7A1;HANGUL SYLLABLE JAB;Lo;0;L;;;;;N;;;;; +C7A2;HANGUL SYLLABLE JABS;Lo;0;L;;;;;N;;;;; +C7A3;HANGUL SYLLABLE JAS;Lo;0;L;;;;;N;;;;; +C7A4;HANGUL SYLLABLE JASS;Lo;0;L;;;;;N;;;;; +C7A5;HANGUL SYLLABLE JANG;Lo;0;L;;;;;N;;;;; +C7A6;HANGUL SYLLABLE JAJ;Lo;0;L;;;;;N;;;;; +C7A7;HANGUL SYLLABLE JAC;Lo;0;L;;;;;N;;;;; +C7A8;HANGUL SYLLABLE JAK;Lo;0;L;;;;;N;;;;; +C7A9;HANGUL SYLLABLE JAT;Lo;0;L;;;;;N;;;;; +C7AA;HANGUL SYLLABLE JAP;Lo;0;L;;;;;N;;;;; +C7AB;HANGUL SYLLABLE JAH;Lo;0;L;;;;;N;;;;; +C7AC;HANGUL SYLLABLE JAE;Lo;0;L;;;;;N;;;;; +C7AD;HANGUL SYLLABLE JAEG;Lo;0;L;;;;;N;;;;; +C7AE;HANGUL SYLLABLE JAEGG;Lo;0;L;;;;;N;;;;; +C7AF;HANGUL SYLLABLE JAEGS;Lo;0;L;;;;;N;;;;; +C7B0;HANGUL SYLLABLE JAEN;Lo;0;L;;;;;N;;;;; +C7B1;HANGUL SYLLABLE JAENI;Lo;0;L;;;;;N;;;;; +C7B2;HANGUL SYLLABLE JAENH;Lo;0;L;;;;;N;;;;; +C7B3;HANGUL SYLLABLE JAED;Lo;0;L;;;;;N;;;;; +C7B4;HANGUL SYLLABLE JAEL;Lo;0;L;;;;;N;;;;; +C7B5;HANGUL SYLLABLE JAELG;Lo;0;L;;;;;N;;;;; +C7B6;HANGUL SYLLABLE JAELM;Lo;0;L;;;;;N;;;;; +C7B7;HANGUL SYLLABLE JAELB;Lo;0;L;;;;;N;;;;; +C7B8;HANGUL SYLLABLE JAELS;Lo;0;L;;;;;N;;;;; +C7B9;HANGUL SYLLABLE JAELT;Lo;0;L;;;;;N;;;;; +C7BA;HANGUL SYLLABLE JAELP;Lo;0;L;;;;;N;;;;; +C7BB;HANGUL SYLLABLE JAELH;Lo;0;L;;;;;N;;;;; +C7BC;HANGUL SYLLABLE JAEM;Lo;0;L;;;;;N;;;;; +C7BD;HANGUL SYLLABLE JAEB;Lo;0;L;;;;;N;;;;; +C7BE;HANGUL SYLLABLE JAEBS;Lo;0;L;;;;;N;;;;; +C7BF;HANGUL SYLLABLE JAES;Lo;0;L;;;;;N;;;;; +C7C0;HANGUL SYLLABLE JAESS;Lo;0;L;;;;;N;;;;; +C7C1;HANGUL SYLLABLE JAENG;Lo;0;L;;;;;N;;;;; +C7C2;HANGUL SYLLABLE JAEJ;Lo;0;L;;;;;N;;;;; +C7C3;HANGUL SYLLABLE JAEC;Lo;0;L;;;;;N;;;;; +C7C4;HANGUL SYLLABLE JAEK;Lo;0;L;;;;;N;;;;; +C7C5;HANGUL SYLLABLE JAET;Lo;0;L;;;;;N;;;;; +C7C6;HANGUL SYLLABLE JAEP;Lo;0;L;;;;;N;;;;; +C7C7;HANGUL SYLLABLE JAEH;Lo;0;L;;;;;N;;;;; +C7C8;HANGUL SYLLABLE JYA;Lo;0;L;;;;;N;;;;; +C7C9;HANGUL SYLLABLE JYAG;Lo;0;L;;;;;N;;;;; +C7CA;HANGUL SYLLABLE JYAGG;Lo;0;L;;;;;N;;;;; +C7CB;HANGUL SYLLABLE JYAGS;Lo;0;L;;;;;N;;;;; +C7CC;HANGUL SYLLABLE JYAN;Lo;0;L;;;;;N;;;;; +C7CD;HANGUL SYLLABLE JYANI;Lo;0;L;;;;;N;;;;; +C7CE;HANGUL SYLLABLE JYANH;Lo;0;L;;;;;N;;;;; +C7CF;HANGUL SYLLABLE JYAD;Lo;0;L;;;;;N;;;;; +C7D0;HANGUL SYLLABLE JYAL;Lo;0;L;;;;;N;;;;; +C7D1;HANGUL SYLLABLE JYALG;Lo;0;L;;;;;N;;;;; +C7D2;HANGUL SYLLABLE JYALM;Lo;0;L;;;;;N;;;;; +C7D3;HANGUL SYLLABLE JYALB;Lo;0;L;;;;;N;;;;; +C7D4;HANGUL SYLLABLE JYALS;Lo;0;L;;;;;N;;;;; +C7D5;HANGUL SYLLABLE JYALT;Lo;0;L;;;;;N;;;;; +C7D6;HANGUL SYLLABLE JYALP;Lo;0;L;;;;;N;;;;; +C7D7;HANGUL SYLLABLE JYALH;Lo;0;L;;;;;N;;;;; +C7D8;HANGUL SYLLABLE JYAM;Lo;0;L;;;;;N;;;;; +C7D9;HANGUL SYLLABLE JYAB;Lo;0;L;;;;;N;;;;; +C7DA;HANGUL SYLLABLE JYABS;Lo;0;L;;;;;N;;;;; +C7DB;HANGUL SYLLABLE JYAS;Lo;0;L;;;;;N;;;;; +C7DC;HANGUL SYLLABLE JYASS;Lo;0;L;;;;;N;;;;; +C7DD;HANGUL SYLLABLE JYANG;Lo;0;L;;;;;N;;;;; +C7DE;HANGUL SYLLABLE JYAJ;Lo;0;L;;;;;N;;;;; +C7DF;HANGUL SYLLABLE JYAC;Lo;0;L;;;;;N;;;;; +C7E0;HANGUL SYLLABLE JYAK;Lo;0;L;;;;;N;;;;; +C7E1;HANGUL SYLLABLE JYAT;Lo;0;L;;;;;N;;;;; +C7E2;HANGUL SYLLABLE JYAP;Lo;0;L;;;;;N;;;;; +C7E3;HANGUL SYLLABLE JYAH;Lo;0;L;;;;;N;;;;; +C7E4;HANGUL SYLLABLE JYAE;Lo;0;L;;;;;N;;;;; +C7E5;HANGUL SYLLABLE JYAEG;Lo;0;L;;;;;N;;;;; +C7E6;HANGUL SYLLABLE JYAEGG;Lo;0;L;;;;;N;;;;; +C7E7;HANGUL SYLLABLE JYAEGS;Lo;0;L;;;;;N;;;;; +C7E8;HANGUL SYLLABLE JYAEN;Lo;0;L;;;;;N;;;;; +C7E9;HANGUL SYLLABLE JYAENI;Lo;0;L;;;;;N;;;;; +C7EA;HANGUL SYLLABLE JYAENH;Lo;0;L;;;;;N;;;;; +C7EB;HANGUL SYLLABLE JYAED;Lo;0;L;;;;;N;;;;; +C7EC;HANGUL SYLLABLE JYAEL;Lo;0;L;;;;;N;;;;; +C7ED;HANGUL SYLLABLE JYAELG;Lo;0;L;;;;;N;;;;; +C7EE;HANGUL SYLLABLE JYAELM;Lo;0;L;;;;;N;;;;; +C7EF;HANGUL SYLLABLE JYAELB;Lo;0;L;;;;;N;;;;; +C7F0;HANGUL SYLLABLE JYAELS;Lo;0;L;;;;;N;;;;; +C7F1;HANGUL SYLLABLE JYAELT;Lo;0;L;;;;;N;;;;; +C7F2;HANGUL SYLLABLE JYAELP;Lo;0;L;;;;;N;;;;; +C7F3;HANGUL SYLLABLE JYAELH;Lo;0;L;;;;;N;;;;; +C7F4;HANGUL SYLLABLE JYAEM;Lo;0;L;;;;;N;;;;; +C7F5;HANGUL SYLLABLE JYAEB;Lo;0;L;;;;;N;;;;; +C7F6;HANGUL SYLLABLE JYAEBS;Lo;0;L;;;;;N;;;;; +C7F7;HANGUL SYLLABLE JYAES;Lo;0;L;;;;;N;;;;; +C7F8;HANGUL SYLLABLE JYAESS;Lo;0;L;;;;;N;;;;; +C7F9;HANGUL SYLLABLE JYAENG;Lo;0;L;;;;;N;;;;; +C7FA;HANGUL SYLLABLE JYAEJ;Lo;0;L;;;;;N;;;;; +C7FB;HANGUL SYLLABLE JYAEC;Lo;0;L;;;;;N;;;;; +C7FC;HANGUL SYLLABLE JYAEK;Lo;0;L;;;;;N;;;;; +C7FD;HANGUL SYLLABLE JYAET;Lo;0;L;;;;;N;;;;; +C7FE;HANGUL SYLLABLE JYAEP;Lo;0;L;;;;;N;;;;; +C7FF;HANGUL SYLLABLE JYAEH;Lo;0;L;;;;;N;;;;; +C800;HANGUL SYLLABLE JEO;Lo;0;L;;;;;N;;;;; +C801;HANGUL SYLLABLE JEOG;Lo;0;L;;;;;N;;;;; +C802;HANGUL SYLLABLE JEOGG;Lo;0;L;;;;;N;;;;; +C803;HANGUL SYLLABLE JEOGS;Lo;0;L;;;;;N;;;;; +C804;HANGUL SYLLABLE JEON;Lo;0;L;;;;;N;;;;; +C805;HANGUL SYLLABLE JEONI;Lo;0;L;;;;;N;;;;; +C806;HANGUL SYLLABLE JEONH;Lo;0;L;;;;;N;;;;; +C807;HANGUL SYLLABLE JEOD;Lo;0;L;;;;;N;;;;; +C808;HANGUL SYLLABLE JEOL;Lo;0;L;;;;;N;;;;; +C809;HANGUL SYLLABLE JEOLG;Lo;0;L;;;;;N;;;;; +C80A;HANGUL SYLLABLE JEOLM;Lo;0;L;;;;;N;;;;; +C80B;HANGUL SYLLABLE JEOLB;Lo;0;L;;;;;N;;;;; +C80C;HANGUL SYLLABLE JEOLS;Lo;0;L;;;;;N;;;;; +C80D;HANGUL SYLLABLE JEOLT;Lo;0;L;;;;;N;;;;; +C80E;HANGUL SYLLABLE JEOLP;Lo;0;L;;;;;N;;;;; +C80F;HANGUL SYLLABLE JEOLH;Lo;0;L;;;;;N;;;;; +C810;HANGUL SYLLABLE JEOM;Lo;0;L;;;;;N;;;;; +C811;HANGUL SYLLABLE JEOB;Lo;0;L;;;;;N;;;;; +C812;HANGUL SYLLABLE JEOBS;Lo;0;L;;;;;N;;;;; +C813;HANGUL SYLLABLE JEOS;Lo;0;L;;;;;N;;;;; +C814;HANGUL SYLLABLE JEOSS;Lo;0;L;;;;;N;;;;; +C815;HANGUL SYLLABLE JEONG;Lo;0;L;;;;;N;;;;; +C816;HANGUL SYLLABLE JEOJ;Lo;0;L;;;;;N;;;;; +C817;HANGUL SYLLABLE JEOC;Lo;0;L;;;;;N;;;;; +C818;HANGUL SYLLABLE JEOK;Lo;0;L;;;;;N;;;;; +C819;HANGUL SYLLABLE JEOT;Lo;0;L;;;;;N;;;;; +C81A;HANGUL SYLLABLE JEOP;Lo;0;L;;;;;N;;;;; +C81B;HANGUL SYLLABLE JEOH;Lo;0;L;;;;;N;;;;; +C81C;HANGUL SYLLABLE JE;Lo;0;L;;;;;N;;;;; +C81D;HANGUL SYLLABLE JEG;Lo;0;L;;;;;N;;;;; +C81E;HANGUL SYLLABLE JEGG;Lo;0;L;;;;;N;;;;; +C81F;HANGUL SYLLABLE JEGS;Lo;0;L;;;;;N;;;;; +C820;HANGUL SYLLABLE JEN;Lo;0;L;;;;;N;;;;; +C821;HANGUL SYLLABLE JENI;Lo;0;L;;;;;N;;;;; +C822;HANGUL SYLLABLE JENH;Lo;0;L;;;;;N;;;;; +C823;HANGUL SYLLABLE JED;Lo;0;L;;;;;N;;;;; +C824;HANGUL SYLLABLE JEL;Lo;0;L;;;;;N;;;;; +C825;HANGUL SYLLABLE JELG;Lo;0;L;;;;;N;;;;; +C826;HANGUL SYLLABLE JELM;Lo;0;L;;;;;N;;;;; +C827;HANGUL SYLLABLE JELB;Lo;0;L;;;;;N;;;;; +C828;HANGUL SYLLABLE JELS;Lo;0;L;;;;;N;;;;; +C829;HANGUL SYLLABLE JELT;Lo;0;L;;;;;N;;;;; +C82A;HANGUL SYLLABLE JELP;Lo;0;L;;;;;N;;;;; +C82B;HANGUL SYLLABLE JELH;Lo;0;L;;;;;N;;;;; +C82C;HANGUL SYLLABLE JEM;Lo;0;L;;;;;N;;;;; +C82D;HANGUL SYLLABLE JEB;Lo;0;L;;;;;N;;;;; +C82E;HANGUL SYLLABLE JEBS;Lo;0;L;;;;;N;;;;; +C82F;HANGUL SYLLABLE JES;Lo;0;L;;;;;N;;;;; +C830;HANGUL SYLLABLE JESS;Lo;0;L;;;;;N;;;;; +C831;HANGUL SYLLABLE JENG;Lo;0;L;;;;;N;;;;; +C832;HANGUL SYLLABLE JEJ;Lo;0;L;;;;;N;;;;; +C833;HANGUL SYLLABLE JEC;Lo;0;L;;;;;N;;;;; +C834;HANGUL SYLLABLE JEK;Lo;0;L;;;;;N;;;;; +C835;HANGUL SYLLABLE JET;Lo;0;L;;;;;N;;;;; +C836;HANGUL SYLLABLE JEP;Lo;0;L;;;;;N;;;;; +C837;HANGUL SYLLABLE JEH;Lo;0;L;;;;;N;;;;; +C838;HANGUL SYLLABLE JYEO;Lo;0;L;;;;;N;;;;; +C839;HANGUL SYLLABLE JYEOG;Lo;0;L;;;;;N;;;;; +C83A;HANGUL SYLLABLE JYEOGG;Lo;0;L;;;;;N;;;;; +C83B;HANGUL SYLLABLE JYEOGS;Lo;0;L;;;;;N;;;;; +C83C;HANGUL SYLLABLE JYEON;Lo;0;L;;;;;N;;;;; +C83D;HANGUL SYLLABLE JYEONI;Lo;0;L;;;;;N;;;;; +C83E;HANGUL SYLLABLE JYEONH;Lo;0;L;;;;;N;;;;; +C83F;HANGUL SYLLABLE JYEOD;Lo;0;L;;;;;N;;;;; +C840;HANGUL SYLLABLE JYEOL;Lo;0;L;;;;;N;;;;; +C841;HANGUL SYLLABLE JYEOLG;Lo;0;L;;;;;N;;;;; +C842;HANGUL SYLLABLE JYEOLM;Lo;0;L;;;;;N;;;;; +C843;HANGUL SYLLABLE JYEOLB;Lo;0;L;;;;;N;;;;; +C844;HANGUL SYLLABLE JYEOLS;Lo;0;L;;;;;N;;;;; +C845;HANGUL SYLLABLE JYEOLT;Lo;0;L;;;;;N;;;;; +C846;HANGUL SYLLABLE JYEOLP;Lo;0;L;;;;;N;;;;; +C847;HANGUL SYLLABLE JYEOLH;Lo;0;L;;;;;N;;;;; +C848;HANGUL SYLLABLE JYEOM;Lo;0;L;;;;;N;;;;; +C849;HANGUL SYLLABLE JYEOB;Lo;0;L;;;;;N;;;;; +C84A;HANGUL SYLLABLE JYEOBS;Lo;0;L;;;;;N;;;;; +C84B;HANGUL SYLLABLE JYEOS;Lo;0;L;;;;;N;;;;; +C84C;HANGUL SYLLABLE JYEOSS;Lo;0;L;;;;;N;;;;; +C84D;HANGUL SYLLABLE JYEONG;Lo;0;L;;;;;N;;;;; +C84E;HANGUL SYLLABLE JYEOJ;Lo;0;L;;;;;N;;;;; +C84F;HANGUL SYLLABLE JYEOC;Lo;0;L;;;;;N;;;;; +C850;HANGUL SYLLABLE JYEOK;Lo;0;L;;;;;N;;;;; +C851;HANGUL SYLLABLE JYEOT;Lo;0;L;;;;;N;;;;; +C852;HANGUL SYLLABLE JYEOP;Lo;0;L;;;;;N;;;;; +C853;HANGUL SYLLABLE JYEOH;Lo;0;L;;;;;N;;;;; +C854;HANGUL SYLLABLE JYE;Lo;0;L;;;;;N;;;;; +C855;HANGUL SYLLABLE JYEG;Lo;0;L;;;;;N;;;;; +C856;HANGUL SYLLABLE JYEGG;Lo;0;L;;;;;N;;;;; +C857;HANGUL SYLLABLE JYEGS;Lo;0;L;;;;;N;;;;; +C858;HANGUL SYLLABLE JYEN;Lo;0;L;;;;;N;;;;; +C859;HANGUL SYLLABLE JYENI;Lo;0;L;;;;;N;;;;; +C85A;HANGUL SYLLABLE JYENH;Lo;0;L;;;;;N;;;;; +C85B;HANGUL SYLLABLE JYED;Lo;0;L;;;;;N;;;;; +C85C;HANGUL SYLLABLE JYEL;Lo;0;L;;;;;N;;;;; +C85D;HANGUL SYLLABLE JYELG;Lo;0;L;;;;;N;;;;; +C85E;HANGUL SYLLABLE JYELM;Lo;0;L;;;;;N;;;;; +C85F;HANGUL SYLLABLE JYELB;Lo;0;L;;;;;N;;;;; +C860;HANGUL SYLLABLE JYELS;Lo;0;L;;;;;N;;;;; +C861;HANGUL SYLLABLE JYELT;Lo;0;L;;;;;N;;;;; +C862;HANGUL SYLLABLE JYELP;Lo;0;L;;;;;N;;;;; +C863;HANGUL SYLLABLE JYELH;Lo;0;L;;;;;N;;;;; +C864;HANGUL SYLLABLE JYEM;Lo;0;L;;;;;N;;;;; +C865;HANGUL SYLLABLE JYEB;Lo;0;L;;;;;N;;;;; +C866;HANGUL SYLLABLE JYEBS;Lo;0;L;;;;;N;;;;; +C867;HANGUL SYLLABLE JYES;Lo;0;L;;;;;N;;;;; +C868;HANGUL SYLLABLE JYESS;Lo;0;L;;;;;N;;;;; +C869;HANGUL SYLLABLE JYENG;Lo;0;L;;;;;N;;;;; +C86A;HANGUL SYLLABLE JYEJ;Lo;0;L;;;;;N;;;;; +C86B;HANGUL SYLLABLE JYEC;Lo;0;L;;;;;N;;;;; +C86C;HANGUL SYLLABLE JYEK;Lo;0;L;;;;;N;;;;; +C86D;HANGUL SYLLABLE JYET;Lo;0;L;;;;;N;;;;; +C86E;HANGUL SYLLABLE JYEP;Lo;0;L;;;;;N;;;;; +C86F;HANGUL SYLLABLE JYEH;Lo;0;L;;;;;N;;;;; +C870;HANGUL SYLLABLE JO;Lo;0;L;;;;;N;;;;; +C871;HANGUL SYLLABLE JOG;Lo;0;L;;;;;N;;;;; +C872;HANGUL SYLLABLE JOGG;Lo;0;L;;;;;N;;;;; +C873;HANGUL SYLLABLE JOGS;Lo;0;L;;;;;N;;;;; +C874;HANGUL SYLLABLE JON;Lo;0;L;;;;;N;;;;; +C875;HANGUL SYLLABLE JONI;Lo;0;L;;;;;N;;;;; +C876;HANGUL SYLLABLE JONH;Lo;0;L;;;;;N;;;;; +C877;HANGUL SYLLABLE JOD;Lo;0;L;;;;;N;;;;; +C878;HANGUL SYLLABLE JOL;Lo;0;L;;;;;N;;;;; +C879;HANGUL SYLLABLE JOLG;Lo;0;L;;;;;N;;;;; +C87A;HANGUL SYLLABLE JOLM;Lo;0;L;;;;;N;;;;; +C87B;HANGUL SYLLABLE JOLB;Lo;0;L;;;;;N;;;;; +C87C;HANGUL SYLLABLE JOLS;Lo;0;L;;;;;N;;;;; +C87D;HANGUL SYLLABLE JOLT;Lo;0;L;;;;;N;;;;; +C87E;HANGUL SYLLABLE JOLP;Lo;0;L;;;;;N;;;;; +C87F;HANGUL SYLLABLE JOLH;Lo;0;L;;;;;N;;;;; +C880;HANGUL SYLLABLE JOM;Lo;0;L;;;;;N;;;;; +C881;HANGUL SYLLABLE JOB;Lo;0;L;;;;;N;;;;; +C882;HANGUL SYLLABLE JOBS;Lo;0;L;;;;;N;;;;; +C883;HANGUL SYLLABLE JOS;Lo;0;L;;;;;N;;;;; +C884;HANGUL SYLLABLE JOSS;Lo;0;L;;;;;N;;;;; +C885;HANGUL SYLLABLE JONG;Lo;0;L;;;;;N;;;;; +C886;HANGUL SYLLABLE JOJ;Lo;0;L;;;;;N;;;;; +C887;HANGUL SYLLABLE JOC;Lo;0;L;;;;;N;;;;; +C888;HANGUL SYLLABLE JOK;Lo;0;L;;;;;N;;;;; +C889;HANGUL SYLLABLE JOT;Lo;0;L;;;;;N;;;;; +C88A;HANGUL SYLLABLE JOP;Lo;0;L;;;;;N;;;;; +C88B;HANGUL SYLLABLE JOH;Lo;0;L;;;;;N;;;;; +C88C;HANGUL SYLLABLE JWA;Lo;0;L;;;;;N;;;;; +C88D;HANGUL SYLLABLE JWAG;Lo;0;L;;;;;N;;;;; +C88E;HANGUL SYLLABLE JWAGG;Lo;0;L;;;;;N;;;;; +C88F;HANGUL SYLLABLE JWAGS;Lo;0;L;;;;;N;;;;; +C890;HANGUL SYLLABLE JWAN;Lo;0;L;;;;;N;;;;; +C891;HANGUL SYLLABLE JWANI;Lo;0;L;;;;;N;;;;; +C892;HANGUL SYLLABLE JWANH;Lo;0;L;;;;;N;;;;; +C893;HANGUL SYLLABLE JWAD;Lo;0;L;;;;;N;;;;; +C894;HANGUL SYLLABLE JWAL;Lo;0;L;;;;;N;;;;; +C895;HANGUL SYLLABLE JWALG;Lo;0;L;;;;;N;;;;; +C896;HANGUL SYLLABLE JWALM;Lo;0;L;;;;;N;;;;; +C897;HANGUL SYLLABLE JWALB;Lo;0;L;;;;;N;;;;; +C898;HANGUL SYLLABLE JWALS;Lo;0;L;;;;;N;;;;; +C899;HANGUL SYLLABLE JWALT;Lo;0;L;;;;;N;;;;; +C89A;HANGUL SYLLABLE JWALP;Lo;0;L;;;;;N;;;;; +C89B;HANGUL SYLLABLE JWALH;Lo;0;L;;;;;N;;;;; +C89C;HANGUL SYLLABLE JWAM;Lo;0;L;;;;;N;;;;; +C89D;HANGUL SYLLABLE JWAB;Lo;0;L;;;;;N;;;;; +C89E;HANGUL SYLLABLE JWABS;Lo;0;L;;;;;N;;;;; +C89F;HANGUL SYLLABLE JWAS;Lo;0;L;;;;;N;;;;; +C8A0;HANGUL SYLLABLE JWASS;Lo;0;L;;;;;N;;;;; +C8A1;HANGUL SYLLABLE JWANG;Lo;0;L;;;;;N;;;;; +C8A2;HANGUL SYLLABLE JWAJ;Lo;0;L;;;;;N;;;;; +C8A3;HANGUL SYLLABLE JWAC;Lo;0;L;;;;;N;;;;; +C8A4;HANGUL SYLLABLE JWAK;Lo;0;L;;;;;N;;;;; +C8A5;HANGUL SYLLABLE JWAT;Lo;0;L;;;;;N;;;;; +C8A6;HANGUL SYLLABLE JWAP;Lo;0;L;;;;;N;;;;; +C8A7;HANGUL SYLLABLE JWAH;Lo;0;L;;;;;N;;;;; +C8A8;HANGUL SYLLABLE JWAE;Lo;0;L;;;;;N;;;;; +C8A9;HANGUL SYLLABLE JWAEG;Lo;0;L;;;;;N;;;;; +C8AA;HANGUL SYLLABLE JWAEGG;Lo;0;L;;;;;N;;;;; +C8AB;HANGUL SYLLABLE JWAEGS;Lo;0;L;;;;;N;;;;; +C8AC;HANGUL SYLLABLE JWAEN;Lo;0;L;;;;;N;;;;; +C8AD;HANGUL SYLLABLE JWAENI;Lo;0;L;;;;;N;;;;; +C8AE;HANGUL SYLLABLE JWAENH;Lo;0;L;;;;;N;;;;; +C8AF;HANGUL SYLLABLE JWAED;Lo;0;L;;;;;N;;;;; +C8B0;HANGUL SYLLABLE JWAEL;Lo;0;L;;;;;N;;;;; +C8B1;HANGUL SYLLABLE JWAELG;Lo;0;L;;;;;N;;;;; +C8B2;HANGUL SYLLABLE JWAELM;Lo;0;L;;;;;N;;;;; +C8B3;HANGUL SYLLABLE JWAELB;Lo;0;L;;;;;N;;;;; +C8B4;HANGUL SYLLABLE JWAELS;Lo;0;L;;;;;N;;;;; +C8B5;HANGUL SYLLABLE JWAELT;Lo;0;L;;;;;N;;;;; +C8B6;HANGUL SYLLABLE JWAELP;Lo;0;L;;;;;N;;;;; +C8B7;HANGUL SYLLABLE JWAELH;Lo;0;L;;;;;N;;;;; +C8B8;HANGUL SYLLABLE JWAEM;Lo;0;L;;;;;N;;;;; +C8B9;HANGUL SYLLABLE JWAEB;Lo;0;L;;;;;N;;;;; +C8BA;HANGUL SYLLABLE JWAEBS;Lo;0;L;;;;;N;;;;; +C8BB;HANGUL SYLLABLE JWAES;Lo;0;L;;;;;N;;;;; +C8BC;HANGUL SYLLABLE JWAESS;Lo;0;L;;;;;N;;;;; +C8BD;HANGUL SYLLABLE JWAENG;Lo;0;L;;;;;N;;;;; +C8BE;HANGUL SYLLABLE JWAEJ;Lo;0;L;;;;;N;;;;; +C8BF;HANGUL SYLLABLE JWAEC;Lo;0;L;;;;;N;;;;; +C8C0;HANGUL SYLLABLE JWAEK;Lo;0;L;;;;;N;;;;; +C8C1;HANGUL SYLLABLE JWAET;Lo;0;L;;;;;N;;;;; +C8C2;HANGUL SYLLABLE JWAEP;Lo;0;L;;;;;N;;;;; +C8C3;HANGUL SYLLABLE JWAEH;Lo;0;L;;;;;N;;;;; +C8C4;HANGUL SYLLABLE JOE;Lo;0;L;;;;;N;;;;; +C8C5;HANGUL SYLLABLE JOEG;Lo;0;L;;;;;N;;;;; +C8C6;HANGUL SYLLABLE JOEGG;Lo;0;L;;;;;N;;;;; +C8C7;HANGUL SYLLABLE JOEGS;Lo;0;L;;;;;N;;;;; +C8C8;HANGUL SYLLABLE JOEN;Lo;0;L;;;;;N;;;;; +C8C9;HANGUL SYLLABLE JOENI;Lo;0;L;;;;;N;;;;; +C8CA;HANGUL SYLLABLE JOENH;Lo;0;L;;;;;N;;;;; +C8CB;HANGUL SYLLABLE JOED;Lo;0;L;;;;;N;;;;; +C8CC;HANGUL SYLLABLE JOEL;Lo;0;L;;;;;N;;;;; +C8CD;HANGUL SYLLABLE JOELG;Lo;0;L;;;;;N;;;;; +C8CE;HANGUL SYLLABLE JOELM;Lo;0;L;;;;;N;;;;; +C8CF;HANGUL SYLLABLE JOELB;Lo;0;L;;;;;N;;;;; +C8D0;HANGUL SYLLABLE JOELS;Lo;0;L;;;;;N;;;;; +C8D1;HANGUL SYLLABLE JOELT;Lo;0;L;;;;;N;;;;; +C8D2;HANGUL SYLLABLE JOELP;Lo;0;L;;;;;N;;;;; +C8D3;HANGUL SYLLABLE JOELH;Lo;0;L;;;;;N;;;;; +C8D4;HANGUL SYLLABLE JOEM;Lo;0;L;;;;;N;;;;; +C8D5;HANGUL SYLLABLE JOEB;Lo;0;L;;;;;N;;;;; +C8D6;HANGUL SYLLABLE JOEBS;Lo;0;L;;;;;N;;;;; +C8D7;HANGUL SYLLABLE JOES;Lo;0;L;;;;;N;;;;; +C8D8;HANGUL SYLLABLE JOESS;Lo;0;L;;;;;N;;;;; +C8D9;HANGUL SYLLABLE JOENG;Lo;0;L;;;;;N;;;;; +C8DA;HANGUL SYLLABLE JOEJ;Lo;0;L;;;;;N;;;;; +C8DB;HANGUL SYLLABLE JOEC;Lo;0;L;;;;;N;;;;; +C8DC;HANGUL SYLLABLE JOEK;Lo;0;L;;;;;N;;;;; +C8DD;HANGUL SYLLABLE JOET;Lo;0;L;;;;;N;;;;; +C8DE;HANGUL SYLLABLE JOEP;Lo;0;L;;;;;N;;;;; +C8DF;HANGUL SYLLABLE JOEH;Lo;0;L;;;;;N;;;;; +C8E0;HANGUL SYLLABLE JYO;Lo;0;L;;;;;N;;;;; +C8E1;HANGUL SYLLABLE JYOG;Lo;0;L;;;;;N;;;;; +C8E2;HANGUL SYLLABLE JYOGG;Lo;0;L;;;;;N;;;;; +C8E3;HANGUL SYLLABLE JYOGS;Lo;0;L;;;;;N;;;;; +C8E4;HANGUL SYLLABLE JYON;Lo;0;L;;;;;N;;;;; +C8E5;HANGUL SYLLABLE JYONI;Lo;0;L;;;;;N;;;;; +C8E6;HANGUL SYLLABLE JYONH;Lo;0;L;;;;;N;;;;; +C8E7;HANGUL SYLLABLE JYOD;Lo;0;L;;;;;N;;;;; +C8E8;HANGUL SYLLABLE JYOL;Lo;0;L;;;;;N;;;;; +C8E9;HANGUL SYLLABLE JYOLG;Lo;0;L;;;;;N;;;;; +C8EA;HANGUL SYLLABLE JYOLM;Lo;0;L;;;;;N;;;;; +C8EB;HANGUL SYLLABLE JYOLB;Lo;0;L;;;;;N;;;;; +C8EC;HANGUL SYLLABLE JYOLS;Lo;0;L;;;;;N;;;;; +C8ED;HANGUL SYLLABLE JYOLT;Lo;0;L;;;;;N;;;;; +C8EE;HANGUL SYLLABLE JYOLP;Lo;0;L;;;;;N;;;;; +C8EF;HANGUL SYLLABLE JYOLH;Lo;0;L;;;;;N;;;;; +C8F0;HANGUL SYLLABLE JYOM;Lo;0;L;;;;;N;;;;; +C8F1;HANGUL SYLLABLE JYOB;Lo;0;L;;;;;N;;;;; +C8F2;HANGUL SYLLABLE JYOBS;Lo;0;L;;;;;N;;;;; +C8F3;HANGUL SYLLABLE JYOS;Lo;0;L;;;;;N;;;;; +C8F4;HANGUL SYLLABLE JYOSS;Lo;0;L;;;;;N;;;;; +C8F5;HANGUL SYLLABLE JYONG;Lo;0;L;;;;;N;;;;; +C8F6;HANGUL SYLLABLE JYOJ;Lo;0;L;;;;;N;;;;; +C8F7;HANGUL SYLLABLE JYOC;Lo;0;L;;;;;N;;;;; +C8F8;HANGUL SYLLABLE JYOK;Lo;0;L;;;;;N;;;;; +C8F9;HANGUL SYLLABLE JYOT;Lo;0;L;;;;;N;;;;; +C8FA;HANGUL SYLLABLE JYOP;Lo;0;L;;;;;N;;;;; +C8FB;HANGUL SYLLABLE JYOH;Lo;0;L;;;;;N;;;;; +C8FC;HANGUL SYLLABLE JU;Lo;0;L;;;;;N;;;;; +C8FD;HANGUL SYLLABLE JUG;Lo;0;L;;;;;N;;;;; +C8FE;HANGUL SYLLABLE JUGG;Lo;0;L;;;;;N;;;;; +C8FF;HANGUL SYLLABLE JUGS;Lo;0;L;;;;;N;;;;; +C900;HANGUL SYLLABLE JUN;Lo;0;L;;;;;N;;;;; +C901;HANGUL SYLLABLE JUNI;Lo;0;L;;;;;N;;;;; +C902;HANGUL SYLLABLE JUNH;Lo;0;L;;;;;N;;;;; +C903;HANGUL SYLLABLE JUD;Lo;0;L;;;;;N;;;;; +C904;HANGUL SYLLABLE JUL;Lo;0;L;;;;;N;;;;; +C905;HANGUL SYLLABLE JULG;Lo;0;L;;;;;N;;;;; +C906;HANGUL SYLLABLE JULM;Lo;0;L;;;;;N;;;;; +C907;HANGUL SYLLABLE JULB;Lo;0;L;;;;;N;;;;; +C908;HANGUL SYLLABLE JULS;Lo;0;L;;;;;N;;;;; +C909;HANGUL SYLLABLE JULT;Lo;0;L;;;;;N;;;;; +C90A;HANGUL SYLLABLE JULP;Lo;0;L;;;;;N;;;;; +C90B;HANGUL SYLLABLE JULH;Lo;0;L;;;;;N;;;;; +C90C;HANGUL SYLLABLE JUM;Lo;0;L;;;;;N;;;;; +C90D;HANGUL SYLLABLE JUB;Lo;0;L;;;;;N;;;;; +C90E;HANGUL SYLLABLE JUBS;Lo;0;L;;;;;N;;;;; +C90F;HANGUL SYLLABLE JUS;Lo;0;L;;;;;N;;;;; +C910;HANGUL SYLLABLE JUSS;Lo;0;L;;;;;N;;;;; +C911;HANGUL SYLLABLE JUNG;Lo;0;L;;;;;N;;;;; +C912;HANGUL SYLLABLE JUJ;Lo;0;L;;;;;N;;;;; +C913;HANGUL SYLLABLE JUC;Lo;0;L;;;;;N;;;;; +C914;HANGUL SYLLABLE JUK;Lo;0;L;;;;;N;;;;; +C915;HANGUL SYLLABLE JUT;Lo;0;L;;;;;N;;;;; +C916;HANGUL SYLLABLE JUP;Lo;0;L;;;;;N;;;;; +C917;HANGUL SYLLABLE JUH;Lo;0;L;;;;;N;;;;; +C918;HANGUL SYLLABLE JWEO;Lo;0;L;;;;;N;;;;; +C919;HANGUL SYLLABLE JWEOG;Lo;0;L;;;;;N;;;;; +C91A;HANGUL SYLLABLE JWEOGG;Lo;0;L;;;;;N;;;;; +C91B;HANGUL SYLLABLE JWEOGS;Lo;0;L;;;;;N;;;;; +C91C;HANGUL SYLLABLE JWEON;Lo;0;L;;;;;N;;;;; +C91D;HANGUL SYLLABLE JWEONI;Lo;0;L;;;;;N;;;;; +C91E;HANGUL SYLLABLE JWEONH;Lo;0;L;;;;;N;;;;; +C91F;HANGUL SYLLABLE JWEOD;Lo;0;L;;;;;N;;;;; +C920;HANGUL SYLLABLE JWEOL;Lo;0;L;;;;;N;;;;; +C921;HANGUL SYLLABLE JWEOLG;Lo;0;L;;;;;N;;;;; +C922;HANGUL SYLLABLE JWEOLM;Lo;0;L;;;;;N;;;;; +C923;HANGUL SYLLABLE JWEOLB;Lo;0;L;;;;;N;;;;; +C924;HANGUL SYLLABLE JWEOLS;Lo;0;L;;;;;N;;;;; +C925;HANGUL SYLLABLE JWEOLT;Lo;0;L;;;;;N;;;;; +C926;HANGUL SYLLABLE JWEOLP;Lo;0;L;;;;;N;;;;; +C927;HANGUL SYLLABLE JWEOLH;Lo;0;L;;;;;N;;;;; +C928;HANGUL SYLLABLE JWEOM;Lo;0;L;;;;;N;;;;; +C929;HANGUL SYLLABLE JWEOB;Lo;0;L;;;;;N;;;;; +C92A;HANGUL SYLLABLE JWEOBS;Lo;0;L;;;;;N;;;;; +C92B;HANGUL SYLLABLE JWEOS;Lo;0;L;;;;;N;;;;; +C92C;HANGUL SYLLABLE JWEOSS;Lo;0;L;;;;;N;;;;; +C92D;HANGUL SYLLABLE JWEONG;Lo;0;L;;;;;N;;;;; +C92E;HANGUL SYLLABLE JWEOJ;Lo;0;L;;;;;N;;;;; +C92F;HANGUL SYLLABLE JWEOC;Lo;0;L;;;;;N;;;;; +C930;HANGUL SYLLABLE JWEOK;Lo;0;L;;;;;N;;;;; +C931;HANGUL SYLLABLE JWEOT;Lo;0;L;;;;;N;;;;; +C932;HANGUL SYLLABLE JWEOP;Lo;0;L;;;;;N;;;;; +C933;HANGUL SYLLABLE JWEOH;Lo;0;L;;;;;N;;;;; +C934;HANGUL SYLLABLE JWE;Lo;0;L;;;;;N;;;;; +C935;HANGUL SYLLABLE JWEG;Lo;0;L;;;;;N;;;;; +C936;HANGUL SYLLABLE JWEGG;Lo;0;L;;;;;N;;;;; +C937;HANGUL SYLLABLE JWEGS;Lo;0;L;;;;;N;;;;; +C938;HANGUL SYLLABLE JWEN;Lo;0;L;;;;;N;;;;; +C939;HANGUL SYLLABLE JWENI;Lo;0;L;;;;;N;;;;; +C93A;HANGUL SYLLABLE JWENH;Lo;0;L;;;;;N;;;;; +C93B;HANGUL SYLLABLE JWED;Lo;0;L;;;;;N;;;;; +C93C;HANGUL SYLLABLE JWEL;Lo;0;L;;;;;N;;;;; +C93D;HANGUL SYLLABLE JWELG;Lo;0;L;;;;;N;;;;; +C93E;HANGUL SYLLABLE JWELM;Lo;0;L;;;;;N;;;;; +C93F;HANGUL SYLLABLE JWELB;Lo;0;L;;;;;N;;;;; +C940;HANGUL SYLLABLE JWELS;Lo;0;L;;;;;N;;;;; +C941;HANGUL SYLLABLE JWELT;Lo;0;L;;;;;N;;;;; +C942;HANGUL SYLLABLE JWELP;Lo;0;L;;;;;N;;;;; +C943;HANGUL SYLLABLE JWELH;Lo;0;L;;;;;N;;;;; +C944;HANGUL SYLLABLE JWEM;Lo;0;L;;;;;N;;;;; +C945;HANGUL SYLLABLE JWEB;Lo;0;L;;;;;N;;;;; +C946;HANGUL SYLLABLE JWEBS;Lo;0;L;;;;;N;;;;; +C947;HANGUL SYLLABLE JWES;Lo;0;L;;;;;N;;;;; +C948;HANGUL SYLLABLE JWESS;Lo;0;L;;;;;N;;;;; +C949;HANGUL SYLLABLE JWENG;Lo;0;L;;;;;N;;;;; +C94A;HANGUL SYLLABLE JWEJ;Lo;0;L;;;;;N;;;;; +C94B;HANGUL SYLLABLE JWEC;Lo;0;L;;;;;N;;;;; +C94C;HANGUL SYLLABLE JWEK;Lo;0;L;;;;;N;;;;; +C94D;HANGUL SYLLABLE JWET;Lo;0;L;;;;;N;;;;; +C94E;HANGUL SYLLABLE JWEP;Lo;0;L;;;;;N;;;;; +C94F;HANGUL SYLLABLE JWEH;Lo;0;L;;;;;N;;;;; +C950;HANGUL SYLLABLE JWI;Lo;0;L;;;;;N;;;;; +C951;HANGUL SYLLABLE JWIG;Lo;0;L;;;;;N;;;;; +C952;HANGUL SYLLABLE JWIGG;Lo;0;L;;;;;N;;;;; +C953;HANGUL SYLLABLE JWIGS;Lo;0;L;;;;;N;;;;; +C954;HANGUL SYLLABLE JWIN;Lo;0;L;;;;;N;;;;; +C955;HANGUL SYLLABLE JWINI;Lo;0;L;;;;;N;;;;; +C956;HANGUL SYLLABLE JWINH;Lo;0;L;;;;;N;;;;; +C957;HANGUL SYLLABLE JWID;Lo;0;L;;;;;N;;;;; +C958;HANGUL SYLLABLE JWIL;Lo;0;L;;;;;N;;;;; +C959;HANGUL SYLLABLE JWILG;Lo;0;L;;;;;N;;;;; +C95A;HANGUL SYLLABLE JWILM;Lo;0;L;;;;;N;;;;; +C95B;HANGUL SYLLABLE JWILB;Lo;0;L;;;;;N;;;;; +C95C;HANGUL SYLLABLE JWILS;Lo;0;L;;;;;N;;;;; +C95D;HANGUL SYLLABLE JWILT;Lo;0;L;;;;;N;;;;; +C95E;HANGUL SYLLABLE JWILP;Lo;0;L;;;;;N;;;;; +C95F;HANGUL SYLLABLE JWILH;Lo;0;L;;;;;N;;;;; +C960;HANGUL SYLLABLE JWIM;Lo;0;L;;;;;N;;;;; +C961;HANGUL SYLLABLE JWIB;Lo;0;L;;;;;N;;;;; +C962;HANGUL SYLLABLE JWIBS;Lo;0;L;;;;;N;;;;; +C963;HANGUL SYLLABLE JWIS;Lo;0;L;;;;;N;;;;; +C964;HANGUL SYLLABLE JWISS;Lo;0;L;;;;;N;;;;; +C965;HANGUL SYLLABLE JWING;Lo;0;L;;;;;N;;;;; +C966;HANGUL SYLLABLE JWIJ;Lo;0;L;;;;;N;;;;; +C967;HANGUL SYLLABLE JWIC;Lo;0;L;;;;;N;;;;; +C968;HANGUL SYLLABLE JWIK;Lo;0;L;;;;;N;;;;; +C969;HANGUL SYLLABLE JWIT;Lo;0;L;;;;;N;;;;; +C96A;HANGUL SYLLABLE JWIP;Lo;0;L;;;;;N;;;;; +C96B;HANGUL SYLLABLE JWIH;Lo;0;L;;;;;N;;;;; +C96C;HANGUL SYLLABLE JYU;Lo;0;L;;;;;N;;;;; +C96D;HANGUL SYLLABLE JYUG;Lo;0;L;;;;;N;;;;; +C96E;HANGUL SYLLABLE JYUGG;Lo;0;L;;;;;N;;;;; +C96F;HANGUL SYLLABLE JYUGS;Lo;0;L;;;;;N;;;;; +C970;HANGUL SYLLABLE JYUN;Lo;0;L;;;;;N;;;;; +C971;HANGUL SYLLABLE JYUNI;Lo;0;L;;;;;N;;;;; +C972;HANGUL SYLLABLE JYUNH;Lo;0;L;;;;;N;;;;; +C973;HANGUL SYLLABLE JYUD;Lo;0;L;;;;;N;;;;; +C974;HANGUL SYLLABLE JYUL;Lo;0;L;;;;;N;;;;; +C975;HANGUL SYLLABLE JYULG;Lo;0;L;;;;;N;;;;; +C976;HANGUL SYLLABLE JYULM;Lo;0;L;;;;;N;;;;; +C977;HANGUL SYLLABLE JYULB;Lo;0;L;;;;;N;;;;; +C978;HANGUL SYLLABLE JYULS;Lo;0;L;;;;;N;;;;; +C979;HANGUL SYLLABLE JYULT;Lo;0;L;;;;;N;;;;; +C97A;HANGUL SYLLABLE JYULP;Lo;0;L;;;;;N;;;;; +C97B;HANGUL SYLLABLE JYULH;Lo;0;L;;;;;N;;;;; +C97C;HANGUL SYLLABLE JYUM;Lo;0;L;;;;;N;;;;; +C97D;HANGUL SYLLABLE JYUB;Lo;0;L;;;;;N;;;;; +C97E;HANGUL SYLLABLE JYUBS;Lo;0;L;;;;;N;;;;; +C97F;HANGUL SYLLABLE JYUS;Lo;0;L;;;;;N;;;;; +C980;HANGUL SYLLABLE JYUSS;Lo;0;L;;;;;N;;;;; +C981;HANGUL SYLLABLE JYUNG;Lo;0;L;;;;;N;;;;; +C982;HANGUL SYLLABLE JYUJ;Lo;0;L;;;;;N;;;;; +C983;HANGUL SYLLABLE JYUC;Lo;0;L;;;;;N;;;;; +C984;HANGUL SYLLABLE JYUK;Lo;0;L;;;;;N;;;;; +C985;HANGUL SYLLABLE JYUT;Lo;0;L;;;;;N;;;;; +C986;HANGUL SYLLABLE JYUP;Lo;0;L;;;;;N;;;;; +C987;HANGUL SYLLABLE JYUH;Lo;0;L;;;;;N;;;;; +C988;HANGUL SYLLABLE JEU;Lo;0;L;;;;;N;;;;; +C989;HANGUL SYLLABLE JEUG;Lo;0;L;;;;;N;;;;; +C98A;HANGUL SYLLABLE JEUGG;Lo;0;L;;;;;N;;;;; +C98B;HANGUL SYLLABLE JEUGS;Lo;0;L;;;;;N;;;;; +C98C;HANGUL SYLLABLE JEUN;Lo;0;L;;;;;N;;;;; +C98D;HANGUL SYLLABLE JEUNI;Lo;0;L;;;;;N;;;;; +C98E;HANGUL SYLLABLE JEUNH;Lo;0;L;;;;;N;;;;; +C98F;HANGUL SYLLABLE JEUD;Lo;0;L;;;;;N;;;;; +C990;HANGUL SYLLABLE JEUL;Lo;0;L;;;;;N;;;;; +C991;HANGUL SYLLABLE JEULG;Lo;0;L;;;;;N;;;;; +C992;HANGUL SYLLABLE JEULM;Lo;0;L;;;;;N;;;;; +C993;HANGUL SYLLABLE JEULB;Lo;0;L;;;;;N;;;;; +C994;HANGUL SYLLABLE JEULS;Lo;0;L;;;;;N;;;;; +C995;HANGUL SYLLABLE JEULT;Lo;0;L;;;;;N;;;;; +C996;HANGUL SYLLABLE JEULP;Lo;0;L;;;;;N;;;;; +C997;HANGUL SYLLABLE JEULH;Lo;0;L;;;;;N;;;;; +C998;HANGUL SYLLABLE JEUM;Lo;0;L;;;;;N;;;;; +C999;HANGUL SYLLABLE JEUB;Lo;0;L;;;;;N;;;;; +C99A;HANGUL SYLLABLE JEUBS;Lo;0;L;;;;;N;;;;; +C99B;HANGUL SYLLABLE JEUS;Lo;0;L;;;;;N;;;;; +C99C;HANGUL SYLLABLE JEUSS;Lo;0;L;;;;;N;;;;; +C99D;HANGUL SYLLABLE JEUNG;Lo;0;L;;;;;N;;;;; +C99E;HANGUL SYLLABLE JEUJ;Lo;0;L;;;;;N;;;;; +C99F;HANGUL SYLLABLE JEUC;Lo;0;L;;;;;N;;;;; +C9A0;HANGUL SYLLABLE JEUK;Lo;0;L;;;;;N;;;;; +C9A1;HANGUL SYLLABLE JEUT;Lo;0;L;;;;;N;;;;; +C9A2;HANGUL SYLLABLE JEUP;Lo;0;L;;;;;N;;;;; +C9A3;HANGUL SYLLABLE JEUH;Lo;0;L;;;;;N;;;;; +C9A4;HANGUL SYLLABLE JYI;Lo;0;L;;;;;N;;;;; +C9A5;HANGUL SYLLABLE JYIG;Lo;0;L;;;;;N;;;;; +C9A6;HANGUL SYLLABLE JYIGG;Lo;0;L;;;;;N;;;;; +C9A7;HANGUL SYLLABLE JYIGS;Lo;0;L;;;;;N;;;;; +C9A8;HANGUL SYLLABLE JYIN;Lo;0;L;;;;;N;;;;; +C9A9;HANGUL SYLLABLE JYINI;Lo;0;L;;;;;N;;;;; +C9AA;HANGUL SYLLABLE JYINH;Lo;0;L;;;;;N;;;;; +C9AB;HANGUL SYLLABLE JYID;Lo;0;L;;;;;N;;;;; +C9AC;HANGUL SYLLABLE JYIL;Lo;0;L;;;;;N;;;;; +C9AD;HANGUL SYLLABLE JYILG;Lo;0;L;;;;;N;;;;; +C9AE;HANGUL SYLLABLE JYILM;Lo;0;L;;;;;N;;;;; +C9AF;HANGUL SYLLABLE JYILB;Lo;0;L;;;;;N;;;;; +C9B0;HANGUL SYLLABLE JYILS;Lo;0;L;;;;;N;;;;; +C9B1;HANGUL SYLLABLE JYILT;Lo;0;L;;;;;N;;;;; +C9B2;HANGUL SYLLABLE JYILP;Lo;0;L;;;;;N;;;;; +C9B3;HANGUL SYLLABLE JYILH;Lo;0;L;;;;;N;;;;; +C9B4;HANGUL SYLLABLE JYIM;Lo;0;L;;;;;N;;;;; +C9B5;HANGUL SYLLABLE JYIB;Lo;0;L;;;;;N;;;;; +C9B6;HANGUL SYLLABLE JYIBS;Lo;0;L;;;;;N;;;;; +C9B7;HANGUL SYLLABLE JYIS;Lo;0;L;;;;;N;;;;; +C9B8;HANGUL SYLLABLE JYISS;Lo;0;L;;;;;N;;;;; +C9B9;HANGUL SYLLABLE JYING;Lo;0;L;;;;;N;;;;; +C9BA;HANGUL SYLLABLE JYIJ;Lo;0;L;;;;;N;;;;; +C9BB;HANGUL SYLLABLE JYIC;Lo;0;L;;;;;N;;;;; +C9BC;HANGUL SYLLABLE JYIK;Lo;0;L;;;;;N;;;;; +C9BD;HANGUL SYLLABLE JYIT;Lo;0;L;;;;;N;;;;; +C9BE;HANGUL SYLLABLE JYIP;Lo;0;L;;;;;N;;;;; +C9BF;HANGUL SYLLABLE JYIH;Lo;0;L;;;;;N;;;;; +C9C0;HANGUL SYLLABLE JI;Lo;0;L;;;;;N;;;;; +C9C1;HANGUL SYLLABLE JIG;Lo;0;L;;;;;N;;;;; +C9C2;HANGUL SYLLABLE JIGG;Lo;0;L;;;;;N;;;;; +C9C3;HANGUL SYLLABLE JIGS;Lo;0;L;;;;;N;;;;; +C9C4;HANGUL SYLLABLE JIN;Lo;0;L;;;;;N;;;;; +C9C5;HANGUL SYLLABLE JINI;Lo;0;L;;;;;N;;;;; +C9C6;HANGUL SYLLABLE JINH;Lo;0;L;;;;;N;;;;; +C9C7;HANGUL SYLLABLE JID;Lo;0;L;;;;;N;;;;; +C9C8;HANGUL SYLLABLE JIL;Lo;0;L;;;;;N;;;;; +C9C9;HANGUL SYLLABLE JILG;Lo;0;L;;;;;N;;;;; +C9CA;HANGUL SYLLABLE JILM;Lo;0;L;;;;;N;;;;; +C9CB;HANGUL SYLLABLE JILB;Lo;0;L;;;;;N;;;;; +C9CC;HANGUL SYLLABLE JILS;Lo;0;L;;;;;N;;;;; +C9CD;HANGUL SYLLABLE JILT;Lo;0;L;;;;;N;;;;; +C9CE;HANGUL SYLLABLE JILP;Lo;0;L;;;;;N;;;;; +C9CF;HANGUL SYLLABLE JILH;Lo;0;L;;;;;N;;;;; +C9D0;HANGUL SYLLABLE JIM;Lo;0;L;;;;;N;;;;; +C9D1;HANGUL SYLLABLE JIB;Lo;0;L;;;;;N;;;;; +C9D2;HANGUL SYLLABLE JIBS;Lo;0;L;;;;;N;;;;; +C9D3;HANGUL SYLLABLE JIS;Lo;0;L;;;;;N;;;;; +C9D4;HANGUL SYLLABLE JISS;Lo;0;L;;;;;N;;;;; +C9D5;HANGUL SYLLABLE JING;Lo;0;L;;;;;N;;;;; +C9D6;HANGUL SYLLABLE JIJ;Lo;0;L;;;;;N;;;;; +C9D7;HANGUL SYLLABLE JIC;Lo;0;L;;;;;N;;;;; +C9D8;HANGUL SYLLABLE JIK;Lo;0;L;;;;;N;;;;; +C9D9;HANGUL SYLLABLE JIT;Lo;0;L;;;;;N;;;;; +C9DA;HANGUL SYLLABLE JIP;Lo;0;L;;;;;N;;;;; +C9DB;HANGUL SYLLABLE JIH;Lo;0;L;;;;;N;;;;; +C9DC;HANGUL SYLLABLE JJA;Lo;0;L;;;;;N;;;;; +C9DD;HANGUL SYLLABLE JJAG;Lo;0;L;;;;;N;;;;; +C9DE;HANGUL SYLLABLE JJAGG;Lo;0;L;;;;;N;;;;; +C9DF;HANGUL SYLLABLE JJAGS;Lo;0;L;;;;;N;;;;; +C9E0;HANGUL SYLLABLE JJAN;Lo;0;L;;;;;N;;;;; +C9E1;HANGUL SYLLABLE JJANI;Lo;0;L;;;;;N;;;;; +C9E2;HANGUL SYLLABLE JJANH;Lo;0;L;;;;;N;;;;; +C9E3;HANGUL SYLLABLE JJAD;Lo;0;L;;;;;N;;;;; +C9E4;HANGUL SYLLABLE JJAL;Lo;0;L;;;;;N;;;;; +C9E5;HANGUL SYLLABLE JJALG;Lo;0;L;;;;;N;;;;; +C9E6;HANGUL SYLLABLE JJALM;Lo;0;L;;;;;N;;;;; +C9E7;HANGUL SYLLABLE JJALB;Lo;0;L;;;;;N;;;;; +C9E8;HANGUL SYLLABLE JJALS;Lo;0;L;;;;;N;;;;; +C9E9;HANGUL SYLLABLE JJALT;Lo;0;L;;;;;N;;;;; +C9EA;HANGUL SYLLABLE JJALP;Lo;0;L;;;;;N;;;;; +C9EB;HANGUL SYLLABLE JJALH;Lo;0;L;;;;;N;;;;; +C9EC;HANGUL SYLLABLE JJAM;Lo;0;L;;;;;N;;;;; +C9ED;HANGUL SYLLABLE JJAB;Lo;0;L;;;;;N;;;;; +C9EE;HANGUL SYLLABLE JJABS;Lo;0;L;;;;;N;;;;; +C9EF;HANGUL SYLLABLE JJAS;Lo;0;L;;;;;N;;;;; +C9F0;HANGUL SYLLABLE JJASS;Lo;0;L;;;;;N;;;;; +C9F1;HANGUL SYLLABLE JJANG;Lo;0;L;;;;;N;;;;; +C9F2;HANGUL SYLLABLE JJAJ;Lo;0;L;;;;;N;;;;; +C9F3;HANGUL SYLLABLE JJAC;Lo;0;L;;;;;N;;;;; +C9F4;HANGUL SYLLABLE JJAK;Lo;0;L;;;;;N;;;;; +C9F5;HANGUL SYLLABLE JJAT;Lo;0;L;;;;;N;;;;; +C9F6;HANGUL SYLLABLE JJAP;Lo;0;L;;;;;N;;;;; +C9F7;HANGUL SYLLABLE JJAH;Lo;0;L;;;;;N;;;;; +C9F8;HANGUL SYLLABLE JJAE;Lo;0;L;;;;;N;;;;; +C9F9;HANGUL SYLLABLE JJAEG;Lo;0;L;;;;;N;;;;; +C9FA;HANGUL SYLLABLE JJAEGG;Lo;0;L;;;;;N;;;;; +C9FB;HANGUL SYLLABLE JJAEGS;Lo;0;L;;;;;N;;;;; +C9FC;HANGUL SYLLABLE JJAEN;Lo;0;L;;;;;N;;;;; +C9FD;HANGUL SYLLABLE JJAENI;Lo;0;L;;;;;N;;;;; +C9FE;HANGUL SYLLABLE JJAENH;Lo;0;L;;;;;N;;;;; +C9FF;HANGUL SYLLABLE JJAED;Lo;0;L;;;;;N;;;;; +CA00;HANGUL SYLLABLE JJAEL;Lo;0;L;;;;;N;;;;; +CA01;HANGUL SYLLABLE JJAELG;Lo;0;L;;;;;N;;;;; +CA02;HANGUL SYLLABLE JJAELM;Lo;0;L;;;;;N;;;;; +CA03;HANGUL SYLLABLE JJAELB;Lo;0;L;;;;;N;;;;; +CA04;HANGUL SYLLABLE JJAELS;Lo;0;L;;;;;N;;;;; +CA05;HANGUL SYLLABLE JJAELT;Lo;0;L;;;;;N;;;;; +CA06;HANGUL SYLLABLE JJAELP;Lo;0;L;;;;;N;;;;; +CA07;HANGUL SYLLABLE JJAELH;Lo;0;L;;;;;N;;;;; +CA08;HANGUL SYLLABLE JJAEM;Lo;0;L;;;;;N;;;;; +CA09;HANGUL SYLLABLE JJAEB;Lo;0;L;;;;;N;;;;; +CA0A;HANGUL SYLLABLE JJAEBS;Lo;0;L;;;;;N;;;;; +CA0B;HANGUL SYLLABLE JJAES;Lo;0;L;;;;;N;;;;; +CA0C;HANGUL SYLLABLE JJAESS;Lo;0;L;;;;;N;;;;; +CA0D;HANGUL SYLLABLE JJAENG;Lo;0;L;;;;;N;;;;; +CA0E;HANGUL SYLLABLE JJAEJ;Lo;0;L;;;;;N;;;;; +CA0F;HANGUL SYLLABLE JJAEC;Lo;0;L;;;;;N;;;;; +CA10;HANGUL SYLLABLE JJAEK;Lo;0;L;;;;;N;;;;; +CA11;HANGUL SYLLABLE JJAET;Lo;0;L;;;;;N;;;;; +CA12;HANGUL SYLLABLE JJAEP;Lo;0;L;;;;;N;;;;; +CA13;HANGUL SYLLABLE JJAEH;Lo;0;L;;;;;N;;;;; +CA14;HANGUL SYLLABLE JJYA;Lo;0;L;;;;;N;;;;; +CA15;HANGUL SYLLABLE JJYAG;Lo;0;L;;;;;N;;;;; +CA16;HANGUL SYLLABLE JJYAGG;Lo;0;L;;;;;N;;;;; +CA17;HANGUL SYLLABLE JJYAGS;Lo;0;L;;;;;N;;;;; +CA18;HANGUL SYLLABLE JJYAN;Lo;0;L;;;;;N;;;;; +CA19;HANGUL SYLLABLE JJYANI;Lo;0;L;;;;;N;;;;; +CA1A;HANGUL SYLLABLE JJYANH;Lo;0;L;;;;;N;;;;; +CA1B;HANGUL SYLLABLE JJYAD;Lo;0;L;;;;;N;;;;; +CA1C;HANGUL SYLLABLE JJYAL;Lo;0;L;;;;;N;;;;; +CA1D;HANGUL SYLLABLE JJYALG;Lo;0;L;;;;;N;;;;; +CA1E;HANGUL SYLLABLE JJYALM;Lo;0;L;;;;;N;;;;; +CA1F;HANGUL SYLLABLE JJYALB;Lo;0;L;;;;;N;;;;; +CA20;HANGUL SYLLABLE JJYALS;Lo;0;L;;;;;N;;;;; +CA21;HANGUL SYLLABLE JJYALT;Lo;0;L;;;;;N;;;;; +CA22;HANGUL SYLLABLE JJYALP;Lo;0;L;;;;;N;;;;; +CA23;HANGUL SYLLABLE JJYALH;Lo;0;L;;;;;N;;;;; +CA24;HANGUL SYLLABLE JJYAM;Lo;0;L;;;;;N;;;;; +CA25;HANGUL SYLLABLE JJYAB;Lo;0;L;;;;;N;;;;; +CA26;HANGUL SYLLABLE JJYABS;Lo;0;L;;;;;N;;;;; +CA27;HANGUL SYLLABLE JJYAS;Lo;0;L;;;;;N;;;;; +CA28;HANGUL SYLLABLE JJYASS;Lo;0;L;;;;;N;;;;; +CA29;HANGUL SYLLABLE JJYANG;Lo;0;L;;;;;N;;;;; +CA2A;HANGUL SYLLABLE JJYAJ;Lo;0;L;;;;;N;;;;; +CA2B;HANGUL SYLLABLE JJYAC;Lo;0;L;;;;;N;;;;; +CA2C;HANGUL SYLLABLE JJYAK;Lo;0;L;;;;;N;;;;; +CA2D;HANGUL SYLLABLE JJYAT;Lo;0;L;;;;;N;;;;; +CA2E;HANGUL SYLLABLE JJYAP;Lo;0;L;;;;;N;;;;; +CA2F;HANGUL SYLLABLE JJYAH;Lo;0;L;;;;;N;;;;; +CA30;HANGUL SYLLABLE JJYAE;Lo;0;L;;;;;N;;;;; +CA31;HANGUL SYLLABLE JJYAEG;Lo;0;L;;;;;N;;;;; +CA32;HANGUL SYLLABLE JJYAEGG;Lo;0;L;;;;;N;;;;; +CA33;HANGUL SYLLABLE JJYAEGS;Lo;0;L;;;;;N;;;;; +CA34;HANGUL SYLLABLE JJYAEN;Lo;0;L;;;;;N;;;;; +CA35;HANGUL SYLLABLE JJYAENI;Lo;0;L;;;;;N;;;;; +CA36;HANGUL SYLLABLE JJYAENH;Lo;0;L;;;;;N;;;;; +CA37;HANGUL SYLLABLE JJYAED;Lo;0;L;;;;;N;;;;; +CA38;HANGUL SYLLABLE JJYAEL;Lo;0;L;;;;;N;;;;; +CA39;HANGUL SYLLABLE JJYAELG;Lo;0;L;;;;;N;;;;; +CA3A;HANGUL SYLLABLE JJYAELM;Lo;0;L;;;;;N;;;;; +CA3B;HANGUL SYLLABLE JJYAELB;Lo;0;L;;;;;N;;;;; +CA3C;HANGUL SYLLABLE JJYAELS;Lo;0;L;;;;;N;;;;; +CA3D;HANGUL SYLLABLE JJYAELT;Lo;0;L;;;;;N;;;;; +CA3E;HANGUL SYLLABLE JJYAELP;Lo;0;L;;;;;N;;;;; +CA3F;HANGUL SYLLABLE JJYAELH;Lo;0;L;;;;;N;;;;; +CA40;HANGUL SYLLABLE JJYAEM;Lo;0;L;;;;;N;;;;; +CA41;HANGUL SYLLABLE JJYAEB;Lo;0;L;;;;;N;;;;; +CA42;HANGUL SYLLABLE JJYAEBS;Lo;0;L;;;;;N;;;;; +CA43;HANGUL SYLLABLE JJYAES;Lo;0;L;;;;;N;;;;; +CA44;HANGUL SYLLABLE JJYAESS;Lo;0;L;;;;;N;;;;; +CA45;HANGUL SYLLABLE JJYAENG;Lo;0;L;;;;;N;;;;; +CA46;HANGUL SYLLABLE JJYAEJ;Lo;0;L;;;;;N;;;;; +CA47;HANGUL SYLLABLE JJYAEC;Lo;0;L;;;;;N;;;;; +CA48;HANGUL SYLLABLE JJYAEK;Lo;0;L;;;;;N;;;;; +CA49;HANGUL SYLLABLE JJYAET;Lo;0;L;;;;;N;;;;; +CA4A;HANGUL SYLLABLE JJYAEP;Lo;0;L;;;;;N;;;;; +CA4B;HANGUL SYLLABLE JJYAEH;Lo;0;L;;;;;N;;;;; +CA4C;HANGUL SYLLABLE JJEO;Lo;0;L;;;;;N;;;;; +CA4D;HANGUL SYLLABLE JJEOG;Lo;0;L;;;;;N;;;;; +CA4E;HANGUL SYLLABLE JJEOGG;Lo;0;L;;;;;N;;;;; +CA4F;HANGUL SYLLABLE JJEOGS;Lo;0;L;;;;;N;;;;; +CA50;HANGUL SYLLABLE JJEON;Lo;0;L;;;;;N;;;;; +CA51;HANGUL SYLLABLE JJEONI;Lo;0;L;;;;;N;;;;; +CA52;HANGUL SYLLABLE JJEONH;Lo;0;L;;;;;N;;;;; +CA53;HANGUL SYLLABLE JJEOD;Lo;0;L;;;;;N;;;;; +CA54;HANGUL SYLLABLE JJEOL;Lo;0;L;;;;;N;;;;; +CA55;HANGUL SYLLABLE JJEOLG;Lo;0;L;;;;;N;;;;; +CA56;HANGUL SYLLABLE JJEOLM;Lo;0;L;;;;;N;;;;; +CA57;HANGUL SYLLABLE JJEOLB;Lo;0;L;;;;;N;;;;; +CA58;HANGUL SYLLABLE JJEOLS;Lo;0;L;;;;;N;;;;; +CA59;HANGUL SYLLABLE JJEOLT;Lo;0;L;;;;;N;;;;; +CA5A;HANGUL SYLLABLE JJEOLP;Lo;0;L;;;;;N;;;;; +CA5B;HANGUL SYLLABLE JJEOLH;Lo;0;L;;;;;N;;;;; +CA5C;HANGUL SYLLABLE JJEOM;Lo;0;L;;;;;N;;;;; +CA5D;HANGUL SYLLABLE JJEOB;Lo;0;L;;;;;N;;;;; +CA5E;HANGUL SYLLABLE JJEOBS;Lo;0;L;;;;;N;;;;; +CA5F;HANGUL SYLLABLE JJEOS;Lo;0;L;;;;;N;;;;; +CA60;HANGUL SYLLABLE JJEOSS;Lo;0;L;;;;;N;;;;; +CA61;HANGUL SYLLABLE JJEONG;Lo;0;L;;;;;N;;;;; +CA62;HANGUL SYLLABLE JJEOJ;Lo;0;L;;;;;N;;;;; +CA63;HANGUL SYLLABLE JJEOC;Lo;0;L;;;;;N;;;;; +CA64;HANGUL SYLLABLE JJEOK;Lo;0;L;;;;;N;;;;; +CA65;HANGUL SYLLABLE JJEOT;Lo;0;L;;;;;N;;;;; +CA66;HANGUL SYLLABLE JJEOP;Lo;0;L;;;;;N;;;;; +CA67;HANGUL SYLLABLE JJEOH;Lo;0;L;;;;;N;;;;; +CA68;HANGUL SYLLABLE JJE;Lo;0;L;;;;;N;;;;; +CA69;HANGUL SYLLABLE JJEG;Lo;0;L;;;;;N;;;;; +CA6A;HANGUL SYLLABLE JJEGG;Lo;0;L;;;;;N;;;;; +CA6B;HANGUL SYLLABLE JJEGS;Lo;0;L;;;;;N;;;;; +CA6C;HANGUL SYLLABLE JJEN;Lo;0;L;;;;;N;;;;; +CA6D;HANGUL SYLLABLE JJENI;Lo;0;L;;;;;N;;;;; +CA6E;HANGUL SYLLABLE JJENH;Lo;0;L;;;;;N;;;;; +CA6F;HANGUL SYLLABLE JJED;Lo;0;L;;;;;N;;;;; +CA70;HANGUL SYLLABLE JJEL;Lo;0;L;;;;;N;;;;; +CA71;HANGUL SYLLABLE JJELG;Lo;0;L;;;;;N;;;;; +CA72;HANGUL SYLLABLE JJELM;Lo;0;L;;;;;N;;;;; +CA73;HANGUL SYLLABLE JJELB;Lo;0;L;;;;;N;;;;; +CA74;HANGUL SYLLABLE JJELS;Lo;0;L;;;;;N;;;;; +CA75;HANGUL SYLLABLE JJELT;Lo;0;L;;;;;N;;;;; +CA76;HANGUL SYLLABLE JJELP;Lo;0;L;;;;;N;;;;; +CA77;HANGUL SYLLABLE JJELH;Lo;0;L;;;;;N;;;;; +CA78;HANGUL SYLLABLE JJEM;Lo;0;L;;;;;N;;;;; +CA79;HANGUL SYLLABLE JJEB;Lo;0;L;;;;;N;;;;; +CA7A;HANGUL SYLLABLE JJEBS;Lo;0;L;;;;;N;;;;; +CA7B;HANGUL SYLLABLE JJES;Lo;0;L;;;;;N;;;;; +CA7C;HANGUL SYLLABLE JJESS;Lo;0;L;;;;;N;;;;; +CA7D;HANGUL SYLLABLE JJENG;Lo;0;L;;;;;N;;;;; +CA7E;HANGUL SYLLABLE JJEJ;Lo;0;L;;;;;N;;;;; +CA7F;HANGUL SYLLABLE JJEC;Lo;0;L;;;;;N;;;;; +CA80;HANGUL SYLLABLE JJEK;Lo;0;L;;;;;N;;;;; +CA81;HANGUL SYLLABLE JJET;Lo;0;L;;;;;N;;;;; +CA82;HANGUL SYLLABLE JJEP;Lo;0;L;;;;;N;;;;; +CA83;HANGUL SYLLABLE JJEH;Lo;0;L;;;;;N;;;;; +CA84;HANGUL SYLLABLE JJYEO;Lo;0;L;;;;;N;;;;; +CA85;HANGUL SYLLABLE JJYEOG;Lo;0;L;;;;;N;;;;; +CA86;HANGUL SYLLABLE JJYEOGG;Lo;0;L;;;;;N;;;;; +CA87;HANGUL SYLLABLE JJYEOGS;Lo;0;L;;;;;N;;;;; +CA88;HANGUL SYLLABLE JJYEON;Lo;0;L;;;;;N;;;;; +CA89;HANGUL SYLLABLE JJYEONI;Lo;0;L;;;;;N;;;;; +CA8A;HANGUL SYLLABLE JJYEONH;Lo;0;L;;;;;N;;;;; +CA8B;HANGUL SYLLABLE JJYEOD;Lo;0;L;;;;;N;;;;; +CA8C;HANGUL SYLLABLE JJYEOL;Lo;0;L;;;;;N;;;;; +CA8D;HANGUL SYLLABLE JJYEOLG;Lo;0;L;;;;;N;;;;; +CA8E;HANGUL SYLLABLE JJYEOLM;Lo;0;L;;;;;N;;;;; +CA8F;HANGUL SYLLABLE JJYEOLB;Lo;0;L;;;;;N;;;;; +CA90;HANGUL SYLLABLE JJYEOLS;Lo;0;L;;;;;N;;;;; +CA91;HANGUL SYLLABLE JJYEOLT;Lo;0;L;;;;;N;;;;; +CA92;HANGUL SYLLABLE JJYEOLP;Lo;0;L;;;;;N;;;;; +CA93;HANGUL SYLLABLE JJYEOLH;Lo;0;L;;;;;N;;;;; +CA94;HANGUL SYLLABLE JJYEOM;Lo;0;L;;;;;N;;;;; +CA95;HANGUL SYLLABLE JJYEOB;Lo;0;L;;;;;N;;;;; +CA96;HANGUL SYLLABLE JJYEOBS;Lo;0;L;;;;;N;;;;; +CA97;HANGUL SYLLABLE JJYEOS;Lo;0;L;;;;;N;;;;; +CA98;HANGUL SYLLABLE JJYEOSS;Lo;0;L;;;;;N;;;;; +CA99;HANGUL SYLLABLE JJYEONG;Lo;0;L;;;;;N;;;;; +CA9A;HANGUL SYLLABLE JJYEOJ;Lo;0;L;;;;;N;;;;; +CA9B;HANGUL SYLLABLE JJYEOC;Lo;0;L;;;;;N;;;;; +CA9C;HANGUL SYLLABLE JJYEOK;Lo;0;L;;;;;N;;;;; +CA9D;HANGUL SYLLABLE JJYEOT;Lo;0;L;;;;;N;;;;; +CA9E;HANGUL SYLLABLE JJYEOP;Lo;0;L;;;;;N;;;;; +CA9F;HANGUL SYLLABLE JJYEOH;Lo;0;L;;;;;N;;;;; +CAA0;HANGUL SYLLABLE JJYE;Lo;0;L;;;;;N;;;;; +CAA1;HANGUL SYLLABLE JJYEG;Lo;0;L;;;;;N;;;;; +CAA2;HANGUL SYLLABLE JJYEGG;Lo;0;L;;;;;N;;;;; +CAA3;HANGUL SYLLABLE JJYEGS;Lo;0;L;;;;;N;;;;; +CAA4;HANGUL SYLLABLE JJYEN;Lo;0;L;;;;;N;;;;; +CAA5;HANGUL SYLLABLE JJYENI;Lo;0;L;;;;;N;;;;; +CAA6;HANGUL SYLLABLE JJYENH;Lo;0;L;;;;;N;;;;; +CAA7;HANGUL SYLLABLE JJYED;Lo;0;L;;;;;N;;;;; +CAA8;HANGUL SYLLABLE JJYEL;Lo;0;L;;;;;N;;;;; +CAA9;HANGUL SYLLABLE JJYELG;Lo;0;L;;;;;N;;;;; +CAAA;HANGUL SYLLABLE JJYELM;Lo;0;L;;;;;N;;;;; +CAAB;HANGUL SYLLABLE JJYELB;Lo;0;L;;;;;N;;;;; +CAAC;HANGUL SYLLABLE JJYELS;Lo;0;L;;;;;N;;;;; +CAAD;HANGUL SYLLABLE JJYELT;Lo;0;L;;;;;N;;;;; +CAAE;HANGUL SYLLABLE JJYELP;Lo;0;L;;;;;N;;;;; +CAAF;HANGUL SYLLABLE JJYELH;Lo;0;L;;;;;N;;;;; +CAB0;HANGUL SYLLABLE JJYEM;Lo;0;L;;;;;N;;;;; +CAB1;HANGUL SYLLABLE JJYEB;Lo;0;L;;;;;N;;;;; +CAB2;HANGUL SYLLABLE JJYEBS;Lo;0;L;;;;;N;;;;; +CAB3;HANGUL SYLLABLE JJYES;Lo;0;L;;;;;N;;;;; +CAB4;HANGUL SYLLABLE JJYESS;Lo;0;L;;;;;N;;;;; +CAB5;HANGUL SYLLABLE JJYENG;Lo;0;L;;;;;N;;;;; +CAB6;HANGUL SYLLABLE JJYEJ;Lo;0;L;;;;;N;;;;; +CAB7;HANGUL SYLLABLE JJYEC;Lo;0;L;;;;;N;;;;; +CAB8;HANGUL SYLLABLE JJYEK;Lo;0;L;;;;;N;;;;; +CAB9;HANGUL SYLLABLE JJYET;Lo;0;L;;;;;N;;;;; +CABA;HANGUL SYLLABLE JJYEP;Lo;0;L;;;;;N;;;;; +CABB;HANGUL SYLLABLE JJYEH;Lo;0;L;;;;;N;;;;; +CABC;HANGUL SYLLABLE JJO;Lo;0;L;;;;;N;;;;; +CABD;HANGUL SYLLABLE JJOG;Lo;0;L;;;;;N;;;;; +CABE;HANGUL SYLLABLE JJOGG;Lo;0;L;;;;;N;;;;; +CABF;HANGUL SYLLABLE JJOGS;Lo;0;L;;;;;N;;;;; +CAC0;HANGUL SYLLABLE JJON;Lo;0;L;;;;;N;;;;; +CAC1;HANGUL SYLLABLE JJONI;Lo;0;L;;;;;N;;;;; +CAC2;HANGUL SYLLABLE JJONH;Lo;0;L;;;;;N;;;;; +CAC3;HANGUL SYLLABLE JJOD;Lo;0;L;;;;;N;;;;; +CAC4;HANGUL SYLLABLE JJOL;Lo;0;L;;;;;N;;;;; +CAC5;HANGUL SYLLABLE JJOLG;Lo;0;L;;;;;N;;;;; +CAC6;HANGUL SYLLABLE JJOLM;Lo;0;L;;;;;N;;;;; +CAC7;HANGUL SYLLABLE JJOLB;Lo;0;L;;;;;N;;;;; +CAC8;HANGUL SYLLABLE JJOLS;Lo;0;L;;;;;N;;;;; +CAC9;HANGUL SYLLABLE JJOLT;Lo;0;L;;;;;N;;;;; +CACA;HANGUL SYLLABLE JJOLP;Lo;0;L;;;;;N;;;;; +CACB;HANGUL SYLLABLE JJOLH;Lo;0;L;;;;;N;;;;; +CACC;HANGUL SYLLABLE JJOM;Lo;0;L;;;;;N;;;;; +CACD;HANGUL SYLLABLE JJOB;Lo;0;L;;;;;N;;;;; +CACE;HANGUL SYLLABLE JJOBS;Lo;0;L;;;;;N;;;;; +CACF;HANGUL SYLLABLE JJOS;Lo;0;L;;;;;N;;;;; +CAD0;HANGUL SYLLABLE JJOSS;Lo;0;L;;;;;N;;;;; +CAD1;HANGUL SYLLABLE JJONG;Lo;0;L;;;;;N;;;;; +CAD2;HANGUL SYLLABLE JJOJ;Lo;0;L;;;;;N;;;;; +CAD3;HANGUL SYLLABLE JJOC;Lo;0;L;;;;;N;;;;; +CAD4;HANGUL SYLLABLE JJOK;Lo;0;L;;;;;N;;;;; +CAD5;HANGUL SYLLABLE JJOT;Lo;0;L;;;;;N;;;;; +CAD6;HANGUL SYLLABLE JJOP;Lo;0;L;;;;;N;;;;; +CAD7;HANGUL SYLLABLE JJOH;Lo;0;L;;;;;N;;;;; +CAD8;HANGUL SYLLABLE JJWA;Lo;0;L;;;;;N;;;;; +CAD9;HANGUL SYLLABLE JJWAG;Lo;0;L;;;;;N;;;;; +CADA;HANGUL SYLLABLE JJWAGG;Lo;0;L;;;;;N;;;;; +CADB;HANGUL SYLLABLE JJWAGS;Lo;0;L;;;;;N;;;;; +CADC;HANGUL SYLLABLE JJWAN;Lo;0;L;;;;;N;;;;; +CADD;HANGUL SYLLABLE JJWANI;Lo;0;L;;;;;N;;;;; +CADE;HANGUL SYLLABLE JJWANH;Lo;0;L;;;;;N;;;;; +CADF;HANGUL SYLLABLE JJWAD;Lo;0;L;;;;;N;;;;; +CAE0;HANGUL SYLLABLE JJWAL;Lo;0;L;;;;;N;;;;; +CAE1;HANGUL SYLLABLE JJWALG;Lo;0;L;;;;;N;;;;; +CAE2;HANGUL SYLLABLE JJWALM;Lo;0;L;;;;;N;;;;; +CAE3;HANGUL SYLLABLE JJWALB;Lo;0;L;;;;;N;;;;; +CAE4;HANGUL SYLLABLE JJWALS;Lo;0;L;;;;;N;;;;; +CAE5;HANGUL SYLLABLE JJWALT;Lo;0;L;;;;;N;;;;; +CAE6;HANGUL SYLLABLE JJWALP;Lo;0;L;;;;;N;;;;; +CAE7;HANGUL SYLLABLE JJWALH;Lo;0;L;;;;;N;;;;; +CAE8;HANGUL SYLLABLE JJWAM;Lo;0;L;;;;;N;;;;; +CAE9;HANGUL SYLLABLE JJWAB;Lo;0;L;;;;;N;;;;; +CAEA;HANGUL SYLLABLE JJWABS;Lo;0;L;;;;;N;;;;; +CAEB;HANGUL SYLLABLE JJWAS;Lo;0;L;;;;;N;;;;; +CAEC;HANGUL SYLLABLE JJWASS;Lo;0;L;;;;;N;;;;; +CAED;HANGUL SYLLABLE JJWANG;Lo;0;L;;;;;N;;;;; +CAEE;HANGUL SYLLABLE JJWAJ;Lo;0;L;;;;;N;;;;; +CAEF;HANGUL SYLLABLE JJWAC;Lo;0;L;;;;;N;;;;; +CAF0;HANGUL SYLLABLE JJWAK;Lo;0;L;;;;;N;;;;; +CAF1;HANGUL SYLLABLE JJWAT;Lo;0;L;;;;;N;;;;; +CAF2;HANGUL SYLLABLE JJWAP;Lo;0;L;;;;;N;;;;; +CAF3;HANGUL SYLLABLE JJWAH;Lo;0;L;;;;;N;;;;; +CAF4;HANGUL SYLLABLE JJWAE;Lo;0;L;;;;;N;;;;; +CAF5;HANGUL SYLLABLE JJWAEG;Lo;0;L;;;;;N;;;;; +CAF6;HANGUL SYLLABLE JJWAEGG;Lo;0;L;;;;;N;;;;; +CAF7;HANGUL SYLLABLE JJWAEGS;Lo;0;L;;;;;N;;;;; +CAF8;HANGUL SYLLABLE JJWAEN;Lo;0;L;;;;;N;;;;; +CAF9;HANGUL SYLLABLE JJWAENI;Lo;0;L;;;;;N;;;;; +CAFA;HANGUL SYLLABLE JJWAENH;Lo;0;L;;;;;N;;;;; +CAFB;HANGUL SYLLABLE JJWAED;Lo;0;L;;;;;N;;;;; +CAFC;HANGUL SYLLABLE JJWAEL;Lo;0;L;;;;;N;;;;; +CAFD;HANGUL SYLLABLE JJWAELG;Lo;0;L;;;;;N;;;;; +CAFE;HANGUL SYLLABLE JJWAELM;Lo;0;L;;;;;N;;;;; +CAFF;HANGUL SYLLABLE JJWAELB;Lo;0;L;;;;;N;;;;; +CB00;HANGUL SYLLABLE JJWAELS;Lo;0;L;;;;;N;;;;; +CB01;HANGUL SYLLABLE JJWAELT;Lo;0;L;;;;;N;;;;; +CB02;HANGUL SYLLABLE JJWAELP;Lo;0;L;;;;;N;;;;; +CB03;HANGUL SYLLABLE JJWAELH;Lo;0;L;;;;;N;;;;; +CB04;HANGUL SYLLABLE JJWAEM;Lo;0;L;;;;;N;;;;; +CB05;HANGUL SYLLABLE JJWAEB;Lo;0;L;;;;;N;;;;; +CB06;HANGUL SYLLABLE JJWAEBS;Lo;0;L;;;;;N;;;;; +CB07;HANGUL SYLLABLE JJWAES;Lo;0;L;;;;;N;;;;; +CB08;HANGUL SYLLABLE JJWAESS;Lo;0;L;;;;;N;;;;; +CB09;HANGUL SYLLABLE JJWAENG;Lo;0;L;;;;;N;;;;; +CB0A;HANGUL SYLLABLE JJWAEJ;Lo;0;L;;;;;N;;;;; +CB0B;HANGUL SYLLABLE JJWAEC;Lo;0;L;;;;;N;;;;; +CB0C;HANGUL SYLLABLE JJWAEK;Lo;0;L;;;;;N;;;;; +CB0D;HANGUL SYLLABLE JJWAET;Lo;0;L;;;;;N;;;;; +CB0E;HANGUL SYLLABLE JJWAEP;Lo;0;L;;;;;N;;;;; +CB0F;HANGUL SYLLABLE JJWAEH;Lo;0;L;;;;;N;;;;; +CB10;HANGUL SYLLABLE JJOE;Lo;0;L;;;;;N;;;;; +CB11;HANGUL SYLLABLE JJOEG;Lo;0;L;;;;;N;;;;; +CB12;HANGUL SYLLABLE JJOEGG;Lo;0;L;;;;;N;;;;; +CB13;HANGUL SYLLABLE JJOEGS;Lo;0;L;;;;;N;;;;; +CB14;HANGUL SYLLABLE JJOEN;Lo;0;L;;;;;N;;;;; +CB15;HANGUL SYLLABLE JJOENI;Lo;0;L;;;;;N;;;;; +CB16;HANGUL SYLLABLE JJOENH;Lo;0;L;;;;;N;;;;; +CB17;HANGUL SYLLABLE JJOED;Lo;0;L;;;;;N;;;;; +CB18;HANGUL SYLLABLE JJOEL;Lo;0;L;;;;;N;;;;; +CB19;HANGUL SYLLABLE JJOELG;Lo;0;L;;;;;N;;;;; +CB1A;HANGUL SYLLABLE JJOELM;Lo;0;L;;;;;N;;;;; +CB1B;HANGUL SYLLABLE JJOELB;Lo;0;L;;;;;N;;;;; +CB1C;HANGUL SYLLABLE JJOELS;Lo;0;L;;;;;N;;;;; +CB1D;HANGUL SYLLABLE JJOELT;Lo;0;L;;;;;N;;;;; +CB1E;HANGUL SYLLABLE JJOELP;Lo;0;L;;;;;N;;;;; +CB1F;HANGUL SYLLABLE JJOELH;Lo;0;L;;;;;N;;;;; +CB20;HANGUL SYLLABLE JJOEM;Lo;0;L;;;;;N;;;;; +CB21;HANGUL SYLLABLE JJOEB;Lo;0;L;;;;;N;;;;; +CB22;HANGUL SYLLABLE JJOEBS;Lo;0;L;;;;;N;;;;; +CB23;HANGUL SYLLABLE JJOES;Lo;0;L;;;;;N;;;;; +CB24;HANGUL SYLLABLE JJOESS;Lo;0;L;;;;;N;;;;; +CB25;HANGUL SYLLABLE JJOENG;Lo;0;L;;;;;N;;;;; +CB26;HANGUL SYLLABLE JJOEJ;Lo;0;L;;;;;N;;;;; +CB27;HANGUL SYLLABLE JJOEC;Lo;0;L;;;;;N;;;;; +CB28;HANGUL SYLLABLE JJOEK;Lo;0;L;;;;;N;;;;; +CB29;HANGUL SYLLABLE JJOET;Lo;0;L;;;;;N;;;;; +CB2A;HANGUL SYLLABLE JJOEP;Lo;0;L;;;;;N;;;;; +CB2B;HANGUL SYLLABLE JJOEH;Lo;0;L;;;;;N;;;;; +CB2C;HANGUL SYLLABLE JJYO;Lo;0;L;;;;;N;;;;; +CB2D;HANGUL SYLLABLE JJYOG;Lo;0;L;;;;;N;;;;; +CB2E;HANGUL SYLLABLE JJYOGG;Lo;0;L;;;;;N;;;;; +CB2F;HANGUL SYLLABLE JJYOGS;Lo;0;L;;;;;N;;;;; +CB30;HANGUL SYLLABLE JJYON;Lo;0;L;;;;;N;;;;; +CB31;HANGUL SYLLABLE JJYONI;Lo;0;L;;;;;N;;;;; +CB32;HANGUL SYLLABLE JJYONH;Lo;0;L;;;;;N;;;;; +CB33;HANGUL SYLLABLE JJYOD;Lo;0;L;;;;;N;;;;; +CB34;HANGUL SYLLABLE JJYOL;Lo;0;L;;;;;N;;;;; +CB35;HANGUL SYLLABLE JJYOLG;Lo;0;L;;;;;N;;;;; +CB36;HANGUL SYLLABLE JJYOLM;Lo;0;L;;;;;N;;;;; +CB37;HANGUL SYLLABLE JJYOLB;Lo;0;L;;;;;N;;;;; +CB38;HANGUL SYLLABLE JJYOLS;Lo;0;L;;;;;N;;;;; +CB39;HANGUL SYLLABLE JJYOLT;Lo;0;L;;;;;N;;;;; +CB3A;HANGUL SYLLABLE JJYOLP;Lo;0;L;;;;;N;;;;; +CB3B;HANGUL SYLLABLE JJYOLH;Lo;0;L;;;;;N;;;;; +CB3C;HANGUL SYLLABLE JJYOM;Lo;0;L;;;;;N;;;;; +CB3D;HANGUL SYLLABLE JJYOB;Lo;0;L;;;;;N;;;;; +CB3E;HANGUL SYLLABLE JJYOBS;Lo;0;L;;;;;N;;;;; +CB3F;HANGUL SYLLABLE JJYOS;Lo;0;L;;;;;N;;;;; +CB40;HANGUL SYLLABLE JJYOSS;Lo;0;L;;;;;N;;;;; +CB41;HANGUL SYLLABLE JJYONG;Lo;0;L;;;;;N;;;;; +CB42;HANGUL SYLLABLE JJYOJ;Lo;0;L;;;;;N;;;;; +CB43;HANGUL SYLLABLE JJYOC;Lo;0;L;;;;;N;;;;; +CB44;HANGUL SYLLABLE JJYOK;Lo;0;L;;;;;N;;;;; +CB45;HANGUL SYLLABLE JJYOT;Lo;0;L;;;;;N;;;;; +CB46;HANGUL SYLLABLE JJYOP;Lo;0;L;;;;;N;;;;; +CB47;HANGUL SYLLABLE JJYOH;Lo;0;L;;;;;N;;;;; +CB48;HANGUL SYLLABLE JJU;Lo;0;L;;;;;N;;;;; +CB49;HANGUL SYLLABLE JJUG;Lo;0;L;;;;;N;;;;; +CB4A;HANGUL SYLLABLE JJUGG;Lo;0;L;;;;;N;;;;; +CB4B;HANGUL SYLLABLE JJUGS;Lo;0;L;;;;;N;;;;; +CB4C;HANGUL SYLLABLE JJUN;Lo;0;L;;;;;N;;;;; +CB4D;HANGUL SYLLABLE JJUNI;Lo;0;L;;;;;N;;;;; +CB4E;HANGUL SYLLABLE JJUNH;Lo;0;L;;;;;N;;;;; +CB4F;HANGUL SYLLABLE JJUD;Lo;0;L;;;;;N;;;;; +CB50;HANGUL SYLLABLE JJUL;Lo;0;L;;;;;N;;;;; +CB51;HANGUL SYLLABLE JJULG;Lo;0;L;;;;;N;;;;; +CB52;HANGUL SYLLABLE JJULM;Lo;0;L;;;;;N;;;;; +CB53;HANGUL SYLLABLE JJULB;Lo;0;L;;;;;N;;;;; +CB54;HANGUL SYLLABLE JJULS;Lo;0;L;;;;;N;;;;; +CB55;HANGUL SYLLABLE JJULT;Lo;0;L;;;;;N;;;;; +CB56;HANGUL SYLLABLE JJULP;Lo;0;L;;;;;N;;;;; +CB57;HANGUL SYLLABLE JJULH;Lo;0;L;;;;;N;;;;; +CB58;HANGUL SYLLABLE JJUM;Lo;0;L;;;;;N;;;;; +CB59;HANGUL SYLLABLE JJUB;Lo;0;L;;;;;N;;;;; +CB5A;HANGUL SYLLABLE JJUBS;Lo;0;L;;;;;N;;;;; +CB5B;HANGUL SYLLABLE JJUS;Lo;0;L;;;;;N;;;;; +CB5C;HANGUL SYLLABLE JJUSS;Lo;0;L;;;;;N;;;;; +CB5D;HANGUL SYLLABLE JJUNG;Lo;0;L;;;;;N;;;;; +CB5E;HANGUL SYLLABLE JJUJ;Lo;0;L;;;;;N;;;;; +CB5F;HANGUL SYLLABLE JJUC;Lo;0;L;;;;;N;;;;; +CB60;HANGUL SYLLABLE JJUK;Lo;0;L;;;;;N;;;;; +CB61;HANGUL SYLLABLE JJUT;Lo;0;L;;;;;N;;;;; +CB62;HANGUL SYLLABLE JJUP;Lo;0;L;;;;;N;;;;; +CB63;HANGUL SYLLABLE JJUH;Lo;0;L;;;;;N;;;;; +CB64;HANGUL SYLLABLE JJWEO;Lo;0;L;;;;;N;;;;; +CB65;HANGUL SYLLABLE JJWEOG;Lo;0;L;;;;;N;;;;; +CB66;HANGUL SYLLABLE JJWEOGG;Lo;0;L;;;;;N;;;;; +CB67;HANGUL SYLLABLE JJWEOGS;Lo;0;L;;;;;N;;;;; +CB68;HANGUL SYLLABLE JJWEON;Lo;0;L;;;;;N;;;;; +CB69;HANGUL SYLLABLE JJWEONI;Lo;0;L;;;;;N;;;;; +CB6A;HANGUL SYLLABLE JJWEONH;Lo;0;L;;;;;N;;;;; +CB6B;HANGUL SYLLABLE JJWEOD;Lo;0;L;;;;;N;;;;; +CB6C;HANGUL SYLLABLE JJWEOL;Lo;0;L;;;;;N;;;;; +CB6D;HANGUL SYLLABLE JJWEOLG;Lo;0;L;;;;;N;;;;; +CB6E;HANGUL SYLLABLE JJWEOLM;Lo;0;L;;;;;N;;;;; +CB6F;HANGUL SYLLABLE JJWEOLB;Lo;0;L;;;;;N;;;;; +CB70;HANGUL SYLLABLE JJWEOLS;Lo;0;L;;;;;N;;;;; +CB71;HANGUL SYLLABLE JJWEOLT;Lo;0;L;;;;;N;;;;; +CB72;HANGUL SYLLABLE JJWEOLP;Lo;0;L;;;;;N;;;;; +CB73;HANGUL SYLLABLE JJWEOLH;Lo;0;L;;;;;N;;;;; +CB74;HANGUL SYLLABLE JJWEOM;Lo;0;L;;;;;N;;;;; +CB75;HANGUL SYLLABLE JJWEOB;Lo;0;L;;;;;N;;;;; +CB76;HANGUL SYLLABLE JJWEOBS;Lo;0;L;;;;;N;;;;; +CB77;HANGUL SYLLABLE JJWEOS;Lo;0;L;;;;;N;;;;; +CB78;HANGUL SYLLABLE JJWEOSS;Lo;0;L;;;;;N;;;;; +CB79;HANGUL SYLLABLE JJWEONG;Lo;0;L;;;;;N;;;;; +CB7A;HANGUL SYLLABLE JJWEOJ;Lo;0;L;;;;;N;;;;; +CB7B;HANGUL SYLLABLE JJWEOC;Lo;0;L;;;;;N;;;;; +CB7C;HANGUL SYLLABLE JJWEOK;Lo;0;L;;;;;N;;;;; +CB7D;HANGUL SYLLABLE JJWEOT;Lo;0;L;;;;;N;;;;; +CB7E;HANGUL SYLLABLE JJWEOP;Lo;0;L;;;;;N;;;;; +CB7F;HANGUL SYLLABLE JJWEOH;Lo;0;L;;;;;N;;;;; +CB80;HANGUL SYLLABLE JJWE;Lo;0;L;;;;;N;;;;; +CB81;HANGUL SYLLABLE JJWEG;Lo;0;L;;;;;N;;;;; +CB82;HANGUL SYLLABLE JJWEGG;Lo;0;L;;;;;N;;;;; +CB83;HANGUL SYLLABLE JJWEGS;Lo;0;L;;;;;N;;;;; +CB84;HANGUL SYLLABLE JJWEN;Lo;0;L;;;;;N;;;;; +CB85;HANGUL SYLLABLE JJWENI;Lo;0;L;;;;;N;;;;; +CB86;HANGUL SYLLABLE JJWENH;Lo;0;L;;;;;N;;;;; +CB87;HANGUL SYLLABLE JJWED;Lo;0;L;;;;;N;;;;; +CB88;HANGUL SYLLABLE JJWEL;Lo;0;L;;;;;N;;;;; +CB89;HANGUL SYLLABLE JJWELG;Lo;0;L;;;;;N;;;;; +CB8A;HANGUL SYLLABLE JJWELM;Lo;0;L;;;;;N;;;;; +CB8B;HANGUL SYLLABLE JJWELB;Lo;0;L;;;;;N;;;;; +CB8C;HANGUL SYLLABLE JJWELS;Lo;0;L;;;;;N;;;;; +CB8D;HANGUL SYLLABLE JJWELT;Lo;0;L;;;;;N;;;;; +CB8E;HANGUL SYLLABLE JJWELP;Lo;0;L;;;;;N;;;;; +CB8F;HANGUL SYLLABLE JJWELH;Lo;0;L;;;;;N;;;;; +CB90;HANGUL SYLLABLE JJWEM;Lo;0;L;;;;;N;;;;; +CB91;HANGUL SYLLABLE JJWEB;Lo;0;L;;;;;N;;;;; +CB92;HANGUL SYLLABLE JJWEBS;Lo;0;L;;;;;N;;;;; +CB93;HANGUL SYLLABLE JJWES;Lo;0;L;;;;;N;;;;; +CB94;HANGUL SYLLABLE JJWESS;Lo;0;L;;;;;N;;;;; +CB95;HANGUL SYLLABLE JJWENG;Lo;0;L;;;;;N;;;;; +CB96;HANGUL SYLLABLE JJWEJ;Lo;0;L;;;;;N;;;;; +CB97;HANGUL SYLLABLE JJWEC;Lo;0;L;;;;;N;;;;; +CB98;HANGUL SYLLABLE JJWEK;Lo;0;L;;;;;N;;;;; +CB99;HANGUL SYLLABLE JJWET;Lo;0;L;;;;;N;;;;; +CB9A;HANGUL SYLLABLE JJWEP;Lo;0;L;;;;;N;;;;; +CB9B;HANGUL SYLLABLE JJWEH;Lo;0;L;;;;;N;;;;; +CB9C;HANGUL SYLLABLE JJWI;Lo;0;L;;;;;N;;;;; +CB9D;HANGUL SYLLABLE JJWIG;Lo;0;L;;;;;N;;;;; +CB9E;HANGUL SYLLABLE JJWIGG;Lo;0;L;;;;;N;;;;; +CB9F;HANGUL SYLLABLE JJWIGS;Lo;0;L;;;;;N;;;;; +CBA0;HANGUL SYLLABLE JJWIN;Lo;0;L;;;;;N;;;;; +CBA1;HANGUL SYLLABLE JJWINI;Lo;0;L;;;;;N;;;;; +CBA2;HANGUL SYLLABLE JJWINH;Lo;0;L;;;;;N;;;;; +CBA3;HANGUL SYLLABLE JJWID;Lo;0;L;;;;;N;;;;; +CBA4;HANGUL SYLLABLE JJWIL;Lo;0;L;;;;;N;;;;; +CBA5;HANGUL SYLLABLE JJWILG;Lo;0;L;;;;;N;;;;; +CBA6;HANGUL SYLLABLE JJWILM;Lo;0;L;;;;;N;;;;; +CBA7;HANGUL SYLLABLE JJWILB;Lo;0;L;;;;;N;;;;; +CBA8;HANGUL SYLLABLE JJWILS;Lo;0;L;;;;;N;;;;; +CBA9;HANGUL SYLLABLE JJWILT;Lo;0;L;;;;;N;;;;; +CBAA;HANGUL SYLLABLE JJWILP;Lo;0;L;;;;;N;;;;; +CBAB;HANGUL SYLLABLE JJWILH;Lo;0;L;;;;;N;;;;; +CBAC;HANGUL SYLLABLE JJWIM;Lo;0;L;;;;;N;;;;; +CBAD;HANGUL SYLLABLE JJWIB;Lo;0;L;;;;;N;;;;; +CBAE;HANGUL SYLLABLE JJWIBS;Lo;0;L;;;;;N;;;;; +CBAF;HANGUL SYLLABLE JJWIS;Lo;0;L;;;;;N;;;;; +CBB0;HANGUL SYLLABLE JJWISS;Lo;0;L;;;;;N;;;;; +CBB1;HANGUL SYLLABLE JJWING;Lo;0;L;;;;;N;;;;; +CBB2;HANGUL SYLLABLE JJWIJ;Lo;0;L;;;;;N;;;;; +CBB3;HANGUL SYLLABLE JJWIC;Lo;0;L;;;;;N;;;;; +CBB4;HANGUL SYLLABLE JJWIK;Lo;0;L;;;;;N;;;;; +CBB5;HANGUL SYLLABLE JJWIT;Lo;0;L;;;;;N;;;;; +CBB6;HANGUL SYLLABLE JJWIP;Lo;0;L;;;;;N;;;;; +CBB7;HANGUL SYLLABLE JJWIH;Lo;0;L;;;;;N;;;;; +CBB8;HANGUL SYLLABLE JJYU;Lo;0;L;;;;;N;;;;; +CBB9;HANGUL SYLLABLE JJYUG;Lo;0;L;;;;;N;;;;; +CBBA;HANGUL SYLLABLE JJYUGG;Lo;0;L;;;;;N;;;;; +CBBB;HANGUL SYLLABLE JJYUGS;Lo;0;L;;;;;N;;;;; +CBBC;HANGUL SYLLABLE JJYUN;Lo;0;L;;;;;N;;;;; +CBBD;HANGUL SYLLABLE JJYUNI;Lo;0;L;;;;;N;;;;; +CBBE;HANGUL SYLLABLE JJYUNH;Lo;0;L;;;;;N;;;;; +CBBF;HANGUL SYLLABLE JJYUD;Lo;0;L;;;;;N;;;;; +CBC0;HANGUL SYLLABLE JJYUL;Lo;0;L;;;;;N;;;;; +CBC1;HANGUL SYLLABLE JJYULG;Lo;0;L;;;;;N;;;;; +CBC2;HANGUL SYLLABLE JJYULM;Lo;0;L;;;;;N;;;;; +CBC3;HANGUL SYLLABLE JJYULB;Lo;0;L;;;;;N;;;;; +CBC4;HANGUL SYLLABLE JJYULS;Lo;0;L;;;;;N;;;;; +CBC5;HANGUL SYLLABLE JJYULT;Lo;0;L;;;;;N;;;;; +CBC6;HANGUL SYLLABLE JJYULP;Lo;0;L;;;;;N;;;;; +CBC7;HANGUL SYLLABLE JJYULH;Lo;0;L;;;;;N;;;;; +CBC8;HANGUL SYLLABLE JJYUM;Lo;0;L;;;;;N;;;;; +CBC9;HANGUL SYLLABLE JJYUB;Lo;0;L;;;;;N;;;;; +CBCA;HANGUL SYLLABLE JJYUBS;Lo;0;L;;;;;N;;;;; +CBCB;HANGUL SYLLABLE JJYUS;Lo;0;L;;;;;N;;;;; +CBCC;HANGUL SYLLABLE JJYUSS;Lo;0;L;;;;;N;;;;; +CBCD;HANGUL SYLLABLE JJYUNG;Lo;0;L;;;;;N;;;;; +CBCE;HANGUL SYLLABLE JJYUJ;Lo;0;L;;;;;N;;;;; +CBCF;HANGUL SYLLABLE JJYUC;Lo;0;L;;;;;N;;;;; +CBD0;HANGUL SYLLABLE JJYUK;Lo;0;L;;;;;N;;;;; +CBD1;HANGUL SYLLABLE JJYUT;Lo;0;L;;;;;N;;;;; +CBD2;HANGUL SYLLABLE JJYUP;Lo;0;L;;;;;N;;;;; +CBD3;HANGUL SYLLABLE JJYUH;Lo;0;L;;;;;N;;;;; +CBD4;HANGUL SYLLABLE JJEU;Lo;0;L;;;;;N;;;;; +CBD5;HANGUL SYLLABLE JJEUG;Lo;0;L;;;;;N;;;;; +CBD6;HANGUL SYLLABLE JJEUGG;Lo;0;L;;;;;N;;;;; +CBD7;HANGUL SYLLABLE JJEUGS;Lo;0;L;;;;;N;;;;; +CBD8;HANGUL SYLLABLE JJEUN;Lo;0;L;;;;;N;;;;; +CBD9;HANGUL SYLLABLE JJEUNI;Lo;0;L;;;;;N;;;;; +CBDA;HANGUL SYLLABLE JJEUNH;Lo;0;L;;;;;N;;;;; +CBDB;HANGUL SYLLABLE JJEUD;Lo;0;L;;;;;N;;;;; +CBDC;HANGUL SYLLABLE JJEUL;Lo;0;L;;;;;N;;;;; +CBDD;HANGUL SYLLABLE JJEULG;Lo;0;L;;;;;N;;;;; +CBDE;HANGUL SYLLABLE JJEULM;Lo;0;L;;;;;N;;;;; +CBDF;HANGUL SYLLABLE JJEULB;Lo;0;L;;;;;N;;;;; +CBE0;HANGUL SYLLABLE JJEULS;Lo;0;L;;;;;N;;;;; +CBE1;HANGUL SYLLABLE JJEULT;Lo;0;L;;;;;N;;;;; +CBE2;HANGUL SYLLABLE JJEULP;Lo;0;L;;;;;N;;;;; +CBE3;HANGUL SYLLABLE JJEULH;Lo;0;L;;;;;N;;;;; +CBE4;HANGUL SYLLABLE JJEUM;Lo;0;L;;;;;N;;;;; +CBE5;HANGUL SYLLABLE JJEUB;Lo;0;L;;;;;N;;;;; +CBE6;HANGUL SYLLABLE JJEUBS;Lo;0;L;;;;;N;;;;; +CBE7;HANGUL SYLLABLE JJEUS;Lo;0;L;;;;;N;;;;; +CBE8;HANGUL SYLLABLE JJEUSS;Lo;0;L;;;;;N;;;;; +CBE9;HANGUL SYLLABLE JJEUNG;Lo;0;L;;;;;N;;;;; +CBEA;HANGUL SYLLABLE JJEUJ;Lo;0;L;;;;;N;;;;; +CBEB;HANGUL SYLLABLE JJEUC;Lo;0;L;;;;;N;;;;; +CBEC;HANGUL SYLLABLE JJEUK;Lo;0;L;;;;;N;;;;; +CBED;HANGUL SYLLABLE JJEUT;Lo;0;L;;;;;N;;;;; +CBEE;HANGUL SYLLABLE JJEUP;Lo;0;L;;;;;N;;;;; +CBEF;HANGUL SYLLABLE JJEUH;Lo;0;L;;;;;N;;;;; +CBF0;HANGUL SYLLABLE JJYI;Lo;0;L;;;;;N;;;;; +CBF1;HANGUL SYLLABLE JJYIG;Lo;0;L;;;;;N;;;;; +CBF2;HANGUL SYLLABLE JJYIGG;Lo;0;L;;;;;N;;;;; +CBF3;HANGUL SYLLABLE JJYIGS;Lo;0;L;;;;;N;;;;; +CBF4;HANGUL SYLLABLE JJYIN;Lo;0;L;;;;;N;;;;; +CBF5;HANGUL SYLLABLE JJYINI;Lo;0;L;;;;;N;;;;; +CBF6;HANGUL SYLLABLE JJYINH;Lo;0;L;;;;;N;;;;; +CBF7;HANGUL SYLLABLE JJYID;Lo;0;L;;;;;N;;;;; +CBF8;HANGUL SYLLABLE JJYIL;Lo;0;L;;;;;N;;;;; +CBF9;HANGUL SYLLABLE JJYILG;Lo;0;L;;;;;N;;;;; +CBFA;HANGUL SYLLABLE JJYILM;Lo;0;L;;;;;N;;;;; +CBFB;HANGUL SYLLABLE JJYILB;Lo;0;L;;;;;N;;;;; +CBFC;HANGUL SYLLABLE JJYILS;Lo;0;L;;;;;N;;;;; +CBFD;HANGUL SYLLABLE JJYILT;Lo;0;L;;;;;N;;;;; +CBFE;HANGUL SYLLABLE JJYILP;Lo;0;L;;;;;N;;;;; +CBFF;HANGUL SYLLABLE JJYILH;Lo;0;L;;;;;N;;;;; +CC00;HANGUL SYLLABLE JJYIM;Lo;0;L;;;;;N;;;;; +CC01;HANGUL SYLLABLE JJYIB;Lo;0;L;;;;;N;;;;; +CC02;HANGUL SYLLABLE JJYIBS;Lo;0;L;;;;;N;;;;; +CC03;HANGUL SYLLABLE JJYIS;Lo;0;L;;;;;N;;;;; +CC04;HANGUL SYLLABLE JJYISS;Lo;0;L;;;;;N;;;;; +CC05;HANGUL SYLLABLE JJYING;Lo;0;L;;;;;N;;;;; +CC06;HANGUL SYLLABLE JJYIJ;Lo;0;L;;;;;N;;;;; +CC07;HANGUL SYLLABLE JJYIC;Lo;0;L;;;;;N;;;;; +CC08;HANGUL SYLLABLE JJYIK;Lo;0;L;;;;;N;;;;; +CC09;HANGUL SYLLABLE JJYIT;Lo;0;L;;;;;N;;;;; +CC0A;HANGUL SYLLABLE JJYIP;Lo;0;L;;;;;N;;;;; +CC0B;HANGUL SYLLABLE JJYIH;Lo;0;L;;;;;N;;;;; +CC0C;HANGUL SYLLABLE JJI;Lo;0;L;;;;;N;;;;; +CC0D;HANGUL SYLLABLE JJIG;Lo;0;L;;;;;N;;;;; +CC0E;HANGUL SYLLABLE JJIGG;Lo;0;L;;;;;N;;;;; +CC0F;HANGUL SYLLABLE JJIGS;Lo;0;L;;;;;N;;;;; +CC10;HANGUL SYLLABLE JJIN;Lo;0;L;;;;;N;;;;; +CC11;HANGUL SYLLABLE JJINI;Lo;0;L;;;;;N;;;;; +CC12;HANGUL SYLLABLE JJINH;Lo;0;L;;;;;N;;;;; +CC13;HANGUL SYLLABLE JJID;Lo;0;L;;;;;N;;;;; +CC14;HANGUL SYLLABLE JJIL;Lo;0;L;;;;;N;;;;; +CC15;HANGUL SYLLABLE JJILG;Lo;0;L;;;;;N;;;;; +CC16;HANGUL SYLLABLE JJILM;Lo;0;L;;;;;N;;;;; +CC17;HANGUL SYLLABLE JJILB;Lo;0;L;;;;;N;;;;; +CC18;HANGUL SYLLABLE JJILS;Lo;0;L;;;;;N;;;;; +CC19;HANGUL SYLLABLE JJILT;Lo;0;L;;;;;N;;;;; +CC1A;HANGUL SYLLABLE JJILP;Lo;0;L;;;;;N;;;;; +CC1B;HANGUL SYLLABLE JJILH;Lo;0;L;;;;;N;;;;; +CC1C;HANGUL SYLLABLE JJIM;Lo;0;L;;;;;N;;;;; +CC1D;HANGUL SYLLABLE JJIB;Lo;0;L;;;;;N;;;;; +CC1E;HANGUL SYLLABLE JJIBS;Lo;0;L;;;;;N;;;;; +CC1F;HANGUL SYLLABLE JJIS;Lo;0;L;;;;;N;;;;; +CC20;HANGUL SYLLABLE JJISS;Lo;0;L;;;;;N;;;;; +CC21;HANGUL SYLLABLE JJING;Lo;0;L;;;;;N;;;;; +CC22;HANGUL SYLLABLE JJIJ;Lo;0;L;;;;;N;;;;; +CC23;HANGUL SYLLABLE JJIC;Lo;0;L;;;;;N;;;;; +CC24;HANGUL SYLLABLE JJIK;Lo;0;L;;;;;N;;;;; +CC25;HANGUL SYLLABLE JJIT;Lo;0;L;;;;;N;;;;; +CC26;HANGUL SYLLABLE JJIP;Lo;0;L;;;;;N;;;;; +CC27;HANGUL SYLLABLE JJIH;Lo;0;L;;;;;N;;;;; +CC28;HANGUL SYLLABLE CA;Lo;0;L;;;;;N;;;;; +CC29;HANGUL SYLLABLE CAG;Lo;0;L;;;;;N;;;;; +CC2A;HANGUL SYLLABLE CAGG;Lo;0;L;;;;;N;;;;; +CC2B;HANGUL SYLLABLE CAGS;Lo;0;L;;;;;N;;;;; +CC2C;HANGUL SYLLABLE CAN;Lo;0;L;;;;;N;;;;; +CC2D;HANGUL SYLLABLE CANI;Lo;0;L;;;;;N;;;;; +CC2E;HANGUL SYLLABLE CANH;Lo;0;L;;;;;N;;;;; +CC2F;HANGUL SYLLABLE CAD;Lo;0;L;;;;;N;;;;; +CC30;HANGUL SYLLABLE CAL;Lo;0;L;;;;;N;;;;; +CC31;HANGUL SYLLABLE CALG;Lo;0;L;;;;;N;;;;; +CC32;HANGUL SYLLABLE CALM;Lo;0;L;;;;;N;;;;; +CC33;HANGUL SYLLABLE CALB;Lo;0;L;;;;;N;;;;; +CC34;HANGUL SYLLABLE CALS;Lo;0;L;;;;;N;;;;; +CC35;HANGUL SYLLABLE CALT;Lo;0;L;;;;;N;;;;; +CC36;HANGUL SYLLABLE CALP;Lo;0;L;;;;;N;;;;; +CC37;HANGUL SYLLABLE CALH;Lo;0;L;;;;;N;;;;; +CC38;HANGUL SYLLABLE CAM;Lo;0;L;;;;;N;;;;; +CC39;HANGUL SYLLABLE CAB;Lo;0;L;;;;;N;;;;; +CC3A;HANGUL SYLLABLE CABS;Lo;0;L;;;;;N;;;;; +CC3B;HANGUL SYLLABLE CAS;Lo;0;L;;;;;N;;;;; +CC3C;HANGUL SYLLABLE CASS;Lo;0;L;;;;;N;;;;; +CC3D;HANGUL SYLLABLE CANG;Lo;0;L;;;;;N;;;;; +CC3E;HANGUL SYLLABLE CAJ;Lo;0;L;;;;;N;;;;; +CC3F;HANGUL SYLLABLE CAC;Lo;0;L;;;;;N;;;;; +CC40;HANGUL SYLLABLE CAK;Lo;0;L;;;;;N;;;;; +CC41;HANGUL SYLLABLE CAT;Lo;0;L;;;;;N;;;;; +CC42;HANGUL SYLLABLE CAP;Lo;0;L;;;;;N;;;;; +CC43;HANGUL SYLLABLE CAH;Lo;0;L;;;;;N;;;;; +CC44;HANGUL SYLLABLE CAE;Lo;0;L;;;;;N;;;;; +CC45;HANGUL SYLLABLE CAEG;Lo;0;L;;;;;N;;;;; +CC46;HANGUL SYLLABLE CAEGG;Lo;0;L;;;;;N;;;;; +CC47;HANGUL SYLLABLE CAEGS;Lo;0;L;;;;;N;;;;; +CC48;HANGUL SYLLABLE CAEN;Lo;0;L;;;;;N;;;;; +CC49;HANGUL SYLLABLE CAENI;Lo;0;L;;;;;N;;;;; +CC4A;HANGUL SYLLABLE CAENH;Lo;0;L;;;;;N;;;;; +CC4B;HANGUL SYLLABLE CAED;Lo;0;L;;;;;N;;;;; +CC4C;HANGUL SYLLABLE CAEL;Lo;0;L;;;;;N;;;;; +CC4D;HANGUL SYLLABLE CAELG;Lo;0;L;;;;;N;;;;; +CC4E;HANGUL SYLLABLE CAELM;Lo;0;L;;;;;N;;;;; +CC4F;HANGUL SYLLABLE CAELB;Lo;0;L;;;;;N;;;;; +CC50;HANGUL SYLLABLE CAELS;Lo;0;L;;;;;N;;;;; +CC51;HANGUL SYLLABLE CAELT;Lo;0;L;;;;;N;;;;; +CC52;HANGUL SYLLABLE CAELP;Lo;0;L;;;;;N;;;;; +CC53;HANGUL SYLLABLE CAELH;Lo;0;L;;;;;N;;;;; +CC54;HANGUL SYLLABLE CAEM;Lo;0;L;;;;;N;;;;; +CC55;HANGUL SYLLABLE CAEB;Lo;0;L;;;;;N;;;;; +CC56;HANGUL SYLLABLE CAEBS;Lo;0;L;;;;;N;;;;; +CC57;HANGUL SYLLABLE CAES;Lo;0;L;;;;;N;;;;; +CC58;HANGUL SYLLABLE CAESS;Lo;0;L;;;;;N;;;;; +CC59;HANGUL SYLLABLE CAENG;Lo;0;L;;;;;N;;;;; +CC5A;HANGUL SYLLABLE CAEJ;Lo;0;L;;;;;N;;;;; +CC5B;HANGUL SYLLABLE CAEC;Lo;0;L;;;;;N;;;;; +CC5C;HANGUL SYLLABLE CAEK;Lo;0;L;;;;;N;;;;; +CC5D;HANGUL SYLLABLE CAET;Lo;0;L;;;;;N;;;;; +CC5E;HANGUL SYLLABLE CAEP;Lo;0;L;;;;;N;;;;; +CC5F;HANGUL SYLLABLE CAEH;Lo;0;L;;;;;N;;;;; +CC60;HANGUL SYLLABLE CYA;Lo;0;L;;;;;N;;;;; +CC61;HANGUL SYLLABLE CYAG;Lo;0;L;;;;;N;;;;; +CC62;HANGUL SYLLABLE CYAGG;Lo;0;L;;;;;N;;;;; +CC63;HANGUL SYLLABLE CYAGS;Lo;0;L;;;;;N;;;;; +CC64;HANGUL SYLLABLE CYAN;Lo;0;L;;;;;N;;;;; +CC65;HANGUL SYLLABLE CYANI;Lo;0;L;;;;;N;;;;; +CC66;HANGUL SYLLABLE CYANH;Lo;0;L;;;;;N;;;;; +CC67;HANGUL SYLLABLE CYAD;Lo;0;L;;;;;N;;;;; +CC68;HANGUL SYLLABLE CYAL;Lo;0;L;;;;;N;;;;; +CC69;HANGUL SYLLABLE CYALG;Lo;0;L;;;;;N;;;;; +CC6A;HANGUL SYLLABLE CYALM;Lo;0;L;;;;;N;;;;; +CC6B;HANGUL SYLLABLE CYALB;Lo;0;L;;;;;N;;;;; +CC6C;HANGUL SYLLABLE CYALS;Lo;0;L;;;;;N;;;;; +CC6D;HANGUL SYLLABLE CYALT;Lo;0;L;;;;;N;;;;; +CC6E;HANGUL SYLLABLE CYALP;Lo;0;L;;;;;N;;;;; +CC6F;HANGUL SYLLABLE CYALH;Lo;0;L;;;;;N;;;;; +CC70;HANGUL SYLLABLE CYAM;Lo;0;L;;;;;N;;;;; +CC71;HANGUL SYLLABLE CYAB;Lo;0;L;;;;;N;;;;; +CC72;HANGUL SYLLABLE CYABS;Lo;0;L;;;;;N;;;;; +CC73;HANGUL SYLLABLE CYAS;Lo;0;L;;;;;N;;;;; +CC74;HANGUL SYLLABLE CYASS;Lo;0;L;;;;;N;;;;; +CC75;HANGUL SYLLABLE CYANG;Lo;0;L;;;;;N;;;;; +CC76;HANGUL SYLLABLE CYAJ;Lo;0;L;;;;;N;;;;; +CC77;HANGUL SYLLABLE CYAC;Lo;0;L;;;;;N;;;;; +CC78;HANGUL SYLLABLE CYAK;Lo;0;L;;;;;N;;;;; +CC79;HANGUL SYLLABLE CYAT;Lo;0;L;;;;;N;;;;; +CC7A;HANGUL SYLLABLE CYAP;Lo;0;L;;;;;N;;;;; +CC7B;HANGUL SYLLABLE CYAH;Lo;0;L;;;;;N;;;;; +CC7C;HANGUL SYLLABLE CYAE;Lo;0;L;;;;;N;;;;; +CC7D;HANGUL SYLLABLE CYAEG;Lo;0;L;;;;;N;;;;; +CC7E;HANGUL SYLLABLE CYAEGG;Lo;0;L;;;;;N;;;;; +CC7F;HANGUL SYLLABLE CYAEGS;Lo;0;L;;;;;N;;;;; +CC80;HANGUL SYLLABLE CYAEN;Lo;0;L;;;;;N;;;;; +CC81;HANGUL SYLLABLE CYAENI;Lo;0;L;;;;;N;;;;; +CC82;HANGUL SYLLABLE CYAENH;Lo;0;L;;;;;N;;;;; +CC83;HANGUL SYLLABLE CYAED;Lo;0;L;;;;;N;;;;; +CC84;HANGUL SYLLABLE CYAEL;Lo;0;L;;;;;N;;;;; +CC85;HANGUL SYLLABLE CYAELG;Lo;0;L;;;;;N;;;;; +CC86;HANGUL SYLLABLE CYAELM;Lo;0;L;;;;;N;;;;; +CC87;HANGUL SYLLABLE CYAELB;Lo;0;L;;;;;N;;;;; +CC88;HANGUL SYLLABLE CYAELS;Lo;0;L;;;;;N;;;;; +CC89;HANGUL SYLLABLE CYAELT;Lo;0;L;;;;;N;;;;; +CC8A;HANGUL SYLLABLE CYAELP;Lo;0;L;;;;;N;;;;; +CC8B;HANGUL SYLLABLE CYAELH;Lo;0;L;;;;;N;;;;; +CC8C;HANGUL SYLLABLE CYAEM;Lo;0;L;;;;;N;;;;; +CC8D;HANGUL SYLLABLE CYAEB;Lo;0;L;;;;;N;;;;; +CC8E;HANGUL SYLLABLE CYAEBS;Lo;0;L;;;;;N;;;;; +CC8F;HANGUL SYLLABLE CYAES;Lo;0;L;;;;;N;;;;; +CC90;HANGUL SYLLABLE CYAESS;Lo;0;L;;;;;N;;;;; +CC91;HANGUL SYLLABLE CYAENG;Lo;0;L;;;;;N;;;;; +CC92;HANGUL SYLLABLE CYAEJ;Lo;0;L;;;;;N;;;;; +CC93;HANGUL SYLLABLE CYAEC;Lo;0;L;;;;;N;;;;; +CC94;HANGUL SYLLABLE CYAEK;Lo;0;L;;;;;N;;;;; +CC95;HANGUL SYLLABLE CYAET;Lo;0;L;;;;;N;;;;; +CC96;HANGUL SYLLABLE CYAEP;Lo;0;L;;;;;N;;;;; +CC97;HANGUL SYLLABLE CYAEH;Lo;0;L;;;;;N;;;;; +CC98;HANGUL SYLLABLE CEO;Lo;0;L;;;;;N;;;;; +CC99;HANGUL SYLLABLE CEOG;Lo;0;L;;;;;N;;;;; +CC9A;HANGUL SYLLABLE CEOGG;Lo;0;L;;;;;N;;;;; +CC9B;HANGUL SYLLABLE CEOGS;Lo;0;L;;;;;N;;;;; +CC9C;HANGUL SYLLABLE CEON;Lo;0;L;;;;;N;;;;; +CC9D;HANGUL SYLLABLE CEONI;Lo;0;L;;;;;N;;;;; +CC9E;HANGUL SYLLABLE CEONH;Lo;0;L;;;;;N;;;;; +CC9F;HANGUL SYLLABLE CEOD;Lo;0;L;;;;;N;;;;; +CCA0;HANGUL SYLLABLE CEOL;Lo;0;L;;;;;N;;;;; +CCA1;HANGUL SYLLABLE CEOLG;Lo;0;L;;;;;N;;;;; +CCA2;HANGUL SYLLABLE CEOLM;Lo;0;L;;;;;N;;;;; +CCA3;HANGUL SYLLABLE CEOLB;Lo;0;L;;;;;N;;;;; +CCA4;HANGUL SYLLABLE CEOLS;Lo;0;L;;;;;N;;;;; +CCA5;HANGUL SYLLABLE CEOLT;Lo;0;L;;;;;N;;;;; +CCA6;HANGUL SYLLABLE CEOLP;Lo;0;L;;;;;N;;;;; +CCA7;HANGUL SYLLABLE CEOLH;Lo;0;L;;;;;N;;;;; +CCA8;HANGUL SYLLABLE CEOM;Lo;0;L;;;;;N;;;;; +CCA9;HANGUL SYLLABLE CEOB;Lo;0;L;;;;;N;;;;; +CCAA;HANGUL SYLLABLE CEOBS;Lo;0;L;;;;;N;;;;; +CCAB;HANGUL SYLLABLE CEOS;Lo;0;L;;;;;N;;;;; +CCAC;HANGUL SYLLABLE CEOSS;Lo;0;L;;;;;N;;;;; +CCAD;HANGUL SYLLABLE CEONG;Lo;0;L;;;;;N;;;;; +CCAE;HANGUL SYLLABLE CEOJ;Lo;0;L;;;;;N;;;;; +CCAF;HANGUL SYLLABLE CEOC;Lo;0;L;;;;;N;;;;; +CCB0;HANGUL SYLLABLE CEOK;Lo;0;L;;;;;N;;;;; +CCB1;HANGUL SYLLABLE CEOT;Lo;0;L;;;;;N;;;;; +CCB2;HANGUL SYLLABLE CEOP;Lo;0;L;;;;;N;;;;; +CCB3;HANGUL SYLLABLE CEOH;Lo;0;L;;;;;N;;;;; +CCB4;HANGUL SYLLABLE CE;Lo;0;L;;;;;N;;;;; +CCB5;HANGUL SYLLABLE CEG;Lo;0;L;;;;;N;;;;; +CCB6;HANGUL SYLLABLE CEGG;Lo;0;L;;;;;N;;;;; +CCB7;HANGUL SYLLABLE CEGS;Lo;0;L;;;;;N;;;;; +CCB8;HANGUL SYLLABLE CEN;Lo;0;L;;;;;N;;;;; +CCB9;HANGUL SYLLABLE CENI;Lo;0;L;;;;;N;;;;; +CCBA;HANGUL SYLLABLE CENH;Lo;0;L;;;;;N;;;;; +CCBB;HANGUL SYLLABLE CED;Lo;0;L;;;;;N;;;;; +CCBC;HANGUL SYLLABLE CEL;Lo;0;L;;;;;N;;;;; +CCBD;HANGUL SYLLABLE CELG;Lo;0;L;;;;;N;;;;; +CCBE;HANGUL SYLLABLE CELM;Lo;0;L;;;;;N;;;;; +CCBF;HANGUL SYLLABLE CELB;Lo;0;L;;;;;N;;;;; +CCC0;HANGUL SYLLABLE CELS;Lo;0;L;;;;;N;;;;; +CCC1;HANGUL SYLLABLE CELT;Lo;0;L;;;;;N;;;;; +CCC2;HANGUL SYLLABLE CELP;Lo;0;L;;;;;N;;;;; +CCC3;HANGUL SYLLABLE CELH;Lo;0;L;;;;;N;;;;; +CCC4;HANGUL SYLLABLE CEM;Lo;0;L;;;;;N;;;;; +CCC5;HANGUL SYLLABLE CEB;Lo;0;L;;;;;N;;;;; +CCC6;HANGUL SYLLABLE CEBS;Lo;0;L;;;;;N;;;;; +CCC7;HANGUL SYLLABLE CES;Lo;0;L;;;;;N;;;;; +CCC8;HANGUL SYLLABLE CESS;Lo;0;L;;;;;N;;;;; +CCC9;HANGUL SYLLABLE CENG;Lo;0;L;;;;;N;;;;; +CCCA;HANGUL SYLLABLE CEJ;Lo;0;L;;;;;N;;;;; +CCCB;HANGUL SYLLABLE CEC;Lo;0;L;;;;;N;;;;; +CCCC;HANGUL SYLLABLE CEK;Lo;0;L;;;;;N;;;;; +CCCD;HANGUL SYLLABLE CET;Lo;0;L;;;;;N;;;;; +CCCE;HANGUL SYLLABLE CEP;Lo;0;L;;;;;N;;;;; +CCCF;HANGUL SYLLABLE CEH;Lo;0;L;;;;;N;;;;; +CCD0;HANGUL SYLLABLE CYEO;Lo;0;L;;;;;N;;;;; +CCD1;HANGUL SYLLABLE CYEOG;Lo;0;L;;;;;N;;;;; +CCD2;HANGUL SYLLABLE CYEOGG;Lo;0;L;;;;;N;;;;; +CCD3;HANGUL SYLLABLE CYEOGS;Lo;0;L;;;;;N;;;;; +CCD4;HANGUL SYLLABLE CYEON;Lo;0;L;;;;;N;;;;; +CCD5;HANGUL SYLLABLE CYEONI;Lo;0;L;;;;;N;;;;; +CCD6;HANGUL SYLLABLE CYEONH;Lo;0;L;;;;;N;;;;; +CCD7;HANGUL SYLLABLE CYEOD;Lo;0;L;;;;;N;;;;; +CCD8;HANGUL SYLLABLE CYEOL;Lo;0;L;;;;;N;;;;; +CCD9;HANGUL SYLLABLE CYEOLG;Lo;0;L;;;;;N;;;;; +CCDA;HANGUL SYLLABLE CYEOLM;Lo;0;L;;;;;N;;;;; +CCDB;HANGUL SYLLABLE CYEOLB;Lo;0;L;;;;;N;;;;; +CCDC;HANGUL SYLLABLE CYEOLS;Lo;0;L;;;;;N;;;;; +CCDD;HANGUL SYLLABLE CYEOLT;Lo;0;L;;;;;N;;;;; +CCDE;HANGUL SYLLABLE CYEOLP;Lo;0;L;;;;;N;;;;; +CCDF;HANGUL SYLLABLE CYEOLH;Lo;0;L;;;;;N;;;;; +CCE0;HANGUL SYLLABLE CYEOM;Lo;0;L;;;;;N;;;;; +CCE1;HANGUL SYLLABLE CYEOB;Lo;0;L;;;;;N;;;;; +CCE2;HANGUL SYLLABLE CYEOBS;Lo;0;L;;;;;N;;;;; +CCE3;HANGUL SYLLABLE CYEOS;Lo;0;L;;;;;N;;;;; +CCE4;HANGUL SYLLABLE CYEOSS;Lo;0;L;;;;;N;;;;; +CCE5;HANGUL SYLLABLE CYEONG;Lo;0;L;;;;;N;;;;; +CCE6;HANGUL SYLLABLE CYEOJ;Lo;0;L;;;;;N;;;;; +CCE7;HANGUL SYLLABLE CYEOC;Lo;0;L;;;;;N;;;;; +CCE8;HANGUL SYLLABLE CYEOK;Lo;0;L;;;;;N;;;;; +CCE9;HANGUL SYLLABLE CYEOT;Lo;0;L;;;;;N;;;;; +CCEA;HANGUL SYLLABLE CYEOP;Lo;0;L;;;;;N;;;;; +CCEB;HANGUL SYLLABLE CYEOH;Lo;0;L;;;;;N;;;;; +CCEC;HANGUL SYLLABLE CYE;Lo;0;L;;;;;N;;;;; +CCED;HANGUL SYLLABLE CYEG;Lo;0;L;;;;;N;;;;; +CCEE;HANGUL SYLLABLE CYEGG;Lo;0;L;;;;;N;;;;; +CCEF;HANGUL SYLLABLE CYEGS;Lo;0;L;;;;;N;;;;; +CCF0;HANGUL SYLLABLE CYEN;Lo;0;L;;;;;N;;;;; +CCF1;HANGUL SYLLABLE CYENI;Lo;0;L;;;;;N;;;;; +CCF2;HANGUL SYLLABLE CYENH;Lo;0;L;;;;;N;;;;; +CCF3;HANGUL SYLLABLE CYED;Lo;0;L;;;;;N;;;;; +CCF4;HANGUL SYLLABLE CYEL;Lo;0;L;;;;;N;;;;; +CCF5;HANGUL SYLLABLE CYELG;Lo;0;L;;;;;N;;;;; +CCF6;HANGUL SYLLABLE CYELM;Lo;0;L;;;;;N;;;;; +CCF7;HANGUL SYLLABLE CYELB;Lo;0;L;;;;;N;;;;; +CCF8;HANGUL SYLLABLE CYELS;Lo;0;L;;;;;N;;;;; +CCF9;HANGUL SYLLABLE CYELT;Lo;0;L;;;;;N;;;;; +CCFA;HANGUL SYLLABLE CYELP;Lo;0;L;;;;;N;;;;; +CCFB;HANGUL SYLLABLE CYELH;Lo;0;L;;;;;N;;;;; +CCFC;HANGUL SYLLABLE CYEM;Lo;0;L;;;;;N;;;;; +CCFD;HANGUL SYLLABLE CYEB;Lo;0;L;;;;;N;;;;; +CCFE;HANGUL SYLLABLE CYEBS;Lo;0;L;;;;;N;;;;; +CCFF;HANGUL SYLLABLE CYES;Lo;0;L;;;;;N;;;;; +CD00;HANGUL SYLLABLE CYESS;Lo;0;L;;;;;N;;;;; +CD01;HANGUL SYLLABLE CYENG;Lo;0;L;;;;;N;;;;; +CD02;HANGUL SYLLABLE CYEJ;Lo;0;L;;;;;N;;;;; +CD03;HANGUL SYLLABLE CYEC;Lo;0;L;;;;;N;;;;; +CD04;HANGUL SYLLABLE CYEK;Lo;0;L;;;;;N;;;;; +CD05;HANGUL SYLLABLE CYET;Lo;0;L;;;;;N;;;;; +CD06;HANGUL SYLLABLE CYEP;Lo;0;L;;;;;N;;;;; +CD07;HANGUL SYLLABLE CYEH;Lo;0;L;;;;;N;;;;; +CD08;HANGUL SYLLABLE CO;Lo;0;L;;;;;N;;;;; +CD09;HANGUL SYLLABLE COG;Lo;0;L;;;;;N;;;;; +CD0A;HANGUL SYLLABLE COGG;Lo;0;L;;;;;N;;;;; +CD0B;HANGUL SYLLABLE COGS;Lo;0;L;;;;;N;;;;; +CD0C;HANGUL SYLLABLE CON;Lo;0;L;;;;;N;;;;; +CD0D;HANGUL SYLLABLE CONI;Lo;0;L;;;;;N;;;;; +CD0E;HANGUL SYLLABLE CONH;Lo;0;L;;;;;N;;;;; +CD0F;HANGUL SYLLABLE COD;Lo;0;L;;;;;N;;;;; +CD10;HANGUL SYLLABLE COL;Lo;0;L;;;;;N;;;;; +CD11;HANGUL SYLLABLE COLG;Lo;0;L;;;;;N;;;;; +CD12;HANGUL SYLLABLE COLM;Lo;0;L;;;;;N;;;;; +CD13;HANGUL SYLLABLE COLB;Lo;0;L;;;;;N;;;;; +CD14;HANGUL SYLLABLE COLS;Lo;0;L;;;;;N;;;;; +CD15;HANGUL SYLLABLE COLT;Lo;0;L;;;;;N;;;;; +CD16;HANGUL SYLLABLE COLP;Lo;0;L;;;;;N;;;;; +CD17;HANGUL SYLLABLE COLH;Lo;0;L;;;;;N;;;;; +CD18;HANGUL SYLLABLE COM;Lo;0;L;;;;;N;;;;; +CD19;HANGUL SYLLABLE COB;Lo;0;L;;;;;N;;;;; +CD1A;HANGUL SYLLABLE COBS;Lo;0;L;;;;;N;;;;; +CD1B;HANGUL SYLLABLE COS;Lo;0;L;;;;;N;;;;; +CD1C;HANGUL SYLLABLE COSS;Lo;0;L;;;;;N;;;;; +CD1D;HANGUL SYLLABLE CONG;Lo;0;L;;;;;N;;;;; +CD1E;HANGUL SYLLABLE COJ;Lo;0;L;;;;;N;;;;; +CD1F;HANGUL SYLLABLE COC;Lo;0;L;;;;;N;;;;; +CD20;HANGUL SYLLABLE COK;Lo;0;L;;;;;N;;;;; +CD21;HANGUL SYLLABLE COT;Lo;0;L;;;;;N;;;;; +CD22;HANGUL SYLLABLE COP;Lo;0;L;;;;;N;;;;; +CD23;HANGUL SYLLABLE COH;Lo;0;L;;;;;N;;;;; +CD24;HANGUL SYLLABLE CWA;Lo;0;L;;;;;N;;;;; +CD25;HANGUL SYLLABLE CWAG;Lo;0;L;;;;;N;;;;; +CD26;HANGUL SYLLABLE CWAGG;Lo;0;L;;;;;N;;;;; +CD27;HANGUL SYLLABLE CWAGS;Lo;0;L;;;;;N;;;;; +CD28;HANGUL SYLLABLE CWAN;Lo;0;L;;;;;N;;;;; +CD29;HANGUL SYLLABLE CWANI;Lo;0;L;;;;;N;;;;; +CD2A;HANGUL SYLLABLE CWANH;Lo;0;L;;;;;N;;;;; +CD2B;HANGUL SYLLABLE CWAD;Lo;0;L;;;;;N;;;;; +CD2C;HANGUL SYLLABLE CWAL;Lo;0;L;;;;;N;;;;; +CD2D;HANGUL SYLLABLE CWALG;Lo;0;L;;;;;N;;;;; +CD2E;HANGUL SYLLABLE CWALM;Lo;0;L;;;;;N;;;;; +CD2F;HANGUL SYLLABLE CWALB;Lo;0;L;;;;;N;;;;; +CD30;HANGUL SYLLABLE CWALS;Lo;0;L;;;;;N;;;;; +CD31;HANGUL SYLLABLE CWALT;Lo;0;L;;;;;N;;;;; +CD32;HANGUL SYLLABLE CWALP;Lo;0;L;;;;;N;;;;; +CD33;HANGUL SYLLABLE CWALH;Lo;0;L;;;;;N;;;;; +CD34;HANGUL SYLLABLE CWAM;Lo;0;L;;;;;N;;;;; +CD35;HANGUL SYLLABLE CWAB;Lo;0;L;;;;;N;;;;; +CD36;HANGUL SYLLABLE CWABS;Lo;0;L;;;;;N;;;;; +CD37;HANGUL SYLLABLE CWAS;Lo;0;L;;;;;N;;;;; +CD38;HANGUL SYLLABLE CWASS;Lo;0;L;;;;;N;;;;; +CD39;HANGUL SYLLABLE CWANG;Lo;0;L;;;;;N;;;;; +CD3A;HANGUL SYLLABLE CWAJ;Lo;0;L;;;;;N;;;;; +CD3B;HANGUL SYLLABLE CWAC;Lo;0;L;;;;;N;;;;; +CD3C;HANGUL SYLLABLE CWAK;Lo;0;L;;;;;N;;;;; +CD3D;HANGUL SYLLABLE CWAT;Lo;0;L;;;;;N;;;;; +CD3E;HANGUL SYLLABLE CWAP;Lo;0;L;;;;;N;;;;; +CD3F;HANGUL SYLLABLE CWAH;Lo;0;L;;;;;N;;;;; +CD40;HANGUL SYLLABLE CWAE;Lo;0;L;;;;;N;;;;; +CD41;HANGUL SYLLABLE CWAEG;Lo;0;L;;;;;N;;;;; +CD42;HANGUL SYLLABLE CWAEGG;Lo;0;L;;;;;N;;;;; +CD43;HANGUL SYLLABLE CWAEGS;Lo;0;L;;;;;N;;;;; +CD44;HANGUL SYLLABLE CWAEN;Lo;0;L;;;;;N;;;;; +CD45;HANGUL SYLLABLE CWAENI;Lo;0;L;;;;;N;;;;; +CD46;HANGUL SYLLABLE CWAENH;Lo;0;L;;;;;N;;;;; +CD47;HANGUL SYLLABLE CWAED;Lo;0;L;;;;;N;;;;; +CD48;HANGUL SYLLABLE CWAEL;Lo;0;L;;;;;N;;;;; +CD49;HANGUL SYLLABLE CWAELG;Lo;0;L;;;;;N;;;;; +CD4A;HANGUL SYLLABLE CWAELM;Lo;0;L;;;;;N;;;;; +CD4B;HANGUL SYLLABLE CWAELB;Lo;0;L;;;;;N;;;;; +CD4C;HANGUL SYLLABLE CWAELS;Lo;0;L;;;;;N;;;;; +CD4D;HANGUL SYLLABLE CWAELT;Lo;0;L;;;;;N;;;;; +CD4E;HANGUL SYLLABLE CWAELP;Lo;0;L;;;;;N;;;;; +CD4F;HANGUL SYLLABLE CWAELH;Lo;0;L;;;;;N;;;;; +CD50;HANGUL SYLLABLE CWAEM;Lo;0;L;;;;;N;;;;; +CD51;HANGUL SYLLABLE CWAEB;Lo;0;L;;;;;N;;;;; +CD52;HANGUL SYLLABLE CWAEBS;Lo;0;L;;;;;N;;;;; +CD53;HANGUL SYLLABLE CWAES;Lo;0;L;;;;;N;;;;; +CD54;HANGUL SYLLABLE CWAESS;Lo;0;L;;;;;N;;;;; +CD55;HANGUL SYLLABLE CWAENG;Lo;0;L;;;;;N;;;;; +CD56;HANGUL SYLLABLE CWAEJ;Lo;0;L;;;;;N;;;;; +CD57;HANGUL SYLLABLE CWAEC;Lo;0;L;;;;;N;;;;; +CD58;HANGUL SYLLABLE CWAEK;Lo;0;L;;;;;N;;;;; +CD59;HANGUL SYLLABLE CWAET;Lo;0;L;;;;;N;;;;; +CD5A;HANGUL SYLLABLE CWAEP;Lo;0;L;;;;;N;;;;; +CD5B;HANGUL SYLLABLE CWAEH;Lo;0;L;;;;;N;;;;; +CD5C;HANGUL SYLLABLE COE;Lo;0;L;;;;;N;;;;; +CD5D;HANGUL SYLLABLE COEG;Lo;0;L;;;;;N;;;;; +CD5E;HANGUL SYLLABLE COEGG;Lo;0;L;;;;;N;;;;; +CD5F;HANGUL SYLLABLE COEGS;Lo;0;L;;;;;N;;;;; +CD60;HANGUL SYLLABLE COEN;Lo;0;L;;;;;N;;;;; +CD61;HANGUL SYLLABLE COENI;Lo;0;L;;;;;N;;;;; +CD62;HANGUL SYLLABLE COENH;Lo;0;L;;;;;N;;;;; +CD63;HANGUL SYLLABLE COED;Lo;0;L;;;;;N;;;;; +CD64;HANGUL SYLLABLE COEL;Lo;0;L;;;;;N;;;;; +CD65;HANGUL SYLLABLE COELG;Lo;0;L;;;;;N;;;;; +CD66;HANGUL SYLLABLE COELM;Lo;0;L;;;;;N;;;;; +CD67;HANGUL SYLLABLE COELB;Lo;0;L;;;;;N;;;;; +CD68;HANGUL SYLLABLE COELS;Lo;0;L;;;;;N;;;;; +CD69;HANGUL SYLLABLE COELT;Lo;0;L;;;;;N;;;;; +CD6A;HANGUL SYLLABLE COELP;Lo;0;L;;;;;N;;;;; +CD6B;HANGUL SYLLABLE COELH;Lo;0;L;;;;;N;;;;; +CD6C;HANGUL SYLLABLE COEM;Lo;0;L;;;;;N;;;;; +CD6D;HANGUL SYLLABLE COEB;Lo;0;L;;;;;N;;;;; +CD6E;HANGUL SYLLABLE COEBS;Lo;0;L;;;;;N;;;;; +CD6F;HANGUL SYLLABLE COES;Lo;0;L;;;;;N;;;;; +CD70;HANGUL SYLLABLE COESS;Lo;0;L;;;;;N;;;;; +CD71;HANGUL SYLLABLE COENG;Lo;0;L;;;;;N;;;;; +CD72;HANGUL SYLLABLE COEJ;Lo;0;L;;;;;N;;;;; +CD73;HANGUL SYLLABLE COEC;Lo;0;L;;;;;N;;;;; +CD74;HANGUL SYLLABLE COEK;Lo;0;L;;;;;N;;;;; +CD75;HANGUL SYLLABLE COET;Lo;0;L;;;;;N;;;;; +CD76;HANGUL SYLLABLE COEP;Lo;0;L;;;;;N;;;;; +CD77;HANGUL SYLLABLE COEH;Lo;0;L;;;;;N;;;;; +CD78;HANGUL SYLLABLE CYO;Lo;0;L;;;;;N;;;;; +CD79;HANGUL SYLLABLE CYOG;Lo;0;L;;;;;N;;;;; +CD7A;HANGUL SYLLABLE CYOGG;Lo;0;L;;;;;N;;;;; +CD7B;HANGUL SYLLABLE CYOGS;Lo;0;L;;;;;N;;;;; +CD7C;HANGUL SYLLABLE CYON;Lo;0;L;;;;;N;;;;; +CD7D;HANGUL SYLLABLE CYONI;Lo;0;L;;;;;N;;;;; +CD7E;HANGUL SYLLABLE CYONH;Lo;0;L;;;;;N;;;;; +CD7F;HANGUL SYLLABLE CYOD;Lo;0;L;;;;;N;;;;; +CD80;HANGUL SYLLABLE CYOL;Lo;0;L;;;;;N;;;;; +CD81;HANGUL SYLLABLE CYOLG;Lo;0;L;;;;;N;;;;; +CD82;HANGUL SYLLABLE CYOLM;Lo;0;L;;;;;N;;;;; +CD83;HANGUL SYLLABLE CYOLB;Lo;0;L;;;;;N;;;;; +CD84;HANGUL SYLLABLE CYOLS;Lo;0;L;;;;;N;;;;; +CD85;HANGUL SYLLABLE CYOLT;Lo;0;L;;;;;N;;;;; +CD86;HANGUL SYLLABLE CYOLP;Lo;0;L;;;;;N;;;;; +CD87;HANGUL SYLLABLE CYOLH;Lo;0;L;;;;;N;;;;; +CD88;HANGUL SYLLABLE CYOM;Lo;0;L;;;;;N;;;;; +CD89;HANGUL SYLLABLE CYOB;Lo;0;L;;;;;N;;;;; +CD8A;HANGUL SYLLABLE CYOBS;Lo;0;L;;;;;N;;;;; +CD8B;HANGUL SYLLABLE CYOS;Lo;0;L;;;;;N;;;;; +CD8C;HANGUL SYLLABLE CYOSS;Lo;0;L;;;;;N;;;;; +CD8D;HANGUL SYLLABLE CYONG;Lo;0;L;;;;;N;;;;; +CD8E;HANGUL SYLLABLE CYOJ;Lo;0;L;;;;;N;;;;; +CD8F;HANGUL SYLLABLE CYOC;Lo;0;L;;;;;N;;;;; +CD90;HANGUL SYLLABLE CYOK;Lo;0;L;;;;;N;;;;; +CD91;HANGUL SYLLABLE CYOT;Lo;0;L;;;;;N;;;;; +CD92;HANGUL SYLLABLE CYOP;Lo;0;L;;;;;N;;;;; +CD93;HANGUL SYLLABLE CYOH;Lo;0;L;;;;;N;;;;; +CD94;HANGUL SYLLABLE CU;Lo;0;L;;;;;N;;;;; +CD95;HANGUL SYLLABLE CUG;Lo;0;L;;;;;N;;;;; +CD96;HANGUL SYLLABLE CUGG;Lo;0;L;;;;;N;;;;; +CD97;HANGUL SYLLABLE CUGS;Lo;0;L;;;;;N;;;;; +CD98;HANGUL SYLLABLE CUN;Lo;0;L;;;;;N;;;;; +CD99;HANGUL SYLLABLE CUNI;Lo;0;L;;;;;N;;;;; +CD9A;HANGUL SYLLABLE CUNH;Lo;0;L;;;;;N;;;;; +CD9B;HANGUL SYLLABLE CUD;Lo;0;L;;;;;N;;;;; +CD9C;HANGUL SYLLABLE CUL;Lo;0;L;;;;;N;;;;; +CD9D;HANGUL SYLLABLE CULG;Lo;0;L;;;;;N;;;;; +CD9E;HANGUL SYLLABLE CULM;Lo;0;L;;;;;N;;;;; +CD9F;HANGUL SYLLABLE CULB;Lo;0;L;;;;;N;;;;; +CDA0;HANGUL SYLLABLE CULS;Lo;0;L;;;;;N;;;;; +CDA1;HANGUL SYLLABLE CULT;Lo;0;L;;;;;N;;;;; +CDA2;HANGUL SYLLABLE CULP;Lo;0;L;;;;;N;;;;; +CDA3;HANGUL SYLLABLE CULH;Lo;0;L;;;;;N;;;;; +CDA4;HANGUL SYLLABLE CUM;Lo;0;L;;;;;N;;;;; +CDA5;HANGUL SYLLABLE CUB;Lo;0;L;;;;;N;;;;; +CDA6;HANGUL SYLLABLE CUBS;Lo;0;L;;;;;N;;;;; +CDA7;HANGUL SYLLABLE CUS;Lo;0;L;;;;;N;;;;; +CDA8;HANGUL SYLLABLE CUSS;Lo;0;L;;;;;N;;;;; +CDA9;HANGUL SYLLABLE CUNG;Lo;0;L;;;;;N;;;;; +CDAA;HANGUL SYLLABLE CUJ;Lo;0;L;;;;;N;;;;; +CDAB;HANGUL SYLLABLE CUC;Lo;0;L;;;;;N;;;;; +CDAC;HANGUL SYLLABLE CUK;Lo;0;L;;;;;N;;;;; +CDAD;HANGUL SYLLABLE CUT;Lo;0;L;;;;;N;;;;; +CDAE;HANGUL SYLLABLE CUP;Lo;0;L;;;;;N;;;;; +CDAF;HANGUL SYLLABLE CUH;Lo;0;L;;;;;N;;;;; +CDB0;HANGUL SYLLABLE CWEO;Lo;0;L;;;;;N;;;;; +CDB1;HANGUL SYLLABLE CWEOG;Lo;0;L;;;;;N;;;;; +CDB2;HANGUL SYLLABLE CWEOGG;Lo;0;L;;;;;N;;;;; +CDB3;HANGUL SYLLABLE CWEOGS;Lo;0;L;;;;;N;;;;; +CDB4;HANGUL SYLLABLE CWEON;Lo;0;L;;;;;N;;;;; +CDB5;HANGUL SYLLABLE CWEONI;Lo;0;L;;;;;N;;;;; +CDB6;HANGUL SYLLABLE CWEONH;Lo;0;L;;;;;N;;;;; +CDB7;HANGUL SYLLABLE CWEOD;Lo;0;L;;;;;N;;;;; +CDB8;HANGUL SYLLABLE CWEOL;Lo;0;L;;;;;N;;;;; +CDB9;HANGUL SYLLABLE CWEOLG;Lo;0;L;;;;;N;;;;; +CDBA;HANGUL SYLLABLE CWEOLM;Lo;0;L;;;;;N;;;;; +CDBB;HANGUL SYLLABLE CWEOLB;Lo;0;L;;;;;N;;;;; +CDBC;HANGUL SYLLABLE CWEOLS;Lo;0;L;;;;;N;;;;; +CDBD;HANGUL SYLLABLE CWEOLT;Lo;0;L;;;;;N;;;;; +CDBE;HANGUL SYLLABLE CWEOLP;Lo;0;L;;;;;N;;;;; +CDBF;HANGUL SYLLABLE CWEOLH;Lo;0;L;;;;;N;;;;; +CDC0;HANGUL SYLLABLE CWEOM;Lo;0;L;;;;;N;;;;; +CDC1;HANGUL SYLLABLE CWEOB;Lo;0;L;;;;;N;;;;; +CDC2;HANGUL SYLLABLE CWEOBS;Lo;0;L;;;;;N;;;;; +CDC3;HANGUL SYLLABLE CWEOS;Lo;0;L;;;;;N;;;;; +CDC4;HANGUL SYLLABLE CWEOSS;Lo;0;L;;;;;N;;;;; +CDC5;HANGUL SYLLABLE CWEONG;Lo;0;L;;;;;N;;;;; +CDC6;HANGUL SYLLABLE CWEOJ;Lo;0;L;;;;;N;;;;; +CDC7;HANGUL SYLLABLE CWEOC;Lo;0;L;;;;;N;;;;; +CDC8;HANGUL SYLLABLE CWEOK;Lo;0;L;;;;;N;;;;; +CDC9;HANGUL SYLLABLE CWEOT;Lo;0;L;;;;;N;;;;; +CDCA;HANGUL SYLLABLE CWEOP;Lo;0;L;;;;;N;;;;; +CDCB;HANGUL SYLLABLE CWEOH;Lo;0;L;;;;;N;;;;; +CDCC;HANGUL SYLLABLE CWE;Lo;0;L;;;;;N;;;;; +CDCD;HANGUL SYLLABLE CWEG;Lo;0;L;;;;;N;;;;; +CDCE;HANGUL SYLLABLE CWEGG;Lo;0;L;;;;;N;;;;; +CDCF;HANGUL SYLLABLE CWEGS;Lo;0;L;;;;;N;;;;; +CDD0;HANGUL SYLLABLE CWEN;Lo;0;L;;;;;N;;;;; +CDD1;HANGUL SYLLABLE CWENI;Lo;0;L;;;;;N;;;;; +CDD2;HANGUL SYLLABLE CWENH;Lo;0;L;;;;;N;;;;; +CDD3;HANGUL SYLLABLE CWED;Lo;0;L;;;;;N;;;;; +CDD4;HANGUL SYLLABLE CWEL;Lo;0;L;;;;;N;;;;; +CDD5;HANGUL SYLLABLE CWELG;Lo;0;L;;;;;N;;;;; +CDD6;HANGUL SYLLABLE CWELM;Lo;0;L;;;;;N;;;;; +CDD7;HANGUL SYLLABLE CWELB;Lo;0;L;;;;;N;;;;; +CDD8;HANGUL SYLLABLE CWELS;Lo;0;L;;;;;N;;;;; +CDD9;HANGUL SYLLABLE CWELT;Lo;0;L;;;;;N;;;;; +CDDA;HANGUL SYLLABLE CWELP;Lo;0;L;;;;;N;;;;; +CDDB;HANGUL SYLLABLE CWELH;Lo;0;L;;;;;N;;;;; +CDDC;HANGUL SYLLABLE CWEM;Lo;0;L;;;;;N;;;;; +CDDD;HANGUL SYLLABLE CWEB;Lo;0;L;;;;;N;;;;; +CDDE;HANGUL SYLLABLE CWEBS;Lo;0;L;;;;;N;;;;; +CDDF;HANGUL SYLLABLE CWES;Lo;0;L;;;;;N;;;;; +CDE0;HANGUL SYLLABLE CWESS;Lo;0;L;;;;;N;;;;; +CDE1;HANGUL SYLLABLE CWENG;Lo;0;L;;;;;N;;;;; +CDE2;HANGUL SYLLABLE CWEJ;Lo;0;L;;;;;N;;;;; +CDE3;HANGUL SYLLABLE CWEC;Lo;0;L;;;;;N;;;;; +CDE4;HANGUL SYLLABLE CWEK;Lo;0;L;;;;;N;;;;; +CDE5;HANGUL SYLLABLE CWET;Lo;0;L;;;;;N;;;;; +CDE6;HANGUL SYLLABLE CWEP;Lo;0;L;;;;;N;;;;; +CDE7;HANGUL SYLLABLE CWEH;Lo;0;L;;;;;N;;;;; +CDE8;HANGUL SYLLABLE CWI;Lo;0;L;;;;;N;;;;; +CDE9;HANGUL SYLLABLE CWIG;Lo;0;L;;;;;N;;;;; +CDEA;HANGUL SYLLABLE CWIGG;Lo;0;L;;;;;N;;;;; +CDEB;HANGUL SYLLABLE CWIGS;Lo;0;L;;;;;N;;;;; +CDEC;HANGUL SYLLABLE CWIN;Lo;0;L;;;;;N;;;;; +CDED;HANGUL SYLLABLE CWINI;Lo;0;L;;;;;N;;;;; +CDEE;HANGUL SYLLABLE CWINH;Lo;0;L;;;;;N;;;;; +CDEF;HANGUL SYLLABLE CWID;Lo;0;L;;;;;N;;;;; +CDF0;HANGUL SYLLABLE CWIL;Lo;0;L;;;;;N;;;;; +CDF1;HANGUL SYLLABLE CWILG;Lo;0;L;;;;;N;;;;; +CDF2;HANGUL SYLLABLE CWILM;Lo;0;L;;;;;N;;;;; +CDF3;HANGUL SYLLABLE CWILB;Lo;0;L;;;;;N;;;;; +CDF4;HANGUL SYLLABLE CWILS;Lo;0;L;;;;;N;;;;; +CDF5;HANGUL SYLLABLE CWILT;Lo;0;L;;;;;N;;;;; +CDF6;HANGUL SYLLABLE CWILP;Lo;0;L;;;;;N;;;;; +CDF7;HANGUL SYLLABLE CWILH;Lo;0;L;;;;;N;;;;; +CDF8;HANGUL SYLLABLE CWIM;Lo;0;L;;;;;N;;;;; +CDF9;HANGUL SYLLABLE CWIB;Lo;0;L;;;;;N;;;;; +CDFA;HANGUL SYLLABLE CWIBS;Lo;0;L;;;;;N;;;;; +CDFB;HANGUL SYLLABLE CWIS;Lo;0;L;;;;;N;;;;; +CDFC;HANGUL SYLLABLE CWISS;Lo;0;L;;;;;N;;;;; +CDFD;HANGUL SYLLABLE CWING;Lo;0;L;;;;;N;;;;; +CDFE;HANGUL SYLLABLE CWIJ;Lo;0;L;;;;;N;;;;; +CDFF;HANGUL SYLLABLE CWIC;Lo;0;L;;;;;N;;;;; +CE00;HANGUL SYLLABLE CWIK;Lo;0;L;;;;;N;;;;; +CE01;HANGUL SYLLABLE CWIT;Lo;0;L;;;;;N;;;;; +CE02;HANGUL SYLLABLE CWIP;Lo;0;L;;;;;N;;;;; +CE03;HANGUL SYLLABLE CWIH;Lo;0;L;;;;;N;;;;; +CE04;HANGUL SYLLABLE CYU;Lo;0;L;;;;;N;;;;; +CE05;HANGUL SYLLABLE CYUG;Lo;0;L;;;;;N;;;;; +CE06;HANGUL SYLLABLE CYUGG;Lo;0;L;;;;;N;;;;; +CE07;HANGUL SYLLABLE CYUGS;Lo;0;L;;;;;N;;;;; +CE08;HANGUL SYLLABLE CYUN;Lo;0;L;;;;;N;;;;; +CE09;HANGUL SYLLABLE CYUNI;Lo;0;L;;;;;N;;;;; +CE0A;HANGUL SYLLABLE CYUNH;Lo;0;L;;;;;N;;;;; +CE0B;HANGUL SYLLABLE CYUD;Lo;0;L;;;;;N;;;;; +CE0C;HANGUL SYLLABLE CYUL;Lo;0;L;;;;;N;;;;; +CE0D;HANGUL SYLLABLE CYULG;Lo;0;L;;;;;N;;;;; +CE0E;HANGUL SYLLABLE CYULM;Lo;0;L;;;;;N;;;;; +CE0F;HANGUL SYLLABLE CYULB;Lo;0;L;;;;;N;;;;; +CE10;HANGUL SYLLABLE CYULS;Lo;0;L;;;;;N;;;;; +CE11;HANGUL SYLLABLE CYULT;Lo;0;L;;;;;N;;;;; +CE12;HANGUL SYLLABLE CYULP;Lo;0;L;;;;;N;;;;; +CE13;HANGUL SYLLABLE CYULH;Lo;0;L;;;;;N;;;;; +CE14;HANGUL SYLLABLE CYUM;Lo;0;L;;;;;N;;;;; +CE15;HANGUL SYLLABLE CYUB;Lo;0;L;;;;;N;;;;; +CE16;HANGUL SYLLABLE CYUBS;Lo;0;L;;;;;N;;;;; +CE17;HANGUL SYLLABLE CYUS;Lo;0;L;;;;;N;;;;; +CE18;HANGUL SYLLABLE CYUSS;Lo;0;L;;;;;N;;;;; +CE19;HANGUL SYLLABLE CYUNG;Lo;0;L;;;;;N;;;;; +CE1A;HANGUL SYLLABLE CYUJ;Lo;0;L;;;;;N;;;;; +CE1B;HANGUL SYLLABLE CYUC;Lo;0;L;;;;;N;;;;; +CE1C;HANGUL SYLLABLE CYUK;Lo;0;L;;;;;N;;;;; +CE1D;HANGUL SYLLABLE CYUT;Lo;0;L;;;;;N;;;;; +CE1E;HANGUL SYLLABLE CYUP;Lo;0;L;;;;;N;;;;; +CE1F;HANGUL SYLLABLE CYUH;Lo;0;L;;;;;N;;;;; +CE20;HANGUL SYLLABLE CEU;Lo;0;L;;;;;N;;;;; +CE21;HANGUL SYLLABLE CEUG;Lo;0;L;;;;;N;;;;; +CE22;HANGUL SYLLABLE CEUGG;Lo;0;L;;;;;N;;;;; +CE23;HANGUL SYLLABLE CEUGS;Lo;0;L;;;;;N;;;;; +CE24;HANGUL SYLLABLE CEUN;Lo;0;L;;;;;N;;;;; +CE25;HANGUL SYLLABLE CEUNI;Lo;0;L;;;;;N;;;;; +CE26;HANGUL SYLLABLE CEUNH;Lo;0;L;;;;;N;;;;; +CE27;HANGUL SYLLABLE CEUD;Lo;0;L;;;;;N;;;;; +CE28;HANGUL SYLLABLE CEUL;Lo;0;L;;;;;N;;;;; +CE29;HANGUL SYLLABLE CEULG;Lo;0;L;;;;;N;;;;; +CE2A;HANGUL SYLLABLE CEULM;Lo;0;L;;;;;N;;;;; +CE2B;HANGUL SYLLABLE CEULB;Lo;0;L;;;;;N;;;;; +CE2C;HANGUL SYLLABLE CEULS;Lo;0;L;;;;;N;;;;; +CE2D;HANGUL SYLLABLE CEULT;Lo;0;L;;;;;N;;;;; +CE2E;HANGUL SYLLABLE CEULP;Lo;0;L;;;;;N;;;;; +CE2F;HANGUL SYLLABLE CEULH;Lo;0;L;;;;;N;;;;; +CE30;HANGUL SYLLABLE CEUM;Lo;0;L;;;;;N;;;;; +CE31;HANGUL SYLLABLE CEUB;Lo;0;L;;;;;N;;;;; +CE32;HANGUL SYLLABLE CEUBS;Lo;0;L;;;;;N;;;;; +CE33;HANGUL SYLLABLE CEUS;Lo;0;L;;;;;N;;;;; +CE34;HANGUL SYLLABLE CEUSS;Lo;0;L;;;;;N;;;;; +CE35;HANGUL SYLLABLE CEUNG;Lo;0;L;;;;;N;;;;; +CE36;HANGUL SYLLABLE CEUJ;Lo;0;L;;;;;N;;;;; +CE37;HANGUL SYLLABLE CEUC;Lo;0;L;;;;;N;;;;; +CE38;HANGUL SYLLABLE CEUK;Lo;0;L;;;;;N;;;;; +CE39;HANGUL SYLLABLE CEUT;Lo;0;L;;;;;N;;;;; +CE3A;HANGUL SYLLABLE CEUP;Lo;0;L;;;;;N;;;;; +CE3B;HANGUL SYLLABLE CEUH;Lo;0;L;;;;;N;;;;; +CE3C;HANGUL SYLLABLE CYI;Lo;0;L;;;;;N;;;;; +CE3D;HANGUL SYLLABLE CYIG;Lo;0;L;;;;;N;;;;; +CE3E;HANGUL SYLLABLE CYIGG;Lo;0;L;;;;;N;;;;; +CE3F;HANGUL SYLLABLE CYIGS;Lo;0;L;;;;;N;;;;; +CE40;HANGUL SYLLABLE CYIN;Lo;0;L;;;;;N;;;;; +CE41;HANGUL SYLLABLE CYINI;Lo;0;L;;;;;N;;;;; +CE42;HANGUL SYLLABLE CYINH;Lo;0;L;;;;;N;;;;; +CE43;HANGUL SYLLABLE CYID;Lo;0;L;;;;;N;;;;; +CE44;HANGUL SYLLABLE CYIL;Lo;0;L;;;;;N;;;;; +CE45;HANGUL SYLLABLE CYILG;Lo;0;L;;;;;N;;;;; +CE46;HANGUL SYLLABLE CYILM;Lo;0;L;;;;;N;;;;; +CE47;HANGUL SYLLABLE CYILB;Lo;0;L;;;;;N;;;;; +CE48;HANGUL SYLLABLE CYILS;Lo;0;L;;;;;N;;;;; +CE49;HANGUL SYLLABLE CYILT;Lo;0;L;;;;;N;;;;; +CE4A;HANGUL SYLLABLE CYILP;Lo;0;L;;;;;N;;;;; +CE4B;HANGUL SYLLABLE CYILH;Lo;0;L;;;;;N;;;;; +CE4C;HANGUL SYLLABLE CYIM;Lo;0;L;;;;;N;;;;; +CE4D;HANGUL SYLLABLE CYIB;Lo;0;L;;;;;N;;;;; +CE4E;HANGUL SYLLABLE CYIBS;Lo;0;L;;;;;N;;;;; +CE4F;HANGUL SYLLABLE CYIS;Lo;0;L;;;;;N;;;;; +CE50;HANGUL SYLLABLE CYISS;Lo;0;L;;;;;N;;;;; +CE51;HANGUL SYLLABLE CYING;Lo;0;L;;;;;N;;;;; +CE52;HANGUL SYLLABLE CYIJ;Lo;0;L;;;;;N;;;;; +CE53;HANGUL SYLLABLE CYIC;Lo;0;L;;;;;N;;;;; +CE54;HANGUL SYLLABLE CYIK;Lo;0;L;;;;;N;;;;; +CE55;HANGUL SYLLABLE CYIT;Lo;0;L;;;;;N;;;;; +CE56;HANGUL SYLLABLE CYIP;Lo;0;L;;;;;N;;;;; +CE57;HANGUL SYLLABLE CYIH;Lo;0;L;;;;;N;;;;; +CE58;HANGUL SYLLABLE CI;Lo;0;L;;;;;N;;;;; +CE59;HANGUL SYLLABLE CIG;Lo;0;L;;;;;N;;;;; +CE5A;HANGUL SYLLABLE CIGG;Lo;0;L;;;;;N;;;;; +CE5B;HANGUL SYLLABLE CIGS;Lo;0;L;;;;;N;;;;; +CE5C;HANGUL SYLLABLE CIN;Lo;0;L;;;;;N;;;;; +CE5D;HANGUL SYLLABLE CINI;Lo;0;L;;;;;N;;;;; +CE5E;HANGUL SYLLABLE CINH;Lo;0;L;;;;;N;;;;; +CE5F;HANGUL SYLLABLE CID;Lo;0;L;;;;;N;;;;; +CE60;HANGUL SYLLABLE CIL;Lo;0;L;;;;;N;;;;; +CE61;HANGUL SYLLABLE CILG;Lo;0;L;;;;;N;;;;; +CE62;HANGUL SYLLABLE CILM;Lo;0;L;;;;;N;;;;; +CE63;HANGUL SYLLABLE CILB;Lo;0;L;;;;;N;;;;; +CE64;HANGUL SYLLABLE CILS;Lo;0;L;;;;;N;;;;; +CE65;HANGUL SYLLABLE CILT;Lo;0;L;;;;;N;;;;; +CE66;HANGUL SYLLABLE CILP;Lo;0;L;;;;;N;;;;; +CE67;HANGUL SYLLABLE CILH;Lo;0;L;;;;;N;;;;; +CE68;HANGUL SYLLABLE CIM;Lo;0;L;;;;;N;;;;; +CE69;HANGUL SYLLABLE CIB;Lo;0;L;;;;;N;;;;; +CE6A;HANGUL SYLLABLE CIBS;Lo;0;L;;;;;N;;;;; +CE6B;HANGUL SYLLABLE CIS;Lo;0;L;;;;;N;;;;; +CE6C;HANGUL SYLLABLE CISS;Lo;0;L;;;;;N;;;;; +CE6D;HANGUL SYLLABLE CING;Lo;0;L;;;;;N;;;;; +CE6E;HANGUL SYLLABLE CIJ;Lo;0;L;;;;;N;;;;; +CE6F;HANGUL SYLLABLE CIC;Lo;0;L;;;;;N;;;;; +CE70;HANGUL SYLLABLE CIK;Lo;0;L;;;;;N;;;;; +CE71;HANGUL SYLLABLE CIT;Lo;0;L;;;;;N;;;;; +CE72;HANGUL SYLLABLE CIP;Lo;0;L;;;;;N;;;;; +CE73;HANGUL SYLLABLE CIH;Lo;0;L;;;;;N;;;;; +CE74;HANGUL SYLLABLE KA;Lo;0;L;;;;;N;;;;; +CE75;HANGUL SYLLABLE KAG;Lo;0;L;;;;;N;;;;; +CE76;HANGUL SYLLABLE KAGG;Lo;0;L;;;;;N;;;;; +CE77;HANGUL SYLLABLE KAGS;Lo;0;L;;;;;N;;;;; +CE78;HANGUL SYLLABLE KAN;Lo;0;L;;;;;N;;;;; +CE79;HANGUL SYLLABLE KANI;Lo;0;L;;;;;N;;;;; +CE7A;HANGUL SYLLABLE KANH;Lo;0;L;;;;;N;;;;; +CE7B;HANGUL SYLLABLE KAD;Lo;0;L;;;;;N;;;;; +CE7C;HANGUL SYLLABLE KAL;Lo;0;L;;;;;N;;;;; +CE7D;HANGUL SYLLABLE KALG;Lo;0;L;;;;;N;;;;; +CE7E;HANGUL SYLLABLE KALM;Lo;0;L;;;;;N;;;;; +CE7F;HANGUL SYLLABLE KALB;Lo;0;L;;;;;N;;;;; +CE80;HANGUL SYLLABLE KALS;Lo;0;L;;;;;N;;;;; +CE81;HANGUL SYLLABLE KALT;Lo;0;L;;;;;N;;;;; +CE82;HANGUL SYLLABLE KALP;Lo;0;L;;;;;N;;;;; +CE83;HANGUL SYLLABLE KALH;Lo;0;L;;;;;N;;;;; +CE84;HANGUL SYLLABLE KAM;Lo;0;L;;;;;N;;;;; +CE85;HANGUL SYLLABLE KAB;Lo;0;L;;;;;N;;;;; +CE86;HANGUL SYLLABLE KABS;Lo;0;L;;;;;N;;;;; +CE87;HANGUL SYLLABLE KAS;Lo;0;L;;;;;N;;;;; +CE88;HANGUL SYLLABLE KASS;Lo;0;L;;;;;N;;;;; +CE89;HANGUL SYLLABLE KANG;Lo;0;L;;;;;N;;;;; +CE8A;HANGUL SYLLABLE KAJ;Lo;0;L;;;;;N;;;;; +CE8B;HANGUL SYLLABLE KAC;Lo;0;L;;;;;N;;;;; +CE8C;HANGUL SYLLABLE KAK;Lo;0;L;;;;;N;;;;; +CE8D;HANGUL SYLLABLE KAT;Lo;0;L;;;;;N;;;;; +CE8E;HANGUL SYLLABLE KAP;Lo;0;L;;;;;N;;;;; +CE8F;HANGUL SYLLABLE KAH;Lo;0;L;;;;;N;;;;; +CE90;HANGUL SYLLABLE KAE;Lo;0;L;;;;;N;;;;; +CE91;HANGUL SYLLABLE KAEG;Lo;0;L;;;;;N;;;;; +CE92;HANGUL SYLLABLE KAEGG;Lo;0;L;;;;;N;;;;; +CE93;HANGUL SYLLABLE KAEGS;Lo;0;L;;;;;N;;;;; +CE94;HANGUL SYLLABLE KAEN;Lo;0;L;;;;;N;;;;; +CE95;HANGUL SYLLABLE KAENI;Lo;0;L;;;;;N;;;;; +CE96;HANGUL SYLLABLE KAENH;Lo;0;L;;;;;N;;;;; +CE97;HANGUL SYLLABLE KAED;Lo;0;L;;;;;N;;;;; +CE98;HANGUL SYLLABLE KAEL;Lo;0;L;;;;;N;;;;; +CE99;HANGUL SYLLABLE KAELG;Lo;0;L;;;;;N;;;;; +CE9A;HANGUL SYLLABLE KAELM;Lo;0;L;;;;;N;;;;; +CE9B;HANGUL SYLLABLE KAELB;Lo;0;L;;;;;N;;;;; +CE9C;HANGUL SYLLABLE KAELS;Lo;0;L;;;;;N;;;;; +CE9D;HANGUL SYLLABLE KAELT;Lo;0;L;;;;;N;;;;; +CE9E;HANGUL SYLLABLE KAELP;Lo;0;L;;;;;N;;;;; +CE9F;HANGUL SYLLABLE KAELH;Lo;0;L;;;;;N;;;;; +CEA0;HANGUL SYLLABLE KAEM;Lo;0;L;;;;;N;;;;; +CEA1;HANGUL SYLLABLE KAEB;Lo;0;L;;;;;N;;;;; +CEA2;HANGUL SYLLABLE KAEBS;Lo;0;L;;;;;N;;;;; +CEA3;HANGUL SYLLABLE KAES;Lo;0;L;;;;;N;;;;; +CEA4;HANGUL SYLLABLE KAESS;Lo;0;L;;;;;N;;;;; +CEA5;HANGUL SYLLABLE KAENG;Lo;0;L;;;;;N;;;;; +CEA6;HANGUL SYLLABLE KAEJ;Lo;0;L;;;;;N;;;;; +CEA7;HANGUL SYLLABLE KAEC;Lo;0;L;;;;;N;;;;; +CEA8;HANGUL SYLLABLE KAEK;Lo;0;L;;;;;N;;;;; +CEA9;HANGUL SYLLABLE KAET;Lo;0;L;;;;;N;;;;; +CEAA;HANGUL SYLLABLE KAEP;Lo;0;L;;;;;N;;;;; +CEAB;HANGUL SYLLABLE KAEH;Lo;0;L;;;;;N;;;;; +CEAC;HANGUL SYLLABLE KYA;Lo;0;L;;;;;N;;;;; +CEAD;HANGUL SYLLABLE KYAG;Lo;0;L;;;;;N;;;;; +CEAE;HANGUL SYLLABLE KYAGG;Lo;0;L;;;;;N;;;;; +CEAF;HANGUL SYLLABLE KYAGS;Lo;0;L;;;;;N;;;;; +CEB0;HANGUL SYLLABLE KYAN;Lo;0;L;;;;;N;;;;; +CEB1;HANGUL SYLLABLE KYANI;Lo;0;L;;;;;N;;;;; +CEB2;HANGUL SYLLABLE KYANH;Lo;0;L;;;;;N;;;;; +CEB3;HANGUL SYLLABLE KYAD;Lo;0;L;;;;;N;;;;; +CEB4;HANGUL SYLLABLE KYAL;Lo;0;L;;;;;N;;;;; +CEB5;HANGUL SYLLABLE KYALG;Lo;0;L;;;;;N;;;;; +CEB6;HANGUL SYLLABLE KYALM;Lo;0;L;;;;;N;;;;; +CEB7;HANGUL SYLLABLE KYALB;Lo;0;L;;;;;N;;;;; +CEB8;HANGUL SYLLABLE KYALS;Lo;0;L;;;;;N;;;;; +CEB9;HANGUL SYLLABLE KYALT;Lo;0;L;;;;;N;;;;; +CEBA;HANGUL SYLLABLE KYALP;Lo;0;L;;;;;N;;;;; +CEBB;HANGUL SYLLABLE KYALH;Lo;0;L;;;;;N;;;;; +CEBC;HANGUL SYLLABLE KYAM;Lo;0;L;;;;;N;;;;; +CEBD;HANGUL SYLLABLE KYAB;Lo;0;L;;;;;N;;;;; +CEBE;HANGUL SYLLABLE KYABS;Lo;0;L;;;;;N;;;;; +CEBF;HANGUL SYLLABLE KYAS;Lo;0;L;;;;;N;;;;; +CEC0;HANGUL SYLLABLE KYASS;Lo;0;L;;;;;N;;;;; +CEC1;HANGUL SYLLABLE KYANG;Lo;0;L;;;;;N;;;;; +CEC2;HANGUL SYLLABLE KYAJ;Lo;0;L;;;;;N;;;;; +CEC3;HANGUL SYLLABLE KYAC;Lo;0;L;;;;;N;;;;; +CEC4;HANGUL SYLLABLE KYAK;Lo;0;L;;;;;N;;;;; +CEC5;HANGUL SYLLABLE KYAT;Lo;0;L;;;;;N;;;;; +CEC6;HANGUL SYLLABLE KYAP;Lo;0;L;;;;;N;;;;; +CEC7;HANGUL SYLLABLE KYAH;Lo;0;L;;;;;N;;;;; +CEC8;HANGUL SYLLABLE KYAE;Lo;0;L;;;;;N;;;;; +CEC9;HANGUL SYLLABLE KYAEG;Lo;0;L;;;;;N;;;;; +CECA;HANGUL SYLLABLE KYAEGG;Lo;0;L;;;;;N;;;;; +CECB;HANGUL SYLLABLE KYAEGS;Lo;0;L;;;;;N;;;;; +CECC;HANGUL SYLLABLE KYAEN;Lo;0;L;;;;;N;;;;; +CECD;HANGUL SYLLABLE KYAENI;Lo;0;L;;;;;N;;;;; +CECE;HANGUL SYLLABLE KYAENH;Lo;0;L;;;;;N;;;;; +CECF;HANGUL SYLLABLE KYAED;Lo;0;L;;;;;N;;;;; +CED0;HANGUL SYLLABLE KYAEL;Lo;0;L;;;;;N;;;;; +CED1;HANGUL SYLLABLE KYAELG;Lo;0;L;;;;;N;;;;; +CED2;HANGUL SYLLABLE KYAELM;Lo;0;L;;;;;N;;;;; +CED3;HANGUL SYLLABLE KYAELB;Lo;0;L;;;;;N;;;;; +CED4;HANGUL SYLLABLE KYAELS;Lo;0;L;;;;;N;;;;; +CED5;HANGUL SYLLABLE KYAELT;Lo;0;L;;;;;N;;;;; +CED6;HANGUL SYLLABLE KYAELP;Lo;0;L;;;;;N;;;;; +CED7;HANGUL SYLLABLE KYAELH;Lo;0;L;;;;;N;;;;; +CED8;HANGUL SYLLABLE KYAEM;Lo;0;L;;;;;N;;;;; +CED9;HANGUL SYLLABLE KYAEB;Lo;0;L;;;;;N;;;;; +CEDA;HANGUL SYLLABLE KYAEBS;Lo;0;L;;;;;N;;;;; +CEDB;HANGUL SYLLABLE KYAES;Lo;0;L;;;;;N;;;;; +CEDC;HANGUL SYLLABLE KYAESS;Lo;0;L;;;;;N;;;;; +CEDD;HANGUL SYLLABLE KYAENG;Lo;0;L;;;;;N;;;;; +CEDE;HANGUL SYLLABLE KYAEJ;Lo;0;L;;;;;N;;;;; +CEDF;HANGUL SYLLABLE KYAEC;Lo;0;L;;;;;N;;;;; +CEE0;HANGUL SYLLABLE KYAEK;Lo;0;L;;;;;N;;;;; +CEE1;HANGUL SYLLABLE KYAET;Lo;0;L;;;;;N;;;;; +CEE2;HANGUL SYLLABLE KYAEP;Lo;0;L;;;;;N;;;;; +CEE3;HANGUL SYLLABLE KYAEH;Lo;0;L;;;;;N;;;;; +CEE4;HANGUL SYLLABLE KEO;Lo;0;L;;;;;N;;;;; +CEE5;HANGUL SYLLABLE KEOG;Lo;0;L;;;;;N;;;;; +CEE6;HANGUL SYLLABLE KEOGG;Lo;0;L;;;;;N;;;;; +CEE7;HANGUL SYLLABLE KEOGS;Lo;0;L;;;;;N;;;;; +CEE8;HANGUL SYLLABLE KEON;Lo;0;L;;;;;N;;;;; +CEE9;HANGUL SYLLABLE KEONI;Lo;0;L;;;;;N;;;;; +CEEA;HANGUL SYLLABLE KEONH;Lo;0;L;;;;;N;;;;; +CEEB;HANGUL SYLLABLE KEOD;Lo;0;L;;;;;N;;;;; +CEEC;HANGUL SYLLABLE KEOL;Lo;0;L;;;;;N;;;;; +CEED;HANGUL SYLLABLE KEOLG;Lo;0;L;;;;;N;;;;; +CEEE;HANGUL SYLLABLE KEOLM;Lo;0;L;;;;;N;;;;; +CEEF;HANGUL SYLLABLE KEOLB;Lo;0;L;;;;;N;;;;; +CEF0;HANGUL SYLLABLE KEOLS;Lo;0;L;;;;;N;;;;; +CEF1;HANGUL SYLLABLE KEOLT;Lo;0;L;;;;;N;;;;; +CEF2;HANGUL SYLLABLE KEOLP;Lo;0;L;;;;;N;;;;; +CEF3;HANGUL SYLLABLE KEOLH;Lo;0;L;;;;;N;;;;; +CEF4;HANGUL SYLLABLE KEOM;Lo;0;L;;;;;N;;;;; +CEF5;HANGUL SYLLABLE KEOB;Lo;0;L;;;;;N;;;;; +CEF6;HANGUL SYLLABLE KEOBS;Lo;0;L;;;;;N;;;;; +CEF7;HANGUL SYLLABLE KEOS;Lo;0;L;;;;;N;;;;; +CEF8;HANGUL SYLLABLE KEOSS;Lo;0;L;;;;;N;;;;; +CEF9;HANGUL SYLLABLE KEONG;Lo;0;L;;;;;N;;;;; +CEFA;HANGUL SYLLABLE KEOJ;Lo;0;L;;;;;N;;;;; +CEFB;HANGUL SYLLABLE KEOC;Lo;0;L;;;;;N;;;;; +CEFC;HANGUL SYLLABLE KEOK;Lo;0;L;;;;;N;;;;; +CEFD;HANGUL SYLLABLE KEOT;Lo;0;L;;;;;N;;;;; +CEFE;HANGUL SYLLABLE KEOP;Lo;0;L;;;;;N;;;;; +CEFF;HANGUL SYLLABLE KEOH;Lo;0;L;;;;;N;;;;; +CF00;HANGUL SYLLABLE KE;Lo;0;L;;;;;N;;;;; +CF01;HANGUL SYLLABLE KEG;Lo;0;L;;;;;N;;;;; +CF02;HANGUL SYLLABLE KEGG;Lo;0;L;;;;;N;;;;; +CF03;HANGUL SYLLABLE KEGS;Lo;0;L;;;;;N;;;;; +CF04;HANGUL SYLLABLE KEN;Lo;0;L;;;;;N;;;;; +CF05;HANGUL SYLLABLE KENI;Lo;0;L;;;;;N;;;;; +CF06;HANGUL SYLLABLE KENH;Lo;0;L;;;;;N;;;;; +CF07;HANGUL SYLLABLE KED;Lo;0;L;;;;;N;;;;; +CF08;HANGUL SYLLABLE KEL;Lo;0;L;;;;;N;;;;; +CF09;HANGUL SYLLABLE KELG;Lo;0;L;;;;;N;;;;; +CF0A;HANGUL SYLLABLE KELM;Lo;0;L;;;;;N;;;;; +CF0B;HANGUL SYLLABLE KELB;Lo;0;L;;;;;N;;;;; +CF0C;HANGUL SYLLABLE KELS;Lo;0;L;;;;;N;;;;; +CF0D;HANGUL SYLLABLE KELT;Lo;0;L;;;;;N;;;;; +CF0E;HANGUL SYLLABLE KELP;Lo;0;L;;;;;N;;;;; +CF0F;HANGUL SYLLABLE KELH;Lo;0;L;;;;;N;;;;; +CF10;HANGUL SYLLABLE KEM;Lo;0;L;;;;;N;;;;; +CF11;HANGUL SYLLABLE KEB;Lo;0;L;;;;;N;;;;; +CF12;HANGUL SYLLABLE KEBS;Lo;0;L;;;;;N;;;;; +CF13;HANGUL SYLLABLE KES;Lo;0;L;;;;;N;;;;; +CF14;HANGUL SYLLABLE KESS;Lo;0;L;;;;;N;;;;; +CF15;HANGUL SYLLABLE KENG;Lo;0;L;;;;;N;;;;; +CF16;HANGUL SYLLABLE KEJ;Lo;0;L;;;;;N;;;;; +CF17;HANGUL SYLLABLE KEC;Lo;0;L;;;;;N;;;;; +CF18;HANGUL SYLLABLE KEK;Lo;0;L;;;;;N;;;;; +CF19;HANGUL SYLLABLE KET;Lo;0;L;;;;;N;;;;; +CF1A;HANGUL SYLLABLE KEP;Lo;0;L;;;;;N;;;;; +CF1B;HANGUL SYLLABLE KEH;Lo;0;L;;;;;N;;;;; +CF1C;HANGUL SYLLABLE KYEO;Lo;0;L;;;;;N;;;;; +CF1D;HANGUL SYLLABLE KYEOG;Lo;0;L;;;;;N;;;;; +CF1E;HANGUL SYLLABLE KYEOGG;Lo;0;L;;;;;N;;;;; +CF1F;HANGUL SYLLABLE KYEOGS;Lo;0;L;;;;;N;;;;; +CF20;HANGUL SYLLABLE KYEON;Lo;0;L;;;;;N;;;;; +CF21;HANGUL SYLLABLE KYEONI;Lo;0;L;;;;;N;;;;; +CF22;HANGUL SYLLABLE KYEONH;Lo;0;L;;;;;N;;;;; +CF23;HANGUL SYLLABLE KYEOD;Lo;0;L;;;;;N;;;;; +CF24;HANGUL SYLLABLE KYEOL;Lo;0;L;;;;;N;;;;; +CF25;HANGUL SYLLABLE KYEOLG;Lo;0;L;;;;;N;;;;; +CF26;HANGUL SYLLABLE KYEOLM;Lo;0;L;;;;;N;;;;; +CF27;HANGUL SYLLABLE KYEOLB;Lo;0;L;;;;;N;;;;; +CF28;HANGUL SYLLABLE KYEOLS;Lo;0;L;;;;;N;;;;; +CF29;HANGUL SYLLABLE KYEOLT;Lo;0;L;;;;;N;;;;; +CF2A;HANGUL SYLLABLE KYEOLP;Lo;0;L;;;;;N;;;;; +CF2B;HANGUL SYLLABLE KYEOLH;Lo;0;L;;;;;N;;;;; +CF2C;HANGUL SYLLABLE KYEOM;Lo;0;L;;;;;N;;;;; +CF2D;HANGUL SYLLABLE KYEOB;Lo;0;L;;;;;N;;;;; +CF2E;HANGUL SYLLABLE KYEOBS;Lo;0;L;;;;;N;;;;; +CF2F;HANGUL SYLLABLE KYEOS;Lo;0;L;;;;;N;;;;; +CF30;HANGUL SYLLABLE KYEOSS;Lo;0;L;;;;;N;;;;; +CF31;HANGUL SYLLABLE KYEONG;Lo;0;L;;;;;N;;;;; +CF32;HANGUL SYLLABLE KYEOJ;Lo;0;L;;;;;N;;;;; +CF33;HANGUL SYLLABLE KYEOC;Lo;0;L;;;;;N;;;;; +CF34;HANGUL SYLLABLE KYEOK;Lo;0;L;;;;;N;;;;; +CF35;HANGUL SYLLABLE KYEOT;Lo;0;L;;;;;N;;;;; +CF36;HANGUL SYLLABLE KYEOP;Lo;0;L;;;;;N;;;;; +CF37;HANGUL SYLLABLE KYEOH;Lo;0;L;;;;;N;;;;; +CF38;HANGUL SYLLABLE KYE;Lo;0;L;;;;;N;;;;; +CF39;HANGUL SYLLABLE KYEG;Lo;0;L;;;;;N;;;;; +CF3A;HANGUL SYLLABLE KYEGG;Lo;0;L;;;;;N;;;;; +CF3B;HANGUL SYLLABLE KYEGS;Lo;0;L;;;;;N;;;;; +CF3C;HANGUL SYLLABLE KYEN;Lo;0;L;;;;;N;;;;; +CF3D;HANGUL SYLLABLE KYENI;Lo;0;L;;;;;N;;;;; +CF3E;HANGUL SYLLABLE KYENH;Lo;0;L;;;;;N;;;;; +CF3F;HANGUL SYLLABLE KYED;Lo;0;L;;;;;N;;;;; +CF40;HANGUL SYLLABLE KYEL;Lo;0;L;;;;;N;;;;; +CF41;HANGUL SYLLABLE KYELG;Lo;0;L;;;;;N;;;;; +CF42;HANGUL SYLLABLE KYELM;Lo;0;L;;;;;N;;;;; +CF43;HANGUL SYLLABLE KYELB;Lo;0;L;;;;;N;;;;; +CF44;HANGUL SYLLABLE KYELS;Lo;0;L;;;;;N;;;;; +CF45;HANGUL SYLLABLE KYELT;Lo;0;L;;;;;N;;;;; +CF46;HANGUL SYLLABLE KYELP;Lo;0;L;;;;;N;;;;; +CF47;HANGUL SYLLABLE KYELH;Lo;0;L;;;;;N;;;;; +CF48;HANGUL SYLLABLE KYEM;Lo;0;L;;;;;N;;;;; +CF49;HANGUL SYLLABLE KYEB;Lo;0;L;;;;;N;;;;; +CF4A;HANGUL SYLLABLE KYEBS;Lo;0;L;;;;;N;;;;; +CF4B;HANGUL SYLLABLE KYES;Lo;0;L;;;;;N;;;;; +CF4C;HANGUL SYLLABLE KYESS;Lo;0;L;;;;;N;;;;; +CF4D;HANGUL SYLLABLE KYENG;Lo;0;L;;;;;N;;;;; +CF4E;HANGUL SYLLABLE KYEJ;Lo;0;L;;;;;N;;;;; +CF4F;HANGUL SYLLABLE KYEC;Lo;0;L;;;;;N;;;;; +CF50;HANGUL SYLLABLE KYEK;Lo;0;L;;;;;N;;;;; +CF51;HANGUL SYLLABLE KYET;Lo;0;L;;;;;N;;;;; +CF52;HANGUL SYLLABLE KYEP;Lo;0;L;;;;;N;;;;; +CF53;HANGUL SYLLABLE KYEH;Lo;0;L;;;;;N;;;;; +CF54;HANGUL SYLLABLE KO;Lo;0;L;;;;;N;;;;; +CF55;HANGUL SYLLABLE KOG;Lo;0;L;;;;;N;;;;; +CF56;HANGUL SYLLABLE KOGG;Lo;0;L;;;;;N;;;;; +CF57;HANGUL SYLLABLE KOGS;Lo;0;L;;;;;N;;;;; +CF58;HANGUL SYLLABLE KON;Lo;0;L;;;;;N;;;;; +CF59;HANGUL SYLLABLE KONI;Lo;0;L;;;;;N;;;;; +CF5A;HANGUL SYLLABLE KONH;Lo;0;L;;;;;N;;;;; +CF5B;HANGUL SYLLABLE KOD;Lo;0;L;;;;;N;;;;; +CF5C;HANGUL SYLLABLE KOL;Lo;0;L;;;;;N;;;;; +CF5D;HANGUL SYLLABLE KOLG;Lo;0;L;;;;;N;;;;; +CF5E;HANGUL SYLLABLE KOLM;Lo;0;L;;;;;N;;;;; +CF5F;HANGUL SYLLABLE KOLB;Lo;0;L;;;;;N;;;;; +CF60;HANGUL SYLLABLE KOLS;Lo;0;L;;;;;N;;;;; +CF61;HANGUL SYLLABLE KOLT;Lo;0;L;;;;;N;;;;; +CF62;HANGUL SYLLABLE KOLP;Lo;0;L;;;;;N;;;;; +CF63;HANGUL SYLLABLE KOLH;Lo;0;L;;;;;N;;;;; +CF64;HANGUL SYLLABLE KOM;Lo;0;L;;;;;N;;;;; +CF65;HANGUL SYLLABLE KOB;Lo;0;L;;;;;N;;;;; +CF66;HANGUL SYLLABLE KOBS;Lo;0;L;;;;;N;;;;; +CF67;HANGUL SYLLABLE KOS;Lo;0;L;;;;;N;;;;; +CF68;HANGUL SYLLABLE KOSS;Lo;0;L;;;;;N;;;;; +CF69;HANGUL SYLLABLE KONG;Lo;0;L;;;;;N;;;;; +CF6A;HANGUL SYLLABLE KOJ;Lo;0;L;;;;;N;;;;; +CF6B;HANGUL SYLLABLE KOC;Lo;0;L;;;;;N;;;;; +CF6C;HANGUL SYLLABLE KOK;Lo;0;L;;;;;N;;;;; +CF6D;HANGUL SYLLABLE KOT;Lo;0;L;;;;;N;;;;; +CF6E;HANGUL SYLLABLE KOP;Lo;0;L;;;;;N;;;;; +CF6F;HANGUL SYLLABLE KOH;Lo;0;L;;;;;N;;;;; +CF70;HANGUL SYLLABLE KWA;Lo;0;L;;;;;N;;;;; +CF71;HANGUL SYLLABLE KWAG;Lo;0;L;;;;;N;;;;; +CF72;HANGUL SYLLABLE KWAGG;Lo;0;L;;;;;N;;;;; +CF73;HANGUL SYLLABLE KWAGS;Lo;0;L;;;;;N;;;;; +CF74;HANGUL SYLLABLE KWAN;Lo;0;L;;;;;N;;;;; +CF75;HANGUL SYLLABLE KWANI;Lo;0;L;;;;;N;;;;; +CF76;HANGUL SYLLABLE KWANH;Lo;0;L;;;;;N;;;;; +CF77;HANGUL SYLLABLE KWAD;Lo;0;L;;;;;N;;;;; +CF78;HANGUL SYLLABLE KWAL;Lo;0;L;;;;;N;;;;; +CF79;HANGUL SYLLABLE KWALG;Lo;0;L;;;;;N;;;;; +CF7A;HANGUL SYLLABLE KWALM;Lo;0;L;;;;;N;;;;; +CF7B;HANGUL SYLLABLE KWALB;Lo;0;L;;;;;N;;;;; +CF7C;HANGUL SYLLABLE KWALS;Lo;0;L;;;;;N;;;;; +CF7D;HANGUL SYLLABLE KWALT;Lo;0;L;;;;;N;;;;; +CF7E;HANGUL SYLLABLE KWALP;Lo;0;L;;;;;N;;;;; +CF7F;HANGUL SYLLABLE KWALH;Lo;0;L;;;;;N;;;;; +CF80;HANGUL SYLLABLE KWAM;Lo;0;L;;;;;N;;;;; +CF81;HANGUL SYLLABLE KWAB;Lo;0;L;;;;;N;;;;; +CF82;HANGUL SYLLABLE KWABS;Lo;0;L;;;;;N;;;;; +CF83;HANGUL SYLLABLE KWAS;Lo;0;L;;;;;N;;;;; +CF84;HANGUL SYLLABLE KWASS;Lo;0;L;;;;;N;;;;; +CF85;HANGUL SYLLABLE KWANG;Lo;0;L;;;;;N;;;;; +CF86;HANGUL SYLLABLE KWAJ;Lo;0;L;;;;;N;;;;; +CF87;HANGUL SYLLABLE KWAC;Lo;0;L;;;;;N;;;;; +CF88;HANGUL SYLLABLE KWAK;Lo;0;L;;;;;N;;;;; +CF89;HANGUL SYLLABLE KWAT;Lo;0;L;;;;;N;;;;; +CF8A;HANGUL SYLLABLE KWAP;Lo;0;L;;;;;N;;;;; +CF8B;HANGUL SYLLABLE KWAH;Lo;0;L;;;;;N;;;;; +CF8C;HANGUL SYLLABLE KWAE;Lo;0;L;;;;;N;;;;; +CF8D;HANGUL SYLLABLE KWAEG;Lo;0;L;;;;;N;;;;; +CF8E;HANGUL SYLLABLE KWAEGG;Lo;0;L;;;;;N;;;;; +CF8F;HANGUL SYLLABLE KWAEGS;Lo;0;L;;;;;N;;;;; +CF90;HANGUL SYLLABLE KWAEN;Lo;0;L;;;;;N;;;;; +CF91;HANGUL SYLLABLE KWAENI;Lo;0;L;;;;;N;;;;; +CF92;HANGUL SYLLABLE KWAENH;Lo;0;L;;;;;N;;;;; +CF93;HANGUL SYLLABLE KWAED;Lo;0;L;;;;;N;;;;; +CF94;HANGUL SYLLABLE KWAEL;Lo;0;L;;;;;N;;;;; +CF95;HANGUL SYLLABLE KWAELG;Lo;0;L;;;;;N;;;;; +CF96;HANGUL SYLLABLE KWAELM;Lo;0;L;;;;;N;;;;; +CF97;HANGUL SYLLABLE KWAELB;Lo;0;L;;;;;N;;;;; +CF98;HANGUL SYLLABLE KWAELS;Lo;0;L;;;;;N;;;;; +CF99;HANGUL SYLLABLE KWAELT;Lo;0;L;;;;;N;;;;; +CF9A;HANGUL SYLLABLE KWAELP;Lo;0;L;;;;;N;;;;; +CF9B;HANGUL SYLLABLE KWAELH;Lo;0;L;;;;;N;;;;; +CF9C;HANGUL SYLLABLE KWAEM;Lo;0;L;;;;;N;;;;; +CF9D;HANGUL SYLLABLE KWAEB;Lo;0;L;;;;;N;;;;; +CF9E;HANGUL SYLLABLE KWAEBS;Lo;0;L;;;;;N;;;;; +CF9F;HANGUL SYLLABLE KWAES;Lo;0;L;;;;;N;;;;; +CFA0;HANGUL SYLLABLE KWAESS;Lo;0;L;;;;;N;;;;; +CFA1;HANGUL SYLLABLE KWAENG;Lo;0;L;;;;;N;;;;; +CFA2;HANGUL SYLLABLE KWAEJ;Lo;0;L;;;;;N;;;;; +CFA3;HANGUL SYLLABLE KWAEC;Lo;0;L;;;;;N;;;;; +CFA4;HANGUL SYLLABLE KWAEK;Lo;0;L;;;;;N;;;;; +CFA5;HANGUL SYLLABLE KWAET;Lo;0;L;;;;;N;;;;; +CFA6;HANGUL SYLLABLE KWAEP;Lo;0;L;;;;;N;;;;; +CFA7;HANGUL SYLLABLE KWAEH;Lo;0;L;;;;;N;;;;; +CFA8;HANGUL SYLLABLE KOE;Lo;0;L;;;;;N;;;;; +CFA9;HANGUL SYLLABLE KOEG;Lo;0;L;;;;;N;;;;; +CFAA;HANGUL SYLLABLE KOEGG;Lo;0;L;;;;;N;;;;; +CFAB;HANGUL SYLLABLE KOEGS;Lo;0;L;;;;;N;;;;; +CFAC;HANGUL SYLLABLE KOEN;Lo;0;L;;;;;N;;;;; +CFAD;HANGUL SYLLABLE KOENI;Lo;0;L;;;;;N;;;;; +CFAE;HANGUL SYLLABLE KOENH;Lo;0;L;;;;;N;;;;; +CFAF;HANGUL SYLLABLE KOED;Lo;0;L;;;;;N;;;;; +CFB0;HANGUL SYLLABLE KOEL;Lo;0;L;;;;;N;;;;; +CFB1;HANGUL SYLLABLE KOELG;Lo;0;L;;;;;N;;;;; +CFB2;HANGUL SYLLABLE KOELM;Lo;0;L;;;;;N;;;;; +CFB3;HANGUL SYLLABLE KOELB;Lo;0;L;;;;;N;;;;; +CFB4;HANGUL SYLLABLE KOELS;Lo;0;L;;;;;N;;;;; +CFB5;HANGUL SYLLABLE KOELT;Lo;0;L;;;;;N;;;;; +CFB6;HANGUL SYLLABLE KOELP;Lo;0;L;;;;;N;;;;; +CFB7;HANGUL SYLLABLE KOELH;Lo;0;L;;;;;N;;;;; +CFB8;HANGUL SYLLABLE KOEM;Lo;0;L;;;;;N;;;;; +CFB9;HANGUL SYLLABLE KOEB;Lo;0;L;;;;;N;;;;; +CFBA;HANGUL SYLLABLE KOEBS;Lo;0;L;;;;;N;;;;; +CFBB;HANGUL SYLLABLE KOES;Lo;0;L;;;;;N;;;;; +CFBC;HANGUL SYLLABLE KOESS;Lo;0;L;;;;;N;;;;; +CFBD;HANGUL SYLLABLE KOENG;Lo;0;L;;;;;N;;;;; +CFBE;HANGUL SYLLABLE KOEJ;Lo;0;L;;;;;N;;;;; +CFBF;HANGUL SYLLABLE KOEC;Lo;0;L;;;;;N;;;;; +CFC0;HANGUL SYLLABLE KOEK;Lo;0;L;;;;;N;;;;; +CFC1;HANGUL SYLLABLE KOET;Lo;0;L;;;;;N;;;;; +CFC2;HANGUL SYLLABLE KOEP;Lo;0;L;;;;;N;;;;; +CFC3;HANGUL SYLLABLE KOEH;Lo;0;L;;;;;N;;;;; +CFC4;HANGUL SYLLABLE KYO;Lo;0;L;;;;;N;;;;; +CFC5;HANGUL SYLLABLE KYOG;Lo;0;L;;;;;N;;;;; +CFC6;HANGUL SYLLABLE KYOGG;Lo;0;L;;;;;N;;;;; +CFC7;HANGUL SYLLABLE KYOGS;Lo;0;L;;;;;N;;;;; +CFC8;HANGUL SYLLABLE KYON;Lo;0;L;;;;;N;;;;; +CFC9;HANGUL SYLLABLE KYONI;Lo;0;L;;;;;N;;;;; +CFCA;HANGUL SYLLABLE KYONH;Lo;0;L;;;;;N;;;;; +CFCB;HANGUL SYLLABLE KYOD;Lo;0;L;;;;;N;;;;; +CFCC;HANGUL SYLLABLE KYOL;Lo;0;L;;;;;N;;;;; +CFCD;HANGUL SYLLABLE KYOLG;Lo;0;L;;;;;N;;;;; +CFCE;HANGUL SYLLABLE KYOLM;Lo;0;L;;;;;N;;;;; +CFCF;HANGUL SYLLABLE KYOLB;Lo;0;L;;;;;N;;;;; +CFD0;HANGUL SYLLABLE KYOLS;Lo;0;L;;;;;N;;;;; +CFD1;HANGUL SYLLABLE KYOLT;Lo;0;L;;;;;N;;;;; +CFD2;HANGUL SYLLABLE KYOLP;Lo;0;L;;;;;N;;;;; +CFD3;HANGUL SYLLABLE KYOLH;Lo;0;L;;;;;N;;;;; +CFD4;HANGUL SYLLABLE KYOM;Lo;0;L;;;;;N;;;;; +CFD5;HANGUL SYLLABLE KYOB;Lo;0;L;;;;;N;;;;; +CFD6;HANGUL SYLLABLE KYOBS;Lo;0;L;;;;;N;;;;; +CFD7;HANGUL SYLLABLE KYOS;Lo;0;L;;;;;N;;;;; +CFD8;HANGUL SYLLABLE KYOSS;Lo;0;L;;;;;N;;;;; +CFD9;HANGUL SYLLABLE KYONG;Lo;0;L;;;;;N;;;;; +CFDA;HANGUL SYLLABLE KYOJ;Lo;0;L;;;;;N;;;;; +CFDB;HANGUL SYLLABLE KYOC;Lo;0;L;;;;;N;;;;; +CFDC;HANGUL SYLLABLE KYOK;Lo;0;L;;;;;N;;;;; +CFDD;HANGUL SYLLABLE KYOT;Lo;0;L;;;;;N;;;;; +CFDE;HANGUL SYLLABLE KYOP;Lo;0;L;;;;;N;;;;; +CFDF;HANGUL SYLLABLE KYOH;Lo;0;L;;;;;N;;;;; +CFE0;HANGUL SYLLABLE KU;Lo;0;L;;;;;N;;;;; +CFE1;HANGUL SYLLABLE KUG;Lo;0;L;;;;;N;;;;; +CFE2;HANGUL SYLLABLE KUGG;Lo;0;L;;;;;N;;;;; +CFE3;HANGUL SYLLABLE KUGS;Lo;0;L;;;;;N;;;;; +CFE4;HANGUL SYLLABLE KUN;Lo;0;L;;;;;N;;;;; +CFE5;HANGUL SYLLABLE KUNI;Lo;0;L;;;;;N;;;;; +CFE6;HANGUL SYLLABLE KUNH;Lo;0;L;;;;;N;;;;; +CFE7;HANGUL SYLLABLE KUD;Lo;0;L;;;;;N;;;;; +CFE8;HANGUL SYLLABLE KUL;Lo;0;L;;;;;N;;;;; +CFE9;HANGUL SYLLABLE KULG;Lo;0;L;;;;;N;;;;; +CFEA;HANGUL SYLLABLE KULM;Lo;0;L;;;;;N;;;;; +CFEB;HANGUL SYLLABLE KULB;Lo;0;L;;;;;N;;;;; +CFEC;HANGUL SYLLABLE KULS;Lo;0;L;;;;;N;;;;; +CFED;HANGUL SYLLABLE KULT;Lo;0;L;;;;;N;;;;; +CFEE;HANGUL SYLLABLE KULP;Lo;0;L;;;;;N;;;;; +CFEF;HANGUL SYLLABLE KULH;Lo;0;L;;;;;N;;;;; +CFF0;HANGUL SYLLABLE KUM;Lo;0;L;;;;;N;;;;; +CFF1;HANGUL SYLLABLE KUB;Lo;0;L;;;;;N;;;;; +CFF2;HANGUL SYLLABLE KUBS;Lo;0;L;;;;;N;;;;; +CFF3;HANGUL SYLLABLE KUS;Lo;0;L;;;;;N;;;;; +CFF4;HANGUL SYLLABLE KUSS;Lo;0;L;;;;;N;;;;; +CFF5;HANGUL SYLLABLE KUNG;Lo;0;L;;;;;N;;;;; +CFF6;HANGUL SYLLABLE KUJ;Lo;0;L;;;;;N;;;;; +CFF7;HANGUL SYLLABLE KUC;Lo;0;L;;;;;N;;;;; +CFF8;HANGUL SYLLABLE KUK;Lo;0;L;;;;;N;;;;; +CFF9;HANGUL SYLLABLE KUT;Lo;0;L;;;;;N;;;;; +CFFA;HANGUL SYLLABLE KUP;Lo;0;L;;;;;N;;;;; +CFFB;HANGUL SYLLABLE KUH;Lo;0;L;;;;;N;;;;; +CFFC;HANGUL SYLLABLE KWEO;Lo;0;L;;;;;N;;;;; +CFFD;HANGUL SYLLABLE KWEOG;Lo;0;L;;;;;N;;;;; +CFFE;HANGUL SYLLABLE KWEOGG;Lo;0;L;;;;;N;;;;; +CFFF;HANGUL SYLLABLE KWEOGS;Lo;0;L;;;;;N;;;;; +D000;HANGUL SYLLABLE KWEON;Lo;0;L;;;;;N;;;;; +D001;HANGUL SYLLABLE KWEONI;Lo;0;L;;;;;N;;;;; +D002;HANGUL SYLLABLE KWEONH;Lo;0;L;;;;;N;;;;; +D003;HANGUL SYLLABLE KWEOD;Lo;0;L;;;;;N;;;;; +D004;HANGUL SYLLABLE KWEOL;Lo;0;L;;;;;N;;;;; +D005;HANGUL SYLLABLE KWEOLG;Lo;0;L;;;;;N;;;;; +D006;HANGUL SYLLABLE KWEOLM;Lo;0;L;;;;;N;;;;; +D007;HANGUL SYLLABLE KWEOLB;Lo;0;L;;;;;N;;;;; +D008;HANGUL SYLLABLE KWEOLS;Lo;0;L;;;;;N;;;;; +D009;HANGUL SYLLABLE KWEOLT;Lo;0;L;;;;;N;;;;; +D00A;HANGUL SYLLABLE KWEOLP;Lo;0;L;;;;;N;;;;; +D00B;HANGUL SYLLABLE KWEOLH;Lo;0;L;;;;;N;;;;; +D00C;HANGUL SYLLABLE KWEOM;Lo;0;L;;;;;N;;;;; +D00D;HANGUL SYLLABLE KWEOB;Lo;0;L;;;;;N;;;;; +D00E;HANGUL SYLLABLE KWEOBS;Lo;0;L;;;;;N;;;;; +D00F;HANGUL SYLLABLE KWEOS;Lo;0;L;;;;;N;;;;; +D010;HANGUL SYLLABLE KWEOSS;Lo;0;L;;;;;N;;;;; +D011;HANGUL SYLLABLE KWEONG;Lo;0;L;;;;;N;;;;; +D012;HANGUL SYLLABLE KWEOJ;Lo;0;L;;;;;N;;;;; +D013;HANGUL SYLLABLE KWEOC;Lo;0;L;;;;;N;;;;; +D014;HANGUL SYLLABLE KWEOK;Lo;0;L;;;;;N;;;;; +D015;HANGUL SYLLABLE KWEOT;Lo;0;L;;;;;N;;;;; +D016;HANGUL SYLLABLE KWEOP;Lo;0;L;;;;;N;;;;; +D017;HANGUL SYLLABLE KWEOH;Lo;0;L;;;;;N;;;;; +D018;HANGUL SYLLABLE KWE;Lo;0;L;;;;;N;;;;; +D019;HANGUL SYLLABLE KWEG;Lo;0;L;;;;;N;;;;; +D01A;HANGUL SYLLABLE KWEGG;Lo;0;L;;;;;N;;;;; +D01B;HANGUL SYLLABLE KWEGS;Lo;0;L;;;;;N;;;;; +D01C;HANGUL SYLLABLE KWEN;Lo;0;L;;;;;N;;;;; +D01D;HANGUL SYLLABLE KWENI;Lo;0;L;;;;;N;;;;; +D01E;HANGUL SYLLABLE KWENH;Lo;0;L;;;;;N;;;;; +D01F;HANGUL SYLLABLE KWED;Lo;0;L;;;;;N;;;;; +D020;HANGUL SYLLABLE KWEL;Lo;0;L;;;;;N;;;;; +D021;HANGUL SYLLABLE KWELG;Lo;0;L;;;;;N;;;;; +D022;HANGUL SYLLABLE KWELM;Lo;0;L;;;;;N;;;;; +D023;HANGUL SYLLABLE KWELB;Lo;0;L;;;;;N;;;;; +D024;HANGUL SYLLABLE KWELS;Lo;0;L;;;;;N;;;;; +D025;HANGUL SYLLABLE KWELT;Lo;0;L;;;;;N;;;;; +D026;HANGUL SYLLABLE KWELP;Lo;0;L;;;;;N;;;;; +D027;HANGUL SYLLABLE KWELH;Lo;0;L;;;;;N;;;;; +D028;HANGUL SYLLABLE KWEM;Lo;0;L;;;;;N;;;;; +D029;HANGUL SYLLABLE KWEB;Lo;0;L;;;;;N;;;;; +D02A;HANGUL SYLLABLE KWEBS;Lo;0;L;;;;;N;;;;; +D02B;HANGUL SYLLABLE KWES;Lo;0;L;;;;;N;;;;; +D02C;HANGUL SYLLABLE KWESS;Lo;0;L;;;;;N;;;;; +D02D;HANGUL SYLLABLE KWENG;Lo;0;L;;;;;N;;;;; +D02E;HANGUL SYLLABLE KWEJ;Lo;0;L;;;;;N;;;;; +D02F;HANGUL SYLLABLE KWEC;Lo;0;L;;;;;N;;;;; +D030;HANGUL SYLLABLE KWEK;Lo;0;L;;;;;N;;;;; +D031;HANGUL SYLLABLE KWET;Lo;0;L;;;;;N;;;;; +D032;HANGUL SYLLABLE KWEP;Lo;0;L;;;;;N;;;;; +D033;HANGUL SYLLABLE KWEH;Lo;0;L;;;;;N;;;;; +D034;HANGUL SYLLABLE KWI;Lo;0;L;;;;;N;;;;; +D035;HANGUL SYLLABLE KWIG;Lo;0;L;;;;;N;;;;; +D036;HANGUL SYLLABLE KWIGG;Lo;0;L;;;;;N;;;;; +D037;HANGUL SYLLABLE KWIGS;Lo;0;L;;;;;N;;;;; +D038;HANGUL SYLLABLE KWIN;Lo;0;L;;;;;N;;;;; +D039;HANGUL SYLLABLE KWINI;Lo;0;L;;;;;N;;;;; +D03A;HANGUL SYLLABLE KWINH;Lo;0;L;;;;;N;;;;; +D03B;HANGUL SYLLABLE KWID;Lo;0;L;;;;;N;;;;; +D03C;HANGUL SYLLABLE KWIL;Lo;0;L;;;;;N;;;;; +D03D;HANGUL SYLLABLE KWILG;Lo;0;L;;;;;N;;;;; +D03E;HANGUL SYLLABLE KWILM;Lo;0;L;;;;;N;;;;; +D03F;HANGUL SYLLABLE KWILB;Lo;0;L;;;;;N;;;;; +D040;HANGUL SYLLABLE KWILS;Lo;0;L;;;;;N;;;;; +D041;HANGUL SYLLABLE KWILT;Lo;0;L;;;;;N;;;;; +D042;HANGUL SYLLABLE KWILP;Lo;0;L;;;;;N;;;;; +D043;HANGUL SYLLABLE KWILH;Lo;0;L;;;;;N;;;;; +D044;HANGUL SYLLABLE KWIM;Lo;0;L;;;;;N;;;;; +D045;HANGUL SYLLABLE KWIB;Lo;0;L;;;;;N;;;;; +D046;HANGUL SYLLABLE KWIBS;Lo;0;L;;;;;N;;;;; +D047;HANGUL SYLLABLE KWIS;Lo;0;L;;;;;N;;;;; +D048;HANGUL SYLLABLE KWISS;Lo;0;L;;;;;N;;;;; +D049;HANGUL SYLLABLE KWING;Lo;0;L;;;;;N;;;;; +D04A;HANGUL SYLLABLE KWIJ;Lo;0;L;;;;;N;;;;; +D04B;HANGUL SYLLABLE KWIC;Lo;0;L;;;;;N;;;;; +D04C;HANGUL SYLLABLE KWIK;Lo;0;L;;;;;N;;;;; +D04D;HANGUL SYLLABLE KWIT;Lo;0;L;;;;;N;;;;; +D04E;HANGUL SYLLABLE KWIP;Lo;0;L;;;;;N;;;;; +D04F;HANGUL SYLLABLE KWIH;Lo;0;L;;;;;N;;;;; +D050;HANGUL SYLLABLE KYU;Lo;0;L;;;;;N;;;;; +D051;HANGUL SYLLABLE KYUG;Lo;0;L;;;;;N;;;;; +D052;HANGUL SYLLABLE KYUGG;Lo;0;L;;;;;N;;;;; +D053;HANGUL SYLLABLE KYUGS;Lo;0;L;;;;;N;;;;; +D054;HANGUL SYLLABLE KYUN;Lo;0;L;;;;;N;;;;; +D055;HANGUL SYLLABLE KYUNI;Lo;0;L;;;;;N;;;;; +D056;HANGUL SYLLABLE KYUNH;Lo;0;L;;;;;N;;;;; +D057;HANGUL SYLLABLE KYUD;Lo;0;L;;;;;N;;;;; +D058;HANGUL SYLLABLE KYUL;Lo;0;L;;;;;N;;;;; +D059;HANGUL SYLLABLE KYULG;Lo;0;L;;;;;N;;;;; +D05A;HANGUL SYLLABLE KYULM;Lo;0;L;;;;;N;;;;; +D05B;HANGUL SYLLABLE KYULB;Lo;0;L;;;;;N;;;;; +D05C;HANGUL SYLLABLE KYULS;Lo;0;L;;;;;N;;;;; +D05D;HANGUL SYLLABLE KYULT;Lo;0;L;;;;;N;;;;; +D05E;HANGUL SYLLABLE KYULP;Lo;0;L;;;;;N;;;;; +D05F;HANGUL SYLLABLE KYULH;Lo;0;L;;;;;N;;;;; +D060;HANGUL SYLLABLE KYUM;Lo;0;L;;;;;N;;;;; +D061;HANGUL SYLLABLE KYUB;Lo;0;L;;;;;N;;;;; +D062;HANGUL SYLLABLE KYUBS;Lo;0;L;;;;;N;;;;; +D063;HANGUL SYLLABLE KYUS;Lo;0;L;;;;;N;;;;; +D064;HANGUL SYLLABLE KYUSS;Lo;0;L;;;;;N;;;;; +D065;HANGUL SYLLABLE KYUNG;Lo;0;L;;;;;N;;;;; +D066;HANGUL SYLLABLE KYUJ;Lo;0;L;;;;;N;;;;; +D067;HANGUL SYLLABLE KYUC;Lo;0;L;;;;;N;;;;; +D068;HANGUL SYLLABLE KYUK;Lo;0;L;;;;;N;;;;; +D069;HANGUL SYLLABLE KYUT;Lo;0;L;;;;;N;;;;; +D06A;HANGUL SYLLABLE KYUP;Lo;0;L;;;;;N;;;;; +D06B;HANGUL SYLLABLE KYUH;Lo;0;L;;;;;N;;;;; +D06C;HANGUL SYLLABLE KEU;Lo;0;L;;;;;N;;;;; +D06D;HANGUL SYLLABLE KEUG;Lo;0;L;;;;;N;;;;; +D06E;HANGUL SYLLABLE KEUGG;Lo;0;L;;;;;N;;;;; +D06F;HANGUL SYLLABLE KEUGS;Lo;0;L;;;;;N;;;;; +D070;HANGUL SYLLABLE KEUN;Lo;0;L;;;;;N;;;;; +D071;HANGUL SYLLABLE KEUNI;Lo;0;L;;;;;N;;;;; +D072;HANGUL SYLLABLE KEUNH;Lo;0;L;;;;;N;;;;; +D073;HANGUL SYLLABLE KEUD;Lo;0;L;;;;;N;;;;; +D074;HANGUL SYLLABLE KEUL;Lo;0;L;;;;;N;;;;; +D075;HANGUL SYLLABLE KEULG;Lo;0;L;;;;;N;;;;; +D076;HANGUL SYLLABLE KEULM;Lo;0;L;;;;;N;;;;; +D077;HANGUL SYLLABLE KEULB;Lo;0;L;;;;;N;;;;; +D078;HANGUL SYLLABLE KEULS;Lo;0;L;;;;;N;;;;; +D079;HANGUL SYLLABLE KEULT;Lo;0;L;;;;;N;;;;; +D07A;HANGUL SYLLABLE KEULP;Lo;0;L;;;;;N;;;;; +D07B;HANGUL SYLLABLE KEULH;Lo;0;L;;;;;N;;;;; +D07C;HANGUL SYLLABLE KEUM;Lo;0;L;;;;;N;;;;; +D07D;HANGUL SYLLABLE KEUB;Lo;0;L;;;;;N;;;;; +D07E;HANGUL SYLLABLE KEUBS;Lo;0;L;;;;;N;;;;; +D07F;HANGUL SYLLABLE KEUS;Lo;0;L;;;;;N;;;;; +D080;HANGUL SYLLABLE KEUSS;Lo;0;L;;;;;N;;;;; +D081;HANGUL SYLLABLE KEUNG;Lo;0;L;;;;;N;;;;; +D082;HANGUL SYLLABLE KEUJ;Lo;0;L;;;;;N;;;;; +D083;HANGUL SYLLABLE KEUC;Lo;0;L;;;;;N;;;;; +D084;HANGUL SYLLABLE KEUK;Lo;0;L;;;;;N;;;;; +D085;HANGUL SYLLABLE KEUT;Lo;0;L;;;;;N;;;;; +D086;HANGUL SYLLABLE KEUP;Lo;0;L;;;;;N;;;;; +D087;HANGUL SYLLABLE KEUH;Lo;0;L;;;;;N;;;;; +D088;HANGUL SYLLABLE KYI;Lo;0;L;;;;;N;;;;; +D089;HANGUL SYLLABLE KYIG;Lo;0;L;;;;;N;;;;; +D08A;HANGUL SYLLABLE KYIGG;Lo;0;L;;;;;N;;;;; +D08B;HANGUL SYLLABLE KYIGS;Lo;0;L;;;;;N;;;;; +D08C;HANGUL SYLLABLE KYIN;Lo;0;L;;;;;N;;;;; +D08D;HANGUL SYLLABLE KYINI;Lo;0;L;;;;;N;;;;; +D08E;HANGUL SYLLABLE KYINH;Lo;0;L;;;;;N;;;;; +D08F;HANGUL SYLLABLE KYID;Lo;0;L;;;;;N;;;;; +D090;HANGUL SYLLABLE KYIL;Lo;0;L;;;;;N;;;;; +D091;HANGUL SYLLABLE KYILG;Lo;0;L;;;;;N;;;;; +D092;HANGUL SYLLABLE KYILM;Lo;0;L;;;;;N;;;;; +D093;HANGUL SYLLABLE KYILB;Lo;0;L;;;;;N;;;;; +D094;HANGUL SYLLABLE KYILS;Lo;0;L;;;;;N;;;;; +D095;HANGUL SYLLABLE KYILT;Lo;0;L;;;;;N;;;;; +D096;HANGUL SYLLABLE KYILP;Lo;0;L;;;;;N;;;;; +D097;HANGUL SYLLABLE KYILH;Lo;0;L;;;;;N;;;;; +D098;HANGUL SYLLABLE KYIM;Lo;0;L;;;;;N;;;;; +D099;HANGUL SYLLABLE KYIB;Lo;0;L;;;;;N;;;;; +D09A;HANGUL SYLLABLE KYIBS;Lo;0;L;;;;;N;;;;; +D09B;HANGUL SYLLABLE KYIS;Lo;0;L;;;;;N;;;;; +D09C;HANGUL SYLLABLE KYISS;Lo;0;L;;;;;N;;;;; +D09D;HANGUL SYLLABLE KYING;Lo;0;L;;;;;N;;;;; +D09E;HANGUL SYLLABLE KYIJ;Lo;0;L;;;;;N;;;;; +D09F;HANGUL SYLLABLE KYIC;Lo;0;L;;;;;N;;;;; +D0A0;HANGUL SYLLABLE KYIK;Lo;0;L;;;;;N;;;;; +D0A1;HANGUL SYLLABLE KYIT;Lo;0;L;;;;;N;;;;; +D0A2;HANGUL SYLLABLE KYIP;Lo;0;L;;;;;N;;;;; +D0A3;HANGUL SYLLABLE KYIH;Lo;0;L;;;;;N;;;;; +D0A4;HANGUL SYLLABLE KI;Lo;0;L;;;;;N;;;;; +D0A5;HANGUL SYLLABLE KIG;Lo;0;L;;;;;N;;;;; +D0A6;HANGUL SYLLABLE KIGG;Lo;0;L;;;;;N;;;;; +D0A7;HANGUL SYLLABLE KIGS;Lo;0;L;;;;;N;;;;; +D0A8;HANGUL SYLLABLE KIN;Lo;0;L;;;;;N;;;;; +D0A9;HANGUL SYLLABLE KINI;Lo;0;L;;;;;N;;;;; +D0AA;HANGUL SYLLABLE KINH;Lo;0;L;;;;;N;;;;; +D0AB;HANGUL SYLLABLE KID;Lo;0;L;;;;;N;;;;; +D0AC;HANGUL SYLLABLE KIL;Lo;0;L;;;;;N;;;;; +D0AD;HANGUL SYLLABLE KILG;Lo;0;L;;;;;N;;;;; +D0AE;HANGUL SYLLABLE KILM;Lo;0;L;;;;;N;;;;; +D0AF;HANGUL SYLLABLE KILB;Lo;0;L;;;;;N;;;;; +D0B0;HANGUL SYLLABLE KILS;Lo;0;L;;;;;N;;;;; +D0B1;HANGUL SYLLABLE KILT;Lo;0;L;;;;;N;;;;; +D0B2;HANGUL SYLLABLE KILP;Lo;0;L;;;;;N;;;;; +D0B3;HANGUL SYLLABLE KILH;Lo;0;L;;;;;N;;;;; +D0B4;HANGUL SYLLABLE KIM;Lo;0;L;;;;;N;;;;; +D0B5;HANGUL SYLLABLE KIB;Lo;0;L;;;;;N;;;;; +D0B6;HANGUL SYLLABLE KIBS;Lo;0;L;;;;;N;;;;; +D0B7;HANGUL SYLLABLE KIS;Lo;0;L;;;;;N;;;;; +D0B8;HANGUL SYLLABLE KISS;Lo;0;L;;;;;N;;;;; +D0B9;HANGUL SYLLABLE KING;Lo;0;L;;;;;N;;;;; +D0BA;HANGUL SYLLABLE KIJ;Lo;0;L;;;;;N;;;;; +D0BB;HANGUL SYLLABLE KIC;Lo;0;L;;;;;N;;;;; +D0BC;HANGUL SYLLABLE KIK;Lo;0;L;;;;;N;;;;; +D0BD;HANGUL SYLLABLE KIT;Lo;0;L;;;;;N;;;;; +D0BE;HANGUL SYLLABLE KIP;Lo;0;L;;;;;N;;;;; +D0BF;HANGUL SYLLABLE KIH;Lo;0;L;;;;;N;;;;; +D0C0;HANGUL SYLLABLE TA;Lo;0;L;;;;;N;;;;; +D0C1;HANGUL SYLLABLE TAG;Lo;0;L;;;;;N;;;;; +D0C2;HANGUL SYLLABLE TAGG;Lo;0;L;;;;;N;;;;; +D0C3;HANGUL SYLLABLE TAGS;Lo;0;L;;;;;N;;;;; +D0C4;HANGUL SYLLABLE TAN;Lo;0;L;;;;;N;;;;; +D0C5;HANGUL SYLLABLE TANI;Lo;0;L;;;;;N;;;;; +D0C6;HANGUL SYLLABLE TANH;Lo;0;L;;;;;N;;;;; +D0C7;HANGUL SYLLABLE TAD;Lo;0;L;;;;;N;;;;; +D0C8;HANGUL SYLLABLE TAL;Lo;0;L;;;;;N;;;;; +D0C9;HANGUL SYLLABLE TALG;Lo;0;L;;;;;N;;;;; +D0CA;HANGUL SYLLABLE TALM;Lo;0;L;;;;;N;;;;; +D0CB;HANGUL SYLLABLE TALB;Lo;0;L;;;;;N;;;;; +D0CC;HANGUL SYLLABLE TALS;Lo;0;L;;;;;N;;;;; +D0CD;HANGUL SYLLABLE TALT;Lo;0;L;;;;;N;;;;; +D0CE;HANGUL SYLLABLE TALP;Lo;0;L;;;;;N;;;;; +D0CF;HANGUL SYLLABLE TALH;Lo;0;L;;;;;N;;;;; +D0D0;HANGUL SYLLABLE TAM;Lo;0;L;;;;;N;;;;; +D0D1;HANGUL SYLLABLE TAB;Lo;0;L;;;;;N;;;;; +D0D2;HANGUL SYLLABLE TABS;Lo;0;L;;;;;N;;;;; +D0D3;HANGUL SYLLABLE TAS;Lo;0;L;;;;;N;;;;; +D0D4;HANGUL SYLLABLE TASS;Lo;0;L;;;;;N;;;;; +D0D5;HANGUL SYLLABLE TANG;Lo;0;L;;;;;N;;;;; +D0D6;HANGUL SYLLABLE TAJ;Lo;0;L;;;;;N;;;;; +D0D7;HANGUL SYLLABLE TAC;Lo;0;L;;;;;N;;;;; +D0D8;HANGUL SYLLABLE TAK;Lo;0;L;;;;;N;;;;; +D0D9;HANGUL SYLLABLE TAT;Lo;0;L;;;;;N;;;;; +D0DA;HANGUL SYLLABLE TAP;Lo;0;L;;;;;N;;;;; +D0DB;HANGUL SYLLABLE TAH;Lo;0;L;;;;;N;;;;; +D0DC;HANGUL SYLLABLE TAE;Lo;0;L;;;;;N;;;;; +D0DD;HANGUL SYLLABLE TAEG;Lo;0;L;;;;;N;;;;; +D0DE;HANGUL SYLLABLE TAEGG;Lo;0;L;;;;;N;;;;; +D0DF;HANGUL SYLLABLE TAEGS;Lo;0;L;;;;;N;;;;; +D0E0;HANGUL SYLLABLE TAEN;Lo;0;L;;;;;N;;;;; +D0E1;HANGUL SYLLABLE TAENI;Lo;0;L;;;;;N;;;;; +D0E2;HANGUL SYLLABLE TAENH;Lo;0;L;;;;;N;;;;; +D0E3;HANGUL SYLLABLE TAED;Lo;0;L;;;;;N;;;;; +D0E4;HANGUL SYLLABLE TAEL;Lo;0;L;;;;;N;;;;; +D0E5;HANGUL SYLLABLE TAELG;Lo;0;L;;;;;N;;;;; +D0E6;HANGUL SYLLABLE TAELM;Lo;0;L;;;;;N;;;;; +D0E7;HANGUL SYLLABLE TAELB;Lo;0;L;;;;;N;;;;; +D0E8;HANGUL SYLLABLE TAELS;Lo;0;L;;;;;N;;;;; +D0E9;HANGUL SYLLABLE TAELT;Lo;0;L;;;;;N;;;;; +D0EA;HANGUL SYLLABLE TAELP;Lo;0;L;;;;;N;;;;; +D0EB;HANGUL SYLLABLE TAELH;Lo;0;L;;;;;N;;;;; +D0EC;HANGUL SYLLABLE TAEM;Lo;0;L;;;;;N;;;;; +D0ED;HANGUL SYLLABLE TAEB;Lo;0;L;;;;;N;;;;; +D0EE;HANGUL SYLLABLE TAEBS;Lo;0;L;;;;;N;;;;; +D0EF;HANGUL SYLLABLE TAES;Lo;0;L;;;;;N;;;;; +D0F0;HANGUL SYLLABLE TAESS;Lo;0;L;;;;;N;;;;; +D0F1;HANGUL SYLLABLE TAENG;Lo;0;L;;;;;N;;;;; +D0F2;HANGUL SYLLABLE TAEJ;Lo;0;L;;;;;N;;;;; +D0F3;HANGUL SYLLABLE TAEC;Lo;0;L;;;;;N;;;;; +D0F4;HANGUL SYLLABLE TAEK;Lo;0;L;;;;;N;;;;; +D0F5;HANGUL SYLLABLE TAET;Lo;0;L;;;;;N;;;;; +D0F6;HANGUL SYLLABLE TAEP;Lo;0;L;;;;;N;;;;; +D0F7;HANGUL SYLLABLE TAEH;Lo;0;L;;;;;N;;;;; +D0F8;HANGUL SYLLABLE TYA;Lo;0;L;;;;;N;;;;; +D0F9;HANGUL SYLLABLE TYAG;Lo;0;L;;;;;N;;;;; +D0FA;HANGUL SYLLABLE TYAGG;Lo;0;L;;;;;N;;;;; +D0FB;HANGUL SYLLABLE TYAGS;Lo;0;L;;;;;N;;;;; +D0FC;HANGUL SYLLABLE TYAN;Lo;0;L;;;;;N;;;;; +D0FD;HANGUL SYLLABLE TYANI;Lo;0;L;;;;;N;;;;; +D0FE;HANGUL SYLLABLE TYANH;Lo;0;L;;;;;N;;;;; +D0FF;HANGUL SYLLABLE TYAD;Lo;0;L;;;;;N;;;;; +D100;HANGUL SYLLABLE TYAL;Lo;0;L;;;;;N;;;;; +D101;HANGUL SYLLABLE TYALG;Lo;0;L;;;;;N;;;;; +D102;HANGUL SYLLABLE TYALM;Lo;0;L;;;;;N;;;;; +D103;HANGUL SYLLABLE TYALB;Lo;0;L;;;;;N;;;;; +D104;HANGUL SYLLABLE TYALS;Lo;0;L;;;;;N;;;;; +D105;HANGUL SYLLABLE TYALT;Lo;0;L;;;;;N;;;;; +D106;HANGUL SYLLABLE TYALP;Lo;0;L;;;;;N;;;;; +D107;HANGUL SYLLABLE TYALH;Lo;0;L;;;;;N;;;;; +D108;HANGUL SYLLABLE TYAM;Lo;0;L;;;;;N;;;;; +D109;HANGUL SYLLABLE TYAB;Lo;0;L;;;;;N;;;;; +D10A;HANGUL SYLLABLE TYABS;Lo;0;L;;;;;N;;;;; +D10B;HANGUL SYLLABLE TYAS;Lo;0;L;;;;;N;;;;; +D10C;HANGUL SYLLABLE TYASS;Lo;0;L;;;;;N;;;;; +D10D;HANGUL SYLLABLE TYANG;Lo;0;L;;;;;N;;;;; +D10E;HANGUL SYLLABLE TYAJ;Lo;0;L;;;;;N;;;;; +D10F;HANGUL SYLLABLE TYAC;Lo;0;L;;;;;N;;;;; +D110;HANGUL SYLLABLE TYAK;Lo;0;L;;;;;N;;;;; +D111;HANGUL SYLLABLE TYAT;Lo;0;L;;;;;N;;;;; +D112;HANGUL SYLLABLE TYAP;Lo;0;L;;;;;N;;;;; +D113;HANGUL SYLLABLE TYAH;Lo;0;L;;;;;N;;;;; +D114;HANGUL SYLLABLE TYAE;Lo;0;L;;;;;N;;;;; +D115;HANGUL SYLLABLE TYAEG;Lo;0;L;;;;;N;;;;; +D116;HANGUL SYLLABLE TYAEGG;Lo;0;L;;;;;N;;;;; +D117;HANGUL SYLLABLE TYAEGS;Lo;0;L;;;;;N;;;;; +D118;HANGUL SYLLABLE TYAEN;Lo;0;L;;;;;N;;;;; +D119;HANGUL SYLLABLE TYAENI;Lo;0;L;;;;;N;;;;; +D11A;HANGUL SYLLABLE TYAENH;Lo;0;L;;;;;N;;;;; +D11B;HANGUL SYLLABLE TYAED;Lo;0;L;;;;;N;;;;; +D11C;HANGUL SYLLABLE TYAEL;Lo;0;L;;;;;N;;;;; +D11D;HANGUL SYLLABLE TYAELG;Lo;0;L;;;;;N;;;;; +D11E;HANGUL SYLLABLE TYAELM;Lo;0;L;;;;;N;;;;; +D11F;HANGUL SYLLABLE TYAELB;Lo;0;L;;;;;N;;;;; +D120;HANGUL SYLLABLE TYAELS;Lo;0;L;;;;;N;;;;; +D121;HANGUL SYLLABLE TYAELT;Lo;0;L;;;;;N;;;;; +D122;HANGUL SYLLABLE TYAELP;Lo;0;L;;;;;N;;;;; +D123;HANGUL SYLLABLE TYAELH;Lo;0;L;;;;;N;;;;; +D124;HANGUL SYLLABLE TYAEM;Lo;0;L;;;;;N;;;;; +D125;HANGUL SYLLABLE TYAEB;Lo;0;L;;;;;N;;;;; +D126;HANGUL SYLLABLE TYAEBS;Lo;0;L;;;;;N;;;;; +D127;HANGUL SYLLABLE TYAES;Lo;0;L;;;;;N;;;;; +D128;HANGUL SYLLABLE TYAESS;Lo;0;L;;;;;N;;;;; +D129;HANGUL SYLLABLE TYAENG;Lo;0;L;;;;;N;;;;; +D12A;HANGUL SYLLABLE TYAEJ;Lo;0;L;;;;;N;;;;; +D12B;HANGUL SYLLABLE TYAEC;Lo;0;L;;;;;N;;;;; +D12C;HANGUL SYLLABLE TYAEK;Lo;0;L;;;;;N;;;;; +D12D;HANGUL SYLLABLE TYAET;Lo;0;L;;;;;N;;;;; +D12E;HANGUL SYLLABLE TYAEP;Lo;0;L;;;;;N;;;;; +D12F;HANGUL SYLLABLE TYAEH;Lo;0;L;;;;;N;;;;; +D130;HANGUL SYLLABLE TEO;Lo;0;L;;;;;N;;;;; +D131;HANGUL SYLLABLE TEOG;Lo;0;L;;;;;N;;;;; +D132;HANGUL SYLLABLE TEOGG;Lo;0;L;;;;;N;;;;; +D133;HANGUL SYLLABLE TEOGS;Lo;0;L;;;;;N;;;;; +D134;HANGUL SYLLABLE TEON;Lo;0;L;;;;;N;;;;; +D135;HANGUL SYLLABLE TEONI;Lo;0;L;;;;;N;;;;; +D136;HANGUL SYLLABLE TEONH;Lo;0;L;;;;;N;;;;; +D137;HANGUL SYLLABLE TEOD;Lo;0;L;;;;;N;;;;; +D138;HANGUL SYLLABLE TEOL;Lo;0;L;;;;;N;;;;; +D139;HANGUL SYLLABLE TEOLG;Lo;0;L;;;;;N;;;;; +D13A;HANGUL SYLLABLE TEOLM;Lo;0;L;;;;;N;;;;; +D13B;HANGUL SYLLABLE TEOLB;Lo;0;L;;;;;N;;;;; +D13C;HANGUL SYLLABLE TEOLS;Lo;0;L;;;;;N;;;;; +D13D;HANGUL SYLLABLE TEOLT;Lo;0;L;;;;;N;;;;; +D13E;HANGUL SYLLABLE TEOLP;Lo;0;L;;;;;N;;;;; +D13F;HANGUL SYLLABLE TEOLH;Lo;0;L;;;;;N;;;;; +D140;HANGUL SYLLABLE TEOM;Lo;0;L;;;;;N;;;;; +D141;HANGUL SYLLABLE TEOB;Lo;0;L;;;;;N;;;;; +D142;HANGUL SYLLABLE TEOBS;Lo;0;L;;;;;N;;;;; +D143;HANGUL SYLLABLE TEOS;Lo;0;L;;;;;N;;;;; +D144;HANGUL SYLLABLE TEOSS;Lo;0;L;;;;;N;;;;; +D145;HANGUL SYLLABLE TEONG;Lo;0;L;;;;;N;;;;; +D146;HANGUL SYLLABLE TEOJ;Lo;0;L;;;;;N;;;;; +D147;HANGUL SYLLABLE TEOC;Lo;0;L;;;;;N;;;;; +D148;HANGUL SYLLABLE TEOK;Lo;0;L;;;;;N;;;;; +D149;HANGUL SYLLABLE TEOT;Lo;0;L;;;;;N;;;;; +D14A;HANGUL SYLLABLE TEOP;Lo;0;L;;;;;N;;;;; +D14B;HANGUL SYLLABLE TEOH;Lo;0;L;;;;;N;;;;; +D14C;HANGUL SYLLABLE TE;Lo;0;L;;;;;N;;;;; +D14D;HANGUL SYLLABLE TEG;Lo;0;L;;;;;N;;;;; +D14E;HANGUL SYLLABLE TEGG;Lo;0;L;;;;;N;;;;; +D14F;HANGUL SYLLABLE TEGS;Lo;0;L;;;;;N;;;;; +D150;HANGUL SYLLABLE TEN;Lo;0;L;;;;;N;;;;; +D151;HANGUL SYLLABLE TENI;Lo;0;L;;;;;N;;;;; +D152;HANGUL SYLLABLE TENH;Lo;0;L;;;;;N;;;;; +D153;HANGUL SYLLABLE TED;Lo;0;L;;;;;N;;;;; +D154;HANGUL SYLLABLE TEL;Lo;0;L;;;;;N;;;;; +D155;HANGUL SYLLABLE TELG;Lo;0;L;;;;;N;;;;; +D156;HANGUL SYLLABLE TELM;Lo;0;L;;;;;N;;;;; +D157;HANGUL SYLLABLE TELB;Lo;0;L;;;;;N;;;;; +D158;HANGUL SYLLABLE TELS;Lo;0;L;;;;;N;;;;; +D159;HANGUL SYLLABLE TELT;Lo;0;L;;;;;N;;;;; +D15A;HANGUL SYLLABLE TELP;Lo;0;L;;;;;N;;;;; +D15B;HANGUL SYLLABLE TELH;Lo;0;L;;;;;N;;;;; +D15C;HANGUL SYLLABLE TEM;Lo;0;L;;;;;N;;;;; +D15D;HANGUL SYLLABLE TEB;Lo;0;L;;;;;N;;;;; +D15E;HANGUL SYLLABLE TEBS;Lo;0;L;;;;;N;;;;; +D15F;HANGUL SYLLABLE TES;Lo;0;L;;;;;N;;;;; +D160;HANGUL SYLLABLE TESS;Lo;0;L;;;;;N;;;;; +D161;HANGUL SYLLABLE TENG;Lo;0;L;;;;;N;;;;; +D162;HANGUL SYLLABLE TEJ;Lo;0;L;;;;;N;;;;; +D163;HANGUL SYLLABLE TEC;Lo;0;L;;;;;N;;;;; +D164;HANGUL SYLLABLE TEK;Lo;0;L;;;;;N;;;;; +D165;HANGUL SYLLABLE TET;Lo;0;L;;;;;N;;;;; +D166;HANGUL SYLLABLE TEP;Lo;0;L;;;;;N;;;;; +D167;HANGUL SYLLABLE TEH;Lo;0;L;;;;;N;;;;; +D168;HANGUL SYLLABLE TYEO;Lo;0;L;;;;;N;;;;; +D169;HANGUL SYLLABLE TYEOG;Lo;0;L;;;;;N;;;;; +D16A;HANGUL SYLLABLE TYEOGG;Lo;0;L;;;;;N;;;;; +D16B;HANGUL SYLLABLE TYEOGS;Lo;0;L;;;;;N;;;;; +D16C;HANGUL SYLLABLE TYEON;Lo;0;L;;;;;N;;;;; +D16D;HANGUL SYLLABLE TYEONI;Lo;0;L;;;;;N;;;;; +D16E;HANGUL SYLLABLE TYEONH;Lo;0;L;;;;;N;;;;; +D16F;HANGUL SYLLABLE TYEOD;Lo;0;L;;;;;N;;;;; +D170;HANGUL SYLLABLE TYEOL;Lo;0;L;;;;;N;;;;; +D171;HANGUL SYLLABLE TYEOLG;Lo;0;L;;;;;N;;;;; +D172;HANGUL SYLLABLE TYEOLM;Lo;0;L;;;;;N;;;;; +D173;HANGUL SYLLABLE TYEOLB;Lo;0;L;;;;;N;;;;; +D174;HANGUL SYLLABLE TYEOLS;Lo;0;L;;;;;N;;;;; +D175;HANGUL SYLLABLE TYEOLT;Lo;0;L;;;;;N;;;;; +D176;HANGUL SYLLABLE TYEOLP;Lo;0;L;;;;;N;;;;; +D177;HANGUL SYLLABLE TYEOLH;Lo;0;L;;;;;N;;;;; +D178;HANGUL SYLLABLE TYEOM;Lo;0;L;;;;;N;;;;; +D179;HANGUL SYLLABLE TYEOB;Lo;0;L;;;;;N;;;;; +D17A;HANGUL SYLLABLE TYEOBS;Lo;0;L;;;;;N;;;;; +D17B;HANGUL SYLLABLE TYEOS;Lo;0;L;;;;;N;;;;; +D17C;HANGUL SYLLABLE TYEOSS;Lo;0;L;;;;;N;;;;; +D17D;HANGUL SYLLABLE TYEONG;Lo;0;L;;;;;N;;;;; +D17E;HANGUL SYLLABLE TYEOJ;Lo;0;L;;;;;N;;;;; +D17F;HANGUL SYLLABLE TYEOC;Lo;0;L;;;;;N;;;;; +D180;HANGUL SYLLABLE TYEOK;Lo;0;L;;;;;N;;;;; +D181;HANGUL SYLLABLE TYEOT;Lo;0;L;;;;;N;;;;; +D182;HANGUL SYLLABLE TYEOP;Lo;0;L;;;;;N;;;;; +D183;HANGUL SYLLABLE TYEOH;Lo;0;L;;;;;N;;;;; +D184;HANGUL SYLLABLE TYE;Lo;0;L;;;;;N;;;;; +D185;HANGUL SYLLABLE TYEG;Lo;0;L;;;;;N;;;;; +D186;HANGUL SYLLABLE TYEGG;Lo;0;L;;;;;N;;;;; +D187;HANGUL SYLLABLE TYEGS;Lo;0;L;;;;;N;;;;; +D188;HANGUL SYLLABLE TYEN;Lo;0;L;;;;;N;;;;; +D189;HANGUL SYLLABLE TYENI;Lo;0;L;;;;;N;;;;; +D18A;HANGUL SYLLABLE TYENH;Lo;0;L;;;;;N;;;;; +D18B;HANGUL SYLLABLE TYED;Lo;0;L;;;;;N;;;;; +D18C;HANGUL SYLLABLE TYEL;Lo;0;L;;;;;N;;;;; +D18D;HANGUL SYLLABLE TYELG;Lo;0;L;;;;;N;;;;; +D18E;HANGUL SYLLABLE TYELM;Lo;0;L;;;;;N;;;;; +D18F;HANGUL SYLLABLE TYELB;Lo;0;L;;;;;N;;;;; +D190;HANGUL SYLLABLE TYELS;Lo;0;L;;;;;N;;;;; +D191;HANGUL SYLLABLE TYELT;Lo;0;L;;;;;N;;;;; +D192;HANGUL SYLLABLE TYELP;Lo;0;L;;;;;N;;;;; +D193;HANGUL SYLLABLE TYELH;Lo;0;L;;;;;N;;;;; +D194;HANGUL SYLLABLE TYEM;Lo;0;L;;;;;N;;;;; +D195;HANGUL SYLLABLE TYEB;Lo;0;L;;;;;N;;;;; +D196;HANGUL SYLLABLE TYEBS;Lo;0;L;;;;;N;;;;; +D197;HANGUL SYLLABLE TYES;Lo;0;L;;;;;N;;;;; +D198;HANGUL SYLLABLE TYESS;Lo;0;L;;;;;N;;;;; +D199;HANGUL SYLLABLE TYENG;Lo;0;L;;;;;N;;;;; +D19A;HANGUL SYLLABLE TYEJ;Lo;0;L;;;;;N;;;;; +D19B;HANGUL SYLLABLE TYEC;Lo;0;L;;;;;N;;;;; +D19C;HANGUL SYLLABLE TYEK;Lo;0;L;;;;;N;;;;; +D19D;HANGUL SYLLABLE TYET;Lo;0;L;;;;;N;;;;; +D19E;HANGUL SYLLABLE TYEP;Lo;0;L;;;;;N;;;;; +D19F;HANGUL SYLLABLE TYEH;Lo;0;L;;;;;N;;;;; +D1A0;HANGUL SYLLABLE TO;Lo;0;L;;;;;N;;;;; +D1A1;HANGUL SYLLABLE TOG;Lo;0;L;;;;;N;;;;; +D1A2;HANGUL SYLLABLE TOGG;Lo;0;L;;;;;N;;;;; +D1A3;HANGUL SYLLABLE TOGS;Lo;0;L;;;;;N;;;;; +D1A4;HANGUL SYLLABLE TON;Lo;0;L;;;;;N;;;;; +D1A5;HANGUL SYLLABLE TONI;Lo;0;L;;;;;N;;;;; +D1A6;HANGUL SYLLABLE TONH;Lo;0;L;;;;;N;;;;; +D1A7;HANGUL SYLLABLE TOD;Lo;0;L;;;;;N;;;;; +D1A8;HANGUL SYLLABLE TOL;Lo;0;L;;;;;N;;;;; +D1A9;HANGUL SYLLABLE TOLG;Lo;0;L;;;;;N;;;;; +D1AA;HANGUL SYLLABLE TOLM;Lo;0;L;;;;;N;;;;; +D1AB;HANGUL SYLLABLE TOLB;Lo;0;L;;;;;N;;;;; +D1AC;HANGUL SYLLABLE TOLS;Lo;0;L;;;;;N;;;;; +D1AD;HANGUL SYLLABLE TOLT;Lo;0;L;;;;;N;;;;; +D1AE;HANGUL SYLLABLE TOLP;Lo;0;L;;;;;N;;;;; +D1AF;HANGUL SYLLABLE TOLH;Lo;0;L;;;;;N;;;;; +D1B0;HANGUL SYLLABLE TOM;Lo;0;L;;;;;N;;;;; +D1B1;HANGUL SYLLABLE TOB;Lo;0;L;;;;;N;;;;; +D1B2;HANGUL SYLLABLE TOBS;Lo;0;L;;;;;N;;;;; +D1B3;HANGUL SYLLABLE TOS;Lo;0;L;;;;;N;;;;; +D1B4;HANGUL SYLLABLE TOSS;Lo;0;L;;;;;N;;;;; +D1B5;HANGUL SYLLABLE TONG;Lo;0;L;;;;;N;;;;; +D1B6;HANGUL SYLLABLE TOJ;Lo;0;L;;;;;N;;;;; +D1B7;HANGUL SYLLABLE TOC;Lo;0;L;;;;;N;;;;; +D1B8;HANGUL SYLLABLE TOK;Lo;0;L;;;;;N;;;;; +D1B9;HANGUL SYLLABLE TOT;Lo;0;L;;;;;N;;;;; +D1BA;HANGUL SYLLABLE TOP;Lo;0;L;;;;;N;;;;; +D1BB;HANGUL SYLLABLE TOH;Lo;0;L;;;;;N;;;;; +D1BC;HANGUL SYLLABLE TWA;Lo;0;L;;;;;N;;;;; +D1BD;HANGUL SYLLABLE TWAG;Lo;0;L;;;;;N;;;;; +D1BE;HANGUL SYLLABLE TWAGG;Lo;0;L;;;;;N;;;;; +D1BF;HANGUL SYLLABLE TWAGS;Lo;0;L;;;;;N;;;;; +D1C0;HANGUL SYLLABLE TWAN;Lo;0;L;;;;;N;;;;; +D1C1;HANGUL SYLLABLE TWANI;Lo;0;L;;;;;N;;;;; +D1C2;HANGUL SYLLABLE TWANH;Lo;0;L;;;;;N;;;;; +D1C3;HANGUL SYLLABLE TWAD;Lo;0;L;;;;;N;;;;; +D1C4;HANGUL SYLLABLE TWAL;Lo;0;L;;;;;N;;;;; +D1C5;HANGUL SYLLABLE TWALG;Lo;0;L;;;;;N;;;;; +D1C6;HANGUL SYLLABLE TWALM;Lo;0;L;;;;;N;;;;; +D1C7;HANGUL SYLLABLE TWALB;Lo;0;L;;;;;N;;;;; +D1C8;HANGUL SYLLABLE TWALS;Lo;0;L;;;;;N;;;;; +D1C9;HANGUL SYLLABLE TWALT;Lo;0;L;;;;;N;;;;; +D1CA;HANGUL SYLLABLE TWALP;Lo;0;L;;;;;N;;;;; +D1CB;HANGUL SYLLABLE TWALH;Lo;0;L;;;;;N;;;;; +D1CC;HANGUL SYLLABLE TWAM;Lo;0;L;;;;;N;;;;; +D1CD;HANGUL SYLLABLE TWAB;Lo;0;L;;;;;N;;;;; +D1CE;HANGUL SYLLABLE TWABS;Lo;0;L;;;;;N;;;;; +D1CF;HANGUL SYLLABLE TWAS;Lo;0;L;;;;;N;;;;; +D1D0;HANGUL SYLLABLE TWASS;Lo;0;L;;;;;N;;;;; +D1D1;HANGUL SYLLABLE TWANG;Lo;0;L;;;;;N;;;;; +D1D2;HANGUL SYLLABLE TWAJ;Lo;0;L;;;;;N;;;;; +D1D3;HANGUL SYLLABLE TWAC;Lo;0;L;;;;;N;;;;; +D1D4;HANGUL SYLLABLE TWAK;Lo;0;L;;;;;N;;;;; +D1D5;HANGUL SYLLABLE TWAT;Lo;0;L;;;;;N;;;;; +D1D6;HANGUL SYLLABLE TWAP;Lo;0;L;;;;;N;;;;; +D1D7;HANGUL SYLLABLE TWAH;Lo;0;L;;;;;N;;;;; +D1D8;HANGUL SYLLABLE TWAE;Lo;0;L;;;;;N;;;;; +D1D9;HANGUL SYLLABLE TWAEG;Lo;0;L;;;;;N;;;;; +D1DA;HANGUL SYLLABLE TWAEGG;Lo;0;L;;;;;N;;;;; +D1DB;HANGUL SYLLABLE TWAEGS;Lo;0;L;;;;;N;;;;; +D1DC;HANGUL SYLLABLE TWAEN;Lo;0;L;;;;;N;;;;; +D1DD;HANGUL SYLLABLE TWAENI;Lo;0;L;;;;;N;;;;; +D1DE;HANGUL SYLLABLE TWAENH;Lo;0;L;;;;;N;;;;; +D1DF;HANGUL SYLLABLE TWAED;Lo;0;L;;;;;N;;;;; +D1E0;HANGUL SYLLABLE TWAEL;Lo;0;L;;;;;N;;;;; +D1E1;HANGUL SYLLABLE TWAELG;Lo;0;L;;;;;N;;;;; +D1E2;HANGUL SYLLABLE TWAELM;Lo;0;L;;;;;N;;;;; +D1E3;HANGUL SYLLABLE TWAELB;Lo;0;L;;;;;N;;;;; +D1E4;HANGUL SYLLABLE TWAELS;Lo;0;L;;;;;N;;;;; +D1E5;HANGUL SYLLABLE TWAELT;Lo;0;L;;;;;N;;;;; +D1E6;HANGUL SYLLABLE TWAELP;Lo;0;L;;;;;N;;;;; +D1E7;HANGUL SYLLABLE TWAELH;Lo;0;L;;;;;N;;;;; +D1E8;HANGUL SYLLABLE TWAEM;Lo;0;L;;;;;N;;;;; +D1E9;HANGUL SYLLABLE TWAEB;Lo;0;L;;;;;N;;;;; +D1EA;HANGUL SYLLABLE TWAEBS;Lo;0;L;;;;;N;;;;; +D1EB;HANGUL SYLLABLE TWAES;Lo;0;L;;;;;N;;;;; +D1EC;HANGUL SYLLABLE TWAESS;Lo;0;L;;;;;N;;;;; +D1ED;HANGUL SYLLABLE TWAENG;Lo;0;L;;;;;N;;;;; +D1EE;HANGUL SYLLABLE TWAEJ;Lo;0;L;;;;;N;;;;; +D1EF;HANGUL SYLLABLE TWAEC;Lo;0;L;;;;;N;;;;; +D1F0;HANGUL SYLLABLE TWAEK;Lo;0;L;;;;;N;;;;; +D1F1;HANGUL SYLLABLE TWAET;Lo;0;L;;;;;N;;;;; +D1F2;HANGUL SYLLABLE TWAEP;Lo;0;L;;;;;N;;;;; +D1F3;HANGUL SYLLABLE TWAEH;Lo;0;L;;;;;N;;;;; +D1F4;HANGUL SYLLABLE TOE;Lo;0;L;;;;;N;;;;; +D1F5;HANGUL SYLLABLE TOEG;Lo;0;L;;;;;N;;;;; +D1F6;HANGUL SYLLABLE TOEGG;Lo;0;L;;;;;N;;;;; +D1F7;HANGUL SYLLABLE TOEGS;Lo;0;L;;;;;N;;;;; +D1F8;HANGUL SYLLABLE TOEN;Lo;0;L;;;;;N;;;;; +D1F9;HANGUL SYLLABLE TOENI;Lo;0;L;;;;;N;;;;; +D1FA;HANGUL SYLLABLE TOENH;Lo;0;L;;;;;N;;;;; +D1FB;HANGUL SYLLABLE TOED;Lo;0;L;;;;;N;;;;; +D1FC;HANGUL SYLLABLE TOEL;Lo;0;L;;;;;N;;;;; +D1FD;HANGUL SYLLABLE TOELG;Lo;0;L;;;;;N;;;;; +D1FE;HANGUL SYLLABLE TOELM;Lo;0;L;;;;;N;;;;; +D1FF;HANGUL SYLLABLE TOELB;Lo;0;L;;;;;N;;;;; +D200;HANGUL SYLLABLE TOELS;Lo;0;L;;;;;N;;;;; +D201;HANGUL SYLLABLE TOELT;Lo;0;L;;;;;N;;;;; +D202;HANGUL SYLLABLE TOELP;Lo;0;L;;;;;N;;;;; +D203;HANGUL SYLLABLE TOELH;Lo;0;L;;;;;N;;;;; +D204;HANGUL SYLLABLE TOEM;Lo;0;L;;;;;N;;;;; +D205;HANGUL SYLLABLE TOEB;Lo;0;L;;;;;N;;;;; +D206;HANGUL SYLLABLE TOEBS;Lo;0;L;;;;;N;;;;; +D207;HANGUL SYLLABLE TOES;Lo;0;L;;;;;N;;;;; +D208;HANGUL SYLLABLE TOESS;Lo;0;L;;;;;N;;;;; +D209;HANGUL SYLLABLE TOENG;Lo;0;L;;;;;N;;;;; +D20A;HANGUL SYLLABLE TOEJ;Lo;0;L;;;;;N;;;;; +D20B;HANGUL SYLLABLE TOEC;Lo;0;L;;;;;N;;;;; +D20C;HANGUL SYLLABLE TOEK;Lo;0;L;;;;;N;;;;; +D20D;HANGUL SYLLABLE TOET;Lo;0;L;;;;;N;;;;; +D20E;HANGUL SYLLABLE TOEP;Lo;0;L;;;;;N;;;;; +D20F;HANGUL SYLLABLE TOEH;Lo;0;L;;;;;N;;;;; +D210;HANGUL SYLLABLE TYO;Lo;0;L;;;;;N;;;;; +D211;HANGUL SYLLABLE TYOG;Lo;0;L;;;;;N;;;;; +D212;HANGUL SYLLABLE TYOGG;Lo;0;L;;;;;N;;;;; +D213;HANGUL SYLLABLE TYOGS;Lo;0;L;;;;;N;;;;; +D214;HANGUL SYLLABLE TYON;Lo;0;L;;;;;N;;;;; +D215;HANGUL SYLLABLE TYONI;Lo;0;L;;;;;N;;;;; +D216;HANGUL SYLLABLE TYONH;Lo;0;L;;;;;N;;;;; +D217;HANGUL SYLLABLE TYOD;Lo;0;L;;;;;N;;;;; +D218;HANGUL SYLLABLE TYOL;Lo;0;L;;;;;N;;;;; +D219;HANGUL SYLLABLE TYOLG;Lo;0;L;;;;;N;;;;; +D21A;HANGUL SYLLABLE TYOLM;Lo;0;L;;;;;N;;;;; +D21B;HANGUL SYLLABLE TYOLB;Lo;0;L;;;;;N;;;;; +D21C;HANGUL SYLLABLE TYOLS;Lo;0;L;;;;;N;;;;; +D21D;HANGUL SYLLABLE TYOLT;Lo;0;L;;;;;N;;;;; +D21E;HANGUL SYLLABLE TYOLP;Lo;0;L;;;;;N;;;;; +D21F;HANGUL SYLLABLE TYOLH;Lo;0;L;;;;;N;;;;; +D220;HANGUL SYLLABLE TYOM;Lo;0;L;;;;;N;;;;; +D221;HANGUL SYLLABLE TYOB;Lo;0;L;;;;;N;;;;; +D222;HANGUL SYLLABLE TYOBS;Lo;0;L;;;;;N;;;;; +D223;HANGUL SYLLABLE TYOS;Lo;0;L;;;;;N;;;;; +D224;HANGUL SYLLABLE TYOSS;Lo;0;L;;;;;N;;;;; +D225;HANGUL SYLLABLE TYONG;Lo;0;L;;;;;N;;;;; +D226;HANGUL SYLLABLE TYOJ;Lo;0;L;;;;;N;;;;; +D227;HANGUL SYLLABLE TYOC;Lo;0;L;;;;;N;;;;; +D228;HANGUL SYLLABLE TYOK;Lo;0;L;;;;;N;;;;; +D229;HANGUL SYLLABLE TYOT;Lo;0;L;;;;;N;;;;; +D22A;HANGUL SYLLABLE TYOP;Lo;0;L;;;;;N;;;;; +D22B;HANGUL SYLLABLE TYOH;Lo;0;L;;;;;N;;;;; +D22C;HANGUL SYLLABLE TU;Lo;0;L;;;;;N;;;;; +D22D;HANGUL SYLLABLE TUG;Lo;0;L;;;;;N;;;;; +D22E;HANGUL SYLLABLE TUGG;Lo;0;L;;;;;N;;;;; +D22F;HANGUL SYLLABLE TUGS;Lo;0;L;;;;;N;;;;; +D230;HANGUL SYLLABLE TUN;Lo;0;L;;;;;N;;;;; +D231;HANGUL SYLLABLE TUNI;Lo;0;L;;;;;N;;;;; +D232;HANGUL SYLLABLE TUNH;Lo;0;L;;;;;N;;;;; +D233;HANGUL SYLLABLE TUD;Lo;0;L;;;;;N;;;;; +D234;HANGUL SYLLABLE TUL;Lo;0;L;;;;;N;;;;; +D235;HANGUL SYLLABLE TULG;Lo;0;L;;;;;N;;;;; +D236;HANGUL SYLLABLE TULM;Lo;0;L;;;;;N;;;;; +D237;HANGUL SYLLABLE TULB;Lo;0;L;;;;;N;;;;; +D238;HANGUL SYLLABLE TULS;Lo;0;L;;;;;N;;;;; +D239;HANGUL SYLLABLE TULT;Lo;0;L;;;;;N;;;;; +D23A;HANGUL SYLLABLE TULP;Lo;0;L;;;;;N;;;;; +D23B;HANGUL SYLLABLE TULH;Lo;0;L;;;;;N;;;;; +D23C;HANGUL SYLLABLE TUM;Lo;0;L;;;;;N;;;;; +D23D;HANGUL SYLLABLE TUB;Lo;0;L;;;;;N;;;;; +D23E;HANGUL SYLLABLE TUBS;Lo;0;L;;;;;N;;;;; +D23F;HANGUL SYLLABLE TUS;Lo;0;L;;;;;N;;;;; +D240;HANGUL SYLLABLE TUSS;Lo;0;L;;;;;N;;;;; +D241;HANGUL SYLLABLE TUNG;Lo;0;L;;;;;N;;;;; +D242;HANGUL SYLLABLE TUJ;Lo;0;L;;;;;N;;;;; +D243;HANGUL SYLLABLE TUC;Lo;0;L;;;;;N;;;;; +D244;HANGUL SYLLABLE TUK;Lo;0;L;;;;;N;;;;; +D245;HANGUL SYLLABLE TUT;Lo;0;L;;;;;N;;;;; +D246;HANGUL SYLLABLE TUP;Lo;0;L;;;;;N;;;;; +D247;HANGUL SYLLABLE TUH;Lo;0;L;;;;;N;;;;; +D248;HANGUL SYLLABLE TWEO;Lo;0;L;;;;;N;;;;; +D249;HANGUL SYLLABLE TWEOG;Lo;0;L;;;;;N;;;;; +D24A;HANGUL SYLLABLE TWEOGG;Lo;0;L;;;;;N;;;;; +D24B;HANGUL SYLLABLE TWEOGS;Lo;0;L;;;;;N;;;;; +D24C;HANGUL SYLLABLE TWEON;Lo;0;L;;;;;N;;;;; +D24D;HANGUL SYLLABLE TWEONI;Lo;0;L;;;;;N;;;;; +D24E;HANGUL SYLLABLE TWEONH;Lo;0;L;;;;;N;;;;; +D24F;HANGUL SYLLABLE TWEOD;Lo;0;L;;;;;N;;;;; +D250;HANGUL SYLLABLE TWEOL;Lo;0;L;;;;;N;;;;; +D251;HANGUL SYLLABLE TWEOLG;Lo;0;L;;;;;N;;;;; +D252;HANGUL SYLLABLE TWEOLM;Lo;0;L;;;;;N;;;;; +D253;HANGUL SYLLABLE TWEOLB;Lo;0;L;;;;;N;;;;; +D254;HANGUL SYLLABLE TWEOLS;Lo;0;L;;;;;N;;;;; +D255;HANGUL SYLLABLE TWEOLT;Lo;0;L;;;;;N;;;;; +D256;HANGUL SYLLABLE TWEOLP;Lo;0;L;;;;;N;;;;; +D257;HANGUL SYLLABLE TWEOLH;Lo;0;L;;;;;N;;;;; +D258;HANGUL SYLLABLE TWEOM;Lo;0;L;;;;;N;;;;; +D259;HANGUL SYLLABLE TWEOB;Lo;0;L;;;;;N;;;;; +D25A;HANGUL SYLLABLE TWEOBS;Lo;0;L;;;;;N;;;;; +D25B;HANGUL SYLLABLE TWEOS;Lo;0;L;;;;;N;;;;; +D25C;HANGUL SYLLABLE TWEOSS;Lo;0;L;;;;;N;;;;; +D25D;HANGUL SYLLABLE TWEONG;Lo;0;L;;;;;N;;;;; +D25E;HANGUL SYLLABLE TWEOJ;Lo;0;L;;;;;N;;;;; +D25F;HANGUL SYLLABLE TWEOC;Lo;0;L;;;;;N;;;;; +D260;HANGUL SYLLABLE TWEOK;Lo;0;L;;;;;N;;;;; +D261;HANGUL SYLLABLE TWEOT;Lo;0;L;;;;;N;;;;; +D262;HANGUL SYLLABLE TWEOP;Lo;0;L;;;;;N;;;;; +D263;HANGUL SYLLABLE TWEOH;Lo;0;L;;;;;N;;;;; +D264;HANGUL SYLLABLE TWE;Lo;0;L;;;;;N;;;;; +D265;HANGUL SYLLABLE TWEG;Lo;0;L;;;;;N;;;;; +D266;HANGUL SYLLABLE TWEGG;Lo;0;L;;;;;N;;;;; +D267;HANGUL SYLLABLE TWEGS;Lo;0;L;;;;;N;;;;; +D268;HANGUL SYLLABLE TWEN;Lo;0;L;;;;;N;;;;; +D269;HANGUL SYLLABLE TWENI;Lo;0;L;;;;;N;;;;; +D26A;HANGUL SYLLABLE TWENH;Lo;0;L;;;;;N;;;;; +D26B;HANGUL SYLLABLE TWED;Lo;0;L;;;;;N;;;;; +D26C;HANGUL SYLLABLE TWEL;Lo;0;L;;;;;N;;;;; +D26D;HANGUL SYLLABLE TWELG;Lo;0;L;;;;;N;;;;; +D26E;HANGUL SYLLABLE TWELM;Lo;0;L;;;;;N;;;;; +D26F;HANGUL SYLLABLE TWELB;Lo;0;L;;;;;N;;;;; +D270;HANGUL SYLLABLE TWELS;Lo;0;L;;;;;N;;;;; +D271;HANGUL SYLLABLE TWELT;Lo;0;L;;;;;N;;;;; +D272;HANGUL SYLLABLE TWELP;Lo;0;L;;;;;N;;;;; +D273;HANGUL SYLLABLE TWELH;Lo;0;L;;;;;N;;;;; +D274;HANGUL SYLLABLE TWEM;Lo;0;L;;;;;N;;;;; +D275;HANGUL SYLLABLE TWEB;Lo;0;L;;;;;N;;;;; +D276;HANGUL SYLLABLE TWEBS;Lo;0;L;;;;;N;;;;; +D277;HANGUL SYLLABLE TWES;Lo;0;L;;;;;N;;;;; +D278;HANGUL SYLLABLE TWESS;Lo;0;L;;;;;N;;;;; +D279;HANGUL SYLLABLE TWENG;Lo;0;L;;;;;N;;;;; +D27A;HANGUL SYLLABLE TWEJ;Lo;0;L;;;;;N;;;;; +D27B;HANGUL SYLLABLE TWEC;Lo;0;L;;;;;N;;;;; +D27C;HANGUL SYLLABLE TWEK;Lo;0;L;;;;;N;;;;; +D27D;HANGUL SYLLABLE TWET;Lo;0;L;;;;;N;;;;; +D27E;HANGUL SYLLABLE TWEP;Lo;0;L;;;;;N;;;;; +D27F;HANGUL SYLLABLE TWEH;Lo;0;L;;;;;N;;;;; +D280;HANGUL SYLLABLE TWI;Lo;0;L;;;;;N;;;;; +D281;HANGUL SYLLABLE TWIG;Lo;0;L;;;;;N;;;;; +D282;HANGUL SYLLABLE TWIGG;Lo;0;L;;;;;N;;;;; +D283;HANGUL SYLLABLE TWIGS;Lo;0;L;;;;;N;;;;; +D284;HANGUL SYLLABLE TWIN;Lo;0;L;;;;;N;;;;; +D285;HANGUL SYLLABLE TWINI;Lo;0;L;;;;;N;;;;; +D286;HANGUL SYLLABLE TWINH;Lo;0;L;;;;;N;;;;; +D287;HANGUL SYLLABLE TWID;Lo;0;L;;;;;N;;;;; +D288;HANGUL SYLLABLE TWIL;Lo;0;L;;;;;N;;;;; +D289;HANGUL SYLLABLE TWILG;Lo;0;L;;;;;N;;;;; +D28A;HANGUL SYLLABLE TWILM;Lo;0;L;;;;;N;;;;; +D28B;HANGUL SYLLABLE TWILB;Lo;0;L;;;;;N;;;;; +D28C;HANGUL SYLLABLE TWILS;Lo;0;L;;;;;N;;;;; +D28D;HANGUL SYLLABLE TWILT;Lo;0;L;;;;;N;;;;; +D28E;HANGUL SYLLABLE TWILP;Lo;0;L;;;;;N;;;;; +D28F;HANGUL SYLLABLE TWILH;Lo;0;L;;;;;N;;;;; +D290;HANGUL SYLLABLE TWIM;Lo;0;L;;;;;N;;;;; +D291;HANGUL SYLLABLE TWIB;Lo;0;L;;;;;N;;;;; +D292;HANGUL SYLLABLE TWIBS;Lo;0;L;;;;;N;;;;; +D293;HANGUL SYLLABLE TWIS;Lo;0;L;;;;;N;;;;; +D294;HANGUL SYLLABLE TWISS;Lo;0;L;;;;;N;;;;; +D295;HANGUL SYLLABLE TWING;Lo;0;L;;;;;N;;;;; +D296;HANGUL SYLLABLE TWIJ;Lo;0;L;;;;;N;;;;; +D297;HANGUL SYLLABLE TWIC;Lo;0;L;;;;;N;;;;; +D298;HANGUL SYLLABLE TWIK;Lo;0;L;;;;;N;;;;; +D299;HANGUL SYLLABLE TWIT;Lo;0;L;;;;;N;;;;; +D29A;HANGUL SYLLABLE TWIP;Lo;0;L;;;;;N;;;;; +D29B;HANGUL SYLLABLE TWIH;Lo;0;L;;;;;N;;;;; +D29C;HANGUL SYLLABLE TYU;Lo;0;L;;;;;N;;;;; +D29D;HANGUL SYLLABLE TYUG;Lo;0;L;;;;;N;;;;; +D29E;HANGUL SYLLABLE TYUGG;Lo;0;L;;;;;N;;;;; +D29F;HANGUL SYLLABLE TYUGS;Lo;0;L;;;;;N;;;;; +D2A0;HANGUL SYLLABLE TYUN;Lo;0;L;;;;;N;;;;; +D2A1;HANGUL SYLLABLE TYUNI;Lo;0;L;;;;;N;;;;; +D2A2;HANGUL SYLLABLE TYUNH;Lo;0;L;;;;;N;;;;; +D2A3;HANGUL SYLLABLE TYUD;Lo;0;L;;;;;N;;;;; +D2A4;HANGUL SYLLABLE TYUL;Lo;0;L;;;;;N;;;;; +D2A5;HANGUL SYLLABLE TYULG;Lo;0;L;;;;;N;;;;; +D2A6;HANGUL SYLLABLE TYULM;Lo;0;L;;;;;N;;;;; +D2A7;HANGUL SYLLABLE TYULB;Lo;0;L;;;;;N;;;;; +D2A8;HANGUL SYLLABLE TYULS;Lo;0;L;;;;;N;;;;; +D2A9;HANGUL SYLLABLE TYULT;Lo;0;L;;;;;N;;;;; +D2AA;HANGUL SYLLABLE TYULP;Lo;0;L;;;;;N;;;;; +D2AB;HANGUL SYLLABLE TYULH;Lo;0;L;;;;;N;;;;; +D2AC;HANGUL SYLLABLE TYUM;Lo;0;L;;;;;N;;;;; +D2AD;HANGUL SYLLABLE TYUB;Lo;0;L;;;;;N;;;;; +D2AE;HANGUL SYLLABLE TYUBS;Lo;0;L;;;;;N;;;;; +D2AF;HANGUL SYLLABLE TYUS;Lo;0;L;;;;;N;;;;; +D2B0;HANGUL SYLLABLE TYUSS;Lo;0;L;;;;;N;;;;; +D2B1;HANGUL SYLLABLE TYUNG;Lo;0;L;;;;;N;;;;; +D2B2;HANGUL SYLLABLE TYUJ;Lo;0;L;;;;;N;;;;; +D2B3;HANGUL SYLLABLE TYUC;Lo;0;L;;;;;N;;;;; +D2B4;HANGUL SYLLABLE TYUK;Lo;0;L;;;;;N;;;;; +D2B5;HANGUL SYLLABLE TYUT;Lo;0;L;;;;;N;;;;; +D2B6;HANGUL SYLLABLE TYUP;Lo;0;L;;;;;N;;;;; +D2B7;HANGUL SYLLABLE TYUH;Lo;0;L;;;;;N;;;;; +D2B8;HANGUL SYLLABLE TEU;Lo;0;L;;;;;N;;;;; +D2B9;HANGUL SYLLABLE TEUG;Lo;0;L;;;;;N;;;;; +D2BA;HANGUL SYLLABLE TEUGG;Lo;0;L;;;;;N;;;;; +D2BB;HANGUL SYLLABLE TEUGS;Lo;0;L;;;;;N;;;;; +D2BC;HANGUL SYLLABLE TEUN;Lo;0;L;;;;;N;;;;; +D2BD;HANGUL SYLLABLE TEUNI;Lo;0;L;;;;;N;;;;; +D2BE;HANGUL SYLLABLE TEUNH;Lo;0;L;;;;;N;;;;; +D2BF;HANGUL SYLLABLE TEUD;Lo;0;L;;;;;N;;;;; +D2C0;HANGUL SYLLABLE TEUL;Lo;0;L;;;;;N;;;;; +D2C1;HANGUL SYLLABLE TEULG;Lo;0;L;;;;;N;;;;; +D2C2;HANGUL SYLLABLE TEULM;Lo;0;L;;;;;N;;;;; +D2C3;HANGUL SYLLABLE TEULB;Lo;0;L;;;;;N;;;;; +D2C4;HANGUL SYLLABLE TEULS;Lo;0;L;;;;;N;;;;; +D2C5;HANGUL SYLLABLE TEULT;Lo;0;L;;;;;N;;;;; +D2C6;HANGUL SYLLABLE TEULP;Lo;0;L;;;;;N;;;;; +D2C7;HANGUL SYLLABLE TEULH;Lo;0;L;;;;;N;;;;; +D2C8;HANGUL SYLLABLE TEUM;Lo;0;L;;;;;N;;;;; +D2C9;HANGUL SYLLABLE TEUB;Lo;0;L;;;;;N;;;;; +D2CA;HANGUL SYLLABLE TEUBS;Lo;0;L;;;;;N;;;;; +D2CB;HANGUL SYLLABLE TEUS;Lo;0;L;;;;;N;;;;; +D2CC;HANGUL SYLLABLE TEUSS;Lo;0;L;;;;;N;;;;; +D2CD;HANGUL SYLLABLE TEUNG;Lo;0;L;;;;;N;;;;; +D2CE;HANGUL SYLLABLE TEUJ;Lo;0;L;;;;;N;;;;; +D2CF;HANGUL SYLLABLE TEUC;Lo;0;L;;;;;N;;;;; +D2D0;HANGUL SYLLABLE TEUK;Lo;0;L;;;;;N;;;;; +D2D1;HANGUL SYLLABLE TEUT;Lo;0;L;;;;;N;;;;; +D2D2;HANGUL SYLLABLE TEUP;Lo;0;L;;;;;N;;;;; +D2D3;HANGUL SYLLABLE TEUH;Lo;0;L;;;;;N;;;;; +D2D4;HANGUL SYLLABLE TYI;Lo;0;L;;;;;N;;;;; +D2D5;HANGUL SYLLABLE TYIG;Lo;0;L;;;;;N;;;;; +D2D6;HANGUL SYLLABLE TYIGG;Lo;0;L;;;;;N;;;;; +D2D7;HANGUL SYLLABLE TYIGS;Lo;0;L;;;;;N;;;;; +D2D8;HANGUL SYLLABLE TYIN;Lo;0;L;;;;;N;;;;; +D2D9;HANGUL SYLLABLE TYINI;Lo;0;L;;;;;N;;;;; +D2DA;HANGUL SYLLABLE TYINH;Lo;0;L;;;;;N;;;;; +D2DB;HANGUL SYLLABLE TYID;Lo;0;L;;;;;N;;;;; +D2DC;HANGUL SYLLABLE TYIL;Lo;0;L;;;;;N;;;;; +D2DD;HANGUL SYLLABLE TYILG;Lo;0;L;;;;;N;;;;; +D2DE;HANGUL SYLLABLE TYILM;Lo;0;L;;;;;N;;;;; +D2DF;HANGUL SYLLABLE TYILB;Lo;0;L;;;;;N;;;;; +D2E0;HANGUL SYLLABLE TYILS;Lo;0;L;;;;;N;;;;; +D2E1;HANGUL SYLLABLE TYILT;Lo;0;L;;;;;N;;;;; +D2E2;HANGUL SYLLABLE TYILP;Lo;0;L;;;;;N;;;;; +D2E3;HANGUL SYLLABLE TYILH;Lo;0;L;;;;;N;;;;; +D2E4;HANGUL SYLLABLE TYIM;Lo;0;L;;;;;N;;;;; +D2E5;HANGUL SYLLABLE TYIB;Lo;0;L;;;;;N;;;;; +D2E6;HANGUL SYLLABLE TYIBS;Lo;0;L;;;;;N;;;;; +D2E7;HANGUL SYLLABLE TYIS;Lo;0;L;;;;;N;;;;; +D2E8;HANGUL SYLLABLE TYISS;Lo;0;L;;;;;N;;;;; +D2E9;HANGUL SYLLABLE TYING;Lo;0;L;;;;;N;;;;; +D2EA;HANGUL SYLLABLE TYIJ;Lo;0;L;;;;;N;;;;; +D2EB;HANGUL SYLLABLE TYIC;Lo;0;L;;;;;N;;;;; +D2EC;HANGUL SYLLABLE TYIK;Lo;0;L;;;;;N;;;;; +D2ED;HANGUL SYLLABLE TYIT;Lo;0;L;;;;;N;;;;; +D2EE;HANGUL SYLLABLE TYIP;Lo;0;L;;;;;N;;;;; +D2EF;HANGUL SYLLABLE TYIH;Lo;0;L;;;;;N;;;;; +D2F0;HANGUL SYLLABLE TI;Lo;0;L;;;;;N;;;;; +D2F1;HANGUL SYLLABLE TIG;Lo;0;L;;;;;N;;;;; +D2F2;HANGUL SYLLABLE TIGG;Lo;0;L;;;;;N;;;;; +D2F3;HANGUL SYLLABLE TIGS;Lo;0;L;;;;;N;;;;; +D2F4;HANGUL SYLLABLE TIN;Lo;0;L;;;;;N;;;;; +D2F5;HANGUL SYLLABLE TINI;Lo;0;L;;;;;N;;;;; +D2F6;HANGUL SYLLABLE TINH;Lo;0;L;;;;;N;;;;; +D2F7;HANGUL SYLLABLE TID;Lo;0;L;;;;;N;;;;; +D2F8;HANGUL SYLLABLE TIL;Lo;0;L;;;;;N;;;;; +D2F9;HANGUL SYLLABLE TILG;Lo;0;L;;;;;N;;;;; +D2FA;HANGUL SYLLABLE TILM;Lo;0;L;;;;;N;;;;; +D2FB;HANGUL SYLLABLE TILB;Lo;0;L;;;;;N;;;;; +D2FC;HANGUL SYLLABLE TILS;Lo;0;L;;;;;N;;;;; +D2FD;HANGUL SYLLABLE TILT;Lo;0;L;;;;;N;;;;; +D2FE;HANGUL SYLLABLE TILP;Lo;0;L;;;;;N;;;;; +D2FF;HANGUL SYLLABLE TILH;Lo;0;L;;;;;N;;;;; +D300;HANGUL SYLLABLE TIM;Lo;0;L;;;;;N;;;;; +D301;HANGUL SYLLABLE TIB;Lo;0;L;;;;;N;;;;; +D302;HANGUL SYLLABLE TIBS;Lo;0;L;;;;;N;;;;; +D303;HANGUL SYLLABLE TIS;Lo;0;L;;;;;N;;;;; +D304;HANGUL SYLLABLE TISS;Lo;0;L;;;;;N;;;;; +D305;HANGUL SYLLABLE TING;Lo;0;L;;;;;N;;;;; +D306;HANGUL SYLLABLE TIJ;Lo;0;L;;;;;N;;;;; +D307;HANGUL SYLLABLE TIC;Lo;0;L;;;;;N;;;;; +D308;HANGUL SYLLABLE TIK;Lo;0;L;;;;;N;;;;; +D309;HANGUL SYLLABLE TIT;Lo;0;L;;;;;N;;;;; +D30A;HANGUL SYLLABLE TIP;Lo;0;L;;;;;N;;;;; +D30B;HANGUL SYLLABLE TIH;Lo;0;L;;;;;N;;;;; +D30C;HANGUL SYLLABLE PA;Lo;0;L;;;;;N;;;;; +D30D;HANGUL SYLLABLE PAG;Lo;0;L;;;;;N;;;;; +D30E;HANGUL SYLLABLE PAGG;Lo;0;L;;;;;N;;;;; +D30F;HANGUL SYLLABLE PAGS;Lo;0;L;;;;;N;;;;; +D310;HANGUL SYLLABLE PAN;Lo;0;L;;;;;N;;;;; +D311;HANGUL SYLLABLE PANI;Lo;0;L;;;;;N;;;;; +D312;HANGUL SYLLABLE PANH;Lo;0;L;;;;;N;;;;; +D313;HANGUL SYLLABLE PAD;Lo;0;L;;;;;N;;;;; +D314;HANGUL SYLLABLE PAL;Lo;0;L;;;;;N;;;;; +D315;HANGUL SYLLABLE PALG;Lo;0;L;;;;;N;;;;; +D316;HANGUL SYLLABLE PALM;Lo;0;L;;;;;N;;;;; +D317;HANGUL SYLLABLE PALB;Lo;0;L;;;;;N;;;;; +D318;HANGUL SYLLABLE PALS;Lo;0;L;;;;;N;;;;; +D319;HANGUL SYLLABLE PALT;Lo;0;L;;;;;N;;;;; +D31A;HANGUL SYLLABLE PALP;Lo;0;L;;;;;N;;;;; +D31B;HANGUL SYLLABLE PALH;Lo;0;L;;;;;N;;;;; +D31C;HANGUL SYLLABLE PAM;Lo;0;L;;;;;N;;;;; +D31D;HANGUL SYLLABLE PAB;Lo;0;L;;;;;N;;;;; +D31E;HANGUL SYLLABLE PABS;Lo;0;L;;;;;N;;;;; +D31F;HANGUL SYLLABLE PAS;Lo;0;L;;;;;N;;;;; +D320;HANGUL SYLLABLE PASS;Lo;0;L;;;;;N;;;;; +D321;HANGUL SYLLABLE PANG;Lo;0;L;;;;;N;;;;; +D322;HANGUL SYLLABLE PAJ;Lo;0;L;;;;;N;;;;; +D323;HANGUL SYLLABLE PAC;Lo;0;L;;;;;N;;;;; +D324;HANGUL SYLLABLE PAK;Lo;0;L;;;;;N;;;;; +D325;HANGUL SYLLABLE PAT;Lo;0;L;;;;;N;;;;; +D326;HANGUL SYLLABLE PAP;Lo;0;L;;;;;N;;;;; +D327;HANGUL SYLLABLE PAH;Lo;0;L;;;;;N;;;;; +D328;HANGUL SYLLABLE PAE;Lo;0;L;;;;;N;;;;; +D329;HANGUL SYLLABLE PAEG;Lo;0;L;;;;;N;;;;; +D32A;HANGUL SYLLABLE PAEGG;Lo;0;L;;;;;N;;;;; +D32B;HANGUL SYLLABLE PAEGS;Lo;0;L;;;;;N;;;;; +D32C;HANGUL SYLLABLE PAEN;Lo;0;L;;;;;N;;;;; +D32D;HANGUL SYLLABLE PAENI;Lo;0;L;;;;;N;;;;; +D32E;HANGUL SYLLABLE PAENH;Lo;0;L;;;;;N;;;;; +D32F;HANGUL SYLLABLE PAED;Lo;0;L;;;;;N;;;;; +D330;HANGUL SYLLABLE PAEL;Lo;0;L;;;;;N;;;;; +D331;HANGUL SYLLABLE PAELG;Lo;0;L;;;;;N;;;;; +D332;HANGUL SYLLABLE PAELM;Lo;0;L;;;;;N;;;;; +D333;HANGUL SYLLABLE PAELB;Lo;0;L;;;;;N;;;;; +D334;HANGUL SYLLABLE PAELS;Lo;0;L;;;;;N;;;;; +D335;HANGUL SYLLABLE PAELT;Lo;0;L;;;;;N;;;;; +D336;HANGUL SYLLABLE PAELP;Lo;0;L;;;;;N;;;;; +D337;HANGUL SYLLABLE PAELH;Lo;0;L;;;;;N;;;;; +D338;HANGUL SYLLABLE PAEM;Lo;0;L;;;;;N;;;;; +D339;HANGUL SYLLABLE PAEB;Lo;0;L;;;;;N;;;;; +D33A;HANGUL SYLLABLE PAEBS;Lo;0;L;;;;;N;;;;; +D33B;HANGUL SYLLABLE PAES;Lo;0;L;;;;;N;;;;; +D33C;HANGUL SYLLABLE PAESS;Lo;0;L;;;;;N;;;;; +D33D;HANGUL SYLLABLE PAENG;Lo;0;L;;;;;N;;;;; +D33E;HANGUL SYLLABLE PAEJ;Lo;0;L;;;;;N;;;;; +D33F;HANGUL SYLLABLE PAEC;Lo;0;L;;;;;N;;;;; +D340;HANGUL SYLLABLE PAEK;Lo;0;L;;;;;N;;;;; +D341;HANGUL SYLLABLE PAET;Lo;0;L;;;;;N;;;;; +D342;HANGUL SYLLABLE PAEP;Lo;0;L;;;;;N;;;;; +D343;HANGUL SYLLABLE PAEH;Lo;0;L;;;;;N;;;;; +D344;HANGUL SYLLABLE PYA;Lo;0;L;;;;;N;;;;; +D345;HANGUL SYLLABLE PYAG;Lo;0;L;;;;;N;;;;; +D346;HANGUL SYLLABLE PYAGG;Lo;0;L;;;;;N;;;;; +D347;HANGUL SYLLABLE PYAGS;Lo;0;L;;;;;N;;;;; +D348;HANGUL SYLLABLE PYAN;Lo;0;L;;;;;N;;;;; +D349;HANGUL SYLLABLE PYANI;Lo;0;L;;;;;N;;;;; +D34A;HANGUL SYLLABLE PYANH;Lo;0;L;;;;;N;;;;; +D34B;HANGUL SYLLABLE PYAD;Lo;0;L;;;;;N;;;;; +D34C;HANGUL SYLLABLE PYAL;Lo;0;L;;;;;N;;;;; +D34D;HANGUL SYLLABLE PYALG;Lo;0;L;;;;;N;;;;; +D34E;HANGUL SYLLABLE PYALM;Lo;0;L;;;;;N;;;;; +D34F;HANGUL SYLLABLE PYALB;Lo;0;L;;;;;N;;;;; +D350;HANGUL SYLLABLE PYALS;Lo;0;L;;;;;N;;;;; +D351;HANGUL SYLLABLE PYALT;Lo;0;L;;;;;N;;;;; +D352;HANGUL SYLLABLE PYALP;Lo;0;L;;;;;N;;;;; +D353;HANGUL SYLLABLE PYALH;Lo;0;L;;;;;N;;;;; +D354;HANGUL SYLLABLE PYAM;Lo;0;L;;;;;N;;;;; +D355;HANGUL SYLLABLE PYAB;Lo;0;L;;;;;N;;;;; +D356;HANGUL SYLLABLE PYABS;Lo;0;L;;;;;N;;;;; +D357;HANGUL SYLLABLE PYAS;Lo;0;L;;;;;N;;;;; +D358;HANGUL SYLLABLE PYASS;Lo;0;L;;;;;N;;;;; +D359;HANGUL SYLLABLE PYANG;Lo;0;L;;;;;N;;;;; +D35A;HANGUL SYLLABLE PYAJ;Lo;0;L;;;;;N;;;;; +D35B;HANGUL SYLLABLE PYAC;Lo;0;L;;;;;N;;;;; +D35C;HANGUL SYLLABLE PYAK;Lo;0;L;;;;;N;;;;; +D35D;HANGUL SYLLABLE PYAT;Lo;0;L;;;;;N;;;;; +D35E;HANGUL SYLLABLE PYAP;Lo;0;L;;;;;N;;;;; +D35F;HANGUL SYLLABLE PYAH;Lo;0;L;;;;;N;;;;; +D360;HANGUL SYLLABLE PYAE;Lo;0;L;;;;;N;;;;; +D361;HANGUL SYLLABLE PYAEG;Lo;0;L;;;;;N;;;;; +D362;HANGUL SYLLABLE PYAEGG;Lo;0;L;;;;;N;;;;; +D363;HANGUL SYLLABLE PYAEGS;Lo;0;L;;;;;N;;;;; +D364;HANGUL SYLLABLE PYAEN;Lo;0;L;;;;;N;;;;; +D365;HANGUL SYLLABLE PYAENI;Lo;0;L;;;;;N;;;;; +D366;HANGUL SYLLABLE PYAENH;Lo;0;L;;;;;N;;;;; +D367;HANGUL SYLLABLE PYAED;Lo;0;L;;;;;N;;;;; +D368;HANGUL SYLLABLE PYAEL;Lo;0;L;;;;;N;;;;; +D369;HANGUL SYLLABLE PYAELG;Lo;0;L;;;;;N;;;;; +D36A;HANGUL SYLLABLE PYAELM;Lo;0;L;;;;;N;;;;; +D36B;HANGUL SYLLABLE PYAELB;Lo;0;L;;;;;N;;;;; +D36C;HANGUL SYLLABLE PYAELS;Lo;0;L;;;;;N;;;;; +D36D;HANGUL SYLLABLE PYAELT;Lo;0;L;;;;;N;;;;; +D36E;HANGUL SYLLABLE PYAELP;Lo;0;L;;;;;N;;;;; +D36F;HANGUL SYLLABLE PYAELH;Lo;0;L;;;;;N;;;;; +D370;HANGUL SYLLABLE PYAEM;Lo;0;L;;;;;N;;;;; +D371;HANGUL SYLLABLE PYAEB;Lo;0;L;;;;;N;;;;; +D372;HANGUL SYLLABLE PYAEBS;Lo;0;L;;;;;N;;;;; +D373;HANGUL SYLLABLE PYAES;Lo;0;L;;;;;N;;;;; +D374;HANGUL SYLLABLE PYAESS;Lo;0;L;;;;;N;;;;; +D375;HANGUL SYLLABLE PYAENG;Lo;0;L;;;;;N;;;;; +D376;HANGUL SYLLABLE PYAEJ;Lo;0;L;;;;;N;;;;; +D377;HANGUL SYLLABLE PYAEC;Lo;0;L;;;;;N;;;;; +D378;HANGUL SYLLABLE PYAEK;Lo;0;L;;;;;N;;;;; +D379;HANGUL SYLLABLE PYAET;Lo;0;L;;;;;N;;;;; +D37A;HANGUL SYLLABLE PYAEP;Lo;0;L;;;;;N;;;;; +D37B;HANGUL SYLLABLE PYAEH;Lo;0;L;;;;;N;;;;; +D37C;HANGUL SYLLABLE PEO;Lo;0;L;;;;;N;;;;; +D37D;HANGUL SYLLABLE PEOG;Lo;0;L;;;;;N;;;;; +D37E;HANGUL SYLLABLE PEOGG;Lo;0;L;;;;;N;;;;; +D37F;HANGUL SYLLABLE PEOGS;Lo;0;L;;;;;N;;;;; +D380;HANGUL SYLLABLE PEON;Lo;0;L;;;;;N;;;;; +D381;HANGUL SYLLABLE PEONI;Lo;0;L;;;;;N;;;;; +D382;HANGUL SYLLABLE PEONH;Lo;0;L;;;;;N;;;;; +D383;HANGUL SYLLABLE PEOD;Lo;0;L;;;;;N;;;;; +D384;HANGUL SYLLABLE PEOL;Lo;0;L;;;;;N;;;;; +D385;HANGUL SYLLABLE PEOLG;Lo;0;L;;;;;N;;;;; +D386;HANGUL SYLLABLE PEOLM;Lo;0;L;;;;;N;;;;; +D387;HANGUL SYLLABLE PEOLB;Lo;0;L;;;;;N;;;;; +D388;HANGUL SYLLABLE PEOLS;Lo;0;L;;;;;N;;;;; +D389;HANGUL SYLLABLE PEOLT;Lo;0;L;;;;;N;;;;; +D38A;HANGUL SYLLABLE PEOLP;Lo;0;L;;;;;N;;;;; +D38B;HANGUL SYLLABLE PEOLH;Lo;0;L;;;;;N;;;;; +D38C;HANGUL SYLLABLE PEOM;Lo;0;L;;;;;N;;;;; +D38D;HANGUL SYLLABLE PEOB;Lo;0;L;;;;;N;;;;; +D38E;HANGUL SYLLABLE PEOBS;Lo;0;L;;;;;N;;;;; +D38F;HANGUL SYLLABLE PEOS;Lo;0;L;;;;;N;;;;; +D390;HANGUL SYLLABLE PEOSS;Lo;0;L;;;;;N;;;;; +D391;HANGUL SYLLABLE PEONG;Lo;0;L;;;;;N;;;;; +D392;HANGUL SYLLABLE PEOJ;Lo;0;L;;;;;N;;;;; +D393;HANGUL SYLLABLE PEOC;Lo;0;L;;;;;N;;;;; +D394;HANGUL SYLLABLE PEOK;Lo;0;L;;;;;N;;;;; +D395;HANGUL SYLLABLE PEOT;Lo;0;L;;;;;N;;;;; +D396;HANGUL SYLLABLE PEOP;Lo;0;L;;;;;N;;;;; +D397;HANGUL SYLLABLE PEOH;Lo;0;L;;;;;N;;;;; +D398;HANGUL SYLLABLE PE;Lo;0;L;;;;;N;;;;; +D399;HANGUL SYLLABLE PEG;Lo;0;L;;;;;N;;;;; +D39A;HANGUL SYLLABLE PEGG;Lo;0;L;;;;;N;;;;; +D39B;HANGUL SYLLABLE PEGS;Lo;0;L;;;;;N;;;;; +D39C;HANGUL SYLLABLE PEN;Lo;0;L;;;;;N;;;;; +D39D;HANGUL SYLLABLE PENI;Lo;0;L;;;;;N;;;;; +D39E;HANGUL SYLLABLE PENH;Lo;0;L;;;;;N;;;;; +D39F;HANGUL SYLLABLE PED;Lo;0;L;;;;;N;;;;; +D3A0;HANGUL SYLLABLE PEL;Lo;0;L;;;;;N;;;;; +D3A1;HANGUL SYLLABLE PELG;Lo;0;L;;;;;N;;;;; +D3A2;HANGUL SYLLABLE PELM;Lo;0;L;;;;;N;;;;; +D3A3;HANGUL SYLLABLE PELB;Lo;0;L;;;;;N;;;;; +D3A4;HANGUL SYLLABLE PELS;Lo;0;L;;;;;N;;;;; +D3A5;HANGUL SYLLABLE PELT;Lo;0;L;;;;;N;;;;; +D3A6;HANGUL SYLLABLE PELP;Lo;0;L;;;;;N;;;;; +D3A7;HANGUL SYLLABLE PELH;Lo;0;L;;;;;N;;;;; +D3A8;HANGUL SYLLABLE PEM;Lo;0;L;;;;;N;;;;; +D3A9;HANGUL SYLLABLE PEB;Lo;0;L;;;;;N;;;;; +D3AA;HANGUL SYLLABLE PEBS;Lo;0;L;;;;;N;;;;; +D3AB;HANGUL SYLLABLE PES;Lo;0;L;;;;;N;;;;; +D3AC;HANGUL SYLLABLE PESS;Lo;0;L;;;;;N;;;;; +D3AD;HANGUL SYLLABLE PENG;Lo;0;L;;;;;N;;;;; +D3AE;HANGUL SYLLABLE PEJ;Lo;0;L;;;;;N;;;;; +D3AF;HANGUL SYLLABLE PEC;Lo;0;L;;;;;N;;;;; +D3B0;HANGUL SYLLABLE PEK;Lo;0;L;;;;;N;;;;; +D3B1;HANGUL SYLLABLE PET;Lo;0;L;;;;;N;;;;; +D3B2;HANGUL SYLLABLE PEP;Lo;0;L;;;;;N;;;;; +D3B3;HANGUL SYLLABLE PEH;Lo;0;L;;;;;N;;;;; +D3B4;HANGUL SYLLABLE PYEO;Lo;0;L;;;;;N;;;;; +D3B5;HANGUL SYLLABLE PYEOG;Lo;0;L;;;;;N;;;;; +D3B6;HANGUL SYLLABLE PYEOGG;Lo;0;L;;;;;N;;;;; +D3B7;HANGUL SYLLABLE PYEOGS;Lo;0;L;;;;;N;;;;; +D3B8;HANGUL SYLLABLE PYEON;Lo;0;L;;;;;N;;;;; +D3B9;HANGUL SYLLABLE PYEONI;Lo;0;L;;;;;N;;;;; +D3BA;HANGUL SYLLABLE PYEONH;Lo;0;L;;;;;N;;;;; +D3BB;HANGUL SYLLABLE PYEOD;Lo;0;L;;;;;N;;;;; +D3BC;HANGUL SYLLABLE PYEOL;Lo;0;L;;;;;N;;;;; +D3BD;HANGUL SYLLABLE PYEOLG;Lo;0;L;;;;;N;;;;; +D3BE;HANGUL SYLLABLE PYEOLM;Lo;0;L;;;;;N;;;;; +D3BF;HANGUL SYLLABLE PYEOLB;Lo;0;L;;;;;N;;;;; +D3C0;HANGUL SYLLABLE PYEOLS;Lo;0;L;;;;;N;;;;; +D3C1;HANGUL SYLLABLE PYEOLT;Lo;0;L;;;;;N;;;;; +D3C2;HANGUL SYLLABLE PYEOLP;Lo;0;L;;;;;N;;;;; +D3C3;HANGUL SYLLABLE PYEOLH;Lo;0;L;;;;;N;;;;; +D3C4;HANGUL SYLLABLE PYEOM;Lo;0;L;;;;;N;;;;; +D3C5;HANGUL SYLLABLE PYEOB;Lo;0;L;;;;;N;;;;; +D3C6;HANGUL SYLLABLE PYEOBS;Lo;0;L;;;;;N;;;;; +D3C7;HANGUL SYLLABLE PYEOS;Lo;0;L;;;;;N;;;;; +D3C8;HANGUL SYLLABLE PYEOSS;Lo;0;L;;;;;N;;;;; +D3C9;HANGUL SYLLABLE PYEONG;Lo;0;L;;;;;N;;;;; +D3CA;HANGUL SYLLABLE PYEOJ;Lo;0;L;;;;;N;;;;; +D3CB;HANGUL SYLLABLE PYEOC;Lo;0;L;;;;;N;;;;; +D3CC;HANGUL SYLLABLE PYEOK;Lo;0;L;;;;;N;;;;; +D3CD;HANGUL SYLLABLE PYEOT;Lo;0;L;;;;;N;;;;; +D3CE;HANGUL SYLLABLE PYEOP;Lo;0;L;;;;;N;;;;; +D3CF;HANGUL SYLLABLE PYEOH;Lo;0;L;;;;;N;;;;; +D3D0;HANGUL SYLLABLE PYE;Lo;0;L;;;;;N;;;;; +D3D1;HANGUL SYLLABLE PYEG;Lo;0;L;;;;;N;;;;; +D3D2;HANGUL SYLLABLE PYEGG;Lo;0;L;;;;;N;;;;; +D3D3;HANGUL SYLLABLE PYEGS;Lo;0;L;;;;;N;;;;; +D3D4;HANGUL SYLLABLE PYEN;Lo;0;L;;;;;N;;;;; +D3D5;HANGUL SYLLABLE PYENI;Lo;0;L;;;;;N;;;;; +D3D6;HANGUL SYLLABLE PYENH;Lo;0;L;;;;;N;;;;; +D3D7;HANGUL SYLLABLE PYED;Lo;0;L;;;;;N;;;;; +D3D8;HANGUL SYLLABLE PYEL;Lo;0;L;;;;;N;;;;; +D3D9;HANGUL SYLLABLE PYELG;Lo;0;L;;;;;N;;;;; +D3DA;HANGUL SYLLABLE PYELM;Lo;0;L;;;;;N;;;;; +D3DB;HANGUL SYLLABLE PYELB;Lo;0;L;;;;;N;;;;; +D3DC;HANGUL SYLLABLE PYELS;Lo;0;L;;;;;N;;;;; +D3DD;HANGUL SYLLABLE PYELT;Lo;0;L;;;;;N;;;;; +D3DE;HANGUL SYLLABLE PYELP;Lo;0;L;;;;;N;;;;; +D3DF;HANGUL SYLLABLE PYELH;Lo;0;L;;;;;N;;;;; +D3E0;HANGUL SYLLABLE PYEM;Lo;0;L;;;;;N;;;;; +D3E1;HANGUL SYLLABLE PYEB;Lo;0;L;;;;;N;;;;; +D3E2;HANGUL SYLLABLE PYEBS;Lo;0;L;;;;;N;;;;; +D3E3;HANGUL SYLLABLE PYES;Lo;0;L;;;;;N;;;;; +D3E4;HANGUL SYLLABLE PYESS;Lo;0;L;;;;;N;;;;; +D3E5;HANGUL SYLLABLE PYENG;Lo;0;L;;;;;N;;;;; +D3E6;HANGUL SYLLABLE PYEJ;Lo;0;L;;;;;N;;;;; +D3E7;HANGUL SYLLABLE PYEC;Lo;0;L;;;;;N;;;;; +D3E8;HANGUL SYLLABLE PYEK;Lo;0;L;;;;;N;;;;; +D3E9;HANGUL SYLLABLE PYET;Lo;0;L;;;;;N;;;;; +D3EA;HANGUL SYLLABLE PYEP;Lo;0;L;;;;;N;;;;; +D3EB;HANGUL SYLLABLE PYEH;Lo;0;L;;;;;N;;;;; +D3EC;HANGUL SYLLABLE PO;Lo;0;L;;;;;N;;;;; +D3ED;HANGUL SYLLABLE POG;Lo;0;L;;;;;N;;;;; +D3EE;HANGUL SYLLABLE POGG;Lo;0;L;;;;;N;;;;; +D3EF;HANGUL SYLLABLE POGS;Lo;0;L;;;;;N;;;;; +D3F0;HANGUL SYLLABLE PON;Lo;0;L;;;;;N;;;;; +D3F1;HANGUL SYLLABLE PONI;Lo;0;L;;;;;N;;;;; +D3F2;HANGUL SYLLABLE PONH;Lo;0;L;;;;;N;;;;; +D3F3;HANGUL SYLLABLE POD;Lo;0;L;;;;;N;;;;; +D3F4;HANGUL SYLLABLE POL;Lo;0;L;;;;;N;;;;; +D3F5;HANGUL SYLLABLE POLG;Lo;0;L;;;;;N;;;;; +D3F6;HANGUL SYLLABLE POLM;Lo;0;L;;;;;N;;;;; +D3F7;HANGUL SYLLABLE POLB;Lo;0;L;;;;;N;;;;; +D3F8;HANGUL SYLLABLE POLS;Lo;0;L;;;;;N;;;;; +D3F9;HANGUL SYLLABLE POLT;Lo;0;L;;;;;N;;;;; +D3FA;HANGUL SYLLABLE POLP;Lo;0;L;;;;;N;;;;; +D3FB;HANGUL SYLLABLE POLH;Lo;0;L;;;;;N;;;;; +D3FC;HANGUL SYLLABLE POM;Lo;0;L;;;;;N;;;;; +D3FD;HANGUL SYLLABLE POB;Lo;0;L;;;;;N;;;;; +D3FE;HANGUL SYLLABLE POBS;Lo;0;L;;;;;N;;;;; +D3FF;HANGUL SYLLABLE POS;Lo;0;L;;;;;N;;;;; +D400;HANGUL SYLLABLE POSS;Lo;0;L;;;;;N;;;;; +D401;HANGUL SYLLABLE PONG;Lo;0;L;;;;;N;;;;; +D402;HANGUL SYLLABLE POJ;Lo;0;L;;;;;N;;;;; +D403;HANGUL SYLLABLE POC;Lo;0;L;;;;;N;;;;; +D404;HANGUL SYLLABLE POK;Lo;0;L;;;;;N;;;;; +D405;HANGUL SYLLABLE POT;Lo;0;L;;;;;N;;;;; +D406;HANGUL SYLLABLE POP;Lo;0;L;;;;;N;;;;; +D407;HANGUL SYLLABLE POH;Lo;0;L;;;;;N;;;;; +D408;HANGUL SYLLABLE PWA;Lo;0;L;;;;;N;;;;; +D409;HANGUL SYLLABLE PWAG;Lo;0;L;;;;;N;;;;; +D40A;HANGUL SYLLABLE PWAGG;Lo;0;L;;;;;N;;;;; +D40B;HANGUL SYLLABLE PWAGS;Lo;0;L;;;;;N;;;;; +D40C;HANGUL SYLLABLE PWAN;Lo;0;L;;;;;N;;;;; +D40D;HANGUL SYLLABLE PWANI;Lo;0;L;;;;;N;;;;; +D40E;HANGUL SYLLABLE PWANH;Lo;0;L;;;;;N;;;;; +D40F;HANGUL SYLLABLE PWAD;Lo;0;L;;;;;N;;;;; +D410;HANGUL SYLLABLE PWAL;Lo;0;L;;;;;N;;;;; +D411;HANGUL SYLLABLE PWALG;Lo;0;L;;;;;N;;;;; +D412;HANGUL SYLLABLE PWALM;Lo;0;L;;;;;N;;;;; +D413;HANGUL SYLLABLE PWALB;Lo;0;L;;;;;N;;;;; +D414;HANGUL SYLLABLE PWALS;Lo;0;L;;;;;N;;;;; +D415;HANGUL SYLLABLE PWALT;Lo;0;L;;;;;N;;;;; +D416;HANGUL SYLLABLE PWALP;Lo;0;L;;;;;N;;;;; +D417;HANGUL SYLLABLE PWALH;Lo;0;L;;;;;N;;;;; +D418;HANGUL SYLLABLE PWAM;Lo;0;L;;;;;N;;;;; +D419;HANGUL SYLLABLE PWAB;Lo;0;L;;;;;N;;;;; +D41A;HANGUL SYLLABLE PWABS;Lo;0;L;;;;;N;;;;; +D41B;HANGUL SYLLABLE PWAS;Lo;0;L;;;;;N;;;;; +D41C;HANGUL SYLLABLE PWASS;Lo;0;L;;;;;N;;;;; +D41D;HANGUL SYLLABLE PWANG;Lo;0;L;;;;;N;;;;; +D41E;HANGUL SYLLABLE PWAJ;Lo;0;L;;;;;N;;;;; +D41F;HANGUL SYLLABLE PWAC;Lo;0;L;;;;;N;;;;; +D420;HANGUL SYLLABLE PWAK;Lo;0;L;;;;;N;;;;; +D421;HANGUL SYLLABLE PWAT;Lo;0;L;;;;;N;;;;; +D422;HANGUL SYLLABLE PWAP;Lo;0;L;;;;;N;;;;; +D423;HANGUL SYLLABLE PWAH;Lo;0;L;;;;;N;;;;; +D424;HANGUL SYLLABLE PWAE;Lo;0;L;;;;;N;;;;; +D425;HANGUL SYLLABLE PWAEG;Lo;0;L;;;;;N;;;;; +D426;HANGUL SYLLABLE PWAEGG;Lo;0;L;;;;;N;;;;; +D427;HANGUL SYLLABLE PWAEGS;Lo;0;L;;;;;N;;;;; +D428;HANGUL SYLLABLE PWAEN;Lo;0;L;;;;;N;;;;; +D429;HANGUL SYLLABLE PWAENI;Lo;0;L;;;;;N;;;;; +D42A;HANGUL SYLLABLE PWAENH;Lo;0;L;;;;;N;;;;; +D42B;HANGUL SYLLABLE PWAED;Lo;0;L;;;;;N;;;;; +D42C;HANGUL SYLLABLE PWAEL;Lo;0;L;;;;;N;;;;; +D42D;HANGUL SYLLABLE PWAELG;Lo;0;L;;;;;N;;;;; +D42E;HANGUL SYLLABLE PWAELM;Lo;0;L;;;;;N;;;;; +D42F;HANGUL SYLLABLE PWAELB;Lo;0;L;;;;;N;;;;; +D430;HANGUL SYLLABLE PWAELS;Lo;0;L;;;;;N;;;;; +D431;HANGUL SYLLABLE PWAELT;Lo;0;L;;;;;N;;;;; +D432;HANGUL SYLLABLE PWAELP;Lo;0;L;;;;;N;;;;; +D433;HANGUL SYLLABLE PWAELH;Lo;0;L;;;;;N;;;;; +D434;HANGUL SYLLABLE PWAEM;Lo;0;L;;;;;N;;;;; +D435;HANGUL SYLLABLE PWAEB;Lo;0;L;;;;;N;;;;; +D436;HANGUL SYLLABLE PWAEBS;Lo;0;L;;;;;N;;;;; +D437;HANGUL SYLLABLE PWAES;Lo;0;L;;;;;N;;;;; +D438;HANGUL SYLLABLE PWAESS;Lo;0;L;;;;;N;;;;; +D439;HANGUL SYLLABLE PWAENG;Lo;0;L;;;;;N;;;;; +D43A;HANGUL SYLLABLE PWAEJ;Lo;0;L;;;;;N;;;;; +D43B;HANGUL SYLLABLE PWAEC;Lo;0;L;;;;;N;;;;; +D43C;HANGUL SYLLABLE PWAEK;Lo;0;L;;;;;N;;;;; +D43D;HANGUL SYLLABLE PWAET;Lo;0;L;;;;;N;;;;; +D43E;HANGUL SYLLABLE PWAEP;Lo;0;L;;;;;N;;;;; +D43F;HANGUL SYLLABLE PWAEH;Lo;0;L;;;;;N;;;;; +D440;HANGUL SYLLABLE POE;Lo;0;L;;;;;N;;;;; +D441;HANGUL SYLLABLE POEG;Lo;0;L;;;;;N;;;;; +D442;HANGUL SYLLABLE POEGG;Lo;0;L;;;;;N;;;;; +D443;HANGUL SYLLABLE POEGS;Lo;0;L;;;;;N;;;;; +D444;HANGUL SYLLABLE POEN;Lo;0;L;;;;;N;;;;; +D445;HANGUL SYLLABLE POENI;Lo;0;L;;;;;N;;;;; +D446;HANGUL SYLLABLE POENH;Lo;0;L;;;;;N;;;;; +D447;HANGUL SYLLABLE POED;Lo;0;L;;;;;N;;;;; +D448;HANGUL SYLLABLE POEL;Lo;0;L;;;;;N;;;;; +D449;HANGUL SYLLABLE POELG;Lo;0;L;;;;;N;;;;; +D44A;HANGUL SYLLABLE POELM;Lo;0;L;;;;;N;;;;; +D44B;HANGUL SYLLABLE POELB;Lo;0;L;;;;;N;;;;; +D44C;HANGUL SYLLABLE POELS;Lo;0;L;;;;;N;;;;; +D44D;HANGUL SYLLABLE POELT;Lo;0;L;;;;;N;;;;; +D44E;HANGUL SYLLABLE POELP;Lo;0;L;;;;;N;;;;; +D44F;HANGUL SYLLABLE POELH;Lo;0;L;;;;;N;;;;; +D450;HANGUL SYLLABLE POEM;Lo;0;L;;;;;N;;;;; +D451;HANGUL SYLLABLE POEB;Lo;0;L;;;;;N;;;;; +D452;HANGUL SYLLABLE POEBS;Lo;0;L;;;;;N;;;;; +D453;HANGUL SYLLABLE POES;Lo;0;L;;;;;N;;;;; +D454;HANGUL SYLLABLE POESS;Lo;0;L;;;;;N;;;;; +D455;HANGUL SYLLABLE POENG;Lo;0;L;;;;;N;;;;; +D456;HANGUL SYLLABLE POEJ;Lo;0;L;;;;;N;;;;; +D457;HANGUL SYLLABLE POEC;Lo;0;L;;;;;N;;;;; +D458;HANGUL SYLLABLE POEK;Lo;0;L;;;;;N;;;;; +D459;HANGUL SYLLABLE POET;Lo;0;L;;;;;N;;;;; +D45A;HANGUL SYLLABLE POEP;Lo;0;L;;;;;N;;;;; +D45B;HANGUL SYLLABLE POEH;Lo;0;L;;;;;N;;;;; +D45C;HANGUL SYLLABLE PYO;Lo;0;L;;;;;N;;;;; +D45D;HANGUL SYLLABLE PYOG;Lo;0;L;;;;;N;;;;; +D45E;HANGUL SYLLABLE PYOGG;Lo;0;L;;;;;N;;;;; +D45F;HANGUL SYLLABLE PYOGS;Lo;0;L;;;;;N;;;;; +D460;HANGUL SYLLABLE PYON;Lo;0;L;;;;;N;;;;; +D461;HANGUL SYLLABLE PYONI;Lo;0;L;;;;;N;;;;; +D462;HANGUL SYLLABLE PYONH;Lo;0;L;;;;;N;;;;; +D463;HANGUL SYLLABLE PYOD;Lo;0;L;;;;;N;;;;; +D464;HANGUL SYLLABLE PYOL;Lo;0;L;;;;;N;;;;; +D465;HANGUL SYLLABLE PYOLG;Lo;0;L;;;;;N;;;;; +D466;HANGUL SYLLABLE PYOLM;Lo;0;L;;;;;N;;;;; +D467;HANGUL SYLLABLE PYOLB;Lo;0;L;;;;;N;;;;; +D468;HANGUL SYLLABLE PYOLS;Lo;0;L;;;;;N;;;;; +D469;HANGUL SYLLABLE PYOLT;Lo;0;L;;;;;N;;;;; +D46A;HANGUL SYLLABLE PYOLP;Lo;0;L;;;;;N;;;;; +D46B;HANGUL SYLLABLE PYOLH;Lo;0;L;;;;;N;;;;; +D46C;HANGUL SYLLABLE PYOM;Lo;0;L;;;;;N;;;;; +D46D;HANGUL SYLLABLE PYOB;Lo;0;L;;;;;N;;;;; +D46E;HANGUL SYLLABLE PYOBS;Lo;0;L;;;;;N;;;;; +D46F;HANGUL SYLLABLE PYOS;Lo;0;L;;;;;N;;;;; +D470;HANGUL SYLLABLE PYOSS;Lo;0;L;;;;;N;;;;; +D471;HANGUL SYLLABLE PYONG;Lo;0;L;;;;;N;;;;; +D472;HANGUL SYLLABLE PYOJ;Lo;0;L;;;;;N;;;;; +D473;HANGUL SYLLABLE PYOC;Lo;0;L;;;;;N;;;;; +D474;HANGUL SYLLABLE PYOK;Lo;0;L;;;;;N;;;;; +D475;HANGUL SYLLABLE PYOT;Lo;0;L;;;;;N;;;;; +D476;HANGUL SYLLABLE PYOP;Lo;0;L;;;;;N;;;;; +D477;HANGUL SYLLABLE PYOH;Lo;0;L;;;;;N;;;;; +D478;HANGUL SYLLABLE PU;Lo;0;L;;;;;N;;;;; +D479;HANGUL SYLLABLE PUG;Lo;0;L;;;;;N;;;;; +D47A;HANGUL SYLLABLE PUGG;Lo;0;L;;;;;N;;;;; +D47B;HANGUL SYLLABLE PUGS;Lo;0;L;;;;;N;;;;; +D47C;HANGUL SYLLABLE PUN;Lo;0;L;;;;;N;;;;; +D47D;HANGUL SYLLABLE PUNI;Lo;0;L;;;;;N;;;;; +D47E;HANGUL SYLLABLE PUNH;Lo;0;L;;;;;N;;;;; +D47F;HANGUL SYLLABLE PUD;Lo;0;L;;;;;N;;;;; +D480;HANGUL SYLLABLE PUL;Lo;0;L;;;;;N;;;;; +D481;HANGUL SYLLABLE PULG;Lo;0;L;;;;;N;;;;; +D482;HANGUL SYLLABLE PULM;Lo;0;L;;;;;N;;;;; +D483;HANGUL SYLLABLE PULB;Lo;0;L;;;;;N;;;;; +D484;HANGUL SYLLABLE PULS;Lo;0;L;;;;;N;;;;; +D485;HANGUL SYLLABLE PULT;Lo;0;L;;;;;N;;;;; +D486;HANGUL SYLLABLE PULP;Lo;0;L;;;;;N;;;;; +D487;HANGUL SYLLABLE PULH;Lo;0;L;;;;;N;;;;; +D488;HANGUL SYLLABLE PUM;Lo;0;L;;;;;N;;;;; +D489;HANGUL SYLLABLE PUB;Lo;0;L;;;;;N;;;;; +D48A;HANGUL SYLLABLE PUBS;Lo;0;L;;;;;N;;;;; +D48B;HANGUL SYLLABLE PUS;Lo;0;L;;;;;N;;;;; +D48C;HANGUL SYLLABLE PUSS;Lo;0;L;;;;;N;;;;; +D48D;HANGUL SYLLABLE PUNG;Lo;0;L;;;;;N;;;;; +D48E;HANGUL SYLLABLE PUJ;Lo;0;L;;;;;N;;;;; +D48F;HANGUL SYLLABLE PUC;Lo;0;L;;;;;N;;;;; +D490;HANGUL SYLLABLE PUK;Lo;0;L;;;;;N;;;;; +D491;HANGUL SYLLABLE PUT;Lo;0;L;;;;;N;;;;; +D492;HANGUL SYLLABLE PUP;Lo;0;L;;;;;N;;;;; +D493;HANGUL SYLLABLE PUH;Lo;0;L;;;;;N;;;;; +D494;HANGUL SYLLABLE PWEO;Lo;0;L;;;;;N;;;;; +D495;HANGUL SYLLABLE PWEOG;Lo;0;L;;;;;N;;;;; +D496;HANGUL SYLLABLE PWEOGG;Lo;0;L;;;;;N;;;;; +D497;HANGUL SYLLABLE PWEOGS;Lo;0;L;;;;;N;;;;; +D498;HANGUL SYLLABLE PWEON;Lo;0;L;;;;;N;;;;; +D499;HANGUL SYLLABLE PWEONI;Lo;0;L;;;;;N;;;;; +D49A;HANGUL SYLLABLE PWEONH;Lo;0;L;;;;;N;;;;; +D49B;HANGUL SYLLABLE PWEOD;Lo;0;L;;;;;N;;;;; +D49C;HANGUL SYLLABLE PWEOL;Lo;0;L;;;;;N;;;;; +D49D;HANGUL SYLLABLE PWEOLG;Lo;0;L;;;;;N;;;;; +D49E;HANGUL SYLLABLE PWEOLM;Lo;0;L;;;;;N;;;;; +D49F;HANGUL SYLLABLE PWEOLB;Lo;0;L;;;;;N;;;;; +D4A0;HANGUL SYLLABLE PWEOLS;Lo;0;L;;;;;N;;;;; +D4A1;HANGUL SYLLABLE PWEOLT;Lo;0;L;;;;;N;;;;; +D4A2;HANGUL SYLLABLE PWEOLP;Lo;0;L;;;;;N;;;;; +D4A3;HANGUL SYLLABLE PWEOLH;Lo;0;L;;;;;N;;;;; +D4A4;HANGUL SYLLABLE PWEOM;Lo;0;L;;;;;N;;;;; +D4A5;HANGUL SYLLABLE PWEOB;Lo;0;L;;;;;N;;;;; +D4A6;HANGUL SYLLABLE PWEOBS;Lo;0;L;;;;;N;;;;; +D4A7;HANGUL SYLLABLE PWEOS;Lo;0;L;;;;;N;;;;; +D4A8;HANGUL SYLLABLE PWEOSS;Lo;0;L;;;;;N;;;;; +D4A9;HANGUL SYLLABLE PWEONG;Lo;0;L;;;;;N;;;;; +D4AA;HANGUL SYLLABLE PWEOJ;Lo;0;L;;;;;N;;;;; +D4AB;HANGUL SYLLABLE PWEOC;Lo;0;L;;;;;N;;;;; +D4AC;HANGUL SYLLABLE PWEOK;Lo;0;L;;;;;N;;;;; +D4AD;HANGUL SYLLABLE PWEOT;Lo;0;L;;;;;N;;;;; +D4AE;HANGUL SYLLABLE PWEOP;Lo;0;L;;;;;N;;;;; +D4AF;HANGUL SYLLABLE PWEOH;Lo;0;L;;;;;N;;;;; +D4B0;HANGUL SYLLABLE PWE;Lo;0;L;;;;;N;;;;; +D4B1;HANGUL SYLLABLE PWEG;Lo;0;L;;;;;N;;;;; +D4B2;HANGUL SYLLABLE PWEGG;Lo;0;L;;;;;N;;;;; +D4B3;HANGUL SYLLABLE PWEGS;Lo;0;L;;;;;N;;;;; +D4B4;HANGUL SYLLABLE PWEN;Lo;0;L;;;;;N;;;;; +D4B5;HANGUL SYLLABLE PWENI;Lo;0;L;;;;;N;;;;; +D4B6;HANGUL SYLLABLE PWENH;Lo;0;L;;;;;N;;;;; +D4B7;HANGUL SYLLABLE PWED;Lo;0;L;;;;;N;;;;; +D4B8;HANGUL SYLLABLE PWEL;Lo;0;L;;;;;N;;;;; +D4B9;HANGUL SYLLABLE PWELG;Lo;0;L;;;;;N;;;;; +D4BA;HANGUL SYLLABLE PWELM;Lo;0;L;;;;;N;;;;; +D4BB;HANGUL SYLLABLE PWELB;Lo;0;L;;;;;N;;;;; +D4BC;HANGUL SYLLABLE PWELS;Lo;0;L;;;;;N;;;;; +D4BD;HANGUL SYLLABLE PWELT;Lo;0;L;;;;;N;;;;; +D4BE;HANGUL SYLLABLE PWELP;Lo;0;L;;;;;N;;;;; +D4BF;HANGUL SYLLABLE PWELH;Lo;0;L;;;;;N;;;;; +D4C0;HANGUL SYLLABLE PWEM;Lo;0;L;;;;;N;;;;; +D4C1;HANGUL SYLLABLE PWEB;Lo;0;L;;;;;N;;;;; +D4C2;HANGUL SYLLABLE PWEBS;Lo;0;L;;;;;N;;;;; +D4C3;HANGUL SYLLABLE PWES;Lo;0;L;;;;;N;;;;; +D4C4;HANGUL SYLLABLE PWESS;Lo;0;L;;;;;N;;;;; +D4C5;HANGUL SYLLABLE PWENG;Lo;0;L;;;;;N;;;;; +D4C6;HANGUL SYLLABLE PWEJ;Lo;0;L;;;;;N;;;;; +D4C7;HANGUL SYLLABLE PWEC;Lo;0;L;;;;;N;;;;; +D4C8;HANGUL SYLLABLE PWEK;Lo;0;L;;;;;N;;;;; +D4C9;HANGUL SYLLABLE PWET;Lo;0;L;;;;;N;;;;; +D4CA;HANGUL SYLLABLE PWEP;Lo;0;L;;;;;N;;;;; +D4CB;HANGUL SYLLABLE PWEH;Lo;0;L;;;;;N;;;;; +D4CC;HANGUL SYLLABLE PWI;Lo;0;L;;;;;N;;;;; +D4CD;HANGUL SYLLABLE PWIG;Lo;0;L;;;;;N;;;;; +D4CE;HANGUL SYLLABLE PWIGG;Lo;0;L;;;;;N;;;;; +D4CF;HANGUL SYLLABLE PWIGS;Lo;0;L;;;;;N;;;;; +D4D0;HANGUL SYLLABLE PWIN;Lo;0;L;;;;;N;;;;; +D4D1;HANGUL SYLLABLE PWINI;Lo;0;L;;;;;N;;;;; +D4D2;HANGUL SYLLABLE PWINH;Lo;0;L;;;;;N;;;;; +D4D3;HANGUL SYLLABLE PWID;Lo;0;L;;;;;N;;;;; +D4D4;HANGUL SYLLABLE PWIL;Lo;0;L;;;;;N;;;;; +D4D5;HANGUL SYLLABLE PWILG;Lo;0;L;;;;;N;;;;; +D4D6;HANGUL SYLLABLE PWILM;Lo;0;L;;;;;N;;;;; +D4D7;HANGUL SYLLABLE PWILB;Lo;0;L;;;;;N;;;;; +D4D8;HANGUL SYLLABLE PWILS;Lo;0;L;;;;;N;;;;; +D4D9;HANGUL SYLLABLE PWILT;Lo;0;L;;;;;N;;;;; +D4DA;HANGUL SYLLABLE PWILP;Lo;0;L;;;;;N;;;;; +D4DB;HANGUL SYLLABLE PWILH;Lo;0;L;;;;;N;;;;; +D4DC;HANGUL SYLLABLE PWIM;Lo;0;L;;;;;N;;;;; +D4DD;HANGUL SYLLABLE PWIB;Lo;0;L;;;;;N;;;;; +D4DE;HANGUL SYLLABLE PWIBS;Lo;0;L;;;;;N;;;;; +D4DF;HANGUL SYLLABLE PWIS;Lo;0;L;;;;;N;;;;; +D4E0;HANGUL SYLLABLE PWISS;Lo;0;L;;;;;N;;;;; +D4E1;HANGUL SYLLABLE PWING;Lo;0;L;;;;;N;;;;; +D4E2;HANGUL SYLLABLE PWIJ;Lo;0;L;;;;;N;;;;; +D4E3;HANGUL SYLLABLE PWIC;Lo;0;L;;;;;N;;;;; +D4E4;HANGUL SYLLABLE PWIK;Lo;0;L;;;;;N;;;;; +D4E5;HANGUL SYLLABLE PWIT;Lo;0;L;;;;;N;;;;; +D4E6;HANGUL SYLLABLE PWIP;Lo;0;L;;;;;N;;;;; +D4E7;HANGUL SYLLABLE PWIH;Lo;0;L;;;;;N;;;;; +D4E8;HANGUL SYLLABLE PYU;Lo;0;L;;;;;N;;;;; +D4E9;HANGUL SYLLABLE PYUG;Lo;0;L;;;;;N;;;;; +D4EA;HANGUL SYLLABLE PYUGG;Lo;0;L;;;;;N;;;;; +D4EB;HANGUL SYLLABLE PYUGS;Lo;0;L;;;;;N;;;;; +D4EC;HANGUL SYLLABLE PYUN;Lo;0;L;;;;;N;;;;; +D4ED;HANGUL SYLLABLE PYUNI;Lo;0;L;;;;;N;;;;; +D4EE;HANGUL SYLLABLE PYUNH;Lo;0;L;;;;;N;;;;; +D4EF;HANGUL SYLLABLE PYUD;Lo;0;L;;;;;N;;;;; +D4F0;HANGUL SYLLABLE PYUL;Lo;0;L;;;;;N;;;;; +D4F1;HANGUL SYLLABLE PYULG;Lo;0;L;;;;;N;;;;; +D4F2;HANGUL SYLLABLE PYULM;Lo;0;L;;;;;N;;;;; +D4F3;HANGUL SYLLABLE PYULB;Lo;0;L;;;;;N;;;;; +D4F4;HANGUL SYLLABLE PYULS;Lo;0;L;;;;;N;;;;; +D4F5;HANGUL SYLLABLE PYULT;Lo;0;L;;;;;N;;;;; +D4F6;HANGUL SYLLABLE PYULP;Lo;0;L;;;;;N;;;;; +D4F7;HANGUL SYLLABLE PYULH;Lo;0;L;;;;;N;;;;; +D4F8;HANGUL SYLLABLE PYUM;Lo;0;L;;;;;N;;;;; +D4F9;HANGUL SYLLABLE PYUB;Lo;0;L;;;;;N;;;;; +D4FA;HANGUL SYLLABLE PYUBS;Lo;0;L;;;;;N;;;;; +D4FB;HANGUL SYLLABLE PYUS;Lo;0;L;;;;;N;;;;; +D4FC;HANGUL SYLLABLE PYUSS;Lo;0;L;;;;;N;;;;; +D4FD;HANGUL SYLLABLE PYUNG;Lo;0;L;;;;;N;;;;; +D4FE;HANGUL SYLLABLE PYUJ;Lo;0;L;;;;;N;;;;; +D4FF;HANGUL SYLLABLE PYUC;Lo;0;L;;;;;N;;;;; +D500;HANGUL SYLLABLE PYUK;Lo;0;L;;;;;N;;;;; +D501;HANGUL SYLLABLE PYUT;Lo;0;L;;;;;N;;;;; +D502;HANGUL SYLLABLE PYUP;Lo;0;L;;;;;N;;;;; +D503;HANGUL SYLLABLE PYUH;Lo;0;L;;;;;N;;;;; +D504;HANGUL SYLLABLE PEU;Lo;0;L;;;;;N;;;;; +D505;HANGUL SYLLABLE PEUG;Lo;0;L;;;;;N;;;;; +D506;HANGUL SYLLABLE PEUGG;Lo;0;L;;;;;N;;;;; +D507;HANGUL SYLLABLE PEUGS;Lo;0;L;;;;;N;;;;; +D508;HANGUL SYLLABLE PEUN;Lo;0;L;;;;;N;;;;; +D509;HANGUL SYLLABLE PEUNI;Lo;0;L;;;;;N;;;;; +D50A;HANGUL SYLLABLE PEUNH;Lo;0;L;;;;;N;;;;; +D50B;HANGUL SYLLABLE PEUD;Lo;0;L;;;;;N;;;;; +D50C;HANGUL SYLLABLE PEUL;Lo;0;L;;;;;N;;;;; +D50D;HANGUL SYLLABLE PEULG;Lo;0;L;;;;;N;;;;; +D50E;HANGUL SYLLABLE PEULM;Lo;0;L;;;;;N;;;;; +D50F;HANGUL SYLLABLE PEULB;Lo;0;L;;;;;N;;;;; +D510;HANGUL SYLLABLE PEULS;Lo;0;L;;;;;N;;;;; +D511;HANGUL SYLLABLE PEULT;Lo;0;L;;;;;N;;;;; +D512;HANGUL SYLLABLE PEULP;Lo;0;L;;;;;N;;;;; +D513;HANGUL SYLLABLE PEULH;Lo;0;L;;;;;N;;;;; +D514;HANGUL SYLLABLE PEUM;Lo;0;L;;;;;N;;;;; +D515;HANGUL SYLLABLE PEUB;Lo;0;L;;;;;N;;;;; +D516;HANGUL SYLLABLE PEUBS;Lo;0;L;;;;;N;;;;; +D517;HANGUL SYLLABLE PEUS;Lo;0;L;;;;;N;;;;; +D518;HANGUL SYLLABLE PEUSS;Lo;0;L;;;;;N;;;;; +D519;HANGUL SYLLABLE PEUNG;Lo;0;L;;;;;N;;;;; +D51A;HANGUL SYLLABLE PEUJ;Lo;0;L;;;;;N;;;;; +D51B;HANGUL SYLLABLE PEUC;Lo;0;L;;;;;N;;;;; +D51C;HANGUL SYLLABLE PEUK;Lo;0;L;;;;;N;;;;; +D51D;HANGUL SYLLABLE PEUT;Lo;0;L;;;;;N;;;;; +D51E;HANGUL SYLLABLE PEUP;Lo;0;L;;;;;N;;;;; +D51F;HANGUL SYLLABLE PEUH;Lo;0;L;;;;;N;;;;; +D520;HANGUL SYLLABLE PYI;Lo;0;L;;;;;N;;;;; +D521;HANGUL SYLLABLE PYIG;Lo;0;L;;;;;N;;;;; +D522;HANGUL SYLLABLE PYIGG;Lo;0;L;;;;;N;;;;; +D523;HANGUL SYLLABLE PYIGS;Lo;0;L;;;;;N;;;;; +D524;HANGUL SYLLABLE PYIN;Lo;0;L;;;;;N;;;;; +D525;HANGUL SYLLABLE PYINI;Lo;0;L;;;;;N;;;;; +D526;HANGUL SYLLABLE PYINH;Lo;0;L;;;;;N;;;;; +D527;HANGUL SYLLABLE PYID;Lo;0;L;;;;;N;;;;; +D528;HANGUL SYLLABLE PYIL;Lo;0;L;;;;;N;;;;; +D529;HANGUL SYLLABLE PYILG;Lo;0;L;;;;;N;;;;; +D52A;HANGUL SYLLABLE PYILM;Lo;0;L;;;;;N;;;;; +D52B;HANGUL SYLLABLE PYILB;Lo;0;L;;;;;N;;;;; +D52C;HANGUL SYLLABLE PYILS;Lo;0;L;;;;;N;;;;; +D52D;HANGUL SYLLABLE PYILT;Lo;0;L;;;;;N;;;;; +D52E;HANGUL SYLLABLE PYILP;Lo;0;L;;;;;N;;;;; +D52F;HANGUL SYLLABLE PYILH;Lo;0;L;;;;;N;;;;; +D530;HANGUL SYLLABLE PYIM;Lo;0;L;;;;;N;;;;; +D531;HANGUL SYLLABLE PYIB;Lo;0;L;;;;;N;;;;; +D532;HANGUL SYLLABLE PYIBS;Lo;0;L;;;;;N;;;;; +D533;HANGUL SYLLABLE PYIS;Lo;0;L;;;;;N;;;;; +D534;HANGUL SYLLABLE PYISS;Lo;0;L;;;;;N;;;;; +D535;HANGUL SYLLABLE PYING;Lo;0;L;;;;;N;;;;; +D536;HANGUL SYLLABLE PYIJ;Lo;0;L;;;;;N;;;;; +D537;HANGUL SYLLABLE PYIC;Lo;0;L;;;;;N;;;;; +D538;HANGUL SYLLABLE PYIK;Lo;0;L;;;;;N;;;;; +D539;HANGUL SYLLABLE PYIT;Lo;0;L;;;;;N;;;;; +D53A;HANGUL SYLLABLE PYIP;Lo;0;L;;;;;N;;;;; +D53B;HANGUL SYLLABLE PYIH;Lo;0;L;;;;;N;;;;; +D53C;HANGUL SYLLABLE PI;Lo;0;L;;;;;N;;;;; +D53D;HANGUL SYLLABLE PIG;Lo;0;L;;;;;N;;;;; +D53E;HANGUL SYLLABLE PIGG;Lo;0;L;;;;;N;;;;; +D53F;HANGUL SYLLABLE PIGS;Lo;0;L;;;;;N;;;;; +D540;HANGUL SYLLABLE PIN;Lo;0;L;;;;;N;;;;; +D541;HANGUL SYLLABLE PINI;Lo;0;L;;;;;N;;;;; +D542;HANGUL SYLLABLE PINH;Lo;0;L;;;;;N;;;;; +D543;HANGUL SYLLABLE PID;Lo;0;L;;;;;N;;;;; +D544;HANGUL SYLLABLE PIL;Lo;0;L;;;;;N;;;;; +D545;HANGUL SYLLABLE PILG;Lo;0;L;;;;;N;;;;; +D546;HANGUL SYLLABLE PILM;Lo;0;L;;;;;N;;;;; +D547;HANGUL SYLLABLE PILB;Lo;0;L;;;;;N;;;;; +D548;HANGUL SYLLABLE PILS;Lo;0;L;;;;;N;;;;; +D549;HANGUL SYLLABLE PILT;Lo;0;L;;;;;N;;;;; +D54A;HANGUL SYLLABLE PILP;Lo;0;L;;;;;N;;;;; +D54B;HANGUL SYLLABLE PILH;Lo;0;L;;;;;N;;;;; +D54C;HANGUL SYLLABLE PIM;Lo;0;L;;;;;N;;;;; +D54D;HANGUL SYLLABLE PIB;Lo;0;L;;;;;N;;;;; +D54E;HANGUL SYLLABLE PIBS;Lo;0;L;;;;;N;;;;; +D54F;HANGUL SYLLABLE PIS;Lo;0;L;;;;;N;;;;; +D550;HANGUL SYLLABLE PISS;Lo;0;L;;;;;N;;;;; +D551;HANGUL SYLLABLE PING;Lo;0;L;;;;;N;;;;; +D552;HANGUL SYLLABLE PIJ;Lo;0;L;;;;;N;;;;; +D553;HANGUL SYLLABLE PIC;Lo;0;L;;;;;N;;;;; +D554;HANGUL SYLLABLE PIK;Lo;0;L;;;;;N;;;;; +D555;HANGUL SYLLABLE PIT;Lo;0;L;;;;;N;;;;; +D556;HANGUL SYLLABLE PIP;Lo;0;L;;;;;N;;;;; +D557;HANGUL SYLLABLE PIH;Lo;0;L;;;;;N;;;;; +D558;HANGUL SYLLABLE HA;Lo;0;L;;;;;N;;;;; +D559;HANGUL SYLLABLE HAG;Lo;0;L;;;;;N;;;;; +D55A;HANGUL SYLLABLE HAGG;Lo;0;L;;;;;N;;;;; +D55B;HANGUL SYLLABLE HAGS;Lo;0;L;;;;;N;;;;; +D55C;HANGUL SYLLABLE HAN;Lo;0;L;;;;;N;;;;; +D55D;HANGUL SYLLABLE HANI;Lo;0;L;;;;;N;;;;; +D55E;HANGUL SYLLABLE HANH;Lo;0;L;;;;;N;;;;; +D55F;HANGUL SYLLABLE HAD;Lo;0;L;;;;;N;;;;; +D560;HANGUL SYLLABLE HAL;Lo;0;L;;;;;N;;;;; +D561;HANGUL SYLLABLE HALG;Lo;0;L;;;;;N;;;;; +D562;HANGUL SYLLABLE HALM;Lo;0;L;;;;;N;;;;; +D563;HANGUL SYLLABLE HALB;Lo;0;L;;;;;N;;;;; +D564;HANGUL SYLLABLE HALS;Lo;0;L;;;;;N;;;;; +D565;HANGUL SYLLABLE HALT;Lo;0;L;;;;;N;;;;; +D566;HANGUL SYLLABLE HALP;Lo;0;L;;;;;N;;;;; +D567;HANGUL SYLLABLE HALH;Lo;0;L;;;;;N;;;;; +D568;HANGUL SYLLABLE HAM;Lo;0;L;;;;;N;;;;; +D569;HANGUL SYLLABLE HAB;Lo;0;L;;;;;N;;;;; +D56A;HANGUL SYLLABLE HABS;Lo;0;L;;;;;N;;;;; +D56B;HANGUL SYLLABLE HAS;Lo;0;L;;;;;N;;;;; +D56C;HANGUL SYLLABLE HASS;Lo;0;L;;;;;N;;;;; +D56D;HANGUL SYLLABLE HANG;Lo;0;L;;;;;N;;;;; +D56E;HANGUL SYLLABLE HAJ;Lo;0;L;;;;;N;;;;; +D56F;HANGUL SYLLABLE HAC;Lo;0;L;;;;;N;;;;; +D570;HANGUL SYLLABLE HAK;Lo;0;L;;;;;N;;;;; +D571;HANGUL SYLLABLE HAT;Lo;0;L;;;;;N;;;;; +D572;HANGUL SYLLABLE HAP;Lo;0;L;;;;;N;;;;; +D573;HANGUL SYLLABLE HAH;Lo;0;L;;;;;N;;;;; +D574;HANGUL SYLLABLE HAE;Lo;0;L;;;;;N;;;;; +D575;HANGUL SYLLABLE HAEG;Lo;0;L;;;;;N;;;;; +D576;HANGUL SYLLABLE HAEGG;Lo;0;L;;;;;N;;;;; +D577;HANGUL SYLLABLE HAEGS;Lo;0;L;;;;;N;;;;; +D578;HANGUL SYLLABLE HAEN;Lo;0;L;;;;;N;;;;; +D579;HANGUL SYLLABLE HAENI;Lo;0;L;;;;;N;;;;; +D57A;HANGUL SYLLABLE HAENH;Lo;0;L;;;;;N;;;;; +D57B;HANGUL SYLLABLE HAED;Lo;0;L;;;;;N;;;;; +D57C;HANGUL SYLLABLE HAEL;Lo;0;L;;;;;N;;;;; +D57D;HANGUL SYLLABLE HAELG;Lo;0;L;;;;;N;;;;; +D57E;HANGUL SYLLABLE HAELM;Lo;0;L;;;;;N;;;;; +D57F;HANGUL SYLLABLE HAELB;Lo;0;L;;;;;N;;;;; +D580;HANGUL SYLLABLE HAELS;Lo;0;L;;;;;N;;;;; +D581;HANGUL SYLLABLE HAELT;Lo;0;L;;;;;N;;;;; +D582;HANGUL SYLLABLE HAELP;Lo;0;L;;;;;N;;;;; +D583;HANGUL SYLLABLE HAELH;Lo;0;L;;;;;N;;;;; +D584;HANGUL SYLLABLE HAEM;Lo;0;L;;;;;N;;;;; +D585;HANGUL SYLLABLE HAEB;Lo;0;L;;;;;N;;;;; +D586;HANGUL SYLLABLE HAEBS;Lo;0;L;;;;;N;;;;; +D587;HANGUL SYLLABLE HAES;Lo;0;L;;;;;N;;;;; +D588;HANGUL SYLLABLE HAESS;Lo;0;L;;;;;N;;;;; +D589;HANGUL SYLLABLE HAENG;Lo;0;L;;;;;N;;;;; +D58A;HANGUL SYLLABLE HAEJ;Lo;0;L;;;;;N;;;;; +D58B;HANGUL SYLLABLE HAEC;Lo;0;L;;;;;N;;;;; +D58C;HANGUL SYLLABLE HAEK;Lo;0;L;;;;;N;;;;; +D58D;HANGUL SYLLABLE HAET;Lo;0;L;;;;;N;;;;; +D58E;HANGUL SYLLABLE HAEP;Lo;0;L;;;;;N;;;;; +D58F;HANGUL SYLLABLE HAEH;Lo;0;L;;;;;N;;;;; +D590;HANGUL SYLLABLE HYA;Lo;0;L;;;;;N;;;;; +D591;HANGUL SYLLABLE HYAG;Lo;0;L;;;;;N;;;;; +D592;HANGUL SYLLABLE HYAGG;Lo;0;L;;;;;N;;;;; +D593;HANGUL SYLLABLE HYAGS;Lo;0;L;;;;;N;;;;; +D594;HANGUL SYLLABLE HYAN;Lo;0;L;;;;;N;;;;; +D595;HANGUL SYLLABLE HYANI;Lo;0;L;;;;;N;;;;; +D596;HANGUL SYLLABLE HYANH;Lo;0;L;;;;;N;;;;; +D597;HANGUL SYLLABLE HYAD;Lo;0;L;;;;;N;;;;; +D598;HANGUL SYLLABLE HYAL;Lo;0;L;;;;;N;;;;; +D599;HANGUL SYLLABLE HYALG;Lo;0;L;;;;;N;;;;; +D59A;HANGUL SYLLABLE HYALM;Lo;0;L;;;;;N;;;;; +D59B;HANGUL SYLLABLE HYALB;Lo;0;L;;;;;N;;;;; +D59C;HANGUL SYLLABLE HYALS;Lo;0;L;;;;;N;;;;; +D59D;HANGUL SYLLABLE HYALT;Lo;0;L;;;;;N;;;;; +D59E;HANGUL SYLLABLE HYALP;Lo;0;L;;;;;N;;;;; +D59F;HANGUL SYLLABLE HYALH;Lo;0;L;;;;;N;;;;; +D5A0;HANGUL SYLLABLE HYAM;Lo;0;L;;;;;N;;;;; +D5A1;HANGUL SYLLABLE HYAB;Lo;0;L;;;;;N;;;;; +D5A2;HANGUL SYLLABLE HYABS;Lo;0;L;;;;;N;;;;; +D5A3;HANGUL SYLLABLE HYAS;Lo;0;L;;;;;N;;;;; +D5A4;HANGUL SYLLABLE HYASS;Lo;0;L;;;;;N;;;;; +D5A5;HANGUL SYLLABLE HYANG;Lo;0;L;;;;;N;;;;; +D5A6;HANGUL SYLLABLE HYAJ;Lo;0;L;;;;;N;;;;; +D5A7;HANGUL SYLLABLE HYAC;Lo;0;L;;;;;N;;;;; +D5A8;HANGUL SYLLABLE HYAK;Lo;0;L;;;;;N;;;;; +D5A9;HANGUL SYLLABLE HYAT;Lo;0;L;;;;;N;;;;; +D5AA;HANGUL SYLLABLE HYAP;Lo;0;L;;;;;N;;;;; +D5AB;HANGUL SYLLABLE HYAH;Lo;0;L;;;;;N;;;;; +D5AC;HANGUL SYLLABLE HYAE;Lo;0;L;;;;;N;;;;; +D5AD;HANGUL SYLLABLE HYAEG;Lo;0;L;;;;;N;;;;; +D5AE;HANGUL SYLLABLE HYAEGG;Lo;0;L;;;;;N;;;;; +D5AF;HANGUL SYLLABLE HYAEGS;Lo;0;L;;;;;N;;;;; +D5B0;HANGUL SYLLABLE HYAEN;Lo;0;L;;;;;N;;;;; +D5B1;HANGUL SYLLABLE HYAENI;Lo;0;L;;;;;N;;;;; +D5B2;HANGUL SYLLABLE HYAENH;Lo;0;L;;;;;N;;;;; +D5B3;HANGUL SYLLABLE HYAED;Lo;0;L;;;;;N;;;;; +D5B4;HANGUL SYLLABLE HYAEL;Lo;0;L;;;;;N;;;;; +D5B5;HANGUL SYLLABLE HYAELG;Lo;0;L;;;;;N;;;;; +D5B6;HANGUL SYLLABLE HYAELM;Lo;0;L;;;;;N;;;;; +D5B7;HANGUL SYLLABLE HYAELB;Lo;0;L;;;;;N;;;;; +D5B8;HANGUL SYLLABLE HYAELS;Lo;0;L;;;;;N;;;;; +D5B9;HANGUL SYLLABLE HYAELT;Lo;0;L;;;;;N;;;;; +D5BA;HANGUL SYLLABLE HYAELP;Lo;0;L;;;;;N;;;;; +D5BB;HANGUL SYLLABLE HYAELH;Lo;0;L;;;;;N;;;;; +D5BC;HANGUL SYLLABLE HYAEM;Lo;0;L;;;;;N;;;;; +D5BD;HANGUL SYLLABLE HYAEB;Lo;0;L;;;;;N;;;;; +D5BE;HANGUL SYLLABLE HYAEBS;Lo;0;L;;;;;N;;;;; +D5BF;HANGUL SYLLABLE HYAES;Lo;0;L;;;;;N;;;;; +D5C0;HANGUL SYLLABLE HYAESS;Lo;0;L;;;;;N;;;;; +D5C1;HANGUL SYLLABLE HYAENG;Lo;0;L;;;;;N;;;;; +D5C2;HANGUL SYLLABLE HYAEJ;Lo;0;L;;;;;N;;;;; +D5C3;HANGUL SYLLABLE HYAEC;Lo;0;L;;;;;N;;;;; +D5C4;HANGUL SYLLABLE HYAEK;Lo;0;L;;;;;N;;;;; +D5C5;HANGUL SYLLABLE HYAET;Lo;0;L;;;;;N;;;;; +D5C6;HANGUL SYLLABLE HYAEP;Lo;0;L;;;;;N;;;;; +D5C7;HANGUL SYLLABLE HYAEH;Lo;0;L;;;;;N;;;;; +D5C8;HANGUL SYLLABLE HEO;Lo;0;L;;;;;N;;;;; +D5C9;HANGUL SYLLABLE HEOG;Lo;0;L;;;;;N;;;;; +D5CA;HANGUL SYLLABLE HEOGG;Lo;0;L;;;;;N;;;;; +D5CB;HANGUL SYLLABLE HEOGS;Lo;0;L;;;;;N;;;;; +D5CC;HANGUL SYLLABLE HEON;Lo;0;L;;;;;N;;;;; +D5CD;HANGUL SYLLABLE HEONI;Lo;0;L;;;;;N;;;;; +D5CE;HANGUL SYLLABLE HEONH;Lo;0;L;;;;;N;;;;; +D5CF;HANGUL SYLLABLE HEOD;Lo;0;L;;;;;N;;;;; +D5D0;HANGUL SYLLABLE HEOL;Lo;0;L;;;;;N;;;;; +D5D1;HANGUL SYLLABLE HEOLG;Lo;0;L;;;;;N;;;;; +D5D2;HANGUL SYLLABLE HEOLM;Lo;0;L;;;;;N;;;;; +D5D3;HANGUL SYLLABLE HEOLB;Lo;0;L;;;;;N;;;;; +D5D4;HANGUL SYLLABLE HEOLS;Lo;0;L;;;;;N;;;;; +D5D5;HANGUL SYLLABLE HEOLT;Lo;0;L;;;;;N;;;;; +D5D6;HANGUL SYLLABLE HEOLP;Lo;0;L;;;;;N;;;;; +D5D7;HANGUL SYLLABLE HEOLH;Lo;0;L;;;;;N;;;;; +D5D8;HANGUL SYLLABLE HEOM;Lo;0;L;;;;;N;;;;; +D5D9;HANGUL SYLLABLE HEOB;Lo;0;L;;;;;N;;;;; +D5DA;HANGUL SYLLABLE HEOBS;Lo;0;L;;;;;N;;;;; +D5DB;HANGUL SYLLABLE HEOS;Lo;0;L;;;;;N;;;;; +D5DC;HANGUL SYLLABLE HEOSS;Lo;0;L;;;;;N;;;;; +D5DD;HANGUL SYLLABLE HEONG;Lo;0;L;;;;;N;;;;; +D5DE;HANGUL SYLLABLE HEOJ;Lo;0;L;;;;;N;;;;; +D5DF;HANGUL SYLLABLE HEOC;Lo;0;L;;;;;N;;;;; +D5E0;HANGUL SYLLABLE HEOK;Lo;0;L;;;;;N;;;;; +D5E1;HANGUL SYLLABLE HEOT;Lo;0;L;;;;;N;;;;; +D5E2;HANGUL SYLLABLE HEOP;Lo;0;L;;;;;N;;;;; +D5E3;HANGUL SYLLABLE HEOH;Lo;0;L;;;;;N;;;;; +D5E4;HANGUL SYLLABLE HE;Lo;0;L;;;;;N;;;;; +D5E5;HANGUL SYLLABLE HEG;Lo;0;L;;;;;N;;;;; +D5E6;HANGUL SYLLABLE HEGG;Lo;0;L;;;;;N;;;;; +D5E7;HANGUL SYLLABLE HEGS;Lo;0;L;;;;;N;;;;; +D5E8;HANGUL SYLLABLE HEN;Lo;0;L;;;;;N;;;;; +D5E9;HANGUL SYLLABLE HENI;Lo;0;L;;;;;N;;;;; +D5EA;HANGUL SYLLABLE HENH;Lo;0;L;;;;;N;;;;; +D5EB;HANGUL SYLLABLE HED;Lo;0;L;;;;;N;;;;; +D5EC;HANGUL SYLLABLE HEL;Lo;0;L;;;;;N;;;;; +D5ED;HANGUL SYLLABLE HELG;Lo;0;L;;;;;N;;;;; +D5EE;HANGUL SYLLABLE HELM;Lo;0;L;;;;;N;;;;; +D5EF;HANGUL SYLLABLE HELB;Lo;0;L;;;;;N;;;;; +D5F0;HANGUL SYLLABLE HELS;Lo;0;L;;;;;N;;;;; +D5F1;HANGUL SYLLABLE HELT;Lo;0;L;;;;;N;;;;; +D5F2;HANGUL SYLLABLE HELP;Lo;0;L;;;;;N;;;;; +D5F3;HANGUL SYLLABLE HELH;Lo;0;L;;;;;N;;;;; +D5F4;HANGUL SYLLABLE HEM;Lo;0;L;;;;;N;;;;; +D5F5;HANGUL SYLLABLE HEB;Lo;0;L;;;;;N;;;;; +D5F6;HANGUL SYLLABLE HEBS;Lo;0;L;;;;;N;;;;; +D5F7;HANGUL SYLLABLE HES;Lo;0;L;;;;;N;;;;; +D5F8;HANGUL SYLLABLE HESS;Lo;0;L;;;;;N;;;;; +D5F9;HANGUL SYLLABLE HENG;Lo;0;L;;;;;N;;;;; +D5FA;HANGUL SYLLABLE HEJ;Lo;0;L;;;;;N;;;;; +D5FB;HANGUL SYLLABLE HEC;Lo;0;L;;;;;N;;;;; +D5FC;HANGUL SYLLABLE HEK;Lo;0;L;;;;;N;;;;; +D5FD;HANGUL SYLLABLE HET;Lo;0;L;;;;;N;;;;; +D5FE;HANGUL SYLLABLE HEP;Lo;0;L;;;;;N;;;;; +D5FF;HANGUL SYLLABLE HEH;Lo;0;L;;;;;N;;;;; +D600;HANGUL SYLLABLE HYEO;Lo;0;L;;;;;N;;;;; +D601;HANGUL SYLLABLE HYEOG;Lo;0;L;;;;;N;;;;; +D602;HANGUL SYLLABLE HYEOGG;Lo;0;L;;;;;N;;;;; +D603;HANGUL SYLLABLE HYEOGS;Lo;0;L;;;;;N;;;;; +D604;HANGUL SYLLABLE HYEON;Lo;0;L;;;;;N;;;;; +D605;HANGUL SYLLABLE HYEONI;Lo;0;L;;;;;N;;;;; +D606;HANGUL SYLLABLE HYEONH;Lo;0;L;;;;;N;;;;; +D607;HANGUL SYLLABLE HYEOD;Lo;0;L;;;;;N;;;;; +D608;HANGUL SYLLABLE HYEOL;Lo;0;L;;;;;N;;;;; +D609;HANGUL SYLLABLE HYEOLG;Lo;0;L;;;;;N;;;;; +D60A;HANGUL SYLLABLE HYEOLM;Lo;0;L;;;;;N;;;;; +D60B;HANGUL SYLLABLE HYEOLB;Lo;0;L;;;;;N;;;;; +D60C;HANGUL SYLLABLE HYEOLS;Lo;0;L;;;;;N;;;;; +D60D;HANGUL SYLLABLE HYEOLT;Lo;0;L;;;;;N;;;;; +D60E;HANGUL SYLLABLE HYEOLP;Lo;0;L;;;;;N;;;;; +D60F;HANGUL SYLLABLE HYEOLH;Lo;0;L;;;;;N;;;;; +D610;HANGUL SYLLABLE HYEOM;Lo;0;L;;;;;N;;;;; +D611;HANGUL SYLLABLE HYEOB;Lo;0;L;;;;;N;;;;; +D612;HANGUL SYLLABLE HYEOBS;Lo;0;L;;;;;N;;;;; +D613;HANGUL SYLLABLE HYEOS;Lo;0;L;;;;;N;;;;; +D614;HANGUL SYLLABLE HYEOSS;Lo;0;L;;;;;N;;;;; +D615;HANGUL SYLLABLE HYEONG;Lo;0;L;;;;;N;;;;; +D616;HANGUL SYLLABLE HYEOJ;Lo;0;L;;;;;N;;;;; +D617;HANGUL SYLLABLE HYEOC;Lo;0;L;;;;;N;;;;; +D618;HANGUL SYLLABLE HYEOK;Lo;0;L;;;;;N;;;;; +D619;HANGUL SYLLABLE HYEOT;Lo;0;L;;;;;N;;;;; +D61A;HANGUL SYLLABLE HYEOP;Lo;0;L;;;;;N;;;;; +D61B;HANGUL SYLLABLE HYEOH;Lo;0;L;;;;;N;;;;; +D61C;HANGUL SYLLABLE HYE;Lo;0;L;;;;;N;;;;; +D61D;HANGUL SYLLABLE HYEG;Lo;0;L;;;;;N;;;;; +D61E;HANGUL SYLLABLE HYEGG;Lo;0;L;;;;;N;;;;; +D61F;HANGUL SYLLABLE HYEGS;Lo;0;L;;;;;N;;;;; +D620;HANGUL SYLLABLE HYEN;Lo;0;L;;;;;N;;;;; +D621;HANGUL SYLLABLE HYENI;Lo;0;L;;;;;N;;;;; +D622;HANGUL SYLLABLE HYENH;Lo;0;L;;;;;N;;;;; +D623;HANGUL SYLLABLE HYED;Lo;0;L;;;;;N;;;;; +D624;HANGUL SYLLABLE HYEL;Lo;0;L;;;;;N;;;;; +D625;HANGUL SYLLABLE HYELG;Lo;0;L;;;;;N;;;;; +D626;HANGUL SYLLABLE HYELM;Lo;0;L;;;;;N;;;;; +D627;HANGUL SYLLABLE HYELB;Lo;0;L;;;;;N;;;;; +D628;HANGUL SYLLABLE HYELS;Lo;0;L;;;;;N;;;;; +D629;HANGUL SYLLABLE HYELT;Lo;0;L;;;;;N;;;;; +D62A;HANGUL SYLLABLE HYELP;Lo;0;L;;;;;N;;;;; +D62B;HANGUL SYLLABLE HYELH;Lo;0;L;;;;;N;;;;; +D62C;HANGUL SYLLABLE HYEM;Lo;0;L;;;;;N;;;;; +D62D;HANGUL SYLLABLE HYEB;Lo;0;L;;;;;N;;;;; +D62E;HANGUL SYLLABLE HYEBS;Lo;0;L;;;;;N;;;;; +D62F;HANGUL SYLLABLE HYES;Lo;0;L;;;;;N;;;;; +D630;HANGUL SYLLABLE HYESS;Lo;0;L;;;;;N;;;;; +D631;HANGUL SYLLABLE HYENG;Lo;0;L;;;;;N;;;;; +D632;HANGUL SYLLABLE HYEJ;Lo;0;L;;;;;N;;;;; +D633;HANGUL SYLLABLE HYEC;Lo;0;L;;;;;N;;;;; +D634;HANGUL SYLLABLE HYEK;Lo;0;L;;;;;N;;;;; +D635;HANGUL SYLLABLE HYET;Lo;0;L;;;;;N;;;;; +D636;HANGUL SYLLABLE HYEP;Lo;0;L;;;;;N;;;;; +D637;HANGUL SYLLABLE HYEH;Lo;0;L;;;;;N;;;;; +D638;HANGUL SYLLABLE HO;Lo;0;L;;;;;N;;;;; +D639;HANGUL SYLLABLE HOG;Lo;0;L;;;;;N;;;;; +D63A;HANGUL SYLLABLE HOGG;Lo;0;L;;;;;N;;;;; +D63B;HANGUL SYLLABLE HOGS;Lo;0;L;;;;;N;;;;; +D63C;HANGUL SYLLABLE HON;Lo;0;L;;;;;N;;;;; +D63D;HANGUL SYLLABLE HONI;Lo;0;L;;;;;N;;;;; +D63E;HANGUL SYLLABLE HONH;Lo;0;L;;;;;N;;;;; +D63F;HANGUL SYLLABLE HOD;Lo;0;L;;;;;N;;;;; +D640;HANGUL SYLLABLE HOL;Lo;0;L;;;;;N;;;;; +D641;HANGUL SYLLABLE HOLG;Lo;0;L;;;;;N;;;;; +D642;HANGUL SYLLABLE HOLM;Lo;0;L;;;;;N;;;;; +D643;HANGUL SYLLABLE HOLB;Lo;0;L;;;;;N;;;;; +D644;HANGUL SYLLABLE HOLS;Lo;0;L;;;;;N;;;;; +D645;HANGUL SYLLABLE HOLT;Lo;0;L;;;;;N;;;;; +D646;HANGUL SYLLABLE HOLP;Lo;0;L;;;;;N;;;;; +D647;HANGUL SYLLABLE HOLH;Lo;0;L;;;;;N;;;;; +D648;HANGUL SYLLABLE HOM;Lo;0;L;;;;;N;;;;; +D649;HANGUL SYLLABLE HOB;Lo;0;L;;;;;N;;;;; +D64A;HANGUL SYLLABLE HOBS;Lo;0;L;;;;;N;;;;; +D64B;HANGUL SYLLABLE HOS;Lo;0;L;;;;;N;;;;; +D64C;HANGUL SYLLABLE HOSS;Lo;0;L;;;;;N;;;;; +D64D;HANGUL SYLLABLE HONG;Lo;0;L;;;;;N;;;;; +D64E;HANGUL SYLLABLE HOJ;Lo;0;L;;;;;N;;;;; +D64F;HANGUL SYLLABLE HOC;Lo;0;L;;;;;N;;;;; +D650;HANGUL SYLLABLE HOK;Lo;0;L;;;;;N;;;;; +D651;HANGUL SYLLABLE HOT;Lo;0;L;;;;;N;;;;; +D652;HANGUL SYLLABLE HOP;Lo;0;L;;;;;N;;;;; +D653;HANGUL SYLLABLE HOH;Lo;0;L;;;;;N;;;;; +D654;HANGUL SYLLABLE HWA;Lo;0;L;;;;;N;;;;; +D655;HANGUL SYLLABLE HWAG;Lo;0;L;;;;;N;;;;; +D656;HANGUL SYLLABLE HWAGG;Lo;0;L;;;;;N;;;;; +D657;HANGUL SYLLABLE HWAGS;Lo;0;L;;;;;N;;;;; +D658;HANGUL SYLLABLE HWAN;Lo;0;L;;;;;N;;;;; +D659;HANGUL SYLLABLE HWANI;Lo;0;L;;;;;N;;;;; +D65A;HANGUL SYLLABLE HWANH;Lo;0;L;;;;;N;;;;; +D65B;HANGUL SYLLABLE HWAD;Lo;0;L;;;;;N;;;;; +D65C;HANGUL SYLLABLE HWAL;Lo;0;L;;;;;N;;;;; +D65D;HANGUL SYLLABLE HWALG;Lo;0;L;;;;;N;;;;; +D65E;HANGUL SYLLABLE HWALM;Lo;0;L;;;;;N;;;;; +D65F;HANGUL SYLLABLE HWALB;Lo;0;L;;;;;N;;;;; +D660;HANGUL SYLLABLE HWALS;Lo;0;L;;;;;N;;;;; +D661;HANGUL SYLLABLE HWALT;Lo;0;L;;;;;N;;;;; +D662;HANGUL SYLLABLE HWALP;Lo;0;L;;;;;N;;;;; +D663;HANGUL SYLLABLE HWALH;Lo;0;L;;;;;N;;;;; +D664;HANGUL SYLLABLE HWAM;Lo;0;L;;;;;N;;;;; +D665;HANGUL SYLLABLE HWAB;Lo;0;L;;;;;N;;;;; +D666;HANGUL SYLLABLE HWABS;Lo;0;L;;;;;N;;;;; +D667;HANGUL SYLLABLE HWAS;Lo;0;L;;;;;N;;;;; +D668;HANGUL SYLLABLE HWASS;Lo;0;L;;;;;N;;;;; +D669;HANGUL SYLLABLE HWANG;Lo;0;L;;;;;N;;;;; +D66A;HANGUL SYLLABLE HWAJ;Lo;0;L;;;;;N;;;;; +D66B;HANGUL SYLLABLE HWAC;Lo;0;L;;;;;N;;;;; +D66C;HANGUL SYLLABLE HWAK;Lo;0;L;;;;;N;;;;; +D66D;HANGUL SYLLABLE HWAT;Lo;0;L;;;;;N;;;;; +D66E;HANGUL SYLLABLE HWAP;Lo;0;L;;;;;N;;;;; +D66F;HANGUL SYLLABLE HWAH;Lo;0;L;;;;;N;;;;; +D670;HANGUL SYLLABLE HWAE;Lo;0;L;;;;;N;;;;; +D671;HANGUL SYLLABLE HWAEG;Lo;0;L;;;;;N;;;;; +D672;HANGUL SYLLABLE HWAEGG;Lo;0;L;;;;;N;;;;; +D673;HANGUL SYLLABLE HWAEGS;Lo;0;L;;;;;N;;;;; +D674;HANGUL SYLLABLE HWAEN;Lo;0;L;;;;;N;;;;; +D675;HANGUL SYLLABLE HWAENI;Lo;0;L;;;;;N;;;;; +D676;HANGUL SYLLABLE HWAENH;Lo;0;L;;;;;N;;;;; +D677;HANGUL SYLLABLE HWAED;Lo;0;L;;;;;N;;;;; +D678;HANGUL SYLLABLE HWAEL;Lo;0;L;;;;;N;;;;; +D679;HANGUL SYLLABLE HWAELG;Lo;0;L;;;;;N;;;;; +D67A;HANGUL SYLLABLE HWAELM;Lo;0;L;;;;;N;;;;; +D67B;HANGUL SYLLABLE HWAELB;Lo;0;L;;;;;N;;;;; +D67C;HANGUL SYLLABLE HWAELS;Lo;0;L;;;;;N;;;;; +D67D;HANGUL SYLLABLE HWAELT;Lo;0;L;;;;;N;;;;; +D67E;HANGUL SYLLABLE HWAELP;Lo;0;L;;;;;N;;;;; +D67F;HANGUL SYLLABLE HWAELH;Lo;0;L;;;;;N;;;;; +D680;HANGUL SYLLABLE HWAEM;Lo;0;L;;;;;N;;;;; +D681;HANGUL SYLLABLE HWAEB;Lo;0;L;;;;;N;;;;; +D682;HANGUL SYLLABLE HWAEBS;Lo;0;L;;;;;N;;;;; +D683;HANGUL SYLLABLE HWAES;Lo;0;L;;;;;N;;;;; +D684;HANGUL SYLLABLE HWAESS;Lo;0;L;;;;;N;;;;; +D685;HANGUL SYLLABLE HWAENG;Lo;0;L;;;;;N;;;;; +D686;HANGUL SYLLABLE HWAEJ;Lo;0;L;;;;;N;;;;; +D687;HANGUL SYLLABLE HWAEC;Lo;0;L;;;;;N;;;;; +D688;HANGUL SYLLABLE HWAEK;Lo;0;L;;;;;N;;;;; +D689;HANGUL SYLLABLE HWAET;Lo;0;L;;;;;N;;;;; +D68A;HANGUL SYLLABLE HWAEP;Lo;0;L;;;;;N;;;;; +D68B;HANGUL SYLLABLE HWAEH;Lo;0;L;;;;;N;;;;; +D68C;HANGUL SYLLABLE HOE;Lo;0;L;;;;;N;;;;; +D68D;HANGUL SYLLABLE HOEG;Lo;0;L;;;;;N;;;;; +D68E;HANGUL SYLLABLE HOEGG;Lo;0;L;;;;;N;;;;; +D68F;HANGUL SYLLABLE HOEGS;Lo;0;L;;;;;N;;;;; +D690;HANGUL SYLLABLE HOEN;Lo;0;L;;;;;N;;;;; +D691;HANGUL SYLLABLE HOENI;Lo;0;L;;;;;N;;;;; +D692;HANGUL SYLLABLE HOENH;Lo;0;L;;;;;N;;;;; +D693;HANGUL SYLLABLE HOED;Lo;0;L;;;;;N;;;;; +D694;HANGUL SYLLABLE HOEL;Lo;0;L;;;;;N;;;;; +D695;HANGUL SYLLABLE HOELG;Lo;0;L;;;;;N;;;;; +D696;HANGUL SYLLABLE HOELM;Lo;0;L;;;;;N;;;;; +D697;HANGUL SYLLABLE HOELB;Lo;0;L;;;;;N;;;;; +D698;HANGUL SYLLABLE HOELS;Lo;0;L;;;;;N;;;;; +D699;HANGUL SYLLABLE HOELT;Lo;0;L;;;;;N;;;;; +D69A;HANGUL SYLLABLE HOELP;Lo;0;L;;;;;N;;;;; +D69B;HANGUL SYLLABLE HOELH;Lo;0;L;;;;;N;;;;; +D69C;HANGUL SYLLABLE HOEM;Lo;0;L;;;;;N;;;;; +D69D;HANGUL SYLLABLE HOEB;Lo;0;L;;;;;N;;;;; +D69E;HANGUL SYLLABLE HOEBS;Lo;0;L;;;;;N;;;;; +D69F;HANGUL SYLLABLE HOES;Lo;0;L;;;;;N;;;;; +D6A0;HANGUL SYLLABLE HOESS;Lo;0;L;;;;;N;;;;; +D6A1;HANGUL SYLLABLE HOENG;Lo;0;L;;;;;N;;;;; +D6A2;HANGUL SYLLABLE HOEJ;Lo;0;L;;;;;N;;;;; +D6A3;HANGUL SYLLABLE HOEC;Lo;0;L;;;;;N;;;;; +D6A4;HANGUL SYLLABLE HOEK;Lo;0;L;;;;;N;;;;; +D6A5;HANGUL SYLLABLE HOET;Lo;0;L;;;;;N;;;;; +D6A6;HANGUL SYLLABLE HOEP;Lo;0;L;;;;;N;;;;; +D6A7;HANGUL SYLLABLE HOEH;Lo;0;L;;;;;N;;;;; +D6A8;HANGUL SYLLABLE HYO;Lo;0;L;;;;;N;;;;; +D6A9;HANGUL SYLLABLE HYOG;Lo;0;L;;;;;N;;;;; +D6AA;HANGUL SYLLABLE HYOGG;Lo;0;L;;;;;N;;;;; +D6AB;HANGUL SYLLABLE HYOGS;Lo;0;L;;;;;N;;;;; +D6AC;HANGUL SYLLABLE HYON;Lo;0;L;;;;;N;;;;; +D6AD;HANGUL SYLLABLE HYONI;Lo;0;L;;;;;N;;;;; +D6AE;HANGUL SYLLABLE HYONH;Lo;0;L;;;;;N;;;;; +D6AF;HANGUL SYLLABLE HYOD;Lo;0;L;;;;;N;;;;; +D6B0;HANGUL SYLLABLE HYOL;Lo;0;L;;;;;N;;;;; +D6B1;HANGUL SYLLABLE HYOLG;Lo;0;L;;;;;N;;;;; +D6B2;HANGUL SYLLABLE HYOLM;Lo;0;L;;;;;N;;;;; +D6B3;HANGUL SYLLABLE HYOLB;Lo;0;L;;;;;N;;;;; +D6B4;HANGUL SYLLABLE HYOLS;Lo;0;L;;;;;N;;;;; +D6B5;HANGUL SYLLABLE HYOLT;Lo;0;L;;;;;N;;;;; +D6B6;HANGUL SYLLABLE HYOLP;Lo;0;L;;;;;N;;;;; +D6B7;HANGUL SYLLABLE HYOLH;Lo;0;L;;;;;N;;;;; +D6B8;HANGUL SYLLABLE HYOM;Lo;0;L;;;;;N;;;;; +D6B9;HANGUL SYLLABLE HYOB;Lo;0;L;;;;;N;;;;; +D6BA;HANGUL SYLLABLE HYOBS;Lo;0;L;;;;;N;;;;; +D6BB;HANGUL SYLLABLE HYOS;Lo;0;L;;;;;N;;;;; +D6BC;HANGUL SYLLABLE HYOSS;Lo;0;L;;;;;N;;;;; +D6BD;HANGUL SYLLABLE HYONG;Lo;0;L;;;;;N;;;;; +D6BE;HANGUL SYLLABLE HYOJ;Lo;0;L;;;;;N;;;;; +D6BF;HANGUL SYLLABLE HYOC;Lo;0;L;;;;;N;;;;; +D6C0;HANGUL SYLLABLE HYOK;Lo;0;L;;;;;N;;;;; +D6C1;HANGUL SYLLABLE HYOT;Lo;0;L;;;;;N;;;;; +D6C2;HANGUL SYLLABLE HYOP;Lo;0;L;;;;;N;;;;; +D6C3;HANGUL SYLLABLE HYOH;Lo;0;L;;;;;N;;;;; +D6C4;HANGUL SYLLABLE HU;Lo;0;L;;;;;N;;;;; +D6C5;HANGUL SYLLABLE HUG;Lo;0;L;;;;;N;;;;; +D6C6;HANGUL SYLLABLE HUGG;Lo;0;L;;;;;N;;;;; +D6C7;HANGUL SYLLABLE HUGS;Lo;0;L;;;;;N;;;;; +D6C8;HANGUL SYLLABLE HUN;Lo;0;L;;;;;N;;;;; +D6C9;HANGUL SYLLABLE HUNI;Lo;0;L;;;;;N;;;;; +D6CA;HANGUL SYLLABLE HUNH;Lo;0;L;;;;;N;;;;; +D6CB;HANGUL SYLLABLE HUD;Lo;0;L;;;;;N;;;;; +D6CC;HANGUL SYLLABLE HUL;Lo;0;L;;;;;N;;;;; +D6CD;HANGUL SYLLABLE HULG;Lo;0;L;;;;;N;;;;; +D6CE;HANGUL SYLLABLE HULM;Lo;0;L;;;;;N;;;;; +D6CF;HANGUL SYLLABLE HULB;Lo;0;L;;;;;N;;;;; +D6D0;HANGUL SYLLABLE HULS;Lo;0;L;;;;;N;;;;; +D6D1;HANGUL SYLLABLE HULT;Lo;0;L;;;;;N;;;;; +D6D2;HANGUL SYLLABLE HULP;Lo;0;L;;;;;N;;;;; +D6D3;HANGUL SYLLABLE HULH;Lo;0;L;;;;;N;;;;; +D6D4;HANGUL SYLLABLE HUM;Lo;0;L;;;;;N;;;;; +D6D5;HANGUL SYLLABLE HUB;Lo;0;L;;;;;N;;;;; +D6D6;HANGUL SYLLABLE HUBS;Lo;0;L;;;;;N;;;;; +D6D7;HANGUL SYLLABLE HUS;Lo;0;L;;;;;N;;;;; +D6D8;HANGUL SYLLABLE HUSS;Lo;0;L;;;;;N;;;;; +D6D9;HANGUL SYLLABLE HUNG;Lo;0;L;;;;;N;;;;; +D6DA;HANGUL SYLLABLE HUJ;Lo;0;L;;;;;N;;;;; +D6DB;HANGUL SYLLABLE HUC;Lo;0;L;;;;;N;;;;; +D6DC;HANGUL SYLLABLE HUK;Lo;0;L;;;;;N;;;;; +D6DD;HANGUL SYLLABLE HUT;Lo;0;L;;;;;N;;;;; +D6DE;HANGUL SYLLABLE HUP;Lo;0;L;;;;;N;;;;; +D6DF;HANGUL SYLLABLE HUH;Lo;0;L;;;;;N;;;;; +D6E0;HANGUL SYLLABLE HWEO;Lo;0;L;;;;;N;;;;; +D6E1;HANGUL SYLLABLE HWEOG;Lo;0;L;;;;;N;;;;; +D6E2;HANGUL SYLLABLE HWEOGG;Lo;0;L;;;;;N;;;;; +D6E3;HANGUL SYLLABLE HWEOGS;Lo;0;L;;;;;N;;;;; +D6E4;HANGUL SYLLABLE HWEON;Lo;0;L;;;;;N;;;;; +D6E5;HANGUL SYLLABLE HWEONI;Lo;0;L;;;;;N;;;;; +D6E6;HANGUL SYLLABLE HWEONH;Lo;0;L;;;;;N;;;;; +D6E7;HANGUL SYLLABLE HWEOD;Lo;0;L;;;;;N;;;;; +D6E8;HANGUL SYLLABLE HWEOL;Lo;0;L;;;;;N;;;;; +D6E9;HANGUL SYLLABLE HWEOLG;Lo;0;L;;;;;N;;;;; +D6EA;HANGUL SYLLABLE HWEOLM;Lo;0;L;;;;;N;;;;; +D6EB;HANGUL SYLLABLE HWEOLB;Lo;0;L;;;;;N;;;;; +D6EC;HANGUL SYLLABLE HWEOLS;Lo;0;L;;;;;N;;;;; +D6ED;HANGUL SYLLABLE HWEOLT;Lo;0;L;;;;;N;;;;; +D6EE;HANGUL SYLLABLE HWEOLP;Lo;0;L;;;;;N;;;;; +D6EF;HANGUL SYLLABLE HWEOLH;Lo;0;L;;;;;N;;;;; +D6F0;HANGUL SYLLABLE HWEOM;Lo;0;L;;;;;N;;;;; +D6F1;HANGUL SYLLABLE HWEOB;Lo;0;L;;;;;N;;;;; +D6F2;HANGUL SYLLABLE HWEOBS;Lo;0;L;;;;;N;;;;; +D6F3;HANGUL SYLLABLE HWEOS;Lo;0;L;;;;;N;;;;; +D6F4;HANGUL SYLLABLE HWEOSS;Lo;0;L;;;;;N;;;;; +D6F5;HANGUL SYLLABLE HWEONG;Lo;0;L;;;;;N;;;;; +D6F6;HANGUL SYLLABLE HWEOJ;Lo;0;L;;;;;N;;;;; +D6F7;HANGUL SYLLABLE HWEOC;Lo;0;L;;;;;N;;;;; +D6F8;HANGUL SYLLABLE HWEOK;Lo;0;L;;;;;N;;;;; +D6F9;HANGUL SYLLABLE HWEOT;Lo;0;L;;;;;N;;;;; +D6FA;HANGUL SYLLABLE HWEOP;Lo;0;L;;;;;N;;;;; +D6FB;HANGUL SYLLABLE HWEOH;Lo;0;L;;;;;N;;;;; +D6FC;HANGUL SYLLABLE HWE;Lo;0;L;;;;;N;;;;; +D6FD;HANGUL SYLLABLE HWEG;Lo;0;L;;;;;N;;;;; +D6FE;HANGUL SYLLABLE HWEGG;Lo;0;L;;;;;N;;;;; +D6FF;HANGUL SYLLABLE HWEGS;Lo;0;L;;;;;N;;;;; +D700;HANGUL SYLLABLE HWEN;Lo;0;L;;;;;N;;;;; +D701;HANGUL SYLLABLE HWENI;Lo;0;L;;;;;N;;;;; +D702;HANGUL SYLLABLE HWENH;Lo;0;L;;;;;N;;;;; +D703;HANGUL SYLLABLE HWED;Lo;0;L;;;;;N;;;;; +D704;HANGUL SYLLABLE HWEL;Lo;0;L;;;;;N;;;;; +D705;HANGUL SYLLABLE HWELG;Lo;0;L;;;;;N;;;;; +D706;HANGUL SYLLABLE HWELM;Lo;0;L;;;;;N;;;;; +D707;HANGUL SYLLABLE HWELB;Lo;0;L;;;;;N;;;;; +D708;HANGUL SYLLABLE HWELS;Lo;0;L;;;;;N;;;;; +D709;HANGUL SYLLABLE HWELT;Lo;0;L;;;;;N;;;;; +D70A;HANGUL SYLLABLE HWELP;Lo;0;L;;;;;N;;;;; +D70B;HANGUL SYLLABLE HWELH;Lo;0;L;;;;;N;;;;; +D70C;HANGUL SYLLABLE HWEM;Lo;0;L;;;;;N;;;;; +D70D;HANGUL SYLLABLE HWEB;Lo;0;L;;;;;N;;;;; +D70E;HANGUL SYLLABLE HWEBS;Lo;0;L;;;;;N;;;;; +D70F;HANGUL SYLLABLE HWES;Lo;0;L;;;;;N;;;;; +D710;HANGUL SYLLABLE HWESS;Lo;0;L;;;;;N;;;;; +D711;HANGUL SYLLABLE HWENG;Lo;0;L;;;;;N;;;;; +D712;HANGUL SYLLABLE HWEJ;Lo;0;L;;;;;N;;;;; +D713;HANGUL SYLLABLE HWEC;Lo;0;L;;;;;N;;;;; +D714;HANGUL SYLLABLE HWEK;Lo;0;L;;;;;N;;;;; +D715;HANGUL SYLLABLE HWET;Lo;0;L;;;;;N;;;;; +D716;HANGUL SYLLABLE HWEP;Lo;0;L;;;;;N;;;;; +D717;HANGUL SYLLABLE HWEH;Lo;0;L;;;;;N;;;;; +D718;HANGUL SYLLABLE HWI;Lo;0;L;;;;;N;;;;; +D719;HANGUL SYLLABLE HWIG;Lo;0;L;;;;;N;;;;; +D71A;HANGUL SYLLABLE HWIGG;Lo;0;L;;;;;N;;;;; +D71B;HANGUL SYLLABLE HWIGS;Lo;0;L;;;;;N;;;;; +D71C;HANGUL SYLLABLE HWIN;Lo;0;L;;;;;N;;;;; +D71D;HANGUL SYLLABLE HWINI;Lo;0;L;;;;;N;;;;; +D71E;HANGUL SYLLABLE HWINH;Lo;0;L;;;;;N;;;;; +D71F;HANGUL SYLLABLE HWID;Lo;0;L;;;;;N;;;;; +D720;HANGUL SYLLABLE HWIL;Lo;0;L;;;;;N;;;;; +D721;HANGUL SYLLABLE HWILG;Lo;0;L;;;;;N;;;;; +D722;HANGUL SYLLABLE HWILM;Lo;0;L;;;;;N;;;;; +D723;HANGUL SYLLABLE HWILB;Lo;0;L;;;;;N;;;;; +D724;HANGUL SYLLABLE HWILS;Lo;0;L;;;;;N;;;;; +D725;HANGUL SYLLABLE HWILT;Lo;0;L;;;;;N;;;;; +D726;HANGUL SYLLABLE HWILP;Lo;0;L;;;;;N;;;;; +D727;HANGUL SYLLABLE HWILH;Lo;0;L;;;;;N;;;;; +D728;HANGUL SYLLABLE HWIM;Lo;0;L;;;;;N;;;;; +D729;HANGUL SYLLABLE HWIB;Lo;0;L;;;;;N;;;;; +D72A;HANGUL SYLLABLE HWIBS;Lo;0;L;;;;;N;;;;; +D72B;HANGUL SYLLABLE HWIS;Lo;0;L;;;;;N;;;;; +D72C;HANGUL SYLLABLE HWISS;Lo;0;L;;;;;N;;;;; +D72D;HANGUL SYLLABLE HWING;Lo;0;L;;;;;N;;;;; +D72E;HANGUL SYLLABLE HWIJ;Lo;0;L;;;;;N;;;;; +D72F;HANGUL SYLLABLE HWIC;Lo;0;L;;;;;N;;;;; +D730;HANGUL SYLLABLE HWIK;Lo;0;L;;;;;N;;;;; +D731;HANGUL SYLLABLE HWIT;Lo;0;L;;;;;N;;;;; +D732;HANGUL SYLLABLE HWIP;Lo;0;L;;;;;N;;;;; +D733;HANGUL SYLLABLE HWIH;Lo;0;L;;;;;N;;;;; +D734;HANGUL SYLLABLE HYU;Lo;0;L;;;;;N;;;;; +D735;HANGUL SYLLABLE HYUG;Lo;0;L;;;;;N;;;;; +D736;HANGUL SYLLABLE HYUGG;Lo;0;L;;;;;N;;;;; +D737;HANGUL SYLLABLE HYUGS;Lo;0;L;;;;;N;;;;; +D738;HANGUL SYLLABLE HYUN;Lo;0;L;;;;;N;;;;; +D739;HANGUL SYLLABLE HYUNI;Lo;0;L;;;;;N;;;;; +D73A;HANGUL SYLLABLE HYUNH;Lo;0;L;;;;;N;;;;; +D73B;HANGUL SYLLABLE HYUD;Lo;0;L;;;;;N;;;;; +D73C;HANGUL SYLLABLE HYUL;Lo;0;L;;;;;N;;;;; +D73D;HANGUL SYLLABLE HYULG;Lo;0;L;;;;;N;;;;; +D73E;HANGUL SYLLABLE HYULM;Lo;0;L;;;;;N;;;;; +D73F;HANGUL SYLLABLE HYULB;Lo;0;L;;;;;N;;;;; +D740;HANGUL SYLLABLE HYULS;Lo;0;L;;;;;N;;;;; +D741;HANGUL SYLLABLE HYULT;Lo;0;L;;;;;N;;;;; +D742;HANGUL SYLLABLE HYULP;Lo;0;L;;;;;N;;;;; +D743;HANGUL SYLLABLE HYULH;Lo;0;L;;;;;N;;;;; +D744;HANGUL SYLLABLE HYUM;Lo;0;L;;;;;N;;;;; +D745;HANGUL SYLLABLE HYUB;Lo;0;L;;;;;N;;;;; +D746;HANGUL SYLLABLE HYUBS;Lo;0;L;;;;;N;;;;; +D747;HANGUL SYLLABLE HYUS;Lo;0;L;;;;;N;;;;; +D748;HANGUL SYLLABLE HYUSS;Lo;0;L;;;;;N;;;;; +D749;HANGUL SYLLABLE HYUNG;Lo;0;L;;;;;N;;;;; +D74A;HANGUL SYLLABLE HYUJ;Lo;0;L;;;;;N;;;;; +D74B;HANGUL SYLLABLE HYUC;Lo;0;L;;;;;N;;;;; +D74C;HANGUL SYLLABLE HYUK;Lo;0;L;;;;;N;;;;; +D74D;HANGUL SYLLABLE HYUT;Lo;0;L;;;;;N;;;;; +D74E;HANGUL SYLLABLE HYUP;Lo;0;L;;;;;N;;;;; +D74F;HANGUL SYLLABLE HYUH;Lo;0;L;;;;;N;;;;; +D750;HANGUL SYLLABLE HEU;Lo;0;L;;;;;N;;;;; +D751;HANGUL SYLLABLE HEUG;Lo;0;L;;;;;N;;;;; +D752;HANGUL SYLLABLE HEUGG;Lo;0;L;;;;;N;;;;; +D753;HANGUL SYLLABLE HEUGS;Lo;0;L;;;;;N;;;;; +D754;HANGUL SYLLABLE HEUN;Lo;0;L;;;;;N;;;;; +D755;HANGUL SYLLABLE HEUNI;Lo;0;L;;;;;N;;;;; +D756;HANGUL SYLLABLE HEUNH;Lo;0;L;;;;;N;;;;; +D757;HANGUL SYLLABLE HEUD;Lo;0;L;;;;;N;;;;; +D758;HANGUL SYLLABLE HEUL;Lo;0;L;;;;;N;;;;; +D759;HANGUL SYLLABLE HEULG;Lo;0;L;;;;;N;;;;; +D75A;HANGUL SYLLABLE HEULM;Lo;0;L;;;;;N;;;;; +D75B;HANGUL SYLLABLE HEULB;Lo;0;L;;;;;N;;;;; +D75C;HANGUL SYLLABLE HEULS;Lo;0;L;;;;;N;;;;; +D75D;HANGUL SYLLABLE HEULT;Lo;0;L;;;;;N;;;;; +D75E;HANGUL SYLLABLE HEULP;Lo;0;L;;;;;N;;;;; +D75F;HANGUL SYLLABLE HEULH;Lo;0;L;;;;;N;;;;; +D760;HANGUL SYLLABLE HEUM;Lo;0;L;;;;;N;;;;; +D761;HANGUL SYLLABLE HEUB;Lo;0;L;;;;;N;;;;; +D762;HANGUL SYLLABLE HEUBS;Lo;0;L;;;;;N;;;;; +D763;HANGUL SYLLABLE HEUS;Lo;0;L;;;;;N;;;;; +D764;HANGUL SYLLABLE HEUSS;Lo;0;L;;;;;N;;;;; +D765;HANGUL SYLLABLE HEUNG;Lo;0;L;;;;;N;;;;; +D766;HANGUL SYLLABLE HEUJ;Lo;0;L;;;;;N;;;;; +D767;HANGUL SYLLABLE HEUC;Lo;0;L;;;;;N;;;;; +D768;HANGUL SYLLABLE HEUK;Lo;0;L;;;;;N;;;;; +D769;HANGUL SYLLABLE HEUT;Lo;0;L;;;;;N;;;;; +D76A;HANGUL SYLLABLE HEUP;Lo;0;L;;;;;N;;;;; +D76B;HANGUL SYLLABLE HEUH;Lo;0;L;;;;;N;;;;; +D76C;HANGUL SYLLABLE HYI;Lo;0;L;;;;;N;;;;; +D76D;HANGUL SYLLABLE HYIG;Lo;0;L;;;;;N;;;;; +D76E;HANGUL SYLLABLE HYIGG;Lo;0;L;;;;;N;;;;; +D76F;HANGUL SYLLABLE HYIGS;Lo;0;L;;;;;N;;;;; +D770;HANGUL SYLLABLE HYIN;Lo;0;L;;;;;N;;;;; +D771;HANGUL SYLLABLE HYINI;Lo;0;L;;;;;N;;;;; +D772;HANGUL SYLLABLE HYINH;Lo;0;L;;;;;N;;;;; +D773;HANGUL SYLLABLE HYID;Lo;0;L;;;;;N;;;;; +D774;HANGUL SYLLABLE HYIL;Lo;0;L;;;;;N;;;;; +D775;HANGUL SYLLABLE HYILG;Lo;0;L;;;;;N;;;;; +D776;HANGUL SYLLABLE HYILM;Lo;0;L;;;;;N;;;;; +D777;HANGUL SYLLABLE HYILB;Lo;0;L;;;;;N;;;;; +D778;HANGUL SYLLABLE HYILS;Lo;0;L;;;;;N;;;;; +D779;HANGUL SYLLABLE HYILT;Lo;0;L;;;;;N;;;;; +D77A;HANGUL SYLLABLE HYILP;Lo;0;L;;;;;N;;;;; +D77B;HANGUL SYLLABLE HYILH;Lo;0;L;;;;;N;;;;; +D77C;HANGUL SYLLABLE HYIM;Lo;0;L;;;;;N;;;;; +D77D;HANGUL SYLLABLE HYIB;Lo;0;L;;;;;N;;;;; +D77E;HANGUL SYLLABLE HYIBS;Lo;0;L;;;;;N;;;;; +D77F;HANGUL SYLLABLE HYIS;Lo;0;L;;;;;N;;;;; +D780;HANGUL SYLLABLE HYISS;Lo;0;L;;;;;N;;;;; +D781;HANGUL SYLLABLE HYING;Lo;0;L;;;;;N;;;;; +D782;HANGUL SYLLABLE HYIJ;Lo;0;L;;;;;N;;;;; +D783;HANGUL SYLLABLE HYIC;Lo;0;L;;;;;N;;;;; +D784;HANGUL SYLLABLE HYIK;Lo;0;L;;;;;N;;;;; +D785;HANGUL SYLLABLE HYIT;Lo;0;L;;;;;N;;;;; +D786;HANGUL SYLLABLE HYIP;Lo;0;L;;;;;N;;;;; +D787;HANGUL SYLLABLE HYIH;Lo;0;L;;;;;N;;;;; +D788;HANGUL SYLLABLE HI;Lo;0;L;;;;;N;;;;; +D789;HANGUL SYLLABLE HIG;Lo;0;L;;;;;N;;;;; +D78A;HANGUL SYLLABLE HIGG;Lo;0;L;;;;;N;;;;; +D78B;HANGUL SYLLABLE HIGS;Lo;0;L;;;;;N;;;;; +D78C;HANGUL SYLLABLE HIN;Lo;0;L;;;;;N;;;;; +D78D;HANGUL SYLLABLE HINI;Lo;0;L;;;;;N;;;;; +D78E;HANGUL SYLLABLE HINH;Lo;0;L;;;;;N;;;;; +D78F;HANGUL SYLLABLE HID;Lo;0;L;;;;;N;;;;; +D790;HANGUL SYLLABLE HIL;Lo;0;L;;;;;N;;;;; +D791;HANGUL SYLLABLE HILG;Lo;0;L;;;;;N;;;;; +D792;HANGUL SYLLABLE HILM;Lo;0;L;;;;;N;;;;; +D793;HANGUL SYLLABLE HILB;Lo;0;L;;;;;N;;;;; +D794;HANGUL SYLLABLE HILS;Lo;0;L;;;;;N;;;;; +D795;HANGUL SYLLABLE HILT;Lo;0;L;;;;;N;;;;; +D796;HANGUL SYLLABLE HILP;Lo;0;L;;;;;N;;;;; +D797;HANGUL SYLLABLE HILH;Lo;0;L;;;;;N;;;;; +D798;HANGUL SYLLABLE HIM;Lo;0;L;;;;;N;;;;; +D799;HANGUL SYLLABLE HIB;Lo;0;L;;;;;N;;;;; +D79A;HANGUL SYLLABLE HIBS;Lo;0;L;;;;;N;;;;; +D79B;HANGUL SYLLABLE HIS;Lo;0;L;;;;;N;;;;; +D79C;HANGUL SYLLABLE HISS;Lo;0;L;;;;;N;;;;; +D79D;HANGUL SYLLABLE HING;Lo;0;L;;;;;N;;;;; +D79E;HANGUL SYLLABLE HIJ;Lo;0;L;;;;;N;;;;; +D79F;HANGUL SYLLABLE HIC;Lo;0;L;;;;;N;;;;; +D7A0;HANGUL SYLLABLE HIK;Lo;0;L;;;;;N;;;;; +D7A1;HANGUL SYLLABLE HIT;Lo;0;L;;;;;N;;;;; +D7A2;HANGUL SYLLABLE HIP;Lo;0;L;;;;;N;;;;; +D7A3;HANGUL SYLLABLE HIH;Lo;0;L;;;;;N;;;;; +F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;; +F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;; +F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;; +F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;; +F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;; +F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;; +F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;; +F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;; +F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;; +F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;; +F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;; +F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;; +F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;; +F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;; +F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;; +F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;; +F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;; +F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;; +F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;; +F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;; +F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;; +F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;; +F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;; +F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;; +F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;; +F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;; +F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;; +F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;; +F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;; +F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;; +F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;; +F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;; +F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;; +F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;; +F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;; +F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;; +F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;; +F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;; +F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;; +F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;; +F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;; +F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;; +F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;; +F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;; +F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;; +F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;; +F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;; +F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;; +F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;; +F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;; +F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;; +F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;; +F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;; +F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;; +F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;; +F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;; +F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;; +F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;; +F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;; +F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;; +F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;; +F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;; +F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;; +F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;; +F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;; +F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;; +F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;; +F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;; +F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;; +F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;; +F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;; +F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;; +F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;; +F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;; +F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;; +F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;; +F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;; +F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;; +F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;; +F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;; +F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;; +F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;; +F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;; +F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;; +F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;; +F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;; +F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;; +F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;; +F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;; +F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;; +F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;; +F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;; +F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;; +F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;; +F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;; +F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;; +F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;; +F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;; +F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;; +F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;; +F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;; +F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;; +F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;; +F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;; +F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;; +F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;; +F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;; +F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;; +F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;; +F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;; +F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;; +F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;; +F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;; +F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;; +F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;; +F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;; +F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;; +F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;; +F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;; +F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;; +F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;; +F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;; +F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;; +F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;; +F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;; +F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;; +F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;; +F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;; +F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;; +F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;; +F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;; +F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;; +F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;; +F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;; +F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;; +F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;; +F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;; +F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;; +F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;; +F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;; +F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;; +F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;; +F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;; +F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;; +F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;; +F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;; +F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;; +F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;; +F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;; +F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;; +F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;; +F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;; +F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;; +F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;; +F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;; +F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;; +F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;; +F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;; +F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;; +F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;; +F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;; +F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;; +F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;; +F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;; +F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;; +F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;; +F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;; +F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;; +F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;; +F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;; +F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;; +F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;; +F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;; +F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;; +F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;; +F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;; +F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;; +F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;; +F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;; +F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;; +F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;; +F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;; +F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;; +F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;; +F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;; +F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;; +F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;; +F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;; +F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;; +F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;; +F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;; +F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;; +F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;; +F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;; +F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;; +F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;; +F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;; +F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;; +F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;; +F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;; +F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;; +F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;; +F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;; +F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;; +F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;; +F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;; +F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;; +F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;; +F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;; +F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;; +F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;; +F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;; +F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;; +F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;; +F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;; +F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;; +F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;; +F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;; +F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;; +F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;; +F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;; +F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;; +F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;; +F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;; +F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;; +F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;; +F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;; +F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;; +F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;; +F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;; +F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;; +F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;; +F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;; +F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;; +F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;; +F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;; +F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;; +F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;; +F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;; +F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;; +F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;; +F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;; +F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;; +F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;; +F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;; +F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;; +F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;; +F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;; +F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;; +F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;; +F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;; +F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;; +F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;; +F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;; +F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;; +F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;; +FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;; +FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;; +FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;; +FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;; +FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;; +FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;; +FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;; +FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;; +FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;; +FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;; +FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;; +FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;; +FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;; +FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;; +FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;; +FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;; +FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;; +FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;; +FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;; +FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;; +FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;; +FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;; +FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;; +FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;; +FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;; +FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;; +FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;; +FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;; +FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;; +FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;; +FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;; +FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;; +FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;; +FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;; +FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;; +FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;; +FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;; +FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;; +FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;; +FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;; +FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;; +FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;; +FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;; +FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;; +FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;; +FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;; +FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;; +FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;; +FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;; +FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;; +FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;; +FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;; +FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;; +FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;; +FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;; +FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;; +FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;; +FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;; +FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;; +FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;; +FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;; +FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;; +FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;; +FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;; +FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;; +FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;; +FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;; +FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;; +FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;; +FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;; +FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;; +FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;; +FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;; +FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;; +FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;; +FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;; +FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;; +FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;; +FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;; +FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;; +FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;; +FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;; +FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;; +FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;; +FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;; +FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;; +FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;; +FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;; +FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;; +FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;; +FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;; +FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;; +FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;; +FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;; +FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;; +FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;; +FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;; +FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;; +FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;; +FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;; +FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;; +FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;; +FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;; +FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;; +FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;; +FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;; +FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;; +FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;; +FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;; +FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;; +FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;; +FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;; +FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;; +FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;; +FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;; +FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;; +FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;; +FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;; +FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;; +FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;; +FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;; +FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;; +FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;; +FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;; +FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;; +FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;; +FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;; +FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;; +FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;; +FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;; +FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;; +FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;; +FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;; +FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;; +FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;; +FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;; +FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;; +FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;; +FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;; +FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;; +FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;; +FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;; +FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;; +FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;; +FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;; +FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;; +FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;; +FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;; +FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;; +FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;; +FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;; +FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;; +FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;; +FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;; +FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;; +FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;; +FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;; +FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;; +FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;; +FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;; +FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;; +FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;; +FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;; +FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;; +FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;; +FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;; +FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;; +FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;; +FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;; +FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;; +FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;; +FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;; +FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;; +FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;; +FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;; +FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;; +FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;; +FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;; +FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;; +FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;; +FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;; +FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;; +FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;; +FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;; +FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;; +FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;; +FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;; +FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;; +FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;; +FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;; +FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;; +FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;; +FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;; +FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;; +FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;; +FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;; +FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;; +FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;; +FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;; +FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;; +FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;; +FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;; +FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;; +FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;; +FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;; +FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;; +FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;; +FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;; +FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;; +FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;; +FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;; +FB00;LATIN SMALL LIGATURE FF;Ll;0;L; 0066 0066;;;;N;;;;; +FB01;LATIN SMALL LIGATURE FI;Ll;0;L; 0066 0069;;;;N;;;;; +FB02;LATIN SMALL LIGATURE FL;Ll;0;L; 0066 006C;;;;N;;;;; +FB03;LATIN SMALL LIGATURE FFI;Ll;0;L; 0066 0066 0069;;;;N;;;;; +FB04;LATIN SMALL LIGATURE FFL;Ll;0;L; 0066 0066 006C;;;;N;;;;; +FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L; 017F 0074;;;;N;;;;; +FB06;LATIN SMALL LIGATURE ST;Ll;0;L; 0073 0074;;;;N;;;;; +FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L; 0574 0576;;;;N;;;;; +FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L; 0574 0565;;;;N;;;;; +FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L; 0574 056B;;;;N;;;;; +FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L; 057E 0576;;;;N;;;;; +FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L; 0574 056D;;;;N;;;;; +FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;; +FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;; +FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;; +FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R; 05E2;;;;N;;;;; +FB21;HEBREW LETTER WIDE ALEF;Lo;0;R; 05D0;;;;N;;;;; +FB22;HEBREW LETTER WIDE DALET;Lo;0;R; 05D3;;;;N;;;;; +FB23;HEBREW LETTER WIDE HE;Lo;0;R; 05D4;;;;N;;;;; +FB24;HEBREW LETTER WIDE KAF;Lo;0;R; 05DB;;;;N;;;;; +FB25;HEBREW LETTER WIDE LAMED;Lo;0;R; 05DC;;;;N;;;;; +FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R; 05DD;;;;N;;;;; +FB27;HEBREW LETTER WIDE RESH;Lo;0;R; 05E8;;;;N;;;;; +FB28;HEBREW LETTER WIDE TAV;Lo;0;R; 05EA;;;;N;;;;; +FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; +FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;; +FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;; +FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;; +FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;; +FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;; +FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;; +FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;; +FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;; +FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;; +FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;; +FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;; +FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;; +FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;; +FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;; +FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;; +FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;; +FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;; +FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;; +FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;; +FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;; +FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;; +FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;; +FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;; +FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;; +FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;; +FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;; +FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;; +FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;; +FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;; +FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;; +FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;; +FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;; +FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R; 05D0 05DC;;;;N;;;;; +FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL; 0671;;;;N;;;;; +FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL; 0671;;;;N;;;;; +FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL; 067B;;;;N;;;;; +FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL; 067B;;;;N;;;;; +FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL; 067B;;;;N;;;;; +FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL; 067B;;;;N;;;;; +FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL; 067E;;;;N;;;;; +FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL; 067E;;;;N;;;;; +FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL; 067E;;;;N;;;;; +FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL; 067E;;;;N;;;;; +FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL; 0680;;;;N;;;;; +FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL; 0680;;;;N;;;;; +FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL; 0680;;;;N;;;;; +FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL; 0680;;;;N;;;;; +FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL; 067A;;;;N;;;;; +FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL; 067A;;;;N;;;;; +FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL; 067A;;;;N;;;;; +FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL; 067A;;;;N;;;;; +FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL; 067F;;;;N;;;;; +FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL; 067F;;;;N;;;;; +FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL; 067F;;;;N;;;;; +FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL; 067F;;;;N;;;;; +FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL; 0679;;;;N;;;;; +FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL; 0679;;;;N;;;;; +FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL; 0679;;;;N;;;;; +FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL; 0679;;;;N;;;;; +FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL; 06A4;;;;N;;;;; +FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL; 06A4;;;;N;;;;; +FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; +FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL; 06A4;;;;N;;;;; +FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL; 06A6;;;;N;;;;; +FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL; 06A6;;;;N;;;;; +FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; +FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL; 06A6;;;;N;;;;; +FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL; 0684;;;;N;;;;; +FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL; 0684;;;;N;;;;; +FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL; 0684;;;;N;;;;; +FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL; 0684;;;;N;;;;; +FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL; 0683;;;;N;;;;; +FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL; 0683;;;;N;;;;; +FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL; 0683;;;;N;;;;; +FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL; 0683;;;;N;;;;; +FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL; 0686;;;;N;;;;; +FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL; 0686;;;;N;;;;; +FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL; 0686;;;;N;;;;; +FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL; 0686;;;;N;;;;; +FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL; 0687;;;;N;;;;; +FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL; 0687;;;;N;;;;; +FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL; 0687;;;;N;;;;; +FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL; 0687;;;;N;;;;; +FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL; 068D;;;;N;;;;; +FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL; 068D;;;;N;;;;; +FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL; 068C;;;;N;;;;; +FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL; 068C;;;;N;;;;; +FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL; 068E;;;;N;;;;; +FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL; 068E;;;;N;;;;; +FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL; 0688;;;;N;;;;; +FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL; 0688;;;;N;;;;; +FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL; 0698;;;;N;;;;; +FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL; 0698;;;;N;;;;; +FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL; 0691;;;;N;;;;; +FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL; 0691;;;;N;;;;; +FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL; 06A9;;;;N;;;;; +FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL; 06A9;;;;N;;;;; +FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; +FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL; 06A9;;;;N;;;;; +FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL; 06AF;;;;N;;;;; +FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL; 06AF;;;;N;;;;; +FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; +FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL; 06AF;;;;N;;;;; +FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL; 06B3;;;;N;;;;; +FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL; 06B3;;;;N;;;;; +FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; +FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL; 06B3;;;;N;;;;; +FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL; 06B1;;;;N;;;;; +FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL; 06B1;;;;N;;;;; +FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; +FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL; 06B1;;;;N;;;;; +FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL; 06BA;;;;N;;;;; +FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL; 06BA;;;;N;;;;; +FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL; 06BB;;;;N;;;;; +FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL; 06BB;;;;N;;;;; +FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; +FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL; 06BB;;;;N;;;;; +FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL; 06C0;;;;N;;;;; +FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL; 06C0;;;;N;;;;; +FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL; 06C1;;;;N;;;;; +FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL; 06C1;;;;N;;;;; +FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; +FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL; 06C1;;;;N;;;;; +FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL; 06BE;;;;N;;;;; +FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL; 06BE;;;;N;;;;; +FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; +FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL; 06BE;;;;N;;;;; +FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL; 06D2;;;;N;;;;; +FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL; 06D2;;;;N;;;;; +FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 06D3;;;;N;;;;; +FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 06D3;;;;N;;;;; +FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; +FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; +FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; +FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; +FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL; 06C7;;;;N;;;;; +FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL; 06C7;;;;N;;;;; +FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL; 06C6;;;;N;;;;; +FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL; 06C6;;;;N;;;;; +FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL; 06C8;;;;N;;;;; +FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL; 06C8;;;;N;;;;; +FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0677;;;;N;;;;; +FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL; 06CB;;;;N;;;;; +FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL; 06CB;;;;N;;;;; +FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL; 06C5;;;;N;;;;; +FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL; 06C5;;;;N;;;;; +FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL; 06C9;;;;N;;;;; +FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL; 06C9;;;;N;;;;; +FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL; 06D0;;;;N;;;;; +FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL; 06D0;;;;N;;;;; +FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; +FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL; 06D0;;;;N;;;;; +FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0649;;;;N;;;;; +FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL; 0649;;;;N;;;;; +FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL; 0626 0627;;;;N;;;;; +FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL; 0626 0627;;;;N;;;;; +FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; +FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL; 0626 06D5;;;;N;;;;; +FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL; 0626 0648;;;;N;;;;; +FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL; 0626 0648;;;;N;;;;; +FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; +FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL; 0626 06C7;;;;N;;;;; +FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; +FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL; 0626 06C6;;;;N;;;;; +FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; +FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL; 0626 06C8;;;;N;;;;; +FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; +FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; +FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL; 0626 06D0;;;;N;;;;; +FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; +FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; +FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; +FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL; 06CC;;;;N;;;;; +FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL; 06CC;;;;N;;;;; +FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; +FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL; 06CC;;;;N;;;;; +FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL; 0626 062C;;;;N;;;;; +FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL; 0626 062D;;;;N;;;;; +FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL; 0626 0645;;;;N;;;;; +FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0626 0649;;;;N;;;;; +FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL; 0626 064A;;;;N;;;;; +FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0628 062C;;;;N;;;;; +FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL; 0628 062D;;;;N;;;;; +FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0628 062E;;;;N;;;;; +FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0628 0645;;;;N;;;;; +FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0628 0649;;;;N;;;;; +FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL; 0628 064A;;;;N;;;;; +FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062A 062C;;;;N;;;;; +FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL; 062A 062D;;;;N;;;;; +FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL; 062A 062E;;;;N;;;;; +FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062A 0645;;;;N;;;;; +FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062A 0649;;;;N;;;;; +FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL; 062A 064A;;;;N;;;;; +FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL; 062B 062C;;;;N;;;;; +FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL; 062B 0645;;;;N;;;;; +FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062B 0649;;;;N;;;;; +FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL; 062B 064A;;;;N;;;;; +FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL; 062C 062D;;;;N;;;;; +FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 062C 0645;;;;N;;;;; +FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062D 062C;;;;N;;;;; +FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062D 0645;;;;N;;;;; +FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL; 062E 062C;;;;N;;;;; +FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL; 062E 062D;;;;N;;;;; +FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL; 062E 0645;;;;N;;;;; +FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0633 062C;;;;N;;;;; +FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0633 062D;;;;N;;;;; +FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0633 062E;;;;N;;;;; +FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0633 0645;;;;N;;;;; +FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL; 0635 062D;;;;N;;;;; +FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0635 0645;;;;N;;;;; +FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL; 0636 062C;;;;N;;;;; +FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL; 0636 062D;;;;N;;;;; +FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL; 0636 062E;;;;N;;;;; +FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL; 0636 0645;;;;N;;;;; +FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL; 0637 062D;;;;N;;;;; +FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0637 0645;;;;N;;;;; +FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL; 0638 0645;;;;N;;;;; +FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL; 0639 062C;;;;N;;;;; +FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL; 0639 0645;;;;N;;;;; +FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL; 063A 062C;;;;N;;;;; +FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL; 063A 0645;;;;N;;;;; +FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0641 062C;;;;N;;;;; +FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL; 0641 062D;;;;N;;;;; +FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL; 0641 062E;;;;N;;;;; +FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0641 0645;;;;N;;;;; +FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0641 0649;;;;N;;;;; +FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL; 0641 064A;;;;N;;;;; +FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL; 0642 062D;;;;N;;;;; +FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0642 0645;;;;N;;;;; +FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0642 0649;;;;N;;;;; +FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL; 0642 064A;;;;N;;;;; +FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL; 0643 0627;;;;N;;;;; +FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL; 0643 062C;;;;N;;;;; +FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL; 0643 062D;;;;N;;;;; +FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL; 0643 062E;;;;N;;;;; +FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL; 0643 0644;;;;N;;;;; +FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL; 0643 0645;;;;N;;;;; +FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0643 0649;;;;N;;;;; +FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL; 0643 064A;;;;N;;;;; +FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL; 0644 062C;;;;N;;;;; +FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL; 0644 062D;;;;N;;;;; +FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL; 0644 062E;;;;N;;;;; +FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL; 0644 0645;;;;N;;;;; +FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0644 0649;;;;N;;;;; +FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL; 0644 064A;;;;N;;;;; +FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL; 0645 062C;;;;N;;;;; +FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL; 0645 062D;;;;N;;;;; +FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL; 0645 062E;;;;N;;;;; +FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL; 0645 0645;;;;N;;;;; +FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0645 0649;;;;N;;;;; +FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL; 0645 064A;;;;N;;;;; +FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL; 0646 062C;;;;N;;;;; +FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL; 0646 062D;;;;N;;;;; +FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL; 0646 062E;;;;N;;;;; +FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL; 0646 0645;;;;N;;;;; +FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0646 0649;;;;N;;;;; +FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL; 0646 064A;;;;N;;;;; +FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL; 0647 062C;;;;N;;;;; +FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL; 0647 0645;;;;N;;;;; +FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0647 0649;;;;N;;;;; +FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL; 0647 064A;;;;N;;;;; +FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL; 064A 062C;;;;N;;;;; +FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL; 064A 062D;;;;N;;;;; +FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL; 064A 062E;;;;N;;;;; +FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL; 064A 0645;;;;N;;;;; +FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 064A 0649;;;;N;;;;; +FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL; 064A 064A;;;;N;;;;; +FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0630 0670;;;;N;;;;; +FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0631 0670;;;;N;;;;; +FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0649 0670;;;;N;;;;; +FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C 0651;;;;N;;;;; +FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D 0651;;;;N;;;;; +FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL; 0020 064E 0651;;;;N;;;;; +FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F 0651;;;;N;;;;; +FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL; 0020 0650 0651;;;;N;;;;; +FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL; 0020 0651 0670;;;;N;;;;; +FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL; 0626 0631;;;;N;;;;; +FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL; 0626 0632;;;;N;;;;; +FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; +FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL; 0626 0646;;;;N;;;;; +FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0626 0649;;;;N;;;;; +FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL; 0626 064A;;;;N;;;;; +FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL; 0628 0631;;;;N;;;;; +FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL; 0628 0632;;;;N;;;;; +FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; +FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL; 0628 0646;;;;N;;;;; +FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0628 0649;;;;N;;;;; +FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL; 0628 064A;;;;N;;;;; +FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL; 062A 0631;;;;N;;;;; +FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL; 062A 0632;;;;N;;;;; +FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; +FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL; 062A 0646;;;;N;;;;; +FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0649;;;;N;;;;; +FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL; 062A 064A;;;;N;;;;; +FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL; 062B 0631;;;;N;;;;; +FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL; 062B 0632;;;;N;;;;; +FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; +FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL; 062B 0646;;;;N;;;;; +FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062B 0649;;;;N;;;;; +FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL; 062B 064A;;;;N;;;;; +FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0641 0649;;;;N;;;;; +FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL; 0641 064A;;;;N;;;;; +FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0642 0649;;;;N;;;;; +FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL; 0642 064A;;;;N;;;;; +FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL; 0643 0627;;;;N;;;;; +FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; +FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; +FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0643 0649;;;;N;;;;; +FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL; 0643 064A;;;;N;;;;; +FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; +FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 0649;;;;N;;;;; +FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL; 0644 064A;;;;N;;;;; +FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL; 0645 0627;;;;N;;;;; +FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; +FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL; 0646 0631;;;;N;;;;; +FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL; 0646 0632;;;;N;;;;; +FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; +FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL; 0646 0646;;;;N;;;;; +FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0649;;;;N;;;;; +FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL; 0646 064A;;;;N;;;;; +FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL; 0649 0670;;;;N;;;;; +FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL; 064A 0631;;;;N;;;;; +FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL; 064A 0632;;;;N;;;;; +FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; +FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL; 064A 0646;;;;N;;;;; +FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 064A 0649;;;;N;;;;; +FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL; 064A 064A;;;;N;;;;; +FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL; 0626 062C;;;;N;;;;; +FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL; 0626 062D;;;;N;;;;; +FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL; 0626 062E;;;;N;;;;; +FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; +FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; +FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL; 0628 062C;;;;N;;;;; +FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL; 0628 062D;;;;N;;;;; +FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL; 0628 062E;;;;N;;;;; +FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; +FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; +FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062C;;;;N;;;;; +FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL; 062A 062D;;;;N;;;;; +FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL; 062A 062E;;;;N;;;;; +FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; +FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; +FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; +FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 062D;;;;N;;;;; +FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062C 0645;;;;N;;;;; +FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062D 062C;;;;N;;;;; +FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062D 0645;;;;N;;;;; +FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 062E 062C;;;;N;;;;; +FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062E 0645;;;;N;;;;; +FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; +FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; +FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; +FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; +FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D;;;;N;;;;; +FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL; 0635 062E;;;;N;;;;; +FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645;;;;N;;;;; +FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL; 0636 062C;;;;N;;;;; +FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL; 0636 062D;;;;N;;;;; +FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL; 0636 062E;;;;N;;;;; +FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL; 0636 0645;;;;N;;;;; +FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL; 0637 062D;;;;N;;;;; +FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; +FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL; 0639 062C;;;;N;;;;; +FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645;;;;N;;;;; +FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL; 063A 062C;;;;N;;;;; +FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL; 063A 0645;;;;N;;;;; +FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL; 0641 062C;;;;N;;;;; +FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL; 0641 062D;;;;N;;;;; +FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL; 0641 062E;;;;N;;;;; +FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 0645;;;;N;;;;; +FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL; 0642 062D;;;;N;;;;; +FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL; 0642 0645;;;;N;;;;; +FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL; 0643 062C;;;;N;;;;; +FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL; 0643 062D;;;;N;;;;; +FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL; 0643 062E;;;;N;;;;; +FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; +FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; +FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C;;;;N;;;;; +FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL; 0644 062D;;;;N;;;;; +FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL; 0644 062E;;;;N;;;;; +FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; +FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL; 0644 0647;;;;N;;;;; +FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062C;;;;N;;;;; +FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062D;;;;N;;;;; +FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062E;;;;N;;;;; +FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 0645;;;;N;;;;; +FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL; 0646 062C;;;;N;;;;; +FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL; 0646 062D;;;;N;;;;; +FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL; 0646 062E;;;;N;;;;; +FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; +FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; +FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL; 0647 062C;;;;N;;;;; +FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645;;;;N;;;;; +FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL; 0647 0670;;;;N;;;;; +FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL; 064A 062C;;;;N;;;;; +FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL; 064A 062D;;;;N;;;;; +FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL; 064A 062E;;;;N;;;;; +FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; +FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; +FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL; 0626 0645;;;;N;;;;; +FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL; 0626 0647;;;;N;;;;; +FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL; 0628 0645;;;;N;;;;; +FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL; 0628 0647;;;;N;;;;; +FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062A 0645;;;;N;;;;; +FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL; 062A 0647;;;;N;;;;; +FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL; 062B 0645;;;;N;;;;; +FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL; 062B 0647;;;;N;;;;; +FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0633 0645;;;;N;;;;; +FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; +FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; +FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; +FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL; 0643 0644;;;;N;;;;; +FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL; 0643 0645;;;;N;;;;; +FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL; 0644 0645;;;;N;;;;; +FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL; 0646 0645;;;;N;;;;; +FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL; 0646 0647;;;;N;;;;; +FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL; 064A 0645;;;;N;;;;; +FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL; 064A 0647;;;;N;;;;; +FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL; 0640 064E 0651;;;;N;;;;; +FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F 0651;;;;N;;;;; +FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL; 0640 0650 0651;;;;N;;;;; +FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0637 0649;;;;N;;;;; +FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL; 0637 064A;;;;N;;;;; +FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0639 0649;;;;N;;;;; +FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL; 0639 064A;;;;N;;;;; +FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 063A 0649;;;;N;;;;; +FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL; 063A 064A;;;;N;;;;; +FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0633 0649;;;;N;;;;; +FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0633 064A;;;;N;;;;; +FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0634 0649;;;;N;;;;; +FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL; 0634 064A;;;;N;;;;; +FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062D 0649;;;;N;;;;; +FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL; 062D 064A;;;;N;;;;; +FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062C 0649;;;;N;;;;; +FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL; 062C 064A;;;;N;;;;; +FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 062E 0649;;;;N;;;;; +FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL; 062E 064A;;;;N;;;;; +FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0635 0649;;;;N;;;;; +FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL; 0635 064A;;;;N;;;;; +FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0636 0649;;;;N;;;;; +FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL; 0636 064A;;;;N;;;;; +FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL; 0634 062C;;;;N;;;;; +FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL; 0634 062D;;;;N;;;;; +FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL; 0634 062E;;;;N;;;;; +FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL; 0634 0645;;;;N;;;;; +FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL; 0634 0631;;;;N;;;;; +FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL; 0633 0631;;;;N;;;;; +FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL; 0635 0631;;;;N;;;;; +FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL; 0636 0631;;;;N;;;;; +FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0637 0649;;;;N;;;;; +FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL; 0637 064A;;;;N;;;;; +FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0649;;;;N;;;;; +FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL; 0639 064A;;;;N;;;;; +FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0649;;;;N;;;;; +FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL; 063A 064A;;;;N;;;;; +FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 0649;;;;N;;;;; +FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL; 0633 064A;;;;N;;;;; +FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0634 0649;;;;N;;;;; +FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL; 0634 064A;;;;N;;;;; +FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0649;;;;N;;;;; +FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL; 062D 064A;;;;N;;;;; +FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0649;;;;N;;;;; +FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 064A;;;;N;;;;; +FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062E 0649;;;;N;;;;; +FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL; 062E 064A;;;;N;;;;; +FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0635 0649;;;;N;;;;; +FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL; 0635 064A;;;;N;;;;; +FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 0649;;;;N;;;;; +FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL; 0636 064A;;;;N;;;;; +FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; +FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; +FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; +FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; +FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL; 0634 0631;;;;N;;;;; +FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL; 0633 0631;;;;N;;;;; +FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL; 0635 0631;;;;N;;;;; +FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL; 0636 0631;;;;N;;;;; +FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; +FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; +FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; +FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645;;;;N;;;;; +FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL; 0633 0647;;;;N;;;;; +FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL; 0634 0647;;;;N;;;;; +FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; +FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0633 062C;;;;N;;;;; +FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0633 062D;;;;N;;;;; +FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0633 062E;;;;N;;;;; +FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL; 0634 062C;;;;N;;;;; +FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL; 0634 062D;;;;N;;;;; +FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL; 0634 062E;;;;N;;;;; +FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0637 0645;;;;N;;;;; +FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL; 0638 0645;;;;N;;;;; +FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL; 0627 064B;;;;N;;;;; +FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL; 0627 064B;;;;N;;;;; +FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;; +FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;; +FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062C 0645;;;;N;;;;; +FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; +FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; +FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062D 0645;;;;N;;;;; +FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062E 0645;;;;N;;;;; +FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 062A 0645 062C;;;;N;;;;; +FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062A 0645 062D;;;;N;;;;; +FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 062A 0645 062E;;;;N;;;;; +FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; +FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 062C 0645 062D;;;;N;;;;; +FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 0645 064A;;;;N;;;;; +FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062D 0645 0649;;;;N;;;;; +FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0633 062D 062C;;;;N;;;;; +FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 062C 062D;;;;N;;;;; +FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062C 0649;;;;N;;;;; +FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; +FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0633 0645 062D;;;;N;;;;; +FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0633 0645 062C;;;;N;;;;; +FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; +FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0633 0645 0645;;;;N;;;;; +FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; +FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL; 0635 062D 062D;;;;N;;;;; +FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; +FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; +FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0634 062D 0645;;;;N;;;;; +FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0634 062C 064A;;;;N;;;;; +FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; +FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0634 0645 062E;;;;N;;;;; +FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; +FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0634 0645 0645;;;;N;;;;; +FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0636 062D 0649;;;;N;;;;; +FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; +FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0636 062E 0645;;;;N;;;;; +FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; +FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0637 0645 062D;;;;N;;;;; +FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0637 0645 0645;;;;N;;;;; +FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0637 0645 064A;;;;N;;;;; +FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; +FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; +FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 0645 0645;;;;N;;;;; +FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0639 0645 0649;;;;N;;;;; +FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 063A 0645 0645;;;;N;;;;; +FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 063A 0645 064A;;;;N;;;;; +FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 063A 0645 0649;;;;N;;;;; +FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; +FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0641 062E 0645;;;;N;;;;; +FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; +FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0642 0645 0645;;;;N;;;;; +FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; +FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0644 062D 064A;;;;N;;;;; +FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0644 062D 0649;;;;N;;;;; +FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; +FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL; 0644 062C 062C;;;;N;;;;; +FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; +FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062E 0645;;;;N;;;;; +FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; +FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0644 0645 062D;;;;N;;;;; +FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062D 062C;;;;N;;;;; +FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062D 0645;;;;N;;;;; +FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062D 064A;;;;N;;;;; +FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0645 062C 062D;;;;N;;;;; +FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062C 0645;;;;N;;;;; +FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL; 0645 062E 062C;;;;N;;;;; +FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL; 0645 062E 0645;;;;N;;;;; +FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL; 0645 062C 062E;;;;N;;;;; +FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL; 0647 0645 062C;;;;N;;;;; +FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0647 0645 0645;;;;N;;;;; +FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062D 0645;;;;N;;;;; +FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062D 0649;;;;N;;;;; +FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; +FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0646 062C 0645;;;;N;;;;; +FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 062C 0649;;;;N;;;;; +FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 0645 064A;;;;N;;;;; +FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0646 0645 0649;;;;N;;;;; +FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; +FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 064A 0645 0645;;;;N;;;;; +FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062E 064A;;;;N;;;;; +FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 062C 064A;;;;N;;;;; +FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062C 0649;;;;N;;;;; +FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 062A 062E 064A;;;;N;;;;; +FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 062E 0649;;;;N;;;;; +FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062A 0645 064A;;;;N;;;;; +FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062A 0645 0649;;;;N;;;;; +FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 062C 0645 064A;;;;N;;;;; +FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 062D 0649;;;;N;;;;; +FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 062C 0645 0649;;;;N;;;;; +FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL; 0633 062E 0649;;;;N;;;;; +FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0635 062D 064A;;;;N;;;;; +FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0634 062D 064A;;;;N;;;;; +FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0636 062D 064A;;;;N;;;;; +FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 062C 064A;;;;N;;;;; +FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0644 0645 064A;;;;N;;;;; +FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 064A 062D 064A;;;;N;;;;; +FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 062C 064A;;;;N;;;;; +FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 064A 0645 064A;;;;N;;;;; +FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 0645 064A;;;;N;;;;; +FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0642 0645 064A;;;;N;;;;; +FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0646 062D 064A;;;;N;;;;; +FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL; 0642 0645 062D;;;;N;;;;; +FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062D 0645;;;;N;;;;; +FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0639 0645 064A;;;;N;;;;; +FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0643 0645 064A;;;;N;;;;; +FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; +FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0645 062E 064A;;;;N;;;;; +FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; +FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; +FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL; 0644 062C 0645;;;;N;;;;; +FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL; 0646 062C 062D;;;;N;;;;; +FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 062C 062D 064A;;;;N;;;;; +FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 062D 062C 064A;;;;N;;;;; +FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0645 062C 064A;;;;N;;;;; +FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL; 0641 0645 064A;;;;N;;;;; +FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL; 0628 062D 064A;;;;N;;;;; +FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0643 0645 0645;;;;N;;;;; +FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 062C 0645;;;;N;;;;; +FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; +FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; +FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; +FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; +FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; +FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL; 0627 0644 0644 0647;;;;N;;;;; +FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL; 0627 0643 0628 0631;;;;N;;;;; +FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL; 0645 062D 0645 062F;;;;N;;;;; +FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL; 0635 0644 0639 0645;;;;N;;;;; +FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL; 0631 0633 0648 0644;;;;N;;;;; +FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL; 0639 0644 064A 0647;;;;N;;;;; +FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL; 0648 0633 0644 0645;;;;N;;;;; +FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL; 0635 0644 0649;;;;N;;;;; +FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL; 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;; +FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL; 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; +FDFC;RIAL SIGN;Sc;0;AL; 0631 06CC 0627 0644;;;;N;;;;; +FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;; +FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;; +FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;; +FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;; +FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;; +FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;; +FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;; +FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;; +FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;; +FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;; +FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;; +FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;; +FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;; +FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;; +FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;; +FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;; +FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;; +FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON; 002C;;;;N;;;;; +FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; +FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON; 3002;;;;N;;;;; +FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON; 003A;;;;N;;;;; +FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON; 003B;;;;N;;;;; +FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; +FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; +FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON; 3016;;;;N;;;;; +FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON; 3017;;;;N;;;;; +FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON; 2026;;;;N;;;;; +FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;; +FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; +FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;; +FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; +FE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;; +FE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;; +FE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;; +FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON; 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;; +FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON; 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;; +FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON; 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;; +FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;; +FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON; 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;; +FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;; +FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;; +FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;; +FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;; +FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;; +FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;; +FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON; 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;; +FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON; 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;; +FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON; 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;; +FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON; 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;; +FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON; 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;; +FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON; 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;; +FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;; +FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;; +FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON; 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;; +FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON; 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;; +FE45;SESAME DOT;Po;0;ON;;;;;N;;;;; +FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;; +FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON; 005B;;;;N;;;;; +FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON; 005D;;;;N;;;;; +FE49;DASHED OVERLINE;Po;0;ON; 203E;;;;N;SPACING DASHED OVERSCORE;;;; +FE4A;CENTRELINE OVERLINE;Po;0;ON; 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;; +FE4B;WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING WAVY OVERSCORE;;;; +FE4C;DOUBLE WAVY OVERLINE;Po;0;ON; 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;; +FE4D;DASHED LOW LINE;Pc;0;ON; 005F;;;;N;SPACING DASHED UNDERSCORE;;;; +FE4E;CENTRELINE LOW LINE;Pc;0;ON; 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;; +FE4F;WAVY LOW LINE;Pc;0;ON; 005F;;;;N;SPACING WAVY UNDERSCORE;;;; +FE50;SMALL COMMA;Po;0;CS; 002C;;;;N;;;;; +FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; +FE52;SMALL FULL STOP;Po;0;CS; 002E;;;;N;SMALL PERIOD;;;; +FE54;SMALL SEMICOLON;Po;0;ON; 003B;;;;N;;;;; +FE55;SMALL COLON;Po;0;CS; 003A;;;;N;;;;; +FE56;SMALL QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; +FE57;SMALL EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; +FE58;SMALL EM DASH;Pd;0;ON; 2014;;;;N;;;;; +FE59;SMALL LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;SMALL OPENING PARENTHESIS;;;; +FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;; +FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;; +FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;; +FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON; 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;; +FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON; 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;; +FE5F;SMALL NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; +FE60;SMALL AMPERSAND;Po;0;ON; 0026;;;;N;;;;; +FE61;SMALL ASTERISK;Po;0;ON; 002A;;;;N;;;;; +FE62;SMALL PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; +FE63;SMALL HYPHEN-MINUS;Pd;0;ES; 002D;;;;N;;;;; +FE64;SMALL LESS-THAN SIGN;Sm;0;ON; 003C;;;;Y;;;;; +FE65;SMALL GREATER-THAN SIGN;Sm;0;ON; 003E;;;;Y;;;;; +FE66;SMALL EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; +FE68;SMALL REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;SMALL BACKSLASH;;;; +FE69;SMALL DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; +FE6A;SMALL PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; +FE6B;SMALL COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; +FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL; 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;; +FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL; 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;; +FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL; 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;; +FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;; +FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL; 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;; +FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL; 0020 064E;;;;N;ARABIC SPACING FATHAH;;;; +FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL; 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;; +FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL; 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;; +FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL; 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;; +FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL; 0020 0650;;;;N;ARABIC SPACING KASRAH;;;; +FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL; 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;; +FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL; 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;; +FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL; 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;; +FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL; 0020 0652;;;;N;ARABIC SPACING SUKUN;;;; +FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL; 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;; +FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL; 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;; +FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;; +FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;; +FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;; +FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;; +FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;; +FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;; +FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;; +FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;; +FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;; +FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;; +FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;; +FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL; 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;; +FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;; +FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL; 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;; +FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;; +FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;; +FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;; +FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL; 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;; +FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;; +FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL; 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;; +FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;; +FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;; +FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;; +FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL; 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;; +FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;; +FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;; +FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;; +FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL; 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;; +FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;; +FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;; +FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;; +FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL; 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;; +FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;; +FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;; +FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;; +FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL; 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;; +FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;; +FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;; +FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;; +FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL; 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;; +FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;; +FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL; 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;; +FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;; +FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL; 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;; +FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;; +FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL; 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;; +FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;; +FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL; 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;; +FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;; +FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;; +FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;; +FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL; 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;; +FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;; +FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;; +FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;; +FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL; 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;; +FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;; +FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;; +FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;; +FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL; 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;; +FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;; +FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;; +FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;; +FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL; 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;; +FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;; +FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;; +FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;; +FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL; 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;; +FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;; +FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;; +FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;; +FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL; 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;; +FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;; +FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;; +FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;; +FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL; 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;; +FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;; +FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;; +FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;; +FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL; 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;; +FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;; +FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;; +FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;; +FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL; 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;; +FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;; +FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;; +FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;; +FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL; 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;; +FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;; +FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;; +FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;; +FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL; 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;; +FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;; +FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;; +FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;; +FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL; 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;; +FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;; +FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;; +FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;; +FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL; 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;; +FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;; +FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;; +FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;; +FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL; 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;; +FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;; +FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;; +FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;; +FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL; 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;; +FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;; +FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL; 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;; +FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;; +FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL; 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;; +FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;; +FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;; +FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;; +FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL; 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;; +FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;; +FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL; 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;; +FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; +FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL; 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;; +FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; +FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL; 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;; +FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;; +FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL; 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;; +FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;; +FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON; 0021;;;;N;;;;; +FF02;FULLWIDTH QUOTATION MARK;Po;0;ON; 0022;;;;N;;;;; +FF03;FULLWIDTH NUMBER SIGN;Po;0;ET; 0023;;;;N;;;;; +FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET; 0024;;;;N;;;;; +FF05;FULLWIDTH PERCENT SIGN;Po;0;ET; 0025;;;;N;;;;; +FF06;FULLWIDTH AMPERSAND;Po;0;ON; 0026;;;;N;;;;; +FF07;FULLWIDTH APOSTROPHE;Po;0;ON; 0027;;;;N;;;;; +FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON; 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;; +FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON; 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;; +FF0A;FULLWIDTH ASTERISK;Po;0;ON; 002A;;;;N;;;;; +FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES; 002B;;;;N;;;;; +FF0C;FULLWIDTH COMMA;Po;0;CS; 002C;;;;N;;;;; +FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES; 002D;;;;N;;;;; +FF0E;FULLWIDTH FULL STOP;Po;0;CS; 002E;;;;N;FULLWIDTH PERIOD;;;; +FF0F;FULLWIDTH SOLIDUS;Po;0;CS; 002F;;;;N;FULLWIDTH SLASH;;;; +FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +FF11;FULLWIDTH DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +FF12;FULLWIDTH DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +FF13;FULLWIDTH DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +FF16;FULLWIDTH DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +FF19;FULLWIDTH DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +FF1A;FULLWIDTH COLON;Po;0;CS; 003A;;;;N;;;;; +FF1B;FULLWIDTH SEMICOLON;Po;0;ON; 003B;;;;N;;;;; +FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON; 003C;;;;Y;;;;; +FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON; 003D;;;;N;;;;; +FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON; 003E;;;;Y;;;;; +FF1F;FULLWIDTH QUESTION MARK;Po;0;ON; 003F;;;;N;;;;; +FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON; 0040;;;;N;;;;; +FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L; 0041;;;;N;;;;FF41; +FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L; 0042;;;;N;;;;FF42; +FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L; 0043;;;;N;;;;FF43; +FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L; 0044;;;;N;;;;FF44; +FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L; 0045;;;;N;;;;FF45; +FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L; 0046;;;;N;;;;FF46; +FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L; 0047;;;;N;;;;FF47; +FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L; 0048;;;;N;;;;FF48; +FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L; 0049;;;;N;;;;FF49; +FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L; 004A;;;;N;;;;FF4A; +FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L; 004B;;;;N;;;;FF4B; +FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L; 004C;;;;N;;;;FF4C; +FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L; 004D;;;;N;;;;FF4D; +FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L; 004E;;;;N;;;;FF4E; +FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L; 004F;;;;N;;;;FF4F; +FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L; 0050;;;;N;;;;FF50; +FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L; 0051;;;;N;;;;FF51; +FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L; 0052;;;;N;;;;FF52; +FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L; 0053;;;;N;;;;FF53; +FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L; 0054;;;;N;;;;FF54; +FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L; 0055;;;;N;;;;FF55; +FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L; 0056;;;;N;;;;FF56; +FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L; 0057;;;;N;;;;FF57; +FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L; 0058;;;;N;;;;FF58; +FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L; 0059;;;;N;;;;FF59; +FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L; 005A;;;;N;;;;FF5A; +FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON; 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;; +FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON; 005C;;;;N;FULLWIDTH BACKSLASH;;;; +FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON; 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;; +FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON; 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;; +FF3F;FULLWIDTH LOW LINE;Pc;0;ON; 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;; +FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON; 0060;;;;N;FULLWIDTH SPACING GRAVE;;;; +FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L; 0061;;;;N;;;FF21;;FF21 +FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L; 0062;;;;N;;;FF22;;FF22 +FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L; 0063;;;;N;;;FF23;;FF23 +FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L; 0064;;;;N;;;FF24;;FF24 +FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L; 0065;;;;N;;;FF25;;FF25 +FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L; 0066;;;;N;;;FF26;;FF26 +FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L; 0067;;;;N;;;FF27;;FF27 +FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L; 0068;;;;N;;;FF28;;FF28 +FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L; 0069;;;;N;;;FF29;;FF29 +FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L; 006A;;;;N;;;FF2A;;FF2A +FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L; 006B;;;;N;;;FF2B;;FF2B +FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L; 006C;;;;N;;;FF2C;;FF2C +FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L; 006D;;;;N;;;FF2D;;FF2D +FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L; 006E;;;;N;;;FF2E;;FF2E +FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L; 006F;;;;N;;;FF2F;;FF2F +FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L; 0070;;;;N;;;FF30;;FF30 +FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L; 0071;;;;N;;;FF31;;FF31 +FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L; 0072;;;;N;;;FF32;;FF32 +FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L; 0073;;;;N;;;FF33;;FF33 +FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L; 0074;;;;N;;;FF34;;FF34 +FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L; 0075;;;;N;;;FF35;;FF35 +FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L; 0076;;;;N;;;FF36;;FF36 +FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L; 0077;;;;N;;;FF37;;FF37 +FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L; 0078;;;;N;;;FF38;;FF38 +FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L; 0079;;;;N;;;FF39;;FF39 +FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L; 007A;;;;N;;;FF3A;;FF3A +FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON; 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;; +FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON; 007C;;;;N;FULLWIDTH VERTICAL BAR;;;; +FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON; 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;; +FF5E;FULLWIDTH TILDE;Sm;0;ON; 007E;;;;N;FULLWIDTH SPACING TILDE;;;; +FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON; 2985;;;;Y;;*;;; +FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON; 2986;;;;Y;;*;;; +FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON; 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;; +FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON; 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;; +FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON; 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;; +FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON; 3001;;;;N;;;;; +FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON; 30FB;;;;N;;;;; +FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L; 30F2;;;;N;;;;; +FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L; 30A1;;;;N;;;;; +FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L; 30A3;;;;N;;;;; +FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L; 30A5;;;;N;;;;; +FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L; 30A7;;;;N;;;;; +FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L; 30A9;;;;N;;;;; +FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L; 30E3;;;;N;;;;; +FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L; 30E5;;;;N;;;;; +FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L; 30E7;;;;N;;;;; +FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L; 30C3;;;;N;;;;; +FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L; 30FC;;;;N;;;;; +FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L; 30A2;;;;N;;;;; +FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L; 30A4;;;;N;;;;; +FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L; 30A6;;;;N;;;;; +FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L; 30A8;;;;N;;;;; +FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L; 30AA;;;;N;;;;; +FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L; 30AB;;;;N;;;;; +FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L; 30AD;;;;N;;;;; +FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L; 30AF;;;;N;;;;; +FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L; 30B1;;;;N;;;;; +FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L; 30B3;;;;N;;;;; +FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L; 30B5;;;;N;;;;; +FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L; 30B7;;;;N;;;;; +FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L; 30B9;;;;N;;;;; +FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L; 30BB;;;;N;;;;; +FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L; 30BD;;;;N;;;;; +FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L; 30BF;;;;N;;;;; +FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L; 30C1;;;;N;;;;; +FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L; 30C4;;;;N;;;;; +FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L; 30C6;;;;N;;;;; +FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L; 30C8;;;;N;;;;; +FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L; 30CA;;;;N;;;;; +FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L; 30CB;;;;N;;;;; +FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L; 30CC;;;;N;;;;; +FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L; 30CD;;;;N;;;;; +FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L; 30CE;;;;N;;;;; +FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L; 30CF;;;;N;;;;; +FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L; 30D2;;;;N;;;;; +FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L; 30D5;;;;N;;;;; +FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L; 30D8;;;;N;;;;; +FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L; 30DB;;;;N;;;;; +FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L; 30DE;;;;N;;;;; +FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L; 30DF;;;;N;;;;; +FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L; 30E0;;;;N;;;;; +FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L; 30E1;;;;N;;;;; +FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L; 30E2;;;;N;;;;; +FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L; 30E4;;;;N;;;;; +FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L; 30E6;;;;N;;;;; +FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L; 30E8;;;;N;;;;; +FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L; 30E9;;;;N;;;;; +FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L; 30EA;;;;N;;;;; +FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L; 30EB;;;;N;;;;; +FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L; 30EC;;;;N;;;;; +FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L; 30ED;;;;N;;;;; +FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L; 30EF;;;;N;;;;; +FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L; 30F3;;;;N;;;;; +FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L; 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;; +FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L; 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;; +FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L; 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;; +FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L; 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;; +FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L; 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;; +FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;; +FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L; 3134;;;;N;;;;; +FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L; 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;; +FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L; 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;; +FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L; 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;; +FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L; 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;; +FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L; 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;; +FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L; 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;; +FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L; 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;; +FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L; 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;; +FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L; 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;; +FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L; 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;; +FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L; 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;; +FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L; 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;; +FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L; 3141;;;;N;;;;; +FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L; 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;; +FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L; 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;; +FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L; 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;; +FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L; 3145;;;;N;;;;; +FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L; 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;; +FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L; 3147;;;;N;;;;; +FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L; 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;; +FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L; 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;; +FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L; 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;; +FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L; 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;; +FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L; 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;; +FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L; 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;; +FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L; 314E;;;;N;;;;; +FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L; 314F;;;;N;;;;; +FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L; 3150;;;;N;;;;; +FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L; 3151;;;;N;;;;; +FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L; 3152;;;;N;;;;; +FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L; 3153;;;;N;;;;; +FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L; 3154;;;;N;;;;; +FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L; 3155;;;;N;;;;; +FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L; 3156;;;;N;;;;; +FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L; 3157;;;;N;;;;; +FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L; 3158;;;;N;;;;; +FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L; 3159;;;;N;;;;; +FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L; 315A;;;;N;;;;; +FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L; 315B;;;;N;;;;; +FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L; 315C;;;;N;;;;; +FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L; 315D;;;;N;;;;; +FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L; 315E;;;;N;;;;; +FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L; 315F;;;;N;;;;; +FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L; 3160;;;;N;;;;; +FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L; 3161;;;;N;;;;; +FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L; 3162;;;;N;;;;; +FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L; 3163;;;;N;;;;; +FFE0;FULLWIDTH CENT SIGN;Sc;0;ET; 00A2;;;;N;;;;; +FFE1;FULLWIDTH POUND SIGN;Sc;0;ET; 00A3;;;;N;;;;; +FFE2;FULLWIDTH NOT SIGN;Sm;0;ON; 00AC;;;;N;;;;; +FFE3;FULLWIDTH MACRON;Sk;0;ON; 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;; +FFE4;FULLWIDTH BROKEN BAR;So;0;ON; 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;; +FFE5;FULLWIDTH YEN SIGN;Sc;0;ET; 00A5;;;;N;;;;; +FFE6;FULLWIDTH WON SIGN;Sc;0;ET; 20A9;;;;N;;;;; +FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON; 2502;;;;N;;;;; +FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON; 2190;;;;N;;;;; +FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON; 2191;;;;N;;;;; +FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON; 2192;;;;N;;;;; +FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON; 2193;;;;N;;;;; +FFED;HALFWIDTH BLACK SQUARE;So;0;ON; 25A0;;;;N;;;;; +FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON; 25CB;;;;N;;;;; +FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;; +FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;; +FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;; +FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; +FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; +10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;; +10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;; +10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;; +10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;; +10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;; +10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;; +10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;; +10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;; +10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;; +10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;; +1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;; +1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;; +1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;; +1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;; +1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;; +10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;; +10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;; +10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;; +10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;; +10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;; +10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;; +10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;; +10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;; +10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;; +10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;; +1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;; +1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;; +1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;; +1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;; +1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;; +1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;; +10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;; +10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;; +10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;; +10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;; +10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;; +10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;; +10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;; +10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;; +10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;; +1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;; +1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;; +1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;; +1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;; +1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;; +1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;; +10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;; +10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;; +10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;; +10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;; +10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;; +10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;; +10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;; +10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;; +10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;; +10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;; +1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;; +1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;; +1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;; +1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;; +10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;; +10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;; +10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;; +10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;; +10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;; +10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;; +10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;; +10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;; +10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;; +10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;; +1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;; +1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;; +1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;; +1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;; +10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;; +10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;; +10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;; +10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;; +10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;; +10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;; +10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;; +10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;; +10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;; +10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;; +1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;; +1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;; +1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;; +1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;; +10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;; +10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;; +10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;; +10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;; +10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;; +10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;; +10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;; +10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;; +10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;; +10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;; +1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;; +1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;; +1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;; +1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;; +1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;; +1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;; +10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;; +10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;; +10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;; +10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;; +10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;; +10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;; +10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;; +10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;; +10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;; +10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;; +1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;; +1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;; +1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;; +1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;; +1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;; +1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;; +100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;; +100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;; +100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;; +100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;; +100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;; +100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;; +100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;; +100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;; +100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;; +100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;; +100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;; +100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;; +100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;; +100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;; +100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;; +100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;; +100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;; +100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;; +100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;; +100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;; +100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;; +100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;; +100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;; +100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;; +100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;; +100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;; +100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;; +100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;; +100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;; +100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;; +100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;; +100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;; +100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;; +100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;; +100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;; +100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;; +100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;; +100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;; +100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;; +100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;; +100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;; +100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;pug;;; +100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;; +100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;gup;;; +100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;; +100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;; +100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;; +100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;; +100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;; +100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;; +100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;; +100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;; +100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;; +100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;; +100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;; +100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;; +100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;; +100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;; +100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;; +100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;; +100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;; +100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;; +100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;; +100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;; +100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;; +100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;; +100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;; +100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;; +100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;; +100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;; +100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;; +100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;; +100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;; +100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;; +100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;; +100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;; +100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;; +100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;; +100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;; +100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;; +100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;; +100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;; +100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;; +100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;; +100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;; +100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;; +100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;; +100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;; +100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;; +100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;; +100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;; +10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;; +10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;; +10102;AEGEAN CHECK MARK;So;0;L;;;;;N;;;;; +10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;; +10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;; +10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;; +1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;; +1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;; +1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;; +1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;; +1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;; +1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;; +10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;; +10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;; +10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;; +10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;; +10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;; +10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;; +10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;; +10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;; +10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;; +10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; +1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;; +1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;; +1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;; +1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;; +1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;; +1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;; +10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;; +10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;; +10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; +10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;; +10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;; +10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;; +10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;; +10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;; +10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;; +10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;; +1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;; +1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; +1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;; +1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;; +1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;; +1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;; +10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;; +10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;; +10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;; +10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;; +10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;; +10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;; +10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;; +1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;; +1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;; +1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; +1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; +1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;; +1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;; +10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;; +10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;; +10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;; +10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;; +10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;; +10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; +10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;; +10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;; +10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;; +1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;; +1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;; +1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;; +1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;; +1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;; +1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;; +10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;; +10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;; +10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;; +10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;; +10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;; +10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;; +10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;; +10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;; +10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;; +10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;; +1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;; +1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;; +1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;; +1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; +1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; +1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;; +10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;; +10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;; +10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;; +10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;; +10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;; +10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;; +10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;; +10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;; +1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;; +1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;; +10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; +10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;; +10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;; +10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;; +10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;; +10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;; +10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;; +10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;; +1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;; +1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;; +1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;; +1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;; +1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;; +1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;; +10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;; +10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;; +10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;; +10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;; +10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;; +10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;; +10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;; +10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;; +10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;; +10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;; +1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;; +10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;; +10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;; +10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;; +10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;; +10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;; +10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;; +10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;; +10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;; +10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;; +10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;; +1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;; +1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;; +101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;; +101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;; +101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;; +101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;; +101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;; +101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;; +101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;; +101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;; +101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;; +101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;; +101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;; +101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;; +101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;; +101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;; +101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;; +101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;; +101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;; +101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;; +101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;; +101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;; +101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;; +101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;; +101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;; +101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;; +101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;; +101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;; +101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;; +101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;; +101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;; +101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;; +101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;; +101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;; +101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;; +101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;; +101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;; +101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;; +101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;; +101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;; +101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;; +101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;; +101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;; +101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;; +101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;; +101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;; +101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;; +101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;; +10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;; +10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;; +10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;; +10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;; +10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;; +10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;; +10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;; +10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;; +10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;; +10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;; +1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;; +1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;; +1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;; +1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;; +1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;; +1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;; +10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;; +10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;; +10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;; +10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;; +10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;; +10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;; +10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;; +10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;; +10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;; +10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;; +1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;; +1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;; +1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;; +102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;; +102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;; +102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;; +102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;; +102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;; +102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;; +102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;; +102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;; +102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;; +102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;; +102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;; +102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;; +102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;; +102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;; +102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;; +102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;; +102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;; +102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;; +102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;; +102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;; +102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;; +102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;; +102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;; +102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;; +102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;; +102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;; +102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;; +102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;; +102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;; +102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;; +102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;; +102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;; +102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;; +102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;; +102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;; +102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;; +102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;; +102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;; +102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;; +102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;; +102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;; +102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;; +102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;; +102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;; +102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;; +102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;; +102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;; +102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;; +102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;; +10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;; +10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;; +10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;; +10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;; +10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;; +10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;; +10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;; +10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;; +10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;; +10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;; +1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;; +1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;; +1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;; +1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;; +1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;; +1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;Faliscan;;; +10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;; +10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;; +10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;; +10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;; +10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;; +10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;; +10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;; +10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;Faliscan;;; +10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;; +10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;; +1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;; +1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;Umbrian;;; +1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;Umbrian;;; +1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;Oscan;;; +1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;Oscan;;; +10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;; +10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;; +10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;; +10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;; +10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;; +10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;; +10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;; +10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;; +10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;; +10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;; +10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;; +10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;; +10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;; +10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;; +1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;; +1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;; +1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;; +1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;; +1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;; +1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;; +10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;; +10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;; +10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;; +10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;; +10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;; +10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;; +10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;; +10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;; +10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;; +10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;; +1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;; +10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;; +10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;; +10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;; +10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;; +10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;; +10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;; +10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;; +10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;; +10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;; +10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;; +1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;; +1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;; +1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;; +1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;; +1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;; +1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;; +10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;; +10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;; +10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;; +10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;; +10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;; +10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;; +10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;; +10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;; +10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;; +10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;; +1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;; +1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;; +1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;; +1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;; +1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;; +103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;; +103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;; +103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;; +103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;; +103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;; +103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;; +103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;; +103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;; +103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;; +103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;; +103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;; +103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;; +103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;; +103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;; +103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;; +103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;; +103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;; +103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;; +103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;; +103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;; +103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;; +103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;; +103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;; +103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;; +103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;; +103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;; +103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;; +103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;; +103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;; +103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;; +103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;; +103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;; +103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;; +103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;; +103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;; +103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;; +103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;; +103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;; +103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;; +103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;; +103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;; +103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;; +103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;; +103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;; +103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; +103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;; +103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;; +103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;; +103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;; +103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;; +10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428; +10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429; +10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A; +10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B; +10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C; +10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D; +10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E; +10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F; +10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430; +10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431; +1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432; +1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433; +1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434; +1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435; +1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436; +1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437; +10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438; +10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439; +10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A; +10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B; +10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C; +10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D; +10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E; +10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F; +10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440; +10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441; +1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442; +1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443; +1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444; +1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445; +1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446; +1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447; +10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448; +10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449; +10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A; +10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B; +10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C; +10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D; +10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E; +10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F; +10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400 +10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401 +1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402 +1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403 +1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404 +1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405 +1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406 +1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407 +10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408 +10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409 +10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A +10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B +10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C +10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D +10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E +10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F +10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410 +10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411 +1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412 +1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413 +1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414 +1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415 +1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416 +1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417 +10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418 +10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419 +10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A +10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B +10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C +10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D +10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E +10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F +10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420 +10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421 +1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422 +1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423 +1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424 +1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425 +1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426 +1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427 +10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;; +10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;; +10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;; +10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;; +10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;; +10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;; +10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;; +10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;; +10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;; +10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;; +1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;; +1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;; +1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;; +1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;; +1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;; +1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;; +10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;; +10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;; +10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;; +10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;; +10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;; +10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;; +10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;; +10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;; +10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;; +10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;; +1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;; +1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;; +1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;; +1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;; +1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;; +1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;; +10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;; +10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;; +10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;; +10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;; +10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;; +10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;; +10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;; +10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;; +10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;; +10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;; +1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;; +1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;; +1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;; +1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;; +1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;; +1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;; +10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;; +10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;; +10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;; +10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;; +10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;; +10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;; +10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;; +10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;; +10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;; +10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;; +1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;; +1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;; +1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;; +1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;; +1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;; +1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;; +10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;; +10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;; +10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;; +10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;; +10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;; +10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;; +10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;; +10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;; +10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;; +10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;; +1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;; +1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;; +1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;; +1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;; +104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;; +10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;; +10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;; +10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;; +10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;; +10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;; +10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;; +1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;; +1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;; +1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;; +1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;; +1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;; +1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;; +10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;; +10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;; +10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;; +10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;; +10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;; +10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;; +10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;; +10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;; +10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;; +10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;; +1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;; +1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;; +1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;; +1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;; +1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;; +1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;; +10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;; +10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;; +10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;; +10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;; +10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;; +10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;; +10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;; +10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;; +10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;; +10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;; +1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;; +1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;; +1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;; +1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;; +1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;; +1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;; +10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;; +10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;; +10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;; +10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;; +10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;; +10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;; +10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;; +10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;; +1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;; +1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;; +10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;; +10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;; +10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;; +10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;; +10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;; +10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;; +10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;; +10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;; +10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;; +10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;; +1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;; +1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;; +1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;; +1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;; +1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;; +1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;; +10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;; +10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;; +10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;; +10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;; +10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; +10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;; +10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;; +10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;; +10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;; +10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;; +10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;; +10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;; +10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;; +10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;; +10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;; +10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;; +10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;; +10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;; +10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;; +1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;; +1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;; +1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;; +1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;; +1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;; +1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;; +10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;; +10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;; +10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;; +10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;; +10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;; +10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;; +10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;; +10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;; +10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;; +10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;; +1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;; +10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;; +10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; +10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; +10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;; +10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;; +10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;; +10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;; +10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;; +10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;; +10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;; +10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;; +10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;; +10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;; +10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;; +10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;; +10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;; +10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;; +10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;; +10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;; +10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;; +10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;; +10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;; +10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;; +10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;; +10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;; +10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;; +10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;; +10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;; +10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;; +10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;; +10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;; +10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;; +10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;; +10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;; +10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;; +10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;; +10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;; +10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;; +10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;; +10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;; +10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; +10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;; +10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;; +10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;; +10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;; +10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;; +10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;; +10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; +10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;; +10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;; +10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;; +10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;; +10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;; +10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;; +10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;; +10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;; +10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;; +12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;; +12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;; +12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;; +12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;; +12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;; +12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;; +12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;; +12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;; +12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;; +1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;; +1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;; +1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; +1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;; +1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;; +12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;; +12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;; +12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;; +12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;; +12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;; +12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;; +12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;; +1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;; +1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;; +1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;; +1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;; +1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;; +12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;; +12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;; +12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;; +12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;; +12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;; +12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;; +12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;; +12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;; +12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;; +12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;; +1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;; +1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;; +1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;; +1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;; +1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;; +1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;; +12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;; +12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;; +12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;; +12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;; +12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;; +12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;; +12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;; +12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;; +12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;; +12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;; +1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;; +1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; +1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; +1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;; +1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;; +12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;; +12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;; +12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;; +12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;; +12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;; +12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;; +12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;; +12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;; +12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;; +12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;; +1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;; +1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;; +1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;; +1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;; +1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;; +12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;; +12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;; +12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;; +12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;; +12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;; +12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;; +12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;; +12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;; +12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;; +12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;; +1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; +1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;; +1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;; +1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;; +1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;; +1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;; +12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;; +12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;; +12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;; +12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;; +12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;; +12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;; +12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;; +12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;; +12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;; +12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;; +1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;; +1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;; +1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;; +1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;; +1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;; +1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;; +12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;; +12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;; +12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;; +12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;; +12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;; +12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;; +12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;; +12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;; +12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;; +12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;; +1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;; +1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;; +1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;; +1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;; +1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;; +1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;; +12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;; +12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;; +12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;; +12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;; +12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;; +12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;; +12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;; +12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; +12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;; +12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;; +1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;; +1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;; +1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;; +1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;; +1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;; +1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;; +12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;; +12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;; +12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;; +12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;; +12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;; +12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;; +12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;; +12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;; +12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;; +12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;; +1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;; +1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;; +1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;; +1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;; +1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;; +120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;; +120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;; +120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;; +120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; +120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;; +120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;; +120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; +120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; +120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;; +120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;; +120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;; +120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;; +120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;; +120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;; +120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;; +120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;; +120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;; +120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;; +120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;; +120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;; +120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;; +120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; +120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; +120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; +120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;; +120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;; +120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;; +120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;; +120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;; +120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;; +120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;; +120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;; +120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;; +120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;; +120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;; +120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;; +120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;; +120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;; +120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;; +120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;; +120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;; +120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;; +120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;; +120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;; +120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;; +120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;; +120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;; +120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;; +120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;; +120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;; +120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;; +120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;; +120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;; +120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;; +120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;; +120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;; +120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;; +120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;; +120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;; +120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;; +120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;; +120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;; +120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;; +120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;; +120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;; +120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;; +120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;; +120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;; +120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;; +120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;; +120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;; +120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;; +120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;; +120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;; +120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;; +120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;; +120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;; +120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;; +120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;; +120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;; +120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;; +120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;; +120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;; +120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;; +120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;; +120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;; +12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;; +12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;; +12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;; +12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;; +12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;; +12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;; +12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;; +12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;; +12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;; +12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;; +1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;; +1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; +1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;; +1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;; +1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;; +12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;; +12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;; +12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; +12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;; +12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;; +12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;; +12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;; +12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;; +12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;; +12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;; +1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;; +1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;; +1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;; +1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;; +1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;; +12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;; +12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;; +12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;; +12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;; +12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;; +12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;; +12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;; +12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;; +12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;; +12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;; +1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;; +1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;; +1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;; +1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;; +1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;; +1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;; +12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;; +12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;; +12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;; +12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;; +12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;; +12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;; +12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;; +12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;; +12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;; +12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;; +1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;; +1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;; +1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;; +1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;; +1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;; +12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;; +12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;; +12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;; +12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;; +12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;; +12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;; +12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;; +12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;; +12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;; +12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;; +1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;; +1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;; +1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;; +1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;; +1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;; +12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;; +12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;; +12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;; +12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;; +12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;; +12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;; +12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;; +12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;; +12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;; +12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;; +1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;; +1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;; +1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;; +1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;; +1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;; +1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;; +12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;; +12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;; +12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;; +12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;; +12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;; +12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;; +12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;; +12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;; +12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;; +1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; +1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;; +1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;; +1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;; +1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;; +1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;; +12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;; +12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;; +12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;; +12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;; +12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;; +12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;; +12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;; +12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;; +12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;; +12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;; +1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;; +1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;; +1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;; +1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;; +1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;; +1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;; +12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;; +12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;; +12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;; +12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;; +12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;; +12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;; +12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;; +12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;; +12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;; +12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;; +1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;; +1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;; +1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;; +1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;; +1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;; +1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;; +12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;; +12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;; +12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;; +12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;; +12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;; +12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;; +12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;; +12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;; +12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;; +1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;; +1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;; +1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;; +1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;; +121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;; +121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;; +121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;; +121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;; +121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;; +121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;; +121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;; +121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;; +121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;; +121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;; +121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;; +121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;; +121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;; +121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;; +121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;; +121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;; +121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;; +121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;; +121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;; +121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;; +121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;; +121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;; +121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;; +121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;; +121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;; +121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;; +121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; +121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;; +121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; +121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;; +121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;; +121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;; +121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;; +121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;; +121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;; +121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;; +121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;; +121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;; +121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;; +121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;; +121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;; +121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;; +121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;; +121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;; +121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;; +121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;; +121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;; +121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;; +121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;; +121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;; +121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;; +121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;; +121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;; +121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;; +121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;; +121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;; +121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;; +121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; +121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;; +121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;; +121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;; +121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;; +121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;; +121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;; +121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;; +121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;; +121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;; +121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;; +121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;; +121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;; +121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;; +121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;; +121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; +121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;; +121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;; +121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;; +121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;; +121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;; +121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;; +121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;; +121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;; +121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;; +121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;; +121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;; +121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;; +121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;; +121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;; +121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;; +121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;; +12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;; +12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;; +12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;; +12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;; +12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;; +12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;; +12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;; +12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;; +12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;; +1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;; +1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;; +1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;; +1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;; +1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;; +12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;; +12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;; +12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;; +12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;; +12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;; +12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;; +12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;; +12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;; +12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;; +12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;; +1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;; +1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;; +1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;; +1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;; +1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;; +1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;; +12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;; +12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;; +12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;; +12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;; +12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;; +12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;; +12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;; +12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;; +12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;; +12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;; +1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;; +1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;; +1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;; +1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;; +1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;; +1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;; +12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;; +12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;; +12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;; +12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;; +12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;; +12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;; +12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;; +12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; +12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;; +12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;; +1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;; +1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;; +1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;; +1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;; +1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;; +1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;; +12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;; +12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;; +12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;; +12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;; +12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;; +12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;; +12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;; +12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;; +12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;; +12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;; +1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;; +1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;; +1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;; +1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;; +1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;; +1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;; +12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; +12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;; +12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;; +12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;; +12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;; +12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;; +12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; +12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;; +12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;; +1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;; +1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;; +1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;; +1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;; +1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;; +12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;; +12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;; +12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;; +12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;; +12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;; +12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;; +12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; +12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; +12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;; +12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;; +1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;; +1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;; +1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;; +1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;; +1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;; +1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;; +12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;; +12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;; +12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;; +12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;; +12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;; +12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;; +12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;; +12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; +12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;; +1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;; +1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;; +1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;; +1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;; +1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;; +1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;; +12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;; +12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;; +12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;; +12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;; +12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;; +12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;; +12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;; +12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;; +12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;; +12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;; +1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;; +1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;; +1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;; +1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;; +1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;; +1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;; +12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;; +12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;; +12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;; +12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;; +12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;; +12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;; +12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;; +12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;; +12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;; +12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;; +1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;; +1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;; +1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;; +1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;; +1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;; +1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;; +122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;; +122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;; +122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;; +122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;; +122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;; +122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;; +122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;; +122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;; +122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;; +122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;; +122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;; +122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;; +122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;; +122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;; +122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;; +122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;; +122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;; +122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;; +122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;; +122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;; +122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;; +122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;; +122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;; +122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;; +122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;; +122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;; +122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;; +122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;; +122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;; +122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;; +122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;; +122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;; +122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;; +122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;; +122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;; +122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;; +122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;; +122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;; +122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;; +122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;; +122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;; +122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;; +122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;; +122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;; +122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;; +122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;; +122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;; +122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;; +122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;; +122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;; +122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;; +122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;; +122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;; +122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;; +122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;; +122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;; +122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;; +122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;; +122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;; +122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;; +122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;; +122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;; +122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;; +122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;; +122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;; +122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;; +122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;; +122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;; +122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;; +122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;; +122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;; +122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;; +122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;; +122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;; +122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;; +122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;; +122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;; +122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;; +122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;; +122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;; +122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;; +122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;; +122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;; +122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;; +122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;; +122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;; +122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;; +122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;; +122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;; +122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;; +122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;; +122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;; +122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;; +122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;; +12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;; +12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;; +12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;; +12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;; +12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;; +12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;; +12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;; +12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;; +12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;; +1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;; +1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;; +1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;; +1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;; +1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;; +1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;; +12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;; +12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;; +12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;; +12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;; +12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;; +12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;; +12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;; +12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;; +12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;; +1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;; +1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;; +1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;; +1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;; +1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;; +1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;; +12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;; +12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;; +12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;; +12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;; +12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;; +12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;; +12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;; +12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;; +12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;; +12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;; +1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;; +1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;; +1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; +1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; +1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;; +1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;; +12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;; +12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;; +12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;; +12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;; +12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;; +12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;; +12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;; +12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;; +12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;; +1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;; +1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;; +1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;; +1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;; +1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;; +12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;; +12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;; +12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;; +12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;; +12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;; +12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;; +12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;; +12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;; +12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;; +12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;; +1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;; +1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;; +1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;; +1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;; +1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;; +1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;; +12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;; +12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;; +12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;; +12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;; +12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;; +12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;; +12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;; +12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;; +12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;; +12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;; +1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;; +1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;; +1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;; +1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;; +1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;; +12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;; +12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;; +12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;; +12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;; +12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;; +12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;; +12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;; +12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;; +12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;; +12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;; +1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;; +1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;; +1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;; +1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;; +1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;; +12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;; +12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;; +12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;; +12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;; +12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;; +12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;; +12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;; +12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;; +12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;; +12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;; +1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;; +1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;; +1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;; +1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;; +1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;; +1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;; +12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;; +12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;; +12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;; +12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;; +12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;; +12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;; +12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;; +12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;; +12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;; +12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;; +1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;; +1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;; +1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;; +1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;; +1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;; +1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;; +12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;; +12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;; +12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;; +12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;; +12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;; +12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;; +12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;; +12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;; +12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;; +1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;; +1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;; +1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;; +1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;; +1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;; +1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;; +12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;; +12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;;N;;;;; +12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;;N;;;;; +12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;; +12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;; +12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;; +12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;; +12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;; +1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;; +1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;; +1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;; +1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;; +1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;; +1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;; +12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;; +12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;; +12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;; +12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;; +12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;; +12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;; +12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;; +12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;; +12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;; +12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;; +1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;; +1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;; +1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;; +1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;; +1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;; +1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;; +12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;; +12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;; +12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;; +12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;; +12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;; +12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;; +12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;;N;;;;; +12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;;N;;;;; +12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;; +12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;; +1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;; +1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;; +1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;; +1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;; +1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;; +1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;; +12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;; +12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;; +12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;; +12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; +12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;; +12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;; +12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;; +1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;; +1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;; +1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;; +1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;; +1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;; +1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;; +1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;; +1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;; +1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;; +1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;; +1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;; +1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;; +1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;; +1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;; +1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;; +1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;; +1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;; +1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;; +1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;; +1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;; +1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;; +1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;; +1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;; +1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;; +1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;; +1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;; +1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;; +1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;; +1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;; +1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;; +1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;; +1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;; +1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;; +1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;; +1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;; +1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;; +1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;; +1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;; +1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;; +1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;; +1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;; +1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;; +1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;; +1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;; +1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;; +1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;; +1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;; +1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;; +1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;; +1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;; +1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;; +1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;; +1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;; +1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;; +1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;; +1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;; +1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;; +1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;; +1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;; +1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;; +1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;; +1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;; +1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;; +1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;; +1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;; +1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;; +1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;; +1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;; +1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;; +1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;; +1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;; +1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;; +1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;; +1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;; +1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;; +1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;; +1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;; +1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;; +1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;; +1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;; +1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;; +1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;; +1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;; +1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;; +1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;; +1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;; +1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;; +1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;; +1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;; +1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;; +1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;; +1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;; +1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;; +1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;; +1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;; +1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;; +1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;; +1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;; +1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;; +1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;; +1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;; +1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;; +1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;; +1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;; +1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;; +1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;; +1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;; +1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;; +1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;; +1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;; +1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;; +1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;; +1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;; +1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;; +1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;; +1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;; +1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;; +1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;; +1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;; +1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;; +1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;; +1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;; +1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;; +1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;; +1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;; +1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;; +1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;; +1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;; +1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;; +1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;; +1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;; +1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;; +1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;; +1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;; +1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;; +1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;; +1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;; +1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;; +1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;; +1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;; +1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;; +1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;; +1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;; +1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;; +1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;; +1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; +1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;; +1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;; +1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;; +1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;; +1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;; +1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;; +1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;; +1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;; +1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;; +1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;; +1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;; +1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;; +1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;; +1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;; +1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;; +1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;; +1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;; +1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;; +1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;; +1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;; +1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;; +1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;; +1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;; +1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;; +1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;; +1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;; +1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; +1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;; +1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;; +1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;; +1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;; +1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;; +1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;; +1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;; +1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;; +1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;; +1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;; +1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;; +1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;; +1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;; +1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;; +1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;; +1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;; +1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;; +1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;; +1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;; +1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;; +1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;; +1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;; +1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;; +1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;; +1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;; +1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;; +1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;; +1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;; +1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;; +1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;; +1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;; +1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;; +1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;; +1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;; +1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;; +1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; +1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; +1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; +1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; +1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;; +1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;; +1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;; +1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;; +1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;; +1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;; +1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;; +1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;; +1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;; +1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;; +1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;; +1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;; +1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;; +1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;; +1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;; +1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;; +1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;; +1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;; +1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;; +1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;; +1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;; +1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;; +1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;; +1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;; +1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;; +1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;; +1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;; +1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;; +1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;; +1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;; +1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;; +1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;; +1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;; +1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;; +1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;; +1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;; +1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;; +1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;; +1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;; +1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;; +1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;; +1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;; +1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;; +1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;; +1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;; +1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;; +1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;; +1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;; +1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;; +1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;; +1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;; +1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;; +1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;; +1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;; +1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;; +1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;; +1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;; +1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;; +1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;; +1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;; +1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;; +1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;; +1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;; +1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;; +1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;; +1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; +1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; +1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;; +1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;; +1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;; +1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; +1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;; +1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;; +1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;; +1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;; +1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;; +1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;; +1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;; +1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;; +1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;; +1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;; +1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;; +1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;; +1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;; +1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;; +1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;; +1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;; +1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;; +1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;; +1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;; +1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;; +1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;; +1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;; +1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;; +1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;; +1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;; +1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;; +1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;; +1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;; +1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;; +1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;; +1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;; +1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;; +1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;; +1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;; +1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;; +1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;; +1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;; +1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;; +1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; +1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; +1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;; +1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;; +1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;; +1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;; +1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;; +1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;; +1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;; +1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;; +1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;; +1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;; +1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;; +1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;; +1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;; +1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;; +1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;; +1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;; +1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;; +1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;; +1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;; +1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;; +1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;; +1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;; +1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;; +1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;; +1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;; +1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;; +1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;; +1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;; +1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;; +1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;; +1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;; +1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;; +1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;; +1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;; +1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;; +1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;; +1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;; +1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;; +1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;; +1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;; +1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;; +1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;; +1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;; +1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;; +1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;; +1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;; +1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;; +1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;; +1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;; +1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;; +1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;; +1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;; +1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;; +1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;; +1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;; +1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;; +1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;; +1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;; +1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;; +1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;; +1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;; +1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;; +1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;; +1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;; +1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;; +1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;; +1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;; +1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;; +1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;; +1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;; +1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;; +1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;; +1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;; +1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;; +1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;; +1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;; +1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;; +1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;; +1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;; +1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;; +1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;; +1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;; +1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;; +1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;; +1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;; +1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;; +1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;; +1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;; +1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;; +1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;; +1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;; +1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;; +1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;; +1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;; +1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;; +1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;; +1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;; +1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;; +1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;; +1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;; +1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;; +1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;; +1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;; +1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;; +1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;; +1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;; +1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;; +1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;; +1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;; +1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;; +1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;; +1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;; +1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;; +1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;; +1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;; +1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;; +1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;; +1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; +1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; +1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; +1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;; +1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;; +1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;; +1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;; +1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;; +1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;; +1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;; +1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;; +1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;; +1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;; +1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;; +1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;; +1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;; +1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;; +1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;; +1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;; +1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;; +1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;; +1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;; +1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;; +1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; +1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; +1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;; +1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; +1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; +1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;; +1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; +1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; +1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;; +1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;; +1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; +1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; +1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; +1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; +1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;; +1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;; +1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; +1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; +1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; +1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;; +1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;; +1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;; +1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; +1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; +1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; +1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; +1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; +1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; +1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; +1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; +1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; +1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; +1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; +1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; +1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; +1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; +1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; +1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; +1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; +1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; +1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; +1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; +1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; +1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; +1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;; +1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;; +1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;; +1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;; +1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;; +1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;; +1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;; +1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;; +1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;; +1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;; +1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;; +1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;; +1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;; +1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;; +1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;; +1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;; +1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;; +1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; +1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; +1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; +1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; +1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; +1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;; +1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;; +1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;; +1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;; +1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;ren *;;; +1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;tian ren *;;; +1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;di ren *;;; +1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;ren tian *;;; +1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;ren di *;;; +1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;ren ren *;;; +1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;; +1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;; +1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;; +1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;; +1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;; +1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;; +1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;; +1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;; +1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;; +1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;; +1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;; +1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;; +1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;; +1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;; +1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;; +1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;; +1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;; +1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;; +1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;; +1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;; +1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;; +1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;; +1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;; +1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;; +1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;; +1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;; +1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;; +1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;; +1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;; +1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;; +1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;; +1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;; +1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;; +1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;; +1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;; +1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;; +1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;; +1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;; +1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;; +1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;; +1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;; +1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;; +1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;; +1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;; +1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;; +1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;; +1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;; +1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;; +1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;; +1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;; +1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;; +1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;; +1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;; +1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;; +1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;; +1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;; +1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;; +1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;; +1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;; +1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;; +1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;; +1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;; +1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;; +1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;; +1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;; +1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;; +1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;; +1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;; +1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;; +1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;; +1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;; +1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;; +1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;; +1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;; +1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;; +1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;; +1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;; +1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;; +1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;; +1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;; +1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;; +1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;; +1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;; +1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;; +1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;; +1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;; +1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;; +1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;; +1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;; +1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;; +1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;; +1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;; +1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;; +1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;; +1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;; +1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;; +1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;; +1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;; +1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;; +1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L; 0041;;;;N;;;;; +1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L; 0042;;;;N;;;;; +1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L; 0043;;;;N;;;;; +1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L; 0044;;;;N;;;;; +1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L; 0045;;;;N;;;;; +1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L; 0046;;;;N;;;;; +1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L; 0047;;;;N;;;;; +1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L; 0048;;;;N;;;;; +1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L; 0049;;;;N;;;;; +1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L; 004A;;;;N;;;;; +1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L; 004B;;;;N;;;;; +1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L; 004C;;;;N;;;;; +1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L; 004D;;;;N;;;;; +1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L; 004E;;;;N;;;;; +1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L; 004F;;;;N;;;;; +1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L; 0050;;;;N;;;;; +1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L; 0051;;;;N;;;;; +1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L; 0052;;;;N;;;;; +1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L; 0053;;;;N;;;;; +1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L; 0054;;;;N;;;;; +1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L; 0055;;;;N;;;;; +1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L; 0056;;;;N;;;;; +1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L; 0057;;;;N;;;;; +1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L; 0058;;;;N;;;;; +1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L; 0059;;;;N;;;;; +1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L; 005A;;;;N;;;;; +1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L; 0061;;;;N;;;;; +1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L; 0062;;;;N;;;;; +1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L; 0063;;;;N;;;;; +1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L; 0064;;;;N;;;;; +1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L; 0065;;;;N;;;;; +1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L; 0066;;;;N;;;;; +1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L; 0067;;;;N;;;;; +1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L; 0068;;;;N;;;;; +1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L; 0069;;;;N;;;;; +1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L; 006A;;;;N;;;;; +1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L; 006B;;;;N;;;;; +1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L; 006C;;;;N;;;;; +1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L; 006D;;;;N;;;;; +1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L; 006E;;;;N;;;;; +1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L; 006F;;;;N;;;;; +1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L; 0070;;;;N;;;;; +1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L; 0071;;;;N;;;;; +1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L; 0072;;;;N;;;;; +1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L; 0073;;;;N;;;;; +1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L; 0074;;;;N;;;;; +1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L; 0075;;;;N;;;;; +1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L; 0076;;;;N;;;;; +1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L; 0077;;;;N;;;;; +1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L; 0078;;;;N;;;;; +1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L; 0079;;;;N;;;;; +1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L; 007A;;;;N;;;;; +1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L; 0131;;;;N;;;;; +1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L; 0237;;;;N;;;;; +1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; +1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; +1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; +1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; +1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; +1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; +1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; +1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; +1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; +1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; +1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; +1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; +1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; +1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; +1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; +1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; +1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; +1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; +1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; +1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; +1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; +1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; +1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; +1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L; 2207;;;;N;;;;; +1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; +1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; +1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; +1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; +1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; +1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; +1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; +1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; +1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; +1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; +1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L; 03BC;;;;N;;;;; +1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L; 03BD;;;;N;;;;; +1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L; 03BE;;;;N;;;;; +1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; +1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; +1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; +1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; +1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; +1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; +1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; +1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; +1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; +1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; +1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L; 2202;;;;Y;;;;; +1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; +1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; +1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; +1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; +1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; +1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; +1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; +1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; +1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; +1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; +1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; +1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; +1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; +1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; +1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; +1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; +1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; +1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; +1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; +1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; +1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; +1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; +1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; +1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; +1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; +1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; +1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; +1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; +1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; +1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; +1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; +1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; +1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; +1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; +1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; +1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; +1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; +1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; +1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; +1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; +1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; +1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; +1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; +1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; +1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; +1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; +1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; +1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; +1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; +1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; +1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; +1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; +1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; +1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L; 2202;;;;Y;;;;; +1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; +1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; +1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; +1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; +1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; +1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; +1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; +1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; +1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; +1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; +1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; +1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; +1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; +1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; +1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; +1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; +1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; +1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; +1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; +1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; +1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; +1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; +1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; +1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; +1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; +1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; +1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; +1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; +1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; +1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; +1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; +1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; +1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; +1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; +1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; +1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; +1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; +1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; +1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; +1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; +1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; +1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; +1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; +1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; +1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; +1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; +1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; +1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; +1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; +1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; +1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; +1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; +1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; +1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L; 2202;;;;Y;;;;; +1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; +1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; +1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; +1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; +1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; +1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; +1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; +1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; +1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; +1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; +1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; +1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; +1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; +1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; +1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; +1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; +1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; +1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; +1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; +1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; +1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; +1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; +1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; +1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; +1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; +1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; +1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; +1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; +1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; +1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L; 2207;;;;N;;;;; +1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; +1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; +1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; +1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; +1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; +1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; +1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; +1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; +1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; +1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; +1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L; 03BC;;;;N;;;;; +1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L; 03BD;;;;N;;;;; +1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L; 03BE;;;;N;;;;; +1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; +1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; +1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; +1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; +1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; +1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; +1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; +1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; +1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; +1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; +1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L; 2202;;;;Y;;;;; +1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; +1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; +1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; +1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; +1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; +1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; +1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L; 0391;;;;N;;;;; +1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L; 0392;;;;N;;;;; +1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L; 0393;;;;N;;;;; +1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L; 0394;;;;N;;;;; +1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L; 0395;;;;N;;;;; +1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L; 0396;;;;N;;;;; +1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L; 0397;;;;N;;;;; +1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L; 0398;;;;N;;;;; +1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L; 0399;;;;N;;;;; +1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L; 039A;;;;N;;;;; +1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L; 039B;;;;N;;;;; +1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L; 039C;;;;N;;;;; +1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L; 039D;;;;N;;;;; +1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L; 039E;;;;N;;;;; +1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L; 039F;;;;N;;;;; +1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L; 03A0;;;;N;;;;; +1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L; 03A1;;;;N;;;;; +1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L; 03F4;;;;N;;;;; +1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L; 03A3;;;;N;;;;; +1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L; 03A4;;;;N;;;;; +1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L; 03A5;;;;N;;;;; +1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L; 03A6;;;;N;;;;; +1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L; 03A7;;;;N;;;;; +1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L; 03A8;;;;N;;;;; +1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L; 03A9;;;;N;;;;; +1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L; 2207;;;;N;;;;; +1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L; 03B1;;;;N;;;;; +1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L; 03B2;;;;N;;;;; +1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L; 03B3;;;;N;;;;; +1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L; 03B4;;;;N;;;;; +1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L; 03B5;;;;N;;;;; +1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L; 03B6;;;;N;;;;; +1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L; 03B7;;;;N;;;;; +1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L; 03B8;;;;N;;;;; +1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L; 03B9;;;;N;;;;; +1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L; 03BA;;;;N;;;;; +1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L; 03BB;;;;N;;;;; +1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L; 03BC;;;;N;;;;; +1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L; 03BD;;;;N;;;;; +1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L; 03BE;;;;N;;;;; +1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L; 03BF;;;;N;;;;; +1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L; 03C0;;;;N;;;;; +1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L; 03C1;;;;N;;;;; +1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L; 03C2;;;;N;;;;; +1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L; 03C3;;;;N;;;;; +1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L; 03C4;;;;N;;;;; +1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L; 03C5;;;;N;;;;; +1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L; 03C6;;;;N;;;;; +1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L; 03C7;;;;N;;;;; +1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L; 03C8;;;;N;;;;; +1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L; 03C9;;;;N;;;;; +1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L; 2202;;;;Y;;;;; +1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L; 03F5;;;;N;;;;; +1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L; 03D1;;;;N;;;;; +1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L; 03F0;;;;N;;;;; +1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L; 03D5;;;;N;;;;; +1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L; 03F1;;;;N;;;;; +1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L; 03D6;;;;N;;;;; +1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L; 03DC;;;;N;;;;; +1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L; 03DD;;;;N;;;;; +1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN; 0030;0;0;0;N;;;;; +1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN; 0031;1;1;1;N;;;;; +1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN; 0032;2;2;2;N;;;;; +1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN; 0033;3;3;3;N;;;;; +1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN; 0034;4;4;4;N;;;;; +1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN; 0035;5;5;5;N;;;;; +1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN; 0036;6;6;6;N;;;;; +1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN; 0037;7;7;7;N;;;;; +1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; +1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; +1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;; +1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;; +1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;; +1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;; +1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;; +1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;; +1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;; +1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;; +1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;; +1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;; +1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;; +1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;; +1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;; +1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;; +1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;; +1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;; +1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;; +1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;; +1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;; +1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;; +1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;; +1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;; +1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;; +1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;; +1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;; +1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;; +1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;; +1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;; +1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;; +1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;; +1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;; +1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;; +1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;; +1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;; +1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;; +1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;; +1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;; +1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;; +1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;; +1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;; +1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;; +1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;; +1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;; +1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;; +1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;; +1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;; +1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;; +1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;; +1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;; +1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;; +1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;; +1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;; +1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;; +1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;; +1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;; +1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;; +1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;; +1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;; +1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;; +1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;; +1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;; +1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;; +1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;; +1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;; +1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;; +1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;; +1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;; +1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;; +1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;; +1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;; +1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;; +1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;; +1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;; +1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;; +1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;; +1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;; +1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;; +1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;; +1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;; +1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;; +1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;; +1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;; +1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;; +1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;; +1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;; +1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;; +1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;; +1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;; +1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;; +1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;; +1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;; +1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;; +1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;; +1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;; +1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;; +1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;; +1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;; +1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;; +1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;; +1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;; +1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;; +1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;; +1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;; +1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;; +1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;; +1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;; +1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;; +1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;; +1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;; +1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;; +1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;; +1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;; +1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;; +1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;; +1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;; +1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;; +1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;; +1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;; +1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;; +2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;; +2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;; +2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;; +2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;; +2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;; +2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;; +2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;; +2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;; +2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;; +2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;; +2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;; +2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;; +2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;; +2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;; +2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;; +2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;; +2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;; +2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;; +2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;; +2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;; +2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;; +2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;; +2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;; +2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;; +2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;; +2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;; +2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;; +2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;; +2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;; +2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;; +2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;; +2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;; +2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;; +2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;; +2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;; +2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;; +2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;; +2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;; +2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;; +2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;; +2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;; +2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;; +2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;; +2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;; +2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;; +2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;; +2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;; +2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;; +2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;; +2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;; +2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;; +2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;; +2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;; +2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;; +2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;; +2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;; +2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;; +2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;; +2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;; +2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;; +2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;; +2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;; +2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;; +2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;; +2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;; +2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;; +2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;; +2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;; +2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;; +2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;; +2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;; +2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;; +2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;; +2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;; +2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;; +2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;; +2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;; +2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;; +2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;; +2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;; +2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;; +2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;; +2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;; +2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;; +2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;; +2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;; +2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;; +2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;; +2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;; +2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;; +2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;; +2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;; +2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;; +2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;; +2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;; +2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;; +2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;; +2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;; +2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;; +2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;; +2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;; +2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;; +2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;; +2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;; +2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;; +2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;; +2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;; +2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;; +2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;; +2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;; +2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;; +2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;; +2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;; +2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;; +2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;; +2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;; +2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;; +2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;; +2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;; +2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;; +2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;; +2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;; +2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;; +2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;; +2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;; +2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;; +2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;; +2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;; +2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;; +2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;; +2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;; +2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;; +2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;; +2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;; +2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;; +2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;; +2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;; +2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;; +2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;; +2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;; +2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;; +2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;; +2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;; +2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;; +2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;; +2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;; +2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;; +2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;; +2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;; +2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;; +2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;; +2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;; +2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;; +2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;; +2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;; +2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;; +2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;; +2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;; +2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;; +2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;; +2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;; +2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;; +2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;; +2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;; +2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;; +2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;; +2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;; +2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;; +2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;; +2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;; +2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;; +2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;; +2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;; +2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;; +2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;; +2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;; +2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;; +2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;; +2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;; +2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;; +2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;; +2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;; +2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;; +2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;; +2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;; +2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;; +2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;; +2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;; +2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;; +2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;; +2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;; +2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;; +2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;; +2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;; +2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;; +2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;; +2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;; +2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;; +2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;; +2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;; +2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;; +2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;; +2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;; +2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;; +2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;; +2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;; +2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;; +2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;; +2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;; +2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;; +2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;; +2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;; +2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;; +2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;; +2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;; +2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;; +2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;; +2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;; +2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;; +2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;; +2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;; +2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;; +2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;; +2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;; +2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;; +2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;; +2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;; +2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;; +2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;; +2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;; +2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;; +2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;; +2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;; +2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;; +2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;; +2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;; +2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;; +2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;; +2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;; +2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;; +2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;; +2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;; +2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;; +2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;; +2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;; +2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;; +2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;; +2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;; +2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;; +2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;; +2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;; +2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;; +2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;; +2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;; +2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;; +2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;; +2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;; +2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;; +2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;; +2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;; +2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;; +2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;; +2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;; +2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;; +2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;; +2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;; +2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;; +2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;; +2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;; +2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;; +2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;; +2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;; +2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;; +2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;; +2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;; +2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;; +2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;; +2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;; +2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;; +2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;; +2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;; +2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;; +2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;; +2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;; +2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;; +2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;; +2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;; +2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;; +2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;; +2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;; +2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;; +2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;; +2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;; +2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;; +2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;; +2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;; +2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;; +2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;; +2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;; +2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;; +2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;; +2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;; +2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;; +2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;; +2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;; +2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;; +2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;; +2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;; +2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;; +2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;; +2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;; +2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;; +2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;; +2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;; +2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;; +2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;; +2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;; +2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;; +2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;; +2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;; +2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;; +2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;; +2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;; +2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;; +2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;; +2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;; +2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;; +2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;; +2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;; +2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;; +2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;; +2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;; +2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;; +2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;; +2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;; +2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;; +2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;; +2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;; +2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;; +2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;; +2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;; +2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;; +2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;; +2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;; +2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;; +2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;; +2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;; +2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;; +2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;; +2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;; +2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;; +2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;; +2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;; +2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;; +2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;; +2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;; +2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;; +2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;; +2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;; +2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;; +2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;; +2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;; +2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;; +2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;; +2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;; +2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;; +2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;; +2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;; +2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;; +2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;; +2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;; +2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;; +2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;; +2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;; +2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;; +2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;; +2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;; +2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;; +2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;; +2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;; +2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;; +2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;; +2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;; +2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;; +2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;; +2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;; +2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;; +2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;; +2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;; +2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;; +2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;; +2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;; +2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;; +2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;; +2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;; +2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;; +2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;; +2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;; +2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;; +2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;; +2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;; +2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;; +2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;; +2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;; +2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;; +2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;; +2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;; +2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;; +2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;; +2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;; +2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;; +2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;; +2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;; +2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;; +2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;; +2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;; +2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;; +2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;; +2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;; +2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;; +2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;; +2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;; +2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;; +2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;; +2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;; +2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;; +2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;; +2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;; +2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;; +2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;; +2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;; +2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;; +2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;; +2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;; +2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;; +2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;; +2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;; +2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;; +2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;; +2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;; +2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;; +2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;; +2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;; +2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;; +2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;; +2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;; +2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;; +2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;; +2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;; +2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;; +2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;; +2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;; +2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;; +2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;; +2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;; +2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;; +2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;; +2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;; +2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;; +2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;; +2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;; +2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;; +2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;; +2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;; +2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;; +2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;; +2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;; +2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;; +2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;; +2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;; +2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;; +2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;; +2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;; +2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;; +2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;; +2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;; +2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;; +2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;; +2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;; +2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;; +2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;; +2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;; +2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;; +2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;; +2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;; +2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;; +2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;; +2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;; +2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;; +2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;; +2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;; +2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;; +2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;; +2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;; +2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;; +2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;; +2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;; +2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;; +2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;; +2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;; +2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;; +2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;; +2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;; +2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;; +2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;; +2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;; +2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;; +2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;; +2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;; +2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;; +2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;; +2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;; +2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;; +2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;; +2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;; +2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;; +2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;; +2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;; +2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;; +2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;; +2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;; +2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;; +2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;; +2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;; +2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;; +2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;; +2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;; +2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;; +2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;; +2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;; +2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;; +2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;; +2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;; +2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;; +2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;; +2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;; +2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;; +2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;; +2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;; +2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;; +2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;; +2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;; +E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;; +E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;; +E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;; +E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;; +E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;; +E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;; +E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;; +E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;; +E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;; +E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;; +E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;; +E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;; +E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;; +E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;; +E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;; +E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;; +E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;; +E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;; +E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;; +E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;; +E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;; +E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;; +E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;; +E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;; +E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;; +E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;; +E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;; +E003A;TAG COLON;Cf;0;BN;;;;;N;;;;; +E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;; +E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;; +E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;; +E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;; +E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;; +E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;; +E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;; +E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;; +E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;; +E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;; +E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;; +E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;; +E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;; +E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;; +E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;; +E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;; +E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;; +E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;; +E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;; +E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;; +E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;; +E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;; +E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;; +E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;; +E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;; +E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;; +E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;; +E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;; +E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;; +E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;; +E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;; +E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;; +E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; +E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;; +E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;; +E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;; +E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;; +E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;; +E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;; +E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;; +E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;; +E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;; +E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;; +E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;; +E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;; +E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;; +E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;; +E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;; +E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;; +E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;; +E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;; +E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;; +E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;; +E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;; +E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;; +E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;; +E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;; +E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;; +E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;; +E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;; +E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;; +E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;; +E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;; +E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;; +E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; +E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;; +E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;; +E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;; +E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;; +E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;; +E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;; +E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;; +E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;; +E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;; +E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;; +E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;; +E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;; +E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;; +E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;; +E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;; +E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;; +E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;; +E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;; +E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;; +E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;; +E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;; +E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;; +E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;; +E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;; +E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;; +E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;; +E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;; +E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;; +E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;; +E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;; +E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;; +E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;; +E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;; +E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;; +E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;; +E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;; +E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;; +E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;; +E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;; +E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;; +E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;; +E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;; +E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;; +E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;; +E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;; +E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;; +E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;; +E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;; +E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;; +E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;; +E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;; +E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;; +E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;; +E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;; +E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;; +E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;; +E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;; +E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;; +E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;; +E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;; +E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;; +E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;; +E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;; +E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;; +E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;; +E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;; +E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;; +E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;; +E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;; +E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;; +E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;; +E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;; +E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;; +E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;; +E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;; +E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;; +E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;; +E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;; +E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;; +E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;; +E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;; +E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;; +E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;; +E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;; +E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;; +E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;; +E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;; +E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;; +E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;; +E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;; +E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;; +E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;; +E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;; +E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;; +E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;; +E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;; +E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;; +E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;; +E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;; +E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;; +E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;; +E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;; +E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;; +E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;; +E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;; +E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;; +E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;; +E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;; +E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;; +E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;; +E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;; +E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;; +E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;; +E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;; +E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;; +E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;; +E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;; +E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;; +E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;; +E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;; +E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;; +E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;; +E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;; +E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;; +E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;; +E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;; +E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;; +E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;; +E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;; +E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;; +E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;; +E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;; +E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;; +E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;; +E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;; +E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;; +E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;; +E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;; +E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;; +E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;; +E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;; +E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;; +E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;; +E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;; +E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;; +E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;; +E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;; +E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;; +E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;; +E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;; +E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;; +E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;; +E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;; +E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;; +E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;; +E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;; +E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;; +E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;; +E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;; +E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;; +E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;; +E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;; +E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;; +E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;; +E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;; +E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;; +E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;; +E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;; +E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;; +E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;; +E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;; +E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;; +E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;; +E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;; +E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;; +E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;; +E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;; +E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;; +E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;; +E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;; +E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;; +E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;; +E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;; +E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;; +E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;; +E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;; +E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;; +E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;; +E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;; +E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;; +E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;; +E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;; +E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;; +E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;; +E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;; +E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;; +E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;; +E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;; +E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;; +E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;; +E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;; +E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;; +E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;; +E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;; +E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;; +E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;; +E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;; +E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;; +E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;; +E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;; +E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;; +E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;; +E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;; +E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;; +E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;; +E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;; +E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;; +E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;; +E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;; +E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;; +E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;; +E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;; +E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;; +E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;; +E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;; +E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;; +E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;; +E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;; +E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;; +E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;; +E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;; +E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;; +E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;; +E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;; +E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;; +E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;; +E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;; +E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;; +E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;; +E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;; +E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;; +E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;; +E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;; +E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;; diff --git a/tests/uniname/test-uninames.c b/tests/uniname/test-uninames.c new file mode 100644 index 00000000..1408434b --- /dev/null +++ b/tests/uniname/test-uninames.c @@ -0,0 +1,261 @@ +/* Test the Unicode character name functions. + Copyright (C) 2000-2003, 2005, 2007, 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include +#include +#include + +#include "xalloc.h" +#include "uniname.h" +#include "progname.h" + +/* The names according to the UnicodeData.txt file, modified to contain the + Hangul syllable names, as described in the Unicode 3.0 book. */ +const char * unicode_names [0x110000]; + +/* Maximum length of a field in the UnicodeData.txt file. */ +#define FIELDLEN 120 + +/* Reads the next field from STREAM. The buffer BUFFER has size FIELDLEN. + Reads up to (but excluding) DELIM. + Returns 1 when a field was successfully read, otherwise 0. */ +static int +getfield (FILE *stream, char *buffer, int delim) +{ + int count = 0; + int c; + + for (; (c = getc (stream)), (c != EOF && c != delim); ) + { + /* Put c into the buffer. */ + if (++count >= FIELDLEN - 1) + { + fprintf (stderr, "field too long\n"); + exit (EXIT_FAILURE); + } + *buffer++ = c; + } + + if (c == EOF) + return 0; + + *buffer = '\0'; + return 1; +} + +/* Stores in unicode_names[] the relevant contents of the UnicodeData.txt + file. */ +static void +fill_names (const char *unicodedata_filename) +{ + unsigned int i; + FILE *stream; + char field0[FIELDLEN]; + char field1[FIELDLEN]; + int lineno = 0; + + for (i = 0; i < 0x110000; i++) + unicode_names[i] = NULL; + + stream = fopen (unicodedata_filename, "r"); + if (stream == NULL) + { + fprintf (stderr, "error during fopen of '%s'\n", unicodedata_filename); + exit (EXIT_FAILURE); + } + + for (;;) + { + int n; + int c; + + lineno++; + n = getfield (stream, field0, ';'); + n += getfield (stream, field1, ';'); + if (n == 0) + break; + if (n != 2) + { + fprintf (stderr, "short line in '%s':%d\n", + unicodedata_filename, lineno); + exit (EXIT_FAILURE); + } + for (; (c = getc (stream)), (c != EOF && c != '\n'); ) + ; + i = strtoul (field0, NULL, 16); + if (i >= 0x110000) + { + fprintf (stderr, "index too large\n"); + exit (EXIT_FAILURE); + } + unicode_names[i] = xstrdup (field1); + } + if (ferror (stream) || fclose (stream)) + { + fprintf (stderr, "error reading from '%s'\n", unicodedata_filename); + exit (1); + } +} + +/* Perform an exhaustive test of the unicode_character_name function. */ +static int +test_name_lookup () +{ + int error = 0; + unsigned int i; + char buf[UNINAME_MAX]; + + for (i = 0; i < 0x11000; i++) + { + char *result = unicode_character_name (i, buf); + + if (unicode_names[i] != NULL) + { + if (result == NULL) + { + fprintf (stderr, "\\u%04X name lookup failed!\n", i); + error = 1; + } + else if (strcmp (result, unicode_names[i]) != 0) + { + fprintf (stderr, "\\u%04X name lookup returned wrong name: %s\n", + i, result); + error = 1; + } + } + else + { + if (result != NULL) + { + fprintf (stderr, "\\u%04X name lookup returned wrong name: %s\n", + i, result); + error = 1; + } + } + } + + for (i = 0x110000; i < 0x1000000; i++) + { + char *result = unicode_character_name (i, buf); + + if (result != NULL) + { + fprintf (stderr, "\\u%04X name lookup returned wrong name: %s\n", + i, result); + error = 1; + } + } + + return error; +} + +/* Perform a test of the unicode_name_character function. */ +static int +test_inverse_lookup () +{ + int error = 0; + unsigned int i; + + /* First, verify all valid character names are recognized. */ + for (i = 0; i < 0x110000; i++) + if (unicode_names[i] != NULL) + { + unsigned int result = unicode_name_character (unicode_names[i]); + if (result != i) + { + if (result == UNINAME_INVALID) + fprintf (stderr, "inverse name lookup of \"%s\" failed\n", + unicode_names[i]); + else + fprintf (stderr, + "inverse name lookup of \"%s\" returned 0x%04X\n", + unicode_names[i], result); + error = 1; + } + } + + /* Second, generate random but likely names and verify they are not + recognized unless really valid. */ + for (i = 0; i < 10000; i++) + { + unsigned int i1, i2; + const char *s1; + const char *s2; + unsigned int l1, l2, j1, j2; + char buf[2*UNINAME_MAX]; + unsigned int result; + + do i1 = ((rand () % 0x11) << 16) + + ((rand () & 0xff) << 8) + + (rand () & 0xff); + while (unicode_names[i1] == NULL); + + do i2 = ((rand () % 0x11) << 16) + + ((rand () & 0xff) << 8) + + (rand () & 0xff); + while (unicode_names[i2] == NULL); + + s1 = unicode_names[i1]; + l1 = strlen (s1); + s2 = unicode_names[i2]; + l2 = strlen (s2); + + /* Concatenate a starting piece of s1 with an ending piece of s2. */ + for (j1 = 1; j1 <= l1; j1++) + if (j1 == l1 || s1[j1] == ' ') + for (j2 = 0; j2 < l2; j2++) + if (j2 == 0 || s2[j2-1] == ' ') + { + memcpy (buf, s1, j1); + buf[j1] = ' '; + memcpy (buf + j1 + 1, s2 + j2, l2 - j2 + 1); + + result = unicode_name_character (buf); + if (result != UNINAME_INVALID + && !(unicode_names[result] != NULL + && strcmp (unicode_names[result], buf) == 0)) + { + fprintf (stderr, + "inverse name lookup of \"%s\" returned 0x%04X\n", + unicode_names[i], result); + error = 1; + } + } + } + + /* Third, some extreme case that used to loop. */ + if (unicode_name_character ("A A") != UNINAME_INVALID) + error = 1; + + return error; +} + +int +main (int argc, char *argv[]) +{ + int error = 0; + + set_program_name (argv[0]); + + fill_names (argv[1]); + + error |= test_name_lookup (); + error |= test_inverse_lookup (); + + return error; +} diff --git a/tests/uniname/test-uninames.sh b/tests/uniname/test-uninames.sh new file mode 100755 index 00000000..f26c275e --- /dev/null +++ b/tests/uniname/test-uninames.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec ./test-uninames${EXEEXT} "$srcdir/uniname/UnicodeDataNames.txt" diff --git a/tests/uninorm/NormalizationTest.txt b/tests/uninorm/NormalizationTest.txt new file mode 100644 index 00000000..0bb97659 --- /dev/null +++ b/tests/uninorm/NormalizationTest.txt @@ -0,0 +1,17819 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +@Part0 + +1E0A;1E0A;0044 0307;1E0A;0044 0307; +1E0C;1E0C;0044 0323;1E0C;0044 0323; +1E0A 0323;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; +1E0C 0307;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; +0044 0307 0323;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; +0044 0323 0307;1E0C 0307;0044 0323 0307;1E0C 0307;0044 0323 0307; +1E0A 031B;1E0A 031B;0044 031B 0307;1E0A 031B;0044 031B 0307; +1E0C 031B;1E0C 031B;0044 031B 0323;1E0C 031B;0044 031B 0323; +1E0A 031B 0323;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; +1E0C 031B 0307;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; +0044 031B 0307 0323;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; +0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307;1E0C 031B 0307;0044 031B 0323 0307; +00C8;00C8;0045 0300;00C8;0045 0300; +0112;0112;0045 0304;0112;0045 0304; +0045 0300;00C8;0045 0300;00C8;0045 0300; +0045 0304;0112;0045 0304;0112;0045 0304; +1E14;1E14;0045 0304 0300;1E14;0045 0304 0300; +0112 0300;1E14;0045 0304 0300;1E14;0045 0304 0300; +1E14 0304;1E14 0304;0045 0304 0300 0304;1E14 0304;0045 0304 0300 0304; +0045 0304 0300;1E14;0045 0304 0300;1E14;0045 0304 0300; +0045 0300 0304;00C8 0304;0045 0300 0304;00C8 0304;0045 0300 0304; +05B8 05B9 05B1 0591 05C3 05B0 05AC 059F;05B1 05B8 05B9 0591 05C3 05B0 05AC 059F;05B1 05B8 05B9 0591 05C3 05B0 05AC 059F;05B1 05B8 05B9 0591 05C3 05B0 05AC 059F;05B1 05B8 05B9 0591 05C3 05B0 05AC 059F; +0592 05B7 05BC 05A5 05B0 05C0 05C4 05AD;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4;05B0 05B7 05BC 05A5 0592 05C0 05AD 05C4; + +@Part1 + + +00A0;00A0;00A0;0020;0020; +00A8;00A8;00A8;0020 0308;0020 0308; +00AA;00AA;00AA;0061;0061; +00AF;00AF;00AF;0020 0304;0020 0304; +00B2;00B2;00B2;0032;0032; +00B3;00B3;00B3;0033;0033; +00B4;00B4;00B4;0020 0301;0020 0301; +00B5;00B5;00B5;03BC;03BC; +00B8;00B8;00B8;0020 0327;0020 0327; +00B9;00B9;00B9;0031;0031; +00BA;00BA;00BA;006F;006F; +00BC;00BC;00BC;0031 2044 0034;0031 2044 0034; +00BD;00BD;00BD;0031 2044 0032;0031 2044 0032; +00BE;00BE;00BE;0033 2044 0034;0033 2044 0034; +00C0;00C0;0041 0300;00C0;0041 0300; +00C1;00C1;0041 0301;00C1;0041 0301; +00C2;00C2;0041 0302;00C2;0041 0302; +00C3;00C3;0041 0303;00C3;0041 0303; +00C4;00C4;0041 0308;00C4;0041 0308; +00C5;00C5;0041 030A;00C5;0041 030A; +00C7;00C7;0043 0327;00C7;0043 0327; +00C8;00C8;0045 0300;00C8;0045 0300; +00C9;00C9;0045 0301;00C9;0045 0301; +00CA;00CA;0045 0302;00CA;0045 0302; +00CB;00CB;0045 0308;00CB;0045 0308; +00CC;00CC;0049 0300;00CC;0049 0300; +00CD;00CD;0049 0301;00CD;0049 0301; +00CE;00CE;0049 0302;00CE;0049 0302; +00CF;00CF;0049 0308;00CF;0049 0308; +00D1;00D1;004E 0303;00D1;004E 0303; +00D2;00D2;004F 0300;00D2;004F 0300; +00D3;00D3;004F 0301;00D3;004F 0301; +00D4;00D4;004F 0302;00D4;004F 0302; +00D5;00D5;004F 0303;00D5;004F 0303; +00D6;00D6;004F 0308;00D6;004F 0308; +00D9;00D9;0055 0300;00D9;0055 0300; +00DA;00DA;0055 0301;00DA;0055 0301; +00DB;00DB;0055 0302;00DB;0055 0302; +00DC;00DC;0055 0308;00DC;0055 0308; +00DD;00DD;0059 0301;00DD;0059 0301; +00E0;00E0;0061 0300;00E0;0061 0300; +00E1;00E1;0061 0301;00E1;0061 0301; +00E2;00E2;0061 0302;00E2;0061 0302; +00E3;00E3;0061 0303;00E3;0061 0303; +00E4;00E4;0061 0308;00E4;0061 0308; +00E5;00E5;0061 030A;00E5;0061 030A; +00E7;00E7;0063 0327;00E7;0063 0327; +00E8;00E8;0065 0300;00E8;0065 0300; +00E9;00E9;0065 0301;00E9;0065 0301; +00EA;00EA;0065 0302;00EA;0065 0302; +00EB;00EB;0065 0308;00EB;0065 0308; +00EC;00EC;0069 0300;00EC;0069 0300; +00ED;00ED;0069 0301;00ED;0069 0301; +00EE;00EE;0069 0302;00EE;0069 0302; +00EF;00EF;0069 0308;00EF;0069 0308; +00F1;00F1;006E 0303;00F1;006E 0303; +00F2;00F2;006F 0300;00F2;006F 0300; +00F3;00F3;006F 0301;00F3;006F 0301; +00F4;00F4;006F 0302;00F4;006F 0302; +00F5;00F5;006F 0303;00F5;006F 0303; +00F6;00F6;006F 0308;00F6;006F 0308; +00F9;00F9;0075 0300;00F9;0075 0300; +00FA;00FA;0075 0301;00FA;0075 0301; +00FB;00FB;0075 0302;00FB;0075 0302; +00FC;00FC;0075 0308;00FC;0075 0308; +00FD;00FD;0079 0301;00FD;0079 0301; +00FF;00FF;0079 0308;00FF;0079 0308; +0100;0100;0041 0304;0100;0041 0304; +0101;0101;0061 0304;0101;0061 0304; +0102;0102;0041 0306;0102;0041 0306; +0103;0103;0061 0306;0103;0061 0306; +0104;0104;0041 0328;0104;0041 0328; +0105;0105;0061 0328;0105;0061 0328; +0106;0106;0043 0301;0106;0043 0301; +0107;0107;0063 0301;0107;0063 0301; +0108;0108;0043 0302;0108;0043 0302; +0109;0109;0063 0302;0109;0063 0302; +010A;010A;0043 0307;010A;0043 0307; +010B;010B;0063 0307;010B;0063 0307; +010C;010C;0043 030C;010C;0043 030C; +010D;010D;0063 030C;010D;0063 030C; +010E;010E;0044 030C;010E;0044 030C; +010F;010F;0064 030C;010F;0064 030C; +0112;0112;0045 0304;0112;0045 0304; +0113;0113;0065 0304;0113;0065 0304; +0114;0114;0045 0306;0114;0045 0306; +0115;0115;0065 0306;0115;0065 0306; +0116;0116;0045 0307;0116;0045 0307; +0117;0117;0065 0307;0117;0065 0307; +0118;0118;0045 0328;0118;0045 0328; +0119;0119;0065 0328;0119;0065 0328; +011A;011A;0045 030C;011A;0045 030C; +011B;011B;0065 030C;011B;0065 030C; +011C;011C;0047 0302;011C;0047 0302; +011D;011D;0067 0302;011D;0067 0302; +011E;011E;0047 0306;011E;0047 0306; +011F;011F;0067 0306;011F;0067 0306; +0120;0120;0047 0307;0120;0047 0307; +0121;0121;0067 0307;0121;0067 0307; +0122;0122;0047 0327;0122;0047 0327; +0123;0123;0067 0327;0123;0067 0327; +0124;0124;0048 0302;0124;0048 0302; +0125;0125;0068 0302;0125;0068 0302; +0128;0128;0049 0303;0128;0049 0303; +0129;0129;0069 0303;0129;0069 0303; +012A;012A;0049 0304;012A;0049 0304; +012B;012B;0069 0304;012B;0069 0304; +012C;012C;0049 0306;012C;0049 0306; +012D;012D;0069 0306;012D;0069 0306; +012E;012E;0049 0328;012E;0049 0328; +012F;012F;0069 0328;012F;0069 0328; +0130;0130;0049 0307;0130;0049 0307; +0132;0132;0132;0049 004A;0049 004A; +0133;0133;0133;0069 006A;0069 006A; +0134;0134;004A 0302;0134;004A 0302; +0135;0135;006A 0302;0135;006A 0302; +0136;0136;004B 0327;0136;004B 0327; +0137;0137;006B 0327;0137;006B 0327; +0139;0139;004C 0301;0139;004C 0301; +013A;013A;006C 0301;013A;006C 0301; +013B;013B;004C 0327;013B;004C 0327; +013C;013C;006C 0327;013C;006C 0327; +013D;013D;004C 030C;013D;004C 030C; +013E;013E;006C 030C;013E;006C 030C; +013F;013F;013F;004C 00B7;004C 00B7; +0140;0140;0140;006C 00B7;006C 00B7; +0143;0143;004E 0301;0143;004E 0301; +0144;0144;006E 0301;0144;006E 0301; +0145;0145;004E 0327;0145;004E 0327; +0146;0146;006E 0327;0146;006E 0327; +0147;0147;004E 030C;0147;004E 030C; +0148;0148;006E 030C;0148;006E 030C; +0149;0149;0149;02BC 006E;02BC 006E; +014C;014C;004F 0304;014C;004F 0304; +014D;014D;006F 0304;014D;006F 0304; +014E;014E;004F 0306;014E;004F 0306; +014F;014F;006F 0306;014F;006F 0306; +0150;0150;004F 030B;0150;004F 030B; +0151;0151;006F 030B;0151;006F 030B; +0154;0154;0052 0301;0154;0052 0301; +0155;0155;0072 0301;0155;0072 0301; +0156;0156;0052 0327;0156;0052 0327; +0157;0157;0072 0327;0157;0072 0327; +0158;0158;0052 030C;0158;0052 030C; +0159;0159;0072 030C;0159;0072 030C; +015A;015A;0053 0301;015A;0053 0301; +015B;015B;0073 0301;015B;0073 0301; +015C;015C;0053 0302;015C;0053 0302; +015D;015D;0073 0302;015D;0073 0302; +015E;015E;0053 0327;015E;0053 0327; +015F;015F;0073 0327;015F;0073 0327; +0160;0160;0053 030C;0160;0053 030C; +0161;0161;0073 030C;0161;0073 030C; +0162;0162;0054 0327;0162;0054 0327; +0163;0163;0074 0327;0163;0074 0327; +0164;0164;0054 030C;0164;0054 030C; +0165;0165;0074 030C;0165;0074 030C; +0168;0168;0055 0303;0168;0055 0303; +0169;0169;0075 0303;0169;0075 0303; +016A;016A;0055 0304;016A;0055 0304; +016B;016B;0075 0304;016B;0075 0304; +016C;016C;0055 0306;016C;0055 0306; +016D;016D;0075 0306;016D;0075 0306; +016E;016E;0055 030A;016E;0055 030A; +016F;016F;0075 030A;016F;0075 030A; +0170;0170;0055 030B;0170;0055 030B; +0171;0171;0075 030B;0171;0075 030B; +0172;0172;0055 0328;0172;0055 0328; +0173;0173;0075 0328;0173;0075 0328; +0174;0174;0057 0302;0174;0057 0302; +0175;0175;0077 0302;0175;0077 0302; +0176;0176;0059 0302;0176;0059 0302; +0177;0177;0079 0302;0177;0079 0302; +0178;0178;0059 0308;0178;0059 0308; +0179;0179;005A 0301;0179;005A 0301; +017A;017A;007A 0301;017A;007A 0301; +017B;017B;005A 0307;017B;005A 0307; +017C;017C;007A 0307;017C;007A 0307; +017D;017D;005A 030C;017D;005A 030C; +017E;017E;007A 030C;017E;007A 030C; +017F;017F;017F;0073;0073; +01A0;01A0;004F 031B;01A0;004F 031B; +01A1;01A1;006F 031B;01A1;006F 031B; +01AF;01AF;0055 031B;01AF;0055 031B; +01B0;01B0;0075 031B;01B0;0075 031B; +01C4;01C4;01C4;0044 017D;0044 005A 030C; +01C5;01C5;01C5;0044 017E;0044 007A 030C; +01C6;01C6;01C6;0064 017E;0064 007A 030C; +01C7;01C7;01C7;004C 004A;004C 004A; +01C8;01C8;01C8;004C 006A;004C 006A; +01C9;01C9;01C9;006C 006A;006C 006A; +01CA;01CA;01CA;004E 004A;004E 004A; +01CB;01CB;01CB;004E 006A;004E 006A; +01CC;01CC;01CC;006E 006A;006E 006A; +01CD;01CD;0041 030C;01CD;0041 030C; +01CE;01CE;0061 030C;01CE;0061 030C; +01CF;01CF;0049 030C;01CF;0049 030C; +01D0;01D0;0069 030C;01D0;0069 030C; +01D1;01D1;004F 030C;01D1;004F 030C; +01D2;01D2;006F 030C;01D2;006F 030C; +01D3;01D3;0055 030C;01D3;0055 030C; +01D4;01D4;0075 030C;01D4;0075 030C; +01D5;01D5;0055 0308 0304;01D5;0055 0308 0304; +01D6;01D6;0075 0308 0304;01D6;0075 0308 0304; +01D7;01D7;0055 0308 0301;01D7;0055 0308 0301; +01D8;01D8;0075 0308 0301;01D8;0075 0308 0301; +01D9;01D9;0055 0308 030C;01D9;0055 0308 030C; +01DA;01DA;0075 0308 030C;01DA;0075 0308 030C; +01DB;01DB;0055 0308 0300;01DB;0055 0308 0300; +01DC;01DC;0075 0308 0300;01DC;0075 0308 0300; +01DE;01DE;0041 0308 0304;01DE;0041 0308 0304; +01DF;01DF;0061 0308 0304;01DF;0061 0308 0304; +01E0;01E0;0041 0307 0304;01E0;0041 0307 0304; +01E1;01E1;0061 0307 0304;01E1;0061 0307 0304; +01E2;01E2;00C6 0304;01E2;00C6 0304; +01E3;01E3;00E6 0304;01E3;00E6 0304; +01E6;01E6;0047 030C;01E6;0047 030C; +01E7;01E7;0067 030C;01E7;0067 030C; +01E8;01E8;004B 030C;01E8;004B 030C; +01E9;01E9;006B 030C;01E9;006B 030C; +01EA;01EA;004F 0328;01EA;004F 0328; +01EB;01EB;006F 0328;01EB;006F 0328; +01EC;01EC;004F 0328 0304;01EC;004F 0328 0304; +01ED;01ED;006F 0328 0304;01ED;006F 0328 0304; +01EE;01EE;01B7 030C;01EE;01B7 030C; +01EF;01EF;0292 030C;01EF;0292 030C; +01F0;01F0;006A 030C;01F0;006A 030C; +01F1;01F1;01F1;0044 005A;0044 005A; +01F2;01F2;01F2;0044 007A;0044 007A; +01F3;01F3;01F3;0064 007A;0064 007A; +01F4;01F4;0047 0301;01F4;0047 0301; +01F5;01F5;0067 0301;01F5;0067 0301; +01F8;01F8;004E 0300;01F8;004E 0300; +01F9;01F9;006E 0300;01F9;006E 0300; +01FA;01FA;0041 030A 0301;01FA;0041 030A 0301; +01FB;01FB;0061 030A 0301;01FB;0061 030A 0301; +01FC;01FC;00C6 0301;01FC;00C6 0301; +01FD;01FD;00E6 0301;01FD;00E6 0301; +01FE;01FE;00D8 0301;01FE;00D8 0301; +01FF;01FF;00F8 0301;01FF;00F8 0301; +0200;0200;0041 030F;0200;0041 030F; +0201;0201;0061 030F;0201;0061 030F; +0202;0202;0041 0311;0202;0041 0311; +0203;0203;0061 0311;0203;0061 0311; +0204;0204;0045 030F;0204;0045 030F; +0205;0205;0065 030F;0205;0065 030F; +0206;0206;0045 0311;0206;0045 0311; +0207;0207;0065 0311;0207;0065 0311; +0208;0208;0049 030F;0208;0049 030F; +0209;0209;0069 030F;0209;0069 030F; +020A;020A;0049 0311;020A;0049 0311; +020B;020B;0069 0311;020B;0069 0311; +020C;020C;004F 030F;020C;004F 030F; +020D;020D;006F 030F;020D;006F 030F; +020E;020E;004F 0311;020E;004F 0311; +020F;020F;006F 0311;020F;006F 0311; +0210;0210;0052 030F;0210;0052 030F; +0211;0211;0072 030F;0211;0072 030F; +0212;0212;0052 0311;0212;0052 0311; +0213;0213;0072 0311;0213;0072 0311; +0214;0214;0055 030F;0214;0055 030F; +0215;0215;0075 030F;0215;0075 030F; +0216;0216;0055 0311;0216;0055 0311; +0217;0217;0075 0311;0217;0075 0311; +0218;0218;0053 0326;0218;0053 0326; +0219;0219;0073 0326;0219;0073 0326; +021A;021A;0054 0326;021A;0054 0326; +021B;021B;0074 0326;021B;0074 0326; +021E;021E;0048 030C;021E;0048 030C; +021F;021F;0068 030C;021F;0068 030C; +0226;0226;0041 0307;0226;0041 0307; +0227;0227;0061 0307;0227;0061 0307; +0228;0228;0045 0327;0228;0045 0327; +0229;0229;0065 0327;0229;0065 0327; +022A;022A;004F 0308 0304;022A;004F 0308 0304; +022B;022B;006F 0308 0304;022B;006F 0308 0304; +022C;022C;004F 0303 0304;022C;004F 0303 0304; +022D;022D;006F 0303 0304;022D;006F 0303 0304; +022E;022E;004F 0307;022E;004F 0307; +022F;022F;006F 0307;022F;006F 0307; +0230;0230;004F 0307 0304;0230;004F 0307 0304; +0231;0231;006F 0307 0304;0231;006F 0307 0304; +0232;0232;0059 0304;0232;0059 0304; +0233;0233;0079 0304;0233;0079 0304; +02B0;02B0;02B0;0068;0068; +02B1;02B1;02B1;0266;0266; +02B2;02B2;02B2;006A;006A; +02B3;02B3;02B3;0072;0072; +02B4;02B4;02B4;0279;0279; +02B5;02B5;02B5;027B;027B; +02B6;02B6;02B6;0281;0281; +02B7;02B7;02B7;0077;0077; +02B8;02B8;02B8;0079;0079; +02D8;02D8;02D8;0020 0306;0020 0306; +02D9;02D9;02D9;0020 0307;0020 0307; +02DA;02DA;02DA;0020 030A;0020 030A; +02DB;02DB;02DB;0020 0328;0020 0328; +02DC;02DC;02DC;0020 0303;0020 0303; +02DD;02DD;02DD;0020 030B;0020 030B; +02E0;02E0;02E0;0263;0263; +02E1;02E1;02E1;006C;006C; +02E2;02E2;02E2;0073;0073; +02E3;02E3;02E3;0078;0078; +02E4;02E4;02E4;0295;0295; +0340;0300;0300;0300;0300; +0341;0301;0301;0301;0301; +0343;0313;0313;0313;0313; +0344;0308 0301;0308 0301;0308 0301;0308 0301; +0374;02B9;02B9;02B9;02B9; +037A;037A;037A;0020 0345;0020 0345; +037E;003B;003B;003B;003B; +0384;0384;0384;0020 0301;0020 0301; +0385;0385;00A8 0301;0020 0308 0301;0020 0308 0301; +0386;0386;0391 0301;0386;0391 0301; +0387;00B7;00B7;00B7;00B7; +0388;0388;0395 0301;0388;0395 0301; +0389;0389;0397 0301;0389;0397 0301; +038A;038A;0399 0301;038A;0399 0301; +038C;038C;039F 0301;038C;039F 0301; +038E;038E;03A5 0301;038E;03A5 0301; +038F;038F;03A9 0301;038F;03A9 0301; +0390;0390;03B9 0308 0301;0390;03B9 0308 0301; +03AA;03AA;0399 0308;03AA;0399 0308; +03AB;03AB;03A5 0308;03AB;03A5 0308; +03AC;03AC;03B1 0301;03AC;03B1 0301; +03AD;03AD;03B5 0301;03AD;03B5 0301; +03AE;03AE;03B7 0301;03AE;03B7 0301; +03AF;03AF;03B9 0301;03AF;03B9 0301; +03B0;03B0;03C5 0308 0301;03B0;03C5 0308 0301; +03CA;03CA;03B9 0308;03CA;03B9 0308; +03CB;03CB;03C5 0308;03CB;03C5 0308; +03CC;03CC;03BF 0301;03CC;03BF 0301; +03CD;03CD;03C5 0301;03CD;03C5 0301; +03CE;03CE;03C9 0301;03CE;03C9 0301; +03D0;03D0;03D0;03B2;03B2; +03D1;03D1;03D1;03B8;03B8; +03D2;03D2;03D2;03A5;03A5; +03D3;03D3;03D2 0301;038E;03A5 0301; +03D4;03D4;03D2 0308;03AB;03A5 0308; +03D5;03D5;03D5;03C6;03C6; +03D6;03D6;03D6;03C0;03C0; +03F0;03F0;03F0;03BA;03BA; +03F1;03F1;03F1;03C1;03C1; +03F2;03F2;03F2;03C2;03C2; +03F4;03F4;03F4;0398;0398; +03F5;03F5;03F5;03B5;03B5; +03F9;03F9;03F9;03A3;03A3; +0400;0400;0415 0300;0400;0415 0300; +0401;0401;0415 0308;0401;0415 0308; +0403;0403;0413 0301;0403;0413 0301; +0407;0407;0406 0308;0407;0406 0308; +040C;040C;041A 0301;040C;041A 0301; +040D;040D;0418 0300;040D;0418 0300; +040E;040E;0423 0306;040E;0423 0306; +0419;0419;0418 0306;0419;0418 0306; +0439;0439;0438 0306;0439;0438 0306; +0450;0450;0435 0300;0450;0435 0300; +0451;0451;0435 0308;0451;0435 0308; +0453;0453;0433 0301;0453;0433 0301; +0457;0457;0456 0308;0457;0456 0308; +045C;045C;043A 0301;045C;043A 0301; +045D;045D;0438 0300;045D;0438 0300; +045E;045E;0443 0306;045E;0443 0306; +0476;0476;0474 030F;0476;0474 030F; +0477;0477;0475 030F;0477;0475 030F; +04C1;04C1;0416 0306;04C1;0416 0306; +04C2;04C2;0436 0306;04C2;0436 0306; +04D0;04D0;0410 0306;04D0;0410 0306; +04D1;04D1;0430 0306;04D1;0430 0306; +04D2;04D2;0410 0308;04D2;0410 0308; +04D3;04D3;0430 0308;04D3;0430 0308; +04D6;04D6;0415 0306;04D6;0415 0306; +04D7;04D7;0435 0306;04D7;0435 0306; +04DA;04DA;04D8 0308;04DA;04D8 0308; +04DB;04DB;04D9 0308;04DB;04D9 0308; +04DC;04DC;0416 0308;04DC;0416 0308; +04DD;04DD;0436 0308;04DD;0436 0308; +04DE;04DE;0417 0308;04DE;0417 0308; +04DF;04DF;0437 0308;04DF;0437 0308; +04E2;04E2;0418 0304;04E2;0418 0304; +04E3;04E3;0438 0304;04E3;0438 0304; +04E4;04E4;0418 0308;04E4;0418 0308; +04E5;04E5;0438 0308;04E5;0438 0308; +04E6;04E6;041E 0308;04E6;041E 0308; +04E7;04E7;043E 0308;04E7;043E 0308; +04EA;04EA;04E8 0308;04EA;04E8 0308; +04EB;04EB;04E9 0308;04EB;04E9 0308; +04EC;04EC;042D 0308;04EC;042D 0308; +04ED;04ED;044D 0308;04ED;044D 0308; +04EE;04EE;0423 0304;04EE;0423 0304; +04EF;04EF;0443 0304;04EF;0443 0304; +04F0;04F0;0423 0308;04F0;0423 0308; +04F1;04F1;0443 0308;04F1;0443 0308; +04F2;04F2;0423 030B;04F2;0423 030B; +04F3;04F3;0443 030B;04F3;0443 030B; +04F4;04F4;0427 0308;04F4;0427 0308; +04F5;04F5;0447 0308;04F5;0447 0308; +04F8;04F8;042B 0308;04F8;042B 0308; +04F9;04F9;044B 0308;04F9;044B 0308; +0587;0587;0587;0565 0582;0565 0582; +0622;0622;0627 0653;0622;0627 0653; +0623;0623;0627 0654;0623;0627 0654; +0624;0624;0648 0654;0624;0648 0654; +0625;0625;0627 0655;0625;0627 0655; +0626;0626;064A 0654;0626;064A 0654; +0675;0675;0675;0627 0674;0627 0674; +0676;0676;0676;0648 0674;0648 0674; +0677;0677;0677;06C7 0674;06C7 0674; +0678;0678;0678;064A 0674;064A 0674; +06C0;06C0;06D5 0654;06C0;06D5 0654; +06C2;06C2;06C1 0654;06C2;06C1 0654; +06D3;06D3;06D2 0654;06D3;06D2 0654; +0929;0929;0928 093C;0929;0928 093C; +0931;0931;0930 093C;0931;0930 093C; +0934;0934;0933 093C;0934;0933 093C; +0958;0915 093C;0915 093C;0915 093C;0915 093C; +0959;0916 093C;0916 093C;0916 093C;0916 093C; +095A;0917 093C;0917 093C;0917 093C;0917 093C; +095B;091C 093C;091C 093C;091C 093C;091C 093C; +095C;0921 093C;0921 093C;0921 093C;0921 093C; +095D;0922 093C;0922 093C;0922 093C;0922 093C; +095E;092B 093C;092B 093C;092B 093C;092B 093C; +095F;092F 093C;092F 093C;092F 093C;092F 093C; +09CB;09CB;09C7 09BE;09CB;09C7 09BE; +09CC;09CC;09C7 09D7;09CC;09C7 09D7; +09DC;09A1 09BC;09A1 09BC;09A1 09BC;09A1 09BC; +09DD;09A2 09BC;09A2 09BC;09A2 09BC;09A2 09BC; +09DF;09AF 09BC;09AF 09BC;09AF 09BC;09AF 09BC; +0A33;0A32 0A3C;0A32 0A3C;0A32 0A3C;0A32 0A3C; +0A36;0A38 0A3C;0A38 0A3C;0A38 0A3C;0A38 0A3C; +0A59;0A16 0A3C;0A16 0A3C;0A16 0A3C;0A16 0A3C; +0A5A;0A17 0A3C;0A17 0A3C;0A17 0A3C;0A17 0A3C; +0A5B;0A1C 0A3C;0A1C 0A3C;0A1C 0A3C;0A1C 0A3C; +0A5E;0A2B 0A3C;0A2B 0A3C;0A2B 0A3C;0A2B 0A3C; +0B48;0B48;0B47 0B56;0B48;0B47 0B56; +0B4B;0B4B;0B47 0B3E;0B4B;0B47 0B3E; +0B4C;0B4C;0B47 0B57;0B4C;0B47 0B57; +0B5C;0B21 0B3C;0B21 0B3C;0B21 0B3C;0B21 0B3C; +0B5D;0B22 0B3C;0B22 0B3C;0B22 0B3C;0B22 0B3C; +0B94;0B94;0B92 0BD7;0B94;0B92 0BD7; +0BCA;0BCA;0BC6 0BBE;0BCA;0BC6 0BBE; +0BCB;0BCB;0BC7 0BBE;0BCB;0BC7 0BBE; +0BCC;0BCC;0BC6 0BD7;0BCC;0BC6 0BD7; +0C48;0C48;0C46 0C56;0C48;0C46 0C56; +0CC0;0CC0;0CBF 0CD5;0CC0;0CBF 0CD5; +0CC7;0CC7;0CC6 0CD5;0CC7;0CC6 0CD5; +0CC8;0CC8;0CC6 0CD6;0CC8;0CC6 0CD6; +0CCA;0CCA;0CC6 0CC2;0CCA;0CC6 0CC2; +0CCB;0CCB;0CC6 0CC2 0CD5;0CCB;0CC6 0CC2 0CD5; +0D4A;0D4A;0D46 0D3E;0D4A;0D46 0D3E; +0D4B;0D4B;0D47 0D3E;0D4B;0D47 0D3E; +0D4C;0D4C;0D46 0D57;0D4C;0D46 0D57; +0DDA;0DDA;0DD9 0DCA;0DDA;0DD9 0DCA; +0DDC;0DDC;0DD9 0DCF;0DDC;0DD9 0DCF; +0DDD;0DDD;0DD9 0DCF 0DCA;0DDD;0DD9 0DCF 0DCA; +0DDE;0DDE;0DD9 0DDF;0DDE;0DD9 0DDF; +0E33;0E33;0E33;0E4D 0E32;0E4D 0E32; +0EB3;0EB3;0EB3;0ECD 0EB2;0ECD 0EB2; +0EDC;0EDC;0EDC;0EAB 0E99;0EAB 0E99; +0EDD;0EDD;0EDD;0EAB 0EA1;0EAB 0EA1; +0F0C;0F0C;0F0C;0F0B;0F0B; +0F43;0F42 0FB7;0F42 0FB7;0F42 0FB7;0F42 0FB7; +0F4D;0F4C 0FB7;0F4C 0FB7;0F4C 0FB7;0F4C 0FB7; +0F52;0F51 0FB7;0F51 0FB7;0F51 0FB7;0F51 0FB7; +0F57;0F56 0FB7;0F56 0FB7;0F56 0FB7;0F56 0FB7; +0F5C;0F5B 0FB7;0F5B 0FB7;0F5B 0FB7;0F5B 0FB7; +0F69;0F40 0FB5;0F40 0FB5;0F40 0FB5;0F40 0FB5; +0F73;0F71 0F72;0F71 0F72;0F71 0F72;0F71 0F72; +0F75;0F71 0F74;0F71 0F74;0F71 0F74;0F71 0F74; +0F76;0FB2 0F80;0FB2 0F80;0FB2 0F80;0FB2 0F80; +0F77;0F77;0F77;0FB2 0F71 0F80;0FB2 0F71 0F80; +0F78;0FB3 0F80;0FB3 0F80;0FB3 0F80;0FB3 0F80; +0F79;0F79;0F79;0FB3 0F71 0F80;0FB3 0F71 0F80; +0F81;0F71 0F80;0F71 0F80;0F71 0F80;0F71 0F80; +0F93;0F92 0FB7;0F92 0FB7;0F92 0FB7;0F92 0FB7; +0F9D;0F9C 0FB7;0F9C 0FB7;0F9C 0FB7;0F9C 0FB7; +0FA2;0FA1 0FB7;0FA1 0FB7;0FA1 0FB7;0FA1 0FB7; +0FA7;0FA6 0FB7;0FA6 0FB7;0FA6 0FB7;0FA6 0FB7; +0FAC;0FAB 0FB7;0FAB 0FB7;0FAB 0FB7;0FAB 0FB7; +0FB9;0F90 0FB5;0F90 0FB5;0F90 0FB5;0F90 0FB5; +1026;1026;1025 102E;1026;1025 102E; +10FC;10FC;10FC;10DC;10DC; +1B06;1B06;1B05 1B35;1B06;1B05 1B35; +1B08;1B08;1B07 1B35;1B08;1B07 1B35; +1B0A;1B0A;1B09 1B35;1B0A;1B09 1B35; +1B0C;1B0C;1B0B 1B35;1B0C;1B0B 1B35; +1B0E;1B0E;1B0D 1B35;1B0E;1B0D 1B35; +1B12;1B12;1B11 1B35;1B12;1B11 1B35; +1B3B;1B3B;1B3A 1B35;1B3B;1B3A 1B35; +1B3D;1B3D;1B3C 1B35;1B3D;1B3C 1B35; +1B40;1B40;1B3E 1B35;1B40;1B3E 1B35; +1B41;1B41;1B3F 1B35;1B41;1B3F 1B35; +1B43;1B43;1B42 1B35;1B43;1B42 1B35; +1D2C;1D2C;1D2C;0041;0041; +1D2D;1D2D;1D2D;00C6;00C6; +1D2E;1D2E;1D2E;0042;0042; +1D30;1D30;1D30;0044;0044; +1D31;1D31;1D31;0045;0045; +1D32;1D32;1D32;018E;018E; +1D33;1D33;1D33;0047;0047; +1D34;1D34;1D34;0048;0048; +1D35;1D35;1D35;0049;0049; +1D36;1D36;1D36;004A;004A; +1D37;1D37;1D37;004B;004B; +1D38;1D38;1D38;004C;004C; +1D39;1D39;1D39;004D;004D; +1D3A;1D3A;1D3A;004E;004E; +1D3C;1D3C;1D3C;004F;004F; +1D3D;1D3D;1D3D;0222;0222; +1D3E;1D3E;1D3E;0050;0050; +1D3F;1D3F;1D3F;0052;0052; +1D40;1D40;1D40;0054;0054; +1D41;1D41;1D41;0055;0055; +1D42;1D42;1D42;0057;0057; +1D43;1D43;1D43;0061;0061; +1D44;1D44;1D44;0250;0250; +1D45;1D45;1D45;0251;0251; +1D46;1D46;1D46;1D02;1D02; +1D47;1D47;1D47;0062;0062; +1D48;1D48;1D48;0064;0064; +1D49;1D49;1D49;0065;0065; +1D4A;1D4A;1D4A;0259;0259; +1D4B;1D4B;1D4B;025B;025B; +1D4C;1D4C;1D4C;025C;025C; +1D4D;1D4D;1D4D;0067;0067; +1D4F;1D4F;1D4F;006B;006B; +1D50;1D50;1D50;006D;006D; +1D51;1D51;1D51;014B;014B; +1D52;1D52;1D52;006F;006F; +1D53;1D53;1D53;0254;0254; +1D54;1D54;1D54;1D16;1D16; +1D55;1D55;1D55;1D17;1D17; +1D56;1D56;1D56;0070;0070; +1D57;1D57;1D57;0074;0074; +1D58;1D58;1D58;0075;0075; +1D59;1D59;1D59;1D1D;1D1D; +1D5A;1D5A;1D5A;026F;026F; +1D5B;1D5B;1D5B;0076;0076; +1D5C;1D5C;1D5C;1D25;1D25; +1D5D;1D5D;1D5D;03B2;03B2; +1D5E;1D5E;1D5E;03B3;03B3; +1D5F;1D5F;1D5F;03B4;03B4; +1D60;1D60;1D60;03C6;03C6; +1D61;1D61;1D61;03C7;03C7; +1D62;1D62;1D62;0069;0069; +1D63;1D63;1D63;0072;0072; +1D64;1D64;1D64;0075;0075; +1D65;1D65;1D65;0076;0076; +1D66;1D66;1D66;03B2;03B2; +1D67;1D67;1D67;03B3;03B3; +1D68;1D68;1D68;03C1;03C1; +1D69;1D69;1D69;03C6;03C6; +1D6A;1D6A;1D6A;03C7;03C7; +1D78;1D78;1D78;043D;043D; +1D9B;1D9B;1D9B;0252;0252; +1D9C;1D9C;1D9C;0063;0063; +1D9D;1D9D;1D9D;0255;0255; +1D9E;1D9E;1D9E;00F0;00F0; +1D9F;1D9F;1D9F;025C;025C; +1DA0;1DA0;1DA0;0066;0066; +1DA1;1DA1;1DA1;025F;025F; +1DA2;1DA2;1DA2;0261;0261; +1DA3;1DA3;1DA3;0265;0265; +1DA4;1DA4;1DA4;0268;0268; +1DA5;1DA5;1DA5;0269;0269; +1DA6;1DA6;1DA6;026A;026A; +1DA7;1DA7;1DA7;1D7B;1D7B; +1DA8;1DA8;1DA8;029D;029D; +1DA9;1DA9;1DA9;026D;026D; +1DAA;1DAA;1DAA;1D85;1D85; +1DAB;1DAB;1DAB;029F;029F; +1DAC;1DAC;1DAC;0271;0271; +1DAD;1DAD;1DAD;0270;0270; +1DAE;1DAE;1DAE;0272;0272; +1DAF;1DAF;1DAF;0273;0273; +1DB0;1DB0;1DB0;0274;0274; +1DB1;1DB1;1DB1;0275;0275; +1DB2;1DB2;1DB2;0278;0278; +1DB3;1DB3;1DB3;0282;0282; +1DB4;1DB4;1DB4;0283;0283; +1DB5;1DB5;1DB5;01AB;01AB; +1DB6;1DB6;1DB6;0289;0289; +1DB7;1DB7;1DB7;028A;028A; +1DB8;1DB8;1DB8;1D1C;1D1C; +1DB9;1DB9;1DB9;028B;028B; +1DBA;1DBA;1DBA;028C;028C; +1DBB;1DBB;1DBB;007A;007A; +1DBC;1DBC;1DBC;0290;0290; +1DBD;1DBD;1DBD;0291;0291; +1DBE;1DBE;1DBE;0292;0292; +1DBF;1DBF;1DBF;03B8;03B8; +1E00;1E00;0041 0325;1E00;0041 0325; +1E01;1E01;0061 0325;1E01;0061 0325; +1E02;1E02;0042 0307;1E02;0042 0307; +1E03;1E03;0062 0307;1E03;0062 0307; +1E04;1E04;0042 0323;1E04;0042 0323; +1E05;1E05;0062 0323;1E05;0062 0323; +1E06;1E06;0042 0331;1E06;0042 0331; +1E07;1E07;0062 0331;1E07;0062 0331; +1E08;1E08;0043 0327 0301;1E08;0043 0327 0301; +1E09;1E09;0063 0327 0301;1E09;0063 0327 0301; +1E0A;1E0A;0044 0307;1E0A;0044 0307; +1E0B;1E0B;0064 0307;1E0B;0064 0307; +1E0C;1E0C;0044 0323;1E0C;0044 0323; +1E0D;1E0D;0064 0323;1E0D;0064 0323; +1E0E;1E0E;0044 0331;1E0E;0044 0331; +1E0F;1E0F;0064 0331;1E0F;0064 0331; +1E10;1E10;0044 0327;1E10;0044 0327; +1E11;1E11;0064 0327;1E11;0064 0327; +1E12;1E12;0044 032D;1E12;0044 032D; +1E13;1E13;0064 032D;1E13;0064 032D; +1E14;1E14;0045 0304 0300;1E14;0045 0304 0300; +1E15;1E15;0065 0304 0300;1E15;0065 0304 0300; +1E16;1E16;0045 0304 0301;1E16;0045 0304 0301; +1E17;1E17;0065 0304 0301;1E17;0065 0304 0301; +1E18;1E18;0045 032D;1E18;0045 032D; +1E19;1E19;0065 032D;1E19;0065 032D; +1E1A;1E1A;0045 0330;1E1A;0045 0330; +1E1B;1E1B;0065 0330;1E1B;0065 0330; +1E1C;1E1C;0045 0327 0306;1E1C;0045 0327 0306; +1E1D;1E1D;0065 0327 0306;1E1D;0065 0327 0306; +1E1E;1E1E;0046 0307;1E1E;0046 0307; +1E1F;1E1F;0066 0307;1E1F;0066 0307; +1E20;1E20;0047 0304;1E20;0047 0304; +1E21;1E21;0067 0304;1E21;0067 0304; +1E22;1E22;0048 0307;1E22;0048 0307; +1E23;1E23;0068 0307;1E23;0068 0307; +1E24;1E24;0048 0323;1E24;0048 0323; +1E25;1E25;0068 0323;1E25;0068 0323; +1E26;1E26;0048 0308;1E26;0048 0308; +1E27;1E27;0068 0308;1E27;0068 0308; +1E28;1E28;0048 0327;1E28;0048 0327; +1E29;1E29;0068 0327;1E29;0068 0327; +1E2A;1E2A;0048 032E;1E2A;0048 032E; +1E2B;1E2B;0068 032E;1E2B;0068 032E; +1E2C;1E2C;0049 0330;1E2C;0049 0330; +1E2D;1E2D;0069 0330;1E2D;0069 0330; +1E2E;1E2E;0049 0308 0301;1E2E;0049 0308 0301; +1E2F;1E2F;0069 0308 0301;1E2F;0069 0308 0301; +1E30;1E30;004B 0301;1E30;004B 0301; +1E31;1E31;006B 0301;1E31;006B 0301; +1E32;1E32;004B 0323;1E32;004B 0323; +1E33;1E33;006B 0323;1E33;006B 0323; +1E34;1E34;004B 0331;1E34;004B 0331; +1E35;1E35;006B 0331;1E35;006B 0331; +1E36;1E36;004C 0323;1E36;004C 0323; +1E37;1E37;006C 0323;1E37;006C 0323; +1E38;1E38;004C 0323 0304;1E38;004C 0323 0304; +1E39;1E39;006C 0323 0304;1E39;006C 0323 0304; +1E3A;1E3A;004C 0331;1E3A;004C 0331; +1E3B;1E3B;006C 0331;1E3B;006C 0331; +1E3C;1E3C;004C 032D;1E3C;004C 032D; +1E3D;1E3D;006C 032D;1E3D;006C 032D; +1E3E;1E3E;004D 0301;1E3E;004D 0301; +1E3F;1E3F;006D 0301;1E3F;006D 0301; +1E40;1E40;004D 0307;1E40;004D 0307; +1E41;1E41;006D 0307;1E41;006D 0307; +1E42;1E42;004D 0323;1E42;004D 0323; +1E43;1E43;006D 0323;1E43;006D 0323; +1E44;1E44;004E 0307;1E44;004E 0307; +1E45;1E45;006E 0307;1E45;006E 0307; +1E46;1E46;004E 0323;1E46;004E 0323; +1E47;1E47;006E 0323;1E47;006E 0323; +1E48;1E48;004E 0331;1E48;004E 0331; +1E49;1E49;006E 0331;1E49;006E 0331; +1E4A;1E4A;004E 032D;1E4A;004E 032D; +1E4B;1E4B;006E 032D;1E4B;006E 032D; +1E4C;1E4C;004F 0303 0301;1E4C;004F 0303 0301; +1E4D;1E4D;006F 0303 0301;1E4D;006F 0303 0301; +1E4E;1E4E;004F 0303 0308;1E4E;004F 0303 0308; +1E4F;1E4F;006F 0303 0308;1E4F;006F 0303 0308; +1E50;1E50;004F 0304 0300;1E50;004F 0304 0300; +1E51;1E51;006F 0304 0300;1E51;006F 0304 0300; +1E52;1E52;004F 0304 0301;1E52;004F 0304 0301; +1E53;1E53;006F 0304 0301;1E53;006F 0304 0301; +1E54;1E54;0050 0301;1E54;0050 0301; +1E55;1E55;0070 0301;1E55;0070 0301; +1E56;1E56;0050 0307;1E56;0050 0307; +1E57;1E57;0070 0307;1E57;0070 0307; +1E58;1E58;0052 0307;1E58;0052 0307; +1E59;1E59;0072 0307;1E59;0072 0307; +1E5A;1E5A;0052 0323;1E5A;0052 0323; +1E5B;1E5B;0072 0323;1E5B;0072 0323; +1E5C;1E5C;0052 0323 0304;1E5C;0052 0323 0304; +1E5D;1E5D;0072 0323 0304;1E5D;0072 0323 0304; +1E5E;1E5E;0052 0331;1E5E;0052 0331; +1E5F;1E5F;0072 0331;1E5F;0072 0331; +1E60;1E60;0053 0307;1E60;0053 0307; +1E61;1E61;0073 0307;1E61;0073 0307; +1E62;1E62;0053 0323;1E62;0053 0323; +1E63;1E63;0073 0323;1E63;0073 0323; +1E64;1E64;0053 0301 0307;1E64;0053 0301 0307; +1E65;1E65;0073 0301 0307;1E65;0073 0301 0307; +1E66;1E66;0053 030C 0307;1E66;0053 030C 0307; +1E67;1E67;0073 030C 0307;1E67;0073 030C 0307; +1E68;1E68;0053 0323 0307;1E68;0053 0323 0307; +1E69;1E69;0073 0323 0307;1E69;0073 0323 0307; +1E6A;1E6A;0054 0307;1E6A;0054 0307; +1E6B;1E6B;0074 0307;1E6B;0074 0307; +1E6C;1E6C;0054 0323;1E6C;0054 0323; +1E6D;1E6D;0074 0323;1E6D;0074 0323; +1E6E;1E6E;0054 0331;1E6E;0054 0331; +1E6F;1E6F;0074 0331;1E6F;0074 0331; +1E70;1E70;0054 032D;1E70;0054 032D; +1E71;1E71;0074 032D;1E71;0074 032D; +1E72;1E72;0055 0324;1E72;0055 0324; +1E73;1E73;0075 0324;1E73;0075 0324; +1E74;1E74;0055 0330;1E74;0055 0330; +1E75;1E75;0075 0330;1E75;0075 0330; +1E76;1E76;0055 032D;1E76;0055 032D; +1E77;1E77;0075 032D;1E77;0075 032D; +1E78;1E78;0055 0303 0301;1E78;0055 0303 0301; +1E79;1E79;0075 0303 0301;1E79;0075 0303 0301; +1E7A;1E7A;0055 0304 0308;1E7A;0055 0304 0308; +1E7B;1E7B;0075 0304 0308;1E7B;0075 0304 0308; +1E7C;1E7C;0056 0303;1E7C;0056 0303; +1E7D;1E7D;0076 0303;1E7D;0076 0303; +1E7E;1E7E;0056 0323;1E7E;0056 0323; +1E7F;1E7F;0076 0323;1E7F;0076 0323; +1E80;1E80;0057 0300;1E80;0057 0300; +1E81;1E81;0077 0300;1E81;0077 0300; +1E82;1E82;0057 0301;1E82;0057 0301; +1E83;1E83;0077 0301;1E83;0077 0301; +1E84;1E84;0057 0308;1E84;0057 0308; +1E85;1E85;0077 0308;1E85;0077 0308; +1E86;1E86;0057 0307;1E86;0057 0307; +1E87;1E87;0077 0307;1E87;0077 0307; +1E88;1E88;0057 0323;1E88;0057 0323; +1E89;1E89;0077 0323;1E89;0077 0323; +1E8A;1E8A;0058 0307;1E8A;0058 0307; +1E8B;1E8B;0078 0307;1E8B;0078 0307; +1E8C;1E8C;0058 0308;1E8C;0058 0308; +1E8D;1E8D;0078 0308;1E8D;0078 0308; +1E8E;1E8E;0059 0307;1E8E;0059 0307; +1E8F;1E8F;0079 0307;1E8F;0079 0307; +1E90;1E90;005A 0302;1E90;005A 0302; +1E91;1E91;007A 0302;1E91;007A 0302; +1E92;1E92;005A 0323;1E92;005A 0323; +1E93;1E93;007A 0323;1E93;007A 0323; +1E94;1E94;005A 0331;1E94;005A 0331; +1E95;1E95;007A 0331;1E95;007A 0331; +1E96;1E96;0068 0331;1E96;0068 0331; +1E97;1E97;0074 0308;1E97;0074 0308; +1E98;1E98;0077 030A;1E98;0077 030A; +1E99;1E99;0079 030A;1E99;0079 030A; +1E9A;1E9A;1E9A;0061 02BE;0061 02BE; +1E9B;1E9B;017F 0307;1E61;0073 0307; +1EA0;1EA0;0041 0323;1EA0;0041 0323; +1EA1;1EA1;0061 0323;1EA1;0061 0323; +1EA2;1EA2;0041 0309;1EA2;0041 0309; +1EA3;1EA3;0061 0309;1EA3;0061 0309; +1EA4;1EA4;0041 0302 0301;1EA4;0041 0302 0301; +1EA5;1EA5;0061 0302 0301;1EA5;0061 0302 0301; +1EA6;1EA6;0041 0302 0300;1EA6;0041 0302 0300; +1EA7;1EA7;0061 0302 0300;1EA7;0061 0302 0300; +1EA8;1EA8;0041 0302 0309;1EA8;0041 0302 0309; +1EA9;1EA9;0061 0302 0309;1EA9;0061 0302 0309; +1EAA;1EAA;0041 0302 0303;1EAA;0041 0302 0303; +1EAB;1EAB;0061 0302 0303;1EAB;0061 0302 0303; +1EAC;1EAC;0041 0323 0302;1EAC;0041 0323 0302; +1EAD;1EAD;0061 0323 0302;1EAD;0061 0323 0302; +1EAE;1EAE;0041 0306 0301;1EAE;0041 0306 0301; +1EAF;1EAF;0061 0306 0301;1EAF;0061 0306 0301; +1EB0;1EB0;0041 0306 0300;1EB0;0041 0306 0300; +1EB1;1EB1;0061 0306 0300;1EB1;0061 0306 0300; +1EB2;1EB2;0041 0306 0309;1EB2;0041 0306 0309; +1EB3;1EB3;0061 0306 0309;1EB3;0061 0306 0309; +1EB4;1EB4;0041 0306 0303;1EB4;0041 0306 0303; +1EB5;1EB5;0061 0306 0303;1EB5;0061 0306 0303; +1EB6;1EB6;0041 0323 0306;1EB6;0041 0323 0306; +1EB7;1EB7;0061 0323 0306;1EB7;0061 0323 0306; +1EB8;1EB8;0045 0323;1EB8;0045 0323; +1EB9;1EB9;0065 0323;1EB9;0065 0323; +1EBA;1EBA;0045 0309;1EBA;0045 0309; +1EBB;1EBB;0065 0309;1EBB;0065 0309; +1EBC;1EBC;0045 0303;1EBC;0045 0303; +1EBD;1EBD;0065 0303;1EBD;0065 0303; +1EBE;1EBE;0045 0302 0301;1EBE;0045 0302 0301; +1EBF;1EBF;0065 0302 0301;1EBF;0065 0302 0301; +1EC0;1EC0;0045 0302 0300;1EC0;0045 0302 0300; +1EC1;1EC1;0065 0302 0300;1EC1;0065 0302 0300; +1EC2;1EC2;0045 0302 0309;1EC2;0045 0302 0309; +1EC3;1EC3;0065 0302 0309;1EC3;0065 0302 0309; +1EC4;1EC4;0045 0302 0303;1EC4;0045 0302 0303; +1EC5;1EC5;0065 0302 0303;1EC5;0065 0302 0303; +1EC6;1EC6;0045 0323 0302;1EC6;0045 0323 0302; +1EC7;1EC7;0065 0323 0302;1EC7;0065 0323 0302; +1EC8;1EC8;0049 0309;1EC8;0049 0309; +1EC9;1EC9;0069 0309;1EC9;0069 0309; +1ECA;1ECA;0049 0323;1ECA;0049 0323; +1ECB;1ECB;0069 0323;1ECB;0069 0323; +1ECC;1ECC;004F 0323;1ECC;004F 0323; +1ECD;1ECD;006F 0323;1ECD;006F 0323; +1ECE;1ECE;004F 0309;1ECE;004F 0309; +1ECF;1ECF;006F 0309;1ECF;006F 0309; +1ED0;1ED0;004F 0302 0301;1ED0;004F 0302 0301; +1ED1;1ED1;006F 0302 0301;1ED1;006F 0302 0301; +1ED2;1ED2;004F 0302 0300;1ED2;004F 0302 0300; +1ED3;1ED3;006F 0302 0300;1ED3;006F 0302 0300; +1ED4;1ED4;004F 0302 0309;1ED4;004F 0302 0309; +1ED5;1ED5;006F 0302 0309;1ED5;006F 0302 0309; +1ED6;1ED6;004F 0302 0303;1ED6;004F 0302 0303; +1ED7;1ED7;006F 0302 0303;1ED7;006F 0302 0303; +1ED8;1ED8;004F 0323 0302;1ED8;004F 0323 0302; +1ED9;1ED9;006F 0323 0302;1ED9;006F 0323 0302; +1EDA;1EDA;004F 031B 0301;1EDA;004F 031B 0301; +1EDB;1EDB;006F 031B 0301;1EDB;006F 031B 0301; +1EDC;1EDC;004F 031B 0300;1EDC;004F 031B 0300; +1EDD;1EDD;006F 031B 0300;1EDD;006F 031B 0300; +1EDE;1EDE;004F 031B 0309;1EDE;004F 031B 0309; +1EDF;1EDF;006F 031B 0309;1EDF;006F 031B 0309; +1EE0;1EE0;004F 031B 0303;1EE0;004F 031B 0303; +1EE1;1EE1;006F 031B 0303;1EE1;006F 031B 0303; +1EE2;1EE2;004F 031B 0323;1EE2;004F 031B 0323; +1EE3;1EE3;006F 031B 0323;1EE3;006F 031B 0323; +1EE4;1EE4;0055 0323;1EE4;0055 0323; +1EE5;1EE5;0075 0323;1EE5;0075 0323; +1EE6;1EE6;0055 0309;1EE6;0055 0309; +1EE7;1EE7;0075 0309;1EE7;0075 0309; +1EE8;1EE8;0055 031B 0301;1EE8;0055 031B 0301; +1EE9;1EE9;0075 031B 0301;1EE9;0075 031B 0301; +1EEA;1EEA;0055 031B 0300;1EEA;0055 031B 0300; +1EEB;1EEB;0075 031B 0300;1EEB;0075 031B 0300; +1EEC;1EEC;0055 031B 0309;1EEC;0055 031B 0309; +1EED;1EED;0075 031B 0309;1EED;0075 031B 0309; +1EEE;1EEE;0055 031B 0303;1EEE;0055 031B 0303; +1EEF;1EEF;0075 031B 0303;1EEF;0075 031B 0303; +1EF0;1EF0;0055 031B 0323;1EF0;0055 031B 0323; +1EF1;1EF1;0075 031B 0323;1EF1;0075 031B 0323; +1EF2;1EF2;0059 0300;1EF2;0059 0300; +1EF3;1EF3;0079 0300;1EF3;0079 0300; +1EF4;1EF4;0059 0323;1EF4;0059 0323; +1EF5;1EF5;0079 0323;1EF5;0079 0323; +1EF6;1EF6;0059 0309;1EF6;0059 0309; +1EF7;1EF7;0079 0309;1EF7;0079 0309; +1EF8;1EF8;0059 0303;1EF8;0059 0303; +1EF9;1EF9;0079 0303;1EF9;0079 0303; +1F00;1F00;03B1 0313;1F00;03B1 0313; +1F01;1F01;03B1 0314;1F01;03B1 0314; +1F02;1F02;03B1 0313 0300;1F02;03B1 0313 0300; +1F03;1F03;03B1 0314 0300;1F03;03B1 0314 0300; +1F04;1F04;03B1 0313 0301;1F04;03B1 0313 0301; +1F05;1F05;03B1 0314 0301;1F05;03B1 0314 0301; +1F06;1F06;03B1 0313 0342;1F06;03B1 0313 0342; +1F07;1F07;03B1 0314 0342;1F07;03B1 0314 0342; +1F08;1F08;0391 0313;1F08;0391 0313; +1F09;1F09;0391 0314;1F09;0391 0314; +1F0A;1F0A;0391 0313 0300;1F0A;0391 0313 0300; +1F0B;1F0B;0391 0314 0300;1F0B;0391 0314 0300; +1F0C;1F0C;0391 0313 0301;1F0C;0391 0313 0301; +1F0D;1F0D;0391 0314 0301;1F0D;0391 0314 0301; +1F0E;1F0E;0391 0313 0342;1F0E;0391 0313 0342; +1F0F;1F0F;0391 0314 0342;1F0F;0391 0314 0342; +1F10;1F10;03B5 0313;1F10;03B5 0313; +1F11;1F11;03B5 0314;1F11;03B5 0314; +1F12;1F12;03B5 0313 0300;1F12;03B5 0313 0300; +1F13;1F13;03B5 0314 0300;1F13;03B5 0314 0300; +1F14;1F14;03B5 0313 0301;1F14;03B5 0313 0301; +1F15;1F15;03B5 0314 0301;1F15;03B5 0314 0301; +1F18;1F18;0395 0313;1F18;0395 0313; +1F19;1F19;0395 0314;1F19;0395 0314; +1F1A;1F1A;0395 0313 0300;1F1A;0395 0313 0300; +1F1B;1F1B;0395 0314 0300;1F1B;0395 0314 0300; +1F1C;1F1C;0395 0313 0301;1F1C;0395 0313 0301; +1F1D;1F1D;0395 0314 0301;1F1D;0395 0314 0301; +1F20;1F20;03B7 0313;1F20;03B7 0313; +1F21;1F21;03B7 0314;1F21;03B7 0314; +1F22;1F22;03B7 0313 0300;1F22;03B7 0313 0300; +1F23;1F23;03B7 0314 0300;1F23;03B7 0314 0300; +1F24;1F24;03B7 0313 0301;1F24;03B7 0313 0301; +1F25;1F25;03B7 0314 0301;1F25;03B7 0314 0301; +1F26;1F26;03B7 0313 0342;1F26;03B7 0313 0342; +1F27;1F27;03B7 0314 0342;1F27;03B7 0314 0342; +1F28;1F28;0397 0313;1F28;0397 0313; +1F29;1F29;0397 0314;1F29;0397 0314; +1F2A;1F2A;0397 0313 0300;1F2A;0397 0313 0300; +1F2B;1F2B;0397 0314 0300;1F2B;0397 0314 0300; +1F2C;1F2C;0397 0313 0301;1F2C;0397 0313 0301; +1F2D;1F2D;0397 0314 0301;1F2D;0397 0314 0301; +1F2E;1F2E;0397 0313 0342;1F2E;0397 0313 0342; +1F2F;1F2F;0397 0314 0342;1F2F;0397 0314 0342; +1F30;1F30;03B9 0313;1F30;03B9 0313; +1F31;1F31;03B9 0314;1F31;03B9 0314; +1F32;1F32;03B9 0313 0300;1F32;03B9 0313 0300; +1F33;1F33;03B9 0314 0300;1F33;03B9 0314 0300; +1F34;1F34;03B9 0313 0301;1F34;03B9 0313 0301; +1F35;1F35;03B9 0314 0301;1F35;03B9 0314 0301; +1F36;1F36;03B9 0313 0342;1F36;03B9 0313 0342; +1F37;1F37;03B9 0314 0342;1F37;03B9 0314 0342; +1F38;1F38;0399 0313;1F38;0399 0313; +1F39;1F39;0399 0314;1F39;0399 0314; +1F3A;1F3A;0399 0313 0300;1F3A;0399 0313 0300; +1F3B;1F3B;0399 0314 0300;1F3B;0399 0314 0300; +1F3C;1F3C;0399 0313 0301;1F3C;0399 0313 0301; +1F3D;1F3D;0399 0314 0301;1F3D;0399 0314 0301; +1F3E;1F3E;0399 0313 0342;1F3E;0399 0313 0342; +1F3F;1F3F;0399 0314 0342;1F3F;0399 0314 0342; +1F40;1F40;03BF 0313;1F40;03BF 0313; +1F41;1F41;03BF 0314;1F41;03BF 0314; +1F42;1F42;03BF 0313 0300;1F42;03BF 0313 0300; +1F43;1F43;03BF 0314 0300;1F43;03BF 0314 0300; +1F44;1F44;03BF 0313 0301;1F44;03BF 0313 0301; +1F45;1F45;03BF 0314 0301;1F45;03BF 0314 0301; +1F48;1F48;039F 0313;1F48;039F 0313; +1F49;1F49;039F 0314;1F49;039F 0314; +1F4A;1F4A;039F 0313 0300;1F4A;039F 0313 0300; +1F4B;1F4B;039F 0314 0300;1F4B;039F 0314 0300; +1F4C;1F4C;039F 0313 0301;1F4C;039F 0313 0301; +1F4D;1F4D;039F 0314 0301;1F4D;039F 0314 0301; +1F50;1F50;03C5 0313;1F50;03C5 0313; +1F51;1F51;03C5 0314;1F51;03C5 0314; +1F52;1F52;03C5 0313 0300;1F52;03C5 0313 0300; +1F53;1F53;03C5 0314 0300;1F53;03C5 0314 0300; +1F54;1F54;03C5 0313 0301;1F54;03C5 0313 0301; +1F55;1F55;03C5 0314 0301;1F55;03C5 0314 0301; +1F56;1F56;03C5 0313 0342;1F56;03C5 0313 0342; +1F57;1F57;03C5 0314 0342;1F57;03C5 0314 0342; +1F59;1F59;03A5 0314;1F59;03A5 0314; +1F5B;1F5B;03A5 0314 0300;1F5B;03A5 0314 0300; +1F5D;1F5D;03A5 0314 0301;1F5D;03A5 0314 0301; +1F5F;1F5F;03A5 0314 0342;1F5F;03A5 0314 0342; +1F60;1F60;03C9 0313;1F60;03C9 0313; +1F61;1F61;03C9 0314;1F61;03C9 0314; +1F62;1F62;03C9 0313 0300;1F62;03C9 0313 0300; +1F63;1F63;03C9 0314 0300;1F63;03C9 0314 0300; +1F64;1F64;03C9 0313 0301;1F64;03C9 0313 0301; +1F65;1F65;03C9 0314 0301;1F65;03C9 0314 0301; +1F66;1F66;03C9 0313 0342;1F66;03C9 0313 0342; +1F67;1F67;03C9 0314 0342;1F67;03C9 0314 0342; +1F68;1F68;03A9 0313;1F68;03A9 0313; +1F69;1F69;03A9 0314;1F69;03A9 0314; +1F6A;1F6A;03A9 0313 0300;1F6A;03A9 0313 0300; +1F6B;1F6B;03A9 0314 0300;1F6B;03A9 0314 0300; +1F6C;1F6C;03A9 0313 0301;1F6C;03A9 0313 0301; +1F6D;1F6D;03A9 0314 0301;1F6D;03A9 0314 0301; +1F6E;1F6E;03A9 0313 0342;1F6E;03A9 0313 0342; +1F6F;1F6F;03A9 0314 0342;1F6F;03A9 0314 0342; +1F70;1F70;03B1 0300;1F70;03B1 0300; +1F71;03AC;03B1 0301;03AC;03B1 0301; +1F72;1F72;03B5 0300;1F72;03B5 0300; +1F73;03AD;03B5 0301;03AD;03B5 0301; +1F74;1F74;03B7 0300;1F74;03B7 0300; +1F75;03AE;03B7 0301;03AE;03B7 0301; +1F76;1F76;03B9 0300;1F76;03B9 0300; +1F77;03AF;03B9 0301;03AF;03B9 0301; +1F78;1F78;03BF 0300;1F78;03BF 0300; +1F79;03CC;03BF 0301;03CC;03BF 0301; +1F7A;1F7A;03C5 0300;1F7A;03C5 0300; +1F7B;03CD;03C5 0301;03CD;03C5 0301; +1F7C;1F7C;03C9 0300;1F7C;03C9 0300; +1F7D;03CE;03C9 0301;03CE;03C9 0301; +1F80;1F80;03B1 0313 0345;1F80;03B1 0313 0345; +1F81;1F81;03B1 0314 0345;1F81;03B1 0314 0345; +1F82;1F82;03B1 0313 0300 0345;1F82;03B1 0313 0300 0345; +1F83;1F83;03B1 0314 0300 0345;1F83;03B1 0314 0300 0345; +1F84;1F84;03B1 0313 0301 0345;1F84;03B1 0313 0301 0345; +1F85;1F85;03B1 0314 0301 0345;1F85;03B1 0314 0301 0345; +1F86;1F86;03B1 0313 0342 0345;1F86;03B1 0313 0342 0345; +1F87;1F87;03B1 0314 0342 0345;1F87;03B1 0314 0342 0345; +1F88;1F88;0391 0313 0345;1F88;0391 0313 0345; +1F89;1F89;0391 0314 0345;1F89;0391 0314 0345; +1F8A;1F8A;0391 0313 0300 0345;1F8A;0391 0313 0300 0345; +1F8B;1F8B;0391 0314 0300 0345;1F8B;0391 0314 0300 0345; +1F8C;1F8C;0391 0313 0301 0345;1F8C;0391 0313 0301 0345; +1F8D;1F8D;0391 0314 0301 0345;1F8D;0391 0314 0301 0345; +1F8E;1F8E;0391 0313 0342 0345;1F8E;0391 0313 0342 0345; +1F8F;1F8F;0391 0314 0342 0345;1F8F;0391 0314 0342 0345; +1F90;1F90;03B7 0313 0345;1F90;03B7 0313 0345; +1F91;1F91;03B7 0314 0345;1F91;03B7 0314 0345; +1F92;1F92;03B7 0313 0300 0345;1F92;03B7 0313 0300 0345; +1F93;1F93;03B7 0314 0300 0345;1F93;03B7 0314 0300 0345; +1F94;1F94;03B7 0313 0301 0345;1F94;03B7 0313 0301 0345; +1F95;1F95;03B7 0314 0301 0345;1F95;03B7 0314 0301 0345; +1F96;1F96;03B7 0313 0342 0345;1F96;03B7 0313 0342 0345; +1F97;1F97;03B7 0314 0342 0345;1F97;03B7 0314 0342 0345; +1F98;1F98;0397 0313 0345;1F98;0397 0313 0345; +1F99;1F99;0397 0314 0345;1F99;0397 0314 0345; +1F9A;1F9A;0397 0313 0300 0345;1F9A;0397 0313 0300 0345; +1F9B;1F9B;0397 0314 0300 0345;1F9B;0397 0314 0300 0345; +1F9C;1F9C;0397 0313 0301 0345;1F9C;0397 0313 0301 0345; +1F9D;1F9D;0397 0314 0301 0345;1F9D;0397 0314 0301 0345; +1F9E;1F9E;0397 0313 0342 0345;1F9E;0397 0313 0342 0345; +1F9F;1F9F;0397 0314 0342 0345;1F9F;0397 0314 0342 0345; +1FA0;1FA0;03C9 0313 0345;1FA0;03C9 0313 0345; +1FA1;1FA1;03C9 0314 0345;1FA1;03C9 0314 0345; +1FA2;1FA2;03C9 0313 0300 0345;1FA2;03C9 0313 0300 0345; +1FA3;1FA3;03C9 0314 0300 0345;1FA3;03C9 0314 0300 0345; +1FA4;1FA4;03C9 0313 0301 0345;1FA4;03C9 0313 0301 0345; +1FA5;1FA5;03C9 0314 0301 0345;1FA5;03C9 0314 0301 0345; +1FA6;1FA6;03C9 0313 0342 0345;1FA6;03C9 0313 0342 0345; +1FA7;1FA7;03C9 0314 0342 0345;1FA7;03C9 0314 0342 0345; +1FA8;1FA8;03A9 0313 0345;1FA8;03A9 0313 0345; +1FA9;1FA9;03A9 0314 0345;1FA9;03A9 0314 0345; +1FAA;1FAA;03A9 0313 0300 0345;1FAA;03A9 0313 0300 0345; +1FAB;1FAB;03A9 0314 0300 0345;1FAB;03A9 0314 0300 0345; +1FAC;1FAC;03A9 0313 0301 0345;1FAC;03A9 0313 0301 0345; +1FAD;1FAD;03A9 0314 0301 0345;1FAD;03A9 0314 0301 0345; +1FAE;1FAE;03A9 0313 0342 0345;1FAE;03A9 0313 0342 0345; +1FAF;1FAF;03A9 0314 0342 0345;1FAF;03A9 0314 0342 0345; +1FB0;1FB0;03B1 0306;1FB0;03B1 0306; +1FB1;1FB1;03B1 0304;1FB1;03B1 0304; +1FB2;1FB2;03B1 0300 0345;1FB2;03B1 0300 0345; +1FB3;1FB3;03B1 0345;1FB3;03B1 0345; +1FB4;1FB4;03B1 0301 0345;1FB4;03B1 0301 0345; +1FB6;1FB6;03B1 0342;1FB6;03B1 0342; +1FB7;1FB7;03B1 0342 0345;1FB7;03B1 0342 0345; +1FB8;1FB8;0391 0306;1FB8;0391 0306; +1FB9;1FB9;0391 0304;1FB9;0391 0304; +1FBA;1FBA;0391 0300;1FBA;0391 0300; +1FBB;0386;0391 0301;0386;0391 0301; +1FBC;1FBC;0391 0345;1FBC;0391 0345; +1FBD;1FBD;1FBD;0020 0313;0020 0313; +1FBE;03B9;03B9;03B9;03B9; +1FBF;1FBF;1FBF;0020 0313;0020 0313; +1FC0;1FC0;1FC0;0020 0342;0020 0342; +1FC1;1FC1;00A8 0342;0020 0308 0342;0020 0308 0342; +1FC2;1FC2;03B7 0300 0345;1FC2;03B7 0300 0345; +1FC3;1FC3;03B7 0345;1FC3;03B7 0345; +1FC4;1FC4;03B7 0301 0345;1FC4;03B7 0301 0345; +1FC6;1FC6;03B7 0342;1FC6;03B7 0342; +1FC7;1FC7;03B7 0342 0345;1FC7;03B7 0342 0345; +1FC8;1FC8;0395 0300;1FC8;0395 0300; +1FC9;0388;0395 0301;0388;0395 0301; +1FCA;1FCA;0397 0300;1FCA;0397 0300; +1FCB;0389;0397 0301;0389;0397 0301; +1FCC;1FCC;0397 0345;1FCC;0397 0345; +1FCD;1FCD;1FBF 0300;0020 0313 0300;0020 0313 0300; +1FCE;1FCE;1FBF 0301;0020 0313 0301;0020 0313 0301; +1FCF;1FCF;1FBF 0342;0020 0313 0342;0020 0313 0342; +1FD0;1FD0;03B9 0306;1FD0;03B9 0306; +1FD1;1FD1;03B9 0304;1FD1;03B9 0304; +1FD2;1FD2;03B9 0308 0300;1FD2;03B9 0308 0300; +1FD3;0390;03B9 0308 0301;0390;03B9 0308 0301; +1FD6;1FD6;03B9 0342;1FD6;03B9 0342; +1FD7;1FD7;03B9 0308 0342;1FD7;03B9 0308 0342; +1FD8;1FD8;0399 0306;1FD8;0399 0306; +1FD9;1FD9;0399 0304;1FD9;0399 0304; +1FDA;1FDA;0399 0300;1FDA;0399 0300; +1FDB;038A;0399 0301;038A;0399 0301; +1FDD;1FDD;1FFE 0300;0020 0314 0300;0020 0314 0300; +1FDE;1FDE;1FFE 0301;0020 0314 0301;0020 0314 0301; +1FDF;1FDF;1FFE 0342;0020 0314 0342;0020 0314 0342; +1FE0;1FE0;03C5 0306;1FE0;03C5 0306; +1FE1;1FE1;03C5 0304;1FE1;03C5 0304; +1FE2;1FE2;03C5 0308 0300;1FE2;03C5 0308 0300; +1FE3;03B0;03C5 0308 0301;03B0;03C5 0308 0301; +1FE4;1FE4;03C1 0313;1FE4;03C1 0313; +1FE5;1FE5;03C1 0314;1FE5;03C1 0314; +1FE6;1FE6;03C5 0342;1FE6;03C5 0342; +1FE7;1FE7;03C5 0308 0342;1FE7;03C5 0308 0342; +1FE8;1FE8;03A5 0306;1FE8;03A5 0306; +1FE9;1FE9;03A5 0304;1FE9;03A5 0304; +1FEA;1FEA;03A5 0300;1FEA;03A5 0300; +1FEB;038E;03A5 0301;038E;03A5 0301; +1FEC;1FEC;03A1 0314;1FEC;03A1 0314; +1FED;1FED;00A8 0300;0020 0308 0300;0020 0308 0300; +1FEE;0385;00A8 0301;0020 0308 0301;0020 0308 0301; +1FEF;0060;0060;0060;0060; +1FF2;1FF2;03C9 0300 0345;1FF2;03C9 0300 0345; +1FF3;1FF3;03C9 0345;1FF3;03C9 0345; +1FF4;1FF4;03C9 0301 0345;1FF4;03C9 0301 0345; +1FF6;1FF6;03C9 0342;1FF6;03C9 0342; +1FF7;1FF7;03C9 0342 0345;1FF7;03C9 0342 0345; +1FF8;1FF8;039F 0300;1FF8;039F 0300; +1FF9;038C;039F 0301;038C;039F 0301; +1FFA;1FFA;03A9 0300;1FFA;03A9 0300; +1FFB;038F;03A9 0301;038F;03A9 0301; +1FFC;1FFC;03A9 0345;1FFC;03A9 0345; +1FFD;00B4;00B4;0020 0301;0020 0301; +1FFE;1FFE;1FFE;0020 0314;0020 0314; +2000;2002;2002;0020;0020; +2001;2003;2003;0020;0020; +2002;2002;2002;0020;0020; +2003;2003;2003;0020;0020; +2004;2004;2004;0020;0020; +2005;2005;2005;0020;0020; +2006;2006;2006;0020;0020; +2007;2007;2007;0020;0020; +2008;2008;2008;0020;0020; +2009;2009;2009;0020;0020; +200A;200A;200A;0020;0020; +2011;2011;2011;2010;2010; +2017;2017;2017;0020 0333;0020 0333; +2024;2024;2024;002E;002E; +2025;2025;2025;002E 002E;002E 002E; +2026;2026;2026;002E 002E 002E;002E 002E 002E; +202F;202F;202F;0020;0020; +2033;2033;2033;2032 2032;2032 2032; +2034;2034;2034;2032 2032 2032;2032 2032 2032; +2036;2036;2036;2035 2035;2035 2035; +2037;2037;2037;2035 2035 2035;2035 2035 2035; +203C;203C;203C;0021 0021;0021 0021; +203E;203E;203E;0020 0305;0020 0305; +2047;2047;2047;003F 003F;003F 003F; +2048;2048;2048;003F 0021;003F 0021; +2049;2049;2049;0021 003F;0021 003F; +2057;2057;2057;2032 2032 2032 2032;2032 2032 2032 2032; +205F;205F;205F;0020;0020; +2070;2070;2070;0030;0030; +2071;2071;2071;0069;0069; +2074;2074;2074;0034;0034; +2075;2075;2075;0035;0035; +2076;2076;2076;0036;0036; +2077;2077;2077;0037;0037; +2078;2078;2078;0038;0038; +2079;2079;2079;0039;0039; +207A;207A;207A;002B;002B; +207B;207B;207B;2212;2212; +207C;207C;207C;003D;003D; +207D;207D;207D;0028;0028; +207E;207E;207E;0029;0029; +207F;207F;207F;006E;006E; +2080;2080;2080;0030;0030; +2081;2081;2081;0031;0031; +2082;2082;2082;0032;0032; +2083;2083;2083;0033;0033; +2084;2084;2084;0034;0034; +2085;2085;2085;0035;0035; +2086;2086;2086;0036;0036; +2087;2087;2087;0037;0037; +2088;2088;2088;0038;0038; +2089;2089;2089;0039;0039; +208A;208A;208A;002B;002B; +208B;208B;208B;2212;2212; +208C;208C;208C;003D;003D; +208D;208D;208D;0028;0028; +208E;208E;208E;0029;0029; +2090;2090;2090;0061;0061; +2091;2091;2091;0065;0065; +2092;2092;2092;006F;006F; +2093;2093;2093;0078;0078; +2094;2094;2094;0259;0259; +20A8;20A8;20A8;0052 0073;0052 0073; +2100;2100;2100;0061 002F 0063;0061 002F 0063; +2101;2101;2101;0061 002F 0073;0061 002F 0073; +2102;2102;2102;0043;0043; +2103;2103;2103;00B0 0043;00B0 0043; +2105;2105;2105;0063 002F 006F;0063 002F 006F; +2106;2106;2106;0063 002F 0075;0063 002F 0075; +2107;2107;2107;0190;0190; +2109;2109;2109;00B0 0046;00B0 0046; +210A;210A;210A;0067;0067; +210B;210B;210B;0048;0048; +210C;210C;210C;0048;0048; +210D;210D;210D;0048;0048; +210E;210E;210E;0068;0068; +210F;210F;210F;0127;0127; +2110;2110;2110;0049;0049; +2111;2111;2111;0049;0049; +2112;2112;2112;004C;004C; +2113;2113;2113;006C;006C; +2115;2115;2115;004E;004E; +2116;2116;2116;004E 006F;004E 006F; +2119;2119;2119;0050;0050; +211A;211A;211A;0051;0051; +211B;211B;211B;0052;0052; +211C;211C;211C;0052;0052; +211D;211D;211D;0052;0052; +2120;2120;2120;0053 004D;0053 004D; +2121;2121;2121;0054 0045 004C;0054 0045 004C; +2122;2122;2122;0054 004D;0054 004D; +2124;2124;2124;005A;005A; +2126;03A9;03A9;03A9;03A9; +2128;2128;2128;005A;005A; +212A;004B;004B;004B;004B; +212B;00C5;0041 030A;00C5;0041 030A; +212C;212C;212C;0042;0042; +212D;212D;212D;0043;0043; +212F;212F;212F;0065;0065; +2130;2130;2130;0045;0045; +2131;2131;2131;0046;0046; +2133;2133;2133;004D;004D; +2134;2134;2134;006F;006F; +2135;2135;2135;05D0;05D0; +2136;2136;2136;05D1;05D1; +2137;2137;2137;05D2;05D2; +2138;2138;2138;05D3;05D3; +2139;2139;2139;0069;0069; +213B;213B;213B;0046 0041 0058;0046 0041 0058; +213C;213C;213C;03C0;03C0; +213D;213D;213D;03B3;03B3; +213E;213E;213E;0393;0393; +213F;213F;213F;03A0;03A0; +2140;2140;2140;2211;2211; +2145;2145;2145;0044;0044; +2146;2146;2146;0064;0064; +2147;2147;2147;0065;0065; +2148;2148;2148;0069;0069; +2149;2149;2149;006A;006A; +2153;2153;2153;0031 2044 0033;0031 2044 0033; +2154;2154;2154;0032 2044 0033;0032 2044 0033; +2155;2155;2155;0031 2044 0035;0031 2044 0035; +2156;2156;2156;0032 2044 0035;0032 2044 0035; +2157;2157;2157;0033 2044 0035;0033 2044 0035; +2158;2158;2158;0034 2044 0035;0034 2044 0035; +2159;2159;2159;0031 2044 0036;0031 2044 0036; +215A;215A;215A;0035 2044 0036;0035 2044 0036; +215B;215B;215B;0031 2044 0038;0031 2044 0038; +215C;215C;215C;0033 2044 0038;0033 2044 0038; +215D;215D;215D;0035 2044 0038;0035 2044 0038; +215E;215E;215E;0037 2044 0038;0037 2044 0038; +215F;215F;215F;0031 2044;0031 2044; +2160;2160;2160;0049;0049; +2161;2161;2161;0049 0049;0049 0049; +2162;2162;2162;0049 0049 0049;0049 0049 0049; +2163;2163;2163;0049 0056;0049 0056; +2164;2164;2164;0056;0056; +2165;2165;2165;0056 0049;0056 0049; +2166;2166;2166;0056 0049 0049;0056 0049 0049; +2167;2167;2167;0056 0049 0049 0049;0056 0049 0049 0049; +2168;2168;2168;0049 0058;0049 0058; +2169;2169;2169;0058;0058; +216A;216A;216A;0058 0049;0058 0049; +216B;216B;216B;0058 0049 0049;0058 0049 0049; +216C;216C;216C;004C;004C; +216D;216D;216D;0043;0043; +216E;216E;216E;0044;0044; +216F;216F;216F;004D;004D; +2170;2170;2170;0069;0069; +2171;2171;2171;0069 0069;0069 0069; +2172;2172;2172;0069 0069 0069;0069 0069 0069; +2173;2173;2173;0069 0076;0069 0076; +2174;2174;2174;0076;0076; +2175;2175;2175;0076 0069;0076 0069; +2176;2176;2176;0076 0069 0069;0076 0069 0069; +2177;2177;2177;0076 0069 0069 0069;0076 0069 0069 0069; +2178;2178;2178;0069 0078;0069 0078; +2179;2179;2179;0078;0078; +217A;217A;217A;0078 0069;0078 0069; +217B;217B;217B;0078 0069 0069;0078 0069 0069; +217C;217C;217C;006C;006C; +217D;217D;217D;0063;0063; +217E;217E;217E;0064;0064; +217F;217F;217F;006D;006D; +219A;219A;2190 0338;219A;2190 0338; +219B;219B;2192 0338;219B;2192 0338; +21AE;21AE;2194 0338;21AE;2194 0338; +21CD;21CD;21D0 0338;21CD;21D0 0338; +21CE;21CE;21D4 0338;21CE;21D4 0338; +21CF;21CF;21D2 0338;21CF;21D2 0338; +2204;2204;2203 0338;2204;2203 0338; +2209;2209;2208 0338;2209;2208 0338; +220C;220C;220B 0338;220C;220B 0338; +2224;2224;2223 0338;2224;2223 0338; +2226;2226;2225 0338;2226;2225 0338; +222C;222C;222C;222B 222B;222B 222B; +222D;222D;222D;222B 222B 222B;222B 222B 222B; +222F;222F;222F;222E 222E;222E 222E; +2230;2230;2230;222E 222E 222E;222E 222E 222E; +2241;2241;223C 0338;2241;223C 0338; +2244;2244;2243 0338;2244;2243 0338; +2247;2247;2245 0338;2247;2245 0338; +2249;2249;2248 0338;2249;2248 0338; +2260;2260;003D 0338;2260;003D 0338; +2262;2262;2261 0338;2262;2261 0338; +226D;226D;224D 0338;226D;224D 0338; +226E;226E;003C 0338;226E;003C 0338; +226F;226F;003E 0338;226F;003E 0338; +2270;2270;2264 0338;2270;2264 0338; +2271;2271;2265 0338;2271;2265 0338; +2274;2274;2272 0338;2274;2272 0338; +2275;2275;2273 0338;2275;2273 0338; +2278;2278;2276 0338;2278;2276 0338; +2279;2279;2277 0338;2279;2277 0338; +2280;2280;227A 0338;2280;227A 0338; +2281;2281;227B 0338;2281;227B 0338; +2284;2284;2282 0338;2284;2282 0338; +2285;2285;2283 0338;2285;2283 0338; +2288;2288;2286 0338;2288;2286 0338; +2289;2289;2287 0338;2289;2287 0338; +22AC;22AC;22A2 0338;22AC;22A2 0338; +22AD;22AD;22A8 0338;22AD;22A8 0338; +22AE;22AE;22A9 0338;22AE;22A9 0338; +22AF;22AF;22AB 0338;22AF;22AB 0338; +22E0;22E0;227C 0338;22E0;227C 0338; +22E1;22E1;227D 0338;22E1;227D 0338; +22E2;22E2;2291 0338;22E2;2291 0338; +22E3;22E3;2292 0338;22E3;2292 0338; +22EA;22EA;22B2 0338;22EA;22B2 0338; +22EB;22EB;22B3 0338;22EB;22B3 0338; +22EC;22EC;22B4 0338;22EC;22B4 0338; +22ED;22ED;22B5 0338;22ED;22B5 0338; +2329;3008;3008;3008;3008; +232A;3009;3009;3009;3009; +2460;2460;2460;0031;0031; +2461;2461;2461;0032;0032; +2462;2462;2462;0033;0033; +2463;2463;2463;0034;0034; +2464;2464;2464;0035;0035; +2465;2465;2465;0036;0036; +2466;2466;2466;0037;0037; +2467;2467;2467;0038;0038; +2468;2468;2468;0039;0039; +2469;2469;2469;0031 0030;0031 0030; +246A;246A;246A;0031 0031;0031 0031; +246B;246B;246B;0031 0032;0031 0032; +246C;246C;246C;0031 0033;0031 0033; +246D;246D;246D;0031 0034;0031 0034; +246E;246E;246E;0031 0035;0031 0035; +246F;246F;246F;0031 0036;0031 0036; +2470;2470;2470;0031 0037;0031 0037; +2471;2471;2471;0031 0038;0031 0038; +2472;2472;2472;0031 0039;0031 0039; +2473;2473;2473;0032 0030;0032 0030; +2474;2474;2474;0028 0031 0029;0028 0031 0029; +2475;2475;2475;0028 0032 0029;0028 0032 0029; +2476;2476;2476;0028 0033 0029;0028 0033 0029; +2477;2477;2477;0028 0034 0029;0028 0034 0029; +2478;2478;2478;0028 0035 0029;0028 0035 0029; +2479;2479;2479;0028 0036 0029;0028 0036 0029; +247A;247A;247A;0028 0037 0029;0028 0037 0029; +247B;247B;247B;0028 0038 0029;0028 0038 0029; +247C;247C;247C;0028 0039 0029;0028 0039 0029; +247D;247D;247D;0028 0031 0030 0029;0028 0031 0030 0029; +247E;247E;247E;0028 0031 0031 0029;0028 0031 0031 0029; +247F;247F;247F;0028 0031 0032 0029;0028 0031 0032 0029; +2480;2480;2480;0028 0031 0033 0029;0028 0031 0033 0029; +2481;2481;2481;0028 0031 0034 0029;0028 0031 0034 0029; +2482;2482;2482;0028 0031 0035 0029;0028 0031 0035 0029; +2483;2483;2483;0028 0031 0036 0029;0028 0031 0036 0029; +2484;2484;2484;0028 0031 0037 0029;0028 0031 0037 0029; +2485;2485;2485;0028 0031 0038 0029;0028 0031 0038 0029; +2486;2486;2486;0028 0031 0039 0029;0028 0031 0039 0029; +2487;2487;2487;0028 0032 0030 0029;0028 0032 0030 0029; +2488;2488;2488;0031 002E;0031 002E; +2489;2489;2489;0032 002E;0032 002E; +248A;248A;248A;0033 002E;0033 002E; +248B;248B;248B;0034 002E;0034 002E; +248C;248C;248C;0035 002E;0035 002E; +248D;248D;248D;0036 002E;0036 002E; +248E;248E;248E;0037 002E;0037 002E; +248F;248F;248F;0038 002E;0038 002E; +2490;2490;2490;0039 002E;0039 002E; +2491;2491;2491;0031 0030 002E;0031 0030 002E; +2492;2492;2492;0031 0031 002E;0031 0031 002E; +2493;2493;2493;0031 0032 002E;0031 0032 002E; +2494;2494;2494;0031 0033 002E;0031 0033 002E; +2495;2495;2495;0031 0034 002E;0031 0034 002E; +2496;2496;2496;0031 0035 002E;0031 0035 002E; +2497;2497;2497;0031 0036 002E;0031 0036 002E; +2498;2498;2498;0031 0037 002E;0031 0037 002E; +2499;2499;2499;0031 0038 002E;0031 0038 002E; +249A;249A;249A;0031 0039 002E;0031 0039 002E; +249B;249B;249B;0032 0030 002E;0032 0030 002E; +249C;249C;249C;0028 0061 0029;0028 0061 0029; +249D;249D;249D;0028 0062 0029;0028 0062 0029; +249E;249E;249E;0028 0063 0029;0028 0063 0029; +249F;249F;249F;0028 0064 0029;0028 0064 0029; +24A0;24A0;24A0;0028 0065 0029;0028 0065 0029; +24A1;24A1;24A1;0028 0066 0029;0028 0066 0029; +24A2;24A2;24A2;0028 0067 0029;0028 0067 0029; +24A3;24A3;24A3;0028 0068 0029;0028 0068 0029; +24A4;24A4;24A4;0028 0069 0029;0028 0069 0029; +24A5;24A5;24A5;0028 006A 0029;0028 006A 0029; +24A6;24A6;24A6;0028 006B 0029;0028 006B 0029; +24A7;24A7;24A7;0028 006C 0029;0028 006C 0029; +24A8;24A8;24A8;0028 006D 0029;0028 006D 0029; +24A9;24A9;24A9;0028 006E 0029;0028 006E 0029; +24AA;24AA;24AA;0028 006F 0029;0028 006F 0029; +24AB;24AB;24AB;0028 0070 0029;0028 0070 0029; +24AC;24AC;24AC;0028 0071 0029;0028 0071 0029; +24AD;24AD;24AD;0028 0072 0029;0028 0072 0029; +24AE;24AE;24AE;0028 0073 0029;0028 0073 0029; +24AF;24AF;24AF;0028 0074 0029;0028 0074 0029; +24B0;24B0;24B0;0028 0075 0029;0028 0075 0029; +24B1;24B1;24B1;0028 0076 0029;0028 0076 0029; +24B2;24B2;24B2;0028 0077 0029;0028 0077 0029; +24B3;24B3;24B3;0028 0078 0029;0028 0078 0029; +24B4;24B4;24B4;0028 0079 0029;0028 0079 0029; +24B5;24B5;24B5;0028 007A 0029;0028 007A 0029; +24B6;24B6;24B6;0041;0041; +24B7;24B7;24B7;0042;0042; +24B8;24B8;24B8;0043;0043; +24B9;24B9;24B9;0044;0044; +24BA;24BA;24BA;0045;0045; +24BB;24BB;24BB;0046;0046; +24BC;24BC;24BC;0047;0047; +24BD;24BD;24BD;0048;0048; +24BE;24BE;24BE;0049;0049; +24BF;24BF;24BF;004A;004A; +24C0;24C0;24C0;004B;004B; +24C1;24C1;24C1;004C;004C; +24C2;24C2;24C2;004D;004D; +24C3;24C3;24C3;004E;004E; +24C4;24C4;24C4;004F;004F; +24C5;24C5;24C5;0050;0050; +24C6;24C6;24C6;0051;0051; +24C7;24C7;24C7;0052;0052; +24C8;24C8;24C8;0053;0053; +24C9;24C9;24C9;0054;0054; +24CA;24CA;24CA;0055;0055; +24CB;24CB;24CB;0056;0056; +24CC;24CC;24CC;0057;0057; +24CD;24CD;24CD;0058;0058; +24CE;24CE;24CE;0059;0059; +24CF;24CF;24CF;005A;005A; +24D0;24D0;24D0;0061;0061; +24D1;24D1;24D1;0062;0062; +24D2;24D2;24D2;0063;0063; +24D3;24D3;24D3;0064;0064; +24D4;24D4;24D4;0065;0065; +24D5;24D5;24D5;0066;0066; +24D6;24D6;24D6;0067;0067; +24D7;24D7;24D7;0068;0068; +24D8;24D8;24D8;0069;0069; +24D9;24D9;24D9;006A;006A; +24DA;24DA;24DA;006B;006B; +24DB;24DB;24DB;006C;006C; +24DC;24DC;24DC;006D;006D; +24DD;24DD;24DD;006E;006E; +24DE;24DE;24DE;006F;006F; +24DF;24DF;24DF;0070;0070; +24E0;24E0;24E0;0071;0071; +24E1;24E1;24E1;0072;0072; +24E2;24E2;24E2;0073;0073; +24E3;24E3;24E3;0074;0074; +24E4;24E4;24E4;0075;0075; +24E5;24E5;24E5;0076;0076; +24E6;24E6;24E6;0077;0077; +24E7;24E7;24E7;0078;0078; +24E8;24E8;24E8;0079;0079; +24E9;24E9;24E9;007A;007A; +24EA;24EA;24EA;0030;0030; +2A0C;2A0C;2A0C;222B 222B 222B 222B;222B 222B 222B 222B; +2A74;2A74;2A74;003A 003A 003D;003A 003A 003D; +2A75;2A75;2A75;003D 003D;003D 003D; +2A76;2A76;2A76;003D 003D 003D;003D 003D 003D; +2ADC;2ADD 0338;2ADD 0338;2ADD 0338;2ADD 0338; +2C7C;2C7C;2C7C;006A;006A; +2C7D;2C7D;2C7D;0056;0056; +2D6F;2D6F;2D6F;2D61;2D61; +2E9F;2E9F;2E9F;6BCD;6BCD; +2EF3;2EF3;2EF3;9F9F;9F9F; +2F00;2F00;2F00;4E00;4E00; +2F01;2F01;2F01;4E28;4E28; +2F02;2F02;2F02;4E36;4E36; +2F03;2F03;2F03;4E3F;4E3F; +2F04;2F04;2F04;4E59;4E59; +2F05;2F05;2F05;4E85;4E85; +2F06;2F06;2F06;4E8C;4E8C; +2F07;2F07;2F07;4EA0;4EA0; +2F08;2F08;2F08;4EBA;4EBA; +2F09;2F09;2F09;513F;513F; +2F0A;2F0A;2F0A;5165;5165; +2F0B;2F0B;2F0B;516B;516B; +2F0C;2F0C;2F0C;5182;5182; +2F0D;2F0D;2F0D;5196;5196; +2F0E;2F0E;2F0E;51AB;51AB; +2F0F;2F0F;2F0F;51E0;51E0; +2F10;2F10;2F10;51F5;51F5; +2F11;2F11;2F11;5200;5200; +2F12;2F12;2F12;529B;529B; +2F13;2F13;2F13;52F9;52F9; +2F14;2F14;2F14;5315;5315; +2F15;2F15;2F15;531A;531A; +2F16;2F16;2F16;5338;5338; +2F17;2F17;2F17;5341;5341; +2F18;2F18;2F18;535C;535C; +2F19;2F19;2F19;5369;5369; +2F1A;2F1A;2F1A;5382;5382; +2F1B;2F1B;2F1B;53B6;53B6; +2F1C;2F1C;2F1C;53C8;53C8; +2F1D;2F1D;2F1D;53E3;53E3; +2F1E;2F1E;2F1E;56D7;56D7; +2F1F;2F1F;2F1F;571F;571F; +2F20;2F20;2F20;58EB;58EB; +2F21;2F21;2F21;5902;5902; +2F22;2F22;2F22;590A;590A; +2F23;2F23;2F23;5915;5915; +2F24;2F24;2F24;5927;5927; +2F25;2F25;2F25;5973;5973; +2F26;2F26;2F26;5B50;5B50; +2F27;2F27;2F27;5B80;5B80; +2F28;2F28;2F28;5BF8;5BF8; +2F29;2F29;2F29;5C0F;5C0F; +2F2A;2F2A;2F2A;5C22;5C22; +2F2B;2F2B;2F2B;5C38;5C38; +2F2C;2F2C;2F2C;5C6E;5C6E; +2F2D;2F2D;2F2D;5C71;5C71; +2F2E;2F2E;2F2E;5DDB;5DDB; +2F2F;2F2F;2F2F;5DE5;5DE5; +2F30;2F30;2F30;5DF1;5DF1; +2F31;2F31;2F31;5DFE;5DFE; +2F32;2F32;2F32;5E72;5E72; +2F33;2F33;2F33;5E7A;5E7A; +2F34;2F34;2F34;5E7F;5E7F; +2F35;2F35;2F35;5EF4;5EF4; +2F36;2F36;2F36;5EFE;5EFE; +2F37;2F37;2F37;5F0B;5F0B; +2F38;2F38;2F38;5F13;5F13; +2F39;2F39;2F39;5F50;5F50; +2F3A;2F3A;2F3A;5F61;5F61; +2F3B;2F3B;2F3B;5F73;5F73; +2F3C;2F3C;2F3C;5FC3;5FC3; +2F3D;2F3D;2F3D;6208;6208; +2F3E;2F3E;2F3E;6236;6236; +2F3F;2F3F;2F3F;624B;624B; +2F40;2F40;2F40;652F;652F; +2F41;2F41;2F41;6534;6534; +2F42;2F42;2F42;6587;6587; +2F43;2F43;2F43;6597;6597; +2F44;2F44;2F44;65A4;65A4; +2F45;2F45;2F45;65B9;65B9; +2F46;2F46;2F46;65E0;65E0; +2F47;2F47;2F47;65E5;65E5; +2F48;2F48;2F48;66F0;66F0; +2F49;2F49;2F49;6708;6708; +2F4A;2F4A;2F4A;6728;6728; +2F4B;2F4B;2F4B;6B20;6B20; +2F4C;2F4C;2F4C;6B62;6B62; +2F4D;2F4D;2F4D;6B79;6B79; +2F4E;2F4E;2F4E;6BB3;6BB3; +2F4F;2F4F;2F4F;6BCB;6BCB; +2F50;2F50;2F50;6BD4;6BD4; +2F51;2F51;2F51;6BDB;6BDB; +2F52;2F52;2F52;6C0F;6C0F; +2F53;2F53;2F53;6C14;6C14; +2F54;2F54;2F54;6C34;6C34; +2F55;2F55;2F55;706B;706B; +2F56;2F56;2F56;722A;722A; +2F57;2F57;2F57;7236;7236; +2F58;2F58;2F58;723B;723B; +2F59;2F59;2F59;723F;723F; +2F5A;2F5A;2F5A;7247;7247; +2F5B;2F5B;2F5B;7259;7259; +2F5C;2F5C;2F5C;725B;725B; +2F5D;2F5D;2F5D;72AC;72AC; +2F5E;2F5E;2F5E;7384;7384; +2F5F;2F5F;2F5F;7389;7389; +2F60;2F60;2F60;74DC;74DC; +2F61;2F61;2F61;74E6;74E6; +2F62;2F62;2F62;7518;7518; +2F63;2F63;2F63;751F;751F; +2F64;2F64;2F64;7528;7528; +2F65;2F65;2F65;7530;7530; +2F66;2F66;2F66;758B;758B; +2F67;2F67;2F67;7592;7592; +2F68;2F68;2F68;7676;7676; +2F69;2F69;2F69;767D;767D; +2F6A;2F6A;2F6A;76AE;76AE; +2F6B;2F6B;2F6B;76BF;76BF; +2F6C;2F6C;2F6C;76EE;76EE; +2F6D;2F6D;2F6D;77DB;77DB; +2F6E;2F6E;2F6E;77E2;77E2; +2F6F;2F6F;2F6F;77F3;77F3; +2F70;2F70;2F70;793A;793A; +2F71;2F71;2F71;79B8;79B8; +2F72;2F72;2F72;79BE;79BE; +2F73;2F73;2F73;7A74;7A74; +2F74;2F74;2F74;7ACB;7ACB; +2F75;2F75;2F75;7AF9;7AF9; +2F76;2F76;2F76;7C73;7C73; +2F77;2F77;2F77;7CF8;7CF8; +2F78;2F78;2F78;7F36;7F36; +2F79;2F79;2F79;7F51;7F51; +2F7A;2F7A;2F7A;7F8A;7F8A; +2F7B;2F7B;2F7B;7FBD;7FBD; +2F7C;2F7C;2F7C;8001;8001; +2F7D;2F7D;2F7D;800C;800C; +2F7E;2F7E;2F7E;8012;8012; +2F7F;2F7F;2F7F;8033;8033; +2F80;2F80;2F80;807F;807F; +2F81;2F81;2F81;8089;8089; +2F82;2F82;2F82;81E3;81E3; +2F83;2F83;2F83;81EA;81EA; +2F84;2F84;2F84;81F3;81F3; +2F85;2F85;2F85;81FC;81FC; +2F86;2F86;2F86;820C;820C; +2F87;2F87;2F87;821B;821B; +2F88;2F88;2F88;821F;821F; +2F89;2F89;2F89;826E;826E; +2F8A;2F8A;2F8A;8272;8272; +2F8B;2F8B;2F8B;8278;8278; +2F8C;2F8C;2F8C;864D;864D; +2F8D;2F8D;2F8D;866B;866B; +2F8E;2F8E;2F8E;8840;8840; +2F8F;2F8F;2F8F;884C;884C; +2F90;2F90;2F90;8863;8863; +2F91;2F91;2F91;897E;897E; +2F92;2F92;2F92;898B;898B; +2F93;2F93;2F93;89D2;89D2; +2F94;2F94;2F94;8A00;8A00; +2F95;2F95;2F95;8C37;8C37; +2F96;2F96;2F96;8C46;8C46; +2F97;2F97;2F97;8C55;8C55; +2F98;2F98;2F98;8C78;8C78; +2F99;2F99;2F99;8C9D;8C9D; +2F9A;2F9A;2F9A;8D64;8D64; +2F9B;2F9B;2F9B;8D70;8D70; +2F9C;2F9C;2F9C;8DB3;8DB3; +2F9D;2F9D;2F9D;8EAB;8EAB; +2F9E;2F9E;2F9E;8ECA;8ECA; +2F9F;2F9F;2F9F;8F9B;8F9B; +2FA0;2FA0;2FA0;8FB0;8FB0; +2FA1;2FA1;2FA1;8FB5;8FB5; +2FA2;2FA2;2FA2;9091;9091; +2FA3;2FA3;2FA3;9149;9149; +2FA4;2FA4;2FA4;91C6;91C6; +2FA5;2FA5;2FA5;91CC;91CC; +2FA6;2FA6;2FA6;91D1;91D1; +2FA7;2FA7;2FA7;9577;9577; +2FA8;2FA8;2FA8;9580;9580; +2FA9;2FA9;2FA9;961C;961C; +2FAA;2FAA;2FAA;96B6;96B6; +2FAB;2FAB;2FAB;96B9;96B9; +2FAC;2FAC;2FAC;96E8;96E8; +2FAD;2FAD;2FAD;9751;9751; +2FAE;2FAE;2FAE;975E;975E; +2FAF;2FAF;2FAF;9762;9762; +2FB0;2FB0;2FB0;9769;9769; +2FB1;2FB1;2FB1;97CB;97CB; +2FB2;2FB2;2FB2;97ED;97ED; +2FB3;2FB3;2FB3;97F3;97F3; +2FB4;2FB4;2FB4;9801;9801; +2FB5;2FB5;2FB5;98A8;98A8; +2FB6;2FB6;2FB6;98DB;98DB; +2FB7;2FB7;2FB7;98DF;98DF; +2FB8;2FB8;2FB8;9996;9996; +2FB9;2FB9;2FB9;9999;9999; +2FBA;2FBA;2FBA;99AC;99AC; +2FBB;2FBB;2FBB;9AA8;9AA8; +2FBC;2FBC;2FBC;9AD8;9AD8; +2FBD;2FBD;2FBD;9ADF;9ADF; +2FBE;2FBE;2FBE;9B25;9B25; +2FBF;2FBF;2FBF;9B2F;9B2F; +2FC0;2FC0;2FC0;9B32;9B32; +2FC1;2FC1;2FC1;9B3C;9B3C; +2FC2;2FC2;2FC2;9B5A;9B5A; +2FC3;2FC3;2FC3;9CE5;9CE5; +2FC4;2FC4;2FC4;9E75;9E75; +2FC5;2FC5;2FC5;9E7F;9E7F; +2FC6;2FC6;2FC6;9EA5;9EA5; +2FC7;2FC7;2FC7;9EBB;9EBB; +2FC8;2FC8;2FC8;9EC3;9EC3; +2FC9;2FC9;2FC9;9ECD;9ECD; +2FCA;2FCA;2FCA;9ED1;9ED1; +2FCB;2FCB;2FCB;9EF9;9EF9; +2FCC;2FCC;2FCC;9EFD;9EFD; +2FCD;2FCD;2FCD;9F0E;9F0E; +2FCE;2FCE;2FCE;9F13;9F13; +2FCF;2FCF;2FCF;9F20;9F20; +2FD0;2FD0;2FD0;9F3B;9F3B; +2FD1;2FD1;2FD1;9F4A;9F4A; +2FD2;2FD2;2FD2;9F52;9F52; +2FD3;2FD3;2FD3;9F8D;9F8D; +2FD4;2FD4;2FD4;9F9C;9F9C; +2FD5;2FD5;2FD5;9FA0;9FA0; +3000;3000;3000;0020;0020; +3036;3036;3036;3012;3012; +3038;3038;3038;5341;5341; +3039;3039;3039;5344;5344; +303A;303A;303A;5345;5345; +304C;304C;304B 3099;304C;304B 3099; +304E;304E;304D 3099;304E;304D 3099; +3050;3050;304F 3099;3050;304F 3099; +3052;3052;3051 3099;3052;3051 3099; +3054;3054;3053 3099;3054;3053 3099; +3056;3056;3055 3099;3056;3055 3099; +3058;3058;3057 3099;3058;3057 3099; +305A;305A;3059 3099;305A;3059 3099; +305C;305C;305B 3099;305C;305B 3099; +305E;305E;305D 3099;305E;305D 3099; +3060;3060;305F 3099;3060;305F 3099; +3062;3062;3061 3099;3062;3061 3099; +3065;3065;3064 3099;3065;3064 3099; +3067;3067;3066 3099;3067;3066 3099; +3069;3069;3068 3099;3069;3068 3099; +3070;3070;306F 3099;3070;306F 3099; +3071;3071;306F 309A;3071;306F 309A; +3073;3073;3072 3099;3073;3072 3099; +3074;3074;3072 309A;3074;3072 309A; +3076;3076;3075 3099;3076;3075 3099; +3077;3077;3075 309A;3077;3075 309A; +3079;3079;3078 3099;3079;3078 3099; +307A;307A;3078 309A;307A;3078 309A; +307C;307C;307B 3099;307C;307B 3099; +307D;307D;307B 309A;307D;307B 309A; +3094;3094;3046 3099;3094;3046 3099; +309B;309B;309B;0020 3099;0020 3099; +309C;309C;309C;0020 309A;0020 309A; +309E;309E;309D 3099;309E;309D 3099; +309F;309F;309F;3088 308A;3088 308A; +30AC;30AC;30AB 3099;30AC;30AB 3099; +30AE;30AE;30AD 3099;30AE;30AD 3099; +30B0;30B0;30AF 3099;30B0;30AF 3099; +30B2;30B2;30B1 3099;30B2;30B1 3099; +30B4;30B4;30B3 3099;30B4;30B3 3099; +30B6;30B6;30B5 3099;30B6;30B5 3099; +30B8;30B8;30B7 3099;30B8;30B7 3099; +30BA;30BA;30B9 3099;30BA;30B9 3099; +30BC;30BC;30BB 3099;30BC;30BB 3099; +30BE;30BE;30BD 3099;30BE;30BD 3099; +30C0;30C0;30BF 3099;30C0;30BF 3099; +30C2;30C2;30C1 3099;30C2;30C1 3099; +30C5;30C5;30C4 3099;30C5;30C4 3099; +30C7;30C7;30C6 3099;30C7;30C6 3099; +30C9;30C9;30C8 3099;30C9;30C8 3099; +30D0;30D0;30CF 3099;30D0;30CF 3099; +30D1;30D1;30CF 309A;30D1;30CF 309A; +30D3;30D3;30D2 3099;30D3;30D2 3099; +30D4;30D4;30D2 309A;30D4;30D2 309A; +30D6;30D6;30D5 3099;30D6;30D5 3099; +30D7;30D7;30D5 309A;30D7;30D5 309A; +30D9;30D9;30D8 3099;30D9;30D8 3099; +30DA;30DA;30D8 309A;30DA;30D8 309A; +30DC;30DC;30DB 3099;30DC;30DB 3099; +30DD;30DD;30DB 309A;30DD;30DB 309A; +30F4;30F4;30A6 3099;30F4;30A6 3099; +30F7;30F7;30EF 3099;30F7;30EF 3099; +30F8;30F8;30F0 3099;30F8;30F0 3099; +30F9;30F9;30F1 3099;30F9;30F1 3099; +30FA;30FA;30F2 3099;30FA;30F2 3099; +30FE;30FE;30FD 3099;30FE;30FD 3099; +30FF;30FF;30FF;30B3 30C8;30B3 30C8; +3131;3131;3131;1100;1100; +3132;3132;3132;1101;1101; +3133;3133;3133;11AA;11AA; +3134;3134;3134;1102;1102; +3135;3135;3135;11AC;11AC; +3136;3136;3136;11AD;11AD; +3137;3137;3137;1103;1103; +3138;3138;3138;1104;1104; +3139;3139;3139;1105;1105; +313A;313A;313A;11B0;11B0; +313B;313B;313B;11B1;11B1; +313C;313C;313C;11B2;11B2; +313D;313D;313D;11B3;11B3; +313E;313E;313E;11B4;11B4; +313F;313F;313F;11B5;11B5; +3140;3140;3140;111A;111A; +3141;3141;3141;1106;1106; +3142;3142;3142;1107;1107; +3143;3143;3143;1108;1108; +3144;3144;3144;1121;1121; +3145;3145;3145;1109;1109; +3146;3146;3146;110A;110A; +3147;3147;3147;110B;110B; +3148;3148;3148;110C;110C; +3149;3149;3149;110D;110D; +314A;314A;314A;110E;110E; +314B;314B;314B;110F;110F; +314C;314C;314C;1110;1110; +314D;314D;314D;1111;1111; +314E;314E;314E;1112;1112; +314F;314F;314F;1161;1161; +3150;3150;3150;1162;1162; +3151;3151;3151;1163;1163; +3152;3152;3152;1164;1164; +3153;3153;3153;1165;1165; +3154;3154;3154;1166;1166; +3155;3155;3155;1167;1167; +3156;3156;3156;1168;1168; +3157;3157;3157;1169;1169; +3158;3158;3158;116A;116A; +3159;3159;3159;116B;116B; +315A;315A;315A;116C;116C; +315B;315B;315B;116D;116D; +315C;315C;315C;116E;116E; +315D;315D;315D;116F;116F; +315E;315E;315E;1170;1170; +315F;315F;315F;1171;1171; +3160;3160;3160;1172;1172; +3161;3161;3161;1173;1173; +3162;3162;3162;1174;1174; +3163;3163;3163;1175;1175; +3164;3164;3164;1160;1160; +3165;3165;3165;1114;1114; +3166;3166;3166;1115;1115; +3167;3167;3167;11C7;11C7; +3168;3168;3168;11C8;11C8; +3169;3169;3169;11CC;11CC; +316A;316A;316A;11CE;11CE; +316B;316B;316B;11D3;11D3; +316C;316C;316C;11D7;11D7; +316D;316D;316D;11D9;11D9; +316E;316E;316E;111C;111C; +316F;316F;316F;11DD;11DD; +3170;3170;3170;11DF;11DF; +3171;3171;3171;111D;111D; +3172;3172;3172;111E;111E; +3173;3173;3173;1120;1120; +3174;3174;3174;1122;1122; +3175;3175;3175;1123;1123; +3176;3176;3176;1127;1127; +3177;3177;3177;1129;1129; +3178;3178;3178;112B;112B; +3179;3179;3179;112C;112C; +317A;317A;317A;112D;112D; +317B;317B;317B;112E;112E; +317C;317C;317C;112F;112F; +317D;317D;317D;1132;1132; +317E;317E;317E;1136;1136; +317F;317F;317F;1140;1140; +3180;3180;3180;1147;1147; +3181;3181;3181;114C;114C; +3182;3182;3182;11F1;11F1; +3183;3183;3183;11F2;11F2; +3184;3184;3184;1157;1157; +3185;3185;3185;1158;1158; +3186;3186;3186;1159;1159; +3187;3187;3187;1184;1184; +3188;3188;3188;1185;1185; +3189;3189;3189;1188;1188; +318A;318A;318A;1191;1191; +318B;318B;318B;1192;1192; +318C;318C;318C;1194;1194; +318D;318D;318D;119E;119E; +318E;318E;318E;11A1;11A1; +3192;3192;3192;4E00;4E00; +3193;3193;3193;4E8C;4E8C; +3194;3194;3194;4E09;4E09; +3195;3195;3195;56DB;56DB; +3196;3196;3196;4E0A;4E0A; +3197;3197;3197;4E2D;4E2D; +3198;3198;3198;4E0B;4E0B; +3199;3199;3199;7532;7532; +319A;319A;319A;4E59;4E59; +319B;319B;319B;4E19;4E19; +319C;319C;319C;4E01;4E01; +319D;319D;319D;5929;5929; +319E;319E;319E;5730;5730; +319F;319F;319F;4EBA;4EBA; +3200;3200;3200;0028 1100 0029;0028 1100 0029; +3201;3201;3201;0028 1102 0029;0028 1102 0029; +3202;3202;3202;0028 1103 0029;0028 1103 0029; +3203;3203;3203;0028 1105 0029;0028 1105 0029; +3204;3204;3204;0028 1106 0029;0028 1106 0029; +3205;3205;3205;0028 1107 0029;0028 1107 0029; +3206;3206;3206;0028 1109 0029;0028 1109 0029; +3207;3207;3207;0028 110B 0029;0028 110B 0029; +3208;3208;3208;0028 110C 0029;0028 110C 0029; +3209;3209;3209;0028 110E 0029;0028 110E 0029; +320A;320A;320A;0028 110F 0029;0028 110F 0029; +320B;320B;320B;0028 1110 0029;0028 1110 0029; +320C;320C;320C;0028 1111 0029;0028 1111 0029; +320D;320D;320D;0028 1112 0029;0028 1112 0029; +320E;320E;320E;0028 AC00 0029;0028 1100 1161 0029; +320F;320F;320F;0028 B098 0029;0028 1102 1161 0029; +3210;3210;3210;0028 B2E4 0029;0028 1103 1161 0029; +3211;3211;3211;0028 B77C 0029;0028 1105 1161 0029; +3212;3212;3212;0028 B9C8 0029;0028 1106 1161 0029; +3213;3213;3213;0028 BC14 0029;0028 1107 1161 0029; +3214;3214;3214;0028 C0AC 0029;0028 1109 1161 0029; +3215;3215;3215;0028 C544 0029;0028 110B 1161 0029; +3216;3216;3216;0028 C790 0029;0028 110C 1161 0029; +3217;3217;3217;0028 CC28 0029;0028 110E 1161 0029; +3218;3218;3218;0028 CE74 0029;0028 110F 1161 0029; +3219;3219;3219;0028 D0C0 0029;0028 1110 1161 0029; +321A;321A;321A;0028 D30C 0029;0028 1111 1161 0029; +321B;321B;321B;0028 D558 0029;0028 1112 1161 0029; +321C;321C;321C;0028 C8FC 0029;0028 110C 116E 0029; +321D;321D;321D;0028 C624 C804 0029;0028 110B 1169 110C 1165 11AB 0029; +321E;321E;321E;0028 C624 D6C4 0029;0028 110B 1169 1112 116E 0029; +3220;3220;3220;0028 4E00 0029;0028 4E00 0029; +3221;3221;3221;0028 4E8C 0029;0028 4E8C 0029; +3222;3222;3222;0028 4E09 0029;0028 4E09 0029; +3223;3223;3223;0028 56DB 0029;0028 56DB 0029; +3224;3224;3224;0028 4E94 0029;0028 4E94 0029; +3225;3225;3225;0028 516D 0029;0028 516D 0029; +3226;3226;3226;0028 4E03 0029;0028 4E03 0029; +3227;3227;3227;0028 516B 0029;0028 516B 0029; +3228;3228;3228;0028 4E5D 0029;0028 4E5D 0029; +3229;3229;3229;0028 5341 0029;0028 5341 0029; +322A;322A;322A;0028 6708 0029;0028 6708 0029; +322B;322B;322B;0028 706B 0029;0028 706B 0029; +322C;322C;322C;0028 6C34 0029;0028 6C34 0029; +322D;322D;322D;0028 6728 0029;0028 6728 0029; +322E;322E;322E;0028 91D1 0029;0028 91D1 0029; +322F;322F;322F;0028 571F 0029;0028 571F 0029; +3230;3230;3230;0028 65E5 0029;0028 65E5 0029; +3231;3231;3231;0028 682A 0029;0028 682A 0029; +3232;3232;3232;0028 6709 0029;0028 6709 0029; +3233;3233;3233;0028 793E 0029;0028 793E 0029; +3234;3234;3234;0028 540D 0029;0028 540D 0029; +3235;3235;3235;0028 7279 0029;0028 7279 0029; +3236;3236;3236;0028 8CA1 0029;0028 8CA1 0029; +3237;3237;3237;0028 795D 0029;0028 795D 0029; +3238;3238;3238;0028 52B4 0029;0028 52B4 0029; +3239;3239;3239;0028 4EE3 0029;0028 4EE3 0029; +323A;323A;323A;0028 547C 0029;0028 547C 0029; +323B;323B;323B;0028 5B66 0029;0028 5B66 0029; +323C;323C;323C;0028 76E3 0029;0028 76E3 0029; +323D;323D;323D;0028 4F01 0029;0028 4F01 0029; +323E;323E;323E;0028 8CC7 0029;0028 8CC7 0029; +323F;323F;323F;0028 5354 0029;0028 5354 0029; +3240;3240;3240;0028 796D 0029;0028 796D 0029; +3241;3241;3241;0028 4F11 0029;0028 4F11 0029; +3242;3242;3242;0028 81EA 0029;0028 81EA 0029; +3243;3243;3243;0028 81F3 0029;0028 81F3 0029; +3250;3250;3250;0050 0054 0045;0050 0054 0045; +3251;3251;3251;0032 0031;0032 0031; +3252;3252;3252;0032 0032;0032 0032; +3253;3253;3253;0032 0033;0032 0033; +3254;3254;3254;0032 0034;0032 0034; +3255;3255;3255;0032 0035;0032 0035; +3256;3256;3256;0032 0036;0032 0036; +3257;3257;3257;0032 0037;0032 0037; +3258;3258;3258;0032 0038;0032 0038; +3259;3259;3259;0032 0039;0032 0039; +325A;325A;325A;0033 0030;0033 0030; +325B;325B;325B;0033 0031;0033 0031; +325C;325C;325C;0033 0032;0033 0032; +325D;325D;325D;0033 0033;0033 0033; +325E;325E;325E;0033 0034;0033 0034; +325F;325F;325F;0033 0035;0033 0035; +3260;3260;3260;1100;1100; +3261;3261;3261;1102;1102; +3262;3262;3262;1103;1103; +3263;3263;3263;1105;1105; +3264;3264;3264;1106;1106; +3265;3265;3265;1107;1107; +3266;3266;3266;1109;1109; +3267;3267;3267;110B;110B; +3268;3268;3268;110C;110C; +3269;3269;3269;110E;110E; +326A;326A;326A;110F;110F; +326B;326B;326B;1110;1110; +326C;326C;326C;1111;1111; +326D;326D;326D;1112;1112; +326E;326E;326E;AC00;1100 1161; +326F;326F;326F;B098;1102 1161; +3270;3270;3270;B2E4;1103 1161; +3271;3271;3271;B77C;1105 1161; +3272;3272;3272;B9C8;1106 1161; +3273;3273;3273;BC14;1107 1161; +3274;3274;3274;C0AC;1109 1161; +3275;3275;3275;C544;110B 1161; +3276;3276;3276;C790;110C 1161; +3277;3277;3277;CC28;110E 1161; +3278;3278;3278;CE74;110F 1161; +3279;3279;3279;D0C0;1110 1161; +327A;327A;327A;D30C;1111 1161; +327B;327B;327B;D558;1112 1161; +327C;327C;327C;CC38 ACE0;110E 1161 11B7 1100 1169; +327D;327D;327D;C8FC C758;110C 116E 110B 1174; +327E;327E;327E;C6B0;110B 116E; +3280;3280;3280;4E00;4E00; +3281;3281;3281;4E8C;4E8C; +3282;3282;3282;4E09;4E09; +3283;3283;3283;56DB;56DB; +3284;3284;3284;4E94;4E94; +3285;3285;3285;516D;516D; +3286;3286;3286;4E03;4E03; +3287;3287;3287;516B;516B; +3288;3288;3288;4E5D;4E5D; +3289;3289;3289;5341;5341; +328A;328A;328A;6708;6708; +328B;328B;328B;706B;706B; +328C;328C;328C;6C34;6C34; +328D;328D;328D;6728;6728; +328E;328E;328E;91D1;91D1; +328F;328F;328F;571F;571F; +3290;3290;3290;65E5;65E5; +3291;3291;3291;682A;682A; +3292;3292;3292;6709;6709; +3293;3293;3293;793E;793E; +3294;3294;3294;540D;540D; +3295;3295;3295;7279;7279; +3296;3296;3296;8CA1;8CA1; +3297;3297;3297;795D;795D; +3298;3298;3298;52B4;52B4; +3299;3299;3299;79D8;79D8; +329A;329A;329A;7537;7537; +329B;329B;329B;5973;5973; +329C;329C;329C;9069;9069; +329D;329D;329D;512A;512A; +329E;329E;329E;5370;5370; +329F;329F;329F;6CE8;6CE8; +32A0;32A0;32A0;9805;9805; +32A1;32A1;32A1;4F11;4F11; +32A2;32A2;32A2;5199;5199; +32A3;32A3;32A3;6B63;6B63; +32A4;32A4;32A4;4E0A;4E0A; +32A5;32A5;32A5;4E2D;4E2D; +32A6;32A6;32A6;4E0B;4E0B; +32A7;32A7;32A7;5DE6;5DE6; +32A8;32A8;32A8;53F3;53F3; +32A9;32A9;32A9;533B;533B; +32AA;32AA;32AA;5B97;5B97; +32AB;32AB;32AB;5B66;5B66; +32AC;32AC;32AC;76E3;76E3; +32AD;32AD;32AD;4F01;4F01; +32AE;32AE;32AE;8CC7;8CC7; +32AF;32AF;32AF;5354;5354; +32B0;32B0;32B0;591C;591C; +32B1;32B1;32B1;0033 0036;0033 0036; +32B2;32B2;32B2;0033 0037;0033 0037; +32B3;32B3;32B3;0033 0038;0033 0038; +32B4;32B4;32B4;0033 0039;0033 0039; +32B5;32B5;32B5;0034 0030;0034 0030; +32B6;32B6;32B6;0034 0031;0034 0031; +32B7;32B7;32B7;0034 0032;0034 0032; +32B8;32B8;32B8;0034 0033;0034 0033; +32B9;32B9;32B9;0034 0034;0034 0034; +32BA;32BA;32BA;0034 0035;0034 0035; +32BB;32BB;32BB;0034 0036;0034 0036; +32BC;32BC;32BC;0034 0037;0034 0037; +32BD;32BD;32BD;0034 0038;0034 0038; +32BE;32BE;32BE;0034 0039;0034 0039; +32BF;32BF;32BF;0035 0030;0035 0030; +32C0;32C0;32C0;0031 6708;0031 6708; +32C1;32C1;32C1;0032 6708;0032 6708; +32C2;32C2;32C2;0033 6708;0033 6708; +32C3;32C3;32C3;0034 6708;0034 6708; +32C4;32C4;32C4;0035 6708;0035 6708; +32C5;32C5;32C5;0036 6708;0036 6708; +32C6;32C6;32C6;0037 6708;0037 6708; +32C7;32C7;32C7;0038 6708;0038 6708; +32C8;32C8;32C8;0039 6708;0039 6708; +32C9;32C9;32C9;0031 0030 6708;0031 0030 6708; +32CA;32CA;32CA;0031 0031 6708;0031 0031 6708; +32CB;32CB;32CB;0031 0032 6708;0031 0032 6708; +32CC;32CC;32CC;0048 0067;0048 0067; +32CD;32CD;32CD;0065 0072 0067;0065 0072 0067; +32CE;32CE;32CE;0065 0056;0065 0056; +32CF;32CF;32CF;004C 0054 0044;004C 0054 0044; +32D0;32D0;32D0;30A2;30A2; +32D1;32D1;32D1;30A4;30A4; +32D2;32D2;32D2;30A6;30A6; +32D3;32D3;32D3;30A8;30A8; +32D4;32D4;32D4;30AA;30AA; +32D5;32D5;32D5;30AB;30AB; +32D6;32D6;32D6;30AD;30AD; +32D7;32D7;32D7;30AF;30AF; +32D8;32D8;32D8;30B1;30B1; +32D9;32D9;32D9;30B3;30B3; +32DA;32DA;32DA;30B5;30B5; +32DB;32DB;32DB;30B7;30B7; +32DC;32DC;32DC;30B9;30B9; +32DD;32DD;32DD;30BB;30BB; +32DE;32DE;32DE;30BD;30BD; +32DF;32DF;32DF;30BF;30BF; +32E0;32E0;32E0;30C1;30C1; +32E1;32E1;32E1;30C4;30C4; +32E2;32E2;32E2;30C6;30C6; +32E3;32E3;32E3;30C8;30C8; +32E4;32E4;32E4;30CA;30CA; +32E5;32E5;32E5;30CB;30CB; +32E6;32E6;32E6;30CC;30CC; +32E7;32E7;32E7;30CD;30CD; +32E8;32E8;32E8;30CE;30CE; +32E9;32E9;32E9;30CF;30CF; +32EA;32EA;32EA;30D2;30D2; +32EB;32EB;32EB;30D5;30D5; +32EC;32EC;32EC;30D8;30D8; +32ED;32ED;32ED;30DB;30DB; +32EE;32EE;32EE;30DE;30DE; +32EF;32EF;32EF;30DF;30DF; +32F0;32F0;32F0;30E0;30E0; +32F1;32F1;32F1;30E1;30E1; +32F2;32F2;32F2;30E2;30E2; +32F3;32F3;32F3;30E4;30E4; +32F4;32F4;32F4;30E6;30E6; +32F5;32F5;32F5;30E8;30E8; +32F6;32F6;32F6;30E9;30E9; +32F7;32F7;32F7;30EA;30EA; +32F8;32F8;32F8;30EB;30EB; +32F9;32F9;32F9;30EC;30EC; +32FA;32FA;32FA;30ED;30ED; +32FB;32FB;32FB;30EF;30EF; +32FC;32FC;32FC;30F0;30F0; +32FD;32FD;32FD;30F1;30F1; +32FE;32FE;32FE;30F2;30F2; +3300;3300;3300;30A2 30D1 30FC 30C8;30A2 30CF 309A 30FC 30C8; +3301;3301;3301;30A2 30EB 30D5 30A1;30A2 30EB 30D5 30A1; +3302;3302;3302;30A2 30F3 30DA 30A2;30A2 30F3 30D8 309A 30A2; +3303;3303;3303;30A2 30FC 30EB;30A2 30FC 30EB; +3304;3304;3304;30A4 30CB 30F3 30B0;30A4 30CB 30F3 30AF 3099; +3305;3305;3305;30A4 30F3 30C1;30A4 30F3 30C1; +3306;3306;3306;30A6 30A9 30F3;30A6 30A9 30F3; +3307;3307;3307;30A8 30B9 30AF 30FC 30C9;30A8 30B9 30AF 30FC 30C8 3099; +3308;3308;3308;30A8 30FC 30AB 30FC;30A8 30FC 30AB 30FC; +3309;3309;3309;30AA 30F3 30B9;30AA 30F3 30B9; +330A;330A;330A;30AA 30FC 30E0;30AA 30FC 30E0; +330B;330B;330B;30AB 30A4 30EA;30AB 30A4 30EA; +330C;330C;330C;30AB 30E9 30C3 30C8;30AB 30E9 30C3 30C8; +330D;330D;330D;30AB 30ED 30EA 30FC;30AB 30ED 30EA 30FC; +330E;330E;330E;30AC 30ED 30F3;30AB 3099 30ED 30F3; +330F;330F;330F;30AC 30F3 30DE;30AB 3099 30F3 30DE; +3310;3310;3310;30AE 30AC;30AD 3099 30AB 3099; +3311;3311;3311;30AE 30CB 30FC;30AD 3099 30CB 30FC; +3312;3312;3312;30AD 30E5 30EA 30FC;30AD 30E5 30EA 30FC; +3313;3313;3313;30AE 30EB 30C0 30FC;30AD 3099 30EB 30BF 3099 30FC; +3314;3314;3314;30AD 30ED;30AD 30ED; +3315;3315;3315;30AD 30ED 30B0 30E9 30E0;30AD 30ED 30AF 3099 30E9 30E0; +3316;3316;3316;30AD 30ED 30E1 30FC 30C8 30EB;30AD 30ED 30E1 30FC 30C8 30EB; +3317;3317;3317;30AD 30ED 30EF 30C3 30C8;30AD 30ED 30EF 30C3 30C8; +3318;3318;3318;30B0 30E9 30E0;30AF 3099 30E9 30E0; +3319;3319;3319;30B0 30E9 30E0 30C8 30F3;30AF 3099 30E9 30E0 30C8 30F3; +331A;331A;331A;30AF 30EB 30BC 30A4 30ED;30AF 30EB 30BB 3099 30A4 30ED; +331B;331B;331B;30AF 30ED 30FC 30CD;30AF 30ED 30FC 30CD; +331C;331C;331C;30B1 30FC 30B9;30B1 30FC 30B9; +331D;331D;331D;30B3 30EB 30CA;30B3 30EB 30CA; +331E;331E;331E;30B3 30FC 30DD;30B3 30FC 30DB 309A; +331F;331F;331F;30B5 30A4 30AF 30EB;30B5 30A4 30AF 30EB; +3320;3320;3320;30B5 30F3 30C1 30FC 30E0;30B5 30F3 30C1 30FC 30E0; +3321;3321;3321;30B7 30EA 30F3 30B0;30B7 30EA 30F3 30AF 3099; +3322;3322;3322;30BB 30F3 30C1;30BB 30F3 30C1; +3323;3323;3323;30BB 30F3 30C8;30BB 30F3 30C8; +3324;3324;3324;30C0 30FC 30B9;30BF 3099 30FC 30B9; +3325;3325;3325;30C7 30B7;30C6 3099 30B7; +3326;3326;3326;30C9 30EB;30C8 3099 30EB; +3327;3327;3327;30C8 30F3;30C8 30F3; +3328;3328;3328;30CA 30CE;30CA 30CE; +3329;3329;3329;30CE 30C3 30C8;30CE 30C3 30C8; +332A;332A;332A;30CF 30A4 30C4;30CF 30A4 30C4; +332B;332B;332B;30D1 30FC 30BB 30F3 30C8;30CF 309A 30FC 30BB 30F3 30C8; +332C;332C;332C;30D1 30FC 30C4;30CF 309A 30FC 30C4; +332D;332D;332D;30D0 30FC 30EC 30EB;30CF 3099 30FC 30EC 30EB; +332E;332E;332E;30D4 30A2 30B9 30C8 30EB;30D2 309A 30A2 30B9 30C8 30EB; +332F;332F;332F;30D4 30AF 30EB;30D2 309A 30AF 30EB; +3330;3330;3330;30D4 30B3;30D2 309A 30B3; +3331;3331;3331;30D3 30EB;30D2 3099 30EB; +3332;3332;3332;30D5 30A1 30E9 30C3 30C9;30D5 30A1 30E9 30C3 30C8 3099; +3333;3333;3333;30D5 30A3 30FC 30C8;30D5 30A3 30FC 30C8; +3334;3334;3334;30D6 30C3 30B7 30A7 30EB;30D5 3099 30C3 30B7 30A7 30EB; +3335;3335;3335;30D5 30E9 30F3;30D5 30E9 30F3; +3336;3336;3336;30D8 30AF 30BF 30FC 30EB;30D8 30AF 30BF 30FC 30EB; +3337;3337;3337;30DA 30BD;30D8 309A 30BD; +3338;3338;3338;30DA 30CB 30D2;30D8 309A 30CB 30D2; +3339;3339;3339;30D8 30EB 30C4;30D8 30EB 30C4; +333A;333A;333A;30DA 30F3 30B9;30D8 309A 30F3 30B9; +333B;333B;333B;30DA 30FC 30B8;30D8 309A 30FC 30B7 3099; +333C;333C;333C;30D9 30FC 30BF;30D8 3099 30FC 30BF; +333D;333D;333D;30DD 30A4 30F3 30C8;30DB 309A 30A4 30F3 30C8; +333E;333E;333E;30DC 30EB 30C8;30DB 3099 30EB 30C8; +333F;333F;333F;30DB 30F3;30DB 30F3; +3340;3340;3340;30DD 30F3 30C9;30DB 309A 30F3 30C8 3099; +3341;3341;3341;30DB 30FC 30EB;30DB 30FC 30EB; +3342;3342;3342;30DB 30FC 30F3;30DB 30FC 30F3; +3343;3343;3343;30DE 30A4 30AF 30ED;30DE 30A4 30AF 30ED; +3344;3344;3344;30DE 30A4 30EB;30DE 30A4 30EB; +3345;3345;3345;30DE 30C3 30CF;30DE 30C3 30CF; +3346;3346;3346;30DE 30EB 30AF;30DE 30EB 30AF; +3347;3347;3347;30DE 30F3 30B7 30E7 30F3;30DE 30F3 30B7 30E7 30F3; +3348;3348;3348;30DF 30AF 30ED 30F3;30DF 30AF 30ED 30F3; +3349;3349;3349;30DF 30EA;30DF 30EA; +334A;334A;334A;30DF 30EA 30D0 30FC 30EB;30DF 30EA 30CF 3099 30FC 30EB; +334B;334B;334B;30E1 30AC;30E1 30AB 3099; +334C;334C;334C;30E1 30AC 30C8 30F3;30E1 30AB 3099 30C8 30F3; +334D;334D;334D;30E1 30FC 30C8 30EB;30E1 30FC 30C8 30EB; +334E;334E;334E;30E4 30FC 30C9;30E4 30FC 30C8 3099; +334F;334F;334F;30E4 30FC 30EB;30E4 30FC 30EB; +3350;3350;3350;30E6 30A2 30F3;30E6 30A2 30F3; +3351;3351;3351;30EA 30C3 30C8 30EB;30EA 30C3 30C8 30EB; +3352;3352;3352;30EA 30E9;30EA 30E9; +3353;3353;3353;30EB 30D4 30FC;30EB 30D2 309A 30FC; +3354;3354;3354;30EB 30FC 30D6 30EB;30EB 30FC 30D5 3099 30EB; +3355;3355;3355;30EC 30E0;30EC 30E0; +3356;3356;3356;30EC 30F3 30C8 30B2 30F3;30EC 30F3 30C8 30B1 3099 30F3; +3357;3357;3357;30EF 30C3 30C8;30EF 30C3 30C8; +3358;3358;3358;0030 70B9;0030 70B9; +3359;3359;3359;0031 70B9;0031 70B9; +335A;335A;335A;0032 70B9;0032 70B9; +335B;335B;335B;0033 70B9;0033 70B9; +335C;335C;335C;0034 70B9;0034 70B9; +335D;335D;335D;0035 70B9;0035 70B9; +335E;335E;335E;0036 70B9;0036 70B9; +335F;335F;335F;0037 70B9;0037 70B9; +3360;3360;3360;0038 70B9;0038 70B9; +3361;3361;3361;0039 70B9;0039 70B9; +3362;3362;3362;0031 0030 70B9;0031 0030 70B9; +3363;3363;3363;0031 0031 70B9;0031 0031 70B9; +3364;3364;3364;0031 0032 70B9;0031 0032 70B9; +3365;3365;3365;0031 0033 70B9;0031 0033 70B9; +3366;3366;3366;0031 0034 70B9;0031 0034 70B9; +3367;3367;3367;0031 0035 70B9;0031 0035 70B9; +3368;3368;3368;0031 0036 70B9;0031 0036 70B9; +3369;3369;3369;0031 0037 70B9;0031 0037 70B9; +336A;336A;336A;0031 0038 70B9;0031 0038 70B9; +336B;336B;336B;0031 0039 70B9;0031 0039 70B9; +336C;336C;336C;0032 0030 70B9;0032 0030 70B9; +336D;336D;336D;0032 0031 70B9;0032 0031 70B9; +336E;336E;336E;0032 0032 70B9;0032 0032 70B9; +336F;336F;336F;0032 0033 70B9;0032 0033 70B9; +3370;3370;3370;0032 0034 70B9;0032 0034 70B9; +3371;3371;3371;0068 0050 0061;0068 0050 0061; +3372;3372;3372;0064 0061;0064 0061; +3373;3373;3373;0041 0055;0041 0055; +3374;3374;3374;0062 0061 0072;0062 0061 0072; +3375;3375;3375;006F 0056;006F 0056; +3376;3376;3376;0070 0063;0070 0063; +3377;3377;3377;0064 006D;0064 006D; +3378;3378;3378;0064 006D 0032;0064 006D 0032; +3379;3379;3379;0064 006D 0033;0064 006D 0033; +337A;337A;337A;0049 0055;0049 0055; +337B;337B;337B;5E73 6210;5E73 6210; +337C;337C;337C;662D 548C;662D 548C; +337D;337D;337D;5927 6B63;5927 6B63; +337E;337E;337E;660E 6CBB;660E 6CBB; +337F;337F;337F;682A 5F0F 4F1A 793E;682A 5F0F 4F1A 793E; +3380;3380;3380;0070 0041;0070 0041; +3381;3381;3381;006E 0041;006E 0041; +3382;3382;3382;03BC 0041;03BC 0041; +3383;3383;3383;006D 0041;006D 0041; +3384;3384;3384;006B 0041;006B 0041; +3385;3385;3385;004B 0042;004B 0042; +3386;3386;3386;004D 0042;004D 0042; +3387;3387;3387;0047 0042;0047 0042; +3388;3388;3388;0063 0061 006C;0063 0061 006C; +3389;3389;3389;006B 0063 0061 006C;006B 0063 0061 006C; +338A;338A;338A;0070 0046;0070 0046; +338B;338B;338B;006E 0046;006E 0046; +338C;338C;338C;03BC 0046;03BC 0046; +338D;338D;338D;03BC 0067;03BC 0067; +338E;338E;338E;006D 0067;006D 0067; +338F;338F;338F;006B 0067;006B 0067; +3390;3390;3390;0048 007A;0048 007A; +3391;3391;3391;006B 0048 007A;006B 0048 007A; +3392;3392;3392;004D 0048 007A;004D 0048 007A; +3393;3393;3393;0047 0048 007A;0047 0048 007A; +3394;3394;3394;0054 0048 007A;0054 0048 007A; +3395;3395;3395;03BC 006C;03BC 006C; +3396;3396;3396;006D 006C;006D 006C; +3397;3397;3397;0064 006C;0064 006C; +3398;3398;3398;006B 006C;006B 006C; +3399;3399;3399;0066 006D;0066 006D; +339A;339A;339A;006E 006D;006E 006D; +339B;339B;339B;03BC 006D;03BC 006D; +339C;339C;339C;006D 006D;006D 006D; +339D;339D;339D;0063 006D;0063 006D; +339E;339E;339E;006B 006D;006B 006D; +339F;339F;339F;006D 006D 0032;006D 006D 0032; +33A0;33A0;33A0;0063 006D 0032;0063 006D 0032; +33A1;33A1;33A1;006D 0032;006D 0032; +33A2;33A2;33A2;006B 006D 0032;006B 006D 0032; +33A3;33A3;33A3;006D 006D 0033;006D 006D 0033; +33A4;33A4;33A4;0063 006D 0033;0063 006D 0033; +33A5;33A5;33A5;006D 0033;006D 0033; +33A6;33A6;33A6;006B 006D 0033;006B 006D 0033; +33A7;33A7;33A7;006D 2215 0073;006D 2215 0073; +33A8;33A8;33A8;006D 2215 0073 0032;006D 2215 0073 0032; +33A9;33A9;33A9;0050 0061;0050 0061; +33AA;33AA;33AA;006B 0050 0061;006B 0050 0061; +33AB;33AB;33AB;004D 0050 0061;004D 0050 0061; +33AC;33AC;33AC;0047 0050 0061;0047 0050 0061; +33AD;33AD;33AD;0072 0061 0064;0072 0061 0064; +33AE;33AE;33AE;0072 0061 0064 2215 0073;0072 0061 0064 2215 0073; +33AF;33AF;33AF;0072 0061 0064 2215 0073 0032;0072 0061 0064 2215 0073 0032; +33B0;33B0;33B0;0070 0073;0070 0073; +33B1;33B1;33B1;006E 0073;006E 0073; +33B2;33B2;33B2;03BC 0073;03BC 0073; +33B3;33B3;33B3;006D 0073;006D 0073; +33B4;33B4;33B4;0070 0056;0070 0056; +33B5;33B5;33B5;006E 0056;006E 0056; +33B6;33B6;33B6;03BC 0056;03BC 0056; +33B7;33B7;33B7;006D 0056;006D 0056; +33B8;33B8;33B8;006B 0056;006B 0056; +33B9;33B9;33B9;004D 0056;004D 0056; +33BA;33BA;33BA;0070 0057;0070 0057; +33BB;33BB;33BB;006E 0057;006E 0057; +33BC;33BC;33BC;03BC 0057;03BC 0057; +33BD;33BD;33BD;006D 0057;006D 0057; +33BE;33BE;33BE;006B 0057;006B 0057; +33BF;33BF;33BF;004D 0057;004D 0057; +33C0;33C0;33C0;006B 03A9;006B 03A9; +33C1;33C1;33C1;004D 03A9;004D 03A9; +33C2;33C2;33C2;0061 002E 006D 002E;0061 002E 006D 002E; +33C3;33C3;33C3;0042 0071;0042 0071; +33C4;33C4;33C4;0063 0063;0063 0063; +33C5;33C5;33C5;0063 0064;0063 0064; +33C6;33C6;33C6;0043 2215 006B 0067;0043 2215 006B 0067; +33C7;33C7;33C7;0043 006F 002E;0043 006F 002E; +33C8;33C8;33C8;0064 0042;0064 0042; +33C9;33C9;33C9;0047 0079;0047 0079; +33CA;33CA;33CA;0068 0061;0068 0061; +33CB;33CB;33CB;0048 0050;0048 0050; +33CC;33CC;33CC;0069 006E;0069 006E; +33CD;33CD;33CD;004B 004B;004B 004B; +33CE;33CE;33CE;004B 004D;004B 004D; +33CF;33CF;33CF;006B 0074;006B 0074; +33D0;33D0;33D0;006C 006D;006C 006D; +33D1;33D1;33D1;006C 006E;006C 006E; +33D2;33D2;33D2;006C 006F 0067;006C 006F 0067; +33D3;33D3;33D3;006C 0078;006C 0078; +33D4;33D4;33D4;006D 0062;006D 0062; +33D5;33D5;33D5;006D 0069 006C;006D 0069 006C; +33D6;33D6;33D6;006D 006F 006C;006D 006F 006C; +33D7;33D7;33D7;0050 0048;0050 0048; +33D8;33D8;33D8;0070 002E 006D 002E;0070 002E 006D 002E; +33D9;33D9;33D9;0050 0050 004D;0050 0050 004D; +33DA;33DA;33DA;0050 0052;0050 0052; +33DB;33DB;33DB;0073 0072;0073 0072; +33DC;33DC;33DC;0053 0076;0053 0076; +33DD;33DD;33DD;0057 0062;0057 0062; +33DE;33DE;33DE;0056 2215 006D;0056 2215 006D; +33DF;33DF;33DF;0041 2215 006D;0041 2215 006D; +33E0;33E0;33E0;0031 65E5;0031 65E5; +33E1;33E1;33E1;0032 65E5;0032 65E5; +33E2;33E2;33E2;0033 65E5;0033 65E5; +33E3;33E3;33E3;0034 65E5;0034 65E5; +33E4;33E4;33E4;0035 65E5;0035 65E5; +33E5;33E5;33E5;0036 65E5;0036 65E5; +33E6;33E6;33E6;0037 65E5;0037 65E5; +33E7;33E7;33E7;0038 65E5;0038 65E5; +33E8;33E8;33E8;0039 65E5;0039 65E5; +33E9;33E9;33E9;0031 0030 65E5;0031 0030 65E5; +33EA;33EA;33EA;0031 0031 65E5;0031 0031 65E5; +33EB;33EB;33EB;0031 0032 65E5;0031 0032 65E5; +33EC;33EC;33EC;0031 0033 65E5;0031 0033 65E5; +33ED;33ED;33ED;0031 0034 65E5;0031 0034 65E5; +33EE;33EE;33EE;0031 0035 65E5;0031 0035 65E5; +33EF;33EF;33EF;0031 0036 65E5;0031 0036 65E5; +33F0;33F0;33F0;0031 0037 65E5;0031 0037 65E5; +33F1;33F1;33F1;0031 0038 65E5;0031 0038 65E5; +33F2;33F2;33F2;0031 0039 65E5;0031 0039 65E5; +33F3;33F3;33F3;0032 0030 65E5;0032 0030 65E5; +33F4;33F4;33F4;0032 0031 65E5;0032 0031 65E5; +33F5;33F5;33F5;0032 0032 65E5;0032 0032 65E5; +33F6;33F6;33F6;0032 0033 65E5;0032 0033 65E5; +33F7;33F7;33F7;0032 0034 65E5;0032 0034 65E5; +33F8;33F8;33F8;0032 0035 65E5;0032 0035 65E5; +33F9;33F9;33F9;0032 0036 65E5;0032 0036 65E5; +33FA;33FA;33FA;0032 0037 65E5;0032 0037 65E5; +33FB;33FB;33FB;0032 0038 65E5;0032 0038 65E5; +33FC;33FC;33FC;0032 0039 65E5;0032 0039 65E5; +33FD;33FD;33FD;0033 0030 65E5;0033 0030 65E5; +33FE;33FE;33FE;0033 0031 65E5;0033 0031 65E5; +33FF;33FF;33FF;0067 0061 006C;0067 0061 006C; +A770;A770;A770;A76F;A76F; +AC00;AC00;1100 1161;AC00;1100 1161; +AC01;AC01;1100 1161 11A8;AC01;1100 1161 11A8; +AC02;AC02;1100 1161 11A9;AC02;1100 1161 11A9; +AC03;AC03;1100 1161 11AA;AC03;1100 1161 11AA; +AC04;AC04;1100 1161 11AB;AC04;1100 1161 11AB; +AC05;AC05;1100 1161 11AC;AC05;1100 1161 11AC; +AC06;AC06;1100 1161 11AD;AC06;1100 1161 11AD; +AC07;AC07;1100 1161 11AE;AC07;1100 1161 11AE; +AC08;AC08;1100 1161 11AF;AC08;1100 1161 11AF; +AC09;AC09;1100 1161 11B0;AC09;1100 1161 11B0; +AC0A;AC0A;1100 1161 11B1;AC0A;1100 1161 11B1; +AC0B;AC0B;1100 1161 11B2;AC0B;1100 1161 11B2; +AC0C;AC0C;1100 1161 11B3;AC0C;1100 1161 11B3; +AC0D;AC0D;1100 1161 11B4;AC0D;1100 1161 11B4; +AC0E;AC0E;1100 1161 11B5;AC0E;1100 1161 11B5; +AC0F;AC0F;1100 1161 11B6;AC0F;1100 1161 11B6; +AC10;AC10;1100 1161 11B7;AC10;1100 1161 11B7; +AC11;AC11;1100 1161 11B8;AC11;1100 1161 11B8; +AC12;AC12;1100 1161 11B9;AC12;1100 1161 11B9; +AC13;AC13;1100 1161 11BA;AC13;1100 1161 11BA; +AC14;AC14;1100 1161 11BB;AC14;1100 1161 11BB; +AC15;AC15;1100 1161 11BC;AC15;1100 1161 11BC; +AC16;AC16;1100 1161 11BD;AC16;1100 1161 11BD; +AC17;AC17;1100 1161 11BE;AC17;1100 1161 11BE; +AC18;AC18;1100 1161 11BF;AC18;1100 1161 11BF; +AC19;AC19;1100 1161 11C0;AC19;1100 1161 11C0; +AC1A;AC1A;1100 1161 11C1;AC1A;1100 1161 11C1; +AC1B;AC1B;1100 1161 11C2;AC1B;1100 1161 11C2; +AC1C;AC1C;1100 1162;AC1C;1100 1162; +AC1D;AC1D;1100 1162 11A8;AC1D;1100 1162 11A8; +AC1E;AC1E;1100 1162 11A9;AC1E;1100 1162 11A9; +AC1F;AC1F;1100 1162 11AA;AC1F;1100 1162 11AA; +AC20;AC20;1100 1162 11AB;AC20;1100 1162 11AB; +AC21;AC21;1100 1162 11AC;AC21;1100 1162 11AC; +AC22;AC22;1100 1162 11AD;AC22;1100 1162 11AD; +AC23;AC23;1100 1162 11AE;AC23;1100 1162 11AE; +AC24;AC24;1100 1162 11AF;AC24;1100 1162 11AF; +AC25;AC25;1100 1162 11B0;AC25;1100 1162 11B0; +AC26;AC26;1100 1162 11B1;AC26;1100 1162 11B1; +AC27;AC27;1100 1162 11B2;AC27;1100 1162 11B2; +AC28;AC28;1100 1162 11B3;AC28;1100 1162 11B3; +AC29;AC29;1100 1162 11B4;AC29;1100 1162 11B4; +AC2A;AC2A;1100 1162 11B5;AC2A;1100 1162 11B5; +AC2B;AC2B;1100 1162 11B6;AC2B;1100 1162 11B6; +AC2C;AC2C;1100 1162 11B7;AC2C;1100 1162 11B7; +AC2D;AC2D;1100 1162 11B8;AC2D;1100 1162 11B8; +AC2E;AC2E;1100 1162 11B9;AC2E;1100 1162 11B9; +AC2F;AC2F;1100 1162 11BA;AC2F;1100 1162 11BA; +AC30;AC30;1100 1162 11BB;AC30;1100 1162 11BB; +AC31;AC31;1100 1162 11BC;AC31;1100 1162 11BC; +AC32;AC32;1100 1162 11BD;AC32;1100 1162 11BD; +AC33;AC33;1100 1162 11BE;AC33;1100 1162 11BE; +AC34;AC34;1100 1162 11BF;AC34;1100 1162 11BF; +AC35;AC35;1100 1162 11C0;AC35;1100 1162 11C0; +AC36;AC36;1100 1162 11C1;AC36;1100 1162 11C1; +AC37;AC37;1100 1162 11C2;AC37;1100 1162 11C2; +AC38;AC38;1100 1163;AC38;1100 1163; +AC39;AC39;1100 1163 11A8;AC39;1100 1163 11A8; +AC3A;AC3A;1100 1163 11A9;AC3A;1100 1163 11A9; +AC3B;AC3B;1100 1163 11AA;AC3B;1100 1163 11AA; +AC3C;AC3C;1100 1163 11AB;AC3C;1100 1163 11AB; +AC3D;AC3D;1100 1163 11AC;AC3D;1100 1163 11AC; +AC3E;AC3E;1100 1163 11AD;AC3E;1100 1163 11AD; +AC3F;AC3F;1100 1163 11AE;AC3F;1100 1163 11AE; +AC40;AC40;1100 1163 11AF;AC40;1100 1163 11AF; +AC41;AC41;1100 1163 11B0;AC41;1100 1163 11B0; +AC42;AC42;1100 1163 11B1;AC42;1100 1163 11B1; +AC43;AC43;1100 1163 11B2;AC43;1100 1163 11B2; +AC44;AC44;1100 1163 11B3;AC44;1100 1163 11B3; +AC45;AC45;1100 1163 11B4;AC45;1100 1163 11B4; +AC46;AC46;1100 1163 11B5;AC46;1100 1163 11B5; +AC47;AC47;1100 1163 11B6;AC47;1100 1163 11B6; +AC48;AC48;1100 1163 11B7;AC48;1100 1163 11B7; +AC49;AC49;1100 1163 11B8;AC49;1100 1163 11B8; +AC4A;AC4A;1100 1163 11B9;AC4A;1100 1163 11B9; +AC4B;AC4B;1100 1163 11BA;AC4B;1100 1163 11BA; +AC4C;AC4C;1100 1163 11BB;AC4C;1100 1163 11BB; +AC4D;AC4D;1100 1163 11BC;AC4D;1100 1163 11BC; +AC4E;AC4E;1100 1163 11BD;AC4E;1100 1163 11BD; +AC4F;AC4F;1100 1163 11BE;AC4F;1100 1163 11BE; +AC50;AC50;1100 1163 11BF;AC50;1100 1163 11BF; +AC51;AC51;1100 1163 11C0;AC51;1100 1163 11C0; +AC52;AC52;1100 1163 11C1;AC52;1100 1163 11C1; +AC53;AC53;1100 1163 11C2;AC53;1100 1163 11C2; +AC54;AC54;1100 1164;AC54;1100 1164; +AC55;AC55;1100 1164 11A8;AC55;1100 1164 11A8; +AC56;AC56;1100 1164 11A9;AC56;1100 1164 11A9; +AC57;AC57;1100 1164 11AA;AC57;1100 1164 11AA; +AC58;AC58;1100 1164 11AB;AC58;1100 1164 11AB; +AC59;AC59;1100 1164 11AC;AC59;1100 1164 11AC; +AC5A;AC5A;1100 1164 11AD;AC5A;1100 1164 11AD; +AC5B;AC5B;1100 1164 11AE;AC5B;1100 1164 11AE; +AC5C;AC5C;1100 1164 11AF;AC5C;1100 1164 11AF; +AC5D;AC5D;1100 1164 11B0;AC5D;1100 1164 11B0; +AC5E;AC5E;1100 1164 11B1;AC5E;1100 1164 11B1; +AC5F;AC5F;1100 1164 11B2;AC5F;1100 1164 11B2; +AC60;AC60;1100 1164 11B3;AC60;1100 1164 11B3; +AC61;AC61;1100 1164 11B4;AC61;1100 1164 11B4; +AC62;AC62;1100 1164 11B5;AC62;1100 1164 11B5; +AC63;AC63;1100 1164 11B6;AC63;1100 1164 11B6; +AC64;AC64;1100 1164 11B7;AC64;1100 1164 11B7; +AC65;AC65;1100 1164 11B8;AC65;1100 1164 11B8; +AC66;AC66;1100 1164 11B9;AC66;1100 1164 11B9; +AC67;AC67;1100 1164 11BA;AC67;1100 1164 11BA; +AC68;AC68;1100 1164 11BB;AC68;1100 1164 11BB; +AC69;AC69;1100 1164 11BC;AC69;1100 1164 11BC; +AC6A;AC6A;1100 1164 11BD;AC6A;1100 1164 11BD; +AC6B;AC6B;1100 1164 11BE;AC6B;1100 1164 11BE; +AC6C;AC6C;1100 1164 11BF;AC6C;1100 1164 11BF; +AC6D;AC6D;1100 1164 11C0;AC6D;1100 1164 11C0; +AC6E;AC6E;1100 1164 11C1;AC6E;1100 1164 11C1; +AC6F;AC6F;1100 1164 11C2;AC6F;1100 1164 11C2; +AC70;AC70;1100 1165;AC70;1100 1165; +AC71;AC71;1100 1165 11A8;AC71;1100 1165 11A8; +AC72;AC72;1100 1165 11A9;AC72;1100 1165 11A9; +AC73;AC73;1100 1165 11AA;AC73;1100 1165 11AA; +AC74;AC74;1100 1165 11AB;AC74;1100 1165 11AB; +AC75;AC75;1100 1165 11AC;AC75;1100 1165 11AC; +AC76;AC76;1100 1165 11AD;AC76;1100 1165 11AD; +AC77;AC77;1100 1165 11AE;AC77;1100 1165 11AE; +AC78;AC78;1100 1165 11AF;AC78;1100 1165 11AF; +AC79;AC79;1100 1165 11B0;AC79;1100 1165 11B0; +AC7A;AC7A;1100 1165 11B1;AC7A;1100 1165 11B1; +AC7B;AC7B;1100 1165 11B2;AC7B;1100 1165 11B2; +AC7C;AC7C;1100 1165 11B3;AC7C;1100 1165 11B3; +AC7D;AC7D;1100 1165 11B4;AC7D;1100 1165 11B4; +AC7E;AC7E;1100 1165 11B5;AC7E;1100 1165 11B5; +AC7F;AC7F;1100 1165 11B6;AC7F;1100 1165 11B6; +AC80;AC80;1100 1165 11B7;AC80;1100 1165 11B7; +AC81;AC81;1100 1165 11B8;AC81;1100 1165 11B8; +AC82;AC82;1100 1165 11B9;AC82;1100 1165 11B9; +AC83;AC83;1100 1165 11BA;AC83;1100 1165 11BA; +AC84;AC84;1100 1165 11BB;AC84;1100 1165 11BB; +AC85;AC85;1100 1165 11BC;AC85;1100 1165 11BC; +AC86;AC86;1100 1165 11BD;AC86;1100 1165 11BD; +AC87;AC87;1100 1165 11BE;AC87;1100 1165 11BE; +AC88;AC88;1100 1165 11BF;AC88;1100 1165 11BF; +AC89;AC89;1100 1165 11C0;AC89;1100 1165 11C0; +AC8A;AC8A;1100 1165 11C1;AC8A;1100 1165 11C1; +AC8B;AC8B;1100 1165 11C2;AC8B;1100 1165 11C2; +AC8C;AC8C;1100 1166;AC8C;1100 1166; +AC8D;AC8D;1100 1166 11A8;AC8D;1100 1166 11A8; +AC8E;AC8E;1100 1166 11A9;AC8E;1100 1166 11A9; +AC8F;AC8F;1100 1166 11AA;AC8F;1100 1166 11AA; +AC90;AC90;1100 1166 11AB;AC90;1100 1166 11AB; +AC91;AC91;1100 1166 11AC;AC91;1100 1166 11AC; +AC92;AC92;1100 1166 11AD;AC92;1100 1166 11AD; +AC93;AC93;1100 1166 11AE;AC93;1100 1166 11AE; +AC94;AC94;1100 1166 11AF;AC94;1100 1166 11AF; +AC95;AC95;1100 1166 11B0;AC95;1100 1166 11B0; +AC96;AC96;1100 1166 11B1;AC96;1100 1166 11B1; +AC97;AC97;1100 1166 11B2;AC97;1100 1166 11B2; +AC98;AC98;1100 1166 11B3;AC98;1100 1166 11B3; +AC99;AC99;1100 1166 11B4;AC99;1100 1166 11B4; +AC9A;AC9A;1100 1166 11B5;AC9A;1100 1166 11B5; +AC9B;AC9B;1100 1166 11B6;AC9B;1100 1166 11B6; +AC9C;AC9C;1100 1166 11B7;AC9C;1100 1166 11B7; +AC9D;AC9D;1100 1166 11B8;AC9D;1100 1166 11B8; +AC9E;AC9E;1100 1166 11B9;AC9E;1100 1166 11B9; +AC9F;AC9F;1100 1166 11BA;AC9F;1100 1166 11BA; +ACA0;ACA0;1100 1166 11BB;ACA0;1100 1166 11BB; +ACA1;ACA1;1100 1166 11BC;ACA1;1100 1166 11BC; +ACA2;ACA2;1100 1166 11BD;ACA2;1100 1166 11BD; +ACA3;ACA3;1100 1166 11BE;ACA3;1100 1166 11BE; +ACA4;ACA4;1100 1166 11BF;ACA4;1100 1166 11BF; +ACA5;ACA5;1100 1166 11C0;ACA5;1100 1166 11C0; +ACA6;ACA6;1100 1166 11C1;ACA6;1100 1166 11C1; +ACA7;ACA7;1100 1166 11C2;ACA7;1100 1166 11C2; +ACA8;ACA8;1100 1167;ACA8;1100 1167; +ACA9;ACA9;1100 1167 11A8;ACA9;1100 1167 11A8; +ACAA;ACAA;1100 1167 11A9;ACAA;1100 1167 11A9; +ACAB;ACAB;1100 1167 11AA;ACAB;1100 1167 11AA; +ACAC;ACAC;1100 1167 11AB;ACAC;1100 1167 11AB; +ACAD;ACAD;1100 1167 11AC;ACAD;1100 1167 11AC; +ACAE;ACAE;1100 1167 11AD;ACAE;1100 1167 11AD; +ACAF;ACAF;1100 1167 11AE;ACAF;1100 1167 11AE; +ACB0;ACB0;1100 1167 11AF;ACB0;1100 1167 11AF; +ACB1;ACB1;1100 1167 11B0;ACB1;1100 1167 11B0; +ACB2;ACB2;1100 1167 11B1;ACB2;1100 1167 11B1; +ACB3;ACB3;1100 1167 11B2;ACB3;1100 1167 11B2; +ACB4;ACB4;1100 1167 11B3;ACB4;1100 1167 11B3; +ACB5;ACB5;1100 1167 11B4;ACB5;1100 1167 11B4; +ACB6;ACB6;1100 1167 11B5;ACB6;1100 1167 11B5; +ACB7;ACB7;1100 1167 11B6;ACB7;1100 1167 11B6; +ACB8;ACB8;1100 1167 11B7;ACB8;1100 1167 11B7; +ACB9;ACB9;1100 1167 11B8;ACB9;1100 1167 11B8; +ACBA;ACBA;1100 1167 11B9;ACBA;1100 1167 11B9; +ACBB;ACBB;1100 1167 11BA;ACBB;1100 1167 11BA; +ACBC;ACBC;1100 1167 11BB;ACBC;1100 1167 11BB; +ACBD;ACBD;1100 1167 11BC;ACBD;1100 1167 11BC; +ACBE;ACBE;1100 1167 11BD;ACBE;1100 1167 11BD; +ACBF;ACBF;1100 1167 11BE;ACBF;1100 1167 11BE; +ACC0;ACC0;1100 1167 11BF;ACC0;1100 1167 11BF; +ACC1;ACC1;1100 1167 11C0;ACC1;1100 1167 11C0; +ACC2;ACC2;1100 1167 11C1;ACC2;1100 1167 11C1; +ACC3;ACC3;1100 1167 11C2;ACC3;1100 1167 11C2; +ACC4;ACC4;1100 1168;ACC4;1100 1168; +ACC5;ACC5;1100 1168 11A8;ACC5;1100 1168 11A8; +ACC6;ACC6;1100 1168 11A9;ACC6;1100 1168 11A9; +ACC7;ACC7;1100 1168 11AA;ACC7;1100 1168 11AA; +ACC8;ACC8;1100 1168 11AB;ACC8;1100 1168 11AB; +ACC9;ACC9;1100 1168 11AC;ACC9;1100 1168 11AC; +ACCA;ACCA;1100 1168 11AD;ACCA;1100 1168 11AD; +ACCB;ACCB;1100 1168 11AE;ACCB;1100 1168 11AE; +ACCC;ACCC;1100 1168 11AF;ACCC;1100 1168 11AF; +ACCD;ACCD;1100 1168 11B0;ACCD;1100 1168 11B0; +ACCE;ACCE;1100 1168 11B1;ACCE;1100 1168 11B1; +ACCF;ACCF;1100 1168 11B2;ACCF;1100 1168 11B2; +ACD0;ACD0;1100 1168 11B3;ACD0;1100 1168 11B3; +ACD1;ACD1;1100 1168 11B4;ACD1;1100 1168 11B4; +ACD2;ACD2;1100 1168 11B5;ACD2;1100 1168 11B5; +ACD3;ACD3;1100 1168 11B6;ACD3;1100 1168 11B6; +ACD4;ACD4;1100 1168 11B7;ACD4;1100 1168 11B7; +ACD5;ACD5;1100 1168 11B8;ACD5;1100 1168 11B8; +ACD6;ACD6;1100 1168 11B9;ACD6;1100 1168 11B9; +ACD7;ACD7;1100 1168 11BA;ACD7;1100 1168 11BA; +ACD8;ACD8;1100 1168 11BB;ACD8;1100 1168 11BB; +ACD9;ACD9;1100 1168 11BC;ACD9;1100 1168 11BC; +ACDA;ACDA;1100 1168 11BD;ACDA;1100 1168 11BD; +ACDB;ACDB;1100 1168 11BE;ACDB;1100 1168 11BE; +ACDC;ACDC;1100 1168 11BF;ACDC;1100 1168 11BF; +ACDD;ACDD;1100 1168 11C0;ACDD;1100 1168 11C0; +ACDE;ACDE;1100 1168 11C1;ACDE;1100 1168 11C1; +ACDF;ACDF;1100 1168 11C2;ACDF;1100 1168 11C2; +ACE0;ACE0;1100 1169;ACE0;1100 1169; +ACE1;ACE1;1100 1169 11A8;ACE1;1100 1169 11A8; +ACE2;ACE2;1100 1169 11A9;ACE2;1100 1169 11A9; +ACE3;ACE3;1100 1169 11AA;ACE3;1100 1169 11AA; +ACE4;ACE4;1100 1169 11AB;ACE4;1100 1169 11AB; +ACE5;ACE5;1100 1169 11AC;ACE5;1100 1169 11AC; +ACE6;ACE6;1100 1169 11AD;ACE6;1100 1169 11AD; +ACE7;ACE7;1100 1169 11AE;ACE7;1100 1169 11AE; +ACE8;ACE8;1100 1169 11AF;ACE8;1100 1169 11AF; +ACE9;ACE9;1100 1169 11B0;ACE9;1100 1169 11B0; +ACEA;ACEA;1100 1169 11B1;ACEA;1100 1169 11B1; +ACEB;ACEB;1100 1169 11B2;ACEB;1100 1169 11B2; +ACEC;ACEC;1100 1169 11B3;ACEC;1100 1169 11B3; +ACED;ACED;1100 1169 11B4;ACED;1100 1169 11B4; +ACEE;ACEE;1100 1169 11B5;ACEE;1100 1169 11B5; +ACEF;ACEF;1100 1169 11B6;ACEF;1100 1169 11B6; +ACF0;ACF0;1100 1169 11B7;ACF0;1100 1169 11B7; +ACF1;ACF1;1100 1169 11B8;ACF1;1100 1169 11B8; +ACF2;ACF2;1100 1169 11B9;ACF2;1100 1169 11B9; +ACF3;ACF3;1100 1169 11BA;ACF3;1100 1169 11BA; +ACF4;ACF4;1100 1169 11BB;ACF4;1100 1169 11BB; +ACF5;ACF5;1100 1169 11BC;ACF5;1100 1169 11BC; +ACF6;ACF6;1100 1169 11BD;ACF6;1100 1169 11BD; +ACF7;ACF7;1100 1169 11BE;ACF7;1100 1169 11BE; +ACF8;ACF8;1100 1169 11BF;ACF8;1100 1169 11BF; +ACF9;ACF9;1100 1169 11C0;ACF9;1100 1169 11C0; +ACFA;ACFA;1100 1169 11C1;ACFA;1100 1169 11C1; +ACFB;ACFB;1100 1169 11C2;ACFB;1100 1169 11C2; +ACFC;ACFC;1100 116A;ACFC;1100 116A; +ACFD;ACFD;1100 116A 11A8;ACFD;1100 116A 11A8; +ACFE;ACFE;1100 116A 11A9;ACFE;1100 116A 11A9; +ACFF;ACFF;1100 116A 11AA;ACFF;1100 116A 11AA; +AD00;AD00;1100 116A 11AB;AD00;1100 116A 11AB; +AD01;AD01;1100 116A 11AC;AD01;1100 116A 11AC; +AD02;AD02;1100 116A 11AD;AD02;1100 116A 11AD; +AD03;AD03;1100 116A 11AE;AD03;1100 116A 11AE; +AD04;AD04;1100 116A 11AF;AD04;1100 116A 11AF; +AD05;AD05;1100 116A 11B0;AD05;1100 116A 11B0; +AD06;AD06;1100 116A 11B1;AD06;1100 116A 11B1; +AD07;AD07;1100 116A 11B2;AD07;1100 116A 11B2; +AD08;AD08;1100 116A 11B3;AD08;1100 116A 11B3; +AD09;AD09;1100 116A 11B4;AD09;1100 116A 11B4; +AD0A;AD0A;1100 116A 11B5;AD0A;1100 116A 11B5; +AD0B;AD0B;1100 116A 11B6;AD0B;1100 116A 11B6; +AD0C;AD0C;1100 116A 11B7;AD0C;1100 116A 11B7; +AD0D;AD0D;1100 116A 11B8;AD0D;1100 116A 11B8; +AD0E;AD0E;1100 116A 11B9;AD0E;1100 116A 11B9; +AD0F;AD0F;1100 116A 11BA;AD0F;1100 116A 11BA; +AD10;AD10;1100 116A 11BB;AD10;1100 116A 11BB; +AD11;AD11;1100 116A 11BC;AD11;1100 116A 11BC; +AD12;AD12;1100 116A 11BD;AD12;1100 116A 11BD; +AD13;AD13;1100 116A 11BE;AD13;1100 116A 11BE; +AD14;AD14;1100 116A 11BF;AD14;1100 116A 11BF; +AD15;AD15;1100 116A 11C0;AD15;1100 116A 11C0; +AD16;AD16;1100 116A 11C1;AD16;1100 116A 11C1; +AD17;AD17;1100 116A 11C2;AD17;1100 116A 11C2; +AD18;AD18;1100 116B;AD18;1100 116B; +AD19;AD19;1100 116B 11A8;AD19;1100 116B 11A8; +AD1A;AD1A;1100 116B 11A9;AD1A;1100 116B 11A9; +AD1B;AD1B;1100 116B 11AA;AD1B;1100 116B 11AA; +AD1C;AD1C;1100 116B 11AB;AD1C;1100 116B 11AB; +AD1D;AD1D;1100 116B 11AC;AD1D;1100 116B 11AC; +AD1E;AD1E;1100 116B 11AD;AD1E;1100 116B 11AD; +AD1F;AD1F;1100 116B 11AE;AD1F;1100 116B 11AE; +AD20;AD20;1100 116B 11AF;AD20;1100 116B 11AF; +AD21;AD21;1100 116B 11B0;AD21;1100 116B 11B0; +AD22;AD22;1100 116B 11B1;AD22;1100 116B 11B1; +AD23;AD23;1100 116B 11B2;AD23;1100 116B 11B2; +AD24;AD24;1100 116B 11B3;AD24;1100 116B 11B3; +AD25;AD25;1100 116B 11B4;AD25;1100 116B 11B4; +AD26;AD26;1100 116B 11B5;AD26;1100 116B 11B5; +AD27;AD27;1100 116B 11B6;AD27;1100 116B 11B6; +AD28;AD28;1100 116B 11B7;AD28;1100 116B 11B7; +AD29;AD29;1100 116B 11B8;AD29;1100 116B 11B8; +AD2A;AD2A;1100 116B 11B9;AD2A;1100 116B 11B9; +AD2B;AD2B;1100 116B 11BA;AD2B;1100 116B 11BA; +AD2C;AD2C;1100 116B 11BB;AD2C;1100 116B 11BB; +AD2D;AD2D;1100 116B 11BC;AD2D;1100 116B 11BC; +AD2E;AD2E;1100 116B 11BD;AD2E;1100 116B 11BD; +AD2F;AD2F;1100 116B 11BE;AD2F;1100 116B 11BE; +AD30;AD30;1100 116B 11BF;AD30;1100 116B 11BF; +AD31;AD31;1100 116B 11C0;AD31;1100 116B 11C0; +AD32;AD32;1100 116B 11C1;AD32;1100 116B 11C1; +AD33;AD33;1100 116B 11C2;AD33;1100 116B 11C2; +AD34;AD34;1100 116C;AD34;1100 116C; +AD35;AD35;1100 116C 11A8;AD35;1100 116C 11A8; +AD36;AD36;1100 116C 11A9;AD36;1100 116C 11A9; +AD37;AD37;1100 116C 11AA;AD37;1100 116C 11AA; +AD38;AD38;1100 116C 11AB;AD38;1100 116C 11AB; +AD39;AD39;1100 116C 11AC;AD39;1100 116C 11AC; +AD3A;AD3A;1100 116C 11AD;AD3A;1100 116C 11AD; +AD3B;AD3B;1100 116C 11AE;AD3B;1100 116C 11AE; +AD3C;AD3C;1100 116C 11AF;AD3C;1100 116C 11AF; +AD3D;AD3D;1100 116C 11B0;AD3D;1100 116C 11B0; +AD3E;AD3E;1100 116C 11B1;AD3E;1100 116C 11B1; +AD3F;AD3F;1100 116C 11B2;AD3F;1100 116C 11B2; +AD40;AD40;1100 116C 11B3;AD40;1100 116C 11B3; +AD41;AD41;1100 116C 11B4;AD41;1100 116C 11B4; +AD42;AD42;1100 116C 11B5;AD42;1100 116C 11B5; +AD43;AD43;1100 116C 11B6;AD43;1100 116C 11B6; +AD44;AD44;1100 116C 11B7;AD44;1100 116C 11B7; +AD45;AD45;1100 116C 11B8;AD45;1100 116C 11B8; +AD46;AD46;1100 116C 11B9;AD46;1100 116C 11B9; +AD47;AD47;1100 116C 11BA;AD47;1100 116C 11BA; +AD48;AD48;1100 116C 11BB;AD48;1100 116C 11BB; +AD49;AD49;1100 116C 11BC;AD49;1100 116C 11BC; +AD4A;AD4A;1100 116C 11BD;AD4A;1100 116C 11BD; +AD4B;AD4B;1100 116C 11BE;AD4B;1100 116C 11BE; +AD4C;AD4C;1100 116C 11BF;AD4C;1100 116C 11BF; +AD4D;AD4D;1100 116C 11C0;AD4D;1100 116C 11C0; +AD4E;AD4E;1100 116C 11C1;AD4E;1100 116C 11C1; +AD4F;AD4F;1100 116C 11C2;AD4F;1100 116C 11C2; +AD50;AD50;1100 116D;AD50;1100 116D; +AD51;AD51;1100 116D 11A8;AD51;1100 116D 11A8; +AD52;AD52;1100 116D 11A9;AD52;1100 116D 11A9; +AD53;AD53;1100 116D 11AA;AD53;1100 116D 11AA; +AD54;AD54;1100 116D 11AB;AD54;1100 116D 11AB; +AD55;AD55;1100 116D 11AC;AD55;1100 116D 11AC; +AD56;AD56;1100 116D 11AD;AD56;1100 116D 11AD; +AD57;AD57;1100 116D 11AE;AD57;1100 116D 11AE; +AD58;AD58;1100 116D 11AF;AD58;1100 116D 11AF; +AD59;AD59;1100 116D 11B0;AD59;1100 116D 11B0; +AD5A;AD5A;1100 116D 11B1;AD5A;1100 116D 11B1; +AD5B;AD5B;1100 116D 11B2;AD5B;1100 116D 11B2; +AD5C;AD5C;1100 116D 11B3;AD5C;1100 116D 11B3; +AD5D;AD5D;1100 116D 11B4;AD5D;1100 116D 11B4; +AD5E;AD5E;1100 116D 11B5;AD5E;1100 116D 11B5; +AD5F;AD5F;1100 116D 11B6;AD5F;1100 116D 11B6; +AD60;AD60;1100 116D 11B7;AD60;1100 116D 11B7; +AD61;AD61;1100 116D 11B8;AD61;1100 116D 11B8; +AD62;AD62;1100 116D 11B9;AD62;1100 116D 11B9; +AD63;AD63;1100 116D 11BA;AD63;1100 116D 11BA; +AD64;AD64;1100 116D 11BB;AD64;1100 116D 11BB; +AD65;AD65;1100 116D 11BC;AD65;1100 116D 11BC; +AD66;AD66;1100 116D 11BD;AD66;1100 116D 11BD; +AD67;AD67;1100 116D 11BE;AD67;1100 116D 11BE; +AD68;AD68;1100 116D 11BF;AD68;1100 116D 11BF; +AD69;AD69;1100 116D 11C0;AD69;1100 116D 11C0; +AD6A;AD6A;1100 116D 11C1;AD6A;1100 116D 11C1; +AD6B;AD6B;1100 116D 11C2;AD6B;1100 116D 11C2; +AD6C;AD6C;1100 116E;AD6C;1100 116E; +AD6D;AD6D;1100 116E 11A8;AD6D;1100 116E 11A8; +AD6E;AD6E;1100 116E 11A9;AD6E;1100 116E 11A9; +AD6F;AD6F;1100 116E 11AA;AD6F;1100 116E 11AA; +AD70;AD70;1100 116E 11AB;AD70;1100 116E 11AB; +AD71;AD71;1100 116E 11AC;AD71;1100 116E 11AC; +AD72;AD72;1100 116E 11AD;AD72;1100 116E 11AD; +AD73;AD73;1100 116E 11AE;AD73;1100 116E 11AE; +AD74;AD74;1100 116E 11AF;AD74;1100 116E 11AF; +AD75;AD75;1100 116E 11B0;AD75;1100 116E 11B0; +AD76;AD76;1100 116E 11B1;AD76;1100 116E 11B1; +AD77;AD77;1100 116E 11B2;AD77;1100 116E 11B2; +AD78;AD78;1100 116E 11B3;AD78;1100 116E 11B3; +AD79;AD79;1100 116E 11B4;AD79;1100 116E 11B4; +AD7A;AD7A;1100 116E 11B5;AD7A;1100 116E 11B5; +AD7B;AD7B;1100 116E 11B6;AD7B;1100 116E 11B6; +AD7C;AD7C;1100 116E 11B7;AD7C;1100 116E 11B7; +AD7D;AD7D;1100 116E 11B8;AD7D;1100 116E 11B8; +AD7E;AD7E;1100 116E 11B9;AD7E;1100 116E 11B9; +AD7F;AD7F;1100 116E 11BA;AD7F;1100 116E 11BA; +AD80;AD80;1100 116E 11BB;AD80;1100 116E 11BB; +AD81;AD81;1100 116E 11BC;AD81;1100 116E 11BC; +AD82;AD82;1100 116E 11BD;AD82;1100 116E 11BD; +AD83;AD83;1100 116E 11BE;AD83;1100 116E 11BE; +AD84;AD84;1100 116E 11BF;AD84;1100 116E 11BF; +AD85;AD85;1100 116E 11C0;AD85;1100 116E 11C0; +AD86;AD86;1100 116E 11C1;AD86;1100 116E 11C1; +AD87;AD87;1100 116E 11C2;AD87;1100 116E 11C2; +AD88;AD88;1100 116F;AD88;1100 116F; +AD89;AD89;1100 116F 11A8;AD89;1100 116F 11A8; +AD8A;AD8A;1100 116F 11A9;AD8A;1100 116F 11A9; +AD8B;AD8B;1100 116F 11AA;AD8B;1100 116F 11AA; +AD8C;AD8C;1100 116F 11AB;AD8C;1100 116F 11AB; +AD8D;AD8D;1100 116F 11AC;AD8D;1100 116F 11AC; +AD8E;AD8E;1100 116F 11AD;AD8E;1100 116F 11AD; +AD8F;AD8F;1100 116F 11AE;AD8F;1100 116F 11AE; +AD90;AD90;1100 116F 11AF;AD90;1100 116F 11AF; +AD91;AD91;1100 116F 11B0;AD91;1100 116F 11B0; +AD92;AD92;1100 116F 11B1;AD92;1100 116F 11B1; +AD93;AD93;1100 116F 11B2;AD93;1100 116F 11B2; +AD94;AD94;1100 116F 11B3;AD94;1100 116F 11B3; +AD95;AD95;1100 116F 11B4;AD95;1100 116F 11B4; +AD96;AD96;1100 116F 11B5;AD96;1100 116F 11B5; +AD97;AD97;1100 116F 11B6;AD97;1100 116F 11B6; +AD98;AD98;1100 116F 11B7;AD98;1100 116F 11B7; +AD99;AD99;1100 116F 11B8;AD99;1100 116F 11B8; +AD9A;AD9A;1100 116F 11B9;AD9A;1100 116F 11B9; +AD9B;AD9B;1100 116F 11BA;AD9B;1100 116F 11BA; +AD9C;AD9C;1100 116F 11BB;AD9C;1100 116F 11BB; +AD9D;AD9D;1100 116F 11BC;AD9D;1100 116F 11BC; +AD9E;AD9E;1100 116F 11BD;AD9E;1100 116F 11BD; +AD9F;AD9F;1100 116F 11BE;AD9F;1100 116F 11BE; +ADA0;ADA0;1100 116F 11BF;ADA0;1100 116F 11BF; +ADA1;ADA1;1100 116F 11C0;ADA1;1100 116F 11C0; +ADA2;ADA2;1100 116F 11C1;ADA2;1100 116F 11C1; +ADA3;ADA3;1100 116F 11C2;ADA3;1100 116F 11C2; +ADA4;ADA4;1100 1170;ADA4;1100 1170; +ADA5;ADA5;1100 1170 11A8;ADA5;1100 1170 11A8; +ADA6;ADA6;1100 1170 11A9;ADA6;1100 1170 11A9; +ADA7;ADA7;1100 1170 11AA;ADA7;1100 1170 11AA; +ADA8;ADA8;1100 1170 11AB;ADA8;1100 1170 11AB; +ADA9;ADA9;1100 1170 11AC;ADA9;1100 1170 11AC; +ADAA;ADAA;1100 1170 11AD;ADAA;1100 1170 11AD; +ADAB;ADAB;1100 1170 11AE;ADAB;1100 1170 11AE; +ADAC;ADAC;1100 1170 11AF;ADAC;1100 1170 11AF; +ADAD;ADAD;1100 1170 11B0;ADAD;1100 1170 11B0; +ADAE;ADAE;1100 1170 11B1;ADAE;1100 1170 11B1; +ADAF;ADAF;1100 1170 11B2;ADAF;1100 1170 11B2; +ADB0;ADB0;1100 1170 11B3;ADB0;1100 1170 11B3; +ADB1;ADB1;1100 1170 11B4;ADB1;1100 1170 11B4; +ADB2;ADB2;1100 1170 11B5;ADB2;1100 1170 11B5; +ADB3;ADB3;1100 1170 11B6;ADB3;1100 1170 11B6; +ADB4;ADB4;1100 1170 11B7;ADB4;1100 1170 11B7; +ADB5;ADB5;1100 1170 11B8;ADB5;1100 1170 11B8; +ADB6;ADB6;1100 1170 11B9;ADB6;1100 1170 11B9; +ADB7;ADB7;1100 1170 11BA;ADB7;1100 1170 11BA; +ADB8;ADB8;1100 1170 11BB;ADB8;1100 1170 11BB; +ADB9;ADB9;1100 1170 11BC;ADB9;1100 1170 11BC; +ADBA;ADBA;1100 1170 11BD;ADBA;1100 1170 11BD; +ADBB;ADBB;1100 1170 11BE;ADBB;1100 1170 11BE; +ADBC;ADBC;1100 1170 11BF;ADBC;1100 1170 11BF; +ADBD;ADBD;1100 1170 11C0;ADBD;1100 1170 11C0; +ADBE;ADBE;1100 1170 11C1;ADBE;1100 1170 11C1; +ADBF;ADBF;1100 1170 11C2;ADBF;1100 1170 11C2; +ADC0;ADC0;1100 1171;ADC0;1100 1171; +ADC1;ADC1;1100 1171 11A8;ADC1;1100 1171 11A8; +ADC2;ADC2;1100 1171 11A9;ADC2;1100 1171 11A9; +ADC3;ADC3;1100 1171 11AA;ADC3;1100 1171 11AA; +ADC4;ADC4;1100 1171 11AB;ADC4;1100 1171 11AB; +ADC5;ADC5;1100 1171 11AC;ADC5;1100 1171 11AC; +ADC6;ADC6;1100 1171 11AD;ADC6;1100 1171 11AD; +ADC7;ADC7;1100 1171 11AE;ADC7;1100 1171 11AE; +ADC8;ADC8;1100 1171 11AF;ADC8;1100 1171 11AF; +ADC9;ADC9;1100 1171 11B0;ADC9;1100 1171 11B0; +ADCA;ADCA;1100 1171 11B1;ADCA;1100 1171 11B1; +ADCB;ADCB;1100 1171 11B2;ADCB;1100 1171 11B2; +ADCC;ADCC;1100 1171 11B3;ADCC;1100 1171 11B3; +ADCD;ADCD;1100 1171 11B4;ADCD;1100 1171 11B4; +ADCE;ADCE;1100 1171 11B5;ADCE;1100 1171 11B5; +ADCF;ADCF;1100 1171 11B6;ADCF;1100 1171 11B6; +ADD0;ADD0;1100 1171 11B7;ADD0;1100 1171 11B7; +ADD1;ADD1;1100 1171 11B8;ADD1;1100 1171 11B8; +ADD2;ADD2;1100 1171 11B9;ADD2;1100 1171 11B9; +ADD3;ADD3;1100 1171 11BA;ADD3;1100 1171 11BA; +ADD4;ADD4;1100 1171 11BB;ADD4;1100 1171 11BB; +ADD5;ADD5;1100 1171 11BC;ADD5;1100 1171 11BC; +ADD6;ADD6;1100 1171 11BD;ADD6;1100 1171 11BD; +ADD7;ADD7;1100 1171 11BE;ADD7;1100 1171 11BE; +ADD8;ADD8;1100 1171 11BF;ADD8;1100 1171 11BF; +ADD9;ADD9;1100 1171 11C0;ADD9;1100 1171 11C0; +ADDA;ADDA;1100 1171 11C1;ADDA;1100 1171 11C1; +ADDB;ADDB;1100 1171 11C2;ADDB;1100 1171 11C2; +ADDC;ADDC;1100 1172;ADDC;1100 1172; +ADDD;ADDD;1100 1172 11A8;ADDD;1100 1172 11A8; +ADDE;ADDE;1100 1172 11A9;ADDE;1100 1172 11A9; +ADDF;ADDF;1100 1172 11AA;ADDF;1100 1172 11AA; +ADE0;ADE0;1100 1172 11AB;ADE0;1100 1172 11AB; +ADE1;ADE1;1100 1172 11AC;ADE1;1100 1172 11AC; +ADE2;ADE2;1100 1172 11AD;ADE2;1100 1172 11AD; +ADE3;ADE3;1100 1172 11AE;ADE3;1100 1172 11AE; +ADE4;ADE4;1100 1172 11AF;ADE4;1100 1172 11AF; +ADE5;ADE5;1100 1172 11B0;ADE5;1100 1172 11B0; +ADE6;ADE6;1100 1172 11B1;ADE6;1100 1172 11B1; +ADE7;ADE7;1100 1172 11B2;ADE7;1100 1172 11B2; +ADE8;ADE8;1100 1172 11B3;ADE8;1100 1172 11B3; +ADE9;ADE9;1100 1172 11B4;ADE9;1100 1172 11B4; +ADEA;ADEA;1100 1172 11B5;ADEA;1100 1172 11B5; +ADEB;ADEB;1100 1172 11B6;ADEB;1100 1172 11B6; +ADEC;ADEC;1100 1172 11B7;ADEC;1100 1172 11B7; +ADED;ADED;1100 1172 11B8;ADED;1100 1172 11B8; +ADEE;ADEE;1100 1172 11B9;ADEE;1100 1172 11B9; +ADEF;ADEF;1100 1172 11BA;ADEF;1100 1172 11BA; +ADF0;ADF0;1100 1172 11BB;ADF0;1100 1172 11BB; +ADF1;ADF1;1100 1172 11BC;ADF1;1100 1172 11BC; +ADF2;ADF2;1100 1172 11BD;ADF2;1100 1172 11BD; +ADF3;ADF3;1100 1172 11BE;ADF3;1100 1172 11BE; +ADF4;ADF4;1100 1172 11BF;ADF4;1100 1172 11BF; +ADF5;ADF5;1100 1172 11C0;ADF5;1100 1172 11C0; +ADF6;ADF6;1100 1172 11C1;ADF6;1100 1172 11C1; +ADF7;ADF7;1100 1172 11C2;ADF7;1100 1172 11C2; +ADF8;ADF8;1100 1173;ADF8;1100 1173; +ADF9;ADF9;1100 1173 11A8;ADF9;1100 1173 11A8; +ADFA;ADFA;1100 1173 11A9;ADFA;1100 1173 11A9; +ADFB;ADFB;1100 1173 11AA;ADFB;1100 1173 11AA; +ADFC;ADFC;1100 1173 11AB;ADFC;1100 1173 11AB; +ADFD;ADFD;1100 1173 11AC;ADFD;1100 1173 11AC; +ADFE;ADFE;1100 1173 11AD;ADFE;1100 1173 11AD; +ADFF;ADFF;1100 1173 11AE;ADFF;1100 1173 11AE; +AE00;AE00;1100 1173 11AF;AE00;1100 1173 11AF; +AE01;AE01;1100 1173 11B0;AE01;1100 1173 11B0; +AE02;AE02;1100 1173 11B1;AE02;1100 1173 11B1; +AE03;AE03;1100 1173 11B2;AE03;1100 1173 11B2; +AE04;AE04;1100 1173 11B3;AE04;1100 1173 11B3; +AE05;AE05;1100 1173 11B4;AE05;1100 1173 11B4; +AE06;AE06;1100 1173 11B5;AE06;1100 1173 11B5; +AE07;AE07;1100 1173 11B6;AE07;1100 1173 11B6; +AE08;AE08;1100 1173 11B7;AE08;1100 1173 11B7; +AE09;AE09;1100 1173 11B8;AE09;1100 1173 11B8; +AE0A;AE0A;1100 1173 11B9;AE0A;1100 1173 11B9; +AE0B;AE0B;1100 1173 11BA;AE0B;1100 1173 11BA; +AE0C;AE0C;1100 1173 11BB;AE0C;1100 1173 11BB; +AE0D;AE0D;1100 1173 11BC;AE0D;1100 1173 11BC; +AE0E;AE0E;1100 1173 11BD;AE0E;1100 1173 11BD; +AE0F;AE0F;1100 1173 11BE;AE0F;1100 1173 11BE; +AE10;AE10;1100 1173 11BF;AE10;1100 1173 11BF; +AE11;AE11;1100 1173 11C0;AE11;1100 1173 11C0; +AE12;AE12;1100 1173 11C1;AE12;1100 1173 11C1; +AE13;AE13;1100 1173 11C2;AE13;1100 1173 11C2; +AE14;AE14;1100 1174;AE14;1100 1174; +AE15;AE15;1100 1174 11A8;AE15;1100 1174 11A8; +AE16;AE16;1100 1174 11A9;AE16;1100 1174 11A9; +AE17;AE17;1100 1174 11AA;AE17;1100 1174 11AA; +AE18;AE18;1100 1174 11AB;AE18;1100 1174 11AB; +AE19;AE19;1100 1174 11AC;AE19;1100 1174 11AC; +AE1A;AE1A;1100 1174 11AD;AE1A;1100 1174 11AD; +AE1B;AE1B;1100 1174 11AE;AE1B;1100 1174 11AE; +AE1C;AE1C;1100 1174 11AF;AE1C;1100 1174 11AF; +AE1D;AE1D;1100 1174 11B0;AE1D;1100 1174 11B0; +AE1E;AE1E;1100 1174 11B1;AE1E;1100 1174 11B1; +AE1F;AE1F;1100 1174 11B2;AE1F;1100 1174 11B2; +AE20;AE20;1100 1174 11B3;AE20;1100 1174 11B3; +AE21;AE21;1100 1174 11B4;AE21;1100 1174 11B4; +AE22;AE22;1100 1174 11B5;AE22;1100 1174 11B5; +AE23;AE23;1100 1174 11B6;AE23;1100 1174 11B6; +AE24;AE24;1100 1174 11B7;AE24;1100 1174 11B7; +AE25;AE25;1100 1174 11B8;AE25;1100 1174 11B8; +AE26;AE26;1100 1174 11B9;AE26;1100 1174 11B9; +AE27;AE27;1100 1174 11BA;AE27;1100 1174 11BA; +AE28;AE28;1100 1174 11BB;AE28;1100 1174 11BB; +AE29;AE29;1100 1174 11BC;AE29;1100 1174 11BC; +AE2A;AE2A;1100 1174 11BD;AE2A;1100 1174 11BD; +AE2B;AE2B;1100 1174 11BE;AE2B;1100 1174 11BE; +AE2C;AE2C;1100 1174 11BF;AE2C;1100 1174 11BF; +AE2D;AE2D;1100 1174 11C0;AE2D;1100 1174 11C0; +AE2E;AE2E;1100 1174 11C1;AE2E;1100 1174 11C1; +AE2F;AE2F;1100 1174 11C2;AE2F;1100 1174 11C2; +AE30;AE30;1100 1175;AE30;1100 1175; +AE31;AE31;1100 1175 11A8;AE31;1100 1175 11A8; +AE32;AE32;1100 1175 11A9;AE32;1100 1175 11A9; +AE33;AE33;1100 1175 11AA;AE33;1100 1175 11AA; +AE34;AE34;1100 1175 11AB;AE34;1100 1175 11AB; +AE35;AE35;1100 1175 11AC;AE35;1100 1175 11AC; +AE36;AE36;1100 1175 11AD;AE36;1100 1175 11AD; +AE37;AE37;1100 1175 11AE;AE37;1100 1175 11AE; +AE38;AE38;1100 1175 11AF;AE38;1100 1175 11AF; +AE39;AE39;1100 1175 11B0;AE39;1100 1175 11B0; +AE3A;AE3A;1100 1175 11B1;AE3A;1100 1175 11B1; +AE3B;AE3B;1100 1175 11B2;AE3B;1100 1175 11B2; +AE3C;AE3C;1100 1175 11B3;AE3C;1100 1175 11B3; +AE3D;AE3D;1100 1175 11B4;AE3D;1100 1175 11B4; +AE3E;AE3E;1100 1175 11B5;AE3E;1100 1175 11B5; +AE3F;AE3F;1100 1175 11B6;AE3F;1100 1175 11B6; +AE40;AE40;1100 1175 11B7;AE40;1100 1175 11B7; +AE41;AE41;1100 1175 11B8;AE41;1100 1175 11B8; +AE42;AE42;1100 1175 11B9;AE42;1100 1175 11B9; +AE43;AE43;1100 1175 11BA;AE43;1100 1175 11BA; +AE44;AE44;1100 1175 11BB;AE44;1100 1175 11BB; +AE45;AE45;1100 1175 11BC;AE45;1100 1175 11BC; +AE46;AE46;1100 1175 11BD;AE46;1100 1175 11BD; +AE47;AE47;1100 1175 11BE;AE47;1100 1175 11BE; +AE48;AE48;1100 1175 11BF;AE48;1100 1175 11BF; +AE49;AE49;1100 1175 11C0;AE49;1100 1175 11C0; +AE4A;AE4A;1100 1175 11C1;AE4A;1100 1175 11C1; +AE4B;AE4B;1100 1175 11C2;AE4B;1100 1175 11C2; +AE4C;AE4C;1101 1161;AE4C;1101 1161; +AE4D;AE4D;1101 1161 11A8;AE4D;1101 1161 11A8; +AE4E;AE4E;1101 1161 11A9;AE4E;1101 1161 11A9; +AE4F;AE4F;1101 1161 11AA;AE4F;1101 1161 11AA; +AE50;AE50;1101 1161 11AB;AE50;1101 1161 11AB; +AE51;AE51;1101 1161 11AC;AE51;1101 1161 11AC; +AE52;AE52;1101 1161 11AD;AE52;1101 1161 11AD; +AE53;AE53;1101 1161 11AE;AE53;1101 1161 11AE; +AE54;AE54;1101 1161 11AF;AE54;1101 1161 11AF; +AE55;AE55;1101 1161 11B0;AE55;1101 1161 11B0; +AE56;AE56;1101 1161 11B1;AE56;1101 1161 11B1; +AE57;AE57;1101 1161 11B2;AE57;1101 1161 11B2; +AE58;AE58;1101 1161 11B3;AE58;1101 1161 11B3; +AE59;AE59;1101 1161 11B4;AE59;1101 1161 11B4; +AE5A;AE5A;1101 1161 11B5;AE5A;1101 1161 11B5; +AE5B;AE5B;1101 1161 11B6;AE5B;1101 1161 11B6; +AE5C;AE5C;1101 1161 11B7;AE5C;1101 1161 11B7; +AE5D;AE5D;1101 1161 11B8;AE5D;1101 1161 11B8; +AE5E;AE5E;1101 1161 11B9;AE5E;1101 1161 11B9; +AE5F;AE5F;1101 1161 11BA;AE5F;1101 1161 11BA; +AE60;AE60;1101 1161 11BB;AE60;1101 1161 11BB; +AE61;AE61;1101 1161 11BC;AE61;1101 1161 11BC; +AE62;AE62;1101 1161 11BD;AE62;1101 1161 11BD; +AE63;AE63;1101 1161 11BE;AE63;1101 1161 11BE; +AE64;AE64;1101 1161 11BF;AE64;1101 1161 11BF; +AE65;AE65;1101 1161 11C0;AE65;1101 1161 11C0; +AE66;AE66;1101 1161 11C1;AE66;1101 1161 11C1; +AE67;AE67;1101 1161 11C2;AE67;1101 1161 11C2; +AE68;AE68;1101 1162;AE68;1101 1162; +AE69;AE69;1101 1162 11A8;AE69;1101 1162 11A8; +AE6A;AE6A;1101 1162 11A9;AE6A;1101 1162 11A9; +AE6B;AE6B;1101 1162 11AA;AE6B;1101 1162 11AA; +AE6C;AE6C;1101 1162 11AB;AE6C;1101 1162 11AB; +AE6D;AE6D;1101 1162 11AC;AE6D;1101 1162 11AC; +AE6E;AE6E;1101 1162 11AD;AE6E;1101 1162 11AD; +AE6F;AE6F;1101 1162 11AE;AE6F;1101 1162 11AE; +AE70;AE70;1101 1162 11AF;AE70;1101 1162 11AF; +AE71;AE71;1101 1162 11B0;AE71;1101 1162 11B0; +AE72;AE72;1101 1162 11B1;AE72;1101 1162 11B1; +AE73;AE73;1101 1162 11B2;AE73;1101 1162 11B2; +AE74;AE74;1101 1162 11B3;AE74;1101 1162 11B3; +AE75;AE75;1101 1162 11B4;AE75;1101 1162 11B4; +AE76;AE76;1101 1162 11B5;AE76;1101 1162 11B5; +AE77;AE77;1101 1162 11B6;AE77;1101 1162 11B6; +AE78;AE78;1101 1162 11B7;AE78;1101 1162 11B7; +AE79;AE79;1101 1162 11B8;AE79;1101 1162 11B8; +AE7A;AE7A;1101 1162 11B9;AE7A;1101 1162 11B9; +AE7B;AE7B;1101 1162 11BA;AE7B;1101 1162 11BA; +AE7C;AE7C;1101 1162 11BB;AE7C;1101 1162 11BB; +AE7D;AE7D;1101 1162 11BC;AE7D;1101 1162 11BC; +AE7E;AE7E;1101 1162 11BD;AE7E;1101 1162 11BD; +AE7F;AE7F;1101 1162 11BE;AE7F;1101 1162 11BE; +AE80;AE80;1101 1162 11BF;AE80;1101 1162 11BF; +AE81;AE81;1101 1162 11C0;AE81;1101 1162 11C0; +AE82;AE82;1101 1162 11C1;AE82;1101 1162 11C1; +AE83;AE83;1101 1162 11C2;AE83;1101 1162 11C2; +AE84;AE84;1101 1163;AE84;1101 1163; +AE85;AE85;1101 1163 11A8;AE85;1101 1163 11A8; +AE86;AE86;1101 1163 11A9;AE86;1101 1163 11A9; +AE87;AE87;1101 1163 11AA;AE87;1101 1163 11AA; +AE88;AE88;1101 1163 11AB;AE88;1101 1163 11AB; +AE89;AE89;1101 1163 11AC;AE89;1101 1163 11AC; +AE8A;AE8A;1101 1163 11AD;AE8A;1101 1163 11AD; +AE8B;AE8B;1101 1163 11AE;AE8B;1101 1163 11AE; +AE8C;AE8C;1101 1163 11AF;AE8C;1101 1163 11AF; +AE8D;AE8D;1101 1163 11B0;AE8D;1101 1163 11B0; +AE8E;AE8E;1101 1163 11B1;AE8E;1101 1163 11B1; +AE8F;AE8F;1101 1163 11B2;AE8F;1101 1163 11B2; +AE90;AE90;1101 1163 11B3;AE90;1101 1163 11B3; +AE91;AE91;1101 1163 11B4;AE91;1101 1163 11B4; +AE92;AE92;1101 1163 11B5;AE92;1101 1163 11B5; +AE93;AE93;1101 1163 11B6;AE93;1101 1163 11B6; +AE94;AE94;1101 1163 11B7;AE94;1101 1163 11B7; +AE95;AE95;1101 1163 11B8;AE95;1101 1163 11B8; +AE96;AE96;1101 1163 11B9;AE96;1101 1163 11B9; +AE97;AE97;1101 1163 11BA;AE97;1101 1163 11BA; +AE98;AE98;1101 1163 11BB;AE98;1101 1163 11BB; +AE99;AE99;1101 1163 11BC;AE99;1101 1163 11BC; +AE9A;AE9A;1101 1163 11BD;AE9A;1101 1163 11BD; +AE9B;AE9B;1101 1163 11BE;AE9B;1101 1163 11BE; +AE9C;AE9C;1101 1163 11BF;AE9C;1101 1163 11BF; +AE9D;AE9D;1101 1163 11C0;AE9D;1101 1163 11C0; +AE9E;AE9E;1101 1163 11C1;AE9E;1101 1163 11C1; +AE9F;AE9F;1101 1163 11C2;AE9F;1101 1163 11C2; +AEA0;AEA0;1101 1164;AEA0;1101 1164; +AEA1;AEA1;1101 1164 11A8;AEA1;1101 1164 11A8; +AEA2;AEA2;1101 1164 11A9;AEA2;1101 1164 11A9; +AEA3;AEA3;1101 1164 11AA;AEA3;1101 1164 11AA; +AEA4;AEA4;1101 1164 11AB;AEA4;1101 1164 11AB; +AEA5;AEA5;1101 1164 11AC;AEA5;1101 1164 11AC; +AEA6;AEA6;1101 1164 11AD;AEA6;1101 1164 11AD; +AEA7;AEA7;1101 1164 11AE;AEA7;1101 1164 11AE; +AEA8;AEA8;1101 1164 11AF;AEA8;1101 1164 11AF; +AEA9;AEA9;1101 1164 11B0;AEA9;1101 1164 11B0; +AEAA;AEAA;1101 1164 11B1;AEAA;1101 1164 11B1; +AEAB;AEAB;1101 1164 11B2;AEAB;1101 1164 11B2; +AEAC;AEAC;1101 1164 11B3;AEAC;1101 1164 11B3; +AEAD;AEAD;1101 1164 11B4;AEAD;1101 1164 11B4; +AEAE;AEAE;1101 1164 11B5;AEAE;1101 1164 11B5; +AEAF;AEAF;1101 1164 11B6;AEAF;1101 1164 11B6; +AEB0;AEB0;1101 1164 11B7;AEB0;1101 1164 11B7; +AEB1;AEB1;1101 1164 11B8;AEB1;1101 1164 11B8; +AEB2;AEB2;1101 1164 11B9;AEB2;1101 1164 11B9; +AEB3;AEB3;1101 1164 11BA;AEB3;1101 1164 11BA; +AEB4;AEB4;1101 1164 11BB;AEB4;1101 1164 11BB; +AEB5;AEB5;1101 1164 11BC;AEB5;1101 1164 11BC; +AEB6;AEB6;1101 1164 11BD;AEB6;1101 1164 11BD; +AEB7;AEB7;1101 1164 11BE;AEB7;1101 1164 11BE; +AEB8;AEB8;1101 1164 11BF;AEB8;1101 1164 11BF; +AEB9;AEB9;1101 1164 11C0;AEB9;1101 1164 11C0; +AEBA;AEBA;1101 1164 11C1;AEBA;1101 1164 11C1; +AEBB;AEBB;1101 1164 11C2;AEBB;1101 1164 11C2; +AEBC;AEBC;1101 1165;AEBC;1101 1165; +AEBD;AEBD;1101 1165 11A8;AEBD;1101 1165 11A8; +AEBE;AEBE;1101 1165 11A9;AEBE;1101 1165 11A9; +AEBF;AEBF;1101 1165 11AA;AEBF;1101 1165 11AA; +AEC0;AEC0;1101 1165 11AB;AEC0;1101 1165 11AB; +AEC1;AEC1;1101 1165 11AC;AEC1;1101 1165 11AC; +AEC2;AEC2;1101 1165 11AD;AEC2;1101 1165 11AD; +AEC3;AEC3;1101 1165 11AE;AEC3;1101 1165 11AE; +AEC4;AEC4;1101 1165 11AF;AEC4;1101 1165 11AF; +AEC5;AEC5;1101 1165 11B0;AEC5;1101 1165 11B0; +AEC6;AEC6;1101 1165 11B1;AEC6;1101 1165 11B1; +AEC7;AEC7;1101 1165 11B2;AEC7;1101 1165 11B2; +AEC8;AEC8;1101 1165 11B3;AEC8;1101 1165 11B3; +AEC9;AEC9;1101 1165 11B4;AEC9;1101 1165 11B4; +AECA;AECA;1101 1165 11B5;AECA;1101 1165 11B5; +AECB;AECB;1101 1165 11B6;AECB;1101 1165 11B6; +AECC;AECC;1101 1165 11B7;AECC;1101 1165 11B7; +AECD;AECD;1101 1165 11B8;AECD;1101 1165 11B8; +AECE;AECE;1101 1165 11B9;AECE;1101 1165 11B9; +AECF;AECF;1101 1165 11BA;AECF;1101 1165 11BA; +AED0;AED0;1101 1165 11BB;AED0;1101 1165 11BB; +AED1;AED1;1101 1165 11BC;AED1;1101 1165 11BC; +AED2;AED2;1101 1165 11BD;AED2;1101 1165 11BD; +AED3;AED3;1101 1165 11BE;AED3;1101 1165 11BE; +AED4;AED4;1101 1165 11BF;AED4;1101 1165 11BF; +AED5;AED5;1101 1165 11C0;AED5;1101 1165 11C0; +AED6;AED6;1101 1165 11C1;AED6;1101 1165 11C1; +AED7;AED7;1101 1165 11C2;AED7;1101 1165 11C2; +AED8;AED8;1101 1166;AED8;1101 1166; +AED9;AED9;1101 1166 11A8;AED9;1101 1166 11A8; +AEDA;AEDA;1101 1166 11A9;AEDA;1101 1166 11A9; +AEDB;AEDB;1101 1166 11AA;AEDB;1101 1166 11AA; +AEDC;AEDC;1101 1166 11AB;AEDC;1101 1166 11AB; +AEDD;AEDD;1101 1166 11AC;AEDD;1101 1166 11AC; +AEDE;AEDE;1101 1166 11AD;AEDE;1101 1166 11AD; +AEDF;AEDF;1101 1166 11AE;AEDF;1101 1166 11AE; +AEE0;AEE0;1101 1166 11AF;AEE0;1101 1166 11AF; +AEE1;AEE1;1101 1166 11B0;AEE1;1101 1166 11B0; +AEE2;AEE2;1101 1166 11B1;AEE2;1101 1166 11B1; +AEE3;AEE3;1101 1166 11B2;AEE3;1101 1166 11B2; +AEE4;AEE4;1101 1166 11B3;AEE4;1101 1166 11B3; +AEE5;AEE5;1101 1166 11B4;AEE5;1101 1166 11B4; +AEE6;AEE6;1101 1166 11B5;AEE6;1101 1166 11B5; +AEE7;AEE7;1101 1166 11B6;AEE7;1101 1166 11B6; +AEE8;AEE8;1101 1166 11B7;AEE8;1101 1166 11B7; +AEE9;AEE9;1101 1166 11B8;AEE9;1101 1166 11B8; +AEEA;AEEA;1101 1166 11B9;AEEA;1101 1166 11B9; +AEEB;AEEB;1101 1166 11BA;AEEB;1101 1166 11BA; +AEEC;AEEC;1101 1166 11BB;AEEC;1101 1166 11BB; +AEED;AEED;1101 1166 11BC;AEED;1101 1166 11BC; +AEEE;AEEE;1101 1166 11BD;AEEE;1101 1166 11BD; +AEEF;AEEF;1101 1166 11BE;AEEF;1101 1166 11BE; +AEF0;AEF0;1101 1166 11BF;AEF0;1101 1166 11BF; +AEF1;AEF1;1101 1166 11C0;AEF1;1101 1166 11C0; +AEF2;AEF2;1101 1166 11C1;AEF2;1101 1166 11C1; +AEF3;AEF3;1101 1166 11C2;AEF3;1101 1166 11C2; +AEF4;AEF4;1101 1167;AEF4;1101 1167; +AEF5;AEF5;1101 1167 11A8;AEF5;1101 1167 11A8; +AEF6;AEF6;1101 1167 11A9;AEF6;1101 1167 11A9; +AEF7;AEF7;1101 1167 11AA;AEF7;1101 1167 11AA; +AEF8;AEF8;1101 1167 11AB;AEF8;1101 1167 11AB; +AEF9;AEF9;1101 1167 11AC;AEF9;1101 1167 11AC; +AEFA;AEFA;1101 1167 11AD;AEFA;1101 1167 11AD; +AEFB;AEFB;1101 1167 11AE;AEFB;1101 1167 11AE; +AEFC;AEFC;1101 1167 11AF;AEFC;1101 1167 11AF; +AEFD;AEFD;1101 1167 11B0;AEFD;1101 1167 11B0; +AEFE;AEFE;1101 1167 11B1;AEFE;1101 1167 11B1; +AEFF;AEFF;1101 1167 11B2;AEFF;1101 1167 11B2; +AF00;AF00;1101 1167 11B3;AF00;1101 1167 11B3; +AF01;AF01;1101 1167 11B4;AF01;1101 1167 11B4; +AF02;AF02;1101 1167 11B5;AF02;1101 1167 11B5; +AF03;AF03;1101 1167 11B6;AF03;1101 1167 11B6; +AF04;AF04;1101 1167 11B7;AF04;1101 1167 11B7; +AF05;AF05;1101 1167 11B8;AF05;1101 1167 11B8; +AF06;AF06;1101 1167 11B9;AF06;1101 1167 11B9; +AF07;AF07;1101 1167 11BA;AF07;1101 1167 11BA; +AF08;AF08;1101 1167 11BB;AF08;1101 1167 11BB; +AF09;AF09;1101 1167 11BC;AF09;1101 1167 11BC; +AF0A;AF0A;1101 1167 11BD;AF0A;1101 1167 11BD; +AF0B;AF0B;1101 1167 11BE;AF0B;1101 1167 11BE; +AF0C;AF0C;1101 1167 11BF;AF0C;1101 1167 11BF; +AF0D;AF0D;1101 1167 11C0;AF0D;1101 1167 11C0; +AF0E;AF0E;1101 1167 11C1;AF0E;1101 1167 11C1; +AF0F;AF0F;1101 1167 11C2;AF0F;1101 1167 11C2; +AF10;AF10;1101 1168;AF10;1101 1168; +AF11;AF11;1101 1168 11A8;AF11;1101 1168 11A8; +AF12;AF12;1101 1168 11A9;AF12;1101 1168 11A9; +AF13;AF13;1101 1168 11AA;AF13;1101 1168 11AA; +AF14;AF14;1101 1168 11AB;AF14;1101 1168 11AB; +AF15;AF15;1101 1168 11AC;AF15;1101 1168 11AC; +AF16;AF16;1101 1168 11AD;AF16;1101 1168 11AD; +AF17;AF17;1101 1168 11AE;AF17;1101 1168 11AE; +AF18;AF18;1101 1168 11AF;AF18;1101 1168 11AF; +AF19;AF19;1101 1168 11B0;AF19;1101 1168 11B0; +AF1A;AF1A;1101 1168 11B1;AF1A;1101 1168 11B1; +AF1B;AF1B;1101 1168 11B2;AF1B;1101 1168 11B2; +AF1C;AF1C;1101 1168 11B3;AF1C;1101 1168 11B3; +AF1D;AF1D;1101 1168 11B4;AF1D;1101 1168 11B4; +AF1E;AF1E;1101 1168 11B5;AF1E;1101 1168 11B5; +AF1F;AF1F;1101 1168 11B6;AF1F;1101 1168 11B6; +AF20;AF20;1101 1168 11B7;AF20;1101 1168 11B7; +AF21;AF21;1101 1168 11B8;AF21;1101 1168 11B8; +AF22;AF22;1101 1168 11B9;AF22;1101 1168 11B9; +AF23;AF23;1101 1168 11BA;AF23;1101 1168 11BA; +AF24;AF24;1101 1168 11BB;AF24;1101 1168 11BB; +AF25;AF25;1101 1168 11BC;AF25;1101 1168 11BC; +AF26;AF26;1101 1168 11BD;AF26;1101 1168 11BD; +AF27;AF27;1101 1168 11BE;AF27;1101 1168 11BE; +AF28;AF28;1101 1168 11BF;AF28;1101 1168 11BF; +AF29;AF29;1101 1168 11C0;AF29;1101 1168 11C0; +AF2A;AF2A;1101 1168 11C1;AF2A;1101 1168 11C1; +AF2B;AF2B;1101 1168 11C2;AF2B;1101 1168 11C2; +AF2C;AF2C;1101 1169;AF2C;1101 1169; +AF2D;AF2D;1101 1169 11A8;AF2D;1101 1169 11A8; +AF2E;AF2E;1101 1169 11A9;AF2E;1101 1169 11A9; +AF2F;AF2F;1101 1169 11AA;AF2F;1101 1169 11AA; +AF30;AF30;1101 1169 11AB;AF30;1101 1169 11AB; +AF31;AF31;1101 1169 11AC;AF31;1101 1169 11AC; +AF32;AF32;1101 1169 11AD;AF32;1101 1169 11AD; +AF33;AF33;1101 1169 11AE;AF33;1101 1169 11AE; +AF34;AF34;1101 1169 11AF;AF34;1101 1169 11AF; +AF35;AF35;1101 1169 11B0;AF35;1101 1169 11B0; +AF36;AF36;1101 1169 11B1;AF36;1101 1169 11B1; +AF37;AF37;1101 1169 11B2;AF37;1101 1169 11B2; +AF38;AF38;1101 1169 11B3;AF38;1101 1169 11B3; +AF39;AF39;1101 1169 11B4;AF39;1101 1169 11B4; +AF3A;AF3A;1101 1169 11B5;AF3A;1101 1169 11B5; +AF3B;AF3B;1101 1169 11B6;AF3B;1101 1169 11B6; +AF3C;AF3C;1101 1169 11B7;AF3C;1101 1169 11B7; +AF3D;AF3D;1101 1169 11B8;AF3D;1101 1169 11B8; +AF3E;AF3E;1101 1169 11B9;AF3E;1101 1169 11B9; +AF3F;AF3F;1101 1169 11BA;AF3F;1101 1169 11BA; +AF40;AF40;1101 1169 11BB;AF40;1101 1169 11BB; +AF41;AF41;1101 1169 11BC;AF41;1101 1169 11BC; +AF42;AF42;1101 1169 11BD;AF42;1101 1169 11BD; +AF43;AF43;1101 1169 11BE;AF43;1101 1169 11BE; +AF44;AF44;1101 1169 11BF;AF44;1101 1169 11BF; +AF45;AF45;1101 1169 11C0;AF45;1101 1169 11C0; +AF46;AF46;1101 1169 11C1;AF46;1101 1169 11C1; +AF47;AF47;1101 1169 11C2;AF47;1101 1169 11C2; +AF48;AF48;1101 116A;AF48;1101 116A; +AF49;AF49;1101 116A 11A8;AF49;1101 116A 11A8; +AF4A;AF4A;1101 116A 11A9;AF4A;1101 116A 11A9; +AF4B;AF4B;1101 116A 11AA;AF4B;1101 116A 11AA; +AF4C;AF4C;1101 116A 11AB;AF4C;1101 116A 11AB; +AF4D;AF4D;1101 116A 11AC;AF4D;1101 116A 11AC; +AF4E;AF4E;1101 116A 11AD;AF4E;1101 116A 11AD; +AF4F;AF4F;1101 116A 11AE;AF4F;1101 116A 11AE; +AF50;AF50;1101 116A 11AF;AF50;1101 116A 11AF; +AF51;AF51;1101 116A 11B0;AF51;1101 116A 11B0; +AF52;AF52;1101 116A 11B1;AF52;1101 116A 11B1; +AF53;AF53;1101 116A 11B2;AF53;1101 116A 11B2; +AF54;AF54;1101 116A 11B3;AF54;1101 116A 11B3; +AF55;AF55;1101 116A 11B4;AF55;1101 116A 11B4; +AF56;AF56;1101 116A 11B5;AF56;1101 116A 11B5; +AF57;AF57;1101 116A 11B6;AF57;1101 116A 11B6; +AF58;AF58;1101 116A 11B7;AF58;1101 116A 11B7; +AF59;AF59;1101 116A 11B8;AF59;1101 116A 11B8; +AF5A;AF5A;1101 116A 11B9;AF5A;1101 116A 11B9; +AF5B;AF5B;1101 116A 11BA;AF5B;1101 116A 11BA; +AF5C;AF5C;1101 116A 11BB;AF5C;1101 116A 11BB; +AF5D;AF5D;1101 116A 11BC;AF5D;1101 116A 11BC; +AF5E;AF5E;1101 116A 11BD;AF5E;1101 116A 11BD; +AF5F;AF5F;1101 116A 11BE;AF5F;1101 116A 11BE; +AF60;AF60;1101 116A 11BF;AF60;1101 116A 11BF; +AF61;AF61;1101 116A 11C0;AF61;1101 116A 11C0; +AF62;AF62;1101 116A 11C1;AF62;1101 116A 11C1; +AF63;AF63;1101 116A 11C2;AF63;1101 116A 11C2; +AF64;AF64;1101 116B;AF64;1101 116B; +AF65;AF65;1101 116B 11A8;AF65;1101 116B 11A8; +AF66;AF66;1101 116B 11A9;AF66;1101 116B 11A9; +AF67;AF67;1101 116B 11AA;AF67;1101 116B 11AA; +AF68;AF68;1101 116B 11AB;AF68;1101 116B 11AB; +AF69;AF69;1101 116B 11AC;AF69;1101 116B 11AC; +AF6A;AF6A;1101 116B 11AD;AF6A;1101 116B 11AD; +AF6B;AF6B;1101 116B 11AE;AF6B;1101 116B 11AE; +AF6C;AF6C;1101 116B 11AF;AF6C;1101 116B 11AF; +AF6D;AF6D;1101 116B 11B0;AF6D;1101 116B 11B0; +AF6E;AF6E;1101 116B 11B1;AF6E;1101 116B 11B1; +AF6F;AF6F;1101 116B 11B2;AF6F;1101 116B 11B2; +AF70;AF70;1101 116B 11B3;AF70;1101 116B 11B3; +AF71;AF71;1101 116B 11B4;AF71;1101 116B 11B4; +AF72;AF72;1101 116B 11B5;AF72;1101 116B 11B5; +AF73;AF73;1101 116B 11B6;AF73;1101 116B 11B6; +AF74;AF74;1101 116B 11B7;AF74;1101 116B 11B7; +AF75;AF75;1101 116B 11B8;AF75;1101 116B 11B8; +AF76;AF76;1101 116B 11B9;AF76;1101 116B 11B9; +AF77;AF77;1101 116B 11BA;AF77;1101 116B 11BA; +AF78;AF78;1101 116B 11BB;AF78;1101 116B 11BB; +AF79;AF79;1101 116B 11BC;AF79;1101 116B 11BC; +AF7A;AF7A;1101 116B 11BD;AF7A;1101 116B 11BD; +AF7B;AF7B;1101 116B 11BE;AF7B;1101 116B 11BE; +AF7C;AF7C;1101 116B 11BF;AF7C;1101 116B 11BF; +AF7D;AF7D;1101 116B 11C0;AF7D;1101 116B 11C0; +AF7E;AF7E;1101 116B 11C1;AF7E;1101 116B 11C1; +AF7F;AF7F;1101 116B 11C2;AF7F;1101 116B 11C2; +AF80;AF80;1101 116C;AF80;1101 116C; +AF81;AF81;1101 116C 11A8;AF81;1101 116C 11A8; +AF82;AF82;1101 116C 11A9;AF82;1101 116C 11A9; +AF83;AF83;1101 116C 11AA;AF83;1101 116C 11AA; +AF84;AF84;1101 116C 11AB;AF84;1101 116C 11AB; +AF85;AF85;1101 116C 11AC;AF85;1101 116C 11AC; +AF86;AF86;1101 116C 11AD;AF86;1101 116C 11AD; +AF87;AF87;1101 116C 11AE;AF87;1101 116C 11AE; +AF88;AF88;1101 116C 11AF;AF88;1101 116C 11AF; +AF89;AF89;1101 116C 11B0;AF89;1101 116C 11B0; +AF8A;AF8A;1101 116C 11B1;AF8A;1101 116C 11B1; +AF8B;AF8B;1101 116C 11B2;AF8B;1101 116C 11B2; +AF8C;AF8C;1101 116C 11B3;AF8C;1101 116C 11B3; +AF8D;AF8D;1101 116C 11B4;AF8D;1101 116C 11B4; +AF8E;AF8E;1101 116C 11B5;AF8E;1101 116C 11B5; +AF8F;AF8F;1101 116C 11B6;AF8F;1101 116C 11B6; +AF90;AF90;1101 116C 11B7;AF90;1101 116C 11B7; +AF91;AF91;1101 116C 11B8;AF91;1101 116C 11B8; +AF92;AF92;1101 116C 11B9;AF92;1101 116C 11B9; +AF93;AF93;1101 116C 11BA;AF93;1101 116C 11BA; +AF94;AF94;1101 116C 11BB;AF94;1101 116C 11BB; +AF95;AF95;1101 116C 11BC;AF95;1101 116C 11BC; +AF96;AF96;1101 116C 11BD;AF96;1101 116C 11BD; +AF97;AF97;1101 116C 11BE;AF97;1101 116C 11BE; +AF98;AF98;1101 116C 11BF;AF98;1101 116C 11BF; +AF99;AF99;1101 116C 11C0;AF99;1101 116C 11C0; +AF9A;AF9A;1101 116C 11C1;AF9A;1101 116C 11C1; +AF9B;AF9B;1101 116C 11C2;AF9B;1101 116C 11C2; +AF9C;AF9C;1101 116D;AF9C;1101 116D; +AF9D;AF9D;1101 116D 11A8;AF9D;1101 116D 11A8; +AF9E;AF9E;1101 116D 11A9;AF9E;1101 116D 11A9; +AF9F;AF9F;1101 116D 11AA;AF9F;1101 116D 11AA; +AFA0;AFA0;1101 116D 11AB;AFA0;1101 116D 11AB; +AFA1;AFA1;1101 116D 11AC;AFA1;1101 116D 11AC; +AFA2;AFA2;1101 116D 11AD;AFA2;1101 116D 11AD; +AFA3;AFA3;1101 116D 11AE;AFA3;1101 116D 11AE; +AFA4;AFA4;1101 116D 11AF;AFA4;1101 116D 11AF; +AFA5;AFA5;1101 116D 11B0;AFA5;1101 116D 11B0; +AFA6;AFA6;1101 116D 11B1;AFA6;1101 116D 11B1; +AFA7;AFA7;1101 116D 11B2;AFA7;1101 116D 11B2; +AFA8;AFA8;1101 116D 11B3;AFA8;1101 116D 11B3; +AFA9;AFA9;1101 116D 11B4;AFA9;1101 116D 11B4; +AFAA;AFAA;1101 116D 11B5;AFAA;1101 116D 11B5; +AFAB;AFAB;1101 116D 11B6;AFAB;1101 116D 11B6; +AFAC;AFAC;1101 116D 11B7;AFAC;1101 116D 11B7; +AFAD;AFAD;1101 116D 11B8;AFAD;1101 116D 11B8; +AFAE;AFAE;1101 116D 11B9;AFAE;1101 116D 11B9; +AFAF;AFAF;1101 116D 11BA;AFAF;1101 116D 11BA; +AFB0;AFB0;1101 116D 11BB;AFB0;1101 116D 11BB; +AFB1;AFB1;1101 116D 11BC;AFB1;1101 116D 11BC; +AFB2;AFB2;1101 116D 11BD;AFB2;1101 116D 11BD; +AFB3;AFB3;1101 116D 11BE;AFB3;1101 116D 11BE; +AFB4;AFB4;1101 116D 11BF;AFB4;1101 116D 11BF; +AFB5;AFB5;1101 116D 11C0;AFB5;1101 116D 11C0; +AFB6;AFB6;1101 116D 11C1;AFB6;1101 116D 11C1; +AFB7;AFB7;1101 116D 11C2;AFB7;1101 116D 11C2; +AFB8;AFB8;1101 116E;AFB8;1101 116E; +AFB9;AFB9;1101 116E 11A8;AFB9;1101 116E 11A8; +AFBA;AFBA;1101 116E 11A9;AFBA;1101 116E 11A9; +AFBB;AFBB;1101 116E 11AA;AFBB;1101 116E 11AA; +AFBC;AFBC;1101 116E 11AB;AFBC;1101 116E 11AB; +AFBD;AFBD;1101 116E 11AC;AFBD;1101 116E 11AC; +AFBE;AFBE;1101 116E 11AD;AFBE;1101 116E 11AD; +AFBF;AFBF;1101 116E 11AE;AFBF;1101 116E 11AE; +AFC0;AFC0;1101 116E 11AF;AFC0;1101 116E 11AF; +AFC1;AFC1;1101 116E 11B0;AFC1;1101 116E 11B0; +AFC2;AFC2;1101 116E 11B1;AFC2;1101 116E 11B1; +AFC3;AFC3;1101 116E 11B2;AFC3;1101 116E 11B2; +AFC4;AFC4;1101 116E 11B3;AFC4;1101 116E 11B3; +AFC5;AFC5;1101 116E 11B4;AFC5;1101 116E 11B4; +AFC6;AFC6;1101 116E 11B5;AFC6;1101 116E 11B5; +AFC7;AFC7;1101 116E 11B6;AFC7;1101 116E 11B6; +AFC8;AFC8;1101 116E 11B7;AFC8;1101 116E 11B7; +AFC9;AFC9;1101 116E 11B8;AFC9;1101 116E 11B8; +AFCA;AFCA;1101 116E 11B9;AFCA;1101 116E 11B9; +AFCB;AFCB;1101 116E 11BA;AFCB;1101 116E 11BA; +AFCC;AFCC;1101 116E 11BB;AFCC;1101 116E 11BB; +AFCD;AFCD;1101 116E 11BC;AFCD;1101 116E 11BC; +AFCE;AFCE;1101 116E 11BD;AFCE;1101 116E 11BD; +AFCF;AFCF;1101 116E 11BE;AFCF;1101 116E 11BE; +AFD0;AFD0;1101 116E 11BF;AFD0;1101 116E 11BF; +AFD1;AFD1;1101 116E 11C0;AFD1;1101 116E 11C0; +AFD2;AFD2;1101 116E 11C1;AFD2;1101 116E 11C1; +AFD3;AFD3;1101 116E 11C2;AFD3;1101 116E 11C2; +AFD4;AFD4;1101 116F;AFD4;1101 116F; +AFD5;AFD5;1101 116F 11A8;AFD5;1101 116F 11A8; +AFD6;AFD6;1101 116F 11A9;AFD6;1101 116F 11A9; +AFD7;AFD7;1101 116F 11AA;AFD7;1101 116F 11AA; +AFD8;AFD8;1101 116F 11AB;AFD8;1101 116F 11AB; +AFD9;AFD9;1101 116F 11AC;AFD9;1101 116F 11AC; +AFDA;AFDA;1101 116F 11AD;AFDA;1101 116F 11AD; +AFDB;AFDB;1101 116F 11AE;AFDB;1101 116F 11AE; +AFDC;AFDC;1101 116F 11AF;AFDC;1101 116F 11AF; +AFDD;AFDD;1101 116F 11B0;AFDD;1101 116F 11B0; +AFDE;AFDE;1101 116F 11B1;AFDE;1101 116F 11B1; +AFDF;AFDF;1101 116F 11B2;AFDF;1101 116F 11B2; +AFE0;AFE0;1101 116F 11B3;AFE0;1101 116F 11B3; +AFE1;AFE1;1101 116F 11B4;AFE1;1101 116F 11B4; +AFE2;AFE2;1101 116F 11B5;AFE2;1101 116F 11B5; +AFE3;AFE3;1101 116F 11B6;AFE3;1101 116F 11B6; +AFE4;AFE4;1101 116F 11B7;AFE4;1101 116F 11B7; +AFE5;AFE5;1101 116F 11B8;AFE5;1101 116F 11B8; +AFE6;AFE6;1101 116F 11B9;AFE6;1101 116F 11B9; +AFE7;AFE7;1101 116F 11BA;AFE7;1101 116F 11BA; +AFE8;AFE8;1101 116F 11BB;AFE8;1101 116F 11BB; +AFE9;AFE9;1101 116F 11BC;AFE9;1101 116F 11BC; +AFEA;AFEA;1101 116F 11BD;AFEA;1101 116F 11BD; +AFEB;AFEB;1101 116F 11BE;AFEB;1101 116F 11BE; +AFEC;AFEC;1101 116F 11BF;AFEC;1101 116F 11BF; +AFED;AFED;1101 116F 11C0;AFED;1101 116F 11C0; +AFEE;AFEE;1101 116F 11C1;AFEE;1101 116F 11C1; +AFEF;AFEF;1101 116F 11C2;AFEF;1101 116F 11C2; +AFF0;AFF0;1101 1170;AFF0;1101 1170; +AFF1;AFF1;1101 1170 11A8;AFF1;1101 1170 11A8; +AFF2;AFF2;1101 1170 11A9;AFF2;1101 1170 11A9; +AFF3;AFF3;1101 1170 11AA;AFF3;1101 1170 11AA; +AFF4;AFF4;1101 1170 11AB;AFF4;1101 1170 11AB; +AFF5;AFF5;1101 1170 11AC;AFF5;1101 1170 11AC; +AFF6;AFF6;1101 1170 11AD;AFF6;1101 1170 11AD; +AFF7;AFF7;1101 1170 11AE;AFF7;1101 1170 11AE; +AFF8;AFF8;1101 1170 11AF;AFF8;1101 1170 11AF; +AFF9;AFF9;1101 1170 11B0;AFF9;1101 1170 11B0; +AFFA;AFFA;1101 1170 11B1;AFFA;1101 1170 11B1; +AFFB;AFFB;1101 1170 11B2;AFFB;1101 1170 11B2; +AFFC;AFFC;1101 1170 11B3;AFFC;1101 1170 11B3; +AFFD;AFFD;1101 1170 11B4;AFFD;1101 1170 11B4; +AFFE;AFFE;1101 1170 11B5;AFFE;1101 1170 11B5; +AFFF;AFFF;1101 1170 11B6;AFFF;1101 1170 11B6; +B000;B000;1101 1170 11B7;B000;1101 1170 11B7; +B001;B001;1101 1170 11B8;B001;1101 1170 11B8; +B002;B002;1101 1170 11B9;B002;1101 1170 11B9; +B003;B003;1101 1170 11BA;B003;1101 1170 11BA; +B004;B004;1101 1170 11BB;B004;1101 1170 11BB; +B005;B005;1101 1170 11BC;B005;1101 1170 11BC; +B006;B006;1101 1170 11BD;B006;1101 1170 11BD; +B007;B007;1101 1170 11BE;B007;1101 1170 11BE; +B008;B008;1101 1170 11BF;B008;1101 1170 11BF; +B009;B009;1101 1170 11C0;B009;1101 1170 11C0; +B00A;B00A;1101 1170 11C1;B00A;1101 1170 11C1; +B00B;B00B;1101 1170 11C2;B00B;1101 1170 11C2; +B00C;B00C;1101 1171;B00C;1101 1171; +B00D;B00D;1101 1171 11A8;B00D;1101 1171 11A8; +B00E;B00E;1101 1171 11A9;B00E;1101 1171 11A9; +B00F;B00F;1101 1171 11AA;B00F;1101 1171 11AA; +B010;B010;1101 1171 11AB;B010;1101 1171 11AB; +B011;B011;1101 1171 11AC;B011;1101 1171 11AC; +B012;B012;1101 1171 11AD;B012;1101 1171 11AD; +B013;B013;1101 1171 11AE;B013;1101 1171 11AE; +B014;B014;1101 1171 11AF;B014;1101 1171 11AF; +B015;B015;1101 1171 11B0;B015;1101 1171 11B0; +B016;B016;1101 1171 11B1;B016;1101 1171 11B1; +B017;B017;1101 1171 11B2;B017;1101 1171 11B2; +B018;B018;1101 1171 11B3;B018;1101 1171 11B3; +B019;B019;1101 1171 11B4;B019;1101 1171 11B4; +B01A;B01A;1101 1171 11B5;B01A;1101 1171 11B5; +B01B;B01B;1101 1171 11B6;B01B;1101 1171 11B6; +B01C;B01C;1101 1171 11B7;B01C;1101 1171 11B7; +B01D;B01D;1101 1171 11B8;B01D;1101 1171 11B8; +B01E;B01E;1101 1171 11B9;B01E;1101 1171 11B9; +B01F;B01F;1101 1171 11BA;B01F;1101 1171 11BA; +B020;B020;1101 1171 11BB;B020;1101 1171 11BB; +B021;B021;1101 1171 11BC;B021;1101 1171 11BC; +B022;B022;1101 1171 11BD;B022;1101 1171 11BD; +B023;B023;1101 1171 11BE;B023;1101 1171 11BE; +B024;B024;1101 1171 11BF;B024;1101 1171 11BF; +B025;B025;1101 1171 11C0;B025;1101 1171 11C0; +B026;B026;1101 1171 11C1;B026;1101 1171 11C1; +B027;B027;1101 1171 11C2;B027;1101 1171 11C2; +B028;B028;1101 1172;B028;1101 1172; +B029;B029;1101 1172 11A8;B029;1101 1172 11A8; +B02A;B02A;1101 1172 11A9;B02A;1101 1172 11A9; +B02B;B02B;1101 1172 11AA;B02B;1101 1172 11AA; +B02C;B02C;1101 1172 11AB;B02C;1101 1172 11AB; +B02D;B02D;1101 1172 11AC;B02D;1101 1172 11AC; +B02E;B02E;1101 1172 11AD;B02E;1101 1172 11AD; +B02F;B02F;1101 1172 11AE;B02F;1101 1172 11AE; +B030;B030;1101 1172 11AF;B030;1101 1172 11AF; +B031;B031;1101 1172 11B0;B031;1101 1172 11B0; +B032;B032;1101 1172 11B1;B032;1101 1172 11B1; +B033;B033;1101 1172 11B2;B033;1101 1172 11B2; +B034;B034;1101 1172 11B3;B034;1101 1172 11B3; +B035;B035;1101 1172 11B4;B035;1101 1172 11B4; +B036;B036;1101 1172 11B5;B036;1101 1172 11B5; +B037;B037;1101 1172 11B6;B037;1101 1172 11B6; +B038;B038;1101 1172 11B7;B038;1101 1172 11B7; +B039;B039;1101 1172 11B8;B039;1101 1172 11B8; +B03A;B03A;1101 1172 11B9;B03A;1101 1172 11B9; +B03B;B03B;1101 1172 11BA;B03B;1101 1172 11BA; +B03C;B03C;1101 1172 11BB;B03C;1101 1172 11BB; +B03D;B03D;1101 1172 11BC;B03D;1101 1172 11BC; +B03E;B03E;1101 1172 11BD;B03E;1101 1172 11BD; +B03F;B03F;1101 1172 11BE;B03F;1101 1172 11BE; +B040;B040;1101 1172 11BF;B040;1101 1172 11BF; +B041;B041;1101 1172 11C0;B041;1101 1172 11C0; +B042;B042;1101 1172 11C1;B042;1101 1172 11C1; +B043;B043;1101 1172 11C2;B043;1101 1172 11C2; +B044;B044;1101 1173;B044;1101 1173; +B045;B045;1101 1173 11A8;B045;1101 1173 11A8; +B046;B046;1101 1173 11A9;B046;1101 1173 11A9; +B047;B047;1101 1173 11AA;B047;1101 1173 11AA; +B048;B048;1101 1173 11AB;B048;1101 1173 11AB; +B049;B049;1101 1173 11AC;B049;1101 1173 11AC; +B04A;B04A;1101 1173 11AD;B04A;1101 1173 11AD; +B04B;B04B;1101 1173 11AE;B04B;1101 1173 11AE; +B04C;B04C;1101 1173 11AF;B04C;1101 1173 11AF; +B04D;B04D;1101 1173 11B0;B04D;1101 1173 11B0; +B04E;B04E;1101 1173 11B1;B04E;1101 1173 11B1; +B04F;B04F;1101 1173 11B2;B04F;1101 1173 11B2; +B050;B050;1101 1173 11B3;B050;1101 1173 11B3; +B051;B051;1101 1173 11B4;B051;1101 1173 11B4; +B052;B052;1101 1173 11B5;B052;1101 1173 11B5; +B053;B053;1101 1173 11B6;B053;1101 1173 11B6; +B054;B054;1101 1173 11B7;B054;1101 1173 11B7; +B055;B055;1101 1173 11B8;B055;1101 1173 11B8; +B056;B056;1101 1173 11B9;B056;1101 1173 11B9; +B057;B057;1101 1173 11BA;B057;1101 1173 11BA; +B058;B058;1101 1173 11BB;B058;1101 1173 11BB; +B059;B059;1101 1173 11BC;B059;1101 1173 11BC; +B05A;B05A;1101 1173 11BD;B05A;1101 1173 11BD; +B05B;B05B;1101 1173 11BE;B05B;1101 1173 11BE; +B05C;B05C;1101 1173 11BF;B05C;1101 1173 11BF; +B05D;B05D;1101 1173 11C0;B05D;1101 1173 11C0; +B05E;B05E;1101 1173 11C1;B05E;1101 1173 11C1; +B05F;B05F;1101 1173 11C2;B05F;1101 1173 11C2; +B060;B060;1101 1174;B060;1101 1174; +B061;B061;1101 1174 11A8;B061;1101 1174 11A8; +B062;B062;1101 1174 11A9;B062;1101 1174 11A9; +B063;B063;1101 1174 11AA;B063;1101 1174 11AA; +B064;B064;1101 1174 11AB;B064;1101 1174 11AB; +B065;B065;1101 1174 11AC;B065;1101 1174 11AC; +B066;B066;1101 1174 11AD;B066;1101 1174 11AD; +B067;B067;1101 1174 11AE;B067;1101 1174 11AE; +B068;B068;1101 1174 11AF;B068;1101 1174 11AF; +B069;B069;1101 1174 11B0;B069;1101 1174 11B0; +B06A;B06A;1101 1174 11B1;B06A;1101 1174 11B1; +B06B;B06B;1101 1174 11B2;B06B;1101 1174 11B2; +B06C;B06C;1101 1174 11B3;B06C;1101 1174 11B3; +B06D;B06D;1101 1174 11B4;B06D;1101 1174 11B4; +B06E;B06E;1101 1174 11B5;B06E;1101 1174 11B5; +B06F;B06F;1101 1174 11B6;B06F;1101 1174 11B6; +B070;B070;1101 1174 11B7;B070;1101 1174 11B7; +B071;B071;1101 1174 11B8;B071;1101 1174 11B8; +B072;B072;1101 1174 11B9;B072;1101 1174 11B9; +B073;B073;1101 1174 11BA;B073;1101 1174 11BA; +B074;B074;1101 1174 11BB;B074;1101 1174 11BB; +B075;B075;1101 1174 11BC;B075;1101 1174 11BC; +B076;B076;1101 1174 11BD;B076;1101 1174 11BD; +B077;B077;1101 1174 11BE;B077;1101 1174 11BE; +B078;B078;1101 1174 11BF;B078;1101 1174 11BF; +B079;B079;1101 1174 11C0;B079;1101 1174 11C0; +B07A;B07A;1101 1174 11C1;B07A;1101 1174 11C1; +B07B;B07B;1101 1174 11C2;B07B;1101 1174 11C2; +B07C;B07C;1101 1175;B07C;1101 1175; +B07D;B07D;1101 1175 11A8;B07D;1101 1175 11A8; +B07E;B07E;1101 1175 11A9;B07E;1101 1175 11A9; +B07F;B07F;1101 1175 11AA;B07F;1101 1175 11AA; +B080;B080;1101 1175 11AB;B080;1101 1175 11AB; +B081;B081;1101 1175 11AC;B081;1101 1175 11AC; +B082;B082;1101 1175 11AD;B082;1101 1175 11AD; +B083;B083;1101 1175 11AE;B083;1101 1175 11AE; +B084;B084;1101 1175 11AF;B084;1101 1175 11AF; +B085;B085;1101 1175 11B0;B085;1101 1175 11B0; +B086;B086;1101 1175 11B1;B086;1101 1175 11B1; +B087;B087;1101 1175 11B2;B087;1101 1175 11B2; +B088;B088;1101 1175 11B3;B088;1101 1175 11B3; +B089;B089;1101 1175 11B4;B089;1101 1175 11B4; +B08A;B08A;1101 1175 11B5;B08A;1101 1175 11B5; +B08B;B08B;1101 1175 11B6;B08B;1101 1175 11B6; +B08C;B08C;1101 1175 11B7;B08C;1101 1175 11B7; +B08D;B08D;1101 1175 11B8;B08D;1101 1175 11B8; +B08E;B08E;1101 1175 11B9;B08E;1101 1175 11B9; +B08F;B08F;1101 1175 11BA;B08F;1101 1175 11BA; +B090;B090;1101 1175 11BB;B090;1101 1175 11BB; +B091;B091;1101 1175 11BC;B091;1101 1175 11BC; +B092;B092;1101 1175 11BD;B092;1101 1175 11BD; +B093;B093;1101 1175 11BE;B093;1101 1175 11BE; +B094;B094;1101 1175 11BF;B094;1101 1175 11BF; +B095;B095;1101 1175 11C0;B095;1101 1175 11C0; +B096;B096;1101 1175 11C1;B096;1101 1175 11C1; +B097;B097;1101 1175 11C2;B097;1101 1175 11C2; +B098;B098;1102 1161;B098;1102 1161; +B099;B099;1102 1161 11A8;B099;1102 1161 11A8; +B09A;B09A;1102 1161 11A9;B09A;1102 1161 11A9; +B09B;B09B;1102 1161 11AA;B09B;1102 1161 11AA; +B09C;B09C;1102 1161 11AB;B09C;1102 1161 11AB; +B09D;B09D;1102 1161 11AC;B09D;1102 1161 11AC; +B09E;B09E;1102 1161 11AD;B09E;1102 1161 11AD; +B09F;B09F;1102 1161 11AE;B09F;1102 1161 11AE; +B0A0;B0A0;1102 1161 11AF;B0A0;1102 1161 11AF; +B0A1;B0A1;1102 1161 11B0;B0A1;1102 1161 11B0; +B0A2;B0A2;1102 1161 11B1;B0A2;1102 1161 11B1; +B0A3;B0A3;1102 1161 11B2;B0A3;1102 1161 11B2; +B0A4;B0A4;1102 1161 11B3;B0A4;1102 1161 11B3; +B0A5;B0A5;1102 1161 11B4;B0A5;1102 1161 11B4; +B0A6;B0A6;1102 1161 11B5;B0A6;1102 1161 11B5; +B0A7;B0A7;1102 1161 11B6;B0A7;1102 1161 11B6; +B0A8;B0A8;1102 1161 11B7;B0A8;1102 1161 11B7; +B0A9;B0A9;1102 1161 11B8;B0A9;1102 1161 11B8; +B0AA;B0AA;1102 1161 11B9;B0AA;1102 1161 11B9; +B0AB;B0AB;1102 1161 11BA;B0AB;1102 1161 11BA; +B0AC;B0AC;1102 1161 11BB;B0AC;1102 1161 11BB; +B0AD;B0AD;1102 1161 11BC;B0AD;1102 1161 11BC; +B0AE;B0AE;1102 1161 11BD;B0AE;1102 1161 11BD; +B0AF;B0AF;1102 1161 11BE;B0AF;1102 1161 11BE; +B0B0;B0B0;1102 1161 11BF;B0B0;1102 1161 11BF; +B0B1;B0B1;1102 1161 11C0;B0B1;1102 1161 11C0; +B0B2;B0B2;1102 1161 11C1;B0B2;1102 1161 11C1; +B0B3;B0B3;1102 1161 11C2;B0B3;1102 1161 11C2; +B0B4;B0B4;1102 1162;B0B4;1102 1162; +B0B5;B0B5;1102 1162 11A8;B0B5;1102 1162 11A8; +B0B6;B0B6;1102 1162 11A9;B0B6;1102 1162 11A9; +B0B7;B0B7;1102 1162 11AA;B0B7;1102 1162 11AA; +B0B8;B0B8;1102 1162 11AB;B0B8;1102 1162 11AB; +B0B9;B0B9;1102 1162 11AC;B0B9;1102 1162 11AC; +B0BA;B0BA;1102 1162 11AD;B0BA;1102 1162 11AD; +B0BB;B0BB;1102 1162 11AE;B0BB;1102 1162 11AE; +B0BC;B0BC;1102 1162 11AF;B0BC;1102 1162 11AF; +B0BD;B0BD;1102 1162 11B0;B0BD;1102 1162 11B0; +B0BE;B0BE;1102 1162 11B1;B0BE;1102 1162 11B1; +B0BF;B0BF;1102 1162 11B2;B0BF;1102 1162 11B2; +B0C0;B0C0;1102 1162 11B3;B0C0;1102 1162 11B3; +B0C1;B0C1;1102 1162 11B4;B0C1;1102 1162 11B4; +B0C2;B0C2;1102 1162 11B5;B0C2;1102 1162 11B5; +B0C3;B0C3;1102 1162 11B6;B0C3;1102 1162 11B6; +B0C4;B0C4;1102 1162 11B7;B0C4;1102 1162 11B7; +B0C5;B0C5;1102 1162 11B8;B0C5;1102 1162 11B8; +B0C6;B0C6;1102 1162 11B9;B0C6;1102 1162 11B9; +B0C7;B0C7;1102 1162 11BA;B0C7;1102 1162 11BA; +B0C8;B0C8;1102 1162 11BB;B0C8;1102 1162 11BB; +B0C9;B0C9;1102 1162 11BC;B0C9;1102 1162 11BC; +B0CA;B0CA;1102 1162 11BD;B0CA;1102 1162 11BD; +B0CB;B0CB;1102 1162 11BE;B0CB;1102 1162 11BE; +B0CC;B0CC;1102 1162 11BF;B0CC;1102 1162 11BF; +B0CD;B0CD;1102 1162 11C0;B0CD;1102 1162 11C0; +B0CE;B0CE;1102 1162 11C1;B0CE;1102 1162 11C1; +B0CF;B0CF;1102 1162 11C2;B0CF;1102 1162 11C2; +B0D0;B0D0;1102 1163;B0D0;1102 1163; +B0D1;B0D1;1102 1163 11A8;B0D1;1102 1163 11A8; +B0D2;B0D2;1102 1163 11A9;B0D2;1102 1163 11A9; +B0D3;B0D3;1102 1163 11AA;B0D3;1102 1163 11AA; +B0D4;B0D4;1102 1163 11AB;B0D4;1102 1163 11AB; +B0D5;B0D5;1102 1163 11AC;B0D5;1102 1163 11AC; +B0D6;B0D6;1102 1163 11AD;B0D6;1102 1163 11AD; +B0D7;B0D7;1102 1163 11AE;B0D7;1102 1163 11AE; +B0D8;B0D8;1102 1163 11AF;B0D8;1102 1163 11AF; +B0D9;B0D9;1102 1163 11B0;B0D9;1102 1163 11B0; +B0DA;B0DA;1102 1163 11B1;B0DA;1102 1163 11B1; +B0DB;B0DB;1102 1163 11B2;B0DB;1102 1163 11B2; +B0DC;B0DC;1102 1163 11B3;B0DC;1102 1163 11B3; +B0DD;B0DD;1102 1163 11B4;B0DD;1102 1163 11B4; +B0DE;B0DE;1102 1163 11B5;B0DE;1102 1163 11B5; +B0DF;B0DF;1102 1163 11B6;B0DF;1102 1163 11B6; +B0E0;B0E0;1102 1163 11B7;B0E0;1102 1163 11B7; +B0E1;B0E1;1102 1163 11B8;B0E1;1102 1163 11B8; +B0E2;B0E2;1102 1163 11B9;B0E2;1102 1163 11B9; +B0E3;B0E3;1102 1163 11BA;B0E3;1102 1163 11BA; +B0E4;B0E4;1102 1163 11BB;B0E4;1102 1163 11BB; +B0E5;B0E5;1102 1163 11BC;B0E5;1102 1163 11BC; +B0E6;B0E6;1102 1163 11BD;B0E6;1102 1163 11BD; +B0E7;B0E7;1102 1163 11BE;B0E7;1102 1163 11BE; +B0E8;B0E8;1102 1163 11BF;B0E8;1102 1163 11BF; +B0E9;B0E9;1102 1163 11C0;B0E9;1102 1163 11C0; +B0EA;B0EA;1102 1163 11C1;B0EA;1102 1163 11C1; +B0EB;B0EB;1102 1163 11C2;B0EB;1102 1163 11C2; +B0EC;B0EC;1102 1164;B0EC;1102 1164; +B0ED;B0ED;1102 1164 11A8;B0ED;1102 1164 11A8; +B0EE;B0EE;1102 1164 11A9;B0EE;1102 1164 11A9; +B0EF;B0EF;1102 1164 11AA;B0EF;1102 1164 11AA; +B0F0;B0F0;1102 1164 11AB;B0F0;1102 1164 11AB; +B0F1;B0F1;1102 1164 11AC;B0F1;1102 1164 11AC; +B0F2;B0F2;1102 1164 11AD;B0F2;1102 1164 11AD; +B0F3;B0F3;1102 1164 11AE;B0F3;1102 1164 11AE; +B0F4;B0F4;1102 1164 11AF;B0F4;1102 1164 11AF; +B0F5;B0F5;1102 1164 11B0;B0F5;1102 1164 11B0; +B0F6;B0F6;1102 1164 11B1;B0F6;1102 1164 11B1; +B0F7;B0F7;1102 1164 11B2;B0F7;1102 1164 11B2; +B0F8;B0F8;1102 1164 11B3;B0F8;1102 1164 11B3; +B0F9;B0F9;1102 1164 11B4;B0F9;1102 1164 11B4; +B0FA;B0FA;1102 1164 11B5;B0FA;1102 1164 11B5; +B0FB;B0FB;1102 1164 11B6;B0FB;1102 1164 11B6; +B0FC;B0FC;1102 1164 11B7;B0FC;1102 1164 11B7; +B0FD;B0FD;1102 1164 11B8;B0FD;1102 1164 11B8; +B0FE;B0FE;1102 1164 11B9;B0FE;1102 1164 11B9; +B0FF;B0FF;1102 1164 11BA;B0FF;1102 1164 11BA; +B100;B100;1102 1164 11BB;B100;1102 1164 11BB; +B101;B101;1102 1164 11BC;B101;1102 1164 11BC; +B102;B102;1102 1164 11BD;B102;1102 1164 11BD; +B103;B103;1102 1164 11BE;B103;1102 1164 11BE; +B104;B104;1102 1164 11BF;B104;1102 1164 11BF; +B105;B105;1102 1164 11C0;B105;1102 1164 11C0; +B106;B106;1102 1164 11C1;B106;1102 1164 11C1; +B107;B107;1102 1164 11C2;B107;1102 1164 11C2; +B108;B108;1102 1165;B108;1102 1165; +B109;B109;1102 1165 11A8;B109;1102 1165 11A8; +B10A;B10A;1102 1165 11A9;B10A;1102 1165 11A9; +B10B;B10B;1102 1165 11AA;B10B;1102 1165 11AA; +B10C;B10C;1102 1165 11AB;B10C;1102 1165 11AB; +B10D;B10D;1102 1165 11AC;B10D;1102 1165 11AC; +B10E;B10E;1102 1165 11AD;B10E;1102 1165 11AD; +B10F;B10F;1102 1165 11AE;B10F;1102 1165 11AE; +B110;B110;1102 1165 11AF;B110;1102 1165 11AF; +B111;B111;1102 1165 11B0;B111;1102 1165 11B0; +B112;B112;1102 1165 11B1;B112;1102 1165 11B1; +B113;B113;1102 1165 11B2;B113;1102 1165 11B2; +B114;B114;1102 1165 11B3;B114;1102 1165 11B3; +B115;B115;1102 1165 11B4;B115;1102 1165 11B4; +B116;B116;1102 1165 11B5;B116;1102 1165 11B5; +B117;B117;1102 1165 11B6;B117;1102 1165 11B6; +B118;B118;1102 1165 11B7;B118;1102 1165 11B7; +B119;B119;1102 1165 11B8;B119;1102 1165 11B8; +B11A;B11A;1102 1165 11B9;B11A;1102 1165 11B9; +B11B;B11B;1102 1165 11BA;B11B;1102 1165 11BA; +B11C;B11C;1102 1165 11BB;B11C;1102 1165 11BB; +B11D;B11D;1102 1165 11BC;B11D;1102 1165 11BC; +B11E;B11E;1102 1165 11BD;B11E;1102 1165 11BD; +B11F;B11F;1102 1165 11BE;B11F;1102 1165 11BE; +B120;B120;1102 1165 11BF;B120;1102 1165 11BF; +B121;B121;1102 1165 11C0;B121;1102 1165 11C0; +B122;B122;1102 1165 11C1;B122;1102 1165 11C1; +B123;B123;1102 1165 11C2;B123;1102 1165 11C2; +B124;B124;1102 1166;B124;1102 1166; +B125;B125;1102 1166 11A8;B125;1102 1166 11A8; +B126;B126;1102 1166 11A9;B126;1102 1166 11A9; +B127;B127;1102 1166 11AA;B127;1102 1166 11AA; +B128;B128;1102 1166 11AB;B128;1102 1166 11AB; +B129;B129;1102 1166 11AC;B129;1102 1166 11AC; +B12A;B12A;1102 1166 11AD;B12A;1102 1166 11AD; +B12B;B12B;1102 1166 11AE;B12B;1102 1166 11AE; +B12C;B12C;1102 1166 11AF;B12C;1102 1166 11AF; +B12D;B12D;1102 1166 11B0;B12D;1102 1166 11B0; +B12E;B12E;1102 1166 11B1;B12E;1102 1166 11B1; +B12F;B12F;1102 1166 11B2;B12F;1102 1166 11B2; +B130;B130;1102 1166 11B3;B130;1102 1166 11B3; +B131;B131;1102 1166 11B4;B131;1102 1166 11B4; +B132;B132;1102 1166 11B5;B132;1102 1166 11B5; +B133;B133;1102 1166 11B6;B133;1102 1166 11B6; +B134;B134;1102 1166 11B7;B134;1102 1166 11B7; +B135;B135;1102 1166 11B8;B135;1102 1166 11B8; +B136;B136;1102 1166 11B9;B136;1102 1166 11B9; +B137;B137;1102 1166 11BA;B137;1102 1166 11BA; +B138;B138;1102 1166 11BB;B138;1102 1166 11BB; +B139;B139;1102 1166 11BC;B139;1102 1166 11BC; +B13A;B13A;1102 1166 11BD;B13A;1102 1166 11BD; +B13B;B13B;1102 1166 11BE;B13B;1102 1166 11BE; +B13C;B13C;1102 1166 11BF;B13C;1102 1166 11BF; +B13D;B13D;1102 1166 11C0;B13D;1102 1166 11C0; +B13E;B13E;1102 1166 11C1;B13E;1102 1166 11C1; +B13F;B13F;1102 1166 11C2;B13F;1102 1166 11C2; +B140;B140;1102 1167;B140;1102 1167; +B141;B141;1102 1167 11A8;B141;1102 1167 11A8; +B142;B142;1102 1167 11A9;B142;1102 1167 11A9; +B143;B143;1102 1167 11AA;B143;1102 1167 11AA; +B144;B144;1102 1167 11AB;B144;1102 1167 11AB; +B145;B145;1102 1167 11AC;B145;1102 1167 11AC; +B146;B146;1102 1167 11AD;B146;1102 1167 11AD; +B147;B147;1102 1167 11AE;B147;1102 1167 11AE; +B148;B148;1102 1167 11AF;B148;1102 1167 11AF; +B149;B149;1102 1167 11B0;B149;1102 1167 11B0; +B14A;B14A;1102 1167 11B1;B14A;1102 1167 11B1; +B14B;B14B;1102 1167 11B2;B14B;1102 1167 11B2; +B14C;B14C;1102 1167 11B3;B14C;1102 1167 11B3; +B14D;B14D;1102 1167 11B4;B14D;1102 1167 11B4; +B14E;B14E;1102 1167 11B5;B14E;1102 1167 11B5; +B14F;B14F;1102 1167 11B6;B14F;1102 1167 11B6; +B150;B150;1102 1167 11B7;B150;1102 1167 11B7; +B151;B151;1102 1167 11B8;B151;1102 1167 11B8; +B152;B152;1102 1167 11B9;B152;1102 1167 11B9; +B153;B153;1102 1167 11BA;B153;1102 1167 11BA; +B154;B154;1102 1167 11BB;B154;1102 1167 11BB; +B155;B155;1102 1167 11BC;B155;1102 1167 11BC; +B156;B156;1102 1167 11BD;B156;1102 1167 11BD; +B157;B157;1102 1167 11BE;B157;1102 1167 11BE; +B158;B158;1102 1167 11BF;B158;1102 1167 11BF; +B159;B159;1102 1167 11C0;B159;1102 1167 11C0; +B15A;B15A;1102 1167 11C1;B15A;1102 1167 11C1; +B15B;B15B;1102 1167 11C2;B15B;1102 1167 11C2; +B15C;B15C;1102 1168;B15C;1102 1168; +B15D;B15D;1102 1168 11A8;B15D;1102 1168 11A8; +B15E;B15E;1102 1168 11A9;B15E;1102 1168 11A9; +B15F;B15F;1102 1168 11AA;B15F;1102 1168 11AA; +B160;B160;1102 1168 11AB;B160;1102 1168 11AB; +B161;B161;1102 1168 11AC;B161;1102 1168 11AC; +B162;B162;1102 1168 11AD;B162;1102 1168 11AD; +B163;B163;1102 1168 11AE;B163;1102 1168 11AE; +B164;B164;1102 1168 11AF;B164;1102 1168 11AF; +B165;B165;1102 1168 11B0;B165;1102 1168 11B0; +B166;B166;1102 1168 11B1;B166;1102 1168 11B1; +B167;B167;1102 1168 11B2;B167;1102 1168 11B2; +B168;B168;1102 1168 11B3;B168;1102 1168 11B3; +B169;B169;1102 1168 11B4;B169;1102 1168 11B4; +B16A;B16A;1102 1168 11B5;B16A;1102 1168 11B5; +B16B;B16B;1102 1168 11B6;B16B;1102 1168 11B6; +B16C;B16C;1102 1168 11B7;B16C;1102 1168 11B7; +B16D;B16D;1102 1168 11B8;B16D;1102 1168 11B8; +B16E;B16E;1102 1168 11B9;B16E;1102 1168 11B9; +B16F;B16F;1102 1168 11BA;B16F;1102 1168 11BA; +B170;B170;1102 1168 11BB;B170;1102 1168 11BB; +B171;B171;1102 1168 11BC;B171;1102 1168 11BC; +B172;B172;1102 1168 11BD;B172;1102 1168 11BD; +B173;B173;1102 1168 11BE;B173;1102 1168 11BE; +B174;B174;1102 1168 11BF;B174;1102 1168 11BF; +B175;B175;1102 1168 11C0;B175;1102 1168 11C0; +B176;B176;1102 1168 11C1;B176;1102 1168 11C1; +B177;B177;1102 1168 11C2;B177;1102 1168 11C2; +B178;B178;1102 1169;B178;1102 1169; +B179;B179;1102 1169 11A8;B179;1102 1169 11A8; +B17A;B17A;1102 1169 11A9;B17A;1102 1169 11A9; +B17B;B17B;1102 1169 11AA;B17B;1102 1169 11AA; +B17C;B17C;1102 1169 11AB;B17C;1102 1169 11AB; +B17D;B17D;1102 1169 11AC;B17D;1102 1169 11AC; +B17E;B17E;1102 1169 11AD;B17E;1102 1169 11AD; +B17F;B17F;1102 1169 11AE;B17F;1102 1169 11AE; +B180;B180;1102 1169 11AF;B180;1102 1169 11AF; +B181;B181;1102 1169 11B0;B181;1102 1169 11B0; +B182;B182;1102 1169 11B1;B182;1102 1169 11B1; +B183;B183;1102 1169 11B2;B183;1102 1169 11B2; +B184;B184;1102 1169 11B3;B184;1102 1169 11B3; +B185;B185;1102 1169 11B4;B185;1102 1169 11B4; +B186;B186;1102 1169 11B5;B186;1102 1169 11B5; +B187;B187;1102 1169 11B6;B187;1102 1169 11B6; +B188;B188;1102 1169 11B7;B188;1102 1169 11B7; +B189;B189;1102 1169 11B8;B189;1102 1169 11B8; +B18A;B18A;1102 1169 11B9;B18A;1102 1169 11B9; +B18B;B18B;1102 1169 11BA;B18B;1102 1169 11BA; +B18C;B18C;1102 1169 11BB;B18C;1102 1169 11BB; +B18D;B18D;1102 1169 11BC;B18D;1102 1169 11BC; +B18E;B18E;1102 1169 11BD;B18E;1102 1169 11BD; +B18F;B18F;1102 1169 11BE;B18F;1102 1169 11BE; +B190;B190;1102 1169 11BF;B190;1102 1169 11BF; +B191;B191;1102 1169 11C0;B191;1102 1169 11C0; +B192;B192;1102 1169 11C1;B192;1102 1169 11C1; +B193;B193;1102 1169 11C2;B193;1102 1169 11C2; +B194;B194;1102 116A;B194;1102 116A; +B195;B195;1102 116A 11A8;B195;1102 116A 11A8; +B196;B196;1102 116A 11A9;B196;1102 116A 11A9; +B197;B197;1102 116A 11AA;B197;1102 116A 11AA; +B198;B198;1102 116A 11AB;B198;1102 116A 11AB; +B199;B199;1102 116A 11AC;B199;1102 116A 11AC; +B19A;B19A;1102 116A 11AD;B19A;1102 116A 11AD; +B19B;B19B;1102 116A 11AE;B19B;1102 116A 11AE; +B19C;B19C;1102 116A 11AF;B19C;1102 116A 11AF; +B19D;B19D;1102 116A 11B0;B19D;1102 116A 11B0; +B19E;B19E;1102 116A 11B1;B19E;1102 116A 11B1; +B19F;B19F;1102 116A 11B2;B19F;1102 116A 11B2; +B1A0;B1A0;1102 116A 11B3;B1A0;1102 116A 11B3; +B1A1;B1A1;1102 116A 11B4;B1A1;1102 116A 11B4; +B1A2;B1A2;1102 116A 11B5;B1A2;1102 116A 11B5; +B1A3;B1A3;1102 116A 11B6;B1A3;1102 116A 11B6; +B1A4;B1A4;1102 116A 11B7;B1A4;1102 116A 11B7; +B1A5;B1A5;1102 116A 11B8;B1A5;1102 116A 11B8; +B1A6;B1A6;1102 116A 11B9;B1A6;1102 116A 11B9; +B1A7;B1A7;1102 116A 11BA;B1A7;1102 116A 11BA; +B1A8;B1A8;1102 116A 11BB;B1A8;1102 116A 11BB; +B1A9;B1A9;1102 116A 11BC;B1A9;1102 116A 11BC; +B1AA;B1AA;1102 116A 11BD;B1AA;1102 116A 11BD; +B1AB;B1AB;1102 116A 11BE;B1AB;1102 116A 11BE; +B1AC;B1AC;1102 116A 11BF;B1AC;1102 116A 11BF; +B1AD;B1AD;1102 116A 11C0;B1AD;1102 116A 11C0; +B1AE;B1AE;1102 116A 11C1;B1AE;1102 116A 11C1; +B1AF;B1AF;1102 116A 11C2;B1AF;1102 116A 11C2; +B1B0;B1B0;1102 116B;B1B0;1102 116B; +B1B1;B1B1;1102 116B 11A8;B1B1;1102 116B 11A8; +B1B2;B1B2;1102 116B 11A9;B1B2;1102 116B 11A9; +B1B3;B1B3;1102 116B 11AA;B1B3;1102 116B 11AA; +B1B4;B1B4;1102 116B 11AB;B1B4;1102 116B 11AB; +B1B5;B1B5;1102 116B 11AC;B1B5;1102 116B 11AC; +B1B6;B1B6;1102 116B 11AD;B1B6;1102 116B 11AD; +B1B7;B1B7;1102 116B 11AE;B1B7;1102 116B 11AE; +B1B8;B1B8;1102 116B 11AF;B1B8;1102 116B 11AF; +B1B9;B1B9;1102 116B 11B0;B1B9;1102 116B 11B0; +B1BA;B1BA;1102 116B 11B1;B1BA;1102 116B 11B1; +B1BB;B1BB;1102 116B 11B2;B1BB;1102 116B 11B2; +B1BC;B1BC;1102 116B 11B3;B1BC;1102 116B 11B3; +B1BD;B1BD;1102 116B 11B4;B1BD;1102 116B 11B4; +B1BE;B1BE;1102 116B 11B5;B1BE;1102 116B 11B5; +B1BF;B1BF;1102 116B 11B6;B1BF;1102 116B 11B6; +B1C0;B1C0;1102 116B 11B7;B1C0;1102 116B 11B7; +B1C1;B1C1;1102 116B 11B8;B1C1;1102 116B 11B8; +B1C2;B1C2;1102 116B 11B9;B1C2;1102 116B 11B9; +B1C3;B1C3;1102 116B 11BA;B1C3;1102 116B 11BA; +B1C4;B1C4;1102 116B 11BB;B1C4;1102 116B 11BB; +B1C5;B1C5;1102 116B 11BC;B1C5;1102 116B 11BC; +B1C6;B1C6;1102 116B 11BD;B1C6;1102 116B 11BD; +B1C7;B1C7;1102 116B 11BE;B1C7;1102 116B 11BE; +B1C8;B1C8;1102 116B 11BF;B1C8;1102 116B 11BF; +B1C9;B1C9;1102 116B 11C0;B1C9;1102 116B 11C0; +B1CA;B1CA;1102 116B 11C1;B1CA;1102 116B 11C1; +B1CB;B1CB;1102 116B 11C2;B1CB;1102 116B 11C2; +B1CC;B1CC;1102 116C;B1CC;1102 116C; +B1CD;B1CD;1102 116C 11A8;B1CD;1102 116C 11A8; +B1CE;B1CE;1102 116C 11A9;B1CE;1102 116C 11A9; +B1CF;B1CF;1102 116C 11AA;B1CF;1102 116C 11AA; +B1D0;B1D0;1102 116C 11AB;B1D0;1102 116C 11AB; +B1D1;B1D1;1102 116C 11AC;B1D1;1102 116C 11AC; +B1D2;B1D2;1102 116C 11AD;B1D2;1102 116C 11AD; +B1D3;B1D3;1102 116C 11AE;B1D3;1102 116C 11AE; +B1D4;B1D4;1102 116C 11AF;B1D4;1102 116C 11AF; +B1D5;B1D5;1102 116C 11B0;B1D5;1102 116C 11B0; +B1D6;B1D6;1102 116C 11B1;B1D6;1102 116C 11B1; +B1D7;B1D7;1102 116C 11B2;B1D7;1102 116C 11B2; +B1D8;B1D8;1102 116C 11B3;B1D8;1102 116C 11B3; +B1D9;B1D9;1102 116C 11B4;B1D9;1102 116C 11B4; +B1DA;B1DA;1102 116C 11B5;B1DA;1102 116C 11B5; +B1DB;B1DB;1102 116C 11B6;B1DB;1102 116C 11B6; +B1DC;B1DC;1102 116C 11B7;B1DC;1102 116C 11B7; +B1DD;B1DD;1102 116C 11B8;B1DD;1102 116C 11B8; +B1DE;B1DE;1102 116C 11B9;B1DE;1102 116C 11B9; +B1DF;B1DF;1102 116C 11BA;B1DF;1102 116C 11BA; +B1E0;B1E0;1102 116C 11BB;B1E0;1102 116C 11BB; +B1E1;B1E1;1102 116C 11BC;B1E1;1102 116C 11BC; +B1E2;B1E2;1102 116C 11BD;B1E2;1102 116C 11BD; +B1E3;B1E3;1102 116C 11BE;B1E3;1102 116C 11BE; +B1E4;B1E4;1102 116C 11BF;B1E4;1102 116C 11BF; +B1E5;B1E5;1102 116C 11C0;B1E5;1102 116C 11C0; +B1E6;B1E6;1102 116C 11C1;B1E6;1102 116C 11C1; +B1E7;B1E7;1102 116C 11C2;B1E7;1102 116C 11C2; +B1E8;B1E8;1102 116D;B1E8;1102 116D; +B1E9;B1E9;1102 116D 11A8;B1E9;1102 116D 11A8; +B1EA;B1EA;1102 116D 11A9;B1EA;1102 116D 11A9; +B1EB;B1EB;1102 116D 11AA;B1EB;1102 116D 11AA; +B1EC;B1EC;1102 116D 11AB;B1EC;1102 116D 11AB; +B1ED;B1ED;1102 116D 11AC;B1ED;1102 116D 11AC; +B1EE;B1EE;1102 116D 11AD;B1EE;1102 116D 11AD; +B1EF;B1EF;1102 116D 11AE;B1EF;1102 116D 11AE; +B1F0;B1F0;1102 116D 11AF;B1F0;1102 116D 11AF; +B1F1;B1F1;1102 116D 11B0;B1F1;1102 116D 11B0; +B1F2;B1F2;1102 116D 11B1;B1F2;1102 116D 11B1; +B1F3;B1F3;1102 116D 11B2;B1F3;1102 116D 11B2; +B1F4;B1F4;1102 116D 11B3;B1F4;1102 116D 11B3; +B1F5;B1F5;1102 116D 11B4;B1F5;1102 116D 11B4; +B1F6;B1F6;1102 116D 11B5;B1F6;1102 116D 11B5; +B1F7;B1F7;1102 116D 11B6;B1F7;1102 116D 11B6; +B1F8;B1F8;1102 116D 11B7;B1F8;1102 116D 11B7; +B1F9;B1F9;1102 116D 11B8;B1F9;1102 116D 11B8; +B1FA;B1FA;1102 116D 11B9;B1FA;1102 116D 11B9; +B1FB;B1FB;1102 116D 11BA;B1FB;1102 116D 11BA; +B1FC;B1FC;1102 116D 11BB;B1FC;1102 116D 11BB; +B1FD;B1FD;1102 116D 11BC;B1FD;1102 116D 11BC; +B1FE;B1FE;1102 116D 11BD;B1FE;1102 116D 11BD; +B1FF;B1FF;1102 116D 11BE;B1FF;1102 116D 11BE; +B200;B200;1102 116D 11BF;B200;1102 116D 11BF; +B201;B201;1102 116D 11C0;B201;1102 116D 11C0; +B202;B202;1102 116D 11C1;B202;1102 116D 11C1; +B203;B203;1102 116D 11C2;B203;1102 116D 11C2; +B204;B204;1102 116E;B204;1102 116E; +B205;B205;1102 116E 11A8;B205;1102 116E 11A8; +B206;B206;1102 116E 11A9;B206;1102 116E 11A9; +B207;B207;1102 116E 11AA;B207;1102 116E 11AA; +B208;B208;1102 116E 11AB;B208;1102 116E 11AB; +B209;B209;1102 116E 11AC;B209;1102 116E 11AC; +B20A;B20A;1102 116E 11AD;B20A;1102 116E 11AD; +B20B;B20B;1102 116E 11AE;B20B;1102 116E 11AE; +B20C;B20C;1102 116E 11AF;B20C;1102 116E 11AF; +B20D;B20D;1102 116E 11B0;B20D;1102 116E 11B0; +B20E;B20E;1102 116E 11B1;B20E;1102 116E 11B1; +B20F;B20F;1102 116E 11B2;B20F;1102 116E 11B2; +B210;B210;1102 116E 11B3;B210;1102 116E 11B3; +B211;B211;1102 116E 11B4;B211;1102 116E 11B4; +B212;B212;1102 116E 11B5;B212;1102 116E 11B5; +B213;B213;1102 116E 11B6;B213;1102 116E 11B6; +B214;B214;1102 116E 11B7;B214;1102 116E 11B7; +B215;B215;1102 116E 11B8;B215;1102 116E 11B8; +B216;B216;1102 116E 11B9;B216;1102 116E 11B9; +B217;B217;1102 116E 11BA;B217;1102 116E 11BA; +B218;B218;1102 116E 11BB;B218;1102 116E 11BB; +B219;B219;1102 116E 11BC;B219;1102 116E 11BC; +B21A;B21A;1102 116E 11BD;B21A;1102 116E 11BD; +B21B;B21B;1102 116E 11BE;B21B;1102 116E 11BE; +B21C;B21C;1102 116E 11BF;B21C;1102 116E 11BF; +B21D;B21D;1102 116E 11C0;B21D;1102 116E 11C0; +B21E;B21E;1102 116E 11C1;B21E;1102 116E 11C1; +B21F;B21F;1102 116E 11C2;B21F;1102 116E 11C2; +B220;B220;1102 116F;B220;1102 116F; +B221;B221;1102 116F 11A8;B221;1102 116F 11A8; +B222;B222;1102 116F 11A9;B222;1102 116F 11A9; +B223;B223;1102 116F 11AA;B223;1102 116F 11AA; +B224;B224;1102 116F 11AB;B224;1102 116F 11AB; +B225;B225;1102 116F 11AC;B225;1102 116F 11AC; +B226;B226;1102 116F 11AD;B226;1102 116F 11AD; +B227;B227;1102 116F 11AE;B227;1102 116F 11AE; +B228;B228;1102 116F 11AF;B228;1102 116F 11AF; +B229;B229;1102 116F 11B0;B229;1102 116F 11B0; +B22A;B22A;1102 116F 11B1;B22A;1102 116F 11B1; +B22B;B22B;1102 116F 11B2;B22B;1102 116F 11B2; +B22C;B22C;1102 116F 11B3;B22C;1102 116F 11B3; +B22D;B22D;1102 116F 11B4;B22D;1102 116F 11B4; +B22E;B22E;1102 116F 11B5;B22E;1102 116F 11B5; +B22F;B22F;1102 116F 11B6;B22F;1102 116F 11B6; +B230;B230;1102 116F 11B7;B230;1102 116F 11B7; +B231;B231;1102 116F 11B8;B231;1102 116F 11B8; +B232;B232;1102 116F 11B9;B232;1102 116F 11B9; +B233;B233;1102 116F 11BA;B233;1102 116F 11BA; +B234;B234;1102 116F 11BB;B234;1102 116F 11BB; +B235;B235;1102 116F 11BC;B235;1102 116F 11BC; +B236;B236;1102 116F 11BD;B236;1102 116F 11BD; +B237;B237;1102 116F 11BE;B237;1102 116F 11BE; +B238;B238;1102 116F 11BF;B238;1102 116F 11BF; +B239;B239;1102 116F 11C0;B239;1102 116F 11C0; +B23A;B23A;1102 116F 11C1;B23A;1102 116F 11C1; +B23B;B23B;1102 116F 11C2;B23B;1102 116F 11C2; +B23C;B23C;1102 1170;B23C;1102 1170; +B23D;B23D;1102 1170 11A8;B23D;1102 1170 11A8; +B23E;B23E;1102 1170 11A9;B23E;1102 1170 11A9; +B23F;B23F;1102 1170 11AA;B23F;1102 1170 11AA; +B240;B240;1102 1170 11AB;B240;1102 1170 11AB; +B241;B241;1102 1170 11AC;B241;1102 1170 11AC; +B242;B242;1102 1170 11AD;B242;1102 1170 11AD; +B243;B243;1102 1170 11AE;B243;1102 1170 11AE; +B244;B244;1102 1170 11AF;B244;1102 1170 11AF; +B245;B245;1102 1170 11B0;B245;1102 1170 11B0; +B246;B246;1102 1170 11B1;B246;1102 1170 11B1; +B247;B247;1102 1170 11B2;B247;1102 1170 11B2; +B248;B248;1102 1170 11B3;B248;1102 1170 11B3; +B249;B249;1102 1170 11B4;B249;1102 1170 11B4; +B24A;B24A;1102 1170 11B5;B24A;1102 1170 11B5; +B24B;B24B;1102 1170 11B6;B24B;1102 1170 11B6; +B24C;B24C;1102 1170 11B7;B24C;1102 1170 11B7; +B24D;B24D;1102 1170 11B8;B24D;1102 1170 11B8; +B24E;B24E;1102 1170 11B9;B24E;1102 1170 11B9; +B24F;B24F;1102 1170 11BA;B24F;1102 1170 11BA; +B250;B250;1102 1170 11BB;B250;1102 1170 11BB; +B251;B251;1102 1170 11BC;B251;1102 1170 11BC; +B252;B252;1102 1170 11BD;B252;1102 1170 11BD; +B253;B253;1102 1170 11BE;B253;1102 1170 11BE; +B254;B254;1102 1170 11BF;B254;1102 1170 11BF; +B255;B255;1102 1170 11C0;B255;1102 1170 11C0; +B256;B256;1102 1170 11C1;B256;1102 1170 11C1; +B257;B257;1102 1170 11C2;B257;1102 1170 11C2; +B258;B258;1102 1171;B258;1102 1171; +B259;B259;1102 1171 11A8;B259;1102 1171 11A8; +B25A;B25A;1102 1171 11A9;B25A;1102 1171 11A9; +B25B;B25B;1102 1171 11AA;B25B;1102 1171 11AA; +B25C;B25C;1102 1171 11AB;B25C;1102 1171 11AB; +B25D;B25D;1102 1171 11AC;B25D;1102 1171 11AC; +B25E;B25E;1102 1171 11AD;B25E;1102 1171 11AD; +B25F;B25F;1102 1171 11AE;B25F;1102 1171 11AE; +B260;B260;1102 1171 11AF;B260;1102 1171 11AF; +B261;B261;1102 1171 11B0;B261;1102 1171 11B0; +B262;B262;1102 1171 11B1;B262;1102 1171 11B1; +B263;B263;1102 1171 11B2;B263;1102 1171 11B2; +B264;B264;1102 1171 11B3;B264;1102 1171 11B3; +B265;B265;1102 1171 11B4;B265;1102 1171 11B4; +B266;B266;1102 1171 11B5;B266;1102 1171 11B5; +B267;B267;1102 1171 11B6;B267;1102 1171 11B6; +B268;B268;1102 1171 11B7;B268;1102 1171 11B7; +B269;B269;1102 1171 11B8;B269;1102 1171 11B8; +B26A;B26A;1102 1171 11B9;B26A;1102 1171 11B9; +B26B;B26B;1102 1171 11BA;B26B;1102 1171 11BA; +B26C;B26C;1102 1171 11BB;B26C;1102 1171 11BB; +B26D;B26D;1102 1171 11BC;B26D;1102 1171 11BC; +B26E;B26E;1102 1171 11BD;B26E;1102 1171 11BD; +B26F;B26F;1102 1171 11BE;B26F;1102 1171 11BE; +B270;B270;1102 1171 11BF;B270;1102 1171 11BF; +B271;B271;1102 1171 11C0;B271;1102 1171 11C0; +B272;B272;1102 1171 11C1;B272;1102 1171 11C1; +B273;B273;1102 1171 11C2;B273;1102 1171 11C2; +B274;B274;1102 1172;B274;1102 1172; +B275;B275;1102 1172 11A8;B275;1102 1172 11A8; +B276;B276;1102 1172 11A9;B276;1102 1172 11A9; +B277;B277;1102 1172 11AA;B277;1102 1172 11AA; +B278;B278;1102 1172 11AB;B278;1102 1172 11AB; +B279;B279;1102 1172 11AC;B279;1102 1172 11AC; +B27A;B27A;1102 1172 11AD;B27A;1102 1172 11AD; +B27B;B27B;1102 1172 11AE;B27B;1102 1172 11AE; +B27C;B27C;1102 1172 11AF;B27C;1102 1172 11AF; +B27D;B27D;1102 1172 11B0;B27D;1102 1172 11B0; +B27E;B27E;1102 1172 11B1;B27E;1102 1172 11B1; +B27F;B27F;1102 1172 11B2;B27F;1102 1172 11B2; +B280;B280;1102 1172 11B3;B280;1102 1172 11B3; +B281;B281;1102 1172 11B4;B281;1102 1172 11B4; +B282;B282;1102 1172 11B5;B282;1102 1172 11B5; +B283;B283;1102 1172 11B6;B283;1102 1172 11B6; +B284;B284;1102 1172 11B7;B284;1102 1172 11B7; +B285;B285;1102 1172 11B8;B285;1102 1172 11B8; +B286;B286;1102 1172 11B9;B286;1102 1172 11B9; +B287;B287;1102 1172 11BA;B287;1102 1172 11BA; +B288;B288;1102 1172 11BB;B288;1102 1172 11BB; +B289;B289;1102 1172 11BC;B289;1102 1172 11BC; +B28A;B28A;1102 1172 11BD;B28A;1102 1172 11BD; +B28B;B28B;1102 1172 11BE;B28B;1102 1172 11BE; +B28C;B28C;1102 1172 11BF;B28C;1102 1172 11BF; +B28D;B28D;1102 1172 11C0;B28D;1102 1172 11C0; +B28E;B28E;1102 1172 11C1;B28E;1102 1172 11C1; +B28F;B28F;1102 1172 11C2;B28F;1102 1172 11C2; +B290;B290;1102 1173;B290;1102 1173; +B291;B291;1102 1173 11A8;B291;1102 1173 11A8; +B292;B292;1102 1173 11A9;B292;1102 1173 11A9; +B293;B293;1102 1173 11AA;B293;1102 1173 11AA; +B294;B294;1102 1173 11AB;B294;1102 1173 11AB; +B295;B295;1102 1173 11AC;B295;1102 1173 11AC; +B296;B296;1102 1173 11AD;B296;1102 1173 11AD; +B297;B297;1102 1173 11AE;B297;1102 1173 11AE; +B298;B298;1102 1173 11AF;B298;1102 1173 11AF; +B299;B299;1102 1173 11B0;B299;1102 1173 11B0; +B29A;B29A;1102 1173 11B1;B29A;1102 1173 11B1; +B29B;B29B;1102 1173 11B2;B29B;1102 1173 11B2; +B29C;B29C;1102 1173 11B3;B29C;1102 1173 11B3; +B29D;B29D;1102 1173 11B4;B29D;1102 1173 11B4; +B29E;B29E;1102 1173 11B5;B29E;1102 1173 11B5; +B29F;B29F;1102 1173 11B6;B29F;1102 1173 11B6; +B2A0;B2A0;1102 1173 11B7;B2A0;1102 1173 11B7; +B2A1;B2A1;1102 1173 11B8;B2A1;1102 1173 11B8; +B2A2;B2A2;1102 1173 11B9;B2A2;1102 1173 11B9; +B2A3;B2A3;1102 1173 11BA;B2A3;1102 1173 11BA; +B2A4;B2A4;1102 1173 11BB;B2A4;1102 1173 11BB; +B2A5;B2A5;1102 1173 11BC;B2A5;1102 1173 11BC; +B2A6;B2A6;1102 1173 11BD;B2A6;1102 1173 11BD; +B2A7;B2A7;1102 1173 11BE;B2A7;1102 1173 11BE; +B2A8;B2A8;1102 1173 11BF;B2A8;1102 1173 11BF; +B2A9;B2A9;1102 1173 11C0;B2A9;1102 1173 11C0; +B2AA;B2AA;1102 1173 11C1;B2AA;1102 1173 11C1; +B2AB;B2AB;1102 1173 11C2;B2AB;1102 1173 11C2; +B2AC;B2AC;1102 1174;B2AC;1102 1174; +B2AD;B2AD;1102 1174 11A8;B2AD;1102 1174 11A8; +B2AE;B2AE;1102 1174 11A9;B2AE;1102 1174 11A9; +B2AF;B2AF;1102 1174 11AA;B2AF;1102 1174 11AA; +B2B0;B2B0;1102 1174 11AB;B2B0;1102 1174 11AB; +B2B1;B2B1;1102 1174 11AC;B2B1;1102 1174 11AC; +B2B2;B2B2;1102 1174 11AD;B2B2;1102 1174 11AD; +B2B3;B2B3;1102 1174 11AE;B2B3;1102 1174 11AE; +B2B4;B2B4;1102 1174 11AF;B2B4;1102 1174 11AF; +B2B5;B2B5;1102 1174 11B0;B2B5;1102 1174 11B0; +B2B6;B2B6;1102 1174 11B1;B2B6;1102 1174 11B1; +B2B7;B2B7;1102 1174 11B2;B2B7;1102 1174 11B2; +B2B8;B2B8;1102 1174 11B3;B2B8;1102 1174 11B3; +B2B9;B2B9;1102 1174 11B4;B2B9;1102 1174 11B4; +B2BA;B2BA;1102 1174 11B5;B2BA;1102 1174 11B5; +B2BB;B2BB;1102 1174 11B6;B2BB;1102 1174 11B6; +B2BC;B2BC;1102 1174 11B7;B2BC;1102 1174 11B7; +B2BD;B2BD;1102 1174 11B8;B2BD;1102 1174 11B8; +B2BE;B2BE;1102 1174 11B9;B2BE;1102 1174 11B9; +B2BF;B2BF;1102 1174 11BA;B2BF;1102 1174 11BA; +B2C0;B2C0;1102 1174 11BB;B2C0;1102 1174 11BB; +B2C1;B2C1;1102 1174 11BC;B2C1;1102 1174 11BC; +B2C2;B2C2;1102 1174 11BD;B2C2;1102 1174 11BD; +B2C3;B2C3;1102 1174 11BE;B2C3;1102 1174 11BE; +B2C4;B2C4;1102 1174 11BF;B2C4;1102 1174 11BF; +B2C5;B2C5;1102 1174 11C0;B2C5;1102 1174 11C0; +B2C6;B2C6;1102 1174 11C1;B2C6;1102 1174 11C1; +B2C7;B2C7;1102 1174 11C2;B2C7;1102 1174 11C2; +B2C8;B2C8;1102 1175;B2C8;1102 1175; +B2C9;B2C9;1102 1175 11A8;B2C9;1102 1175 11A8; +B2CA;B2CA;1102 1175 11A9;B2CA;1102 1175 11A9; +B2CB;B2CB;1102 1175 11AA;B2CB;1102 1175 11AA; +B2CC;B2CC;1102 1175 11AB;B2CC;1102 1175 11AB; +B2CD;B2CD;1102 1175 11AC;B2CD;1102 1175 11AC; +B2CE;B2CE;1102 1175 11AD;B2CE;1102 1175 11AD; +B2CF;B2CF;1102 1175 11AE;B2CF;1102 1175 11AE; +B2D0;B2D0;1102 1175 11AF;B2D0;1102 1175 11AF; +B2D1;B2D1;1102 1175 11B0;B2D1;1102 1175 11B0; +B2D2;B2D2;1102 1175 11B1;B2D2;1102 1175 11B1; +B2D3;B2D3;1102 1175 11B2;B2D3;1102 1175 11B2; +B2D4;B2D4;1102 1175 11B3;B2D4;1102 1175 11B3; +B2D5;B2D5;1102 1175 11B4;B2D5;1102 1175 11B4; +B2D6;B2D6;1102 1175 11B5;B2D6;1102 1175 11B5; +B2D7;B2D7;1102 1175 11B6;B2D7;1102 1175 11B6; +B2D8;B2D8;1102 1175 11B7;B2D8;1102 1175 11B7; +B2D9;B2D9;1102 1175 11B8;B2D9;1102 1175 11B8; +B2DA;B2DA;1102 1175 11B9;B2DA;1102 1175 11B9; +B2DB;B2DB;1102 1175 11BA;B2DB;1102 1175 11BA; +B2DC;B2DC;1102 1175 11BB;B2DC;1102 1175 11BB; +B2DD;B2DD;1102 1175 11BC;B2DD;1102 1175 11BC; +B2DE;B2DE;1102 1175 11BD;B2DE;1102 1175 11BD; +B2DF;B2DF;1102 1175 11BE;B2DF;1102 1175 11BE; +B2E0;B2E0;1102 1175 11BF;B2E0;1102 1175 11BF; +B2E1;B2E1;1102 1175 11C0;B2E1;1102 1175 11C0; +B2E2;B2E2;1102 1175 11C1;B2E2;1102 1175 11C1; +B2E3;B2E3;1102 1175 11C2;B2E3;1102 1175 11C2; +B2E4;B2E4;1103 1161;B2E4;1103 1161; +B2E5;B2E5;1103 1161 11A8;B2E5;1103 1161 11A8; +B2E6;B2E6;1103 1161 11A9;B2E6;1103 1161 11A9; +B2E7;B2E7;1103 1161 11AA;B2E7;1103 1161 11AA; +B2E8;B2E8;1103 1161 11AB;B2E8;1103 1161 11AB; +B2E9;B2E9;1103 1161 11AC;B2E9;1103 1161 11AC; +B2EA;B2EA;1103 1161 11AD;B2EA;1103 1161 11AD; +B2EB;B2EB;1103 1161 11AE;B2EB;1103 1161 11AE; +B2EC;B2EC;1103 1161 11AF;B2EC;1103 1161 11AF; +B2ED;B2ED;1103 1161 11B0;B2ED;1103 1161 11B0; +B2EE;B2EE;1103 1161 11B1;B2EE;1103 1161 11B1; +B2EF;B2EF;1103 1161 11B2;B2EF;1103 1161 11B2; +B2F0;B2F0;1103 1161 11B3;B2F0;1103 1161 11B3; +B2F1;B2F1;1103 1161 11B4;B2F1;1103 1161 11B4; +B2F2;B2F2;1103 1161 11B5;B2F2;1103 1161 11B5; +B2F3;B2F3;1103 1161 11B6;B2F3;1103 1161 11B6; +B2F4;B2F4;1103 1161 11B7;B2F4;1103 1161 11B7; +B2F5;B2F5;1103 1161 11B8;B2F5;1103 1161 11B8; +B2F6;B2F6;1103 1161 11B9;B2F6;1103 1161 11B9; +B2F7;B2F7;1103 1161 11BA;B2F7;1103 1161 11BA; +B2F8;B2F8;1103 1161 11BB;B2F8;1103 1161 11BB; +B2F9;B2F9;1103 1161 11BC;B2F9;1103 1161 11BC; +B2FA;B2FA;1103 1161 11BD;B2FA;1103 1161 11BD; +B2FB;B2FB;1103 1161 11BE;B2FB;1103 1161 11BE; +B2FC;B2FC;1103 1161 11BF;B2FC;1103 1161 11BF; +B2FD;B2FD;1103 1161 11C0;B2FD;1103 1161 11C0; +B2FE;B2FE;1103 1161 11C1;B2FE;1103 1161 11C1; +B2FF;B2FF;1103 1161 11C2;B2FF;1103 1161 11C2; +B300;B300;1103 1162;B300;1103 1162; +B301;B301;1103 1162 11A8;B301;1103 1162 11A8; +B302;B302;1103 1162 11A9;B302;1103 1162 11A9; +B303;B303;1103 1162 11AA;B303;1103 1162 11AA; +B304;B304;1103 1162 11AB;B304;1103 1162 11AB; +B305;B305;1103 1162 11AC;B305;1103 1162 11AC; +B306;B306;1103 1162 11AD;B306;1103 1162 11AD; +B307;B307;1103 1162 11AE;B307;1103 1162 11AE; +B308;B308;1103 1162 11AF;B308;1103 1162 11AF; +B309;B309;1103 1162 11B0;B309;1103 1162 11B0; +B30A;B30A;1103 1162 11B1;B30A;1103 1162 11B1; +B30B;B30B;1103 1162 11B2;B30B;1103 1162 11B2; +B30C;B30C;1103 1162 11B3;B30C;1103 1162 11B3; +B30D;B30D;1103 1162 11B4;B30D;1103 1162 11B4; +B30E;B30E;1103 1162 11B5;B30E;1103 1162 11B5; +B30F;B30F;1103 1162 11B6;B30F;1103 1162 11B6; +B310;B310;1103 1162 11B7;B310;1103 1162 11B7; +B311;B311;1103 1162 11B8;B311;1103 1162 11B8; +B312;B312;1103 1162 11B9;B312;1103 1162 11B9; +B313;B313;1103 1162 11BA;B313;1103 1162 11BA; +B314;B314;1103 1162 11BB;B314;1103 1162 11BB; +B315;B315;1103 1162 11BC;B315;1103 1162 11BC; +B316;B316;1103 1162 11BD;B316;1103 1162 11BD; +B317;B317;1103 1162 11BE;B317;1103 1162 11BE; +B318;B318;1103 1162 11BF;B318;1103 1162 11BF; +B319;B319;1103 1162 11C0;B319;1103 1162 11C0; +B31A;B31A;1103 1162 11C1;B31A;1103 1162 11C1; +B31B;B31B;1103 1162 11C2;B31B;1103 1162 11C2; +B31C;B31C;1103 1163;B31C;1103 1163; +B31D;B31D;1103 1163 11A8;B31D;1103 1163 11A8; +B31E;B31E;1103 1163 11A9;B31E;1103 1163 11A9; +B31F;B31F;1103 1163 11AA;B31F;1103 1163 11AA; +B320;B320;1103 1163 11AB;B320;1103 1163 11AB; +B321;B321;1103 1163 11AC;B321;1103 1163 11AC; +B322;B322;1103 1163 11AD;B322;1103 1163 11AD; +B323;B323;1103 1163 11AE;B323;1103 1163 11AE; +B324;B324;1103 1163 11AF;B324;1103 1163 11AF; +B325;B325;1103 1163 11B0;B325;1103 1163 11B0; +B326;B326;1103 1163 11B1;B326;1103 1163 11B1; +B327;B327;1103 1163 11B2;B327;1103 1163 11B2; +B328;B328;1103 1163 11B3;B328;1103 1163 11B3; +B329;B329;1103 1163 11B4;B329;1103 1163 11B4; +B32A;B32A;1103 1163 11B5;B32A;1103 1163 11B5; +B32B;B32B;1103 1163 11B6;B32B;1103 1163 11B6; +B32C;B32C;1103 1163 11B7;B32C;1103 1163 11B7; +B32D;B32D;1103 1163 11B8;B32D;1103 1163 11B8; +B32E;B32E;1103 1163 11B9;B32E;1103 1163 11B9; +B32F;B32F;1103 1163 11BA;B32F;1103 1163 11BA; +B330;B330;1103 1163 11BB;B330;1103 1163 11BB; +B331;B331;1103 1163 11BC;B331;1103 1163 11BC; +B332;B332;1103 1163 11BD;B332;1103 1163 11BD; +B333;B333;1103 1163 11BE;B333;1103 1163 11BE; +B334;B334;1103 1163 11BF;B334;1103 1163 11BF; +B335;B335;1103 1163 11C0;B335;1103 1163 11C0; +B336;B336;1103 1163 11C1;B336;1103 1163 11C1; +B337;B337;1103 1163 11C2;B337;1103 1163 11C2; +B338;B338;1103 1164;B338;1103 1164; +B339;B339;1103 1164 11A8;B339;1103 1164 11A8; +B33A;B33A;1103 1164 11A9;B33A;1103 1164 11A9; +B33B;B33B;1103 1164 11AA;B33B;1103 1164 11AA; +B33C;B33C;1103 1164 11AB;B33C;1103 1164 11AB; +B33D;B33D;1103 1164 11AC;B33D;1103 1164 11AC; +B33E;B33E;1103 1164 11AD;B33E;1103 1164 11AD; +B33F;B33F;1103 1164 11AE;B33F;1103 1164 11AE; +B340;B340;1103 1164 11AF;B340;1103 1164 11AF; +B341;B341;1103 1164 11B0;B341;1103 1164 11B0; +B342;B342;1103 1164 11B1;B342;1103 1164 11B1; +B343;B343;1103 1164 11B2;B343;1103 1164 11B2; +B344;B344;1103 1164 11B3;B344;1103 1164 11B3; +B345;B345;1103 1164 11B4;B345;1103 1164 11B4; +B346;B346;1103 1164 11B5;B346;1103 1164 11B5; +B347;B347;1103 1164 11B6;B347;1103 1164 11B6; +B348;B348;1103 1164 11B7;B348;1103 1164 11B7; +B349;B349;1103 1164 11B8;B349;1103 1164 11B8; +B34A;B34A;1103 1164 11B9;B34A;1103 1164 11B9; +B34B;B34B;1103 1164 11BA;B34B;1103 1164 11BA; +B34C;B34C;1103 1164 11BB;B34C;1103 1164 11BB; +B34D;B34D;1103 1164 11BC;B34D;1103 1164 11BC; +B34E;B34E;1103 1164 11BD;B34E;1103 1164 11BD; +B34F;B34F;1103 1164 11BE;B34F;1103 1164 11BE; +B350;B350;1103 1164 11BF;B350;1103 1164 11BF; +B351;B351;1103 1164 11C0;B351;1103 1164 11C0; +B352;B352;1103 1164 11C1;B352;1103 1164 11C1; +B353;B353;1103 1164 11C2;B353;1103 1164 11C2; +B354;B354;1103 1165;B354;1103 1165; +B355;B355;1103 1165 11A8;B355;1103 1165 11A8; +B356;B356;1103 1165 11A9;B356;1103 1165 11A9; +B357;B357;1103 1165 11AA;B357;1103 1165 11AA; +B358;B358;1103 1165 11AB;B358;1103 1165 11AB; +B359;B359;1103 1165 11AC;B359;1103 1165 11AC; +B35A;B35A;1103 1165 11AD;B35A;1103 1165 11AD; +B35B;B35B;1103 1165 11AE;B35B;1103 1165 11AE; +B35C;B35C;1103 1165 11AF;B35C;1103 1165 11AF; +B35D;B35D;1103 1165 11B0;B35D;1103 1165 11B0; +B35E;B35E;1103 1165 11B1;B35E;1103 1165 11B1; +B35F;B35F;1103 1165 11B2;B35F;1103 1165 11B2; +B360;B360;1103 1165 11B3;B360;1103 1165 11B3; +B361;B361;1103 1165 11B4;B361;1103 1165 11B4; +B362;B362;1103 1165 11B5;B362;1103 1165 11B5; +B363;B363;1103 1165 11B6;B363;1103 1165 11B6; +B364;B364;1103 1165 11B7;B364;1103 1165 11B7; +B365;B365;1103 1165 11B8;B365;1103 1165 11B8; +B366;B366;1103 1165 11B9;B366;1103 1165 11B9; +B367;B367;1103 1165 11BA;B367;1103 1165 11BA; +B368;B368;1103 1165 11BB;B368;1103 1165 11BB; +B369;B369;1103 1165 11BC;B369;1103 1165 11BC; +B36A;B36A;1103 1165 11BD;B36A;1103 1165 11BD; +B36B;B36B;1103 1165 11BE;B36B;1103 1165 11BE; +B36C;B36C;1103 1165 11BF;B36C;1103 1165 11BF; +B36D;B36D;1103 1165 11C0;B36D;1103 1165 11C0; +B36E;B36E;1103 1165 11C1;B36E;1103 1165 11C1; +B36F;B36F;1103 1165 11C2;B36F;1103 1165 11C2; +B370;B370;1103 1166;B370;1103 1166; +B371;B371;1103 1166 11A8;B371;1103 1166 11A8; +B372;B372;1103 1166 11A9;B372;1103 1166 11A9; +B373;B373;1103 1166 11AA;B373;1103 1166 11AA; +B374;B374;1103 1166 11AB;B374;1103 1166 11AB; +B375;B375;1103 1166 11AC;B375;1103 1166 11AC; +B376;B376;1103 1166 11AD;B376;1103 1166 11AD; +B377;B377;1103 1166 11AE;B377;1103 1166 11AE; +B378;B378;1103 1166 11AF;B378;1103 1166 11AF; +B379;B379;1103 1166 11B0;B379;1103 1166 11B0; +B37A;B37A;1103 1166 11B1;B37A;1103 1166 11B1; +B37B;B37B;1103 1166 11B2;B37B;1103 1166 11B2; +B37C;B37C;1103 1166 11B3;B37C;1103 1166 11B3; +B37D;B37D;1103 1166 11B4;B37D;1103 1166 11B4; +B37E;B37E;1103 1166 11B5;B37E;1103 1166 11B5; +B37F;B37F;1103 1166 11B6;B37F;1103 1166 11B6; +B380;B380;1103 1166 11B7;B380;1103 1166 11B7; +B381;B381;1103 1166 11B8;B381;1103 1166 11B8; +B382;B382;1103 1166 11B9;B382;1103 1166 11B9; +B383;B383;1103 1166 11BA;B383;1103 1166 11BA; +B384;B384;1103 1166 11BB;B384;1103 1166 11BB; +B385;B385;1103 1166 11BC;B385;1103 1166 11BC; +B386;B386;1103 1166 11BD;B386;1103 1166 11BD; +B387;B387;1103 1166 11BE;B387;1103 1166 11BE; +B388;B388;1103 1166 11BF;B388;1103 1166 11BF; +B389;B389;1103 1166 11C0;B389;1103 1166 11C0; +B38A;B38A;1103 1166 11C1;B38A;1103 1166 11C1; +B38B;B38B;1103 1166 11C2;B38B;1103 1166 11C2; +B38C;B38C;1103 1167;B38C;1103 1167; +B38D;B38D;1103 1167 11A8;B38D;1103 1167 11A8; +B38E;B38E;1103 1167 11A9;B38E;1103 1167 11A9; +B38F;B38F;1103 1167 11AA;B38F;1103 1167 11AA; +B390;B390;1103 1167 11AB;B390;1103 1167 11AB; +B391;B391;1103 1167 11AC;B391;1103 1167 11AC; +B392;B392;1103 1167 11AD;B392;1103 1167 11AD; +B393;B393;1103 1167 11AE;B393;1103 1167 11AE; +B394;B394;1103 1167 11AF;B394;1103 1167 11AF; +B395;B395;1103 1167 11B0;B395;1103 1167 11B0; +B396;B396;1103 1167 11B1;B396;1103 1167 11B1; +B397;B397;1103 1167 11B2;B397;1103 1167 11B2; +B398;B398;1103 1167 11B3;B398;1103 1167 11B3; +B399;B399;1103 1167 11B4;B399;1103 1167 11B4; +B39A;B39A;1103 1167 11B5;B39A;1103 1167 11B5; +B39B;B39B;1103 1167 11B6;B39B;1103 1167 11B6; +B39C;B39C;1103 1167 11B7;B39C;1103 1167 11B7; +B39D;B39D;1103 1167 11B8;B39D;1103 1167 11B8; +B39E;B39E;1103 1167 11B9;B39E;1103 1167 11B9; +B39F;B39F;1103 1167 11BA;B39F;1103 1167 11BA; +B3A0;B3A0;1103 1167 11BB;B3A0;1103 1167 11BB; +B3A1;B3A1;1103 1167 11BC;B3A1;1103 1167 11BC; +B3A2;B3A2;1103 1167 11BD;B3A2;1103 1167 11BD; +B3A3;B3A3;1103 1167 11BE;B3A3;1103 1167 11BE; +B3A4;B3A4;1103 1167 11BF;B3A4;1103 1167 11BF; +B3A5;B3A5;1103 1167 11C0;B3A5;1103 1167 11C0; +B3A6;B3A6;1103 1167 11C1;B3A6;1103 1167 11C1; +B3A7;B3A7;1103 1167 11C2;B3A7;1103 1167 11C2; +B3A8;B3A8;1103 1168;B3A8;1103 1168; +B3A9;B3A9;1103 1168 11A8;B3A9;1103 1168 11A8; +B3AA;B3AA;1103 1168 11A9;B3AA;1103 1168 11A9; +B3AB;B3AB;1103 1168 11AA;B3AB;1103 1168 11AA; +B3AC;B3AC;1103 1168 11AB;B3AC;1103 1168 11AB; +B3AD;B3AD;1103 1168 11AC;B3AD;1103 1168 11AC; +B3AE;B3AE;1103 1168 11AD;B3AE;1103 1168 11AD; +B3AF;B3AF;1103 1168 11AE;B3AF;1103 1168 11AE; +B3B0;B3B0;1103 1168 11AF;B3B0;1103 1168 11AF; +B3B1;B3B1;1103 1168 11B0;B3B1;1103 1168 11B0; +B3B2;B3B2;1103 1168 11B1;B3B2;1103 1168 11B1; +B3B3;B3B3;1103 1168 11B2;B3B3;1103 1168 11B2; +B3B4;B3B4;1103 1168 11B3;B3B4;1103 1168 11B3; +B3B5;B3B5;1103 1168 11B4;B3B5;1103 1168 11B4; +B3B6;B3B6;1103 1168 11B5;B3B6;1103 1168 11B5; +B3B7;B3B7;1103 1168 11B6;B3B7;1103 1168 11B6; +B3B8;B3B8;1103 1168 11B7;B3B8;1103 1168 11B7; +B3B9;B3B9;1103 1168 11B8;B3B9;1103 1168 11B8; +B3BA;B3BA;1103 1168 11B9;B3BA;1103 1168 11B9; +B3BB;B3BB;1103 1168 11BA;B3BB;1103 1168 11BA; +B3BC;B3BC;1103 1168 11BB;B3BC;1103 1168 11BB; +B3BD;B3BD;1103 1168 11BC;B3BD;1103 1168 11BC; +B3BE;B3BE;1103 1168 11BD;B3BE;1103 1168 11BD; +B3BF;B3BF;1103 1168 11BE;B3BF;1103 1168 11BE; +B3C0;B3C0;1103 1168 11BF;B3C0;1103 1168 11BF; +B3C1;B3C1;1103 1168 11C0;B3C1;1103 1168 11C0; +B3C2;B3C2;1103 1168 11C1;B3C2;1103 1168 11C1; +B3C3;B3C3;1103 1168 11C2;B3C3;1103 1168 11C2; +B3C4;B3C4;1103 1169;B3C4;1103 1169; +B3C5;B3C5;1103 1169 11A8;B3C5;1103 1169 11A8; +B3C6;B3C6;1103 1169 11A9;B3C6;1103 1169 11A9; +B3C7;B3C7;1103 1169 11AA;B3C7;1103 1169 11AA; +B3C8;B3C8;1103 1169 11AB;B3C8;1103 1169 11AB; +B3C9;B3C9;1103 1169 11AC;B3C9;1103 1169 11AC; +B3CA;B3CA;1103 1169 11AD;B3CA;1103 1169 11AD; +B3CB;B3CB;1103 1169 11AE;B3CB;1103 1169 11AE; +B3CC;B3CC;1103 1169 11AF;B3CC;1103 1169 11AF; +B3CD;B3CD;1103 1169 11B0;B3CD;1103 1169 11B0; +B3CE;B3CE;1103 1169 11B1;B3CE;1103 1169 11B1; +B3CF;B3CF;1103 1169 11B2;B3CF;1103 1169 11B2; +B3D0;B3D0;1103 1169 11B3;B3D0;1103 1169 11B3; +B3D1;B3D1;1103 1169 11B4;B3D1;1103 1169 11B4; +B3D2;B3D2;1103 1169 11B5;B3D2;1103 1169 11B5; +B3D3;B3D3;1103 1169 11B6;B3D3;1103 1169 11B6; +B3D4;B3D4;1103 1169 11B7;B3D4;1103 1169 11B7; +B3D5;B3D5;1103 1169 11B8;B3D5;1103 1169 11B8; +B3D6;B3D6;1103 1169 11B9;B3D6;1103 1169 11B9; +B3D7;B3D7;1103 1169 11BA;B3D7;1103 1169 11BA; +B3D8;B3D8;1103 1169 11BB;B3D8;1103 1169 11BB; +B3D9;B3D9;1103 1169 11BC;B3D9;1103 1169 11BC; +B3DA;B3DA;1103 1169 11BD;B3DA;1103 1169 11BD; +B3DB;B3DB;1103 1169 11BE;B3DB;1103 1169 11BE; +B3DC;B3DC;1103 1169 11BF;B3DC;1103 1169 11BF; +B3DD;B3DD;1103 1169 11C0;B3DD;1103 1169 11C0; +B3DE;B3DE;1103 1169 11C1;B3DE;1103 1169 11C1; +B3DF;B3DF;1103 1169 11C2;B3DF;1103 1169 11C2; +B3E0;B3E0;1103 116A;B3E0;1103 116A; +B3E1;B3E1;1103 116A 11A8;B3E1;1103 116A 11A8; +B3E2;B3E2;1103 116A 11A9;B3E2;1103 116A 11A9; +B3E3;B3E3;1103 116A 11AA;B3E3;1103 116A 11AA; +B3E4;B3E4;1103 116A 11AB;B3E4;1103 116A 11AB; +B3E5;B3E5;1103 116A 11AC;B3E5;1103 116A 11AC; +B3E6;B3E6;1103 116A 11AD;B3E6;1103 116A 11AD; +B3E7;B3E7;1103 116A 11AE;B3E7;1103 116A 11AE; +B3E8;B3E8;1103 116A 11AF;B3E8;1103 116A 11AF; +B3E9;B3E9;1103 116A 11B0;B3E9;1103 116A 11B0; +B3EA;B3EA;1103 116A 11B1;B3EA;1103 116A 11B1; +B3EB;B3EB;1103 116A 11B2;B3EB;1103 116A 11B2; +B3EC;B3EC;1103 116A 11B3;B3EC;1103 116A 11B3; +B3ED;B3ED;1103 116A 11B4;B3ED;1103 116A 11B4; +B3EE;B3EE;1103 116A 11B5;B3EE;1103 116A 11B5; +B3EF;B3EF;1103 116A 11B6;B3EF;1103 116A 11B6; +B3F0;B3F0;1103 116A 11B7;B3F0;1103 116A 11B7; +B3F1;B3F1;1103 116A 11B8;B3F1;1103 116A 11B8; +B3F2;B3F2;1103 116A 11B9;B3F2;1103 116A 11B9; +B3F3;B3F3;1103 116A 11BA;B3F3;1103 116A 11BA; +B3F4;B3F4;1103 116A 11BB;B3F4;1103 116A 11BB; +B3F5;B3F5;1103 116A 11BC;B3F5;1103 116A 11BC; +B3F6;B3F6;1103 116A 11BD;B3F6;1103 116A 11BD; +B3F7;B3F7;1103 116A 11BE;B3F7;1103 116A 11BE; +B3F8;B3F8;1103 116A 11BF;B3F8;1103 116A 11BF; +B3F9;B3F9;1103 116A 11C0;B3F9;1103 116A 11C0; +B3FA;B3FA;1103 116A 11C1;B3FA;1103 116A 11C1; +B3FB;B3FB;1103 116A 11C2;B3FB;1103 116A 11C2; +B3FC;B3FC;1103 116B;B3FC;1103 116B; +B3FD;B3FD;1103 116B 11A8;B3FD;1103 116B 11A8; +B3FE;B3FE;1103 116B 11A9;B3FE;1103 116B 11A9; +B3FF;B3FF;1103 116B 11AA;B3FF;1103 116B 11AA; +B400;B400;1103 116B 11AB;B400;1103 116B 11AB; +B401;B401;1103 116B 11AC;B401;1103 116B 11AC; +B402;B402;1103 116B 11AD;B402;1103 116B 11AD; +B403;B403;1103 116B 11AE;B403;1103 116B 11AE; +B404;B404;1103 116B 11AF;B404;1103 116B 11AF; +B405;B405;1103 116B 11B0;B405;1103 116B 11B0; +B406;B406;1103 116B 11B1;B406;1103 116B 11B1; +B407;B407;1103 116B 11B2;B407;1103 116B 11B2; +B408;B408;1103 116B 11B3;B408;1103 116B 11B3; +B409;B409;1103 116B 11B4;B409;1103 116B 11B4; +B40A;B40A;1103 116B 11B5;B40A;1103 116B 11B5; +B40B;B40B;1103 116B 11B6;B40B;1103 116B 11B6; +B40C;B40C;1103 116B 11B7;B40C;1103 116B 11B7; +B40D;B40D;1103 116B 11B8;B40D;1103 116B 11B8; +B40E;B40E;1103 116B 11B9;B40E;1103 116B 11B9; +B40F;B40F;1103 116B 11BA;B40F;1103 116B 11BA; +B410;B410;1103 116B 11BB;B410;1103 116B 11BB; +B411;B411;1103 116B 11BC;B411;1103 116B 11BC; +B412;B412;1103 116B 11BD;B412;1103 116B 11BD; +B413;B413;1103 116B 11BE;B413;1103 116B 11BE; +B414;B414;1103 116B 11BF;B414;1103 116B 11BF; +B415;B415;1103 116B 11C0;B415;1103 116B 11C0; +B416;B416;1103 116B 11C1;B416;1103 116B 11C1; +B417;B417;1103 116B 11C2;B417;1103 116B 11C2; +B418;B418;1103 116C;B418;1103 116C; +B419;B419;1103 116C 11A8;B419;1103 116C 11A8; +B41A;B41A;1103 116C 11A9;B41A;1103 116C 11A9; +B41B;B41B;1103 116C 11AA;B41B;1103 116C 11AA; +B41C;B41C;1103 116C 11AB;B41C;1103 116C 11AB; +B41D;B41D;1103 116C 11AC;B41D;1103 116C 11AC; +B41E;B41E;1103 116C 11AD;B41E;1103 116C 11AD; +B41F;B41F;1103 116C 11AE;B41F;1103 116C 11AE; +B420;B420;1103 116C 11AF;B420;1103 116C 11AF; +B421;B421;1103 116C 11B0;B421;1103 116C 11B0; +B422;B422;1103 116C 11B1;B422;1103 116C 11B1; +B423;B423;1103 116C 11B2;B423;1103 116C 11B2; +B424;B424;1103 116C 11B3;B424;1103 116C 11B3; +B425;B425;1103 116C 11B4;B425;1103 116C 11B4; +B426;B426;1103 116C 11B5;B426;1103 116C 11B5; +B427;B427;1103 116C 11B6;B427;1103 116C 11B6; +B428;B428;1103 116C 11B7;B428;1103 116C 11B7; +B429;B429;1103 116C 11B8;B429;1103 116C 11B8; +B42A;B42A;1103 116C 11B9;B42A;1103 116C 11B9; +B42B;B42B;1103 116C 11BA;B42B;1103 116C 11BA; +B42C;B42C;1103 116C 11BB;B42C;1103 116C 11BB; +B42D;B42D;1103 116C 11BC;B42D;1103 116C 11BC; +B42E;B42E;1103 116C 11BD;B42E;1103 116C 11BD; +B42F;B42F;1103 116C 11BE;B42F;1103 116C 11BE; +B430;B430;1103 116C 11BF;B430;1103 116C 11BF; +B431;B431;1103 116C 11C0;B431;1103 116C 11C0; +B432;B432;1103 116C 11C1;B432;1103 116C 11C1; +B433;B433;1103 116C 11C2;B433;1103 116C 11C2; +B434;B434;1103 116D;B434;1103 116D; +B435;B435;1103 116D 11A8;B435;1103 116D 11A8; +B436;B436;1103 116D 11A9;B436;1103 116D 11A9; +B437;B437;1103 116D 11AA;B437;1103 116D 11AA; +B438;B438;1103 116D 11AB;B438;1103 116D 11AB; +B439;B439;1103 116D 11AC;B439;1103 116D 11AC; +B43A;B43A;1103 116D 11AD;B43A;1103 116D 11AD; +B43B;B43B;1103 116D 11AE;B43B;1103 116D 11AE; +B43C;B43C;1103 116D 11AF;B43C;1103 116D 11AF; +B43D;B43D;1103 116D 11B0;B43D;1103 116D 11B0; +B43E;B43E;1103 116D 11B1;B43E;1103 116D 11B1; +B43F;B43F;1103 116D 11B2;B43F;1103 116D 11B2; +B440;B440;1103 116D 11B3;B440;1103 116D 11B3; +B441;B441;1103 116D 11B4;B441;1103 116D 11B4; +B442;B442;1103 116D 11B5;B442;1103 116D 11B5; +B443;B443;1103 116D 11B6;B443;1103 116D 11B6; +B444;B444;1103 116D 11B7;B444;1103 116D 11B7; +B445;B445;1103 116D 11B8;B445;1103 116D 11B8; +B446;B446;1103 116D 11B9;B446;1103 116D 11B9; +B447;B447;1103 116D 11BA;B447;1103 116D 11BA; +B448;B448;1103 116D 11BB;B448;1103 116D 11BB; +B449;B449;1103 116D 11BC;B449;1103 116D 11BC; +B44A;B44A;1103 116D 11BD;B44A;1103 116D 11BD; +B44B;B44B;1103 116D 11BE;B44B;1103 116D 11BE; +B44C;B44C;1103 116D 11BF;B44C;1103 116D 11BF; +B44D;B44D;1103 116D 11C0;B44D;1103 116D 11C0; +B44E;B44E;1103 116D 11C1;B44E;1103 116D 11C1; +B44F;B44F;1103 116D 11C2;B44F;1103 116D 11C2; +B450;B450;1103 116E;B450;1103 116E; +B451;B451;1103 116E 11A8;B451;1103 116E 11A8; +B452;B452;1103 116E 11A9;B452;1103 116E 11A9; +B453;B453;1103 116E 11AA;B453;1103 116E 11AA; +B454;B454;1103 116E 11AB;B454;1103 116E 11AB; +B455;B455;1103 116E 11AC;B455;1103 116E 11AC; +B456;B456;1103 116E 11AD;B456;1103 116E 11AD; +B457;B457;1103 116E 11AE;B457;1103 116E 11AE; +B458;B458;1103 116E 11AF;B458;1103 116E 11AF; +B459;B459;1103 116E 11B0;B459;1103 116E 11B0; +B45A;B45A;1103 116E 11B1;B45A;1103 116E 11B1; +B45B;B45B;1103 116E 11B2;B45B;1103 116E 11B2; +B45C;B45C;1103 116E 11B3;B45C;1103 116E 11B3; +B45D;B45D;1103 116E 11B4;B45D;1103 116E 11B4; +B45E;B45E;1103 116E 11B5;B45E;1103 116E 11B5; +B45F;B45F;1103 116E 11B6;B45F;1103 116E 11B6; +B460;B460;1103 116E 11B7;B460;1103 116E 11B7; +B461;B461;1103 116E 11B8;B461;1103 116E 11B8; +B462;B462;1103 116E 11B9;B462;1103 116E 11B9; +B463;B463;1103 116E 11BA;B463;1103 116E 11BA; +B464;B464;1103 116E 11BB;B464;1103 116E 11BB; +B465;B465;1103 116E 11BC;B465;1103 116E 11BC; +B466;B466;1103 116E 11BD;B466;1103 116E 11BD; +B467;B467;1103 116E 11BE;B467;1103 116E 11BE; +B468;B468;1103 116E 11BF;B468;1103 116E 11BF; +B469;B469;1103 116E 11C0;B469;1103 116E 11C0; +B46A;B46A;1103 116E 11C1;B46A;1103 116E 11C1; +B46B;B46B;1103 116E 11C2;B46B;1103 116E 11C2; +B46C;B46C;1103 116F;B46C;1103 116F; +B46D;B46D;1103 116F 11A8;B46D;1103 116F 11A8; +B46E;B46E;1103 116F 11A9;B46E;1103 116F 11A9; +B46F;B46F;1103 116F 11AA;B46F;1103 116F 11AA; +B470;B470;1103 116F 11AB;B470;1103 116F 11AB; +B471;B471;1103 116F 11AC;B471;1103 116F 11AC; +B472;B472;1103 116F 11AD;B472;1103 116F 11AD; +B473;B473;1103 116F 11AE;B473;1103 116F 11AE; +B474;B474;1103 116F 11AF;B474;1103 116F 11AF; +B475;B475;1103 116F 11B0;B475;1103 116F 11B0; +B476;B476;1103 116F 11B1;B476;1103 116F 11B1; +B477;B477;1103 116F 11B2;B477;1103 116F 11B2; +B478;B478;1103 116F 11B3;B478;1103 116F 11B3; +B479;B479;1103 116F 11B4;B479;1103 116F 11B4; +B47A;B47A;1103 116F 11B5;B47A;1103 116F 11B5; +B47B;B47B;1103 116F 11B6;B47B;1103 116F 11B6; +B47C;B47C;1103 116F 11B7;B47C;1103 116F 11B7; +B47D;B47D;1103 116F 11B8;B47D;1103 116F 11B8; +B47E;B47E;1103 116F 11B9;B47E;1103 116F 11B9; +B47F;B47F;1103 116F 11BA;B47F;1103 116F 11BA; +B480;B480;1103 116F 11BB;B480;1103 116F 11BB; +B481;B481;1103 116F 11BC;B481;1103 116F 11BC; +B482;B482;1103 116F 11BD;B482;1103 116F 11BD; +B483;B483;1103 116F 11BE;B483;1103 116F 11BE; +B484;B484;1103 116F 11BF;B484;1103 116F 11BF; +B485;B485;1103 116F 11C0;B485;1103 116F 11C0; +B486;B486;1103 116F 11C1;B486;1103 116F 11C1; +B487;B487;1103 116F 11C2;B487;1103 116F 11C2; +B488;B488;1103 1170;B488;1103 1170; +B489;B489;1103 1170 11A8;B489;1103 1170 11A8; +B48A;B48A;1103 1170 11A9;B48A;1103 1170 11A9; +B48B;B48B;1103 1170 11AA;B48B;1103 1170 11AA; +B48C;B48C;1103 1170 11AB;B48C;1103 1170 11AB; +B48D;B48D;1103 1170 11AC;B48D;1103 1170 11AC; +B48E;B48E;1103 1170 11AD;B48E;1103 1170 11AD; +B48F;B48F;1103 1170 11AE;B48F;1103 1170 11AE; +B490;B490;1103 1170 11AF;B490;1103 1170 11AF; +B491;B491;1103 1170 11B0;B491;1103 1170 11B0; +B492;B492;1103 1170 11B1;B492;1103 1170 11B1; +B493;B493;1103 1170 11B2;B493;1103 1170 11B2; +B494;B494;1103 1170 11B3;B494;1103 1170 11B3; +B495;B495;1103 1170 11B4;B495;1103 1170 11B4; +B496;B496;1103 1170 11B5;B496;1103 1170 11B5; +B497;B497;1103 1170 11B6;B497;1103 1170 11B6; +B498;B498;1103 1170 11B7;B498;1103 1170 11B7; +B499;B499;1103 1170 11B8;B499;1103 1170 11B8; +B49A;B49A;1103 1170 11B9;B49A;1103 1170 11B9; +B49B;B49B;1103 1170 11BA;B49B;1103 1170 11BA; +B49C;B49C;1103 1170 11BB;B49C;1103 1170 11BB; +B49D;B49D;1103 1170 11BC;B49D;1103 1170 11BC; +B49E;B49E;1103 1170 11BD;B49E;1103 1170 11BD; +B49F;B49F;1103 1170 11BE;B49F;1103 1170 11BE; +B4A0;B4A0;1103 1170 11BF;B4A0;1103 1170 11BF; +B4A1;B4A1;1103 1170 11C0;B4A1;1103 1170 11C0; +B4A2;B4A2;1103 1170 11C1;B4A2;1103 1170 11C1; +B4A3;B4A3;1103 1170 11C2;B4A3;1103 1170 11C2; +B4A4;B4A4;1103 1171;B4A4;1103 1171; +B4A5;B4A5;1103 1171 11A8;B4A5;1103 1171 11A8; +B4A6;B4A6;1103 1171 11A9;B4A6;1103 1171 11A9; +B4A7;B4A7;1103 1171 11AA;B4A7;1103 1171 11AA; +B4A8;B4A8;1103 1171 11AB;B4A8;1103 1171 11AB; +B4A9;B4A9;1103 1171 11AC;B4A9;1103 1171 11AC; +B4AA;B4AA;1103 1171 11AD;B4AA;1103 1171 11AD; +B4AB;B4AB;1103 1171 11AE;B4AB;1103 1171 11AE; +B4AC;B4AC;1103 1171 11AF;B4AC;1103 1171 11AF; +B4AD;B4AD;1103 1171 11B0;B4AD;1103 1171 11B0; +B4AE;B4AE;1103 1171 11B1;B4AE;1103 1171 11B1; +B4AF;B4AF;1103 1171 11B2;B4AF;1103 1171 11B2; +B4B0;B4B0;1103 1171 11B3;B4B0;1103 1171 11B3; +B4B1;B4B1;1103 1171 11B4;B4B1;1103 1171 11B4; +B4B2;B4B2;1103 1171 11B5;B4B2;1103 1171 11B5; +B4B3;B4B3;1103 1171 11B6;B4B3;1103 1171 11B6; +B4B4;B4B4;1103 1171 11B7;B4B4;1103 1171 11B7; +B4B5;B4B5;1103 1171 11B8;B4B5;1103 1171 11B8; +B4B6;B4B6;1103 1171 11B9;B4B6;1103 1171 11B9; +B4B7;B4B7;1103 1171 11BA;B4B7;1103 1171 11BA; +B4B8;B4B8;1103 1171 11BB;B4B8;1103 1171 11BB; +B4B9;B4B9;1103 1171 11BC;B4B9;1103 1171 11BC; +B4BA;B4BA;1103 1171 11BD;B4BA;1103 1171 11BD; +B4BB;B4BB;1103 1171 11BE;B4BB;1103 1171 11BE; +B4BC;B4BC;1103 1171 11BF;B4BC;1103 1171 11BF; +B4BD;B4BD;1103 1171 11C0;B4BD;1103 1171 11C0; +B4BE;B4BE;1103 1171 11C1;B4BE;1103 1171 11C1; +B4BF;B4BF;1103 1171 11C2;B4BF;1103 1171 11C2; +B4C0;B4C0;1103 1172;B4C0;1103 1172; +B4C1;B4C1;1103 1172 11A8;B4C1;1103 1172 11A8; +B4C2;B4C2;1103 1172 11A9;B4C2;1103 1172 11A9; +B4C3;B4C3;1103 1172 11AA;B4C3;1103 1172 11AA; +B4C4;B4C4;1103 1172 11AB;B4C4;1103 1172 11AB; +B4C5;B4C5;1103 1172 11AC;B4C5;1103 1172 11AC; +B4C6;B4C6;1103 1172 11AD;B4C6;1103 1172 11AD; +B4C7;B4C7;1103 1172 11AE;B4C7;1103 1172 11AE; +B4C8;B4C8;1103 1172 11AF;B4C8;1103 1172 11AF; +B4C9;B4C9;1103 1172 11B0;B4C9;1103 1172 11B0; +B4CA;B4CA;1103 1172 11B1;B4CA;1103 1172 11B1; +B4CB;B4CB;1103 1172 11B2;B4CB;1103 1172 11B2; +B4CC;B4CC;1103 1172 11B3;B4CC;1103 1172 11B3; +B4CD;B4CD;1103 1172 11B4;B4CD;1103 1172 11B4; +B4CE;B4CE;1103 1172 11B5;B4CE;1103 1172 11B5; +B4CF;B4CF;1103 1172 11B6;B4CF;1103 1172 11B6; +B4D0;B4D0;1103 1172 11B7;B4D0;1103 1172 11B7; +B4D1;B4D1;1103 1172 11B8;B4D1;1103 1172 11B8; +B4D2;B4D2;1103 1172 11B9;B4D2;1103 1172 11B9; +B4D3;B4D3;1103 1172 11BA;B4D3;1103 1172 11BA; +B4D4;B4D4;1103 1172 11BB;B4D4;1103 1172 11BB; +B4D5;B4D5;1103 1172 11BC;B4D5;1103 1172 11BC; +B4D6;B4D6;1103 1172 11BD;B4D6;1103 1172 11BD; +B4D7;B4D7;1103 1172 11BE;B4D7;1103 1172 11BE; +B4D8;B4D8;1103 1172 11BF;B4D8;1103 1172 11BF; +B4D9;B4D9;1103 1172 11C0;B4D9;1103 1172 11C0; +B4DA;B4DA;1103 1172 11C1;B4DA;1103 1172 11C1; +B4DB;B4DB;1103 1172 11C2;B4DB;1103 1172 11C2; +B4DC;B4DC;1103 1173;B4DC;1103 1173; +B4DD;B4DD;1103 1173 11A8;B4DD;1103 1173 11A8; +B4DE;B4DE;1103 1173 11A9;B4DE;1103 1173 11A9; +B4DF;B4DF;1103 1173 11AA;B4DF;1103 1173 11AA; +B4E0;B4E0;1103 1173 11AB;B4E0;1103 1173 11AB; +B4E1;B4E1;1103 1173 11AC;B4E1;1103 1173 11AC; +B4E2;B4E2;1103 1173 11AD;B4E2;1103 1173 11AD; +B4E3;B4E3;1103 1173 11AE;B4E3;1103 1173 11AE; +B4E4;B4E4;1103 1173 11AF;B4E4;1103 1173 11AF; +B4E5;B4E5;1103 1173 11B0;B4E5;1103 1173 11B0; +B4E6;B4E6;1103 1173 11B1;B4E6;1103 1173 11B1; +B4E7;B4E7;1103 1173 11B2;B4E7;1103 1173 11B2; +B4E8;B4E8;1103 1173 11B3;B4E8;1103 1173 11B3; +B4E9;B4E9;1103 1173 11B4;B4E9;1103 1173 11B4; +B4EA;B4EA;1103 1173 11B5;B4EA;1103 1173 11B5; +B4EB;B4EB;1103 1173 11B6;B4EB;1103 1173 11B6; +B4EC;B4EC;1103 1173 11B7;B4EC;1103 1173 11B7; +B4ED;B4ED;1103 1173 11B8;B4ED;1103 1173 11B8; +B4EE;B4EE;1103 1173 11B9;B4EE;1103 1173 11B9; +B4EF;B4EF;1103 1173 11BA;B4EF;1103 1173 11BA; +B4F0;B4F0;1103 1173 11BB;B4F0;1103 1173 11BB; +B4F1;B4F1;1103 1173 11BC;B4F1;1103 1173 11BC; +B4F2;B4F2;1103 1173 11BD;B4F2;1103 1173 11BD; +B4F3;B4F3;1103 1173 11BE;B4F3;1103 1173 11BE; +B4F4;B4F4;1103 1173 11BF;B4F4;1103 1173 11BF; +B4F5;B4F5;1103 1173 11C0;B4F5;1103 1173 11C0; +B4F6;B4F6;1103 1173 11C1;B4F6;1103 1173 11C1; +B4F7;B4F7;1103 1173 11C2;B4F7;1103 1173 11C2; +B4F8;B4F8;1103 1174;B4F8;1103 1174; +B4F9;B4F9;1103 1174 11A8;B4F9;1103 1174 11A8; +B4FA;B4FA;1103 1174 11A9;B4FA;1103 1174 11A9; +B4FB;B4FB;1103 1174 11AA;B4FB;1103 1174 11AA; +B4FC;B4FC;1103 1174 11AB;B4FC;1103 1174 11AB; +B4FD;B4FD;1103 1174 11AC;B4FD;1103 1174 11AC; +B4FE;B4FE;1103 1174 11AD;B4FE;1103 1174 11AD; +B4FF;B4FF;1103 1174 11AE;B4FF;1103 1174 11AE; +B500;B500;1103 1174 11AF;B500;1103 1174 11AF; +B501;B501;1103 1174 11B0;B501;1103 1174 11B0; +B502;B502;1103 1174 11B1;B502;1103 1174 11B1; +B503;B503;1103 1174 11B2;B503;1103 1174 11B2; +B504;B504;1103 1174 11B3;B504;1103 1174 11B3; +B505;B505;1103 1174 11B4;B505;1103 1174 11B4; +B506;B506;1103 1174 11B5;B506;1103 1174 11B5; +B507;B507;1103 1174 11B6;B507;1103 1174 11B6; +B508;B508;1103 1174 11B7;B508;1103 1174 11B7; +B509;B509;1103 1174 11B8;B509;1103 1174 11B8; +B50A;B50A;1103 1174 11B9;B50A;1103 1174 11B9; +B50B;B50B;1103 1174 11BA;B50B;1103 1174 11BA; +B50C;B50C;1103 1174 11BB;B50C;1103 1174 11BB; +B50D;B50D;1103 1174 11BC;B50D;1103 1174 11BC; +B50E;B50E;1103 1174 11BD;B50E;1103 1174 11BD; +B50F;B50F;1103 1174 11BE;B50F;1103 1174 11BE; +B510;B510;1103 1174 11BF;B510;1103 1174 11BF; +B511;B511;1103 1174 11C0;B511;1103 1174 11C0; +B512;B512;1103 1174 11C1;B512;1103 1174 11C1; +B513;B513;1103 1174 11C2;B513;1103 1174 11C2; +B514;B514;1103 1175;B514;1103 1175; +B515;B515;1103 1175 11A8;B515;1103 1175 11A8; +B516;B516;1103 1175 11A9;B516;1103 1175 11A9; +B517;B517;1103 1175 11AA;B517;1103 1175 11AA; +B518;B518;1103 1175 11AB;B518;1103 1175 11AB; +B519;B519;1103 1175 11AC;B519;1103 1175 11AC; +B51A;B51A;1103 1175 11AD;B51A;1103 1175 11AD; +B51B;B51B;1103 1175 11AE;B51B;1103 1175 11AE; +B51C;B51C;1103 1175 11AF;B51C;1103 1175 11AF; +B51D;B51D;1103 1175 11B0;B51D;1103 1175 11B0; +B51E;B51E;1103 1175 11B1;B51E;1103 1175 11B1; +B51F;B51F;1103 1175 11B2;B51F;1103 1175 11B2; +B520;B520;1103 1175 11B3;B520;1103 1175 11B3; +B521;B521;1103 1175 11B4;B521;1103 1175 11B4; +B522;B522;1103 1175 11B5;B522;1103 1175 11B5; +B523;B523;1103 1175 11B6;B523;1103 1175 11B6; +B524;B524;1103 1175 11B7;B524;1103 1175 11B7; +B525;B525;1103 1175 11B8;B525;1103 1175 11B8; +B526;B526;1103 1175 11B9;B526;1103 1175 11B9; +B527;B527;1103 1175 11BA;B527;1103 1175 11BA; +B528;B528;1103 1175 11BB;B528;1103 1175 11BB; +B529;B529;1103 1175 11BC;B529;1103 1175 11BC; +B52A;B52A;1103 1175 11BD;B52A;1103 1175 11BD; +B52B;B52B;1103 1175 11BE;B52B;1103 1175 11BE; +B52C;B52C;1103 1175 11BF;B52C;1103 1175 11BF; +B52D;B52D;1103 1175 11C0;B52D;1103 1175 11C0; +B52E;B52E;1103 1175 11C1;B52E;1103 1175 11C1; +B52F;B52F;1103 1175 11C2;B52F;1103 1175 11C2; +B530;B530;1104 1161;B530;1104 1161; +B531;B531;1104 1161 11A8;B531;1104 1161 11A8; +B532;B532;1104 1161 11A9;B532;1104 1161 11A9; +B533;B533;1104 1161 11AA;B533;1104 1161 11AA; +B534;B534;1104 1161 11AB;B534;1104 1161 11AB; +B535;B535;1104 1161 11AC;B535;1104 1161 11AC; +B536;B536;1104 1161 11AD;B536;1104 1161 11AD; +B537;B537;1104 1161 11AE;B537;1104 1161 11AE; +B538;B538;1104 1161 11AF;B538;1104 1161 11AF; +B539;B539;1104 1161 11B0;B539;1104 1161 11B0; +B53A;B53A;1104 1161 11B1;B53A;1104 1161 11B1; +B53B;B53B;1104 1161 11B2;B53B;1104 1161 11B2; +B53C;B53C;1104 1161 11B3;B53C;1104 1161 11B3; +B53D;B53D;1104 1161 11B4;B53D;1104 1161 11B4; +B53E;B53E;1104 1161 11B5;B53E;1104 1161 11B5; +B53F;B53F;1104 1161 11B6;B53F;1104 1161 11B6; +B540;B540;1104 1161 11B7;B540;1104 1161 11B7; +B541;B541;1104 1161 11B8;B541;1104 1161 11B8; +B542;B542;1104 1161 11B9;B542;1104 1161 11B9; +B543;B543;1104 1161 11BA;B543;1104 1161 11BA; +B544;B544;1104 1161 11BB;B544;1104 1161 11BB; +B545;B545;1104 1161 11BC;B545;1104 1161 11BC; +B546;B546;1104 1161 11BD;B546;1104 1161 11BD; +B547;B547;1104 1161 11BE;B547;1104 1161 11BE; +B548;B548;1104 1161 11BF;B548;1104 1161 11BF; +B549;B549;1104 1161 11C0;B549;1104 1161 11C0; +B54A;B54A;1104 1161 11C1;B54A;1104 1161 11C1; +B54B;B54B;1104 1161 11C2;B54B;1104 1161 11C2; +B54C;B54C;1104 1162;B54C;1104 1162; +B54D;B54D;1104 1162 11A8;B54D;1104 1162 11A8; +B54E;B54E;1104 1162 11A9;B54E;1104 1162 11A9; +B54F;B54F;1104 1162 11AA;B54F;1104 1162 11AA; +B550;B550;1104 1162 11AB;B550;1104 1162 11AB; +B551;B551;1104 1162 11AC;B551;1104 1162 11AC; +B552;B552;1104 1162 11AD;B552;1104 1162 11AD; +B553;B553;1104 1162 11AE;B553;1104 1162 11AE; +B554;B554;1104 1162 11AF;B554;1104 1162 11AF; +B555;B555;1104 1162 11B0;B555;1104 1162 11B0; +B556;B556;1104 1162 11B1;B556;1104 1162 11B1; +B557;B557;1104 1162 11B2;B557;1104 1162 11B2; +B558;B558;1104 1162 11B3;B558;1104 1162 11B3; +B559;B559;1104 1162 11B4;B559;1104 1162 11B4; +B55A;B55A;1104 1162 11B5;B55A;1104 1162 11B5; +B55B;B55B;1104 1162 11B6;B55B;1104 1162 11B6; +B55C;B55C;1104 1162 11B7;B55C;1104 1162 11B7; +B55D;B55D;1104 1162 11B8;B55D;1104 1162 11B8; +B55E;B55E;1104 1162 11B9;B55E;1104 1162 11B9; +B55F;B55F;1104 1162 11BA;B55F;1104 1162 11BA; +B560;B560;1104 1162 11BB;B560;1104 1162 11BB; +B561;B561;1104 1162 11BC;B561;1104 1162 11BC; +B562;B562;1104 1162 11BD;B562;1104 1162 11BD; +B563;B563;1104 1162 11BE;B563;1104 1162 11BE; +B564;B564;1104 1162 11BF;B564;1104 1162 11BF; +B565;B565;1104 1162 11C0;B565;1104 1162 11C0; +B566;B566;1104 1162 11C1;B566;1104 1162 11C1; +B567;B567;1104 1162 11C2;B567;1104 1162 11C2; +B568;B568;1104 1163;B568;1104 1163; +B569;B569;1104 1163 11A8;B569;1104 1163 11A8; +B56A;B56A;1104 1163 11A9;B56A;1104 1163 11A9; +B56B;B56B;1104 1163 11AA;B56B;1104 1163 11AA; +B56C;B56C;1104 1163 11AB;B56C;1104 1163 11AB; +B56D;B56D;1104 1163 11AC;B56D;1104 1163 11AC; +B56E;B56E;1104 1163 11AD;B56E;1104 1163 11AD; +B56F;B56F;1104 1163 11AE;B56F;1104 1163 11AE; +B570;B570;1104 1163 11AF;B570;1104 1163 11AF; +B571;B571;1104 1163 11B0;B571;1104 1163 11B0; +B572;B572;1104 1163 11B1;B572;1104 1163 11B1; +B573;B573;1104 1163 11B2;B573;1104 1163 11B2; +B574;B574;1104 1163 11B3;B574;1104 1163 11B3; +B575;B575;1104 1163 11B4;B575;1104 1163 11B4; +B576;B576;1104 1163 11B5;B576;1104 1163 11B5; +B577;B577;1104 1163 11B6;B577;1104 1163 11B6; +B578;B578;1104 1163 11B7;B578;1104 1163 11B7; +B579;B579;1104 1163 11B8;B579;1104 1163 11B8; +B57A;B57A;1104 1163 11B9;B57A;1104 1163 11B9; +B57B;B57B;1104 1163 11BA;B57B;1104 1163 11BA; +B57C;B57C;1104 1163 11BB;B57C;1104 1163 11BB; +B57D;B57D;1104 1163 11BC;B57D;1104 1163 11BC; +B57E;B57E;1104 1163 11BD;B57E;1104 1163 11BD; +B57F;B57F;1104 1163 11BE;B57F;1104 1163 11BE; +B580;B580;1104 1163 11BF;B580;1104 1163 11BF; +B581;B581;1104 1163 11C0;B581;1104 1163 11C0; +B582;B582;1104 1163 11C1;B582;1104 1163 11C1; +B583;B583;1104 1163 11C2;B583;1104 1163 11C2; +B584;B584;1104 1164;B584;1104 1164; +B585;B585;1104 1164 11A8;B585;1104 1164 11A8; +B586;B586;1104 1164 11A9;B586;1104 1164 11A9; +B587;B587;1104 1164 11AA;B587;1104 1164 11AA; +B588;B588;1104 1164 11AB;B588;1104 1164 11AB; +B589;B589;1104 1164 11AC;B589;1104 1164 11AC; +B58A;B58A;1104 1164 11AD;B58A;1104 1164 11AD; +B58B;B58B;1104 1164 11AE;B58B;1104 1164 11AE; +B58C;B58C;1104 1164 11AF;B58C;1104 1164 11AF; +B58D;B58D;1104 1164 11B0;B58D;1104 1164 11B0; +B58E;B58E;1104 1164 11B1;B58E;1104 1164 11B1; +B58F;B58F;1104 1164 11B2;B58F;1104 1164 11B2; +B590;B590;1104 1164 11B3;B590;1104 1164 11B3; +B591;B591;1104 1164 11B4;B591;1104 1164 11B4; +B592;B592;1104 1164 11B5;B592;1104 1164 11B5; +B593;B593;1104 1164 11B6;B593;1104 1164 11B6; +B594;B594;1104 1164 11B7;B594;1104 1164 11B7; +B595;B595;1104 1164 11B8;B595;1104 1164 11B8; +B596;B596;1104 1164 11B9;B596;1104 1164 11B9; +B597;B597;1104 1164 11BA;B597;1104 1164 11BA; +B598;B598;1104 1164 11BB;B598;1104 1164 11BB; +B599;B599;1104 1164 11BC;B599;1104 1164 11BC; +B59A;B59A;1104 1164 11BD;B59A;1104 1164 11BD; +B59B;B59B;1104 1164 11BE;B59B;1104 1164 11BE; +B59C;B59C;1104 1164 11BF;B59C;1104 1164 11BF; +B59D;B59D;1104 1164 11C0;B59D;1104 1164 11C0; +B59E;B59E;1104 1164 11C1;B59E;1104 1164 11C1; +B59F;B59F;1104 1164 11C2;B59F;1104 1164 11C2; +B5A0;B5A0;1104 1165;B5A0;1104 1165; +B5A1;B5A1;1104 1165 11A8;B5A1;1104 1165 11A8; +B5A2;B5A2;1104 1165 11A9;B5A2;1104 1165 11A9; +B5A3;B5A3;1104 1165 11AA;B5A3;1104 1165 11AA; +B5A4;B5A4;1104 1165 11AB;B5A4;1104 1165 11AB; +B5A5;B5A5;1104 1165 11AC;B5A5;1104 1165 11AC; +B5A6;B5A6;1104 1165 11AD;B5A6;1104 1165 11AD; +B5A7;B5A7;1104 1165 11AE;B5A7;1104 1165 11AE; +B5A8;B5A8;1104 1165 11AF;B5A8;1104 1165 11AF; +B5A9;B5A9;1104 1165 11B0;B5A9;1104 1165 11B0; +B5AA;B5AA;1104 1165 11B1;B5AA;1104 1165 11B1; +B5AB;B5AB;1104 1165 11B2;B5AB;1104 1165 11B2; +B5AC;B5AC;1104 1165 11B3;B5AC;1104 1165 11B3; +B5AD;B5AD;1104 1165 11B4;B5AD;1104 1165 11B4; +B5AE;B5AE;1104 1165 11B5;B5AE;1104 1165 11B5; +B5AF;B5AF;1104 1165 11B6;B5AF;1104 1165 11B6; +B5B0;B5B0;1104 1165 11B7;B5B0;1104 1165 11B7; +B5B1;B5B1;1104 1165 11B8;B5B1;1104 1165 11B8; +B5B2;B5B2;1104 1165 11B9;B5B2;1104 1165 11B9; +B5B3;B5B3;1104 1165 11BA;B5B3;1104 1165 11BA; +B5B4;B5B4;1104 1165 11BB;B5B4;1104 1165 11BB; +B5B5;B5B5;1104 1165 11BC;B5B5;1104 1165 11BC; +B5B6;B5B6;1104 1165 11BD;B5B6;1104 1165 11BD; +B5B7;B5B7;1104 1165 11BE;B5B7;1104 1165 11BE; +B5B8;B5B8;1104 1165 11BF;B5B8;1104 1165 11BF; +B5B9;B5B9;1104 1165 11C0;B5B9;1104 1165 11C0; +B5BA;B5BA;1104 1165 11C1;B5BA;1104 1165 11C1; +B5BB;B5BB;1104 1165 11C2;B5BB;1104 1165 11C2; +B5BC;B5BC;1104 1166;B5BC;1104 1166; +B5BD;B5BD;1104 1166 11A8;B5BD;1104 1166 11A8; +B5BE;B5BE;1104 1166 11A9;B5BE;1104 1166 11A9; +B5BF;B5BF;1104 1166 11AA;B5BF;1104 1166 11AA; +B5C0;B5C0;1104 1166 11AB;B5C0;1104 1166 11AB; +B5C1;B5C1;1104 1166 11AC;B5C1;1104 1166 11AC; +B5C2;B5C2;1104 1166 11AD;B5C2;1104 1166 11AD; +B5C3;B5C3;1104 1166 11AE;B5C3;1104 1166 11AE; +B5C4;B5C4;1104 1166 11AF;B5C4;1104 1166 11AF; +B5C5;B5C5;1104 1166 11B0;B5C5;1104 1166 11B0; +B5C6;B5C6;1104 1166 11B1;B5C6;1104 1166 11B1; +B5C7;B5C7;1104 1166 11B2;B5C7;1104 1166 11B2; +B5C8;B5C8;1104 1166 11B3;B5C8;1104 1166 11B3; +B5C9;B5C9;1104 1166 11B4;B5C9;1104 1166 11B4; +B5CA;B5CA;1104 1166 11B5;B5CA;1104 1166 11B5; +B5CB;B5CB;1104 1166 11B6;B5CB;1104 1166 11B6; +B5CC;B5CC;1104 1166 11B7;B5CC;1104 1166 11B7; +B5CD;B5CD;1104 1166 11B8;B5CD;1104 1166 11B8; +B5CE;B5CE;1104 1166 11B9;B5CE;1104 1166 11B9; +B5CF;B5CF;1104 1166 11BA;B5CF;1104 1166 11BA; +B5D0;B5D0;1104 1166 11BB;B5D0;1104 1166 11BB; +B5D1;B5D1;1104 1166 11BC;B5D1;1104 1166 11BC; +B5D2;B5D2;1104 1166 11BD;B5D2;1104 1166 11BD; +B5D3;B5D3;1104 1166 11BE;B5D3;1104 1166 11BE; +B5D4;B5D4;1104 1166 11BF;B5D4;1104 1166 11BF; +B5D5;B5D5;1104 1166 11C0;B5D5;1104 1166 11C0; +B5D6;B5D6;1104 1166 11C1;B5D6;1104 1166 11C1; +B5D7;B5D7;1104 1166 11C2;B5D7;1104 1166 11C2; +B5D8;B5D8;1104 1167;B5D8;1104 1167; +B5D9;B5D9;1104 1167 11A8;B5D9;1104 1167 11A8; +B5DA;B5DA;1104 1167 11A9;B5DA;1104 1167 11A9; +B5DB;B5DB;1104 1167 11AA;B5DB;1104 1167 11AA; +B5DC;B5DC;1104 1167 11AB;B5DC;1104 1167 11AB; +B5DD;B5DD;1104 1167 11AC;B5DD;1104 1167 11AC; +B5DE;B5DE;1104 1167 11AD;B5DE;1104 1167 11AD; +B5DF;B5DF;1104 1167 11AE;B5DF;1104 1167 11AE; +B5E0;B5E0;1104 1167 11AF;B5E0;1104 1167 11AF; +B5E1;B5E1;1104 1167 11B0;B5E1;1104 1167 11B0; +B5E2;B5E2;1104 1167 11B1;B5E2;1104 1167 11B1; +B5E3;B5E3;1104 1167 11B2;B5E3;1104 1167 11B2; +B5E4;B5E4;1104 1167 11B3;B5E4;1104 1167 11B3; +B5E5;B5E5;1104 1167 11B4;B5E5;1104 1167 11B4; +B5E6;B5E6;1104 1167 11B5;B5E6;1104 1167 11B5; +B5E7;B5E7;1104 1167 11B6;B5E7;1104 1167 11B6; +B5E8;B5E8;1104 1167 11B7;B5E8;1104 1167 11B7; +B5E9;B5E9;1104 1167 11B8;B5E9;1104 1167 11B8; +B5EA;B5EA;1104 1167 11B9;B5EA;1104 1167 11B9; +B5EB;B5EB;1104 1167 11BA;B5EB;1104 1167 11BA; +B5EC;B5EC;1104 1167 11BB;B5EC;1104 1167 11BB; +B5ED;B5ED;1104 1167 11BC;B5ED;1104 1167 11BC; +B5EE;B5EE;1104 1167 11BD;B5EE;1104 1167 11BD; +B5EF;B5EF;1104 1167 11BE;B5EF;1104 1167 11BE; +B5F0;B5F0;1104 1167 11BF;B5F0;1104 1167 11BF; +B5F1;B5F1;1104 1167 11C0;B5F1;1104 1167 11C0; +B5F2;B5F2;1104 1167 11C1;B5F2;1104 1167 11C1; +B5F3;B5F3;1104 1167 11C2;B5F3;1104 1167 11C2; +B5F4;B5F4;1104 1168;B5F4;1104 1168; +B5F5;B5F5;1104 1168 11A8;B5F5;1104 1168 11A8; +B5F6;B5F6;1104 1168 11A9;B5F6;1104 1168 11A9; +B5F7;B5F7;1104 1168 11AA;B5F7;1104 1168 11AA; +B5F8;B5F8;1104 1168 11AB;B5F8;1104 1168 11AB; +B5F9;B5F9;1104 1168 11AC;B5F9;1104 1168 11AC; +B5FA;B5FA;1104 1168 11AD;B5FA;1104 1168 11AD; +B5FB;B5FB;1104 1168 11AE;B5FB;1104 1168 11AE; +B5FC;B5FC;1104 1168 11AF;B5FC;1104 1168 11AF; +B5FD;B5FD;1104 1168 11B0;B5FD;1104 1168 11B0; +B5FE;B5FE;1104 1168 11B1;B5FE;1104 1168 11B1; +B5FF;B5FF;1104 1168 11B2;B5FF;1104 1168 11B2; +B600;B600;1104 1168 11B3;B600;1104 1168 11B3; +B601;B601;1104 1168 11B4;B601;1104 1168 11B4; +B602;B602;1104 1168 11B5;B602;1104 1168 11B5; +B603;B603;1104 1168 11B6;B603;1104 1168 11B6; +B604;B604;1104 1168 11B7;B604;1104 1168 11B7; +B605;B605;1104 1168 11B8;B605;1104 1168 11B8; +B606;B606;1104 1168 11B9;B606;1104 1168 11B9; +B607;B607;1104 1168 11BA;B607;1104 1168 11BA; +B608;B608;1104 1168 11BB;B608;1104 1168 11BB; +B609;B609;1104 1168 11BC;B609;1104 1168 11BC; +B60A;B60A;1104 1168 11BD;B60A;1104 1168 11BD; +B60B;B60B;1104 1168 11BE;B60B;1104 1168 11BE; +B60C;B60C;1104 1168 11BF;B60C;1104 1168 11BF; +B60D;B60D;1104 1168 11C0;B60D;1104 1168 11C0; +B60E;B60E;1104 1168 11C1;B60E;1104 1168 11C1; +B60F;B60F;1104 1168 11C2;B60F;1104 1168 11C2; +B610;B610;1104 1169;B610;1104 1169; +B611;B611;1104 1169 11A8;B611;1104 1169 11A8; +B612;B612;1104 1169 11A9;B612;1104 1169 11A9; +B613;B613;1104 1169 11AA;B613;1104 1169 11AA; +B614;B614;1104 1169 11AB;B614;1104 1169 11AB; +B615;B615;1104 1169 11AC;B615;1104 1169 11AC; +B616;B616;1104 1169 11AD;B616;1104 1169 11AD; +B617;B617;1104 1169 11AE;B617;1104 1169 11AE; +B618;B618;1104 1169 11AF;B618;1104 1169 11AF; +B619;B619;1104 1169 11B0;B619;1104 1169 11B0; +B61A;B61A;1104 1169 11B1;B61A;1104 1169 11B1; +B61B;B61B;1104 1169 11B2;B61B;1104 1169 11B2; +B61C;B61C;1104 1169 11B3;B61C;1104 1169 11B3; +B61D;B61D;1104 1169 11B4;B61D;1104 1169 11B4; +B61E;B61E;1104 1169 11B5;B61E;1104 1169 11B5; +B61F;B61F;1104 1169 11B6;B61F;1104 1169 11B6; +B620;B620;1104 1169 11B7;B620;1104 1169 11B7; +B621;B621;1104 1169 11B8;B621;1104 1169 11B8; +B622;B622;1104 1169 11B9;B622;1104 1169 11B9; +B623;B623;1104 1169 11BA;B623;1104 1169 11BA; +B624;B624;1104 1169 11BB;B624;1104 1169 11BB; +B625;B625;1104 1169 11BC;B625;1104 1169 11BC; +B626;B626;1104 1169 11BD;B626;1104 1169 11BD; +B627;B627;1104 1169 11BE;B627;1104 1169 11BE; +B628;B628;1104 1169 11BF;B628;1104 1169 11BF; +B629;B629;1104 1169 11C0;B629;1104 1169 11C0; +B62A;B62A;1104 1169 11C1;B62A;1104 1169 11C1; +B62B;B62B;1104 1169 11C2;B62B;1104 1169 11C2; +B62C;B62C;1104 116A;B62C;1104 116A; +B62D;B62D;1104 116A 11A8;B62D;1104 116A 11A8; +B62E;B62E;1104 116A 11A9;B62E;1104 116A 11A9; +B62F;B62F;1104 116A 11AA;B62F;1104 116A 11AA; +B630;B630;1104 116A 11AB;B630;1104 116A 11AB; +B631;B631;1104 116A 11AC;B631;1104 116A 11AC; +B632;B632;1104 116A 11AD;B632;1104 116A 11AD; +B633;B633;1104 116A 11AE;B633;1104 116A 11AE; +B634;B634;1104 116A 11AF;B634;1104 116A 11AF; +B635;B635;1104 116A 11B0;B635;1104 116A 11B0; +B636;B636;1104 116A 11B1;B636;1104 116A 11B1; +B637;B637;1104 116A 11B2;B637;1104 116A 11B2; +B638;B638;1104 116A 11B3;B638;1104 116A 11B3; +B639;B639;1104 116A 11B4;B639;1104 116A 11B4; +B63A;B63A;1104 116A 11B5;B63A;1104 116A 11B5; +B63B;B63B;1104 116A 11B6;B63B;1104 116A 11B6; +B63C;B63C;1104 116A 11B7;B63C;1104 116A 11B7; +B63D;B63D;1104 116A 11B8;B63D;1104 116A 11B8; +B63E;B63E;1104 116A 11B9;B63E;1104 116A 11B9; +B63F;B63F;1104 116A 11BA;B63F;1104 116A 11BA; +B640;B640;1104 116A 11BB;B640;1104 116A 11BB; +B641;B641;1104 116A 11BC;B641;1104 116A 11BC; +B642;B642;1104 116A 11BD;B642;1104 116A 11BD; +B643;B643;1104 116A 11BE;B643;1104 116A 11BE; +B644;B644;1104 116A 11BF;B644;1104 116A 11BF; +B645;B645;1104 116A 11C0;B645;1104 116A 11C0; +B646;B646;1104 116A 11C1;B646;1104 116A 11C1; +B647;B647;1104 116A 11C2;B647;1104 116A 11C2; +B648;B648;1104 116B;B648;1104 116B; +B649;B649;1104 116B 11A8;B649;1104 116B 11A8; +B64A;B64A;1104 116B 11A9;B64A;1104 116B 11A9; +B64B;B64B;1104 116B 11AA;B64B;1104 116B 11AA; +B64C;B64C;1104 116B 11AB;B64C;1104 116B 11AB; +B64D;B64D;1104 116B 11AC;B64D;1104 116B 11AC; +B64E;B64E;1104 116B 11AD;B64E;1104 116B 11AD; +B64F;B64F;1104 116B 11AE;B64F;1104 116B 11AE; +B650;B650;1104 116B 11AF;B650;1104 116B 11AF; +B651;B651;1104 116B 11B0;B651;1104 116B 11B0; +B652;B652;1104 116B 11B1;B652;1104 116B 11B1; +B653;B653;1104 116B 11B2;B653;1104 116B 11B2; +B654;B654;1104 116B 11B3;B654;1104 116B 11B3; +B655;B655;1104 116B 11B4;B655;1104 116B 11B4; +B656;B656;1104 116B 11B5;B656;1104 116B 11B5; +B657;B657;1104 116B 11B6;B657;1104 116B 11B6; +B658;B658;1104 116B 11B7;B658;1104 116B 11B7; +B659;B659;1104 116B 11B8;B659;1104 116B 11B8; +B65A;B65A;1104 116B 11B9;B65A;1104 116B 11B9; +B65B;B65B;1104 116B 11BA;B65B;1104 116B 11BA; +B65C;B65C;1104 116B 11BB;B65C;1104 116B 11BB; +B65D;B65D;1104 116B 11BC;B65D;1104 116B 11BC; +B65E;B65E;1104 116B 11BD;B65E;1104 116B 11BD; +B65F;B65F;1104 116B 11BE;B65F;1104 116B 11BE; +B660;B660;1104 116B 11BF;B660;1104 116B 11BF; +B661;B661;1104 116B 11C0;B661;1104 116B 11C0; +B662;B662;1104 116B 11C1;B662;1104 116B 11C1; +B663;B663;1104 116B 11C2;B663;1104 116B 11C2; +B664;B664;1104 116C;B664;1104 116C; +B665;B665;1104 116C 11A8;B665;1104 116C 11A8; +B666;B666;1104 116C 11A9;B666;1104 116C 11A9; +B667;B667;1104 116C 11AA;B667;1104 116C 11AA; +B668;B668;1104 116C 11AB;B668;1104 116C 11AB; +B669;B669;1104 116C 11AC;B669;1104 116C 11AC; +B66A;B66A;1104 116C 11AD;B66A;1104 116C 11AD; +B66B;B66B;1104 116C 11AE;B66B;1104 116C 11AE; +B66C;B66C;1104 116C 11AF;B66C;1104 116C 11AF; +B66D;B66D;1104 116C 11B0;B66D;1104 116C 11B0; +B66E;B66E;1104 116C 11B1;B66E;1104 116C 11B1; +B66F;B66F;1104 116C 11B2;B66F;1104 116C 11B2; +B670;B670;1104 116C 11B3;B670;1104 116C 11B3; +B671;B671;1104 116C 11B4;B671;1104 116C 11B4; +B672;B672;1104 116C 11B5;B672;1104 116C 11B5; +B673;B673;1104 116C 11B6;B673;1104 116C 11B6; +B674;B674;1104 116C 11B7;B674;1104 116C 11B7; +B675;B675;1104 116C 11B8;B675;1104 116C 11B8; +B676;B676;1104 116C 11B9;B676;1104 116C 11B9; +B677;B677;1104 116C 11BA;B677;1104 116C 11BA; +B678;B678;1104 116C 11BB;B678;1104 116C 11BB; +B679;B679;1104 116C 11BC;B679;1104 116C 11BC; +B67A;B67A;1104 116C 11BD;B67A;1104 116C 11BD; +B67B;B67B;1104 116C 11BE;B67B;1104 116C 11BE; +B67C;B67C;1104 116C 11BF;B67C;1104 116C 11BF; +B67D;B67D;1104 116C 11C0;B67D;1104 116C 11C0; +B67E;B67E;1104 116C 11C1;B67E;1104 116C 11C1; +B67F;B67F;1104 116C 11C2;B67F;1104 116C 11C2; +B680;B680;1104 116D;B680;1104 116D; +B681;B681;1104 116D 11A8;B681;1104 116D 11A8; +B682;B682;1104 116D 11A9;B682;1104 116D 11A9; +B683;B683;1104 116D 11AA;B683;1104 116D 11AA; +B684;B684;1104 116D 11AB;B684;1104 116D 11AB; +B685;B685;1104 116D 11AC;B685;1104 116D 11AC; +B686;B686;1104 116D 11AD;B686;1104 116D 11AD; +B687;B687;1104 116D 11AE;B687;1104 116D 11AE; +B688;B688;1104 116D 11AF;B688;1104 116D 11AF; +B689;B689;1104 116D 11B0;B689;1104 116D 11B0; +B68A;B68A;1104 116D 11B1;B68A;1104 116D 11B1; +B68B;B68B;1104 116D 11B2;B68B;1104 116D 11B2; +B68C;B68C;1104 116D 11B3;B68C;1104 116D 11B3; +B68D;B68D;1104 116D 11B4;B68D;1104 116D 11B4; +B68E;B68E;1104 116D 11B5;B68E;1104 116D 11B5; +B68F;B68F;1104 116D 11B6;B68F;1104 116D 11B6; +B690;B690;1104 116D 11B7;B690;1104 116D 11B7; +B691;B691;1104 116D 11B8;B691;1104 116D 11B8; +B692;B692;1104 116D 11B9;B692;1104 116D 11B9; +B693;B693;1104 116D 11BA;B693;1104 116D 11BA; +B694;B694;1104 116D 11BB;B694;1104 116D 11BB; +B695;B695;1104 116D 11BC;B695;1104 116D 11BC; +B696;B696;1104 116D 11BD;B696;1104 116D 11BD; +B697;B697;1104 116D 11BE;B697;1104 116D 11BE; +B698;B698;1104 116D 11BF;B698;1104 116D 11BF; +B699;B699;1104 116D 11C0;B699;1104 116D 11C0; +B69A;B69A;1104 116D 11C1;B69A;1104 116D 11C1; +B69B;B69B;1104 116D 11C2;B69B;1104 116D 11C2; +B69C;B69C;1104 116E;B69C;1104 116E; +B69D;B69D;1104 116E 11A8;B69D;1104 116E 11A8; +B69E;B69E;1104 116E 11A9;B69E;1104 116E 11A9; +B69F;B69F;1104 116E 11AA;B69F;1104 116E 11AA; +B6A0;B6A0;1104 116E 11AB;B6A0;1104 116E 11AB; +B6A1;B6A1;1104 116E 11AC;B6A1;1104 116E 11AC; +B6A2;B6A2;1104 116E 11AD;B6A2;1104 116E 11AD; +B6A3;B6A3;1104 116E 11AE;B6A3;1104 116E 11AE; +B6A4;B6A4;1104 116E 11AF;B6A4;1104 116E 11AF; +B6A5;B6A5;1104 116E 11B0;B6A5;1104 116E 11B0; +B6A6;B6A6;1104 116E 11B1;B6A6;1104 116E 11B1; +B6A7;B6A7;1104 116E 11B2;B6A7;1104 116E 11B2; +B6A8;B6A8;1104 116E 11B3;B6A8;1104 116E 11B3; +B6A9;B6A9;1104 116E 11B4;B6A9;1104 116E 11B4; +B6AA;B6AA;1104 116E 11B5;B6AA;1104 116E 11B5; +B6AB;B6AB;1104 116E 11B6;B6AB;1104 116E 11B6; +B6AC;B6AC;1104 116E 11B7;B6AC;1104 116E 11B7; +B6AD;B6AD;1104 116E 11B8;B6AD;1104 116E 11B8; +B6AE;B6AE;1104 116E 11B9;B6AE;1104 116E 11B9; +B6AF;B6AF;1104 116E 11BA;B6AF;1104 116E 11BA; +B6B0;B6B0;1104 116E 11BB;B6B0;1104 116E 11BB; +B6B1;B6B1;1104 116E 11BC;B6B1;1104 116E 11BC; +B6B2;B6B2;1104 116E 11BD;B6B2;1104 116E 11BD; +B6B3;B6B3;1104 116E 11BE;B6B3;1104 116E 11BE; +B6B4;B6B4;1104 116E 11BF;B6B4;1104 116E 11BF; +B6B5;B6B5;1104 116E 11C0;B6B5;1104 116E 11C0; +B6B6;B6B6;1104 116E 11C1;B6B6;1104 116E 11C1; +B6B7;B6B7;1104 116E 11C2;B6B7;1104 116E 11C2; +B6B8;B6B8;1104 116F;B6B8;1104 116F; +B6B9;B6B9;1104 116F 11A8;B6B9;1104 116F 11A8; +B6BA;B6BA;1104 116F 11A9;B6BA;1104 116F 11A9; +B6BB;B6BB;1104 116F 11AA;B6BB;1104 116F 11AA; +B6BC;B6BC;1104 116F 11AB;B6BC;1104 116F 11AB; +B6BD;B6BD;1104 116F 11AC;B6BD;1104 116F 11AC; +B6BE;B6BE;1104 116F 11AD;B6BE;1104 116F 11AD; +B6BF;B6BF;1104 116F 11AE;B6BF;1104 116F 11AE; +B6C0;B6C0;1104 116F 11AF;B6C0;1104 116F 11AF; +B6C1;B6C1;1104 116F 11B0;B6C1;1104 116F 11B0; +B6C2;B6C2;1104 116F 11B1;B6C2;1104 116F 11B1; +B6C3;B6C3;1104 116F 11B2;B6C3;1104 116F 11B2; +B6C4;B6C4;1104 116F 11B3;B6C4;1104 116F 11B3; +B6C5;B6C5;1104 116F 11B4;B6C5;1104 116F 11B4; +B6C6;B6C6;1104 116F 11B5;B6C6;1104 116F 11B5; +B6C7;B6C7;1104 116F 11B6;B6C7;1104 116F 11B6; +B6C8;B6C8;1104 116F 11B7;B6C8;1104 116F 11B7; +B6C9;B6C9;1104 116F 11B8;B6C9;1104 116F 11B8; +B6CA;B6CA;1104 116F 11B9;B6CA;1104 116F 11B9; +B6CB;B6CB;1104 116F 11BA;B6CB;1104 116F 11BA; +B6CC;B6CC;1104 116F 11BB;B6CC;1104 116F 11BB; +B6CD;B6CD;1104 116F 11BC;B6CD;1104 116F 11BC; +B6CE;B6CE;1104 116F 11BD;B6CE;1104 116F 11BD; +B6CF;B6CF;1104 116F 11BE;B6CF;1104 116F 11BE; +B6D0;B6D0;1104 116F 11BF;B6D0;1104 116F 11BF; +B6D1;B6D1;1104 116F 11C0;B6D1;1104 116F 11C0; +B6D2;B6D2;1104 116F 11C1;B6D2;1104 116F 11C1; +B6D3;B6D3;1104 116F 11C2;B6D3;1104 116F 11C2; +B6D4;B6D4;1104 1170;B6D4;1104 1170; +B6D5;B6D5;1104 1170 11A8;B6D5;1104 1170 11A8; +B6D6;B6D6;1104 1170 11A9;B6D6;1104 1170 11A9; +B6D7;B6D7;1104 1170 11AA;B6D7;1104 1170 11AA; +B6D8;B6D8;1104 1170 11AB;B6D8;1104 1170 11AB; +B6D9;B6D9;1104 1170 11AC;B6D9;1104 1170 11AC; +B6DA;B6DA;1104 1170 11AD;B6DA;1104 1170 11AD; +B6DB;B6DB;1104 1170 11AE;B6DB;1104 1170 11AE; +B6DC;B6DC;1104 1170 11AF;B6DC;1104 1170 11AF; +B6DD;B6DD;1104 1170 11B0;B6DD;1104 1170 11B0; +B6DE;B6DE;1104 1170 11B1;B6DE;1104 1170 11B1; +B6DF;B6DF;1104 1170 11B2;B6DF;1104 1170 11B2; +B6E0;B6E0;1104 1170 11B3;B6E0;1104 1170 11B3; +B6E1;B6E1;1104 1170 11B4;B6E1;1104 1170 11B4; +B6E2;B6E2;1104 1170 11B5;B6E2;1104 1170 11B5; +B6E3;B6E3;1104 1170 11B6;B6E3;1104 1170 11B6; +B6E4;B6E4;1104 1170 11B7;B6E4;1104 1170 11B7; +B6E5;B6E5;1104 1170 11B8;B6E5;1104 1170 11B8; +B6E6;B6E6;1104 1170 11B9;B6E6;1104 1170 11B9; +B6E7;B6E7;1104 1170 11BA;B6E7;1104 1170 11BA; +B6E8;B6E8;1104 1170 11BB;B6E8;1104 1170 11BB; +B6E9;B6E9;1104 1170 11BC;B6E9;1104 1170 11BC; +B6EA;B6EA;1104 1170 11BD;B6EA;1104 1170 11BD; +B6EB;B6EB;1104 1170 11BE;B6EB;1104 1170 11BE; +B6EC;B6EC;1104 1170 11BF;B6EC;1104 1170 11BF; +B6ED;B6ED;1104 1170 11C0;B6ED;1104 1170 11C0; +B6EE;B6EE;1104 1170 11C1;B6EE;1104 1170 11C1; +B6EF;B6EF;1104 1170 11C2;B6EF;1104 1170 11C2; +B6F0;B6F0;1104 1171;B6F0;1104 1171; +B6F1;B6F1;1104 1171 11A8;B6F1;1104 1171 11A8; +B6F2;B6F2;1104 1171 11A9;B6F2;1104 1171 11A9; +B6F3;B6F3;1104 1171 11AA;B6F3;1104 1171 11AA; +B6F4;B6F4;1104 1171 11AB;B6F4;1104 1171 11AB; +B6F5;B6F5;1104 1171 11AC;B6F5;1104 1171 11AC; +B6F6;B6F6;1104 1171 11AD;B6F6;1104 1171 11AD; +B6F7;B6F7;1104 1171 11AE;B6F7;1104 1171 11AE; +B6F8;B6F8;1104 1171 11AF;B6F8;1104 1171 11AF; +B6F9;B6F9;1104 1171 11B0;B6F9;1104 1171 11B0; +B6FA;B6FA;1104 1171 11B1;B6FA;1104 1171 11B1; +B6FB;B6FB;1104 1171 11B2;B6FB;1104 1171 11B2; +B6FC;B6FC;1104 1171 11B3;B6FC;1104 1171 11B3; +B6FD;B6FD;1104 1171 11B4;B6FD;1104 1171 11B4; +B6FE;B6FE;1104 1171 11B5;B6FE;1104 1171 11B5; +B6FF;B6FF;1104 1171 11B6;B6FF;1104 1171 11B6; +B700;B700;1104 1171 11B7;B700;1104 1171 11B7; +B701;B701;1104 1171 11B8;B701;1104 1171 11B8; +B702;B702;1104 1171 11B9;B702;1104 1171 11B9; +B703;B703;1104 1171 11BA;B703;1104 1171 11BA; +B704;B704;1104 1171 11BB;B704;1104 1171 11BB; +B705;B705;1104 1171 11BC;B705;1104 1171 11BC; +B706;B706;1104 1171 11BD;B706;1104 1171 11BD; +B707;B707;1104 1171 11BE;B707;1104 1171 11BE; +B708;B708;1104 1171 11BF;B708;1104 1171 11BF; +B709;B709;1104 1171 11C0;B709;1104 1171 11C0; +B70A;B70A;1104 1171 11C1;B70A;1104 1171 11C1; +B70B;B70B;1104 1171 11C2;B70B;1104 1171 11C2; +B70C;B70C;1104 1172;B70C;1104 1172; +B70D;B70D;1104 1172 11A8;B70D;1104 1172 11A8; +B70E;B70E;1104 1172 11A9;B70E;1104 1172 11A9; +B70F;B70F;1104 1172 11AA;B70F;1104 1172 11AA; +B710;B710;1104 1172 11AB;B710;1104 1172 11AB; +B711;B711;1104 1172 11AC;B711;1104 1172 11AC; +B712;B712;1104 1172 11AD;B712;1104 1172 11AD; +B713;B713;1104 1172 11AE;B713;1104 1172 11AE; +B714;B714;1104 1172 11AF;B714;1104 1172 11AF; +B715;B715;1104 1172 11B0;B715;1104 1172 11B0; +B716;B716;1104 1172 11B1;B716;1104 1172 11B1; +B717;B717;1104 1172 11B2;B717;1104 1172 11B2; +B718;B718;1104 1172 11B3;B718;1104 1172 11B3; +B719;B719;1104 1172 11B4;B719;1104 1172 11B4; +B71A;B71A;1104 1172 11B5;B71A;1104 1172 11B5; +B71B;B71B;1104 1172 11B6;B71B;1104 1172 11B6; +B71C;B71C;1104 1172 11B7;B71C;1104 1172 11B7; +B71D;B71D;1104 1172 11B8;B71D;1104 1172 11B8; +B71E;B71E;1104 1172 11B9;B71E;1104 1172 11B9; +B71F;B71F;1104 1172 11BA;B71F;1104 1172 11BA; +B720;B720;1104 1172 11BB;B720;1104 1172 11BB; +B721;B721;1104 1172 11BC;B721;1104 1172 11BC; +B722;B722;1104 1172 11BD;B722;1104 1172 11BD; +B723;B723;1104 1172 11BE;B723;1104 1172 11BE; +B724;B724;1104 1172 11BF;B724;1104 1172 11BF; +B725;B725;1104 1172 11C0;B725;1104 1172 11C0; +B726;B726;1104 1172 11C1;B726;1104 1172 11C1; +B727;B727;1104 1172 11C2;B727;1104 1172 11C2; +B728;B728;1104 1173;B728;1104 1173; +B729;B729;1104 1173 11A8;B729;1104 1173 11A8; +B72A;B72A;1104 1173 11A9;B72A;1104 1173 11A9; +B72B;B72B;1104 1173 11AA;B72B;1104 1173 11AA; +B72C;B72C;1104 1173 11AB;B72C;1104 1173 11AB; +B72D;B72D;1104 1173 11AC;B72D;1104 1173 11AC; +B72E;B72E;1104 1173 11AD;B72E;1104 1173 11AD; +B72F;B72F;1104 1173 11AE;B72F;1104 1173 11AE; +B730;B730;1104 1173 11AF;B730;1104 1173 11AF; +B731;B731;1104 1173 11B0;B731;1104 1173 11B0; +B732;B732;1104 1173 11B1;B732;1104 1173 11B1; +B733;B733;1104 1173 11B2;B733;1104 1173 11B2; +B734;B734;1104 1173 11B3;B734;1104 1173 11B3; +B735;B735;1104 1173 11B4;B735;1104 1173 11B4; +B736;B736;1104 1173 11B5;B736;1104 1173 11B5; +B737;B737;1104 1173 11B6;B737;1104 1173 11B6; +B738;B738;1104 1173 11B7;B738;1104 1173 11B7; +B739;B739;1104 1173 11B8;B739;1104 1173 11B8; +B73A;B73A;1104 1173 11B9;B73A;1104 1173 11B9; +B73B;B73B;1104 1173 11BA;B73B;1104 1173 11BA; +B73C;B73C;1104 1173 11BB;B73C;1104 1173 11BB; +B73D;B73D;1104 1173 11BC;B73D;1104 1173 11BC; +B73E;B73E;1104 1173 11BD;B73E;1104 1173 11BD; +B73F;B73F;1104 1173 11BE;B73F;1104 1173 11BE; +B740;B740;1104 1173 11BF;B740;1104 1173 11BF; +B741;B741;1104 1173 11C0;B741;1104 1173 11C0; +B742;B742;1104 1173 11C1;B742;1104 1173 11C1; +B743;B743;1104 1173 11C2;B743;1104 1173 11C2; +B744;B744;1104 1174;B744;1104 1174; +B745;B745;1104 1174 11A8;B745;1104 1174 11A8; +B746;B746;1104 1174 11A9;B746;1104 1174 11A9; +B747;B747;1104 1174 11AA;B747;1104 1174 11AA; +B748;B748;1104 1174 11AB;B748;1104 1174 11AB; +B749;B749;1104 1174 11AC;B749;1104 1174 11AC; +B74A;B74A;1104 1174 11AD;B74A;1104 1174 11AD; +B74B;B74B;1104 1174 11AE;B74B;1104 1174 11AE; +B74C;B74C;1104 1174 11AF;B74C;1104 1174 11AF; +B74D;B74D;1104 1174 11B0;B74D;1104 1174 11B0; +B74E;B74E;1104 1174 11B1;B74E;1104 1174 11B1; +B74F;B74F;1104 1174 11B2;B74F;1104 1174 11B2; +B750;B750;1104 1174 11B3;B750;1104 1174 11B3; +B751;B751;1104 1174 11B4;B751;1104 1174 11B4; +B752;B752;1104 1174 11B5;B752;1104 1174 11B5; +B753;B753;1104 1174 11B6;B753;1104 1174 11B6; +B754;B754;1104 1174 11B7;B754;1104 1174 11B7; +B755;B755;1104 1174 11B8;B755;1104 1174 11B8; +B756;B756;1104 1174 11B9;B756;1104 1174 11B9; +B757;B757;1104 1174 11BA;B757;1104 1174 11BA; +B758;B758;1104 1174 11BB;B758;1104 1174 11BB; +B759;B759;1104 1174 11BC;B759;1104 1174 11BC; +B75A;B75A;1104 1174 11BD;B75A;1104 1174 11BD; +B75B;B75B;1104 1174 11BE;B75B;1104 1174 11BE; +B75C;B75C;1104 1174 11BF;B75C;1104 1174 11BF; +B75D;B75D;1104 1174 11C0;B75D;1104 1174 11C0; +B75E;B75E;1104 1174 11C1;B75E;1104 1174 11C1; +B75F;B75F;1104 1174 11C2;B75F;1104 1174 11C2; +B760;B760;1104 1175;B760;1104 1175; +B761;B761;1104 1175 11A8;B761;1104 1175 11A8; +B762;B762;1104 1175 11A9;B762;1104 1175 11A9; +B763;B763;1104 1175 11AA;B763;1104 1175 11AA; +B764;B764;1104 1175 11AB;B764;1104 1175 11AB; +B765;B765;1104 1175 11AC;B765;1104 1175 11AC; +B766;B766;1104 1175 11AD;B766;1104 1175 11AD; +B767;B767;1104 1175 11AE;B767;1104 1175 11AE; +B768;B768;1104 1175 11AF;B768;1104 1175 11AF; +B769;B769;1104 1175 11B0;B769;1104 1175 11B0; +B76A;B76A;1104 1175 11B1;B76A;1104 1175 11B1; +B76B;B76B;1104 1175 11B2;B76B;1104 1175 11B2; +B76C;B76C;1104 1175 11B3;B76C;1104 1175 11B3; +B76D;B76D;1104 1175 11B4;B76D;1104 1175 11B4; +B76E;B76E;1104 1175 11B5;B76E;1104 1175 11B5; +B76F;B76F;1104 1175 11B6;B76F;1104 1175 11B6; +B770;B770;1104 1175 11B7;B770;1104 1175 11B7; +B771;B771;1104 1175 11B8;B771;1104 1175 11B8; +B772;B772;1104 1175 11B9;B772;1104 1175 11B9; +B773;B773;1104 1175 11BA;B773;1104 1175 11BA; +B774;B774;1104 1175 11BB;B774;1104 1175 11BB; +B775;B775;1104 1175 11BC;B775;1104 1175 11BC; +B776;B776;1104 1175 11BD;B776;1104 1175 11BD; +B777;B777;1104 1175 11BE;B777;1104 1175 11BE; +B778;B778;1104 1175 11BF;B778;1104 1175 11BF; +B779;B779;1104 1175 11C0;B779;1104 1175 11C0; +B77A;B77A;1104 1175 11C1;B77A;1104 1175 11C1; +B77B;B77B;1104 1175 11C2;B77B;1104 1175 11C2; +B77C;B77C;1105 1161;B77C;1105 1161; +B77D;B77D;1105 1161 11A8;B77D;1105 1161 11A8; +B77E;B77E;1105 1161 11A9;B77E;1105 1161 11A9; +B77F;B77F;1105 1161 11AA;B77F;1105 1161 11AA; +B780;B780;1105 1161 11AB;B780;1105 1161 11AB; +B781;B781;1105 1161 11AC;B781;1105 1161 11AC; +B782;B782;1105 1161 11AD;B782;1105 1161 11AD; +B783;B783;1105 1161 11AE;B783;1105 1161 11AE; +B784;B784;1105 1161 11AF;B784;1105 1161 11AF; +B785;B785;1105 1161 11B0;B785;1105 1161 11B0; +B786;B786;1105 1161 11B1;B786;1105 1161 11B1; +B787;B787;1105 1161 11B2;B787;1105 1161 11B2; +B788;B788;1105 1161 11B3;B788;1105 1161 11B3; +B789;B789;1105 1161 11B4;B789;1105 1161 11B4; +B78A;B78A;1105 1161 11B5;B78A;1105 1161 11B5; +B78B;B78B;1105 1161 11B6;B78B;1105 1161 11B6; +B78C;B78C;1105 1161 11B7;B78C;1105 1161 11B7; +B78D;B78D;1105 1161 11B8;B78D;1105 1161 11B8; +B78E;B78E;1105 1161 11B9;B78E;1105 1161 11B9; +B78F;B78F;1105 1161 11BA;B78F;1105 1161 11BA; +B790;B790;1105 1161 11BB;B790;1105 1161 11BB; +B791;B791;1105 1161 11BC;B791;1105 1161 11BC; +B792;B792;1105 1161 11BD;B792;1105 1161 11BD; +B793;B793;1105 1161 11BE;B793;1105 1161 11BE; +B794;B794;1105 1161 11BF;B794;1105 1161 11BF; +B795;B795;1105 1161 11C0;B795;1105 1161 11C0; +B796;B796;1105 1161 11C1;B796;1105 1161 11C1; +B797;B797;1105 1161 11C2;B797;1105 1161 11C2; +B798;B798;1105 1162;B798;1105 1162; +B799;B799;1105 1162 11A8;B799;1105 1162 11A8; +B79A;B79A;1105 1162 11A9;B79A;1105 1162 11A9; +B79B;B79B;1105 1162 11AA;B79B;1105 1162 11AA; +B79C;B79C;1105 1162 11AB;B79C;1105 1162 11AB; +B79D;B79D;1105 1162 11AC;B79D;1105 1162 11AC; +B79E;B79E;1105 1162 11AD;B79E;1105 1162 11AD; +B79F;B79F;1105 1162 11AE;B79F;1105 1162 11AE; +B7A0;B7A0;1105 1162 11AF;B7A0;1105 1162 11AF; +B7A1;B7A1;1105 1162 11B0;B7A1;1105 1162 11B0; +B7A2;B7A2;1105 1162 11B1;B7A2;1105 1162 11B1; +B7A3;B7A3;1105 1162 11B2;B7A3;1105 1162 11B2; +B7A4;B7A4;1105 1162 11B3;B7A4;1105 1162 11B3; +B7A5;B7A5;1105 1162 11B4;B7A5;1105 1162 11B4; +B7A6;B7A6;1105 1162 11B5;B7A6;1105 1162 11B5; +B7A7;B7A7;1105 1162 11B6;B7A7;1105 1162 11B6; +B7A8;B7A8;1105 1162 11B7;B7A8;1105 1162 11B7; +B7A9;B7A9;1105 1162 11B8;B7A9;1105 1162 11B8; +B7AA;B7AA;1105 1162 11B9;B7AA;1105 1162 11B9; +B7AB;B7AB;1105 1162 11BA;B7AB;1105 1162 11BA; +B7AC;B7AC;1105 1162 11BB;B7AC;1105 1162 11BB; +B7AD;B7AD;1105 1162 11BC;B7AD;1105 1162 11BC; +B7AE;B7AE;1105 1162 11BD;B7AE;1105 1162 11BD; +B7AF;B7AF;1105 1162 11BE;B7AF;1105 1162 11BE; +B7B0;B7B0;1105 1162 11BF;B7B0;1105 1162 11BF; +B7B1;B7B1;1105 1162 11C0;B7B1;1105 1162 11C0; +B7B2;B7B2;1105 1162 11C1;B7B2;1105 1162 11C1; +B7B3;B7B3;1105 1162 11C2;B7B3;1105 1162 11C2; +B7B4;B7B4;1105 1163;B7B4;1105 1163; +B7B5;B7B5;1105 1163 11A8;B7B5;1105 1163 11A8; +B7B6;B7B6;1105 1163 11A9;B7B6;1105 1163 11A9; +B7B7;B7B7;1105 1163 11AA;B7B7;1105 1163 11AA; +B7B8;B7B8;1105 1163 11AB;B7B8;1105 1163 11AB; +B7B9;B7B9;1105 1163 11AC;B7B9;1105 1163 11AC; +B7BA;B7BA;1105 1163 11AD;B7BA;1105 1163 11AD; +B7BB;B7BB;1105 1163 11AE;B7BB;1105 1163 11AE; +B7BC;B7BC;1105 1163 11AF;B7BC;1105 1163 11AF; +B7BD;B7BD;1105 1163 11B0;B7BD;1105 1163 11B0; +B7BE;B7BE;1105 1163 11B1;B7BE;1105 1163 11B1; +B7BF;B7BF;1105 1163 11B2;B7BF;1105 1163 11B2; +B7C0;B7C0;1105 1163 11B3;B7C0;1105 1163 11B3; +B7C1;B7C1;1105 1163 11B4;B7C1;1105 1163 11B4; +B7C2;B7C2;1105 1163 11B5;B7C2;1105 1163 11B5; +B7C3;B7C3;1105 1163 11B6;B7C3;1105 1163 11B6; +B7C4;B7C4;1105 1163 11B7;B7C4;1105 1163 11B7; +B7C5;B7C5;1105 1163 11B8;B7C5;1105 1163 11B8; +B7C6;B7C6;1105 1163 11B9;B7C6;1105 1163 11B9; +B7C7;B7C7;1105 1163 11BA;B7C7;1105 1163 11BA; +B7C8;B7C8;1105 1163 11BB;B7C8;1105 1163 11BB; +B7C9;B7C9;1105 1163 11BC;B7C9;1105 1163 11BC; +B7CA;B7CA;1105 1163 11BD;B7CA;1105 1163 11BD; +B7CB;B7CB;1105 1163 11BE;B7CB;1105 1163 11BE; +B7CC;B7CC;1105 1163 11BF;B7CC;1105 1163 11BF; +B7CD;B7CD;1105 1163 11C0;B7CD;1105 1163 11C0; +B7CE;B7CE;1105 1163 11C1;B7CE;1105 1163 11C1; +B7CF;B7CF;1105 1163 11C2;B7CF;1105 1163 11C2; +B7D0;B7D0;1105 1164;B7D0;1105 1164; +B7D1;B7D1;1105 1164 11A8;B7D1;1105 1164 11A8; +B7D2;B7D2;1105 1164 11A9;B7D2;1105 1164 11A9; +B7D3;B7D3;1105 1164 11AA;B7D3;1105 1164 11AA; +B7D4;B7D4;1105 1164 11AB;B7D4;1105 1164 11AB; +B7D5;B7D5;1105 1164 11AC;B7D5;1105 1164 11AC; +B7D6;B7D6;1105 1164 11AD;B7D6;1105 1164 11AD; +B7D7;B7D7;1105 1164 11AE;B7D7;1105 1164 11AE; +B7D8;B7D8;1105 1164 11AF;B7D8;1105 1164 11AF; +B7D9;B7D9;1105 1164 11B0;B7D9;1105 1164 11B0; +B7DA;B7DA;1105 1164 11B1;B7DA;1105 1164 11B1; +B7DB;B7DB;1105 1164 11B2;B7DB;1105 1164 11B2; +B7DC;B7DC;1105 1164 11B3;B7DC;1105 1164 11B3; +B7DD;B7DD;1105 1164 11B4;B7DD;1105 1164 11B4; +B7DE;B7DE;1105 1164 11B5;B7DE;1105 1164 11B5; +B7DF;B7DF;1105 1164 11B6;B7DF;1105 1164 11B6; +B7E0;B7E0;1105 1164 11B7;B7E0;1105 1164 11B7; +B7E1;B7E1;1105 1164 11B8;B7E1;1105 1164 11B8; +B7E2;B7E2;1105 1164 11B9;B7E2;1105 1164 11B9; +B7E3;B7E3;1105 1164 11BA;B7E3;1105 1164 11BA; +B7E4;B7E4;1105 1164 11BB;B7E4;1105 1164 11BB; +B7E5;B7E5;1105 1164 11BC;B7E5;1105 1164 11BC; +B7E6;B7E6;1105 1164 11BD;B7E6;1105 1164 11BD; +B7E7;B7E7;1105 1164 11BE;B7E7;1105 1164 11BE; +B7E8;B7E8;1105 1164 11BF;B7E8;1105 1164 11BF; +B7E9;B7E9;1105 1164 11C0;B7E9;1105 1164 11C0; +B7EA;B7EA;1105 1164 11C1;B7EA;1105 1164 11C1; +B7EB;B7EB;1105 1164 11C2;B7EB;1105 1164 11C2; +B7EC;B7EC;1105 1165;B7EC;1105 1165; +B7ED;B7ED;1105 1165 11A8;B7ED;1105 1165 11A8; +B7EE;B7EE;1105 1165 11A9;B7EE;1105 1165 11A9; +B7EF;B7EF;1105 1165 11AA;B7EF;1105 1165 11AA; +B7F0;B7F0;1105 1165 11AB;B7F0;1105 1165 11AB; +B7F1;B7F1;1105 1165 11AC;B7F1;1105 1165 11AC; +B7F2;B7F2;1105 1165 11AD;B7F2;1105 1165 11AD; +B7F3;B7F3;1105 1165 11AE;B7F3;1105 1165 11AE; +B7F4;B7F4;1105 1165 11AF;B7F4;1105 1165 11AF; +B7F5;B7F5;1105 1165 11B0;B7F5;1105 1165 11B0; +B7F6;B7F6;1105 1165 11B1;B7F6;1105 1165 11B1; +B7F7;B7F7;1105 1165 11B2;B7F7;1105 1165 11B2; +B7F8;B7F8;1105 1165 11B3;B7F8;1105 1165 11B3; +B7F9;B7F9;1105 1165 11B4;B7F9;1105 1165 11B4; +B7FA;B7FA;1105 1165 11B5;B7FA;1105 1165 11B5; +B7FB;B7FB;1105 1165 11B6;B7FB;1105 1165 11B6; +B7FC;B7FC;1105 1165 11B7;B7FC;1105 1165 11B7; +B7FD;B7FD;1105 1165 11B8;B7FD;1105 1165 11B8; +B7FE;B7FE;1105 1165 11B9;B7FE;1105 1165 11B9; +B7FF;B7FF;1105 1165 11BA;B7FF;1105 1165 11BA; +B800;B800;1105 1165 11BB;B800;1105 1165 11BB; +B801;B801;1105 1165 11BC;B801;1105 1165 11BC; +B802;B802;1105 1165 11BD;B802;1105 1165 11BD; +B803;B803;1105 1165 11BE;B803;1105 1165 11BE; +B804;B804;1105 1165 11BF;B804;1105 1165 11BF; +B805;B805;1105 1165 11C0;B805;1105 1165 11C0; +B806;B806;1105 1165 11C1;B806;1105 1165 11C1; +B807;B807;1105 1165 11C2;B807;1105 1165 11C2; +B808;B808;1105 1166;B808;1105 1166; +B809;B809;1105 1166 11A8;B809;1105 1166 11A8; +B80A;B80A;1105 1166 11A9;B80A;1105 1166 11A9; +B80B;B80B;1105 1166 11AA;B80B;1105 1166 11AA; +B80C;B80C;1105 1166 11AB;B80C;1105 1166 11AB; +B80D;B80D;1105 1166 11AC;B80D;1105 1166 11AC; +B80E;B80E;1105 1166 11AD;B80E;1105 1166 11AD; +B80F;B80F;1105 1166 11AE;B80F;1105 1166 11AE; +B810;B810;1105 1166 11AF;B810;1105 1166 11AF; +B811;B811;1105 1166 11B0;B811;1105 1166 11B0; +B812;B812;1105 1166 11B1;B812;1105 1166 11B1; +B813;B813;1105 1166 11B2;B813;1105 1166 11B2; +B814;B814;1105 1166 11B3;B814;1105 1166 11B3; +B815;B815;1105 1166 11B4;B815;1105 1166 11B4; +B816;B816;1105 1166 11B5;B816;1105 1166 11B5; +B817;B817;1105 1166 11B6;B817;1105 1166 11B6; +B818;B818;1105 1166 11B7;B818;1105 1166 11B7; +B819;B819;1105 1166 11B8;B819;1105 1166 11B8; +B81A;B81A;1105 1166 11B9;B81A;1105 1166 11B9; +B81B;B81B;1105 1166 11BA;B81B;1105 1166 11BA; +B81C;B81C;1105 1166 11BB;B81C;1105 1166 11BB; +B81D;B81D;1105 1166 11BC;B81D;1105 1166 11BC; +B81E;B81E;1105 1166 11BD;B81E;1105 1166 11BD; +B81F;B81F;1105 1166 11BE;B81F;1105 1166 11BE; +B820;B820;1105 1166 11BF;B820;1105 1166 11BF; +B821;B821;1105 1166 11C0;B821;1105 1166 11C0; +B822;B822;1105 1166 11C1;B822;1105 1166 11C1; +B823;B823;1105 1166 11C2;B823;1105 1166 11C2; +B824;B824;1105 1167;B824;1105 1167; +B825;B825;1105 1167 11A8;B825;1105 1167 11A8; +B826;B826;1105 1167 11A9;B826;1105 1167 11A9; +B827;B827;1105 1167 11AA;B827;1105 1167 11AA; +B828;B828;1105 1167 11AB;B828;1105 1167 11AB; +B829;B829;1105 1167 11AC;B829;1105 1167 11AC; +B82A;B82A;1105 1167 11AD;B82A;1105 1167 11AD; +B82B;B82B;1105 1167 11AE;B82B;1105 1167 11AE; +B82C;B82C;1105 1167 11AF;B82C;1105 1167 11AF; +B82D;B82D;1105 1167 11B0;B82D;1105 1167 11B0; +B82E;B82E;1105 1167 11B1;B82E;1105 1167 11B1; +B82F;B82F;1105 1167 11B2;B82F;1105 1167 11B2; +B830;B830;1105 1167 11B3;B830;1105 1167 11B3; +B831;B831;1105 1167 11B4;B831;1105 1167 11B4; +B832;B832;1105 1167 11B5;B832;1105 1167 11B5; +B833;B833;1105 1167 11B6;B833;1105 1167 11B6; +B834;B834;1105 1167 11B7;B834;1105 1167 11B7; +B835;B835;1105 1167 11B8;B835;1105 1167 11B8; +B836;B836;1105 1167 11B9;B836;1105 1167 11B9; +B837;B837;1105 1167 11BA;B837;1105 1167 11BA; +B838;B838;1105 1167 11BB;B838;1105 1167 11BB; +B839;B839;1105 1167 11BC;B839;1105 1167 11BC; +B83A;B83A;1105 1167 11BD;B83A;1105 1167 11BD; +B83B;B83B;1105 1167 11BE;B83B;1105 1167 11BE; +B83C;B83C;1105 1167 11BF;B83C;1105 1167 11BF; +B83D;B83D;1105 1167 11C0;B83D;1105 1167 11C0; +B83E;B83E;1105 1167 11C1;B83E;1105 1167 11C1; +B83F;B83F;1105 1167 11C2;B83F;1105 1167 11C2; +B840;B840;1105 1168;B840;1105 1168; +B841;B841;1105 1168 11A8;B841;1105 1168 11A8; +B842;B842;1105 1168 11A9;B842;1105 1168 11A9; +B843;B843;1105 1168 11AA;B843;1105 1168 11AA; +B844;B844;1105 1168 11AB;B844;1105 1168 11AB; +B845;B845;1105 1168 11AC;B845;1105 1168 11AC; +B846;B846;1105 1168 11AD;B846;1105 1168 11AD; +B847;B847;1105 1168 11AE;B847;1105 1168 11AE; +B848;B848;1105 1168 11AF;B848;1105 1168 11AF; +B849;B849;1105 1168 11B0;B849;1105 1168 11B0; +B84A;B84A;1105 1168 11B1;B84A;1105 1168 11B1; +B84B;B84B;1105 1168 11B2;B84B;1105 1168 11B2; +B84C;B84C;1105 1168 11B3;B84C;1105 1168 11B3; +B84D;B84D;1105 1168 11B4;B84D;1105 1168 11B4; +B84E;B84E;1105 1168 11B5;B84E;1105 1168 11B5; +B84F;B84F;1105 1168 11B6;B84F;1105 1168 11B6; +B850;B850;1105 1168 11B7;B850;1105 1168 11B7; +B851;B851;1105 1168 11B8;B851;1105 1168 11B8; +B852;B852;1105 1168 11B9;B852;1105 1168 11B9; +B853;B853;1105 1168 11BA;B853;1105 1168 11BA; +B854;B854;1105 1168 11BB;B854;1105 1168 11BB; +B855;B855;1105 1168 11BC;B855;1105 1168 11BC; +B856;B856;1105 1168 11BD;B856;1105 1168 11BD; +B857;B857;1105 1168 11BE;B857;1105 1168 11BE; +B858;B858;1105 1168 11BF;B858;1105 1168 11BF; +B859;B859;1105 1168 11C0;B859;1105 1168 11C0; +B85A;B85A;1105 1168 11C1;B85A;1105 1168 11C1; +B85B;B85B;1105 1168 11C2;B85B;1105 1168 11C2; +B85C;B85C;1105 1169;B85C;1105 1169; +B85D;B85D;1105 1169 11A8;B85D;1105 1169 11A8; +B85E;B85E;1105 1169 11A9;B85E;1105 1169 11A9; +B85F;B85F;1105 1169 11AA;B85F;1105 1169 11AA; +B860;B860;1105 1169 11AB;B860;1105 1169 11AB; +B861;B861;1105 1169 11AC;B861;1105 1169 11AC; +B862;B862;1105 1169 11AD;B862;1105 1169 11AD; +B863;B863;1105 1169 11AE;B863;1105 1169 11AE; +B864;B864;1105 1169 11AF;B864;1105 1169 11AF; +B865;B865;1105 1169 11B0;B865;1105 1169 11B0; +B866;B866;1105 1169 11B1;B866;1105 1169 11B1; +B867;B867;1105 1169 11B2;B867;1105 1169 11B2; +B868;B868;1105 1169 11B3;B868;1105 1169 11B3; +B869;B869;1105 1169 11B4;B869;1105 1169 11B4; +B86A;B86A;1105 1169 11B5;B86A;1105 1169 11B5; +B86B;B86B;1105 1169 11B6;B86B;1105 1169 11B6; +B86C;B86C;1105 1169 11B7;B86C;1105 1169 11B7; +B86D;B86D;1105 1169 11B8;B86D;1105 1169 11B8; +B86E;B86E;1105 1169 11B9;B86E;1105 1169 11B9; +B86F;B86F;1105 1169 11BA;B86F;1105 1169 11BA; +B870;B870;1105 1169 11BB;B870;1105 1169 11BB; +B871;B871;1105 1169 11BC;B871;1105 1169 11BC; +B872;B872;1105 1169 11BD;B872;1105 1169 11BD; +B873;B873;1105 1169 11BE;B873;1105 1169 11BE; +B874;B874;1105 1169 11BF;B874;1105 1169 11BF; +B875;B875;1105 1169 11C0;B875;1105 1169 11C0; +B876;B876;1105 1169 11C1;B876;1105 1169 11C1; +B877;B877;1105 1169 11C2;B877;1105 1169 11C2; +B878;B878;1105 116A;B878;1105 116A; +B879;B879;1105 116A 11A8;B879;1105 116A 11A8; +B87A;B87A;1105 116A 11A9;B87A;1105 116A 11A9; +B87B;B87B;1105 116A 11AA;B87B;1105 116A 11AA; +B87C;B87C;1105 116A 11AB;B87C;1105 116A 11AB; +B87D;B87D;1105 116A 11AC;B87D;1105 116A 11AC; +B87E;B87E;1105 116A 11AD;B87E;1105 116A 11AD; +B87F;B87F;1105 116A 11AE;B87F;1105 116A 11AE; +B880;B880;1105 116A 11AF;B880;1105 116A 11AF; +B881;B881;1105 116A 11B0;B881;1105 116A 11B0; +B882;B882;1105 116A 11B1;B882;1105 116A 11B1; +B883;B883;1105 116A 11B2;B883;1105 116A 11B2; +B884;B884;1105 116A 11B3;B884;1105 116A 11B3; +B885;B885;1105 116A 11B4;B885;1105 116A 11B4; +B886;B886;1105 116A 11B5;B886;1105 116A 11B5; +B887;B887;1105 116A 11B6;B887;1105 116A 11B6; +B888;B888;1105 116A 11B7;B888;1105 116A 11B7; +B889;B889;1105 116A 11B8;B889;1105 116A 11B8; +B88A;B88A;1105 116A 11B9;B88A;1105 116A 11B9; +B88B;B88B;1105 116A 11BA;B88B;1105 116A 11BA; +B88C;B88C;1105 116A 11BB;B88C;1105 116A 11BB; +B88D;B88D;1105 116A 11BC;B88D;1105 116A 11BC; +B88E;B88E;1105 116A 11BD;B88E;1105 116A 11BD; +B88F;B88F;1105 116A 11BE;B88F;1105 116A 11BE; +B890;B890;1105 116A 11BF;B890;1105 116A 11BF; +B891;B891;1105 116A 11C0;B891;1105 116A 11C0; +B892;B892;1105 116A 11C1;B892;1105 116A 11C1; +B893;B893;1105 116A 11C2;B893;1105 116A 11C2; +B894;B894;1105 116B;B894;1105 116B; +B895;B895;1105 116B 11A8;B895;1105 116B 11A8; +B896;B896;1105 116B 11A9;B896;1105 116B 11A9; +B897;B897;1105 116B 11AA;B897;1105 116B 11AA; +B898;B898;1105 116B 11AB;B898;1105 116B 11AB; +B899;B899;1105 116B 11AC;B899;1105 116B 11AC; +B89A;B89A;1105 116B 11AD;B89A;1105 116B 11AD; +B89B;B89B;1105 116B 11AE;B89B;1105 116B 11AE; +B89C;B89C;1105 116B 11AF;B89C;1105 116B 11AF; +B89D;B89D;1105 116B 11B0;B89D;1105 116B 11B0; +B89E;B89E;1105 116B 11B1;B89E;1105 116B 11B1; +B89F;B89F;1105 116B 11B2;B89F;1105 116B 11B2; +B8A0;B8A0;1105 116B 11B3;B8A0;1105 116B 11B3; +B8A1;B8A1;1105 116B 11B4;B8A1;1105 116B 11B4; +B8A2;B8A2;1105 116B 11B5;B8A2;1105 116B 11B5; +B8A3;B8A3;1105 116B 11B6;B8A3;1105 116B 11B6; +B8A4;B8A4;1105 116B 11B7;B8A4;1105 116B 11B7; +B8A5;B8A5;1105 116B 11B8;B8A5;1105 116B 11B8; +B8A6;B8A6;1105 116B 11B9;B8A6;1105 116B 11B9; +B8A7;B8A7;1105 116B 11BA;B8A7;1105 116B 11BA; +B8A8;B8A8;1105 116B 11BB;B8A8;1105 116B 11BB; +B8A9;B8A9;1105 116B 11BC;B8A9;1105 116B 11BC; +B8AA;B8AA;1105 116B 11BD;B8AA;1105 116B 11BD; +B8AB;B8AB;1105 116B 11BE;B8AB;1105 116B 11BE; +B8AC;B8AC;1105 116B 11BF;B8AC;1105 116B 11BF; +B8AD;B8AD;1105 116B 11C0;B8AD;1105 116B 11C0; +B8AE;B8AE;1105 116B 11C1;B8AE;1105 116B 11C1; +B8AF;B8AF;1105 116B 11C2;B8AF;1105 116B 11C2; +B8B0;B8B0;1105 116C;B8B0;1105 116C; +B8B1;B8B1;1105 116C 11A8;B8B1;1105 116C 11A8; +B8B2;B8B2;1105 116C 11A9;B8B2;1105 116C 11A9; +B8B3;B8B3;1105 116C 11AA;B8B3;1105 116C 11AA; +B8B4;B8B4;1105 116C 11AB;B8B4;1105 116C 11AB; +B8B5;B8B5;1105 116C 11AC;B8B5;1105 116C 11AC; +B8B6;B8B6;1105 116C 11AD;B8B6;1105 116C 11AD; +B8B7;B8B7;1105 116C 11AE;B8B7;1105 116C 11AE; +B8B8;B8B8;1105 116C 11AF;B8B8;1105 116C 11AF; +B8B9;B8B9;1105 116C 11B0;B8B9;1105 116C 11B0; +B8BA;B8BA;1105 116C 11B1;B8BA;1105 116C 11B1; +B8BB;B8BB;1105 116C 11B2;B8BB;1105 116C 11B2; +B8BC;B8BC;1105 116C 11B3;B8BC;1105 116C 11B3; +B8BD;B8BD;1105 116C 11B4;B8BD;1105 116C 11B4; +B8BE;B8BE;1105 116C 11B5;B8BE;1105 116C 11B5; +B8BF;B8BF;1105 116C 11B6;B8BF;1105 116C 11B6; +B8C0;B8C0;1105 116C 11B7;B8C0;1105 116C 11B7; +B8C1;B8C1;1105 116C 11B8;B8C1;1105 116C 11B8; +B8C2;B8C2;1105 116C 11B9;B8C2;1105 116C 11B9; +B8C3;B8C3;1105 116C 11BA;B8C3;1105 116C 11BA; +B8C4;B8C4;1105 116C 11BB;B8C4;1105 116C 11BB; +B8C5;B8C5;1105 116C 11BC;B8C5;1105 116C 11BC; +B8C6;B8C6;1105 116C 11BD;B8C6;1105 116C 11BD; +B8C7;B8C7;1105 116C 11BE;B8C7;1105 116C 11BE; +B8C8;B8C8;1105 116C 11BF;B8C8;1105 116C 11BF; +B8C9;B8C9;1105 116C 11C0;B8C9;1105 116C 11C0; +B8CA;B8CA;1105 116C 11C1;B8CA;1105 116C 11C1; +B8CB;B8CB;1105 116C 11C2;B8CB;1105 116C 11C2; +B8CC;B8CC;1105 116D;B8CC;1105 116D; +B8CD;B8CD;1105 116D 11A8;B8CD;1105 116D 11A8; +B8CE;B8CE;1105 116D 11A9;B8CE;1105 116D 11A9; +B8CF;B8CF;1105 116D 11AA;B8CF;1105 116D 11AA; +B8D0;B8D0;1105 116D 11AB;B8D0;1105 116D 11AB; +B8D1;B8D1;1105 116D 11AC;B8D1;1105 116D 11AC; +B8D2;B8D2;1105 116D 11AD;B8D2;1105 116D 11AD; +B8D3;B8D3;1105 116D 11AE;B8D3;1105 116D 11AE; +B8D4;B8D4;1105 116D 11AF;B8D4;1105 116D 11AF; +B8D5;B8D5;1105 116D 11B0;B8D5;1105 116D 11B0; +B8D6;B8D6;1105 116D 11B1;B8D6;1105 116D 11B1; +B8D7;B8D7;1105 116D 11B2;B8D7;1105 116D 11B2; +B8D8;B8D8;1105 116D 11B3;B8D8;1105 116D 11B3; +B8D9;B8D9;1105 116D 11B4;B8D9;1105 116D 11B4; +B8DA;B8DA;1105 116D 11B5;B8DA;1105 116D 11B5; +B8DB;B8DB;1105 116D 11B6;B8DB;1105 116D 11B6; +B8DC;B8DC;1105 116D 11B7;B8DC;1105 116D 11B7; +B8DD;B8DD;1105 116D 11B8;B8DD;1105 116D 11B8; +B8DE;B8DE;1105 116D 11B9;B8DE;1105 116D 11B9; +B8DF;B8DF;1105 116D 11BA;B8DF;1105 116D 11BA; +B8E0;B8E0;1105 116D 11BB;B8E0;1105 116D 11BB; +B8E1;B8E1;1105 116D 11BC;B8E1;1105 116D 11BC; +B8E2;B8E2;1105 116D 11BD;B8E2;1105 116D 11BD; +B8E3;B8E3;1105 116D 11BE;B8E3;1105 116D 11BE; +B8E4;B8E4;1105 116D 11BF;B8E4;1105 116D 11BF; +B8E5;B8E5;1105 116D 11C0;B8E5;1105 116D 11C0; +B8E6;B8E6;1105 116D 11C1;B8E6;1105 116D 11C1; +B8E7;B8E7;1105 116D 11C2;B8E7;1105 116D 11C2; +B8E8;B8E8;1105 116E;B8E8;1105 116E; +B8E9;B8E9;1105 116E 11A8;B8E9;1105 116E 11A8; +B8EA;B8EA;1105 116E 11A9;B8EA;1105 116E 11A9; +B8EB;B8EB;1105 116E 11AA;B8EB;1105 116E 11AA; +B8EC;B8EC;1105 116E 11AB;B8EC;1105 116E 11AB; +B8ED;B8ED;1105 116E 11AC;B8ED;1105 116E 11AC; +B8EE;B8EE;1105 116E 11AD;B8EE;1105 116E 11AD; +B8EF;B8EF;1105 116E 11AE;B8EF;1105 116E 11AE; +B8F0;B8F0;1105 116E 11AF;B8F0;1105 116E 11AF; +B8F1;B8F1;1105 116E 11B0;B8F1;1105 116E 11B0; +B8F2;B8F2;1105 116E 11B1;B8F2;1105 116E 11B1; +B8F3;B8F3;1105 116E 11B2;B8F3;1105 116E 11B2; +B8F4;B8F4;1105 116E 11B3;B8F4;1105 116E 11B3; +B8F5;B8F5;1105 116E 11B4;B8F5;1105 116E 11B4; +B8F6;B8F6;1105 116E 11B5;B8F6;1105 116E 11B5; +B8F7;B8F7;1105 116E 11B6;B8F7;1105 116E 11B6; +B8F8;B8F8;1105 116E 11B7;B8F8;1105 116E 11B7; +B8F9;B8F9;1105 116E 11B8;B8F9;1105 116E 11B8; +B8FA;B8FA;1105 116E 11B9;B8FA;1105 116E 11B9; +B8FB;B8FB;1105 116E 11BA;B8FB;1105 116E 11BA; +B8FC;B8FC;1105 116E 11BB;B8FC;1105 116E 11BB; +B8FD;B8FD;1105 116E 11BC;B8FD;1105 116E 11BC; +B8FE;B8FE;1105 116E 11BD;B8FE;1105 116E 11BD; +B8FF;B8FF;1105 116E 11BE;B8FF;1105 116E 11BE; +B900;B900;1105 116E 11BF;B900;1105 116E 11BF; +B901;B901;1105 116E 11C0;B901;1105 116E 11C0; +B902;B902;1105 116E 11C1;B902;1105 116E 11C1; +B903;B903;1105 116E 11C2;B903;1105 116E 11C2; +B904;B904;1105 116F;B904;1105 116F; +B905;B905;1105 116F 11A8;B905;1105 116F 11A8; +B906;B906;1105 116F 11A9;B906;1105 116F 11A9; +B907;B907;1105 116F 11AA;B907;1105 116F 11AA; +B908;B908;1105 116F 11AB;B908;1105 116F 11AB; +B909;B909;1105 116F 11AC;B909;1105 116F 11AC; +B90A;B90A;1105 116F 11AD;B90A;1105 116F 11AD; +B90B;B90B;1105 116F 11AE;B90B;1105 116F 11AE; +B90C;B90C;1105 116F 11AF;B90C;1105 116F 11AF; +B90D;B90D;1105 116F 11B0;B90D;1105 116F 11B0; +B90E;B90E;1105 116F 11B1;B90E;1105 116F 11B1; +B90F;B90F;1105 116F 11B2;B90F;1105 116F 11B2; +B910;B910;1105 116F 11B3;B910;1105 116F 11B3; +B911;B911;1105 116F 11B4;B911;1105 116F 11B4; +B912;B912;1105 116F 11B5;B912;1105 116F 11B5; +B913;B913;1105 116F 11B6;B913;1105 116F 11B6; +B914;B914;1105 116F 11B7;B914;1105 116F 11B7; +B915;B915;1105 116F 11B8;B915;1105 116F 11B8; +B916;B916;1105 116F 11B9;B916;1105 116F 11B9; +B917;B917;1105 116F 11BA;B917;1105 116F 11BA; +B918;B918;1105 116F 11BB;B918;1105 116F 11BB; +B919;B919;1105 116F 11BC;B919;1105 116F 11BC; +B91A;B91A;1105 116F 11BD;B91A;1105 116F 11BD; +B91B;B91B;1105 116F 11BE;B91B;1105 116F 11BE; +B91C;B91C;1105 116F 11BF;B91C;1105 116F 11BF; +B91D;B91D;1105 116F 11C0;B91D;1105 116F 11C0; +B91E;B91E;1105 116F 11C1;B91E;1105 116F 11C1; +B91F;B91F;1105 116F 11C2;B91F;1105 116F 11C2; +B920;B920;1105 1170;B920;1105 1170; +B921;B921;1105 1170 11A8;B921;1105 1170 11A8; +B922;B922;1105 1170 11A9;B922;1105 1170 11A9; +B923;B923;1105 1170 11AA;B923;1105 1170 11AA; +B924;B924;1105 1170 11AB;B924;1105 1170 11AB; +B925;B925;1105 1170 11AC;B925;1105 1170 11AC; +B926;B926;1105 1170 11AD;B926;1105 1170 11AD; +B927;B927;1105 1170 11AE;B927;1105 1170 11AE; +B928;B928;1105 1170 11AF;B928;1105 1170 11AF; +B929;B929;1105 1170 11B0;B929;1105 1170 11B0; +B92A;B92A;1105 1170 11B1;B92A;1105 1170 11B1; +B92B;B92B;1105 1170 11B2;B92B;1105 1170 11B2; +B92C;B92C;1105 1170 11B3;B92C;1105 1170 11B3; +B92D;B92D;1105 1170 11B4;B92D;1105 1170 11B4; +B92E;B92E;1105 1170 11B5;B92E;1105 1170 11B5; +B92F;B92F;1105 1170 11B6;B92F;1105 1170 11B6; +B930;B930;1105 1170 11B7;B930;1105 1170 11B7; +B931;B931;1105 1170 11B8;B931;1105 1170 11B8; +B932;B932;1105 1170 11B9;B932;1105 1170 11B9; +B933;B933;1105 1170 11BA;B933;1105 1170 11BA; +B934;B934;1105 1170 11BB;B934;1105 1170 11BB; +B935;B935;1105 1170 11BC;B935;1105 1170 11BC; +B936;B936;1105 1170 11BD;B936;1105 1170 11BD; +B937;B937;1105 1170 11BE;B937;1105 1170 11BE; +B938;B938;1105 1170 11BF;B938;1105 1170 11BF; +B939;B939;1105 1170 11C0;B939;1105 1170 11C0; +B93A;B93A;1105 1170 11C1;B93A;1105 1170 11C1; +B93B;B93B;1105 1170 11C2;B93B;1105 1170 11C2; +B93C;B93C;1105 1171;B93C;1105 1171; +B93D;B93D;1105 1171 11A8;B93D;1105 1171 11A8; +B93E;B93E;1105 1171 11A9;B93E;1105 1171 11A9; +B93F;B93F;1105 1171 11AA;B93F;1105 1171 11AA; +B940;B940;1105 1171 11AB;B940;1105 1171 11AB; +B941;B941;1105 1171 11AC;B941;1105 1171 11AC; +B942;B942;1105 1171 11AD;B942;1105 1171 11AD; +B943;B943;1105 1171 11AE;B943;1105 1171 11AE; +B944;B944;1105 1171 11AF;B944;1105 1171 11AF; +B945;B945;1105 1171 11B0;B945;1105 1171 11B0; +B946;B946;1105 1171 11B1;B946;1105 1171 11B1; +B947;B947;1105 1171 11B2;B947;1105 1171 11B2; +B948;B948;1105 1171 11B3;B948;1105 1171 11B3; +B949;B949;1105 1171 11B4;B949;1105 1171 11B4; +B94A;B94A;1105 1171 11B5;B94A;1105 1171 11B5; +B94B;B94B;1105 1171 11B6;B94B;1105 1171 11B6; +B94C;B94C;1105 1171 11B7;B94C;1105 1171 11B7; +B94D;B94D;1105 1171 11B8;B94D;1105 1171 11B8; +B94E;B94E;1105 1171 11B9;B94E;1105 1171 11B9; +B94F;B94F;1105 1171 11BA;B94F;1105 1171 11BA; +B950;B950;1105 1171 11BB;B950;1105 1171 11BB; +B951;B951;1105 1171 11BC;B951;1105 1171 11BC; +B952;B952;1105 1171 11BD;B952;1105 1171 11BD; +B953;B953;1105 1171 11BE;B953;1105 1171 11BE; +B954;B954;1105 1171 11BF;B954;1105 1171 11BF; +B955;B955;1105 1171 11C0;B955;1105 1171 11C0; +B956;B956;1105 1171 11C1;B956;1105 1171 11C1; +B957;B957;1105 1171 11C2;B957;1105 1171 11C2; +B958;B958;1105 1172;B958;1105 1172; +B959;B959;1105 1172 11A8;B959;1105 1172 11A8; +B95A;B95A;1105 1172 11A9;B95A;1105 1172 11A9; +B95B;B95B;1105 1172 11AA;B95B;1105 1172 11AA; +B95C;B95C;1105 1172 11AB;B95C;1105 1172 11AB; +B95D;B95D;1105 1172 11AC;B95D;1105 1172 11AC; +B95E;B95E;1105 1172 11AD;B95E;1105 1172 11AD; +B95F;B95F;1105 1172 11AE;B95F;1105 1172 11AE; +B960;B960;1105 1172 11AF;B960;1105 1172 11AF; +B961;B961;1105 1172 11B0;B961;1105 1172 11B0; +B962;B962;1105 1172 11B1;B962;1105 1172 11B1; +B963;B963;1105 1172 11B2;B963;1105 1172 11B2; +B964;B964;1105 1172 11B3;B964;1105 1172 11B3; +B965;B965;1105 1172 11B4;B965;1105 1172 11B4; +B966;B966;1105 1172 11B5;B966;1105 1172 11B5; +B967;B967;1105 1172 11B6;B967;1105 1172 11B6; +B968;B968;1105 1172 11B7;B968;1105 1172 11B7; +B969;B969;1105 1172 11B8;B969;1105 1172 11B8; +B96A;B96A;1105 1172 11B9;B96A;1105 1172 11B9; +B96B;B96B;1105 1172 11BA;B96B;1105 1172 11BA; +B96C;B96C;1105 1172 11BB;B96C;1105 1172 11BB; +B96D;B96D;1105 1172 11BC;B96D;1105 1172 11BC; +B96E;B96E;1105 1172 11BD;B96E;1105 1172 11BD; +B96F;B96F;1105 1172 11BE;B96F;1105 1172 11BE; +B970;B970;1105 1172 11BF;B970;1105 1172 11BF; +B971;B971;1105 1172 11C0;B971;1105 1172 11C0; +B972;B972;1105 1172 11C1;B972;1105 1172 11C1; +B973;B973;1105 1172 11C2;B973;1105 1172 11C2; +B974;B974;1105 1173;B974;1105 1173; +B975;B975;1105 1173 11A8;B975;1105 1173 11A8; +B976;B976;1105 1173 11A9;B976;1105 1173 11A9; +B977;B977;1105 1173 11AA;B977;1105 1173 11AA; +B978;B978;1105 1173 11AB;B978;1105 1173 11AB; +B979;B979;1105 1173 11AC;B979;1105 1173 11AC; +B97A;B97A;1105 1173 11AD;B97A;1105 1173 11AD; +B97B;B97B;1105 1173 11AE;B97B;1105 1173 11AE; +B97C;B97C;1105 1173 11AF;B97C;1105 1173 11AF; +B97D;B97D;1105 1173 11B0;B97D;1105 1173 11B0; +B97E;B97E;1105 1173 11B1;B97E;1105 1173 11B1; +B97F;B97F;1105 1173 11B2;B97F;1105 1173 11B2; +B980;B980;1105 1173 11B3;B980;1105 1173 11B3; +B981;B981;1105 1173 11B4;B981;1105 1173 11B4; +B982;B982;1105 1173 11B5;B982;1105 1173 11B5; +B983;B983;1105 1173 11B6;B983;1105 1173 11B6; +B984;B984;1105 1173 11B7;B984;1105 1173 11B7; +B985;B985;1105 1173 11B8;B985;1105 1173 11B8; +B986;B986;1105 1173 11B9;B986;1105 1173 11B9; +B987;B987;1105 1173 11BA;B987;1105 1173 11BA; +B988;B988;1105 1173 11BB;B988;1105 1173 11BB; +B989;B989;1105 1173 11BC;B989;1105 1173 11BC; +B98A;B98A;1105 1173 11BD;B98A;1105 1173 11BD; +B98B;B98B;1105 1173 11BE;B98B;1105 1173 11BE; +B98C;B98C;1105 1173 11BF;B98C;1105 1173 11BF; +B98D;B98D;1105 1173 11C0;B98D;1105 1173 11C0; +B98E;B98E;1105 1173 11C1;B98E;1105 1173 11C1; +B98F;B98F;1105 1173 11C2;B98F;1105 1173 11C2; +B990;B990;1105 1174;B990;1105 1174; +B991;B991;1105 1174 11A8;B991;1105 1174 11A8; +B992;B992;1105 1174 11A9;B992;1105 1174 11A9; +B993;B993;1105 1174 11AA;B993;1105 1174 11AA; +B994;B994;1105 1174 11AB;B994;1105 1174 11AB; +B995;B995;1105 1174 11AC;B995;1105 1174 11AC; +B996;B996;1105 1174 11AD;B996;1105 1174 11AD; +B997;B997;1105 1174 11AE;B997;1105 1174 11AE; +B998;B998;1105 1174 11AF;B998;1105 1174 11AF; +B999;B999;1105 1174 11B0;B999;1105 1174 11B0; +B99A;B99A;1105 1174 11B1;B99A;1105 1174 11B1; +B99B;B99B;1105 1174 11B2;B99B;1105 1174 11B2; +B99C;B99C;1105 1174 11B3;B99C;1105 1174 11B3; +B99D;B99D;1105 1174 11B4;B99D;1105 1174 11B4; +B99E;B99E;1105 1174 11B5;B99E;1105 1174 11B5; +B99F;B99F;1105 1174 11B6;B99F;1105 1174 11B6; +B9A0;B9A0;1105 1174 11B7;B9A0;1105 1174 11B7; +B9A1;B9A1;1105 1174 11B8;B9A1;1105 1174 11B8; +B9A2;B9A2;1105 1174 11B9;B9A2;1105 1174 11B9; +B9A3;B9A3;1105 1174 11BA;B9A3;1105 1174 11BA; +B9A4;B9A4;1105 1174 11BB;B9A4;1105 1174 11BB; +B9A5;B9A5;1105 1174 11BC;B9A5;1105 1174 11BC; +B9A6;B9A6;1105 1174 11BD;B9A6;1105 1174 11BD; +B9A7;B9A7;1105 1174 11BE;B9A7;1105 1174 11BE; +B9A8;B9A8;1105 1174 11BF;B9A8;1105 1174 11BF; +B9A9;B9A9;1105 1174 11C0;B9A9;1105 1174 11C0; +B9AA;B9AA;1105 1174 11C1;B9AA;1105 1174 11C1; +B9AB;B9AB;1105 1174 11C2;B9AB;1105 1174 11C2; +B9AC;B9AC;1105 1175;B9AC;1105 1175; +B9AD;B9AD;1105 1175 11A8;B9AD;1105 1175 11A8; +B9AE;B9AE;1105 1175 11A9;B9AE;1105 1175 11A9; +B9AF;B9AF;1105 1175 11AA;B9AF;1105 1175 11AA; +B9B0;B9B0;1105 1175 11AB;B9B0;1105 1175 11AB; +B9B1;B9B1;1105 1175 11AC;B9B1;1105 1175 11AC; +B9B2;B9B2;1105 1175 11AD;B9B2;1105 1175 11AD; +B9B3;B9B3;1105 1175 11AE;B9B3;1105 1175 11AE; +B9B4;B9B4;1105 1175 11AF;B9B4;1105 1175 11AF; +B9B5;B9B5;1105 1175 11B0;B9B5;1105 1175 11B0; +B9B6;B9B6;1105 1175 11B1;B9B6;1105 1175 11B1; +B9B7;B9B7;1105 1175 11B2;B9B7;1105 1175 11B2; +B9B8;B9B8;1105 1175 11B3;B9B8;1105 1175 11B3; +B9B9;B9B9;1105 1175 11B4;B9B9;1105 1175 11B4; +B9BA;B9BA;1105 1175 11B5;B9BA;1105 1175 11B5; +B9BB;B9BB;1105 1175 11B6;B9BB;1105 1175 11B6; +B9BC;B9BC;1105 1175 11B7;B9BC;1105 1175 11B7; +B9BD;B9BD;1105 1175 11B8;B9BD;1105 1175 11B8; +B9BE;B9BE;1105 1175 11B9;B9BE;1105 1175 11B9; +B9BF;B9BF;1105 1175 11BA;B9BF;1105 1175 11BA; +B9C0;B9C0;1105 1175 11BB;B9C0;1105 1175 11BB; +B9C1;B9C1;1105 1175 11BC;B9C1;1105 1175 11BC; +B9C2;B9C2;1105 1175 11BD;B9C2;1105 1175 11BD; +B9C3;B9C3;1105 1175 11BE;B9C3;1105 1175 11BE; +B9C4;B9C4;1105 1175 11BF;B9C4;1105 1175 11BF; +B9C5;B9C5;1105 1175 11C0;B9C5;1105 1175 11C0; +B9C6;B9C6;1105 1175 11C1;B9C6;1105 1175 11C1; +B9C7;B9C7;1105 1175 11C2;B9C7;1105 1175 11C2; +B9C8;B9C8;1106 1161;B9C8;1106 1161; +B9C9;B9C9;1106 1161 11A8;B9C9;1106 1161 11A8; +B9CA;B9CA;1106 1161 11A9;B9CA;1106 1161 11A9; +B9CB;B9CB;1106 1161 11AA;B9CB;1106 1161 11AA; +B9CC;B9CC;1106 1161 11AB;B9CC;1106 1161 11AB; +B9CD;B9CD;1106 1161 11AC;B9CD;1106 1161 11AC; +B9CE;B9CE;1106 1161 11AD;B9CE;1106 1161 11AD; +B9CF;B9CF;1106 1161 11AE;B9CF;1106 1161 11AE; +B9D0;B9D0;1106 1161 11AF;B9D0;1106 1161 11AF; +B9D1;B9D1;1106 1161 11B0;B9D1;1106 1161 11B0; +B9D2;B9D2;1106 1161 11B1;B9D2;1106 1161 11B1; +B9D3;B9D3;1106 1161 11B2;B9D3;1106 1161 11B2; +B9D4;B9D4;1106 1161 11B3;B9D4;1106 1161 11B3; +B9D5;B9D5;1106 1161 11B4;B9D5;1106 1161 11B4; +B9D6;B9D6;1106 1161 11B5;B9D6;1106 1161 11B5; +B9D7;B9D7;1106 1161 11B6;B9D7;1106 1161 11B6; +B9D8;B9D8;1106 1161 11B7;B9D8;1106 1161 11B7; +B9D9;B9D9;1106 1161 11B8;B9D9;1106 1161 11B8; +B9DA;B9DA;1106 1161 11B9;B9DA;1106 1161 11B9; +B9DB;B9DB;1106 1161 11BA;B9DB;1106 1161 11BA; +B9DC;B9DC;1106 1161 11BB;B9DC;1106 1161 11BB; +B9DD;B9DD;1106 1161 11BC;B9DD;1106 1161 11BC; +B9DE;B9DE;1106 1161 11BD;B9DE;1106 1161 11BD; +B9DF;B9DF;1106 1161 11BE;B9DF;1106 1161 11BE; +B9E0;B9E0;1106 1161 11BF;B9E0;1106 1161 11BF; +B9E1;B9E1;1106 1161 11C0;B9E1;1106 1161 11C0; +B9E2;B9E2;1106 1161 11C1;B9E2;1106 1161 11C1; +B9E3;B9E3;1106 1161 11C2;B9E3;1106 1161 11C2; +B9E4;B9E4;1106 1162;B9E4;1106 1162; +B9E5;B9E5;1106 1162 11A8;B9E5;1106 1162 11A8; +B9E6;B9E6;1106 1162 11A9;B9E6;1106 1162 11A9; +B9E7;B9E7;1106 1162 11AA;B9E7;1106 1162 11AA; +B9E8;B9E8;1106 1162 11AB;B9E8;1106 1162 11AB; +B9E9;B9E9;1106 1162 11AC;B9E9;1106 1162 11AC; +B9EA;B9EA;1106 1162 11AD;B9EA;1106 1162 11AD; +B9EB;B9EB;1106 1162 11AE;B9EB;1106 1162 11AE; +B9EC;B9EC;1106 1162 11AF;B9EC;1106 1162 11AF; +B9ED;B9ED;1106 1162 11B0;B9ED;1106 1162 11B0; +B9EE;B9EE;1106 1162 11B1;B9EE;1106 1162 11B1; +B9EF;B9EF;1106 1162 11B2;B9EF;1106 1162 11B2; +B9F0;B9F0;1106 1162 11B3;B9F0;1106 1162 11B3; +B9F1;B9F1;1106 1162 11B4;B9F1;1106 1162 11B4; +B9F2;B9F2;1106 1162 11B5;B9F2;1106 1162 11B5; +B9F3;B9F3;1106 1162 11B6;B9F3;1106 1162 11B6; +B9F4;B9F4;1106 1162 11B7;B9F4;1106 1162 11B7; +B9F5;B9F5;1106 1162 11B8;B9F5;1106 1162 11B8; +B9F6;B9F6;1106 1162 11B9;B9F6;1106 1162 11B9; +B9F7;B9F7;1106 1162 11BA;B9F7;1106 1162 11BA; +B9F8;B9F8;1106 1162 11BB;B9F8;1106 1162 11BB; +B9F9;B9F9;1106 1162 11BC;B9F9;1106 1162 11BC; +B9FA;B9FA;1106 1162 11BD;B9FA;1106 1162 11BD; +B9FB;B9FB;1106 1162 11BE;B9FB;1106 1162 11BE; +B9FC;B9FC;1106 1162 11BF;B9FC;1106 1162 11BF; +B9FD;B9FD;1106 1162 11C0;B9FD;1106 1162 11C0; +B9FE;B9FE;1106 1162 11C1;B9FE;1106 1162 11C1; +B9FF;B9FF;1106 1162 11C2;B9FF;1106 1162 11C2; +BA00;BA00;1106 1163;BA00;1106 1163; +BA01;BA01;1106 1163 11A8;BA01;1106 1163 11A8; +BA02;BA02;1106 1163 11A9;BA02;1106 1163 11A9; +BA03;BA03;1106 1163 11AA;BA03;1106 1163 11AA; +BA04;BA04;1106 1163 11AB;BA04;1106 1163 11AB; +BA05;BA05;1106 1163 11AC;BA05;1106 1163 11AC; +BA06;BA06;1106 1163 11AD;BA06;1106 1163 11AD; +BA07;BA07;1106 1163 11AE;BA07;1106 1163 11AE; +BA08;BA08;1106 1163 11AF;BA08;1106 1163 11AF; +BA09;BA09;1106 1163 11B0;BA09;1106 1163 11B0; +BA0A;BA0A;1106 1163 11B1;BA0A;1106 1163 11B1; +BA0B;BA0B;1106 1163 11B2;BA0B;1106 1163 11B2; +BA0C;BA0C;1106 1163 11B3;BA0C;1106 1163 11B3; +BA0D;BA0D;1106 1163 11B4;BA0D;1106 1163 11B4; +BA0E;BA0E;1106 1163 11B5;BA0E;1106 1163 11B5; +BA0F;BA0F;1106 1163 11B6;BA0F;1106 1163 11B6; +BA10;BA10;1106 1163 11B7;BA10;1106 1163 11B7; +BA11;BA11;1106 1163 11B8;BA11;1106 1163 11B8; +BA12;BA12;1106 1163 11B9;BA12;1106 1163 11B9; +BA13;BA13;1106 1163 11BA;BA13;1106 1163 11BA; +BA14;BA14;1106 1163 11BB;BA14;1106 1163 11BB; +BA15;BA15;1106 1163 11BC;BA15;1106 1163 11BC; +BA16;BA16;1106 1163 11BD;BA16;1106 1163 11BD; +BA17;BA17;1106 1163 11BE;BA17;1106 1163 11BE; +BA18;BA18;1106 1163 11BF;BA18;1106 1163 11BF; +BA19;BA19;1106 1163 11C0;BA19;1106 1163 11C0; +BA1A;BA1A;1106 1163 11C1;BA1A;1106 1163 11C1; +BA1B;BA1B;1106 1163 11C2;BA1B;1106 1163 11C2; +BA1C;BA1C;1106 1164;BA1C;1106 1164; +BA1D;BA1D;1106 1164 11A8;BA1D;1106 1164 11A8; +BA1E;BA1E;1106 1164 11A9;BA1E;1106 1164 11A9; +BA1F;BA1F;1106 1164 11AA;BA1F;1106 1164 11AA; +BA20;BA20;1106 1164 11AB;BA20;1106 1164 11AB; +BA21;BA21;1106 1164 11AC;BA21;1106 1164 11AC; +BA22;BA22;1106 1164 11AD;BA22;1106 1164 11AD; +BA23;BA23;1106 1164 11AE;BA23;1106 1164 11AE; +BA24;BA24;1106 1164 11AF;BA24;1106 1164 11AF; +BA25;BA25;1106 1164 11B0;BA25;1106 1164 11B0; +BA26;BA26;1106 1164 11B1;BA26;1106 1164 11B1; +BA27;BA27;1106 1164 11B2;BA27;1106 1164 11B2; +BA28;BA28;1106 1164 11B3;BA28;1106 1164 11B3; +BA29;BA29;1106 1164 11B4;BA29;1106 1164 11B4; +BA2A;BA2A;1106 1164 11B5;BA2A;1106 1164 11B5; +BA2B;BA2B;1106 1164 11B6;BA2B;1106 1164 11B6; +BA2C;BA2C;1106 1164 11B7;BA2C;1106 1164 11B7; +BA2D;BA2D;1106 1164 11B8;BA2D;1106 1164 11B8; +BA2E;BA2E;1106 1164 11B9;BA2E;1106 1164 11B9; +BA2F;BA2F;1106 1164 11BA;BA2F;1106 1164 11BA; +BA30;BA30;1106 1164 11BB;BA30;1106 1164 11BB; +BA31;BA31;1106 1164 11BC;BA31;1106 1164 11BC; +BA32;BA32;1106 1164 11BD;BA32;1106 1164 11BD; +BA33;BA33;1106 1164 11BE;BA33;1106 1164 11BE; +BA34;BA34;1106 1164 11BF;BA34;1106 1164 11BF; +BA35;BA35;1106 1164 11C0;BA35;1106 1164 11C0; +BA36;BA36;1106 1164 11C1;BA36;1106 1164 11C1; +BA37;BA37;1106 1164 11C2;BA37;1106 1164 11C2; +BA38;BA38;1106 1165;BA38;1106 1165; +BA39;BA39;1106 1165 11A8;BA39;1106 1165 11A8; +BA3A;BA3A;1106 1165 11A9;BA3A;1106 1165 11A9; +BA3B;BA3B;1106 1165 11AA;BA3B;1106 1165 11AA; +BA3C;BA3C;1106 1165 11AB;BA3C;1106 1165 11AB; +BA3D;BA3D;1106 1165 11AC;BA3D;1106 1165 11AC; +BA3E;BA3E;1106 1165 11AD;BA3E;1106 1165 11AD; +BA3F;BA3F;1106 1165 11AE;BA3F;1106 1165 11AE; +BA40;BA40;1106 1165 11AF;BA40;1106 1165 11AF; +BA41;BA41;1106 1165 11B0;BA41;1106 1165 11B0; +BA42;BA42;1106 1165 11B1;BA42;1106 1165 11B1; +BA43;BA43;1106 1165 11B2;BA43;1106 1165 11B2; +BA44;BA44;1106 1165 11B3;BA44;1106 1165 11B3; +BA45;BA45;1106 1165 11B4;BA45;1106 1165 11B4; +BA46;BA46;1106 1165 11B5;BA46;1106 1165 11B5; +BA47;BA47;1106 1165 11B6;BA47;1106 1165 11B6; +BA48;BA48;1106 1165 11B7;BA48;1106 1165 11B7; +BA49;BA49;1106 1165 11B8;BA49;1106 1165 11B8; +BA4A;BA4A;1106 1165 11B9;BA4A;1106 1165 11B9; +BA4B;BA4B;1106 1165 11BA;BA4B;1106 1165 11BA; +BA4C;BA4C;1106 1165 11BB;BA4C;1106 1165 11BB; +BA4D;BA4D;1106 1165 11BC;BA4D;1106 1165 11BC; +BA4E;BA4E;1106 1165 11BD;BA4E;1106 1165 11BD; +BA4F;BA4F;1106 1165 11BE;BA4F;1106 1165 11BE; +BA50;BA50;1106 1165 11BF;BA50;1106 1165 11BF; +BA51;BA51;1106 1165 11C0;BA51;1106 1165 11C0; +BA52;BA52;1106 1165 11C1;BA52;1106 1165 11C1; +BA53;BA53;1106 1165 11C2;BA53;1106 1165 11C2; +BA54;BA54;1106 1166;BA54;1106 1166; +BA55;BA55;1106 1166 11A8;BA55;1106 1166 11A8; +BA56;BA56;1106 1166 11A9;BA56;1106 1166 11A9; +BA57;BA57;1106 1166 11AA;BA57;1106 1166 11AA; +BA58;BA58;1106 1166 11AB;BA58;1106 1166 11AB; +BA59;BA59;1106 1166 11AC;BA59;1106 1166 11AC; +BA5A;BA5A;1106 1166 11AD;BA5A;1106 1166 11AD; +BA5B;BA5B;1106 1166 11AE;BA5B;1106 1166 11AE; +BA5C;BA5C;1106 1166 11AF;BA5C;1106 1166 11AF; +BA5D;BA5D;1106 1166 11B0;BA5D;1106 1166 11B0; +BA5E;BA5E;1106 1166 11B1;BA5E;1106 1166 11B1; +BA5F;BA5F;1106 1166 11B2;BA5F;1106 1166 11B2; +BA60;BA60;1106 1166 11B3;BA60;1106 1166 11B3; +BA61;BA61;1106 1166 11B4;BA61;1106 1166 11B4; +BA62;BA62;1106 1166 11B5;BA62;1106 1166 11B5; +BA63;BA63;1106 1166 11B6;BA63;1106 1166 11B6; +BA64;BA64;1106 1166 11B7;BA64;1106 1166 11B7; +BA65;BA65;1106 1166 11B8;BA65;1106 1166 11B8; +BA66;BA66;1106 1166 11B9;BA66;1106 1166 11B9; +BA67;BA67;1106 1166 11BA;BA67;1106 1166 11BA; +BA68;BA68;1106 1166 11BB;BA68;1106 1166 11BB; +BA69;BA69;1106 1166 11BC;BA69;1106 1166 11BC; +BA6A;BA6A;1106 1166 11BD;BA6A;1106 1166 11BD; +BA6B;BA6B;1106 1166 11BE;BA6B;1106 1166 11BE; +BA6C;BA6C;1106 1166 11BF;BA6C;1106 1166 11BF; +BA6D;BA6D;1106 1166 11C0;BA6D;1106 1166 11C0; +BA6E;BA6E;1106 1166 11C1;BA6E;1106 1166 11C1; +BA6F;BA6F;1106 1166 11C2;BA6F;1106 1166 11C2; +BA70;BA70;1106 1167;BA70;1106 1167; +BA71;BA71;1106 1167 11A8;BA71;1106 1167 11A8; +BA72;BA72;1106 1167 11A9;BA72;1106 1167 11A9; +BA73;BA73;1106 1167 11AA;BA73;1106 1167 11AA; +BA74;BA74;1106 1167 11AB;BA74;1106 1167 11AB; +BA75;BA75;1106 1167 11AC;BA75;1106 1167 11AC; +BA76;BA76;1106 1167 11AD;BA76;1106 1167 11AD; +BA77;BA77;1106 1167 11AE;BA77;1106 1167 11AE; +BA78;BA78;1106 1167 11AF;BA78;1106 1167 11AF; +BA79;BA79;1106 1167 11B0;BA79;1106 1167 11B0; +BA7A;BA7A;1106 1167 11B1;BA7A;1106 1167 11B1; +BA7B;BA7B;1106 1167 11B2;BA7B;1106 1167 11B2; +BA7C;BA7C;1106 1167 11B3;BA7C;1106 1167 11B3; +BA7D;BA7D;1106 1167 11B4;BA7D;1106 1167 11B4; +BA7E;BA7E;1106 1167 11B5;BA7E;1106 1167 11B5; +BA7F;BA7F;1106 1167 11B6;BA7F;1106 1167 11B6; +BA80;BA80;1106 1167 11B7;BA80;1106 1167 11B7; +BA81;BA81;1106 1167 11B8;BA81;1106 1167 11B8; +BA82;BA82;1106 1167 11B9;BA82;1106 1167 11B9; +BA83;BA83;1106 1167 11BA;BA83;1106 1167 11BA; +BA84;BA84;1106 1167 11BB;BA84;1106 1167 11BB; +BA85;BA85;1106 1167 11BC;BA85;1106 1167 11BC; +BA86;BA86;1106 1167 11BD;BA86;1106 1167 11BD; +BA87;BA87;1106 1167 11BE;BA87;1106 1167 11BE; +BA88;BA88;1106 1167 11BF;BA88;1106 1167 11BF; +BA89;BA89;1106 1167 11C0;BA89;1106 1167 11C0; +BA8A;BA8A;1106 1167 11C1;BA8A;1106 1167 11C1; +BA8B;BA8B;1106 1167 11C2;BA8B;1106 1167 11C2; +BA8C;BA8C;1106 1168;BA8C;1106 1168; +BA8D;BA8D;1106 1168 11A8;BA8D;1106 1168 11A8; +BA8E;BA8E;1106 1168 11A9;BA8E;1106 1168 11A9; +BA8F;BA8F;1106 1168 11AA;BA8F;1106 1168 11AA; +BA90;BA90;1106 1168 11AB;BA90;1106 1168 11AB; +BA91;BA91;1106 1168 11AC;BA91;1106 1168 11AC; +BA92;BA92;1106 1168 11AD;BA92;1106 1168 11AD; +BA93;BA93;1106 1168 11AE;BA93;1106 1168 11AE; +BA94;BA94;1106 1168 11AF;BA94;1106 1168 11AF; +BA95;BA95;1106 1168 11B0;BA95;1106 1168 11B0; +BA96;BA96;1106 1168 11B1;BA96;1106 1168 11B1; +BA97;BA97;1106 1168 11B2;BA97;1106 1168 11B2; +BA98;BA98;1106 1168 11B3;BA98;1106 1168 11B3; +BA99;BA99;1106 1168 11B4;BA99;1106 1168 11B4; +BA9A;BA9A;1106 1168 11B5;BA9A;1106 1168 11B5; +BA9B;BA9B;1106 1168 11B6;BA9B;1106 1168 11B6; +BA9C;BA9C;1106 1168 11B7;BA9C;1106 1168 11B7; +BA9D;BA9D;1106 1168 11B8;BA9D;1106 1168 11B8; +BA9E;BA9E;1106 1168 11B9;BA9E;1106 1168 11B9; +BA9F;BA9F;1106 1168 11BA;BA9F;1106 1168 11BA; +BAA0;BAA0;1106 1168 11BB;BAA0;1106 1168 11BB; +BAA1;BAA1;1106 1168 11BC;BAA1;1106 1168 11BC; +BAA2;BAA2;1106 1168 11BD;BAA2;1106 1168 11BD; +BAA3;BAA3;1106 1168 11BE;BAA3;1106 1168 11BE; +BAA4;BAA4;1106 1168 11BF;BAA4;1106 1168 11BF; +BAA5;BAA5;1106 1168 11C0;BAA5;1106 1168 11C0; +BAA6;BAA6;1106 1168 11C1;BAA6;1106 1168 11C1; +BAA7;BAA7;1106 1168 11C2;BAA7;1106 1168 11C2; +BAA8;BAA8;1106 1169;BAA8;1106 1169; +BAA9;BAA9;1106 1169 11A8;BAA9;1106 1169 11A8; +BAAA;BAAA;1106 1169 11A9;BAAA;1106 1169 11A9; +BAAB;BAAB;1106 1169 11AA;BAAB;1106 1169 11AA; +BAAC;BAAC;1106 1169 11AB;BAAC;1106 1169 11AB; +BAAD;BAAD;1106 1169 11AC;BAAD;1106 1169 11AC; +BAAE;BAAE;1106 1169 11AD;BAAE;1106 1169 11AD; +BAAF;BAAF;1106 1169 11AE;BAAF;1106 1169 11AE; +BAB0;BAB0;1106 1169 11AF;BAB0;1106 1169 11AF; +BAB1;BAB1;1106 1169 11B0;BAB1;1106 1169 11B0; +BAB2;BAB2;1106 1169 11B1;BAB2;1106 1169 11B1; +BAB3;BAB3;1106 1169 11B2;BAB3;1106 1169 11B2; +BAB4;BAB4;1106 1169 11B3;BAB4;1106 1169 11B3; +BAB5;BAB5;1106 1169 11B4;BAB5;1106 1169 11B4; +BAB6;BAB6;1106 1169 11B5;BAB6;1106 1169 11B5; +BAB7;BAB7;1106 1169 11B6;BAB7;1106 1169 11B6; +BAB8;BAB8;1106 1169 11B7;BAB8;1106 1169 11B7; +BAB9;BAB9;1106 1169 11B8;BAB9;1106 1169 11B8; +BABA;BABA;1106 1169 11B9;BABA;1106 1169 11B9; +BABB;BABB;1106 1169 11BA;BABB;1106 1169 11BA; +BABC;BABC;1106 1169 11BB;BABC;1106 1169 11BB; +BABD;BABD;1106 1169 11BC;BABD;1106 1169 11BC; +BABE;BABE;1106 1169 11BD;BABE;1106 1169 11BD; +BABF;BABF;1106 1169 11BE;BABF;1106 1169 11BE; +BAC0;BAC0;1106 1169 11BF;BAC0;1106 1169 11BF; +BAC1;BAC1;1106 1169 11C0;BAC1;1106 1169 11C0; +BAC2;BAC2;1106 1169 11C1;BAC2;1106 1169 11C1; +BAC3;BAC3;1106 1169 11C2;BAC3;1106 1169 11C2; +BAC4;BAC4;1106 116A;BAC4;1106 116A; +BAC5;BAC5;1106 116A 11A8;BAC5;1106 116A 11A8; +BAC6;BAC6;1106 116A 11A9;BAC6;1106 116A 11A9; +BAC7;BAC7;1106 116A 11AA;BAC7;1106 116A 11AA; +BAC8;BAC8;1106 116A 11AB;BAC8;1106 116A 11AB; +BAC9;BAC9;1106 116A 11AC;BAC9;1106 116A 11AC; +BACA;BACA;1106 116A 11AD;BACA;1106 116A 11AD; +BACB;BACB;1106 116A 11AE;BACB;1106 116A 11AE; +BACC;BACC;1106 116A 11AF;BACC;1106 116A 11AF; +BACD;BACD;1106 116A 11B0;BACD;1106 116A 11B0; +BACE;BACE;1106 116A 11B1;BACE;1106 116A 11B1; +BACF;BACF;1106 116A 11B2;BACF;1106 116A 11B2; +BAD0;BAD0;1106 116A 11B3;BAD0;1106 116A 11B3; +BAD1;BAD1;1106 116A 11B4;BAD1;1106 116A 11B4; +BAD2;BAD2;1106 116A 11B5;BAD2;1106 116A 11B5; +BAD3;BAD3;1106 116A 11B6;BAD3;1106 116A 11B6; +BAD4;BAD4;1106 116A 11B7;BAD4;1106 116A 11B7; +BAD5;BAD5;1106 116A 11B8;BAD5;1106 116A 11B8; +BAD6;BAD6;1106 116A 11B9;BAD6;1106 116A 11B9; +BAD7;BAD7;1106 116A 11BA;BAD7;1106 116A 11BA; +BAD8;BAD8;1106 116A 11BB;BAD8;1106 116A 11BB; +BAD9;BAD9;1106 116A 11BC;BAD9;1106 116A 11BC; +BADA;BADA;1106 116A 11BD;BADA;1106 116A 11BD; +BADB;BADB;1106 116A 11BE;BADB;1106 116A 11BE; +BADC;BADC;1106 116A 11BF;BADC;1106 116A 11BF; +BADD;BADD;1106 116A 11C0;BADD;1106 116A 11C0; +BADE;BADE;1106 116A 11C1;BADE;1106 116A 11C1; +BADF;BADF;1106 116A 11C2;BADF;1106 116A 11C2; +BAE0;BAE0;1106 116B;BAE0;1106 116B; +BAE1;BAE1;1106 116B 11A8;BAE1;1106 116B 11A8; +BAE2;BAE2;1106 116B 11A9;BAE2;1106 116B 11A9; +BAE3;BAE3;1106 116B 11AA;BAE3;1106 116B 11AA; +BAE4;BAE4;1106 116B 11AB;BAE4;1106 116B 11AB; +BAE5;BAE5;1106 116B 11AC;BAE5;1106 116B 11AC; +BAE6;BAE6;1106 116B 11AD;BAE6;1106 116B 11AD; +BAE7;BAE7;1106 116B 11AE;BAE7;1106 116B 11AE; +BAE8;BAE8;1106 116B 11AF;BAE8;1106 116B 11AF; +BAE9;BAE9;1106 116B 11B0;BAE9;1106 116B 11B0; +BAEA;BAEA;1106 116B 11B1;BAEA;1106 116B 11B1; +BAEB;BAEB;1106 116B 11B2;BAEB;1106 116B 11B2; +BAEC;BAEC;1106 116B 11B3;BAEC;1106 116B 11B3; +BAED;BAED;1106 116B 11B4;BAED;1106 116B 11B4; +BAEE;BAEE;1106 116B 11B5;BAEE;1106 116B 11B5; +BAEF;BAEF;1106 116B 11B6;BAEF;1106 116B 11B6; +BAF0;BAF0;1106 116B 11B7;BAF0;1106 116B 11B7; +BAF1;BAF1;1106 116B 11B8;BAF1;1106 116B 11B8; +BAF2;BAF2;1106 116B 11B9;BAF2;1106 116B 11B9; +BAF3;BAF3;1106 116B 11BA;BAF3;1106 116B 11BA; +BAF4;BAF4;1106 116B 11BB;BAF4;1106 116B 11BB; +BAF5;BAF5;1106 116B 11BC;BAF5;1106 116B 11BC; +BAF6;BAF6;1106 116B 11BD;BAF6;1106 116B 11BD; +BAF7;BAF7;1106 116B 11BE;BAF7;1106 116B 11BE; +BAF8;BAF8;1106 116B 11BF;BAF8;1106 116B 11BF; +BAF9;BAF9;1106 116B 11C0;BAF9;1106 116B 11C0; +BAFA;BAFA;1106 116B 11C1;BAFA;1106 116B 11C1; +BAFB;BAFB;1106 116B 11C2;BAFB;1106 116B 11C2; +BAFC;BAFC;1106 116C;BAFC;1106 116C; +BAFD;BAFD;1106 116C 11A8;BAFD;1106 116C 11A8; +BAFE;BAFE;1106 116C 11A9;BAFE;1106 116C 11A9; +BAFF;BAFF;1106 116C 11AA;BAFF;1106 116C 11AA; +BB00;BB00;1106 116C 11AB;BB00;1106 116C 11AB; +BB01;BB01;1106 116C 11AC;BB01;1106 116C 11AC; +BB02;BB02;1106 116C 11AD;BB02;1106 116C 11AD; +BB03;BB03;1106 116C 11AE;BB03;1106 116C 11AE; +BB04;BB04;1106 116C 11AF;BB04;1106 116C 11AF; +BB05;BB05;1106 116C 11B0;BB05;1106 116C 11B0; +BB06;BB06;1106 116C 11B1;BB06;1106 116C 11B1; +BB07;BB07;1106 116C 11B2;BB07;1106 116C 11B2; +BB08;BB08;1106 116C 11B3;BB08;1106 116C 11B3; +BB09;BB09;1106 116C 11B4;BB09;1106 116C 11B4; +BB0A;BB0A;1106 116C 11B5;BB0A;1106 116C 11B5; +BB0B;BB0B;1106 116C 11B6;BB0B;1106 116C 11B6; +BB0C;BB0C;1106 116C 11B7;BB0C;1106 116C 11B7; +BB0D;BB0D;1106 116C 11B8;BB0D;1106 116C 11B8; +BB0E;BB0E;1106 116C 11B9;BB0E;1106 116C 11B9; +BB0F;BB0F;1106 116C 11BA;BB0F;1106 116C 11BA; +BB10;BB10;1106 116C 11BB;BB10;1106 116C 11BB; +BB11;BB11;1106 116C 11BC;BB11;1106 116C 11BC; +BB12;BB12;1106 116C 11BD;BB12;1106 116C 11BD; +BB13;BB13;1106 116C 11BE;BB13;1106 116C 11BE; +BB14;BB14;1106 116C 11BF;BB14;1106 116C 11BF; +BB15;BB15;1106 116C 11C0;BB15;1106 116C 11C0; +BB16;BB16;1106 116C 11C1;BB16;1106 116C 11C1; +BB17;BB17;1106 116C 11C2;BB17;1106 116C 11C2; +BB18;BB18;1106 116D;BB18;1106 116D; +BB19;BB19;1106 116D 11A8;BB19;1106 116D 11A8; +BB1A;BB1A;1106 116D 11A9;BB1A;1106 116D 11A9; +BB1B;BB1B;1106 116D 11AA;BB1B;1106 116D 11AA; +BB1C;BB1C;1106 116D 11AB;BB1C;1106 116D 11AB; +BB1D;BB1D;1106 116D 11AC;BB1D;1106 116D 11AC; +BB1E;BB1E;1106 116D 11AD;BB1E;1106 116D 11AD; +BB1F;BB1F;1106 116D 11AE;BB1F;1106 116D 11AE; +BB20;BB20;1106 116D 11AF;BB20;1106 116D 11AF; +BB21;BB21;1106 116D 11B0;BB21;1106 116D 11B0; +BB22;BB22;1106 116D 11B1;BB22;1106 116D 11B1; +BB23;BB23;1106 116D 11B2;BB23;1106 116D 11B2; +BB24;BB24;1106 116D 11B3;BB24;1106 116D 11B3; +BB25;BB25;1106 116D 11B4;BB25;1106 116D 11B4; +BB26;BB26;1106 116D 11B5;BB26;1106 116D 11B5; +BB27;BB27;1106 116D 11B6;BB27;1106 116D 11B6; +BB28;BB28;1106 116D 11B7;BB28;1106 116D 11B7; +BB29;BB29;1106 116D 11B8;BB29;1106 116D 11B8; +BB2A;BB2A;1106 116D 11B9;BB2A;1106 116D 11B9; +BB2B;BB2B;1106 116D 11BA;BB2B;1106 116D 11BA; +BB2C;BB2C;1106 116D 11BB;BB2C;1106 116D 11BB; +BB2D;BB2D;1106 116D 11BC;BB2D;1106 116D 11BC; +BB2E;BB2E;1106 116D 11BD;BB2E;1106 116D 11BD; +BB2F;BB2F;1106 116D 11BE;BB2F;1106 116D 11BE; +BB30;BB30;1106 116D 11BF;BB30;1106 116D 11BF; +BB31;BB31;1106 116D 11C0;BB31;1106 116D 11C0; +BB32;BB32;1106 116D 11C1;BB32;1106 116D 11C1; +BB33;BB33;1106 116D 11C2;BB33;1106 116D 11C2; +BB34;BB34;1106 116E;BB34;1106 116E; +BB35;BB35;1106 116E 11A8;BB35;1106 116E 11A8; +BB36;BB36;1106 116E 11A9;BB36;1106 116E 11A9; +BB37;BB37;1106 116E 11AA;BB37;1106 116E 11AA; +BB38;BB38;1106 116E 11AB;BB38;1106 116E 11AB; +BB39;BB39;1106 116E 11AC;BB39;1106 116E 11AC; +BB3A;BB3A;1106 116E 11AD;BB3A;1106 116E 11AD; +BB3B;BB3B;1106 116E 11AE;BB3B;1106 116E 11AE; +BB3C;BB3C;1106 116E 11AF;BB3C;1106 116E 11AF; +BB3D;BB3D;1106 116E 11B0;BB3D;1106 116E 11B0; +BB3E;BB3E;1106 116E 11B1;BB3E;1106 116E 11B1; +BB3F;BB3F;1106 116E 11B2;BB3F;1106 116E 11B2; +BB40;BB40;1106 116E 11B3;BB40;1106 116E 11B3; +BB41;BB41;1106 116E 11B4;BB41;1106 116E 11B4; +BB42;BB42;1106 116E 11B5;BB42;1106 116E 11B5; +BB43;BB43;1106 116E 11B6;BB43;1106 116E 11B6; +BB44;BB44;1106 116E 11B7;BB44;1106 116E 11B7; +BB45;BB45;1106 116E 11B8;BB45;1106 116E 11B8; +BB46;BB46;1106 116E 11B9;BB46;1106 116E 11B9; +BB47;BB47;1106 116E 11BA;BB47;1106 116E 11BA; +BB48;BB48;1106 116E 11BB;BB48;1106 116E 11BB; +BB49;BB49;1106 116E 11BC;BB49;1106 116E 11BC; +BB4A;BB4A;1106 116E 11BD;BB4A;1106 116E 11BD; +BB4B;BB4B;1106 116E 11BE;BB4B;1106 116E 11BE; +BB4C;BB4C;1106 116E 11BF;BB4C;1106 116E 11BF; +BB4D;BB4D;1106 116E 11C0;BB4D;1106 116E 11C0; +BB4E;BB4E;1106 116E 11C1;BB4E;1106 116E 11C1; +BB4F;BB4F;1106 116E 11C2;BB4F;1106 116E 11C2; +BB50;BB50;1106 116F;BB50;1106 116F; +BB51;BB51;1106 116F 11A8;BB51;1106 116F 11A8; +BB52;BB52;1106 116F 11A9;BB52;1106 116F 11A9; +BB53;BB53;1106 116F 11AA;BB53;1106 116F 11AA; +BB54;BB54;1106 116F 11AB;BB54;1106 116F 11AB; +BB55;BB55;1106 116F 11AC;BB55;1106 116F 11AC; +BB56;BB56;1106 116F 11AD;BB56;1106 116F 11AD; +BB57;BB57;1106 116F 11AE;BB57;1106 116F 11AE; +BB58;BB58;1106 116F 11AF;BB58;1106 116F 11AF; +BB59;BB59;1106 116F 11B0;BB59;1106 116F 11B0; +BB5A;BB5A;1106 116F 11B1;BB5A;1106 116F 11B1; +BB5B;BB5B;1106 116F 11B2;BB5B;1106 116F 11B2; +BB5C;BB5C;1106 116F 11B3;BB5C;1106 116F 11B3; +BB5D;BB5D;1106 116F 11B4;BB5D;1106 116F 11B4; +BB5E;BB5E;1106 116F 11B5;BB5E;1106 116F 11B5; +BB5F;BB5F;1106 116F 11B6;BB5F;1106 116F 11B6; +BB60;BB60;1106 116F 11B7;BB60;1106 116F 11B7; +BB61;BB61;1106 116F 11B8;BB61;1106 116F 11B8; +BB62;BB62;1106 116F 11B9;BB62;1106 116F 11B9; +BB63;BB63;1106 116F 11BA;BB63;1106 116F 11BA; +BB64;BB64;1106 116F 11BB;BB64;1106 116F 11BB; +BB65;BB65;1106 116F 11BC;BB65;1106 116F 11BC; +BB66;BB66;1106 116F 11BD;BB66;1106 116F 11BD; +BB67;BB67;1106 116F 11BE;BB67;1106 116F 11BE; +BB68;BB68;1106 116F 11BF;BB68;1106 116F 11BF; +BB69;BB69;1106 116F 11C0;BB69;1106 116F 11C0; +BB6A;BB6A;1106 116F 11C1;BB6A;1106 116F 11C1; +BB6B;BB6B;1106 116F 11C2;BB6B;1106 116F 11C2; +BB6C;BB6C;1106 1170;BB6C;1106 1170; +BB6D;BB6D;1106 1170 11A8;BB6D;1106 1170 11A8; +BB6E;BB6E;1106 1170 11A9;BB6E;1106 1170 11A9; +BB6F;BB6F;1106 1170 11AA;BB6F;1106 1170 11AA; +BB70;BB70;1106 1170 11AB;BB70;1106 1170 11AB; +BB71;BB71;1106 1170 11AC;BB71;1106 1170 11AC; +BB72;BB72;1106 1170 11AD;BB72;1106 1170 11AD; +BB73;BB73;1106 1170 11AE;BB73;1106 1170 11AE; +BB74;BB74;1106 1170 11AF;BB74;1106 1170 11AF; +BB75;BB75;1106 1170 11B0;BB75;1106 1170 11B0; +BB76;BB76;1106 1170 11B1;BB76;1106 1170 11B1; +BB77;BB77;1106 1170 11B2;BB77;1106 1170 11B2; +BB78;BB78;1106 1170 11B3;BB78;1106 1170 11B3; +BB79;BB79;1106 1170 11B4;BB79;1106 1170 11B4; +BB7A;BB7A;1106 1170 11B5;BB7A;1106 1170 11B5; +BB7B;BB7B;1106 1170 11B6;BB7B;1106 1170 11B6; +BB7C;BB7C;1106 1170 11B7;BB7C;1106 1170 11B7; +BB7D;BB7D;1106 1170 11B8;BB7D;1106 1170 11B8; +BB7E;BB7E;1106 1170 11B9;BB7E;1106 1170 11B9; +BB7F;BB7F;1106 1170 11BA;BB7F;1106 1170 11BA; +BB80;BB80;1106 1170 11BB;BB80;1106 1170 11BB; +BB81;BB81;1106 1170 11BC;BB81;1106 1170 11BC; +BB82;BB82;1106 1170 11BD;BB82;1106 1170 11BD; +BB83;BB83;1106 1170 11BE;BB83;1106 1170 11BE; +BB84;BB84;1106 1170 11BF;BB84;1106 1170 11BF; +BB85;BB85;1106 1170 11C0;BB85;1106 1170 11C0; +BB86;BB86;1106 1170 11C1;BB86;1106 1170 11C1; +BB87;BB87;1106 1170 11C2;BB87;1106 1170 11C2; +BB88;BB88;1106 1171;BB88;1106 1171; +BB89;BB89;1106 1171 11A8;BB89;1106 1171 11A8; +BB8A;BB8A;1106 1171 11A9;BB8A;1106 1171 11A9; +BB8B;BB8B;1106 1171 11AA;BB8B;1106 1171 11AA; +BB8C;BB8C;1106 1171 11AB;BB8C;1106 1171 11AB; +BB8D;BB8D;1106 1171 11AC;BB8D;1106 1171 11AC; +BB8E;BB8E;1106 1171 11AD;BB8E;1106 1171 11AD; +BB8F;BB8F;1106 1171 11AE;BB8F;1106 1171 11AE; +BB90;BB90;1106 1171 11AF;BB90;1106 1171 11AF; +BB91;BB91;1106 1171 11B0;BB91;1106 1171 11B0; +BB92;BB92;1106 1171 11B1;BB92;1106 1171 11B1; +BB93;BB93;1106 1171 11B2;BB93;1106 1171 11B2; +BB94;BB94;1106 1171 11B3;BB94;1106 1171 11B3; +BB95;BB95;1106 1171 11B4;BB95;1106 1171 11B4; +BB96;BB96;1106 1171 11B5;BB96;1106 1171 11B5; +BB97;BB97;1106 1171 11B6;BB97;1106 1171 11B6; +BB98;BB98;1106 1171 11B7;BB98;1106 1171 11B7; +BB99;BB99;1106 1171 11B8;BB99;1106 1171 11B8; +BB9A;BB9A;1106 1171 11B9;BB9A;1106 1171 11B9; +BB9B;BB9B;1106 1171 11BA;BB9B;1106 1171 11BA; +BB9C;BB9C;1106 1171 11BB;BB9C;1106 1171 11BB; +BB9D;BB9D;1106 1171 11BC;BB9D;1106 1171 11BC; +BB9E;BB9E;1106 1171 11BD;BB9E;1106 1171 11BD; +BB9F;BB9F;1106 1171 11BE;BB9F;1106 1171 11BE; +BBA0;BBA0;1106 1171 11BF;BBA0;1106 1171 11BF; +BBA1;BBA1;1106 1171 11C0;BBA1;1106 1171 11C0; +BBA2;BBA2;1106 1171 11C1;BBA2;1106 1171 11C1; +BBA3;BBA3;1106 1171 11C2;BBA3;1106 1171 11C2; +BBA4;BBA4;1106 1172;BBA4;1106 1172; +BBA5;BBA5;1106 1172 11A8;BBA5;1106 1172 11A8; +BBA6;BBA6;1106 1172 11A9;BBA6;1106 1172 11A9; +BBA7;BBA7;1106 1172 11AA;BBA7;1106 1172 11AA; +BBA8;BBA8;1106 1172 11AB;BBA8;1106 1172 11AB; +BBA9;BBA9;1106 1172 11AC;BBA9;1106 1172 11AC; +BBAA;BBAA;1106 1172 11AD;BBAA;1106 1172 11AD; +BBAB;BBAB;1106 1172 11AE;BBAB;1106 1172 11AE; +BBAC;BBAC;1106 1172 11AF;BBAC;1106 1172 11AF; +BBAD;BBAD;1106 1172 11B0;BBAD;1106 1172 11B0; +BBAE;BBAE;1106 1172 11B1;BBAE;1106 1172 11B1; +BBAF;BBAF;1106 1172 11B2;BBAF;1106 1172 11B2; +BBB0;BBB0;1106 1172 11B3;BBB0;1106 1172 11B3; +BBB1;BBB1;1106 1172 11B4;BBB1;1106 1172 11B4; +BBB2;BBB2;1106 1172 11B5;BBB2;1106 1172 11B5; +BBB3;BBB3;1106 1172 11B6;BBB3;1106 1172 11B6; +BBB4;BBB4;1106 1172 11B7;BBB4;1106 1172 11B7; +BBB5;BBB5;1106 1172 11B8;BBB5;1106 1172 11B8; +BBB6;BBB6;1106 1172 11B9;BBB6;1106 1172 11B9; +BBB7;BBB7;1106 1172 11BA;BBB7;1106 1172 11BA; +BBB8;BBB8;1106 1172 11BB;BBB8;1106 1172 11BB; +BBB9;BBB9;1106 1172 11BC;BBB9;1106 1172 11BC; +BBBA;BBBA;1106 1172 11BD;BBBA;1106 1172 11BD; +BBBB;BBBB;1106 1172 11BE;BBBB;1106 1172 11BE; +BBBC;BBBC;1106 1172 11BF;BBBC;1106 1172 11BF; +BBBD;BBBD;1106 1172 11C0;BBBD;1106 1172 11C0; +BBBE;BBBE;1106 1172 11C1;BBBE;1106 1172 11C1; +BBBF;BBBF;1106 1172 11C2;BBBF;1106 1172 11C2; +BBC0;BBC0;1106 1173;BBC0;1106 1173; +BBC1;BBC1;1106 1173 11A8;BBC1;1106 1173 11A8; +BBC2;BBC2;1106 1173 11A9;BBC2;1106 1173 11A9; +BBC3;BBC3;1106 1173 11AA;BBC3;1106 1173 11AA; +BBC4;BBC4;1106 1173 11AB;BBC4;1106 1173 11AB; +BBC5;BBC5;1106 1173 11AC;BBC5;1106 1173 11AC; +BBC6;BBC6;1106 1173 11AD;BBC6;1106 1173 11AD; +BBC7;BBC7;1106 1173 11AE;BBC7;1106 1173 11AE; +BBC8;BBC8;1106 1173 11AF;BBC8;1106 1173 11AF; +BBC9;BBC9;1106 1173 11B0;BBC9;1106 1173 11B0; +BBCA;BBCA;1106 1173 11B1;BBCA;1106 1173 11B1; +BBCB;BBCB;1106 1173 11B2;BBCB;1106 1173 11B2; +BBCC;BBCC;1106 1173 11B3;BBCC;1106 1173 11B3; +BBCD;BBCD;1106 1173 11B4;BBCD;1106 1173 11B4; +BBCE;BBCE;1106 1173 11B5;BBCE;1106 1173 11B5; +BBCF;BBCF;1106 1173 11B6;BBCF;1106 1173 11B6; +BBD0;BBD0;1106 1173 11B7;BBD0;1106 1173 11B7; +BBD1;BBD1;1106 1173 11B8;BBD1;1106 1173 11B8; +BBD2;BBD2;1106 1173 11B9;BBD2;1106 1173 11B9; +BBD3;BBD3;1106 1173 11BA;BBD3;1106 1173 11BA; +BBD4;BBD4;1106 1173 11BB;BBD4;1106 1173 11BB; +BBD5;BBD5;1106 1173 11BC;BBD5;1106 1173 11BC; +BBD6;BBD6;1106 1173 11BD;BBD6;1106 1173 11BD; +BBD7;BBD7;1106 1173 11BE;BBD7;1106 1173 11BE; +BBD8;BBD8;1106 1173 11BF;BBD8;1106 1173 11BF; +BBD9;BBD9;1106 1173 11C0;BBD9;1106 1173 11C0; +BBDA;BBDA;1106 1173 11C1;BBDA;1106 1173 11C1; +BBDB;BBDB;1106 1173 11C2;BBDB;1106 1173 11C2; +BBDC;BBDC;1106 1174;BBDC;1106 1174; +BBDD;BBDD;1106 1174 11A8;BBDD;1106 1174 11A8; +BBDE;BBDE;1106 1174 11A9;BBDE;1106 1174 11A9; +BBDF;BBDF;1106 1174 11AA;BBDF;1106 1174 11AA; +BBE0;BBE0;1106 1174 11AB;BBE0;1106 1174 11AB; +BBE1;BBE1;1106 1174 11AC;BBE1;1106 1174 11AC; +BBE2;BBE2;1106 1174 11AD;BBE2;1106 1174 11AD; +BBE3;BBE3;1106 1174 11AE;BBE3;1106 1174 11AE; +BBE4;BBE4;1106 1174 11AF;BBE4;1106 1174 11AF; +BBE5;BBE5;1106 1174 11B0;BBE5;1106 1174 11B0; +BBE6;BBE6;1106 1174 11B1;BBE6;1106 1174 11B1; +BBE7;BBE7;1106 1174 11B2;BBE7;1106 1174 11B2; +BBE8;BBE8;1106 1174 11B3;BBE8;1106 1174 11B3; +BBE9;BBE9;1106 1174 11B4;BBE9;1106 1174 11B4; +BBEA;BBEA;1106 1174 11B5;BBEA;1106 1174 11B5; +BBEB;BBEB;1106 1174 11B6;BBEB;1106 1174 11B6; +BBEC;BBEC;1106 1174 11B7;BBEC;1106 1174 11B7; +BBED;BBED;1106 1174 11B8;BBED;1106 1174 11B8; +BBEE;BBEE;1106 1174 11B9;BBEE;1106 1174 11B9; +BBEF;BBEF;1106 1174 11BA;BBEF;1106 1174 11BA; +BBF0;BBF0;1106 1174 11BB;BBF0;1106 1174 11BB; +BBF1;BBF1;1106 1174 11BC;BBF1;1106 1174 11BC; +BBF2;BBF2;1106 1174 11BD;BBF2;1106 1174 11BD; +BBF3;BBF3;1106 1174 11BE;BBF3;1106 1174 11BE; +BBF4;BBF4;1106 1174 11BF;BBF4;1106 1174 11BF; +BBF5;BBF5;1106 1174 11C0;BBF5;1106 1174 11C0; +BBF6;BBF6;1106 1174 11C1;BBF6;1106 1174 11C1; +BBF7;BBF7;1106 1174 11C2;BBF7;1106 1174 11C2; +BBF8;BBF8;1106 1175;BBF8;1106 1175; +BBF9;BBF9;1106 1175 11A8;BBF9;1106 1175 11A8; +BBFA;BBFA;1106 1175 11A9;BBFA;1106 1175 11A9; +BBFB;BBFB;1106 1175 11AA;BBFB;1106 1175 11AA; +BBFC;BBFC;1106 1175 11AB;BBFC;1106 1175 11AB; +BBFD;BBFD;1106 1175 11AC;BBFD;1106 1175 11AC; +BBFE;BBFE;1106 1175 11AD;BBFE;1106 1175 11AD; +BBFF;BBFF;1106 1175 11AE;BBFF;1106 1175 11AE; +BC00;BC00;1106 1175 11AF;BC00;1106 1175 11AF; +BC01;BC01;1106 1175 11B0;BC01;1106 1175 11B0; +BC02;BC02;1106 1175 11B1;BC02;1106 1175 11B1; +BC03;BC03;1106 1175 11B2;BC03;1106 1175 11B2; +BC04;BC04;1106 1175 11B3;BC04;1106 1175 11B3; +BC05;BC05;1106 1175 11B4;BC05;1106 1175 11B4; +BC06;BC06;1106 1175 11B5;BC06;1106 1175 11B5; +BC07;BC07;1106 1175 11B6;BC07;1106 1175 11B6; +BC08;BC08;1106 1175 11B7;BC08;1106 1175 11B7; +BC09;BC09;1106 1175 11B8;BC09;1106 1175 11B8; +BC0A;BC0A;1106 1175 11B9;BC0A;1106 1175 11B9; +BC0B;BC0B;1106 1175 11BA;BC0B;1106 1175 11BA; +BC0C;BC0C;1106 1175 11BB;BC0C;1106 1175 11BB; +BC0D;BC0D;1106 1175 11BC;BC0D;1106 1175 11BC; +BC0E;BC0E;1106 1175 11BD;BC0E;1106 1175 11BD; +BC0F;BC0F;1106 1175 11BE;BC0F;1106 1175 11BE; +BC10;BC10;1106 1175 11BF;BC10;1106 1175 11BF; +BC11;BC11;1106 1175 11C0;BC11;1106 1175 11C0; +BC12;BC12;1106 1175 11C1;BC12;1106 1175 11C1; +BC13;BC13;1106 1175 11C2;BC13;1106 1175 11C2; +BC14;BC14;1107 1161;BC14;1107 1161; +BC15;BC15;1107 1161 11A8;BC15;1107 1161 11A8; +BC16;BC16;1107 1161 11A9;BC16;1107 1161 11A9; +BC17;BC17;1107 1161 11AA;BC17;1107 1161 11AA; +BC18;BC18;1107 1161 11AB;BC18;1107 1161 11AB; +BC19;BC19;1107 1161 11AC;BC19;1107 1161 11AC; +BC1A;BC1A;1107 1161 11AD;BC1A;1107 1161 11AD; +BC1B;BC1B;1107 1161 11AE;BC1B;1107 1161 11AE; +BC1C;BC1C;1107 1161 11AF;BC1C;1107 1161 11AF; +BC1D;BC1D;1107 1161 11B0;BC1D;1107 1161 11B0; +BC1E;BC1E;1107 1161 11B1;BC1E;1107 1161 11B1; +BC1F;BC1F;1107 1161 11B2;BC1F;1107 1161 11B2; +BC20;BC20;1107 1161 11B3;BC20;1107 1161 11B3; +BC21;BC21;1107 1161 11B4;BC21;1107 1161 11B4; +BC22;BC22;1107 1161 11B5;BC22;1107 1161 11B5; +BC23;BC23;1107 1161 11B6;BC23;1107 1161 11B6; +BC24;BC24;1107 1161 11B7;BC24;1107 1161 11B7; +BC25;BC25;1107 1161 11B8;BC25;1107 1161 11B8; +BC26;BC26;1107 1161 11B9;BC26;1107 1161 11B9; +BC27;BC27;1107 1161 11BA;BC27;1107 1161 11BA; +BC28;BC28;1107 1161 11BB;BC28;1107 1161 11BB; +BC29;BC29;1107 1161 11BC;BC29;1107 1161 11BC; +BC2A;BC2A;1107 1161 11BD;BC2A;1107 1161 11BD; +BC2B;BC2B;1107 1161 11BE;BC2B;1107 1161 11BE; +BC2C;BC2C;1107 1161 11BF;BC2C;1107 1161 11BF; +BC2D;BC2D;1107 1161 11C0;BC2D;1107 1161 11C0; +BC2E;BC2E;1107 1161 11C1;BC2E;1107 1161 11C1; +BC2F;BC2F;1107 1161 11C2;BC2F;1107 1161 11C2; +BC30;BC30;1107 1162;BC30;1107 1162; +BC31;BC31;1107 1162 11A8;BC31;1107 1162 11A8; +BC32;BC32;1107 1162 11A9;BC32;1107 1162 11A9; +BC33;BC33;1107 1162 11AA;BC33;1107 1162 11AA; +BC34;BC34;1107 1162 11AB;BC34;1107 1162 11AB; +BC35;BC35;1107 1162 11AC;BC35;1107 1162 11AC; +BC36;BC36;1107 1162 11AD;BC36;1107 1162 11AD; +BC37;BC37;1107 1162 11AE;BC37;1107 1162 11AE; +BC38;BC38;1107 1162 11AF;BC38;1107 1162 11AF; +BC39;BC39;1107 1162 11B0;BC39;1107 1162 11B0; +BC3A;BC3A;1107 1162 11B1;BC3A;1107 1162 11B1; +BC3B;BC3B;1107 1162 11B2;BC3B;1107 1162 11B2; +BC3C;BC3C;1107 1162 11B3;BC3C;1107 1162 11B3; +BC3D;BC3D;1107 1162 11B4;BC3D;1107 1162 11B4; +BC3E;BC3E;1107 1162 11B5;BC3E;1107 1162 11B5; +BC3F;BC3F;1107 1162 11B6;BC3F;1107 1162 11B6; +BC40;BC40;1107 1162 11B7;BC40;1107 1162 11B7; +BC41;BC41;1107 1162 11B8;BC41;1107 1162 11B8; +BC42;BC42;1107 1162 11B9;BC42;1107 1162 11B9; +BC43;BC43;1107 1162 11BA;BC43;1107 1162 11BA; +BC44;BC44;1107 1162 11BB;BC44;1107 1162 11BB; +BC45;BC45;1107 1162 11BC;BC45;1107 1162 11BC; +BC46;BC46;1107 1162 11BD;BC46;1107 1162 11BD; +BC47;BC47;1107 1162 11BE;BC47;1107 1162 11BE; +BC48;BC48;1107 1162 11BF;BC48;1107 1162 11BF; +BC49;BC49;1107 1162 11C0;BC49;1107 1162 11C0; +BC4A;BC4A;1107 1162 11C1;BC4A;1107 1162 11C1; +BC4B;BC4B;1107 1162 11C2;BC4B;1107 1162 11C2; +BC4C;BC4C;1107 1163;BC4C;1107 1163; +BC4D;BC4D;1107 1163 11A8;BC4D;1107 1163 11A8; +BC4E;BC4E;1107 1163 11A9;BC4E;1107 1163 11A9; +BC4F;BC4F;1107 1163 11AA;BC4F;1107 1163 11AA; +BC50;BC50;1107 1163 11AB;BC50;1107 1163 11AB; +BC51;BC51;1107 1163 11AC;BC51;1107 1163 11AC; +BC52;BC52;1107 1163 11AD;BC52;1107 1163 11AD; +BC53;BC53;1107 1163 11AE;BC53;1107 1163 11AE; +BC54;BC54;1107 1163 11AF;BC54;1107 1163 11AF; +BC55;BC55;1107 1163 11B0;BC55;1107 1163 11B0; +BC56;BC56;1107 1163 11B1;BC56;1107 1163 11B1; +BC57;BC57;1107 1163 11B2;BC57;1107 1163 11B2; +BC58;BC58;1107 1163 11B3;BC58;1107 1163 11B3; +BC59;BC59;1107 1163 11B4;BC59;1107 1163 11B4; +BC5A;BC5A;1107 1163 11B5;BC5A;1107 1163 11B5; +BC5B;BC5B;1107 1163 11B6;BC5B;1107 1163 11B6; +BC5C;BC5C;1107 1163 11B7;BC5C;1107 1163 11B7; +BC5D;BC5D;1107 1163 11B8;BC5D;1107 1163 11B8; +BC5E;BC5E;1107 1163 11B9;BC5E;1107 1163 11B9; +BC5F;BC5F;1107 1163 11BA;BC5F;1107 1163 11BA; +BC60;BC60;1107 1163 11BB;BC60;1107 1163 11BB; +BC61;BC61;1107 1163 11BC;BC61;1107 1163 11BC; +BC62;BC62;1107 1163 11BD;BC62;1107 1163 11BD; +BC63;BC63;1107 1163 11BE;BC63;1107 1163 11BE; +BC64;BC64;1107 1163 11BF;BC64;1107 1163 11BF; +BC65;BC65;1107 1163 11C0;BC65;1107 1163 11C0; +BC66;BC66;1107 1163 11C1;BC66;1107 1163 11C1; +BC67;BC67;1107 1163 11C2;BC67;1107 1163 11C2; +BC68;BC68;1107 1164;BC68;1107 1164; +BC69;BC69;1107 1164 11A8;BC69;1107 1164 11A8; +BC6A;BC6A;1107 1164 11A9;BC6A;1107 1164 11A9; +BC6B;BC6B;1107 1164 11AA;BC6B;1107 1164 11AA; +BC6C;BC6C;1107 1164 11AB;BC6C;1107 1164 11AB; +BC6D;BC6D;1107 1164 11AC;BC6D;1107 1164 11AC; +BC6E;BC6E;1107 1164 11AD;BC6E;1107 1164 11AD; +BC6F;BC6F;1107 1164 11AE;BC6F;1107 1164 11AE; +BC70;BC70;1107 1164 11AF;BC70;1107 1164 11AF; +BC71;BC71;1107 1164 11B0;BC71;1107 1164 11B0; +BC72;BC72;1107 1164 11B1;BC72;1107 1164 11B1; +BC73;BC73;1107 1164 11B2;BC73;1107 1164 11B2; +BC74;BC74;1107 1164 11B3;BC74;1107 1164 11B3; +BC75;BC75;1107 1164 11B4;BC75;1107 1164 11B4; +BC76;BC76;1107 1164 11B5;BC76;1107 1164 11B5; +BC77;BC77;1107 1164 11B6;BC77;1107 1164 11B6; +BC78;BC78;1107 1164 11B7;BC78;1107 1164 11B7; +BC79;BC79;1107 1164 11B8;BC79;1107 1164 11B8; +BC7A;BC7A;1107 1164 11B9;BC7A;1107 1164 11B9; +BC7B;BC7B;1107 1164 11BA;BC7B;1107 1164 11BA; +BC7C;BC7C;1107 1164 11BB;BC7C;1107 1164 11BB; +BC7D;BC7D;1107 1164 11BC;BC7D;1107 1164 11BC; +BC7E;BC7E;1107 1164 11BD;BC7E;1107 1164 11BD; +BC7F;BC7F;1107 1164 11BE;BC7F;1107 1164 11BE; +BC80;BC80;1107 1164 11BF;BC80;1107 1164 11BF; +BC81;BC81;1107 1164 11C0;BC81;1107 1164 11C0; +BC82;BC82;1107 1164 11C1;BC82;1107 1164 11C1; +BC83;BC83;1107 1164 11C2;BC83;1107 1164 11C2; +BC84;BC84;1107 1165;BC84;1107 1165; +BC85;BC85;1107 1165 11A8;BC85;1107 1165 11A8; +BC86;BC86;1107 1165 11A9;BC86;1107 1165 11A9; +BC87;BC87;1107 1165 11AA;BC87;1107 1165 11AA; +BC88;BC88;1107 1165 11AB;BC88;1107 1165 11AB; +BC89;BC89;1107 1165 11AC;BC89;1107 1165 11AC; +BC8A;BC8A;1107 1165 11AD;BC8A;1107 1165 11AD; +BC8B;BC8B;1107 1165 11AE;BC8B;1107 1165 11AE; +BC8C;BC8C;1107 1165 11AF;BC8C;1107 1165 11AF; +BC8D;BC8D;1107 1165 11B0;BC8D;1107 1165 11B0; +BC8E;BC8E;1107 1165 11B1;BC8E;1107 1165 11B1; +BC8F;BC8F;1107 1165 11B2;BC8F;1107 1165 11B2; +BC90;BC90;1107 1165 11B3;BC90;1107 1165 11B3; +BC91;BC91;1107 1165 11B4;BC91;1107 1165 11B4; +BC92;BC92;1107 1165 11B5;BC92;1107 1165 11B5; +BC93;BC93;1107 1165 11B6;BC93;1107 1165 11B6; +BC94;BC94;1107 1165 11B7;BC94;1107 1165 11B7; +BC95;BC95;1107 1165 11B8;BC95;1107 1165 11B8; +BC96;BC96;1107 1165 11B9;BC96;1107 1165 11B9; +BC97;BC97;1107 1165 11BA;BC97;1107 1165 11BA; +BC98;BC98;1107 1165 11BB;BC98;1107 1165 11BB; +BC99;BC99;1107 1165 11BC;BC99;1107 1165 11BC; +BC9A;BC9A;1107 1165 11BD;BC9A;1107 1165 11BD; +BC9B;BC9B;1107 1165 11BE;BC9B;1107 1165 11BE; +BC9C;BC9C;1107 1165 11BF;BC9C;1107 1165 11BF; +BC9D;BC9D;1107 1165 11C0;BC9D;1107 1165 11C0; +BC9E;BC9E;1107 1165 11C1;BC9E;1107 1165 11C1; +BC9F;BC9F;1107 1165 11C2;BC9F;1107 1165 11C2; +BCA0;BCA0;1107 1166;BCA0;1107 1166; +BCA1;BCA1;1107 1166 11A8;BCA1;1107 1166 11A8; +BCA2;BCA2;1107 1166 11A9;BCA2;1107 1166 11A9; +BCA3;BCA3;1107 1166 11AA;BCA3;1107 1166 11AA; +BCA4;BCA4;1107 1166 11AB;BCA4;1107 1166 11AB; +BCA5;BCA5;1107 1166 11AC;BCA5;1107 1166 11AC; +BCA6;BCA6;1107 1166 11AD;BCA6;1107 1166 11AD; +BCA7;BCA7;1107 1166 11AE;BCA7;1107 1166 11AE; +BCA8;BCA8;1107 1166 11AF;BCA8;1107 1166 11AF; +BCA9;BCA9;1107 1166 11B0;BCA9;1107 1166 11B0; +BCAA;BCAA;1107 1166 11B1;BCAA;1107 1166 11B1; +BCAB;BCAB;1107 1166 11B2;BCAB;1107 1166 11B2; +BCAC;BCAC;1107 1166 11B3;BCAC;1107 1166 11B3; +BCAD;BCAD;1107 1166 11B4;BCAD;1107 1166 11B4; +BCAE;BCAE;1107 1166 11B5;BCAE;1107 1166 11B5; +BCAF;BCAF;1107 1166 11B6;BCAF;1107 1166 11B6; +BCB0;BCB0;1107 1166 11B7;BCB0;1107 1166 11B7; +BCB1;BCB1;1107 1166 11B8;BCB1;1107 1166 11B8; +BCB2;BCB2;1107 1166 11B9;BCB2;1107 1166 11B9; +BCB3;BCB3;1107 1166 11BA;BCB3;1107 1166 11BA; +BCB4;BCB4;1107 1166 11BB;BCB4;1107 1166 11BB; +BCB5;BCB5;1107 1166 11BC;BCB5;1107 1166 11BC; +BCB6;BCB6;1107 1166 11BD;BCB6;1107 1166 11BD; +BCB7;BCB7;1107 1166 11BE;BCB7;1107 1166 11BE; +BCB8;BCB8;1107 1166 11BF;BCB8;1107 1166 11BF; +BCB9;BCB9;1107 1166 11C0;BCB9;1107 1166 11C0; +BCBA;BCBA;1107 1166 11C1;BCBA;1107 1166 11C1; +BCBB;BCBB;1107 1166 11C2;BCBB;1107 1166 11C2; +BCBC;BCBC;1107 1167;BCBC;1107 1167; +BCBD;BCBD;1107 1167 11A8;BCBD;1107 1167 11A8; +BCBE;BCBE;1107 1167 11A9;BCBE;1107 1167 11A9; +BCBF;BCBF;1107 1167 11AA;BCBF;1107 1167 11AA; +BCC0;BCC0;1107 1167 11AB;BCC0;1107 1167 11AB; +BCC1;BCC1;1107 1167 11AC;BCC1;1107 1167 11AC; +BCC2;BCC2;1107 1167 11AD;BCC2;1107 1167 11AD; +BCC3;BCC3;1107 1167 11AE;BCC3;1107 1167 11AE; +BCC4;BCC4;1107 1167 11AF;BCC4;1107 1167 11AF; +BCC5;BCC5;1107 1167 11B0;BCC5;1107 1167 11B0; +BCC6;BCC6;1107 1167 11B1;BCC6;1107 1167 11B1; +BCC7;BCC7;1107 1167 11B2;BCC7;1107 1167 11B2; +BCC8;BCC8;1107 1167 11B3;BCC8;1107 1167 11B3; +BCC9;BCC9;1107 1167 11B4;BCC9;1107 1167 11B4; +BCCA;BCCA;1107 1167 11B5;BCCA;1107 1167 11B5; +BCCB;BCCB;1107 1167 11B6;BCCB;1107 1167 11B6; +BCCC;BCCC;1107 1167 11B7;BCCC;1107 1167 11B7; +BCCD;BCCD;1107 1167 11B8;BCCD;1107 1167 11B8; +BCCE;BCCE;1107 1167 11B9;BCCE;1107 1167 11B9; +BCCF;BCCF;1107 1167 11BA;BCCF;1107 1167 11BA; +BCD0;BCD0;1107 1167 11BB;BCD0;1107 1167 11BB; +BCD1;BCD1;1107 1167 11BC;BCD1;1107 1167 11BC; +BCD2;BCD2;1107 1167 11BD;BCD2;1107 1167 11BD; +BCD3;BCD3;1107 1167 11BE;BCD3;1107 1167 11BE; +BCD4;BCD4;1107 1167 11BF;BCD4;1107 1167 11BF; +BCD5;BCD5;1107 1167 11C0;BCD5;1107 1167 11C0; +BCD6;BCD6;1107 1167 11C1;BCD6;1107 1167 11C1; +BCD7;BCD7;1107 1167 11C2;BCD7;1107 1167 11C2; +BCD8;BCD8;1107 1168;BCD8;1107 1168; +BCD9;BCD9;1107 1168 11A8;BCD9;1107 1168 11A8; +BCDA;BCDA;1107 1168 11A9;BCDA;1107 1168 11A9; +BCDB;BCDB;1107 1168 11AA;BCDB;1107 1168 11AA; +BCDC;BCDC;1107 1168 11AB;BCDC;1107 1168 11AB; +BCDD;BCDD;1107 1168 11AC;BCDD;1107 1168 11AC; +BCDE;BCDE;1107 1168 11AD;BCDE;1107 1168 11AD; +BCDF;BCDF;1107 1168 11AE;BCDF;1107 1168 11AE; +BCE0;BCE0;1107 1168 11AF;BCE0;1107 1168 11AF; +BCE1;BCE1;1107 1168 11B0;BCE1;1107 1168 11B0; +BCE2;BCE2;1107 1168 11B1;BCE2;1107 1168 11B1; +BCE3;BCE3;1107 1168 11B2;BCE3;1107 1168 11B2; +BCE4;BCE4;1107 1168 11B3;BCE4;1107 1168 11B3; +BCE5;BCE5;1107 1168 11B4;BCE5;1107 1168 11B4; +BCE6;BCE6;1107 1168 11B5;BCE6;1107 1168 11B5; +BCE7;BCE7;1107 1168 11B6;BCE7;1107 1168 11B6; +BCE8;BCE8;1107 1168 11B7;BCE8;1107 1168 11B7; +BCE9;BCE9;1107 1168 11B8;BCE9;1107 1168 11B8; +BCEA;BCEA;1107 1168 11B9;BCEA;1107 1168 11B9; +BCEB;BCEB;1107 1168 11BA;BCEB;1107 1168 11BA; +BCEC;BCEC;1107 1168 11BB;BCEC;1107 1168 11BB; +BCED;BCED;1107 1168 11BC;BCED;1107 1168 11BC; +BCEE;BCEE;1107 1168 11BD;BCEE;1107 1168 11BD; +BCEF;BCEF;1107 1168 11BE;BCEF;1107 1168 11BE; +BCF0;BCF0;1107 1168 11BF;BCF0;1107 1168 11BF; +BCF1;BCF1;1107 1168 11C0;BCF1;1107 1168 11C0; +BCF2;BCF2;1107 1168 11C1;BCF2;1107 1168 11C1; +BCF3;BCF3;1107 1168 11C2;BCF3;1107 1168 11C2; +BCF4;BCF4;1107 1169;BCF4;1107 1169; +BCF5;BCF5;1107 1169 11A8;BCF5;1107 1169 11A8; +BCF6;BCF6;1107 1169 11A9;BCF6;1107 1169 11A9; +BCF7;BCF7;1107 1169 11AA;BCF7;1107 1169 11AA; +BCF8;BCF8;1107 1169 11AB;BCF8;1107 1169 11AB; +BCF9;BCF9;1107 1169 11AC;BCF9;1107 1169 11AC; +BCFA;BCFA;1107 1169 11AD;BCFA;1107 1169 11AD; +BCFB;BCFB;1107 1169 11AE;BCFB;1107 1169 11AE; +BCFC;BCFC;1107 1169 11AF;BCFC;1107 1169 11AF; +BCFD;BCFD;1107 1169 11B0;BCFD;1107 1169 11B0; +BCFE;BCFE;1107 1169 11B1;BCFE;1107 1169 11B1; +BCFF;BCFF;1107 1169 11B2;BCFF;1107 1169 11B2; +BD00;BD00;1107 1169 11B3;BD00;1107 1169 11B3; +BD01;BD01;1107 1169 11B4;BD01;1107 1169 11B4; +BD02;BD02;1107 1169 11B5;BD02;1107 1169 11B5; +BD03;BD03;1107 1169 11B6;BD03;1107 1169 11B6; +BD04;BD04;1107 1169 11B7;BD04;1107 1169 11B7; +BD05;BD05;1107 1169 11B8;BD05;1107 1169 11B8; +BD06;BD06;1107 1169 11B9;BD06;1107 1169 11B9; +BD07;BD07;1107 1169 11BA;BD07;1107 1169 11BA; +BD08;BD08;1107 1169 11BB;BD08;1107 1169 11BB; +BD09;BD09;1107 1169 11BC;BD09;1107 1169 11BC; +BD0A;BD0A;1107 1169 11BD;BD0A;1107 1169 11BD; +BD0B;BD0B;1107 1169 11BE;BD0B;1107 1169 11BE; +BD0C;BD0C;1107 1169 11BF;BD0C;1107 1169 11BF; +BD0D;BD0D;1107 1169 11C0;BD0D;1107 1169 11C0; +BD0E;BD0E;1107 1169 11C1;BD0E;1107 1169 11C1; +BD0F;BD0F;1107 1169 11C2;BD0F;1107 1169 11C2; +BD10;BD10;1107 116A;BD10;1107 116A; +BD11;BD11;1107 116A 11A8;BD11;1107 116A 11A8; +BD12;BD12;1107 116A 11A9;BD12;1107 116A 11A9; +BD13;BD13;1107 116A 11AA;BD13;1107 116A 11AA; +BD14;BD14;1107 116A 11AB;BD14;1107 116A 11AB; +BD15;BD15;1107 116A 11AC;BD15;1107 116A 11AC; +BD16;BD16;1107 116A 11AD;BD16;1107 116A 11AD; +BD17;BD17;1107 116A 11AE;BD17;1107 116A 11AE; +BD18;BD18;1107 116A 11AF;BD18;1107 116A 11AF; +BD19;BD19;1107 116A 11B0;BD19;1107 116A 11B0; +BD1A;BD1A;1107 116A 11B1;BD1A;1107 116A 11B1; +BD1B;BD1B;1107 116A 11B2;BD1B;1107 116A 11B2; +BD1C;BD1C;1107 116A 11B3;BD1C;1107 116A 11B3; +BD1D;BD1D;1107 116A 11B4;BD1D;1107 116A 11B4; +BD1E;BD1E;1107 116A 11B5;BD1E;1107 116A 11B5; +BD1F;BD1F;1107 116A 11B6;BD1F;1107 116A 11B6; +BD20;BD20;1107 116A 11B7;BD20;1107 116A 11B7; +BD21;BD21;1107 116A 11B8;BD21;1107 116A 11B8; +BD22;BD22;1107 116A 11B9;BD22;1107 116A 11B9; +BD23;BD23;1107 116A 11BA;BD23;1107 116A 11BA; +BD24;BD24;1107 116A 11BB;BD24;1107 116A 11BB; +BD25;BD25;1107 116A 11BC;BD25;1107 116A 11BC; +BD26;BD26;1107 116A 11BD;BD26;1107 116A 11BD; +BD27;BD27;1107 116A 11BE;BD27;1107 116A 11BE; +BD28;BD28;1107 116A 11BF;BD28;1107 116A 11BF; +BD29;BD29;1107 116A 11C0;BD29;1107 116A 11C0; +BD2A;BD2A;1107 116A 11C1;BD2A;1107 116A 11C1; +BD2B;BD2B;1107 116A 11C2;BD2B;1107 116A 11C2; +BD2C;BD2C;1107 116B;BD2C;1107 116B; +BD2D;BD2D;1107 116B 11A8;BD2D;1107 116B 11A8; +BD2E;BD2E;1107 116B 11A9;BD2E;1107 116B 11A9; +BD2F;BD2F;1107 116B 11AA;BD2F;1107 116B 11AA; +BD30;BD30;1107 116B 11AB;BD30;1107 116B 11AB; +BD31;BD31;1107 116B 11AC;BD31;1107 116B 11AC; +BD32;BD32;1107 116B 11AD;BD32;1107 116B 11AD; +BD33;BD33;1107 116B 11AE;BD33;1107 116B 11AE; +BD34;BD34;1107 116B 11AF;BD34;1107 116B 11AF; +BD35;BD35;1107 116B 11B0;BD35;1107 116B 11B0; +BD36;BD36;1107 116B 11B1;BD36;1107 116B 11B1; +BD37;BD37;1107 116B 11B2;BD37;1107 116B 11B2; +BD38;BD38;1107 116B 11B3;BD38;1107 116B 11B3; +BD39;BD39;1107 116B 11B4;BD39;1107 116B 11B4; +BD3A;BD3A;1107 116B 11B5;BD3A;1107 116B 11B5; +BD3B;BD3B;1107 116B 11B6;BD3B;1107 116B 11B6; +BD3C;BD3C;1107 116B 11B7;BD3C;1107 116B 11B7; +BD3D;BD3D;1107 116B 11B8;BD3D;1107 116B 11B8; +BD3E;BD3E;1107 116B 11B9;BD3E;1107 116B 11B9; +BD3F;BD3F;1107 116B 11BA;BD3F;1107 116B 11BA; +BD40;BD40;1107 116B 11BB;BD40;1107 116B 11BB; +BD41;BD41;1107 116B 11BC;BD41;1107 116B 11BC; +BD42;BD42;1107 116B 11BD;BD42;1107 116B 11BD; +BD43;BD43;1107 116B 11BE;BD43;1107 116B 11BE; +BD44;BD44;1107 116B 11BF;BD44;1107 116B 11BF; +BD45;BD45;1107 116B 11C0;BD45;1107 116B 11C0; +BD46;BD46;1107 116B 11C1;BD46;1107 116B 11C1; +BD47;BD47;1107 116B 11C2;BD47;1107 116B 11C2; +BD48;BD48;1107 116C;BD48;1107 116C; +BD49;BD49;1107 116C 11A8;BD49;1107 116C 11A8; +BD4A;BD4A;1107 116C 11A9;BD4A;1107 116C 11A9; +BD4B;BD4B;1107 116C 11AA;BD4B;1107 116C 11AA; +BD4C;BD4C;1107 116C 11AB;BD4C;1107 116C 11AB; +BD4D;BD4D;1107 116C 11AC;BD4D;1107 116C 11AC; +BD4E;BD4E;1107 116C 11AD;BD4E;1107 116C 11AD; +BD4F;BD4F;1107 116C 11AE;BD4F;1107 116C 11AE; +BD50;BD50;1107 116C 11AF;BD50;1107 116C 11AF; +BD51;BD51;1107 116C 11B0;BD51;1107 116C 11B0; +BD52;BD52;1107 116C 11B1;BD52;1107 116C 11B1; +BD53;BD53;1107 116C 11B2;BD53;1107 116C 11B2; +BD54;BD54;1107 116C 11B3;BD54;1107 116C 11B3; +BD55;BD55;1107 116C 11B4;BD55;1107 116C 11B4; +BD56;BD56;1107 116C 11B5;BD56;1107 116C 11B5; +BD57;BD57;1107 116C 11B6;BD57;1107 116C 11B6; +BD58;BD58;1107 116C 11B7;BD58;1107 116C 11B7; +BD59;BD59;1107 116C 11B8;BD59;1107 116C 11B8; +BD5A;BD5A;1107 116C 11B9;BD5A;1107 116C 11B9; +BD5B;BD5B;1107 116C 11BA;BD5B;1107 116C 11BA; +BD5C;BD5C;1107 116C 11BB;BD5C;1107 116C 11BB; +BD5D;BD5D;1107 116C 11BC;BD5D;1107 116C 11BC; +BD5E;BD5E;1107 116C 11BD;BD5E;1107 116C 11BD; +BD5F;BD5F;1107 116C 11BE;BD5F;1107 116C 11BE; +BD60;BD60;1107 116C 11BF;BD60;1107 116C 11BF; +BD61;BD61;1107 116C 11C0;BD61;1107 116C 11C0; +BD62;BD62;1107 116C 11C1;BD62;1107 116C 11C1; +BD63;BD63;1107 116C 11C2;BD63;1107 116C 11C2; +BD64;BD64;1107 116D;BD64;1107 116D; +BD65;BD65;1107 116D 11A8;BD65;1107 116D 11A8; +BD66;BD66;1107 116D 11A9;BD66;1107 116D 11A9; +BD67;BD67;1107 116D 11AA;BD67;1107 116D 11AA; +BD68;BD68;1107 116D 11AB;BD68;1107 116D 11AB; +BD69;BD69;1107 116D 11AC;BD69;1107 116D 11AC; +BD6A;BD6A;1107 116D 11AD;BD6A;1107 116D 11AD; +BD6B;BD6B;1107 116D 11AE;BD6B;1107 116D 11AE; +BD6C;BD6C;1107 116D 11AF;BD6C;1107 116D 11AF; +BD6D;BD6D;1107 116D 11B0;BD6D;1107 116D 11B0; +BD6E;BD6E;1107 116D 11B1;BD6E;1107 116D 11B1; +BD6F;BD6F;1107 116D 11B2;BD6F;1107 116D 11B2; +BD70;BD70;1107 116D 11B3;BD70;1107 116D 11B3; +BD71;BD71;1107 116D 11B4;BD71;1107 116D 11B4; +BD72;BD72;1107 116D 11B5;BD72;1107 116D 11B5; +BD73;BD73;1107 116D 11B6;BD73;1107 116D 11B6; +BD74;BD74;1107 116D 11B7;BD74;1107 116D 11B7; +BD75;BD75;1107 116D 11B8;BD75;1107 116D 11B8; +BD76;BD76;1107 116D 11B9;BD76;1107 116D 11B9; +BD77;BD77;1107 116D 11BA;BD77;1107 116D 11BA; +BD78;BD78;1107 116D 11BB;BD78;1107 116D 11BB; +BD79;BD79;1107 116D 11BC;BD79;1107 116D 11BC; +BD7A;BD7A;1107 116D 11BD;BD7A;1107 116D 11BD; +BD7B;BD7B;1107 116D 11BE;BD7B;1107 116D 11BE; +BD7C;BD7C;1107 116D 11BF;BD7C;1107 116D 11BF; +BD7D;BD7D;1107 116D 11C0;BD7D;1107 116D 11C0; +BD7E;BD7E;1107 116D 11C1;BD7E;1107 116D 11C1; +BD7F;BD7F;1107 116D 11C2;BD7F;1107 116D 11C2; +BD80;BD80;1107 116E;BD80;1107 116E; +BD81;BD81;1107 116E 11A8;BD81;1107 116E 11A8; +BD82;BD82;1107 116E 11A9;BD82;1107 116E 11A9; +BD83;BD83;1107 116E 11AA;BD83;1107 116E 11AA; +BD84;BD84;1107 116E 11AB;BD84;1107 116E 11AB; +BD85;BD85;1107 116E 11AC;BD85;1107 116E 11AC; +BD86;BD86;1107 116E 11AD;BD86;1107 116E 11AD; +BD87;BD87;1107 116E 11AE;BD87;1107 116E 11AE; +BD88;BD88;1107 116E 11AF;BD88;1107 116E 11AF; +BD89;BD89;1107 116E 11B0;BD89;1107 116E 11B0; +BD8A;BD8A;1107 116E 11B1;BD8A;1107 116E 11B1; +BD8B;BD8B;1107 116E 11B2;BD8B;1107 116E 11B2; +BD8C;BD8C;1107 116E 11B3;BD8C;1107 116E 11B3; +BD8D;BD8D;1107 116E 11B4;BD8D;1107 116E 11B4; +BD8E;BD8E;1107 116E 11B5;BD8E;1107 116E 11B5; +BD8F;BD8F;1107 116E 11B6;BD8F;1107 116E 11B6; +BD90;BD90;1107 116E 11B7;BD90;1107 116E 11B7; +BD91;BD91;1107 116E 11B8;BD91;1107 116E 11B8; +BD92;BD92;1107 116E 11B9;BD92;1107 116E 11B9; +BD93;BD93;1107 116E 11BA;BD93;1107 116E 11BA; +BD94;BD94;1107 116E 11BB;BD94;1107 116E 11BB; +BD95;BD95;1107 116E 11BC;BD95;1107 116E 11BC; +BD96;BD96;1107 116E 11BD;BD96;1107 116E 11BD; +BD97;BD97;1107 116E 11BE;BD97;1107 116E 11BE; +BD98;BD98;1107 116E 11BF;BD98;1107 116E 11BF; +BD99;BD99;1107 116E 11C0;BD99;1107 116E 11C0; +BD9A;BD9A;1107 116E 11C1;BD9A;1107 116E 11C1; +BD9B;BD9B;1107 116E 11C2;BD9B;1107 116E 11C2; +BD9C;BD9C;1107 116F;BD9C;1107 116F; +BD9D;BD9D;1107 116F 11A8;BD9D;1107 116F 11A8; +BD9E;BD9E;1107 116F 11A9;BD9E;1107 116F 11A9; +BD9F;BD9F;1107 116F 11AA;BD9F;1107 116F 11AA; +BDA0;BDA0;1107 116F 11AB;BDA0;1107 116F 11AB; +BDA1;BDA1;1107 116F 11AC;BDA1;1107 116F 11AC; +BDA2;BDA2;1107 116F 11AD;BDA2;1107 116F 11AD; +BDA3;BDA3;1107 116F 11AE;BDA3;1107 116F 11AE; +BDA4;BDA4;1107 116F 11AF;BDA4;1107 116F 11AF; +BDA5;BDA5;1107 116F 11B0;BDA5;1107 116F 11B0; +BDA6;BDA6;1107 116F 11B1;BDA6;1107 116F 11B1; +BDA7;BDA7;1107 116F 11B2;BDA7;1107 116F 11B2; +BDA8;BDA8;1107 116F 11B3;BDA8;1107 116F 11B3; +BDA9;BDA9;1107 116F 11B4;BDA9;1107 116F 11B4; +BDAA;BDAA;1107 116F 11B5;BDAA;1107 116F 11B5; +BDAB;BDAB;1107 116F 11B6;BDAB;1107 116F 11B6; +BDAC;BDAC;1107 116F 11B7;BDAC;1107 116F 11B7; +BDAD;BDAD;1107 116F 11B8;BDAD;1107 116F 11B8; +BDAE;BDAE;1107 116F 11B9;BDAE;1107 116F 11B9; +BDAF;BDAF;1107 116F 11BA;BDAF;1107 116F 11BA; +BDB0;BDB0;1107 116F 11BB;BDB0;1107 116F 11BB; +BDB1;BDB1;1107 116F 11BC;BDB1;1107 116F 11BC; +BDB2;BDB2;1107 116F 11BD;BDB2;1107 116F 11BD; +BDB3;BDB3;1107 116F 11BE;BDB3;1107 116F 11BE; +BDB4;BDB4;1107 116F 11BF;BDB4;1107 116F 11BF; +BDB5;BDB5;1107 116F 11C0;BDB5;1107 116F 11C0; +BDB6;BDB6;1107 116F 11C1;BDB6;1107 116F 11C1; +BDB7;BDB7;1107 116F 11C2;BDB7;1107 116F 11C2; +BDB8;BDB8;1107 1170;BDB8;1107 1170; +BDB9;BDB9;1107 1170 11A8;BDB9;1107 1170 11A8; +BDBA;BDBA;1107 1170 11A9;BDBA;1107 1170 11A9; +BDBB;BDBB;1107 1170 11AA;BDBB;1107 1170 11AA; +BDBC;BDBC;1107 1170 11AB;BDBC;1107 1170 11AB; +BDBD;BDBD;1107 1170 11AC;BDBD;1107 1170 11AC; +BDBE;BDBE;1107 1170 11AD;BDBE;1107 1170 11AD; +BDBF;BDBF;1107 1170 11AE;BDBF;1107 1170 11AE; +BDC0;BDC0;1107 1170 11AF;BDC0;1107 1170 11AF; +BDC1;BDC1;1107 1170 11B0;BDC1;1107 1170 11B0; +BDC2;BDC2;1107 1170 11B1;BDC2;1107 1170 11B1; +BDC3;BDC3;1107 1170 11B2;BDC3;1107 1170 11B2; +BDC4;BDC4;1107 1170 11B3;BDC4;1107 1170 11B3; +BDC5;BDC5;1107 1170 11B4;BDC5;1107 1170 11B4; +BDC6;BDC6;1107 1170 11B5;BDC6;1107 1170 11B5; +BDC7;BDC7;1107 1170 11B6;BDC7;1107 1170 11B6; +BDC8;BDC8;1107 1170 11B7;BDC8;1107 1170 11B7; +BDC9;BDC9;1107 1170 11B8;BDC9;1107 1170 11B8; +BDCA;BDCA;1107 1170 11B9;BDCA;1107 1170 11B9; +BDCB;BDCB;1107 1170 11BA;BDCB;1107 1170 11BA; +BDCC;BDCC;1107 1170 11BB;BDCC;1107 1170 11BB; +BDCD;BDCD;1107 1170 11BC;BDCD;1107 1170 11BC; +BDCE;BDCE;1107 1170 11BD;BDCE;1107 1170 11BD; +BDCF;BDCF;1107 1170 11BE;BDCF;1107 1170 11BE; +BDD0;BDD0;1107 1170 11BF;BDD0;1107 1170 11BF; +BDD1;BDD1;1107 1170 11C0;BDD1;1107 1170 11C0; +BDD2;BDD2;1107 1170 11C1;BDD2;1107 1170 11C1; +BDD3;BDD3;1107 1170 11C2;BDD3;1107 1170 11C2; +BDD4;BDD4;1107 1171;BDD4;1107 1171; +BDD5;BDD5;1107 1171 11A8;BDD5;1107 1171 11A8; +BDD6;BDD6;1107 1171 11A9;BDD6;1107 1171 11A9; +BDD7;BDD7;1107 1171 11AA;BDD7;1107 1171 11AA; +BDD8;BDD8;1107 1171 11AB;BDD8;1107 1171 11AB; +BDD9;BDD9;1107 1171 11AC;BDD9;1107 1171 11AC; +BDDA;BDDA;1107 1171 11AD;BDDA;1107 1171 11AD; +BDDB;BDDB;1107 1171 11AE;BDDB;1107 1171 11AE; +BDDC;BDDC;1107 1171 11AF;BDDC;1107 1171 11AF; +BDDD;BDDD;1107 1171 11B0;BDDD;1107 1171 11B0; +BDDE;BDDE;1107 1171 11B1;BDDE;1107 1171 11B1; +BDDF;BDDF;1107 1171 11B2;BDDF;1107 1171 11B2; +BDE0;BDE0;1107 1171 11B3;BDE0;1107 1171 11B3; +BDE1;BDE1;1107 1171 11B4;BDE1;1107 1171 11B4; +BDE2;BDE2;1107 1171 11B5;BDE2;1107 1171 11B5; +BDE3;BDE3;1107 1171 11B6;BDE3;1107 1171 11B6; +BDE4;BDE4;1107 1171 11B7;BDE4;1107 1171 11B7; +BDE5;BDE5;1107 1171 11B8;BDE5;1107 1171 11B8; +BDE6;BDE6;1107 1171 11B9;BDE6;1107 1171 11B9; +BDE7;BDE7;1107 1171 11BA;BDE7;1107 1171 11BA; +BDE8;BDE8;1107 1171 11BB;BDE8;1107 1171 11BB; +BDE9;BDE9;1107 1171 11BC;BDE9;1107 1171 11BC; +BDEA;BDEA;1107 1171 11BD;BDEA;1107 1171 11BD; +BDEB;BDEB;1107 1171 11BE;BDEB;1107 1171 11BE; +BDEC;BDEC;1107 1171 11BF;BDEC;1107 1171 11BF; +BDED;BDED;1107 1171 11C0;BDED;1107 1171 11C0; +BDEE;BDEE;1107 1171 11C1;BDEE;1107 1171 11C1; +BDEF;BDEF;1107 1171 11C2;BDEF;1107 1171 11C2; +BDF0;BDF0;1107 1172;BDF0;1107 1172; +BDF1;BDF1;1107 1172 11A8;BDF1;1107 1172 11A8; +BDF2;BDF2;1107 1172 11A9;BDF2;1107 1172 11A9; +BDF3;BDF3;1107 1172 11AA;BDF3;1107 1172 11AA; +BDF4;BDF4;1107 1172 11AB;BDF4;1107 1172 11AB; +BDF5;BDF5;1107 1172 11AC;BDF5;1107 1172 11AC; +BDF6;BDF6;1107 1172 11AD;BDF6;1107 1172 11AD; +BDF7;BDF7;1107 1172 11AE;BDF7;1107 1172 11AE; +BDF8;BDF8;1107 1172 11AF;BDF8;1107 1172 11AF; +BDF9;BDF9;1107 1172 11B0;BDF9;1107 1172 11B0; +BDFA;BDFA;1107 1172 11B1;BDFA;1107 1172 11B1; +BDFB;BDFB;1107 1172 11B2;BDFB;1107 1172 11B2; +BDFC;BDFC;1107 1172 11B3;BDFC;1107 1172 11B3; +BDFD;BDFD;1107 1172 11B4;BDFD;1107 1172 11B4; +BDFE;BDFE;1107 1172 11B5;BDFE;1107 1172 11B5; +BDFF;BDFF;1107 1172 11B6;BDFF;1107 1172 11B6; +BE00;BE00;1107 1172 11B7;BE00;1107 1172 11B7; +BE01;BE01;1107 1172 11B8;BE01;1107 1172 11B8; +BE02;BE02;1107 1172 11B9;BE02;1107 1172 11B9; +BE03;BE03;1107 1172 11BA;BE03;1107 1172 11BA; +BE04;BE04;1107 1172 11BB;BE04;1107 1172 11BB; +BE05;BE05;1107 1172 11BC;BE05;1107 1172 11BC; +BE06;BE06;1107 1172 11BD;BE06;1107 1172 11BD; +BE07;BE07;1107 1172 11BE;BE07;1107 1172 11BE; +BE08;BE08;1107 1172 11BF;BE08;1107 1172 11BF; +BE09;BE09;1107 1172 11C0;BE09;1107 1172 11C0; +BE0A;BE0A;1107 1172 11C1;BE0A;1107 1172 11C1; +BE0B;BE0B;1107 1172 11C2;BE0B;1107 1172 11C2; +BE0C;BE0C;1107 1173;BE0C;1107 1173; +BE0D;BE0D;1107 1173 11A8;BE0D;1107 1173 11A8; +BE0E;BE0E;1107 1173 11A9;BE0E;1107 1173 11A9; +BE0F;BE0F;1107 1173 11AA;BE0F;1107 1173 11AA; +BE10;BE10;1107 1173 11AB;BE10;1107 1173 11AB; +BE11;BE11;1107 1173 11AC;BE11;1107 1173 11AC; +BE12;BE12;1107 1173 11AD;BE12;1107 1173 11AD; +BE13;BE13;1107 1173 11AE;BE13;1107 1173 11AE; +BE14;BE14;1107 1173 11AF;BE14;1107 1173 11AF; +BE15;BE15;1107 1173 11B0;BE15;1107 1173 11B0; +BE16;BE16;1107 1173 11B1;BE16;1107 1173 11B1; +BE17;BE17;1107 1173 11B2;BE17;1107 1173 11B2; +BE18;BE18;1107 1173 11B3;BE18;1107 1173 11B3; +BE19;BE19;1107 1173 11B4;BE19;1107 1173 11B4; +BE1A;BE1A;1107 1173 11B5;BE1A;1107 1173 11B5; +BE1B;BE1B;1107 1173 11B6;BE1B;1107 1173 11B6; +BE1C;BE1C;1107 1173 11B7;BE1C;1107 1173 11B7; +BE1D;BE1D;1107 1173 11B8;BE1D;1107 1173 11B8; +BE1E;BE1E;1107 1173 11B9;BE1E;1107 1173 11B9; +BE1F;BE1F;1107 1173 11BA;BE1F;1107 1173 11BA; +BE20;BE20;1107 1173 11BB;BE20;1107 1173 11BB; +BE21;BE21;1107 1173 11BC;BE21;1107 1173 11BC; +BE22;BE22;1107 1173 11BD;BE22;1107 1173 11BD; +BE23;BE23;1107 1173 11BE;BE23;1107 1173 11BE; +BE24;BE24;1107 1173 11BF;BE24;1107 1173 11BF; +BE25;BE25;1107 1173 11C0;BE25;1107 1173 11C0; +BE26;BE26;1107 1173 11C1;BE26;1107 1173 11C1; +BE27;BE27;1107 1173 11C2;BE27;1107 1173 11C2; +BE28;BE28;1107 1174;BE28;1107 1174; +BE29;BE29;1107 1174 11A8;BE29;1107 1174 11A8; +BE2A;BE2A;1107 1174 11A9;BE2A;1107 1174 11A9; +BE2B;BE2B;1107 1174 11AA;BE2B;1107 1174 11AA; +BE2C;BE2C;1107 1174 11AB;BE2C;1107 1174 11AB; +BE2D;BE2D;1107 1174 11AC;BE2D;1107 1174 11AC; +BE2E;BE2E;1107 1174 11AD;BE2E;1107 1174 11AD; +BE2F;BE2F;1107 1174 11AE;BE2F;1107 1174 11AE; +BE30;BE30;1107 1174 11AF;BE30;1107 1174 11AF; +BE31;BE31;1107 1174 11B0;BE31;1107 1174 11B0; +BE32;BE32;1107 1174 11B1;BE32;1107 1174 11B1; +BE33;BE33;1107 1174 11B2;BE33;1107 1174 11B2; +BE34;BE34;1107 1174 11B3;BE34;1107 1174 11B3; +BE35;BE35;1107 1174 11B4;BE35;1107 1174 11B4; +BE36;BE36;1107 1174 11B5;BE36;1107 1174 11B5; +BE37;BE37;1107 1174 11B6;BE37;1107 1174 11B6; +BE38;BE38;1107 1174 11B7;BE38;1107 1174 11B7; +BE39;BE39;1107 1174 11B8;BE39;1107 1174 11B8; +BE3A;BE3A;1107 1174 11B9;BE3A;1107 1174 11B9; +BE3B;BE3B;1107 1174 11BA;BE3B;1107 1174 11BA; +BE3C;BE3C;1107 1174 11BB;BE3C;1107 1174 11BB; +BE3D;BE3D;1107 1174 11BC;BE3D;1107 1174 11BC; +BE3E;BE3E;1107 1174 11BD;BE3E;1107 1174 11BD; +BE3F;BE3F;1107 1174 11BE;BE3F;1107 1174 11BE; +BE40;BE40;1107 1174 11BF;BE40;1107 1174 11BF; +BE41;BE41;1107 1174 11C0;BE41;1107 1174 11C0; +BE42;BE42;1107 1174 11C1;BE42;1107 1174 11C1; +BE43;BE43;1107 1174 11C2;BE43;1107 1174 11C2; +BE44;BE44;1107 1175;BE44;1107 1175; +BE45;BE45;1107 1175 11A8;BE45;1107 1175 11A8; +BE46;BE46;1107 1175 11A9;BE46;1107 1175 11A9; +BE47;BE47;1107 1175 11AA;BE47;1107 1175 11AA; +BE48;BE48;1107 1175 11AB;BE48;1107 1175 11AB; +BE49;BE49;1107 1175 11AC;BE49;1107 1175 11AC; +BE4A;BE4A;1107 1175 11AD;BE4A;1107 1175 11AD; +BE4B;BE4B;1107 1175 11AE;BE4B;1107 1175 11AE; +BE4C;BE4C;1107 1175 11AF;BE4C;1107 1175 11AF; +BE4D;BE4D;1107 1175 11B0;BE4D;1107 1175 11B0; +BE4E;BE4E;1107 1175 11B1;BE4E;1107 1175 11B1; +BE4F;BE4F;1107 1175 11B2;BE4F;1107 1175 11B2; +BE50;BE50;1107 1175 11B3;BE50;1107 1175 11B3; +BE51;BE51;1107 1175 11B4;BE51;1107 1175 11B4; +BE52;BE52;1107 1175 11B5;BE52;1107 1175 11B5; +BE53;BE53;1107 1175 11B6;BE53;1107 1175 11B6; +BE54;BE54;1107 1175 11B7;BE54;1107 1175 11B7; +BE55;BE55;1107 1175 11B8;BE55;1107 1175 11B8; +BE56;BE56;1107 1175 11B9;BE56;1107 1175 11B9; +BE57;BE57;1107 1175 11BA;BE57;1107 1175 11BA; +BE58;BE58;1107 1175 11BB;BE58;1107 1175 11BB; +BE59;BE59;1107 1175 11BC;BE59;1107 1175 11BC; +BE5A;BE5A;1107 1175 11BD;BE5A;1107 1175 11BD; +BE5B;BE5B;1107 1175 11BE;BE5B;1107 1175 11BE; +BE5C;BE5C;1107 1175 11BF;BE5C;1107 1175 11BF; +BE5D;BE5D;1107 1175 11C0;BE5D;1107 1175 11C0; +BE5E;BE5E;1107 1175 11C1;BE5E;1107 1175 11C1; +BE5F;BE5F;1107 1175 11C2;BE5F;1107 1175 11C2; +BE60;BE60;1108 1161;BE60;1108 1161; +BE61;BE61;1108 1161 11A8;BE61;1108 1161 11A8; +BE62;BE62;1108 1161 11A9;BE62;1108 1161 11A9; +BE63;BE63;1108 1161 11AA;BE63;1108 1161 11AA; +BE64;BE64;1108 1161 11AB;BE64;1108 1161 11AB; +BE65;BE65;1108 1161 11AC;BE65;1108 1161 11AC; +BE66;BE66;1108 1161 11AD;BE66;1108 1161 11AD; +BE67;BE67;1108 1161 11AE;BE67;1108 1161 11AE; +BE68;BE68;1108 1161 11AF;BE68;1108 1161 11AF; +BE69;BE69;1108 1161 11B0;BE69;1108 1161 11B0; +BE6A;BE6A;1108 1161 11B1;BE6A;1108 1161 11B1; +BE6B;BE6B;1108 1161 11B2;BE6B;1108 1161 11B2; +BE6C;BE6C;1108 1161 11B3;BE6C;1108 1161 11B3; +BE6D;BE6D;1108 1161 11B4;BE6D;1108 1161 11B4; +BE6E;BE6E;1108 1161 11B5;BE6E;1108 1161 11B5; +BE6F;BE6F;1108 1161 11B6;BE6F;1108 1161 11B6; +BE70;BE70;1108 1161 11B7;BE70;1108 1161 11B7; +BE71;BE71;1108 1161 11B8;BE71;1108 1161 11B8; +BE72;BE72;1108 1161 11B9;BE72;1108 1161 11B9; +BE73;BE73;1108 1161 11BA;BE73;1108 1161 11BA; +BE74;BE74;1108 1161 11BB;BE74;1108 1161 11BB; +BE75;BE75;1108 1161 11BC;BE75;1108 1161 11BC; +BE76;BE76;1108 1161 11BD;BE76;1108 1161 11BD; +BE77;BE77;1108 1161 11BE;BE77;1108 1161 11BE; +BE78;BE78;1108 1161 11BF;BE78;1108 1161 11BF; +BE79;BE79;1108 1161 11C0;BE79;1108 1161 11C0; +BE7A;BE7A;1108 1161 11C1;BE7A;1108 1161 11C1; +BE7B;BE7B;1108 1161 11C2;BE7B;1108 1161 11C2; +BE7C;BE7C;1108 1162;BE7C;1108 1162; +BE7D;BE7D;1108 1162 11A8;BE7D;1108 1162 11A8; +BE7E;BE7E;1108 1162 11A9;BE7E;1108 1162 11A9; +BE7F;BE7F;1108 1162 11AA;BE7F;1108 1162 11AA; +BE80;BE80;1108 1162 11AB;BE80;1108 1162 11AB; +BE81;BE81;1108 1162 11AC;BE81;1108 1162 11AC; +BE82;BE82;1108 1162 11AD;BE82;1108 1162 11AD; +BE83;BE83;1108 1162 11AE;BE83;1108 1162 11AE; +BE84;BE84;1108 1162 11AF;BE84;1108 1162 11AF; +BE85;BE85;1108 1162 11B0;BE85;1108 1162 11B0; +BE86;BE86;1108 1162 11B1;BE86;1108 1162 11B1; +BE87;BE87;1108 1162 11B2;BE87;1108 1162 11B2; +BE88;BE88;1108 1162 11B3;BE88;1108 1162 11B3; +BE89;BE89;1108 1162 11B4;BE89;1108 1162 11B4; +BE8A;BE8A;1108 1162 11B5;BE8A;1108 1162 11B5; +BE8B;BE8B;1108 1162 11B6;BE8B;1108 1162 11B6; +BE8C;BE8C;1108 1162 11B7;BE8C;1108 1162 11B7; +BE8D;BE8D;1108 1162 11B8;BE8D;1108 1162 11B8; +BE8E;BE8E;1108 1162 11B9;BE8E;1108 1162 11B9; +BE8F;BE8F;1108 1162 11BA;BE8F;1108 1162 11BA; +BE90;BE90;1108 1162 11BB;BE90;1108 1162 11BB; +BE91;BE91;1108 1162 11BC;BE91;1108 1162 11BC; +BE92;BE92;1108 1162 11BD;BE92;1108 1162 11BD; +BE93;BE93;1108 1162 11BE;BE93;1108 1162 11BE; +BE94;BE94;1108 1162 11BF;BE94;1108 1162 11BF; +BE95;BE95;1108 1162 11C0;BE95;1108 1162 11C0; +BE96;BE96;1108 1162 11C1;BE96;1108 1162 11C1; +BE97;BE97;1108 1162 11C2;BE97;1108 1162 11C2; +BE98;BE98;1108 1163;BE98;1108 1163; +BE99;BE99;1108 1163 11A8;BE99;1108 1163 11A8; +BE9A;BE9A;1108 1163 11A9;BE9A;1108 1163 11A9; +BE9B;BE9B;1108 1163 11AA;BE9B;1108 1163 11AA; +BE9C;BE9C;1108 1163 11AB;BE9C;1108 1163 11AB; +BE9D;BE9D;1108 1163 11AC;BE9D;1108 1163 11AC; +BE9E;BE9E;1108 1163 11AD;BE9E;1108 1163 11AD; +BE9F;BE9F;1108 1163 11AE;BE9F;1108 1163 11AE; +BEA0;BEA0;1108 1163 11AF;BEA0;1108 1163 11AF; +BEA1;BEA1;1108 1163 11B0;BEA1;1108 1163 11B0; +BEA2;BEA2;1108 1163 11B1;BEA2;1108 1163 11B1; +BEA3;BEA3;1108 1163 11B2;BEA3;1108 1163 11B2; +BEA4;BEA4;1108 1163 11B3;BEA4;1108 1163 11B3; +BEA5;BEA5;1108 1163 11B4;BEA5;1108 1163 11B4; +BEA6;BEA6;1108 1163 11B5;BEA6;1108 1163 11B5; +BEA7;BEA7;1108 1163 11B6;BEA7;1108 1163 11B6; +BEA8;BEA8;1108 1163 11B7;BEA8;1108 1163 11B7; +BEA9;BEA9;1108 1163 11B8;BEA9;1108 1163 11B8; +BEAA;BEAA;1108 1163 11B9;BEAA;1108 1163 11B9; +BEAB;BEAB;1108 1163 11BA;BEAB;1108 1163 11BA; +BEAC;BEAC;1108 1163 11BB;BEAC;1108 1163 11BB; +BEAD;BEAD;1108 1163 11BC;BEAD;1108 1163 11BC; +BEAE;BEAE;1108 1163 11BD;BEAE;1108 1163 11BD; +BEAF;BEAF;1108 1163 11BE;BEAF;1108 1163 11BE; +BEB0;BEB0;1108 1163 11BF;BEB0;1108 1163 11BF; +BEB1;BEB1;1108 1163 11C0;BEB1;1108 1163 11C0; +BEB2;BEB2;1108 1163 11C1;BEB2;1108 1163 11C1; +BEB3;BEB3;1108 1163 11C2;BEB3;1108 1163 11C2; +BEB4;BEB4;1108 1164;BEB4;1108 1164; +BEB5;BEB5;1108 1164 11A8;BEB5;1108 1164 11A8; +BEB6;BEB6;1108 1164 11A9;BEB6;1108 1164 11A9; +BEB7;BEB7;1108 1164 11AA;BEB7;1108 1164 11AA; +BEB8;BEB8;1108 1164 11AB;BEB8;1108 1164 11AB; +BEB9;BEB9;1108 1164 11AC;BEB9;1108 1164 11AC; +BEBA;BEBA;1108 1164 11AD;BEBA;1108 1164 11AD; +BEBB;BEBB;1108 1164 11AE;BEBB;1108 1164 11AE; +BEBC;BEBC;1108 1164 11AF;BEBC;1108 1164 11AF; +BEBD;BEBD;1108 1164 11B0;BEBD;1108 1164 11B0; +BEBE;BEBE;1108 1164 11B1;BEBE;1108 1164 11B1; +BEBF;BEBF;1108 1164 11B2;BEBF;1108 1164 11B2; +BEC0;BEC0;1108 1164 11B3;BEC0;1108 1164 11B3; +BEC1;BEC1;1108 1164 11B4;BEC1;1108 1164 11B4; +BEC2;BEC2;1108 1164 11B5;BEC2;1108 1164 11B5; +BEC3;BEC3;1108 1164 11B6;BEC3;1108 1164 11B6; +BEC4;BEC4;1108 1164 11B7;BEC4;1108 1164 11B7; +BEC5;BEC5;1108 1164 11B8;BEC5;1108 1164 11B8; +BEC6;BEC6;1108 1164 11B9;BEC6;1108 1164 11B9; +BEC7;BEC7;1108 1164 11BA;BEC7;1108 1164 11BA; +BEC8;BEC8;1108 1164 11BB;BEC8;1108 1164 11BB; +BEC9;BEC9;1108 1164 11BC;BEC9;1108 1164 11BC; +BECA;BECA;1108 1164 11BD;BECA;1108 1164 11BD; +BECB;BECB;1108 1164 11BE;BECB;1108 1164 11BE; +BECC;BECC;1108 1164 11BF;BECC;1108 1164 11BF; +BECD;BECD;1108 1164 11C0;BECD;1108 1164 11C0; +BECE;BECE;1108 1164 11C1;BECE;1108 1164 11C1; +BECF;BECF;1108 1164 11C2;BECF;1108 1164 11C2; +BED0;BED0;1108 1165;BED0;1108 1165; +BED1;BED1;1108 1165 11A8;BED1;1108 1165 11A8; +BED2;BED2;1108 1165 11A9;BED2;1108 1165 11A9; +BED3;BED3;1108 1165 11AA;BED3;1108 1165 11AA; +BED4;BED4;1108 1165 11AB;BED4;1108 1165 11AB; +BED5;BED5;1108 1165 11AC;BED5;1108 1165 11AC; +BED6;BED6;1108 1165 11AD;BED6;1108 1165 11AD; +BED7;BED7;1108 1165 11AE;BED7;1108 1165 11AE; +BED8;BED8;1108 1165 11AF;BED8;1108 1165 11AF; +BED9;BED9;1108 1165 11B0;BED9;1108 1165 11B0; +BEDA;BEDA;1108 1165 11B1;BEDA;1108 1165 11B1; +BEDB;BEDB;1108 1165 11B2;BEDB;1108 1165 11B2; +BEDC;BEDC;1108 1165 11B3;BEDC;1108 1165 11B3; +BEDD;BEDD;1108 1165 11B4;BEDD;1108 1165 11B4; +BEDE;BEDE;1108 1165 11B5;BEDE;1108 1165 11B5; +BEDF;BEDF;1108 1165 11B6;BEDF;1108 1165 11B6; +BEE0;BEE0;1108 1165 11B7;BEE0;1108 1165 11B7; +BEE1;BEE1;1108 1165 11B8;BEE1;1108 1165 11B8; +BEE2;BEE2;1108 1165 11B9;BEE2;1108 1165 11B9; +BEE3;BEE3;1108 1165 11BA;BEE3;1108 1165 11BA; +BEE4;BEE4;1108 1165 11BB;BEE4;1108 1165 11BB; +BEE5;BEE5;1108 1165 11BC;BEE5;1108 1165 11BC; +BEE6;BEE6;1108 1165 11BD;BEE6;1108 1165 11BD; +BEE7;BEE7;1108 1165 11BE;BEE7;1108 1165 11BE; +BEE8;BEE8;1108 1165 11BF;BEE8;1108 1165 11BF; +BEE9;BEE9;1108 1165 11C0;BEE9;1108 1165 11C0; +BEEA;BEEA;1108 1165 11C1;BEEA;1108 1165 11C1; +BEEB;BEEB;1108 1165 11C2;BEEB;1108 1165 11C2; +BEEC;BEEC;1108 1166;BEEC;1108 1166; +BEED;BEED;1108 1166 11A8;BEED;1108 1166 11A8; +BEEE;BEEE;1108 1166 11A9;BEEE;1108 1166 11A9; +BEEF;BEEF;1108 1166 11AA;BEEF;1108 1166 11AA; +BEF0;BEF0;1108 1166 11AB;BEF0;1108 1166 11AB; +BEF1;BEF1;1108 1166 11AC;BEF1;1108 1166 11AC; +BEF2;BEF2;1108 1166 11AD;BEF2;1108 1166 11AD; +BEF3;BEF3;1108 1166 11AE;BEF3;1108 1166 11AE; +BEF4;BEF4;1108 1166 11AF;BEF4;1108 1166 11AF; +BEF5;BEF5;1108 1166 11B0;BEF5;1108 1166 11B0; +BEF6;BEF6;1108 1166 11B1;BEF6;1108 1166 11B1; +BEF7;BEF7;1108 1166 11B2;BEF7;1108 1166 11B2; +BEF8;BEF8;1108 1166 11B3;BEF8;1108 1166 11B3; +BEF9;BEF9;1108 1166 11B4;BEF9;1108 1166 11B4; +BEFA;BEFA;1108 1166 11B5;BEFA;1108 1166 11B5; +BEFB;BEFB;1108 1166 11B6;BEFB;1108 1166 11B6; +BEFC;BEFC;1108 1166 11B7;BEFC;1108 1166 11B7; +BEFD;BEFD;1108 1166 11B8;BEFD;1108 1166 11B8; +BEFE;BEFE;1108 1166 11B9;BEFE;1108 1166 11B9; +BEFF;BEFF;1108 1166 11BA;BEFF;1108 1166 11BA; +BF00;BF00;1108 1166 11BB;BF00;1108 1166 11BB; +BF01;BF01;1108 1166 11BC;BF01;1108 1166 11BC; +BF02;BF02;1108 1166 11BD;BF02;1108 1166 11BD; +BF03;BF03;1108 1166 11BE;BF03;1108 1166 11BE; +BF04;BF04;1108 1166 11BF;BF04;1108 1166 11BF; +BF05;BF05;1108 1166 11C0;BF05;1108 1166 11C0; +BF06;BF06;1108 1166 11C1;BF06;1108 1166 11C1; +BF07;BF07;1108 1166 11C2;BF07;1108 1166 11C2; +BF08;BF08;1108 1167;BF08;1108 1167; +BF09;BF09;1108 1167 11A8;BF09;1108 1167 11A8; +BF0A;BF0A;1108 1167 11A9;BF0A;1108 1167 11A9; +BF0B;BF0B;1108 1167 11AA;BF0B;1108 1167 11AA; +BF0C;BF0C;1108 1167 11AB;BF0C;1108 1167 11AB; +BF0D;BF0D;1108 1167 11AC;BF0D;1108 1167 11AC; +BF0E;BF0E;1108 1167 11AD;BF0E;1108 1167 11AD; +BF0F;BF0F;1108 1167 11AE;BF0F;1108 1167 11AE; +BF10;BF10;1108 1167 11AF;BF10;1108 1167 11AF; +BF11;BF11;1108 1167 11B0;BF11;1108 1167 11B0; +BF12;BF12;1108 1167 11B1;BF12;1108 1167 11B1; +BF13;BF13;1108 1167 11B2;BF13;1108 1167 11B2; +BF14;BF14;1108 1167 11B3;BF14;1108 1167 11B3; +BF15;BF15;1108 1167 11B4;BF15;1108 1167 11B4; +BF16;BF16;1108 1167 11B5;BF16;1108 1167 11B5; +BF17;BF17;1108 1167 11B6;BF17;1108 1167 11B6; +BF18;BF18;1108 1167 11B7;BF18;1108 1167 11B7; +BF19;BF19;1108 1167 11B8;BF19;1108 1167 11B8; +BF1A;BF1A;1108 1167 11B9;BF1A;1108 1167 11B9; +BF1B;BF1B;1108 1167 11BA;BF1B;1108 1167 11BA; +BF1C;BF1C;1108 1167 11BB;BF1C;1108 1167 11BB; +BF1D;BF1D;1108 1167 11BC;BF1D;1108 1167 11BC; +BF1E;BF1E;1108 1167 11BD;BF1E;1108 1167 11BD; +BF1F;BF1F;1108 1167 11BE;BF1F;1108 1167 11BE; +BF20;BF20;1108 1167 11BF;BF20;1108 1167 11BF; +BF21;BF21;1108 1167 11C0;BF21;1108 1167 11C0; +BF22;BF22;1108 1167 11C1;BF22;1108 1167 11C1; +BF23;BF23;1108 1167 11C2;BF23;1108 1167 11C2; +BF24;BF24;1108 1168;BF24;1108 1168; +BF25;BF25;1108 1168 11A8;BF25;1108 1168 11A8; +BF26;BF26;1108 1168 11A9;BF26;1108 1168 11A9; +BF27;BF27;1108 1168 11AA;BF27;1108 1168 11AA; +BF28;BF28;1108 1168 11AB;BF28;1108 1168 11AB; +BF29;BF29;1108 1168 11AC;BF29;1108 1168 11AC; +BF2A;BF2A;1108 1168 11AD;BF2A;1108 1168 11AD; +BF2B;BF2B;1108 1168 11AE;BF2B;1108 1168 11AE; +BF2C;BF2C;1108 1168 11AF;BF2C;1108 1168 11AF; +BF2D;BF2D;1108 1168 11B0;BF2D;1108 1168 11B0; +BF2E;BF2E;1108 1168 11B1;BF2E;1108 1168 11B1; +BF2F;BF2F;1108 1168 11B2;BF2F;1108 1168 11B2; +BF30;BF30;1108 1168 11B3;BF30;1108 1168 11B3; +BF31;BF31;1108 1168 11B4;BF31;1108 1168 11B4; +BF32;BF32;1108 1168 11B5;BF32;1108 1168 11B5; +BF33;BF33;1108 1168 11B6;BF33;1108 1168 11B6; +BF34;BF34;1108 1168 11B7;BF34;1108 1168 11B7; +BF35;BF35;1108 1168 11B8;BF35;1108 1168 11B8; +BF36;BF36;1108 1168 11B9;BF36;1108 1168 11B9; +BF37;BF37;1108 1168 11BA;BF37;1108 1168 11BA; +BF38;BF38;1108 1168 11BB;BF38;1108 1168 11BB; +BF39;BF39;1108 1168 11BC;BF39;1108 1168 11BC; +BF3A;BF3A;1108 1168 11BD;BF3A;1108 1168 11BD; +BF3B;BF3B;1108 1168 11BE;BF3B;1108 1168 11BE; +BF3C;BF3C;1108 1168 11BF;BF3C;1108 1168 11BF; +BF3D;BF3D;1108 1168 11C0;BF3D;1108 1168 11C0; +BF3E;BF3E;1108 1168 11C1;BF3E;1108 1168 11C1; +BF3F;BF3F;1108 1168 11C2;BF3F;1108 1168 11C2; +BF40;BF40;1108 1169;BF40;1108 1169; +BF41;BF41;1108 1169 11A8;BF41;1108 1169 11A8; +BF42;BF42;1108 1169 11A9;BF42;1108 1169 11A9; +BF43;BF43;1108 1169 11AA;BF43;1108 1169 11AA; +BF44;BF44;1108 1169 11AB;BF44;1108 1169 11AB; +BF45;BF45;1108 1169 11AC;BF45;1108 1169 11AC; +BF46;BF46;1108 1169 11AD;BF46;1108 1169 11AD; +BF47;BF47;1108 1169 11AE;BF47;1108 1169 11AE; +BF48;BF48;1108 1169 11AF;BF48;1108 1169 11AF; +BF49;BF49;1108 1169 11B0;BF49;1108 1169 11B0; +BF4A;BF4A;1108 1169 11B1;BF4A;1108 1169 11B1; +BF4B;BF4B;1108 1169 11B2;BF4B;1108 1169 11B2; +BF4C;BF4C;1108 1169 11B3;BF4C;1108 1169 11B3; +BF4D;BF4D;1108 1169 11B4;BF4D;1108 1169 11B4; +BF4E;BF4E;1108 1169 11B5;BF4E;1108 1169 11B5; +BF4F;BF4F;1108 1169 11B6;BF4F;1108 1169 11B6; +BF50;BF50;1108 1169 11B7;BF50;1108 1169 11B7; +BF51;BF51;1108 1169 11B8;BF51;1108 1169 11B8; +BF52;BF52;1108 1169 11B9;BF52;1108 1169 11B9; +BF53;BF53;1108 1169 11BA;BF53;1108 1169 11BA; +BF54;BF54;1108 1169 11BB;BF54;1108 1169 11BB; +BF55;BF55;1108 1169 11BC;BF55;1108 1169 11BC; +BF56;BF56;1108 1169 11BD;BF56;1108 1169 11BD; +BF57;BF57;1108 1169 11BE;BF57;1108 1169 11BE; +BF58;BF58;1108 1169 11BF;BF58;1108 1169 11BF; +BF59;BF59;1108 1169 11C0;BF59;1108 1169 11C0; +BF5A;BF5A;1108 1169 11C1;BF5A;1108 1169 11C1; +BF5B;BF5B;1108 1169 11C2;BF5B;1108 1169 11C2; +BF5C;BF5C;1108 116A;BF5C;1108 116A; +BF5D;BF5D;1108 116A 11A8;BF5D;1108 116A 11A8; +BF5E;BF5E;1108 116A 11A9;BF5E;1108 116A 11A9; +BF5F;BF5F;1108 116A 11AA;BF5F;1108 116A 11AA; +BF60;BF60;1108 116A 11AB;BF60;1108 116A 11AB; +BF61;BF61;1108 116A 11AC;BF61;1108 116A 11AC; +BF62;BF62;1108 116A 11AD;BF62;1108 116A 11AD; +BF63;BF63;1108 116A 11AE;BF63;1108 116A 11AE; +BF64;BF64;1108 116A 11AF;BF64;1108 116A 11AF; +BF65;BF65;1108 116A 11B0;BF65;1108 116A 11B0; +BF66;BF66;1108 116A 11B1;BF66;1108 116A 11B1; +BF67;BF67;1108 116A 11B2;BF67;1108 116A 11B2; +BF68;BF68;1108 116A 11B3;BF68;1108 116A 11B3; +BF69;BF69;1108 116A 11B4;BF69;1108 116A 11B4; +BF6A;BF6A;1108 116A 11B5;BF6A;1108 116A 11B5; +BF6B;BF6B;1108 116A 11B6;BF6B;1108 116A 11B6; +BF6C;BF6C;1108 116A 11B7;BF6C;1108 116A 11B7; +BF6D;BF6D;1108 116A 11B8;BF6D;1108 116A 11B8; +BF6E;BF6E;1108 116A 11B9;BF6E;1108 116A 11B9; +BF6F;BF6F;1108 116A 11BA;BF6F;1108 116A 11BA; +BF70;BF70;1108 116A 11BB;BF70;1108 116A 11BB; +BF71;BF71;1108 116A 11BC;BF71;1108 116A 11BC; +BF72;BF72;1108 116A 11BD;BF72;1108 116A 11BD; +BF73;BF73;1108 116A 11BE;BF73;1108 116A 11BE; +BF74;BF74;1108 116A 11BF;BF74;1108 116A 11BF; +BF75;BF75;1108 116A 11C0;BF75;1108 116A 11C0; +BF76;BF76;1108 116A 11C1;BF76;1108 116A 11C1; +BF77;BF77;1108 116A 11C2;BF77;1108 116A 11C2; +BF78;BF78;1108 116B;BF78;1108 116B; +BF79;BF79;1108 116B 11A8;BF79;1108 116B 11A8; +BF7A;BF7A;1108 116B 11A9;BF7A;1108 116B 11A9; +BF7B;BF7B;1108 116B 11AA;BF7B;1108 116B 11AA; +BF7C;BF7C;1108 116B 11AB;BF7C;1108 116B 11AB; +BF7D;BF7D;1108 116B 11AC;BF7D;1108 116B 11AC; +BF7E;BF7E;1108 116B 11AD;BF7E;1108 116B 11AD; +BF7F;BF7F;1108 116B 11AE;BF7F;1108 116B 11AE; +BF80;BF80;1108 116B 11AF;BF80;1108 116B 11AF; +BF81;BF81;1108 116B 11B0;BF81;1108 116B 11B0; +BF82;BF82;1108 116B 11B1;BF82;1108 116B 11B1; +BF83;BF83;1108 116B 11B2;BF83;1108 116B 11B2; +BF84;BF84;1108 116B 11B3;BF84;1108 116B 11B3; +BF85;BF85;1108 116B 11B4;BF85;1108 116B 11B4; +BF86;BF86;1108 116B 11B5;BF86;1108 116B 11B5; +BF87;BF87;1108 116B 11B6;BF87;1108 116B 11B6; +BF88;BF88;1108 116B 11B7;BF88;1108 116B 11B7; +BF89;BF89;1108 116B 11B8;BF89;1108 116B 11B8; +BF8A;BF8A;1108 116B 11B9;BF8A;1108 116B 11B9; +BF8B;BF8B;1108 116B 11BA;BF8B;1108 116B 11BA; +BF8C;BF8C;1108 116B 11BB;BF8C;1108 116B 11BB; +BF8D;BF8D;1108 116B 11BC;BF8D;1108 116B 11BC; +BF8E;BF8E;1108 116B 11BD;BF8E;1108 116B 11BD; +BF8F;BF8F;1108 116B 11BE;BF8F;1108 116B 11BE; +BF90;BF90;1108 116B 11BF;BF90;1108 116B 11BF; +BF91;BF91;1108 116B 11C0;BF91;1108 116B 11C0; +BF92;BF92;1108 116B 11C1;BF92;1108 116B 11C1; +BF93;BF93;1108 116B 11C2;BF93;1108 116B 11C2; +BF94;BF94;1108 116C;BF94;1108 116C; +BF95;BF95;1108 116C 11A8;BF95;1108 116C 11A8; +BF96;BF96;1108 116C 11A9;BF96;1108 116C 11A9; +BF97;BF97;1108 116C 11AA;BF97;1108 116C 11AA; +BF98;BF98;1108 116C 11AB;BF98;1108 116C 11AB; +BF99;BF99;1108 116C 11AC;BF99;1108 116C 11AC; +BF9A;BF9A;1108 116C 11AD;BF9A;1108 116C 11AD; +BF9B;BF9B;1108 116C 11AE;BF9B;1108 116C 11AE; +BF9C;BF9C;1108 116C 11AF;BF9C;1108 116C 11AF; +BF9D;BF9D;1108 116C 11B0;BF9D;1108 116C 11B0; +BF9E;BF9E;1108 116C 11B1;BF9E;1108 116C 11B1; +BF9F;BF9F;1108 116C 11B2;BF9F;1108 116C 11B2; +BFA0;BFA0;1108 116C 11B3;BFA0;1108 116C 11B3; +BFA1;BFA1;1108 116C 11B4;BFA1;1108 116C 11B4; +BFA2;BFA2;1108 116C 11B5;BFA2;1108 116C 11B5; +BFA3;BFA3;1108 116C 11B6;BFA3;1108 116C 11B6; +BFA4;BFA4;1108 116C 11B7;BFA4;1108 116C 11B7; +BFA5;BFA5;1108 116C 11B8;BFA5;1108 116C 11B8; +BFA6;BFA6;1108 116C 11B9;BFA6;1108 116C 11B9; +BFA7;BFA7;1108 116C 11BA;BFA7;1108 116C 11BA; +BFA8;BFA8;1108 116C 11BB;BFA8;1108 116C 11BB; +BFA9;BFA9;1108 116C 11BC;BFA9;1108 116C 11BC; +BFAA;BFAA;1108 116C 11BD;BFAA;1108 116C 11BD; +BFAB;BFAB;1108 116C 11BE;BFAB;1108 116C 11BE; +BFAC;BFAC;1108 116C 11BF;BFAC;1108 116C 11BF; +BFAD;BFAD;1108 116C 11C0;BFAD;1108 116C 11C0; +BFAE;BFAE;1108 116C 11C1;BFAE;1108 116C 11C1; +BFAF;BFAF;1108 116C 11C2;BFAF;1108 116C 11C2; +BFB0;BFB0;1108 116D;BFB0;1108 116D; +BFB1;BFB1;1108 116D 11A8;BFB1;1108 116D 11A8; +BFB2;BFB2;1108 116D 11A9;BFB2;1108 116D 11A9; +BFB3;BFB3;1108 116D 11AA;BFB3;1108 116D 11AA; +BFB4;BFB4;1108 116D 11AB;BFB4;1108 116D 11AB; +BFB5;BFB5;1108 116D 11AC;BFB5;1108 116D 11AC; +BFB6;BFB6;1108 116D 11AD;BFB6;1108 116D 11AD; +BFB7;BFB7;1108 116D 11AE;BFB7;1108 116D 11AE; +BFB8;BFB8;1108 116D 11AF;BFB8;1108 116D 11AF; +BFB9;BFB9;1108 116D 11B0;BFB9;1108 116D 11B0; +BFBA;BFBA;1108 116D 11B1;BFBA;1108 116D 11B1; +BFBB;BFBB;1108 116D 11B2;BFBB;1108 116D 11B2; +BFBC;BFBC;1108 116D 11B3;BFBC;1108 116D 11B3; +BFBD;BFBD;1108 116D 11B4;BFBD;1108 116D 11B4; +BFBE;BFBE;1108 116D 11B5;BFBE;1108 116D 11B5; +BFBF;BFBF;1108 116D 11B6;BFBF;1108 116D 11B6; +BFC0;BFC0;1108 116D 11B7;BFC0;1108 116D 11B7; +BFC1;BFC1;1108 116D 11B8;BFC1;1108 116D 11B8; +BFC2;BFC2;1108 116D 11B9;BFC2;1108 116D 11B9; +BFC3;BFC3;1108 116D 11BA;BFC3;1108 116D 11BA; +BFC4;BFC4;1108 116D 11BB;BFC4;1108 116D 11BB; +BFC5;BFC5;1108 116D 11BC;BFC5;1108 116D 11BC; +BFC6;BFC6;1108 116D 11BD;BFC6;1108 116D 11BD; +BFC7;BFC7;1108 116D 11BE;BFC7;1108 116D 11BE; +BFC8;BFC8;1108 116D 11BF;BFC8;1108 116D 11BF; +BFC9;BFC9;1108 116D 11C0;BFC9;1108 116D 11C0; +BFCA;BFCA;1108 116D 11C1;BFCA;1108 116D 11C1; +BFCB;BFCB;1108 116D 11C2;BFCB;1108 116D 11C2; +BFCC;BFCC;1108 116E;BFCC;1108 116E; +BFCD;BFCD;1108 116E 11A8;BFCD;1108 116E 11A8; +BFCE;BFCE;1108 116E 11A9;BFCE;1108 116E 11A9; +BFCF;BFCF;1108 116E 11AA;BFCF;1108 116E 11AA; +BFD0;BFD0;1108 116E 11AB;BFD0;1108 116E 11AB; +BFD1;BFD1;1108 116E 11AC;BFD1;1108 116E 11AC; +BFD2;BFD2;1108 116E 11AD;BFD2;1108 116E 11AD; +BFD3;BFD3;1108 116E 11AE;BFD3;1108 116E 11AE; +BFD4;BFD4;1108 116E 11AF;BFD4;1108 116E 11AF; +BFD5;BFD5;1108 116E 11B0;BFD5;1108 116E 11B0; +BFD6;BFD6;1108 116E 11B1;BFD6;1108 116E 11B1; +BFD7;BFD7;1108 116E 11B2;BFD7;1108 116E 11B2; +BFD8;BFD8;1108 116E 11B3;BFD8;1108 116E 11B3; +BFD9;BFD9;1108 116E 11B4;BFD9;1108 116E 11B4; +BFDA;BFDA;1108 116E 11B5;BFDA;1108 116E 11B5; +BFDB;BFDB;1108 116E 11B6;BFDB;1108 116E 11B6; +BFDC;BFDC;1108 116E 11B7;BFDC;1108 116E 11B7; +BFDD;BFDD;1108 116E 11B8;BFDD;1108 116E 11B8; +BFDE;BFDE;1108 116E 11B9;BFDE;1108 116E 11B9; +BFDF;BFDF;1108 116E 11BA;BFDF;1108 116E 11BA; +BFE0;BFE0;1108 116E 11BB;BFE0;1108 116E 11BB; +BFE1;BFE1;1108 116E 11BC;BFE1;1108 116E 11BC; +BFE2;BFE2;1108 116E 11BD;BFE2;1108 116E 11BD; +BFE3;BFE3;1108 116E 11BE;BFE3;1108 116E 11BE; +BFE4;BFE4;1108 116E 11BF;BFE4;1108 116E 11BF; +BFE5;BFE5;1108 116E 11C0;BFE5;1108 116E 11C0; +BFE6;BFE6;1108 116E 11C1;BFE6;1108 116E 11C1; +BFE7;BFE7;1108 116E 11C2;BFE7;1108 116E 11C2; +BFE8;BFE8;1108 116F;BFE8;1108 116F; +BFE9;BFE9;1108 116F 11A8;BFE9;1108 116F 11A8; +BFEA;BFEA;1108 116F 11A9;BFEA;1108 116F 11A9; +BFEB;BFEB;1108 116F 11AA;BFEB;1108 116F 11AA; +BFEC;BFEC;1108 116F 11AB;BFEC;1108 116F 11AB; +BFED;BFED;1108 116F 11AC;BFED;1108 116F 11AC; +BFEE;BFEE;1108 116F 11AD;BFEE;1108 116F 11AD; +BFEF;BFEF;1108 116F 11AE;BFEF;1108 116F 11AE; +BFF0;BFF0;1108 116F 11AF;BFF0;1108 116F 11AF; +BFF1;BFF1;1108 116F 11B0;BFF1;1108 116F 11B0; +BFF2;BFF2;1108 116F 11B1;BFF2;1108 116F 11B1; +BFF3;BFF3;1108 116F 11B2;BFF3;1108 116F 11B2; +BFF4;BFF4;1108 116F 11B3;BFF4;1108 116F 11B3; +BFF5;BFF5;1108 116F 11B4;BFF5;1108 116F 11B4; +BFF6;BFF6;1108 116F 11B5;BFF6;1108 116F 11B5; +BFF7;BFF7;1108 116F 11B6;BFF7;1108 116F 11B6; +BFF8;BFF8;1108 116F 11B7;BFF8;1108 116F 11B7; +BFF9;BFF9;1108 116F 11B8;BFF9;1108 116F 11B8; +BFFA;BFFA;1108 116F 11B9;BFFA;1108 116F 11B9; +BFFB;BFFB;1108 116F 11BA;BFFB;1108 116F 11BA; +BFFC;BFFC;1108 116F 11BB;BFFC;1108 116F 11BB; +BFFD;BFFD;1108 116F 11BC;BFFD;1108 116F 11BC; +BFFE;BFFE;1108 116F 11BD;BFFE;1108 116F 11BD; +BFFF;BFFF;1108 116F 11BE;BFFF;1108 116F 11BE; +C000;C000;1108 116F 11BF;C000;1108 116F 11BF; +C001;C001;1108 116F 11C0;C001;1108 116F 11C0; +C002;C002;1108 116F 11C1;C002;1108 116F 11C1; +C003;C003;1108 116F 11C2;C003;1108 116F 11C2; +C004;C004;1108 1170;C004;1108 1170; +C005;C005;1108 1170 11A8;C005;1108 1170 11A8; +C006;C006;1108 1170 11A9;C006;1108 1170 11A9; +C007;C007;1108 1170 11AA;C007;1108 1170 11AA; +C008;C008;1108 1170 11AB;C008;1108 1170 11AB; +C009;C009;1108 1170 11AC;C009;1108 1170 11AC; +C00A;C00A;1108 1170 11AD;C00A;1108 1170 11AD; +C00B;C00B;1108 1170 11AE;C00B;1108 1170 11AE; +C00C;C00C;1108 1170 11AF;C00C;1108 1170 11AF; +C00D;C00D;1108 1170 11B0;C00D;1108 1170 11B0; +C00E;C00E;1108 1170 11B1;C00E;1108 1170 11B1; +C00F;C00F;1108 1170 11B2;C00F;1108 1170 11B2; +C010;C010;1108 1170 11B3;C010;1108 1170 11B3; +C011;C011;1108 1170 11B4;C011;1108 1170 11B4; +C012;C012;1108 1170 11B5;C012;1108 1170 11B5; +C013;C013;1108 1170 11B6;C013;1108 1170 11B6; +C014;C014;1108 1170 11B7;C014;1108 1170 11B7; +C015;C015;1108 1170 11B8;C015;1108 1170 11B8; +C016;C016;1108 1170 11B9;C016;1108 1170 11B9; +C017;C017;1108 1170 11BA;C017;1108 1170 11BA; +C018;C018;1108 1170 11BB;C018;1108 1170 11BB; +C019;C019;1108 1170 11BC;C019;1108 1170 11BC; +C01A;C01A;1108 1170 11BD;C01A;1108 1170 11BD; +C01B;C01B;1108 1170 11BE;C01B;1108 1170 11BE; +C01C;C01C;1108 1170 11BF;C01C;1108 1170 11BF; +C01D;C01D;1108 1170 11C0;C01D;1108 1170 11C0; +C01E;C01E;1108 1170 11C1;C01E;1108 1170 11C1; +C01F;C01F;1108 1170 11C2;C01F;1108 1170 11C2; +C020;C020;1108 1171;C020;1108 1171; +C021;C021;1108 1171 11A8;C021;1108 1171 11A8; +C022;C022;1108 1171 11A9;C022;1108 1171 11A9; +C023;C023;1108 1171 11AA;C023;1108 1171 11AA; +C024;C024;1108 1171 11AB;C024;1108 1171 11AB; +C025;C025;1108 1171 11AC;C025;1108 1171 11AC; +C026;C026;1108 1171 11AD;C026;1108 1171 11AD; +C027;C027;1108 1171 11AE;C027;1108 1171 11AE; +C028;C028;1108 1171 11AF;C028;1108 1171 11AF; +C029;C029;1108 1171 11B0;C029;1108 1171 11B0; +C02A;C02A;1108 1171 11B1;C02A;1108 1171 11B1; +C02B;C02B;1108 1171 11B2;C02B;1108 1171 11B2; +C02C;C02C;1108 1171 11B3;C02C;1108 1171 11B3; +C02D;C02D;1108 1171 11B4;C02D;1108 1171 11B4; +C02E;C02E;1108 1171 11B5;C02E;1108 1171 11B5; +C02F;C02F;1108 1171 11B6;C02F;1108 1171 11B6; +C030;C030;1108 1171 11B7;C030;1108 1171 11B7; +C031;C031;1108 1171 11B8;C031;1108 1171 11B8; +C032;C032;1108 1171 11B9;C032;1108 1171 11B9; +C033;C033;1108 1171 11BA;C033;1108 1171 11BA; +C034;C034;1108 1171 11BB;C034;1108 1171 11BB; +C035;C035;1108 1171 11BC;C035;1108 1171 11BC; +C036;C036;1108 1171 11BD;C036;1108 1171 11BD; +C037;C037;1108 1171 11BE;C037;1108 1171 11BE; +C038;C038;1108 1171 11BF;C038;1108 1171 11BF; +C039;C039;1108 1171 11C0;C039;1108 1171 11C0; +C03A;C03A;1108 1171 11C1;C03A;1108 1171 11C1; +C03B;C03B;1108 1171 11C2;C03B;1108 1171 11C2; +C03C;C03C;1108 1172;C03C;1108 1172; +C03D;C03D;1108 1172 11A8;C03D;1108 1172 11A8; +C03E;C03E;1108 1172 11A9;C03E;1108 1172 11A9; +C03F;C03F;1108 1172 11AA;C03F;1108 1172 11AA; +C040;C040;1108 1172 11AB;C040;1108 1172 11AB; +C041;C041;1108 1172 11AC;C041;1108 1172 11AC; +C042;C042;1108 1172 11AD;C042;1108 1172 11AD; +C043;C043;1108 1172 11AE;C043;1108 1172 11AE; +C044;C044;1108 1172 11AF;C044;1108 1172 11AF; +C045;C045;1108 1172 11B0;C045;1108 1172 11B0; +C046;C046;1108 1172 11B1;C046;1108 1172 11B1; +C047;C047;1108 1172 11B2;C047;1108 1172 11B2; +C048;C048;1108 1172 11B3;C048;1108 1172 11B3; +C049;C049;1108 1172 11B4;C049;1108 1172 11B4; +C04A;C04A;1108 1172 11B5;C04A;1108 1172 11B5; +C04B;C04B;1108 1172 11B6;C04B;1108 1172 11B6; +C04C;C04C;1108 1172 11B7;C04C;1108 1172 11B7; +C04D;C04D;1108 1172 11B8;C04D;1108 1172 11B8; +C04E;C04E;1108 1172 11B9;C04E;1108 1172 11B9; +C04F;C04F;1108 1172 11BA;C04F;1108 1172 11BA; +C050;C050;1108 1172 11BB;C050;1108 1172 11BB; +C051;C051;1108 1172 11BC;C051;1108 1172 11BC; +C052;C052;1108 1172 11BD;C052;1108 1172 11BD; +C053;C053;1108 1172 11BE;C053;1108 1172 11BE; +C054;C054;1108 1172 11BF;C054;1108 1172 11BF; +C055;C055;1108 1172 11C0;C055;1108 1172 11C0; +C056;C056;1108 1172 11C1;C056;1108 1172 11C1; +C057;C057;1108 1172 11C2;C057;1108 1172 11C2; +C058;C058;1108 1173;C058;1108 1173; +C059;C059;1108 1173 11A8;C059;1108 1173 11A8; +C05A;C05A;1108 1173 11A9;C05A;1108 1173 11A9; +C05B;C05B;1108 1173 11AA;C05B;1108 1173 11AA; +C05C;C05C;1108 1173 11AB;C05C;1108 1173 11AB; +C05D;C05D;1108 1173 11AC;C05D;1108 1173 11AC; +C05E;C05E;1108 1173 11AD;C05E;1108 1173 11AD; +C05F;C05F;1108 1173 11AE;C05F;1108 1173 11AE; +C060;C060;1108 1173 11AF;C060;1108 1173 11AF; +C061;C061;1108 1173 11B0;C061;1108 1173 11B0; +C062;C062;1108 1173 11B1;C062;1108 1173 11B1; +C063;C063;1108 1173 11B2;C063;1108 1173 11B2; +C064;C064;1108 1173 11B3;C064;1108 1173 11B3; +C065;C065;1108 1173 11B4;C065;1108 1173 11B4; +C066;C066;1108 1173 11B5;C066;1108 1173 11B5; +C067;C067;1108 1173 11B6;C067;1108 1173 11B6; +C068;C068;1108 1173 11B7;C068;1108 1173 11B7; +C069;C069;1108 1173 11B8;C069;1108 1173 11B8; +C06A;C06A;1108 1173 11B9;C06A;1108 1173 11B9; +C06B;C06B;1108 1173 11BA;C06B;1108 1173 11BA; +C06C;C06C;1108 1173 11BB;C06C;1108 1173 11BB; +C06D;C06D;1108 1173 11BC;C06D;1108 1173 11BC; +C06E;C06E;1108 1173 11BD;C06E;1108 1173 11BD; +C06F;C06F;1108 1173 11BE;C06F;1108 1173 11BE; +C070;C070;1108 1173 11BF;C070;1108 1173 11BF; +C071;C071;1108 1173 11C0;C071;1108 1173 11C0; +C072;C072;1108 1173 11C1;C072;1108 1173 11C1; +C073;C073;1108 1173 11C2;C073;1108 1173 11C2; +C074;C074;1108 1174;C074;1108 1174; +C075;C075;1108 1174 11A8;C075;1108 1174 11A8; +C076;C076;1108 1174 11A9;C076;1108 1174 11A9; +C077;C077;1108 1174 11AA;C077;1108 1174 11AA; +C078;C078;1108 1174 11AB;C078;1108 1174 11AB; +C079;C079;1108 1174 11AC;C079;1108 1174 11AC; +C07A;C07A;1108 1174 11AD;C07A;1108 1174 11AD; +C07B;C07B;1108 1174 11AE;C07B;1108 1174 11AE; +C07C;C07C;1108 1174 11AF;C07C;1108 1174 11AF; +C07D;C07D;1108 1174 11B0;C07D;1108 1174 11B0; +C07E;C07E;1108 1174 11B1;C07E;1108 1174 11B1; +C07F;C07F;1108 1174 11B2;C07F;1108 1174 11B2; +C080;C080;1108 1174 11B3;C080;1108 1174 11B3; +C081;C081;1108 1174 11B4;C081;1108 1174 11B4; +C082;C082;1108 1174 11B5;C082;1108 1174 11B5; +C083;C083;1108 1174 11B6;C083;1108 1174 11B6; +C084;C084;1108 1174 11B7;C084;1108 1174 11B7; +C085;C085;1108 1174 11B8;C085;1108 1174 11B8; +C086;C086;1108 1174 11B9;C086;1108 1174 11B9; +C087;C087;1108 1174 11BA;C087;1108 1174 11BA; +C088;C088;1108 1174 11BB;C088;1108 1174 11BB; +C089;C089;1108 1174 11BC;C089;1108 1174 11BC; +C08A;C08A;1108 1174 11BD;C08A;1108 1174 11BD; +C08B;C08B;1108 1174 11BE;C08B;1108 1174 11BE; +C08C;C08C;1108 1174 11BF;C08C;1108 1174 11BF; +C08D;C08D;1108 1174 11C0;C08D;1108 1174 11C0; +C08E;C08E;1108 1174 11C1;C08E;1108 1174 11C1; +C08F;C08F;1108 1174 11C2;C08F;1108 1174 11C2; +C090;C090;1108 1175;C090;1108 1175; +C091;C091;1108 1175 11A8;C091;1108 1175 11A8; +C092;C092;1108 1175 11A9;C092;1108 1175 11A9; +C093;C093;1108 1175 11AA;C093;1108 1175 11AA; +C094;C094;1108 1175 11AB;C094;1108 1175 11AB; +C095;C095;1108 1175 11AC;C095;1108 1175 11AC; +C096;C096;1108 1175 11AD;C096;1108 1175 11AD; +C097;C097;1108 1175 11AE;C097;1108 1175 11AE; +C098;C098;1108 1175 11AF;C098;1108 1175 11AF; +C099;C099;1108 1175 11B0;C099;1108 1175 11B0; +C09A;C09A;1108 1175 11B1;C09A;1108 1175 11B1; +C09B;C09B;1108 1175 11B2;C09B;1108 1175 11B2; +C09C;C09C;1108 1175 11B3;C09C;1108 1175 11B3; +C09D;C09D;1108 1175 11B4;C09D;1108 1175 11B4; +C09E;C09E;1108 1175 11B5;C09E;1108 1175 11B5; +C09F;C09F;1108 1175 11B6;C09F;1108 1175 11B6; +C0A0;C0A0;1108 1175 11B7;C0A0;1108 1175 11B7; +C0A1;C0A1;1108 1175 11B8;C0A1;1108 1175 11B8; +C0A2;C0A2;1108 1175 11B9;C0A2;1108 1175 11B9; +C0A3;C0A3;1108 1175 11BA;C0A3;1108 1175 11BA; +C0A4;C0A4;1108 1175 11BB;C0A4;1108 1175 11BB; +C0A5;C0A5;1108 1175 11BC;C0A5;1108 1175 11BC; +C0A6;C0A6;1108 1175 11BD;C0A6;1108 1175 11BD; +C0A7;C0A7;1108 1175 11BE;C0A7;1108 1175 11BE; +C0A8;C0A8;1108 1175 11BF;C0A8;1108 1175 11BF; +C0A9;C0A9;1108 1175 11C0;C0A9;1108 1175 11C0; +C0AA;C0AA;1108 1175 11C1;C0AA;1108 1175 11C1; +C0AB;C0AB;1108 1175 11C2;C0AB;1108 1175 11C2; +C0AC;C0AC;1109 1161;C0AC;1109 1161; +C0AD;C0AD;1109 1161 11A8;C0AD;1109 1161 11A8; +C0AE;C0AE;1109 1161 11A9;C0AE;1109 1161 11A9; +C0AF;C0AF;1109 1161 11AA;C0AF;1109 1161 11AA; +C0B0;C0B0;1109 1161 11AB;C0B0;1109 1161 11AB; +C0B1;C0B1;1109 1161 11AC;C0B1;1109 1161 11AC; +C0B2;C0B2;1109 1161 11AD;C0B2;1109 1161 11AD; +C0B3;C0B3;1109 1161 11AE;C0B3;1109 1161 11AE; +C0B4;C0B4;1109 1161 11AF;C0B4;1109 1161 11AF; +C0B5;C0B5;1109 1161 11B0;C0B5;1109 1161 11B0; +C0B6;C0B6;1109 1161 11B1;C0B6;1109 1161 11B1; +C0B7;C0B7;1109 1161 11B2;C0B7;1109 1161 11B2; +C0B8;C0B8;1109 1161 11B3;C0B8;1109 1161 11B3; +C0B9;C0B9;1109 1161 11B4;C0B9;1109 1161 11B4; +C0BA;C0BA;1109 1161 11B5;C0BA;1109 1161 11B5; +C0BB;C0BB;1109 1161 11B6;C0BB;1109 1161 11B6; +C0BC;C0BC;1109 1161 11B7;C0BC;1109 1161 11B7; +C0BD;C0BD;1109 1161 11B8;C0BD;1109 1161 11B8; +C0BE;C0BE;1109 1161 11B9;C0BE;1109 1161 11B9; +C0BF;C0BF;1109 1161 11BA;C0BF;1109 1161 11BA; +C0C0;C0C0;1109 1161 11BB;C0C0;1109 1161 11BB; +C0C1;C0C1;1109 1161 11BC;C0C1;1109 1161 11BC; +C0C2;C0C2;1109 1161 11BD;C0C2;1109 1161 11BD; +C0C3;C0C3;1109 1161 11BE;C0C3;1109 1161 11BE; +C0C4;C0C4;1109 1161 11BF;C0C4;1109 1161 11BF; +C0C5;C0C5;1109 1161 11C0;C0C5;1109 1161 11C0; +C0C6;C0C6;1109 1161 11C1;C0C6;1109 1161 11C1; +C0C7;C0C7;1109 1161 11C2;C0C7;1109 1161 11C2; +C0C8;C0C8;1109 1162;C0C8;1109 1162; +C0C9;C0C9;1109 1162 11A8;C0C9;1109 1162 11A8; +C0CA;C0CA;1109 1162 11A9;C0CA;1109 1162 11A9; +C0CB;C0CB;1109 1162 11AA;C0CB;1109 1162 11AA; +C0CC;C0CC;1109 1162 11AB;C0CC;1109 1162 11AB; +C0CD;C0CD;1109 1162 11AC;C0CD;1109 1162 11AC; +C0CE;C0CE;1109 1162 11AD;C0CE;1109 1162 11AD; +C0CF;C0CF;1109 1162 11AE;C0CF;1109 1162 11AE; +C0D0;C0D0;1109 1162 11AF;C0D0;1109 1162 11AF; +C0D1;C0D1;1109 1162 11B0;C0D1;1109 1162 11B0; +C0D2;C0D2;1109 1162 11B1;C0D2;1109 1162 11B1; +C0D3;C0D3;1109 1162 11B2;C0D3;1109 1162 11B2; +C0D4;C0D4;1109 1162 11B3;C0D4;1109 1162 11B3; +C0D5;C0D5;1109 1162 11B4;C0D5;1109 1162 11B4; +C0D6;C0D6;1109 1162 11B5;C0D6;1109 1162 11B5; +C0D7;C0D7;1109 1162 11B6;C0D7;1109 1162 11B6; +C0D8;C0D8;1109 1162 11B7;C0D8;1109 1162 11B7; +C0D9;C0D9;1109 1162 11B8;C0D9;1109 1162 11B8; +C0DA;C0DA;1109 1162 11B9;C0DA;1109 1162 11B9; +C0DB;C0DB;1109 1162 11BA;C0DB;1109 1162 11BA; +C0DC;C0DC;1109 1162 11BB;C0DC;1109 1162 11BB; +C0DD;C0DD;1109 1162 11BC;C0DD;1109 1162 11BC; +C0DE;C0DE;1109 1162 11BD;C0DE;1109 1162 11BD; +C0DF;C0DF;1109 1162 11BE;C0DF;1109 1162 11BE; +C0E0;C0E0;1109 1162 11BF;C0E0;1109 1162 11BF; +C0E1;C0E1;1109 1162 11C0;C0E1;1109 1162 11C0; +C0E2;C0E2;1109 1162 11C1;C0E2;1109 1162 11C1; +C0E3;C0E3;1109 1162 11C2;C0E3;1109 1162 11C2; +C0E4;C0E4;1109 1163;C0E4;1109 1163; +C0E5;C0E5;1109 1163 11A8;C0E5;1109 1163 11A8; +C0E6;C0E6;1109 1163 11A9;C0E6;1109 1163 11A9; +C0E7;C0E7;1109 1163 11AA;C0E7;1109 1163 11AA; +C0E8;C0E8;1109 1163 11AB;C0E8;1109 1163 11AB; +C0E9;C0E9;1109 1163 11AC;C0E9;1109 1163 11AC; +C0EA;C0EA;1109 1163 11AD;C0EA;1109 1163 11AD; +C0EB;C0EB;1109 1163 11AE;C0EB;1109 1163 11AE; +C0EC;C0EC;1109 1163 11AF;C0EC;1109 1163 11AF; +C0ED;C0ED;1109 1163 11B0;C0ED;1109 1163 11B0; +C0EE;C0EE;1109 1163 11B1;C0EE;1109 1163 11B1; +C0EF;C0EF;1109 1163 11B2;C0EF;1109 1163 11B2; +C0F0;C0F0;1109 1163 11B3;C0F0;1109 1163 11B3; +C0F1;C0F1;1109 1163 11B4;C0F1;1109 1163 11B4; +C0F2;C0F2;1109 1163 11B5;C0F2;1109 1163 11B5; +C0F3;C0F3;1109 1163 11B6;C0F3;1109 1163 11B6; +C0F4;C0F4;1109 1163 11B7;C0F4;1109 1163 11B7; +C0F5;C0F5;1109 1163 11B8;C0F5;1109 1163 11B8; +C0F6;C0F6;1109 1163 11B9;C0F6;1109 1163 11B9; +C0F7;C0F7;1109 1163 11BA;C0F7;1109 1163 11BA; +C0F8;C0F8;1109 1163 11BB;C0F8;1109 1163 11BB; +C0F9;C0F9;1109 1163 11BC;C0F9;1109 1163 11BC; +C0FA;C0FA;1109 1163 11BD;C0FA;1109 1163 11BD; +C0FB;C0FB;1109 1163 11BE;C0FB;1109 1163 11BE; +C0FC;C0FC;1109 1163 11BF;C0FC;1109 1163 11BF; +C0FD;C0FD;1109 1163 11C0;C0FD;1109 1163 11C0; +C0FE;C0FE;1109 1163 11C1;C0FE;1109 1163 11C1; +C0FF;C0FF;1109 1163 11C2;C0FF;1109 1163 11C2; +C100;C100;1109 1164;C100;1109 1164; +C101;C101;1109 1164 11A8;C101;1109 1164 11A8; +C102;C102;1109 1164 11A9;C102;1109 1164 11A9; +C103;C103;1109 1164 11AA;C103;1109 1164 11AA; +C104;C104;1109 1164 11AB;C104;1109 1164 11AB; +C105;C105;1109 1164 11AC;C105;1109 1164 11AC; +C106;C106;1109 1164 11AD;C106;1109 1164 11AD; +C107;C107;1109 1164 11AE;C107;1109 1164 11AE; +C108;C108;1109 1164 11AF;C108;1109 1164 11AF; +C109;C109;1109 1164 11B0;C109;1109 1164 11B0; +C10A;C10A;1109 1164 11B1;C10A;1109 1164 11B1; +C10B;C10B;1109 1164 11B2;C10B;1109 1164 11B2; +C10C;C10C;1109 1164 11B3;C10C;1109 1164 11B3; +C10D;C10D;1109 1164 11B4;C10D;1109 1164 11B4; +C10E;C10E;1109 1164 11B5;C10E;1109 1164 11B5; +C10F;C10F;1109 1164 11B6;C10F;1109 1164 11B6; +C110;C110;1109 1164 11B7;C110;1109 1164 11B7; +C111;C111;1109 1164 11B8;C111;1109 1164 11B8; +C112;C112;1109 1164 11B9;C112;1109 1164 11B9; +C113;C113;1109 1164 11BA;C113;1109 1164 11BA; +C114;C114;1109 1164 11BB;C114;1109 1164 11BB; +C115;C115;1109 1164 11BC;C115;1109 1164 11BC; +C116;C116;1109 1164 11BD;C116;1109 1164 11BD; +C117;C117;1109 1164 11BE;C117;1109 1164 11BE; +C118;C118;1109 1164 11BF;C118;1109 1164 11BF; +C119;C119;1109 1164 11C0;C119;1109 1164 11C0; +C11A;C11A;1109 1164 11C1;C11A;1109 1164 11C1; +C11B;C11B;1109 1164 11C2;C11B;1109 1164 11C2; +C11C;C11C;1109 1165;C11C;1109 1165; +C11D;C11D;1109 1165 11A8;C11D;1109 1165 11A8; +C11E;C11E;1109 1165 11A9;C11E;1109 1165 11A9; +C11F;C11F;1109 1165 11AA;C11F;1109 1165 11AA; +C120;C120;1109 1165 11AB;C120;1109 1165 11AB; +C121;C121;1109 1165 11AC;C121;1109 1165 11AC; +C122;C122;1109 1165 11AD;C122;1109 1165 11AD; +C123;C123;1109 1165 11AE;C123;1109 1165 11AE; +C124;C124;1109 1165 11AF;C124;1109 1165 11AF; +C125;C125;1109 1165 11B0;C125;1109 1165 11B0; +C126;C126;1109 1165 11B1;C126;1109 1165 11B1; +C127;C127;1109 1165 11B2;C127;1109 1165 11B2; +C128;C128;1109 1165 11B3;C128;1109 1165 11B3; +C129;C129;1109 1165 11B4;C129;1109 1165 11B4; +C12A;C12A;1109 1165 11B5;C12A;1109 1165 11B5; +C12B;C12B;1109 1165 11B6;C12B;1109 1165 11B6; +C12C;C12C;1109 1165 11B7;C12C;1109 1165 11B7; +C12D;C12D;1109 1165 11B8;C12D;1109 1165 11B8; +C12E;C12E;1109 1165 11B9;C12E;1109 1165 11B9; +C12F;C12F;1109 1165 11BA;C12F;1109 1165 11BA; +C130;C130;1109 1165 11BB;C130;1109 1165 11BB; +C131;C131;1109 1165 11BC;C131;1109 1165 11BC; +C132;C132;1109 1165 11BD;C132;1109 1165 11BD; +C133;C133;1109 1165 11BE;C133;1109 1165 11BE; +C134;C134;1109 1165 11BF;C134;1109 1165 11BF; +C135;C135;1109 1165 11C0;C135;1109 1165 11C0; +C136;C136;1109 1165 11C1;C136;1109 1165 11C1; +C137;C137;1109 1165 11C2;C137;1109 1165 11C2; +C138;C138;1109 1166;C138;1109 1166; +C139;C139;1109 1166 11A8;C139;1109 1166 11A8; +C13A;C13A;1109 1166 11A9;C13A;1109 1166 11A9; +C13B;C13B;1109 1166 11AA;C13B;1109 1166 11AA; +C13C;C13C;1109 1166 11AB;C13C;1109 1166 11AB; +C13D;C13D;1109 1166 11AC;C13D;1109 1166 11AC; +C13E;C13E;1109 1166 11AD;C13E;1109 1166 11AD; +C13F;C13F;1109 1166 11AE;C13F;1109 1166 11AE; +C140;C140;1109 1166 11AF;C140;1109 1166 11AF; +C141;C141;1109 1166 11B0;C141;1109 1166 11B0; +C142;C142;1109 1166 11B1;C142;1109 1166 11B1; +C143;C143;1109 1166 11B2;C143;1109 1166 11B2; +C144;C144;1109 1166 11B3;C144;1109 1166 11B3; +C145;C145;1109 1166 11B4;C145;1109 1166 11B4; +C146;C146;1109 1166 11B5;C146;1109 1166 11B5; +C147;C147;1109 1166 11B6;C147;1109 1166 11B6; +C148;C148;1109 1166 11B7;C148;1109 1166 11B7; +C149;C149;1109 1166 11B8;C149;1109 1166 11B8; +C14A;C14A;1109 1166 11B9;C14A;1109 1166 11B9; +C14B;C14B;1109 1166 11BA;C14B;1109 1166 11BA; +C14C;C14C;1109 1166 11BB;C14C;1109 1166 11BB; +C14D;C14D;1109 1166 11BC;C14D;1109 1166 11BC; +C14E;C14E;1109 1166 11BD;C14E;1109 1166 11BD; +C14F;C14F;1109 1166 11BE;C14F;1109 1166 11BE; +C150;C150;1109 1166 11BF;C150;1109 1166 11BF; +C151;C151;1109 1166 11C0;C151;1109 1166 11C0; +C152;C152;1109 1166 11C1;C152;1109 1166 11C1; +C153;C153;1109 1166 11C2;C153;1109 1166 11C2; +C154;C154;1109 1167;C154;1109 1167; +C155;C155;1109 1167 11A8;C155;1109 1167 11A8; +C156;C156;1109 1167 11A9;C156;1109 1167 11A9; +C157;C157;1109 1167 11AA;C157;1109 1167 11AA; +C158;C158;1109 1167 11AB;C158;1109 1167 11AB; +C159;C159;1109 1167 11AC;C159;1109 1167 11AC; +C15A;C15A;1109 1167 11AD;C15A;1109 1167 11AD; +C15B;C15B;1109 1167 11AE;C15B;1109 1167 11AE; +C15C;C15C;1109 1167 11AF;C15C;1109 1167 11AF; +C15D;C15D;1109 1167 11B0;C15D;1109 1167 11B0; +C15E;C15E;1109 1167 11B1;C15E;1109 1167 11B1; +C15F;C15F;1109 1167 11B2;C15F;1109 1167 11B2; +C160;C160;1109 1167 11B3;C160;1109 1167 11B3; +C161;C161;1109 1167 11B4;C161;1109 1167 11B4; +C162;C162;1109 1167 11B5;C162;1109 1167 11B5; +C163;C163;1109 1167 11B6;C163;1109 1167 11B6; +C164;C164;1109 1167 11B7;C164;1109 1167 11B7; +C165;C165;1109 1167 11B8;C165;1109 1167 11B8; +C166;C166;1109 1167 11B9;C166;1109 1167 11B9; +C167;C167;1109 1167 11BA;C167;1109 1167 11BA; +C168;C168;1109 1167 11BB;C168;1109 1167 11BB; +C169;C169;1109 1167 11BC;C169;1109 1167 11BC; +C16A;C16A;1109 1167 11BD;C16A;1109 1167 11BD; +C16B;C16B;1109 1167 11BE;C16B;1109 1167 11BE; +C16C;C16C;1109 1167 11BF;C16C;1109 1167 11BF; +C16D;C16D;1109 1167 11C0;C16D;1109 1167 11C0; +C16E;C16E;1109 1167 11C1;C16E;1109 1167 11C1; +C16F;C16F;1109 1167 11C2;C16F;1109 1167 11C2; +C170;C170;1109 1168;C170;1109 1168; +C171;C171;1109 1168 11A8;C171;1109 1168 11A8; +C172;C172;1109 1168 11A9;C172;1109 1168 11A9; +C173;C173;1109 1168 11AA;C173;1109 1168 11AA; +C174;C174;1109 1168 11AB;C174;1109 1168 11AB; +C175;C175;1109 1168 11AC;C175;1109 1168 11AC; +C176;C176;1109 1168 11AD;C176;1109 1168 11AD; +C177;C177;1109 1168 11AE;C177;1109 1168 11AE; +C178;C178;1109 1168 11AF;C178;1109 1168 11AF; +C179;C179;1109 1168 11B0;C179;1109 1168 11B0; +C17A;C17A;1109 1168 11B1;C17A;1109 1168 11B1; +C17B;C17B;1109 1168 11B2;C17B;1109 1168 11B2; +C17C;C17C;1109 1168 11B3;C17C;1109 1168 11B3; +C17D;C17D;1109 1168 11B4;C17D;1109 1168 11B4; +C17E;C17E;1109 1168 11B5;C17E;1109 1168 11B5; +C17F;C17F;1109 1168 11B6;C17F;1109 1168 11B6; +C180;C180;1109 1168 11B7;C180;1109 1168 11B7; +C181;C181;1109 1168 11B8;C181;1109 1168 11B8; +C182;C182;1109 1168 11B9;C182;1109 1168 11B9; +C183;C183;1109 1168 11BA;C183;1109 1168 11BA; +C184;C184;1109 1168 11BB;C184;1109 1168 11BB; +C185;C185;1109 1168 11BC;C185;1109 1168 11BC; +C186;C186;1109 1168 11BD;C186;1109 1168 11BD; +C187;C187;1109 1168 11BE;C187;1109 1168 11BE; +C188;C188;1109 1168 11BF;C188;1109 1168 11BF; +C189;C189;1109 1168 11C0;C189;1109 1168 11C0; +C18A;C18A;1109 1168 11C1;C18A;1109 1168 11C1; +C18B;C18B;1109 1168 11C2;C18B;1109 1168 11C2; +C18C;C18C;1109 1169;C18C;1109 1169; +C18D;C18D;1109 1169 11A8;C18D;1109 1169 11A8; +C18E;C18E;1109 1169 11A9;C18E;1109 1169 11A9; +C18F;C18F;1109 1169 11AA;C18F;1109 1169 11AA; +C190;C190;1109 1169 11AB;C190;1109 1169 11AB; +C191;C191;1109 1169 11AC;C191;1109 1169 11AC; +C192;C192;1109 1169 11AD;C192;1109 1169 11AD; +C193;C193;1109 1169 11AE;C193;1109 1169 11AE; +C194;C194;1109 1169 11AF;C194;1109 1169 11AF; +C195;C195;1109 1169 11B0;C195;1109 1169 11B0; +C196;C196;1109 1169 11B1;C196;1109 1169 11B1; +C197;C197;1109 1169 11B2;C197;1109 1169 11B2; +C198;C198;1109 1169 11B3;C198;1109 1169 11B3; +C199;C199;1109 1169 11B4;C199;1109 1169 11B4; +C19A;C19A;1109 1169 11B5;C19A;1109 1169 11B5; +C19B;C19B;1109 1169 11B6;C19B;1109 1169 11B6; +C19C;C19C;1109 1169 11B7;C19C;1109 1169 11B7; +C19D;C19D;1109 1169 11B8;C19D;1109 1169 11B8; +C19E;C19E;1109 1169 11B9;C19E;1109 1169 11B9; +C19F;C19F;1109 1169 11BA;C19F;1109 1169 11BA; +C1A0;C1A0;1109 1169 11BB;C1A0;1109 1169 11BB; +C1A1;C1A1;1109 1169 11BC;C1A1;1109 1169 11BC; +C1A2;C1A2;1109 1169 11BD;C1A2;1109 1169 11BD; +C1A3;C1A3;1109 1169 11BE;C1A3;1109 1169 11BE; +C1A4;C1A4;1109 1169 11BF;C1A4;1109 1169 11BF; +C1A5;C1A5;1109 1169 11C0;C1A5;1109 1169 11C0; +C1A6;C1A6;1109 1169 11C1;C1A6;1109 1169 11C1; +C1A7;C1A7;1109 1169 11C2;C1A7;1109 1169 11C2; +C1A8;C1A8;1109 116A;C1A8;1109 116A; +C1A9;C1A9;1109 116A 11A8;C1A9;1109 116A 11A8; +C1AA;C1AA;1109 116A 11A9;C1AA;1109 116A 11A9; +C1AB;C1AB;1109 116A 11AA;C1AB;1109 116A 11AA; +C1AC;C1AC;1109 116A 11AB;C1AC;1109 116A 11AB; +C1AD;C1AD;1109 116A 11AC;C1AD;1109 116A 11AC; +C1AE;C1AE;1109 116A 11AD;C1AE;1109 116A 11AD; +C1AF;C1AF;1109 116A 11AE;C1AF;1109 116A 11AE; +C1B0;C1B0;1109 116A 11AF;C1B0;1109 116A 11AF; +C1B1;C1B1;1109 116A 11B0;C1B1;1109 116A 11B0; +C1B2;C1B2;1109 116A 11B1;C1B2;1109 116A 11B1; +C1B3;C1B3;1109 116A 11B2;C1B3;1109 116A 11B2; +C1B4;C1B4;1109 116A 11B3;C1B4;1109 116A 11B3; +C1B5;C1B5;1109 116A 11B4;C1B5;1109 116A 11B4; +C1B6;C1B6;1109 116A 11B5;C1B6;1109 116A 11B5; +C1B7;C1B7;1109 116A 11B6;C1B7;1109 116A 11B6; +C1B8;C1B8;1109 116A 11B7;C1B8;1109 116A 11B7; +C1B9;C1B9;1109 116A 11B8;C1B9;1109 116A 11B8; +C1BA;C1BA;1109 116A 11B9;C1BA;1109 116A 11B9; +C1BB;C1BB;1109 116A 11BA;C1BB;1109 116A 11BA; +C1BC;C1BC;1109 116A 11BB;C1BC;1109 116A 11BB; +C1BD;C1BD;1109 116A 11BC;C1BD;1109 116A 11BC; +C1BE;C1BE;1109 116A 11BD;C1BE;1109 116A 11BD; +C1BF;C1BF;1109 116A 11BE;C1BF;1109 116A 11BE; +C1C0;C1C0;1109 116A 11BF;C1C0;1109 116A 11BF; +C1C1;C1C1;1109 116A 11C0;C1C1;1109 116A 11C0; +C1C2;C1C2;1109 116A 11C1;C1C2;1109 116A 11C1; +C1C3;C1C3;1109 116A 11C2;C1C3;1109 116A 11C2; +C1C4;C1C4;1109 116B;C1C4;1109 116B; +C1C5;C1C5;1109 116B 11A8;C1C5;1109 116B 11A8; +C1C6;C1C6;1109 116B 11A9;C1C6;1109 116B 11A9; +C1C7;C1C7;1109 116B 11AA;C1C7;1109 116B 11AA; +C1C8;C1C8;1109 116B 11AB;C1C8;1109 116B 11AB; +C1C9;C1C9;1109 116B 11AC;C1C9;1109 116B 11AC; +C1CA;C1CA;1109 116B 11AD;C1CA;1109 116B 11AD; +C1CB;C1CB;1109 116B 11AE;C1CB;1109 116B 11AE; +C1CC;C1CC;1109 116B 11AF;C1CC;1109 116B 11AF; +C1CD;C1CD;1109 116B 11B0;C1CD;1109 116B 11B0; +C1CE;C1CE;1109 116B 11B1;C1CE;1109 116B 11B1; +C1CF;C1CF;1109 116B 11B2;C1CF;1109 116B 11B2; +C1D0;C1D0;1109 116B 11B3;C1D0;1109 116B 11B3; +C1D1;C1D1;1109 116B 11B4;C1D1;1109 116B 11B4; +C1D2;C1D2;1109 116B 11B5;C1D2;1109 116B 11B5; +C1D3;C1D3;1109 116B 11B6;C1D3;1109 116B 11B6; +C1D4;C1D4;1109 116B 11B7;C1D4;1109 116B 11B7; +C1D5;C1D5;1109 116B 11B8;C1D5;1109 116B 11B8; +C1D6;C1D6;1109 116B 11B9;C1D6;1109 116B 11B9; +C1D7;C1D7;1109 116B 11BA;C1D7;1109 116B 11BA; +C1D8;C1D8;1109 116B 11BB;C1D8;1109 116B 11BB; +C1D9;C1D9;1109 116B 11BC;C1D9;1109 116B 11BC; +C1DA;C1DA;1109 116B 11BD;C1DA;1109 116B 11BD; +C1DB;C1DB;1109 116B 11BE;C1DB;1109 116B 11BE; +C1DC;C1DC;1109 116B 11BF;C1DC;1109 116B 11BF; +C1DD;C1DD;1109 116B 11C0;C1DD;1109 116B 11C0; +C1DE;C1DE;1109 116B 11C1;C1DE;1109 116B 11C1; +C1DF;C1DF;1109 116B 11C2;C1DF;1109 116B 11C2; +C1E0;C1E0;1109 116C;C1E0;1109 116C; +C1E1;C1E1;1109 116C 11A8;C1E1;1109 116C 11A8; +C1E2;C1E2;1109 116C 11A9;C1E2;1109 116C 11A9; +C1E3;C1E3;1109 116C 11AA;C1E3;1109 116C 11AA; +C1E4;C1E4;1109 116C 11AB;C1E4;1109 116C 11AB; +C1E5;C1E5;1109 116C 11AC;C1E5;1109 116C 11AC; +C1E6;C1E6;1109 116C 11AD;C1E6;1109 116C 11AD; +C1E7;C1E7;1109 116C 11AE;C1E7;1109 116C 11AE; +C1E8;C1E8;1109 116C 11AF;C1E8;1109 116C 11AF; +C1E9;C1E9;1109 116C 11B0;C1E9;1109 116C 11B0; +C1EA;C1EA;1109 116C 11B1;C1EA;1109 116C 11B1; +C1EB;C1EB;1109 116C 11B2;C1EB;1109 116C 11B2; +C1EC;C1EC;1109 116C 11B3;C1EC;1109 116C 11B3; +C1ED;C1ED;1109 116C 11B4;C1ED;1109 116C 11B4; +C1EE;C1EE;1109 116C 11B5;C1EE;1109 116C 11B5; +C1EF;C1EF;1109 116C 11B6;C1EF;1109 116C 11B6; +C1F0;C1F0;1109 116C 11B7;C1F0;1109 116C 11B7; +C1F1;C1F1;1109 116C 11B8;C1F1;1109 116C 11B8; +C1F2;C1F2;1109 116C 11B9;C1F2;1109 116C 11B9; +C1F3;C1F3;1109 116C 11BA;C1F3;1109 116C 11BA; +C1F4;C1F4;1109 116C 11BB;C1F4;1109 116C 11BB; +C1F5;C1F5;1109 116C 11BC;C1F5;1109 116C 11BC; +C1F6;C1F6;1109 116C 11BD;C1F6;1109 116C 11BD; +C1F7;C1F7;1109 116C 11BE;C1F7;1109 116C 11BE; +C1F8;C1F8;1109 116C 11BF;C1F8;1109 116C 11BF; +C1F9;C1F9;1109 116C 11C0;C1F9;1109 116C 11C0; +C1FA;C1FA;1109 116C 11C1;C1FA;1109 116C 11C1; +C1FB;C1FB;1109 116C 11C2;C1FB;1109 116C 11C2; +C1FC;C1FC;1109 116D;C1FC;1109 116D; +C1FD;C1FD;1109 116D 11A8;C1FD;1109 116D 11A8; +C1FE;C1FE;1109 116D 11A9;C1FE;1109 116D 11A9; +C1FF;C1FF;1109 116D 11AA;C1FF;1109 116D 11AA; +C200;C200;1109 116D 11AB;C200;1109 116D 11AB; +C201;C201;1109 116D 11AC;C201;1109 116D 11AC; +C202;C202;1109 116D 11AD;C202;1109 116D 11AD; +C203;C203;1109 116D 11AE;C203;1109 116D 11AE; +C204;C204;1109 116D 11AF;C204;1109 116D 11AF; +C205;C205;1109 116D 11B0;C205;1109 116D 11B0; +C206;C206;1109 116D 11B1;C206;1109 116D 11B1; +C207;C207;1109 116D 11B2;C207;1109 116D 11B2; +C208;C208;1109 116D 11B3;C208;1109 116D 11B3; +C209;C209;1109 116D 11B4;C209;1109 116D 11B4; +C20A;C20A;1109 116D 11B5;C20A;1109 116D 11B5; +C20B;C20B;1109 116D 11B6;C20B;1109 116D 11B6; +C20C;C20C;1109 116D 11B7;C20C;1109 116D 11B7; +C20D;C20D;1109 116D 11B8;C20D;1109 116D 11B8; +C20E;C20E;1109 116D 11B9;C20E;1109 116D 11B9; +C20F;C20F;1109 116D 11BA;C20F;1109 116D 11BA; +C210;C210;1109 116D 11BB;C210;1109 116D 11BB; +C211;C211;1109 116D 11BC;C211;1109 116D 11BC; +C212;C212;1109 116D 11BD;C212;1109 116D 11BD; +C213;C213;1109 116D 11BE;C213;1109 116D 11BE; +C214;C214;1109 116D 11BF;C214;1109 116D 11BF; +C215;C215;1109 116D 11C0;C215;1109 116D 11C0; +C216;C216;1109 116D 11C1;C216;1109 116D 11C1; +C217;C217;1109 116D 11C2;C217;1109 116D 11C2; +C218;C218;1109 116E;C218;1109 116E; +C219;C219;1109 116E 11A8;C219;1109 116E 11A8; +C21A;C21A;1109 116E 11A9;C21A;1109 116E 11A9; +C21B;C21B;1109 116E 11AA;C21B;1109 116E 11AA; +C21C;C21C;1109 116E 11AB;C21C;1109 116E 11AB; +C21D;C21D;1109 116E 11AC;C21D;1109 116E 11AC; +C21E;C21E;1109 116E 11AD;C21E;1109 116E 11AD; +C21F;C21F;1109 116E 11AE;C21F;1109 116E 11AE; +C220;C220;1109 116E 11AF;C220;1109 116E 11AF; +C221;C221;1109 116E 11B0;C221;1109 116E 11B0; +C222;C222;1109 116E 11B1;C222;1109 116E 11B1; +C223;C223;1109 116E 11B2;C223;1109 116E 11B2; +C224;C224;1109 116E 11B3;C224;1109 116E 11B3; +C225;C225;1109 116E 11B4;C225;1109 116E 11B4; +C226;C226;1109 116E 11B5;C226;1109 116E 11B5; +C227;C227;1109 116E 11B6;C227;1109 116E 11B6; +C228;C228;1109 116E 11B7;C228;1109 116E 11B7; +C229;C229;1109 116E 11B8;C229;1109 116E 11B8; +C22A;C22A;1109 116E 11B9;C22A;1109 116E 11B9; +C22B;C22B;1109 116E 11BA;C22B;1109 116E 11BA; +C22C;C22C;1109 116E 11BB;C22C;1109 116E 11BB; +C22D;C22D;1109 116E 11BC;C22D;1109 116E 11BC; +C22E;C22E;1109 116E 11BD;C22E;1109 116E 11BD; +C22F;C22F;1109 116E 11BE;C22F;1109 116E 11BE; +C230;C230;1109 116E 11BF;C230;1109 116E 11BF; +C231;C231;1109 116E 11C0;C231;1109 116E 11C0; +C232;C232;1109 116E 11C1;C232;1109 116E 11C1; +C233;C233;1109 116E 11C2;C233;1109 116E 11C2; +C234;C234;1109 116F;C234;1109 116F; +C235;C235;1109 116F 11A8;C235;1109 116F 11A8; +C236;C236;1109 116F 11A9;C236;1109 116F 11A9; +C237;C237;1109 116F 11AA;C237;1109 116F 11AA; +C238;C238;1109 116F 11AB;C238;1109 116F 11AB; +C239;C239;1109 116F 11AC;C239;1109 116F 11AC; +C23A;C23A;1109 116F 11AD;C23A;1109 116F 11AD; +C23B;C23B;1109 116F 11AE;C23B;1109 116F 11AE; +C23C;C23C;1109 116F 11AF;C23C;1109 116F 11AF; +C23D;C23D;1109 116F 11B0;C23D;1109 116F 11B0; +C23E;C23E;1109 116F 11B1;C23E;1109 116F 11B1; +C23F;C23F;1109 116F 11B2;C23F;1109 116F 11B2; +C240;C240;1109 116F 11B3;C240;1109 116F 11B3; +C241;C241;1109 116F 11B4;C241;1109 116F 11B4; +C242;C242;1109 116F 11B5;C242;1109 116F 11B5; +C243;C243;1109 116F 11B6;C243;1109 116F 11B6; +C244;C244;1109 116F 11B7;C244;1109 116F 11B7; +C245;C245;1109 116F 11B8;C245;1109 116F 11B8; +C246;C246;1109 116F 11B9;C246;1109 116F 11B9; +C247;C247;1109 116F 11BA;C247;1109 116F 11BA; +C248;C248;1109 116F 11BB;C248;1109 116F 11BB; +C249;C249;1109 116F 11BC;C249;1109 116F 11BC; +C24A;C24A;1109 116F 11BD;C24A;1109 116F 11BD; +C24B;C24B;1109 116F 11BE;C24B;1109 116F 11BE; +C24C;C24C;1109 116F 11BF;C24C;1109 116F 11BF; +C24D;C24D;1109 116F 11C0;C24D;1109 116F 11C0; +C24E;C24E;1109 116F 11C1;C24E;1109 116F 11C1; +C24F;C24F;1109 116F 11C2;C24F;1109 116F 11C2; +C250;C250;1109 1170;C250;1109 1170; +C251;C251;1109 1170 11A8;C251;1109 1170 11A8; +C252;C252;1109 1170 11A9;C252;1109 1170 11A9; +C253;C253;1109 1170 11AA;C253;1109 1170 11AA; +C254;C254;1109 1170 11AB;C254;1109 1170 11AB; +C255;C255;1109 1170 11AC;C255;1109 1170 11AC; +C256;C256;1109 1170 11AD;C256;1109 1170 11AD; +C257;C257;1109 1170 11AE;C257;1109 1170 11AE; +C258;C258;1109 1170 11AF;C258;1109 1170 11AF; +C259;C259;1109 1170 11B0;C259;1109 1170 11B0; +C25A;C25A;1109 1170 11B1;C25A;1109 1170 11B1; +C25B;C25B;1109 1170 11B2;C25B;1109 1170 11B2; +C25C;C25C;1109 1170 11B3;C25C;1109 1170 11B3; +C25D;C25D;1109 1170 11B4;C25D;1109 1170 11B4; +C25E;C25E;1109 1170 11B5;C25E;1109 1170 11B5; +C25F;C25F;1109 1170 11B6;C25F;1109 1170 11B6; +C260;C260;1109 1170 11B7;C260;1109 1170 11B7; +C261;C261;1109 1170 11B8;C261;1109 1170 11B8; +C262;C262;1109 1170 11B9;C262;1109 1170 11B9; +C263;C263;1109 1170 11BA;C263;1109 1170 11BA; +C264;C264;1109 1170 11BB;C264;1109 1170 11BB; +C265;C265;1109 1170 11BC;C265;1109 1170 11BC; +C266;C266;1109 1170 11BD;C266;1109 1170 11BD; +C267;C267;1109 1170 11BE;C267;1109 1170 11BE; +C268;C268;1109 1170 11BF;C268;1109 1170 11BF; +C269;C269;1109 1170 11C0;C269;1109 1170 11C0; +C26A;C26A;1109 1170 11C1;C26A;1109 1170 11C1; +C26B;C26B;1109 1170 11C2;C26B;1109 1170 11C2; +C26C;C26C;1109 1171;C26C;1109 1171; +C26D;C26D;1109 1171 11A8;C26D;1109 1171 11A8; +C26E;C26E;1109 1171 11A9;C26E;1109 1171 11A9; +C26F;C26F;1109 1171 11AA;C26F;1109 1171 11AA; +C270;C270;1109 1171 11AB;C270;1109 1171 11AB; +C271;C271;1109 1171 11AC;C271;1109 1171 11AC; +C272;C272;1109 1171 11AD;C272;1109 1171 11AD; +C273;C273;1109 1171 11AE;C273;1109 1171 11AE; +C274;C274;1109 1171 11AF;C274;1109 1171 11AF; +C275;C275;1109 1171 11B0;C275;1109 1171 11B0; +C276;C276;1109 1171 11B1;C276;1109 1171 11B1; +C277;C277;1109 1171 11B2;C277;1109 1171 11B2; +C278;C278;1109 1171 11B3;C278;1109 1171 11B3; +C279;C279;1109 1171 11B4;C279;1109 1171 11B4; +C27A;C27A;1109 1171 11B5;C27A;1109 1171 11B5; +C27B;C27B;1109 1171 11B6;C27B;1109 1171 11B6; +C27C;C27C;1109 1171 11B7;C27C;1109 1171 11B7; +C27D;C27D;1109 1171 11B8;C27D;1109 1171 11B8; +C27E;C27E;1109 1171 11B9;C27E;1109 1171 11B9; +C27F;C27F;1109 1171 11BA;C27F;1109 1171 11BA; +C280;C280;1109 1171 11BB;C280;1109 1171 11BB; +C281;C281;1109 1171 11BC;C281;1109 1171 11BC; +C282;C282;1109 1171 11BD;C282;1109 1171 11BD; +C283;C283;1109 1171 11BE;C283;1109 1171 11BE; +C284;C284;1109 1171 11BF;C284;1109 1171 11BF; +C285;C285;1109 1171 11C0;C285;1109 1171 11C0; +C286;C286;1109 1171 11C1;C286;1109 1171 11C1; +C287;C287;1109 1171 11C2;C287;1109 1171 11C2; +C288;C288;1109 1172;C288;1109 1172; +C289;C289;1109 1172 11A8;C289;1109 1172 11A8; +C28A;C28A;1109 1172 11A9;C28A;1109 1172 11A9; +C28B;C28B;1109 1172 11AA;C28B;1109 1172 11AA; +C28C;C28C;1109 1172 11AB;C28C;1109 1172 11AB; +C28D;C28D;1109 1172 11AC;C28D;1109 1172 11AC; +C28E;C28E;1109 1172 11AD;C28E;1109 1172 11AD; +C28F;C28F;1109 1172 11AE;C28F;1109 1172 11AE; +C290;C290;1109 1172 11AF;C290;1109 1172 11AF; +C291;C291;1109 1172 11B0;C291;1109 1172 11B0; +C292;C292;1109 1172 11B1;C292;1109 1172 11B1; +C293;C293;1109 1172 11B2;C293;1109 1172 11B2; +C294;C294;1109 1172 11B3;C294;1109 1172 11B3; +C295;C295;1109 1172 11B4;C295;1109 1172 11B4; +C296;C296;1109 1172 11B5;C296;1109 1172 11B5; +C297;C297;1109 1172 11B6;C297;1109 1172 11B6; +C298;C298;1109 1172 11B7;C298;1109 1172 11B7; +C299;C299;1109 1172 11B8;C299;1109 1172 11B8; +C29A;C29A;1109 1172 11B9;C29A;1109 1172 11B9; +C29B;C29B;1109 1172 11BA;C29B;1109 1172 11BA; +C29C;C29C;1109 1172 11BB;C29C;1109 1172 11BB; +C29D;C29D;1109 1172 11BC;C29D;1109 1172 11BC; +C29E;C29E;1109 1172 11BD;C29E;1109 1172 11BD; +C29F;C29F;1109 1172 11BE;C29F;1109 1172 11BE; +C2A0;C2A0;1109 1172 11BF;C2A0;1109 1172 11BF; +C2A1;C2A1;1109 1172 11C0;C2A1;1109 1172 11C0; +C2A2;C2A2;1109 1172 11C1;C2A2;1109 1172 11C1; +C2A3;C2A3;1109 1172 11C2;C2A3;1109 1172 11C2; +C2A4;C2A4;1109 1173;C2A4;1109 1173; +C2A5;C2A5;1109 1173 11A8;C2A5;1109 1173 11A8; +C2A6;C2A6;1109 1173 11A9;C2A6;1109 1173 11A9; +C2A7;C2A7;1109 1173 11AA;C2A7;1109 1173 11AA; +C2A8;C2A8;1109 1173 11AB;C2A8;1109 1173 11AB; +C2A9;C2A9;1109 1173 11AC;C2A9;1109 1173 11AC; +C2AA;C2AA;1109 1173 11AD;C2AA;1109 1173 11AD; +C2AB;C2AB;1109 1173 11AE;C2AB;1109 1173 11AE; +C2AC;C2AC;1109 1173 11AF;C2AC;1109 1173 11AF; +C2AD;C2AD;1109 1173 11B0;C2AD;1109 1173 11B0; +C2AE;C2AE;1109 1173 11B1;C2AE;1109 1173 11B1; +C2AF;C2AF;1109 1173 11B2;C2AF;1109 1173 11B2; +C2B0;C2B0;1109 1173 11B3;C2B0;1109 1173 11B3; +C2B1;C2B1;1109 1173 11B4;C2B1;1109 1173 11B4; +C2B2;C2B2;1109 1173 11B5;C2B2;1109 1173 11B5; +C2B3;C2B3;1109 1173 11B6;C2B3;1109 1173 11B6; +C2B4;C2B4;1109 1173 11B7;C2B4;1109 1173 11B7; +C2B5;C2B5;1109 1173 11B8;C2B5;1109 1173 11B8; +C2B6;C2B6;1109 1173 11B9;C2B6;1109 1173 11B9; +C2B7;C2B7;1109 1173 11BA;C2B7;1109 1173 11BA; +C2B8;C2B8;1109 1173 11BB;C2B8;1109 1173 11BB; +C2B9;C2B9;1109 1173 11BC;C2B9;1109 1173 11BC; +C2BA;C2BA;1109 1173 11BD;C2BA;1109 1173 11BD; +C2BB;C2BB;1109 1173 11BE;C2BB;1109 1173 11BE; +C2BC;C2BC;1109 1173 11BF;C2BC;1109 1173 11BF; +C2BD;C2BD;1109 1173 11C0;C2BD;1109 1173 11C0; +C2BE;C2BE;1109 1173 11C1;C2BE;1109 1173 11C1; +C2BF;C2BF;1109 1173 11C2;C2BF;1109 1173 11C2; +C2C0;C2C0;1109 1174;C2C0;1109 1174; +C2C1;C2C1;1109 1174 11A8;C2C1;1109 1174 11A8; +C2C2;C2C2;1109 1174 11A9;C2C2;1109 1174 11A9; +C2C3;C2C3;1109 1174 11AA;C2C3;1109 1174 11AA; +C2C4;C2C4;1109 1174 11AB;C2C4;1109 1174 11AB; +C2C5;C2C5;1109 1174 11AC;C2C5;1109 1174 11AC; +C2C6;C2C6;1109 1174 11AD;C2C6;1109 1174 11AD; +C2C7;C2C7;1109 1174 11AE;C2C7;1109 1174 11AE; +C2C8;C2C8;1109 1174 11AF;C2C8;1109 1174 11AF; +C2C9;C2C9;1109 1174 11B0;C2C9;1109 1174 11B0; +C2CA;C2CA;1109 1174 11B1;C2CA;1109 1174 11B1; +C2CB;C2CB;1109 1174 11B2;C2CB;1109 1174 11B2; +C2CC;C2CC;1109 1174 11B3;C2CC;1109 1174 11B3; +C2CD;C2CD;1109 1174 11B4;C2CD;1109 1174 11B4; +C2CE;C2CE;1109 1174 11B5;C2CE;1109 1174 11B5; +C2CF;C2CF;1109 1174 11B6;C2CF;1109 1174 11B6; +C2D0;C2D0;1109 1174 11B7;C2D0;1109 1174 11B7; +C2D1;C2D1;1109 1174 11B8;C2D1;1109 1174 11B8; +C2D2;C2D2;1109 1174 11B9;C2D2;1109 1174 11B9; +C2D3;C2D3;1109 1174 11BA;C2D3;1109 1174 11BA; +C2D4;C2D4;1109 1174 11BB;C2D4;1109 1174 11BB; +C2D5;C2D5;1109 1174 11BC;C2D5;1109 1174 11BC; +C2D6;C2D6;1109 1174 11BD;C2D6;1109 1174 11BD; +C2D7;C2D7;1109 1174 11BE;C2D7;1109 1174 11BE; +C2D8;C2D8;1109 1174 11BF;C2D8;1109 1174 11BF; +C2D9;C2D9;1109 1174 11C0;C2D9;1109 1174 11C0; +C2DA;C2DA;1109 1174 11C1;C2DA;1109 1174 11C1; +C2DB;C2DB;1109 1174 11C2;C2DB;1109 1174 11C2; +C2DC;C2DC;1109 1175;C2DC;1109 1175; +C2DD;C2DD;1109 1175 11A8;C2DD;1109 1175 11A8; +C2DE;C2DE;1109 1175 11A9;C2DE;1109 1175 11A9; +C2DF;C2DF;1109 1175 11AA;C2DF;1109 1175 11AA; +C2E0;C2E0;1109 1175 11AB;C2E0;1109 1175 11AB; +C2E1;C2E1;1109 1175 11AC;C2E1;1109 1175 11AC; +C2E2;C2E2;1109 1175 11AD;C2E2;1109 1175 11AD; +C2E3;C2E3;1109 1175 11AE;C2E3;1109 1175 11AE; +C2E4;C2E4;1109 1175 11AF;C2E4;1109 1175 11AF; +C2E5;C2E5;1109 1175 11B0;C2E5;1109 1175 11B0; +C2E6;C2E6;1109 1175 11B1;C2E6;1109 1175 11B1; +C2E7;C2E7;1109 1175 11B2;C2E7;1109 1175 11B2; +C2E8;C2E8;1109 1175 11B3;C2E8;1109 1175 11B3; +C2E9;C2E9;1109 1175 11B4;C2E9;1109 1175 11B4; +C2EA;C2EA;1109 1175 11B5;C2EA;1109 1175 11B5; +C2EB;C2EB;1109 1175 11B6;C2EB;1109 1175 11B6; +C2EC;C2EC;1109 1175 11B7;C2EC;1109 1175 11B7; +C2ED;C2ED;1109 1175 11B8;C2ED;1109 1175 11B8; +C2EE;C2EE;1109 1175 11B9;C2EE;1109 1175 11B9; +C2EF;C2EF;1109 1175 11BA;C2EF;1109 1175 11BA; +C2F0;C2F0;1109 1175 11BB;C2F0;1109 1175 11BB; +C2F1;C2F1;1109 1175 11BC;C2F1;1109 1175 11BC; +C2F2;C2F2;1109 1175 11BD;C2F2;1109 1175 11BD; +C2F3;C2F3;1109 1175 11BE;C2F3;1109 1175 11BE; +C2F4;C2F4;1109 1175 11BF;C2F4;1109 1175 11BF; +C2F5;C2F5;1109 1175 11C0;C2F5;1109 1175 11C0; +C2F6;C2F6;1109 1175 11C1;C2F6;1109 1175 11C1; +C2F7;C2F7;1109 1175 11C2;C2F7;1109 1175 11C2; +C2F8;C2F8;110A 1161;C2F8;110A 1161; +C2F9;C2F9;110A 1161 11A8;C2F9;110A 1161 11A8; +C2FA;C2FA;110A 1161 11A9;C2FA;110A 1161 11A9; +C2FB;C2FB;110A 1161 11AA;C2FB;110A 1161 11AA; +C2FC;C2FC;110A 1161 11AB;C2FC;110A 1161 11AB; +C2FD;C2FD;110A 1161 11AC;C2FD;110A 1161 11AC; +C2FE;C2FE;110A 1161 11AD;C2FE;110A 1161 11AD; +C2FF;C2FF;110A 1161 11AE;C2FF;110A 1161 11AE; +C300;C300;110A 1161 11AF;C300;110A 1161 11AF; +C301;C301;110A 1161 11B0;C301;110A 1161 11B0; +C302;C302;110A 1161 11B1;C302;110A 1161 11B1; +C303;C303;110A 1161 11B2;C303;110A 1161 11B2; +C304;C304;110A 1161 11B3;C304;110A 1161 11B3; +C305;C305;110A 1161 11B4;C305;110A 1161 11B4; +C306;C306;110A 1161 11B5;C306;110A 1161 11B5; +C307;C307;110A 1161 11B6;C307;110A 1161 11B6; +C308;C308;110A 1161 11B7;C308;110A 1161 11B7; +C309;C309;110A 1161 11B8;C309;110A 1161 11B8; +C30A;C30A;110A 1161 11B9;C30A;110A 1161 11B9; +C30B;C30B;110A 1161 11BA;C30B;110A 1161 11BA; +C30C;C30C;110A 1161 11BB;C30C;110A 1161 11BB; +C30D;C30D;110A 1161 11BC;C30D;110A 1161 11BC; +C30E;C30E;110A 1161 11BD;C30E;110A 1161 11BD; +C30F;C30F;110A 1161 11BE;C30F;110A 1161 11BE; +C310;C310;110A 1161 11BF;C310;110A 1161 11BF; +C311;C311;110A 1161 11C0;C311;110A 1161 11C0; +C312;C312;110A 1161 11C1;C312;110A 1161 11C1; +C313;C313;110A 1161 11C2;C313;110A 1161 11C2; +C314;C314;110A 1162;C314;110A 1162; +C315;C315;110A 1162 11A8;C315;110A 1162 11A8; +C316;C316;110A 1162 11A9;C316;110A 1162 11A9; +C317;C317;110A 1162 11AA;C317;110A 1162 11AA; +C318;C318;110A 1162 11AB;C318;110A 1162 11AB; +C319;C319;110A 1162 11AC;C319;110A 1162 11AC; +C31A;C31A;110A 1162 11AD;C31A;110A 1162 11AD; +C31B;C31B;110A 1162 11AE;C31B;110A 1162 11AE; +C31C;C31C;110A 1162 11AF;C31C;110A 1162 11AF; +C31D;C31D;110A 1162 11B0;C31D;110A 1162 11B0; +C31E;C31E;110A 1162 11B1;C31E;110A 1162 11B1; +C31F;C31F;110A 1162 11B2;C31F;110A 1162 11B2; +C320;C320;110A 1162 11B3;C320;110A 1162 11B3; +C321;C321;110A 1162 11B4;C321;110A 1162 11B4; +C322;C322;110A 1162 11B5;C322;110A 1162 11B5; +C323;C323;110A 1162 11B6;C323;110A 1162 11B6; +C324;C324;110A 1162 11B7;C324;110A 1162 11B7; +C325;C325;110A 1162 11B8;C325;110A 1162 11B8; +C326;C326;110A 1162 11B9;C326;110A 1162 11B9; +C327;C327;110A 1162 11BA;C327;110A 1162 11BA; +C328;C328;110A 1162 11BB;C328;110A 1162 11BB; +C329;C329;110A 1162 11BC;C329;110A 1162 11BC; +C32A;C32A;110A 1162 11BD;C32A;110A 1162 11BD; +C32B;C32B;110A 1162 11BE;C32B;110A 1162 11BE; +C32C;C32C;110A 1162 11BF;C32C;110A 1162 11BF; +C32D;C32D;110A 1162 11C0;C32D;110A 1162 11C0; +C32E;C32E;110A 1162 11C1;C32E;110A 1162 11C1; +C32F;C32F;110A 1162 11C2;C32F;110A 1162 11C2; +C330;C330;110A 1163;C330;110A 1163; +C331;C331;110A 1163 11A8;C331;110A 1163 11A8; +C332;C332;110A 1163 11A9;C332;110A 1163 11A9; +C333;C333;110A 1163 11AA;C333;110A 1163 11AA; +C334;C334;110A 1163 11AB;C334;110A 1163 11AB; +C335;C335;110A 1163 11AC;C335;110A 1163 11AC; +C336;C336;110A 1163 11AD;C336;110A 1163 11AD; +C337;C337;110A 1163 11AE;C337;110A 1163 11AE; +C338;C338;110A 1163 11AF;C338;110A 1163 11AF; +C339;C339;110A 1163 11B0;C339;110A 1163 11B0; +C33A;C33A;110A 1163 11B1;C33A;110A 1163 11B1; +C33B;C33B;110A 1163 11B2;C33B;110A 1163 11B2; +C33C;C33C;110A 1163 11B3;C33C;110A 1163 11B3; +C33D;C33D;110A 1163 11B4;C33D;110A 1163 11B4; +C33E;C33E;110A 1163 11B5;C33E;110A 1163 11B5; +C33F;C33F;110A 1163 11B6;C33F;110A 1163 11B6; +C340;C340;110A 1163 11B7;C340;110A 1163 11B7; +C341;C341;110A 1163 11B8;C341;110A 1163 11B8; +C342;C342;110A 1163 11B9;C342;110A 1163 11B9; +C343;C343;110A 1163 11BA;C343;110A 1163 11BA; +C344;C344;110A 1163 11BB;C344;110A 1163 11BB; +C345;C345;110A 1163 11BC;C345;110A 1163 11BC; +C346;C346;110A 1163 11BD;C346;110A 1163 11BD; +C347;C347;110A 1163 11BE;C347;110A 1163 11BE; +C348;C348;110A 1163 11BF;C348;110A 1163 11BF; +C349;C349;110A 1163 11C0;C349;110A 1163 11C0; +C34A;C34A;110A 1163 11C1;C34A;110A 1163 11C1; +C34B;C34B;110A 1163 11C2;C34B;110A 1163 11C2; +C34C;C34C;110A 1164;C34C;110A 1164; +C34D;C34D;110A 1164 11A8;C34D;110A 1164 11A8; +C34E;C34E;110A 1164 11A9;C34E;110A 1164 11A9; +C34F;C34F;110A 1164 11AA;C34F;110A 1164 11AA; +C350;C350;110A 1164 11AB;C350;110A 1164 11AB; +C351;C351;110A 1164 11AC;C351;110A 1164 11AC; +C352;C352;110A 1164 11AD;C352;110A 1164 11AD; +C353;C353;110A 1164 11AE;C353;110A 1164 11AE; +C354;C354;110A 1164 11AF;C354;110A 1164 11AF; +C355;C355;110A 1164 11B0;C355;110A 1164 11B0; +C356;C356;110A 1164 11B1;C356;110A 1164 11B1; +C357;C357;110A 1164 11B2;C357;110A 1164 11B2; +C358;C358;110A 1164 11B3;C358;110A 1164 11B3; +C359;C359;110A 1164 11B4;C359;110A 1164 11B4; +C35A;C35A;110A 1164 11B5;C35A;110A 1164 11B5; +C35B;C35B;110A 1164 11B6;C35B;110A 1164 11B6; +C35C;C35C;110A 1164 11B7;C35C;110A 1164 11B7; +C35D;C35D;110A 1164 11B8;C35D;110A 1164 11B8; +C35E;C35E;110A 1164 11B9;C35E;110A 1164 11B9; +C35F;C35F;110A 1164 11BA;C35F;110A 1164 11BA; +C360;C360;110A 1164 11BB;C360;110A 1164 11BB; +C361;C361;110A 1164 11BC;C361;110A 1164 11BC; +C362;C362;110A 1164 11BD;C362;110A 1164 11BD; +C363;C363;110A 1164 11BE;C363;110A 1164 11BE; +C364;C364;110A 1164 11BF;C364;110A 1164 11BF; +C365;C365;110A 1164 11C0;C365;110A 1164 11C0; +C366;C366;110A 1164 11C1;C366;110A 1164 11C1; +C367;C367;110A 1164 11C2;C367;110A 1164 11C2; +C368;C368;110A 1165;C368;110A 1165; +C369;C369;110A 1165 11A8;C369;110A 1165 11A8; +C36A;C36A;110A 1165 11A9;C36A;110A 1165 11A9; +C36B;C36B;110A 1165 11AA;C36B;110A 1165 11AA; +C36C;C36C;110A 1165 11AB;C36C;110A 1165 11AB; +C36D;C36D;110A 1165 11AC;C36D;110A 1165 11AC; +C36E;C36E;110A 1165 11AD;C36E;110A 1165 11AD; +C36F;C36F;110A 1165 11AE;C36F;110A 1165 11AE; +C370;C370;110A 1165 11AF;C370;110A 1165 11AF; +C371;C371;110A 1165 11B0;C371;110A 1165 11B0; +C372;C372;110A 1165 11B1;C372;110A 1165 11B1; +C373;C373;110A 1165 11B2;C373;110A 1165 11B2; +C374;C374;110A 1165 11B3;C374;110A 1165 11B3; +C375;C375;110A 1165 11B4;C375;110A 1165 11B4; +C376;C376;110A 1165 11B5;C376;110A 1165 11B5; +C377;C377;110A 1165 11B6;C377;110A 1165 11B6; +C378;C378;110A 1165 11B7;C378;110A 1165 11B7; +C379;C379;110A 1165 11B8;C379;110A 1165 11B8; +C37A;C37A;110A 1165 11B9;C37A;110A 1165 11B9; +C37B;C37B;110A 1165 11BA;C37B;110A 1165 11BA; +C37C;C37C;110A 1165 11BB;C37C;110A 1165 11BB; +C37D;C37D;110A 1165 11BC;C37D;110A 1165 11BC; +C37E;C37E;110A 1165 11BD;C37E;110A 1165 11BD; +C37F;C37F;110A 1165 11BE;C37F;110A 1165 11BE; +C380;C380;110A 1165 11BF;C380;110A 1165 11BF; +C381;C381;110A 1165 11C0;C381;110A 1165 11C0; +C382;C382;110A 1165 11C1;C382;110A 1165 11C1; +C383;C383;110A 1165 11C2;C383;110A 1165 11C2; +C384;C384;110A 1166;C384;110A 1166; +C385;C385;110A 1166 11A8;C385;110A 1166 11A8; +C386;C386;110A 1166 11A9;C386;110A 1166 11A9; +C387;C387;110A 1166 11AA;C387;110A 1166 11AA; +C388;C388;110A 1166 11AB;C388;110A 1166 11AB; +C389;C389;110A 1166 11AC;C389;110A 1166 11AC; +C38A;C38A;110A 1166 11AD;C38A;110A 1166 11AD; +C38B;C38B;110A 1166 11AE;C38B;110A 1166 11AE; +C38C;C38C;110A 1166 11AF;C38C;110A 1166 11AF; +C38D;C38D;110A 1166 11B0;C38D;110A 1166 11B0; +C38E;C38E;110A 1166 11B1;C38E;110A 1166 11B1; +C38F;C38F;110A 1166 11B2;C38F;110A 1166 11B2; +C390;C390;110A 1166 11B3;C390;110A 1166 11B3; +C391;C391;110A 1166 11B4;C391;110A 1166 11B4; +C392;C392;110A 1166 11B5;C392;110A 1166 11B5; +C393;C393;110A 1166 11B6;C393;110A 1166 11B6; +C394;C394;110A 1166 11B7;C394;110A 1166 11B7; +C395;C395;110A 1166 11B8;C395;110A 1166 11B8; +C396;C396;110A 1166 11B9;C396;110A 1166 11B9; +C397;C397;110A 1166 11BA;C397;110A 1166 11BA; +C398;C398;110A 1166 11BB;C398;110A 1166 11BB; +C399;C399;110A 1166 11BC;C399;110A 1166 11BC; +C39A;C39A;110A 1166 11BD;C39A;110A 1166 11BD; +C39B;C39B;110A 1166 11BE;C39B;110A 1166 11BE; +C39C;C39C;110A 1166 11BF;C39C;110A 1166 11BF; +C39D;C39D;110A 1166 11C0;C39D;110A 1166 11C0; +C39E;C39E;110A 1166 11C1;C39E;110A 1166 11C1; +C39F;C39F;110A 1166 11C2;C39F;110A 1166 11C2; +C3A0;C3A0;110A 1167;C3A0;110A 1167; +C3A1;C3A1;110A 1167 11A8;C3A1;110A 1167 11A8; +C3A2;C3A2;110A 1167 11A9;C3A2;110A 1167 11A9; +C3A3;C3A3;110A 1167 11AA;C3A3;110A 1167 11AA; +C3A4;C3A4;110A 1167 11AB;C3A4;110A 1167 11AB; +C3A5;C3A5;110A 1167 11AC;C3A5;110A 1167 11AC; +C3A6;C3A6;110A 1167 11AD;C3A6;110A 1167 11AD; +C3A7;C3A7;110A 1167 11AE;C3A7;110A 1167 11AE; +C3A8;C3A8;110A 1167 11AF;C3A8;110A 1167 11AF; +C3A9;C3A9;110A 1167 11B0;C3A9;110A 1167 11B0; +C3AA;C3AA;110A 1167 11B1;C3AA;110A 1167 11B1; +C3AB;C3AB;110A 1167 11B2;C3AB;110A 1167 11B2; +C3AC;C3AC;110A 1167 11B3;C3AC;110A 1167 11B3; +C3AD;C3AD;110A 1167 11B4;C3AD;110A 1167 11B4; +C3AE;C3AE;110A 1167 11B5;C3AE;110A 1167 11B5; +C3AF;C3AF;110A 1167 11B6;C3AF;110A 1167 11B6; +C3B0;C3B0;110A 1167 11B7;C3B0;110A 1167 11B7; +C3B1;C3B1;110A 1167 11B8;C3B1;110A 1167 11B8; +C3B2;C3B2;110A 1167 11B9;C3B2;110A 1167 11B9; +C3B3;C3B3;110A 1167 11BA;C3B3;110A 1167 11BA; +C3B4;C3B4;110A 1167 11BB;C3B4;110A 1167 11BB; +C3B5;C3B5;110A 1167 11BC;C3B5;110A 1167 11BC; +C3B6;C3B6;110A 1167 11BD;C3B6;110A 1167 11BD; +C3B7;C3B7;110A 1167 11BE;C3B7;110A 1167 11BE; +C3B8;C3B8;110A 1167 11BF;C3B8;110A 1167 11BF; +C3B9;C3B9;110A 1167 11C0;C3B9;110A 1167 11C0; +C3BA;C3BA;110A 1167 11C1;C3BA;110A 1167 11C1; +C3BB;C3BB;110A 1167 11C2;C3BB;110A 1167 11C2; +C3BC;C3BC;110A 1168;C3BC;110A 1168; +C3BD;C3BD;110A 1168 11A8;C3BD;110A 1168 11A8; +C3BE;C3BE;110A 1168 11A9;C3BE;110A 1168 11A9; +C3BF;C3BF;110A 1168 11AA;C3BF;110A 1168 11AA; +C3C0;C3C0;110A 1168 11AB;C3C0;110A 1168 11AB; +C3C1;C3C1;110A 1168 11AC;C3C1;110A 1168 11AC; +C3C2;C3C2;110A 1168 11AD;C3C2;110A 1168 11AD; +C3C3;C3C3;110A 1168 11AE;C3C3;110A 1168 11AE; +C3C4;C3C4;110A 1168 11AF;C3C4;110A 1168 11AF; +C3C5;C3C5;110A 1168 11B0;C3C5;110A 1168 11B0; +C3C6;C3C6;110A 1168 11B1;C3C6;110A 1168 11B1; +C3C7;C3C7;110A 1168 11B2;C3C7;110A 1168 11B2; +C3C8;C3C8;110A 1168 11B3;C3C8;110A 1168 11B3; +C3C9;C3C9;110A 1168 11B4;C3C9;110A 1168 11B4; +C3CA;C3CA;110A 1168 11B5;C3CA;110A 1168 11B5; +C3CB;C3CB;110A 1168 11B6;C3CB;110A 1168 11B6; +C3CC;C3CC;110A 1168 11B7;C3CC;110A 1168 11B7; +C3CD;C3CD;110A 1168 11B8;C3CD;110A 1168 11B8; +C3CE;C3CE;110A 1168 11B9;C3CE;110A 1168 11B9; +C3CF;C3CF;110A 1168 11BA;C3CF;110A 1168 11BA; +C3D0;C3D0;110A 1168 11BB;C3D0;110A 1168 11BB; +C3D1;C3D1;110A 1168 11BC;C3D1;110A 1168 11BC; +C3D2;C3D2;110A 1168 11BD;C3D2;110A 1168 11BD; +C3D3;C3D3;110A 1168 11BE;C3D3;110A 1168 11BE; +C3D4;C3D4;110A 1168 11BF;C3D4;110A 1168 11BF; +C3D5;C3D5;110A 1168 11C0;C3D5;110A 1168 11C0; +C3D6;C3D6;110A 1168 11C1;C3D6;110A 1168 11C1; +C3D7;C3D7;110A 1168 11C2;C3D7;110A 1168 11C2; +C3D8;C3D8;110A 1169;C3D8;110A 1169; +C3D9;C3D9;110A 1169 11A8;C3D9;110A 1169 11A8; +C3DA;C3DA;110A 1169 11A9;C3DA;110A 1169 11A9; +C3DB;C3DB;110A 1169 11AA;C3DB;110A 1169 11AA; +C3DC;C3DC;110A 1169 11AB;C3DC;110A 1169 11AB; +C3DD;C3DD;110A 1169 11AC;C3DD;110A 1169 11AC; +C3DE;C3DE;110A 1169 11AD;C3DE;110A 1169 11AD; +C3DF;C3DF;110A 1169 11AE;C3DF;110A 1169 11AE; +C3E0;C3E0;110A 1169 11AF;C3E0;110A 1169 11AF; +C3E1;C3E1;110A 1169 11B0;C3E1;110A 1169 11B0; +C3E2;C3E2;110A 1169 11B1;C3E2;110A 1169 11B1; +C3E3;C3E3;110A 1169 11B2;C3E3;110A 1169 11B2; +C3E4;C3E4;110A 1169 11B3;C3E4;110A 1169 11B3; +C3E5;C3E5;110A 1169 11B4;C3E5;110A 1169 11B4; +C3E6;C3E6;110A 1169 11B5;C3E6;110A 1169 11B5; +C3E7;C3E7;110A 1169 11B6;C3E7;110A 1169 11B6; +C3E8;C3E8;110A 1169 11B7;C3E8;110A 1169 11B7; +C3E9;C3E9;110A 1169 11B8;C3E9;110A 1169 11B8; +C3EA;C3EA;110A 1169 11B9;C3EA;110A 1169 11B9; +C3EB;C3EB;110A 1169 11BA;C3EB;110A 1169 11BA; +C3EC;C3EC;110A 1169 11BB;C3EC;110A 1169 11BB; +C3ED;C3ED;110A 1169 11BC;C3ED;110A 1169 11BC; +C3EE;C3EE;110A 1169 11BD;C3EE;110A 1169 11BD; +C3EF;C3EF;110A 1169 11BE;C3EF;110A 1169 11BE; +C3F0;C3F0;110A 1169 11BF;C3F0;110A 1169 11BF; +C3F1;C3F1;110A 1169 11C0;C3F1;110A 1169 11C0; +C3F2;C3F2;110A 1169 11C1;C3F2;110A 1169 11C1; +C3F3;C3F3;110A 1169 11C2;C3F3;110A 1169 11C2; +C3F4;C3F4;110A 116A;C3F4;110A 116A; +C3F5;C3F5;110A 116A 11A8;C3F5;110A 116A 11A8; +C3F6;C3F6;110A 116A 11A9;C3F6;110A 116A 11A9; +C3F7;C3F7;110A 116A 11AA;C3F7;110A 116A 11AA; +C3F8;C3F8;110A 116A 11AB;C3F8;110A 116A 11AB; +C3F9;C3F9;110A 116A 11AC;C3F9;110A 116A 11AC; +C3FA;C3FA;110A 116A 11AD;C3FA;110A 116A 11AD; +C3FB;C3FB;110A 116A 11AE;C3FB;110A 116A 11AE; +C3FC;C3FC;110A 116A 11AF;C3FC;110A 116A 11AF; +C3FD;C3FD;110A 116A 11B0;C3FD;110A 116A 11B0; +C3FE;C3FE;110A 116A 11B1;C3FE;110A 116A 11B1; +C3FF;C3FF;110A 116A 11B2;C3FF;110A 116A 11B2; +C400;C400;110A 116A 11B3;C400;110A 116A 11B3; +C401;C401;110A 116A 11B4;C401;110A 116A 11B4; +C402;C402;110A 116A 11B5;C402;110A 116A 11B5; +C403;C403;110A 116A 11B6;C403;110A 116A 11B6; +C404;C404;110A 116A 11B7;C404;110A 116A 11B7; +C405;C405;110A 116A 11B8;C405;110A 116A 11B8; +C406;C406;110A 116A 11B9;C406;110A 116A 11B9; +C407;C407;110A 116A 11BA;C407;110A 116A 11BA; +C408;C408;110A 116A 11BB;C408;110A 116A 11BB; +C409;C409;110A 116A 11BC;C409;110A 116A 11BC; +C40A;C40A;110A 116A 11BD;C40A;110A 116A 11BD; +C40B;C40B;110A 116A 11BE;C40B;110A 116A 11BE; +C40C;C40C;110A 116A 11BF;C40C;110A 116A 11BF; +C40D;C40D;110A 116A 11C0;C40D;110A 116A 11C0; +C40E;C40E;110A 116A 11C1;C40E;110A 116A 11C1; +C40F;C40F;110A 116A 11C2;C40F;110A 116A 11C2; +C410;C410;110A 116B;C410;110A 116B; +C411;C411;110A 116B 11A8;C411;110A 116B 11A8; +C412;C412;110A 116B 11A9;C412;110A 116B 11A9; +C413;C413;110A 116B 11AA;C413;110A 116B 11AA; +C414;C414;110A 116B 11AB;C414;110A 116B 11AB; +C415;C415;110A 116B 11AC;C415;110A 116B 11AC; +C416;C416;110A 116B 11AD;C416;110A 116B 11AD; +C417;C417;110A 116B 11AE;C417;110A 116B 11AE; +C418;C418;110A 116B 11AF;C418;110A 116B 11AF; +C419;C419;110A 116B 11B0;C419;110A 116B 11B0; +C41A;C41A;110A 116B 11B1;C41A;110A 116B 11B1; +C41B;C41B;110A 116B 11B2;C41B;110A 116B 11B2; +C41C;C41C;110A 116B 11B3;C41C;110A 116B 11B3; +C41D;C41D;110A 116B 11B4;C41D;110A 116B 11B4; +C41E;C41E;110A 116B 11B5;C41E;110A 116B 11B5; +C41F;C41F;110A 116B 11B6;C41F;110A 116B 11B6; +C420;C420;110A 116B 11B7;C420;110A 116B 11B7; +C421;C421;110A 116B 11B8;C421;110A 116B 11B8; +C422;C422;110A 116B 11B9;C422;110A 116B 11B9; +C423;C423;110A 116B 11BA;C423;110A 116B 11BA; +C424;C424;110A 116B 11BB;C424;110A 116B 11BB; +C425;C425;110A 116B 11BC;C425;110A 116B 11BC; +C426;C426;110A 116B 11BD;C426;110A 116B 11BD; +C427;C427;110A 116B 11BE;C427;110A 116B 11BE; +C428;C428;110A 116B 11BF;C428;110A 116B 11BF; +C429;C429;110A 116B 11C0;C429;110A 116B 11C0; +C42A;C42A;110A 116B 11C1;C42A;110A 116B 11C1; +C42B;C42B;110A 116B 11C2;C42B;110A 116B 11C2; +C42C;C42C;110A 116C;C42C;110A 116C; +C42D;C42D;110A 116C 11A8;C42D;110A 116C 11A8; +C42E;C42E;110A 116C 11A9;C42E;110A 116C 11A9; +C42F;C42F;110A 116C 11AA;C42F;110A 116C 11AA; +C430;C430;110A 116C 11AB;C430;110A 116C 11AB; +C431;C431;110A 116C 11AC;C431;110A 116C 11AC; +C432;C432;110A 116C 11AD;C432;110A 116C 11AD; +C433;C433;110A 116C 11AE;C433;110A 116C 11AE; +C434;C434;110A 116C 11AF;C434;110A 116C 11AF; +C435;C435;110A 116C 11B0;C435;110A 116C 11B0; +C436;C436;110A 116C 11B1;C436;110A 116C 11B1; +C437;C437;110A 116C 11B2;C437;110A 116C 11B2; +C438;C438;110A 116C 11B3;C438;110A 116C 11B3; +C439;C439;110A 116C 11B4;C439;110A 116C 11B4; +C43A;C43A;110A 116C 11B5;C43A;110A 116C 11B5; +C43B;C43B;110A 116C 11B6;C43B;110A 116C 11B6; +C43C;C43C;110A 116C 11B7;C43C;110A 116C 11B7; +C43D;C43D;110A 116C 11B8;C43D;110A 116C 11B8; +C43E;C43E;110A 116C 11B9;C43E;110A 116C 11B9; +C43F;C43F;110A 116C 11BA;C43F;110A 116C 11BA; +C440;C440;110A 116C 11BB;C440;110A 116C 11BB; +C441;C441;110A 116C 11BC;C441;110A 116C 11BC; +C442;C442;110A 116C 11BD;C442;110A 116C 11BD; +C443;C443;110A 116C 11BE;C443;110A 116C 11BE; +C444;C444;110A 116C 11BF;C444;110A 116C 11BF; +C445;C445;110A 116C 11C0;C445;110A 116C 11C0; +C446;C446;110A 116C 11C1;C446;110A 116C 11C1; +C447;C447;110A 116C 11C2;C447;110A 116C 11C2; +C448;C448;110A 116D;C448;110A 116D; +C449;C449;110A 116D 11A8;C449;110A 116D 11A8; +C44A;C44A;110A 116D 11A9;C44A;110A 116D 11A9; +C44B;C44B;110A 116D 11AA;C44B;110A 116D 11AA; +C44C;C44C;110A 116D 11AB;C44C;110A 116D 11AB; +C44D;C44D;110A 116D 11AC;C44D;110A 116D 11AC; +C44E;C44E;110A 116D 11AD;C44E;110A 116D 11AD; +C44F;C44F;110A 116D 11AE;C44F;110A 116D 11AE; +C450;C450;110A 116D 11AF;C450;110A 116D 11AF; +C451;C451;110A 116D 11B0;C451;110A 116D 11B0; +C452;C452;110A 116D 11B1;C452;110A 116D 11B1; +C453;C453;110A 116D 11B2;C453;110A 116D 11B2; +C454;C454;110A 116D 11B3;C454;110A 116D 11B3; +C455;C455;110A 116D 11B4;C455;110A 116D 11B4; +C456;C456;110A 116D 11B5;C456;110A 116D 11B5; +C457;C457;110A 116D 11B6;C457;110A 116D 11B6; +C458;C458;110A 116D 11B7;C458;110A 116D 11B7; +C459;C459;110A 116D 11B8;C459;110A 116D 11B8; +C45A;C45A;110A 116D 11B9;C45A;110A 116D 11B9; +C45B;C45B;110A 116D 11BA;C45B;110A 116D 11BA; +C45C;C45C;110A 116D 11BB;C45C;110A 116D 11BB; +C45D;C45D;110A 116D 11BC;C45D;110A 116D 11BC; +C45E;C45E;110A 116D 11BD;C45E;110A 116D 11BD; +C45F;C45F;110A 116D 11BE;C45F;110A 116D 11BE; +C460;C460;110A 116D 11BF;C460;110A 116D 11BF; +C461;C461;110A 116D 11C0;C461;110A 116D 11C0; +C462;C462;110A 116D 11C1;C462;110A 116D 11C1; +C463;C463;110A 116D 11C2;C463;110A 116D 11C2; +C464;C464;110A 116E;C464;110A 116E; +C465;C465;110A 116E 11A8;C465;110A 116E 11A8; +C466;C466;110A 116E 11A9;C466;110A 116E 11A9; +C467;C467;110A 116E 11AA;C467;110A 116E 11AA; +C468;C468;110A 116E 11AB;C468;110A 116E 11AB; +C469;C469;110A 116E 11AC;C469;110A 116E 11AC; +C46A;C46A;110A 116E 11AD;C46A;110A 116E 11AD; +C46B;C46B;110A 116E 11AE;C46B;110A 116E 11AE; +C46C;C46C;110A 116E 11AF;C46C;110A 116E 11AF; +C46D;C46D;110A 116E 11B0;C46D;110A 116E 11B0; +C46E;C46E;110A 116E 11B1;C46E;110A 116E 11B1; +C46F;C46F;110A 116E 11B2;C46F;110A 116E 11B2; +C470;C470;110A 116E 11B3;C470;110A 116E 11B3; +C471;C471;110A 116E 11B4;C471;110A 116E 11B4; +C472;C472;110A 116E 11B5;C472;110A 116E 11B5; +C473;C473;110A 116E 11B6;C473;110A 116E 11B6; +C474;C474;110A 116E 11B7;C474;110A 116E 11B7; +C475;C475;110A 116E 11B8;C475;110A 116E 11B8; +C476;C476;110A 116E 11B9;C476;110A 116E 11B9; +C477;C477;110A 116E 11BA;C477;110A 116E 11BA; +C478;C478;110A 116E 11BB;C478;110A 116E 11BB; +C479;C479;110A 116E 11BC;C479;110A 116E 11BC; +C47A;C47A;110A 116E 11BD;C47A;110A 116E 11BD; +C47B;C47B;110A 116E 11BE;C47B;110A 116E 11BE; +C47C;C47C;110A 116E 11BF;C47C;110A 116E 11BF; +C47D;C47D;110A 116E 11C0;C47D;110A 116E 11C0; +C47E;C47E;110A 116E 11C1;C47E;110A 116E 11C1; +C47F;C47F;110A 116E 11C2;C47F;110A 116E 11C2; +C480;C480;110A 116F;C480;110A 116F; +C481;C481;110A 116F 11A8;C481;110A 116F 11A8; +C482;C482;110A 116F 11A9;C482;110A 116F 11A9; +C483;C483;110A 116F 11AA;C483;110A 116F 11AA; +C484;C484;110A 116F 11AB;C484;110A 116F 11AB; +C485;C485;110A 116F 11AC;C485;110A 116F 11AC; +C486;C486;110A 116F 11AD;C486;110A 116F 11AD; +C487;C487;110A 116F 11AE;C487;110A 116F 11AE; +C488;C488;110A 116F 11AF;C488;110A 116F 11AF; +C489;C489;110A 116F 11B0;C489;110A 116F 11B0; +C48A;C48A;110A 116F 11B1;C48A;110A 116F 11B1; +C48B;C48B;110A 116F 11B2;C48B;110A 116F 11B2; +C48C;C48C;110A 116F 11B3;C48C;110A 116F 11B3; +C48D;C48D;110A 116F 11B4;C48D;110A 116F 11B4; +C48E;C48E;110A 116F 11B5;C48E;110A 116F 11B5; +C48F;C48F;110A 116F 11B6;C48F;110A 116F 11B6; +C490;C490;110A 116F 11B7;C490;110A 116F 11B7; +C491;C491;110A 116F 11B8;C491;110A 116F 11B8; +C492;C492;110A 116F 11B9;C492;110A 116F 11B9; +C493;C493;110A 116F 11BA;C493;110A 116F 11BA; +C494;C494;110A 116F 11BB;C494;110A 116F 11BB; +C495;C495;110A 116F 11BC;C495;110A 116F 11BC; +C496;C496;110A 116F 11BD;C496;110A 116F 11BD; +C497;C497;110A 116F 11BE;C497;110A 116F 11BE; +C498;C498;110A 116F 11BF;C498;110A 116F 11BF; +C499;C499;110A 116F 11C0;C499;110A 116F 11C0; +C49A;C49A;110A 116F 11C1;C49A;110A 116F 11C1; +C49B;C49B;110A 116F 11C2;C49B;110A 116F 11C2; +C49C;C49C;110A 1170;C49C;110A 1170; +C49D;C49D;110A 1170 11A8;C49D;110A 1170 11A8; +C49E;C49E;110A 1170 11A9;C49E;110A 1170 11A9; +C49F;C49F;110A 1170 11AA;C49F;110A 1170 11AA; +C4A0;C4A0;110A 1170 11AB;C4A0;110A 1170 11AB; +C4A1;C4A1;110A 1170 11AC;C4A1;110A 1170 11AC; +C4A2;C4A2;110A 1170 11AD;C4A2;110A 1170 11AD; +C4A3;C4A3;110A 1170 11AE;C4A3;110A 1170 11AE; +C4A4;C4A4;110A 1170 11AF;C4A4;110A 1170 11AF; +C4A5;C4A5;110A 1170 11B0;C4A5;110A 1170 11B0; +C4A6;C4A6;110A 1170 11B1;C4A6;110A 1170 11B1; +C4A7;C4A7;110A 1170 11B2;C4A7;110A 1170 11B2; +C4A8;C4A8;110A 1170 11B3;C4A8;110A 1170 11B3; +C4A9;C4A9;110A 1170 11B4;C4A9;110A 1170 11B4; +C4AA;C4AA;110A 1170 11B5;C4AA;110A 1170 11B5; +C4AB;C4AB;110A 1170 11B6;C4AB;110A 1170 11B6; +C4AC;C4AC;110A 1170 11B7;C4AC;110A 1170 11B7; +C4AD;C4AD;110A 1170 11B8;C4AD;110A 1170 11B8; +C4AE;C4AE;110A 1170 11B9;C4AE;110A 1170 11B9; +C4AF;C4AF;110A 1170 11BA;C4AF;110A 1170 11BA; +C4B0;C4B0;110A 1170 11BB;C4B0;110A 1170 11BB; +C4B1;C4B1;110A 1170 11BC;C4B1;110A 1170 11BC; +C4B2;C4B2;110A 1170 11BD;C4B2;110A 1170 11BD; +C4B3;C4B3;110A 1170 11BE;C4B3;110A 1170 11BE; +C4B4;C4B4;110A 1170 11BF;C4B4;110A 1170 11BF; +C4B5;C4B5;110A 1170 11C0;C4B5;110A 1170 11C0; +C4B6;C4B6;110A 1170 11C1;C4B6;110A 1170 11C1; +C4B7;C4B7;110A 1170 11C2;C4B7;110A 1170 11C2; +C4B8;C4B8;110A 1171;C4B8;110A 1171; +C4B9;C4B9;110A 1171 11A8;C4B9;110A 1171 11A8; +C4BA;C4BA;110A 1171 11A9;C4BA;110A 1171 11A9; +C4BB;C4BB;110A 1171 11AA;C4BB;110A 1171 11AA; +C4BC;C4BC;110A 1171 11AB;C4BC;110A 1171 11AB; +C4BD;C4BD;110A 1171 11AC;C4BD;110A 1171 11AC; +C4BE;C4BE;110A 1171 11AD;C4BE;110A 1171 11AD; +C4BF;C4BF;110A 1171 11AE;C4BF;110A 1171 11AE; +C4C0;C4C0;110A 1171 11AF;C4C0;110A 1171 11AF; +C4C1;C4C1;110A 1171 11B0;C4C1;110A 1171 11B0; +C4C2;C4C2;110A 1171 11B1;C4C2;110A 1171 11B1; +C4C3;C4C3;110A 1171 11B2;C4C3;110A 1171 11B2; +C4C4;C4C4;110A 1171 11B3;C4C4;110A 1171 11B3; +C4C5;C4C5;110A 1171 11B4;C4C5;110A 1171 11B4; +C4C6;C4C6;110A 1171 11B5;C4C6;110A 1171 11B5; +C4C7;C4C7;110A 1171 11B6;C4C7;110A 1171 11B6; +C4C8;C4C8;110A 1171 11B7;C4C8;110A 1171 11B7; +C4C9;C4C9;110A 1171 11B8;C4C9;110A 1171 11B8; +C4CA;C4CA;110A 1171 11B9;C4CA;110A 1171 11B9; +C4CB;C4CB;110A 1171 11BA;C4CB;110A 1171 11BA; +C4CC;C4CC;110A 1171 11BB;C4CC;110A 1171 11BB; +C4CD;C4CD;110A 1171 11BC;C4CD;110A 1171 11BC; +C4CE;C4CE;110A 1171 11BD;C4CE;110A 1171 11BD; +C4CF;C4CF;110A 1171 11BE;C4CF;110A 1171 11BE; +C4D0;C4D0;110A 1171 11BF;C4D0;110A 1171 11BF; +C4D1;C4D1;110A 1171 11C0;C4D1;110A 1171 11C0; +C4D2;C4D2;110A 1171 11C1;C4D2;110A 1171 11C1; +C4D3;C4D3;110A 1171 11C2;C4D3;110A 1171 11C2; +C4D4;C4D4;110A 1172;C4D4;110A 1172; +C4D5;C4D5;110A 1172 11A8;C4D5;110A 1172 11A8; +C4D6;C4D6;110A 1172 11A9;C4D6;110A 1172 11A9; +C4D7;C4D7;110A 1172 11AA;C4D7;110A 1172 11AA; +C4D8;C4D8;110A 1172 11AB;C4D8;110A 1172 11AB; +C4D9;C4D9;110A 1172 11AC;C4D9;110A 1172 11AC; +C4DA;C4DA;110A 1172 11AD;C4DA;110A 1172 11AD; +C4DB;C4DB;110A 1172 11AE;C4DB;110A 1172 11AE; +C4DC;C4DC;110A 1172 11AF;C4DC;110A 1172 11AF; +C4DD;C4DD;110A 1172 11B0;C4DD;110A 1172 11B0; +C4DE;C4DE;110A 1172 11B1;C4DE;110A 1172 11B1; +C4DF;C4DF;110A 1172 11B2;C4DF;110A 1172 11B2; +C4E0;C4E0;110A 1172 11B3;C4E0;110A 1172 11B3; +C4E1;C4E1;110A 1172 11B4;C4E1;110A 1172 11B4; +C4E2;C4E2;110A 1172 11B5;C4E2;110A 1172 11B5; +C4E3;C4E3;110A 1172 11B6;C4E3;110A 1172 11B6; +C4E4;C4E4;110A 1172 11B7;C4E4;110A 1172 11B7; +C4E5;C4E5;110A 1172 11B8;C4E5;110A 1172 11B8; +C4E6;C4E6;110A 1172 11B9;C4E6;110A 1172 11B9; +C4E7;C4E7;110A 1172 11BA;C4E7;110A 1172 11BA; +C4E8;C4E8;110A 1172 11BB;C4E8;110A 1172 11BB; +C4E9;C4E9;110A 1172 11BC;C4E9;110A 1172 11BC; +C4EA;C4EA;110A 1172 11BD;C4EA;110A 1172 11BD; +C4EB;C4EB;110A 1172 11BE;C4EB;110A 1172 11BE; +C4EC;C4EC;110A 1172 11BF;C4EC;110A 1172 11BF; +C4ED;C4ED;110A 1172 11C0;C4ED;110A 1172 11C0; +C4EE;C4EE;110A 1172 11C1;C4EE;110A 1172 11C1; +C4EF;C4EF;110A 1172 11C2;C4EF;110A 1172 11C2; +C4F0;C4F0;110A 1173;C4F0;110A 1173; +C4F1;C4F1;110A 1173 11A8;C4F1;110A 1173 11A8; +C4F2;C4F2;110A 1173 11A9;C4F2;110A 1173 11A9; +C4F3;C4F3;110A 1173 11AA;C4F3;110A 1173 11AA; +C4F4;C4F4;110A 1173 11AB;C4F4;110A 1173 11AB; +C4F5;C4F5;110A 1173 11AC;C4F5;110A 1173 11AC; +C4F6;C4F6;110A 1173 11AD;C4F6;110A 1173 11AD; +C4F7;C4F7;110A 1173 11AE;C4F7;110A 1173 11AE; +C4F8;C4F8;110A 1173 11AF;C4F8;110A 1173 11AF; +C4F9;C4F9;110A 1173 11B0;C4F9;110A 1173 11B0; +C4FA;C4FA;110A 1173 11B1;C4FA;110A 1173 11B1; +C4FB;C4FB;110A 1173 11B2;C4FB;110A 1173 11B2; +C4FC;C4FC;110A 1173 11B3;C4FC;110A 1173 11B3; +C4FD;C4FD;110A 1173 11B4;C4FD;110A 1173 11B4; +C4FE;C4FE;110A 1173 11B5;C4FE;110A 1173 11B5; +C4FF;C4FF;110A 1173 11B6;C4FF;110A 1173 11B6; +C500;C500;110A 1173 11B7;C500;110A 1173 11B7; +C501;C501;110A 1173 11B8;C501;110A 1173 11B8; +C502;C502;110A 1173 11B9;C502;110A 1173 11B9; +C503;C503;110A 1173 11BA;C503;110A 1173 11BA; +C504;C504;110A 1173 11BB;C504;110A 1173 11BB; +C505;C505;110A 1173 11BC;C505;110A 1173 11BC; +C506;C506;110A 1173 11BD;C506;110A 1173 11BD; +C507;C507;110A 1173 11BE;C507;110A 1173 11BE; +C508;C508;110A 1173 11BF;C508;110A 1173 11BF; +C509;C509;110A 1173 11C0;C509;110A 1173 11C0; +C50A;C50A;110A 1173 11C1;C50A;110A 1173 11C1; +C50B;C50B;110A 1173 11C2;C50B;110A 1173 11C2; +C50C;C50C;110A 1174;C50C;110A 1174; +C50D;C50D;110A 1174 11A8;C50D;110A 1174 11A8; +C50E;C50E;110A 1174 11A9;C50E;110A 1174 11A9; +C50F;C50F;110A 1174 11AA;C50F;110A 1174 11AA; +C510;C510;110A 1174 11AB;C510;110A 1174 11AB; +C511;C511;110A 1174 11AC;C511;110A 1174 11AC; +C512;C512;110A 1174 11AD;C512;110A 1174 11AD; +C513;C513;110A 1174 11AE;C513;110A 1174 11AE; +C514;C514;110A 1174 11AF;C514;110A 1174 11AF; +C515;C515;110A 1174 11B0;C515;110A 1174 11B0; +C516;C516;110A 1174 11B1;C516;110A 1174 11B1; +C517;C517;110A 1174 11B2;C517;110A 1174 11B2; +C518;C518;110A 1174 11B3;C518;110A 1174 11B3; +C519;C519;110A 1174 11B4;C519;110A 1174 11B4; +C51A;C51A;110A 1174 11B5;C51A;110A 1174 11B5; +C51B;C51B;110A 1174 11B6;C51B;110A 1174 11B6; +C51C;C51C;110A 1174 11B7;C51C;110A 1174 11B7; +C51D;C51D;110A 1174 11B8;C51D;110A 1174 11B8; +C51E;C51E;110A 1174 11B9;C51E;110A 1174 11B9; +C51F;C51F;110A 1174 11BA;C51F;110A 1174 11BA; +C520;C520;110A 1174 11BB;C520;110A 1174 11BB; +C521;C521;110A 1174 11BC;C521;110A 1174 11BC; +C522;C522;110A 1174 11BD;C522;110A 1174 11BD; +C523;C523;110A 1174 11BE;C523;110A 1174 11BE; +C524;C524;110A 1174 11BF;C524;110A 1174 11BF; +C525;C525;110A 1174 11C0;C525;110A 1174 11C0; +C526;C526;110A 1174 11C1;C526;110A 1174 11C1; +C527;C527;110A 1174 11C2;C527;110A 1174 11C2; +C528;C528;110A 1175;C528;110A 1175; +C529;C529;110A 1175 11A8;C529;110A 1175 11A8; +C52A;C52A;110A 1175 11A9;C52A;110A 1175 11A9; +C52B;C52B;110A 1175 11AA;C52B;110A 1175 11AA; +C52C;C52C;110A 1175 11AB;C52C;110A 1175 11AB; +C52D;C52D;110A 1175 11AC;C52D;110A 1175 11AC; +C52E;C52E;110A 1175 11AD;C52E;110A 1175 11AD; +C52F;C52F;110A 1175 11AE;C52F;110A 1175 11AE; +C530;C530;110A 1175 11AF;C530;110A 1175 11AF; +C531;C531;110A 1175 11B0;C531;110A 1175 11B0; +C532;C532;110A 1175 11B1;C532;110A 1175 11B1; +C533;C533;110A 1175 11B2;C533;110A 1175 11B2; +C534;C534;110A 1175 11B3;C534;110A 1175 11B3; +C535;C535;110A 1175 11B4;C535;110A 1175 11B4; +C536;C536;110A 1175 11B5;C536;110A 1175 11B5; +C537;C537;110A 1175 11B6;C537;110A 1175 11B6; +C538;C538;110A 1175 11B7;C538;110A 1175 11B7; +C539;C539;110A 1175 11B8;C539;110A 1175 11B8; +C53A;C53A;110A 1175 11B9;C53A;110A 1175 11B9; +C53B;C53B;110A 1175 11BA;C53B;110A 1175 11BA; +C53C;C53C;110A 1175 11BB;C53C;110A 1175 11BB; +C53D;C53D;110A 1175 11BC;C53D;110A 1175 11BC; +C53E;C53E;110A 1175 11BD;C53E;110A 1175 11BD; +C53F;C53F;110A 1175 11BE;C53F;110A 1175 11BE; +C540;C540;110A 1175 11BF;C540;110A 1175 11BF; +C541;C541;110A 1175 11C0;C541;110A 1175 11C0; +C542;C542;110A 1175 11C1;C542;110A 1175 11C1; +C543;C543;110A 1175 11C2;C543;110A 1175 11C2; +C544;C544;110B 1161;C544;110B 1161; +C545;C545;110B 1161 11A8;C545;110B 1161 11A8; +C546;C546;110B 1161 11A9;C546;110B 1161 11A9; +C547;C547;110B 1161 11AA;C547;110B 1161 11AA; +C548;C548;110B 1161 11AB;C548;110B 1161 11AB; +C549;C549;110B 1161 11AC;C549;110B 1161 11AC; +C54A;C54A;110B 1161 11AD;C54A;110B 1161 11AD; +C54B;C54B;110B 1161 11AE;C54B;110B 1161 11AE; +C54C;C54C;110B 1161 11AF;C54C;110B 1161 11AF; +C54D;C54D;110B 1161 11B0;C54D;110B 1161 11B0; +C54E;C54E;110B 1161 11B1;C54E;110B 1161 11B1; +C54F;C54F;110B 1161 11B2;C54F;110B 1161 11B2; +C550;C550;110B 1161 11B3;C550;110B 1161 11B3; +C551;C551;110B 1161 11B4;C551;110B 1161 11B4; +C552;C552;110B 1161 11B5;C552;110B 1161 11B5; +C553;C553;110B 1161 11B6;C553;110B 1161 11B6; +C554;C554;110B 1161 11B7;C554;110B 1161 11B7; +C555;C555;110B 1161 11B8;C555;110B 1161 11B8; +C556;C556;110B 1161 11B9;C556;110B 1161 11B9; +C557;C557;110B 1161 11BA;C557;110B 1161 11BA; +C558;C558;110B 1161 11BB;C558;110B 1161 11BB; +C559;C559;110B 1161 11BC;C559;110B 1161 11BC; +C55A;C55A;110B 1161 11BD;C55A;110B 1161 11BD; +C55B;C55B;110B 1161 11BE;C55B;110B 1161 11BE; +C55C;C55C;110B 1161 11BF;C55C;110B 1161 11BF; +C55D;C55D;110B 1161 11C0;C55D;110B 1161 11C0; +C55E;C55E;110B 1161 11C1;C55E;110B 1161 11C1; +C55F;C55F;110B 1161 11C2;C55F;110B 1161 11C2; +C560;C560;110B 1162;C560;110B 1162; +C561;C561;110B 1162 11A8;C561;110B 1162 11A8; +C562;C562;110B 1162 11A9;C562;110B 1162 11A9; +C563;C563;110B 1162 11AA;C563;110B 1162 11AA; +C564;C564;110B 1162 11AB;C564;110B 1162 11AB; +C565;C565;110B 1162 11AC;C565;110B 1162 11AC; +C566;C566;110B 1162 11AD;C566;110B 1162 11AD; +C567;C567;110B 1162 11AE;C567;110B 1162 11AE; +C568;C568;110B 1162 11AF;C568;110B 1162 11AF; +C569;C569;110B 1162 11B0;C569;110B 1162 11B0; +C56A;C56A;110B 1162 11B1;C56A;110B 1162 11B1; +C56B;C56B;110B 1162 11B2;C56B;110B 1162 11B2; +C56C;C56C;110B 1162 11B3;C56C;110B 1162 11B3; +C56D;C56D;110B 1162 11B4;C56D;110B 1162 11B4; +C56E;C56E;110B 1162 11B5;C56E;110B 1162 11B5; +C56F;C56F;110B 1162 11B6;C56F;110B 1162 11B6; +C570;C570;110B 1162 11B7;C570;110B 1162 11B7; +C571;C571;110B 1162 11B8;C571;110B 1162 11B8; +C572;C572;110B 1162 11B9;C572;110B 1162 11B9; +C573;C573;110B 1162 11BA;C573;110B 1162 11BA; +C574;C574;110B 1162 11BB;C574;110B 1162 11BB; +C575;C575;110B 1162 11BC;C575;110B 1162 11BC; +C576;C576;110B 1162 11BD;C576;110B 1162 11BD; +C577;C577;110B 1162 11BE;C577;110B 1162 11BE; +C578;C578;110B 1162 11BF;C578;110B 1162 11BF; +C579;C579;110B 1162 11C0;C579;110B 1162 11C0; +C57A;C57A;110B 1162 11C1;C57A;110B 1162 11C1; +C57B;C57B;110B 1162 11C2;C57B;110B 1162 11C2; +C57C;C57C;110B 1163;C57C;110B 1163; +C57D;C57D;110B 1163 11A8;C57D;110B 1163 11A8; +C57E;C57E;110B 1163 11A9;C57E;110B 1163 11A9; +C57F;C57F;110B 1163 11AA;C57F;110B 1163 11AA; +C580;C580;110B 1163 11AB;C580;110B 1163 11AB; +C581;C581;110B 1163 11AC;C581;110B 1163 11AC; +C582;C582;110B 1163 11AD;C582;110B 1163 11AD; +C583;C583;110B 1163 11AE;C583;110B 1163 11AE; +C584;C584;110B 1163 11AF;C584;110B 1163 11AF; +C585;C585;110B 1163 11B0;C585;110B 1163 11B0; +C586;C586;110B 1163 11B1;C586;110B 1163 11B1; +C587;C587;110B 1163 11B2;C587;110B 1163 11B2; +C588;C588;110B 1163 11B3;C588;110B 1163 11B3; +C589;C589;110B 1163 11B4;C589;110B 1163 11B4; +C58A;C58A;110B 1163 11B5;C58A;110B 1163 11B5; +C58B;C58B;110B 1163 11B6;C58B;110B 1163 11B6; +C58C;C58C;110B 1163 11B7;C58C;110B 1163 11B7; +C58D;C58D;110B 1163 11B8;C58D;110B 1163 11B8; +C58E;C58E;110B 1163 11B9;C58E;110B 1163 11B9; +C58F;C58F;110B 1163 11BA;C58F;110B 1163 11BA; +C590;C590;110B 1163 11BB;C590;110B 1163 11BB; +C591;C591;110B 1163 11BC;C591;110B 1163 11BC; +C592;C592;110B 1163 11BD;C592;110B 1163 11BD; +C593;C593;110B 1163 11BE;C593;110B 1163 11BE; +C594;C594;110B 1163 11BF;C594;110B 1163 11BF; +C595;C595;110B 1163 11C0;C595;110B 1163 11C0; +C596;C596;110B 1163 11C1;C596;110B 1163 11C1; +C597;C597;110B 1163 11C2;C597;110B 1163 11C2; +C598;C598;110B 1164;C598;110B 1164; +C599;C599;110B 1164 11A8;C599;110B 1164 11A8; +C59A;C59A;110B 1164 11A9;C59A;110B 1164 11A9; +C59B;C59B;110B 1164 11AA;C59B;110B 1164 11AA; +C59C;C59C;110B 1164 11AB;C59C;110B 1164 11AB; +C59D;C59D;110B 1164 11AC;C59D;110B 1164 11AC; +C59E;C59E;110B 1164 11AD;C59E;110B 1164 11AD; +C59F;C59F;110B 1164 11AE;C59F;110B 1164 11AE; +C5A0;C5A0;110B 1164 11AF;C5A0;110B 1164 11AF; +C5A1;C5A1;110B 1164 11B0;C5A1;110B 1164 11B0; +C5A2;C5A2;110B 1164 11B1;C5A2;110B 1164 11B1; +C5A3;C5A3;110B 1164 11B2;C5A3;110B 1164 11B2; +C5A4;C5A4;110B 1164 11B3;C5A4;110B 1164 11B3; +C5A5;C5A5;110B 1164 11B4;C5A5;110B 1164 11B4; +C5A6;C5A6;110B 1164 11B5;C5A6;110B 1164 11B5; +C5A7;C5A7;110B 1164 11B6;C5A7;110B 1164 11B6; +C5A8;C5A8;110B 1164 11B7;C5A8;110B 1164 11B7; +C5A9;C5A9;110B 1164 11B8;C5A9;110B 1164 11B8; +C5AA;C5AA;110B 1164 11B9;C5AA;110B 1164 11B9; +C5AB;C5AB;110B 1164 11BA;C5AB;110B 1164 11BA; +C5AC;C5AC;110B 1164 11BB;C5AC;110B 1164 11BB; +C5AD;C5AD;110B 1164 11BC;C5AD;110B 1164 11BC; +C5AE;C5AE;110B 1164 11BD;C5AE;110B 1164 11BD; +C5AF;C5AF;110B 1164 11BE;C5AF;110B 1164 11BE; +C5B0;C5B0;110B 1164 11BF;C5B0;110B 1164 11BF; +C5B1;C5B1;110B 1164 11C0;C5B1;110B 1164 11C0; +C5B2;C5B2;110B 1164 11C1;C5B2;110B 1164 11C1; +C5B3;C5B3;110B 1164 11C2;C5B3;110B 1164 11C2; +C5B4;C5B4;110B 1165;C5B4;110B 1165; +C5B5;C5B5;110B 1165 11A8;C5B5;110B 1165 11A8; +C5B6;C5B6;110B 1165 11A9;C5B6;110B 1165 11A9; +C5B7;C5B7;110B 1165 11AA;C5B7;110B 1165 11AA; +C5B8;C5B8;110B 1165 11AB;C5B8;110B 1165 11AB; +C5B9;C5B9;110B 1165 11AC;C5B9;110B 1165 11AC; +C5BA;C5BA;110B 1165 11AD;C5BA;110B 1165 11AD; +C5BB;C5BB;110B 1165 11AE;C5BB;110B 1165 11AE; +C5BC;C5BC;110B 1165 11AF;C5BC;110B 1165 11AF; +C5BD;C5BD;110B 1165 11B0;C5BD;110B 1165 11B0; +C5BE;C5BE;110B 1165 11B1;C5BE;110B 1165 11B1; +C5BF;C5BF;110B 1165 11B2;C5BF;110B 1165 11B2; +C5C0;C5C0;110B 1165 11B3;C5C0;110B 1165 11B3; +C5C1;C5C1;110B 1165 11B4;C5C1;110B 1165 11B4; +C5C2;C5C2;110B 1165 11B5;C5C2;110B 1165 11B5; +C5C3;C5C3;110B 1165 11B6;C5C3;110B 1165 11B6; +C5C4;C5C4;110B 1165 11B7;C5C4;110B 1165 11B7; +C5C5;C5C5;110B 1165 11B8;C5C5;110B 1165 11B8; +C5C6;C5C6;110B 1165 11B9;C5C6;110B 1165 11B9; +C5C7;C5C7;110B 1165 11BA;C5C7;110B 1165 11BA; +C5C8;C5C8;110B 1165 11BB;C5C8;110B 1165 11BB; +C5C9;C5C9;110B 1165 11BC;C5C9;110B 1165 11BC; +C5CA;C5CA;110B 1165 11BD;C5CA;110B 1165 11BD; +C5CB;C5CB;110B 1165 11BE;C5CB;110B 1165 11BE; +C5CC;C5CC;110B 1165 11BF;C5CC;110B 1165 11BF; +C5CD;C5CD;110B 1165 11C0;C5CD;110B 1165 11C0; +C5CE;C5CE;110B 1165 11C1;C5CE;110B 1165 11C1; +C5CF;C5CF;110B 1165 11C2;C5CF;110B 1165 11C2; +C5D0;C5D0;110B 1166;C5D0;110B 1166; +C5D1;C5D1;110B 1166 11A8;C5D1;110B 1166 11A8; +C5D2;C5D2;110B 1166 11A9;C5D2;110B 1166 11A9; +C5D3;C5D3;110B 1166 11AA;C5D3;110B 1166 11AA; +C5D4;C5D4;110B 1166 11AB;C5D4;110B 1166 11AB; +C5D5;C5D5;110B 1166 11AC;C5D5;110B 1166 11AC; +C5D6;C5D6;110B 1166 11AD;C5D6;110B 1166 11AD; +C5D7;C5D7;110B 1166 11AE;C5D7;110B 1166 11AE; +C5D8;C5D8;110B 1166 11AF;C5D8;110B 1166 11AF; +C5D9;C5D9;110B 1166 11B0;C5D9;110B 1166 11B0; +C5DA;C5DA;110B 1166 11B1;C5DA;110B 1166 11B1; +C5DB;C5DB;110B 1166 11B2;C5DB;110B 1166 11B2; +C5DC;C5DC;110B 1166 11B3;C5DC;110B 1166 11B3; +C5DD;C5DD;110B 1166 11B4;C5DD;110B 1166 11B4; +C5DE;C5DE;110B 1166 11B5;C5DE;110B 1166 11B5; +C5DF;C5DF;110B 1166 11B6;C5DF;110B 1166 11B6; +C5E0;C5E0;110B 1166 11B7;C5E0;110B 1166 11B7; +C5E1;C5E1;110B 1166 11B8;C5E1;110B 1166 11B8; +C5E2;C5E2;110B 1166 11B9;C5E2;110B 1166 11B9; +C5E3;C5E3;110B 1166 11BA;C5E3;110B 1166 11BA; +C5E4;C5E4;110B 1166 11BB;C5E4;110B 1166 11BB; +C5E5;C5E5;110B 1166 11BC;C5E5;110B 1166 11BC; +C5E6;C5E6;110B 1166 11BD;C5E6;110B 1166 11BD; +C5E7;C5E7;110B 1166 11BE;C5E7;110B 1166 11BE; +C5E8;C5E8;110B 1166 11BF;C5E8;110B 1166 11BF; +C5E9;C5E9;110B 1166 11C0;C5E9;110B 1166 11C0; +C5EA;C5EA;110B 1166 11C1;C5EA;110B 1166 11C1; +C5EB;C5EB;110B 1166 11C2;C5EB;110B 1166 11C2; +C5EC;C5EC;110B 1167;C5EC;110B 1167; +C5ED;C5ED;110B 1167 11A8;C5ED;110B 1167 11A8; +C5EE;C5EE;110B 1167 11A9;C5EE;110B 1167 11A9; +C5EF;C5EF;110B 1167 11AA;C5EF;110B 1167 11AA; +C5F0;C5F0;110B 1167 11AB;C5F0;110B 1167 11AB; +C5F1;C5F1;110B 1167 11AC;C5F1;110B 1167 11AC; +C5F2;C5F2;110B 1167 11AD;C5F2;110B 1167 11AD; +C5F3;C5F3;110B 1167 11AE;C5F3;110B 1167 11AE; +C5F4;C5F4;110B 1167 11AF;C5F4;110B 1167 11AF; +C5F5;C5F5;110B 1167 11B0;C5F5;110B 1167 11B0; +C5F6;C5F6;110B 1167 11B1;C5F6;110B 1167 11B1; +C5F7;C5F7;110B 1167 11B2;C5F7;110B 1167 11B2; +C5F8;C5F8;110B 1167 11B3;C5F8;110B 1167 11B3; +C5F9;C5F9;110B 1167 11B4;C5F9;110B 1167 11B4; +C5FA;C5FA;110B 1167 11B5;C5FA;110B 1167 11B5; +C5FB;C5FB;110B 1167 11B6;C5FB;110B 1167 11B6; +C5FC;C5FC;110B 1167 11B7;C5FC;110B 1167 11B7; +C5FD;C5FD;110B 1167 11B8;C5FD;110B 1167 11B8; +C5FE;C5FE;110B 1167 11B9;C5FE;110B 1167 11B9; +C5FF;C5FF;110B 1167 11BA;C5FF;110B 1167 11BA; +C600;C600;110B 1167 11BB;C600;110B 1167 11BB; +C601;C601;110B 1167 11BC;C601;110B 1167 11BC; +C602;C602;110B 1167 11BD;C602;110B 1167 11BD; +C603;C603;110B 1167 11BE;C603;110B 1167 11BE; +C604;C604;110B 1167 11BF;C604;110B 1167 11BF; +C605;C605;110B 1167 11C0;C605;110B 1167 11C0; +C606;C606;110B 1167 11C1;C606;110B 1167 11C1; +C607;C607;110B 1167 11C2;C607;110B 1167 11C2; +C608;C608;110B 1168;C608;110B 1168; +C609;C609;110B 1168 11A8;C609;110B 1168 11A8; +C60A;C60A;110B 1168 11A9;C60A;110B 1168 11A9; +C60B;C60B;110B 1168 11AA;C60B;110B 1168 11AA; +C60C;C60C;110B 1168 11AB;C60C;110B 1168 11AB; +C60D;C60D;110B 1168 11AC;C60D;110B 1168 11AC; +C60E;C60E;110B 1168 11AD;C60E;110B 1168 11AD; +C60F;C60F;110B 1168 11AE;C60F;110B 1168 11AE; +C610;C610;110B 1168 11AF;C610;110B 1168 11AF; +C611;C611;110B 1168 11B0;C611;110B 1168 11B0; +C612;C612;110B 1168 11B1;C612;110B 1168 11B1; +C613;C613;110B 1168 11B2;C613;110B 1168 11B2; +C614;C614;110B 1168 11B3;C614;110B 1168 11B3; +C615;C615;110B 1168 11B4;C615;110B 1168 11B4; +C616;C616;110B 1168 11B5;C616;110B 1168 11B5; +C617;C617;110B 1168 11B6;C617;110B 1168 11B6; +C618;C618;110B 1168 11B7;C618;110B 1168 11B7; +C619;C619;110B 1168 11B8;C619;110B 1168 11B8; +C61A;C61A;110B 1168 11B9;C61A;110B 1168 11B9; +C61B;C61B;110B 1168 11BA;C61B;110B 1168 11BA; +C61C;C61C;110B 1168 11BB;C61C;110B 1168 11BB; +C61D;C61D;110B 1168 11BC;C61D;110B 1168 11BC; +C61E;C61E;110B 1168 11BD;C61E;110B 1168 11BD; +C61F;C61F;110B 1168 11BE;C61F;110B 1168 11BE; +C620;C620;110B 1168 11BF;C620;110B 1168 11BF; +C621;C621;110B 1168 11C0;C621;110B 1168 11C0; +C622;C622;110B 1168 11C1;C622;110B 1168 11C1; +C623;C623;110B 1168 11C2;C623;110B 1168 11C2; +C624;C624;110B 1169;C624;110B 1169; +C625;C625;110B 1169 11A8;C625;110B 1169 11A8; +C626;C626;110B 1169 11A9;C626;110B 1169 11A9; +C627;C627;110B 1169 11AA;C627;110B 1169 11AA; +C628;C628;110B 1169 11AB;C628;110B 1169 11AB; +C629;C629;110B 1169 11AC;C629;110B 1169 11AC; +C62A;C62A;110B 1169 11AD;C62A;110B 1169 11AD; +C62B;C62B;110B 1169 11AE;C62B;110B 1169 11AE; +C62C;C62C;110B 1169 11AF;C62C;110B 1169 11AF; +C62D;C62D;110B 1169 11B0;C62D;110B 1169 11B0; +C62E;C62E;110B 1169 11B1;C62E;110B 1169 11B1; +C62F;C62F;110B 1169 11B2;C62F;110B 1169 11B2; +C630;C630;110B 1169 11B3;C630;110B 1169 11B3; +C631;C631;110B 1169 11B4;C631;110B 1169 11B4; +C632;C632;110B 1169 11B5;C632;110B 1169 11B5; +C633;C633;110B 1169 11B6;C633;110B 1169 11B6; +C634;C634;110B 1169 11B7;C634;110B 1169 11B7; +C635;C635;110B 1169 11B8;C635;110B 1169 11B8; +C636;C636;110B 1169 11B9;C636;110B 1169 11B9; +C637;C637;110B 1169 11BA;C637;110B 1169 11BA; +C638;C638;110B 1169 11BB;C638;110B 1169 11BB; +C639;C639;110B 1169 11BC;C639;110B 1169 11BC; +C63A;C63A;110B 1169 11BD;C63A;110B 1169 11BD; +C63B;C63B;110B 1169 11BE;C63B;110B 1169 11BE; +C63C;C63C;110B 1169 11BF;C63C;110B 1169 11BF; +C63D;C63D;110B 1169 11C0;C63D;110B 1169 11C0; +C63E;C63E;110B 1169 11C1;C63E;110B 1169 11C1; +C63F;C63F;110B 1169 11C2;C63F;110B 1169 11C2; +C640;C640;110B 116A;C640;110B 116A; +C641;C641;110B 116A 11A8;C641;110B 116A 11A8; +C642;C642;110B 116A 11A9;C642;110B 116A 11A9; +C643;C643;110B 116A 11AA;C643;110B 116A 11AA; +C644;C644;110B 116A 11AB;C644;110B 116A 11AB; +C645;C645;110B 116A 11AC;C645;110B 116A 11AC; +C646;C646;110B 116A 11AD;C646;110B 116A 11AD; +C647;C647;110B 116A 11AE;C647;110B 116A 11AE; +C648;C648;110B 116A 11AF;C648;110B 116A 11AF; +C649;C649;110B 116A 11B0;C649;110B 116A 11B0; +C64A;C64A;110B 116A 11B1;C64A;110B 116A 11B1; +C64B;C64B;110B 116A 11B2;C64B;110B 116A 11B2; +C64C;C64C;110B 116A 11B3;C64C;110B 116A 11B3; +C64D;C64D;110B 116A 11B4;C64D;110B 116A 11B4; +C64E;C64E;110B 116A 11B5;C64E;110B 116A 11B5; +C64F;C64F;110B 116A 11B6;C64F;110B 116A 11B6; +C650;C650;110B 116A 11B7;C650;110B 116A 11B7; +C651;C651;110B 116A 11B8;C651;110B 116A 11B8; +C652;C652;110B 116A 11B9;C652;110B 116A 11B9; +C653;C653;110B 116A 11BA;C653;110B 116A 11BA; +C654;C654;110B 116A 11BB;C654;110B 116A 11BB; +C655;C655;110B 116A 11BC;C655;110B 116A 11BC; +C656;C656;110B 116A 11BD;C656;110B 116A 11BD; +C657;C657;110B 116A 11BE;C657;110B 116A 11BE; +C658;C658;110B 116A 11BF;C658;110B 116A 11BF; +C659;C659;110B 116A 11C0;C659;110B 116A 11C0; +C65A;C65A;110B 116A 11C1;C65A;110B 116A 11C1; +C65B;C65B;110B 116A 11C2;C65B;110B 116A 11C2; +C65C;C65C;110B 116B;C65C;110B 116B; +C65D;C65D;110B 116B 11A8;C65D;110B 116B 11A8; +C65E;C65E;110B 116B 11A9;C65E;110B 116B 11A9; +C65F;C65F;110B 116B 11AA;C65F;110B 116B 11AA; +C660;C660;110B 116B 11AB;C660;110B 116B 11AB; +C661;C661;110B 116B 11AC;C661;110B 116B 11AC; +C662;C662;110B 116B 11AD;C662;110B 116B 11AD; +C663;C663;110B 116B 11AE;C663;110B 116B 11AE; +C664;C664;110B 116B 11AF;C664;110B 116B 11AF; +C665;C665;110B 116B 11B0;C665;110B 116B 11B0; +C666;C666;110B 116B 11B1;C666;110B 116B 11B1; +C667;C667;110B 116B 11B2;C667;110B 116B 11B2; +C668;C668;110B 116B 11B3;C668;110B 116B 11B3; +C669;C669;110B 116B 11B4;C669;110B 116B 11B4; +C66A;C66A;110B 116B 11B5;C66A;110B 116B 11B5; +C66B;C66B;110B 116B 11B6;C66B;110B 116B 11B6; +C66C;C66C;110B 116B 11B7;C66C;110B 116B 11B7; +C66D;C66D;110B 116B 11B8;C66D;110B 116B 11B8; +C66E;C66E;110B 116B 11B9;C66E;110B 116B 11B9; +C66F;C66F;110B 116B 11BA;C66F;110B 116B 11BA; +C670;C670;110B 116B 11BB;C670;110B 116B 11BB; +C671;C671;110B 116B 11BC;C671;110B 116B 11BC; +C672;C672;110B 116B 11BD;C672;110B 116B 11BD; +C673;C673;110B 116B 11BE;C673;110B 116B 11BE; +C674;C674;110B 116B 11BF;C674;110B 116B 11BF; +C675;C675;110B 116B 11C0;C675;110B 116B 11C0; +C676;C676;110B 116B 11C1;C676;110B 116B 11C1; +C677;C677;110B 116B 11C2;C677;110B 116B 11C2; +C678;C678;110B 116C;C678;110B 116C; +C679;C679;110B 116C 11A8;C679;110B 116C 11A8; +C67A;C67A;110B 116C 11A9;C67A;110B 116C 11A9; +C67B;C67B;110B 116C 11AA;C67B;110B 116C 11AA; +C67C;C67C;110B 116C 11AB;C67C;110B 116C 11AB; +C67D;C67D;110B 116C 11AC;C67D;110B 116C 11AC; +C67E;C67E;110B 116C 11AD;C67E;110B 116C 11AD; +C67F;C67F;110B 116C 11AE;C67F;110B 116C 11AE; +C680;C680;110B 116C 11AF;C680;110B 116C 11AF; +C681;C681;110B 116C 11B0;C681;110B 116C 11B0; +C682;C682;110B 116C 11B1;C682;110B 116C 11B1; +C683;C683;110B 116C 11B2;C683;110B 116C 11B2; +C684;C684;110B 116C 11B3;C684;110B 116C 11B3; +C685;C685;110B 116C 11B4;C685;110B 116C 11B4; +C686;C686;110B 116C 11B5;C686;110B 116C 11B5; +C687;C687;110B 116C 11B6;C687;110B 116C 11B6; +C688;C688;110B 116C 11B7;C688;110B 116C 11B7; +C689;C689;110B 116C 11B8;C689;110B 116C 11B8; +C68A;C68A;110B 116C 11B9;C68A;110B 116C 11B9; +C68B;C68B;110B 116C 11BA;C68B;110B 116C 11BA; +C68C;C68C;110B 116C 11BB;C68C;110B 116C 11BB; +C68D;C68D;110B 116C 11BC;C68D;110B 116C 11BC; +C68E;C68E;110B 116C 11BD;C68E;110B 116C 11BD; +C68F;C68F;110B 116C 11BE;C68F;110B 116C 11BE; +C690;C690;110B 116C 11BF;C690;110B 116C 11BF; +C691;C691;110B 116C 11C0;C691;110B 116C 11C0; +C692;C692;110B 116C 11C1;C692;110B 116C 11C1; +C693;C693;110B 116C 11C2;C693;110B 116C 11C2; +C694;C694;110B 116D;C694;110B 116D; +C695;C695;110B 116D 11A8;C695;110B 116D 11A8; +C696;C696;110B 116D 11A9;C696;110B 116D 11A9; +C697;C697;110B 116D 11AA;C697;110B 116D 11AA; +C698;C698;110B 116D 11AB;C698;110B 116D 11AB; +C699;C699;110B 116D 11AC;C699;110B 116D 11AC; +C69A;C69A;110B 116D 11AD;C69A;110B 116D 11AD; +C69B;C69B;110B 116D 11AE;C69B;110B 116D 11AE; +C69C;C69C;110B 116D 11AF;C69C;110B 116D 11AF; +C69D;C69D;110B 116D 11B0;C69D;110B 116D 11B0; +C69E;C69E;110B 116D 11B1;C69E;110B 116D 11B1; +C69F;C69F;110B 116D 11B2;C69F;110B 116D 11B2; +C6A0;C6A0;110B 116D 11B3;C6A0;110B 116D 11B3; +C6A1;C6A1;110B 116D 11B4;C6A1;110B 116D 11B4; +C6A2;C6A2;110B 116D 11B5;C6A2;110B 116D 11B5; +C6A3;C6A3;110B 116D 11B6;C6A3;110B 116D 11B6; +C6A4;C6A4;110B 116D 11B7;C6A4;110B 116D 11B7; +C6A5;C6A5;110B 116D 11B8;C6A5;110B 116D 11B8; +C6A6;C6A6;110B 116D 11B9;C6A6;110B 116D 11B9; +C6A7;C6A7;110B 116D 11BA;C6A7;110B 116D 11BA; +C6A8;C6A8;110B 116D 11BB;C6A8;110B 116D 11BB; +C6A9;C6A9;110B 116D 11BC;C6A9;110B 116D 11BC; +C6AA;C6AA;110B 116D 11BD;C6AA;110B 116D 11BD; +C6AB;C6AB;110B 116D 11BE;C6AB;110B 116D 11BE; +C6AC;C6AC;110B 116D 11BF;C6AC;110B 116D 11BF; +C6AD;C6AD;110B 116D 11C0;C6AD;110B 116D 11C0; +C6AE;C6AE;110B 116D 11C1;C6AE;110B 116D 11C1; +C6AF;C6AF;110B 116D 11C2;C6AF;110B 116D 11C2; +C6B0;C6B0;110B 116E;C6B0;110B 116E; +C6B1;C6B1;110B 116E 11A8;C6B1;110B 116E 11A8; +C6B2;C6B2;110B 116E 11A9;C6B2;110B 116E 11A9; +C6B3;C6B3;110B 116E 11AA;C6B3;110B 116E 11AA; +C6B4;C6B4;110B 116E 11AB;C6B4;110B 116E 11AB; +C6B5;C6B5;110B 116E 11AC;C6B5;110B 116E 11AC; +C6B6;C6B6;110B 116E 11AD;C6B6;110B 116E 11AD; +C6B7;C6B7;110B 116E 11AE;C6B7;110B 116E 11AE; +C6B8;C6B8;110B 116E 11AF;C6B8;110B 116E 11AF; +C6B9;C6B9;110B 116E 11B0;C6B9;110B 116E 11B0; +C6BA;C6BA;110B 116E 11B1;C6BA;110B 116E 11B1; +C6BB;C6BB;110B 116E 11B2;C6BB;110B 116E 11B2; +C6BC;C6BC;110B 116E 11B3;C6BC;110B 116E 11B3; +C6BD;C6BD;110B 116E 11B4;C6BD;110B 116E 11B4; +C6BE;C6BE;110B 116E 11B5;C6BE;110B 116E 11B5; +C6BF;C6BF;110B 116E 11B6;C6BF;110B 116E 11B6; +C6C0;C6C0;110B 116E 11B7;C6C0;110B 116E 11B7; +C6C1;C6C1;110B 116E 11B8;C6C1;110B 116E 11B8; +C6C2;C6C2;110B 116E 11B9;C6C2;110B 116E 11B9; +C6C3;C6C3;110B 116E 11BA;C6C3;110B 116E 11BA; +C6C4;C6C4;110B 116E 11BB;C6C4;110B 116E 11BB; +C6C5;C6C5;110B 116E 11BC;C6C5;110B 116E 11BC; +C6C6;C6C6;110B 116E 11BD;C6C6;110B 116E 11BD; +C6C7;C6C7;110B 116E 11BE;C6C7;110B 116E 11BE; +C6C8;C6C8;110B 116E 11BF;C6C8;110B 116E 11BF; +C6C9;C6C9;110B 116E 11C0;C6C9;110B 116E 11C0; +C6CA;C6CA;110B 116E 11C1;C6CA;110B 116E 11C1; +C6CB;C6CB;110B 116E 11C2;C6CB;110B 116E 11C2; +C6CC;C6CC;110B 116F;C6CC;110B 116F; +C6CD;C6CD;110B 116F 11A8;C6CD;110B 116F 11A8; +C6CE;C6CE;110B 116F 11A9;C6CE;110B 116F 11A9; +C6CF;C6CF;110B 116F 11AA;C6CF;110B 116F 11AA; +C6D0;C6D0;110B 116F 11AB;C6D0;110B 116F 11AB; +C6D1;C6D1;110B 116F 11AC;C6D1;110B 116F 11AC; +C6D2;C6D2;110B 116F 11AD;C6D2;110B 116F 11AD; +C6D3;C6D3;110B 116F 11AE;C6D3;110B 116F 11AE; +C6D4;C6D4;110B 116F 11AF;C6D4;110B 116F 11AF; +C6D5;C6D5;110B 116F 11B0;C6D5;110B 116F 11B0; +C6D6;C6D6;110B 116F 11B1;C6D6;110B 116F 11B1; +C6D7;C6D7;110B 116F 11B2;C6D7;110B 116F 11B2; +C6D8;C6D8;110B 116F 11B3;C6D8;110B 116F 11B3; +C6D9;C6D9;110B 116F 11B4;C6D9;110B 116F 11B4; +C6DA;C6DA;110B 116F 11B5;C6DA;110B 116F 11B5; +C6DB;C6DB;110B 116F 11B6;C6DB;110B 116F 11B6; +C6DC;C6DC;110B 116F 11B7;C6DC;110B 116F 11B7; +C6DD;C6DD;110B 116F 11B8;C6DD;110B 116F 11B8; +C6DE;C6DE;110B 116F 11B9;C6DE;110B 116F 11B9; +C6DF;C6DF;110B 116F 11BA;C6DF;110B 116F 11BA; +C6E0;C6E0;110B 116F 11BB;C6E0;110B 116F 11BB; +C6E1;C6E1;110B 116F 11BC;C6E1;110B 116F 11BC; +C6E2;C6E2;110B 116F 11BD;C6E2;110B 116F 11BD; +C6E3;C6E3;110B 116F 11BE;C6E3;110B 116F 11BE; +C6E4;C6E4;110B 116F 11BF;C6E4;110B 116F 11BF; +C6E5;C6E5;110B 116F 11C0;C6E5;110B 116F 11C0; +C6E6;C6E6;110B 116F 11C1;C6E6;110B 116F 11C1; +C6E7;C6E7;110B 116F 11C2;C6E7;110B 116F 11C2; +C6E8;C6E8;110B 1170;C6E8;110B 1170; +C6E9;C6E9;110B 1170 11A8;C6E9;110B 1170 11A8; +C6EA;C6EA;110B 1170 11A9;C6EA;110B 1170 11A9; +C6EB;C6EB;110B 1170 11AA;C6EB;110B 1170 11AA; +C6EC;C6EC;110B 1170 11AB;C6EC;110B 1170 11AB; +C6ED;C6ED;110B 1170 11AC;C6ED;110B 1170 11AC; +C6EE;C6EE;110B 1170 11AD;C6EE;110B 1170 11AD; +C6EF;C6EF;110B 1170 11AE;C6EF;110B 1170 11AE; +C6F0;C6F0;110B 1170 11AF;C6F0;110B 1170 11AF; +C6F1;C6F1;110B 1170 11B0;C6F1;110B 1170 11B0; +C6F2;C6F2;110B 1170 11B1;C6F2;110B 1170 11B1; +C6F3;C6F3;110B 1170 11B2;C6F3;110B 1170 11B2; +C6F4;C6F4;110B 1170 11B3;C6F4;110B 1170 11B3; +C6F5;C6F5;110B 1170 11B4;C6F5;110B 1170 11B4; +C6F6;C6F6;110B 1170 11B5;C6F6;110B 1170 11B5; +C6F7;C6F7;110B 1170 11B6;C6F7;110B 1170 11B6; +C6F8;C6F8;110B 1170 11B7;C6F8;110B 1170 11B7; +C6F9;C6F9;110B 1170 11B8;C6F9;110B 1170 11B8; +C6FA;C6FA;110B 1170 11B9;C6FA;110B 1170 11B9; +C6FB;C6FB;110B 1170 11BA;C6FB;110B 1170 11BA; +C6FC;C6FC;110B 1170 11BB;C6FC;110B 1170 11BB; +C6FD;C6FD;110B 1170 11BC;C6FD;110B 1170 11BC; +C6FE;C6FE;110B 1170 11BD;C6FE;110B 1170 11BD; +C6FF;C6FF;110B 1170 11BE;C6FF;110B 1170 11BE; +C700;C700;110B 1170 11BF;C700;110B 1170 11BF; +C701;C701;110B 1170 11C0;C701;110B 1170 11C0; +C702;C702;110B 1170 11C1;C702;110B 1170 11C1; +C703;C703;110B 1170 11C2;C703;110B 1170 11C2; +C704;C704;110B 1171;C704;110B 1171; +C705;C705;110B 1171 11A8;C705;110B 1171 11A8; +C706;C706;110B 1171 11A9;C706;110B 1171 11A9; +C707;C707;110B 1171 11AA;C707;110B 1171 11AA; +C708;C708;110B 1171 11AB;C708;110B 1171 11AB; +C709;C709;110B 1171 11AC;C709;110B 1171 11AC; +C70A;C70A;110B 1171 11AD;C70A;110B 1171 11AD; +C70B;C70B;110B 1171 11AE;C70B;110B 1171 11AE; +C70C;C70C;110B 1171 11AF;C70C;110B 1171 11AF; +C70D;C70D;110B 1171 11B0;C70D;110B 1171 11B0; +C70E;C70E;110B 1171 11B1;C70E;110B 1171 11B1; +C70F;C70F;110B 1171 11B2;C70F;110B 1171 11B2; +C710;C710;110B 1171 11B3;C710;110B 1171 11B3; +C711;C711;110B 1171 11B4;C711;110B 1171 11B4; +C712;C712;110B 1171 11B5;C712;110B 1171 11B5; +C713;C713;110B 1171 11B6;C713;110B 1171 11B6; +C714;C714;110B 1171 11B7;C714;110B 1171 11B7; +C715;C715;110B 1171 11B8;C715;110B 1171 11B8; +C716;C716;110B 1171 11B9;C716;110B 1171 11B9; +C717;C717;110B 1171 11BA;C717;110B 1171 11BA; +C718;C718;110B 1171 11BB;C718;110B 1171 11BB; +C719;C719;110B 1171 11BC;C719;110B 1171 11BC; +C71A;C71A;110B 1171 11BD;C71A;110B 1171 11BD; +C71B;C71B;110B 1171 11BE;C71B;110B 1171 11BE; +C71C;C71C;110B 1171 11BF;C71C;110B 1171 11BF; +C71D;C71D;110B 1171 11C0;C71D;110B 1171 11C0; +C71E;C71E;110B 1171 11C1;C71E;110B 1171 11C1; +C71F;C71F;110B 1171 11C2;C71F;110B 1171 11C2; +C720;C720;110B 1172;C720;110B 1172; +C721;C721;110B 1172 11A8;C721;110B 1172 11A8; +C722;C722;110B 1172 11A9;C722;110B 1172 11A9; +C723;C723;110B 1172 11AA;C723;110B 1172 11AA; +C724;C724;110B 1172 11AB;C724;110B 1172 11AB; +C725;C725;110B 1172 11AC;C725;110B 1172 11AC; +C726;C726;110B 1172 11AD;C726;110B 1172 11AD; +C727;C727;110B 1172 11AE;C727;110B 1172 11AE; +C728;C728;110B 1172 11AF;C728;110B 1172 11AF; +C729;C729;110B 1172 11B0;C729;110B 1172 11B0; +C72A;C72A;110B 1172 11B1;C72A;110B 1172 11B1; +C72B;C72B;110B 1172 11B2;C72B;110B 1172 11B2; +C72C;C72C;110B 1172 11B3;C72C;110B 1172 11B3; +C72D;C72D;110B 1172 11B4;C72D;110B 1172 11B4; +C72E;C72E;110B 1172 11B5;C72E;110B 1172 11B5; +C72F;C72F;110B 1172 11B6;C72F;110B 1172 11B6; +C730;C730;110B 1172 11B7;C730;110B 1172 11B7; +C731;C731;110B 1172 11B8;C731;110B 1172 11B8; +C732;C732;110B 1172 11B9;C732;110B 1172 11B9; +C733;C733;110B 1172 11BA;C733;110B 1172 11BA; +C734;C734;110B 1172 11BB;C734;110B 1172 11BB; +C735;C735;110B 1172 11BC;C735;110B 1172 11BC; +C736;C736;110B 1172 11BD;C736;110B 1172 11BD; +C737;C737;110B 1172 11BE;C737;110B 1172 11BE; +C738;C738;110B 1172 11BF;C738;110B 1172 11BF; +C739;C739;110B 1172 11C0;C739;110B 1172 11C0; +C73A;C73A;110B 1172 11C1;C73A;110B 1172 11C1; +C73B;C73B;110B 1172 11C2;C73B;110B 1172 11C2; +C73C;C73C;110B 1173;C73C;110B 1173; +C73D;C73D;110B 1173 11A8;C73D;110B 1173 11A8; +C73E;C73E;110B 1173 11A9;C73E;110B 1173 11A9; +C73F;C73F;110B 1173 11AA;C73F;110B 1173 11AA; +C740;C740;110B 1173 11AB;C740;110B 1173 11AB; +C741;C741;110B 1173 11AC;C741;110B 1173 11AC; +C742;C742;110B 1173 11AD;C742;110B 1173 11AD; +C743;C743;110B 1173 11AE;C743;110B 1173 11AE; +C744;C744;110B 1173 11AF;C744;110B 1173 11AF; +C745;C745;110B 1173 11B0;C745;110B 1173 11B0; +C746;C746;110B 1173 11B1;C746;110B 1173 11B1; +C747;C747;110B 1173 11B2;C747;110B 1173 11B2; +C748;C748;110B 1173 11B3;C748;110B 1173 11B3; +C749;C749;110B 1173 11B4;C749;110B 1173 11B4; +C74A;C74A;110B 1173 11B5;C74A;110B 1173 11B5; +C74B;C74B;110B 1173 11B6;C74B;110B 1173 11B6; +C74C;C74C;110B 1173 11B7;C74C;110B 1173 11B7; +C74D;C74D;110B 1173 11B8;C74D;110B 1173 11B8; +C74E;C74E;110B 1173 11B9;C74E;110B 1173 11B9; +C74F;C74F;110B 1173 11BA;C74F;110B 1173 11BA; +C750;C750;110B 1173 11BB;C750;110B 1173 11BB; +C751;C751;110B 1173 11BC;C751;110B 1173 11BC; +C752;C752;110B 1173 11BD;C752;110B 1173 11BD; +C753;C753;110B 1173 11BE;C753;110B 1173 11BE; +C754;C754;110B 1173 11BF;C754;110B 1173 11BF; +C755;C755;110B 1173 11C0;C755;110B 1173 11C0; +C756;C756;110B 1173 11C1;C756;110B 1173 11C1; +C757;C757;110B 1173 11C2;C757;110B 1173 11C2; +C758;C758;110B 1174;C758;110B 1174; +C759;C759;110B 1174 11A8;C759;110B 1174 11A8; +C75A;C75A;110B 1174 11A9;C75A;110B 1174 11A9; +C75B;C75B;110B 1174 11AA;C75B;110B 1174 11AA; +C75C;C75C;110B 1174 11AB;C75C;110B 1174 11AB; +C75D;C75D;110B 1174 11AC;C75D;110B 1174 11AC; +C75E;C75E;110B 1174 11AD;C75E;110B 1174 11AD; +C75F;C75F;110B 1174 11AE;C75F;110B 1174 11AE; +C760;C760;110B 1174 11AF;C760;110B 1174 11AF; +C761;C761;110B 1174 11B0;C761;110B 1174 11B0; +C762;C762;110B 1174 11B1;C762;110B 1174 11B1; +C763;C763;110B 1174 11B2;C763;110B 1174 11B2; +C764;C764;110B 1174 11B3;C764;110B 1174 11B3; +C765;C765;110B 1174 11B4;C765;110B 1174 11B4; +C766;C766;110B 1174 11B5;C766;110B 1174 11B5; +C767;C767;110B 1174 11B6;C767;110B 1174 11B6; +C768;C768;110B 1174 11B7;C768;110B 1174 11B7; +C769;C769;110B 1174 11B8;C769;110B 1174 11B8; +C76A;C76A;110B 1174 11B9;C76A;110B 1174 11B9; +C76B;C76B;110B 1174 11BA;C76B;110B 1174 11BA; +C76C;C76C;110B 1174 11BB;C76C;110B 1174 11BB; +C76D;C76D;110B 1174 11BC;C76D;110B 1174 11BC; +C76E;C76E;110B 1174 11BD;C76E;110B 1174 11BD; +C76F;C76F;110B 1174 11BE;C76F;110B 1174 11BE; +C770;C770;110B 1174 11BF;C770;110B 1174 11BF; +C771;C771;110B 1174 11C0;C771;110B 1174 11C0; +C772;C772;110B 1174 11C1;C772;110B 1174 11C1; +C773;C773;110B 1174 11C2;C773;110B 1174 11C2; +C774;C774;110B 1175;C774;110B 1175; +C775;C775;110B 1175 11A8;C775;110B 1175 11A8; +C776;C776;110B 1175 11A9;C776;110B 1175 11A9; +C777;C777;110B 1175 11AA;C777;110B 1175 11AA; +C778;C778;110B 1175 11AB;C778;110B 1175 11AB; +C779;C779;110B 1175 11AC;C779;110B 1175 11AC; +C77A;C77A;110B 1175 11AD;C77A;110B 1175 11AD; +C77B;C77B;110B 1175 11AE;C77B;110B 1175 11AE; +C77C;C77C;110B 1175 11AF;C77C;110B 1175 11AF; +C77D;C77D;110B 1175 11B0;C77D;110B 1175 11B0; +C77E;C77E;110B 1175 11B1;C77E;110B 1175 11B1; +C77F;C77F;110B 1175 11B2;C77F;110B 1175 11B2; +C780;C780;110B 1175 11B3;C780;110B 1175 11B3; +C781;C781;110B 1175 11B4;C781;110B 1175 11B4; +C782;C782;110B 1175 11B5;C782;110B 1175 11B5; +C783;C783;110B 1175 11B6;C783;110B 1175 11B6; +C784;C784;110B 1175 11B7;C784;110B 1175 11B7; +C785;C785;110B 1175 11B8;C785;110B 1175 11B8; +C786;C786;110B 1175 11B9;C786;110B 1175 11B9; +C787;C787;110B 1175 11BA;C787;110B 1175 11BA; +C788;C788;110B 1175 11BB;C788;110B 1175 11BB; +C789;C789;110B 1175 11BC;C789;110B 1175 11BC; +C78A;C78A;110B 1175 11BD;C78A;110B 1175 11BD; +C78B;C78B;110B 1175 11BE;C78B;110B 1175 11BE; +C78C;C78C;110B 1175 11BF;C78C;110B 1175 11BF; +C78D;C78D;110B 1175 11C0;C78D;110B 1175 11C0; +C78E;C78E;110B 1175 11C1;C78E;110B 1175 11C1; +C78F;C78F;110B 1175 11C2;C78F;110B 1175 11C2; +C790;C790;110C 1161;C790;110C 1161; +C791;C791;110C 1161 11A8;C791;110C 1161 11A8; +C792;C792;110C 1161 11A9;C792;110C 1161 11A9; +C793;C793;110C 1161 11AA;C793;110C 1161 11AA; +C794;C794;110C 1161 11AB;C794;110C 1161 11AB; +C795;C795;110C 1161 11AC;C795;110C 1161 11AC; +C796;C796;110C 1161 11AD;C796;110C 1161 11AD; +C797;C797;110C 1161 11AE;C797;110C 1161 11AE; +C798;C798;110C 1161 11AF;C798;110C 1161 11AF; +C799;C799;110C 1161 11B0;C799;110C 1161 11B0; +C79A;C79A;110C 1161 11B1;C79A;110C 1161 11B1; +C79B;C79B;110C 1161 11B2;C79B;110C 1161 11B2; +C79C;C79C;110C 1161 11B3;C79C;110C 1161 11B3; +C79D;C79D;110C 1161 11B4;C79D;110C 1161 11B4; +C79E;C79E;110C 1161 11B5;C79E;110C 1161 11B5; +C79F;C79F;110C 1161 11B6;C79F;110C 1161 11B6; +C7A0;C7A0;110C 1161 11B7;C7A0;110C 1161 11B7; +C7A1;C7A1;110C 1161 11B8;C7A1;110C 1161 11B8; +C7A2;C7A2;110C 1161 11B9;C7A2;110C 1161 11B9; +C7A3;C7A3;110C 1161 11BA;C7A3;110C 1161 11BA; +C7A4;C7A4;110C 1161 11BB;C7A4;110C 1161 11BB; +C7A5;C7A5;110C 1161 11BC;C7A5;110C 1161 11BC; +C7A6;C7A6;110C 1161 11BD;C7A6;110C 1161 11BD; +C7A7;C7A7;110C 1161 11BE;C7A7;110C 1161 11BE; +C7A8;C7A8;110C 1161 11BF;C7A8;110C 1161 11BF; +C7A9;C7A9;110C 1161 11C0;C7A9;110C 1161 11C0; +C7AA;C7AA;110C 1161 11C1;C7AA;110C 1161 11C1; +C7AB;C7AB;110C 1161 11C2;C7AB;110C 1161 11C2; +C7AC;C7AC;110C 1162;C7AC;110C 1162; +C7AD;C7AD;110C 1162 11A8;C7AD;110C 1162 11A8; +C7AE;C7AE;110C 1162 11A9;C7AE;110C 1162 11A9; +C7AF;C7AF;110C 1162 11AA;C7AF;110C 1162 11AA; +C7B0;C7B0;110C 1162 11AB;C7B0;110C 1162 11AB; +C7B1;C7B1;110C 1162 11AC;C7B1;110C 1162 11AC; +C7B2;C7B2;110C 1162 11AD;C7B2;110C 1162 11AD; +C7B3;C7B3;110C 1162 11AE;C7B3;110C 1162 11AE; +C7B4;C7B4;110C 1162 11AF;C7B4;110C 1162 11AF; +C7B5;C7B5;110C 1162 11B0;C7B5;110C 1162 11B0; +C7B6;C7B6;110C 1162 11B1;C7B6;110C 1162 11B1; +C7B7;C7B7;110C 1162 11B2;C7B7;110C 1162 11B2; +C7B8;C7B8;110C 1162 11B3;C7B8;110C 1162 11B3; +C7B9;C7B9;110C 1162 11B4;C7B9;110C 1162 11B4; +C7BA;C7BA;110C 1162 11B5;C7BA;110C 1162 11B5; +C7BB;C7BB;110C 1162 11B6;C7BB;110C 1162 11B6; +C7BC;C7BC;110C 1162 11B7;C7BC;110C 1162 11B7; +C7BD;C7BD;110C 1162 11B8;C7BD;110C 1162 11B8; +C7BE;C7BE;110C 1162 11B9;C7BE;110C 1162 11B9; +C7BF;C7BF;110C 1162 11BA;C7BF;110C 1162 11BA; +C7C0;C7C0;110C 1162 11BB;C7C0;110C 1162 11BB; +C7C1;C7C1;110C 1162 11BC;C7C1;110C 1162 11BC; +C7C2;C7C2;110C 1162 11BD;C7C2;110C 1162 11BD; +C7C3;C7C3;110C 1162 11BE;C7C3;110C 1162 11BE; +C7C4;C7C4;110C 1162 11BF;C7C4;110C 1162 11BF; +C7C5;C7C5;110C 1162 11C0;C7C5;110C 1162 11C0; +C7C6;C7C6;110C 1162 11C1;C7C6;110C 1162 11C1; +C7C7;C7C7;110C 1162 11C2;C7C7;110C 1162 11C2; +C7C8;C7C8;110C 1163;C7C8;110C 1163; +C7C9;C7C9;110C 1163 11A8;C7C9;110C 1163 11A8; +C7CA;C7CA;110C 1163 11A9;C7CA;110C 1163 11A9; +C7CB;C7CB;110C 1163 11AA;C7CB;110C 1163 11AA; +C7CC;C7CC;110C 1163 11AB;C7CC;110C 1163 11AB; +C7CD;C7CD;110C 1163 11AC;C7CD;110C 1163 11AC; +C7CE;C7CE;110C 1163 11AD;C7CE;110C 1163 11AD; +C7CF;C7CF;110C 1163 11AE;C7CF;110C 1163 11AE; +C7D0;C7D0;110C 1163 11AF;C7D0;110C 1163 11AF; +C7D1;C7D1;110C 1163 11B0;C7D1;110C 1163 11B0; +C7D2;C7D2;110C 1163 11B1;C7D2;110C 1163 11B1; +C7D3;C7D3;110C 1163 11B2;C7D3;110C 1163 11B2; +C7D4;C7D4;110C 1163 11B3;C7D4;110C 1163 11B3; +C7D5;C7D5;110C 1163 11B4;C7D5;110C 1163 11B4; +C7D6;C7D6;110C 1163 11B5;C7D6;110C 1163 11B5; +C7D7;C7D7;110C 1163 11B6;C7D7;110C 1163 11B6; +C7D8;C7D8;110C 1163 11B7;C7D8;110C 1163 11B7; +C7D9;C7D9;110C 1163 11B8;C7D9;110C 1163 11B8; +C7DA;C7DA;110C 1163 11B9;C7DA;110C 1163 11B9; +C7DB;C7DB;110C 1163 11BA;C7DB;110C 1163 11BA; +C7DC;C7DC;110C 1163 11BB;C7DC;110C 1163 11BB; +C7DD;C7DD;110C 1163 11BC;C7DD;110C 1163 11BC; +C7DE;C7DE;110C 1163 11BD;C7DE;110C 1163 11BD; +C7DF;C7DF;110C 1163 11BE;C7DF;110C 1163 11BE; +C7E0;C7E0;110C 1163 11BF;C7E0;110C 1163 11BF; +C7E1;C7E1;110C 1163 11C0;C7E1;110C 1163 11C0; +C7E2;C7E2;110C 1163 11C1;C7E2;110C 1163 11C1; +C7E3;C7E3;110C 1163 11C2;C7E3;110C 1163 11C2; +C7E4;C7E4;110C 1164;C7E4;110C 1164; +C7E5;C7E5;110C 1164 11A8;C7E5;110C 1164 11A8; +C7E6;C7E6;110C 1164 11A9;C7E6;110C 1164 11A9; +C7E7;C7E7;110C 1164 11AA;C7E7;110C 1164 11AA; +C7E8;C7E8;110C 1164 11AB;C7E8;110C 1164 11AB; +C7E9;C7E9;110C 1164 11AC;C7E9;110C 1164 11AC; +C7EA;C7EA;110C 1164 11AD;C7EA;110C 1164 11AD; +C7EB;C7EB;110C 1164 11AE;C7EB;110C 1164 11AE; +C7EC;C7EC;110C 1164 11AF;C7EC;110C 1164 11AF; +C7ED;C7ED;110C 1164 11B0;C7ED;110C 1164 11B0; +C7EE;C7EE;110C 1164 11B1;C7EE;110C 1164 11B1; +C7EF;C7EF;110C 1164 11B2;C7EF;110C 1164 11B2; +C7F0;C7F0;110C 1164 11B3;C7F0;110C 1164 11B3; +C7F1;C7F1;110C 1164 11B4;C7F1;110C 1164 11B4; +C7F2;C7F2;110C 1164 11B5;C7F2;110C 1164 11B5; +C7F3;C7F3;110C 1164 11B6;C7F3;110C 1164 11B6; +C7F4;C7F4;110C 1164 11B7;C7F4;110C 1164 11B7; +C7F5;C7F5;110C 1164 11B8;C7F5;110C 1164 11B8; +C7F6;C7F6;110C 1164 11B9;C7F6;110C 1164 11B9; +C7F7;C7F7;110C 1164 11BA;C7F7;110C 1164 11BA; +C7F8;C7F8;110C 1164 11BB;C7F8;110C 1164 11BB; +C7F9;C7F9;110C 1164 11BC;C7F9;110C 1164 11BC; +C7FA;C7FA;110C 1164 11BD;C7FA;110C 1164 11BD; +C7FB;C7FB;110C 1164 11BE;C7FB;110C 1164 11BE; +C7FC;C7FC;110C 1164 11BF;C7FC;110C 1164 11BF; +C7FD;C7FD;110C 1164 11C0;C7FD;110C 1164 11C0; +C7FE;C7FE;110C 1164 11C1;C7FE;110C 1164 11C1; +C7FF;C7FF;110C 1164 11C2;C7FF;110C 1164 11C2; +C800;C800;110C 1165;C800;110C 1165; +C801;C801;110C 1165 11A8;C801;110C 1165 11A8; +C802;C802;110C 1165 11A9;C802;110C 1165 11A9; +C803;C803;110C 1165 11AA;C803;110C 1165 11AA; +C804;C804;110C 1165 11AB;C804;110C 1165 11AB; +C805;C805;110C 1165 11AC;C805;110C 1165 11AC; +C806;C806;110C 1165 11AD;C806;110C 1165 11AD; +C807;C807;110C 1165 11AE;C807;110C 1165 11AE; +C808;C808;110C 1165 11AF;C808;110C 1165 11AF; +C809;C809;110C 1165 11B0;C809;110C 1165 11B0; +C80A;C80A;110C 1165 11B1;C80A;110C 1165 11B1; +C80B;C80B;110C 1165 11B2;C80B;110C 1165 11B2; +C80C;C80C;110C 1165 11B3;C80C;110C 1165 11B3; +C80D;C80D;110C 1165 11B4;C80D;110C 1165 11B4; +C80E;C80E;110C 1165 11B5;C80E;110C 1165 11B5; +C80F;C80F;110C 1165 11B6;C80F;110C 1165 11B6; +C810;C810;110C 1165 11B7;C810;110C 1165 11B7; +C811;C811;110C 1165 11B8;C811;110C 1165 11B8; +C812;C812;110C 1165 11B9;C812;110C 1165 11B9; +C813;C813;110C 1165 11BA;C813;110C 1165 11BA; +C814;C814;110C 1165 11BB;C814;110C 1165 11BB; +C815;C815;110C 1165 11BC;C815;110C 1165 11BC; +C816;C816;110C 1165 11BD;C816;110C 1165 11BD; +C817;C817;110C 1165 11BE;C817;110C 1165 11BE; +C818;C818;110C 1165 11BF;C818;110C 1165 11BF; +C819;C819;110C 1165 11C0;C819;110C 1165 11C0; +C81A;C81A;110C 1165 11C1;C81A;110C 1165 11C1; +C81B;C81B;110C 1165 11C2;C81B;110C 1165 11C2; +C81C;C81C;110C 1166;C81C;110C 1166; +C81D;C81D;110C 1166 11A8;C81D;110C 1166 11A8; +C81E;C81E;110C 1166 11A9;C81E;110C 1166 11A9; +C81F;C81F;110C 1166 11AA;C81F;110C 1166 11AA; +C820;C820;110C 1166 11AB;C820;110C 1166 11AB; +C821;C821;110C 1166 11AC;C821;110C 1166 11AC; +C822;C822;110C 1166 11AD;C822;110C 1166 11AD; +C823;C823;110C 1166 11AE;C823;110C 1166 11AE; +C824;C824;110C 1166 11AF;C824;110C 1166 11AF; +C825;C825;110C 1166 11B0;C825;110C 1166 11B0; +C826;C826;110C 1166 11B1;C826;110C 1166 11B1; +C827;C827;110C 1166 11B2;C827;110C 1166 11B2; +C828;C828;110C 1166 11B3;C828;110C 1166 11B3; +C829;C829;110C 1166 11B4;C829;110C 1166 11B4; +C82A;C82A;110C 1166 11B5;C82A;110C 1166 11B5; +C82B;C82B;110C 1166 11B6;C82B;110C 1166 11B6; +C82C;C82C;110C 1166 11B7;C82C;110C 1166 11B7; +C82D;C82D;110C 1166 11B8;C82D;110C 1166 11B8; +C82E;C82E;110C 1166 11B9;C82E;110C 1166 11B9; +C82F;C82F;110C 1166 11BA;C82F;110C 1166 11BA; +C830;C830;110C 1166 11BB;C830;110C 1166 11BB; +C831;C831;110C 1166 11BC;C831;110C 1166 11BC; +C832;C832;110C 1166 11BD;C832;110C 1166 11BD; +C833;C833;110C 1166 11BE;C833;110C 1166 11BE; +C834;C834;110C 1166 11BF;C834;110C 1166 11BF; +C835;C835;110C 1166 11C0;C835;110C 1166 11C0; +C836;C836;110C 1166 11C1;C836;110C 1166 11C1; +C837;C837;110C 1166 11C2;C837;110C 1166 11C2; +C838;C838;110C 1167;C838;110C 1167; +C839;C839;110C 1167 11A8;C839;110C 1167 11A8; +C83A;C83A;110C 1167 11A9;C83A;110C 1167 11A9; +C83B;C83B;110C 1167 11AA;C83B;110C 1167 11AA; +C83C;C83C;110C 1167 11AB;C83C;110C 1167 11AB; +C83D;C83D;110C 1167 11AC;C83D;110C 1167 11AC; +C83E;C83E;110C 1167 11AD;C83E;110C 1167 11AD; +C83F;C83F;110C 1167 11AE;C83F;110C 1167 11AE; +C840;C840;110C 1167 11AF;C840;110C 1167 11AF; +C841;C841;110C 1167 11B0;C841;110C 1167 11B0; +C842;C842;110C 1167 11B1;C842;110C 1167 11B1; +C843;C843;110C 1167 11B2;C843;110C 1167 11B2; +C844;C844;110C 1167 11B3;C844;110C 1167 11B3; +C845;C845;110C 1167 11B4;C845;110C 1167 11B4; +C846;C846;110C 1167 11B5;C846;110C 1167 11B5; +C847;C847;110C 1167 11B6;C847;110C 1167 11B6; +C848;C848;110C 1167 11B7;C848;110C 1167 11B7; +C849;C849;110C 1167 11B8;C849;110C 1167 11B8; +C84A;C84A;110C 1167 11B9;C84A;110C 1167 11B9; +C84B;C84B;110C 1167 11BA;C84B;110C 1167 11BA; +C84C;C84C;110C 1167 11BB;C84C;110C 1167 11BB; +C84D;C84D;110C 1167 11BC;C84D;110C 1167 11BC; +C84E;C84E;110C 1167 11BD;C84E;110C 1167 11BD; +C84F;C84F;110C 1167 11BE;C84F;110C 1167 11BE; +C850;C850;110C 1167 11BF;C850;110C 1167 11BF; +C851;C851;110C 1167 11C0;C851;110C 1167 11C0; +C852;C852;110C 1167 11C1;C852;110C 1167 11C1; +C853;C853;110C 1167 11C2;C853;110C 1167 11C2; +C854;C854;110C 1168;C854;110C 1168; +C855;C855;110C 1168 11A8;C855;110C 1168 11A8; +C856;C856;110C 1168 11A9;C856;110C 1168 11A9; +C857;C857;110C 1168 11AA;C857;110C 1168 11AA; +C858;C858;110C 1168 11AB;C858;110C 1168 11AB; +C859;C859;110C 1168 11AC;C859;110C 1168 11AC; +C85A;C85A;110C 1168 11AD;C85A;110C 1168 11AD; +C85B;C85B;110C 1168 11AE;C85B;110C 1168 11AE; +C85C;C85C;110C 1168 11AF;C85C;110C 1168 11AF; +C85D;C85D;110C 1168 11B0;C85D;110C 1168 11B0; +C85E;C85E;110C 1168 11B1;C85E;110C 1168 11B1; +C85F;C85F;110C 1168 11B2;C85F;110C 1168 11B2; +C860;C860;110C 1168 11B3;C860;110C 1168 11B3; +C861;C861;110C 1168 11B4;C861;110C 1168 11B4; +C862;C862;110C 1168 11B5;C862;110C 1168 11B5; +C863;C863;110C 1168 11B6;C863;110C 1168 11B6; +C864;C864;110C 1168 11B7;C864;110C 1168 11B7; +C865;C865;110C 1168 11B8;C865;110C 1168 11B8; +C866;C866;110C 1168 11B9;C866;110C 1168 11B9; +C867;C867;110C 1168 11BA;C867;110C 1168 11BA; +C868;C868;110C 1168 11BB;C868;110C 1168 11BB; +C869;C869;110C 1168 11BC;C869;110C 1168 11BC; +C86A;C86A;110C 1168 11BD;C86A;110C 1168 11BD; +C86B;C86B;110C 1168 11BE;C86B;110C 1168 11BE; +C86C;C86C;110C 1168 11BF;C86C;110C 1168 11BF; +C86D;C86D;110C 1168 11C0;C86D;110C 1168 11C0; +C86E;C86E;110C 1168 11C1;C86E;110C 1168 11C1; +C86F;C86F;110C 1168 11C2;C86F;110C 1168 11C2; +C870;C870;110C 1169;C870;110C 1169; +C871;C871;110C 1169 11A8;C871;110C 1169 11A8; +C872;C872;110C 1169 11A9;C872;110C 1169 11A9; +C873;C873;110C 1169 11AA;C873;110C 1169 11AA; +C874;C874;110C 1169 11AB;C874;110C 1169 11AB; +C875;C875;110C 1169 11AC;C875;110C 1169 11AC; +C876;C876;110C 1169 11AD;C876;110C 1169 11AD; +C877;C877;110C 1169 11AE;C877;110C 1169 11AE; +C878;C878;110C 1169 11AF;C878;110C 1169 11AF; +C879;C879;110C 1169 11B0;C879;110C 1169 11B0; +C87A;C87A;110C 1169 11B1;C87A;110C 1169 11B1; +C87B;C87B;110C 1169 11B2;C87B;110C 1169 11B2; +C87C;C87C;110C 1169 11B3;C87C;110C 1169 11B3; +C87D;C87D;110C 1169 11B4;C87D;110C 1169 11B4; +C87E;C87E;110C 1169 11B5;C87E;110C 1169 11B5; +C87F;C87F;110C 1169 11B6;C87F;110C 1169 11B6; +C880;C880;110C 1169 11B7;C880;110C 1169 11B7; +C881;C881;110C 1169 11B8;C881;110C 1169 11B8; +C882;C882;110C 1169 11B9;C882;110C 1169 11B9; +C883;C883;110C 1169 11BA;C883;110C 1169 11BA; +C884;C884;110C 1169 11BB;C884;110C 1169 11BB; +C885;C885;110C 1169 11BC;C885;110C 1169 11BC; +C886;C886;110C 1169 11BD;C886;110C 1169 11BD; +C887;C887;110C 1169 11BE;C887;110C 1169 11BE; +C888;C888;110C 1169 11BF;C888;110C 1169 11BF; +C889;C889;110C 1169 11C0;C889;110C 1169 11C0; +C88A;C88A;110C 1169 11C1;C88A;110C 1169 11C1; +C88B;C88B;110C 1169 11C2;C88B;110C 1169 11C2; +C88C;C88C;110C 116A;C88C;110C 116A; +C88D;C88D;110C 116A 11A8;C88D;110C 116A 11A8; +C88E;C88E;110C 116A 11A9;C88E;110C 116A 11A9; +C88F;C88F;110C 116A 11AA;C88F;110C 116A 11AA; +C890;C890;110C 116A 11AB;C890;110C 116A 11AB; +C891;C891;110C 116A 11AC;C891;110C 116A 11AC; +C892;C892;110C 116A 11AD;C892;110C 116A 11AD; +C893;C893;110C 116A 11AE;C893;110C 116A 11AE; +C894;C894;110C 116A 11AF;C894;110C 116A 11AF; +C895;C895;110C 116A 11B0;C895;110C 116A 11B0; +C896;C896;110C 116A 11B1;C896;110C 116A 11B1; +C897;C897;110C 116A 11B2;C897;110C 116A 11B2; +C898;C898;110C 116A 11B3;C898;110C 116A 11B3; +C899;C899;110C 116A 11B4;C899;110C 116A 11B4; +C89A;C89A;110C 116A 11B5;C89A;110C 116A 11B5; +C89B;C89B;110C 116A 11B6;C89B;110C 116A 11B6; +C89C;C89C;110C 116A 11B7;C89C;110C 116A 11B7; +C89D;C89D;110C 116A 11B8;C89D;110C 116A 11B8; +C89E;C89E;110C 116A 11B9;C89E;110C 116A 11B9; +C89F;C89F;110C 116A 11BA;C89F;110C 116A 11BA; +C8A0;C8A0;110C 116A 11BB;C8A0;110C 116A 11BB; +C8A1;C8A1;110C 116A 11BC;C8A1;110C 116A 11BC; +C8A2;C8A2;110C 116A 11BD;C8A2;110C 116A 11BD; +C8A3;C8A3;110C 116A 11BE;C8A3;110C 116A 11BE; +C8A4;C8A4;110C 116A 11BF;C8A4;110C 116A 11BF; +C8A5;C8A5;110C 116A 11C0;C8A5;110C 116A 11C0; +C8A6;C8A6;110C 116A 11C1;C8A6;110C 116A 11C1; +C8A7;C8A7;110C 116A 11C2;C8A7;110C 116A 11C2; +C8A8;C8A8;110C 116B;C8A8;110C 116B; +C8A9;C8A9;110C 116B 11A8;C8A9;110C 116B 11A8; +C8AA;C8AA;110C 116B 11A9;C8AA;110C 116B 11A9; +C8AB;C8AB;110C 116B 11AA;C8AB;110C 116B 11AA; +C8AC;C8AC;110C 116B 11AB;C8AC;110C 116B 11AB; +C8AD;C8AD;110C 116B 11AC;C8AD;110C 116B 11AC; +C8AE;C8AE;110C 116B 11AD;C8AE;110C 116B 11AD; +C8AF;C8AF;110C 116B 11AE;C8AF;110C 116B 11AE; +C8B0;C8B0;110C 116B 11AF;C8B0;110C 116B 11AF; +C8B1;C8B1;110C 116B 11B0;C8B1;110C 116B 11B0; +C8B2;C8B2;110C 116B 11B1;C8B2;110C 116B 11B1; +C8B3;C8B3;110C 116B 11B2;C8B3;110C 116B 11B2; +C8B4;C8B4;110C 116B 11B3;C8B4;110C 116B 11B3; +C8B5;C8B5;110C 116B 11B4;C8B5;110C 116B 11B4; +C8B6;C8B6;110C 116B 11B5;C8B6;110C 116B 11B5; +C8B7;C8B7;110C 116B 11B6;C8B7;110C 116B 11B6; +C8B8;C8B8;110C 116B 11B7;C8B8;110C 116B 11B7; +C8B9;C8B9;110C 116B 11B8;C8B9;110C 116B 11B8; +C8BA;C8BA;110C 116B 11B9;C8BA;110C 116B 11B9; +C8BB;C8BB;110C 116B 11BA;C8BB;110C 116B 11BA; +C8BC;C8BC;110C 116B 11BB;C8BC;110C 116B 11BB; +C8BD;C8BD;110C 116B 11BC;C8BD;110C 116B 11BC; +C8BE;C8BE;110C 116B 11BD;C8BE;110C 116B 11BD; +C8BF;C8BF;110C 116B 11BE;C8BF;110C 116B 11BE; +C8C0;C8C0;110C 116B 11BF;C8C0;110C 116B 11BF; +C8C1;C8C1;110C 116B 11C0;C8C1;110C 116B 11C0; +C8C2;C8C2;110C 116B 11C1;C8C2;110C 116B 11C1; +C8C3;C8C3;110C 116B 11C2;C8C3;110C 116B 11C2; +C8C4;C8C4;110C 116C;C8C4;110C 116C; +C8C5;C8C5;110C 116C 11A8;C8C5;110C 116C 11A8; +C8C6;C8C6;110C 116C 11A9;C8C6;110C 116C 11A9; +C8C7;C8C7;110C 116C 11AA;C8C7;110C 116C 11AA; +C8C8;C8C8;110C 116C 11AB;C8C8;110C 116C 11AB; +C8C9;C8C9;110C 116C 11AC;C8C9;110C 116C 11AC; +C8CA;C8CA;110C 116C 11AD;C8CA;110C 116C 11AD; +C8CB;C8CB;110C 116C 11AE;C8CB;110C 116C 11AE; +C8CC;C8CC;110C 116C 11AF;C8CC;110C 116C 11AF; +C8CD;C8CD;110C 116C 11B0;C8CD;110C 116C 11B0; +C8CE;C8CE;110C 116C 11B1;C8CE;110C 116C 11B1; +C8CF;C8CF;110C 116C 11B2;C8CF;110C 116C 11B2; +C8D0;C8D0;110C 116C 11B3;C8D0;110C 116C 11B3; +C8D1;C8D1;110C 116C 11B4;C8D1;110C 116C 11B4; +C8D2;C8D2;110C 116C 11B5;C8D2;110C 116C 11B5; +C8D3;C8D3;110C 116C 11B6;C8D3;110C 116C 11B6; +C8D4;C8D4;110C 116C 11B7;C8D4;110C 116C 11B7; +C8D5;C8D5;110C 116C 11B8;C8D5;110C 116C 11B8; +C8D6;C8D6;110C 116C 11B9;C8D6;110C 116C 11B9; +C8D7;C8D7;110C 116C 11BA;C8D7;110C 116C 11BA; +C8D8;C8D8;110C 116C 11BB;C8D8;110C 116C 11BB; +C8D9;C8D9;110C 116C 11BC;C8D9;110C 116C 11BC; +C8DA;C8DA;110C 116C 11BD;C8DA;110C 116C 11BD; +C8DB;C8DB;110C 116C 11BE;C8DB;110C 116C 11BE; +C8DC;C8DC;110C 116C 11BF;C8DC;110C 116C 11BF; +C8DD;C8DD;110C 116C 11C0;C8DD;110C 116C 11C0; +C8DE;C8DE;110C 116C 11C1;C8DE;110C 116C 11C1; +C8DF;C8DF;110C 116C 11C2;C8DF;110C 116C 11C2; +C8E0;C8E0;110C 116D;C8E0;110C 116D; +C8E1;C8E1;110C 116D 11A8;C8E1;110C 116D 11A8; +C8E2;C8E2;110C 116D 11A9;C8E2;110C 116D 11A9; +C8E3;C8E3;110C 116D 11AA;C8E3;110C 116D 11AA; +C8E4;C8E4;110C 116D 11AB;C8E4;110C 116D 11AB; +C8E5;C8E5;110C 116D 11AC;C8E5;110C 116D 11AC; +C8E6;C8E6;110C 116D 11AD;C8E6;110C 116D 11AD; +C8E7;C8E7;110C 116D 11AE;C8E7;110C 116D 11AE; +C8E8;C8E8;110C 116D 11AF;C8E8;110C 116D 11AF; +C8E9;C8E9;110C 116D 11B0;C8E9;110C 116D 11B0; +C8EA;C8EA;110C 116D 11B1;C8EA;110C 116D 11B1; +C8EB;C8EB;110C 116D 11B2;C8EB;110C 116D 11B2; +C8EC;C8EC;110C 116D 11B3;C8EC;110C 116D 11B3; +C8ED;C8ED;110C 116D 11B4;C8ED;110C 116D 11B4; +C8EE;C8EE;110C 116D 11B5;C8EE;110C 116D 11B5; +C8EF;C8EF;110C 116D 11B6;C8EF;110C 116D 11B6; +C8F0;C8F0;110C 116D 11B7;C8F0;110C 116D 11B7; +C8F1;C8F1;110C 116D 11B8;C8F1;110C 116D 11B8; +C8F2;C8F2;110C 116D 11B9;C8F2;110C 116D 11B9; +C8F3;C8F3;110C 116D 11BA;C8F3;110C 116D 11BA; +C8F4;C8F4;110C 116D 11BB;C8F4;110C 116D 11BB; +C8F5;C8F5;110C 116D 11BC;C8F5;110C 116D 11BC; +C8F6;C8F6;110C 116D 11BD;C8F6;110C 116D 11BD; +C8F7;C8F7;110C 116D 11BE;C8F7;110C 116D 11BE; +C8F8;C8F8;110C 116D 11BF;C8F8;110C 116D 11BF; +C8F9;C8F9;110C 116D 11C0;C8F9;110C 116D 11C0; +C8FA;C8FA;110C 116D 11C1;C8FA;110C 116D 11C1; +C8FB;C8FB;110C 116D 11C2;C8FB;110C 116D 11C2; +C8FC;C8FC;110C 116E;C8FC;110C 116E; +C8FD;C8FD;110C 116E 11A8;C8FD;110C 116E 11A8; +C8FE;C8FE;110C 116E 11A9;C8FE;110C 116E 11A9; +C8FF;C8FF;110C 116E 11AA;C8FF;110C 116E 11AA; +C900;C900;110C 116E 11AB;C900;110C 116E 11AB; +C901;C901;110C 116E 11AC;C901;110C 116E 11AC; +C902;C902;110C 116E 11AD;C902;110C 116E 11AD; +C903;C903;110C 116E 11AE;C903;110C 116E 11AE; +C904;C904;110C 116E 11AF;C904;110C 116E 11AF; +C905;C905;110C 116E 11B0;C905;110C 116E 11B0; +C906;C906;110C 116E 11B1;C906;110C 116E 11B1; +C907;C907;110C 116E 11B2;C907;110C 116E 11B2; +C908;C908;110C 116E 11B3;C908;110C 116E 11B3; +C909;C909;110C 116E 11B4;C909;110C 116E 11B4; +C90A;C90A;110C 116E 11B5;C90A;110C 116E 11B5; +C90B;C90B;110C 116E 11B6;C90B;110C 116E 11B6; +C90C;C90C;110C 116E 11B7;C90C;110C 116E 11B7; +C90D;C90D;110C 116E 11B8;C90D;110C 116E 11B8; +C90E;C90E;110C 116E 11B9;C90E;110C 116E 11B9; +C90F;C90F;110C 116E 11BA;C90F;110C 116E 11BA; +C910;C910;110C 116E 11BB;C910;110C 116E 11BB; +C911;C911;110C 116E 11BC;C911;110C 116E 11BC; +C912;C912;110C 116E 11BD;C912;110C 116E 11BD; +C913;C913;110C 116E 11BE;C913;110C 116E 11BE; +C914;C914;110C 116E 11BF;C914;110C 116E 11BF; +C915;C915;110C 116E 11C0;C915;110C 116E 11C0; +C916;C916;110C 116E 11C1;C916;110C 116E 11C1; +C917;C917;110C 116E 11C2;C917;110C 116E 11C2; +C918;C918;110C 116F;C918;110C 116F; +C919;C919;110C 116F 11A8;C919;110C 116F 11A8; +C91A;C91A;110C 116F 11A9;C91A;110C 116F 11A9; +C91B;C91B;110C 116F 11AA;C91B;110C 116F 11AA; +C91C;C91C;110C 116F 11AB;C91C;110C 116F 11AB; +C91D;C91D;110C 116F 11AC;C91D;110C 116F 11AC; +C91E;C91E;110C 116F 11AD;C91E;110C 116F 11AD; +C91F;C91F;110C 116F 11AE;C91F;110C 116F 11AE; +C920;C920;110C 116F 11AF;C920;110C 116F 11AF; +C921;C921;110C 116F 11B0;C921;110C 116F 11B0; +C922;C922;110C 116F 11B1;C922;110C 116F 11B1; +C923;C923;110C 116F 11B2;C923;110C 116F 11B2; +C924;C924;110C 116F 11B3;C924;110C 116F 11B3; +C925;C925;110C 116F 11B4;C925;110C 116F 11B4; +C926;C926;110C 116F 11B5;C926;110C 116F 11B5; +C927;C927;110C 116F 11B6;C927;110C 116F 11B6; +C928;C928;110C 116F 11B7;C928;110C 116F 11B7; +C929;C929;110C 116F 11B8;C929;110C 116F 11B8; +C92A;C92A;110C 116F 11B9;C92A;110C 116F 11B9; +C92B;C92B;110C 116F 11BA;C92B;110C 116F 11BA; +C92C;C92C;110C 116F 11BB;C92C;110C 116F 11BB; +C92D;C92D;110C 116F 11BC;C92D;110C 116F 11BC; +C92E;C92E;110C 116F 11BD;C92E;110C 116F 11BD; +C92F;C92F;110C 116F 11BE;C92F;110C 116F 11BE; +C930;C930;110C 116F 11BF;C930;110C 116F 11BF; +C931;C931;110C 116F 11C0;C931;110C 116F 11C0; +C932;C932;110C 116F 11C1;C932;110C 116F 11C1; +C933;C933;110C 116F 11C2;C933;110C 116F 11C2; +C934;C934;110C 1170;C934;110C 1170; +C935;C935;110C 1170 11A8;C935;110C 1170 11A8; +C936;C936;110C 1170 11A9;C936;110C 1170 11A9; +C937;C937;110C 1170 11AA;C937;110C 1170 11AA; +C938;C938;110C 1170 11AB;C938;110C 1170 11AB; +C939;C939;110C 1170 11AC;C939;110C 1170 11AC; +C93A;C93A;110C 1170 11AD;C93A;110C 1170 11AD; +C93B;C93B;110C 1170 11AE;C93B;110C 1170 11AE; +C93C;C93C;110C 1170 11AF;C93C;110C 1170 11AF; +C93D;C93D;110C 1170 11B0;C93D;110C 1170 11B0; +C93E;C93E;110C 1170 11B1;C93E;110C 1170 11B1; +C93F;C93F;110C 1170 11B2;C93F;110C 1170 11B2; +C940;C940;110C 1170 11B3;C940;110C 1170 11B3; +C941;C941;110C 1170 11B4;C941;110C 1170 11B4; +C942;C942;110C 1170 11B5;C942;110C 1170 11B5; +C943;C943;110C 1170 11B6;C943;110C 1170 11B6; +C944;C944;110C 1170 11B7;C944;110C 1170 11B7; +C945;C945;110C 1170 11B8;C945;110C 1170 11B8; +C946;C946;110C 1170 11B9;C946;110C 1170 11B9; +C947;C947;110C 1170 11BA;C947;110C 1170 11BA; +C948;C948;110C 1170 11BB;C948;110C 1170 11BB; +C949;C949;110C 1170 11BC;C949;110C 1170 11BC; +C94A;C94A;110C 1170 11BD;C94A;110C 1170 11BD; +C94B;C94B;110C 1170 11BE;C94B;110C 1170 11BE; +C94C;C94C;110C 1170 11BF;C94C;110C 1170 11BF; +C94D;C94D;110C 1170 11C0;C94D;110C 1170 11C0; +C94E;C94E;110C 1170 11C1;C94E;110C 1170 11C1; +C94F;C94F;110C 1170 11C2;C94F;110C 1170 11C2; +C950;C950;110C 1171;C950;110C 1171; +C951;C951;110C 1171 11A8;C951;110C 1171 11A8; +C952;C952;110C 1171 11A9;C952;110C 1171 11A9; +C953;C953;110C 1171 11AA;C953;110C 1171 11AA; +C954;C954;110C 1171 11AB;C954;110C 1171 11AB; +C955;C955;110C 1171 11AC;C955;110C 1171 11AC; +C956;C956;110C 1171 11AD;C956;110C 1171 11AD; +C957;C957;110C 1171 11AE;C957;110C 1171 11AE; +C958;C958;110C 1171 11AF;C958;110C 1171 11AF; +C959;C959;110C 1171 11B0;C959;110C 1171 11B0; +C95A;C95A;110C 1171 11B1;C95A;110C 1171 11B1; +C95B;C95B;110C 1171 11B2;C95B;110C 1171 11B2; +C95C;C95C;110C 1171 11B3;C95C;110C 1171 11B3; +C95D;C95D;110C 1171 11B4;C95D;110C 1171 11B4; +C95E;C95E;110C 1171 11B5;C95E;110C 1171 11B5; +C95F;C95F;110C 1171 11B6;C95F;110C 1171 11B6; +C960;C960;110C 1171 11B7;C960;110C 1171 11B7; +C961;C961;110C 1171 11B8;C961;110C 1171 11B8; +C962;C962;110C 1171 11B9;C962;110C 1171 11B9; +C963;C963;110C 1171 11BA;C963;110C 1171 11BA; +C964;C964;110C 1171 11BB;C964;110C 1171 11BB; +C965;C965;110C 1171 11BC;C965;110C 1171 11BC; +C966;C966;110C 1171 11BD;C966;110C 1171 11BD; +C967;C967;110C 1171 11BE;C967;110C 1171 11BE; +C968;C968;110C 1171 11BF;C968;110C 1171 11BF; +C969;C969;110C 1171 11C0;C969;110C 1171 11C0; +C96A;C96A;110C 1171 11C1;C96A;110C 1171 11C1; +C96B;C96B;110C 1171 11C2;C96B;110C 1171 11C2; +C96C;C96C;110C 1172;C96C;110C 1172; +C96D;C96D;110C 1172 11A8;C96D;110C 1172 11A8; +C96E;C96E;110C 1172 11A9;C96E;110C 1172 11A9; +C96F;C96F;110C 1172 11AA;C96F;110C 1172 11AA; +C970;C970;110C 1172 11AB;C970;110C 1172 11AB; +C971;C971;110C 1172 11AC;C971;110C 1172 11AC; +C972;C972;110C 1172 11AD;C972;110C 1172 11AD; +C973;C973;110C 1172 11AE;C973;110C 1172 11AE; +C974;C974;110C 1172 11AF;C974;110C 1172 11AF; +C975;C975;110C 1172 11B0;C975;110C 1172 11B0; +C976;C976;110C 1172 11B1;C976;110C 1172 11B1; +C977;C977;110C 1172 11B2;C977;110C 1172 11B2; +C978;C978;110C 1172 11B3;C978;110C 1172 11B3; +C979;C979;110C 1172 11B4;C979;110C 1172 11B4; +C97A;C97A;110C 1172 11B5;C97A;110C 1172 11B5; +C97B;C97B;110C 1172 11B6;C97B;110C 1172 11B6; +C97C;C97C;110C 1172 11B7;C97C;110C 1172 11B7; +C97D;C97D;110C 1172 11B8;C97D;110C 1172 11B8; +C97E;C97E;110C 1172 11B9;C97E;110C 1172 11B9; +C97F;C97F;110C 1172 11BA;C97F;110C 1172 11BA; +C980;C980;110C 1172 11BB;C980;110C 1172 11BB; +C981;C981;110C 1172 11BC;C981;110C 1172 11BC; +C982;C982;110C 1172 11BD;C982;110C 1172 11BD; +C983;C983;110C 1172 11BE;C983;110C 1172 11BE; +C984;C984;110C 1172 11BF;C984;110C 1172 11BF; +C985;C985;110C 1172 11C0;C985;110C 1172 11C0; +C986;C986;110C 1172 11C1;C986;110C 1172 11C1; +C987;C987;110C 1172 11C2;C987;110C 1172 11C2; +C988;C988;110C 1173;C988;110C 1173; +C989;C989;110C 1173 11A8;C989;110C 1173 11A8; +C98A;C98A;110C 1173 11A9;C98A;110C 1173 11A9; +C98B;C98B;110C 1173 11AA;C98B;110C 1173 11AA; +C98C;C98C;110C 1173 11AB;C98C;110C 1173 11AB; +C98D;C98D;110C 1173 11AC;C98D;110C 1173 11AC; +C98E;C98E;110C 1173 11AD;C98E;110C 1173 11AD; +C98F;C98F;110C 1173 11AE;C98F;110C 1173 11AE; +C990;C990;110C 1173 11AF;C990;110C 1173 11AF; +C991;C991;110C 1173 11B0;C991;110C 1173 11B0; +C992;C992;110C 1173 11B1;C992;110C 1173 11B1; +C993;C993;110C 1173 11B2;C993;110C 1173 11B2; +C994;C994;110C 1173 11B3;C994;110C 1173 11B3; +C995;C995;110C 1173 11B4;C995;110C 1173 11B4; +C996;C996;110C 1173 11B5;C996;110C 1173 11B5; +C997;C997;110C 1173 11B6;C997;110C 1173 11B6; +C998;C998;110C 1173 11B7;C998;110C 1173 11B7; +C999;C999;110C 1173 11B8;C999;110C 1173 11B8; +C99A;C99A;110C 1173 11B9;C99A;110C 1173 11B9; +C99B;C99B;110C 1173 11BA;C99B;110C 1173 11BA; +C99C;C99C;110C 1173 11BB;C99C;110C 1173 11BB; +C99D;C99D;110C 1173 11BC;C99D;110C 1173 11BC; +C99E;C99E;110C 1173 11BD;C99E;110C 1173 11BD; +C99F;C99F;110C 1173 11BE;C99F;110C 1173 11BE; +C9A0;C9A0;110C 1173 11BF;C9A0;110C 1173 11BF; +C9A1;C9A1;110C 1173 11C0;C9A1;110C 1173 11C0; +C9A2;C9A2;110C 1173 11C1;C9A2;110C 1173 11C1; +C9A3;C9A3;110C 1173 11C2;C9A3;110C 1173 11C2; +C9A4;C9A4;110C 1174;C9A4;110C 1174; +C9A5;C9A5;110C 1174 11A8;C9A5;110C 1174 11A8; +C9A6;C9A6;110C 1174 11A9;C9A6;110C 1174 11A9; +C9A7;C9A7;110C 1174 11AA;C9A7;110C 1174 11AA; +C9A8;C9A8;110C 1174 11AB;C9A8;110C 1174 11AB; +C9A9;C9A9;110C 1174 11AC;C9A9;110C 1174 11AC; +C9AA;C9AA;110C 1174 11AD;C9AA;110C 1174 11AD; +C9AB;C9AB;110C 1174 11AE;C9AB;110C 1174 11AE; +C9AC;C9AC;110C 1174 11AF;C9AC;110C 1174 11AF; +C9AD;C9AD;110C 1174 11B0;C9AD;110C 1174 11B0; +C9AE;C9AE;110C 1174 11B1;C9AE;110C 1174 11B1; +C9AF;C9AF;110C 1174 11B2;C9AF;110C 1174 11B2; +C9B0;C9B0;110C 1174 11B3;C9B0;110C 1174 11B3; +C9B1;C9B1;110C 1174 11B4;C9B1;110C 1174 11B4; +C9B2;C9B2;110C 1174 11B5;C9B2;110C 1174 11B5; +C9B3;C9B3;110C 1174 11B6;C9B3;110C 1174 11B6; +C9B4;C9B4;110C 1174 11B7;C9B4;110C 1174 11B7; +C9B5;C9B5;110C 1174 11B8;C9B5;110C 1174 11B8; +C9B6;C9B6;110C 1174 11B9;C9B6;110C 1174 11B9; +C9B7;C9B7;110C 1174 11BA;C9B7;110C 1174 11BA; +C9B8;C9B8;110C 1174 11BB;C9B8;110C 1174 11BB; +C9B9;C9B9;110C 1174 11BC;C9B9;110C 1174 11BC; +C9BA;C9BA;110C 1174 11BD;C9BA;110C 1174 11BD; +C9BB;C9BB;110C 1174 11BE;C9BB;110C 1174 11BE; +C9BC;C9BC;110C 1174 11BF;C9BC;110C 1174 11BF; +C9BD;C9BD;110C 1174 11C0;C9BD;110C 1174 11C0; +C9BE;C9BE;110C 1174 11C1;C9BE;110C 1174 11C1; +C9BF;C9BF;110C 1174 11C2;C9BF;110C 1174 11C2; +C9C0;C9C0;110C 1175;C9C0;110C 1175; +C9C1;C9C1;110C 1175 11A8;C9C1;110C 1175 11A8; +C9C2;C9C2;110C 1175 11A9;C9C2;110C 1175 11A9; +C9C3;C9C3;110C 1175 11AA;C9C3;110C 1175 11AA; +C9C4;C9C4;110C 1175 11AB;C9C4;110C 1175 11AB; +C9C5;C9C5;110C 1175 11AC;C9C5;110C 1175 11AC; +C9C6;C9C6;110C 1175 11AD;C9C6;110C 1175 11AD; +C9C7;C9C7;110C 1175 11AE;C9C7;110C 1175 11AE; +C9C8;C9C8;110C 1175 11AF;C9C8;110C 1175 11AF; +C9C9;C9C9;110C 1175 11B0;C9C9;110C 1175 11B0; +C9CA;C9CA;110C 1175 11B1;C9CA;110C 1175 11B1; +C9CB;C9CB;110C 1175 11B2;C9CB;110C 1175 11B2; +C9CC;C9CC;110C 1175 11B3;C9CC;110C 1175 11B3; +C9CD;C9CD;110C 1175 11B4;C9CD;110C 1175 11B4; +C9CE;C9CE;110C 1175 11B5;C9CE;110C 1175 11B5; +C9CF;C9CF;110C 1175 11B6;C9CF;110C 1175 11B6; +C9D0;C9D0;110C 1175 11B7;C9D0;110C 1175 11B7; +C9D1;C9D1;110C 1175 11B8;C9D1;110C 1175 11B8; +C9D2;C9D2;110C 1175 11B9;C9D2;110C 1175 11B9; +C9D3;C9D3;110C 1175 11BA;C9D3;110C 1175 11BA; +C9D4;C9D4;110C 1175 11BB;C9D4;110C 1175 11BB; +C9D5;C9D5;110C 1175 11BC;C9D5;110C 1175 11BC; +C9D6;C9D6;110C 1175 11BD;C9D6;110C 1175 11BD; +C9D7;C9D7;110C 1175 11BE;C9D7;110C 1175 11BE; +C9D8;C9D8;110C 1175 11BF;C9D8;110C 1175 11BF; +C9D9;C9D9;110C 1175 11C0;C9D9;110C 1175 11C0; +C9DA;C9DA;110C 1175 11C1;C9DA;110C 1175 11C1; +C9DB;C9DB;110C 1175 11C2;C9DB;110C 1175 11C2; +C9DC;C9DC;110D 1161;C9DC;110D 1161; +C9DD;C9DD;110D 1161 11A8;C9DD;110D 1161 11A8; +C9DE;C9DE;110D 1161 11A9;C9DE;110D 1161 11A9; +C9DF;C9DF;110D 1161 11AA;C9DF;110D 1161 11AA; +C9E0;C9E0;110D 1161 11AB;C9E0;110D 1161 11AB; +C9E1;C9E1;110D 1161 11AC;C9E1;110D 1161 11AC; +C9E2;C9E2;110D 1161 11AD;C9E2;110D 1161 11AD; +C9E3;C9E3;110D 1161 11AE;C9E3;110D 1161 11AE; +C9E4;C9E4;110D 1161 11AF;C9E4;110D 1161 11AF; +C9E5;C9E5;110D 1161 11B0;C9E5;110D 1161 11B0; +C9E6;C9E6;110D 1161 11B1;C9E6;110D 1161 11B1; +C9E7;C9E7;110D 1161 11B2;C9E7;110D 1161 11B2; +C9E8;C9E8;110D 1161 11B3;C9E8;110D 1161 11B3; +C9E9;C9E9;110D 1161 11B4;C9E9;110D 1161 11B4; +C9EA;C9EA;110D 1161 11B5;C9EA;110D 1161 11B5; +C9EB;C9EB;110D 1161 11B6;C9EB;110D 1161 11B6; +C9EC;C9EC;110D 1161 11B7;C9EC;110D 1161 11B7; +C9ED;C9ED;110D 1161 11B8;C9ED;110D 1161 11B8; +C9EE;C9EE;110D 1161 11B9;C9EE;110D 1161 11B9; +C9EF;C9EF;110D 1161 11BA;C9EF;110D 1161 11BA; +C9F0;C9F0;110D 1161 11BB;C9F0;110D 1161 11BB; +C9F1;C9F1;110D 1161 11BC;C9F1;110D 1161 11BC; +C9F2;C9F2;110D 1161 11BD;C9F2;110D 1161 11BD; +C9F3;C9F3;110D 1161 11BE;C9F3;110D 1161 11BE; +C9F4;C9F4;110D 1161 11BF;C9F4;110D 1161 11BF; +C9F5;C9F5;110D 1161 11C0;C9F5;110D 1161 11C0; +C9F6;C9F6;110D 1161 11C1;C9F6;110D 1161 11C1; +C9F7;C9F7;110D 1161 11C2;C9F7;110D 1161 11C2; +C9F8;C9F8;110D 1162;C9F8;110D 1162; +C9F9;C9F9;110D 1162 11A8;C9F9;110D 1162 11A8; +C9FA;C9FA;110D 1162 11A9;C9FA;110D 1162 11A9; +C9FB;C9FB;110D 1162 11AA;C9FB;110D 1162 11AA; +C9FC;C9FC;110D 1162 11AB;C9FC;110D 1162 11AB; +C9FD;C9FD;110D 1162 11AC;C9FD;110D 1162 11AC; +C9FE;C9FE;110D 1162 11AD;C9FE;110D 1162 11AD; +C9FF;C9FF;110D 1162 11AE;C9FF;110D 1162 11AE; +CA00;CA00;110D 1162 11AF;CA00;110D 1162 11AF; +CA01;CA01;110D 1162 11B0;CA01;110D 1162 11B0; +CA02;CA02;110D 1162 11B1;CA02;110D 1162 11B1; +CA03;CA03;110D 1162 11B2;CA03;110D 1162 11B2; +CA04;CA04;110D 1162 11B3;CA04;110D 1162 11B3; +CA05;CA05;110D 1162 11B4;CA05;110D 1162 11B4; +CA06;CA06;110D 1162 11B5;CA06;110D 1162 11B5; +CA07;CA07;110D 1162 11B6;CA07;110D 1162 11B6; +CA08;CA08;110D 1162 11B7;CA08;110D 1162 11B7; +CA09;CA09;110D 1162 11B8;CA09;110D 1162 11B8; +CA0A;CA0A;110D 1162 11B9;CA0A;110D 1162 11B9; +CA0B;CA0B;110D 1162 11BA;CA0B;110D 1162 11BA; +CA0C;CA0C;110D 1162 11BB;CA0C;110D 1162 11BB; +CA0D;CA0D;110D 1162 11BC;CA0D;110D 1162 11BC; +CA0E;CA0E;110D 1162 11BD;CA0E;110D 1162 11BD; +CA0F;CA0F;110D 1162 11BE;CA0F;110D 1162 11BE; +CA10;CA10;110D 1162 11BF;CA10;110D 1162 11BF; +CA11;CA11;110D 1162 11C0;CA11;110D 1162 11C0; +CA12;CA12;110D 1162 11C1;CA12;110D 1162 11C1; +CA13;CA13;110D 1162 11C2;CA13;110D 1162 11C2; +CA14;CA14;110D 1163;CA14;110D 1163; +CA15;CA15;110D 1163 11A8;CA15;110D 1163 11A8; +CA16;CA16;110D 1163 11A9;CA16;110D 1163 11A9; +CA17;CA17;110D 1163 11AA;CA17;110D 1163 11AA; +CA18;CA18;110D 1163 11AB;CA18;110D 1163 11AB; +CA19;CA19;110D 1163 11AC;CA19;110D 1163 11AC; +CA1A;CA1A;110D 1163 11AD;CA1A;110D 1163 11AD; +CA1B;CA1B;110D 1163 11AE;CA1B;110D 1163 11AE; +CA1C;CA1C;110D 1163 11AF;CA1C;110D 1163 11AF; +CA1D;CA1D;110D 1163 11B0;CA1D;110D 1163 11B0; +CA1E;CA1E;110D 1163 11B1;CA1E;110D 1163 11B1; +CA1F;CA1F;110D 1163 11B2;CA1F;110D 1163 11B2; +CA20;CA20;110D 1163 11B3;CA20;110D 1163 11B3; +CA21;CA21;110D 1163 11B4;CA21;110D 1163 11B4; +CA22;CA22;110D 1163 11B5;CA22;110D 1163 11B5; +CA23;CA23;110D 1163 11B6;CA23;110D 1163 11B6; +CA24;CA24;110D 1163 11B7;CA24;110D 1163 11B7; +CA25;CA25;110D 1163 11B8;CA25;110D 1163 11B8; +CA26;CA26;110D 1163 11B9;CA26;110D 1163 11B9; +CA27;CA27;110D 1163 11BA;CA27;110D 1163 11BA; +CA28;CA28;110D 1163 11BB;CA28;110D 1163 11BB; +CA29;CA29;110D 1163 11BC;CA29;110D 1163 11BC; +CA2A;CA2A;110D 1163 11BD;CA2A;110D 1163 11BD; +CA2B;CA2B;110D 1163 11BE;CA2B;110D 1163 11BE; +CA2C;CA2C;110D 1163 11BF;CA2C;110D 1163 11BF; +CA2D;CA2D;110D 1163 11C0;CA2D;110D 1163 11C0; +CA2E;CA2E;110D 1163 11C1;CA2E;110D 1163 11C1; +CA2F;CA2F;110D 1163 11C2;CA2F;110D 1163 11C2; +CA30;CA30;110D 1164;CA30;110D 1164; +CA31;CA31;110D 1164 11A8;CA31;110D 1164 11A8; +CA32;CA32;110D 1164 11A9;CA32;110D 1164 11A9; +CA33;CA33;110D 1164 11AA;CA33;110D 1164 11AA; +CA34;CA34;110D 1164 11AB;CA34;110D 1164 11AB; +CA35;CA35;110D 1164 11AC;CA35;110D 1164 11AC; +CA36;CA36;110D 1164 11AD;CA36;110D 1164 11AD; +CA37;CA37;110D 1164 11AE;CA37;110D 1164 11AE; +CA38;CA38;110D 1164 11AF;CA38;110D 1164 11AF; +CA39;CA39;110D 1164 11B0;CA39;110D 1164 11B0; +CA3A;CA3A;110D 1164 11B1;CA3A;110D 1164 11B1; +CA3B;CA3B;110D 1164 11B2;CA3B;110D 1164 11B2; +CA3C;CA3C;110D 1164 11B3;CA3C;110D 1164 11B3; +CA3D;CA3D;110D 1164 11B4;CA3D;110D 1164 11B4; +CA3E;CA3E;110D 1164 11B5;CA3E;110D 1164 11B5; +CA3F;CA3F;110D 1164 11B6;CA3F;110D 1164 11B6; +CA40;CA40;110D 1164 11B7;CA40;110D 1164 11B7; +CA41;CA41;110D 1164 11B8;CA41;110D 1164 11B8; +CA42;CA42;110D 1164 11B9;CA42;110D 1164 11B9; +CA43;CA43;110D 1164 11BA;CA43;110D 1164 11BA; +CA44;CA44;110D 1164 11BB;CA44;110D 1164 11BB; +CA45;CA45;110D 1164 11BC;CA45;110D 1164 11BC; +CA46;CA46;110D 1164 11BD;CA46;110D 1164 11BD; +CA47;CA47;110D 1164 11BE;CA47;110D 1164 11BE; +CA48;CA48;110D 1164 11BF;CA48;110D 1164 11BF; +CA49;CA49;110D 1164 11C0;CA49;110D 1164 11C0; +CA4A;CA4A;110D 1164 11C1;CA4A;110D 1164 11C1; +CA4B;CA4B;110D 1164 11C2;CA4B;110D 1164 11C2; +CA4C;CA4C;110D 1165;CA4C;110D 1165; +CA4D;CA4D;110D 1165 11A8;CA4D;110D 1165 11A8; +CA4E;CA4E;110D 1165 11A9;CA4E;110D 1165 11A9; +CA4F;CA4F;110D 1165 11AA;CA4F;110D 1165 11AA; +CA50;CA50;110D 1165 11AB;CA50;110D 1165 11AB; +CA51;CA51;110D 1165 11AC;CA51;110D 1165 11AC; +CA52;CA52;110D 1165 11AD;CA52;110D 1165 11AD; +CA53;CA53;110D 1165 11AE;CA53;110D 1165 11AE; +CA54;CA54;110D 1165 11AF;CA54;110D 1165 11AF; +CA55;CA55;110D 1165 11B0;CA55;110D 1165 11B0; +CA56;CA56;110D 1165 11B1;CA56;110D 1165 11B1; +CA57;CA57;110D 1165 11B2;CA57;110D 1165 11B2; +CA58;CA58;110D 1165 11B3;CA58;110D 1165 11B3; +CA59;CA59;110D 1165 11B4;CA59;110D 1165 11B4; +CA5A;CA5A;110D 1165 11B5;CA5A;110D 1165 11B5; +CA5B;CA5B;110D 1165 11B6;CA5B;110D 1165 11B6; +CA5C;CA5C;110D 1165 11B7;CA5C;110D 1165 11B7; +CA5D;CA5D;110D 1165 11B8;CA5D;110D 1165 11B8; +CA5E;CA5E;110D 1165 11B9;CA5E;110D 1165 11B9; +CA5F;CA5F;110D 1165 11BA;CA5F;110D 1165 11BA; +CA60;CA60;110D 1165 11BB;CA60;110D 1165 11BB; +CA61;CA61;110D 1165 11BC;CA61;110D 1165 11BC; +CA62;CA62;110D 1165 11BD;CA62;110D 1165 11BD; +CA63;CA63;110D 1165 11BE;CA63;110D 1165 11BE; +CA64;CA64;110D 1165 11BF;CA64;110D 1165 11BF; +CA65;CA65;110D 1165 11C0;CA65;110D 1165 11C0; +CA66;CA66;110D 1165 11C1;CA66;110D 1165 11C1; +CA67;CA67;110D 1165 11C2;CA67;110D 1165 11C2; +CA68;CA68;110D 1166;CA68;110D 1166; +CA69;CA69;110D 1166 11A8;CA69;110D 1166 11A8; +CA6A;CA6A;110D 1166 11A9;CA6A;110D 1166 11A9; +CA6B;CA6B;110D 1166 11AA;CA6B;110D 1166 11AA; +CA6C;CA6C;110D 1166 11AB;CA6C;110D 1166 11AB; +CA6D;CA6D;110D 1166 11AC;CA6D;110D 1166 11AC; +CA6E;CA6E;110D 1166 11AD;CA6E;110D 1166 11AD; +CA6F;CA6F;110D 1166 11AE;CA6F;110D 1166 11AE; +CA70;CA70;110D 1166 11AF;CA70;110D 1166 11AF; +CA71;CA71;110D 1166 11B0;CA71;110D 1166 11B0; +CA72;CA72;110D 1166 11B1;CA72;110D 1166 11B1; +CA73;CA73;110D 1166 11B2;CA73;110D 1166 11B2; +CA74;CA74;110D 1166 11B3;CA74;110D 1166 11B3; +CA75;CA75;110D 1166 11B4;CA75;110D 1166 11B4; +CA76;CA76;110D 1166 11B5;CA76;110D 1166 11B5; +CA77;CA77;110D 1166 11B6;CA77;110D 1166 11B6; +CA78;CA78;110D 1166 11B7;CA78;110D 1166 11B7; +CA79;CA79;110D 1166 11B8;CA79;110D 1166 11B8; +CA7A;CA7A;110D 1166 11B9;CA7A;110D 1166 11B9; +CA7B;CA7B;110D 1166 11BA;CA7B;110D 1166 11BA; +CA7C;CA7C;110D 1166 11BB;CA7C;110D 1166 11BB; +CA7D;CA7D;110D 1166 11BC;CA7D;110D 1166 11BC; +CA7E;CA7E;110D 1166 11BD;CA7E;110D 1166 11BD; +CA7F;CA7F;110D 1166 11BE;CA7F;110D 1166 11BE; +CA80;CA80;110D 1166 11BF;CA80;110D 1166 11BF; +CA81;CA81;110D 1166 11C0;CA81;110D 1166 11C0; +CA82;CA82;110D 1166 11C1;CA82;110D 1166 11C1; +CA83;CA83;110D 1166 11C2;CA83;110D 1166 11C2; +CA84;CA84;110D 1167;CA84;110D 1167; +CA85;CA85;110D 1167 11A8;CA85;110D 1167 11A8; +CA86;CA86;110D 1167 11A9;CA86;110D 1167 11A9; +CA87;CA87;110D 1167 11AA;CA87;110D 1167 11AA; +CA88;CA88;110D 1167 11AB;CA88;110D 1167 11AB; +CA89;CA89;110D 1167 11AC;CA89;110D 1167 11AC; +CA8A;CA8A;110D 1167 11AD;CA8A;110D 1167 11AD; +CA8B;CA8B;110D 1167 11AE;CA8B;110D 1167 11AE; +CA8C;CA8C;110D 1167 11AF;CA8C;110D 1167 11AF; +CA8D;CA8D;110D 1167 11B0;CA8D;110D 1167 11B0; +CA8E;CA8E;110D 1167 11B1;CA8E;110D 1167 11B1; +CA8F;CA8F;110D 1167 11B2;CA8F;110D 1167 11B2; +CA90;CA90;110D 1167 11B3;CA90;110D 1167 11B3; +CA91;CA91;110D 1167 11B4;CA91;110D 1167 11B4; +CA92;CA92;110D 1167 11B5;CA92;110D 1167 11B5; +CA93;CA93;110D 1167 11B6;CA93;110D 1167 11B6; +CA94;CA94;110D 1167 11B7;CA94;110D 1167 11B7; +CA95;CA95;110D 1167 11B8;CA95;110D 1167 11B8; +CA96;CA96;110D 1167 11B9;CA96;110D 1167 11B9; +CA97;CA97;110D 1167 11BA;CA97;110D 1167 11BA; +CA98;CA98;110D 1167 11BB;CA98;110D 1167 11BB; +CA99;CA99;110D 1167 11BC;CA99;110D 1167 11BC; +CA9A;CA9A;110D 1167 11BD;CA9A;110D 1167 11BD; +CA9B;CA9B;110D 1167 11BE;CA9B;110D 1167 11BE; +CA9C;CA9C;110D 1167 11BF;CA9C;110D 1167 11BF; +CA9D;CA9D;110D 1167 11C0;CA9D;110D 1167 11C0; +CA9E;CA9E;110D 1167 11C1;CA9E;110D 1167 11C1; +CA9F;CA9F;110D 1167 11C2;CA9F;110D 1167 11C2; +CAA0;CAA0;110D 1168;CAA0;110D 1168; +CAA1;CAA1;110D 1168 11A8;CAA1;110D 1168 11A8; +CAA2;CAA2;110D 1168 11A9;CAA2;110D 1168 11A9; +CAA3;CAA3;110D 1168 11AA;CAA3;110D 1168 11AA; +CAA4;CAA4;110D 1168 11AB;CAA4;110D 1168 11AB; +CAA5;CAA5;110D 1168 11AC;CAA5;110D 1168 11AC; +CAA6;CAA6;110D 1168 11AD;CAA6;110D 1168 11AD; +CAA7;CAA7;110D 1168 11AE;CAA7;110D 1168 11AE; +CAA8;CAA8;110D 1168 11AF;CAA8;110D 1168 11AF; +CAA9;CAA9;110D 1168 11B0;CAA9;110D 1168 11B0; +CAAA;CAAA;110D 1168 11B1;CAAA;110D 1168 11B1; +CAAB;CAAB;110D 1168 11B2;CAAB;110D 1168 11B2; +CAAC;CAAC;110D 1168 11B3;CAAC;110D 1168 11B3; +CAAD;CAAD;110D 1168 11B4;CAAD;110D 1168 11B4; +CAAE;CAAE;110D 1168 11B5;CAAE;110D 1168 11B5; +CAAF;CAAF;110D 1168 11B6;CAAF;110D 1168 11B6; +CAB0;CAB0;110D 1168 11B7;CAB0;110D 1168 11B7; +CAB1;CAB1;110D 1168 11B8;CAB1;110D 1168 11B8; +CAB2;CAB2;110D 1168 11B9;CAB2;110D 1168 11B9; +CAB3;CAB3;110D 1168 11BA;CAB3;110D 1168 11BA; +CAB4;CAB4;110D 1168 11BB;CAB4;110D 1168 11BB; +CAB5;CAB5;110D 1168 11BC;CAB5;110D 1168 11BC; +CAB6;CAB6;110D 1168 11BD;CAB6;110D 1168 11BD; +CAB7;CAB7;110D 1168 11BE;CAB7;110D 1168 11BE; +CAB8;CAB8;110D 1168 11BF;CAB8;110D 1168 11BF; +CAB9;CAB9;110D 1168 11C0;CAB9;110D 1168 11C0; +CABA;CABA;110D 1168 11C1;CABA;110D 1168 11C1; +CABB;CABB;110D 1168 11C2;CABB;110D 1168 11C2; +CABC;CABC;110D 1169;CABC;110D 1169; +CABD;CABD;110D 1169 11A8;CABD;110D 1169 11A8; +CABE;CABE;110D 1169 11A9;CABE;110D 1169 11A9; +CABF;CABF;110D 1169 11AA;CABF;110D 1169 11AA; +CAC0;CAC0;110D 1169 11AB;CAC0;110D 1169 11AB; +CAC1;CAC1;110D 1169 11AC;CAC1;110D 1169 11AC; +CAC2;CAC2;110D 1169 11AD;CAC2;110D 1169 11AD; +CAC3;CAC3;110D 1169 11AE;CAC3;110D 1169 11AE; +CAC4;CAC4;110D 1169 11AF;CAC4;110D 1169 11AF; +CAC5;CAC5;110D 1169 11B0;CAC5;110D 1169 11B0; +CAC6;CAC6;110D 1169 11B1;CAC6;110D 1169 11B1; +CAC7;CAC7;110D 1169 11B2;CAC7;110D 1169 11B2; +CAC8;CAC8;110D 1169 11B3;CAC8;110D 1169 11B3; +CAC9;CAC9;110D 1169 11B4;CAC9;110D 1169 11B4; +CACA;CACA;110D 1169 11B5;CACA;110D 1169 11B5; +CACB;CACB;110D 1169 11B6;CACB;110D 1169 11B6; +CACC;CACC;110D 1169 11B7;CACC;110D 1169 11B7; +CACD;CACD;110D 1169 11B8;CACD;110D 1169 11B8; +CACE;CACE;110D 1169 11B9;CACE;110D 1169 11B9; +CACF;CACF;110D 1169 11BA;CACF;110D 1169 11BA; +CAD0;CAD0;110D 1169 11BB;CAD0;110D 1169 11BB; +CAD1;CAD1;110D 1169 11BC;CAD1;110D 1169 11BC; +CAD2;CAD2;110D 1169 11BD;CAD2;110D 1169 11BD; +CAD3;CAD3;110D 1169 11BE;CAD3;110D 1169 11BE; +CAD4;CAD4;110D 1169 11BF;CAD4;110D 1169 11BF; +CAD5;CAD5;110D 1169 11C0;CAD5;110D 1169 11C0; +CAD6;CAD6;110D 1169 11C1;CAD6;110D 1169 11C1; +CAD7;CAD7;110D 1169 11C2;CAD7;110D 1169 11C2; +CAD8;CAD8;110D 116A;CAD8;110D 116A; +CAD9;CAD9;110D 116A 11A8;CAD9;110D 116A 11A8; +CADA;CADA;110D 116A 11A9;CADA;110D 116A 11A9; +CADB;CADB;110D 116A 11AA;CADB;110D 116A 11AA; +CADC;CADC;110D 116A 11AB;CADC;110D 116A 11AB; +CADD;CADD;110D 116A 11AC;CADD;110D 116A 11AC; +CADE;CADE;110D 116A 11AD;CADE;110D 116A 11AD; +CADF;CADF;110D 116A 11AE;CADF;110D 116A 11AE; +CAE0;CAE0;110D 116A 11AF;CAE0;110D 116A 11AF; +CAE1;CAE1;110D 116A 11B0;CAE1;110D 116A 11B0; +CAE2;CAE2;110D 116A 11B1;CAE2;110D 116A 11B1; +CAE3;CAE3;110D 116A 11B2;CAE3;110D 116A 11B2; +CAE4;CAE4;110D 116A 11B3;CAE4;110D 116A 11B3; +CAE5;CAE5;110D 116A 11B4;CAE5;110D 116A 11B4; +CAE6;CAE6;110D 116A 11B5;CAE6;110D 116A 11B5; +CAE7;CAE7;110D 116A 11B6;CAE7;110D 116A 11B6; +CAE8;CAE8;110D 116A 11B7;CAE8;110D 116A 11B7; +CAE9;CAE9;110D 116A 11B8;CAE9;110D 116A 11B8; +CAEA;CAEA;110D 116A 11B9;CAEA;110D 116A 11B9; +CAEB;CAEB;110D 116A 11BA;CAEB;110D 116A 11BA; +CAEC;CAEC;110D 116A 11BB;CAEC;110D 116A 11BB; +CAED;CAED;110D 116A 11BC;CAED;110D 116A 11BC; +CAEE;CAEE;110D 116A 11BD;CAEE;110D 116A 11BD; +CAEF;CAEF;110D 116A 11BE;CAEF;110D 116A 11BE; +CAF0;CAF0;110D 116A 11BF;CAF0;110D 116A 11BF; +CAF1;CAF1;110D 116A 11C0;CAF1;110D 116A 11C0; +CAF2;CAF2;110D 116A 11C1;CAF2;110D 116A 11C1; +CAF3;CAF3;110D 116A 11C2;CAF3;110D 116A 11C2; +CAF4;CAF4;110D 116B;CAF4;110D 116B; +CAF5;CAF5;110D 116B 11A8;CAF5;110D 116B 11A8; +CAF6;CAF6;110D 116B 11A9;CAF6;110D 116B 11A9; +CAF7;CAF7;110D 116B 11AA;CAF7;110D 116B 11AA; +CAF8;CAF8;110D 116B 11AB;CAF8;110D 116B 11AB; +CAF9;CAF9;110D 116B 11AC;CAF9;110D 116B 11AC; +CAFA;CAFA;110D 116B 11AD;CAFA;110D 116B 11AD; +CAFB;CAFB;110D 116B 11AE;CAFB;110D 116B 11AE; +CAFC;CAFC;110D 116B 11AF;CAFC;110D 116B 11AF; +CAFD;CAFD;110D 116B 11B0;CAFD;110D 116B 11B0; +CAFE;CAFE;110D 116B 11B1;CAFE;110D 116B 11B1; +CAFF;CAFF;110D 116B 11B2;CAFF;110D 116B 11B2; +CB00;CB00;110D 116B 11B3;CB00;110D 116B 11B3; +CB01;CB01;110D 116B 11B4;CB01;110D 116B 11B4; +CB02;CB02;110D 116B 11B5;CB02;110D 116B 11B5; +CB03;CB03;110D 116B 11B6;CB03;110D 116B 11B6; +CB04;CB04;110D 116B 11B7;CB04;110D 116B 11B7; +CB05;CB05;110D 116B 11B8;CB05;110D 116B 11B8; +CB06;CB06;110D 116B 11B9;CB06;110D 116B 11B9; +CB07;CB07;110D 116B 11BA;CB07;110D 116B 11BA; +CB08;CB08;110D 116B 11BB;CB08;110D 116B 11BB; +CB09;CB09;110D 116B 11BC;CB09;110D 116B 11BC; +CB0A;CB0A;110D 116B 11BD;CB0A;110D 116B 11BD; +CB0B;CB0B;110D 116B 11BE;CB0B;110D 116B 11BE; +CB0C;CB0C;110D 116B 11BF;CB0C;110D 116B 11BF; +CB0D;CB0D;110D 116B 11C0;CB0D;110D 116B 11C0; +CB0E;CB0E;110D 116B 11C1;CB0E;110D 116B 11C1; +CB0F;CB0F;110D 116B 11C2;CB0F;110D 116B 11C2; +CB10;CB10;110D 116C;CB10;110D 116C; +CB11;CB11;110D 116C 11A8;CB11;110D 116C 11A8; +CB12;CB12;110D 116C 11A9;CB12;110D 116C 11A9; +CB13;CB13;110D 116C 11AA;CB13;110D 116C 11AA; +CB14;CB14;110D 116C 11AB;CB14;110D 116C 11AB; +CB15;CB15;110D 116C 11AC;CB15;110D 116C 11AC; +CB16;CB16;110D 116C 11AD;CB16;110D 116C 11AD; +CB17;CB17;110D 116C 11AE;CB17;110D 116C 11AE; +CB18;CB18;110D 116C 11AF;CB18;110D 116C 11AF; +CB19;CB19;110D 116C 11B0;CB19;110D 116C 11B0; +CB1A;CB1A;110D 116C 11B1;CB1A;110D 116C 11B1; +CB1B;CB1B;110D 116C 11B2;CB1B;110D 116C 11B2; +CB1C;CB1C;110D 116C 11B3;CB1C;110D 116C 11B3; +CB1D;CB1D;110D 116C 11B4;CB1D;110D 116C 11B4; +CB1E;CB1E;110D 116C 11B5;CB1E;110D 116C 11B5; +CB1F;CB1F;110D 116C 11B6;CB1F;110D 116C 11B6; +CB20;CB20;110D 116C 11B7;CB20;110D 116C 11B7; +CB21;CB21;110D 116C 11B8;CB21;110D 116C 11B8; +CB22;CB22;110D 116C 11B9;CB22;110D 116C 11B9; +CB23;CB23;110D 116C 11BA;CB23;110D 116C 11BA; +CB24;CB24;110D 116C 11BB;CB24;110D 116C 11BB; +CB25;CB25;110D 116C 11BC;CB25;110D 116C 11BC; +CB26;CB26;110D 116C 11BD;CB26;110D 116C 11BD; +CB27;CB27;110D 116C 11BE;CB27;110D 116C 11BE; +CB28;CB28;110D 116C 11BF;CB28;110D 116C 11BF; +CB29;CB29;110D 116C 11C0;CB29;110D 116C 11C0; +CB2A;CB2A;110D 116C 11C1;CB2A;110D 116C 11C1; +CB2B;CB2B;110D 116C 11C2;CB2B;110D 116C 11C2; +CB2C;CB2C;110D 116D;CB2C;110D 116D; +CB2D;CB2D;110D 116D 11A8;CB2D;110D 116D 11A8; +CB2E;CB2E;110D 116D 11A9;CB2E;110D 116D 11A9; +CB2F;CB2F;110D 116D 11AA;CB2F;110D 116D 11AA; +CB30;CB30;110D 116D 11AB;CB30;110D 116D 11AB; +CB31;CB31;110D 116D 11AC;CB31;110D 116D 11AC; +CB32;CB32;110D 116D 11AD;CB32;110D 116D 11AD; +CB33;CB33;110D 116D 11AE;CB33;110D 116D 11AE; +CB34;CB34;110D 116D 11AF;CB34;110D 116D 11AF; +CB35;CB35;110D 116D 11B0;CB35;110D 116D 11B0; +CB36;CB36;110D 116D 11B1;CB36;110D 116D 11B1; +CB37;CB37;110D 116D 11B2;CB37;110D 116D 11B2; +CB38;CB38;110D 116D 11B3;CB38;110D 116D 11B3; +CB39;CB39;110D 116D 11B4;CB39;110D 116D 11B4; +CB3A;CB3A;110D 116D 11B5;CB3A;110D 116D 11B5; +CB3B;CB3B;110D 116D 11B6;CB3B;110D 116D 11B6; +CB3C;CB3C;110D 116D 11B7;CB3C;110D 116D 11B7; +CB3D;CB3D;110D 116D 11B8;CB3D;110D 116D 11B8; +CB3E;CB3E;110D 116D 11B9;CB3E;110D 116D 11B9; +CB3F;CB3F;110D 116D 11BA;CB3F;110D 116D 11BA; +CB40;CB40;110D 116D 11BB;CB40;110D 116D 11BB; +CB41;CB41;110D 116D 11BC;CB41;110D 116D 11BC; +CB42;CB42;110D 116D 11BD;CB42;110D 116D 11BD; +CB43;CB43;110D 116D 11BE;CB43;110D 116D 11BE; +CB44;CB44;110D 116D 11BF;CB44;110D 116D 11BF; +CB45;CB45;110D 116D 11C0;CB45;110D 116D 11C0; +CB46;CB46;110D 116D 11C1;CB46;110D 116D 11C1; +CB47;CB47;110D 116D 11C2;CB47;110D 116D 11C2; +CB48;CB48;110D 116E;CB48;110D 116E; +CB49;CB49;110D 116E 11A8;CB49;110D 116E 11A8; +CB4A;CB4A;110D 116E 11A9;CB4A;110D 116E 11A9; +CB4B;CB4B;110D 116E 11AA;CB4B;110D 116E 11AA; +CB4C;CB4C;110D 116E 11AB;CB4C;110D 116E 11AB; +CB4D;CB4D;110D 116E 11AC;CB4D;110D 116E 11AC; +CB4E;CB4E;110D 116E 11AD;CB4E;110D 116E 11AD; +CB4F;CB4F;110D 116E 11AE;CB4F;110D 116E 11AE; +CB50;CB50;110D 116E 11AF;CB50;110D 116E 11AF; +CB51;CB51;110D 116E 11B0;CB51;110D 116E 11B0; +CB52;CB52;110D 116E 11B1;CB52;110D 116E 11B1; +CB53;CB53;110D 116E 11B2;CB53;110D 116E 11B2; +CB54;CB54;110D 116E 11B3;CB54;110D 116E 11B3; +CB55;CB55;110D 116E 11B4;CB55;110D 116E 11B4; +CB56;CB56;110D 116E 11B5;CB56;110D 116E 11B5; +CB57;CB57;110D 116E 11B6;CB57;110D 116E 11B6; +CB58;CB58;110D 116E 11B7;CB58;110D 116E 11B7; +CB59;CB59;110D 116E 11B8;CB59;110D 116E 11B8; +CB5A;CB5A;110D 116E 11B9;CB5A;110D 116E 11B9; +CB5B;CB5B;110D 116E 11BA;CB5B;110D 116E 11BA; +CB5C;CB5C;110D 116E 11BB;CB5C;110D 116E 11BB; +CB5D;CB5D;110D 116E 11BC;CB5D;110D 116E 11BC; +CB5E;CB5E;110D 116E 11BD;CB5E;110D 116E 11BD; +CB5F;CB5F;110D 116E 11BE;CB5F;110D 116E 11BE; +CB60;CB60;110D 116E 11BF;CB60;110D 116E 11BF; +CB61;CB61;110D 116E 11C0;CB61;110D 116E 11C0; +CB62;CB62;110D 116E 11C1;CB62;110D 116E 11C1; +CB63;CB63;110D 116E 11C2;CB63;110D 116E 11C2; +CB64;CB64;110D 116F;CB64;110D 116F; +CB65;CB65;110D 116F 11A8;CB65;110D 116F 11A8; +CB66;CB66;110D 116F 11A9;CB66;110D 116F 11A9; +CB67;CB67;110D 116F 11AA;CB67;110D 116F 11AA; +CB68;CB68;110D 116F 11AB;CB68;110D 116F 11AB; +CB69;CB69;110D 116F 11AC;CB69;110D 116F 11AC; +CB6A;CB6A;110D 116F 11AD;CB6A;110D 116F 11AD; +CB6B;CB6B;110D 116F 11AE;CB6B;110D 116F 11AE; +CB6C;CB6C;110D 116F 11AF;CB6C;110D 116F 11AF; +CB6D;CB6D;110D 116F 11B0;CB6D;110D 116F 11B0; +CB6E;CB6E;110D 116F 11B1;CB6E;110D 116F 11B1; +CB6F;CB6F;110D 116F 11B2;CB6F;110D 116F 11B2; +CB70;CB70;110D 116F 11B3;CB70;110D 116F 11B3; +CB71;CB71;110D 116F 11B4;CB71;110D 116F 11B4; +CB72;CB72;110D 116F 11B5;CB72;110D 116F 11B5; +CB73;CB73;110D 116F 11B6;CB73;110D 116F 11B6; +CB74;CB74;110D 116F 11B7;CB74;110D 116F 11B7; +CB75;CB75;110D 116F 11B8;CB75;110D 116F 11B8; +CB76;CB76;110D 116F 11B9;CB76;110D 116F 11B9; +CB77;CB77;110D 116F 11BA;CB77;110D 116F 11BA; +CB78;CB78;110D 116F 11BB;CB78;110D 116F 11BB; +CB79;CB79;110D 116F 11BC;CB79;110D 116F 11BC; +CB7A;CB7A;110D 116F 11BD;CB7A;110D 116F 11BD; +CB7B;CB7B;110D 116F 11BE;CB7B;110D 116F 11BE; +CB7C;CB7C;110D 116F 11BF;CB7C;110D 116F 11BF; +CB7D;CB7D;110D 116F 11C0;CB7D;110D 116F 11C0; +CB7E;CB7E;110D 116F 11C1;CB7E;110D 116F 11C1; +CB7F;CB7F;110D 116F 11C2;CB7F;110D 116F 11C2; +CB80;CB80;110D 1170;CB80;110D 1170; +CB81;CB81;110D 1170 11A8;CB81;110D 1170 11A8; +CB82;CB82;110D 1170 11A9;CB82;110D 1170 11A9; +CB83;CB83;110D 1170 11AA;CB83;110D 1170 11AA; +CB84;CB84;110D 1170 11AB;CB84;110D 1170 11AB; +CB85;CB85;110D 1170 11AC;CB85;110D 1170 11AC; +CB86;CB86;110D 1170 11AD;CB86;110D 1170 11AD; +CB87;CB87;110D 1170 11AE;CB87;110D 1170 11AE; +CB88;CB88;110D 1170 11AF;CB88;110D 1170 11AF; +CB89;CB89;110D 1170 11B0;CB89;110D 1170 11B0; +CB8A;CB8A;110D 1170 11B1;CB8A;110D 1170 11B1; +CB8B;CB8B;110D 1170 11B2;CB8B;110D 1170 11B2; +CB8C;CB8C;110D 1170 11B3;CB8C;110D 1170 11B3; +CB8D;CB8D;110D 1170 11B4;CB8D;110D 1170 11B4; +CB8E;CB8E;110D 1170 11B5;CB8E;110D 1170 11B5; +CB8F;CB8F;110D 1170 11B6;CB8F;110D 1170 11B6; +CB90;CB90;110D 1170 11B7;CB90;110D 1170 11B7; +CB91;CB91;110D 1170 11B8;CB91;110D 1170 11B8; +CB92;CB92;110D 1170 11B9;CB92;110D 1170 11B9; +CB93;CB93;110D 1170 11BA;CB93;110D 1170 11BA; +CB94;CB94;110D 1170 11BB;CB94;110D 1170 11BB; +CB95;CB95;110D 1170 11BC;CB95;110D 1170 11BC; +CB96;CB96;110D 1170 11BD;CB96;110D 1170 11BD; +CB97;CB97;110D 1170 11BE;CB97;110D 1170 11BE; +CB98;CB98;110D 1170 11BF;CB98;110D 1170 11BF; +CB99;CB99;110D 1170 11C0;CB99;110D 1170 11C0; +CB9A;CB9A;110D 1170 11C1;CB9A;110D 1170 11C1; +CB9B;CB9B;110D 1170 11C2;CB9B;110D 1170 11C2; +CB9C;CB9C;110D 1171;CB9C;110D 1171; +CB9D;CB9D;110D 1171 11A8;CB9D;110D 1171 11A8; +CB9E;CB9E;110D 1171 11A9;CB9E;110D 1171 11A9; +CB9F;CB9F;110D 1171 11AA;CB9F;110D 1171 11AA; +CBA0;CBA0;110D 1171 11AB;CBA0;110D 1171 11AB; +CBA1;CBA1;110D 1171 11AC;CBA1;110D 1171 11AC; +CBA2;CBA2;110D 1171 11AD;CBA2;110D 1171 11AD; +CBA3;CBA3;110D 1171 11AE;CBA3;110D 1171 11AE; +CBA4;CBA4;110D 1171 11AF;CBA4;110D 1171 11AF; +CBA5;CBA5;110D 1171 11B0;CBA5;110D 1171 11B0; +CBA6;CBA6;110D 1171 11B1;CBA6;110D 1171 11B1; +CBA7;CBA7;110D 1171 11B2;CBA7;110D 1171 11B2; +CBA8;CBA8;110D 1171 11B3;CBA8;110D 1171 11B3; +CBA9;CBA9;110D 1171 11B4;CBA9;110D 1171 11B4; +CBAA;CBAA;110D 1171 11B5;CBAA;110D 1171 11B5; +CBAB;CBAB;110D 1171 11B6;CBAB;110D 1171 11B6; +CBAC;CBAC;110D 1171 11B7;CBAC;110D 1171 11B7; +CBAD;CBAD;110D 1171 11B8;CBAD;110D 1171 11B8; +CBAE;CBAE;110D 1171 11B9;CBAE;110D 1171 11B9; +CBAF;CBAF;110D 1171 11BA;CBAF;110D 1171 11BA; +CBB0;CBB0;110D 1171 11BB;CBB0;110D 1171 11BB; +CBB1;CBB1;110D 1171 11BC;CBB1;110D 1171 11BC; +CBB2;CBB2;110D 1171 11BD;CBB2;110D 1171 11BD; +CBB3;CBB3;110D 1171 11BE;CBB3;110D 1171 11BE; +CBB4;CBB4;110D 1171 11BF;CBB4;110D 1171 11BF; +CBB5;CBB5;110D 1171 11C0;CBB5;110D 1171 11C0; +CBB6;CBB6;110D 1171 11C1;CBB6;110D 1171 11C1; +CBB7;CBB7;110D 1171 11C2;CBB7;110D 1171 11C2; +CBB8;CBB8;110D 1172;CBB8;110D 1172; +CBB9;CBB9;110D 1172 11A8;CBB9;110D 1172 11A8; +CBBA;CBBA;110D 1172 11A9;CBBA;110D 1172 11A9; +CBBB;CBBB;110D 1172 11AA;CBBB;110D 1172 11AA; +CBBC;CBBC;110D 1172 11AB;CBBC;110D 1172 11AB; +CBBD;CBBD;110D 1172 11AC;CBBD;110D 1172 11AC; +CBBE;CBBE;110D 1172 11AD;CBBE;110D 1172 11AD; +CBBF;CBBF;110D 1172 11AE;CBBF;110D 1172 11AE; +CBC0;CBC0;110D 1172 11AF;CBC0;110D 1172 11AF; +CBC1;CBC1;110D 1172 11B0;CBC1;110D 1172 11B0; +CBC2;CBC2;110D 1172 11B1;CBC2;110D 1172 11B1; +CBC3;CBC3;110D 1172 11B2;CBC3;110D 1172 11B2; +CBC4;CBC4;110D 1172 11B3;CBC4;110D 1172 11B3; +CBC5;CBC5;110D 1172 11B4;CBC5;110D 1172 11B4; +CBC6;CBC6;110D 1172 11B5;CBC6;110D 1172 11B5; +CBC7;CBC7;110D 1172 11B6;CBC7;110D 1172 11B6; +CBC8;CBC8;110D 1172 11B7;CBC8;110D 1172 11B7; +CBC9;CBC9;110D 1172 11B8;CBC9;110D 1172 11B8; +CBCA;CBCA;110D 1172 11B9;CBCA;110D 1172 11B9; +CBCB;CBCB;110D 1172 11BA;CBCB;110D 1172 11BA; +CBCC;CBCC;110D 1172 11BB;CBCC;110D 1172 11BB; +CBCD;CBCD;110D 1172 11BC;CBCD;110D 1172 11BC; +CBCE;CBCE;110D 1172 11BD;CBCE;110D 1172 11BD; +CBCF;CBCF;110D 1172 11BE;CBCF;110D 1172 11BE; +CBD0;CBD0;110D 1172 11BF;CBD0;110D 1172 11BF; +CBD1;CBD1;110D 1172 11C0;CBD1;110D 1172 11C0; +CBD2;CBD2;110D 1172 11C1;CBD2;110D 1172 11C1; +CBD3;CBD3;110D 1172 11C2;CBD3;110D 1172 11C2; +CBD4;CBD4;110D 1173;CBD4;110D 1173; +CBD5;CBD5;110D 1173 11A8;CBD5;110D 1173 11A8; +CBD6;CBD6;110D 1173 11A9;CBD6;110D 1173 11A9; +CBD7;CBD7;110D 1173 11AA;CBD7;110D 1173 11AA; +CBD8;CBD8;110D 1173 11AB;CBD8;110D 1173 11AB; +CBD9;CBD9;110D 1173 11AC;CBD9;110D 1173 11AC; +CBDA;CBDA;110D 1173 11AD;CBDA;110D 1173 11AD; +CBDB;CBDB;110D 1173 11AE;CBDB;110D 1173 11AE; +CBDC;CBDC;110D 1173 11AF;CBDC;110D 1173 11AF; +CBDD;CBDD;110D 1173 11B0;CBDD;110D 1173 11B0; +CBDE;CBDE;110D 1173 11B1;CBDE;110D 1173 11B1; +CBDF;CBDF;110D 1173 11B2;CBDF;110D 1173 11B2; +CBE0;CBE0;110D 1173 11B3;CBE0;110D 1173 11B3; +CBE1;CBE1;110D 1173 11B4;CBE1;110D 1173 11B4; +CBE2;CBE2;110D 1173 11B5;CBE2;110D 1173 11B5; +CBE3;CBE3;110D 1173 11B6;CBE3;110D 1173 11B6; +CBE4;CBE4;110D 1173 11B7;CBE4;110D 1173 11B7; +CBE5;CBE5;110D 1173 11B8;CBE5;110D 1173 11B8; +CBE6;CBE6;110D 1173 11B9;CBE6;110D 1173 11B9; +CBE7;CBE7;110D 1173 11BA;CBE7;110D 1173 11BA; +CBE8;CBE8;110D 1173 11BB;CBE8;110D 1173 11BB; +CBE9;CBE9;110D 1173 11BC;CBE9;110D 1173 11BC; +CBEA;CBEA;110D 1173 11BD;CBEA;110D 1173 11BD; +CBEB;CBEB;110D 1173 11BE;CBEB;110D 1173 11BE; +CBEC;CBEC;110D 1173 11BF;CBEC;110D 1173 11BF; +CBED;CBED;110D 1173 11C0;CBED;110D 1173 11C0; +CBEE;CBEE;110D 1173 11C1;CBEE;110D 1173 11C1; +CBEF;CBEF;110D 1173 11C2;CBEF;110D 1173 11C2; +CBF0;CBF0;110D 1174;CBF0;110D 1174; +CBF1;CBF1;110D 1174 11A8;CBF1;110D 1174 11A8; +CBF2;CBF2;110D 1174 11A9;CBF2;110D 1174 11A9; +CBF3;CBF3;110D 1174 11AA;CBF3;110D 1174 11AA; +CBF4;CBF4;110D 1174 11AB;CBF4;110D 1174 11AB; +CBF5;CBF5;110D 1174 11AC;CBF5;110D 1174 11AC; +CBF6;CBF6;110D 1174 11AD;CBF6;110D 1174 11AD; +CBF7;CBF7;110D 1174 11AE;CBF7;110D 1174 11AE; +CBF8;CBF8;110D 1174 11AF;CBF8;110D 1174 11AF; +CBF9;CBF9;110D 1174 11B0;CBF9;110D 1174 11B0; +CBFA;CBFA;110D 1174 11B1;CBFA;110D 1174 11B1; +CBFB;CBFB;110D 1174 11B2;CBFB;110D 1174 11B2; +CBFC;CBFC;110D 1174 11B3;CBFC;110D 1174 11B3; +CBFD;CBFD;110D 1174 11B4;CBFD;110D 1174 11B4; +CBFE;CBFE;110D 1174 11B5;CBFE;110D 1174 11B5; +CBFF;CBFF;110D 1174 11B6;CBFF;110D 1174 11B6; +CC00;CC00;110D 1174 11B7;CC00;110D 1174 11B7; +CC01;CC01;110D 1174 11B8;CC01;110D 1174 11B8; +CC02;CC02;110D 1174 11B9;CC02;110D 1174 11B9; +CC03;CC03;110D 1174 11BA;CC03;110D 1174 11BA; +CC04;CC04;110D 1174 11BB;CC04;110D 1174 11BB; +CC05;CC05;110D 1174 11BC;CC05;110D 1174 11BC; +CC06;CC06;110D 1174 11BD;CC06;110D 1174 11BD; +CC07;CC07;110D 1174 11BE;CC07;110D 1174 11BE; +CC08;CC08;110D 1174 11BF;CC08;110D 1174 11BF; +CC09;CC09;110D 1174 11C0;CC09;110D 1174 11C0; +CC0A;CC0A;110D 1174 11C1;CC0A;110D 1174 11C1; +CC0B;CC0B;110D 1174 11C2;CC0B;110D 1174 11C2; +CC0C;CC0C;110D 1175;CC0C;110D 1175; +CC0D;CC0D;110D 1175 11A8;CC0D;110D 1175 11A8; +CC0E;CC0E;110D 1175 11A9;CC0E;110D 1175 11A9; +CC0F;CC0F;110D 1175 11AA;CC0F;110D 1175 11AA; +CC10;CC10;110D 1175 11AB;CC10;110D 1175 11AB; +CC11;CC11;110D 1175 11AC;CC11;110D 1175 11AC; +CC12;CC12;110D 1175 11AD;CC12;110D 1175 11AD; +CC13;CC13;110D 1175 11AE;CC13;110D 1175 11AE; +CC14;CC14;110D 1175 11AF;CC14;110D 1175 11AF; +CC15;CC15;110D 1175 11B0;CC15;110D 1175 11B0; +CC16;CC16;110D 1175 11B1;CC16;110D 1175 11B1; +CC17;CC17;110D 1175 11B2;CC17;110D 1175 11B2; +CC18;CC18;110D 1175 11B3;CC18;110D 1175 11B3; +CC19;CC19;110D 1175 11B4;CC19;110D 1175 11B4; +CC1A;CC1A;110D 1175 11B5;CC1A;110D 1175 11B5; +CC1B;CC1B;110D 1175 11B6;CC1B;110D 1175 11B6; +CC1C;CC1C;110D 1175 11B7;CC1C;110D 1175 11B7; +CC1D;CC1D;110D 1175 11B8;CC1D;110D 1175 11B8; +CC1E;CC1E;110D 1175 11B9;CC1E;110D 1175 11B9; +CC1F;CC1F;110D 1175 11BA;CC1F;110D 1175 11BA; +CC20;CC20;110D 1175 11BB;CC20;110D 1175 11BB; +CC21;CC21;110D 1175 11BC;CC21;110D 1175 11BC; +CC22;CC22;110D 1175 11BD;CC22;110D 1175 11BD; +CC23;CC23;110D 1175 11BE;CC23;110D 1175 11BE; +CC24;CC24;110D 1175 11BF;CC24;110D 1175 11BF; +CC25;CC25;110D 1175 11C0;CC25;110D 1175 11C0; +CC26;CC26;110D 1175 11C1;CC26;110D 1175 11C1; +CC27;CC27;110D 1175 11C2;CC27;110D 1175 11C2; +CC28;CC28;110E 1161;CC28;110E 1161; +CC29;CC29;110E 1161 11A8;CC29;110E 1161 11A8; +CC2A;CC2A;110E 1161 11A9;CC2A;110E 1161 11A9; +CC2B;CC2B;110E 1161 11AA;CC2B;110E 1161 11AA; +CC2C;CC2C;110E 1161 11AB;CC2C;110E 1161 11AB; +CC2D;CC2D;110E 1161 11AC;CC2D;110E 1161 11AC; +CC2E;CC2E;110E 1161 11AD;CC2E;110E 1161 11AD; +CC2F;CC2F;110E 1161 11AE;CC2F;110E 1161 11AE; +CC30;CC30;110E 1161 11AF;CC30;110E 1161 11AF; +CC31;CC31;110E 1161 11B0;CC31;110E 1161 11B0; +CC32;CC32;110E 1161 11B1;CC32;110E 1161 11B1; +CC33;CC33;110E 1161 11B2;CC33;110E 1161 11B2; +CC34;CC34;110E 1161 11B3;CC34;110E 1161 11B3; +CC35;CC35;110E 1161 11B4;CC35;110E 1161 11B4; +CC36;CC36;110E 1161 11B5;CC36;110E 1161 11B5; +CC37;CC37;110E 1161 11B6;CC37;110E 1161 11B6; +CC38;CC38;110E 1161 11B7;CC38;110E 1161 11B7; +CC39;CC39;110E 1161 11B8;CC39;110E 1161 11B8; +CC3A;CC3A;110E 1161 11B9;CC3A;110E 1161 11B9; +CC3B;CC3B;110E 1161 11BA;CC3B;110E 1161 11BA; +CC3C;CC3C;110E 1161 11BB;CC3C;110E 1161 11BB; +CC3D;CC3D;110E 1161 11BC;CC3D;110E 1161 11BC; +CC3E;CC3E;110E 1161 11BD;CC3E;110E 1161 11BD; +CC3F;CC3F;110E 1161 11BE;CC3F;110E 1161 11BE; +CC40;CC40;110E 1161 11BF;CC40;110E 1161 11BF; +CC41;CC41;110E 1161 11C0;CC41;110E 1161 11C0; +CC42;CC42;110E 1161 11C1;CC42;110E 1161 11C1; +CC43;CC43;110E 1161 11C2;CC43;110E 1161 11C2; +CC44;CC44;110E 1162;CC44;110E 1162; +CC45;CC45;110E 1162 11A8;CC45;110E 1162 11A8; +CC46;CC46;110E 1162 11A9;CC46;110E 1162 11A9; +CC47;CC47;110E 1162 11AA;CC47;110E 1162 11AA; +CC48;CC48;110E 1162 11AB;CC48;110E 1162 11AB; +CC49;CC49;110E 1162 11AC;CC49;110E 1162 11AC; +CC4A;CC4A;110E 1162 11AD;CC4A;110E 1162 11AD; +CC4B;CC4B;110E 1162 11AE;CC4B;110E 1162 11AE; +CC4C;CC4C;110E 1162 11AF;CC4C;110E 1162 11AF; +CC4D;CC4D;110E 1162 11B0;CC4D;110E 1162 11B0; +CC4E;CC4E;110E 1162 11B1;CC4E;110E 1162 11B1; +CC4F;CC4F;110E 1162 11B2;CC4F;110E 1162 11B2; +CC50;CC50;110E 1162 11B3;CC50;110E 1162 11B3; +CC51;CC51;110E 1162 11B4;CC51;110E 1162 11B4; +CC52;CC52;110E 1162 11B5;CC52;110E 1162 11B5; +CC53;CC53;110E 1162 11B6;CC53;110E 1162 11B6; +CC54;CC54;110E 1162 11B7;CC54;110E 1162 11B7; +CC55;CC55;110E 1162 11B8;CC55;110E 1162 11B8; +CC56;CC56;110E 1162 11B9;CC56;110E 1162 11B9; +CC57;CC57;110E 1162 11BA;CC57;110E 1162 11BA; +CC58;CC58;110E 1162 11BB;CC58;110E 1162 11BB; +CC59;CC59;110E 1162 11BC;CC59;110E 1162 11BC; +CC5A;CC5A;110E 1162 11BD;CC5A;110E 1162 11BD; +CC5B;CC5B;110E 1162 11BE;CC5B;110E 1162 11BE; +CC5C;CC5C;110E 1162 11BF;CC5C;110E 1162 11BF; +CC5D;CC5D;110E 1162 11C0;CC5D;110E 1162 11C0; +CC5E;CC5E;110E 1162 11C1;CC5E;110E 1162 11C1; +CC5F;CC5F;110E 1162 11C2;CC5F;110E 1162 11C2; +CC60;CC60;110E 1163;CC60;110E 1163; +CC61;CC61;110E 1163 11A8;CC61;110E 1163 11A8; +CC62;CC62;110E 1163 11A9;CC62;110E 1163 11A9; +CC63;CC63;110E 1163 11AA;CC63;110E 1163 11AA; +CC64;CC64;110E 1163 11AB;CC64;110E 1163 11AB; +CC65;CC65;110E 1163 11AC;CC65;110E 1163 11AC; +CC66;CC66;110E 1163 11AD;CC66;110E 1163 11AD; +CC67;CC67;110E 1163 11AE;CC67;110E 1163 11AE; +CC68;CC68;110E 1163 11AF;CC68;110E 1163 11AF; +CC69;CC69;110E 1163 11B0;CC69;110E 1163 11B0; +CC6A;CC6A;110E 1163 11B1;CC6A;110E 1163 11B1; +CC6B;CC6B;110E 1163 11B2;CC6B;110E 1163 11B2; +CC6C;CC6C;110E 1163 11B3;CC6C;110E 1163 11B3; +CC6D;CC6D;110E 1163 11B4;CC6D;110E 1163 11B4; +CC6E;CC6E;110E 1163 11B5;CC6E;110E 1163 11B5; +CC6F;CC6F;110E 1163 11B6;CC6F;110E 1163 11B6; +CC70;CC70;110E 1163 11B7;CC70;110E 1163 11B7; +CC71;CC71;110E 1163 11B8;CC71;110E 1163 11B8; +CC72;CC72;110E 1163 11B9;CC72;110E 1163 11B9; +CC73;CC73;110E 1163 11BA;CC73;110E 1163 11BA; +CC74;CC74;110E 1163 11BB;CC74;110E 1163 11BB; +CC75;CC75;110E 1163 11BC;CC75;110E 1163 11BC; +CC76;CC76;110E 1163 11BD;CC76;110E 1163 11BD; +CC77;CC77;110E 1163 11BE;CC77;110E 1163 11BE; +CC78;CC78;110E 1163 11BF;CC78;110E 1163 11BF; +CC79;CC79;110E 1163 11C0;CC79;110E 1163 11C0; +CC7A;CC7A;110E 1163 11C1;CC7A;110E 1163 11C1; +CC7B;CC7B;110E 1163 11C2;CC7B;110E 1163 11C2; +CC7C;CC7C;110E 1164;CC7C;110E 1164; +CC7D;CC7D;110E 1164 11A8;CC7D;110E 1164 11A8; +CC7E;CC7E;110E 1164 11A9;CC7E;110E 1164 11A9; +CC7F;CC7F;110E 1164 11AA;CC7F;110E 1164 11AA; +CC80;CC80;110E 1164 11AB;CC80;110E 1164 11AB; +CC81;CC81;110E 1164 11AC;CC81;110E 1164 11AC; +CC82;CC82;110E 1164 11AD;CC82;110E 1164 11AD; +CC83;CC83;110E 1164 11AE;CC83;110E 1164 11AE; +CC84;CC84;110E 1164 11AF;CC84;110E 1164 11AF; +CC85;CC85;110E 1164 11B0;CC85;110E 1164 11B0; +CC86;CC86;110E 1164 11B1;CC86;110E 1164 11B1; +CC87;CC87;110E 1164 11B2;CC87;110E 1164 11B2; +CC88;CC88;110E 1164 11B3;CC88;110E 1164 11B3; +CC89;CC89;110E 1164 11B4;CC89;110E 1164 11B4; +CC8A;CC8A;110E 1164 11B5;CC8A;110E 1164 11B5; +CC8B;CC8B;110E 1164 11B6;CC8B;110E 1164 11B6; +CC8C;CC8C;110E 1164 11B7;CC8C;110E 1164 11B7; +CC8D;CC8D;110E 1164 11B8;CC8D;110E 1164 11B8; +CC8E;CC8E;110E 1164 11B9;CC8E;110E 1164 11B9; +CC8F;CC8F;110E 1164 11BA;CC8F;110E 1164 11BA; +CC90;CC90;110E 1164 11BB;CC90;110E 1164 11BB; +CC91;CC91;110E 1164 11BC;CC91;110E 1164 11BC; +CC92;CC92;110E 1164 11BD;CC92;110E 1164 11BD; +CC93;CC93;110E 1164 11BE;CC93;110E 1164 11BE; +CC94;CC94;110E 1164 11BF;CC94;110E 1164 11BF; +CC95;CC95;110E 1164 11C0;CC95;110E 1164 11C0; +CC96;CC96;110E 1164 11C1;CC96;110E 1164 11C1; +CC97;CC97;110E 1164 11C2;CC97;110E 1164 11C2; +CC98;CC98;110E 1165;CC98;110E 1165; +CC99;CC99;110E 1165 11A8;CC99;110E 1165 11A8; +CC9A;CC9A;110E 1165 11A9;CC9A;110E 1165 11A9; +CC9B;CC9B;110E 1165 11AA;CC9B;110E 1165 11AA; +CC9C;CC9C;110E 1165 11AB;CC9C;110E 1165 11AB; +CC9D;CC9D;110E 1165 11AC;CC9D;110E 1165 11AC; +CC9E;CC9E;110E 1165 11AD;CC9E;110E 1165 11AD; +CC9F;CC9F;110E 1165 11AE;CC9F;110E 1165 11AE; +CCA0;CCA0;110E 1165 11AF;CCA0;110E 1165 11AF; +CCA1;CCA1;110E 1165 11B0;CCA1;110E 1165 11B0; +CCA2;CCA2;110E 1165 11B1;CCA2;110E 1165 11B1; +CCA3;CCA3;110E 1165 11B2;CCA3;110E 1165 11B2; +CCA4;CCA4;110E 1165 11B3;CCA4;110E 1165 11B3; +CCA5;CCA5;110E 1165 11B4;CCA5;110E 1165 11B4; +CCA6;CCA6;110E 1165 11B5;CCA6;110E 1165 11B5; +CCA7;CCA7;110E 1165 11B6;CCA7;110E 1165 11B6; +CCA8;CCA8;110E 1165 11B7;CCA8;110E 1165 11B7; +CCA9;CCA9;110E 1165 11B8;CCA9;110E 1165 11B8; +CCAA;CCAA;110E 1165 11B9;CCAA;110E 1165 11B9; +CCAB;CCAB;110E 1165 11BA;CCAB;110E 1165 11BA; +CCAC;CCAC;110E 1165 11BB;CCAC;110E 1165 11BB; +CCAD;CCAD;110E 1165 11BC;CCAD;110E 1165 11BC; +CCAE;CCAE;110E 1165 11BD;CCAE;110E 1165 11BD; +CCAF;CCAF;110E 1165 11BE;CCAF;110E 1165 11BE; +CCB0;CCB0;110E 1165 11BF;CCB0;110E 1165 11BF; +CCB1;CCB1;110E 1165 11C0;CCB1;110E 1165 11C0; +CCB2;CCB2;110E 1165 11C1;CCB2;110E 1165 11C1; +CCB3;CCB3;110E 1165 11C2;CCB3;110E 1165 11C2; +CCB4;CCB4;110E 1166;CCB4;110E 1166; +CCB5;CCB5;110E 1166 11A8;CCB5;110E 1166 11A8; +CCB6;CCB6;110E 1166 11A9;CCB6;110E 1166 11A9; +CCB7;CCB7;110E 1166 11AA;CCB7;110E 1166 11AA; +CCB8;CCB8;110E 1166 11AB;CCB8;110E 1166 11AB; +CCB9;CCB9;110E 1166 11AC;CCB9;110E 1166 11AC; +CCBA;CCBA;110E 1166 11AD;CCBA;110E 1166 11AD; +CCBB;CCBB;110E 1166 11AE;CCBB;110E 1166 11AE; +CCBC;CCBC;110E 1166 11AF;CCBC;110E 1166 11AF; +CCBD;CCBD;110E 1166 11B0;CCBD;110E 1166 11B0; +CCBE;CCBE;110E 1166 11B1;CCBE;110E 1166 11B1; +CCBF;CCBF;110E 1166 11B2;CCBF;110E 1166 11B2; +CCC0;CCC0;110E 1166 11B3;CCC0;110E 1166 11B3; +CCC1;CCC1;110E 1166 11B4;CCC1;110E 1166 11B4; +CCC2;CCC2;110E 1166 11B5;CCC2;110E 1166 11B5; +CCC3;CCC3;110E 1166 11B6;CCC3;110E 1166 11B6; +CCC4;CCC4;110E 1166 11B7;CCC4;110E 1166 11B7; +CCC5;CCC5;110E 1166 11B8;CCC5;110E 1166 11B8; +CCC6;CCC6;110E 1166 11B9;CCC6;110E 1166 11B9; +CCC7;CCC7;110E 1166 11BA;CCC7;110E 1166 11BA; +CCC8;CCC8;110E 1166 11BB;CCC8;110E 1166 11BB; +CCC9;CCC9;110E 1166 11BC;CCC9;110E 1166 11BC; +CCCA;CCCA;110E 1166 11BD;CCCA;110E 1166 11BD; +CCCB;CCCB;110E 1166 11BE;CCCB;110E 1166 11BE; +CCCC;CCCC;110E 1166 11BF;CCCC;110E 1166 11BF; +CCCD;CCCD;110E 1166 11C0;CCCD;110E 1166 11C0; +CCCE;CCCE;110E 1166 11C1;CCCE;110E 1166 11C1; +CCCF;CCCF;110E 1166 11C2;CCCF;110E 1166 11C2; +CCD0;CCD0;110E 1167;CCD0;110E 1167; +CCD1;CCD1;110E 1167 11A8;CCD1;110E 1167 11A8; +CCD2;CCD2;110E 1167 11A9;CCD2;110E 1167 11A9; +CCD3;CCD3;110E 1167 11AA;CCD3;110E 1167 11AA; +CCD4;CCD4;110E 1167 11AB;CCD4;110E 1167 11AB; +CCD5;CCD5;110E 1167 11AC;CCD5;110E 1167 11AC; +CCD6;CCD6;110E 1167 11AD;CCD6;110E 1167 11AD; +CCD7;CCD7;110E 1167 11AE;CCD7;110E 1167 11AE; +CCD8;CCD8;110E 1167 11AF;CCD8;110E 1167 11AF; +CCD9;CCD9;110E 1167 11B0;CCD9;110E 1167 11B0; +CCDA;CCDA;110E 1167 11B1;CCDA;110E 1167 11B1; +CCDB;CCDB;110E 1167 11B2;CCDB;110E 1167 11B2; +CCDC;CCDC;110E 1167 11B3;CCDC;110E 1167 11B3; +CCDD;CCDD;110E 1167 11B4;CCDD;110E 1167 11B4; +CCDE;CCDE;110E 1167 11B5;CCDE;110E 1167 11B5; +CCDF;CCDF;110E 1167 11B6;CCDF;110E 1167 11B6; +CCE0;CCE0;110E 1167 11B7;CCE0;110E 1167 11B7; +CCE1;CCE1;110E 1167 11B8;CCE1;110E 1167 11B8; +CCE2;CCE2;110E 1167 11B9;CCE2;110E 1167 11B9; +CCE3;CCE3;110E 1167 11BA;CCE3;110E 1167 11BA; +CCE4;CCE4;110E 1167 11BB;CCE4;110E 1167 11BB; +CCE5;CCE5;110E 1167 11BC;CCE5;110E 1167 11BC; +CCE6;CCE6;110E 1167 11BD;CCE6;110E 1167 11BD; +CCE7;CCE7;110E 1167 11BE;CCE7;110E 1167 11BE; +CCE8;CCE8;110E 1167 11BF;CCE8;110E 1167 11BF; +CCE9;CCE9;110E 1167 11C0;CCE9;110E 1167 11C0; +CCEA;CCEA;110E 1167 11C1;CCEA;110E 1167 11C1; +CCEB;CCEB;110E 1167 11C2;CCEB;110E 1167 11C2; +CCEC;CCEC;110E 1168;CCEC;110E 1168; +CCED;CCED;110E 1168 11A8;CCED;110E 1168 11A8; +CCEE;CCEE;110E 1168 11A9;CCEE;110E 1168 11A9; +CCEF;CCEF;110E 1168 11AA;CCEF;110E 1168 11AA; +CCF0;CCF0;110E 1168 11AB;CCF0;110E 1168 11AB; +CCF1;CCF1;110E 1168 11AC;CCF1;110E 1168 11AC; +CCF2;CCF2;110E 1168 11AD;CCF2;110E 1168 11AD; +CCF3;CCF3;110E 1168 11AE;CCF3;110E 1168 11AE; +CCF4;CCF4;110E 1168 11AF;CCF4;110E 1168 11AF; +CCF5;CCF5;110E 1168 11B0;CCF5;110E 1168 11B0; +CCF6;CCF6;110E 1168 11B1;CCF6;110E 1168 11B1; +CCF7;CCF7;110E 1168 11B2;CCF7;110E 1168 11B2; +CCF8;CCF8;110E 1168 11B3;CCF8;110E 1168 11B3; +CCF9;CCF9;110E 1168 11B4;CCF9;110E 1168 11B4; +CCFA;CCFA;110E 1168 11B5;CCFA;110E 1168 11B5; +CCFB;CCFB;110E 1168 11B6;CCFB;110E 1168 11B6; +CCFC;CCFC;110E 1168 11B7;CCFC;110E 1168 11B7; +CCFD;CCFD;110E 1168 11B8;CCFD;110E 1168 11B8; +CCFE;CCFE;110E 1168 11B9;CCFE;110E 1168 11B9; +CCFF;CCFF;110E 1168 11BA;CCFF;110E 1168 11BA; +CD00;CD00;110E 1168 11BB;CD00;110E 1168 11BB; +CD01;CD01;110E 1168 11BC;CD01;110E 1168 11BC; +CD02;CD02;110E 1168 11BD;CD02;110E 1168 11BD; +CD03;CD03;110E 1168 11BE;CD03;110E 1168 11BE; +CD04;CD04;110E 1168 11BF;CD04;110E 1168 11BF; +CD05;CD05;110E 1168 11C0;CD05;110E 1168 11C0; +CD06;CD06;110E 1168 11C1;CD06;110E 1168 11C1; +CD07;CD07;110E 1168 11C2;CD07;110E 1168 11C2; +CD08;CD08;110E 1169;CD08;110E 1169; +CD09;CD09;110E 1169 11A8;CD09;110E 1169 11A8; +CD0A;CD0A;110E 1169 11A9;CD0A;110E 1169 11A9; +CD0B;CD0B;110E 1169 11AA;CD0B;110E 1169 11AA; +CD0C;CD0C;110E 1169 11AB;CD0C;110E 1169 11AB; +CD0D;CD0D;110E 1169 11AC;CD0D;110E 1169 11AC; +CD0E;CD0E;110E 1169 11AD;CD0E;110E 1169 11AD; +CD0F;CD0F;110E 1169 11AE;CD0F;110E 1169 11AE; +CD10;CD10;110E 1169 11AF;CD10;110E 1169 11AF; +CD11;CD11;110E 1169 11B0;CD11;110E 1169 11B0; +CD12;CD12;110E 1169 11B1;CD12;110E 1169 11B1; +CD13;CD13;110E 1169 11B2;CD13;110E 1169 11B2; +CD14;CD14;110E 1169 11B3;CD14;110E 1169 11B3; +CD15;CD15;110E 1169 11B4;CD15;110E 1169 11B4; +CD16;CD16;110E 1169 11B5;CD16;110E 1169 11B5; +CD17;CD17;110E 1169 11B6;CD17;110E 1169 11B6; +CD18;CD18;110E 1169 11B7;CD18;110E 1169 11B7; +CD19;CD19;110E 1169 11B8;CD19;110E 1169 11B8; +CD1A;CD1A;110E 1169 11B9;CD1A;110E 1169 11B9; +CD1B;CD1B;110E 1169 11BA;CD1B;110E 1169 11BA; +CD1C;CD1C;110E 1169 11BB;CD1C;110E 1169 11BB; +CD1D;CD1D;110E 1169 11BC;CD1D;110E 1169 11BC; +CD1E;CD1E;110E 1169 11BD;CD1E;110E 1169 11BD; +CD1F;CD1F;110E 1169 11BE;CD1F;110E 1169 11BE; +CD20;CD20;110E 1169 11BF;CD20;110E 1169 11BF; +CD21;CD21;110E 1169 11C0;CD21;110E 1169 11C0; +CD22;CD22;110E 1169 11C1;CD22;110E 1169 11C1; +CD23;CD23;110E 1169 11C2;CD23;110E 1169 11C2; +CD24;CD24;110E 116A;CD24;110E 116A; +CD25;CD25;110E 116A 11A8;CD25;110E 116A 11A8; +CD26;CD26;110E 116A 11A9;CD26;110E 116A 11A9; +CD27;CD27;110E 116A 11AA;CD27;110E 116A 11AA; +CD28;CD28;110E 116A 11AB;CD28;110E 116A 11AB; +CD29;CD29;110E 116A 11AC;CD29;110E 116A 11AC; +CD2A;CD2A;110E 116A 11AD;CD2A;110E 116A 11AD; +CD2B;CD2B;110E 116A 11AE;CD2B;110E 116A 11AE; +CD2C;CD2C;110E 116A 11AF;CD2C;110E 116A 11AF; +CD2D;CD2D;110E 116A 11B0;CD2D;110E 116A 11B0; +CD2E;CD2E;110E 116A 11B1;CD2E;110E 116A 11B1; +CD2F;CD2F;110E 116A 11B2;CD2F;110E 116A 11B2; +CD30;CD30;110E 116A 11B3;CD30;110E 116A 11B3; +CD31;CD31;110E 116A 11B4;CD31;110E 116A 11B4; +CD32;CD32;110E 116A 11B5;CD32;110E 116A 11B5; +CD33;CD33;110E 116A 11B6;CD33;110E 116A 11B6; +CD34;CD34;110E 116A 11B7;CD34;110E 116A 11B7; +CD35;CD35;110E 116A 11B8;CD35;110E 116A 11B8; +CD36;CD36;110E 116A 11B9;CD36;110E 116A 11B9; +CD37;CD37;110E 116A 11BA;CD37;110E 116A 11BA; +CD38;CD38;110E 116A 11BB;CD38;110E 116A 11BB; +CD39;CD39;110E 116A 11BC;CD39;110E 116A 11BC; +CD3A;CD3A;110E 116A 11BD;CD3A;110E 116A 11BD; +CD3B;CD3B;110E 116A 11BE;CD3B;110E 116A 11BE; +CD3C;CD3C;110E 116A 11BF;CD3C;110E 116A 11BF; +CD3D;CD3D;110E 116A 11C0;CD3D;110E 116A 11C0; +CD3E;CD3E;110E 116A 11C1;CD3E;110E 116A 11C1; +CD3F;CD3F;110E 116A 11C2;CD3F;110E 116A 11C2; +CD40;CD40;110E 116B;CD40;110E 116B; +CD41;CD41;110E 116B 11A8;CD41;110E 116B 11A8; +CD42;CD42;110E 116B 11A9;CD42;110E 116B 11A9; +CD43;CD43;110E 116B 11AA;CD43;110E 116B 11AA; +CD44;CD44;110E 116B 11AB;CD44;110E 116B 11AB; +CD45;CD45;110E 116B 11AC;CD45;110E 116B 11AC; +CD46;CD46;110E 116B 11AD;CD46;110E 116B 11AD; +CD47;CD47;110E 116B 11AE;CD47;110E 116B 11AE; +CD48;CD48;110E 116B 11AF;CD48;110E 116B 11AF; +CD49;CD49;110E 116B 11B0;CD49;110E 116B 11B0; +CD4A;CD4A;110E 116B 11B1;CD4A;110E 116B 11B1; +CD4B;CD4B;110E 116B 11B2;CD4B;110E 116B 11B2; +CD4C;CD4C;110E 116B 11B3;CD4C;110E 116B 11B3; +CD4D;CD4D;110E 116B 11B4;CD4D;110E 116B 11B4; +CD4E;CD4E;110E 116B 11B5;CD4E;110E 116B 11B5; +CD4F;CD4F;110E 116B 11B6;CD4F;110E 116B 11B6; +CD50;CD50;110E 116B 11B7;CD50;110E 116B 11B7; +CD51;CD51;110E 116B 11B8;CD51;110E 116B 11B8; +CD52;CD52;110E 116B 11B9;CD52;110E 116B 11B9; +CD53;CD53;110E 116B 11BA;CD53;110E 116B 11BA; +CD54;CD54;110E 116B 11BB;CD54;110E 116B 11BB; +CD55;CD55;110E 116B 11BC;CD55;110E 116B 11BC; +CD56;CD56;110E 116B 11BD;CD56;110E 116B 11BD; +CD57;CD57;110E 116B 11BE;CD57;110E 116B 11BE; +CD58;CD58;110E 116B 11BF;CD58;110E 116B 11BF; +CD59;CD59;110E 116B 11C0;CD59;110E 116B 11C0; +CD5A;CD5A;110E 116B 11C1;CD5A;110E 116B 11C1; +CD5B;CD5B;110E 116B 11C2;CD5B;110E 116B 11C2; +CD5C;CD5C;110E 116C;CD5C;110E 116C; +CD5D;CD5D;110E 116C 11A8;CD5D;110E 116C 11A8; +CD5E;CD5E;110E 116C 11A9;CD5E;110E 116C 11A9; +CD5F;CD5F;110E 116C 11AA;CD5F;110E 116C 11AA; +CD60;CD60;110E 116C 11AB;CD60;110E 116C 11AB; +CD61;CD61;110E 116C 11AC;CD61;110E 116C 11AC; +CD62;CD62;110E 116C 11AD;CD62;110E 116C 11AD; +CD63;CD63;110E 116C 11AE;CD63;110E 116C 11AE; +CD64;CD64;110E 116C 11AF;CD64;110E 116C 11AF; +CD65;CD65;110E 116C 11B0;CD65;110E 116C 11B0; +CD66;CD66;110E 116C 11B1;CD66;110E 116C 11B1; +CD67;CD67;110E 116C 11B2;CD67;110E 116C 11B2; +CD68;CD68;110E 116C 11B3;CD68;110E 116C 11B3; +CD69;CD69;110E 116C 11B4;CD69;110E 116C 11B4; +CD6A;CD6A;110E 116C 11B5;CD6A;110E 116C 11B5; +CD6B;CD6B;110E 116C 11B6;CD6B;110E 116C 11B6; +CD6C;CD6C;110E 116C 11B7;CD6C;110E 116C 11B7; +CD6D;CD6D;110E 116C 11B8;CD6D;110E 116C 11B8; +CD6E;CD6E;110E 116C 11B9;CD6E;110E 116C 11B9; +CD6F;CD6F;110E 116C 11BA;CD6F;110E 116C 11BA; +CD70;CD70;110E 116C 11BB;CD70;110E 116C 11BB; +CD71;CD71;110E 116C 11BC;CD71;110E 116C 11BC; +CD72;CD72;110E 116C 11BD;CD72;110E 116C 11BD; +CD73;CD73;110E 116C 11BE;CD73;110E 116C 11BE; +CD74;CD74;110E 116C 11BF;CD74;110E 116C 11BF; +CD75;CD75;110E 116C 11C0;CD75;110E 116C 11C0; +CD76;CD76;110E 116C 11C1;CD76;110E 116C 11C1; +CD77;CD77;110E 116C 11C2;CD77;110E 116C 11C2; +CD78;CD78;110E 116D;CD78;110E 116D; +CD79;CD79;110E 116D 11A8;CD79;110E 116D 11A8; +CD7A;CD7A;110E 116D 11A9;CD7A;110E 116D 11A9; +CD7B;CD7B;110E 116D 11AA;CD7B;110E 116D 11AA; +CD7C;CD7C;110E 116D 11AB;CD7C;110E 116D 11AB; +CD7D;CD7D;110E 116D 11AC;CD7D;110E 116D 11AC; +CD7E;CD7E;110E 116D 11AD;CD7E;110E 116D 11AD; +CD7F;CD7F;110E 116D 11AE;CD7F;110E 116D 11AE; +CD80;CD80;110E 116D 11AF;CD80;110E 116D 11AF; +CD81;CD81;110E 116D 11B0;CD81;110E 116D 11B0; +CD82;CD82;110E 116D 11B1;CD82;110E 116D 11B1; +CD83;CD83;110E 116D 11B2;CD83;110E 116D 11B2; +CD84;CD84;110E 116D 11B3;CD84;110E 116D 11B3; +CD85;CD85;110E 116D 11B4;CD85;110E 116D 11B4; +CD86;CD86;110E 116D 11B5;CD86;110E 116D 11B5; +CD87;CD87;110E 116D 11B6;CD87;110E 116D 11B6; +CD88;CD88;110E 116D 11B7;CD88;110E 116D 11B7; +CD89;CD89;110E 116D 11B8;CD89;110E 116D 11B8; +CD8A;CD8A;110E 116D 11B9;CD8A;110E 116D 11B9; +CD8B;CD8B;110E 116D 11BA;CD8B;110E 116D 11BA; +CD8C;CD8C;110E 116D 11BB;CD8C;110E 116D 11BB; +CD8D;CD8D;110E 116D 11BC;CD8D;110E 116D 11BC; +CD8E;CD8E;110E 116D 11BD;CD8E;110E 116D 11BD; +CD8F;CD8F;110E 116D 11BE;CD8F;110E 116D 11BE; +CD90;CD90;110E 116D 11BF;CD90;110E 116D 11BF; +CD91;CD91;110E 116D 11C0;CD91;110E 116D 11C0; +CD92;CD92;110E 116D 11C1;CD92;110E 116D 11C1; +CD93;CD93;110E 116D 11C2;CD93;110E 116D 11C2; +CD94;CD94;110E 116E;CD94;110E 116E; +CD95;CD95;110E 116E 11A8;CD95;110E 116E 11A8; +CD96;CD96;110E 116E 11A9;CD96;110E 116E 11A9; +CD97;CD97;110E 116E 11AA;CD97;110E 116E 11AA; +CD98;CD98;110E 116E 11AB;CD98;110E 116E 11AB; +CD99;CD99;110E 116E 11AC;CD99;110E 116E 11AC; +CD9A;CD9A;110E 116E 11AD;CD9A;110E 116E 11AD; +CD9B;CD9B;110E 116E 11AE;CD9B;110E 116E 11AE; +CD9C;CD9C;110E 116E 11AF;CD9C;110E 116E 11AF; +CD9D;CD9D;110E 116E 11B0;CD9D;110E 116E 11B0; +CD9E;CD9E;110E 116E 11B1;CD9E;110E 116E 11B1; +CD9F;CD9F;110E 116E 11B2;CD9F;110E 116E 11B2; +CDA0;CDA0;110E 116E 11B3;CDA0;110E 116E 11B3; +CDA1;CDA1;110E 116E 11B4;CDA1;110E 116E 11B4; +CDA2;CDA2;110E 116E 11B5;CDA2;110E 116E 11B5; +CDA3;CDA3;110E 116E 11B6;CDA3;110E 116E 11B6; +CDA4;CDA4;110E 116E 11B7;CDA4;110E 116E 11B7; +CDA5;CDA5;110E 116E 11B8;CDA5;110E 116E 11B8; +CDA6;CDA6;110E 116E 11B9;CDA6;110E 116E 11B9; +CDA7;CDA7;110E 116E 11BA;CDA7;110E 116E 11BA; +CDA8;CDA8;110E 116E 11BB;CDA8;110E 116E 11BB; +CDA9;CDA9;110E 116E 11BC;CDA9;110E 116E 11BC; +CDAA;CDAA;110E 116E 11BD;CDAA;110E 116E 11BD; +CDAB;CDAB;110E 116E 11BE;CDAB;110E 116E 11BE; +CDAC;CDAC;110E 116E 11BF;CDAC;110E 116E 11BF; +CDAD;CDAD;110E 116E 11C0;CDAD;110E 116E 11C0; +CDAE;CDAE;110E 116E 11C1;CDAE;110E 116E 11C1; +CDAF;CDAF;110E 116E 11C2;CDAF;110E 116E 11C2; +CDB0;CDB0;110E 116F;CDB0;110E 116F; +CDB1;CDB1;110E 116F 11A8;CDB1;110E 116F 11A8; +CDB2;CDB2;110E 116F 11A9;CDB2;110E 116F 11A9; +CDB3;CDB3;110E 116F 11AA;CDB3;110E 116F 11AA; +CDB4;CDB4;110E 116F 11AB;CDB4;110E 116F 11AB; +CDB5;CDB5;110E 116F 11AC;CDB5;110E 116F 11AC; +CDB6;CDB6;110E 116F 11AD;CDB6;110E 116F 11AD; +CDB7;CDB7;110E 116F 11AE;CDB7;110E 116F 11AE; +CDB8;CDB8;110E 116F 11AF;CDB8;110E 116F 11AF; +CDB9;CDB9;110E 116F 11B0;CDB9;110E 116F 11B0; +CDBA;CDBA;110E 116F 11B1;CDBA;110E 116F 11B1; +CDBB;CDBB;110E 116F 11B2;CDBB;110E 116F 11B2; +CDBC;CDBC;110E 116F 11B3;CDBC;110E 116F 11B3; +CDBD;CDBD;110E 116F 11B4;CDBD;110E 116F 11B4; +CDBE;CDBE;110E 116F 11B5;CDBE;110E 116F 11B5; +CDBF;CDBF;110E 116F 11B6;CDBF;110E 116F 11B6; +CDC0;CDC0;110E 116F 11B7;CDC0;110E 116F 11B7; +CDC1;CDC1;110E 116F 11B8;CDC1;110E 116F 11B8; +CDC2;CDC2;110E 116F 11B9;CDC2;110E 116F 11B9; +CDC3;CDC3;110E 116F 11BA;CDC3;110E 116F 11BA; +CDC4;CDC4;110E 116F 11BB;CDC4;110E 116F 11BB; +CDC5;CDC5;110E 116F 11BC;CDC5;110E 116F 11BC; +CDC6;CDC6;110E 116F 11BD;CDC6;110E 116F 11BD; +CDC7;CDC7;110E 116F 11BE;CDC7;110E 116F 11BE; +CDC8;CDC8;110E 116F 11BF;CDC8;110E 116F 11BF; +CDC9;CDC9;110E 116F 11C0;CDC9;110E 116F 11C0; +CDCA;CDCA;110E 116F 11C1;CDCA;110E 116F 11C1; +CDCB;CDCB;110E 116F 11C2;CDCB;110E 116F 11C2; +CDCC;CDCC;110E 1170;CDCC;110E 1170; +CDCD;CDCD;110E 1170 11A8;CDCD;110E 1170 11A8; +CDCE;CDCE;110E 1170 11A9;CDCE;110E 1170 11A9; +CDCF;CDCF;110E 1170 11AA;CDCF;110E 1170 11AA; +CDD0;CDD0;110E 1170 11AB;CDD0;110E 1170 11AB; +CDD1;CDD1;110E 1170 11AC;CDD1;110E 1170 11AC; +CDD2;CDD2;110E 1170 11AD;CDD2;110E 1170 11AD; +CDD3;CDD3;110E 1170 11AE;CDD3;110E 1170 11AE; +CDD4;CDD4;110E 1170 11AF;CDD4;110E 1170 11AF; +CDD5;CDD5;110E 1170 11B0;CDD5;110E 1170 11B0; +CDD6;CDD6;110E 1170 11B1;CDD6;110E 1170 11B1; +CDD7;CDD7;110E 1170 11B2;CDD7;110E 1170 11B2; +CDD8;CDD8;110E 1170 11B3;CDD8;110E 1170 11B3; +CDD9;CDD9;110E 1170 11B4;CDD9;110E 1170 11B4; +CDDA;CDDA;110E 1170 11B5;CDDA;110E 1170 11B5; +CDDB;CDDB;110E 1170 11B6;CDDB;110E 1170 11B6; +CDDC;CDDC;110E 1170 11B7;CDDC;110E 1170 11B7; +CDDD;CDDD;110E 1170 11B8;CDDD;110E 1170 11B8; +CDDE;CDDE;110E 1170 11B9;CDDE;110E 1170 11B9; +CDDF;CDDF;110E 1170 11BA;CDDF;110E 1170 11BA; +CDE0;CDE0;110E 1170 11BB;CDE0;110E 1170 11BB; +CDE1;CDE1;110E 1170 11BC;CDE1;110E 1170 11BC; +CDE2;CDE2;110E 1170 11BD;CDE2;110E 1170 11BD; +CDE3;CDE3;110E 1170 11BE;CDE3;110E 1170 11BE; +CDE4;CDE4;110E 1170 11BF;CDE4;110E 1170 11BF; +CDE5;CDE5;110E 1170 11C0;CDE5;110E 1170 11C0; +CDE6;CDE6;110E 1170 11C1;CDE6;110E 1170 11C1; +CDE7;CDE7;110E 1170 11C2;CDE7;110E 1170 11C2; +CDE8;CDE8;110E 1171;CDE8;110E 1171; +CDE9;CDE9;110E 1171 11A8;CDE9;110E 1171 11A8; +CDEA;CDEA;110E 1171 11A9;CDEA;110E 1171 11A9; +CDEB;CDEB;110E 1171 11AA;CDEB;110E 1171 11AA; +CDEC;CDEC;110E 1171 11AB;CDEC;110E 1171 11AB; +CDED;CDED;110E 1171 11AC;CDED;110E 1171 11AC; +CDEE;CDEE;110E 1171 11AD;CDEE;110E 1171 11AD; +CDEF;CDEF;110E 1171 11AE;CDEF;110E 1171 11AE; +CDF0;CDF0;110E 1171 11AF;CDF0;110E 1171 11AF; +CDF1;CDF1;110E 1171 11B0;CDF1;110E 1171 11B0; +CDF2;CDF2;110E 1171 11B1;CDF2;110E 1171 11B1; +CDF3;CDF3;110E 1171 11B2;CDF3;110E 1171 11B2; +CDF4;CDF4;110E 1171 11B3;CDF4;110E 1171 11B3; +CDF5;CDF5;110E 1171 11B4;CDF5;110E 1171 11B4; +CDF6;CDF6;110E 1171 11B5;CDF6;110E 1171 11B5; +CDF7;CDF7;110E 1171 11B6;CDF7;110E 1171 11B6; +CDF8;CDF8;110E 1171 11B7;CDF8;110E 1171 11B7; +CDF9;CDF9;110E 1171 11B8;CDF9;110E 1171 11B8; +CDFA;CDFA;110E 1171 11B9;CDFA;110E 1171 11B9; +CDFB;CDFB;110E 1171 11BA;CDFB;110E 1171 11BA; +CDFC;CDFC;110E 1171 11BB;CDFC;110E 1171 11BB; +CDFD;CDFD;110E 1171 11BC;CDFD;110E 1171 11BC; +CDFE;CDFE;110E 1171 11BD;CDFE;110E 1171 11BD; +CDFF;CDFF;110E 1171 11BE;CDFF;110E 1171 11BE; +CE00;CE00;110E 1171 11BF;CE00;110E 1171 11BF; +CE01;CE01;110E 1171 11C0;CE01;110E 1171 11C0; +CE02;CE02;110E 1171 11C1;CE02;110E 1171 11C1; +CE03;CE03;110E 1171 11C2;CE03;110E 1171 11C2; +CE04;CE04;110E 1172;CE04;110E 1172; +CE05;CE05;110E 1172 11A8;CE05;110E 1172 11A8; +CE06;CE06;110E 1172 11A9;CE06;110E 1172 11A9; +CE07;CE07;110E 1172 11AA;CE07;110E 1172 11AA; +CE08;CE08;110E 1172 11AB;CE08;110E 1172 11AB; +CE09;CE09;110E 1172 11AC;CE09;110E 1172 11AC; +CE0A;CE0A;110E 1172 11AD;CE0A;110E 1172 11AD; +CE0B;CE0B;110E 1172 11AE;CE0B;110E 1172 11AE; +CE0C;CE0C;110E 1172 11AF;CE0C;110E 1172 11AF; +CE0D;CE0D;110E 1172 11B0;CE0D;110E 1172 11B0; +CE0E;CE0E;110E 1172 11B1;CE0E;110E 1172 11B1; +CE0F;CE0F;110E 1172 11B2;CE0F;110E 1172 11B2; +CE10;CE10;110E 1172 11B3;CE10;110E 1172 11B3; +CE11;CE11;110E 1172 11B4;CE11;110E 1172 11B4; +CE12;CE12;110E 1172 11B5;CE12;110E 1172 11B5; +CE13;CE13;110E 1172 11B6;CE13;110E 1172 11B6; +CE14;CE14;110E 1172 11B7;CE14;110E 1172 11B7; +CE15;CE15;110E 1172 11B8;CE15;110E 1172 11B8; +CE16;CE16;110E 1172 11B9;CE16;110E 1172 11B9; +CE17;CE17;110E 1172 11BA;CE17;110E 1172 11BA; +CE18;CE18;110E 1172 11BB;CE18;110E 1172 11BB; +CE19;CE19;110E 1172 11BC;CE19;110E 1172 11BC; +CE1A;CE1A;110E 1172 11BD;CE1A;110E 1172 11BD; +CE1B;CE1B;110E 1172 11BE;CE1B;110E 1172 11BE; +CE1C;CE1C;110E 1172 11BF;CE1C;110E 1172 11BF; +CE1D;CE1D;110E 1172 11C0;CE1D;110E 1172 11C0; +CE1E;CE1E;110E 1172 11C1;CE1E;110E 1172 11C1; +CE1F;CE1F;110E 1172 11C2;CE1F;110E 1172 11C2; +CE20;CE20;110E 1173;CE20;110E 1173; +CE21;CE21;110E 1173 11A8;CE21;110E 1173 11A8; +CE22;CE22;110E 1173 11A9;CE22;110E 1173 11A9; +CE23;CE23;110E 1173 11AA;CE23;110E 1173 11AA; +CE24;CE24;110E 1173 11AB;CE24;110E 1173 11AB; +CE25;CE25;110E 1173 11AC;CE25;110E 1173 11AC; +CE26;CE26;110E 1173 11AD;CE26;110E 1173 11AD; +CE27;CE27;110E 1173 11AE;CE27;110E 1173 11AE; +CE28;CE28;110E 1173 11AF;CE28;110E 1173 11AF; +CE29;CE29;110E 1173 11B0;CE29;110E 1173 11B0; +CE2A;CE2A;110E 1173 11B1;CE2A;110E 1173 11B1; +CE2B;CE2B;110E 1173 11B2;CE2B;110E 1173 11B2; +CE2C;CE2C;110E 1173 11B3;CE2C;110E 1173 11B3; +CE2D;CE2D;110E 1173 11B4;CE2D;110E 1173 11B4; +CE2E;CE2E;110E 1173 11B5;CE2E;110E 1173 11B5; +CE2F;CE2F;110E 1173 11B6;CE2F;110E 1173 11B6; +CE30;CE30;110E 1173 11B7;CE30;110E 1173 11B7; +CE31;CE31;110E 1173 11B8;CE31;110E 1173 11B8; +CE32;CE32;110E 1173 11B9;CE32;110E 1173 11B9; +CE33;CE33;110E 1173 11BA;CE33;110E 1173 11BA; +CE34;CE34;110E 1173 11BB;CE34;110E 1173 11BB; +CE35;CE35;110E 1173 11BC;CE35;110E 1173 11BC; +CE36;CE36;110E 1173 11BD;CE36;110E 1173 11BD; +CE37;CE37;110E 1173 11BE;CE37;110E 1173 11BE; +CE38;CE38;110E 1173 11BF;CE38;110E 1173 11BF; +CE39;CE39;110E 1173 11C0;CE39;110E 1173 11C0; +CE3A;CE3A;110E 1173 11C1;CE3A;110E 1173 11C1; +CE3B;CE3B;110E 1173 11C2;CE3B;110E 1173 11C2; +CE3C;CE3C;110E 1174;CE3C;110E 1174; +CE3D;CE3D;110E 1174 11A8;CE3D;110E 1174 11A8; +CE3E;CE3E;110E 1174 11A9;CE3E;110E 1174 11A9; +CE3F;CE3F;110E 1174 11AA;CE3F;110E 1174 11AA; +CE40;CE40;110E 1174 11AB;CE40;110E 1174 11AB; +CE41;CE41;110E 1174 11AC;CE41;110E 1174 11AC; +CE42;CE42;110E 1174 11AD;CE42;110E 1174 11AD; +CE43;CE43;110E 1174 11AE;CE43;110E 1174 11AE; +CE44;CE44;110E 1174 11AF;CE44;110E 1174 11AF; +CE45;CE45;110E 1174 11B0;CE45;110E 1174 11B0; +CE46;CE46;110E 1174 11B1;CE46;110E 1174 11B1; +CE47;CE47;110E 1174 11B2;CE47;110E 1174 11B2; +CE48;CE48;110E 1174 11B3;CE48;110E 1174 11B3; +CE49;CE49;110E 1174 11B4;CE49;110E 1174 11B4; +CE4A;CE4A;110E 1174 11B5;CE4A;110E 1174 11B5; +CE4B;CE4B;110E 1174 11B6;CE4B;110E 1174 11B6; +CE4C;CE4C;110E 1174 11B7;CE4C;110E 1174 11B7; +CE4D;CE4D;110E 1174 11B8;CE4D;110E 1174 11B8; +CE4E;CE4E;110E 1174 11B9;CE4E;110E 1174 11B9; +CE4F;CE4F;110E 1174 11BA;CE4F;110E 1174 11BA; +CE50;CE50;110E 1174 11BB;CE50;110E 1174 11BB; +CE51;CE51;110E 1174 11BC;CE51;110E 1174 11BC; +CE52;CE52;110E 1174 11BD;CE52;110E 1174 11BD; +CE53;CE53;110E 1174 11BE;CE53;110E 1174 11BE; +CE54;CE54;110E 1174 11BF;CE54;110E 1174 11BF; +CE55;CE55;110E 1174 11C0;CE55;110E 1174 11C0; +CE56;CE56;110E 1174 11C1;CE56;110E 1174 11C1; +CE57;CE57;110E 1174 11C2;CE57;110E 1174 11C2; +CE58;CE58;110E 1175;CE58;110E 1175; +CE59;CE59;110E 1175 11A8;CE59;110E 1175 11A8; +CE5A;CE5A;110E 1175 11A9;CE5A;110E 1175 11A9; +CE5B;CE5B;110E 1175 11AA;CE5B;110E 1175 11AA; +CE5C;CE5C;110E 1175 11AB;CE5C;110E 1175 11AB; +CE5D;CE5D;110E 1175 11AC;CE5D;110E 1175 11AC; +CE5E;CE5E;110E 1175 11AD;CE5E;110E 1175 11AD; +CE5F;CE5F;110E 1175 11AE;CE5F;110E 1175 11AE; +CE60;CE60;110E 1175 11AF;CE60;110E 1175 11AF; +CE61;CE61;110E 1175 11B0;CE61;110E 1175 11B0; +CE62;CE62;110E 1175 11B1;CE62;110E 1175 11B1; +CE63;CE63;110E 1175 11B2;CE63;110E 1175 11B2; +CE64;CE64;110E 1175 11B3;CE64;110E 1175 11B3; +CE65;CE65;110E 1175 11B4;CE65;110E 1175 11B4; +CE66;CE66;110E 1175 11B5;CE66;110E 1175 11B5; +CE67;CE67;110E 1175 11B6;CE67;110E 1175 11B6; +CE68;CE68;110E 1175 11B7;CE68;110E 1175 11B7; +CE69;CE69;110E 1175 11B8;CE69;110E 1175 11B8; +CE6A;CE6A;110E 1175 11B9;CE6A;110E 1175 11B9; +CE6B;CE6B;110E 1175 11BA;CE6B;110E 1175 11BA; +CE6C;CE6C;110E 1175 11BB;CE6C;110E 1175 11BB; +CE6D;CE6D;110E 1175 11BC;CE6D;110E 1175 11BC; +CE6E;CE6E;110E 1175 11BD;CE6E;110E 1175 11BD; +CE6F;CE6F;110E 1175 11BE;CE6F;110E 1175 11BE; +CE70;CE70;110E 1175 11BF;CE70;110E 1175 11BF; +CE71;CE71;110E 1175 11C0;CE71;110E 1175 11C0; +CE72;CE72;110E 1175 11C1;CE72;110E 1175 11C1; +CE73;CE73;110E 1175 11C2;CE73;110E 1175 11C2; +CE74;CE74;110F 1161;CE74;110F 1161; +CE75;CE75;110F 1161 11A8;CE75;110F 1161 11A8; +CE76;CE76;110F 1161 11A9;CE76;110F 1161 11A9; +CE77;CE77;110F 1161 11AA;CE77;110F 1161 11AA; +CE78;CE78;110F 1161 11AB;CE78;110F 1161 11AB; +CE79;CE79;110F 1161 11AC;CE79;110F 1161 11AC; +CE7A;CE7A;110F 1161 11AD;CE7A;110F 1161 11AD; +CE7B;CE7B;110F 1161 11AE;CE7B;110F 1161 11AE; +CE7C;CE7C;110F 1161 11AF;CE7C;110F 1161 11AF; +CE7D;CE7D;110F 1161 11B0;CE7D;110F 1161 11B0; +CE7E;CE7E;110F 1161 11B1;CE7E;110F 1161 11B1; +CE7F;CE7F;110F 1161 11B2;CE7F;110F 1161 11B2; +CE80;CE80;110F 1161 11B3;CE80;110F 1161 11B3; +CE81;CE81;110F 1161 11B4;CE81;110F 1161 11B4; +CE82;CE82;110F 1161 11B5;CE82;110F 1161 11B5; +CE83;CE83;110F 1161 11B6;CE83;110F 1161 11B6; +CE84;CE84;110F 1161 11B7;CE84;110F 1161 11B7; +CE85;CE85;110F 1161 11B8;CE85;110F 1161 11B8; +CE86;CE86;110F 1161 11B9;CE86;110F 1161 11B9; +CE87;CE87;110F 1161 11BA;CE87;110F 1161 11BA; +CE88;CE88;110F 1161 11BB;CE88;110F 1161 11BB; +CE89;CE89;110F 1161 11BC;CE89;110F 1161 11BC; +CE8A;CE8A;110F 1161 11BD;CE8A;110F 1161 11BD; +CE8B;CE8B;110F 1161 11BE;CE8B;110F 1161 11BE; +CE8C;CE8C;110F 1161 11BF;CE8C;110F 1161 11BF; +CE8D;CE8D;110F 1161 11C0;CE8D;110F 1161 11C0; +CE8E;CE8E;110F 1161 11C1;CE8E;110F 1161 11C1; +CE8F;CE8F;110F 1161 11C2;CE8F;110F 1161 11C2; +CE90;CE90;110F 1162;CE90;110F 1162; +CE91;CE91;110F 1162 11A8;CE91;110F 1162 11A8; +CE92;CE92;110F 1162 11A9;CE92;110F 1162 11A9; +CE93;CE93;110F 1162 11AA;CE93;110F 1162 11AA; +CE94;CE94;110F 1162 11AB;CE94;110F 1162 11AB; +CE95;CE95;110F 1162 11AC;CE95;110F 1162 11AC; +CE96;CE96;110F 1162 11AD;CE96;110F 1162 11AD; +CE97;CE97;110F 1162 11AE;CE97;110F 1162 11AE; +CE98;CE98;110F 1162 11AF;CE98;110F 1162 11AF; +CE99;CE99;110F 1162 11B0;CE99;110F 1162 11B0; +CE9A;CE9A;110F 1162 11B1;CE9A;110F 1162 11B1; +CE9B;CE9B;110F 1162 11B2;CE9B;110F 1162 11B2; +CE9C;CE9C;110F 1162 11B3;CE9C;110F 1162 11B3; +CE9D;CE9D;110F 1162 11B4;CE9D;110F 1162 11B4; +CE9E;CE9E;110F 1162 11B5;CE9E;110F 1162 11B5; +CE9F;CE9F;110F 1162 11B6;CE9F;110F 1162 11B6; +CEA0;CEA0;110F 1162 11B7;CEA0;110F 1162 11B7; +CEA1;CEA1;110F 1162 11B8;CEA1;110F 1162 11B8; +CEA2;CEA2;110F 1162 11B9;CEA2;110F 1162 11B9; +CEA3;CEA3;110F 1162 11BA;CEA3;110F 1162 11BA; +CEA4;CEA4;110F 1162 11BB;CEA4;110F 1162 11BB; +CEA5;CEA5;110F 1162 11BC;CEA5;110F 1162 11BC; +CEA6;CEA6;110F 1162 11BD;CEA6;110F 1162 11BD; +CEA7;CEA7;110F 1162 11BE;CEA7;110F 1162 11BE; +CEA8;CEA8;110F 1162 11BF;CEA8;110F 1162 11BF; +CEA9;CEA9;110F 1162 11C0;CEA9;110F 1162 11C0; +CEAA;CEAA;110F 1162 11C1;CEAA;110F 1162 11C1; +CEAB;CEAB;110F 1162 11C2;CEAB;110F 1162 11C2; +CEAC;CEAC;110F 1163;CEAC;110F 1163; +CEAD;CEAD;110F 1163 11A8;CEAD;110F 1163 11A8; +CEAE;CEAE;110F 1163 11A9;CEAE;110F 1163 11A9; +CEAF;CEAF;110F 1163 11AA;CEAF;110F 1163 11AA; +CEB0;CEB0;110F 1163 11AB;CEB0;110F 1163 11AB; +CEB1;CEB1;110F 1163 11AC;CEB1;110F 1163 11AC; +CEB2;CEB2;110F 1163 11AD;CEB2;110F 1163 11AD; +CEB3;CEB3;110F 1163 11AE;CEB3;110F 1163 11AE; +CEB4;CEB4;110F 1163 11AF;CEB4;110F 1163 11AF; +CEB5;CEB5;110F 1163 11B0;CEB5;110F 1163 11B0; +CEB6;CEB6;110F 1163 11B1;CEB6;110F 1163 11B1; +CEB7;CEB7;110F 1163 11B2;CEB7;110F 1163 11B2; +CEB8;CEB8;110F 1163 11B3;CEB8;110F 1163 11B3; +CEB9;CEB9;110F 1163 11B4;CEB9;110F 1163 11B4; +CEBA;CEBA;110F 1163 11B5;CEBA;110F 1163 11B5; +CEBB;CEBB;110F 1163 11B6;CEBB;110F 1163 11B6; +CEBC;CEBC;110F 1163 11B7;CEBC;110F 1163 11B7; +CEBD;CEBD;110F 1163 11B8;CEBD;110F 1163 11B8; +CEBE;CEBE;110F 1163 11B9;CEBE;110F 1163 11B9; +CEBF;CEBF;110F 1163 11BA;CEBF;110F 1163 11BA; +CEC0;CEC0;110F 1163 11BB;CEC0;110F 1163 11BB; +CEC1;CEC1;110F 1163 11BC;CEC1;110F 1163 11BC; +CEC2;CEC2;110F 1163 11BD;CEC2;110F 1163 11BD; +CEC3;CEC3;110F 1163 11BE;CEC3;110F 1163 11BE; +CEC4;CEC4;110F 1163 11BF;CEC4;110F 1163 11BF; +CEC5;CEC5;110F 1163 11C0;CEC5;110F 1163 11C0; +CEC6;CEC6;110F 1163 11C1;CEC6;110F 1163 11C1; +CEC7;CEC7;110F 1163 11C2;CEC7;110F 1163 11C2; +CEC8;CEC8;110F 1164;CEC8;110F 1164; +CEC9;CEC9;110F 1164 11A8;CEC9;110F 1164 11A8; +CECA;CECA;110F 1164 11A9;CECA;110F 1164 11A9; +CECB;CECB;110F 1164 11AA;CECB;110F 1164 11AA; +CECC;CECC;110F 1164 11AB;CECC;110F 1164 11AB; +CECD;CECD;110F 1164 11AC;CECD;110F 1164 11AC; +CECE;CECE;110F 1164 11AD;CECE;110F 1164 11AD; +CECF;CECF;110F 1164 11AE;CECF;110F 1164 11AE; +CED0;CED0;110F 1164 11AF;CED0;110F 1164 11AF; +CED1;CED1;110F 1164 11B0;CED1;110F 1164 11B0; +CED2;CED2;110F 1164 11B1;CED2;110F 1164 11B1; +CED3;CED3;110F 1164 11B2;CED3;110F 1164 11B2; +CED4;CED4;110F 1164 11B3;CED4;110F 1164 11B3; +CED5;CED5;110F 1164 11B4;CED5;110F 1164 11B4; +CED6;CED6;110F 1164 11B5;CED6;110F 1164 11B5; +CED7;CED7;110F 1164 11B6;CED7;110F 1164 11B6; +CED8;CED8;110F 1164 11B7;CED8;110F 1164 11B7; +CED9;CED9;110F 1164 11B8;CED9;110F 1164 11B8; +CEDA;CEDA;110F 1164 11B9;CEDA;110F 1164 11B9; +CEDB;CEDB;110F 1164 11BA;CEDB;110F 1164 11BA; +CEDC;CEDC;110F 1164 11BB;CEDC;110F 1164 11BB; +CEDD;CEDD;110F 1164 11BC;CEDD;110F 1164 11BC; +CEDE;CEDE;110F 1164 11BD;CEDE;110F 1164 11BD; +CEDF;CEDF;110F 1164 11BE;CEDF;110F 1164 11BE; +CEE0;CEE0;110F 1164 11BF;CEE0;110F 1164 11BF; +CEE1;CEE1;110F 1164 11C0;CEE1;110F 1164 11C0; +CEE2;CEE2;110F 1164 11C1;CEE2;110F 1164 11C1; +CEE3;CEE3;110F 1164 11C2;CEE3;110F 1164 11C2; +CEE4;CEE4;110F 1165;CEE4;110F 1165; +CEE5;CEE5;110F 1165 11A8;CEE5;110F 1165 11A8; +CEE6;CEE6;110F 1165 11A9;CEE6;110F 1165 11A9; +CEE7;CEE7;110F 1165 11AA;CEE7;110F 1165 11AA; +CEE8;CEE8;110F 1165 11AB;CEE8;110F 1165 11AB; +CEE9;CEE9;110F 1165 11AC;CEE9;110F 1165 11AC; +CEEA;CEEA;110F 1165 11AD;CEEA;110F 1165 11AD; +CEEB;CEEB;110F 1165 11AE;CEEB;110F 1165 11AE; +CEEC;CEEC;110F 1165 11AF;CEEC;110F 1165 11AF; +CEED;CEED;110F 1165 11B0;CEED;110F 1165 11B0; +CEEE;CEEE;110F 1165 11B1;CEEE;110F 1165 11B1; +CEEF;CEEF;110F 1165 11B2;CEEF;110F 1165 11B2; +CEF0;CEF0;110F 1165 11B3;CEF0;110F 1165 11B3; +CEF1;CEF1;110F 1165 11B4;CEF1;110F 1165 11B4; +CEF2;CEF2;110F 1165 11B5;CEF2;110F 1165 11B5; +CEF3;CEF3;110F 1165 11B6;CEF3;110F 1165 11B6; +CEF4;CEF4;110F 1165 11B7;CEF4;110F 1165 11B7; +CEF5;CEF5;110F 1165 11B8;CEF5;110F 1165 11B8; +CEF6;CEF6;110F 1165 11B9;CEF6;110F 1165 11B9; +CEF7;CEF7;110F 1165 11BA;CEF7;110F 1165 11BA; +CEF8;CEF8;110F 1165 11BB;CEF8;110F 1165 11BB; +CEF9;CEF9;110F 1165 11BC;CEF9;110F 1165 11BC; +CEFA;CEFA;110F 1165 11BD;CEFA;110F 1165 11BD; +CEFB;CEFB;110F 1165 11BE;CEFB;110F 1165 11BE; +CEFC;CEFC;110F 1165 11BF;CEFC;110F 1165 11BF; +CEFD;CEFD;110F 1165 11C0;CEFD;110F 1165 11C0; +CEFE;CEFE;110F 1165 11C1;CEFE;110F 1165 11C1; +CEFF;CEFF;110F 1165 11C2;CEFF;110F 1165 11C2; +CF00;CF00;110F 1166;CF00;110F 1166; +CF01;CF01;110F 1166 11A8;CF01;110F 1166 11A8; +CF02;CF02;110F 1166 11A9;CF02;110F 1166 11A9; +CF03;CF03;110F 1166 11AA;CF03;110F 1166 11AA; +CF04;CF04;110F 1166 11AB;CF04;110F 1166 11AB; +CF05;CF05;110F 1166 11AC;CF05;110F 1166 11AC; +CF06;CF06;110F 1166 11AD;CF06;110F 1166 11AD; +CF07;CF07;110F 1166 11AE;CF07;110F 1166 11AE; +CF08;CF08;110F 1166 11AF;CF08;110F 1166 11AF; +CF09;CF09;110F 1166 11B0;CF09;110F 1166 11B0; +CF0A;CF0A;110F 1166 11B1;CF0A;110F 1166 11B1; +CF0B;CF0B;110F 1166 11B2;CF0B;110F 1166 11B2; +CF0C;CF0C;110F 1166 11B3;CF0C;110F 1166 11B3; +CF0D;CF0D;110F 1166 11B4;CF0D;110F 1166 11B4; +CF0E;CF0E;110F 1166 11B5;CF0E;110F 1166 11B5; +CF0F;CF0F;110F 1166 11B6;CF0F;110F 1166 11B6; +CF10;CF10;110F 1166 11B7;CF10;110F 1166 11B7; +CF11;CF11;110F 1166 11B8;CF11;110F 1166 11B8; +CF12;CF12;110F 1166 11B9;CF12;110F 1166 11B9; +CF13;CF13;110F 1166 11BA;CF13;110F 1166 11BA; +CF14;CF14;110F 1166 11BB;CF14;110F 1166 11BB; +CF15;CF15;110F 1166 11BC;CF15;110F 1166 11BC; +CF16;CF16;110F 1166 11BD;CF16;110F 1166 11BD; +CF17;CF17;110F 1166 11BE;CF17;110F 1166 11BE; +CF18;CF18;110F 1166 11BF;CF18;110F 1166 11BF; +CF19;CF19;110F 1166 11C0;CF19;110F 1166 11C0; +CF1A;CF1A;110F 1166 11C1;CF1A;110F 1166 11C1; +CF1B;CF1B;110F 1166 11C2;CF1B;110F 1166 11C2; +CF1C;CF1C;110F 1167;CF1C;110F 1167; +CF1D;CF1D;110F 1167 11A8;CF1D;110F 1167 11A8; +CF1E;CF1E;110F 1167 11A9;CF1E;110F 1167 11A9; +CF1F;CF1F;110F 1167 11AA;CF1F;110F 1167 11AA; +CF20;CF20;110F 1167 11AB;CF20;110F 1167 11AB; +CF21;CF21;110F 1167 11AC;CF21;110F 1167 11AC; +CF22;CF22;110F 1167 11AD;CF22;110F 1167 11AD; +CF23;CF23;110F 1167 11AE;CF23;110F 1167 11AE; +CF24;CF24;110F 1167 11AF;CF24;110F 1167 11AF; +CF25;CF25;110F 1167 11B0;CF25;110F 1167 11B0; +CF26;CF26;110F 1167 11B1;CF26;110F 1167 11B1; +CF27;CF27;110F 1167 11B2;CF27;110F 1167 11B2; +CF28;CF28;110F 1167 11B3;CF28;110F 1167 11B3; +CF29;CF29;110F 1167 11B4;CF29;110F 1167 11B4; +CF2A;CF2A;110F 1167 11B5;CF2A;110F 1167 11B5; +CF2B;CF2B;110F 1167 11B6;CF2B;110F 1167 11B6; +CF2C;CF2C;110F 1167 11B7;CF2C;110F 1167 11B7; +CF2D;CF2D;110F 1167 11B8;CF2D;110F 1167 11B8; +CF2E;CF2E;110F 1167 11B9;CF2E;110F 1167 11B9; +CF2F;CF2F;110F 1167 11BA;CF2F;110F 1167 11BA; +CF30;CF30;110F 1167 11BB;CF30;110F 1167 11BB; +CF31;CF31;110F 1167 11BC;CF31;110F 1167 11BC; +CF32;CF32;110F 1167 11BD;CF32;110F 1167 11BD; +CF33;CF33;110F 1167 11BE;CF33;110F 1167 11BE; +CF34;CF34;110F 1167 11BF;CF34;110F 1167 11BF; +CF35;CF35;110F 1167 11C0;CF35;110F 1167 11C0; +CF36;CF36;110F 1167 11C1;CF36;110F 1167 11C1; +CF37;CF37;110F 1167 11C2;CF37;110F 1167 11C2; +CF38;CF38;110F 1168;CF38;110F 1168; +CF39;CF39;110F 1168 11A8;CF39;110F 1168 11A8; +CF3A;CF3A;110F 1168 11A9;CF3A;110F 1168 11A9; +CF3B;CF3B;110F 1168 11AA;CF3B;110F 1168 11AA; +CF3C;CF3C;110F 1168 11AB;CF3C;110F 1168 11AB; +CF3D;CF3D;110F 1168 11AC;CF3D;110F 1168 11AC; +CF3E;CF3E;110F 1168 11AD;CF3E;110F 1168 11AD; +CF3F;CF3F;110F 1168 11AE;CF3F;110F 1168 11AE; +CF40;CF40;110F 1168 11AF;CF40;110F 1168 11AF; +CF41;CF41;110F 1168 11B0;CF41;110F 1168 11B0; +CF42;CF42;110F 1168 11B1;CF42;110F 1168 11B1; +CF43;CF43;110F 1168 11B2;CF43;110F 1168 11B2; +CF44;CF44;110F 1168 11B3;CF44;110F 1168 11B3; +CF45;CF45;110F 1168 11B4;CF45;110F 1168 11B4; +CF46;CF46;110F 1168 11B5;CF46;110F 1168 11B5; +CF47;CF47;110F 1168 11B6;CF47;110F 1168 11B6; +CF48;CF48;110F 1168 11B7;CF48;110F 1168 11B7; +CF49;CF49;110F 1168 11B8;CF49;110F 1168 11B8; +CF4A;CF4A;110F 1168 11B9;CF4A;110F 1168 11B9; +CF4B;CF4B;110F 1168 11BA;CF4B;110F 1168 11BA; +CF4C;CF4C;110F 1168 11BB;CF4C;110F 1168 11BB; +CF4D;CF4D;110F 1168 11BC;CF4D;110F 1168 11BC; +CF4E;CF4E;110F 1168 11BD;CF4E;110F 1168 11BD; +CF4F;CF4F;110F 1168 11BE;CF4F;110F 1168 11BE; +CF50;CF50;110F 1168 11BF;CF50;110F 1168 11BF; +CF51;CF51;110F 1168 11C0;CF51;110F 1168 11C0; +CF52;CF52;110F 1168 11C1;CF52;110F 1168 11C1; +CF53;CF53;110F 1168 11C2;CF53;110F 1168 11C2; +CF54;CF54;110F 1169;CF54;110F 1169; +CF55;CF55;110F 1169 11A8;CF55;110F 1169 11A8; +CF56;CF56;110F 1169 11A9;CF56;110F 1169 11A9; +CF57;CF57;110F 1169 11AA;CF57;110F 1169 11AA; +CF58;CF58;110F 1169 11AB;CF58;110F 1169 11AB; +CF59;CF59;110F 1169 11AC;CF59;110F 1169 11AC; +CF5A;CF5A;110F 1169 11AD;CF5A;110F 1169 11AD; +CF5B;CF5B;110F 1169 11AE;CF5B;110F 1169 11AE; +CF5C;CF5C;110F 1169 11AF;CF5C;110F 1169 11AF; +CF5D;CF5D;110F 1169 11B0;CF5D;110F 1169 11B0; +CF5E;CF5E;110F 1169 11B1;CF5E;110F 1169 11B1; +CF5F;CF5F;110F 1169 11B2;CF5F;110F 1169 11B2; +CF60;CF60;110F 1169 11B3;CF60;110F 1169 11B3; +CF61;CF61;110F 1169 11B4;CF61;110F 1169 11B4; +CF62;CF62;110F 1169 11B5;CF62;110F 1169 11B5; +CF63;CF63;110F 1169 11B6;CF63;110F 1169 11B6; +CF64;CF64;110F 1169 11B7;CF64;110F 1169 11B7; +CF65;CF65;110F 1169 11B8;CF65;110F 1169 11B8; +CF66;CF66;110F 1169 11B9;CF66;110F 1169 11B9; +CF67;CF67;110F 1169 11BA;CF67;110F 1169 11BA; +CF68;CF68;110F 1169 11BB;CF68;110F 1169 11BB; +CF69;CF69;110F 1169 11BC;CF69;110F 1169 11BC; +CF6A;CF6A;110F 1169 11BD;CF6A;110F 1169 11BD; +CF6B;CF6B;110F 1169 11BE;CF6B;110F 1169 11BE; +CF6C;CF6C;110F 1169 11BF;CF6C;110F 1169 11BF; +CF6D;CF6D;110F 1169 11C0;CF6D;110F 1169 11C0; +CF6E;CF6E;110F 1169 11C1;CF6E;110F 1169 11C1; +CF6F;CF6F;110F 1169 11C2;CF6F;110F 1169 11C2; +CF70;CF70;110F 116A;CF70;110F 116A; +CF71;CF71;110F 116A 11A8;CF71;110F 116A 11A8; +CF72;CF72;110F 116A 11A9;CF72;110F 116A 11A9; +CF73;CF73;110F 116A 11AA;CF73;110F 116A 11AA; +CF74;CF74;110F 116A 11AB;CF74;110F 116A 11AB; +CF75;CF75;110F 116A 11AC;CF75;110F 116A 11AC; +CF76;CF76;110F 116A 11AD;CF76;110F 116A 11AD; +CF77;CF77;110F 116A 11AE;CF77;110F 116A 11AE; +CF78;CF78;110F 116A 11AF;CF78;110F 116A 11AF; +CF79;CF79;110F 116A 11B0;CF79;110F 116A 11B0; +CF7A;CF7A;110F 116A 11B1;CF7A;110F 116A 11B1; +CF7B;CF7B;110F 116A 11B2;CF7B;110F 116A 11B2; +CF7C;CF7C;110F 116A 11B3;CF7C;110F 116A 11B3; +CF7D;CF7D;110F 116A 11B4;CF7D;110F 116A 11B4; +CF7E;CF7E;110F 116A 11B5;CF7E;110F 116A 11B5; +CF7F;CF7F;110F 116A 11B6;CF7F;110F 116A 11B6; +CF80;CF80;110F 116A 11B7;CF80;110F 116A 11B7; +CF81;CF81;110F 116A 11B8;CF81;110F 116A 11B8; +CF82;CF82;110F 116A 11B9;CF82;110F 116A 11B9; +CF83;CF83;110F 116A 11BA;CF83;110F 116A 11BA; +CF84;CF84;110F 116A 11BB;CF84;110F 116A 11BB; +CF85;CF85;110F 116A 11BC;CF85;110F 116A 11BC; +CF86;CF86;110F 116A 11BD;CF86;110F 116A 11BD; +CF87;CF87;110F 116A 11BE;CF87;110F 116A 11BE; +CF88;CF88;110F 116A 11BF;CF88;110F 116A 11BF; +CF89;CF89;110F 116A 11C0;CF89;110F 116A 11C0; +CF8A;CF8A;110F 116A 11C1;CF8A;110F 116A 11C1; +CF8B;CF8B;110F 116A 11C2;CF8B;110F 116A 11C2; +CF8C;CF8C;110F 116B;CF8C;110F 116B; +CF8D;CF8D;110F 116B 11A8;CF8D;110F 116B 11A8; +CF8E;CF8E;110F 116B 11A9;CF8E;110F 116B 11A9; +CF8F;CF8F;110F 116B 11AA;CF8F;110F 116B 11AA; +CF90;CF90;110F 116B 11AB;CF90;110F 116B 11AB; +CF91;CF91;110F 116B 11AC;CF91;110F 116B 11AC; +CF92;CF92;110F 116B 11AD;CF92;110F 116B 11AD; +CF93;CF93;110F 116B 11AE;CF93;110F 116B 11AE; +CF94;CF94;110F 116B 11AF;CF94;110F 116B 11AF; +CF95;CF95;110F 116B 11B0;CF95;110F 116B 11B0; +CF96;CF96;110F 116B 11B1;CF96;110F 116B 11B1; +CF97;CF97;110F 116B 11B2;CF97;110F 116B 11B2; +CF98;CF98;110F 116B 11B3;CF98;110F 116B 11B3; +CF99;CF99;110F 116B 11B4;CF99;110F 116B 11B4; +CF9A;CF9A;110F 116B 11B5;CF9A;110F 116B 11B5; +CF9B;CF9B;110F 116B 11B6;CF9B;110F 116B 11B6; +CF9C;CF9C;110F 116B 11B7;CF9C;110F 116B 11B7; +CF9D;CF9D;110F 116B 11B8;CF9D;110F 116B 11B8; +CF9E;CF9E;110F 116B 11B9;CF9E;110F 116B 11B9; +CF9F;CF9F;110F 116B 11BA;CF9F;110F 116B 11BA; +CFA0;CFA0;110F 116B 11BB;CFA0;110F 116B 11BB; +CFA1;CFA1;110F 116B 11BC;CFA1;110F 116B 11BC; +CFA2;CFA2;110F 116B 11BD;CFA2;110F 116B 11BD; +CFA3;CFA3;110F 116B 11BE;CFA3;110F 116B 11BE; +CFA4;CFA4;110F 116B 11BF;CFA4;110F 116B 11BF; +CFA5;CFA5;110F 116B 11C0;CFA5;110F 116B 11C0; +CFA6;CFA6;110F 116B 11C1;CFA6;110F 116B 11C1; +CFA7;CFA7;110F 116B 11C2;CFA7;110F 116B 11C2; +CFA8;CFA8;110F 116C;CFA8;110F 116C; +CFA9;CFA9;110F 116C 11A8;CFA9;110F 116C 11A8; +CFAA;CFAA;110F 116C 11A9;CFAA;110F 116C 11A9; +CFAB;CFAB;110F 116C 11AA;CFAB;110F 116C 11AA; +CFAC;CFAC;110F 116C 11AB;CFAC;110F 116C 11AB; +CFAD;CFAD;110F 116C 11AC;CFAD;110F 116C 11AC; +CFAE;CFAE;110F 116C 11AD;CFAE;110F 116C 11AD; +CFAF;CFAF;110F 116C 11AE;CFAF;110F 116C 11AE; +CFB0;CFB0;110F 116C 11AF;CFB0;110F 116C 11AF; +CFB1;CFB1;110F 116C 11B0;CFB1;110F 116C 11B0; +CFB2;CFB2;110F 116C 11B1;CFB2;110F 116C 11B1; +CFB3;CFB3;110F 116C 11B2;CFB3;110F 116C 11B2; +CFB4;CFB4;110F 116C 11B3;CFB4;110F 116C 11B3; +CFB5;CFB5;110F 116C 11B4;CFB5;110F 116C 11B4; +CFB6;CFB6;110F 116C 11B5;CFB6;110F 116C 11B5; +CFB7;CFB7;110F 116C 11B6;CFB7;110F 116C 11B6; +CFB8;CFB8;110F 116C 11B7;CFB8;110F 116C 11B7; +CFB9;CFB9;110F 116C 11B8;CFB9;110F 116C 11B8; +CFBA;CFBA;110F 116C 11B9;CFBA;110F 116C 11B9; +CFBB;CFBB;110F 116C 11BA;CFBB;110F 116C 11BA; +CFBC;CFBC;110F 116C 11BB;CFBC;110F 116C 11BB; +CFBD;CFBD;110F 116C 11BC;CFBD;110F 116C 11BC; +CFBE;CFBE;110F 116C 11BD;CFBE;110F 116C 11BD; +CFBF;CFBF;110F 116C 11BE;CFBF;110F 116C 11BE; +CFC0;CFC0;110F 116C 11BF;CFC0;110F 116C 11BF; +CFC1;CFC1;110F 116C 11C0;CFC1;110F 116C 11C0; +CFC2;CFC2;110F 116C 11C1;CFC2;110F 116C 11C1; +CFC3;CFC3;110F 116C 11C2;CFC3;110F 116C 11C2; +CFC4;CFC4;110F 116D;CFC4;110F 116D; +CFC5;CFC5;110F 116D 11A8;CFC5;110F 116D 11A8; +CFC6;CFC6;110F 116D 11A9;CFC6;110F 116D 11A9; +CFC7;CFC7;110F 116D 11AA;CFC7;110F 116D 11AA; +CFC8;CFC8;110F 116D 11AB;CFC8;110F 116D 11AB; +CFC9;CFC9;110F 116D 11AC;CFC9;110F 116D 11AC; +CFCA;CFCA;110F 116D 11AD;CFCA;110F 116D 11AD; +CFCB;CFCB;110F 116D 11AE;CFCB;110F 116D 11AE; +CFCC;CFCC;110F 116D 11AF;CFCC;110F 116D 11AF; +CFCD;CFCD;110F 116D 11B0;CFCD;110F 116D 11B0; +CFCE;CFCE;110F 116D 11B1;CFCE;110F 116D 11B1; +CFCF;CFCF;110F 116D 11B2;CFCF;110F 116D 11B2; +CFD0;CFD0;110F 116D 11B3;CFD0;110F 116D 11B3; +CFD1;CFD1;110F 116D 11B4;CFD1;110F 116D 11B4; +CFD2;CFD2;110F 116D 11B5;CFD2;110F 116D 11B5; +CFD3;CFD3;110F 116D 11B6;CFD3;110F 116D 11B6; +CFD4;CFD4;110F 116D 11B7;CFD4;110F 116D 11B7; +CFD5;CFD5;110F 116D 11B8;CFD5;110F 116D 11B8; +CFD6;CFD6;110F 116D 11B9;CFD6;110F 116D 11B9; +CFD7;CFD7;110F 116D 11BA;CFD7;110F 116D 11BA; +CFD8;CFD8;110F 116D 11BB;CFD8;110F 116D 11BB; +CFD9;CFD9;110F 116D 11BC;CFD9;110F 116D 11BC; +CFDA;CFDA;110F 116D 11BD;CFDA;110F 116D 11BD; +CFDB;CFDB;110F 116D 11BE;CFDB;110F 116D 11BE; +CFDC;CFDC;110F 116D 11BF;CFDC;110F 116D 11BF; +CFDD;CFDD;110F 116D 11C0;CFDD;110F 116D 11C0; +CFDE;CFDE;110F 116D 11C1;CFDE;110F 116D 11C1; +CFDF;CFDF;110F 116D 11C2;CFDF;110F 116D 11C2; +CFE0;CFE0;110F 116E;CFE0;110F 116E; +CFE1;CFE1;110F 116E 11A8;CFE1;110F 116E 11A8; +CFE2;CFE2;110F 116E 11A9;CFE2;110F 116E 11A9; +CFE3;CFE3;110F 116E 11AA;CFE3;110F 116E 11AA; +CFE4;CFE4;110F 116E 11AB;CFE4;110F 116E 11AB; +CFE5;CFE5;110F 116E 11AC;CFE5;110F 116E 11AC; +CFE6;CFE6;110F 116E 11AD;CFE6;110F 116E 11AD; +CFE7;CFE7;110F 116E 11AE;CFE7;110F 116E 11AE; +CFE8;CFE8;110F 116E 11AF;CFE8;110F 116E 11AF; +CFE9;CFE9;110F 116E 11B0;CFE9;110F 116E 11B0; +CFEA;CFEA;110F 116E 11B1;CFEA;110F 116E 11B1; +CFEB;CFEB;110F 116E 11B2;CFEB;110F 116E 11B2; +CFEC;CFEC;110F 116E 11B3;CFEC;110F 116E 11B3; +CFED;CFED;110F 116E 11B4;CFED;110F 116E 11B4; +CFEE;CFEE;110F 116E 11B5;CFEE;110F 116E 11B5; +CFEF;CFEF;110F 116E 11B6;CFEF;110F 116E 11B6; +CFF0;CFF0;110F 116E 11B7;CFF0;110F 116E 11B7; +CFF1;CFF1;110F 116E 11B8;CFF1;110F 116E 11B8; +CFF2;CFF2;110F 116E 11B9;CFF2;110F 116E 11B9; +CFF3;CFF3;110F 116E 11BA;CFF3;110F 116E 11BA; +CFF4;CFF4;110F 116E 11BB;CFF4;110F 116E 11BB; +CFF5;CFF5;110F 116E 11BC;CFF5;110F 116E 11BC; +CFF6;CFF6;110F 116E 11BD;CFF6;110F 116E 11BD; +CFF7;CFF7;110F 116E 11BE;CFF7;110F 116E 11BE; +CFF8;CFF8;110F 116E 11BF;CFF8;110F 116E 11BF; +CFF9;CFF9;110F 116E 11C0;CFF9;110F 116E 11C0; +CFFA;CFFA;110F 116E 11C1;CFFA;110F 116E 11C1; +CFFB;CFFB;110F 116E 11C2;CFFB;110F 116E 11C2; +CFFC;CFFC;110F 116F;CFFC;110F 116F; +CFFD;CFFD;110F 116F 11A8;CFFD;110F 116F 11A8; +CFFE;CFFE;110F 116F 11A9;CFFE;110F 116F 11A9; +CFFF;CFFF;110F 116F 11AA;CFFF;110F 116F 11AA; +D000;D000;110F 116F 11AB;D000;110F 116F 11AB; +D001;D001;110F 116F 11AC;D001;110F 116F 11AC; +D002;D002;110F 116F 11AD;D002;110F 116F 11AD; +D003;D003;110F 116F 11AE;D003;110F 116F 11AE; +D004;D004;110F 116F 11AF;D004;110F 116F 11AF; +D005;D005;110F 116F 11B0;D005;110F 116F 11B0; +D006;D006;110F 116F 11B1;D006;110F 116F 11B1; +D007;D007;110F 116F 11B2;D007;110F 116F 11B2; +D008;D008;110F 116F 11B3;D008;110F 116F 11B3; +D009;D009;110F 116F 11B4;D009;110F 116F 11B4; +D00A;D00A;110F 116F 11B5;D00A;110F 116F 11B5; +D00B;D00B;110F 116F 11B6;D00B;110F 116F 11B6; +D00C;D00C;110F 116F 11B7;D00C;110F 116F 11B7; +D00D;D00D;110F 116F 11B8;D00D;110F 116F 11B8; +D00E;D00E;110F 116F 11B9;D00E;110F 116F 11B9; +D00F;D00F;110F 116F 11BA;D00F;110F 116F 11BA; +D010;D010;110F 116F 11BB;D010;110F 116F 11BB; +D011;D011;110F 116F 11BC;D011;110F 116F 11BC; +D012;D012;110F 116F 11BD;D012;110F 116F 11BD; +D013;D013;110F 116F 11BE;D013;110F 116F 11BE; +D014;D014;110F 116F 11BF;D014;110F 116F 11BF; +D015;D015;110F 116F 11C0;D015;110F 116F 11C0; +D016;D016;110F 116F 11C1;D016;110F 116F 11C1; +D017;D017;110F 116F 11C2;D017;110F 116F 11C2; +D018;D018;110F 1170;D018;110F 1170; +D019;D019;110F 1170 11A8;D019;110F 1170 11A8; +D01A;D01A;110F 1170 11A9;D01A;110F 1170 11A9; +D01B;D01B;110F 1170 11AA;D01B;110F 1170 11AA; +D01C;D01C;110F 1170 11AB;D01C;110F 1170 11AB; +D01D;D01D;110F 1170 11AC;D01D;110F 1170 11AC; +D01E;D01E;110F 1170 11AD;D01E;110F 1170 11AD; +D01F;D01F;110F 1170 11AE;D01F;110F 1170 11AE; +D020;D020;110F 1170 11AF;D020;110F 1170 11AF; +D021;D021;110F 1170 11B0;D021;110F 1170 11B0; +D022;D022;110F 1170 11B1;D022;110F 1170 11B1; +D023;D023;110F 1170 11B2;D023;110F 1170 11B2; +D024;D024;110F 1170 11B3;D024;110F 1170 11B3; +D025;D025;110F 1170 11B4;D025;110F 1170 11B4; +D026;D026;110F 1170 11B5;D026;110F 1170 11B5; +D027;D027;110F 1170 11B6;D027;110F 1170 11B6; +D028;D028;110F 1170 11B7;D028;110F 1170 11B7; +D029;D029;110F 1170 11B8;D029;110F 1170 11B8; +D02A;D02A;110F 1170 11B9;D02A;110F 1170 11B9; +D02B;D02B;110F 1170 11BA;D02B;110F 1170 11BA; +D02C;D02C;110F 1170 11BB;D02C;110F 1170 11BB; +D02D;D02D;110F 1170 11BC;D02D;110F 1170 11BC; +D02E;D02E;110F 1170 11BD;D02E;110F 1170 11BD; +D02F;D02F;110F 1170 11BE;D02F;110F 1170 11BE; +D030;D030;110F 1170 11BF;D030;110F 1170 11BF; +D031;D031;110F 1170 11C0;D031;110F 1170 11C0; +D032;D032;110F 1170 11C1;D032;110F 1170 11C1; +D033;D033;110F 1170 11C2;D033;110F 1170 11C2; +D034;D034;110F 1171;D034;110F 1171; +D035;D035;110F 1171 11A8;D035;110F 1171 11A8; +D036;D036;110F 1171 11A9;D036;110F 1171 11A9; +D037;D037;110F 1171 11AA;D037;110F 1171 11AA; +D038;D038;110F 1171 11AB;D038;110F 1171 11AB; +D039;D039;110F 1171 11AC;D039;110F 1171 11AC; +D03A;D03A;110F 1171 11AD;D03A;110F 1171 11AD; +D03B;D03B;110F 1171 11AE;D03B;110F 1171 11AE; +D03C;D03C;110F 1171 11AF;D03C;110F 1171 11AF; +D03D;D03D;110F 1171 11B0;D03D;110F 1171 11B0; +D03E;D03E;110F 1171 11B1;D03E;110F 1171 11B1; +D03F;D03F;110F 1171 11B2;D03F;110F 1171 11B2; +D040;D040;110F 1171 11B3;D040;110F 1171 11B3; +D041;D041;110F 1171 11B4;D041;110F 1171 11B4; +D042;D042;110F 1171 11B5;D042;110F 1171 11B5; +D043;D043;110F 1171 11B6;D043;110F 1171 11B6; +D044;D044;110F 1171 11B7;D044;110F 1171 11B7; +D045;D045;110F 1171 11B8;D045;110F 1171 11B8; +D046;D046;110F 1171 11B9;D046;110F 1171 11B9; +D047;D047;110F 1171 11BA;D047;110F 1171 11BA; +D048;D048;110F 1171 11BB;D048;110F 1171 11BB; +D049;D049;110F 1171 11BC;D049;110F 1171 11BC; +D04A;D04A;110F 1171 11BD;D04A;110F 1171 11BD; +D04B;D04B;110F 1171 11BE;D04B;110F 1171 11BE; +D04C;D04C;110F 1171 11BF;D04C;110F 1171 11BF; +D04D;D04D;110F 1171 11C0;D04D;110F 1171 11C0; +D04E;D04E;110F 1171 11C1;D04E;110F 1171 11C1; +D04F;D04F;110F 1171 11C2;D04F;110F 1171 11C2; +D050;D050;110F 1172;D050;110F 1172; +D051;D051;110F 1172 11A8;D051;110F 1172 11A8; +D052;D052;110F 1172 11A9;D052;110F 1172 11A9; +D053;D053;110F 1172 11AA;D053;110F 1172 11AA; +D054;D054;110F 1172 11AB;D054;110F 1172 11AB; +D055;D055;110F 1172 11AC;D055;110F 1172 11AC; +D056;D056;110F 1172 11AD;D056;110F 1172 11AD; +D057;D057;110F 1172 11AE;D057;110F 1172 11AE; +D058;D058;110F 1172 11AF;D058;110F 1172 11AF; +D059;D059;110F 1172 11B0;D059;110F 1172 11B0; +D05A;D05A;110F 1172 11B1;D05A;110F 1172 11B1; +D05B;D05B;110F 1172 11B2;D05B;110F 1172 11B2; +D05C;D05C;110F 1172 11B3;D05C;110F 1172 11B3; +D05D;D05D;110F 1172 11B4;D05D;110F 1172 11B4; +D05E;D05E;110F 1172 11B5;D05E;110F 1172 11B5; +D05F;D05F;110F 1172 11B6;D05F;110F 1172 11B6; +D060;D060;110F 1172 11B7;D060;110F 1172 11B7; +D061;D061;110F 1172 11B8;D061;110F 1172 11B8; +D062;D062;110F 1172 11B9;D062;110F 1172 11B9; +D063;D063;110F 1172 11BA;D063;110F 1172 11BA; +D064;D064;110F 1172 11BB;D064;110F 1172 11BB; +D065;D065;110F 1172 11BC;D065;110F 1172 11BC; +D066;D066;110F 1172 11BD;D066;110F 1172 11BD; +D067;D067;110F 1172 11BE;D067;110F 1172 11BE; +D068;D068;110F 1172 11BF;D068;110F 1172 11BF; +D069;D069;110F 1172 11C0;D069;110F 1172 11C0; +D06A;D06A;110F 1172 11C1;D06A;110F 1172 11C1; +D06B;D06B;110F 1172 11C2;D06B;110F 1172 11C2; +D06C;D06C;110F 1173;D06C;110F 1173; +D06D;D06D;110F 1173 11A8;D06D;110F 1173 11A8; +D06E;D06E;110F 1173 11A9;D06E;110F 1173 11A9; +D06F;D06F;110F 1173 11AA;D06F;110F 1173 11AA; +D070;D070;110F 1173 11AB;D070;110F 1173 11AB; +D071;D071;110F 1173 11AC;D071;110F 1173 11AC; +D072;D072;110F 1173 11AD;D072;110F 1173 11AD; +D073;D073;110F 1173 11AE;D073;110F 1173 11AE; +D074;D074;110F 1173 11AF;D074;110F 1173 11AF; +D075;D075;110F 1173 11B0;D075;110F 1173 11B0; +D076;D076;110F 1173 11B1;D076;110F 1173 11B1; +D077;D077;110F 1173 11B2;D077;110F 1173 11B2; +D078;D078;110F 1173 11B3;D078;110F 1173 11B3; +D079;D079;110F 1173 11B4;D079;110F 1173 11B4; +D07A;D07A;110F 1173 11B5;D07A;110F 1173 11B5; +D07B;D07B;110F 1173 11B6;D07B;110F 1173 11B6; +D07C;D07C;110F 1173 11B7;D07C;110F 1173 11B7; +D07D;D07D;110F 1173 11B8;D07D;110F 1173 11B8; +D07E;D07E;110F 1173 11B9;D07E;110F 1173 11B9; +D07F;D07F;110F 1173 11BA;D07F;110F 1173 11BA; +D080;D080;110F 1173 11BB;D080;110F 1173 11BB; +D081;D081;110F 1173 11BC;D081;110F 1173 11BC; +D082;D082;110F 1173 11BD;D082;110F 1173 11BD; +D083;D083;110F 1173 11BE;D083;110F 1173 11BE; +D084;D084;110F 1173 11BF;D084;110F 1173 11BF; +D085;D085;110F 1173 11C0;D085;110F 1173 11C0; +D086;D086;110F 1173 11C1;D086;110F 1173 11C1; +D087;D087;110F 1173 11C2;D087;110F 1173 11C2; +D088;D088;110F 1174;D088;110F 1174; +D089;D089;110F 1174 11A8;D089;110F 1174 11A8; +D08A;D08A;110F 1174 11A9;D08A;110F 1174 11A9; +D08B;D08B;110F 1174 11AA;D08B;110F 1174 11AA; +D08C;D08C;110F 1174 11AB;D08C;110F 1174 11AB; +D08D;D08D;110F 1174 11AC;D08D;110F 1174 11AC; +D08E;D08E;110F 1174 11AD;D08E;110F 1174 11AD; +D08F;D08F;110F 1174 11AE;D08F;110F 1174 11AE; +D090;D090;110F 1174 11AF;D090;110F 1174 11AF; +D091;D091;110F 1174 11B0;D091;110F 1174 11B0; +D092;D092;110F 1174 11B1;D092;110F 1174 11B1; +D093;D093;110F 1174 11B2;D093;110F 1174 11B2; +D094;D094;110F 1174 11B3;D094;110F 1174 11B3; +D095;D095;110F 1174 11B4;D095;110F 1174 11B4; +D096;D096;110F 1174 11B5;D096;110F 1174 11B5; +D097;D097;110F 1174 11B6;D097;110F 1174 11B6; +D098;D098;110F 1174 11B7;D098;110F 1174 11B7; +D099;D099;110F 1174 11B8;D099;110F 1174 11B8; +D09A;D09A;110F 1174 11B9;D09A;110F 1174 11B9; +D09B;D09B;110F 1174 11BA;D09B;110F 1174 11BA; +D09C;D09C;110F 1174 11BB;D09C;110F 1174 11BB; +D09D;D09D;110F 1174 11BC;D09D;110F 1174 11BC; +D09E;D09E;110F 1174 11BD;D09E;110F 1174 11BD; +D09F;D09F;110F 1174 11BE;D09F;110F 1174 11BE; +D0A0;D0A0;110F 1174 11BF;D0A0;110F 1174 11BF; +D0A1;D0A1;110F 1174 11C0;D0A1;110F 1174 11C0; +D0A2;D0A2;110F 1174 11C1;D0A2;110F 1174 11C1; +D0A3;D0A3;110F 1174 11C2;D0A3;110F 1174 11C2; +D0A4;D0A4;110F 1175;D0A4;110F 1175; +D0A5;D0A5;110F 1175 11A8;D0A5;110F 1175 11A8; +D0A6;D0A6;110F 1175 11A9;D0A6;110F 1175 11A9; +D0A7;D0A7;110F 1175 11AA;D0A7;110F 1175 11AA; +D0A8;D0A8;110F 1175 11AB;D0A8;110F 1175 11AB; +D0A9;D0A9;110F 1175 11AC;D0A9;110F 1175 11AC; +D0AA;D0AA;110F 1175 11AD;D0AA;110F 1175 11AD; +D0AB;D0AB;110F 1175 11AE;D0AB;110F 1175 11AE; +D0AC;D0AC;110F 1175 11AF;D0AC;110F 1175 11AF; +D0AD;D0AD;110F 1175 11B0;D0AD;110F 1175 11B0; +D0AE;D0AE;110F 1175 11B1;D0AE;110F 1175 11B1; +D0AF;D0AF;110F 1175 11B2;D0AF;110F 1175 11B2; +D0B0;D0B0;110F 1175 11B3;D0B0;110F 1175 11B3; +D0B1;D0B1;110F 1175 11B4;D0B1;110F 1175 11B4; +D0B2;D0B2;110F 1175 11B5;D0B2;110F 1175 11B5; +D0B3;D0B3;110F 1175 11B6;D0B3;110F 1175 11B6; +D0B4;D0B4;110F 1175 11B7;D0B4;110F 1175 11B7; +D0B5;D0B5;110F 1175 11B8;D0B5;110F 1175 11B8; +D0B6;D0B6;110F 1175 11B9;D0B6;110F 1175 11B9; +D0B7;D0B7;110F 1175 11BA;D0B7;110F 1175 11BA; +D0B8;D0B8;110F 1175 11BB;D0B8;110F 1175 11BB; +D0B9;D0B9;110F 1175 11BC;D0B9;110F 1175 11BC; +D0BA;D0BA;110F 1175 11BD;D0BA;110F 1175 11BD; +D0BB;D0BB;110F 1175 11BE;D0BB;110F 1175 11BE; +D0BC;D0BC;110F 1175 11BF;D0BC;110F 1175 11BF; +D0BD;D0BD;110F 1175 11C0;D0BD;110F 1175 11C0; +D0BE;D0BE;110F 1175 11C1;D0BE;110F 1175 11C1; +D0BF;D0BF;110F 1175 11C2;D0BF;110F 1175 11C2; +D0C0;D0C0;1110 1161;D0C0;1110 1161; +D0C1;D0C1;1110 1161 11A8;D0C1;1110 1161 11A8; +D0C2;D0C2;1110 1161 11A9;D0C2;1110 1161 11A9; +D0C3;D0C3;1110 1161 11AA;D0C3;1110 1161 11AA; +D0C4;D0C4;1110 1161 11AB;D0C4;1110 1161 11AB; +D0C5;D0C5;1110 1161 11AC;D0C5;1110 1161 11AC; +D0C6;D0C6;1110 1161 11AD;D0C6;1110 1161 11AD; +D0C7;D0C7;1110 1161 11AE;D0C7;1110 1161 11AE; +D0C8;D0C8;1110 1161 11AF;D0C8;1110 1161 11AF; +D0C9;D0C9;1110 1161 11B0;D0C9;1110 1161 11B0; +D0CA;D0CA;1110 1161 11B1;D0CA;1110 1161 11B1; +D0CB;D0CB;1110 1161 11B2;D0CB;1110 1161 11B2; +D0CC;D0CC;1110 1161 11B3;D0CC;1110 1161 11B3; +D0CD;D0CD;1110 1161 11B4;D0CD;1110 1161 11B4; +D0CE;D0CE;1110 1161 11B5;D0CE;1110 1161 11B5; +D0CF;D0CF;1110 1161 11B6;D0CF;1110 1161 11B6; +D0D0;D0D0;1110 1161 11B7;D0D0;1110 1161 11B7; +D0D1;D0D1;1110 1161 11B8;D0D1;1110 1161 11B8; +D0D2;D0D2;1110 1161 11B9;D0D2;1110 1161 11B9; +D0D3;D0D3;1110 1161 11BA;D0D3;1110 1161 11BA; +D0D4;D0D4;1110 1161 11BB;D0D4;1110 1161 11BB; +D0D5;D0D5;1110 1161 11BC;D0D5;1110 1161 11BC; +D0D6;D0D6;1110 1161 11BD;D0D6;1110 1161 11BD; +D0D7;D0D7;1110 1161 11BE;D0D7;1110 1161 11BE; +D0D8;D0D8;1110 1161 11BF;D0D8;1110 1161 11BF; +D0D9;D0D9;1110 1161 11C0;D0D9;1110 1161 11C0; +D0DA;D0DA;1110 1161 11C1;D0DA;1110 1161 11C1; +D0DB;D0DB;1110 1161 11C2;D0DB;1110 1161 11C2; +D0DC;D0DC;1110 1162;D0DC;1110 1162; +D0DD;D0DD;1110 1162 11A8;D0DD;1110 1162 11A8; +D0DE;D0DE;1110 1162 11A9;D0DE;1110 1162 11A9; +D0DF;D0DF;1110 1162 11AA;D0DF;1110 1162 11AA; +D0E0;D0E0;1110 1162 11AB;D0E0;1110 1162 11AB; +D0E1;D0E1;1110 1162 11AC;D0E1;1110 1162 11AC; +D0E2;D0E2;1110 1162 11AD;D0E2;1110 1162 11AD; +D0E3;D0E3;1110 1162 11AE;D0E3;1110 1162 11AE; +D0E4;D0E4;1110 1162 11AF;D0E4;1110 1162 11AF; +D0E5;D0E5;1110 1162 11B0;D0E5;1110 1162 11B0; +D0E6;D0E6;1110 1162 11B1;D0E6;1110 1162 11B1; +D0E7;D0E7;1110 1162 11B2;D0E7;1110 1162 11B2; +D0E8;D0E8;1110 1162 11B3;D0E8;1110 1162 11B3; +D0E9;D0E9;1110 1162 11B4;D0E9;1110 1162 11B4; +D0EA;D0EA;1110 1162 11B5;D0EA;1110 1162 11B5; +D0EB;D0EB;1110 1162 11B6;D0EB;1110 1162 11B6; +D0EC;D0EC;1110 1162 11B7;D0EC;1110 1162 11B7; +D0ED;D0ED;1110 1162 11B8;D0ED;1110 1162 11B8; +D0EE;D0EE;1110 1162 11B9;D0EE;1110 1162 11B9; +D0EF;D0EF;1110 1162 11BA;D0EF;1110 1162 11BA; +D0F0;D0F0;1110 1162 11BB;D0F0;1110 1162 11BB; +D0F1;D0F1;1110 1162 11BC;D0F1;1110 1162 11BC; +D0F2;D0F2;1110 1162 11BD;D0F2;1110 1162 11BD; +D0F3;D0F3;1110 1162 11BE;D0F3;1110 1162 11BE; +D0F4;D0F4;1110 1162 11BF;D0F4;1110 1162 11BF; +D0F5;D0F5;1110 1162 11C0;D0F5;1110 1162 11C0; +D0F6;D0F6;1110 1162 11C1;D0F6;1110 1162 11C1; +D0F7;D0F7;1110 1162 11C2;D0F7;1110 1162 11C2; +D0F8;D0F8;1110 1163;D0F8;1110 1163; +D0F9;D0F9;1110 1163 11A8;D0F9;1110 1163 11A8; +D0FA;D0FA;1110 1163 11A9;D0FA;1110 1163 11A9; +D0FB;D0FB;1110 1163 11AA;D0FB;1110 1163 11AA; +D0FC;D0FC;1110 1163 11AB;D0FC;1110 1163 11AB; +D0FD;D0FD;1110 1163 11AC;D0FD;1110 1163 11AC; +D0FE;D0FE;1110 1163 11AD;D0FE;1110 1163 11AD; +D0FF;D0FF;1110 1163 11AE;D0FF;1110 1163 11AE; +D100;D100;1110 1163 11AF;D100;1110 1163 11AF; +D101;D101;1110 1163 11B0;D101;1110 1163 11B0; +D102;D102;1110 1163 11B1;D102;1110 1163 11B1; +D103;D103;1110 1163 11B2;D103;1110 1163 11B2; +D104;D104;1110 1163 11B3;D104;1110 1163 11B3; +D105;D105;1110 1163 11B4;D105;1110 1163 11B4; +D106;D106;1110 1163 11B5;D106;1110 1163 11B5; +D107;D107;1110 1163 11B6;D107;1110 1163 11B6; +D108;D108;1110 1163 11B7;D108;1110 1163 11B7; +D109;D109;1110 1163 11B8;D109;1110 1163 11B8; +D10A;D10A;1110 1163 11B9;D10A;1110 1163 11B9; +D10B;D10B;1110 1163 11BA;D10B;1110 1163 11BA; +D10C;D10C;1110 1163 11BB;D10C;1110 1163 11BB; +D10D;D10D;1110 1163 11BC;D10D;1110 1163 11BC; +D10E;D10E;1110 1163 11BD;D10E;1110 1163 11BD; +D10F;D10F;1110 1163 11BE;D10F;1110 1163 11BE; +D110;D110;1110 1163 11BF;D110;1110 1163 11BF; +D111;D111;1110 1163 11C0;D111;1110 1163 11C0; +D112;D112;1110 1163 11C1;D112;1110 1163 11C1; +D113;D113;1110 1163 11C2;D113;1110 1163 11C2; +D114;D114;1110 1164;D114;1110 1164; +D115;D115;1110 1164 11A8;D115;1110 1164 11A8; +D116;D116;1110 1164 11A9;D116;1110 1164 11A9; +D117;D117;1110 1164 11AA;D117;1110 1164 11AA; +D118;D118;1110 1164 11AB;D118;1110 1164 11AB; +D119;D119;1110 1164 11AC;D119;1110 1164 11AC; +D11A;D11A;1110 1164 11AD;D11A;1110 1164 11AD; +D11B;D11B;1110 1164 11AE;D11B;1110 1164 11AE; +D11C;D11C;1110 1164 11AF;D11C;1110 1164 11AF; +D11D;D11D;1110 1164 11B0;D11D;1110 1164 11B0; +D11E;D11E;1110 1164 11B1;D11E;1110 1164 11B1; +D11F;D11F;1110 1164 11B2;D11F;1110 1164 11B2; +D120;D120;1110 1164 11B3;D120;1110 1164 11B3; +D121;D121;1110 1164 11B4;D121;1110 1164 11B4; +D122;D122;1110 1164 11B5;D122;1110 1164 11B5; +D123;D123;1110 1164 11B6;D123;1110 1164 11B6; +D124;D124;1110 1164 11B7;D124;1110 1164 11B7; +D125;D125;1110 1164 11B8;D125;1110 1164 11B8; +D126;D126;1110 1164 11B9;D126;1110 1164 11B9; +D127;D127;1110 1164 11BA;D127;1110 1164 11BA; +D128;D128;1110 1164 11BB;D128;1110 1164 11BB; +D129;D129;1110 1164 11BC;D129;1110 1164 11BC; +D12A;D12A;1110 1164 11BD;D12A;1110 1164 11BD; +D12B;D12B;1110 1164 11BE;D12B;1110 1164 11BE; +D12C;D12C;1110 1164 11BF;D12C;1110 1164 11BF; +D12D;D12D;1110 1164 11C0;D12D;1110 1164 11C0; +D12E;D12E;1110 1164 11C1;D12E;1110 1164 11C1; +D12F;D12F;1110 1164 11C2;D12F;1110 1164 11C2; +D130;D130;1110 1165;D130;1110 1165; +D131;D131;1110 1165 11A8;D131;1110 1165 11A8; +D132;D132;1110 1165 11A9;D132;1110 1165 11A9; +D133;D133;1110 1165 11AA;D133;1110 1165 11AA; +D134;D134;1110 1165 11AB;D134;1110 1165 11AB; +D135;D135;1110 1165 11AC;D135;1110 1165 11AC; +D136;D136;1110 1165 11AD;D136;1110 1165 11AD; +D137;D137;1110 1165 11AE;D137;1110 1165 11AE; +D138;D138;1110 1165 11AF;D138;1110 1165 11AF; +D139;D139;1110 1165 11B0;D139;1110 1165 11B0; +D13A;D13A;1110 1165 11B1;D13A;1110 1165 11B1; +D13B;D13B;1110 1165 11B2;D13B;1110 1165 11B2; +D13C;D13C;1110 1165 11B3;D13C;1110 1165 11B3; +D13D;D13D;1110 1165 11B4;D13D;1110 1165 11B4; +D13E;D13E;1110 1165 11B5;D13E;1110 1165 11B5; +D13F;D13F;1110 1165 11B6;D13F;1110 1165 11B6; +D140;D140;1110 1165 11B7;D140;1110 1165 11B7; +D141;D141;1110 1165 11B8;D141;1110 1165 11B8; +D142;D142;1110 1165 11B9;D142;1110 1165 11B9; +D143;D143;1110 1165 11BA;D143;1110 1165 11BA; +D144;D144;1110 1165 11BB;D144;1110 1165 11BB; +D145;D145;1110 1165 11BC;D145;1110 1165 11BC; +D146;D146;1110 1165 11BD;D146;1110 1165 11BD; +D147;D147;1110 1165 11BE;D147;1110 1165 11BE; +D148;D148;1110 1165 11BF;D148;1110 1165 11BF; +D149;D149;1110 1165 11C0;D149;1110 1165 11C0; +D14A;D14A;1110 1165 11C1;D14A;1110 1165 11C1; +D14B;D14B;1110 1165 11C2;D14B;1110 1165 11C2; +D14C;D14C;1110 1166;D14C;1110 1166; +D14D;D14D;1110 1166 11A8;D14D;1110 1166 11A8; +D14E;D14E;1110 1166 11A9;D14E;1110 1166 11A9; +D14F;D14F;1110 1166 11AA;D14F;1110 1166 11AA; +D150;D150;1110 1166 11AB;D150;1110 1166 11AB; +D151;D151;1110 1166 11AC;D151;1110 1166 11AC; +D152;D152;1110 1166 11AD;D152;1110 1166 11AD; +D153;D153;1110 1166 11AE;D153;1110 1166 11AE; +D154;D154;1110 1166 11AF;D154;1110 1166 11AF; +D155;D155;1110 1166 11B0;D155;1110 1166 11B0; +D156;D156;1110 1166 11B1;D156;1110 1166 11B1; +D157;D157;1110 1166 11B2;D157;1110 1166 11B2; +D158;D158;1110 1166 11B3;D158;1110 1166 11B3; +D159;D159;1110 1166 11B4;D159;1110 1166 11B4; +D15A;D15A;1110 1166 11B5;D15A;1110 1166 11B5; +D15B;D15B;1110 1166 11B6;D15B;1110 1166 11B6; +D15C;D15C;1110 1166 11B7;D15C;1110 1166 11B7; +D15D;D15D;1110 1166 11B8;D15D;1110 1166 11B8; +D15E;D15E;1110 1166 11B9;D15E;1110 1166 11B9; +D15F;D15F;1110 1166 11BA;D15F;1110 1166 11BA; +D160;D160;1110 1166 11BB;D160;1110 1166 11BB; +D161;D161;1110 1166 11BC;D161;1110 1166 11BC; +D162;D162;1110 1166 11BD;D162;1110 1166 11BD; +D163;D163;1110 1166 11BE;D163;1110 1166 11BE; +D164;D164;1110 1166 11BF;D164;1110 1166 11BF; +D165;D165;1110 1166 11C0;D165;1110 1166 11C0; +D166;D166;1110 1166 11C1;D166;1110 1166 11C1; +D167;D167;1110 1166 11C2;D167;1110 1166 11C2; +D168;D168;1110 1167;D168;1110 1167; +D169;D169;1110 1167 11A8;D169;1110 1167 11A8; +D16A;D16A;1110 1167 11A9;D16A;1110 1167 11A9; +D16B;D16B;1110 1167 11AA;D16B;1110 1167 11AA; +D16C;D16C;1110 1167 11AB;D16C;1110 1167 11AB; +D16D;D16D;1110 1167 11AC;D16D;1110 1167 11AC; +D16E;D16E;1110 1167 11AD;D16E;1110 1167 11AD; +D16F;D16F;1110 1167 11AE;D16F;1110 1167 11AE; +D170;D170;1110 1167 11AF;D170;1110 1167 11AF; +D171;D171;1110 1167 11B0;D171;1110 1167 11B0; +D172;D172;1110 1167 11B1;D172;1110 1167 11B1; +D173;D173;1110 1167 11B2;D173;1110 1167 11B2; +D174;D174;1110 1167 11B3;D174;1110 1167 11B3; +D175;D175;1110 1167 11B4;D175;1110 1167 11B4; +D176;D176;1110 1167 11B5;D176;1110 1167 11B5; +D177;D177;1110 1167 11B6;D177;1110 1167 11B6; +D178;D178;1110 1167 11B7;D178;1110 1167 11B7; +D179;D179;1110 1167 11B8;D179;1110 1167 11B8; +D17A;D17A;1110 1167 11B9;D17A;1110 1167 11B9; +D17B;D17B;1110 1167 11BA;D17B;1110 1167 11BA; +D17C;D17C;1110 1167 11BB;D17C;1110 1167 11BB; +D17D;D17D;1110 1167 11BC;D17D;1110 1167 11BC; +D17E;D17E;1110 1167 11BD;D17E;1110 1167 11BD; +D17F;D17F;1110 1167 11BE;D17F;1110 1167 11BE; +D180;D180;1110 1167 11BF;D180;1110 1167 11BF; +D181;D181;1110 1167 11C0;D181;1110 1167 11C0; +D182;D182;1110 1167 11C1;D182;1110 1167 11C1; +D183;D183;1110 1167 11C2;D183;1110 1167 11C2; +D184;D184;1110 1168;D184;1110 1168; +D185;D185;1110 1168 11A8;D185;1110 1168 11A8; +D186;D186;1110 1168 11A9;D186;1110 1168 11A9; +D187;D187;1110 1168 11AA;D187;1110 1168 11AA; +D188;D188;1110 1168 11AB;D188;1110 1168 11AB; +D189;D189;1110 1168 11AC;D189;1110 1168 11AC; +D18A;D18A;1110 1168 11AD;D18A;1110 1168 11AD; +D18B;D18B;1110 1168 11AE;D18B;1110 1168 11AE; +D18C;D18C;1110 1168 11AF;D18C;1110 1168 11AF; +D18D;D18D;1110 1168 11B0;D18D;1110 1168 11B0; +D18E;D18E;1110 1168 11B1;D18E;1110 1168 11B1; +D18F;D18F;1110 1168 11B2;D18F;1110 1168 11B2; +D190;D190;1110 1168 11B3;D190;1110 1168 11B3; +D191;D191;1110 1168 11B4;D191;1110 1168 11B4; +D192;D192;1110 1168 11B5;D192;1110 1168 11B5; +D193;D193;1110 1168 11B6;D193;1110 1168 11B6; +D194;D194;1110 1168 11B7;D194;1110 1168 11B7; +D195;D195;1110 1168 11B8;D195;1110 1168 11B8; +D196;D196;1110 1168 11B9;D196;1110 1168 11B9; +D197;D197;1110 1168 11BA;D197;1110 1168 11BA; +D198;D198;1110 1168 11BB;D198;1110 1168 11BB; +D199;D199;1110 1168 11BC;D199;1110 1168 11BC; +D19A;D19A;1110 1168 11BD;D19A;1110 1168 11BD; +D19B;D19B;1110 1168 11BE;D19B;1110 1168 11BE; +D19C;D19C;1110 1168 11BF;D19C;1110 1168 11BF; +D19D;D19D;1110 1168 11C0;D19D;1110 1168 11C0; +D19E;D19E;1110 1168 11C1;D19E;1110 1168 11C1; +D19F;D19F;1110 1168 11C2;D19F;1110 1168 11C2; +D1A0;D1A0;1110 1169;D1A0;1110 1169; +D1A1;D1A1;1110 1169 11A8;D1A1;1110 1169 11A8; +D1A2;D1A2;1110 1169 11A9;D1A2;1110 1169 11A9; +D1A3;D1A3;1110 1169 11AA;D1A3;1110 1169 11AA; +D1A4;D1A4;1110 1169 11AB;D1A4;1110 1169 11AB; +D1A5;D1A5;1110 1169 11AC;D1A5;1110 1169 11AC; +D1A6;D1A6;1110 1169 11AD;D1A6;1110 1169 11AD; +D1A7;D1A7;1110 1169 11AE;D1A7;1110 1169 11AE; +D1A8;D1A8;1110 1169 11AF;D1A8;1110 1169 11AF; +D1A9;D1A9;1110 1169 11B0;D1A9;1110 1169 11B0; +D1AA;D1AA;1110 1169 11B1;D1AA;1110 1169 11B1; +D1AB;D1AB;1110 1169 11B2;D1AB;1110 1169 11B2; +D1AC;D1AC;1110 1169 11B3;D1AC;1110 1169 11B3; +D1AD;D1AD;1110 1169 11B4;D1AD;1110 1169 11B4; +D1AE;D1AE;1110 1169 11B5;D1AE;1110 1169 11B5; +D1AF;D1AF;1110 1169 11B6;D1AF;1110 1169 11B6; +D1B0;D1B0;1110 1169 11B7;D1B0;1110 1169 11B7; +D1B1;D1B1;1110 1169 11B8;D1B1;1110 1169 11B8; +D1B2;D1B2;1110 1169 11B9;D1B2;1110 1169 11B9; +D1B3;D1B3;1110 1169 11BA;D1B3;1110 1169 11BA; +D1B4;D1B4;1110 1169 11BB;D1B4;1110 1169 11BB; +D1B5;D1B5;1110 1169 11BC;D1B5;1110 1169 11BC; +D1B6;D1B6;1110 1169 11BD;D1B6;1110 1169 11BD; +D1B7;D1B7;1110 1169 11BE;D1B7;1110 1169 11BE; +D1B8;D1B8;1110 1169 11BF;D1B8;1110 1169 11BF; +D1B9;D1B9;1110 1169 11C0;D1B9;1110 1169 11C0; +D1BA;D1BA;1110 1169 11C1;D1BA;1110 1169 11C1; +D1BB;D1BB;1110 1169 11C2;D1BB;1110 1169 11C2; +D1BC;D1BC;1110 116A;D1BC;1110 116A; +D1BD;D1BD;1110 116A 11A8;D1BD;1110 116A 11A8; +D1BE;D1BE;1110 116A 11A9;D1BE;1110 116A 11A9; +D1BF;D1BF;1110 116A 11AA;D1BF;1110 116A 11AA; +D1C0;D1C0;1110 116A 11AB;D1C0;1110 116A 11AB; +D1C1;D1C1;1110 116A 11AC;D1C1;1110 116A 11AC; +D1C2;D1C2;1110 116A 11AD;D1C2;1110 116A 11AD; +D1C3;D1C3;1110 116A 11AE;D1C3;1110 116A 11AE; +D1C4;D1C4;1110 116A 11AF;D1C4;1110 116A 11AF; +D1C5;D1C5;1110 116A 11B0;D1C5;1110 116A 11B0; +D1C6;D1C6;1110 116A 11B1;D1C6;1110 116A 11B1; +D1C7;D1C7;1110 116A 11B2;D1C7;1110 116A 11B2; +D1C8;D1C8;1110 116A 11B3;D1C8;1110 116A 11B3; +D1C9;D1C9;1110 116A 11B4;D1C9;1110 116A 11B4; +D1CA;D1CA;1110 116A 11B5;D1CA;1110 116A 11B5; +D1CB;D1CB;1110 116A 11B6;D1CB;1110 116A 11B6; +D1CC;D1CC;1110 116A 11B7;D1CC;1110 116A 11B7; +D1CD;D1CD;1110 116A 11B8;D1CD;1110 116A 11B8; +D1CE;D1CE;1110 116A 11B9;D1CE;1110 116A 11B9; +D1CF;D1CF;1110 116A 11BA;D1CF;1110 116A 11BA; +D1D0;D1D0;1110 116A 11BB;D1D0;1110 116A 11BB; +D1D1;D1D1;1110 116A 11BC;D1D1;1110 116A 11BC; +D1D2;D1D2;1110 116A 11BD;D1D2;1110 116A 11BD; +D1D3;D1D3;1110 116A 11BE;D1D3;1110 116A 11BE; +D1D4;D1D4;1110 116A 11BF;D1D4;1110 116A 11BF; +D1D5;D1D5;1110 116A 11C0;D1D5;1110 116A 11C0; +D1D6;D1D6;1110 116A 11C1;D1D6;1110 116A 11C1; +D1D7;D1D7;1110 116A 11C2;D1D7;1110 116A 11C2; +D1D8;D1D8;1110 116B;D1D8;1110 116B; +D1D9;D1D9;1110 116B 11A8;D1D9;1110 116B 11A8; +D1DA;D1DA;1110 116B 11A9;D1DA;1110 116B 11A9; +D1DB;D1DB;1110 116B 11AA;D1DB;1110 116B 11AA; +D1DC;D1DC;1110 116B 11AB;D1DC;1110 116B 11AB; +D1DD;D1DD;1110 116B 11AC;D1DD;1110 116B 11AC; +D1DE;D1DE;1110 116B 11AD;D1DE;1110 116B 11AD; +D1DF;D1DF;1110 116B 11AE;D1DF;1110 116B 11AE; +D1E0;D1E0;1110 116B 11AF;D1E0;1110 116B 11AF; +D1E1;D1E1;1110 116B 11B0;D1E1;1110 116B 11B0; +D1E2;D1E2;1110 116B 11B1;D1E2;1110 116B 11B1; +D1E3;D1E3;1110 116B 11B2;D1E3;1110 116B 11B2; +D1E4;D1E4;1110 116B 11B3;D1E4;1110 116B 11B3; +D1E5;D1E5;1110 116B 11B4;D1E5;1110 116B 11B4; +D1E6;D1E6;1110 116B 11B5;D1E6;1110 116B 11B5; +D1E7;D1E7;1110 116B 11B6;D1E7;1110 116B 11B6; +D1E8;D1E8;1110 116B 11B7;D1E8;1110 116B 11B7; +D1E9;D1E9;1110 116B 11B8;D1E9;1110 116B 11B8; +D1EA;D1EA;1110 116B 11B9;D1EA;1110 116B 11B9; +D1EB;D1EB;1110 116B 11BA;D1EB;1110 116B 11BA; +D1EC;D1EC;1110 116B 11BB;D1EC;1110 116B 11BB; +D1ED;D1ED;1110 116B 11BC;D1ED;1110 116B 11BC; +D1EE;D1EE;1110 116B 11BD;D1EE;1110 116B 11BD; +D1EF;D1EF;1110 116B 11BE;D1EF;1110 116B 11BE; +D1F0;D1F0;1110 116B 11BF;D1F0;1110 116B 11BF; +D1F1;D1F1;1110 116B 11C0;D1F1;1110 116B 11C0; +D1F2;D1F2;1110 116B 11C1;D1F2;1110 116B 11C1; +D1F3;D1F3;1110 116B 11C2;D1F3;1110 116B 11C2; +D1F4;D1F4;1110 116C;D1F4;1110 116C; +D1F5;D1F5;1110 116C 11A8;D1F5;1110 116C 11A8; +D1F6;D1F6;1110 116C 11A9;D1F6;1110 116C 11A9; +D1F7;D1F7;1110 116C 11AA;D1F7;1110 116C 11AA; +D1F8;D1F8;1110 116C 11AB;D1F8;1110 116C 11AB; +D1F9;D1F9;1110 116C 11AC;D1F9;1110 116C 11AC; +D1FA;D1FA;1110 116C 11AD;D1FA;1110 116C 11AD; +D1FB;D1FB;1110 116C 11AE;D1FB;1110 116C 11AE; +D1FC;D1FC;1110 116C 11AF;D1FC;1110 116C 11AF; +D1FD;D1FD;1110 116C 11B0;D1FD;1110 116C 11B0; +D1FE;D1FE;1110 116C 11B1;D1FE;1110 116C 11B1; +D1FF;D1FF;1110 116C 11B2;D1FF;1110 116C 11B2; +D200;D200;1110 116C 11B3;D200;1110 116C 11B3; +D201;D201;1110 116C 11B4;D201;1110 116C 11B4; +D202;D202;1110 116C 11B5;D202;1110 116C 11B5; +D203;D203;1110 116C 11B6;D203;1110 116C 11B6; +D204;D204;1110 116C 11B7;D204;1110 116C 11B7; +D205;D205;1110 116C 11B8;D205;1110 116C 11B8; +D206;D206;1110 116C 11B9;D206;1110 116C 11B9; +D207;D207;1110 116C 11BA;D207;1110 116C 11BA; +D208;D208;1110 116C 11BB;D208;1110 116C 11BB; +D209;D209;1110 116C 11BC;D209;1110 116C 11BC; +D20A;D20A;1110 116C 11BD;D20A;1110 116C 11BD; +D20B;D20B;1110 116C 11BE;D20B;1110 116C 11BE; +D20C;D20C;1110 116C 11BF;D20C;1110 116C 11BF; +D20D;D20D;1110 116C 11C0;D20D;1110 116C 11C0; +D20E;D20E;1110 116C 11C1;D20E;1110 116C 11C1; +D20F;D20F;1110 116C 11C2;D20F;1110 116C 11C2; +D210;D210;1110 116D;D210;1110 116D; +D211;D211;1110 116D 11A8;D211;1110 116D 11A8; +D212;D212;1110 116D 11A9;D212;1110 116D 11A9; +D213;D213;1110 116D 11AA;D213;1110 116D 11AA; +D214;D214;1110 116D 11AB;D214;1110 116D 11AB; +D215;D215;1110 116D 11AC;D215;1110 116D 11AC; +D216;D216;1110 116D 11AD;D216;1110 116D 11AD; +D217;D217;1110 116D 11AE;D217;1110 116D 11AE; +D218;D218;1110 116D 11AF;D218;1110 116D 11AF; +D219;D219;1110 116D 11B0;D219;1110 116D 11B0; +D21A;D21A;1110 116D 11B1;D21A;1110 116D 11B1; +D21B;D21B;1110 116D 11B2;D21B;1110 116D 11B2; +D21C;D21C;1110 116D 11B3;D21C;1110 116D 11B3; +D21D;D21D;1110 116D 11B4;D21D;1110 116D 11B4; +D21E;D21E;1110 116D 11B5;D21E;1110 116D 11B5; +D21F;D21F;1110 116D 11B6;D21F;1110 116D 11B6; +D220;D220;1110 116D 11B7;D220;1110 116D 11B7; +D221;D221;1110 116D 11B8;D221;1110 116D 11B8; +D222;D222;1110 116D 11B9;D222;1110 116D 11B9; +D223;D223;1110 116D 11BA;D223;1110 116D 11BA; +D224;D224;1110 116D 11BB;D224;1110 116D 11BB; +D225;D225;1110 116D 11BC;D225;1110 116D 11BC; +D226;D226;1110 116D 11BD;D226;1110 116D 11BD; +D227;D227;1110 116D 11BE;D227;1110 116D 11BE; +D228;D228;1110 116D 11BF;D228;1110 116D 11BF; +D229;D229;1110 116D 11C0;D229;1110 116D 11C0; +D22A;D22A;1110 116D 11C1;D22A;1110 116D 11C1; +D22B;D22B;1110 116D 11C2;D22B;1110 116D 11C2; +D22C;D22C;1110 116E;D22C;1110 116E; +D22D;D22D;1110 116E 11A8;D22D;1110 116E 11A8; +D22E;D22E;1110 116E 11A9;D22E;1110 116E 11A9; +D22F;D22F;1110 116E 11AA;D22F;1110 116E 11AA; +D230;D230;1110 116E 11AB;D230;1110 116E 11AB; +D231;D231;1110 116E 11AC;D231;1110 116E 11AC; +D232;D232;1110 116E 11AD;D232;1110 116E 11AD; +D233;D233;1110 116E 11AE;D233;1110 116E 11AE; +D234;D234;1110 116E 11AF;D234;1110 116E 11AF; +D235;D235;1110 116E 11B0;D235;1110 116E 11B0; +D236;D236;1110 116E 11B1;D236;1110 116E 11B1; +D237;D237;1110 116E 11B2;D237;1110 116E 11B2; +D238;D238;1110 116E 11B3;D238;1110 116E 11B3; +D239;D239;1110 116E 11B4;D239;1110 116E 11B4; +D23A;D23A;1110 116E 11B5;D23A;1110 116E 11B5; +D23B;D23B;1110 116E 11B6;D23B;1110 116E 11B6; +D23C;D23C;1110 116E 11B7;D23C;1110 116E 11B7; +D23D;D23D;1110 116E 11B8;D23D;1110 116E 11B8; +D23E;D23E;1110 116E 11B9;D23E;1110 116E 11B9; +D23F;D23F;1110 116E 11BA;D23F;1110 116E 11BA; +D240;D240;1110 116E 11BB;D240;1110 116E 11BB; +D241;D241;1110 116E 11BC;D241;1110 116E 11BC; +D242;D242;1110 116E 11BD;D242;1110 116E 11BD; +D243;D243;1110 116E 11BE;D243;1110 116E 11BE; +D244;D244;1110 116E 11BF;D244;1110 116E 11BF; +D245;D245;1110 116E 11C0;D245;1110 116E 11C0; +D246;D246;1110 116E 11C1;D246;1110 116E 11C1; +D247;D247;1110 116E 11C2;D247;1110 116E 11C2; +D248;D248;1110 116F;D248;1110 116F; +D249;D249;1110 116F 11A8;D249;1110 116F 11A8; +D24A;D24A;1110 116F 11A9;D24A;1110 116F 11A9; +D24B;D24B;1110 116F 11AA;D24B;1110 116F 11AA; +D24C;D24C;1110 116F 11AB;D24C;1110 116F 11AB; +D24D;D24D;1110 116F 11AC;D24D;1110 116F 11AC; +D24E;D24E;1110 116F 11AD;D24E;1110 116F 11AD; +D24F;D24F;1110 116F 11AE;D24F;1110 116F 11AE; +D250;D250;1110 116F 11AF;D250;1110 116F 11AF; +D251;D251;1110 116F 11B0;D251;1110 116F 11B0; +D252;D252;1110 116F 11B1;D252;1110 116F 11B1; +D253;D253;1110 116F 11B2;D253;1110 116F 11B2; +D254;D254;1110 116F 11B3;D254;1110 116F 11B3; +D255;D255;1110 116F 11B4;D255;1110 116F 11B4; +D256;D256;1110 116F 11B5;D256;1110 116F 11B5; +D257;D257;1110 116F 11B6;D257;1110 116F 11B6; +D258;D258;1110 116F 11B7;D258;1110 116F 11B7; +D259;D259;1110 116F 11B8;D259;1110 116F 11B8; +D25A;D25A;1110 116F 11B9;D25A;1110 116F 11B9; +D25B;D25B;1110 116F 11BA;D25B;1110 116F 11BA; +D25C;D25C;1110 116F 11BB;D25C;1110 116F 11BB; +D25D;D25D;1110 116F 11BC;D25D;1110 116F 11BC; +D25E;D25E;1110 116F 11BD;D25E;1110 116F 11BD; +D25F;D25F;1110 116F 11BE;D25F;1110 116F 11BE; +D260;D260;1110 116F 11BF;D260;1110 116F 11BF; +D261;D261;1110 116F 11C0;D261;1110 116F 11C0; +D262;D262;1110 116F 11C1;D262;1110 116F 11C1; +D263;D263;1110 116F 11C2;D263;1110 116F 11C2; +D264;D264;1110 1170;D264;1110 1170; +D265;D265;1110 1170 11A8;D265;1110 1170 11A8; +D266;D266;1110 1170 11A9;D266;1110 1170 11A9; +D267;D267;1110 1170 11AA;D267;1110 1170 11AA; +D268;D268;1110 1170 11AB;D268;1110 1170 11AB; +D269;D269;1110 1170 11AC;D269;1110 1170 11AC; +D26A;D26A;1110 1170 11AD;D26A;1110 1170 11AD; +D26B;D26B;1110 1170 11AE;D26B;1110 1170 11AE; +D26C;D26C;1110 1170 11AF;D26C;1110 1170 11AF; +D26D;D26D;1110 1170 11B0;D26D;1110 1170 11B0; +D26E;D26E;1110 1170 11B1;D26E;1110 1170 11B1; +D26F;D26F;1110 1170 11B2;D26F;1110 1170 11B2; +D270;D270;1110 1170 11B3;D270;1110 1170 11B3; +D271;D271;1110 1170 11B4;D271;1110 1170 11B4; +D272;D272;1110 1170 11B5;D272;1110 1170 11B5; +D273;D273;1110 1170 11B6;D273;1110 1170 11B6; +D274;D274;1110 1170 11B7;D274;1110 1170 11B7; +D275;D275;1110 1170 11B8;D275;1110 1170 11B8; +D276;D276;1110 1170 11B9;D276;1110 1170 11B9; +D277;D277;1110 1170 11BA;D277;1110 1170 11BA; +D278;D278;1110 1170 11BB;D278;1110 1170 11BB; +D279;D279;1110 1170 11BC;D279;1110 1170 11BC; +D27A;D27A;1110 1170 11BD;D27A;1110 1170 11BD; +D27B;D27B;1110 1170 11BE;D27B;1110 1170 11BE; +D27C;D27C;1110 1170 11BF;D27C;1110 1170 11BF; +D27D;D27D;1110 1170 11C0;D27D;1110 1170 11C0; +D27E;D27E;1110 1170 11C1;D27E;1110 1170 11C1; +D27F;D27F;1110 1170 11C2;D27F;1110 1170 11C2; +D280;D280;1110 1171;D280;1110 1171; +D281;D281;1110 1171 11A8;D281;1110 1171 11A8; +D282;D282;1110 1171 11A9;D282;1110 1171 11A9; +D283;D283;1110 1171 11AA;D283;1110 1171 11AA; +D284;D284;1110 1171 11AB;D284;1110 1171 11AB; +D285;D285;1110 1171 11AC;D285;1110 1171 11AC; +D286;D286;1110 1171 11AD;D286;1110 1171 11AD; +D287;D287;1110 1171 11AE;D287;1110 1171 11AE; +D288;D288;1110 1171 11AF;D288;1110 1171 11AF; +D289;D289;1110 1171 11B0;D289;1110 1171 11B0; +D28A;D28A;1110 1171 11B1;D28A;1110 1171 11B1; +D28B;D28B;1110 1171 11B2;D28B;1110 1171 11B2; +D28C;D28C;1110 1171 11B3;D28C;1110 1171 11B3; +D28D;D28D;1110 1171 11B4;D28D;1110 1171 11B4; +D28E;D28E;1110 1171 11B5;D28E;1110 1171 11B5; +D28F;D28F;1110 1171 11B6;D28F;1110 1171 11B6; +D290;D290;1110 1171 11B7;D290;1110 1171 11B7; +D291;D291;1110 1171 11B8;D291;1110 1171 11B8; +D292;D292;1110 1171 11B9;D292;1110 1171 11B9; +D293;D293;1110 1171 11BA;D293;1110 1171 11BA; +D294;D294;1110 1171 11BB;D294;1110 1171 11BB; +D295;D295;1110 1171 11BC;D295;1110 1171 11BC; +D296;D296;1110 1171 11BD;D296;1110 1171 11BD; +D297;D297;1110 1171 11BE;D297;1110 1171 11BE; +D298;D298;1110 1171 11BF;D298;1110 1171 11BF; +D299;D299;1110 1171 11C0;D299;1110 1171 11C0; +D29A;D29A;1110 1171 11C1;D29A;1110 1171 11C1; +D29B;D29B;1110 1171 11C2;D29B;1110 1171 11C2; +D29C;D29C;1110 1172;D29C;1110 1172; +D29D;D29D;1110 1172 11A8;D29D;1110 1172 11A8; +D29E;D29E;1110 1172 11A9;D29E;1110 1172 11A9; +D29F;D29F;1110 1172 11AA;D29F;1110 1172 11AA; +D2A0;D2A0;1110 1172 11AB;D2A0;1110 1172 11AB; +D2A1;D2A1;1110 1172 11AC;D2A1;1110 1172 11AC; +D2A2;D2A2;1110 1172 11AD;D2A2;1110 1172 11AD; +D2A3;D2A3;1110 1172 11AE;D2A3;1110 1172 11AE; +D2A4;D2A4;1110 1172 11AF;D2A4;1110 1172 11AF; +D2A5;D2A5;1110 1172 11B0;D2A5;1110 1172 11B0; +D2A6;D2A6;1110 1172 11B1;D2A6;1110 1172 11B1; +D2A7;D2A7;1110 1172 11B2;D2A7;1110 1172 11B2; +D2A8;D2A8;1110 1172 11B3;D2A8;1110 1172 11B3; +D2A9;D2A9;1110 1172 11B4;D2A9;1110 1172 11B4; +D2AA;D2AA;1110 1172 11B5;D2AA;1110 1172 11B5; +D2AB;D2AB;1110 1172 11B6;D2AB;1110 1172 11B6; +D2AC;D2AC;1110 1172 11B7;D2AC;1110 1172 11B7; +D2AD;D2AD;1110 1172 11B8;D2AD;1110 1172 11B8; +D2AE;D2AE;1110 1172 11B9;D2AE;1110 1172 11B9; +D2AF;D2AF;1110 1172 11BA;D2AF;1110 1172 11BA; +D2B0;D2B0;1110 1172 11BB;D2B0;1110 1172 11BB; +D2B1;D2B1;1110 1172 11BC;D2B1;1110 1172 11BC; +D2B2;D2B2;1110 1172 11BD;D2B2;1110 1172 11BD; +D2B3;D2B3;1110 1172 11BE;D2B3;1110 1172 11BE; +D2B4;D2B4;1110 1172 11BF;D2B4;1110 1172 11BF; +D2B5;D2B5;1110 1172 11C0;D2B5;1110 1172 11C0; +D2B6;D2B6;1110 1172 11C1;D2B6;1110 1172 11C1; +D2B7;D2B7;1110 1172 11C2;D2B7;1110 1172 11C2; +D2B8;D2B8;1110 1173;D2B8;1110 1173; +D2B9;D2B9;1110 1173 11A8;D2B9;1110 1173 11A8; +D2BA;D2BA;1110 1173 11A9;D2BA;1110 1173 11A9; +D2BB;D2BB;1110 1173 11AA;D2BB;1110 1173 11AA; +D2BC;D2BC;1110 1173 11AB;D2BC;1110 1173 11AB; +D2BD;D2BD;1110 1173 11AC;D2BD;1110 1173 11AC; +D2BE;D2BE;1110 1173 11AD;D2BE;1110 1173 11AD; +D2BF;D2BF;1110 1173 11AE;D2BF;1110 1173 11AE; +D2C0;D2C0;1110 1173 11AF;D2C0;1110 1173 11AF; +D2C1;D2C1;1110 1173 11B0;D2C1;1110 1173 11B0; +D2C2;D2C2;1110 1173 11B1;D2C2;1110 1173 11B1; +D2C3;D2C3;1110 1173 11B2;D2C3;1110 1173 11B2; +D2C4;D2C4;1110 1173 11B3;D2C4;1110 1173 11B3; +D2C5;D2C5;1110 1173 11B4;D2C5;1110 1173 11B4; +D2C6;D2C6;1110 1173 11B5;D2C6;1110 1173 11B5; +D2C7;D2C7;1110 1173 11B6;D2C7;1110 1173 11B6; +D2C8;D2C8;1110 1173 11B7;D2C8;1110 1173 11B7; +D2C9;D2C9;1110 1173 11B8;D2C9;1110 1173 11B8; +D2CA;D2CA;1110 1173 11B9;D2CA;1110 1173 11B9; +D2CB;D2CB;1110 1173 11BA;D2CB;1110 1173 11BA; +D2CC;D2CC;1110 1173 11BB;D2CC;1110 1173 11BB; +D2CD;D2CD;1110 1173 11BC;D2CD;1110 1173 11BC; +D2CE;D2CE;1110 1173 11BD;D2CE;1110 1173 11BD; +D2CF;D2CF;1110 1173 11BE;D2CF;1110 1173 11BE; +D2D0;D2D0;1110 1173 11BF;D2D0;1110 1173 11BF; +D2D1;D2D1;1110 1173 11C0;D2D1;1110 1173 11C0; +D2D2;D2D2;1110 1173 11C1;D2D2;1110 1173 11C1; +D2D3;D2D3;1110 1173 11C2;D2D3;1110 1173 11C2; +D2D4;D2D4;1110 1174;D2D4;1110 1174; +D2D5;D2D5;1110 1174 11A8;D2D5;1110 1174 11A8; +D2D6;D2D6;1110 1174 11A9;D2D6;1110 1174 11A9; +D2D7;D2D7;1110 1174 11AA;D2D7;1110 1174 11AA; +D2D8;D2D8;1110 1174 11AB;D2D8;1110 1174 11AB; +D2D9;D2D9;1110 1174 11AC;D2D9;1110 1174 11AC; +D2DA;D2DA;1110 1174 11AD;D2DA;1110 1174 11AD; +D2DB;D2DB;1110 1174 11AE;D2DB;1110 1174 11AE; +D2DC;D2DC;1110 1174 11AF;D2DC;1110 1174 11AF; +D2DD;D2DD;1110 1174 11B0;D2DD;1110 1174 11B0; +D2DE;D2DE;1110 1174 11B1;D2DE;1110 1174 11B1; +D2DF;D2DF;1110 1174 11B2;D2DF;1110 1174 11B2; +D2E0;D2E0;1110 1174 11B3;D2E0;1110 1174 11B3; +D2E1;D2E1;1110 1174 11B4;D2E1;1110 1174 11B4; +D2E2;D2E2;1110 1174 11B5;D2E2;1110 1174 11B5; +D2E3;D2E3;1110 1174 11B6;D2E3;1110 1174 11B6; +D2E4;D2E4;1110 1174 11B7;D2E4;1110 1174 11B7; +D2E5;D2E5;1110 1174 11B8;D2E5;1110 1174 11B8; +D2E6;D2E6;1110 1174 11B9;D2E6;1110 1174 11B9; +D2E7;D2E7;1110 1174 11BA;D2E7;1110 1174 11BA; +D2E8;D2E8;1110 1174 11BB;D2E8;1110 1174 11BB; +D2E9;D2E9;1110 1174 11BC;D2E9;1110 1174 11BC; +D2EA;D2EA;1110 1174 11BD;D2EA;1110 1174 11BD; +D2EB;D2EB;1110 1174 11BE;D2EB;1110 1174 11BE; +D2EC;D2EC;1110 1174 11BF;D2EC;1110 1174 11BF; +D2ED;D2ED;1110 1174 11C0;D2ED;1110 1174 11C0; +D2EE;D2EE;1110 1174 11C1;D2EE;1110 1174 11C1; +D2EF;D2EF;1110 1174 11C2;D2EF;1110 1174 11C2; +D2F0;D2F0;1110 1175;D2F0;1110 1175; +D2F1;D2F1;1110 1175 11A8;D2F1;1110 1175 11A8; +D2F2;D2F2;1110 1175 11A9;D2F2;1110 1175 11A9; +D2F3;D2F3;1110 1175 11AA;D2F3;1110 1175 11AA; +D2F4;D2F4;1110 1175 11AB;D2F4;1110 1175 11AB; +D2F5;D2F5;1110 1175 11AC;D2F5;1110 1175 11AC; +D2F6;D2F6;1110 1175 11AD;D2F6;1110 1175 11AD; +D2F7;D2F7;1110 1175 11AE;D2F7;1110 1175 11AE; +D2F8;D2F8;1110 1175 11AF;D2F8;1110 1175 11AF; +D2F9;D2F9;1110 1175 11B0;D2F9;1110 1175 11B0; +D2FA;D2FA;1110 1175 11B1;D2FA;1110 1175 11B1; +D2FB;D2FB;1110 1175 11B2;D2FB;1110 1175 11B2; +D2FC;D2FC;1110 1175 11B3;D2FC;1110 1175 11B3; +D2FD;D2FD;1110 1175 11B4;D2FD;1110 1175 11B4; +D2FE;D2FE;1110 1175 11B5;D2FE;1110 1175 11B5; +D2FF;D2FF;1110 1175 11B6;D2FF;1110 1175 11B6; +D300;D300;1110 1175 11B7;D300;1110 1175 11B7; +D301;D301;1110 1175 11B8;D301;1110 1175 11B8; +D302;D302;1110 1175 11B9;D302;1110 1175 11B9; +D303;D303;1110 1175 11BA;D303;1110 1175 11BA; +D304;D304;1110 1175 11BB;D304;1110 1175 11BB; +D305;D305;1110 1175 11BC;D305;1110 1175 11BC; +D306;D306;1110 1175 11BD;D306;1110 1175 11BD; +D307;D307;1110 1175 11BE;D307;1110 1175 11BE; +D308;D308;1110 1175 11BF;D308;1110 1175 11BF; +D309;D309;1110 1175 11C0;D309;1110 1175 11C0; +D30A;D30A;1110 1175 11C1;D30A;1110 1175 11C1; +D30B;D30B;1110 1175 11C2;D30B;1110 1175 11C2; +D30C;D30C;1111 1161;D30C;1111 1161; +D30D;D30D;1111 1161 11A8;D30D;1111 1161 11A8; +D30E;D30E;1111 1161 11A9;D30E;1111 1161 11A9; +D30F;D30F;1111 1161 11AA;D30F;1111 1161 11AA; +D310;D310;1111 1161 11AB;D310;1111 1161 11AB; +D311;D311;1111 1161 11AC;D311;1111 1161 11AC; +D312;D312;1111 1161 11AD;D312;1111 1161 11AD; +D313;D313;1111 1161 11AE;D313;1111 1161 11AE; +D314;D314;1111 1161 11AF;D314;1111 1161 11AF; +D315;D315;1111 1161 11B0;D315;1111 1161 11B0; +D316;D316;1111 1161 11B1;D316;1111 1161 11B1; +D317;D317;1111 1161 11B2;D317;1111 1161 11B2; +D318;D318;1111 1161 11B3;D318;1111 1161 11B3; +D319;D319;1111 1161 11B4;D319;1111 1161 11B4; +D31A;D31A;1111 1161 11B5;D31A;1111 1161 11B5; +D31B;D31B;1111 1161 11B6;D31B;1111 1161 11B6; +D31C;D31C;1111 1161 11B7;D31C;1111 1161 11B7; +D31D;D31D;1111 1161 11B8;D31D;1111 1161 11B8; +D31E;D31E;1111 1161 11B9;D31E;1111 1161 11B9; +D31F;D31F;1111 1161 11BA;D31F;1111 1161 11BA; +D320;D320;1111 1161 11BB;D320;1111 1161 11BB; +D321;D321;1111 1161 11BC;D321;1111 1161 11BC; +D322;D322;1111 1161 11BD;D322;1111 1161 11BD; +D323;D323;1111 1161 11BE;D323;1111 1161 11BE; +D324;D324;1111 1161 11BF;D324;1111 1161 11BF; +D325;D325;1111 1161 11C0;D325;1111 1161 11C0; +D326;D326;1111 1161 11C1;D326;1111 1161 11C1; +D327;D327;1111 1161 11C2;D327;1111 1161 11C2; +D328;D328;1111 1162;D328;1111 1162; +D329;D329;1111 1162 11A8;D329;1111 1162 11A8; +D32A;D32A;1111 1162 11A9;D32A;1111 1162 11A9; +D32B;D32B;1111 1162 11AA;D32B;1111 1162 11AA; +D32C;D32C;1111 1162 11AB;D32C;1111 1162 11AB; +D32D;D32D;1111 1162 11AC;D32D;1111 1162 11AC; +D32E;D32E;1111 1162 11AD;D32E;1111 1162 11AD; +D32F;D32F;1111 1162 11AE;D32F;1111 1162 11AE; +D330;D330;1111 1162 11AF;D330;1111 1162 11AF; +D331;D331;1111 1162 11B0;D331;1111 1162 11B0; +D332;D332;1111 1162 11B1;D332;1111 1162 11B1; +D333;D333;1111 1162 11B2;D333;1111 1162 11B2; +D334;D334;1111 1162 11B3;D334;1111 1162 11B3; +D335;D335;1111 1162 11B4;D335;1111 1162 11B4; +D336;D336;1111 1162 11B5;D336;1111 1162 11B5; +D337;D337;1111 1162 11B6;D337;1111 1162 11B6; +D338;D338;1111 1162 11B7;D338;1111 1162 11B7; +D339;D339;1111 1162 11B8;D339;1111 1162 11B8; +D33A;D33A;1111 1162 11B9;D33A;1111 1162 11B9; +D33B;D33B;1111 1162 11BA;D33B;1111 1162 11BA; +D33C;D33C;1111 1162 11BB;D33C;1111 1162 11BB; +D33D;D33D;1111 1162 11BC;D33D;1111 1162 11BC; +D33E;D33E;1111 1162 11BD;D33E;1111 1162 11BD; +D33F;D33F;1111 1162 11BE;D33F;1111 1162 11BE; +D340;D340;1111 1162 11BF;D340;1111 1162 11BF; +D341;D341;1111 1162 11C0;D341;1111 1162 11C0; +D342;D342;1111 1162 11C1;D342;1111 1162 11C1; +D343;D343;1111 1162 11C2;D343;1111 1162 11C2; +D344;D344;1111 1163;D344;1111 1163; +D345;D345;1111 1163 11A8;D345;1111 1163 11A8; +D346;D346;1111 1163 11A9;D346;1111 1163 11A9; +D347;D347;1111 1163 11AA;D347;1111 1163 11AA; +D348;D348;1111 1163 11AB;D348;1111 1163 11AB; +D349;D349;1111 1163 11AC;D349;1111 1163 11AC; +D34A;D34A;1111 1163 11AD;D34A;1111 1163 11AD; +D34B;D34B;1111 1163 11AE;D34B;1111 1163 11AE; +D34C;D34C;1111 1163 11AF;D34C;1111 1163 11AF; +D34D;D34D;1111 1163 11B0;D34D;1111 1163 11B0; +D34E;D34E;1111 1163 11B1;D34E;1111 1163 11B1; +D34F;D34F;1111 1163 11B2;D34F;1111 1163 11B2; +D350;D350;1111 1163 11B3;D350;1111 1163 11B3; +D351;D351;1111 1163 11B4;D351;1111 1163 11B4; +D352;D352;1111 1163 11B5;D352;1111 1163 11B5; +D353;D353;1111 1163 11B6;D353;1111 1163 11B6; +D354;D354;1111 1163 11B7;D354;1111 1163 11B7; +D355;D355;1111 1163 11B8;D355;1111 1163 11B8; +D356;D356;1111 1163 11B9;D356;1111 1163 11B9; +D357;D357;1111 1163 11BA;D357;1111 1163 11BA; +D358;D358;1111 1163 11BB;D358;1111 1163 11BB; +D359;D359;1111 1163 11BC;D359;1111 1163 11BC; +D35A;D35A;1111 1163 11BD;D35A;1111 1163 11BD; +D35B;D35B;1111 1163 11BE;D35B;1111 1163 11BE; +D35C;D35C;1111 1163 11BF;D35C;1111 1163 11BF; +D35D;D35D;1111 1163 11C0;D35D;1111 1163 11C0; +D35E;D35E;1111 1163 11C1;D35E;1111 1163 11C1; +D35F;D35F;1111 1163 11C2;D35F;1111 1163 11C2; +D360;D360;1111 1164;D360;1111 1164; +D361;D361;1111 1164 11A8;D361;1111 1164 11A8; +D362;D362;1111 1164 11A9;D362;1111 1164 11A9; +D363;D363;1111 1164 11AA;D363;1111 1164 11AA; +D364;D364;1111 1164 11AB;D364;1111 1164 11AB; +D365;D365;1111 1164 11AC;D365;1111 1164 11AC; +D366;D366;1111 1164 11AD;D366;1111 1164 11AD; +D367;D367;1111 1164 11AE;D367;1111 1164 11AE; +D368;D368;1111 1164 11AF;D368;1111 1164 11AF; +D369;D369;1111 1164 11B0;D369;1111 1164 11B0; +D36A;D36A;1111 1164 11B1;D36A;1111 1164 11B1; +D36B;D36B;1111 1164 11B2;D36B;1111 1164 11B2; +D36C;D36C;1111 1164 11B3;D36C;1111 1164 11B3; +D36D;D36D;1111 1164 11B4;D36D;1111 1164 11B4; +D36E;D36E;1111 1164 11B5;D36E;1111 1164 11B5; +D36F;D36F;1111 1164 11B6;D36F;1111 1164 11B6; +D370;D370;1111 1164 11B7;D370;1111 1164 11B7; +D371;D371;1111 1164 11B8;D371;1111 1164 11B8; +D372;D372;1111 1164 11B9;D372;1111 1164 11B9; +D373;D373;1111 1164 11BA;D373;1111 1164 11BA; +D374;D374;1111 1164 11BB;D374;1111 1164 11BB; +D375;D375;1111 1164 11BC;D375;1111 1164 11BC; +D376;D376;1111 1164 11BD;D376;1111 1164 11BD; +D377;D377;1111 1164 11BE;D377;1111 1164 11BE; +D378;D378;1111 1164 11BF;D378;1111 1164 11BF; +D379;D379;1111 1164 11C0;D379;1111 1164 11C0; +D37A;D37A;1111 1164 11C1;D37A;1111 1164 11C1; +D37B;D37B;1111 1164 11C2;D37B;1111 1164 11C2; +D37C;D37C;1111 1165;D37C;1111 1165; +D37D;D37D;1111 1165 11A8;D37D;1111 1165 11A8; +D37E;D37E;1111 1165 11A9;D37E;1111 1165 11A9; +D37F;D37F;1111 1165 11AA;D37F;1111 1165 11AA; +D380;D380;1111 1165 11AB;D380;1111 1165 11AB; +D381;D381;1111 1165 11AC;D381;1111 1165 11AC; +D382;D382;1111 1165 11AD;D382;1111 1165 11AD; +D383;D383;1111 1165 11AE;D383;1111 1165 11AE; +D384;D384;1111 1165 11AF;D384;1111 1165 11AF; +D385;D385;1111 1165 11B0;D385;1111 1165 11B0; +D386;D386;1111 1165 11B1;D386;1111 1165 11B1; +D387;D387;1111 1165 11B2;D387;1111 1165 11B2; +D388;D388;1111 1165 11B3;D388;1111 1165 11B3; +D389;D389;1111 1165 11B4;D389;1111 1165 11B4; +D38A;D38A;1111 1165 11B5;D38A;1111 1165 11B5; +D38B;D38B;1111 1165 11B6;D38B;1111 1165 11B6; +D38C;D38C;1111 1165 11B7;D38C;1111 1165 11B7; +D38D;D38D;1111 1165 11B8;D38D;1111 1165 11B8; +D38E;D38E;1111 1165 11B9;D38E;1111 1165 11B9; +D38F;D38F;1111 1165 11BA;D38F;1111 1165 11BA; +D390;D390;1111 1165 11BB;D390;1111 1165 11BB; +D391;D391;1111 1165 11BC;D391;1111 1165 11BC; +D392;D392;1111 1165 11BD;D392;1111 1165 11BD; +D393;D393;1111 1165 11BE;D393;1111 1165 11BE; +D394;D394;1111 1165 11BF;D394;1111 1165 11BF; +D395;D395;1111 1165 11C0;D395;1111 1165 11C0; +D396;D396;1111 1165 11C1;D396;1111 1165 11C1; +D397;D397;1111 1165 11C2;D397;1111 1165 11C2; +D398;D398;1111 1166;D398;1111 1166; +D399;D399;1111 1166 11A8;D399;1111 1166 11A8; +D39A;D39A;1111 1166 11A9;D39A;1111 1166 11A9; +D39B;D39B;1111 1166 11AA;D39B;1111 1166 11AA; +D39C;D39C;1111 1166 11AB;D39C;1111 1166 11AB; +D39D;D39D;1111 1166 11AC;D39D;1111 1166 11AC; +D39E;D39E;1111 1166 11AD;D39E;1111 1166 11AD; +D39F;D39F;1111 1166 11AE;D39F;1111 1166 11AE; +D3A0;D3A0;1111 1166 11AF;D3A0;1111 1166 11AF; +D3A1;D3A1;1111 1166 11B0;D3A1;1111 1166 11B0; +D3A2;D3A2;1111 1166 11B1;D3A2;1111 1166 11B1; +D3A3;D3A3;1111 1166 11B2;D3A3;1111 1166 11B2; +D3A4;D3A4;1111 1166 11B3;D3A4;1111 1166 11B3; +D3A5;D3A5;1111 1166 11B4;D3A5;1111 1166 11B4; +D3A6;D3A6;1111 1166 11B5;D3A6;1111 1166 11B5; +D3A7;D3A7;1111 1166 11B6;D3A7;1111 1166 11B6; +D3A8;D3A8;1111 1166 11B7;D3A8;1111 1166 11B7; +D3A9;D3A9;1111 1166 11B8;D3A9;1111 1166 11B8; +D3AA;D3AA;1111 1166 11B9;D3AA;1111 1166 11B9; +D3AB;D3AB;1111 1166 11BA;D3AB;1111 1166 11BA; +D3AC;D3AC;1111 1166 11BB;D3AC;1111 1166 11BB; +D3AD;D3AD;1111 1166 11BC;D3AD;1111 1166 11BC; +D3AE;D3AE;1111 1166 11BD;D3AE;1111 1166 11BD; +D3AF;D3AF;1111 1166 11BE;D3AF;1111 1166 11BE; +D3B0;D3B0;1111 1166 11BF;D3B0;1111 1166 11BF; +D3B1;D3B1;1111 1166 11C0;D3B1;1111 1166 11C0; +D3B2;D3B2;1111 1166 11C1;D3B2;1111 1166 11C1; +D3B3;D3B3;1111 1166 11C2;D3B3;1111 1166 11C2; +D3B4;D3B4;1111 1167;D3B4;1111 1167; +D3B5;D3B5;1111 1167 11A8;D3B5;1111 1167 11A8; +D3B6;D3B6;1111 1167 11A9;D3B6;1111 1167 11A9; +D3B7;D3B7;1111 1167 11AA;D3B7;1111 1167 11AA; +D3B8;D3B8;1111 1167 11AB;D3B8;1111 1167 11AB; +D3B9;D3B9;1111 1167 11AC;D3B9;1111 1167 11AC; +D3BA;D3BA;1111 1167 11AD;D3BA;1111 1167 11AD; +D3BB;D3BB;1111 1167 11AE;D3BB;1111 1167 11AE; +D3BC;D3BC;1111 1167 11AF;D3BC;1111 1167 11AF; +D3BD;D3BD;1111 1167 11B0;D3BD;1111 1167 11B0; +D3BE;D3BE;1111 1167 11B1;D3BE;1111 1167 11B1; +D3BF;D3BF;1111 1167 11B2;D3BF;1111 1167 11B2; +D3C0;D3C0;1111 1167 11B3;D3C0;1111 1167 11B3; +D3C1;D3C1;1111 1167 11B4;D3C1;1111 1167 11B4; +D3C2;D3C2;1111 1167 11B5;D3C2;1111 1167 11B5; +D3C3;D3C3;1111 1167 11B6;D3C3;1111 1167 11B6; +D3C4;D3C4;1111 1167 11B7;D3C4;1111 1167 11B7; +D3C5;D3C5;1111 1167 11B8;D3C5;1111 1167 11B8; +D3C6;D3C6;1111 1167 11B9;D3C6;1111 1167 11B9; +D3C7;D3C7;1111 1167 11BA;D3C7;1111 1167 11BA; +D3C8;D3C8;1111 1167 11BB;D3C8;1111 1167 11BB; +D3C9;D3C9;1111 1167 11BC;D3C9;1111 1167 11BC; +D3CA;D3CA;1111 1167 11BD;D3CA;1111 1167 11BD; +D3CB;D3CB;1111 1167 11BE;D3CB;1111 1167 11BE; +D3CC;D3CC;1111 1167 11BF;D3CC;1111 1167 11BF; +D3CD;D3CD;1111 1167 11C0;D3CD;1111 1167 11C0; +D3CE;D3CE;1111 1167 11C1;D3CE;1111 1167 11C1; +D3CF;D3CF;1111 1167 11C2;D3CF;1111 1167 11C2; +D3D0;D3D0;1111 1168;D3D0;1111 1168; +D3D1;D3D1;1111 1168 11A8;D3D1;1111 1168 11A8; +D3D2;D3D2;1111 1168 11A9;D3D2;1111 1168 11A9; +D3D3;D3D3;1111 1168 11AA;D3D3;1111 1168 11AA; +D3D4;D3D4;1111 1168 11AB;D3D4;1111 1168 11AB; +D3D5;D3D5;1111 1168 11AC;D3D5;1111 1168 11AC; +D3D6;D3D6;1111 1168 11AD;D3D6;1111 1168 11AD; +D3D7;D3D7;1111 1168 11AE;D3D7;1111 1168 11AE; +D3D8;D3D8;1111 1168 11AF;D3D8;1111 1168 11AF; +D3D9;D3D9;1111 1168 11B0;D3D9;1111 1168 11B0; +D3DA;D3DA;1111 1168 11B1;D3DA;1111 1168 11B1; +D3DB;D3DB;1111 1168 11B2;D3DB;1111 1168 11B2; +D3DC;D3DC;1111 1168 11B3;D3DC;1111 1168 11B3; +D3DD;D3DD;1111 1168 11B4;D3DD;1111 1168 11B4; +D3DE;D3DE;1111 1168 11B5;D3DE;1111 1168 11B5; +D3DF;D3DF;1111 1168 11B6;D3DF;1111 1168 11B6; +D3E0;D3E0;1111 1168 11B7;D3E0;1111 1168 11B7; +D3E1;D3E1;1111 1168 11B8;D3E1;1111 1168 11B8; +D3E2;D3E2;1111 1168 11B9;D3E2;1111 1168 11B9; +D3E3;D3E3;1111 1168 11BA;D3E3;1111 1168 11BA; +D3E4;D3E4;1111 1168 11BB;D3E4;1111 1168 11BB; +D3E5;D3E5;1111 1168 11BC;D3E5;1111 1168 11BC; +D3E6;D3E6;1111 1168 11BD;D3E6;1111 1168 11BD; +D3E7;D3E7;1111 1168 11BE;D3E7;1111 1168 11BE; +D3E8;D3E8;1111 1168 11BF;D3E8;1111 1168 11BF; +D3E9;D3E9;1111 1168 11C0;D3E9;1111 1168 11C0; +D3EA;D3EA;1111 1168 11C1;D3EA;1111 1168 11C1; +D3EB;D3EB;1111 1168 11C2;D3EB;1111 1168 11C2; +D3EC;D3EC;1111 1169;D3EC;1111 1169; +D3ED;D3ED;1111 1169 11A8;D3ED;1111 1169 11A8; +D3EE;D3EE;1111 1169 11A9;D3EE;1111 1169 11A9; +D3EF;D3EF;1111 1169 11AA;D3EF;1111 1169 11AA; +D3F0;D3F0;1111 1169 11AB;D3F0;1111 1169 11AB; +D3F1;D3F1;1111 1169 11AC;D3F1;1111 1169 11AC; +D3F2;D3F2;1111 1169 11AD;D3F2;1111 1169 11AD; +D3F3;D3F3;1111 1169 11AE;D3F3;1111 1169 11AE; +D3F4;D3F4;1111 1169 11AF;D3F4;1111 1169 11AF; +D3F5;D3F5;1111 1169 11B0;D3F5;1111 1169 11B0; +D3F6;D3F6;1111 1169 11B1;D3F6;1111 1169 11B1; +D3F7;D3F7;1111 1169 11B2;D3F7;1111 1169 11B2; +D3F8;D3F8;1111 1169 11B3;D3F8;1111 1169 11B3; +D3F9;D3F9;1111 1169 11B4;D3F9;1111 1169 11B4; +D3FA;D3FA;1111 1169 11B5;D3FA;1111 1169 11B5; +D3FB;D3FB;1111 1169 11B6;D3FB;1111 1169 11B6; +D3FC;D3FC;1111 1169 11B7;D3FC;1111 1169 11B7; +D3FD;D3FD;1111 1169 11B8;D3FD;1111 1169 11B8; +D3FE;D3FE;1111 1169 11B9;D3FE;1111 1169 11B9; +D3FF;D3FF;1111 1169 11BA;D3FF;1111 1169 11BA; +D400;D400;1111 1169 11BB;D400;1111 1169 11BB; +D401;D401;1111 1169 11BC;D401;1111 1169 11BC; +D402;D402;1111 1169 11BD;D402;1111 1169 11BD; +D403;D403;1111 1169 11BE;D403;1111 1169 11BE; +D404;D404;1111 1169 11BF;D404;1111 1169 11BF; +D405;D405;1111 1169 11C0;D405;1111 1169 11C0; +D406;D406;1111 1169 11C1;D406;1111 1169 11C1; +D407;D407;1111 1169 11C2;D407;1111 1169 11C2; +D408;D408;1111 116A;D408;1111 116A; +D409;D409;1111 116A 11A8;D409;1111 116A 11A8; +D40A;D40A;1111 116A 11A9;D40A;1111 116A 11A9; +D40B;D40B;1111 116A 11AA;D40B;1111 116A 11AA; +D40C;D40C;1111 116A 11AB;D40C;1111 116A 11AB; +D40D;D40D;1111 116A 11AC;D40D;1111 116A 11AC; +D40E;D40E;1111 116A 11AD;D40E;1111 116A 11AD; +D40F;D40F;1111 116A 11AE;D40F;1111 116A 11AE; +D410;D410;1111 116A 11AF;D410;1111 116A 11AF; +D411;D411;1111 116A 11B0;D411;1111 116A 11B0; +D412;D412;1111 116A 11B1;D412;1111 116A 11B1; +D413;D413;1111 116A 11B2;D413;1111 116A 11B2; +D414;D414;1111 116A 11B3;D414;1111 116A 11B3; +D415;D415;1111 116A 11B4;D415;1111 116A 11B4; +D416;D416;1111 116A 11B5;D416;1111 116A 11B5; +D417;D417;1111 116A 11B6;D417;1111 116A 11B6; +D418;D418;1111 116A 11B7;D418;1111 116A 11B7; +D419;D419;1111 116A 11B8;D419;1111 116A 11B8; +D41A;D41A;1111 116A 11B9;D41A;1111 116A 11B9; +D41B;D41B;1111 116A 11BA;D41B;1111 116A 11BA; +D41C;D41C;1111 116A 11BB;D41C;1111 116A 11BB; +D41D;D41D;1111 116A 11BC;D41D;1111 116A 11BC; +D41E;D41E;1111 116A 11BD;D41E;1111 116A 11BD; +D41F;D41F;1111 116A 11BE;D41F;1111 116A 11BE; +D420;D420;1111 116A 11BF;D420;1111 116A 11BF; +D421;D421;1111 116A 11C0;D421;1111 116A 11C0; +D422;D422;1111 116A 11C1;D422;1111 116A 11C1; +D423;D423;1111 116A 11C2;D423;1111 116A 11C2; +D424;D424;1111 116B;D424;1111 116B; +D425;D425;1111 116B 11A8;D425;1111 116B 11A8; +D426;D426;1111 116B 11A9;D426;1111 116B 11A9; +D427;D427;1111 116B 11AA;D427;1111 116B 11AA; +D428;D428;1111 116B 11AB;D428;1111 116B 11AB; +D429;D429;1111 116B 11AC;D429;1111 116B 11AC; +D42A;D42A;1111 116B 11AD;D42A;1111 116B 11AD; +D42B;D42B;1111 116B 11AE;D42B;1111 116B 11AE; +D42C;D42C;1111 116B 11AF;D42C;1111 116B 11AF; +D42D;D42D;1111 116B 11B0;D42D;1111 116B 11B0; +D42E;D42E;1111 116B 11B1;D42E;1111 116B 11B1; +D42F;D42F;1111 116B 11B2;D42F;1111 116B 11B2; +D430;D430;1111 116B 11B3;D430;1111 116B 11B3; +D431;D431;1111 116B 11B4;D431;1111 116B 11B4; +D432;D432;1111 116B 11B5;D432;1111 116B 11B5; +D433;D433;1111 116B 11B6;D433;1111 116B 11B6; +D434;D434;1111 116B 11B7;D434;1111 116B 11B7; +D435;D435;1111 116B 11B8;D435;1111 116B 11B8; +D436;D436;1111 116B 11B9;D436;1111 116B 11B9; +D437;D437;1111 116B 11BA;D437;1111 116B 11BA; +D438;D438;1111 116B 11BB;D438;1111 116B 11BB; +D439;D439;1111 116B 11BC;D439;1111 116B 11BC; +D43A;D43A;1111 116B 11BD;D43A;1111 116B 11BD; +D43B;D43B;1111 116B 11BE;D43B;1111 116B 11BE; +D43C;D43C;1111 116B 11BF;D43C;1111 116B 11BF; +D43D;D43D;1111 116B 11C0;D43D;1111 116B 11C0; +D43E;D43E;1111 116B 11C1;D43E;1111 116B 11C1; +D43F;D43F;1111 116B 11C2;D43F;1111 116B 11C2; +D440;D440;1111 116C;D440;1111 116C; +D441;D441;1111 116C 11A8;D441;1111 116C 11A8; +D442;D442;1111 116C 11A9;D442;1111 116C 11A9; +D443;D443;1111 116C 11AA;D443;1111 116C 11AA; +D444;D444;1111 116C 11AB;D444;1111 116C 11AB; +D445;D445;1111 116C 11AC;D445;1111 116C 11AC; +D446;D446;1111 116C 11AD;D446;1111 116C 11AD; +D447;D447;1111 116C 11AE;D447;1111 116C 11AE; +D448;D448;1111 116C 11AF;D448;1111 116C 11AF; +D449;D449;1111 116C 11B0;D449;1111 116C 11B0; +D44A;D44A;1111 116C 11B1;D44A;1111 116C 11B1; +D44B;D44B;1111 116C 11B2;D44B;1111 116C 11B2; +D44C;D44C;1111 116C 11B3;D44C;1111 116C 11B3; +D44D;D44D;1111 116C 11B4;D44D;1111 116C 11B4; +D44E;D44E;1111 116C 11B5;D44E;1111 116C 11B5; +D44F;D44F;1111 116C 11B6;D44F;1111 116C 11B6; +D450;D450;1111 116C 11B7;D450;1111 116C 11B7; +D451;D451;1111 116C 11B8;D451;1111 116C 11B8; +D452;D452;1111 116C 11B9;D452;1111 116C 11B9; +D453;D453;1111 116C 11BA;D453;1111 116C 11BA; +D454;D454;1111 116C 11BB;D454;1111 116C 11BB; +D455;D455;1111 116C 11BC;D455;1111 116C 11BC; +D456;D456;1111 116C 11BD;D456;1111 116C 11BD; +D457;D457;1111 116C 11BE;D457;1111 116C 11BE; +D458;D458;1111 116C 11BF;D458;1111 116C 11BF; +D459;D459;1111 116C 11C0;D459;1111 116C 11C0; +D45A;D45A;1111 116C 11C1;D45A;1111 116C 11C1; +D45B;D45B;1111 116C 11C2;D45B;1111 116C 11C2; +D45C;D45C;1111 116D;D45C;1111 116D; +D45D;D45D;1111 116D 11A8;D45D;1111 116D 11A8; +D45E;D45E;1111 116D 11A9;D45E;1111 116D 11A9; +D45F;D45F;1111 116D 11AA;D45F;1111 116D 11AA; +D460;D460;1111 116D 11AB;D460;1111 116D 11AB; +D461;D461;1111 116D 11AC;D461;1111 116D 11AC; +D462;D462;1111 116D 11AD;D462;1111 116D 11AD; +D463;D463;1111 116D 11AE;D463;1111 116D 11AE; +D464;D464;1111 116D 11AF;D464;1111 116D 11AF; +D465;D465;1111 116D 11B0;D465;1111 116D 11B0; +D466;D466;1111 116D 11B1;D466;1111 116D 11B1; +D467;D467;1111 116D 11B2;D467;1111 116D 11B2; +D468;D468;1111 116D 11B3;D468;1111 116D 11B3; +D469;D469;1111 116D 11B4;D469;1111 116D 11B4; +D46A;D46A;1111 116D 11B5;D46A;1111 116D 11B5; +D46B;D46B;1111 116D 11B6;D46B;1111 116D 11B6; +D46C;D46C;1111 116D 11B7;D46C;1111 116D 11B7; +D46D;D46D;1111 116D 11B8;D46D;1111 116D 11B8; +D46E;D46E;1111 116D 11B9;D46E;1111 116D 11B9; +D46F;D46F;1111 116D 11BA;D46F;1111 116D 11BA; +D470;D470;1111 116D 11BB;D470;1111 116D 11BB; +D471;D471;1111 116D 11BC;D471;1111 116D 11BC; +D472;D472;1111 116D 11BD;D472;1111 116D 11BD; +D473;D473;1111 116D 11BE;D473;1111 116D 11BE; +D474;D474;1111 116D 11BF;D474;1111 116D 11BF; +D475;D475;1111 116D 11C0;D475;1111 116D 11C0; +D476;D476;1111 116D 11C1;D476;1111 116D 11C1; +D477;D477;1111 116D 11C2;D477;1111 116D 11C2; +D478;D478;1111 116E;D478;1111 116E; +D479;D479;1111 116E 11A8;D479;1111 116E 11A8; +D47A;D47A;1111 116E 11A9;D47A;1111 116E 11A9; +D47B;D47B;1111 116E 11AA;D47B;1111 116E 11AA; +D47C;D47C;1111 116E 11AB;D47C;1111 116E 11AB; +D47D;D47D;1111 116E 11AC;D47D;1111 116E 11AC; +D47E;D47E;1111 116E 11AD;D47E;1111 116E 11AD; +D47F;D47F;1111 116E 11AE;D47F;1111 116E 11AE; +D480;D480;1111 116E 11AF;D480;1111 116E 11AF; +D481;D481;1111 116E 11B0;D481;1111 116E 11B0; +D482;D482;1111 116E 11B1;D482;1111 116E 11B1; +D483;D483;1111 116E 11B2;D483;1111 116E 11B2; +D484;D484;1111 116E 11B3;D484;1111 116E 11B3; +D485;D485;1111 116E 11B4;D485;1111 116E 11B4; +D486;D486;1111 116E 11B5;D486;1111 116E 11B5; +D487;D487;1111 116E 11B6;D487;1111 116E 11B6; +D488;D488;1111 116E 11B7;D488;1111 116E 11B7; +D489;D489;1111 116E 11B8;D489;1111 116E 11B8; +D48A;D48A;1111 116E 11B9;D48A;1111 116E 11B9; +D48B;D48B;1111 116E 11BA;D48B;1111 116E 11BA; +D48C;D48C;1111 116E 11BB;D48C;1111 116E 11BB; +D48D;D48D;1111 116E 11BC;D48D;1111 116E 11BC; +D48E;D48E;1111 116E 11BD;D48E;1111 116E 11BD; +D48F;D48F;1111 116E 11BE;D48F;1111 116E 11BE; +D490;D490;1111 116E 11BF;D490;1111 116E 11BF; +D491;D491;1111 116E 11C0;D491;1111 116E 11C0; +D492;D492;1111 116E 11C1;D492;1111 116E 11C1; +D493;D493;1111 116E 11C2;D493;1111 116E 11C2; +D494;D494;1111 116F;D494;1111 116F; +D495;D495;1111 116F 11A8;D495;1111 116F 11A8; +D496;D496;1111 116F 11A9;D496;1111 116F 11A9; +D497;D497;1111 116F 11AA;D497;1111 116F 11AA; +D498;D498;1111 116F 11AB;D498;1111 116F 11AB; +D499;D499;1111 116F 11AC;D499;1111 116F 11AC; +D49A;D49A;1111 116F 11AD;D49A;1111 116F 11AD; +D49B;D49B;1111 116F 11AE;D49B;1111 116F 11AE; +D49C;D49C;1111 116F 11AF;D49C;1111 116F 11AF; +D49D;D49D;1111 116F 11B0;D49D;1111 116F 11B0; +D49E;D49E;1111 116F 11B1;D49E;1111 116F 11B1; +D49F;D49F;1111 116F 11B2;D49F;1111 116F 11B2; +D4A0;D4A0;1111 116F 11B3;D4A0;1111 116F 11B3; +D4A1;D4A1;1111 116F 11B4;D4A1;1111 116F 11B4; +D4A2;D4A2;1111 116F 11B5;D4A2;1111 116F 11B5; +D4A3;D4A3;1111 116F 11B6;D4A3;1111 116F 11B6; +D4A4;D4A4;1111 116F 11B7;D4A4;1111 116F 11B7; +D4A5;D4A5;1111 116F 11B8;D4A5;1111 116F 11B8; +D4A6;D4A6;1111 116F 11B9;D4A6;1111 116F 11B9; +D4A7;D4A7;1111 116F 11BA;D4A7;1111 116F 11BA; +D4A8;D4A8;1111 116F 11BB;D4A8;1111 116F 11BB; +D4A9;D4A9;1111 116F 11BC;D4A9;1111 116F 11BC; +D4AA;D4AA;1111 116F 11BD;D4AA;1111 116F 11BD; +D4AB;D4AB;1111 116F 11BE;D4AB;1111 116F 11BE; +D4AC;D4AC;1111 116F 11BF;D4AC;1111 116F 11BF; +D4AD;D4AD;1111 116F 11C0;D4AD;1111 116F 11C0; +D4AE;D4AE;1111 116F 11C1;D4AE;1111 116F 11C1; +D4AF;D4AF;1111 116F 11C2;D4AF;1111 116F 11C2; +D4B0;D4B0;1111 1170;D4B0;1111 1170; +D4B1;D4B1;1111 1170 11A8;D4B1;1111 1170 11A8; +D4B2;D4B2;1111 1170 11A9;D4B2;1111 1170 11A9; +D4B3;D4B3;1111 1170 11AA;D4B3;1111 1170 11AA; +D4B4;D4B4;1111 1170 11AB;D4B4;1111 1170 11AB; +D4B5;D4B5;1111 1170 11AC;D4B5;1111 1170 11AC; +D4B6;D4B6;1111 1170 11AD;D4B6;1111 1170 11AD; +D4B7;D4B7;1111 1170 11AE;D4B7;1111 1170 11AE; +D4B8;D4B8;1111 1170 11AF;D4B8;1111 1170 11AF; +D4B9;D4B9;1111 1170 11B0;D4B9;1111 1170 11B0; +D4BA;D4BA;1111 1170 11B1;D4BA;1111 1170 11B1; +D4BB;D4BB;1111 1170 11B2;D4BB;1111 1170 11B2; +D4BC;D4BC;1111 1170 11B3;D4BC;1111 1170 11B3; +D4BD;D4BD;1111 1170 11B4;D4BD;1111 1170 11B4; +D4BE;D4BE;1111 1170 11B5;D4BE;1111 1170 11B5; +D4BF;D4BF;1111 1170 11B6;D4BF;1111 1170 11B6; +D4C0;D4C0;1111 1170 11B7;D4C0;1111 1170 11B7; +D4C1;D4C1;1111 1170 11B8;D4C1;1111 1170 11B8; +D4C2;D4C2;1111 1170 11B9;D4C2;1111 1170 11B9; +D4C3;D4C3;1111 1170 11BA;D4C3;1111 1170 11BA; +D4C4;D4C4;1111 1170 11BB;D4C4;1111 1170 11BB; +D4C5;D4C5;1111 1170 11BC;D4C5;1111 1170 11BC; +D4C6;D4C6;1111 1170 11BD;D4C6;1111 1170 11BD; +D4C7;D4C7;1111 1170 11BE;D4C7;1111 1170 11BE; +D4C8;D4C8;1111 1170 11BF;D4C8;1111 1170 11BF; +D4C9;D4C9;1111 1170 11C0;D4C9;1111 1170 11C0; +D4CA;D4CA;1111 1170 11C1;D4CA;1111 1170 11C1; +D4CB;D4CB;1111 1170 11C2;D4CB;1111 1170 11C2; +D4CC;D4CC;1111 1171;D4CC;1111 1171; +D4CD;D4CD;1111 1171 11A8;D4CD;1111 1171 11A8; +D4CE;D4CE;1111 1171 11A9;D4CE;1111 1171 11A9; +D4CF;D4CF;1111 1171 11AA;D4CF;1111 1171 11AA; +D4D0;D4D0;1111 1171 11AB;D4D0;1111 1171 11AB; +D4D1;D4D1;1111 1171 11AC;D4D1;1111 1171 11AC; +D4D2;D4D2;1111 1171 11AD;D4D2;1111 1171 11AD; +D4D3;D4D3;1111 1171 11AE;D4D3;1111 1171 11AE; +D4D4;D4D4;1111 1171 11AF;D4D4;1111 1171 11AF; +D4D5;D4D5;1111 1171 11B0;D4D5;1111 1171 11B0; +D4D6;D4D6;1111 1171 11B1;D4D6;1111 1171 11B1; +D4D7;D4D7;1111 1171 11B2;D4D7;1111 1171 11B2; +D4D8;D4D8;1111 1171 11B3;D4D8;1111 1171 11B3; +D4D9;D4D9;1111 1171 11B4;D4D9;1111 1171 11B4; +D4DA;D4DA;1111 1171 11B5;D4DA;1111 1171 11B5; +D4DB;D4DB;1111 1171 11B6;D4DB;1111 1171 11B6; +D4DC;D4DC;1111 1171 11B7;D4DC;1111 1171 11B7; +D4DD;D4DD;1111 1171 11B8;D4DD;1111 1171 11B8; +D4DE;D4DE;1111 1171 11B9;D4DE;1111 1171 11B9; +D4DF;D4DF;1111 1171 11BA;D4DF;1111 1171 11BA; +D4E0;D4E0;1111 1171 11BB;D4E0;1111 1171 11BB; +D4E1;D4E1;1111 1171 11BC;D4E1;1111 1171 11BC; +D4E2;D4E2;1111 1171 11BD;D4E2;1111 1171 11BD; +D4E3;D4E3;1111 1171 11BE;D4E3;1111 1171 11BE; +D4E4;D4E4;1111 1171 11BF;D4E4;1111 1171 11BF; +D4E5;D4E5;1111 1171 11C0;D4E5;1111 1171 11C0; +D4E6;D4E6;1111 1171 11C1;D4E6;1111 1171 11C1; +D4E7;D4E7;1111 1171 11C2;D4E7;1111 1171 11C2; +D4E8;D4E8;1111 1172;D4E8;1111 1172; +D4E9;D4E9;1111 1172 11A8;D4E9;1111 1172 11A8; +D4EA;D4EA;1111 1172 11A9;D4EA;1111 1172 11A9; +D4EB;D4EB;1111 1172 11AA;D4EB;1111 1172 11AA; +D4EC;D4EC;1111 1172 11AB;D4EC;1111 1172 11AB; +D4ED;D4ED;1111 1172 11AC;D4ED;1111 1172 11AC; +D4EE;D4EE;1111 1172 11AD;D4EE;1111 1172 11AD; +D4EF;D4EF;1111 1172 11AE;D4EF;1111 1172 11AE; +D4F0;D4F0;1111 1172 11AF;D4F0;1111 1172 11AF; +D4F1;D4F1;1111 1172 11B0;D4F1;1111 1172 11B0; +D4F2;D4F2;1111 1172 11B1;D4F2;1111 1172 11B1; +D4F3;D4F3;1111 1172 11B2;D4F3;1111 1172 11B2; +D4F4;D4F4;1111 1172 11B3;D4F4;1111 1172 11B3; +D4F5;D4F5;1111 1172 11B4;D4F5;1111 1172 11B4; +D4F6;D4F6;1111 1172 11B5;D4F6;1111 1172 11B5; +D4F7;D4F7;1111 1172 11B6;D4F7;1111 1172 11B6; +D4F8;D4F8;1111 1172 11B7;D4F8;1111 1172 11B7; +D4F9;D4F9;1111 1172 11B8;D4F9;1111 1172 11B8; +D4FA;D4FA;1111 1172 11B9;D4FA;1111 1172 11B9; +D4FB;D4FB;1111 1172 11BA;D4FB;1111 1172 11BA; +D4FC;D4FC;1111 1172 11BB;D4FC;1111 1172 11BB; +D4FD;D4FD;1111 1172 11BC;D4FD;1111 1172 11BC; +D4FE;D4FE;1111 1172 11BD;D4FE;1111 1172 11BD; +D4FF;D4FF;1111 1172 11BE;D4FF;1111 1172 11BE; +D500;D500;1111 1172 11BF;D500;1111 1172 11BF; +D501;D501;1111 1172 11C0;D501;1111 1172 11C0; +D502;D502;1111 1172 11C1;D502;1111 1172 11C1; +D503;D503;1111 1172 11C2;D503;1111 1172 11C2; +D504;D504;1111 1173;D504;1111 1173; +D505;D505;1111 1173 11A8;D505;1111 1173 11A8; +D506;D506;1111 1173 11A9;D506;1111 1173 11A9; +D507;D507;1111 1173 11AA;D507;1111 1173 11AA; +D508;D508;1111 1173 11AB;D508;1111 1173 11AB; +D509;D509;1111 1173 11AC;D509;1111 1173 11AC; +D50A;D50A;1111 1173 11AD;D50A;1111 1173 11AD; +D50B;D50B;1111 1173 11AE;D50B;1111 1173 11AE; +D50C;D50C;1111 1173 11AF;D50C;1111 1173 11AF; +D50D;D50D;1111 1173 11B0;D50D;1111 1173 11B0; +D50E;D50E;1111 1173 11B1;D50E;1111 1173 11B1; +D50F;D50F;1111 1173 11B2;D50F;1111 1173 11B2; +D510;D510;1111 1173 11B3;D510;1111 1173 11B3; +D511;D511;1111 1173 11B4;D511;1111 1173 11B4; +D512;D512;1111 1173 11B5;D512;1111 1173 11B5; +D513;D513;1111 1173 11B6;D513;1111 1173 11B6; +D514;D514;1111 1173 11B7;D514;1111 1173 11B7; +D515;D515;1111 1173 11B8;D515;1111 1173 11B8; +D516;D516;1111 1173 11B9;D516;1111 1173 11B9; +D517;D517;1111 1173 11BA;D517;1111 1173 11BA; +D518;D518;1111 1173 11BB;D518;1111 1173 11BB; +D519;D519;1111 1173 11BC;D519;1111 1173 11BC; +D51A;D51A;1111 1173 11BD;D51A;1111 1173 11BD; +D51B;D51B;1111 1173 11BE;D51B;1111 1173 11BE; +D51C;D51C;1111 1173 11BF;D51C;1111 1173 11BF; +D51D;D51D;1111 1173 11C0;D51D;1111 1173 11C0; +D51E;D51E;1111 1173 11C1;D51E;1111 1173 11C1; +D51F;D51F;1111 1173 11C2;D51F;1111 1173 11C2; +D520;D520;1111 1174;D520;1111 1174; +D521;D521;1111 1174 11A8;D521;1111 1174 11A8; +D522;D522;1111 1174 11A9;D522;1111 1174 11A9; +D523;D523;1111 1174 11AA;D523;1111 1174 11AA; +D524;D524;1111 1174 11AB;D524;1111 1174 11AB; +D525;D525;1111 1174 11AC;D525;1111 1174 11AC; +D526;D526;1111 1174 11AD;D526;1111 1174 11AD; +D527;D527;1111 1174 11AE;D527;1111 1174 11AE; +D528;D528;1111 1174 11AF;D528;1111 1174 11AF; +D529;D529;1111 1174 11B0;D529;1111 1174 11B0; +D52A;D52A;1111 1174 11B1;D52A;1111 1174 11B1; +D52B;D52B;1111 1174 11B2;D52B;1111 1174 11B2; +D52C;D52C;1111 1174 11B3;D52C;1111 1174 11B3; +D52D;D52D;1111 1174 11B4;D52D;1111 1174 11B4; +D52E;D52E;1111 1174 11B5;D52E;1111 1174 11B5; +D52F;D52F;1111 1174 11B6;D52F;1111 1174 11B6; +D530;D530;1111 1174 11B7;D530;1111 1174 11B7; +D531;D531;1111 1174 11B8;D531;1111 1174 11B8; +D532;D532;1111 1174 11B9;D532;1111 1174 11B9; +D533;D533;1111 1174 11BA;D533;1111 1174 11BA; +D534;D534;1111 1174 11BB;D534;1111 1174 11BB; +D535;D535;1111 1174 11BC;D535;1111 1174 11BC; +D536;D536;1111 1174 11BD;D536;1111 1174 11BD; +D537;D537;1111 1174 11BE;D537;1111 1174 11BE; +D538;D538;1111 1174 11BF;D538;1111 1174 11BF; +D539;D539;1111 1174 11C0;D539;1111 1174 11C0; +D53A;D53A;1111 1174 11C1;D53A;1111 1174 11C1; +D53B;D53B;1111 1174 11C2;D53B;1111 1174 11C2; +D53C;D53C;1111 1175;D53C;1111 1175; +D53D;D53D;1111 1175 11A8;D53D;1111 1175 11A8; +D53E;D53E;1111 1175 11A9;D53E;1111 1175 11A9; +D53F;D53F;1111 1175 11AA;D53F;1111 1175 11AA; +D540;D540;1111 1175 11AB;D540;1111 1175 11AB; +D541;D541;1111 1175 11AC;D541;1111 1175 11AC; +D542;D542;1111 1175 11AD;D542;1111 1175 11AD; +D543;D543;1111 1175 11AE;D543;1111 1175 11AE; +D544;D544;1111 1175 11AF;D544;1111 1175 11AF; +D545;D545;1111 1175 11B0;D545;1111 1175 11B0; +D546;D546;1111 1175 11B1;D546;1111 1175 11B1; +D547;D547;1111 1175 11B2;D547;1111 1175 11B2; +D548;D548;1111 1175 11B3;D548;1111 1175 11B3; +D549;D549;1111 1175 11B4;D549;1111 1175 11B4; +D54A;D54A;1111 1175 11B5;D54A;1111 1175 11B5; +D54B;D54B;1111 1175 11B6;D54B;1111 1175 11B6; +D54C;D54C;1111 1175 11B7;D54C;1111 1175 11B7; +D54D;D54D;1111 1175 11B8;D54D;1111 1175 11B8; +D54E;D54E;1111 1175 11B9;D54E;1111 1175 11B9; +D54F;D54F;1111 1175 11BA;D54F;1111 1175 11BA; +D550;D550;1111 1175 11BB;D550;1111 1175 11BB; +D551;D551;1111 1175 11BC;D551;1111 1175 11BC; +D552;D552;1111 1175 11BD;D552;1111 1175 11BD; +D553;D553;1111 1175 11BE;D553;1111 1175 11BE; +D554;D554;1111 1175 11BF;D554;1111 1175 11BF; +D555;D555;1111 1175 11C0;D555;1111 1175 11C0; +D556;D556;1111 1175 11C1;D556;1111 1175 11C1; +D557;D557;1111 1175 11C2;D557;1111 1175 11C2; +D558;D558;1112 1161;D558;1112 1161; +D559;D559;1112 1161 11A8;D559;1112 1161 11A8; +D55A;D55A;1112 1161 11A9;D55A;1112 1161 11A9; +D55B;D55B;1112 1161 11AA;D55B;1112 1161 11AA; +D55C;D55C;1112 1161 11AB;D55C;1112 1161 11AB; +D55D;D55D;1112 1161 11AC;D55D;1112 1161 11AC; +D55E;D55E;1112 1161 11AD;D55E;1112 1161 11AD; +D55F;D55F;1112 1161 11AE;D55F;1112 1161 11AE; +D560;D560;1112 1161 11AF;D560;1112 1161 11AF; +D561;D561;1112 1161 11B0;D561;1112 1161 11B0; +D562;D562;1112 1161 11B1;D562;1112 1161 11B1; +D563;D563;1112 1161 11B2;D563;1112 1161 11B2; +D564;D564;1112 1161 11B3;D564;1112 1161 11B3; +D565;D565;1112 1161 11B4;D565;1112 1161 11B4; +D566;D566;1112 1161 11B5;D566;1112 1161 11B5; +D567;D567;1112 1161 11B6;D567;1112 1161 11B6; +D568;D568;1112 1161 11B7;D568;1112 1161 11B7; +D569;D569;1112 1161 11B8;D569;1112 1161 11B8; +D56A;D56A;1112 1161 11B9;D56A;1112 1161 11B9; +D56B;D56B;1112 1161 11BA;D56B;1112 1161 11BA; +D56C;D56C;1112 1161 11BB;D56C;1112 1161 11BB; +D56D;D56D;1112 1161 11BC;D56D;1112 1161 11BC; +D56E;D56E;1112 1161 11BD;D56E;1112 1161 11BD; +D56F;D56F;1112 1161 11BE;D56F;1112 1161 11BE; +D570;D570;1112 1161 11BF;D570;1112 1161 11BF; +D571;D571;1112 1161 11C0;D571;1112 1161 11C0; +D572;D572;1112 1161 11C1;D572;1112 1161 11C1; +D573;D573;1112 1161 11C2;D573;1112 1161 11C2; +D574;D574;1112 1162;D574;1112 1162; +D575;D575;1112 1162 11A8;D575;1112 1162 11A8; +D576;D576;1112 1162 11A9;D576;1112 1162 11A9; +D577;D577;1112 1162 11AA;D577;1112 1162 11AA; +D578;D578;1112 1162 11AB;D578;1112 1162 11AB; +D579;D579;1112 1162 11AC;D579;1112 1162 11AC; +D57A;D57A;1112 1162 11AD;D57A;1112 1162 11AD; +D57B;D57B;1112 1162 11AE;D57B;1112 1162 11AE; +D57C;D57C;1112 1162 11AF;D57C;1112 1162 11AF; +D57D;D57D;1112 1162 11B0;D57D;1112 1162 11B0; +D57E;D57E;1112 1162 11B1;D57E;1112 1162 11B1; +D57F;D57F;1112 1162 11B2;D57F;1112 1162 11B2; +D580;D580;1112 1162 11B3;D580;1112 1162 11B3; +D581;D581;1112 1162 11B4;D581;1112 1162 11B4; +D582;D582;1112 1162 11B5;D582;1112 1162 11B5; +D583;D583;1112 1162 11B6;D583;1112 1162 11B6; +D584;D584;1112 1162 11B7;D584;1112 1162 11B7; +D585;D585;1112 1162 11B8;D585;1112 1162 11B8; +D586;D586;1112 1162 11B9;D586;1112 1162 11B9; +D587;D587;1112 1162 11BA;D587;1112 1162 11BA; +D588;D588;1112 1162 11BB;D588;1112 1162 11BB; +D589;D589;1112 1162 11BC;D589;1112 1162 11BC; +D58A;D58A;1112 1162 11BD;D58A;1112 1162 11BD; +D58B;D58B;1112 1162 11BE;D58B;1112 1162 11BE; +D58C;D58C;1112 1162 11BF;D58C;1112 1162 11BF; +D58D;D58D;1112 1162 11C0;D58D;1112 1162 11C0; +D58E;D58E;1112 1162 11C1;D58E;1112 1162 11C1; +D58F;D58F;1112 1162 11C2;D58F;1112 1162 11C2; +D590;D590;1112 1163;D590;1112 1163; +D591;D591;1112 1163 11A8;D591;1112 1163 11A8; +D592;D592;1112 1163 11A9;D592;1112 1163 11A9; +D593;D593;1112 1163 11AA;D593;1112 1163 11AA; +D594;D594;1112 1163 11AB;D594;1112 1163 11AB; +D595;D595;1112 1163 11AC;D595;1112 1163 11AC; +D596;D596;1112 1163 11AD;D596;1112 1163 11AD; +D597;D597;1112 1163 11AE;D597;1112 1163 11AE; +D598;D598;1112 1163 11AF;D598;1112 1163 11AF; +D599;D599;1112 1163 11B0;D599;1112 1163 11B0; +D59A;D59A;1112 1163 11B1;D59A;1112 1163 11B1; +D59B;D59B;1112 1163 11B2;D59B;1112 1163 11B2; +D59C;D59C;1112 1163 11B3;D59C;1112 1163 11B3; +D59D;D59D;1112 1163 11B4;D59D;1112 1163 11B4; +D59E;D59E;1112 1163 11B5;D59E;1112 1163 11B5; +D59F;D59F;1112 1163 11B6;D59F;1112 1163 11B6; +D5A0;D5A0;1112 1163 11B7;D5A0;1112 1163 11B7; +D5A1;D5A1;1112 1163 11B8;D5A1;1112 1163 11B8; +D5A2;D5A2;1112 1163 11B9;D5A2;1112 1163 11B9; +D5A3;D5A3;1112 1163 11BA;D5A3;1112 1163 11BA; +D5A4;D5A4;1112 1163 11BB;D5A4;1112 1163 11BB; +D5A5;D5A5;1112 1163 11BC;D5A5;1112 1163 11BC; +D5A6;D5A6;1112 1163 11BD;D5A6;1112 1163 11BD; +D5A7;D5A7;1112 1163 11BE;D5A7;1112 1163 11BE; +D5A8;D5A8;1112 1163 11BF;D5A8;1112 1163 11BF; +D5A9;D5A9;1112 1163 11C0;D5A9;1112 1163 11C0; +D5AA;D5AA;1112 1163 11C1;D5AA;1112 1163 11C1; +D5AB;D5AB;1112 1163 11C2;D5AB;1112 1163 11C2; +D5AC;D5AC;1112 1164;D5AC;1112 1164; +D5AD;D5AD;1112 1164 11A8;D5AD;1112 1164 11A8; +D5AE;D5AE;1112 1164 11A9;D5AE;1112 1164 11A9; +D5AF;D5AF;1112 1164 11AA;D5AF;1112 1164 11AA; +D5B0;D5B0;1112 1164 11AB;D5B0;1112 1164 11AB; +D5B1;D5B1;1112 1164 11AC;D5B1;1112 1164 11AC; +D5B2;D5B2;1112 1164 11AD;D5B2;1112 1164 11AD; +D5B3;D5B3;1112 1164 11AE;D5B3;1112 1164 11AE; +D5B4;D5B4;1112 1164 11AF;D5B4;1112 1164 11AF; +D5B5;D5B5;1112 1164 11B0;D5B5;1112 1164 11B0; +D5B6;D5B6;1112 1164 11B1;D5B6;1112 1164 11B1; +D5B7;D5B7;1112 1164 11B2;D5B7;1112 1164 11B2; +D5B8;D5B8;1112 1164 11B3;D5B8;1112 1164 11B3; +D5B9;D5B9;1112 1164 11B4;D5B9;1112 1164 11B4; +D5BA;D5BA;1112 1164 11B5;D5BA;1112 1164 11B5; +D5BB;D5BB;1112 1164 11B6;D5BB;1112 1164 11B6; +D5BC;D5BC;1112 1164 11B7;D5BC;1112 1164 11B7; +D5BD;D5BD;1112 1164 11B8;D5BD;1112 1164 11B8; +D5BE;D5BE;1112 1164 11B9;D5BE;1112 1164 11B9; +D5BF;D5BF;1112 1164 11BA;D5BF;1112 1164 11BA; +D5C0;D5C0;1112 1164 11BB;D5C0;1112 1164 11BB; +D5C1;D5C1;1112 1164 11BC;D5C1;1112 1164 11BC; +D5C2;D5C2;1112 1164 11BD;D5C2;1112 1164 11BD; +D5C3;D5C3;1112 1164 11BE;D5C3;1112 1164 11BE; +D5C4;D5C4;1112 1164 11BF;D5C4;1112 1164 11BF; +D5C5;D5C5;1112 1164 11C0;D5C5;1112 1164 11C0; +D5C6;D5C6;1112 1164 11C1;D5C6;1112 1164 11C1; +D5C7;D5C7;1112 1164 11C2;D5C7;1112 1164 11C2; +D5C8;D5C8;1112 1165;D5C8;1112 1165; +D5C9;D5C9;1112 1165 11A8;D5C9;1112 1165 11A8; +D5CA;D5CA;1112 1165 11A9;D5CA;1112 1165 11A9; +D5CB;D5CB;1112 1165 11AA;D5CB;1112 1165 11AA; +D5CC;D5CC;1112 1165 11AB;D5CC;1112 1165 11AB; +D5CD;D5CD;1112 1165 11AC;D5CD;1112 1165 11AC; +D5CE;D5CE;1112 1165 11AD;D5CE;1112 1165 11AD; +D5CF;D5CF;1112 1165 11AE;D5CF;1112 1165 11AE; +D5D0;D5D0;1112 1165 11AF;D5D0;1112 1165 11AF; +D5D1;D5D1;1112 1165 11B0;D5D1;1112 1165 11B0; +D5D2;D5D2;1112 1165 11B1;D5D2;1112 1165 11B1; +D5D3;D5D3;1112 1165 11B2;D5D3;1112 1165 11B2; +D5D4;D5D4;1112 1165 11B3;D5D4;1112 1165 11B3; +D5D5;D5D5;1112 1165 11B4;D5D5;1112 1165 11B4; +D5D6;D5D6;1112 1165 11B5;D5D6;1112 1165 11B5; +D5D7;D5D7;1112 1165 11B6;D5D7;1112 1165 11B6; +D5D8;D5D8;1112 1165 11B7;D5D8;1112 1165 11B7; +D5D9;D5D9;1112 1165 11B8;D5D9;1112 1165 11B8; +D5DA;D5DA;1112 1165 11B9;D5DA;1112 1165 11B9; +D5DB;D5DB;1112 1165 11BA;D5DB;1112 1165 11BA; +D5DC;D5DC;1112 1165 11BB;D5DC;1112 1165 11BB; +D5DD;D5DD;1112 1165 11BC;D5DD;1112 1165 11BC; +D5DE;D5DE;1112 1165 11BD;D5DE;1112 1165 11BD; +D5DF;D5DF;1112 1165 11BE;D5DF;1112 1165 11BE; +D5E0;D5E0;1112 1165 11BF;D5E0;1112 1165 11BF; +D5E1;D5E1;1112 1165 11C0;D5E1;1112 1165 11C0; +D5E2;D5E2;1112 1165 11C1;D5E2;1112 1165 11C1; +D5E3;D5E3;1112 1165 11C2;D5E3;1112 1165 11C2; +D5E4;D5E4;1112 1166;D5E4;1112 1166; +D5E5;D5E5;1112 1166 11A8;D5E5;1112 1166 11A8; +D5E6;D5E6;1112 1166 11A9;D5E6;1112 1166 11A9; +D5E7;D5E7;1112 1166 11AA;D5E7;1112 1166 11AA; +D5E8;D5E8;1112 1166 11AB;D5E8;1112 1166 11AB; +D5E9;D5E9;1112 1166 11AC;D5E9;1112 1166 11AC; +D5EA;D5EA;1112 1166 11AD;D5EA;1112 1166 11AD; +D5EB;D5EB;1112 1166 11AE;D5EB;1112 1166 11AE; +D5EC;D5EC;1112 1166 11AF;D5EC;1112 1166 11AF; +D5ED;D5ED;1112 1166 11B0;D5ED;1112 1166 11B0; +D5EE;D5EE;1112 1166 11B1;D5EE;1112 1166 11B1; +D5EF;D5EF;1112 1166 11B2;D5EF;1112 1166 11B2; +D5F0;D5F0;1112 1166 11B3;D5F0;1112 1166 11B3; +D5F1;D5F1;1112 1166 11B4;D5F1;1112 1166 11B4; +D5F2;D5F2;1112 1166 11B5;D5F2;1112 1166 11B5; +D5F3;D5F3;1112 1166 11B6;D5F3;1112 1166 11B6; +D5F4;D5F4;1112 1166 11B7;D5F4;1112 1166 11B7; +D5F5;D5F5;1112 1166 11B8;D5F5;1112 1166 11B8; +D5F6;D5F6;1112 1166 11B9;D5F6;1112 1166 11B9; +D5F7;D5F7;1112 1166 11BA;D5F7;1112 1166 11BA; +D5F8;D5F8;1112 1166 11BB;D5F8;1112 1166 11BB; +D5F9;D5F9;1112 1166 11BC;D5F9;1112 1166 11BC; +D5FA;D5FA;1112 1166 11BD;D5FA;1112 1166 11BD; +D5FB;D5FB;1112 1166 11BE;D5FB;1112 1166 11BE; +D5FC;D5FC;1112 1166 11BF;D5FC;1112 1166 11BF; +D5FD;D5FD;1112 1166 11C0;D5FD;1112 1166 11C0; +D5FE;D5FE;1112 1166 11C1;D5FE;1112 1166 11C1; +D5FF;D5FF;1112 1166 11C2;D5FF;1112 1166 11C2; +D600;D600;1112 1167;D600;1112 1167; +D601;D601;1112 1167 11A8;D601;1112 1167 11A8; +D602;D602;1112 1167 11A9;D602;1112 1167 11A9; +D603;D603;1112 1167 11AA;D603;1112 1167 11AA; +D604;D604;1112 1167 11AB;D604;1112 1167 11AB; +D605;D605;1112 1167 11AC;D605;1112 1167 11AC; +D606;D606;1112 1167 11AD;D606;1112 1167 11AD; +D607;D607;1112 1167 11AE;D607;1112 1167 11AE; +D608;D608;1112 1167 11AF;D608;1112 1167 11AF; +D609;D609;1112 1167 11B0;D609;1112 1167 11B0; +D60A;D60A;1112 1167 11B1;D60A;1112 1167 11B1; +D60B;D60B;1112 1167 11B2;D60B;1112 1167 11B2; +D60C;D60C;1112 1167 11B3;D60C;1112 1167 11B3; +D60D;D60D;1112 1167 11B4;D60D;1112 1167 11B4; +D60E;D60E;1112 1167 11B5;D60E;1112 1167 11B5; +D60F;D60F;1112 1167 11B6;D60F;1112 1167 11B6; +D610;D610;1112 1167 11B7;D610;1112 1167 11B7; +D611;D611;1112 1167 11B8;D611;1112 1167 11B8; +D612;D612;1112 1167 11B9;D612;1112 1167 11B9; +D613;D613;1112 1167 11BA;D613;1112 1167 11BA; +D614;D614;1112 1167 11BB;D614;1112 1167 11BB; +D615;D615;1112 1167 11BC;D615;1112 1167 11BC; +D616;D616;1112 1167 11BD;D616;1112 1167 11BD; +D617;D617;1112 1167 11BE;D617;1112 1167 11BE; +D618;D618;1112 1167 11BF;D618;1112 1167 11BF; +D619;D619;1112 1167 11C0;D619;1112 1167 11C0; +D61A;D61A;1112 1167 11C1;D61A;1112 1167 11C1; +D61B;D61B;1112 1167 11C2;D61B;1112 1167 11C2; +D61C;D61C;1112 1168;D61C;1112 1168; +D61D;D61D;1112 1168 11A8;D61D;1112 1168 11A8; +D61E;D61E;1112 1168 11A9;D61E;1112 1168 11A9; +D61F;D61F;1112 1168 11AA;D61F;1112 1168 11AA; +D620;D620;1112 1168 11AB;D620;1112 1168 11AB; +D621;D621;1112 1168 11AC;D621;1112 1168 11AC; +D622;D622;1112 1168 11AD;D622;1112 1168 11AD; +D623;D623;1112 1168 11AE;D623;1112 1168 11AE; +D624;D624;1112 1168 11AF;D624;1112 1168 11AF; +D625;D625;1112 1168 11B0;D625;1112 1168 11B0; +D626;D626;1112 1168 11B1;D626;1112 1168 11B1; +D627;D627;1112 1168 11B2;D627;1112 1168 11B2; +D628;D628;1112 1168 11B3;D628;1112 1168 11B3; +D629;D629;1112 1168 11B4;D629;1112 1168 11B4; +D62A;D62A;1112 1168 11B5;D62A;1112 1168 11B5; +D62B;D62B;1112 1168 11B6;D62B;1112 1168 11B6; +D62C;D62C;1112 1168 11B7;D62C;1112 1168 11B7; +D62D;D62D;1112 1168 11B8;D62D;1112 1168 11B8; +D62E;D62E;1112 1168 11B9;D62E;1112 1168 11B9; +D62F;D62F;1112 1168 11BA;D62F;1112 1168 11BA; +D630;D630;1112 1168 11BB;D630;1112 1168 11BB; +D631;D631;1112 1168 11BC;D631;1112 1168 11BC; +D632;D632;1112 1168 11BD;D632;1112 1168 11BD; +D633;D633;1112 1168 11BE;D633;1112 1168 11BE; +D634;D634;1112 1168 11BF;D634;1112 1168 11BF; +D635;D635;1112 1168 11C0;D635;1112 1168 11C0; +D636;D636;1112 1168 11C1;D636;1112 1168 11C1; +D637;D637;1112 1168 11C2;D637;1112 1168 11C2; +D638;D638;1112 1169;D638;1112 1169; +D639;D639;1112 1169 11A8;D639;1112 1169 11A8; +D63A;D63A;1112 1169 11A9;D63A;1112 1169 11A9; +D63B;D63B;1112 1169 11AA;D63B;1112 1169 11AA; +D63C;D63C;1112 1169 11AB;D63C;1112 1169 11AB; +D63D;D63D;1112 1169 11AC;D63D;1112 1169 11AC; +D63E;D63E;1112 1169 11AD;D63E;1112 1169 11AD; +D63F;D63F;1112 1169 11AE;D63F;1112 1169 11AE; +D640;D640;1112 1169 11AF;D640;1112 1169 11AF; +D641;D641;1112 1169 11B0;D641;1112 1169 11B0; +D642;D642;1112 1169 11B1;D642;1112 1169 11B1; +D643;D643;1112 1169 11B2;D643;1112 1169 11B2; +D644;D644;1112 1169 11B3;D644;1112 1169 11B3; +D645;D645;1112 1169 11B4;D645;1112 1169 11B4; +D646;D646;1112 1169 11B5;D646;1112 1169 11B5; +D647;D647;1112 1169 11B6;D647;1112 1169 11B6; +D648;D648;1112 1169 11B7;D648;1112 1169 11B7; +D649;D649;1112 1169 11B8;D649;1112 1169 11B8; +D64A;D64A;1112 1169 11B9;D64A;1112 1169 11B9; +D64B;D64B;1112 1169 11BA;D64B;1112 1169 11BA; +D64C;D64C;1112 1169 11BB;D64C;1112 1169 11BB; +D64D;D64D;1112 1169 11BC;D64D;1112 1169 11BC; +D64E;D64E;1112 1169 11BD;D64E;1112 1169 11BD; +D64F;D64F;1112 1169 11BE;D64F;1112 1169 11BE; +D650;D650;1112 1169 11BF;D650;1112 1169 11BF; +D651;D651;1112 1169 11C0;D651;1112 1169 11C0; +D652;D652;1112 1169 11C1;D652;1112 1169 11C1; +D653;D653;1112 1169 11C2;D653;1112 1169 11C2; +D654;D654;1112 116A;D654;1112 116A; +D655;D655;1112 116A 11A8;D655;1112 116A 11A8; +D656;D656;1112 116A 11A9;D656;1112 116A 11A9; +D657;D657;1112 116A 11AA;D657;1112 116A 11AA; +D658;D658;1112 116A 11AB;D658;1112 116A 11AB; +D659;D659;1112 116A 11AC;D659;1112 116A 11AC; +D65A;D65A;1112 116A 11AD;D65A;1112 116A 11AD; +D65B;D65B;1112 116A 11AE;D65B;1112 116A 11AE; +D65C;D65C;1112 116A 11AF;D65C;1112 116A 11AF; +D65D;D65D;1112 116A 11B0;D65D;1112 116A 11B0; +D65E;D65E;1112 116A 11B1;D65E;1112 116A 11B1; +D65F;D65F;1112 116A 11B2;D65F;1112 116A 11B2; +D660;D660;1112 116A 11B3;D660;1112 116A 11B3; +D661;D661;1112 116A 11B4;D661;1112 116A 11B4; +D662;D662;1112 116A 11B5;D662;1112 116A 11B5; +D663;D663;1112 116A 11B6;D663;1112 116A 11B6; +D664;D664;1112 116A 11B7;D664;1112 116A 11B7; +D665;D665;1112 116A 11B8;D665;1112 116A 11B8; +D666;D666;1112 116A 11B9;D666;1112 116A 11B9; +D667;D667;1112 116A 11BA;D667;1112 116A 11BA; +D668;D668;1112 116A 11BB;D668;1112 116A 11BB; +D669;D669;1112 116A 11BC;D669;1112 116A 11BC; +D66A;D66A;1112 116A 11BD;D66A;1112 116A 11BD; +D66B;D66B;1112 116A 11BE;D66B;1112 116A 11BE; +D66C;D66C;1112 116A 11BF;D66C;1112 116A 11BF; +D66D;D66D;1112 116A 11C0;D66D;1112 116A 11C0; +D66E;D66E;1112 116A 11C1;D66E;1112 116A 11C1; +D66F;D66F;1112 116A 11C2;D66F;1112 116A 11C2; +D670;D670;1112 116B;D670;1112 116B; +D671;D671;1112 116B 11A8;D671;1112 116B 11A8; +D672;D672;1112 116B 11A9;D672;1112 116B 11A9; +D673;D673;1112 116B 11AA;D673;1112 116B 11AA; +D674;D674;1112 116B 11AB;D674;1112 116B 11AB; +D675;D675;1112 116B 11AC;D675;1112 116B 11AC; +D676;D676;1112 116B 11AD;D676;1112 116B 11AD; +D677;D677;1112 116B 11AE;D677;1112 116B 11AE; +D678;D678;1112 116B 11AF;D678;1112 116B 11AF; +D679;D679;1112 116B 11B0;D679;1112 116B 11B0; +D67A;D67A;1112 116B 11B1;D67A;1112 116B 11B1; +D67B;D67B;1112 116B 11B2;D67B;1112 116B 11B2; +D67C;D67C;1112 116B 11B3;D67C;1112 116B 11B3; +D67D;D67D;1112 116B 11B4;D67D;1112 116B 11B4; +D67E;D67E;1112 116B 11B5;D67E;1112 116B 11B5; +D67F;D67F;1112 116B 11B6;D67F;1112 116B 11B6; +D680;D680;1112 116B 11B7;D680;1112 116B 11B7; +D681;D681;1112 116B 11B8;D681;1112 116B 11B8; +D682;D682;1112 116B 11B9;D682;1112 116B 11B9; +D683;D683;1112 116B 11BA;D683;1112 116B 11BA; +D684;D684;1112 116B 11BB;D684;1112 116B 11BB; +D685;D685;1112 116B 11BC;D685;1112 116B 11BC; +D686;D686;1112 116B 11BD;D686;1112 116B 11BD; +D687;D687;1112 116B 11BE;D687;1112 116B 11BE; +D688;D688;1112 116B 11BF;D688;1112 116B 11BF; +D689;D689;1112 116B 11C0;D689;1112 116B 11C0; +D68A;D68A;1112 116B 11C1;D68A;1112 116B 11C1; +D68B;D68B;1112 116B 11C2;D68B;1112 116B 11C2; +D68C;D68C;1112 116C;D68C;1112 116C; +D68D;D68D;1112 116C 11A8;D68D;1112 116C 11A8; +D68E;D68E;1112 116C 11A9;D68E;1112 116C 11A9; +D68F;D68F;1112 116C 11AA;D68F;1112 116C 11AA; +D690;D690;1112 116C 11AB;D690;1112 116C 11AB; +D691;D691;1112 116C 11AC;D691;1112 116C 11AC; +D692;D692;1112 116C 11AD;D692;1112 116C 11AD; +D693;D693;1112 116C 11AE;D693;1112 116C 11AE; +D694;D694;1112 116C 11AF;D694;1112 116C 11AF; +D695;D695;1112 116C 11B0;D695;1112 116C 11B0; +D696;D696;1112 116C 11B1;D696;1112 116C 11B1; +D697;D697;1112 116C 11B2;D697;1112 116C 11B2; +D698;D698;1112 116C 11B3;D698;1112 116C 11B3; +D699;D699;1112 116C 11B4;D699;1112 116C 11B4; +D69A;D69A;1112 116C 11B5;D69A;1112 116C 11B5; +D69B;D69B;1112 116C 11B6;D69B;1112 116C 11B6; +D69C;D69C;1112 116C 11B7;D69C;1112 116C 11B7; +D69D;D69D;1112 116C 11B8;D69D;1112 116C 11B8; +D69E;D69E;1112 116C 11B9;D69E;1112 116C 11B9; +D69F;D69F;1112 116C 11BA;D69F;1112 116C 11BA; +D6A0;D6A0;1112 116C 11BB;D6A0;1112 116C 11BB; +D6A1;D6A1;1112 116C 11BC;D6A1;1112 116C 11BC; +D6A2;D6A2;1112 116C 11BD;D6A2;1112 116C 11BD; +D6A3;D6A3;1112 116C 11BE;D6A3;1112 116C 11BE; +D6A4;D6A4;1112 116C 11BF;D6A4;1112 116C 11BF; +D6A5;D6A5;1112 116C 11C0;D6A5;1112 116C 11C0; +D6A6;D6A6;1112 116C 11C1;D6A6;1112 116C 11C1; +D6A7;D6A7;1112 116C 11C2;D6A7;1112 116C 11C2; +D6A8;D6A8;1112 116D;D6A8;1112 116D; +D6A9;D6A9;1112 116D 11A8;D6A9;1112 116D 11A8; +D6AA;D6AA;1112 116D 11A9;D6AA;1112 116D 11A9; +D6AB;D6AB;1112 116D 11AA;D6AB;1112 116D 11AA; +D6AC;D6AC;1112 116D 11AB;D6AC;1112 116D 11AB; +D6AD;D6AD;1112 116D 11AC;D6AD;1112 116D 11AC; +D6AE;D6AE;1112 116D 11AD;D6AE;1112 116D 11AD; +D6AF;D6AF;1112 116D 11AE;D6AF;1112 116D 11AE; +D6B0;D6B0;1112 116D 11AF;D6B0;1112 116D 11AF; +D6B1;D6B1;1112 116D 11B0;D6B1;1112 116D 11B0; +D6B2;D6B2;1112 116D 11B1;D6B2;1112 116D 11B1; +D6B3;D6B3;1112 116D 11B2;D6B3;1112 116D 11B2; +D6B4;D6B4;1112 116D 11B3;D6B4;1112 116D 11B3; +D6B5;D6B5;1112 116D 11B4;D6B5;1112 116D 11B4; +D6B6;D6B6;1112 116D 11B5;D6B6;1112 116D 11B5; +D6B7;D6B7;1112 116D 11B6;D6B7;1112 116D 11B6; +D6B8;D6B8;1112 116D 11B7;D6B8;1112 116D 11B7; +D6B9;D6B9;1112 116D 11B8;D6B9;1112 116D 11B8; +D6BA;D6BA;1112 116D 11B9;D6BA;1112 116D 11B9; +D6BB;D6BB;1112 116D 11BA;D6BB;1112 116D 11BA; +D6BC;D6BC;1112 116D 11BB;D6BC;1112 116D 11BB; +D6BD;D6BD;1112 116D 11BC;D6BD;1112 116D 11BC; +D6BE;D6BE;1112 116D 11BD;D6BE;1112 116D 11BD; +D6BF;D6BF;1112 116D 11BE;D6BF;1112 116D 11BE; +D6C0;D6C0;1112 116D 11BF;D6C0;1112 116D 11BF; +D6C1;D6C1;1112 116D 11C0;D6C1;1112 116D 11C0; +D6C2;D6C2;1112 116D 11C1;D6C2;1112 116D 11C1; +D6C3;D6C3;1112 116D 11C2;D6C3;1112 116D 11C2; +D6C4;D6C4;1112 116E;D6C4;1112 116E; +D6C5;D6C5;1112 116E 11A8;D6C5;1112 116E 11A8; +D6C6;D6C6;1112 116E 11A9;D6C6;1112 116E 11A9; +D6C7;D6C7;1112 116E 11AA;D6C7;1112 116E 11AA; +D6C8;D6C8;1112 116E 11AB;D6C8;1112 116E 11AB; +D6C9;D6C9;1112 116E 11AC;D6C9;1112 116E 11AC; +D6CA;D6CA;1112 116E 11AD;D6CA;1112 116E 11AD; +D6CB;D6CB;1112 116E 11AE;D6CB;1112 116E 11AE; +D6CC;D6CC;1112 116E 11AF;D6CC;1112 116E 11AF; +D6CD;D6CD;1112 116E 11B0;D6CD;1112 116E 11B0; +D6CE;D6CE;1112 116E 11B1;D6CE;1112 116E 11B1; +D6CF;D6CF;1112 116E 11B2;D6CF;1112 116E 11B2; +D6D0;D6D0;1112 116E 11B3;D6D0;1112 116E 11B3; +D6D1;D6D1;1112 116E 11B4;D6D1;1112 116E 11B4; +D6D2;D6D2;1112 116E 11B5;D6D2;1112 116E 11B5; +D6D3;D6D3;1112 116E 11B6;D6D3;1112 116E 11B6; +D6D4;D6D4;1112 116E 11B7;D6D4;1112 116E 11B7; +D6D5;D6D5;1112 116E 11B8;D6D5;1112 116E 11B8; +D6D6;D6D6;1112 116E 11B9;D6D6;1112 116E 11B9; +D6D7;D6D7;1112 116E 11BA;D6D7;1112 116E 11BA; +D6D8;D6D8;1112 116E 11BB;D6D8;1112 116E 11BB; +D6D9;D6D9;1112 116E 11BC;D6D9;1112 116E 11BC; +D6DA;D6DA;1112 116E 11BD;D6DA;1112 116E 11BD; +D6DB;D6DB;1112 116E 11BE;D6DB;1112 116E 11BE; +D6DC;D6DC;1112 116E 11BF;D6DC;1112 116E 11BF; +D6DD;D6DD;1112 116E 11C0;D6DD;1112 116E 11C0; +D6DE;D6DE;1112 116E 11C1;D6DE;1112 116E 11C1; +D6DF;D6DF;1112 116E 11C2;D6DF;1112 116E 11C2; +D6E0;D6E0;1112 116F;D6E0;1112 116F; +D6E1;D6E1;1112 116F 11A8;D6E1;1112 116F 11A8; +D6E2;D6E2;1112 116F 11A9;D6E2;1112 116F 11A9; +D6E3;D6E3;1112 116F 11AA;D6E3;1112 116F 11AA; +D6E4;D6E4;1112 116F 11AB;D6E4;1112 116F 11AB; +D6E5;D6E5;1112 116F 11AC;D6E5;1112 116F 11AC; +D6E6;D6E6;1112 116F 11AD;D6E6;1112 116F 11AD; +D6E7;D6E7;1112 116F 11AE;D6E7;1112 116F 11AE; +D6E8;D6E8;1112 116F 11AF;D6E8;1112 116F 11AF; +D6E9;D6E9;1112 116F 11B0;D6E9;1112 116F 11B0; +D6EA;D6EA;1112 116F 11B1;D6EA;1112 116F 11B1; +D6EB;D6EB;1112 116F 11B2;D6EB;1112 116F 11B2; +D6EC;D6EC;1112 116F 11B3;D6EC;1112 116F 11B3; +D6ED;D6ED;1112 116F 11B4;D6ED;1112 116F 11B4; +D6EE;D6EE;1112 116F 11B5;D6EE;1112 116F 11B5; +D6EF;D6EF;1112 116F 11B6;D6EF;1112 116F 11B6; +D6F0;D6F0;1112 116F 11B7;D6F0;1112 116F 11B7; +D6F1;D6F1;1112 116F 11B8;D6F1;1112 116F 11B8; +D6F2;D6F2;1112 116F 11B9;D6F2;1112 116F 11B9; +D6F3;D6F3;1112 116F 11BA;D6F3;1112 116F 11BA; +D6F4;D6F4;1112 116F 11BB;D6F4;1112 116F 11BB; +D6F5;D6F5;1112 116F 11BC;D6F5;1112 116F 11BC; +D6F6;D6F6;1112 116F 11BD;D6F6;1112 116F 11BD; +D6F7;D6F7;1112 116F 11BE;D6F7;1112 116F 11BE; +D6F8;D6F8;1112 116F 11BF;D6F8;1112 116F 11BF; +D6F9;D6F9;1112 116F 11C0;D6F9;1112 116F 11C0; +D6FA;D6FA;1112 116F 11C1;D6FA;1112 116F 11C1; +D6FB;D6FB;1112 116F 11C2;D6FB;1112 116F 11C2; +D6FC;D6FC;1112 1170;D6FC;1112 1170; +D6FD;D6FD;1112 1170 11A8;D6FD;1112 1170 11A8; +D6FE;D6FE;1112 1170 11A9;D6FE;1112 1170 11A9; +D6FF;D6FF;1112 1170 11AA;D6FF;1112 1170 11AA; +D700;D700;1112 1170 11AB;D700;1112 1170 11AB; +D701;D701;1112 1170 11AC;D701;1112 1170 11AC; +D702;D702;1112 1170 11AD;D702;1112 1170 11AD; +D703;D703;1112 1170 11AE;D703;1112 1170 11AE; +D704;D704;1112 1170 11AF;D704;1112 1170 11AF; +D705;D705;1112 1170 11B0;D705;1112 1170 11B0; +D706;D706;1112 1170 11B1;D706;1112 1170 11B1; +D707;D707;1112 1170 11B2;D707;1112 1170 11B2; +D708;D708;1112 1170 11B3;D708;1112 1170 11B3; +D709;D709;1112 1170 11B4;D709;1112 1170 11B4; +D70A;D70A;1112 1170 11B5;D70A;1112 1170 11B5; +D70B;D70B;1112 1170 11B6;D70B;1112 1170 11B6; +D70C;D70C;1112 1170 11B7;D70C;1112 1170 11B7; +D70D;D70D;1112 1170 11B8;D70D;1112 1170 11B8; +D70E;D70E;1112 1170 11B9;D70E;1112 1170 11B9; +D70F;D70F;1112 1170 11BA;D70F;1112 1170 11BA; +D710;D710;1112 1170 11BB;D710;1112 1170 11BB; +D711;D711;1112 1170 11BC;D711;1112 1170 11BC; +D712;D712;1112 1170 11BD;D712;1112 1170 11BD; +D713;D713;1112 1170 11BE;D713;1112 1170 11BE; +D714;D714;1112 1170 11BF;D714;1112 1170 11BF; +D715;D715;1112 1170 11C0;D715;1112 1170 11C0; +D716;D716;1112 1170 11C1;D716;1112 1170 11C1; +D717;D717;1112 1170 11C2;D717;1112 1170 11C2; +D718;D718;1112 1171;D718;1112 1171; +D719;D719;1112 1171 11A8;D719;1112 1171 11A8; +D71A;D71A;1112 1171 11A9;D71A;1112 1171 11A9; +D71B;D71B;1112 1171 11AA;D71B;1112 1171 11AA; +D71C;D71C;1112 1171 11AB;D71C;1112 1171 11AB; +D71D;D71D;1112 1171 11AC;D71D;1112 1171 11AC; +D71E;D71E;1112 1171 11AD;D71E;1112 1171 11AD; +D71F;D71F;1112 1171 11AE;D71F;1112 1171 11AE; +D720;D720;1112 1171 11AF;D720;1112 1171 11AF; +D721;D721;1112 1171 11B0;D721;1112 1171 11B0; +D722;D722;1112 1171 11B1;D722;1112 1171 11B1; +D723;D723;1112 1171 11B2;D723;1112 1171 11B2; +D724;D724;1112 1171 11B3;D724;1112 1171 11B3; +D725;D725;1112 1171 11B4;D725;1112 1171 11B4; +D726;D726;1112 1171 11B5;D726;1112 1171 11B5; +D727;D727;1112 1171 11B6;D727;1112 1171 11B6; +D728;D728;1112 1171 11B7;D728;1112 1171 11B7; +D729;D729;1112 1171 11B8;D729;1112 1171 11B8; +D72A;D72A;1112 1171 11B9;D72A;1112 1171 11B9; +D72B;D72B;1112 1171 11BA;D72B;1112 1171 11BA; +D72C;D72C;1112 1171 11BB;D72C;1112 1171 11BB; +D72D;D72D;1112 1171 11BC;D72D;1112 1171 11BC; +D72E;D72E;1112 1171 11BD;D72E;1112 1171 11BD; +D72F;D72F;1112 1171 11BE;D72F;1112 1171 11BE; +D730;D730;1112 1171 11BF;D730;1112 1171 11BF; +D731;D731;1112 1171 11C0;D731;1112 1171 11C0; +D732;D732;1112 1171 11C1;D732;1112 1171 11C1; +D733;D733;1112 1171 11C2;D733;1112 1171 11C2; +D734;D734;1112 1172;D734;1112 1172; +D735;D735;1112 1172 11A8;D735;1112 1172 11A8; +D736;D736;1112 1172 11A9;D736;1112 1172 11A9; +D737;D737;1112 1172 11AA;D737;1112 1172 11AA; +D738;D738;1112 1172 11AB;D738;1112 1172 11AB; +D739;D739;1112 1172 11AC;D739;1112 1172 11AC; +D73A;D73A;1112 1172 11AD;D73A;1112 1172 11AD; +D73B;D73B;1112 1172 11AE;D73B;1112 1172 11AE; +D73C;D73C;1112 1172 11AF;D73C;1112 1172 11AF; +D73D;D73D;1112 1172 11B0;D73D;1112 1172 11B0; +D73E;D73E;1112 1172 11B1;D73E;1112 1172 11B1; +D73F;D73F;1112 1172 11B2;D73F;1112 1172 11B2; +D740;D740;1112 1172 11B3;D740;1112 1172 11B3; +D741;D741;1112 1172 11B4;D741;1112 1172 11B4; +D742;D742;1112 1172 11B5;D742;1112 1172 11B5; +D743;D743;1112 1172 11B6;D743;1112 1172 11B6; +D744;D744;1112 1172 11B7;D744;1112 1172 11B7; +D745;D745;1112 1172 11B8;D745;1112 1172 11B8; +D746;D746;1112 1172 11B9;D746;1112 1172 11B9; +D747;D747;1112 1172 11BA;D747;1112 1172 11BA; +D748;D748;1112 1172 11BB;D748;1112 1172 11BB; +D749;D749;1112 1172 11BC;D749;1112 1172 11BC; +D74A;D74A;1112 1172 11BD;D74A;1112 1172 11BD; +D74B;D74B;1112 1172 11BE;D74B;1112 1172 11BE; +D74C;D74C;1112 1172 11BF;D74C;1112 1172 11BF; +D74D;D74D;1112 1172 11C0;D74D;1112 1172 11C0; +D74E;D74E;1112 1172 11C1;D74E;1112 1172 11C1; +D74F;D74F;1112 1172 11C2;D74F;1112 1172 11C2; +D750;D750;1112 1173;D750;1112 1173; +D751;D751;1112 1173 11A8;D751;1112 1173 11A8; +D752;D752;1112 1173 11A9;D752;1112 1173 11A9; +D753;D753;1112 1173 11AA;D753;1112 1173 11AA; +D754;D754;1112 1173 11AB;D754;1112 1173 11AB; +D755;D755;1112 1173 11AC;D755;1112 1173 11AC; +D756;D756;1112 1173 11AD;D756;1112 1173 11AD; +D757;D757;1112 1173 11AE;D757;1112 1173 11AE; +D758;D758;1112 1173 11AF;D758;1112 1173 11AF; +D759;D759;1112 1173 11B0;D759;1112 1173 11B0; +D75A;D75A;1112 1173 11B1;D75A;1112 1173 11B1; +D75B;D75B;1112 1173 11B2;D75B;1112 1173 11B2; +D75C;D75C;1112 1173 11B3;D75C;1112 1173 11B3; +D75D;D75D;1112 1173 11B4;D75D;1112 1173 11B4; +D75E;D75E;1112 1173 11B5;D75E;1112 1173 11B5; +D75F;D75F;1112 1173 11B6;D75F;1112 1173 11B6; +D760;D760;1112 1173 11B7;D760;1112 1173 11B7; +D761;D761;1112 1173 11B8;D761;1112 1173 11B8; +D762;D762;1112 1173 11B9;D762;1112 1173 11B9; +D763;D763;1112 1173 11BA;D763;1112 1173 11BA; +D764;D764;1112 1173 11BB;D764;1112 1173 11BB; +D765;D765;1112 1173 11BC;D765;1112 1173 11BC; +D766;D766;1112 1173 11BD;D766;1112 1173 11BD; +D767;D767;1112 1173 11BE;D767;1112 1173 11BE; +D768;D768;1112 1173 11BF;D768;1112 1173 11BF; +D769;D769;1112 1173 11C0;D769;1112 1173 11C0; +D76A;D76A;1112 1173 11C1;D76A;1112 1173 11C1; +D76B;D76B;1112 1173 11C2;D76B;1112 1173 11C2; +D76C;D76C;1112 1174;D76C;1112 1174; +D76D;D76D;1112 1174 11A8;D76D;1112 1174 11A8; +D76E;D76E;1112 1174 11A9;D76E;1112 1174 11A9; +D76F;D76F;1112 1174 11AA;D76F;1112 1174 11AA; +D770;D770;1112 1174 11AB;D770;1112 1174 11AB; +D771;D771;1112 1174 11AC;D771;1112 1174 11AC; +D772;D772;1112 1174 11AD;D772;1112 1174 11AD; +D773;D773;1112 1174 11AE;D773;1112 1174 11AE; +D774;D774;1112 1174 11AF;D774;1112 1174 11AF; +D775;D775;1112 1174 11B0;D775;1112 1174 11B0; +D776;D776;1112 1174 11B1;D776;1112 1174 11B1; +D777;D777;1112 1174 11B2;D777;1112 1174 11B2; +D778;D778;1112 1174 11B3;D778;1112 1174 11B3; +D779;D779;1112 1174 11B4;D779;1112 1174 11B4; +D77A;D77A;1112 1174 11B5;D77A;1112 1174 11B5; +D77B;D77B;1112 1174 11B6;D77B;1112 1174 11B6; +D77C;D77C;1112 1174 11B7;D77C;1112 1174 11B7; +D77D;D77D;1112 1174 11B8;D77D;1112 1174 11B8; +D77E;D77E;1112 1174 11B9;D77E;1112 1174 11B9; +D77F;D77F;1112 1174 11BA;D77F;1112 1174 11BA; +D780;D780;1112 1174 11BB;D780;1112 1174 11BB; +D781;D781;1112 1174 11BC;D781;1112 1174 11BC; +D782;D782;1112 1174 11BD;D782;1112 1174 11BD; +D783;D783;1112 1174 11BE;D783;1112 1174 11BE; +D784;D784;1112 1174 11BF;D784;1112 1174 11BF; +D785;D785;1112 1174 11C0;D785;1112 1174 11C0; +D786;D786;1112 1174 11C1;D786;1112 1174 11C1; +D787;D787;1112 1174 11C2;D787;1112 1174 11C2; +D788;D788;1112 1175;D788;1112 1175; +D789;D789;1112 1175 11A8;D789;1112 1175 11A8; +D78A;D78A;1112 1175 11A9;D78A;1112 1175 11A9; +D78B;D78B;1112 1175 11AA;D78B;1112 1175 11AA; +D78C;D78C;1112 1175 11AB;D78C;1112 1175 11AB; +D78D;D78D;1112 1175 11AC;D78D;1112 1175 11AC; +D78E;D78E;1112 1175 11AD;D78E;1112 1175 11AD; +D78F;D78F;1112 1175 11AE;D78F;1112 1175 11AE; +D790;D790;1112 1175 11AF;D790;1112 1175 11AF; +D791;D791;1112 1175 11B0;D791;1112 1175 11B0; +D792;D792;1112 1175 11B1;D792;1112 1175 11B1; +D793;D793;1112 1175 11B2;D793;1112 1175 11B2; +D794;D794;1112 1175 11B3;D794;1112 1175 11B3; +D795;D795;1112 1175 11B4;D795;1112 1175 11B4; +D796;D796;1112 1175 11B5;D796;1112 1175 11B5; +D797;D797;1112 1175 11B6;D797;1112 1175 11B6; +D798;D798;1112 1175 11B7;D798;1112 1175 11B7; +D799;D799;1112 1175 11B8;D799;1112 1175 11B8; +D79A;D79A;1112 1175 11B9;D79A;1112 1175 11B9; +D79B;D79B;1112 1175 11BA;D79B;1112 1175 11BA; +D79C;D79C;1112 1175 11BB;D79C;1112 1175 11BB; +D79D;D79D;1112 1175 11BC;D79D;1112 1175 11BC; +D79E;D79E;1112 1175 11BD;D79E;1112 1175 11BD; +D79F;D79F;1112 1175 11BE;D79F;1112 1175 11BE; +D7A0;D7A0;1112 1175 11BF;D7A0;1112 1175 11BF; +D7A1;D7A1;1112 1175 11C0;D7A1;1112 1175 11C0; +D7A2;D7A2;1112 1175 11C1;D7A2;1112 1175 11C1; +D7A3;D7A3;1112 1175 11C2;D7A3;1112 1175 11C2; +F900;8C48;8C48;8C48;8C48; +F901;66F4;66F4;66F4;66F4; +F902;8ECA;8ECA;8ECA;8ECA; +F903;8CC8;8CC8;8CC8;8CC8; +F904;6ED1;6ED1;6ED1;6ED1; +F905;4E32;4E32;4E32;4E32; +F906;53E5;53E5;53E5;53E5; +F907;9F9C;9F9C;9F9C;9F9C; +F908;9F9C;9F9C;9F9C;9F9C; +F909;5951;5951;5951;5951; +F90A;91D1;91D1;91D1;91D1; +F90B;5587;5587;5587;5587; +F90C;5948;5948;5948;5948; +F90D;61F6;61F6;61F6;61F6; +F90E;7669;7669;7669;7669; +F90F;7F85;7F85;7F85;7F85; +F910;863F;863F;863F;863F; +F911;87BA;87BA;87BA;87BA; +F912;88F8;88F8;88F8;88F8; +F913;908F;908F;908F;908F; +F914;6A02;6A02;6A02;6A02; +F915;6D1B;6D1B;6D1B;6D1B; +F916;70D9;70D9;70D9;70D9; +F917;73DE;73DE;73DE;73DE; +F918;843D;843D;843D;843D; +F919;916A;916A;916A;916A; +F91A;99F1;99F1;99F1;99F1; +F91B;4E82;4E82;4E82;4E82; +F91C;5375;5375;5375;5375; +F91D;6B04;6B04;6B04;6B04; +F91E;721B;721B;721B;721B; +F91F;862D;862D;862D;862D; +F920;9E1E;9E1E;9E1E;9E1E; +F921;5D50;5D50;5D50;5D50; +F922;6FEB;6FEB;6FEB;6FEB; +F923;85CD;85CD;85CD;85CD; +F924;8964;8964;8964;8964; +F925;62C9;62C9;62C9;62C9; +F926;81D8;81D8;81D8;81D8; +F927;881F;881F;881F;881F; +F928;5ECA;5ECA;5ECA;5ECA; +F929;6717;6717;6717;6717; +F92A;6D6A;6D6A;6D6A;6D6A; +F92B;72FC;72FC;72FC;72FC; +F92C;90CE;90CE;90CE;90CE; +F92D;4F86;4F86;4F86;4F86; +F92E;51B7;51B7;51B7;51B7; +F92F;52DE;52DE;52DE;52DE; +F930;64C4;64C4;64C4;64C4; +F931;6AD3;6AD3;6AD3;6AD3; +F932;7210;7210;7210;7210; +F933;76E7;76E7;76E7;76E7; +F934;8001;8001;8001;8001; +F935;8606;8606;8606;8606; +F936;865C;865C;865C;865C; +F937;8DEF;8DEF;8DEF;8DEF; +F938;9732;9732;9732;9732; +F939;9B6F;9B6F;9B6F;9B6F; +F93A;9DFA;9DFA;9DFA;9DFA; +F93B;788C;788C;788C;788C; +F93C;797F;797F;797F;797F; +F93D;7DA0;7DA0;7DA0;7DA0; +F93E;83C9;83C9;83C9;83C9; +F93F;9304;9304;9304;9304; +F940;9E7F;9E7F;9E7F;9E7F; +F941;8AD6;8AD6;8AD6;8AD6; +F942;58DF;58DF;58DF;58DF; +F943;5F04;5F04;5F04;5F04; +F944;7C60;7C60;7C60;7C60; +F945;807E;807E;807E;807E; +F946;7262;7262;7262;7262; +F947;78CA;78CA;78CA;78CA; +F948;8CC2;8CC2;8CC2;8CC2; +F949;96F7;96F7;96F7;96F7; +F94A;58D8;58D8;58D8;58D8; +F94B;5C62;5C62;5C62;5C62; +F94C;6A13;6A13;6A13;6A13; +F94D;6DDA;6DDA;6DDA;6DDA; +F94E;6F0F;6F0F;6F0F;6F0F; +F94F;7D2F;7D2F;7D2F;7D2F; +F950;7E37;7E37;7E37;7E37; +F951;964B;964B;964B;964B; +F952;52D2;52D2;52D2;52D2; +F953;808B;808B;808B;808B; +F954;51DC;51DC;51DC;51DC; +F955;51CC;51CC;51CC;51CC; +F956;7A1C;7A1C;7A1C;7A1C; +F957;7DBE;7DBE;7DBE;7DBE; +F958;83F1;83F1;83F1;83F1; +F959;9675;9675;9675;9675; +F95A;8B80;8B80;8B80;8B80; +F95B;62CF;62CF;62CF;62CF; +F95C;6A02;6A02;6A02;6A02; +F95D;8AFE;8AFE;8AFE;8AFE; +F95E;4E39;4E39;4E39;4E39; +F95F;5BE7;5BE7;5BE7;5BE7; +F960;6012;6012;6012;6012; +F961;7387;7387;7387;7387; +F962;7570;7570;7570;7570; +F963;5317;5317;5317;5317; +F964;78FB;78FB;78FB;78FB; +F965;4FBF;4FBF;4FBF;4FBF; +F966;5FA9;5FA9;5FA9;5FA9; +F967;4E0D;4E0D;4E0D;4E0D; +F968;6CCC;6CCC;6CCC;6CCC; +F969;6578;6578;6578;6578; +F96A;7D22;7D22;7D22;7D22; +F96B;53C3;53C3;53C3;53C3; +F96C;585E;585E;585E;585E; +F96D;7701;7701;7701;7701; +F96E;8449;8449;8449;8449; +F96F;8AAA;8AAA;8AAA;8AAA; +F970;6BBA;6BBA;6BBA;6BBA; +F971;8FB0;8FB0;8FB0;8FB0; +F972;6C88;6C88;6C88;6C88; +F973;62FE;62FE;62FE;62FE; +F974;82E5;82E5;82E5;82E5; +F975;63A0;63A0;63A0;63A0; +F976;7565;7565;7565;7565; +F977;4EAE;4EAE;4EAE;4EAE; +F978;5169;5169;5169;5169; +F979;51C9;51C9;51C9;51C9; +F97A;6881;6881;6881;6881; +F97B;7CE7;7CE7;7CE7;7CE7; +F97C;826F;826F;826F;826F; +F97D;8AD2;8AD2;8AD2;8AD2; +F97E;91CF;91CF;91CF;91CF; +F97F;52F5;52F5;52F5;52F5; +F980;5442;5442;5442;5442; +F981;5973;5973;5973;5973; +F982;5EEC;5EEC;5EEC;5EEC; +F983;65C5;65C5;65C5;65C5; +F984;6FFE;6FFE;6FFE;6FFE; +F985;792A;792A;792A;792A; +F986;95AD;95AD;95AD;95AD; +F987;9A6A;9A6A;9A6A;9A6A; +F988;9E97;9E97;9E97;9E97; +F989;9ECE;9ECE;9ECE;9ECE; +F98A;529B;529B;529B;529B; +F98B;66C6;66C6;66C6;66C6; +F98C;6B77;6B77;6B77;6B77; +F98D;8F62;8F62;8F62;8F62; +F98E;5E74;5E74;5E74;5E74; +F98F;6190;6190;6190;6190; +F990;6200;6200;6200;6200; +F991;649A;649A;649A;649A; +F992;6F23;6F23;6F23;6F23; +F993;7149;7149;7149;7149; +F994;7489;7489;7489;7489; +F995;79CA;79CA;79CA;79CA; +F996;7DF4;7DF4;7DF4;7DF4; +F997;806F;806F;806F;806F; +F998;8F26;8F26;8F26;8F26; +F999;84EE;84EE;84EE;84EE; +F99A;9023;9023;9023;9023; +F99B;934A;934A;934A;934A; +F99C;5217;5217;5217;5217; +F99D;52A3;52A3;52A3;52A3; +F99E;54BD;54BD;54BD;54BD; +F99F;70C8;70C8;70C8;70C8; +F9A0;88C2;88C2;88C2;88C2; +F9A1;8AAA;8AAA;8AAA;8AAA; +F9A2;5EC9;5EC9;5EC9;5EC9; +F9A3;5FF5;5FF5;5FF5;5FF5; +F9A4;637B;637B;637B;637B; +F9A5;6BAE;6BAE;6BAE;6BAE; +F9A6;7C3E;7C3E;7C3E;7C3E; +F9A7;7375;7375;7375;7375; +F9A8;4EE4;4EE4;4EE4;4EE4; +F9A9;56F9;56F9;56F9;56F9; +F9AA;5BE7;5BE7;5BE7;5BE7; +F9AB;5DBA;5DBA;5DBA;5DBA; +F9AC;601C;601C;601C;601C; +F9AD;73B2;73B2;73B2;73B2; +F9AE;7469;7469;7469;7469; +F9AF;7F9A;7F9A;7F9A;7F9A; +F9B0;8046;8046;8046;8046; +F9B1;9234;9234;9234;9234; +F9B2;96F6;96F6;96F6;96F6; +F9B3;9748;9748;9748;9748; +F9B4;9818;9818;9818;9818; +F9B5;4F8B;4F8B;4F8B;4F8B; +F9B6;79AE;79AE;79AE;79AE; +F9B7;91B4;91B4;91B4;91B4; +F9B8;96B8;96B8;96B8;96B8; +F9B9;60E1;60E1;60E1;60E1; +F9BA;4E86;4E86;4E86;4E86; +F9BB;50DA;50DA;50DA;50DA; +F9BC;5BEE;5BEE;5BEE;5BEE; +F9BD;5C3F;5C3F;5C3F;5C3F; +F9BE;6599;6599;6599;6599; +F9BF;6A02;6A02;6A02;6A02; +F9C0;71CE;71CE;71CE;71CE; +F9C1;7642;7642;7642;7642; +F9C2;84FC;84FC;84FC;84FC; +F9C3;907C;907C;907C;907C; +F9C4;9F8D;9F8D;9F8D;9F8D; +F9C5;6688;6688;6688;6688; +F9C6;962E;962E;962E;962E; +F9C7;5289;5289;5289;5289; +F9C8;677B;677B;677B;677B; +F9C9;67F3;67F3;67F3;67F3; +F9CA;6D41;6D41;6D41;6D41; +F9CB;6E9C;6E9C;6E9C;6E9C; +F9CC;7409;7409;7409;7409; +F9CD;7559;7559;7559;7559; +F9CE;786B;786B;786B;786B; +F9CF;7D10;7D10;7D10;7D10; +F9D0;985E;985E;985E;985E; +F9D1;516D;516D;516D;516D; +F9D2;622E;622E;622E;622E; +F9D3;9678;9678;9678;9678; +F9D4;502B;502B;502B;502B; +F9D5;5D19;5D19;5D19;5D19; +F9D6;6DEA;6DEA;6DEA;6DEA; +F9D7;8F2A;8F2A;8F2A;8F2A; +F9D8;5F8B;5F8B;5F8B;5F8B; +F9D9;6144;6144;6144;6144; +F9DA;6817;6817;6817;6817; +F9DB;7387;7387;7387;7387; +F9DC;9686;9686;9686;9686; +F9DD;5229;5229;5229;5229; +F9DE;540F;540F;540F;540F; +F9DF;5C65;5C65;5C65;5C65; +F9E0;6613;6613;6613;6613; +F9E1;674E;674E;674E;674E; +F9E2;68A8;68A8;68A8;68A8; +F9E3;6CE5;6CE5;6CE5;6CE5; +F9E4;7406;7406;7406;7406; +F9E5;75E2;75E2;75E2;75E2; +F9E6;7F79;7F79;7F79;7F79; +F9E7;88CF;88CF;88CF;88CF; +F9E8;88E1;88E1;88E1;88E1; +F9E9;91CC;91CC;91CC;91CC; +F9EA;96E2;96E2;96E2;96E2; +F9EB;533F;533F;533F;533F; +F9EC;6EBA;6EBA;6EBA;6EBA; +F9ED;541D;541D;541D;541D; +F9EE;71D0;71D0;71D0;71D0; +F9EF;7498;7498;7498;7498; +F9F0;85FA;85FA;85FA;85FA; +F9F1;96A3;96A3;96A3;96A3; +F9F2;9C57;9C57;9C57;9C57; +F9F3;9E9F;9E9F;9E9F;9E9F; +F9F4;6797;6797;6797;6797; +F9F5;6DCB;6DCB;6DCB;6DCB; +F9F6;81E8;81E8;81E8;81E8; +F9F7;7ACB;7ACB;7ACB;7ACB; +F9F8;7B20;7B20;7B20;7B20; +F9F9;7C92;7C92;7C92;7C92; +F9FA;72C0;72C0;72C0;72C0; +F9FB;7099;7099;7099;7099; +F9FC;8B58;8B58;8B58;8B58; +F9FD;4EC0;4EC0;4EC0;4EC0; +F9FE;8336;8336;8336;8336; +F9FF;523A;523A;523A;523A; +FA00;5207;5207;5207;5207; +FA01;5EA6;5EA6;5EA6;5EA6; +FA02;62D3;62D3;62D3;62D3; +FA03;7CD6;7CD6;7CD6;7CD6; +FA04;5B85;5B85;5B85;5B85; +FA05;6D1E;6D1E;6D1E;6D1E; +FA06;66B4;66B4;66B4;66B4; +FA07;8F3B;8F3B;8F3B;8F3B; +FA08;884C;884C;884C;884C; +FA09;964D;964D;964D;964D; +FA0A;898B;898B;898B;898B; +FA0B;5ED3;5ED3;5ED3;5ED3; +FA0C;5140;5140;5140;5140; +FA0D;55C0;55C0;55C0;55C0; +FA10;585A;585A;585A;585A; +FA12;6674;6674;6674;6674; +FA15;51DE;51DE;51DE;51DE; +FA16;732A;732A;732A;732A; +FA17;76CA;76CA;76CA;76CA; +FA18;793C;793C;793C;793C; +FA19;795E;795E;795E;795E; +FA1A;7965;7965;7965;7965; +FA1B;798F;798F;798F;798F; +FA1C;9756;9756;9756;9756; +FA1D;7CBE;7CBE;7CBE;7CBE; +FA1E;7FBD;7FBD;7FBD;7FBD; +FA20;8612;8612;8612;8612; +FA22;8AF8;8AF8;8AF8;8AF8; +FA25;9038;9038;9038;9038; +FA26;90FD;90FD;90FD;90FD; +FA2A;98EF;98EF;98EF;98EF; +FA2B;98FC;98FC;98FC;98FC; +FA2C;9928;9928;9928;9928; +FA2D;9DB4;9DB4;9DB4;9DB4; +FA30;4FAE;4FAE;4FAE;4FAE; +FA31;50E7;50E7;50E7;50E7; +FA32;514D;514D;514D;514D; +FA33;52C9;52C9;52C9;52C9; +FA34;52E4;52E4;52E4;52E4; +FA35;5351;5351;5351;5351; +FA36;559D;559D;559D;559D; +FA37;5606;5606;5606;5606; +FA38;5668;5668;5668;5668; +FA39;5840;5840;5840;5840; +FA3A;58A8;58A8;58A8;58A8; +FA3B;5C64;5C64;5C64;5C64; +FA3C;5C6E;5C6E;5C6E;5C6E; +FA3D;6094;6094;6094;6094; +FA3E;6168;6168;6168;6168; +FA3F;618E;618E;618E;618E; +FA40;61F2;61F2;61F2;61F2; +FA41;654F;654F;654F;654F; +FA42;65E2;65E2;65E2;65E2; +FA43;6691;6691;6691;6691; +FA44;6885;6885;6885;6885; +FA45;6D77;6D77;6D77;6D77; +FA46;6E1A;6E1A;6E1A;6E1A; +FA47;6F22;6F22;6F22;6F22; +FA48;716E;716E;716E;716E; +FA49;722B;722B;722B;722B; +FA4A;7422;7422;7422;7422; +FA4B;7891;7891;7891;7891; +FA4C;793E;793E;793E;793E; +FA4D;7949;7949;7949;7949; +FA4E;7948;7948;7948;7948; +FA4F;7950;7950;7950;7950; +FA50;7956;7956;7956;7956; +FA51;795D;795D;795D;795D; +FA52;798D;798D;798D;798D; +FA53;798E;798E;798E;798E; +FA54;7A40;7A40;7A40;7A40; +FA55;7A81;7A81;7A81;7A81; +FA56;7BC0;7BC0;7BC0;7BC0; +FA57;7DF4;7DF4;7DF4;7DF4; +FA58;7E09;7E09;7E09;7E09; +FA59;7E41;7E41;7E41;7E41; +FA5A;7F72;7F72;7F72;7F72; +FA5B;8005;8005;8005;8005; +FA5C;81ED;81ED;81ED;81ED; +FA5D;8279;8279;8279;8279; +FA5E;8279;8279;8279;8279; +FA5F;8457;8457;8457;8457; +FA60;8910;8910;8910;8910; +FA61;8996;8996;8996;8996; +FA62;8B01;8B01;8B01;8B01; +FA63;8B39;8B39;8B39;8B39; +FA64;8CD3;8CD3;8CD3;8CD3; +FA65;8D08;8D08;8D08;8D08; +FA66;8FB6;8FB6;8FB6;8FB6; +FA67;9038;9038;9038;9038; +FA68;96E3;96E3;96E3;96E3; +FA69;97FF;97FF;97FF;97FF; +FA6A;983B;983B;983B;983B; +FA70;4E26;4E26;4E26;4E26; +FA71;51B5;51B5;51B5;51B5; +FA72;5168;5168;5168;5168; +FA73;4F80;4F80;4F80;4F80; +FA74;5145;5145;5145;5145; +FA75;5180;5180;5180;5180; +FA76;52C7;52C7;52C7;52C7; +FA77;52FA;52FA;52FA;52FA; +FA78;559D;559D;559D;559D; +FA79;5555;5555;5555;5555; +FA7A;5599;5599;5599;5599; +FA7B;55E2;55E2;55E2;55E2; +FA7C;585A;585A;585A;585A; +FA7D;58B3;58B3;58B3;58B3; +FA7E;5944;5944;5944;5944; +FA7F;5954;5954;5954;5954; +FA80;5A62;5A62;5A62;5A62; +FA81;5B28;5B28;5B28;5B28; +FA82;5ED2;5ED2;5ED2;5ED2; +FA83;5ED9;5ED9;5ED9;5ED9; +FA84;5F69;5F69;5F69;5F69; +FA85;5FAD;5FAD;5FAD;5FAD; +FA86;60D8;60D8;60D8;60D8; +FA87;614E;614E;614E;614E; +FA88;6108;6108;6108;6108; +FA89;618E;618E;618E;618E; +FA8A;6160;6160;6160;6160; +FA8B;61F2;61F2;61F2;61F2; +FA8C;6234;6234;6234;6234; +FA8D;63C4;63C4;63C4;63C4; +FA8E;641C;641C;641C;641C; +FA8F;6452;6452;6452;6452; +FA90;6556;6556;6556;6556; +FA91;6674;6674;6674;6674; +FA92;6717;6717;6717;6717; +FA93;671B;671B;671B;671B; +FA94;6756;6756;6756;6756; +FA95;6B79;6B79;6B79;6B79; +FA96;6BBA;6BBA;6BBA;6BBA; +FA97;6D41;6D41;6D41;6D41; +FA98;6EDB;6EDB;6EDB;6EDB; +FA99;6ECB;6ECB;6ECB;6ECB; +FA9A;6F22;6F22;6F22;6F22; +FA9B;701E;701E;701E;701E; +FA9C;716E;716E;716E;716E; +FA9D;77A7;77A7;77A7;77A7; +FA9E;7235;7235;7235;7235; +FA9F;72AF;72AF;72AF;72AF; +FAA0;732A;732A;732A;732A; +FAA1;7471;7471;7471;7471; +FAA2;7506;7506;7506;7506; +FAA3;753B;753B;753B;753B; +FAA4;761D;761D;761D;761D; +FAA5;761F;761F;761F;761F; +FAA6;76CA;76CA;76CA;76CA; +FAA7;76DB;76DB;76DB;76DB; +FAA8;76F4;76F4;76F4;76F4; +FAA9;774A;774A;774A;774A; +FAAA;7740;7740;7740;7740; +FAAB;78CC;78CC;78CC;78CC; +FAAC;7AB1;7AB1;7AB1;7AB1; +FAAD;7BC0;7BC0;7BC0;7BC0; +FAAE;7C7B;7C7B;7C7B;7C7B; +FAAF;7D5B;7D5B;7D5B;7D5B; +FAB0;7DF4;7DF4;7DF4;7DF4; +FAB1;7F3E;7F3E;7F3E;7F3E; +FAB2;8005;8005;8005;8005; +FAB3;8352;8352;8352;8352; +FAB4;83EF;83EF;83EF;83EF; +FAB5;8779;8779;8779;8779; +FAB6;8941;8941;8941;8941; +FAB7;8986;8986;8986;8986; +FAB8;8996;8996;8996;8996; +FAB9;8ABF;8ABF;8ABF;8ABF; +FABA;8AF8;8AF8;8AF8;8AF8; +FABB;8ACB;8ACB;8ACB;8ACB; +FABC;8B01;8B01;8B01;8B01; +FABD;8AFE;8AFE;8AFE;8AFE; +FABE;8AED;8AED;8AED;8AED; +FABF;8B39;8B39;8B39;8B39; +FAC0;8B8A;8B8A;8B8A;8B8A; +FAC1;8D08;8D08;8D08;8D08; +FAC2;8F38;8F38;8F38;8F38; +FAC3;9072;9072;9072;9072; +FAC4;9199;9199;9199;9199; +FAC5;9276;9276;9276;9276; +FAC6;967C;967C;967C;967C; +FAC7;96E3;96E3;96E3;96E3; +FAC8;9756;9756;9756;9756; +FAC9;97DB;97DB;97DB;97DB; +FACA;97FF;97FF;97FF;97FF; +FACB;980B;980B;980B;980B; +FACC;983B;983B;983B;983B; +FACD;9B12;9B12;9B12;9B12; +FACE;9F9C;9F9C;9F9C;9F9C; +FACF;2284A;2284A;2284A;2284A; +FAD0;22844;22844;22844;22844; +FAD1;233D5;233D5;233D5;233D5; +FAD2;3B9D;3B9D;3B9D;3B9D; +FAD3;4018;4018;4018;4018; +FAD4;4039;4039;4039;4039; +FAD5;25249;25249;25249;25249; +FAD6;25CD0;25CD0;25CD0;25CD0; +FAD7;27ED3;27ED3;27ED3;27ED3; +FAD8;9F43;9F43;9F43;9F43; +FAD9;9F8E;9F8E;9F8E;9F8E; +FB00;FB00;FB00;0066 0066;0066 0066; +FB01;FB01;FB01;0066 0069;0066 0069; +FB02;FB02;FB02;0066 006C;0066 006C; +FB03;FB03;FB03;0066 0066 0069;0066 0066 0069; +FB04;FB04;FB04;0066 0066 006C;0066 0066 006C; +FB05;FB05;FB05;0073 0074;0073 0074; +FB06;FB06;FB06;0073 0074;0073 0074; +FB13;FB13;FB13;0574 0576;0574 0576; +FB14;FB14;FB14;0574 0565;0574 0565; +FB15;FB15;FB15;0574 056B;0574 056B; +FB16;FB16;FB16;057E 0576;057E 0576; +FB17;FB17;FB17;0574 056D;0574 056D; +FB1D;05D9 05B4;05D9 05B4;05D9 05B4;05D9 05B4; +FB1F;05F2 05B7;05F2 05B7;05F2 05B7;05F2 05B7; +FB20;FB20;FB20;05E2;05E2; +FB21;FB21;FB21;05D0;05D0; +FB22;FB22;FB22;05D3;05D3; +FB23;FB23;FB23;05D4;05D4; +FB24;FB24;FB24;05DB;05DB; +FB25;FB25;FB25;05DC;05DC; +FB26;FB26;FB26;05DD;05DD; +FB27;FB27;FB27;05E8;05E8; +FB28;FB28;FB28;05EA;05EA; +FB29;FB29;FB29;002B;002B; +FB2A;05E9 05C1;05E9 05C1;05E9 05C1;05E9 05C1; +FB2B;05E9 05C2;05E9 05C2;05E9 05C2;05E9 05C2; +FB2C;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1;05E9 05BC 05C1; +FB2D;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2;05E9 05BC 05C2; +FB2E;05D0 05B7;05D0 05B7;05D0 05B7;05D0 05B7; +FB2F;05D0 05B8;05D0 05B8;05D0 05B8;05D0 05B8; +FB30;05D0 05BC;05D0 05BC;05D0 05BC;05D0 05BC; +FB31;05D1 05BC;05D1 05BC;05D1 05BC;05D1 05BC; +FB32;05D2 05BC;05D2 05BC;05D2 05BC;05D2 05BC; +FB33;05D3 05BC;05D3 05BC;05D3 05BC;05D3 05BC; +FB34;05D4 05BC;05D4 05BC;05D4 05BC;05D4 05BC; +FB35;05D5 05BC;05D5 05BC;05D5 05BC;05D5 05BC; +FB36;05D6 05BC;05D6 05BC;05D6 05BC;05D6 05BC; +FB38;05D8 05BC;05D8 05BC;05D8 05BC;05D8 05BC; +FB39;05D9 05BC;05D9 05BC;05D9 05BC;05D9 05BC; +FB3A;05DA 05BC;05DA 05BC;05DA 05BC;05DA 05BC; +FB3B;05DB 05BC;05DB 05BC;05DB 05BC;05DB 05BC; +FB3C;05DC 05BC;05DC 05BC;05DC 05BC;05DC 05BC; +FB3E;05DE 05BC;05DE 05BC;05DE 05BC;05DE 05BC; +FB40;05E0 05BC;05E0 05BC;05E0 05BC;05E0 05BC; +FB41;05E1 05BC;05E1 05BC;05E1 05BC;05E1 05BC; +FB43;05E3 05BC;05E3 05BC;05E3 05BC;05E3 05BC; +FB44;05E4 05BC;05E4 05BC;05E4 05BC;05E4 05BC; +FB46;05E6 05BC;05E6 05BC;05E6 05BC;05E6 05BC; +FB47;05E7 05BC;05E7 05BC;05E7 05BC;05E7 05BC; +FB48;05E8 05BC;05E8 05BC;05E8 05BC;05E8 05BC; +FB49;05E9 05BC;05E9 05BC;05E9 05BC;05E9 05BC; +FB4A;05EA 05BC;05EA 05BC;05EA 05BC;05EA 05BC; +FB4B;05D5 05B9;05D5 05B9;05D5 05B9;05D5 05B9; +FB4C;05D1 05BF;05D1 05BF;05D1 05BF;05D1 05BF; +FB4D;05DB 05BF;05DB 05BF;05DB 05BF;05DB 05BF; +FB4E;05E4 05BF;05E4 05BF;05E4 05BF;05E4 05BF; +FB4F;FB4F;FB4F;05D0 05DC;05D0 05DC; +FB50;FB50;FB50;0671;0671; +FB51;FB51;FB51;0671;0671; +FB52;FB52;FB52;067B;067B; +FB53;FB53;FB53;067B;067B; +FB54;FB54;FB54;067B;067B; +FB55;FB55;FB55;067B;067B; +FB56;FB56;FB56;067E;067E; +FB57;FB57;FB57;067E;067E; +FB58;FB58;FB58;067E;067E; +FB59;FB59;FB59;067E;067E; +FB5A;FB5A;FB5A;0680;0680; +FB5B;FB5B;FB5B;0680;0680; +FB5C;FB5C;FB5C;0680;0680; +FB5D;FB5D;FB5D;0680;0680; +FB5E;FB5E;FB5E;067A;067A; +FB5F;FB5F;FB5F;067A;067A; +FB60;FB60;FB60;067A;067A; +FB61;FB61;FB61;067A;067A; +FB62;FB62;FB62;067F;067F; +FB63;FB63;FB63;067F;067F; +FB64;FB64;FB64;067F;067F; +FB65;FB65;FB65;067F;067F; +FB66;FB66;FB66;0679;0679; +FB67;FB67;FB67;0679;0679; +FB68;FB68;FB68;0679;0679; +FB69;FB69;FB69;0679;0679; +FB6A;FB6A;FB6A;06A4;06A4; +FB6B;FB6B;FB6B;06A4;06A4; +FB6C;FB6C;FB6C;06A4;06A4; +FB6D;FB6D;FB6D;06A4;06A4; +FB6E;FB6E;FB6E;06A6;06A6; +FB6F;FB6F;FB6F;06A6;06A6; +FB70;FB70;FB70;06A6;06A6; +FB71;FB71;FB71;06A6;06A6; +FB72;FB72;FB72;0684;0684; +FB73;FB73;FB73;0684;0684; +FB74;FB74;FB74;0684;0684; +FB75;FB75;FB75;0684;0684; +FB76;FB76;FB76;0683;0683; +FB77;FB77;FB77;0683;0683; +FB78;FB78;FB78;0683;0683; +FB79;FB79;FB79;0683;0683; +FB7A;FB7A;FB7A;0686;0686; +FB7B;FB7B;FB7B;0686;0686; +FB7C;FB7C;FB7C;0686;0686; +FB7D;FB7D;FB7D;0686;0686; +FB7E;FB7E;FB7E;0687;0687; +FB7F;FB7F;FB7F;0687;0687; +FB80;FB80;FB80;0687;0687; +FB81;FB81;FB81;0687;0687; +FB82;FB82;FB82;068D;068D; +FB83;FB83;FB83;068D;068D; +FB84;FB84;FB84;068C;068C; +FB85;FB85;FB85;068C;068C; +FB86;FB86;FB86;068E;068E; +FB87;FB87;FB87;068E;068E; +FB88;FB88;FB88;0688;0688; +FB89;FB89;FB89;0688;0688; +FB8A;FB8A;FB8A;0698;0698; +FB8B;FB8B;FB8B;0698;0698; +FB8C;FB8C;FB8C;0691;0691; +FB8D;FB8D;FB8D;0691;0691; +FB8E;FB8E;FB8E;06A9;06A9; +FB8F;FB8F;FB8F;06A9;06A9; +FB90;FB90;FB90;06A9;06A9; +FB91;FB91;FB91;06A9;06A9; +FB92;FB92;FB92;06AF;06AF; +FB93;FB93;FB93;06AF;06AF; +FB94;FB94;FB94;06AF;06AF; +FB95;FB95;FB95;06AF;06AF; +FB96;FB96;FB96;06B3;06B3; +FB97;FB97;FB97;06B3;06B3; +FB98;FB98;FB98;06B3;06B3; +FB99;FB99;FB99;06B3;06B3; +FB9A;FB9A;FB9A;06B1;06B1; +FB9B;FB9B;FB9B;06B1;06B1; +FB9C;FB9C;FB9C;06B1;06B1; +FB9D;FB9D;FB9D;06B1;06B1; +FB9E;FB9E;FB9E;06BA;06BA; +FB9F;FB9F;FB9F;06BA;06BA; +FBA0;FBA0;FBA0;06BB;06BB; +FBA1;FBA1;FBA1;06BB;06BB; +FBA2;FBA2;FBA2;06BB;06BB; +FBA3;FBA3;FBA3;06BB;06BB; +FBA4;FBA4;FBA4;06C0;06D5 0654; +FBA5;FBA5;FBA5;06C0;06D5 0654; +FBA6;FBA6;FBA6;06C1;06C1; +FBA7;FBA7;FBA7;06C1;06C1; +FBA8;FBA8;FBA8;06C1;06C1; +FBA9;FBA9;FBA9;06C1;06C1; +FBAA;FBAA;FBAA;06BE;06BE; +FBAB;FBAB;FBAB;06BE;06BE; +FBAC;FBAC;FBAC;06BE;06BE; +FBAD;FBAD;FBAD;06BE;06BE; +FBAE;FBAE;FBAE;06D2;06D2; +FBAF;FBAF;FBAF;06D2;06D2; +FBB0;FBB0;FBB0;06D3;06D2 0654; +FBB1;FBB1;FBB1;06D3;06D2 0654; +FBD3;FBD3;FBD3;06AD;06AD; +FBD4;FBD4;FBD4;06AD;06AD; +FBD5;FBD5;FBD5;06AD;06AD; +FBD6;FBD6;FBD6;06AD;06AD; +FBD7;FBD7;FBD7;06C7;06C7; +FBD8;FBD8;FBD8;06C7;06C7; +FBD9;FBD9;FBD9;06C6;06C6; +FBDA;FBDA;FBDA;06C6;06C6; +FBDB;FBDB;FBDB;06C8;06C8; +FBDC;FBDC;FBDC;06C8;06C8; +FBDD;FBDD;FBDD;06C7 0674;06C7 0674; +FBDE;FBDE;FBDE;06CB;06CB; +FBDF;FBDF;FBDF;06CB;06CB; +FBE0;FBE0;FBE0;06C5;06C5; +FBE1;FBE1;FBE1;06C5;06C5; +FBE2;FBE2;FBE2;06C9;06C9; +FBE3;FBE3;FBE3;06C9;06C9; +FBE4;FBE4;FBE4;06D0;06D0; +FBE5;FBE5;FBE5;06D0;06D0; +FBE6;FBE6;FBE6;06D0;06D0; +FBE7;FBE7;FBE7;06D0;06D0; +FBE8;FBE8;FBE8;0649;0649; +FBE9;FBE9;FBE9;0649;0649; +FBEA;FBEA;FBEA;0626 0627;064A 0654 0627; +FBEB;FBEB;FBEB;0626 0627;064A 0654 0627; +FBEC;FBEC;FBEC;0626 06D5;064A 0654 06D5; +FBED;FBED;FBED;0626 06D5;064A 0654 06D5; +FBEE;FBEE;FBEE;0626 0648;064A 0654 0648; +FBEF;FBEF;FBEF;0626 0648;064A 0654 0648; +FBF0;FBF0;FBF0;0626 06C7;064A 0654 06C7; +FBF1;FBF1;FBF1;0626 06C7;064A 0654 06C7; +FBF2;FBF2;FBF2;0626 06C6;064A 0654 06C6; +FBF3;FBF3;FBF3;0626 06C6;064A 0654 06C6; +FBF4;FBF4;FBF4;0626 06C8;064A 0654 06C8; +FBF5;FBF5;FBF5;0626 06C8;064A 0654 06C8; +FBF6;FBF6;FBF6;0626 06D0;064A 0654 06D0; +FBF7;FBF7;FBF7;0626 06D0;064A 0654 06D0; +FBF8;FBF8;FBF8;0626 06D0;064A 0654 06D0; +FBF9;FBF9;FBF9;0626 0649;064A 0654 0649; +FBFA;FBFA;FBFA;0626 0649;064A 0654 0649; +FBFB;FBFB;FBFB;0626 0649;064A 0654 0649; +FBFC;FBFC;FBFC;06CC;06CC; +FBFD;FBFD;FBFD;06CC;06CC; +FBFE;FBFE;FBFE;06CC;06CC; +FBFF;FBFF;FBFF;06CC;06CC; +FC00;FC00;FC00;0626 062C;064A 0654 062C; +FC01;FC01;FC01;0626 062D;064A 0654 062D; +FC02;FC02;FC02;0626 0645;064A 0654 0645; +FC03;FC03;FC03;0626 0649;064A 0654 0649; +FC04;FC04;FC04;0626 064A;064A 0654 064A; +FC05;FC05;FC05;0628 062C;0628 062C; +FC06;FC06;FC06;0628 062D;0628 062D; +FC07;FC07;FC07;0628 062E;0628 062E; +FC08;FC08;FC08;0628 0645;0628 0645; +FC09;FC09;FC09;0628 0649;0628 0649; +FC0A;FC0A;FC0A;0628 064A;0628 064A; +FC0B;FC0B;FC0B;062A 062C;062A 062C; +FC0C;FC0C;FC0C;062A 062D;062A 062D; +FC0D;FC0D;FC0D;062A 062E;062A 062E; +FC0E;FC0E;FC0E;062A 0645;062A 0645; +FC0F;FC0F;FC0F;062A 0649;062A 0649; +FC10;FC10;FC10;062A 064A;062A 064A; +FC11;FC11;FC11;062B 062C;062B 062C; +FC12;FC12;FC12;062B 0645;062B 0645; +FC13;FC13;FC13;062B 0649;062B 0649; +FC14;FC14;FC14;062B 064A;062B 064A; +FC15;FC15;FC15;062C 062D;062C 062D; +FC16;FC16;FC16;062C 0645;062C 0645; +FC17;FC17;FC17;062D 062C;062D 062C; +FC18;FC18;FC18;062D 0645;062D 0645; +FC19;FC19;FC19;062E 062C;062E 062C; +FC1A;FC1A;FC1A;062E 062D;062E 062D; +FC1B;FC1B;FC1B;062E 0645;062E 0645; +FC1C;FC1C;FC1C;0633 062C;0633 062C; +FC1D;FC1D;FC1D;0633 062D;0633 062D; +FC1E;FC1E;FC1E;0633 062E;0633 062E; +FC1F;FC1F;FC1F;0633 0645;0633 0645; +FC20;FC20;FC20;0635 062D;0635 062D; +FC21;FC21;FC21;0635 0645;0635 0645; +FC22;FC22;FC22;0636 062C;0636 062C; +FC23;FC23;FC23;0636 062D;0636 062D; +FC24;FC24;FC24;0636 062E;0636 062E; +FC25;FC25;FC25;0636 0645;0636 0645; +FC26;FC26;FC26;0637 062D;0637 062D; +FC27;FC27;FC27;0637 0645;0637 0645; +FC28;FC28;FC28;0638 0645;0638 0645; +FC29;FC29;FC29;0639 062C;0639 062C; +FC2A;FC2A;FC2A;0639 0645;0639 0645; +FC2B;FC2B;FC2B;063A 062C;063A 062C; +FC2C;FC2C;FC2C;063A 0645;063A 0645; +FC2D;FC2D;FC2D;0641 062C;0641 062C; +FC2E;FC2E;FC2E;0641 062D;0641 062D; +FC2F;FC2F;FC2F;0641 062E;0641 062E; +FC30;FC30;FC30;0641 0645;0641 0645; +FC31;FC31;FC31;0641 0649;0641 0649; +FC32;FC32;FC32;0641 064A;0641 064A; +FC33;FC33;FC33;0642 062D;0642 062D; +FC34;FC34;FC34;0642 0645;0642 0645; +FC35;FC35;FC35;0642 0649;0642 0649; +FC36;FC36;FC36;0642 064A;0642 064A; +FC37;FC37;FC37;0643 0627;0643 0627; +FC38;FC38;FC38;0643 062C;0643 062C; +FC39;FC39;FC39;0643 062D;0643 062D; +FC3A;FC3A;FC3A;0643 062E;0643 062E; +FC3B;FC3B;FC3B;0643 0644;0643 0644; +FC3C;FC3C;FC3C;0643 0645;0643 0645; +FC3D;FC3D;FC3D;0643 0649;0643 0649; +FC3E;FC3E;FC3E;0643 064A;0643 064A; +FC3F;FC3F;FC3F;0644 062C;0644 062C; +FC40;FC40;FC40;0644 062D;0644 062D; +FC41;FC41;FC41;0644 062E;0644 062E; +FC42;FC42;FC42;0644 0645;0644 0645; +FC43;FC43;FC43;0644 0649;0644 0649; +FC44;FC44;FC44;0644 064A;0644 064A; +FC45;FC45;FC45;0645 062C;0645 062C; +FC46;FC46;FC46;0645 062D;0645 062D; +FC47;FC47;FC47;0645 062E;0645 062E; +FC48;FC48;FC48;0645 0645;0645 0645; +FC49;FC49;FC49;0645 0649;0645 0649; +FC4A;FC4A;FC4A;0645 064A;0645 064A; +FC4B;FC4B;FC4B;0646 062C;0646 062C; +FC4C;FC4C;FC4C;0646 062D;0646 062D; +FC4D;FC4D;FC4D;0646 062E;0646 062E; +FC4E;FC4E;FC4E;0646 0645;0646 0645; +FC4F;FC4F;FC4F;0646 0649;0646 0649; +FC50;FC50;FC50;0646 064A;0646 064A; +FC51;FC51;FC51;0647 062C;0647 062C; +FC52;FC52;FC52;0647 0645;0647 0645; +FC53;FC53;FC53;0647 0649;0647 0649; +FC54;FC54;FC54;0647 064A;0647 064A; +FC55;FC55;FC55;064A 062C;064A 062C; +FC56;FC56;FC56;064A 062D;064A 062D; +FC57;FC57;FC57;064A 062E;064A 062E; +FC58;FC58;FC58;064A 0645;064A 0645; +FC59;FC59;FC59;064A 0649;064A 0649; +FC5A;FC5A;FC5A;064A 064A;064A 064A; +FC5B;FC5B;FC5B;0630 0670;0630 0670; +FC5C;FC5C;FC5C;0631 0670;0631 0670; +FC5D;FC5D;FC5D;0649 0670;0649 0670; +FC5E;FC5E;FC5E;0020 064C 0651;0020 064C 0651; +FC5F;FC5F;FC5F;0020 064D 0651;0020 064D 0651; +FC60;FC60;FC60;0020 064E 0651;0020 064E 0651; +FC61;FC61;FC61;0020 064F 0651;0020 064F 0651; +FC62;FC62;FC62;0020 0650 0651;0020 0650 0651; +FC63;FC63;FC63;0020 0651 0670;0020 0651 0670; +FC64;FC64;FC64;0626 0631;064A 0654 0631; +FC65;FC65;FC65;0626 0632;064A 0654 0632; +FC66;FC66;FC66;0626 0645;064A 0654 0645; +FC67;FC67;FC67;0626 0646;064A 0654 0646; +FC68;FC68;FC68;0626 0649;064A 0654 0649; +FC69;FC69;FC69;0626 064A;064A 0654 064A; +FC6A;FC6A;FC6A;0628 0631;0628 0631; +FC6B;FC6B;FC6B;0628 0632;0628 0632; +FC6C;FC6C;FC6C;0628 0645;0628 0645; +FC6D;FC6D;FC6D;0628 0646;0628 0646; +FC6E;FC6E;FC6E;0628 0649;0628 0649; +FC6F;FC6F;FC6F;0628 064A;0628 064A; +FC70;FC70;FC70;062A 0631;062A 0631; +FC71;FC71;FC71;062A 0632;062A 0632; +FC72;FC72;FC72;062A 0645;062A 0645; +FC73;FC73;FC73;062A 0646;062A 0646; +FC74;FC74;FC74;062A 0649;062A 0649; +FC75;FC75;FC75;062A 064A;062A 064A; +FC76;FC76;FC76;062B 0631;062B 0631; +FC77;FC77;FC77;062B 0632;062B 0632; +FC78;FC78;FC78;062B 0645;062B 0645; +FC79;FC79;FC79;062B 0646;062B 0646; +FC7A;FC7A;FC7A;062B 0649;062B 0649; +FC7B;FC7B;FC7B;062B 064A;062B 064A; +FC7C;FC7C;FC7C;0641 0649;0641 0649; +FC7D;FC7D;FC7D;0641 064A;0641 064A; +FC7E;FC7E;FC7E;0642 0649;0642 0649; +FC7F;FC7F;FC7F;0642 064A;0642 064A; +FC80;FC80;FC80;0643 0627;0643 0627; +FC81;FC81;FC81;0643 0644;0643 0644; +FC82;FC82;FC82;0643 0645;0643 0645; +FC83;FC83;FC83;0643 0649;0643 0649; +FC84;FC84;FC84;0643 064A;0643 064A; +FC85;FC85;FC85;0644 0645;0644 0645; +FC86;FC86;FC86;0644 0649;0644 0649; +FC87;FC87;FC87;0644 064A;0644 064A; +FC88;FC88;FC88;0645 0627;0645 0627; +FC89;FC89;FC89;0645 0645;0645 0645; +FC8A;FC8A;FC8A;0646 0631;0646 0631; +FC8B;FC8B;FC8B;0646 0632;0646 0632; +FC8C;FC8C;FC8C;0646 0645;0646 0645; +FC8D;FC8D;FC8D;0646 0646;0646 0646; +FC8E;FC8E;FC8E;0646 0649;0646 0649; +FC8F;FC8F;FC8F;0646 064A;0646 064A; +FC90;FC90;FC90;0649 0670;0649 0670; +FC91;FC91;FC91;064A 0631;064A 0631; +FC92;FC92;FC92;064A 0632;064A 0632; +FC93;FC93;FC93;064A 0645;064A 0645; +FC94;FC94;FC94;064A 0646;064A 0646; +FC95;FC95;FC95;064A 0649;064A 0649; +FC96;FC96;FC96;064A 064A;064A 064A; +FC97;FC97;FC97;0626 062C;064A 0654 062C; +FC98;FC98;FC98;0626 062D;064A 0654 062D; +FC99;FC99;FC99;0626 062E;064A 0654 062E; +FC9A;FC9A;FC9A;0626 0645;064A 0654 0645; +FC9B;FC9B;FC9B;0626 0647;064A 0654 0647; +FC9C;FC9C;FC9C;0628 062C;0628 062C; +FC9D;FC9D;FC9D;0628 062D;0628 062D; +FC9E;FC9E;FC9E;0628 062E;0628 062E; +FC9F;FC9F;FC9F;0628 0645;0628 0645; +FCA0;FCA0;FCA0;0628 0647;0628 0647; +FCA1;FCA1;FCA1;062A 062C;062A 062C; +FCA2;FCA2;FCA2;062A 062D;062A 062D; +FCA3;FCA3;FCA3;062A 062E;062A 062E; +FCA4;FCA4;FCA4;062A 0645;062A 0645; +FCA5;FCA5;FCA5;062A 0647;062A 0647; +FCA6;FCA6;FCA6;062B 0645;062B 0645; +FCA7;FCA7;FCA7;062C 062D;062C 062D; +FCA8;FCA8;FCA8;062C 0645;062C 0645; +FCA9;FCA9;FCA9;062D 062C;062D 062C; +FCAA;FCAA;FCAA;062D 0645;062D 0645; +FCAB;FCAB;FCAB;062E 062C;062E 062C; +FCAC;FCAC;FCAC;062E 0645;062E 0645; +FCAD;FCAD;FCAD;0633 062C;0633 062C; +FCAE;FCAE;FCAE;0633 062D;0633 062D; +FCAF;FCAF;FCAF;0633 062E;0633 062E; +FCB0;FCB0;FCB0;0633 0645;0633 0645; +FCB1;FCB1;FCB1;0635 062D;0635 062D; +FCB2;FCB2;FCB2;0635 062E;0635 062E; +FCB3;FCB3;FCB3;0635 0645;0635 0645; +FCB4;FCB4;FCB4;0636 062C;0636 062C; +FCB5;FCB5;FCB5;0636 062D;0636 062D; +FCB6;FCB6;FCB6;0636 062E;0636 062E; +FCB7;FCB7;FCB7;0636 0645;0636 0645; +FCB8;FCB8;FCB8;0637 062D;0637 062D; +FCB9;FCB9;FCB9;0638 0645;0638 0645; +FCBA;FCBA;FCBA;0639 062C;0639 062C; +FCBB;FCBB;FCBB;0639 0645;0639 0645; +FCBC;FCBC;FCBC;063A 062C;063A 062C; +FCBD;FCBD;FCBD;063A 0645;063A 0645; +FCBE;FCBE;FCBE;0641 062C;0641 062C; +FCBF;FCBF;FCBF;0641 062D;0641 062D; +FCC0;FCC0;FCC0;0641 062E;0641 062E; +FCC1;FCC1;FCC1;0641 0645;0641 0645; +FCC2;FCC2;FCC2;0642 062D;0642 062D; +FCC3;FCC3;FCC3;0642 0645;0642 0645; +FCC4;FCC4;FCC4;0643 062C;0643 062C; +FCC5;FCC5;FCC5;0643 062D;0643 062D; +FCC6;FCC6;FCC6;0643 062E;0643 062E; +FCC7;FCC7;FCC7;0643 0644;0643 0644; +FCC8;FCC8;FCC8;0643 0645;0643 0645; +FCC9;FCC9;FCC9;0644 062C;0644 062C; +FCCA;FCCA;FCCA;0644 062D;0644 062D; +FCCB;FCCB;FCCB;0644 062E;0644 062E; +FCCC;FCCC;FCCC;0644 0645;0644 0645; +FCCD;FCCD;FCCD;0644 0647;0644 0647; +FCCE;FCCE;FCCE;0645 062C;0645 062C; +FCCF;FCCF;FCCF;0645 062D;0645 062D; +FCD0;FCD0;FCD0;0645 062E;0645 062E; +FCD1;FCD1;FCD1;0645 0645;0645 0645; +FCD2;FCD2;FCD2;0646 062C;0646 062C; +FCD3;FCD3;FCD3;0646 062D;0646 062D; +FCD4;FCD4;FCD4;0646 062E;0646 062E; +FCD5;FCD5;FCD5;0646 0645;0646 0645; +FCD6;FCD6;FCD6;0646 0647;0646 0647; +FCD7;FCD7;FCD7;0647 062C;0647 062C; +FCD8;FCD8;FCD8;0647 0645;0647 0645; +FCD9;FCD9;FCD9;0647 0670;0647 0670; +FCDA;FCDA;FCDA;064A 062C;064A 062C; +FCDB;FCDB;FCDB;064A 062D;064A 062D; +FCDC;FCDC;FCDC;064A 062E;064A 062E; +FCDD;FCDD;FCDD;064A 0645;064A 0645; +FCDE;FCDE;FCDE;064A 0647;064A 0647; +FCDF;FCDF;FCDF;0626 0645;064A 0654 0645; +FCE0;FCE0;FCE0;0626 0647;064A 0654 0647; +FCE1;FCE1;FCE1;0628 0645;0628 0645; +FCE2;FCE2;FCE2;0628 0647;0628 0647; +FCE3;FCE3;FCE3;062A 0645;062A 0645; +FCE4;FCE4;FCE4;062A 0647;062A 0647; +FCE5;FCE5;FCE5;062B 0645;062B 0645; +FCE6;FCE6;FCE6;062B 0647;062B 0647; +FCE7;FCE7;FCE7;0633 0645;0633 0645; +FCE8;FCE8;FCE8;0633 0647;0633 0647; +FCE9;FCE9;FCE9;0634 0645;0634 0645; +FCEA;FCEA;FCEA;0634 0647;0634 0647; +FCEB;FCEB;FCEB;0643 0644;0643 0644; +FCEC;FCEC;FCEC;0643 0645;0643 0645; +FCED;FCED;FCED;0644 0645;0644 0645; +FCEE;FCEE;FCEE;0646 0645;0646 0645; +FCEF;FCEF;FCEF;0646 0647;0646 0647; +FCF0;FCF0;FCF0;064A 0645;064A 0645; +FCF1;FCF1;FCF1;064A 0647;064A 0647; +FCF2;FCF2;FCF2;0640 064E 0651;0640 064E 0651; +FCF3;FCF3;FCF3;0640 064F 0651;0640 064F 0651; +FCF4;FCF4;FCF4;0640 0650 0651;0640 0650 0651; +FCF5;FCF5;FCF5;0637 0649;0637 0649; +FCF6;FCF6;FCF6;0637 064A;0637 064A; +FCF7;FCF7;FCF7;0639 0649;0639 0649; +FCF8;FCF8;FCF8;0639 064A;0639 064A; +FCF9;FCF9;FCF9;063A 0649;063A 0649; +FCFA;FCFA;FCFA;063A 064A;063A 064A; +FCFB;FCFB;FCFB;0633 0649;0633 0649; +FCFC;FCFC;FCFC;0633 064A;0633 064A; +FCFD;FCFD;FCFD;0634 0649;0634 0649; +FCFE;FCFE;FCFE;0634 064A;0634 064A; +FCFF;FCFF;FCFF;062D 0649;062D 0649; +FD00;FD00;FD00;062D 064A;062D 064A; +FD01;FD01;FD01;062C 0649;062C 0649; +FD02;FD02;FD02;062C 064A;062C 064A; +FD03;FD03;FD03;062E 0649;062E 0649; +FD04;FD04;FD04;062E 064A;062E 064A; +FD05;FD05;FD05;0635 0649;0635 0649; +FD06;FD06;FD06;0635 064A;0635 064A; +FD07;FD07;FD07;0636 0649;0636 0649; +FD08;FD08;FD08;0636 064A;0636 064A; +FD09;FD09;FD09;0634 062C;0634 062C; +FD0A;FD0A;FD0A;0634 062D;0634 062D; +FD0B;FD0B;FD0B;0634 062E;0634 062E; +FD0C;FD0C;FD0C;0634 0645;0634 0645; +FD0D;FD0D;FD0D;0634 0631;0634 0631; +FD0E;FD0E;FD0E;0633 0631;0633 0631; +FD0F;FD0F;FD0F;0635 0631;0635 0631; +FD10;FD10;FD10;0636 0631;0636 0631; +FD11;FD11;FD11;0637 0649;0637 0649; +FD12;FD12;FD12;0637 064A;0637 064A; +FD13;FD13;FD13;0639 0649;0639 0649; +FD14;FD14;FD14;0639 064A;0639 064A; +FD15;FD15;FD15;063A 0649;063A 0649; +FD16;FD16;FD16;063A 064A;063A 064A; +FD17;FD17;FD17;0633 0649;0633 0649; +FD18;FD18;FD18;0633 064A;0633 064A; +FD19;FD19;FD19;0634 0649;0634 0649; +FD1A;FD1A;FD1A;0634 064A;0634 064A; +FD1B;FD1B;FD1B;062D 0649;062D 0649; +FD1C;FD1C;FD1C;062D 064A;062D 064A; +FD1D;FD1D;FD1D;062C 0649;062C 0649; +FD1E;FD1E;FD1E;062C 064A;062C 064A; +FD1F;FD1F;FD1F;062E 0649;062E 0649; +FD20;FD20;FD20;062E 064A;062E 064A; +FD21;FD21;FD21;0635 0649;0635 0649; +FD22;FD22;FD22;0635 064A;0635 064A; +FD23;FD23;FD23;0636 0649;0636 0649; +FD24;FD24;FD24;0636 064A;0636 064A; +FD25;FD25;FD25;0634 062C;0634 062C; +FD26;FD26;FD26;0634 062D;0634 062D; +FD27;FD27;FD27;0634 062E;0634 062E; +FD28;FD28;FD28;0634 0645;0634 0645; +FD29;FD29;FD29;0634 0631;0634 0631; +FD2A;FD2A;FD2A;0633 0631;0633 0631; +FD2B;FD2B;FD2B;0635 0631;0635 0631; +FD2C;FD2C;FD2C;0636 0631;0636 0631; +FD2D;FD2D;FD2D;0634 062C;0634 062C; +FD2E;FD2E;FD2E;0634 062D;0634 062D; +FD2F;FD2F;FD2F;0634 062E;0634 062E; +FD30;FD30;FD30;0634 0645;0634 0645; +FD31;FD31;FD31;0633 0647;0633 0647; +FD32;FD32;FD32;0634 0647;0634 0647; +FD33;FD33;FD33;0637 0645;0637 0645; +FD34;FD34;FD34;0633 062C;0633 062C; +FD35;FD35;FD35;0633 062D;0633 062D; +FD36;FD36;FD36;0633 062E;0633 062E; +FD37;FD37;FD37;0634 062C;0634 062C; +FD38;FD38;FD38;0634 062D;0634 062D; +FD39;FD39;FD39;0634 062E;0634 062E; +FD3A;FD3A;FD3A;0637 0645;0637 0645; +FD3B;FD3B;FD3B;0638 0645;0638 0645; +FD3C;FD3C;FD3C;0627 064B;0627 064B; +FD3D;FD3D;FD3D;0627 064B;0627 064B; +FD50;FD50;FD50;062A 062C 0645;062A 062C 0645; +FD51;FD51;FD51;062A 062D 062C;062A 062D 062C; +FD52;FD52;FD52;062A 062D 062C;062A 062D 062C; +FD53;FD53;FD53;062A 062D 0645;062A 062D 0645; +FD54;FD54;FD54;062A 062E 0645;062A 062E 0645; +FD55;FD55;FD55;062A 0645 062C;062A 0645 062C; +FD56;FD56;FD56;062A 0645 062D;062A 0645 062D; +FD57;FD57;FD57;062A 0645 062E;062A 0645 062E; +FD58;FD58;FD58;062C 0645 062D;062C 0645 062D; +FD59;FD59;FD59;062C 0645 062D;062C 0645 062D; +FD5A;FD5A;FD5A;062D 0645 064A;062D 0645 064A; +FD5B;FD5B;FD5B;062D 0645 0649;062D 0645 0649; +FD5C;FD5C;FD5C;0633 062D 062C;0633 062D 062C; +FD5D;FD5D;FD5D;0633 062C 062D;0633 062C 062D; +FD5E;FD5E;FD5E;0633 062C 0649;0633 062C 0649; +FD5F;FD5F;FD5F;0633 0645 062D;0633 0645 062D; +FD60;FD60;FD60;0633 0645 062D;0633 0645 062D; +FD61;FD61;FD61;0633 0645 062C;0633 0645 062C; +FD62;FD62;FD62;0633 0645 0645;0633 0645 0645; +FD63;FD63;FD63;0633 0645 0645;0633 0645 0645; +FD64;FD64;FD64;0635 062D 062D;0635 062D 062D; +FD65;FD65;FD65;0635 062D 062D;0635 062D 062D; +FD66;FD66;FD66;0635 0645 0645;0635 0645 0645; +FD67;FD67;FD67;0634 062D 0645;0634 062D 0645; +FD68;FD68;FD68;0634 062D 0645;0634 062D 0645; +FD69;FD69;FD69;0634 062C 064A;0634 062C 064A; +FD6A;FD6A;FD6A;0634 0645 062E;0634 0645 062E; +FD6B;FD6B;FD6B;0634 0645 062E;0634 0645 062E; +FD6C;FD6C;FD6C;0634 0645 0645;0634 0645 0645; +FD6D;FD6D;FD6D;0634 0645 0645;0634 0645 0645; +FD6E;FD6E;FD6E;0636 062D 0649;0636 062D 0649; +FD6F;FD6F;FD6F;0636 062E 0645;0636 062E 0645; +FD70;FD70;FD70;0636 062E 0645;0636 062E 0645; +FD71;FD71;FD71;0637 0645 062D;0637 0645 062D; +FD72;FD72;FD72;0637 0645 062D;0637 0645 062D; +FD73;FD73;FD73;0637 0645 0645;0637 0645 0645; +FD74;FD74;FD74;0637 0645 064A;0637 0645 064A; +FD75;FD75;FD75;0639 062C 0645;0639 062C 0645; +FD76;FD76;FD76;0639 0645 0645;0639 0645 0645; +FD77;FD77;FD77;0639 0645 0645;0639 0645 0645; +FD78;FD78;FD78;0639 0645 0649;0639 0645 0649; +FD79;FD79;FD79;063A 0645 0645;063A 0645 0645; +FD7A;FD7A;FD7A;063A 0645 064A;063A 0645 064A; +FD7B;FD7B;FD7B;063A 0645 0649;063A 0645 0649; +FD7C;FD7C;FD7C;0641 062E 0645;0641 062E 0645; +FD7D;FD7D;FD7D;0641 062E 0645;0641 062E 0645; +FD7E;FD7E;FD7E;0642 0645 062D;0642 0645 062D; +FD7F;FD7F;FD7F;0642 0645 0645;0642 0645 0645; +FD80;FD80;FD80;0644 062D 0645;0644 062D 0645; +FD81;FD81;FD81;0644 062D 064A;0644 062D 064A; +FD82;FD82;FD82;0644 062D 0649;0644 062D 0649; +FD83;FD83;FD83;0644 062C 062C;0644 062C 062C; +FD84;FD84;FD84;0644 062C 062C;0644 062C 062C; +FD85;FD85;FD85;0644 062E 0645;0644 062E 0645; +FD86;FD86;FD86;0644 062E 0645;0644 062E 0645; +FD87;FD87;FD87;0644 0645 062D;0644 0645 062D; +FD88;FD88;FD88;0644 0645 062D;0644 0645 062D; +FD89;FD89;FD89;0645 062D 062C;0645 062D 062C; +FD8A;FD8A;FD8A;0645 062D 0645;0645 062D 0645; +FD8B;FD8B;FD8B;0645 062D 064A;0645 062D 064A; +FD8C;FD8C;FD8C;0645 062C 062D;0645 062C 062D; +FD8D;FD8D;FD8D;0645 062C 0645;0645 062C 0645; +FD8E;FD8E;FD8E;0645 062E 062C;0645 062E 062C; +FD8F;FD8F;FD8F;0645 062E 0645;0645 062E 0645; +FD92;FD92;FD92;0645 062C 062E;0645 062C 062E; +FD93;FD93;FD93;0647 0645 062C;0647 0645 062C; +FD94;FD94;FD94;0647 0645 0645;0647 0645 0645; +FD95;FD95;FD95;0646 062D 0645;0646 062D 0645; +FD96;FD96;FD96;0646 062D 0649;0646 062D 0649; +FD97;FD97;FD97;0646 062C 0645;0646 062C 0645; +FD98;FD98;FD98;0646 062C 0645;0646 062C 0645; +FD99;FD99;FD99;0646 062C 0649;0646 062C 0649; +FD9A;FD9A;FD9A;0646 0645 064A;0646 0645 064A; +FD9B;FD9B;FD9B;0646 0645 0649;0646 0645 0649; +FD9C;FD9C;FD9C;064A 0645 0645;064A 0645 0645; +FD9D;FD9D;FD9D;064A 0645 0645;064A 0645 0645; +FD9E;FD9E;FD9E;0628 062E 064A;0628 062E 064A; +FD9F;FD9F;FD9F;062A 062C 064A;062A 062C 064A; +FDA0;FDA0;FDA0;062A 062C 0649;062A 062C 0649; +FDA1;FDA1;FDA1;062A 062E 064A;062A 062E 064A; +FDA2;FDA2;FDA2;062A 062E 0649;062A 062E 0649; +FDA3;FDA3;FDA3;062A 0645 064A;062A 0645 064A; +FDA4;FDA4;FDA4;062A 0645 0649;062A 0645 0649; +FDA5;FDA5;FDA5;062C 0645 064A;062C 0645 064A; +FDA6;FDA6;FDA6;062C 062D 0649;062C 062D 0649; +FDA7;FDA7;FDA7;062C 0645 0649;062C 0645 0649; +FDA8;FDA8;FDA8;0633 062E 0649;0633 062E 0649; +FDA9;FDA9;FDA9;0635 062D 064A;0635 062D 064A; +FDAA;FDAA;FDAA;0634 062D 064A;0634 062D 064A; +FDAB;FDAB;FDAB;0636 062D 064A;0636 062D 064A; +FDAC;FDAC;FDAC;0644 062C 064A;0644 062C 064A; +FDAD;FDAD;FDAD;0644 0645 064A;0644 0645 064A; +FDAE;FDAE;FDAE;064A 062D 064A;064A 062D 064A; +FDAF;FDAF;FDAF;064A 062C 064A;064A 062C 064A; +FDB0;FDB0;FDB0;064A 0645 064A;064A 0645 064A; +FDB1;FDB1;FDB1;0645 0645 064A;0645 0645 064A; +FDB2;FDB2;FDB2;0642 0645 064A;0642 0645 064A; +FDB3;FDB3;FDB3;0646 062D 064A;0646 062D 064A; +FDB4;FDB4;FDB4;0642 0645 062D;0642 0645 062D; +FDB5;FDB5;FDB5;0644 062D 0645;0644 062D 0645; +FDB6;FDB6;FDB6;0639 0645 064A;0639 0645 064A; +FDB7;FDB7;FDB7;0643 0645 064A;0643 0645 064A; +FDB8;FDB8;FDB8;0646 062C 062D;0646 062C 062D; +FDB9;FDB9;FDB9;0645 062E 064A;0645 062E 064A; +FDBA;FDBA;FDBA;0644 062C 0645;0644 062C 0645; +FDBB;FDBB;FDBB;0643 0645 0645;0643 0645 0645; +FDBC;FDBC;FDBC;0644 062C 0645;0644 062C 0645; +FDBD;FDBD;FDBD;0646 062C 062D;0646 062C 062D; +FDBE;FDBE;FDBE;062C 062D 064A;062C 062D 064A; +FDBF;FDBF;FDBF;062D 062C 064A;062D 062C 064A; +FDC0;FDC0;FDC0;0645 062C 064A;0645 062C 064A; +FDC1;FDC1;FDC1;0641 0645 064A;0641 0645 064A; +FDC2;FDC2;FDC2;0628 062D 064A;0628 062D 064A; +FDC3;FDC3;FDC3;0643 0645 0645;0643 0645 0645; +FDC4;FDC4;FDC4;0639 062C 0645;0639 062C 0645; +FDC5;FDC5;FDC5;0635 0645 0645;0635 0645 0645; +FDC6;FDC6;FDC6;0633 062E 064A;0633 062E 064A; +FDC7;FDC7;FDC7;0646 062C 064A;0646 062C 064A; +FDF0;FDF0;FDF0;0635 0644 06D2;0635 0644 06D2; +FDF1;FDF1;FDF1;0642 0644 06D2;0642 0644 06D2; +FDF2;FDF2;FDF2;0627 0644 0644 0647;0627 0644 0644 0647; +FDF3;FDF3;FDF3;0627 0643 0628 0631;0627 0643 0628 0631; +FDF4;FDF4;FDF4;0645 062D 0645 062F;0645 062D 0645 062F; +FDF5;FDF5;FDF5;0635 0644 0639 0645;0635 0644 0639 0645; +FDF6;FDF6;FDF6;0631 0633 0648 0644;0631 0633 0648 0644; +FDF7;FDF7;FDF7;0639 0644 064A 0647;0639 0644 064A 0647; +FDF8;FDF8;FDF8;0648 0633 0644 0645;0648 0633 0644 0645; +FDF9;FDF9;FDF9;0635 0644 0649;0635 0644 0649; +FDFA;FDFA;FDFA;0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645; +FDFB;FDFB;FDFB;062C 0644 0020 062C 0644 0627 0644 0647;062C 0644 0020 062C 0644 0627 0644 0647; +FDFC;FDFC;FDFC;0631 06CC 0627 0644;0631 06CC 0627 0644; +FE10;FE10;FE10;002C;002C; +FE11;FE11;FE11;3001;3001; +FE12;FE12;FE12;3002;3002; +FE13;FE13;FE13;003A;003A; +FE14;FE14;FE14;003B;003B; +FE15;FE15;FE15;0021;0021; +FE16;FE16;FE16;003F;003F; +FE17;FE17;FE17;3016;3016; +FE18;FE18;FE18;3017;3017; +FE19;FE19;FE19;002E 002E 002E;002E 002E 002E; +FE30;FE30;FE30;002E 002E;002E 002E; +FE31;FE31;FE31;2014;2014; +FE32;FE32;FE32;2013;2013; +FE33;FE33;FE33;005F;005F; +FE34;FE34;FE34;005F;005F; +FE35;FE35;FE35;0028;0028; +FE36;FE36;FE36;0029;0029; +FE37;FE37;FE37;007B;007B; +FE38;FE38;FE38;007D;007D; +FE39;FE39;FE39;3014;3014; +FE3A;FE3A;FE3A;3015;3015; +FE3B;FE3B;FE3B;3010;3010; +FE3C;FE3C;FE3C;3011;3011; +FE3D;FE3D;FE3D;300A;300A; +FE3E;FE3E;FE3E;300B;300B; +FE3F;FE3F;FE3F;3008;3008; +FE40;FE40;FE40;3009;3009; +FE41;FE41;FE41;300C;300C; +FE42;FE42;FE42;300D;300D; +FE43;FE43;FE43;300E;300E; +FE44;FE44;FE44;300F;300F; +FE47;FE47;FE47;005B;005B; +FE48;FE48;FE48;005D;005D; +FE49;FE49;FE49;0020 0305;0020 0305; +FE4A;FE4A;FE4A;0020 0305;0020 0305; +FE4B;FE4B;FE4B;0020 0305;0020 0305; +FE4C;FE4C;FE4C;0020 0305;0020 0305; +FE4D;FE4D;FE4D;005F;005F; +FE4E;FE4E;FE4E;005F;005F; +FE4F;FE4F;FE4F;005F;005F; +FE50;FE50;FE50;002C;002C; +FE51;FE51;FE51;3001;3001; +FE52;FE52;FE52;002E;002E; +FE54;FE54;FE54;003B;003B; +FE55;FE55;FE55;003A;003A; +FE56;FE56;FE56;003F;003F; +FE57;FE57;FE57;0021;0021; +FE58;FE58;FE58;2014;2014; +FE59;FE59;FE59;0028;0028; +FE5A;FE5A;FE5A;0029;0029; +FE5B;FE5B;FE5B;007B;007B; +FE5C;FE5C;FE5C;007D;007D; +FE5D;FE5D;FE5D;3014;3014; +FE5E;FE5E;FE5E;3015;3015; +FE5F;FE5F;FE5F;0023;0023; +FE60;FE60;FE60;0026;0026; +FE61;FE61;FE61;002A;002A; +FE62;FE62;FE62;002B;002B; +FE63;FE63;FE63;002D;002D; +FE64;FE64;FE64;003C;003C; +FE65;FE65;FE65;003E;003E; +FE66;FE66;FE66;003D;003D; +FE68;FE68;FE68;005C;005C; +FE69;FE69;FE69;0024;0024; +FE6A;FE6A;FE6A;0025;0025; +FE6B;FE6B;FE6B;0040;0040; +FE70;FE70;FE70;0020 064B;0020 064B; +FE71;FE71;FE71;0640 064B;0640 064B; +FE72;FE72;FE72;0020 064C;0020 064C; +FE74;FE74;FE74;0020 064D;0020 064D; +FE76;FE76;FE76;0020 064E;0020 064E; +FE77;FE77;FE77;0640 064E;0640 064E; +FE78;FE78;FE78;0020 064F;0020 064F; +FE79;FE79;FE79;0640 064F;0640 064F; +FE7A;FE7A;FE7A;0020 0650;0020 0650; +FE7B;FE7B;FE7B;0640 0650;0640 0650; +FE7C;FE7C;FE7C;0020 0651;0020 0651; +FE7D;FE7D;FE7D;0640 0651;0640 0651; +FE7E;FE7E;FE7E;0020 0652;0020 0652; +FE7F;FE7F;FE7F;0640 0652;0640 0652; +FE80;FE80;FE80;0621;0621; +FE81;FE81;FE81;0622;0627 0653; +FE82;FE82;FE82;0622;0627 0653; +FE83;FE83;FE83;0623;0627 0654; +FE84;FE84;FE84;0623;0627 0654; +FE85;FE85;FE85;0624;0648 0654; +FE86;FE86;FE86;0624;0648 0654; +FE87;FE87;FE87;0625;0627 0655; +FE88;FE88;FE88;0625;0627 0655; +FE89;FE89;FE89;0626;064A 0654; +FE8A;FE8A;FE8A;0626;064A 0654; +FE8B;FE8B;FE8B;0626;064A 0654; +FE8C;FE8C;FE8C;0626;064A 0654; +FE8D;FE8D;FE8D;0627;0627; +FE8E;FE8E;FE8E;0627;0627; +FE8F;FE8F;FE8F;0628;0628; +FE90;FE90;FE90;0628;0628; +FE91;FE91;FE91;0628;0628; +FE92;FE92;FE92;0628;0628; +FE93;FE93;FE93;0629;0629; +FE94;FE94;FE94;0629;0629; +FE95;FE95;FE95;062A;062A; +FE96;FE96;FE96;062A;062A; +FE97;FE97;FE97;062A;062A; +FE98;FE98;FE98;062A;062A; +FE99;FE99;FE99;062B;062B; +FE9A;FE9A;FE9A;062B;062B; +FE9B;FE9B;FE9B;062B;062B; +FE9C;FE9C;FE9C;062B;062B; +FE9D;FE9D;FE9D;062C;062C; +FE9E;FE9E;FE9E;062C;062C; +FE9F;FE9F;FE9F;062C;062C; +FEA0;FEA0;FEA0;062C;062C; +FEA1;FEA1;FEA1;062D;062D; +FEA2;FEA2;FEA2;062D;062D; +FEA3;FEA3;FEA3;062D;062D; +FEA4;FEA4;FEA4;062D;062D; +FEA5;FEA5;FEA5;062E;062E; +FEA6;FEA6;FEA6;062E;062E; +FEA7;FEA7;FEA7;062E;062E; +FEA8;FEA8;FEA8;062E;062E; +FEA9;FEA9;FEA9;062F;062F; +FEAA;FEAA;FEAA;062F;062F; +FEAB;FEAB;FEAB;0630;0630; +FEAC;FEAC;FEAC;0630;0630; +FEAD;FEAD;FEAD;0631;0631; +FEAE;FEAE;FEAE;0631;0631; +FEAF;FEAF;FEAF;0632;0632; +FEB0;FEB0;FEB0;0632;0632; +FEB1;FEB1;FEB1;0633;0633; +FEB2;FEB2;FEB2;0633;0633; +FEB3;FEB3;FEB3;0633;0633; +FEB4;FEB4;FEB4;0633;0633; +FEB5;FEB5;FEB5;0634;0634; +FEB6;FEB6;FEB6;0634;0634; +FEB7;FEB7;FEB7;0634;0634; +FEB8;FEB8;FEB8;0634;0634; +FEB9;FEB9;FEB9;0635;0635; +FEBA;FEBA;FEBA;0635;0635; +FEBB;FEBB;FEBB;0635;0635; +FEBC;FEBC;FEBC;0635;0635; +FEBD;FEBD;FEBD;0636;0636; +FEBE;FEBE;FEBE;0636;0636; +FEBF;FEBF;FEBF;0636;0636; +FEC0;FEC0;FEC0;0636;0636; +FEC1;FEC1;FEC1;0637;0637; +FEC2;FEC2;FEC2;0637;0637; +FEC3;FEC3;FEC3;0637;0637; +FEC4;FEC4;FEC4;0637;0637; +FEC5;FEC5;FEC5;0638;0638; +FEC6;FEC6;FEC6;0638;0638; +FEC7;FEC7;FEC7;0638;0638; +FEC8;FEC8;FEC8;0638;0638; +FEC9;FEC9;FEC9;0639;0639; +FECA;FECA;FECA;0639;0639; +FECB;FECB;FECB;0639;0639; +FECC;FECC;FECC;0639;0639; +FECD;FECD;FECD;063A;063A; +FECE;FECE;FECE;063A;063A; +FECF;FECF;FECF;063A;063A; +FED0;FED0;FED0;063A;063A; +FED1;FED1;FED1;0641;0641; +FED2;FED2;FED2;0641;0641; +FED3;FED3;FED3;0641;0641; +FED4;FED4;FED4;0641;0641; +FED5;FED5;FED5;0642;0642; +FED6;FED6;FED6;0642;0642; +FED7;FED7;FED7;0642;0642; +FED8;FED8;FED8;0642;0642; +FED9;FED9;FED9;0643;0643; +FEDA;FEDA;FEDA;0643;0643; +FEDB;FEDB;FEDB;0643;0643; +FEDC;FEDC;FEDC;0643;0643; +FEDD;FEDD;FEDD;0644;0644; +FEDE;FEDE;FEDE;0644;0644; +FEDF;FEDF;FEDF;0644;0644; +FEE0;FEE0;FEE0;0644;0644; +FEE1;FEE1;FEE1;0645;0645; +FEE2;FEE2;FEE2;0645;0645; +FEE3;FEE3;FEE3;0645;0645; +FEE4;FEE4;FEE4;0645;0645; +FEE5;FEE5;FEE5;0646;0646; +FEE6;FEE6;FEE6;0646;0646; +FEE7;FEE7;FEE7;0646;0646; +FEE8;FEE8;FEE8;0646;0646; +FEE9;FEE9;FEE9;0647;0647; +FEEA;FEEA;FEEA;0647;0647; +FEEB;FEEB;FEEB;0647;0647; +FEEC;FEEC;FEEC;0647;0647; +FEED;FEED;FEED;0648;0648; +FEEE;FEEE;FEEE;0648;0648; +FEEF;FEEF;FEEF;0649;0649; +FEF0;FEF0;FEF0;0649;0649; +FEF1;FEF1;FEF1;064A;064A; +FEF2;FEF2;FEF2;064A;064A; +FEF3;FEF3;FEF3;064A;064A; +FEF4;FEF4;FEF4;064A;064A; +FEF5;FEF5;FEF5;0644 0622;0644 0627 0653; +FEF6;FEF6;FEF6;0644 0622;0644 0627 0653; +FEF7;FEF7;FEF7;0644 0623;0644 0627 0654; +FEF8;FEF8;FEF8;0644 0623;0644 0627 0654; +FEF9;FEF9;FEF9;0644 0625;0644 0627 0655; +FEFA;FEFA;FEFA;0644 0625;0644 0627 0655; +FEFB;FEFB;FEFB;0644 0627;0644 0627; +FEFC;FEFC;FEFC;0644 0627;0644 0627; +FF01;FF01;FF01;0021;0021; +FF02;FF02;FF02;0022;0022; +FF03;FF03;FF03;0023;0023; +FF04;FF04;FF04;0024;0024; +FF05;FF05;FF05;0025;0025; +FF06;FF06;FF06;0026;0026; +FF07;FF07;FF07;0027;0027; +FF08;FF08;FF08;0028;0028; +FF09;FF09;FF09;0029;0029; +FF0A;FF0A;FF0A;002A;002A; +FF0B;FF0B;FF0B;002B;002B; +FF0C;FF0C;FF0C;002C;002C; +FF0D;FF0D;FF0D;002D;002D; +FF0E;FF0E;FF0E;002E;002E; +FF0F;FF0F;FF0F;002F;002F; +FF10;FF10;FF10;0030;0030; +FF11;FF11;FF11;0031;0031; +FF12;FF12;FF12;0032;0032; +FF13;FF13;FF13;0033;0033; +FF14;FF14;FF14;0034;0034; +FF15;FF15;FF15;0035;0035; +FF16;FF16;FF16;0036;0036; +FF17;FF17;FF17;0037;0037; +FF18;FF18;FF18;0038;0038; +FF19;FF19;FF19;0039;0039; +FF1A;FF1A;FF1A;003A;003A; +FF1B;FF1B;FF1B;003B;003B; +FF1C;FF1C;FF1C;003C;003C; +FF1D;FF1D;FF1D;003D;003D; +FF1E;FF1E;FF1E;003E;003E; +FF1F;FF1F;FF1F;003F;003F; +FF20;FF20;FF20;0040;0040; +FF21;FF21;FF21;0041;0041; +FF22;FF22;FF22;0042;0042; +FF23;FF23;FF23;0043;0043; +FF24;FF24;FF24;0044;0044; +FF25;FF25;FF25;0045;0045; +FF26;FF26;FF26;0046;0046; +FF27;FF27;FF27;0047;0047; +FF28;FF28;FF28;0048;0048; +FF29;FF29;FF29;0049;0049; +FF2A;FF2A;FF2A;004A;004A; +FF2B;FF2B;FF2B;004B;004B; +FF2C;FF2C;FF2C;004C;004C; +FF2D;FF2D;FF2D;004D;004D; +FF2E;FF2E;FF2E;004E;004E; +FF2F;FF2F;FF2F;004F;004F; +FF30;FF30;FF30;0050;0050; +FF31;FF31;FF31;0051;0051; +FF32;FF32;FF32;0052;0052; +FF33;FF33;FF33;0053;0053; +FF34;FF34;FF34;0054;0054; +FF35;FF35;FF35;0055;0055; +FF36;FF36;FF36;0056;0056; +FF37;FF37;FF37;0057;0057; +FF38;FF38;FF38;0058;0058; +FF39;FF39;FF39;0059;0059; +FF3A;FF3A;FF3A;005A;005A; +FF3B;FF3B;FF3B;005B;005B; +FF3C;FF3C;FF3C;005C;005C; +FF3D;FF3D;FF3D;005D;005D; +FF3E;FF3E;FF3E;005E;005E; +FF3F;FF3F;FF3F;005F;005F; +FF40;FF40;FF40;0060;0060; +FF41;FF41;FF41;0061;0061; +FF42;FF42;FF42;0062;0062; +FF43;FF43;FF43;0063;0063; +FF44;FF44;FF44;0064;0064; +FF45;FF45;FF45;0065;0065; +FF46;FF46;FF46;0066;0066; +FF47;FF47;FF47;0067;0067; +FF48;FF48;FF48;0068;0068; +FF49;FF49;FF49;0069;0069; +FF4A;FF4A;FF4A;006A;006A; +FF4B;FF4B;FF4B;006B;006B; +FF4C;FF4C;FF4C;006C;006C; +FF4D;FF4D;FF4D;006D;006D; +FF4E;FF4E;FF4E;006E;006E; +FF4F;FF4F;FF4F;006F;006F; +FF50;FF50;FF50;0070;0070; +FF51;FF51;FF51;0071;0071; +FF52;FF52;FF52;0072;0072; +FF53;FF53;FF53;0073;0073; +FF54;FF54;FF54;0074;0074; +FF55;FF55;FF55;0075;0075; +FF56;FF56;FF56;0076;0076; +FF57;FF57;FF57;0077;0077; +FF58;FF58;FF58;0078;0078; +FF59;FF59;FF59;0079;0079; +FF5A;FF5A;FF5A;007A;007A; +FF5B;FF5B;FF5B;007B;007B; +FF5C;FF5C;FF5C;007C;007C; +FF5D;FF5D;FF5D;007D;007D; +FF5E;FF5E;FF5E;007E;007E; +FF5F;FF5F;FF5F;2985;2985; +FF60;FF60;FF60;2986;2986; +FF61;FF61;FF61;3002;3002; +FF62;FF62;FF62;300C;300C; +FF63;FF63;FF63;300D;300D; +FF64;FF64;FF64;3001;3001; +FF65;FF65;FF65;30FB;30FB; +FF66;FF66;FF66;30F2;30F2; +FF67;FF67;FF67;30A1;30A1; +FF68;FF68;FF68;30A3;30A3; +FF69;FF69;FF69;30A5;30A5; +FF6A;FF6A;FF6A;30A7;30A7; +FF6B;FF6B;FF6B;30A9;30A9; +FF6C;FF6C;FF6C;30E3;30E3; +FF6D;FF6D;FF6D;30E5;30E5; +FF6E;FF6E;FF6E;30E7;30E7; +FF6F;FF6F;FF6F;30C3;30C3; +FF70;FF70;FF70;30FC;30FC; +FF71;FF71;FF71;30A2;30A2; +FF72;FF72;FF72;30A4;30A4; +FF73;FF73;FF73;30A6;30A6; +FF74;FF74;FF74;30A8;30A8; +FF75;FF75;FF75;30AA;30AA; +FF76;FF76;FF76;30AB;30AB; +FF77;FF77;FF77;30AD;30AD; +FF78;FF78;FF78;30AF;30AF; +FF79;FF79;FF79;30B1;30B1; +FF7A;FF7A;FF7A;30B3;30B3; +FF7B;FF7B;FF7B;30B5;30B5; +FF7C;FF7C;FF7C;30B7;30B7; +FF7D;FF7D;FF7D;30B9;30B9; +FF7E;FF7E;FF7E;30BB;30BB; +FF7F;FF7F;FF7F;30BD;30BD; +FF80;FF80;FF80;30BF;30BF; +FF81;FF81;FF81;30C1;30C1; +FF82;FF82;FF82;30C4;30C4; +FF83;FF83;FF83;30C6;30C6; +FF84;FF84;FF84;30C8;30C8; +FF85;FF85;FF85;30CA;30CA; +FF86;FF86;FF86;30CB;30CB; +FF87;FF87;FF87;30CC;30CC; +FF88;FF88;FF88;30CD;30CD; +FF89;FF89;FF89;30CE;30CE; +FF8A;FF8A;FF8A;30CF;30CF; +FF8B;FF8B;FF8B;30D2;30D2; +FF8C;FF8C;FF8C;30D5;30D5; +FF8D;FF8D;FF8D;30D8;30D8; +FF8E;FF8E;FF8E;30DB;30DB; +FF8F;FF8F;FF8F;30DE;30DE; +FF90;FF90;FF90;30DF;30DF; +FF91;FF91;FF91;30E0;30E0; +FF92;FF92;FF92;30E1;30E1; +FF93;FF93;FF93;30E2;30E2; +FF94;FF94;FF94;30E4;30E4; +FF95;FF95;FF95;30E6;30E6; +FF96;FF96;FF96;30E8;30E8; +FF97;FF97;FF97;30E9;30E9; +FF98;FF98;FF98;30EA;30EA; +FF99;FF99;FF99;30EB;30EB; +FF9A;FF9A;FF9A;30EC;30EC; +FF9B;FF9B;FF9B;30ED;30ED; +FF9C;FF9C;FF9C;30EF;30EF; +FF9D;FF9D;FF9D;30F3;30F3; +FF9E;FF9E;FF9E;3099;3099; +FF9F;FF9F;FF9F;309A;309A; +FFA0;FFA0;FFA0;1160;1160; +FFA1;FFA1;FFA1;1100;1100; +FFA2;FFA2;FFA2;1101;1101; +FFA3;FFA3;FFA3;11AA;11AA; +FFA4;FFA4;FFA4;1102;1102; +FFA5;FFA5;FFA5;11AC;11AC; +FFA6;FFA6;FFA6;11AD;11AD; +FFA7;FFA7;FFA7;1103;1103; +FFA8;FFA8;FFA8;1104;1104; +FFA9;FFA9;FFA9;1105;1105; +FFAA;FFAA;FFAA;11B0;11B0; +FFAB;FFAB;FFAB;11B1;11B1; +FFAC;FFAC;FFAC;11B2;11B2; +FFAD;FFAD;FFAD;11B3;11B3; +FFAE;FFAE;FFAE;11B4;11B4; +FFAF;FFAF;FFAF;11B5;11B5; +FFB0;FFB0;FFB0;111A;111A; +FFB1;FFB1;FFB1;1106;1106; +FFB2;FFB2;FFB2;1107;1107; +FFB3;FFB3;FFB3;1108;1108; +FFB4;FFB4;FFB4;1121;1121; +FFB5;FFB5;FFB5;1109;1109; +FFB6;FFB6;FFB6;110A;110A; +FFB7;FFB7;FFB7;110B;110B; +FFB8;FFB8;FFB8;110C;110C; +FFB9;FFB9;FFB9;110D;110D; +FFBA;FFBA;FFBA;110E;110E; +FFBB;FFBB;FFBB;110F;110F; +FFBC;FFBC;FFBC;1110;1110; +FFBD;FFBD;FFBD;1111;1111; +FFBE;FFBE;FFBE;1112;1112; +FFC2;FFC2;FFC2;1161;1161; +FFC3;FFC3;FFC3;1162;1162; +FFC4;FFC4;FFC4;1163;1163; +FFC5;FFC5;FFC5;1164;1164; +FFC6;FFC6;FFC6;1165;1165; +FFC7;FFC7;FFC7;1166;1166; +FFCA;FFCA;FFCA;1167;1167; +FFCB;FFCB;FFCB;1168;1168; +FFCC;FFCC;FFCC;1169;1169; +FFCD;FFCD;FFCD;116A;116A; +FFCE;FFCE;FFCE;116B;116B; +FFCF;FFCF;FFCF;116C;116C; +FFD2;FFD2;FFD2;116D;116D; +FFD3;FFD3;FFD3;116E;116E; +FFD4;FFD4;FFD4;116F;116F; +FFD5;FFD5;FFD5;1170;1170; +FFD6;FFD6;FFD6;1171;1171; +FFD7;FFD7;FFD7;1172;1172; +FFDA;FFDA;FFDA;1173;1173; +FFDB;FFDB;FFDB;1174;1174; +FFDC;FFDC;FFDC;1175;1175; +FFE0;FFE0;FFE0;00A2;00A2; +FFE1;FFE1;FFE1;00A3;00A3; +FFE2;FFE2;FFE2;00AC;00AC; +FFE3;FFE3;FFE3;0020 0304;0020 0304; +FFE4;FFE4;FFE4;00A6;00A6; +FFE5;FFE5;FFE5;00A5;00A5; +FFE6;FFE6;FFE6;20A9;20A9; +FFE8;FFE8;FFE8;2502;2502; +FFE9;FFE9;FFE9;2190;2190; +FFEA;FFEA;FFEA;2191;2191; +FFEB;FFEB;FFEB;2192;2192; +FFEC;FFEC;FFEC;2193;2193; +FFED;FFED;FFED;25A0;25A0; +FFEE;FFEE;FFEE;25CB;25CB; +1D15E;1D157 1D165;1D157 1D165;1D157 1D165;1D157 1D165; +1D15F;1D158 1D165;1D158 1D165;1D158 1D165;1D158 1D165; +1D160;1D158 1D165 1D16E;1D158 1D165 1D16E;1D158 1D165 1D16E;1D158 1D165 1D16E; +1D161;1D158 1D165 1D16F;1D158 1D165 1D16F;1D158 1D165 1D16F;1D158 1D165 1D16F; +1D162;1D158 1D165 1D170;1D158 1D165 1D170;1D158 1D165 1D170;1D158 1D165 1D170; +1D163;1D158 1D165 1D171;1D158 1D165 1D171;1D158 1D165 1D171;1D158 1D165 1D171; +1D164;1D158 1D165 1D172;1D158 1D165 1D172;1D158 1D165 1D172;1D158 1D165 1D172; +1D1BB;1D1B9 1D165;1D1B9 1D165;1D1B9 1D165;1D1B9 1D165; +1D1BC;1D1BA 1D165;1D1BA 1D165;1D1BA 1D165;1D1BA 1D165; +1D1BD;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E;1D1B9 1D165 1D16E; +1D1BE;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E;1D1BA 1D165 1D16E; +1D1BF;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F;1D1B9 1D165 1D16F; +1D1C0;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F;1D1BA 1D165 1D16F; +1D400;1D400;1D400;0041;0041; +1D401;1D401;1D401;0042;0042; +1D402;1D402;1D402;0043;0043; +1D403;1D403;1D403;0044;0044; +1D404;1D404;1D404;0045;0045; +1D405;1D405;1D405;0046;0046; +1D406;1D406;1D406;0047;0047; +1D407;1D407;1D407;0048;0048; +1D408;1D408;1D408;0049;0049; +1D409;1D409;1D409;004A;004A; +1D40A;1D40A;1D40A;004B;004B; +1D40B;1D40B;1D40B;004C;004C; +1D40C;1D40C;1D40C;004D;004D; +1D40D;1D40D;1D40D;004E;004E; +1D40E;1D40E;1D40E;004F;004F; +1D40F;1D40F;1D40F;0050;0050; +1D410;1D410;1D410;0051;0051; +1D411;1D411;1D411;0052;0052; +1D412;1D412;1D412;0053;0053; +1D413;1D413;1D413;0054;0054; +1D414;1D414;1D414;0055;0055; +1D415;1D415;1D415;0056;0056; +1D416;1D416;1D416;0057;0057; +1D417;1D417;1D417;0058;0058; +1D418;1D418;1D418;0059;0059; +1D419;1D419;1D419;005A;005A; +1D41A;1D41A;1D41A;0061;0061; +1D41B;1D41B;1D41B;0062;0062; +1D41C;1D41C;1D41C;0063;0063; +1D41D;1D41D;1D41D;0064;0064; +1D41E;1D41E;1D41E;0065;0065; +1D41F;1D41F;1D41F;0066;0066; +1D420;1D420;1D420;0067;0067; +1D421;1D421;1D421;0068;0068; +1D422;1D422;1D422;0069;0069; +1D423;1D423;1D423;006A;006A; +1D424;1D424;1D424;006B;006B; +1D425;1D425;1D425;006C;006C; +1D426;1D426;1D426;006D;006D; +1D427;1D427;1D427;006E;006E; +1D428;1D428;1D428;006F;006F; +1D429;1D429;1D429;0070;0070; +1D42A;1D42A;1D42A;0071;0071; +1D42B;1D42B;1D42B;0072;0072; +1D42C;1D42C;1D42C;0073;0073; +1D42D;1D42D;1D42D;0074;0074; +1D42E;1D42E;1D42E;0075;0075; +1D42F;1D42F;1D42F;0076;0076; +1D430;1D430;1D430;0077;0077; +1D431;1D431;1D431;0078;0078; +1D432;1D432;1D432;0079;0079; +1D433;1D433;1D433;007A;007A; +1D434;1D434;1D434;0041;0041; +1D435;1D435;1D435;0042;0042; +1D436;1D436;1D436;0043;0043; +1D437;1D437;1D437;0044;0044; +1D438;1D438;1D438;0045;0045; +1D439;1D439;1D439;0046;0046; +1D43A;1D43A;1D43A;0047;0047; +1D43B;1D43B;1D43B;0048;0048; +1D43C;1D43C;1D43C;0049;0049; +1D43D;1D43D;1D43D;004A;004A; +1D43E;1D43E;1D43E;004B;004B; +1D43F;1D43F;1D43F;004C;004C; +1D440;1D440;1D440;004D;004D; +1D441;1D441;1D441;004E;004E; +1D442;1D442;1D442;004F;004F; +1D443;1D443;1D443;0050;0050; +1D444;1D444;1D444;0051;0051; +1D445;1D445;1D445;0052;0052; +1D446;1D446;1D446;0053;0053; +1D447;1D447;1D447;0054;0054; +1D448;1D448;1D448;0055;0055; +1D449;1D449;1D449;0056;0056; +1D44A;1D44A;1D44A;0057;0057; +1D44B;1D44B;1D44B;0058;0058; +1D44C;1D44C;1D44C;0059;0059; +1D44D;1D44D;1D44D;005A;005A; +1D44E;1D44E;1D44E;0061;0061; +1D44F;1D44F;1D44F;0062;0062; +1D450;1D450;1D450;0063;0063; +1D451;1D451;1D451;0064;0064; +1D452;1D452;1D452;0065;0065; +1D453;1D453;1D453;0066;0066; +1D454;1D454;1D454;0067;0067; +1D456;1D456;1D456;0069;0069; +1D457;1D457;1D457;006A;006A; +1D458;1D458;1D458;006B;006B; +1D459;1D459;1D459;006C;006C; +1D45A;1D45A;1D45A;006D;006D; +1D45B;1D45B;1D45B;006E;006E; +1D45C;1D45C;1D45C;006F;006F; +1D45D;1D45D;1D45D;0070;0070; +1D45E;1D45E;1D45E;0071;0071; +1D45F;1D45F;1D45F;0072;0072; +1D460;1D460;1D460;0073;0073; +1D461;1D461;1D461;0074;0074; +1D462;1D462;1D462;0075;0075; +1D463;1D463;1D463;0076;0076; +1D464;1D464;1D464;0077;0077; +1D465;1D465;1D465;0078;0078; +1D466;1D466;1D466;0079;0079; +1D467;1D467;1D467;007A;007A; +1D468;1D468;1D468;0041;0041; +1D469;1D469;1D469;0042;0042; +1D46A;1D46A;1D46A;0043;0043; +1D46B;1D46B;1D46B;0044;0044; +1D46C;1D46C;1D46C;0045;0045; +1D46D;1D46D;1D46D;0046;0046; +1D46E;1D46E;1D46E;0047;0047; +1D46F;1D46F;1D46F;0048;0048; +1D470;1D470;1D470;0049;0049; +1D471;1D471;1D471;004A;004A; +1D472;1D472;1D472;004B;004B; +1D473;1D473;1D473;004C;004C; +1D474;1D474;1D474;004D;004D; +1D475;1D475;1D475;004E;004E; +1D476;1D476;1D476;004F;004F; +1D477;1D477;1D477;0050;0050; +1D478;1D478;1D478;0051;0051; +1D479;1D479;1D479;0052;0052; +1D47A;1D47A;1D47A;0053;0053; +1D47B;1D47B;1D47B;0054;0054; +1D47C;1D47C;1D47C;0055;0055; +1D47D;1D47D;1D47D;0056;0056; +1D47E;1D47E;1D47E;0057;0057; +1D47F;1D47F;1D47F;0058;0058; +1D480;1D480;1D480;0059;0059; +1D481;1D481;1D481;005A;005A; +1D482;1D482;1D482;0061;0061; +1D483;1D483;1D483;0062;0062; +1D484;1D484;1D484;0063;0063; +1D485;1D485;1D485;0064;0064; +1D486;1D486;1D486;0065;0065; +1D487;1D487;1D487;0066;0066; +1D488;1D488;1D488;0067;0067; +1D489;1D489;1D489;0068;0068; +1D48A;1D48A;1D48A;0069;0069; +1D48B;1D48B;1D48B;006A;006A; +1D48C;1D48C;1D48C;006B;006B; +1D48D;1D48D;1D48D;006C;006C; +1D48E;1D48E;1D48E;006D;006D; +1D48F;1D48F;1D48F;006E;006E; +1D490;1D490;1D490;006F;006F; +1D491;1D491;1D491;0070;0070; +1D492;1D492;1D492;0071;0071; +1D493;1D493;1D493;0072;0072; +1D494;1D494;1D494;0073;0073; +1D495;1D495;1D495;0074;0074; +1D496;1D496;1D496;0075;0075; +1D497;1D497;1D497;0076;0076; +1D498;1D498;1D498;0077;0077; +1D499;1D499;1D499;0078;0078; +1D49A;1D49A;1D49A;0079;0079; +1D49B;1D49B;1D49B;007A;007A; +1D49C;1D49C;1D49C;0041;0041; +1D49E;1D49E;1D49E;0043;0043; +1D49F;1D49F;1D49F;0044;0044; +1D4A2;1D4A2;1D4A2;0047;0047; +1D4A5;1D4A5;1D4A5;004A;004A; +1D4A6;1D4A6;1D4A6;004B;004B; +1D4A9;1D4A9;1D4A9;004E;004E; +1D4AA;1D4AA;1D4AA;004F;004F; +1D4AB;1D4AB;1D4AB;0050;0050; +1D4AC;1D4AC;1D4AC;0051;0051; +1D4AE;1D4AE;1D4AE;0053;0053; +1D4AF;1D4AF;1D4AF;0054;0054; +1D4B0;1D4B0;1D4B0;0055;0055; +1D4B1;1D4B1;1D4B1;0056;0056; +1D4B2;1D4B2;1D4B2;0057;0057; +1D4B3;1D4B3;1D4B3;0058;0058; +1D4B4;1D4B4;1D4B4;0059;0059; +1D4B5;1D4B5;1D4B5;005A;005A; +1D4B6;1D4B6;1D4B6;0061;0061; +1D4B7;1D4B7;1D4B7;0062;0062; +1D4B8;1D4B8;1D4B8;0063;0063; +1D4B9;1D4B9;1D4B9;0064;0064; +1D4BB;1D4BB;1D4BB;0066;0066; +1D4BD;1D4BD;1D4BD;0068;0068; +1D4BE;1D4BE;1D4BE;0069;0069; +1D4BF;1D4BF;1D4BF;006A;006A; +1D4C0;1D4C0;1D4C0;006B;006B; +1D4C1;1D4C1;1D4C1;006C;006C; +1D4C2;1D4C2;1D4C2;006D;006D; +1D4C3;1D4C3;1D4C3;006E;006E; +1D4C5;1D4C5;1D4C5;0070;0070; +1D4C6;1D4C6;1D4C6;0071;0071; +1D4C7;1D4C7;1D4C7;0072;0072; +1D4C8;1D4C8;1D4C8;0073;0073; +1D4C9;1D4C9;1D4C9;0074;0074; +1D4CA;1D4CA;1D4CA;0075;0075; +1D4CB;1D4CB;1D4CB;0076;0076; +1D4CC;1D4CC;1D4CC;0077;0077; +1D4CD;1D4CD;1D4CD;0078;0078; +1D4CE;1D4CE;1D4CE;0079;0079; +1D4CF;1D4CF;1D4CF;007A;007A; +1D4D0;1D4D0;1D4D0;0041;0041; +1D4D1;1D4D1;1D4D1;0042;0042; +1D4D2;1D4D2;1D4D2;0043;0043; +1D4D3;1D4D3;1D4D3;0044;0044; +1D4D4;1D4D4;1D4D4;0045;0045; +1D4D5;1D4D5;1D4D5;0046;0046; +1D4D6;1D4D6;1D4D6;0047;0047; +1D4D7;1D4D7;1D4D7;0048;0048; +1D4D8;1D4D8;1D4D8;0049;0049; +1D4D9;1D4D9;1D4D9;004A;004A; +1D4DA;1D4DA;1D4DA;004B;004B; +1D4DB;1D4DB;1D4DB;004C;004C; +1D4DC;1D4DC;1D4DC;004D;004D; +1D4DD;1D4DD;1D4DD;004E;004E; +1D4DE;1D4DE;1D4DE;004F;004F; +1D4DF;1D4DF;1D4DF;0050;0050; +1D4E0;1D4E0;1D4E0;0051;0051; +1D4E1;1D4E1;1D4E1;0052;0052; +1D4E2;1D4E2;1D4E2;0053;0053; +1D4E3;1D4E3;1D4E3;0054;0054; +1D4E4;1D4E4;1D4E4;0055;0055; +1D4E5;1D4E5;1D4E5;0056;0056; +1D4E6;1D4E6;1D4E6;0057;0057; +1D4E7;1D4E7;1D4E7;0058;0058; +1D4E8;1D4E8;1D4E8;0059;0059; +1D4E9;1D4E9;1D4E9;005A;005A; +1D4EA;1D4EA;1D4EA;0061;0061; +1D4EB;1D4EB;1D4EB;0062;0062; +1D4EC;1D4EC;1D4EC;0063;0063; +1D4ED;1D4ED;1D4ED;0064;0064; +1D4EE;1D4EE;1D4EE;0065;0065; +1D4EF;1D4EF;1D4EF;0066;0066; +1D4F0;1D4F0;1D4F0;0067;0067; +1D4F1;1D4F1;1D4F1;0068;0068; +1D4F2;1D4F2;1D4F2;0069;0069; +1D4F3;1D4F3;1D4F3;006A;006A; +1D4F4;1D4F4;1D4F4;006B;006B; +1D4F5;1D4F5;1D4F5;006C;006C; +1D4F6;1D4F6;1D4F6;006D;006D; +1D4F7;1D4F7;1D4F7;006E;006E; +1D4F8;1D4F8;1D4F8;006F;006F; +1D4F9;1D4F9;1D4F9;0070;0070; +1D4FA;1D4FA;1D4FA;0071;0071; +1D4FB;1D4FB;1D4FB;0072;0072; +1D4FC;1D4FC;1D4FC;0073;0073; +1D4FD;1D4FD;1D4FD;0074;0074; +1D4FE;1D4FE;1D4FE;0075;0075; +1D4FF;1D4FF;1D4FF;0076;0076; +1D500;1D500;1D500;0077;0077; +1D501;1D501;1D501;0078;0078; +1D502;1D502;1D502;0079;0079; +1D503;1D503;1D503;007A;007A; +1D504;1D504;1D504;0041;0041; +1D505;1D505;1D505;0042;0042; +1D507;1D507;1D507;0044;0044; +1D508;1D508;1D508;0045;0045; +1D509;1D509;1D509;0046;0046; +1D50A;1D50A;1D50A;0047;0047; +1D50D;1D50D;1D50D;004A;004A; +1D50E;1D50E;1D50E;004B;004B; +1D50F;1D50F;1D50F;004C;004C; +1D510;1D510;1D510;004D;004D; +1D511;1D511;1D511;004E;004E; +1D512;1D512;1D512;004F;004F; +1D513;1D513;1D513;0050;0050; +1D514;1D514;1D514;0051;0051; +1D516;1D516;1D516;0053;0053; +1D517;1D517;1D517;0054;0054; +1D518;1D518;1D518;0055;0055; +1D519;1D519;1D519;0056;0056; +1D51A;1D51A;1D51A;0057;0057; +1D51B;1D51B;1D51B;0058;0058; +1D51C;1D51C;1D51C;0059;0059; +1D51E;1D51E;1D51E;0061;0061; +1D51F;1D51F;1D51F;0062;0062; +1D520;1D520;1D520;0063;0063; +1D521;1D521;1D521;0064;0064; +1D522;1D522;1D522;0065;0065; +1D523;1D523;1D523;0066;0066; +1D524;1D524;1D524;0067;0067; +1D525;1D525;1D525;0068;0068; +1D526;1D526;1D526;0069;0069; +1D527;1D527;1D527;006A;006A; +1D528;1D528;1D528;006B;006B; +1D529;1D529;1D529;006C;006C; +1D52A;1D52A;1D52A;006D;006D; +1D52B;1D52B;1D52B;006E;006E; +1D52C;1D52C;1D52C;006F;006F; +1D52D;1D52D;1D52D;0070;0070; +1D52E;1D52E;1D52E;0071;0071; +1D52F;1D52F;1D52F;0072;0072; +1D530;1D530;1D530;0073;0073; +1D531;1D531;1D531;0074;0074; +1D532;1D532;1D532;0075;0075; +1D533;1D533;1D533;0076;0076; +1D534;1D534;1D534;0077;0077; +1D535;1D535;1D535;0078;0078; +1D536;1D536;1D536;0079;0079; +1D537;1D537;1D537;007A;007A; +1D538;1D538;1D538;0041;0041; +1D539;1D539;1D539;0042;0042; +1D53B;1D53B;1D53B;0044;0044; +1D53C;1D53C;1D53C;0045;0045; +1D53D;1D53D;1D53D;0046;0046; +1D53E;1D53E;1D53E;0047;0047; +1D540;1D540;1D540;0049;0049; +1D541;1D541;1D541;004A;004A; +1D542;1D542;1D542;004B;004B; +1D543;1D543;1D543;004C;004C; +1D544;1D544;1D544;004D;004D; +1D546;1D546;1D546;004F;004F; +1D54A;1D54A;1D54A;0053;0053; +1D54B;1D54B;1D54B;0054;0054; +1D54C;1D54C;1D54C;0055;0055; +1D54D;1D54D;1D54D;0056;0056; +1D54E;1D54E;1D54E;0057;0057; +1D54F;1D54F;1D54F;0058;0058; +1D550;1D550;1D550;0059;0059; +1D552;1D552;1D552;0061;0061; +1D553;1D553;1D553;0062;0062; +1D554;1D554;1D554;0063;0063; +1D555;1D555;1D555;0064;0064; +1D556;1D556;1D556;0065;0065; +1D557;1D557;1D557;0066;0066; +1D558;1D558;1D558;0067;0067; +1D559;1D559;1D559;0068;0068; +1D55A;1D55A;1D55A;0069;0069; +1D55B;1D55B;1D55B;006A;006A; +1D55C;1D55C;1D55C;006B;006B; +1D55D;1D55D;1D55D;006C;006C; +1D55E;1D55E;1D55E;006D;006D; +1D55F;1D55F;1D55F;006E;006E; +1D560;1D560;1D560;006F;006F; +1D561;1D561;1D561;0070;0070; +1D562;1D562;1D562;0071;0071; +1D563;1D563;1D563;0072;0072; +1D564;1D564;1D564;0073;0073; +1D565;1D565;1D565;0074;0074; +1D566;1D566;1D566;0075;0075; +1D567;1D567;1D567;0076;0076; +1D568;1D568;1D568;0077;0077; +1D569;1D569;1D569;0078;0078; +1D56A;1D56A;1D56A;0079;0079; +1D56B;1D56B;1D56B;007A;007A; +1D56C;1D56C;1D56C;0041;0041; +1D56D;1D56D;1D56D;0042;0042; +1D56E;1D56E;1D56E;0043;0043; +1D56F;1D56F;1D56F;0044;0044; +1D570;1D570;1D570;0045;0045; +1D571;1D571;1D571;0046;0046; +1D572;1D572;1D572;0047;0047; +1D573;1D573;1D573;0048;0048; +1D574;1D574;1D574;0049;0049; +1D575;1D575;1D575;004A;004A; +1D576;1D576;1D576;004B;004B; +1D577;1D577;1D577;004C;004C; +1D578;1D578;1D578;004D;004D; +1D579;1D579;1D579;004E;004E; +1D57A;1D57A;1D57A;004F;004F; +1D57B;1D57B;1D57B;0050;0050; +1D57C;1D57C;1D57C;0051;0051; +1D57D;1D57D;1D57D;0052;0052; +1D57E;1D57E;1D57E;0053;0053; +1D57F;1D57F;1D57F;0054;0054; +1D580;1D580;1D580;0055;0055; +1D581;1D581;1D581;0056;0056; +1D582;1D582;1D582;0057;0057; +1D583;1D583;1D583;0058;0058; +1D584;1D584;1D584;0059;0059; +1D585;1D585;1D585;005A;005A; +1D586;1D586;1D586;0061;0061; +1D587;1D587;1D587;0062;0062; +1D588;1D588;1D588;0063;0063; +1D589;1D589;1D589;0064;0064; +1D58A;1D58A;1D58A;0065;0065; +1D58B;1D58B;1D58B;0066;0066; +1D58C;1D58C;1D58C;0067;0067; +1D58D;1D58D;1D58D;0068;0068; +1D58E;1D58E;1D58E;0069;0069; +1D58F;1D58F;1D58F;006A;006A; +1D590;1D590;1D590;006B;006B; +1D591;1D591;1D591;006C;006C; +1D592;1D592;1D592;006D;006D; +1D593;1D593;1D593;006E;006E; +1D594;1D594;1D594;006F;006F; +1D595;1D595;1D595;0070;0070; +1D596;1D596;1D596;0071;0071; +1D597;1D597;1D597;0072;0072; +1D598;1D598;1D598;0073;0073; +1D599;1D599;1D599;0074;0074; +1D59A;1D59A;1D59A;0075;0075; +1D59B;1D59B;1D59B;0076;0076; +1D59C;1D59C;1D59C;0077;0077; +1D59D;1D59D;1D59D;0078;0078; +1D59E;1D59E;1D59E;0079;0079; +1D59F;1D59F;1D59F;007A;007A; +1D5A0;1D5A0;1D5A0;0041;0041; +1D5A1;1D5A1;1D5A1;0042;0042; +1D5A2;1D5A2;1D5A2;0043;0043; +1D5A3;1D5A3;1D5A3;0044;0044; +1D5A4;1D5A4;1D5A4;0045;0045; +1D5A5;1D5A5;1D5A5;0046;0046; +1D5A6;1D5A6;1D5A6;0047;0047; +1D5A7;1D5A7;1D5A7;0048;0048; +1D5A8;1D5A8;1D5A8;0049;0049; +1D5A9;1D5A9;1D5A9;004A;004A; +1D5AA;1D5AA;1D5AA;004B;004B; +1D5AB;1D5AB;1D5AB;004C;004C; +1D5AC;1D5AC;1D5AC;004D;004D; +1D5AD;1D5AD;1D5AD;004E;004E; +1D5AE;1D5AE;1D5AE;004F;004F; +1D5AF;1D5AF;1D5AF;0050;0050; +1D5B0;1D5B0;1D5B0;0051;0051; +1D5B1;1D5B1;1D5B1;0052;0052; +1D5B2;1D5B2;1D5B2;0053;0053; +1D5B3;1D5B3;1D5B3;0054;0054; +1D5B4;1D5B4;1D5B4;0055;0055; +1D5B5;1D5B5;1D5B5;0056;0056; +1D5B6;1D5B6;1D5B6;0057;0057; +1D5B7;1D5B7;1D5B7;0058;0058; +1D5B8;1D5B8;1D5B8;0059;0059; +1D5B9;1D5B9;1D5B9;005A;005A; +1D5BA;1D5BA;1D5BA;0061;0061; +1D5BB;1D5BB;1D5BB;0062;0062; +1D5BC;1D5BC;1D5BC;0063;0063; +1D5BD;1D5BD;1D5BD;0064;0064; +1D5BE;1D5BE;1D5BE;0065;0065; +1D5BF;1D5BF;1D5BF;0066;0066; +1D5C0;1D5C0;1D5C0;0067;0067; +1D5C1;1D5C1;1D5C1;0068;0068; +1D5C2;1D5C2;1D5C2;0069;0069; +1D5C3;1D5C3;1D5C3;006A;006A; +1D5C4;1D5C4;1D5C4;006B;006B; +1D5C5;1D5C5;1D5C5;006C;006C; +1D5C6;1D5C6;1D5C6;006D;006D; +1D5C7;1D5C7;1D5C7;006E;006E; +1D5C8;1D5C8;1D5C8;006F;006F; +1D5C9;1D5C9;1D5C9;0070;0070; +1D5CA;1D5CA;1D5CA;0071;0071; +1D5CB;1D5CB;1D5CB;0072;0072; +1D5CC;1D5CC;1D5CC;0073;0073; +1D5CD;1D5CD;1D5CD;0074;0074; +1D5CE;1D5CE;1D5CE;0075;0075; +1D5CF;1D5CF;1D5CF;0076;0076; +1D5D0;1D5D0;1D5D0;0077;0077; +1D5D1;1D5D1;1D5D1;0078;0078; +1D5D2;1D5D2;1D5D2;0079;0079; +1D5D3;1D5D3;1D5D3;007A;007A; +1D5D4;1D5D4;1D5D4;0041;0041; +1D5D5;1D5D5;1D5D5;0042;0042; +1D5D6;1D5D6;1D5D6;0043;0043; +1D5D7;1D5D7;1D5D7;0044;0044; +1D5D8;1D5D8;1D5D8;0045;0045; +1D5D9;1D5D9;1D5D9;0046;0046; +1D5DA;1D5DA;1D5DA;0047;0047; +1D5DB;1D5DB;1D5DB;0048;0048; +1D5DC;1D5DC;1D5DC;0049;0049; +1D5DD;1D5DD;1D5DD;004A;004A; +1D5DE;1D5DE;1D5DE;004B;004B; +1D5DF;1D5DF;1D5DF;004C;004C; +1D5E0;1D5E0;1D5E0;004D;004D; +1D5E1;1D5E1;1D5E1;004E;004E; +1D5E2;1D5E2;1D5E2;004F;004F; +1D5E3;1D5E3;1D5E3;0050;0050; +1D5E4;1D5E4;1D5E4;0051;0051; +1D5E5;1D5E5;1D5E5;0052;0052; +1D5E6;1D5E6;1D5E6;0053;0053; +1D5E7;1D5E7;1D5E7;0054;0054; +1D5E8;1D5E8;1D5E8;0055;0055; +1D5E9;1D5E9;1D5E9;0056;0056; +1D5EA;1D5EA;1D5EA;0057;0057; +1D5EB;1D5EB;1D5EB;0058;0058; +1D5EC;1D5EC;1D5EC;0059;0059; +1D5ED;1D5ED;1D5ED;005A;005A; +1D5EE;1D5EE;1D5EE;0061;0061; +1D5EF;1D5EF;1D5EF;0062;0062; +1D5F0;1D5F0;1D5F0;0063;0063; +1D5F1;1D5F1;1D5F1;0064;0064; +1D5F2;1D5F2;1D5F2;0065;0065; +1D5F3;1D5F3;1D5F3;0066;0066; +1D5F4;1D5F4;1D5F4;0067;0067; +1D5F5;1D5F5;1D5F5;0068;0068; +1D5F6;1D5F6;1D5F6;0069;0069; +1D5F7;1D5F7;1D5F7;006A;006A; +1D5F8;1D5F8;1D5F8;006B;006B; +1D5F9;1D5F9;1D5F9;006C;006C; +1D5FA;1D5FA;1D5FA;006D;006D; +1D5FB;1D5FB;1D5FB;006E;006E; +1D5FC;1D5FC;1D5FC;006F;006F; +1D5FD;1D5FD;1D5FD;0070;0070; +1D5FE;1D5FE;1D5FE;0071;0071; +1D5FF;1D5FF;1D5FF;0072;0072; +1D600;1D600;1D600;0073;0073; +1D601;1D601;1D601;0074;0074; +1D602;1D602;1D602;0075;0075; +1D603;1D603;1D603;0076;0076; +1D604;1D604;1D604;0077;0077; +1D605;1D605;1D605;0078;0078; +1D606;1D606;1D606;0079;0079; +1D607;1D607;1D607;007A;007A; +1D608;1D608;1D608;0041;0041; +1D609;1D609;1D609;0042;0042; +1D60A;1D60A;1D60A;0043;0043; +1D60B;1D60B;1D60B;0044;0044; +1D60C;1D60C;1D60C;0045;0045; +1D60D;1D60D;1D60D;0046;0046; +1D60E;1D60E;1D60E;0047;0047; +1D60F;1D60F;1D60F;0048;0048; +1D610;1D610;1D610;0049;0049; +1D611;1D611;1D611;004A;004A; +1D612;1D612;1D612;004B;004B; +1D613;1D613;1D613;004C;004C; +1D614;1D614;1D614;004D;004D; +1D615;1D615;1D615;004E;004E; +1D616;1D616;1D616;004F;004F; +1D617;1D617;1D617;0050;0050; +1D618;1D618;1D618;0051;0051; +1D619;1D619;1D619;0052;0052; +1D61A;1D61A;1D61A;0053;0053; +1D61B;1D61B;1D61B;0054;0054; +1D61C;1D61C;1D61C;0055;0055; +1D61D;1D61D;1D61D;0056;0056; +1D61E;1D61E;1D61E;0057;0057; +1D61F;1D61F;1D61F;0058;0058; +1D620;1D620;1D620;0059;0059; +1D621;1D621;1D621;005A;005A; +1D622;1D622;1D622;0061;0061; +1D623;1D623;1D623;0062;0062; +1D624;1D624;1D624;0063;0063; +1D625;1D625;1D625;0064;0064; +1D626;1D626;1D626;0065;0065; +1D627;1D627;1D627;0066;0066; +1D628;1D628;1D628;0067;0067; +1D629;1D629;1D629;0068;0068; +1D62A;1D62A;1D62A;0069;0069; +1D62B;1D62B;1D62B;006A;006A; +1D62C;1D62C;1D62C;006B;006B; +1D62D;1D62D;1D62D;006C;006C; +1D62E;1D62E;1D62E;006D;006D; +1D62F;1D62F;1D62F;006E;006E; +1D630;1D630;1D630;006F;006F; +1D631;1D631;1D631;0070;0070; +1D632;1D632;1D632;0071;0071; +1D633;1D633;1D633;0072;0072; +1D634;1D634;1D634;0073;0073; +1D635;1D635;1D635;0074;0074; +1D636;1D636;1D636;0075;0075; +1D637;1D637;1D637;0076;0076; +1D638;1D638;1D638;0077;0077; +1D639;1D639;1D639;0078;0078; +1D63A;1D63A;1D63A;0079;0079; +1D63B;1D63B;1D63B;007A;007A; +1D63C;1D63C;1D63C;0041;0041; +1D63D;1D63D;1D63D;0042;0042; +1D63E;1D63E;1D63E;0043;0043; +1D63F;1D63F;1D63F;0044;0044; +1D640;1D640;1D640;0045;0045; +1D641;1D641;1D641;0046;0046; +1D642;1D642;1D642;0047;0047; +1D643;1D643;1D643;0048;0048; +1D644;1D644;1D644;0049;0049; +1D645;1D645;1D645;004A;004A; +1D646;1D646;1D646;004B;004B; +1D647;1D647;1D647;004C;004C; +1D648;1D648;1D648;004D;004D; +1D649;1D649;1D649;004E;004E; +1D64A;1D64A;1D64A;004F;004F; +1D64B;1D64B;1D64B;0050;0050; +1D64C;1D64C;1D64C;0051;0051; +1D64D;1D64D;1D64D;0052;0052; +1D64E;1D64E;1D64E;0053;0053; +1D64F;1D64F;1D64F;0054;0054; +1D650;1D650;1D650;0055;0055; +1D651;1D651;1D651;0056;0056; +1D652;1D652;1D652;0057;0057; +1D653;1D653;1D653;0058;0058; +1D654;1D654;1D654;0059;0059; +1D655;1D655;1D655;005A;005A; +1D656;1D656;1D656;0061;0061; +1D657;1D657;1D657;0062;0062; +1D658;1D658;1D658;0063;0063; +1D659;1D659;1D659;0064;0064; +1D65A;1D65A;1D65A;0065;0065; +1D65B;1D65B;1D65B;0066;0066; +1D65C;1D65C;1D65C;0067;0067; +1D65D;1D65D;1D65D;0068;0068; +1D65E;1D65E;1D65E;0069;0069; +1D65F;1D65F;1D65F;006A;006A; +1D660;1D660;1D660;006B;006B; +1D661;1D661;1D661;006C;006C; +1D662;1D662;1D662;006D;006D; +1D663;1D663;1D663;006E;006E; +1D664;1D664;1D664;006F;006F; +1D665;1D665;1D665;0070;0070; +1D666;1D666;1D666;0071;0071; +1D667;1D667;1D667;0072;0072; +1D668;1D668;1D668;0073;0073; +1D669;1D669;1D669;0074;0074; +1D66A;1D66A;1D66A;0075;0075; +1D66B;1D66B;1D66B;0076;0076; +1D66C;1D66C;1D66C;0077;0077; +1D66D;1D66D;1D66D;0078;0078; +1D66E;1D66E;1D66E;0079;0079; +1D66F;1D66F;1D66F;007A;007A; +1D670;1D670;1D670;0041;0041; +1D671;1D671;1D671;0042;0042; +1D672;1D672;1D672;0043;0043; +1D673;1D673;1D673;0044;0044; +1D674;1D674;1D674;0045;0045; +1D675;1D675;1D675;0046;0046; +1D676;1D676;1D676;0047;0047; +1D677;1D677;1D677;0048;0048; +1D678;1D678;1D678;0049;0049; +1D679;1D679;1D679;004A;004A; +1D67A;1D67A;1D67A;004B;004B; +1D67B;1D67B;1D67B;004C;004C; +1D67C;1D67C;1D67C;004D;004D; +1D67D;1D67D;1D67D;004E;004E; +1D67E;1D67E;1D67E;004F;004F; +1D67F;1D67F;1D67F;0050;0050; +1D680;1D680;1D680;0051;0051; +1D681;1D681;1D681;0052;0052; +1D682;1D682;1D682;0053;0053; +1D683;1D683;1D683;0054;0054; +1D684;1D684;1D684;0055;0055; +1D685;1D685;1D685;0056;0056; +1D686;1D686;1D686;0057;0057; +1D687;1D687;1D687;0058;0058; +1D688;1D688;1D688;0059;0059; +1D689;1D689;1D689;005A;005A; +1D68A;1D68A;1D68A;0061;0061; +1D68B;1D68B;1D68B;0062;0062; +1D68C;1D68C;1D68C;0063;0063; +1D68D;1D68D;1D68D;0064;0064; +1D68E;1D68E;1D68E;0065;0065; +1D68F;1D68F;1D68F;0066;0066; +1D690;1D690;1D690;0067;0067; +1D691;1D691;1D691;0068;0068; +1D692;1D692;1D692;0069;0069; +1D693;1D693;1D693;006A;006A; +1D694;1D694;1D694;006B;006B; +1D695;1D695;1D695;006C;006C; +1D696;1D696;1D696;006D;006D; +1D697;1D697;1D697;006E;006E; +1D698;1D698;1D698;006F;006F; +1D699;1D699;1D699;0070;0070; +1D69A;1D69A;1D69A;0071;0071; +1D69B;1D69B;1D69B;0072;0072; +1D69C;1D69C;1D69C;0073;0073; +1D69D;1D69D;1D69D;0074;0074; +1D69E;1D69E;1D69E;0075;0075; +1D69F;1D69F;1D69F;0076;0076; +1D6A0;1D6A0;1D6A0;0077;0077; +1D6A1;1D6A1;1D6A1;0078;0078; +1D6A2;1D6A2;1D6A2;0079;0079; +1D6A3;1D6A3;1D6A3;007A;007A; +1D6A4;1D6A4;1D6A4;0131;0131; +1D6A5;1D6A5;1D6A5;0237;0237; +1D6A8;1D6A8;1D6A8;0391;0391; +1D6A9;1D6A9;1D6A9;0392;0392; +1D6AA;1D6AA;1D6AA;0393;0393; +1D6AB;1D6AB;1D6AB;0394;0394; +1D6AC;1D6AC;1D6AC;0395;0395; +1D6AD;1D6AD;1D6AD;0396;0396; +1D6AE;1D6AE;1D6AE;0397;0397; +1D6AF;1D6AF;1D6AF;0398;0398; +1D6B0;1D6B0;1D6B0;0399;0399; +1D6B1;1D6B1;1D6B1;039A;039A; +1D6B2;1D6B2;1D6B2;039B;039B; +1D6B3;1D6B3;1D6B3;039C;039C; +1D6B4;1D6B4;1D6B4;039D;039D; +1D6B5;1D6B5;1D6B5;039E;039E; +1D6B6;1D6B6;1D6B6;039F;039F; +1D6B7;1D6B7;1D6B7;03A0;03A0; +1D6B8;1D6B8;1D6B8;03A1;03A1; +1D6B9;1D6B9;1D6B9;0398;0398; +1D6BA;1D6BA;1D6BA;03A3;03A3; +1D6BB;1D6BB;1D6BB;03A4;03A4; +1D6BC;1D6BC;1D6BC;03A5;03A5; +1D6BD;1D6BD;1D6BD;03A6;03A6; +1D6BE;1D6BE;1D6BE;03A7;03A7; +1D6BF;1D6BF;1D6BF;03A8;03A8; +1D6C0;1D6C0;1D6C0;03A9;03A9; +1D6C1;1D6C1;1D6C1;2207;2207; +1D6C2;1D6C2;1D6C2;03B1;03B1; +1D6C3;1D6C3;1D6C3;03B2;03B2; +1D6C4;1D6C4;1D6C4;03B3;03B3; +1D6C5;1D6C5;1D6C5;03B4;03B4; +1D6C6;1D6C6;1D6C6;03B5;03B5; +1D6C7;1D6C7;1D6C7;03B6;03B6; +1D6C8;1D6C8;1D6C8;03B7;03B7; +1D6C9;1D6C9;1D6C9;03B8;03B8; +1D6CA;1D6CA;1D6CA;03B9;03B9; +1D6CB;1D6CB;1D6CB;03BA;03BA; +1D6CC;1D6CC;1D6CC;03BB;03BB; +1D6CD;1D6CD;1D6CD;03BC;03BC; +1D6CE;1D6CE;1D6CE;03BD;03BD; +1D6CF;1D6CF;1D6CF;03BE;03BE; +1D6D0;1D6D0;1D6D0;03BF;03BF; +1D6D1;1D6D1;1D6D1;03C0;03C0; +1D6D2;1D6D2;1D6D2;03C1;03C1; +1D6D3;1D6D3;1D6D3;03C2;03C2; +1D6D4;1D6D4;1D6D4;03C3;03C3; +1D6D5;1D6D5;1D6D5;03C4;03C4; +1D6D6;1D6D6;1D6D6;03C5;03C5; +1D6D7;1D6D7;1D6D7;03C6;03C6; +1D6D8;1D6D8;1D6D8;03C7;03C7; +1D6D9;1D6D9;1D6D9;03C8;03C8; +1D6DA;1D6DA;1D6DA;03C9;03C9; +1D6DB;1D6DB;1D6DB;2202;2202; +1D6DC;1D6DC;1D6DC;03B5;03B5; +1D6DD;1D6DD;1D6DD;03B8;03B8; +1D6DE;1D6DE;1D6DE;03BA;03BA; +1D6DF;1D6DF;1D6DF;03C6;03C6; +1D6E0;1D6E0;1D6E0;03C1;03C1; +1D6E1;1D6E1;1D6E1;03C0;03C0; +1D6E2;1D6E2;1D6E2;0391;0391; +1D6E3;1D6E3;1D6E3;0392;0392; +1D6E4;1D6E4;1D6E4;0393;0393; +1D6E5;1D6E5;1D6E5;0394;0394; +1D6E6;1D6E6;1D6E6;0395;0395; +1D6E7;1D6E7;1D6E7;0396;0396; +1D6E8;1D6E8;1D6E8;0397;0397; +1D6E9;1D6E9;1D6E9;0398;0398; +1D6EA;1D6EA;1D6EA;0399;0399; +1D6EB;1D6EB;1D6EB;039A;039A; +1D6EC;1D6EC;1D6EC;039B;039B; +1D6ED;1D6ED;1D6ED;039C;039C; +1D6EE;1D6EE;1D6EE;039D;039D; +1D6EF;1D6EF;1D6EF;039E;039E; +1D6F0;1D6F0;1D6F0;039F;039F; +1D6F1;1D6F1;1D6F1;03A0;03A0; +1D6F2;1D6F2;1D6F2;03A1;03A1; +1D6F3;1D6F3;1D6F3;0398;0398; +1D6F4;1D6F4;1D6F4;03A3;03A3; +1D6F5;1D6F5;1D6F5;03A4;03A4; +1D6F6;1D6F6;1D6F6;03A5;03A5; +1D6F7;1D6F7;1D6F7;03A6;03A6; +1D6F8;1D6F8;1D6F8;03A7;03A7; +1D6F9;1D6F9;1D6F9;03A8;03A8; +1D6FA;1D6FA;1D6FA;03A9;03A9; +1D6FB;1D6FB;1D6FB;2207;2207; +1D6FC;1D6FC;1D6FC;03B1;03B1; +1D6FD;1D6FD;1D6FD;03B2;03B2; +1D6FE;1D6FE;1D6FE;03B3;03B3; +1D6FF;1D6FF;1D6FF;03B4;03B4; +1D700;1D700;1D700;03B5;03B5; +1D701;1D701;1D701;03B6;03B6; +1D702;1D702;1D702;03B7;03B7; +1D703;1D703;1D703;03B8;03B8; +1D704;1D704;1D704;03B9;03B9; +1D705;1D705;1D705;03BA;03BA; +1D706;1D706;1D706;03BB;03BB; +1D707;1D707;1D707;03BC;03BC; +1D708;1D708;1D708;03BD;03BD; +1D709;1D709;1D709;03BE;03BE; +1D70A;1D70A;1D70A;03BF;03BF; +1D70B;1D70B;1D70B;03C0;03C0; +1D70C;1D70C;1D70C;03C1;03C1; +1D70D;1D70D;1D70D;03C2;03C2; +1D70E;1D70E;1D70E;03C3;03C3; +1D70F;1D70F;1D70F;03C4;03C4; +1D710;1D710;1D710;03C5;03C5; +1D711;1D711;1D711;03C6;03C6; +1D712;1D712;1D712;03C7;03C7; +1D713;1D713;1D713;03C8;03C8; +1D714;1D714;1D714;03C9;03C9; +1D715;1D715;1D715;2202;2202; +1D716;1D716;1D716;03B5;03B5; +1D717;1D717;1D717;03B8;03B8; +1D718;1D718;1D718;03BA;03BA; +1D719;1D719;1D719;03C6;03C6; +1D71A;1D71A;1D71A;03C1;03C1; +1D71B;1D71B;1D71B;03C0;03C0; +1D71C;1D71C;1D71C;0391;0391; +1D71D;1D71D;1D71D;0392;0392; +1D71E;1D71E;1D71E;0393;0393; +1D71F;1D71F;1D71F;0394;0394; +1D720;1D720;1D720;0395;0395; +1D721;1D721;1D721;0396;0396; +1D722;1D722;1D722;0397;0397; +1D723;1D723;1D723;0398;0398; +1D724;1D724;1D724;0399;0399; +1D725;1D725;1D725;039A;039A; +1D726;1D726;1D726;039B;039B; +1D727;1D727;1D727;039C;039C; +1D728;1D728;1D728;039D;039D; +1D729;1D729;1D729;039E;039E; +1D72A;1D72A;1D72A;039F;039F; +1D72B;1D72B;1D72B;03A0;03A0; +1D72C;1D72C;1D72C;03A1;03A1; +1D72D;1D72D;1D72D;0398;0398; +1D72E;1D72E;1D72E;03A3;03A3; +1D72F;1D72F;1D72F;03A4;03A4; +1D730;1D730;1D730;03A5;03A5; +1D731;1D731;1D731;03A6;03A6; +1D732;1D732;1D732;03A7;03A7; +1D733;1D733;1D733;03A8;03A8; +1D734;1D734;1D734;03A9;03A9; +1D735;1D735;1D735;2207;2207; +1D736;1D736;1D736;03B1;03B1; +1D737;1D737;1D737;03B2;03B2; +1D738;1D738;1D738;03B3;03B3; +1D739;1D739;1D739;03B4;03B4; +1D73A;1D73A;1D73A;03B5;03B5; +1D73B;1D73B;1D73B;03B6;03B6; +1D73C;1D73C;1D73C;03B7;03B7; +1D73D;1D73D;1D73D;03B8;03B8; +1D73E;1D73E;1D73E;03B9;03B9; +1D73F;1D73F;1D73F;03BA;03BA; +1D740;1D740;1D740;03BB;03BB; +1D741;1D741;1D741;03BC;03BC; +1D742;1D742;1D742;03BD;03BD; +1D743;1D743;1D743;03BE;03BE; +1D744;1D744;1D744;03BF;03BF; +1D745;1D745;1D745;03C0;03C0; +1D746;1D746;1D746;03C1;03C1; +1D747;1D747;1D747;03C2;03C2; +1D748;1D748;1D748;03C3;03C3; +1D749;1D749;1D749;03C4;03C4; +1D74A;1D74A;1D74A;03C5;03C5; +1D74B;1D74B;1D74B;03C6;03C6; +1D74C;1D74C;1D74C;03C7;03C7; +1D74D;1D74D;1D74D;03C8;03C8; +1D74E;1D74E;1D74E;03C9;03C9; +1D74F;1D74F;1D74F;2202;2202; +1D750;1D750;1D750;03B5;03B5; +1D751;1D751;1D751;03B8;03B8; +1D752;1D752;1D752;03BA;03BA; +1D753;1D753;1D753;03C6;03C6; +1D754;1D754;1D754;03C1;03C1; +1D755;1D755;1D755;03C0;03C0; +1D756;1D756;1D756;0391;0391; +1D757;1D757;1D757;0392;0392; +1D758;1D758;1D758;0393;0393; +1D759;1D759;1D759;0394;0394; +1D75A;1D75A;1D75A;0395;0395; +1D75B;1D75B;1D75B;0396;0396; +1D75C;1D75C;1D75C;0397;0397; +1D75D;1D75D;1D75D;0398;0398; +1D75E;1D75E;1D75E;0399;0399; +1D75F;1D75F;1D75F;039A;039A; +1D760;1D760;1D760;039B;039B; +1D761;1D761;1D761;039C;039C; +1D762;1D762;1D762;039D;039D; +1D763;1D763;1D763;039E;039E; +1D764;1D764;1D764;039F;039F; +1D765;1D765;1D765;03A0;03A0; +1D766;1D766;1D766;03A1;03A1; +1D767;1D767;1D767;0398;0398; +1D768;1D768;1D768;03A3;03A3; +1D769;1D769;1D769;03A4;03A4; +1D76A;1D76A;1D76A;03A5;03A5; +1D76B;1D76B;1D76B;03A6;03A6; +1D76C;1D76C;1D76C;03A7;03A7; +1D76D;1D76D;1D76D;03A8;03A8; +1D76E;1D76E;1D76E;03A9;03A9; +1D76F;1D76F;1D76F;2207;2207; +1D770;1D770;1D770;03B1;03B1; +1D771;1D771;1D771;03B2;03B2; +1D772;1D772;1D772;03B3;03B3; +1D773;1D773;1D773;03B4;03B4; +1D774;1D774;1D774;03B5;03B5; +1D775;1D775;1D775;03B6;03B6; +1D776;1D776;1D776;03B7;03B7; +1D777;1D777;1D777;03B8;03B8; +1D778;1D778;1D778;03B9;03B9; +1D779;1D779;1D779;03BA;03BA; +1D77A;1D77A;1D77A;03BB;03BB; +1D77B;1D77B;1D77B;03BC;03BC; +1D77C;1D77C;1D77C;03BD;03BD; +1D77D;1D77D;1D77D;03BE;03BE; +1D77E;1D77E;1D77E;03BF;03BF; +1D77F;1D77F;1D77F;03C0;03C0; +1D780;1D780;1D780;03C1;03C1; +1D781;1D781;1D781;03C2;03C2; +1D782;1D782;1D782;03C3;03C3; +1D783;1D783;1D783;03C4;03C4; +1D784;1D784;1D784;03C5;03C5; +1D785;1D785;1D785;03C6;03C6; +1D786;1D786;1D786;03C7;03C7; +1D787;1D787;1D787;03C8;03C8; +1D788;1D788;1D788;03C9;03C9; +1D789;1D789;1D789;2202;2202; +1D78A;1D78A;1D78A;03B5;03B5; +1D78B;1D78B;1D78B;03B8;03B8; +1D78C;1D78C;1D78C;03BA;03BA; +1D78D;1D78D;1D78D;03C6;03C6; +1D78E;1D78E;1D78E;03C1;03C1; +1D78F;1D78F;1D78F;03C0;03C0; +1D790;1D790;1D790;0391;0391; +1D791;1D791;1D791;0392;0392; +1D792;1D792;1D792;0393;0393; +1D793;1D793;1D793;0394;0394; +1D794;1D794;1D794;0395;0395; +1D795;1D795;1D795;0396;0396; +1D796;1D796;1D796;0397;0397; +1D797;1D797;1D797;0398;0398; +1D798;1D798;1D798;0399;0399; +1D799;1D799;1D799;039A;039A; +1D79A;1D79A;1D79A;039B;039B; +1D79B;1D79B;1D79B;039C;039C; +1D79C;1D79C;1D79C;039D;039D; +1D79D;1D79D;1D79D;039E;039E; +1D79E;1D79E;1D79E;039F;039F; +1D79F;1D79F;1D79F;03A0;03A0; +1D7A0;1D7A0;1D7A0;03A1;03A1; +1D7A1;1D7A1;1D7A1;0398;0398; +1D7A2;1D7A2;1D7A2;03A3;03A3; +1D7A3;1D7A3;1D7A3;03A4;03A4; +1D7A4;1D7A4;1D7A4;03A5;03A5; +1D7A5;1D7A5;1D7A5;03A6;03A6; +1D7A6;1D7A6;1D7A6;03A7;03A7; +1D7A7;1D7A7;1D7A7;03A8;03A8; +1D7A8;1D7A8;1D7A8;03A9;03A9; +1D7A9;1D7A9;1D7A9;2207;2207; +1D7AA;1D7AA;1D7AA;03B1;03B1; +1D7AB;1D7AB;1D7AB;03B2;03B2; +1D7AC;1D7AC;1D7AC;03B3;03B3; +1D7AD;1D7AD;1D7AD;03B4;03B4; +1D7AE;1D7AE;1D7AE;03B5;03B5; +1D7AF;1D7AF;1D7AF;03B6;03B6; +1D7B0;1D7B0;1D7B0;03B7;03B7; +1D7B1;1D7B1;1D7B1;03B8;03B8; +1D7B2;1D7B2;1D7B2;03B9;03B9; +1D7B3;1D7B3;1D7B3;03BA;03BA; +1D7B4;1D7B4;1D7B4;03BB;03BB; +1D7B5;1D7B5;1D7B5;03BC;03BC; +1D7B6;1D7B6;1D7B6;03BD;03BD; +1D7B7;1D7B7;1D7B7;03BE;03BE; +1D7B8;1D7B8;1D7B8;03BF;03BF; +1D7B9;1D7B9;1D7B9;03C0;03C0; +1D7BA;1D7BA;1D7BA;03C1;03C1; +1D7BB;1D7BB;1D7BB;03C2;03C2; +1D7BC;1D7BC;1D7BC;03C3;03C3; +1D7BD;1D7BD;1D7BD;03C4;03C4; +1D7BE;1D7BE;1D7BE;03C5;03C5; +1D7BF;1D7BF;1D7BF;03C6;03C6; +1D7C0;1D7C0;1D7C0;03C7;03C7; +1D7C1;1D7C1;1D7C1;03C8;03C8; +1D7C2;1D7C2;1D7C2;03C9;03C9; +1D7C3;1D7C3;1D7C3;2202;2202; +1D7C4;1D7C4;1D7C4;03B5;03B5; +1D7C5;1D7C5;1D7C5;03B8;03B8; +1D7C6;1D7C6;1D7C6;03BA;03BA; +1D7C7;1D7C7;1D7C7;03C6;03C6; +1D7C8;1D7C8;1D7C8;03C1;03C1; +1D7C9;1D7C9;1D7C9;03C0;03C0; +1D7CA;1D7CA;1D7CA;03DC;03DC; +1D7CB;1D7CB;1D7CB;03DD;03DD; +1D7CE;1D7CE;1D7CE;0030;0030; +1D7CF;1D7CF;1D7CF;0031;0031; +1D7D0;1D7D0;1D7D0;0032;0032; +1D7D1;1D7D1;1D7D1;0033;0033; +1D7D2;1D7D2;1D7D2;0034;0034; +1D7D3;1D7D3;1D7D3;0035;0035; +1D7D4;1D7D4;1D7D4;0036;0036; +1D7D5;1D7D5;1D7D5;0037;0037; +1D7D6;1D7D6;1D7D6;0038;0038; +1D7D7;1D7D7;1D7D7;0039;0039; +1D7D8;1D7D8;1D7D8;0030;0030; +1D7D9;1D7D9;1D7D9;0031;0031; +1D7DA;1D7DA;1D7DA;0032;0032; +1D7DB;1D7DB;1D7DB;0033;0033; +1D7DC;1D7DC;1D7DC;0034;0034; +1D7DD;1D7DD;1D7DD;0035;0035; +1D7DE;1D7DE;1D7DE;0036;0036; +1D7DF;1D7DF;1D7DF;0037;0037; +1D7E0;1D7E0;1D7E0;0038;0038; +1D7E1;1D7E1;1D7E1;0039;0039; +1D7E2;1D7E2;1D7E2;0030;0030; +1D7E3;1D7E3;1D7E3;0031;0031; +1D7E4;1D7E4;1D7E4;0032;0032; +1D7E5;1D7E5;1D7E5;0033;0033; +1D7E6;1D7E6;1D7E6;0034;0034; +1D7E7;1D7E7;1D7E7;0035;0035; +1D7E8;1D7E8;1D7E8;0036;0036; +1D7E9;1D7E9;1D7E9;0037;0037; +1D7EA;1D7EA;1D7EA;0038;0038; +1D7EB;1D7EB;1D7EB;0039;0039; +1D7EC;1D7EC;1D7EC;0030;0030; +1D7ED;1D7ED;1D7ED;0031;0031; +1D7EE;1D7EE;1D7EE;0032;0032; +1D7EF;1D7EF;1D7EF;0033;0033; +1D7F0;1D7F0;1D7F0;0034;0034; +1D7F1;1D7F1;1D7F1;0035;0035; +1D7F2;1D7F2;1D7F2;0036;0036; +1D7F3;1D7F3;1D7F3;0037;0037; +1D7F4;1D7F4;1D7F4;0038;0038; +1D7F5;1D7F5;1D7F5;0039;0039; +1D7F6;1D7F6;1D7F6;0030;0030; +1D7F7;1D7F7;1D7F7;0031;0031; +1D7F8;1D7F8;1D7F8;0032;0032; +1D7F9;1D7F9;1D7F9;0033;0033; +1D7FA;1D7FA;1D7FA;0034;0034; +1D7FB;1D7FB;1D7FB;0035;0035; +1D7FC;1D7FC;1D7FC;0036;0036; +1D7FD;1D7FD;1D7FD;0037;0037; +1D7FE;1D7FE;1D7FE;0038;0038; +1D7FF;1D7FF;1D7FF;0039;0039; +2F800;4E3D;4E3D;4E3D;4E3D; +2F801;4E38;4E38;4E38;4E38; +2F802;4E41;4E41;4E41;4E41; +2F803;20122;20122;20122;20122; +2F804;4F60;4F60;4F60;4F60; +2F805;4FAE;4FAE;4FAE;4FAE; +2F806;4FBB;4FBB;4FBB;4FBB; +2F807;5002;5002;5002;5002; +2F808;507A;507A;507A;507A; +2F809;5099;5099;5099;5099; +2F80A;50E7;50E7;50E7;50E7; +2F80B;50CF;50CF;50CF;50CF; +2F80C;349E;349E;349E;349E; +2F80D;2063A;2063A;2063A;2063A; +2F80E;514D;514D;514D;514D; +2F80F;5154;5154;5154;5154; +2F810;5164;5164;5164;5164; +2F811;5177;5177;5177;5177; +2F812;2051C;2051C;2051C;2051C; +2F813;34B9;34B9;34B9;34B9; +2F814;5167;5167;5167;5167; +2F815;518D;518D;518D;518D; +2F816;2054B;2054B;2054B;2054B; +2F817;5197;5197;5197;5197; +2F818;51A4;51A4;51A4;51A4; +2F819;4ECC;4ECC;4ECC;4ECC; +2F81A;51AC;51AC;51AC;51AC; +2F81B;51B5;51B5;51B5;51B5; +2F81C;291DF;291DF;291DF;291DF; +2F81D;51F5;51F5;51F5;51F5; +2F81E;5203;5203;5203;5203; +2F81F;34DF;34DF;34DF;34DF; +2F820;523B;523B;523B;523B; +2F821;5246;5246;5246;5246; +2F822;5272;5272;5272;5272; +2F823;5277;5277;5277;5277; +2F824;3515;3515;3515;3515; +2F825;52C7;52C7;52C7;52C7; +2F826;52C9;52C9;52C9;52C9; +2F827;52E4;52E4;52E4;52E4; +2F828;52FA;52FA;52FA;52FA; +2F829;5305;5305;5305;5305; +2F82A;5306;5306;5306;5306; +2F82B;5317;5317;5317;5317; +2F82C;5349;5349;5349;5349; +2F82D;5351;5351;5351;5351; +2F82E;535A;535A;535A;535A; +2F82F;5373;5373;5373;5373; +2F830;537D;537D;537D;537D; +2F831;537F;537F;537F;537F; +2F832;537F;537F;537F;537F; +2F833;537F;537F;537F;537F; +2F834;20A2C;20A2C;20A2C;20A2C; +2F835;7070;7070;7070;7070; +2F836;53CA;53CA;53CA;53CA; +2F837;53DF;53DF;53DF;53DF; +2F838;20B63;20B63;20B63;20B63; +2F839;53EB;53EB;53EB;53EB; +2F83A;53F1;53F1;53F1;53F1; +2F83B;5406;5406;5406;5406; +2F83C;549E;549E;549E;549E; +2F83D;5438;5438;5438;5438; +2F83E;5448;5448;5448;5448; +2F83F;5468;5468;5468;5468; +2F840;54A2;54A2;54A2;54A2; +2F841;54F6;54F6;54F6;54F6; +2F842;5510;5510;5510;5510; +2F843;5553;5553;5553;5553; +2F844;5563;5563;5563;5563; +2F845;5584;5584;5584;5584; +2F846;5584;5584;5584;5584; +2F847;5599;5599;5599;5599; +2F848;55AB;55AB;55AB;55AB; +2F849;55B3;55B3;55B3;55B3; +2F84A;55C2;55C2;55C2;55C2; +2F84B;5716;5716;5716;5716; +2F84C;5606;5606;5606;5606; +2F84D;5717;5717;5717;5717; +2F84E;5651;5651;5651;5651; +2F84F;5674;5674;5674;5674; +2F850;5207;5207;5207;5207; +2F851;58EE;58EE;58EE;58EE; +2F852;57CE;57CE;57CE;57CE; +2F853;57F4;57F4;57F4;57F4; +2F854;580D;580D;580D;580D; +2F855;578B;578B;578B;578B; +2F856;5832;5832;5832;5832; +2F857;5831;5831;5831;5831; +2F858;58AC;58AC;58AC;58AC; +2F859;214E4;214E4;214E4;214E4; +2F85A;58F2;58F2;58F2;58F2; +2F85B;58F7;58F7;58F7;58F7; +2F85C;5906;5906;5906;5906; +2F85D;591A;591A;591A;591A; +2F85E;5922;5922;5922;5922; +2F85F;5962;5962;5962;5962; +2F860;216A8;216A8;216A8;216A8; +2F861;216EA;216EA;216EA;216EA; +2F862;59EC;59EC;59EC;59EC; +2F863;5A1B;5A1B;5A1B;5A1B; +2F864;5A27;5A27;5A27;5A27; +2F865;59D8;59D8;59D8;59D8; +2F866;5A66;5A66;5A66;5A66; +2F867;36EE;36EE;36EE;36EE; +2F868;36FC;36FC;36FC;36FC; +2F869;5B08;5B08;5B08;5B08; +2F86A;5B3E;5B3E;5B3E;5B3E; +2F86B;5B3E;5B3E;5B3E;5B3E; +2F86C;219C8;219C8;219C8;219C8; +2F86D;5BC3;5BC3;5BC3;5BC3; +2F86E;5BD8;5BD8;5BD8;5BD8; +2F86F;5BE7;5BE7;5BE7;5BE7; +2F870;5BF3;5BF3;5BF3;5BF3; +2F871;21B18;21B18;21B18;21B18; +2F872;5BFF;5BFF;5BFF;5BFF; +2F873;5C06;5C06;5C06;5C06; +2F874;5F53;5F53;5F53;5F53; +2F875;5C22;5C22;5C22;5C22; +2F876;3781;3781;3781;3781; +2F877;5C60;5C60;5C60;5C60; +2F878;5C6E;5C6E;5C6E;5C6E; +2F879;5CC0;5CC0;5CC0;5CC0; +2F87A;5C8D;5C8D;5C8D;5C8D; +2F87B;21DE4;21DE4;21DE4;21DE4; +2F87C;5D43;5D43;5D43;5D43; +2F87D;21DE6;21DE6;21DE6;21DE6; +2F87E;5D6E;5D6E;5D6E;5D6E; +2F87F;5D6B;5D6B;5D6B;5D6B; +2F880;5D7C;5D7C;5D7C;5D7C; +2F881;5DE1;5DE1;5DE1;5DE1; +2F882;5DE2;5DE2;5DE2;5DE2; +2F883;382F;382F;382F;382F; +2F884;5DFD;5DFD;5DFD;5DFD; +2F885;5E28;5E28;5E28;5E28; +2F886;5E3D;5E3D;5E3D;5E3D; +2F887;5E69;5E69;5E69;5E69; +2F888;3862;3862;3862;3862; +2F889;22183;22183;22183;22183; +2F88A;387C;387C;387C;387C; +2F88B;5EB0;5EB0;5EB0;5EB0; +2F88C;5EB3;5EB3;5EB3;5EB3; +2F88D;5EB6;5EB6;5EB6;5EB6; +2F88E;5ECA;5ECA;5ECA;5ECA; +2F88F;2A392;2A392;2A392;2A392; +2F890;5EFE;5EFE;5EFE;5EFE; +2F891;22331;22331;22331;22331; +2F892;22331;22331;22331;22331; +2F893;8201;8201;8201;8201; +2F894;5F22;5F22;5F22;5F22; +2F895;5F22;5F22;5F22;5F22; +2F896;38C7;38C7;38C7;38C7; +2F897;232B8;232B8;232B8;232B8; +2F898;261DA;261DA;261DA;261DA; +2F899;5F62;5F62;5F62;5F62; +2F89A;5F6B;5F6B;5F6B;5F6B; +2F89B;38E3;38E3;38E3;38E3; +2F89C;5F9A;5F9A;5F9A;5F9A; +2F89D;5FCD;5FCD;5FCD;5FCD; +2F89E;5FD7;5FD7;5FD7;5FD7; +2F89F;5FF9;5FF9;5FF9;5FF9; +2F8A0;6081;6081;6081;6081; +2F8A1;393A;393A;393A;393A; +2F8A2;391C;391C;391C;391C; +2F8A3;6094;6094;6094;6094; +2F8A4;226D4;226D4;226D4;226D4; +2F8A5;60C7;60C7;60C7;60C7; +2F8A6;6148;6148;6148;6148; +2F8A7;614C;614C;614C;614C; +2F8A8;614E;614E;614E;614E; +2F8A9;614C;614C;614C;614C; +2F8AA;617A;617A;617A;617A; +2F8AB;618E;618E;618E;618E; +2F8AC;61B2;61B2;61B2;61B2; +2F8AD;61A4;61A4;61A4;61A4; +2F8AE;61AF;61AF;61AF;61AF; +2F8AF;61DE;61DE;61DE;61DE; +2F8B0;61F2;61F2;61F2;61F2; +2F8B1;61F6;61F6;61F6;61F6; +2F8B2;6210;6210;6210;6210; +2F8B3;621B;621B;621B;621B; +2F8B4;625D;625D;625D;625D; +2F8B5;62B1;62B1;62B1;62B1; +2F8B6;62D4;62D4;62D4;62D4; +2F8B7;6350;6350;6350;6350; +2F8B8;22B0C;22B0C;22B0C;22B0C; +2F8B9;633D;633D;633D;633D; +2F8BA;62FC;62FC;62FC;62FC; +2F8BB;6368;6368;6368;6368; +2F8BC;6383;6383;6383;6383; +2F8BD;63E4;63E4;63E4;63E4; +2F8BE;22BF1;22BF1;22BF1;22BF1; +2F8BF;6422;6422;6422;6422; +2F8C0;63C5;63C5;63C5;63C5; +2F8C1;63A9;63A9;63A9;63A9; +2F8C2;3A2E;3A2E;3A2E;3A2E; +2F8C3;6469;6469;6469;6469; +2F8C4;647E;647E;647E;647E; +2F8C5;649D;649D;649D;649D; +2F8C6;6477;6477;6477;6477; +2F8C7;3A6C;3A6C;3A6C;3A6C; +2F8C8;654F;654F;654F;654F; +2F8C9;656C;656C;656C;656C; +2F8CA;2300A;2300A;2300A;2300A; +2F8CB;65E3;65E3;65E3;65E3; +2F8CC;66F8;66F8;66F8;66F8; +2F8CD;6649;6649;6649;6649; +2F8CE;3B19;3B19;3B19;3B19; +2F8CF;6691;6691;6691;6691; +2F8D0;3B08;3B08;3B08;3B08; +2F8D1;3AE4;3AE4;3AE4;3AE4; +2F8D2;5192;5192;5192;5192; +2F8D3;5195;5195;5195;5195; +2F8D4;6700;6700;6700;6700; +2F8D5;669C;669C;669C;669C; +2F8D6;80AD;80AD;80AD;80AD; +2F8D7;43D9;43D9;43D9;43D9; +2F8D8;6717;6717;6717;6717; +2F8D9;671B;671B;671B;671B; +2F8DA;6721;6721;6721;6721; +2F8DB;675E;675E;675E;675E; +2F8DC;6753;6753;6753;6753; +2F8DD;233C3;233C3;233C3;233C3; +2F8DE;3B49;3B49;3B49;3B49; +2F8DF;67FA;67FA;67FA;67FA; +2F8E0;6785;6785;6785;6785; +2F8E1;6852;6852;6852;6852; +2F8E2;6885;6885;6885;6885; +2F8E3;2346D;2346D;2346D;2346D; +2F8E4;688E;688E;688E;688E; +2F8E5;681F;681F;681F;681F; +2F8E6;6914;6914;6914;6914; +2F8E7;3B9D;3B9D;3B9D;3B9D; +2F8E8;6942;6942;6942;6942; +2F8E9;69A3;69A3;69A3;69A3; +2F8EA;69EA;69EA;69EA;69EA; +2F8EB;6AA8;6AA8;6AA8;6AA8; +2F8EC;236A3;236A3;236A3;236A3; +2F8ED;6ADB;6ADB;6ADB;6ADB; +2F8EE;3C18;3C18;3C18;3C18; +2F8EF;6B21;6B21;6B21;6B21; +2F8F0;238A7;238A7;238A7;238A7; +2F8F1;6B54;6B54;6B54;6B54; +2F8F2;3C4E;3C4E;3C4E;3C4E; +2F8F3;6B72;6B72;6B72;6B72; +2F8F4;6B9F;6B9F;6B9F;6B9F; +2F8F5;6BBA;6BBA;6BBA;6BBA; +2F8F6;6BBB;6BBB;6BBB;6BBB; +2F8F7;23A8D;23A8D;23A8D;23A8D; +2F8F8;21D0B;21D0B;21D0B;21D0B; +2F8F9;23AFA;23AFA;23AFA;23AFA; +2F8FA;6C4E;6C4E;6C4E;6C4E; +2F8FB;23CBC;23CBC;23CBC;23CBC; +2F8FC;6CBF;6CBF;6CBF;6CBF; +2F8FD;6CCD;6CCD;6CCD;6CCD; +2F8FE;6C67;6C67;6C67;6C67; +2F8FF;6D16;6D16;6D16;6D16; +2F900;6D3E;6D3E;6D3E;6D3E; +2F901;6D77;6D77;6D77;6D77; +2F902;6D41;6D41;6D41;6D41; +2F903;6D69;6D69;6D69;6D69; +2F904;6D78;6D78;6D78;6D78; +2F905;6D85;6D85;6D85;6D85; +2F906;23D1E;23D1E;23D1E;23D1E; +2F907;6D34;6D34;6D34;6D34; +2F908;6E2F;6E2F;6E2F;6E2F; +2F909;6E6E;6E6E;6E6E;6E6E; +2F90A;3D33;3D33;3D33;3D33; +2F90B;6ECB;6ECB;6ECB;6ECB; +2F90C;6EC7;6EC7;6EC7;6EC7; +2F90D;23ED1;23ED1;23ED1;23ED1; +2F90E;6DF9;6DF9;6DF9;6DF9; +2F90F;6F6E;6F6E;6F6E;6F6E; +2F910;23F5E;23F5E;23F5E;23F5E; +2F911;23F8E;23F8E;23F8E;23F8E; +2F912;6FC6;6FC6;6FC6;6FC6; +2F913;7039;7039;7039;7039; +2F914;701E;701E;701E;701E; +2F915;701B;701B;701B;701B; +2F916;3D96;3D96;3D96;3D96; +2F917;704A;704A;704A;704A; +2F918;707D;707D;707D;707D; +2F919;7077;7077;7077;7077; +2F91A;70AD;70AD;70AD;70AD; +2F91B;20525;20525;20525;20525; +2F91C;7145;7145;7145;7145; +2F91D;24263;24263;24263;24263; +2F91E;719C;719C;719C;719C; +2F91F;243AB;243AB;243AB;243AB; +2F920;7228;7228;7228;7228; +2F921;7235;7235;7235;7235; +2F922;7250;7250;7250;7250; +2F923;24608;24608;24608;24608; +2F924;7280;7280;7280;7280; +2F925;7295;7295;7295;7295; +2F926;24735;24735;24735;24735; +2F927;24814;24814;24814;24814; +2F928;737A;737A;737A;737A; +2F929;738B;738B;738B;738B; +2F92A;3EAC;3EAC;3EAC;3EAC; +2F92B;73A5;73A5;73A5;73A5; +2F92C;3EB8;3EB8;3EB8;3EB8; +2F92D;3EB8;3EB8;3EB8;3EB8; +2F92E;7447;7447;7447;7447; +2F92F;745C;745C;745C;745C; +2F930;7471;7471;7471;7471; +2F931;7485;7485;7485;7485; +2F932;74CA;74CA;74CA;74CA; +2F933;3F1B;3F1B;3F1B;3F1B; +2F934;7524;7524;7524;7524; +2F935;24C36;24C36;24C36;24C36; +2F936;753E;753E;753E;753E; +2F937;24C92;24C92;24C92;24C92; +2F938;7570;7570;7570;7570; +2F939;2219F;2219F;2219F;2219F; +2F93A;7610;7610;7610;7610; +2F93B;24FA1;24FA1;24FA1;24FA1; +2F93C;24FB8;24FB8;24FB8;24FB8; +2F93D;25044;25044;25044;25044; +2F93E;3FFC;3FFC;3FFC;3FFC; +2F93F;4008;4008;4008;4008; +2F940;76F4;76F4;76F4;76F4; +2F941;250F3;250F3;250F3;250F3; +2F942;250F2;250F2;250F2;250F2; +2F943;25119;25119;25119;25119; +2F944;25133;25133;25133;25133; +2F945;771E;771E;771E;771E; +2F946;771F;771F;771F;771F; +2F947;771F;771F;771F;771F; +2F948;774A;774A;774A;774A; +2F949;4039;4039;4039;4039; +2F94A;778B;778B;778B;778B; +2F94B;4046;4046;4046;4046; +2F94C;4096;4096;4096;4096; +2F94D;2541D;2541D;2541D;2541D; +2F94E;784E;784E;784E;784E; +2F94F;788C;788C;788C;788C; +2F950;78CC;78CC;78CC;78CC; +2F951;40E3;40E3;40E3;40E3; +2F952;25626;25626;25626;25626; +2F953;7956;7956;7956;7956; +2F954;2569A;2569A;2569A;2569A; +2F955;256C5;256C5;256C5;256C5; +2F956;798F;798F;798F;798F; +2F957;79EB;79EB;79EB;79EB; +2F958;412F;412F;412F;412F; +2F959;7A40;7A40;7A40;7A40; +2F95A;7A4A;7A4A;7A4A;7A4A; +2F95B;7A4F;7A4F;7A4F;7A4F; +2F95C;2597C;2597C;2597C;2597C; +2F95D;25AA7;25AA7;25AA7;25AA7; +2F95E;25AA7;25AA7;25AA7;25AA7; +2F95F;7AEE;7AEE;7AEE;7AEE; +2F960;4202;4202;4202;4202; +2F961;25BAB;25BAB;25BAB;25BAB; +2F962;7BC6;7BC6;7BC6;7BC6; +2F963;7BC9;7BC9;7BC9;7BC9; +2F964;4227;4227;4227;4227; +2F965;25C80;25C80;25C80;25C80; +2F966;7CD2;7CD2;7CD2;7CD2; +2F967;42A0;42A0;42A0;42A0; +2F968;7CE8;7CE8;7CE8;7CE8; +2F969;7CE3;7CE3;7CE3;7CE3; +2F96A;7D00;7D00;7D00;7D00; +2F96B;25F86;25F86;25F86;25F86; +2F96C;7D63;7D63;7D63;7D63; +2F96D;4301;4301;4301;4301; +2F96E;7DC7;7DC7;7DC7;7DC7; +2F96F;7E02;7E02;7E02;7E02; +2F970;7E45;7E45;7E45;7E45; +2F971;4334;4334;4334;4334; +2F972;26228;26228;26228;26228; +2F973;26247;26247;26247;26247; +2F974;4359;4359;4359;4359; +2F975;262D9;262D9;262D9;262D9; +2F976;7F7A;7F7A;7F7A;7F7A; +2F977;2633E;2633E;2633E;2633E; +2F978;7F95;7F95;7F95;7F95; +2F979;7FFA;7FFA;7FFA;7FFA; +2F97A;8005;8005;8005;8005; +2F97B;264DA;264DA;264DA;264DA; +2F97C;26523;26523;26523;26523; +2F97D;8060;8060;8060;8060; +2F97E;265A8;265A8;265A8;265A8; +2F97F;8070;8070;8070;8070; +2F980;2335F;2335F;2335F;2335F; +2F981;43D5;43D5;43D5;43D5; +2F982;80B2;80B2;80B2;80B2; +2F983;8103;8103;8103;8103; +2F984;440B;440B;440B;440B; +2F985;813E;813E;813E;813E; +2F986;5AB5;5AB5;5AB5;5AB5; +2F987;267A7;267A7;267A7;267A7; +2F988;267B5;267B5;267B5;267B5; +2F989;23393;23393;23393;23393; +2F98A;2339C;2339C;2339C;2339C; +2F98B;8201;8201;8201;8201; +2F98C;8204;8204;8204;8204; +2F98D;8F9E;8F9E;8F9E;8F9E; +2F98E;446B;446B;446B;446B; +2F98F;8291;8291;8291;8291; +2F990;828B;828B;828B;828B; +2F991;829D;829D;829D;829D; +2F992;52B3;52B3;52B3;52B3; +2F993;82B1;82B1;82B1;82B1; +2F994;82B3;82B3;82B3;82B3; +2F995;82BD;82BD;82BD;82BD; +2F996;82E6;82E6;82E6;82E6; +2F997;26B3C;26B3C;26B3C;26B3C; +2F998;82E5;82E5;82E5;82E5; +2F999;831D;831D;831D;831D; +2F99A;8363;8363;8363;8363; +2F99B;83AD;83AD;83AD;83AD; +2F99C;8323;8323;8323;8323; +2F99D;83BD;83BD;83BD;83BD; +2F99E;83E7;83E7;83E7;83E7; +2F99F;8457;8457;8457;8457; +2F9A0;8353;8353;8353;8353; +2F9A1;83CA;83CA;83CA;83CA; +2F9A2;83CC;83CC;83CC;83CC; +2F9A3;83DC;83DC;83DC;83DC; +2F9A4;26C36;26C36;26C36;26C36; +2F9A5;26D6B;26D6B;26D6B;26D6B; +2F9A6;26CD5;26CD5;26CD5;26CD5; +2F9A7;452B;452B;452B;452B; +2F9A8;84F1;84F1;84F1;84F1; +2F9A9;84F3;84F3;84F3;84F3; +2F9AA;8516;8516;8516;8516; +2F9AB;273CA;273CA;273CA;273CA; +2F9AC;8564;8564;8564;8564; +2F9AD;26F2C;26F2C;26F2C;26F2C; +2F9AE;455D;455D;455D;455D; +2F9AF;4561;4561;4561;4561; +2F9B0;26FB1;26FB1;26FB1;26FB1; +2F9B1;270D2;270D2;270D2;270D2; +2F9B2;456B;456B;456B;456B; +2F9B3;8650;8650;8650;8650; +2F9B4;865C;865C;865C;865C; +2F9B5;8667;8667;8667;8667; +2F9B6;8669;8669;8669;8669; +2F9B7;86A9;86A9;86A9;86A9; +2F9B8;8688;8688;8688;8688; +2F9B9;870E;870E;870E;870E; +2F9BA;86E2;86E2;86E2;86E2; +2F9BB;8779;8779;8779;8779; +2F9BC;8728;8728;8728;8728; +2F9BD;876B;876B;876B;876B; +2F9BE;8786;8786;8786;8786; +2F9BF;45D7;45D7;45D7;45D7; +2F9C0;87E1;87E1;87E1;87E1; +2F9C1;8801;8801;8801;8801; +2F9C2;45F9;45F9;45F9;45F9; +2F9C3;8860;8860;8860;8860; +2F9C4;8863;8863;8863;8863; +2F9C5;27667;27667;27667;27667; +2F9C6;88D7;88D7;88D7;88D7; +2F9C7;88DE;88DE;88DE;88DE; +2F9C8;4635;4635;4635;4635; +2F9C9;88FA;88FA;88FA;88FA; +2F9CA;34BB;34BB;34BB;34BB; +2F9CB;278AE;278AE;278AE;278AE; +2F9CC;27966;27966;27966;27966; +2F9CD;46BE;46BE;46BE;46BE; +2F9CE;46C7;46C7;46C7;46C7; +2F9CF;8AA0;8AA0;8AA0;8AA0; +2F9D0;8AED;8AED;8AED;8AED; +2F9D1;8B8A;8B8A;8B8A;8B8A; +2F9D2;8C55;8C55;8C55;8C55; +2F9D3;27CA8;27CA8;27CA8;27CA8; +2F9D4;8CAB;8CAB;8CAB;8CAB; +2F9D5;8CC1;8CC1;8CC1;8CC1; +2F9D6;8D1B;8D1B;8D1B;8D1B; +2F9D7;8D77;8D77;8D77;8D77; +2F9D8;27F2F;27F2F;27F2F;27F2F; +2F9D9;20804;20804;20804;20804; +2F9DA;8DCB;8DCB;8DCB;8DCB; +2F9DB;8DBC;8DBC;8DBC;8DBC; +2F9DC;8DF0;8DF0;8DF0;8DF0; +2F9DD;208DE;208DE;208DE;208DE; +2F9DE;8ED4;8ED4;8ED4;8ED4; +2F9DF;8F38;8F38;8F38;8F38; +2F9E0;285D2;285D2;285D2;285D2; +2F9E1;285ED;285ED;285ED;285ED; +2F9E2;9094;9094;9094;9094; +2F9E3;90F1;90F1;90F1;90F1; +2F9E4;9111;9111;9111;9111; +2F9E5;2872E;2872E;2872E;2872E; +2F9E6;911B;911B;911B;911B; +2F9E7;9238;9238;9238;9238; +2F9E8;92D7;92D7;92D7;92D7; +2F9E9;92D8;92D8;92D8;92D8; +2F9EA;927C;927C;927C;927C; +2F9EB;93F9;93F9;93F9;93F9; +2F9EC;9415;9415;9415;9415; +2F9ED;28BFA;28BFA;28BFA;28BFA; +2F9EE;958B;958B;958B;958B; +2F9EF;4995;4995;4995;4995; +2F9F0;95B7;95B7;95B7;95B7; +2F9F1;28D77;28D77;28D77;28D77; +2F9F2;49E6;49E6;49E6;49E6; +2F9F3;96C3;96C3;96C3;96C3; +2F9F4;5DB2;5DB2;5DB2;5DB2; +2F9F5;9723;9723;9723;9723; +2F9F6;29145;29145;29145;29145; +2F9F7;2921A;2921A;2921A;2921A; +2F9F8;4A6E;4A6E;4A6E;4A6E; +2F9F9;4A76;4A76;4A76;4A76; +2F9FA;97E0;97E0;97E0;97E0; +2F9FB;2940A;2940A;2940A;2940A; +2F9FC;4AB2;4AB2;4AB2;4AB2; +2F9FD;29496;29496;29496;29496; +2F9FE;980B;980B;980B;980B; +2F9FF;980B;980B;980B;980B; +2FA00;9829;9829;9829;9829; +2FA01;295B6;295B6;295B6;295B6; +2FA02;98E2;98E2;98E2;98E2; +2FA03;4B33;4B33;4B33;4B33; +2FA04;9929;9929;9929;9929; +2FA05;99A7;99A7;99A7;99A7; +2FA06;99C2;99C2;99C2;99C2; +2FA07;99FE;99FE;99FE;99FE; +2FA08;4BCE;4BCE;4BCE;4BCE; +2FA09;29B30;29B30;29B30;29B30; +2FA0A;9B12;9B12;9B12;9B12; +2FA0B;9C40;9C40;9C40;9C40; +2FA0C;9CFD;9CFD;9CFD;9CFD; +2FA0D;4CCE;4CCE;4CCE;4CCE; +2FA0E;4CED;4CED;4CED;4CED; +2FA0F;9D67;9D67;9D67;9D67; +2FA10;2A0CE;2A0CE;2A0CE;2A0CE; +2FA11;4CF8;4CF8;4CF8;4CF8; +2FA12;2A105;2A105;2A105;2A105; +2FA13;2A20E;2A20E;2A20E;2A20E; +2FA14;2A291;2A291;2A291;2A291; +2FA15;9EBB;9EBB;9EBB;9EBB; +2FA16;4D56;4D56;4D56;4D56; +2FA17;9EF9;9EF9;9EF9;9EF9; +2FA18;9EFE;9EFE;9EFE;9EFE; +2FA19;9F05;9F05;9F05;9F05; +2FA1A;9F0F;9F0F;9F0F;9F0F; +2FA1B;9F16;9F16;9F16;9F16; +2FA1C;9F3B;9F3B;9F3B;9F3B; +2FA1D;2A600;2A600;2A600;2A600; + +@Part2 + +0061 0315 0300 05AE 0300 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; +0061 0300 0315 0300 05AE 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; +0061 0315 0300 05AE 0301 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062; +0061 0301 0315 0300 05AE 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062; +0061 0315 0300 05AE 0302 0062;00E0 05AE 0302 0315 0062;0061 05AE 0300 0302 0315 0062;00E0 05AE 0302 0315 0062;0061 05AE 0300 0302 0315 0062; +0061 0302 0315 0300 05AE 0062;1EA7 05AE 0315 0062;0061 05AE 0302 0300 0315 0062;1EA7 05AE 0315 0062;0061 05AE 0302 0300 0315 0062; +0061 0315 0300 05AE 0303 0062;00E0 05AE 0303 0315 0062;0061 05AE 0300 0303 0315 0062;00E0 05AE 0303 0315 0062;0061 05AE 0300 0303 0315 0062; +0061 0303 0315 0300 05AE 0062;00E3 05AE 0300 0315 0062;0061 05AE 0303 0300 0315 0062;00E3 05AE 0300 0315 0062;0061 05AE 0303 0300 0315 0062; +0061 0315 0300 05AE 0304 0062;00E0 05AE 0304 0315 0062;0061 05AE 0300 0304 0315 0062;00E0 05AE 0304 0315 0062;0061 05AE 0300 0304 0315 0062; +0061 0304 0315 0300 05AE 0062;0101 05AE 0300 0315 0062;0061 05AE 0304 0300 0315 0062;0101 05AE 0300 0315 0062;0061 05AE 0304 0300 0315 0062; +0061 0315 0300 05AE 0305 0062;00E0 05AE 0305 0315 0062;0061 05AE 0300 0305 0315 0062;00E0 05AE 0305 0315 0062;0061 05AE 0300 0305 0315 0062; +0061 0305 0315 0300 05AE 0062;0061 05AE 0305 0300 0315 0062;0061 05AE 0305 0300 0315 0062;0061 05AE 0305 0300 0315 0062;0061 05AE 0305 0300 0315 0062; +0061 0315 0300 05AE 0306 0062;00E0 05AE 0306 0315 0062;0061 05AE 0300 0306 0315 0062;00E0 05AE 0306 0315 0062;0061 05AE 0300 0306 0315 0062; +0061 0306 0315 0300 05AE 0062;1EB1 05AE 0315 0062;0061 05AE 0306 0300 0315 0062;1EB1 05AE 0315 0062;0061 05AE 0306 0300 0315 0062; +0061 0315 0300 05AE 0307 0062;00E0 05AE 0307 0315 0062;0061 05AE 0300 0307 0315 0062;00E0 05AE 0307 0315 0062;0061 05AE 0300 0307 0315 0062; +0061 0307 0315 0300 05AE 0062;0227 05AE 0300 0315 0062;0061 05AE 0307 0300 0315 0062;0227 05AE 0300 0315 0062;0061 05AE 0307 0300 0315 0062; +0061 0315 0300 05AE 0308 0062;00E0 05AE 0308 0315 0062;0061 05AE 0300 0308 0315 0062;00E0 05AE 0308 0315 0062;0061 05AE 0300 0308 0315 0062; +0061 0308 0315 0300 05AE 0062;00E4 05AE 0300 0315 0062;0061 05AE 0308 0300 0315 0062;00E4 05AE 0300 0315 0062;0061 05AE 0308 0300 0315 0062; +0061 0315 0300 05AE 0309 0062;00E0 05AE 0309 0315 0062;0061 05AE 0300 0309 0315 0062;00E0 05AE 0309 0315 0062;0061 05AE 0300 0309 0315 0062; +0061 0309 0315 0300 05AE 0062;1EA3 05AE 0300 0315 0062;0061 05AE 0309 0300 0315 0062;1EA3 05AE 0300 0315 0062;0061 05AE 0309 0300 0315 0062; +0061 0315 0300 05AE 030A 0062;00E0 05AE 030A 0315 0062;0061 05AE 0300 030A 0315 0062;00E0 05AE 030A 0315 0062;0061 05AE 0300 030A 0315 0062; +0061 030A 0315 0300 05AE 0062;00E5 05AE 0300 0315 0062;0061 05AE 030A 0300 0315 0062;00E5 05AE 0300 0315 0062;0061 05AE 030A 0300 0315 0062; +0061 0315 0300 05AE 030B 0062;00E0 05AE 030B 0315 0062;0061 05AE 0300 030B 0315 0062;00E0 05AE 030B 0315 0062;0061 05AE 0300 030B 0315 0062; +0061 030B 0315 0300 05AE 0062;0061 05AE 030B 0300 0315 0062;0061 05AE 030B 0300 0315 0062;0061 05AE 030B 0300 0315 0062;0061 05AE 030B 0300 0315 0062; +0061 0315 0300 05AE 030C 0062;00E0 05AE 030C 0315 0062;0061 05AE 0300 030C 0315 0062;00E0 05AE 030C 0315 0062;0061 05AE 0300 030C 0315 0062; +0061 030C 0315 0300 05AE 0062;01CE 05AE 0300 0315 0062;0061 05AE 030C 0300 0315 0062;01CE 05AE 0300 0315 0062;0061 05AE 030C 0300 0315 0062; +0061 0315 0300 05AE 030D 0062;00E0 05AE 030D 0315 0062;0061 05AE 0300 030D 0315 0062;00E0 05AE 030D 0315 0062;0061 05AE 0300 030D 0315 0062; +0061 030D 0315 0300 05AE 0062;0061 05AE 030D 0300 0315 0062;0061 05AE 030D 0300 0315 0062;0061 05AE 030D 0300 0315 0062;0061 05AE 030D 0300 0315 0062; +0061 0315 0300 05AE 030E 0062;00E0 05AE 030E 0315 0062;0061 05AE 0300 030E 0315 0062;00E0 05AE 030E 0315 0062;0061 05AE 0300 030E 0315 0062; +0061 030E 0315 0300 05AE 0062;0061 05AE 030E 0300 0315 0062;0061 05AE 030E 0300 0315 0062;0061 05AE 030E 0300 0315 0062;0061 05AE 030E 0300 0315 0062; +0061 0315 0300 05AE 030F 0062;00E0 05AE 030F 0315 0062;0061 05AE 0300 030F 0315 0062;00E0 05AE 030F 0315 0062;0061 05AE 0300 030F 0315 0062; +0061 030F 0315 0300 05AE 0062;0201 05AE 0300 0315 0062;0061 05AE 030F 0300 0315 0062;0201 05AE 0300 0315 0062;0061 05AE 030F 0300 0315 0062; +0061 0315 0300 05AE 0310 0062;00E0 05AE 0310 0315 0062;0061 05AE 0300 0310 0315 0062;00E0 05AE 0310 0315 0062;0061 05AE 0300 0310 0315 0062; +0061 0310 0315 0300 05AE 0062;0061 05AE 0310 0300 0315 0062;0061 05AE 0310 0300 0315 0062;0061 05AE 0310 0300 0315 0062;0061 05AE 0310 0300 0315 0062; +0061 0315 0300 05AE 0311 0062;00E0 05AE 0311 0315 0062;0061 05AE 0300 0311 0315 0062;00E0 05AE 0311 0315 0062;0061 05AE 0300 0311 0315 0062; +0061 0311 0315 0300 05AE 0062;0203 05AE 0300 0315 0062;0061 05AE 0311 0300 0315 0062;0203 05AE 0300 0315 0062;0061 05AE 0311 0300 0315 0062; +0061 0315 0300 05AE 0312 0062;00E0 05AE 0312 0315 0062;0061 05AE 0300 0312 0315 0062;00E0 05AE 0312 0315 0062;0061 05AE 0300 0312 0315 0062; +0061 0312 0315 0300 05AE 0062;0061 05AE 0312 0300 0315 0062;0061 05AE 0312 0300 0315 0062;0061 05AE 0312 0300 0315 0062;0061 05AE 0312 0300 0315 0062; +0061 0315 0300 05AE 0313 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062; +0061 0313 0315 0300 05AE 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062; +0061 0315 0300 05AE 0314 0062;00E0 05AE 0314 0315 0062;0061 05AE 0300 0314 0315 0062;00E0 05AE 0314 0315 0062;0061 05AE 0300 0314 0315 0062; +0061 0314 0315 0300 05AE 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062;0061 05AE 0314 0300 0315 0062; +0061 035C 0315 0300 0315 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062; +0061 0315 035C 0315 0300 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062;00E0 0315 0315 035C 0062;0061 0300 0315 0315 035C 0062; +0061 059A 0316 302A 0316 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062; +0061 0316 059A 0316 302A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062;0061 302A 0316 0316 059A 0062; +0061 059A 0316 302A 0317 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062;0061 302A 0316 0317 059A 0062; +0061 0317 059A 0316 302A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062;0061 302A 0317 0316 059A 0062; +0061 059A 0316 302A 0318 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062;0061 302A 0316 0318 059A 0062; +0061 0318 059A 0316 302A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062;0061 302A 0318 0316 059A 0062; +0061 059A 0316 302A 0319 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062;0061 302A 0316 0319 059A 0062; +0061 0319 059A 0316 302A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062;0061 302A 0319 0316 059A 0062; +0061 035C 0315 0300 031A 0062;00E0 0315 031A 035C 0062;0061 0300 0315 031A 035C 0062;00E0 0315 031A 035C 0062;0061 0300 0315 031A 035C 0062; +0061 031A 035C 0315 0300 0062;00E0 031A 0315 035C 0062;0061 0300 031A 0315 035C 0062;00E0 031A 0315 035C 0062;0061 0300 031A 0315 035C 0062; +0061 302A 031B 1DCE 031B 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062; +0061 031B 302A 031B 1DCE 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062;0061 1DCE 031B 031B 302A 0062; +0061 059A 0316 302A 031C 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062;0061 302A 0316 031C 059A 0062; +0061 031C 059A 0316 302A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062;0061 302A 031C 0316 059A 0062; +0061 059A 0316 302A 031D 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062;0061 302A 0316 031D 059A 0062; +0061 031D 059A 0316 302A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062;0061 302A 031D 0316 059A 0062; +0061 059A 0316 302A 031E 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062;0061 302A 0316 031E 059A 0062; +0061 031E 059A 0316 302A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062;0061 302A 031E 0316 059A 0062; +0061 059A 0316 302A 031F 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062;0061 302A 0316 031F 059A 0062; +0061 031F 059A 0316 302A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062;0061 302A 031F 0316 059A 0062; +0061 059A 0316 302A 0320 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062;0061 302A 0316 0320 059A 0062; +0061 0320 059A 0316 302A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062;0061 302A 0320 0316 059A 0062; +0061 1DCE 0321 0F74 0321 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062; +0061 0321 1DCE 0321 0F74 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062;0061 0F74 0321 0321 1DCE 0062; +0061 1DCE 0321 0F74 0322 0062;0061 0F74 0321 0322 1DCE 0062;0061 0F74 0321 0322 1DCE 0062;0061 0F74 0321 0322 1DCE 0062;0061 0F74 0321 0322 1DCE 0062; +0061 0322 1DCE 0321 0F74 0062;0061 0F74 0322 0321 1DCE 0062;0061 0F74 0322 0321 1DCE 0062;0061 0F74 0322 0321 1DCE 0062;0061 0F74 0322 0321 1DCE 0062; +0061 059A 0316 302A 0323 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062;0061 302A 0316 0323 059A 0062; +0061 0323 059A 0316 302A 0062;1EA1 302A 0316 059A 0062;0061 302A 0323 0316 059A 0062;1EA1 302A 0316 059A 0062;0061 302A 0323 0316 059A 0062; +0061 059A 0316 302A 0324 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062;0061 302A 0316 0324 059A 0062; +0061 0324 059A 0316 302A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062;0061 302A 0324 0316 059A 0062; +0061 059A 0316 302A 0325 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062;0061 302A 0316 0325 059A 0062; +0061 0325 059A 0316 302A 0062;1E01 302A 0316 059A 0062;0061 302A 0325 0316 059A 0062;1E01 302A 0316 059A 0062;0061 302A 0325 0316 059A 0062; +0061 059A 0316 302A 0326 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062;0061 302A 0316 0326 059A 0062; +0061 0326 059A 0316 302A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062;0061 302A 0326 0316 059A 0062; +0061 1DCE 0321 0F74 0327 0062;0061 0F74 0321 0327 1DCE 0062;0061 0F74 0321 0327 1DCE 0062;0061 0F74 0321 0327 1DCE 0062;0061 0F74 0321 0327 1DCE 0062; +0061 0327 1DCE 0321 0F74 0062;0061 0F74 0327 0321 1DCE 0062;0061 0F74 0327 0321 1DCE 0062;0061 0F74 0327 0321 1DCE 0062;0061 0F74 0327 0321 1DCE 0062; +0061 1DCE 0321 0F74 0328 0062;0061 0F74 0321 0328 1DCE 0062;0061 0F74 0321 0328 1DCE 0062;0061 0F74 0321 0328 1DCE 0062;0061 0F74 0321 0328 1DCE 0062; +0061 0328 1DCE 0321 0F74 0062;0105 0F74 0321 1DCE 0062;0061 0F74 0328 0321 1DCE 0062;0105 0F74 0321 1DCE 0062;0061 0F74 0328 0321 1DCE 0062; +0061 059A 0316 302A 0329 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062;0061 302A 0316 0329 059A 0062; +0061 0329 059A 0316 302A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062;0061 302A 0329 0316 059A 0062; +0061 059A 0316 302A 032A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062;0061 302A 0316 032A 059A 0062; +0061 032A 059A 0316 302A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062;0061 302A 032A 0316 059A 0062; +0061 059A 0316 302A 032B 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062;0061 302A 0316 032B 059A 0062; +0061 032B 059A 0316 302A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062;0061 302A 032B 0316 059A 0062; +0061 059A 0316 302A 032C 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062;0061 302A 0316 032C 059A 0062; +0061 032C 059A 0316 302A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062;0061 302A 032C 0316 059A 0062; +0061 059A 0316 302A 032D 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062;0061 302A 0316 032D 059A 0062; +0061 032D 059A 0316 302A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062;0061 302A 032D 0316 059A 0062; +0061 059A 0316 302A 032E 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062;0061 302A 0316 032E 059A 0062; +0061 032E 059A 0316 302A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062;0061 302A 032E 0316 059A 0062; +0061 059A 0316 302A 032F 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062;0061 302A 0316 032F 059A 0062; +0061 032F 059A 0316 302A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062;0061 302A 032F 0316 059A 0062; +0061 059A 0316 302A 0330 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062;0061 302A 0316 0330 059A 0062; +0061 0330 059A 0316 302A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062;0061 302A 0330 0316 059A 0062; +0061 059A 0316 302A 0331 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062;0061 302A 0316 0331 059A 0062; +0061 0331 059A 0316 302A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062;0061 302A 0331 0316 059A 0062; +0061 059A 0316 302A 0332 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062;0061 302A 0316 0332 059A 0062; +0061 0332 059A 0316 302A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062;0061 302A 0332 0316 059A 0062; +0061 059A 0316 302A 0333 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062;0061 302A 0316 0333 059A 0062; +0061 0333 059A 0316 302A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062;0061 302A 0333 0316 059A 0062; +0061 093C 0334 0334 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062; +0061 0334 093C 0334 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062;0061 0334 0334 093C 0062; +0061 093C 0334 0335 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062;0061 0334 0335 093C 0062; +0061 0335 093C 0334 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062;0061 0335 0334 093C 0062; +0061 093C 0334 0336 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062;0061 0334 0336 093C 0062; +0061 0336 093C 0334 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062;0061 0336 0334 093C 0062; +0061 093C 0334 0337 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062;0061 0334 0337 093C 0062; +0061 0337 093C 0334 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062;0061 0337 0334 093C 0062; +0061 093C 0334 0338 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062;0061 0334 0338 093C 0062; +0061 0338 093C 0334 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062;0061 0338 0334 093C 0062; +0061 059A 0316 302A 0339 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062;0061 302A 0316 0339 059A 0062; +0061 0339 059A 0316 302A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062;0061 302A 0339 0316 059A 0062; +0061 059A 0316 302A 033A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062;0061 302A 0316 033A 059A 0062; +0061 033A 059A 0316 302A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062;0061 302A 033A 0316 059A 0062; +0061 059A 0316 302A 033B 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062;0061 302A 0316 033B 059A 0062; +0061 033B 059A 0316 302A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062;0061 302A 033B 0316 059A 0062; +0061 059A 0316 302A 033C 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062;0061 302A 0316 033C 059A 0062; +0061 033C 059A 0316 302A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062;0061 302A 033C 0316 059A 0062; +0061 0315 0300 05AE 033D 0062;00E0 05AE 033D 0315 0062;0061 05AE 0300 033D 0315 0062;00E0 05AE 033D 0315 0062;0061 05AE 0300 033D 0315 0062; +0061 033D 0315 0300 05AE 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062;0061 05AE 033D 0300 0315 0062; +0061 0315 0300 05AE 033E 0062;00E0 05AE 033E 0315 0062;0061 05AE 0300 033E 0315 0062;00E0 05AE 033E 0315 0062;0061 05AE 0300 033E 0315 0062; +0061 033E 0315 0300 05AE 0062;0061 05AE 033E 0300 0315 0062;0061 05AE 033E 0300 0315 0062;0061 05AE 033E 0300 0315 0062;0061 05AE 033E 0300 0315 0062; +0061 0315 0300 05AE 033F 0062;00E0 05AE 033F 0315 0062;0061 05AE 0300 033F 0315 0062;00E0 05AE 033F 0315 0062;0061 05AE 0300 033F 0315 0062; +0061 033F 0315 0300 05AE 0062;0061 05AE 033F 0300 0315 0062;0061 05AE 033F 0300 0315 0062;0061 05AE 033F 0300 0315 0062;0061 05AE 033F 0300 0315 0062; +0061 0315 0300 05AE 0340 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; +0061 0340 0315 0300 05AE 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062;00E0 05AE 0300 0315 0062;0061 05AE 0300 0300 0315 0062; +0061 0315 0300 05AE 0341 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062;00E0 05AE 0301 0315 0062;0061 05AE 0300 0301 0315 0062; +0061 0341 0315 0300 05AE 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062;00E1 05AE 0300 0315 0062;0061 05AE 0301 0300 0315 0062; +0061 0315 0300 05AE 0342 0062;00E0 05AE 0342 0315 0062;0061 05AE 0300 0342 0315 0062;00E0 05AE 0342 0315 0062;0061 05AE 0300 0342 0315 0062; +0061 0342 0315 0300 05AE 0062;0061 05AE 0342 0300 0315 0062;0061 05AE 0342 0300 0315 0062;0061 05AE 0342 0300 0315 0062;0061 05AE 0342 0300 0315 0062; +0061 0315 0300 05AE 0343 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062;00E0 05AE 0313 0315 0062;0061 05AE 0300 0313 0315 0062; +0061 0343 0315 0300 05AE 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062;0061 05AE 0313 0300 0315 0062; +0061 0315 0300 05AE 0344 0062;00E0 05AE 0308 0301 0315 0062;0061 05AE 0300 0308 0301 0315 0062;00E0 05AE 0308 0301 0315 0062;0061 05AE 0300 0308 0301 0315 0062; +0061 0344 0315 0300 05AE 0062;00E4 05AE 0301 0300 0315 0062;0061 05AE 0308 0301 0300 0315 0062;00E4 05AE 0301 0300 0315 0062;0061 05AE 0308 0301 0300 0315 0062; +0061 0345 035D 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062; +0061 0345 0345 035D 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062;0061 035D 0345 0345 0062; +0061 0315 0300 05AE 0346 0062;00E0 05AE 0346 0315 0062;0061 05AE 0300 0346 0315 0062;00E0 05AE 0346 0315 0062;0061 05AE 0300 0346 0315 0062; +0061 0346 0315 0300 05AE 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062;0061 05AE 0346 0300 0315 0062; +0061 059A 0316 302A 0347 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062;0061 302A 0316 0347 059A 0062; +0061 0347 059A 0316 302A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062;0061 302A 0347 0316 059A 0062; +0061 059A 0316 302A 0348 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062;0061 302A 0316 0348 059A 0062; +0061 0348 059A 0316 302A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062;0061 302A 0348 0316 059A 0062; +0061 059A 0316 302A 0349 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062;0061 302A 0316 0349 059A 0062; +0061 0349 059A 0316 302A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062;0061 302A 0349 0316 059A 0062; +0061 0315 0300 05AE 034A 0062;00E0 05AE 034A 0315 0062;0061 05AE 0300 034A 0315 0062;00E0 05AE 034A 0315 0062;0061 05AE 0300 034A 0315 0062; +0061 034A 0315 0300 05AE 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062;0061 05AE 034A 0300 0315 0062; +0061 0315 0300 05AE 034B 0062;00E0 05AE 034B 0315 0062;0061 05AE 0300 034B 0315 0062;00E0 05AE 034B 0315 0062;0061 05AE 0300 034B 0315 0062; +0061 034B 0315 0300 05AE 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062;0061 05AE 034B 0300 0315 0062; +0061 0315 0300 05AE 034C 0062;00E0 05AE 034C 0315 0062;0061 05AE 0300 034C 0315 0062;00E0 05AE 034C 0315 0062;0061 05AE 0300 034C 0315 0062; +0061 034C 0315 0300 05AE 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062;0061 05AE 034C 0300 0315 0062; +0061 059A 0316 302A 034D 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062;0061 302A 0316 034D 059A 0062; +0061 034D 059A 0316 302A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062;0061 302A 034D 0316 059A 0062; +0061 059A 0316 302A 034E 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062;0061 302A 0316 034E 059A 0062; +0061 034E 059A 0316 302A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062;0061 302A 034E 0316 059A 0062; +0061 0315 0300 05AE 0350 0062;00E0 05AE 0350 0315 0062;0061 05AE 0300 0350 0315 0062;00E0 05AE 0350 0315 0062;0061 05AE 0300 0350 0315 0062; +0061 0350 0315 0300 05AE 0062;0061 05AE 0350 0300 0315 0062;0061 05AE 0350 0300 0315 0062;0061 05AE 0350 0300 0315 0062;0061 05AE 0350 0300 0315 0062; +0061 0315 0300 05AE 0351 0062;00E0 05AE 0351 0315 0062;0061 05AE 0300 0351 0315 0062;00E0 05AE 0351 0315 0062;0061 05AE 0300 0351 0315 0062; +0061 0351 0315 0300 05AE 0062;0061 05AE 0351 0300 0315 0062;0061 05AE 0351 0300 0315 0062;0061 05AE 0351 0300 0315 0062;0061 05AE 0351 0300 0315 0062; +0061 0315 0300 05AE 0352 0062;00E0 05AE 0352 0315 0062;0061 05AE 0300 0352 0315 0062;00E0 05AE 0352 0315 0062;0061 05AE 0300 0352 0315 0062; +0061 0352 0315 0300 05AE 0062;0061 05AE 0352 0300 0315 0062;0061 05AE 0352 0300 0315 0062;0061 05AE 0352 0300 0315 0062;0061 05AE 0352 0300 0315 0062; +0061 059A 0316 302A 0353 0062;0061 302A 0316 0353 059A 0062;0061 302A 0316 0353 059A 0062;0061 302A 0316 0353 059A 0062;0061 302A 0316 0353 059A 0062; +0061 0353 059A 0316 302A 0062;0061 302A 0353 0316 059A 0062;0061 302A 0353 0316 059A 0062;0061 302A 0353 0316 059A 0062;0061 302A 0353 0316 059A 0062; +0061 059A 0316 302A 0354 0062;0061 302A 0316 0354 059A 0062;0061 302A 0316 0354 059A 0062;0061 302A 0316 0354 059A 0062;0061 302A 0316 0354 059A 0062; +0061 0354 059A 0316 302A 0062;0061 302A 0354 0316 059A 0062;0061 302A 0354 0316 059A 0062;0061 302A 0354 0316 059A 0062;0061 302A 0354 0316 059A 0062; +0061 059A 0316 302A 0355 0062;0061 302A 0316 0355 059A 0062;0061 302A 0316 0355 059A 0062;0061 302A 0316 0355 059A 0062;0061 302A 0316 0355 059A 0062; +0061 0355 059A 0316 302A 0062;0061 302A 0355 0316 059A 0062;0061 302A 0355 0316 059A 0062;0061 302A 0355 0316 059A 0062;0061 302A 0355 0316 059A 0062; +0061 059A 0316 302A 0356 0062;0061 302A 0316 0356 059A 0062;0061 302A 0316 0356 059A 0062;0061 302A 0316 0356 059A 0062;0061 302A 0316 0356 059A 0062; +0061 0356 059A 0316 302A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062;0061 302A 0356 0316 059A 0062; +0061 0315 0300 05AE 0357 0062;00E0 05AE 0357 0315 0062;0061 05AE 0300 0357 0315 0062;00E0 05AE 0357 0315 0062;0061 05AE 0300 0357 0315 0062; +0061 0357 0315 0300 05AE 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062;0061 05AE 0357 0300 0315 0062; +0061 035C 0315 0300 0358 0062;00E0 0315 0358 035C 0062;0061 0300 0315 0358 035C 0062;00E0 0315 0358 035C 0062;0061 0300 0315 0358 035C 0062; +0061 0358 035C 0315 0300 0062;00E0 0358 0315 035C 0062;0061 0300 0358 0315 035C 0062;00E0 0358 0315 035C 0062;0061 0300 0358 0315 035C 0062; +0061 059A 0316 302A 0359 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062;0061 302A 0316 0359 059A 0062; +0061 0359 059A 0316 302A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062;0061 302A 0359 0316 059A 0062; +0061 059A 0316 302A 035A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062;0061 302A 0316 035A 059A 0062; +0061 035A 059A 0316 302A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062;0061 302A 035A 0316 059A 0062; +0061 0315 0300 05AE 035B 0062;00E0 05AE 035B 0315 0062;0061 05AE 0300 035B 0315 0062;00E0 05AE 035B 0315 0062;0061 05AE 0300 035B 0315 0062; +0061 035B 0315 0300 05AE 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062;0061 05AE 035B 0300 0315 0062; +0061 035D 035C 0315 035C 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062; +0061 035C 035D 035C 0315 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062;0061 0315 035C 035C 035D 0062; +0061 0345 035D 035C 035D 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062; +0061 035D 0345 035D 035C 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062;0061 035C 035D 035D 0345 0062; +0061 0345 035D 035C 035E 0062;0061 035C 035D 035E 0345 0062;0061 035C 035D 035E 0345 0062;0061 035C 035D 035E 0345 0062;0061 035C 035D 035E 0345 0062; +0061 035E 0345 035D 035C 0062;0061 035C 035E 035D 0345 0062;0061 035C 035E 035D 0345 0062;0061 035C 035E 035D 0345 0062;0061 035C 035E 035D 0345 0062; +0061 035D 035C 0315 035F 0062;0061 0315 035C 035F 035D 0062;0061 0315 035C 035F 035D 0062;0061 0315 035C 035F 035D 0062;0061 0315 035C 035F 035D 0062; +0061 035F 035D 035C 0315 0062;0061 0315 035F 035C 035D 0062;0061 0315 035F 035C 035D 0062;0061 0315 035F 035C 035D 0062;0061 0315 035F 035C 035D 0062; +0061 0345 035D 035C 0360 0062;0061 035C 035D 0360 0345 0062;0061 035C 035D 0360 0345 0062;0061 035C 035D 0360 0345 0062;0061 035C 035D 0360 0345 0062; +0061 0360 0345 035D 035C 0062;0061 035C 0360 035D 0345 0062;0061 035C 0360 035D 0345 0062;0061 035C 0360 035D 0345 0062;0061 035C 0360 035D 0345 0062; +0061 0345 035D 035C 0361 0062;0061 035C 035D 0361 0345 0062;0061 035C 035D 0361 0345 0062;0061 035C 035D 0361 0345 0062;0061 035C 035D 0361 0345 0062; +0061 0361 0345 035D 035C 0062;0061 035C 0361 035D 0345 0062;0061 035C 0361 035D 0345 0062;0061 035C 0361 035D 0345 0062;0061 035C 0361 035D 0345 0062; +0061 035D 035C 0315 0362 0062;0061 0315 035C 0362 035D 0062;0061 0315 035C 0362 035D 0062;0061 0315 035C 0362 035D 0062;0061 0315 035C 0362 035D 0062; +0061 0362 035D 035C 0315 0062;0061 0315 0362 035C 035D 0062;0061 0315 0362 035C 035D 0062;0061 0315 0362 035C 035D 0062;0061 0315 0362 035C 035D 0062; +0061 0315 0300 05AE 0363 0062;00E0 05AE 0363 0315 0062;0061 05AE 0300 0363 0315 0062;00E0 05AE 0363 0315 0062;0061 05AE 0300 0363 0315 0062; +0061 0363 0315 0300 05AE 0062;0061 05AE 0363 0300 0315 0062;0061 05AE 0363 0300 0315 0062;0061 05AE 0363 0300 0315 0062;0061 05AE 0363 0300 0315 0062; +0061 0315 0300 05AE 0364 0062;00E0 05AE 0364 0315 0062;0061 05AE 0300 0364 0315 0062;00E0 05AE 0364 0315 0062;0061 05AE 0300 0364 0315 0062; +0061 0364 0315 0300 05AE 0062;0061 05AE 0364 0300 0315 0062;0061 05AE 0364 0300 0315 0062;0061 05AE 0364 0300 0315 0062;0061 05AE 0364 0300 0315 0062; +0061 0315 0300 05AE 0365 0062;00E0 05AE 0365 0315 0062;0061 05AE 0300 0365 0315 0062;00E0 05AE 0365 0315 0062;0061 05AE 0300 0365 0315 0062; +0061 0365 0315 0300 05AE 0062;0061 05AE 0365 0300 0315 0062;0061 05AE 0365 0300 0315 0062;0061 05AE 0365 0300 0315 0062;0061 05AE 0365 0300 0315 0062; +0061 0315 0300 05AE 0366 0062;00E0 05AE 0366 0315 0062;0061 05AE 0300 0366 0315 0062;00E0 05AE 0366 0315 0062;0061 05AE 0300 0366 0315 0062; +0061 0366 0315 0300 05AE 0062;0061 05AE 0366 0300 0315 0062;0061 05AE 0366 0300 0315 0062;0061 05AE 0366 0300 0315 0062;0061 05AE 0366 0300 0315 0062; +0061 0315 0300 05AE 0367 0062;00E0 05AE 0367 0315 0062;0061 05AE 0300 0367 0315 0062;00E0 05AE 0367 0315 0062;0061 05AE 0300 0367 0315 0062; +0061 0367 0315 0300 05AE 0062;0061 05AE 0367 0300 0315 0062;0061 05AE 0367 0300 0315 0062;0061 05AE 0367 0300 0315 0062;0061 05AE 0367 0300 0315 0062; +0061 0315 0300 05AE 0368 0062;00E0 05AE 0368 0315 0062;0061 05AE 0300 0368 0315 0062;00E0 05AE 0368 0315 0062;0061 05AE 0300 0368 0315 0062; +0061 0368 0315 0300 05AE 0062;0061 05AE 0368 0300 0315 0062;0061 05AE 0368 0300 0315 0062;0061 05AE 0368 0300 0315 0062;0061 05AE 0368 0300 0315 0062; +0061 0315 0300 05AE 0369 0062;00E0 05AE 0369 0315 0062;0061 05AE 0300 0369 0315 0062;00E0 05AE 0369 0315 0062;0061 05AE 0300 0369 0315 0062; +0061 0369 0315 0300 05AE 0062;0061 05AE 0369 0300 0315 0062;0061 05AE 0369 0300 0315 0062;0061 05AE 0369 0300 0315 0062;0061 05AE 0369 0300 0315 0062; +0061 0315 0300 05AE 036A 0062;00E0 05AE 036A 0315 0062;0061 05AE 0300 036A 0315 0062;00E0 05AE 036A 0315 0062;0061 05AE 0300 036A 0315 0062; +0061 036A 0315 0300 05AE 0062;0061 05AE 036A 0300 0315 0062;0061 05AE 036A 0300 0315 0062;0061 05AE 036A 0300 0315 0062;0061 05AE 036A 0300 0315 0062; +0061 0315 0300 05AE 036B 0062;00E0 05AE 036B 0315 0062;0061 05AE 0300 036B 0315 0062;00E0 05AE 036B 0315 0062;0061 05AE 0300 036B 0315 0062; +0061 036B 0315 0300 05AE 0062;0061 05AE 036B 0300 0315 0062;0061 05AE 036B 0300 0315 0062;0061 05AE 036B 0300 0315 0062;0061 05AE 036B 0300 0315 0062; +0061 0315 0300 05AE 036C 0062;00E0 05AE 036C 0315 0062;0061 05AE 0300 036C 0315 0062;00E0 05AE 036C 0315 0062;0061 05AE 0300 036C 0315 0062; +0061 036C 0315 0300 05AE 0062;0061 05AE 036C 0300 0315 0062;0061 05AE 036C 0300 0315 0062;0061 05AE 036C 0300 0315 0062;0061 05AE 036C 0300 0315 0062; +0061 0315 0300 05AE 036D 0062;00E0 05AE 036D 0315 0062;0061 05AE 0300 036D 0315 0062;00E0 05AE 036D 0315 0062;0061 05AE 0300 036D 0315 0062; +0061 036D 0315 0300 05AE 0062;0061 05AE 036D 0300 0315 0062;0061 05AE 036D 0300 0315 0062;0061 05AE 036D 0300 0315 0062;0061 05AE 036D 0300 0315 0062; +0061 0315 0300 05AE 036E 0062;00E0 05AE 036E 0315 0062;0061 05AE 0300 036E 0315 0062;00E0 05AE 036E 0315 0062;0061 05AE 0300 036E 0315 0062; +0061 036E 0315 0300 05AE 0062;0061 05AE 036E 0300 0315 0062;0061 05AE 036E 0300 0315 0062;0061 05AE 036E 0300 0315 0062;0061 05AE 036E 0300 0315 0062; +0061 0315 0300 05AE 036F 0062;00E0 05AE 036F 0315 0062;0061 05AE 0300 036F 0315 0062;00E0 05AE 036F 0315 0062;0061 05AE 0300 036F 0315 0062; +0061 036F 0315 0300 05AE 0062;0061 05AE 036F 0300 0315 0062;0061 05AE 036F 0300 0315 0062;0061 05AE 036F 0300 0315 0062;0061 05AE 036F 0300 0315 0062; +0061 0315 0300 05AE 0483 0062;00E0 05AE 0483 0315 0062;0061 05AE 0300 0483 0315 0062;00E0 05AE 0483 0315 0062;0061 05AE 0300 0483 0315 0062; +0061 0483 0315 0300 05AE 0062;0061 05AE 0483 0300 0315 0062;0061 05AE 0483 0300 0315 0062;0061 05AE 0483 0300 0315 0062;0061 05AE 0483 0300 0315 0062; +0061 0315 0300 05AE 0484 0062;00E0 05AE 0484 0315 0062;0061 05AE 0300 0484 0315 0062;00E0 05AE 0484 0315 0062;0061 05AE 0300 0484 0315 0062; +0061 0484 0315 0300 05AE 0062;0061 05AE 0484 0300 0315 0062;0061 05AE 0484 0300 0315 0062;0061 05AE 0484 0300 0315 0062;0061 05AE 0484 0300 0315 0062; +0061 0315 0300 05AE 0485 0062;00E0 05AE 0485 0315 0062;0061 05AE 0300 0485 0315 0062;00E0 05AE 0485 0315 0062;0061 05AE 0300 0485 0315 0062; +0061 0485 0315 0300 05AE 0062;0061 05AE 0485 0300 0315 0062;0061 05AE 0485 0300 0315 0062;0061 05AE 0485 0300 0315 0062;0061 05AE 0485 0300 0315 0062; +0061 0315 0300 05AE 0486 0062;00E0 05AE 0486 0315 0062;0061 05AE 0300 0486 0315 0062;00E0 05AE 0486 0315 0062;0061 05AE 0300 0486 0315 0062; +0061 0486 0315 0300 05AE 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062;0061 05AE 0486 0300 0315 0062; +0061 0315 0300 05AE 0487 0062;00E0 05AE 0487 0315 0062;0061 05AE 0300 0487 0315 0062;00E0 05AE 0487 0315 0062;0061 05AE 0300 0487 0315 0062; +0061 0487 0315 0300 05AE 0062;0061 05AE 0487 0300 0315 0062;0061 05AE 0487 0300 0315 0062;0061 05AE 0487 0300 0315 0062;0061 05AE 0487 0300 0315 0062; +0061 059A 0316 302A 0591 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062;0061 302A 0316 0591 059A 0062; +0061 0591 059A 0316 302A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062;0061 302A 0591 0316 059A 0062; +0061 0315 0300 05AE 0592 0062;00E0 05AE 0592 0315 0062;0061 05AE 0300 0592 0315 0062;00E0 05AE 0592 0315 0062;0061 05AE 0300 0592 0315 0062; +0061 0592 0315 0300 05AE 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062;0061 05AE 0592 0300 0315 0062; +0061 0315 0300 05AE 0593 0062;00E0 05AE 0593 0315 0062;0061 05AE 0300 0593 0315 0062;00E0 05AE 0593 0315 0062;0061 05AE 0300 0593 0315 0062; +0061 0593 0315 0300 05AE 0062;0061 05AE 0593 0300 0315 0062;0061 05AE 0593 0300 0315 0062;0061 05AE 0593 0300 0315 0062;0061 05AE 0593 0300 0315 0062; +0061 0315 0300 05AE 0594 0062;00E0 05AE 0594 0315 0062;0061 05AE 0300 0594 0315 0062;00E0 05AE 0594 0315 0062;0061 05AE 0300 0594 0315 0062; +0061 0594 0315 0300 05AE 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062;0061 05AE 0594 0300 0315 0062; +0061 0315 0300 05AE 0595 0062;00E0 05AE 0595 0315 0062;0061 05AE 0300 0595 0315 0062;00E0 05AE 0595 0315 0062;0061 05AE 0300 0595 0315 0062; +0061 0595 0315 0300 05AE 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062;0061 05AE 0595 0300 0315 0062; +0061 059A 0316 302A 0596 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062;0061 302A 0316 0596 059A 0062; +0061 0596 059A 0316 302A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062;0061 302A 0596 0316 059A 0062; +0061 0315 0300 05AE 0597 0062;00E0 05AE 0597 0315 0062;0061 05AE 0300 0597 0315 0062;00E0 05AE 0597 0315 0062;0061 05AE 0300 0597 0315 0062; +0061 0597 0315 0300 05AE 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062;0061 05AE 0597 0300 0315 0062; +0061 0315 0300 05AE 0598 0062;00E0 05AE 0598 0315 0062;0061 05AE 0300 0598 0315 0062;00E0 05AE 0598 0315 0062;0061 05AE 0300 0598 0315 0062; +0061 0598 0315 0300 05AE 0062;0061 05AE 0598 0300 0315 0062;0061 05AE 0598 0300 0315 0062;0061 05AE 0598 0300 0315 0062;0061 05AE 0598 0300 0315 0062; +0061 0315 0300 05AE 0599 0062;00E0 05AE 0599 0315 0062;0061 05AE 0300 0599 0315 0062;00E0 05AE 0599 0315 0062;0061 05AE 0300 0599 0315 0062; +0061 0599 0315 0300 05AE 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062;0061 05AE 0599 0300 0315 0062; +0061 302E 059A 0316 059A 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062; +0061 059A 302E 059A 0316 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062;0061 0316 059A 059A 302E 0062; +0061 059A 0316 302A 059B 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062;0061 302A 0316 059B 059A 0062; +0061 059B 059A 0316 302A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062;0061 302A 059B 0316 059A 0062; +0061 0315 0300 05AE 059C 0062;00E0 05AE 059C 0315 0062;0061 05AE 0300 059C 0315 0062;00E0 05AE 059C 0315 0062;0061 05AE 0300 059C 0315 0062; +0061 059C 0315 0300 05AE 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062;0061 05AE 059C 0300 0315 0062; +0061 0315 0300 05AE 059D 0062;00E0 05AE 059D 0315 0062;0061 05AE 0300 059D 0315 0062;00E0 05AE 059D 0315 0062;0061 05AE 0300 059D 0315 0062; +0061 059D 0315 0300 05AE 0062;0061 05AE 059D 0300 0315 0062;0061 05AE 059D 0300 0315 0062;0061 05AE 059D 0300 0315 0062;0061 05AE 059D 0300 0315 0062; +0061 0315 0300 05AE 059E 0062;00E0 05AE 059E 0315 0062;0061 05AE 0300 059E 0315 0062;00E0 05AE 059E 0315 0062;0061 05AE 0300 059E 0315 0062; +0061 059E 0315 0300 05AE 0062;0061 05AE 059E 0300 0315 0062;0061 05AE 059E 0300 0315 0062;0061 05AE 059E 0300 0315 0062;0061 05AE 059E 0300 0315 0062; +0061 0315 0300 05AE 059F 0062;00E0 05AE 059F 0315 0062;0061 05AE 0300 059F 0315 0062;00E0 05AE 059F 0315 0062;0061 05AE 0300 059F 0315 0062; +0061 059F 0315 0300 05AE 0062;0061 05AE 059F 0300 0315 0062;0061 05AE 059F 0300 0315 0062;0061 05AE 059F 0300 0315 0062;0061 05AE 059F 0300 0315 0062; +0061 0315 0300 05AE 05A0 0062;00E0 05AE 05A0 0315 0062;0061 05AE 0300 05A0 0315 0062;00E0 05AE 05A0 0315 0062;0061 05AE 0300 05A0 0315 0062; +0061 05A0 0315 0300 05AE 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062;0061 05AE 05A0 0300 0315 0062; +0061 0315 0300 05AE 05A1 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 0315 0062;00E0 05AE 05A1 0315 0062;0061 05AE 0300 05A1 0315 0062; +0061 05A1 0315 0300 05AE 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062;0061 05AE 05A1 0300 0315 0062; +0061 059A 0316 302A 05A2 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062;0061 302A 0316 05A2 059A 0062; +0061 05A2 059A 0316 302A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062;0061 302A 05A2 0316 059A 0062; +0061 059A 0316 302A 05A3 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062;0061 302A 0316 05A3 059A 0062; +0061 05A3 059A 0316 302A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062;0061 302A 05A3 0316 059A 0062; +0061 059A 0316 302A 05A4 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062;0061 302A 0316 05A4 059A 0062; +0061 05A4 059A 0316 302A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062;0061 302A 05A4 0316 059A 0062; +0061 059A 0316 302A 05A5 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062;0061 302A 0316 05A5 059A 0062; +0061 05A5 059A 0316 302A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062;0061 302A 05A5 0316 059A 0062; +0061 059A 0316 302A 05A6 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062;0061 302A 0316 05A6 059A 0062; +0061 05A6 059A 0316 302A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062;0061 302A 05A6 0316 059A 0062; +0061 059A 0316 302A 05A7 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062;0061 302A 0316 05A7 059A 0062; +0061 05A7 059A 0316 302A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062;0061 302A 05A7 0316 059A 0062; +0061 0315 0300 05AE 05A8 0062;00E0 05AE 05A8 0315 0062;0061 05AE 0300 05A8 0315 0062;00E0 05AE 05A8 0315 0062;0061 05AE 0300 05A8 0315 0062; +0061 05A8 0315 0300 05AE 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062;0061 05AE 05A8 0300 0315 0062; +0061 0315 0300 05AE 05A9 0062;00E0 05AE 05A9 0315 0062;0061 05AE 0300 05A9 0315 0062;00E0 05AE 05A9 0315 0062;0061 05AE 0300 05A9 0315 0062; +0061 05A9 0315 0300 05AE 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062;0061 05AE 05A9 0300 0315 0062; +0061 059A 0316 302A 05AA 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062;0061 302A 0316 05AA 059A 0062; +0061 05AA 059A 0316 302A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062;0061 302A 05AA 0316 059A 0062; +0061 0315 0300 05AE 05AB 0062;00E0 05AE 05AB 0315 0062;0061 05AE 0300 05AB 0315 0062;00E0 05AE 05AB 0315 0062;0061 05AE 0300 05AB 0315 0062; +0061 05AB 0315 0300 05AE 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062;0061 05AE 05AB 0300 0315 0062; +0061 0315 0300 05AE 05AC 0062;00E0 05AE 05AC 0315 0062;0061 05AE 0300 05AC 0315 0062;00E0 05AE 05AC 0315 0062;0061 05AE 0300 05AC 0315 0062; +0061 05AC 0315 0300 05AE 0062;0061 05AE 05AC 0300 0315 0062;0061 05AE 05AC 0300 0315 0062;0061 05AE 05AC 0300 0315 0062;0061 05AE 05AC 0300 0315 0062; +0061 302E 059A 0316 05AD 0062;0061 0316 059A 05AD 302E 0062;0061 0316 059A 05AD 302E 0062;0061 0316 059A 05AD 302E 0062;0061 0316 059A 05AD 302E 0062; +0061 05AD 302E 059A 0316 0062;0061 0316 05AD 059A 302E 0062;0061 0316 05AD 059A 302E 0062;0061 0316 05AD 059A 302E 0062;0061 0316 05AD 059A 302E 0062; +0061 0300 05AE 1D16D 05AE 0062;00E0 1D16D 05AE 05AE 0062;0061 1D16D 05AE 05AE 0300 0062;00E0 1D16D 05AE 05AE 0062;0061 1D16D 05AE 05AE 0300 0062; +0061 05AE 0300 05AE 1D16D 0062;00E0 1D16D 05AE 05AE 0062;0061 1D16D 05AE 05AE 0300 0062;00E0 1D16D 05AE 05AE 0062;0061 1D16D 05AE 05AE 0300 0062; +0061 0315 0300 05AE 05AF 0062;00E0 05AE 05AF 0315 0062;0061 05AE 0300 05AF 0315 0062;00E0 05AE 05AF 0315 0062;0061 05AE 0300 05AF 0315 0062; +0061 05AF 0315 0300 05AE 0062;0061 05AE 05AF 0300 0315 0062;0061 05AE 05AF 0300 0315 0062;0061 05AE 05AF 0300 0315 0062;0061 05AE 05AF 0300 0315 0062; +0061 05B1 05B0 094D 05B0 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062; +0061 05B0 05B1 05B0 094D 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062;0061 094D 05B0 05B0 05B1 0062; +0061 05B2 05B1 05B0 05B1 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062; +0061 05B1 05B2 05B1 05B0 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062;0061 05B0 05B1 05B1 05B2 0062; +0061 05B3 05B2 05B1 05B2 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062; +0061 05B2 05B3 05B2 05B1 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062;0061 05B1 05B2 05B2 05B3 0062; +0061 05B4 05B3 05B2 05B3 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062; +0061 05B3 05B4 05B3 05B2 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062;0061 05B2 05B3 05B3 05B4 0062; +0061 05B5 05B4 05B3 05B4 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062; +0061 05B4 05B5 05B4 05B3 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062;0061 05B3 05B4 05B4 05B5 0062; +0061 05B6 05B5 05B4 05B5 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062; +0061 05B5 05B6 05B5 05B4 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062;0061 05B4 05B5 05B5 05B6 0062; +0061 05B7 05B6 05B5 05B6 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062; +0061 05B6 05B7 05B6 05B5 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062;0061 05B5 05B6 05B6 05B7 0062; +0061 05B8 05B7 05B6 05B7 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062; +0061 05B7 05B8 05B7 05B6 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062;0061 05B6 05B7 05B7 05B8 0062; +0061 05B9 05B8 05B7 05B8 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062; +0061 05B8 05B9 05B8 05B7 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062;0061 05B7 05B8 05B8 05B9 0062; +0061 05BB 05B9 05B8 05B9 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062; +0061 05B9 05BB 05B9 05B8 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062;0061 05B8 05B9 05B9 05BB 0062; +0061 05BB 05B9 05B8 05BA 0062;0061 05B8 05B9 05BA 05BB 0062;0061 05B8 05B9 05BA 05BB 0062;0061 05B8 05B9 05BA 05BB 0062;0061 05B8 05B9 05BA 05BB 0062; +0061 05BA 05BB 05B9 05B8 0062;0061 05B8 05BA 05B9 05BB 0062;0061 05B8 05BA 05B9 05BB 0062;0061 05B8 05BA 05B9 05BB 0062;0061 05B8 05BA 05B9 05BB 0062; +0061 05BC 05BB 05B9 05BB 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062; +0061 05BB 05BC 05BB 05B9 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062;0061 05B9 05BB 05BB 05BC 0062; +0061 05BD 05BC 05BB 05BC 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062; +0061 05BC 05BD 05BC 05BB 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062;0061 05BB 05BC 05BC 05BD 0062; +0061 05BF 05BD 05BC 05BD 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062; +0061 05BD 05BF 05BD 05BC 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062;0061 05BC 05BD 05BD 05BF 0062; +0061 05C1 05BF 05BD 05BF 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062; +0061 05BF 05C1 05BF 05BD 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062;0061 05BD 05BF 05BF 05C1 0062; +0061 05C2 05C1 05BF 05C1 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062; +0061 05C1 05C2 05C1 05BF 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062;0061 05BF 05C1 05C1 05C2 0062; +0061 FB1E 05C2 05C1 05C2 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062; +0061 05C2 FB1E 05C2 05C1 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062;0061 05C1 05C2 05C2 FB1E 0062; +0061 0315 0300 05AE 05C4 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 0315 0062;00E0 05AE 05C4 0315 0062;0061 05AE 0300 05C4 0315 0062; +0061 05C4 0315 0300 05AE 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062;0061 05AE 05C4 0300 0315 0062; +0061 059A 0316 302A 05C5 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062;0061 302A 0316 05C5 059A 0062; +0061 05C5 059A 0316 302A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062;0061 302A 05C5 0316 059A 0062; +0061 05B9 05B8 05B7 05C7 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062;0061 05B7 05B8 05C7 05B9 0062; +0061 05C7 05B9 05B8 05B7 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062;0061 05B7 05C7 05B8 05B9 0062; +0061 0315 0300 05AE 0610 0062;00E0 05AE 0610 0315 0062;0061 05AE 0300 0610 0315 0062;00E0 05AE 0610 0315 0062;0061 05AE 0300 0610 0315 0062; +0061 0610 0315 0300 05AE 0062;0061 05AE 0610 0300 0315 0062;0061 05AE 0610 0300 0315 0062;0061 05AE 0610 0300 0315 0062;0061 05AE 0610 0300 0315 0062; +0061 0315 0300 05AE 0611 0062;00E0 05AE 0611 0315 0062;0061 05AE 0300 0611 0315 0062;00E0 05AE 0611 0315 0062;0061 05AE 0300 0611 0315 0062; +0061 0611 0315 0300 05AE 0062;0061 05AE 0611 0300 0315 0062;0061 05AE 0611 0300 0315 0062;0061 05AE 0611 0300 0315 0062;0061 05AE 0611 0300 0315 0062; +0061 0315 0300 05AE 0612 0062;00E0 05AE 0612 0315 0062;0061 05AE 0300 0612 0315 0062;00E0 05AE 0612 0315 0062;0061 05AE 0300 0612 0315 0062; +0061 0612 0315 0300 05AE 0062;0061 05AE 0612 0300 0315 0062;0061 05AE 0612 0300 0315 0062;0061 05AE 0612 0300 0315 0062;0061 05AE 0612 0300 0315 0062; +0061 0315 0300 05AE 0613 0062;00E0 05AE 0613 0315 0062;0061 05AE 0300 0613 0315 0062;00E0 05AE 0613 0315 0062;0061 05AE 0300 0613 0315 0062; +0061 0613 0315 0300 05AE 0062;0061 05AE 0613 0300 0315 0062;0061 05AE 0613 0300 0315 0062;0061 05AE 0613 0300 0315 0062;0061 05AE 0613 0300 0315 0062; +0061 0315 0300 05AE 0614 0062;00E0 05AE 0614 0315 0062;0061 05AE 0300 0614 0315 0062;00E0 05AE 0614 0315 0062;0061 05AE 0300 0614 0315 0062; +0061 0614 0315 0300 05AE 0062;0061 05AE 0614 0300 0315 0062;0061 05AE 0614 0300 0315 0062;0061 05AE 0614 0300 0315 0062;0061 05AE 0614 0300 0315 0062; +0061 0315 0300 05AE 0615 0062;00E0 05AE 0615 0315 0062;0061 05AE 0300 0615 0315 0062;00E0 05AE 0615 0315 0062;0061 05AE 0300 0615 0315 0062; +0061 0615 0315 0300 05AE 0062;0061 05AE 0615 0300 0315 0062;0061 05AE 0615 0300 0315 0062;0061 05AE 0615 0300 0315 0062;0061 05AE 0615 0300 0315 0062; +0061 0315 0300 05AE 0616 0062;00E0 05AE 0616 0315 0062;0061 05AE 0300 0616 0315 0062;00E0 05AE 0616 0315 0062;0061 05AE 0300 0616 0315 0062; +0061 0616 0315 0300 05AE 0062;0061 05AE 0616 0300 0315 0062;0061 05AE 0616 0300 0315 0062;0061 05AE 0616 0300 0315 0062;0061 05AE 0616 0300 0315 0062; +0061 0315 0300 05AE 0617 0062;00E0 05AE 0617 0315 0062;0061 05AE 0300 0617 0315 0062;00E0 05AE 0617 0315 0062;0061 05AE 0300 0617 0315 0062; +0061 0617 0315 0300 05AE 0062;0061 05AE 0617 0300 0315 0062;0061 05AE 0617 0300 0315 0062;0061 05AE 0617 0300 0315 0062;0061 05AE 0617 0300 0315 0062; +0061 0619 0618 064D 0618 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062; +0061 0618 0619 0618 064D 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062;0061 064D 0618 0618 0619 0062; +0061 061A 0619 0618 0619 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062; +0061 0619 061A 0619 0618 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062;0061 0618 0619 0619 061A 0062; +0061 0651 061A 0619 061A 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062; +0061 061A 0651 061A 0619 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062;0061 0619 061A 061A 0651 0062; +0061 064C 064B FB1E 064B 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062; +0061 064B 064C 064B FB1E 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062;0061 FB1E 064B 064B 064C 0062; +0061 064D 064C 064B 064C 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062; +0061 064C 064D 064C 064B 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062;0061 064B 064C 064C 064D 0062; +0061 0618 064D 064C 064D 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062; +0061 064D 0618 064D 064C 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062;0061 064C 064D 064D 0618 0062; +0061 0619 0618 064D 064E 0062;0061 064D 0618 064E 0619 0062;0061 064D 0618 064E 0619 0062;0061 064D 0618 064E 0619 0062;0061 064D 0618 064E 0619 0062; +0061 064E 0619 0618 064D 0062;0061 064D 064E 0618 0619 0062;0061 064D 064E 0618 0619 0062;0061 064D 064E 0618 0619 0062;0061 064D 064E 0618 0619 0062; +0061 061A 0619 0618 064F 0062;0061 0618 0619 064F 061A 0062;0061 0618 0619 064F 061A 0062;0061 0618 0619 064F 061A 0062;0061 0618 0619 064F 061A 0062; +0061 064F 061A 0619 0618 0062;0061 0618 064F 0619 061A 0062;0061 0618 064F 0619 061A 0062;0061 0618 064F 0619 061A 0062;0061 0618 064F 0619 061A 0062; +0061 0651 061A 0619 0650 0062;0061 0619 061A 0650 0651 0062;0061 0619 061A 0650 0651 0062;0061 0619 061A 0650 0651 0062;0061 0619 061A 0650 0651 0062; +0061 0650 0651 061A 0619 0062;0061 0619 0650 061A 0651 0062;0061 0619 0650 061A 0651 0062;0061 0619 0650 061A 0651 0062;0061 0619 0650 061A 0651 0062; +0061 0652 0651 061A 0651 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062; +0061 0651 0652 0651 061A 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062;0061 061A 0651 0651 0652 0062; +0061 0670 0652 0651 0652 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062; +0061 0652 0670 0652 0651 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062;0061 0651 0652 0652 0670 0062; +0061 0315 0300 05AE 0653 0062;00E0 05AE 0653 0315 0062;0061 05AE 0300 0653 0315 0062;00E0 05AE 0653 0315 0062;0061 05AE 0300 0653 0315 0062; +0061 0653 0315 0300 05AE 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062;0061 05AE 0653 0300 0315 0062; +0061 0315 0300 05AE 0654 0062;00E0 05AE 0654 0315 0062;0061 05AE 0300 0654 0315 0062;00E0 05AE 0654 0315 0062;0061 05AE 0300 0654 0315 0062; +0061 0654 0315 0300 05AE 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062;0061 05AE 0654 0300 0315 0062; +0061 059A 0316 302A 0655 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062;0061 302A 0316 0655 059A 0062; +0061 0655 059A 0316 302A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062;0061 302A 0655 0316 059A 0062; +0061 059A 0316 302A 0656 0062;0061 302A 0316 0656 059A 0062;0061 302A 0316 0656 059A 0062;0061 302A 0316 0656 059A 0062;0061 302A 0316 0656 059A 0062; +0061 0656 059A 0316 302A 0062;0061 302A 0656 0316 059A 0062;0061 302A 0656 0316 059A 0062;0061 302A 0656 0316 059A 0062;0061 302A 0656 0316 059A 0062; +0061 0315 0300 05AE 0657 0062;00E0 05AE 0657 0315 0062;0061 05AE 0300 0657 0315 0062;00E0 05AE 0657 0315 0062;0061 05AE 0300 0657 0315 0062; +0061 0657 0315 0300 05AE 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062;0061 05AE 0657 0300 0315 0062; +0061 0315 0300 05AE 0658 0062;00E0 05AE 0658 0315 0062;0061 05AE 0300 0658 0315 0062;00E0 05AE 0658 0315 0062;0061 05AE 0300 0658 0315 0062; +0061 0658 0315 0300 05AE 0062;0061 05AE 0658 0300 0315 0062;0061 05AE 0658 0300 0315 0062;0061 05AE 0658 0300 0315 0062;0061 05AE 0658 0300 0315 0062; +0061 0315 0300 05AE 0659 0062;00E0 05AE 0659 0315 0062;0061 05AE 0300 0659 0315 0062;00E0 05AE 0659 0315 0062;0061 05AE 0300 0659 0315 0062; +0061 0659 0315 0300 05AE 0062;0061 05AE 0659 0300 0315 0062;0061 05AE 0659 0300 0315 0062;0061 05AE 0659 0300 0315 0062;0061 05AE 0659 0300 0315 0062; +0061 0315 0300 05AE 065A 0062;00E0 05AE 065A 0315 0062;0061 05AE 0300 065A 0315 0062;00E0 05AE 065A 0315 0062;0061 05AE 0300 065A 0315 0062; +0061 065A 0315 0300 05AE 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062;0061 05AE 065A 0300 0315 0062; +0061 0315 0300 05AE 065B 0062;00E0 05AE 065B 0315 0062;0061 05AE 0300 065B 0315 0062;00E0 05AE 065B 0315 0062;0061 05AE 0300 065B 0315 0062; +0061 065B 0315 0300 05AE 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062;0061 05AE 065B 0300 0315 0062; +0061 059A 0316 302A 065C 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062;0061 302A 0316 065C 059A 0062; +0061 065C 059A 0316 302A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062;0061 302A 065C 0316 059A 0062; +0061 0315 0300 05AE 065D 0062;00E0 05AE 065D 0315 0062;0061 05AE 0300 065D 0315 0062;00E0 05AE 065D 0315 0062;0061 05AE 0300 065D 0315 0062; +0061 065D 0315 0300 05AE 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062;0061 05AE 065D 0300 0315 0062; +0061 0315 0300 05AE 065E 0062;00E0 05AE 065E 0315 0062;0061 05AE 0300 065E 0315 0062;00E0 05AE 065E 0315 0062;0061 05AE 0300 065E 0315 0062; +0061 065E 0315 0300 05AE 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062;0061 05AE 065E 0300 0315 0062; +0061 0711 0670 0652 0670 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062; +0061 0670 0711 0670 0652 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062;0061 0652 0670 0670 0711 0062; +0061 0315 0300 05AE 06D6 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 0315 0062;00E0 05AE 06D6 0315 0062;0061 05AE 0300 06D6 0315 0062; +0061 06D6 0315 0300 05AE 0062;0061 05AE 06D6 0300 0315 0062;0061 05AE 06D6 0300 0315 0062;0061 05AE 06D6 0300 0315 0062;0061 05AE 06D6 0300 0315 0062; +0061 0315 0300 05AE 06D7 0062;00E0 05AE 06D7 0315 0062;0061 05AE 0300 06D7 0315 0062;00E0 05AE 06D7 0315 0062;0061 05AE 0300 06D7 0315 0062; +0061 06D7 0315 0300 05AE 0062;0061 05AE 06D7 0300 0315 0062;0061 05AE 06D7 0300 0315 0062;0061 05AE 06D7 0300 0315 0062;0061 05AE 06D7 0300 0315 0062; +0061 0315 0300 05AE 06D8 0062;00E0 05AE 06D8 0315 0062;0061 05AE 0300 06D8 0315 0062;00E0 05AE 06D8 0315 0062;0061 05AE 0300 06D8 0315 0062; +0061 06D8 0315 0300 05AE 0062;0061 05AE 06D8 0300 0315 0062;0061 05AE 06D8 0300 0315 0062;0061 05AE 06D8 0300 0315 0062;0061 05AE 06D8 0300 0315 0062; +0061 0315 0300 05AE 06D9 0062;00E0 05AE 06D9 0315 0062;0061 05AE 0300 06D9 0315 0062;00E0 05AE 06D9 0315 0062;0061 05AE 0300 06D9 0315 0062; +0061 06D9 0315 0300 05AE 0062;0061 05AE 06D9 0300 0315 0062;0061 05AE 06D9 0300 0315 0062;0061 05AE 06D9 0300 0315 0062;0061 05AE 06D9 0300 0315 0062; +0061 0315 0300 05AE 06DA 0062;00E0 05AE 06DA 0315 0062;0061 05AE 0300 06DA 0315 0062;00E0 05AE 06DA 0315 0062;0061 05AE 0300 06DA 0315 0062; +0061 06DA 0315 0300 05AE 0062;0061 05AE 06DA 0300 0315 0062;0061 05AE 06DA 0300 0315 0062;0061 05AE 06DA 0300 0315 0062;0061 05AE 06DA 0300 0315 0062; +0061 0315 0300 05AE 06DB 0062;00E0 05AE 06DB 0315 0062;0061 05AE 0300 06DB 0315 0062;00E0 05AE 06DB 0315 0062;0061 05AE 0300 06DB 0315 0062; +0061 06DB 0315 0300 05AE 0062;0061 05AE 06DB 0300 0315 0062;0061 05AE 06DB 0300 0315 0062;0061 05AE 06DB 0300 0315 0062;0061 05AE 06DB 0300 0315 0062; +0061 0315 0300 05AE 06DC 0062;00E0 05AE 06DC 0315 0062;0061 05AE 0300 06DC 0315 0062;00E0 05AE 06DC 0315 0062;0061 05AE 0300 06DC 0315 0062; +0061 06DC 0315 0300 05AE 0062;0061 05AE 06DC 0300 0315 0062;0061 05AE 06DC 0300 0315 0062;0061 05AE 06DC 0300 0315 0062;0061 05AE 06DC 0300 0315 0062; +0061 0315 0300 05AE 06DF 0062;00E0 05AE 06DF 0315 0062;0061 05AE 0300 06DF 0315 0062;00E0 05AE 06DF 0315 0062;0061 05AE 0300 06DF 0315 0062; +0061 06DF 0315 0300 05AE 0062;0061 05AE 06DF 0300 0315 0062;0061 05AE 06DF 0300 0315 0062;0061 05AE 06DF 0300 0315 0062;0061 05AE 06DF 0300 0315 0062; +0061 0315 0300 05AE 06E0 0062;00E0 05AE 06E0 0315 0062;0061 05AE 0300 06E0 0315 0062;00E0 05AE 06E0 0315 0062;0061 05AE 0300 06E0 0315 0062; +0061 06E0 0315 0300 05AE 0062;0061 05AE 06E0 0300 0315 0062;0061 05AE 06E0 0300 0315 0062;0061 05AE 06E0 0300 0315 0062;0061 05AE 06E0 0300 0315 0062; +0061 0315 0300 05AE 06E1 0062;00E0 05AE 06E1 0315 0062;0061 05AE 0300 06E1 0315 0062;00E0 05AE 06E1 0315 0062;0061 05AE 0300 06E1 0315 0062; +0061 06E1 0315 0300 05AE 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062;0061 05AE 06E1 0300 0315 0062; +0061 0315 0300 05AE 06E2 0062;00E0 05AE 06E2 0315 0062;0061 05AE 0300 06E2 0315 0062;00E0 05AE 06E2 0315 0062;0061 05AE 0300 06E2 0315 0062; +0061 06E2 0315 0300 05AE 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062;0061 05AE 06E2 0300 0315 0062; +0061 059A 0316 302A 06E3 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062;0061 302A 0316 06E3 059A 0062; +0061 06E3 059A 0316 302A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062;0061 302A 06E3 0316 059A 0062; +0061 0315 0300 05AE 06E4 0062;00E0 05AE 06E4 0315 0062;0061 05AE 0300 06E4 0315 0062;00E0 05AE 06E4 0315 0062;0061 05AE 0300 06E4 0315 0062; +0061 06E4 0315 0300 05AE 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062;0061 05AE 06E4 0300 0315 0062; +0061 0315 0300 05AE 06E7 0062;00E0 05AE 06E7 0315 0062;0061 05AE 0300 06E7 0315 0062;00E0 05AE 06E7 0315 0062;0061 05AE 0300 06E7 0315 0062; +0061 06E7 0315 0300 05AE 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062;0061 05AE 06E7 0300 0315 0062; +0061 0315 0300 05AE 06E8 0062;00E0 05AE 06E8 0315 0062;0061 05AE 0300 06E8 0315 0062;00E0 05AE 06E8 0315 0062;0061 05AE 0300 06E8 0315 0062; +0061 06E8 0315 0300 05AE 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062;0061 05AE 06E8 0300 0315 0062; +0061 059A 0316 302A 06EA 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062;0061 302A 0316 06EA 059A 0062; +0061 06EA 059A 0316 302A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062;0061 302A 06EA 0316 059A 0062; +0061 0315 0300 05AE 06EB 0062;00E0 05AE 06EB 0315 0062;0061 05AE 0300 06EB 0315 0062;00E0 05AE 06EB 0315 0062;0061 05AE 0300 06EB 0315 0062; +0061 06EB 0315 0300 05AE 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062;0061 05AE 06EB 0300 0315 0062; +0061 0315 0300 05AE 06EC 0062;00E0 05AE 06EC 0315 0062;0061 05AE 0300 06EC 0315 0062;00E0 05AE 06EC 0315 0062;0061 05AE 0300 06EC 0315 0062; +0061 06EC 0315 0300 05AE 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062;0061 05AE 06EC 0300 0315 0062; +0061 059A 0316 302A 06ED 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062;0061 302A 0316 06ED 059A 0062; +0061 06ED 059A 0316 302A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062;0061 302A 06ED 0316 059A 0062; +0061 0C55 0711 0670 0711 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062; +0061 0711 0C55 0711 0670 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062;0061 0670 0711 0711 0C55 0062; +0061 0315 0300 05AE 0730 0062;00E0 05AE 0730 0315 0062;0061 05AE 0300 0730 0315 0062;00E0 05AE 0730 0315 0062;0061 05AE 0300 0730 0315 0062; +0061 0730 0315 0300 05AE 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062;0061 05AE 0730 0300 0315 0062; +0061 059A 0316 302A 0731 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062;0061 302A 0316 0731 059A 0062; +0061 0731 059A 0316 302A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062;0061 302A 0731 0316 059A 0062; +0061 0315 0300 05AE 0732 0062;00E0 05AE 0732 0315 0062;0061 05AE 0300 0732 0315 0062;00E0 05AE 0732 0315 0062;0061 05AE 0300 0732 0315 0062; +0061 0732 0315 0300 05AE 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062;0061 05AE 0732 0300 0315 0062; +0061 0315 0300 05AE 0733 0062;00E0 05AE 0733 0315 0062;0061 05AE 0300 0733 0315 0062;00E0 05AE 0733 0315 0062;0061 05AE 0300 0733 0315 0062; +0061 0733 0315 0300 05AE 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062;0061 05AE 0733 0300 0315 0062; +0061 059A 0316 302A 0734 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062;0061 302A 0316 0734 059A 0062; +0061 0734 059A 0316 302A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062;0061 302A 0734 0316 059A 0062; +0061 0315 0300 05AE 0735 0062;00E0 05AE 0735 0315 0062;0061 05AE 0300 0735 0315 0062;00E0 05AE 0735 0315 0062;0061 05AE 0300 0735 0315 0062; +0061 0735 0315 0300 05AE 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062;0061 05AE 0735 0300 0315 0062; +0061 0315 0300 05AE 0736 0062;00E0 05AE 0736 0315 0062;0061 05AE 0300 0736 0315 0062;00E0 05AE 0736 0315 0062;0061 05AE 0300 0736 0315 0062; +0061 0736 0315 0300 05AE 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062;0061 05AE 0736 0300 0315 0062; +0061 059A 0316 302A 0737 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062;0061 302A 0316 0737 059A 0062; +0061 0737 059A 0316 302A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062;0061 302A 0737 0316 059A 0062; +0061 059A 0316 302A 0738 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062;0061 302A 0316 0738 059A 0062; +0061 0738 059A 0316 302A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062;0061 302A 0738 0316 059A 0062; +0061 059A 0316 302A 0739 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062;0061 302A 0316 0739 059A 0062; +0061 0739 059A 0316 302A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062;0061 302A 0739 0316 059A 0062; +0061 0315 0300 05AE 073A 0062;00E0 05AE 073A 0315 0062;0061 05AE 0300 073A 0315 0062;00E0 05AE 073A 0315 0062;0061 05AE 0300 073A 0315 0062; +0061 073A 0315 0300 05AE 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062;0061 05AE 073A 0300 0315 0062; +0061 059A 0316 302A 073B 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062;0061 302A 0316 073B 059A 0062; +0061 073B 059A 0316 302A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062;0061 302A 073B 0316 059A 0062; +0061 059A 0316 302A 073C 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062;0061 302A 0316 073C 059A 0062; +0061 073C 059A 0316 302A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062;0061 302A 073C 0316 059A 0062; +0061 0315 0300 05AE 073D 0062;00E0 05AE 073D 0315 0062;0061 05AE 0300 073D 0315 0062;00E0 05AE 073D 0315 0062;0061 05AE 0300 073D 0315 0062; +0061 073D 0315 0300 05AE 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062;0061 05AE 073D 0300 0315 0062; +0061 059A 0316 302A 073E 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062;0061 302A 0316 073E 059A 0062; +0061 073E 059A 0316 302A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062;0061 302A 073E 0316 059A 0062; +0061 0315 0300 05AE 073F 0062;00E0 05AE 073F 0315 0062;0061 05AE 0300 073F 0315 0062;00E0 05AE 073F 0315 0062;0061 05AE 0300 073F 0315 0062; +0061 073F 0315 0300 05AE 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062;0061 05AE 073F 0300 0315 0062; +0061 0315 0300 05AE 0740 0062;00E0 05AE 0740 0315 0062;0061 05AE 0300 0740 0315 0062;00E0 05AE 0740 0315 0062;0061 05AE 0300 0740 0315 0062; +0061 0740 0315 0300 05AE 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062;0061 05AE 0740 0300 0315 0062; +0061 0315 0300 05AE 0741 0062;00E0 05AE 0741 0315 0062;0061 05AE 0300 0741 0315 0062;00E0 05AE 0741 0315 0062;0061 05AE 0300 0741 0315 0062; +0061 0741 0315 0300 05AE 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062;0061 05AE 0741 0300 0315 0062; +0061 059A 0316 302A 0742 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062;0061 302A 0316 0742 059A 0062; +0061 0742 059A 0316 302A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062;0061 302A 0742 0316 059A 0062; +0061 0315 0300 05AE 0743 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 0315 0062;00E0 05AE 0743 0315 0062;0061 05AE 0300 0743 0315 0062; +0061 0743 0315 0300 05AE 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062;0061 05AE 0743 0300 0315 0062; +0061 059A 0316 302A 0744 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062;0061 302A 0316 0744 059A 0062; +0061 0744 059A 0316 302A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062;0061 302A 0744 0316 059A 0062; +0061 0315 0300 05AE 0745 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 0315 0062;00E0 05AE 0745 0315 0062;0061 05AE 0300 0745 0315 0062; +0061 0745 0315 0300 05AE 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062;0061 05AE 0745 0300 0315 0062; +0061 059A 0316 302A 0746 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062;0061 302A 0316 0746 059A 0062; +0061 0746 059A 0316 302A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062;0061 302A 0746 0316 059A 0062; +0061 0315 0300 05AE 0747 0062;00E0 05AE 0747 0315 0062;0061 05AE 0300 0747 0315 0062;00E0 05AE 0747 0315 0062;0061 05AE 0300 0747 0315 0062; +0061 0747 0315 0300 05AE 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062;0061 05AE 0747 0300 0315 0062; +0061 059A 0316 302A 0748 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062;0061 302A 0316 0748 059A 0062; +0061 0748 059A 0316 302A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062;0061 302A 0748 0316 059A 0062; +0061 0315 0300 05AE 0749 0062;00E0 05AE 0749 0315 0062;0061 05AE 0300 0749 0315 0062;00E0 05AE 0749 0315 0062;0061 05AE 0300 0749 0315 0062; +0061 0749 0315 0300 05AE 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062;0061 05AE 0749 0300 0315 0062; +0061 0315 0300 05AE 074A 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 0315 0062;00E0 05AE 074A 0315 0062;0061 05AE 0300 074A 0315 0062; +0061 074A 0315 0300 05AE 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062;0061 05AE 074A 0300 0315 0062; +0061 0315 0300 05AE 07EB 0062;00E0 05AE 07EB 0315 0062;0061 05AE 0300 07EB 0315 0062;00E0 05AE 07EB 0315 0062;0061 05AE 0300 07EB 0315 0062; +0061 07EB 0315 0300 05AE 0062;0061 05AE 07EB 0300 0315 0062;0061 05AE 07EB 0300 0315 0062;0061 05AE 07EB 0300 0315 0062;0061 05AE 07EB 0300 0315 0062; +0061 0315 0300 05AE 07EC 0062;00E0 05AE 07EC 0315 0062;0061 05AE 0300 07EC 0315 0062;00E0 05AE 07EC 0315 0062;0061 05AE 0300 07EC 0315 0062; +0061 07EC 0315 0300 05AE 0062;0061 05AE 07EC 0300 0315 0062;0061 05AE 07EC 0300 0315 0062;0061 05AE 07EC 0300 0315 0062;0061 05AE 07EC 0300 0315 0062; +0061 0315 0300 05AE 07ED 0062;00E0 05AE 07ED 0315 0062;0061 05AE 0300 07ED 0315 0062;00E0 05AE 07ED 0315 0062;0061 05AE 0300 07ED 0315 0062; +0061 07ED 0315 0300 05AE 0062;0061 05AE 07ED 0300 0315 0062;0061 05AE 07ED 0300 0315 0062;0061 05AE 07ED 0300 0315 0062;0061 05AE 07ED 0300 0315 0062; +0061 0315 0300 05AE 07EE 0062;00E0 05AE 07EE 0315 0062;0061 05AE 0300 07EE 0315 0062;00E0 05AE 07EE 0315 0062;0061 05AE 0300 07EE 0315 0062; +0061 07EE 0315 0300 05AE 0062;0061 05AE 07EE 0300 0315 0062;0061 05AE 07EE 0300 0315 0062;0061 05AE 07EE 0300 0315 0062;0061 05AE 07EE 0300 0315 0062; +0061 0315 0300 05AE 07EF 0062;00E0 05AE 07EF 0315 0062;0061 05AE 0300 07EF 0315 0062;00E0 05AE 07EF 0315 0062;0061 05AE 0300 07EF 0315 0062; +0061 07EF 0315 0300 05AE 0062;0061 05AE 07EF 0300 0315 0062;0061 05AE 07EF 0300 0315 0062;0061 05AE 07EF 0300 0315 0062;0061 05AE 07EF 0300 0315 0062; +0061 0315 0300 05AE 07F0 0062;00E0 05AE 07F0 0315 0062;0061 05AE 0300 07F0 0315 0062;00E0 05AE 07F0 0315 0062;0061 05AE 0300 07F0 0315 0062; +0061 07F0 0315 0300 05AE 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062;0061 05AE 07F0 0300 0315 0062; +0061 0315 0300 05AE 07F1 0062;00E0 05AE 07F1 0315 0062;0061 05AE 0300 07F1 0315 0062;00E0 05AE 07F1 0315 0062;0061 05AE 0300 07F1 0315 0062; +0061 07F1 0315 0300 05AE 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062;0061 05AE 07F1 0300 0315 0062; +0061 059A 0316 302A 07F2 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062;0061 302A 0316 07F2 059A 0062; +0061 07F2 059A 0316 302A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062;0061 302A 07F2 0316 059A 0062; +0061 0315 0300 05AE 07F3 0062;00E0 05AE 07F3 0315 0062;0061 05AE 0300 07F3 0315 0062;00E0 05AE 07F3 0315 0062;0061 05AE 0300 07F3 0315 0062; +0061 07F3 0315 0300 05AE 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062;0061 05AE 07F3 0300 0315 0062; +0061 3099 093C 0334 093C 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062; +0061 093C 3099 093C 0334 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062;0061 0334 093C 093C 3099 0062; +0061 05B0 094D 3099 094D 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062; +0061 094D 05B0 094D 3099 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062;0061 3099 094D 094D 05B0 0062; +0061 0315 0300 05AE 0951 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 0315 0062;00E0 05AE 0951 0315 0062;0061 05AE 0300 0951 0315 0062; +0061 0951 0315 0300 05AE 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062;0061 05AE 0951 0300 0315 0062; +0061 059A 0316 302A 0952 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062;0061 302A 0316 0952 059A 0062; +0061 0952 059A 0316 302A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062;0061 302A 0952 0316 059A 0062; +0061 0315 0300 05AE 0953 0062;00E0 05AE 0953 0315 0062;0061 05AE 0300 0953 0315 0062;00E0 05AE 0953 0315 0062;0061 05AE 0300 0953 0315 0062; +0061 0953 0315 0300 05AE 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062;0061 05AE 0953 0300 0315 0062; +0061 0315 0300 05AE 0954 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 0315 0062;00E0 05AE 0954 0315 0062;0061 05AE 0300 0954 0315 0062; +0061 0954 0315 0300 05AE 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062;0061 05AE 0954 0300 0315 0062; +0061 3099 093C 0334 09BC 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062;0061 0334 093C 09BC 3099 0062; +0061 09BC 3099 093C 0334 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062;0061 0334 09BC 093C 3099 0062; +0061 05B0 094D 3099 09CD 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062;0061 3099 094D 09CD 05B0 0062; +0061 09CD 05B0 094D 3099 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062;0061 3099 09CD 094D 05B0 0062; +0061 3099 093C 0334 0A3C 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062;0061 0334 093C 0A3C 3099 0062; +0061 0A3C 3099 093C 0334 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062;0061 0334 0A3C 093C 3099 0062; +0061 05B0 094D 3099 0A4D 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062;0061 3099 094D 0A4D 05B0 0062; +0061 0A4D 05B0 094D 3099 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062;0061 3099 0A4D 094D 05B0 0062; +0061 3099 093C 0334 0ABC 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062;0061 0334 093C 0ABC 3099 0062; +0061 0ABC 3099 093C 0334 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062;0061 0334 0ABC 093C 3099 0062; +0061 05B0 094D 3099 0ACD 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062;0061 3099 094D 0ACD 05B0 0062; +0061 0ACD 05B0 094D 3099 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062;0061 3099 0ACD 094D 05B0 0062; +0061 3099 093C 0334 0B3C 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062;0061 0334 093C 0B3C 3099 0062; +0061 0B3C 3099 093C 0334 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062;0061 0334 0B3C 093C 3099 0062; +0061 05B0 094D 3099 0B4D 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062;0061 3099 094D 0B4D 05B0 0062; +0061 0B4D 05B0 094D 3099 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062;0061 3099 0B4D 094D 05B0 0062; +0061 05B0 094D 3099 0BCD 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062;0061 3099 094D 0BCD 05B0 0062; +0061 0BCD 05B0 094D 3099 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062;0061 3099 0BCD 094D 05B0 0062; +0061 05B0 094D 3099 0C4D 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062;0061 3099 094D 0C4D 05B0 0062; +0061 0C4D 05B0 094D 3099 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062;0061 3099 0C4D 094D 05B0 0062; +0061 0C56 0C55 0711 0C55 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062; +0061 0C55 0C56 0C55 0711 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062;0061 0711 0C55 0C55 0C56 0062; +0061 0E38 0C56 0C55 0C56 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062; +0061 0C56 0E38 0C56 0C55 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062;0061 0C55 0C56 0C56 0E38 0062; +0061 3099 093C 0334 0CBC 0062;0061 0334 093C 0CBC 3099 0062;0061 0334 093C 0CBC 3099 0062;0061 0334 093C 0CBC 3099 0062;0061 0334 093C 0CBC 3099 0062; +0061 0CBC 3099 093C 0334 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062;0061 0334 0CBC 093C 3099 0062; +0061 05B0 094D 3099 0CCD 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062;0061 3099 094D 0CCD 05B0 0062; +0061 0CCD 05B0 094D 3099 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062;0061 3099 0CCD 094D 05B0 0062; +0061 05B0 094D 3099 0D4D 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062;0061 3099 094D 0D4D 05B0 0062; +0061 0D4D 05B0 094D 3099 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062;0061 3099 0D4D 094D 05B0 0062; +0061 05B0 094D 3099 0DCA 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062;0061 3099 094D 0DCA 05B0 0062; +0061 0DCA 05B0 094D 3099 0062;0061 3099 0DCA 094D 05B0 0062;0061 3099 0DCA 094D 05B0 0062;0061 3099 0DCA 094D 05B0 0062;0061 3099 0DCA 094D 05B0 0062; +0061 0E48 0E38 0C56 0E38 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062; +0061 0E38 0E48 0E38 0C56 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062;0061 0C56 0E38 0E38 0E48 0062; +0061 0E48 0E38 0C56 0E39 0062;0061 0C56 0E38 0E39 0E48 0062;0061 0C56 0E38 0E39 0E48 0062;0061 0C56 0E38 0E39 0E48 0062;0061 0C56 0E38 0E39 0E48 0062; +0061 0E39 0E48 0E38 0C56 0062;0061 0C56 0E39 0E38 0E48 0062;0061 0C56 0E39 0E38 0E48 0062;0061 0C56 0E39 0E38 0E48 0062;0061 0C56 0E39 0E38 0E48 0062; +0061 05B0 094D 3099 0E3A 0062;0061 3099 094D 0E3A 05B0 0062;0061 3099 094D 0E3A 05B0 0062;0061 3099 094D 0E3A 05B0 0062;0061 3099 094D 0E3A 05B0 0062; +0061 0E3A 05B0 094D 3099 0062;0061 3099 0E3A 094D 05B0 0062;0061 3099 0E3A 094D 05B0 0062;0061 3099 0E3A 094D 05B0 0062;0061 3099 0E3A 094D 05B0 0062; +0061 0EB8 0E48 0E38 0E48 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062; +0061 0E48 0EB8 0E48 0E38 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062;0061 0E38 0E48 0E48 0EB8 0062; +0061 0EB8 0E48 0E38 0E49 0062;0061 0E38 0E48 0E49 0EB8 0062;0061 0E38 0E48 0E49 0EB8 0062;0061 0E38 0E48 0E49 0EB8 0062;0061 0E38 0E48 0E49 0EB8 0062; +0061 0E49 0EB8 0E48 0E38 0062;0061 0E38 0E49 0E48 0EB8 0062;0061 0E38 0E49 0E48 0EB8 0062;0061 0E38 0E49 0E48 0EB8 0062;0061 0E38 0E49 0E48 0EB8 0062; +0061 0EB8 0E48 0E38 0E4A 0062;0061 0E38 0E48 0E4A 0EB8 0062;0061 0E38 0E48 0E4A 0EB8 0062;0061 0E38 0E48 0E4A 0EB8 0062;0061 0E38 0E48 0E4A 0EB8 0062; +0061 0E4A 0EB8 0E48 0E38 0062;0061 0E38 0E4A 0E48 0EB8 0062;0061 0E38 0E4A 0E48 0EB8 0062;0061 0E38 0E4A 0E48 0EB8 0062;0061 0E38 0E4A 0E48 0EB8 0062; +0061 0EB8 0E48 0E38 0E4B 0062;0061 0E38 0E48 0E4B 0EB8 0062;0061 0E38 0E48 0E4B 0EB8 0062;0061 0E38 0E48 0E4B 0EB8 0062;0061 0E38 0E48 0E4B 0EB8 0062; +0061 0E4B 0EB8 0E48 0E38 0062;0061 0E38 0E4B 0E48 0EB8 0062;0061 0E38 0E4B 0E48 0EB8 0062;0061 0E38 0E4B 0E48 0EB8 0062;0061 0E38 0E4B 0E48 0EB8 0062; +0061 0EC8 0EB8 0E48 0EB8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062; +0061 0EB8 0EC8 0EB8 0E48 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062;0061 0E48 0EB8 0EB8 0EC8 0062; +0061 0EC8 0EB8 0E48 0EB9 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062;0061 0E48 0EB8 0EB9 0EC8 0062; +0061 0EB9 0EC8 0EB8 0E48 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062;0061 0E48 0EB9 0EB8 0EC8 0062; +0061 0F71 0EC8 0EB8 0EC8 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062; +0061 0EC8 0F71 0EC8 0EB8 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062;0061 0EB8 0EC8 0EC8 0F71 0062; +0061 0F71 0EC8 0EB8 0EC9 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062;0061 0EB8 0EC8 0EC9 0F71 0062; +0061 0EC9 0F71 0EC8 0EB8 0062;0061 0EB8 0EC9 0EC8 0F71 0062;0061 0EB8 0EC9 0EC8 0F71 0062;0061 0EB8 0EC9 0EC8 0F71 0062;0061 0EB8 0EC9 0EC8 0F71 0062; +0061 0F71 0EC8 0EB8 0ECA 0062;0061 0EB8 0EC8 0ECA 0F71 0062;0061 0EB8 0EC8 0ECA 0F71 0062;0061 0EB8 0EC8 0ECA 0F71 0062;0061 0EB8 0EC8 0ECA 0F71 0062; +0061 0ECA 0F71 0EC8 0EB8 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062;0061 0EB8 0ECA 0EC8 0F71 0062; +0061 0F71 0EC8 0EB8 0ECB 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062;0061 0EB8 0EC8 0ECB 0F71 0062; +0061 0ECB 0F71 0EC8 0EB8 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062;0061 0EB8 0ECB 0EC8 0F71 0062; +0061 059A 0316 302A 0F18 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062;0061 302A 0316 0F18 059A 0062; +0061 0F18 059A 0316 302A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062;0061 302A 0F18 0316 059A 0062; +0061 059A 0316 302A 0F19 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062;0061 302A 0316 0F19 059A 0062; +0061 0F19 059A 0316 302A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062;0061 302A 0F19 0316 059A 0062; +0061 059A 0316 302A 0F35 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062;0061 302A 0316 0F35 059A 0062; +0061 0F35 059A 0316 302A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062;0061 302A 0F35 0316 059A 0062; +0061 059A 0316 302A 0F37 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062;0061 302A 0316 0F37 059A 0062; +0061 0F37 059A 0316 302A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062;0061 302A 0F37 0316 059A 0062; +0061 302A 031B 1DCE 0F39 0062;0061 1DCE 031B 0F39 302A 0062;0061 1DCE 031B 0F39 302A 0062;0061 1DCE 031B 0F39 302A 0062;0061 1DCE 031B 0F39 302A 0062; +0061 0F39 302A 031B 1DCE 0062;0061 1DCE 0F39 031B 302A 0062;0061 1DCE 0F39 031B 302A 0062;0061 1DCE 0F39 031B 302A 0062;0061 1DCE 0F39 031B 302A 0062; +0061 0F72 0F71 0EC8 0F71 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062; +0061 0F71 0F72 0F71 0EC8 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062;0061 0EC8 0F71 0F71 0F72 0062; +0061 0F74 0F72 0F71 0F72 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062; +0061 0F72 0F74 0F72 0F71 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062;0061 0F71 0F72 0F72 0F74 0062; +0061 0321 0F74 0F72 0F74 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062; +0061 0F74 0321 0F74 0F72 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062;0061 0F72 0F74 0F74 0321 0062; +0061 0F74 0F72 0F71 0F7A 0062;0061 0F71 0F72 0F7A 0F74 0062;0061 0F71 0F72 0F7A 0F74 0062;0061 0F71 0F72 0F7A 0F74 0062;0061 0F71 0F72 0F7A 0F74 0062; +0061 0F7A 0F74 0F72 0F71 0062;0061 0F71 0F7A 0F72 0F74 0062;0061 0F71 0F7A 0F72 0F74 0062;0061 0F71 0F7A 0F72 0F74 0062;0061 0F71 0F7A 0F72 0F74 0062; +0061 0F74 0F72 0F71 0F7B 0062;0061 0F71 0F72 0F7B 0F74 0062;0061 0F71 0F72 0F7B 0F74 0062;0061 0F71 0F72 0F7B 0F74 0062;0061 0F71 0F72 0F7B 0F74 0062; +0061 0F7B 0F74 0F72 0F71 0062;0061 0F71 0F7B 0F72 0F74 0062;0061 0F71 0F7B 0F72 0F74 0062;0061 0F71 0F7B 0F72 0F74 0062;0061 0F71 0F7B 0F72 0F74 0062; +0061 0F74 0F72 0F71 0F7C 0062;0061 0F71 0F72 0F7C 0F74 0062;0061 0F71 0F72 0F7C 0F74 0062;0061 0F71 0F72 0F7C 0F74 0062;0061 0F71 0F72 0F7C 0F74 0062; +0061 0F7C 0F74 0F72 0F71 0062;0061 0F71 0F7C 0F72 0F74 0062;0061 0F71 0F7C 0F72 0F74 0062;0061 0F71 0F7C 0F72 0F74 0062;0061 0F71 0F7C 0F72 0F74 0062; +0061 0F74 0F72 0F71 0F7D 0062;0061 0F71 0F72 0F7D 0F74 0062;0061 0F71 0F72 0F7D 0F74 0062;0061 0F71 0F72 0F7D 0F74 0062;0061 0F71 0F72 0F7D 0F74 0062; +0061 0F7D 0F74 0F72 0F71 0062;0061 0F71 0F7D 0F72 0F74 0062;0061 0F71 0F7D 0F72 0F74 0062;0061 0F71 0F7D 0F72 0F74 0062;0061 0F71 0F7D 0F72 0F74 0062; +0061 0F74 0F72 0F71 0F80 0062;0061 0F71 0F72 0F80 0F74 0062;0061 0F71 0F72 0F80 0F74 0062;0061 0F71 0F72 0F80 0F74 0062;0061 0F71 0F72 0F80 0F74 0062; +0061 0F80 0F74 0F72 0F71 0062;0061 0F71 0F80 0F72 0F74 0062;0061 0F71 0F80 0F72 0F74 0062;0061 0F71 0F80 0F72 0F74 0062;0061 0F71 0F80 0F72 0F74 0062; +0061 0315 0300 05AE 0F82 0062;00E0 05AE 0F82 0315 0062;0061 05AE 0300 0F82 0315 0062;00E0 05AE 0F82 0315 0062;0061 05AE 0300 0F82 0315 0062; +0061 0F82 0315 0300 05AE 0062;0061 05AE 0F82 0300 0315 0062;0061 05AE 0F82 0300 0315 0062;0061 05AE 0F82 0300 0315 0062;0061 05AE 0F82 0300 0315 0062; +0061 0315 0300 05AE 0F83 0062;00E0 05AE 0F83 0315 0062;0061 05AE 0300 0F83 0315 0062;00E0 05AE 0F83 0315 0062;0061 05AE 0300 0F83 0315 0062; +0061 0F83 0315 0300 05AE 0062;0061 05AE 0F83 0300 0315 0062;0061 05AE 0F83 0300 0315 0062;0061 05AE 0F83 0300 0315 0062;0061 05AE 0F83 0300 0315 0062; +0061 05B0 094D 3099 0F84 0062;0061 3099 094D 0F84 05B0 0062;0061 3099 094D 0F84 05B0 0062;0061 3099 094D 0F84 05B0 0062;0061 3099 094D 0F84 05B0 0062; +0061 0F84 05B0 094D 3099 0062;0061 3099 0F84 094D 05B0 0062;0061 3099 0F84 094D 05B0 0062;0061 3099 0F84 094D 05B0 0062;0061 3099 0F84 094D 05B0 0062; +0061 0315 0300 05AE 0F86 0062;00E0 05AE 0F86 0315 0062;0061 05AE 0300 0F86 0315 0062;00E0 05AE 0F86 0315 0062;0061 05AE 0300 0F86 0315 0062; +0061 0F86 0315 0300 05AE 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062;0061 05AE 0F86 0300 0315 0062; +0061 0315 0300 05AE 0F87 0062;00E0 05AE 0F87 0315 0062;0061 05AE 0300 0F87 0315 0062;00E0 05AE 0F87 0315 0062;0061 05AE 0300 0F87 0315 0062; +0061 0F87 0315 0300 05AE 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062;0061 05AE 0F87 0300 0315 0062; +0061 059A 0316 302A 0FC6 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062;0061 302A 0316 0FC6 059A 0062; +0061 0FC6 059A 0316 302A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062;0061 302A 0FC6 0316 059A 0062; +0061 3099 093C 0334 1037 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062;0061 0334 093C 1037 3099 0062; +0061 1037 3099 093C 0334 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062;0061 0334 1037 093C 3099 0062; +0061 05B0 094D 3099 1039 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062;0061 3099 094D 1039 05B0 0062; +0061 1039 05B0 094D 3099 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062;0061 3099 1039 094D 05B0 0062; +0061 05B0 094D 3099 103A 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062;0061 3099 094D 103A 05B0 0062; +0061 103A 05B0 094D 3099 0062;0061 3099 103A 094D 05B0 0062;0061 3099 103A 094D 05B0 0062;0061 3099 103A 094D 05B0 0062;0061 3099 103A 094D 05B0 0062; +0061 059A 0316 302A 108D 0062;0061 302A 0316 108D 059A 0062;0061 302A 0316 108D 059A 0062;0061 302A 0316 108D 059A 0062;0061 302A 0316 108D 059A 0062; +0061 108D 059A 0316 302A 0062;0061 302A 108D 0316 059A 0062;0061 302A 108D 0316 059A 0062;0061 302A 108D 0316 059A 0062;0061 302A 108D 0316 059A 0062; +0061 0315 0300 05AE 135F 0062;00E0 05AE 135F 0315 0062;0061 05AE 0300 135F 0315 0062;00E0 05AE 135F 0315 0062;0061 05AE 0300 135F 0315 0062; +0061 135F 0315 0300 05AE 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062;0061 05AE 135F 0300 0315 0062; +0061 05B0 094D 3099 1714 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062;0061 3099 094D 1714 05B0 0062; +0061 1714 05B0 094D 3099 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062;0061 3099 1714 094D 05B0 0062; +0061 05B0 094D 3099 1734 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062;0061 3099 094D 1734 05B0 0062; +0061 1734 05B0 094D 3099 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 094D 05B0 0062;0061 3099 1734 094D 05B0 0062; +0061 05B0 094D 3099 17D2 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062;0061 3099 094D 17D2 05B0 0062; +0061 17D2 05B0 094D 3099 0062;0061 3099 17D2 094D 05B0 0062;0061 3099 17D2 094D 05B0 0062;0061 3099 17D2 094D 05B0 0062;0061 3099 17D2 094D 05B0 0062; +0061 0315 0300 05AE 17DD 0062;00E0 05AE 17DD 0315 0062;0061 05AE 0300 17DD 0315 0062;00E0 05AE 17DD 0315 0062;0061 05AE 0300 17DD 0315 0062; +0061 17DD 0315 0300 05AE 0062;0061 05AE 17DD 0300 0315 0062;0061 05AE 17DD 0300 0315 0062;0061 05AE 17DD 0300 0315 0062;0061 05AE 17DD 0300 0315 0062; +0061 0300 05AE 1D16D 18A9 0062;00E0 1D16D 05AE 18A9 0062;0061 1D16D 05AE 18A9 0300 0062;00E0 1D16D 05AE 18A9 0062;0061 1D16D 05AE 18A9 0300 0062; +0061 18A9 0300 05AE 1D16D 0062;00E0 1D16D 18A9 05AE 0062;0061 1D16D 18A9 05AE 0300 0062;00E0 1D16D 18A9 05AE 0062;0061 1D16D 18A9 05AE 0300 0062; +0061 302E 059A 0316 1939 0062;0061 0316 059A 1939 302E 0062;0061 0316 059A 1939 302E 0062;0061 0316 059A 1939 302E 0062;0061 0316 059A 1939 302E 0062; +0061 1939 302E 059A 0316 0062;0061 0316 1939 059A 302E 0062;0061 0316 1939 059A 302E 0062;0061 0316 1939 059A 302E 0062;0061 0316 1939 059A 302E 0062; +0061 0315 0300 05AE 193A 0062;00E0 05AE 193A 0315 0062;0061 05AE 0300 193A 0315 0062;00E0 05AE 193A 0315 0062;0061 05AE 0300 193A 0315 0062; +0061 193A 0315 0300 05AE 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062;0061 05AE 193A 0300 0315 0062; +0061 059A 0316 302A 193B 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062;0061 302A 0316 193B 059A 0062; +0061 193B 059A 0316 302A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062;0061 302A 193B 0316 059A 0062; +0061 0315 0300 05AE 1A17 0062;00E0 05AE 1A17 0315 0062;0061 05AE 0300 1A17 0315 0062;00E0 05AE 1A17 0315 0062;0061 05AE 0300 1A17 0315 0062; +0061 1A17 0315 0300 05AE 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062;0061 05AE 1A17 0300 0315 0062; +0061 059A 0316 302A 1A18 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062;0061 302A 0316 1A18 059A 0062; +0061 1A18 059A 0316 302A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062;0061 302A 1A18 0316 059A 0062; +0061 3099 093C 0334 1B34 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062;0061 0334 093C 1B34 3099 0062; +0061 1B34 3099 093C 0334 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062;0061 0334 1B34 093C 3099 0062; +0061 05B0 094D 3099 1B44 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062;0061 3099 094D 1B44 05B0 0062; +0061 1B44 05B0 094D 3099 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062;0061 3099 1B44 094D 05B0 0062; +0061 0315 0300 05AE 1B6B 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 0315 0062;00E0 05AE 1B6B 0315 0062;0061 05AE 0300 1B6B 0315 0062; +0061 1B6B 0315 0300 05AE 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062;0061 05AE 1B6B 0300 0315 0062; +0061 059A 0316 302A 1B6C 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062;0061 302A 0316 1B6C 059A 0062; +0061 1B6C 059A 0316 302A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062;0061 302A 1B6C 0316 059A 0062; +0061 0315 0300 05AE 1B6D 0062;00E0 05AE 1B6D 0315 0062;0061 05AE 0300 1B6D 0315 0062;00E0 05AE 1B6D 0315 0062;0061 05AE 0300 1B6D 0315 0062; +0061 1B6D 0315 0300 05AE 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062;0061 05AE 1B6D 0300 0315 0062; +0061 0315 0300 05AE 1B6E 0062;00E0 05AE 1B6E 0315 0062;0061 05AE 0300 1B6E 0315 0062;00E0 05AE 1B6E 0315 0062;0061 05AE 0300 1B6E 0315 0062; +0061 1B6E 0315 0300 05AE 0062;0061 05AE 1B6E 0300 0315 0062;0061 05AE 1B6E 0300 0315 0062;0061 05AE 1B6E 0300 0315 0062;0061 05AE 1B6E 0300 0315 0062; +0061 0315 0300 05AE 1B6F 0062;00E0 05AE 1B6F 0315 0062;0061 05AE 0300 1B6F 0315 0062;00E0 05AE 1B6F 0315 0062;0061 05AE 0300 1B6F 0315 0062; +0061 1B6F 0315 0300 05AE 0062;0061 05AE 1B6F 0300 0315 0062;0061 05AE 1B6F 0300 0315 0062;0061 05AE 1B6F 0300 0315 0062;0061 05AE 1B6F 0300 0315 0062; +0061 0315 0300 05AE 1B70 0062;00E0 05AE 1B70 0315 0062;0061 05AE 0300 1B70 0315 0062;00E0 05AE 1B70 0315 0062;0061 05AE 0300 1B70 0315 0062; +0061 1B70 0315 0300 05AE 0062;0061 05AE 1B70 0300 0315 0062;0061 05AE 1B70 0300 0315 0062;0061 05AE 1B70 0300 0315 0062;0061 05AE 1B70 0300 0315 0062; +0061 0315 0300 05AE 1B71 0062;00E0 05AE 1B71 0315 0062;0061 05AE 0300 1B71 0315 0062;00E0 05AE 1B71 0315 0062;0061 05AE 0300 1B71 0315 0062; +0061 1B71 0315 0300 05AE 0062;0061 05AE 1B71 0300 0315 0062;0061 05AE 1B71 0300 0315 0062;0061 05AE 1B71 0300 0315 0062;0061 05AE 1B71 0300 0315 0062; +0061 0315 0300 05AE 1B72 0062;00E0 05AE 1B72 0315 0062;0061 05AE 0300 1B72 0315 0062;00E0 05AE 1B72 0315 0062;0061 05AE 0300 1B72 0315 0062; +0061 1B72 0315 0300 05AE 0062;0061 05AE 1B72 0300 0315 0062;0061 05AE 1B72 0300 0315 0062;0061 05AE 1B72 0300 0315 0062;0061 05AE 1B72 0300 0315 0062; +0061 0315 0300 05AE 1B73 0062;00E0 05AE 1B73 0315 0062;0061 05AE 0300 1B73 0315 0062;00E0 05AE 1B73 0315 0062;0061 05AE 0300 1B73 0315 0062; +0061 1B73 0315 0300 05AE 0062;0061 05AE 1B73 0300 0315 0062;0061 05AE 1B73 0300 0315 0062;0061 05AE 1B73 0300 0315 0062;0061 05AE 1B73 0300 0315 0062; +0061 05B0 094D 3099 1BAA 0062;0061 3099 094D 1BAA 05B0 0062;0061 3099 094D 1BAA 05B0 0062;0061 3099 094D 1BAA 05B0 0062;0061 3099 094D 1BAA 05B0 0062; +0061 1BAA 05B0 094D 3099 0062;0061 3099 1BAA 094D 05B0 0062;0061 3099 1BAA 094D 05B0 0062;0061 3099 1BAA 094D 05B0 0062;0061 3099 1BAA 094D 05B0 0062; +0061 3099 093C 0334 1C37 0062;0061 0334 093C 1C37 3099 0062;0061 0334 093C 1C37 3099 0062;0061 0334 093C 1C37 3099 0062;0061 0334 093C 1C37 3099 0062; +0061 1C37 3099 093C 0334 0062;0061 0334 1C37 093C 3099 0062;0061 0334 1C37 093C 3099 0062;0061 0334 1C37 093C 3099 0062;0061 0334 1C37 093C 3099 0062; +0061 0315 0300 05AE 1DC0 0062;00E0 05AE 1DC0 0315 0062;0061 05AE 0300 1DC0 0315 0062;00E0 05AE 1DC0 0315 0062;0061 05AE 0300 1DC0 0315 0062; +0061 1DC0 0315 0300 05AE 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062;0061 05AE 1DC0 0300 0315 0062; +0061 0315 0300 05AE 1DC1 0062;00E0 05AE 1DC1 0315 0062;0061 05AE 0300 1DC1 0315 0062;00E0 05AE 1DC1 0315 0062;0061 05AE 0300 1DC1 0315 0062; +0061 1DC1 0315 0300 05AE 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062;0061 05AE 1DC1 0300 0315 0062; +0061 059A 0316 302A 1DC2 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062;0061 302A 0316 1DC2 059A 0062; +0061 1DC2 059A 0316 302A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062;0061 302A 1DC2 0316 059A 0062; +0061 0315 0300 05AE 1DC3 0062;00E0 05AE 1DC3 0315 0062;0061 05AE 0300 1DC3 0315 0062;00E0 05AE 1DC3 0315 0062;0061 05AE 0300 1DC3 0315 0062; +0061 1DC3 0315 0300 05AE 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062;0061 05AE 1DC3 0300 0315 0062; +0061 0315 0300 05AE 1DC4 0062;00E0 05AE 1DC4 0315 0062;0061 05AE 0300 1DC4 0315 0062;00E0 05AE 1DC4 0315 0062;0061 05AE 0300 1DC4 0315 0062; +0061 1DC4 0315 0300 05AE 0062;0061 05AE 1DC4 0300 0315 0062;0061 05AE 1DC4 0300 0315 0062;0061 05AE 1DC4 0300 0315 0062;0061 05AE 1DC4 0300 0315 0062; +0061 0315 0300 05AE 1DC5 0062;00E0 05AE 1DC5 0315 0062;0061 05AE 0300 1DC5 0315 0062;00E0 05AE 1DC5 0315 0062;0061 05AE 0300 1DC5 0315 0062; +0061 1DC5 0315 0300 05AE 0062;0061 05AE 1DC5 0300 0315 0062;0061 05AE 1DC5 0300 0315 0062;0061 05AE 1DC5 0300 0315 0062;0061 05AE 1DC5 0300 0315 0062; +0061 0315 0300 05AE 1DC6 0062;00E0 05AE 1DC6 0315 0062;0061 05AE 0300 1DC6 0315 0062;00E0 05AE 1DC6 0315 0062;0061 05AE 0300 1DC6 0315 0062; +0061 1DC6 0315 0300 05AE 0062;0061 05AE 1DC6 0300 0315 0062;0061 05AE 1DC6 0300 0315 0062;0061 05AE 1DC6 0300 0315 0062;0061 05AE 1DC6 0300 0315 0062; +0061 0315 0300 05AE 1DC7 0062;00E0 05AE 1DC7 0315 0062;0061 05AE 0300 1DC7 0315 0062;00E0 05AE 1DC7 0315 0062;0061 05AE 0300 1DC7 0315 0062; +0061 1DC7 0315 0300 05AE 0062;0061 05AE 1DC7 0300 0315 0062;0061 05AE 1DC7 0300 0315 0062;0061 05AE 1DC7 0300 0315 0062;0061 05AE 1DC7 0300 0315 0062; +0061 0315 0300 05AE 1DC8 0062;00E0 05AE 1DC8 0315 0062;0061 05AE 0300 1DC8 0315 0062;00E0 05AE 1DC8 0315 0062;0061 05AE 0300 1DC8 0315 0062; +0061 1DC8 0315 0300 05AE 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062;0061 05AE 1DC8 0300 0315 0062; +0061 0315 0300 05AE 1DC9 0062;00E0 05AE 1DC9 0315 0062;0061 05AE 0300 1DC9 0315 0062;00E0 05AE 1DC9 0315 0062;0061 05AE 0300 1DC9 0315 0062; +0061 1DC9 0315 0300 05AE 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062;0061 05AE 1DC9 0300 0315 0062; +0061 059A 0316 302A 1DCA 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062;0061 302A 0316 1DCA 059A 0062; +0061 1DCA 059A 0316 302A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062;0061 302A 1DCA 0316 059A 0062; +0061 0315 0300 05AE 1DCB 0062;00E0 05AE 1DCB 0315 0062;0061 05AE 0300 1DCB 0315 0062;00E0 05AE 1DCB 0315 0062;0061 05AE 0300 1DCB 0315 0062; +0061 1DCB 0315 0300 05AE 0062;0061 05AE 1DCB 0300 0315 0062;0061 05AE 1DCB 0300 0315 0062;0061 05AE 1DCB 0300 0315 0062;0061 05AE 1DCB 0300 0315 0062; +0061 0315 0300 05AE 1DCC 0062;00E0 05AE 1DCC 0315 0062;0061 05AE 0300 1DCC 0315 0062;00E0 05AE 1DCC 0315 0062;0061 05AE 0300 1DCC 0315 0062; +0061 1DCC 0315 0300 05AE 0062;0061 05AE 1DCC 0300 0315 0062;0061 05AE 1DCC 0300 0315 0062;0061 05AE 1DCC 0300 0315 0062;0061 05AE 1DCC 0300 0315 0062; +0061 0345 035D 035C 1DCD 0062;0061 035C 035D 1DCD 0345 0062;0061 035C 035D 1DCD 0345 0062;0061 035C 035D 1DCD 0345 0062;0061 035C 035D 1DCD 0345 0062; +0061 1DCD 0345 035D 035C 0062;0061 035C 1DCD 035D 0345 0062;0061 035C 1DCD 035D 0345 0062;0061 035C 1DCD 035D 0345 0062;0061 035C 1DCD 035D 0345 0062; +0061 031B 1DCE 0321 1DCE 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062; +0061 1DCE 031B 1DCE 0321 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062;0061 0321 1DCE 1DCE 031B 0062; +0061 059A 0316 302A 1DCF 0062;0061 302A 0316 1DCF 059A 0062;0061 302A 0316 1DCF 059A 0062;0061 302A 0316 1DCF 059A 0062;0061 302A 0316 1DCF 059A 0062; +0061 1DCF 059A 0316 302A 0062;0061 302A 1DCF 0316 059A 0062;0061 302A 1DCF 0316 059A 0062;0061 302A 1DCF 0316 059A 0062;0061 302A 1DCF 0316 059A 0062; +0061 1DCE 0321 0F74 1DD0 0062;0061 0F74 0321 1DD0 1DCE 0062;0061 0F74 0321 1DD0 1DCE 0062;0061 0F74 0321 1DD0 1DCE 0062;0061 0F74 0321 1DD0 1DCE 0062; +0061 1DD0 1DCE 0321 0F74 0062;0061 0F74 1DD0 0321 1DCE 0062;0061 0F74 1DD0 0321 1DCE 0062;0061 0F74 1DD0 0321 1DCE 0062;0061 0F74 1DD0 0321 1DCE 0062; +0061 0315 0300 05AE 1DD1 0062;00E0 05AE 1DD1 0315 0062;0061 05AE 0300 1DD1 0315 0062;00E0 05AE 1DD1 0315 0062;0061 05AE 0300 1DD1 0315 0062; +0061 1DD1 0315 0300 05AE 0062;0061 05AE 1DD1 0300 0315 0062;0061 05AE 1DD1 0300 0315 0062;0061 05AE 1DD1 0300 0315 0062;0061 05AE 1DD1 0300 0315 0062; +0061 0315 0300 05AE 1DD2 0062;00E0 05AE 1DD2 0315 0062;0061 05AE 0300 1DD2 0315 0062;00E0 05AE 1DD2 0315 0062;0061 05AE 0300 1DD2 0315 0062; +0061 1DD2 0315 0300 05AE 0062;0061 05AE 1DD2 0300 0315 0062;0061 05AE 1DD2 0300 0315 0062;0061 05AE 1DD2 0300 0315 0062;0061 05AE 1DD2 0300 0315 0062; +0061 0315 0300 05AE 1DD3 0062;00E0 05AE 1DD3 0315 0062;0061 05AE 0300 1DD3 0315 0062;00E0 05AE 1DD3 0315 0062;0061 05AE 0300 1DD3 0315 0062; +0061 1DD3 0315 0300 05AE 0062;0061 05AE 1DD3 0300 0315 0062;0061 05AE 1DD3 0300 0315 0062;0061 05AE 1DD3 0300 0315 0062;0061 05AE 1DD3 0300 0315 0062; +0061 0315 0300 05AE 1DD4 0062;00E0 05AE 1DD4 0315 0062;0061 05AE 0300 1DD4 0315 0062;00E0 05AE 1DD4 0315 0062;0061 05AE 0300 1DD4 0315 0062; +0061 1DD4 0315 0300 05AE 0062;0061 05AE 1DD4 0300 0315 0062;0061 05AE 1DD4 0300 0315 0062;0061 05AE 1DD4 0300 0315 0062;0061 05AE 1DD4 0300 0315 0062; +0061 0315 0300 05AE 1DD5 0062;00E0 05AE 1DD5 0315 0062;0061 05AE 0300 1DD5 0315 0062;00E0 05AE 1DD5 0315 0062;0061 05AE 0300 1DD5 0315 0062; +0061 1DD5 0315 0300 05AE 0062;0061 05AE 1DD5 0300 0315 0062;0061 05AE 1DD5 0300 0315 0062;0061 05AE 1DD5 0300 0315 0062;0061 05AE 1DD5 0300 0315 0062; +0061 0315 0300 05AE 1DD6 0062;00E0 05AE 1DD6 0315 0062;0061 05AE 0300 1DD6 0315 0062;00E0 05AE 1DD6 0315 0062;0061 05AE 0300 1DD6 0315 0062; +0061 1DD6 0315 0300 05AE 0062;0061 05AE 1DD6 0300 0315 0062;0061 05AE 1DD6 0300 0315 0062;0061 05AE 1DD6 0300 0315 0062;0061 05AE 1DD6 0300 0315 0062; +0061 0315 0300 05AE 1DD7 0062;00E0 05AE 1DD7 0315 0062;0061 05AE 0300 1DD7 0315 0062;00E0 05AE 1DD7 0315 0062;0061 05AE 0300 1DD7 0315 0062; +0061 1DD7 0315 0300 05AE 0062;0061 05AE 1DD7 0300 0315 0062;0061 05AE 1DD7 0300 0315 0062;0061 05AE 1DD7 0300 0315 0062;0061 05AE 1DD7 0300 0315 0062; +0061 0315 0300 05AE 1DD8 0062;00E0 05AE 1DD8 0315 0062;0061 05AE 0300 1DD8 0315 0062;00E0 05AE 1DD8 0315 0062;0061 05AE 0300 1DD8 0315 0062; +0061 1DD8 0315 0300 05AE 0062;0061 05AE 1DD8 0300 0315 0062;0061 05AE 1DD8 0300 0315 0062;0061 05AE 1DD8 0300 0315 0062;0061 05AE 1DD8 0300 0315 0062; +0061 0315 0300 05AE 1DD9 0062;00E0 05AE 1DD9 0315 0062;0061 05AE 0300 1DD9 0315 0062;00E0 05AE 1DD9 0315 0062;0061 05AE 0300 1DD9 0315 0062; +0061 1DD9 0315 0300 05AE 0062;0061 05AE 1DD9 0300 0315 0062;0061 05AE 1DD9 0300 0315 0062;0061 05AE 1DD9 0300 0315 0062;0061 05AE 1DD9 0300 0315 0062; +0061 0315 0300 05AE 1DDA 0062;00E0 05AE 1DDA 0315 0062;0061 05AE 0300 1DDA 0315 0062;00E0 05AE 1DDA 0315 0062;0061 05AE 0300 1DDA 0315 0062; +0061 1DDA 0315 0300 05AE 0062;0061 05AE 1DDA 0300 0315 0062;0061 05AE 1DDA 0300 0315 0062;0061 05AE 1DDA 0300 0315 0062;0061 05AE 1DDA 0300 0315 0062; +0061 0315 0300 05AE 1DDB 0062;00E0 05AE 1DDB 0315 0062;0061 05AE 0300 1DDB 0315 0062;00E0 05AE 1DDB 0315 0062;0061 05AE 0300 1DDB 0315 0062; +0061 1DDB 0315 0300 05AE 0062;0061 05AE 1DDB 0300 0315 0062;0061 05AE 1DDB 0300 0315 0062;0061 05AE 1DDB 0300 0315 0062;0061 05AE 1DDB 0300 0315 0062; +0061 0315 0300 05AE 1DDC 0062;00E0 05AE 1DDC 0315 0062;0061 05AE 0300 1DDC 0315 0062;00E0 05AE 1DDC 0315 0062;0061 05AE 0300 1DDC 0315 0062; +0061 1DDC 0315 0300 05AE 0062;0061 05AE 1DDC 0300 0315 0062;0061 05AE 1DDC 0300 0315 0062;0061 05AE 1DDC 0300 0315 0062;0061 05AE 1DDC 0300 0315 0062; +0061 0315 0300 05AE 1DDD 0062;00E0 05AE 1DDD 0315 0062;0061 05AE 0300 1DDD 0315 0062;00E0 05AE 1DDD 0315 0062;0061 05AE 0300 1DDD 0315 0062; +0061 1DDD 0315 0300 05AE 0062;0061 05AE 1DDD 0300 0315 0062;0061 05AE 1DDD 0300 0315 0062;0061 05AE 1DDD 0300 0315 0062;0061 05AE 1DDD 0300 0315 0062; +0061 0315 0300 05AE 1DDE 0062;00E0 05AE 1DDE 0315 0062;0061 05AE 0300 1DDE 0315 0062;00E0 05AE 1DDE 0315 0062;0061 05AE 0300 1DDE 0315 0062; +0061 1DDE 0315 0300 05AE 0062;0061 05AE 1DDE 0300 0315 0062;0061 05AE 1DDE 0300 0315 0062;0061 05AE 1DDE 0300 0315 0062;0061 05AE 1DDE 0300 0315 0062; +0061 0315 0300 05AE 1DDF 0062;00E0 05AE 1DDF 0315 0062;0061 05AE 0300 1DDF 0315 0062;00E0 05AE 1DDF 0315 0062;0061 05AE 0300 1DDF 0315 0062; +0061 1DDF 0315 0300 05AE 0062;0061 05AE 1DDF 0300 0315 0062;0061 05AE 1DDF 0300 0315 0062;0061 05AE 1DDF 0300 0315 0062;0061 05AE 1DDF 0300 0315 0062; +0061 0315 0300 05AE 1DE0 0062;00E0 05AE 1DE0 0315 0062;0061 05AE 0300 1DE0 0315 0062;00E0 05AE 1DE0 0315 0062;0061 05AE 0300 1DE0 0315 0062; +0061 1DE0 0315 0300 05AE 0062;0061 05AE 1DE0 0300 0315 0062;0061 05AE 1DE0 0300 0315 0062;0061 05AE 1DE0 0300 0315 0062;0061 05AE 1DE0 0300 0315 0062; +0061 0315 0300 05AE 1DE1 0062;00E0 05AE 1DE1 0315 0062;0061 05AE 0300 1DE1 0315 0062;00E0 05AE 1DE1 0315 0062;0061 05AE 0300 1DE1 0315 0062; +0061 1DE1 0315 0300 05AE 0062;0061 05AE 1DE1 0300 0315 0062;0061 05AE 1DE1 0300 0315 0062;0061 05AE 1DE1 0300 0315 0062;0061 05AE 1DE1 0300 0315 0062; +0061 0315 0300 05AE 1DE2 0062;00E0 05AE 1DE2 0315 0062;0061 05AE 0300 1DE2 0315 0062;00E0 05AE 1DE2 0315 0062;0061 05AE 0300 1DE2 0315 0062; +0061 1DE2 0315 0300 05AE 0062;0061 05AE 1DE2 0300 0315 0062;0061 05AE 1DE2 0300 0315 0062;0061 05AE 1DE2 0300 0315 0062;0061 05AE 1DE2 0300 0315 0062; +0061 0315 0300 05AE 1DE3 0062;00E0 05AE 1DE3 0315 0062;0061 05AE 0300 1DE3 0315 0062;00E0 05AE 1DE3 0315 0062;0061 05AE 0300 1DE3 0315 0062; +0061 1DE3 0315 0300 05AE 0062;0061 05AE 1DE3 0300 0315 0062;0061 05AE 1DE3 0300 0315 0062;0061 05AE 1DE3 0300 0315 0062;0061 05AE 1DE3 0300 0315 0062; +0061 0315 0300 05AE 1DE4 0062;00E0 05AE 1DE4 0315 0062;0061 05AE 0300 1DE4 0315 0062;00E0 05AE 1DE4 0315 0062;0061 05AE 0300 1DE4 0315 0062; +0061 1DE4 0315 0300 05AE 0062;0061 05AE 1DE4 0300 0315 0062;0061 05AE 1DE4 0300 0315 0062;0061 05AE 1DE4 0300 0315 0062;0061 05AE 1DE4 0300 0315 0062; +0061 0315 0300 05AE 1DE5 0062;00E0 05AE 1DE5 0315 0062;0061 05AE 0300 1DE5 0315 0062;00E0 05AE 1DE5 0315 0062;0061 05AE 0300 1DE5 0315 0062; +0061 1DE5 0315 0300 05AE 0062;0061 05AE 1DE5 0300 0315 0062;0061 05AE 1DE5 0300 0315 0062;0061 05AE 1DE5 0300 0315 0062;0061 05AE 1DE5 0300 0315 0062; +0061 0315 0300 05AE 1DE6 0062;00E0 05AE 1DE6 0315 0062;0061 05AE 0300 1DE6 0315 0062;00E0 05AE 1DE6 0315 0062;0061 05AE 0300 1DE6 0315 0062; +0061 1DE6 0315 0300 05AE 0062;0061 05AE 1DE6 0300 0315 0062;0061 05AE 1DE6 0300 0315 0062;0061 05AE 1DE6 0300 0315 0062;0061 05AE 1DE6 0300 0315 0062; +0061 0315 0300 05AE 1DFE 0062;00E0 05AE 1DFE 0315 0062;0061 05AE 0300 1DFE 0315 0062;00E0 05AE 1DFE 0315 0062;0061 05AE 0300 1DFE 0315 0062; +0061 1DFE 0315 0300 05AE 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062;0061 05AE 1DFE 0300 0315 0062; +0061 059A 0316 302A 1DFF 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062;0061 302A 0316 1DFF 059A 0062; +0061 1DFF 059A 0316 302A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062;0061 302A 1DFF 0316 059A 0062; +0061 0315 0300 05AE 20D0 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 0315 0062;00E0 05AE 20D0 0315 0062;0061 05AE 0300 20D0 0315 0062; +0061 20D0 0315 0300 05AE 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062;0061 05AE 20D0 0300 0315 0062; +0061 0315 0300 05AE 20D1 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062;00E0 05AE 20D1 0315 0062;0061 05AE 0300 20D1 0315 0062; +0061 20D1 0315 0300 05AE 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062;0061 05AE 20D1 0300 0315 0062; +0061 093C 0334 20D2 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062;0061 0334 20D2 093C 0062; +0061 20D2 093C 0334 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062;0061 20D2 0334 093C 0062; +0061 093C 0334 20D3 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062;0061 0334 20D3 093C 0062; +0061 20D3 093C 0334 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062;0061 20D3 0334 093C 0062; +0061 0315 0300 05AE 20D4 0062;00E0 05AE 20D4 0315 0062;0061 05AE 0300 20D4 0315 0062;00E0 05AE 20D4 0315 0062;0061 05AE 0300 20D4 0315 0062; +0061 20D4 0315 0300 05AE 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062;0061 05AE 20D4 0300 0315 0062; +0061 0315 0300 05AE 20D5 0062;00E0 05AE 20D5 0315 0062;0061 05AE 0300 20D5 0315 0062;00E0 05AE 20D5 0315 0062;0061 05AE 0300 20D5 0315 0062; +0061 20D5 0315 0300 05AE 0062;0061 05AE 20D5 0300 0315 0062;0061 05AE 20D5 0300 0315 0062;0061 05AE 20D5 0300 0315 0062;0061 05AE 20D5 0300 0315 0062; +0061 0315 0300 05AE 20D6 0062;00E0 05AE 20D6 0315 0062;0061 05AE 0300 20D6 0315 0062;00E0 05AE 20D6 0315 0062;0061 05AE 0300 20D6 0315 0062; +0061 20D6 0315 0300 05AE 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062;0061 05AE 20D6 0300 0315 0062; +0061 0315 0300 05AE 20D7 0062;00E0 05AE 20D7 0315 0062;0061 05AE 0300 20D7 0315 0062;00E0 05AE 20D7 0315 0062;0061 05AE 0300 20D7 0315 0062; +0061 20D7 0315 0300 05AE 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062;0061 05AE 20D7 0300 0315 0062; +0061 093C 0334 20D8 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062;0061 0334 20D8 093C 0062; +0061 20D8 093C 0334 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062;0061 20D8 0334 093C 0062; +0061 093C 0334 20D9 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062;0061 0334 20D9 093C 0062; +0061 20D9 093C 0334 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062;0061 20D9 0334 093C 0062; +0061 093C 0334 20DA 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062;0061 0334 20DA 093C 0062; +0061 20DA 093C 0334 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062;0061 20DA 0334 093C 0062; +0061 0315 0300 05AE 20DB 0062;00E0 05AE 20DB 0315 0062;0061 05AE 0300 20DB 0315 0062;00E0 05AE 20DB 0315 0062;0061 05AE 0300 20DB 0315 0062; +0061 20DB 0315 0300 05AE 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062;0061 05AE 20DB 0300 0315 0062; +0061 0315 0300 05AE 20DC 0062;00E0 05AE 20DC 0315 0062;0061 05AE 0300 20DC 0315 0062;00E0 05AE 20DC 0315 0062;0061 05AE 0300 20DC 0315 0062; +0061 20DC 0315 0300 05AE 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062;0061 05AE 20DC 0300 0315 0062; +0061 0315 0300 05AE 20E1 0062;00E0 05AE 20E1 0315 0062;0061 05AE 0300 20E1 0315 0062;00E0 05AE 20E1 0315 0062;0061 05AE 0300 20E1 0315 0062; +0061 20E1 0315 0300 05AE 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062;0061 05AE 20E1 0300 0315 0062; +0061 093C 0334 20E5 0062;0061 0334 20E5 093C 0062;0061 0334 20E5 093C 0062;0061 0334 20E5 093C 0062;0061 0334 20E5 093C 0062; +0061 20E5 093C 0334 0062;0061 20E5 0334 093C 0062;0061 20E5 0334 093C 0062;0061 20E5 0334 093C 0062;0061 20E5 0334 093C 0062; +0061 093C 0334 20E6 0062;0061 0334 20E6 093C 0062;0061 0334 20E6 093C 0062;0061 0334 20E6 093C 0062;0061 0334 20E6 093C 0062; +0061 20E6 093C 0334 0062;0061 20E6 0334 093C 0062;0061 20E6 0334 093C 0062;0061 20E6 0334 093C 0062;0061 20E6 0334 093C 0062; +0061 0315 0300 05AE 20E7 0062;00E0 05AE 20E7 0315 0062;0061 05AE 0300 20E7 0315 0062;00E0 05AE 20E7 0315 0062;0061 05AE 0300 20E7 0315 0062; +0061 20E7 0315 0300 05AE 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062;0061 05AE 20E7 0300 0315 0062; +0061 059A 0316 302A 20E8 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062;0061 302A 0316 20E8 059A 0062; +0061 20E8 059A 0316 302A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062;0061 302A 20E8 0316 059A 0062; +0061 0315 0300 05AE 20E9 0062;00E0 05AE 20E9 0315 0062;0061 05AE 0300 20E9 0315 0062;00E0 05AE 20E9 0315 0062;0061 05AE 0300 20E9 0315 0062; +0061 20E9 0315 0300 05AE 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062;0061 05AE 20E9 0300 0315 0062; +0061 093C 0334 20EA 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062;0061 0334 20EA 093C 0062; +0061 20EA 093C 0334 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062;0061 20EA 0334 093C 0062; +0061 093C 0334 20EB 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062;0061 0334 20EB 093C 0062; +0061 20EB 093C 0334 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062;0061 20EB 0334 093C 0062; +0061 059A 0316 302A 20EC 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062;0061 302A 0316 20EC 059A 0062; +0061 20EC 059A 0316 302A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062;0061 302A 20EC 0316 059A 0062; +0061 059A 0316 302A 20ED 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062;0061 302A 0316 20ED 059A 0062; +0061 20ED 059A 0316 302A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062;0061 302A 20ED 0316 059A 0062; +0061 059A 0316 302A 20EE 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062;0061 302A 0316 20EE 059A 0062; +0061 20EE 059A 0316 302A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062;0061 302A 20EE 0316 059A 0062; +0061 059A 0316 302A 20EF 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062;0061 302A 0316 20EF 059A 0062; +0061 20EF 059A 0316 302A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062;0061 302A 20EF 0316 059A 0062; +0061 0315 0300 05AE 20F0 0062;00E0 05AE 20F0 0315 0062;0061 05AE 0300 20F0 0315 0062;00E0 05AE 20F0 0315 0062;0061 05AE 0300 20F0 0315 0062; +0061 20F0 0315 0300 05AE 0062;0061 05AE 20F0 0300 0315 0062;0061 05AE 20F0 0300 0315 0062;0061 05AE 20F0 0300 0315 0062;0061 05AE 20F0 0300 0315 0062; +0061 0315 0300 05AE 2DE0 0062;00E0 05AE 2DE0 0315 0062;0061 05AE 0300 2DE0 0315 0062;00E0 05AE 2DE0 0315 0062;0061 05AE 0300 2DE0 0315 0062; +0061 2DE0 0315 0300 05AE 0062;0061 05AE 2DE0 0300 0315 0062;0061 05AE 2DE0 0300 0315 0062;0061 05AE 2DE0 0300 0315 0062;0061 05AE 2DE0 0300 0315 0062; +0061 0315 0300 05AE 2DE1 0062;00E0 05AE 2DE1 0315 0062;0061 05AE 0300 2DE1 0315 0062;00E0 05AE 2DE1 0315 0062;0061 05AE 0300 2DE1 0315 0062; +0061 2DE1 0315 0300 05AE 0062;0061 05AE 2DE1 0300 0315 0062;0061 05AE 2DE1 0300 0315 0062;0061 05AE 2DE1 0300 0315 0062;0061 05AE 2DE1 0300 0315 0062; +0061 0315 0300 05AE 2DE2 0062;00E0 05AE 2DE2 0315 0062;0061 05AE 0300 2DE2 0315 0062;00E0 05AE 2DE2 0315 0062;0061 05AE 0300 2DE2 0315 0062; +0061 2DE2 0315 0300 05AE 0062;0061 05AE 2DE2 0300 0315 0062;0061 05AE 2DE2 0300 0315 0062;0061 05AE 2DE2 0300 0315 0062;0061 05AE 2DE2 0300 0315 0062; +0061 0315 0300 05AE 2DE3 0062;00E0 05AE 2DE3 0315 0062;0061 05AE 0300 2DE3 0315 0062;00E0 05AE 2DE3 0315 0062;0061 05AE 0300 2DE3 0315 0062; +0061 2DE3 0315 0300 05AE 0062;0061 05AE 2DE3 0300 0315 0062;0061 05AE 2DE3 0300 0315 0062;0061 05AE 2DE3 0300 0315 0062;0061 05AE 2DE3 0300 0315 0062; +0061 0315 0300 05AE 2DE4 0062;00E0 05AE 2DE4 0315 0062;0061 05AE 0300 2DE4 0315 0062;00E0 05AE 2DE4 0315 0062;0061 05AE 0300 2DE4 0315 0062; +0061 2DE4 0315 0300 05AE 0062;0061 05AE 2DE4 0300 0315 0062;0061 05AE 2DE4 0300 0315 0062;0061 05AE 2DE4 0300 0315 0062;0061 05AE 2DE4 0300 0315 0062; +0061 0315 0300 05AE 2DE5 0062;00E0 05AE 2DE5 0315 0062;0061 05AE 0300 2DE5 0315 0062;00E0 05AE 2DE5 0315 0062;0061 05AE 0300 2DE5 0315 0062; +0061 2DE5 0315 0300 05AE 0062;0061 05AE 2DE5 0300 0315 0062;0061 05AE 2DE5 0300 0315 0062;0061 05AE 2DE5 0300 0315 0062;0061 05AE 2DE5 0300 0315 0062; +0061 0315 0300 05AE 2DE6 0062;00E0 05AE 2DE6 0315 0062;0061 05AE 0300 2DE6 0315 0062;00E0 05AE 2DE6 0315 0062;0061 05AE 0300 2DE6 0315 0062; +0061 2DE6 0315 0300 05AE 0062;0061 05AE 2DE6 0300 0315 0062;0061 05AE 2DE6 0300 0315 0062;0061 05AE 2DE6 0300 0315 0062;0061 05AE 2DE6 0300 0315 0062; +0061 0315 0300 05AE 2DE7 0062;00E0 05AE 2DE7 0315 0062;0061 05AE 0300 2DE7 0315 0062;00E0 05AE 2DE7 0315 0062;0061 05AE 0300 2DE7 0315 0062; +0061 2DE7 0315 0300 05AE 0062;0061 05AE 2DE7 0300 0315 0062;0061 05AE 2DE7 0300 0315 0062;0061 05AE 2DE7 0300 0315 0062;0061 05AE 2DE7 0300 0315 0062; +0061 0315 0300 05AE 2DE8 0062;00E0 05AE 2DE8 0315 0062;0061 05AE 0300 2DE8 0315 0062;00E0 05AE 2DE8 0315 0062;0061 05AE 0300 2DE8 0315 0062; +0061 2DE8 0315 0300 05AE 0062;0061 05AE 2DE8 0300 0315 0062;0061 05AE 2DE8 0300 0315 0062;0061 05AE 2DE8 0300 0315 0062;0061 05AE 2DE8 0300 0315 0062; +0061 0315 0300 05AE 2DE9 0062;00E0 05AE 2DE9 0315 0062;0061 05AE 0300 2DE9 0315 0062;00E0 05AE 2DE9 0315 0062;0061 05AE 0300 2DE9 0315 0062; +0061 2DE9 0315 0300 05AE 0062;0061 05AE 2DE9 0300 0315 0062;0061 05AE 2DE9 0300 0315 0062;0061 05AE 2DE9 0300 0315 0062;0061 05AE 2DE9 0300 0315 0062; +0061 0315 0300 05AE 2DEA 0062;00E0 05AE 2DEA 0315 0062;0061 05AE 0300 2DEA 0315 0062;00E0 05AE 2DEA 0315 0062;0061 05AE 0300 2DEA 0315 0062; +0061 2DEA 0315 0300 05AE 0062;0061 05AE 2DEA 0300 0315 0062;0061 05AE 2DEA 0300 0315 0062;0061 05AE 2DEA 0300 0315 0062;0061 05AE 2DEA 0300 0315 0062; +0061 0315 0300 05AE 2DEB 0062;00E0 05AE 2DEB 0315 0062;0061 05AE 0300 2DEB 0315 0062;00E0 05AE 2DEB 0315 0062;0061 05AE 0300 2DEB 0315 0062; +0061 2DEB 0315 0300 05AE 0062;0061 05AE 2DEB 0300 0315 0062;0061 05AE 2DEB 0300 0315 0062;0061 05AE 2DEB 0300 0315 0062;0061 05AE 2DEB 0300 0315 0062; +0061 0315 0300 05AE 2DEC 0062;00E0 05AE 2DEC 0315 0062;0061 05AE 0300 2DEC 0315 0062;00E0 05AE 2DEC 0315 0062;0061 05AE 0300 2DEC 0315 0062; +0061 2DEC 0315 0300 05AE 0062;0061 05AE 2DEC 0300 0315 0062;0061 05AE 2DEC 0300 0315 0062;0061 05AE 2DEC 0300 0315 0062;0061 05AE 2DEC 0300 0315 0062; +0061 0315 0300 05AE 2DED 0062;00E0 05AE 2DED 0315 0062;0061 05AE 0300 2DED 0315 0062;00E0 05AE 2DED 0315 0062;0061 05AE 0300 2DED 0315 0062; +0061 2DED 0315 0300 05AE 0062;0061 05AE 2DED 0300 0315 0062;0061 05AE 2DED 0300 0315 0062;0061 05AE 2DED 0300 0315 0062;0061 05AE 2DED 0300 0315 0062; +0061 0315 0300 05AE 2DEE 0062;00E0 05AE 2DEE 0315 0062;0061 05AE 0300 2DEE 0315 0062;00E0 05AE 2DEE 0315 0062;0061 05AE 0300 2DEE 0315 0062; +0061 2DEE 0315 0300 05AE 0062;0061 05AE 2DEE 0300 0315 0062;0061 05AE 2DEE 0300 0315 0062;0061 05AE 2DEE 0300 0315 0062;0061 05AE 2DEE 0300 0315 0062; +0061 0315 0300 05AE 2DEF 0062;00E0 05AE 2DEF 0315 0062;0061 05AE 0300 2DEF 0315 0062;00E0 05AE 2DEF 0315 0062;0061 05AE 0300 2DEF 0315 0062; +0061 2DEF 0315 0300 05AE 0062;0061 05AE 2DEF 0300 0315 0062;0061 05AE 2DEF 0300 0315 0062;0061 05AE 2DEF 0300 0315 0062;0061 05AE 2DEF 0300 0315 0062; +0061 0315 0300 05AE 2DF0 0062;00E0 05AE 2DF0 0315 0062;0061 05AE 0300 2DF0 0315 0062;00E0 05AE 2DF0 0315 0062;0061 05AE 0300 2DF0 0315 0062; +0061 2DF0 0315 0300 05AE 0062;0061 05AE 2DF0 0300 0315 0062;0061 05AE 2DF0 0300 0315 0062;0061 05AE 2DF0 0300 0315 0062;0061 05AE 2DF0 0300 0315 0062; +0061 0315 0300 05AE 2DF1 0062;00E0 05AE 2DF1 0315 0062;0061 05AE 0300 2DF1 0315 0062;00E0 05AE 2DF1 0315 0062;0061 05AE 0300 2DF1 0315 0062; +0061 2DF1 0315 0300 05AE 0062;0061 05AE 2DF1 0300 0315 0062;0061 05AE 2DF1 0300 0315 0062;0061 05AE 2DF1 0300 0315 0062;0061 05AE 2DF1 0300 0315 0062; +0061 0315 0300 05AE 2DF2 0062;00E0 05AE 2DF2 0315 0062;0061 05AE 0300 2DF2 0315 0062;00E0 05AE 2DF2 0315 0062;0061 05AE 0300 2DF2 0315 0062; +0061 2DF2 0315 0300 05AE 0062;0061 05AE 2DF2 0300 0315 0062;0061 05AE 2DF2 0300 0315 0062;0061 05AE 2DF2 0300 0315 0062;0061 05AE 2DF2 0300 0315 0062; +0061 0315 0300 05AE 2DF3 0062;00E0 05AE 2DF3 0315 0062;0061 05AE 0300 2DF3 0315 0062;00E0 05AE 2DF3 0315 0062;0061 05AE 0300 2DF3 0315 0062; +0061 2DF3 0315 0300 05AE 0062;0061 05AE 2DF3 0300 0315 0062;0061 05AE 2DF3 0300 0315 0062;0061 05AE 2DF3 0300 0315 0062;0061 05AE 2DF3 0300 0315 0062; +0061 0315 0300 05AE 2DF4 0062;00E0 05AE 2DF4 0315 0062;0061 05AE 0300 2DF4 0315 0062;00E0 05AE 2DF4 0315 0062;0061 05AE 0300 2DF4 0315 0062; +0061 2DF4 0315 0300 05AE 0062;0061 05AE 2DF4 0300 0315 0062;0061 05AE 2DF4 0300 0315 0062;0061 05AE 2DF4 0300 0315 0062;0061 05AE 2DF4 0300 0315 0062; +0061 0315 0300 05AE 2DF5 0062;00E0 05AE 2DF5 0315 0062;0061 05AE 0300 2DF5 0315 0062;00E0 05AE 2DF5 0315 0062;0061 05AE 0300 2DF5 0315 0062; +0061 2DF5 0315 0300 05AE 0062;0061 05AE 2DF5 0300 0315 0062;0061 05AE 2DF5 0300 0315 0062;0061 05AE 2DF5 0300 0315 0062;0061 05AE 2DF5 0300 0315 0062; +0061 0315 0300 05AE 2DF6 0062;00E0 05AE 2DF6 0315 0062;0061 05AE 0300 2DF6 0315 0062;00E0 05AE 2DF6 0315 0062;0061 05AE 0300 2DF6 0315 0062; +0061 2DF6 0315 0300 05AE 0062;0061 05AE 2DF6 0300 0315 0062;0061 05AE 2DF6 0300 0315 0062;0061 05AE 2DF6 0300 0315 0062;0061 05AE 2DF6 0300 0315 0062; +0061 0315 0300 05AE 2DF7 0062;00E0 05AE 2DF7 0315 0062;0061 05AE 0300 2DF7 0315 0062;00E0 05AE 2DF7 0315 0062;0061 05AE 0300 2DF7 0315 0062; +0061 2DF7 0315 0300 05AE 0062;0061 05AE 2DF7 0300 0315 0062;0061 05AE 2DF7 0300 0315 0062;0061 05AE 2DF7 0300 0315 0062;0061 05AE 2DF7 0300 0315 0062; +0061 0315 0300 05AE 2DF8 0062;00E0 05AE 2DF8 0315 0062;0061 05AE 0300 2DF8 0315 0062;00E0 05AE 2DF8 0315 0062;0061 05AE 0300 2DF8 0315 0062; +0061 2DF8 0315 0300 05AE 0062;0061 05AE 2DF8 0300 0315 0062;0061 05AE 2DF8 0300 0315 0062;0061 05AE 2DF8 0300 0315 0062;0061 05AE 2DF8 0300 0315 0062; +0061 0315 0300 05AE 2DF9 0062;00E0 05AE 2DF9 0315 0062;0061 05AE 0300 2DF9 0315 0062;00E0 05AE 2DF9 0315 0062;0061 05AE 0300 2DF9 0315 0062; +0061 2DF9 0315 0300 05AE 0062;0061 05AE 2DF9 0300 0315 0062;0061 05AE 2DF9 0300 0315 0062;0061 05AE 2DF9 0300 0315 0062;0061 05AE 2DF9 0300 0315 0062; +0061 0315 0300 05AE 2DFA 0062;00E0 05AE 2DFA 0315 0062;0061 05AE 0300 2DFA 0315 0062;00E0 05AE 2DFA 0315 0062;0061 05AE 0300 2DFA 0315 0062; +0061 2DFA 0315 0300 05AE 0062;0061 05AE 2DFA 0300 0315 0062;0061 05AE 2DFA 0300 0315 0062;0061 05AE 2DFA 0300 0315 0062;0061 05AE 2DFA 0300 0315 0062; +0061 0315 0300 05AE 2DFB 0062;00E0 05AE 2DFB 0315 0062;0061 05AE 0300 2DFB 0315 0062;00E0 05AE 2DFB 0315 0062;0061 05AE 0300 2DFB 0315 0062; +0061 2DFB 0315 0300 05AE 0062;0061 05AE 2DFB 0300 0315 0062;0061 05AE 2DFB 0300 0315 0062;0061 05AE 2DFB 0300 0315 0062;0061 05AE 2DFB 0300 0315 0062; +0061 0315 0300 05AE 2DFC 0062;00E0 05AE 2DFC 0315 0062;0061 05AE 0300 2DFC 0315 0062;00E0 05AE 2DFC 0315 0062;0061 05AE 0300 2DFC 0315 0062; +0061 2DFC 0315 0300 05AE 0062;0061 05AE 2DFC 0300 0315 0062;0061 05AE 2DFC 0300 0315 0062;0061 05AE 2DFC 0300 0315 0062;0061 05AE 2DFC 0300 0315 0062; +0061 0315 0300 05AE 2DFD 0062;00E0 05AE 2DFD 0315 0062;0061 05AE 0300 2DFD 0315 0062;00E0 05AE 2DFD 0315 0062;0061 05AE 0300 2DFD 0315 0062; +0061 2DFD 0315 0300 05AE 0062;0061 05AE 2DFD 0300 0315 0062;0061 05AE 2DFD 0300 0315 0062;0061 05AE 2DFD 0300 0315 0062;0061 05AE 2DFD 0300 0315 0062; +0061 0315 0300 05AE 2DFE 0062;00E0 05AE 2DFE 0315 0062;0061 05AE 0300 2DFE 0315 0062;00E0 05AE 2DFE 0315 0062;0061 05AE 0300 2DFE 0315 0062; +0061 2DFE 0315 0300 05AE 0062;0061 05AE 2DFE 0300 0315 0062;0061 05AE 2DFE 0300 0315 0062;0061 05AE 2DFE 0300 0315 0062;0061 05AE 2DFE 0300 0315 0062; +0061 0315 0300 05AE 2DFF 0062;00E0 05AE 2DFF 0315 0062;0061 05AE 0300 2DFF 0315 0062;00E0 05AE 2DFF 0315 0062;0061 05AE 0300 2DFF 0315 0062; +0061 2DFF 0315 0300 05AE 0062;0061 05AE 2DFF 0300 0315 0062;0061 05AE 2DFF 0300 0315 0062;0061 05AE 2DFF 0300 0315 0062;0061 05AE 2DFF 0300 0315 0062; +0061 0316 302A 031B 302A 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062; +0061 302A 0316 302A 031B 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062;0061 031B 302A 302A 0316 0062; +0061 0300 05AE 1D16D 302B 0062;00E0 1D16D 05AE 302B 0062;0061 1D16D 05AE 302B 0300 0062;00E0 1D16D 05AE 302B 0062;0061 1D16D 05AE 302B 0300 0062; +0061 302B 0300 05AE 1D16D 0062;00E0 1D16D 302B 05AE 0062;0061 1D16D 302B 05AE 0300 0062;00E0 1D16D 302B 05AE 0062;0061 1D16D 302B 05AE 0300 0062; +0061 035C 0315 0300 302C 0062;00E0 0315 302C 035C 0062;0061 0300 0315 302C 035C 0062;00E0 0315 302C 035C 0062;0061 0300 0315 302C 035C 0062; +0061 302C 035C 0315 0300 0062;00E0 302C 0315 035C 0062;0061 0300 302C 0315 035C 0062;00E0 302C 0315 035C 0062;0061 0300 302C 0315 035C 0062; +0061 302E 059A 0316 302D 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062;0061 0316 059A 302D 302E 0062; +0061 302D 302E 059A 0316 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062;0061 0316 302D 059A 302E 0062; +0061 1D16D 302E 059A 302E 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062; +0061 302E 1D16D 302E 059A 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062;0061 059A 302E 302E 1D16D 0062; +0061 1D16D 302E 059A 302F 0062;0061 059A 302E 302F 1D16D 0062;0061 059A 302E 302F 1D16D 0062;0061 059A 302E 302F 1D16D 0062;0061 059A 302E 302F 1D16D 0062; +0061 302F 1D16D 302E 059A 0062;0061 059A 302F 302E 1D16D 0062;0061 059A 302F 302E 1D16D 0062;0061 059A 302F 302E 1D16D 0062;0061 059A 302F 302E 1D16D 0062; +0061 094D 3099 093C 3099 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062; +0061 3099 094D 3099 093C 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062;0061 093C 3099 3099 094D 0062; +0061 094D 3099 093C 309A 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062;0061 093C 3099 309A 094D 0062; +0061 309A 094D 3099 093C 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062;0061 093C 309A 3099 094D 0062; +0061 0315 0300 05AE A66F 0062;00E0 05AE A66F 0315 0062;0061 05AE 0300 A66F 0315 0062;00E0 05AE A66F 0315 0062;0061 05AE 0300 A66F 0315 0062; +0061 A66F 0315 0300 05AE 0062;0061 05AE A66F 0300 0315 0062;0061 05AE A66F 0300 0315 0062;0061 05AE A66F 0300 0315 0062;0061 05AE A66F 0300 0315 0062; +0061 0315 0300 05AE A67C 0062;00E0 05AE A67C 0315 0062;0061 05AE 0300 A67C 0315 0062;00E0 05AE A67C 0315 0062;0061 05AE 0300 A67C 0315 0062; +0061 A67C 0315 0300 05AE 0062;0061 05AE A67C 0300 0315 0062;0061 05AE A67C 0300 0315 0062;0061 05AE A67C 0300 0315 0062;0061 05AE A67C 0300 0315 0062; +0061 0315 0300 05AE A67D 0062;00E0 05AE A67D 0315 0062;0061 05AE 0300 A67D 0315 0062;00E0 05AE A67D 0315 0062;0061 05AE 0300 A67D 0315 0062; +0061 A67D 0315 0300 05AE 0062;0061 05AE A67D 0300 0315 0062;0061 05AE A67D 0300 0315 0062;0061 05AE A67D 0300 0315 0062;0061 05AE A67D 0300 0315 0062; +0061 05B0 094D 3099 A806 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062;0061 3099 094D A806 05B0 0062; +0061 A806 05B0 094D 3099 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062;0061 3099 A806 094D 05B0 0062; +0061 05B0 094D 3099 A8C4 0062;0061 3099 094D A8C4 05B0 0062;0061 3099 094D A8C4 05B0 0062;0061 3099 094D A8C4 05B0 0062;0061 3099 094D A8C4 05B0 0062; +0061 A8C4 05B0 094D 3099 0062;0061 3099 A8C4 094D 05B0 0062;0061 3099 A8C4 094D 05B0 0062;0061 3099 A8C4 094D 05B0 0062;0061 3099 A8C4 094D 05B0 0062; +0061 059A 0316 302A A92B 0062;0061 302A 0316 A92B 059A 0062;0061 302A 0316 A92B 059A 0062;0061 302A 0316 A92B 059A 0062;0061 302A 0316 A92B 059A 0062; +0061 A92B 059A 0316 302A 0062;0061 302A A92B 0316 059A 0062;0061 302A A92B 0316 059A 0062;0061 302A A92B 0316 059A 0062;0061 302A A92B 0316 059A 0062; +0061 059A 0316 302A A92C 0062;0061 302A 0316 A92C 059A 0062;0061 302A 0316 A92C 059A 0062;0061 302A 0316 A92C 059A 0062;0061 302A 0316 A92C 059A 0062; +0061 A92C 059A 0316 302A 0062;0061 302A A92C 0316 059A 0062;0061 302A A92C 0316 059A 0062;0061 302A A92C 0316 059A 0062;0061 302A A92C 0316 059A 0062; +0061 059A 0316 302A A92D 0062;0061 302A 0316 A92D 059A 0062;0061 302A 0316 A92D 059A 0062;0061 302A 0316 A92D 059A 0062;0061 302A 0316 A92D 059A 0062; +0061 A92D 059A 0316 302A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062;0061 302A A92D 0316 059A 0062; +0061 05B0 094D 3099 A953 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062;0061 3099 094D A953 05B0 0062; +0061 A953 05B0 094D 3099 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062;0061 3099 A953 094D 05B0 0062; +0061 064B FB1E 05C2 FB1E 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062; +0061 FB1E 064B FB1E 05C2 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062;0061 05C2 FB1E FB1E 064B 0062; +0061 0315 0300 05AE FE20 0062;00E0 05AE FE20 0315 0062;0061 05AE 0300 FE20 0315 0062;00E0 05AE FE20 0315 0062;0061 05AE 0300 FE20 0315 0062; +0061 FE20 0315 0300 05AE 0062;0061 05AE FE20 0300 0315 0062;0061 05AE FE20 0300 0315 0062;0061 05AE FE20 0300 0315 0062;0061 05AE FE20 0300 0315 0062; +0061 0315 0300 05AE FE21 0062;00E0 05AE FE21 0315 0062;0061 05AE 0300 FE21 0315 0062;00E0 05AE FE21 0315 0062;0061 05AE 0300 FE21 0315 0062; +0061 FE21 0315 0300 05AE 0062;0061 05AE FE21 0300 0315 0062;0061 05AE FE21 0300 0315 0062;0061 05AE FE21 0300 0315 0062;0061 05AE FE21 0300 0315 0062; +0061 0315 0300 05AE FE22 0062;00E0 05AE FE22 0315 0062;0061 05AE 0300 FE22 0315 0062;00E0 05AE FE22 0315 0062;0061 05AE 0300 FE22 0315 0062; +0061 FE22 0315 0300 05AE 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062;0061 05AE FE22 0300 0315 0062; +0061 0315 0300 05AE FE23 0062;00E0 05AE FE23 0315 0062;0061 05AE 0300 FE23 0315 0062;00E0 05AE FE23 0315 0062;0061 05AE 0300 FE23 0315 0062; +0061 FE23 0315 0300 05AE 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062;0061 05AE FE23 0300 0315 0062; +0061 0315 0300 05AE FE24 0062;00E0 05AE FE24 0315 0062;0061 05AE 0300 FE24 0315 0062;00E0 05AE FE24 0315 0062;0061 05AE 0300 FE24 0315 0062; +0061 FE24 0315 0300 05AE 0062;0061 05AE FE24 0300 0315 0062;0061 05AE FE24 0300 0315 0062;0061 05AE FE24 0300 0315 0062;0061 05AE FE24 0300 0315 0062; +0061 0315 0300 05AE FE25 0062;00E0 05AE FE25 0315 0062;0061 05AE 0300 FE25 0315 0062;00E0 05AE FE25 0315 0062;0061 05AE 0300 FE25 0315 0062; +0061 FE25 0315 0300 05AE 0062;0061 05AE FE25 0300 0315 0062;0061 05AE FE25 0300 0315 0062;0061 05AE FE25 0300 0315 0062;0061 05AE FE25 0300 0315 0062; +0061 0315 0300 05AE FE26 0062;00E0 05AE FE26 0315 0062;0061 05AE 0300 FE26 0315 0062;00E0 05AE FE26 0315 0062;0061 05AE 0300 FE26 0315 0062; +0061 FE26 0315 0300 05AE 0062;0061 05AE FE26 0300 0315 0062;0061 05AE FE26 0300 0315 0062;0061 05AE FE26 0300 0315 0062;0061 05AE FE26 0300 0315 0062; +0061 059A 0316 302A 101FD 0062;0061 302A 0316 101FD 059A 0062;0061 302A 0316 101FD 059A 0062;0061 302A 0316 101FD 059A 0062;0061 302A 0316 101FD 059A 0062; +0061 101FD 059A 0316 302A 0062;0061 302A 101FD 0316 059A 0062;0061 302A 101FD 0316 059A 0062;0061 302A 101FD 0316 059A 0062;0061 302A 101FD 0316 059A 0062; +0061 059A 0316 302A 10A0D 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062;0061 302A 0316 10A0D 059A 0062; +0061 10A0D 059A 0316 302A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062;0061 302A 10A0D 0316 059A 0062; +0061 0315 0300 05AE 10A0F 0062;00E0 05AE 10A0F 0315 0062;0061 05AE 0300 10A0F 0315 0062;00E0 05AE 10A0F 0315 0062;0061 05AE 0300 10A0F 0315 0062; +0061 10A0F 0315 0300 05AE 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062;0061 05AE 10A0F 0300 0315 0062; +0061 0315 0300 05AE 10A38 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 0315 0062;00E0 05AE 10A38 0315 0062;0061 05AE 0300 10A38 0315 0062; +0061 10A38 0315 0300 05AE 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062;0061 05AE 10A38 0300 0315 0062; +0061 093C 0334 10A39 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062;0061 0334 10A39 093C 0062; +0061 10A39 093C 0334 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062;0061 10A39 0334 093C 0062; +0061 059A 0316 302A 10A3A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062;0061 302A 0316 10A3A 059A 0062; +0061 10A3A 059A 0316 302A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062;0061 302A 10A3A 0316 059A 0062; +0061 05B0 094D 3099 10A3F 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062;0061 3099 094D 10A3F 05B0 0062; +0061 10A3F 05B0 094D 3099 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062;0061 3099 10A3F 094D 05B0 0062; +0061 302A 031B 1DCE 1D165 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062;0061 1DCE 031B 1D165 302A 0062; +0061 1D165 302A 031B 1DCE 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062;0061 1DCE 1D165 031B 302A 0062; +0061 302A 031B 1DCE 1D166 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062;0061 1DCE 031B 1D166 302A 0062; +0061 1D166 302A 031B 1DCE 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062;0061 1DCE 1D166 031B 302A 0062; +0061 093C 0334 1D167 0062;0061 0334 1D167 093C 0062;0061 0334 1D167 093C 0062;0061 0334 1D167 093C 0062;0061 0334 1D167 093C 0062; +0061 1D167 093C 0334 0062;0061 1D167 0334 093C 0062;0061 1D167 0334 093C 0062;0061 1D167 0334 093C 0062;0061 1D167 0334 093C 0062; +0061 093C 0334 1D168 0062;0061 0334 1D168 093C 0062;0061 0334 1D168 093C 0062;0061 0334 1D168 093C 0062;0061 0334 1D168 093C 0062; +0061 1D168 093C 0334 0062;0061 1D168 0334 093C 0062;0061 1D168 0334 093C 0062;0061 1D168 0334 093C 0062;0061 1D168 0334 093C 0062; +0061 093C 0334 1D169 0062;0061 0334 1D169 093C 0062;0061 0334 1D169 093C 0062;0061 0334 1D169 093C 0062;0061 0334 1D169 093C 0062; +0061 1D169 093C 0334 0062;0061 1D169 0334 093C 0062;0061 1D169 0334 093C 0062;0061 1D169 0334 093C 0062;0061 1D169 0334 093C 0062; +0061 05AE 1D16D 302E 1D16D 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062; +0061 1D16D 05AE 1D16D 302E 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062;0061 302E 1D16D 1D16D 05AE 0062; +0061 302A 031B 1DCE 1D16E 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062;0061 1DCE 031B 1D16E 302A 0062; +0061 1D16E 302A 031B 1DCE 0062;0061 1DCE 1D16E 031B 302A 0062;0061 1DCE 1D16E 031B 302A 0062;0061 1DCE 1D16E 031B 302A 0062;0061 1DCE 1D16E 031B 302A 0062; +0061 302A 031B 1DCE 1D16F 0062;0061 1DCE 031B 1D16F 302A 0062;0061 1DCE 031B 1D16F 302A 0062;0061 1DCE 031B 1D16F 302A 0062;0061 1DCE 031B 1D16F 302A 0062; +0061 1D16F 302A 031B 1DCE 0062;0061 1DCE 1D16F 031B 302A 0062;0061 1DCE 1D16F 031B 302A 0062;0061 1DCE 1D16F 031B 302A 0062;0061 1DCE 1D16F 031B 302A 0062; +0061 302A 031B 1DCE 1D170 0062;0061 1DCE 031B 1D170 302A 0062;0061 1DCE 031B 1D170 302A 0062;0061 1DCE 031B 1D170 302A 0062;0061 1DCE 031B 1D170 302A 0062; +0061 1D170 302A 031B 1DCE 0062;0061 1DCE 1D170 031B 302A 0062;0061 1DCE 1D170 031B 302A 0062;0061 1DCE 1D170 031B 302A 0062;0061 1DCE 1D170 031B 302A 0062; +0061 302A 031B 1DCE 1D171 0062;0061 1DCE 031B 1D171 302A 0062;0061 1DCE 031B 1D171 302A 0062;0061 1DCE 031B 1D171 302A 0062;0061 1DCE 031B 1D171 302A 0062; +0061 1D171 302A 031B 1DCE 0062;0061 1DCE 1D171 031B 302A 0062;0061 1DCE 1D171 031B 302A 0062;0061 1DCE 1D171 031B 302A 0062;0061 1DCE 1D171 031B 302A 0062; +0061 302A 031B 1DCE 1D172 0062;0061 1DCE 031B 1D172 302A 0062;0061 1DCE 031B 1D172 302A 0062;0061 1DCE 031B 1D172 302A 0062;0061 1DCE 031B 1D172 302A 0062; +0061 1D172 302A 031B 1DCE 0062;0061 1DCE 1D172 031B 302A 0062;0061 1DCE 1D172 031B 302A 0062;0061 1DCE 1D172 031B 302A 0062;0061 1DCE 1D172 031B 302A 0062; +0061 059A 0316 302A 1D17B 0062;0061 302A 0316 1D17B 059A 0062;0061 302A 0316 1D17B 059A 0062;0061 302A 0316 1D17B 059A 0062;0061 302A 0316 1D17B 059A 0062; +0061 1D17B 059A 0316 302A 0062;0061 302A 1D17B 0316 059A 0062;0061 302A 1D17B 0316 059A 0062;0061 302A 1D17B 0316 059A 0062;0061 302A 1D17B 0316 059A 0062; +0061 059A 0316 302A 1D17C 0062;0061 302A 0316 1D17C 059A 0062;0061 302A 0316 1D17C 059A 0062;0061 302A 0316 1D17C 059A 0062;0061 302A 0316 1D17C 059A 0062; +0061 1D17C 059A 0316 302A 0062;0061 302A 1D17C 0316 059A 0062;0061 302A 1D17C 0316 059A 0062;0061 302A 1D17C 0316 059A 0062;0061 302A 1D17C 0316 059A 0062; +0061 059A 0316 302A 1D17D 0062;0061 302A 0316 1D17D 059A 0062;0061 302A 0316 1D17D 059A 0062;0061 302A 0316 1D17D 059A 0062;0061 302A 0316 1D17D 059A 0062; +0061 1D17D 059A 0316 302A 0062;0061 302A 1D17D 0316 059A 0062;0061 302A 1D17D 0316 059A 0062;0061 302A 1D17D 0316 059A 0062;0061 302A 1D17D 0316 059A 0062; +0061 059A 0316 302A 1D17E 0062;0061 302A 0316 1D17E 059A 0062;0061 302A 0316 1D17E 059A 0062;0061 302A 0316 1D17E 059A 0062;0061 302A 0316 1D17E 059A 0062; +0061 1D17E 059A 0316 302A 0062;0061 302A 1D17E 0316 059A 0062;0061 302A 1D17E 0316 059A 0062;0061 302A 1D17E 0316 059A 0062;0061 302A 1D17E 0316 059A 0062; +0061 059A 0316 302A 1D17F 0062;0061 302A 0316 1D17F 059A 0062;0061 302A 0316 1D17F 059A 0062;0061 302A 0316 1D17F 059A 0062;0061 302A 0316 1D17F 059A 0062; +0061 1D17F 059A 0316 302A 0062;0061 302A 1D17F 0316 059A 0062;0061 302A 1D17F 0316 059A 0062;0061 302A 1D17F 0316 059A 0062;0061 302A 1D17F 0316 059A 0062; +0061 059A 0316 302A 1D180 0062;0061 302A 0316 1D180 059A 0062;0061 302A 0316 1D180 059A 0062;0061 302A 0316 1D180 059A 0062;0061 302A 0316 1D180 059A 0062; +0061 1D180 059A 0316 302A 0062;0061 302A 1D180 0316 059A 0062;0061 302A 1D180 0316 059A 0062;0061 302A 1D180 0316 059A 0062;0061 302A 1D180 0316 059A 0062; +0061 059A 0316 302A 1D181 0062;0061 302A 0316 1D181 059A 0062;0061 302A 0316 1D181 059A 0062;0061 302A 0316 1D181 059A 0062;0061 302A 0316 1D181 059A 0062; +0061 1D181 059A 0316 302A 0062;0061 302A 1D181 0316 059A 0062;0061 302A 1D181 0316 059A 0062;0061 302A 1D181 0316 059A 0062;0061 302A 1D181 0316 059A 0062; +0061 059A 0316 302A 1D182 0062;0061 302A 0316 1D182 059A 0062;0061 302A 0316 1D182 059A 0062;0061 302A 0316 1D182 059A 0062;0061 302A 0316 1D182 059A 0062; +0061 1D182 059A 0316 302A 0062;0061 302A 1D182 0316 059A 0062;0061 302A 1D182 0316 059A 0062;0061 302A 1D182 0316 059A 0062;0061 302A 1D182 0316 059A 0062; +0061 0315 0300 05AE 1D185 0062;00E0 05AE 1D185 0315 0062;0061 05AE 0300 1D185 0315 0062;00E0 05AE 1D185 0315 0062;0061 05AE 0300 1D185 0315 0062; +0061 1D185 0315 0300 05AE 0062;0061 05AE 1D185 0300 0315 0062;0061 05AE 1D185 0300 0315 0062;0061 05AE 1D185 0300 0315 0062;0061 05AE 1D185 0300 0315 0062; +0061 0315 0300 05AE 1D186 0062;00E0 05AE 1D186 0315 0062;0061 05AE 0300 1D186 0315 0062;00E0 05AE 1D186 0315 0062;0061 05AE 0300 1D186 0315 0062; +0061 1D186 0315 0300 05AE 0062;0061 05AE 1D186 0300 0315 0062;0061 05AE 1D186 0300 0315 0062;0061 05AE 1D186 0300 0315 0062;0061 05AE 1D186 0300 0315 0062; +0061 0315 0300 05AE 1D187 0062;00E0 05AE 1D187 0315 0062;0061 05AE 0300 1D187 0315 0062;00E0 05AE 1D187 0315 0062;0061 05AE 0300 1D187 0315 0062; +0061 1D187 0315 0300 05AE 0062;0061 05AE 1D187 0300 0315 0062;0061 05AE 1D187 0300 0315 0062;0061 05AE 1D187 0300 0315 0062;0061 05AE 1D187 0300 0315 0062; +0061 0315 0300 05AE 1D188 0062;00E0 05AE 1D188 0315 0062;0061 05AE 0300 1D188 0315 0062;00E0 05AE 1D188 0315 0062;0061 05AE 0300 1D188 0315 0062; +0061 1D188 0315 0300 05AE 0062;0061 05AE 1D188 0300 0315 0062;0061 05AE 1D188 0300 0315 0062;0061 05AE 1D188 0300 0315 0062;0061 05AE 1D188 0300 0315 0062; +0061 0315 0300 05AE 1D189 0062;00E0 05AE 1D189 0315 0062;0061 05AE 0300 1D189 0315 0062;00E0 05AE 1D189 0315 0062;0061 05AE 0300 1D189 0315 0062; +0061 1D189 0315 0300 05AE 0062;0061 05AE 1D189 0300 0315 0062;0061 05AE 1D189 0300 0315 0062;0061 05AE 1D189 0300 0315 0062;0061 05AE 1D189 0300 0315 0062; +0061 059A 0316 302A 1D18A 0062;0061 302A 0316 1D18A 059A 0062;0061 302A 0316 1D18A 059A 0062;0061 302A 0316 1D18A 059A 0062;0061 302A 0316 1D18A 059A 0062; +0061 1D18A 059A 0316 302A 0062;0061 302A 1D18A 0316 059A 0062;0061 302A 1D18A 0316 059A 0062;0061 302A 1D18A 0316 059A 0062;0061 302A 1D18A 0316 059A 0062; +0061 059A 0316 302A 1D18B 0062;0061 302A 0316 1D18B 059A 0062;0061 302A 0316 1D18B 059A 0062;0061 302A 0316 1D18B 059A 0062;0061 302A 0316 1D18B 059A 0062; +0061 1D18B 059A 0316 302A 0062;0061 302A 1D18B 0316 059A 0062;0061 302A 1D18B 0316 059A 0062;0061 302A 1D18B 0316 059A 0062;0061 302A 1D18B 0316 059A 0062; +0061 0315 0300 05AE 1D1AA 0062;00E0 05AE 1D1AA 0315 0062;0061 05AE 0300 1D1AA 0315 0062;00E0 05AE 1D1AA 0315 0062;0061 05AE 0300 1D1AA 0315 0062; +0061 1D1AA 0315 0300 05AE 0062;0061 05AE 1D1AA 0300 0315 0062;0061 05AE 1D1AA 0300 0315 0062;0061 05AE 1D1AA 0300 0315 0062;0061 05AE 1D1AA 0300 0315 0062; +0061 0315 0300 05AE 1D1AB 0062;00E0 05AE 1D1AB 0315 0062;0061 05AE 0300 1D1AB 0315 0062;00E0 05AE 1D1AB 0315 0062;0061 05AE 0300 1D1AB 0315 0062; +0061 1D1AB 0315 0300 05AE 0062;0061 05AE 1D1AB 0300 0315 0062;0061 05AE 1D1AB 0300 0315 0062;0061 05AE 1D1AB 0300 0315 0062;0061 05AE 1D1AB 0300 0315 0062; +0061 0315 0300 05AE 1D1AC 0062;00E0 05AE 1D1AC 0315 0062;0061 05AE 0300 1D1AC 0315 0062;00E0 05AE 1D1AC 0315 0062;0061 05AE 0300 1D1AC 0315 0062; +0061 1D1AC 0315 0300 05AE 0062;0061 05AE 1D1AC 0300 0315 0062;0061 05AE 1D1AC 0300 0315 0062;0061 05AE 1D1AC 0300 0315 0062;0061 05AE 1D1AC 0300 0315 0062; +0061 0315 0300 05AE 1D1AD 0062;00E0 05AE 1D1AD 0315 0062;0061 05AE 0300 1D1AD 0315 0062;00E0 05AE 1D1AD 0315 0062;0061 05AE 0300 1D1AD 0315 0062; +0061 1D1AD 0315 0300 05AE 0062;0061 05AE 1D1AD 0300 0315 0062;0061 05AE 1D1AD 0300 0315 0062;0061 05AE 1D1AD 0300 0315 0062;0061 05AE 1D1AD 0300 0315 0062; +0061 0315 0300 05AE 1D242 0062;00E0 05AE 1D242 0315 0062;0061 05AE 0300 1D242 0315 0062;00E0 05AE 1D242 0315 0062;0061 05AE 0300 1D242 0315 0062; +0061 1D242 0315 0300 05AE 0062;0061 05AE 1D242 0300 0315 0062;0061 05AE 1D242 0300 0315 0062;0061 05AE 1D242 0300 0315 0062;0061 05AE 1D242 0300 0315 0062; +0061 0315 0300 05AE 1D243 0062;00E0 05AE 1D243 0315 0062;0061 05AE 0300 1D243 0315 0062;00E0 05AE 1D243 0315 0062;0061 05AE 0300 1D243 0315 0062; +0061 1D243 0315 0300 05AE 0062;0061 05AE 1D243 0300 0315 0062;0061 05AE 1D243 0300 0315 0062;0061 05AE 1D243 0300 0315 0062;0061 05AE 1D243 0300 0315 0062; +0061 0315 0300 05AE 1D244 0062;00E0 05AE 1D244 0315 0062;0061 05AE 0300 1D244 0315 0062;00E0 05AE 1D244 0315 0062;0061 05AE 0300 1D244 0315 0062; +0061 1D244 0315 0300 05AE 0062;0061 05AE 1D244 0300 0315 0062;0061 05AE 1D244 0300 0315 0062;0061 05AE 1D244 0300 0315 0062;0061 05AE 1D244 0300 0315 0062; + +@Part3 + +09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE;09C7 0334 09BE; +09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7;09C7 0334 09D7; +0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E;0B47 0334 0B3E; +0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56;0B47 0334 0B56; +0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57;0B47 0334 0B57; +0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7;0B92 0334 0BD7; +0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE;0BC6 0334 0BBE; +0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7;0BC6 0334 0BD7; +0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE;0BC7 0334 0BBE; +0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5;0CBF 0334 0CD5; +0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2;0CC6 0334 0CC2; +0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5;0CC6 0334 0CD5; +0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6;0CC6 0334 0CD6; +0CCA 0334 0CD5;0CCA 0334 0CD5;0CC6 0CC2 0334 0CD5;0CCA 0334 0CD5;0CC6 0CC2 0334 0CD5; +0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E;0D46 0334 0D3E; +0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57;0D46 0334 0D57; +0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E;0D47 0334 0D3E; +0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF;0DD9 0334 0DCF; +0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF;0DD9 0334 0DDF; +0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5;0F40 0334 0FB5; +0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7;0F42 0334 0FB7; +0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7;0F4C 0334 0FB7; +0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7;0F51 0334 0FB7; +0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7;0F56 0334 0FB7; +0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7;0F5B 0334 0FB7; +0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5;0F90 0334 0FB5; +0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7;0F92 0334 0FB7; +0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7;0F9C 0334 0FB7; +0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7;0FA1 0334 0FB7; +0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7;0FA6 0334 0FB7; +0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7;0FAB 0334 0FB7; +1025 0334 102E;1025 0334 102E;1025 0334 102E;1025 0334 102E;1025 0334 102E; +1100 0334 1161;1100 0334 1161;1100 0334 1161;1100 0334 1161;1100 0334 1161; +1100 0334 116E;1100 0334 116E;1100 0334 116E;1100 0334 116E;1100 0334 116E; +1101 0334 1166;1101 0334 1166;1101 0334 1166;1101 0334 1166;1101 0334 1166; +1101 0334 1173;1101 0334 1173;1101 0334 1173;1101 0334 1173;1101 0334 1173; +1102 0334 116B;1102 0334 116B;1102 0334 116B;1102 0334 116B;1102 0334 116B; +1103 0334 1163;1103 0334 1163;1103 0334 1163;1103 0334 1163;1103 0334 1163; +1103 0334 1170;1103 0334 1170;1103 0334 1170;1103 0334 1170;1103 0334 1170; +1104 0334 1168;1104 0334 1168;1104 0334 1168;1104 0334 1168;1104 0334 1168; +1104 0334 1175;1104 0334 1175;1104 0334 1175;1104 0334 1175;1104 0334 1175; +1105 0334 116D;1105 0334 116D;1105 0334 116D;1105 0334 116D;1105 0334 116D; +1106 0334 1165;1106 0334 1165;1106 0334 1165;1106 0334 1165;1106 0334 1165; +1106 0334 1172;1106 0334 1172;1106 0334 1172;1106 0334 1172;1106 0334 1172; +1107 0334 116A;1107 0334 116A;1107 0334 116A;1107 0334 116A;1107 0334 116A; +1108 0334 1162;1108 0334 1162;1108 0334 1162;1108 0334 1162;1108 0334 1162; +1108 0334 116F;1108 0334 116F;1108 0334 116F;1108 0334 116F;1108 0334 116F; +1109 0334 1167;1109 0334 1167;1109 0334 1167;1109 0334 1167;1109 0334 1167; +1109 0334 1174;1109 0334 1174;1109 0334 1174;1109 0334 1174;1109 0334 1174; +110A 0334 116C;110A 0334 116C;110A 0334 116C;110A 0334 116C;110A 0334 116C; +110B 0334 1164;110B 0334 1164;110B 0334 1164;110B 0334 1164;110B 0334 1164; +110B 0334 1171;110B 0334 1171;110B 0334 1171;110B 0334 1171;110B 0334 1171; +110C 0334 1169;110C 0334 1169;110C 0334 1169;110C 0334 1169;110C 0334 1169; +110D 0334 1161;110D 0334 1161;110D 0334 1161;110D 0334 1161;110D 0334 1161; +110D 0334 116E;110D 0334 116E;110D 0334 116E;110D 0334 116E;110D 0334 116E; +110E 0334 1166;110E 0334 1166;110E 0334 1166;110E 0334 1166;110E 0334 1166; +110E 0334 1173;110E 0334 1173;110E 0334 1173;110E 0334 1173;110E 0334 1173; +110F 0334 116B;110F 0334 116B;110F 0334 116B;110F 0334 116B;110F 0334 116B; +1110 0334 1163;1110 0334 1163;1110 0334 1163;1110 0334 1163;1110 0334 1163; +1110 0334 1170;1110 0334 1170;1110 0334 1170;1110 0334 1170;1110 0334 1170; +1111 0334 1168;1111 0334 1168;1111 0334 1168;1111 0334 1168;1111 0334 1168; +1111 0334 1175;1111 0334 1175;1111 0334 1175;1111 0334 1175;1111 0334 1175; +1112 0334 116D;1112 0334 116D;1112 0334 116D;1112 0334 116D;1112 0334 116D; +1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35;1B05 0334 1B35; +1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35;1B07 0334 1B35; +1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35;1B09 0334 1B35; +1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35;1B0B 0334 1B35; +1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35;1B0D 0334 1B35; +1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35;1B11 0334 1B35; +1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35;1B3A 0334 1B35; +1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35;1B3C 0334 1B35; +1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35;1B3E 0334 1B35; +1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35;1B3F 0334 1B35; +1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35;1B42 0334 1B35; +AC54 0334 11AE;AC54 0334 11AE;1100 1164 0334 11AE;AC54 0334 11AE;1100 1164 0334 11AE; +ACA8 0334 11B5;ACA8 0334 11B5;1100 1167 0334 11B5;ACA8 0334 11B5;1100 1167 0334 11B5; +ACFC 0334 11BC;ACFC 0334 11BC;1100 116A 0334 11BC;ACFC 0334 11BC;1100 116A 0334 11BC; +ADC0 0334 11AE;ADC0 0334 11AE;1100 1171 0334 11AE;ADC0 0334 11AE;1100 1171 0334 11AE; +AE14 0334 11B5;AE14 0334 11B5;1100 1174 0334 11B5;AE14 0334 11B5;1100 1174 0334 11B5; +AE68 0334 11BC;AE68 0334 11BC;1101 1162 0334 11BC;AE68 0334 11BC;1101 1162 0334 11BC; +AF2C 0334 11AE;AF2C 0334 11AE;1101 1169 0334 11AE;AF2C 0334 11AE;1101 1169 0334 11AE; +AF80 0334 11B5;AF80 0334 11B5;1101 116C 0334 11B5;AF80 0334 11B5;1101 116C 0334 11B5; +AFD4 0334 11BC;AFD4 0334 11BC;1101 116F 0334 11BC;AFD4 0334 11BC;1101 116F 0334 11BC; +B098 0334 11AE;B098 0334 11AE;1102 1161 0334 11AE;B098 0334 11AE;1102 1161 0334 11AE; +B0EC 0334 11B5;B0EC 0334 11B5;1102 1164 0334 11B5;B0EC 0334 11B5;1102 1164 0334 11B5; +B140 0334 11BC;B140 0334 11BC;1102 1167 0334 11BC;B140 0334 11BC;1102 1167 0334 11BC; +B204 0334 11AE;B204 0334 11AE;1102 116E 0334 11AE;B204 0334 11AE;1102 116E 0334 11AE; +B258 0334 11B5;B258 0334 11B5;1102 1171 0334 11B5;B258 0334 11B5;1102 1171 0334 11B5; +B2AC 0334 11BC;B2AC 0334 11BC;1102 1174 0334 11BC;B2AC 0334 11BC;1102 1174 0334 11BC; +B370 0334 11AE;B370 0334 11AE;1103 1166 0334 11AE;B370 0334 11AE;1103 1166 0334 11AE; +B3C4 0334 11B5;B3C4 0334 11B5;1103 1169 0334 11B5;B3C4 0334 11B5;1103 1169 0334 11B5; +B418 0334 11BC;B418 0334 11BC;1103 116C 0334 11BC;B418 0334 11BC;1103 116C 0334 11BC; +B4DC 0334 11AE;B4DC 0334 11AE;1103 1173 0334 11AE;B4DC 0334 11AE;1103 1173 0334 11AE; +B530 0334 11B5;B530 0334 11B5;1104 1161 0334 11B5;B530 0334 11B5;1104 1161 0334 11B5; +B584 0334 11BC;B584 0334 11BC;1104 1164 0334 11BC;B584 0334 11BC;1104 1164 0334 11BC; +B648 0334 11AE;B648 0334 11AE;1104 116B 0334 11AE;B648 0334 11AE;1104 116B 0334 11AE; +B69C 0334 11B5;B69C 0334 11B5;1104 116E 0334 11B5;B69C 0334 11B5;1104 116E 0334 11B5; +B6F0 0334 11BC;B6F0 0334 11BC;1104 1171 0334 11BC;B6F0 0334 11BC;1104 1171 0334 11BC; +B7B4 0334 11AE;B7B4 0334 11AE;1105 1163 0334 11AE;B7B4 0334 11AE;1105 1163 0334 11AE; +B808 0334 11B5;B808 0334 11B5;1105 1166 0334 11B5;B808 0334 11B5;1105 1166 0334 11B5; +B85C 0334 11BC;B85C 0334 11BC;1105 1169 0334 11BC;B85C 0334 11BC;1105 1169 0334 11BC; +B920 0334 11AE;B920 0334 11AE;1105 1170 0334 11AE;B920 0334 11AE;1105 1170 0334 11AE; +B974 0334 11B5;B974 0334 11B5;1105 1173 0334 11B5;B974 0334 11B5;1105 1173 0334 11B5; +B9C8 0334 11BC;B9C8 0334 11BC;1106 1161 0334 11BC;B9C8 0334 11BC;1106 1161 0334 11BC; +BA8C 0334 11AE;BA8C 0334 11AE;1106 1168 0334 11AE;BA8C 0334 11AE;1106 1168 0334 11AE; +BAE0 0334 11B5;BAE0 0334 11B5;1106 116B 0334 11B5;BAE0 0334 11B5;1106 116B 0334 11B5; +BB34 0334 11BC;BB34 0334 11BC;1106 116E 0334 11BC;BB34 0334 11BC;1106 116E 0334 11BC; +BBF8 0334 11AE;BBF8 0334 11AE;1106 1175 0334 11AE;BBF8 0334 11AE;1106 1175 0334 11AE; +BC4C 0334 11B5;BC4C 0334 11B5;1107 1163 0334 11B5;BC4C 0334 11B5;1107 1163 0334 11B5; +BCA0 0334 11BC;BCA0 0334 11BC;1107 1166 0334 11BC;BCA0 0334 11BC;1107 1166 0334 11BC; +BD64 0334 11AE;BD64 0334 11AE;1107 116D 0334 11AE;BD64 0334 11AE;1107 116D 0334 11AE; +BDB8 0334 11B5;BDB8 0334 11B5;1107 1170 0334 11B5;BDB8 0334 11B5;1107 1170 0334 11B5; +BE0C 0334 11BC;BE0C 0334 11BC;1107 1173 0334 11BC;BE0C 0334 11BC;1107 1173 0334 11BC; +BED0 0334 11AE;BED0 0334 11AE;1108 1165 0334 11AE;BED0 0334 11AE;1108 1165 0334 11AE; +BF24 0334 11B5;BF24 0334 11B5;1108 1168 0334 11B5;BF24 0334 11B5;1108 1168 0334 11B5; +BF78 0334 11BC;BF78 0334 11BC;1108 116B 0334 11BC;BF78 0334 11BC;1108 116B 0334 11BC; +C03C 0334 11AE;C03C 0334 11AE;1108 1172 0334 11AE;C03C 0334 11AE;1108 1172 0334 11AE; +C090 0334 11B5;C090 0334 11B5;1108 1175 0334 11B5;C090 0334 11B5;1108 1175 0334 11B5; +C0E4 0334 11BC;C0E4 0334 11BC;1109 1163 0334 11BC;C0E4 0334 11BC;1109 1163 0334 11BC; +C1A8 0334 11AE;C1A8 0334 11AE;1109 116A 0334 11AE;C1A8 0334 11AE;1109 116A 0334 11AE; +C1FC 0334 11B5;C1FC 0334 11B5;1109 116D 0334 11B5;C1FC 0334 11B5;1109 116D 0334 11B5; +C250 0334 11BC;C250 0334 11BC;1109 1170 0334 11BC;C250 0334 11BC;1109 1170 0334 11BC; +C314 0334 11AE;C314 0334 11AE;110A 1162 0334 11AE;C314 0334 11AE;110A 1162 0334 11AE; +C368 0334 11B5;C368 0334 11B5;110A 1165 0334 11B5;C368 0334 11B5;110A 1165 0334 11B5; +C3BC 0334 11BC;C3BC 0334 11BC;110A 1168 0334 11BC;C3BC 0334 11BC;110A 1168 0334 11BC; +C480 0334 11AE;C480 0334 11AE;110A 116F 0334 11AE;C480 0334 11AE;110A 116F 0334 11AE; +C4D4 0334 11B5;C4D4 0334 11B5;110A 1172 0334 11B5;C4D4 0334 11B5;110A 1172 0334 11B5; +C528 0334 11BC;C528 0334 11BC;110A 1175 0334 11BC;C528 0334 11BC;110A 1175 0334 11BC; +C5EC 0334 11AE;C5EC 0334 11AE;110B 1167 0334 11AE;C5EC 0334 11AE;110B 1167 0334 11AE; +C640 0334 11B5;C640 0334 11B5;110B 116A 0334 11B5;C640 0334 11B5;110B 116A 0334 11B5; +C694 0334 11BC;C694 0334 11BC;110B 116D 0334 11BC;C694 0334 11BC;110B 116D 0334 11BC; +C758 0334 11AE;C758 0334 11AE;110B 1174 0334 11AE;C758 0334 11AE;110B 1174 0334 11AE; +C7AC 0334 11B5;C7AC 0334 11B5;110C 1162 0334 11B5;C7AC 0334 11B5;110C 1162 0334 11B5; +C800 0334 11BC;C800 0334 11BC;110C 1165 0334 11BC;C800 0334 11BC;110C 1165 0334 11BC; +C8C4 0334 11AE;C8C4 0334 11AE;110C 116C 0334 11AE;C8C4 0334 11AE;110C 116C 0334 11AE; +C918 0334 11B5;C918 0334 11B5;110C 116F 0334 11B5;C918 0334 11B5;110C 116F 0334 11B5; +C96C 0334 11BC;C96C 0334 11BC;110C 1172 0334 11BC;C96C 0334 11BC;110C 1172 0334 11BC; +CA30 0334 11AE;CA30 0334 11AE;110D 1164 0334 11AE;CA30 0334 11AE;110D 1164 0334 11AE; +CA84 0334 11B5;CA84 0334 11B5;110D 1167 0334 11B5;CA84 0334 11B5;110D 1167 0334 11B5; +CAD8 0334 11BC;CAD8 0334 11BC;110D 116A 0334 11BC;CAD8 0334 11BC;110D 116A 0334 11BC; +CB9C 0334 11AE;CB9C 0334 11AE;110D 1171 0334 11AE;CB9C 0334 11AE;110D 1171 0334 11AE; +CBF0 0334 11B5;CBF0 0334 11B5;110D 1174 0334 11B5;CBF0 0334 11B5;110D 1174 0334 11B5; +CC44 0334 11BC;CC44 0334 11BC;110E 1162 0334 11BC;CC44 0334 11BC;110E 1162 0334 11BC; +CD08 0334 11AE;CD08 0334 11AE;110E 1169 0334 11AE;CD08 0334 11AE;110E 1169 0334 11AE; +CD5C 0334 11B5;CD5C 0334 11B5;110E 116C 0334 11B5;CD5C 0334 11B5;110E 116C 0334 11B5; +CDB0 0334 11BC;CDB0 0334 11BC;110E 116F 0334 11BC;CDB0 0334 11BC;110E 116F 0334 11BC; +CE74 0334 11AE;CE74 0334 11AE;110F 1161 0334 11AE;CE74 0334 11AE;110F 1161 0334 11AE; +CEC8 0334 11B5;CEC8 0334 11B5;110F 1164 0334 11B5;CEC8 0334 11B5;110F 1164 0334 11B5; +CF1C 0334 11BC;CF1C 0334 11BC;110F 1167 0334 11BC;CF1C 0334 11BC;110F 1167 0334 11BC; +CFE0 0334 11AE;CFE0 0334 11AE;110F 116E 0334 11AE;CFE0 0334 11AE;110F 116E 0334 11AE; +D034 0334 11B5;D034 0334 11B5;110F 1171 0334 11B5;D034 0334 11B5;110F 1171 0334 11B5; +D088 0334 11BC;D088 0334 11BC;110F 1174 0334 11BC;D088 0334 11BC;110F 1174 0334 11BC; +D14C 0334 11AE;D14C 0334 11AE;1110 1166 0334 11AE;D14C 0334 11AE;1110 1166 0334 11AE; +D1A0 0334 11B5;D1A0 0334 11B5;1110 1169 0334 11B5;D1A0 0334 11B5;1110 1169 0334 11B5; +D1F4 0334 11BC;D1F4 0334 11BC;1110 116C 0334 11BC;D1F4 0334 11BC;1110 116C 0334 11BC; +D2B8 0334 11AE;D2B8 0334 11AE;1110 1173 0334 11AE;D2B8 0334 11AE;1110 1173 0334 11AE; +D30C 0334 11B5;D30C 0334 11B5;1111 1161 0334 11B5;D30C 0334 11B5;1111 1161 0334 11B5; +D360 0334 11BC;D360 0334 11BC;1111 1164 0334 11BC;D360 0334 11BC;1111 1164 0334 11BC; +D424 0334 11AE;D424 0334 11AE;1111 116B 0334 11AE;D424 0334 11AE;1111 116B 0334 11AE; +D478 0334 11B5;D478 0334 11B5;1111 116E 0334 11B5;D478 0334 11B5;1111 116E 0334 11B5; +D4CC 0334 11BC;D4CC 0334 11BC;1111 1171 0334 11BC;D4CC 0334 11BC;1111 1171 0334 11BC; +D590 0334 11AE;D590 0334 11AE;1112 1163 0334 11AE;D590 0334 11AE;1112 1163 0334 11AE; +D5E4 0334 11B5;D5E4 0334 11B5;1112 1166 0334 11B5;D5E4 0334 11B5;1112 1166 0334 11B5; +D638 0334 11BC;D638 0334 11BC;1112 1169 0334 11BC;D638 0334 11BC;1112 1169 0334 11BC; +D6FC 0334 11AE;D6FC 0334 11AE;1112 1170 0334 11AE;D6FC 0334 11AE;1112 1170 0334 11AE; +D750 0334 11B5;D750 0334 11B5;1112 1173 0334 11B5;D750 0334 11B5;1112 1173 0334 11B5; + + diff --git a/tests/uninorm/test-canonical-decomposition.c b/tests/uninorm/test-canonical-decomposition.c new file mode 100644 index 00000000..040011b5 --- /dev/null +++ b/tests/uninorm/test-canonical-decomposition.c @@ -0,0 +1,156 @@ +/* Test of canonical decomposition of Unicode characters. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; + int ret; + + /* SPACE */ + ret = uc_canonical_decomposition (0x0020, decomposed); + ASSERT (ret == -1); + + /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + ret = uc_canonical_decomposition (0x00C4, decomposed); + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0x0041); + ASSERT (decomposed[1] == 0x0308); + + /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + ret = uc_canonical_decomposition (0x01DE, decomposed); + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0x00C4); + ASSERT (decomposed[1] == 0x0304); + + /* GREEK DIALYTIKA AND PERISPOMENI */ + ret = uc_canonical_decomposition (0x1FC1, decomposed); + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0x00A8); + ASSERT (decomposed[1] == 0x0342); + + /* SCRIPT SMALL L */ + ret = uc_canonical_decomposition (0x2113, decomposed); + ASSERT (ret == -1); + + /* NO-BREAK SPACE */ + ret = uc_canonical_decomposition (0x00A0, decomposed); + ASSERT (ret == -1); + + /* ARABIC LETTER VEH INITIAL FORM */ + ret = uc_canonical_decomposition (0xFB6C, decomposed); + ASSERT (ret == -1); + + /* ARABIC LETTER VEH MEDIAL FORM */ + ret = uc_canonical_decomposition (0xFB6D, decomposed); + ASSERT (ret == -1); + + /* ARABIC LETTER VEH FINAL FORM */ + ret = uc_canonical_decomposition (0xFB6B, decomposed); + ASSERT (ret == -1); + + /* ARABIC LETTER VEH ISOLATED FORM */ + ret = uc_canonical_decomposition (0xFB6A, decomposed); + ASSERT (ret == -1); + + /* CIRCLED NUMBER FIFTEEN */ + ret = uc_canonical_decomposition (0x246E, decomposed); + ASSERT (ret == -1); + + /* TRADE MARK SIGN */ + ret = uc_canonical_decomposition (0x2122, decomposed); + ASSERT (ret == -1); + + /* LATIN SUBSCRIPT SMALL LETTER I */ + ret = uc_canonical_decomposition (0x1D62, decomposed); + ASSERT (ret == -1); + + /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + ret = uc_canonical_decomposition (0xFE35, decomposed); + ASSERT (ret == -1); + + /* FULLWIDTH LATIN CAPITAL LETTER A */ + ret = uc_canonical_decomposition (0xFF21, decomposed); + ASSERT (ret == -1); + + /* HALFWIDTH IDEOGRAPHIC COMMA */ + ret = uc_canonical_decomposition (0xFF64, decomposed); + ASSERT (ret == -1); + + /* SMALL IDEOGRAPHIC COMMA */ + ret = uc_canonical_decomposition (0xFE51, decomposed); + ASSERT (ret == -1); + + /* SQUARE MHZ */ + ret = uc_canonical_decomposition (0x3392, decomposed); + ASSERT (ret == -1); + + /* VULGAR FRACTION THREE EIGHTHS */ + ret = uc_canonical_decomposition (0x215C, decomposed); + ASSERT (ret == -1); + + /* MICRO SIGN */ + ret = uc_canonical_decomposition (0x00B5, decomposed); + ASSERT (ret == -1); + + /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + ret = uc_canonical_decomposition (0xFDFA, decomposed); + ASSERT (ret == -1); + + /* HANGUL SYLLABLE GEUL */ + ret = uc_canonical_decomposition (0xAE00, decomposed); + /* See the clarification at , + section "Clarification of Hangul Jamo Handling". */ +#if 1 + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0xADF8); + ASSERT (decomposed[1] == 0x11AF); +#else + ASSERT (ret == 3); + ASSERT (decomposed[0] == 0x1100); + ASSERT (decomposed[1] == 0x1173); + ASSERT (decomposed[2] == 0x11AF); +#endif + + /* HANGUL SYLLABLE GEU */ + ret = uc_canonical_decomposition (0xADF8, decomposed); + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0x1100); + ASSERT (decomposed[1] == 0x1173); + + return 0; +} diff --git a/tests/uninorm/test-compat-decomposition.c b/tests/uninorm/test-compat-decomposition.c new file mode 100644 index 00000000..49a2b09f --- /dev/null +++ b/tests/uninorm/test-compat-decomposition.c @@ -0,0 +1,198 @@ +/* Test of compatibility decomposition of Unicode characters. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm/decompose-internal.h" + +#include +#include + +#include "uninorm.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; + int ret; + + /* SPACE */ + ret = uc_compat_decomposition (0x0020, decomposed); + ASSERT (ret == -1); + + /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + ret = uc_compat_decomposition (0x00C4, decomposed); + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0x0041); + ASSERT (decomposed[1] == 0x0308); + + /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + ret = uc_compat_decomposition (0x01DE, decomposed); + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0x00C4); + ASSERT (decomposed[1] == 0x0304); + + /* GREEK DIALYTIKA AND PERISPOMENI */ + ret = uc_compat_decomposition (0x1FC1, decomposed); + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0x00A8); + ASSERT (decomposed[1] == 0x0342); + + /* SCRIPT SMALL L */ + ret = uc_compat_decomposition (0x2113, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x006C); + + /* NO-BREAK SPACE */ + ret = uc_compat_decomposition (0x00A0, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x0020); + + /* ARABIC LETTER VEH INITIAL FORM */ + ret = uc_compat_decomposition (0xFB6C, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x06A4); + + /* ARABIC LETTER VEH MEDIAL FORM */ + ret = uc_compat_decomposition (0xFB6D, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x06A4); + + /* ARABIC LETTER VEH FINAL FORM */ + ret = uc_compat_decomposition (0xFB6B, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x06A4); + + /* ARABIC LETTER VEH ISOLATED FORM */ + ret = uc_compat_decomposition (0xFB6A, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x06A4); + + /* CIRCLED NUMBER FIFTEEN */ + ret = uc_compat_decomposition (0x246E, decomposed); + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0x0031); + ASSERT (decomposed[1] == 0x0035); + + /* TRADE MARK SIGN */ + ret = uc_compat_decomposition (0x2122, decomposed); + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0x0054); + ASSERT (decomposed[1] == 0x004D); + + /* LATIN SUBSCRIPT SMALL LETTER I */ + ret = uc_compat_decomposition (0x1D62, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x0069); + + /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + ret = uc_compat_decomposition (0xFE35, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x0028); + + /* FULLWIDTH LATIN CAPITAL LETTER A */ + ret = uc_compat_decomposition (0xFF21, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x0041); + + /* HALFWIDTH IDEOGRAPHIC COMMA */ + ret = uc_compat_decomposition (0xFF64, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x3001); + + /* SMALL IDEOGRAPHIC COMMA */ + ret = uc_compat_decomposition (0xFE51, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x3001); + + /* SQUARE MHZ */ + ret = uc_compat_decomposition (0x3392, decomposed); + ASSERT (ret == 3); + ASSERT (decomposed[0] == 0x004D); + ASSERT (decomposed[1] == 0x0048); + ASSERT (decomposed[2] == 0x007A); + + /* VULGAR FRACTION THREE EIGHTHS */ + ret = uc_compat_decomposition (0x215C, decomposed); + ASSERT (ret == 3); + ASSERT (decomposed[0] == 0x0033); + ASSERT (decomposed[1] == 0x2044); + ASSERT (decomposed[2] == 0x0038); + + /* MICRO SIGN */ + ret = uc_compat_decomposition (0x00B5, decomposed); + ASSERT (ret == 1); + ASSERT (decomposed[0] == 0x03BC); + + /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + ret = uc_compat_decomposition (0xFDFA, decomposed); + ASSERT (ret == 18); + ASSERT (decomposed[0] == 0x0635); + ASSERT (decomposed[1] == 0x0644); + ASSERT (decomposed[2] == 0x0649); + ASSERT (decomposed[3] == 0x0020); + ASSERT (decomposed[4] == 0x0627); + ASSERT (decomposed[5] == 0x0644); + ASSERT (decomposed[6] == 0x0644); + ASSERT (decomposed[7] == 0x0647); + ASSERT (decomposed[8] == 0x0020); + ASSERT (decomposed[9] == 0x0639); + ASSERT (decomposed[10] == 0x0644); + ASSERT (decomposed[11] == 0x064A); + ASSERT (decomposed[12] == 0x0647); + ASSERT (decomposed[13] == 0x0020); + ASSERT (decomposed[14] == 0x0648); + ASSERT (decomposed[15] == 0x0633); + ASSERT (decomposed[16] == 0x0644); + ASSERT (decomposed[17] == 0x0645); + + /* HANGUL SYLLABLE GEUL */ + ret = uc_compat_decomposition (0xAE00, decomposed); + /* See the clarification at , + section "Clarification of Hangul Jamo Handling". */ +#if 1 + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0xADF8); + ASSERT (decomposed[1] == 0x11AF); +#else + ASSERT (ret == 3); + ASSERT (decomposed[0] == 0x1100); + ASSERT (decomposed[1] == 0x1173); + ASSERT (decomposed[2] == 0x11AF); +#endif + + /* HANGUL SYLLABLE GEU */ + ret = uc_compat_decomposition (0xADF8, decomposed); + ASSERT (ret == 2); + ASSERT (decomposed[0] == 0x1100); + ASSERT (decomposed[1] == 0x1173); + + return 0; +} diff --git a/tests/uninorm/test-composition.c b/tests/uninorm/test-composition.c new file mode 100644 index 00000000..dbadbbac --- /dev/null +++ b/tests/uninorm/test-composition.c @@ -0,0 +1,66 @@ +/* Test of canonical composition of Unicode characters. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + ASSERT (uc_composition (0x0041, 0x0308) == 0x00C4); + + /* LATIN CAPITAL LETTER A WITH RING ABOVE */ + ASSERT (uc_composition (0x0041, 0x030A) == 0x00C5); + + /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + ASSERT (uc_composition (0x00C4, 0x0304) == 0x01DE); + + /* GREEK DIALYTIKA AND PERISPOMENI */ + ASSERT (uc_composition (0x00A8, 0x0342) == 0x1FC1); + + /* CIRCLED NUMBER FIFTEEN */ + ASSERT (uc_composition (0x0031, 0x0035) == 0); + + /* TRADE MARK SIGN */ + ASSERT (uc_composition (0x0054, 0x004D) == 0); + + /* HANGUL SYLLABLE GEU */ + ASSERT (uc_composition (0x1100, 0x1173) == 0xADF8); + + /* HANGUL SYLLABLE GEUL */ + ASSERT (uc_composition (0xADF8, 0x11AF) == 0xAE00); + + return 0; +} diff --git a/tests/uninorm/test-decomposing-form.c b/tests/uninorm/test-decomposing-form.c new file mode 100644 index 00000000..3802c3fe --- /dev/null +++ b/tests/uninorm/test-decomposing-form.c @@ -0,0 +1,47 @@ +/* Test of decomposing variant of a normalization form. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ASSERT (uninorm_decomposing_form (UNINORM_NFC) == UNINORM_NFD); + ASSERT (uninorm_decomposing_form (UNINORM_NFD) == UNINORM_NFD); + ASSERT (uninorm_decomposing_form (UNINORM_NFKC) == UNINORM_NFKD); + ASSERT (uninorm_decomposing_form (UNINORM_NFKD) == UNINORM_NFKD); + + return 0; +} diff --git a/tests/uninorm/test-decomposition.c b/tests/uninorm/test-decomposition.c new file mode 100644 index 00000000..684dee45 --- /dev/null +++ b/tests/uninorm/test-decomposition.c @@ -0,0 +1,220 @@ +/* Test of decomposition of Unicode characters. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ucs4_t decomposed[UC_DECOMPOSITION_MAX_LENGTH]; + int tag; + int ret; + + /* SPACE */ + ret = uc_decomposition (0x0020, &tag, decomposed); + ASSERT (ret == -1); + + /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + ret = uc_decomposition (0x00C4, &tag, decomposed); + ASSERT (ret == 2); + ASSERT (tag == UC_DECOMP_CANONICAL); + ASSERT (decomposed[0] == 0x0041); + ASSERT (decomposed[1] == 0x0308); + + /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + ret = uc_decomposition (0x01DE, &tag, decomposed); + ASSERT (ret == 2); + ASSERT (tag == UC_DECOMP_CANONICAL); + ASSERT (decomposed[0] == 0x00C4); + ASSERT (decomposed[1] == 0x0304); + + /* GREEK DIALYTIKA AND PERISPOMENI */ + ret = uc_decomposition (0x1FC1, &tag, decomposed); + ASSERT (ret == 2); + ASSERT (tag == UC_DECOMP_CANONICAL); + ASSERT (decomposed[0] == 0x00A8); + ASSERT (decomposed[1] == 0x0342); + + /* SCRIPT SMALL L */ + ret = uc_decomposition (0x2113, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_FONT); + ASSERT (decomposed[0] == 0x006C); + + /* NO-BREAK SPACE */ + ret = uc_decomposition (0x00A0, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_NOBREAK); + ASSERT (decomposed[0] == 0x0020); + + /* ARABIC LETTER VEH INITIAL FORM */ + ret = uc_decomposition (0xFB6C, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_INITIAL); + ASSERT (decomposed[0] == 0x06A4); + + /* ARABIC LETTER VEH MEDIAL FORM */ + ret = uc_decomposition (0xFB6D, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_MEDIAL); + ASSERT (decomposed[0] == 0x06A4); + + /* ARABIC LETTER VEH FINAL FORM */ + ret = uc_decomposition (0xFB6B, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_FINAL); + ASSERT (decomposed[0] == 0x06A4); + + /* ARABIC LETTER VEH ISOLATED FORM */ + ret = uc_decomposition (0xFB6A, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_ISOLATED); + ASSERT (decomposed[0] == 0x06A4); + + /* CIRCLED NUMBER FIFTEEN */ + ret = uc_decomposition (0x246E, &tag, decomposed); + ASSERT (ret == 2); + ASSERT (tag == UC_DECOMP_CIRCLE); + ASSERT (decomposed[0] == 0x0031); + ASSERT (decomposed[1] == 0x0035); + + /* TRADE MARK SIGN */ + ret = uc_decomposition (0x2122, &tag, decomposed); + ASSERT (ret == 2); + ASSERT (tag == UC_DECOMP_SUPER); + ASSERT (decomposed[0] == 0x0054); + ASSERT (decomposed[1] == 0x004D); + + /* LATIN SUBSCRIPT SMALL LETTER I */ + ret = uc_decomposition (0x1D62, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_SUB); + ASSERT (decomposed[0] == 0x0069); + + /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + ret = uc_decomposition (0xFE35, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_VERTICAL); + ASSERT (decomposed[0] == 0x0028); + + /* FULLWIDTH LATIN CAPITAL LETTER A */ + ret = uc_decomposition (0xFF21, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_WIDE); + ASSERT (decomposed[0] == 0x0041); + + /* HALFWIDTH IDEOGRAPHIC COMMA */ + ret = uc_decomposition (0xFF64, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_NARROW); + ASSERT (decomposed[0] == 0x3001); + + /* SMALL IDEOGRAPHIC COMMA */ + ret = uc_decomposition (0xFE51, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_SMALL); + ASSERT (decomposed[0] == 0x3001); + + /* SQUARE MHZ */ + ret = uc_decomposition (0x3392, &tag, decomposed); + ASSERT (ret == 3); + ASSERT (tag == UC_DECOMP_SQUARE); + ASSERT (decomposed[0] == 0x004D); + ASSERT (decomposed[1] == 0x0048); + ASSERT (decomposed[2] == 0x007A); + + /* VULGAR FRACTION THREE EIGHTHS */ + ret = uc_decomposition (0x215C, &tag, decomposed); + ASSERT (ret == 3); + ASSERT (tag == UC_DECOMP_FRACTION); + ASSERT (decomposed[0] == 0x0033); + ASSERT (decomposed[1] == 0x2044); + ASSERT (decomposed[2] == 0x0038); + + /* MICRO SIGN */ + ret = uc_decomposition (0x00B5, &tag, decomposed); + ASSERT (ret == 1); + ASSERT (tag == UC_DECOMP_COMPAT); + ASSERT (decomposed[0] == 0x03BC); + + /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + ret = uc_decomposition (0xFDFA, &tag, decomposed); + ASSERT (ret == 18); + ASSERT (tag == UC_DECOMP_ISOLATED); + ASSERT (decomposed[0] == 0x0635); + ASSERT (decomposed[1] == 0x0644); + ASSERT (decomposed[2] == 0x0649); + ASSERT (decomposed[3] == 0x0020); + ASSERT (decomposed[4] == 0x0627); + ASSERT (decomposed[5] == 0x0644); + ASSERT (decomposed[6] == 0x0644); + ASSERT (decomposed[7] == 0x0647); + ASSERT (decomposed[8] == 0x0020); + ASSERT (decomposed[9] == 0x0639); + ASSERT (decomposed[10] == 0x0644); + ASSERT (decomposed[11] == 0x064A); + ASSERT (decomposed[12] == 0x0647); + ASSERT (decomposed[13] == 0x0020); + ASSERT (decomposed[14] == 0x0648); + ASSERT (decomposed[15] == 0x0633); + ASSERT (decomposed[16] == 0x0644); + ASSERT (decomposed[17] == 0x0645); + + /* HANGUL SYLLABLE GEUL */ + ret = uc_decomposition (0xAE00, &tag, decomposed); + /* See the clarification at , + section "Clarification of Hangul Jamo Handling". */ +#if 1 + ASSERT (ret == 2); + ASSERT (tag == UC_DECOMP_CANONICAL); + ASSERT (decomposed[0] == 0xADF8); + ASSERT (decomposed[1] == 0x11AF); +#else + ASSERT (ret == 3); + ASSERT (tag == UC_DECOMP_CANONICAL); + ASSERT (decomposed[0] == 0x1100); + ASSERT (decomposed[1] == 0x1173); + ASSERT (decomposed[2] == 0x11AF); +#endif + + /* HANGUL SYLLABLE GEU */ + ret = uc_decomposition (0xADF8, &tag, decomposed); + ASSERT (ret == 2); + ASSERT (tag == UC_DECOMP_CANONICAL); + ASSERT (decomposed[0] == 0x1100); + ASSERT (decomposed[1] == 0x1173); + + return 0; +} diff --git a/tests/uninorm/test-nfc.c b/tests/uninorm/test-nfc.c new file mode 100644 index 00000000..ca957102 --- /dev/null +++ b/tests/uninorm/test-nfc.c @@ -0,0 +1,44 @@ +/* Test of canonical normalization of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#if !WOE32DLL +/* Check that UNINORM_NFC is defined and links. */ +uninorm_t n = UNINORM_NFC; +#endif + +extern void test_u8_nfc (void); +extern void test_u16_nfc (void); +extern void test_u32_nfc (void); + +int +main () +{ + /* Check that UNINORM_NFC is defined and links. */ + uninorm_t nf = UNINORM_NFC; + (void) nf; + + test_u32_nfc (); + test_u16_nfc (); + test_u8_nfc (); + + return 0; +} diff --git a/tests/uninorm/test-nfd.c b/tests/uninorm/test-nfd.c new file mode 100644 index 00000000..2a7e55b0 --- /dev/null +++ b/tests/uninorm/test-nfd.c @@ -0,0 +1,44 @@ +/* Test of canonical decomposition of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#if !WOE32DLL +/* Check that UNINORM_NFD is defined and links. */ +uninorm_t n = UNINORM_NFD; +#endif + +extern void test_u8_nfd (void); +extern void test_u16_nfd (void); +extern void test_u32_nfd (void); + +int +main () +{ + /* Check that UNINORM_NFD is defined and links. */ + uninorm_t nf = UNINORM_NFD; + (void) nf; + + test_u32_nfd (); + test_u16_nfd (); + test_u8_nfd (); + + return 0; +} diff --git a/tests/uninorm/test-nfkc.c b/tests/uninorm/test-nfkc.c new file mode 100644 index 00000000..2e57a15e --- /dev/null +++ b/tests/uninorm/test-nfkc.c @@ -0,0 +1,44 @@ +/* Test of compatibility normalization of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#if !WOE32DLL +/* Check that UNINORM_NFKC is defined and links. */ +uninorm_t n = UNINORM_NFKC; +#endif + +extern void test_u8_nfkc (void); +extern void test_u16_nfkc (void); +extern void test_u32_nfkc (void); + +int +main () +{ + /* Check that UNINORM_NFKC is defined and links. */ + uninorm_t nf = UNINORM_NFKC; + (void) nf; + + test_u32_nfkc (); + test_u16_nfkc (); + test_u8_nfkc (); + + return 0; +} diff --git a/tests/uninorm/test-nfkd.c b/tests/uninorm/test-nfkd.c new file mode 100644 index 00000000..8e330feb --- /dev/null +++ b/tests/uninorm/test-nfkd.c @@ -0,0 +1,44 @@ +/* Test of compatibility decomposition of Unicode strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#if !WOE32DLL +/* Check that UNINORM_NFKD is defined and links. */ +uninorm_t n = UNINORM_NFKD; +#endif + +extern void test_u8_nfkd (void); +extern void test_u16_nfkd (void); +extern void test_u32_nfkd (void); + +int +main () +{ + /* Check that UNINORM_NFKD is defined and links. */ + uninorm_t nf = UNINORM_NFKD; + (void) nf; + + test_u32_nfkd (); + test_u16_nfkd (); + test_u8_nfkd (); + + return 0; +} diff --git a/tests/uninorm/test-u16-nfc.c b/tests/uninorm/test-u16-nfc.c new file mode 100644 index 00000000..1bf9a94d --- /dev/null +++ b/tests/uninorm/test-u16-nfc.c @@ -0,0 +1,345 @@ +/* Test of canonical normalization of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U16_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint16_t *input, size_t input_length, + const uint16_t *expected, size_t expected_length) +{ + size_t length; + uint16_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u16_normalize (UNINORM_NFC, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint16_t *preallocated; + + length = expected_length - 1; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_normalize (UNINORM_NFC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint16_t *preallocated; + + length = expected_length; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_normalize (UNINORM_NFC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u16_nfc (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint16_t input[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint16_t input[] = { 0x00C4 }; + static const uint16_t decomposed[] = { 0x0041, 0x0308 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint16_t input[] = { 0x01DE }; + static const uint16_t decomposed[] = { 0x0041, 0x0308, 0x0304 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* ANGSTROM SIGN */ + static const uint16_t input[] = { 0x212B }; + static const uint16_t decomposed[] = { 0x0041, 0x030A }; + static const uint16_t expected[] = { 0x00C5 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); + ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint16_t input[] = { 0x1FC1 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint16_t input[] = { 0x2113 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint16_t input[] = { 0x00A0 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint16_t input[] = { 0xFB6C }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint16_t input[] = { 0xFB6D }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint16_t input[] = { 0xFB6B }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint16_t input[] = { 0xFB6A }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint16_t input[] = { 0x246E }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint16_t input[] = { 0x2122 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint16_t input[] = { 0x1D62 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint16_t input[] = { 0xFE35 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint16_t input[] = { 0xFF21 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint16_t input[] = { 0xFF64 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint16_t input[] = { 0xFE51 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SQUARE MHZ */ + static const uint16_t input[] = { 0x3392 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint16_t input[] = { 0x215C }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* MICRO SIGN */ + static const uint16_t input[] = { 0x00B5 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint16_t input[] = { 0xFDFA }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint16_t input[] = { 0xAE00 }; + static const uint16_t decomposed[] = { 0x1100, 0x1173, 0x11AF }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint16_t input[] = { 0xADF8 }; + static const uint16_t decomposed[] = { 0x1100, 0x1173 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint16_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint16_t decomposed[] = + { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', + 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' + }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint16_t *input = (uint16_t *) malloc (2 * m * sizeof (uint16_t)); + if (input != NULL) + { + uint16_t *expected = input + m; + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint16_t *p; + size_t i; + + input[0] = 0x0041; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + break; + + case 1: + for (i = 0; i < m2; i++) + *p++ = 0x0300; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0x0319; + *p++ = 0x0300; + } + for (; i < m1; i++) + *p++ = 0x0319; + break; + + default: + abort (); + } + + expected[0] = 0x00C0; + p = expected + 1; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2 - 1; i++) + *p++ = 0x0300; + + for (; repeat > 0; repeat--) + { + ASSERT (check (input, m, expected, m - 1) == 0); + ASSERT (check (expected, m - 1, expected, m - 1) == 0); + } + + free (input); + } + } + } +} + +#else + +void +test_u16_nfc (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u16-nfd.c b/tests/uninorm/test-u16-nfd.c new file mode 100644 index 00000000..34789b8d --- /dev/null +++ b/tests/uninorm/test-u16-nfd.c @@ -0,0 +1,329 @@ +/* Test of canonical decomposition of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U16_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint16_t *input, size_t input_length, + const uint16_t *expected, size_t expected_length) +{ + size_t length; + uint16_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u16_normalize (UNINORM_NFD, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint16_t *preallocated; + + length = expected_length - 1; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_normalize (UNINORM_NFD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint16_t *preallocated; + + length = expected_length; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_normalize (UNINORM_NFD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u16_nfd (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint16_t input[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint16_t input[] = { 0x00C4 }; + static const uint16_t expected[] = { 0x0041, 0x0308 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint16_t input[] = { 0x01DE }; + static const uint16_t expected[] = { 0x0041, 0x0308, 0x0304 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint16_t input[] = { 0x1FC1 }; + static const uint16_t expected[] = { 0x00A8, 0x0342 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint16_t input[] = { 0x2113 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint16_t input[] = { 0x00A0 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint16_t input[] = { 0xFB6C }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint16_t input[] = { 0xFB6D }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint16_t input[] = { 0xFB6B }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint16_t input[] = { 0xFB6A }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint16_t input[] = { 0x246E }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint16_t input[] = { 0x2122 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint16_t input[] = { 0x1D62 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint16_t input[] = { 0xFE35 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint16_t input[] = { 0xFF21 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint16_t input[] = { 0xFF64 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint16_t input[] = { 0xFE51 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SQUARE MHZ */ + static const uint16_t input[] = { 0x3392 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint16_t input[] = { 0x215C }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* MICRO SIGN */ + static const uint16_t input[] = { 0x00B5 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint16_t input[] = { 0xFDFA }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint16_t input[] = { 0xAE00 }; + static const uint16_t expected[] = { 0x1100, 0x1173, 0x11AF }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint16_t input[] = { 0xADF8 }; + static const uint16_t expected[] = { 0x1100, 0x1173 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint16_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint16_t expected[] = + { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', + 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint16_t *input = (uint16_t *) malloc (2 * m * sizeof (uint16_t)); + if (input != NULL) + { + uint16_t *expected = input + m; + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint16_t *p; + size_t i; + + input[0] = 0x0041; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + break; + + case 1: + for (i = 0; i < m2; i++) + *p++ = 0x0300; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0x0319; + *p++ = 0x0300; + } + for (; i < m1; i++) + *p++ = 0x0319; + break; + + default: + abort (); + } + + expected[0] = 0x0041; + p = expected + 1; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + + for (; repeat > 0; repeat--) + ASSERT (check (input, m, expected, m) == 0); + + free (input); + } + } + } +} + +#else + +void +test_u16_nfd (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u16-nfkc.c b/tests/uninorm/test-u16-nfkc.c new file mode 100644 index 00000000..4ac8f7ed --- /dev/null +++ b/tests/uninorm/test-u16-nfkc.c @@ -0,0 +1,393 @@ +/* Test of compatibility normalization of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U16_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint16_t *input, size_t input_length, + const uint16_t *expected, size_t expected_length) +{ + size_t length; + uint16_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u16_normalize (UNINORM_NFKC, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint16_t *preallocated; + + length = expected_length - 1; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint16_t *preallocated; + + length = expected_length; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u16_nfkc (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint16_t input[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint16_t input[] = { 0x00C4 }; + static const uint16_t decomposed[] = { 0x0041, 0x0308 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint16_t input[] = { 0x01DE }; + static const uint16_t decomposed[] = { 0x0041, 0x0308, 0x0304 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* ANGSTROM SIGN */ + static const uint16_t input[] = { 0x212B }; + static const uint16_t decomposed[] = { 0x0041, 0x030A }; + static const uint16_t expected[] = { 0x00C5 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); + ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint16_t input[] = { 0x1FC1 }; + static const uint16_t decomposed[] = { 0x0020, 0x0308, 0x0342 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint16_t input[] = { 0x2113 }; + static const uint16_t decomposed[] = { 0x006C }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint16_t input[] = { 0x00A0 }; + static const uint16_t decomposed[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint16_t input[] = { 0xFB6C }; + static const uint16_t decomposed[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint16_t input[] = { 0xFB6D }; + static const uint16_t decomposed[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint16_t input[] = { 0xFB6B }; + static const uint16_t decomposed[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint16_t input[] = { 0xFB6A }; + static const uint16_t decomposed[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint16_t input[] = { 0x246E }; + static const uint16_t decomposed[] = { 0x0031, 0x0035 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint16_t input[] = { 0x2122 }; + static const uint16_t decomposed[] = { 0x0054, 0x004D }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint16_t input[] = { 0x1D62 }; + static const uint16_t decomposed[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint16_t input[] = { 0xFE35 }; + static const uint16_t decomposed[] = { 0x0028 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint16_t input[] = { 0xFF21 }; + static const uint16_t decomposed[] = { 0x0041 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint16_t input[] = { 0xFF64 }; + static const uint16_t decomposed[] = { 0x3001 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint16_t input[] = { 0xFE51 }; + static const uint16_t decomposed[] = { 0x3001 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* SQUARE MHZ */ + static const uint16_t input[] = { 0x3392 }; + static const uint16_t decomposed[] = { 0x004D, 0x0048, 0x007A }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint16_t input[] = { 0x215C }; + static const uint16_t decomposed[] = { 0x0033, 0x2044, 0x0038 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* MICRO SIGN */ + static const uint16_t input[] = { 0x00B5 }; + static const uint16_t decomposed[] = { 0x03BC }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint16_t input[] = { 0xFDFA }; + static const uint16_t decomposed[] = + { 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, + 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645 + }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint16_t input[] = { 0xAE00 }; + static const uint16_t decomposed[] = { 0x1100, 0x1173, 0x11AF }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint16_t input[] = { 0xADF8 }; + static const uint16_t decomposed[] = { 0x1100, 0x1173 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint16_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint16_t decomposed[] = + { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', + 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' + }; + static const uint16_t expected[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); + ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint16_t *input = (uint16_t *) malloc (2 * m * sizeof (uint16_t)); + if (input != NULL) + { + uint16_t *expected = input + m; + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint16_t *p; + size_t i; + + input[0] = 0x0041; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + break; + + case 1: + for (i = 0; i < m2; i++) + *p++ = 0x0300; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0x0319; + *p++ = 0x0300; + } + for (; i < m1; i++) + *p++ = 0x0319; + break; + + default: + abort (); + } + + expected[0] = 0x00C0; + p = expected + 1; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2 - 1; i++) + *p++ = 0x0300; + + for (; repeat > 0; repeat--) + { + ASSERT (check (input, m, expected, m - 1) == 0); + ASSERT (check (expected, m - 1, expected, m - 1) == 0); + } + + free (input); + } + } + } +} + +#else + +void +test_u16_nfkc (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u16-nfkd.c b/tests/uninorm/test-u16-nfkd.c new file mode 100644 index 00000000..6dfa39f3 --- /dev/null +++ b/tests/uninorm/test-u16-nfkd.c @@ -0,0 +1,349 @@ +/* Test of compatibility decomposition of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U16_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint16_t *input, size_t input_length, + const uint16_t *expected, size_t expected_length) +{ + size_t length; + uint16_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u16_normalize (UNINORM_NFKD, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint16_t *preallocated; + + length = expected_length - 1; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint16_t *preallocated; + + length = expected_length; + preallocated = (uint16_t *) malloc (length * sizeof (uint16_t)); + result = u16_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u16_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u16_nfkd (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint16_t input[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint16_t input[] = { 0x00C4 }; + static const uint16_t expected[] = { 0x0041, 0x0308 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint16_t input[] = { 0x01DE }; + static const uint16_t expected[] = { 0x0041, 0x0308, 0x0304 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint16_t input[] = { 0x1FC1 }; + static const uint16_t expected[] = { 0x0020, 0x0308, 0x0342 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint16_t input[] = { 0x2113 }; + static const uint16_t expected[] = { 0x006C }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint16_t input[] = { 0x00A0 }; + static const uint16_t expected[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint16_t input[] = { 0xFB6C }; + static const uint16_t expected[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint16_t input[] = { 0xFB6D }; + static const uint16_t expected[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint16_t input[] = { 0xFB6B }; + static const uint16_t expected[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint16_t input[] = { 0xFB6A }; + static const uint16_t expected[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint16_t input[] = { 0x246E }; + static const uint16_t expected[] = { 0x0031, 0x0035 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint16_t input[] = { 0x2122 }; + static const uint16_t expected[] = { 0x0054, 0x004D }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint16_t input[] = { 0x1D62 }; + static const uint16_t expected[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint16_t input[] = { 0xFE35 }; + static const uint16_t expected[] = { 0x0028 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint16_t input[] = { 0xFF21 }; + static const uint16_t expected[] = { 0x0041 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint16_t input[] = { 0xFF64 }; + static const uint16_t expected[] = { 0x3001 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint16_t input[] = { 0xFE51 }; + static const uint16_t expected[] = { 0x3001 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SQUARE MHZ */ + static const uint16_t input[] = { 0x3392 }; + static const uint16_t expected[] = { 0x004D, 0x0048, 0x007A }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint16_t input[] = { 0x215C }; + static const uint16_t expected[] = { 0x0033, 0x2044, 0x0038 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* MICRO SIGN */ + static const uint16_t input[] = { 0x00B5 }; + static const uint16_t expected[] = { 0x03BC }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint16_t input[] = { 0xFDFA }; + static const uint16_t expected[] = + { 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, + 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645 + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint16_t input[] = { 0xAE00 }; + static const uint16_t expected[] = { 0x1100, 0x1173, 0x11AF }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint16_t input[] = { 0xADF8 }; + static const uint16_t expected[] = { 0x1100, 0x1173 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint16_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint16_t expected[] = + { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', + 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint16_t *input = (uint16_t *) malloc (2 * m * sizeof (uint16_t)); + if (input != NULL) + { + uint16_t *expected = input + m; + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint16_t *p; + size_t i; + + input[0] = 0x0041; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + break; + + case 1: + for (i = 0; i < m2; i++) + *p++ = 0x0300; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0x0319; + *p++ = 0x0300; + } + for (; i < m1; i++) + *p++ = 0x0319; + break; + + default: + abort (); + } + + expected[0] = 0x0041; + p = expected + 1; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + + for (; repeat > 0; repeat--) + ASSERT (check (input, m, expected, m) == 0); + + free (input); + } + } + } +} + +#else + +void +test_u16_nfkd (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u16-normcmp.c b/tests/uninorm/test-u16-normcmp.c new file mode 100644 index 00000000..3cf947a3 --- /dev/null +++ b/tests/uninorm/test-u16-normcmp.c @@ -0,0 +1,130 @@ +/* Test of normalization insensitive comparison of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u16-normcmp.h" + +static void +test_nonascii (int (*my_normcmp) (const uint16_t *, size_t, const uint16_t *, size_t, uninorm_t, int *)) +{ + /* Normalization effects. */ + { + static const uint16_t input1[] = { 'H', 0x00F6, 'h', 'l', 'e' }; + static const uint16_t input2[] = { 'H', 'o', 0x0308, 'h', 'l', 'e' }; + static const uint16_t input3[] = { 'H', 0x00F6, 'h', 'l', 'e', 'n' }; + static const uint16_t input4[] = { 'H', 'o', 0x0308, 'h', 'l', 'e', 'n' }; + static const uint16_t input5[] = { 'H', 'u', 'r', 'z' }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input3, SIZEOF (input3), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input4, SIZEOF (input4), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input1, SIZEOF (input1), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input1, SIZEOF (input1), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint16_t input1[] = { 0x00C4 }; + static const uint16_t input2[] = { 0x0041, 0x0308 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint16_t input1[] = { 0x01DE }; + static const uint16_t input2[] = { 0x0041, 0x0308, 0x0304 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint16_t input1[] = { 0x1FC1 }; + static const uint16_t input2[] = { 0x00A8, 0x0342 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEUL */ + static const uint16_t input1[] = { 0xAE00 }; + static const uint16_t input2[] = { 0xADF8, 0x11AF }; + static const uint16_t input3[] = { 0x1100, 0x1173, 0x11AF }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input1, SIZEOF (input1), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEU */ + static const uint16_t input1[] = { 0xADF8 }; + static const uint16_t input2[] = { 0x1100, 0x1173 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } +} + +int +main () +{ + test_ascii (u16_normcmp, UNINORM_NFD); + test_nonascii (u16_normcmp); + + return 0; +} diff --git a/tests/uninorm/test-u16-normcmp.h b/tests/uninorm/test-u16-normcmp.h new file mode 100644 index 00000000..ea7def8f --- /dev/null +++ b/tests/uninorm/test-u16-normcmp.h @@ -0,0 +1,69 @@ +/* Test of normalization insensitive comparison of UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +static void +test_ascii (int (*my_normcmp) (const uint16_t *, size_t, const uint16_t *, size_t, uninorm_t, int *), + uninorm_t nf) +{ + /* Empty string. */ + { + int cmp; + + ASSERT (my_normcmp (NULL, 0, NULL, 0, nf, &cmp) == 0); + ASSERT (cmp == 0); + } + { + static const uint16_t input[] = { 'x', 'y' }; + int cmp; + + ASSERT (my_normcmp (input, SIZEOF (input), NULL, 0, nf, &cmp) == 0); + ASSERT (cmp == 1); + + ASSERT (my_normcmp (NULL, 0, input, SIZEOF (input), nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input, SIZEOF (input), input, SIZEOF (input), nf, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Normal lexicographic order. */ + { + static const uint16_t input1[] = { 'A', 'm', 'e', 'r', 'i', 'c', 'a' }; + static const uint16_t input2[] = { 'A', 'm', 'i', 'g', 'o' }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); + ASSERT (cmp == 1); + } + + /* Shorter and longer strings. */ + { + static const uint16_t input1[] = { 'R', 'e', 'a', 'g', 'a', 'n' }; + static const uint16_t input2[] = { 'R', 'e', 'a', 'g', 'a', 'n', 'o', 'm', 'i', 'c', 's' }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); + ASSERT (cmp == 1); + } +} diff --git a/tests/uninorm/test-u16-normcoll.c b/tests/uninorm/test-u16-normcoll.c new file mode 100644 index 00000000..d83799dd --- /dev/null +++ b/tests/uninorm/test-u16-normcoll.c @@ -0,0 +1,49 @@ +/* Test of locale dependent, normalization insensitive comparison of + UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u16-normcmp.h" +int +main () +{ + /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_normcoll + on ASCII strings should behave like strcmp as well. */ + test_ascii (u16_normcoll, UNINORM_NFC); + + return 0; +} diff --git a/tests/uninorm/test-u32-nfc-big.c b/tests/uninorm/test-u32-nfc-big.c new file mode 100644 index 00000000..2a1b611f --- /dev/null +++ b/tests/uninorm/test-u32-nfc-big.c @@ -0,0 +1,125 @@ +/* Test of Unicode compliance of canonical normalization of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U32_NORMALIZE + +#include "uninorm.h" + +#include + +#include "unistr.h" +#include "progname.h" +#include "test-u32-normalize-big.h" + +static int +check (const uint32_t *c1, size_t c1_length, + const uint32_t *c2, size_t c2_length, + const uint32_t *c3, size_t c3_length, + const uint32_t *c4, size_t c4_length, + const uint32_t *c5, size_t c5_length) +{ + /* Check + c2 == NFC(c1) == NFC(c2) == NFC(c3) + c4 == NFC(c4) == NFC(c5) + */ + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFC, c1, c1_length, NULL, &length); + if (!(result != NULL + && length == c2_length + && u32_cmp (result, c2, c2_length) == 0)) + return 1; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFC, c2, c2_length, NULL, &length); + if (!(result != NULL + && length == c2_length + && u32_cmp (result, c2, c2_length) == 0)) + return 2; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFC, c3, c3_length, NULL, &length); + if (!(result != NULL + && length == c2_length + && u32_cmp (result, c2, c2_length) == 0)) + return 3; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFC, c4, c4_length, NULL, &length); + if (!(result != NULL + && length == c4_length + && u32_cmp (result, c4, c4_length) == 0)) + return 4; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFC, c5, c5_length, NULL, &length); + if (!(result != NULL + && length == c4_length + && u32_cmp (result, c4, c4_length) == 0)) + return 5; + free (result); + } + return 0; +} + +int +main (int argc, char *argv[]) +{ + struct normalization_test_file file; + + set_program_name (argv[0]); + read_normalization_test_file (argv[1], &file); + + test_specific (&file, check); + test_other (&file, UNINORM_NFC); + + return 0; +} + +#else + +#include + +int +main () +{ + fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); + return 77; +} + +#endif diff --git a/tests/uninorm/test-u32-nfc-big.sh b/tests/uninorm/test-u32-nfc-big.sh new file mode 100755 index 00000000..93d0003d --- /dev/null +++ b/tests/uninorm/test-u32-nfc-big.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec ./test-u32-nfc-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" diff --git a/tests/uninorm/test-u32-nfc.c b/tests/uninorm/test-u32-nfc.c new file mode 100644 index 00000000..0d8311cc --- /dev/null +++ b/tests/uninorm/test-u32-nfc.c @@ -0,0 +1,345 @@ +/* Test of canonical normalization of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U32_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint32_t *input, size_t input_length, + const uint32_t *expected, size_t expected_length) +{ + size_t length; + uint32_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u32_normalize (UNINORM_NFC, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint32_t *preallocated; + + length = expected_length - 1; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_normalize (UNINORM_NFC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint32_t *preallocated; + + length = expected_length; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_normalize (UNINORM_NFC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u32_nfc (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint32_t input[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint32_t input[] = { 0x00C4 }; + static const uint32_t decomposed[] = { 0x0041, 0x0308 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint32_t input[] = { 0x01DE }; + static const uint32_t decomposed[] = { 0x0041, 0x0308, 0x0304 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* ANGSTROM SIGN */ + static const uint32_t input[] = { 0x212B }; + static const uint32_t decomposed[] = { 0x0041, 0x030A }; + static const uint32_t expected[] = { 0x00C5 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); + ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint32_t input[] = { 0x1FC1 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint32_t input[] = { 0x2113 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint32_t input[] = { 0x00A0 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint32_t input[] = { 0xFB6C }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint32_t input[] = { 0xFB6D }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint32_t input[] = { 0xFB6B }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint32_t input[] = { 0xFB6A }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint32_t input[] = { 0x246E }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint32_t input[] = { 0x2122 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint32_t input[] = { 0x1D62 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint32_t input[] = { 0xFE35 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint32_t input[] = { 0xFF21 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint32_t input[] = { 0xFF64 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint32_t input[] = { 0xFE51 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SQUARE MHZ */ + static const uint32_t input[] = { 0x3392 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint32_t input[] = { 0x215C }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* MICRO SIGN */ + static const uint32_t input[] = { 0x00B5 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint32_t input[] = { 0xFDFA }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint32_t input[] = { 0xAE00 }; + static const uint32_t decomposed[] = { 0x1100, 0x1173, 0x11AF }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint32_t input[] = { 0xADF8 }; + static const uint32_t decomposed[] = { 0x1100, 0x1173 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint32_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint32_t decomposed[] = + { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', + 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' + }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint32_t *input = (uint32_t *) malloc (2 * m * sizeof (uint32_t)); + if (input != NULL) + { + uint32_t *expected = input + m; + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint32_t *p; + size_t i; + + input[0] = 0x0041; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + break; + + case 1: + for (i = 0; i < m2; i++) + *p++ = 0x0300; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0x0319; + *p++ = 0x0300; + } + for (; i < m1; i++) + *p++ = 0x0319; + break; + + default: + abort (); + } + + expected[0] = 0x00C0; + p = expected + 1; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2 - 1; i++) + *p++ = 0x0300; + + for (; repeat > 0; repeat--) + { + ASSERT (check (input, m, expected, m - 1) == 0); + ASSERT (check (expected, m - 1, expected, m - 1) == 0); + } + + free (input); + } + } + } +} + +#else + +void +test_u32_nfc (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u32-nfd-big.c b/tests/uninorm/test-u32-nfd-big.c new file mode 100644 index 00000000..9bfd0d89 --- /dev/null +++ b/tests/uninorm/test-u32-nfd-big.c @@ -0,0 +1,125 @@ +/* Test of Unicode compliance of canonical decomposition of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U32_NORMALIZE + +#include "uninorm.h" + +#include + +#include "unistr.h" +#include "progname.h" +#include "test-u32-normalize-big.h" + +static int +check (const uint32_t *c1, size_t c1_length, + const uint32_t *c2, size_t c2_length, + const uint32_t *c3, size_t c3_length, + const uint32_t *c4, size_t c4_length, + const uint32_t *c5, size_t c5_length) +{ + /* Check + c3 == NFD(c1) == NFD(c2) == NFD(c3) + c5 == NFD(c4) == NFD(c5) + */ + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFD, c1, c1_length, NULL, &length); + if (!(result != NULL + && length == c3_length + && u32_cmp (result, c3, c3_length) == 0)) + return 1; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFD, c2, c2_length, NULL, &length); + if (!(result != NULL + && length == c3_length + && u32_cmp (result, c3, c3_length) == 0)) + return 2; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFD, c3, c3_length, NULL, &length); + if (!(result != NULL + && length == c3_length + && u32_cmp (result, c3, c3_length) == 0)) + return 3; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFD, c4, c4_length, NULL, &length); + if (!(result != NULL + && length == c5_length + && u32_cmp (result, c5, c5_length) == 0)) + return 4; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFD, c5, c5_length, NULL, &length); + if (!(result != NULL + && length == c5_length + && u32_cmp (result, c5, c5_length) == 0)) + return 5; + free (result); + } + return 0; +} + +int +main (int argc, char *argv[]) +{ + struct normalization_test_file file; + + set_program_name (argv[0]); + read_normalization_test_file (argv[1], &file); + + test_specific (&file, check); + test_other (&file, UNINORM_NFD); + + return 0; +} + +#else + +#include + +int +main () +{ + fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); + return 77; +} + +#endif diff --git a/tests/uninorm/test-u32-nfd-big.sh b/tests/uninorm/test-u32-nfd-big.sh new file mode 100755 index 00000000..3cfe2c56 --- /dev/null +++ b/tests/uninorm/test-u32-nfd-big.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec ./test-u32-nfd-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" diff --git a/tests/uninorm/test-u32-nfd.c b/tests/uninorm/test-u32-nfd.c new file mode 100644 index 00000000..f7b2d8df --- /dev/null +++ b/tests/uninorm/test-u32-nfd.c @@ -0,0 +1,329 @@ +/* Test of canonical decomposition of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U32_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint32_t *input, size_t input_length, + const uint32_t *expected, size_t expected_length) +{ + size_t length; + uint32_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u32_normalize (UNINORM_NFD, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint32_t *preallocated; + + length = expected_length - 1; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_normalize (UNINORM_NFD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint32_t *preallocated; + + length = expected_length; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_normalize (UNINORM_NFD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u32_nfd (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint32_t input[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint32_t input[] = { 0x00C4 }; + static const uint32_t expected[] = { 0x0041, 0x0308 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint32_t input[] = { 0x01DE }; + static const uint32_t expected[] = { 0x0041, 0x0308, 0x0304 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint32_t input[] = { 0x1FC1 }; + static const uint32_t expected[] = { 0x00A8, 0x0342 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint32_t input[] = { 0x2113 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint32_t input[] = { 0x00A0 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint32_t input[] = { 0xFB6C }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint32_t input[] = { 0xFB6D }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint32_t input[] = { 0xFB6B }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint32_t input[] = { 0xFB6A }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint32_t input[] = { 0x246E }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint32_t input[] = { 0x2122 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint32_t input[] = { 0x1D62 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint32_t input[] = { 0xFE35 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint32_t input[] = { 0xFF21 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint32_t input[] = { 0xFF64 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint32_t input[] = { 0xFE51 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SQUARE MHZ */ + static const uint32_t input[] = { 0x3392 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint32_t input[] = { 0x215C }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* MICRO SIGN */ + static const uint32_t input[] = { 0x00B5 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint32_t input[] = { 0xFDFA }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint32_t input[] = { 0xAE00 }; + static const uint32_t expected[] = { 0x1100, 0x1173, 0x11AF }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint32_t input[] = { 0xADF8 }; + static const uint32_t expected[] = { 0x1100, 0x1173 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint32_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint32_t expected[] = + { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', + 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint32_t *input = (uint32_t *) malloc (2 * m * sizeof (uint32_t)); + if (input != NULL) + { + uint32_t *expected = input + m; + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint32_t *p; + size_t i; + + input[0] = 0x0041; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + break; + + case 1: + for (i = 0; i < m2; i++) + *p++ = 0x0300; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0x0319; + *p++ = 0x0300; + } + for (; i < m1; i++) + *p++ = 0x0319; + break; + + default: + abort (); + } + + expected[0] = 0x0041; + p = expected + 1; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + + for (; repeat > 0; repeat--) + ASSERT (check (input, m, expected, m) == 0); + + free (input); + } + } + } +} + +#else + +void +test_u32_nfd (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u32-nfkc-big.c b/tests/uninorm/test-u32-nfkc-big.c new file mode 100644 index 00000000..340fe65b --- /dev/null +++ b/tests/uninorm/test-u32-nfkc-big.c @@ -0,0 +1,122 @@ +/* Test of Unicode compliance of compatibility normalization of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U32_NORMALIZE + +#include "uninorm.h" + +#include + +#include "unistr.h" +#include "progname.h" +#include "test-u32-normalize-big.h" + +static int +check (const uint32_t *c1, size_t c1_length, + const uint32_t *c2, size_t c2_length, + const uint32_t *c3, size_t c3_length, + const uint32_t *c4, size_t c4_length, + const uint32_t *c5, size_t c5_length) +{ + /* Check c4 == NFKC(c1) == NFKC(c2) == NFKC(c3) == NFKC(c4) == NFKC(c5). */ + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFKC, c1, c1_length, NULL, &length); + if (!(result != NULL + && length == c4_length + && u32_cmp (result, c4, c4_length) == 0)) + return 1; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFKC, c2, c2_length, NULL, &length); + if (!(result != NULL + && length == c4_length + && u32_cmp (result, c4, c4_length) == 0)) + return 2; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFKC, c3, c3_length, NULL, &length); + if (!(result != NULL + && length == c4_length + && u32_cmp (result, c4, c4_length) == 0)) + return 3; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFKC, c4, c4_length, NULL, &length); + if (!(result != NULL + && length == c4_length + && u32_cmp (result, c4, c4_length) == 0)) + return 4; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFKC, c5, c5_length, NULL, &length); + if (!(result != NULL + && length == c4_length + && u32_cmp (result, c4, c4_length) == 0)) + return 5; + free (result); + } + return 0; +} + +int +main (int argc, char *argv[]) +{ + struct normalization_test_file file; + + set_program_name (argv[0]); + read_normalization_test_file (argv[1], &file); + + test_specific (&file, check); + test_other (&file, UNINORM_NFKC); + + return 0; +} + +#else + +#include + +int +main () +{ + fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); + return 77; +} + +#endif diff --git a/tests/uninorm/test-u32-nfkc-big.sh b/tests/uninorm/test-u32-nfkc-big.sh new file mode 100755 index 00000000..cd816196 --- /dev/null +++ b/tests/uninorm/test-u32-nfkc-big.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec ./test-u32-nfkc-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" diff --git a/tests/uninorm/test-u32-nfkc.c b/tests/uninorm/test-u32-nfkc.c new file mode 100644 index 00000000..75f7e825 --- /dev/null +++ b/tests/uninorm/test-u32-nfkc.c @@ -0,0 +1,393 @@ +/* Test of compatibility normalization of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U32_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint32_t *input, size_t input_length, + const uint32_t *expected, size_t expected_length) +{ + size_t length; + uint32_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u32_normalize (UNINORM_NFKC, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint32_t *preallocated; + + length = expected_length - 1; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint32_t *preallocated; + + length = expected_length; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u32_nfkc (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint32_t input[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint32_t input[] = { 0x00C4 }; + static const uint32_t decomposed[] = { 0x0041, 0x0308 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint32_t input[] = { 0x01DE }; + static const uint32_t decomposed[] = { 0x0041, 0x0308, 0x0304 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* ANGSTROM SIGN */ + static const uint32_t input[] = { 0x212B }; + static const uint32_t decomposed[] = { 0x0041, 0x030A }; + static const uint32_t expected[] = { 0x00C5 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); + ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint32_t input[] = { 0x1FC1 }; + static const uint32_t decomposed[] = { 0x0020, 0x0308, 0x0342 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint32_t input[] = { 0x2113 }; + static const uint32_t decomposed[] = { 0x006C }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint32_t input[] = { 0x00A0 }; + static const uint32_t decomposed[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint32_t input[] = { 0xFB6C }; + static const uint32_t decomposed[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint32_t input[] = { 0xFB6D }; + static const uint32_t decomposed[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint32_t input[] = { 0xFB6B }; + static const uint32_t decomposed[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint32_t input[] = { 0xFB6A }; + static const uint32_t decomposed[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint32_t input[] = { 0x246E }; + static const uint32_t decomposed[] = { 0x0031, 0x0035 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint32_t input[] = { 0x2122 }; + static const uint32_t decomposed[] = { 0x0054, 0x004D }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint32_t input[] = { 0x1D62 }; + static const uint32_t decomposed[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint32_t input[] = { 0xFE35 }; + static const uint32_t decomposed[] = { 0x0028 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint32_t input[] = { 0xFF21 }; + static const uint32_t decomposed[] = { 0x0041 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint32_t input[] = { 0xFF64 }; + static const uint32_t decomposed[] = { 0x3001 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint32_t input[] = { 0xFE51 }; + static const uint32_t decomposed[] = { 0x3001 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* SQUARE MHZ */ + static const uint32_t input[] = { 0x3392 }; + static const uint32_t decomposed[] = { 0x004D, 0x0048, 0x007A }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint32_t input[] = { 0x215C }; + static const uint32_t decomposed[] = { 0x0033, 0x2044, 0x0038 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* MICRO SIGN */ + static const uint32_t input[] = { 0x00B5 }; + static const uint32_t decomposed[] = { 0x03BC }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint32_t input[] = { 0xFDFA }; + static const uint32_t decomposed[] = + { 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, + 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645 + }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint32_t input[] = { 0xAE00 }; + static const uint32_t decomposed[] = { 0x1100, 0x1173, 0x11AF }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint32_t input[] = { 0xADF8 }; + static const uint32_t decomposed[] = { 0x1100, 0x1173 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint32_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint32_t decomposed[] = + { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', + 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' + }; + static const uint32_t expected[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); + ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint32_t *input = (uint32_t *) malloc (2 * m * sizeof (uint32_t)); + if (input != NULL) + { + uint32_t *expected = input + m; + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint32_t *p; + size_t i; + + input[0] = 0x0041; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + break; + + case 1: + for (i = 0; i < m2; i++) + *p++ = 0x0300; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0x0319; + *p++ = 0x0300; + } + for (; i < m1; i++) + *p++ = 0x0319; + break; + + default: + abort (); + } + + expected[0] = 0x00C0; + p = expected + 1; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2 - 1; i++) + *p++ = 0x0300; + + for (; repeat > 0; repeat--) + { + ASSERT (check (input, m, expected, m - 1) == 0); + ASSERT (check (expected, m - 1, expected, m - 1) == 0); + } + + free (input); + } + } + } +} + +#else + +void +test_u32_nfkc (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u32-nfkd-big.c b/tests/uninorm/test-u32-nfkd-big.c new file mode 100644 index 00000000..e7c1b4f3 --- /dev/null +++ b/tests/uninorm/test-u32-nfkd-big.c @@ -0,0 +1,122 @@ +/* Test of Unicode compliance of compatibility decomposition of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U32_NORMALIZE + +#include "uninorm.h" + +#include + +#include "unistr.h" +#include "progname.h" +#include "test-u32-normalize-big.h" + +static int +check (const uint32_t *c1, size_t c1_length, + const uint32_t *c2, size_t c2_length, + const uint32_t *c3, size_t c3_length, + const uint32_t *c4, size_t c4_length, + const uint32_t *c5, size_t c5_length) +{ + /* Check c5 == NFKD(c1) == NFKD(c2) == NFKD(c3) == NFKD(c4) == NFKD(c5). */ + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFKD, c1, c1_length, NULL, &length); + if (!(result != NULL + && length == c5_length + && u32_cmp (result, c5, c5_length) == 0)) + return 1; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFKD, c2, c2_length, NULL, &length); + if (!(result != NULL + && length == c5_length + && u32_cmp (result, c5, c5_length) == 0)) + return 2; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFKD, c3, c3_length, NULL, &length); + if (!(result != NULL + && length == c5_length + && u32_cmp (result, c5, c5_length) == 0)) + return 3; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFKD, c4, c4_length, NULL, &length); + if (!(result != NULL + && length == c5_length + && u32_cmp (result, c5, c5_length) == 0)) + return 4; + free (result); + } + { + size_t length; + uint32_t *result; + + result = u32_normalize (UNINORM_NFKD, c5, c5_length, NULL, &length); + if (!(result != NULL + && length == c5_length + && u32_cmp (result, c5, c5_length) == 0)) + return 5; + free (result); + } + return 0; +} + +int +main (int argc, char *argv[]) +{ + struct normalization_test_file file; + + set_program_name (argv[0]); + read_normalization_test_file (argv[1], &file); + + test_specific (&file, check); + test_other (&file, UNINORM_NFKD); + + return 0; +} + +#else + +#include + +int +main () +{ + fprintf (stderr, "Skipping test: uninorm/u32-normalize module not included.\n"); + return 77; +} + +#endif diff --git a/tests/uninorm/test-u32-nfkd-big.sh b/tests/uninorm/test-u32-nfkd-big.sh new file mode 100755 index 00000000..a279c124 --- /dev/null +++ b/tests/uninorm/test-u32-nfkd-big.sh @@ -0,0 +1,2 @@ +#!/bin/sh +exec ./test-u32-nfkd-big${EXEEXT} "$srcdir/uninorm/NormalizationTest.txt" diff --git a/tests/uninorm/test-u32-nfkd.c b/tests/uninorm/test-u32-nfkd.c new file mode 100644 index 00000000..d3de7f76 --- /dev/null +++ b/tests/uninorm/test-u32-nfkd.c @@ -0,0 +1,349 @@ +/* Test of compatibility decomposition of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U32_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint32_t *input, size_t input_length, + const uint32_t *expected, size_t expected_length) +{ + size_t length; + uint32_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u32_normalize (UNINORM_NFKD, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint32_t *preallocated; + + length = expected_length - 1; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint32_t *preallocated; + + length = expected_length; + preallocated = (uint32_t *) malloc (length * sizeof (uint32_t)); + result = u32_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u32_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u32_nfkd (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint32_t input[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint32_t input[] = { 0x00C4 }; + static const uint32_t expected[] = { 0x0041, 0x0308 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint32_t input[] = { 0x01DE }; + static const uint32_t expected[] = { 0x0041, 0x0308, 0x0304 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint32_t input[] = { 0x1FC1 }; + static const uint32_t expected[] = { 0x0020, 0x0308, 0x0342 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint32_t input[] = { 0x2113 }; + static const uint32_t expected[] = { 0x006C }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint32_t input[] = { 0x00A0 }; + static const uint32_t expected[] = { 0x0020 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint32_t input[] = { 0xFB6C }; + static const uint32_t expected[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint32_t input[] = { 0xFB6D }; + static const uint32_t expected[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint32_t input[] = { 0xFB6B }; + static const uint32_t expected[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint32_t input[] = { 0xFB6A }; + static const uint32_t expected[] = { 0x06A4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint32_t input[] = { 0x246E }; + static const uint32_t expected[] = { 0x0031, 0x0035 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint32_t input[] = { 0x2122 }; + static const uint32_t expected[] = { 0x0054, 0x004D }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint32_t input[] = { 0x1D62 }; + static const uint32_t expected[] = { 0x0069 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint32_t input[] = { 0xFE35 }; + static const uint32_t expected[] = { 0x0028 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint32_t input[] = { 0xFF21 }; + static const uint32_t expected[] = { 0x0041 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint32_t input[] = { 0xFF64 }; + static const uint32_t expected[] = { 0x3001 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint32_t input[] = { 0xFE51 }; + static const uint32_t expected[] = { 0x3001 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SQUARE MHZ */ + static const uint32_t input[] = { 0x3392 }; + static const uint32_t expected[] = { 0x004D, 0x0048, 0x007A }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint32_t input[] = { 0x215C }; + static const uint32_t expected[] = { 0x0033, 0x2044, 0x0038 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* MICRO SIGN */ + static const uint32_t input[] = { 0x00B5 }; + static const uint32_t expected[] = { 0x03BC }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint32_t input[] = { 0xFDFA }; + static const uint32_t expected[] = + { 0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, + 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645 + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint32_t input[] = { 0xAE00 }; + static const uint32_t expected[] = { 0x1100, 0x1173, 0x11AF }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint32_t input[] = { 0xADF8 }; + static const uint32_t expected[] = { 0x1100, 0x1173 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint32_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint32_t expected[] = + { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x0032, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', + 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint32_t *input = (uint32_t *) malloc (2 * m * sizeof (uint32_t)); + if (input != NULL) + { + uint32_t *expected = input + m; + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint32_t *p; + size_t i; + + input[0] = 0x0041; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + break; + + case 1: + for (i = 0; i < m2; i++) + *p++ = 0x0300; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0x0319; + *p++ = 0x0300; + } + for (; i < m1; i++) + *p++ = 0x0319; + break; + + default: + abort (); + } + + expected[0] = 0x0041; + p = expected + 1; + for (i = 0; i < m1; i++) + *p++ = 0x0319; + for (i = 0; i < m2; i++) + *p++ = 0x0300; + + for (; repeat > 0; repeat--) + ASSERT (check (input, m, expected, m) == 0); + + free (input); + } + } + } +} + +#else + +void +test_u32_nfkd (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u32-normalize-big.c b/tests/uninorm/test-u32-normalize-big.c new file mode 100644 index 00000000..96781ab0 --- /dev/null +++ b/tests/uninorm/test-u32-normalize-big.c @@ -0,0 +1,315 @@ +/* Test of Unicode compliance of normalization of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +/* Specification. */ +#include "test-u32-normalize-big.h" + +#if GNULIB_UNINORM_U32_NORMALIZE + +#include +#include + +#include "xalloc.h" +#include "unistr.h" + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#define ASSERT_WITH_LINE(expr, file, line) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed for %s:%u\n", \ + __FILE__, __LINE__, file, line); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +cmp_ucs4_t (const void *a, const void *b) +{ + ucs4_t a_value = *(const ucs4_t *)a; + ucs4_t b_value = *(const ucs4_t *)b; + return (a_value < b_value ? -1 : a_value > b_value ? 1 : 0); +} + +void +read_normalization_test_file (const char *filename, + struct normalization_test_file *file) +{ + FILE *stream; + unsigned int lineno; + int part_index; + struct normalization_test_line *lines; + size_t lines_length; + size_t lines_allocated; + + stream = fopen (filename, "r"); + if (stream == NULL) + { + fprintf (stderr, "error during fopen of '%s'\n", filename); + exit (1); + } + + for (part_index = 0; part_index < 4; part_index++) + { + file->parts[part_index].lines = NULL; + file->parts[part_index].lines_length = 0; + } + + lineno = 0; + + part_index = -1; + lines = NULL; + lines_length = 0; + lines_allocated = 0; + + for (;;) + { + char buf[1000+1]; + char *ptr; + int c; + struct normalization_test_line line; + size_t sequence_index; + + lineno++; + + /* Read a line. */ + ptr = buf; + do + { + c = getc (stream); + if (c == EOF || c == '\n') + break; + *ptr++ = c; + } + while (ptr < buf + 1000); + *ptr = '\0'; + if (c == EOF) + break; + + /* Ignore empty lines and comment lines. */ + if (buf[0] == '\0' || buf[0] == '#') + continue; + + /* Handle lines that introduce a new part. */ + if (buf[0] == '@') + { + /* Switch to the next part. */ + if (part_index >= 0) + { + lines = + (struct normalization_test_line *) + xnrealloc (lines, lines_length, sizeof (struct normalization_test_line)); + file->parts[part_index].lines = lines; + file->parts[part_index].lines_length = lines_length; + } + part_index++; + lines = NULL; + lines_length = 0; + lines_allocated = 0; + continue; + } + + /* It's a line containing 5 sequences of Unicode characters. + Parse it and append it to the current part. */ + if (!(part_index >= 0 && part_index < 4)) + { + fprintf (stderr, "unexpected structure of '%s'\n", filename); + exit (1); + } + ptr = buf; + line.lineno = lineno; + for (sequence_index = 0; sequence_index < 5; sequence_index++) + line.sequences[sequence_index] = NULL; + for (sequence_index = 0; sequence_index < 5; sequence_index++) + { + uint32_t *sequence = XNMALLOC (1, uint32_t); + size_t sequence_length = 0; + + for (;;) + { + char *endptr; + unsigned int uc; + + uc = strtoul (ptr, &endptr, 16); + if (endptr == ptr) + break; + ptr = endptr; + + /* Append uc to the sequence. */ + sequence = + (uint32_t *) + xnrealloc (sequence, sequence_length + 2, sizeof (uint32_t)); + sequence[sequence_length] = uc; + sequence_length++; + + if (*ptr == ' ') + ptr++; + } + if (sequence_length == 0) + { + fprintf (stderr, "empty character sequence in '%s'\n", filename); + exit (1); + } + sequence[sequence_length] = 0; /* terminator */ + + line.sequences[sequence_index] = sequence; + + if (*ptr != ';') + { + fprintf (stderr, "error parsing '%s'\n", filename); + exit (1); + } + ptr++; + } + + /* Append the line to the current part. */ + if (lines_length == lines_allocated) + { + lines_allocated = 2 * lines_allocated; + if (lines_allocated < 7) + lines_allocated = 7; + lines = + (struct normalization_test_line *) + xnrealloc (lines, lines_allocated, sizeof (struct normalization_test_line)); + } + lines[lines_length] = line; + lines_length++; + } + + if (part_index >= 0) + { + lines = + (struct normalization_test_line *) + xnrealloc (lines, lines_length, sizeof (struct normalization_test_line)); + file->parts[part_index].lines = lines; + file->parts[part_index].lines_length = lines_length; + } + + { + /* Collect all c1 values from the part 1 in an array. */ + const struct normalization_test_part *p = &file->parts[1]; + ucs4_t *c1_array = XNMALLOC (p->lines_length + 1, ucs4_t); + size_t line_index; + + for (line_index = 0; line_index < p->lines_length; line_index++) + { + const uint32_t *sequence = p->lines[line_index].sequences[0]; + /* In part 1, every sequences[0] consists of a single character. */ + if (!(sequence[0] != 0 && sequence[1] == 0)) + abort (); + c1_array[line_index] = sequence[0]; + } + + /* Sort this array. */ + qsort (c1_array, p->lines_length, sizeof (ucs4_t), cmp_ucs4_t); + + /* Add the sentinel at the end. */ + c1_array[p->lines_length] = 0x110000; + + file->part1_c1_sorted = c1_array; + } + + file->filename = xstrdup (filename); + + if (ferror (stream) || fclose (stream)) + { + fprintf (stderr, "error reading from '%s'\n", filename); + exit (1); + } +} + +void +test_specific (const struct normalization_test_file *file, + int (*check) (const uint32_t *c1, size_t c1_length, + const uint32_t *c2, size_t c2_length, + const uint32_t *c3, size_t c3_length, + const uint32_t *c4, size_t c4_length, + const uint32_t *c5, size_t c5_length)) +{ + size_t part_index; + + for (part_index = 0; part_index < 4; part_index++) + { + const struct normalization_test_part *p = &file->parts[part_index]; + size_t line_index; + + for (line_index = 0; line_index < p->lines_length; line_index++) + { + const struct normalization_test_line *l = &p->lines[line_index]; + + ASSERT_WITH_LINE (check (l->sequences[0], u32_strlen (l->sequences[0]), + l->sequences[1], u32_strlen (l->sequences[1]), + l->sequences[2], u32_strlen (l->sequences[2]), + l->sequences[3], u32_strlen (l->sequences[3]), + l->sequences[4], u32_strlen (l->sequences[4])) + == 0, + file->filename, l->lineno); + } + } +} + +void +test_other (const struct normalization_test_file *file, uninorm_t nf) +{ + /* Check that for every character not listed in part 1 of the + NormalizationTest.txt file, the character maps to itself in each + of the four normalization forms. */ + const ucs4_t *p = file->part1_c1_sorted; + ucs4_t uc; + + for (uc = 0; uc < 0x110000; uc++) + { + if (uc >= 0xD800 && uc < 0xE000) + { + /* A surrogate, not a character. Skip uc. */ + } + else if (uc == *p) + { + /* Skip uc. */ + p++; + } + else + { + uint32_t input[1]; + size_t length; + uint32_t *result; + + input[0] = uc; + result = u32_normalize (nf, input, 1, NULL, &length); + ASSERT (result != NULL && length == 1 && result[0] == uc); + } + } +} + +#endif diff --git a/tests/uninorm/test-u32-normalize-big.h b/tests/uninorm/test-u32-normalize-big.h new file mode 100644 index 00000000..f154daa9 --- /dev/null +++ b/tests/uninorm/test-u32-normalize-big.h @@ -0,0 +1,70 @@ +/* Test of Unicode compliance of normalization of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "unitypes.h" +#include "uninorm.h" + +/* The NormalizationTest.txt is from www.unicode.org, with stripped comments: + sed -e 's| *#.*||' < .../ucd/NormalizationTest.txt \ + > tests/uninorm/NormalizationTest.txt + It is only used to verify the compliance of this implementation of the + Unicode normalization forms. It is not used by the library code, only + by the unit tests. */ + +/* Representation of a line in the NormalizationTest.txt file. */ +struct normalization_test_line +{ + unsigned int lineno; + uint32_t *sequences[5]; +}; + +/* Representation of a delimited part of the NormalizationTest.txt file. */ +struct normalization_test_part +{ + struct normalization_test_line *lines; + size_t lines_length; +}; + +/* Representation of the entire NormalizationTest.txt file. */ +struct normalization_test_file +{ + struct normalization_test_part parts[4]; + /* The set of c1 values from part 1, sorted in ascending order, with a + sentinel value of 0x110000 at the end. */ + ucs4_t *part1_c1_sorted; + /* The filename of the NormalizationTest.txt file. */ + const char *filename; +}; + +/* Read the NormalizationTest.txt file and return its contents. */ +extern void + read_normalization_test_file (const char *filename, + struct normalization_test_file *file); + +/* Perform the first compliance test. */ +extern void + test_specific (const struct normalization_test_file *file, + int (*check) (const uint32_t *c1, size_t c1_length, + const uint32_t *c2, size_t c2_length, + const uint32_t *c3, size_t c3_length, + const uint32_t *c4, size_t c4_length, + const uint32_t *c5, size_t c5_length)); + +/* Perform the second compliance test. */ +extern void + test_other (const struct normalization_test_file *file, uninorm_t nf); diff --git a/tests/uninorm/test-u32-normcmp.c b/tests/uninorm/test-u32-normcmp.c new file mode 100644 index 00000000..846300a8 --- /dev/null +++ b/tests/uninorm/test-u32-normcmp.c @@ -0,0 +1,130 @@ +/* Test of normalization insensitive comparison of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u32-normcmp.h" + +static void +test_nonascii (int (*my_normcmp) (const uint32_t *, size_t, const uint32_t *, size_t, uninorm_t, int *)) +{ + /* Normalization effects. */ + { + static const uint32_t input1[] = { 'H', 0x00F6, 'h', 'l', 'e' }; + static const uint32_t input2[] = { 'H', 'o', 0x0308, 'h', 'l', 'e' }; + static const uint32_t input3[] = { 'H', 0x00F6, 'h', 'l', 'e', 'n' }; + static const uint32_t input4[] = { 'H', 'o', 0x0308, 'h', 'l', 'e', 'n' }; + static const uint32_t input5[] = { 'H', 'u', 'r', 'z' }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input3, SIZEOF (input3), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input4, SIZEOF (input4), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input1, SIZEOF (input1), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input1, SIZEOF (input1), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint32_t input1[] = { 0x00C4 }; + static const uint32_t input2[] = { 0x0041, 0x0308 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint32_t input1[] = { 0x01DE }; + static const uint32_t input2[] = { 0x0041, 0x0308, 0x0304 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint32_t input1[] = { 0x1FC1 }; + static const uint32_t input2[] = { 0x00A8, 0x0342 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEUL */ + static const uint32_t input1[] = { 0xAE00 }; + static const uint32_t input2[] = { 0xADF8, 0x11AF }; + static const uint32_t input3[] = { 0x1100, 0x1173, 0x11AF }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input1, SIZEOF (input1), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEU */ + static const uint32_t input1[] = { 0xADF8 }; + static const uint32_t input2[] = { 0x1100, 0x1173 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } +} + +int +main () +{ + test_ascii (u32_normcmp, UNINORM_NFD); + test_nonascii (u32_normcmp); + + return 0; +} diff --git a/tests/uninorm/test-u32-normcmp.h b/tests/uninorm/test-u32-normcmp.h new file mode 100644 index 00000000..06d5fad8 --- /dev/null +++ b/tests/uninorm/test-u32-normcmp.h @@ -0,0 +1,69 @@ +/* Test of normalization insensitive comparison of UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +static void +test_ascii (int (*my_normcmp) (const uint32_t *, size_t, const uint32_t *, size_t, uninorm_t, int *), + uninorm_t nf) +{ + /* Empty string. */ + { + int cmp; + + ASSERT (my_normcmp (NULL, 0, NULL, 0, nf, &cmp) == 0); + ASSERT (cmp == 0); + } + { + static const uint32_t input[] = { 'x', 'y' }; + int cmp; + + ASSERT (my_normcmp (input, SIZEOF (input), NULL, 0, nf, &cmp) == 0); + ASSERT (cmp == 1); + + ASSERT (my_normcmp (NULL, 0, input, SIZEOF (input), nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input, SIZEOF (input), input, SIZEOF (input), nf, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Normal lexicographic order. */ + { + static const uint32_t input1[] = { 'A', 'm', 'e', 'r', 'i', 'c', 'a' }; + static const uint32_t input2[] = { 'A', 'm', 'i', 'g', 'o' }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); + ASSERT (cmp == 1); + } + + /* Shorter and longer strings. */ + { + static const uint32_t input1[] = { 'R', 'e', 'a', 'g', 'a', 'n' }; + static const uint32_t input2[] = { 'R', 'e', 'a', 'g', 'a', 'n', 'o', 'm', 'i', 'c', 's' }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); + ASSERT (cmp == 1); + } +} diff --git a/tests/uninorm/test-u32-normcoll.c b/tests/uninorm/test-u32-normcoll.c new file mode 100644 index 00000000..916d433f --- /dev/null +++ b/tests/uninorm/test-u32-normcoll.c @@ -0,0 +1,49 @@ +/* Test of locale dependent, normalization insensitive comparison of + UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u32-normcmp.h" +int +main () +{ + /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_normcoll + on ASCII strings should behave like strcmp as well. */ + test_ascii (u32_normcoll, UNINORM_NFC); + + return 0; +} diff --git a/tests/uninorm/test-u8-nfc.c b/tests/uninorm/test-u8-nfc.c new file mode 100644 index 00000000..52baa68b --- /dev/null +++ b/tests/uninorm/test-u8-nfc.c @@ -0,0 +1,375 @@ +/* Test of canonical normalization of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U8_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint8_t *input, size_t input_length, + const uint8_t *expected, size_t expected_length) +{ + size_t length; + uint8_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u8_normalize (UNINORM_NFC, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint8_t *preallocated; + + length = expected_length - 1; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_normalize (UNINORM_NFC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint8_t *preallocated; + + length = expected_length; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_normalize (UNINORM_NFC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u8_nfc (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint8_t input[] = { 0x20 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint8_t input[] = { 0xC3, 0x84 }; + static const uint8_t decomposed[] = { 0x41, 0xCC, 0x88 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint8_t input[] = { 0xC7, 0x9E }; + static const uint8_t decomposed[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* ANGSTROM SIGN */ + static const uint8_t input[] = { 0xE2, 0x84, 0xAB }; + static const uint8_t decomposed[] = { 0x41, 0xCC, 0x8A }; + static const uint8_t expected[] = { 0xC3, 0x85 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); + ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint8_t input[] = { 0xE1, 0xBF, 0x81 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint8_t input[] = { 0xE2, 0x84, 0x93 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint8_t input[] = { 0xC2, 0xA0 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAC }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAD }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAB }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAA }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint8_t input[] = { 0xE2, 0x91, 0xAE }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint8_t input[] = { 0xE2, 0x84, 0xA2 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint8_t input[] = { 0xE1, 0xB5, 0xA2 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint8_t input[] = { 0xEF, 0xB8, 0xB5 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint8_t input[] = { 0xEF, 0xBC, 0xA1 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint8_t input[] = { 0xEF, 0xBD, 0xA4 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint8_t input[] = { 0xEF, 0xB9, 0x91 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SQUARE MHZ */ + static const uint8_t input[] = { 0xE3, 0x8E, 0x92 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint8_t input[] = { 0xE2, 0x85, 0x9C }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* MICRO SIGN */ + static const uint8_t input[] = { 0xC2, 0xB5 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint8_t input[] = { 0xEF, 0xB7, 0xBA }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint8_t input[] = { 0xEA, 0xB8, 0x80 }; + static const uint8_t decomposed[] = + { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint8_t input[] = { 0xEA, 0xB7, 0xB8 }; + static const uint8_t decomposed[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint8_t input[] = + { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', + ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, + 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, + 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, + 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', + '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, + 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, + 0xEA, 0xB8, 0x80, '\n' + }; + static const uint8_t decomposed[] = + { 'G', 'r', 0x75, 0xCC, 0x88, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', + ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, + 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB8, 0xCC, 0x86, + 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, + 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', + '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, + 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xAB, + 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF, '\n' + }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint8_t *input = (uint8_t *) malloc (2 * (2 * m - 1) * sizeof (uint8_t)); + if (input != NULL) + { + uint8_t *expected = input + (2 * m - 1); + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint8_t *p; + size_t i; + + input[0] = 0x41; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + break; + + case 1: + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + *p++ = 0xCC; + *p++ = 0x80; + } + for (; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + break; + + default: + abort (); + } + + expected[0] = 0xC3; + expected[1] = 0x80; + p = expected + 2; + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + for (i = 0; i < m2 - 1; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + + for (; repeat > 0; repeat--) + { + ASSERT (check (input, 2 * m - 1, expected, 2 * m - 2) == 0); + ASSERT (check (expected, 2 * m - 2, expected, 2 * m - 2) == 0); + } + + free (input); + } + } + } +} + +#else + +void +test_u8_nfc (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u8-nfd.c b/tests/uninorm/test-u8-nfd.c new file mode 100644 index 00000000..d1d840ac --- /dev/null +++ b/tests/uninorm/test-u8-nfd.c @@ -0,0 +1,358 @@ +/* Test of canonical decomposition of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U8_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint8_t *input, size_t input_length, + const uint8_t *expected, size_t expected_length) +{ + size_t length; + uint8_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u8_normalize (UNINORM_NFD, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint8_t *preallocated; + + length = expected_length - 1; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_normalize (UNINORM_NFD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint8_t *preallocated; + + length = expected_length; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_normalize (UNINORM_NFD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u8_nfd (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint8_t input[] = { 0x20 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint8_t input[] = { 0xC3, 0x84 }; + static const uint8_t expected[] = { 0x41, 0xCC, 0x88 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint8_t input[] = { 0xC7, 0x9E }; + static const uint8_t expected[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint8_t input[] = { 0xE1, 0xBF, 0x81 }; + static const uint8_t expected[] = { 0xC2, 0xA8, 0xCD, 0x82 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint8_t input[] = { 0xE2, 0x84, 0x93 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint8_t input[] = { 0xC2, 0xA0 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAC }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAD }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAB }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAA }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint8_t input[] = { 0xE2, 0x91, 0xAE }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint8_t input[] = { 0xE2, 0x84, 0xA2 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint8_t input[] = { 0xE1, 0xB5, 0xA2 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint8_t input[] = { 0xEF, 0xB8, 0xB5 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint8_t input[] = { 0xEF, 0xBC, 0xA1 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint8_t input[] = { 0xEF, 0xBD, 0xA4 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint8_t input[] = { 0xEF, 0xB9, 0x91 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* SQUARE MHZ */ + static const uint8_t input[] = { 0xE3, 0x8E, 0x92 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint8_t input[] = { 0xE2, 0x85, 0x9C }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* MICRO SIGN */ + static const uint8_t input[] = { 0xC2, 0xB5 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint8_t input[] = { 0xEF, 0xB7, 0xBA }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint8_t input[] = { 0xEA, 0xB8, 0x80 }; + static const uint8_t expected[] = + { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint8_t input[] = { 0xEA, 0xB7, 0xB8 }; + static const uint8_t expected[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint8_t input[] = + { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', + ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, + 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, + 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, + 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', + '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, + 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, + 0xEA, 0xB8, 0x80, '\n' + }; + static const uint8_t expected[] = + { 'G', 'r', 0x75, 0xCC, 0x88, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', + ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, + 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB8, 0xCC, 0x86, + 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, + 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', + '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, + 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xAB, + 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF, '\n' + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint8_t *input = (uint8_t *) malloc (2 * (2 * m - 1) * sizeof (uint8_t)); + if (input != NULL) + { + uint8_t *expected = input + (2 * m - 1); + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint8_t *p; + size_t i; + + input[0] = 0x41; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + break; + + case 1: + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + *p++ = 0xCC; + *p++ = 0x80; + } + for (; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + break; + + default: + abort (); + } + + expected[0] = 0x41; + p = expected + 1; + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + + for (; repeat > 0; repeat--) + ASSERT (check (input, 2 * m - 1, expected, 2 * m - 1) == 0); + + free (input); + } + } + } +} + +#else + +void +test_u8_nfd (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u8-nfkc.c b/tests/uninorm/test-u8-nfkc.c new file mode 100644 index 00000000..0ea46363 --- /dev/null +++ b/tests/uninorm/test-u8-nfkc.c @@ -0,0 +1,427 @@ +/* Test of compatibility normalization of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U8_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint8_t *input, size_t input_length, + const uint8_t *expected, size_t expected_length) +{ + size_t length; + uint8_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u8_normalize (UNINORM_NFKC, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint8_t *preallocated; + + length = expected_length - 1; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint8_t *preallocated; + + length = expected_length; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_normalize (UNINORM_NFKC, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u8_nfkc (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint8_t input[] = { 0x20 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint8_t input[] = { 0xC3, 0x84 }; + static const uint8_t decomposed[] = { 0x41, 0xCC, 0x88 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint8_t input[] = { 0xC7, 0x9E }; + static const uint8_t decomposed[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* ANGSTROM SIGN */ + static const uint8_t input[] = { 0xE2, 0x84, 0xAB }; + static const uint8_t decomposed[] = { 0x41, 0xCC, 0x8A }; + static const uint8_t expected[] = { 0xC3, 0x85 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); + ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint8_t input[] = { 0xE1, 0xBF, 0x81 }; + static const uint8_t decomposed[] = { 0x20, 0xCC, 0x88, 0xCD, 0x82 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint8_t input[] = { 0xE2, 0x84, 0x93 }; + static const uint8_t decomposed[] = { 0x6C }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint8_t input[] = { 0xC2, 0xA0 }; + static const uint8_t decomposed[] = { 0x20 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAC }; + static const uint8_t decomposed[] = { 0xDA, 0xA4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAD }; + static const uint8_t decomposed[] = { 0xDA, 0xA4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAB }; + static const uint8_t decomposed[] = { 0xDA, 0xA4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAA }; + static const uint8_t decomposed[] = { 0xDA, 0xA4 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint8_t input[] = { 0xE2, 0x91, 0xAE }; + static const uint8_t decomposed[] = { 0x31, 0x35 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint8_t input[] = { 0xE2, 0x84, 0xA2 }; + static const uint8_t decomposed[] = { 0x54, 0x4D }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint8_t input[] = { 0xE1, 0xB5, 0xA2 }; + static const uint8_t decomposed[] = { 0x69 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint8_t input[] = { 0xEF, 0xB8, 0xB5 }; + static const uint8_t decomposed[] = { 0x28 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint8_t input[] = { 0xEF, 0xBC, 0xA1 }; + static const uint8_t decomposed[] = { 0x41 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint8_t input[] = { 0xEF, 0xBD, 0xA4 }; + static const uint8_t decomposed[] = { 0xE3, 0x80, 0x81 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint8_t input[] = { 0xEF, 0xB9, 0x91 }; + static const uint8_t decomposed[] = { 0xE3, 0x80, 0x81 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* SQUARE MHZ */ + static const uint8_t input[] = { 0xE3, 0x8E, 0x92 }; + static const uint8_t decomposed[] = { 0x4D, 0x48, 0x7A }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint8_t input[] = { 0xE2, 0x85, 0x9C }; + static const uint8_t decomposed[] = { 0x33, 0xE2, 0x81, 0x84, 0x38 }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* MICRO SIGN */ + static const uint8_t input[] = { 0xC2, 0xB5 }; + static const uint8_t decomposed[] = { 0xCE, 0xBC }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint8_t input[] = { 0xEF, 0xB7, 0xBA }; + static const uint8_t decomposed[] = + { 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, + 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87, + 0x20, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85 + }; + ASSERT (check (input, SIZEOF (input), decomposed, SIZEOF (decomposed)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), decomposed, SIZEOF (decomposed)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint8_t input[] = { 0xEA, 0xB8, 0x80 }; + static const uint8_t decomposed[] = + { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint8_t input[] = { 0xEA, 0xB7, 0xB8 }; + static const uint8_t decomposed[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint8_t input[] = + { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', + ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, + 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, + 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, + 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', + '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, + 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, + 0xEA, 0xB8, 0x80, '\n' + }; + static const uint8_t decomposed[] = + { 'G', 'r', 0x75, 0xCC, 0x88, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', + ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, + 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB8, 0xCC, 0x86, + 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, + 's', 'q', 'r', 't', '(', 'b', 0x32, '-', '4', 'a', 'c', ')', ')', + '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, + 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xAB, + 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF, '\n' + }; + static const uint8_t expected[] = + { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', + ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, + 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, + 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, + 's', 'q', 'r', 't', '(', 'b', 0x32, '-', '4', 'a', 'c', ')', ')', + '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, + 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, + 0xEA, 0xB8, 0x80, '\n' + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), expected, SIZEOF (expected)) == 0); + ASSERT (check (expected, SIZEOF (expected), expected, SIZEOF (expected)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint8_t *input = (uint8_t *) malloc (2 * (2 * m - 1) * sizeof (uint8_t)); + if (input != NULL) + { + uint8_t *expected = input + (2 * m - 1); + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint8_t *p; + size_t i; + + input[0] = 0x41; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + break; + + case 1: + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + *p++ = 0xCC; + *p++ = 0x80; + } + for (; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + break; + + default: + abort (); + } + + expected[0] = 0xC3; + expected[1] = 0x80; + p = expected + 2; + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + for (i = 0; i < m2 - 1; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + + for (; repeat > 0; repeat--) + { + ASSERT (check (input, 2 * m - 1, expected, 2 * m - 2) == 0); + ASSERT (check (expected, 2 * m - 2, expected, 2 * m - 2) == 0); + } + + free (input); + } + } + } +} + +#else + +void +test_u8_nfkc (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u8-nfkd.c b/tests/uninorm/test-u8-nfkd.c new file mode 100644 index 00000000..2d883a05 --- /dev/null +++ b/tests/uninorm/test-u8-nfkd.c @@ -0,0 +1,379 @@ +/* Test of compatibility decomposition of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#if GNULIB_UNINORM_U8_NORMALIZE + +#include "uninorm.h" + +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static int +check (const uint8_t *input, size_t input_length, + const uint8_t *expected, size_t expected_length) +{ + size_t length; + uint8_t *result; + + /* Test return conventions with resultbuf == NULL. */ + result = u8_normalize (UNINORM_NFKD, input, input_length, NULL, &length); + if (!(result != NULL)) + return 1; + if (!(length == expected_length)) + return 2; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 3; + free (result); + + /* Test return conventions with resultbuf too small. */ + if (expected_length > 0) + { + uint8_t *preallocated; + + length = expected_length - 1; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 4; + if (!(result != preallocated)) + return 5; + if (!(length == expected_length)) + return 6; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 7; + free (result); + free (preallocated); + } + + /* Test return conventions with resultbuf large enough. */ + { + uint8_t *preallocated; + + length = expected_length; + preallocated = (uint8_t *) malloc (length * sizeof (uint8_t)); + result = u8_normalize (UNINORM_NFKD, input, input_length, preallocated, &length); + if (!(result != NULL)) + return 8; + if (!(preallocated == NULL || result == preallocated)) + return 9; + if (!(length == expected_length)) + return 10; + if (!(u8_cmp (result, expected, expected_length) == 0)) + return 11; + free (preallocated); + } + + return 0; +} + +void +test_u8_nfkd (void) +{ + { /* Empty string. */ + ASSERT (check (NULL, 0, NULL, 0) == 0); + } + { /* SPACE */ + static const uint8_t input[] = { 0x20 }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint8_t input[] = { 0xC3, 0x84 }; + static const uint8_t expected[] = { 0x41, 0xCC, 0x88 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint8_t input[] = { 0xC7, 0x9E }; + static const uint8_t expected[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint8_t input[] = { 0xE1, 0xBF, 0x81 }; + static const uint8_t expected[] = { 0x20, 0xCC, 0x88, 0xCD, 0x82 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SCRIPT SMALL L */ + static const uint8_t input[] = { 0xE2, 0x84, 0x93 }; + static const uint8_t expected[] = { 0x6C }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* NO-BREAK SPACE */ + static const uint8_t input[] = { 0xC2, 0xA0 }; + static const uint8_t expected[] = { 0x20 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH INITIAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAC }; + static const uint8_t expected[] = { 0xDA, 0xA4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH MEDIAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAD }; + static const uint8_t expected[] = { 0xDA, 0xA4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH FINAL FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAB }; + static const uint8_t expected[] = { 0xDA, 0xA4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LETTER VEH ISOLATED FORM */ + static const uint8_t input[] = { 0xEF, 0xAD, 0xAA }; + static const uint8_t expected[] = { 0xDA, 0xA4 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* CIRCLED NUMBER FIFTEEN */ + static const uint8_t input[] = { 0xE2, 0x91, 0xAE }; + static const uint8_t expected[] = { 0x31, 0x35 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* TRADE MARK SIGN */ + static const uint8_t input[] = { 0xE2, 0x84, 0xA2 }; + static const uint8_t expected[] = { 0x54, 0x4D }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* LATIN SUBSCRIPT SMALL LETTER I */ + static const uint8_t input[] = { 0xE1, 0xB5, 0xA2 }; + static const uint8_t expected[] = { 0x69 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS */ + static const uint8_t input[] = { 0xEF, 0xB8, 0xB5 }; + static const uint8_t expected[] = { 0x28 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* FULLWIDTH LATIN CAPITAL LETTER A */ + static const uint8_t input[] = { 0xEF, 0xBC, 0xA1 }; + static const uint8_t expected[] = { 0x41 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HALFWIDTH IDEOGRAPHIC COMMA */ + static const uint8_t input[] = { 0xEF, 0xBD, 0xA4 }; + static const uint8_t expected[] = { 0xE3, 0x80, 0x81 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SMALL IDEOGRAPHIC COMMA */ + static const uint8_t input[] = { 0xEF, 0xB9, 0x91 }; + static const uint8_t expected[] = { 0xE3, 0x80, 0x81 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* SQUARE MHZ */ + static const uint8_t input[] = { 0xE3, 0x8E, 0x92 }; + static const uint8_t expected[] = { 0x4D, 0x48, 0x7A }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* VULGAR FRACTION THREE EIGHTHS */ + static const uint8_t input[] = { 0xE2, 0x85, 0x9C }; + static const uint8_t expected[] = { 0x33, 0xE2, 0x81, 0x84, 0x38 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* MICRO SIGN */ + static const uint8_t input[] = { 0xC2, 0xB5 }; + static const uint8_t expected[] = { 0xCE, 0xBC }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM */ + static const uint8_t input[] = { 0xEF, 0xB7, 0xBA }; + static const uint8_t expected[] = + { 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, + 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87, + 0x20, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85 + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HANGUL SYLLABLE GEUL */ + static const uint8_t input[] = { 0xEA, 0xB8, 0x80 }; + static const uint8_t expected[] = + { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* HANGUL SYLLABLE GEU */ + static const uint8_t input[] = { 0xEA, 0xB7, 0xB8 }; + static const uint8_t expected[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint8_t input[] = + { 'G', 'r', 0xC3, 0xBC, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', + ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, + 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB9, + 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, + 's', 'q', 'r', 't', '(', 'b', 0xC2, 0xB2, '-', '4', 'a', 'c', ')', ')', + '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, + 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xED, 0x95, 0x9C, + 0xEA, 0xB8, 0x80, '\n' + }; + static const uint8_t expected[] = + { 'G', 'r', 0x75, 0xCC, 0x88, 0xC3, 0x9F, ' ', 'G', 'o', 't', 't', '.', + ' ', 0xD0, 0x97, 0xD0, 0xB4, 0xD1, 0x80, 0xD0, 0xB0, 0xD0, 0xB2, 0xD1, + 0x81, 0xD1, 0x82, 0xD0, 0xB2, 0xD1, 0x83, 0xD0, 0xB8, 0xCC, 0x86, + 0xD1, 0x82, 0xD0, 0xB5, '!', ' ', 'x', '=', '(', '-', 'b', 0xC2, 0xB1, + 's', 'q', 'r', 't', '(', 'b', 0x32, '-', '4', 'a', 'c', ')', ')', + '/', '(', '2', 'a', ')', ' ', ' ', 0xE6, 0x97, 0xA5, 0xE6, 0x9C, 0xAC, + 0xE8, 0xAA, 0x9E, ',', 0xE4, 0xB8, 0xAD, 0xE6, 0x96, 0x87, ',', + 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xAB, + 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF, '\n' + }; + ASSERT (check (input, SIZEOF (input), expected, SIZEOF (expected)) == 0); + } + +#if HAVE_DECL_ALARM + /* Declare failure if test takes too long, by using default abort + caused by SIGALRM. */ + signal (SIGALRM, SIG_DFL); + alarm (50); +#endif + + /* Check that the sorting is not O(n²) but O(n log n). */ + { + int pass; + for (pass = 0; pass < 3; pass++) + { + size_t repeat = 1; + size_t m = 100000; + uint8_t *input = (uint8_t *) malloc (2 * (2 * m - 1) * sizeof (uint8_t)); + if (input != NULL) + { + uint8_t *expected = input + (2 * m - 1); + size_t m1 = m / 2; + size_t m2 = (m - 1) / 2; + /* NB: m1 + m2 == m - 1. */ + uint8_t *p; + size_t i; + + input[0] = 0x41; + p = input + 1; + switch (pass) + { + case 0: + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + break; + + case 1: + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + break; + + case 2: + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + *p++ = 0xCC; + *p++ = 0x80; + } + for (; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + break; + + default: + abort (); + } + + expected[0] = 0x41; + p = expected + 1; + for (i = 0; i < m1; i++) + { + *p++ = 0xCC; + *p++ = 0x99; + } + for (i = 0; i < m2; i++) + { + *p++ = 0xCC; + *p++ = 0x80; + } + + for (; repeat > 0; repeat--) + ASSERT (check (input, 2 * m - 1, expected, 2 * m - 1) == 0); + + free (input); + } + } + } +} + +#else + +void +test_u8_nfkd (void) +{ +} + +#endif diff --git a/tests/uninorm/test-u8-normcmp.c b/tests/uninorm/test-u8-normcmp.c new file mode 100644 index 00000000..ec479472 --- /dev/null +++ b/tests/uninorm/test-u8-normcmp.c @@ -0,0 +1,130 @@ +/* Test of normalization insensitive comparison of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u8-normcmp.h" + +static void +test_nonascii (int (*my_normcmp) (const uint8_t *, size_t, const uint8_t *, size_t, uninorm_t, int *)) +{ + /* Normalization effects. */ + { + static const uint8_t input1[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e' }; + static const uint8_t input2[] = { 'H', 'o', 0xCC, 0x88, 'h', 'l', 'e' }; + static const uint8_t input3[] = { 'H', 0xC3, 0xB6, 'h', 'l', 'e', 'n' }; + static const uint8_t input4[] = { 'H', 'o', 0xCC, 0x88, 'h', 'l', 'e', 'n' }; + static const uint8_t input5[] = { 'H', 'u', 'r', 'z' }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input3, SIZEOF (input3), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input4, SIZEOF (input4), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input1, SIZEOF (input1), input4, SIZEOF (input4), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input1, SIZEOF (input1), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input5, SIZEOF (input5), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == -1); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + static const uint8_t input1[] = { 0xC3, 0x84 }; + static const uint8_t input2[] = { 0x41, 0xCC, 0x88 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON */ + static const uint8_t input1[] = { 0xC7, 0x9E }; + static const uint8_t input2[] = { 0x41, 0xCC, 0x88, 0xCC, 0x84 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* GREEK DIALYTIKA AND PERISPOMENI */ + static const uint8_t input1[] = { 0xE1, 0xBF, 0x81 }; + static const uint8_t input2[] = { 0xC2, 0xA8, 0xCD, 0x82 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEUL */ + static const uint8_t input1[] = { 0xEA, 0xB8, 0x80 }; + static const uint8_t input2[] = { 0xEA, 0xB7, 0xB8, 0xE1, 0x86, 0xAF }; + static const uint8_t input3[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3, 0xE1, 0x86, 0xAF }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + + ASSERT (my_normcmp (input1, SIZEOF (input1), input3, SIZEOF (input3), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } + { /* HANGUL SYLLABLE GEU */ + static const uint8_t input1[] = { 0xEA, 0xB7, 0xB8 }; + static const uint8_t input2[] = { 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xB3 }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), UNINORM_NFD, &cmp) == 0); + ASSERT (cmp == 0); + } +} + +int +main () +{ + test_ascii (u8_normcmp, UNINORM_NFD); + test_nonascii (u8_normcmp); + + return 0; +} diff --git a/tests/uninorm/test-u8-normcmp.h b/tests/uninorm/test-u8-normcmp.h new file mode 100644 index 00000000..78c887d2 --- /dev/null +++ b/tests/uninorm/test-u8-normcmp.h @@ -0,0 +1,69 @@ +/* Test of normalization insensitive comparison of UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +static void +test_ascii (int (*my_normcmp) (const uint8_t *, size_t, const uint8_t *, size_t, uninorm_t, int *), + uninorm_t nf) +{ + /* Empty string. */ + { + int cmp; + + ASSERT (my_normcmp (NULL, 0, NULL, 0, nf, &cmp) == 0); + ASSERT (cmp == 0); + } + { + static const uint8_t input[] = { 'x', 'y' }; + int cmp; + + ASSERT (my_normcmp (input, SIZEOF (input), NULL, 0, nf, &cmp) == 0); + ASSERT (cmp == 1); + + ASSERT (my_normcmp (NULL, 0, input, SIZEOF (input), nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input, SIZEOF (input), input, SIZEOF (input), nf, &cmp) == 0); + ASSERT (cmp == 0); + } + + /* Normal lexicographic order. */ + { + static const uint8_t input1[] = { 'A', 'm', 'e', 'r', 'i', 'c', 'a' }; + static const uint8_t input2[] = { 'A', 'm', 'i', 'g', 'o' }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); + ASSERT (cmp == 1); + } + + /* Shorter and longer strings. */ + { + static const uint8_t input1[] = { 'R', 'e', 'a', 'g', 'a', 'n' }; + static const uint8_t input2[] = { 'R', 'e', 'a', 'g', 'a', 'n', 'o', 'm', 'i', 'c', 's' }; + int cmp; + + ASSERT (my_normcmp (input1, SIZEOF (input1), input2, SIZEOF (input2), nf, &cmp) == 0); + ASSERT (cmp == -1); + + ASSERT (my_normcmp (input2, SIZEOF (input2), input1, SIZEOF (input1), nf, &cmp) == 0); + ASSERT (cmp == 1); + } +} diff --git a/tests/uninorm/test-u8-normcoll.c b/tests/uninorm/test-u8-normcoll.c new file mode 100644 index 00000000..edf91720 --- /dev/null +++ b/tests/uninorm/test-u8-normcoll.c @@ -0,0 +1,49 @@ +/* Test of locale dependent, normalization insensitive comparison of + UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u8-normcmp.h" +int +main () +{ + /* In the "C" locale, strcoll is equivalent to strcmp, therefore u8_normcoll + on ASCII strings should behave like strcmp as well. */ + test_ascii (u8_normcoll, UNINORM_NFC); + + return 0; +} diff --git a/tests/uninorm/test-uninorm-filter-nfc.c b/tests/uninorm/test-uninorm-filter-nfc.c new file mode 100644 index 00000000..32b77efa --- /dev/null +++ b/tests/uninorm/test-uninorm-filter-nfc.c @@ -0,0 +1,122 @@ +/* Test of canonical normalization of streams. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uninorm.h" + +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* A stream of Unicode characters that simply accumulates the contents. */ + +struct accumulator +{ + uint32_t *result; + size_t length; + size_t allocated; +}; + +static int +write_to_accumulator (void *stream_data, ucs4_t uc) +{ + struct accumulator *accu = (struct accumulator *) stream_data; + + if (accu->length == accu->allocated) + { + accu->allocated = 2 * accu->allocated + 1; + accu->result = (uint32_t *) realloc (accu->result, accu->allocated * sizeof (uint32_t)); + } + accu->result[accu->length] = uc; + accu->length++; + return 0; +} + +static int +check (const uint32_t *input, size_t input_length, + const uint32_t *expected, size_t expected_length) +{ + struct accumulator accu; + struct uninorm_filter *filter; + size_t i; + + accu.result = NULL; + accu.length = 0; + accu.allocated = 0; + + filter = uninorm_filter_create (UNINORM_NFC, write_to_accumulator, &accu); + ASSERT (filter != NULL); + + for (i = 0; i < input_length; i++) + ASSERT (uninorm_filter_write (filter, input[i]) == 0); + + ASSERT (uninorm_filter_free (filter) == 0); + + if (!(accu.result != NULL)) + return 1; + if (!(accu.length == expected_length)) + return 2; + if (!(u32_cmp (accu.result, expected, expected_length) == 0)) + return 3; + free (accu.result); + + return 0; +} + +int +main () +{ + { /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + static const uint32_t input[] = + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + static const uint32_t decomposed[] = + { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', + 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' + }; + ASSERT (check (input, SIZEOF (input), input, SIZEOF (input)) == 0); + ASSERT (check (decomposed, SIZEOF (decomposed), input, SIZEOF (input)) == 0); + } + + return 0; +} diff --git a/tests/unistdio/test-u16-asnprintf1.c b/tests/unistdio/test-u16-asnprintf1.c new file mode 100644 index 00000000..53fedf34 --- /dev/null +++ b/tests/unistdio/test-u16-asnprintf1.c @@ -0,0 +1,59 @@ +/* Test of u16_asnprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u16-asnprintf1.h" + +static void +test_asnprintf () +{ + test_function (u16_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + test_asnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u16-asnprintf1.h b/tests/unistdio/test-u16-asnprintf1.h new file mode 100644 index 00000000..34d4f821 --- /dev/null +++ b/tests/unistdio/test-u16-asnprintf1.h @@ -0,0 +1,60 @@ +/* Test of u16_[v]asnprintf() function. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +static void +test_function (uint16_t * (*my_asnprintf) (uint16_t *, size_t *, const char *, ...)) +{ + uint16_t buf[8]; + int size; + + /* Test return value convention. */ + + for (size = 0; size <= 8; size++) + { + size_t length = size; + uint16_t *result = my_asnprintf (NULL, &length, "%d", 12345); + static const uint16_t expected[] = + { '1', '2', '3', '4', '5', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + ASSERT (length == 5); + free (result); + } + + for (size = 0; size <= 8; size++) + { + static const uint16_t initializer[] = + { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F', 0 }; + static const uint16_t expected[] = + { '1', '2', '3', '4', '5', 0 }; + size_t length; + uint16_t *result; + + u16_cpy (buf, initializer, 8); + length = size; + result = my_asnprintf (buf, &length, "%d", 12345); + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + ASSERT (length == 5); + if (size < 6) + ASSERT (result != buf); + ASSERT (u16_cmp (buf + size, initializer + size, 8 - size) == 0); + if (result != buf) + free (result); + } +} diff --git a/tests/unistdio/test-u16-printf1.h b/tests/unistdio/test-u16-printf1.h new file mode 100644 index 00000000..199ece90 --- /dev/null +++ b/tests/unistdio/test-u16-printf1.h @@ -0,0 +1,941 @@ +/* Test of u16_v[a]s[n]printf() function. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +static void +test_xfunction (uint16_t * (*my_xasprintf) (const char *, ...)) +{ + /* Test support of size specifiers as in C99. */ + + { + uint16_t *result = + my_xasprintf ("%ju %d", (uintmax_t) 12345671, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '3', '4', '5', '6', '7', '1', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { + uint16_t *result = + my_xasprintf ("%zu %d", (size_t) 12345672, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '3', '4', '5', '6', '7', '2', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { + uint16_t *result = + my_xasprintf ("%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '3', '4', '5', '6', '7', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { + uint16_t *result = + my_xasprintf ("%Lg %d", (long double) 1.5, 33, 44, 55); + static const uint16_t expected[] = + { '1', '.', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the 'U' conversion specifier for Unicode strings. */ + + { + static const uint8_t unicode_string[] = "Hello"; + { + uint16_t *result = + my_xasprintf ("%U %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint16_t *result = + my_xasprintf ("%10U %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint16_t *result = + my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint16_t *result = + my_xasprintf ("%010U %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint16_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; + { + uint16_t *result = + my_xasprintf ("%lU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint16_t *result = + my_xasprintf ("%10lU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint16_t *result = + my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint16_t *result = + my_xasprintf ("%010lU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint32_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; + { + uint16_t *result = + my_xasprintf ("%llU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint16_t *result = + my_xasprintf ("%10llU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint16_t *result = + my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint16_t *result = + my_xasprintf ("%010llU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + } + + /* Test the support of the 's' conversion specifier for strings. */ + + { + uint16_t *result = + my_xasprintf ("Mr. %s %d", "Ronald Reagan", 33, 44, 55); + static const uint16_t expected[] = + { 'M', 'r', '.', ' ', 'R', 'o', 'n', 'a', 'l', 'd', + ' ', 'R', 'e', 'a', 'g', 'a', 'n', ' ', '3', '3', + 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint16_t *result = + my_xasprintf ("Mr. %20s %d", "Ronald Reagan", 33, 44, 55); + static const uint16_t expected[] = + { 'M', 'r', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', 'R', 'o', 'n', 'a', 'l', 'd', ' ', 'R', 'e', + 'a', 'g', 'a', 'n', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* FLAG_LEFT. */ + uint16_t *result = + my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); + static const uint16_t expected[] = + { 'M', 'r', '.', ' ', 'R', 'o', 'n', 'a', 'l', 'd', + ' ', 'R', 'e', 'a', 'g', 'a', 'n', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* FLAG_ZERO: no effect. */ + uint16_t *result = + my_xasprintf ("Mr. %020s %d", "Ronald Reagan", 33, 44, 55); + static const uint16_t expected[] = + { 'M', 'r', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', 'R', 'o', 'n', 'a', 'l', 'd', ' ', 'R', 'e', + 'a', 'g', 'a', 'n', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal + output of floating-point numbers. */ + + { /* A positive number. */ + uint16_t *result = + my_xasprintf ("%a %d", 3.1416015625, 33, 44, 55); + static const uint16_t expected1[] = + { '0', 'x', '1', '.', '9', '2', '2', 'p', '+', '1', ' ', '3', '3', 0 }; + static const uint16_t expected2[] = + { '0', 'x', '3', '.', '2', '4', '4', 'p', '+', '0', ' ', '3', '3', 0 }; + static const uint16_t expected3[] = + { '0', 'x', '6', '.', '4', '8', '8', 'p', '-', '1', ' ', '3', '3', 0 }; + static const uint16_t expected4[] = + { '0', 'x', 'c', '.', '9', '1', 'p', '-', '2', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + + { /* Width. */ + uint16_t *result = + my_xasprintf ("%10a %d", 1.75, 33, 44, 55); + static const uint16_t expected1[] = + { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; + static const uint16_t expected2[] = + { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; + static const uint16_t expected3[] = + { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; + static const uint16_t expected4[] = + { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + + { /* Small precision. */ + uint16_t *result = + my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); + static const uint16_t expected1[] = + { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', + 0 + }; + static const uint16_t expected2[] = + { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', + 0 + }; + static const uint16_t expected3[] = + { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', + 0 + }; + static const uint16_t expected4[] = + { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '3', ' ', '3', '3', + 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + + { /* Large precision. */ + uint16_t *result = + my_xasprintf ("%.50a %d", 1.75, 33, 44, 55); + static const uint16_t expected1[] = + { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', + 0 + }; + static const uint16_t expected2[] = + { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', + 0 + }; + static const uint16_t expected3[] = + { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', + 0 + }; + static const uint16_t expected4[] = + { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '3', ' ', '3', '3', + 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + + { /* A positive number. */ + uint16_t *result = + my_xasprintf ("%La %d", 3.1416015625L, 33, 44, 55); + static const uint16_t expected1[] = + { '0', 'x', '1', '.', '9', '2', '2', 'p', '+', '1', + ' ', '3', '3', 0 + }; + static const uint16_t expected2[] = + { '0', 'x', '3', '.', '2', '4', '4', 'p', '+', '0', + ' ', '3', '3', 0 + }; + static const uint16_t expected3[] = + { '0', 'x', '6', '.', '4', '8', '8', 'p', '-', '1', + ' ', '3', '3', 0 + }; + static const uint16_t expected4[] = + { '0', 'x', 'c', '.', '9', '1', 'p', '-', '2', ' ', + '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + + { /* Width. */ + uint16_t *result = + my_xasprintf ("%10La %d", 1.75L, 33, 44, 55); + static const uint16_t expected1[] = + { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; + static const uint16_t expected2[] = + { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; + static const uint16_t expected3[] = + { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; + static const uint16_t expected4[] = + { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + + { /* Small precision. */ + uint16_t *result = + my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); + static const uint16_t expected1[] = + { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', + 0 + }; + static const uint16_t expected2[] = + { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', + 0 + }; + static const uint16_t expected3[] = + { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', + 0 + }; + static const uint16_t expected4[] = + { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '3', ' ', '3', '3', + 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + + { /* Large precision. */ + uint16_t *result = + my_xasprintf ("%.50La %d", 1.75L, 33, 44, 55); + static const uint16_t expected1[] = + { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', + 0 + }; + static const uint16_t expected2[] = + { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', + 0 + }; + static const uint16_t expected3[] = + { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', + 0 + }; + static const uint16_t expected4[] = + { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '3', ' ', '3', '3', + 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0 + || u16_strcmp (result, expected3) == 0 + || u16_strcmp (result, expected4) == 0); + free (result); + } + + /* Test the support of the %f format directive. */ + + { /* A positive number. */ + uint16_t *result = + my_xasprintf ("%f %d", 12.75, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint16_t *result = + my_xasprintf ("%10f %d", 1.75, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint16_t *result = + my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '3', '4', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* A positive number. */ + uint16_t *result = + my_xasprintf ("%Lf %d", 12.75L, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint16_t *result = + my_xasprintf ("%10Lf %d", 1.75L, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint16_t *result = + my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '3', '4', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %F format directive. */ + + { /* A positive number. */ + uint16_t *result = + my_xasprintf ("%F %d", 12.75, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint16_t *result = + my_xasprintf ("%.F %d", 1234.0, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '3', '4', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* A positive number. */ + uint16_t *result = + my_xasprintf ("%LF %d", 12.75L, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint16_t *result = + my_xasprintf ("%.LF %d", 1234.0L, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '3', '4', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %e format directive. */ + + { /* A positive number. */ + uint16_t *result = + my_xasprintf ("%e %d", 12.75, 33, 44, 55); + static const uint16_t expected1[] = + { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', + '0', '1', ' ', '3', '3', 0 + }; + static const uint16_t expected2[] = + { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', + '0', '0', '1', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0); + free (result); + } + + { /* Width. */ + uint16_t *result = + my_xasprintf ("%15e %d", 1.75, 33, 44, 55); + static const uint16_t expected1[] = + { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', + '0', 'e', '+', '0', '0', ' ', '3', '3', 0 + }; + static const uint16_t expected2[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', + 'e', '+', '0', '0', '0', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0); + free (result); + } + + { /* Precision. */ + uint16_t *result = + my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); + static const uint16_t expected1[] = + { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; + static const uint16_t expected2[] = + { '1', 'e', '+', '0', '0', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0); + free (result); + } + + { /* A positive number. */ + uint16_t *result = + my_xasprintf ("%Le %d", 12.75L, 33, 44, 55); + static const uint16_t expected[] = + { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', + '0', '1', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint16_t *result = + my_xasprintf ("%15Le %d", 1.75L, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', + '0', 'e', '+', '0', '0', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint16_t *result = + my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); + static const uint16_t expected[] = + { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %g format directive. */ + + { /* A positive number. */ + uint16_t *result = + my_xasprintf ("%g %d", 12.75, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint16_t *result = + my_xasprintf ("%10g %d", 1.75, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint16_t *result = + my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); + static const uint16_t expected1[] = + { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; + static const uint16_t expected2[] = + { '1', 'e', '+', '0', '0', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected1) == 0 + || u16_strcmp (result, expected2) == 0); + free (result); + } + + { /* A positive number. */ + uint16_t *result = + my_xasprintf ("%Lg %d", 12.75L, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint16_t *result = + my_xasprintf ("%10Lg %d", 1.75L, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint16_t *result = + my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); + static const uint16_t expected[] = + { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %n format directive. */ + + { + int count = -1; + uint16_t *result = + my_xasprintf ("%d %n", 123, &count, 33, 44, 55); + static const uint16_t expected[] = + { '1', '2', '3', ' ', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + ASSERT (count == 4); + free (result); + } + + /* Test the support of the POSIX/XSI format strings with positions. */ + + { + uint16_t *result = + my_xasprintf ("%2$d %1$d", 33, 55); + static const uint16_t expected[] = + { '5', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the grouping flag. */ + + { + uint16_t *result = + my_xasprintf ("%'d %d", 1234567, 99); + ASSERT (result != NULL); + ASSERT (result[u16_strlen (result) - 1] == '9'); + free (result); + } + + /* Test the support of the 'U' conversion specifier for Unicode strings. */ + + { + static const uint8_t unicode_string[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ + { + uint16_t *result = + my_xasprintf ("%U %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint16_t *result = + my_xasprintf ("%20U %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint16_t *result = + my_xasprintf ("%-20U %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint16_t *result = + my_xasprintf ("%020U %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint16_t unicode_string[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + { + uint16_t *result = + my_xasprintf ("%lU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint16_t *result = + my_xasprintf ("%20lU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint16_t *result = + my_xasprintf ("%-20lU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint16_t *result = + my_xasprintf ("%020lU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint32_t unicode_string[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + { + uint16_t *result = + my_xasprintf ("%llU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint16_t *result = + my_xasprintf ("%20llU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint16_t *result = + my_xasprintf ("%-20llU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint16_t *result = + my_xasprintf ("%020llU %d", unicode_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + free (result); + } + } + + /* Test non-ASCII characters in the format string. */ + + { + uint16_t *result = + my_xasprintf ("\304rger", 33, 44, 55); + ASSERT (result == NULL && errno == EINVAL); + } +} diff --git a/tests/unistdio/test-u16-vasnprintf1.c b/tests/unistdio/test-u16-vasnprintf1.c new file mode 100644 index 00000000..b236e3fe --- /dev/null +++ b/tests/unistdio/test-u16-vasnprintf1.c @@ -0,0 +1,88 @@ +/* Test of u16_vasnprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u16-asnprintf1.h" +#include "test-u16-printf1.h" + +static uint16_t * +my_asnprintf (uint16_t *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + uint16_t *ret; + + va_start (args, format); + ret = u16_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static uint16_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + size_t length; + uint16_t *ret; + + va_start (args, format); + ret = u16_vasnprintf (NULL, &length, format, args); + va_end (args); + if (ret != NULL) + ASSERT (length == u16_strlen (ret)); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u16-vasnprintf2.c b/tests/unistdio/test-u16-vasnprintf2.c new file mode 100644 index 00000000..6f7b7cf6 --- /dev/null +++ b/tests/unistdio/test-u16-vasnprintf2.c @@ -0,0 +1,132 @@ +/* Test of u16_vasnprintf() function in an ISO-8859-1 locale. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static void +test_function (uint16_t * (*my_asnprintf) (uint16_t *, size_t *, const char *, ...)) +{ + /* Test the support of the 's' conversion specifier for strings. */ + + { + const char *locale_string = "\304rger"; /* Ärger */ + { + size_t length; + uint16_t *result = + my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); + static const uint16_t expected[] = + { 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + ASSERT (length == u16_strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + uint16_t *result = + my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + ASSERT (length == u16_strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + uint16_t *result = + my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); + static const uint16_t expected[] = + { 0x00c4, 'r', 'g', 'e', 'r', ' ', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + ASSERT (length == u16_strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + uint16_t *result = + my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + ASSERT (length == u16_strlen (result)); + free (result); + } + } +} + +static uint16_t * +my_asnprintf (uint16_t *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + uint16_t *ret; + + va_start (args, format); + ret = u16_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u16-vasnprintf2.sh b/tests/unistdio/test-u16-vasnprintf2.sh new file mode 100755 index 00000000..418b8aac --- /dev/null +++ b/tests/unistdio/test-u16-vasnprintf2.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Test whether a traditional french locale is installed. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR != none; then + testlocale=$LOCALE_FR +else + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$testlocale \ +./test-u16-vasnprintf1${EXEEXT} \ + || exit 1 + +LC_ALL=$testlocale \ +./test-u16-vasnprintf2${EXEEXT} diff --git a/tests/unistdio/test-u16-vasnprintf3.c b/tests/unistdio/test-u16-vasnprintf3.c new file mode 100644 index 00000000..14021819 --- /dev/null +++ b/tests/unistdio/test-u16-vasnprintf3.c @@ -0,0 +1,132 @@ +/* Test of u16_vasnprintf() function in an UTF-8 locale. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static void +test_function (uint16_t * (*my_asnprintf) (uint16_t *, size_t *, const char *, ...)) +{ + /* Test the support of the 's' conversion specifier for strings. */ + + { + const char *locale_string = "\303\204rger"; /* Ärger */ + { + size_t length; + uint16_t *result = + my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); + static const uint16_t expected[] = + { 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + ASSERT (length == u16_strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + uint16_t *result = + my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + ASSERT (length == u16_strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + uint16_t *result = + my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); + static const uint16_t expected[] = + { 0x00c4, 'r', 'g', 'e', 'r', ' ', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + ASSERT (length == u16_strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + uint16_t *result = + my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); + static const uint16_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u16_strcmp (result, expected) == 0); + ASSERT (length == u16_strlen (result)); + free (result); + } + } +} + +static uint16_t * +my_asnprintf (uint16_t *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + uint16_t *ret; + + va_start (args, format); + ret = u16_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u16-vasnprintf3.sh b/tests/unistdio/test-u16-vasnprintf3.sh new file mode 100755 index 00000000..57488c06 --- /dev/null +++ b/tests/unistdio/test-u16-vasnprintf3.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Test whether a french Unicode locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 != none; then + testlocale=$LOCALE_FR_UTF8 +else + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$testlocale \ +./test-u16-vasnprintf1${EXEEXT} \ + || exit 1 + +LC_ALL=$testlocale \ +./test-u16-vasnprintf3${EXEEXT} diff --git a/tests/unistdio/test-u16-vasprintf1.c b/tests/unistdio/test-u16-vasprintf1.c new file mode 100644 index 00000000..8b961268 --- /dev/null +++ b/tests/unistdio/test-u16-vasprintf1.c @@ -0,0 +1,75 @@ +/* Test of u16_vasprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u16-printf1.h" + +static uint16_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + uint16_t *result; + int retval; + + va_start (args, format); + retval = u16_vasprintf (&result, format, args); + va_end (args); + if (retval < 0) + return NULL; + ASSERT (result != NULL); + return result; +} + +static void +test_vasprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + test_vasprintf (); + return 0; +} diff --git a/tests/unistdio/test-u16-vsnprintf1.c b/tests/unistdio/test-u16-vsnprintf1.c new file mode 100644 index 00000000..886e95b3 --- /dev/null +++ b/tests/unistdio/test-u16-vsnprintf1.c @@ -0,0 +1,84 @@ +/* Test of u16_vsnprintf() function. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" +#include "xalloc.h" +#include "progname.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u16-printf1.h" + +static uint16_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + uint16_t buf[1000]; + int retval; + size_t length; + uint16_t *result; + + va_start (args, format); + retval = u16_vsnprintf (buf, sizeof (buf), format, args); + va_end (args); + if (retval < 0 || retval >= (int) sizeof (buf)) + return NULL; + length = u16_strlen (buf); + result = XNMALLOC (length + 1, uint16_t); + u16_cpy (result, buf, length + 1); + return result; +} + +static void +test_vsnprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + set_program_name (argv[0]); + + test_vsnprintf (); + + return 0; +} diff --git a/tests/unistdio/test-u16-vsprintf1.c b/tests/unistdio/test-u16-vsprintf1.c new file mode 100644 index 00000000..e6b6eab7 --- /dev/null +++ b/tests/unistdio/test-u16-vsprintf1.c @@ -0,0 +1,84 @@ +/* Test of u16_vsprintf() function. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" +#include "xalloc.h" +#include "progname.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u16-printf1.h" + +static uint16_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + uint16_t buf[1000]; + int retval; + size_t length; + uint16_t *result; + + va_start (args, format); + retval = u16_vsprintf (buf, format, args); + va_end (args); + if (retval < 0 || retval >= (int) sizeof (buf)) + return NULL; + length = u16_strlen (buf); + result = XNMALLOC (length + 1, uint16_t); + u16_cpy (result, buf, length + 1); + return result; +} + +static void +test_vsprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + set_program_name (argv[0]); + + test_vsprintf (); + + return 0; +} diff --git a/tests/unistdio/test-u32-asnprintf1.c b/tests/unistdio/test-u32-asnprintf1.c new file mode 100644 index 00000000..252e919f --- /dev/null +++ b/tests/unistdio/test-u32-asnprintf1.c @@ -0,0 +1,59 @@ +/* Test of u32_asnprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u32-asnprintf1.h" + +static void +test_asnprintf () +{ + test_function (u32_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + test_asnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u32-asnprintf1.h b/tests/unistdio/test-u32-asnprintf1.h new file mode 100644 index 00000000..dfaed98d --- /dev/null +++ b/tests/unistdio/test-u32-asnprintf1.h @@ -0,0 +1,60 @@ +/* Test of u32_[v]asnprintf() function. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +static void +test_function (uint32_t * (*my_asnprintf) (uint32_t *, size_t *, const char *, ...)) +{ + uint32_t buf[8]; + int size; + + /* Test return value convention. */ + + for (size = 0; size <= 8; size++) + { + size_t length = size; + uint32_t *result = my_asnprintf (NULL, &length, "%d", 12345); + static const uint32_t expected[] = + { '1', '2', '3', '4', '5', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + ASSERT (length == 5); + free (result); + } + + for (size = 0; size <= 8; size++) + { + static const uint32_t initializer[] = + { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F', 0 }; + static const uint32_t expected[] = + { '1', '2', '3', '4', '5', 0 }; + size_t length; + uint32_t *result; + + u32_cpy (buf, initializer, 8); + length = size; + result = my_asnprintf (buf, &length, "%d", 12345); + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + ASSERT (length == 5); + if (size < 6) + ASSERT (result != buf); + ASSERT (u32_cmp (buf + size, initializer + size, 8 - size) == 0); + if (result != buf) + free (result); + } +} diff --git a/tests/unistdio/test-u32-printf1.h b/tests/unistdio/test-u32-printf1.h new file mode 100644 index 00000000..240232fd --- /dev/null +++ b/tests/unistdio/test-u32-printf1.h @@ -0,0 +1,941 @@ +/* Test of u32_v[a]s[n]printf() function. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +static void +test_xfunction (uint32_t * (*my_xasprintf) (const char *, ...)) +{ + /* Test support of size specifiers as in C99. */ + + { + uint32_t *result = + my_xasprintf ("%ju %d", (uintmax_t) 12345671, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '3', '4', '5', '6', '7', '1', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { + uint32_t *result = + my_xasprintf ("%zu %d", (size_t) 12345672, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '3', '4', '5', '6', '7', '2', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { + uint32_t *result = + my_xasprintf ("%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '3', '4', '5', '6', '7', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { + uint32_t *result = + my_xasprintf ("%Lg %d", (long double) 1.5, 33, 44, 55); + static const uint32_t expected[] = + { '1', '.', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the 'U' conversion specifier for Unicode strings. */ + + { + static const uint8_t unicode_string[] = "Hello"; + { + uint32_t *result = + my_xasprintf ("%U %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint32_t *result = + my_xasprintf ("%10U %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint32_t *result = + my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint32_t *result = + my_xasprintf ("%010U %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint16_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; + { + uint32_t *result = + my_xasprintf ("%lU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint32_t *result = + my_xasprintf ("%10lU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint32_t *result = + my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint32_t *result = + my_xasprintf ("%010lU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint32_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; + { + uint32_t *result = + my_xasprintf ("%llU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint32_t *result = + my_xasprintf ("%10llU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint32_t *result = + my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'H', 'e', 'l', 'l', 'o', ' ', ' ', ' ', ' ', ' ', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint32_t *result = + my_xasprintf ("%010llU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 'H', 'e', 'l', 'l', 'o', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + } + + /* Test the support of the 's' conversion specifier for strings. */ + + { + uint32_t *result = + my_xasprintf ("Mr. %s %d", "Ronald Reagan", 33, 44, 55); + static const uint32_t expected[] = + { 'M', 'r', '.', ' ', 'R', 'o', 'n', 'a', 'l', 'd', + ' ', 'R', 'e', 'a', 'g', 'a', 'n', ' ', '3', '3', + 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint32_t *result = + my_xasprintf ("Mr. %20s %d", "Ronald Reagan", 33, 44, 55); + static const uint32_t expected[] = + { 'M', 'r', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', 'R', 'o', 'n', 'a', 'l', 'd', ' ', 'R', 'e', + 'a', 'g', 'a', 'n', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* FLAG_LEFT. */ + uint32_t *result = + my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); + static const uint32_t expected[] = + { 'M', 'r', '.', ' ', 'R', 'o', 'n', 'a', 'l', 'd', + ' ', 'R', 'e', 'a', 'g', 'a', 'n', ' ', ' ', ' ', + ' ', ' ', ' ', ' ', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* FLAG_ZERO: no effect. */ + uint32_t *result = + my_xasprintf ("Mr. %020s %d", "Ronald Reagan", 33, 44, 55); + static const uint32_t expected[] = + { 'M', 'r', '.', ' ', ' ', ' ', ' ', ' ', ' ', ' ', + ' ', 'R', 'o', 'n', 'a', 'l', 'd', ' ', 'R', 'e', + 'a', 'g', 'a', 'n', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal + output of floating-point numbers. */ + + { /* A positive number. */ + uint32_t *result = + my_xasprintf ("%a %d", 3.1416015625, 33, 44, 55); + static const uint32_t expected1[] = + { '0', 'x', '1', '.', '9', '2', '2', 'p', '+', '1', ' ', '3', '3', 0 }; + static const uint32_t expected2[] = + { '0', 'x', '3', '.', '2', '4', '4', 'p', '+', '0', ' ', '3', '3', 0 }; + static const uint32_t expected3[] = + { '0', 'x', '6', '.', '4', '8', '8', 'p', '-', '1', ' ', '3', '3', 0 }; + static const uint32_t expected4[] = + { '0', 'x', 'c', '.', '9', '1', 'p', '-', '2', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + + { /* Width. */ + uint32_t *result = + my_xasprintf ("%10a %d", 1.75, 33, 44, 55); + static const uint32_t expected1[] = + { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; + static const uint32_t expected2[] = + { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; + static const uint32_t expected3[] = + { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; + static const uint32_t expected4[] = + { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + + { /* Small precision. */ + uint32_t *result = + my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); + static const uint32_t expected1[] = + { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', + 0 + }; + static const uint32_t expected2[] = + { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', + 0 + }; + static const uint32_t expected3[] = + { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', + 0 + }; + static const uint32_t expected4[] = + { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '3', ' ', '3', '3', + 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + + { /* Large precision. */ + uint32_t *result = + my_xasprintf ("%.50a %d", 1.75, 33, 44, 55); + static const uint32_t expected1[] = + { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', + 0 + }; + static const uint32_t expected2[] = + { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', + 0 + }; + static const uint32_t expected3[] = + { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', + 0 + }; + static const uint32_t expected4[] = + { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '3', ' ', '3', '3', + 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + + { /* A positive number. */ + uint32_t *result = + my_xasprintf ("%La %d", 3.1416015625L, 33, 44, 55); + static const uint32_t expected1[] = + { '0', 'x', '1', '.', '9', '2', '2', 'p', '+', '1', + ' ', '3', '3', 0 + }; + static const uint32_t expected2[] = + { '0', 'x', '3', '.', '2', '4', '4', 'p', '+', '0', + ' ', '3', '3', 0 + }; + static const uint32_t expected3[] = + { '0', 'x', '6', '.', '4', '8', '8', 'p', '-', '1', + ' ', '3', '3', 0 + }; + static const uint32_t expected4[] = + { '0', 'x', 'c', '.', '9', '1', 'p', '-', '2', ' ', + '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + + { /* Width. */ + uint32_t *result = + my_xasprintf ("%10La %d", 1.75L, 33, 44, 55); + static const uint32_t expected1[] = + { ' ', ' ', '0', 'x', '1', '.', 'c', 'p', '+', '0', ' ', '3', '3', 0 }; + static const uint32_t expected2[] = + { ' ', ' ', '0', 'x', '3', '.', '8', 'p', '-', '1', ' ', '3', '3', 0 }; + static const uint32_t expected3[] = + { ' ', ' ', ' ', ' ', '0', 'x', '7', 'p', '-', '2', ' ', '3', '3', 0 }; + static const uint32_t expected4[] = + { ' ', ' ', ' ', ' ', '0', 'x', 'e', 'p', '-', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + + { /* Small precision. */ + uint32_t *result = + my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); + static const uint32_t expected1[] = + { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', + 0 + }; + static const uint32_t expected2[] = + { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', + 0 + }; + static const uint32_t expected3[] = + { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', + 0 + }; + static const uint32_t expected4[] = + { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '3', ' ', '3', '3', + 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + + { /* Large precision. */ + uint32_t *result = + my_xasprintf ("%.50La %d", 1.75L, 33, 44, 55); + static const uint32_t expected1[] = + { '0', 'x', '1', '.', 'c', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '+', '0', ' ', '3', '3', + 0 + }; + static const uint32_t expected2[] = + { '0', 'x', '3', '.', '8', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '1', ' ', '3', '3', + 0 + }; + static const uint32_t expected3[] = + { '0', 'x', '7', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '2', ' ', '3', '3', + 0 + }; + static const uint32_t expected4[] = + { '0', 'x', 'e', '.', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', + '0', '0', '0', '0', 'p', '-', '3', ' ', '3', '3', + 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0 + || u32_strcmp (result, expected3) == 0 + || u32_strcmp (result, expected4) == 0); + free (result); + } + + /* Test the support of the %f format directive. */ + + { /* A positive number. */ + uint32_t *result = + my_xasprintf ("%f %d", 12.75, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint32_t *result = + my_xasprintf ("%10f %d", 1.75, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint32_t *result = + my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '3', '4', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* A positive number. */ + uint32_t *result = + my_xasprintf ("%Lf %d", 12.75L, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint32_t *result = + my_xasprintf ("%10Lf %d", 1.75L, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint32_t *result = + my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '3', '4', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %F format directive. */ + + { /* A positive number. */ + uint32_t *result = + my_xasprintf ("%F %d", 12.75, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint32_t *result = + my_xasprintf ("%.F %d", 1234.0, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '3', '4', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* A positive number. */ + uint32_t *result = + my_xasprintf ("%LF %d", 12.75L, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '.', '7', '5', '0', '0', '0', '0', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint32_t *result = + my_xasprintf ("%.LF %d", 1234.0L, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '3', '4', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %e format directive. */ + + { /* A positive number. */ + uint32_t *result = + my_xasprintf ("%e %d", 12.75, 33, 44, 55); + static const uint32_t expected1[] = + { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', + '0', '1', ' ', '3', '3', 0 + }; + static const uint32_t expected2[] = + { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', + '0', '0', '1', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0); + free (result); + } + + { /* Width. */ + uint32_t *result = + my_xasprintf ("%15e %d", 1.75, 33, 44, 55); + static const uint32_t expected1[] = + { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', + '0', 'e', '+', '0', '0', ' ', '3', '3', 0 + }; + static const uint32_t expected2[] = + { ' ', ' ', '1', '.', '7', '5', '0', '0', '0', '0', + 'e', '+', '0', '0', '0', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0); + free (result); + } + + { /* Precision. */ + uint32_t *result = + my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); + static const uint32_t expected1[] = + { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; + static const uint32_t expected2[] = + { '1', 'e', '+', '0', '0', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0); + free (result); + } + + { /* A positive number. */ + uint32_t *result = + my_xasprintf ("%Le %d", 12.75L, 33, 44, 55); + static const uint32_t expected[] = + { '1', '.', '2', '7', '5', '0', '0', '0', 'e', '+', + '0', '1', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint32_t *result = + my_xasprintf ("%15Le %d", 1.75L, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', '1', '.', '7', '5', '0', '0', '0', + '0', 'e', '+', '0', '0', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint32_t *result = + my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); + static const uint32_t expected[] = + { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %g format directive. */ + + { /* A positive number. */ + uint32_t *result = + my_xasprintf ("%g %d", 12.75, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint32_t *result = + my_xasprintf ("%10g %d", 1.75, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint32_t *result = + my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); + static const uint32_t expected1[] = + { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; + static const uint32_t expected2[] = + { '1', 'e', '+', '0', '0', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected1) == 0 + || u32_strcmp (result, expected2) == 0); + free (result); + } + + { /* A positive number. */ + uint32_t *result = + my_xasprintf ("%Lg %d", 12.75L, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint32_t *result = + my_xasprintf ("%10Lg %d", 1.75L, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', ' ', '1', '.', '7', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint32_t *result = + my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); + static const uint32_t expected[] = + { '1', 'e', '+', '0', '3', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %n format directive. */ + + { + int count = -1; + uint32_t *result = + my_xasprintf ("%d %n", 123, &count, 33, 44, 55); + static const uint32_t expected[] = + { '1', '2', '3', ' ', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + ASSERT (count == 4); + free (result); + } + + /* Test the support of the POSIX/XSI format strings with positions. */ + + { + uint32_t *result = + my_xasprintf ("%2$d %1$d", 33, 55); + static const uint32_t expected[] = + { '5', '5', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the grouping flag. */ + + { + uint32_t *result = + my_xasprintf ("%'d %d", 1234567, 99); + ASSERT (result != NULL); + ASSERT (result[u32_strlen (result) - 1] == '9'); + free (result); + } + + /* Test the support of the 'U' conversion specifier for Unicode strings. */ + + { + static const uint8_t unicode_string[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ + { + uint32_t *result = + my_xasprintf ("%U %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint32_t *result = + my_xasprintf ("%20U %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint32_t *result = + my_xasprintf ("%-20U %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint32_t *result = + my_xasprintf ("%020U %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint16_t unicode_string[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + { + uint32_t *result = + my_xasprintf ("%lU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint32_t *result = + my_xasprintf ("%20lU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint32_t *result = + my_xasprintf ("%-20lU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint32_t *result = + my_xasprintf ("%020lU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint32_t unicode_string[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + { + uint32_t *result = + my_xasprintf ("%llU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint32_t *result = + my_xasprintf ("%20llU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint32_t *result = + my_xasprintf ("%-20llU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', + 'k', 'o', 'w', 's', 'k', 'i', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint32_t *result = + my_xasprintf ("%020llU %d", unicode_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', 'R', 'a', 'f', 'a', 0x0142, ' ', + 'M', 'a', 's', 'z', 'k', 'o', 'w', 's', 'k', 'i', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + free (result); + } + } + + /* Test non-ASCII characters in the format string. */ + + { + uint32_t *result = + my_xasprintf ("\304rger", 33, 44, 55); + ASSERT (result == NULL && errno == EINVAL); + } +} diff --git a/tests/unistdio/test-u32-vasnprintf1.c b/tests/unistdio/test-u32-vasnprintf1.c new file mode 100644 index 00000000..959bdab3 --- /dev/null +++ b/tests/unistdio/test-u32-vasnprintf1.c @@ -0,0 +1,88 @@ +/* Test of u32_vasnprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u32-asnprintf1.h" +#include "test-u32-printf1.h" + +static uint32_t * +my_asnprintf (uint32_t *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + uint32_t *ret; + + va_start (args, format); + ret = u32_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static uint32_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + size_t length; + uint32_t *ret; + + va_start (args, format); + ret = u32_vasnprintf (NULL, &length, format, args); + va_end (args); + if (ret != NULL) + ASSERT (length == u32_strlen (ret)); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u32-vasnprintf2.c b/tests/unistdio/test-u32-vasnprintf2.c new file mode 100644 index 00000000..9d8ab007 --- /dev/null +++ b/tests/unistdio/test-u32-vasnprintf2.c @@ -0,0 +1,132 @@ +/* Test of u32_vasnprintf() function in an ISO-8859-1 locale. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static void +test_function (uint32_t * (*my_asnprintf) (uint32_t *, size_t *, const char *, ...)) +{ + /* Test the support of the 's' conversion specifier for strings. */ + + { + const char *locale_string = "\304rger"; /* Ärger */ + { + size_t length; + uint32_t *result = + my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); + static const uint32_t expected[] = + { 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + ASSERT (length == u32_strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + uint32_t *result = + my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + ASSERT (length == u32_strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + uint32_t *result = + my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); + static const uint32_t expected[] = + { 0x00c4, 'r', 'g', 'e', 'r', ' ', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + ASSERT (length == u32_strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + uint32_t *result = + my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + ASSERT (length == u32_strlen (result)); + free (result); + } + } +} + +static uint32_t * +my_asnprintf (uint32_t *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + uint32_t *ret; + + va_start (args, format); + ret = u32_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u32-vasnprintf2.sh b/tests/unistdio/test-u32-vasnprintf2.sh new file mode 100755 index 00000000..ae39dd48 --- /dev/null +++ b/tests/unistdio/test-u32-vasnprintf2.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Test whether a traditional french locale is installed. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR != none; then + testlocale=$LOCALE_FR +else + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$testlocale \ +./test-u32-vasnprintf1${EXEEXT} \ + || exit 1 + +LC_ALL=$testlocale \ +./test-u32-vasnprintf2${EXEEXT} diff --git a/tests/unistdio/test-u32-vasnprintf3.c b/tests/unistdio/test-u32-vasnprintf3.c new file mode 100644 index 00000000..73f7c6c7 --- /dev/null +++ b/tests/unistdio/test-u32-vasnprintf3.c @@ -0,0 +1,132 @@ +/* Test of u32_vasnprintf() function in an UTF-8 locale. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static void +test_function (uint32_t * (*my_asnprintf) (uint32_t *, size_t *, const char *, ...)) +{ + /* Test the support of the 's' conversion specifier for strings. */ + + { + const char *locale_string = "\303\204rger"; /* Ärger */ + { + size_t length; + uint32_t *result = + my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); + static const uint32_t expected[] = + { 0x00c4, 'r', 'g', 'e', 'r', ' ', '3', '3', 0 }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + ASSERT (length == u32_strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + uint32_t *result = + my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + ASSERT (length == u32_strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + uint32_t *result = + my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); + static const uint32_t expected[] = + { 0x00c4, 'r', 'g', 'e', 'r', ' ', ' ', ' ', ' ', ' ', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + ASSERT (length == u32_strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + uint32_t *result = + my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); + static const uint32_t expected[] = + { ' ', ' ', ' ', ' ', ' ', 0x00c4, 'r', 'g', 'e', 'r', + ' ', '3', '3', 0 + }; + ASSERT (result != NULL); + ASSERT (u32_strcmp (result, expected) == 0); + ASSERT (length == u32_strlen (result)); + free (result); + } + } +} + +static uint32_t * +my_asnprintf (uint32_t *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + uint32_t *ret; + + va_start (args, format); + ret = u32_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u32-vasnprintf3.sh b/tests/unistdio/test-u32-vasnprintf3.sh new file mode 100755 index 00000000..d2c31170 --- /dev/null +++ b/tests/unistdio/test-u32-vasnprintf3.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Test whether a french Unicode locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 != none; then + testlocale=$LOCALE_FR_UTF8 +else + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$testlocale \ +./test-u32-vasnprintf1${EXEEXT} \ + || exit 1 + +LC_ALL=$testlocale \ +./test-u32-vasnprintf3${EXEEXT} diff --git a/tests/unistdio/test-u32-vasprintf1.c b/tests/unistdio/test-u32-vasprintf1.c new file mode 100644 index 00000000..39e68d25 --- /dev/null +++ b/tests/unistdio/test-u32-vasprintf1.c @@ -0,0 +1,75 @@ +/* Test of u32_vasprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u32-printf1.h" + +static uint32_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + uint32_t *result; + int retval; + + va_start (args, format); + retval = u32_vasprintf (&result, format, args); + va_end (args); + if (retval < 0) + return NULL; + ASSERT (result != NULL); + return result; +} + +static void +test_vasprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + test_vasprintf (); + return 0; +} diff --git a/tests/unistdio/test-u32-vsnprintf1.c b/tests/unistdio/test-u32-vsnprintf1.c new file mode 100644 index 00000000..d7727081 --- /dev/null +++ b/tests/unistdio/test-u32-vsnprintf1.c @@ -0,0 +1,84 @@ +/* Test of u32_vsnprintf() function. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" +#include "xalloc.h" +#include "progname.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u32-printf1.h" + +static uint32_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + uint32_t buf[1000]; + int retval; + size_t length; + uint32_t *result; + + va_start (args, format); + retval = u32_vsnprintf (buf, sizeof (buf), format, args); + va_end (args); + if (retval < 0 || retval >= (int) sizeof (buf)) + return NULL; + length = u32_strlen (buf); + result = XNMALLOC (length + 1, uint32_t); + u32_cpy (result, buf, length + 1); + return result; +} + +static void +test_vsnprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + set_program_name (argv[0]); + + test_vsnprintf (); + + return 0; +} diff --git a/tests/unistdio/test-u32-vsprintf1.c b/tests/unistdio/test-u32-vsprintf1.c new file mode 100644 index 00000000..8398b274 --- /dev/null +++ b/tests/unistdio/test-u32-vsprintf1.c @@ -0,0 +1,84 @@ +/* Test of u32_vsprintf() function. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" +#include "xalloc.h" +#include "progname.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u32-printf1.h" + +static uint32_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + uint32_t buf[1000]; + int retval; + size_t length; + uint32_t *result; + + va_start (args, format); + retval = u32_vsprintf (buf, format, args); + va_end (args); + if (retval < 0 || retval >= (int) sizeof (buf)) + return NULL; + length = u32_strlen (buf); + result = XNMALLOC (length + 1, uint32_t); + u32_cpy (result, buf, length + 1); + return result; +} + +static void +test_vsprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + set_program_name (argv[0]); + + test_vsprintf (); + + return 0; +} diff --git a/tests/unistdio/test-u8-asnprintf1.c b/tests/unistdio/test-u8-asnprintf1.c new file mode 100644 index 00000000..852d76b4 --- /dev/null +++ b/tests/unistdio/test-u8-asnprintf1.c @@ -0,0 +1,59 @@ +/* Test of u8_asnprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u8-asnprintf1.h" + +static void +test_asnprintf () +{ + test_function (u8_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + test_asnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u8-asnprintf1.h b/tests/unistdio/test-u8-asnprintf1.h new file mode 100644 index 00000000..063f145f --- /dev/null +++ b/tests/unistdio/test-u8-asnprintf1.h @@ -0,0 +1,57 @@ +/* Test of u8_[v]asnprintf() function. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +static void +test_function (uint8_t * (*my_asnprintf) (uint8_t *, size_t *, const char *, ...)) +{ + uint8_t buf[8]; + int size; + + /* Test return value convention. */ + + for (size = 0; size <= 8; size++) + { + size_t length = size; + uint8_t *result = my_asnprintf (NULL, &length, "%d", 12345); + static const uint8_t expected[] = "12345"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + ASSERT (length == 5); + free (result); + } + + for (size = 0; size <= 8; size++) + { + static const uint8_t initializer[] = "DEADBEEF"; + static const uint8_t expected[] = "12345"; + size_t length; + uint8_t *result; + + u8_cpy (buf, initializer, 8); + length = size; + result = my_asnprintf (buf, &length, "%d", 12345); + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + ASSERT (length == 5); + if (size < 6) + ASSERT (result != buf); + ASSERT (u8_cmp (buf + size, initializer + size, 8 - size) == 0); + if (result != buf) + free (result); + } +} diff --git a/tests/unistdio/test-u8-printf1.h b/tests/unistdio/test-u8-printf1.h new file mode 100644 index 00000000..4ac6573f --- /dev/null +++ b/tests/unistdio/test-u8-printf1.h @@ -0,0 +1,704 @@ +/* Test of u8_v[a]s[n]printf() function. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +static void +test_xfunction (uint8_t * (*my_xasprintf) (const char *, ...)) +{ + /* Test support of size specifiers as in C99. */ + + { + uint8_t *result = + my_xasprintf ("%ju %d", (uintmax_t) 12345671, 33, 44, 55); + static const uint8_t expected[] = "12345671 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { + uint8_t *result = + my_xasprintf ("%zu %d", (size_t) 12345672, 33, 44, 55); + static const uint8_t expected[] = "12345672 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { + uint8_t *result = + my_xasprintf ("%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); + static const uint8_t expected[] = "12345673 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { + uint8_t *result = + my_xasprintf ("%Lg %d", (long double) 1.5, 33, 44, 55); + static const uint8_t expected[] = "1.5 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the 'U' conversion specifier for Unicode strings. */ + + { + static const uint8_t unicode_string[] = "Hello"; + { + uint8_t *result = + my_xasprintf ("%U %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint8_t *result = + my_xasprintf ("%10U %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint8_t *result = + my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint8_t *result = + my_xasprintf ("%010U %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint16_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; + { + uint8_t *result = + my_xasprintf ("%lU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint8_t *result = + my_xasprintf ("%10lU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint8_t *result = + my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint8_t *result = + my_xasprintf ("%010lU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint32_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; + { + uint8_t *result = + my_xasprintf ("%llU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint8_t *result = + my_xasprintf ("%10llU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint8_t *result = + my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint8_t *result = + my_xasprintf ("%010llU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Hello 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + } + + /* Test the support of the 's' conversion specifier for strings. */ + + { + uint8_t *result = + my_xasprintf ("Mr. %s %d", "Ronald Reagan", 33, 44, 55); + static const uint8_t expected[] = "Mr. Ronald Reagan 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint8_t *result = + my_xasprintf ("Mr. %20s %d", "Ronald Reagan", 33, 44, 55); + static const uint8_t expected[] = "Mr. Ronald Reagan 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* FLAG_LEFT. */ + uint8_t *result = + my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); + static const uint8_t expected[] = "Mr. Ronald Reagan 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* FLAG_ZERO: no effect. */ + uint8_t *result = + my_xasprintf ("Mr. %020s %d", "Ronald Reagan", 33, 44, 55); + static const uint8_t expected[] = "Mr. Ronald Reagan 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal + output of floating-point numbers. */ + + { /* A positive number. */ + uint8_t *result = + my_xasprintf ("%a %d", 3.1416015625, 33, 44, 55); + static const uint8_t expected1[] = "0x1.922p+1 33"; + static const uint8_t expected2[] = "0x3.244p+0 33"; + static const uint8_t expected3[] = "0x6.488p-1 33"; + static const uint8_t expected4[] = "0xc.91p-2 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + + { /* Width. */ + uint8_t *result = + my_xasprintf ("%10a %d", 1.75, 33, 44, 55); + static const uint8_t expected1[] = " 0x1.cp+0 33"; + static const uint8_t expected2[] = " 0x3.8p-1 33"; + static const uint8_t expected3[] = " 0x7p-2 33"; + static const uint8_t expected4[] = " 0xep-3 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + + { /* Small precision. */ + uint8_t *result = + my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); + static const uint8_t expected1[] = "0x1.c000000000p+0 33"; + static const uint8_t expected2[] = "0x3.8000000000p-1 33"; + static const uint8_t expected3[] = "0x7.0000000000p-2 33"; + static const uint8_t expected4[] = "0xe.0000000000p-3 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + + { /* Large precision. */ + uint8_t *result = + my_xasprintf ("%.50a %d", 1.75, 33, 44, 55); + static const uint8_t expected1[] = "0x1.c0000000000000000000000000000000000000000000000000p+0 33"; + static const uint8_t expected2[] = "0x3.80000000000000000000000000000000000000000000000000p-1 33"; + static const uint8_t expected3[] = "0x7.00000000000000000000000000000000000000000000000000p-2 33"; + static const uint8_t expected4[] = "0xe.00000000000000000000000000000000000000000000000000p-3 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + + { /* A positive number. */ + uint8_t *result = + my_xasprintf ("%La %d", 3.1416015625L, 33, 44, 55); + static const uint8_t expected1[] = "0x1.922p+1 33"; + static const uint8_t expected2[] = "0x3.244p+0 33"; + static const uint8_t expected3[] = "0x6.488p-1 33"; + static const uint8_t expected4[] = "0xc.91p-2 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + + { /* Width. */ + uint8_t *result = + my_xasprintf ("%10La %d", 1.75L, 33, 44, 55); + static const uint8_t expected1[] = " 0x1.cp+0 33"; + static const uint8_t expected2[] = " 0x3.8p-1 33"; + static const uint8_t expected3[] = " 0x7p-2 33"; + static const uint8_t expected4[] = " 0xep-3 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + + { /* Small precision. */ + uint8_t *result = + my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); + static const uint8_t expected1[] = "0x1.c000000000p+0 33"; + static const uint8_t expected2[] = "0x3.8000000000p-1 33"; + static const uint8_t expected3[] = "0x7.0000000000p-2 33"; + static const uint8_t expected4[] = "0xe.0000000000p-3 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + + { /* Large precision. */ + uint8_t *result = + my_xasprintf ("%.50La %d", 1.75L, 33, 44, 55); + static const uint8_t expected1[] = "0x1.c0000000000000000000000000000000000000000000000000p+0 33"; + static const uint8_t expected2[] = "0x3.80000000000000000000000000000000000000000000000000p-1 33"; + static const uint8_t expected3[] = "0x7.00000000000000000000000000000000000000000000000000p-2 33"; + static const uint8_t expected4[] = "0xe.00000000000000000000000000000000000000000000000000p-3 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0 + || u8_strcmp (result, expected3) == 0 + || u8_strcmp (result, expected4) == 0); + free (result); + } + + /* Test the support of the %f format directive. */ + + { /* A positive number. */ + uint8_t *result = + my_xasprintf ("%f %d", 12.75, 33, 44, 55); + static const uint8_t expected[] = "12.750000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint8_t *result = + my_xasprintf ("%10f %d", 1.75, 33, 44, 55); + static const uint8_t expected[] = " 1.750000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint8_t *result = + my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); + static const uint8_t expected[] = "1234 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* A positive number. */ + uint8_t *result = + my_xasprintf ("%Lf %d", 12.75L, 33, 44, 55); + static const uint8_t expected[] = "12.750000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint8_t *result = + my_xasprintf ("%10Lf %d", 1.75L, 33, 44, 55); + static const uint8_t expected[] = " 1.750000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint8_t *result = + my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); + static const uint8_t expected[] = "1234 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %F format directive. */ + + { /* A positive number. */ + uint8_t *result = + my_xasprintf ("%F %d", 12.75, 33, 44, 55); + static const uint8_t expected[] = "12.750000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint8_t *result = + my_xasprintf ("%.F %d", 1234.0, 33, 44, 55); + static const uint8_t expected[] = "1234 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* A positive number. */ + uint8_t *result = + my_xasprintf ("%LF %d", 12.75L, 33, 44, 55); + static const uint8_t expected[] = "12.750000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint8_t *result = + my_xasprintf ("%.LF %d", 1234.0L, 33, 44, 55); + static const uint8_t expected[] = "1234 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %e format directive. */ + + { /* A positive number. */ + uint8_t *result = + my_xasprintf ("%e %d", 12.75, 33, 44, 55); + static const uint8_t expected1[] = "1.275000e+01 33"; + static const uint8_t expected2[] = "1.275000e+001 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0); + free (result); + } + + { /* Width. */ + uint8_t *result = + my_xasprintf ("%15e %d", 1.75, 33, 44, 55); + static const uint8_t expected1[] = " 1.750000e+00 33"; + static const uint8_t expected2[] = " 1.750000e+000 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0); + free (result); + } + + { /* Precision. */ + uint8_t *result = + my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); + static const uint8_t expected1[] = "1e+03 33"; + static const uint8_t expected2[] = "1e+003 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0); + free (result); + } + + { /* A positive number. */ + uint8_t *result = + my_xasprintf ("%Le %d", 12.75L, 33, 44, 55); + static const uint8_t expected[] = "1.275000e+01 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint8_t *result = + my_xasprintf ("%15Le %d", 1.75L, 33, 44, 55); + static const uint8_t expected[] = " 1.750000e+00 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint8_t *result = + my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); + static const uint8_t expected[] = "1e+03 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %g format directive. */ + + { /* A positive number. */ + uint8_t *result = + my_xasprintf ("%g %d", 12.75, 33, 44, 55); + static const uint8_t expected[] = "12.75 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint8_t *result = + my_xasprintf ("%10g %d", 1.75, 33, 44, 55); + static const uint8_t expected[] = " 1.75 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint8_t *result = + my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); + static const uint8_t expected1[] = "1e+03 33"; + static const uint8_t expected2[] = "1e+003 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected1) == 0 + || u8_strcmp (result, expected2) == 0); + free (result); + } + + { /* A positive number. */ + uint8_t *result = + my_xasprintf ("%Lg %d", 12.75L, 33, 44, 55); + static const uint8_t expected[] = "12.75 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Width. */ + uint8_t *result = + my_xasprintf ("%10Lg %d", 1.75L, 33, 44, 55); + static const uint8_t expected[] = " 1.75 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + { /* Precision. */ + uint8_t *result = + my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); + static const uint8_t expected[] = "1e+03 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the %n format directive. */ + + { + int count = -1; + uint8_t *result = + my_xasprintf ("%d %n", 123, &count, 33, 44, 55); + static const uint8_t expected[] = "123 "; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + ASSERT (count == 4); + free (result); + } + + /* Test the support of the POSIX/XSI format strings with positions. */ + + { + uint8_t *result = + my_xasprintf ("%2$d %1$d", 33, 55); + static const uint8_t expected[] = "55 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + + /* Test the support of the grouping flag. */ + + { + uint8_t *result = + my_xasprintf ("%'d %d", 1234567, 99); + ASSERT (result != NULL); + ASSERT (result[u8_strlen (result) - 1] == '9'); + free (result); + } + + /* Test the support of the 'U' conversion specifier for Unicode strings. */ + + { + static const uint8_t unicode_string[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ + { + uint8_t *result = + my_xasprintf ("%U %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint8_t *result = + my_xasprintf ("%20U %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint8_t *result = + my_xasprintf ("%-20U %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint8_t *result = + my_xasprintf ("%020U %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint16_t unicode_string[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + { + uint8_t *result = + my_xasprintf ("%lU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint8_t *result = + my_xasprintf ("%20lU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint8_t *result = + my_xasprintf ("%-20lU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint8_t *result = + my_xasprintf ("%020lU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + } + + { + static const uint32_t unicode_string[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + { + uint8_t *result = + my_xasprintf ("%llU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* Width. */ + uint8_t *result = + my_xasprintf ("%20llU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_LEFT. */ + uint8_t *result = + my_xasprintf ("%-20llU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = "Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + uint8_t *result = + my_xasprintf ("%020llU %d", unicode_string, 33, 44, 55); + static const uint8_t expected[] = " Rafa\305\202 Maszkowski 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + free (result); + } + } + + /* Test non-ASCII characters in the format string. */ + + { + uint8_t *result = + my_xasprintf ("\304rger", 33, 44, 55); + ASSERT (result == NULL && errno == EINVAL); + } +} diff --git a/tests/unistdio/test-u8-vasnprintf1.c b/tests/unistdio/test-u8-vasnprintf1.c new file mode 100644 index 00000000..3329df40 --- /dev/null +++ b/tests/unistdio/test-u8-vasnprintf1.c @@ -0,0 +1,88 @@ +/* Test of u8_vasnprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u8-asnprintf1.h" +#include "test-u8-printf1.h" + +static uint8_t * +my_asnprintf (uint8_t *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + uint8_t *ret; + + va_start (args, format); + ret = u8_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static uint8_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + size_t length; + uint8_t *ret; + + va_start (args, format); + ret = u8_vasnprintf (NULL, &length, format, args); + va_end (args); + if (ret != NULL) + ASSERT (length == u8_strlen (ret)); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u8-vasnprintf2.c b/tests/unistdio/test-u8-vasnprintf2.c new file mode 100644 index 00000000..4283be69 --- /dev/null +++ b/tests/unistdio/test-u8-vasnprintf2.c @@ -0,0 +1,122 @@ +/* Test of u8_vasnprintf() function in an ISO-8859-1 locale. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static void +test_function (uint8_t * (*my_asnprintf) (uint8_t *, size_t *, const char *, ...)) +{ + /* Test the support of the 's' conversion specifier for strings. */ + + { + const char *locale_string = "\304rger"; /* Ärger */ + { + size_t length; + uint8_t *result = + my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); + static const uint8_t expected[] = "\303\204rger 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + ASSERT (length == u8_strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + uint8_t *result = + my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); + static const uint8_t expected[] = " \303\204rger 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + ASSERT (length == u8_strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + uint8_t *result = + my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); + static const uint8_t expected[] = "\303\204rger 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + ASSERT (length == u8_strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + uint8_t *result = + my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); + static const uint8_t expected[] = " \303\204rger 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + ASSERT (length == u8_strlen (result)); + free (result); + } + } +} + +static uint8_t * +my_asnprintf (uint8_t *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + uint8_t *ret; + + va_start (args, format); + ret = u8_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u8-vasnprintf2.sh b/tests/unistdio/test-u8-vasnprintf2.sh new file mode 100755 index 00000000..ea5fcb08 --- /dev/null +++ b/tests/unistdio/test-u8-vasnprintf2.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Test whether a traditional french locale is installed. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR != none; then + testlocale=$LOCALE_FR +else + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$testlocale \ +./test-u8-vasnprintf1${EXEEXT} \ + || exit 1 + +LC_ALL=$testlocale \ +./test-u8-vasnprintf2${EXEEXT} diff --git a/tests/unistdio/test-u8-vasnprintf3.c b/tests/unistdio/test-u8-vasnprintf3.c new file mode 100644 index 00000000..fc645bca --- /dev/null +++ b/tests/unistdio/test-u8-vasnprintf3.c @@ -0,0 +1,122 @@ +/* Test of u8_vasnprintf() function in an UTF-8 locale. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static void +test_function (uint8_t * (*my_asnprintf) (uint8_t *, size_t *, const char *, ...)) +{ + /* Test the support of the 's' conversion specifier for strings. */ + + { + const char *locale_string = "\303\204rger"; /* Ärger */ + { + size_t length; + uint8_t *result = + my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); + static const uint8_t expected[] = "\303\204rger 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + ASSERT (length == u8_strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + uint8_t *result = + my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); + static const uint8_t expected[] = " \303\204rger 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + ASSERT (length == u8_strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + uint8_t *result = + my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); + static const uint8_t expected[] = "\303\204rger 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + ASSERT (length == u8_strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + uint8_t *result = + my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); + static const uint8_t expected[] = " \303\204rger 33"; + ASSERT (result != NULL); + ASSERT (u8_strcmp (result, expected) == 0); + ASSERT (length == u8_strlen (result)); + free (result); + } + } +} + +static uint8_t * +my_asnprintf (uint8_t *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + uint8_t *ret; + + va_start (args, format); + ret = u8_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-u8-vasnprintf3.sh b/tests/unistdio/test-u8-vasnprintf3.sh new file mode 100755 index 00000000..9df0044a --- /dev/null +++ b/tests/unistdio/test-u8-vasnprintf3.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Test whether a french Unicode locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 != none; then + testlocale=$LOCALE_FR_UTF8 +else + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$testlocale \ +./test-u8-vasnprintf1${EXEEXT} \ + || exit 1 + +LC_ALL=$testlocale \ +./test-u8-vasnprintf3${EXEEXT} diff --git a/tests/unistdio/test-u8-vasprintf1.c b/tests/unistdio/test-u8-vasprintf1.c new file mode 100644 index 00000000..8a2caae8 --- /dev/null +++ b/tests/unistdio/test-u8-vasprintf1.c @@ -0,0 +1,75 @@ +/* Test of u8_vasprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u8-printf1.h" + +static uint8_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + uint8_t *result; + int retval; + + va_start (args, format); + retval = u8_vasprintf (&result, format, args); + va_end (args); + if (retval < 0) + return NULL; + ASSERT (result != NULL); + return result; +} + +static void +test_vasprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + test_vasprintf (); + return 0; +} diff --git a/tests/unistdio/test-u8-vsnprintf1.c b/tests/unistdio/test-u8-vsnprintf1.c new file mode 100644 index 00000000..6dd7439d --- /dev/null +++ b/tests/unistdio/test-u8-vsnprintf1.c @@ -0,0 +1,84 @@ +/* Test of u8_vsnprintf() function. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" +#include "xalloc.h" +#include "progname.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u8-printf1.h" + +static uint8_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + uint8_t buf[1000]; + int retval; + size_t length; + uint8_t *result; + + va_start (args, format); + retval = u8_vsnprintf (buf, sizeof (buf), format, args); + va_end (args); + if (retval < 0 || retval >= (int) sizeof (buf)) + return NULL; + length = u8_strlen (buf); + result = XNMALLOC (length + 1, uint8_t); + u8_cpy (result, buf, length + 1); + return result; +} + +static void +test_vsnprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + set_program_name (argv[0]); + + test_vsnprintf (); + + return 0; +} diff --git a/tests/unistdio/test-u8-vsprintf1.c b/tests/unistdio/test-u8-vsprintf1.c new file mode 100644 index 00000000..9559df0c --- /dev/null +++ b/tests/unistdio/test-u8-vsprintf1.c @@ -0,0 +1,84 @@ +/* Test of u8_vsprintf() function. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "unistr.h" +#include "xalloc.h" +#include "progname.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-u8-printf1.h" + +static uint8_t * +my_xasprintf (const char *format, ...) +{ + va_list args; + uint8_t buf[1000]; + int retval; + size_t length; + uint8_t *result; + + va_start (args, format); + retval = u8_vsprintf (buf, format, args); + va_end (args); + if (retval < 0 || retval >= (int) sizeof (buf)) + return NULL; + length = u8_strlen (buf); + result = XNMALLOC (length + 1, uint8_t); + u8_cpy (result, buf, length + 1); + return result; +} + +static void +test_vsprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + set_program_name (argv[0]); + + test_vsprintf (); + + return 0; +} diff --git a/tests/unistdio/test-ulc-asnprintf1.c b/tests/unistdio/test-ulc-asnprintf1.c new file mode 100644 index 00000000..591ae262 --- /dev/null +++ b/tests/unistdio/test-ulc-asnprintf1.c @@ -0,0 +1,56 @@ +/* Test of ulc_asnprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-ulc-asnprintf1.h" + +static void +test_asnprintf () +{ + test_function (ulc_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + test_asnprintf (); + return 0; +} diff --git a/tests/unistdio/test-ulc-asnprintf1.h b/tests/unistdio/test-ulc-asnprintf1.h new file mode 100644 index 00000000..285a4062 --- /dev/null +++ b/tests/unistdio/test-ulc-asnprintf1.h @@ -0,0 +1,54 @@ +/* Test of ulc_[v]asnprintf() functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +static void +test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) +{ + char buf[8]; + int size; + + /* Test return value convention. */ + + for (size = 0; size <= 8; size++) + { + size_t length = size; + char *result = my_asnprintf (NULL, &length, "%d", 12345); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345") == 0); + ASSERT (length == 5); + free (result); + } + + for (size = 0; size <= 8; size++) + { + size_t length; + char *result; + + memcpy (buf, "DEADBEEF", 8); + length = size; + result = my_asnprintf (buf, &length, "%d", 12345); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345") == 0); + ASSERT (length == 5); + if (size < 6) + ASSERT (result != buf); + ASSERT (memcmp (buf + size, "DEADBEEF" + size, 8 - size) == 0); + if (result != buf) + free (result); + } +} diff --git a/tests/unistdio/test-ulc-printf1.h b/tests/unistdio/test-ulc-printf1.h new file mode 100644 index 00000000..77516d61 --- /dev/null +++ b/tests/unistdio/test-ulc-printf1.h @@ -0,0 +1,498 @@ +/* Test of ulc_v[a]s[n]printf() functions. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +static void +test_xfunction (char * (*my_xasprintf) (const char *, ...)) +{ + /* Test support of size specifiers as in C99. */ + + { + char *result = + my_xasprintf ("%ju %d", (uintmax_t) 12345671, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345671 33") == 0); + free (result); + } + + { + char *result = + my_xasprintf ("%zu %d", (size_t) 12345672, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345672 33") == 0); + free (result); + } + + { + char *result = + my_xasprintf ("%tu %d", (ptrdiff_t) 12345673, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12345673 33") == 0); + free (result); + } + + { + char *result = + my_xasprintf ("%Lg %d", (long double) 1.5, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.5 33") == 0); + free (result); + } + + /* Test the support of the 'U' conversion specifier for Unicode strings. */ + + { + static const uint8_t unicode_string[] = "Hello"; + { + char *result = + my_xasprintf ("%U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Hello 33") == 0); + free (result); + } + { /* Width. */ + char *result = + my_xasprintf ("%10U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Hello 33") == 0); + free (result); + } + { /* FLAG_LEFT. */ + char *result = + my_xasprintf ("%-10U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Hello 33") == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + char *result = + my_xasprintf ("%010U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Hello 33") == 0); + free (result); + } + } + + { + static const uint16_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; + { + char *result = + my_xasprintf ("%lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Hello 33") == 0); + free (result); + } + { /* Width. */ + char *result = + my_xasprintf ("%10lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Hello 33") == 0); + free (result); + } + { /* FLAG_LEFT. */ + char *result = + my_xasprintf ("%-10lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Hello 33") == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + char *result = + my_xasprintf ("%010lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Hello 33") == 0); + free (result); + } + } + + { + static const uint32_t unicode_string[] = { 'H', 'e', 'l', 'l', 'o', 0 }; + { + char *result = + my_xasprintf ("%llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Hello 33") == 0); + free (result); + } + { /* Width. */ + char *result = + my_xasprintf ("%10llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Hello 33") == 0); + free (result); + } + { /* FLAG_LEFT. */ + char *result = + my_xasprintf ("%-10llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Hello 33") == 0); + free (result); + } + { /* FLAG_ZERO: no effect. */ + char *result = + my_xasprintf ("%010llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Hello 33") == 0); + free (result); + } + } + + /* Test the support of the 's' conversion specifier for strings. */ + + { + char *result = + my_xasprintf ("Mr. %s %d", "Ronald Reagan", 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Mr. Ronald Reagan 33") == 0); + free (result); + } + + { /* Width. */ + char *result = + my_xasprintf ("Mr. %20s %d", "Ronald Reagan", 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Mr. Ronald Reagan 33") == 0); + free (result); + } + + { /* FLAG_LEFT. */ + char *result = + my_xasprintf ("Mr. %-20s %d", "Ronald Reagan", 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Mr. Ronald Reagan 33") == 0); + free (result); + } + + { /* FLAG_ZERO: no effect. */ + char *result = + my_xasprintf ("Mr. %020s %d", "Ronald Reagan", 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Mr. Ronald Reagan 33") == 0); + free (result); + } + + /* Test the support of the 'a' and 'A' conversion specifier for hexadecimal + output of floating-point numbers. */ + + { /* A positive number. */ + char *result = + my_xasprintf ("%a %d", 3.1416015625, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.922p+1 33") == 0 + || strcmp (result, "0x3.244p+0 33") == 0 + || strcmp (result, "0x6.488p-1 33") == 0 + || strcmp (result, "0xc.91p-2 33") == 0); + free (result); + } + + { /* Width. */ + char *result = + my_xasprintf ("%10a %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 0x1.cp+0 33") == 0 + || strcmp (result, " 0x3.8p-1 33") == 0 + || strcmp (result, " 0x7p-2 33") == 0 + || strcmp (result, " 0xep-3 33") == 0); + free (result); + } + + { /* Small precision. */ + char *result = + my_xasprintf ("%.10a %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 + || strcmp (result, "0x3.8000000000p-1 33") == 0 + || strcmp (result, "0x7.0000000000p-2 33") == 0 + || strcmp (result, "0xe.0000000000p-3 33") == 0); + free (result); + } + + { /* Large precision. */ + char *result = + my_xasprintf ("%.50a %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 + || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 + || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 + || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); + free (result); + } + + { /* A positive number. */ + char *result = + my_xasprintf ("%La %d", 3.1416015625L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.922p+1 33") == 0 + || strcmp (result, "0x3.244p+0 33") == 0 + || strcmp (result, "0x6.488p-1 33") == 0 + || strcmp (result, "0xc.91p-2 33") == 0); + free (result); + } + + { /* Width. */ + char *result = + my_xasprintf ("%10La %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 0x1.cp+0 33") == 0 + || strcmp (result, " 0x3.8p-1 33") == 0 + || strcmp (result, " 0x7p-2 33") == 0 + || strcmp (result, " 0xep-3 33") == 0); + free (result); + } + + { /* Small precision. */ + char *result = + my_xasprintf ("%.10La %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.c000000000p+0 33") == 0 + || strcmp (result, "0x3.8000000000p-1 33") == 0 + || strcmp (result, "0x7.0000000000p-2 33") == 0 + || strcmp (result, "0xe.0000000000p-3 33") == 0); + free (result); + } + + { /* Large precision. */ + char *result = + my_xasprintf ("%.50La %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "0x1.c0000000000000000000000000000000000000000000000000p+0 33") == 0 + || strcmp (result, "0x3.80000000000000000000000000000000000000000000000000p-1 33") == 0 + || strcmp (result, "0x7.00000000000000000000000000000000000000000000000000p-2 33") == 0 + || strcmp (result, "0xe.00000000000000000000000000000000000000000000000000p-3 33") == 0); + free (result); + } + + /* Test the support of the %f format directive. */ + + { /* A positive number. */ + char *result = + my_xasprintf ("%f %d", 12.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.750000 33") == 0); + free (result); + } + + { /* Width. */ + char *result = + my_xasprintf ("%10f %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000 33") == 0); + free (result); + } + + { /* Precision. */ + char *result = + my_xasprintf ("%.f %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234 33") == 0); + free (result); + } + + { /* A positive number. */ + char *result = + my_xasprintf ("%Lf %d", 12.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.750000 33") == 0); + free (result); + } + + { /* Width. */ + char *result = + my_xasprintf ("%10Lf %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000 33") == 0); + free (result); + } + + { /* Precision. */ + char *result = + my_xasprintf ("%.Lf %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234 33") == 0); + free (result); + } + + /* Test the support of the %F format directive. */ + + { /* A positive number. */ + char *result = + my_xasprintf ("%F %d", 12.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.750000 33") == 0); + free (result); + } + + { /* Precision. */ + char *result = + my_xasprintf ("%.F %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234 33") == 0); + free (result); + } + + { /* A positive number. */ + char *result = + my_xasprintf ("%LF %d", 12.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.750000 33") == 0); + free (result); + } + + { /* Precision. */ + char *result = + my_xasprintf ("%.LF %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1234 33") == 0); + free (result); + } + + /* Test the support of the %e format directive. */ + + { /* A positive number. */ + char *result = + my_xasprintf ("%e %d", 12.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.275000e+01 33") == 0 + || strcmp (result, "1.275000e+001 33") == 0); + free (result); + } + + { /* Width. */ + char *result = + my_xasprintf ("%15e %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000e+00 33") == 0 + || strcmp (result, " 1.750000e+000 33") == 0); + free (result); + } + + { /* Precision. */ + char *result = + my_xasprintf ("%.e %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1e+03 33") == 0 + || strcmp (result, "1e+003 33") == 0); + free (result); + } + + { /* A positive number. */ + char *result = + my_xasprintf ("%Le %d", 12.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1.275000e+01 33") == 0); + free (result); + } + + { /* Width. */ + char *result = + my_xasprintf ("%15Le %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.750000e+00 33") == 0); + free (result); + } + + { /* Precision. */ + char *result = + my_xasprintf ("%.Le %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1e+03 33") == 0); + free (result); + } + + /* Test the support of the %g format directive. */ + + { /* A positive number. */ + char *result = + my_xasprintf ("%g %d", 12.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.75 33") == 0); + free (result); + } + + { /* Width. */ + char *result = + my_xasprintf ("%10g %d", 1.75, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.75 33") == 0); + free (result); + } + + { /* Precision. */ + char *result = + my_xasprintf ("%.g %d", 1234.0, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1e+03 33") == 0 + || strcmp (result, "1e+003 33") == 0); + free (result); + } + + { /* A positive number. */ + char *result = + my_xasprintf ("%Lg %d", 12.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "12.75 33") == 0); + free (result); + } + + { /* Width. */ + char *result = + my_xasprintf ("%10Lg %d", 1.75L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " 1.75 33") == 0); + free (result); + } + + { /* Precision. */ + char *result = + my_xasprintf ("%.Lg %d", 1234.0L, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "1e+03 33") == 0); + free (result); + } + + /* Test the support of the %n format directive. */ + + { + int count = -1; + char *result = + my_xasprintf ("%d %n", 123, &count, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "123 ") == 0); + ASSERT (count == 4); + free (result); + } + + /* Test the support of the POSIX/XSI format strings with positions. */ + + { + char *result = + my_xasprintf ("%2$d %1$d", 33, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "55 33") == 0); + free (result); + } + + /* Test the support of the grouping flag. */ + + { + char *result = + my_xasprintf ("%'d %d", 1234567, 99); + ASSERT (result != NULL); + ASSERT (result[strlen (result) - 1] == '9'); + free (result); + } +} diff --git a/tests/unistdio/test-ulc-vasnprintf1.c b/tests/unistdio/test-ulc-vasnprintf1.c new file mode 100644 index 00000000..e2f8be6d --- /dev/null +++ b/tests/unistdio/test-ulc-vasnprintf1.c @@ -0,0 +1,85 @@ +/* Test of ulc_vasnprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-ulc-asnprintf1.h" +#include "test-ulc-printf1.h" + +static char * +my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + char *ret; + + va_start (args, format); + ret = ulc_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static char * +my_xasprintf (const char *format, ...) +{ + va_list args; + size_t length; + char *ret; + + va_start (args, format); + ret = ulc_vasnprintf (NULL, &length, format, args); + va_end (args); + if (ret != NULL) + ASSERT (length == strlen (ret)); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-ulc-vasnprintf2.c b/tests/unistdio/test-ulc-vasnprintf2.c new file mode 100644 index 00000000..90229751 --- /dev/null +++ b/tests/unistdio/test-ulc-vasnprintf2.c @@ -0,0 +1,258 @@ +/* Test of ulc_vasnprintf() function in an ISO-8859-1 locale. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static void +test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) +{ + /* Test the support of the 'U' conversion specifier for Unicode strings. */ + + { + static const uint8_t unicode_string[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ + { + size_t length; + char *result = + my_asnprintf (NULL, &length, "%U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 + || strcmp (result, "Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%20U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 + || strcmp (result, " Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%-20U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 + || strcmp (result, "Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%020U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 + || strcmp (result, " Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + } + + { + static const uint16_t unicode_string[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + { + size_t length; + char *result = + my_asnprintf (NULL, &length, "%lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 + || strcmp (result, "Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%20lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 + || strcmp (result, " Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%-20lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 + || strcmp (result, "Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%020lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 + || strcmp (result, " Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + } + + { + static const uint32_t unicode_string[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + { + size_t length; + char *result = + my_asnprintf (NULL, &length, "%llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 + || strcmp (result, "Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%20llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 + || strcmp (result, " Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%-20llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa? Maszkowski 33") == 0 + || strcmp (result, "Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%020llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa? Maszkowski 33") == 0 + || strcmp (result, " Rafal Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + } + + /* Test the support of the 's' conversion specifier for strings. */ + + { + const char *locale_string = "\304rger"; /* Ärger */ + { + size_t length; + char *result = + my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "\304rger 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " \304rger 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "\304rger 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " \304rger 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + } +} + +static char * +my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + char *ret; + + va_start (args, format); + ret = ulc_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-ulc-vasnprintf2.sh b/tests/unistdio/test-ulc-vasnprintf2.sh new file mode 100755 index 00000000..39056a63 --- /dev/null +++ b/tests/unistdio/test-ulc-vasnprintf2.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Test whether a traditional french locale is installed. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR != none; then + testlocale=$LOCALE_FR +else + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$testlocale \ +./test-ulc-vasnprintf1${EXEEXT} \ + || exit 1 + +LC_ALL=$testlocale \ +./test-ulc-vasnprintf2${EXEEXT} diff --git a/tests/unistdio/test-ulc-vasnprintf3.c b/tests/unistdio/test-ulc-vasnprintf3.c new file mode 100644 index 00000000..1fbd925d --- /dev/null +++ b/tests/unistdio/test-ulc-vasnprintf3.c @@ -0,0 +1,246 @@ +/* Test of ulc_vasnprintf() function in an UTF-8 locale. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +static void +test_function (char * (*my_asnprintf) (char *, size_t *, const char *, ...)) +{ + /* Test the support of the 'U' conversion specifier for Unicode strings. */ + + { + static const uint8_t unicode_string[] = "Rafa\305\202 Maszkowski"; /* Rafał Maszkowski */ + { + size_t length; + char *result = + my_asnprintf (NULL, &length, "%U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%20U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%-20U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%020U %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + } + + { + static const uint16_t unicode_string[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + { + size_t length; + char *result = + my_asnprintf (NULL, &length, "%lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%20lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%-20lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%020lU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + } + + { + static const uint32_t unicode_string[] = /* Rafał Maszkowski */ + { + 'R', 'a', 'f', 'a', 0x0142, ' ', 'M', 'a', 's', 'z', 'k', 'o', 'w', + 's', 'k', 'i', 0 + }; + { + size_t length; + char *result = + my_asnprintf (NULL, &length, "%llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%20llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%-20llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%020llU %d", unicode_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " Rafa\305\202 Maszkowski 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + } + + /* Test the support of the 's' conversion specifier for strings. */ + + { + const char *locale_string = "\303\204rger"; /* Ärger */ + { + size_t length; + char *result = + my_asnprintf (NULL, &length, "%s %d", locale_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "\303\204rger 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* Width. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%10s %d", locale_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " \303\204rger 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_LEFT. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%-10s %d", locale_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, "\303\204rger 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + { /* FLAG_ZERO: no effect. */ + size_t length; + char *result = + my_asnprintf (NULL, &length, "%010s %d", locale_string, 33, 44, 55); + ASSERT (result != NULL); + ASSERT (strcmp (result, " \303\204rger 33") == 0); + ASSERT (length == strlen (result)); + free (result); + } + } +} + +static char * +my_asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) +{ + va_list args; + char *ret; + + va_start (args, format); + ret = ulc_vasnprintf (resultbuf, lengthp, format, args); + va_end (args); + return ret; +} + +static void +test_vasnprintf () +{ + test_function (my_asnprintf); +} + +int +main (int argc, char *argv[]) +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + test_vasnprintf (); + return 0; +} diff --git a/tests/unistdio/test-ulc-vasnprintf3.sh b/tests/unistdio/test-ulc-vasnprintf3.sh new file mode 100755 index 00000000..caa528a6 --- /dev/null +++ b/tests/unistdio/test-ulc-vasnprintf3.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# Test whether a french Unicode locale is installed. +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 != none; then + testlocale=$LOCALE_FR_UTF8 +else + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + exit 77 +fi + +LC_ALL=$testlocale \ +./test-ulc-vasnprintf1${EXEEXT} \ + || exit 1 + +LC_ALL=$testlocale \ +./test-ulc-vasnprintf3${EXEEXT} diff --git a/tests/unistdio/test-ulc-vasprintf1.c b/tests/unistdio/test-ulc-vasprintf1.c new file mode 100644 index 00000000..d8ed67c2 --- /dev/null +++ b/tests/unistdio/test-ulc-vasprintf1.c @@ -0,0 +1,72 @@ +/* Test of ulc_vasprintf() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-ulc-printf1.h" + +static char * +my_xasprintf (const char *format, ...) +{ + va_list args; + char *result; + int retval; + + va_start (args, format); + retval = ulc_vasprintf (&result, format, args); + va_end (args); + if (retval < 0) + return NULL; + ASSERT (result != NULL); + return result; +} + +static void +test_vasprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + test_vasprintf (); + return 0; +} diff --git a/tests/unistdio/test-ulc-vsnprintf1.c b/tests/unistdio/test-ulc-vsnprintf1.c new file mode 100644 index 00000000..7701c21e --- /dev/null +++ b/tests/unistdio/test-ulc-vsnprintf1.c @@ -0,0 +1,77 @@ +/* Test of ulc_vsnprintf() function. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#include "xalloc.h" +#include "progname.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-ulc-printf1.h" + +static char * +my_xasprintf (const char *format, ...) +{ + va_list args; + char result[1000]; + int retval; + + va_start (args, format); + retval = ulc_vsnprintf (result, sizeof (result), format, args); + va_end (args); + if (retval < 0 || retval >= (int) sizeof (result)) + return NULL; + return xstrdup (result); +} + +static void +test_vsnprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + set_program_name (argv[0]); + + test_vsnprintf (); + + return 0; +} diff --git a/tests/unistdio/test-ulc-vsprintf1.c b/tests/unistdio/test-ulc-vsprintf1.c new file mode 100644 index 00000000..76b85b29 --- /dev/null +++ b/tests/unistdio/test-ulc-vsprintf1.c @@ -0,0 +1,77 @@ +/* Test of ulc_vsprintf() function. + Copyright (C) 2007-2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "unistdio.h" + +#include +#include +#include +#include +#include +#include + +#include "xalloc.h" +#include "progname.h" + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +#include "test-ulc-printf1.h" + +static char * +my_xasprintf (const char *format, ...) +{ + va_list args; + char result[1000]; + int retval; + + va_start (args, format); + retval = ulc_vsprintf (result, format, args); + va_end (args); + if (retval < 0 || retval >= (int) sizeof (result)) + return NULL; + return xstrdup (result); +} + +static void +test_vsprintf () +{ + test_xfunction (my_xasprintf); +} + +int +main (int argc, char *argv[]) +{ + set_program_name (argv[0]); + + test_vsprintf (); + + return 0; +} diff --git a/tests/uniwbrk/test-u16-wordbreaks.c b/tests/uniwbrk/test-u16-wordbreaks.c new file mode 100644 index 00000000..b5eb26cd --- /dev/null +++ b/tests/uniwbrk/test-u16-wordbreaks.c @@ -0,0 +1,106 @@ +/* Test of word breaks in UTF-16 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uniwbrk.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test case n = 0. */ + u16_wordbreaks (NULL, 0, NULL); + + { + static const uint16_t input[61] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u16_wordbreaks (input, SIZEOF (input), p); + + for (i = 0; i < 61; i++) + { + ASSERT (p[i] == ((i >= 4 && i <= 5) + || (i >= 9 && i <= 11) + || (i >= 23 && i <= 31) + || (i >= 35 && i <= 39) + || (i >= 42 && i <= 46) + || (i >= 48 && i <= 58) + || i == 60 + ? 1 : 0)); + } + free (p); + } + + { + /* Same input string, decomposed. */ + static const uint16_t input[67] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', + 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' + }; + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u16_wordbreaks (input, SIZEOF (input), p); + + for (i = 0; i < 67; i++) + { + ASSERT (p[i] == ((i >= 5 && i <= 6) + || (i >= 10 && i <= 12) + || (i >= 25 && i <= 33) + || (i >= 37 && i <= 41) + || (i >= 44 && i <= 48) + || (i >= 50 && i <= 60) + || i == 66 + ? 1 : 0)); + } + free (p); + } + + return 0; +} diff --git a/tests/uniwbrk/test-u32-wordbreaks.c b/tests/uniwbrk/test-u32-wordbreaks.c new file mode 100644 index 00000000..c6feb84f --- /dev/null +++ b/tests/uniwbrk/test-u32-wordbreaks.c @@ -0,0 +1,106 @@ +/* Test of word breaks in UTF-32 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uniwbrk.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test case n = 0. */ + u32_wordbreaks (NULL, 0, NULL); + + { + static const uint32_t input[61] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + { 'G', 'r', 0x00FC, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0439, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', 0xD55C, 0xAE00, '\n' + }; + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u32_wordbreaks (input, SIZEOF (input), p); + + for (i = 0; i < 61; i++) + { + ASSERT (p[i] == ((i >= 4 && i <= 5) + || (i >= 9 && i <= 11) + || (i >= 23 && i <= 31) + || (i >= 35 && i <= 39) + || (i >= 42 && i <= 46) + || (i >= 48 && i <= 58) + || i == 60 + ? 1 : 0)); + } + free (p); + } + + { + /* Same input string, decomposed. */ + static const uint32_t input[67] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + { 'G', 'r', 0x0075, 0x0308, 0x00DF, ' ', 'G', 'o', 't', 't', '.', ' ', + 0x0417, 0x0434, 0x0440, 0x0430, 0x0432, 0x0441, 0x0442, 0x0432, 0x0443, + 0x0438, 0x0306, 0x0442, 0x0435, '!', ' ', + 'x', '=', '(', '-', 'b', 0x00B1, 's', 'q', 'r', 't', '(', 'b', 0x00B2, + '-', '4', 'a', 'c', ')', ')', '/', '(', '2', 'a', ')', ' ', ' ', + 0x65E5, 0x672C, 0x8A9E, ',', 0x4E2D, 0x6587, ',', + 0x1112, 0x1161, 0x11AB, 0x1100, 0x1173, 0x11AF, '\n' + }; + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u32_wordbreaks (input, SIZEOF (input), p); + + for (i = 0; i < 67; i++) + { + ASSERT (p[i] == ((i >= 5 && i <= 6) + || (i >= 10 && i <= 12) + || (i >= 25 && i <= 33) + || (i >= 37 && i <= 41) + || (i >= 44 && i <= 48) + || (i >= 50 && i <= 60) + || i == 66 + ? 1 : 0)); + } + free (p); + } + + return 0; +} diff --git a/tests/uniwbrk/test-u8-wordbreaks.c b/tests/uniwbrk/test-u8-wordbreaks.c new file mode 100644 index 00000000..c2633025 --- /dev/null +++ b/tests/uniwbrk/test-u8-wordbreaks.c @@ -0,0 +1,97 @@ +/* Test of word breaks in UTF-8 strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uniwbrk.h" + +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* Test case n = 0. */ + u8_wordbreaks (NULL, 0, NULL); + + { + static const uint8_t input[91] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + "Gr\303\274\303\237 Gott. \320\227\320\264\321\200\320\260\320\262\321\201\321\202\320\262\321\203\320\271\321\202\320\265! x=(-b\302\261sqrt(b\302\262-4ac))/(2a) \346\227\245\346\234\254\350\252\236,\344\270\255\346\226\207,\355\225\234\352\270\200\n"; + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u8_wordbreaks (input, SIZEOF (input), p); + + for (i = 0; i < 91; i++) + { + ASSERT (p[i] == ((i >= 6 && i <= 7) + || (i >= 11 && i <= 13) + || (i >= 37 && i <= 44) + || i == 46 || (i >= 50 && i <= 52) + || (i >= 54 && i <= 55) + || (i >= 58 && i <= 62) || (i >= 64 && i <= 67) + || i == 70 || i == 73 || i == 76 + || i == 77 || i == 80 || i == 83 + || i == 84 || i == 90 + ? 1 : 0)); + } + free (p); + } + + { + /* Same input string, decomposed. */ + static const uint8_t input[106] = + /* "Grüß Gott. Здравствуйте! x=(-b±sqrt(b²-4ac))/(2a) 日本語,中文,한글" */ + "Gru\314\210\303\237 Gott. \320\227\320\264\321\200\320\260\320\262\321\201\321\202\320\262\321\203\320\270\314\206\321\202\320\265! x=(-b\302\261sqrt(b\302\262-4ac))/(2a) \346\227\245\346\234\254\350\252\236,\344\270\255\346\226\207,\341\204\222\341\205\241\341\206\253\341\204\200\341\205\263\341\206\257\n"; + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + u8_wordbreaks (input, SIZEOF (input), p); + + for (i = 0; i < 106; i++) + { + ASSERT (p[i] == ((i >= 7 && i <= 8) + || (i >= 12 && i <= 14) + || (i >= 40 && i <= 47) + || i == 49 || (i >= 53 && i <= 55) + || (i >= 57 && i <= 58) + || (i >= 61 && i <= 65) || (i >= 67 && i <= 70) + || i == 73 || i == 76 || i == 79 + || i == 80 || i == 83 || i == 86 + || i == 87 || i == 105 + ? 1 : 0)); + } + free (p); + } + + return 0; +} diff --git a/tests/uniwbrk/test-ulc-wordbreaks.c b/tests/uniwbrk/test-ulc-wordbreaks.c new file mode 100644 index 00000000..80284ab2 --- /dev/null +++ b/tests/uniwbrk/test-ulc-wordbreaks.c @@ -0,0 +1,74 @@ +/* Test of word breaks in strings. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2009. */ + +#include + +#include "uniwbrk.h" + +#include +#include +#include + +#define SIZEOF(array) (sizeof (array) / sizeof (array[0])) +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + /* configure should already have checked that the locale is supported. */ + if (setlocale (LC_ALL, "") == NULL) + return 1; + + /* Test case n = 0. */ + ulc_wordbreaks (NULL, 0, NULL); + +#if HAVE_ICONV + { + static const char input[36] = + /* "Grüß Gott. x=(-b±sqrt(b²-4ac))/(2a)" */ + "Gr\374\337 Gott. x=(-b\261sqrt(b\262-4ac))/(2a)\n"; + char *p = (char *) malloc (SIZEOF (input)); + size_t i; + + ulc_wordbreaks (input, SIZEOF (input), p); + + for (i = 0; i < 36; i++) + { + ASSERT (p[i] == ((i >= 4 && i <= 5) + || (i >= 9 && i <= 17) + || (i >= 21 && i <= 25) + || (i >= 28 && i <= 32) + || (i >= 34 && i <= 35) + ? 1 : 0)); + } + free (p); + } +#endif + + return 0; +} diff --git a/tests/uniwbrk/test-ulc-wordbreaks.sh b/tests/uniwbrk/test-ulc-wordbreaks.sh new file mode 100755 index 00000000..96bae501 --- /dev/null +++ b/tests/uniwbrk/test-ulc-wordbreaks.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# Test in an ISO-8859-1 or ISO-8859-15 locale. +: ${LOCALE_FR=fr_FR} +if test $LOCALE_FR = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no traditional french locale is installed" + else + echo "Skipping test: no traditional french locale is supported" + fi + exit 77 +fi + +LC_ALL=$LOCALE_FR \ +./test-ulc-wordbreaks${EXEEXT} diff --git a/tests/uniwidth/test-u16-strwidth.c b/tests/uniwidth/test-u16-strwidth.c new file mode 100644 index 00000000..7365426f --- /dev/null +++ b/tests/uniwidth/test-u16-strwidth.c @@ -0,0 +1,71 @@ +/* Test of u16_strwidth() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniwidth.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + { + static const uint16_t input[] = /* "Danilo Šegan" */ + { 'D', 'a', 'n', 'i', 'l', 'o', ' ', 0x0160, 'e', 'g', 'a', 'n', 0 }; + ASSERT (u16_strwidth (input, "UTF-8") == 12); + } + + { + static const uint16_t input[] = /* "Danilo Šegan" decomposed */ + { 'D', 'a', 'n', 'i', 'l', 'o', ' ', 'S', 0x030C, 'e', 'g', 'a', 'n', 0 }; + ASSERT (u16_strwidth (input, "UTF-8") == 12); + } + + { + static const uint16_t input[] = /* "Данило Шеган" */ + { + 0x0414, 0x0430, 0x043D, 0x0438, 0x043B, 0x043E, ' ', + 0x0428, 0x0435, 0x0433, 0x0430, 0x043D, 0 + }; + ASSERT (u16_strwidth (input, "UTF-8") == 12); + ASSERT (u16_strwidth (input, "EUC-JP") == 23); + } + + { + static const uint16_t input[] = /* 刘军民 */ + { 0x5218, 0x519B, 0x6C11, 0 }; + ASSERT (u16_strwidth (input, "UTF-8") == 6); + ASSERT (u16_strwidth (input, "GB2312") == 6); + } + + return 0; +} diff --git a/tests/uniwidth/test-u16-width.c b/tests/uniwidth/test-u16-width.c new file mode 100644 index 00000000..b3e2b592 --- /dev/null +++ b/tests/uniwidth/test-u16-width.c @@ -0,0 +1,77 @@ +/* Test of u16_width() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniwidth.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + static const uint16_t input[] = + { + #define INPUT1_OFFSET 0 + #define INPUT1_LENGTH 12 + 'D', 'a', 'n', 'i', 'l', 'o', ' ', 0x0160, 'e', 'g', 'a', 'n', + #define INPUT2_OFFSET 12 + #define INPUT2_LENGTH 13 + 'D', 'a', 'n', 'i', 'l', 'o', ' ', 'S', 0x030C, 'e', 'g', 'a', 'n', + #define INPUT3_OFFSET 25 + #define INPUT3_LENGTH 12 + 0x0414, 0x0430, 0x043D, 0x0438, 0x043B, 0x043E, ' ', + 0x0428, 0x0435, 0x0433, 0x0430, 0x043D, + #define INPUT4_OFFSET 37 + #define INPUT4_LENGTH 3 + 0x5218, 0x519B, 0x6C11 + }; + + { /* "Danilo Šegan" */ + ASSERT (u16_width (input + INPUT1_OFFSET, INPUT1_LENGTH, "UTF-8") == 12); + } + + { /* "Danilo Šegan" decomposed */ + ASSERT (u16_width (input + INPUT2_OFFSET, INPUT2_LENGTH, "UTF-8") == 12); + } + + { /* "Данило Шеган" */ + ASSERT (u16_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "UTF-8") == 12); + ASSERT (u16_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "EUC-JP") == 23); + } + + { /* 刘军民 */ + ASSERT (u16_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "UTF-8") == 6); + ASSERT (u16_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "GB2312") == 6); + } + + return 0; +} diff --git a/tests/uniwidth/test-u32-strwidth.c b/tests/uniwidth/test-u32-strwidth.c new file mode 100644 index 00000000..3976daa9 --- /dev/null +++ b/tests/uniwidth/test-u32-strwidth.c @@ -0,0 +1,71 @@ +/* Test of u32_strwidth() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniwidth.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + { + static const uint32_t input[] = /* "Danilo Šegan" */ + { 'D', 'a', 'n', 'i', 'l', 'o', ' ', 0x0160, 'e', 'g', 'a', 'n', 0 }; + ASSERT (u32_strwidth (input, "UTF-8") == 12); + } + + { + static const uint32_t input[] = /* "Danilo Šegan" decomposed */ + { 'D', 'a', 'n', 'i', 'l', 'o', ' ', 'S', 0x030C, 'e', 'g', 'a', 'n', 0 }; + ASSERT (u32_strwidth (input, "UTF-8") == 12); + } + + { + static const uint32_t input[] = /* "Данило Шеган" */ + { + 0x0414, 0x0430, 0x043D, 0x0438, 0x043B, 0x043E, ' ', + 0x0428, 0x0435, 0x0433, 0x0430, 0x043D, 0 + }; + ASSERT (u32_strwidth (input, "UTF-8") == 12); + ASSERT (u32_strwidth (input, "EUC-JP") == 23); + } + + { + static const uint32_t input[] = /* 刘军民 */ + { 0x5218, 0x519B, 0x6C11, 0 }; + ASSERT (u32_strwidth (input, "UTF-8") == 6); + ASSERT (u32_strwidth (input, "GB2312") == 6); + } + + return 0; +} diff --git a/tests/uniwidth/test-u32-width.c b/tests/uniwidth/test-u32-width.c new file mode 100644 index 00000000..05fd856d --- /dev/null +++ b/tests/uniwidth/test-u32-width.c @@ -0,0 +1,77 @@ +/* Test of u32_width() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniwidth.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + static const uint32_t input[] = + { + #define INPUT1_OFFSET 0 + #define INPUT1_LENGTH 12 + 'D', 'a', 'n', 'i', 'l', 'o', ' ', 0x0160, 'e', 'g', 'a', 'n', + #define INPUT2_OFFSET 12 + #define INPUT2_LENGTH 13 + 'D', 'a', 'n', 'i', 'l', 'o', ' ', 'S', 0x030C, 'e', 'g', 'a', 'n', + #define INPUT3_OFFSET 25 + #define INPUT3_LENGTH 12 + 0x0414, 0x0430, 0x043D, 0x0438, 0x043B, 0x043E, ' ', + 0x0428, 0x0435, 0x0433, 0x0430, 0x043D, + #define INPUT4_OFFSET 37 + #define INPUT4_LENGTH 3 + 0x5218, 0x519B, 0x6C11 + }; + + { /* "Danilo Šegan" */ + ASSERT (u32_width (input + INPUT1_OFFSET, INPUT1_LENGTH, "UTF-8") == 12); + } + + { /* "Danilo Šegan" decomposed */ + ASSERT (u32_width (input + INPUT2_OFFSET, INPUT2_LENGTH, "UTF-8") == 12); + } + + { /* "Данило Шеган" */ + ASSERT (u32_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "UTF-8") == 12); + ASSERT (u32_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "EUC-JP") == 23); + } + + { /* 刘军民 */ + ASSERT (u32_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "UTF-8") == 6); + ASSERT (u32_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "GB2312") == 6); + } + + return 0; +} diff --git a/tests/uniwidth/test-u8-strwidth.c b/tests/uniwidth/test-u8-strwidth.c new file mode 100644 index 00000000..3fbb39e5 --- /dev/null +++ b/tests/uniwidth/test-u8-strwidth.c @@ -0,0 +1,66 @@ +/* Test of u8_strwidth() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniwidth.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + { + static const uint8_t input[] = "Danilo \305\240egan"; /* "Danilo Šegan" */ + ASSERT (u8_strwidth (input, "UTF-8") == 12); + } + + { + static const uint8_t input[] = "Danilo S\314\214egan"; /* "Danilo Šegan" decomposed */ + ASSERT (u8_strwidth (input, "UTF-8") == 12); + } + + { + static const uint8_t input[] = /* "Данило Шеган" */ + "\320\224\320\260\320\275\320\270\320\273\320\276 \320\250\320\265\320\263\320\260\320\275"; + ASSERT (u8_strwidth (input, "UTF-8") == 12); + ASSERT (u8_strwidth (input, "EUC-JP") == 23); + } + + { + static const uint8_t input[] = /* 刘军民 */ + "\345\210\230\345\206\233\346\260\221"; + ASSERT (u8_strwidth (input, "UTF-8") == 6); + ASSERT (u8_strwidth (input, "GB2312") == 6); + } + + return 0; +} diff --git a/tests/uniwidth/test-u8-width.c b/tests/uniwidth/test-u8-width.c new file mode 100644 index 00000000..b2532897 --- /dev/null +++ b/tests/uniwidth/test-u8-width.c @@ -0,0 +1,75 @@ +/* Test of u8_width() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniwidth.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + static const uint8_t input[] = + #define INPUT1_OFFSET 0 + #define INPUT1_LENGTH 13 + "Danilo \305\240egan" + #define INPUT2_OFFSET 13 + #define INPUT2_LENGTH 14 + "Danilo S\314\214egan" + #define INPUT3_OFFSET 27 + #define INPUT3_LENGTH 23 + "\320\224\320\260\320\275\320\270\320\273\320\276 \320\250\320\265\320\263\320\260\320\275" + #define INPUT4_OFFSET 50 + #define INPUT4_LENGTH 9 + "\345\210\230\345\206\233\346\260\221" + ; + + { /* "Danilo Šegan" */ + ASSERT (u8_width (input + INPUT1_OFFSET, INPUT1_LENGTH, "UTF-8") == 12); + } + + { /* "Danilo Šegan" decomposed */ + ASSERT (u8_width (input + INPUT2_OFFSET, INPUT2_LENGTH, "UTF-8") == 12); + } + + { /* "Данило Шеган" */ + ASSERT (u8_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "UTF-8") == 12); + ASSERT (u8_width (input + INPUT3_OFFSET, INPUT3_LENGTH, "EUC-JP") == 23); + } + + { /* 刘军民 */ + ASSERT (u8_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "UTF-8") == 6); + ASSERT (u8_width (input + INPUT4_OFFSET, INPUT4_LENGTH, "GB2312") == 6); + } + + return 0; +} diff --git a/tests/uniwidth/test-uc_width.c b/tests/uniwidth/test-uc_width.c new file mode 100644 index 00000000..d7335cfd --- /dev/null +++ b/tests/uniwidth/test-uc_width.c @@ -0,0 +1,69 @@ +/* Test of uc_width() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2007. */ + +#include + +#include "uniwidth.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +int +main () +{ + ucs4_t uc; + + /* Test width of ASCII characters. */ + for (uc = 0x0020; uc < 0x007F; uc++) + ASSERT (uc_width (uc, "ISO-8859-2") == 1); + + /* Test width of some non-spacing characters. */ + ASSERT (uc_width (0x0301, "UTF-8") == 0); + ASSERT (uc_width (0x05B0, "UTF-8") == 0); + + /* Test width of some format control characters. */ + ASSERT (uc_width (0x200E, "UTF-8") == 0); + ASSERT (uc_width (0x2060, "UTF-8") == 0); + ASSERT (uc_width (0xE0001, "UTF-8") == 0); + ASSERT (uc_width (0xE0044, "UTF-8") == 0); + + /* Test width of some zero width characters. */ + ASSERT (uc_width (0x200B, "UTF-8") == 0); + ASSERT (uc_width (0xFEFF, "UTF-8") == 0); + + /* Test width of some CJK characters. */ + ASSERT (uc_width (0x3000, "UTF-8") == 2); + ASSERT (uc_width (0xB250, "UTF-8") == 2); + ASSERT (uc_width (0xFF1A, "UTF-8") == 2); + ASSERT (uc_width (0x20369, "UTF-8") == 2); + ASSERT (uc_width (0x2F876, "UTF-8") == 2); + + return 0; +} diff --git a/tests/uniwidth/test-uc_width2.c b/tests/uniwidth/test-uc_width2.c new file mode 100644 index 00000000..2bf143c2 --- /dev/null +++ b/tests/uniwidth/test-uc_width2.c @@ -0,0 +1,97 @@ +/* Test of uc_width() function. + Copyright (C) 2007-2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2008. */ + +#include + +#include "uniwidth.h" + +#include +#include + +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) + +/* One of 0, '0', '1', 'A', '2'. */ +static char current_width; +/* The interval for which the current_width holds. */ +static ucs4_t current_start; +static ucs4_t current_end; + +static void +finish_interval (void) +{ + if (current_width != 0) + { + if (current_start == current_end) + printf ("%04X\t\t%c\n", (unsigned) current_start, current_width); + else + printf ("%04X..%04X\t%c\n", (unsigned) current_start, + (unsigned) current_end, current_width); + current_width = 0; + } +} + +static void +add_to_interval (ucs4_t uc, char width) +{ + if (current_width == width && uc == current_end + 1) + current_end = uc; + else + { + finish_interval (); + current_width = width; + current_start = current_end = uc; + } +} + +int +main () +{ + ucs4_t uc; + + for (uc = 0; uc < 0x110000; uc++) + { + int w1 = uc_width (uc, "UTF-8"); + int w2 = uc_width (uc, "GBK"); + char width = + (w1 == 0 && w2 == 0 ? '0' : + w1 == 1 && w2 == 1 ? '1' : + w1 == 1 && w2 == 2 ? 'A' : + w1 == 2 && w2 == 2 ? '2' : + 0); + if (width == 0) + { + /* uc must be a control character. */ + ASSERT (w1 < 0 && w2 < 0); + } + else + add_to_interval (uc, width); + } + finish_interval (); + + return 0; +} diff --git a/tests/uniwidth/test-uc_width2.sh b/tests/uniwidth/test-uc_width2.sh new file mode 100755 index 00000000..484288c9 --- /dev/null +++ b/tests/uniwidth/test-uc_width2.sh @@ -0,0 +1,382 @@ +#!/bin/sh + +tmpfiles="" +trap 'rm -fr $tmpfiles' 1 2 3 15 + +tmpfiles="$tmpfiles uc_width.out" +./test-uc_width2${EXEEXT} | LC_ALL=C tr -d '\r' > uc_width.out + +tmpfiles="$tmpfiles uc_width.ok" +cat > uc_width.ok <<\EOF +0000 0 +0020..007E 1 +00A0 1 +00A1..00AC A +00AD 0 +00AE..02FF A +0300..036F 0 +0370..0482 A +0483..0489 0 +048A..0590 A +0591..05BD 0 +05BE A +05BF 0 +05C0 A +05C1..05C2 0 +05C3 A +05C4..05C5 0 +05C6 A +05C7 0 +05C8..05FF A +0600..0603 0 +0604..060F A +0610..061A 0 +061B..064A A +064B..065E 0 +065F..066F A +0670 0 +0671..06D5 A +06D6..06E4 0 +06E5..06E6 A +06E7..06E8 0 +06E9 A +06EA..06ED 0 +06EE..070E A +070F 0 +0710 A +0711 0 +0712..072F A +0730..074A 0 +074B..07A5 A +07A6..07B0 0 +07B1..07EA A +07EB..07F3 0 +07F4..0900 A +0901..0902 0 +0903..093B A +093C 0 +093D..0940 A +0941..0948 0 +0949..094C A +094D 0 +094E..0950 A +0951..0954 0 +0955..0961 A +0962..0963 0 +0964..0980 A +0981 0 +0982..09BB A +09BC 0 +09BD..09C0 A +09C1..09C4 0 +09C5..09CC A +09CD 0 +09CE..09E1 A +09E2..09E3 0 +09E4..0A00 A +0A01..0A02 0 +0A03..0A3B A +0A3C 0 +0A3D..0A40 A +0A41..0A42 0 +0A43..0A46 A +0A47..0A48 0 +0A49..0A4A A +0A4B..0A4D 0 +0A4E..0A50 A +0A51 0 +0A52..0A6F A +0A70..0A71 0 +0A72..0A74 A +0A75 0 +0A76..0A80 A +0A81..0A82 0 +0A83..0ABB A +0ABC 0 +0ABD..0AC0 A +0AC1..0AC5 0 +0AC6 A +0AC7..0AC8 0 +0AC9..0ACC A +0ACD 0 +0ACE..0AE1 A +0AE2..0AE3 0 +0AE4..0B00 A +0B01 0 +0B02..0B3B A +0B3C 0 +0B3D..0B3E A +0B3F 0 +0B40 A +0B41..0B44 0 +0B45..0B4C A +0B4D 0 +0B4E..0B55 A +0B56 0 +0B57..0B61 A +0B62..0B63 0 +0B64..0B81 A +0B82 0 +0B83..0BBF A +0BC0 0 +0BC1..0BCC A +0BCD 0 +0BCE..0C3D A +0C3E..0C40 0 +0C41..0C45 A +0C46..0C48 0 +0C49 A +0C4A..0C4D 0 +0C4E..0C54 A +0C55..0C56 0 +0C57..0C61 A +0C62..0C63 0 +0C64..0CBB A +0CBC 0 +0CBD..0CCB A +0CCC..0CCD 0 +0CCE..0CE1 A +0CE2..0CE3 0 +0CE4..0D40 A +0D41..0D44 0 +0D45..0D4C A +0D4D 0 +0D4E..0D61 A +0D62..0D63 0 +0D64..0DC9 A +0DCA 0 +0DCB..0DD1 A +0DD2..0DD4 0 +0DD5 A +0DD6 0 +0DD7..0E30 A +0E31 0 +0E32..0E33 A +0E34..0E3A 0 +0E3B..0E46 A +0E47..0E4E 0 +0E4F..0EB0 A +0EB1 0 +0EB2..0EB3 A +0EB4..0EB9 0 +0EBA A +0EBB..0EBC 0 +0EBD..0EC7 A +0EC8..0ECD 0 +0ECE..0F17 A +0F18..0F19 0 +0F1A..0F34 A +0F35 0 +0F36 A +0F37 0 +0F38 A +0F39 0 +0F3A..0F70 A +0F71..0F7E 0 +0F7F A +0F80..0F84 0 +0F85 A +0F86..0F87 0 +0F88..0F8F A +0F90..0F97 0 +0F98 A +0F99..0FBC 0 +0FBD..0FC5 A +0FC6 0 +0FC7..102C A +102D..1030 0 +1031 A +1032..1037 0 +1038 A +1039..103A 0 +103B..103C A +103D..103E 0 +103F..1057 A +1058..1059 0 +105A..105D A +105E..1060 0 +1061..1070 A +1071..1074 0 +1075..1081 A +1082 0 +1083..1084 A +1085..1086 0 +1087..108C A +108D 0 +108E..10FF A +1100..115F 2 +1160..135E A +135F 0 +1360..1711 A +1712..1714 0 +1715..1731 A +1732..1734 0 +1735..1751 A +1752..1753 0 +1754..1771 A +1772..1773 0 +1774..17B3 A +17B4..17B5 0 +17B6 A +17B7..17BD 0 +17BE..17C5 A +17C6 0 +17C7..17C8 A +17C9..17D3 0 +17D4..17DC A +17DD 0 +17DE..180A A +180B..180D 0 +180E..18A8 A +18A9 0 +18AA..191F A +1920..1922 0 +1923..1926 A +1927..1928 0 +1929..1931 A +1932 0 +1933..1938 A +1939..193B 0 +193C..1A16 A +1A17..1A18 0 +1A19..1AFF A +1B00..1B03 0 +1B04..1B33 A +1B34 0 +1B35 A +1B36..1B3A 0 +1B3B A +1B3C 0 +1B3D..1B41 A +1B42 0 +1B43..1B6A A +1B6B..1B73 0 +1B74..1B7F A +1B80..1B81 0 +1B82..1BA1 A +1BA2..1BA5 0 +1BA6..1BA7 A +1BA8..1BA9 0 +1BAA..1C2B A +1C2C..1C33 0 +1C34..1C35 A +1C36..1C37 0 +1C38..1DBF A +1DC0..1DE6 0 +1DE7..1DFD A +1DFE..1DFF 0 +1E00..200A A +200B..200F 0 +2010..2029 A +202A..202E 0 +202F..205F A +2060..2064 0 +2065..2069 A +206A..206F 0 +2070..20A8 A +20A9 1 +20AA..20CF A +20D0..20F0 0 +20F1..2328 A +2329..232A 2 +232B..2DDF A +2DE0..2DFF 0 +2E00..2E7F A +2E80..3029 2 +302A..302F 0 +3030..303E 2 +303F A +3040..3098 2 +3099..309A 0 +309B..4DBF 2 +4DC0..4DFF A +4E00..A4CF 2 +A4D0..A66E A +A66F..A672 0 +A673..A67B A +A67C..A67D 0 +A67E..A801 A +A802 0 +A803..A805 A +A806 0 +A807..A80A A +A80B 0 +A80C..A824 A +A825..A826 0 +A827..A8C3 A +A8C4 0 +A8C5..A925 A +A926..A92D 0 +A92E..A946 A +A947..A951 0 +A952..AA28 A +AA29..AA2E 0 +AA2F..AA30 A +AA31..AA32 0 +AA33..AA34 A +AA35..AA36 0 +AA37..AA42 A +AA43 0 +AA44..AA4B A +AA4C 0 +AA4D..ABFF A +AC00..D7A3 2 +D7A4..F8FF A +F900..FAFF 2 +FB00..FB1D A +FB1E 0 +FB1F..FDFF A +FE00..FE0F 0 +FE10..FE1F 2 +FE20..FE26 0 +FE27..FE2F A +FE30..FE6F 2 +FE70..FEFE A +FEFF 0 +FF00..FF60 2 +FF61..FFDF 1 +FFE0..FFE6 2 +FFE7..FFF8 1 +FFF9..FFFB 0 +FFFC..101FC 1 +101FD 0 +101FE..10A00 1 +10A01..10A03 0 +10A04 1 +10A05..10A06 0 +10A07..10A0B 1 +10A0C..10A0F 0 +10A10..10A37 1 +10A38..10A3A 0 +10A3B..10A3E 1 +10A3F 0 +10A40..1D166 1 +1D167..1D169 0 +1D16A..1D17A 1 +1D17B..1D182 0 +1D183..1D184 1 +1D185..1D18B 0 +1D18C..1D1A9 1 +1D1AA..1D1AD 0 +1D1AE..1D241 1 +1D242..1D244 0 +1D245..1FFFF 1 +20000..2A6D6 2 +2A6D7..2F7FF 1 +2F800..2FA1D 2 +2FA1E..E0000 1 +E0001 0 +E0002..E001F 1 +E0020..E007F 0 +E0080..E00FF 1 +E0100..E01EF 0 +E01F0..10FFFF 1 +EOF + +: ${DIFF=diff} +${DIFF} uc_width.ok uc_width.out +result=$? + +rm -fr $tmpfiles + +exit $result diff --git a/tests/unsetenv.c b/tests/unsetenv.c new file mode 100644 index 00000000..73ea878a --- /dev/null +++ b/tests/unsetenv.c @@ -0,0 +1,90 @@ +/* Copyright (C) 1992,1995-1999,2000-2002,2005-2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#if !_LIBC +# define __set_errno(ev) ((errno) = (ev)) +#endif + +#include +#include + +#if !_LIBC +# define __environ environ +#endif + +#if _LIBC +/* This lock protects against simultaneous modifications of `environ'. */ +# include +__libc_lock_define_initialized (static, envlock) +# define LOCK __libc_lock_lock (envlock) +# define UNLOCK __libc_lock_unlock (envlock) +#else +# define LOCK +# define UNLOCK +#endif + +/* In the GNU C library we must keep the namespace clean. */ +#ifdef _LIBC +# define unsetenv __unsetenv +#endif + + +int +unsetenv (const char *name) +{ + size_t len; + char **ep; + + if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) + { + __set_errno (EINVAL); + return -1; + } + + len = strlen (name); + + LOCK; + + ep = __environ; + while (*ep != NULL) + if (!strncmp (*ep, name, len) && (*ep)[len] == '=') + { + /* Found it. Remove this pointer by moving later ones back. */ + char **dp = ep; + + do + dp[0] = dp[1]; + while (*dp++); + /* Continue the loop in case NAME appears again. */ + } + else + ++ep; + + UNLOCK; + + return 0; +} + +#ifdef _LIBC +# undef unsetenv +weak_alias (__unsetenv, unsetenv) +#endif diff --git a/tests/wctob.c b/tests/wctob.c new file mode 100644 index 00000000..4fa71b0d --- /dev/null +++ b/tests/wctob.c @@ -0,0 +1,37 @@ +/* Convert wide character to unibyte character. + Copyright (C) 2008 Free Software Foundation, Inc. + Written by Bruno Haible , 2008. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include +#include + +int +wctob (wint_t wc) +{ + char buf[64]; + + if (!(MB_CUR_MAX <= sizeof (buf))) + abort (); + if (wctomb (buf, wc) == 1) + return (unsigned char) buf[0]; + else + return EOF; +} diff --git a/tests/xalloc-die.c b/tests/xalloc-die.c new file mode 100644 index 00000000..0a0694fc --- /dev/null +++ b/tests/xalloc-die.c @@ -0,0 +1,41 @@ +/* Report a memory allocation failure and exit. + + Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2006 Free + Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#include "xalloc.h" + +#include + +#include "error.h" +#include "exitfail.h" + +#include "gettext.h" +#define _(msgid) gettext (msgid) + +void +xalloc_die (void) +{ + error (exit_failure, 0, "%s", _("memory exhausted")); + + /* The `noreturn' cannot be given to error, since it may return if + its first argument is 0. To help compilers understand the + xalloc_die does not return, call abort. Also, the abort is a + safety feature if exit_failure is 0 (which shouldn't happen). */ + abort (); +} diff --git a/tests/xalloc.h b/tests/xalloc.h new file mode 100644 index 00000000..57a13e0a --- /dev/null +++ b/tests/xalloc.h @@ -0,0 +1,280 @@ +/* xalloc.h -- malloc with out-of-memory checking + + Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef XALLOC_H_ +# define XALLOC_H_ + +# include + + +# ifdef __cplusplus +extern "C" { +# endif + + +# ifndef __attribute__ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) +# define __attribute__(x) +# endif +# endif + +# ifndef ATTRIBUTE_NORETURN +# define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) +# endif + +# ifndef ATTRIBUTE_MALLOC +# if __GNUC__ >= 3 +# define ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) +# else +# define ATTRIBUTE_MALLOC +# endif +# endif + +/* This function is always triggered when memory is exhausted. + It must be defined by the application, either explicitly + or by using gnulib's xalloc-die module. This is the + function to call when one wants the program to die because of a + memory allocation failure. */ +extern void xalloc_die (void) ATTRIBUTE_NORETURN; + +void *xmalloc (size_t s) ATTRIBUTE_MALLOC; +void *xzalloc (size_t s) ATTRIBUTE_MALLOC; +void *xcalloc (size_t n, size_t s) ATTRIBUTE_MALLOC; +void *xrealloc (void *p, size_t s); +void *x2realloc (void *p, size_t *pn); +void *xmemdup (void const *p, size_t s) ATTRIBUTE_MALLOC; +char *xstrdup (char const *str) ATTRIBUTE_MALLOC; + +/* Return 1 if an array of N objects, each of size S, cannot exist due + to size arithmetic overflow. S must be positive and N must be + nonnegative. This is a macro, not an inline function, so that it + works correctly even when SIZE_MAX < N. + + By gnulib convention, SIZE_MAX represents overflow in size + calculations, so the conservative dividend to use here is + SIZE_MAX - 1, since SIZE_MAX might represent an overflowed value. + However, malloc (SIZE_MAX) fails on all known hosts where + sizeof (ptrdiff_t) <= sizeof (size_t), so do not bother to test for + exactly-SIZE_MAX allocations on such hosts; this avoids a test and + branch when S is known to be 1. */ +# define xalloc_oversized(n, s) \ + ((size_t) (sizeof (ptrdiff_t) <= sizeof (size_t) ? -1 : -2) / (s) < (n)) + + +/* In the following macros, T must be an elementary or structure/union or + typedef'ed type, or a pointer to such a type. To apply one of the + following macros to a function pointer or array type, you need to typedef + it first and use the typedef name. */ + +/* Allocate an object of type T dynamically, with error checking. */ +/* extern t *XMALLOC (typename t); */ +# define XMALLOC(t) ((t *) xmalloc (sizeof (t))) + +/* Allocate memory for N elements of type T, with error checking. */ +/* extern t *XNMALLOC (size_t n, typename t); */ +# define XNMALLOC(n, t) \ + ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t)))) + +/* Allocate an object of type T dynamically, with error checking, + and zero it. */ +/* extern t *XZALLOC (typename t); */ +# define XZALLOC(t) ((t *) xzalloc (sizeof (t))) + +/* Allocate memory for N elements of type T, with error checking, + and zero it. */ +/* extern t *XCALLOC (size_t n, typename t); */ +# define XCALLOC(n, t) \ + ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t)))) + + +# if HAVE_INLINE +# define static_inline static inline +# else + void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC; + void *xnrealloc (void *p, size_t n, size_t s); + void *x2nrealloc (void *p, size_t *pn, size_t s); + char *xcharalloc (size_t n) ATTRIBUTE_MALLOC; +# endif + +# ifdef static_inline + +/* Allocate an array of N objects, each with S bytes of memory, + dynamically, with error checking. S must be nonzero. */ + +static_inline void *xnmalloc (size_t n, size_t s) ATTRIBUTE_MALLOC; +static_inline void * +xnmalloc (size_t n, size_t s) +{ + if (xalloc_oversized (n, s)) + xalloc_die (); + return xmalloc (n * s); +} + +/* Change the size of an allocated block of memory P to an array of N + objects each of S bytes, with error checking. S must be nonzero. */ + +static_inline void * +xnrealloc (void *p, size_t n, size_t s) +{ + if (xalloc_oversized (n, s)) + xalloc_die (); + return xrealloc (p, n * s); +} + +/* If P is null, allocate a block of at least *PN such objects; + otherwise, reallocate P so that it contains more than *PN objects + each of S bytes. *PN must be nonzero unless P is null, and S must + be nonzero. Set *PN to the new number of objects, and return the + pointer to the new block. *PN is never set to zero, and the + returned pointer is never null. + + Repeated reallocations are guaranteed to make progress, either by + allocating an initial block with a nonzero size, or by allocating a + larger block. + + In the following implementation, nonzero sizes are increased by a + factor of approximately 1.5 so that repeated reallocations have + O(N) overall cost rather than O(N**2) cost, but the + specification for this function does not guarantee that rate. + + Here is an example of use: + + int *p = NULL; + size_t used = 0; + size_t allocated = 0; + + void + append_int (int value) + { + if (used == allocated) + p = x2nrealloc (p, &allocated, sizeof *p); + p[used++] = value; + } + + This causes x2nrealloc to allocate a block of some nonzero size the + first time it is called. + + To have finer-grained control over the initial size, set *PN to a + nonzero value before calling this function with P == NULL. For + example: + + int *p = NULL; + size_t used = 0; + size_t allocated = 0; + size_t allocated1 = 1000; + + void + append_int (int value) + { + if (used == allocated) + { + p = x2nrealloc (p, &allocated1, sizeof *p); + allocated = allocated1; + } + p[used++] = value; + } + + */ + +static_inline void * +x2nrealloc (void *p, size_t *pn, size_t s) +{ + size_t n = *pn; + + if (! p) + { + if (! n) + { + /* The approximate size to use for initial small allocation + requests, when the invoking code specifies an old size of + zero. 64 bytes is the largest "small" request for the + GNU C library malloc. */ + enum { DEFAULT_MXFAST = 64 }; + + n = DEFAULT_MXFAST / s; + n += !n; + } + } + else + { + /* Set N = ceil (1.5 * N) so that progress is made if N == 1. + Check for overflow, so that N * S stays in size_t range. + The check is slightly conservative, but an exact check isn't + worth the trouble. */ + if ((size_t) -1 / 3 * 2 / s <= n) + xalloc_die (); + n += (n + 1) / 2; + } + + *pn = n; + return xrealloc (p, n * s); +} + +/* Return a pointer to a new buffer of N bytes. This is like xmalloc, + except it returns char *. */ + +static_inline char *xcharalloc (size_t n) ATTRIBUTE_MALLOC; +static_inline char * +xcharalloc (size_t n) +{ + return XNMALLOC (n, char); +} + +# endif + +# ifdef __cplusplus +} + +/* C++ does not allow conversions from void * to other pointer types + without a cast. Use templates to work around the problem when + possible. */ + +template inline T * +xrealloc (T *p, size_t s) +{ + return (T *) xrealloc ((void *) p, s); +} + +template inline T * +xnrealloc (T *p, size_t n, size_t s) +{ + return (T *) xnrealloc ((void *) p, n, s); +} + +template inline T * +x2realloc (T *p, size_t *pn) +{ + return (T *) x2realloc ((void *) p, pn); +} + +template inline T * +x2nrealloc (T *p, size_t *pn, size_t s) +{ + return (T *) x2nrealloc ((void *) p, pn, s); +} + +template inline T * +xmemdup (T const *p, size_t s) +{ + return (T *) xmemdup ((void const *) p, s); +} + +# endif + + +#endif /* !XALLOC_H_ */ diff --git a/tests/xmalloc.c b/tests/xmalloc.c new file mode 100644 index 00000000..585fb4b1 --- /dev/null +++ b/tests/xmalloc.c @@ -0,0 +1,118 @@ +/* xmalloc.c -- malloc with out of memory checking + + Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2008-2009 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +#if ! HAVE_INLINE +# define static_inline +#endif +#include "xalloc.h" +#undef static_inline + +#include +#include + +/* 1 if calloc is known to be compatible with GNU calloc. This + matters if we are not also using the calloc module, which defines + HAVE_CALLOC and supports the GNU API even on non-GNU platforms. */ +#if defined HAVE_CALLOC || defined __GLIBC__ +enum { HAVE_GNU_CALLOC = 1 }; +#else +enum { HAVE_GNU_CALLOC = 0 }; +#endif + +/* Allocate N bytes of memory dynamically, with error checking. */ + +void * +xmalloc (size_t n) +{ + void *p = malloc (n); + if (!p && n != 0) + xalloc_die (); + return p; +} + +/* Change the size of an allocated block of memory P to N bytes, + with error checking. */ + +void * +xrealloc (void *p, size_t n) +{ + p = realloc (p, n); + if (!p && n != 0) + xalloc_die (); + return p; +} + +/* If P is null, allocate a block of at least *PN bytes; otherwise, + reallocate P so that it contains more than *PN bytes. *PN must be + nonzero unless P is null. Set *PN to the new block's size, and + return the pointer to the new block. *PN is never set to zero, and + the returned pointer is never null. */ + +void * +x2realloc (void *p, size_t *pn) +{ + return x2nrealloc (p, pn, 1); +} + +/* Allocate S bytes of zeroed memory dynamically, with error checking. + There's no need for xnzalloc (N, S), since it would be equivalent + to xcalloc (N, S). */ + +void * +xzalloc (size_t s) +{ + return memset (xmalloc (s), 0, s); +} + +/* Allocate zeroed memory for N elements of S bytes, with error + checking. S must be nonzero. */ + +void * +xcalloc (size_t n, size_t s) +{ + void *p; + /* Test for overflow, since some calloc implementations don't have + proper overflow checks. But omit overflow and size-zero tests if + HAVE_GNU_CALLOC, since GNU calloc catches overflow and never + returns NULL if successful. */ + if ((! HAVE_GNU_CALLOC && xalloc_oversized (n, s)) + || (! (p = calloc (n, s)) && (HAVE_GNU_CALLOC || n != 0))) + xalloc_die (); + return p; +} + +/* Clone an object P of size S, with error checking. There's no need + for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any + need for an arithmetic overflow check. */ + +void * +xmemdup (void const *p, size_t s) +{ + return memcpy (xmalloc (s), p, s); +} + +/* Clone STRING. */ + +char * +xstrdup (char const *string) +{ + return xmemdup (string, strlen (string) + 1); +} diff --git a/tests/zerosize-ptr.h b/tests/zerosize-ptr.h new file mode 100644 index 00000000..a38a2cf4 --- /dev/null +++ b/tests/zerosize-ptr.h @@ -0,0 +1,68 @@ +/* Return a pointer to a zero-size object in memory. + Copyright (C) 2009 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* ISO C 99 does not allow memcmp(), memchr() etc. to be invoked with a NULL + argument. Therefore this file produces a non-NULL pointer which cannot + be dereferenced, if possible. */ + +#include + +/* Test whether mmap() and mprotect() are available. + We don't use HAVE_MMAP, because AC_FUNC_MMAP would not define it on HP-UX. + HAVE_MPROTECT is not enough, because mingw does not have mmap() but has an + mprotect() function in libgcc.a. */ +#if HAVE_SYS_MMAN_H && HAVE_MPROTECT +# include +# include +# include +# include +/* Define MAP_FILE when it isn't otherwise. */ +# ifndef MAP_FILE +# define MAP_FILE 0 +# endif +#endif + +/* Return a pointer to a zero-size object in memory (that is, actually, a + pointer to a page boundary where the previous page is readable and writable + and the next page is neither readable not writable), if possible. + Return NULL otherwise. */ + +static void * +zerosize_ptr (void) +{ +/* Use mmap and mprotect when they exist. Don't test HAVE_MMAP, because it is + not defined on HP-UX 11 (since it does not support MAP_FIXED). */ +#if HAVE_SYS_MMAN_H && HAVE_MPROTECT +# if HAVE_MAP_ANONYMOUS + const int flags = MAP_ANONYMOUS | MAP_PRIVATE; + const int fd = -1; +# else /* !HAVE_MAP_ANONYMOUS */ + const int flags = MAP_FILE | MAP_PRIVATE; + int fd = open ("/dev/zero", O_RDONLY, 0666); + if (fd >= 0) +# endif + { + int pagesize = getpagesize (); + char *two_pages = + (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, + flags, fd, 0); + if (two_pages != (char *)(-1) + && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) + return two_pages + pagesize; + } +#endif + return NULL; +} diff --git a/version.sh b/version.sh new file mode 100644 index 00000000..f5295b18 --- /dev/null +++ b/version.sh @@ -0,0 +1,6 @@ +# Version number and release date. +VERSION_NUMBER=0.9.1 +RELEASE_DATE=2009-06-30 # in "date +%Y-%m-%d" format + +# Version of gnulib that was used in this release. +GNULIB_GIT_COMMIT=e43d583475dc364a0816df054471e6bc4bb75106 diff --git a/woe32dll/export.h b/woe32dll/export.h new file mode 100644 index 00000000..3e8a21fc --- /dev/null +++ b/woe32dll/export.h @@ -0,0 +1,106 @@ +/* Exporting symbols from Cygwin shared libraries. + Copyright (C) 2006 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* There are four ways to build shared libraries on Cygwin: + + - Export only functions, no variables. + This has the drawback of severely affecting the programming style in use. + It does not let the programmer use full ANSI C. It lets one platform + dictate the code style on all platforms. This is unacceptable. + + - Use the GNU ld --enable-auto-import option. It is the default on Cygwin + since July 2005. But it has three fatal drawbacks: + - It produces executables and shared libraries with relocations in the + .text segment, defeating the principles of virtual memory. + - For some constructs such as + extern int var; + int * const b = &var; + it creates an executable that will give an error at runtime, rather + than either a compile-time or link-time error or a working executable. + (This is with both gcc and g++.) Whereas this code, not relying on + auto-import: + extern __declspec (dllimport) int var; + int * const b = &var; + gives a compile-time error with gcc and works with g++. + - It doesn't work in some cases (references to a member field of an + exported struct variable, or to a particular element of an exported + array variable), requiring code modifications. Again one platform + dictates code modifications on all platforms. + + This is unacceptable. Therefore we disable this option, through the + woe32-dll.m4 autoconf macro. + + - Define a macro that expands to __declspec(dllexport) when building + the library and to __declspec(dllimport) when building code outside + the library, and use it in all header files of the library. + This is acceptable if + 1. the header files are unique to this library (not shared with + other packages), and + 2. the library sources are contained in one directory, making it easy + to define a -DBUILDING_LIBXYZ flag for the library. + Example: + #ifdef BUILDING_LIBASPRINTF + #define LIBASPRINTF_DLL_EXPORTED __declspec(dllexport) + #else + #define LIBASPRINTF_DLL_EXPORTED __declspec(dllimport) + #endif + + We use this technique for the libintl and the libasprintf libraries. + + - Define a macro that expands to __declspec(dllimport) always, and use + it in all header files of the library. Use an explicit export list for + the library. + This is acceptable if + 1. the programming language is not C++ (because the name mangling of + static struct/class fields and of variables in namespaces makes it + hard to maintain an export list). + The benefit of this approach is that the partitioning of the source files + into libraries (which source file goes into which library) does not + affect the source code; only the Makefiles reflect it. + The performance loss due to the unnecessary indirection for references + to variables from within the library defining the variable is acceptable. + + We use this technique for libgettextlib (because it contains many gnulib + modules) and for libgettextsrc (because this makes it easy to move source + code from an msg* program to libgettextsrc). The macro is called + DLL_VARIABLE. + + This file allows building an explicit export list. You can either + - specify the variables to be exported, and use the GNU ld option + --export-all-symbols to export all function names, or + - specify the variables and functions to be exported explicitly. + + Note: --export-all-symbols is the default when no other symbol is explicitly + exported. This means, the use of an explicit export on the variables has + the effect of no longer exporting the functions! - until the option + --export-all-symbols is used. */ + + /* IMP(x) is a symbol that contains the address of x. */ +#define IMP(x) _imp__##x + + /* Ensure that the variable x is exported from the library, and that a + pseudo-variable IMP(x) is available. */ +#define VARIABLE(x) \ + /* Export x without redefining x. This code was found by compiling a \ + snippet: \ + extern __declspec(dllexport) int x; int x = 42; */ \ + asm (".section .drectve\n"); \ + asm (".ascii \" -export:" #x ",data\"\n"); \ + asm (".data\n"); \ + /* Allocate a pseudo-variable IMP(x). */ \ + extern int x; \ + void * IMP(x) = &x; diff --git a/woe32dll/unistring-exports.c b/woe32dll/unistring-exports.c new file mode 100644 index 00000000..a32ae611 --- /dev/null +++ b/woe32dll/unistring-exports.c @@ -0,0 +1,146 @@ +/* List of exported symbols of libunistring on Cygwin. + Copyright (C) 2006, 2009 Free Software Foundation, Inc. + Written by Bruno Haible , 2006. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include "woe32dll/export.h" + +/* Variables declared in unictype.h */ +VARIABLE(UC_CATEGORY_C) +VARIABLE(UC_CATEGORY_Cc) +VARIABLE(UC_CATEGORY_Cf) +VARIABLE(UC_CATEGORY_Cn) +VARIABLE(UC_CATEGORY_Co) +VARIABLE(UC_CATEGORY_Cs) +VARIABLE(UC_CATEGORY_L) +VARIABLE(UC_CATEGORY_Ll) +VARIABLE(UC_CATEGORY_Lm) +VARIABLE(UC_CATEGORY_Lo) +VARIABLE(UC_CATEGORY_Lt) +VARIABLE(UC_CATEGORY_Lu) +VARIABLE(UC_CATEGORY_M) +VARIABLE(UC_CATEGORY_Mc) +VARIABLE(UC_CATEGORY_Me) +VARIABLE(UC_CATEGORY_Mn) +VARIABLE(UC_CATEGORY_N) +VARIABLE(UC_CATEGORY_Nd) +VARIABLE(UC_CATEGORY_Nl) +VARIABLE(UC_CATEGORY_No) +VARIABLE(UC_CATEGORY_P) +VARIABLE(UC_CATEGORY_Pc) +VARIABLE(UC_CATEGORY_Pd) +VARIABLE(UC_CATEGORY_Pe) +VARIABLE(UC_CATEGORY_Pf) +VARIABLE(UC_CATEGORY_Pi) +VARIABLE(UC_CATEGORY_Po) +VARIABLE(UC_CATEGORY_Ps) +VARIABLE(UC_CATEGORY_S) +VARIABLE(UC_CATEGORY_Sc) +VARIABLE(UC_CATEGORY_Sk) +VARIABLE(UC_CATEGORY_Sm) +VARIABLE(UC_CATEGORY_So) +VARIABLE(UC_CATEGORY_Z) +VARIABLE(UC_CATEGORY_Zl) +VARIABLE(UC_CATEGORY_Zp) +VARIABLE(UC_CATEGORY_Zs) +VARIABLE(UC_PROPERTY_ALPHABETIC) +VARIABLE(UC_PROPERTY_ASCII_HEX_DIGIT) +VARIABLE(UC_PROPERTY_BIDI_ARABIC_DIGIT) +VARIABLE(UC_PROPERTY_BIDI_ARABIC_RIGHT_TO_LEFT) +VARIABLE(UC_PROPERTY_BIDI_BLOCK_SEPARATOR) +VARIABLE(UC_PROPERTY_BIDI_BOUNDARY_NEUTRAL) +VARIABLE(UC_PROPERTY_BIDI_COMMON_SEPARATOR) +VARIABLE(UC_PROPERTY_BIDI_CONTROL) +VARIABLE(UC_PROPERTY_BIDI_EMBEDDING_OR_OVERRIDE) +VARIABLE(UC_PROPERTY_BIDI_EUROPEAN_DIGIT) +VARIABLE(UC_PROPERTY_BIDI_EUR_NUM_SEPARATOR) +VARIABLE(UC_PROPERTY_BIDI_EUR_NUM_TERMINATOR) +VARIABLE(UC_PROPERTY_BIDI_HEBREW_RIGHT_TO_LEFT) +VARIABLE(UC_PROPERTY_BIDI_LEFT_TO_RIGHT) +VARIABLE(UC_PROPERTY_BIDI_NON_SPACING_MARK) +VARIABLE(UC_PROPERTY_BIDI_OTHER_NEUTRAL) +VARIABLE(UC_PROPERTY_BIDI_PDF) +VARIABLE(UC_PROPERTY_BIDI_SEGMENT_SEPARATOR) +VARIABLE(UC_PROPERTY_BIDI_WHITESPACE) +VARIABLE(UC_PROPERTY_COMBINING) +VARIABLE(UC_PROPERTY_COMPOSITE) +VARIABLE(UC_PROPERTY_CURRENCY_SYMBOL) +VARIABLE(UC_PROPERTY_DASH) +VARIABLE(UC_PROPERTY_DECIMAL_DIGIT) +VARIABLE(UC_PROPERTY_DEFAULT_IGNORABLE_CODE_POINT) +VARIABLE(UC_PROPERTY_DEPRECATED) +VARIABLE(UC_PROPERTY_DIACRITIC) +VARIABLE(UC_PROPERTY_EXTENDER) +VARIABLE(UC_PROPERTY_FORMAT_CONTROL) +VARIABLE(UC_PROPERTY_GRAPHEME_BASE) +VARIABLE(UC_PROPERTY_GRAPHEME_EXTEND) +VARIABLE(UC_PROPERTY_GRAPHEME_LINK) +VARIABLE(UC_PROPERTY_HEX_DIGIT) +VARIABLE(UC_PROPERTY_HYPHEN) +VARIABLE(UC_PROPERTY_IDEOGRAPHIC) +VARIABLE(UC_PROPERTY_IDS_BINARY_OPERATOR) +VARIABLE(UC_PROPERTY_IDS_TRINARY_OPERATOR) +VARIABLE(UC_PROPERTY_ID_CONTINUE) +VARIABLE(UC_PROPERTY_ID_START) +VARIABLE(UC_PROPERTY_IGNORABLE_CONTROL) +VARIABLE(UC_PROPERTY_ISO_CONTROL) +VARIABLE(UC_PROPERTY_JOIN_CONTROL) +VARIABLE(UC_PROPERTY_LEFT_OF_PAIR) +VARIABLE(UC_PROPERTY_LINE_SEPARATOR) +VARIABLE(UC_PROPERTY_LOGICAL_ORDER_EXCEPTION) +VARIABLE(UC_PROPERTY_LOWERCASE) +VARIABLE(UC_PROPERTY_MATH) +VARIABLE(UC_PROPERTY_NON_BREAK) +VARIABLE(UC_PROPERTY_NOT_A_CHARACTER) +VARIABLE(UC_PROPERTY_NUMERIC) +VARIABLE(UC_PROPERTY_OTHER_ALPHABETIC) +VARIABLE(UC_PROPERTY_OTHER_DEFAULT_IGNORABLE_CODE_POINT) +VARIABLE(UC_PROPERTY_OTHER_GRAPHEME_EXTEND) +VARIABLE(UC_PROPERTY_OTHER_ID_CONTINUE) +VARIABLE(UC_PROPERTY_OTHER_ID_START) +VARIABLE(UC_PROPERTY_OTHER_LOWERCASE) +VARIABLE(UC_PROPERTY_OTHER_MATH) +VARIABLE(UC_PROPERTY_OTHER_UPPERCASE) +VARIABLE(UC_PROPERTY_PAIRED_PUNCTUATION) +VARIABLE(UC_PROPERTY_PARAGRAPH_SEPARATOR) +VARIABLE(UC_PROPERTY_PATTERN_SYNTAX) +VARIABLE(UC_PROPERTY_PATTERN_WHITE_SPACE) +VARIABLE(UC_PROPERTY_PRIVATE_USE) +VARIABLE(UC_PROPERTY_PUNCTUATION) +VARIABLE(UC_PROPERTY_QUOTATION_MARK) +VARIABLE(UC_PROPERTY_RADICAL) +VARIABLE(UC_PROPERTY_SENTENCE_TERMINAL) +VARIABLE(UC_PROPERTY_SOFT_DOTTED) +VARIABLE(UC_PROPERTY_SPACE) +VARIABLE(UC_PROPERTY_TERMINAL_PUNCTUATION) +VARIABLE(UC_PROPERTY_TITLECASE) +VARIABLE(UC_PROPERTY_UNASSIGNED_CODE_VALUE) +VARIABLE(UC_PROPERTY_UNIFIED_IDEOGRAPH) +VARIABLE(UC_PROPERTY_UPPERCASE) +VARIABLE(UC_PROPERTY_VARIATION_SELECTOR) +VARIABLE(UC_PROPERTY_WHITE_SPACE) +VARIABLE(UC_PROPERTY_XID_CONTINUE) +VARIABLE(UC_PROPERTY_XID_START) +VARIABLE(UC_PROPERTY_ZERO_WIDTH) +/* Variables declared in uninorm.h */ +VARIABLE(uninorm_nfc) +VARIABLE(uninorm_nfd) +VARIABLE(uninorm_nfkc) +VARIABLE(uninorm_nfkd) +/* Variables declared in unicase.h */ +VARIABLE(unicase_empty_prefix_context) +VARIABLE(unicase_empty_suffix_context) +/* Variables declared in unistring/version.h */ +VARIABLE(_libunistring_version) -- cgit v1.2.3